%global appLoc; %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, type=, msg=, iftrue=%str(1=1) , errds=work.mp_abort_errds , mode=REGULAR )/*/STORE SOURCE*/; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode; %local fref fid i; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mp_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %if %symexist(_SYSINCLUDEFILEDEVICE) /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ and %superq(SYSPROCESSNAME) ne %str(Compute Server) %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; data &errds; iftrue='1=1'; length mac $100 msg $5000; mac=symget('mac'); msg=symget('msg'); run; data _null_; abort cancel FILE; run; %return; %end; %end; /* Web App Context */ %if %symexist(_PROGRAM) or %superq(SYSPROCESSNAME) = %str(Compute Server) or &mode=INCLUDE %then %do; options obs=max replace mprint; %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do; options nosyntaxcheck; %end; %if &mode=INCLUDE %then %do; %if %sysfunc(exist(&errds))=1 %then %do; data _null_; set &errds; call symputx('iftrue',iftrue,'l'); call symputx('mac',mac,'l'); call symputx('msg',msg,'l'); putlog (_all_)(=); run; %if (&iftrue)=0 %then %return; %end; %else %do; %put &sysmacroname: No include errors found; %return; %end; %end; /* extract log errs / warns, if exist */ %local logloc logline; %global logmsg; /* capture global messages */ %if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG; %else %let logloc=%qsysfunc(getoption(LOG)); proc printto log=log;run; %let logline=0; %if %length(&logloc)>0 %then %do; data _null_; infile &logloc lrecl=5000; input; putlog _infile_; i=1; retain logonce 0; if ( _infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR" ) and logonce=0 then do; call symputx('logline',_n_); logonce+1; end; run; /* capture log including lines BEFORE the err */ %if &logline>0 %then %do; data _null_; infile &logloc lrecl=5000; input; i=1; stoploop=0; if _n_ ge &logline-15 and stoploop=0 then do until (i>22); call symputx('logmsg',catx('\n',symget('logmsg'),_infile_)); input; i+1; stoploop=1; end; if stoploop=1 then stop; run; %end; %end; %if %symexist(SYS_JES_JOB_URI) %then %do; /* setup webout for Viya */ options nobomfile; %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; filename _webout temp lrecl=999999 mod; %end; %else %do; filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json" lrecl=999999 mod; %end; %end; %else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do; options nobomfile; /* set up http header for SASjs Server */ %let fid=%sysfunc(fopen(&fref,A)); %if &fid=0 %then %do; %put %str(ERR)OR: %sysfunc(sysmsg()); %return; %end; %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json))); %let rc=%sysfunc(fwrite(&fid)); %let rc=%sysfunc(fclose(&fid)); %let rc=%sysfunc(filename(&fref)); %end; /* send response in SASjs JSON format */ data _null_; file _webout mod lrecl=32000 encoding='utf-8'; length msg syswarningtext syserrortext $32767 mode $10 ; sasdatetime=datetime(); msg=symget('msg'); %if &logline>0 %then %do; msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg')); %end; /* escape the escapes */ msg=tranwrd(msg,'\','\\'); /* escape the quotes */ msg=tranwrd(msg,'"','\"'); /* ditch the CRLFs as chrome complains */ msg=compress(msg,,'kw'); /* quote without quoting the quotes (which are escaped instead) */ msg=cats('"',msg,'"'); if symexist('_debug') then debug=quote(trim(symget('_debug'))); else debug='""'; if symget('sasjsprocessmode')='Stored Program' then mode='SASJS'; if mode ne 'SASJS' then put '>>weboutBEGIN<<'; put '{"SYSDATE" : "' "&SYSDATE" '"'; put ',"SYSTIME" : "' "&SYSTIME" '"'; put ',"sasjsAbort" : [{'; put ' "MSG":' msg ; put ' ,"MAC": "' "&mac" '"}]'; put ",""SYSUSERID"" : ""&sysuserid"" "; put ',"_DEBUG":' debug ; if symexist('_metauser') then do; _METAUSER=quote(trim(symget('_METAUSER'))); put ",""_METAUSER"": " _METAUSER; _METAPERSON=quote(trim(symget('_METAPERSON'))); put ',"_METAPERSON": ' _METAPERSON; end; if symexist('SYS_JES_JOB_URI') then do; SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI'))); put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI; end; _PROGRAM=quote(trim(resolve(symget('_PROGRAM')))); put ',"_PROGRAM" : ' _PROGRAM ; put ",""SYSCC"" : ""&syscc"" "; syserrortext=cats(symget('syserrortext')); if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do; syserrortext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syserrortext) )))))))))))))!!'"'; end; else syserrortext=cats('"',syserrortext,'"'); put ',"SYSERRORTEXT" : ' syserrortext; put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSJOBID"" : ""&sysjobid"" "; put ",""SYSSCPL"" : ""&sysscpl"" "; put ",""SYSSITE"" : ""&syssite"" "; sysvlong=quote(trim(symget('sysvlong'))); put ',"SYSVLONG" : ' sysvlong; syswarningtext=cats(symget('syswarningtext')); if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do; syswarningtext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syswarningtext) )))))))))))))!!'"'; end; else syswarningtext=cats('"',syswarningtext,'"'); put ",""SYSWARNINGTEXT"" : " syswarningtext; put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" '; put "}" ; if mode ne 'SASJS' then put '>>weboutEND<<'; run; %put _all_; %if "&sysprocessmode " = "SAS Stored Process Server " %then %do; data _null_; putlog 'stpsrvset program err and syscc'; rc=stpsrvset('program error', 0); call symputx("syscc",0,"g"); run; %if &sysscp=WIN and 1=0 /* deprecating this logic until we figure out a consistent abort */ and "%substr(%str(&sysvlong ),1,8)"="9.04.01M" and "%substr(%str(&sysvlong ),9,1)">"5" %then %do; /* skip approach (below) does not work in windows m6+ envs */ endsas; %end; %else %do; /** * endsas kills 9.4m3 deployments by orphaning multibridges. * Abort variants are ungraceful (non zero return code) * This approach lets SAS run silently until the end :-) * Caution - fails when called within a %include within a macro * Use mp_include() to handle this. */ filename skip temp; data _null_; file skip; put '%macro skip();'; comment '%mend skip; -> fix lint '; put '%macro skippy();'; comment '%mend skippy; -> fix lint '; run; %inc skip; %end; %end; %else %if "&sysprocessmode " = "SAS Compute Server " %then %do; /* endsas kills the session making it harder to fetch results */ data _null_; syswarningtext=symget('syswarningtext'); syserrortext=symget('syserrortext'); abort_msg=symget('msg'); syscc=symget('syscc'); sysuserid=symget('sysuserid'); iftrue=symget('iftrue'); put (_all_)(/=); call symputx('syscc',0); abort cancel nolist; run; %end; %else %do; %abort cancel; %end; %end; %else %do; %put _all_; %abort cancel; %end; %mend mp_abort; /** @endcond */ %macro mf_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 ' else &&name&i=quote(cats(&&name&i)); '; put ' %end; '; put ' %end; '; put ' run; '; put ' '; put ' filename _sjs3 temp lrecl=131068 ; '; put ' data _null_; '; put ' file _sjs3 encoding=''utf-8''; '; put ' if _n_=1 then put "["; '; put ' set &tempds; '; put ' if _n_>1 then put "," @; put '; put ' %if &action=ARR %then "[" ; %else "{" ; '; put ' %do i=1 %to &numcols; '; put ' %if &i>1 %then "," ; '; put ' %if &action=OBJ %then """&&name&i"":" ; '; put ' "&&name&i"n /* name literal for reserved variable names */ '; put ' %end; '; put ' %if &action=ARR %then "]" ; %else "}" ; ; '; put ' '; put ' /* close out the table */ '; put ' data _null_; '; put ' file _sjs3 mod encoding=''utf-8''; '; put ' put '']''; '; put ' run; '; put ' data _null_; '; put ' infile _sjs3 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs3 clear; '; put ' %end; '; put ' '; put ' proc sql; '; put ' drop table &colinfo, &tempds; '; put ' '; put ' %if %substr(&showmeta,1,1)=Y %then %do; '; put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; '; put ' data _null_; '; put ' file _sjs4; '; put ' length label $350; '; put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; '; put ' do i=1 to &numcols; '; put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); '; put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' if i>1 then put "," @@; '; put ' put name '':{"format":'' format '',"label":'' label '; put ' '',"length":'' length '',"type":'' type ''}''; '; put ' end; '; put ' put ''}}''; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs4 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs4 clear; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=CLOSE %then %do; '; put ' data _null_; file &jref encoding=''utf-8'' mod ; '; put ' put "}"; '; put ' run; '; put '%end; '; put '%mend mp_jsonout; '; put ' '; put '%macro mf_getuser( '; put ')/*/STORE SOURCE*/; '; put ' %local user; '; put ' '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %end; '; put ' %else %if %symexist(_metaperson) %then %do; '; put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* but be sure to quote in case of usernames with commas */ '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); '; put ' %end; '; put ' %else %let user=&sysuserid; '; put ' '; put ' %quote(&user) '; put ' '; put '%mend mf_getuser; '; put '%macro 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 ' call symputx(''input_statement'',_infile_); '; put ' putlog "&&_webin_name&i input statement: " _infile_; '; put ' stop; '; put ' data &&_webin_name&i; '; put ' infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8''; '; put ' input &input_statement; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' if _n_<20 then putlog _infile_; '; put ' %end; '; put ' run; '; put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; '; put ' %end; '; put '%end; '; put ' '; 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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=dirlist; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 '

SAS Macros

'; put '@li mp_dirlist.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global parent;'; put '/* if no flavour is specified, default to root */'; put '%let parent=%sysfunc(coalescec(&parent,/));'; put '%mp_dirlist(path=&parent,outds=dirlist, maxdepth=2)'; put '%webout(OPEN)'; put '%webout(OBJ,dirlist)'; put '%webout(CLOSE)'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let work=%sysfunc(pathname(work));'; put '/* excel does not work in all envs */'; put '%let mime=application/vnd.ms-excel;'; put '%let dbms=EXCEL;'; put '%let mime=application/csv;'; put '%let dbms=CSV;'; put '%let ext=csv;'; put '%macro conditional_export(ds);'; put '%if %mf_nobs(&ds)>0 %then %do;'; put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"'; put 'DBMS=&dbms REPLACE;'; put 'RUN;'; put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(syscc=&syscc after &ds prep)'; put ')'; put '%mend conditional_export;'; put 'ods package(ProdOutput) open nopf;'; put 'data MPE_ALERTS;'; put 'set &mpelib..MPE_ALERTS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ALERTS)'; put 'data MPE_COLUMN_LEVEL_SECURITY;'; put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'where also CLS_LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)'; put 'data MPE_CONFIG;'; put 'set &mpelib..MPE_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_CONFIG)'; put 'data MPE_DATADICTIONARY;'; put 'set &mpelib..MPE_DATADICTIONARY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'if DD_SOURCE=:"&mpelib" then do;'; put '/* nothing */'; put 'end;'; put 'else output;'; put 'run;'; put '%conditional_export(MPE_DATADICTIONARY)'; put 'data MPE_EMAILS;'; put 'set &mpelib..MPE_EMAILS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EMAILS)'; put 'data MPE_EXCEL_CONFIG;'; put 'set &mpelib..MPE_EXCEL_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EXCEL_CONFIG)'; put 'data MPE_GROUPS;'; put 'set &mpelib..MPE_GROUPS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_GROUPS)'; put 'data MPE_ROW_LEVEL_SECURITY;'; put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ROW_LEVEL_SECURITY)'; put 'data MPE_SECURITY;'; put 'set &mpelib..MPE_SECURITY;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_SECURITY)'; put 'data MPE_SELECTBOX;'; put 'set &mpelib..MPE_SELECTBOX;'; put 'where &dc_dttmtfmt. le ver_to_dttm;'; put 'where also select_lib ne "&mpelib";'; put 'drop ver_: selectbox_rk;'; put 'run;'; put '%conditional_export(MPE_SELECTBOX)'; put 'data MPE_TABLES;'; put 'set &mpelib..MPE_TABLES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_TABLES)'; put 'data MPE_VALIDATIONS;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also BASE_LIB ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_VALIDATIONS)'; put '/* finish up zip file */'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name="DCBACKUP.zip" archive_path="&work");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc after zip prep)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&work/DCBACKUP.zip)'; put ',outname=DCBACKUP.zip'; put ')'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '%if &outref=0 %then %do;'; put '%put %str(WAR)NING: Please provide a fileref;'; put '%return;'; put '%end;'; put '%if %mf_existfileref(&outref)=0 %then %do;'; put 'filename &outref temp lrecl=66000;'; put '%end;'; put '%if &schema=0 %then %let schema=;'; put '%else %let schema=&schema..;'; put '%if &outds=0 %then %let outds=%scan(&ds,2,.);'; put '%local nobs;'; put 'proc sql noprint;'; put 'select count(*) into: nobs TRIMMED from &ds;'; put '%if &nobs=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No rows found in &ds */";'; put 'run;'; put '%end;'; put '%local vars;'; put '%let vars=%mf_getvarcount(&ds);'; put '%if &vars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No columns found in &schema.&ds */";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &vars>1600 and &flavour=PGSQL %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &schema.&ds contains &vars vars */";'; put 'put "/* Postgres cannot handle tables with over 1600 vars */";'; put 'put "/* No inserts will be generated for this table */";'; put 'run;'; put '%return;'; put '%end;'; put '%local varlist varlistcomma;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);'; put '/* next, export data */'; put 'data _null_;'; put 'file &outref mod ;'; put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";'; put 'set &ds;'; put '%if &maxobs ne max %then %do;'; put 'if _n_>&maxobs then stop;'; put '%end;'; put 'length _____str $32767;'; put 'call missing(_____str);'; put 'format _numeric_ best.;'; put 'format _character_ ;'; put '%local i comma var vtype vfmt;'; put '%do i=1 %to %sysfunc(countw(&varlist));'; put '%let var=%scan(&varlist,&i);'; put '%let vtype=%mf_getvartype(&ds,&var);'; put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));'; put '%if &i=1 %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put "insert into &schema.&outds set ";'; put 'put " &var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '_____str=cats('; put '"INSERT INTO &schema.&outds ("'; put ',symget(''varlistcomma'')'; put ',") VALUES ("'; put ');'; put 'put _____str;'; put 'put " "@;'; put '%end;'; put '%end;'; put '%else %do;'; put '%if &flavour=SAS %then %do;'; put 'put " ,&var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put " ,"@;'; put '%end;'; put '%end;'; put '%if &vtype=N %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put &var;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'if missing(&var) then put ''NULL'';'; put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"'; put '%then %do;'; put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";'; put '%end;'; put '%else %do;'; put 'else put &var;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";'; put 'put _____str;'; put '%end;'; put '%end;'; put '%if &flavour=SAS %then %do;'; put 'put '';'';'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put '');'';'; put '%end;'; put 'if _n_=&nobs then put /;'; put 'run;'; put '%mend mp_ds2inserts;'; put '%macro mp_lib2inserts(lib'; put ',flavour=SAS'; put ',outref=0'; put ',schema=0'; put ',maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '/* Find the tables */'; put '%local x ds memlist;'; put 'proc sql noprint;'; put 'select distinct lowcase(memname)'; put 'into: memlist'; put 'separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put 'and memtype=''DATA''; /* exclude views */'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '/* create the inserts */'; put '%do x=1 %to %sysfunc(countw(&memlist));'; put '%let ds=%scan(&memlist,&x);'; put '%mp_ds2inserts(&lib..&ds'; put ',outref=&outref'; put ',schema=&schema'; put ',outds=&ds'; put ',flavour=&flavour'; put ',maxobs=&maxobs'; put ',applydttm=&applydttm'; put ')'; put '%end;'; put '%mend mp_lib2inserts;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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_getddl.sas'; put '@li mp_lib2inserts.sas'; put '@li mp_streamfile.sas'; put '@li mpe_getgroups.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global flavour schema;'; put '/* if no flavour is specified, default to SAS */'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '/* if no schema var provided, DC Libref is used */'; put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));'; put '/* check user is in admin group */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'data work.admins;'; put 'set work.usergroups;'; put 'put (_all_)(=);'; put 'run;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%put &=cnt;'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)'; put ')'; put '%mp_getddl(&DC_LIBREF'; put ',flavour=&flavour'; put ',schema=&schema'; put ',applydttm=YES'; put ',fref=tmpref'; put ')'; put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)'; put '%mp_streamfile(contenttype=TEXT'; put ',inref=tmpref'; put ',outname=&dc_libref..ddl'; put ')'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mpe_makedata(lib=,mpeadmins=,path=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &lib..mpe_column_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',CLS_SCOPE=''EDIT'''; put ',CLS_GROUP=''AllUsers'''; put ',CLS_LIBREF="&lib"'; put ',CLS_TABLE=''MPE_LOCKANYTABLE'''; put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD'''; put ',CLS_ACTIVE=1'; put ',CLS_HIDE=0;'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_EMAIL_ALERTS"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc=''YES or NO to enable email alerts. Note - this requires email '''; put '!!''options to be preconfigured! They can be configured in the '''; put '!!''settings stp if needed.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_VIEWLIB_CHECK"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc='; put '''Set to YES to enable library validity checking in viewLibs service.'''; put '!!'' Note: this can make the service very slow if there are lots of '''; put '!!''external libraries. If enabled, this removes empty libraries from '''; put '!!''the viewer library dropdown. To switch off, set to NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MACROS"'; put ',var_value=cats(symget(''path''),"/dc_macros")'; put ',var_active=1'; put ',var_desc=''Location of underlying macros - EUC feature.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MAXOBS_WEBEDIT"'; put ',var_value="100"'; put ',var_active=1'; put ',var_desc=''This sets the maximum number of observations that can be loaded'''; put '!!'' into the browser for editing in the EDIT screen. A higher number'''; put '!!'' will require a decent browser (ie, not IE) and more memory on the'''; put '!!'' client side.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_REQUEST_LOGS"'; put ',var_value="YES"'; put ',var_active=1'; put ',var_desc=''Setting to NO will prevent each request being logged to the'''; put '!!'' MPE_REQUESTS table Default=YES.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_CATS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_CATS;'; put 'index create'; put 'pk_mpe_datacatalog_CATS=(tx_to libref memname)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Ref'','; put 'engine char(32) label=''Library Engine'','; put 'libname char(256) format=$256. label=''Library Name'','; put 'paths char(8192) label=''Library Paths'','; put 'perms char(500) label=''Library Permissions (if BASE)'','; put 'owners char(500) label=''Library Owners (if BASE)'','; put 'schemas char(500) label=''Library Schemas (if DB)'','; put 'libid char(17) label=''LibraryId'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_libs;'; put 'index create'; put 'pk_mpe_datacatalog_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_OBJS('; put 'TX_FROM num ¬null format=datetime19.,'; put 'TX_TO num ¬null format=datetime19.,'; put 'libref char(8) ¬null label=''Library Name'','; put 'memname char(64) ¬null label=''Member Name'','; put 'objname char(32) ¬null label=''Object Name'','; put 'objtype char(8) ¬null label=''Object Type'','; put 'objdesc char(256) label=''Object Description'','; put 'alias char(32) label=''Object Alias'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_OBJS;'; put 'index create'; put 'pk_mpe_datacatalog_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_TABS('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'memtype char(8) label=''Member Type'','; put 'dbms_memtype char(32) label=''DBMS Member Type'','; put 'memlabel char(512) label=''Data Set Label'','; put 'typemem char(8) label=''Data Set Type'','; put 'nvar num label=''Number of Variables'','; put 'compress char(8) label=''Compression Routine'','; put 'pk_fields char(512)'; put 'label=''Primary Key Fields - in a constraint being both Unique and Not Null'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_TABS;'; put 'index create'; put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_vars('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Table Name'','; put 'name char(64) label=''Column Name'','; put 'memtype char(8) label=''Member Type'','; put 'type char(16) label=''Column Type'','; put 'length num label=''Column Length'','; put 'varnum num label=''Column Number in Table'','; put 'label char(512) label=''Column Label'','; put 'format char(49) label=''Column Format'','; put 'idxusage char(9) label=''Column Index Type'','; put 'notnull char(3) label=''Not NULL?'','; put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_vars;'; put 'index create'; put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_CATS('; put 'TX_FROM float format=datetime19.,'; put 'TX_TO float format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'nobjs num ¬null label=''Number of objects'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_CATS;'; put 'index create'; put 'pk_mpe_datastatus_cats=(libref memname tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'libsize num format=SIZEKMG. label=''Size of library'','; put 'table_cnt num label=''Number of Tables'','; put 'catalog_cnt num label=''Number of Catalogs'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_libs;'; put 'index create'; put 'pk_mpe_datastatus_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_OBJS('; put 'TX_FROM float ¬null format=datetime19.,'; put 'TX_TO float ¬null format=datetime19.,'; put 'libref char(8) label=''Library Name'','; put 'memname char(64) label=''Member Name'','; put 'objname char(32) label=''Object Name'','; put 'objtype char(8) label=''Object Type'','; put 'created num ¬null format=DATETIME. label=''Date Created'','; put 'modified num format=DATETIME. label=''Date Modified'','; put 'level num label=''Library Concatenation Level'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_OBJS;'; put 'index create'; put 'pk_mpe_datastatus_OBJS=(libref memname objname objtype tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_tabs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'filesize num format=SIZEKMG. label=''Size of file'','; put 'crdate num format=DATETIME. label=''Date Created'','; put 'modate num format=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 refreshcatalog.sas'; put '@brief Refreshes the library data catalog'; put '@details A library may be passed in a LIBREF url param.'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li dc_refreshcatalog.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref;'; put '%mpeinit()'; put '%dc_refreshcatalog(&libref)'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Catalog Refresh Complete

'';'; put 'run;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 '* 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'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mpe_refreshlibs.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_refreshlibs()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'REVIEW_REASON_TXT=symget(''STP_REASON'');'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.reject;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''REJECTED'','; put 'num_of_approvals_remaining=0,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&now'; put 'where table_id="&table";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc AFTER update...)'; put ')'; put '%mpe_alerts(alert_event=REJECTED'; put ', alert_lib=%scan(&BASE_TABLE,1,.)'; put ', alert_ds=%scan(&BASE_TABLE,2,.)'; put ', dsid=&TABLE'; put ')'; put 'data fromSAS;'; put 'RESPONSE=''SUCCESS!'';'; put 'set REJECT;'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams);'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%macro mpestp_diffs();'; put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put '%then %do;'; put '%mp_abort(msg=%str('; put '&user not authorised to download diffs data for &stp_table)'; put ',mac=mpestp_diffs.sas);'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* stream diffs csv to client */'; put '%mp_streamfile(contenttype=EXCEL'; put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)'; put ',outname=&STP_DIFFS_CSV'; put ')'; put '%mend mpestp_diffs;'; put '%mpestp_diffs()'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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'; put '

SAS Macros

'; put '@li mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table_id=%mf_getvalue(work.iwant,table_id);'; put 'libname loc "&mpelocapprovals/&table_id";'; put 'data stagetable;'; put 'set loc.&table_id;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,stagetable,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro 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_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_loadformat(libcat,libds'; put ',loadtarget=NO'; put ',auditlibds=0'; put ',locklibds=0'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=0'; put ',outds_del=0'; put ',outds_mod=0'; put ',mdebug=0'; put ');'; put '/* set up local macro variables and temporary tables (with a prefix) */'; put '%local err msg prefix dslist i var fmtlist ibufsize;'; put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;'; put '%if &outds_add=0 %then %let dslist=&dslist outds_add;'; put '%if &outds_del=0 %then %let dslist=&dslist outds_del;'; put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;'; put '%let prefix=%substr(%mf_getuniquename(),1,21);'; put '%do i=1 %to %sysfunc(countw(&dslist));'; put '%let var=%scan(&dslist,&i);'; put '%local &var;'; put '%let &var=%upcase(&prefix._&var);'; put '%end;'; put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */'; put '%let libcat=%scan(&libcat,1,-);'; put '/* perform input validations */'; put '%mp_abort('; put 'iftrue=(%mf_existds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&libds could not be found)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(FMTROW not found in &libds)'; put ')'; put '%let err=0;'; put '%let msg=0;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'value=upcase(value);'; put 'if &mdebug=0 then put name ''='' value;'; put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;'; put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'else if name=''LIBCAT'' then do;'; put 'if exist(value,''CATALOG'') le 0 then do;'; put 'call symputx(''msg'',"Unable to open catalog: "!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'end;'; put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))'; put 'and missing(value) then do;'; put 'call symputx(''msg'',"missing value in var: "!!name);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put 'data _null_;'; put 'set &libds;'; put 'if missing(fmtrow) then do;'; put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put '%mp_abort('; put 'iftrue=(&err ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(&msg)'; put ')'; put '%local cnt;'; put 'proc sql noprint;'; put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;'; put '%mp_abort('; put 'iftrue=(&cnt ne %mf_nobs(&libds))'; put ',mac=&sysmacroname'; put ',msg=%str(Non-unique primary key on &libds)'; put ')'; put '/**'; put '* First, extract only relevant formats from the catalog'; put '*/'; put 'proc sql noprint;'; put 'select distinct'; put 'case'; put 'when type=''N'' then upcase(fmtname)'; put 'when type=''C'' then cats(''$'',upcase(fmtname))'; put 'when type=''I'' then cats(''@'',upcase(fmtname))'; put 'when type=''J'' then cats(''@$'',upcase(fmtname))'; put 'else "&sysmacroname:UNHANDLED"'; put 'end'; put 'into: fmtlist separated by '' '''; put 'from &libds;'; put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)'; put '/* get a hash of the row */'; put '%local cvars nvars;'; put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP'; put 'DIG3SEP DATATYPE LANGUAGE;'; put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;'; put 'data &base_fmts/note2err;'; put 'set &base_fmts;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Ensure input table and base_formats have consistent lengths and types'; put '*/'; put 'data &inlibds/nonote2err;'; put 'length &delete_col $3 FMTROW 8 start end label $32767;'; put 'if 0 then set &base_fmts;'; put 'set &libds;'; put 'by type fmtname notsorted;'; put 'if &delete_col='''' then &delete_col=''No'';'; put 'fmtname=upcase(fmtname);'; put 'type=upcase(type);'; put 'if missing(type) then do;'; put 'if substr(fmtname,1,1)=''@'' then do;'; put 'if substr(fmtname,2,1)=''$'' then type=''J'';'; put 'else type=''I'';'; put 'end;'; put 'else do;'; put 'if substr(fmtname,1,1)=''$'' then type=''C'';'; put 'else type=''N'';'; put 'end;'; put 'end;'; put 'if type in (''N'',''I'') then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Identify new records'; put '*/'; put 'proc sql;'; put 'create table &outds_add(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'left join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtname is null'; put 'and upcase(a.&delete_col) ne "YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify modified records'; put '*/'; put 'create table &outds_mod (drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col) ne "YES"'; put 'and a.fmthash ne b.fmthash'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify deleted records'; put '*/'; put 'create table &outds_del(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col)="YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify fully deleted formats (where every record is removed)'; put '* These require to be explicitly deleted in proc format'; put '* del1 - identify _partial_ deletes'; put '* del2 - exclude these, and also formats that come with _additions_'; put '*/'; put 'create table &del1 as'; put 'select a.*'; put 'from &base_fmts a'; put 'left join &outds_del b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtrow is null;'; put 'create table &del2 as'; put 'select * from &outds_del'; put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)'; put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to load prep)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '/* new records plus base records that are not deleted or modified */'; put 'data &ds1;'; put 'merge &base_fmts(in=base)'; put '&outds_mod(in=mod)'; put '&outds_add(in=add)'; put '&outds_del(in=del);'; put 'if not del and not mod;'; put 'by type fmtname fmtrow;'; put 'run;'; put '/* add back the modified records */'; put 'data &stagedata;'; put 'set &ds1 &outds_mod;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put '%end;'; put '/* mp abort needs to run outside of conditional blocks */'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to actual load)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;'; put '%put There are no changes to load in &libcat!;'; put '%return;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* prevent parallel updates */'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT commencing format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* do the actual load */'; put 'proc format lib=&libcat cntlin=&stagedata;'; put 'run;'; put '/* apply any full deletes */'; put '%if %mf_nobs(&del2)>0 %then %do;'; put '%local delfmtlist;'; put 'proc sql noprint;'; put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')'; put 'when type=''C'' then cats(fmtname,''.FORMATC'')'; put 'when type=''J'' then cats(fmtname,''.INFMTC'')'; put 'when type=''I'' then cats(fmtname,''.INFMT'')'; put 'else cats(fmtname,''.BADENTRY!!!'') end'; put 'into: delfmtlist'; put 'separated by '' '''; put 'from &del2;'; put 'proc catalog catalog=&libcat;'; put 'delete &delfmtlist;'; put 'quit;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* unlock the table */'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT completed format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* track the changes */'; put '%if &auditlibds ne 0 %then %do;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%mp_storediffs(&libcat-FC'; put ',&base_fmts'; put ',TYPE FMTNAME FMTROW'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=&storediffs'; put ',mdebug=&mdebug'; put ')'; put 'proc append base=&auditlibds data=&storediffs;'; put 'run;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%end;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc after load)'; put ')'; put '%if &mdebug=0 %then %do;'; put 'proc datasets lib=work;'; put 'delete &prefix:;'; put 'run;'; put '%put &sysmacroname exit vars:;'; put '%put _local_;'; put '%end;'; put '%mend mp_loadformat;'; put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */'; put ',now= %sysfunc(datetime()) /* static processed timestamp */'; put ',etlsource= /* process from whence the data came */'; put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should'; put 'be appended into the target. */'; put ',LOADTARGET=NO /* set to yes to actually load the target */'; put ',CLOSE_VARS= /* provide close vars to override defaults */'; put ',dclib=NOTPROVIDED'; put ',mdebug=0'; put ',dc_dttmtfmt=%sysfunc(datetime())'; put ');'; put '%local lib ds nobs;'; put '/**'; put '* if a format catalog (suffix "-FC") we assume the catalog has already been'; put '* created by the calling program with a libds of work.fmtextract'; put '*/'; put '%let orig_lib=%upcase(%scan(&libds,1,.));'; put '%let orig_ds=%upcase(%scan(&libds,2,.));'; put '%let orig_libds=&libds;'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%let lib=WORK;'; put '%let ds=FMTEXTRACT;'; put '%let libds=&lib..&ds;'; put '%end;'; put '%else %do;'; put '%let lib=&orig_lib;'; put '%let ds=&orig_ds;'; put '%end;'; put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)'; put ',mac=&sysmacroname'; put ',msg=%str(dclib=NOTPROVIDED)'; put ')'; put '/* get table attributes */'; put '%let nobs=0;'; put 'data work.sumo_config;'; put 'set &mpelib..mpe_tables;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&orig_lib"'; put 'and dsn="&orig_ds";'; put 'call symputx(''LOADTYPE'',loadtype,''l'');'; put 'call symputx(''BUSKEY'',buskey,''l'');'; put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');'; put 'call symputx(''VAR_TXTO'',var_txto,''l'');'; put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');'; put 'call symputx(''VAR_BUSTO'',var_busto,''l'');'; put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');'; put '%if %length(&CLOSE_VARS)=0 %then %do;'; put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');'; put '%end;'; put 'call symputx(''nobs'',_n_,''l'');'; put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";'; put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');'; put 'put (_all_)(=);'; put 'run;'; put '/* check if table is actually configured to load */'; put '%if &nobs ne 1 %then %do;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="%mf_getuser()"'; put ',STATUS=''FAILED (BAD DS)'''; put ',CSV_DIR=symget(''ETLSOURCE'')'; put ',PROCESSED_DTTM=&now;'; put '%end;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Table not registered in &mpelib..mpe_tables)'; put ')'; put '%mp_abort(iftrue= (&nobs>1)'; put ',mac=&sysmacroname'; put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)'; put ')'; put '%if &LOADTYPE=TXTEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=&ETLSOURCE'; put ',LOADTYPE=&loadtype'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=REPLACE %then %do;'; put '%if &LOADTARGET=YES %then %do;'; put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put 'data WORK.&STAGING_DS;'; put 'set WORK.&STAGING_DS;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put '&VAR_PROCESSED = &now;'; put '%end;'; put 'drop _____DELETE__THIS__RECORD_____;'; put 'run;'; put 'proc sql; delete * from &libds;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)'; put '%end;'; put '%else %do;'; put '/* is full replace so treat all staged records as new in diff screen */'; put 'data work.outds_mod work.outds_add ;'; put 'set work.&staging_ds;'; put 'output work.outds_add;'; put 'run;'; put '/* previous table will be considered fully deleted */'; put 'data work.outds_del;'; put 'set &lib..&ds;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to='; put ',tech_from= ,tech_to = /* explicitly empty*/'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=UPDATE'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=FORMAT_CAT %then %do;'; put '/**'; put '* run mp_formatload'; put '* inputs:'; put '* - LOADTARGET'; put '* - CATALOG'; put '* - STAGEDATA'; put '* - LOADAUDIT'; put '* outputs:'; put '* work.outds_add'; put '* work.outds_del'; put '* work.outds_mod'; put '*/'; put '%mp_loadformat(&orig_libds'; put ',&staging_ds'; put ',loadtarget=&LOADTARGET'; put ',auditlibds=&AUDIT_LIBDS'; put ',locklibds=&dclib..mpe_lockanytable'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=outds_add'; put ',outds_del=outds_del'; put ',outds_mod=outds_mod'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %if &loadtype=BITEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=BITEMPORAL'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;'; put '%let syscc=4;'; put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)'; put ')'; put '%mend mpe_targetloader;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '* 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 mf_existds.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getengine.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuniquelibref.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_runhook.sas'; put '@li mpe_targetloader.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '/* this could be a config setting if required */'; put '%let maxdiff=100;'; put '%mpeinit()'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''ACTION'',ACTION);'; put 'call symputx(''LOAD_REF'',TABLE);'; put '/* DIFFTIME is when the DIFF was generated on the frontend */'; put 'call symputx(''DIFFTIME'',DIFFTIME);'; put 'putlog (_all_)(=);'; put 'run;'; put '%global action is_err err_msg msg;'; put '%let is_err=0;'; put '%let user=%mf_getuser();'; put '%let sastime=%sysfunc(datetime());'; put 'data sastime;'; put 'dt_sastime=&sastime;'; put 'run;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */'; put '/* so we share much of the logic from the actual load process */'; put '%let isfmtcat=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&LOAD_REF";'; put '/* fetch mpe_submit data */'; put 'libds=cats(base_lib,''.'',base_ds);'; put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);'; put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);'; put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);'; put '/* other stuff that''s useful to do in data step */'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''libds'',libds);'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''isfmtcat'',1);'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* convert provided string DIFFTIME back to a numeric SAS datetime */'; put 'if "&action" ne "SHOW_DIFFS" then do;'; put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));'; put 'end;'; put 'length difftime $32;'; put 'DIFFTIME=put(&sastime,datetime19.2);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&isfmtcat=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: difftime orig_libds libds load_ref)'; put ')'; put '/* security checks */'; put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc Before entering postdata macro)'; put ')'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=&_program'; put ',msg=%str(&user not authorised to view approval screen for &orig_libds)'; put ')'; put '%macro quickmacro(inds,outds);'; put 'data &outds ;'; put '%if %length(&VAR_BUSFROM)>0 %then %do;'; put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;'; put '%end;'; put 'if 0 then set &emptybasetable;'; put 'set &inds;'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;'; put 'drop _____DELETE__THIS__RECORD_____;'; put '%end;'; put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put '%mend quickmacro;'; put '%macro postdata();'; put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)'; put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then'; put '%do;'; put 'data params; set approve1; run;'; put '%webout(OPEN)'; put '%webout(OBJ,PARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if &action=APPROVE_TABLE %then %do;'; put '/* check user is authorised to approve table */'; put '/* user could be an editor but not an approver */'; put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)'; put ',mac=&_program'; put ',msg=%str(&user may not APPROVE changes)'; put ')'; put '/* see if this user has already submitted an approval */'; put '%let prev_upload_check=1;'; put 'proc sql;'; put 'select count(*) into: prev_upload_check from &mpelib..mpe_review'; put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"'; put 'and REVIEW_STATUS_ID ne "SUBMITTED";'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%if &authcheck=0 or &prev_upload_check=1 %then %do;'; put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;'; put 'data apPARAMS;'; put 'AUTHORISED=&authcheck;'; put 'PREV_UPLOAD_CHECK=&prev_upload_check;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '/* now check if table has been updated since DIFF screen shown */'; put '%local fmt_tm usernm last_load etlsource;'; put '%let last_load=0;'; put 'proc sql noprint;'; put 'select max(processed_dttm) format=16.2 into: last_load'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";'; put 'select processed_dttm format=datetime19., user_nm, etlsource'; put 'into: fmt_tm, :usernm, :etlsource'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"'; put 'and processed_dttm=&last_load;'; put '%put TIMECHECK: &last_load>&difftime;'; put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;'; put '%let is_err=1;'; put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource'; put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;'; put '%return;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc before logchange;'; put '%return;'; put '%end;'; put '/* upload about to commence so ensure logs */'; put 'options notes mprint source2;'; put '%local oldloc;'; put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;'; put '%else %let oldloc=%qsysfunc(getoption(LOG));'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put 'data _null_;'; put 'if _n_=1 then do;'; put 'length oldloc $1000;'; put 'oldloc=symget(''oldloc'');'; put 'putlog "****** redirected:" oldloc " *****";'; put 'end;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc after logchange;'; put '%return;'; put '%end;'; put '%end;'; put '/**'; put '* upload the actual table'; put '*/'; put '%local libref ds;'; put '%let libref=%scan(&orig_libds,1,.);'; put '%let ds=%scan(&orig_libds,2,.);'; put 'proc sql noprint;'; put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto'; put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO'; put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)'; put ',VAR_PROCESSED'; put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto'; put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO'; put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT'; put ',:VAR_PROCESSED'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&libref"'; put 'and dsn="&ds";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals orig_libds)'; put ')'; put '/* get dataset from approvals location (has same name as load_ref) */'; put '%let tmplib=%mf_getuniquelibref();'; put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";'; put 'data STAGING_DS;'; put 'set &tmplib..&LOAD_REF;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc before preapprove)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */'; put '%mpe_runhook(PRE_APPROVE_HOOK)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after preapprove)'; put ')'; put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'data apReqd;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apReqd);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering TARGETLOADER)'; put ')'; put '%mpe_targetloader(libds=&orig_libds'; put ',now= &sastime'; put ',etlsource=&LOAD_REF'; put ',STAGING_DS=STAGING_DS'; put ',dclib=&mpelib'; put '%if &action=APPROVE_TABLE %then %do;'; put ',LOADTARGET=YES'; put '%end;'; put '%else %do;'; put ',LOADTARGET=NO'; put '%end;'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;'; put '/* empty dataset! */'; put 'data out;'; put 'set STAGING_DS;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering SHOWDIFFS)'; put ')'; put '%if &action=SHOW_DIFFS %then %do;'; put '/**'; put '* Now prepare the SHOW DIFFS (approve) screen'; put '*/'; put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first'; put 'need to find out what version TIME to query it for.. */'; put 'proc sql noprint;'; put 'select max(processed_dttm)-1 format=datetime19. into: tstamp'; put 'from &mpelib..mpe_dataloads'; put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";'; put 'quit;'; put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);'; put '/**'; put '* now create the DIFFS dataset'; put '* If using a database, then utilise pass through!'; put '* Create a temporary table inside the database for joins..'; put '*/'; put 'options mprint;'; put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));'; put '%put &libds engine type = &engine_type;'; put '%local inner_table ;'; put '%if &engine_type=OLEDB %then %do;'; put '/* generate a unique ID for the temporary table */'; put 'data _null_;'; put 'call symputx(''UNIQUE_REF'''; put ',cats(round(datetime(),1)'; put ',''_'''; put ',round(ranuni(0)*100000,1)'; put ')'; put ',''l'''; put ');'; put 'run;'; put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;'; put 'proc sql;'; put 'create table &inner_table as'; put 'select * from work.outds_mod;'; put '%end;'; put '%else %let inner_table=work.outds_mod;'; put 'proc sql;'; put 'create view work.originals2 as'; put 'select b.*'; put 'from &inner_table a'; put 'inner join &libds'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '(where=("&tstamp"dt < &VAR_TXTO))'; put '%end;'; put 'b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&buskey));'; put '%let idx_val=%scan(&buskey,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'create view bitemp5c_updates2 as'; put 'select * from work.outds_mod'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'options varlenchk=nowarn; /* for small numerics (<8) */'; put '%quickmacro(work.outds_del,deleted)'; put '%quickmacro(work.outds_add,new)'; put '%quickmacro(bitemp5c_updates2,updates)'; put '%quickmacro(originals2,originals)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc in quickmacro)'; put ')'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=work.updates'; put 'out=cols (keep=name type length varnum format);'; put 'run;'; put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;'; put 'data cols; set cols; name=upcase(name);run;'; put '%let tempDIFFS_CSV=tempDiffs_%trim('; put '%sysfunc(datetime(),flatdate.)).csv;'; put '/**'; put '* Store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '*/'; put 'data TEMPDIFFS (compress=no) /* for realistic file size */;'; put 'length _____status $10;'; put 'set work.deleted (in=_____del)'; put 'work.new(in=_____new)'; put 'work.updates (in=_____upd)'; put 'work.originals2 (in=_____orig);'; put 'if _____del then _____status=''DELETED '';'; put 'else if _____new then _____status=''NEW'';'; put 'else if _____upd then _____status=''UPDATED'';'; put 'else if _____orig then _____status=''ORIGINAL'';'; put 'run;'; put 'proc export data=TEMPDIFFS dbms=csv replace'; put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;'; put 'run;'; put 'proc sql noprint;'; put 'select filesize format=sizekmg10.1, filesize as filesize_raw'; put 'into: filesize,:filesize_raw'; put 'from dictionary.tables'; put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';'; put 'data params;'; put 'set approve1;'; put 'DIFFS_CSV="&tempDIFFS_CSV";'; put 'FILESIZE="&filesize";'; put 'FILESIZE_RAW=&filesize_raw;'; put 'if %mf_nobs(work.originals)>&maxdiff'; put 'or %mf_nobs(work.new)>&maxdiff'; put 'or %mf_nobs(work.deleted)>&maxdiff'; put 'or %mf_nobs(work.updates)>&maxdiff'; put 'then TRUNCATED="YES";'; put 'else TRUNCATED="NO";'; put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);'; put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);'; put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);'; put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);'; put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;'; put 'ISAPPROVER=''YES'';'; put '%end;'; put '%else %do;'; put 'ISAPPROVER=''NO'';'; put '%end;'; put 'run;'; put '/*'; put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.'; put '* To ensure consistency in the DIFF screen, we should apply the same formats'; put '* to the base table. Limit rows at the same time.'; put '*/'; put 'data work.originals;'; put 'if 0 then set deleted new updates;'; put 'set work.originals;'; put 'if _n_>&maxdiff then stop;'; put 'run;'; put '/* get additional submits against the same base table */'; put 'proc sort data=&mpelib..mpe_submit(where=('; put 'submit_status_cd=''SUBMITTED'''; put 'and cats(base_lib,''.'',base_ds)="&orig_libds"'; put 'and table_id ne "&LOAD_REF"'; put ')) out=submits;'; put 'by descending submitted_on_dttm;'; put 'run;'; put '/* filter last 10 */'; put 'data submits;'; put 'set submits;'; put 'if _n_>10 then stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,params)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,submits)'; put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)'; put '/* need same for formatted view */'; put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%if &engine_type=OLEDB %then %do;'; put 'proc sql; /* needs to be dropped AFTER view execution */'; put 'drop table &inner_table;'; put '%end;'; put '%return;'; put '%end;'; put '%if &action=APPROVE_TABLE %then %do;'; put '%approve:'; put '/**'; put '* store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '* for REPLACE loads, temp tables not made, so make them'; put '*/'; put '%if &LOADTYPE=REPLACE %then %do;'; put 'data work.outds_add; run;'; put 'data work.outds_mod; run;'; put 'data work.outds_del; run;'; put '%end;'; put 'libname approve "&mpelocapprovals/&LOAD_REF";'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'data approve.ActualDiffs;'; put 'length _____STATUS_____ $10;'; put 'if 0 then set &emptybasetable;'; put 'set work.outds_del (in=_____del)'; put 'work.outds_add (in=_____new)'; put 'work.outds_mod (in=_____upd);'; put 'if _____del then _____STATUS_____=''DELETED'';'; put 'else if _____new then _____STATUS_____=''NEW'';'; put 'else if _____upd then _____STATUS_____=''UPDATED'';'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put 'proc export data=approve.ActualDiffs'; put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control table to show table as approved */'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''APPROVED'','; put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* run post-approve hook */'; put '%mpe_runhook(POST_APPROVE_HOOK)'; put 'data apPARAMS;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'DIFFTIME="&difftime";'; put 'if &syscc=0 then RESPONSE=''SUCCESS!'';'; put 'else response="SYSCC=&syscc.";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program 582'; put ',msg=%superq(msg)'; put ')'; put '%mpe_alerts(alert_event=APPROVED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&LOAD_REF'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mend postdata;'; put '%postdata()'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort(iftrue= (&is_err=1)'; put ',mac=&_program'; put ',msg=%superq(err_msg)'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro 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 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=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 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_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li CLS_RULE - values include:'; put '- EDIT - the column is editable'; put '- READ - the column should be readonly'; put '- HIDE - the column should be hidden'; put '@li memlabel'; put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label'; put '@li longdesc - from MPE_DATADICTIONARY'; put '
maxvarlengths
'; put '
xl_rules
'; put '
query
'; put '
versions
'; put 'history of DC versions for this particular table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getgroupmembers.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getvarlist.sas'; put '@li mf_existds.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getmaxvarlengths.sas'; put '@li mp_validatecol.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getlabels.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@li mpe_runhook.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length filter_rk 8;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put 'call symputx(''orig_libds'',upcase(libds));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds filter_rk)'; put ')'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further calls will return col metadata and actual data'; put '*/'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '/**'; put '* First check user has access permission to edit the table'; put '*/'; put '%put checking access;'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)'; put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)'; put ',mac=mpestp_getdata.sas'; put ',msg=&user is not authorised to edit &orig_libds %trim('; put ')in the &mpelib..MPE_SECURITY table'; put ')'; put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)'; put ',mac=mpestp_getdata.sas'; put ',msg=dataset &libds does not exist!!'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at line 60 )'; put ')'; put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype'; put 'sortpk;'; put '%put getting table attributes;'; put 'proc sql noprint;'; put 'select upcase(loadtype)'; put ',var_txfrom,var_txto'; put ',var_busfrom,var_busto'; put ',var_processed,rk_underlying,buskey'; put ',coalesce(rk_underlying,buskey)'; put ',pre_edit_hook'; put ',case when missing(rk_underlying) then buskey else rk_underlying end'; put 'into: loadtype,:var_txfrom,:var_txto'; put ',:var_busfrom ,:var_busto'; put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt TX_TO'; put 'and upcase(dsn)="%scan(&orig_libds,2,.)"'; put 'and upcase(libref)="%scan(&orig_libds,1,.)";'; put '%put preparing filter query:;'; put '%mpe_filtermaster(EDIT,&orig_libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%macro mpestp_getdata();'; put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBEDIT;'; put '%let DC_MAXOBS_WEBEDIT=500;'; put '%end;'; put '/* for tables which use RKs/SKs then we just expose the business key to'; put 'users - this lets uploads be sent to multiple environments (with'; put 'potentially different RK/SK values for the same business key).'; put 'Note that the config table has the RK column in the buskey field in'; put 'this scenario. */'; put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;'; put '%else %let drop_rk=;'; put '/* always remove the PROCESSED_DTTM column, if it exists */'; put '%if %length(&var_processed)=0 %then %do;'; put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then'; put '%let var_processed=PROCESSED_DTTM;'; put '%end;'; put '/**'; put '* Now get the slice of the actual table'; put '*/'; put 'options obs=10000;'; put '%if &loadtype=BITEMPORAL %then %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'proc sort data=out;'; put 'by &pk &var_busfrom;'; put 'run;'; put 'data out;'; put 'set out;'; put 'by &pk &var_busfrom;'; put 'if last.%scan(&pk,-1);'; put 'run;'; put '%end;'; put '%else %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%end;'; put 'options obs=max;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue with filtering (line 165) )'; put ')'; put 'options obs=&DC_MAXOBS_WEBEDIT;'; put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));'; put 'proc sort data=work.out; by &sortPK; run;'; put 'options obs=max;'; put '%mpe_runhook(PRE_EDIT_HOOK)'; put '%let obscnt=%mf_getattrn(work.out,NLOBS);'; put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)'; put ',mac=&_program'; put ',msg=Table is too big (&obscnt rows) - please filter and try again!'; put ')'; put '/* order delete var and pk fields at start of table */'; put '%let sourcevars=%mf_wordsInStr1ButNotStr2('; put 'Str1=%mf_getvarlist(work.out)'; put ',Str2= _____DELETE__THIS__RECORD_____ &pk'; put ');'; put '%put sourcevars=&sourcevars;'; put 'data outdata;'; put '/* delete & pk fields come first */'; put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';'; put '/* keep remaining variable order */'; put '%if %length(&sourcevars)>0 %then %do;'; put 'attrib &sourcevars label='''';'; put '%end;'; put '_____DELETE__THIS__RECORD_____="No ";'; put '%if %mf_nobs(work.out)=0 %then %do;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put '%end;'; put 'set work.out ;'; put 'run;'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=outdata'; put 'out=vars(keep=name type length varnum format: label);'; put 'run;'; put 'proc sort;'; put 'by varnum;'; put 'run;'; put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");'; put 'if type2=2 or type2=6 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''num'';'; put 'end;'; put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))'; put 'then PK=''YES'';'; put 'length ctrlOptions $500;'; put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';'; put 'else ctrlOptions='''';'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n'; put '%superq(syserrortext)'; put ')'; put ')'; put '%global jsdttmvars jsdtvars jstmvars;'; put 'data _null_;'; put 'set vars3 end=last;'; put 'if _n_>1 then comma='','';'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(comma,''{"data":"'',name,''"'');'; put 'if ctrlOptions ne '''' then'; put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");'; put 'else if type=''num'' then do;'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then do;'; put 'colType=cats(coltype'; put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat datetimes in javascript format */'; put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',&col as tmp_order'; put 'from &lib..&ds'; put 'order by tmp_order;'; put '/* ensure both numerics and char vals are ordered correctly */'; put 'data work.dqdata&x (drop=tmp_order);'; put 'set work.dqdata&x;'; put 'selectbox_order=_n_;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata,missing=STRING)'; put '%webout(OBJ,dqrules)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,maxvarlengths)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,xl_rules)'; put '%webout(CLOSE)'; put '/*'; put '$N8601Bw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'DATEw'; put 'DATEAMPMw'; put 'DATETIMEw'; put 'DAYw'; put 'DDMMYYw'; put 'DDMMYYxw'; put 'DOWNAMEw'; put 'DTDATEw'; put 'DTMONYYw'; put 'DTWKDATXw'; put 'DTYEARw'; put 'DTYYQCw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put 'HHMMw'; put 'HOURw'; put 'JULDAYw'; put 'JULIANw'; put 'MMDDYYw'; put 'MMDDYYxw'; put 'MMSSw'; put 'MMYYw'; put 'MMYYxw'; put 'MONNAMEw'; put 'MONTHw'; put 'MONYYw'; put 'PDJULGw'; put 'PDJULIw'; put 'QTRw'; put 'QTRRw'; put 'TIMEw'; put 'TIMEAMPMw'; put 'TODw'; put 'WEEKDATEw'; put 'WEEKDATXw'; put 'WEEKDAYw'; put 'WEEKUw'; put 'WEEKVw'; put 'WEEKWw'; put 'WORDDATEw'; put 'WORDDATXw'; put 'YEARw'; put 'YYMMw'; put 'YYMMxw'; put 'YYMMDDw'; put 'YYMMDDxw'; put 'YYMONw'; put 'YYQw'; put 'YYQxw'; put 'YYQRw'; put 'YYQRxw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put '*/'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getservicecode.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_include.sas'; put '@li mp_validatecol.sas'; put '@li mf_getapploc.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put '%let err_msg=;'; put 'data work.intest;'; put 'set work.SASCONTROLTABLE;'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put '/* validate varname */'; put 'is_name=nvalid(variable_nm,''v7'');'; put 'putlog (_all_)(=);'; put 'if is_libds ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else if is_name ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''variable_nm'',variable_nm);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after reading work.sascontroltable)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(&err_msg)'; put ')'; put '%dc_assignlib(READ,%scan(&libds,1,.))'; put '/* ensure that work.dynamic_extended_values exists */'; put 'data work.dynamic_extended_values;'; put 'run;'; put '/**'; put '* Get the code to execute'; put '*/'; put 'data work.codetest;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and base_lib="%scan(&libds,1,.)"'; put 'and base_ds="%scan(&libds,2,.)"'; put 'and base_col="&variable_nm"'; put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')'; put 'and RULE_ACTIVE=1;'; put 'putlog (_all_)(=);'; put 'if length(rule_value)>1 then do;'; put 'call symputx(''pgmloc'',rule_value);'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'output;'; put 'stop;'; put 'end;'; put 'else stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)'; put ',mac=&_program'; put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)'; put ')'; put '%macro getdynamiccolvals();'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '%mend getdynamiccolvals;'; put '%getdynamiccolvals()'; put '/* execute the dynamic code */'; put '%mp_include(sascode)'; put '%mp_abort(mode=INCLUDE)'; put '/* ensure that the DISPLAY_INDEX variable exists */'; put 'data work.dynamic_values;'; put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_values;'; put 'display_index=coalesce(display_index,_n_);'; put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;'; put 'run;'; put '/* ensure that work.dynamic_extended_values exists with correct types */'; put 'data work.dynamic_extended_values;'; put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1'; put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_extended_values;'; put 'run;'; put '%webout(OPEN)'; put '%webout(ARR,dynamic_values,fmt=N)'; put '%webout(ARR,dynamic_extended_values,fmt=N)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro 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 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=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_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro 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 '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);'; put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;'; put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;'; put '%return;'; put '%end;'; put '/* presence of a period(.) indicates a physical location */'; put '%if %index(&in,.) %then %let in="&in";'; put '%if %index(&out,.) %then %let out="&out";'; put '/**'; put '* convert all cr and crlf within quotes to lf'; put '* convert all other cr or lf to crlf'; put '*/'; put 'data _null_;'; put 'infile &in recfm=n ;'; put 'file &out recfm=n;'; put 'retain isq iscrlf 0 qchar &qchar;'; put 'input inchar $char1. ;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'if isq then do;'; put '/* inside a quote change cr and crlf to lf */'; put 'if inchar=''0D''x then do;'; put 'put ''0A''x;'; put 'input inchar $char1.;'; put 'if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else put inchar $char1.;'; put 'end;'; put 'else do;'; put '/* outside a quote, change cr and lf to crlf */'; put 'if inchar=''0D''x then do;'; put 'crblank:'; put 'put ''0D0A''x;'; put 'input inchar $char1.;'; put 'if inchar=''0D''x then do;'; put '/* multiple CR indicates CR formatted file with blank lines */'; put 'goto crblank;'; put 'end;'; put 'else if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else if inchar=''0A''x then put ''0D0A''x;'; put 'else put inchar $char1.;'; put 'end;'; put 'run;'; put '%mend mp_cleancsv;'; put '/** @endcond */'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table dlm;'; put '%mpeinit(fetch=NO)'; put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2'; put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;'; put '%macro load();'; put '%if %mf_getplatform()=SASVIYA %then %do;'; put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;'; put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; put '%if "&_webin_fileuri1" ne "" %then %do;'; put '%put &=_webin_fileuri1;'; put 'filename sjfref1 filesrvc "&_webin_fileuri1";'; put '%let _WEBIN_FILEREF1=sjfref1;'; put '%end;'; put '%if "&_webin_fileuri2" ne "" %then %do;'; put '%put &=_webin_fileuri2;'; put 'filename sjfref2 filesrvc "&_webin_fileuri2";'; put '%let _WEBIN_FILEREF2=sjfref2;'; put '%end;'; put '%end;'; put '%mend load;'; put '%load()'; put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));'; put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));'; put '%let abort=0;'; put '/* we do not know if the excel file will be first or second fileref */'; put 'data _null_;'; put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));'; put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));'; put 'if ext1=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME1'');'; put 'csvref=symget(''_WEBIN_FILEREF1'');'; put 'xlsname=symget(''_WEBIN_FILENAME2'');'; put 'xlsref=symget(''_WEBIN_FILEREF2'');'; put 'end;'; put 'else if ext2=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME2'');'; put 'csvref=symget(''_WEBIN_FILEREF2'');'; put 'xlsname=symget(''_WEBIN_FILENAME1'');'; put 'xlsref=symget(''_WEBIN_FILEREF1'');'; put 'end;'; put 'else call symputx(''abort'',1);'; put 'call symputx(''csvname'',csvname);'; put 'call symputx(''csvref'',csvref);'; put 'call symputx(''xlsname'',xlsname);'; put 'call symputx(''xlsref'',coalescec(xlsref,''0''));'; put 'run;'; put '%mp_abort(iftrue= (&abort=1)'; put ',mac=&_program'; put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!'; put '(Comma separated with .csv extension))'; put ')'; put '%let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '%let table=%upcase(%trim(&table));'; put '/* load parameters */'; put 'data _null_;'; put 'libds=upcase(symget(''table''));'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''orig_lib'',scan(libds,1,''.''));'; put 'call symputx(''orig_ds'',scan(libds,2,''.''));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '/* check that the user has the requisite access */'; put '%mpe_getgroups(user=&user,outds=groups)'; put 'proc sql;'; put 'create table accesscheck as'; put 'select * from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select sas_group from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="EDIT"'; put 'and ('; put '(libref="&orig_lib" and dsn="&orig_ds")'; put 'or (libref="&orig_lib" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="&orig_ds")'; put '));'; put '%let nobs=;'; put 'select count(*) into: nobs from &syslast;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)'; put ')'; put '%dc_assignlib(WRITE,&orig_lib)'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=loadfile'; put ',msg=%str(Issue assigning library &orig_lib)'; put ')'; put '%global txfrom txto processed rk;'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where libref="&orig_lib" and dsn="&orig_ds";'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'call symputx(''processed'',var_processed);'; put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);'; put 'run;'; put '%mp_lockfilecheck(libds=&orig_libds)'; put 'data compare;'; put 'set &libds(drop=&txfrom &txto &processed &rk);'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 80)'; put ')'; put '/* get line terminator, assume it''s the first cr, lf, or crlf */'; put 'data _null_;'; put 'length text $32767 term $4;'; put 'call missing (of _all_);'; put 'fid=fopen("&csvref",''I'',32767,''b'');'; put 'rc=fread(fid);'; put 'rc2=fget(fid,text,32767);'; put 'cr=find(text,''0D''x );'; put 'lf=find(text,''0A''x );'; put 'crlf=find(text,''0D0A''x);'; put 'rc=fclose(fid);'; put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';'; put 'else term=''CR'';'; put 'call symputx(''termstr'',term);'; put 'run;'; put 'data _null_;'; put 'infile &csvref lrecl=32000 dsd termstr=&termstr;'; put 'input;'; put 'length incols_unsorted $32000 dlm $1;'; put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');'; put '/* dlm has length 1 so will be the first non alpha / digit char */'; put '/* expectation is that there will not be any crazy characters in first col! */'; put 'dlm=compress(incols_unsorted,''_ '',''ad'');'; put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');'; put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');'; put 'call symputx(''incols_unsorted'',incols_unsorted);'; put 'call symputx(''dlm'',dlm);'; put 'putlog incols_unsorted=;'; put 'putlog dlm=;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 99)'; put ')'; put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));'; put '%let missing_cols=%trim('; put '%mf_wordsInStr1ButNotStr2('; put 'Str1=&basecols'; put ',Str2=&incols_unsorted'; put '));'; put '%let msg='; put 'Expected cols: &basecols'; put '
Received cols: &incols_unsorted'; put '
Missing cols: &missing_cols'; put ';'; put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%superq(msg)'; put ')'; put '%let msg=0;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder and redirect the log */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* clean embedded line breaks and force CRLF line endings */'; put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue in mp_cleancsv)'; put ')'; put '%put; %put; %put log is being redirected;'; put '%let url=_program=%substr(&_program'; put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%put &url;'; put '%put;'; put '/* proc printto log="&dir/weblog.txt";run; */'; put 'libname approve "&dir";'; put 'options mprint;'; put '%put &=mperef;'; put '%put &=termstr;'; put '%put &=dlm;'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%quote(File upload: %superq(csvname))'; put ',dlm=%superq(dlm)'; put ',url=%superq(url)'; put ',termstr=CRLF'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename outref "&dir/BKP_&xlsname";'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc when backing up source file &xlsname)'; put ')'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro 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 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=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_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro 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 '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_ds2csv.sas'; put '@li mp_stripdiffs.sas'; put '@li mpeinit.sas'; put '@li mpe_checkrestore.sas'; put '@li mpe_loader.sas'; put '

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'run;'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=Restoring &loadref'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data work.restore_out;'; put 'loadref="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,restore_out)'; put '%webout(CLOSE)'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro 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 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=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_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro 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 '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'''; put ',''NLDATM'') then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'vlen=varlen(dsid,i);'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put '/**'; put '* there is not much point importing a short length numeric like this,'; put '* eg with best4., as the resulting variable will still be stored as'; put '* length 8. We need a length or format statement to ensure variable'; put '* is creatd with the smaller length...'; put '**/'; put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%local vlen&i;'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mf_getplatform.sas'; put '@li removecolsfromwork.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global approver; %let approver=;'; put '%global libref; %let libref=;'; put '%global dsn; %let dsn=;'; put '%global user; %let user=;'; put '%let user=%mf_getuser();'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''action'',action);'; put 'call symputx(''message'',message);'; put 'libds=upcase(libds);'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further jquery calls will return col metadata and'; put 'actual data */'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc - unable to assign library &libref)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals libds)'; put ')'; put '%put Verify that the upload does not violate Row Level Security checks:;'; put '%mpe_filtermaster(ULOAD,&libds,'; put 'dclib=&mpelib,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during filtering process)'; put ')'; put '/* prepare inverse query */'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'file &tempref;'; put 'if _n_=1 then put ''where not('';'; put 'input;'; put 'put _infile_;'; put 'if eof then put '')'';'; put 'run;'; put '/* apply the query */'; put 'data work.badrecords;'; put 'set work.jsdata;'; put '%inc &tempref/source2;;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)'; put ',mac=&_program'; put ',msg=%str('; put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted'; put ')'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/**'; put '* Create package folder and redirect the log'; put '*/'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* get web url */'; put '%global url;'; put '%let url=localhost/SASStoredProcess;'; put '%let platform=%mf_getplatform();'; put '%put &=platform;'; put 'data _null_;'; put 'length url $128;'; put '%macro stagedata();'; put '%if &platform=SASVIYA %then %do;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname/SASJobExecution";'; put 'end;'; put 'else url="&systcpiphostname/SASJobExecution";'; put '%end;'; put '%else %if &platform=SASMETA %then %do;'; put 'rc=METADATA_GETURI("Stored Process Web App",url);'; put '%end;'; put '%mend stagedata;'; put '%stagedata()'; put 'call symputx(''url'',url);'; put 'putlog url=;'; put 'run;'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* redirect the log */'; put '%put; %put; %put log is being redirected;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%let url=&url?_program=%substr(&_program'; put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;'; put '%put &url;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to log redirection)'; put ')'; put 'proc printto log="&dir/weblog.txt";run;'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of webin file */'; put 'data _null_;'; put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');'; put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */'; put 'else ref=''indata1'';'; put 'call symputx(''ref'',ref);'; put 'putlog ref=;'; put 'run;'; put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'set jsdata;'; put 'run;'; put '/**'; put '* mf_getvarXXX functions will fail if the target is locked - so take a copy'; put '* and reference that (this will also explicitly throw the lock situation)'; put '*/'; put '%let dscopy=work.dscopy;'; put 'data &dscopy;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue getting lock on &libds)'; put ')'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/&orig_libds..csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%superq(message)'; put ',approver=%quote(%trim(&approver))'; put ',url=%superq(url)'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'url="&url";'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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 '

SAS Macros

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

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/* ignore scope and group for validation */'; put 'proc sql;'; put 'create table work.batches as'; put 'select distinct upcase(rls_libref) as rls_libref,'; put 'upcase(rls_table) as rls_table,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from work.staging_ds'; put 'where rls_active=1'; put 'order by rls_libref, rls_table;'; put '%let cnt=0;'; put 'data _null_;'; put 'set work.batches;'; put 'by rls_libref rls_table;'; put 'putlog (_all_)(=);'; put 'if last.rls_table then do;'; put 'x+1;'; put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));'; put 'call symputx(''cnt'',x);'; put 'end;'; put 'run;'; put '%macro quickloop();'; put '%do i=1 %to &cnt;'; put 'data work.inds&i;'; put 'set work.batches;'; put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";'; put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm'; put 'raw_value;'; put 'run;'; put '%dc_assignlib(READ,%scan(&&libds&i,1,.))'; put '%mp_filtercheck(work.inds&i'; put ',targetds=&&libds&i'; put ',outds=work.badrecords'; put ',abort=YES'; put ')'; put '%end;'; put '%mend quickloop;'; put '%quickloop()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 '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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 '/* check for valid loadtype */'; put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* force correct BUSKEY and DSN when loading format catalogs */'; put 'if LOADTYPE=''FORMAT_CAT'' then do;'; put 'BUSKEY=''TYPE FMTNAME FMTROW'';'; put 'DSN=scan(dsn,1,''-'')!!''-FC'';'; put 'end;'; put '/* convert tabs into spaces */'; put 'buskey=translate(buskey," ","09"x);'; put 'rk_underlying=translate(rk_underlying," ","09"x);'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '/* get distinct list of audit libs */'; put 'proc sql;'; put 'create table work.liblist as'; put 'select distinct audit_libds'; put 'from work.staging_ds'; put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put '/* assign the libs */'; put 'data _null_;'; put 'set work.liblist;'; put 'call symputx(cats(''lib'',_n_),audit_libds);'; put 'libref=scan(audit_libds,1,''.'');'; put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');'; put 'run;'; put '/* check the audit tables exist */'; put 'data _null_;'; put 'set work.liblist;'; put 'if exist(audit_libds,"DATA")=0 then do;'; put 'call symputx(''errmsg'','; put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."'; put ');'; put 'call symputx(''errflag'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 '* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mpe_checkrestore(load_ref,'; put 'outresult=ALLOW_RESTORE,'; put 'outreason=REASON'; put ');'; put '%global &outresult &outreason;'; put '%let &outresult=NO;'; put '%let &outreason=NOTFOUND;'; put '/* check if there is actually a version to restore */'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &dc_libref..mpe_audit'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No entry for &load_ref in MPE_AUDIT;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let allow_restore=YES;'; put '%let reason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%local libds;'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let allow_restore=NO;'; put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let allow_restore=YES;'; put '%let reason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%mf_getvalue(work.iwant,libds);'; put '%dc_assignlib(READ,%scan(&ds,1,.))'; put 'proc contents noprint data=&ds'; put 'out=droplist1 (keep=name type length label varnum format:);'; put 'run;'; put 'data cols(keep=name type length varnum format label);'; put 'set droplist1(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else if formatd=0 then format=cats(format2,formatl,''.'');'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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_getvalue.sas'; put '@li mf_verifymacvars.sas'; put '@li dc_assignlib.sas'; put '@li mf_getvarformat.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_filtercheck.sas'; put '@li mp_filtergenerate.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd.'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* input table may or may not exist */'; put 'data work.initvars;'; put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $32767;'; put 'call missing(of _all_);'; put 'stop;'; put 'data work.filterquery;'; put 'set %sysfunc(ifc('; put '%mf_existds(work.filterquery)=1'; put ',work.filterquery'; put ',work.initvars'; put '));'; put 'run;'; put '/* print data for debugging */'; put 'data _null_;'; put 'set work.iwant;'; put 'put (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set work.filterquery;'; put 'put (_all_)(=);'; put 'run;'; put '%let libds=%mf_getvalue(work.iwant,libds);'; put '%let col2=%mf_getvalue(work.iwant,col);'; put '%let is_fmt=0;'; put '%let startrow=1;'; put '%let rows=4000;'; put '%put &=libds;'; put '%put &=col2;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )'; put ')'; put '%dc_assignlib(WRITE,%scan(&libds,1,.))'; put 'data _null_;'; put 'call missing(startrow,rows);'; put 'set work.iwant;'; put '/* check if the request is for a format catalog */'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''startrow'',coalesce(startrow,&startrow));'; put 'call symputx(''rows'',coalesce(rows,&rows));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/**'; put '* Validate the filter query'; put '*/'; put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)'; put '/**'; put '* Prepare the query'; put '*/'; put '%mp_filtergenerate(work.filterquery,outref=myfilter)'; put '/* cannot %inc in a sql where clause, only data step, so - use a view */'; put 'data work.vw_vals/view=work.vw_vals;'; put 'set &libds;'; put 'where %inc myfilter;;'; put 'run;'; put 'proc sql;'; put 'create view work.vw_vals_sorted as'; put 'select distinct'; put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,'; put '&col2 as unformatted'; put 'from work.vw_vals;'; put '/* restrict num of output values */'; put 'data work.vals;'; put 'set work.vw_vals_sorted;'; put 'if _n_ ge &startrow;'; put 'x+1;'; put 'if x>&rows then stop;'; put 'drop x;'; put 'run;'; put 'data vals;'; put '/* ensure empty value if table is empty, for dropdowns */'; put 'if nobs=0 then output;'; put 'set vals nobs=nobs;'; put 'format unformatted ;'; put 'output;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.vw_vals_sorted;'; put 'data meta;'; put 'column="&col2";'; put 'sasformat="%mf_getVarFormat(&libds,&col2)";'; put 'startrow=&startrow;'; put 'rows=&rows;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,vals,missing=STRING,showmeta=YES)'; put '%webout(OBJ,meta)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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_getddl.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref ds flavour;'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '%mpeinit()'; put '%dc_assignlib(READ,&libref)'; put 'data _null_;'; put '/* check if the request is for a format catalog */'; put 'ds=symget(''ds'');'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'libds=cats(symget(''libref''),''.'',ds);'; put 'putlog "Format Catalog Captured";'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'call symputx(''libref'',''work'');'; put 'call symputx(''ds'',''fmtextract'');'; put 'end;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)'; put ',mac=&_program'; put ',msg=%str(Dataset &libref..&ds was not found)'; put ')'; put '%let tmploc=%sysfunc(pathname(work))/temp.txt;'; put 'filename tmp "&tmploc";'; put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)'; put '%mp_streamfile(contenttype=TEXT'; put ',inloc=%str(&tmploc)'; put ',outname=&libref._&ds..ddl'; put ')'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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 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=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 '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mf_existfeature.sas'; put '@li dc_assignlib.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_streamfile.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table type filter ds format is_fmt txfrom txto;'; put '%mpeinit()'; put '%let user=%mf_getuser();'; put '%let is_fmt=0;'; put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid inputs: type table)'; put ')'; put '%let libds=%upcase(&table); /* actual source */'; put '%let table=%upcase(&table); /* used as label for fmt catalogs */'; put '%let lib=%scan(&table,1,.);'; put '%let ds=%scan(&table,2,.);'; put '%dc_assignlib(READ,&lib)'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";'; put '/* if a TXTEMPORAL table then filter as such */'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'run;'; put '/* if a format, extract relevant info */'; put 'data _null_;'; put 'ds=symget(''ds'');'; put 'is_fmt=0;'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'table=cats("&lib..",ds);'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'call symputx(''table'',table);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&table'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%put preparing query;'; put '%mpe_filtermaster(DLOAD,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put 'options obs=200000;/* stop limit */'; put 'data staged(drop=&txfrom &txto);'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'options obs=max;'; put 'options validvarname=upcase;'; put '%macro mpestp_getrawdata();'; put '%local outfile;'; put '%if &type=SAS %then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..sas;'; put '%mp_ds2cards(base_ds=staged'; put ', tgt_ds=&table'; put ', cards_file= "&outfile"'; put ', maxobs=100000)'; put '%let ext=sas;'; put '%let mimetype=text;'; put '%end;'; put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)'; put '/* cannot proc export excel if PC Files is not licensed */'; put '%then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..csv;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '%let ext=csv;'; put '%let mimetype=csv;'; put '%end;'; put '%else %if &type=EXCEL %then %do;'; put '%let ext=xlsx;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=xlsx ;'; put 'RUN;'; put '%let mimetype=XLSX;'; put '%end;'; put '%else %if &type=MARKDOWN %then %do;'; put '%let ext=md;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'filename mdref "&outfile" lrecl=32767;'; put '%mp_ds2md(staged,outref=mdref,showlog=NO)'; put '%let mimetype=MARKDOWN;'; put '%end;'; put '%else %if &type=WEBCSV %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %if &type=WEBTAB %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=tab REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %do;'; put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_streamfile(contenttype=&mimetype'; put ',inloc=%str(&outfile)'; put ',outname=&table..&ext'; put ')'; put '%mend mpestp_getrawdata;'; put '%mpestp_getrawdata()'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data work.bitemp5a_lkp (keep=&md5_col)'; put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'set work.bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[&temp_table];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'run;'; put '%macro mstp_mpeditorstartup();'; put 'data _null_;'; put 'putlog "entering &sysmacroname";'; put 'run;'; put 'proc sql noprint;'; put '/* update last seen, if seen */'; put '%if &isregistered>0 %then %do;'; put 'update &mpelib..mpe_users'; put 'set last_seen_dt=%sysfunc(today())'; put 'where user_id="&userid";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem updating &mpelib..mpe_users table)'; put ')'; put '%local all_cnt;'; put 'select count(*) into: all_cnt'; put 'from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and ACCESS_LEVEL in (''EDIT'')'; put 'and libref=''*ALL*'''; put 'and SAS_GROUP in (select groupname from groups);'; put '%if &admin_check >0 or &all_cnt>0 %then %do;'; put 'create table sasDatasets as'; put 'select distinct libref, dsn'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'order by 1;'; put '%end;'; put '%else %do;'; put 'create table sasDatasets as'; put 'select distinct a.libref,a.dsn'; put 'from &mpelib..mpe_tables a'; put 'left join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn'; put 'where &dc_dttmtfmt. lt a.tx_to'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL in (''EDIT'')'; put 'and b.SAS_GROUP in (select groupname from groups)'; put 'order by 1;'; put '%end;'; put '%mend mstp_mpeditorstartup;'; put '%mstp_mpeditorstartup()'; put 'create table saslibs as'; put 'select distinct libref'; put 'from &syslast;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue with security validation)'; put ')'; put 'proc sql;'; put 'create table work.xlmaps as'; put 'select distinct a.XLMAP_ID'; put ',b.XLMAP_DESCRIPTION'; put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")'; put 'as XLMAP_TARGETLIBDS'; put 'from &mpelib..MPE_XLMAP_RULES a'; put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.XLMAP_ID=b.XLMAP_ID'; put 'where &dc_dttmtfmt. lt a.tx_to;'; put '/* we don''t want the XLMAP target datasets to be directly editable */'; put 'delete from sasdatasets'; put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);'; put '%webout(OPEN)'; put '%webout(OBJ,sasDatasets)'; put '%webout(OBJ,saslibs)'; put '%webout(OBJ,globvars)'; put '%webout(ARR,xlmaps)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro 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 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=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_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_hashdataset('; put 'libds,'; put 'outds=work._data_,'; put 'salt=,'; put 'iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local keyvar /* roll up the md5 */'; put 'prevkeyvar /* retain prev record md5 */'; put 'lastvar /* last var in input ds */'; put 'cvars nvars;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '/* avoid naming conflict for hash key vars */'; put '%let keyvar=%mf_getuniquename();'; put '%let prevkeyvar=%mf_getuniquename();'; put '%let lastvar=%mf_getuniquename();'; put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;'; put 'data &outds;'; put 'length hashkey $32;'; put 'hashkey=put(md5("&salt"),$hex32.);'; put 'output;'; put 'stop;'; put 'run;'; put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;'; put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;'; put '%end;'; put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;'; put '%put %str(ERR)OR: Dataset &libds is not a dataset;'; put '%end;'; put '%else %do;'; put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'length &prevkeyvar &keyvar $32;'; put 'retain &prevkeyvar;'; put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);'; put 'set &libds end=&lastvar;'; put '/* hash should include previous row */'; put '&keyvar=%mp_md5('; put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,'; put 'nvars=%mf_getvarlist(&libds,typefilter=N)'; put ');'; put '&prevkeyvar=&keyvar;'; put 'if &lastvar then output;'; put 'run;'; put '%end;'; put '%mend mp_hashdataset;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '%macro mp_filterstore(libds=,'; put 'queryds=work.filterquery,'; put 'filter_summary=PERM.FILTER_SUMMARY,'; put 'filter_detail=PERM.FILTER_DETAIL,'; put 'lock_table=PERM.LOCK_TABLE,'; put 'maxkeytable=PERM.MAXKEYTABLE,'; put 'outresult=work.result,'; put 'outquery=work.query,'; put 'mdebug=1'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;'; put '%let libds=%upcase(&libds);'; put '%let orig_libds=&libds;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro entry)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_summary value: &filter_summary)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_detail value: &filter_detail)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid lock_table value: &lock_table)'; put ')'; put '/**'; put '* validate query'; put '* use format catalog export, if a format'; put '*/'; put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;'; put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */'; put '%let ds0=%mf_getuniquename(prefix=fmtds_);'; put '%let libds=&ds0;'; put '/*'; put 'There is no need to export the entire format catalog here - the validations'; put 'are done against the data model, not the data values. So we can simply'; put 'hardcode the structure based on the cntlout dataset.'; put '*/'; put '%mddl_sas_cntlout(libds=&ds0)'; put '%end;'; put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)'; put '/* hash the result */'; put '%let ds1=%mf_getuniquename(prefix=hashds);'; put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)'; put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'putlog "filter_hash=&filter_hash";'; put 'set &ds1;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '/* check if data already exists for this hash */'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc after hash check)'; put ')'; put '%mp_abort(iftrue= ("&filter_hash "=" ")'; put ',mac=mp_filterstore'; put ',msg=%str(problem with filter_hash generation)'; put ')'; put '%if %mf_nobs(&outresult)=0 %then %do;'; put '/* first update summary table */'; put '%let ds3=%mf_getuniquename(prefix=filtersum);'; put 'data work.&ds3;'; put 'if 0 then set &filter_summary;'; put 'filter_table="&orig_libds";'; put 'filter_hash="&filter_hash";'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%let ds4=%mf_getuniquename(prefix=filtersumappend);'; put '%mp_retainedkey('; put 'base_lib=%scan(&filter_summary,1,.)'; put ',base_dsn=%scan(&filter_summary,2,.)'; put ',append_lib=work'; put ',append_dsn=&ds3'; put ',retained_key=filter_rk'; put ',business_key=filter_hash'; put ',maxkeytable=&maxkeytable'; put ',locktable=&lock_table'; put ',outds=work.&ds4'; put ')'; put 'proc append base=&filter_summary data=&ds4;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds4;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '/* Next, update detail table */'; put '%let ds2=%mf_getuniquename(prefix=filterdetail);'; put 'data &ds2;'; put 'if 0 then set &filter_detail;'; put 'set &queryds;'; put 'format filter_hash $hex32. filter_line 8.;'; put 'filter_hash="&filter_hash";'; put 'filter_line=_n_;'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put 'proc append base=&filter_detail data=&ds2;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE detail update &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put '%end;'; put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;'; put 'by filter_line;'; put 'run;'; put '%err:'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro exit)'; put ')'; put '%mend mp_filterstore;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 mf_getvalue.sas'; put '@li mp_filterstore.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));'; put '%dc_assignlib(WRITE,%scan(&ds,1,.))'; put '%mp_filterstore('; put 'libds=&ds,'; put 'queryds=work.filterquery,'; put 'filter_summary=&dc_libref..mpe_filteranytable,'; put 'filter_detail=&dc_libref..mpe_filtersource,'; put 'lock_table=&dc_libref..mpe_lockanytable,'; put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,'; put 'outresult=work.result,'; put 'outquery=work.query, /* not used */'; put 'mdebug=1'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put 'proc sql;'; put 'alter table work.result drop PROCESSED_DTTM;'; put '%webout(OPEN)'; put '%webout(OBJ,result)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mpe_dsmeta(libds, outds=dsmeta);'; put '%local ddsd ddld notes lenstmt memname;'; put '%let lenstmt=length ods_table $18 name $100 value $1000;'; put '%let libds=%upcase(&libds);'; put '%if "%scan(&libds,2,-)" ne "FC" %then %do;'; put '%let memname=%scan(&libds,2,.);'; put '%mp_dsmeta(&libds, outds=&outds)'; put '%end;'; put '%else %do;'; put '%let memname=%scan(&libds,2,.-);'; put 'data &outds;'; put '&lenstmt;'; put 'set sashelp.vcatalg;'; put 'ods_table=cats(objtype);'; put 'name=cats(objname);'; put 'value=catx('' '',objdesc,''(modified:'',put(modified,datetime19.),'')'');'; put 'where libname="%scan(&libds,1,.)" and memname="&memname";'; put 'keep ods_table name value;'; put 'run;'; put 'proc sort; by ods_table name;run;'; put '%end;'; put 'data _null_;'; put 'set &mpelib..mpe_datadictionary;'; put 'where &dc_dttmtfmt < tx_to & dd_source="&memname" & dd_type=''TABLE'';'; put 'call symputx(''ddsd'',dd_shortdesc,''l'');'; put 'call symputx(''ddld'',dd_longdesc,''l'');'; put 'run;'; put 'data &outds;'; put '&lenstmt;'; put 'if last then do;'; put 'ODS_TABLE=''MPE_DATADICTIONARY'';'; put 'NAME=''DD_SHORTDESC'';'; put 'VALUE="&ddsd";'; put 'output;'; put 'NAME=''DD_LONGDESC'';'; put 'VALUE="&ddld";'; put 'output;'; put 'end;'; put 'set &outds end=last;'; put 'output;'; put 'run;'; put 'data _data_;'; put 'set &mpelib..mpe_tables;'; put 'where libref="%scan(&libds,1,.)"'; put '& dsn="%scan(&libds,2,.)"'; put '& &dc_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 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=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 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 '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mp_searchdata(lib='; put ',ds='; put ',string= /* the query will use a contains (?) operator */'; put ',numval= /* numeric must match exactly */'; put ',outloc=0'; put ',outlib=MPSEARCH'; put ',outobs=-1'; put ',filter_text=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local table_list table table_num table colnum col start_tm check_tm vars type'; put 'coltype;'; put '%put process began at %sysfunc(datetime(),datetime19.);'; put '%if &syscc ge 4 %then %do;'; put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;'; put '%return;'; put '%end;'; put '%if &string = %then %let type=N;'; put '%else %let type=C;'; put '%if "&outloc"="0" %then %do;'; put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();'; put '%end;'; put '%mf_mkdir(&outloc)'; put 'libname &outlib "&outloc";'; put '/* get the list of tables in the library */'; put 'proc sql noprint;'; put 'select distinct memname into: table_list separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put '%if &ds ne %then %do;'; put 'and upcase(memname)=%upcase("&ds")'; put '%end;'; put ';'; put '/* check that we have something to check */'; put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;'; put '/* loop through each table */'; put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));'; put '%let table=%scan(&table_list,&table_num,%str( ));'; put '%let vars=%mf_getvarlist(&lib..&table);'; put '%if %length(&vars)=0 %then %do;'; put '%put NO COLUMNS IN &lib..&table! This will be skipped.;'; put '%end;'; put '%else %do;'; put '%let check_tm=%sysfunc(datetime());'; put '/* prep input */'; put 'data &outlib..&table;'; put 'set &lib..&table;'; put 'where %unquote(&filter_text) and ( 0'; put '/* loop through columns */'; put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let col=%scan(&vars,&colnum,%str( ));'; put '%let coltype=%mf_getvartype(&lib..&table,&col);'; put '%if &type=C and &coltype=C %then %do;'; put '/* if a char column, see if it contains the string */'; put 'or ("&col"n ? "&string")'; put '%end;'; put '%else %if &type=N and &coltype=N %then %do;'; put '/* if numeric match exactly */'; put 'or ("&col"n = &numval)'; put '%end;'; put '%end;'; put ');'; put '%if &outobs>-1 %then %do;'; put 'if _n_ > &outobs then stop;'; put '%end;'; put 'run;'; put '%put Search query for &table took'; put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;'; put '%if &syscc ne 0 %then %do;'; put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;'; put '%return;'; put '%end;'; put '%if %mf_nobs(&outlib..&table)=0 %then %do;'; put 'proc sql;'; put 'drop table &outlib..&table;'; put '%end;'; put '%end;'; put '%end;'; put '%put process finished at %sysfunc(datetime(),datetime19.);'; put '%mend mp_searchdata;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put '

Service Outputs

'; put '
cols
'; put '@li DDTYPE'; put '@li FORMAT'; put '@li LABEL'; put '@li LENGTH'; put '@li NAME'; put '@li TYPE'; put '@li VARNUM'; put '
sasparams
'; put '@li FILTER_TEXT'; put '@li NOBS'; put '@li PK_FIELDS - string seperated list of primary key fields, if they exist'; put '@li TABLENAME'; put '@li TABLEURI'; put '@li VARS'; put '
versions
'; put 'history of DC versions for this particular table'; put '
viewdata
'; put 'The raw data from the target table.'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_createdataset.sas'; put '@li dc_gettableid.sas'; put '@li mf_existds.sas'; put '@li mf_getvarcount.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_getcols.sas'; put '@li mp_getpk.sas'; put '@li mp_jsonout.sas'; put '@li mp_searchdata.sas'; put '@li mp_validatecol.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_dsmeta.sas'; put '@li mpe_getversions.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* configure macvars */'; put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;'; put '%let maxrows=250;'; put '/* avoid code injection */'; put '%let FMT_IND=0;'; put '%let SEARCHTYPE=;'; put '%let SEARCHVAL=;'; put '%let FILTER_RK=;'; put '%let LIBDS=;'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;'; put 'set work.SASCONTROLTABLE;'; put 'call symputx(''orig_libds'',libds);'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put '/* check if the request is for a format catalog */'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''fmt_ind'',1);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if searchtype in (''CHAR'',''NUM'') then do;'; put 'searchval=tranwrd(searchval,''%'','''');'; put 'searchval=tranwrd(searchval,''&'','''');'; put 'searchval=tranwrd(searchval,'';'','''');'; put 'searchval=tranwrd(searchval,''"'','''');'; put 'call symputx(''searchtype'',searchtype);'; put 'call symputx(''searchval'',searchval);'; put 'end;'; put 'else if searchtype not in ('''',''NONE'') then do;'; put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;'; put 'stop;'; put 'end;'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem with macro inputs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/**'; put '* assign the Library'; put '*/'; put '%dc_assignlib(READ,%scan(&LIBDS,1,.))'; put '/* abort if looking for a format and the catalog doesn''t exist */'; put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)'; put ',mac=&_program..sas'; put ',msg=%str(Catalog &libds does not exist!)'; put ')'; put '/**'; put 'check if dataset can actually be opened - as library may exist but it may not'; put 'be possible to assign, and even if it can, the physical table may not exist'; put '**/'; put 'data _null_;'; put 'if &fmt_ind=0 then do;'; put 'dsid=open("&libds");'; put 'rc=close(dsid);'; put 'end;'; put 'else dsid=42;'; put 'call symputx(''existds'',dsid,''l'');'; put 'putlog ''dataset exists check:'' dsid;'; put 'run;'; put '/**'; put '* get the data'; put '*/'; put '%global dsobs;'; put '%let dsobs=0;'; put '%macro x();'; put '%if &existds>0 %then %do;'; put '%if &fmt_ind=1 %then %do;'; put '/* export format and point the libds to the output table from here on */'; put '%mp_cntlout('; put 'libcat=&libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%let libds=WORK.FMTEXTRACT;'; put 'proc datasets lib=work noprint;'; put 'modify FMTEXTRACT;'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%end;'; put 'proc sql noprint;'; put 'select count(*) into: dsobs from &libds;'; put '%put preparing query;'; put '%mpe_filtermaster(VIEW,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;'; put '/* get row count */'; put 'filename rows temp;'; put 'data _null_;'; put 'file rows;'; put 'infile filtref end=eof;'; put 'input;'; put 'if _n_=1 then do;'; put 'put ''proc sql;'';'; put 'put "select count(*) into: dsobs from &libds where";'; put 'end;'; put 'put _infile_;'; put 'if eof then put '';'';'; put 'run;'; put 'data _null_;'; put 'infile rows;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%inc rows;'; put '/* send actual data, filtered and row-capped */'; put 'data work.viewdata;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'if _n_>&maxrows then stop;'; put 'run;'; put '%if %mf_nobs(work.viewdata)=0 %then %do;'; put 'data work.viewdata;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put 'set work.viewdata;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data work.vwsearch/view=work.vwsearch;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%if %upcase(&searchtype)=CHAR %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',string=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%else %if %upcase(&searchtype)=NUM %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',numval=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;'; put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);'; put 'data viewdata;'; put 'set MPSEARCH.vwsearch;'; put 'if _n_<&maxrows;'; put 'run;'; put '%end;'; put '%else %do;'; put '%let dsobs=0;'; put 'data viewdata;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '/* physical table is not accessible so create from metatadata definition */'; put '%dc_createdataset(libds=&libds,outds=viewdata)'; put 'data viewData;'; put 'output;'; put 'set viewdata;'; put 'run;'; put '/* make filtref / work.query / work.groups to avoid downstream issues */'; put 'filename filtref temp;'; put 'data work.query;'; put 'file filtref;'; put 'x=0;'; put 'put x;'; put 'run;'; put 'data work.groups;'; put 'length groupuri groupname $32 groupdesc $128 ;'; put 'call missing (of _all_);'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%mend x; %x()'; put '/* apply column level security */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata'; put ',mode=VIEW'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.viewdata2'; put ',outmeta=work.cls_rules'; put ')'; put '/* get table uri (if sas 9) to enable linking direct to lineage */'; put '%dc_gettableid(libref=%scan(&libds,1,.)'; put ',ds=%scan(&libds,2,.)'; put ',outds=work.parambase'; put ')'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)'; put '%let pk_fields=;'; put 'data _null_;'; put 'set work.pk_fields;'; put 'call symputx(''pk_fields'',pk_fields);'; put 'run;'; put 'data work.sasparams;'; put 'set work.parambase;'; put 'format FILTER_TEXT $32767.;'; put 'FILTER_TEXT=symget(''FILTER_TEXT'');'; put 'length PK_FIELDS $512;'; put 'PK_FIELDS=symget(''PK_FIELDS'');'; put 'nobs=&dsobs;'; put 'vars=%mf_getvarcount(viewdata);'; put 'maxrows=&maxrows;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols)'; put '%mpe_dsmeta(&orig_libds, outds=dsmeta)'; put '%mpe_getversions(&mpelib,'; put '%scan(&orig_libds,1,.),'; put '%scan(&orig_libds,2,.),'; put 'outds=versions'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cls_rules)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,versions)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuniquename.sas'; put '@li mp_abort.sas'; put '@li mp_validatecol.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlibds=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlibds=%mf_getuniquename();'; put '%let var_is_libds=%mf_getuniquename();'; put 'data _null_;'; put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8'; put 'xl_table base_ds select_ds rls_table cls_table dsn $32;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=symget(''libds'');'; put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"'; put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);'; put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"'; put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);'; put 'else if &varlibds="&mpelib..MPE_SELECTBOX"'; put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_TABLES"'; put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);'; put '/* validate libds */'; put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)'; put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlibds" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)'; put ')'; put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))'; put 'proc contents noprint data=&tgtlibds'; put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );'; put 'run;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.DYNAMIC_VALUES;'; put 'raw_value=upcase(display_value);'; put 'format raw_value;'; put 'run;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libraryname as display_value,'; put 'upcase(libraryref) as raw_value'; put 'from work.mm_getLibs'; put 'order by 1;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libref as display_value,'; put 'upcase(libref) as raw_value'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. < tx_to'; put 'order by 1;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )'; put ',mac=&_program'; put ',msg=%str('; put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)'; put ')'; put ')'; put 'proc sql;'; put 'create table work.source as'; put 'select libref,dsn'; put 'from &DC_LIBREF..MPE_TABLES'; put 'where tx_to > &dc_dttmtfmt.'; put 'order by 1,2;'; put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);'; put 'set work.source end=last;'; put 'by libref;'; put 'if last.libref then do;'; put 'display_index+1;'; put 'raw_value=libref;'; put 'display_value=libref;'; put 'output;'; put 'end;'; put 'if last then do;'; put 'display_index+1;'; put 'raw_value=''*ALL*'';'; put 'display_value=''*ALL*'';'; put 'output;'; put 'end;'; put 'run;'; put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type'; put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);'; put 'set work.source end=last;'; put 'by libref dsn;'; put 'retain extra_col_name ''ALERT_DS'';'; put 'retain display_type ''C'';'; put 'retain raw_value_num .;'; put 'raw_value_char=dsn;'; put 'display_value=dsn;'; put 'forced_value=0;'; put 'if first.libref then display_index+1;'; put 'if last.libref then do;'; put 'display_value=''*ALL*'';'; put 'raw_value_char=''*ALL*'';'; put 'forced_value=1;'; put 'output;'; put 'end;'; put 'else output;'; put 'run;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8;'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else putlog "something unexpected happened";'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'proc sql;'; put 'create table work.source as'; put 'select upcase(memname) as memname'; put ',upcase(name) as name'; put ',type'; put 'from dictionary.columns'; put 'where libname="&TGTLIB"'; put 'and memtype=''DATA'';'; put 'create table work.members as'; put 'select distinct memname as display_value'; put 'from work.source;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.members;'; put 'raw_value=display_value;'; put 'display_index=_n_;'; put 'run;'; put 'proc sql;'; put 'create table work.dynamic_extended_values as'; put 'select a.display_index'; put ',b.name as display_value'; put ',"C" as display_type'; put ',b.name as RAW_VALUE_CHAR'; put ',. as RAW_VALUE_NUM'; put 'from work.dynamic_values a'; put 'left join work.source b'; put 'on a.display_value=b.memname'; put 'where b.type=''num'';'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'extra_col_name=''VAR_PROCESSED'';output;'; put 'extra_col_name=''VAR_TXFROM'';output;'; put 'extra_col_name=''VAR_TXTO'';output;'; put 'extra_col_name=''VAR_BUSFROM'';output;'; put 'extra_col_name=''VAR_BUSTO'';output;'; put 'run;'; put '/* set some force flags */'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'forced_value=0;'; put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;'; put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;'; put 'run;'; put 'proc sort;'; put 'by extra_col_name display_index;'; put 'run;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '|DISPLAY_VALUE:$|RAW_VALUE:??|'; put '|---|---|'; put '|$44.00|44|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct cats(some_num) as display_value,'; put 'some_num as raw_value'; put 'from &libds'; put 'order by 1;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '**/'; put '%dc_getgroups(outds=groups)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct groupname as display_value,'; put 'groupname as raw_value'; put 'from work.groups'; put 'order by 1;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro 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 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=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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlib=RLS_LIBREF;'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlib=CLS_LIBREF;'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'data members; /* empty table */'; put 'name='' '';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&tgtlib ;'; put 'run;'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct name as display_value,'; put 'upcase(name) as raw_value'; put 'from work.members'; put 'where MemType=''DATA'''; put 'order by 1;'; put '* Service end;'; run; %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 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file 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 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro 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 ') %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, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro 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._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '/* turn off with dsoptions=nonote2err */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put '/* extracted in dc_getsettings */'; put 'dc_activation_key'; put 'dc_licence_key'; put 'dc_locale'; put 'dc_request_logs'; put 'dc_restrict_viewer'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug /* automatic variable when provided in URL */'; put 'sasjs_mdebug /* used to show extra info when _debug is enabled */'; put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"'; put '%then %do;'; put '%let sasjs_mdebug=1;'; put '%end;'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put 'and &DC_REQUEST_LOGS ne NO'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put '/* sleep random amount to avoid parallel update attempts */'; put 'call sleep(ranuni(0)*0.1,1);'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* 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.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|'; put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'data _null_;'; put 'var=symget(''variable_nm'');'; put 'libds=symget(''libds'');'; put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;'; put 'call symputx(''srccol'',''XL_LIBREF'');'; put 'end;'; put 'else call symputx(''srccol'',''libref'');'; put 'run;'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct dsn as display_value,'; put 'upcase(dsn) as raw_value'; put 'from &mpelib..mpe_tables'; put '(where=(&dc_dttmtfmt. < tx_to))'; put 'where libref in (select &srccol from work.source_row)'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=411.26896d93e056dcb9-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 ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz''@;'; put 'put ''MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09''@;'; put 'put ''ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j''@;'; put 'put ''dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp''@;'; put 'put ''PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKHQpfSx6ZT1udWxsLGd0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gZ2EoZSl7Zm9yKHZhciB0PSIiLHI9MCxhPTAsbj0wLGk9MCxzPTAsZj0wLGM9MCxvPTA7bzxlLmxlbmd0''@;'; put 'put ''aDspaT0ocj1lLmNoYXJDb2RlQXQobysrKSk+PjIscz0oMyZyKTw8NHwoYT1lLmNoYXJDb2RlQXQobysrKSk+PjQsZj0oMTUmYSk8PDJ8KG49ZS5jaGFyQ29kZUF0KG8rKykpPj42LGM9NjMmbixpc05hTihhKT9mPWM9NjQ6aXNOYU4obikmJihjPTY0KSx0Kz1ndC5jaGFyQXQoaSkrZ3QuY2hh''@;'; put 'put ''ckF0KHMpK2d0LmNoYXJBdChmKStndC5jaGFyQXQoYyk7cmV0dXJuIHR9ZnVuY3Rpb24gT3IoZSl7dmFyIHQ9IiIsaT0wLHM9MCxmPTAsYz0wO2U9ZS5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoOylpPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSks''@;'; put 'put ''cz1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaTw8MnxzPj40KSw2NCE9PShmPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkpJiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcyk8PDR8Zj4+MikpLDY0IT09KGM9Z3QuaW5kZXhPZihlLmNoYXJB''@;'; put 'put ''dChvKyspKSkmJih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJmYpPDw2fGMpKTtyZXR1cm4gdH12YXIgU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lv''@;'; put 'put ''bnMubm9kZX0oKSxvdD1mdW5jdGlvbigpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgZT0hQnVmZmVyLmZyb207aWYoIWUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7ZT0hMH1yZXR1cm4gZT9mdW5jdGlvbih0LHIpe3JldHVybiByP25ldyBCdWZmZXIodCxyKTpuZXcg''@;'; put 'put ''QnVmZmVyKHQpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlcil9cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKTtmdW5jdGlvbiBfdChlKXtyZXR1cm4gU2U/QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhlKTpuZXcgQnVmZmVyKGUpOnR5cGVvZiBVaW50OEFycmF5PCJ1Ij9uZXcgVWludDhBcnJheShl''@;'; put 'put ''KTpuZXcgQXJyYXkoZSl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvY1Vuc2FmZT9CdWZmZXIuYWxsb2NVbnNhZmUoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFycmF5KGUpfXZhciBJcj1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gU2U/b3QodCwiYmluYXJ5Iik6dC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAyNTUmci5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHd0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKGEpfSkuam9pbigiIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gTTAoZSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw''@;'; put 'put ''cG9ydGVkIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBNMChuZXcgVWludDhBcnJheShlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXTtyZXR1cm4gdH12YXIgZnI9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1''@;'; put 'put ''ZmZlci5jb25jYXQoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpfTpmdW5jdGlvbihlKXtpZih0eXBlb2YgVWludDhBcnJheTwidSIpe3ZhciB0PTAscj0wO2Zvcih0PTA7dDxlLmxlbmd0aDsrK3Qpcis9ZVt0XS5sZW5ndGg7dmFyIGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkociksbj0wO2Zvcih0PTAscj0wO3Q8ZS5sZW5ndGg7cis9biwrK3QpaWYobj1lW3RdLmxlbmd0aCxlW3RdaW5zdGFuY2VvZiBVaW50OEFycmF5KWEuc2V0KGVbdF0scik7ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pdGhyb3cid3RmIjthLnNldChuZXcgVWludDhB''@;'; put 'put ''cnJheShlW3RdKSxyKX1yZXR1cm4gYX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpbXS5zbGljZS5jYWxsKGkpfSkpfSxkcj0vXHUwMDAwL2csd2E9L1tcdTAwMDEtXHUwMDA2XS9nO2Z1bmN0aW9uIGVhKGUpe2Zv''@;'; put 'put ''cih2YXIgdD0iIixyPWUubGVuZ3RoLTE7cj49MDspdCs9ZS5jaGFyQXQoci0tKTtyZXR1cm4gdH1mdW5jdGlvbiBZcihlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxl''@;'; put 'put ''bmd0aD49dD9yOmplKCIgIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIGEwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpyK2plKCIgIix0LXIubGVuZ3RoKX12YXIgaWk9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gZT5paXx8ZTwtaWk/ZnVuY3Rp''@;'; put 'put ''b24gYmMoZSx0KXt2YXIgcj0iIitNYXRoLnJvdW5kKGUpO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfShlLHQpOmZ1bmN0aW9uIFBjKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oTWF0aC5yb3VuZChl''@;'; put 'put ''KSx0KX1mdW5jdGlvbiBuMChlLHQpe3JldHVybiBlLmxlbmd0aD49NysodD10fHwwKSYmMTAzPT0oMzJ8ZS5jaGFyQ29kZUF0KHQpKSYmMTAxPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMSkpJiYxMTA9PSgzMnxlLmNoYXJDb2RlQXQodCsyKSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzMpKSYm''@;'; put 'put ''MTE0PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNCkpJiY5Nz09KDMyfGUuY2hhckNvZGVBdCh0KzUpKSYmMTA4PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNikpfXZhciBzaT1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0s''@;'; put 'put ''WyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxXMD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsi''@;'; put 'put ''SiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV0scGU9ezA6IkdlbmVyYWwi''@;'; put 'put ''LDE6IjAiLDI6IjAuMDAiLDM6IiMsIyMwIiw0OiIjLCMjMC4wMCIsOToiMCUiLDEwOiIwLjAwJSIsMTE6IjAuMDBFKzAwIiwxMjoiIyA/Lz8iLDEzOiIjID8/Lz8/IiwxNDoibS9kL3l5IiwxNToiZC1tbW0teXkiLDE2OiJkLW1tbSIsMTc6Im1tbS15eSIsMTg6Img6bW0gQU0vUE0iLDE5OiJo''@;'; put 'put ''Om1tOnNzIEFNL1BNIiwyMDoiaDptbSIsMjE6Img6bW06c3MiLDIyOiJtL2QveXkgaDptbSIsMzc6IiMsIyMwIDsoIywjIzApIiwzODoiIywjIzAgO1tSZWRdKCMsIyMwKSIsMzk6IiMsIyMwLjAwOygjLCMjMC4wMCkiLDQwOiIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLDQ1OiJtbTpzcyIs''@;'; put 'put ''NDY6IltoXTptbTpzcyIsNDc6Im1tc3MuMCIsNDg6IiMjMC4wRSswIiw0OToiQCIsNTY6JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJ30sZmk9ezU6MzcsNjozOCw3OjM5LDg6NDAsMjM6MCwyNDowLDI1OjAsMjY6MCwyNzoxNCwy''@;'; put 'put ''ODoxNCwyOToxNCwzMDoxNCwzMToxNCw1MDoxNCw1MToxNCw1MjoxNCw1MzoxNCw1NDoxNCw1NToxNCw1NjoxNCw1NzoxNCw1ODoxNCw1OToxLDYwOjIsNjE6Myw2Mjo0LDY3OjksNjg6MTAsNjk6MTIsNzA6MTMsNzE6MTQsNzI6MTQsNzM6MTUsNzQ6MTYsNzU6MTcsNzY6MjAsNzc6MjEsNzg6''@;'; put 'put ''MjIsNzk6NDUsODA6NDYsODE6NDcsODI6MH0sQmM9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6''@;'; put 'put ''JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDQxOidfKCogIywj''@;'; put 'put ''IzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAj''@;'; put 'put ''LCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSd9O2Z1bmN0aW9uIGkwKGUsdCxyKXtmb3IodmFyIGE9ZTwwPy0xOjEsbj1lKmEsaT0wLHM9MSxmPTAsYz0xLG89MCxsPTAsaD1NYXRoLmZsb29yKG4pO288dCYmKGY9KGg9TWF0aC5mbG9vcihuKSkq''@;'; put 'put ''cytpLGw9aCpvK2MsIShuLWg8NWUtOCkpOyluPTEvKG4taCksaT1zLHM9ZixjPW8sbz1sO2lmKGw+dCYmKG8+dD8obD1jLGY9aSk6KGw9byxmPXMpKSwhcilyZXR1cm5bMCxhKmYsbF07dmFyIHg9TWF0aC5mbG9vcihhKmYvbCk7cmV0dXJuW3gsYSpmLXgqbCxsXX1mdW5jdGlvbiBrdChlLHQs''@;'; put 'put ''cil7aWYoZT4yOTU4NDY1fHxlPDApcmV0dXJuIG51bGw7dmFyIGE9MHxlLG49TWF0aC5mbG9vcig4NjQwMCooZS1hKSksaT0wLHM9W10sZj17RDphLFQ6bix1Ojg2NDAwKihlLWEpLW4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhmLnUpPDFlLTYmJihmLnU9MCks''@;'; put 'put ''dCYmdC5kYXRlMTkwNCYmKGErPTE0NjIpLGYudT4uOTk5OSYmKGYudT0wLDg2NDAwPT0rK24mJihmLlQ9bj0wLCsrYSwrK2YuRCkpLDYwPT09YSlzPXI/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGk9MztlbHNlIGlmKDA9PT1hKXM9cj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGk9NjtlbHNl''@;'; put 'put ''e2E+NjAmJi0tYTt2YXIgYz1uZXcgRGF0ZSgxOTAwLDAsMSk7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpK2EtMSkscz1bYy5nZXRGdWxsWWVhcigpLGMuZ2V0TW9udGgoKSsxLGMuZ2V0RGF0ZSgpXSxpPWMuZ2V0RGF5KCksYTw2MCYmKGk9KGkrNiklNyksciYmKGk9ZnVuY3Rpb24gWGMoZSx0KXt0''@;'; put 'put ''WzBdLT01ODE7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZTw2MCYmKHI9KHIrNiklNykscn0oYyxzKSl9cmV0dXJuIGYueT1zWzBdLGYubT1zWzFdLGYuZD1zWzJdLGYuUz1uJTYwLG49TWF0aC5mbG9vcihuLzYwKSxmLk09biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5IPW4sZi5xPWksZn12''@;'; put 'put ''YXIgY2k9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksTWM9Y2kuZ2V0VGltZSgpLFVjPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBvaShlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0P3ItPTEyNjIzMDRlNTplPj1VYyYmKHIrPTg2NGU1KSwoci0oTWMrNmU0Kihl''@;'; put 'put ''LmdldFRpbWV6b25lT2Zmc2V0KCktY2kuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX1mdW5jdGlvbiBIMChlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCIuIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC8sIiQxIil9ZnVuY3Rpb24ga2EoZSl7dmFyIHIsdD1NYXRo''@;'; put 'put ''LmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGUpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIHI9dD49LTQmJnQ8PS0xP2UudG9QcmVjaXNpb24oMTArdCk6TWF0aC5hYnModCk8PTk/ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZTwwPzEyOjExLHI9SDAoZS50b0ZpeGVkKDEyKSk7cmV0dXJuIHIubGVuZ3Ro''@;'; put 'put ''PD10fHwocj1lLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD10P3I6ZS50b0V4cG9uZW50aWFsKDUpfShlKToxMD09PXQ/ZS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gVmMoZSl7dmFyIHQ9SDAoZS50b0ZpeGVkKDExKSk7cmV0dXJuIHQubGVuZ3RoPihlPDA/MTI6MTEpfHwi''@;'; put 'put ''MCI9PT10fHwiLTAiPT09dD9lLnRvUHJlY2lzaW9uKDYpOnR9KGUpLEgwKGZ1bmN0aW9uIFdjKGUpe3JldHVybi0xPT1lLmluZGV4T2YoIkUiKT9lOmUucmVwbGFjZSgvKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLywiJDFFIikucmVwbGFjZSgvKEVbKy1dKShcZCkkLywiJDEwJDIiKX0o''@;'; put 'put ''ci50b1VwcGVyQ2FzZSgpKSl9ZnVuY3Rpb24gTnQoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZTtjYXNlImJvb2xlYW4iOnJldHVybiBlPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxlKT09PWU/ZS50b1N0cmluZygxMCk6a2EoZSk7Y2Fz''@;'; put 'put ''ZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1lKXJldHVybiIiO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBScigxNCxvaShlLHQmJnQuZGF0ZTE5MDQpLHQpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6''@;'; put 'put ''ICIrZSl9ZnVuY3Rpb24gR2MoZSx0LHIsYSl7dmFyIGMsbj0iIixpPTAscz0wLGY9ci55LG89MDtzd2l0Y2goZSl7Y2FzZSA5ODpmPXIueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ZiUxMDAsbz0yO2JyZWFrO2RlZmF1bHQ6Yz1mJTFlNCxvPTR9YnJl''@;'; put 'put ''YWs7Y2FzZSAxMDk6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5tLG89dC5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBXMFtyLm0tMV1bMV07Y2FzZSA1OnJldHVybiBXMFtyLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVzBbci5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3''@;'; put 'put ''aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuZCxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gc2lbci5xXVswXTtkZWZhdWx0OnJldHVybiBzaVtyLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPTErKHIuSCsxMSklMTIs''@;'; put 'put ''bz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIit0fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5ILG89dC5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNl''@;'; put 'put ''IDc3OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuTSxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDExNTppZigicyIhPXQmJiJzcyIhPXQmJiIuMCIhPXQmJiIuMDAiIT10JiYiLjAwMCIhPXQpdGhyb3ci''@;'; put 'put ''YmFkIHNlY29uZCBmb3JtYXQ6ICIrdDtyZXR1cm4gMCE9PXIudXx8InMiIT10JiYic3MiIT10PyhzPWE+PTI/Mz09PWE/MWUzOjEwMDoxPT09YT8xMDoxLChpPU1hdGgucm91bmQocyooci5TK3IudSkpKT49NjAqcyYmKGk9MCksInMiPT09dD8wPT09aT8iMCI6IiIraS9zOihuPVlyKGksMith''@;'; put 'put ''KSwic3MiPT09dD9uLnN1YnN0cigwLDIpOiIuIituLnN1YnN0cigyLHQubGVuZ3RoLTEpKSk6WXIoci5TLHQubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaCh0KXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjPTI0KnIuRCtyLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Yz02MCooMjQqci5EK3Iu''@;'; put 'put ''SCkrci5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmM9NjAqKDYwKigyNCpyLkQrci5IKStyLk0pK01hdGgucm91bmQoci5TK3IudSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdH1vPTM9PT10Lmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6Yz1mLG89''@;'; put 'put ''MX1yZXR1cm4gbz4wP1lyKGMsbyk6IiJ9ZnVuY3Rpb24gRXQoZSl7aWYoZS5sZW5ndGg8PTMpcmV0dXJuIGU7Zm9yKHZhciByPWUubGVuZ3RoJTMsYT1lLnN1YnN0cigwLHIpO3IhPWUubGVuZ3RoO3IrPTMpYSs9KGEubGVuZ3RoPjA/IiwiOiIiKStlLnN1YnN0cihyLDMpO3JldHVybiBhfXZh''@;'; put 'put ''ciBsaT0vJS9nO2Z1bmN0aW9uIHVpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIit1aShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTst''@;'; put 'put ''MT09PW4mJihuPWUuaW5kZXhPZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLC0xPT09KHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkuaW5kZXhPZigiZSIpKXt2YXIgcz1NYXRoLmZs''@;'; put 'put ''b29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSk7IjAuIj09PXIuc3Vic3RyKDAsMik7KXI9KHI9ci5jaGFyQXQoMCkrci5zdWJzdHIo''@;'; put 'put ''MixuKSsiLiIrci5zdWJzdHIoMituKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3I9ci5yZXBsYWNlKC9cKy0vLCItIil9cj1yLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oZixjLG8sbCl7cmV0dXJuIGMrbyts''@;'; put 'put ''LnN1YnN0cigwLChuK2kpJW4pKyIuIitsLnN1YnN0cihpKSsiRSJ9KX1lbHNlIHI9dC50b0V4cG9uZW50aWFsKGEpO3JldHVybiBlLm1hdGNoKC9FXCswMCQvKSYmci5tYXRjaCgvZVsrLV1cZCQvKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSsiMCIrci5jaGFyQXQoci5sZW5ndGgtMSkp''@;'; put 'put ''LGUubWF0Y2goL0VcLS8pJiZyLm1hdGNoKC9lXCsvKSYmKHI9ci5yZXBsYWNlKC9lXCsvLCJlIikpLHIucmVwbGFjZSgiZSIsIkUiKX12YXIgaGk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHhpPS9eIyowKlwuKFswI10rKS8sZGk9L1wpLipbMCNdLyx2aT0vXCgjIyNcKSAjIyNcXD8tIyMj''@;'; put 'put ''Iy87ZnVuY3Rpb24gVHIoZSl7Zm9yKHZhciByLHQ9IiIsYT0wO2EhPWUubGVuZ3RoOysrYSlzd2l0Y2gocj1lLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2Mzp0Kz0iICI7YnJlYWs7Y2FzZSA0ODp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDp0Kz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KHIpfXJldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCl7dmFyIHI9TWF0aC5wb3coMTAsdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlKnIpL3J9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLU1hdGguZmxvb3IoZSksYT1NYXRoLnBvdygxMCx0KTtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZChyKmEpKS5s''@;'; put 'put ''ZW5ndGg/MDpNYXRoLnJvdW5kKHIqYSl9ZnVuY3Rpb24gVXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/VXIoIm4iLGEs''@;'; put 'put ''cik6IigiK1VyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRjKGUsdCxyKXtmb3IodmFyIGE9dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgu''@;'; put 'put ''cG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB6YyhlLHQscil7dmFyIGE9dC5yZXBsYWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIs''@;'; put 'put ''bil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiB1aSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitVcihlLHQuc3Vic3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0''@;'; put 'put ''Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0obj1yYShyLDApKSYmKG49IiIpLG4ubGVuZ3RoPnQubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhp''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gamMoZSx0LHIpe3ZhciBhPXBhcnNlSW50KGVbNF0sMTApLG49TWF0aC5yb3VuZCh0KmEpLGk9TWF0aC5mbG9vcihuL2EpLHM9bi1pKmEsZj1hO3JldHVybiByKygwPT09aT8iIjoiIitpKSsiICIrKDA9PT1zP2plKCIgIixlWzFdLmxlbmd0aCsxK2VbNF0ubGVu''@;'; put 'put ''Z3RoKTpVMChzLGVbMV0ubGVuZ3RoKStlWzJdKyIvIitlWzNdK1lyKGYsZVs0XS5sZW5ndGgpKX0oaSxjLG8pO2lmKHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49cGkocixpWzFdLmxlbmd0''@;'; put 'put ''aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrVHIoaVsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIw''@;'; put 'put ''LiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIG8rcGkoYyxpWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikk''@;'; put 'put ''LywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gbytFdChyYShjLDApKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrVXIoZSx0LC1yKTpFdCgi''@;'; put 'put ''IisoTWF0aC5mbG9vcihyKStmdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0PCgiIitNYXRoLnJvdW5kKChlLU1hdGguZmxvb3IoZSkpKk1hdGgucG93KDEwLHQpKSkubGVuZ3RoPzE6MH0ocixpWzFdLmxlbmd0aCkpKSsiLiIrWXIobWkocixpWzFdLmxlbmd0aCksaVsxXS5sZW5ndGgpO2lmKGk9''@;'; put 'put ''dC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gVXIoZSx0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHIpO2lmKGk9dC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gbj1lYShVcihlLHQucmVwbGFjZSgvW1xcLV0vZywiIikscikpLHM9MCxlYShlYSh0LnJlcGxhY2UoL1xc''@;'; put 'put ''L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24odil7cmV0dXJuIHM8bi5sZW5ndGg/bi5jaGFyQXQocysrKToiMCI9PT12PyIwIjoiIn0pKTtpZih0Lm1hdGNoKHZpKSlyZXR1cm4iKCIrKG49VXIoZSwiIyMjIyMjIyMjIyIscikpLnN1YnN0cigwLDMpKyIpICIrbi5zdWJzdHIoMywz''@;'; put 'put ''KSsiLSIrbi5zdWJzdHIoNik7dmFyIGw9IiI7aWYoaT10Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihpWzRdLmxlbmd0aCw3KSxmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMSksbj0iIitvLCIgIj09KGw9bHQoIm4iLGlbMV0sZlsxXSkp''@;'; put 'put ''LmNoYXJBdChsLmxlbmd0aC0xKSYmKGw9bC5zdWJzdHIoMCxsLmxlbmd0aC0xKSsiMCIpLG4rPWwraVsyXSsiLyIraVszXSwobD1hMChmWzJdLHMpKS5sZW5ndGg8aVs0XS5sZW5ndGgmJihsPVRyKGlbNF0uc3Vic3RyKGlbNF0ubGVuZ3RoLWwubGVuZ3RoKSkrbCksbis9bDtpZihpPXQubWF0''@;'; put 'put ''Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oTWF0aC5tYXgoaVsxXS5sZW5ndGgsaVs0XS5sZW5ndGgpLDcpLG8rKChmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMCkpWzBdfHwoZlsxXT8iIjoiMCIpKSsiICIrKGZbMV0/VTAoZlsxXSxzKStp''@;'; put 'put ''WzJdKyIvIitpWzNdK2EwKGZbMl0scyk6amUoIiAiLDIqcysxK2lbMl0ubGVuZ3RoK2lbM10ubGVuZ3RoKSk7aWYoaT10Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBuPXJhKHIsMCksdC5sZW5ndGg8PW4ubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYo''@;'; put 'put ''aT10Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWluKGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3Jl''@;'; put 'put ''dHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHM9bWkocixpWzFdLmxlbmd0aCkscjwwPyItIitVcihlLHQsLXIpOkV0KGZ1bmN0aW9uIEpjKGUpe3JldHVybiBlPDIxNDc0ODM2NDcm''@;'; put 'put ''JmU+LTIxNDc0ODM2NDg/IiIrKGU+PTA/MHxlOmUtMXwwKToiIitNYXRoLmZsb29yKGUpfShyKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4i''@;'; put 'put ''K1lyKHMsaVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBVcihlLCIjLCMjMC4wMCIscik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGQ9RXQocmEoYywwKSk7cmV0dXJuIjAiIT09ZD9vK2Q6IiI7Y2FzZSIjIyMsIyMjLjAw''@;'; put 'put ''IjpyZXR1cm4gVXIoZSwiIyMjLCMjMC4wMCIscikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9u''@;'; put 'put ''IGdpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIitnaShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTstMT09PW4mJihuPWUuaW5kZXhP''@;'; put 'put ''ZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLCEocj0odC9NYXRoLnBvdygxMCxpKSkudG9QcmVjaXNpb24oYSsxKyhuK2kpJW4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgcz1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGgu''@;'; put 'put ''TE9HMTBFKTstMT09PXIuaW5kZXhPZigiLiIpP3I9ci5jaGFyQXQoMCkrIi4iK3Iuc3Vic3RyKDEpKyJFKyIrKHMtci5sZW5ndGgraSk6cis9IkUrIisocy1pKSxyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYs''@;'; put 'put ''YyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIoMCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3Iu''@;'; put 'put ''Y2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNoKC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVw''@;'; put 'put ''bGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/UXIoIm4iLGEscik6IigiK1FyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHFjKGUsdCxyKXtmb3IodmFyIGE9''@;'; put 'put ''dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgucG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBaYyhlLHQscil7dmFyIGE9dC5yZXBs''@;'; put 'put ''YWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIsbil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiBnaSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitRcihlLHQuc3Vi''@;'; put 'put ''c3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gbj0iIityLDA9PT1yJiYobj0iIiksbi5s''@;'; put 'put ''ZW5ndGg+dC5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goaGkpKXJldHVybiBmdW5jdGlvbiBLYyhlLHQscil7cmV0dXJuIHIrKDA9PT10PyIiOiIiK3QpK2plKCIgIixlWzFdLmxlbmd0aCsyK2VbNF0ubGVuZ3RoKX0oaSxjLG8pO2lm''@;'; put 'put ''KHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49KG49KCIiK3IpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkpLnJlcGxh''@;'; put 'put ''Y2UoL1wuKFxkKikkLyxmdW5jdGlvbih2LHUpe3JldHVybiIuIit1K2plKCIwIixUcihpWzFdKS5sZW5ndGgtdS5sZW5ndGgpfSksLTEhPT10LmluZGV4T2YoIjAuIik/bjpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYodD10LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaT10Lm1hdGNoKC9e''@;'; put 'put ''KDAqKVwuKCMqKSQvKSlyZXR1cm4gbysoIiIrYykucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1''@;'; put 'put ''cm4gbytFdCgiIitjKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKSsiLiIramUoIjAiLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIFFyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIi''@;'; put 'put ''KSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoUXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3Ro''@;'; put 'put ''P24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVFyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24uc3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/''@;'; put 'put ''KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQobC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxu''@;'; put 'put ''Kz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWlu''@;'; put 'put ''KE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIraVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNd''@;'; put 'put ''Lmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gdC5sZW5ndGg8PShuPSIiK3IpLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWlu''@;'; put 'put ''KGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3JldHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRj''@;'; put 'put ''aCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHYpe3JldHVybiIwMCwiKyh2Lmxlbmd0aDwzP1lyKDAsMy12Lmxlbmd0aCk6IiIpK3Z9KSsi''@;'; put 'put ''LiIrWXIoMCxpWzFdLmxlbmd0aCk7c3dpdGNoKHQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KCIiK2MpO3JldHVybiIwIiE9PWQ/bytkOiIiO2RlZmF1bHQ6aWYodC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIFFyKGUsdC5zbGljZSgwLHQubGFz''@;'; put 'put ''dEluZGV4T2YoIi4iKSkscikrVHIodC5zbGljZSh0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8Iit0KyJ8Iil9ZnVuY3Rpb24gbHQoZSx0LHIpe3JldHVybigwfHIpPT09cj9RcihlLHQscik6VXIoZSx0LHIpfXZhciBfaT0vXFtbSGhN''@;'; put 'put ''bVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gYnQoZSl7Zm9yKHZhciB0PTAscj0iIixhPSIiO3Q8ZS5sZW5ndGg7KXN3aXRjaChyPWUuY2hhckF0KHQpKXtjYXNlIkciOm4wKGUsdCkmJih0Kz02KSx0Kys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''dCkmJnQ8ZS5sZW5ndGg7KTsrK3Q7YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjp0Kz0yO2JyZWFrO2Nhc2UiQCI6Kyt0O2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdCh0KzEpfHwiMiI9PT1lLmNoYXJBdCh0KzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlki''@;'; put 'put ''OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWUuc3Vic3RyKHQsMykudG9VcHBlckNhc2UoKXx8IkFNL1BN''@;'; put 'put ''Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZS5zdWJzdHIodCw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrdDticmVhaztjYXNlIlsiOmZvcihhPXI7Il0iIT09ZS5jaGFyQXQodCsrKSYmdDxlLmxlbmd0aDspYSs9ZS5j''@;'; put 'put ''aGFyQXQodCk7aWYoYS5tYXRjaChfaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDt0PGUubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihyPWUuY2hhckF0KCsrdCkpPi0xfHwiXFwiPT1yJiYiLSI9PWUuY2hhckF0KHQrMSkmJiIwIyIuaW5kZXhPZihl''@;'; put 'put ''LmNoYXJBdCh0KzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7ZS5jaGFyQXQoKyt0KT09PXI7KTticmVhaztjYXNlIioiOisrdCwoIiAiPT1lLmNoYXJBdCh0KXx8IioiPT1lLmNoYXJBdCh0KSkmJisrdDticmVhaztjYXNlIigiOmNhc2UiKSI6Kyt0O2JyZWFrO2Nhc2UiMSI6Y2FzZSIy''@;'; put 'put ''IjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dDxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKyt0KSk+LTE7KTticmVhaztkZWZhdWx0OisrdH1yZXR1cm4hMX12YXIgd2k9L1xbKD18Pls9XT98PFs+''@;'; put 'put ''PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIGtpKGUsdCl7aWYobnVsbD09dClyZXR1cm4hMTt2YXIgcj1wYXJzZUZsb2F0KHRbMl0pO3N3aXRjaCh0WzFdKXtjYXNlIj0iOmlmKGU9PXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlPnIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''IjppZihlPHIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoZSE9cilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlPj1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGU8PXIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUnIoZSx0LHIpe251bGw9PXImJihyPXt9KTt2YXIgYT0i''@;'; put 'put ''Ijtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjphPSJtL2QveXkiPT1lJiZyLmRhdGVORj9yLmRhdGVORjplO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oYT0xND09ZSYmci5kYXRlTkY/ci5kYXRlTkY6KG51bGwhPXIudGFibGU/ci50YWJsZTpwZSlbZV0pJiYoYT1yLnRhYmxlJiZy''@;'; put 'put ''LnRhYmxlW2ZpW2VdXXx8cGVbZmlbZV1dKSxudWxsPT1hJiYoYT1CY1tlXXx8IkdlbmVyYWwiKX1pZihuMChhLDApKXJldHVybiBOdCh0LHIpO3QgaW5zdGFuY2VvZiBEYXRlJiYodD1vaSh0LHIuZGF0ZTE5MDQpKTt2YXIgbj1mdW5jdGlvbiBybyhlLHQpe3ZhciByPWZ1bmN0aW9uIFFjKGUp''@;'; put 'put ''e2Zvcih2YXIgdD1bXSxyPSExLGE9MCxuPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSFyO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrYTticmVhaztjYXNlIDU5OnRbdC5sZW5ndGhdPWUuc3Vic3RyKG4sYS1uKSxuPWErMX1pZih0''@;'; put 'put ''W3QubGVuZ3RoXT1lLnN1YnN0cihuKSwhMD09PXIpdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrZSsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiB0fShlKSxhPXIubGVuZ3RoLG49clthLTFdLmluZGV4T2YoIkAiKTtpZihhPDQmJm4+LTEmJi0tYSxyLmxlbmd0aD40KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IityLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm5bNCw0PT09ci5sZW5ndGh8fG4+LTE/cltyLmxlbmd0aC0xXToiQCJdO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnI9bj4tMT9bIkdl''@;'; put 'put ''bmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsclswXV06W3JbMF0sclswXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAyOnI9bj4tMT9bclswXSxyWzBdLHJbMF0sclsxXV06W3JbMF0sclsxXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAzOnI9bj4tMT9bclswXSxyWzFdLHJbMF0sclsyXV06W3JbMF0s''@;'; put 'put ''clsxXSxyWzJdLCJAIl19dmFyIGk9dD4wP3JbMF06dDwwP3JbMV06clsyXTtpZigtMT09PXJbMF0uaW5kZXhPZigiWyIpJiYtMT09PXJbMV0uaW5kZXhPZigiWyIpKXJldHVyblthLGldO2lmKG51bGwhPXJbMF0ubWF0Y2goL1xbWz08Pl0vKXx8bnVsbCE9clsxXS5tYXRjaCgvXFtbPTw+XS8p''@;'; put 'put ''KXt2YXIgcz1yWzBdLm1hdGNoKHdpKSxmPXJbMV0ubWF0Y2god2kpO3JldHVybiBraSh0LHMpP1thLHJbMF1dOmtpKHQsZik/W2EsclsxXV06W2EscltudWxsIT1zJiZudWxsIT1mPzI6MV1dfXJldHVyblthLGldfShhLHQpO2lmKG4wKG5bMV0pKXJldHVybiBOdCh0LHIpO2lmKCEwPT09dCl0''@;'; put 'put ''PSJUUlVFIjtlbHNlIGlmKCExPT09dCl0PSJGQUxTRSI7ZWxzZSBpZigiIj09PXR8fG51bGw9PXQpcmV0dXJuIiI7cmV0dXJuIGZ1bmN0aW9uIGVvKGUsdCxyLGEpe2Zvcih2YXIgbyxsLGgsbj1bXSxpPSIiLHM9MCxmPSIiLGM9InQiLHg9IkgiO3M8ZS5sZW5ndGg7KXN3aXRjaChmPWUuY2hh''@;'; put 'put ''ckF0KHMpKXtjYXNlIkciOmlmKCFuMChlLHMpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0scys9NzticmVhaztjYXNlJyInOmZvcihpPSIiOzM0IT09KGg9ZS5jaGFyQ29kZUF0KCsr''@;'; put 'put ''cykpJiZzPGUubGVuZ3RoOylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpO25bbi5sZW5ndGhdPXt0OiJ0Iix2Oml9LCsrczticmVhaztjYXNlIlxcIjp2YXIgZD1lLmNoYXJBdCgrK3MpO25bbi5sZW5ndGhdPXt0OiIoIj09PWR8fCIpIj09PWQ/ZDoidCIsdjpkfSwrK3M7YnJlYWs7Y2FzZSJf''@;'; put 'put ''IjpuW24ubGVuZ3RoXT17dDoidCIsdjoiICJ9LHMrPTI7YnJlYWs7Y2FzZSJAIjpuW24ubGVuZ3RoXT17dDoiVCIsdjp0fSwrK3M7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWUuY2hhckF0KHMrMSl8fCIyIj09PWUuY2hhckF0KHMrMSkpe2lmKG51bGw9PW8mJm51bGw9PShvPWt0''@;'; put 'put ''KHQsciwiMiI9PT1lLmNoYXJBdChzKzEpKSkpcmV0dXJuIiI7bltuLmxlbmd0aF09e3Q6IlgiLHY6ZS5zdWJzdHIocywyKX0sYz1mLHMrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zj1mLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNl''@;'; put 'put ''ImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZih0PDB8fG51bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO2ZvcihpPWY7KytzPGUubGVuZ3RoJiZlLmNoYXJBdChzKS50b0xvd2VyQ2FzZSgpPT09ZjspaSs9ZjsibSI9PT1mJiYiaCI9PT1jLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkmJihmPSJNIiksImgiPT09ZiYmKGY9eCksbltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciB1PXt0OmYsdjpmfTtpZihudWxsPT1vJiYobz1rdCh0LHIpKSwiQS9QIj09PWUuc3Vic3RyKHMsMykudG9VcHBl''@;'; put 'put ''ckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQIjoiQSIpLHUudD0iVCIseD0iaCIscys9Myk6IkFNL1BNIj09PWUuc3Vic3RyKHMsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQTSI6IkFNIiksdS50PSJUIixzKz01LHg9ImgiKToiXHU0ZTBhXHU1MzQ4''@;'; put 'put ''L1x1NGUwYlx1NTM0OCI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdS50PSJUIixzKz01LHg9ImgiKToodS50PSJ0IiwrK3MpLG51bGw9PW8mJiJUIj09PXUudClyZXR1cm4iIjtuW24u''@;'; put 'put ''bGVuZ3RoXT11LGM9ZjticmVhaztjYXNlIlsiOmZvcihpPWY7Il0iIT09ZS5jaGFyQXQocysrKSYmczxlLmxlbmd0aDspaSs9ZS5jaGFyQXQocyk7aWYoIl0iIT09aS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcraSsifCI7aWYoaS5tYXRjaChfaSkpe2lmKG51''@;'; put 'put ''bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJaIix2OmkudG9Mb3dlckNhc2UoKX0sYz1pLmNoYXJBdCgxKX1lbHNlIGkuaW5kZXhPZigiJCIpPi0xJiYoaT0oaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixidChlKXx8KG5bbi5s''@;'; put 'put ''ZW5ndGhdPXt0OiJ0Iix2Oml9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vKXtmb3IoaT1mOysrczxlLmxlbmd0aCYmIjAiPT09KGY9ZS5jaGFyQXQocykpOylpKz1mO25bbi5sZW5ndGhdPXt0OiJzIix2Oml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoaT1mOysrczxlLmxlbmd0aCYm''@;'; put 'put ''IjAjPy4sRSstJSIuaW5kZXhPZihmPWUuY2hhckF0KHMpKT4tMTspaSs9ZjtuW24ubGVuZ3RoXT17dDoibiIsdjppfTticmVhaztjYXNlIj8iOmZvcihpPWY7ZS5jaGFyQXQoKytzKT09PWY7KWkrPWY7bltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIioiOisrcywoIiAiPT1l''@;'; put 'put ''LmNoYXJBdChzKXx8IioiPT1lLmNoYXJBdChzKSkmJisrczticmVhaztjYXNlIigiOmNhc2UiKSI6bltuLmxlbmd0aF09e3Q6MT09PWE/InQiOmYsdjpmfSwrK3M7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh''@;'; put 'put ''c2UiOSI6Zm9yKGk9ZjtzPGUubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlLmNoYXJBdCgrK3MpKT4tMTspaSs9ZS5jaGFyQXQocyk7bltuLmxlbmd0aF09e3Q6IkQiLHY6aX07YnJlYWs7Y2FzZSIgIjpuW24ubGVuZ3RoXT17dDpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiJCI6bltuLmxl''@;'; put 'put ''bmd0aF09e3Q6InQiLHY6IiQifSwrK3M7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoZikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZisiIGluICIrZSk7bltuLmxlbmd0''@;'; put 'put ''aF09e3Q6InQiLHY6Zn0sKytzfXZhciBULHA9MCxrPTA7Zm9yKHM9bi5sZW5ndGgtMSxjPSJ0IjtzPj0wOy0tcylzd2l0Y2gobltzXS50KXtjYXNlImgiOmNhc2UiSCI6bltzXS50PXgsYz0iaCIscDwxJiYocD0xKTticmVhaztjYXNlInMiOihUPW5bc10udi5tYXRjaCgvXC4wKyQvKSkmJihr''@;'; put 'put ''PU1hdGgubWF4KGssVFswXS5sZW5ndGgtMSkpLHA8MyYmKHA9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpjPW5bc10udDticmVhaztjYXNlIm0iOiJzIj09PWMmJihuW3NdLnQ9Ik0iLHA8MiYmKHA9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpwPDEmJm5bc10u''@;'; put 'put ''di5tYXRjaCgvW0hoXS8pJiYocD0xKSxwPDImJm5bc10udi5tYXRjaCgvW01tXS8pJiYocD0yKSxwPDMmJm5bc10udi5tYXRjaCgvW1NzXS8pJiYocD0zKX1zd2l0Y2gocCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnU+PS41JiYoby51PTAsKytvLlMpLG8uUz49NjAmJihvLlM9MCwrK28uTSks''@;'; put 'put ''by5NPj02MCYmKG8uTT0wLCsrby5IKTticmVhaztjYXNlIDI6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pfXZhciBOLGc9IiI7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylzd2l0Y2gobltzXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiWCI6bltzXS52PSIiLG5bc10udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpuW3NdLnY9R2MobltzXS50LmNoYXJDb2RlQXQoMCksbltzXS52LG8sayksbltz''@;'; put 'put ''XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKE49cysxO251bGwhPW5bTl0mJigiPyI9PT0oZj1uW05dLnQpfHwiRCI9PT1mfHwoIiAiPT09Znx8InQiPT09ZikmJm51bGwhPW5bTisxXSYmKCI/Ij09PW5bTisxXS50fHwidCI9PT1uW04rMV0udCYmIi8iPT09bltOKzFdLnYpfHwi''@;'; put 'put ''KCI9PT1uW3NdLnQmJigiICI9PT1mfHwibiI9PT1mfHwiKSI9PT1mKXx8InQiPT09ZiYmKCIvIj09PW5bTl0udnx8IiAiPT09bltOXS52JiZudWxsIT1uW04rMV0mJiI/Ij09bltOKzFdLnQpKTspbltzXS52Kz1uW05dLnYsbltOXT17djoiIix0OiI7In0sKytOO2crPW5bc10udixzPU4tMTti''@;'; put 'put ''cmVhaztjYXNlIkciOm5bc10udD0idCIsbltzXS52PU50KHQscil9dmFyIEkseSxNPSIiO2lmKGcubGVuZ3RoPjApezQwPT1nLmNoYXJDb2RlQXQoMCk/KEk9dDwwJiY0NT09PWcuY2hhckNvZGVBdCgwKT8tdDp0LHk9bHQoIm4iLGcsSSkpOih5PWx0KCJuIixnLEk9dDwwJiZhPjE/LXQ6dCks''@;'; put 'put ''STwwJiZuWzBdJiYidCI9PW5bMF0udCYmKHk9eS5zdWJzdHIoMSksblswXS52PSItIituWzBdLnYpKSxOPXkubGVuZ3RoLTE7dmFyIFA9bi5sZW5ndGg7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYidCIhPW5bc10udCYmbltzXS52LmluZGV4T2YoIi4iKT4tMSl7UD1z''@;'; put 'put ''O2JyZWFrfXZhciBSPW4ubGVuZ3RoO2lmKFA9PT1uLmxlbmd0aCYmLTE9PT15LmluZGV4T2YoIkUiKSl7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wOy0tcyludWxsPT1uW3NdfHwtMT09PSJuPyIuaW5kZXhPZihuW3NdLnQpfHwoTj49bltzXS52Lmxlbmd0aC0xP25bc10udj15LnN1YnN0cigxKyhO''@;'; put 'put ''LT1uW3NdLnYubGVuZ3RoKSxuW3NdLnYubGVuZ3RoKTpOPDA/bltzXS52PSIiOihuW3NdLnY9eS5zdWJzdHIoMCxOKzEpLE49LTEpLG5bc10udD0idCIsUj1zKTtOPj0wJiZSPG4ubGVuZ3RoJiYobltSXS52PXkuc3Vic3RyKDAsTisxKStuW1JdLnYpfWVsc2UgaWYoUCE9PW4ubGVuZ3RoJiYt''@;'; put 'put ''MT09PXkuaW5kZXhPZigiRSIpKXtmb3IoTj15LmluZGV4T2YoIi4iKS0xLHM9UDtzPj0wOy0tcylpZihudWxsIT1uW3NdJiYtMSE9PSJuPyIuaW5kZXhPZihuW3NdLnQpKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhPZigiLiIpLTE6bltzXS52Lmxl''@;'; put 'put ''bmd0aC0xLE09bltzXS52LnN1YnN0cihsKzEpO2w+PTA7LS1sKU4+PTAmJigiMCI9PT1uW3NdLnYuY2hhckF0KGwpfHwiIyI9PT1uW3NdLnYuY2hhckF0KGwpKSYmKE09eS5jaGFyQXQoTi0tKStNKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c31mb3IoTj49MCYmUjxuLmxlbmd0aCYmKG5bUl0u''@;'; put 'put ''dj15LnN1YnN0cigwLE4rMSkrbltSXS52KSxOPXkuaW5kZXhPZigiLiIpKzEscz1QO3M8bi5sZW5ndGg7KytzKWlmKG51bGwhPW5bc10mJigtMSE9PSJuPygiLmluZGV4T2YobltzXS50KXx8cz09PVApKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhP''@;'; put 'put ''ZigiLiIpKzE6MCxNPW5bc10udi5zdWJzdHIoMCxsKTtsPG5bc10udi5sZW5ndGg7KytsKU48eS5sZW5ndGgmJihNKz15LmNoYXJBdChOKyspKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c319fWZvcihzPTA7czxuLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmIm4/Ii5pbmRleE9mKG5bc10udCk+''@;'; put 'put ''LTEmJihuW3NdLnY9bHQobltzXS50LG5bc10udixJPWE+MSYmdDwwJiZzPjAmJiItIj09PW5bcy0xXS52Py10OnQpLG5bc10udD0idCIpO3ZhciBWPSIiO2ZvcihzPTA7cyE9PW4ubGVuZ3RoOysrcyludWxsIT1uW3NdJiYoVis9bltzXS52KTtyZXR1cm4gVn0oblsxXSx0LHIsblswXSl9ZnVu''@;'; put 'put ''Y3Rpb24gZXQoZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3Q9K3R8fC0xO2Zvcih2YXIgcj0wO3I8MzkyOysrcilpZihudWxsIT1wZVtyXSl7aWYocGVbcl09PWUpe3Q9cjticmVha319ZWxzZSB0PDAmJih0PXIpO3Q8MCYmKHQ9MzkxKX1yZXR1cm4gcGVbdF09ZSx0fWZ1bmN0aW9uIHRh''@;'; put 'put ''KCl7cGU9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGV8fChlPXt9KSxlWzBdPSJHZW5lcmFsIixlWzFdPSIwIixlWzJdPSIwLjAwIixlWzNdPSIjLCMjMCIsZVs0XT0iIywjIzAuMDAiLGVbOV09IjAlIixlWzEwXT0iMC4wMCUiLGVbMTFdPSIwLjAwRSswMCIsZVsxMl09IiMgPy8/IixlWzEzXT0i''@;'; put 'put ''IyA/Py8/PyIsZVsxNF09Im0vZC95eSIsZVsxNV09ImQtbW1tLXl5IixlWzE2XT0iZC1tbW0iLGVbMTddPSJtbW0teXkiLGVbMThdPSJoOm1tIEFNL1BNIixlWzE5XT0iaDptbTpzcyBBTS9QTSIsZVsyMF09Img6bW0iLGVbMjFdPSJoOm1tOnNzIixlWzIyXT0ibS9kL3l5IGg6bW0iLGVbMzdd''@;'; put 'put ''PSIjLCMjMCA7KCMsIyMwKSIsZVszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGVbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixlWzQ1XT0ibW06c3MiLGVbNDZdPSJbaF06bW06c3MiLGVbNDddPSJtbXNzLjAiLGVbNDhdPSIjIzAu''@;'; put 'put ''MEUrMCIsZVs0OV09IkAiLGVbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsZX0oKX12YXIgYW89ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzon''@;'; put 'put ''IiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6''@;'; put 'put ''Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtf''@;'; put 'put ''KCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9k''@;'; put 'put ''L3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7''@;'; put 'put ''W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5''@;'; put 'put ''Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LEVpPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2csc289ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgZT17dmVyc2lvbjoiMS4yLjAifSxyPWZ1bmN0aW9uIHQoKXtmb3IodmFyIHk9MCxQPW5ldyBBcnJheSgyNTYpLFI9MDsyNTYhPVI7KytSKVBbUl09eT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9Uik/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMw''@;'; put 'put ''NjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MTty''@;'; put 'put ''ZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFApOlB9KCksbj1mdW5jdGlvbiBhKHkpe3ZhciBQPTAsUj0wLFY9MCxYPXR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSg0MDk2KTpuZXcgQXJyYXkoNDA5Nik7Zm9yKFY9MDsyNTYhPVY7KytWKVhb''@;'; put 'put ''Vl09eVtWXTtmb3IoVj0wOzI1NiE9VjsrK1YpZm9yKFI9eVtWXSxQPTI1NitWO1A8NDA5NjtQKz0yNTYpUj1YW1BdPVI+Pj44XnlbMjU1JlJdO3ZhciBiPVtdO2ZvcihWPTE7MTYhPVY7KytWKWJbVi0xXT10eXBlb2YgSW50MzJBcnJheTwidSI/WC5zdWJhcnJheSgyNTYqViwyNTYqVisyNTYp''@;'; put 'put ''Olguc2xpY2UoMjU2KlYsMjU2KlYrMjU2KTtyZXR1cm4gYn0ociksaT1uWzBdLHM9blsxXSxmPW5bMl0sYz1uWzNdLG89bls0XSxsPW5bNV0saD1uWzZdLHg9bls3XSxkPW5bOF0sdj1uWzldLHU9blsxMF0scD1uWzExXSxrPW5bMTJdLFQ9blsxM10sZz1uWzE0XTtyZXR1cm4gZS50YWJsZT1y''@;'; put 'put ''LGUuYnN0cj1mdW5jdGlvbiBOKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoO1Y8WDspUj1SPj4+OF5yWzI1NSYoUl55LmNoYXJDb2RlQXQoVisrKSldO3JldHVybn5SfSxlLmJ1Zj1mdW5jdGlvbiBNKHksUCl7Zm9yKHZhciBSPX5QLFY9eS5sZW5ndGgtMTUsWD0wO1g8VjspUj1n''@;'; put 'put ''W3lbWCsrXV4yNTUmUl1eVFt5W1grK11eUj4+OCYyNTVdXmtbeVtYKytdXlI+PjE2JjI1NV1ecFt5W1grK11eUj4+PjI0XV51W3lbWCsrXV1edlt5W1grK11dXmRbeVtYKytdXV54W3lbWCsrXV1eaFt5W1grK11dXmxbeVtYKytdXV5vW3lbWCsrXV1eY1t5W1grK11dXmZbeVtYKytdXV5zW3lb''@;'; put 'put ''WCsrXV1eaVt5W1grK11dXnJbeVtYKytdXTtmb3IoVis9MTU7WDxWOylSPVI+Pj44XnJbMjU1JihSXnlbWCsrXSldO3JldHVybn5SfSxlLnN0cj1mdW5jdGlvbiBJKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoLGI9MCxlZT0wO1Y8WDspKGI9eS5jaGFyQ29kZUF0KFYrKykpPDEy''@;'; put 'put ''OD9SPVI+Pj44XnJbMjU1JihSXmIpXTpiPDIwNDg/Uj0oUj1SPj4+OF5yWzI1NSYoUl4oMTkyfGI+PjYmMzEpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV06Yj49NTUyOTYmJmI8NTczNDQ/KGI9NjQrKDEwMjMmYiksZWU9MTAyMyZ5LmNoYXJDb2RlQXQoVisrKSxSPShSPShSPShSPVI+''@;'; put 'put ''Pj44XnJbMjU1JihSXigyNDB8Yj4+OCY3KSldKT4+PjheclsyNTUmKFJeKDEyOHxiPj4yJjYzKSldKT4+PjheclsyNTUmKFJeKDEyOHxlZT4+NiYxNXwoMyZiKTw8NCkpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmZWUpKV0pOlI9KFI9KFI9Uj4+PjheclsyNTUmKFJeKDIyNHxiPj4xMiYxNSkp''@;'; put 'put ''XSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+NiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmYikpXTtyZXR1cm5+Un0sZX0oKSx2ZT1mdW5jdGlvbigpe3ZhciBjLHQ9e307ZnVuY3Rpb24gYShtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybi0xPT09bS5zbGljZSgwLC0x''@;'; put 'put ''KS5pbmRleE9mKCIvIik/bTphKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKDAsRSsxKX1mdW5jdGlvbiBuKG0pe2lmKCIvIj09bS5jaGFyQXQobS5sZW5ndGgtMSkpcmV0dXJuIG4obS5zbGljZSgwLC0xKSk7dmFyIEU9bS5s''@;'; put 'put ''YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RT9tOm0uc2xpY2UoRSsxKX1mdW5jdGlvbiBpKG0sRSl7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1uZXcgRGF0ZShFKSk7dmFyIF89RS5nZXRIb3VycygpO189KF89Xzw8NnxFLmdldE1pbnV0ZXMoKSk8PDV8RS5nZXRTZWNvbmRzKCk+Pj4xLG0u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixfKTt2YXIgdz1FLmdldEZ1bGxZZWFyKCktMTk4MDt3PSh3PXc8PDR8RS5nZXRNb250aCgpKzEpPDw1fEUuZ2V0RGF0ZSgpLG0ud3JpdGVfc2hpZnQoMix3KX1mdW5jdGlvbiBmKG0pe2hyKG0sMCk7Zm9yKHZhciBFPXt9LF89MDttLmw8PW0ubGVuZ3RoLTQ7KXt2YXIg''@;'; put 'put ''dz1tLnJlYWRfc2hpZnQoMiksUz1tLnJlYWRfc2hpZnQoMiksRj1tLmwrUyxMPXt9OzIxNTg5PT09dyYmKDEmKF89bS5yZWFkX3NoaWZ0KDEpKSYmKEwubXRpbWU9bS5yZWFkX3NoaWZ0KDQpKSxTPjUmJigyJl8mJihMLmF0aW1lPW0ucmVhZF9zaGlmdCg0KSksNCZfJiYoTC5jdGltZT1tLnJl''@;'; put 'put ''YWRfc2hpZnQoNCkpKSxMLm10aW1lJiYoTC5tdD1uZXcgRGF0ZSgxZTMqTC5tdGltZSkpKSxtLmw9RixFW3ddPUx9cmV0dXJuIEV9ZnVuY3Rpb24gbygpe3JldHVybiBjfHwoYz17fSl9ZnVuY3Rpb24gbChtLEUpe2lmKDgwPT1tWzBdJiY3NT09bVsxXSlyZXR1cm4gQ2MobSxFKTtpZigxMDk9''@;'; put 'put ''PSgzMnxtWzBdKSYmMTA1PT0oMzJ8bVsxXSkpcmV0dXJuIGZ1bmN0aW9uIE5nKG0sRSl7aWYoIm1pbWUtdmVyc2lvbjoiIT1jZShtLnNsaWNlKDAsMTMpKS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUFEIGhlYWRlciIpO3ZhciBfPUUmJkUucm9vdHx8IiIs''@;'; put 'put ''dz0oU2UmJkJ1ZmZlci5pc0J1ZmZlcihtKT9tLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShtKSkuc3BsaXQoIlxyXG4iKSxTPTAsRj0iIjtmb3IoUz0wO1M8dy5sZW5ndGg7KytTKWlmKC9eQ29udGVudC1Mb2NhdGlvbjovaS50ZXN0KEY9d1tTXSkmJihGPUYuc2xpY2UoRi5pbmRleE9mKCJmaWxl''@;'; put 'put ''IikpLF98fChfPUYuc2xpY2UoMCxGLmxhc3RJbmRleE9mKCIvIikrMSkpLEYuc2xpY2UoMCxfLmxlbmd0aCkhPV8pKWZvcig7Xy5sZW5ndGg+MCYmKF89KF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKS5zbGljZSgwLF8ubGFzdEluZGV4T2YoIi8iKSsxKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1f''@;'; put 'put ''KTspO3ZhciBMPSh3WzFdfHwiIikubWF0Y2goL2JvdW5kYXJ5PSIoLio/KSIvKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1BRCBjYW5ub3QgZmluZCBib3VuZGFyeSIpO3ZhciB6PSItLSIrKExbMV18fCIiKSxIPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt5KEgpO3ZhciBxLG5lPTA7''@;'; put 'put ''Zm9yKFM9MDtTPHcubGVuZ3RoOysrUyl7dmFyIGhlPXdbU107aGUhPT16JiZoZSE9PXorIi0tInx8KG5lKysmJlJnKEgsdy5zbGljZShxLFMpLF8pLHE9Uyl9cmV0dXJuIEh9KG0sRSk7aWYobS5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK20ubGVuZ3RoKyIg''@;'; put 'put ''PCA1MTIiKTt2YXIgXyxTLEYsTCx6LFcsdz01MTIsQj1bXSxIPW0uc2xpY2UoMCw1MTIpO2hyKEgsMCk7dmFyIHE9ZnVuY3Rpb24gaChtKXtpZig4MD09bVttLmxdJiY3NT09bVttLmwrMV0pcmV0dXJuWzAsMF07bS5jaGsobGUsIkhlYWRlciBTaWduYXR1cmU6ICIpLG0ubCs9MTY7dmFyIEU9''@;'; put 'put ''bS5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bbS5yZWFkX3NoaWZ0KDIsInUiKSxFXX0oSCk7c3dpdGNoKF89cVswXSl7Y2FzZSAzOnc9NTEyO2JyZWFrO2Nhc2UgNDp3PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PXFbMV0pcmV0dXJuIENjKG0sRSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Ik1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitfKX01MTIhPT13JiZocihIPW0uc2xpY2UoMCx3KSwyOCk7dmFyIG5lPW0uc2xpY2UoMCx3KTshZnVuY3Rpb24geChtLEUpe3ZhciBfO3N3aXRjaChtLmwrPTIsXz1tLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1FKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK18pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RSl0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrXyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlm''@;'; put 'put ''dDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitfKX1tLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxtLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShILF8pO3ZhciBoZT1ILnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1fJiYwIT09aGUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK2hlKTtILmwrPTQsTD1ILnJlYWRfc2hpZnQoNCwiaSIpLEgubCs9NCxILmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksej1ILnJlYWRfc2hpZnQoNCwiaSIpLFM9SC5yZWFkX3NoaWZ0KDQs''@;'; put 'put ''ImkiKSxXPUgucmVhZF9zaGlmdCg0LCJpIiksRj1ILnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgaWU9LTEsZmU9MDtmZTwxMDkmJiEoKGllPUgucmVhZF9zaGlmdCg0LCJpIikpPDApOysrZmUpQltmZV09aWU7dmFyIF9lPWZ1bmN0aW9uIGQobSxFKXtmb3IodmFyIF89TWF0aC5jZWlsKG0u''@;'; put 'put ''bGVuZ3RoL0UpLTEsdz1bXSxTPTE7UzxfOysrUyl3W1MtMV09bS5zbGljZShTKkUsKFMrMSkqRSk7cmV0dXJuIHdbXy0xXT1tLnNsaWNlKF8qRSksd30obSx3KTtwKFcsRixfZSx3LEIpO3ZhciBWZT1mdW5jdGlvbiBUKG0sRSxfLHcpe3ZhciBTPW0ubGVuZ3RoLEY9W10sTD1bXSx6PVtdLFc9''@;'; put 'put ''W10sQj13LTEsSD0wLHE9MCxuZT0wLGhlPTA7Zm9yKEg9MDtIPFM7KytIKWlmKHo9W10sKG5lPUgrRSk+PVMmJihuZS09UyksIUxbbmVdKXtXPVtdO3ZhciBpZT1bXTtmb3IocT1uZTtxPj0wOyl7aWVbcV09ITAsTFtxXT0hMCx6W3oubGVuZ3RoXT1xLFcucHVzaChtW3FdKTt2YXIgZmU9X1tN''@;'; put 'put ''YXRoLmZsb29yKDQqcS93KV07aWYodzw0KyhoZT00KnEmQikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitxKyIgNCAiK3cpO2lmKCFtW2ZlXXx8aWVbcT1MdChtW2ZlXSxoZSldKWJyZWFrfUZbbmVdPXtub2Rlczp6LGRhdGE6emkoW1ddKX19cmV0dXJuIEZ9KF9l''@;'; put 'put ''LEwsQix3KTtWZVtMXS5uYW1lPSIhRGlyZWN0b3J5IixTPjAmJnohPT1lZSYmKFZlW3pdLm5hbWU9IiFNaW5pRkFUIiksVmVbQlswXV0ubmFtZT0iIUZBVCIsVmUuZmF0X2FkZHJzPUIsVmUuc3N6PXc7dmFyIG5yPVtdLEJyPVtdLFphPVtdOyhmdW5jdGlvbiBnKG0sRSxfLHcsUyxGLEwseil7''@;'; put 'put ''Zm9yKHZhciBoZSxXPTAsQj13Lmxlbmd0aD8yOjAsSD1FW21dLmRhdGEscT0wLG5lPTA7cTxILmxlbmd0aDtxKz0xMjgpe3ZhciBpZT1ILnNsaWNlKHEscSsxMjgpO2hyKGllLDY0KSxuZT1pZS5yZWFkX3NoaWZ0KDIpLGhlPXUwKGllLDAsbmUtQiksdy5wdXNoKGhlKTt2YXIgZmU9e25hbWU6''@;'; put 'put ''aGUsdHlwZTppZS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmllLnJlYWRfc2hpZnQoMSksTDppZS5yZWFkX3NoaWZ0KDQsImkiKSxSOmllLnJlYWRfc2hpZnQoNCwiaSIpLEM6aWUucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6aWUucmVhZF9zaGlmdCgxNiksc3RhdGU6aWUucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''Iiksc3RhcnQ6MCxzaXplOjB9OzAhPT1pZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpJiYoZmUuY3Q9TihpZSxpZS5sLTgpKSwwIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQo''@;'; put 'put ''MikraWUucmVhZF9zaGlmdCgyKSYmKGZlLm10PU4oaWUsaWUubC04KSksZmUuc3RhcnQ9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZT1pZS5yZWFkX3NoaWZ0KDQsImkiKSxmZS5zaXplPDAmJmZlLnN0YXJ0PDAmJihmZS5zaXplPWZlLnR5cGU9MCxmZS5zdGFydD1lZSxmZS5uYW1lPSIi''@;'; put 'put ''KSw1PT09ZmUudHlwZT8oVz1mZS5zdGFydCxTPjAmJlchPT1lZSYmKEVbV10ubmFtZT0iIVN0cmVhbURhdGEiKSk6ZmUuc2l6ZT49NDA5Nj8oZmUuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1FW2ZlLnN0YXJ0XSYmKEVbZmUuc3RhcnRdPWsoXyxmZS5zdGFydCxFLmZhdF9hZGRycyxFLnNzeikp''@;'; put 'put ''LEVbZmUuc3RhcnRdLm5hbWU9ZmUubmFtZSxmZS5jb250ZW50PUVbZmUuc3RhcnRdLmRhdGEuc2xpY2UoMCxmZS5zaXplKSk6KGZlLnN0b3JhZ2U9Im1pbmlmYXQiLGZlLnNpemU8MD9mZS5zaXplPTA6VyE9PWVlJiZmZS5zdGFydCE9PWVlJiZFW1ddJiYoZmUuY29udGVudD11KGZlLEVbV10u''@;'; put 'put ''ZGF0YSwoRVt6XXx8e30pLmRhdGEpKSksZmUuY29udGVudCYmaHIoZmUuY29udGVudCwwKSxGW2hlXT1mZSxMLnB1c2goZmUpfX0pKEwsVmUsX2UsbnIsUyx7fSxCcix6KSxmdW5jdGlvbiB2KG0sRSxfKXtmb3IodmFyIHc9MCxTPTAsRj0wLEw9MCx6PTAsVz1fLmxlbmd0aCxCPVtdLEg9W107''@;'; put 'put ''dzxXOysrdylCW3ddPUhbd109dyxFW3ddPV9bd107Zm9yKDt6PEgubGVuZ3RoOysreilTPW1bdz1IW3pdXS5MLEY9bVt3XS5SLEw9bVt3XS5DLEJbd109PT13JiYoLTEhPT1TJiZCW1NdIT09UyYmKEJbd109QltTXSksLTEhPT1GJiZCW0ZdIT09RiYmKEJbd109QltGXSkpLC0xIT09TCYmKEJb''@;'; put 'put ''TF09dyksLTEhPT1TJiZ3IT1CW3ddJiYoQltTXT1CW3ddLEgubGFzdEluZGV4T2YoUyk8eiYmSC5wdXNoKFMpKSwtMSE9PUYmJnchPUJbd10mJihCW0ZdPUJbd10sSC5sYXN0SW5kZXhPZihGKTx6JiZILnB1c2goRikpO2Zvcih3PTE7dzxXOysrdylCW3ddPT09dyYmKC0xIT09RiYmQltGXSE9''@;'; put 'put ''PUY/Qlt3XT1CW0ZdOi0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pKTtmb3Iodz0xO3c8VzsrK3cpaWYoMCE9PW1bd10udHlwZSl7aWYoKHo9dykhPUJbel0pZG97RVt3XT1FW3o9Qlt6XV0rIi8iK0Vbd119d2hpbGUoMCE9PXomJi0xIT09Qlt6XSYmeiE9Qlt6XSk7Qlt3XT0tMX1mb3Io''@;'; put 'put ''RVswXSs9Ii8iLHc9MTt3PFc7Kyt3KTIhPT1tW3ddLnR5cGUmJihFW3ddKz0iLyIpfShCcixaYSxuciksbnIuc2hpZnQoKTt2YXIgUWE9e0ZpbGVJbmRleDpCcixGdWxsUGF0aHM6WmF9O3JldHVybiBFJiZFLnJhdyYmKFFhLnJhdz17aGVhZGVyOm5lLHNlY3RvcnM6X2V9KSxRYX1mdW5jdGlv''@;'; put 'put ''biB1KG0sRSxfKXtmb3IodmFyIFM9bS5zaXplLEY9W10sTD1tLnN0YXJ0O18mJlM+MCYmTD49MDspRi5wdXNoKEUuc2xpY2UoTCpiLEwqYitiKSksUy09YixMPUx0KF8sNCpMKTtyZXR1cm4gMD09PUYubGVuZ3RoP0coMCk6ZnIoRikuc2xpY2UoMCxtLnNpemUpfWZ1bmN0aW9uIHAobSxFLF8s''@;'; put 'put ''dyxTKXt2YXIgRj1lZTtpZihtPT09ZWUpe2lmKDAhPT1FKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW0pe3ZhciBMPV9bbV0sej0odz4+PjIpLTE7aWYoIUwpcmV0dXJuO2Zvcih2YXIgVz0wO1c8eiYmKEY9THQoTCw0''@;'; put 'put ''KlcpKSE9PWVlOysrVylTLnB1c2goRik7cChMdChMLHctNCksRS0xLF8sdyxTKX19ZnVuY3Rpb24gayhtLEUsXyx3LFMpe3ZhciBGPVtdLEw9W107U3x8KFM9W10pO3ZhciB6PXctMSxXPTAsQj0wO2ZvcihXPUU7Vz49MDspe1NbV109ITAsRltGLmxlbmd0aF09VyxMLnB1c2gobVtXXSk7dmFy''@;'; put 'put ''IEg9X1tNYXRoLmZsb29yKDQqVy93KV07aWYodzw0KyhCPTQqVyZ6KSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1crIiA0ICIrdyk7aWYoIW1bSF0pYnJlYWs7Vz1MdChtW0hdLEIpfXJldHVybntub2RlczpGLGRhdGE6emkoW0xdKX19ZnVuY3Rpb24gTihtLEUp''@;'; put 'put ''e3JldHVybiBuZXcgRGF0ZSgxZTMqKGNyKG0sRSs0KS8xZTcqTWF0aC5wb3coMiwzMikrY3IobSxFKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB5KG0sRSl7dmFyIF89RXx8e30sdz1fLnJvb3R8fCJSb290IEVudHJ5IjtpZihtLkZ1bGxQYXRoc3x8KG0uRnVsbFBhdGhzPVtdKSxtLkZp''@;'; put 'put ''bGVJbmRleHx8KG0uRmlsZUluZGV4PVtdKSxtLkZ1bGxQYXRocy5sZW5ndGghPT1tLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1tLkZ1bGxQYXRocy5sZW5ndGgmJihtLkZ1bGxQYXRoc1swXT13KyIvIixtLkZpbGVJ''@;'; put 'put ''bmRleFswXT17bmFtZTp3LHR5cGU6NX0pLF8uQ0xTSUQmJihtLkZpbGVJbmRleFswXS5jbHNpZD1fLkNMU0lEKSxmdW5jdGlvbiBQKG0pe3ZhciBFPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQobSwiLyIrRSkpe3ZhciBfPUcoNCk7X1swXT01NSxfWzFdPV9bM109NTAsX1syXT01NCxtLkZp''@;'; put 'put ''bGVJbmRleC5wdXNoKHtuYW1lOkUsdHlwZToyLGNvbnRlbnQ6XyxzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtLkZ1bGxQYXRocy5wdXNoKG0uRnVsbFBhdGhzWzBdK0UpLFIobSl9fShtKX1mdW5jdGlvbiBSKG0sRSl7eShtKTtmb3IodmFyIF89ITEsdz0hMSxTPW0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aC0xO1M+PTA7LS1TKXt2YXIgRj1tLkZpbGVJbmRleFtTXTtzd2l0Y2goRi50eXBlKXtjYXNlIDA6dz9fPSEwOihtLkZpbGVJbmRleC5wb3AoKSxtLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6dz0hMCxpc05hTihGLlIqRi5MKkYuQykmJihfPSEwKSxGLlI+''@;'; put 'put ''LTEmJkYuTD4tMSYmRi5SPT1GLkwmJihfPSEwKTticmVhaztkZWZhdWx0Ol89ITB9fWlmKF98fEUpe3ZhciBMPW5ldyBEYXRlKDE5ODcsMSwxOSksej0wLFc9T2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlKG51bGwpOnt9LEI9W107Zm9yKFM9MDtTPG0uRnVsbFBhdGhzLmxlbmd0aDsrK1Mp''@;'; put 'put ''V1ttLkZ1bGxQYXRoc1tTXV09ITAsMCE9PW0uRmlsZUluZGV4W1NdLnR5cGUmJkIucHVzaChbbS5GdWxsUGF0aHNbU10sbS5GaWxlSW5kZXhbU11dKTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgSD1hKEJbU11bMF0pOyh3PVdbSF0pfHwoQi5wdXNoKFtILHtuYW1lOm4oSCkucmVwbGFj''@;'; put 'put ''ZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpkZSxjdDpMLG10OkwsY29udGVudDpudWxsfV0pLFdbSF09ITApfWZvcihCLnNvcnQoZnVuY3Rpb24oaGUsaWUpe3JldHVybiBmdW5jdGlvbiByKG0sRSl7Zm9yKHZhciBfPW0uc3BsaXQoIi8iKSx3PUUuc3BsaXQoIi8iKSxTPTAsRj0wLEw9TWF0aC5t''@;'; put 'put ''aW4oXy5sZW5ndGgsdy5sZW5ndGgpO1M8TDsrK1Mpe2lmKEY9X1tTXS5sZW5ndGgtd1tTXS5sZW5ndGgpcmV0dXJuIEY7aWYoX1tTXSE9d1tTXSlyZXR1cm4gX1tTXTx3W1NdPy0xOjF9cmV0dXJuIF8ubGVuZ3RoLXcubGVuZ3RofShoZVswXSxpZVswXSl9KSxtLkZ1bGxQYXRocz1bXSxtLkZp''@;'; put 'put ''bGVJbmRleD1bXSxTPTA7UzxCLmxlbmd0aDsrK1MpbS5GdWxsUGF0aHNbU109QltTXVswXSxtLkZpbGVJbmRleFtTXT1CW1NdWzFdO2ZvcihTPTA7UzxCLmxlbmd0aDsrK1Mpe3ZhciBxPW0uRmlsZUluZGV4W1NdLG5lPW0uRnVsbFBhdGhzW1NdO2lmKHEubmFtZT1uKG5lKS5yZXBsYWNlKCIv''@;'; put 'put ''IiwiIikscS5MPXEuUj1xLkM9LShxLmNvbG9yPTEpLHEuc2l6ZT1xLmNvbnRlbnQ/cS5jb250ZW50Lmxlbmd0aDowLHEuc3RhcnQ9MCxxLmNsc2lkPXEuY2xzaWR8fGRlLDA9PT1TKXEuQz1CLmxlbmd0aD4xPzE6LTEscS5zaXplPTAscS50eXBlPTU7ZWxzZSBpZigiLyI9PW5lLnNsaWNlKC0x''@;'; put 'put ''KSl7Zm9yKHo9UysxO3o8Qi5sZW5ndGgmJmEobS5GdWxsUGF0aHNbel0pIT1uZTsrK3opO2ZvcihxLkM9ej49Qi5sZW5ndGg/LTE6eix6PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9YShuZSk7Kyt6KTtxLlI9ej49Qi5sZW5ndGg/LTE6eixxLnR5cGU9MX1lbHNlIGEobS5G''@;'; put 'put ''dWxsUGF0aHNbUysxXXx8IiIpPT1hKG5lKSYmKHEuUj1TKzEpLHEudHlwZT0yfX19ZnVuY3Rpb24gVihtLEUpe3ZhciBfPUV8fHt9O2lmKCJtYWQiPT1fLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBiZyhtLEUpe2Zvcih2YXIgXz1FfHx7fSx3PV8uYm91bmRhcnl8fCJTaGVldEpTIixTPVsi''@;'; put 'put ''TUlNRS1WZXJzaW9uOiAxLjAiLCdDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iJysodz0iLS0tLS0tPSIrdykuc2xpY2UoMikrJyInLCIiLCIiLCIiXSxGPW0uRnVsbFBhdGhzWzBdLEw9Rix6PW0uRmlsZUluZGV4WzBdLFc9MTtXPG0uRnVsbFBhdGhzLmxlbmd0''@;'; put 'put ''aDsrK1cpaWYoTD1tLkZ1bGxQYXRoc1tXXS5zbGljZShGLmxlbmd0aCksKHo9bS5GaWxlSW5kZXhbV10pLnNpemUmJnouY29udGVudCYmIlx4MDFTaDMzdEo1IiE9TCl7TD1MLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRl0vZyxmdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIl94IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KS5yZXBsYWNlKC9bXHUwMDgwLVx1RkZGRl0vZyxmdW5jdGlvbihfZSl7cmV0dXJuIl91IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KTtmb3IodmFyIEI9ei5jb250ZW50LEg9U2UmJkJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcihCKT9CLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShCKSxxPTAsbmU9TWF0aC5taW4oMTAyNCxILmxlbmd0aCksaGU9MCxpZT0wO2llPD1uZTsrK2llKShoZT1ILmNoYXJDb2RlQXQoaWUpKT49MzImJmhlPDEyOCYmKytxO3ZhciBmZT1xPj00Km5lLzU7Uy5wdXNoKHcpLFMucHVzaCgi''@;'; put 'put ''Q29udGVudC1Mb2NhdGlvbjogIisoXy5yb290fHwiZmlsZTovLy9DOi9TaGVldEpTLyIpK0wpLFMucHVzaCgiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIisoZmU/InF1b3RlZC1wcmludGFibGUiOiJiYXNlNjQiKSksUy5wdXNoKCJDb250ZW50LVR5cGU6ICIrQ2coeixMKSksUy5wdXNo''@;'; put 'put ''KCIiKSxTLnB1c2goZmU/T2coSCk6RGcoSCkpfXJldHVybiBTLnB1c2godysiLS1cclxuIiksUy5qb2luKCJcclxuIil9KG0sXyk7aWYoInppcCI9PT0oUihtKSxfLmZpbGVUeXBlKSlyZXR1cm4gZnVuY3Rpb24gQWcobSxFKXt2YXIgXz1FfHx7fSx3PVtdLFM9W10sRj1HKDEpLEw9Xy5jb21w''@;'; put 'put ''cmVzc2lvbj84OjAsej0wLEI9MCxIPTAscT0wLG5lPTAsaGU9bS5GdWxsUGF0aHNbMF0saWU9aGUsZmU9bS5GaWxlSW5kZXhbMF0sX2U9W10sVmU9MDtmb3IoQj0xO0I8bS5GdWxsUGF0aHMubGVuZ3RoOysrQilpZihpZT1tLkZ1bGxQYXRoc1tCXS5zbGljZShoZS5sZW5ndGgpLChmZT1tLkZp''@;'; put 'put ''bGVJbmRleFtCXSkuc2l6ZSYmZmUuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9aWUpe3ZhciBDcj1xLG5yPUcoaWUubGVuZ3RoKTtmb3IoSD0wO0g8aWUubGVuZ3RoOysrSCluci53cml0ZV9zaGlmdCgxLDEyNyZpZS5jaGFyQ29kZUF0KEgpKTtucj1uci5zbGljZSgwLG5yLmwpLF9lW25lXT1z''@;'; put 'put ''by5idWYoZmUuY29udGVudCwwKTt2YXIgQnI9ZmUuY29udGVudDs4PT1MJiYoQnI9TyhCcikpLChGPUcoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxGLndyaXRlX3NoaWZ0KDIsMjApLEYud3JpdGVfc2hpZnQoMix6KSxGLndyaXRlX3NoaWZ0KDIsTCksZmUubXQ/aShGLGZlLm10KTpG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgtNCw4Jno/MDpfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDApLHErPUYubGVuZ3RoLHcucHVzaChGKSxxKz1uci5sZW5ndGgsdy5wdXNoKG5yKSxxKz1Cci5sZW5ndGgsdy5wdXNoKEJyKSw4JnomJigoRj1HKDEyKSkud3JpdGVfc2hpZnQoLTQsX2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsQnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsZmUuY29udGVu''@;'; put 'put ''dC5sZW5ndGgpLHErPUYubCx3LnB1c2goRikpLChGPUcoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRl''@;'; put 'put ''X3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsbnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxG''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCxDciksVmUrPUYubCxTLnB1c2goRiksVmUrPW5yLmxlbmd0aCxTLnB1c2gobnIpLCsrbmV9cmV0dXJuKEY9RygyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxGLndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''Ri53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCgyLG5lKSxGLndyaXRlX3NoaWZ0KDQsVmUpLEYud3JpdGVfc2hpZnQoNCxxKSxGLndyaXRlX3NoaWZ0KDIsMCksZnIoW2ZyKHcpLGZyKFMpLEZdKX0obSxfKTt2YXIgdz1mdW5jdGlvbihoZSl7Zm9y''@;'; put 'put ''KHZhciBpZT0wLGZlPTAsX2U9MDtfZTxoZS5GaWxlSW5kZXgubGVuZ3RoOysrX2Upe3ZhciBWZT1oZS5GaWxlSW5kZXhbX2VdO2lmKFZlLmNvbnRlbnQpe3ZhciBDcj1WZS5jb250ZW50Lmxlbmd0aDtDcj4wJiYoQ3I8NDA5Nj9pZSs9Q3IrNjM+PjY6ZmUrPUNyKzUxMT4+OSl9fWZvcih2YXIg''@;'; put 'put ''bnI9aGUuRnVsbFBhdGhzLmxlbmd0aCszPj4yLFphPWllKzEyNz4+NyxRYT0oaWUrNz4+MykrZmUrbnIrWmEsWnQ9UWErMTI3Pj43LHRpPVp0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTtRYStadCt0aSsxMjc+Pjc+WnQ7KXRpPSsrWnQ8PTEwOT8wOk1hdGguY2VpbCgoWnQtMTA5''@;'; put 'put ''KS8xMjcpO3ZhciBtdD1bMSx0aSxadCxaYSxucixmZSxpZSwwXTtyZXR1cm4gaGUuRmlsZUluZGV4WzBdLnNpemU9aWU8PDYsbXRbN109KGhlLkZpbGVJbmRleFswXS5zdGFydD1tdFswXSttdFsxXSttdFsyXSttdFszXSttdFs0XSttdFs1XSkrKG10WzZdKzc+PjMpLG10fShtKSxTPUcod1s3''@;'; put 'put ''XTw8OSksRj0wLEw9MDtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgxLHJlW0ZdKTtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDIsNjIpLFMud3JpdGVfc2hpZnQoMiwzKSxTLndyaXRlX3NoaWZ0KDIsNjU1MzQpLFMud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiw5KSxTLndyaXRlX3NoaWZ0KDIsNiksRj0wO0Y8MzsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LHdbMl0pLFMud3JpdGVfc2hpZnQoNCx3WzBdK3dbMV0rd1syXSt3WzNdLTEpLFMud3JpdGVfc2hpZnQoNCwwKSxTLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsNDA5NiksUy53cml0ZV9zaGlmdCg0LHdbM10/d1swXSt3WzFdK3dbMl0tMTplZSksUy53cml0ZV9zaGlmdCg0LHdbM10pLFMud3JpdGVfc2hpZnQoLTQsd1sxXT93WzBdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzFdKSxGPTA7RjwxMDk7KytGKVMud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsRjx3WzJdP3dbMV0rRjotMSk7aWYod1sxXSlmb3IoTD0wO0w8d1sxXTsrK0wpe2Zvcig7RjwyMzYrMTI3Kkw7KytGKVMud3JpdGVfc2hpZnQoLTQsRjx3WzJdP3dbMV0rRjotMSk7Uy53cml0ZV9zaGlmdCgtNCxMPT09d1sxXS0xP2VlOkwrMSl9dmFyIHo9ZnVuY3Rpb24oaGUpe2ZvcihM''@;'; put 'put ''Kz1oZTtGPEwtMTsrK0YpUy53cml0ZV9zaGlmdCgtNCxGKzEpO2hlJiYoKytGLFMud3JpdGVfc2hpZnQoLTQsZWUpKX07Zm9yKEw9Rj0wLEwrPXdbMV07RjxMOysrRilTLndyaXRlX3NoaWZ0KC00LHVlLkRJRlNFQ1QpO2ZvcihMKz13WzJdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5G''@;'; put 'put ''QVRTRUNUKTt6KHdbM10pLHood1s0XSk7Zm9yKHZhciBXPTAsQj0wLEg9bS5GaWxlSW5kZXhbMF07VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYhKChCPUguY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSC5zdGFydD1MLHooQis1MTE+PjkpKTtm''@;'; put 'put ''b3Ioeih3WzZdKzc+PjMpOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEw9Rj0wLFc9MDtXPG0uRmlsZUluZGV4Lmxlbmd0aDsrK1cpKEg9bS5GaWxlSW5kZXhbV10pLmNvbnRlbnQmJihCPUguY29udGVudC5sZW5ndGgpJiYhKEI+PTQwOTYpJiYoSC5zdGFy''@;'; put 'put ''dD1MLHooQis2Mz4+NikpO2Zvcig7NTExJlMubDspUy53cml0ZV9zaGlmdCgtNCx1ZS5FTkRPRkNIQUlOKTtmb3IoRj0wO0Y8d1s0XTw8MjsrK0Ype3ZhciBxPW0uRnVsbFBhdGhzW0ZdO2lmKHEmJjAhPT1xLmxlbmd0aCl7SD1tLkZpbGVJbmRleFtGXSwwPT09RiYmKEguc3RhcnQ9SC5zaXpl''@;'; put 'put ''P0guc3RhcnQtMTplZSk7dmFyIG5lPTA9PT1GJiZfLnJvb3R8fEgubmFtZTtpZihCPTIqKG5lLmxlbmd0aCsxKSxTLndyaXRlX3NoaWZ0KDY0LG5lLCJ1dGYxNmxlIiksUy53cml0ZV9zaGlmdCgyLEIpLFMud3JpdGVfc2hpZnQoMSxILnR5cGUpLFMud3JpdGVfc2hpZnQoMSxILmNvbG9yKSxT''@;'; put 'put ''LndyaXRlX3NoaWZ0KC00LEguTCksUy53cml0ZV9zaGlmdCgtNCxILlIpLFMud3JpdGVfc2hpZnQoLTQsSC5DKSxILmNsc2lkKVMud3JpdGVfc2hpZnQoMTYsSC5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoVz0wO1c8NDsrK1cpUy53cml0ZV9zaGlmdCg0LDApO1Mud3JpdGVfc2hpZnQoNCxILnN0''@;'; put 'put ''YXRlfHwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LEguc3RhcnQpLFMud3JpdGVfc2hpZnQoNCxILnNpemUpLFMud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXPTA7''@;'; put 'put ''VzwxNzsrK1cpUy53cml0ZV9zaGlmdCg0LDApO2ZvcihXPTA7VzwzOysrVylTLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXPTA7VzwxMjsrK1cpUy53cml0ZV9zaGlmdCg0LDApfX1mb3IoRj0xO0Y8bS5GaWxlSW5kZXgubGVuZ3RoOysrRilpZigoSD1tLkZpbGVJbmRleFtGXSkuc2l6ZT49NDA5''@;'; put 'put ''NilpZihTLmw9SC5zdGFydCsxPDw5LFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5sKz1ILnNpemUrNTExJi01MTI7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3Io''@;'; put 'put ''OzUxMSZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+MCYmSC5zaXplPDQwOTYpaWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihILmNvbnRlbnQpKUguY29udGVudC5jb3B5KFMsUy5sLDAsSC5z''@;'; put 'put ''aXplKSxTLmwrPUguc2l6ZSs2MyYtNjQ7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3IoOzYzJlc7KytXKVMud3JpdGVfc2hpZnQoMSwwKX1pZihTZSlTLmw9Uy5sZW5ndGg7ZWxzZSBmb3IoO1MubDxTLmxlbmd0aDspUy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApO3JldHVybiBTfXQudmVyc2lvbj0iMS4yLjEiO3ZhciBLLGI9NjQsZWU9LTIsbGU9ImQwY2YxMWUwYTFiMTFhZTEiLHJlPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sZGU9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1ZT17TUFYUkVHU0VDVDot''@;'; put 'put ''NixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplZSxGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOmxlLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmRlLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3Rv''@;'; put 'put ''cmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBjZShtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0ubGVuZ3RoKSxfPTA7XzxtLmxlbmd0aDsrK18pRVtfXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bX10pO3JldHVybiBFLmpvaW4oIiIpfWZ1bmN0''@;'; put 'put ''aW9uIE8obSl7cmV0dXJuIEs/Sy5kZWZsYXRlUmF3U3luYyhtKTp5ZShtKX1mb3IodmFyIG0sRSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3''@;'; put 'put ''LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxRPXR5cGVvZiBVaW50OEFy''@;'; put 'put ''cmF5PCJ1IixZPVE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxFZT0wO0VlPDI1NjsrK0VlKVlbRWVdPSh2b2lkIDAsMjU1JigoRT0xMzk1MzYmKChtPUVlKTw8MXxtPDwxMSl8NTU4MTQ0JihtPDw1fG08PDE1KSk+PjE2fEU+Pjh8RSkpO2Z1bmN0aW9uIEEobSxFKXt2YXIgXz1ZWzI1NSZtXTty''@;'; put 'put ''ZXR1cm4gRTw9OD9fPj4+OC1FOihfPV88PDh8WVttPj44JjI1NV0sRTw9MTY/Xz4+PjE2LUU6KF89Xzw8OHxZW20+PjE2JjI1NV0pPj4+MjQtRSl9ZnVuY3Rpb24gUGUobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Nj8wOm1bdysxXTw8OCkpPj4+XyYzfWZ1bmN0aW9u''@;'; put 'put ''IEFlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTU/MDptW3crMV08PDgpKT4+Pl8mN31mdW5jdGlvbiBDZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD0zPzA6bVt3KzFdPDw4KSk+Pj5fJjMxfWZ1bmN0aW9uIG9lKG0sRSl7dmFyIF89NyZF''@;'; put 'put ''LHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTE/MDptW3crMV08PDgpKT4+Pl8mMTI3fWZ1bmN0aW9uIHFlKG0sRSxfKXt2YXIgdz03JkUsUz1FPj4+MyxMPW1bU10+Pj53O3JldHVybiBfPDgtd3x8KEx8PW1bUysxXTw8OC13LF88MTYtdyl8fChMfD1tW1MrMl08PDE2LXcsXzwyNC13KXx8KEx8''@;'; put 'put ''PW1bUyszXTw8MjQtdyksTCYoMTw8XyktMX1mdW5jdGlvbiBqcihtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjM7cmV0dXJuIHc8PTU/bVtTXXw9KDcmXyk8PHc6KG1bU118PV88PHcmMjU1LG1bUysxXT0oNyZfKT4+OC13KSxFKzN9ZnVuY3Rpb24gZnQobSxFLF8pe3JldHVybiBtW0U+Pj4zXXw9''@;'; put 'put ''Xz0oMSZfKTw8KDcmRSksRSsxfWZ1bmN0aW9uIHZ0KG0sRSxfKXt2YXIgUz1FPj4+MztyZXR1cm4gbVtTXXw9MjU1JihfPDw9NyZFKSxtW1MrMV09Xz4+Pj04LEUrOH1mdW5jdGlvbiBKYShtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPTI1NSYo''@;'; put 'put ''Xz4+Pj04KSxtW1MrMl09Xz4+PjgsRSsxNn1mdW5jdGlvbiBPdChtLEUpe3ZhciBfPW0ubGVuZ3RoLHc9MipfPkU/MipfOkUrNSxTPTA7aWYoXz49RSlyZXR1cm4gbTtpZihTZSl7dmFyIEY9bmkodyk7aWYobS5jb3B5KW0uY29weShGKTtlbHNlIGZvcig7UzxtLmxlbmd0aDsrK1MpRltTXT1t''@;'; put 'put ''W1NdO3JldHVybiBGfWlmKFEpe3ZhciBMPW5ldyBVaW50OEFycmF5KHcpO2lmKEwuc2V0KUwuc2V0KG0pO2Vsc2UgZm9yKDtTPF87KytTKUxbU109bVtTXTtyZXR1cm4gTH1yZXR1cm4gbS5sZW5ndGg9dyxtfWZ1bmN0aW9uIExyKG0pe2Zvcih2YXIgRT1uZXcgQXJyYXkobSksXz0wO188bTsr''@;'; put 'put ''K18pRVtfXT0wO3JldHVybiBFfWZ1bmN0aW9uIHB0KG0sRSxfKXt2YXIgdz0xLFM9MCxGPTAsTD0wLHo9MCxXPW0ubGVuZ3RoLEI9UT9uZXcgVWludDE2QXJyYXkoMzIpOkxyKDMyKTtmb3IoRj0wO0Y8MzI7KytGKUJbRl09MDtmb3IoRj1XO0Y8XzsrK0YpbVtGXT0wO1c9bS5sZW5ndGg7dmFy''@;'; put 'put ''IEg9UT9uZXcgVWludDE2QXJyYXkoVyk6THIoVyk7Zm9yKEY9MDtGPFc7KytGKUJbUz1tW0ZdXSsrLHc8UyYmKHc9UyksSFtGXT0wO2ZvcihCWzBdPTAsRj0xO0Y8PXc7KytGKUJbRisxNl09ej16K0JbRi0xXTw8MTtmb3IoRj0wO0Y8VzsrK0YpMCE9KHo9bVtGXSkmJihIW0ZdPUJbeisxNl0r''@;'; put 'put ''Kyk7dmFyIHE9MDtmb3IoRj0wO0Y8VzsrK0YpaWYoMCE9KHE9bVtGXSkpZm9yKHo9QShIW0ZdLHcpPj53LXEsTD0oMTw8dys0LXEpLTE7TD49MDstLUwpRVt6fEw8PHFdPTE1JnF8Rjw8NDtyZXR1cm4gd312YXIgSXQ9UT9uZXcgVWludDE2QXJyYXkoNTEyKTpMcig1MTIpLHFhPVE/bmV3IFVp''@;'; put 'put ''bnQxNkFycmF5KDMyKTpMcigzMik7aWYoIVEpe2Zvcih2YXIgeXI9MDt5cjw1MTI7Kyt5cilJdFt5cl09MDtmb3IoeXI9MDt5cjwzMjsrK3lyKXFhW3lyXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxFPTA7RTwzMjtFKyspbS5wdXNoKDUpO3B0KG0scWEsMzIpO3ZhciBfPVtdO2ZvcihF''@;'; put 'put ''PTA7RTw9MTQzO0UrKylfLnB1c2goOCk7Zm9yKDtFPD0yNTU7RSsrKV8ucHVzaCg5KTtmb3IoO0U8PTI3OTtFKyspXy5wdXNoKDcpO2Zvcig7RTw9Mjg3O0UrKylfLnB1c2goOCk7cHQoXyxJdCwyODgpfSgpO3ZhciBjdD1mdW5jdGlvbigpe2Zvcih2YXIgRT1RP25ldyBVaW50OEFycmF5KDMy''@;'; put 'put ''NzY4KTpbXSxfPTAsdz0wO188c2UubGVuZ3RoLTE7KytfKWZvcig7dzxzZVtfKzFdOysrdylFW3ddPV87Zm9yKDt3PDMyNzY4OysrdylFW3ddPTI5O3ZhciBTPVE/bmV3IFVpbnQ4QXJyYXkoMjU5KTpbXTtmb3IoXz0wLHc9MDtfPGoubGVuZ3RoLTE7KytfKWZvcig7dzxqW18rMV07Kyt3KVNb''@;'; put 'put ''d109XztyZXR1cm4gZnVuY3Rpb24oVyxCKXtyZXR1cm4gVy5sZW5ndGg8OD9mdW5jdGlvbiBGKHosVyl7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aDspe3ZhciBIPU1hdGgubWluKDY1NTM1LHoubGVuZ3RoLUIpO2ZvcihXLndyaXRlX3NoaWZ0KDEsKyhCK0g9PXoubGVuZ3RoKSksVy53cml0ZV9z''@;'; put 'put ''aGlmdCgyLEgpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+SCk7SC0tID4wOylXW1cubCsrXT16W0IrK119cmV0dXJuIFcubH0oVyxCKTpmdW5jdGlvbiBMKHosVyl7Zm9yKHZhciBCPTAsSD0wLHE9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOltdO0g8ei5sZW5ndGg7KXt2YXIgbmU9TWF0aC5t''@;'; put 'put ''aW4oNjU1MzUsei5sZW5ndGgtSCk7aWYobmU8MTApe2Zvcig3JihCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSkpJiYoQis9OC0oNyZCKSksVy5sPUIvOHwwLFcud3JpdGVfc2hpZnQoMixuZSksVy53cml0ZV9zaGlmdCgyLDY1NTM1Jn5uZSk7bmUtLSA+MDspV1tXLmwrK109eltIKytdO0I9''@;'; put 'put ''OCpXLmx9ZWxzZXtCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSsyKTtmb3IodmFyIGhlPTA7bmUtLSA+MDspe3ZhciBpZT16W0hdLGZlPS0xLF9lPTA7aWYoKGZlPXFbaGU9MzI3NjcmKGhlPDw1XmllKV0pJiYoKGZlfD0tMzI3NjgmSCk+SCYmKGZlLT0zMjc2OCksZmU8SCkpZm9yKDt6W2Zl''@;'; put 'put ''K19lXT09eltIK19lXSYmX2U8MjUwOykrK19lO2lmKF9lPjIpeyhpZT1TW19lXSk8PTIyP0I9dnQoVyxCLFlbaWUrMV0+PjEpLTE6KHZ0KFcsQiwzKSx2dChXLEIrPTUsWVtpZS0yM10+PjUpLEIrPTMpO3ZhciBWZT1pZTw4PzA6aWUtND4+MjtWZT4wJiYoSmEoVyxCLF9lLWpbaWVdKSxCKz1W''@;'; put 'put ''ZSksQj12dChXLEIsWVtpZT1FW0gtZmVdXT4+MyksQi09Mzt2YXIgQ3I9aWU8ND8wOmllLTI+PjE7Q3I+MCYmKEphKFcsQixILWZlLXNlW2llXSksQis9Q3IpO2Zvcih2YXIgbnI9MDtucjxfZTsrK25yKXFbaGVdPTMyNzY3JkgsaGU9MzI3NjcmKGhlPDw1XnpbSF0pLCsrSDtuZS09X2UtMX1l''@;'; put 'put ''bHNlIGllPD0xNDM/aWUrPTQ4OkI9ZnQoVyxCLDEpLEI9dnQoVyxCLFlbaWVdKSxxW2hlXT0zMjc2NyZILCsrSH1CPXZ0KFcsQiwwKS0xfX1yZXR1cm4gVy5sPShCKzcpLzh8MCxXLmx9KFcsQil9fSgpO2Z1bmN0aW9uIHllKG0pe3ZhciBFPUcoNTArTWF0aC5mbG9vcigxLjEqbS5sZW5ndGgp''@;'; put 'put ''KSxfPWN0KG0sRSk7cmV0dXJuIEUuc2xpY2UoMCxfKX12YXIgWmU9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxLcj1RP25ldyBVaW50MTZBcnJheSgzMjc2OCk6THIoMzI3NjgpLHNyPVE/bmV3IFVpbnQxNkFycmF5KDEyOCk6THIoMTI4KSxxdD0xLEZjPTE7ZnVuY3Rpb24g''@;'; put 'put ''U2cobSxFKXt2YXIgXz1DZShtLEUpKzI1Nyx3PUNlKG0sRSs9NSkrMSxTPWZ1bmN0aW9uIExlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTQ/MDptW3crMV08PDgpKT4+Pl8mMTV9KG0sRSs9NSkrNDtFKz00O2Zvcih2YXIgRj0wLEw9UT9uZXcgVWludDhBcnJheSgx''@;'; put 'put ''OSk6THIoMTkpLHo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFc9MSxCPVE/bmV3IFVpbnQ4QXJyYXkoOCk6THIoOCksSD1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLHE9TC5sZW5ndGgsbmU9MDtuZTxTOysrbmUpTFtEW25lXV09Rj1BZShtLEUpLFc8RiYmKFc9''@;'; put 'put ''RiksQltGXSsrLEUrPTM7dmFyIGhlPTA7Zm9yKEJbMF09MCxuZT0xO25lPD1XOysrbmUpSFtuZV09aGU9aGUrQltuZS0xXTw8MTtmb3IobmU9MDtuZTxxOysrbmUpMCE9KGhlPUxbbmVdKSYmKHpbbmVdPUhbaGVdKyspO3ZhciBpZT0wO2ZvcihuZT0wO25lPHE7KytuZSlpZigwIT0oaWU9TFtu''@;'; put 'put ''ZV0pKXtoZT1ZW3pbbmVdXT4+OC1pZTtmb3IodmFyIGZlPSgxPDw3LWllKS0xO2ZlPj0wOy0tZmUpc3JbaGV8ZmU8PGllXT03JmllfG5lPDwzfXZhciBfZT1bXTtmb3IoVz0xO19lLmxlbmd0aDxfK3c7KXN3aXRjaChoZT1zcltvZShtLEUpXSxFKz03JmhlLGhlPj4+PTMpe2Nhc2UgMTY6Zm9y''@;'; put 'put ''KEY9MytQZShtLEUpLEUrPTIsaGU9X2VbX2UubGVuZ3RoLTFdO0YtLSA+MDspX2UucHVzaChoZSk7YnJlYWs7Y2FzZSAxNzpmb3IoRj0zK0FlKG0sRSksRSs9MztGLS0gPjA7KV9lLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoRj0xMStvZShtLEUpLEUrPTc7Ri0tID4wOylfZS5wdXNoKDAp''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6X2UucHVzaChoZSksVzxoZSYmKFc9aGUpfXZhciBWZT1fZS5zbGljZSgwLF8pLENyPV9lLnNsaWNlKF8pO2ZvcihuZT1fO25lPDI4NjsrK25lKVZlW25lXT0wO2ZvcihuZT13O25lPDMwOysrbmUpQ3JbbmVdPTA7cmV0dXJuIHF0PXB0KFZlLFplLDI4NiksRmM9cHQo''@;'; put 'put ''Q3IsS3IsMzApLEV9ZnVuY3Rpb24geWMobSxFKXt2YXIgdz1mdW5jdGlvbiBGZyhtLEUpe2lmKDM9PW1bMF0mJiEoMyZtWzFdKSlyZXR1cm5bX3QoRSksMl07Zm9yKHZhciBfPTAsdz0wLFM9bmkoRXx8MTw8MTgpLEY9MCxMPVMubGVuZ3RoPj4+MCx6PTAsVz0wOyEoMSZ3KTspaWYodz1BZSht''@;'; put 'put ''LF8pLF8rPTMsdz4+PjEpZm9yKHc+PjE9PTE/KHo9OSxXPTUpOihfPVNnKG0sXyksej1xdCxXPUZjKTs7KXshRSYmTDxGKzMyNzY3JiYoTD0oUz1PdChTLEYrMzI3NjcpKS5sZW5ndGgpO3ZhciBIPXFlKG0sXyx6KSxxPXc+Pj4xPT0xP0l0W0hdOlplW0hdO2lmKF8rPTE1JnEsKHE+Pj49NCk+''@;'; put 'put ''Pj44JjI1NSl7aWYoMjU2PT1xKWJyZWFrO3ZhciBuZT0ocS09MjU3KTw4PzA6cS00Pj4yO25lPjUmJihuZT0wKTt2YXIgaGU9RitqW3FdO25lPjAmJihoZSs9cWUobSxfLG5lKSxfKz1uZSksSD1xZShtLF8sVyksXys9MTUmKHE9dz4+PjE9PTE/cWFbSF06S3JbSF0pO3ZhciBpZT0ocT4+Pj00''@;'; put 'put ''KTw0PzA6cS0yPj4xLGZlPXNlW3FdO2ZvcihpZT4wJiYoZmUrPXFlKG0sXyxpZSksXys9aWUpLCFFJiZMPGhlJiYoTD0oUz1PdChTLGhlKzEwMCkpLmxlbmd0aCk7RjxoZTspU1tGXT1TW0YtZmVdLCsrRn1lbHNlIFNbRisrXT1xfWVsc2V7NyZfJiYoXys9OC0oNyZfKSk7dmFyIEI9bVtfPj4+''@;'; put 'put ''M118bVsxKyhfPj4+MyldPDw4O2lmKF8rPTMyLEI+MClmb3IoIUUmJkw8RitCJiYoTD0oUz1PdChTLEYrQikpLmxlbmd0aCk7Qi0tID4wOylTW0YrK109bVtfPj4+M10sXys9OH1yZXR1cm4gRT9bUyxfKzc+Pj4zXTpbUy5zbGljZSgwLEYpLF8rNz4+PjNdfShtLnNsaWNlKG0ubHx8MCksRSk7''@;'; put 'put ''cmV0dXJuIG0ubCs9d1sxXSx3WzBdfWZ1bmN0aW9uIEFjKG0sRSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKEUpO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihFKX1mdW5jdGlvbiBDYyhtLEUpe3ZhciBfPW07aHIoXywwKTt2YXIgRj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb''@;'; put 'put ''XX07eShGLHtyb290OkUucm9vdH0pO2Zvcih2YXIgTD1fLmxlbmd0aC00Oyg4MCE9X1tMXXx8NzUhPV9bTCsxXXx8NSE9X1tMKzJdfHw2IT1fW0wrM10pJiZMPj0wOyktLUw7Xy5sPUwrNCxfLmwrPTQ7dmFyIHo9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9Njt2YXIgVz1fLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''Zm9yKF8ubD1XLEw9MDtMPHo7KytMKXtfLmwrPTIwO3ZhciBCPV8ucmVhZF9zaGlmdCg0KSxIPV8ucmVhZF9zaGlmdCg0KSxxPV8ucmVhZF9zaGlmdCgyKSxuZT1fLnJlYWRfc2hpZnQoMiksaGU9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9ODt2YXIgaWU9Xy5yZWFkX3NoaWZ0KDQpLGZlPWYoXy5z''@;'; put 'put ''bGljZShfLmwrcSxfLmwrcStuZSkpO18ubCs9cStuZStoZTt2YXIgX2U9Xy5sO18ubD1pZSs0LHlnKF8sQixILEYsZmUpLF8ubD1fZX1yZXR1cm4gRn1mdW5jdGlvbiB5ZyhtLEUsXyx3LFMpe20ubCs9Mjt2YXIgRj1tLnJlYWRfc2hpZnQoMiksTD1tLnJlYWRfc2hpZnQoMiksej1mdW5jdGlv''@;'; put 'put ''biBzKG0pe3ZhciBFPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSxfPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSx3PW5ldyBEYXRlLFM9MzEmXyxGPTE1JihfPj4+PTUpO18+Pj49NCx3LnNldE1pbGxpc2Vjb25kcygwKSx3LnNldEZ1bGxZZWFyKF8rMTk4MCksdy5zZXRNb250aChGLTEpLHcuc2V0RGF0''@;'; put 'put ''ZShTKTt2YXIgTD0zMSZFLHo9NjMmKEU+Pj49NSk7cmV0dXJuIHcuc2V0SG91cnMoRT4+Pj02KSx3LnNldE1pbnV0ZXMoeiksdy5zZXRTZWNvbmRzKEw8PDEpLHd9KG0pO2lmKDgyNTcmRil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7bS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpO2Zvcih2YXIgQj1tLnJlYWRfc2hpZnQoNCksSD1tLnJlYWRfc2hpZnQoNCkscT1tLnJlYWRfc2hpZnQoMiksbmU9bS5yZWFkX3NoaWZ0KDIpLGhlPSIiLGllPTA7aWU8cTsrK2llKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bbS5sKytdKTtpZihuZSl7dmFyIGZlPWYobS5zbGljZSht''@;'; put 'put ''LmwsbS5sK25lKSk7KGZlWzIxNTg5XXx8e30pLm10JiYoej1mZVsyMTU4OV0ubXQpLCgoU3x8e30pWzIxNTg5XXx8e30pLm10JiYoej1TWzIxNTg5XS5tdCl9bS5sKz1uZTt2YXIgX2U9bS5zbGljZShtLmwsbS5sK0IpO3N3aXRjaChMKXtjYXNlIDg6X2U9ZnVuY3Rpb24gVShtLEUpe2lmKCFL''@;'; put 'put ''KXJldHVybiB5YyhtLEUpO3ZhciB3PW5ldygwLEsuSW5mbGF0ZVJhdyksUz13Ll9wcm9jZXNzQ2h1bmsobS5zbGljZShtLmwpLHcuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG0ubCs9dy5ieXRlc1JlYWQsU30obSxIKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMKX12YXIgVmU9ITE7OCZGJiYoMTM0Njk1NzYwPT1tLnJlYWRfc2hpZnQoNCkmJihtLnJlYWRfc2hpZnQoNCksVmU9ITApLEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpKSxCIT1FJiZBYyhWZSwiQmFk''@;'; put 'put ''IGNvbXByZXNzZWQgc2l6ZTogIitFKyIgIT0gIitCKSxIIT1fJiZBYyhWZSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK18rIiAhPSAiK0gpLHJpKHcsaGUsX2Use3Vuc2FmZTohMCxtdDp6fSl9dmFyIFAwPXtodG06InRleHQvaHRtbCIseG1sOiJ0ZXh0L3htbCIsZ2lmOiJpbWFnZS9naWYi''@;'; put 'put ''LGpwZzoiaW1hZ2UvanBlZyIscG5nOiJpbWFnZS9wbmciLG1zbzoiYXBwbGljYXRpb24veC1tc28iLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsc2gzM3RqNToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn07ZnVuY3Rpb24gQ2cobSxFKXtpZihtLmN0eXBlKXJldHVy''@;'; put 'put ''biBtLmN0eXBlO3ZhciBfPW0ubmFtZXx8IiIsdz1fLm1hdGNoKC9cLihbXlwuXSspJC8pO3JldHVybiB3JiZQMFt3WzFdXXx8RSYmKHc9KF89RSkubWF0Y2goL1tcLlxcXShbXlwuXFxdKSskLykpJiZQMFt3WzFdXT9QMFt3WzFdXToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn1mdW5jdGlv''@;'; put 'put ''biBEZyhtKXtmb3IodmFyIEU9Z2EobSksXz1bXSx3PTA7dzxFLmxlbmd0aDt3Kz03NilfLnB1c2goRS5zbGljZSh3LHcrNzYpKTtyZXR1cm4gXy5qb2luKCJcclxuIikrIlxyXG4ifWZ1bmN0aW9uIE9nKG0pe3ZhciBFPW0ucmVwbGFjZSgvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3''@;'; put 'put ''RS1ceEZGPV0vZyxmdW5jdGlvbihCKXt2YXIgSD1CLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIj0iKygxPT1ILmxlbmd0aD8iMCIrSDpIKX0pOyJcbiI9PShFPUUucmVwbGFjZSgvICQvZ20sIj0yMCIpLnJlcGxhY2UoL1x0JC9nbSwiPTA5IikpLmNo''@;'; put 'put ''YXJBdCgwKSYmKEU9Ij0wRCIrRS5zbGljZSgxKSk7Zm9yKHZhciBfPVtdLHc9KEU9RS5yZXBsYWNlKC9ccig/IVxuKS9nbSwiPTBEIikucmVwbGFjZSgvXG5cbi9nbSwiXG49MEEiKS5yZXBsYWNlKC8oW15cclxuXSlcbi9nbSwiJDE9MEEiKSkuc3BsaXQoIlxyXG4iKSxTPTA7Uzx3Lmxlbmd0''@;'; put 'put ''aDsrK1Mpe3ZhciBGPXdbU107aWYoMCE9Ri5sZW5ndGgpZm9yKHZhciBMPTA7TDxGLmxlbmd0aDspe3ZhciB6PTc2LFc9Ri5zbGljZShMLEwreik7Ij0iPT1XLmNoYXJBdCh6LTEpP3otLToiPSI9PVcuY2hhckF0KHotMik/ei09MjoiPSI9PVcuY2hhckF0KHotMykmJih6LT0zKSxXPUYuc2xp''@;'; put 'put ''Y2UoTCxMK3opLChMKz16KTxGLmxlbmd0aCYmKFcrPSI9IiksXy5wdXNoKFcpfWVsc2UgXy5wdXNoKCIiKX1yZXR1cm4gXy5qb2luKCJcclxuIil9ZnVuY3Rpb24gUmcobSxFLF8pe2Zvcih2YXIgTCx3PSIiLFM9IiIsRj0iIix6PTA7ejwxMDsrK3ope3ZhciBXPUVbel07aWYoIVd8fFcubWF0''@;'; put 'put ''Y2goL15ccyokLykpYnJlYWs7dmFyIEI9Vy5tYXRjaCgvXiguKj8pOlxzKihbXlxzXS4qKSQvKTtpZihCKXN3aXRjaChCWzFdLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY29udGVudC1sb2NhdGlvbiI6dz1CWzJdLnRyaW0oKTticmVhaztjYXNlImNvbnRlbnQtdHlwZSI6Rj1CWzJdLnRyaW0oKTti''@;'; put 'put ''cmVhaztjYXNlImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciOlM9QlsyXS50cmltKCl9fXN3aXRjaCgrK3osUy50b0xvd2VyQ2FzZSgpKXtjYXNlImJhc2U2NCI6TD1JcihPcihFLnNsaWNlKHopLmpvaW4oIiIpKSk7YnJlYWs7Y2FzZSJxdW90ZWQtcHJpbnRhYmxlIjpMPWZ1bmN0aW9uIEln''@;'; put 'put ''KG0pe2Zvcih2YXIgRT1bXSxfPTA7XzxtLmxlbmd0aDsrK18pe2Zvcih2YXIgdz1tW19dO188PW0ubGVuZ3RoJiYiPSI9PXcuY2hhckF0KHcubGVuZ3RoLTEpOyl3PXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSttWysrX107RS5wdXNoKHcpfWZvcih2YXIgUz0wO1M8RS5sZW5ndGg7KytTKUVbU109''@;'; put 'put ''RVtTXS5yZXBsYWNlKC9bPV1bMC05QS1GYS1mXXsyfS9nLGZ1bmN0aW9uKEYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEYuc2xpY2UoMSksMTYpKX0pO3JldHVybiBJcihFLmpvaW4oIlxyXG4iKSl9KEUuc2xpY2UoeikpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nICIrUyl9dmFyIEg9cmkobSx3LnNsaWNlKF8ubGVuZ3RoKSxMLHt1bnNhZmU6ITB9KTtGJiYoSC5jdHlwZT1GKX1mdW5jdGlvbiByaShtLEUsXyx3KXt2YXIgUz13JiZ3LnVuc2FmZTtTfHx5KG0pO3ZhciBGPSFTJiZ2''@;'; put 'put ''ZS5maW5kKG0sRSk7aWYoIUYpe3ZhciBMPW0uRnVsbFBhdGhzWzBdO0Uuc2xpY2UoMCxMLmxlbmd0aCk9PUw/TD1FOigiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSxMPShMK0UpLnJlcGxhY2UoIi8vIiwiLyIpKSxGPXtuYW1lOm4oRSksdHlwZToyfSxtLkZpbGVJbmRleC5wdXNoKEYpLG0u''@;'; put 'put ''RnVsbFBhdGhzLnB1c2goTCksU3x8dmUudXRpbHMuY2ZiX2djKG0pfXJldHVybiBGLmNvbnRlbnQ9XyxGLnNpemU9Xz9fLmxlbmd0aDowLHcmJih3LkNMU0lEJiYoRi5jbHNpZD13LkNMU0lEKSx3Lm10JiYoRi5tdD13Lm10KSx3LmN0JiYoRi5jdD13LmN0KSksRn1yZXR1cm4gdC5maW5kPWZ1''@;'; put 'put ''bmN0aW9uIFgobSxFKXt2YXIgXz1tLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcudG9VcHBlckNhc2UoKX0pLHc9Xy5tYXAoZnVuY3Rpb24oVyl7dmFyIEI9Vy5zcGxpdCgiLyIpO3JldHVybiBCW0IubGVuZ3RoLSgiLyI9PVcuc2xpY2UoLTEpPzI6MSldfSksUz0hMTs0Nz09''@;'; put 'put ''PUUuY2hhckNvZGVBdCgwKT8oUz0hMCxFPV9bMF0uc2xpY2UoMCwtMSkrRSk6Uz0tMSE9PUUuaW5kZXhPZigiLyIpO3ZhciBGPUUudG9VcHBlckNhc2UoKSxMPSEwPT09Uz9fLmluZGV4T2YoRik6dy5pbmRleE9mKEYpO2lmKC0xIT09TClyZXR1cm4gbS5GaWxlSW5kZXhbTF07dmFyIHo9IUYu''@;'; put 'put ''bWF0Y2god2EpO2ZvcihGPUYucmVwbGFjZShkciwiIikseiYmKEY9Ri5yZXBsYWNlKHdhLCIhIikpLEw9MDtMPF8ubGVuZ3RoOysrTClpZigoej9fW0xdLnJlcGxhY2Uod2EsIiEiKTpfW0xdKS5yZXBsYWNlKGRyLCIiKT09Rnx8KHo/d1tMXS5yZXBsYWNlKHdhLCIhIik6d1tMXSkucmVwbGFj''@;'; put 'put ''ZShkciwiIik9PUYpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3JldHVybiBudWxsfSx0LnJlYWQ9ZnVuY3Rpb24gSShtLEUpe3ZhciBfPUUmJkUudHlwZTtzd2l0Y2goX3x8U2UmJkJ1ZmZlci5pc0J1ZmZlcihtKSYmKF89ImJ1ZmZlciIpLF98fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBNKG0sRSl7cmV0dXJuIG8oKSxsKGMucmVhZEZpbGVTeW5jKG0pLEUpfShtLEUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbChJcihPcihtKSksRSk7Y2FzZSJiaW5hcnkiOnJldHVybiBsKElyKG0pLEUpfXJldHVybiBsKG0sRSl9LHQucGFyc2U9bCx0LndyaXRlPWZ1bmN0aW9uIHhl''@;'; put 'put ''KG0sRSl7dmFyIF89VihtLEUpO3N3aXRjaChFJiZFLnR5cGV8fCJidWZmZXIiKXtjYXNlImZpbGUiOnJldHVybiBvKCksYy53cml0ZUZpbGVTeW5jKEUuZmlsZW5hbWUsXyksXztjYXNlImJpbmFyeSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP186Y2UoXyk7Y2FzZSJiYXNlNjQiOnJldHVy''@;'; put 'put ''biBnYSgic3RyaW5nIj09dHlwZW9mIF8/XzpjZShfKSk7Y2FzZSJidWZmZXIiOmlmKFNlKXJldHVybiBCdWZmZXIuaXNCdWZmZXIoXyk/XzpvdChfKTtjYXNlImFycmF5IjpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/SXIoXyk6X31yZXR1cm4gX30sdC53cml0ZUZpbGU9ZnVuY3Rpb24gRmUo''@;'; put 'put ''bSxFLF8pe28oKTt2YXIgdz1WKG0sXyk7Yy53cml0ZUZpbGVTeW5jKEUsdyl9LHQudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUGcobSl7dmFyIEU9e307cmV0dXJuIHkoRSxtKSxFfSxjZmJfYWRkOnJpLGNmYl9kZWw6ZnVuY3Rpb24gTGcobSxFKXt5KG0pO3ZhciBfPXZlLmZpbmQobSxFKTtp''@;'; put 'put ''ZihfKWZvcih2YXIgdz0wO3c8bS5GaWxlSW5kZXgubGVuZ3RoOysrdylpZihtLkZpbGVJbmRleFt3XT09XylyZXR1cm4gbS5GaWxlSW5kZXguc3BsaWNlKHcsMSksbS5GdWxsUGF0aHMuc3BsaWNlKHcsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gQmcobSxFLF8pe3kobSk7dmFy''@;'; put 'put ''IHc9dmUuZmluZChtLEUpO2lmKHcpZm9yKHZhciBTPTA7UzxtLkZpbGVJbmRleC5sZW5ndGg7KytTKWlmKG0uRmlsZUluZGV4W1NdPT13KXJldHVybiBtLkZpbGVJbmRleFtTXS5uYW1lPW4oXyksbS5GdWxsUGF0aHNbU109XywhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIE1nKG0pe1Io''@;'; put 'put ''bSwhMCl9LFJlYWRTaGlmdDpBYSxDaGVja0ZpZWxkOmFzLHByZXBfYmxvYjpocixiY29uY2F0OmZyLHVzZV96bGliOmZ1bmN0aW9uIEMobSl7dHJ5e3ZhciBfPW5ldygwLG0uSW5mbGF0ZVJhdyk7aWYoXy5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxfLl9maW5pc2hGbHVz''@;'; put 'put ''aEZsYWcpLCFfLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0s9bX1jYXRjaCh3KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyh3Lm1lc3NhZ2V8fHcpKX19LF9kZWZsYXRlUmF3OnllLF9pbmZsYXRl''@;'; put 'put ''UmF3OnljLGNvbnN0czp1ZX0sdH0oKTtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSkscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdFthXSkmJnIucHVzaCh0W2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBz''@;'; put 'put ''MChlKXtmb3IodmFyIHQ9W10scj0kZShlKSxhPTA7YSE9PXIubGVuZ3RoOysrYSl0W2VbclthXV1dPXJbYV07cmV0dXJuIHR9dmFyIGMwPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIHI9ZS5nZXRUaW1lKCk7cmV0dXJuIHQmJihyLT0xMjYzMTY4ZTUp''@;'; put 'put ''LChyLShjMC5nZXRUaW1lKCkrNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgU2k9bmV3IERhdGUsbG89YzAuZ2V0VGltZSgpKzZlNCooU2kuZ2V0VGltZXpvbmVPZmZzZXQoKS1jMC5nZXRUaW1lem9uZU9mZnNldCgpKSxGaT1T''@;'; put 'put ''aS5nZXRUaW1lem9uZU9mZnNldCgpO2Z1bmN0aW9uIG8wKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldFRpbWUoMjQqZSo2MCo2MCoxZTMrbG8pLHQuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUZpJiZ0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCkt''@;'; put 'put ''RmkpKSx0fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PTAscj0wLGE9ITEsbj1lLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFuKXRocm93IG5ldyBFcnJvcigifCIrZSsifCBpcyBub3Qg''@;'; put 'put ''YW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgaT0xO2khPW4ubGVuZ3RoOysraSlpZihuW2ldKXtzd2l0Y2gocj0xLGk+MyYmKGE9ITApLG5baV0uc2xpY2UobltpXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6''@;'; put 'put ''ICIrbltpXS5zbGljZShuW2ldLmxlbmd0aC0xKSk7Y2FzZSJEIjpyKj0yNDtjYXNlIkgiOnIqPTYwO2Nhc2UiTSI6aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtyKj02MH10Kz1yKnBhcnNlSW50KG5baV0sMTApfXJldHVybiB0fXZh''@;'; put 'put ''ciB5aT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIiksQWk9aXNOYU4oeWkuZ2V0RnVsbFllYXIoKSk/bmV3IERhdGUoIjIvMTkvMTciKTp5aSxobz0yMDE3PT1BaS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIFhlKGUsdCl7dmFyIHI9bmV3IERhdGUoZSk7aWYoaG8pcmV0dXJu''@;'; put 'put ''IHQ+MD9yLnNldFRpbWUoci5nZXRUaW1lKCkrNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6dDwwJiZyLnNldFRpbWUoci5nZXRUaW1lKCktNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykscjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigxOTE3PT1BaS5nZXRGdWxs''@;'; put 'put ''WWVhcigpJiYhaXNOYU4oci5nZXRGdWxsWWVhcigpKSl7dmFyIGE9ci5nZXRGdWxsWWVhcigpO3JldHVybiBlLmluZGV4T2YoIiIrYSk+LTF8fHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEwMCkscn12YXIgbj1lLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIw''@;'; put 'put ''IiwiMCJdLGk9bmV3IERhdGUoK25bMF0sK25bMV0tMSwrblsyXSwrblszXXx8MCwrbls0XXx8MCwrbls1XXx8MCk7cmV0dXJuIGUuaW5kZXhPZigiWiIpPi0xJiYoaT1uZXcgRGF0ZShpLmdldFRpbWUoKS02MCppLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksaX1mdW5jdGlvbiBQdChlLHQp''@;'; put 'put ''e2lmKFNlJiZCdWZmZXIuaXNCdWZmZXIoZSkpe2lmKHQpe2lmKDI1NT09ZVswXSYmMjU0PT1lWzFdKXJldHVybiB0dChlLnNsaWNlKDIpLnRvU3RyaW5nKCJ1dGYxNmxlIikpO2lmKDI1ND09ZVsxXSYmMjU1PT1lWzJdKXJldHVybiB0dChhaShlLnNsaWNlKDIpLnRvU3RyaW5nKCJiaW5hcnki''@;'; put 'put ''KSkpfXJldHVybiBlLnRvU3RyaW5nKCJiaW5hcnkiKX1pZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXRyeXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQobmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpLmRlY29kZShlLnNsaWNlKDIpKSk7aWYoMjU0PT1lWzBdJiYy''@;'; put 'put ''NTU9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2YmUiKS5kZWNvZGUoZS5zbGljZSgyKSkpfXZhciByPXsiXHUyMGFjIjoiXHg4MCIsIlx1MjAxYSI6Ilx4ODIiLFx1MDE5MjoiXHg4MyIsIlx1MjAxZSI6Ilx4ODQiLCJcdTIwMjYiOiJceDg1IiwiXHUyMDIwIjoiXHg4''@;'; put 'put ''NiIsIlx1MjAyMSI6Ilx4ODciLFx1MDJjNjoiXHg4OCIsIlx1MjAzMCI6Ilx4ODkiLFx1MDE2MDoiXHg4YSIsIlx1MjAzOSI6Ilx4OGIiLFx1MDE1MjoiXHg4YyIsXHUwMTdkOiJceDhlIiwiXHUyMDE4IjoiXHg5MSIsIlx1MjAxOSI6Ilx4OTIiLCJcdTIwMWMiOiJceDkzIiwiXHUyMDFkIjoi''@;'; put 'put ''XHg5NCIsIlx1MjAyMiI6Ilx4OTUiLCJcdTIwMTMiOiJceDk2IiwiXHUyMDE0IjoiXHg5NyIsIlx1MDJkYyI6Ilx4OTgiLCJcdTIxMjIiOiJceDk5IixcdTAxNjE6Ilx4OWEiLCJcdTIwM2EiOiJceDliIixcdTAxNTM6Ilx4OWMiLFx1MDE3ZToiXHg5ZSIsXHUwMTc4OiJceDlmIn07cmV0dXJu''@;'; put 'put ''IEFycmF5LmlzQXJyYXkoZSkmJihlPW5ldyBVaW50OEFycmF5KGUpKSxuZXcgVGV4dERlY29kZXIoImxhdGluMSIpLmRlY29kZShlKS5yZXBsYWNlKC9bXHUyMGFjXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHUwMTdk''@;'; put 'put ''XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHUwMTdlXHUwMTc4XS9nLGZ1bmN0aW9uKGkpe3JldHVybiByW2ldfHxpfSl9Y2F0Y2h7fWZvcih2YXIgYT1bXSxuPTA7biE9ZS5sZW5ndGg7KytuKWEucHVzaChT''@;'; put 'put ''dHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBNZShlKXtpZih0eXBlb2YgSlNPTjwidSImJiFBcnJheS5pc0FycmF5KGUpKXJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PWUp''@;'; put 'put ''cmV0dXJuIGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUuZ2V0VGltZSgpKTt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09TWUoZVtyXSkpO3JldHVybiB0fWZ1bmN0aW9uIGplKGUs''@;'; put 'put ''dCl7Zm9yKHZhciByPSIiO3IubGVuZ3RoPHQ7KXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gSnIoZSl7dmFyIHQ9TnVtYmVyKGUpO2lmKCFpc05hTih0KSlyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU47aWYoIS9cZC8udGVzdChlKSlyZXR1cm4gdDt2YXIgcj0xLGE9ZS5yZXBsYWNlKC8oW1xkXSks''@;'; put 'put ''KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcio9MTAwLCIifSk7cmV0dXJuIGlzTmFOKHQ9TnVtYmVyKGEpKSYmKGE9YS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihuLGkpe3JldHVybiByPS1yLGl9KSxp''@;'; put 'put ''c05hTih0PU51bWJlcihhKSkpP3Q6dC9yfXZhciB4bz1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl07ZnVuY3Rpb24gYWEoZSl7dmFyIHQ9''@;'; put 'put ''bmV3IERhdGUoZSkscj1uZXcgRGF0ZShOYU4pLGE9dC5nZXRZZWFyKCksbj10LmdldE1vbnRoKCksaT10LmdldERhdGUoKTtpZihpc05hTihpKSlyZXR1cm4gcjt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7aWYocy5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0''@;'; put 'put ''fG5vdnxkZWMvKSl7aWYoKHM9cy5yZXBsYWNlKC9bXmEtel0vZywiIikucmVwbGFjZSgvKFteYS16XXxeKVthcF1tPyhbXmEtel18JCkvLCIiKSkubGVuZ3RoPjMmJi0xPT14by5pbmRleE9mKHMpKXJldHVybiByfWVsc2UgaWYocy5tYXRjaCgvW2Etel0vKSlyZXR1cm4gcjtyZXR1cm4gYTww''@;'; put 'put ''fHxhPjgwOTk/cjoobj4wfHxpPjEpJiYxMDEhPWE/dDplLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/cjp0fXZhciB2bz1mdW5jdGlvbigpe3ZhciBlPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyLGEsbil7aWYoZXx8InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhKXJldHVybiByLnNwbGl0KGEpO2Zvcih2YXIgaT1yLnNwbGl0KGEpLHM9W2lbMF1dLGY9MTtmPGkubGVuZ3RoOysrZilzLnB1c2gobikscy5wdXNoKGlbZl0pO3JldHVybiBzfX0oKTtmdW5jdGlvbiBDaShlKXtyZXR1cm4gZT9lLmNvbnRlbnQmJmUudHlwZT9QdChlLmNvbnRlbnQsITAp''@;'; put 'put ''OmUuZGF0YT9RdChlLmRhdGEpOmUuYXNOb2RlQnVmZmVyJiZTZT9RdChlLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZS5hc0JpbmFyeT9RdChlLmFzQmluYXJ5KCkpOmUuX2RhdGEmJmUuX2RhdGEuZ2V0Q29udGVudD9RdChQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs''@;'; put 'put ''bChlLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOm51bGw6bnVsbH1mdW5jdGlvbiBEaShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRhdGEpcmV0dXJuIHQwKGUuZGF0YSk7aWYoZS5hc05vZGVCdWZmZXImJlNlKXJldHVybiBlLmFzTm9kZUJ1ZmZlcigpO2lmKGUuX2RhdGEmJmUuX2RhdGEu''@;'; put 'put ''Z2V0Q29udGVudCl7dmFyIHQ9ZS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QwKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfXJldHVybiBlLmNvbnRlbnQmJmUudHlwZT9lLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBXcihlLHQpe2Zvcih2YXIg''@;'; put 'put ''cj1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcyksYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1wvXS9nLCJcXCIpLG49YS5yZXBsYWNlKC9cXC9nLCIvIiksaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgcz1yW2ldLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLnRvTG93ZXJDYXNlKCk7''@;'; put 'put ''aWYoYT09c3x8bj09cylyZXR1cm4gZS5maWxlcz9lLmZpbGVzW3JbaV1dOmUuRmlsZUluZGV4W2ldfXJldHVybiBudWxsfWZ1bmN0aW9uIFYwKGUsdCl7dmFyIHI9V3IoZSx0KTtpZihudWxsPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3QrIiBpbiB6aXAiKTtyZXR1''@;'; put 'put ''cm4gcn1mdW5jdGlvbiBRZShlLHQscil7aWYoIXIpcmV0dXJuIGZ1bmN0aW9uIHBvKGUpe3JldHVybiBlJiYiLmJpbiI9PT1lLm5hbWUuc2xpY2UoLTQpP0RpKGUpOkNpKGUpfShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFFlKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9''@;'; put 'put ''fWZ1bmN0aW9uIE5yKGUsdCxyKXtpZighcilyZXR1cm4gQ2koVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBOcihlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPaShlLHQscil7aWYoIXIpcmV0dXJuIERpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3Ry''@;'; put 'put ''eXtyZXR1cm4gT2koZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSWkoZSl7Zm9yKHZhciB0PWUuRnVsbFBhdGhzfHwkZShlLmZpbGVzKSxyPVtdLGE9MDthPHQubGVuZ3RoOysrYSkiLyIhPXRbYV0uc2xpY2UoLTEpJiZyLnB1c2godFthXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtc''@;'; put 'put ''L10vLCIiKSk7cmV0dXJuIHIuc29ydCgpfWZ1bmN0aW9uIFJpKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJhc2U2NCJ9KTtjYXNlImJpbmFyeSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYmluYXJ5In0pO2Nhc2UiYnVmZmVyIjpj''@;'; put 'put ''YXNlImFycmF5IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJidWZmZXIifSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3QudHlwZSl9ZnVuY3Rpb24gU2EoZSx0KXtpZigiLyI9PWUuY2hhckF0KDApKXJldHVybiBlLnNsaWNlKDEpO3ZhciByPXQuc3BsaXQoIi8iKTsi''@;'; put 'put ''LyIhPXQuc2xpY2UoLTEpJiZyLnBvcCgpO2Zvcih2YXIgYT1lLnNwbGl0KCIvIik7MCE9PWEubGVuZ3RoOyl7dmFyIG49YS5zaGlmdCgpOyIuLiI9PT1uP3IucG9wKCk6Ii4iIT09biYmci5wdXNoKG4pfXJldHVybiByLmpvaW4oIi8iKX12YXIgZXI9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5j''@;'; put 'put ''b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxtbz0vKFteIlxzPz5cL10rKVxzKj1ccyooKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86Jyl8KFteJyI+XHNdKykpL2csTmk9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMq''@;'; put 'put ''KD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccypbXC9cP10/Pi9nbSx2cj1lci5tYXRjaChOaSk/Tmk6LzxbXj5dKj4vZyxfbz0vPFx3KjovLHdvPS88KFwvPylcdys6LztmdW5jdGlvbiBtZShlLHQscil7Zm9yKHZhciBhPXt9LG49MCxpPTA7biE9PWUubGVuZ3RoJiYzMiE9PShp''@;'; put 'put ''PWUuY2hhckNvZGVBdChuKSkmJjEwIT09aSYmMTMhPT1pOysrbik7aWYodHx8KGFbMF09ZS5zbGljZSgwLG4pKSxuPT09ZS5sZW5ndGgpcmV0dXJuIGE7dmFyIHM9ZS5tYXRjaChtbyksZj0wLGM9IiIsbz0wLGw9IiIsaD0iIix4PTE7aWYocylmb3Iobz0wO28hPXMubGVuZ3RoOysrbyl7Zm9y''@;'; put 'put ''KGg9c1tvXSxpPTA7aSE9aC5sZW5ndGgmJjYxIT09aC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKGw9aC5zbGljZSgwLGkpLnRyaW0oKTszMj09aC5jaGFyQ29kZUF0KGkrMSk7KSsraTtmb3IoeD0zND09KG49aC5jaGFyQ29kZUF0KGkrMSkpfHwzOT09bj8xOjAsYz1oLnNsaWNlKGkrMSt4LGgu''@;'; put 'put ''bGVuZ3RoLXgpLGY9MDtmIT1sLmxlbmd0aCYmNTghPT1sLmNoYXJDb2RlQXQoZik7KytmKTtpZihmPT09bC5sZW5ndGgpbC5pbmRleE9mKCJfIik+MCYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiXyIpKSksYVtsXT1jLHJ8fChhW2wudG9Mb3dlckNhc2UoKV09Yyk7ZWxzZXt2YXIgZD0oNT09''@;'; put 'put ''PWYmJiJ4bWxucyI9PT1sLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrbC5zbGljZShmKzEpO2lmKGFbZF0mJiJleHQiPT1sLnNsaWNlKGYtMyxmKSljb250aW51ZTthW2RdPWMscnx8KGFbZC50b0xvd2VyQ2FzZSgpXT1jKX19cmV0dXJuIGF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUucmVwbGFj''@;'; put 'put ''ZSh3bywiPCQxIil9dmFyIGJpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sRzA9czAoYmkpLEllPWZ1bmN0aW9uKCl7dmFyIGU9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSx0PS9feChb''@;'; put 'put ''XGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIHIoYSl7dmFyIG49YSsiIixpPW4uaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWkpcmV0dXJuIG4ucmVwbGFjZShlLGZ1bmN0aW9uKGYsYyl7cmV0dXJuIGJpW2ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsZi5p''@;'; put 'put ''bmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8Zn0pLnJlcGxhY2UodCxmdW5jdGlvbihmLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsMTYpKX0pO3ZhciBzPW4uaW5kZXhPZigiXV0+Iik7cmV0dXJuIHIobi5zbGljZSgwLGkpKStuLnNsaWNlKGkrOSxzKStyKG4uc2xp''@;'; put 'put ''Y2UocyszKSl9fSgpLHowPS9bJjw+JyJdL2csTGk9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uICQwKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHowLGZ1bmN0aW9uKHIpe3JldHVybiBHMFtyXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShMaSxmdW5jdGlvbihyKXtyZXR1''@;'; put 'put ''cm4iJiN4IisoIjAwMCIrci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfXZhciBCaT1mdW5jdGlvbigpe3ZhciBlPS8mIyhcZCspOy9nO2Z1bmN0aW9uIHQocixhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSl9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSx0KX19KCk7ZnVuY3Rpb24gV2UoZSl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gajAoZSl7Zm9yKHZhciB0PSIiLHI9MCxh''@;'; put 'put ''PTAsbj0wLGk9MCxzPTAsZj0wO3I8ZS5sZW5ndGg7KShhPWUuY2hhckNvZGVBdChyKyspKTwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKToobj1lLmNoYXJDb2RlQXQocisrKSxhPjE5MSYmYTwyMjQ/KHM9KDMxJmEpPDw2LHN8PTYzJm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKSk6''@;'; put 'put ''KGk9ZS5jaGFyQ29kZUF0KHIrKyksYTwyNDA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmYSk8PDEyfCg2MyZuKTw8Nnw2MyZpKTooZj0oKDcmYSk8PDE4fCg2MyZuKTw8MTJ8KDYzJmkpPDw2fDYzJihzPWUuY2hhckNvZGVBdChyKyspKSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZSg1NTI5NisoZj4+PjEwJjEwMjMpKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmYpKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaShlKXt2YXIgcixhLGYsdD1fdCgyKmUubGVuZ3RoKSxuPTEsaT0wLHM9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSs9biluPTEsKGY9ZS5jaGFy''@;'; put 'put ''Q29kZUF0KGEpKTwxMjg/cj1mOmY8MjI0PyhyPTY0KigzMSZmKSsoNjMmZS5jaGFyQ29kZUF0KGErMSkpLG49Mik6ZjwyNDA/KHI9NDA5NiooMTUmZikrNjQqKDYzJmUuY2hhckNvZGVBdChhKzEpKSsoNjMmZS5jaGFyQ29kZUF0KGErMikpLG49Myk6KG49NCxyPTI2MjE0NCooNyZmKSs0MDk2''@;'; put 'put ''Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrNjQqKDYzJmUuY2hhckNvZGVBdChhKzIpKSsoNjMmZS5jaGFyQ29kZUF0KGErMykpLHM9NTUyOTYrKChyLT02NTUzNik+Pj4xMCYxMDIzKSxyPTU2MzIwKygxMDIzJnIpKSwwIT09cyYmKHRbaSsrXT0yNTUmcyx0W2krK109cz4+Pjgscz0wKSx0W2kr''@;'; put 'put ''K109ciUyNTYsdFtpKytdPXI+Pj44O3JldHVybiB0LnNsaWNlKDAsaSkudG9TdHJpbmcoInVjczIiKX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gb3QoZSwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX12YXIgbDA9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyIsQmU9''@;'; put 'put ''U2UmJihVaShsMCk9PWowKGwwKSYmVWl8fE1pKGwwKT09ajAobDApJiZNaSl8fGowLHR0PVNlP2Z1bmN0aW9uKGUpe3JldHVybiBvdChlLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9MCxuPTA7cjxlLmxlbmd0aDspc3dpdGNoKGE9''@;'; put 'put ''ZS5jaGFyQ29kZUF0KHIrKyksITApe2Nhc2UgYTwxMjg6dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgYTwyMDQ4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoYT4+NikpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSk7YnJl''@;'; put 'put ''YWs7Y2FzZSBhPj01NTI5NiYmYTw1NzM0NDphLT01NTI5NixuPWUuY2hhckNvZGVBdChyKyspLTU2MzIwKyhhPDwxMCksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhuPj4xOCY3KSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsobj4+MTImNjMpKSksdC5wdXNoKFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhuPj42JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmbikpKTticmVhaztkZWZhdWx0OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoYT4+MTIpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhhPj42''@;'; put 'put ''JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmYSkpKX1yZXR1cm4gdC5qb2luKCIiKX0sRmE9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixhKXt2YXIgbj1yKyJ8IisoYXx8IiIpO3JldHVybiBlW25dP2Vbbl06ZVtuXT1uZXcgUmVnRXhwKCI8''@;'; put 'put ''KD86XFx3KzopPyIrcisnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytyKyI+IixhfHwiIil9fSgpLFdpPWZ1bmN0aW9uKCl7dmFyIGU9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9z''@;'; put 'put ''IiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuZXcgUmVnRXhwKCImIit0WzBdKyI7IiwiaWciKSx0WzFdXX0pO3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9ci5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvPlxzKy9nLCI+IikucmVwbGFjZSgvXHMrPC9nLCI8IikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksbj0wO248ZS5sZW5ndGg7''@;'; put 'put ''KytuKWE9YS5yZXBsYWNlKGVbbl1bMF0sZVtuXVsxXSk7cmV0dXJuIGF9fSgpLFNvPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06ZVtyXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK3IrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0''@;'; put 'put ''Oik/IityKyI+IiwiZyIpfX0oKSxGbz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyx5bz0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEhpKGUsdCl7dmFyIHI9bWUoZSksYT1lLm1hdGNoKFNvKHIuYmFzZVR5cGUpKXx8W10sbj1bXTtpZihhLmxlbmd0aCE9ci5zaXplKXtp''@;'; put 'put ''Zih0LldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK2EubGVuZ3RoKyIgIT0gIityLnNpemUpO3JldHVybiBufXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5yZXBsYWNlKEZvLCIiKS5tYXRjaCh5byk7cyYmbi5wdXNoKHt2OkJlKHNb''@;'; put 'put ''Ml0pLHQ6c1sxXX0pfSksbn1mdW5jdGlvbiBZMChlKXtpZihTZSYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkp''@;'; put 'put ''cmV0dXJuIEJlKHd0KE0wKGUpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIHlhPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXSspKD86W1xzPzpcL11bXj5dKik/Pi9nbSxycj17Q09SRV9QUk9Q''@;'; put 'put ''UzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixFWFRf''@;'; put 'put ''UFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLENUOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiLFJFTFM6Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxOC90aHJlYWRlZGNvbW1lbnRzIixkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu''@;'; put 'put ''MS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3Blbnht''@;'; put 'put ''bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEifSxTdD1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJl''@;'; put 'put ''YWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs''@;'; put 'put ''LzIwMDYvMiJdLEdpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxhPTA7YTxlWzBdLmxlbmd0aDsrK2EpaWYoZVswXVthXSlmb3IodmFyIG49MCxpPWVbMF1bYV0ubGVuZ3RoO248aTtuKz0xMDI0MCl0LnB1c2guYXBwbHkodCxlWzBdW2FdLnNsaWNlKG4sbisxMDI0MCkpO3JldHVybiB0fSx6''@;'; put 'put ''aT1TZT9mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGVbMF1bMF0pP0J1ZmZlci5jb25jYXQoZVswXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpOkdpKGUpfTpHaSwkaT1mdW5jdGlvbihlLHQscil7''@;'; put 'put ''Zm9yKHZhciBhPVtdLG49dDtuPHI7bis9MilhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1dChlLG4pKSk7cmV0dXJuIGEuam9pbigiIikucmVwbGFjZShkciwiIil9LHUwPVNlP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoInV0ZjE2bGUi''@;'; put 'put ''LHQscikucmVwbGFjZShkciwiIik6JGkoZSx0LHIpfTokaSxqaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49dDtuPHQrcjsrK24pYS5wdXNoKCgiMCIrZVtuXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGEuam9pbigiIil9LEtpPVNlP2Z1bmN0aW9uKGUsdCxyKXty''@;'; put 'put ''ZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoImhleCIsdCx0K3IpOmppKGUsdCxyKX06amksWWk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rKylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpYShlLG4pKSk7cmV0dXJuIGEuam9pbigiIil9LG5h''@;'; put 'put ''PVNlP2Z1bmN0aW9uKHQscixhKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QudG9TdHJpbmcoInV0ZjgiLHIsYSk6WWkodCxyLGEpfTpZaSxKaT1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9uYShlLHQrNCx0KzQrci0xKToiIn0sSjA9SmkscWk9ZnVuY3Rpb24o''@;'; put 'put ''ZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LHEwPXFpLFppPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MipjcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LFowPVppLFFpPWZ1bmN0aW9uKHQscil7dmFyIGE9Y3IodCxyKTtyZXR1''@;'; put 'put ''cm4gYT4wP3UwKHQscis0LHIrNCthKToiIn0sUTA9UWksZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3IpOiIifSxlbj1lcyxycz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBDbyhlLHQpe2Zvcih2YXIgcj0xLTIqKGVbdCs3XT4+''@;'; put 'put ''PjcpLGE9KCgxMjcmZVt0KzddKTw8NCkrKGVbdCs2XT4+PjQmMTUpLG49MTUmZVt0KzZdLGk9NTtpPj0wOy0taSluPTI1NipuK2VbdCtpXTtyZXR1cm4gMjA0Nz09YT8wPT1uP3IqKDEvMCk6TmFOOigwPT1hP2E9LTEwMjI6KGEtPTEwMjMsbis9TWF0aC5wb3coMiw1MikpLHIqTWF0aC5wb3co''@;'; put 'put ''MixhLTUyKSpuKX0oZSx0KX0saDA9cnMscm49ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9O1NlJiYoSjA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBK''@;'; put 'put ''aSh0LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxxMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIGE+''@;'; put 'put ''MD90LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EtMSk6IiJ9LFowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gWmkodCxyKTt2YXIgYT0yKnQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGYxNmxlIixyKzQscis0K2EtMSl9LFEwPWZ1''@;'; put 'put ''bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gUWkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZsZSIscis0LHIrNCthKX0sZW49ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBlcyh0''@;'; put 'put ''LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EpfSxoMD1mdW5jdGlvbih0LHIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dC5yZWFkRG91YmxlTEUocik6cnModCxyKX0scm49ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5p''@;'; put 'put ''c0J1ZmZlcih0KXx8QXJyYXkuaXNBcnJheSh0KXx8dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0IGluc3RhbmNlb2YgVWludDhBcnJheX0pLHR5cGVvZiBPZTwidSImJmZ1bmN0aW9uIHRzKCl7dTA9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBPZS51dGlscy5kZWNvZGUoMTIwMCxlLnNsaWNlKHQs''@;'; put 'put ''cikpLnJlcGxhY2UoZHIsIiIpfSxuYT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9lLnV0aWxzLmRlY29kZSg2NTAwMSxlLnNsaWNlKHQscikpfSxKMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoUnQsZS5zbGljZSh0KzQsdCs0K3ItMSkp''@;'; put 'put ''OiIifSxxMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoRHIsZS5zbGljZSh0KzQsdCs0K3ItMSkpOiIifSxaMD1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP09lLnV0aWxzLmRlY29kZSgxMjAwLGUuc2xpY2Uo''@;'; put 'put ''dCs0LHQrNCtyLTEpKToiIn0sUTA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDEyMDAsZS5zbGljZSh0KzQsdCs0K3IpKToiIn0sZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDY1''@;'; put 'put ''MDAxLGUuc2xpY2UodCs0LHQrNCtyKSk6IiJ9fSgpO3ZhciBpYT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdfSx1dD1mdW5jdGlvbihlLHQpe3JldHVybiAyNTYqZVt0KzFdK2VbdF19LE9vPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MjU2KmVbdCsxXStlW3RdO3JldHVybiByPDMyNzY4P3I6LTEq''@;'; put 'put ''KDY1NTM1LXIrMSl9LGNyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdCszXSooMTw8MjQpKyhlW3QrMl08PDE2KSsoZVt0KzFdPDw4KStlW3RdfSxMdD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM108PDI0fGVbdCsyXTw8MTZ8ZVt0KzFdPDw4fGVbdF19LElvPWZ1bmN0aW9uKGUsdCl7cmV0''@;'; put 'put ''dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07ZnVuY3Rpb24gQWEoZSx0KXt2YXIgYSxuLHMsZixjLG8scj0iIixpPVtdO3N3aXRjaCh0KXtjYXNlImRiY3MiOmlmKG89dGhpcy5sLFNlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpcj10aGlzLnNsaWNlKHRoaXMubCx0''@;'; put 'put ''aGlzLmwrMiplKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGM9MDtjPGU7KytjKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXQodGhpcyxvKSksbys9MjtlKj0yO2JyZWFrO2Nhc2UidXRmOCI6cj1uYSh0aGlzLHRoaXMubCx0aGlzLmwrZSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpyPXUw''@;'; put 'put ''KHRoaXMsdGhpcy5sLHRoaXMubCsoZSo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgT2U8InUiKSlyZXR1cm4gQWEuY2FsbCh0aGlzLGUsImRiY3MiKTtyPU9lLnV0aWxzLmRlY29kZShEcix0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMiplKSksZSo9MjticmVhaztjYXNlImxw''@;'; put 'put ''c3RyLWFuc2kiOnI9SjAodGhpcyx0aGlzLmwpLGU9NCtjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6cj1xMCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6cj1aMCh0aGlzLHRoaXMubCksZT00KzIqY3IodGhpcyx0aGlzLmwp''@;'; put 'put ''O2JyZWFrO2Nhc2UibHBwNCI6ZT00K2NyKHRoaXMsdGhpcy5sKSxyPVEwKHRoaXMsdGhpcy5sKSwyJmUmJihlKz0yKTticmVhaztjYXNlIjhscHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9ZW4odGhpcyx0aGlzLmwpLDMmZSYmKGUrPTQtKDMmZSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKGU9''@;'; put 'put ''MCxyPSIiOzAhPT0ocz1pYSh0aGlzLHRoaXMubCtlKyspKTspaS5wdXNoKHBhKHMpKTtyPWkuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKGU9MCxyPSIiOzAhPT0ocz11dCh0aGlzLHRoaXMubCtlKSk7KWkucHVzaChwYShzKSksZSs9MjtlKz0yLHI9aS5qb2luKCIiKTticmVhaztj''@;'; put 'put ''YXNlImRiY3MtY29udCI6Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2M8ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGku''@;'; put 'put ''am9pbigiIikrZjtpLnB1c2gocGEodXQodGhpcyxvKSkpLG8rPTJ9cj1pLmpvaW4oIiIpLGUqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIE9lPCJ1Iil7cj1PZS51dGlscy5kZWNvZGUoRHIsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2UpKTticmVha31jYXNlInNiY3MtY29udCI6''@;'; put 'put ''Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2MhPWU7KytjKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YobykpcmV0dXJuIHM9aWEodGhpcyxvKSx0aGlzLmw9bysxLGY9QWEuY2FsbCh0aGlzLGUtYyxzPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxpLmpvaW4oIiIpK2Y7aS5w''@;'; put 'put ''dXNoKHBhKGlhKHRoaXMsbykpKSxvKz0xfXI9aS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGE9aWEodGhpcyx0aGlzLmwpLHRoaXMubCsrLGE7Y2FzZSAyOnJldHVybiBhPSgiaSI9PT10P09vOnV0KSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLGE7Y2Fz''@;'; put 'put ''ZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT10JiYxMjgmdGhpc1t0aGlzLmwrM10/KG49Y3IodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxuKTooYT0oZT4wP0x0OklvKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LGEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09dClyZXR1cm4gbj04PT1lP2gwKHRoaXMs''@;'; put 'put ''dGhpcy5sKTpoMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxuO2U9ODtjYXNlIDE2OnI9S2ko''@;'; put 'put ''dGhpcyx0aGlzLmwsZSl9fXJldHVybiB0aGlzLmwrPWUscn12YXIgUm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NSxlW3IrMl09dD4+PjE2JjI1NSxlW3IrM109dD4+PjI0JjI1NX0sTm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pjgm''@;'; put 'put ''MjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0sYm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NX07ZnVuY3Rpb24gUG8oZSx0LHIpe3ZhciBhPTAsbj0wO2lmKCJkYmNzIj09PXIpe2ZvcihuPTA7biE9dC5sZW5ndGg7KytuKWJvKHRoaXMs''@;'; put 'put ''dC5jaGFyQ29kZUF0KG4pLHRoaXMubCsyKm4pO2E9Mip0Lmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PXIpe2lmKHR5cGVvZiBPZTwidSImJjg3ND09UnQpZm9yKG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPU9lLnV0aWxzLmVuY29kZShSdCx0LmNoYXJBdChuKSk7dGhpc1t0aGlzLmwrbl09''@;'; put 'put ''aVswXX1lbHNlIGZvcih0PXQucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxuPTA7biE9dC5sZW5ndGg7KytuKXRoaXNbdGhpcy5sK25dPTI1NSZ0LmNoYXJDb2RlQXQobik7YT10Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09cil7Zm9yKDtuPGU7KytuKXRoaXNbdGhpcy5sKytdPXBhcnNl''@;'; put 'put ''SW50KHQuc2xpY2UoMipuLDIqbisyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09cil7dmFyIHM9TWF0aC5taW4odGhpcy5sK2UsdGhpcy5sZW5ndGgpO2ZvcihuPTA7bjxNYXRoLm1pbih0Lmxlbmd0aCxlKTsrK24pe3ZhciBmPXQuY2hhckNvZGVBdChuKTt0aGlzW3RoaXMu''@;'; put 'put ''bCsrXT0yNTUmZix0aGlzW3RoaXMubCsrXT1mPj44fWZvcig7dGhpcy5sPHM7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKGUpe2Nhc2UgMTphPTEsdGhpc1t0aGlzLmxdPTI1NSZ0O2JyZWFrO2Nhc2UgMjphPTIsdGhpc1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFd''@;'; put 'put ''PTI1NSYodD4+Pj04KTticmVhaztjYXNlIDM6YT0zLHRoaXNbdGhpcy5sXT0yNTUmdCx0aGlzW3RoaXMubCsxXT0yNTUmKHQ+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgNDphPTQsUm8odGhpcyx0LHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGE9OCwiZiI9''@;'; put 'put ''PT1yKXshZnVuY3Rpb24gRG8oZSx0LHIpe3ZhciBhPSh0PDB8fDEvdD09LTEvMD8xOjApPDw3LG49MCxpPTAscz1hPy10OnQ7aXNGaW5pdGUocyk/MD09cz9uPWk9MDoobj1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4yKSxpPXMqTWF0aC5wb3coMiw1Mi1uKSxuPD0tMTAyMyYmKCFp''@;'; put 'put ''c0Zpbml0ZShpKXx8aTxNYXRoLnBvdygyLDUyKSk/bj0tMTAyMjooaS09TWF0aC5wb3coMiw1Miksbis9MTAyMykpOihuPTIwNDcsaT1pc05hTih0KT8yNjk4NTowKTtmb3IodmFyIGY9MDtmPD01OysrZixpLz0yNTYpZVtyK2ZdPTI1NSZpO2Vbcis2XT0oMTUmbik8PDR8MTUmaSxlW3IrN109''@;'; put 'put ''bj4+NHxhfSh0aGlzLHQsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDphPTQsTm8odGhpcyx0LHRoaXMubCl9fXJldHVybiB0aGlzLmwrPWEsdGhpc31mdW5jdGlvbiBhcyhlLHQpe3ZhciByPUtpKHRoaXMsdGhpcy5sLGUubGVuZ3RoPj4xKTtpZihyIT09ZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IodCsiRXhwZWN0ZWQgIitlKyIgc2F3ICIrcik7dGhpcy5sKz1lLmxlbmd0aD4+MX1mdW5jdGlvbiBocihlLHQpe2UubD10LGUucmVhZF9zaGlmdD1BYSxlLmNoaz1hcyxlLndyaXRlX3NoaWZ0PVBvfWZ1bmN0aW9uIHByKGUsdCl7ZS5sKz10fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9X3Qo''@;'; put 'put ''ZSk7cmV0dXJuIGhyKHQsMCksdH1mdW5jdGlvbiBodChlLHQscil7aWYoZSl7dmFyIGEsbixpO2hyKGUsZS5sfHwwKTtmb3IodmFyIHM9ZS5sZW5ndGgsZj0wLGM9MDtlLmw8czspezEyOCYoZj1lLnJlYWRfc2hpZnQoMSkpJiYoZj0oMTI3JmYpKygoMTI3JmUucmVhZF9zaGlmdCgxKSk8PDcp''@;'; put 'put ''KTt2YXIgbz0kYVtmXXx8JGFbNjU1MzVdO2ZvcihpPTEyNyYoYT1lLnJlYWRfc2hpZnQoMSkpLG49MTtuPDQmJjEyOCZhOysrbilpKz0oMTI3JihhPWUucmVhZF9zaGlmdCgxKSkpPDw3Km47Yz1lLmwraTt2YXIgbD1vLmYmJm8uZihlLGkscik7aWYoZS5sPWMsdChsLG8sZikpcmV0dXJufX19''@;'; put 'put ''ZnVuY3Rpb24gU3IoKXt2YXIgZT1bXSx0PVNlPzI1NjoyMDQ4LHI9ZnVuY3Rpb24obyl7dmFyIGw9RyhvKTtyZXR1cm4gaHIobCwwKSxsfSxhPXIodCksbj1mdW5jdGlvbigpe2EmJihhLmxlbmd0aD5hLmwmJigoYT1hLnNsaWNlKDAsYS5sKSkubD1hLmxlbmd0aCksYS5sZW5ndGg+MCYmZS5w''@;'; put 'put ''dXNoKGEpLGE9bnVsbCl9LGk9ZnVuY3Rpb24obyl7cmV0dXJuIGEmJm88YS5sZW5ndGgtYS5sP2E6KG4oKSxhPXIoTWF0aC5tYXgobysxLHQpKSl9O3JldHVybntuZXh0OmkscHVzaDpmdW5jdGlvbihvKXtuKCksbnVsbD09KGE9bykubCYmKGEubD1hLmxlbmd0aCksaSh0KX0sZW5kOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG4oKSxmcihlKX0sX2J1ZnM6ZX19ZnVuY3Rpb24gQ2EoZSx0LHIpe3ZhciBhPU1lKGUpO2lmKHQucz8oYS5jUmVsJiYoYS5jKz10LnMuYyksYS5yUmVsJiYoYS5yKz10LnMucikpOihhLmNSZWwmJihhLmMrPXQuYyksYS5yUmVsJiYoYS5yKz10LnIpKSwhcnx8ci5iaWZm''@;'; put 'put ''PDEyKXtmb3IoO2EuYz49MjU2OylhLmMtPTI1Njtmb3IoO2Eucj49NjU1MzY7KWEuci09NjU1MzZ9cmV0dXJuIGF9ZnVuY3Rpb24gbnMoZSx0LHIpe3ZhciBhPU1lKGUpO3JldHVybiBhLnM9Q2EoYS5zLHQucyxyKSxhLmU9Q2EoYS5lLHQucyxyKSxhfWZ1bmN0aW9uIERhKGUsdCl7aWYoZS5j''@;'; put 'put ''UmVsJiZlLmM8MClmb3IoZT1NZShlKTtlLmM8MDspZS5jKz10Pjg/MTYzODQ6MjU2O2lmKGUuclJlbCYmZS5yPDApZm9yKGU9TWUoZSk7ZS5yPDA7KWUucis9dD44PzEwNDg1NzY6dD41PzY1NTM2OjE2Mzg0O3ZhciByPWdlKGUpO3JldHVybiFlLmNSZWwmJm51bGwhPWUuY1JlbCYmKHI9ZnVu''@;'; put 'put ''Y3Rpb24gTW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHIpKSwhZS5yUmVsJiZudWxsIT1lLnJSZWwmJihyPWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShyKSkscn1mdW5jdGlvbiB0bihlLHQpe3Jl''@;'; put 'put ''dHVybiAwIT1lLnMucnx8ZS5zLnJSZWx8fGUuZS5yIT0odC5iaWZmPj0xMj8xMDQ4NTc1OnQuYmlmZj49OD82NTUzNjoxNjM4NCl8fGUuZS5yUmVsPzAhPWUucy5jfHxlLnMuY1JlbHx8ZS5lLmMhPSh0LmJpZmY+PTEyPzE2MzgzOjI1NSl8fGUuZS5jUmVsP0RhKGUucyx0LmJpZmYpKyI6IitE''@;'; put 'put ''YShlLmUsdC5iaWZmKTooZS5zLnJSZWw/IiI6IiQiKStLZShlLnMucikrIjoiKyhlLmUuclJlbD8iIjoiJCIpK0tlKGUuZS5yKTooZS5zLmNSZWw/IiI6IiQiKStIZShlLnMuYykrIjoiKyhlLmUuY1JlbD8iIjoiJCIpK0hlKGUuZS5jKX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gcGFyc2VJbnQo''@;'; put 'put ''ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShlKSwxMCktMX1mdW5jdGlvbiBLZShlKXtyZXR1cm4iIisoZSsxKX1mdW5jdGlvbiBubihlKXtmb3IodmFyIHQ9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9''@;'; put 'put ''KGUpLHI9MCxhPTA7YSE9PXQubGVuZ3RoOysrYSlyPTI2KnIrdC5jaGFyQ29kZUF0KGEpLTY0O3JldHVybiByLTF9ZnVuY3Rpb24gSGUoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitlKTt2YXIgdD0iIjtmb3IoKytlO2U7ZT1NYXRoLmZsb29yKChlLTEpLzI2''@;'; put 'put ''KSl0PVN0cmluZy5mcm9tQ2hhckNvZGUoKGUtMSklMjYrNjUpK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gR2UoZSl7Zm9yKHZhciB0PTAscj0wLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG49ZS5jaGFyQ29kZUF0KGEpO24+PTQ4JiZuPD01Nz90PTEwKnQrKG4tNDgpOm4+PTY1JiZuPD05MCYmKHI9''@;'; put 'put ''MjYqcisobi02NCkpfXJldHVybntjOnItMSxyOnQtMX19ZnVuY3Rpb24gZ2UoZSl7Zm9yKHZhciB0PWUuYysxLHI9IiI7dDt0PSh0LTEpLzI2fDApcj1TdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTEpJTI2KzY1KStyO3JldHVybiByKyhlLnIrMSl9ZnVuY3Rpb24gUHIoZSl7dmFyIHQ9ZS5pbmRl''@;'; put 'put ''eE9mKCI6Iik7cmV0dXJuLTE9PXQ/e3M6R2UoZSksZTpHZShlKX06e3M6R2UoZS5zbGljZSgwLHQpKSxlOkdlKGUuc2xpY2UodCsxKSl9fWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8Im51bWJlciI9PXR5cGVvZiB0P3dlKGUucyxlLmUpOigic3RyaW5nIiE9dHlwZW9m''@;'; put 'put ''IGUmJihlPWdlKGUpKSwic3RyaW5nIiE9dHlwZW9mIHQmJih0PWdlKHQpKSxlPT10P2U6ZSsiOiIrdCl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxyPTAsYT0wLG49MCxpPWUubGVuZ3RoO2ZvcihyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS02''@;'; put 'put ''NCk8MXx8bj4yNik7KythKXI9MjYqcituO2Zvcih0LnMuYz0tLXIscj0wO2E8aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNDgpPDB8fG4+OSk7KythKXI9MTAqcituO2lmKHQucy5yPS0tcixhPT09aXx8MTAhPW4pcmV0dXJuIHQuZS5jPXQucy5jLHQuZS5yPXQucy5yLHQ7Zm9yKCsrYSxyPTA7''@;'; put 'put ''YSE9aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNjQpPDF8fG4+MjYpOysrYSlyPTI2KnIrbjtmb3IodC5lLmM9LS1yLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247cmV0dXJuIHQuZS5yPS0tcix0fWZ1bmN0aW9uIGF0KGUsdCxyKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09ZXx8bnVsbD09ZS50fHwieiI9PWUudD8iIjp2b2lkIDAhPT1lLnc/ZS53OigiZCI9PWUudCYmIWUueiYmciYmci5kYXRlTkYmJihlLno9ci5kYXRlTkYpLCJlIj09ZS50P3h0W2Uudl18fGUudjpmdW5jdGlvbiBpcyhlLHQpe3ZhciByPSJkIj09ZS50JiZ0IGluc3RhbmNlb2Yg''@;'; put 'put ''RGF0ZTtpZihudWxsIT1lLnopdHJ5e3JldHVybiBlLnc9UnIoZS56LHI/aXIodCk6dCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZS53PVJyKChlLlhGfHx7fSkubnVtRm10SWR8fChyPzE0OjApLHI/aXIodCk6dCl9Y2F0Y2h7cmV0dXJuIiIrdH19KGUsbnVsbD09dD9lLnY6dCkpfWZ1bmN0aW9uIEZ0''@;'; put 'put ''KGUsdCl7dmFyIHI9dCYmdC5zaGVldD90LnNoZWV0OiJTaGVldDEiLGE9e307cmV0dXJuIGFbcl09ZSx7U2hlZXROYW1lczpbcl0sU2hlZXRzOmF9fWZ1bmN0aW9uIHNhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHNzKGUsdCxyKXt2YXIgYT1yfHx7fSxuPWU/QXJyYXkuaXNBcnJheShlKTphLmRl''@;'; put 'put ''bnNlO251bGwhPXplJiZudWxsPT1uJiYobj16ZSk7dmFyIGk9ZXx8KG4/W106e30pLHM9MCxmPTA7aWYoaSYmbnVsbCE9YS5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgYS5vcmlnaW4pcz1hLm9yaWdpbjtlbHNle3ZhciBjPSJzdHJpbmciPT10eXBlb2YgYS5vcmlnaW4/R2UoYS5vcmln''@;'; put 'put ''aW4pOmEub3JpZ2luO3M9Yy5yLGY9Yy5jfWlbIiFyZWYiXXx8KGlbIiFyZWYiXT0iQTE6QTEiKX12YXIgbz17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihpWyIhcmVmIl0pe3ZhciBsPURlKGlbIiFyZWYiXSk7by5zLmM9bC5zLmMsby5zLnI9bC5zLnIsby5lLmM9TWF0aC5tYXgo''@;'; put 'put ''by5lLmMsbC5lLmMpLG8uZS5yPU1hdGgubWF4KG8uZS5yLGwuZS5yKSwtMT09cyYmKG8uZS5yPXM9bC5lLnIrMSl9Zm9yKHZhciBoPTA7aCE9dC5sZW5ndGg7KytoKWlmKHRbaF0pe2lmKCFBcnJheS5pc0FycmF5KHRbaF0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg''@;'; put 'put ''YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciB4PTA7eCE9dFtoXS5sZW5ndGg7Kyt4KWlmKCEodHlwZW9mIHRbaF1beF0+InUiKSl7dmFyIGQ9e3Y6dFtoXVt4XX0sdj1zK2gsdT1mK3g7aWYoby5zLnI+diYmKG8ucy5yPXYpLG8ucy5jPnUmJihvLnMuYz11KSxvLmUucjx2JiYoby5lLnI9''@;'; put 'put ''diksby5lLmM8dSYmKG8uZS5jPXUpLCF0W2hdW3hdfHwib2JqZWN0IiE9dHlwZW9mIHRbaF1beF18fEFycmF5LmlzQXJyYXkodFtoXVt4XSl8fHRbaF1beF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkLnYpJiYoZC5mPXRbaF1beF1bMV0sZC52PWQudlswXSksbnVsbD09PWQu''@;'; put 'put ''dilpZihkLmYpZC50PSJuIjtlbHNlIGlmKGEubnVsbEVycm9yKWQudD0iZSIsZC52PTA7ZWxzZXtpZighYS5zaGVldFN0dWJzKWNvbnRpbnVlO2QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZC52P2QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZC52P2QudD0iYiI6ZC52IGluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZT8oZC56PWEuZGF0ZU5GfHxwZVsxNF0sYS5jZWxsRGF0ZXM/KGQudD0iZCIsZC53PVJyKGQueixpcihkLnYpKSk6KGQudD0ibiIsZC52PWlyKGQudiksZC53PVJyKGQueixkLnYpKSk6ZC50PSJzIjtlbHNlIGQ9dFtoXVt4XTtpZihuKWlbdl18fChpW3ZdPVtdKSxpW3ZdW3VdJiZp''@;'; put 'put ''W3ZdW3VdLnomJihkLno9aVt2XVt1XS56KSxpW3ZdW3VdPWQ7ZWxzZXt2YXIgcD1nZSh7Yzp1LHI6dn0pO2lbcF0mJmlbcF0ueiYmKGQuej1pW3BdLnopLGlbcF09ZH19fXJldHVybiBvLnMuYzwxZTcmJihpWyIhcmVmIl09d2UobykpLGl9KG51bGwsZSx0KX1mdW5jdGlvbiBtcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT10PyIiOmUucmVhZF9zaGlmdCh0LCJkYmNzIil9ZnVuY3Rpb24gVm8oZSl7cmV0dXJue2ljaDplLnJlYWRfc2hpZnQoMiksaWZudDplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIHI9ZS5sLGE9ZS5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''LG49bXIoZSksaT1bXSxzPXt0Om4saDpufTtpZigxJmEpe2Zvcih2YXIgZj1lLnJlYWRfc2hpZnQoNCksYz0wO2MhPWY7KytjKWkucHVzaChWbyhlKSk7cy5yPWl9ZWxzZSBzLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gZS5sPXIrdCxzfXZhciBHbz1zbjtmdW5jdGlvbiBIcihlKXt2YXIg''@;'; put 'put ''dD1lLnJlYWRfc2hpZnQoNCkscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHIrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6dCxpU3R5bGVSZWY6cn19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0Kz1lLnJlYWRfc2hpZnQoMSk8PDE2LGUubCsrLHtj''@;'; put 'put ''Oi0xLGlTdHlsZVJlZjp0fX12YXIgJG89bXI7ZnVuY3Rpb24gZm4oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09dHx8NDI5NDk2NzI5NT09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX12YXIgam89bXIsb249Zm47ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9ZS5zbGljZShl''@;'; put 'put ''LmwsZS5sKzQpLHI9MSZ0WzBdLGE9MiZ0WzBdO2UubCs9NDt2YXIgbj0wPT09YT9oMChbMCwwLDAsMCwyNTImdFswXSx0WzFdLHRbMl0sdFszXV0sMCk6THQodCwwKT4+MjtyZXR1cm4gcj9uLzEwMDpufWZ1bmN0aW9uIG9zKGUpe3ZhciB0PXtzOnt9LGU6e319O3JldHVybiB0LnMucj1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksdC5lLnI9ZS5yZWFkX3NoaWZ0KDQpLHQucy5jPWUucmVhZF9zaGlmdCg0KSx0LmUuYz1lLnJlYWRfc2hpZnQoNCksdH12YXIgV3Q9b3M7ZnVuY3Rpb24gZ3IoZSl7aWYoZS5sZW5ndGgtZS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIGUu''@;'; put 'put ''cmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gbHMoZSx0KXt2YXIgYT1lLnJlYWRfc2hpZnQoNCk7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5I''@;'; put 'put ''TUVUQUZJTEUifVtlLnJlYWRfc2hpZnQoNCldfHwiIn1pZihhPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIithLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGUubC09NCxlLnJlYWRfc2hpZnQoMCwxPT10PyJscHN0ciI6Imxwd3N0ciIpfXZhciBobj0yLEFyPTMs''@;'; put 'put ''dXM9MTIsaHM9ODEsYWw9WzgwLGhzXSx4bj17MTp7bjoiQ29kZVBhZ2UiLHQ6aG59LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpBcn0sNTp7bjoiTGluZUNvdW50Iix0OkFyfSw2OntuOiJQYXJhZ3JhcGhD''@;'; put 'put ''b3VudCIsdDpBcn0sNzp7bjoiU2xpZGVDb3VudCIsdDpBcn0sODp7bjoiTm90ZUNvdW50Iix0OkFyfSw5OntuOiJIaWRkZW5Db3VudCIsdDpBcn0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6QXJ9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6''@;'; put 'put ''NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkFyfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7''@;'; put 'put ''bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkFyLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5''@;'; put 'put ''OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OmhufSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4''@;'; put 'put ''MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246''@;'; put 'put ''Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6QXJ9LDE1OntuOiJXb3JkQ291bnQiLHQ6QXJ9LDE2OntuOiJDaGFyQ291bnQiLHQ6QXJ9LDE3OntuOiJUaHVtYm5haWwiLHQ6''@;'; put 'put ''NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkFyfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0seHM9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS''@;'; put 'put ''VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2''@;'; put 'put ''OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2''@;'; put 'put ''NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LG5sPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr''@;'; put 'put ''VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24odCl7cmV0dXJuW3Q+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF19KX12YXIgVnQ9TWUoaWwoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1''@;'; put 'put ''LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4''@;'; put 'put ''ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2''@;'; put 'put ''LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSx4dD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05V''@;'; put 'put ''TSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGRzPXsiI05VTEwhIjowLCIjRElWLzAhIjo3LCIjVkFMVUUhIjoxNSwiI1JFRiEiOjIzLCIjTkFNRT8iOjI5LCIjTlVNISI6MzYsIiNOL0EiOjQyLCIjR0VUVElOR19EQVRBIjo0MywiI1dURj8iOjI1NX0sdm49''@;'; put 'put ''eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCI6InNoZWV0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC53b3Jrc2hlZXQiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0IjoiY2hhcnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQiOiJtYWNyb3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1h''@;'; put 'put ''Y3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIjoiZGlhbG9ncyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5kaWFsb2dzaGVldCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCI6InN0cnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyI6InN0''@;'; put 'put ''cnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIjoic3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr''@;'; put 'put ''YWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50''@;'; put 'put ''LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNw''@;'; put 'put ''cmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMiOiJjb21tZW50''@;'; put 'put ''cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50aHJlYWRlZGNvbW1lbnRzK3htbCI6InRocmVhZGVkY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGVyc29uK3htbCI6InBlb3BsZSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z''@;'; put 'put ''cHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoibWV0YWRhdGEiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy''@;'; put 'put ''dGNvbG9yc3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2No''@;'; put 'put ''YWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNl''@;'; put 'put ''dHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6Imxp''@;'; put 'put ''bmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj''@;'; put 'put ''ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5''@;'; put 'put ''VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoiVE9ETyIsImFw''@;'; put 'put ''cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk''@;'; put 'put ''b2N1bWVudC5tb2RlbCtkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht''@;'; put 'put ''bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5y''@;'; put 'put ''ZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGtlPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m''@;'; put 'put ''ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np''@;'; put 'put ''bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixDTU5UOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y''@;'; put 'put ''ZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixDT1JFX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixFWFRfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyIsQ1VTVF9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyIsU1NUOiJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFNUWToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRIRU1F''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixDSEFSVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsQ0hBUlRF''@;'; put 'put ''WDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiLENTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiLFdTOlsiaHR0cDovL3Nj''@;'; put 'put ''aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdLERTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixNUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCIsSU1HOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixEUkFXOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFhMTUVUQToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h''@;'; put 'put ''dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGVldE1ldGFkYXRhIixUQ01OVDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3RocmVhZGVkQ29tbWVudCIsUEVPUExFOiJodHRwOi8vc2NoZW1hcy5taWNy''@;'; put 'put ''b3NvZnQuY29tL29mZmljZS8yMDE3LzEwL3JlbGF0aW9uc2hpcHMvcGVyc29uIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVy''@;'; put 'put ''biBlLnNsaWNlKDAsdCsxKSsiX3JlbHMvIitlLnNsaWNlKHQrMSkrIi5yZWxzIn1mdW5jdGlvbiBJYShlLHQpe3ZhciByPXsiIWlkIjp7fX07aWYoIWUpcmV0dXJuIHI7Ii8iIT09dC5jaGFyQXQoMCkmJih0PSIvIit0KTt2YXIgYT17fTtyZXR1cm4oZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKG4pe3ZhciBpPW1lKG4pO2lmKCI8UmVsYXRpb25zaGlwIj09PWlbMF0pe3ZhciBzPXt9O3MuVHlwZT1pLlR5cGUscy5UYXJnZXQ9aS5UYXJnZXQscy5JZD1pLklkLGkuVGFyZ2V0TW9kZSYmKHMuVGFyZ2V0TW9kZT1pLlRhcmdldE1vZGUpO3ZhciBmPSJFeHRlcm5hbCI9PT1p''@;'; put 'put ''LlRhcmdldE1vZGU/aS5UYXJnZXQ6U2EoaS5UYXJnZXQsdCk7cltmXT1zLGFbaS5JZF09c319KSxyWyIhaWQiXT1hLHJ9dmFyIGNsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250''@;'; put 'put ''ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIs''@;'; put 'put ''IlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRs''@;'; put 'put ''ZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0KXt2YXIgcj1Wclt0''@;'; put 'put ''XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBtcyhlKXt2YXIgdD17''@;'; put 'put ''fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkpfXJldHVybiB0fXZh''@;'; put 'put ''ciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJN''@;'; put 'put ''YW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3Ai''@;'; put 'put ''LCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxzZSBmb3IodmFyIGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9yKHZhciBvPTA7byE9''@;'; put 'put ''PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhl''@;'; put 'put ''NHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMg''@;'; put 'put ''ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3''@;'; put 'put ''IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5DaGFydE5hbWVzPXMu''@;'; put 'put ''c2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixS''@;'; put 'put ''ZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29t''@;'; put 'put ''cGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9ZnVuY3Rpb24gd24o''@;'; put 'put ''ZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUsdCxyKXt2YXIgYT1l''@;'; put 'put ''Lmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxhfWZ1bmN0aW9uIEZz''@;'; put 'put ''KGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLGhzKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5sLXQmMiYmKGUubCs9''@;'; put 'put ''MiksW3IsXzAoZSxBcildfWZ1bmN0aW9uIHlzKGUsdCl7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KSxhPXt9LG49MDtuIT1yOysrbil7dmFyIGk9ZS5yZWFkX3NoaWZ0KDQpLHM9ZS5yZWFkX3NoaWZ0KDQpO2FbaV09ZS5yZWFkX3NoaWZ0KHMsMTIwMD09PXQ/InV0ZjE2bGUiOiJ1dGY4Iiku''@;'; put 'put ''cmVwbGFjZShkciwiIikucmVwbGFjZSh3YSwiISIpLDEyMDA9PT10JiZzJTImJihlLmwrPTIpfXJldHVybiAzJmUubCYmKGUubD1lLmw+PjM8PDIpLGF9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5zbGljZShlLmwsZS5sK3QpO3JldHVybiBlLmwrPXQsKDMmdCk+''@;'; put 'put ''MCYmKGUubCs9NC0oMyZ0KSYzKSxyfWZ1bmN0aW9uIF8wKGUsdCxyKXt2YXIgbixhPWUucmVhZF9zaGlmdCgyKSxpPXJ8fHt9O2lmKGUubCs9Mix0IT09dXMmJmEhPT10JiYtMT09PWFsLmluZGV4T2YodCkmJig0MTI2IT0oNjU1MzQmdCl8fDQxMjYhPSg2NTUzNCZhKSkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJFeHBlY3RlZCB0eXBlICIrdCsiIHNhdyAiK2EpO3N3aXRjaCh0PT09dXM/YTp0KXtjYXNlIDI6cmV0dXJuIG49ZS5yZWFkX3NoaWZ0KDIsImkiKSxpLnJhd3x8KGUubCs9MiksbjtjYXNlIDM6cmV0dXJuIGUucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWUucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBlLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gVHMoZSwwLDQpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgMzE6cmV0dXJuIFNzKGUpO2Nhc2UgNjQ6cmV0dXJuIHduKGUpO2Nhc2UgNjU6cmV0dXJuIEFzKGUpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIEFsKGUpe3ZhciB0PXt9O3JldHVybiB0LlNpemU9ZS5yZWFkX3NoaWZ0KDQpLGUubCs9dC5TaXplKzMtKHQuU2l6ZS0xKSU0LHR9KGUpO2Nhc2UgODA6cmV0dXJuIGtuKGUsYSwhaS5yYXcpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIEZzKGUsdCwwKX0oZSxhKS5yZXBsYWNlKGRyLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHlsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxh''@;'; put 'put ''PTA7YTx0LzI7KythKXIucHVzaChGbChlKSk7cmV0dXJuIHJ9KGUpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PWE/ZnVuY3Rpb24gVGwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCg0KSxyPVtdLGE9MDthIT10OysrYSl7dmFyIG49ZS5sO3JbYV09ZS5yZWFkX3NoaWZ0KDAs''@;'; put 'put ''Imxwd3N0ciIpLnJlcGxhY2UoZHIsIiIpLGUubC1uJjImJihlLmwrPTIpfXJldHVybiByfShlKTpmdW5jdGlvbiBTbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXJbYV09ZS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShkciwiIik7cmV0''@;'; put 'put ''dXJuIHJ9KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit0KyIgIithKX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTAsZj0wLGM9LTEs''@;'; put 'put ''bz17fTtmb3Iocz0wO3MhPW47KytzKXt2YXIgbD1lLnJlYWRfc2hpZnQoNCksaD1lLnJlYWRfc2hpZnQoNCk7aVtzXT1bbCxoK3JdfWkuc29ydChmdW5jdGlvbihULGcpe3JldHVybiBUWzFdLWdbMV19KTt2YXIgeD17fTtmb3Iocz0wO3MhPW47KytzKXtpZihlLmwhPT1pW3NdWzFdKXt2YXIg''@;'; put 'put ''ZD0hMDtpZihzPjAmJnQpc3dpdGNoKHRbaVtzLTFdWzBdXS50KXtjYXNlIDI6ZS5sKzI9PT1pW3NdWzFdJiYoZS5sKz0yLGQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmUubDw9aVtzXVsxXSYmKGUubD1pW3NdWzFdLGQ9ITEpfWlmKCghdHx8MD09cykmJmUubDw9aVtzXVsxXSYmKGQ9''@;'; put 'put ''ITEsZS5sPWlbc11bMV0pLGQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIraVtzXVsxXSsiIGF0ICIrZS5sKyIgOiIrcyl9aWYodCl7dmFyIHY9dFtpW3NdWzBdXTtpZih4W3Yubl09XzAoZSx2LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXYucCYmKHhb''@;'; put 'put ''di5uXT1TdHJpbmcoeFt2Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jnhbdi5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09di5uKXN3aXRjaCh4W3Yubl0pe2Nhc2UgMDp4W3Yubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpj''@;'; put 'put ''YXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1Ok1yKGY9eFt2''@;'; put 'put ''Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK3hbdi5uXSl9fWVsc2UgaWYoMT09PWlbc11bMF0pe2lmKGY9eC5Db2RlUGFnZT1fMChlLGhuKSxNcihmKSwtMSE9PWMpe3ZhciB1PWUubDtlLmw9aVtjXVsxXSxvPXlz''@;'; put 'put ''KGUsZiksZS5sPXV9fWVsc2UgaWYoMD09PWlbc11bMF0pe2lmKDA9PT1mKXtjPXMsZS5sPWlbcysxXVsxXTtjb250aW51ZX1vPXlzKGUsZil9ZWxzZXt2YXIgayxwPW9baVtzXVswXV07c3dpdGNoKGVbZS5sXSl7Y2FzZSA2NTplLmwrPTQsaz1BcyhlKTticmVhaztjYXNlIDMwOmNhc2UgMzE6''@;'; put 'put ''ZS5sKz00LGs9a24oZSxlW2UubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OmUubCs9NCxrPWUucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDgs''@;'; put 'put ''ImYiKTticmVhaztjYXNlIDExOmUubCs9NCxrPUplKGUsNCk7YnJlYWs7Y2FzZSA2NDplLmwrPTQsaz1YZSh3bihlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK2VbZS5sXSl9eFtwXT1rfX1yZXR1cm4gZS5sPXIrYSx4fWZ1bmN0aW9uIFJzKGUs''@;'; put 'put ''dCxyKXt2YXIgYT1lLmNvbnRlbnQ7aWYoIWEpcmV0dXJue307aHIoYSwwKTt2YXIgbixpLHMsZixjPTA7YS5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxhLnJlYWRfc2hpZnQoMik7dmFyIG89YS5yZWFkX3NoaWZ0KDQpLGw9YS5yZWFkX3NoaWZ0KDE2KTtpZihsIT09dmUudXRpbHMuY29u''@;'; put 'put ''c3RzLkhFQURFUl9DTFNJRCYmbCE9PXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitsKTtpZigxIT09KG49YS5yZWFkX3NoaWZ0KDQpKSYmMiE9PW4pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrbik7aWYoaT1hLnJlYWRfc2hpZnQoMTYp''@;'; put 'put ''LGY9YS5yZWFkX3NoaWZ0KDQpLDE9PT1uJiZmIT09YS5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK2YrIiAhPT0gIithLmwpOzI9PT1uJiYocz1hLnJlYWRfc2hpZnQoMTYpLGM9YS5yZWFkX3NoaWZ0KDQpKTt2YXIgdixoPURzKGEsdCkseD17U3lzdGVtSWRlbnRpZmll''@;'; put 'put ''cjpvfTtmb3IodmFyIGQgaW4gaCl4W2RdPWhbZF07aWYoeC5GTVRJRD1pLDE9PT1uKXJldHVybiB4O2lmKGMtYS5sPT0yJiYoYS5sKz0yKSxhLmwhPT1jKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrYS5sKyIgIT09ICIrYyk7dHJ5e3Y9RHMoYSxudWxsKX1jYXRjaHt9''@;'; put 'put ''Zm9yKGQgaW4gdil4W2RdPXZbZF07cmV0dXJuIHguRk1USUQ9W2ksc10seH1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBlLnJlYWRfc2hpZnQodCksbnVsbH1mdW5jdGlvbiBKZShlLHQpe3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KHQpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBlLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiwidSIpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE9sKGUsdCxyKXtmb3IodmFyIGE9W10sbj1lLmwrdDtlLmw8bjspYS5wdXNoKHIoZSxuLWUubCkpO2lmKG4hPT1lLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBhfShlLHQsdHIpfWZ1bmN0''@;'; put 'put ''aW9uIFJhKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmci5iaWZmPj0xMj8yOjEpLG49InNiY3MtY29udCIsaT1EcjtyJiZyLmJpZmY+PTgmJihEcj0xMjAwKSxyJiY4IT1yLmJpZmY/MTI9PXIuYmlmZiYmKG49IndzdHIiKTplLnJlYWRfc2hpZnQoMSkmJihuPSJkYmNzLWNvbnQiKSxy''@;'; put 'put ''LmJpZmY+PTImJnIuYmlmZjw9NSYmKG49ImNwc3RyIik7dmFyIGY9YT9lLnJlYWRfc2hpZnQoYSxuKToiIjtyZXR1cm4gRHI9aSxmfWZ1bmN0aW9uIFJsKGUpe3ZhciB0PURyO0RyPTEyMDA7dmFyIGMscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoMSksbj00JmEsaT04JmEscz0x''@;'; put 'put ''KygxJmEpLGY9MCxvPXt9O2kmJihmPWUucmVhZF9zaGlmdCgyKSksbiYmKGM9ZS5yZWFkX3NoaWZ0KDQpKTt2YXIgaD0wPT09cj8iIjplLnJlYWRfc2hpZnQociwyPT1zPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtyZXR1cm4gaSYmKGUubCs9NCpmKSxuJiYoZS5sKz1jKSxvLnQ9aCxpfHwo''@;'; put 'put ''by5yYXc9Ijx0PiIrby50KyI8L3Q+IixvLnI9by50KSxEcj10LG99ZnVuY3Rpb24gR3QoZSx0LHIpe2lmKHIpe2lmKHIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBlLnJlYWRfc2hpZnQodCwiY3BzdHIiKTtpZihyLmJpZmY+PTEyKXJldHVybiBlLnJlYWRfc2hpZnQodCwiZGJjcy1jb250''@;'; put 'put ''Iil9dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLnJlYWRfc2hpZnQodCwwPT09bj8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTmEoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTpHdChlLGEs''@;'; put 'put ''cil9ZnVuY3Rpb24genQoZSx0LHIpe2lmKHIuYmlmZj41KXJldHVybiBOYShlLDAscik7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09YT8oZS5sKyssIiIpOmUucmVhZF9zaGlmdChhLHIuYmlmZjw9NHx8IWUubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiB3MChl''@;'; put 'put ''KXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQ+MD9lLnJlYWRfc2hpZnQodCwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpOiIifWZ1bmN0aW9uIE1zKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSld''@;'; put 'put ''fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIHI9TXMoZSk7cmV0dXJuIHJbM109MCxyfWZ1bmN0aW9uIG50KGUpe3JldHVybntyOmUucmVhZF9zaGlmdCgyKSxjOmUucmVhZF9zaGlmdCgyKSxpeGZlOmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gVmwoZSx0LHIpe3ZhciBhPXIuYmlmZj44PzQ6Mjty''@;'; put 'put ''ZXR1cm5bZS5yZWFkX3NoaWZ0KGEpLGUucmVhZF9zaGlmdChhLCJpIiksZS5yZWFkX3NoaWZ0KGEsImkiKV19ZnVuY3Rpb24gV3MoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx1bihlKV19ZnVuY3Rpb24gazAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3Jl''@;'; put 'put ''dHVybntzOntjOmUucmVhZF9zaGlmdCgyKSxyOnR9LGU6e2M6ZS5yZWFkX3NoaWZ0KDIpLHJ9fX1mdW5jdGlvbiBWcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6ZS5yZWFkX3NoaWZ0KDEpLHI6dH0sZTp7YzplLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''cn19fXZhciBHbD1WcztmdW5jdGlvbiBYcyhlKXtlLmwrPTQ7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFtyLHQsYV19ZnVuY3Rpb24gX3IoZSl7ZS5sKz0yLGUubCs9ZS5yZWFkX3NoaWZ0KDIpfXZhciBq''@;'; put 'put ''bD17MDpfciw0Ol9yLDU6X3IsNjpfciw3OmZ1bmN0aW9uICRsKGUpe3JldHVybiBlLmwrPTQsZS5jZj1lLnJlYWRfc2hpZnQoMikse319LDg6X3IsOTpfciwxMDpfciwxMTpfciwxMjpfciwxMzpmdW5jdGlvbiB6bChlKXt2YXIgdD17fTtyZXR1cm4gZS5sKz00LGUubCs9MTYsdC5mU2hhcmVk''@;'; put 'put ''Tm90ZT1lLnJlYWRfc2hpZnQoMiksZS5sKz00LHR9LDE0Ol9yLDE1Ol9yLDE2Ol9yLDE3Ol9yLDE4Ol9yLDE5Ol9yLDIwOl9yLDIxOlhzfTtmdW5jdGlvbiBFMChlLHQpe3ZhciByPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKHIuQklGRlZlcj1lLnJlYWRfc2hpZnQoMiksKHQtPTIpPj0yJiYo''@;'; put 'put ''ci5kdD1lLnJlYWRfc2hpZnQoMiksZS5sLT0yKSxyLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZih0PjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrci5C''@;'; put 'put ''SUZGVmVyKX1yZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLHJ9ZnVuY3Rpb24gR3MoZSx0LHIpe3ZhciBhPTA7ciYmMj09ci5iaWZmfHwoYT1lLnJlYWRfc2hpZnQoMikpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmMj09ci5iaWZmJiYoYT0xLShuPj4xNSksbiY9MzI3NjcpLFt7VW5z''@;'; put 'put ''eW5jZWQ6MSZhLER5WmVybzooMiZhKT4+MSxFeEFzYzooNCZhKT4+MixFeERzYzooOCZhKT4+M30sbl19dmFyIHd1PXp0O2Z1bmN0aW9uIHpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPTghPXIuYmlmZiYmci5iaWZmPzI6NCxpPWUucmVhZF9zaGlmdChuKSxzPWUucmVhZF9zaGlmdChuKSxmPWUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPWEse3M6e3I6aSxjOmZ9LGU6e3I6cyxjfX19ZnVuY3Rpb24ganMoZSx0LHIpe3ZhciBhPW50KGUpOygyPT1yLmJpZmZ8fDk9PXQpJiYrK2UubDt2YXIgbj1mdW5jdGlvbiBJbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MSk7cmV0dXJuIDE9PT1lLnJlYWRfc2hpZnQoMSk/dDoxPT09dH0oZSk7cmV0dXJuIGEudmFsPW4sYS50PSEwPT09bnx8ITE9PT1uPyJiIjoiZSIsYX12YXIgS3M9ZnVuY3Rpb24gSGwoZSx0LHIpe3JldHVybiAwPT09dD8iIjp6dChlLDAscil9O2Z1bmN0aW9uIFlzKGUsdCxyKXt2YXIgbixh''@;'; put 'put ''PWUucmVhZF9zaGlmdCgyKSxpPXtmQnVpbHRJbjoxJmEsZldhbnRBZHZpc2U6YT4+PjEmMSxmV2FudFBpY3Q6YT4+PjImMSxmT2xlOmE+Pj4zJjEsZk9sZUxpbms6YT4+PjQmMSxjZjphPj4+NSYxMDIzLGZJY29uOmE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1yLnNiY2NoJiYobj1mdW5jdGlv''@;'; put 'put ''biBYbChlLHQscil7ZS5sKz00O3ZhciBhPWUubCsodC09NCksbj1SYShlLDAsciksaT1lLnJlYWRfc2hpZnQoMik7aWYoaSE9PShhLT1lLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIithKyIgIT0gIitpKTtyZXR1cm4gZS5sKz1pLG59KGUsdC0y''@;'; put 'put ''LHIpKSxpLmJvZHk9bnx8ZS5yZWFkX3NoaWZ0KHQtMiksInN0cmluZyI9PXR5cGVvZiBuJiYoaS5OYW1lPW4pLGl9dmFyIE51PVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJh''@;'; put 'put ''c2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94''@;'; put 'put ''bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIEpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgxKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKSxjPTA7KCFyfHxyLmJpZmY+PTUpJiYoNSE9''@;'; put 'put ''ci5iaWZmJiYoZS5sKz0yKSxjPWUucmVhZF9zaGlmdCgyKSw1PT1yLmJpZmYmJihlLmwrPTIpLGUubCs9NCk7dmFyIG89R3QoZSxzLHIpOzMyJm4mJihvPU51W28uY2hhckNvZGVBdCgwKV0pO3ZhciBsPWEtZS5sO3ImJjI9PXIuYmlmZiYmLS1sO3ZhciBoPWEhPWUubCYmMCE9PWYmJmw+MD9m''@;'; put 'put ''dW5jdGlvbiBLZChlLHQscixhKXt2YXIgcyxuPWUubCt0LGk9SGEoZSxhLHIpO3JldHVybiBuIT09ZS5sJiYocz1XYShlLG4tZS5sLGkscikpLFtpLHNdfShlLGwscixmKTpbXTtyZXR1cm57Y2hLZXk6aSxOYW1lOm8saXRhYjpjLHJnY2U6aH19ZnVuY3Rpb24gcXMoZSx0LHIpe2lmKHIuYmlm''@;'; put 'put ''Zjw4KXJldHVybiBmdW5jdGlvbiBidShlLHQscil7Mz09ZVtlLmwrMV0mJmVbZS5sXSsrO3ZhciBhPVJhKGUsMCxyKTtyZXR1cm4gMz09YS5jaGFyQ29kZUF0KDApP2Euc2xpY2UoMSk6YX0oZSwwLHIpO2Zvcih2YXIgYT1bXSxuPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KHIuYmlmZj44PzQ6Mik7''@;'; put 'put ''MCE9aS0tOylhLnB1c2goVmwoZSwwLHIpKTtpZihlLmwhPW4pdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZS5sKyIgIT0gIituKTtyZXR1cm4gYX1mdW5jdGlvbiBacyhlLHQscil7dmFyIGE9R2woZSw2KTtzd2l0Y2goci5iaWZmKXtjYXNlIDI6ZS5sKyssdC09NzticmVh''@;'; put 'put ''aztjYXNlIDM6Y2FzZSA0OmUubCs9Mix0LT04O2JyZWFrO2RlZmF1bHQ6ZS5sKz02LHQtPTEyfXJldHVyblthLCRkKGUsdCxyKV19dmFyIFh1PXs4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sK3Q7ZS5sKz0xMDt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz00LGUubCs9MixlLmwrPTIsZS5s''@;'; put 'put ''Kz0yLGUubCs9NDt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCs9bixlLmw9cix7Zm10OmF9fX07ZnVuY3Rpb24gUXMoZSx0LHIpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJuIHByKGUsdCk7dmFyIGE9ciYmci5iaWZmPj0xMj80OjIsbj1lLnJlYWRfc2hpZnQoYSksaT1lLnJlYWRf''@;'; put 'put ''c2hpZnQoYSkscz1lLnJlYWRfc2hpZnQoYSksZj1lLnJlYWRfc2hpZnQoYSksYz1lLnJlYWRfc2hpZnQoMik7Mj09YSYmKGUubCs9Mik7dmFyIG89e3M6bixlOmksdzpzLGl4ZmU6ZixmbGFnczpjfTtyZXR1cm4oci5iaWZmPj01fHwhci5iaWZmKSYmKG8ubGV2ZWw9Yz4+OCY3KSxvfXZhciBp''@;'; put 'put ''aD1udCxzaD1icyxmaD1OYSxtaD1bMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sVG49ZnVuY3Rpb24oKXt2YXIgZT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUw''@;'; put 'put ''LDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAs''@;'; put 'put ''MTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5''@;'; put 'put ''MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LHQ9czAoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEw''@;'; put 'put ''NDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtm''@;'; put 'put ''dW5jdGlvbiBhKGYsYyl7dmFyIG89Y3x8e307by5kYXRlTkZ8fChvLmRhdGVORj0ieXl5eW1tZGQiKTt2YXIgbD1zYShmdW5jdGlvbiByKGYsYyl7dmFyIG89W10sbD1fdCgxKTtzd2l0Y2goYy50eXBlKXtjYXNlImJhc2U2NCI6bD1JcihPcihmKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmw9SXIo''@;'; put 'put ''Zik7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOmw9Zn1ocihsLDApO3ZhciBoPWwucmVhZF9zaGlmdCgxKSx4PSEhKDEzNiZoKSxkPSExLHY9ITE7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmQ9''@;'; put 'put ''ITAseD0hMDticmVhaztjYXNlIDE0MDp2PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitoLnRvU3RyaW5nKDE2KSl9dmFyIHU9MCxwPTUyMTsyPT1oJiYodT1sLnJlYWRfc2hpZnQoMikpLGwubCs9MywyIT1oJiYodT1sLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpLHU+MTA0ODU3NiYmKHU9MWU2KSwyIT1oJiYocD1sLnJlYWRfc2hpZnQoMikpO3ZhciBrPWwucmVhZF9zaGlmdCgyKSxUPWMuY29kZXBhZ2V8fDEyNTI7MiE9aCYmKGwubCs9MTYsbC5yZWFkX3NoaWZ0KDEpLDAhPT1sW2wubF0mJihUPWVbbFtsLmxdXSksbC5sKz0xLGwubCs9''@;'; put 'put ''MiksdiYmKGwubCs9MzYpO2Zvcih2YXIgZz1bXSxOPXt9LE09TWF0aC5taW4obC5sZW5ndGgsMj09aD81MjE6cC0xMC0oZD8yNjQ6MCkpLEk9dj8zMjoxMTtsLmw8TSYmMTMhPWxbbC5sXTspc3dpdGNoKE49e30sTi5uYW1lPU9lLnV0aWxzLmRlY29kZShULGwuc2xpY2UobC5sLGwubCtJKSku''@;'; put 'put ''cmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLGwubCs9SSxOLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShsLnJlYWRfc2hpZnQoMSkpLDIhPWgmJiF2JiYoTi5vZmZzZXQ9bC5yZWFkX3NoaWZ0KDQpKSxOLmxlbj1sLnJlYWRfc2hpZnQoMSksMj09aCYmKE4ub2Zmc2V0PWwucmVhZF9z''@;'; put 'put ''aGlmdCgyKSksTi5kZWM9bC5yZWFkX3NoaWZ0KDEpLE4ubmFtZS5sZW5ndGgmJmcucHVzaChOKSwyIT1oJiYobC5sKz12PzEzOjE0KSxOLnR5cGUpe2Nhc2UiQiI6KCFkfHw4IT1OLmxlbikmJmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJHIjpjYXNlIlAiOmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2Ui''@;'; put 'put ''VCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK04udHlwZSl9aWYoMTMhPT1sW2wubF0mJihsLmw9cC0xKSwxMyE9PWwucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK2wu''@;'; put 'put ''bCsiICIrbFtsLmxdKTtsLmw9cDt2YXIgeT0wLFA9MDtmb3Iob1swXT1bXSxQPTA7UCE9Zy5sZW5ndGg7KytQKW9bMF1bUF09Z1tQXS5uYW1lO2Zvcig7dS0tID4wOylpZig0MiE9PWxbbC5sXSlmb3IoKytsLmwsb1srK3ldPVtdLFA9MCxQPTA7UCE9Zy5sZW5ndGg7KytQKXt2YXIgUj1sLnNs''@;'; put 'put ''aWNlKGwubCxsLmwrZ1tQXS5sZW4pO2wubCs9Z1tQXS5sZW4saHIoUiwwKTt2YXIgVj1PZS51dGlscy5kZWNvZGUoVCxSKTtzd2l0Y2goZ1tQXS50eXBlKXtjYXNlIkMiOlYudHJpbSgpLmxlbmd0aCYmKG9beV1bUF09Vi5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6b1t5XVtQ''@;'; put 'put ''XT04PT09Vi5sZW5ndGg/bmV3IERhdGUoK1Yuc2xpY2UoMCw0KSwrVi5zbGljZSg0LDYpLTEsK1Yuc2xpY2UoNiw4KSk6VjticmVhaztjYXNlIkYiOm9beV1bUF09cGFyc2VGbG9hdChWLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOm9beV1bUF09dj8yMTQ3NDgzNjQ4XlIucmVhZF9z''@;'; put 'put ''aGlmdCgtNCwiaSIpOlIucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goVi50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOm9beV1bUF09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOm9beV1bUF09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitWKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigheCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitoLnRvU3RyaW5nKDE2KSk7b1t5XVtQXT0iIyNNRU1PIyMiKyh2P3BhcnNl''@;'; put 'put ''SW50KFYudHJpbSgpLDEwKTpSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KFY9Vi5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1WJiYob1t5XVtQXT0rVnx8MCk7YnJlYWs7Y2FzZSJAIjpvW3ldW1BdPW5ldyBEYXRlKFIucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1''@;'; put 'put ''NjgzMmU1KTticmVhaztjYXNlIlQiOm9beV1bUF09bmV3IERhdGUoODY0ZTUqKFIucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6b1t5XVtQXT1SLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCtSLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCpNYXRoLnBv''@;'; put 'put ''dygyLDMyKTticmVhaztjYXNlIk8iOm9beV1bUF09LVIucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoZCYmOD09Z1tQXS5sZW4pe29beV1bUF09Ui5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Ui5sKz1nW1BdLmxlbjticmVhaztjYXNlIjAiOmlm''@;'; put 'put ''KCJfTnVsbEZsYWdzIj09PWdbUF0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK2dbUF0udHlwZSl9fWVsc2UgbC5sKz1rO2lmKDIhPWgmJmwubDxsLmxlbmd0aCYmMjYhPWxbbC5sKytdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEVPRiBNYXJrZXIgbWlzc2luZyAiKyhsLmwtMSkrIiBvZiAiK2wubGVuZ3RoKyIgIitsW2wubC0xXS50b1N0cmluZygxNikpO3JldHVybiBjJiZjLnNoZWV0Um93cyYmKG89by5zbGljZSgwLGMuc2hlZXRSb3dzKSksYy5EQkY9ZyxvfShmLG8pLG8pO3JldHVybiBsWyIhY29scyJdPW8uREJG''@;'; put 'put ''Lm1hcChmdW5jdGlvbihoKXtyZXR1cm57d2NoOmgubGVuLERCRjpofX0pLGRlbGV0ZSBvLkRCRixsfXZhciBpPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihmLGMpe3RyeXtyZXR1cm4gRnQoYShmLGMpLGMpfWNhdGNoKG8pe2lm''@;'; put 'put ''KGMmJmMuV1RGKXRocm93IG99cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHMoZixjKXt2YXIgbz1jfHx7fTtpZigrby5jb2RlcGFnZT49MCYmTXIoK28uY29kZXBhZ2UpLCJzdHJpbmciPT1vLnR5cGUpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBsPVNyKCksaD1mdW5jdGlvbiBOMChlLHQpe2lmKG51bGw9PWV8fG51bGw9PWVbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcj17dDoibiIsdjowfSxhPTAsbj0xLGk9W10scz0wLGY9IiIsYz17czp7cjowLGM6MH0sZTp7cjow''@;'; put 'put ''LGM6MH19LG89dHx8e30sbD1udWxsIT1vLnJhbmdlP28ucmFuZ2U6ZVsiIXJlZiJdO3N3aXRjaCgxPT09by5oZWFkZXI/YT0xOiJBIj09PW8uaGVhZGVyP2E9MjpBcnJheS5pc0FycmF5KG8uaGVhZGVyKT9hPTM6bnVsbD09by5oZWFkZXImJihhPTApLHR5cGVvZiBsKXtjYXNlInN0cmluZyI6''@;'; put 'put ''Yz1EZShsKTticmVhaztjYXNlIm51bWJlciI6KGM9RGUoZVsiIXJlZiJdKSkucy5yPWw7YnJlYWs7ZGVmYXVsdDpjPWx9YT4wJiYobj0wKTt2YXIgaD1LZShjLnMucikseD1bXSxkPVtdLHY9MCx1PTAscD1BcnJheS5pc0FycmF5KGUpLGs9Yy5zLnIsVD0wLGc9e307cCYmIWVba10mJihlW2td''@;'; put 'put ''PVtdKTt2YXIgTj1vLnNraXBIaWRkZW4mJmVbIiFjb2xzIl18fFtdLE09by5za2lwSGlkZGVuJiZlWyIhcm93cyJdfHxbXTtmb3IoVD1jLnMuYztUPD1jLmUuYzsrK1QpaWYoIShOW1RdfHx7fSkuaGlkZGVuKXN3aXRjaCh4W1RdPUhlKFQpLHI9cD9lW2tdW1RdOmVbeFtUXStoXSxhKXtjYXNl''@;'; put 'put ''IDE6aVtUXT1ULWMucy5jO2JyZWFrO2Nhc2UgMjppW1RdPXhbVF07YnJlYWs7Y2FzZSAzOmlbVF09by5oZWFkZXJbVC1jLnMuY107YnJlYWs7ZGVmYXVsdDppZihudWxsPT1yJiYocj17dzoiX19FTVBUWSIsdDoicyJ9KSxmPXM9YXQocixudWxsLG8pLHU9Z1tzXXx8MCl7ZG97Zj1zKyJfIit1''@;'; put 'put ''Kyt9d2hpbGUoZ1tmXSk7Z1tzXT11LGdbZl09MX1lbHNlIGdbc109MTtpW1RdPWZ9Zm9yKGs9Yy5zLnIrbjtrPD1jLmUucjsrK2spaWYoIShNW2tdfHx7fSkuaGlkZGVuKXt2YXIgST1fYyhlLGMsayx4LGEsaSxwLG8pOyghMT09PUkuaXNlbXB0eXx8KDE9PT1hPyExIT09by5ibGFua3Jvd3M6''@;'; put 'put ''by5ibGFua3Jvd3MpKSYmKGRbdisrXT1JLnJvdyl9cmV0dXJuIGQubGVuZ3RoPXYsZH0oZix7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLHg9aFswXSxkPWguc2xpY2UoMSksdj1mWyIhY29scyJdfHxbXSx1PTAscD0wLGs9MCxUPTE7Zm9yKHU9MDt1PHgubGVuZ3RoOysrdSlpZigo''@;'; put 'put ''KHZbdV18fHt9KS5EQkZ8fHt9KS5uYW1lKXhbdV09dlt1XS5EQkYubmFtZSwrK2s7ZWxzZSBpZihudWxsIT14W3VdKXtpZigrK2ssIm51bWJlciI9PXR5cGVvZiB4W3VdJiYoeFt1XT14W3VdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiB4W3VdKXRocm93IG5ldyBFcnJvcigiREJG''@;'; put 'put ''IEludmFsaWQgY29sdW1uIG5hbWUgIit4W3VdKyIgfCIrdHlwZW9mIHhbdV0rInwiKTtpZih4LmluZGV4T2YoeFt1XSkhPT11KWZvcihwPTA7cDwxMDI0OysrcClpZigtMT09eC5pbmRleE9mKHhbdV0rIl8iK3ApKXt4W3VdKz0iXyIrcDticmVha319dmFyIGc9RGUoZlsiIXJlZiJdKSxOPVtd''@;'; put 'put ''LE09W10sST1bXTtmb3IodT0wO3U8PWcuZS5jLWcucy5jOysrdSl7dmFyIHk9IiIsUD0iIixSPTAsVj1bXTtmb3IocD0wO3A8ZC5sZW5ndGg7KytwKW51bGwhPWRbcF1bdV0mJlYucHVzaChkW3BdW3VdKTtpZigwIT1WLmxlbmd0aCYmbnVsbCE9eFt1XSl7Zm9yKHA9MDtwPFYubGVuZ3RoOysr''@;'; put 'put ''cCl7c3dpdGNoKHR5cGVvZiBWW3BdKXtjYXNlIm51bWJlciI6UD0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6UD0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpQPSJMIjticmVhaztjYXNlIm9iamVjdCI6UD1WW3BdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9Uj1NYXRoLm1heChSLFN0''@;'; put 'put ''cmluZyhWW3BdKS5sZW5ndGgpLHk9eSYmeSE9UD8iQyI6UH1SPjI1MCYmKFI9MjUwKSwiQyI9PShQPSgodlt1XXx8e30pLkRCRnx8e30pLnR5cGUpJiZ2W3VdLkRCRi5sZW4+UiYmKFI9dlt1XS5EQkYubGVuKSwiQiI9PXkmJiJOIj09UCYmKHk9Ik4iLElbdV09dlt1XS5EQkYuZGVjLFI9dlt1''@;'; put 'put ''XS5EQkYubGVuKSxNW3VdPSJDIj09eXx8Ik4iPT1QP1I6aVt5XXx8MCxUKz1NW3VdLE5bdV09eX1lbHNlIE5bdV09Ij8ifXZhciBYPWwubmV4dCgzMik7Zm9yKFgud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLFgud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksWC53cml0ZV9zaGlmdCgyLDI5Nisz''@;'; put 'put ''MiprKSxYLndyaXRlX3NoaWZ0KDIsVCksdT0wO3U8NDsrK3UpWC53cml0ZV9zaGlmdCg0LDApO2ZvcihYLndyaXRlX3NoaWZ0KDQsKCt0W1J0XXx8Myk8PDgpLHU9MCxwPTA7dTx4Lmxlbmd0aDsrK3UpaWYobnVsbCE9eFt1XSl7dmFyIGI9bC5uZXh0KDMyKSxlZT0oeFt1XS5zbGljZSgtMTAp''@;'; put 'put ''KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7Yi53cml0ZV9zaGlmdCgxLGVlLCJzYmNzIiksYi53cml0ZV9zaGlmdCgxLCI/Ij09Tlt1XT8iQyI6Tlt1XSwic2JjcyIpLGIud3JpdGVfc2hpZnQoNCxwKSxiLndyaXRlX3NoaWZ0KDEsTVt1XXx8aVtOW3VdXXx8MCksYi53''@;'; put 'put ''cml0ZV9zaGlmdCgxLElbdV18fDApLGIud3JpdGVfc2hpZnQoMSwyKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCgxLDApLGIud3JpdGVfc2hpZnQoNCwwKSxiLndyaXRlX3NoaWZ0KDQsMCkscCs9TVt1XXx8aVtOW3VdXXx8MH12YXIgbGU9bC5uZXh0KDI2NCk7Zm9yKGxlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMTMpLHU9MDt1PDY1OysrdSlsZS53cml0ZV9zaGlmdCg0LDApO2Zvcih1PTA7dTxkLmxlbmd0aDsrK3Upe3ZhciByZT1sLm5leHQoVCk7Zm9yKHJlLndyaXRlX3NoaWZ0KDEsMCkscD0wO3A8eC5sZW5ndGg7KytwKWlmKG51bGwhPXhbcF0pc3dpdGNoKE5bcF0pe2Nhc2Ui''@;'; put 'put ''TCI6cmUud3JpdGVfc2hpZnQoMSxudWxsPT1kW3VdW3BdPzYzOmRbdV1bcF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cmUud3JpdGVfc2hpZnQoOCxkW3VdW3BdfHwwLCJmIik7YnJlYWs7Y2FzZSJOIjp2YXIgZGU9IjAiO2ZvcigibnVtYmVyIj09dHlwZW9mIGRbdV1bcF0mJihkZT1kW3VdW3Bd''@;'; put 'put ''LnRvRml4ZWQoSVtwXXx8MCkpLGs9MDtrPE1bcF0tZGUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgxLDMyKTtyZS53cml0ZV9zaGlmdCgxLGRlLCJzYmNzIik7YnJlYWs7Y2FzZSJEIjpkW3VdW3BdPyhyZS53cml0ZV9zaGlmdCg0LCgiMDAwMCIrZFt1XVtwXS5nZXRGdWxsWWVhcigpKS5z''@;'; put 'put ''bGljZSgtNCksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiKyhkW3VdW3BdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJlLndyaXRlX3NoaWZ0KDIsKCIwMCIrZFt1XVtwXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyZS53cml0ZV9zaGlmdCg4LCIwMDAw''@;'; put 'put ''MDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB1ZT1TdHJpbmcobnVsbCE9ZFt1XVtwXT9kW3VdW3BdOiIiKS5zbGljZSgwLE1bcF0pO2ZvcihyZS53cml0ZV9zaGlmdCgxLHVlLCJzYmNzIiksaz0wO2s8TVtwXS11ZS5sZW5ndGg7KytrKXJlLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1''@;'; put 'put ''cm4gbC5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLGwuZW5kKCl9fX0oKSxlZj1mdW5jdGlvbigpe3ZhciBlPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4''@;'; put 'put ''Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhl''@;'; put 'put ''NCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZi''@;'; put 'put ''IixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUTox''@;'; put 'put ''ODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sdD1uZXcgUmVnRXhw''@;'; put 'put ''KCJceDFiTigiKyRlKGUpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLHI9ZnVuY3Rpb24oeCxkKXt2YXIgdj1lW2RdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygdj9CMCh2KTp2fSxhPWZ1bmN0aW9u''@;'; put 'put ''KHgsZCx2KXt2YXIgdT1kLmNoYXJDb2RlQXQoMCktMzI8PDR8di5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09dT94OkIwKHUpfTtmdW5jdGlvbiBpKHgsZCl7dmFyIFgsdj14LnNwbGl0KC9bXG5ccl0rLyksdT0tMSxwPS0xLGs9MCxUPTAsZz1bXSxOPVtdLE09bnVsbCxJPXt9LHk9W10s''@;'; put 'put ''UD1bXSxSPVtdLFY9MDtmb3IoK2QuY29kZXBhZ2U+PTAmJk1yKCtkLmNvZGVwYWdlKTtrIT09di5sZW5ndGg7KytrKXtWPTA7dmFyIHJlLGI9dltrXS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csYSkucmVwbGFjZSh0LHIpLGVlPWIucmVwbGFjZSgv''@;'; put 'put ''OzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYi5sZW5ndGg+MClzd2l0Y2goZWVbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVlWzFd''@;'; put 'put ''LmNoYXJBdCgwKSYmTi5wdXNoKGIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBkZT0hMSx1ZT0hMSxGZT0hMSxjZT0hMSx4ZT0tMSxLPS0xO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJH''@;'; put 'put ''IjpicmVhaztjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWU9ITA7YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSx1ZXx8KHA9MCksWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KHJlPWVlW1Rd''@;'; put 'put ''LnNsaWNlKDEpKS5jaGFyQXQoMCk/cmU9cmUuc2xpY2UoMSxyZS5sZW5ndGgtMSk6IlRSVUUiPT09cmU/cmU9ITA6IkZBTFNFIj09PXJlP3JlPSExOmlzTmFOKEpyKHJlKSk/aXNOYU4oYWEocmUpLmdldERhdGUoKSl8fChyZT1YZShyZSkpOihyZT1KcihyZSksbnVsbCE9PU0mJmJ0KE0pJiYo''@;'; put 'put ''cmU9bzAocmUpKSksdHlwZW9mIE9lPCJ1IiYmInN0cmluZyI9PXR5cGVvZiByZSYmInN0cmluZyIhPShkfHx7fSkudHlwZSYmKGR8fHt9KS5jb2RlcGFnZSYmKHJlPU9lLnV0aWxzLmRlY29kZShkLmNvZGVwYWdlLHJlKSksZGU9ITA7YnJlYWs7Y2FzZSJFIjpjZT0hMDt2YXIgQz11YShlZVtU''@;'; put 'put ''XS5zbGljZSgxKSx7cjp1LGM6cH0pO2dbdV1bcF09W2dbdV1bcF0sQ107YnJlYWs7Y2FzZSJTIjpGZT0hMCxnW3VdW3BdPVtnW3VdW3BdLCJTNVMiXTticmVhaztjYXNlIlIiOnhlPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6Sz1wYXJzZUludChlZVtUXS5zbGlj''@;'; put 'put ''ZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGQmJmQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYil9aWYoZGUmJihnW3VdW3BdJiYyPT1nW3VdW3BdLmxlbmd0aD9nW3VdW3BdWzBdPXJlOmdbdV1bcF09cmUsTT1udWxsKSxGZSl7aWYoY2UpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFU9eGU+LTEmJmdbeGVdW0tdO2lmKCFVfHwhVVsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO2dbdV1bcF1bMV09a2YoVVsxXSx7cjp1LXhl''@;'; put 'put ''LGM6cC1LfSl9YnJlYWs7Y2FzZSJGIjp2YXIgTz0wO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiWCI6cD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSwrK087YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSkt''@;'; put 'put ''MSxYPWcubGVuZ3RoO1g8PXU7KytYKWdbWF09W107YnJlYWs7Y2FzZSJNIjpWPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpNPU5bcGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpXTti''@;'; put 'put ''cmVhaztjYXNlIlciOmZvcihSPWVlW1RdLnNsaWNlKDEpLnNwbGl0KCIgIiksWD1wYXJzZUludChSWzBdLDEwKTtYPD1wYXJzZUludChSWzFdLDEwKTsrK1gpVj1wYXJzZUludChSWzJdLDEwKSxQW1gtMV09MD09PVY/e2hpZGRlbjohMH06e3djaDpWfSxLdChQW1gtMV0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''QyI6UFtwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KFBbcF09e30pO2JyZWFrO2Nhc2UiUiI6eVt1PXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KHlbdV09e30pLFY+MD8oeVt1XS5ocHQ9Vix5W3VdLmhweD1vYShWKSk6MD09PVYmJih5W3VdLmhpZGRlbj0hMCk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfU88MSYmKE09bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfX1yZXR1cm4geS5sZW5ndGg+MCYmKElbIiFyb3dz''@;'; put 'put ''Il09eSksUC5sZW5ndGg+MCYmKElbIiFjb2xzIl09UCksZCYmZC5zaGVldFJvd3MmJihnPWcuc2xpY2UoMCxkLnNoZWV0Um93cykpLFtnLEldfWZ1bmN0aW9uIHMoeCxkKXt2YXIgdj1mdW5jdGlvbiBuKHgsZCl7c3dpdGNoKGQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBpKE9yKHgpLGQp''@;'; put 'put ''O2Nhc2UiYmluYXJ5IjpyZXR1cm4gaSh4LGQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaShTZSYmQnVmZmVyLmlzQnVmZmVyKHgpP3gudG9TdHJpbmcoImJpbmFyeSIpOnd0KHgpLGQpO2Nhc2UiYXJyYXkiOnJldHVybiBpKFB0KHgpLGQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5''@;'; put 'put ''cGUgIitkLnR5cGUpfSh4LGQpLHA9dlsxXSxrPXNhKHZbMF0sZCk7cmV0dXJuICRlKHApLmZvckVhY2goZnVuY3Rpb24oVCl7a1tUXT1wW1RdfSksa31mdW5jdGlvbiBjKHgsZCx2LHUpe3ZhciBwPSJDO1kiKyh2KzEpKyI7WCIrKHUrMSkrIjtLIjtzd2l0Y2goeC50KXtjYXNlIm4iOnArPXgu''@;'; put 'put ''dnx8MCx4LmYmJiF4LkYmJihwKz0iO0UiK0luKHguZix7cjp2LGM6dX0pKTticmVhaztjYXNlImIiOnArPXgudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOnArPXgud3x8eC52O2JyZWFrO2Nhc2UiZCI6cCs9JyInKyh4Lnd8fHgudikrJyInO2JyZWFrO2Nhc2UicyI6cCs9JyInK3gu''@;'; put 'put ''di5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoLzsvZywiOzsiKSsnIid9cmV0dXJuIHB9cmV0dXJuIGVbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIGYoeCxkKXtyZXR1cm4gRnQocyh4LGQpLGQpfSx0b19zaGVldDpzLGZyb21fc2hlZXQ6ZnVuY3Rpb24gaCh4LGQpe3ZhciBrLHY9''@;'; put 'put ''WyJJRDtQV1hMO047RSJdLHU9W10scD1EZSh4WyIhcmVmIl0pLFQ9QXJyYXkuaXNBcnJheSh4KSxnPSJcclxuIjt2LnB1c2goIlA7UEdlbmVyYWwiKSx2LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLHhbIiFjb2xzIl0mJmZ1bmN0aW9uIG8oeCxkKXtkLmZvckVhY2goZnVuY3Rpb24odix1KXt2''@;'; put 'put ''YXIgcD0iRjtXIisodSsxKSsiICIrKHUrMSkrIiAiO3YuaGlkZGVuP3ArPSIwIjooIm51bWJlciI9PXR5cGVvZiB2LndpZHRoJiYhdi53cHgmJih2LndweD1QYSh2LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB2LndweCYmIXYud2NoJiYodi53Y2g9TGEodi53cHgpKSwibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIHYud2NoJiYocCs9TWF0aC5yb3VuZCh2LndjaCkpKSwiICIhPXAuY2hhckF0KHAubGVuZ3RoLTEpJiZ4LnB1c2gocCl9KX0odix4WyIhY29scyJdKSx4WyIhcm93cyJdJiZmdW5jdGlvbiBsKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7Ijt2LmhpZGRlbj9wKz0i''@;'; put 'put ''TTA7Ijp2LmhwdD9wKz0iTSIrMjAqdi5ocHQrIjsiOnYuaHB4JiYocCs9Ik0iKzIwKkJhKHYuaHB4KSsiOyIpLHAubGVuZ3RoPjImJngucHVzaChwKyJSIisodSsxKSl9KX0odix4WyIhcm93cyJdKSx2LnB1c2goIkI7WSIrKHAuZS5yLXAucy5yKzEpKyI7WCIrKHAuZS5jLXAucy5jKzEpKyI7''@;'; put 'put ''RCIrW3Aucy5jLHAucy5yLHAuZS5jLHAuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgTj1wLnMucjtOPD1wLmUucjsrK04pZm9yKHZhciBNPXAucy5jO008PXAuZS5jOysrTSl7dmFyIEk9Z2Uoe3I6TixjOk19KTsoaz1UPyh4W05dfHxbXSlbTV06eFtJXSkmJihudWxsIT1rLnZ8fGsuZiYmIWsu''@;'; put 'put ''RikmJnUucHVzaChjKGssMCxOLE0pKX1yZXR1cm4gdi5qb2luKGcpK2crdS5qb2luKGcpK2crIkUiK2d9fX0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxzKXtmb3IodmFyIGY9aS5zcGxpdCgiXG4iKSxjPS0xLG89LTEsbD0wLGg9W107bCE9PWYubGVuZ3RoOysrbClpZigiQk9UIiE9''@;'; put 'put ''PWZbbF0udHJpbSgpKXtpZighKGM8MCkpe2Zvcih2YXIgeD1mW2xdLnRyaW0oKS5zcGxpdCgiLCIpLGQ9eFswXSx2PXhbMV0sdT1mWysrbF18fCIiOzEmKHUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmbDxmLmxlbmd0aC0xOyl1Kz0iXG4iK2ZbKytsXTtzd2l0Y2godT11LnRyaW0oKSwr''@;'; put 'put ''ZCl7Y2FzZS0xOmlmKCJCT1QiPT09dSl7aFsrK2NdPVtdLG89MDtjb250aW51ZX1pZigiRU9EIiE9PXUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3UpO2JyZWFrO2Nhc2UgMDpoW2NdW29dPSJUUlVFIj09PXV8fCJGQUxTRSIhPT11JiYoaXNO''@;'; put 'put ''YU4oSnIodikpP2lzTmFOKGFhKHYpLmdldERhdGUoKSk/djpYZSh2KTpKcih2KSksKytvO2JyZWFrO2Nhc2UgMToodT0odT11LnNsaWNlKDEsdS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnUubWF0Y2goL149Ii4qIiQvKSYmKHU9dS5zbGljZSgyLC0xKSksaFtjXVtvKytdPSIi''@;'; put 'put ''IT09dT91Om51bGx9aWYoIkVPRCI9PT11KWJyZWFrfX1lbHNlIGhbKytjXT1bXSxvPTA7cmV0dXJuIHMmJnMuc2hlZXRSb3dzJiYoaD1oLnNsaWNlKDAscy5zaGVldFJvd3MpKSxofWZ1bmN0aW9uIHIoaSxzKXtyZXR1cm4gc2EoZnVuY3Rpb24gZShpLHMpe3N3aXRjaChzLnR5cGUpe2Nhc2Ui''@;'; put 'put ''YmFzZTY0IjpyZXR1cm4gdChPcihpKSxzKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQoaSxzKTtjYXNlImJ1ZmZlciI6cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihpKT9pLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChpKSxzKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChpKSxzKX10aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcy50eXBlKX0oaSxzKSxzKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYShpLHMpe3JldHVybiBGdChyKGkscykscyl9LHRvX3NoZWV0OnIsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGMsbyxsLGgseCl7Yy5w''@;'; put 'put ''dXNoKG8pLGMucHVzaChsKyIsIitoKSxjLnB1c2goJyInK3gucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LHM9ZnVuY3Rpb24oYyxvLGwsaCl7Yy5wdXNoKG8rIiwiK2wpLGMucHVzaCgxPT1vPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aCl9O3JldHVybiBmdW5jdGlvbihjKXt2YXIg''@;'; put 'put ''aCxvPVtdLGw9RGUoY1siIXJlZiJdKSx4PUFycmF5LmlzQXJyYXkoYyk7aShvLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksaShvLCJWRUNUT1JTIiwwLGwuZS5yLWwucy5yKzEsIiIpLGkobywiVFVQTEVTIiwwLGwuZS5jLWwucy5jKzEsIiIpLGkobywiREFUQSIsMCwwLCIiKTtmb3IodmFyIGQ9''@;'; put 'put ''bC5zLnI7ZDw9bC5lLnI7KytkKXtzKG8sLTEsMCwiQk9UIik7Zm9yKHZhciB2PWwucy5jO3Y8PWwuZS5jOysrdil7dmFyIHU9Z2Uoe3I6ZCxjOnZ9KTtpZihoPXg/KGNbZF18fFtdKVt2XTpjW3VdKXN3aXRjaChoLnQpe2Nhc2UibiI6dmFyIHA9aC53OyFwJiZudWxsIT1oLnYmJihwPWgudiks''@;'; put 'put ''bnVsbD09cD9zKG8sMSwwLGguZiYmIWguRj8iPSIraC5mOiIiKTpzKG8sMCxwLCJWIik7YnJlYWs7Y2FzZSJiIjpzKG8sMCxoLnY/MTowLGgudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpzKG8sMSwwLGlzTmFOKGgudik/aC52Oic9IicraC52KyciJyk7YnJlYWs7Y2FzZSJkIjpo''@;'; put 'put ''Lnd8fChoLnc9UnIoaC56fHxwZVsxNF0saXIoWGUoaC52KSkpKSxzKG8sMCxoLncsIlYiKTticmVhaztkZWZhdWx0OnMobywxLDAsIiIpfWVsc2UgcyhvLDEsMCwiIil9fXJldHVybiBzKG8sLTEsMCwiRU9EIiksby5qb2luKCJcclxuIil9fSgpfX0oKSx0Zj1mdW5jdGlvbigpe2Z1bmN0aW9u''@;'; put 'put ''IGUoaCl7cmV0dXJuIGgucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiB0KGgpe3JldHVybiBoLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVu''@;'; put 'put ''Y3Rpb24gYShoLHgpe3JldHVybiBzYShmdW5jdGlvbiByKGgseCl7Zm9yKHZhciBkPWguc3BsaXQoIlxuIiksdj0tMSx1PS0xLHA9MCxrPVtdO3AhPT1kLmxlbmd0aDsrK3Ape3ZhciBUPWRbcF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09VFswXSl7dmFyIGc9R2UoVFsxXSk7aWYo''@;'; put 'put ''ay5sZW5ndGg8PWcucilmb3Iodj1rLmxlbmd0aDt2PD1nLnI7Kyt2KWtbdl18fChrW3ZdPVtdKTtzd2l0Y2godj1nLnIsdT1nLmMsVFsyXSl7Y2FzZSJ0IjprW3ZdW3VdPWUoVFszXSk7YnJlYWs7Y2FzZSJ2IjprW3ZdW3VdPStUWzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgTj1UW1QubGVuZ3Ro''@;'; put 'put ''LTFdO2Nhc2UidnRjIjprW3ZdW3VdPSJubCI9PT1UWzNdPyEhK1RbNF06K1RbNF0sInZ0ZiI9PVRbMl0mJihrW3ZdW3VdPVtrW3ZdW3VdLE5dKX19fXJldHVybiB4JiZ4LnNoZWV0Um93cyYmKGs9ay5zbGljZSgwLHguc2hlZXRSb3dzKSksa30oaCx4KSx4KX12YXIgaT1bInNvY2lhbGNhbGM6''@;'; put 'put ''dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikscz1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250''@;'; put 'put ''ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsZj1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxjPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1''@;'; put 'put ''bmN0aW9uIG8oaCl7aWYoIWh8fCFoWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB2LHg9W10sZD1bXSx1PSIiLHA9UHIoaFsiIXJlZiJdKSxrPUFycmF5LmlzQXJyYXkoaCksVD1wLnMucjtUPD1wLmUucjsrK1QpZm9yKHZhciBnPXAucy5jO2c8PXAuZS5jOysrZylpZih1PWdlKHtyOlQsYzpn''@;'; put 'put ''fSksKHY9az8oaFtUXXx8W10pW2ddOmhbdV0pJiZudWxsIT12LnYmJiJ6IiE9PXYudCl7c3dpdGNoKGQ9WyJjZWxsIix1LCJ0Il0sdi50KXtjYXNlInMiOmNhc2Uic3RyIjpkLnB1c2godCh2LnYpKTticmVhaztjYXNlIm4iOnYuZj8oZFsyXT0idnRmIixkWzNdPSJuIixkWzRdPXYudixkWzVd''@;'; put 'put ''PXQodi5mKSk6KGRbMl09InYiLGRbM109di52KTticmVhaztjYXNlImIiOmRbMl09InZ0Iisodi5mPyJmIjoiYyIpLGRbM109Im5sIixkWzRdPXYudj8iMSI6IjAiLGRbNV09dCh2LmZ8fCh2LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBOPWlyKFhlKHYudikpO2RbMl09''@;'; put 'put ''InZ0YyIsZFszXT0ibmQiLGRbNF09IiIrTixkWzVdPXYud3x8UnIodi56fHxwZVsxNF0sTik7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX14LnB1c2goZC5qb2luKCI6IikpfXJldHVybiB4LnB1c2goInNoZWV0OmM6IisocC5lLmMtcC5zLmMrMSkrIjpyOiIrKHAuZS5yLXAucy5yKzEpKyI6dHZm''@;'; put 'put ''OjEiKSx4LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIikseC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBuKGgseCl7cmV0dXJuIEZ0KGEoaCx4KSx4KX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGwoaCl7cmV0dXJuW2kscyxmLHMsbyhoKSxj''@;'; put 'put ''XS5qb2luKCJcbiIpfX19KCksY2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGwsaCx4LGQsdil7di5yYXc/aFt4XVtkXT1sOiIiPT09bHx8KGhbeF1bZF09IlRSVUUiPT09bHx8IkZBTFNFIiE9PWwmJihpc05hTihKcihsKSk/aXNOYU4oYWEobCkuZ2V0RGF0ZSgpKT9sOlhlKGwpOkpyKGwpKSl9''@;'; put 'put ''dmFyIHI9ezQ0OiIsIiw5OiJcdCIsNTk6IjsiLDEyNDoifCJ9LGE9ezQ0OjMsOToyLDU5OjEsMTI0OjB9O2Z1bmN0aW9uIG4obCl7Zm9yKHZhciBoPXt9LHg9ITEsZD0wLHY9MDtkPGwubGVuZ3RoOysrZCkzND09KHY9bC5jaGFyQ29kZUF0KGQpKT94PSF4OiF4JiZ2IGluIHImJihoW3ZdPSho''@;'; put 'put ''W3ZdfHwwKSsxKTtmb3IoZCBpbiB2PVtdLGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7aWYoIXYubGVuZ3RoKWZvcihkIGluIGg9YSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxkKSYmdi5wdXNoKFto''@;'; put 'put ''W2RdLGRdKTtyZXR1cm4gdi5zb3J0KGZ1bmN0aW9uKHUscCl7cmV0dXJuIHVbMF0tcFswXXx8YVt1WzFdXS1hW3BbMV1dfSksclt2LnBvcCgpWzFdXXx8NDR9ZnVuY3Rpb24gcyhsLGgpe3JldHVybiFofHwhaC5QUk58fGguRlN8fCJzZXA9Ij09bC5zbGljZSgwLDQpfHxsLmluZGV4T2YoIlx0''@;'; put 'put ''Iik+PTB8fGwuaW5kZXhPZigiLCIpPj0wfHxsLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBpKGwsaCl7dmFyIHg9aHx8e30sZD0iIjtudWxsIT16ZSYmbnVsbD09eC5kZW5zZSYmKHguZGVuc2U9emUpO3ZhciB2PXguZGVuc2U/W106e30sdT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz''@;'; put 'put ''ZXA9Ij09bC5zbGljZSgwLDQpPzEzPT1sLmNoYXJDb2RlQXQoNSkmJjEwPT1sLmNoYXJDb2RlQXQoNik/KGQ9bC5jaGFyQXQoNCksbD1sLnNsaWNlKDcpKToxMz09bC5jaGFyQ29kZUF0KDUpfHwxMD09bC5jaGFyQ29kZUF0KDUpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg2KSk6ZD1uKGwu''@;'; put 'put ''c2xpY2UoMCwxMDI0KSk6ZD14JiZ4LkZTP3guRlM6bihsLnNsaWNlKDAsMTAyNCkpO3ZhciBwPTAsaz0wLFQ9MCxnPTAsTj0wLE09ZC5jaGFyQ29kZUF0KDApLEk9ITEseT0wLFA9bC5jaGFyQ29kZUF0KDApO2w9bC5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBSPW51bGwhPXguZGF0ZU5G''@;'; put 'put ''P2Z1bmN0aW9uIG5vKGUpe3ZhciB0PSJudW1iZXIiPT10eXBlb2YgZT9wZVtlXTplO3JldHVybiB0PXQucmVwbGFjZShFaSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrdCsiJCIpfSh4LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWKCl7dmFyIFg9bC5zbGljZShnLE4pLGI9e307aWYoJyInPT1Y''@;'; put 'put ''LmNoYXJBdCgwKSYmJyInPT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1YLmxlbmd0aCliLnQ9InoiO2Vsc2UgaWYoeC5yYXcpYi50PSJzIixiLnY9WDtlbHNlIGlmKDA9PT1YLnRyaW0oKS5sZW5ndGgpYi50PSJzIixiLnY9''@;'; put 'put ''WDtlbHNlIGlmKDYxPT1YLmNoYXJDb2RlQXQoMCkpMzQ9PVguY2hhckNvZGVBdCgxKSYmMzQ9PVguY2hhckNvZGVBdChYLmxlbmd0aC0xKT8oYi50PSJzIixiLnY9WC5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFJ4KGUpe3JldHVybiAxIT1lLmxlbmd0aH0oWCk/''@;'; put 'put ''KGIudD0ibiIsYi5mPVguc2xpY2UoMSkpOihiLnQ9InMiLGIudj1YKTtlbHNlIGlmKCJUUlVFIj09WCliLnQ9ImIiLGIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PVgpYi50PSJiIixiLnY9ITE7ZWxzZSBpZihpc05hTihUPUpyKFgpKSlpZighaXNOYU4oYWEoWCkuZ2V0RGF0ZSgpKXx8UiYmWC5t''@;'; put 'put ''YXRjaChSKSl7Yi56PXguZGF0ZU5GfHxwZVsxNF07dmFyIGVlPTA7UiYmWC5tYXRjaChSKSYmKFg9ZnVuY3Rpb24gaW8oZSx0LHIpe3ZhciBhPS0xLG49LTEsaT0tMSxzPS0xLGY9LTEsYz0tMTsodC5tYXRjaChFaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgseCl7dmFyIGQ9cGFyc2VJbnQo''@;'; put 'put ''clt4KzFdLDEwKTtzd2l0Y2goaC50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjphPWQ7YnJlYWs7Y2FzZSJkIjppPWQ7YnJlYWs7Y2FzZSJoIjpzPWQ7YnJlYWs7Y2FzZSJzIjpjPWQ7YnJlYWs7Y2FzZSJtIjpzPj0wP2Y9ZDpuPWR9fSksYz49MCYmLTE9PWYmJm4+PTAmJihmPW4s''@;'; put 'put ''bj0tMSk7dmFyIG89KCIiKyhhPj0wP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisobj49MT9uOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhpPj0xP2k6MSkpLnNsaWNlKC0yKTs3PT1vLmxlbmd0aCYmKG89IjAiK28pLDg9PW8ubGVuZ3RoJiYobz0i''@;'; put 'put ''MjAiK28pO3ZhciBsPSgiMDAiKyhzPj0wP3M6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGY+PTA/ZjowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYz49MD9jOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXMmJi0xPT1mJiYtMT09Yz9vOi0xPT1hJiYtMT09biYmLTE9PWk/bDpvKyJUIitsfSgw''@;'; put 'put ''LHguZGF0ZU5GLFgubWF0Y2goUil8fFtdKSxlZT0xKSx4LmNlbGxEYXRlcz8oYi50PSJkIixiLnY9WGUoWCxlZSkpOihiLnQ9Im4iLGIudj1pcihYZShYLGVlKSkpLCExIT09eC5jZWxsVGV4dCYmKGIudz1ScihiLnosYi52IGluc3RhbmNlb2YgRGF0ZT9pcihiLnYpOmIudikpLHguY2VsbE5G''@;'; put 'put ''fHxkZWxldGUgYi56fWVsc2UgYi50PSJzIixiLnY9WDtlbHNlIGIudD0ibiIsITEhPT14LmNlbGxUZXh0JiYoYi53PVgpLGIudj1UO2lmKCJ6Ij09Yi50fHwoeC5kZW5zZT8odltwXXx8KHZbcF09W10pLHZbcF1ba109Yik6dltnZSh7YzprLHI6cH0pXT1iKSxQPWwuY2hhckNvZGVBdChnPU4r''@;'; put 'put ''MSksdS5lLmM8ayYmKHUuZS5jPWspLHUuZS5yPHAmJih1LmUucj1wKSx5PT1NKSsraztlbHNlIGlmKGs9MCwrK3AseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1wKXJldHVybiEwfWU6Zm9yKDtOPGwubGVuZ3RoOysrTilzd2l0Y2goeT1sLmNoYXJDb2RlQXQoTikpe2Nhc2UgMzQ6MzQ9PT1Q''@;'; put 'put ''JiYoST0hSSk7YnJlYWs7Y2FzZSBNOmNhc2UgMTA6Y2FzZSAxMzppZighSSYmVigpKWJyZWFrIGV9cmV0dXJuIE4tZz4wJiZWKCksdlsiIXJlZiJdPXdlKHUpLHZ9KGwsaCk6c2EoZnVuY3Rpb24gdChsLGgpe3ZhciB4PWh8fHt9LGQ9W107aWYoIWx8fDA9PT1sLmxlbmd0aClyZXR1cm4gZDtm''@;'; put 'put ''b3IodmFyIHY9bC5zcGxpdCgvW1xyXG5dLyksdT12Lmxlbmd0aC0xO3U+PTAmJjA9PT12W3VdLmxlbmd0aDspLS11O2Zvcih2YXIgcD0xMCxrPTAsVD0wO1Q8PXU7KytUKS0xPT0oaz12W1RdLmluZGV4T2YoIiAiKSk/az12W1RdLmxlbmd0aDprKysscD1NYXRoLm1heChwLGspO2ZvcihUPTA7''@;'; put 'put ''VDw9dTsrK1Qpe2RbVF09W107dmFyIGc9MDtmb3IoZSh2W1RdLnNsaWNlKDAscCkudHJpbSgpLGQsVCxnLHgpLGc9MTtnPD0odltUXS5sZW5ndGgtcCkvMTArMTsrK2cpZSh2W1RdLnNsaWNlKHArMTAqKGctMSkscCsxMCpnKS50cmltKCksZCxULGcseCl9cmV0dXJuIHguc2hlZXRSb3dzJiYo''@;'; put 'put ''ZD1kLnNsaWNlKDAseC5zaGVldFJvd3MpKSxkfShsLGgpLGgpfWZ1bmN0aW9uIGYobCxoKXt2YXIgeD0iIixkPSJzdHJpbmciPT1oLnR5cGU/WzAsMCwwLDBdOktuKGwsaCk7c3dpdGNoKGgudHlwZSl7Y2FzZSJiYXNlNjQiOng9T3IobCk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n''@;'; put 'put ''Ijp4PWw7YnJlYWs7Y2FzZSJidWZmZXIiOng9NjUwMDE9PWguY29kZXBhZ2U/bC50b1N0cmluZygidXRmOCIpOmguY29kZXBhZ2UmJnR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2RlKGguY29kZXBhZ2UsbCk6U2UmJkJ1ZmZlci5pc0J1ZmZlcihsKT9sLnRvU3RyaW5nKCJiaW5hcnkiKTp3''@;'; put 'put ''dChsKTticmVhaztjYXNlImFycmF5Ijp4PVB0KGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2gudHlwZSl9cmV0dXJuIDIzOT09ZFswXSYmMTg3PT1kWzFdJiYxOTE9PWRbMl0/eD1CZSh4LnNsaWNlKDMpKToic3RyaW5nIiE9aC50eXBlJiYi''@;'; put 'put ''YnVmZmVyIiE9aC50eXBlJiY2NTAwMT09aC5jb2RlcGFnZT94PUJlKHgpOiJiaW5hcnkiPT1oLnR5cGUmJnR5cGVvZiBPZTwidSImJmguY29kZXBhZ2UmJih4PU9lLnV0aWxzLmRlY29kZShoLmNvZGVwYWdlLE9lLnV0aWxzLmVuY29kZSgyODU5MSx4KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246''@;'; put 'put ''Ij09eC5zbGljZSgwLDE5KT90Zi50b19zaGVldCgic3RyaW5nIj09aC50eXBlP3g6QmUoeCksaCk6cyh4LGgpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBjKGwsaCl7cmV0dXJuIEZ0KGYobCxoKSxoKX0sdG9fc2hlZXQ6Zixmcm9tX3NoZWV0OmZ1bmN0aW9uIG8obCl7Zm9yKHZhciBk''@;'; put 'put ''LGg9W10seD1EZShsWyIhcmVmIl0pLHY9QXJyYXkuaXNBcnJheShsKSx1PXgucy5yO3U8PXguZS5yOysrdSl7Zm9yKHZhciBwPVtdLGs9eC5zLmM7azw9eC5lLmM7KytrKXt2YXIgVD1nZSh7cjp1LGM6a30pO2lmKChkPXY/KGxbdV18fFtdKVtrXTpsW1RdKSYmbnVsbCE9ZC52KXtmb3IodmFy''@;'; put 'put ''IGc9KGQud3x8KGF0KGQpLGQudyl8fCIiKS5zbGljZSgwLDEwKTtnLmxlbmd0aDwxMDspZys9IiAiO3AucHVzaChnKygwPT09az8iICI6IiIpKX1lbHNlIHAucHVzaCgiICAgICAgICAgICIpfWgucHVzaChwLmpvaW4oIiIpKX1yZXR1cm4gaC5qb2luKCJcbiIpfX19KCksanQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBlKEMsVSxPKXtpZihDKXtocihDLEMubHx8MCk7Zm9yKHZhciBEPU8uRW51bXx8eGU7Qy5sPEMubGVuZ3RoOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpLHNlPURbal18fERbNjU1MzVdLFo9Qy5yZWFkX3NoaWZ0KDIpLFE9Qy5sK1osWT1zZS5mJiZzZS5mKEMsWixPKTtpZihD''@;'; put 'put ''Lmw9USxVKFksc2UsaikpcmV0dXJufX19ZnVuY3Rpb24gcihDLFUpe2lmKCFDKXJldHVybiBDO3ZhciBPPVV8fHt9O251bGwhPXplJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT16ZSk7dmFyIEQ9Ty5kZW5zZT9bXTp7fSxqPSJTaGVldDEiLHNlPSIiLFo9MCxRPXt9LFk9W10sRWU9W10sQT17''@;'; put 'put ''czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFBlPU8uc2hlZXRSb3dzfHwwO2lmKDA9PUNbMl0mJig4PT1DWzNdfHw5PT1DWzNdKSYmQy5sZW5ndGg+PTE2JiY1PT1DWzE0XSYmMTA4PT09Q1sxNV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBXb3JrcyAzIGZvciBNYWMgZmlsZSIpO2lm''@;'; put 'put ''KDI9PUNbMl0pTy5FbnVtPXhlLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDA6Ty52ZXJzPW9lLG9lPj00MDk2JiYoTy5xcHJvPSEwKTticmVhaztjYXNlIDY6QT1vZTticmVhaztjYXNlIDIwNDpvZSYmKHNlPW9lKTticmVhaztjYXNlIDIyMjpzZT1vZTticmVhaztj''@;'; put 'put ''YXNlIDE1OmNhc2UgNTE6Ty5xcHJvfHwob2VbMV0udj1vZVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09anImJiEoMTEyJn5vZVsyXSkmJigxNSZvZVsyXSk+MSYmKDE1Jm9lWzJdKTwxNSYmKG9lWzFdLno9Ty5kYXRlTkZ8fHBlWzE0XSxPLmNlbGxEYXRlcyYm''@;'; put 'put ''KG9lWzFdLnQ9ImQiLG9lWzFdLnY9bzAob2VbMV0udikpKSxPLnFwcm8mJm9lWzNdPlomJihEWyIhcmVmIl09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFo9b2VbM10saj1zZXx8IlNoZWV0IisoWisxKSxzZT0iIik7''@;'; put 'put ''dmFyIGZ0PU8uZGVuc2U/KERbb2VbMF0ucl18fFtdKVtvZVswXS5jXTpEW2dlKG9lWzBdKV07aWYoZnQpe2Z0LnQ9b2VbMV0udCxmdC52PW9lWzFdLnYsbnVsbCE9b2VbMV0ueiYmKGZ0Lno9b2VbMV0ueiksbnVsbCE9b2VbMV0uZiYmKGZ0LmY9b2VbMV0uZik7YnJlYWt9Ty5kZW5zZT8oRFtv''@;'; put 'put ''ZVswXS5yXXx8KERbb2VbMF0ucl09W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXX19LE8pO2Vsc2V7aWYoMjYhPUNbMl0mJjE0IT1DWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0NbMl0pO08uRW51bT1LLDE0PT1D''@;'; put 'put ''WzJdJiYoTy5xcHJvPSEwLEMubD0wKSxlKEMsZnVuY3Rpb24ob2UscWUsanIpe3N3aXRjaChqcil7Y2FzZSAyMDQ6aj1vZTticmVhaztjYXNlIDIyOm9lWzFdLnY9b2VbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihvZVsz''@;'; put 'put ''XT5aJiYoRFsiIXJlZiJdPXdlKEEpLFFbal09RCxZLnB1c2goaiksRD1PLmRlbnNlP1tdOnt9LEE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqPSJTaGVldCIrKChaPW9lWzNdKSsxKSksUGU+MCYmb2VbMF0ucj49UGUpYnJlYWs7Ty5kZW5zZT8oRFtvZVswXS5yXXx8KERbb2VbMF0ucl09''@;'; put 'put ''W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXSxBLmUuYzxvZVswXS5jJiYoQS5lLmM9b2VbMF0uYyksQS5lLnI8b2VbMF0uciYmKEEuZS5yPW9lWzBdLnIpO2JyZWFrO2Nhc2UgMjc6b2VbMTRlM10mJihFZVtvZVsxNGUzXVswXV09b2VbMTRlM11bMV0p''@;'; put 'put ''O2JyZWFrO2Nhc2UgMTUzNzpFZVtvZVswXV09b2VbMV0sb2VbMF09PVomJihqPW9lWzFdKX19LE8pfWlmKERbIiFyZWYiXT13ZShBKSxRW3NlfHxqXT1ELFkucHVzaChzZXx8aiksIUVlLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpZLFNoZWV0czpRfTtmb3IodmFyIEFlPXt9LExlPVtdLENl''@;'; put 'put ''PTA7Q2U8RWUubGVuZ3RoOysrQ2UpUVtZW0NlXV0/KExlLnB1c2goRWVbQ2VdfHxZW0NlXSksQWVbRWVbQ2VdXT1RW0VlW0NlXV18fFFbWVtDZV1dKTooTGUucHVzaChFZVtDZV0pLEFlW0VlW0NlXV09eyIhcmVmIjoiQTEifSk7cmV0dXJue1NoZWV0TmFtZXM6TGUsU2hlZXRzOkFlfX1mdW5j''@;'; put 'put ''dGlvbiBvKEMsVSxPKXt2YXIgRD1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDAsMF07cmV0dXJuIE8ucXBybyYmMjA3NjghPU8udmVycz8oRFswXS5jPUMucmVhZF9zaGlmdCgxKSxEWzNdPUMucmVhZF9zaGlmdCgxKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpLEMubCs9Mik6KERbMl09Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLERbMF0uYz1DLnJlYWRfc2hpZnQoMiksRFswXS5yPUMucmVhZF9zaGlmdCgyKSksRH1mdW5jdGlvbiBsKEMsVSxPKXt2YXIgRD1DLmwrVSxqPW8oQywwLE8pO2lmKGpbMV0udD0icyIsMjA3Njg9PU8udmVycyl7Qy5sKys7dmFyIHNlPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4g''@;'; put 'put ''alsxXS52PUMucmVhZF9zaGlmdChzZSwidXRmOCIpLGp9cmV0dXJuIE8ucXBybyYmQy5sKyssalsxXS52PUMucmVhZF9zaGlmdChELUMubCwiY3N0ciIpLGp9ZnVuY3Rpb24gaChDLFUsTyl7dmFyIEQ9Ryg3K08ubGVuZ3RoKTtELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''VSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqPTA7ajxELmxlbmd0aDsrK2ope3ZhciBzZT1PLmNoYXJDb2RlQXQoaik7RC53cml0ZV9zaGlmdCgxLHNlPj0xMjg/OTU6c2UpfXJldHVybiBELndyaXRlX3NoaWZ0KDEsMCksRH1mdW5jdGlvbiBkKEMs''@;'; put 'put ''VSxPKXt2YXIgRD1HKDcpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMixPLCJpIiksRH1mdW5jdGlvbiB1KEMsVSxPKXt2YXIgRD1HKDEzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgxLDI1NSks''@;'; put 'put ''RC53cml0ZV9zaGlmdCgyLFUpLEQud3JpdGVfc2hpZnQoMixDKSxELndyaXRlX3NoaWZ0KDgsTywiZiIpLER9ZnVuY3Rpb24gayhDLFUsTyl7dmFyIEQ9MzI3NjgmVTtyZXR1cm4gVT0oRD9DOjApKygoVSY9LTMyNzY5KT49ODE5Mj9VLTE2Mzg0OlUpLChEPyIiOiIkIikrKE8/SGUoVSk6S2Uo''@;'; put 'put ''VSkpfXZhciBUPXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxnPVsiIiwiIiwiIiwiIiwiIiwi''@;'; put 'put ''IiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gTShDKXt2YXIgVT1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBVWzBdLnI9Qy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLFVbM109Q1tDLmwrK10sVVswXS5jPUNbQy5sKytdLFV9ZnVuY3Rpb24geShDLFUsTyxEKXt2YXIgaj1HKDYrRC5sZW5ndGgpO2oud3JpdGVfc2hpZnQoMixDKSxqLndyaXRlX3NoaWZ0KDEsTyksai53cml0ZV9zaGlmdCgxLFUpLGoud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBz''@;'; put 'put ''ZT0wO3NlPEQubGVuZ3RoOysrc2Upe3ZhciBaPUQuY2hhckNvZGVBdChzZSk7ai53cml0ZV9zaGlmdCgxLFo+PTEyOD85NTpaKX1yZXR1cm4gai53cml0ZV9zaGlmdCgxLDApLGp9ZnVuY3Rpb24gUihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCksaj1DLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''c2U9Qy5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1zZSlyZXR1cm4gMD09PUQmJjMyMjEyMjU0NzI9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj0xNSk6MD09PUQmJjM0ODk2NjA5Mjg9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj00Mik6T1sxXS52PTAsTzt2YXIgWj0zMjc2OCZzZTtyZXR1cm4gc2U9''@;'; put 'put ''KDMyNzY3JnNlKS0xNjQ0NixPWzFdLnY9KDEtMipaKSooaipNYXRoLnBvdygyLHNlKzMyKStEKk1hdGgucG93KDIsc2UpKSxPfWZ1bmN0aW9uIFYoQyxVLE8sRCl7dmFyIGo9RygxNCk7aWYoai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSks''@;'; put 'put ''MD09RClyZXR1cm4gai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoNCwwKSxqLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGo7dmFyIHNlPTAsWj0wLFk9MDtyZXR1cm4gRDwwJiYoc2U9MSxEPS1EKSxaPTB8TWF0aC5sb2cyKEQpLDIxNDc0ODM2NDgmKFk9KEQvPU1hdGgucG93KDIsWi0z''@;'; put 'put ''MSkpPj4+MCl8fCgrK1osWT0oRC89Mik+Pj4wKSxELT1ZLFl8PTIxNDc0ODM2NDgsWT4+Pj0wLEQqPU1hdGgucG93KDIsMzIpLGoud3JpdGVfc2hpZnQoNCxEPj4+MCksai53cml0ZV9zaGlmdCg0LFkpLGoud3JpdGVfc2hpZnQoMixaKz0xNjM4Mysoc2U/MzI3Njg6MCkpLGp9ZnVuY3Rpb24g''@;'; put 'put ''ZWUoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gT1sxXS52PUQsT31mdW5jdGlvbiByZShDLFUpe3JldHVybiAwPT1DW0MubCtVLTFdP0MucmVhZF9zaGlmdChVLCJjc3RyIik6IiJ9ZnVuY3Rpb24gY2UoQyxVKXt2YXIgTz1HKDUrQy5sZW5ndGgpO08ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwxNGUzKSxPLndyaXRlX3NoaWZ0KDIsVSk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDsrK0Qpe3ZhciBqPUMuY2hhckNvZGVBdChEKTtPW08ubCsrXT1qPjEyNz85NTpqfXJldHVybiBPW08ubCsrXT0wLE99dmFyIHhlPXswOntuOiJCT0YiLGY6dHJ9LDE6e246IkVPRiJ9LDI6''@;'; put 'put ''e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gZihDLFUsTyl7dmFyIEQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gOD09VSYmTy5xcHJvPyhELnMuYz1DLnJlYWRfc2hpZnQo''@;'; put 'put ''MSksQy5sKyssRC5zLnI9Qy5yZWFkX3NoaWZ0KDIpLEQuZS5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxELmUucj1DLnJlYWRfc2hpZnQoMiksRCk6KEQucy5jPUMucmVhZF9zaGlmdCgyKSxELnMucj1DLnJlYWRfc2hpZnQoMiksMTI9PVUmJk8ucXBybyYmKEMubCs9MiksRC5lLmM9Qy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLEQuZS5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSw2NTUzNT09RC5zLmMmJihELnMuYz1ELmUuYz1ELnMucj1ELmUucj0wKSxEKX19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDEx''@;'; put 'put ''OntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24geChDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERbMV0udj1DLnJlYWRfc2hpZnQoMiwiaSIpLER9fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHYoQyxVLE8pe3ZhciBEPW8oQywwLE8p''@;'; put 'put ''O3JldHVybiBEWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxEfX0sMTU6e246IkxBQkVMIixmOmx9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIHAoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS52PUMucmVhZF9zaGlmdCg4LCJmIiksTy5xcHJvKUMubD1EO2Vsc2V7''@;'; put 'put ''dmFyIHNlPUMucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gTihDLFUpe2hyKEMsMCk7Zm9yKHZhciBPPVtdLEQ9MCxqPSIiLHNlPSIiLFo9IiIsUT0iIjtDLmw8Qy5sZW5ndGg7KXt2YXIgWT1DW0MubCsrXTtzd2l0Y2goWSl7Y2FzZSAwOk8ucHVzaChDLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh''@;'; put 'put ''aztjYXNlIDE6c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKHNlK2opO2JyZWFrO2Nhc2UgMjp2YXIgRWU9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxBPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSk7''@;'; put 'put ''c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKEVlK0ErIjoiK3NlK2opO2JyZWFrO2Nhc2UgMzppZihDLmw8Qy5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVu''@;'; put 'put ''ZCIpO2JyZWFrO2Nhc2UgNDpPLnB1c2goIigiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDU6Ty5wdXNoKEMucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUGU9IiI7WT1DW0MubCsrXTspUGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk7Ty5wdXNoKCciJytQZS5yZXBsYWNl''@;'; put 'put ''KC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6Ty5wdXNoKCItIitPLnBvcCgpKTticmVhaztjYXNlIDIzOk8ucHVzaCgiKyIrTy5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpPLnB1c2goIk5PVCgiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6UT1PLnBvcCgpLFo9Ty5wb3Ao''@;'; put 'put ''KSxPLnB1c2goWyJBTkQiLCJPUiJdW1ktMjBdKyIoIitaKyIsIitRKyIpIik7YnJlYWs7ZGVmYXVsdDppZihZPDMyJiZnW1ldKVE9Ty5wb3AoKSxaPU8ucG9wKCksTy5wdXNoKForZ1tZXStRKTtlbHNle2lmKCFUW1ldKXJldHVybiBZPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9w''@;'; put 'put ''Y29kZSAiK1kudG9TdHJpbmcoMTYpKTpZPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitZLnRvU3RyaW5nKDE2KSk6WTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpOlk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEg''@;'; put 'put ''dW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrWS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpO2lmKDY5PT0oRD1UW1ldWzFdKSYmKEQ9Q1tDLmwrK10pLEQ+Ty5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29s''@;'; put 'put ''ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitZLnRvU3RyaW5nKDE2KSsiOnwiK08uam9pbigifCIpKyJ8Iik7dmFyIEFlPU8uc2xpY2UoLUQpO08ubGVuZ3RoLT1ELE8ucHVzaChUW1ldWzBdKyIoIitBZS5qb2luKCIsIikrIikiKX19fTE9PU8ubGVuZ3RoP1VbMV0uZj0iIitP''@;'; put 'put ''WzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8IitPLmpvaW4oInwiKSsifCIpfSkoQy5zbGljZShDLmwsQy5sK3NlKSxqKSxDLmwrPXNlfXJldHVybiBqfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdF''@;'; put 'put ''In0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQi''@;'; put 'put ''fSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpsfSw1NTp7''@;'; put 'put ''bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0s''@;'; put 'put ''Njg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9''@;'; put 'put ''LDEwNTp7bjoiTVJBTkdFUz8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0sMjIyOntuOiJTSEVFVE5BTUVMUCIsZjpmdW5jdGlvbiBkZShDLFUpe3ZhciBPPUNbQy5sKytdO08+VS0xJiYoTz1VLTEpO2Zvcih2YXIgRD0iIjtELmxlbmd0aDxPOylEKz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KENbQy5sKytdKTtyZXR1cm4gRH19LDY1NTM1OntuOiIifX0sSz17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xV''@;'; put 'put ''TU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlO''@;'; put 'put ''In0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIEkoQyxVKXt2YXIgTz1NKEMpO3JldHVybiBPWzFd''@;'; put 'put ''LnQ9InMiLE9bMV0udj1DLnJlYWRfc2hpZnQoVS00LCJjc3RyIiksT319LDIzOntuOiJOVU1CRVIxNyIsZjpSfSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gUChDLFUpe3ZhciBPPU0oQyk7T1sxXS52PUMucmVhZF9zaGlmdCgyKTt2YXIgRD1PWzFdLnY+PjE7aWYoMSZPWzFdLnYpc3dp''@;'; put 'put ''dGNoKDcmRCl7Y2FzZSAwOkQ9NWUzKihEPj4zKTticmVhaztjYXNlIDE6RD01MDAqKEQ+PjMpO2JyZWFrO2Nhc2UgMjpEPShEPj4zKS8yMDticmVhaztjYXNlIDM6RD0oRD4+MykvMjAwO2JyZWFrO2Nhc2UgNDpEPShEPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkQ9KEQ+PjMpLzJlNDticmVhaztj''@;'; put 'put ''YXNlIDY6RD0oRD4+MykvMTY7YnJlYWs7Y2FzZSA3OkQ9KEQ+PjMpLzY0fXJldHVybiBPWzFdLnY9RCxPfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBYKEMsVSl7dmFyIE89UihDKTtyZXR1cm4gQy5sKz1VLTE0LE99fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi''@;'; put 'put ''LGY6ZnVuY3Rpb24gRmUoQyxVKXtmb3IodmFyIE89e30sRD1DLmwrVTtDLmw8RDspe3ZhciBqPUMucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qKXtmb3IoT1tqXT1bMCwiIl0sT1tqXVswXT1DLnJlYWRfc2hpZnQoMik7Q1tDLmxdOylPW2pdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbQy5s''@;'; put 'put ''XSksQy5sKys7Qy5sKyt9fXJldHVybiBPfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/''@;'; put 'put ''In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIGIoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPWzFdLnY9RD4+NixPfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOmVlfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIGxlKEMsVSl7dmFy''@;'; put 'put ''IE89ZWUoQyk7cmV0dXJuIEMubCs9VS0xMCxPfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7''@;'; put 'put ''bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0s''@;'; put 'put ''MjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/''@;'; put 'put ''PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7''@;'; put 'put ''bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2''@;'; put 'put ''NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNTM3OntuOiJTSEVFVElORk9RUCIsZjpmdW5jdGlvbiB1ZShDLFUsTyl7aWYoTy5xcHJvJiYhKFU8MjEpKXt2YXIgRD1DLnJlYWRfc2hpZnQoMSk7cmV0''@;'; put 'put ''dXJuIEMubCs9MTcsQy5sKz0xLEMubCs9MixbRCxDLnJlYWRfc2hpZnQoVS0yMSwiY3N0ciIpXX19fSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246''@;'; put 'put ''Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIGEoQyxVKXt2YXIgTz1V''@;'; put 'put ''fHx7fTtpZigrTy5jb2RlcGFnZT49MCYmTXIoK08uY29kZXBhZ2UpLCJzdHJpbmciPT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBEPVNyKCksaj1EZShDWyIhcmVmIl0pLHNlPUFycmF5LmlzQXJyYXkoQyksWj1bXTthZShELDAs''@;'; put 'put ''ZnVuY3Rpb24gaShDKXt2YXIgVT1HKDIpO3JldHVybiBVLndyaXRlX3NoaWZ0KDIsQyksVX0oMTAzMCkpLGFlKEQsNixmdW5jdGlvbiBjKEMpe3ZhciBVPUcoOCk7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDLnMuYyksVS53cml0ZV9zaGlmdCgyLEMucy5yKSxVLndyaXRlX3NoaWZ0KDIsQy5l''@;'; put 'put ''LmMpLFUud3JpdGVfc2hpZnQoMixDLmUuciksVX0oaikpO2Zvcih2YXIgUT1NYXRoLm1pbihqLmUuciw4MTkxKSxZPWoucy5yO1k8PVE7KytZKWZvcih2YXIgRWU9S2UoWSksQT1qLnMuYztBPD1qLmUuYzsrK0Epe1k9PT1qLnMuciYmKFpbQV09SGUoQSkpO3ZhciBBZT1zZT8oQ1tZXXx8W10p''@;'; put 'put ''W0FdOkNbWltBXStFZV07QWUmJiJ6IiE9QWUudCYmKCJuIj09QWUudD8oMHxBZS52KT09QWUudiYmQWUudj49LTMyNzY4JiZBZS52PD0zMjc2Nz9hZShELDEzLGQoWSxBLEFlLnYpKTphZShELDE0LHUoWSxBLEFlLnYpKTphZShELDE1LGgoWSxBLGF0KEFlKS5zbGljZSgwLDIzOSkpKSl9cmV0''@;'; put 'put ''dXJuIGFlKEQsMSksRC5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gbihDLFUpe3ZhciBPPVV8fHt9O2lmKCtPLmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFy''@;'; put 'put ''IEQ9U3IoKTthZShELDAsZnVuY3Rpb24gcyhDKXt2YXIgVT1HKDI2KTtVLndyaXRlX3NoaWZ0KDIsNDA5NiksVS53cml0ZV9zaGlmdCgyLDQpLFUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIE89MCxEPTAsaj0wLHNlPTA7c2U8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK3NlKXt2YXIgUT1DLlNo''@;'; put 'put ''ZWV0c1tDLlNoZWV0TmFtZXNbc2VdXTtpZihRJiZRWyIhcmVmIl0peysrajt2YXIgWT1QcihRWyIhcmVmIl0pO088WS5lLnImJihPPVkuZS5yKSxEPFkuZS5jJiYoRD1ZLmUuYyl9fXJldHVybiBPPjgxOTEmJihPPTgxOTEpLFUud3JpdGVfc2hpZnQoMixPKSxVLndyaXRlX3NoaWZ0KDEsaiks''@;'; put 'put ''VS53cml0ZV9zaGlmdCgxLEQpLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDIsMCksVS53cml0ZV9zaGlmdCgxLDEpLFUud3JpdGVfc2hpZnQoMSwyKSxVLndyaXRlX3NoaWZ0KDQsMCksVS53cml0ZV9zaGlmdCg0LDApLFV9KEMpKTtmb3IodmFyIGo9MCxzZT0wO2o8Qy5TaGVl''@;'; put 'put ''dE5hbWVzLmxlbmd0aDsrK2opKEMuU2hlZXRzW0MuU2hlZXROYW1lc1tqXV18fHt9KVsiIXJlZiJdJiZhZShELDI3LGNlKEMuU2hlZXROYW1lc1tqXSxzZSsrKSk7dmFyIFo9MDtmb3Ioaj0wO2o8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK2ope3ZhciBRPUMuU2hlZXRzW0MuU2hlZXROYW1lc1tq''@;'; put 'put ''XV07aWYoUSYmUVsiIXJlZiJdKXtmb3IodmFyIFk9RGUoUVsiIXJlZiJdKSxFZT1BcnJheS5pc0FycmF5KFEpLEE9W10sUGU9TWF0aC5taW4oWS5lLnIsODE5MSksQWU9WS5zLnI7QWU8PVBlOysrQWUpZm9yKHZhciBMZT1LZShBZSksQ2U9WS5zLmM7Q2U8PVkuZS5jOysrQ2Upe0FlPT09WS5z''@;'; put 'put ''LnImJihBW0NlXT1IZShDZSkpO3ZhciBxZT1FZT8oUVtBZV18fFtdKVtDZV06UVtBW0NlXStMZV07cWUmJiJ6IiE9cWUudCYmKCJuIj09cWUudD9hZShELDIzLFYoQWUsQ2UsWixxZS52KSk6YWUoRCwyMix5KEFlLENlLFosYXQocWUpLnNsaWNlKDAsMjM5KSkpKX0rK1p9fXJldHVybiBhZShE''@;'; put 'put ''LDEpLEQuZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIHQoQyxVKXtzd2l0Y2goVS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHIoSXIoT3IoQykpLFUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcihJcihDKSxVKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIHIoQyxVKX10aHJv''@;'; put 'put ''dyJVbnN1cHBvcnRlZCB0eXBlICIrVS50eXBlfX19KCksd2g9ZnVuY3Rpb24oKXt2YXIgZT1GYSgidCIpLHQ9RmEoInJQciIpO2Z1bmN0aW9uIHIoaSl7dmFyIHM9aS5tYXRjaChlKTtpZighcylyZXR1cm57dDoicyIsdjoiIn07dmFyIGY9e3Q6InMiLHY6SWUoc1sxXSl9LGM9aS5tYXRjaCh0''@;'; put 'put ''KTtyZXR1cm4gYyYmKGYucz1mdW5jdGlvbiBfaChlKXt2YXIgdD17fSxyPWUubWF0Y2godnIpLGE9MCxuPSExO2lmKHIpZm9yKDthIT1yLmxlbmd0aDsrK2Epe3ZhciBpPW1lKHJbYV0pO3N3aXRjaChpWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRl''@;'; put 'put ''bmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+Ijp0LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWkudmFsKWJyZWFrO3QuY3A9TDBbcGFyc2VJbnQoaS52''@;'; put 'put ''YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighaS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6dC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6dC5uYW1lPWkudmFsO2JyZWFrO2Nhc2UiPHN6Ijp0LnN6''@;'; put 'put ''PWkudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+Ijp0LnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighaS52YWwpYnJlYWs7c3dpdGNoKGkudmFsKXtjYXNlImRvdWJsZSI6''@;'; put 'put ''dC51dmFsPSJkb3VibGUiO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6dC51dmFsPSJzaW5nbGUtYWNjb3VudGluZyI7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjp0LnV2YWw9ImRvdWJsZS1hY2NvdW50aW5nIn1jYXNlIjx1PiI6Y2FzZSI8dS8+Ijp0LnU9MTticmVhaztjYXNl''@;'; put 'put ''IjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6dC5iPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWkudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOnQuaT0xO2JyZWFrO2Nhc2UiPC9pPiI6''@;'; put 'put ''YnJlYWs7Y2FzZSI8Y29sb3IiOmkucmdiJiYodC5jb2xvcj1pLnJnYi5zbGljZSgyLDgpKTticmVhaztjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dC5mYW1pbHk9aS52YWw7YnJlYWs7Y2FzZSI8ZmFtaWx5PiI6Y2FzZSI8''@;'; put 'put ''ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOnQudmFsaWduPWkudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbj4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8c2NoZW1lIjpjYXNlIjxzY2hlbWU+IjpjYXNlIjxzY2hl''@;'; put 'put ''bWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09aVswXS5jaGFyQ29kZUF0KDEpJiYhbil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2lbMF0pfX1yZXR1cm4gdH0oY1sxXSkpLGZ9dmFyIGE9LzwoPzpcdys6KT9yPi9nLG49LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShhLCIiKS5zcGxpdChuKS5tYXAocikuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZ9KX19KCksa2g9ZnVuY3Rpb24oKXt2YXIgdD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gYShuKXt2YXIgaT1bW10sbi52LFtdXTtyZXR1cm4gbi52PyhuLnMmJmZ1bmN0aW9uIHIobixpLHMpe3ZhciBmPVtdO24udSYmZi5wdXNoKCJ0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246IHVuZGVybGluZTsiKSxuLnV2YWwmJmYucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IituLnV2YWwrIjsiKSxuLnN6JiZmLnB1c2goImZvbnQtc2l6ZToiK24uc3orInB0OyIpLG4ub3V0bGluZSYmZi5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxuLnNoYWRvdyYmZi5w''@;'; put 'put ''dXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxpLnB1c2goJzxzcGFuIHN0eWxlPSInK2Yuam9pbigiIikrJyI+Jyksbi5iJiYoaS5wdXNoKCI8Yj4iKSxzLnB1c2goIjwvYj4iKSksbi5pJiYoaS5wdXNoKCI8aT4iKSxzLnB1c2goIjwvaT4iKSksbi5zdHJpa2UmJihpLnB1c2goIjxzPiIpLHMu''@;'; put 'put ''cHVzaCgiPC9zPiIpKTt2YXIgYz1uLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09Y3x8InN1cGVyIj09Yz9jPSJzdXAiOiJzdWJzY3JpcHQiPT1jJiYoYz0ic3ViIiksIiIhPWMmJihpLnB1c2goIjwiK2MrIj4iKSxzLnB1c2goIjwvIitjKyI+IikpLHMucHVzaCgiPC9zcGFuPiIpfShuLnMs''@;'; put 'put ''aVswXSxpWzJdKSxpWzBdLmpvaW4oIiIpK2lbMV0ucmVwbGFjZSh0LCI8YnIvPiIpK2lbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXAoYSkuam9pbigiIil9fSgpLEVoPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRoPS88''@;'; put 'put ''KD86XHcrOik/cj4vLFNoPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gU24oZSx0KXt2YXIgcj0hdHx8dC5jZWxsSFRNTCxhPXt9O3JldHVybiBlPyhlLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oYS50PUllKEJlKGUuc2xp''@;'; put 'put ''Y2UoZS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksYS5yPUJlKGUpLHImJihhLmg9JDAoYS50KSkpOmUubWF0Y2goVGgpJiYoYS5yPUJlKGUpLGEudD1JZShCZSgoZS5yZXBsYWNlKFNoLCIiKS5tYXRjaChFaCl8fFtdKS5qb2luKCIiKS5yZXBsYWNl''@;'; put 'put ''KHZyLCIiKSkpLHImJihhLmg9a2god2goYS5yKSkpKSxhKTp7dDoiIn19dmFyIEZoPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx5aD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEFoPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO2Z1''@;'; put 'put ''bmN0aW9uIG5mKGUpe2lmKHR5cGVvZiBPZTwidSIpcmV0dXJuIE9lLnV0aWxzLmVuY29kZShSdCxlKTtmb3IodmFyIHQ9W10scj1lLnNwbGl0KCIiKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFthXT1yW2FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHR9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgcj17fTty''@;'; put 'put ''ZXR1cm4gci5NYWpvcj1lLnJlYWRfc2hpZnQoMiksci5NaW5vcj1lLnJlYWRfc2hpZnQoMiksdD49NCYmKGUubCs9dC00KSxyfWZ1bmN0aW9uIExoKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLmwrdC00LGE9e30sbj1lLnJlYWRfc2hpZnQoNCksaT1bXTtuLS0gPjA7KWkucHVz''@;'; put 'put ''aCh7dDplLnJlYWRfc2hpZnQoNCksdjplLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoYS5uYW1lPWUucmVhZF9zaGlmdCgwLCJscHA0IiksYS5jb21wcz1pLGUubCE9cil0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitlLmwrIiAhPSAiK3IpO3JldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIHNmKGUsdCl7dmFyIHI9ZS5sK3QsYT17fTthLkZsYWdzPTYzJmUucmVhZF9zaGlmdCg0KSxlLmwrPTQsYS5BbGdJRD1lLnJlYWRfc2hpZnQoNCk7dmFyIG49ITE7c3dpdGNoKGEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om49MzY9PWEuRmxhZ3M7YnJl''@;'; put 'put ''YWs7Y2FzZSAyNjYyNTpuPTQ9PWEuRmxhZ3M7YnJlYWs7Y2FzZSAwOm49MTY9PWEuRmxhZ3N8fDQ9PWEuRmxhZ3N8fDM2PT1hLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK2EuQWxnSUR9aWYoIW4pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIGEuQWxnSURIYXNoPWUucmVhZF9zaGlmdCg0KSxhLktleVNpemU9ZS5yZWFkX3NoaWZ0KDQpLGEuUHJvdmlkZXJUeXBlPWUucmVhZF9zaGlmdCg0KSxlLmwrPTgsYS5DU1BOYW1lPWUucmVhZF9zaGlmdChyLWUubD4+''@;'; put 'put ''MSwidXRmMTZsZSIpLGUubD1yLGF9ZnVuY3Rpb24gZmYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3JldHVybiBlLmwrPTQsci5TYWx0PWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixyLlZlcmlmaWVyPWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixlLnJlYWRfc2hpZnQoNCksci5WZXJp''@;'; put 'put ''Zmllckhhc2g9ZS5zbGljZShlLmwsYSksZS5sPWEscn1mdW5jdGlvbiBWaChlKXtpZigzNiE9KDYzJmUucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciByPWUucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnNmKGUsciks''@;'; put 'put ''djpmZihlLGUubGVuZ3RoLWUubCl9fWZ1bmN0aW9uIFhoKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIEdoKGUpe3ZhciB0PVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNp''@;'; put 'put ''emUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtlLmwrPTQ7dmFyIHI9ZS5yZWFkX3NoaWZ0KGUubGVuZ3RoLWUubCwidXRmOCIpLGE9e307cmV0dXJuIHIucmVwbGFjZSh2cixmdW5jdGlvbihpKXt2YXIgcz1tZShpKTtz''@;'; put 'put ''d2l0Y2gocnQoc1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6dC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2FbZl09c1tmXX0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmEuZW5jcnlwdGVkSG1hY0tleT1zLmVuY3J5cHRlZEhtYWNLZXksYS5lbmNyeXB0ZWRIbWFjVmFsdWU9cy5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOmEuZW5jcz1b''@;'; put 'put ''XTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOmEudXJpPXMudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6YS5lbmNzLnB1c2gocyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzWzBdfX0pLGF9dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGU9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwx''@;'; put 'put ''MjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sdD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10scj1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUs''@;'; put 'put ''NjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcw''@;'; put 'put ''LDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0''@;'; put 'put ''OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIw''@;'; put 'put ''LDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sbj1mdW5jdGlvbihzLGYpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gMjU1JihzLzJ8MTI4KnMpfShzXmYpfTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHZhciBmPW5mKHMpLGM9ZnVu''@;'; put 'put ''Y3Rpb24ocyl7Zm9yKHZhciBmPXRbcy5sZW5ndGgtMV0sYz0xMDQsbz1zLmxlbmd0aC0xO28+PTA7LS1vKWZvcih2YXIgbD1zW29dLGg9MDs3IT1oOysraCk2NCZsJiYoZl49cltjXSksbCo9MiwtLWM7cmV0dXJuIGZ9KGYpLG89Zi5sZW5ndGgsbD1fdCgxNiksaD0wOzE2IT1oOysraClsW2hd''@;'; put 'put ''PTA7dmFyIHY7Zm9yKCEoMSZ+bykmJihsW29dPW4oZVswXSxjPj44KSxsWy0tb109bihmW2YubGVuZ3RoLTFdLDI1NSZjKSk7bz4wOylsWy0tb109bihmW29dLGM+PjgpLGxbLS1vXT1uKGZbb10sMjU1JmMpO2ZvcihvPTE1LHY9MTUtZi5sZW5ndGg7dj4wOylsW29dPW4oZVt2XSxjPj44KSwt''@;'; put 'put ''LXYsbFstLW9dPW4oZltvXSwyNTUmYyksLS1vLC0tdjtyZXR1cm4gbH19KCk7dmFyIG9mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShuLGkpe3N3aXRjaChpLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdChPcihuKSxpKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQobixpKTtjYXNlImJ1ZmZlciI6''@;'; put 'put ''cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihuKT9uLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChuKSxpKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChuKSxpKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraS50eXBlKX1mdW5jdGlvbiB0KG4saSl7dmFyIGY9KGl8fHt9''@;'; put 'put ''KS5kZW5zZT9bXTp7fSxjPW4ubWF0Y2goL1xcdHJvd2QuKj9cXHJvd1xiL2cpO2lmKCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7dmFyIG89e3M6e2M6MCxyOjB9LGU6e2M6MCxyOmMubGVuZ3RoLTF9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGws''@;'; put 'put ''aCl7QXJyYXkuaXNBcnJheShmKSYmKGZbaF09W10pO2Zvcih2YXIgdix4PS9cXFx3K1xiL2csZD0wLHU9LTE7dj14LmV4ZWMobCk7KXtpZigiXFxjZWxsIj09PXZbMF0pe3ZhciBwPWwuc2xpY2UoZCx4Lmxhc3RJbmRleC12WzBdLmxlbmd0aCk7aWYoIiAiPT1wWzBdJiYocD1wLnNsaWNlKDEp''@;'; put 'put ''KSwrK3UscC5sZW5ndGgpe3ZhciBrPXt2OnAsdDoicyJ9O0FycmF5LmlzQXJyYXkoZik/ZltoXVt1XT1rOmZbZ2Uoe3I6aCxjOnV9KV09a319ZD14Lmxhc3RJbmRleH11Pm8uZS5jJiYoby5lLmM9dSl9KSxmWyIhcmVmIl09d2UobyksZn1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcihu''@;'; put 'put ''LGkpe3JldHVybiBGdChlKG4saSksaSl9LHRvX3NoZWV0OmUsZnJvbV9zaGVldDpmdW5jdGlvbiBhKG4pe2Zvcih2YXIgZixpPVsie1xccnRmMVxcYW5zaSJdLHM9RGUoblsiIXJlZiJdKSxjPUFycmF5LmlzQXJyYXkobiksbz1zLnMucjtvPD1zLmUucjsrK28pe2kucHVzaCgiXFx0cm93ZFxc''@;'; put 'put ''dHJhdXRvZml0MSIpO2Zvcih2YXIgbD1zLnMuYztsPD1zLmUuYzsrK2wpaS5wdXNoKCJcXGNlbGx4IisobCsxKSk7Zm9yKGkucHVzaCgiXFxwYXJkXFxpbnRibCIpLGw9cy5zLmM7bDw9cy5lLmM7KytsKXt2YXIgaD1nZSh7cjpvLGM6bH0pOyhmPWM/KG5bb118fFtdKVtsXTpuW2hdKSYmKG51''@;'; put 'put ''bGwhPWYudnx8Zi5mJiYhZi5GKSYmKGkucHVzaCgiICIrKGYud3x8KGF0KGYpLGYudykpKSxpLnB1c2goIlxcY2VsbCIpKX1pLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBpLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGJhKGUpe2Zvcih2YXIgdD0wLHI9MTszIT10Oysr''@;'; put 'put ''dClyPTI1NipyKyhlW3RdPjI1NT8yNTU6ZVt0XTwwPzA6ZVt0XSk7cmV0dXJuIHIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVDAoZSx0KXtpZigwPT09dClyZXR1cm4gZTt2YXIgcj1mdW5jdGlvbiBRaChlKXt2YXIgdD1lWzBdLzI1NSxyPWVbMV0vMjU1''@;'; put 'put ''LGE9ZVsyXS8yNTUsbj1NYXRoLm1heCh0LHIsYSksaT1NYXRoLm1pbih0LHIsYSkscz1uLWk7aWYoMD09PXMpcmV0dXJuWzAsMCx0XTt2YXIgYyxmPTAsbz1uK2k7c3dpdGNoKGM9cy8obz4xPzItbzpvKSxuKXtjYXNlIHQ6Zj0oKHItYSkvcys2KSU2O2JyZWFrO2Nhc2UgcjpmPShhLXQpL3Mr''@;'; put 'put ''MjticmVhaztjYXNlIGE6Zj0odC1yKS9zKzR9cmV0dXJuW2YvNixjLG8vMl19KGZ1bmN0aW9uIFpoKGUpe3ZhciB0PWUuc2xpY2UoIiMiPT09ZVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KHQuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQodC5zbGljZSgyLDQpLDE2KSxwYXJz''@;'; put 'put ''ZUludCh0LnNsaWNlKDQsNiksMTYpXX0oZSkpO3JldHVybiByWzJdPXQ8MD9yWzJdKigxK3QpOjEtKDEtclsyXSkqKDEtdCksYmEoZnVuY3Rpb24gZTEoZSl7dmFyIGMscj1lWzFdLGE9ZVsyXSxuPTIqciooYTwuNT9hOjEtYSksaT1hLW4vMixzPVtpLGksaV0sZj02KmVbMF07aWYoMCE9PXIp''@;'; put 'put ''c3dpdGNoKDB8Zil7Y2FzZSAwOmNhc2UgNjpjPW4qZixzWzBdKz1uLHNbMV0rPWM7YnJlYWs7Y2FzZSAxOnNbMF0rPWM9biooMi1mKSxzWzFdKz1uO2JyZWFrO2Nhc2UgMjpjPW4qKGYtMiksc1sxXSs9bixzWzJdKz1jO2JyZWFrO2Nhc2UgMzpzWzFdKz1jPW4qKDQtZiksc1syXSs9bjticmVh''@;'; put 'put ''aztjYXNlIDQ6Yz1uKihmLTQpLHNbMl0rPW4sc1swXSs9YzticmVhaztjYXNlIDU6c1syXSs9Yz1uKig2LWYpLHNbMF0rPW59Zm9yKHZhciBvPTA7MyE9bzsrK28pc1tvXT1NYXRoLnJvdW5kKDI1NSpzW29dKTtyZXR1cm4gc30ocikpfXZhciBsZj02LHIxPTE1LHQxPTEsd3I9bGY7ZnVuY3Rp''@;'; put 'put ''b24gUGEoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUrTWF0aC5yb3VuZCgxMjgvd3IpLzI1Nikqd3IpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTUpL3dyKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIFMwKGUpe3JldHVybiBNYXRoLnJvdW5kKChlKndyKzUpL3dyKjI1NikvMjU2''@;'; put 'put ''fWZ1bmN0aW9uIHluKGUpe3JldHVybiBTMChMYShQYShlKSkpfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PU1hdGguYWJzKGUteW4oZSkpLHI9d3I7aWYodD4uMDA1KWZvcih3cj10MTt3cjxyMTsrK3dyKU1hdGguYWJzKGUteW4oZSkpPD10JiYodD1NYXRoLmFicyhlLXluKGUpKSxyPXdyKTt3cj1y''@;'; put 'put ''fWZ1bmN0aW9uIEt0KGUpe2Uud2lkdGg/KGUud3B4PVBhKGUud2lkdGgpLGUud2NoPUxhKGUud3B4KSxlLk1EVz13cik6ZS53cHg/KGUud2NoPUxhKGUud3B4KSxlLndpZHRoPVMwKGUud2NoKSxlLk1EVz13cik6Im51bWJlciI9PXR5cGVvZiBlLndjaCYmKGUud2lkdGg9UzAoZS53Y2gpLGUu''@;'; put 'put ''d3B4PVBhKGUud2lkdGgpLGUuTURXPXdyKSxlLmN1c3RvbVdpZHRoJiZkZWxldGUgZS5jdXN0b21XaWR0aH12YXIgdWY9OTY7ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIDk2KmUvdWZ9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGUqdWYvOTZ9dmFyIG4xPXtOb25lOiJub25lIixTb2xpZDoic29saWQi''@;'; put 'put ''LEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFn''@;'; put 'put ''Q3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRH''@;'; put 'put ''cmlkIn0sRjA9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLHkwPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0''@;'; put 'put ''b24iLCJxdW90ZVByZWZpeCJdLGgxPWZ1bmN0aW9uKCl7dmFyIHQ9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxyPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYT0vPCg/Olx3Kzop''@;'; put 'put ''P2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbj0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8saT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihmLGMsbyl7dmFyIGgsbD17fTtyZXR1cm4gZj8oKGg9KGY9Zi5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh0KSkmJmZ1bmN0aW9uIGMxKGUsdCxyKXt0Lk51bWJlckZtdD1bXTtm''@;'; put 'put ''b3IodmFyIGE9JGUocGUpLG49MDtuPGEubGVuZ3RoOysrbil0Lk51bWJlckZtdFthW25dXT1wZVthW25dXTt2YXIgaT1lWzBdLm1hdGNoKHZyKTtpZihpKWZvcihuPTA7bjxpLmxlbmd0aDsrK24pe3ZhciBzPW1lKGlbbl0pO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8''@;'; put 'put ''L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgZj1JZShCZShzLmZvcm1hdENvZGUpKSxjPXBhcnNlSW50KHMubnVtRm10SWQsMTApO2lmKHQuTnVtYmVyRm10W2NdPWYsYz4wKXtpZihjPjM5''@;'; put 'put ''Mil7Zm9yKGM9MzkyO2M+NjAmJm51bGwhPXQuTnVtYmVyRm10W2NdOy0tYyk7dC5OdW1iZXJGbXRbY109Zn1ldChmLGMpfWJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gbnVtRm10cyIpfX19KGgsbCxvKSwoaD1mLm1hdGNo''@;'; put 'put ''KG4pKSYmZnVuY3Rpb24gZjEoZSx0LHIsYSl7dC5Gb250cz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+Ijpj''@;'; put 'put ''YXNlIjxmb250IjpjYXNlIjxmb250PiI6Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmNhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpjYXNlIjxzY2hlbWUvPiI6Y2Fz''@;'; put 'put ''ZSI8L3NjaGVtZT4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+Ijp0LkZvbnRzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxuYW1lIjpmLnZh''@;'; put 'put ''bCYmKG4ubmFtZT1CZShmLnZhbCkpO2JyZWFrO2Nhc2UiPGIiOm4uYm9sZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOm4uYm9sZD0xO2JyZWFrO2Nhc2UiPGkiOm4uaXRhbGljPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6bi5pdGFsaWM9MTticmVhaztj''@;'; put 'put ''YXNlIjx1Ijpzd2l0Y2goZi52YWwpe2Nhc2Uibm9uZSI6bi51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6bi51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6bi51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTMzO2JyZWFrO2Nh''@;'; put 'put ''c2UiZG91YmxlQWNjb3VudGluZyI6bi51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpuLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPHN0cmlrZSI6bi5zdHJpa2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm4uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGlu''@;'; put 'put ''ZSI6bi5vdXRsaW5lPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6bi5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpuLnNoYWRvdz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6bi5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5z''@;'; put 'put ''ZSI6bi5jb25kZW5zZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpuLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpuLmV4dGVuZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6bi5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6''@;'; put 'put ''Zi52YWwmJihuLnN6PStmLnZhbCk7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjpmLnZhbCYmKG4udmVydEFsaWduPWYudmFsKTticmVhaztjYXNlIjxmYW1pbHkiOmYudmFsJiYobi5mYW1pbHk9cGFyc2VJbnQoZi52YWwsMTApKTticmVhaztjYXNlIjxzY2hlbWUiOmYudmFsJiYobi5zY2hlbWU9''@;'; put 'put ''Zi52YWwpO2JyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Zi52YWwpYnJlYWs7Zi5jb2RlcGFnZT1MMFtwYXJzZUludChmLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjppZihuLmNvbG9yfHwobi5jb2xvcj17fSksZi5hdXRvJiYobi5jb2xvci5hdXRvPVdlKGYuYXV0bykpLGYucmdi''@;'; put 'put ''KW4uY29sb3IucmdiPWYucmdiLnNsaWNlKC02KTtlbHNlIGlmKGYuaW5kZXhlZCl7bi5jb2xvci5pbmRleD1wYXJzZUludChmLmluZGV4ZWQsMTApO3ZhciBjPVZ0W24uY29sb3IuaW5kZXhdOzgxPT1uLmNvbG9yLmluZGV4JiYoYz1WdFsxXSksY3x8KGM9VnRbMV0pLG4uY29sb3IucmdiPWNb''@;'; put 'put ''MF0udG9TdHJpbmcoMTYpK2NbMV0udG9TdHJpbmcoMTYpK2NbMl0udG9TdHJpbmcoMTYpfWVsc2UgZi50aGVtZSYmKG4uY29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCksZi50aW50JiYobi5jb2xvci50aW50PXBhcnNlRmxvYXQoZi50aW50KSksZi50aGVtZSYmci50aGVtZUVsZW1l''@;'; put 'put ''bnRzJiZyLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobi5jb2xvci5yZ2I9VDAoci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtuLmNvbG9yLnRoZW1lXS5yZ2Isbi5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aT0hMDticmVhaztj''@;'; put 'put ''YXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjppPSExO2JyZWFrO2RlZmF1bHQ6aWYoYSYmYS5XVEYmJiFpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZlswXSsiIGluIGZvbnRzIil9fSl9KGgsbCxjLG8pLChoPWYubWF0Y2goYSkpJiZmdW5jdGlvbiBzMShl''@;'; put 'put ''LHQscixhKXt0LkZpbGxzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2gocnQoZlswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8''@;'; put 'put ''Z3JhZGllbnRGaWxsPiI6Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxzdG9wIjpjYXNlIjxzdG9wLz4iOmNhc2UiPC9zdG9wPiI6''@;'; put 'put ''Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnQuRmlsbHMucHVzaChuPXt9KTticmVhaztjYXNlIjxn''@;'; put 'put ''cmFkaWVudEZpbGwiOmNhc2UiPC9ncmFkaWVudEZpbGw+Ijp0LkZpbGxzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpmLnBhdHRlcm5UeXBlJiYobi5wYXR0ZXJuVHlwZT1mLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxiZ0NvbG9y''@;'; put 'put ''IjpuLmJnQ29sb3J8fChuLmJnQ29sb3I9e30pLGYuaW5kZXhlZCYmKG4uYmdDb2xvci5pbmRleGVkPXBhcnNlSW50KGYuaW5kZXhlZCwxMCkpLGYudGhlbWUmJihuLmJnQ29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCkpLGYudGludCYmKG4uYmdDb2xvci50aW50PXBhcnNlRmxvYXQo''@;'; put 'put ''Zi50aW50KSksZi5yZ2ImJihuLmJnQ29sb3IucmdiPWYucmdiLnNsaWNlKC02KSk7YnJlYWs7Y2FzZSI8ZmdDb2xvciI6bi5mZ0NvbG9yfHwobi5mZ0NvbG9yPXt9KSxmLnRoZW1lJiYobi5mZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmZnQ29sb3IudGlu''@;'; put 'put ''dD1wYXJzZUZsb2F0KGYudGludCkpLG51bGwhPWYucmdiJiYobi5mZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCAiK2ZbMF0rIiBpbiBmaWxscyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKGkpKSYmZnVuY3Rpb24gaTEoZSx0LHIsYSl7dC5Cb3JkZXJzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2go''@;'; put 'put ''cnQoZlswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPHJpZ2h0IjpjYXNlIjxyaWdo''@;'; put 'put ''dD4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2Fz''@;'; put 'put ''ZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8L2RpYWdvbmFsPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8L2hvcml6b250YWw+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNl''@;'; put 'put ''IjwvdmVydGljYWw+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2Fz''@;'; put 'put ''ZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6bj17fSxmLmRpYWdvbmFsVXAmJihuLmRpYWdvbmFsVXA9V2UoZi5kaWFnb25hbFVwKSksZi5kaWFn''@;'; put 'put ''b25hbERvd24mJihuLmRpYWdvbmFsRG93bj1XZShmLmRpYWdvbmFsRG93bikpLHQuQm9yZGVycy5wdXNoKG4pO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du''@;'; put 'put ''aXplZCAiK2ZbMF0rIiBpbiBib3JkZXJzIil9fSl9KGgsbCwwLG8pLChoPWYubWF0Y2gocikpJiZmdW5jdGlvbiBsMShlLHQscil7dC5DZWxsWGY9W107dmFyIGEsbj0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpLGY9MDtzd2l0Y2gocnQo''@;'; put 'put ''c1swXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPHByb3RlY3Rpb24iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNl''@;'; put 'put ''IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShhPXMpWzBdLGY9MDtmPEYwLmxlbmd0aDsrK2YpYVtGMFtmXV0mJihhW0YwW2ZdXT1wYXJzZUludChhW0YwW2ZdXSwxMCkpO2ZvcihmPTA7Zjx5MC5s''@;'; put 'put ''ZW5ndGg7KytmKWFbeTBbZl1dJiYoYVt5MFtmXV09V2UoYVt5MFtmXV0pKTtpZih0Lk51bWJlckZtdCYmYS5udW1GbXRJZD4zOTIpZm9yKGY9MzkyO2Y+NjA7LS1mKWlmKHQuTnVtYmVyRm10W2EubnVtRm10SWRdPT10Lk51bWJlckZtdFtmXSl7YS5udW1GbXRJZD1mO2JyZWFrfXQuQ2VsbFhm''@;'; put 'put ''LnB1c2goYSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGM9e307cy52ZXJ0aWNhbCYmKGMudmVydGljYWw9cy52ZXJ0aWNhbCkscy5ob3Jpem9udGFsJiYoYy5ob3Jpem9udGFsPXMuaG9yaXpvbnRhbCksbnVsbCE9cy50ZXh0Um90YXRpb24mJihjLnRl''@;'; put 'put ''eHRSb3RhdGlvbj1zLnRleHRSb3RhdGlvbikscy5pbmRlbnQmJihjLmluZGVudD1zLmluZGVudCkscy53cmFwVGV4dCYmKGMud3JhcFRleHQ9V2Uocy53cmFwVGV4dCkpLGEuYWxpZ25tZW50PWM7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURiYmIW4pdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShoLGwsbyksbCk6bH19KCksZzE9cHIsdzE9cHIsUDE9WyI8L2E6''@;'; put 'put ''bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rp''@;'; put 'put ''b24gTDEoZSx0LHIpe3QudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGE9e307KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtzd2l0Y2goaVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGE6c3JnYkNsciI6YS5yZ2I9aS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOmEucmdiPWkubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh''@;'; put 'put ''Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu''@;'; put 'put ''dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWlbMF0uY2hh''@;'; put 'put ''ckF0KDEpPyh0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AxLmluZGV4T2YoaVswXSldPWEsYT17fSk6YS5uYW1lPWlbMF0uc2xpY2UoMyxpWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKHImJnIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIraVswXSsiIGluIGNs''@;'; put 'put ''clNjaGVtZSIpfX0pfWZ1bmN0aW9uIEIxKCl7fWZ1bmN0aW9uIE0xKCl7fXZhciBVMT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxXMT0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLEgxPS88YTpmbXRTY2hlbWUoW14+''@;'; put 'put ''XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFgxPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gdmYoZSx0KXsoIWV8fDA9PT1lLmxlbmd0aCkmJihlPWZ1bmN0aW9uIERuKGUsdCl7aWYodCYmdC50aGVtZVhMU1gpcmV0dXJu''@;'; put 'put ''IHQudGhlbWVYTFNYO2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5yYXcpcmV0dXJuIGUucmF3O3ZhciByPVtlcl07cmV0dXJuIHJbci5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0i''@;'; put 'put ''T2ZmaWNlIFRoZW1lIj4nLHJbci5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIscltyLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPics''@;'; put 'put ''cltyLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxyW3IubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicscltyLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVF''@;'; put 'put ''Q0UxIi8+PC9hOmx0Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQz''@;'; put 'put ''PjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4n''@;'; put 'put ''LHJbci5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHJbci5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicscltyLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4''@;'; put 'put ''MDAwODAiLz48L2E6Zm9sSGxpbms+JyxyW3IubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHJbci5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI''@;'; put 'put ''YW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS''@;'; put 'put ''b21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0i''@;'; put 'put ''VnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBl''@;'; put 'put ''ZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0''@;'; put 'put ''eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9Ikdh''@;'; put 'put ''dXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlh''@;'; put 'put ''IiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxyW3IubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHJbci5sZW5ndGhd''@;'; put 'put ''PSI8YTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHJbci5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxyW3IubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0''@;'; put 'put ''eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5z''@;'; put 'put ''IiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyxy''@;'; put 'put ''W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+''@;'; put 'put ''JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicscltyLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3Nh''@;'; put 'put ''Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJE''@;'; put 'put ''b2tDaGFtcGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09''@;'; put 'put ''IjwvYTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciIvPjwvYTpzb2xpZEZpbGw+JyxyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6''@;'; put 'put ''Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3Ro''@;'; put 'put ''XT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6''@;'; put 'put ''c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw''@;'; put 'put ''aENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0i''@;'; put 'put ''MCIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRG''@;'; put 'put ''aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAi''@;'; put 'put ''IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBk''@;'; put 'put ''PSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0''@;'; put 'put ''PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAw''@;'; put 'put ''MDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZm''@;'; put 'put ''ZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk''@;'; put 'put ''dz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk''@;'; put 'put ''aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c2Nl''@;'; put 'put ''bmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRS''@;'; put 'put ''aWc+PC9hOnNjZW5lM2Q+JyxyW3IubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTpiZ0Zp''@;'; put 'put ''bGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVuZ3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6''@;'; put 'put ''Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp''@;'; put 'put ''bnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48''@;'; put 'put ''YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwv''@;'; put 'put ''YTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQg''@;'; put 'put ''dmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwv''@;'; put 'put ''YTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09IjwvYTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpn''@;'; put 'put ''cmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHJbci5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpzcERlZj4iLHJb''@;'; put 'put ''ci5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJl''@;'; put 'put ''Zj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHJbci5sZW5ndGhdPSI8L2E6c3BEZWY+IixyW3Iu''@;'; put 'put ''bGVuZ3RoXT0iPGE6bG5EZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFs''@;'; put 'put ''PSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVu''@;'; put 'put ''Z3RoXT0iPC9hOmxuRGVmPiIscltyLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixyW3IubGVuZ3RoXT0iPC9hOnRoZW1lPiIsci5qb2luKCIiKX0oKSk7dmFyIHIsYT17fTtpZighKHI9ZS5tYXRjaChYMSkpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gVjEoZSx0LHIpe3ZhciBhO3QudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFUxLEwxXSxbImZvbnRTY2hlbWUiLFcxLEIxXSxbImZtdFNjaGVtZSIsSDEsTTFdXS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKG4pe2lmKCEoYT1lLm1hdGNoKG5bMV0pKSl0aHJvdyBuZXcgRXJyb3IoblswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7blsyXShhLHQscil9KX0oclswXSxhLHQpLGEucmF3PWUsYX1mdW5jdGlvbiBZMShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMiktNCxhPVt0XTtzd2l0Y2godCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzphWzFdPWZ1bmN0aW9uICQxKGUpe3ZhciB0PXt9O3N3aXRjaCh0LnhjbHJUeXBlPWUucmVhZF9zaGlmdCgyKSx0Lm5UaW50U2hh''@;'; put 'put ''ZGU9ZS5yZWFkX3NoaWZ0KDIpLHQueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6ZS5sKz00O2JyZWFrO2Nhc2UgMTp0LnhjbHJWYWx1ZT1mdW5jdGlvbiBqMShlLHQpe3JldHVybiBwcihlLHQpfShlLDQpO2JyZWFrO2Nhc2UgMjp0LnhjbHJWYWx1ZT1NcyhlKTticmVhaztjYXNlIDM6dC54Y2xy''@;'; put 'put ''VmFsdWU9ZnVuY3Rpb24gejEoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCg0KX0oZSl9cmV0dXJuIGUubCs9OCx0fShlKTticmVhaztjYXNlIDY6YVsxXT1mdW5jdGlvbiBLMShlLHQpe3JldHVybiBwcihlLHQpfShlLHIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTphWzFdPWUucmVhZF9zaGlmdCgx''@;'; put 'put ''PT09cj8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3QrIiAiK3IpfXJldHVybiBhfWZ1bmN0aW9uIHExKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe30pfWZ1bmN0aW9uIGdmKGUsdCxyLGEpe3ZhciBpLG49QXJyYXku''@;'; put 'put ''aXNBcnJheShlKTt0LmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9R2Uocy5yZWYpO2lmKG4/KGVbZi5yXXx8KGVbZi5yXT1bXSksaT1lW2Yucl1bZi5jXSk6aT1lW3MucmVmXSwhaSl7aT17dDoieiJ9LG4/ZVtmLnJdW2YuY109aTplW3MucmVmXT1pO3ZhciBjPURlKGVbIiFyZWYiXXx8IkJE''@;'; put 'put ''V0dPMTAwMDAwMTpBMSIpO2Mucy5yPmYuciYmKGMucy5yPWYuciksYy5lLnI8Zi5yJiYoYy5lLnI9Zi5yKSxjLnMuYz5mLmMmJihjLnMuYz1mLmMpLGMuZS5jPGYuYyYmKGMuZS5jPWYuYyk7dmFyIG89d2UoYyk7byE9PWVbIiFyZWYiXSYmKGVbIiFyZWYiXT1vKX1pLmN8fChpLmM9W10pO3Zh''@;'; put 'put ''ciBsPXthOnMuYXV0aG9yLHQ6cy50LHI6cy5yLFQ6cn07cy5oJiYobC5oPXMuaCk7Zm9yKHZhciBoPWkuYy5sZW5ndGgtMTtoPj0wOy0taCl7aWYoIXImJmkuY1toXS5UKXJldHVybjtyJiYhaS5jW2hdLlQmJmkuYy5zcGxpY2UoaCwxKX1pZihyJiZhKWZvcihoPTA7aDxhLmxlbmd0aDsrK2gp''@;'; put 'put ''aWYobC5hPT1hW2hdLmlkKXtsLmE9YVtoXS5uYW1lfHxsLmE7YnJlYWt9aS5jLnB1c2gobCl9KX12YXIgd3g9bXIsU3g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsdWE9ZnVuY3Rpb24oKXt2YXIgZT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8''@;'; put 'put ''KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLHQ9e3I6MCxjOjB9O2Z1bmN0aW9uIHIoYSxuLGkscyl7dmFyIGY9ITEsYz0hMTswPT1pLmxlbmd0aD9jPSEwOiJbIj09aS5jaGFyQXQoMCkmJihjPSEwLGk9aS5zbGljZSgxLC0xKSksMD09cy5sZW5ndGg/Zj0hMDoi''@;'; put 'put ''WyI9PXMuY2hhckF0KDApJiYoZj0hMCxzPXMuc2xpY2UoMSwtMSkpO3ZhciBvPWkubGVuZ3RoPjA/MHxwYXJzZUludChpLDEwKTowLGw9cy5sZW5ndGg+MD8wfHBhcnNlSW50KHMsMTApOjA7cmV0dXJuIGY/bCs9dC5jOi0tbCxjP28rPXQucjotLW8sbisoZj8iIjoiJCIpK0hlKGwpKyhjPyIi''@;'; put 'put ''OiIkIikrS2Uobyl9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQ9aSxuLnJlcGxhY2UoZSxyKX19KCksT249LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7''@;'; put 'put ''M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5yZXBsYWNlKE9uLGZ1bmN0aW9uKGEsbixpLHMsZixjKXt2YXIgbz1ubihz''@;'; put 'put ''KS0oaT8wOnIuYyksbD1hbihjKS0oZj8wOnIucik7cmV0dXJuIG4rIlIiKygwPT1sPyIiOmY/bCsxOiJbIitsKyJdIikrIkMiKygwPT1vPyIiOmk/bysxOiJbIitvKyJdIil9KX19KCk7ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKE9uLGZ1bmN0aW9uKHIsYSxuLGkscyxmKXty''@;'; put 'put ''ZXR1cm4gYSsoIiQiPT1uP24raTpIZShubihpKSt0LmMpKSsoIiQiPT1zP3MrZjpLZShhbihmKSt0LnIpKX0pfWZ1bmN0aW9uIEl4KGUsdCxyKXt2YXIgbj1Qcih0KS5zLGk9R2Uocik7cmV0dXJuIGtmKGUse3I6aS5yLW4ucixjOmkuYy1uLmN9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5y''@;'; put 'put ''ZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGFyKGUpe2UubCs9MX1mdW5jdGlvbiBBdChlLHQpe3ZhciByPWUucmVhZF9zaGlmdCgxPT10PzE6Mik7cmV0dXJuWzE2MzgzJnIscj4+MTQmMSxyPj4xNSYxXX1mdW5jdGlvbiBUZihlLHQscil7dmFyIGE9MjtpZihyKXtpZihyLmJpZmY+''@;'; put 'put ''PTImJnIuYmlmZjw9NSlyZXR1cm4gU2YoZSk7MTI9PXIuYmlmZiYmKGE9NCl9dmFyIG49ZS5yZWFkX3NoaWZ0KGEpLGk9ZS5yZWFkX3NoaWZ0KGEpLHM9QXQoZSwyKSxmPUF0KGUsMik7cmV0dXJue3M6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX0sZTp7cjppLGM6ZlswXSxjUmVs''@;'; put 'put ''OmZbMV0sclJlbDpmWzJdfX19ZnVuY3Rpb24gU2YoZSl7dmFyIHQ9QXQoZSwyKSxyPUF0KGUsMiksYT1lLnJlYWRfc2hpZnQoMSksbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6dFswXSxjOmEsY1JlbDp0WzFdLHJSZWw6dFsyXX0sZTp7cjpyWzBdLGM6bixjUmVsOnJbMV0sclJlbDpy''@;'; put 'put ''WzJdfX19ZnVuY3Rpb24gRmYoZSx0LHIpe2lmKHImJnIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBieChlKXt2YXIgdD1BdChlLDIpLHI9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOnRbMF0sYzpyLGNSZWw6dFsxXSxyUmVsOnRbMl19fShlKTt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQociYmMTI9PXIuYmlmZj80OjIpLG49QXQoZSwyKTtyZXR1cm57cjphLGM6blswXSxjUmVsOm5bMV0sclJlbDpuWzJdfX1mdW5jdGlvbiBQeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6dCxjOjI1NSZyLGZRdW90ZWQ6ISEoMTYzODQmciks''@;'; put 'put ''Y1JlbDpyPj4xNSxyUmVsOnI+PjE1fX1mdW5jdGlvbiB5ZihlKXt2YXIgdD0xJmVbZS5sKzFdO3JldHVybiBlLmwrPTQsW3QsMV19ZnVuY3Rpb24gQWYoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIGxkKGUsdCl7dmFyIHI9W2UucmVhZF9zaGlm''@;'; put 'put ''dCgxKV07aWYoMTI9PXQpc3dpdGNoKHJbMF0pe2Nhc2UgMjpyWzBdPTQ7YnJlYWs7Y2FzZSA0OnJbMF09MTY7YnJlYWs7Y2FzZSAwOnJbMF09MTticmVhaztjYXNlIDE6clswXT0yfXN3aXRjaChyWzBdKXtjYXNlIDQ6clsxXT1KZShlLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT10JiYoZS5sKz03''@;'; put 'put ''KTticmVhaztjYXNlIDM3OmNhc2UgMTY6clsxXT14dFtlW2UubF1dLGUubCs9MTI9PXQ/NDo4O2JyZWFrO2Nhc2UgMDplLmwrPTg7YnJlYWs7Y2FzZSAxOnJbMV09Z3IoZSk7YnJlYWs7Y2FzZSAyOnJbMV09enQoZSwwLHtiaWZmOnQ+MCYmdDw4PzI6dH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrclswXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWQoZSx0LHIpe2Zvcih2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49W10saT0wO2khPWE7KytpKW4ucHVzaCgoMTI9PXIuYmlmZj9XdDprMCkoZSw4KSk7cmV0dXJuIG59ZnVuY3Rpb24g''@;'; put 'put ''aGQoZSx0LHIpe3ZhciBhPTAsbj0wOzEyPT1yLmJpZmY/KGE9ZS5yZWFkX3NoaWZ0KDQpLG49ZS5yZWFkX3NoaWZ0KDQpKToobj0xK2UucmVhZF9zaGlmdCgxKSxhPTErZS5yZWFkX3NoaWZ0KDIpKSxyLmJpZmY+PTImJnIuYmlmZjw4JiYoLS1hLDA9PS0tbiYmKG49MjU2KSk7Zm9yKHZhciBp''@;'; put 'put ''PTAscz1bXTtpIT1hJiYoc1tpXT1bXSk7KytpKWZvcih2YXIgZj0wO2YhPW47KytmKXNbaV1bZl09bGQoZSxyLmJpZmYpO3JldHVybiBzfWZ1bmN0aW9uIFVhKGUsdCxyKXtyZXR1cm4gZS5sKz0yLFtQeChlKV19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUubCs9NixbXX1mdW5jdGlvbiBDZihl''@;'; put 'put ''KXtyZXR1cm4gZS5sKz0yLFt0cihlKSwxJmUucmVhZF9zaGlmdCgyKV19dmFyIFJkPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIs''@;'; put 'put ''Ij9DdXJyZW50Il0sRGY9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBuZChlLHQscil7cmV0dXJuIGUubCsrLHImJjEyPT1yLmJpZmY/W2UucmVhZF9zaGlmdCg0LCJpIiksMF06W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJs''@;'; put 'put ''IixmOnByfSwzOntuOiJQdGdBZGQiLGY6YXJ9LDQ6e246IlB0Z1N1YiIsZjphcn0sNTp7bjoiUHRnTXVsIixmOmFyfSw2OntuOiJQdGdEaXYiLGY6YXJ9LDc6e246IlB0Z1Bvd2VyIixmOmFyfSw4OntuOiJQdGdDb25jYXQiLGY6YXJ9LDk6e246IlB0Z0x0IixmOmFyfSwxMDp7bjoiUHRnTGUi''@;'; put 'put ''LGY6YXJ9LDExOntuOiJQdGdFcSIsZjphcn0sMTI6e246IlB0Z0dlIixmOmFyfSwxMzp7bjoiUHRnR3QiLGY6YXJ9LDE0OntuOiJQdGdOZSIsZjphcn0sMTU6e246IlB0Z0lzZWN0IixmOmFyfSwxNjp7bjoiUHRnVW5pb24iLGY6YXJ9LDE3OntuOiJQdGdSYW5nZSIsZjphcn0sMTg6e246IlB0''@;'; put 'put ''Z1VwbHVzIixmOmFyfSwxOTp7bjoiUHRnVW1pbnVzIixmOmFyfSwyMDp7bjoiUHRnUGVyY2VudCIsZjphcn0sMjE6e246IlB0Z1BhcmVuIixmOmFyfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjphcn0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBvZChlLHQscil7cmV0dXJuIGUubCsrLFJhKGUs''@;'; put 'put ''MCxyKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBQZChlLHQscil7cmV0dXJuIGUubCs9NSxlLmwrPTIsZS5sKz0yPT1yLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBMZChlLHQscil7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzQ6''@;'; put 'put ''NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIGlkKGUpe3JldHVybiBlLmwrKyx4dFtlLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gZmQoZSl7cmV0dXJuIGUubCsrLDAhPT1lLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRn''@;'; put 'put ''SW50IixmOmZ1bmN0aW9uIHNkKGUpe3JldHVybiBlLmwrKyxlLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIGNkKGUpe3JldHVybiBlLmwrKyxncihlKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NTtyZXR1cm4gZS5sKz0yPT1yLmJpZmY/NjoxMj09ci5iaWZmPzE0OjcsW2FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gZWQoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQociYmci5iaWZmPD0zPzE6Mik7cmV0dXJuW2F2W25dLFJm''@;'; put 'put ''W25dLGFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcmQoZSx0LHIpe3ZhciBhPWVbZS5sKytdLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ciYmci5iaWZmPD0zP1s4OD09YT8tMTowLGUucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gdGQoZSl7cmV0dXJuW2VbZS5sKzFdPj43LDMyNzY3''@;'; put 'put ''JmUucmVhZF9zaGlmdCgyKV19KGUpO3JldHVybltuLCgwPT09aVswXT9SZjp0dilbaVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24geGQoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMyxpPWUucmVhZF9zaGlmdCghcnx8ci5iaWZmPj04PzQ6Mik7c3dpdGNoKHIu''@;'; put 'put ''YmlmZil7Y2FzZSAyOmUubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmUubCs9ODticmVhaztjYXNlIDU6ZS5sKz0xMn1yZXR1cm5bYSwwLGldfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBxeChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7cmV0dXJuIGUubCs9MSxbYSxGZihlLDAs''@;'; put 'put ''cildfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gTXgoZSx0LHIpe3JldHVyblsoOTYmZVtlLmwrK10pPj41LFRmKGUsMCxyKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBwZChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBlLmwrPXImJjI9''@;'; put 'put ''PXIuYmlmZj8zOjQsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6cHJ9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpwcn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbWQoZSx0LHIpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41''@;'; put 'put ''JjMsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gZ2QoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz00LHIuYmlmZjw4JiZlLmwtLSwxMj09ci5iaWZmJiYoZS5sKz0yKSxbYV19fSw0Mzp7''@;'; put 'put ''bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBXeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NTtyZXR1cm4gZS5sKz1yJiZyLmJpZmY+OD8xMjpyLmJpZmY8OD82OjgsW2FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gWngoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2Uu''@;'; put 'put ''bCs9MTt2YXIgbj1mdW5jdGlvbiBMeChlLHQscil7dmFyIGE9ciYmci5iaWZmP3IuYmlmZjo4O2lmKGE+PTImJmE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJ4KGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgxKSxhPSgzMjc2OCZ0KT4+MTUsbj0oMTYzODQmdCk+PjE0O3Jl''@;'; put 'put ''dHVybiB0Jj0xNjM4MywxPT1hJiZ0Pj04MTkyJiYodC09MTYzODQpLDE9PW4mJnI+PTEyOCYmKHItPTI1Nikse3I6dCxjOnIsY1JlbDpuLHJSZWw6YX19KGUpO3ZhciBuPWUucmVhZF9zaGlmdChhPj0xMj80OjIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9KDE2Mzg0JmkpPj4xNCxmPSgzMjc2OCZp''@;'; put 'put ''KT4+MTU7aWYoaSY9MTYzODMsMT09Zilmb3IoO24+NTI0Mjg3OyluLT0xMDQ4NTc2O2lmKDE9PXMpZm9yKDtpPjgxOTE7KWktPTE2Mzg0O3JldHVybntyOm4sYzppLGNSZWw6cyxyUmVsOmZ9fShlLDAscik7cmV0dXJuW2Esbl19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gVngoZSx0''@;'; put 'put ''LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1mdW5jdGlvbiBOeChlLHQscil7aWYoci5iaWZmPDgpcmV0dXJuIFNmKGUpO3ZhciBhPWUucmVhZF9zaGlmdCgxMj09ci5iaWZmPzQ6Miksbj1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLGk9QXQoZSwyKSxzPUF0KGUsMik7cmV0dXJu''@;'; put 'put ''e3M6e3I6YSxjOmlbMF0sY1JlbDppWzFdLHJSZWw6aVsyXX0sZTp7cjpuLGM6c1swXSxjUmVsOnNbMV0sclJlbDpzWzJdfX19KGUsMCxyKTtyZXR1cm5bYSxuXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBCZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVh''@;'; put 'put ''ZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIE1kKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBkZChlLHQscil7cmV0dXJuIDU9PXIuYmlmZj9mdW5jdGlvbiB2''@;'; put 'put ''ZChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk+Pj41JjMscj1lLnJlYWRfc2hpZnQoMiwiaSIpO2UubCs9ODt2YXIgYT1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubCs9MTIsW3QscixhXX0oZSk6W2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''XX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBReChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7ZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmNT09ci5iaWZmJiYoZS5sKz0xMiksW2EsbixGZihlLDAscildfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5j''@;'; put 'put ''dGlvbiBVeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NSxuPWUucmVhZF9zaGlmdCgyLCJpIik7aWYociYmNT09PXIuYmlmZillLmwrPTEyO3JldHVyblthLG4sVGYoZSwwLHIpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBfZChlLHQscil7dmFyIGE9KDk2JmVbZS5s''@;'; put 'put ''KytdKT4+NSxuPWUucmVhZF9zaGlmdCgyKSxpPTQ7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6aT0xNTticmVhaztjYXNlIDEyOmk9Nn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBIeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+''@;'; put 'put ''NSxuPWUucmVhZF9zaGlmdCgyKSxpPTg7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6ZS5sKz0xMixpPTY7YnJlYWs7Y2FzZSAxMjppPTEyfXJldHVybiBlLmwrPWksW2Esbl19fSwyNTU6e319LFdkPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2''@;'; put 'put ''ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6''@;'; put 'put ''MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX0sSGQ9ezE6e246IlB0Z0VsZkxlbCIsZjpDZn0sMjp7bjoiUHRnRWxmUnciLGY6VWF9LDM6e246IlB0Z0VsZkNvbCIsZjpVYX0sNjp7bjoiUHRnRWxmUndWIixmOlVhfSw3''@;'; put 'put ''OntuOiJQdGdFbGZDb2xWIixmOlVhfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpVYX0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOlJufSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpSbn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOlJufSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpDZn0sMjU6''@;'; put 'put ''e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTmQoZSl7ZS5sKz0yO3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTp0LGNvbHR5cGU6MyZyLHJ0OlJkW3I+''@;'; put 'put ''PjImMzFdLGlkeDphLGM6bixDOml9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBiZChlKXtyZXR1cm4gZS5sKz0yLFtlLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxWZD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gVWQoZSl7cmV0dXJuIGUubCs9NCxbMCwwXX19LDE6''@;'; put 'put ''e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIEt4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPXImJjI9PXIuYmlmZj8zOjQsW2FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uICR4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBl''@;'; put 'put ''LmwrPTIsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gR3goZSx0LHIpe2UubCs9Mjtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpLG49W10saT0wO2k8PWE7KytpKW4ucHVzaChlLnJlYWRf''@;'; put 'put ''c2hpZnQociYmMj09ci5iaWZmPzE6MikpO3JldHVybiBufX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gengoZSx0LHIpe3ZhciBhPTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbYSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT''@;'; put 'put ''dW0iLGY6ZnVuY3Rpb24gYWQoZSx0LHIpe2UubCs9ciYmMj09ci5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOnlmfSwzMzp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LEFmKGUpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSngoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gangoZSl7dmFyIHQ9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFt0LGUu''@;'; put 'put ''cmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIFdhKGUsdCxyLGEpe2lmKGEuYmlmZjw4KXJldHVybiBwcihlLHQpO2Zvcih2YXIgbj1lLmwrdCxpPVtdLHM9MDtzIT09ci5sZW5ndGg7KytzKXN3aXRjaChyW3NdWzBdKXtjYXNlIlB0Z0FycmF5IjpyW3NdWzFdPWhkKGUsMCxhKSxp''@;'; put 'put ''LnB1c2gocltzXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpyW3NdWzJdPXVkKGUsMCxhKSxpLnB1c2gocltzXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmEmJjEyPT1hLmJpZmYmJihyW3NdWzFdWzFdPWUucmVhZF9zaGlmdCg0KSxpLnB1c2gocltzXVsxXSkpO2JyZWFrO2Nhc2UiUHRn''@;'; put 'put ''TGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK3Jbc11bMF19cmV0dXJuIDAhPSh0PW4tZS5sKSYmaS5wdXNoKHByKGUsdCkpLGl9ZnVuY3Rpb24gSGEoZSx0LHIpe2Zvcih2YXIgbixpLGE9ZS5s''@;'; put 'put ''K3Qscz1bXTthIT1lLmw7KXQ9YS1lLmwsbj1EZltpPWVbZS5sXV18fERmW1dkW2ldXSwoMjQ9PT1pfHwyNT09PWkpJiYobj0oMjQ9PT1pP0hkOlZkKVtlW2UubCsxXV0pLG4mJm4uZj9zLnB1c2goW24ubixuLmYoZSx0LHIpXSk6cHIoZSx0KTtyZXR1cm4gc31mdW5jdGlvbiBYZChlKXtmb3Io''@;'; put 'put ''dmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXtmb3IodmFyIGE9ZVtyXSxuPVtdLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIHM9YVtpXTtuLnB1c2gocz8yPT09c1swXT8nIicrc1sxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnNbMV06IiIpfXQucHVzaChuLmpvaW4oIiwiKSl9cmV0dXJu''@;'; put 'put ''IHQuam9pbigiOyIpfXZhciBHZD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn07ZnVuY3Rpb24g''@;'; put 'put ''T2YoZSx0LHIpe2lmKCFlKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoci5iaWZmPjgmJighZS5YVEl8fCFlLlhUSVt0XSkpcmV0dXJuIGUuU2hlZXROYW1lc1t0XTtpZighZS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgYT1lLlhUSVt0XTtpZihyLmJpZmY8OClyZXR1cm4gdD4xZTQmJih0''@;'; put 'put ''LT02NTUzNiksdDwwJiYodD0tdCksMD09dD8iIjplLlhUSVt0LTFdO2lmKCFhKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIG49IiI7aWYoci5iaWZmPjgpc3dpdGNoKGVbYVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV0sYVsxXT09''@;'; put 'put ''YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ci5TSUQ/ZS5TaGVldE5hbWVzW3IuU0lEXToiU0gzM1RKU1NBTUUiK2VbYVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZVthWzBdXVswXX1zd2l0Y2goZVthWzBdXVswXVswXSl7''@;'; put 'put ''Y2FzZSAxMDI1OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV18fCJTSDMzVEpTRVJSMyIsYVsxXT09YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBlW2FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4g''@;'; put 'put ''aS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBlW2FbMF1dWzBdWzNdPyhuPS0xPT1hWzFdPyIjUkVGIjplW2FbMF1dWzBdWzNdW2FbMV1dfHwiU0gzM1RKU0VSUjQiLGFbMV09PWFbMl0/bjpuKyI6IitlW2FbMF1dWzBdWzNdW2FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlv''@;'; put 'put ''biBJZihlLHQscil7dmFyIGE9T2YoZSx0LHIpO3JldHVybiIjUkVGIj09YT9hOmZ1bmN0aW9uIHpkKGUsdCl7aWYoIShlfHx0JiZ0LmJpZmY8PTUmJnQuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1''@;'; put 'put ''MzBGRl0vLnRlc3QoZSk/IiciK2UrIiciOmV9KGEscil9ZnVuY3Rpb24ga3IoZSx0LHIsYSxuKXt2YXIgYyxvLGwsZCxpPW4mJm4uYmlmZnx8OCxzPXtzOntjOjAscjowfSxlOntjOjAscjowfX0sZj1bXSxoPTAseD0wLHY9IiI7aWYoIWVbMF18fCFlWzBdWzBdKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''dT0tMSxwPSIiLGs9MCxUPWVbMF0ubGVuZ3RoO2s8VDsrK2spe3ZhciBnPWVbMF1ba107c3dpdGNoKGdbMF0pe2Nhc2UiUHRnVW1pbnVzIjpmLnB1c2goIi0iK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmYucHVzaCgiKyIrZi5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpm''@;'; put 'put ''LnB1c2goZi5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2Vy''@;'; put 'put ''IjpjYXNlIlB0Z1N1YiI6aWYoYz1mLnBvcCgpLG89Zi5wb3AoKSx1Pj0wKXtzd2l0Y2goZVswXVt1XVsxXVswXSl7Y2FzZSAwOnA9amUoIiAiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpwPWplKCJcciIsZVswXVt1XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihwPSIiLG4uV1RGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZVswXVt1XVsxXVswXSl9bys9cCx1PS0xfWYucHVzaChvK0dkW2dbMF1dK2MpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiAiK2MpO2JyZWFrO2Nhc2UiUHRnVW5p''@;'; put 'put ''b24iOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiwiK2MpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIjoiK2MpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRn''@;'; put 'put ''QXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0''@;'; put 'put ''IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpsPUNhKGdbMV1bMV0scyxuKSxmLnB1c2goRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpsPXI/Q2EoZ1sxXVsxXSxyLG4pOmdbMV1bMV0sZi5wdXNoKERh''@;'; put 'put ''KGwsaSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmg9Z1sxXVsxXSxsPUNhKGdbMV1bMl0scyxuKSx2PUlmKGEsaCxuKSxmLnB1c2godisiISIrRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBNPWdbMV1bMF0sST1nWzFdWzFdO018fChNPTApO3ZhciB5''@;'; put 'put ''PTA9PShNJj0xMjcpP1tdOmYuc2xpY2UoLU0pO2YubGVuZ3RoLT1NLCJVc2VyIj09PUkmJihJPXkuc2hpZnQoKSksZi5wdXNoKEkrIigiK3kuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpmLnB1c2goZ1sxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNh''@;'; put 'put ''c2UiUHRnRXJyIjpmLnB1c2goZ1sxXSk7YnJlYWs7Y2FzZSJQdGdOdW0iOmYucHVzaChTdHJpbmcoZ1sxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpmLnB1c2goJyInK2dbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6ZD1ucyhnWzFdWzFdLHI/e3M6cn06''@;'; put 'put ''cyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpkPW5zKGdbMV1bMV0scyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmQ9Z1sxXVsyXSx2PUlmKGEsaD1nWzFdWzFdLG4pLGYucHVzaCh2KyIhIit0bihkLG4pKTticmVhaztjYXNlIlB0Z0F0''@;'; put 'put ''dHJTdW0iOmYucHVzaCgiU1VNKCIrZi5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFA9KGEubmFtZXN8fFtdKVsoeD1nWzFdWzJdKS0xXXx8KGFbMF18fFtdKVt4XSxSPVA/UC5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKHgpO1ImJiJfeGxmbi4iPT1SLnNsaWNlKDAsNikm''@;'; put 'put ''JiFuLnhsZm4mJihSPVIuc2xpY2UoNikpLGYucHVzaChSKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgWCxWPWdbMV1bMV07aWYoeD1nWzFdWzJdLCEobi5iaWZmPD01KSl7dmFyIGI9IiI7aWYoMTQ4NDk9PSgoYVtWXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGFbVl18fFtdKVswXXx8''@;'; put 'put ''W10pWzBdP2FbVl1beF0mJmFbVl1beF0uaXRhYj4wJiYoYj1hLlNoZWV0TmFtZXNbYVtWXVt4XS5pdGFiLTFdKyIhIik6Yj1hLlNoZWV0TmFtZXNbeC0xXSsiISIpLGFbVl0mJmFbVl1beF0pYis9YVtWXVt4XS5OYW1lO2Vsc2UgaWYoYVswXSYmYVswXVt4XSliKz1hWzBdW3hdLk5hbWU7ZWxz''@;'; put 'put ''ZXt2YXIgZWU9KE9mKGEsVixuKXx8IiIpLnNwbGl0KCI7OyIpO2VlW3gtMV0/Yj1lZVt4LTFdOmIrPSJTSDMzVEpTRVJSWCJ9Zi5wdXNoKGIpO2JyZWFrfVY8MCYmKFY9LVYpLGFbVl0mJihYPWFbVl1beF0pLFh8fChYPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxmLnB1c2goWC5OYW1lKTticmVh''@;'; put 'put ''aztjYXNlIlB0Z1BhcmVuIjp2YXIgbGU9IigiLHJlPSIpIjtpZih1Pj0wKXtzd2l0Y2gocD0iIixlWzBdW3VdWzFdWzBdKXtjYXNlIDI6bGU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgMzpsZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgNDpyZT1q''@;'; put 'put ''ZSgiICIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7Y2FzZSA1OnJlPWplKCJcciIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7ZGVmYXVsdDppZihuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfXU9LTF9Zi5wdXNoKGxl''@;'; put 'put ''K2YucG9wKCkrcmUpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z1JlZkVycjNkIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpmLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBkZT17YzpyLmMscjpyLnJ9O2lmKGEuc2hhcmVkZltnZShsPXtj''@;'; put 'put ''OmdbMV1bMV0scjpnWzFdWzBdfSldKXt2YXIgdWU9YS5zaGFyZWRmW2dlKGwpXTtmLnB1c2goa3IodWUsMCxkZSxhLG4pKX1lbHNle3ZhciBGZT0hMTtmb3IoYz0wO2MhPWEuYXJyYXlmLmxlbmd0aDsrK2MpaWYoIShsLmM8KG89YS5hcnJheWZbY10pWzBdLnMuY3x8bC5jPm9bMF0uZS5jfHxs''@;'; put 'put ''LnI8b1swXS5zLnJ8fGwucj5vWzBdLmUucikpe2YucHVzaChrcihvWzFdLDAsZGUsYSxuKSksRmU9ITA7YnJlYWt9RmV8fGYucHVzaChnWzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpmLnB1c2goInsiK1hkKGdbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0''@;'; put 'put ''clNwYWNlU2VtaSI6dT1rO2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6Zi5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmYucHVzaCgiVGFibGUiK2dbMV0uaWR4KyJbIyIrZ1sxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29s''@;'; put 'put ''U1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZz''@;'; put 'put ''Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhnKSl9aWYoMyE9bi5iaWZmJiZ1Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGVbMF1ba11bMF0pKXt2''@;'; put 'put ''YXIgeGU9ITA7c3dpdGNoKChnPWVbMF1bdV0pWzFdWzBdKXtjYXNlIDQ6eGU9ITE7Y2FzZSAwOnA9amUoIiAiLGdbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4ZT0hMTtjYXNlIDE6cD1qZSgiXHIiLGdbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2dbMV1bMF0pfWYucHVzaCgoeGU/cDoiIikrZi5wb3AoKSsoeGU/IiI6cCkpLHU9LTF9fWlmKGYubGVuZ3RoPjEmJm4uV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZlswXX1mdW5jdGlvbiAkZChlLHQs''@;'; put 'put ''cil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIpO3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfWZ1bmN0aW9uIFlkKGUsdCxy''@;'; put 'put ''KXt2YXIgbixhPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KDIpLHM9SGEoZSxpLHIpO3JldHVybiA2NTUzNT09aT9bW10scHIoZSx0LTIpXToodCE9PWkrMiYmKG49V2EoZSxhLWktMixzLHIpKSxbcyxuXSl9ZnVuY3Rpb24gTm4oZSx0LHIpe3ZhciBhPWUubCt0LG49bnQoZSk7Mj09ci5iaWZmJiYr''@;'; put 'put ''K2UubDt2YXIgaT1mdW5jdGlvbiBKZChlKXt2YXIgdDtpZig2NTUzNSE9PXV0KGUsZS5sKzYpKXJldHVybltncihlKSwibiJdO3N3aXRjaChlW2UubF0pe2Nhc2UgMDpyZXR1cm4gZS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gdD0xPT09ZVtlLmwrMl0sZS5sKz04LFt0LCJi''@;'; put 'put ''Il07Y2FzZSAyOnJldHVybiB0PWVbZS5sKzJdLGUubCs9OCxbdCwiZSJdO2Nhc2UgMzpyZXR1cm4gZS5sKz04LFsiIiwicyJdfXJldHVybltdfShlKSxzPWUucmVhZF9zaGlmdCgxKTsyIT1yLmJpZmYmJihlLnJlYWRfc2hpZnQoMSksci5iaWZmPj01JiZlLnJlYWRfc2hpZnQoNCkpO3ZhciBm''@;'; put 'put ''PWZ1bmN0aW9uIGpkKGUsdCxyKXt2YXIgaSxhPWUubCt0LG49Mj09ci5iaWZmPzE6MixzPWUucmVhZF9zaGlmdChuKTtpZig2NTUzNT09cylyZXR1cm5bW10scHIoZSx0LTIpXTt2YXIgZj1IYShlLHMscik7cmV0dXJuIHQhPT1zK24mJihpPVdhKGUsdC1zLW4sZixyKSksZS5sPWEsW2YsaV19''@;'; put 'put ''KGUsYS1lLmwscik7cmV0dXJue2NlbGw6bix2YWw6aVswXSxmb3JtdWxhOmYsc2hhcmVkOnM+PjMmMSx0dDppWzFdfX1mdW5jdGlvbiBBMChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDQpLG49SGEoZSxhLHIpLGk9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybltuLGk+MD9XYShlLGksbixyKTpu''@;'; put 'put ''dWxsXX12YXIgUWQ9QTAsQzA9QTAsZXY9QTAscnY9QTAsdHY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwx''@;'; put 'put ''MDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVB''@;'; put 'put ''SyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2''@;'; put 'put ''OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9O''@;'; put 'put ''Iiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1F''@;'; put 'put ''Iiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVS''@;'; put 'put ''WS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVY''@;'; put 'put ''VCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIs''@;'; put 'put ''OTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEu''@;'; put 'put ''RklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEw''@;'; put 'put ''OiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQ''@;'; put 'put ''Qk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlT''@;'; put 'put ''IiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VU''@;'; put 'put ''TElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQi''@;'; put 'put ''LDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwx''@;'; put 'put ''Njc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4''@;'; put 'put ''NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4z''@;'; put 'put ''RC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9N''@;'; put 'put ''T1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJB''@;'; put 'put ''U1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5U''@;'; put 'put ''LlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIu''@;'; put 'put ''REFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJ''@;'; put 'put ''TkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFV''@;'; put 'put ''VE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JL''@;'; put 'put ''Qk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFku''@;'; put 'put ''VE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIs''@;'; put 'put ''MzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElW''@;'; put 'put ''T1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BU''@;'; put 'put ''SU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJH''@;'; put 'put ''QUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5B''@;'; put 'put ''REQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJP''@;'; put 'put ''UEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6''@;'; put 'put ''IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToi''@;'; put 'put ''U1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIs''@;'; put 'put ''NDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFD''@;'; put 'put ''RVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9Y''@;'; put 'put ''LlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5E''@;'; put 'put ''SUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVD''@;'; put 'put ''VC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9S''@;'; put 'put ''QkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04u''@;'; put 'put ''U0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFU''@;'; put 'put ''QVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToi''@;'; put 'put ''U0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFS''@;'; put 'put ''RUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lP''@;'; put 'put ''TlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LFJmPXswOiJDT1VOVCIsMToiSUYi''@;'; put 'put ''LDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIs''@;'; put 'put ''MTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxT''@;'; put 'put ''RSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9H''@;'; put 'put ''RVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4''@;'; put 'put ''OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNF''@;'; put 'put ''QVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVD''@;'; put 'put ''VElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJT''@;'; put 'put ''RVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RF''@;'; put 'put ''IiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJG''@;'; put 'put ''UkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0''@;'; put 'put ''ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1''@;'; put 'put ''ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5''@;'; put 'put ''OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQ''@;'; put 'put ''IiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5P''@;'; put 'put ''VEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VB''@;'; put 'put ''UkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRP''@;'; put 'put ''REFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5I''@;'; put 'put ''IiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoi''@;'; put 'put ''SU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxV''@;'; put 'put ''QVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIs''@;'; put 'put ''MjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0Ui''@;'; put 'put ''LDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9N''@;'; put 'put ''RElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9J''@;'; put 'put ''U1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBF''@;'; put 'put ''QVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2''@;'; put 'put ''OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4''@;'; put 'put ''OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxB''@;'; put 'put ''TksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklF''@;'; put 'put ''Vy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJU''@;'; put 'put ''SEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFI''@;'; put 'put ''VFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklO''@;'; put 'put ''IiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0''@;'; put 'put ''MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0''@;'; put 'put ''MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6''@;'; put 'put ''IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNF''@;'; put 'put ''RElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMi''@;'; put 'put ''LDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6''@;'; put 'put ''Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpT''@;'; put 'put ''Iiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRD''@;'; put 'put ''T1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGF2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz''@;'; 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 ''OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH07ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIm9mOiI9PWUuc2xpY2UoMCwzKSYmKGU9ZS5zbGljZSgzKSksNjE9PWUuY2hhckNvZGVBdCgwKSYmNjE9PShlPWUuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihlPWUuc2xpY2UoMSkpLChlPShlPShlPWUucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbih0LHIpe3JldHVybiByLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxh''@;'; put 'put ''Y2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gYm4oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO3JldHVyblt0WzBdLnNwbGl0KCIuIilbMF0sdFswXS5zcGxpdCgiLiIpWzFdKyh0Lmxlbmd0aD4xPyI6''@;'; put 'put ''IisodFsxXS5zcGxpdCgiLiIpWzFdfHx0WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19dmFyIFZhPXt9LGhhPXt9O2Z1bmN0aW9uIFl0KGUsdCl7aWYoZSl7dmFyIHI9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09dCYmKHI9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1lLmxlZnQmJihlLmxl''@;'; put 'put ''ZnQ9clswXSksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9clsxXSksbnVsbD09ZS50b3AmJihlLnRvcD1yWzJdKSxudWxsPT1lLmJvdHRvbSYmKGUuYm90dG9tPXJbM10pLG51bGw9PWUuaGVhZGVyJiYoZS5oZWFkZXI9cls0XSksbnVsbD09ZS5mb290ZXImJihlLmZvb3Rlcj1yWzVdKX19ZnVu''@;'; put 'put ''Y3Rpb24gYmYoZSx0LHIsYSxuLGkpe3RyeXthLmNlbGxORiYmKGUuej1wZVt0XSl9Y2F0Y2goZil7aWYoYS5XVEYpdGhyb3cgZn1pZigieiIhPT1lLnR8fGEuY2VsbFN0eWxlcyl7aWYoImQiPT09ZS50JiYic3RyaW5nIj09dHlwZW9mIGUudiYmKGUudj1YZShlLnYpKSwoIWF8fCExIT09YS5j''@;'; put 'put ''ZWxsVGV4dCkmJiJ6IiE9PWUudCl0cnl7aWYobnVsbD09cGVbdF0mJmV0KGFvW3RdfHwiR2VuZXJhbCIsdCksImUiPT09ZS50KWUudz1lLnd8fHh0W2Uudl07ZWxzZSBpZigwPT09dClpZigibiI9PT1lLnQpZS53PSgwfGUudik9PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpO2Vsc2Ug''@;'; put 'put ''aWYoImQiPT09ZS50KXt2YXIgcz1pcihlLnYpO2Uudz0oMHxzKT09PXM/cy50b1N0cmluZygxMCk6a2Eocyl9ZWxzZXtpZih2b2lkIDA9PT1lLnYpcmV0dXJuIiI7ZS53PU50KGUudixoYSl9ZWxzZSBlLnc9UnIodCwiZCI9PT1lLnQ/aXIoZS52KTplLnYsaGEpfWNhdGNoKGYpe2lmKGEuV1RG''@;'; put 'put ''KXRocm93IGZ9aWYoYS5jZWxsU3R5bGVzJiZudWxsIT1yKXRyeXtlLnM9aS5GaWxsc1tyXSxlLnMuZmdDb2xvciYmZS5zLmZnQ29sb3IudGhlbWUmJiFlLnMuZmdDb2xvci5yZ2ImJihlLnMuZmdDb2xvci5yZ2I9VDAobi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVt''@;'; put 'put ''ZV0ucmdiLGUucy5mZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmZnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5mZ0NvbG9yLnRoZW1lXS5yZ2IpKSxlLnMuYmdDb2xvciYmZS5zLmJnQ29sb3IudGhlbWUmJihlLnMuYmdDb2xvci5yZ2I9VDAobi50aGVt''@;'; put 'put ''ZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiLGUucy5iZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmJnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5iZ0NvbG9yLnRoZW1lXS5yZ2IpKX1jYXRjaChmKXtpZihhLldURiYmaS5G''@;'; put 'put ''aWxscyl0aHJvdyBmfX19dmFyIHN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGZ2PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY3Y9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20s''@;'; put 'put ''b3Y9LyIoXHcqOlx3KikiLyxsdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHV2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxodj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLFBmPS88KD86XHc6''@;'; put 'put ''KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8seHY9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+Lyxkdj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdz''@;'; put 'put ''KT4vO2Z1bmN0aW9uIExuKGUsdCxyLGEpe3ZhciBuPW1lKGUpO3IuU2hlZXRzW2FdfHwoci5TaGVldHNbYV09e30pLG4uY29kZU5hbWUmJihyLlNoZWV0c1thXS5Db2RlTmFtZT1JZShCZShuLmNvZGVOYW1lKSkpfXZhciBEdj0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9c''@;'; put 'put ''Lz8+LyxOdj1mdW5jdGlvbigpe3ZhciBlPS88KD86XHcrOik/Y1sgXC8+XS8sdD0vPFwvKD86XHcrOik/cm93Pi8scj0vcj1bIiddKFteIiddKilbIiddLyxhPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sbj0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGk9RmEoInYi''@;'; put 'put ''KSxzPUZhKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGMsbyxsLGgseCxkKXtmb3IodmFyIEkseSxWLFgscmUsdj0wLHU9IiIscD1bXSxrPVtdLFQ9MCxnPTAsTj0wLE09IiIsUD0wLFI9MCxiPTAsZWU9MCxsZT1BcnJheS5pc0FycmF5KGQuQ2VsbFhmKSxkZT1bXSx1ZT1bXSxGZT1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KG8pLGNlPVtdLHhlPXt9LEs9ITEsQz0hIWwuc2hlZXRTdHVicyxVPWMuc3BsaXQodCksTz0wLEQ9VS5sZW5ndGg7TyE9RDsrK08pe3ZhciBqPSh1PVVbT10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWope3ZhciBzZT0wO2U6Zm9yKHY9MDt2PGo7Kyt2KXN3aXRjaCh1W3ZdKXtjYXNlIj4i''@;'; put 'put ''OmlmKCIvIiE9dVt2LTFdKXsrK3Y7YnJlYWsgZX1pZihsJiZsLmNlbGxTdHlsZXMpe2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSxsLnNoZWV0Um93cyYmbC5zaGVldFJvd3M8UCljb250aW51ZTt4ZT17fSxLPSExLHkuaHQm''@;'; put 'put ''JihLPSEwLHhlLmhwdD1wYXJzZUZsb2F0KHkuaHQpLHhlLmhweD1vYSh4ZS5ocHQpKSwiMSI9PXkuaGlkZGVuJiYoSz0hMCx4ZS5oaWRkZW49ITApLG51bGwhPXkub3V0bGluZUxldmVsJiYoSz0hMCx4ZS5sZXZlbD0reS5vdXRsaW5lTGV2ZWwpLEsmJihjZVtQLTFdPXhlKX1icmVhaztjYXNl''@;'; put 'put ''IjwiOnNlPXZ9aWYoc2U+PXYpYnJlYWs7aWYoUD1udWxsIT0oeT1tZSh1LnNsaWNlKHNlLHYpLCEwKSkucj9wYXJzZUludCh5LnIsMTApOlArMSxSPS0xLCEobC5zaGVldFJvd3MmJmwuc2hlZXRSb3dzPFApKXtoLnMucj5QLTEmJihoLnMucj1QLTEpLGguZS5yPFAtMSYmKGguZS5yPVAtMSks''@;'; put 'put ''bCYmbC5jZWxsU3R5bGVzJiYoeGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUubGV2ZWw9K3kub3V0bGlu''@;'; put 'put ''ZUxldmVsKSxLJiYoY2VbUC0xXT14ZSkpLHA9dS5zbGljZSh2KS5zcGxpdChlKTtmb3IodmFyIFo9MDtaIT1wLmxlbmd0aCYmIjwiPT1wW1pdLnRyaW0oKS5jaGFyQXQoMCk7KytaKTtmb3IocD1wLnNsaWNlKFopLHY9MDt2IT1wLmxlbmd0aDsrK3YpaWYoMCE9PSh1PXBbdl0udHJpbSgpKS5s''@;'; put 'put ''ZW5ndGgpe2lmKGs9dS5tYXRjaChyKSxUPXYsZz0wLE49MCx1PSI8YyAiKygiPCI9PXUuc2xpY2UoMCwxKT8iPiI6IiIpK3UsbnVsbCE9ayYmMj09PWsubGVuZ3RoKXtmb3IoVD0wLE09a1sxXSxnPTA7ZyE9TS5sZW5ndGgmJiEoKE49TS5jaGFyQ29kZUF0KGcpLTY0KTwxfHxOPjI2KTsrK2cp''@;'; put 'put ''VD0yNipUK047Uj0tLVR9ZWxzZSsrUjtmb3IoZz0wO2chPXUubGVuZ3RoJiY2MiE9PXUuY2hhckNvZGVBdChnKTsrK2cpO2lmKCsrZywoeT1tZSh1LnNsaWNlKDAsZyksITApKS5yfHwoeS5yPWdlKHtyOlAtMSxjOlJ9KSksST17dDoiIn0sbnVsbCE9KGs9KE09dS5zbGljZShnKSkubWF0Y2go''@;'; put 'put ''aSkpJiYiIiE9PWtbMV0mJihJLnY9SWUoa1sxXSkpLGwuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrPU0ubWF0Y2gocykpJiYiIiE9PWtbMV0pe2lmKEkuZj1JZShCZShrWzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGwueGxmbnx8KEkuZj1FZihJLmYpKSxrWzBdLmluZGV4T2YoJ3Q9ImFy''@;'; put 'put ''cmF5IicpPi0xKUkuRj0oTS5tYXRjaChuKXx8W10pWzFdLEkuRi5pbmRleE9mKCI6Iik+LTEmJmRlLnB1c2goW0RlKEkuRiksSS5GXSk7ZWxzZSBpZihrWzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7WD1tZShrWzBdKTt2YXIgUT1JZShCZShrWzFdKSk7bC54bGZufHwoUT1FZihRKSks''@;'; put 'put ''dWVbcGFyc2VJbnQoWC5zaSwxMCldPVtYLFEseS5yXX19ZWxzZShrPU0ubWF0Y2goLzxmW14+XSpcLz4vKSkmJnVlWyhYPW1lKGtbMF0pKS5zaV0mJihJLmY9SXgodWVbWC5zaV1bMV0sdWVbWC5zaV1bMl0seS5yKSk7dmFyIFk9R2UoeS5yKTtmb3IoZz0wO2c8ZGUubGVuZ3RoOysrZylZLnI+''@;'; put 'put ''PWRlW2ddWzBdLnMuciYmWS5yPD1kZVtnXVswXS5lLnImJlkuYz49ZGVbZ11bMF0ucy5jJiZZLmM8PWRlW2ddWzBdLmUuYyYmKEkuRj1kZVtnXVsxXSl9aWYobnVsbD09eS50JiZ2b2lkIDA9PT1JLnYpaWYoSS5mfHxJLkYpSS52PTAsSS50PSJuIjtlbHNle2lmKCFDKWNvbnRpbnVlO0kudD0i''@;'; put 'put ''eiJ9ZWxzZSBJLnQ9eS50fHwibiI7c3dpdGNoKGgucy5jPlImJihoLnMuYz1SKSxoLmUuYzxSJiYoaC5lLmM9UiksSS50KXtjYXNlIm4iOmlmKCIiPT1JLnZ8fG51bGw9PUkudil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIEkudj1wYXJzZUZsb2F0KEkudik7YnJlYWs7Y2FzZSJzIjpp''@;'; put 'put ''Zih0eXBlb2YgSS52PiJ1Iil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIFY9VmFbcGFyc2VJbnQoSS52LDEwKV0sSS52PVYudCxJLnI9Vi5yLGwuY2VsbEhUTUwmJihJLmg9Vi5oKTticmVhaztjYXNlInN0ciI6SS50PSJzIixJLnY9bnVsbCE9SS52P0JlKEkudik6IiIsbC5jZWxsSFRN''@;'; put 'put ''TCYmKEkuaD0kMChJLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6az1NLm1hdGNoKGEpLEkudD0icyIsbnVsbCE9ayYmKFY9U24oa1sxXSkpPyhJLnY9Vi50LGwuY2VsbEhUTUwmJihJLmg9Vi5oKSk6SS52PSIiO2JyZWFrO2Nhc2UiYiI6SS52PVdlKEkudik7YnJlYWs7Y2FzZSJkIjpsLmNl''@;'; put 'put ''bGxEYXRlcz9JLnY9WGUoSS52LDEpOihJLnY9aXIoWGUoSS52LDEpKSxJLnQ9Im4iKTticmVhaztjYXNlImUiOighbHx8ITEhPT1sLmNlbGxUZXh0KSYmKEkudz1JLnYpLEkudj1kc1tJLnZdfWlmKGI9ZWU9MCxyZT1udWxsLGxlJiZ2b2lkIDAhPT15LnMmJm51bGwhPShyZT1kLkNlbGxYZlt5''@;'; put 'put ''LnNdKSYmKG51bGwhPXJlLm51bUZtdElkJiYoYj1yZS5udW1GbXRJZCksbC5jZWxsU3R5bGVzJiZudWxsIT1yZS5maWxsSWQmJihlZT1yZS5maWxsSWQpKSxiZihJLGIsZWUsbCx4LGQpLGwuY2VsbERhdGVzJiZsZSYmIm4iPT1JLnQmJmJ0KHBlW2JdKSYmKEkudD0iZCIsSS52PW8wKEkudikp''@;'; put 'put ''LHkuY20mJmwueGxtZXRhKXt2YXIgRWU9KGwueGxtZXRhLkNlbGx8fFtdKVsreS5jbS0xXTtFZSYmIlhMREFQUiI9PUVlLnR5cGUmJihJLkQ9ITApfWlmKEZlKXt2YXIgQT1HZSh5LnIpO29bQS5yXXx8KG9bQS5yXT1bXSksb1tBLnJdW0EuY109SX1lbHNlIG9beS5yXT1JfX19fWNlLmxlbmd0''@;'; put 'put ''aD4wJiYob1siIXJvd3MiXT1jZSl9fSgpLE12PVd0O2Z1bmN0aW9uIEJmKGUpe3JldHVybltNdChlKSxncihlKSwibiJdfXZhciBrMj1XdCxNZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdO3ZhciBCbj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEs''@;'; put 'put ''ImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAs''@;'; put 'put ''ImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsi''@;'; put 'put ''c2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0s''@;'; put 'put ''WyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYXA9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwi''@;'; put 'put ''Ym9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbnA9W10saXA9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwi''@;'; put 'put ''YXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEi''@;'; put 'put ''LCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFVmKGUsdCl7Zm9yKHZhciByPTA7ciE9ZS5sZW5ndGg7KytyKWZvcih2YXIgYT1lW3JdLG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYobnVsbD09YVtpWzBdXSlhW2lbMF1dPWlbMV07ZWxzZSBzd2l0Y2goaVsy''@;'; put 'put ''XSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGFbaVswXV0mJihhW2lbMF1dPVdlKGFbaVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1wYXJzZUludChhW2lbMF1dLDEwKSl9fX1mdW5jdGlvbiBXZihlLHQpe2Zvcih2YXIgcj0w''@;'; put 'put ''O3IhPXQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihudWxsPT1lW2FbMF1dKWVbYVswXV09YVsxXTtlbHNlIHN3aXRjaChhWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZVthWzBdXSYmKGVbYVswXV09V2UoZVthWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGVbYVswXV0mJihlW2FbMF1dPXBhcnNlSW50KGVbYVswXV0sMTApKX19fWZ1bmN0aW9uIEhmKGUpe1dmKGUuV0JQcm9wcyxCbiksV2YoZS5DYWxjUHIsaXApLFVmKGUuV0JWaWV3LGFwKSxVZihlLlNoZWV0cyxucCksaGEuZGF0ZTE5MDQ9V2UoZS5XQlByb3BzLmRhdGUxOTA0KX12YXIg''@;'; put 'put ''ZnA9Il1bKj8vXFwiLnNwbGl0KCIiKTt2YXIgb3A9Lzxcdys6d29ya2Jvb2svO2Z1bmN0aW9uIHZwKGUsdCl7dmFyIHI9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxyLkFyY2hJRD1lLnJlYWRfc2hpZnQoNCksZS5sKz10LTgscn1mdW5jdGlvbiBTcChlLHQscixhLG4saSxzLGYpe3JldHVy''@;'; put 'put ''biIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIE0yKGUsdCxyLGEsbixpLHMpe2lmKCFlKXJldHVybiBlO3ZhciBmPXR8fHt9O2F8fChhPXsiIWlkIjp7fX0pLG51bGwhPXplJiZudWxsPT1mLmRlbnNlJiYoZi5kZW5zZT16ZSk7dmFyIG8sdix1LHAsayxULGcsTixNLEksYz1mLmRlbnNl''@;'; put 'put ''P1tdOnt9LGw9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0saD1bXSx4PSExLGQ9ITEseT1bXTtmLmJpZmY9MTIsZlsiIXJvdyJdPTA7dmFyIFA9MCxSPSExLFY9W10sWD17fSxiPWYuc3VwYm9va3N8fG4uc3VwYm9va3N8fFtbXV07aWYoYi5zaGFyZWRmPVgsYi5hcnJheWY9VixiLlNo''@;'; put 'put ''ZWV0TmFtZXM9bi5TaGVldE5hbWVzfHxuLlNoZWV0cy5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5uYW1lfSksIWYuc3VwYm9va3MmJihmLnN1cGJvb2tzPWIsbi5OYW1lcykpZm9yKHZhciBlZT0wO2VlPG4uTmFtZXMubGVuZ3RoOysrZWUpYlswXVtlZSsxXT1uLk5hbWVzW2VlXTt2YXIg''@;'; put 'put ''dWUsRmUsbGU9W10scmU9W10sZGU9ITE7aWYoJGFbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6QmZ9LGh0KGUsZnVuY3Rpb24oSyxDLFUpe2lmKCFkKXN3aXRjaChVKXtjYXNlIDE0ODpvPUs7YnJlYWs7Y2FzZSAwOnY9SyxmLnNoZWV0Um93cyYmZi5zaGVldFJvd3M8PXYuciYmKGQ9ITApLE09''@;'; put 'put ''S2Uoaz12LnIpLGZbIiFyb3ciXT12LnIsKEsuaGlkZGVufHxLLmhwdHx8bnVsbCE9Sy5sZXZlbCkmJihLLmhwdCYmKEsuaHB4PW9hKEsuaHB0KSkscmVbSy5yXT1LKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6''@;'; put 'put ''Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDYyOnN3aXRjaCh1PXt0OktbMl19LEtbMl0pe2Nhc2UibiI6dS52PUtbMV07YnJlYWs7Y2FzZSJzIjp1LnY9KE49VmFbS1sxXV0pLnQsdS5yPU4ucjticmVhaztjYXNlImIiOnUudj0h''@;'; put 'put ''IUtbMV07YnJlYWs7Y2FzZSJlIjp1LnY9S1sxXSwhMSE9PWYuY2VsbFRleHQmJih1Lnc9eHRbdS52XSk7YnJlYWs7Y2FzZSJzdHIiOnUudD0icyIsdS52PUtbMV07YnJlYWs7Y2FzZSJpcyI6dS50PSJzIix1LnY9S1sxXS50fWlmKChwPXMuQ2VsbFhmW0tbMF0uaVN0eWxlUmVmXSkmJmJmKHUs''@;'; put 'put ''cC5udW1GbXRJZCxudWxsLGYsaSxzKSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsZi5jZWxsRm9ybXVsYSl7Zm9yKFI9ITEsUD0wO1A8Vi5sZW5ndGg7KytQKXt2YXIgTz1WW1BdO3Yucj49T1swXS5zLnIm''@;'; put 'put ''JnYucjw9T1swXS5lLnImJlQ+PU9bMF0ucy5jJiZUPD1PWzBdLmUuYyYmKHUuRj13ZShPWzBdKSxSPSEwKX0hUiYmSy5sZW5ndGg+MyYmKHUuZj1LWzNdKX1pZihsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQm''@;'; put 'put ''JihsLmUuYz1UKSxmLmNlbGxEYXRlcyYmcCYmIm4iPT11LnQmJmJ0KHBlW3AubnVtRm10SWRdKSl7dmFyIEQ9a3QodS52KTtEJiYodS50PSJkIix1LnY9bmV3IERhdGUoRC55LEQubS0xLEQuZCxELkgsRC5NLEQuUyxELnUpKX11ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12''@;'; put 'put ''b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE6Y2FzZSAxMjppZighZi5zaGVldFN0dWJzfHx4KWJyZWFrO3U9e3Q6InoiLHY6dm9pZCAwfSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsbC5z''@;'; put 'put ''LnI+di5yJiYobC5zLnI9di5yKSxsLnMuYz5UJiYobC5zLmM9VCksbC5lLnI8di5yJiYobC5lLnI9di5yKSxsLmUuYzxUJiYobC5lLmM9VCksdWUmJigiWExEQVBSIj09dWUudHlwZSYmKHUuRD0hMCksdWU9dm9pZCAwKSxGZSYmKEZlPXZvaWQgMCk7YnJlYWs7Y2FzZSAxNzY6eS5wdXNoKEsp''@;'; put 'put ''O2JyZWFrO2Nhc2UgNDk6dWU9KChmLnhsbWV0YXx8e30pLkNlbGx8fFtdKVtLLTFdO2JyZWFrO2Nhc2UgNDk0OnZhciBqPWFbIiFpZCJdW0sucmVsSWRdO2ZvcihqPyhLLlRhcmdldD1qLlRhcmdldCxLLmxvYyYmKEsuVGFyZ2V0Kz0iIyIrSy5sb2MpLEsuUmVsPWopOiIiPT1LLnJlbElkJiYo''@;'; put 'put ''Sy5UYXJnZXQ9IiMiK0subG9jKSxrPUsucmZ4LnMucjtrPD1LLnJmeC5lLnI7KytrKWZvcihUPUsucmZ4LnMuYztUPD1LLnJmeC5lLmM7KytUKWYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdfHwoY1trXVtUXT17dDoieiIsdjp2b2lkIDB9KSxjW2tdW1RdLmw9Syk6KGc9Z2Uoe2M6''@;'; put 'put ''VCxyOmt9KSxjW2ddfHwoY1tnXT17dDoieiIsdjp2b2lkIDB9KSxjW2ddLmw9Syk7YnJlYWs7Y2FzZSA0MjY6aWYoIWYuY2VsbEZvcm11bGEpYnJlYWs7Vi5wdXNoKEspLChJPWYuZGVuc2U/Y1trXVtUXTpjW0hlKFQpK01dKS5mPWtyKEtbMV0sMCx7cjp2LnIsYzpUfSxiLGYpLEkuRj13ZShL''@;'; put 'put ''WzBdKTticmVhaztjYXNlIDQyNzppZighZi5jZWxsRm9ybXVsYSlicmVhaztYW2dlKEtbMF0ucyldPUtbMV0sKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIsZik7YnJlYWs7Y2FzZSA2MDppZighZi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7''@;'; put 'put ''Sy5lPj1LLnM7KWxlW0suZS0tXT17d2lkdGg6Sy53LzI1NixoaWRkZW46ISEoMSZLLmZsYWdzKSxsZXZlbDpLLmxldmVsfSxkZXx8KGRlPSEwLEFuKEsudy8yNTYpKSxLdChsZVtLLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmNbIiFhdXRvZmlsdGVyIl09e3JlZjp3ZShLKX07YnJlYWs7Y2FzZSA0''@;'; put 'put ''NzY6Y1siIW1hcmdpbnMiXT1LO2JyZWFrO2Nhc2UgMTQ3Om4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLEsubmFtZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPUsubmFtZSksKEsuYWJvdmV8fEsubGVmdCkmJihjWyIhb3V0bGluZSJdPXthYm92ZTpLLmFib3ZlLGxlZnQ6Sy5sZWZ0fSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxMzc6bi5WaWV3c3x8KG4uVmlld3M9W3t9XSksbi5WaWV3c1swXXx8KG4uVmlld3NbMF09e30pLEsuUlRMJiYobi5WaWV3c1swXS5SVEw9ITApO2JyZWFrO2Nhc2UgNDg1OmNhc2UgNjQ6Y2FzZSAxMDUzOmNhc2UgMTUxOmNhc2UgMTUyOmNhc2UgMTc1OmNhc2UgNjQ0OmNh''@;'; put 'put ''c2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3''@;'; put 'put ''OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEw''@;'; put 'put ''MjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTp4PSEwO2JyZWFrO2Nhc2UgMzY6eD0hMTticmVhaztjYXNlIDM3OmgucHVzaChV''@;'; put 'put ''KSx4PSEwO2JyZWFrO2Nhc2UgMzg6aC5wb3AoKSx4PSExO2JyZWFrO2RlZmF1bHQ6aWYoIUMuVCYmKCF4fHxmLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrVS50b1N0cmluZygxNikpfX0sZiksZGVsZXRlIGYuc3VwYm9va3MsZGVsZXRlIGZbIiFyb3ciXSwh''@;'; put 'put ''Y1siIXJlZiJdJiYobC5zLnI8MmU2fHxvJiYoby5lLnI+MHx8by5lLmM+MHx8by5zLnI+MHx8by5zLmM+MCkpJiYoY1siIXJlZiJdPXdlKG98fGwpKSxmLnNoZWV0Um93cyYmY1siIXJlZiJdKXt2YXIgY2U9RGUoY1siIXJlZiJdKTtmLnNoZWV0Um93czw9K2NlLmUuciYmKGNlLmUucj1mLnNo''@;'; put 'put ''ZWV0Um93cy0xLGNlLmUucj5sLmUuciYmKGNlLmUucj1sLmUuciksY2UuZS5yPGNlLnMuciYmKGNlLnMucj1jZS5lLnIpLGNlLmUuYz5sLmUuYyYmKGNlLmUuYz1sLmUuYyksY2UuZS5jPGNlLnMuYyYmKGNlLnMuYz1jZS5lLmMpLGNbIiFmdWxscmVmIl09Y1siIXJlZiJdLGNbIiFyZWYiXT13''@;'; put 'put ''ZShjZSkpfXJldHVybiB5Lmxlbmd0aD4wJiYoY1siIW1lcmdlcyJdPXkpLGxlLmxlbmd0aD4wJiYoY1siIWNvbHMiXT1sZSkscmUubGVuZ3RoPjAmJihjWyIhcm93cyJdPXJlKSxjfShlLGEscixuLGkscyxmKTpmdW5jdGlvbiB2dihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTthfHwo''@;'; put 'put ''YT17IiFpZCI6e319KSxudWxsIT16ZSYmbnVsbD09dC5kZW5zZSYmKHQuZGVuc2U9emUpO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5p''@;'; put 'put ''bmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3ZhciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNo''@;'; put 'put ''KC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihl''@;'; put 'put ''WyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZhciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdz''@;'; put 'put ''W2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZpZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0''@;'; put 'put ''KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVuZ3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZl''@;'; put 'put ''bD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2go''@;'; put 'put ''dXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2Uo''@;'; put 'put ''TltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBNPWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsi''@;'; put 'put ''IWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdldD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50''@;'; put 'put ''b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRpcCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118''@;'; put 'put ''fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0pLGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxl''@;'; put 'put ''ZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdl''@;'; put 'put ''KGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVmIl0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUu''@;'; put 'put ''Yz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMuYz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2Es''@;'; put 'put ''emY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1y''@;'; put 'put ''WzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInht''@;'; put 'put ''bG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/InhtbG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFy''@;'; put 'put ''IG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlmb3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5z''@;'; put 'put ''IituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2UoaSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4i''@;'; put 'put ''Om49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6''@;'; put 'put ''Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJp''@;'; put 'put ''b3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlwZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09''@;'; put 'put ''aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUp''@;'; put 'put ''e2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgt''@;'; put 'put ''MSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYm''@;'; put 'put ''KGEudj0rZSksYS50fHwoYS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7''@;'; put 'put ''aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1yLmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2Fb''@;'; put 'put ''ZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0''@;'; put 'put ''KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEp''@;'; put 'put ''OzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUuc2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1l''@;'; put 'put ''bHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Ypbi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUm''@;'; put 'put ''JnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5UeXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2cs''@;'; put 'put ''IlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPXR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2Rl''@;'; put 'put ''KDY1MDAxLHQwKGEpKTpCZShhKSk7dmFyIG49YS5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksaT0hMTtpZigoMTAyMyYobj1uLnJlcGxhY2UoLyIuKj8iL2csIiIpKS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmbi5pbmRleE9mKCIsIiksMTAyMyZuLmluZGV4T2YoIjsiKSkpe3Zh''@;'; put 'put ''ciBzPU1lKHIpO3JldHVybiBzLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2soYSxzKX1pZigtMT09bi5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtuLmluZGV4T2Yo''@;'; put 'put ''IjwiK3FlKT49MCYmKGk9ITApfSksaSlyZXR1cm4gZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm1hdGNoKC88dGFibGVbXHNcU10qPz5bXHNcU10qPzxcL3RhYmxlPi9naSk7aWYoIXJ8fDA9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8''@;'; put 'put ''dGFibGU+Iik7aWYoMT09ci5sZW5ndGgpcmV0dXJuIEZ0KEpmKHJbMF0sdCksdCk7dmFyIGE9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ZWkoYSxKZihuLHQpLCJTaGVldCIrKGkrMSkpfSksYX0oYSxyKTtHYT17IkdlbmVyYWwgTnVt''@;'; put 'put ''YmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6cGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOnBlWzE1XSwiU2hvcnQgRGF0ZSI6cGVbMTRdLCJMb25nIFRpbWUiOnBlWzE5XSwiTWVkaXVtIFRpbWUiOnBlWzE4XSwiU2hvcnQgVGltZSI6''@;'; put 'put ''cGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOnBlWzJdLFN0YW5kYXJkOnBlWzRdLFBlcmNlbnQ6cGVbMTBdLFNjaWVudGlmaWM6cGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUi''@;'; put 'put ''OyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfTt2YXIgZixvLGM9W107bnVsbCE9emUmJm51bGw9PXIuZGVuc2UmJihyLmRlbnNlPXplKTt2YXIgdWUsbD17fSxoPVtdLHg9ci5kZW5zZT9bXTp7fSxkPSIiLHY9e30sdT17fSxwPVpyKCc8RGF0YSBzczpU''@;'; put 'put ''eXBlPSJTdHJpbmciPicpLGs9MCxUPTAsZz0wLE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTT17fSxJPXt9LHk9IiIsUD0wLFI9W10sVj17fSxYPXt9LGI9MCxlZT1bXSxsZT1bXSxyZT17fSxkZT1bXSxGZT0hMSxjZT1bXSx4ZT1bXSxLPXt9LEM9MCxVPTAsTz17U2hlZXRzOltd''@;'; put 'put ''LFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sRD17fTt5YS5sYXN0SW5kZXg9MCxhPWEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgaj0iIjtmPXlhLmV4ZWMoYSk7KXN3aXRjaChmWzNdPShqPWZbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEi''@;'; put 'put ''PT1qKXtpZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYmYy5wdXNoKFtmWzNdLCEwXSk7YnJlYWt9aWYoY1tjLmxlbmd0aC0x''@;'; put 'put ''XVsxXSlicmVhazsiLyI9PT1mWzFdPyRwKGEuc2xpY2UoayxmLmluZGV4KSx5LHAsImNvbW1lbnQiPT1jW2MubGVuZ3RoLTFdWzBdP3JlOnYse2M6VCxyOmd9LE0sZGVbVF0sdSxjZSxyKTooeT0iIixwPVpyKGZbMF0pLGs9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp''@;'; put 'put ''ZigiLyI9PT1mWzFdKWlmKGxlLmxlbmd0aD4wJiYodi5jPWxlKSwoIXIuc2hlZXRSb3dzfHxyLnNoZWV0Um93cz5nKSYmdm9pZCAwIT09di52JiYoci5kZW5zZT8oeFtnXXx8KHhbZ109W10pLHhbZ11bVF09dik6eFtIZShUKStLZShnKV09diksdi5IUmVmJiYodi5sPXtUYXJnZXQ6SWUodi5I''@;'; put 'put ''UmVmKX0sdi5IUmVmU2NyZWVuVGlwJiYodi5sLlRvb2x0aXA9di5IUmVmU2NyZWVuVGlwKSxkZWxldGUgdi5IUmVmLGRlbGV0ZSB2LkhSZWZTY3JlZW5UaXApLCh2Lk1lcmdlQWNyb3NzfHx2Lk1lcmdlRG93bikmJihDPVQrKDB8cGFyc2VJbnQodi5NZXJnZUFjcm9zcywxMCkpLFU9ZysoMHxw''@;'; put 'put ''YXJzZUludCh2Lk1lcmdlRG93biwxMCkpLFIucHVzaCh7czp7YzpULHI6Z30sZTp7YzpDLHI6VX19KSksci5zaGVldFN0dWJzKWlmKHYuTWVyZ2VBY3Jvc3N8fHYuTWVyZ2VEb3duKXtmb3IodmFyIHNlPVQ7c2U8PUM7KytzZSlmb3IodmFyIFo9ZztaPD1VOysrWikoc2U+VHx8Wj5nKSYmKHIu''@;'; put 'put ''ZGVuc2U/KHhbWl18fCh4W1pdPVtdKSx4W1pdW3NlXT17dDoieiJ9KTp4W0hlKHNlKStLZShaKV09e3Q6InoifSk7VD1DKzF9ZWxzZSsrVDtlbHNlIHYuTWVyZ2VBY3Jvc3M/VD1DKzE6KytUO2Vsc2Uodj1IcChmWzBdKSkuSW5kZXgmJihUPSt2LkluZGV4LTEpLFQ8Ti5zLmMmJihOLnMuYz1U''@;'; put 'put ''KSxUPk4uZS5jJiYoTi5lLmM9VCksIi8+Ij09PWZbMF0uc2xpY2UoLTIpJiYrK1QsbGU9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PWZbMV18fCIvPiI9PT1mWzBdLnNsaWNlKC0yKT8oZzxOLnMuciYmKE4ucy5yPWcpLGc+Ti5lLnImJihOLmUucj1nKSwiLz4iPT09ZlswXS5zbGljZSgtMikm''@;'; put 'put ''Jih1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksVD0wLCsrZyk6KCh1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksSz17fSwoIjAiPT11LkF1dG9GaXRIZWlnaHR8fHUuSGVpZ2h0KSYmKEsuaHB4PXBhcnNlSW50KHUuSGVpZ2h0LDEwKSxLLmhwdD1CYShLLmhweCks''@;'; put 'put ''eGVbZ109SyksIjEiPT11LkhpZGRlbiYmKEsuaGlkZGVuPSEwLHhlW2ddPUspKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKTtoLnB1c2goZCksTi5z''@;'; put 'put ''LnI8PU4uZS5yJiZOLnMuYzw9Ti5lLmMmJih4WyIhcmVmIl09d2UoTiksci5zaGVldFJvd3MmJnIuc2hlZXRSb3dzPD1OLmUuciYmKHhbIiFmdWxscmVmIl09eFsiIXJlZiJdLE4uZS5yPXIuc2hlZXRSb3dzLTEseFsiIXJlZiJdPXdlKE4pKSksUi5sZW5ndGgmJih4WyIhbWVyZ2VzIl09Uiks''@;'; put 'put ''ZGUubGVuZ3RoPjAmJih4WyIhY29scyJdPWRlKSx4ZS5sZW5ndGg+MCYmKHhbIiFyb3dzIl09eGUpLGxbZF09eH1lbHNlIE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sZz1UPTAsYy5wdXNoKFtmWzNdLCExXSksbz1acihmWzBdKSxkPUllKG8uTmFtZSkseD1yLmRlbnNlP1tdOnt9''@;'; put 'put ''LFI9W10sY2U9W10seGU9W10sTy5TaGVldHMucHVzaChEPXtuYW1lOmQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2V7aWYoIi8+''@;'; put 'put ''Ij09ZlswXS5zbGljZSgtMikpYnJlYWs7Yy5wdXNoKFtmWzNdLCExXSksZGU9W10sRmU9ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09ZlsxXT96cChNLEkscik6ST1acihmWzBdKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6SS5uZj1JZShacihmWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiks''@;'; put 'put ''R2FbSS5uZl0mJihJLm5mPUdhW0kubmZdKTtmb3IodmFyIFE9MDszOTIhPVEmJnBlW1FdIT1JLm5mOysrUSk7aWYoMzkyPT1RKWZvcihRPTU3OzM5MiE9UTsrK1EpaWYobnVsbD09cGVbUV0pe2V0KEkubmYsUSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1jW2MubGVu''@;'; put 'put ''Z3RoLTFdWzBdKWJyZWFrO2lmKCh1ZT1acihmWzBdKSkuSGlkZGVuJiYodWUuaGlkZGVuPSEwLGRlbGV0ZSB1ZS5IaWRkZW4pLHVlLldpZHRoJiYodWUud3B4PXBhcnNlSW50KHVlLldpZHRoLDEwKSksIUZlJiZ1ZS53cHg+MTApe0ZlPSEwLHdyPWxmO2Zvcih2YXIgWT0wO1k8ZGUubGVuZ3Ro''@;'; put 'put ''OysrWSlkZVtZXSYmS3QoZGVbWV0pfUZlJiZLdCh1ZSksZGVbdWUuSW5kZXgtMXx8ZGUubGVuZ3RoXT11ZTtmb3IodmFyIEVlPTA7RWU8K3VlLlNwYW47KytFZSlkZVtkZS5sZW5ndGhdPU1lKHVlKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PWZbMV0pYnJlYWs7Ty5OYW1lc3x8''@;'; put 'put ''KE8uTmFtZXM9W10pO3ZhciBBPW1lKGZbMF0pLFBlPXtOYW1lOkEuTmFtZSxSZWY6dWEoQS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtPLlNoZWV0cy5sZW5ndGg+MCYmKFBlLlNoZWV0PU8uU2hlZXRzLmxlbmd0aC0xKSxPLk5hbWVzLnB1c2goUGUpO2JyZWFrO2Nhc2UibmFtZWRj''@;'; put 'put ''ZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlImFsaWdubWVudCI6Y2FzZSJib3JkZXJzIjpjYXNlImJvcmRlciI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFn''@;'; put 'put ''cmFwaHMiOmNhc2UibmFtZSI6Y2FzZSJwaXhlbHNwZXJpbmNoIjpjYXNlIm51bGwiOmJyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/eSs9YS5zbGljZShQLGYuaW5kZXgpOlA9Zi5pbmRleCtmWzBdLmxlbmd0aDticmVhaztjYXNlImlu''@;'; put 'put ''dGVyaW9yIjppZighci5jZWxsU3R5bGVzKWJyZWFrO0kuSW50ZXJpb3I9WnIoZlswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNv''@;'; put 'put ''bXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRl''@;'; put 'put ''bnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09ZlswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09ZlsxXT9nbChWLGosYS5zbGljZShiLGYuaW5kZXgpKTpiPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlm''@;'; put 'put ''KCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSBjLnB1c2goW2ZbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSk7anAocmUpLGxlLnB1c2gocmUpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSkscmU9e2E6KG89WnIoZlswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVsw''@;'; put 'put ''XSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikpe3ZhciBBZT1acihmWzBdKTt4WyIhYXV0b2ZpbHRlciJdPXtyZWY6dWEoQWUuUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxj''@;'; put 'put ''LnB1c2goW2ZbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYm''@;'; put 'put ''Yy5wdXNoKFtmWzNdLCEwXSk7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUi''@;'; put 'put ''OmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3Jr''@;'; put 'put ''Ym9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5n''@;'; put 'put ''dGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09Yy5sZW5ndGgmJiJkb2N1bWVudCI9PWZbM118fDA9PWMubGVuZ3RoJiYidW9mIj09ZlszXSlyZXR1cm4gY2MoYSxyKTt2YXIgTGU9ITA7c3dpdGNoKGNbYy5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l''@;'; put 'put ''bnRzZXR0aW5ncyI6c3dpdGNoKGZbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNl''@;'; put 'put ''InJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNo''@;'; put 'put ''ZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2goZlszXSl7Y2FzZSJkYXRlMTkwNCI6''@;'; put 'put ''Ty5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJv''@;'; put 'put ''dGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0''@;'; put 'put ''IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVk''@;'; put 'put ''c2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2Fz''@;'; put 'put ''ZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChmWzNdKXtjYXNlInZp''@;'; put 'put ''c2libGUiOmlmKCIvPiIhPT1mWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1mWzFdKXN3aXRjaChhLnNsaWNlKGIsZi5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOkQuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOkQuSGlkZGVuPTJ9ZWxzZSBiPWYuaW5kZXgrZlswXS5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSJoZWFkZXIiOnhbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrbWUoZlswXSkuTWFyZ2luKXx8KHhbIiFtYXJnaW5zIl0uaGVhZGVyPSttZShmWzBdKS5NYXJnaW4pO2JyZWFrO2Nhc2UiZm9vdGVyIjp4WyIhbWFyZ2lucyJdfHxZ''@;'; put 'put ''dCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmZvb3Rlcj0rbWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgQ2U9bWUoZlswXSk7eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17''@;'; put 'put ''fSwieGxtbCIpLGlzTmFOKCtDZS5Ub3ApfHwoeFsiIW1hcmdpbnMiXS50b3A9K0NlLlRvcCksaXNOYU4oK0NlLkxlZnQpfHwoeFsiIW1hcmdpbnMiXS5sZWZ0PStDZS5MZWZ0KSxpc05hTigrQ2UuUmlnaHQpfHwoeFsiIW1hcmdpbnMiXS5yaWdodD0rQ2UuUmlnaHQpLGlzTmFOKCtDZS5Cb3R0''@;'; put 'put ''b20pfHwoeFsiIW1hcmdpbnMiXS5ib3R0b209K0NlLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOk8uVmlld3N8fChPLlZpZXdzPVtdKSxPLlZpZXdzWzBdfHwoTy5WaWV3c1swXT17fSksTy5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2Fz''@;'; put 'put ''ZSJmcm96ZW5ub3NwbGl0IjpjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjpjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFu''@;'; put 'put ''ZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNl''@;'; put 'put ''ImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93''@;'; put 'put ''dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2Fz''@;'; put 'put ''ZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxs''@;'; put 'put ''b3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXlo''@;'; put 'put ''ZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlv''@;'; put 'put ''biI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6eFsiIW91dGxpbmUiXXx8KHhbIiFvdXRs''@;'; put 'put ''aW5lIl09e30pLHhbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInBpdm90''@;'; put 'put ''dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKGZbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRp''@;'; put 'put ''b24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZp''@;'; put 'put ''ZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6''@;'; put 'put ''Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJl''@;'; put 'put ''ZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2Ui''@;'; put 'put ''dmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKGZbM10pe2Nhc2UiY29sYnJlYWtzIjpj''@;'; put 'put ''YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKGZbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6''@;'; put 'put ''Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKGZbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1h''@;'; put 'put ''dHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJl''@;'; put 'put ''ZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFs''@;'; put 'put ''IjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFz''@;'; put 'put ''dGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNh''@;'; put 'put ''c2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh''@;'; put 'put ''c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1h''@;'; put 'put ''dHRpbmciOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVz''@;'; put 'put ''c2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZh''@;'; put 'put ''bHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKGZbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxk''@;'; put 'put ''IjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJp''@;'; put 'put ''YnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1pZihMZXx8ZlszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighY1tjLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6''@;'; put 'put ''ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09Y1tjLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/WHAoWCxqLGVlLGEuc2xpY2UoYixmLmluZGV4KSk6KGVlPWYsYj1mLmlu''@;'; put 'put ''ZGV4K2ZbMF0ubGVuZ3RoKTticmVha31pZihyLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpfXZhciBvZT17fTtyZXR1cm4hci5ib29rU2hlZXRzJiYhci5ib29rUHJvcHMmJihvZS5TaGVldHM9bCksb2UuU2hlZXROYW1lcz1oLG9lLldvcmtib29r''@;'; put 'put ''PU8sb2UuU1NGPU1lKHBlKSxvZS5Qcm9wcz1WLG9lLkN1c3Rwcm9wcz1YLG9lfWZ1bmN0aW9uIFVuKGUsdCl7c3dpdGNoKCRuKHQ9dHx8e30pLHQudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oT3IoZSksdCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZp''@;'; put 'put ''bGUiOnJldHVybiBNbihlLHQpO2Nhc2UiYXJyYXkiOnJldHVybiBNbih3dChlKSx0KX19dmFyIGZtPVs2MCwxMDg0LDIwNjYsMjE2NSwyMTc1XTtmdW5jdGlvbiBjbShlLHQscixhLG4pe3ZhciBpPWEscz1bXSxmPXIuc2xpY2Uoci5sLHIubCtpKTtpZihuJiZuLmVuYyYmbi5lbmMuaW5zaXR1''@;'; put 'put ''JiZmLmxlbmd0aD4wKXN3aXRjaChlKXtjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAxMDMzOmNhc2UgMjA1NzpjYXNlIDQ3OmNhc2UgNDA1OmNhc2UgMjI1OmNhc2UgNDA2OmNhc2UgMzEyOmNhc2UgNDA0OmNhc2UgMTA6Y2FzZSAxMzM6YnJlYWs7ZGVmYXVsdDpuLmVuYy5pbnNpdHUoZil9cy5wdXNo''@;'; put 'put ''KGYpLHIubCs9aTtmb3IodmFyIGM9dXQocixyLmwpLG89V25bY10sbD0wO251bGwhPW8mJmZtLmluZGV4T2YoYyk+LTE7KWk9dXQocixyLmwrMiksbD1yLmwrNCwyMDY2PT1jP2wrPTQ6KDIxNjU9PWN8fDIxNzU9PWMpJiYobCs9MTIpLGY9ci5zbGljZShsLHIubCs0K2kpLHMucHVzaChmKSxy''@;'; put 'put ''LmwrPTQraSxvPVduW2M9dXQocixyLmwpXTt2YXIgaD1mcihzKTtocihoLDApO3ZhciB4PTA7aC5sZW5zPVtdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7KytkKWgubGVucy5wdXNoKHgpLHgrPXNbZF0ubGVuZ3RoO2lmKGgubGVuZ3RoPGEpdGhyb3ciWExTIFJlY29yZCAweCIrZS50b1N0cmlu''@;'; put 'put ''ZygxNikrIiBUcnVuY2F0ZWQ6ICIraC5sZW5ndGgrIiA8ICIrYTtyZXR1cm4gdC5mKGgsaC5sZW5ndGgsbil9ZnVuY3Rpb24gaXQoZSx0LHIpe2lmKCJ6IiE9PWUudCYmZS5YRil7dmFyIGE9MDt0cnl7YT1lLnp8fGUuWEYubnVtRm10SWR8fDAsdC5jZWxsTkYmJihlLno9cGVbYV0pfWNhdGNo''@;'; put 'put ''KGkpe2lmKHQuV1RGKXRocm93IGl9aWYoIXR8fCExIT09dC5jZWxsVGV4dCl0cnl7ZS53PSJlIj09PWUudD9lLnd8fHh0W2Uudl06MD09PWF8fCJHZW5lcmFsIj09YT8ibiI9PT1lLnQ/KDB8ZS52KT09PWUudj9lLnYudG9TdHJpbmcoMTApOmthKGUudik6TnQoZS52KTpScihhLGUudix7ZGF0''@;'; put 'put ''ZTE5MDQ6ISFyLGRhdGVORjp0JiZ0LmRhdGVORn0pfWNhdGNoKGkpe2lmKHQuV1RGKXRocm93IGl9aWYodC5jZWxsRGF0ZXMmJmEmJiJuIj09ZS50JiZidChwZVthXXx8U3RyaW5nKGEpKSl7dmFyIG49a3QoZS52KTtuJiYoZS50PSJkIixlLnY9bmV3IERhdGUobi55LG4ubS0xLG4uZCxuLkgs''@;'; put 'put ''bi5NLG4uUyxuLnUpKX19fWZ1bmN0aW9uIE8wKGUsdCxyKXtyZXR1cm57djplLGl4ZmU6dCx0OnJ9fXZhciB6YT17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5''@;'; put 'put ''Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gS2YoZSx0KXt2YXIgcixhLG4saTtpZih0fHwodD17fSksJG4odCkscjAoKSx0LmNvZGVwYWdlJiZlMCh0LmNvZGVwYWdlKSxlLkZ1bGxQYXRocyl7aWYodmUuZmluZChlLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBw''@;'; put 'put ''YXNzd29yZC1wcm90ZWN0ZWQiKTtyPXZlLmZpbmQoZSwiIUNvbXBPYmoiKSxhPXZlLmZpbmQoZSwiL1dvcmtib29rIil8fHZlLmZpbmQoZSwiL0Jvb2siKX1lbHNle3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjplPUlyKE9yKGUpKTticmVhaztjYXNlImJpbmFyeSI6ZT1JcihlKTticmVh''@;'; put 'put ''aztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWhyKGUsMCksYT17Y29udGVudDplfX1pZihyJiZmdW5jdGlvbiBzbShlKXt2YXIgdD17fSxyPWUuY29udGVudDtpZihyLmw9MjgsdC5BbnNp''@;'; put 'put ''VXNlclR5cGU9ci5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSx0LkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGxzKGUsMSl9KHIpLHIubGVuZ3RoLXIubDw9NClyZXR1cm4gdDt2YXIgYT1yLnJlYWRfc2hpZnQoNCk7aWYoMD09YXx8YT40MHx8KHIubC09NCx0''@;'; put 'put ''LlJlc2VydmVkMT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHIubGVuZ3RoLXIubDw9NCl8fDE5MDc1MDU2NTIhPT0oYT1yLnJlYWRfc2hpZnQoNCkpfHwodC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFpvKGUpe3JldHVybiBscyhlLDIpfShyKSwwPT0oYT1yLnJlYWRf''@;'; put 'put ''c2hpZnQoNCkpfHxhPjQwKSlyZXR1cm4gdDtyLmwtPTQsdC5SZXNlcnZlZDI9ci5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShyKSx0LmJvb2tQcm9wcyYmIXQuYm9va1NoZWV0cyluPXt9O2Vsc2V7dmFyIHM9U2U/ImJ1ZmZlciI6ImFycmF5IjtpZihhJiZhLmNvbnRlbnQpbj1mdW5jdGlvbiBv''@;'; put 'put ''bShlLHQpe3ZhciByPXtvcHRzOnt9fSxhPXt9O251bGwhPXplJiZudWxsPT10LmRlbnNlJiYodC5kZW5zZT16ZSk7dmFyIGgsZCx1LHAsZyxOLG49dC5kZW5zZT9bXTp7fSxpPXt9LHM9e30sZj1udWxsLGM9W10sbz0iIixsPXt9LHg9IiIsaz17fSxUPVtdLE09W10sST1bXSx5PXtTaGVldHM6''@;'; put 'put ''W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LFA9e30sUj1mdW5jdGlvbih5ZSl7cmV0dXJuIHllPDg/VnRbeWVdOnllPDY0JiZJW3llLThdfHxWdFt5ZV19LFg9ZnVuY3Rpb24oeWUsWmUsS3Ipe2lmKCEoSz4xfHxLci5zaGVldFJvd3MmJnllLnI+PUtyLnNoZWV0Um93cykp''@;'; put 'put ''e2lmKEtyLmNlbGxTdHlsZXMmJlplLlhGJiZaZS5YRi5kYXRhJiZmdW5jdGlvbih5ZSxaZSxLcil7dmFyIHF0LHNyPVplLlhGLmRhdGE7c3ImJnNyLnBhdHRlcm5UeXBlJiZLciYmS3IuY2VsbFN0eWxlcyYmKFplLnM9e30sWmUucy5wYXR0ZXJuVHlwZT1zci5wYXR0ZXJuVHlwZSwocXQ9YmEo''@;'; put 'put ''Uihzci5pY3ZGb3JlKSkpJiYoWmUucy5mZ0NvbG9yPXtyZ2I6cXR9KSwocXQ9YmEoUihzci5pY3ZCYWNrKSkpJiYoWmUucy5iZ0NvbG9yPXtyZ2I6cXR9KSl9KDAsWmUsS3IpLGRlbGV0ZSBaZS5peGZlLGRlbGV0ZSBaZS5YRixoPXllLHg9Z2UoeWUpLCghc3x8IXMuc3x8IXMuZSkmJihzPXtz''@;'; put 'put ''OntyOjAsYzowfSxlOntyOjAsYzowfX0pLHllLnI8cy5zLnImJihzLnMucj15ZS5yKSx5ZS5jPHMucy5jJiYocy5zLmM9eWUuYykseWUucisxPnMuZS5yJiYocy5lLnI9eWUucisxKSx5ZS5jKzE+cy5lLmMmJihzLmUuYz15ZS5jKzEpLEtyLmNlbGxGb3JtdWxhJiZaZS5mKWZvcih2YXIgc3I9''@;'; put 'put ''MDtzcjxULmxlbmd0aDsrK3NyKWlmKCEoVFtzcl1bMF0ucy5jPnllLmN8fFRbc3JdWzBdLnMucj55ZS5yfHxUW3NyXVswXS5lLmM8eWUuY3x8VFtzcl1bMF0uZS5yPHllLnIpKXtaZS5GPXdlKFRbc3JdWzBdKSwoVFtzcl1bMF0ucy5jIT15ZS5jfHxUW3NyXVswXS5zLnIhPXllLnIpJiZkZWxl''@;'; put 'put ''dGUgWmUuZixaZS5mJiYoWmUuZj0iIitrcihUW3NyXVsxXSwwLHllLGNlLGIpKTticmVha31Lci5kZW5zZT8oblt5ZS5yXXx8KG5beWUucl09W10pLG5beWUucl1beWUuY109WmUpOm5beF09WmV9fSxiPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprLGFycmF5ZjpULHJydGFi''@;'; put 'put ''aWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIXQmJiEhdC5jZWxsU3R5bGVzLFdURjohIXQmJiEhdC53dGZ9O3QucGFzc3dvcmQmJihiLnBhc3N3b3JkPXQucGFzc3dvcmQpO3ZhciBlZSxsZT1bXSxyZT1bXSxkZT1bXSx1ZT1bXSxG''@;'; put 'put ''ZT0hMSxjZT1bXTtjZS5TaGVldE5hbWVzPWIuc25hbWVzLGNlLnNoYXJlZGY9Yi5zaGFyZWRmLGNlLmFycmF5Zj1iLmFycmF5ZixjZS5uYW1lcz1bXSxjZS5YVEk9W107dmFyIEQseGU9MCxLPTAsQz0wLFU9W10sTz1bXTtiLmNvZGVwYWdlPTEyMDAsTXIoMTIwMCk7Zm9yKHZhciBqPSExO2Uu''@;'; put 'put ''bDxlLmxlbmd0aC0xOyl7dmFyIHNlPWUubCxaPWUucmVhZF9zaGlmdCgyKTtpZigwPT09WiYmMTA9PT14ZSlicmVhazt2YXIgUT1lLmw9PT1lLmxlbmd0aD8wOmUucmVhZF9zaGlmdCgyKSxZPVduW1pdO2lmKFkmJlkuZil7aWYodC5ib29rU2hlZXRzJiYxMzM9PT14ZSYmMTMzIT09WilicmVh''@;'; put 'put ''aztpZih4ZT1aLDI9PT1ZLnJ8fDEyPT1ZLnIpe3ZhciBFZT1lLnJlYWRfc2hpZnQoMik7aWYoUS09MiwhYi5lbmMmJkVlIT09WiYmKCgyNTUmRWUpPDw4fEVlPj44KSE9PVopdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitFZSsiIT0iK1opOzEyPT1ZLnImJihlLmwrPTEwLFEtPTEw''@;'; put 'put ''KX12YXIgQT17fTtpZihBPTEwPT09Wj9ZLmYoZSxRLGIpOmNtKFosWSxlLFEsYiksMD09SyYmLTE9PT1bOSw1MjEsMTAzMywyMDU3XS5pbmRleE9mKHhlKSljb250aW51ZTtzd2l0Y2goWil7Y2FzZSAzNDpyLm9wdHMuRGF0ZTE5MDQ9eS5XQlByb3BzLmRhdGUxOTA0PUE7YnJlYWs7Y2FzZSAx''@;'; put 'put ''MzQ6ci5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIDQ3OmlmKGIuZW5jfHwoZS5sPTApLGIuZW5jPUEsIXQucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0''@;'; put 'put ''aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSA5MjpiLmxhc3R1c2VyPUE7YnJlYWs7Y2FzZSA2Njp2YXIgUGU9TnVtYmVyKEEpO3N3aXRjaChQZSl7Y2FzZSAyMTAxMDpQZT0xMjAw''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzI3Njg6UGU9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6UGU9MTI1Mn1NcihiLmNvZGVwYWdlPVBlKSxqPSEwO2JyZWFrO2Nhc2UgMzE3OmIucnJ0YWJpZD1BO2JyZWFrO2Nhc2UgMjU6Yi53aW5sb2NrZWQ9QTticmVhaztjYXNlIDQzOTpyLm9wdHMuUmVmcmVzaEFsbD1BO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTI6ci5vcHRzLkNhbGNDb3VudD1BO2JyZWFrO2Nhc2UgMTY6ci5vcHRzLkNhbGNEZWx0YT1BO2JyZWFrO2Nhc2UgMTc6ci5vcHRzLkNhbGNJdGVyPUE7YnJlYWs7Y2FzZSAxMzpyLm9wdHMuQ2FsY01vZGU9QTticmVhaztjYXNlIDE0OnIub3B0cy5DYWxjUHJlY2lzaW9uPUE7''@;'; put 'put ''YnJlYWs7Y2FzZSA5NTpyLm9wdHMuQ2FsY1NhdmVSZWNhbGM9QTticmVhaztjYXNlIDE1OmIuQ2FsY1JlZk1vZGU9QTticmVhaztjYXNlIDIyMTE6ci5vcHRzLkZ1bGxDYWxjPUE7YnJlYWs7Y2FzZSAxMjk6QS5mRGlhbG9nJiYoblsiIXR5cGUiXT0iZGlhbG9nIiksQS5mQmVsb3d8fCgoblsi''@;'; put 'put ''IW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQS5mUmlnaHR8fCgoblsiIW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIDIyNDpNLnB1c2goQSk7YnJlYWs7Y2FzZSA0MzA6Y2UucHVzaChbQV0pLGNlW2NlLmxlbmd0aC0x''@;'; put 'put ''XS5YVEk9W107YnJlYWs7Y2FzZSAzNTpjYXNlIDU0NzpjZVtjZS5sZW5ndGgtMV0ucHVzaChBKTticmVhaztjYXNlIDI0OmNhc2UgNTM2OkQ9e05hbWU6QS5OYW1lLFJlZjprcihBLnJnY2UsMCxudWxsLGNlLGIpfSxBLml0YWI+MCYmKEQuU2hlZXQ9QS5pdGFiLTEpLGNlLm5hbWVzLnB1c2go''@;'; put 'put ''RCksY2VbMF18fChjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1BLk5hbWUmJkEuaXRhYj4wJiZBLnJnY2UmJkEucmdjZVswXSYmQS5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09QS5yZ2NlWzBdWzBdWzBdJiYo''@;'; put 'put ''T1tBLml0YWItMV09e3JlZjp3ZShBLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSAyMjpiLkV4dGVybkNvdW50PUE7YnJlYWs7Y2FzZSAyMzowPT1jZS5sZW5ndGgmJihjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5YVEk9Y2VbY2UubGVuZ3RoLTFdLlhUSS5j''@;'; put 'put ''b25jYXQoQSksY2UuWFRJPWNlLlhUSS5jb25jYXQoQSk7YnJlYWs7Y2FzZSAyMTk2OmlmKGIuYmlmZjw4KWJyZWFrO251bGwhPUQmJihELkNvbW1lbnQ9QVsxXSk7YnJlYWs7Y2FzZSAxODpuWyIhcHJvdGVjdCJdPUE7YnJlYWs7Y2FzZSAxOTowIT09QSYmYi5XVEYmJmNvbnNvbGUuZXJyb3Io''@;'; put 'put ''IlBhc3N3b3JkIHZlcmlmaWVyOiAiK0EpO2JyZWFrO2Nhc2UgMTMzOmlbQS5wb3NdPUEsYi5zbmFtZXMucHVzaChBLm5hbWUpO2JyZWFrO2Nhc2UgMTA6aWYoLS1LKWJyZWFrO2lmKHMuZSl7aWYocy5lLnI+MCYmcy5lLmM+MCl7aWYocy5lLnItLSxzLmUuYy0tLG5bIiFyZWYiXT13ZShzKSx0''@;'; put 'put ''LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PXMuZS5yKXt2YXIgQWU9cy5lLnI7cy5lLnI9dC5zaGVldFJvd3MtMSxuWyIhZnVsbHJlZiJdPW5bIiFyZWYiXSxuWyIhcmVmIl09d2Uocykscy5lLnI9QWV9cy5lLnIrKyxzLmUuYysrfWxlLmxlbmd0aD4wJiYoblsiIW1lcmdlcyJdPWxlKSxyZS5s''@;'; put 'put ''ZW5ndGg+MCYmKG5bIiFvYmplY3RzIl09cmUpLGRlLmxlbmd0aD4wJiYoblsiIWNvbHMiXT1kZSksdWUubGVuZ3RoPjAmJihuWyIhcm93cyJdPXVlKSx5LlNoZWV0cy5wdXNoKFApfSIiPT09bz9sPW46YVtvXT1uLG49dC5kZW5zZT9bXTp7fTticmVhaztjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAx''@;'; put 'put ''MDMzOmNhc2UgMjA1NzppZig4PT09Yi5iaWZmJiYoYi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtaXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0EuQklGRlZlcl18fDgpLGIuYmlmZmd1ZXNzPTA9PUEuQklGRlZlciwwPT1BLkJJRkZWZXImJjQwOTY9PUEu''@;'; put 'put ''ZHQmJihiLmJpZmY9NSxqPSEwLE1yKGIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1iLmJpZmYmJjA9PUEuQklGRlZlciYmMTY9PUEuZHQmJihiLmJpZmY9MiksSysrKWJyZWFrO2lmKG49dC5kZW5zZT9bXTp7fSxiLmJpZmY8OCYmIWomJihqPSEwLE1yKGIuY29kZXBhZ2U9dC5jb2RlcGFnZXx8MTI1''@;'; put 'put ''MikpLGIuYmlmZjw1fHwwPT1BLkJJRkZWZXImJjQwOTY9PUEuZHQpeyIiPT09byYmKG89IlNoZWV0MSIpLHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgTGU9e3BvczplLmwtUSxuYW1lOm99O2lbTGUucG9zXT1MZSxiLnNuYW1lcy5wdXNoKG8pfWVsc2Ugbz0oaVtzZV18fHtuYW1l''@;'; put 'put ''OiIifSkubmFtZTszMj09QS5kdCYmKG5bIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUEuZHQmJihuWyIhdHlwZSJdPSJtYWNybyIpLGxlPVtdLHJlPVtdLGIuYXJyYXlmPVQ9W10sZGU9W10sdWU9W10sRmU9ITEsUD17SGlkZGVuOihpW3NlXXx8e2hzOjB9KS5ocyxuYW1lOm99O2JyZWFrO2Nhc2Ug''@;'; put 'put ''NTE1OmNhc2UgMzpjYXNlIDI6ImNoYXJ0Ij09blsiIXR5cGUiXSYmKHQuZGVuc2U/KG5bQS5yXXx8W10pW0EuY106bltnZSh7YzpBLmMscjpBLnJ9KV0pJiYrK0EuYyxnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV18fHt9LHY6QS52YWwsdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2''@;'; put 'put ''M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTpjYXNlIDUxNzpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnZhbCx0OkEudH0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCks''@;'; put 'put ''WCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA2Mzg6Zz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHY6QS5ya251bSx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAx''@;'; put 'put ''ODk6Zm9yKHZhciBDZT1BLmM7Q2U8PUEuQzsrK0NlKXt2YXIgb2U9QS5ya3JlY1tDZS1BLmNdWzBdO2c9e2l4ZmU6b2UsWEY6TVtvZV0sdjpBLnJrcmVjW0NlLUEuY11bMV0sdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6Q2Us''@;'; put 'put ''cjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSA2OmNhc2UgNTE4OmNhc2UgMTAzMDppZigiU3RyaW5nIj09QS52YWwpe2Y9QTticmVha31pZigoZz1PMChBLnZhbCxBLmNlbGwuaXhmZSxBLnR0KSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEpe3ZhciBxZT1BLmZvcm11bGE7aWYocWUmJnFlWzBd''@;'; put 'put ''JiZxZVswXVswXSYmIlB0Z0V4cCI9PXFlWzBdWzBdWzBdKXt2YXIganI9cWVbMF1bMF1bMV1bMF0sZnQ9cWVbMF1bMF1bMV1bMV0sdnQ9Z2Uoe3I6anIsYzpmdH0pO2tbdnRdP2cuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYik6Zy5GPSgodC5kZW5zZT8obltqcl18fFtdKVtmdF06''@;'; put 'put ''blt2dF0pfHx7fSkuRn1lbHNlIGcuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYil9Qz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWChBLmNlbGwsZyx0KSxmPUE7YnJlYWs7Y2FzZSA3OmNhc2UgNTE5OmlmKCFmKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtmLnZhbD1BLChnPU8wKEEsZi5jZWxsLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEmJihnLmY9IiIra3IoZi5mb3JtdWxhLDAsZi5jZWxsLGNlLGIpKSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChn''@;'; put 'put ''LHQsci5vcHRzLkRhdGUxOTA0KSxYKGYuY2VsbCxnLHQpLGY9bnVsbDticmVhaztjYXNlIDMzOmNhc2UgNTQ1OlQucHVzaChBKTt2YXIgSmE9Z2UoQVswXS5zKTtpZihkPXQuZGVuc2U/KG5bQVswXS5zLnJdfHxbXSlbQVswXS5zLmNdOm5bSmFdLHQuY2VsbEZvcm11bGEmJmQpe2lmKCFmfHwh''@;'; put 'put ''SmF8fCFkKWJyZWFrO2QuZj0iIitrcihBWzFdLDAsQVswXSxjZSxiKSxkLkY9d2UoQVswXSl9YnJlYWs7Y2FzZSAxMjEyOmlmKCF0LmNlbGxGb3JtdWxhKWJyZWFrO2lmKHgpe2lmKCFmKWJyZWFrO2tbZ2UoZi5jZWxsKV09QVswXSwoKGQ9dC5kZW5zZT8obltmLmNlbGwucl18fFtdKVtmLmNl''@;'; put 'put ''bGwuY106bltnZShmLmNlbGwpXSl8fHt9KS5mPSIiK2tyKEFbMF0sMCxoLGNlLGIpfWJyZWFrO2Nhc2UgMjUzOmc9TzAoY1tBLmlzc3RdLnQsQS5peGZlLCJzIiksY1tBLmlzc3RdLmgmJihnLmg9Y1tBLmlzc3RdLmgpLGcuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10p''@;'; put 'put ''LGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTEzOnQuc2hlZXRTdHVicyYmKGc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx0OiJ6In0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7''@;'; put 'put ''YzpBLmMscjpBLnJ9LGcsdCkpO2JyZWFrO2Nhc2UgMTkwOmlmKHQuc2hlZXRTdHVicylmb3IodmFyIE90PUEuYztPdDw9QS5DOysrT3Qpe3ZhciBMcj1BLml4ZmVbT3QtQS5jXTtnPXtpeGZlOkxyLFhGOk1bTHJdLHQ6InoifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5v''@;'; put 'put ''cHRzLkRhdGUxOTA0KSxYKHtjOk90LHI6QS5yfSxnLHQpfWJyZWFrO2Nhc2UgMjE0OmNhc2UgNTE2OmNhc2UgNDooZz1PMChBLnZhbCxBLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6''@;'; put 'put ''QS5yfSxnLHQpO2JyZWFrO2Nhc2UgMDpjYXNlIDUxMjoxPT09SyYmKHM9QSk7YnJlYWs7Y2FzZSAyNTI6Yz1BO2JyZWFrO2Nhc2UgMTA1NDppZig0PT1iLmJpZmYpe1VbQysrXT1BWzFdO2Zvcih2YXIgcHQ9MDtwdDxDKzE2MyYmcGVbcHRdIT1BWzFdOysrcHQpO3B0Pj0xNjMmJmV0KEFbMV0s''@;'; put 'put ''QysxNjMpfWVsc2UgZXQoQVsxXSxBWzBdKTticmVhaztjYXNlIDMwOlVbQysrXT1BO2Zvcih2YXIgSXQ9MDtJdDxDKzE2MyYmcGVbSXRdIT1BOysrSXQpO0l0Pj0xNjMmJmV0KEEsQysxNjMpO2JyZWFrO2Nhc2UgMjI5OmxlPWxlLmNvbmNhdChBKTticmVhaztjYXNlIDkzOnJlW0EuY21vWzBd''@;'; put 'put ''XT1iLmxhc3RvYmo9QTticmVhaztjYXNlIDQzODpiLmxhc3RvYmouVHhPPUE7YnJlYWs7Y2FzZSAxMjc6Yi5sYXN0b2JqLkltRGF0YT1BO2JyZWFrO2Nhc2UgNDQwOmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBdLmUuYzsrK3UpKGQ9dC5kZW5z''@;'; put 'put ''ZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiYoZC5sPUFbMV0pO2JyZWFrO2Nhc2UgMjA0ODpmb3IocD1BWzBdLnMucjtwPD1BWzBdLmUucjsrK3ApZm9yKHU9QVswXS5zLmM7dTw9QVswXS5lLmM7Kyt1KShkPXQuZGVuc2U/KG5bcF18fFtdKVt1XTpuW2dlKHtjOnUscjpwfSld''@;'; put 'put ''KSYmZC5sJiYoZC5sLlRvb2x0aXA9QVsxXSk7YnJlYWs7Y2FzZSAyODppZihiLmJpZmY8PTUmJmIuYmlmZj49MilicmVhaztkPXQuZGVuc2U/KG5bQVswXS5yXXx8W10pW0FbMF0uY106bltnZShBWzBdKV07dmFyIHFhPXJlW0FbMl1dO2R8fCh0LmRlbnNlPyhuW0FbMF0ucl18fChuW0FbMF0u''@;'; put 'put ''cl09W10pLGQ9bltBWzBdLnJdW0FbMF0uY109e3Q6InoifSk6ZD1uW2dlKEFbMF0pXT17dDoieiJ9LHMuZS5yPU1hdGgubWF4KHMuZS5yLEFbMF0ucikscy5zLnI9TWF0aC5taW4ocy5zLnIsQVswXS5yKSxzLmUuYz1NYXRoLm1heChzLmUuYyxBWzBdLmMpLHMucy5jPU1hdGgubWluKHMucy5j''@;'; put 'put ''LEFbMF0uYykpLGQuY3x8KGQuYz1bXSksZC5jLnB1c2goe2E6QVsxXSx0OnFhLlR4Ty50fSk7YnJlYWs7Y2FzZSAyMTczOnExKDAsQS5leHQpO2JyZWFrO2Nhc2UgMTI1OmlmKCFiLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtBLmU+PUEuczspZGVbQS5lLS1dPXt3aWR0aDpBLncvMjU2LGxldmVs''@;'; put 'put ''OkEubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQS5mbGFncyl9LEZlfHwoRmU9ITAsQW4oQS53LzI1NikpLEt0KGRlW0EuZSsxXSk7YnJlYWs7Y2FzZSA1MjA6dmFyIHlyPXt9O251bGwhPUEubGV2ZWwmJih1ZVtBLnJdPXlyLHlyLmxldmVsPUEubGV2ZWwpLEEuaGlkZGVuJiYodWVbQS5yXT15cix5''@;'; put 'put ''ci5oaWRkZW49ITApLEEuaHB0JiYodWVbQS5yXT15cix5ci5ocHQ9QS5ocHQseXIuaHB4PW9hKEEuaHB0KSk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdW3szODoibGVmdCIsMzk6''@;'; put 'put ''InJpZ2h0Iiw0MDoidG9wIiw0MToiYm90dG9tIn1bWl1dPUE7YnJlYWs7Y2FzZSAxNjE6blsiIW1hcmdpbnMiXXx8WXQoblsiIW1hcmdpbnMiXT17fSksblsiIW1hcmdpbnMiXS5oZWFkZXI9QS5oZWFkZXIsblsiIW1hcmdpbnMiXS5mb290ZXI9QS5mb290ZXI7YnJlYWs7Y2FzZSA1NzQ6QS5S''@;'; put 'put ''VEwmJih5LlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSAxNDY6ST1BO2JyZWFrO2Nhc2UgMjE5ODplZT1BO2JyZWFrO2Nhc2UgMTQwOk49QTticmVhaztjYXNlIDQ0MjpvP1AuQ29kZU5hbWU9QXx8UC5uYW1lOnkuV0JQcm9wcy5Db2RlTmFtZT1BfHwiVGhpc1dvcmtib29rIn19ZWxzZSBZ''@;'; put 'put ''fHxjb25zb2xlLmVycm9yKCJNaXNzaW5nIEluZm8gZm9yIFhMUyBSZWNvcmQgMHgiK1oudG9TdHJpbmcoMTYpKSxlLmwrPVF9cmV0dXJuIHIuU2hlZXROYW1lcz0kZShpKS5zb3J0KGZ1bmN0aW9uKGN0LHllKXtyZXR1cm4gTnVtYmVyKGN0KS1OdW1iZXIoeWUpfSkubWFwKGZ1bmN0aW9uKGN0''@;'; put 'put ''KXtyZXR1cm4gaVtjdF0ubmFtZX0pLHQuYm9va1NoZWV0c3x8KHIuU2hlZXRzPWEpLCFyLlNoZWV0TmFtZXMubGVuZ3RoJiZsWyIhcmVmIl0/KHIuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxyLlNoZWV0cyYmKHIuU2hlZXRzLlNoZWV0MT1sKSk6ci5QcmVhbWJsZT1sLHIuU2hlZXRzJiZP''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oY3QseWUpe3IuU2hlZXRzW3IuU2hlZXROYW1lc1t5ZV1dWyIhYXV0b2ZpbHRlciJdPWN0fSksci5TdHJpbmdzPWMsci5TU0Y9TWUocGUpLGIuZW5jJiYoci5FbmNyeXB0aW9uPWIuZW5jKSxlZSYmKHIuVGhlbWVzPWVlKSxyLk1ldGFkYXRhPXt9LHZvaWQgMCE9''@;'; put 'put ''PU4mJihyLk1ldGFkYXRhLkNvdW50cnk9TiksY2UubmFtZXMubGVuZ3RoPjAmJih5Lk5hbWVzPWNlLm5hbWVzKSxyLldvcmtib29rPXkscn0oYS5jb250ZW50LHQpO2Vsc2UgaWYoKGk9dmUuZmluZChlLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmkuY29udGVudCluPWp0LnRvX3dvcmtib29r''@;'; put 'put ''KGkuY29udGVudCwodC50eXBlPXMsdCkpO2Vsc2V7aWYoIShpPXZlLmZpbmQoZSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhaS5jb250ZW50KXRocm93KGk9dmUuZmluZChlLCJNTjAiKSkmJmkuY29udGVudD9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDQgZm9yIE1hYyBmaWxlIik6''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtuPWp0LnRvX3dvcmtib29rKGkuY29udGVudCwodC50eXBlPXMsdCkpfXQuYm9va1ZCQSYmZS5GdWxsUGF0aHMmJnZlLmZpbmQoZSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYobi52YmFyYXc9ZnVuY3Rpb24g''@;'; put 'put ''RngoZSl7dmFyIHQ9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihyLGEpe2lmKCIvIiE9PXIuc2xpY2UoLTEpJiZyLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBuPXIucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5y''@;'; put 'put ''ZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZCh0LG4sZS5GaWxlSW5kZXhbYV0uY29udGVudCl9fSksdmUud3JpdGUodCl9KGUpKX12YXIgZj17fTtyZXR1cm4gZS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGxtKGUsdCxyKXt2YXIgYT12ZS5maW5k''@;'; put 'put ''KGUsIi8hRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihhJiZhLnNpemU+MCl0cnl7dmFyIG49UnMoYSx4bix6YS5EU0kpO2Zvcih2YXIgaSBpbiBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24i''@;'; put 'put ''KTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbix6YS5TSSk7Zm9yKHZhciBjIGluIGYpbnVsbD09dFtjXSYmKHRbY109ZltjXSl9Y2F0Y2gobyl7aWYoci5XVEYpdGhyb3cgb310LkhlYWRpbmdQYWlycyYmdC5UaXRsZXNPZlBhcnRzJiYod3ModC5IZWFkaW5nUGFpcnMsdC5UaXRs''@;'; put 'put ''ZXNPZlBhcnRzLHQsciksZGVsZXRlIHQuSGVhZGluZ1BhaXJzLGRlbGV0ZSB0LlRpdGxlc09mUGFydHMpfShlLGYsdCksbi5Qcm9wcz1uLkN1c3Rwcm9wcz1mLHQuYm9va0ZpbGVzJiYobi5jZmI9ZSksbn12YXIgJGE9ezA6e2Y6ZnVuY3Rpb24gUHYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3Iu''@;'; put 'put ''cj1lLnJlYWRfc2hpZnQoNCksZS5sKz00O3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTE7dmFyIGk9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmw9YSw3JmkmJihyLmxldmVsPTcmaSksMTYmaSYmKHIuaGlkZGVuPSEwKSwzMiZpJiYoci5ocHQ9bi8yMCkscn19LDE6e2Y6ZnVuY3Rpb24g''@;'; put 'put ''WHYoZSl7cmV0dXJuW0hyKGUpXX19LDI6e2Y6ZnVuY3Rpb24gYzIoZSl7cmV0dXJuW0hyKGUpLHVuKGUpLCJuIl19fSwzOntmOmZ1bmN0aW9uIHF2KGUpe3JldHVybltIcihlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e2Y6ZnVuY3Rpb24ganYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9z''@;'; put 'put ''aGlmdCgxKSwiYiJdfX0sNTp7ZjpmdW5jdGlvbiBpMihlKXtyZXR1cm5bSHIoZSksZ3IoZSksIm4iXX19LDY6e2Y6ZnVuY3Rpb24geDIoZSl7cmV0dXJuW0hyKGUpLG1yKGUpLCJzdHIiXX19LDc6e2Y6ZnVuY3Rpb24gcjIoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0s''@;'; put 'put ''ODp7ZjpmdW5jdGlvbiB3MihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLG1yKGUpLCJzdHIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTty''@;'; put 'put ''ZXR1cm4gc319LDk6e2Y6ZnVuY3Rpb24gXzIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixncihlKSwibiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNl''@;'; put 'put ''IGUubD1hO3JldHVybiBzfX0sMTA6e2Y6ZnVuY3Rpb24gbTIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxu''@;'; put 'put ''LHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDExOntmOmZ1bmN0aW9uIGcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07dmFyIHM9W24sZS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1l''@;'; put 'put ''Lmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMjp7ZjpmdW5jdGlvbiB6dihlKXtyZXR1cm5bTXQoZSldfX0sMTM6e2Y6ZnVuY3Rpb24gbDIoZSl7cmV0dXJuW010KGUpLHVuKGUpLCJuIl19fSwxNDp7ZjpmdW5jdGlvbiBRdihlKXtyZXR1''@;'; put 'put ''cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7ZjpmdW5jdGlvbiBZdihlKXtyZXR1cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7ZjpCZn0sMTc6e2Y6ZnVuY3Rpb24gdjIoZSl7cmV0dXJuW010KGUpLG1yKGUpLCJzdHIiXX19LDE4OntmOmZ1bmN0aW9uIGEy''@;'; put 'put ''KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntmOnNufSwyMDp7fSwyMTp7fSwyMjp7fSwyMzp7fSwyNDp7fSwyNTp7fSwyNjp7fSwyNzp7fSwyODp7fSwyOTp7fSwzMDp7fSwzMTp7fSwzMjp7fSwzMzp7fSwzNDp7fSwzNTp7VDoxfSwzNjp7VDotMX0sMzc6e1Q6''@;'; put 'put ''MX0sMzg6e1Q6LTF9LDM5OntmOmZ1bmN0aW9uIHBwKGUsdCxyKXt2YXIgYT1lLmwrdDtlLmwrPTQsZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCg0KSxpPWpvKGUpLHM9ZXYoZSwwLHIpLGY9Zm4oZSk7ZS5sPWE7dmFyIGM9e05hbWU6aSxQdGc6c307cmV0dXJuIG48MjY4NDM1NDU1JiYoYy5T''@;'; put 'put ''aGVldD1uKSxmJiYoYy5Db21tZW50PWYpLGN9fSw0MDp7fSw0Mjp7fSw0Mzp7ZjpmdW5jdGlvbiB2MShlLHQscil7dmFyIGE9e307YS5zej1lLnJlYWRfc2hpZnQoMikvMjA7dmFyIG49ZnVuY3Rpb24gWW8oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrKyx7ZkJvbGQ6MSZ0''@;'; put 'put ''LGZJdGFsaWM6MiZ0LGZVbmRlcmxpbmU6NCZ0LGZTdHJpa2VvdXQ6OCZ0LGZPdXRsaW5lOjE2JnQsZlNoYWRvdzozMiZ0LGZDb25kZW5zZTo2NCZ0LGZFeHRlbmQ6MTI4JnR9fShlKTtzd2l0Y2gobi5mSXRhbGljJiYoYS5pdGFsaWM9MSksbi5mQ29uZGVuc2UmJihhLmNvbmRlbnNlPTEpLG4u''@;'; put 'put ''ZkV4dGVuZCYmKGEuZXh0ZW5kPTEpLG4uZlNoYWRvdyYmKGEuc2hhZG93PTEpLG4uZk91dGxpbmUmJihhLm91dGxpbmU9MSksbi5mU3RyaWtlb3V0JiYoYS5zdHJpa2U9MSksNzAwPT09ZS5yZWFkX3NoaWZ0KDIpJiYoYS5ib2xkPTEpLGUucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOmEudmVydEFs''@;'; put 'put ''aWduPSJzdXBlcnNjcmlwdCI7YnJlYWs7Y2FzZSAyOmEudmVydEFsaWduPSJzdWJzY3JpcHQifXZhciBzPWUucmVhZF9zaGlmdCgxKTswIT1zJiYoYS51bmRlcmxpbmU9cyk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDEpO2Y+MCYmKGEuZmFtaWx5PWYpO3ZhciBjPWUucmVhZF9zaGlmdCgxKTtzd2l0''@;'; put 'put ''Y2goYz4wJiYoYS5jaGFyc2V0PWMpLGUubCsrLGEuY29sb3I9ZnVuY3Rpb24gS28oZSl7dmFyIHQ9e30sYT1lLnJlYWRfc2hpZnQoMSk+Pj4xLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ZS5yZWFkX3NoaWZ0KDIsImkiKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdCgxKSxjPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtzd2l0Y2goZS5sKyssYSl7Y2FzZSAwOnQuYXV0bz0xO2JyZWFrO2Nhc2UgMTp0LmluZGV4PW47dmFyIG89VnRbbl07byYmKHQucmdiPWJhKG8pKTticmVhaztjYXNlIDI6dC5yZ2I9YmEoW3MsZixjXSk7YnJlYWs7Y2FzZSAzOnQudGhlbWU9bn1yZXR1cm4gMCE9aSYmKHQu''@;'; put 'put ''dGludD1pPjA/aS8zMjc2NzppLzMyNzY4KSx0fShlKSxlLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTphLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjphLnNjaGVtZT0ibWlub3IifXJldHVybiBhLm5hbWU9bXIoZSksYX19LDQ0OntmOmZ1bmN0aW9uIHgxKGUsdCl7cmV0dXJuW2UucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxtcihlKV19fSw0NTp7ZjpnMX0sNDY6e2Y6dzF9LDQ3OntmOmZ1bmN0aW9uIF8xKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1yLHtpeGZlOmEsbnVtRm10SWQ6bn19fSw0ODp7fSw0OTp7ZjpmdW5jdGlvbiBI''@;'; put 'put ''byhlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKX19LDUwOnt9LDUxOntmOmZ1bmN0aW9uIGV4KGUpe2Zvcih2YXIgdD1bXSxyPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChbZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV0pO3JldHVybiB0fX0sNTI6e1Q6MX0sNTM6''@;'; put 'put ''e1Q6LTF9LDU0OntUOjF9LDU1OntUOi0xfSw1Njp7VDoxfSw1Nzp7VDotMX0sNTg6e30sNTk6e30sNjA6e2Y6UXN9LDYyOntmOmZ1bmN0aW9uIGgyKGUpe3JldHVybltIcihlKSxzbihlKSwiaXMiXX19LDYzOntmOmZ1bmN0aW9uIG94KGUpe3ZhciB0PXt9O3QuaT1lLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''dmFyIHI9e307ci5yPWUucmVhZF9zaGlmdCg0KSxyLmM9ZS5yZWFkX3NoaWZ0KDQpLHQucj1nZShyKTt2YXIgYT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImYSYmKHQubD0iMSIpLDgmYSYmKHQuYT0iMSIpLHR9fSw2NDp7ZjpmdW5jdGlvbiBMMigpe319LDY1Ont9LDY2Ont9LDY3Ont9LDY4''@;'; put 'put ''Ont9LDY5Ont9LDcwOnt9LDEyODp7fSwxMjk6e1Q6MX0sMTMwOntUOi0xfSwxMzE6e1Q6MSxmOnByLHA6MH0sMTMyOntUOi0xfSwxMzM6e1Q6MX0sMTM0OntUOi0xfSwxMzU6e1Q6MX0sMTM2OntUOi0xfSwxMzc6e1Q6MSxmOmZ1bmN0aW9uIFIyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKTty''@;'; put 'put ''ZXR1cm4gZS5sKz0yOCx7UlRMOjMyJnR9fX0sMTM4OntUOi0xfSwxMzk6e1Q6MX0sMTQwOntUOi0xfSwxNDE6e1Q6MX0sMTQyOntUOi0xfSwxNDM6e1Q6MX0sMTQ0OntUOi0xfSwxNDU6e1Q6MX0sMTQ2OntUOi0xfSwxNDc6e2Y6ZnVuY3Rpb24gSHYoZSx0KXt2YXIgcj17fSxhPWVbZS5sXTty''@;'; put 'put ''ZXR1cm4rK2UubCxyLmFib3ZlPSEoNjQmYSksci5sZWZ0PSEoMTI4JmEpLGUubCs9MTgsci5uYW1lPSRvKGUsdC0xOSkscn19LDE0ODp7ZjpNdixwOjE2fSwxNTE6e2Y6ZnVuY3Rpb24geTIoKXt9fSwxNTI6e30sMTUzOntmOmZ1bmN0aW9uIHhwKGUsdCl7dmFyIHI9e30sYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCk7ci5kZWZhdWx0VGhlbWVWZXJzaW9uPWUucmVhZF9zaGlmdCg0KTt2YXIgbj10Pjg/bXIoZSk6IiI7cmV0dXJuIG4ubGVuZ3RoPjAmJihyLkNvZGVOYW1lPW4pLHIuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmYSksci5iYWNrdXBGaWxlPSEhKDY0JmEpLHIuY2hlY2tDb21w''@;'; put 'put ''YXRpYmlsaXR5PSEhKDQwOTYmYSksci5kYXRlMTkwND0hISgxJmEpLHIuZmlsdGVyUHJpdmFjeT0hISg4JmEpLHIuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmYSksci5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZhKSxyLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmEpLHIucmVmcmVzaEFsbENv''@;'; put 'put ''bm5lY3Rpb25zPSEhKDI2MjE0NCZhKSxyLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JmEpLHIuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZhKSxyLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJmEpLHIuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25l''@;'; put 'put ''Il1bYT4+MTMmM10sci5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZhKSxyLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bYT4+OCYzXSxyfX0sMTU0Ont9LDE1NTp7fSwxNTY6e2Y6ZnVuY3Rpb24gdXAoZSx0KXt2YXIgcj17fTtyZXR1cm4gci5IaWRkZW49''@;'; put 'put ''ZS5yZWFkX3NoaWZ0KDQpLHIuaVRhYklEPWUucmVhZF9zaGlmdCg0KSxyLnN0clJlbElEPW9uKGUsdC04KSxyLm5hbWU9bXIoZSkscn19LDE1Nzp7fSwxNTg6e30sMTU5OntUOjEsZjpmdW5jdGlvbiBPaChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19fSwxNjA6''@;'; put 'put ''e1Q6LTF9LDE2MTp7VDoxLGY6V3R9LDE2Mjp7VDotMX0sMTYzOntUOjF9LDE2NDp7VDotMX0sMTY1OntUOjF9LDE2Njp7VDotMX0sMTY3Ont9LDE2ODp7fSwxNjk6e30sMTcwOnt9LDE3MTp7fSwxNzI6e1Q6MX0sMTczOntUOi0xfSwxNzQ6e30sMTc1Ont9LDE3Njp7ZjprMn0sMTc3OntUOjF9''@;'; put 'put ''LDE3ODp7VDotMX0sMTc5OntUOjF9LDE4MDp7VDotMX0sMTgxOntUOjF9LDE4Mjp7VDotMX0sMTgzOntUOjF9LDE4NDp7VDotMX0sMTg1OntUOjF9LDE4Njp7VDotMX0sMTg3OntUOjF9LDE4ODp7VDotMX0sMTg5OntUOjF9LDE5MDp7VDotMX0sMTkxOntUOjF9LDE5Mjp7VDotMX0sMTkzOntU''@;'; put 'put ''OjF9LDE5NDp7VDotMX0sMTk1OntUOjF9LDE5Njp7VDotMX0sMTk3OntUOjF9LDE5ODp7VDotMX0sMTk5OntUOjF9LDIwMDp7VDotMX0sMjAxOntUOjF9LDIwMjp7VDotMX0sMjAzOntUOjF9LDIwNDp7VDotMX0sMjA1OntUOjF9LDIwNjp7VDotMX0sMjA3OntUOjF9LDIwODp7VDotMX0sMjA5''@;'; put 'put ''OntUOjF9LDIxMDp7VDotMX0sMjExOntUOjF9LDIxMjp7VDotMX0sMjEzOntUOjF9LDIxNDp7VDotMX0sMjE1OntUOjF9LDIxNjp7VDotMX0sMjE3OntUOjF9LDIxODp7VDotMX0sMjE5OntUOjF9LDIyMDp7VDotMX0sMjIxOntUOjF9LDIyMjp7VDotMX0sMjIzOntUOjF9LDIyNDp7VDotMX0s''@;'; put 'put ''MjI1OntUOjF9LDIyNjp7VDotMX0sMjI3OntUOjF9LDIyODp7VDotMX0sMjI5OntUOjF9LDIzMDp7VDotMX0sMjMxOntUOjF9LDIzMjp7VDotMX0sMjMzOntUOjF9LDIzNDp7VDotMX0sMjM1OntUOjF9LDIzNjp7VDotMX0sMjM3OntUOjF9LDIzODp7VDotMX0sMjM5OntUOjF9LDI0MDp7VDot''@;'; put 'put ''MX0sMjQxOntUOjF9LDI0Mjp7VDotMX0sMjQzOntUOjF9LDI0NDp7VDotMX0sMjQ1OntUOjF9LDI0Njp7VDotMX0sMjQ3OntUOjF9LDI0ODp7VDotMX0sMjQ5OntUOjF9LDI1MDp7VDotMX0sMjUxOntUOjF9LDI1Mjp7VDotMX0sMjUzOntUOjF9LDI1NDp7VDotMX0sMjU1OntUOjF9LDI1Njp7''@;'; put 'put ''VDotMX0sMjU3OntUOjF9LDI1ODp7VDotMX0sMjU5OntUOjF9LDI2MDp7VDotMX0sMjYxOntUOjF9LDI2Mjp7VDotMX0sMjYzOntUOjF9LDI2NDp7VDotMX0sMjY1OntUOjF9LDI2Njp7VDotMX0sMjY3OntUOjF9LDI2ODp7VDotMX0sMjY5OntUOjF9LDI3MDp7VDotMX0sMjcxOntUOjF9LDI3''@;'; put 'put ''Mjp7VDotMX0sMjczOntUOjF9LDI3NDp7VDotMX0sMjc1OntUOjF9LDI3Njp7VDotMX0sMjc3Ont9LDI3ODp7VDoxfSwyNzk6e1Q6LTF9LDI4MDp7VDoxfSwyODE6e1Q6LTF9LDI4Mjp7VDoxfSwyODM6e1Q6MX0sMjg0OntUOi0xfSwyODU6e1Q6MX0sMjg2OntUOi0xfSwyODc6e1Q6MX0sMjg4''@;'; put 'put ''OntUOi0xfSwyODk6e1Q6MX0sMjkwOntUOi0xfSwyOTE6e1Q6MX0sMjkyOntUOi0xfSwyOTM6e1Q6MX0sMjk0OntUOi0xfSwyOTU6e1Q6MX0sMjk2OntUOi0xfSwyOTc6e1Q6MX0sMjk4OntUOi0xfSwyOTk6e1Q6MX0sMzAwOntUOi0xfSwzMDE6e1Q6MX0sMzAyOntUOi0xfSwzMDM6e1Q6MX0s''@;'; put 'put ''MzA0OntUOi0xfSwzMDU6e1Q6MX0sMzA2OntUOi0xfSwzMDc6e1Q6MX0sMzA4OntUOi0xfSwzMDk6e1Q6MX0sMzEwOntUOi0xfSwzMTE6e1Q6MX0sMzEyOntUOi0xfSwzMTM6e1Q6LTF9LDMxNDp7VDoxfSwzMTU6e1Q6LTF9LDMxNjp7VDoxfSwzMTc6e1Q6LTF9LDMxODp7VDoxfSwzMTk6e1Q6''@;'; put 'put ''LTF9LDMyMDp7VDoxfSwzMjE6e1Q6LTF9LDMyMjp7VDoxfSwzMjM6e1Q6LTF9LDMyNDp7VDoxfSwzMjU6e1Q6LTF9LDMyNjp7VDoxfSwzMjc6e1Q6LTF9LDMyODp7VDoxfSwzMjk6e1Q6LTF9LDMzMDp7VDoxfSwzMzE6e1Q6LTF9LDMzMjp7VDoxfSwzMzM6e1Q6LTF9LDMzNDp7VDoxfSwzMzU6''@;'; put 'put ''e2Y6ZnVuY3Rpb24gWjEoZSx0KXtyZXR1cm57ZmxhZ3M6ZS5yZWFkX3NoaWZ0KDQpLHZlcnNpb246ZS5yZWFkX3NoaWZ0KDQpLG5hbWU6bXIoZSl9fX0sMzM2OntUOi0xfSwzMzc6e2Y6ZnVuY3Rpb24gYXgoZSl7cmV0dXJuIGUubCs9NCwwIT1lLnJlYWRfc2hpZnQoNCl9LFQ6MX0sMzM4OntU''@;'; put 'put ''Oi0xfSwzMzk6e1Q6MX0sMzQwOntUOi0xfSwzNDE6e1Q6MX0sMzQyOntUOi0xfSwzNDM6e1Q6MX0sMzQ0OntUOi0xfSwzNDU6e1Q6MX0sMzQ2OntUOi0xfSwzNDc6e1Q6MX0sMzQ4OntUOi0xfSwzNDk6e1Q6MX0sMzUwOntUOi0xfSwzNTE6e30sMzUyOnt9LDM1Mzp7VDoxfSwzNTQ6e1Q6LTF9''@;'; put 'put ''LDM1NTp7Zjpvbn0sMzU3Ont9LDM1ODp7fSwzNTk6e30sMzYwOntUOjF9LDM2MTp7fSwzNjI6e2Y6cXN9LDM2Mzp7fSwzNjQ6e30sMzY2Ont9LDM2Nzp7fSwzNjg6e30sMzY5Ont9LDM3MDp7fSwzNzE6e30sMzcyOntUOjF9LDM3Mzp7VDotMX0sMzc0OntUOjF9LDM3NTp7VDotMX0sMzc2OntU''@;'; put 'put ''OjF9LDM3Nzp7VDotMX0sMzc4OntUOjF9LDM3OTp7VDotMX0sMzgwOntUOjF9LDM4MTp7VDotMX0sMzgyOntUOjF9LDM4Mzp7VDotMX0sMzg0OntUOjF9LDM4NTp7VDotMX0sMzg2OntUOjF9LDM4Nzp7VDotMX0sMzg4OntUOjF9LDM4OTp7VDotMX0sMzkwOntUOjF9LDM5MTp7VDotMX0sMzky''@;'; put 'put ''OntUOjF9LDM5Mzp7VDotMX0sMzk0OntUOjF9LDM5NTp7VDotMX0sMzk2Ont9LDM5Nzp7fSwzOTg6e30sMzk5Ont9LDQwMDp7fSw0MDE6e1Q6MX0sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDA5Ont9LDQxMDp7fSw0MTE6e30sNDEyOnt9LDQxMzp7fSw0MTQ6''@;'; put 'put ''e30sNDE1Ont9LDQxNjp7fSw0MTc6e30sNDE4Ont9LDQxOTp7fSw0MjA6e30sNDIxOnt9LDQyMjp7VDoxfSw0MjM6e1Q6MX0sNDI0OntUOi0xfSw0MjU6e1Q6LTF9LDQyNjp7ZjpmdW5jdGlvbiBBMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1vcyhlKSxpPWUucmVhZF9zaGlmdCgxKSxzPVtuXTtp''@;'; put 'put ''ZihzWzJdPWksci5jZWxsRm9ybXVsYSl7dmFyIGY9UWQoZSxhLWUubCxyKTtzWzFdPWZ9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDQyNzp7ZjpmdW5jdGlvbiBDMihlLHQscil7dmFyIGE9ZS5sK3QsaT1bV3QoZSwxNildO2lmKHIuY2VsbEZvcm11bGEpe3ZhciBzPXJ2KGUsYS1lLmwscik7aVsx''@;'; put 'put ''XT1zLGUubD1hfWVsc2UgZS5sPWE7cmV0dXJuIGl9fSw0Mjg6e30sNDI5OntUOjF9LDQzMDp7VDotMX0sNDMxOntUOjF9LDQzMjp7VDotMX0sNDMzOntUOjF9LDQzNDp7VDotMX0sNDM1OntUOjF9LDQzNjp7VDotMX0sNDM3OntUOjF9LDQzODp7VDotMX0sNDM5OntUOjF9LDQ0MDp7VDotMX0s''@;'; put 'put ''NDQxOntUOjF9LDQ0Mjp7VDotMX0sNDQzOntUOjF9LDQ0NDp7VDotMX0sNDQ1OntUOjF9LDQ0Njp7VDotMX0sNDQ3OntUOjF9LDQ0ODp7VDotMX0sNDQ5OntUOjF9LDQ1MDp7VDotMX0sNDUxOntUOjF9LDQ1Mjp7VDotMX0sNDUzOntUOjF9LDQ1NDp7VDotMX0sNDU1OntUOjF9LDQ1Njp7VDot''@;'; put 'put ''MX0sNDU3OntUOjF9LDQ1ODp7VDotMX0sNDU5OntUOjF9LDQ2MDp7VDotMX0sNDYxOntUOjF9LDQ2Mjp7VDotMX0sNDYzOntUOjF9LDQ2NDp7VDotMX0sNDY1OntUOjF9LDQ2Njp7VDotMX0sNDY3OntUOjF9LDQ2ODp7VDotMX0sNDY5OntUOjF9LDQ3MDp7VDotMX0sNDcxOnt9LDQ3Mjp7fSw0''@;'; put 'put ''NzM6e1Q6MX0sNDc0OntUOi0xfSw0NzU6e30sNDc2OntmOmZ1bmN0aW9uIE8yKGUpe3ZhciB0PXt9O3JldHVybiBNZi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09Z3IoZSl9KSx0fX0sNDc3Ont9LDQ3ODp7fSw0Nzk6e1Q6MX0sNDgwOntUOi0xfSw0ODE6e1Q6MX0sNDgyOntUOi0xfSw0ODM6''@;'; put 'put ''e1Q6MX0sNDg0OntUOi0xfSw0ODU6e2Y6ZnVuY3Rpb24gV3YoKXt9fSw0ODY6e1Q6MX0sNDg3OntUOi0xfSw0ODg6e1Q6MX0sNDg5OntUOi0xfSw0OTA6e1Q6MX0sNDkxOntUOi0xfSw0OTI6e1Q6MX0sNDkzOntUOi0xfSw0OTQ6e2Y6ZnVuY3Rpb24gUzIoZSx0KXt2YXIgcj1lLmwrdCxhPVd0''@;'; put 'put ''KGUsMTYpLG49Zm4oZSksaT1tcihlKSxzPW1yKGUpLGY9bXIoZSk7ZS5sPXI7dmFyIGM9e3JmeDphLHJlbElkOm4sbG9jOmksZGlzcGxheTpmfTtyZXR1cm4gcyYmKGMuVG9vbHRpcD1zKSxjfX0sNDk1OntUOjF9LDQ5Njp7VDotMX0sNDk3OntUOjF9LDQ5ODp7VDotMX0sNDk5Ont9LDUwMDp7''@;'; put 'put ''VDoxfSw1MDE6e1Q6LTF9LDUwMjp7VDoxfSw1MDM6e1Q6LTF9LDUwNDp7fSw1MDU6e1Q6MX0sNTA2OntUOi0xfSw1MDc6e30sNTA4OntUOjF9LDUwOTp7VDotMX0sNTEwOntUOjF9LDUxMTp7VDotMX0sNTEyOnt9LDUxMzp7fSw1MTQ6e1Q6MX0sNTE1OntUOi0xfSw1MTY6e1Q6MX0sNTE3OntU''@;'; put 'put ''Oi0xfSw1MTg6e1Q6MX0sNTE5OntUOi0xfSw1MjA6e1Q6MX0sNTIxOntUOi0xfSw1MjI6e30sNTIzOnt9LDUyNDp7fSw1MjU6e30sNTI2Ont9LDUyNzp7fSw1Mjg6e1Q6MX0sNTI5OntUOi0xfSw1MzA6e1Q6MX0sNTMxOntUOi0xfSw1MzI6e1Q6MX0sNTMzOntUOi0xfSw1MzQ6e30sNTM1Ont9''@;'; put 'put ''LDUzNjp7fSw1Mzc6e30sNTM4OntUOjF9LDUzOTp7VDotMX0sNTQwOntUOjF9LDU0MTp7VDotMX0sNTQyOntUOjF9LDU0ODp7fSw1NDk6e30sNTUwOntmOm9ufSw1NTE6e30sNTUyOnt9LDU1Mzp7fSw1NTQ6e1Q6MX0sNTU1OntUOi0xfSw1NTY6e1Q6MX0sNTU3OntUOi0xfSw1NTg6e1Q6MX0s''@;'; put 'put ''NTU5OntUOi0xfSw1NjA6e1Q6MX0sNTYxOntUOi0xfSw1NjI6e30sNTY0Ont9LDU2NTp7VDoxfSw1NjY6e1Q6LTF9LDU2OTp7VDoxfSw1NzA6e1Q6LTF9LDU3Mjp7fSw1NzM6e1Q6MX0sNTc0OntUOi0xfSw1Nzc6e30sNTc4Ont9LDU3OTp7fSw1ODA6e30sNTgxOnt9LDU4Mjp7fSw1ODM6e30s''@;'; put 'put ''NTg0Ont9LDU4NTp7fSw1ODY6e30sNTg3Ont9LDU4ODp7VDotMX0sNTg5Ont9LDU5MDp7VDoxfSw1OTE6e1Q6LTF9LDU5Mjp7VDoxfSw1OTM6e1Q6LTF9LDU5NDp7VDoxfSw1OTU6e1Q6LTF9LDU5Njp7fSw1OTc6e1Q6MX0sNTk4OntUOi0xfSw1OTk6e1Q6MX0sNjAwOntUOi0xfSw2MDE6e1Q6''@;'; put 'put ''MX0sNjAyOntUOi0xfSw2MDM6e1Q6MX0sNjA0OntUOi0xfSw2MDU6e1Q6MX0sNjA2OntUOi0xfSw2MDc6e30sNjA4OntUOjF9LDYwOTp7VDotMX0sNjEwOnt9LDYxMTp7VDoxfSw2MTI6e1Q6LTF9LDYxMzp7VDoxfSw2MTQ6e1Q6LTF9LDYxNTp7VDoxfSw2MTY6e1Q6LTF9LDYxNzp7VDoxfSw2''@;'; put 'put ''MTg6e1Q6LTF9LDYxOTp7VDoxfSw2MjA6e1Q6LTF9LDYyNTp7fSw2MjY6e1Q6MX0sNjI3OntUOi0xfSw2Mjg6e1Q6MX0sNjI5OntUOi0xfSw2MzA6e1Q6MX0sNjMxOntUOi0xfSw2MzI6e2Y6d3h9LDYzMzp7VDoxfSw2MzQ6e1Q6LTF9LDYzNTp7VDoxLGY6ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9''@;'; put 'put ''e307dC5pYXV0aG9yPWUucmVhZF9zaGlmdCg0KTt2YXIgcj1XdChlLDE2KTtyZXR1cm4gdC5yZng9ci5zLHQucmVmPWdlKHIucyksZS5sKz0xNix0fX0sNjM2OntUOi0xfSw2Mzc6e2Y6R299LDYzODp7VDoxfSw2Mzk6e30sNjQwOntUOi0xfSw2NDE6e1Q6MX0sNjQyOntUOi0xfSw2NDM6e1Q6''@;'; put 'put ''MX0sNjQ0Ont9LDY0NTp7VDotMX0sNjQ2OntUOjF9LDY0ODp7VDoxfSw2NDk6e30sNjUwOntUOi0xfSw2NTE6e2Y6ZnVuY3Rpb24gZXAoZSx0KXtyZXR1cm4gZS5sKz0xMCx7bmFtZTptcihlKX19fSw2NTI6e30sNjUzOntUOjF9LDY1NDp7VDotMX0sNjU1OntUOjF9LDY1Njp7VDotMX0sNjU3''@;'; put 'put ''OntUOjF9LDY1ODp7VDotMX0sNjU5Ont9LDY2MDp7VDoxfSw2NjE6e30sNjYyOntUOi0xfSw2NjM6e30sNjY0OntUOjF9LDY2NTp7fSw2NjY6e1Q6LTF9LDY2Nzp7fSw2Njg6e30sNjY5Ont9LDY3MTp7VDoxfSw2NzI6e1Q6LTF9LDY3Mzp7VDoxfSw2NzQ6e1Q6LTF9LDY3NTp7fSw2NzY6e30s''@;'; put 'put ''Njc3Ont9LDY3ODp7fSw2Nzk6e30sNjgwOnt9LDY4MTp7fSwxMDI0Ont9LDEwMjU6e30sMTAyNjp7VDoxfSwxMDI3OntUOi0xfSwxMDI4OntUOjF9LDEwMjk6e1Q6LTF9LDEwMzA6e30sMTAzMTp7VDoxfSwxMDMyOntUOi0xfSwxMDMzOntUOjF9LDEwMzQ6e1Q6LTF9LDEwMzU6e30sMTAzNjp7''@;'; put 'put ''fSwxMDM3Ont9LDEwMzg6e1Q6MX0sMTAzOTp7VDotMX0sMTA0MDp7fSwxMDQxOntUOjF9LDEwNDI6e1Q6LTF9LDEwNDM6e30sMTA0NDp7fSwxMDQ1Ont9LDEwNDY6e1Q6MX0sMTA0Nzp7VDotMX0sMTA0ODp7VDoxfSwxMDQ5OntUOi0xfSwxMDUwOnt9LDEwNTE6e1Q6MX0sMTA1Mjp7VDoxfSwx''@;'; put 'put ''MDUzOntmOmZ1bmN0aW9uIEIyKCl7fX0sMTA1NDp7VDoxfSwxMDU1Ont9LDEwNTY6e1Q6MX0sMTA1Nzp7VDotMX0sMTA1ODp7VDoxfSwxMDU5OntUOi0xfSwxMDYxOnt9LDEwNjI6e1Q6MX0sMTA2Mzp7VDotMX0sMTA2NDp7VDoxfSwxMDY1OntUOi0xfSwxMDY2OntUOjF9LDEwNjc6e1Q6LTF9''@;'; put 'put ''LDEwNjg6e1Q6MX0sMTA2OTp7VDotMX0sMTA3MDp7VDoxfSwxMDcxOntUOi0xfSwxMDcyOntUOjF9LDEwNzM6e1Q6LTF9LDEwNzU6e1Q6MX0sMTA3Njp7VDotMX0sMTA3Nzp7VDoxfSwxMDc4OntUOi0xfSwxMDc5OntUOjF9LDEwODA6e1Q6LTF9LDEwODE6e1Q6MX0sMTA4Mjp7VDotMX0sMTA4''@;'; put 'put ''Mzp7VDoxfSwxMDg0OntUOi0xfSwxMDg1Ont9LDEwODY6e1Q6MX0sMTA4Nzp7VDotMX0sMTA4ODp7VDoxfSwxMDg5OntUOi0xfSwxMDkwOntUOjF9LDEwOTE6e1Q6LTF9LDEwOTI6e1Q6MX0sMTA5Mzp7VDotMX0sMTA5NDp7VDoxfSwxMDk1OntUOi0xfSwxMDk2Ont9LDEwOTc6e1Q6MX0sMTA5''@;'; put 'put ''ODp7fSwxMDk5OntUOi0xfSwxMTAwOntUOjF9LDExMDE6e1Q6LTF9LDExMDI6e30sMTEwMzp7fSwxMTA0Ont9LDExMDU6e30sMTExMTp7fSwxMTEyOnt9LDExMTM6e1Q6MX0sMTExNDp7VDotMX0sMTExNTp7VDoxfSwxMTE2OntUOi0xfSwxMTE3Ont9LDExMTg6e1Q6MX0sMTExOTp7VDotMX0s''@;'; put 'put ''MTEyMDp7VDoxfSwxMTIxOntUOi0xfSwxMTIyOntUOjF9LDExMjM6e1Q6LTF9LDExMjQ6e1Q6MX0sMTEyNTp7VDotMX0sMTEyNjp7fSwxMTI4OntUOjF9LDExMjk6e1Q6LTF9LDExMzA6e30sMTEzMTp7VDoxfSwxMTMyOntUOi0xfSwxMTMzOntUOjF9LDExMzQ6e1Q6LTF9LDExMzU6e1Q6MX0s''@;'; put 'put ''MTEzNjp7VDotMX0sMTEzNzp7VDoxfSwxMTM4OntUOi0xfSwxMTM5OntUOjF9LDExNDA6e1Q6LTF9LDExNDE6e30sMTE0Mjp7VDoxfSwxMTQzOntUOi0xfSwxMTQ0OntUOjF9LDExNDU6e1Q6LTF9LDExNDY6e30sMTE0Nzp7VDoxfSwxMTQ4OntUOi0xfSwxMTQ5OntUOjF9LDExNTA6e1Q6LTF9''@;'; put 'put ''LDExNTI6e1Q6MX0sMTE1Mzp7VDotMX0sMTE1NDp7VDotMX0sMTE1NTp7VDotMX0sMTE1Njp7VDotMX0sMTE1Nzp7VDoxfSwxMTU4OntUOi0xfSwxMTU5OntUOjF9LDExNjA6e1Q6LTF9LDExNjE6e1Q6MX0sMTE2Mjp7VDotMX0sMTE2Mzp7VDoxfSwxMTY0OntUOi0xfSwxMTY1OntUOjF9LDEx''@;'; put 'put ''NjY6e1Q6LTF9LDExNjc6e1Q6MX0sMTE2ODp7VDotMX0sMTE2OTp7VDoxfSwxMTcwOntUOi0xfSwxMTcxOnt9LDExNzI6e1Q6MX0sMTE3Mzp7VDotMX0sMTE3Nzp7fSwxMTc4OntUOjF9LDExODA6e30sMTE4MTp7fSwxMTgyOnt9LDIwNDg6e1Q6MX0sMjA0OTp7VDotMX0sMjA1MDp7fSwyMDUx''@;'; put 'put ''OntUOjF9LDIwNTI6e1Q6LTF9LDIwNTM6e30sMjA1NDp7fSwyMDU1OntUOjF9LDIwNTY6e1Q6LTF9LDIwNTc6e1Q6MX0sMjA1ODp7VDotMX0sMjA2MDp7fSwyMDY3Ont9LDIwNjg6e1Q6MX0sMjA2OTp7VDotMX0sMjA3MDp7fSwyMDcxOnt9LDIwNzI6e1Q6MX0sMjA3Mzp7VDotMX0sMjA3NTp7''@;'; put 'put ''fSwyMDc2Ont9LDIwNzc6e1Q6MX0sMjA3ODp7VDotMX0sMjA3OTp7fSwyMDgwOntUOjF9LDIwODE6e1Q6LTF9LDIwODI6e30sMjA4Mzp7VDoxfSwyMDg0OntUOi0xfSwyMDg1OntUOjF9LDIwODY6e1Q6LTF9LDIwODc6e1Q6MX0sMjA4ODp7VDotMX0sMjA4OTp7VDoxfSwyMDkwOntUOi0xfSwy''@;'; put 'put ''MDkxOnt9LDIwOTI6e30sMjA5Mzp7VDoxfSwyMDk0OntUOi0xfSwyMDk1Ont9LDIwOTY6e1Q6MX0sMjA5Nzp7VDotMX0sMjA5ODp7VDoxfSwyMDk5OntUOi0xfSwyMTAwOntUOjF9LDIxMDE6e1Q6LTF9LDIxMDI6e30sMjEwMzp7VDoxfSwyMTA0OntUOi0xfSwyMTA1Ont9LDIxMDY6e1Q6MX0s''@;'; put 'put ''MjEwNzp7VDotMX0sMjEwODp7fSwyMTA5OntUOjF9LDIxMTA6e1Q6LTF9LDIxMTE6e1Q6MX0sMjExMjp7VDotMX0sMjExMzp7VDoxfSwyMTE0OntUOi0xfSwyMTE1Ont9LDIxMTY6e30sMjExNzp7fSwyMTE4OntUOjF9LDIxMTk6e1Q6LTF9LDIxMjA6e30sMjEyMTp7VDoxfSwyMTIyOntUOi0x''@;'; put 'put ''fSwyMTIzOntUOjF9LDIxMjQ6e1Q6LTF9LDIxMjU6e30sMjEyNjp7VDoxfSwyMTI3OntUOi0xfSwyMTI4Ont9LDIxMjk6e1Q6MX0sMjEzMDp7VDotMX0sMjEzMTp7VDoxfSwyMTMyOntUOi0xfSwyMTMzOntUOjF9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e1Q6MX0sMjEzODp7VDot''@;'; put 'put ''MX0sMjEzOTp7VDoxfSwyMTQwOntUOi0xfSwyMTQxOnt9LDMwNzI6e30sMzA3Mzp7fSw0MDk2OntUOjF9LDQwOTc6e1Q6LTF9LDUwMDI6e1Q6MX0sNTAwMzp7VDotMX0sNTA4MTp7VDoxfSw1MDgyOntUOi0xfSw1MDgzOnt9LDUwODQ6e1Q6MX0sNTA4NTp7VDotMX0sNTA4Njp7VDoxfSw1MDg3''@;'; put 'put ''OntUOi0xfSw1MDg4Ont9LDUwODk6e30sNTA5MDp7fSw1MDkyOntUOjF9LDUwOTM6e1Q6LTF9LDUwOTQ6e30sNTA5NTp7VDoxfSw1MDk2OntUOi0xfSw1MDk3Ont9LDUwOTk6e30sNjU1MzU6e246IiJ9fSxXbj17Njp7ZjpObn0sMTA6e2Y6eXR9LDEyOntmOnRyfSwxMzp7Zjp0cn0sMTQ6e2Y6''@;'; put 'put ''SmV9LDE1OntmOkplfSwxNjp7Zjpncn0sMTc6e2Y6SmV9LDE4OntmOkplfSwxOTp7Zjp0cn0sMjA6e2Y6S3N9LDIxOntmOktzfSwyMzp7Zjpxc30sMjQ6e2Y6SnN9LDI1OntmOkplfSwyNjp7fSwyNzp7fSwyODp7ZjpmdW5jdGlvbiBVdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uIE11KGUsdCxy''@;'; put 'put ''KXtpZighKHIuYmlmZjw4KSl7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9ZS5yZWFkX3NoaWZ0KDIpLGY9enQoZSwwLHIpO3JldHVybiByLmJpZmY8OCYmZS5yZWFkX3NoaWZ0KDEpLFt7cjphLGM6bn0sZixzLGldfX0oZSwwLHIp''@;'; put 'put ''fX0sMjk6e30sMzQ6e2Y6SmV9LDM1OntmOllzfSwzODp7Zjpncn0sMzk6e2Y6Z3J9LDQwOntmOmdyfSw0MTp7Zjpncn0sNDI6e2Y6SmV9LDQzOntmOkplfSw0Nzp7ZjpmdW5jdGlvbiBxaChlLHQscil7dmFyIGE9e1R5cGU6ci5iaWZmPj04P2UucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gYS5U''@;'; put 'put ''eXBlP2Z1bmN0aW9uIEpoKGUsdCxyKXt2YXIgYT1yfHx7fTtyZXR1cm4gYS5JbmZvPWUucmVhZF9zaGlmdCgyKSxlLmwtPTIsYS5EYXRhPTE9PT1hLkluZm8/ZnVuY3Rpb24gJGgoZSl7dmFyIHQ9e30scj10LkVuY3J5cHRpb25WZXJzaW9uSW5mbz1kdChlLDQpO2lmKDEhPXIuTWFqb3J8fDEh''@;'; put 'put ''PXIuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK3IuTWFqb3IrIiA6ICIrci5NaW5vcjtyZXR1cm4gdC5TYWx0PWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllcj1lLnJlYWRfc2hpZnQoMTYpLHQuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPWUucmVhZF9z''@;'; put 'put ''aGlmdCgxNiksdH0oZSk6ZnVuY3Rpb24gemgoZSx0KXt2YXIgcj17fSxhPXIuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYodC09NCwyIT1hLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIithLk1pbm9yKTtpZihhLk1ham9y''@;'; put 'put ''PjR8fGEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrYS5NYWpvcik7ci5GbGFncz1lLnJlYWRfc2hpZnQoNCksdC09NDt2YXIgbj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQtPTQsci5FbmNyeXB0aW9uSGVhZGVyPXNmKGUsbiks''@;'; put 'put ''ci5FbmNyeXB0aW9uVmVyaWZpZXI9ZmYoZSx0LT1uKSxyfShlLHQpLGF9KGUsdC0yLGEpOmZ1bmN0aW9uIFloKGUsdCxyLGEpe3ZhciBuPXtrZXk6dHIoZSksdmVyaWZpY2F0aW9uQnl0ZXM6dHIoZSl9O3IucGFzc3dvcmQmJihuLnZlcmlmaWVyPWZ1bmN0aW9uIEZuKGUpe3ZhciByLGksdD0w''@;'; put 'put ''LGE9bmYoZSksbj1hLmxlbmd0aCsxO2Zvcigocj1fdChuKSlbMF09YS5sZW5ndGgsaT0xO2khPW47KytpKXJbaV09YVtpLTFdO2ZvcihpPW4tMTtpPj0wOy0taSl0PSgoMTYzODQmdD8xOjApfHQ8PDEmMzI3NjcpXnJbaV07cmV0dXJuIDUyODExXnR9KHIucGFzc3dvcmQpKSxhLnZhbGlkPW4u''@;'; put 'put ''dmVyaWZpY2F0aW9uQnl0ZXM9PT1uLnZlcmlmaWVyLGEudmFsaWQmJihhLmluc2l0dT1mdW5jdGlvbihlKXt2YXIgdD0wLHI9Y2YoZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyLGEsbil7dmFyIGkscztmb3Iobnx8KG49dCksYXx8KGE9Y2YoIiIpKSxpPTA7aSE9''@;'; put 'put ''dC5sZW5ndGg7KytpKXM9dFtpXSxuW2ldPXM9MjU1Jigoc149YVtyXSk+PjV8czw8MyksKytyO3JldHVybltuLHIsYV19KDAsYSx0LHIpO3JldHVybiB0PW5bMV0sblswXX19KHIucGFzc3dvcmQpKX0oZSwwLHIsYSksYX19LDQ5OntmOmZ1bmN0aW9uIGh1KGUsdCxyKXt2YXIgYT17ZHlIZWln''@;'; put 'put ''aHQ6ZS5yZWFkX3NoaWZ0KDIpLGZsOmUucmVhZF9zaGlmdCgyKX07c3dpdGNoKHImJnIuYmlmZnx8OCl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjYXNlIDQ6ZS5sKz0yO2JyZWFrO2RlZmF1bHQ6ZS5sKz0xMH1yZXR1cm4gYS5uYW1lPVJhKGUsMCxyKSxhfX0sNTE6e2Y6dHJ9LDYwOnt9LDYxOntm''@;'; put 'put ''OmZ1bmN0aW9uIGZ1KGUpe3JldHVybntQb3M6W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoMildLERpbTpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV0sRmxhZ3M6ZS5yZWFkX3NoaWZ0KDIpLEN1clRhYjplLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLFNlbGVjdGVkOmUucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzplLnJlYWRfc2hpZnQoMil9fX0sNjQ6e2Y6SmV9LDY1OntmOmZ1bmN0aW9uIHV1KCl7fX0sNjY6e2Y6dHJ9LDc3Ont9LDgwOnt9LDgxOnt9LDgyOnt9LDg1OntmOnRyfSw4OTp7fSw5MDp7fSw5MTp7fSw5Mjp7ZjpmdW5jdGlv''@;'; put 'put ''biBKbChlLHQscil7aWYoci5lbmMpcmV0dXJuIGUubCs9dCwiIjt2YXIgYT1lLmwsbj16dChlLDAscik7cmV0dXJuIGUucmVhZF9zaGlmdCh0K2EtZS5sKSxufX0sOTM6e2Y6ZnVuY3Rpb24gVnUoZSx0LHIpe2lmKHImJnIuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBHdShlLHQscil7ZS5sKz00''@;'; put 'put ''O3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTY7dmFyIHM9W107cmV0dXJuIHMucHVzaCgoWHVbYV18fHByKShl''@;'; put 'put ''LHQtPTM2LHIpKSx7Y21vOltuLGEsaV0sZnQ6c319KGUsdCxyKTt2YXIgYT1YcyhlKSxuPWZ1bmN0aW9uIEtsKGUsdCl7Zm9yKHZhciByPWUubCt0LGE9W107ZS5sPHI7KXt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sLT0yO3RyeXthLnB1c2goamxbbl0oZSxyLWUubCkpfWNhdGNoe3JldHVy''@;'; put 'put ''biBlLmw9cixhfX1yZXR1cm4gZS5sIT1yJiYoZS5sPXIpLGF9KGUsdC0yMik7cmV0dXJue2NtbzphLGZ0Om59fX0sOTQ6e30sOTU6e2Y6SmV9LDk2Ont9LDk3Ont9LDk5OntmOkplfSwxMjU6e2Y6UXN9LDEyODp7ZjpmdW5jdGlvbiBBdShlKXtlLmwrPTQ7dmFyIHQ9W2UucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxlLnJlYWRfc2hpZnQoMildO2lmKDAhPT10WzBdJiZ0WzBdLS0sMCE9PXRbMV0mJnRbMV0tLSx0WzBdPjd8fHRbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK3Quam9pbigifCIpKTtyZXR1cm4gdH19LDEyOTp7ZjpmdW5jdGlvbiBabChlLHQscil7dmFyIGE9ciYmOD09''@;'; put 'put ''ci5iaWZmfHwyPT10P2UucmVhZF9zaGlmdCgyKTooZS5sKz10LDApO3JldHVybntmRGlhbG9nOjE2JmEsZkJlbG93OjY0JmEsZlJpZ2h0OjEyOCZhfX19LDEzMDp7Zjp0cn0sMTMxOntmOkplfSwxMzI6e2Y6SmV9LDEzMzp7ZjpmdW5jdGlvbiBRbChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLG49MyZlLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGkpe2Nhc2UgMDppPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTppPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6aT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Omk9IlZCQU1vZHVsZSJ9dmFyIHM9UmEo''@;'; put 'put ''ZSwwLHIpO3JldHVybiAwPT09cy5sZW5ndGgmJihzPSJTaGVldDEiKSx7cG9zOmEsaHM6bixkdDppLG5hbWU6c319fSwxMzQ6e30sMTQwOntmOmZ1bmN0aW9uIEp1KGUpe3ZhciByLHQ9WzAsMF07cmV0dXJuIHI9ZS5yZWFkX3NoaWZ0KDIpLHRbMF09eHNbcl18fHIscj1lLnJlYWRfc2hpZnQo''@;'; put 'put ''MiksdFsxXT14c1tyXXx8cix0fX0sMTQxOntmOnRyfSwxNDQ6e30sMTQ2OntmOmZ1bmN0aW9uIFF1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0gPjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSwxNTE6e30sMTUyOnt9LDE1Mzp7fSwxNTQ6e30sMTU1Ont9LDE1Njp7''@;'; put 'put ''Zjp0cn0sMTU3Ont9LDE1ODp7fSwxNjA6e2Y6c2h9LDE2MTp7ZjpmdW5jdGlvbiB0aChlLHQpe3ZhciByPXt9O3JldHVybiB0PDMyfHwoZS5sKz0xNixyLmhlYWRlcj1ncihlKSxyLmZvb3Rlcj1ncihlKSxlLmwrPTIpLHJ9fSwxNzQ6e30sMTc1Ont9LDE3Njp7fSwxNzc6e30sMTc4Ont9LDE4''@;'; put 'put ''MDp7fSwxODE6e30sMTgyOnt9LDE4NDp7fSwxODU6e30sMTg5OntmOmZ1bmN0aW9uIFR1KGUsdCl7Zm9yKHZhciByPWUubCt0LTIsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiksaT1bXTtlLmw8cjspaS5wdXNoKFdzKGUpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''TXVsUksgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMscmtyZWM6aX19fSwxOTA6e2Y6ZnVuY3Rpb24gU3UoZSx0KXtmb3IodmFyIHI9''@;'; put 'put ''ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goZS5yZWFkX3NoaWZ0KDIpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9''@;'; put 'put ''cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMsaXhmZTppfX19LDE5Mzp7Zjp5dH0sMTk3Ont9LDE5ODp7fSwxOTk6e30sMjAwOnt9LDIwMTp7fSwyMDI6e2Y6SmV9LDIwMzp7fSwyMDQ6e30sMjA1Ont9LDIwNjp7fSwy''@;'; put 'put ''MDc6e30sMjA4Ont9LDIwOTp7fSwyMTA6e30sMjExOnt9LDIxMzp7fSwyMTU6e30sMjE2Ont9LDIxNzp7fSwyMTg6e2Y6dHJ9LDIyMDp7fSwyMjE6e2Y6SmV9LDIyMjp7fSwyMjQ6e2Y6ZnVuY3Rpb24geXUoZSx0LHIpe3ZhciBhPXt9O3JldHVybiBhLmlmbnQ9ZS5yZWFkX3NoaWZ0KDIpLGEu''@;'; put 'put ''bnVtRm10SWQ9ZS5yZWFkX3NoaWZ0KDIpLGEuZmxhZ3M9ZS5yZWFkX3NoaWZ0KDIpLGEuZlN0eWxlPWEuZmxhZ3M+PjImMSxhLmRhdGE9ZnVuY3Rpb24gRnUoZSx0LHIsYSl7dmFyIG49e30saT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCksZj1lLnJlYWRfc2hpZnQoNCksYz1l''@;'; put 'put ''LnJlYWRfc2hpZnQoMik7cmV0dXJuIG4ucGF0dGVyblR5cGU9bmxbZj4+MjZdLGEuY2VsbFN0eWxlcyYmKG4uYWxjPTcmaSxuLmZXcmFwPWk+PjMmMSxuLmFsY1Y9aT4+NCY3LG4uZkp1c3RMYXN0PWk+PjcmMSxuLnRyb3Q9aT4+OCYyNTUsbi5jSW5kZW50PWk+PjE2JjE1LG4uZlNocmlua1Rv''@;'; put 'put ''Rml0PWk+PjIwJjEsbi5pUmVhZE9yZGVyPWk+PjIyJjIsbi5mQXRyTnVtPWk+PjI2JjEsbi5mQXRyRm50PWk+PjI3JjEsbi5mQXRyQWxjPWk+PjI4JjEsbi5mQXRyQmRyPWk+PjI5JjEsbi5mQXRyUGF0PWk+PjMwJjEsbi5mQXRyUHJvdD1pPj4zMSYxLG4uZGdMZWZ0PTE1JnMsbi5kZ1JpZ2h0''@;'; put 'put ''PXM+PjQmMTUsbi5kZ1RvcD1zPj44JjE1LG4uZGdCb3R0b209cz4+MTImMTUsbi5pY3ZMZWZ0PXM+PjE2JjEyNyxuLmljdlJpZ2h0PXM+PjIzJjEyNyxuLmdyYml0RGlhZz1zPj4zMCYzLG4uaWN2VG9wPTEyNyZmLG4uaWN2Qm90dG9tPWY+PjcmMTI3LG4uaWN2RGlhZz1mPj4xNCYxMjcsbi5k''@;'; put 'put ''Z0RpYWc9Zj4+MjEmMTUsbi5pY3ZGb3JlPTEyNyZjLG4uaWN2QmFjaz1jPj43JjEyNyxuLmZzeEJ1dHRvbj1jPj4xNCYxKSxufShlLDAsMCxyKSxhfX0sMjI1OntmOmZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIDA9PT10fHxlLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7Zjp5dH0sMjI3Ont9''@;'; put 'put ''LDIyOTp7ZjpmdW5jdGlvbiBXdShlLHQpe2Zvcih2YXIgcj1bXSxhPWUucmVhZF9zaGlmdCgyKTthLS07KXIucHVzaChrMChlKSk7cmV0dXJuIHJ9fSwyMzM6e30sMjM1Ont9LDIzNjp7fSwyMzc6e30sMjM5Ont9LDI0MDp7fSwyNDE6e30sMjQyOnt9LDI0NDp7fSwyNDU6e30sMjQ2Ont9LDI0''@;'; put 'put ''Nzp7fSwyNDg6e30sMjQ5Ont9LDI1MTp7fSwyNTI6e2Y6ZnVuY3Rpb24gcnUoZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTA7cyE9biYmZS5sPHI7KytzKWkucHVzaChSbChlKSk7cmV0dXJuIGkuQ291bnQ9YSxpLlVuaXF1''@;'; put 'put ''ZT1uLGl9fSwyNTM6e2Y6ZnVuY3Rpb24gZHUoZSl7dmFyIHQ9bnQoZSk7cmV0dXJuIHQuaXNzdD1lLnJlYWRfc2hpZnQoNCksdH19LDI1NTp7ZjpmdW5jdGlvbiBhdShlLHQpe3ZhciByPXt9O3JldHVybiByLmRzc3Q9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9dC0yLHJ9fSwyNTY6e30sMjU5Ont9''@;'; put 'put ''LDI5MDp7fSwzMTE6e30sMzEyOnt9LDMxNTp7fSwzMTc6e2Y6YnN9LDMxODp7fSwzMTk6e30sMzIwOnt9LDMzMDp7fSwzMzE6e30sMzMzOnt9LDMzNDp7fSwzMzU6e30sMzM2Ont9LDMzNzp7fSwzMzg6e30sMzM5Ont9LDM0MDp7fSwzNTE6e30sMzUyOntmOkplfSwzNTM6e2Y6eXR9LDQwMTp7''@;'; put 'put ''fSw0MDI6e30sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDI1Ont9LDQyNjp7fSw0Mjc6e30sNDI4Ont9LDQyOTp7fSw0MzA6e2Y6ZnVuY3Rpb24gUnUoZSx0LHIpe3ZhciBhPWUubCt0LG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKHIu''@;'; put 'put ''c2JjY2g9aSwxMDI1PT1pfHwxNDg0OT09aSlyZXR1cm5baSxuXTtpZihpPDF8fGk+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIraSk7Zm9yKHZhciBzPUd0KGUsaSksZj1bXTthPmUubDspZi5wdXNoKE5hKGUpKTtyZXR1cm5baSxuLHMsZl19fSw0MzE6''@;'; put 'put ''e2Y6SmV9LDQzMjp7fSw0MzM6e30sNDM0Ont9LDQzNzp7fSw0Mzg6e2Y6ZnVuY3Rpb24genUoZSx0LHIpe3ZhciBhPWUubCxuPSIiO3RyeXtlLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoci5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9lLmwrPTY6ZnVuY3Rpb24g''@;'; put 'put ''YmwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO2UubCsrO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTJ9KGUpO3ZhciBmPWUucmVhZF9zaGlmdCgyKTtlLnJlYWRfc2hpZnQoMiksdHIoZSk7dmFyIGM9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Yztmb3IodmFyIG89MTtvPGUubGVucy5sZW5n''@;'; put 'put ''dGgtMTsrK28pe2lmKGUubC1hIT1lLmxlbnNbb10pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbD1lW2UubF07aWYoKG4rPUd0KGUsZS5sZW5zW28rMV0tZS5sZW5zW29dLTEpKS5sZW5ndGg+PShsP2Y6MipmKSlicmVha31pZihuLmxlbmd0aCE9PWYm''@;'; put 'put ''Jm4ubGVuZ3RoIT09MipmKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitmKyIgIT0gIituLmxlbmd0aCk7cmV0dXJuIGUubD1hK3Qse3Q6bn19Y2F0Y2h7cmV0dXJuIGUubD1hK3Qse3Q6bn19fX0sNDM5OntmOkplfSw0NDA6e2Y6ZnVuY3Rpb24gJHUoZSx0KXt2YXIgcj1rMChlKTtlLmwr''@;'; put 'put ''PTE2O3ZhciBhPWZ1bmN0aW9uIE1sKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCk7aWYoMiE9PWEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIithKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO3ZhciBpLHMsZixjLGwsaCxvPSIi''@;'; put 'put ''OzE2Jm4mJihpPXcwKGUpKSwxMjgmbiYmKHM9dzAoZSkpLCEoMjU3Jn5uKSYmKGY9dzAoZSkpLDE9PSgyNTcmbikmJihjPWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2gocil7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIFBsKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUubCxhPSExO3Q+MjQmJihlLmwrPXQtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PWUucmVhZF9zaGlmdCgxNikmJihhPSEwKSxlLmw9cik7dmFyIG49ZS5yZWFkX3NoaWZ0KChhP3QtMjQ6dCk+''@;'; put 'put ''PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKTtyZXR1cm4gYSYmKGUubCs9MjQpLG59KGUpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBMbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9IiI7dC0tID4wOylyKz0iLi4vIjt2''@;'; put 'put ''YXIgYT1lLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKGUubCs9Miw1NzAwNSE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PWUucmVhZF9zaGlmdCg0KSlyZXR1cm4gcithLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgaT1lLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7aWYoMyE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIHIrZS5yZWFkX3NoaWZ0KGk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKX0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1v''@;'; put 'put ''bmlrZXIgIityKX19KGUpKSw4Jm4mJihvPXcwKGUpKSwzMiZuJiYobD1lLnJlYWRfc2hpZnQoMTYpKSw2NCZuJiYoaD13bihlKSksZS5sPXI7dmFyIHg9c3x8Znx8Y3x8IiI7eCYmbyYmKHgrPSIjIitvKSx4fHwoeD0iIyIrbyksMiZuJiYiLyI9PXguY2hhckF0KDApJiYiLyIhPXguY2hhckF0''@;'; put 'put ''KDEpJiYoeD0iZmlsZTovLyIreCk7dmFyIGQ9e1RhcmdldDp4fTtyZXR1cm4gbCYmKGQuZ3VpZD1sKSxoJiYoZC50aW1lPWgpLGkmJihkLlRvb2x0aXA9aSksZH0oZSx0LTI0KTtyZXR1cm5bcixhXX19LDQ0MTp7fSw0NDI6e2Y6TmF9LDQ0Mzp7fSw0NDQ6e2Y6dHJ9LDQ0NTp7fSw0NDY6e30s''@;'; put 'put ''NDQ4OntmOnl0fSw0NDk6e2Y6ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntmOnl0fSw1MTI6e2Y6enN9LDUxMzp7ZjppaH0sNTE1OntmOmZ1bmN0aW9uIE91KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5i''@;'; put 'put ''aWZmPTUpO3ZhciBhPW50KGUpLG49Z3IoZSk7cmV0dXJuIGEudmFsPW4sYX19LDUxNjp7ZjpmdW5jdGlvbiBwdShlLHQscil7ci5iaWZmZ3Vlc3MmJjI9PXIuYmlmZiYmKHIuYmlmZj01KTt2YXIgbj1udChlKTsyPT1yLmJpZmYmJmUubCsrO3ZhciBpPU5hKGUsMCxyKTtyZXR1cm4gbi52YWw9''@;'; put 'put ''aSxufX0sNTE3OntmOmpzfSw1MTk6e2Y6Zmh9LDUyMDp7ZjpmdW5jdGlvbiBudShlKXt2YXIgdD17fTt0LnI9ZS5yZWFkX3NoaWZ0KDIpLHQuYz1lLnJlYWRfc2hpZnQoMiksdC5jbnQ9ZS5yZWFkX3NoaWZ0KDIpLXQuYzt2YXIgcj1lLnJlYWRfc2hpZnQoMik7ZS5sKz00O3ZhciBhPWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDcmYSYmKHQubGV2ZWw9NyZhKSwzMiZhJiYodC5oaWRkZW49ITApLDY0JmEmJih0LmhwdD1yLzIwKSx0fX0sNTIzOnt9LDU0NTp7Zjpac30sNTQ5OntmOkdzfSw1NjY6e30sNTc0OntmOmZ1bmN0aW9uIG91KGUsdCxyKXtyZXR1cm4gciYmci5iaWZm''@;'; put 'put ''Pj0yJiZyLmJpZmY8NT97fTp7UlRMOjY0JmUucmVhZF9zaGlmdCgyKX19fSw2Mzg6e2Y6ZnVuY3Rpb24gRXUoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9V3MoZSk7cmV0dXJue3I6dCxjOnIsaXhmZTphWzBdLHJrbnVtOmFbMV19fX0sNjU5Ont9LDEwNDg6''@;'; put 'put ''e30sMTA1NDp7ZjpmdW5jdGlvbiBndShlLHQscil7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx6dChlLDAscildfX0sMTA4NDp7fSwxMjEyOntmOmZ1bmN0aW9uIEx1KGUsdCxyKXt2YXIgYT1WcyhlKTtlLmwrKzt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1lkKGUsdC09OCxyKSxuLGFd''@;'; put 'put ''fX0sMjA0ODp7ZjpmdW5jdGlvbiBLdShlLHQpe2UucmVhZF9zaGlmdCgyKTt2YXIgcj1rMChlKSxhPWUucmVhZF9zaGlmdCgodC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW3IsYT1hLnJlcGxhY2UoZHIsIiIpXX19LDIwNDk6e30sMjA1MDp7fSwyMDUxOnt9LDIwNTI6e30sMjA1Mzp7fSwy''@;'; put 'put ''MDU0Ont9LDIwNTU6e30sMjA1Njp7fSwyMDU3OntmOkUwfSwyMDU4Ont9LDIwNTk6e30sMjA2MDp7fSwyMDYxOnt9LDIwNjI6e30sMjA2Mzp7fSwyMDY0Ont9LDIwNjY6e30sMjA2Nzp7fSwyMTI4Ont9LDIxMjk6e30sMjEzMDp7fSwyMTMxOnt9LDIxMzI6e30sMjEzMzp7fSwyMTM0Ont9LDIx''@;'; put 'put ''MzU6e30sMjEzNjp7fSwyMTM3Ont9LDIxMzg6e30sMjE0Njp7fSwyMTQ3OntyOjEyfSwyMTQ4Ont9LDIxNDk6e30sMjE1MDp7fSwyMTUxOntmOnl0fSwyMTUyOnt9LDIxNTQ6e30sMjE1NTp7fSwyMTU2Ont9LDIxNjE6e30sMjE2Mjp7fSwyMTY0Ont9LDIxNjU6e30sMjE2Njp7fSwyMTY3Ont9''@;'; put 'put ''LDIxNjg6e30sMjE2OTp7fSwyMTcwOnt9LDIxNzE6e30sMjE3Mjp7ZjpmdW5jdGlvbiBlaChlKXtlLmwrPTI7dmFyIHQ9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIHQuY3hmcz1lLnJlYWRfc2hpZnQoMiksdC5jcmM9ZS5yZWFkX3NoaWZ0KDQpLHR9LHI6MTJ9LDIxNzM6e2Y6ZnVuY3Rpb24gSjEo''@;'; put 'put ''ZSx0KXtlLmwrPTI7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Mjtmb3IodmFyIG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107bi0tID4wOylpLnB1c2goWTEoZSkpO3JldHVybntpeGZlOmEsZXh0Oml9fSxyOjEyfSwyMTc0Ont9LDIxNzU6e30sMjE4MDp7fSwyMTgxOnt9LDIxODI6e30sMjE4''@;'; put 'put ''Mzp7fSwyMTg0Ont9LDIxODU6e30sMjE4Njp7fSwyMTg3Ont9LDIxODg6e2Y6SmUscjoxMn0sMjE4OTp7fSwyMTkwOntyOjEyfSwyMTkxOnt9LDIxOTI6e30sMjE5NDp7fSwyMTk1Ont9LDIxOTY6e2Y6ZnVuY3Rpb24gUHUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuW0d0KGUsYSxyKSxHdChlLG4scildfWUubCs9dH0scjoxMn0sMjE5Nzp7fSwyMTk4OntmOmZ1bmN0aW9uIEcxKGUsdCxyKXt2YXIgYT1lLmwrdDtpZigxMjQyMjYhPT1lLnJlYWRfc2hpZnQoNCkpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJu''@;'; put 'put ''IHZvaWQoZS5sPWEpO3ZhciBzLGk9ZS5zbGljZShlLmwpO2UubD1hO3RyeXtzPVJpKGkse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgZj1OcihzLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYoZilyZXR1cm4gdmYoZixyKX19LHI6MTJ9LDIxOTk6e30sMjIwMDp7fSwy''@;'; put 'put ''MjAxOnt9LDIyMDI6e2Y6ZnVuY3Rpb24gQnUoZSl7cmV0dXJuWzAhPT1lLnJlYWRfc2hpZnQoNCksMCE9PWUucmVhZF9zaGlmdCg0KSxlLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntmOnl0fSwyMjA0Ont9LDIyMDU6e30sMjIwNjp7fSwyMjA3Ont9LDIyMTE6e2Y6ZnVuY3Rpb24gaXUo''@;'; put 'put ''ZSl7dmFyIHQ9ZnVuY3Rpb24gV2woZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTgse3R5cGU6dCxmbGFnczpyfX0oZSk7aWYoMjIxMSE9dC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrdC50eXBlKTty''@;'; put 'put ''ZXR1cm4gMCE9PWUucmVhZF9zaGlmdCg0KX19LDIyMTI6e30sMjIxMzp7fSwyMjE0Ont9LDIyMTU6e30sNDA5Nzp7fSw0MDk4Ont9LDQwOTk6e30sNDEwMjp7fSw0MTAzOnt9LDQxMDU6e30sNDEwNjp7fSw0MTA3Ont9LDQxMDg6e30sNDEwOTp7fSw0MTE2Ont9LDQxMTc6e30sNDExODp7fSw0''@;'; put 'put ''MTE5Ont9LDQxMjA6e30sNDEyMTp7fSw0MTIyOnt9LDQxMjM6e30sNDEyNDp7fSw0MTI1Ont9LDQxMjY6e30sNDEyNzp7fSw0MTI4Ont9LDQxMjk6e30sNDEzMDp7fSw0MTMyOnt9LDQxMzM6e30sNDEzNDp7Zjp0cn0sNDEzNTp7fSw0MTQ2Ont9LDQxNDc6e30sNDE0ODp7fSw0MTQ5Ont9LDQx''@;'; put 'put ''NTQ6e30sNDE1Njp7fSw0MTU3Ont9LDQxNTg6e30sNDE1OTp7fSw0MTYwOnt9LDQxNjE6e30sNDE2Mzp7fSw0MTY0OntmOmZ1bmN0aW9uIGFoKGUsdCxyKXt2YXIgYT17YXJlYTohMX07aWYoNSE9ci5iaWZmKXJldHVybiBlLmwrPXQsYTt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUu''@;'; put 'put ''bCs9MywxNiZuJiYoYS5hcmVhPSEwKSxhfX0sNDE2NTp7fSw0MTY2Ont9LDQxNjg6e30sNDE3MDp7fSw0MTcxOnt9LDQxNzQ6e30sNDE3NTp7fSw0MTc2Ont9LDQxNzc6e30sNDE4Nzp7fSw0MTg4OntmOmZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0g''@;'; put 'put ''PjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSw0MTg5Ont9LDQxOTE6e30sNDE5Mjp7fSw0MTkzOnt9LDQxOTQ6e30sNDE5NTp7fSw0MTk2Ont9LDQxOTc6e30sNDE5ODp7fSw0MTk5Ont9LDQyMDA6e30sMDp7Zjp6c30sMTp7fSwyOntmOmZ1bmN0aW9uIGhoKGUpe3ZhciB0PW50KGUpOysr''@;'; put 'put ''ZS5sO3ZhciByPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gdC50PSJuIix0LnZhbD1yLHR9fSwzOntmOmZ1bmN0aW9uIGxoKGUpe3ZhciB0PW50KGUpOysrZS5sO3ZhciByPWdyKGUpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDQ6e2Y6ZnVuY3Rpb24gb2goZSx0LHIpe3IuYmlmZmd1ZXNz''@;'; put 'put ''JiY1PT1yLmJpZmYmJihyLmJpZmY9Mik7dmFyIGE9bnQoZSk7KytlLmw7dmFyIG49enQoZSwwLHIpO3JldHVybiBhLnQ9InN0ciIsYS52YWw9bixhfX0sNTp7Zjpqc30sNzp7ZjpmdW5jdGlvbiBkaChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT10PyhlLmwrKywiIik6ZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KHQsInNiY3MtY29udCIpfX0sODp7fSw5OntmOkUwfSwxMTp7fSwyMjp7Zjp0cn0sMzA6e2Y6d3V9LDMxOnt9LDMyOnt9LDMzOntmOlpzfSwzNjp7fSwzNzp7ZjpHc30sNTA6e2Y6ZnVuY3Rpb24gdmgoZSx0KXtlLmwrPTYsZS5sKz0yLGUubCs9MSxlLmwrPTMsZS5sKz0xLGUu''@;'; put 'put ''bCs9dC0xM319LDYyOnt9LDUyOnt9LDY3Ont9LDY4OntmOnRyfSw2OTp7fSw4Njp7fSwxMjY6e30sMTI3OntmOmZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPXtmbXQ6dCxlbnY6cixsZW46YSxkYXRhOmUu''@;'; put 'put ''c2xpY2UoZS5sLGUubCthKX07cmV0dXJuIGUubCs9YSxufX0sMTM1Ont9LDEzNjp7fSwxMzc6e30sMTQ1Ont9LDE0ODp7fSwxNDk6e30sMTUwOnt9LDE2OTp7fSwxNzE6e30sMTg4Ont9LDE5MTp7fSwxOTI6e30sMTk0Ont9LDE5NTp7fSwyMTQ6e2Y6ZnVuY3Rpb24gcGgoZSx0LHIpe3ZhciBh''@;'; put 'put ''PWUubCt0LG49bnQoZSksaT1lLnJlYWRfc2hpZnQoMikscz1HdChlLGkscik7cmV0dXJuIGUubD1hLG4udD0ic3RyIixuLnZhbD1zLG59fSwyMjM6e30sMjM0Ont9LDM1NDp7fSw0MjE6e30sNTE4OntmOk5ufSw1MjE6e2Y6RTB9LDUzNjp7ZjpKc30sNTQ3OntmOllzfSw1NjE6e30sNTc5Ont9''@;'; put 'put ''LDEwMzA6e2Y6Tm59LDEwMzM6e2Y6RTB9LDEwOTE6e30sMjE1Nzp7fSwyMTYzOnt9LDIxNzc6e30sMjI0MDp7fSwyMjQxOnt9LDIyNDI6e30sMjI0Mzp7fSwyMjQ0Ont9LDIyNDU6e30sMjI0Njp7fSwyMjQ3Ont9LDIyNDg6e30sMjI0OTp7fSwyMjUwOnt9LDIyNTE6e30sMjI2Mjp7cjoxMn0s''@;'; put 'put ''MjkyODI6e319O2Z1bmN0aW9uIGFlKGUsdCxyLGEpe3ZhciBuPXQ7aWYoIWlzTmFOKG4pKXt2YXIgaT1hfHwocnx8W10pLmxlbmd0aHx8MCxzPWUubmV4dCg0KTtzLndyaXRlX3NoaWZ0KDIsbikscy53cml0ZV9zaGlmdCgyLGkpLGk+MCYmcm4ocikmJmUucHVzaChyKX19ZnVuY3Rpb24gSmYo''@;'; put 'put ''ZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5zZSYmKHIuZGVuc2U9emUpO3ZhciBhPXIuZGVuc2U/W106e30sbj0oZT1lLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNv''@;'; put 'put ''dWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgaT1lLm1hdGNoKC88XC90YWJsZS9pKSxzPW4uaW5kZXgsZj1pJiZpLmluZGV4fHxlLmxlbmd0aCxjPXZvKGUuc2xpY2UocyxmKSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+Iiksbz0tMSxsPTAsaD0wLHg9MCxkPXtzOntyOjFlNyxjOjFlN30sZTp7''@;'; put 'put ''cjowLGM6MH19LHY9W107Zm9yKHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIHU9Y1tzXS50cmltKCkscD11LnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cCl7aWYoIjx0ZCI9PXB8fCI8dGgiPT1wKXt2YXIgaz11LnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGY9MDtmPGsubGVu''@;'; put 'put ''Z3RoOysrZil7dmFyIFQ9a1tmXS50cmltKCk7aWYoVC5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIGc9VCxOPTA7IjwiPT1nLmNoYXJBdCgwKSYmKE49Zy5pbmRleE9mKCI+IikpPi0xOylnPWcuc2xpY2UoTisxKTtmb3IodmFyIE09MDtNPHYubGVuZ3RoOysrTSl7dmFyIEk9dltNXTtJLnMu''@;'; put 'put ''Yz09bCYmSS5zLnI8byYmbzw9SS5lLnImJihsPUkuZS5jKzEsTT0tMSl9dmFyIHk9bWUoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSk7eD15LmNvbHNwYW4/K3kuY29sc3BhbjoxLCgoaD0reS5yb3dzcGFuKT4xfHx4PjEpJiZ2LnB1c2goe3M6e3I6byxjOmx9LGU6e3I6bysoaHx8MSktMSxj''@;'; put 'put ''OmwreC0xfX0pO3ZhciBQPXkudHx8eVsiZGF0YS10Il18fCIiO2lmKCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX1pZihnPVdpKGcpLGQucy5yPm8mJihkLnMucj1vKSxkLmUucjxvJiYoZC5lLnI9byksZC5zLmM+bCYmKGQucy5jPWwpLGQuZS5jPGwmJihkLmUuYz1sKSwhZy5sZW5ndGgpe2wr''@;'; put 'put ''PXg7Y29udGludWV9dmFyIFI9e3Q6InMiLHY6Z307ci5yYXd8fCFnLnRyaW0oKS5sZW5ndGh8fCJzIj09UHx8KCJUUlVFIj09PWc/Uj17dDoiYiIsdjohMH06IkZBTFNFIj09PWc/Uj17dDoiYiIsdjohMX06aXNOYU4oSnIoZykpP2lzTmFOKGFhKGcpLmdldERhdGUoKSl8fChSPXt0OiJkIix2''@;'; put 'put ''OlhlKGcpfSxyLmNlbGxEYXRlc3x8KFI9e3Q6Im4iLHY6aXIoUi52KX0pLFIuej1yLmRhdGVORnx8cGVbMTRdKTpSPXt0OiJuIix2OkpyKGcpfSksci5kZW5zZT8oYVtvXXx8KGFbb109W10pLGFbb11bbF09Uik6YVtnZSh7cjpvLGM6bH0pXT1SLGwrPXh9fX19ZWxzZXtpZigrK28sci5zaGVl''@;'; put 'put ''dFJvd3MmJnIuc2hlZXRSb3dzPD1vKXstLW87YnJlYWt9bD0wfX1yZXR1cm4gYVsiIXJlZiJdPXdlKGQpLHYubGVuZ3RoJiYoYVsiIW1lcmdlcyJdPXYpLGF9ZnVuY3Rpb24gUm0oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y''@;'; put 'put ''ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oYSxuKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQobiwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88''@;'; put 'put ''dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIik7cmV0dXJuW0llKHQucmVwbGFjZSgvPFtePl0qPi9nLCIiKSldfXZhciBpYz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpb''@;'; put 'put ''InMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX07ZnVuY3Rpb24gc2MoZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5z''@;'; put 'put ''ZSYmKHIuZGVuc2U9emUpO3ZhciBpLHMsbCxoLHUscCxhPVkwKGUpLG49W10sZj17bmFtZToiIn0sYz0iIixvPTAseD17fSxkPVtdLHY9ci5kZW5zZT9bXTp7fSxrPXt2YWx1ZToiIn0sVD0iIixnPTAsTT1bXSxJPS0xLHk9LTEsUD17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxSPTAs''@;'; put 'put ''Vj17fSxYPVtdLGI9e30sZWU9MCxsZT0wLHJlPVtdLGRlPTEsdWU9MSxGZT1bXSxjZT17TmFtZXM6W119LHhlPXt9LEs9WyIiLCIiXSxDPVtdLFU9e30sTz0iIixEPTAsaj0hMSxzZT0hMSxaPTA7Zm9yKHlhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwi''@;'; put 'put ''IikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO3U9eWEuZXhlYyhhKTspc3dpdGNoKHVbM109dVszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT11WzFdPyh2WyIhcmVmIl09UC5lLmM+PVAu''@;'; put 'put ''cy5jJiZQLmUucj49UC5zLnI/d2UoUCk6IkExOkExIixyLnNoZWV0Um93cz4wJiZyLnNoZWV0Um93czw9UC5lLnImJih2WyIhZnVsbHJlZiJdPXZbIiFyZWYiXSxQLmUucj1yLnNoZWV0Um93cy0xLHZbIiFyZWYiXT13ZShQKSksWC5sZW5ndGgmJih2WyIhbWVyZ2VzIl09WCkscmUubGVuZ3Ro''@;'; put 'put ''JiYodlsiIXJvd3MiXT1yZSksbC5uYW1lPWwuXHU1NDBkXHU3OWYwfHxsLm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShsKSxkLnB1c2gobC5uYW1lKSx4W2wubmFtZV09dixzZT0hMSk6Ii8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihsPW1lKHVbMF0sITEp''@;'; put 'put ''LEk9eT0tMSxQLnMucj1QLnMuYz0xZTcsUC5lLnI9UC5lLmM9MCx2PXIuZGVuc2U/W106e30sWD1bXSxyZT1bXSxzZT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PXVbMV0/LS1SOisrUjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PXVb''@;'; put 'put ''MV0pe0krPWRlLGRlPTE7YnJlYWt9aWYoKGg9bWUodVswXSwhMSkpLlx1ODg0Y1x1NTNmNz9JPWguXHU4ODRjXHU1M2Y3LTE6LTE9PUkmJihJPTApLChkZT0raFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKFo9MDtaPGRlOysrWilSPjAmJihyZVtJK1pdPXtsZXZlbDpSfSk7''@;'; put 'put ''eT0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09dVsxXSYmKyt5LHIuc2hlZXRTdHVicyYmKHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXt0OiJ6In0pOnZbZ2Uoe3I6SSxjOnl9KV09e3Q6InoifSksVD0iIixNPVtdO2JyZWFrO2Nhc2UidGFibGUtY2Vs''@;'; put 'put ''bCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpKSsreSxrPW1lKHVbMF0sITEpLHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkscD17dDoieiIsdjpudWxsfSxrLmZvcm11bGEmJjAhPXIuY2VsbEZv''@;'; put 'put ''cm11bGEmJihwLmY9TmYoSWUoay5mb3JtdWxhKSkpLCJzdHJpbmciPT0oay5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSkmJihwLnQ9InMiLHAudj1JZShrWyJzdHJpbmctdmFsdWUiXXx8IiIpLHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXApOnZb''@;'; put 'put ''Z2Uoe3I6SSxjOnl9KV09cCkseSs9dWUtMTtlbHNlIGlmKCIvIiE9PXVbMV0pe1Q9IiIsZz0wLE09W10sdWU9MTt2YXIgUT1kZT9JK2RlLTE6STtpZigrK3k+UC5lLmMmJihQLmUuYz15KSx5PFAucy5jJiYoUC5zLmM9eSksSTxQLnMuciYmKFAucy5yPUkpLFE+UC5lLnImJihQLmUucj1RKSxD''@;'; put 'put ''PVtdLFU9e30scD17dDooaz1tZSh1WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxrWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxyLmNlbGxGb3JtdWxhKWlmKGsuZm9ybXVsYSYmKGsuZm9ybXVsYT1JZShrLmZvcm11bGEpKSxrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5l''@;'; put 'put ''ZCJdJiZrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoZWU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscC5GPXdlKGI9e3M6e3I6SSxjOnl9''@;'; put 'put ''LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pLEZlLnB1c2goW2IscC5GXSkpLGsuZm9ybXVsYSlwLmY9TmYoay5mb3JtdWxhKTtlbHNlIGZvcihaPTA7WjxGZS5sZW5ndGg7KytaKUk+PUZlW1pdWzBdLnMuciYmSTw9RmVbWl1bMF0uZS5yJiZ5Pj1GZVtaXVswXS5zLmMmJnk8PUZlW1pdWzBdLmUu''@;'; put 'put ''YyYmKHAuRj1GZVtaXVsxXSk7c3dpdGNoKChrWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihlZT1wYXJzZUludChrWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLGxlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi''@;'; put 'put ''XSwxMCl8fDAsWC5wdXNoKGI9e3M6e3I6SSxjOnl9LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pKSxrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYodWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLHAudCl7Y2FzZSJib29sZWFuIjpwLnQ9ImIiLHAudj1X''@;'; put 'put ''ZShrWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLnZhbHVlKTticmVhaztjYXNlImRhdGUiOnAudD0iZCIscC52PVhlKGtbImRhdGUtdmFsdWUiXSksci5jZWxsRGF0ZXN8''@;'; put 'put ''fChwLnQ9Im4iLHAudj1pcihwLnYpKSxwLno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpwLnQ9Im4iLHAudj11byhrWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHIuY2VsbERhdGVzJiYocC50PSJkIixwLnY9bzAocC52KSkscC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOnAudD0i''@;'; put 'put ''biIscC52PXBhcnNlRmxvYXQoay5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1wLnQmJiJ0ZXh0IiE9PXAudCYmcC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK3AudCk7cC50PSJzIixudWxsIT1rWyJzdHJp''@;'; put 'put ''bmctdmFsdWUiXSYmKFQ9SWUoa1sic3RyaW5nLXZhbHVlIl0pLE09W10pfX1lbHNle2lmKGo9ITEsInMiPT09cC50JiYocC52PVR8fCIiLE0ubGVuZ3RoJiYocC5SPU0pLGo9MD09ZykseGUuVGFyZ2V0JiYocC5sPXhlKSxDLmxlbmd0aD4wJiYocC5jPUMsQz1bXSksVCYmITEhPT1yLmNlbGxU''@;'; put 'put ''ZXh0JiYocC53PVQpLGomJihwLnQ9InoiLGRlbGV0ZSBwLnYpLCghanx8ci5zaGVldFN0dWJzKSYmIShyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PUkpKWZvcih2YXIgWT0wO1k8ZGU7KytZKXtpZih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHIu''@;'; put 'put ''ZGVuc2UpZm9yKHZbSStZXXx8KHZbSStZXT1bXSksdltJK1ldW3ldPTA9PVk/cDpNZShwKTstLXVlPjA7KXZbSStZXVt5K3VlXT1NZShwKTtlbHNlIGZvcih2W2dlKHtyOkkrWSxjOnl9KV09cDstLXVlPjA7KXZbZ2Uoe3I6SStZLGM6eSt1ZX0pXT1NZShwKTtQLmUuYzw9eSYmKFAuZS5jPXkp''@;'; put 'put ''fXkrPSh1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHVlPTAscD17fSxUPSIiLE09W119eGU9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1''@;'; put 'put ''Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PXVbMV0pe2lmKChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3Rh''@;'; put 'put ''dGU6ICIraX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpO1UudD1ULE0ubGVuZ3RoJiYo''@;'; put 'put ''VS5SPU0pLFUuYT1PLEMucHVzaChVKX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMV0pO089IiIsRD0wLFQ9IiIsZz0wLE09W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT11WzFdP089YS5zbGljZShELHUuaW5kZXgpOkQ9dS5pbmRleCt1''@;'; put 'put ''WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0t''@;'; put 'put ''bWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6''@;'; put 'put ''aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7VD0iIixnPTAsTT1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNl''@;'; put 'put ''ImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJzdHlsZSI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNl''@;'; put 'put ''IjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4t''@;'; put 'put ''c3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1j''@;'; put 'put ''b2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNl''@;'; put 'put ''ImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2Ui''@;'; put 'put ''bGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6''@;'; put 'put ''Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZp''@;'; put 'put ''bHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0''@;'; put 'put ''aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRl''@;'; put 'put ''ci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJm''@;'; put 'put ''aWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3Rp''@;'; put 'put ''YyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0''@;'; put 'put ''aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJk''@;'; put 'put ''YXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBp''@;'; put 'put ''bG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6''@;'; put 'put ''Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNv''@;'; put 'put ''bW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PXVbMV0pe2lmKFZbZi5uYW1lXT1jLChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3RhdGU6ICIr''@;'; put 'put ''aX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihjPSIiLGY9bWUodVswXSwhMSksbi5wdXNoKFt1WzNdLCEwXSkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3''@;'; put 'put ''ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6cz1tZSh1WzBdLCExKSxjKz1pY1t1WzNdXVsi''@;'; put 'put ''bG9uZyI9PT1zLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09dVswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09dVsxXSlzd2l0Y2gobltuLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpjKz1h''@;'; put 'put ''LnNsaWNlKG8sdS5pbmRleCl9ZWxzZSBvPXUuaW5kZXgrdVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Sz1ibigocz1tZSh1WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgRWU9e05hbWU6cy5uYW1lLFJlZjpLWzBdKyIhIitLWzFdfTtzZSYmKEVlLlNoZWV0''@;'; put 'put ''PWQubGVuZ3RoKSxjZS5OYW1lcy5wdXNoKEVlKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKG5bbi5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PXVbMV18fGsmJmtbInN0cmluZy12YWx1ZSJdKW1lKHVb''@;'; put 'put ''MF0sITEpLGc9dS5pbmRleCt1WzBdLmxlbmd0aDtlbHNle3ZhciBBPVJtKGEuc2xpY2UoZyx1LmluZGV4KSk7VD0oVC5sZW5ndGg+MD9UKyJcbiI6IiIpK0FbMF19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09dVsxXSlicmVhazt0cnl7eFsoSz1ibihtZSh1WzBdKVsidGFy''@;'; put 'put ''Z2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOktbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PXVbMV0pe2lmKCEoeGU9bWUodVswXSwhMSkpLmhyZWYpYnJlYWs7eGUuVGFyZ2V0PUllKHhlLmhyZWYpLGRlbGV0ZSB4ZS5ocmVmLCIjIj09eGUu''@;'; put 'put ''VGFyZ2V0LmNoYXJBdCgwKSYmeGUuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oSz1ibih4ZS5UYXJnZXQuc2xpY2UoMSkpLHhlLlRhcmdldD0iIyIrS1swXSsiISIrS1sxXSk6eGUuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoeGUuVGFyZ2V0PXhlLlRhcmdldC5zbGljZSgzKSl9YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDpzd2l0Y2godVsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6Ijpj''@;'; put 'put ''YXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKHUpfX12YXIgUGU9e1NoZWV0czp4LFNoZWV0TmFtZXM6ZCxXb3JrYm9vazpjZX07cmV0dXJuIHIuYm9va1NoZWV0cyYmZGVsZXRlIFBlLlNoZWV0cyxQZX1mdW5jdGlvbiBjYyhlLHQpe3JldHVybiBz''@;'; put 'put ''YyhlLHQpfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGUpOkJlKHd0KGUpKX1mdW5j''@;'; put 'put ''dGlvbiBEdChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuK2kubGVuZ3RofSwwKSxyPW5ldyBVaW50OEFycmF5KHQpLGE9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Iuc2V0KG4sYSksYSs9bi5sZW5ndGh9KSxyfWZ1bmN0aW9uIHVjKGUpe3JldHVybiAx''@;'; put 'put ''Njg0MzAwOSooKGU9KDg1ODk5MzQ1OSYoZS09ZT4+MSYxNDMxNjU1NzY1KSkrKGU+PjImODU4OTkzNDU5KSkrKGU+PjQpJjI1MjY0NTEzNSk+Pj4yNH1mdW5jdGlvbiBLYShlLHQpe3ZhciByPXQ/dFswXTowLGE9MTI3JmVbcl07ZTppZihlW3IrK10+PTEyOCYmKGF8PSgxMjcmZVtyXSk8PDcs''@;'; put 'put ''ZVtyKytdPDEyOHx8KGF8PSgxMjcmZVtyXSk8PDE0LGVbcisrXTwxMjgpfHwoYXw9KDEyNyZlW3JdKTw8MjEsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsMjgpLCsrcixlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwzNSksKytyLGVbcisrXTwx''@;'; put 'put ''MjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRoLnBvdygyLDQyKSwrK3IsZVtyKytdPDEyOCkpKWJyZWFrIGU7cmV0dXJuIHQmJih0WzBdPXIpLGF9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9MCxyPTEyNyZlW3RdO2U6aWYoZVt0KytdPj0xMjgpe2lmKHJ8PSgxMjcmZVt0XSk8PDcsZVt0KytdPDEyOHx8''@;'; put 'put ''KHJ8PSgxMjcmZVt0XSk8PDE0LGVbdCsrXTwxMjgpfHwocnw9KDEyNyZlW3RdKTw8MjEsZVt0KytdPDEyOCkpYnJlYWsgZTtyfD0oMTI3JmVbdF0pPDwyOH1yZXR1cm4gcn1mdW5jdGlvbiBSZShlKXtmb3IodmFyIHQ9W10scj1bMF07clswXTxlLmxlbmd0aDspe3ZhciBmLGE9clswXSxuPUth''@;'; put 'put ''KGUsciksaT03Jm4scz0wO2lmKDA9PShuPU1hdGguZmxvb3Iobi84KSkpYnJlYWs7c3dpdGNoKGkpe2Nhc2UgMDpmb3IodmFyIGM9clswXTtlW3JbMF0rK10+PTEyODspO2Y9ZS5zbGljZShjLHJbMF0pO2JyZWFrO2Nhc2UgNTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTQpKSxyWzBdKz1zO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTgpKSxyWzBdKz1zO2JyZWFrO2Nhc2UgMjpzPUthKGUsciksZj1lLnNsaWNlKHJbMF0sclswXStzKSxyWzBdKz1zO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQQiBUeXBlICIuY29uY2F0KGksIiBmb3IgRmllbGQgIiku''@;'; put 'put ''Y29uY2F0KG4sIiBhdCBvZmZzZXQgIikuY29uY2F0KGEpKX12YXIgbz17ZGF0YTpmLHR5cGU6aX07bnVsbD09dFtuXT90W25dPVtvXTp0W25dLnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gZT8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB0KHIuZGF0YSl9KXx8W119''@;'; put 'put ''ZnVuY3Rpb24gTW0oZSx0KXtpZigwIT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTbmFwcHkgY2h1bmsgdHlwZSAiLmNvbmNhdChlKSk7Zm9yKHZhciByPVswXSxhPUthKHQsciksbj1bXTtyWzBdPHQubGVuZ3RoOyl7dmFyIGk9MyZ0W3JbMF1dO2lmKDAhPWkpe3ZhciBjPTAsbz0w''@;'; put 'put ''O2lmKDE9PWk/KG89NCsodFtyWzBdXT4+MiY3KSxjPSgyMjQmdFtyWzBdKytdKTw8MyxjfD10W3JbMF0rK10pOihvPTErKHRbclswXSsrXT4+MiksMj09aT8oYz10W3JbMF1dfHRbclswXSsxXTw8OCxyWzBdKz0yKTooYz0odFtyWzBdXXx0W3JbMF0rMV08PDh8dFtyWzBdKzJdPDwxNnx0W3Jb''@;'; put 'put ''MF0rM108PDI0KT4+PjAsclswXSs9NCkpLG49W0R0KG4pXSwwPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvZmZzZXQgMCIpO2lmKGM+blswXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBiZXlvbmQgbGVuZ3RoIik7aWYobz49Yylmb3Iobi5wdXNoKG5bMF0u''@;'; put 'put ''c2xpY2UoLWMpKSxvLT1jO28+PW5bbi5sZW5ndGgtMV0ubGVuZ3RoOyluLnB1c2gobltuLmxlbmd0aC0xXSksby09bltuLmxlbmd0aC0xXS5sZW5ndGg7bi5wdXNoKG5bMF0uc2xpY2UoLWMsLWMrbykpfWVsc2V7dmFyIHM9dFtyWzBdKytdPj4yO2lmKHM8NjApKytzO2Vsc2V7dmFyIGY9cy01''@;'; put 'put ''OTtzPXRbclswXV0sZj4xJiYoc3w9dFtyWzBdKzFdPDw4KSxmPjImJihzfD10W3JbMF0rMl08PDE2KSxmPjMmJihzfD10W3JbMF0rM108PDI0KSxzPj4+PTAscysrLHJbMF0rPWZ9bi5wdXNoKHQuc2xpY2UoclswXSxyWzBdK3MpKSxyWzBdKz1zfX12YXIgbD1EdChuKTtpZihsLmxlbmd0aCE9''@;'; put 'put ''YSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGVuZ3RoOiAiLmNvbmNhdChsLmxlbmd0aCwiICE9ICIpLmNvbmNhdChhKSk7cmV0dXJuIGx9ZnVuY3Rpb24gSG0oZSx0LHIpe3N3aXRjaChlWzBdKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uIFVtKGUs''@;'; put 'put ''dCxyLGEpe3ZhciBoLG49SnQoZSksaT1uLmdldFVpbnQzMig0LCEwKSxzPShhPjE/MTI6OCkrNCp1YyhpJihhPjE/MzQ3MDozOTgpKSxmPS0xLGM9LTEsbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDUxMiZpJiYoZj1uLmdldFVpbnQzMihzLCEwKSxzKz00KSxzKz00KnVjKGkm''@;'; put 'put ''KGE+MT8xMjI4ODo0MDk2KSksMTYmaSYmKGM9bi5nZXRVaW50MzIocywhMCkscys9NCksMzImaSYmKG89bi5nZXRGbG9hdDY0KHMsITApLHMrPTgpLDY0JmkmJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKm4uZ2V0RmxvYXQ2NChzLCEwKSkscys9OCksZVsyXSl7Y2FzZSAwOmJyZWFrO2Nh''@;'; put 'put ''c2UgMjpoPXt0OiJuIix2Om99O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbY119O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07''@;'; put 'put ''YnJlYWs7Y2FzZSA5OmlmKGY+LTEpaD17dDoicyIsdjpyW2ZdfTtlbHNlIGlmKGM+LTEpaD17dDoicyIsdjp0W2NdfTtlbHNle2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpO2g9e3Q6Im4iLHY6b319YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNlbGwgdHlwZSAiLmNvbmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIsZVswXSk7Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBXbShlLHQscil7dmFyIGgsYT1KdChlKSxuPWEuZ2V0VWludDMyKDgsITApLGk9''@;'; put 'put ''MTIscz0tMSxmPS0xLGM9TmFOLG89TmFOLGw9bmV3IERhdGUoMjAwMSwwLDEpO3N3aXRjaCgxJm4mJihjPWZ1bmN0aW9uIExtKGUsdCl7Zm9yKHZhciByPSgxMjcmZVt0KzE1XSk8PDd8ZVt0KzE0XT4+MSxhPTEmZVt0KzE0XSxuPXQrMTM7bj49dDstLW4pYT0yNTYqYStlW25dO3JldHVybigx''@;'; put 'put ''MjgmZVt0KzE1XT8tYTphKSpNYXRoLnBvdygxMCxyLTYxNzYpfShlLGkpLGkrPTE2KSwyJm4mJihvPWEuZ2V0RmxvYXQ2NChpLCEwKSxpKz04KSw0Jm4mJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKmEuZ2V0RmxvYXQ2NChpLCEwKSksaSs9OCksOCZuJiYoZj1hLmdldFVpbnQzMihpLCEw''@;'; put 'put ''KSxpKz00KSwxNiZuJiYocz1hLmdldFVpbnQzMihpLCEwKSxpKz00KSxlWzFdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmNhc2UgMTA6aD17dDoibiIsdjpjfTticmVhaztjYXNlIDM6aD17dDoicyIsdjp0W2ZdfTticmVhaztjYXNlIDU6aD17dDoiZCIsdjpsfTticmVhaztjYXNlIDY6aD17dDoi''@;'; put 'put ''YiIsdjpvPjB9O2JyZWFrO2Nhc2UgNzpoPXt0OiJuIix2Om8vODY0MDB9O2JyZWFrO2Nhc2UgODpoPXt0OiJlIix2OjB9O2JyZWFrO2Nhc2UgOTppZighKHM+LTEpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZu''@;'; put 'put ''LCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSk7aD17dDoicyIsdjpyW3NdfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZuLCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSl9cmV0''@;'; put 'put ''dXJuIGh9KGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGF5bG9hZCB2ZXJzaW9uICIuY29uY2F0KGVbMF0pKX19ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIEthKFJlKGUpWzFdWzBdLmRhdGEpfWZ1bmN0aW9uIGhjKGUsdCl7dmFyIHI9UmUodC5kYXRhKSxhPVll''@;'; put 'put ''KHJbMV1bMF0uZGF0YSksaT1bXTtyZXR1cm4oclszXXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9UmUocy5kYXRhKSxjPVllKGZbMV1bMF0uZGF0YSk+Pj4wO3N3aXRjaChhKXtjYXNlIDE6aVtjXT1IbihmWzNdWzBdLmRhdGEpO2JyZWFrO2Nhc2UgODp2YXIgbD1SZShlW0VyKGZb''@;'; put 'put ''OV1bMF0uZGF0YSldWzBdLmRhdGEpLGg9ZVtFcihsWzFdWzBdLmRhdGEpXVswXSx4PVllKGgubWV0YVsxXVswXS5kYXRhKTtpZigyMDAxIT14KXRocm93IG5ldyBFcnJvcigiMjAwMCB1bmV4cGVjdGVkIHJlZmVyZW5jZSB0byAiLmNvbmNhdCh4KSk7dmFyIGQ9UmUoaC5kYXRhKTtpW2NdPWRb''@;'; put 'put ''M10ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBIbih2LmRhdGEpfSkuam9pbigiIil9fSksaX1mdW5jdGlvbiB6bShlLHQpe3ZhciBhPXsiIXJlZiI6IkExIn0sbj1lW0VyKFJlKHQuZGF0YSlbMl1bMF0uZGF0YSldLGk9WWUoblswXS5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDEhPWkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCI2MDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KGkpKTtyZXR1cm4gZnVuY3Rpb24gR20oZSx0LHIpe3ZhciBhLG49UmUodC5kYXRhKSxpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07aWYoaS5lLnI9KFllKG5bNl1bMF0uZGF0YSk+Pj4wKS0xLGkuZS5y''@;'; put 'put ''PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyB2YXJpbnQgIi5jb25jYXQobls2XVswXS5kYXRhKSk7aWYoaS5lLmM9KFllKG5bN11bMF0uZGF0YSk+Pj4wKS0xLGkuZS5jPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbCB2YXJpbnQgIi5jb25jYXQobls3XVswXS5kYXRhKSk7''@;'; put 'put ''clsiIXJlZiJdPXdlKGkpO3ZhciBzPVJlKG5bNF1bMF0uZGF0YSksZj1oYyhlLGVbRXIoc1s0XVswXS5kYXRhKV1bMF0pLGM9bnVsbCE9KGE9c1sxN10pJiZhWzBdP2hjKGUsZVtFcihzWzE3XVswXS5kYXRhKV1bMF0pOltdLG89UmUoc1szXVswXS5kYXRhKSxsPTA7b1sxXS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGgpe3ZhciB4PVJlKGguZGF0YSksZD1lW0VyKHhbMl1bMF0uZGF0YSldWzBdLHY9WWUoZC5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDIhPXYpdGhyb3cgbmV3IEVycm9yKCI2MDAxIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHYpKTt2YXIgdT1mdW5jdGlvbiBYbShl''@;'; put 'put ''LHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPW51bGwhPShyPWE/Lls3XSkmJnJbMF0/WWUoYVs3XVswXS5kYXRhKT4+PjA+MD8xOjA6LTEsaT1WbihhWzVdLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbiBWbShlLHQpe3ZhciByLGEsbixpLHMsZixjLG8sbCxoLHgsZCx2LHUsTixNLHA9UmUo''@;'; put 'put ''ZSksaz1ZZShwWzFdWzBdLmRhdGEpPj4+MCxUPVllKHBbMl1bMF0uZGF0YSk+Pj4wLGc9KG51bGw9PShhPW51bGw9PShyPXBbOF0pP3ZvaWQgMDpyWzBdKT92b2lkIDA6YS5kYXRhKSYmWWUocFs4XVswXS5kYXRhKT4wfHwhMTtpZihudWxsIT0oaT1udWxsPT0obj1wWzddKT92b2lkIDA6blsw''@;'; put 'put ''XSkmJmkuZGF0YSYmMCE9dClOPW51bGw9PShmPW51bGw9PShzPXBbN10pP3ZvaWQgMDpzWzBdKT92b2lkIDA6Zi5kYXRhLE09bnVsbD09KG89bnVsbD09KGM9cFs2XSk/dm9pZCAwOmNbMF0pP3ZvaWQgMDpvLmRhdGE7ZWxzZXtpZihudWxsPT0oaD1udWxsPT0obD1wWzRdKT92b2lkIDA6bFsw''@;'; put 'put ''XSl8fCFoLmRhdGF8fDE9PXQpdGhyb3ciTlVNQkVSUyBUaWxlIG1pc3NpbmcgIi5jb25jYXQodCwiIGNlbGwgc3RvcmFnZSIpO049bnVsbD09KGQ9bnVsbD09KHg9cFs0XSk/dm9pZCAwOnhbMF0pP3ZvaWQgMDpkLmRhdGEsTT1udWxsPT0odT1udWxsPT0odj1wWzNdKT92b2lkIDA6dlswXSk/''@;'; put 'put ''dm9pZCAwOnUuZGF0YX1mb3IodmFyIEk9Zz80OjEseT1KdChOKSxQPVtdLFI9MDtSPE4ubGVuZ3RoLzI7KytSKXt2YXIgVj15LmdldFVpbnQxNigyKlIsITApO1Y8NjU1MzUmJlAucHVzaChbUixWXSl9aWYoUC5sZW5ndGghPVQpdGhyb3ciRXhwZWN0ZWQgIi5jb25jYXQoVCwiIGNlbGxzLCBm''@;'; put 'put ''b3VuZCAiKS5jb25jYXQoUC5sZW5ndGgpO3ZhciBYPVtdO2ZvcihSPTA7UjxQLmxlbmd0aC0xOysrUilYW1BbUl1bMF1dPU0uc3ViYXJyYXkoUFtSXVsxXSpJLFBbUisxXVsxXSpJKTtyZXR1cm4gUC5sZW5ndGg+PTEmJihYW1BbUC5sZW5ndGgtMV1bMF1dPU0uc3ViYXJyYXkoUFtQLmxlbmd0''@;'; put 'put ''aC0xXVsxXSpJKSkse1I6ayxjZWxsczpYfX0ocyxuKX0pO3JldHVybntucm93czpZZShhWzRdWzBdLmRhdGEpPj4+MCxkYXRhOmkucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIHNbZi5SXXx8KHNbZi5SXT1bXSksZi5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGMsbyl7aWYoc1tmLlJdW29d''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGNlbGwgcj0iLmNvbmNhdChmLlIsIiBjPSIpLmNvbmNhdChvKSk7c1tmLlJdW29dPWN9KSxzfSxbXSl9fSgwLGQpO3UuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHAsayl7cC5mb3JFYWNoKGZ1bmN0aW9uKFQsZyl7dmFyIE49Z2Uoe3I6bCtrLGM6''@;'; put 'put ''Z30pLE09SG0oVCxmLGMpO00mJihyW05dPU0pfSl9KSxsKz11Lm5yb3dzfSl9KGUsblswXSxhKSxhfWZ1bmN0aW9uIHpuKGUpe3ZhciB0LHIsYSxuLGk9e30scz1bXTtpZihlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGMubWF0Y2goL1wuaXdwdjIvKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIHBhc3N3b3JkIHByb3RlY3Rpb24iKX0pLGUuRmlsZUluZGV4LmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5uYW1lLm1hdGNoKC9cLml3YSQvKSl7dmFyIG8sbDt0cnl7bz1mdW5jdGlvbiB6cihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgYT1l''@;'; put 'put ''W3IrK10sbj1lW3JdfGVbcisxXTw8OHxlW3IrMl08PDE2O3QucHVzaChNbShhLGUuc2xpY2Uocis9MyxyK24pKSkscis9bn1pZihyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkYXRhIGlzIG5vdCBhIHZhbGlkIGZyYW1lZCBzdHJlYW0hIik7cmV0dXJuIER0KHQpfShjLmNvbnRlbnQp''@;'; put 'put ''fWNhdGNoKGgpe3JldHVybiBjb25zb2xlLmxvZygiPz8gIitjLmNvbnRlbnQubGVuZ3RoKyIgIisoaC5tZXNzYWdlfHxoKSl9dHJ5e2w9ZnVuY3Rpb24gR3IoZSl7Zm9yKHZhciB0LHI9W10sYT1bMF07YVswXTxlLmxlbmd0aDspe3ZhciBuPUthKGUsYSksaT1SZShlLnNsaWNlKGFbMF0sYVsw''@;'; put 'put ''XStuKSk7YVswXSs9bjt2YXIgcz17aWQ6WWUoaVsxXVswXS5kYXRhKSxtZXNzYWdlczpbXX07aVsyXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBjPVJlKGYuZGF0YSksbz1ZZShjWzNdWzBdLmRhdGEpO3MubWVzc2FnZXMucHVzaCh7bWV0YTpjLGRhdGE6ZS5zbGljZShhWzBdLGFbMF0rbyl9''@;'; put 'put ''KSxhWzBdKz1vfSksbnVsbCE9KHQ9aVszXSkmJnRbMF0mJihzLm1lcmdlPVllKGlbM11bMF0uZGF0YSk+Pj4wPjApLHIucHVzaChzKX1yZXR1cm4gcn0obyl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCIjIyAiKyhoLm1lc3NhZ2V8fGgpKX1sLmZvckVhY2goZnVuY3Rpb24oaCl7aVto''@;'; put 'put ''LmlkXT1oLm1lc3NhZ2VzLHMucHVzaChoLmlkKX0pfX0pLCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaGFzIG5vIG1lc3NhZ2VzIik7dmFyIGY9KG51bGw9PShuPW51bGw9PShhPW51bGw9PShyPW51bGw9PSh0PWk/LlsxXSk/dm9pZCAwOnRbMF0pP3ZvaWQgMDpyLm1ldGEpP3Zv''@;'; put 'put ''aWQgMDphWzFdKT92b2lkIDA6blswXS5kYXRhKSYmMT09WWUoaVsxXVswXS5tZXRhWzFdWzBdLmRhdGEpJiZpWzFdWzBdO2lmKGZ8fHMuZm9yRWFjaChmdW5jdGlvbihjKXtpW2NdLmZvckVhY2goZnVuY3Rpb24obyl7aWYoMT09WWUoby5tZXRhWzFdWzBdLmRhdGEpPj4+MCl7aWYoZil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkRvY3VtZW50IGhhcyBtdWx0aXBsZSByb290cyIpO2Y9b319KX0pLCFmKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgRG9jdW1lbnQgcm9vdCIpO3JldHVybiBmdW5jdGlvbiBqbShlLHQpe3ZhciByPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX07aWYoVm4oUmUo''@;'; put 'put ''dC5kYXRhKVsxXSxFcikuZm9yRWFjaChmdW5jdGlvbihpKXtlW2ldLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoMj09WWUocy5tZXRhWzFdWzBdLmRhdGEpKXt2YXIgYz1mdW5jdGlvbiAkbShlLHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPXtuYW1lOm51bGwhPShyPWFbMV0pJiZyWzBdP0huKGFb''@;'; put 'put ''MV1bMF0uZGF0YSk6IiIsc2hlZXRzOltdfTtyZXR1cm4gVm4oYVsyXSxFcikuZm9yRWFjaChmdW5jdGlvbihzKXtlW3NdLmZvckVhY2goZnVuY3Rpb24oZil7NmUzPT1ZZShmLm1ldGFbMV1bMF0uZGF0YSkmJm4uc2hlZXRzLnB1c2goem0oZSxmKSl9KX0pLG59KGUscyk7Yy5zaGVldHMuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihvLGwpe2VpKHIsbywwPT1sP2MubmFtZTpjLm5hbWUrIl8iK2wsITApfSl9fSl9KSwwPT1yLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW1wdHkgTlVNQkVSUyBmaWxlIik7cmV0dXJuIHJ9KGksZil9ZnVuY3Rpb24gJG4oZSl7IWZ1bmN0aW9uIHhj''@;'; put 'put ''KGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9MDthIT1lLmxlbmd0aDsrK2Epe3ZhciBuPWVbYV07dm9pZCAwPT09cltuWzBdXSYmKHJbblswXV09blsxXSksIm4iPT09blsyXSYmKHJbblswXV09TnVtYmVyKHJbblswXV0pKX19fShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwh''@;'; put 'put ''MF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJi''@;'; put 'put ''b29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKGUpfWZ1bmN0aW9uIEptKGUpe3JldHVybiBrZS5XUy5pbmRleE9mKGUpPi0xPyJzaGVldCI6a2UuQ1MmJmU9PWtlLkNTPyJjaGFydCI6a2UuRFMmJmU9PWtlLkRTPyJkaWFsb2ciOmtlLk1T''@;'; put 'put ''JiZlPT1rZS5NUz8ibWFjcm8iOmUmJmUubGVuZ3RoP2U6InNoZWV0In1mdW5jdGlvbiBabShlLHQscixhLG4saSxzLGYsYyxvLGwsaCl7dHJ5e2lbYV09SWEoTnIoZSxyLCEwKSx0KTt2YXIgZCx4PVFlKGUsdCk7c3dpdGNoKGYpe2Nhc2Uic2hlZXQiOmQ9U3AoeCx0LG4sYyxpW2FdLG8sbCxo''@;'; put 'put ''KTticmVhaztjYXNlImNoYXJ0IjppZighKGQ9ZnVuY3Rpb24gRnAoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBycChlLHQscixhLG4pe2lmKCFlKXJldHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBpPXsiIXR5cGUiOiJjaGFydCIsIiFk''@;'; put 'put ''cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxzPVtdLGY9ITE7cmV0dXJuIGh0KGUsZnVuY3Rpb24obyxsLGgpe3N3aXRjaChoKXtjYXNlIDU1MDppWyIhcmVsIl09bzticmVhaztjYXNlIDY1MTpuLlNoZWV0c1tyXXx8KG4uU2hlZXRzW3JdPXt9KSxvLm5hbWUmJihuLlNoZWV0c1tyXS5Db2RlTmFt''@;'; put 'put ''ZT1vLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OmY9ITA7YnJlYWs7Y2FzZSAzNjpmPSExO2JyZWFrO2Nhc2UgMzc6cy5wdXNoKGgpO2JyZWFrO2Nhc2UgMzg6''@;'; put 'put ''cy5wb3AoKTticmVhaztkZWZhdWx0OmlmKGwuVD4wKXMucHVzaChoKTtlbHNlIGlmKGwuVDwwKXMucG9wKCk7ZWxzZSBpZighZnx8dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIraC50b1N0cmluZygxNikpfX0sdCksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlb''@;'; put 'put ''IiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLGEscixuLGkpOmZ1bmN0aW9uIFoyKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFyIHMsaT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZj1lLm1hdGNoKFBm''@;'; put 'put ''KTtyZXR1cm4gZiYmTG4oZlswXSwwLG4sciksKHM9ZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihpWyIhcmVsIl09c1sxXSksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlbIiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLDAscixuLGkpfSh4LHQsbixjLGlbYV0s''@;'; put 'put ''bykpfHwhZFsiIWRyYXdlbCJdKWJyZWFrO3ZhciB2PVNhKGRbIiFkcmF3ZWwiXS5UYXJnZXQsdCksdT1PYSh2KSxwPWZ1bmN0aW9uIGh4KGUsdCl7aWYoIWUpcmV0dXJuIj8/Ijt2YXIgcj0oZS5tYXRjaCgvPGM6Y2hhcnQgW14+XSpyOmlkPSIoW14iXSopIi8pfHxbIiIsIiJdKVsxXTtyZXR1''@;'; put 'put ''cm4gdFsiIWlkIl1bcl0uVGFyZ2V0fShOcihlLHYsITApLElhKE5yKGUsdSwhMCksdikpLGs9U2EocCx2KSxUPU9hKGspO2Q9ZnVuY3Rpb24gcTIoZSx0LHIsYSxuLGkpe3ZhciBzPWl8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFlKXJldHVybiBpO3ZhciBmPTAsYz0wLG89IkEiLGw9e3M6e3I6''@;'; put 'put ''MmU2LGM6MmU2fSxlOntyOjAsYzowfX07cmV0dXJuKGUubWF0Y2goLzxjOm51bUNhY2hlPltcc1xTXSo/PFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgeD1mdW5jdGlvbiBKMihlKXt2YXIgYSx0PVtdLHI9ZS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhl''@;'; put 'put ''Lm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO3MmJih0WytzWzFdXT1yPytzWzJdOnNbMl0pfSk7dmFyIG49''@;'; put 'put ''SWUoKGUubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXthPWkucmVwbGFjZSgvPC4qPz4vZywiIil9''@;'; put 'put ''KSxbdCxuLGFdfShoKTtsLnMucj1sLnMuYz0wLGwuZS5jPWYsbz1IZShmKSx4WzBdLmZvckVhY2goZnVuY3Rpb24oZCx2KXtzW28rS2UodildPXt0OiJuIix2OmQsejp4WzFdfSxjPXZ9KSxsLmUucjxjJiYobC5lLnI9YyksKytmfSksZj4wJiYoc1siIXJlZiJdPXdlKGwpKSxzfShOcihlLGss''@;'; put 'put ''ITApLDAsMCxJYShOcihlLFQsITApLGspLDAsZCk7YnJlYWs7Y2FzZSJtYWNybyI6ZD1mdW5jdGlvbiB5cChlLHQscixhLG4saSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx0KTticmVhaztjYXNlImRpYWxvZyI6ZD1mdW5jdGlvbiBBcChlLHQscixhLG4s''@;'; put 'put ''aSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrZil9c1thXT1kO3ZhciBnPVtdO2kmJmlbYV0mJiRlKGlbYV0pLmZvckVhY2goZnVuY3Rpb24oTil7''@;'; put 'put ''dmFyIE09IiI7aWYoaVthXVtOXS5UeXBlPT1rZS5DTU5UKXtNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpO3ZhciBJPWZ1bmN0aW9uIElwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBFeChlLHQpe3ZhciByPVtdLGE9W10sbj17fSxpPSExO3JldHVybiBodChlLGZ1''@;'; put 'put ''bmN0aW9uKGYsYyxvKXtzd2l0Y2gobyl7Y2FzZSA2MzI6YS5wdXNoKGYpO2JyZWFrO2Nhc2UgNjM1Om49ZjticmVhaztjYXNlIDYzNzpuLnQ9Zi50LG4uaD1mLmgsbi5yPWYucjticmVhaztjYXNlIDYzNjppZihuLmF1dGhvcj1hW24uaWF1dGhvcl0sZGVsZXRlIG4uaWF1dGhvcix0LnNoZWV0''@;'; put 'put ''Um93cyYmbi5yZngmJnQuc2hlZXRSb3dzPD1uLnJmeC5yKWJyZWFrO24udHx8KG4udD0iIiksZGVsZXRlIG4ucmZ4LHIucHVzaChuKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZigh''@;'; put 'put ''Yy5UJiYoIWl8fHQuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitvLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiB4eChlLHQpe2lmKGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIHI9W10sYT1bXSxuPWUu''@;'; put 'put ''bWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7biYmblsxXSYmblsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6''@;'; put 'put ''KT9hdXRob3JbXj5dKj4oLiopLyk7ZiYmci5wdXNoKGZbMV0pfX0pO3ZhciBpPWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gaSYmaVsxXSYmaVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24ocyl7aWYoIiIhPT1zJiYiIiE9PXMudHJpbSgpKXt2YXIgZj1zLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKGYpe3ZhciBjPW1lKGZbMF0pLG89e2F1dGhvcjpjLmF1dGhvcklkJiZyW2MuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6Yy5yZWYs''@;'; put 'put ''Z3VpZDpjLmd1aWR9LGw9R2UoYy5yZWYpO2lmKCEodC5zaGVldFJvd3MmJnQuc2hlZXRSb3dzPD1sLnIpKXt2YXIgaD1zLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLHg9ISFoJiYhIWhbMV0mJlNuKGhbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O28u''@;'; put 'put ''cj14LnIsIjx0PjwvdD4iPT14LnImJih4LnQ9eC5oPSIiKSxvLnQ9KHgudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHQuY2VsbEhUTUwmJihvLmg9eC5oKSxhLnB1c2gobyl9fX19KSxhfShlLHIpfShRZShlLE0sITApLE0sYyk7aWYoIUl8fCFJLmxl''@;'; put 'put ''bmd0aClyZXR1cm47Z2YoZCxJLCExKX1pW2FdW05dLlR5cGU9PWtlLlRDTU5UJiYoTT1TYShpW2FdW05dLlRhcmdldCx0KSxnPWcuY29uY2F0KGZ1bmN0aW9uIGR4KGUsdCl7dmFyIHI9W10sYT0hMSxuPXt9LGk9MDtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGYsYyl7dmFyIG89bWUo''@;'; put 'put ''Zik7c3dpdGNoKHJ0KG9bMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxUaHJlYWRlZENvbW1lbnRzIjpjYXNlIjwvVGhyZWFkZWRDb21tZW50cz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0aHJlYWRlZENv''@;'; put 'put ''bW1lbnQiOm49e2F1dGhvcjpvLnBlcnNvbklkLGd1aWQ6by5pZCxyZWY6by5yZWYsVDoxfTticmVhaztjYXNlIjwvdGhyZWFkZWRDb21tZW50PiI6bnVsbCE9bi50JiZyLnB1c2gobik7YnJlYWs7Y2FzZSI8dGV4dD4iOmNhc2UiPHRleHQiOmk9YytmLmxlbmd0aDticmVhaztjYXNlIjwvdGV4''@;'; put 'put ''dD4iOm4udD1lLnNsaWNlKGksYykucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIik7YnJlYWs7Y2FzZSI8bWVudGlvbnMiOmNhc2UiPG1lbnRpb25zPiI6Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9tZW50aW9ucz4iOmNhc2UiPC9leHQ+IjphPSExO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb1swXSsiIGluIHRocmVhZGVkIGNvbW1lbnRzIil9cmV0dXJuIGZ9KSxyfShRZShlLE0sITApLGMpKSl9KSxnJiZnLmxlbmd0aCYmZ2YoZCxnLCEwLGMucGVvcGxlfHxbXSl9Y2F0Y2goTil7aWYo''@;'; put 'put ''Yy5XVEYpdGhyb3cgTn19ZnVuY3Rpb24gJHIoZSl7cmV0dXJuIi8iPT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gUW0oZSx0KXtpZih0YSgpLCRuKHQ9dHx8e30pLFdyKGUsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxXcihlLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBmYyhlLHQpe3Q9dHx8e30sV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIG9sKGUsdCl7Zm9yKHZhciBhLG4scj1ZMChlKTthPXlhLmV4ZWMocik7KXN3aXRjaChhWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09''@;'; put 'put ''KG49bWUoYVswXSwhMSkpLnBhdGgmJm4udHlwZSE9PWNsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNh''@;'; put 'put ''c2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnhtbCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7''@;'; put 'put ''aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUpO3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9''@;'; put 'put ''MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hh''@;'; put 'put ''ckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxuW3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVz''@;'; put 'put ''aChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQoZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4o''@;'; put 'put ''cil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIpP25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3''@;'; put 'put ''IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21t''@;'; put 'put ''ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10scGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaCly''@;'; put 'put ''ZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3''@;'; put 'put ''Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVdXSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSx0''@;'; put 'put ''LnhtbG5zIT09cnIuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTtyZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9''@;'; put 'put ''dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFpbnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29y''@;'; put 'put ''a2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xp''@;'; put 'put ''Y2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lmKFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVy''@;'; put 'put ''biBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVlPWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgs''@;'; put 'put ''IiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgpLHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRy''@;'; put 'put ''KG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxu''@;'; put 'put ''LnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9''@;'; put 'put ''W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJGbXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50''@;'; put 'put ''aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNl''@;'; put 'put ''IDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAz''@;'; put 'put ''NzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8uVD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy''@;'; put 'put ''ZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3Jl''@;'; put 'put ''dHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3ZhciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNh''@;'; put 'put ''c2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2''@;'; put 'put ''Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''VHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10s''@;'; put 'put ''cz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMuUmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAx''@;'; put 'put ''NTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNl''@;'; put 'put ''IDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3Mu''@;'; put 'put ''cHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3AoKSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw''@;'; put 'put ''ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29rcz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3Bz''@;'; put 'put ''Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49InhtbG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4i''@;'; put 'put ''OmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJv''@;'; put 'put ''b2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25H''@;'; put 'put ''cm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxk''@;'; put 'put ''ZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3Vz''@;'; put 'put ''dG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFy''@;'; put 'put ''dFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmpl''@;'; put 'put ''Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJl''@;'; put 'put ''dmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRjaCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29r''@;'; put 'put ''UHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1dKXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0s''@;'; put 'put ''MTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQcm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVz''@;'; put 'put ''aChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0''@;'; put 'put ''ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijpj''@;'; put 'put ''YXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQp''@;'; put 'put ''LFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0s''@;'; put 'put ''ci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIr''@;'; put 'put ''ci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmtib29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxl''@;'; put 'put ''bmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmci''@;'; put 'put ''OmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztjYXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1z''@;'; put 'put ''WzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRpdGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4u''@;'; put 'put ''Y3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNoKHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi''@;'; put 'put ''cmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBz''@;'; put 'put ''dHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJlYWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQo''@;'; put 'put ''bCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNv''@;'; put 'put ''bGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGljZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9z''@;'; put 'put ''PWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hlZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYm''@;'; put 'put ''KHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4gdjtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgo''@;'; put 'put ''ZSx0LHIpe3ZhciBhPVtdO3JldHVybiBodChlLGZ1bmN0aW9uKHMsZixjKXtpZig2Mz09PWMpYS5wdXNoKHMpO2Vsc2UgaWYoIWYuVCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitjLnRvU3RyaW5nKDE2KSl9KSxhfShlKTpmdW5jdGlvbiBjeChlKXt2YXIgdD1bXTtp''@;'; put 'put ''ZighZSlyZXR1cm4gdDt2YXIgcj0xO3JldHVybihlLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG49bWUoYSk7c3dpdGNoKG5bMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGMiOmRlbGV0ZSBuWzBdLG4uaT9yPW4uaTpuLmk9cix0LnB1c2gobil9fSksdH0oZSl9KFFlKGUsJHIobi5jYWxjY2hhaW4pKSxuLmNhbGNjaGFpbikpO3ZhciBULGcscD0wLGs9e30sTj1sLlNoZWV0cztoLldvcmtzaGVldHM9Ti5sZW5ndGgsaC5TaGVldE5hbWVzPVtdO2Zvcih2YXIg''@;'; put 'put ''TT0wO00hPU4ubGVuZ3RoOysrTSloLlNoZWV0TmFtZXNbTV09TltNXS5uYW1lO3ZhciBJPWk/ImJpbiI6InhtbCIseT1uLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLFA9KG4ud29ya2Jvb2tzWzBdLnNsaWNlKDAseSsxKSsiX3JlbHMvIituLndvcmtib29rc1swXS5zbGljZSh5KzEp''@;'; put 'put ''KyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO1dyKGUsUCl8fChQPSJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIik7dmFyIFI9SWEoTnIoZSxQLCEwKSxQLnJlcGxhY2UoL19yZWxzLiovLCJzNXMiKSk7KG4ubWV0YWRhdGF8fFtdKS5sZW5ndGg+PTEmJih0LnhsbWV0YT1mdW5jdGlv''@;'; put 'put ''biBicChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gaXgoZSx0LHIpe3ZhciBhPXtUeXBlczpbXSxDZWxsOltdLFZhbHVlOltdfSxuPXJ8fHt9LGk9W10scz0hMSxmPTI7cmV0dXJuIGh0KGUsZnVuY3Rpb24oYyxvLGwpe3N3aXRjaChsKXtjYXNlIDMzNTphLlR5''@;'; put 'put ''cGVzLnB1c2goe25hbWU6Yy5uYW1lfSk7YnJlYWs7Y2FzZSA1MTpjLmZvckVhY2goZnVuY3Rpb24oaCl7MT09Zj9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2hbMF0tMV0ubmFtZSxpbmRleDpoWzFdfSk6MD09ZiYmYS5WYWx1ZS5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OmhbMV19KX0pO2JyZWFrO2Nhc2UgMzM3OmY9Yz8xOjA7YnJlYWs7Y2FzZSAzMzg6Zj0yO2JyZWFrO2Nhc2UgMzU6aS5wdXNoKGwpLHM9ITA7YnJlYWs7Y2FzZSAzNjppLnBvcCgpLHM9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIXN8fG4uV1RGJiYzNSE9aVtpLmxlbmd0aC0xXSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrbC50b1N0cmluZygxNikpfX0pLGF9KGUsMCxyKTpmdW5jdGlvbiBmeChlLHQscil7dmFyIGE9e1R5cGVzOltdLENlbGw6W10sVmFsdWU6W119O2lmKCFlKXJldHVybiBhO3ZhciBzLG49ITEsaT0yO3JldHVybiBlLnJlcGxh''@;'; put 'put ''Y2UodnIsZnVuY3Rpb24oZil7dmFyIGM9bWUoZik7c3dpdGNoKHJ0KGNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxtZXRhZGF0YSI6Y2FzZSI8L21ldGFkYXRhPiI6Y2FzZSI8bWV0YWRhdGFUeXBlcyI6Y2FzZSI8L21ldGFkYXRhVHlwZXM+IjpjYXNlIjwvbWV0YWRhdGFUeXBlPiI6Y2FzZSI8''@;'; put 'put ''L2Z1dHVyZU1ldGFkYXRhPiI6Y2FzZSI8Yms+IjpjYXNlIjwvYms+IjpjYXNlIjwvcmM+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8bWV0YWRhdGFUeXBlIjphLlR5cGVzLnB1c2goe25hbWU6Yy5uYW1l''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSI8ZnV0dXJlTWV0YWRhdGEiOmZvcih2YXIgbz0wO288YS5UeXBlcy5sZW5ndGg7KytvKWEuVHlwZXNbb10ubmFtZT09Yy5uYW1lJiYocz1hLlR5cGVzW29dKTticmVhaztjYXNlIjxyYyI6MT09aT9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGlu''@;'; put 'put ''ZGV4OitjLnZ9KTowPT1pJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1tjLnQtMV0ubmFtZSxpbmRleDorYy52fSk7YnJlYWs7Y2FzZSI8Y2VsbE1ldGFkYXRhIjppPTE7YnJlYWs7Y2FzZSI8L2NlbGxNZXRhZGF0YT4iOmNhc2UiPC92YWx1ZU1ldGFkYXRhPiI6aT0yO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHZhbHVlTWV0YWRhdGEiOmk9MDticmVhaztjYXNlIjxleHQiOm49ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7Y2FzZSI8cnZiIjppZighcylicmVhaztzLm9mZnNldHN8fChzLm9mZnNldHM9W10pLHMub2Zmc2V0cy5wdXNoKCtjLmkpO2JyZWFrO2RlZmF1bHQ6aWYoIW4mJnIu''@;'; put 'put ''V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrY1swXSsiIGluIG1ldGFkYXRhIil9cmV0dXJuIGZ9KSxhfShlLDAscil9KFFlKGUsJHIobi5tZXRhZGF0YVswXSkpLG4ubWV0YWRhdGFbMF0sdCkpLChuLnBlb3BsZXx8W10pLmxlbmd0aD49MSYmKHQucGVvcGxlPWZ1bmN0aW9u''@;'; put 'put ''IHB4KGUsdCl7dmFyIHI9W10sYT0hMTtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8cGVyc29uTGlzdCI6Y2FzZSI8L3BlcnNvbkxpc3Q+IjpjYXNlIjwvcGVyc29uPiI6Y2FzZSI8ZXh0THN0Ijpj''@;'; put 'put ''YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHBlcnNvbiI6ci5wdXNoKHtuYW1lOnMuZGlzcGxheW5hbWUsaWQ6cy5pZH0pO2JyZWFrO2Nhc2UiPGV4dCI6YT0hMDticmVhaztjYXNlIjwvZXh0PiI6YT0hMTticmVhaztkZWZhdWx0Omlm''@;'; put 'put ''KCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3NbMF0rIiBpbiB0aHJlYWRlZCBjb21tZW50cyIpfXJldHVybiBpfSkscn0oUWUoZSwkcihuLnBlb3BsZVswXSkpLHQpKSxSJiYoUj1mdW5jdGlvbiBxbShlLHQpe2lmKCFlKXJldHVybiAwO3RyeXtlPXQubWFwKGZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBhLmlkfHwoYS5pZD1hLnN0clJlbElEKSxbYS5uYW1lLGVbIiFpZCJdW2EuaWRdLlRhcmdldCxKbShlWyIhaWQiXVthLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZSYmMCE9PWUubGVuZ3RoP2U6bnVsbH0oUixsLlNoZWV0cykpO3ZhciBW''@;'; put 'put ''PVFlKGUsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIiwhMCk/MTowO2U6Zm9yKHA9MDtwIT1oLldvcmtzaGVldHM7KytwKXt2YXIgWD0ic2hlZXQiO2lmKFImJlJbcF0/KFQ9InhsLyIrUltwXVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxXcihlLFQpfHwoVD1SW3BdWzFdKSxXcihlLFQp''@;'; put 'put ''fHwoVD1QLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStSW3BdWzFdKSxYPVJbcF1bMl0pOlQ9KFQ9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhwKzEtVikrIi4iK0kpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksZz1ULnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz''@;'; put 'put ''LyQzLnJlbHMiKSx0JiZudWxsIT10LnNoZWV0cylzd2l0Y2godHlwZW9mIHQuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYocCE9dC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoaC5TaGVldE5hbWVzW3BdLnRvTG93ZXJDYXNlKCkhPXQuc2hlZXRzLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodC5zaGVldHMpKXtmb3IodmFyIGI9ITEsZWU9MDtlZSE9dC5zaGVldHMubGVuZ3RoOysrZWUpIm51bWJlciI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXT09cCYmKGI9''@;'; put 'put ''MSksInN0cmluZyI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXS50b0xvd2VyQ2FzZSgpPT1oLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSYmKGI9MSk7aWYoIWIpY29udGludWUgZX19Wm0oZSxULGcsaC5TaGVldE5hbWVzW3BdLHAsayxzLFgsdCxsLGMsbyl9cmV0dXJu''@;'; put 'put ''IHY9e0RpcmVjdG9yeTpuLFdvcmtib29rOmwsUHJvcHM6aCxDdXN0cHJvcHM6ZCxEZXBzOnUsU2hlZXRzOnMsU2hlZXROYW1lczpoLlNoZWV0TmFtZXMsU3RyaW5nczpWYSxTdHlsZXM6byxUaGVtZXM6YyxTU0Y6TWUocGUpfSx0JiZ0LmJvb2tGaWxlcyYmKGUuZmlsZXM/KHYua2V5cz1hLHYu''@;'; put 'put ''ZmlsZXM9ZS5maWxlcyk6KHYua2V5cz1bXSx2LmZpbGVzPXt9LGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obGUscmUpe2xlPWxlLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLHYua2V5cy5wdXNoKGxlKSx2LmZpbGVzW2xlXT1lLkZpbGVJbmRleFtyZV19KSkpLHQmJnQuYm9v''@;'; put 'put ''a1ZCQSYmKG4udmJhLmxlbmd0aD4wP3YudmJhcmF3PVFlKGUsJHIobi52YmFbMF0pLCEwKTpuLmRlZmF1bHRzJiZuLmRlZmF1bHRzLmJpbj09PVN4JiYodi52YmFyYXc9UWUoZSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLHZ9ZnVuY3Rpb24gZWcoZSx0KXt2YXIgcj10fHx7fSxhPSJXb3Jr''@;'; put 'put ''Ym9vayIsbj12ZS5maW5kKGUsYSk7dHJ5e2lmKCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoZnVuY3Rpb24gUGgoZSl7dmFyIHQ9e307dC5p''@;'; put 'put ''ZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpfShuLmNvbnRlbnQpLCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRl''@;'; put 'put ''ZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgaT1mdW5jdGlvbiBCaChlKXt2YXIgdD1bXTtlLmwrPTQ7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChMaChlKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9PWkubGVuZ3RofHwxIT09aVswXS5jb21wcy5sZW5ndGh8''@;'; put 'put ''fDAhPT1pWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWlbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09aVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrYSk7aWYoIShuPXZlLmZpbmQo''@;'; put 'put ''ZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBzPWZ1bmN0aW9uIE1oKGUpe3ZhciB0PVtdO2UubCs9NDtm''@;'; put 'put ''b3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKGUucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiB0fShuLmNvbnRlbnQpO2lmKDEhPXMubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPXNbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy''@;'; put 'put ''eXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n''@;'; put 'put ''ICIrYSk7IWZ1bmN0aW9uIFdoKGUpe3ZhciB0PWZ1bmN0aW9uIFVoKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksZS5sKz00LHQuaWQ9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0Lm5hbWU9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0LlI9ZHQoZSw0KSx0LlU9ZHQoZSw0KSx0''@;'; put 'put ''Llc9ZHQoZSw0KSx0fShlKTtpZih0LmVuYW1lPWUucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHQuYmxrc3o9ZS5yZWFkX3NoaWZ0KDQpLHQuY21vZGU9ZS5yZWFkX3NoaWZ0KDQpLDQhPWUucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4g''@;'; put 'put ''dH0obi5jb250ZW50KX1jYXRjaHt9aWYoIShuPXZlLmZpbmQoZSxhPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIGY9ZnVuY3Rpb24gSGgoZSl7dmFyIHQ9ZHQoZSk7c3dpdGNo''@;'; put 'put ''KHQuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bdC5NaW5vcixWaChlKV07Y2FzZSAzOnJldHVyblt0Lk1pbm9yLFhoKCldO2Nhc2UgNDpyZXR1cm5bdC5NaW5vcixHaChlKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIit0Lk1p''@;'; put 'put ''bm9yKX0obi5jb250ZW50KTtpZighKG49dmUuZmluZChlLGE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO2lmKDQ9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X2FnaWxlPCJ1IilyZXR1''@;'; put 'put ''cm4gZGVjcnlwdF9hZ2lsZShmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTtpZigyPT1mWzBdJiZ0eXBlb2YgZGVjcnlwdF9zdGQ3NjwidSIpcmV0dXJuIGRlY3J5cHRfc3RkNzYoZlsxXSxuLmNvbnRlbnQsci5wYXNzd29yZHx8IiIscik7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlz''@;'; put 'put ''IHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIEtuKGUsdCl7dmFyIHI9IiI7c3dpdGNoKCh0fHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddXTtjYXNlImJhc2U2NCI6''@;'; put 'put ''cj1PcihlLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh0JiZ0LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3IuY2hhckNvZGVBdCgwKSxyLmNoYXJDb2RlQXQoMSksci5jaGFy''@;'; put 'put ''Q29kZUF0KDIpLHIuY2hhckNvZGVBdCgzKSxyLmNoYXJDb2RlQXQoNCksci5jaGFyQ29kZUF0KDUpLHIuY2hhckNvZGVBdCg2KSxyLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIHZjKGUsdCl7dmFyIHI9MDtlOmZvcig7cjxlLmxlbmd0aDspc3dpdGNoKGUuY2hhckNvZGVBdChyKSl7Y2FzZSAx''@;'; put 'put ''MDpjYXNlIDEzOmNhc2UgMzI6KytyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGUuc2xpY2UociksdCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBjYS50b193b3JrYm9vayhlLHQpfWZ1bmN0aW9uIFluKGUsdCxyLGEpe3JldHVybiBhPyhyLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2so''@;'; put 'put ''ZSxyKSk6Y2EudG9fd29ya2Jvb2sodCxyKX1mdW5jdGlvbiBJMChlLHQpe3IwKCk7dmFyIHI9dHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBJMChuZXcgVWludDhBcnJheShlKSwoKHI9TWUocikpLnR5cGU9ImFycmF5Iixy''@;'; put 'put ''KSk7dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSYmIXIudHlwZSYmKHIudHlwZT10eXBlb2YgRGVubzwidSI/ImJ1ZmZlciI6ImFycmF5Iik7dmFyIG4sYT1lLGk9ITE7aWYoci5jZWxsU3R5bGVzJiYoci5jZWxsTkY9ITAsci5zaGVldFN0dWJzPSEwKSxo''@;'; put 'put ''YT17fSxyLmRhdGVORiYmKGhhLmRhdGVORj1yLmRhdGVORiksci50eXBlfHwoci50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09ci50eXBlJiYoci50eXBlPVNlPyJidWZmZXIiOiJiaW5hcnkiLGE9ZnVuY3Rpb24gY28oZSl7aWYodHlwZW9m''@;'; put 'put ''IERlbm88InUiKXJldHVybiBEZW5vLnJlYWRGaWxlU3luYyhlKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB0PUZpbGUoZSk7dC5vcGVuKCJyIiksdC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgcj10LnJlYWQoKTtyZXR1cm4gdC5j''@;'; put 'put ''bG9zZSgpLHJ9Y2F0Y2goYSl7aWYoIWEubWVzc2FnZXx8IWEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBhfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZSl9KGUpLHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmIVNlJiYoci50eXBlPSJhcnJheSIpKSwic3Ry''@;'; put 'put ''aW5nIj09ci50eXBlJiYoaT0hMCxyLnR5cGU9ImJpbmFyeSIsci5jb2RlcGFnZT02NTAwMSxhPWZ1bmN0aW9uIGZnKGUpe3JldHVybiBlLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT90dChlKTplfShlKSksImFycmF5Ij09ci50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2Vv''@;'; put 'put ''ZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgcz1uZXcgQXJyYXlCdWZmZXIoMyksZj1uZXcgVWludDhBcnJheShzKTtpZihmLmZvbz0iYmFyIiwhZi5mb28pcmV0dXJuKHI9TWUocikpLnR5cGU9ImFycmF5IixJMChNMChhKSxyKX1zd2l0Y2goKG49S24oYSxyKSlb''@;'; put 'put ''MF0pe2Nhc2UgMjA4OmlmKDIwNz09PW5bMV0mJjE3PT09blsyXSYmMjI0PT09blszXSYmMTYxPT09bls0XSYmMTc3PT09bls1XSYmMjY9PT1uWzZdJiYyMjU9PT1uWzddKXJldHVybiBmdW5jdGlvbiBhZyhlLHQpe3JldHVybiB2ZS5maW5kKGUsIkVuY3J5cHRlZFBhY2thZ2UiKT9lZyhlLHQp''@;'; put 'put ''OktmKGUsdCl9KHZlLnJlYWQoYSxyKSxyKTticmVhaztjYXNlIDk6aWYoblsxXTw9OClyZXR1cm4gS2YoYSxyKTticmVhaztjYXNlIDYwOnJldHVybiBVbihhLHIpO2Nhc2UgNzM6aWYoNzM9PT1uWzFdJiY0Mj09PW5bMl0mJjA9PT1uWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBG''@;'; put 'put ''aWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBnaChlLHQpe3ZhciByPXR8fHt9LGE9ISFyLldURjtyLldURj0hMDt0cnl7dmFyIG49ZWYudG9fd29ya2Jvb2soZSxyKTtyZXR1cm4gci5XVEY9YSxufWNhdGNoKGkpe2lmKHIuV1RGPWEsIWku''@;'; put 'put ''bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJmEpdGhyb3cgaTtyZXR1cm4gY2EudG9fd29ya2Jvb2soZSx0KX19KGEscik7YnJlYWs7Y2FzZSA4NDppZig2NT09PW5bMV0mJjY2PT09blsyXSYmNzY9PT1uWzNdKXJldHVybiByZi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nh''@;'; put 'put ''c2UgODA6cmV0dXJuIDc1PT09blsxXSYmblsyXTw5JiZuWzNdPDk/ZnVuY3Rpb24gbmcoZSx0KXt2YXIgYT1lLG49dHx8e307cmV0dXJuIG4udHlwZXx8KG4udHlwZT1TZSYmQnVmZmVyLmlzQnVmZmVyKGUpPyJidWZmZXIiOiJiYXNlNjQiKSxRbShSaShhLG4pLG4pfShhLHIpOlluKGUsYSxy''@;'; put 'put ''LGkpO2Nhc2UgMjM5OnJldHVybiA2MD09PW5bM10/VW4oYSxyKTpZbihlLGEscixpKTtjYXNlIDI1NTppZigyNTQ9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBzZyhlLHQpe3ZhciByPWU7cmV0dXJuImJhc2U2NCI9PXQudHlwZSYmKHI9T3IocikpLHI9T2UudXRpbHMuZGVjb2RlKDEyMDAsci5z''@;'; put 'put ''bGljZSgyKSwic3RyIiksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7aWYoMD09PW5bMV0mJjI9PT1uWzJdJiYwPT09blszXSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDA6aWYoMD09PW5bMV0mJihuWzJdPj0yJiYwPT09blszXXx8MD09PW5bMl0mJig4PT09''@;'; put 'put ''blszXXx8OT09PW5bM10pKSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIFRuLnRvX3dvcmtib29rKGEscik7Y2FzZSAxMjM6aWYoOTI9PT1uWzFdJiYxMTQ9PT1uWzJdJiYxMTY9PT1uWzNdKXJldHVybiBv''@;'; put 'put ''Zi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBpZyhlLHQpe3ZhciByPSIiLGE9S24oZSx0KTtzd2l0Y2godC50eXBlKXtjYXNlImJhc2U2NCI6cj1PcihlKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2Nhc2UiYnVm''@;'; put 'put ''ZmVyIjpyPWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOnI9UHQoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrdC50eXBlKX1yZXR1cm4gMjM5PT1hWzBdJiYxODc9PWFbMV0mJjE5MT09YVsyXSYmKHI9QmUocikpLHQu''@;'; put 'put ''dHlwZT0iYmluYXJ5Iix2YyhyLHQpfShhLHIpO2Nhc2UgMTM3OmlmKDgwPT09blsxXSYmNzg9PT1uWzJdJiY3MT09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJQTkcgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpfXJldHVybiBtaC5pbmRleE9mKG5bMF0pPi0xJiZuWzJdPD0xMiYm''@;'; put 'put ''blszXTw9MzE/VG4udG9fd29ya2Jvb2soYSxyKTpZbihlLGEscixpKX1mdW5jdGlvbiBfYyhlLHQscixhLG4saSxzLGYpe3ZhciBjPUtlKHIpLG89Zi5kZWZ2YWwsbD1mLnJhd3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJyYXciKSxoPSEwLHg9MT09PW4/W106''@;'; put 'put ''e307aWYoMSE9PW4paWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwiX19yb3dOdW1fXyIse3ZhbHVlOnIsZW51bWVyYWJsZTohMX0pfWNhdGNoe3guX19yb3dOdW1fXz1yfWVsc2UgeC5fX3Jvd051bV9fPXI7aWYoIXN8fGVbcl0pZm9yKHZhciBk''@;'; put 'put ''PXQucy5jO2Q8PXQuZS5jOysrZCl7dmFyIHY9cz9lW3JdW2RdOmVbYVtkXStjXTtpZih2b2lkIDAhPT12JiZ2b2lkIDAhPT12LnQpe3ZhciB1PXYudjtzd2l0Y2godi50KXtjYXNlInoiOmlmKG51bGw9PXUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1PTA9PXU/bnVsbDp2b2lkIDA7YnJlYWs7''@;'; put 'put ''Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIit2LnQpfWlmKG51bGwhPWlbZF0pe2lmKG51bGw9PXUpaWYoImUiPT12LnQmJm51bGw9PT11KXhbaVtkXV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9''@;'; put 'put ''PW8peFtpW2RdXT1vO2Vsc2V7aWYoIWx8fG51bGwhPT11KWNvbnRpbnVlO3hbaVtkXV09bnVsbH1lbHNlIHhbaVtkXV09bCYmKCJuIiE9PXYudHx8Im4iPT09di50JiYhMSE9PWYucmF3TnVtYmVycyk/dTphdCh2LHUsZik7bnVsbCE9dSYmKGg9ITEpfX1lbHNle2lmKHZvaWQgMD09PW8pY29u''@;'; put 'put ''dGludWU7bnVsbCE9aVtkXSYmKHhbaVtkXV09byl9fXJldHVybntyb3c6eCxpc2VtcHR5Omh9fWZ1bmN0aW9uIGVpKGUsdCxyLGEpe3ZhciBuPTE7aWYoIXIpZm9yKDtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5pbmRleE9mKHI9IlNoZWV0IituKTsrK24scj12b2lkIDApO2lmKCFyfHxl''@;'; put 'put ''LlNoZWV0TmFtZXMubGVuZ3RoPj02NTUzNSl0aHJvdyBuZXcgRXJyb3IoIlRvbyBtYW55IHdvcmtzaGVldHMiKTtpZihhJiZlLlNoZWV0TmFtZXMuaW5kZXhPZihyKT49MCl7dmFyIGk9ci5tYXRjaCgvKF4uKj8pKFxkKykkLyk7bj1pJiYraVsyXXx8MDt2YXIgcz1pJiZpWzFdfHxyO2Zvcigr''@;'; put 'put ''K247bjw9NjU1MzUmJi0xIT1lLlNoZWV0TmFtZXMuaW5kZXhPZihyPXMrbik7KytuKTt9aWYoZnVuY3Rpb24gVmYoZSx0KXtpZihlLmxlbmd0aD4zMSl7aWYodClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgcj0hMDty''@;'; put 'put ''ZXR1cm4gZnAuZm9yRWFjaChmdW5jdGlvbihhKXtpZigtMSE9ZS5pbmRleE9mKGEpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtyPSExfX0pLHJ9KHIpLGUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IityKyJ8IGFscmVhZHkgZXhpc3RzISIpO3JldHVybiBlLlNoZWV0TmFtZXMucHVzaChyKSxlLlNoZWV0c1tyXT10LHJ9YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtkYXRhOmV9KT0+e2NvbnN0e2RhdGE6dCxvcHRzOnJ9PWU7dHJ5''@;'; put 'put ''e2NvbnN0IGE9STAodCxyKTtwb3N0TWVzc2FnZSh7ZXZlbnQ6InJlYWRpbmdfZW5kIix3b3JrYm9vazphfSl9Y2F0Y2goYSl7YS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikmJnBvc3RNZXNzYWdlKHtlcnJvcjphfSl9fSl9KSgpOw=='';'; put 'run;'; put '%sasjsout(JS64)'; 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+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l''@;'; put 'put ''dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl''@;'; put 'put ''bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu''@;'; put 'put ''dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy''@;'; put 'put ''b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog''@;'; put 'put ''ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv''@;'; put 'put ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5lNDU4NTQ2ODE5MzRlOTg2LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJSZWRpcmVjdGVkIiBkZWJ1Zz0iZmFsc2UiIHVzZWNv''@;'; put 'put ''bXB1dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIiBkY3BhdGg9Ii90bXAvZGMiIGhvdGxpY2VuY2VrZXk9Im5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj4KICA8L3Nh''@;'; put 'put ''c2pzPgoKICA8Ym9keSBjZHMtdGhlbWU9ImxpZ2h0IiBjbGFzcz0ibS0wIj4KICAgIDxteS1hcHA+PC9teS1hcHA+CiAgPHNjcmlwdCBzcmM9InJ1bnRpbWUuNDAyZmMzY2ZiYzdlMWJkNC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0icG9seWZpbGxzLjA2ZTdmMDVk''@;'; put 'put ''ZDdkOTExYWUuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InNjcmlwdHMuZjQxOGQ3ZTcxZGJmZDMwOS5qcyIgZGVmZXI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Im1haW4uZWQ5OGZkYmNkYzdjMDk2Mi5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48L2JvZHk+Cjwv''@;'; put 'put ''aHRtbD4K'';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.ed98fdbcdc7c0962-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbihjZSl7Y2UuZXhwb3J0cz1mdW5jdGlvbihKKXt2YXIgYj17fTtmdW5jdGlvbiBEKF8pe2lmKGJbX10pcmV0dXJuIGJb''@;'; put 'put ''X10uZXhwb3J0czt2YXIgcD1iW19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gSltfXS5jYWxsKHAuZXhwb3J0cyxwLHAuZXhwb3J0cyxEKSxwLmw9ITAscC5leHBvcnRzfXJldHVybiBELm09SixELmM9YixELmQ9ZnVuY3Rpb24oXyxwLE4pe0QubyhfLHApfHxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoXyxwLHtlbnVtZXJhYmxlOiEwLGdldDpOfSl9LEQucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxELnQ9ZnVuY3Rpb24oXyxwKXtpZigxJnAmJihfPUQoXykpLDgmcHx8NCZwJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgTj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEQucihOKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoTiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImcCYmInN0cmluZyIhPXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUQuZChOLHcsZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19LmJpbmQobnVsbCx3KSk7cmV0dXJuIE59LEQubj1mdW5jdGlv''@;'; put 'put ''bihfKXt2YXIgcD1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBffTtyZXR1cm4gRC5kKHAsImEiLHApLHB9LEQubz1mdW5jdGlvbihfLHApe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxw''@;'; put 'put ''KX0sRC5wPSIiLEQoRC5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq''@;'; put 'put ''KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciBfPUQoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w''@;'; put 'put ''bGF0ZS1vYnNlcnZlci50cyIpLHA9e30sTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n''@;'; put 'put ''bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oRil7aWYoMD09PUYubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp''@;'; put 'put ''ZigvXHMvLnRlc3QoRikpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKEYpe3JldHVybiBGLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihGLEgpe3ZhciBSPUgudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKEYpJiYoRj10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShGKSxwW0ZdJiZkZWxldGUgcFtGXSxwW0ZdPVIsXy5TaGFwZVRlbXBsYXRlT2JzZXJ2''@;'; put 'put ''ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoRixSKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKEYsSCxSKXtmb3IodmFyIGo9MCxQPVI7ajxQLmxlbmd0aDtqKyspe3ZhciBMPVBbal07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLEws''@;'; put 'put ''e2dldDpmdW5jdGlvbigpe3JldHVybiBGW0hdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEYpe2lmKCJvYmplY3QiIT10eXBlb2YgRil0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl''@;'; put 'put ''cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgSCBpbiBGKUYuaGFzT3duUHJvcGVydHkoSCkmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEgsRltIXSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmhhcz1mdW5jdGlvbihGKXtyZXR1cm4hIXBbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoRildfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oRil7aWYoIUYpcmV0dXJuIHA7aWYoInN0cmluZyIhPXR5cGVvZiBGKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50''@;'; put 'put ''IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIHBbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoRildfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihGKXtpZigib2JqZWN0IiE9dHlwZW9mIEYpdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl''@;'; put 'put ''Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEggaW4gRilpZihGLmhhc093blByb3BlcnR5KEgpKXtpZighcC5oYXNPd25Qcm9wZXJ0eShIKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrSCsiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMocCxILEZbSF0pfX0sd30oKTtiLkNsYXJpdHlJY29uc0FwaT1O''@;'; put 'put ''fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciBfPUQoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxwPUQoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLE49MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIEY9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBIKCl7dmFyIFI9Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIFIuY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrTixOKyssUn0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihGPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry''@;'; put 'put ''dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLGIuQ2xhcml0eUljb25FbGVtZW50PUgsSC5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChILnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7''@;'; put 'put ''Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpIfX0pKS5jb25zdHJ1Y3Rvcj1ILEgucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBSPXcuY2xvbmVOb2RlKCExKTtSLmlkPXRoaXMuY2xySWNvblVuaXFJZCxSLnRleHRDb250''@;'; put 'put ''ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKFIpfSxILnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oUil7IU51bWJlcihSKXx8TnVtYmVyKFIpPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z''@;'; put 'put ''dHlsZS53aWR0aD1SKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9UisicHgiKX0sSC5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEgucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFI9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgaj10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09aiYmKHRo''@;'; put 'put ''aXMuY3VycmVudFNpemVBdHRyVmFsPWosdGhpcy5fc2V0SWNvblNpemUoaikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgUD10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1wLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhQLGZ1bmN0aW9uKEIpe1IuX2luamVjdFRlbXBsYXRlKEIpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPVAsIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW''@;'; put 'put ''YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU''@;'; put 'put ''ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgWT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1ZJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPVkpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0''@;'; put 'put ''dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEgucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihSLGosUCl7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1SJiZ0aGlzLl9zZXRJY29uU2l6ZShQKSwic2hhcGUiPT09Uil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy''@;'; put 'put ''VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKFApLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1wLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz''@;'; put 'put ''Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oWSl7TC5faW5qZWN0VGVtcGxhdGUoWSl9KSksIV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo''@;'; put 'put ''KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1SJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPVAsIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj''@;'; put 'put ''dFRlbXBsYXRlKCl9LEgucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxILnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgUj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksUD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO1I/UiYmUi5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmUC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsUisiICIrdGhpcy5jbHJJ''@;'; put 'put ''Y29uVW5pcUlkKTpQLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxILnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oUil7UiYmUiE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl''@;'; put 'put ''PVIpLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sSC5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPV8uQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEos''@;'; put 'put ''YixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgXz1EKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscD1E''@;'; put 'put ''KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxOPUQoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1fLkNsYXJpdHlJ''@;'; put 'put ''Y29uc0FwaS5pbnN0YW5jZTtiLkNsYXJpdHlJY29ucz13LHcuYWRkKE4uQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u''@;'; put 'put ''Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLHAuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog''@;'; put 'put ''ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv''@;'; put 'put ''dW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db3JlU2hhcGVzPWIuQ2xyU2hhcGVBcnJvdz1iLkNsclNoYXBlU3RlcEZvcndhcmQyPWIuQ2xyU2hhcGVFeWVIaWRlPWIuQ2xyU2hhcGVF''@;'; put 'put ''eWU9Yi5DbHJTaGFwZUV2ZW50PWIuQ2xyU2hhcGVDYWxlbmRhcj1iLkNsclNoYXBlQW5nbGVEb3VibGU9Yi5DbHJTaGFwZVZpZXdDb2x1bW5zPWIuQ2xyU2hhcGVTZWFyY2g9Yi5DbHJTaGFwZVZtQnVnPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkPWIu''@;'; put 'put ''Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPWIuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Yi5DbHJTaGFwZUNsb3VkPWIuQ2xyU2hhcGVJbWFnZT1iLkNsclNoYXBlQmVsbD1iLkNsclNoYXBlRm9sZGVyT3Blbj1iLkNsclNoYXBlRm9sZGVyPWIuQ2xyU2hhcGVBbmdsZT1iLkNsclNoYXBl''@;'; put 'put ''VXNlcj1iLkNsclNoYXBlQmFycz1iLkNsclNoYXBlSGVscEluZm89Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1iLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1iLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Yi5DbHJTaGFwZUluZm9DaXJjbGU9Yi5DbHJT''@;'; put 'put ''aGFwZUNoZWNrQ2lyY2xlPWIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1iLkNsclNoYXBlVGltZXM9Yi5DbHJTaGFwZUNoZWNrPWIuQ2xyU2hhcGVDb2c9Yi5DbHJTaGFwZUhvbWU9Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw''@;'; put 'put ''O3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn''@;'; put 'put ''LXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy''@;'; put 'put ''LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n''@;'; put 'put ''KSxiLkNsclNoYXBlSG9tZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks''@;'; put 'put ''MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa''@;'; put 'put ''Ii8+JyksYi5DbHJTaGFwZUNvZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz''@;'; put 'put ''Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQt''@;'; put 'put ''Mi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiww''@;'; put 'put ''LjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEu''@;'; put 'put ''NWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40''@;'; put 'put ''YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIx''@;'; put 'put ''Yy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wt''@;'; put 'put ''My4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43''@;'; put 'put ''LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIu''@;'; put 'put ''OC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdM''@;'; put 'put ''MzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4z''@;'; put 'put ''Yy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0''@;'; put 'put ''LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAu''@;'; put 'put ''OGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4''@;'; put 'put ''LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj''@;'; put 'put ''MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42''@;'; put 'put ''LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwx''@;'; put 'put ''LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40''@;'; put 'put ''LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs''@;'; put 'put ''MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIs''@;'; put 'put ''NC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4z''@;'; put 'put ''LDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAu''@;'; put 'put ''MiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdj''@;'; put 'put ''My45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYt''@;'; put 'put ''MS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3''@;'; put 'put ''YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYy''@;'; put 'put ''LDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgt''@;'; put 'put ''LjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThW''@;'; put 'put ''MTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMu''@;'; put 'put ''M2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQz''@;'; put 'put ''LjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEu''@;'; put 'put ''NjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42''@;'; put 'put ''MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1''@;'; put 'put ''QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs''@;'; put 'put ''MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs''@;'; put 'put ''MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z''@;'; put 'put ''OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx''@;'; put 'put ''LjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlQ2hlY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxiLkNsclNoYXBlVGltZXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+''@;'; put 'put ''JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx''@;'; put 'put ''LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt''@;'; put 'put ''Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz''@;'; put 'put ''LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu''@;'; put 'put ''NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4''@;'; put 'put ''LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs''@;'; put 'put ''MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43''@;'; put 'put ''MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxiLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa''@;'; put 'put ''bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu''@;'; put 'put ''NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt''@;'; put 'put ''Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLGIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx''@;'; put 'put ''MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs''@;'; put 'put ''MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxiLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw''@;'; put 'put ''LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs''@;'; put 'put ''MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxiLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4''@;'; put 'put ''LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksYi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx''@;'; put 'put ''LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2''@;'; put 'put ''LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz''@;'; put 'put ''NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz''@;'; put 'put ''MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w''@;'; put 'put ''NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3''@;'; put 'put ''OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy''@;'; put 'put ''MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz''@;'; put 'put ''LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44''@;'; put 'put ''LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLGIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu''@;'; put 'put ''MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu''@;'; put 'put ''NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w''@;'; put 'put ''LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z''@;'; put 'put ''LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt''@;'; put 'put ''MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3''@;'; put 'put ''LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4''@;'; put 'put ''LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJT''@;'; put 'put ''aGFwZUJhcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFI''@;'; put 'put ''N1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2''@;'; put 'put ''LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4z''@;'; put 'put ''OSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEs''@;'; put 'put ''MCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1''@;'; put 'put ''LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxiLkNsclNoYXBlRm9sZGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0y''@;'; put 'put ''SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAs''@;'; put 'put ''MTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40Mkwx''@;'; put 'put ''NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy''@;'; put 'put ''LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAs''@;'; put 'put ''MTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx''@;'; put 'put ''LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5''@;'; put 'put ''LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAs''@;'; put 'put ''MCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs''@;'; put 'put ''MiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTks''@;'; put 'put ''MCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlB''@;'; put 'put ''MS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42''@;'; put 'put ''MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCww''@;'; put 'put ''LDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4y''@;'; put 'put ''Ni0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVI''@;'; put 'put ''NkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEu''@;'; put 'put ''NTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwz''@;'; put 'put ''MUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUJlbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu''@;'; put 'put ''ODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCww''@;'; put 'put ''LDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3''@;'; put 'put ''LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIw''@;'; put 'put ''LjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUu''@;'; put 'put ''MzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYz''@;'; put 'put ''LDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYu''@;'; put 'put ''MTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMu''@;'; put 'put ''MzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcu''@;'; put 'put ''OGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCww''@;'; put 'put ''LDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUs''@;'; put 'put ''MjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFW''@;'; put 'put ''My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSW1hZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45''@;'; put 'put ''MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwx''@;'; put 'put ''LTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNB''@;'; put 'put ''MywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUNsb3VkPSgwLHAuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42''@;'; put 'put ''NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywy''@;'; put 'put ''NC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMx''@;'; put 'put ''SDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkEx''@;'; put 'put ''MC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5''@;'; put 'put ''LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku''@;'; put 'put ''OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42''@;'; put 'put ''NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFh''@;'; put 'put ''Ny40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5''@;'; put 'put ''LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwx''@;'; put 'put ''LDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNIb3Jp''@;'; put 'put ''em9udGFsPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i''@;'; put 'put ''Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5D''@;'; put 'put ''bHJTaGFwZUZpbHRlckdyaWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku''@;'; put 'put ''N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1''@;'; put 'put ''YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu''@;'; put 'put ''MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZVZtQnVnPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv''@;'; put 'put ''bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs''@;'; put 'put ''MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs''@;'; put 'put ''MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh''@;'; put 'put ''MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs''@;'; put 'put ''MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i''@;'; put 'put ''I2ZmZmZmZiIvPicpLGIuQ2xyU2hhcGVTZWFyY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu''@;'; put 'put ''MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1''@;'; put 'put ''LDMzLjI5WiIvPicpLGIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs''@;'; put 'put ''MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksYi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww''@;'; put 'put ''LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLGIuQ2xyU2hhcGVDYWxlbmRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSww''@;'; put 'put ''LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCww''@;'; put 'put ''LDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl''@;'; put 'put ''ZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW''@;'; put 'put ''MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1h''@;'; put 'put ''bGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiww''@;'; put 'put ''LDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy''@;'; put 'put ''Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCww''@;'; put 'put ''LDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs''@;'; put 'put ''MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4''@;'; put 'put ''LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01''@;'; put 'put ''SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4''@;'; put 'put ''VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRXZlbnQ9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz''@;'; put 'put ''MC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1''@;'; put 'put ''LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4''@;'; put 'put ''SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAs''@;'; put 'put ''MCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40''@;'; put 'put ''MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAy''@;'; put 'put ''MC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2Ex''@;'; put 'put ''LDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo''@;'; put 'put ''LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwx''@;'; put 'put ''Mi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwx''@;'; put 'put ''LDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5''@;'; put 'put ''LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMu''@;'; put 'put ''NzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQu''@;'; put 'put ''MDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVFeWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz''@;'; put 'put ''LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs''@;'; put 'put ''MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz''@;'; put 'put ''TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu''@;'; put 'put ''MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlRXllSGlkZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0''@;'; put 'put ''Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2''@;'; put 'put ''LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z''@;'; put 'put ''Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx''@;'; put 'put ''LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu''@;'; put 'put ''MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz''@;'; put 'put ''Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku''@;'; put 'put ''OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs''@;'; put 'put ''MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx''@;'; put 'put ''Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu''@;'; put 'put ''MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh''@;'; put 'put ''MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFycm93PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu''@;'; put 'put ''NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksYi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOmIu''@;'; put 'put ''Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Yi5DbHJTaGFwZUhvbWUsY29nOmIuQ2xyU2hhcGVDb2csY2hlY2s6Yi5DbHJTaGFwZUNoZWNrLHRpbWVzOmIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpiLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpiLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Yi5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu''@;'; put 'put ''ZGFyZCI6Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOmIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpiLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOmIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOmIuQ2xyU2hhcGVC''@;'; put 'put ''YXJzLHVzZXI6Yi5DbHJTaGFwZVVzZXIsYW5nbGU6Yi5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpiLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Yi5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpiLkNsclNoYXBlQmVsbCxpbWFnZTpiLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Yi5DbHJTaGFwZUNs''@;'; put 'put ''b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpiLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpiLkNsclNo''@;'; put 'put ''YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpiLkNsclNoYXBlVm1CdWcsc2VhcmNoOmIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Yi5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOmIuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpiLkNsclNoYXBlQ2Fs''@;'; put 'put ''ZW5kYXIsZXZlbnQ6Yi5DbHJTaGFwZUV2ZW50LGV5ZTpiLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Yi5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpiLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OmIuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29y''@;'; put 'put ''ZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFw''@;'; put 'put ''ZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5D''@;'; put 'put ''b3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1si''@;'; put 'put ''YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsYi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v''@;'; put 'put ''cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWIuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsYi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9''@;'; put 'put ''O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcCgpe3RoaXMuY2FsbGJhY2tzPWIuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuc2luZ2xlSW5zdGFuY2V8fChwLnNpbmdsZUlu''@;'; put 'put ''c3RhbmNlPW5ldyBwKSxwLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHAucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKE4sdyl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbTl0/LTE9PT10aGlzLmNhbGxiYWNrc1tOXS5pbmRl''@;'; put 'put ''eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tOXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW05dPVt3XSxmdW5jdGlvbigpe3ZhciBIPUYuY2FsbGJhY2tzW05dLmluZGV4T2Yodyk7Ri5jYWxsYmFja3NbTl0uc3BsaWNlKEgsMSksMD09PUYuY2FsbGJhY2tzW05dLmxlbmd0aCYmZGVsZXRlIEYuY2Fs''@;'; put 'put ''bGJhY2tzW05dfX0scC5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oTix3KXt0aGlzLmNhbGxiYWNrc1tOXSYmdGhpcy5jYWxsYmFja3NbTl0ubWFwKGZ1bmN0aW9uKEYpe0Yodyl9KX0scH0oKTtiLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1ffSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq''@;'; put 'put ''IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksYi5jbHJJY29uU1ZHPXZvaWQgMDtiLmNsckljb25TVkc9ZnVuY3Rpb24gdyhGKXt2YXIgSD0iIjtyZXR1cm4gRi5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoSCs9ImNhbi1iYWRnZSAiKSxGLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoSCs9ImNhbi1h''@;'; put 'put ''bGVydCAiKSxGLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihIKz0iaGFzLXNvbGlkICIpLChIPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrSCsnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p''@;'; put 'put ''ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrRisiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKGNlKXtjZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKEope3ZhciBiPXt9O2Z1bmN0aW9uIEQoXyl7aWYoYltfXSlyZXR1cm4gYltfXS5leHBvcnRzO3ZhciBwPWJbX109e2k6XyxsOiExLGV4cG9ydHM6e319O3JldHVybiBKW19dLmNhbGwocC5leHBvcnRzLHAscC5leHBvcnRzLEQpLHAubD0hMCxwLmV4cG9ydHN9cmV0dXJu''@;'; put 'put ''IEQubT1KLEQuYz1iLEQuZD1mdW5jdGlvbihfLHAsTil7RC5vKF8scCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLHAse2VudW1lcmFibGU6ITAsZ2V0Ok59KX0sRC5yPWZ1bmN0aW9uKF8pe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShfLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEQudD1mdW5jdGlvbihfLHApe2lmKDEmcCYmKF89RChfKSksOCZwfHw0JnAmJiJvYmplY3QiPT10eXBlb2YgXyYmXyYmXy5f''@;'; put 'put ''X2VzTW9kdWxlKXJldHVybiBfO3ZhciBOPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoRC5yKE4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpffSksMiZwJiYic3RyaW5nIiE9dHlwZW9mIF8pZm9yKHZhciB3IGluIF8pRC5kKE4sdyxmdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gX1tGXX0uYmluZChudWxsLHcpKTtyZXR1cm4gTn0sRC5uPWZ1bmN0aW9uKF8pe3ZhciBwPV8mJl8uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBfLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIF99O3JldHVybiBELmQocCwiYSIscCkscH0sRC5vPWZ1bmN0''@;'; put 'put ''aW9uKF8scCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLHApfSxELnA9IiIsRChELnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov''@;'; put 'put ''KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5BbGxTaGFwZXM9dm9pZCAwO3ZhciBfPUQo''@;'; put 'put ''Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLHA9RCgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksTj1EKAovKiEgLi9jb3Jl''@;'; put 'put ''LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1EKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLEY9RCgKLyohIC4vbWVkaWEtc2hhcGVzICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksSD1EKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLFI9RCgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLGo9RCgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxQPUQoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bTi5Db3JlU2hhcGVzLHAuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsRi5NZWRpYVNoYXBlcyxILlNvY2lhbFNoYXBlcyxSLlRlY2hub2xvZ3lTaGFwZXMsUC5UcmF2ZWxTaGFwZXMsXy5DaGFydFNoYXBlcyxq''@;'; put 'put ''LlRleHRFZGl0U2hhcGVzXSxZPXt9O2IuQWxsU2hhcGVzPVk7Zm9yKHZhciBCPTAsVz1MO0I8Vy5sZW5ndGg7QisrKXt2YXIgWj1XW0JdO2Zvcih2YXIgcSBpbiBaKVouaGFzT3duUHJvcGVydHkocSkmJihZW3FdPVpbcV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChZKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DaGFydFNoYXBlcz1iLkNsclNoYXBlQmVsbEN1cnZlPWIuQ2xyU2hhcGVUaWNrQ2hhcnQ9Yi5DbHJTaGFwZVNjYXR0ZXJQbG90PWIuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydD1iLkNsclNoYXBlTGluZUNoYXJ0PWIuQ2xyU2hhcGVIZWF0TWFwPWIuQ2xyU2hhcGVHcmlkQ2hhcnQ9Yi5DbHJTaGFwZUN1cnZlQ2hhcnQ9Yi5DbHJTaGFwZUNsb3VkQ2hhcnQ9Yi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PWIuQ2xyU2hhcGVCb3hQbG90PWIuQ2xyU2hhcGVCYXJDaGFydD1i''@;'; put 'put ''LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgXz1EKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1EKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUF4aXNDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1''@;'; put 'put ''Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEg''@;'; put 'put ''QyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcg''@;'; put 'put ''MjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMg''@;'; put 'put ''Mi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg''@;'; put 'put ''TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAy''@;'; put 'put ''Ny43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42''@;'; put 'put ''NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwg''@;'; put 'put ''MzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3''@;'; put 'put ''IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4''@;'; put 'put ''IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5''@;'; put 'put ''OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwg''@;'; put 'put ''MjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAu''@;'; put 'put ''NjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg''@;'; put 'put ''MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu''@;'; put 'put ''MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksYi5DbHJTaGFwZUJhckNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3''@;'; put 'put ''VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBD''@;'; put 'put ''IDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwg''@;'; put 'put ''MTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIx''@;'; put 'put ''IDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAy''@;'; put 'put ''Ny40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4w''@;'; put 'put ''MzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg''@;'; put 'put ''MTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEg''@;'; put 'put ''MTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwg''@;'; put 'put ''MjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMu''@;'; put 'put ''MDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+''@;'; put 'put ''PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5''@;'; put 'put ''NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEw''@;'; put 'put ''IFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2''@;'; put 'put ''Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44''@;'; put 'put ''NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVCb3hQbG90PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBM''@;'; put 'put ''IDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQg''@;'; put 'put ''TCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBM''@;'; put 'put ''IDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRo''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg''@;'; put 'put ''MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcu''@;'; put 'put ''MiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAx''@;'; put 'put ''MS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40Mjkg''@;'; put 'put ''MzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEy''@;'; put 'put ''LjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwg''@;'; put 'put ''MTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAu''@;'; put 'put ''NiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEz''@;'; put 'put ''LjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1''@;'; put 'put ''OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBa''@;'; put 'put ''IE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx''@;'; put 'put ''My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg''@;'; put 'put ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD''@;'; put 'put ''IDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg''@;'; put 'put ''MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy''@;'; put 'put ''NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBD''@;'; put 'put ''IDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42''@;'; put 'put ''NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMg''@;'; put 'put ''QyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYg''@;'; put 'put ''MjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0''@;'; put 'put ''IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAx''@;'; put 'put ''OCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAy''@;'; put 'put ''MSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcg''@;'; put 'put ''NyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0''@;'; put 'put ''IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAx''@;'; put 'put ''NSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMg''@;'; put 'put ''MTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg''@;'; put 'put ''NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz''@;'; put 'put ''LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAy''@;'; put 'put ''NiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0''@;'; put 'put ''LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg''@;'; put 'put ''MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu''@;'; put 'put ''NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1''@;'; put 'put ''IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAy''@;'; put 'put ''NiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcg''@;'; put 'put ''MjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43''@;'; put 'put ''NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4''@;'; put 'put ''IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEy''@;'; put 'put ''LjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMg''@;'; put 'put ''MjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIz''@;'; put 'put ''Ljc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAw''@;'; put 'put ''MSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBD''@;'; put 'put ''IDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBM''@;'; put 'put ''IDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAg''@;'; put 'put ''QyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAy''@;'; put 'put ''NiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQg''@;'; put 'put ''MS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDEx''@;'; put 'put ''LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAx''@;'; put 'put ''MS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3''@;'; put 'put ''MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcg''@;'; put 'put ''MTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIg''@;'; put 'put ''QyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYu''@;'; put 'put ''NCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkg''@;'; put 'put ''QyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3''@;'; put 'put ''IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIy''@;'; put 'put ''IDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMg''@;'; put 'put ''MiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIu''@;'; put 'put ''MzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYz''@;'; put 'put ''NyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42''@;'; put 'put ''MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4z''@;'; put 'put ''NDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2''@;'; put 'put ''LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBa''@;'; put 'put ''IE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44Nzkg''@;'; put 'put ''OS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAu''@;'; put 'put ''MTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAy''@;'; put 'put ''MC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIz''@;'; put 'put ''LjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjky''@;'; put 'put ''OCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwg''@;'; put 'put ''MjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4y''@;'; put 'put ''NDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMg''@;'; put 'put ''MjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0''@;'; put 'put ''IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx''@;'; put 'put ''MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44''@;'; put 'put ''OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg''@;'; put 'put ''MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5''@;'; put 'put ''LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw''@;'; put 'put ''MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEy''@;'; put 'put ''IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy''@;'; put 'put ''OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDgg''@;'; put 'put ''NiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu''@;'; put 'put ''NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z''@;'; put 'put ''NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAx''@;'; put 'put ''MS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQu''@;'; put 'put ''MiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0''@;'; put 'put ''IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy''@;'; put 'put ''LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz''@;'; put 'put ''MS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5''@;'; put 'put ''IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2''@;'; put 'put ''MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1''@;'; put 'put ''IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBD''@;'; put 'put ''IDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3''@;'; put 'put ''Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4''@;'; put 'put ''LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz''@;'; put 'put ''NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAx''@;'; put 'put ''Mi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTgu''@;'; put 'put ''Mjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIw''@;'; put 'put ''LjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz''@;'; put 'put ''LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0''@;'; put 'put ''NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww''@;'; put 'put ''LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEs''@;'; put 'put ''Mi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwy''@;'; put 'put ''LDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwz''@;'; put 'put ''MiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2''@;'; put 'put ''Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAx''@;'; put 'put ''OS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIg''@;'; put 'put ''MjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBD''@;'; put 'put ''IDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4x''@;'; put 'put ''ODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAu''@;'; put 'put ''Mjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2''@;'; put 'put ''IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx''@;'; put 'put ''OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg''@;'; put 'put ''OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBM''@;'; put 'put ''IDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBa''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIu''@;'; put 'put ''MTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcg''@;'; put 'put ''MC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3''@;'; put 'put ''QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1''@;'; put 'put ''IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0''@;'; put 'put ''IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIs''@;'; put 'put ''MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBD''@;'; put 'put ''IDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44''@;'; put 'put ''OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4x''@;'; put 'put ''MDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD''@;'; put 'put ''IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5''@;'; put 'put ''IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSGVhdE1hcD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM''@;'; put 'put ''IDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAx''@;'; put 'put ''OC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUy''@;'; put 'put ''NCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQg''@;'; put 'put ''MTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYg''@;'; put 'put ''MTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBM''@;'; put 'put ''IDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIw''@;'; put 'put ''Ljc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkg''@;'; put 'put ''MTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAy''@;'; put 'put ''NiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkg''@;'; put 'put ''TCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIg''@;'; put 'put ''Ni44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAg''@;'; put 'put ''MTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAx''@;'; put 'put ''Mi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAy''@;'; put 'put ''OSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAy''@;'; put 'put ''NCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTku''@;'; put 'put ''MDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg''@;'; put 'put ''MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUxp''@;'; put 'put ''bmVDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1''@;'; put 'put ''IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDku''@;'; put 'put ''MzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYg''@;'; put 'put ''MjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg''@;'; put 'put ''NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42''@;'; put 'put ''MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2''@;'; put 'put ''IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAx''@;'; put 'put ''Mi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg''@;'; put 'put ''NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEu''@;'; put 'put ''NTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1''@;'; put 'put ''IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4z''@;'; put 'put ''NDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUg''@;'; put 'put ''MiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwg''@;'; put 'put ''MjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIu''@;'; put 'put ''MjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEu''@;'; put 'put ''MTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlUGllQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu''@;'; put 'put ''ODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAx''@;'; put 'put ''OSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1''@;'; put 'put ''IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwg''@;'; put 'put ''MTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBD''@;'; put 'put ''IDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBD''@;'; put 'put ''IDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAx''@;'; put 'put ''OCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAy''@;'; put 'put ''NS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3''@;'; put 'put ''IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg''@;'; put 'put ''MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEg''@;'; put 'put ''MTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMg''@;'; put 'put ''MjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4z''@;'; put 'put ''NDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x''@;'; put 'put ''MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx''@;'; put 'put ''MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4x''@;'; put 'put ''MDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQz''@;'; put 'put ''NyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw''@;'; put 'put ''NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu''@;'; put 'put ''MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg''@;'; put 'put ''NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUu''@;'; put 'put ''MjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEw''@;'; put 'put ''LjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTku''@;'; put 'put ''NzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAy''@;'; put 'put ''MC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAy''@;'; put 'put ''NC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAu''@;'; put 'put ''MzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAx''@;'; put 'put ''Ni41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4z''@;'; put 'put ''NTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcg''@;'; put 'put ''TCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAx''@;'; put 'put ''Ni4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBD''@;'; put 'put ''IDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEu''@;'; put 'put ''ODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40''@;'; put 'put ''NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2''@;'; put 'put ''IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIx''@;'; put 'put ''Ljg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIg''@;'; put 'put ''MTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYg''@;'; put 'put ''MTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYu''@;'; put 'put ''NjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i''@;'; put 'put ''TSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUg''@;'; put 'put ''MzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgx''@;'; put 'put ''IDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2''@;'; put 'put ''MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44''@;'; put 'put ''MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4''@;'; put 'put ''LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg''@;'; put 'put ''MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0''@;'; put 'put ''LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMg''@;'; put 'put ''MjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIu''@;'; put 'put ''NTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy''@;'; put 'put ''IDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEz''@;'; put 'put ''LjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAx''@;'; put 'put ''MS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkg''@;'; put 'put ''MTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYg''@;'; put 'put ''MjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIw''@;'; put 'put ''Ljk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3''@;'; put 'put ''NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTku''@;'; put 'put ''NDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43''@;'; put 'put ''NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy''@;'; put 'put ''Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41''@;'; put 'put ''NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAz''@;'; put 'put ''MC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcg''@;'; put 'put ''WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg''@;'; put 'put ''MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz''@;'; put 'put ''IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44''@;'; put 'put ''NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg''@;'; put 'put ''TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0''@;'; put 'put ''Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0''@;'; put 'put ''IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg''@;'; put 'put ''MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu''@;'; put 'put ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0''@;'; put 'put ''IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxu''@;'; put 'put ''ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLGIuQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5''@;'; put 'put ''NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy''@;'; put 'put ''IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYu''@;'; put 'put ''OTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAx''@;'; put 'put ''MyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3''@;'; put 'put ''IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAz''@;'; put 'put ''NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1''@;'; put 'put ''IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg''@;'; put 'put ''MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1''@;'; put 'put ''IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4''@;'; put 'put ''LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAy''@;'; put 'put ''NSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1''@;'; put 'put ''NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4''@;'; put 'put ''IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEg''@;'; put 'put ''QyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAy''@;'; put 'put ''OC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg''@;'; put 'put ''MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z''@;'; put 'put ''NTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIy''@;'; put 'put ''IEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN''@;'; put 'put ''IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz''@;'; put 'put ''NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGIuQ2xyU2hhcGVCZWxsQ3VydmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz''@;'; put 'put ''LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpiLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOmIuQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpiLkNsclNoYXBlQnViYmxlQ2hh''@;'; put 'put ''cnQsImNsb3VkLWNoYXJ0IjpiLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOmIuQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpiLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpiLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOmIuQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydCwidGljay1jaGFydCI6Yi5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90IjpiLkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpiLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOmIuQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpiLkNsclNoYXBlQmVsbEN1cnZl''@;'; put 'put ''fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k''@;'; put 'put ''b3cuQ2xhcml0eUljb25zLmFkZChiLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db21tZXJjZVNoYXBlcz1iLkNsclNoYXBlRmFjdG9yeT1iLkNsclNoYXBlRW1wbG95ZWU9Yi5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Yi5DbHJTaGFwZVJ1''@;'; put 'put ''YmxlPWIuQ2xyU2hhcGVQZXNvPWIuQ2xyU2hhcGVDb2luQmFnPWIuQ2xyU2hhcGVCaXRjb2luPWIuQ2xyU2hhcGVZZW49Yi5DbHJTaGFwZVdvbj1iLkNsclNoYXBlUnVwZWU9Yi5DbHJTaGFwZVBvdW5kPWIuQ2xyU2hhcGVFQ2hlY2s9Yi5DbHJTaGFwZURvbGxhckJpbGw9Yi5DbHJTaGFwZUJh''@;'; put 'put ''bms9Yi5DbHJTaGFwZUNyZWRpdENhcmQ9Yi5DbHJTaGFwZURvbGxhcj1iLkNsclNoYXBlRXVybz1iLkNsclNoYXBlU3RvcmU9Yi5DbHJTaGFwZVdhbGxldD1iLkNsclNoYXBlU2hvcHBpbmdDYXJ0PWIuQ2xyU2hhcGVQaWdneUJhbms9Yi5DbHJTaGFwZVNob3BwaW5nQmFnPWIuQ2xyU2hhcGVD''@;'; put 'put ''YWxjdWxhdG9yPXZvaWQgMDt2YXIgXz1EKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1EKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUNhbGN1bGF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw''@;'; put 'put ''IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4''@;'; put 'put ''IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx''@;'; put 'put ''MFY1SDI2WiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1''@;'; put 'put ''LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2''@;'; put 'put ''My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksYi5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw''@;'; put 'put ''LjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Y3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4z''@;'; put 'put ''NSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQu''@;'; put 'put ''ODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43''@;'; put 'put ''NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3''@;'; put 'put ''LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42''@;'; put 'put ''MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEu''@;'; put 'put ''MDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcs''@;'; put 'put ''MCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0u''@;'; put 'put ''NjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwx''@;'; put 'put ''LDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwx''@;'; put 'put ''N2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAs''@;'; put 'put ''MCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNyww''@;'; put 'put ''LDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEz''@;'; put 'put ''Ljc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMu''@;'; put 'put ''MDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3Ljcy''@;'; put 'put ''WiIvPicpLGIuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9''@;'; put 'put ''IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42''@;'; put 'put ''Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0y''@;'; put 'put ''SDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1''@;'; put 'put ''LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCww''@;'; put 'put ''LDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1''@;'; put 'put ''LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjci''@;'; put 'put ''IGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwu''@;'; put 'put ''NjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAt''@;'; put 'put ''LjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhs''@;'; put 'put ''MS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwx''@;'; put 'put ''LDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEt''@;'; put 'put ''Ljc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAs''@;'; put 'put ''MTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0u''@;'; put 'put ''NjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgy''@;'; put 'put ''OS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlV2FsbGV0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs''@;'; put 'put ''MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs''@;'; put 'put ''MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs''@;'; put 'put ''MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45''@;'; put 'put ''NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi''@;'; put 'put ''Lz4nKSxiLkNsclNoYXBlU3RvcmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww''@;'; put 'put ''LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0''@;'; put 'put ''LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx''@;'; put 'put ''LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs''@;'; put 'put ''MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey''@;'; put 'put ''LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksYi5DbHJTaGFwZUV1cm89KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww''@;'; put 'put ''LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww''@;'; put 'put ''LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4''@;'; put 'put ''LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx''@;'; put 'put ''MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxiLkNsclNoYXBlRG9sbGFyPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx''@;'; put 'put ''MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2''@;'; put 'put ''LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4''@;'; put 'put ''djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5''@;'; put 'put ''QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y''@;'; put 'put ''NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs''@;'; put 'put ''MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x''@;'; put 'put ''NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1''@;'; put 'put ''QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JyksYi5DbHJTaGFwZUNyZWRpdENhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w''@;'; put 'put ''LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu''@;'; put 'put ''c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; put 'put ''LjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwx''@;'; put 'put ''LDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdp''@;'; put 'put ''ZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgz''@;'; put 'put ''M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45''@;'; put 'put ''LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3''@;'; put 'put ''LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAs''@;'; put 'put ''MSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2''@;'; put 'put ''LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEu''@;'; put 'put ''OC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4''@;'; put 'put ''VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwx''@;'; put 'put ''LDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYx''@;'; put 'put ''My40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVB''@;'; put 'put ''MS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAs''@;'; put 'put ''MCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksYi5DbHJTaGFwZURvbGxhckJpbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs''@;'; put 'put ''MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu''@;'; put 'put ''MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw''@;'; put 'put ''Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy''@;'; put 'put ''LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww''@;'; put 'put ''LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSxiLkNsclNoYXBlRUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs''@;'; put 'put ''OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs''@;'; put 'put ''MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu''@;'; put 'put ''ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs''@;'; put 'put ''MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww''@;'; put 'put ''LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlUG91bmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs''@;'; put 'put ''MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy''@;'; put 'put ''LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y''@;'; put 'put ''MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLGIuQ2xyU2hhcGVSdXBlZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4''@;'; put 'put ''LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu''@;'; put 'put ''OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41''@;'; put 'put ''SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLGIuQ2xyU2hhcGVXb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs''@;'; put 'put ''MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs''@;'; put 'put ''MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9''@;'; put 'put ''IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43''@;'; put 'put ''OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw''@;'; put 'put ''SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs''@;'; put 'put ''MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlWWVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu''@;'; put 'put ''Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz''@;'; put 'put ''NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y''@;'; put 'put ''Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSxiLkNsclNoYXBlQml0Y29pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx''@;'; put 'put ''LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww''@;'; put 'put ''LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy''@;'; put 'put ''NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVDb2luQmFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCww''@;'; put 'put ''LDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4''@;'; put 'put ''LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCww''@;'; put 'put ''LDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEz''@;'; put 'put ''LjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDks''@;'; put 'put ''MCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3''@;'; put 'put ''LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAs''@;'; put 'put ''MCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAs''@;'; put 'put ''MCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIs''@;'; put 'put ''MzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVBlc289KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu''@;'; put 'put ''ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42''@;'; put 'put ''aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44''@;'; put 'put ''SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4''@;'; put 'put ''LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu''@;'; put 'put ''MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1''@;'; put 'put ''YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVSdWJsZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa''@;'; put 'put ''TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB''@;'; put 'put ''NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y''@;'; put 'put ''NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw''@;'; put 'put ''LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa''@;'; put 'put ''bTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCww''@;'; put 'put ''LDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJB''@;'; put 'put ''MS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiww''@;'; put 'put ''VjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAg''@;'; put 'put ''PHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2''@;'; put 'put ''My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEy''@;'; put 'put ''LTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2''@;'; put 'put ''LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCww''@;'; put 'put ''LDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxl''@;'; put 'put ''bGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1''@;'; put 'put ''LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNyww''@;'; put 'put ''LDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4''@;'; put 'put ''LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUu''@;'; put 'put ''NzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0i''@;'; put 'put ''NS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2''@;'; put 'put ''LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JyksYi5DbHJTaGFwZUVtcGxveWVlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx''@;'; put 'put ''Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww''@;'; put 'put ''LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx''@;'; put 'put ''LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZUZhY3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo''@;'; put 'put ''OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i''@;'; put 'put ''MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c''@;'; put 'put ''biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu''@;'; put 'put ''NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI''@;'; put 'put ''MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOmIuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjpiLkNsclNoYXBl''@;'; put 'put ''UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOmIuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Yi5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6Yi5DbHJTaGFwZVdhbGxldCxzdG9yZTpiLkNsclNoYXBlU3RvcmUsZXVybzpiLkNsclNoYXBlRXVybyxkb2xsYXI6Yi5DbHJT''@;'; put 'put ''aGFwZURvbGxhcixwZXNvOmIuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Yi5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpiLkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOmIuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpiLkNsclNoYXBlRUNoZWNrLHBvdW5kOmIuQ2xyU2hhcGVQ''@;'; put 'put ''b3VuZCxydXBlZTpiLkNsclNoYXBlUnVwZWUsd29uOmIuQ2xyU2hhcGVXb24seWVuOmIuQ2xyU2hhcGVZZW4sYml0Y29pbjpiLkNsclNoYXBlQml0Y29pbixydWJsZTpiLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpiLkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOmIuQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOmIuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OmIuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvbW1lcmNlU2hhcGVzWyJwaWdn''@;'; put 'put ''eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Db3JlU2hhcGVzPWIuQ2xyU2hhcGVBcnJvdz1i''@;'; put 'put ''LkNsclNoYXBlU3RlcEZvcndhcmQyPWIuQ2xyU2hhcGVFeWVIaWRlPWIuQ2xyU2hhcGVFeWU9Yi5DbHJTaGFwZUV2ZW50PWIuQ2xyU2hhcGVDYWxlbmRhcj1iLkNsclNoYXBlQW5nbGVEb3VibGU9Yi5DbHJTaGFwZVZpZXdDb2x1bW5zPWIuQ2xyU2hhcGVTZWFyY2g9Yi5DbHJTaGFwZVZtQnVn''@;'; put 'put ''PWIuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPWIuQ2xyU2hhcGVGaWx0ZXJHcmlkPWIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPWIuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Yi5DbHJTaGFwZUNsb3VkPWIuQ2xyU2hhcGVJbWFnZT1iLkNsclNoYXBlQmVsbD1iLkNsclNoYXBlRm9s''@;'; put 'put ''ZGVyT3Blbj1iLkNsclNoYXBlRm9sZGVyPWIuQ2xyU2hhcGVBbmdsZT1iLkNsclNoYXBlVXNlcj1iLkNsclNoYXBlQmFycz1iLkNsclNoYXBlSGVscEluZm89Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1iLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1iLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk''@;'; put 'put ''PWIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Yi5DbHJTaGFwZUluZm9DaXJjbGU9Yi5DbHJTaGFwZUNoZWNrQ2lyY2xlPWIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1iLkNsclNoYXBlVGltZXM9Yi5DbHJTaGFwZUNoZWNrPWIuQ2xyU2hh''@;'; put 'put ''cGVDb2c9Yi5DbHJTaGFwZUhvbWU9Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9z''@;'; put 'put ''dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj''@;'; put 'put ''eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z''@;'; put 'put ''NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww''@;'; put 'put ''LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxiLkNsclNoYXBlSG9tZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww''@;'; put 'put ''LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz''@;'; put 'put ''VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs''@;'; put 'put ''NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44''@;'; put 'put ''M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksYi5DbHJTaGFwZUNvZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs''@;'; put 'put ''N3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40''@;'; put 'put ''Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIs''@;'; put 'put ''MTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEu''@;'; put 'put ''MWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQs''@;'; put 'put ''MTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwt''@;'; put 'put ''MS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJs''@;'; put 'put ''MC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAu''@;'; put 'put ''NywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdz''@;'; put 'put ''LTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYs''@;'; put 'put ''MS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwx''@;'; put 'put ''LjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0w''@;'; put 'put ''LjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAu''@;'; put 'put ''My0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4x''@;'; put 'put ''bDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZs''@;'; put 'put ''Mi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjls''@;'; put 'put ''LTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMw''@;'; put 'put ''LjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41''@;'; put 'put ''LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40''@;'; put 'put ''YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z''@;'; put 'put ''LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMz''@;'; put 'put ''LjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0w''@;'; put 'put ''LjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0w''@;'; put 'put ''LjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3''@;'; put 'put ''LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42''@;'; put 'put ''OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYx''@;'; put 'put ''LDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45''@;'; put 'put ''NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42''@;'; put 'put ''MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEu''@;'; put 'put ''NjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4z''@;'; put 'put ''N2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwx''@;'; put 'put ''MS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43''@;'; put 'put ''MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMx''@;'; put 'put ''YS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40''@;'; put 'put ''My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdh''@;'; put 'put ''LjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42Myww''@;'; put 'put ''LDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlQ2hlY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxiLkNsclNoYXBlVGltZXM9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx''@;'; put 'put ''LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9''@;'; put 'put ''IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42''@;'; put 'put ''NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu''@;'; put 'put ''NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1''@;'; put 'put ''IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu''@;'; put 'put ''NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxiLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs''@;'; put 'put ''MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLGIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs''@;'; put 'put ''MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs''@;'; put 'put ''MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxiLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs''@;'; put 'put ''MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx''@;'; put 'put ''LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxiLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh''@;'; put 'put ''MS40LDEuNCwwLDEsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+''@;'; put 'put ''JyksYi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz''@;'; put 'put ''NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy''@;'; put 'put ''Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3''@;'; put 'put ''NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg''@;'; put 'put ''MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0''@;'; put 'put ''MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww''@;'; put 'put ''djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLGIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu''@;'; put 'put ''NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu''@;'; put 'put ''NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku''@;'; put 'put ''MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu''@;'; put 'put ''NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw''@;'; put 'put ''Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2''@;'; put 'put ''LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy''@;'; put 'put ''LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJhcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx''@;'; put 'put ''LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxiLkNsclNoYXBlVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx''@;'; put 'put ''LTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgy''@;'; put 'put ''OWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4z''@;'; put 'put ''N2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4''@;'; put 'put ''LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcu''@;'; put 'put ''MTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42''@;'; put 'put ''MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYx''@;'; put 'put ''LDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3''@;'; put 'put ''LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu''@;'; put 'put ''NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxiLkNsclNoYXBlRm9sZGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDls''@;'; put 'put ''Mi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQu''@;'; put 'put ''MTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIs''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5''@;'; put 'put ''LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEz''@;'; put 'put ''LjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PicpLGIuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs''@;'; put 'put ''MSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAs''@;'; put 'put ''MCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSww''@;'; put 'put ''LDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYu''@;'; put 'put ''OWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAs''@;'; put 'put ''MSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJM''@;'; put 'put ''MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwy''@;'; put 'put ''LjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs''@;'; put 'put ''NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs''@;'; put 'put ''MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43''@;'; put 'put ''MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUJlbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44''@;'; put 'put ''M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42''@;'; put 'put ''MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywx''@;'; put 'put ''NC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4y''@;'; put 'put ''NCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDks''@;'; put 'put ''MCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAs''@;'; put 'put ''MS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0Ljlh''@;'; put 'put ''MTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQu''@;'; put 'put ''NCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwx''@;'; put 'put ''LDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40''@;'; put 'put ''NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlSW1hZ2U9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1''@;'; put 'put ''LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEs''@;'; put 'put ''MS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYx''@;'; put 'put ''Mi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEs''@;'; put 'put ''MEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUNsb3VkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu''@;'; put 'put ''MTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywy''@;'; put 'put ''My4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2''@;'; put 'put ''LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4''@;'; put 'put ''LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44''@;'; put 'put ''Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4x''@;'; put 'put ''OGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5''@;'; put 'put ''LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4''@;'; put 'put ''LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y''@;'; put 'put ''OSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMz''@;'; put 'put ''LDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44''@;'; put 'put ''OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs''@;'; put 'put ''MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs''@;'; put 'put ''MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs''@;'; put 'put ''MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx''@;'; put 'put ''NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1''@;'; put 'put ''bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZVZtQnVnPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi''@;'; put 'put ''IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy''@;'; put 'put ''Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx''@;'; put 'put ''LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww''@;'; put 'put ''LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx''@;'; put 'put ''NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x''@;'; put 'put ''LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx''@;'; put 'put ''Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLGIuQ2xyU2hhcGVTZWFyY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw''@;'; put 'put ''Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLGIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy''@;'; put 'put ''LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksYi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLGIuQ2xyU2hhcGVDYWxlbmRhcj0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIg''@;'; put 'put ''eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIg''@;'; put 'put ''eT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIg''@;'; put 'put ''ZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJo''@;'; put 'put ''MjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24g''@;'; put 'put ''cG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''MzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgy''@;'; put 'put ''NlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu''@;'; put 'put ''NSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwy''@;'; put 'put ''Nkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlRXZlbnQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs''@;'; put 'put ''MjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x''@;'; put 'put ''OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww''@;'; put 'put ''LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1''@;'; put 'put ''LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00Vjlh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2''@;'; put 'put ''Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2''@;'; put 'put ''aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43''@;'; put 'put ''OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVFeWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu''@;'; put 'put ''MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu''@;'; put 'put ''OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx''@;'; put 'put ''OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs''@;'; put 'put ''MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5''@;'; put 'put ''LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9''@;'; put 'put ''IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlRXllSGlkZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu''@;'; put 'put ''NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs''@;'; put 'put ''MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu''@;'; put 'put ''NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42''@;'; put 'put ''MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs''@;'; put 'put ''OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx''@;'; put 'put ''OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs''@;'; put 'put ''MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFycm93PSgw''@;'; put 'put ''LHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIi8+JyksYi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOmIuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Yi5DbHJTaGFwZUhvbWUsY29nOmIuQ2xyU2hhcGVDb2csY2hlY2s6Yi5DbHJTaGFwZUNoZWNrLHRpbWVzOmIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp''@;'; put 'put ''b24tdHJpYW5nbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOmIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpiLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpiLkNsclNoYXBlSW5mb0NpcmNsZSwi''@;'; put 'put ''aW5mby1zdGFuZGFyZCI6Yi5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOmIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpiLkNsclNoYXBlV2FybmluZ1N0YW5k''@;'; put 'put ''YXJkLCJoZWxwLWluZm8iOmIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOmIuQ2xyU2hhcGVCYXJzLHVzZXI6Yi5DbHJTaGFwZVVzZXIsYW5nbGU6Yi5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpiLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Yi5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpiLkNs''@;'; put 'put ''clNoYXBlQmVsbCxpbWFnZTpiLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Yi5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpiLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk''@;'; put 'put ''IjpiLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpiLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpiLkNsclNoYXBlVm1CdWcsc2VhcmNoOmIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Yi5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k''@;'; put 'put ''b3VibGUiOmIuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpiLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Yi5DbHJTaGFwZUV2ZW50LGV5ZTpiLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Yi5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpiLkNsclNoYXBlU3RlcEZvcndhcmQy''@;'; put 'put ''LGFycm93OmIuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaG91c2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsXy5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjbG9zZSIs''@;'; put 'put ''KDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShiLkNvcmVTaGFwZXMsImVycm9yIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBl''@;'; put 'put ''c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm1lbnUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLF8uZGVzY3JpcHRvckNv''@;'; put 'put ''bmZpZykoYi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjYXJldCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLF8u''@;'; put 'put ''ZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFw''@;'; put 'put ''ZXMsImNvbGxhcHNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xyU2hhcGVMb2dvdXQ9Yi5DbHJTaGFwZUxvZ2luPWIuQ2xyU2hhcGVIZWxwPWIuQ2xy''@;'; put 'put ''U2hhcGVDb3B5PWIuQ2xyU2hhcGVDaGlsZEFycm93PWIuQ2xyU2hhcGVDaXJjbGVBcnJvdz1iLkNsclNoYXBlQWxhcm1DbG9jaz1iLkNsclNoYXBlQ2xvY2s9Yi5DbHJTaGFwZUhpc3Rvcnk9Yi5DbHJTaGFwZVRhZ3M9Yi5DbHJTaGFwZVRhZz1iLkNsclNoYXBlVHJhc2g9Yi5DbHJTaGFwZVRp''@;'; put 'put ''bWVzQ2lyY2xlPWIuQ2xyU2hhcGVCYW49Yi5DbHJTaGFwZVBsdXNDaXJjbGU9Yi5DbHJTaGFwZU1pbnVzQ2lyY2xlPWIuQ2xyU2hhcGVNaW51cz1iLkNsclNoYXBlUGx1cz1iLkNsclNoYXBlRmlsZT1iLkNsclNoYXBlUGluPWIuQ2xyU2hhcGVGaWx0ZXI9Yi5DbHJTaGFwZVBvcE91dD1iLkNs''@;'; put 'put ''clNoYXBlVXNlcnM9Yi5DbHJTaGFwZVVubG9jaz1iLkNsclNoYXBlTG9jaz1iLkNsclNoYXBlVXBsb2FkPWIuQ2xyU2hhcGVEb3dubG9hZD1iLkNsclNoYXBlTGlnaHRidWxiPWIuQ2xyU2hhcGVWaWV3Q2FyZHM9Yi5DbHJTaGFwZVZpZXdMaXN0PWIuQ2xyU2hhcGVTeW5jPWIuQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPWIuQ2xyU2hhcGVOb3RlPWIuQ2xyU2hhcGVQZW5jaWw9Yi5DbHJTaGFwZVRoZXJtb21ldGVyPWIuQ2xyU2hhcGVCdWc9Yi5DbHJTaGFwZVNjaXNzb3JzPWIuQ2xyU2hhcGVBc3Rlcmlzaz1iLkNsclNoYXBlQm9vaz1iLkNsclNoYXBlT2JqZWN0cz1iLkNsclNoYXBlUmVzaXplPWIu''@;'; put 'put ''Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Yi5DbHJTaGFwZUN1cnNvckhhbmQ9Yi5DbHJTaGFwZUN1cnNvckFycm93PWIuQ2xyU2hhcGVHcmlkVmlldz1iLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Yi5DbHJTaGFwZU5ldz1iLkNsclNoYXBlQWxhcm1PZmY9Yi5DbHJTaGFwZVBpbmJvYXJk''@;'; put 'put ''PWIuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxiLkNsclNoYXBlQ2xvbmU9Yi5DbHJTaGFwZUN1cnNvck1vdmU9Yi5DbHJTaGFwZVdhbmQ9Yi5DbHJTaGFwZVN1bj1iLkNsclNoYXBlTW9vbj1iLkNsclNoYXBlRmlsdGVyMj1iLkNsclNoYXBlRHJhZ0hhbmRsZT1iLkNsclNoYXBlQ29weVRvQ2xp''@;'; put 'put ''cGJvYXJkPWIuQ2xyU2hhcGVDb2xvclBpY2tlcj1iLkNsclNoYXBlQnJpZWZjYXNlPWIuQ2xyU2hhcGVFeHBhbmRDYXJkPWIuQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9Yi5DbHJTaGFwZVNvcnRCeT1iLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Yi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPWIuQ2xy''@;'; put 'put ''U2hhcGVTaHJpbms9Yi5DbHJTaGFwZVBhcGVyY2xpcD1iLkNsclNoYXBlRmlsZUdyb3VwPWIuQ2xyU2hhcGVSZXBlYXQ9Yi5DbHJTaGFwZUlkQmFkZ2U9Yi5DbHJTaGFwZUJhbGFuY2U9Yi5DbHJTaGFwZU9yZ2FuaXphdGlvbj1iLkNsclNoYXBlTm9BY2Nlc3M9Yi5DbHJTaGFwZUhvdXJnbGFz''@;'; put 'put ''cz1iLkNsclNoYXBlRmxhbWU9Yi5DbHJTaGFwZVRhcmdldD1iLkNsclNoYXBlQnVsbHNleWU9Yi5DbHJTaGFwZVdyZW5jaD1iLkNsclNoYXBlQm9sdD1iLkNsclNoYXBlTGlicmFyeT1iLkNsclNoYXBlS2V5PWIuQ2xyU2hhcGVab29tT3V0PWIuQ2xyU2hhcGVab29tSW49Yi5DbHJTaGFwZVdp''@;'; put 'put ''bmRvd1Jlc3RvcmU9Yi5DbHJTaGFwZVdpbmRvd01pbj1iLkNsclNoYXBlV2luZG93TWF4PWIuQ2xyU2hhcGVXaW5kb3dDbG9zZT1iLkNsclNoYXBlVG9vbHM9Yi5DbHJTaGFwZVN3aXRjaD1iLkNsclNoYXBlVHdvV2F5QXJyb3dzPWIuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9Yi5DbHJTaGFwZVNj''@;'; put 'put ''cm9sbD1iLkNsclNoYXBlVW5kbz1iLkNsclNoYXBlUmVkbz1iLkNsclNoYXBlTGlzdD1iLkNsclNoYXBlRmlyZXdhbGw9Yi5DbHJTaGFwZUNsaXBib2FyZD1iLkNsclNoYXBlU2xpZGVyPWIuQ2xyU2hhcGVXb3JsZD1iLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsYi5Fc3NlbnRpYWxTaGFwZXM9''@;'; put 'put ''Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1iLkNsclNoYXBlRmlyc3RBaWQ9Yi5DbHJTaGFwZUJldGE9Yi5DbHJTaGFwZURvdENpcmNsZT1iLkNsclNoYXBlQ2lyY2xlPWIuQ2xyU2hhcGVDcm9zc2hhaXJzPWIuQ2xyU2hhcGVWb2x1bWU9Yi5DbHJTaGFwZVRhYmxlPWIuQ2xyU2hhcGVTbm93Zmxh''@;'; put 'put ''a2U9Yi5DbHJTaGFwZUZ1ZWw9Yi5DbHJTaGFwZUZvcm09Yi5DbHJTaGFwZUZpc2g9Yi5DbHJTaGFwZVRyZWU9Yi5DbHJTaGFwZVJlY3ljbGU9Yi5DbHJTaGFwZUZpbHRlck9mZj1iLkNsclNoYXBlRmlsZVppcD1iLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49Yi5DbHJTaGFwZUN1cnNvckhhbmRH''@;'; put 'put ''cmFiPWIuQ2xyU2hhcGVUcmVlVmlldz1iLkNsclNoYXBlUG9ydHJhaXQ9Yi5DbHJTaGFwZVBhc3RlPWIuQ2xyU2hhcGVMYW5kc2NhcGU9Yi5DbHJTaGFwZUVyYXNlcj1iLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1iLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LE49RCgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVBZGRUZXh0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs''@;'; put 'put ''MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxiLkNsclNoYXBlUGluYm9hcmQ9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs''@;'; put 'put ''Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct''@;'; put 'put ''N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs''@;'; put 'put ''MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVBbGFybU9mZj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2''@;'; put 'put ''LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy''@;'; put 'put ''QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs''@;'; put 'put ''Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs''@;'; put 'put ''MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0''@;'; put 'put ''bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLGIuQ2xyU2hhcGVOZXc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w''@;'; put 'put ''OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww''@;'; put 'put ''LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4''@;'; put 'put ''IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx''@;'; put 'put ''Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44''@;'; put 'put ''NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x''@;'; put 'put ''LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLGIuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs''@;'; put 'put ''Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0''@;'; put 'put ''LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz''@;'; put 'put ''Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs''@;'; put 'put ''MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLGIuQ2xyU2hhcGVHcmlkVmlldz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs''@;'; put 'put ''NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9''@;'; put 'put ''IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4''@;'; put 'put ''PSIyIiByeT0iMiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3''@;'; put 'put ''bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww''@;'; put 'put ''LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs''@;'; put 'put ''MCwwLDI5LDEyLjM2WiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4''@;'; put 'put ''LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu''@;'; put 'put ''NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs''@;'; put 'put ''MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40''@;'; put 'put ''MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y''@;'; put 'put ''OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu''@;'; put 'put ''MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx''@;'; put 'put ''NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs''@;'; put 'put ''MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w''@;'; put 'put ''LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt''@;'; put 'put ''MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu''@;'; put 'put ''OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt''@;'; put 'put ''My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2''@;'; put 'put ''LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks''@;'; put 'put ''MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx''@;'; put 'put ''LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksYi5DbHJTaGFwZVJlc2l6ZT0oMCxwLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksYi5DbHJTaGFwZU9iamVjdHM9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41''@;'; put 'put ''Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz''@;'; put 'put ''MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww''@;'; put 'put ''LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs''@;'; put 'put ''MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi''@;'; put 'put ''IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxiLkNsclNoYXBlQm9vaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks''@;'; put 'put ''MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5''@;'; put 'put ''LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w''@;'; put 'put ''NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxiLkNsclNoYXBlQXN0ZXJpc2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44''@;'; put 'put ''NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0''@;'; put 'put ''LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt''@;'; put 'put ''MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4''@;'; put 'put ''bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksYi5DbHJTaGFwZVNjaXNz''@;'; put 'put ''b3JzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1''@;'; put 'put ''Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww''@;'; put 'put ''LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu''@;'; put 'put ''NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs''@;'; put 'put ''MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx''@;'; put 'put ''LDcuNDUsMTMuMjNaIi8+JyksYi5DbHJTaGFwZUJ1Zz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44''@;'; put 'put ''MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcy''@;'; put 'put ''YTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwz''@;'; put 'put ''MS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMu''@;'; put 'put ''MTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEs''@;'; put 'put ''NS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4z''@;'; put 'put ''OCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCww''@;'; put 'put ''LDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0x''@;'; put 'put ''NCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45''@;'; put 'put ''NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRB''@;'; put 'put ''MTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAs''@;'; put 'put ''MSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4''@;'; put 'put ''LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLGIuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxiLkNsclNoYXBlUGVuY2lsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs''@;'; put 'put ''MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu''@;'; put 'put ''MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z''@;'; put 'put ''MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLGIuQ2xyU2hhcGVOb3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y''@;'; put 'put ''OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy''@;'; put 'put ''LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2''@;'; put 'put ''SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz''@;'; put 'put ''LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZWZyZXNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks''@;'; put 'put ''MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx''@;'; put 'put ''LjY1WiIvPicpLGIuQ2xyU2hhcGVTeW5jPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu''@;'; put 'put ''NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww''@;'; put 'put ''LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww''@;'; put 'put ''LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksYi5DbHJTaGFwZVZpZXdMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLGIuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLGIuQ2xyU2hhcGVMaWdodGJ1bGI9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40Niwx''@;'; put 'put ''OC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRh''@;'; put 'put ''MTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCww''@;'; put 'put ''LDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0x''@;'; put 'put ''LjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywx''@;'; put 'put ''OC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQs''@;'; put 'put ''MCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQu''@;'; put 'put ''NjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40''@;'; put 'put ''NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIx''@;'; put 'put ''LjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41''@;'; put 'put ''LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlRG93bmxvYWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx''@;'; put 'put ''LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5''@;'; put 'put ''LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt''@;'; put 'put ''MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZVVwbG9hZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs''@;'; put 'put ''MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx''@;'; put 'put ''czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj''@;'; put 'put ''LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs''@;'; put 'put ''MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40''@;'; put 'put ''MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVMb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa''@;'; put 'put ''TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs''@;'; put 'put ''MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs''@;'; put 'put ''MSw2LDYuMzZaIi8+JyksYi5DbHJTaGFwZVVubG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2''@;'; put 'put ''LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs''@;'; put 'put ''MSwyLC4wOVoiLz4nKSxiLkNsclNoYXBlVXNlcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44''@;'; put 'put ''LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDku''@;'; put 'put ''NnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEt''@;'; put 'put ''MC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIs''@;'; put 'put ''MC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00''@;'; put 'put ''LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAu''@;'; put 'put ''NSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMw''@;'; put 'put ''LjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9''@;'; put 'put ''Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwz''@;'; put 'put ''MEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4x''@;'; put 'put ''LDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEt''@;'; put 'put ''MS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4''@;'; put 'put ''LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1Yy''@;'; put 'put ''My41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40Niww''@;'; put 'put ''LDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDks''@;'; put 'put ''MCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2''@;'; put 'put ''LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0''@;'; put 'put ''LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwx''@;'; put 'put ''Ny44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTgu''@;'; put 'put ''MSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIz''@;'; put 'put ''LjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQy''@;'; put 'put ''LDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUu''@;'; put 'put ''MjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAt''@;'; put 'put ''My40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgs''@;'; put 'put ''Ni41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x''@;'; put 'put ''MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43''@;'; put 'put ''bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTgu''@;'; put 'put ''NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNB''@;'; put 'put ''OS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y''@;'; put 'put ''Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4x''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCww''@;'; put 'put ''LDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwu''@;'; put 'put ''MiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40''@;'; put 'put ''NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41''@;'; put 'put ''NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMs''@;'; put 'put ''MTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlUG9wT3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxiLkNsclNoYXBlRmlsdGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5''@;'; put 'put ''bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44''@;'; put 'put ''MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx''@;'; put 'put ''LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVBpbj0oMCxwLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs''@;'; put 'put ''MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw''@;'; put 'put ''YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu''@;'; put 'put ''NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx''@;'; put 'put ''LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksYi5DbHJTaGFwZUZpbGU9KDAscC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0u''@;'; put 'put ''MywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSww''@;'; put 'put ''LTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUu''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4w''@;'; put 'put ''OUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcs''@;'; put 'put ''MCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwx''@;'; put 'put ''LjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0w''@;'; put 'put ''LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLGIuQ2xyU2hhcGVQbHVz''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs''@;'; put 'put ''MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxiLkNsclNoYXBlTWludXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB''@;'; put 'put ''MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVCYW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa''@;'; put 'put ''TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLGIuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43''@;'; put 'put ''Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs''@;'; put 'put ''MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs''@;'; put 'put ''LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLGIuQ2xyU2hhcGVUcmFzaD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0''@;'; put 'put ''LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxiLkNsclNoYXBlVGFnPSgwLHAuY2xySWNvblNWRykoJzxjaXJj''@;'; put 'put ''bGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5Ljky''@;'; put 'put ''YTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIy''@;'; put 'put ''LDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5''@;'; put 'put ''LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEu''@;'; put 'put ''NDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5''@;'; put 'put ''LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCww''@;'; put 'put ''LDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEs''@;'; put 'put ''OS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy''@;'; put 'put ''LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIs''@;'; put 'put ''MiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PicpLGIuQ2xyU2hhcGVUYWdzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45''@;'; put 'put ''MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4y''@;'; put 'put ''MUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIx''@;'; put 'put ''LjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz''@;'; put 'put ''djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43Myww''@;'; put 'put ''bDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx''@;'; put 'put ''Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4y''@;'; put 'put ''MSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTku''@;'; put 'put ''MTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwx''@;'; put 'put ''OS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIs''@;'; put 'put ''MCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43Mywx''@;'; put 'put ''LjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''MTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs''@;'; put 'put ''NUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''Mi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCww''@;'; put 'put ''LDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs''@;'; put 'put ''MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+JyksYi5DbHJTaGFwZUhpc3Rvcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1''@;'; put 'put ''LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUNsb2NrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs''@;'; put 'put ''MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcu''@;'; put 'put ''OTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5''@;'; put 'put ''LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAs''@;'; put 'put ''MCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEz''@;'; put 'put ''LDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAt''@;'; put 'put ''Mi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAs''@;'; put 'put ''MCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2''@;'; put 'put ''bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3''@;'; put 'put ''LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFM''@;'; put 'put ''MjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljky''@;'; put 'put ''LDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03''@;'; put 'put ''LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSww''@;'; put 'put ''LDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAs''@;'; put 'put ''MzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu''@;'; put 'put ''NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCww''@;'; put 'put ''LDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwx''@;'; put 'put ''LDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs''@;'; put 'put ''MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSww''@;'; put 'put ''LDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEu''@;'; put 'put ''MjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMu''@;'; put 'put ''ODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1''@;'; put 'put ''Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4''@;'; put 'put ''TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5''@;'; put 'put ''YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZUNoaWxkQXJyb3c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNvcHk9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNsclNoYXBlSGVscD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx''@;'; put 'put ''NiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4z''@;'; put 'put ''OCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCww''@;'; put 'put ''LDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4y''@;'; put 'put ''YTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1''@;'; put 'put ''YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAs''@;'; put 'put ''MS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0u''@;'; put 'put ''NDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0x''@;'; put 'put ''LDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEu''@;'; put 'put ''NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x''@;'; put 'put ''LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs''@;'; put 'put ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlTG9naW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy''@;'; put 'put ''MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5''@;'; put 'put ''LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVMb2dvdXQ9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiLz4nKSxiLkNsclNoYXBlUHJpbnRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5''@;'; put 'put ''Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIy''@;'; put 'put ''LjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwx''@;'; put 'put ''LDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgy''@;'; put 'put ''N1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVXb3JsZD0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMt''@;'; put 'put ''LjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTku''@;'; put 'put ''MzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRj''@;'; put 'put ''LjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCww''@;'; put 'put ''LDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44''@;'; put 'put ''MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQs''@;'; put 'put ''MTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEt''@;'; put 'put ''My43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4z''@;'; put 'put ''My0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNa''@;'; put 'put ''TTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41''@;'; put 'put ''NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIs''@;'; put 'put ''MjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhh''@;'; put 'put ''MTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3''@;'; put 'put ''LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3''@;'; put 'put ''YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44''@;'; put 'put ''LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAs''@;'; put 'put ''MCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIy''@;'; put 'put ''LjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAs''@;'; put 'put ''MCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVTbGlkZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu''@;'; put 'put ''NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx''@;'; put 'put ''Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0''@;'; put 'put ''LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww''@;'; put 'put ''LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy''@;'; put 'put ''SDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs''@;'; put 'put ''NCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNB''@;'; put 'put ''LjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4z''@;'; put 'put ''MUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0''@;'; put 'put ''LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEs''@;'; put 'put ''MCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjEx''@;'; put 'put ''LTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1''@;'; put 'put ''Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUZpcmV3YWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy''@;'; put 'put ''djUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEu''@;'; put 'put ''NzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45''@;'; put 'put ''MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhW''@;'; put 'put ''MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0x''@;'; put 'put ''NCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVMaXN0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdp''@;'; put 'put ''ZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTki''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00''@;'; put 'put ''SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVSZWRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz''@;'; put 'put ''bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVVbmRvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx''@;'; put 'put ''Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVTY3JvbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu''@;'; put 'put ''NSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMy''@;'; put 'put ''LDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs''@;'; put 'put ''MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww''@;'; put 'put ''djQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAs''@;'; put 'put ''MCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCww''@;'; put 'put ''LDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44''@;'; put 'put ''SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEs''@;'; put 'put ''NSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1''@;'; put 'put ''Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40''@;'; put 'put ''YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwx''@;'; put 'put ''LjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4Ljct''@;'; put 'put ''LjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41''@;'; put 'put ''LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCww''@;'; put 'put ''LDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEu''@;'; put 'put ''MTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40''@;'; put 'put ''NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0u''@;'; put 'put ''MTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYs''@;'; put 'put ''MCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIu''@;'; put 'put ''MjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEu''@;'; put 'put ''NDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgy''@;'; put 'put ''My40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wx''@;'; put 'put ''OC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41''@;'; put 'put ''LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43''@;'; put 'put ''NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x''@;'; put 'put ''NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y''@;'; put 'put ''OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx''@;'; put 'put ''LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx''@;'; put 'put ''LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy''@;'; put 'put ''QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0''@;'; put 'put ''LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1''@;'; put 'put ''LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3''@;'; put 'put ''LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCww''@;'; put 'put ''LDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwx''@;'; put 'put ''OGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0y''@;'; put 'put ''LC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4z''@;'; put 'put ''Ny4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwy''@;'; put 'put ''Ni42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwx''@;'; put 'put ''LjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYx''@;'; put 'put ''LDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDIt''@;'; put 'put ''LjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC00LS1iYWRnZWQiIC8+JyksYi5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku''@;'; put 'put ''NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlU3dpdGNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM''@;'; put 'put ''OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg''@;'; put 'put ''eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPicpLGIuQ2xyU2hhcGVUb29scz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww''@;'; put 'put ''LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM''@;'; put 'put ''MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlV2luZG93Q2xvc2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5''@;'; put 'put ''LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93TWF4PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu''@;'; put 'put ''ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVdpbmRvd01pbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs''@;'; put 'put ''MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVpvb21Jbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw''@;'; put 'put ''LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVab29tT3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww''@;'; put 'put ''LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlS2V5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0u''@;'; put 'put ''NEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQs''@;'; put 'put ''MGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5''@;'; put 'put ''PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCww''@;'; put 'put ''LDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBM''@;'; put 'put ''MjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4''@;'; put 'put ''PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUs''@;'; put 'put ''NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEu''@;'; put 'put ''NzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2''@;'; put 'put ''MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgy''@;'; put 'put ''My40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4z''@;'; put 'put ''NywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwz''@;'; put 'put ''MiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCww''@;'; put 'put ''LDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSxiLkNsclNoYXBlTGlicmFyeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4''@;'; put 'put ''LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu''@;'; put 'put ''OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJvbHQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz''@;'; put 'put ''MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww''@;'; put 'put ''LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu''@;'; put 'put ''NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPicpLGIuQ2xyU2hhcGVXcmVuY2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs''@;'; put 'put ''MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42''@;'; put 'put ''MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z''@;'; put 'put ''IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu''@;'; put 'put ''NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs''@;'; put 'put ''MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxzZXllPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs''@;'; put 'put ''LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4''@;'; put 'put ''LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM''@;'; put 'put ''MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs''@;'; put 'put ''MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz''@;'; put 'put ''LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlVGFyZ2V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVGbGFtZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx''@;'; put 'put ''Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz''@;'; put 'put ''LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3''@;'; put 'put ''LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y''@;'; put 'put ''LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs''@;'; put 'put ''Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww''@;'; put 'put ''LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0''@;'; put 'put ''bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSG91cmdsYXNzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; put 'put ''LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwu''@;'; put 'put ''NjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2Ex''@;'; put 'put ''LDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4z''@;'; put 'put ''NGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45''@;'; put 'put ''MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCww''@;'; put 'put ''LDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAs''@;'; put 'put ''MSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAs''@;'; put 'put ''Mi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2''@;'; put 'put ''LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAs''@;'; put 'put ''MCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAs''@;'; put 'put ''MCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu''@;'; put 'put ''NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEu''@;'; put 'put ''MTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYu''@;'; put 'put ''MDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEu''@;'; put 'put ''MjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwx''@;'; put 'put ''MS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZU5vQWNjZXNzPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y''@;'; put 'put ''NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs''@;'; put 'put ''MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx''@;'; put 'put ''Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww''@;'; put 'put ''LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4''@;'; put 'put ''LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUJhbGFuY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu''@;'; put 'put ''MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u''@;'; put 'put ''NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLGIuQ2xyU2hhcGVJZEJhZGdlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0''@;'; put 'put ''LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y''@;'; put 'put ''Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx''@;'; put 'put ''LDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEt''@;'; put 'put ''Mi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIw''@;'; put 'put ''LDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4y''@;'; put 'put ''OWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3''@;'; put 'put ''LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40''@;'; put 'put ''VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIx''@;'; put 'put ''LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjcz''@;'; put 'put ''QTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZVJlcGVhdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs''@;'; put 'put ''MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3''@;'; put 'put ''LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxiLkNsclNoYXBlRmlsZUdyb3VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLGIuQ2xyU2hhcGVQYXBlcmNsaXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks''@;'; put 'put ''MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww''@;'; put 'put ''LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu''@;'; put 'put ''NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLGIuQ2xyU2hhcGVTaHJpbms9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksYi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs''@;'; put 'put ''MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs''@;'; put 'put ''Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt''@;'; put 'put ''LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5''@;'; put 'put ''LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x''@;'; put 'put ''MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks''@;'; put 'put ''Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz''@;'; put 'put ''LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs''@;'; put 'put ''MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz''@;'; put 'put ''My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh''@;'; put 'put ''MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVNvcnRCeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy''@;'; put 'put ''MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1''@;'; put 'put ''LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt''@;'; put 'put ''MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs''@;'; put 'put ''MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww''@;'; put 'put ''LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs''@;'; put 'put ''MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQnJpZWZjYXNlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx''@;'; put 'put ''LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww''@;'; put 'put ''LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs''@;'; put 'put ''MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2''@;'; put 'put ''OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz''@;'; put 'put ''QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNvbG9yUGlja2Vy''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey''@;'; put 'put ''LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu''@;'; put 'put ''MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40''@;'; put 'put ''MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww''@;'; put 'put ''LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy''@;'; put 'put ''LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB''@;'; put 'put ''MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz''@;'; put 'put ''SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXIyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZU1vb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x''@;'; put 'put ''LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs''@;'; put 'put ''MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVN1bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4z''@;'; put 'put ''Miw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywx''@;'; put 'put ''MGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4''@;'; put 'put ''LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0x''@;'; put 'put ''LTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDku''@;'; put 'put ''ODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC05IiAvPicpLGIuQ2xyU2hhcGVXYW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40''@;'; put 'put ''NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha''@;'; put 'put ''TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz''@;'; put 'put ''bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww''@;'; put 'put ''LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu''@;'; put 'put ''MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksYi5DbHJT''@;'; put 'put ''aGFwZUN1cnNvck1vdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh''@;'; put 'put ''MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5''@;'; put 'put ''LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ2xvbmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRGV0YWlscz0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww''@;'; put 'put ''LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww''@;'; put 'put ''LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLGIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVFcmFzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy''@;'; put 'put ''SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04''@;'; put 'put ''LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy''@;'; put 'put ''OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlTGFuZHNjYXBlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1''@;'; put 'put ''LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs''@;'; put 'put ''MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w''@;'; put 'put ''NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVBhc3RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0''@;'; put 'put ''djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI''@;'; put 'put ''Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv''@;'; put 'put ''PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02''@;'; put 'put ''IiAvPicpLGIuQ2xyU2hhcGVQb3J0cmFpdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu''@;'; put 'put ''OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs''@;'; put 'put ''MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu''@;'; put 'put ''MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlVHJlZVZpZXc9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx''@;'; put 'put ''LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww''@;'; put 'put ''LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44''@;'; put 'put ''OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs''@;'; put 'put ''MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu''@;'; put 'put ''MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5''@;'; put 'put ''aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JyksYi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2''@;'; put 'put ''LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3''@;'; put 'put ''LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y''@;'; put 'put ''NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx''@;'; put 'put ''Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVGaWxlWmlwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw''@;'; put 'put ''LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0''@;'; put 'put ''YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu''@;'; put 'put ''NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w''@;'; put 'put ''LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt''@;'; put 'put ''M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI''@;'; put 'put ''MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRmlsdGVyT2ZmPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu''@;'; put 'put ''MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy''@;'; put 'put ''My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs''@;'; put 'put ''OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVSZWN5Y2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww''@;'; put 'put ''LjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCww''@;'; put 'put ''LjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcu''@;'; put 'put ''Nyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwx''@;'; put 'put ''LjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRc''@;'; put 'put ''dGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUu''@;'; put 'put ''MiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjkt''@;'; put 'put ''My42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwy''@;'; put 'put ''LjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQs''@;'; put 'put ''MC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCww''@;'; put 'put ''LjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4y''@;'; put 'put ''LTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0''@;'; put 'put ''XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAu''@;'; put 'put ''MS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2''@;'; put 'put ''LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlVHJlZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43''@;'; put 'put ''QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x''@;'; put 'put ''LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01''@;'; put 'put ''LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu''@;'; put 'put ''OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt''@;'; put 'put ''MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlRmlzaD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44''@;'; put 'put ''MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu''@;'; put 'put ''OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u''@;'; put 'put ''MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x''@;'; put 'put ''MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVGb3JtPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww''@;'; put 'put ''LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs''@;'; put 'put ''MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy''@;'; put 'put ''LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs''@;'; put 'put ''MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlRnVlbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu''@;'; put 'put ''MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1''@;'; put 'put ''LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLGIuQ2xyU2hhcGVTbm93Zmxha2U9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w''@;'; put 'put ''NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz''@;'; put 'put ''MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci''@;'; put 'put ''IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxiLkNsclNoYXBlVGFibGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz''@;'; put 'put ''YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlVm9sdW1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt''@;'; put 'put ''LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxiLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs''@;'; put 'put ''MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu''@;'; put 'put ''MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZUNpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZURvdENpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCZXRhPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz''@;'; put 'put ''LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI''@;'; put 'put ''MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu''@;'; put 'put ''MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs''@;'; put 'put ''MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww''@;'; put 'put ''LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu''@;'; put 'put ''NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx''@;'; put 'put ''NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4''@;'; put 'put ''LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxiLkNsclNoYXBlRmlyc3RBaWQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs''@;'; put 'put ''MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41''@;'; put 'put ''YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxiLkNsclNo''@;'; put 'put ''YXBlQ29sb3JQYWxldHRlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs''@;'; put 'put ''Mi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4x''@;'; put 'put ''LDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcy''@;'; put 'put ''LDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43Miwy''@;'; put 'put ''LjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIy''@;'; put 'put ''LDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAt''@;'; put 'put ''LjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44Myww''@;'; put 'put ''LDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEu''@;'; put 'put ''MTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAs''@;'; put 'put ''MS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0u''@;'; put 'put ''NS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3''@;'; put 'put ''LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4w''@;'; put 'put ''NmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2''@;'; put 'put ''LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAs''@;'; put 'put ''MC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwy''@;'; put 'put ''Ljg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUu''@;'; put 'put ''NTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMs''@;'; put 'put ''MzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAs''@;'; put 'put ''MSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwy''@;'; put 'put ''Ljg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4y''@;'; put 'put ''MiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAs''@;'; put 'put ''MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuRXNzZW50aWFsU2hhcGVzPXsi''@;'; put 'put ''YWRkLXRleHQiOmIuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOmIuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpiLkNsclNoYXBlUGluYm9hcmQsbmV3OmIuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Yi5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci''@;'; put 'put ''OmIuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpiLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpiLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOmIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOmIuQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Yi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Yi5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Yi5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpiLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Yi5DbHJT''@;'; put 'put ''aGFwZU9iamVjdHMsYm9vazpiLkNsclNoYXBlQm9vayxhc3RlcmlzazpiLkNsclNoYXBlQXN0ZXJpc2ssYnVnOmIuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Yi5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOmIuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Yi5DbHJTaGFwZVBlbmNpbCxu''@;'; put 'put ''b3RlOmIuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Yi5DbHJTaGFwZVJlZnJlc2gsc3luYzpiLkNsclNoYXBlU3luYywidmlldy1saXN0IjpiLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOmIuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Yi5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0''@;'; put 'put ''YnVsYjpiLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOmIuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Yi5DbHJTaGFwZVVwbG9hZCxsb2NrOmIuQ2xyU2hhcGVMb2NrLHVubG9jazpiLkNsclNoYXBlVW5sb2NrLHVzZXJzOmIuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Yi5DbHJTaGFwZVBv''@;'; put 'put ''cE91dCxmaWx0ZXI6Yi5DbHJTaGFwZUZpbHRlcixwaW46Yi5DbHJTaGFwZVBpbixmaWxlOmIuQ2xyU2hhcGVGaWxlLHBsdXM6Yi5DbHJTaGFwZVBsdXMsbWludXM6Yi5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOmIuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOmIuQ2xy''@;'; put 'put ''U2hhcGVQbHVzQ2lyY2xlLGJhbjpiLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOmIuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpiLkNsclNoYXBlVHJhc2gsY2lyY2xlOmIuQ2xyU2hhcGVDaXJjbGUsdGFnOmIuQ2xyU2hhcGVUYWcsdGFnczpiLkNsclNoYXBlVGFncyxoaXN0b3J5OmIu''@;'; put 'put ''Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOmIuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOmIuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93Ok4uQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpiLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpiLkNsclNoYXBlQ2hpbGRBcnJv''@;'; put 'put ''dyxjb3B5OmIuQ2xyU2hhcGVDb3B5LGhlbHA6Yi5DbHJTaGFwZUhlbHAsbG9naW46Yi5DbHJTaGFwZUxvZ2luLGxvZ291dDpiLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6Yi5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Yi5DbHJTaGFwZVdvcmxkLHNsaWRlcjpiLkNsclNoYXBlU2xpZGVyLGNsaXBi''@;'; put 'put ''b2FyZDpiLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOmIuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OmIuQ2xyU2hhcGVMaXN0LHJlZG86Yi5DbHJTaGFwZVJlZG8sdW5kbzpiLkNsclNoYXBlVW5kbyxzY3JvbGw6Yi5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6Yi5DbHJTaGFwZUZp''@;'; put 'put ''bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOmIuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOmIuQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6Yi5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOmIuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6Yi5DbHJTaGFwZVdpbmRvd01h''@;'; put 'put ''eCwid2luZG93LW1pbiI6Yi5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOmIuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjpiLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Yi5DbHJTaGFwZVpvb21PdXQsa2V5OmIuQ2xyU2hhcGVLZXksbGlicmFyeTpiLkNsclNo''@;'; put 'put ''YXBlTGlicmFyeSxib2x0OmIuQ2xyU2hhcGVCb2x0LHdyZW5jaDpiLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOmIuQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6Yi5DbHJTaGFwZVRhcmdldCxmbGFtZTpiLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOmIuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj''@;'; put 'put ''Y2VzcyI6Yi5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpiLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Yi5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpiLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Yi5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6Yi5DbHJTaGFwZUZp''@;'; put 'put ''bGVHcm91cCxwYXBlcmNsaXA6Yi5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Yi5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjpiLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Yi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpiLkNsclNo''@;'; put 'put ''YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpiLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Yi5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOmIuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Yi5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi''@;'; put 'put ''b2FyZCI6Yi5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOmIuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6Yi5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpiLkNsclNoYXBlTW9vbixzdW46Yi5DbHJTaGFwZVN1bix3YW5kOmIuQ2xyU2hhcGVXYW5kLGNsb25lOmIuQ2xy''@;'; put 'put ''U2hhcGVDbG9uZSxkZXRhaWxzOmIuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOmIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpiLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpiLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOmIuQ2xyU2hhcGVQYXN0ZSxwb3J0''@;'; put 'put ''cmFpdDpiLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpiLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Yi5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOmIuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Yi5DbHJTaGFwZVRyZWUsZmlzaDpiLkNsclNoYXBlRmlzaCxmb3JtOmIuQ2xyU2hh''@;'; put 'put ''cGVGb3JtLGZ1ZWw6Yi5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOmIuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Yi5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpiLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpiLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6Yi5DbHJTaGFwZUNyb3NzaGFp''@;'; put 'put ''cnMsYmV0YTpiLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Yi5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KGIuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJhZGQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsXy5kZXNjcmlwdG9yQ29uZmln''@;'; put 'put ''KShiLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hh''@;'; put 'put ''cGVzLCJsaWdodG5pbmciLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6''@;'; put 'put ''YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicGlu''@;'; put 'put ''bmVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxfLmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov''@;'; put 'put ''Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuTWVkaWFTaGFwZXM9Yi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPWIuQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPWIuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Yi5DbHJTaGFwZVJlcGxheU9uZT1iLkNsclNoYXBlUmVwbGF5QWxsPWIuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Yi5DbHJTaGFwZU11c2ljTm90ZT1iLkNsclNoYXBlRmlsbVN0cmlwPWIuQ2xyU2hhcGVIZWFkcGhvbmVzPWIuQ2xyU2hhcGVWb2x1''@;'; put 'put ''bWVNdXRlPWIuQ2xyU2hhcGVWb2x1bWVVcD1iLkNsclNoYXBlVm9sdW1lRG93bj1iLkNsclNoYXBlU2h1ZmZsZT1iLkNsclNoYXBlVmlkZW9DYW1lcmE9Yi5DbHJTaGFwZUNhbWVyYT1iLkNsclNoYXBlRmFzdEZvcndhcmQ9Yi5DbHJTaGFwZVJld2luZD1iLkNsclNoYXBlUG93ZXI9Yi5DbHJT''@;'; put 'put ''aGFwZVN0b3A9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkPWIuQ2xyU2hhcGVQYXVzZT1iLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2Iu''@;'; put 'put ''Q2xyU2hhcGVQbGF5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu''@;'; put 'put ''MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLGIuQ2xyU2hhcGVQYXVzZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy''@;'; put 'put ''LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu''@;'; put 'put ''ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo''@;'; put 'put ''ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlU3RlcEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2''@;'; put 'put ''LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz''@;'; put 'put ''YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz''@;'; put 'put ''LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSxiLkNsclNoYXBlU3RvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww''@;'; put 'put ''LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksYi5DbHJTaGFwZVBvd2VyPSgw''@;'; put 'put ''LF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSww''@;'; put 'put ''LDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEs''@;'; put 'put ''MCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBW''@;'; put 'put ''MTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2''@;'; put 'put ''QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42''@;'; put 'put ''OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0x''@;'; put 'put ''NS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVSZXdpbmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs''@;'; put 'put ''MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu''@;'; put 'put ''MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLGIuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww''@;'; put 'put ''LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww''@;'; put 'put ''LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3''@;'; put 'put ''LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww''@;'; put 'put ''LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxiLkNsclNoYXBlQ2FtZXJhPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy''@;'; put 'put ''LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44''@;'; put 'put ''LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs''@;'; put 'put ''MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh''@;'; put 'put ''LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww''@;'; put 'put ''LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxiLkNsclNoYXBlU2h1ZmZsZT0oMCxfLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs''@;'; put 'put ''MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs''@;'; put 'put ''MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksYi5DbHJTaGFwZVZvbHVtZURvd249KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy''@;'; put 'put ''Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x''@;'; put 'put ''Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0''@;'; put 'put ''LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVVcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z''@;'; put 'put ''My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs''@;'; put 'put ''MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz''@;'; put 'put ''MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y''@;'; put 'put ''OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu''@;'; put 'put ''ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42''@;'; put 'put ''OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2''@;'; put 'put ''LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42''@;'; put 'put ''N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu''@;'; put 'put ''NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu''@;'; put 'put ''MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu''@;'; put 'put ''NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxiLkNsclNoYXBlSGVhZHBob25lcz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx''@;'; put 'put ''Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy''@;'; put 'put ''Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy''@;'; put 'put ''NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI''@;'; put 'put ''NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''RmlsbVN0cmlwPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4''@;'; put 'put ''QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI''@;'; put 'put ''MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44''@;'; put 'put ''NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JyksYi5DbHJTaGFwZU11c2ljTm90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt''@;'; put 'put ''MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5''@;'; put 'put ''LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz''@;'; put 'put ''LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs''@;'; put 'put ''Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu''@;'; put 'put ''OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksYi5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x''@;'; put 'put ''LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4''@;'; put 'put ''TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41''@;'; put 'put ''OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt''@;'; put 'put ''NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww''@;'; put 'put ''LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUmVwbGF5''@;'; put 'put ''T25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4''@;'; put 'put ''TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2''@;'; put 'put ''LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz4nKSxiLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx''@;'; put 'put ''Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs''@;'; put 'put ''MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y''@;'; put 'put ''NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4''@;'; put 'put ''LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y''@;'; put 'put ''LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz''@;'; put 'put ''MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45''@;'; put 'put ''LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu''@;'; put 'put ''Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x''@;'; put 'put ''LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44''@;'; put 'put ''LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx''@;'; put 'put ''LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44''@;'; put 'put ''LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y''@;'; put 'put ''QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo''@;'; put 'put ''LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLk1lZGlhU2hhcGVzPXtwbGF5OmIuQ2xyU2hhcGVQbGF5LHBhdXNlOmIuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpiLkNsclNoYXBlU3Rl''@;'; put 'put ''cEZvcndhcmQsc3RvcDpiLkNsclNoYXBlU3RvcCxwb3dlcjpiLkNsclNoYXBlUG93ZXIscmV3aW5kOmIuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6Yi5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpiLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOmIuQ2xyU2hhcGVWaWRl''@;'; put 'put ''b0NhbWVyYSxzaHVmZmxlOmIuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOmIuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOmIuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Yi5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpiLkNsclNoYXBlSGVhZHBob25l''@;'; put 'put ''cywiZmlsbS1zdHJpcCI6Yi5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Yi5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6Yi5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Yi5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6Yi5DbHJTaGFwZVJl''@;'; put 'put ''cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Yi5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOmIuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOmIuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi''@;'; put 'put ''Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5Tb2NpYWxTaGFwZXM9Yi5DbHJTaGFwZUhhc2h0YWc9Yi5DbHJTaGFwZUNyb3duPWIuQ2xyU2hhcGVUaHVtYnNEb3duPWIuQ2xyU2hh''@;'; put 'put ''cGVUaHVtYnNVcD1iLkNsclNoYXBlU2FkRmFjZT1iLkNsclNoYXBlTmV1dHJhbEZhY2U9Yi5DbHJTaGFwZUhhcHB5RmFjZT1iLkNsclNoYXBlUGljdHVyZT1iLkNsclNoYXBlQ2hhdEJ1YmJsZT1iLkNsclNoYXBlVGFsa0J1YmJsZXM9Yi5DbHJTaGFwZUhlYXJ0QnJva2VuPWIuQ2xyU2hhcGVI''@;'; put 'put ''ZWFydD1iLkNsclNoYXBlSW5ib3g9Yi5DbHJTaGFwZUZsYWc9Yi5DbHJTaGFwZVRhc2tzPWIuQ2xyU2hhcGVFbnZlbG9wZT1iLkNsclNoYXBlQm9va21hcms9Yi5DbHJTaGFwZUhhbGZTdGFyPWIuQ2xyU2hhcGVTdGFyPWIuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIF89RCgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9RCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LE49RCgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO2IuQ2xyU2hhcGVTaGFyZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz''@;'; put 'put ''LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx''@;'; put 'put ''LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3''@;'; put 'put ''QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLGIuQ2xyU2hhcGVTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4''@;'; put 'put ''bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y''@;'; put 'put ''MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs''@;'; put 'put ''MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM''@;'; put 'put ''MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu''@;'; put 'put ''MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00''@;'; put 'put ''LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksYi5DbHJTaGFwZUhhbGZTdGFyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41''@;'; put 'put ''NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs''@;'; put 'put ''LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1''@;'; put 'put ''LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw''@;'; put 'put ''LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu''@;'; put 'put ''MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt''@;'; put 'put ''MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxiLkNsclNoYXBlQm9va21hcms9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs''@;'; put 'put ''MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42''@;'; put 'put ''Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksYi5DbHJTaGFwZUVudmVsb3BlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwx''@;'; put 'put ''Ny44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEu''@;'; put 'put ''MzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYu''@;'; put 'put ''ODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44''@;'; put 'put ''MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcu''@;'; put 'put ''MjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4w''@;'; put 'put ''Ny41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjYuODUsMS4xNFoiLz4nKSxiLkNsclNoYXBlVGFza3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs''@;'; put 'put ''MSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43''@;'; put 'put ''NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwy''@;'; put 'put ''LjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAt''@;'; put 'put ''Ny43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4x''@;'; put 'put ''OSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEu''@;'; put 'put ''NDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41''@;'; put 'put ''N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAs''@;'; put 'put ''MCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlB''@;'; put 'put ''MS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQt''@;'; put 'put ''NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgs''@;'; put 'put ''MS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3''@;'; put 'put ''aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwy''@;'; put 'put ''LjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEu''@;'; put 'put ''NywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVGbGFnPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs''@;'; put 'put ''MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs''@;'; put 'put ''MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksYi5DbHJTaGFwZUluYm94PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUhlYXJ0''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh''@;'; put 'put ''OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs''@;'; put 'put ''OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww''@;'; put 'put ''LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z''@;'; put 'put ''LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt''@;'; put 'put ''NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y''@;'; put 'put ''Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42''@;'; put 'put ''OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu''@;'; put 'put ''OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs''@;'; put 'put ''Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0''@;'; put 'put ''LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu''@;'; put 'put ''MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVUYWxrQnVi''@;'; put 'put ''Ymxlcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy''@;'; put 'put ''Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEs''@;'; put 'put ''MCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCww''@;'; put 'put ''LDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwx''@;'; put 'put ''LDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3''@;'; put 'put ''LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2''@;'; put 'put ''LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTct''@;'; put 'put ''LjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43Nywy''@;'; put 'put ''Ljc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAs''@;'; put 'put ''MC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj''@;'; put 'put ''LTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43''@;'; put 'put ''M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAu''@;'; put 'put ''NWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAs''@;'; put 'put ''MC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTgu''@;'; put 'put ''ODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2''@;'; put 'put ''LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0t''@;'; put 'put ''My4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2''@;'; put 'put ''LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03''@;'; put 'put ''LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZVBpY3R1cmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45Miwx''@;'; put 'put ''NFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEs''@;'; put 'put ''MEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMs''@;'; put 'put ''M0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywz''@;'; put 'put ''LDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZUhhcHB5RmFjZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs''@;'; put 'put ''MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh''@;'; put 'put ''MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZVNhZEZhY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx''@;'; put 'put ''LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs''@;'; put 'put ''MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs''@;'; put 'put ''MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlVGh1bWJzVXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w''@;'; put 'put ''OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku''@;'; put 'put ''MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs''@;'; put 'put ''MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGh1bWJzRG93bj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy''@;'; put 'put ''M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43''@;'; put 'put ''NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw''@;'; put 'put ''Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPicpLGIuQ2xyU2hhcGVDcm93bj0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYu''@;'; put 'put ''NzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwx''@;'; put 'put ''LDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwx''@;'; put 'put ''LDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4w''@;'; put 'put ''OSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIg''@;'; put 'put ''cng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2''@;'; put 'put ''LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEu''@;'; put 'put ''MzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCww''@;'; put 'put ''LTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwx''@;'; put 'put ''LDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4''@;'; put 'put ''LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c''@;'; put 'put ''biAgJyksYi5DbHJTaGFwZUhhc2h0YWc9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt''@;'; put 'put ''MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM''@;'; put 'put ''MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44''@;'; put 'put ''M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww''@;'; put 'put ''LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh''@;'; put 'put ''MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksYi5Tb2NpYWxTaGFwZXM9e2Nyb3du''@;'; put 'put ''OmIuQ2xyU2hhcGVDcm93bixzaGFyZTpiLkNsclNoYXBlU2hhcmUsc3RhcjpiLkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjpiLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6Yi5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOmIuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpOLkNsclNoYXBl''@;'; put 'put ''Q2FsZW5kYXIsZXZlbnQ6Ti5DbHJTaGFwZUV2ZW50LHRhc2tzOmIuQ2xyU2hhcGVUYXNrcyxmbGFnOmIuQ2xyU2hhcGVGbGFnLGluYm94OmIuQ2xyU2hhcGVJbmJveCxoYXNodGFnOmIuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OmIuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpiLkNsclNo''@;'; put 'put ''YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6Yi5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Yi5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpiLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Yi5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpiLkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpiLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpiLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpiLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs''@;'; put 'put ''Xy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlNvY2lh''@;'; put 'put ''bFNoYXBlcywiZGF0ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLlNvY2lhbFNoYXBlcyl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90''@;'; put 'put ''ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSixiLEQpeyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksYi5DbHJTaGFwZVZNV0FwcD1iLkNsclNoYXBlVk09Yi5DbHJTaGFwZVJvdXRlcj1iLkNsclNoYXBlTmV0d29ya1N3aXRjaD1iLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWIuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9''@;'; put 'put ''Yi5DbHJTaGFwZVRhYmxldD1iLkNsclNoYXBlTW9iaWxlPWIuQ2xyU2hhcGVCYXR0ZXJ5PWIuQ2xyU2hhcGVBcHBsaWNhdGlvbj1iLkNsclNoYXBlQ29kZT1iLkNsclNoYXBlVGVybWluYWw9Yi5DbHJTaGFwZURpc3BsYXk9Yi5DbHJTaGFwZUNvbXB1dGVyPWIuQ2xyU2hhcGVGbG9wcHk9Yi5D''@;'; put 'put ''bHJTaGFwZVBsdWdpbj1iLkNsclNoYXBlRG93bmxvYWRDbG91ZD1iLkNsclNoYXBlVXBsb2FkQ2xvdWQ9Yi5DbHJTaGFwZUV4cG9ydD1iLkNsclNoYXBlSW1wb3J0PWIuQ2xyU2hhcGVTaGllbGRYPWIuQ2xyU2hhcGVTaGllbGQ9Yi5DbHJTaGFwZVNoaWVsZENoZWNrPWIuQ2xyU2hhcGVSZXNv''@;'; put 'put ''dXJjZVBvb2w9Yi5DbHJTaGFwZURhdGFDbHVzdGVyPWIuQ2xyU2hhcGVNZW1vcnk9Yi5DbHJTaGFwZUNQVT1iLkNsclNoYXBlQnVpbGRpbmc9Yi5DbHJTaGFwZUFwcGxpY2F0aW9ucz1iLkNsclNoYXBlQ2x1c3Rlcj1iLkNsclNoYXBlU3RvcmFnZT1iLkNsclNoYXBlSG9zdD1iLkNsclNoYXBl''@;'; put 'put ''RGFzaGJvYXJkPWIuQ2xyU2hhcGVNb3VzZT1iLkNsclNoYXBlS2V5Ym9hcmQ9Yi5DbHJTaGFwZURldmljZXM9Yi5DbHJTaGFwZUJhY2t1cD1iLkNsclNoYXBlQmFja3VwUmVzdG9yZT1iLkNsclNoYXBlSGFyZERpc2s9Yi5DbHJTaGFwZVJhY2tTZXJ2ZXI9Yi5DbHJTaGFwZVdpZmk9Yi5DbHJT''@;'; put 'put ''aGFwZUJ1bmRsZT1iLkNsclNoYXBlQmxvY2tzR3JvdXA9Yi5DbHJTaGFwZUJsb2NrPWIuQ2xyU2hhcGVMYXllcnM9Yi5DbHJTaGFwZVVuaW5zdGFsbD1iLkNsclNoYXBlSW5zdGFsbD1iLkNsclNoYXBlTm9XaWZpPWIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9Yi5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''PXZvaWQgMCxiLlRlY2hub2xvZ3lTaGFwZXM9Yi5DbHJTaGFwZUZpbGVTaGFyZTI9Yi5DbHJTaGFwZUNpQ2Q9Yi5DbHJTaGFwZUFuaW1hdGlvbj1iLkNsclNoYXBlVGFwZURyaXZlPWIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9Yi5DbHJDb250cm9sTHVuPWIuQ2xyU2hhcGVQb2Q9Yi5DbHJTaGFw''@;'; put 'put ''ZU5vZGU9Yi5DbHJTaGFwZU5hbWVzcGFjZT1iLkNsclNoYXBlTm9kZXM9Yi5DbHJTaGFwZU5vZGVHcm91cD1iLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9Yi5DbHJTaGFwZUhvc3RHcm91cD1iLkNsclNoYXBlU3F1aWQ9Yi5DbHJTaGFwZUNhcGFjaXRvcj1iLkNsclNoYXBlUmVzaXN0b3I9Yi5D''@;'; put 'put ''bHJTaGFwZUluZHVjdG9yPWIuQ2xyU2hhcGVSYWRhcj1iLkNsclNoYXBlVXNiPWIuQ2xyU2hhcGVRckNvZGU9Yi5DbHJTaGFwZUZpbGVTaGFyZT1iLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWIuQ2xyU2hhcGVDb250YWluZXI9Yi5DbHJTaGFwZUNkRHZkPWIuQ2xyU2hhcGVCYXJDb2RlPWIu''@;'; put 'put ''Q2xyU2hhcGVBdG9tPWIuQ2xyU2hhcGVBc3NpZ25Vc2VyPWIuQ2xyU2hhcGVQcm9jZXNzT25WTT1iLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPWIuQ2xyU2hhcGVCbHVldG9vdGg9Yi5DbHJTaGFwZVNTRD1iLkNsclNoYXBlTlZNZT1iLkNsclNoYXBlSGFyZERyaXZlRGlza3M9Yi5DbHJTaGFwZUhh''@;'; put 'put ''cmREcml2ZT1iLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1iLkNsclNoYXBlRmxhc2s9Yi5DbHJTaGFwZUhlbGl4PWIuQ2xyU2hhcGVEZXBsb3k9Yi5DbHJTaGFwZUNsb3VkVHJhZmZpYz1iLkNsclNoYXBlQ2xvdWRTY2FsZT1iLkNsclNoYXBlQ2xvdWROZXR3b3JrPWIuQ2xyU2hhcGVVbmxpbms9''@;'; put 'put ''Yi5DbHJTaGFwZUxpbms9Yi5DbHJTaGFwZURpc2Nvbm5lY3Q9Yi5DbHJTaGFwZUNvbm5lY3Q9Yi5DbHJTaGFwZVVuYXJjaGl2ZT1iLkNsclNoYXBlQXJjaGl2ZT1iLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi''@;'; put 'put ''Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu''@;'; put 'put ''MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w''@;'; put 'put ''OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z''@;'; put 'put ''N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x''@;'; put 'put ''MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLGIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds''@;'; put 'put ''NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu''@;'; put 'put ''ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5''@;'; put 'put ''LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz''@;'; put 'put ''My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGIuQ2xyU2hhcGVO''@;'; put 'put ''b1dpZmk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTIt''@;'; put 'put ''MS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEs''@;'; put 'put ''MzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0''@;'; put 'put ''LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41''@;'; put 'put ''MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkEx''@;'; put 'put ''LjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwx''@;'; put 'put ''Mi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4''@;'; put 'put ''LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5''@;'; put 'put ''LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0x''@;'; put 'put ''LjQxLTI2LTI2WiIvPlxuJyksYi5DbHJTaGFwZUluc3RhbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI''@;'; put 'put ''NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3''@;'; put 'put ''LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs''@;'; put 'put ''MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZVVuaW5zdGFsbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls''@;'; put 'put ''NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww''@;'; put 'put ''LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB''@;'; put 'put ''MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44''@;'; put 'put ''N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIvPlxuJyksYi5DbHJTaGFwZUxheWVycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs''@;'; put 'put ''MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx''@;'; put 'put ''LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs''@;'; put 'put ''MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0''@;'; put 'put ''LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGIuQ2xyU2hhcGVCbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEt''@;'; put 'put ''NS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4''@;'; put 'put ''LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEs''@;'; put 'put ''NS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEu''@;'; put 'put ''NDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; put 'put ''MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAs''@;'; put 'put ''MTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4z''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4w''@;'; put 'put ''OC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41''@;'; put 'put ''OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex''@;'; put 'put ''LDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4w''@;'; put 'put ''OCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYs''@;'; put 'put ''MTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4x''@;'; put 'put ''MSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2''@;'; put 'put ''LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwt''@;'; put 'put ''Ni45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1''@;'; put 'put ''LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTgu''@;'; put 'put ''NzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1''@;'; put 'put ''LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4y''@;'; put 'put ''NmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgt''@;'; put 'put ''Mi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEs''@;'; put 'put ''MCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwz''@;'; put 'put ''LjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2''@;'; put 'put ''Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCww''@;'; put 'put ''LDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5''@;'; put 'put ''LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu''@;'; put 'put ''NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUEx''@;'; put 'put ''LjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4''@;'; put 'put ''TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAt''@;'; put 'put ''LjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1''@;'; put 'put ''LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIu''@;'; put 'put ''Q2xyU2hhcGVCdW5kbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42''@;'; put 'put ''LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu''@;'; put 'put ''MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx''@;'; put 'put ''LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2''@;'; put 'put ''LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxiLkNsclNoYXBlV2lmaT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4''@;'; put 'put ''LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43''@;'; put 'put ''MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y''@;'; put 'put ''OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx''@;'; put 'put ''LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww''@;'; put 'put ''LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksYi5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lk''@;'; put 'put ''dGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1''@;'; put 'put ''LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4w''@;'; put 'put ''Ny0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5''@;'; put 'put ''PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2''@;'; put 'put ''VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEw''@;'; put 'put ''VjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBI''@;'; put 'put ''MTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUy''@;'; put 'put ''LDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2''@;'; put 'put ''MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGIuQ2xyU2hhcGVIYXJkRGlzaz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0u''@;'; put 'put ''NTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4''@;'; put 'put ''Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIg''@;'; put 'put ''d2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBI''@;'; put 'put ''MzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxiLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg''@;'; put 'put ''eT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcu''@;'; put 'put ''MDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlh''@;'; put 'put ''MSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwx''@;'; put 'put ''NEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs''@;'; put 'put ''MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwx''@;'; put 'put ''LDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMu''@;'; put 'put ''NjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUy''@;'; put 'put ''TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40Niww''@;'; put 'put ''LDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3''@;'; put 'put ''LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksYi5DbHJTaGFwZUJhY2t1cD0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYi''@;'; put 'put ''IHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwx''@;'; put 'put ''NlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMx''@;'; put 'put ''LDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzND''@;'; put 'put ''MzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwz''@;'; put 'put ''MS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIy''@;'; put 'put ''LjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwx''@;'; put 'put ''NCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3''@;'; put 'put ''LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45Miww''@;'; put 'put ''LDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3''@;'; put 'put ''LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjky''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcs''@;'; put 'put ''MjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksYi5DbHJTaGFwZURldmljZXM9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW''@;'; put 'put ''MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy''@;'; put 'put ''LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGIuQ2xyU2hhcGVLZXlib2FyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIy''@;'; put 'put ''MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2Mkgx''@;'; put 'put ''MVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxiLkNsclNo''@;'; put 'put ''YXBlTW91c2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy''@;'; put 'put ''NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs''@;'; put 'put ''MCwwLDEsMi42LDBaIi8+XG4nKSxiLkNsclNoYXBlRGFzaGJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2''@;'; put 'put ''LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4''@;'; put 'put ''LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1Ljky''@;'; put 'put ''LTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIu''@;'; put 'put ''MDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40''@;'; put 'put ''Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40''@;'; put 'put ''NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJs''@;'; put 'put ''NS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYz''@;'; put 'put ''LDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMu''@;'; put 'put ''NUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01''@;'; put 'put ''LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZUhvc3Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy''@;'; put 'put ''LjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwy''@;'; put 'put ''LjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMw''@;'; put 'put ''LTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4''@;'; put 'put ''LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhj''@;'; put 'put ''MC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEu''@;'; put 'put ''MiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9''@;'; put 'put ''IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgx''@;'; put 'put ''MFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgs''@;'; put 'put ''Mi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43''@;'; put 'put ''LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAu''@;'; put 'put ''MSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgs''@;'; put 'put ''MzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZVN0b3JhZ2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUu''@;'; put 'put ''MDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAs''@;'; put 'put ''MCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYs''@;'; put 'put ''MCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDks''@;'; put 'put ''MTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1''@;'; put 'put ''LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwx''@;'; put 'put ''LjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4x''@;'; put 'put ''My0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01''@;'; put 'put ''LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMyww''@;'; put 'put ''LDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1''@;'; put 'put ''LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43''@;'; put 'put ''NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMs''@;'; put 'put ''Ni43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5''@;'; put 'put ''VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40''@;'; put 'put ''M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkx''@;'; put 'put ''TDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZh''@;'; put 'put ''Ny40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUu''@;'; put 'put ''MjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2''@;'; put 'put ''LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxiLkNsclNoYXBlQ2x1c3Rlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx''@;'; put 'put ''LjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEu''@;'; put 'put ''NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODls''@;'; put 'put ''LjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEu''@;'; put 'put ''NjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAz''@;'; put 'put ''MiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhI''@;'; put 'put ''NC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgz''@;'; put 'put ''M1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwx''@;'; put 'put ''OCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2''@;'; put 'put ''LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAs''@;'; put 'put ''MTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxwLmNsckljb25TVkcpKCc8cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1''@;'; put 'put ''IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAx''@;'; put 'put ''MCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAz''@;'; put 'put ''MiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5''@;'; put 'put ''IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAx''@;'; put 'put ''NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTks''@;'; put 'put ''OEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu''@;'; put 'put ''NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy''@;'; put 'put ''NiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhl''@;'; put 'put ''aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDku''@;'; put 'put ''ODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIg''@;'; put 'put ''aGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQnVpbGRpbmc9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''NS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1Yy''@;'; put 'put ''OEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYx''@;'; put 'put ''OGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYz''@;'; put 'put ''MGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlpt''@;'; put 'put ''MC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00''@;'; put 'put ''Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMTho''@;'; put 'put ''MlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4''@;'; put 'put ''aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwz''@;'; put 'put ''SDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVI''@;'; put 'put ''MTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUs''@;'; put 'put ''Ny41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhW''@;'; put 'put ''MzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTku''@;'; put 'put ''ODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNQVT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu''@;'; put 'put ''NUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEu''@;'; put 'put ''NkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZI''@;'; put 'put ''NnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEs''@;'; put 'put ''OC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwx''@;'; put 'put ''LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAs''@;'; put 'put ''MjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFB''@;'; put 'put ''LjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu''@;'; put 'put ''NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1''@;'; put 'put ''LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42''@;'; put 'put ''N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIu''@;'; put 'put ''MmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZI''@;'; put 'put ''OC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2''@;'; put 'put ''Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0''@;'; put 'put ''LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44''@;'; put 'put ''LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4x''@;'; put 'put ''LDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhh''@;'; put 'put ''LjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu''@;'; put 'put ''OCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTWVtb3J5PSgwLHAuY2xySWNvblNWRykoJzxyZWN0''@;'; put 'put ''IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdp''@;'; put 'put ''ZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41Nmwx''@;'; put 'put ''LjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIg''@;'; put 'put ''eT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJB''@;'; put 'put ''Ny40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4''@;'; put 'put ''LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRI''@;'; put 'put ''NHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD''@;'; put 'put ''MjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0''@;'; put 'put ''LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1''@;'; put 'put ''LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMs''@;'; put 'put ''MCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUu''@;'; put 'put ''NCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwx''@;'; put 'put ''OC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYu''@;'; put 'put ''MzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2''@;'; put 'put ''LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41''@;'; put 'put ''NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQs''@;'; put 'put ''NC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1''@;'; put 'put ''LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywx''@;'; put 'put ''Ni4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIu''@;'; put 'put ''NjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcs''@;'; put 'put ''OS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQu''@;'; put 'put ''MzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAu''@;'; put 'put ''MjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4''@;'; put 'put ''VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4''@;'; put 'put ''LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSww''@;'; put 'put ''LDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44''@;'; put 'put ''Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45''@;'; put 'put ''LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3''@;'; put 'put ''LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQu''@;'; put 'put ''NSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1''@;'; put 'put ''LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45''@;'; put 'put ''MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUs''@;'; put 'put ''MTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4''@;'; put 'put ''LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45''@;'; put 'put ''NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2''@;'; put 'put ''LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45''@;'; put 'put ''QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1Ljkx''@;'; put 'put ''LDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3''@;'; put 'put ''LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x''@;'; put 'put ''Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4''@;'; put 'put ''LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww''@;'; put 'put ''LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41''@;'; put 'put ''NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0''@;'; put 'put ''LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42Niwx''@;'; put 'put ''OC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIt''@;'; put 'put ''Myw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0x''@;'; put 'put ''Mi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz''@;'; put 'put ''LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0''@;'; put 'put ''Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUs''@;'; put 'put ''MCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0''@;'; put 'put ''YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4z''@;'; put 'put ''NC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlU2hpZWxkWD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5''@;'; put 'put ''LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww''@;'; put 'put ''LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy''@;'; put 'put ''LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx''@;'; put 'put ''LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx''@;'; put 'put ''My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40''@;'; put 'put ''LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlSW1wb3J0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3''@;'; put 'put ''TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEu''@;'; put 'put ''NDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCww''@;'; put 'put ''LDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJI''@;'; put 'put ''MTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAs''@;'; put 'put ''Mkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFw''@;'; put 'put ''ZUV4cG9ydD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAt''@;'; put 'put ''MS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2''@;'; put 'put ''LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEw''@;'; put 'put ''Ljg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIs''@;'; put 'put ''MTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEs''@;'; put 'put ''MCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTls''@;'; put 'put ''LTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIy''@;'; put 'put ''Ljc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEw''@;'; put 'put ''Ljc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwy''@;'; put 'put ''MS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwy''@;'; put 'put ''LjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0u''@;'; put 'put ''NjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1''@;'; put 'put ''QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCww''@;'; put 'put ''LDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUEx''@;'; put 'put ''LDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcu''@;'; put 'put ''NDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; put 'put ''LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZI''@;'; put 'put ''MjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEs''@;'; put 'put ''MC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEu''@;'; put 'put ''MjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDEx''@;'; put 'put ''LDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYu''@;'; put 'put ''MzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs''@;'; put 'put ''MCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQt''@;'; put 'put ''MTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVQbHVnaW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMs''@;'; put 'put ''MCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwz''@;'; put 'put ''Mi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41''@;'; put 'put ''OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2''@;'; put 'put ''aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4x''@;'; put 'put ''NSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRh''@;'; put 'put ''MiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAs''@;'; put 'put ''MCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAs''@;'; put 'put ''MSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAnKSxiLkNsclNoYXBlRmxvcHB5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJh''@;'; put 'put ''MiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwz''@;'; put 'put ''LjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCww''@;'; put 'put ''LDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3''@;'; put 'put ''LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVa''@;'; put 'put ''TTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42Nyww''@;'; put 'put ''LDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDb21wdXRlcj0oMCxwLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy''@;'; put 'put ''NC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQs''@;'; put 'put ''Ni41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgz''@;'; put 'put ''LjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIu''@;'; put 'put ''NiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42''@;'; put 'put ''NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3''@;'; put 'put ''LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUs''@;'; put 'put ''MjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURpc3BsYXk9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwx''@;'; put 'put ''LDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRW''@;'; put 'put ''MjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEu''@;'; put 'put ''NSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4x''@;'; put 'put ''NiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEz''@;'; put 'put ''LjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45''@;'; put 'put ''MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAs''@;'; put 'put ''MCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs''@;'; put 'put ''MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwy''@;'; put 'put ''LDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYs''@;'; put 'put ''MzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41''@;'; put 'put ''MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEz''@;'; put 'put ''LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVRlcm1pbmFsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI''@;'; put 'put ''MzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5''@;'; put 'put ''PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4''@;'; put 'put ''IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTks''@;'; put 'put ''OS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIu''@;'; put 'put ''MzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYy''@;'; put 'put ''LjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5''@;'; put 'put ''LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu''@;'; put 'put ''MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdI''@;'; put 'put ''MjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02''@;'; put 'put ''LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNvZGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEs''@;'; put 'put ''MSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5Ljgz''@;'; put 'put ''YS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAs''@;'; put 'put ''MS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42''@;'; put 'put ''NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAs''@;'; put 'put ''MCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXBwbGljYXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy''@;'; put 'put ''djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCYXR0ZXJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAs''@;'; put 'put ''MCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41''@;'; put 'put ''OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4y''@;'; put 'put ''LDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs''@;'; put 'put ''MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIu''@;'; put 'put ''MDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1''@;'; put 'put ''LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2''@;'; put 'put ''YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU1vYmlsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs''@;'; put 'put ''MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlVGFibGV0PSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAnKSxiLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMz''@;'; put 'put ''LDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41''@;'; put 'put ''OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0''@;'; put 'put ''LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41''@;'; put 'put ''MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4z''@;'; put 'put ''NCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCww''@;'; put 'put ''LDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSww''@;'; put 'put ''LDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYs''@;'; put 'put ''MTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMs''@;'; put 'put ''Mi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44''@;'; put 'put ''OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3''@;'; put 'put ''LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYu''@;'; put 'put ''OSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwx''@;'; put 'put ''MC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEs''@;'; put 'put ''MTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwx''@;'; put 'put ''LDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEu''@;'; put 'put ''OTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjct''@;'; put 'put ''LjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTIt''@;'; put 'put ''LjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdj''@;'; put 'put ''MCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0''@;'; put 'put ''LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAs''@;'; put 'put ''MS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAs''@;'; put 'put ''MCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIs''@;'; put 'put ''OS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcu''@;'; put 'put ''NDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYu''@;'; put 'put ''OTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEy''@;'; put 'put ''LDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwx''@;'; put 'put ''LjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwu''@;'; put 'put ''MzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCww''@;'; put 'put ''LDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0z''@;'; put 'put ''LjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgt''@;'; put 'put ''LjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEy''@;'; put 'put ''LDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCww''@;'; put 'put ''LDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIz''@;'; put 'put ''Yy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAs''@;'; put 'put ''MC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIu''@;'; put 'put ''NzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0''@;'; put 'put ''LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41''@;'; put 'put ''MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4x''@;'; put 'put ''Mi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43''@;'; put 'put ''Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs''@;'; put 'put ''MTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0''@;'; put 'put ''LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTks''@;'; put 'put ''MCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCww''@;'; put 'put ''LDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05''@;'; put 'put ''LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4x''@;'; put 'put ''NCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAs''@;'; put 'put ''MC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWEx''@;'; put 'put ''LjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYy''@;'; put 'put ''LS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAs''@;'; put 'put ''MSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4y''@;'; put 'put ''Mi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTkt''@;'; put 'put ''MS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAs''@;'; put 'put ''MCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0u''@;'; put 'put ''MzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1''@;'; put 'put ''LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgt''@;'; put 'put ''Ny4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4y''@;'; put 'put ''YzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwx''@;'; put 'put ''LDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUx''@;'; put 'put ''LS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcs''@;'; put 'put ''MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0z''@;'; put 'put ''MiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdp''@;'; put 'put ''ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0''@;'; put 'put ''PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0i''@;'; put 'put ''MjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3''@;'; put 'put ''LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwx''@;'; put 'put ''OC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIx''@;'; put 'put ''LjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIz''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDgu''@;'; put 'put ''NDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAs''@;'; put 'put ''MjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5''@;'; put 'put ''Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww''@;'; put 'put ''aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEz''@;'; put 'put ''LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiww''@;'; put 'put ''LDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVSb3V0ZXI9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40Mkwz''@;'; put 'put ''NCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwx''@;'; put 'put ''NC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjgu''@;'; put 'put ''OCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjEx''@;'; put 'put ''bDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4x''@;'; put 'put ''NCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00''@;'; put 'put ''LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwx''@;'; put 'put ''LTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjgu''@;'; put 'put ''OCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44''@;'; put 'put ''LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIs''@;'; put 'put ''Mi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4''@;'; put 'put ''LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAg''@;'; put 'put ''JyksYi5DbHJTaGFwZVZNPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiww''@;'; put 'put ''LDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMu''@;'; put 'put ''NTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUu''@;'; put 'put ''NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZI''@;'; put 'put ''MjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMu''@;'; put 'put ''NjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEu''@;'; put 'put ''NnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVWTVdBcHA9KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy''@;'; put 'put ''OCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0''@;'; put 'put ''IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg''@;'; put 'put ''ICcpLGIuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIu''@;'; put 'put ''MzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0i''@;'; put 'put ''MTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2''@;'; put 'put ''LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz''@;'; put 'put ''LjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdo''@;'; put 'put ''dD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2''@;'; put 'put ''LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43''@;'; put 'put ''OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy''@;'; put 'put ''LDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4z''@;'; put 'put ''NywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwz''@;'; put 'put ''LjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYs''@;'; put 'put ''MTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00''@;'; put 'put ''LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQXJjaGl2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs''@;'; put 'put ''MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs''@;'; put 'put ''MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW''@;'; put 'put ''M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42''@;'; put 'put ''NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy''@;'; put 'put ''czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs''@;'; put 'put ''MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVbmFyY2hpdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx''@;'; put 'put ''MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40''@;'; put 'put ''MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ29ubmVjdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs''@;'; put 'put ''MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45''@;'; put 'put ''NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx''@;'; put 'put ''LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt''@;'; put 'put ''NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs''@;'; put 'put ''MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2''@;'; put 'put ''LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x''@;'; put 'put ''NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2''@;'; put 'put ''Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVMaW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx''@;'; put 'put ''LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45''@;'; put 'put ''MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu''@;'; put 'put ''ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x''@;'; put 'put ''LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''JyksYi5DbHJTaGFwZVVubGluaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01''@;'; put 'put ''LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs''@;'; put 'put ''NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBl''@;'; put 'put ''Q2xvdWROZXR3b3JrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41''@;'; put 'put ''OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNsb3VkU2NhbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz''@;'; put 'put ''LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy''@;'; put 'put ''LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI''@;'; put 'put ''MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4''@;'; put 'put ''LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu''@;'; put 'put ''ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y''@;'; put 'put ''NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4''@;'; put 'put ''LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3''@;'; put 'put ''QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURlcGxveT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB''@;'; put 'put ''MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3''@;'; put 'put ''LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUhlbGl4PSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwy''@;'; put 'put ''MS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwx''@;'; put 'put ''LTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIs''@;'; put 'put ''MS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAs''@;'; put 'put ''MCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1''@;'; put 'put ''LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcp''@;'; put 'put ''LGIuQ2xyU2hhcGVGbGFzaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz''@;'; put 'put ''NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w''@;'; put 'put ''NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM''@;'; put 'put ''NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu''@;'; put 'put ''NzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJh''@;'; put 'put ''MTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYs''@;'; put 'put ''MCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2''@;'; put 'put ''LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCww''@;'; put 'put ''LDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYs''@;'; put 'put ''MCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAs''@;'; put 'put ''MCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4w''@;'; put 'put ''N2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNyww''@;'; put 'put ''LDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4''@;'; put 'put ''LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIs''@;'; put 'put ''MzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAs''@;'; put 'put ''MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUhhcmREcml2ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIx''@;'; put 'put ''LjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEu''@;'; put 'put ''ODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCww''@;'; put 'put ''LDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAs''@;'; put 'put ''MC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSww''@;'; put 'put ''LDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4z''@;'; put 'put ''MSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhB''@;'; put 'put ''OS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYs''@;'; put 'put ''MTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43''@;'; put 'put ''NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZB''@;'; put 'put ''MS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''MTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwy''@;'; put 'put ''My42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMs''@;'; put 'put ''NC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEs''@;'; put 'put ''MCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1''@;'; put 'put ''Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDku''@;'; put 'put ''NzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYy''@;'; put 'put ''LDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4''@;'; put 'put ''LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4x''@;'; put 'put ''M2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44''@;'; put 'put ''OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVOVk1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI''@;'; put 'put ''MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs''@;'; put 'put ''MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNTRD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjku''@;'; put 'put ''ODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEu''@;'; put 'put ''MDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIw''@;'; put 'put ''LjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIu''@;'; put 'put ''MzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEu''@;'; put 'put ''MjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0u''@;'; put 'put ''OTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43''@;'; put 'put ''Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44''@;'; put 'put ''OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIu''@;'; put 'put ''MjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwx''@;'; put 'put ''LDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVCbHVldG9vdGg9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs''@;'; put 'put ''MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3''@;'; put 'put ''LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW''@;'; put 'put ''MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu''@;'; put 'put ''MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIu''@;'; put 'put ''Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey''@;'; put 'put ''LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z''@;'; put 'put ''LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41''@;'; put 'put ''NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUHJvY2Vzc09uVk09KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx''@;'; put 'put ''Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx''@;'; put 'put ''LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs''@;'; put 'put ''MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh''@;'; put 'put ''MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1''@;'; put 'put ''LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz''@;'; put 'put ''LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx''@;'; put 'put ''Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu''@;'; put 'put ''NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww''@;'; put 'put ''LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu''@;'; put 'put ''NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVBdG9tPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy''@;'; put 'put ''LjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4x''@;'; put 'put ''Mi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjks''@;'; put 'put ''NS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5''@;'; put 'put ''LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQu''@;'; put 'put ''NjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMy''@;'; put 'put ''LjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0u''@;'; put 'put ''NDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwy''@;'; put 'put ''Mi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYu''@;'; put 'put ''ODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiww''@;'; put 'put ''LDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5''@;'; put 'put ''LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5''@;'; put 'put ''LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwy''@;'; put 'put ''NS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiww''@;'; put 'put ''LDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjIt''@;'; put 'put ''LjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5''@;'; put 'put ''LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42''@;'; put 'put ''OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIy''@;'; put 'put ''Ljg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjEx''@;'; put 'put ''KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJDb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGIuQ2xyU2hhcGVDZER2''@;'; put 'put ''ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw''@;'; put 'put ''LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x''@;'; put 'put ''MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu''@;'; put 'put ''MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB''@;'; put 'put ''OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww''@;'; put 'put ''LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ29udGFpbmVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW''@;'; put 'put ''MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu''@;'; put 'put ''OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44''@;'; put 'put ''LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks''@;'; put 'put ''MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww''@;'; put 'put ''LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu''@;'; put 'put ''MTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIu''@;'; put 'put ''NzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUt''@;'; put 'put ''MTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45''@;'; put 'put ''MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0u''@;'; put 'put ''Ny43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''MEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40''@;'; put 'put ''NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEy''@;'; put 'put ''OSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlRmlsZVNoYXJlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42''@;'; put 'put ''NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx''@;'; put 'put ''LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVFyQ29kZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww''@;'; put 'put ''LDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAs''@;'; put 'put ''MCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAy''@;'; put 'put ''OCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlVXNiPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt''@;'; put 'put ''MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs''@;'; put 'put ''MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz''@;'; put 'put ''LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2''@;'; put 'put ''Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu''@;'; put 'put ''MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo''@;'; put 'put ''NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSYWRhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku''@;'; put 'put ''NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0''@;'; put 'put ''LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0''@;'; put 'put ''YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy''@;'; put 'put ''LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLGIuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz''@;'; put 'put ''LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs''@;'; put 'put ''Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs''@;'; put 'put ''MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x''@;'; put 'put ''Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx''@;'; put 'put ''NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u''@;'; put 'put ''MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs''@;'; put 'put ''MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs''@;'; put 'put ''MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3''@;'; put 'put ''LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZUNhcGFjaXRvcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx''@;'; put 'put ''LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlU3F1aWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlSG9zdEdyb3VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB''@;'; put 'put ''MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2''@;'; put 'put ''Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz''@;'; put 'put ''MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksYi5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1''@;'; put 'put ''VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksYi5DbHJTaGFwZU5vZGVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx''@;'; put 'put ''My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45''@;'; put 'put ''NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40''@;'; put 'put ''NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x''@;'; put 'put ''VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1''@;'; put 'put ''djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVOb2Rlcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5''@;'; put 'put ''VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41''@;'; put 'put ''LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu''@;'; put 'put ''OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksYi5DbHJTaGFwZU5hbWVzcGFjZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx''@;'; put 'put ''LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku''@;'; put 'put ''NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hh''@;'; put 'put ''cGVOb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+JyksYi5DbHJTaGFwZVBvZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy''@;'; put 'put ''NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2''@;'; put 'put ''LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxiLkNsckNvbnRyb2xMdW49KDAscC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4z''@;'; put 'put ''NCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1''@;'; put 'put ''LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4''@;'; put 'put ''LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAs''@;'; put 'put ''MCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcu''@;'; put 'put ''NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41''@;'; put 'put ''MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQs''@;'; put 'put ''NC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1Yx''@;'; put 'put ''MC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0u''@;'; put 'put ''MjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40''@;'; put 'put ''Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42''@;'; put 'put ''MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEs''@;'; put 'put ''MUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjIt''@;'; put 'put ''LjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44''@;'; put 'put ''LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzks''@;'; put 'put ''MjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEs''@;'; put 'put ''MSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcu''@;'; put 'put ''ODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwu''@;'; put 'put ''NDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYy''@;'; put 'put ''NC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44Ljgs''@;'; put 'put ''MCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''OC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4''@;'; put 'put ''PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEi''@;'; put 'put ''IHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9''@;'; put 'put ''IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEu''@;'; put 'put ''MjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIs''@;'; put 'put ''MCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0w''@;'; put 'put ''LTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcu''@;'; put 'put ''NDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJI''@;'; put 'put ''MzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRW''@;'; put 'put ''MjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksYi5DbHJTaGFwZVRhcGVEcml2ZT0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUz''@;'; put 'put ''LDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQu''@;'; put 'put ''NTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx''@;'; put 'put ''LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIs''@;'; put 'put ''MCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQu''@;'; put 'put ''NTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRs''@;'; put 'put ''MS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAs''@;'; put 'put ''MCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB''@;'; put 'put ''MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww''@;'; put 'put ''LDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEt''@;'; put 'put ''MiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwx''@;'; put 'put ''LDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGIuQ2xyU2hhcGVBbmltYXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw''@;'; put 'put ''LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy''@;'; put 'put ''LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu''@;'; put 'put ''MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs''@;'; put 'put ''MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxiLkNsclNoYXBlQ2lDZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx''@;'; put 'put ''LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu''@;'; put 'put ''NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx''@;'; put 'put ''LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww''@;'; put 'put ''LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx''@;'; put 'put ''LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs''@;'; put 'put ''MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs''@;'; put 'put ''LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGIuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2''@;'; put 'put ''VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy''@;'; put 'put ''LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Yi5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpiLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpiLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6Yi5DbHJTaGFwZUlu''@;'; put 'put ''c3RhbGwsdW5pbnN0YWxsOmIuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmIuQ2xyU2hhcGVMYXllcnMsYmxvY2s6Yi5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOmIuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Yi5DbHJTaGFwZUJ1bmRsZSx3aWZpOmIuQ2xyU2hhcGVXaWZpLCJy''@;'; put 'put ''YWNrLXNlcnZlciI6Yi5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Yi5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6Yi5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmIuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpiLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpi''@;'; put 'put ''LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Yi5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpiLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6Yi5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpiLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmIuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpiLkNsclNoYXBl''@;'; put 'put ''QXBwbGljYXRpb25zLGJ1aWxkaW5nOmIuQ2xyU2hhcGVCdWlsZGluZyxjcHU6Yi5DbHJTaGFwZUNQVSxtZW1vcnk6Yi5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpiLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmIuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk''@;'; put 'put ''OmIuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Yi5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6Yi5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OmIuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmIuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6Yi5DbHJTaGFwZVVwbG9hZENs''@;'; put 'put ''b3VkLCJkb3dubG9hZC1jbG91ZCI6Yi5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmIuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5OmIuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Yi5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Yi5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6Yi5DbHJTaGFw''@;'; put 'put ''ZVRlcm1pbmFsLGNvZGU6Yi5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Yi5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6Yi5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOmIuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmIuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmIuQ2xyU2hhcGVO''@;'; put 'put ''ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmIuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpiLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Yi5DbHJTaGFwZVJvdXRlcix2bTpiLkNsclNoYXBlVk0sInZtdy1hcHAiOmIuQ2xyU2hhcGVWTVdBcHAs''@;'; put 'put ''Y2VydGlmaWNhdGU6Yi5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Yi5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmIuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpiLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmIuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6Yi5DbHJTaGFwZUxp''@;'; put 'put ''bmssdW5saW5rOmIuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmIuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjpiLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Yi5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmIuQ2xyQ29udHJv''@;'; put 'put ''bEx1bixkZXBsb3k6Yi5DbHJTaGFwZURlcGxveSxoZWxpeDpiLkNsclNoYXBlSGVsaXgsZmxhc2s6Yi5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Yi5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmIuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmIu''@;'; put 'put ''Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmIuQ2xyU2hhcGVOVk1lLHNzZDpiLkNsclNoYXBlU1NELGJsdWV0b290aDpiLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpiLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpiLkNsclNoYXBlUHJvY2Vzc09u''@;'; put 'put ''Vk0sImFzc2lnbi11c2VyIjpiLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmIuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6Yi5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Yi5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpiLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpiLkNs''@;'; put 'put ''clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpiLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpiLkNsclNoYXBlUXJDb2RlLHVzYjpiLkNsclNoYXBlVXNiLHJhZGFyOmIuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Yi5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpiLkNsclNo''@;'; put 'put ''YXBlU3F1aWQsaW5kdWN0b3I6Yi5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmIuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6Yi5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpiLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmIuQ2xyU2hhcGVO''@;'; put 'put ''b2RlR3JvdXAsbm9kZXM6Yi5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpiLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6Yi5DbHJTaGFwZU5vZGUscG9kOmIuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmIuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmIuQ2xyU2hhcGVUYXBl''@;'; put 'put ''RHJpdmUsYW5pbWF0aW9uOmIuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpiLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpiLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxfLmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKGIuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9s''@;'; put 'put ''b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNo''@;'; put 'put ''YXBlcywicmVjZWl2ZXIiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJmb2xk''@;'; put 'put ''ZXItc2hhcmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuVGV4dEVkaXRTaGFwZXM9Yi5DbHJTaGFwZVN1cGVyc2NyaXB0PWIuQ2xyU2hhcGVTdWJzY3JpcHQ9Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Yi5DbHJTaGFwZUluZGVudD1iLkNsclNoYXBlT3V0ZGVu''@;'; put 'put ''dD1iLkNsclNoYXBlSGlnaGxpZ2h0ZXI9Yi5DbHJTaGFwZVRleHRDb2xvcj1iLkNsclNoYXBlTGFuZ3VhZ2U9Yi5DbHJTaGFwZUFsaWduVG9wPWIuQ2xyU2hhcGVBbGlnbk1pZGRsZT1iLkNsclNoYXBlQWxpZ25Cb3R0b209Yi5DbHJTaGFwZVVuZGVybGluZT1iLkNsclNoYXBlVGV4dD1iLkNs''@;'; put 'put ''clNoYXBlQWxpZ25SaWdodFRleHQ9Yi5DbHJTaGFwZUJsb2NrUXVvdGU9Yi5DbHJTaGFwZVBhaW50Um9sbGVyPWIuQ2xyU2hhcGVOdW1iZXJMaXN0PWIuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PWIuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1iLkNsclNoYXBlSXRhbGljPWIuQ2xyU2hhcGVBbGlnblJp''@;'; put 'put ''Z2h0PWIuQ2xyU2hhcGVBbGlnbkxlZnQ9Yi5DbHJTaGFwZUFsaWduQ2VudGVyPWIuQ2xyU2hhcGVGb250U2l6ZT1iLkNsclNoYXBlQ2hlY2tib3hMaXN0PWIuQ2xyU2hhcGVDZW50ZXJUZXh0PWIuQ2xyU2hhcGVCdWxsZXRMaXN0PWIuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgXz1EKAovKiEg''@;'; put 'put ''Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZUJvbGQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2''@;'; put 'put ''YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx''@;'; put 'put ''OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy''@;'; put 'put ''LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJ1bGxldExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLF8uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx''@;'; put 'put ''LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5''@;'; put 'put ''LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVGb250U2l6ZT0oMCxfLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPicpLGIuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx''@;'; put 'put ''LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW''@;'; put 'put ''MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw''@;'; put 'put ''VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWxpZ25SaWdodD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy''@;'; put 'put ''LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUl0YWxpYz0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu''@;'; put 'put ''NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs''@;'; put 'put ''MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlTnVt''@;'; put 'put ''YmVyTGlzdD0oMCxfLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu''@;'; put 'put ''MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww''@;'; put 'put ''LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu''@;'; put 'put ''OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40''@;'; put 'put ''MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx''@;'; put 'put ''IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww''@;'; put 'put ''LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQmxvY2tRdW90ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs''@;'; put 'put ''MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu''@;'; put 'put ''MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs''@;'; put 'put ''MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy''@;'; put 'put ''MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZVRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1''@;'; put 'put ''LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4''@;'; put 'put ''LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy''@;'; put 'put ''Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu''@;'; put 'put ''NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3''@;'; put 'put ''LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVV''@;'; put 'put ''bmRlcmxpbmU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs''@;'; put 'put ''MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQWxpZ25Cb3R0b209KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs''@;'; put 'put ''MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww''@;'; put 'put ''LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo''@;'; put 'put ''NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUFsaWduVG9wPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww''@;'; put 'put ''LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlTGFuZ3VhZ2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww''@;'; put 'put ''LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM''@;'; put 'put ''MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo''@;'; put 'put ''NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu''@;'; put 'put ''MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x''@;'; put 'put ''LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0''@;'; put 'put ''LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVGV4dENvbG9yPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx''@;'; put 'put ''OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4''@;'; put 'put ''LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww''@;'; put 'put ''LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy''@;'; put 'put ''QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy''@;'; put 'put ''LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy''@;'; put 'put ''ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxiLkNsclNoYXBlT3V0ZGVudD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy''@;'; put 'put ''Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGIuQ2xyU2hhcGVJbmRlbnQ9KDAs''@;'; put 'put ''Xy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx''@;'; put 'put ''LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2''@;'; put 'put ''LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxiLkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5''@;'; put 'put ''YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx''@;'; put 'put ''LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5''@;'; put 'put ''LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y''@;'; put 'put ''LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx''@;'; put 'put ''LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w''@;'; put 'put ''Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2''@;'; put 'put ''Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz''@;'; put 'put ''LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''Ii8+JyksYi5DbHJTaGFwZVN1YnNjcmlwdD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x''@;'; put 'put ''NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy''@;'; put 'put ''LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs''@;'; put 'put ''Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksYi5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5''@;'; put 'put ''LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo''@;'; put 'put ''MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu''@;'; put 'put ''NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs''@;'; put 'put ''MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI''@;'; put 'put ''MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuVGV4dEVkaXRTaGFwZXM9e2JvbGQ6Yi5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpiLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6Yi5DbHJTaGFwZUNoZWNrYm94TGlz''@;'; put 'put ''dCwibnVtYmVyLWxpc3QiOmIuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOmIuQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6Yi5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpiLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0IjpiLkNsclNoYXBlQ2VudGVyVGV4dCwi''@;'; put 'put ''YWxpZ24tbGVmdC10ZXh0IjpiLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6Yi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOmIuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOmIuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Yi5D''@;'; put 'put ''bHJTaGFwZVRleHQsdW5kZXJsaW5lOmIuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Yi5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpiLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Yi5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6Yi5D''@;'; put 'put ''bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOmIuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjpiLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Yi5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpiLkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOmIuQ2xy''@;'; put 'put ''U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Yi5DbHJTaGFwZUluZGVudCxvdXRkZW50OmIuQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6Yi5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OmIuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6Yi5DbHJTaGFwZVN1cGVyc2Ny''@;'; put 'put ''aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihKLGIsRCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLlRyYXZlbFNoYXBlcz1iLkNsclNoYXBlT25I''@;'; put 'put ''b2xpZGF5PWIuQ2xyU2hhcGVUcmFpbGVyPWIuQ2xyU2hhcGVGZXJyeT1iLkNsclNoYXBlQ2FyYXZhbj1iLkNsclNoYXBlQ2FtcGVydmFuPWIuQ2xyU2hhcGVCb2F0PWIuQ2xyU2hhcGVCaWN5Y2xlPWIuQ2xyU2hhcGVNYXBNYXJrZXI9Yi5DbHJTaGFwZUNvbXBhc3M9Yi5DbHJTaGFwZU1hcD1i''@;'; put 'put ''LkNsclNoYXBlQ2FyPWIuQ2xyU2hhcGVBaXJwbGFuZT1iLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciBfPUQoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUQoCi8qISAuLi91dGls''@;'; put 'put ''cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlVHJ1Y2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx''@;'; put 'put ''MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww''@;'; put 'put ''SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs''@;'; put 'put ''MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs''@;'; put 'put ''MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs''@;'; put 'put ''MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JyksYi5DbHJTaGFwZUFp''@;'; put 'put ''cnBsYW5lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu''@;'; put 'put ''ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y''@;'; put 'put ''LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2''@;'; put 'put ''Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx''@;'; put 'put ''LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JyksYi5DbHJTaGFwZUNhcj0oMCxwLmNscklj''@;'; put 'put ''b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y''@;'; put 'put ''Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3''@;'; put 'put ''LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh''@;'; put 'put ''OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww''@;'; put 'put ''LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x''@;'; put 'put ''MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx''@;'; put 'put ''NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40''@;'; put 'put ''LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLGIuQ2xyU2hhcGVNYXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z''@;'; put 'put ''djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9''@;'; put 'put ''IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz''@;'; put 'put ''aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSxiLkNsclNoYXBlQ29tcGFzcz0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW''@;'; put 'put ''NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5''@;'; put 'put ''LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''TWFwTWFya2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu''@;'; put 'put ''NzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx''@;'; put 'put ''LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpNMjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4''@;'; put 'put ''LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTksMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMu''@;'; put 'put ''NzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTItLjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4w''@;'; put 'put ''Ni0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAsMCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAs''@;'; put 'put ''MCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1''@;'; put 'put ''LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4''@;'; put 'put ''bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42''@;'; put 'put ''MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUJpY3ljbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs''@;'; put 'put ''Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu''@;'; put 'put ''NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0''@;'; put 'put ''LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs''@;'; put 'put ''MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx''@;'; put 'put ''LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy''@;'; put 'put ''My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1''@;'; put 'put ''LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4''@;'; put 'put ''LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt''@;'; put 'put ''MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxiLkNsclNoYXBlQm9hdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks''@;'; put 'put ''MjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgtMi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMu''@;'; put 'put ''NCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40''@;'; put 'put ''LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAuNi0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4y''@;'; put 'put ''LDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEz''@;'; put 'put ''LjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYuNFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiwwLTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0x''@;'; put 'put ''LjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAu''@;'; put 'put ''OCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIuMiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5''@;'; put 'put ''LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJs''@;'; put 'put ''MC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMt''@;'; put 'put ''MS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYu''@;'; put 'put ''NGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUNhbXBlcnZhbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog''@;'; put 'put ''TTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0x''@;'; put 'put ''LjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEuNSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMy''@;'; put 'put ''NC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00''@;'; put 'put ''LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1''@;'; put 'put ''YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBk''@;'; put 'put ''PSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCwwLDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMu''@;'; put 'put ''NWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5''@;'; put 'put ''LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEz''@;'; put 'put ''IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGIuQ2xy''@;'; put 'put ''U2hhcGVDYXJhdmFuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y''@;'; put 'put ''LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41''@;'; put 'put ''SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz''@;'; put 'put ''djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y''@;'; put 'put ''di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww''@;'; put 'put ''LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo''@;'; put 'put ''OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUZlcnJ5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w''@;'; put 'put ''LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc''@;'; put 'put ''dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj''@;'; put 'put ''MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz''@;'; put 'put ''LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx''@;'; put 'put ''LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y''@;'; put 'put ''LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w''@;'; put 'put ''LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy''@;'; put 'put ''NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt''@;'; put 'put ''MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6''@;'; put 'put ''IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVHJhaWxlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42''@;'; put 'put ''LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy''@;'; put 'put ''ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt''@;'; put 'put ''MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu''@;'; put 'put ''OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs''@;'; put 'put ''MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlT25Ib2xpZGF5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs''@;'; put 'put ''Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu''@;'; put 'put ''NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu''@;'; put 'put ''NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI''@;'; put 'put ''OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx''@;'; put 'put ''LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs''@;'; put 'put ''OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz''@;'; put 'put ''LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLGIuVHJhdmVsU2hhcGVzPXt0cnVjazpiLkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6Yi5DbHJTaGFwZUFpcnBsYW5lLGNhcjpiLkNsclNoYXBlQ2FyLG1hcDpiLkNsclNoYXBlTWFwLGNvbXBhc3M6Yi5DbHJTaGFw''@;'; put 'put ''ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOmIuQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTpiLkNsclNoYXBlQmljeWNsZSxib2F0OmIuQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjpiLkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46Yi5DbHJTaGFwZUNhcmF2YW4sZmVycnk6Yi5DbHJTaGFwZUZlcnJ5''@;'; put 'put ''LHRyYWlsZXI6Yi5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOmIuQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoYi5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuVHJh''@;'; put 'put ''dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsYi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIF8ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj''@;'; put 'put ''L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEosYixEKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuY2xySWNvblNWRz12b2lkIDA7Yi5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoRil7dmFyIEg9IiI7cmV0dXJuIEYuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEgrPSJjYW4tYmFkZ2UgIiksRi5pbmRl''@;'; put 'put ''eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEgrPSJjYW4tYWxlcnQgIiksRi5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoSCs9Imhhcy1zb2xpZCAiKSwoSD8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0grJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4''@;'; put 'put ''TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz''@;'; put 'put ''NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK0YrIjwvc3ZnPiJ9''@;'; put 'put ''fX0pfSwzNjA5NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD17fTtiLnIoRCksYi5kKEQse2FycmF5QXZnOigpPT5McWUsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+SW0sYXJyYXlGbGF0dGVuOigpPT5tMmUsYXJyYXlNYXA6KCk9PmJzLGFycmF5TWF4OigpPT5JcWUs''@;'; put 'put ''YXJyYXlNaW46KCk9PlJxZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PmcyZSxhcnJheVVuaXF1ZTooKT0+djJlLGV4dGVuZEFycmF5OigpPT5sJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmMkLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PcWUsZ2V0VW5pb25PZkFy''@;'; put 'put ''cmF5czooKT0+UHFlLHBpdm90OigpPT5oRSxzdHJpbmdUb0FycmF5OigpPT51JCx0bzJkQXJyYXk6KCk9PnAyZX0pO3ZhciBfPXt9O2IucihfKSxiLmQoXyx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5TMmUsaXNEZWZpbmVkOigpPT5QYSxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+eTJl''@;'; put 'put ''LGlzVW5kZWZpbmVkOigpPT5fYyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIHA9e307Yi5yKHApLGIuZChwLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WcWUsaXNQZXJjZW50VmFsdWU6KCk9PmYkLHJhbmRvbVN0cmluZzooKT0+aCQsc2FuaXRpemU6KCk9PklPLHN0cmlwVGFnczooKT0+ZyQsc3Vi''@;'; put 'put ''c3RpdHV0ZTooKT0+cCQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgTj17fTtiLnIoTiksYi5kKE4se0hUTUxfQ0hBUkFDVEVSUzooKT0+TjJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+ZFhlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+TSQsY2xvc2VzdDooKT0+Um0sY2xv''@;'; put 'put ''c2VzdERvd246KCk9PnlFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT56NyxmYXN0SW5uZXJUZXh0OigpPT5QbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9Pk8yZSxnZXRDYXJldFBvc2l0aW9uOigpPT5TJCxnZXRDc3NUcmFuc2Zvcm06KCk9PmdYZSxnZXRGcmFtZUVsZW1l''@;'; put 'put ''bnQ6KCk9PkwyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+ajJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkIyZSxnZXRQYXJlbnQ6KCk9PlIyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PkI3LGdldFNjcm9sbExlZnQ6KCk9PnckLGdldFNjcm9sbFRvcDooKT0+T08sZ2V0U2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9PmJFLGdldFNjcm9sbGJhcldpZHRoOigpPT5mMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+ejJlLGdldFNlbGVjdGlvblRleHQ6KCk9PmZYZSxnZXRTdHlsZTooKT0+X0UsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PmFfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PkxP''@;'; put 'put ''LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+XyQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PmNYZSxoYXNDbGFzczooKT0+cG8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+VCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkUkLGhhc1plcm9IZWlnaHQ6KCk9PlYyZSxpbmRleDooKT0+''@;'; put 'put ''UDJlLGlubmVySGVpZ2h0OigpPT5vXyxpbm5lcldpZHRoOigpPT5DJCxpc0NoaWxkT2Y6KCk9PkxtLGlzRGV0YWNoZWQ6KCk9PkEkLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PlNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT52RSxpc091dHNpZGVJbnB1dDooKT0+Rk8saXNWaXNp''@;'; put 'put ''YmxlOigpPT5VNyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PmskLG1hdGNoZXNDU1NSdWxlczooKT0+dVhlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+VTJlLG9mZnNldDooKT0+VTAsb3V0ZXJIZWlnaHQ6KCk9Pnh1LG91dGVyV2lk''@;'; put 'put ''dGg6KCk9PnN1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9Pk9tLHJlbW92ZUF0dHJpYnV0ZTooKT0+ajcscmVtb3ZlQ2xhc3M6KCk9PmxvLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkQkLHJlbW92ZUV2ZW50OigpPT5oWGUscmVtb3ZlVGV4dE5v''@;'; put 'put ''ZGVzOigpPT5iJCxyZXNldENzc1RyYW5zZm9ybTooKT0+Q0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+WjJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9Pm1YZSxzZXRBdHRyaWJ1dGU6KCk9PnZvLHNldENhcmV0UG9zaXRpb246KCk9PndFLHNldE92ZXJs''@;'; put 'put ''YXlQb3NpdGlvbjooKT0+UE99KTt2YXIgdz17fTtiLnIodyksYi5kKHcse2N1cnJ5OigpPT5ZMmUsY3VycnlSaWdodDooKT0+YlhlLGRlYm91bmNlOigpPT5NRSxmYXN0Q2FsbDooKT0+SE8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+SSQscGlwZTooKT0+eVhlLHRocm90dGxlOigp''@;'; put 'put ''PT5XMmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PnZYZX0pO3ZhciBGPXt9O2IucihGKSxiLmQoRix7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT54RSxkZWVwT2JqZWN0U2l6ZTooKT0+Qk8sZGVmaW5l''@;'; put 'put ''R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9PkV1LGdldFByb3BlcnR5OigpPT4kMmUsaGFzT3duUHJvcGVydHk6KCk9PlR1LGluaGVyaXQ6KCk9PkcyZSxpc09iamVjdDooKT0+cW8saXNPYmplY3RFcXVhbDooKT0+Tk8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6''@;'; put 'put ''KCk9PlhvLHNldFByb3BlcnR5OigpPT5WT30pO3ZhciBIPXt9O2IucihIKSxiLmQoSCx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PlRFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+cTJlLGlzQ1NSOigpPT5LMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+UiQscmVxdWVzdEFuaW1hdGlvbkZy''@;'; put 'put ''YW1lOigpPT5FRX0pO3ZhciBSPXt9O2IucihSKSxiLmQoUix7aXNDaHJvbWU6KCk9PkwkLGlzQ2hyb21lV2ViS2l0OigpPT5RMmUsaXNFZGdlOigpPT50ZmUsaXNFZGdlV2ViS2l0OigpPT5fWGUsaXNGaXJlZm94OigpPT5qTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PmVmZSxpc0lPUzooKT0+TyQs''@;'; put 'put ''aXNJcGFkT1M6KCk9PlAkLGlzTGludXhPUzooKT0+d1hlLGlzTWFjT1M6KCk9PnpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PkFFLGlzV2luZG93c09TOigpPT5GJCxzZXRCcm93c2VyTWV0YTooKT0+WDJlLHNldFBsYXRmb3JtTWV0YTooKT0+SjJlfSk7dmFyIGo9e307''@;'; put 'put ''Yi5yKGopLGIuZChqLHtLRVlfQ09ERVM6KCk9PllhLGlzQ3RybEtleTooKT0+U1hlLGlzQ3RybE1ldGFLZXk6KCk9PnJmZSxpc0Z1bmN0aW9uS2V5OigpPT5IJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT5uZmV9KTt2YXIgUD17fTtiLnIoUCksYi5kKFAse2lzSW1tZWRpYXRl''@;'; put 'put ''UHJvcGFnYXRpb25TdG9wcGVkOigpPT5GbSxpc0xlZnRDbGljazooKT0+VU8saXNSaWdodENsaWNrOigpPT5IbSxpc1RvdWNoRXZlbnQ6KCk9PmlmZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5hZmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5CMn0pO3ZhciBMPXt9O2IucihMKSxiLmQo''@;'; put 'put ''TCx7X2RhdGFUb0hUTUw6KCk9PnEkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+eWZlLGluc3RhbmNlVG9IVE1MOigpPT5LJH0pO3ZhciBZPXt9O2IucihZKSxiLmQoWSx7Y2xhbXA6KCk9PmtzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+YmZlLHJhbmdlRWFjaDooKT0+R2Es''@;'; put 'put ''cmFuZ2VFYWNoUmV2ZXJzZTooKT0+WCQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT5KJH0pO3ZhciBCPXt9O2IucihCKSxiLmQoQix7Y291bnRGaXJzdFJvd0tleXM6KCk9PkZLLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5rdHQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5U''@;'; put 'put ''dHQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5BdHQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5QSyxpc0FycmF5T2ZBcnJheXM6KCk9PkUzZSxpc0FycmF5T2ZPYmplY3RzOigpPT5UM2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+RXR0LHNwcmVhZHNoZWV0Q29sdW1u''@;'; put 'put ''TGFiZWw6KCk9PmhQfSk7dmFyIFc9e307Yi5yKFcpLGIuZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT5oWCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PmRYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+ZlgsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PmhxLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+U3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+eXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9Pl9xLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT52cSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5DcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PmJxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PndxLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0JPUkRFUlM6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5UcSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PkFxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkVxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf''@;'; put 'put ''VE9QOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9Pm5xLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PnJxLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+b3EsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H''@;'; put 'put ''Uk9VUF9IRUFERVJTOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PmlxLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+c3EsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5mcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M''@;'; put 'put ''VU1OOigpPT5scSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+UnEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9Pk9xLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5xSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlhLLENPTlRFWFRN''@;'; put 'put ''RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT51cSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PklxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+RHEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PkdLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+X1AsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT5rcSxDT05URVhUTUVOVV9JVEVNU19S''@;'; put 'put ''RU1PVkVfQ09MVU1OOigpPT5RSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+SkssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PktL''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5McSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+UHEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+ZXEsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5jcSxDT05URVhUTUVOVV9JVEVNU19VTk1F''@;'; put 'put ''UkdFX0NFTExTOigpPT5kcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5WM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+c1gsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5hWCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9Pm9YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF''@;'; put 'put ''Ul9TRUFSQ0g6KCk9PmxYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PnVYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+Y1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PmlYLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo''@;'; put 'put ''KT0+cXEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+WHEsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5CcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+JHEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5zbnQsRklMVEVSU19DT05ESVRJT05T''@;'; put 'put ''X0NPTlRBSU5TOigpPT56cSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PkZxLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmpxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+TnEsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+WnEsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+V2MsRklMVEVSU19D''@;'; put 'put ''T05ESVRJT05TX05PTkU6KCk9PndQLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5VcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5IcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp''@;'; put 'put ''PT5WcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PkpxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+UXEsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+ZVgsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PnRYLEZJTFRFUlNfRElWU19GSUxU''@;'; put 'put ''RVJfQllfVkFMVUU6KCk9Pm5YLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5yWCxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+Q1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PnExLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5TUH0pO3ZhciBaPXt9O2Z1bmN0aW9u''@;'; put 'put ''IHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksST1NLnZhbHVlfWNhdGNoKEcpe3JldHVybiB2b2lkIGEoRyl9TS5kb25lP2woSSk6UHJvbWlzZS5yZXNvbHZlKEkpLnRoZW4oZCxoKX1mdW5jdGlvbiBRKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVu''@;'; put 'put ''dHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIHYoSSl7cShmLGQsaCx2LE0sIm5leHQiLEkpfWZ1bmN0aW9uIE0oSSl7cShmLGQsaCx2LE0sInRocm93IixJKX12KHZvaWQgMCl9KX19Yi5yKFopLGIuZChaLHtnZXROb3JtYWxp''@;'; put 'put ''emVkRGF0ZTooKT0+djRlfSk7bGV0IHRlPW51bGwsb2U9MTtjb25zdCBnZT1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIF9lKGMpe2NvbnN0IGw9dGU7cmV0dXJuIHRlPWMsbH1mdW5jdGlvbiB4KGMpe2lmKCghbGUoYyl8fGMuZGlydHkpJiYoYy5kaXJ0eXx8Yy5sYXN0Q2xlYW5FcG9jaCE9''@;'; put 'put ''PW9lKSl7aWYoIWMucHJvZHVjZXJNdXN0UmVjb21wdXRlKGMpJiYhbShjKSlyZXR1cm4gYy5kaXJ0eT0hMSx2b2lkKGMubGFzdENsZWFuRXBvY2g9b2UpO2MucHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShjKSxjLmRpcnR5PSExLGMubGFzdENsZWFuRXBvY2g9b2V9fWZ1bmN0aW9uIG0oYyl7d2Uo''@;'; put 'put ''Yyk7Zm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXtjb25zdCBhPWMucHJvZHVjZXJOb2RlW2xdLGQ9Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbltsXTtpZihkIT09YS52ZXJzaW9ufHwoeChhKSxkIT09YS52ZXJzaW9uKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlv''@;'; put 'put ''biBuZShjLGwpe2lmKGZ1bmN0aW9uIFVlKGMpe2MubGl2ZUNvbnN1bWVyTm9kZT8/PVtdLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM/Pz1bXX0oYyksd2UoYyksMT09PWMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgpZm9yKGxldCBkPTA7ZDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7ZCsrKW5l''@;'; put 'put ''KGMucHJvZHVjZXJOb2RlW2RdLGMucHJvZHVjZXJJbmRleE9mVGhpc1tkXSk7Y29uc3QgYT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoLTE7aWYoYy5saXZlQ29uc3VtZXJOb2RlW2xdPWMubGl2ZUNvbnN1bWVyTm9kZVthXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdPWMubGl2ZUNv''@;'; put 'put ''bnN1bWVySW5kZXhPZlRoaXNbYV0sYy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0tLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXMubGVuZ3RoLS0sbDxjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKXtjb25zdCBkPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbbF0saD1jLmxpdmVDb25zdW1l''@;'; put 'put ''ck5vZGVbbF07d2UoaCksaC5wcm9kdWNlckluZGV4T2ZUaGlzW2RdPWx9fWZ1bmN0aW9uIGxlKGMpe3JldHVybiBjLmNvbnN1bWVySXNBbHdheXNMaXZlfHwoYz8ubGl2ZUNvbnN1bWVyTm9kZT8ubGVuZ3RoPz8wKT4wfWZ1bmN0aW9uIHdlKGMpe2MucHJvZHVjZXJOb2RlPz89W10sYy5wcm9k''@;'; put 'put ''dWNlckluZGV4T2ZUaGlzPz89W10sYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbj8/PVtdfWxldCBBZT1udWxsO2Z1bmN0aW9uICRlKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIHR0KGMpe2NvbnN0IGE9YyhkPT57RXJyb3IuY2FsbChkKSxkLnN0YWNrPShuZXcgRXJy''@;'; put 'put ''b3IpLnN0YWNrfSk7cmV0dXJuIGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGF9Y29uc3QgTmU9dHQoYz0+ZnVuY3Rpb24oYSl7Yyh0aGlzKSx0aGlzLm1lc3NhZ2U9YT9gJHthLmxlbmd0aH0gZXJyb3JzIG9jY3Vy''@;'; put 'put ''cmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7YS5tYXAoKGQsaCk9PmAke2grMX0pICR7ZC50b1N0cmluZygpfWApLmpvaW4oIlxuICAiKX1gOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9YX0pO2Z1bmN0aW9uIHV0KGMsbCl7aWYoYyl7Y29uc3Qg''@;'; put 'put ''YT1jLmluZGV4T2YobCk7MDw9YSYmYy5zcGxpY2UoYSwxKX19Y2xhc3MgcXR7Y29uc3RydWN0b3IobCl7dGhpcy5pbml0aWFsVGVhcmRvd249bCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgbDtpZigh''@;'; put 'put ''dGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztpZihhKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IGYgb2YgYSlmLnJlbW92ZSh0aGlzKTtlbHNlIGEucmVtb3ZlKHRoaXMpO2NvbnN0e2luaXRpYWxU''@;'; put 'put ''ZWFyZG93bjpkfT10aGlzO2lmKCRlKGQpKXRyeXtkKCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgTmU/Zi5lcnJvcnM6W2ZdfWNvbnN0e19maW5hbGl6ZXJzOmh9PXRoaXM7aWYoaCl7dGhpcy5fZmluYWxpemVycz1udWxsO2Zvcihjb25zdCBmIG9mIGgpdHJ5e2NpKGYpfWNhdGNoKHYpe2w9''@;'; put 'put ''bD8/W10sdiBpbnN0YW5jZW9mIE5lP2w9Wy4uLmwsLi4udi5lcnJvcnNdOmwucHVzaCh2KX19aWYobCl0aHJvdyBuZXcgTmUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZCljaShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBxdCl7aWYobC5jbG9zZWR8fGwu''@;'; put 'put ''X2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09''@;'; put 'put ''PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMobCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdl''@;'; put 'put ''OmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShhKSYmdXQoYSxsKX1yZW1vdmUobCl7Y29uc3R7X2ZpbmFsaXplcnM6YX09dGhpczthJiZ1dChhLGwpLGwgaW5zdGFuY2VvZiBxdCYmbC5fcmVtb3ZlUGFyZW50KHRoaXMpfX1xdC5FTVBUWT0oKCk9Pntj''@;'; put 'put ''b25zdCBjPW5ldyBxdDtyZXR1cm4gYy5jbG9zZWQ9ITAsY30pKCk7Y29uc3QgUnQ9cXQuRU1QVFk7ZnVuY3Rpb24gUHQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBxdHx8YyYmImNsb3NlZCJpbiBjJiYkZShjLnJlbW92ZSkmJiRlKGMuYWRkKSYmJGUoYy51bnN1YnNjcmliZSl9ZnVuY3Rpb24g''@;'; put 'put ''Y2koYyl7JGUoYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBRdD17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRD''@;'; put 'put ''b250ZXh0OiExfSxzbj17c2V0VGltZW91dChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09c247cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXNuO3JldHVy''@;'; put 'put ''bihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gUmkoYyl7c24uc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09UXQ7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gaG4oKXt9Y29uc3QgZnQ9QXQo''@;'; put 'put ''IkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIEF0KGMsbCxhKXtyZXR1cm57a2luZDpjLHZhbHVlOmwsZXJyb3I6YX19bGV0IFJuPW51bGw7ZnVuY3Rpb24gc3QoYyl7aWYoUXQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hUm47aWYobCYmKFJuPXtl''@;'; put 'put ''cnJvclRocm93bjohMSxlcnJvcjpudWxsfSksYygpLGwpe2NvbnN0e2Vycm9yVGhyb3duOmEsZXJyb3I6ZH09Um47aWYoUm49bnVsbCxhKXRocm93IGR9fWVsc2UgYygpfWNsYXNzIHJpIGV4dGVuZHMgcXR7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSxsPyh0aGlz''@;'; put 'put ''LmRlc3RpbmF0aW9uPWwsUHQobCkmJmwuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPXp0fXN0YXRpYyBjcmVhdGUobCxhLGQpe3JldHVybiBuZXcgaHQobCxhLGQpfW5leHQobCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnVuY3Rpb24gV3QoYyl7cmV0dXJuIEF0KCJOIixjLHZvaWQgMCl9KGwp''@;'; put 'put ''LHRoaXMpOnRoaXMuX25leHQobCl9ZXJyb3IobCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnVuY3Rpb24gT3IoYyl7cmV0dXJuIEF0KCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9ybihmdCx0''@;'; put 'put ''aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dChsKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQobCl9''@;'; put 'put ''X2Vycm9yKGwpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGwpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19Y29uc3QgV2U9RnVuY3Rpb24ucHJvdG90''@;'; put 'put ''eXBlLmJpbmQ7ZnVuY3Rpb24gVHQoYyxsKXtyZXR1cm4gV2UuY2FsbChjLGwpfWNsYXNzIG5ye2NvbnN0cnVjdG9yKGwpe3RoaXMucGFydGlhbE9ic2VydmVyPWx9bmV4dChsKXtjb25zdHtwYXJ0aWFsT2JzZXJ2ZXI6YX09dGhpcztpZihhLm5leHQpdHJ5e2EubmV4dChsKX1jYXRjaChkKXt4''@;'; put 'put ''dChkKX19ZXJyb3IobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5lcnJvcil0cnl7YS5lcnJvcihsKX1jYXRjaChkKXt4dChkKX1lbHNlIHh0KGwpfWNvbXBsZXRlKCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmx9PXRoaXM7aWYobC5jb21wbGV0ZSl0cnl7bC5jb21wbGV0''@;'; put 'put ''ZSgpfWNhdGNoKGEpe3h0KGEpfX19Y2xhc3MgaHQgZXh0ZW5kcyByaXtjb25zdHJ1Y3RvcihsLGEsZCl7bGV0IGg7aWYoc3VwZXIoKSwkZShsKXx8IWwpaD17bmV4dDpsPz92b2lkIDAsZXJyb3I6YT8/dm9pZCAwLGNvbXBsZXRlOmQ/P3ZvaWQgMH07ZWxzZXtsZXQgZjt0aGlzJiZRdC51c2VE''@;'; put 'put ''ZXByZWNhdGVkTmV4dENvbnRleHQ/KGY9T2JqZWN0LmNyZWF0ZShsKSxmLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKCksaD17bmV4dDpsLm5leHQmJlR0KGwubmV4dCxmKSxlcnJvcjpsLmVycm9yJiZUdChsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJlR0KGwuY29t''@;'; put 'put ''cGxldGUsZil9KTpoPWx9dGhpcy5kZXN0aW5hdGlvbj1uZXcgbnIoaCl9fWZ1bmN0aW9uIHh0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24gVXQoYyl7UXQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmUm4mJihSbi5l''@;'; put 'put ''cnJvclRocm93bj0hMCxSbi5lcnJvcj1jKX0oYyk6UmkoYyl9ZnVuY3Rpb24gcm4oYyxsKXtjb25zdHtvblN0b3BwZWROb3RpZmljYXRpb246YX09UXQ7YSYmc24uc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCB6dD17Y2xvc2VkOiEwLG5leHQ6aG4sZXJyb3I6ZnVuY3Rpb24gam4oYyl7''@;'; put 'put ''dGhyb3cgY30sY29tcGxldGU6aG59LGhpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiB1bihjKXtyZXR1cm4gY31mdW5jdGlvbiBJaShjKXtyZXR1cm4gMD09PWMubGVuZ3RoP3VuOjE9PT1jLmxlbmd0aD9jWzBd''@;'; put 'put ''OmZ1bmN0aW9uKGEpe3JldHVybiBjLnJlZHVjZSgoZCxoKT0+aChkKSxhKX19bGV0IFh0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7YSYmKHRoaXMuX3N1YnNjcmliZT1hKX1saWZ0KGEpe2NvbnN0IGQ9bmV3IGM7cmV0dXJuIGQuc291cmNlPXRoaXMsZC5vcGVyYXRvcj1hLGR9c3Vi''@;'; put 'put ''c2NyaWJlKGEsZCxoKXtjb25zdCBmPWZ1bmN0aW9uIEVpKGMpe3JldHVybiBjJiZjIGluc3RhbmNlb2Ygcml8fGZ1bmN0aW9uIHVhKGMpe3JldHVybiBjJiYkZShjLm5leHQpJiYkZShjLmVycm9yKSYmJGUoYy5jb21wbGV0ZSl9KGMpJiZQdChjKX0oYSk/YTpuZXcgaHQoYSxkLGgpO3JldHVy''@;'; put 'put ''biBzdCgoKT0+e2NvbnN0e29wZXJhdG9yOnYsc291cmNlOk19PXRoaXM7Zi5hZGQodj92LmNhbGwoZixNKTpNP3RoaXMuX3N1YnNjcmliZShmKTp0aGlzLl90cnlTdWJzY3JpYmUoZikpfSksZn1fdHJ5U3Vic2NyaWJlKGEpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGEpfWNhdGNoKGQp''@;'; put 'put ''e2EuZXJyb3IoZCl9fWZvckVhY2goYSxkKXtyZXR1cm4gbmV3KGQ9ZW4oZCkpKChoLGYpPT57Y29uc3Qgdj1uZXcgaHQoe25leHQ6TT0+e3RyeXthKE0pfWNhdGNoKEkpe2YoSSksdi51bnN1YnNjcmliZSgpfX0sZXJyb3I6Zixjb21wbGV0ZTpofSk7dGhpcy5zdWJzY3JpYmUodil9KX1fc3Vi''@;'; put 'put ''c2NyaWJlKGEpe3ZhciBkO3JldHVybiBudWxsPT09KGQ9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnN1YnNjcmliZShhKX1baGldKCl7cmV0dXJuIHRoaXN9cGlwZSguLi5hKXtyZXR1cm4gSWkoYSkodGhpcyl9dG9Qcm9taXNlKGEpe3JldHVybiBuZXcoYT1lbihhKSkoKGQs''@;'; put 'put ''aCk9PntsZXQgZjt0aGlzLnN1YnNjcmliZSh2PT5mPXYsdj0+aCh2KSwoKT0+ZChmKSl9KX19cmV0dXJuIGMuY3JlYXRlPWw9Pm5ldyBjKGwpLGN9KSgpO2Z1bmN0aW9uIGVuKGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9Yz8/UXQuUHJvbWlzZSkmJnZvaWQgMCE9PWw/bDpQcm9taXNlfWNv''@;'; put 'put ''bnN0IHZyPXR0KGM9PmZ1bmN0aW9uKCl7Yyh0aGlzKSx0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSk7bGV0IFduPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBYdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5j''@;'; put 'put ''bG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChhKXtjb25zdCBkPW5ldyAkaSh0aGlzLHRoaXMpO3JldHVybiBkLm9wZXJhdG9yPWEs''@;'; put 'put ''ZH1fdGhyb3dJZkNsb3NlZCgpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyB2cn1uZXh0KGEpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhp''@;'; put 'put ''cy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93''@;'; put 'put ''bkVycm9yPWE7Y29uc3R7b2JzZXJ2ZXJzOmR9PXRoaXM7Zm9yKDtkLmxlbmd0aDspZC5zaGlmdCgpLmVycm9yKGEpfX0pfWNvbXBsZXRlKCl7c3QoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6''@;'; put 'put ''YX09dGhpcztmb3IoO2EubGVuZ3RoOylhLnNoaWZ0KCkuY29tcGxldGUoKX19KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciBhO3JldHVybihudWxs''@;'; put 'put ''PT09KGE9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCk+MH1fdHJ5U3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZShhKX1fc3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCks''@;'; put 'put ''dGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhhKSx0aGlzLl9pbm5lclN1YnNjcmliZShhKX1faW5uZXJTdWJzY3JpYmUoYSl7Y29uc3R7aGFzRXJyb3I6ZCxpc1N0b3BwZWQ6aCxvYnNlcnZlcnM6Zn09dGhpcztyZXR1cm4gZHx8aD9SdDoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGws''@;'; put 'put ''Zi5wdXNoKGEpLG5ldyBxdCgoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHV0KGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9''@;'; put 'put ''YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgWHQ7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcgJGkobCxhKSxjfSkoKTtjbGFzcyAkaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5z''@;'; put 'put ''b3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRp''@;'; put 'put ''b24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwo''@;'; put 'put ''bCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6UnR9fWNsYXNzIGVpIGV4dGVuZHMgV257Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlz''@;'; put 'put ''Ll92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3JpYmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9y''@;'; put 'put ''OmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQodGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIFFyKGMpe3JldHVybiAkZShjPy5saWZ0KX1mdW5jdGlvbiBWaShjKXtyZXR1cm4gbD0+e2lmKFFyKGwp''@;'; put 'put ''KXJldHVybiBsLmxpZnQoZnVuY3Rpb24oYSl7dHJ5e3JldHVybiBjKGEsdGhpcyl9Y2F0Y2goZCl7dGhpcy5lcnJvcihkKX19KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZSIpfX1mdW5jdGlvbiBOaShjLGwsYSxkLGgpe3JldHVy''@;'; put 'put ''biBuZXcgRGEoYyxsLGEsZCxoKX1jbGFzcyBEYSBleHRlbmRzIHJpe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsKSx0aGlzLm9uRmluYWxpemU9Zix0aGlzLnNob3VsZFVuc3Vic2NyaWJlPXYsdGhpcy5fbmV4dD1hP2Z1bmN0aW9uKE0pe3RyeXthKE0pfWNhdGNoKEkpe2wuZXJy''@;'; put 'put ''b3IoSSl9fTpzdXBlci5fbmV4dCx0aGlzLl9lcnJvcj1oP2Z1bmN0aW9uKE0pe3RyeXtoKE0pfWNhdGNoKEkpe2wuZXJyb3IoSSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fZXJyb3IsdGhpcy5fY29tcGxldGU9ZD9mdW5jdGlvbigpe3RyeXtkKCl9Y2F0Y2goTSl7bC5l''@;'; put 'put ''cnJvcihNKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9jb21wbGV0ZX11bnN1YnNjcmliZSgpe3ZhciBsO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe2NvbnN0e2Nsb3NlZDphfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJl''@;'; put 'put ''KCksIWEmJihudWxsPT09KGw9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09bHx8bC5jYWxsKHRoaXMpKX19fWZ1bmN0aW9uIExyKGMsbCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9MDthLnN1YnNjcmliZShOaShkLGY9PntkLm5leHQoYy5jYWxsKGwsZixoKyspKX0pKX0pfWNvbnN0IHBh''@;'; put 'put ''PSJodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzIjtjbGFzcyBRbiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoZnVuY3Rpb24gbGEoYyxsKXtyZXR1cm5gTkcwJHtNYXRoLmFicyhjKX0ke2w/IjogIitsOiIifWB9KGwsYSkpLHRoaXMuY29kZT1sfX1mdW5jdGlvbiBO''@;'; put 'put ''cyhjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX1jb25zdCBwdT0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIHhhKGMsbCxhKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIGlyKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9y''@;'; put 'put ''KGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaClyZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3Qgdj1uZXcgaCguLi5mKTtyZXR1cm4gTS5hbm5vdGF0aW9uPXYsTTtmdW5jdGlvbiBNKEksRyxpZSl7Y29u''@;'; put 'put ''c3QgdWU9SS5oYXNPd25Qcm9wZXJ0eShwdSk/SVtwdV06T2JqZWN0LmRlZmluZVByb3BlcnR5KEkscHUse3ZhbHVlOltdfSlbcHVdO2Zvcig7dWUubGVuZ3RoPD1pZTspdWUucHVzaChudWxsKTtyZXR1cm4odWVbaWVdPXVlW2llXXx8W10pLnB1c2godiksSX19cmV0dXJuIGEmJihoLnByb3Rv''@;'; put 'put ''dHlwZT1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSksaC5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9YyxoLmFubm90YXRpb25DbHM9aCxofSl9Y29uc3QgVnQ9Z2xvYmFsVGhpcztmdW5jdGlvbiBIYShjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09SGEpcmV0dXJuIGw7dGhyb3cgRXJy''@;'; put 'put ''b3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1mdW5jdGlvbiBMdShjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIFByKGMpe2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitjLm1hcChQcikuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1''@;'; put 'put ''cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiBvZChjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6''@;'; put 'put ''bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IGNmPUhhKHtfX2ZvcndhcmRfcmVmX186SGF9KTtmdW5jdGlvbiBDcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189Q3MsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBQcih0aGlzKCkpfSxjfWZ1bmN0aW9uIFlpKGMpe3Jl''@;'; put 'put ''dHVybiBibChjKT9jKCk6Y31mdW5jdGlvbiBibChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmYy5oYXNPd25Qcm9wZXJ0eShjZikmJmMuX19mb3J3YXJkX3JlZl9fPT09Q3N9ZnVuY3Rpb24gYW4oYyl7cmV0dXJue3Rva2VuOmMudG9rZW4scHJvdmlkZWRJbjpjLnByb3ZpZGVkSW58''@;'; put 'put ''fG51bGwsZmFjdG9yeTpjLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBBcihjKXtyZXR1cm57cHJvdmlkZXJzOmMucHJvdmlkZXJzfHxbXSxpbXBvcnRzOmMuaW1wb3J0c3x8W119fWZ1bmN0aW9uIFBvKGMpe3JldHVybiBvbChjLFNzKXx8b2woYyxIbyl9ZnVuY3Rpb24gb2woYyxs''@;'; put 'put ''KXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsKT9jW2xdOm51bGx9ZnVuY3Rpb24gVnMoYyl7cmV0dXJuIGMmJihjLmhhc093blByb3BlcnR5KGpsKXx8Yy5oYXNPd25Qcm9wZXJ0eShrbykpP2NbamxdOm51bGx9Y29uc3QgU3M9SGEoe1x1MDI3NXByb3Y6SGF9KSxqbD1IYSh7XHUwMjc1aW5q''@;'; put 'put ''OkhhfSksSG89SGEoe25nSW5qZWN0YWJsZURlZjpIYX0pLGtvPUhhKHtuZ0luamVjdG9yRGVmOkhhfSk7Y2xhc3MgTXR7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9kZXNjPWwsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBhP3RoaXMuX19OR19FTEVNRU5UX0lEX189YTp2b2lkIDAhPT1hJiYodGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46YS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTphLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJp''@;'; put 'put ''bmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fWZ1bmN0aW9uIFZhKGMpe3JldHVybiBjJiYhIWMuXHUwMjc1cHJvdmlkZXJzfWNvbnN0ICRvPUhhKHtcdTAyNzVjbXA6SGF9KSxYbD1IYSh7XHUwMjc1ZGlyOkhhfSksdG89SGEoe1x1MDI3NXBpcGU6SGF9KSxfbz1I''@;'; put 'put ''YSh7XHUwMjc1bW9kOkhhfSksamk9SGEoe1x1MDI3NWZhYzpIYX0pLFBjPUhhKHtfX05HX0VMRU1FTlRfSURfXzpIYX0pLHpsPUhhKHtfX05HX0VOVl9JRF9fOkhhfSk7ZnVuY3Rpb24gQ2EoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbD09Yz8iIjpTdHJpbmcoYyl9ZnVuY3Rp''@;'; put 'put ''b24gTXMoYyxsKXt0aHJvdyBuZXcgUW4oLTIwMSwhMSl9dmFyIHJhPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRGVmYXVsdD0wXT0iRGVmYXVsdCIsY1tjLkhvc3Q9MV09Ikhvc3QiLGNbYy5TZWxmPTJdPSJTZWxmIixjW2MuU2tpcFNlbGY9NF09IlNraXBTZWxmIixjW2MuT3B0aW9uYWw9OF09''@;'; put 'put ''Ik9wdGlvbmFsIixjfShyYXx8e30pO2xldCBvbztmdW5jdGlvbiBhNSgpe3JldHVybiBvb31mdW5jdGlvbiBfbChjKXtjb25zdCBsPW9vO3JldHVybiBvbz1jLGx9ZnVuY3Rpb24gdGgoYyxsLGEpe2NvbnN0IGQ9UG8oYyk7cmV0dXJuIGQmJiJyb290Ij09ZC5wcm92aWRlZEluP3ZvaWQgMD09''@;'; put 'put ''PWQudmFsdWU/ZC52YWx1ZT1kLmZhY3RvcnkoKTpkLnZhbHVlOmEmcmEuT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT1sP2w6dm9pZCBNcygpfWNvbnN0IEswPXt9LGd1PSJfX05HX0RJX0ZMQUdfXyIsRmM9Im5nVGVtcFRva2VuUGF0aCIsUnc9L1xuL2dtLHNsPSJfX3NvdXJjZSI7bGV0IEkzO2Z1''@;'; put 'put ''bmN0aW9uIG5oKGMpe2NvbnN0IGw9STM7cmV0dXJuIEkzPWMsbH1mdW5jdGlvbiBEMShjLGw9cmEuRGVmYXVsdCl7aWYodm9pZCAwPT09STMpdGhyb3cgbmV3IFFuKC0yMDMsITEpO3JldHVybiBudWxsPT09STM/dGgoYyx2b2lkIDAsbCk6STMuZ2V0KGMsbCZyYS5PcHRpb25hbD9udWxsOnZv''@;'; put 'put ''aWQgMCxsKX1mdW5jdGlvbiB4cihjLGw9cmEuRGVmYXVsdCl7cmV0dXJuKGE1KCl8fEQxKShZaShjKSxsKX1mdW5jdGlvbiBmaShjLGw9cmEuRGVmYXVsdCl7cmV0dXJuIHhyKGMsbzUobCkpfWZ1bmN0aW9uIG81KGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9j''@;'; put 'put ''OihjLm9wdGlvbmFsJiY4KXwoYy5ob3N0JiYxKXwoYy5zZWxmJiYyKXwoYy5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gczUoYyl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1ZaShjW2FdKTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigwPT09ZC5sZW5ndGgp''@;'; put 'put ''dGhyb3cgbmV3IFFuKDkwMCwhMSk7bGV0IGgsZj1yYS5EZWZhdWx0O2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXtjb25zdCBNPWRbdl0sST1wZihNKTsibnVtYmVyIj09dHlwZW9mIEk/LTE9PT1JP2g9TS50b2tlbjpmfD1JOmg9TX1sLnB1c2goeHIoaCxmKSl9ZWxzZSBsLnB1c2goeHIo''@;'; put 'put ''ZCkpfXJldHVybiBsfWZ1bmN0aW9uIHQwKGMsbCl7cmV0dXJuIGNbZ3VdPWwsYy5wcm90b3R5cGVbZ3VdPWwsY31mdW5jdGlvbiBwZihjKXtyZXR1cm4gY1tndV19Y29uc3QgYzU9dDAoeGEoIkluamVjdCIsYz0+KHt0b2tlbjpjfSkpLC0xKSxJMT10MCh4YSgiT3B0aW9uYWwiKSw4KSxsZD10''@;'; put 'put ''MCh4YSgiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBtdShjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGppKT9jW2ppXTpudWxsfWZ1bmN0aW9uIFIzKGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/UjMoYSxsKTpsKGEpKX1mdW5jdGlvbiBQbChjLGwsYSl7bD49Yy5sZW5n''@;'; put 'put ''dGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBPdShjLGwpe3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBfMChjLGwsYSl7bGV0IGQ9ZTIoYyxsKTtyZXR1cm4gZD49MD9jWzF8ZF09YTooZD1+ZCxmdW5jdGlvbiBkdihj''@;'; put 'put ''LGwsYSxkKXtsZXQgaD1jLmxlbmd0aDtpZihoPT1sKWMucHVzaChhLGQpO2Vsc2UgaWYoMT09PWgpYy5wdXNoKGQsY1swXSksY1swXT1hO2Vsc2V7Zm9yKGgtLSxjLnB1c2goY1toLTFdLGNbaF0pO2g+bDspY1toXT1jW2gtMl0saC0tO2NbbF09YSxjW2wrMV09ZH19KGMsZCxsLGEpKSxkfWZ1''@;'; put 'put ''bmN0aW9uIEE2KGMsbCl7Y29uc3QgYT1lMihjLGwpO2lmKGE+PTApcmV0dXJuIGNbMXxhXX1mdW5jdGlvbiBlMihjLGwpe3JldHVybiBmdW5jdGlvbiBSMShjLGwsYSl7bGV0IGQ9MCxoPWMubGVuZ3RoPj5hO2Zvcig7aCE9PWQ7KXtjb25zdCBmPWQrKGgtZD4+MSksdj1jW2Y8PGFdO2lmKGw9''@;'; put 'put ''PT12KXJldHVybiBmPDxhO3Y+bD9oPWY6ZD1mKzF9cmV0dXJufihoPDxhKX0oYyxsLDEpfWNvbnN0IEkwPXt9LHRzPVtdLHQyPW5ldyBNdCgiIiksTDM9bmV3IE10KCIiLC0xKSxrNj1uZXcgTXQoIiIpO2NsYXNzIHU1e2dldChsLGE9SzApe2lmKGE9PT1LMCl7Y29uc3QgZD1uZXcgRXJyb3Io''@;'; put 'put ''YE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtQcihsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19dmFyIE8zPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuT25QdXNoPTBdPSJPblB1c2giLGNbYy5EZWZhdWx0PTFdPSJEZWZhdWx0''@;'; put 'put ''IixjfShPM3x8e30pLEpzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixjW2MuTm9uZT0yXT0iTm9uZSIsY1tjLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixjfShKc3x8e30pLE5uPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tj''@;'; put 'put ''LlNpZ25hbEJhc2VkPTFdPSJTaWduYWxCYXNlZCIsY1tjLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsY30oTm58fHt9KTtmdW5jdGlvbiBGdyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihs''@;'; put 'put ''LGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4gaH1hPWgrMX19ZnVuY3Rpb24gbTQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3Ro''@;'; put 'put ''Oyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLHY9YVtkKytdLE09YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsdixNLGYpfWVsc2V7Y29uc3QgZj1oLHY9YVsrK2RdO2g1KGYpP2Muc2V0UHJvcGVydHkobCxmLHYp''@;'; put 'put ''OmMuc2V0QXR0cmlidXRlKGwsZix2KSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIGQ1KGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGg1KGMpe3JldHVybiA2ND09PWMuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiB2ZihjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgp''@;'; put 'put ''aWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9aDowPT09YXx8RDYoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19''@;'; put 'put ''cmV0dXJuIGN9ZnVuY3Rpb24gRDYoYyxsLGEsZCxoKXtsZXQgZj0wLHY9Yy5sZW5ndGg7aWYoLTE9PT1sKXY9LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZisrXTtpZigibnVtYmVyIj09dHlwZW9mIE0pe2lmKE09PT1sKXt2PS0xO2JyZWFrfWlmKE0+bCl7dj1mLTE7YnJl''@;'; put 'put ''YWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBNKWJyZWFrO2lmKE09PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisxXT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwh''@;'; put 'put ''PT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PXYmJihjLnNwbGljZSh2LDAsbCksZj12KzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5zcGxpY2UoZisrLDAsaCl9Y29uc3QgaHY9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBJNihj''@;'; put 'put ''LGwsYSxkKXtsZXQgaD0wO2lmKGQpe2Zvcig7aDxsLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBsW2hdO2grPTIpaWYoImNsYXNzIj09PWxbaF0mJi0xIT09RncobFtoKzFdLnRvTG93ZXJDYXNlKCksYSwwKSlyZXR1cm4hMH1lbHNlIGlmKHY0KGMpKXJldHVybiExO2lmKGg9bC5pbmRleE9m''@;'; put 'put ''KDEsaCksaD4tMSl7bGV0IGY7Zm9yKDsrK2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YoZj1sW2hdKTspaWYoZi50b0xvd2VyQ2FzZSgpPT09YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB2NChjKXtyZXR1cm4gND09PWMudHlwZSYmYy52YWx1ZSE9PWh2fWZ1bmN0aW9uIHIwKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gbD09PSg0IT09Yy50eXBlfHxhP2MudmFsdWU6aHYpfWZ1bmN0aW9uIEh3KGMsbCxhKXtsZXQgZD00O2NvbnN0IGg9Yy5hdHRycyxmPW51bGwhPT1oP2Z1bmN0aW9uIHB2KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKGQ1KGNbbF0pKXJldHVybiBsO3JldHVy''@;'; put 'put ''biBjLmxlbmd0aH0oaCk6MDtsZXQgdj0hMTtmb3IobGV0IE09MDtNPGwubGVuZ3RoO00rKyl7Y29uc3QgST1sW01dO2lmKCJudW1iZXIiIT10eXBlb2YgSSl7aWYoIXYpaWYoNCZkKXtpZihkPTJ8MSZkLCIiIT09SSYmIXIwKGMsSSxhKXx8IiI9PT1JJiYxPT09bC5sZW5ndGgpe2lmKE1jKGQp''@;'; put 'put ''KXJldHVybiExO3Y9ITB9fWVsc2UgaWYoOCZkKXtpZihudWxsPT09aHx8IUk2KGMsaCxJLGEpKXtpZihNYyhkKSlyZXR1cm4hMTt2PSEwfX1lbHNle2NvbnN0IEc9bFsrK01dLGllPVAzKEksaCx2NChjKSxhKTtpZigtMT09PWllKXtpZihNYyhkKSlyZXR1cm4hMTt2PSEwO2NvbnRpbnVlfWlm''@;'; put 'put ''KCIiIT09Ryl7bGV0IHVlO2lmKHVlPWllPmY/IiI6aFtpZSsxXS50b0xvd2VyQ2FzZSgpLDImZCYmRyE9PXVlKXtpZihNYyhkKSlyZXR1cm4hMTt2PSEwfX19fWVsc2V7aWYoIXYmJiFNYyhkKSYmIU1jKEkpKXJldHVybiExO2lmKHYmJk1jKEkpKWNvbnRpbnVlO3Y9ITEsZD1JfDEmZH19cmV0''@;'; put 'put ''dXJuIE1jKGQpfHx2fWZ1bmN0aW9uIE1jKGMpe3JldHVybiEoMSZjKX1mdW5jdGlvbiBQMyhjLGwsYSxkKXtpZihudWxsPT09bClyZXR1cm4tMTtsZXQgaD0wO2lmKGR8fCFhKXtsZXQgZj0hMTtmb3IoO2g8bC5sZW5ndGg7KXtjb25zdCB2PWxbaF07aWYodj09PWMpcmV0dXJuIGg7aWYoMz09''@;'; put 'put ''PXZ8fDY9PT12KWY9ITA7ZWxzZXtpZigxPT09dnx8Mj09PXYpe2xldCBNPWxbKytoXTtmb3IoOyJzdHJpbmciPT10eXBlb2YgTTspTT1sWysraF07Y29udGludWV9aWYoND09PXYpYnJlYWs7aWYoMD09PXYpe2grPTQ7Y29udGludWV9fWgrPWY/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBndihjLGwpe2xldCBhPWMuaW5kZXhPZig0KTtpZihhPi0xKWZvcihhKys7YTxjLmxlbmd0aDspe2NvbnN0IGQ9Y1thXTtpZigibnVtYmVyIj09dHlwZW9mIGQpcmV0dXJuLTE7aWYoZD09PWwpcmV0dXJuIGE7YSsrfXJldHVybi0xfShsLGMpfWZ1bmN0aW9uIHk0KGMsbCxhPSExKXtmb3Io''@;'; put 'put ''bGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihIdyhjLGxbZF0sYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTncoYyxsKXtlOmZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtjb25zdCBkPWxbYV07aWYoYy5sZW5ndGg9PT1kLmxlbmd0aCl7Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDto''@;'; put 'put ''KyspaWYoY1toXSE9PWRbaF0pY29udGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gbXYoYyxsKXtyZXR1cm4gYz8iOm5vdCgiK2wudHJpbSgpKyIpIjpsfWZ1bmN0aW9uIFZ3KGMpe2xldCBsPWNbMF0sYT0xLGQ9MixoPSIiLGY9ITE7Zm9yKDthPGMubGVuZ3RoOyl7bGV0IHY9''@;'; put 'put ''Y1thXTtpZigic3RyaW5nIj09dHlwZW9mIHYpaWYoMiZkKXtjb25zdCBNPWNbKythXTtoKz0iWyIrdisoTS5sZW5ndGg+MD8nPSInK00rJyInOiIiKSsiXSJ9ZWxzZSA4JmQ/aCs9Ii4iK3Y6NCZkJiYoaCs9IiAiK3YpO2Vsc2UiIiE9PWgmJiFNYyh2KSYmKGwrPW12KGYsaCksaD0iIiksZD12''@;'; put 'put ''LGY9Znx8IU1jKGQpO2ErK31yZXR1cm4iIiE9PWgmJihsKz1tdihmLGgpKSxsfWZ1bmN0aW9uIFZyKGMpe3JldHVybiBOcygoKT0+e2NvbnN0IGw9UjYoYyksYT17Li4ubCxkZWNsczpjLmRlY2xzLHZhcnM6Yy52YXJzLHRlbXBsYXRlOmMudGVtcGxhdGUsY29uc3RzOmMuY29uc3RzfHxudWxs''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczpjLm5nQ29udGVudFNlbGVjdG9ycyxvblB1c2g6Yy5jaGFuZ2VEZXRlY3Rpb249PT1PMy5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsZGVwZW5kZW5jaWVzOmwuc3RhbmRhbG9uZSYmYy5kZXBlbmRlbmNpZXN8fG51bGwsZ2V0U3Rh''@;'; put 'put ''bmRhbG9uZUluamVjdG9yOm51bGwsc2lnbmFsczpjLnNpZ25hbHM/PyExLGRhdGE6Yy5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOmMuZW5jYXBzdWxhdGlvbnx8SnMuRW11bGF0ZWQsc3R5bGVzOmMuc3R5bGVzfHx0cyxfOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxp''@;'; put 'put ''ZDoiIn07UjAoYSk7Y29uc3QgZD1jLmRlcGVuZGVuY2llcztyZXR1cm4gYS5kaXJlY3RpdmVEZWZzPXA1KGQsITEpLGEucGlwZURlZnM9cDUoZCwhMCksYS5pZD1mdW5jdGlvbiBqdyhjKXtsZXQgbD0wO2NvbnN0IGE9W2Muc2VsZWN0b3JzLGMubmdDb250ZW50U2VsZWN0b3JzLGMuaG9zdFZh''@;'; put 'put ''cnMsYy5ob3N0QXR0cnMsYy5jb25zdHMsYy52YXJzLGMuZGVjbHMsYy5lbmNhcHN1bGF0aW9uLGMuc3RhbmRhbG9uZSxjLnNpZ25hbHMsYy5leHBvcnRBcyxKU09OLnN0cmluZ2lmeShjLmlucHV0cyksSlNPTi5zdHJpbmdpZnkoYy5vdXRwdXRzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l''@;'; put 'put ''cyhjLnR5cGUucHJvdG90eXBlKSwhIWMuY29udGVudFF1ZXJpZXMsISFjLnZpZXdRdWVyeV0uam9pbigifCIpO2Zvcihjb25zdCBoIG9mIGEpbD1NYXRoLmltdWwoMzEsbCkraC5jaGFyQ29kZUF0KDApfDA7cmV0dXJuIGwrPTIxNDc0ODM2NDgsImMiK2x9KGEpLGF9KX1mdW5jdGlvbiB5Zihj''@;'; put 'put ''KXtyZXR1cm4gVm8oYyl8fHhjKGMpfWZ1bmN0aW9uIGY1KGMpe3JldHVybiBudWxsIT09Y31mdW5jdGlvbiBraShjKXtyZXR1cm4gTnMoKCk9Pih7dHlwZTpjLnR5cGUsYm9vdHN0cmFwOmMuYm9vdHN0cmFwfHx0cyxkZWNsYXJhdGlvbnM6Yy5kZWNsYXJhdGlvbnN8fHRzLGltcG9ydHM6Yy5p''@;'; put 'put ''bXBvcnRzfHx0cyxleHBvcnRzOmMuZXhwb3J0c3x8dHMsdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOmMuc2NoZW1hc3x8bnVsbCxpZDpjLmlkfHxudWxsfSkpfWZ1bmN0aW9uIGI0KGMsbCl7aWYobnVsbD09YylyZXR1cm4gSTA7Y29uc3QgYT17fTtmb3IoY29uc3QgZCBp''@;'; put 'put ''biBjKWlmKGMuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9Y1tkXTtsZXQgZix2LE09Tm4uTm9uZTtBcnJheS5pc0FycmF5KGgpPyhNPWhbMF0sZj1oWzFdLHY9aFsyXT8/Zik6KGY9aCx2PWgpLGw/KGFbZl09TSE9PU5uLk5vbmU/W2QsTV06ZCxsW2ZdPXYpOmFbZl09ZH1yZXR1cm4gYX1m''@;'; put 'put ''dW5jdGlvbiBFcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPVI2KGMpO3JldHVybiBSMChsKSxsfSl9ZnVuY3Rpb24gbGwoYyl7cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUs''@;'; put 'put ''b25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFZvKGMpe3JldHVybiBjWyRvXXx8bnVsbH1mdW5jdGlvbiB4YyhjKXtyZXR1cm4gY1tYbF18fG51bGx9ZnVuY3Rpb24gZXUoYyl7cmV0dXJuIGNbdG9dfHxudWxsfWZ1bmN0aW9uIFB1KGMsbCl7''@;'; put 'put ''Y29uc3QgYT1jW19vXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke1ByKGMpfSBkb2VzIG5vdCBoYXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIFI2KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVy''@;'; put 'put ''c1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhvc3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRz''@;'; put 'put ''OmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fEkwLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGwsc3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8dHMsdmlld1F1ZXJ5OmMu''@;'; put 'put ''dmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpiNChjLmlucHV0cyxsKSxvdXRwdXRzOmI0KGMub3V0cHV0cyksZGVidWdJbmZvOm51bGx9fWZ1''@;'; put 'put ''bmN0aW9uIFIwKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gcDUoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/ZXU6eWY7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihmNSl9ZnVuY3Rpb24g''@;'; put 'put ''encoLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpyaCgwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcmgoYywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtjb25zdCBmPXY9PnthLnB1c2godil9O3JldHVybiBSMyhsLHY9Pntjb25zdCBNPXY7XzQoTSxm''@;'; put 'put ''LFtdLGQpJiYoaHx8PVtdLGgucHVzaChNKSl9KSx2b2lkIDAhPT1oJiZ5dihoLGYpLGF9ZnVuY3Rpb24geXYoYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3R7bmdNb2R1bGU6ZCxwcm92aWRlcnM6aH09Y1thXTtMNihoLGY9PntsKGYsZCl9KX19ZnVuY3Rpb24gXzQoYyxs''@;'; put 'put ''LGEsZCl7aWYoIShjPVlpKGMpKSlyZXR1cm4hMTtsZXQgaD1udWxsLGY9VnMoYyk7Y29uc3Qgdj0hZiYmVm8oYyk7aWYoZnx8dil7aWYodiYmIXYuc3RhbmRhbG9uZSlyZXR1cm4hMTtoPWN9ZWxzZXtjb25zdCBJPWMubmdNb2R1bGU7aWYoZj1WcyhJKSwhZilyZXR1cm4hMTtoPUl9Y29uc3Qg''@;'; put 'put ''TT1kLmhhcyhoKTtpZih2KXtpZihNKXJldHVybiExO2lmKGQuYWRkKGgpLHYuZGVwZW5kZW5jaWVzKXtjb25zdCBJPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmRlcGVuZGVuY2llcz92LmRlcGVuZGVuY2llcygpOnYuZGVwZW5kZW5jaWVzO2Zvcihjb25zdCBHIG9mIEkpXzQoRyxsLGEsZCl9fWVs''@;'; put 'put ''c2V7aWYoIWYpcmV0dXJuITE7e2lmKG51bGwhPWYuaW1wb3J0cyYmIU0pe2xldCBHO2QuYWRkKGgpO3RyeXtSMyhmLmltcG9ydHMsaWU9PntfNChpZSxsLGEsZCkmJihHfHw9W10sRy5wdXNoKGllKSl9KX1maW5hbGx5e312b2lkIDAhPT1HJiZ5dihHLGwpfWlmKCFNKXtjb25zdCBHPW11KGgp''@;'; put 'put ''fHwoKCk9Pm5ldyBoKTtsKHtwcm92aWRlOmgsdXNlRmFjdG9yeTpHLGRlcHM6dHN9LGgpLGwoe3Byb3ZpZGU6azYsdXNlVmFsdWU6aCxtdWx0aTohMH0saCksbCh7cHJvdmlkZTp0Mix1c2VWYWx1ZTooKT0+eHIoaCksbXVsdGk6ITB9LGgpfWNvbnN0IEk9Zi5wcm92aWRlcnM7aWYobnVsbCE9''@;'; put 'put ''SSYmIU0pe2NvbnN0IEc9YztMNihJLGllPT57bChpZSxHKX0pfX19cmV0dXJuIGghPT1jJiZ2b2lkIDAhPT1jLnByb3ZpZGVyc31mdW5jdGlvbiBMNihjLGwpe2ZvcihsZXQgYSBvZiBjKVZhKGEpJiYoYT1hLlx1MDI3NXByb3ZpZGVycyksQXJyYXkuaXNBcnJheShhKT9MNihhLGwpOmwoYSl9''@;'; put 'put ''Y29uc3QgVXc9SGEoe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOkhhfSk7ZnVuY3Rpb24gTzYoYyl7cmV0dXJuIG51bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJlV3IGluIGN9ZnVuY3Rpb24gX2YoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9Y29uc3QgRjY9bmV3IE10KCIiKSxG''@;'; put 'put ''Mz17fSxadz17fTtsZXQgSDY7ZnVuY3Rpb24gSDMoKXtyZXR1cm4gdm9pZCAwPT09SDYmJihINj1uZXcgdTUpLEg2fWNsYXNzIGhje31jbGFzcyBjZCBleHRlbmRzIGhje2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCks''@;'; put 'put ''dGhpcy5wYXJlbnQ9YSx0aGlzLnNvdXJjZT1kLHRoaXMuc2NvcGVzPWgsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxtNShsLHY9PnRoaXMucHJvY2Vzc1Byb3ZpZGVy''@;'; put 'put ''KHYpKSx0aGlzLnJlY29yZHMuc2V0KEwzLE4zKHZvaWQgMCx0aGlzKSksaC5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQoaGMsTjModm9pZCAwLHRoaXMpKTtjb25zdCBmPXRoaXMucmVjb3Jkcy5nZXQoRjYpO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgZi52YWx1ZSYm''@;'; put 'put ''dGhpcy5zY29wZXMuYWRkKGYudmFsdWUpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0KHRoaXMuZ2V0KGs2LHRzLHJhLlNlbGYpKX1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7Y29uc3QgbD1fZShudWxsKTt0cnl7Zm9yKGNvbnN0''@;'; put 'put ''IGQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylkLm5nT25EZXN0cm95KCk7Y29uc3QgYT10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3QgZCBvZiBhKWQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95''@;'; put 'put ''SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSxfZShsKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhvb2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4''@;'; put 'put ''dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9bmgodGhpcyksZD1fbCh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7bmgoYSksX2woZCl9fWdldChsLGE9SzAsZD1yYS5EZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoemwpKXJldHVybiBsW3psXSh0aGlzKTtkPW81KGQpO2NvbnN0IGY9bmgodGhpcyksdj1fbCh2b2lkIDApO3RyeXtpZighKGQmcmEuU2tpcFNlbGYpKXtsZXQgST10aGlzLnJlY29yZHMuZ2V0KGwpO2lmKHZvaWQgMD09PUkpe2NvbnN0IEc9ZnVuY3Rpb24gWXcoYyl7cmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIE10fShsKSYmUG8obCk7ST1HJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKEcpP04zKGc1KGwpLEYzKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQobCxJKX1pZihudWxsIT1JKXJldHVybiB0aGlzLmh5ZHJh''@;'; put 'put ''dGUobCxJKX1yZXR1cm4oZCZyYS5TZWxmP0gzKCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZyYS5PcHRpb25hbCYmYT09PUswP251bGw6YSl9Y2F0Y2goTSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PU0ubmFtZSl7aWYoKE1bRmNdPU1bRmNdfHxbXSkudW5zaGlmdChQcihsKSksZil0aHJv''@;'; put 'put ''dyBNO3JldHVybiBmdW5jdGlvbiBsNShjLGwsYSxkKXtjb25zdCBoPWNbRmNdO3Rocm93IGxbc2xdJiZoLnVuc2hpZnQobFtzbF0pLGMubWVzc2FnZT1mdW5jdGlvbiBnNChjLGwsYSxkPW51bGwpe2M9YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGlj''@;'; put 'put ''ZSgyKTpjO2xldCBoPVByKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChQcikuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXtsZXQgTT1sW3ZdO2YucHVzaCh2KyI6Iiso''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBNP0pTT04uc3RyaW5naWZ5KE0pOlByKE0pKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNlKFJ3LCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9''@;'; put 'put ''aCxjW0ZjXT1udWxsLGN9KE0sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgTX1maW5hbGx5e19sKHYpLG5oKGYpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25zdCBsPV9lKG51bGwpLGE9bmgodGhpcyksZD1fbCh2b2lkIDApO3RyeXtjb25zdCBmPXRo''@;'; put 'put ''aXMuZ2V0KHQyLHRzLHJhLlNlbGYpO2Zvcihjb25zdCB2IG9mIGYpdigpfWZpbmFsbHl7bmgoYSksX2woZCksX2UobCl9fXRvU3RyaW5nKCl7Y29uc3QgbD1bXSxhPXRoaXMucmVjb3Jkcztmb3IoY29uc3QgZCBvZiBhLmtleXMoKSlsLnB1c2goUHIoZCkpO3JldHVybmBSM0luamVjdG9yWyR7''@;'; put 'put ''bC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgUW4oMjA1LCExKX1wcm9jZXNzUHJvdmlkZXIobCl7bGV0IGE9X2YobD1ZaShsKSk/bDpZaShsJiZsLnByb3ZpZGUpO2NvbnN0IGQ9ZnVuY3Rpb24gTjYoYyl7cmV0dXJuIE82''@;'; put 'put ''KGMpP04zKHZvaWQgMCxjLnVzZVZhbHVlKTpOMyhDdihjKSxGMyl9KGwpO2lmKCFfZihsKSYmITA9PT1sLm11bHRpKXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPU4zKHZvaWQgMCxGMywhMCksaC5mYWN0b3J5PSgpPT5zNShoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkp''@;'; put 'put ''LGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtjb25zdCBkPV9lKG51bGwpO3RyeXtyZXR1cm4gYS52YWx1ZT09PUYzJiYoYS52YWx1ZT1adyxhLnZhbHVlPWEuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUm''@;'; put 'put ''JmZ1bmN0aW9uIFN2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGEudmFsdWUpLGEudmFsdWV9ZmluYWxseXtfZShkKX19aW5qZWN0YWJs''@;'; put 'put ''ZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPVlpKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiBnNShjKXtjb25zdCBsPVBvKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Om11KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lm''@;'; put 'put ''KGMgaW5zdGFuY2VvZiBNdCl0aHJvdyBuZXcgUW4oMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIHd2KGMpe2lmKGMubGVuZ3RoPjApdGhyb3cgbmV3IFFuKDIwNCwhMSk7Y29uc3QgYT1mdW5jdGlvbiB6byhjKXtyZXR1cm4gYyYmKGNbU3NdfHxjW0hv''@;'; put 'put ''XSl8fG51bGx9KGMpO3JldHVybiBudWxsIT09YT8oKT0+YS5mYWN0b3J5KGMpOigpPT5uZXcgY30oYyk7dGhyb3cgbmV3IFFuKDIwNCwhMSl9ZnVuY3Rpb24gQ3YoYyxsLGEpe2xldCBkO2lmKF9mKGMpKXtjb25zdCBoPVlpKGMpO3JldHVybiBtdShoKXx8ZzUoaCl9aWYoTzYoYykpZD0oKT0+''@;'; put 'put ''WWkoYy51c2VWYWx1ZSk7ZWxzZSBpZihmdW5jdGlvbiBfdihjKXtyZXR1cm4hKCFjfHwhYy51c2VGYWN0b3J5KX0oYykpZD0oKT0+Yy51c2VGYWN0b3J5KC4uLnM1KGMuZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uIGJ2KGMpe3JldHVybiEoIWN8fCFjLnVzZUV4aXN0aW5nKX0oYykpZD0o''@;'; put 'put ''KT0+eHIoWWkoYy51c2VFeGlzdGluZykpO2Vsc2V7Y29uc3QgaD1ZaShjJiYoYy51c2VDbGFzc3x8Yy5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uIFd3KGMpe3JldHVybiEhYy5kZXBzfShjKSlyZXR1cm4gbXUoaCl8fGc1KGgpO2Q9KCk9Pm5ldyBoKC4uLnM1KGMuZGVwcykpfXJldHVybiBkfWZ1''@;'; put 'put ''bmN0aW9uIE4zKGMsbCxhPSExKXtyZXR1cm57ZmFjdG9yeTpjLHZhbHVlOmwsbXVsdGk6YT9bXTp2b2lkIDB9fWZ1bmN0aW9uIG01KGMsbCl7Zm9yKGNvbnN0IGEgb2YgYylBcnJheS5pc0FycmF5KGEpP201KGEsbCk6YSYmVmEoYSk/bTUoYS5cdTAyNzVwcm92aWRlcnMsbCk6bChhKX1mdW5j''@;'; put 'put ''dGlvbiBxMChjLGwpe2MgaW5zdGFuY2VvZiBjZCYmYy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBkPW5oKGMpLGg9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e25oKGQpLF9sKGgpfX1mdW5jdGlvbiBNdigpe3JldHVybiB2b2lkIDAhPT1hNSgpfHxudWxsIT1mdW5jdGlv''@;'; put 'put ''biBMdygpe3JldHVybiBJM30oKX1jb25zdCBqNj1GdW5jdGlvbjtjb25zdCBVbD0wLEtpPTEsVWE9MixmYz0zLE5jPTQscmM9NSxudT02LFgwPTcsY2w9OCxwYz05LEwxPTEwLHlvPTExLFNmPTEyLEM0PTEzLG8wPTE0LFpsPTE1LFM0PTE2LE1mPTE3LHVkPTE4LHcwPTE5LGEyPTIwLG8yPTIx''@;'; put 'put ''LHY1PTIyLHhmPTIzLHdvPTI1LHo2PTEsdnU9NyxWMz05LGdjPTEwO3ZhciB5NT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5IYXNUcmFuc3BsYW50ZWRWaWV3cz0yXT0iSGFzVHJhbnNwbGFudGVkVmlld3MiLGN9KHk1fHx7fSk7ZnVuY3Rpb24gRnUoYyl7cmV0''@;'; put 'put ''dXJuIEFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY1t6Nl19ZnVuY3Rpb24gSHUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJiEwPT09Y1t6Nl19ZnVuY3Rpb24gcnUoYyl7cmV0dXJuISEoNCZjLmZsYWdzKX1mdW5jdGlvbiBFZihjKXtyZXR1cm4gYy5jb21wb25lbnRP''@;'; put 'put ''ZmZzZXQ+LTF9ZnVuY3Rpb24gSjAoYyl7cmV0dXJuISgxJn5jLmZsYWdzKX1mdW5jdGlvbiBWYyhjKXtyZXR1cm4hIWMudGVtcGxhdGV9ZnVuY3Rpb24geDQoYyl7cmV0dXJuISEoNTEyJmNbVWFdKX1jbGFzcyB0Vntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5wcmV2aW91c1ZhbHVlPWwsdGhp''@;'; put 'put ''cy5jdXJyZW50VmFsdWU9YSx0aGlzLmZpcnN0Q2hhbmdlPWR9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX1mdW5jdGlvbiBZQShjLGwsYSxkKXtudWxsIT09bD9sLmFwcGx5VmFsdWVUb0lucHV0U2lnbmFsKGwsZCk6Y1thXT1kfWZ1bmN0aW9uIHdsKCl7cmV0dXJu''@;'; put 'put ''IEdBfWZ1bmN0aW9uIEdBKGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1yViksblZ9ZnVuY3Rpb24gblYoKXtjb25zdCBjPUtBKHRoaXMpLGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PUkwKWMucHJldmlvdXM9''@;'; put 'put ''bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiByVihjLGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5kZWNsYXJlZElucHV0c1tkXSx2PUtBKGMpfHxmdW5jdGlvbiBpVihjLGwpe3JldHVybiBjWyRBXT1sfShj''@;'; put 'put ''LHtwcmV2aW91czpJMCxjdXJyZW50Om51bGx9KSxNPXYuY3VycmVudHx8KHYuY3VycmVudD17fSksST12LnByZXZpb3VzLEc9SVtmXTtNW2ZdPW5ldyB0VihHJiZHLmN1cnJlbnRWYWx1ZSxhLEk9PT1JMCksWUEoYyxsLGgsYSl9d2wubmdJbmhlcml0PSEwO2NvbnN0ICRBPSJfX25nU2ltcGxl''@;'; put 'put ''Q2hhbmdlc19fIjtmdW5jdGlvbiBLQShjKXtyZXR1cm4gY1skQV18fG51bGx9Y29uc3QgdTI9ZnVuY3Rpb24oYyxsLGEpe307bGV0IFhBPSExO2Z1bmN0aW9uIENsKGMpe2Zvcig7QXJyYXkuaXNBcnJheShjKTspYz1jW1VsXTtyZXR1cm4gY31mdW5jdGlvbiBiNShjLGwpe3JldHVybiBDbChs''@;'; put 'put ''W2NdKX1mdW5jdGlvbiBMMChjLGwpe3JldHVybiBDbChsW2MuaW5kZXhdKX1mdW5jdGlvbiBZNihjLGwpe3JldHVybiBjLmRhdGFbbF19ZnVuY3Rpb24gRTQoYyxsKXtyZXR1cm4gY1tsXX1mdW5jdGlvbiBPMShjLGwpe2NvbnN0IGE9bFtjXTtyZXR1cm4gRnUoYSk/YTphW1VsXX1mdW5jdGlv''@;'; put 'put ''biBRdyhjKXtyZXR1cm4hKDEyOCZ+Y1tVYV0pfWZ1bmN0aW9uIGQyKGMsbCl7cmV0dXJuIG51bGw9PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGVDKGMpe2NbTWZdPTB9ZnVuY3Rpb24gY1YoYyl7MTAyNCZjW1VhXXx8KGNbVWFdfD0xMDI0LFF3KGMpJiZHNihjKSl9ZnVuY3Rpb24gVHYoYyl7cmV0''@;'; put 'put ''dXJuISEoOTIxNiZjW1VhXXx8Y1t4Zl0/LmRpcnR5KX1mdW5jdGlvbiBuQyhjKXtjW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxUdihjKT9HNihjKTo2NCZjW1VhXSYmKGZ1bmN0aW9uIG9WKCl7cmV0dXJuIFhBfSgpPyhjW1VhXXw9MTAyNCxHNihjKSk6Y1tMMV0u''@;'; put 'put ''Y2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKSl9ZnVuY3Rpb24gRzYoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtsZXQgbD1UNChjKTtmb3IoO251bGwhPT1sJiYhKDgxOTImbFtVYV0pJiYobFtVYV18PTgxOTIsUXcobCkpOylsPVQ0KGwpfWZ1''@;'; put 'put ''bmN0aW9uIEF2KGMsbCl7aWYoISgyNTYmfmNbVWFdKSl0aHJvdyBuZXcgUW4oOTExLCExKTtudWxsPT09Y1tvMl0mJihjW28yXT1bXSksY1tvMl0ucHVzaChsKX1mdW5jdGlvbiBUNChjKXtjb25zdCBsPWNbZmNdO3JldHVybiBIdShsKT9sW2ZjXTpsfWNvbnN0IENvPXtsRnJhbWU6YWsobnVs''@;'; put 'put ''bCksYmluZGluZ3NFbmFibGVkOiEwLHNraXBIeWRyYXRpb25Sb290VE5vZGU6bnVsbH07ZnVuY3Rpb24gdGsoKXtyZXR1cm4gQ28uYmluZGluZ3NFbmFibGVkfWZ1bmN0aW9uIF81KCl7cmV0dXJuIG51bGwhPT1Dby5za2lwSHlkcmF0aW9uUm9vdFROb2RlfWZ1bmN0aW9uIGRpKCl7cmV0dXJu''@;'; put 'put ''IENvLmxGcmFtZS5sVmlld31mdW5jdGlvbiBscygpe3JldHVybiBDby5sRnJhbWUudFZpZXd9ZnVuY3Rpb24gd3QoYyl7cmV0dXJuIENvLmxGcmFtZS5jb250ZXh0TFZpZXc9YyxjW2NsXX1mdW5jdGlvbiBDdChjKXtyZXR1cm4gQ28ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLGN9ZnVuY3Rp''@;'; put 'put ''b24gdWwoKXtsZXQgYz1yQygpO2Zvcig7bnVsbCE9PWMmJjY0PT09Yy50eXBlOyljPWMucGFyZW50O3JldHVybiBjfWZ1bmN0aW9uIHJDKCl7cmV0dXJuIENvLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gaDIoYyxsKXtjb25zdCBhPUNvLmxGcmFtZTthLmN1cnJlbnRUTm9kZT1jLGEu''@;'; put 'put ''aXNQYXJlbnQ9bH1mdW5jdGlvbiBpQygpe3JldHVybiBDby5sRnJhbWUuaXNQYXJlbnR9ZnVuY3Rpb24gYUMoKXtDby5sRnJhbWUuaXNQYXJlbnQ9ITF9ZnVuY3Rpb24gTzAoKXtjb25zdCBjPUNvLmxGcmFtZTtsZXQgbD1jLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1sJiYobD1jLmJp''@;'; put 'put ''bmRpbmdSb290SW5kZXg9Yy50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksbH1mdW5jdGlvbiBUZigpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIGFoKCl7cmV0dXJuIENvLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBBZihjKXtjb25zdCBsPUNvLmxGcmFt''@;'; put 'put ''ZSxhPWwuYmluZGluZ0luZGV4O3JldHVybiBsLmJpbmRpbmdJbmRleD1sLmJpbmRpbmdJbmRleCtjLGF9ZnVuY3Rpb24gYlYoYyxsKXtjb25zdCBhPUNvLmxGcmFtZTthLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdSb290SW5kZXg9YyxvQyhsKX1mdW5jdGlvbiBvQyhjKXtDby5sRnJhbWUuY3Vy''@;'; put 'put ''cmVudERpcmVjdGl2ZUluZGV4PWN9ZnVuY3Rpb24gc0MoYyl7Y29uc3QgbD1Dby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09bD9udWxsOmNbbF19ZnVuY3Rpb24gbEMoKXtyZXR1cm4gQ28ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIEIzKGMpe0Nv''@;'; put 'put ''LmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1jfWZ1bmN0aW9uIGNDKGMpe2NvbnN0IGw9Y1tLaV07cmV0dXJuIDI9PT1sLnR5cGU/bC5kZWNsVE5vZGU6MT09PWwudHlwZT9jW3JjXTpudWxsfWZ1bmN0aW9uIER2KGMsbCxhKXtpZihhJnJhLlNraXBTZWxmKXtsZXQgaD1sLGY9Yztmb3IoOyEo''@;'; put 'put ''aD1oLnBhcmVudCxudWxsIT09aHx8YSZyYS5Ib3N0fHwoaD1jQyhmKSxudWxsPT09aHx8KGY9ZltvMF0sMTAmaC50eXBlKSkpOyk7aWYobnVsbD09PWgpcmV0dXJuITE7bD1oLGM9Zn1jb25zdCBkPUNvLmxGcmFtZT1qMygpO3JldHVybiBkLmN1cnJlbnRUTm9kZT1sLGQubFZpZXc9YywhMH1m''@;'; put 'put ''dW5jdGlvbiBLNihjKXtjb25zdCBsPWozKCksYT1jW0tpXTtDby5sRnJhbWU9bCxsLmN1cnJlbnRUTm9kZT1hLmZpcnN0Q2hpbGQsbC5sVmlldz1jLGwudFZpZXc9YSxsLmNvbnRleHRMVmlldz1jLGwuYmluZGluZ0luZGV4PWEuYmluZGluZ1N0YXJ0SW5kZXgsbC5pbkkxOG49ITF9ZnVuY3Rp''@;'; put 'put ''b24gajMoKXtjb25zdCBjPUNvLmxGcmFtZSxsPW51bGw9PT1jP251bGw6Yy5jaGlsZDtyZXR1cm4gbnVsbD09PWw/YWsoYyk6bH1mdW5jdGlvbiBhayhjKXtjb25zdCBsPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDot''@;'; put 'put ''MSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6YyxjaGlsZDpudWxsLGlu''@;'; put 'put ''STE4bjohMX07cmV0dXJuIG51bGwhPT1jJiYoYy5jaGlsZD1sKSxsfWZ1bmN0aW9uIEl2KCl7Y29uc3QgYz1Dby5sRnJhbWU7cmV0dXJuIENvLmxGcmFtZT1jLnBhcmVudCxjLmN1cnJlbnRUTm9kZT1udWxsLGMubFZpZXc9bnVsbCxjfWNvbnN0IG9rPUl2O2Z1bmN0aW9uIHc1KCl7Y29uc3Qg''@;'; put 'put ''Yz1JdigpO2MuaXNQYXJlbnQ9ITAsYy50Vmlldz1udWxsLGMuc2VsZWN0ZWRJbmRleD0tMSxjLmNvbnRleHRMVmlldz1udWxsLGMuZWxlbWVudERlcHRoQ291bnQ9MCxjLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxjLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxjLmJpbmRpbmdSb290SW5kZXg9''@;'; put 'put ''LTEsYy5iaW5kaW5nSW5kZXg9LTEsYy5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIFZ1KCl7cmV0dXJuIENvLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIEE0KGMpe0NvLmxGcmFtZS5zZWxlY3RlZEluZGV4PWN9ZnVuY3Rpb24gUXMoKXtjb25zdCBjPUNvLmxGcmFtZTtyZXR1''@;'; put 'put ''cm4gWTYoYy50VmlldyxjLnNlbGVjdGVkSW5kZXgpfWxldCBsaz0hMDtmdW5jdGlvbiBxNigpe3JldHVybiBsa31mdW5jdGlvbiBmMihjKXtsaz1jfWZ1bmN0aW9uIFJ2KGMsbCl7Zm9yKGxldCBhPWwuZGlyZWN0aXZlU3RhcnQsZD1sLmRpcmVjdGl2ZUVuZDthPGQ7YSsrKXtjb25zdCBmPWMu''@;'; put 'put ''ZGF0YVthXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnYsbmdBZnRlckNvbnRlbnRDaGVja2VkOk0sbmdBZnRlclZpZXdJbml0OkksbmdBZnRlclZpZXdDaGVja2VkOkcsbmdPbkRlc3Ryb3k6aWV9PWY7diYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsdiksTSYm''@;'; put 'put ''KChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsTSksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLE0pKSxJJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxJKSxHJiYoKGMudmlld0hvb2tzPz89W10pLnB1c2goYSxHKSwoYy52aWV3Q2hlY2tIb29rcz8/PVtdKS5wdXNo''@;'; put 'put ''KGEsRykpLG51bGwhPWllJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLGllKX19ZnVuY3Rpb24gTHYoYyxsLGEpe2NrKGMsbCwzLGEpfWZ1bmN0aW9uIE92KGMsbCxhLGQpeygzJmNbVWFdKT09PWEmJmNrKGMsbCxhLGQpfWZ1bmN0aW9uIGRDKGMsbCl7bGV0IGE9Y1tVYV07KDMmYSk9''@;'; put 'put ''PT1sJiYoYSY9MTYzODMsYSs9MSxjW1VhXT1hKX1mdW5jdGlvbiBjayhjLGwsYSxkKXtjb25zdCBmPWQ/Py0xLHY9bC5sZW5ndGgtMTtsZXQgTT0wO2ZvcihsZXQgST12b2lkIDAhPT1kPzY1NTM1JmNbTWZdOjA7STx2O0krKylpZigibnVtYmVyIj09dHlwZW9mIGxbSSsxXSl7aWYoTT1sW0ld''@;'; put 'put ''LG51bGwhPWQmJk0+PWQpYnJlYWt9ZWxzZSBsW0ldPDAmJihjW01mXSs9NjU1MzYpLChNPGZ8fC0xPT1mKSYmKEVWKGMsYSxsLEkpLGNbTWZdPSg0Mjk0OTAxNzYwJmNbTWZdKStJKzIpLEkrK31mdW5jdGlvbiB1ayhjLGwpe3UyKDQsYyxsKTtjb25zdCBhPV9lKG51bGwpO3RyeXtsLmNhbGwo''@;'; put 'put ''Yyl9ZmluYWxseXtfZShhKSx1Mig1LGMsbCl9fWZ1bmN0aW9uIEVWKGMsbCxhLGQpe2NvbnN0IGg9YVtkXTwwLGY9YVtkKzFdLE09Y1toPy1hW2RdOmFbZF1dO2g/Y1tVYV0+PjE0PGNbTWZdPj4xNiYmKDMmY1tVYV0pPT09bCYmKGNbVWFdKz0xNjM4NCx1ayhNLGYpKTp1ayhNLGYpfWNvbnN0''@;'; put 'put ''IGs0PS0xO2NsYXNzIFAxe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmZhY3Rvcnk9bCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9YSx0aGlzLmluamVjdEltcGw9ZH19ZnVuY3Rpb24gUHYoYyl7cmV0dXJuIGMhPT1rNH1mdW5jdGlvbiBYNihjKXtyZXR1cm4g''@;'; put 'put ''MzI3NjcmY31mdW5jdGlvbiBKNihjLGwpe2xldCBhPWZ1bmN0aW9uIFJWKGMpe3JldHVybiBjPj4xNn0oYyksZD1sO2Zvcig7YT4wOylkPWRbbzBdLGEtLTtyZXR1cm4gZH1sZXQgZkM9ITA7ZnVuY3Rpb24gRnYoYyl7Y29uc3QgbD1mQztyZXR1cm4gZkM9YyxsfWNvbnN0IEh2PTI1NSxwQz01''@;'; put 'put ''O2xldCBMVj0wO2NvbnN0IHAyPXt9O2Z1bmN0aW9uIE52KGMsbCl7Y29uc3QgYT1WdihjLGwpO2lmKC0xIT09YSlyZXR1cm4gYTtjb25zdCBkPWxbS2ldO2QuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmplY3RvckluZGV4PWwubGVuZ3RoLGdDKGQuZGF0YSxjKSxnQyhsLG51bGwpLGdDKGQuYmx1''@;'; put 'put ''ZXByaW50LG51bGwpKTtjb25zdCBoPUM1KGMsbCksZj1jLmluamVjdG9ySW5kZXg7aWYoUHYoaCkpe2NvbnN0IHY9WDYoaCksTT1KNihoLGwpLEk9TVtLaV0uZGF0YTtmb3IobGV0IEc9MDtHPDg7RysrKWxbZitHXT1NW3YrR118SVt2K0ddfXJldHVybiBsW2YrOF09aCxmfWZ1bmN0aW9uIGdD''@;'; put 'put ''KGMsbCl7Yy5wdXNoKDAsMCwwLDAsMCwwLDAsMCxsKX1mdW5jdGlvbiBWdihjLGwpe3JldHVybi0xPT09Yy5pbmplY3RvckluZGV4fHxjLnBhcmVudCYmYy5wYXJlbnQuaW5qZWN0b3JJbmRleD09PWMuaW5qZWN0b3JJbmRleHx8bnVsbD09PWxbYy5pbmplY3RvckluZGV4KzhdPy0xOmMuaW5q''@;'; put 'put ''ZWN0b3JJbmRleH1mdW5jdGlvbiBDNShjLGwpe2lmKGMucGFyZW50JiYtMSE9PWMucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIGMucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGE9MCxkPW51bGwsaD1sO2Zvcig7bnVsbCE9PWg7KXtpZihkPXNoKGgpLG51bGw9PT1kKXJldHVybiBrNDtp''@;'; put 'put ''ZihhKyssaD1oW28wXSwtMSE9PWQuaW5qZWN0b3JJbmRleClyZXR1cm4gZC5pbmplY3RvckluZGV4fGE8PDE2fXJldHVybiBrNH1mdW5jdGlvbiBoZChjLGwsYSl7IWZ1bmN0aW9uIE9WKGMsbCxhKXtsZXQgZDsic3RyaW5nIj09dHlwZW9mIGE/ZD1hLmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShQYykmJihkPWFbUGNdKSxudWxsPT1kJiYoZD1hW1BjXT1MVisrKTtjb25zdCBoPWQmSHY7bC5kYXRhW2MrKGg+PnBDKV18PTE8PGh9KGMsbCxhKX1mdW5jdGlvbiBkayhjLGwsYSl7aWYoYSZyYS5PcHRpb25hbHx8dm9pZCAwIT09YylyZXR1cm4gYztNcygpfWZ1bmN0aW9u''@;'; put 'put ''IG9oKGMsbCxhLGQpe2lmKGEmcmEuT3B0aW9uYWwmJnZvaWQgMD09PWQmJihkPW51bGwpLCEoYSYocmEuU2VsZnxyYS5Ib3N0KSkpe2NvbnN0IGg9Y1twY10sZj1fbCh2b2lkIDApO3RyeXtyZXR1cm4gaD9oLmdldChsLGQsYSZyYS5PcHRpb25hbCk6dGgobCxkLGEmcmEuT3B0aW9uYWwpfWZp''@;'; put 'put ''bmFsbHl7X2woZil9fXJldHVybiBkayhkLDAsYSl9ZnVuY3Rpb24gaGsoYyxsLGEsZD1yYS5EZWZhdWx0LGgpe2lmKG51bGwhPT1jKXtpZigyMDQ4JmxbVWFdJiYhKGQmcmEuU2VsZikpe2NvbnN0IHY9ZnVuY3Rpb24gVTMoYyxsLGEsZCxoKXtsZXQgZj1jLHY9bDtmb3IoO251bGwhPT1mJiZu''@;'; put 'put ''dWxsIT09diYmMjA0OCZ2W1VhXSYmISg1MTImdltVYV0pOyl7Y29uc3QgTT1TNShmLHYsYSxkfHJhLlNlbGYscDIpO2lmKE0hPT1wMilyZXR1cm4gTTtsZXQgST1mLnBhcmVudDtpZighSSl7Y29uc3QgRz12W2EyXTtpZihHKXtjb25zdCBpZT1HLmdldChhLHAyLGQpO2lmKGllIT09cDIpcmV0''@;'; put 'put ''dXJuIGllfUk9c2godiksdj12W28wXX1mPUl9cmV0dXJuIGh9KGMsbCxhLGQscDIpO2lmKHYhPT1wMilyZXR1cm4gdn1jb25zdCBmPVM1KGMsbCxhLGQscDIpO2lmKGYhPT1wMilyZXR1cm4gZn1yZXR1cm4gb2gobCxhLGQsaCl9ZnVuY3Rpb24gUzUoYyxsLGEsZCxoKXtjb25zdCBmPWZ1bmN0''@;'; put 'put ''aW9uIFRjKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYy5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGw9Yy5oYXNPd25Qcm9wZXJ0eShQYyk/Y1tQY106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sPj0wP2wmSHY6UTA6bH0oYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGYpe2lmKCFEdihsLGMsZCkpcmV0dXJuIGQmcmEuSG9zdD9kayhoLDAsZCk6b2gobCxhLGQsaCk7dHJ5e2xldCB2O2lmKHY9ZihkKSxudWxsIT12fHxkJnJhLk9wdGlvbmFsKXJldHVybiB2O01zKCl9ZmluYWxseXtvaygpfX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZil7bGV0IHY9bnVs''@;'; put 'put ''bCxNPVZ2KGMsbCksST1rNCxHPWQmcmEuSG9zdD9sW1psXVtyY106bnVsbDtmb3IoKC0xPT09TXx8ZCZyYS5Ta2lwU2VsZikmJihJPS0xPT09TT9DNShjLGwpOmxbTSs4XSxJIT09azQmJng1KGQsITEpPyh2PWxbS2ldLE09WDYoSSksbD1KNihJLGwpKTpNPS0xKTstMSE9PU07KXtjb25zdCBp''@;'; put 'put ''ZT1sW0tpXTtpZihNNShmLE0saWUuZGF0YSkpe2NvbnN0IHVlPWZrKE0sbCxhLHYsZCxHKTtpZih1ZSE9PXAyKXJldHVybiB1ZX1JPWxbTSs4XSxJIT09azQmJng1KGQsbFtLaV0uZGF0YVtNKzhdPT09RykmJk01KGYsTSxsKT8odj1pZSxNPVg2KEkpLGw9SjYoSSxsKSk6TT0tMX19cmV0dXJu''@;'; put 'put ''IGh9ZnVuY3Rpb24gZmsoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bFtLaV0sTT12LmRhdGFbYys4XSxpZT1CdihNLHYsYSxudWxsPT1kP0VmKE0pJiZmQzpkIT12JiYhISgzJk0udHlwZSksaCZyYS5Ib3N0JiZmPT09TSk7cmV0dXJuIG51bGwhPT1pZT9ENChsLHYsaWUsTSk6cDJ9ZnVuY3Rpb24g''@;'; put 'put ''QnYoYyxsLGEsZCxoKXtjb25zdCBmPWMucHJvdmlkZXJJbmRleGVzLHY9bC5kYXRhLE09MTA0ODU3NSZmLEk9Yy5kaXJlY3RpdmVTdGFydCxpZT1mPj4yMCx5ZT1oP00raWU6Yy5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBFZT1kP006TStpZTtFZTx5ZTtFZSsrKXtjb25zdCBqZT12W0VlXTtpZihF''@;'; put 'put ''ZTxJJiZhPT09amV8fEVlPj1JJiZqZS50eXBlPT09YSlyZXR1cm4gRWV9aWYoaCl7Y29uc3QgRWU9dltJXTtpZihFZSYmVmMoRWUpJiZFZS50eXBlPT09YSlyZXR1cm4gSX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBENChjLGwsYSxkKXtsZXQgaD1jW2FdO2NvbnN0IGY9bC5kYXRhO2lmKGZ1bmN0''@;'; put 'put ''aW9uIFRWKGMpe3JldHVybiBjIGluc3RhbmNlb2YgUDF9KGgpKXtjb25zdCB2PWg7di5yZXNvbHZpbmcmJmZ1bmN0aW9uICQwKGMsbCl7dGhyb3cgbCYmbC5qb2luKCIgPiAiKSxuZXcgUW4oLTIwMCxjKX0oZnVuY3Rpb24gVGEoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5uYW1l''@;'; put 'put ''fHxjLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50eXBlP2MudHlwZS5uYW1lfHxjLnR5cGUudG9TdHJpbmcoKTpDYShjKX0oZlthXSkpO2NvbnN0IE09RnYodi5jYW5TZWVWaWV3UHJvdmlkZXJzKTt2LnJlc29sdmluZz0hMDtj''@;'; put 'put ''b25zdCBHPXYuaW5qZWN0SW1wbD9fbCh2LmluamVjdEltcGwpOm51bGw7RHYoYyxkLHJhLkRlZmF1bHQpO3RyeXtoPWNbYV09di5mYWN0b3J5KHZvaWQgMCxmLGMsZCksbC5maXJzdENyZWF0ZVBhc3MmJmE+PWQuZGlyZWN0aXZlU3RhcnQmJmZ1bmN0aW9uIHhWKGMsbCxhKXtjb25zdHtuZ09u''@;'; put 'put ''Q2hhbmdlczpkLG5nT25Jbml0OmgsbmdEb0NoZWNrOmZ9PWwudHlwZS5wcm90b3R5cGU7aWYoZCl7Y29uc3Qgdj1HQShsKTsoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyx2KSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLHYpfWgmJihhLnByZU9yZGVySG9va3M/Pz1b''@;'; put 'put ''XSkucHVzaCgwLWMsaCksZiYmKChhLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChjLGYpLChhLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGMsZikpfShhLGZbYV0sbCl9ZmluYWxseXtudWxsIT09RyYmX2woRyksRnYoTSksdi5yZXNvbHZpbmc9ITEsb2soKX19cmV0dXJuIGh9ZnVu''@;'; put 'put ''Y3Rpb24gTTUoYyxsLGEpe3JldHVybiEhKGFbbCsoYz4+cEMpXSYxPDxjKX1mdW5jdGlvbiB4NShjLGwpe3JldHVybiEoYyZyYS5TZWxmfHxjJnJhLkhvc3QmJmwpfWNsYXNzIEJ1e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdE5vZGU9bCx0aGlzLl9sVmlldz1hfWdldChsLGEsZCl7cmV0dXJu''@;'; put 'put ''IGhrKHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LGwsbzUoZCksYSl9fWZ1bmN0aW9uIFEwKCl7cmV0dXJuIG5ldyBCdSh1bCgpLGRpKCkpfWZ1bmN0aW9uIFlzKGMpe3JldHVybiBOcygoKT0+e2NvbnN0IGw9Yy5wcm90b3R5cGUuY29uc3RydWN0b3IsYT1sW2ppXXx8RGYobCksZD1PYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlO2xldCBoPU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtoJiZoIT09ZDspe2NvbnN0IGY9aFtqaV18fERmKGgpO2lmKGYmJmYhPT1hKXJldHVybiBmO2g9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpfXJldHVybiBmPT5uZXcgZn0p''@;'; put 'put ''fWZ1bmN0aW9uIERmKGMpe3JldHVybiBibChjKT8oKT0+e2NvbnN0IGw9RGYoWWkoYykpO3JldHVybiBsJiZsKCl9Om11KGMpfWZ1bmN0aW9uIHNoKGMpe2NvbnN0IGw9Y1tLaV0sYT1sLnR5cGU7cmV0dXJuIDI9PT1hP2wuZGVjbFROb2RlOjE9PT1hP2NbcmNdOm51bGx9ZnVuY3Rpb24gSWYo''@;'; put 'put ''Yyl7cmV0dXJuIGZ1bmN0aW9uIFBWKGMsbCl7aWYoImNsYXNzIj09PWwpcmV0dXJuIGMuY2xhc3NlcztpZigic3R5bGUiPT09bClyZXR1cm4gYy5zdHlsZXM7Y29uc3QgYT1jLmF0dHJzO2lmKGEpe2NvbnN0IGQ9YS5sZW5ndGg7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9YVtoXTtpZihk''@;'; put 'put ''NShmKSlicmVhaztpZigwPT09ZiloKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBmKWZvcihoKys7aDxkJiYic3RyaW5nIj09dHlwZW9mIGFbaF07KWgrKztlbHNle2lmKGY9PT1sKXJldHVybiBhW2grMV07aCs9Mn19fXJldHVybiBudWxsfSh1bCgpLGMpfWZ1bmN0aW9uIHdDKGMsbD1u''@;'; put 'put ''dWxsLGE9bnVsbCxkKXtjb25zdCBoPVI0KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gUjQoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHx0cyx6dyhjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgYz92b2lkIDA6UHIoYykpLG5ldyBjZChmLGx8fEgzKCksZHx8bnVsbCxoKX1sZXQgRHM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5USFJPV19JRl9OT1RfRk9VTkQ9SzB9c3RhdGlje3RoaXMuTlVMTD1uZXcgdTV9c3RhdGljIGNyZWF0ZShhLGQpe2lmKEFycmF5LmlzQXJyYXkoYSkp''@;'; put 'put ''cmV0dXJuIHdDKHtuYW1lOiIifSxkLGEsIiIpO3tjb25zdCBoPWEubmFtZT8/IiI7cmV0dXJuIHdDKHtuYW1lOmh9LGEucGFyZW50LGEucHJvdmlkZXJzLGgpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+eHIoTDMpfSl9''@;'; put 'put ''c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189LTF9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBBNShjKXtyZXR1cm4gYy5uZ09yaWdpbmFsRXJyb3J9Y2xhc3MgZzJ7Y29uc3RydWN0b3IoKXt0aGlzLl9jb25zb2xlPWNvbnNvbGV9aGFuZGxlRXJyb3IobCl7Y29uc3QgYT10aGlzLl9maW5k''@;'; put 'put ''T3JpZ2luYWxFcnJvcihsKTt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsbCksYSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGEpfV9maW5kT3JpZ2luYWxFcnJvcihsKXtsZXQgYT1sJiZBNShsKTtmb3IoO2EmJkE1KGEpOylhPUE1KGEpO3JldHVybiBhfHxudWxs''@;'; put 'put ''fX1jb25zdCB2az1uZXcgTXQoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmZpKGcyKS5oYW5kbGVFcnJvci5iaW5kKHZvaWQgMCl9KTtsZXQgazU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1XM31zdGF0aWN7dGhpcy5fX05HX0VOVl9JRF9f''@;'; put 'put ''PWE9PmF9fXJldHVybiBjfSkoKTtjbGFzcyBaMyBleHRlbmRzIGs1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fbFZpZXc9bH1vbkRlc3Ryb3kobCl7cmV0dXJuIEF2KHRoaXMuX2xWaWV3LGwpLCgpPT5mdW5jdGlvbiBrdihjLGwpe2lmKG51bGw9PT1jW28yXSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''YT1jW28yXS5pbmRleE9mKGwpOy0xIT09YSYmY1tvMl0uc3BsaWNlKGEsMSl9KHRoaXMuX2xWaWV3LGwpfX1mdW5jdGlvbiBXMygpe3JldHVybiBuZXcgWjMoZGkoKSl9ZnVuY3Rpb24gTlYoKXtyZXR1cm4gTDQodWwoKSxkaSgpKX1mdW5jdGlvbiBMNChjLGwpe3JldHVybiBuZXcgSmkoTDAo''@;'; put 'put ''YyxsKSl9bGV0IEppPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5uYXRpdmVFbGVtZW50PWF9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189TlZ9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBiayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEppP2MubmF0aXZlRWxlbWVudDpj''@;'; put 'put ''fWZ1bmN0aW9uIENDKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgS3I9Y2xhc3MgVlYgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsPSExKXtzdXBlcigpLHRoaXMuZGVzdHJveVJlZj12b2lkIDAsdGhpcy5fX2lzQXN5bmM9bCxNdigpJiYodGhpcy5kZXN0cm95''@;'; put 'put ''UmVmPWZpKGs1LHtvcHRpb25hbDohMH0pPz92b2lkIDApfWVtaXQobCl7Y29uc3QgYT1fZShudWxsKTt0cnl7c3VwZXIubmV4dChsKX1maW5hbGx5e19lKGEpfX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLHY9ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2Nv''@;'; put 'put ''bnN0IEk9bDtoPUkubmV4dD8uYmluZChJKSxmPUkuZXJyb3I/LmJpbmQoSSksdj1JLmNvbXBsZXRlPy5iaW5kKEkpfXRoaXMuX19pc0FzeW5jJiYoZj1DQyhmKSxoJiYoaD1DQyhoKSksdiYmKHY9Q0ModikpKTtjb25zdCBNPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxl''@;'; put 'put ''dGU6dn0pO3JldHVybiBsIGluc3RhbmNlb2YgcXQmJmwuYWRkKE0pLE19fTtmdW5jdGlvbiBCVigpe3JldHVybiB0aGlzLl9yZXN1bHRzW1N5bWJvbC5pdGVyYXRvcl0oKX1jbGFzcyBmZHtnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IEtyfWNvbnN0cnVjdG9yKGw9''@;'; put 'put ''ITEpe3RoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5PWwsdGhpcy5kaXJ0eT0hMCx0aGlzLl9vbkRpcnR5PXZvaWQgMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hMSx0aGlzLl9jaGFuZ2VzPXZvaWQgMCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAw''@;'; put 'put ''LHRoaXMubGFzdD12b2lkIDA7Y29uc3QgYT1mZC5wcm90b3R5cGU7YVtTeW1ib2wuaXRlcmF0b3JdfHwoYVtTeW1ib2wuaXRlcmF0b3JdPUJWKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9y''@;'; put 'put ''ZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7dGhpcy5kaXJ0eT0hMTtjb25zdCBkPWZ1bmN0aW9uIG4wKGMpe3JldHVybiBjLmZsYXQoTnVtYmVy''@;'; put 'put ''LlBPU0lUSVZFX0lORklOSVRZKX0obCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24gZ2YoYyxsLGEpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2xldCBoPWNbZF0sZj1sW2RdO2lmKGEmJihoPWEoaCksZj1hKGYp''@;'; put 'put ''KSxmIT09aClyZXR1cm4hMX1yZXR1cm4hMH0odGhpcy5fcmVzdWx0cyxkLGEpKSYmKHRoaXMuX3Jlc3VsdHM9ZCx0aGlzLmxlbmd0aD1kLmxlbmd0aCx0aGlzLmxhc3Q9ZFt0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PWRbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3ZvaWQgMCE9PXRoaXMuX2No''@;'; put 'put ''YW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1vbkRpcnR5KGwpe3RoaXMuX29uRGlydHk9bH1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT8uKCl9ZGVzdHJv''@;'; put 'put ''eSgpe3ZvaWQgMCE9PXRoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fY2hhbmdlcy51bnN1YnNjcmliZSgpKX19ZnVuY3Rpb24gWnYoYyl7cmV0dXJuISgxMjgmfmMuZmxhZ3MpfWNvbnN0IFNDPW5ldyBNYXA7bGV0IHpWPTA7Y29uc3QgeEM9Il9fbmdDb250''@;'; put 'put ''ZXh0X18iO2Z1bmN0aW9uIGp1KGMsbCl7RnUobCk/KGNbeENdPWxbdzBdLGZ1bmN0aW9uIFpWKGMpe1NDLnNldChjW3cwXSxjKX0obCkpOmNbeENdPWx9ZnVuY3Rpb24gRWsoYyl7cmV0dXJuIEFrKGNbU2ZdKX1mdW5jdGlvbiBUayhjKXtyZXR1cm4gQWsoY1tOY10pfWZ1bmN0aW9uIEFrKGMp''@;'; put 'put ''e2Zvcig7bnVsbCE9PWMmJiFIdShjKTspYz1jW05jXTtyZXR1cm4gY31sZXQgVEM7ZnVuY3Rpb24gWTMoKXtpZih2b2lkIDAhPT1UQylyZXR1cm4gVEM7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3IFFuKDIxMCwhMSl9Y29uc3QgJHY9bmV3IE10KCIi''@;'; put 'put ''LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5zQn0pLHNCPSJuZyIsUGs9bmV3IE10KCIiKSxpbz1uZXcgTXQoIiIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxGaz1uZXcgTXQoIiIpLEw1PW5ldyBNdCgiIix7cHJvdmlkZWRJbjoicm9vdCIs''@;'; put 'put ''ZmFjdG9yeTooKT0+WTMoKS5ib2R5Py5xdWVyeVNlbGVjdG9yKCJbbmdDc3BOb25jZV0iKT8uZ2V0QXR0cmlidXRlKCJuZ0NzcE5vbmNlIil8fG51bGx9KTtsZXQgTms9KCk9Pm51bGw7ZnVuY3Rpb24gUkMoYyxsLGE9ITEpe3JldHVybiBOayhjLGwsYSl9Y29uc3Qgams9bmV3IE10KCIiLHtw''@;'; put 'put ''cm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pO2xldCBRdixleTtmdW5jdGlvbiBGNShjKXtyZXR1cm4gZnVuY3Rpb24gSEMoKXtpZih2b2lkIDA9PT1RdiYmKFF2PW51bGwsVnQudHJ1c3RlZFR5cGVzKSl0cnl7UXY9VnQudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxh''@;'; put 'put ''ciIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gUXZ9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gTkMoKXtpZih2b2lkIDA9PT1leSYmKGV5PW51bGwsVnQudHJ1c3RlZFR5cGVzKSl0cnl7ZXk9VnQu''@;'; put 'put ''dHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBleX1mdW5jdGlvbiBVayhjKXtyZXR1cm4gTkMoKT8uY3JlYXRlSFRNTChj''@;'; put 'put ''KXx8Y31mdW5jdGlvbiBXayhjKXtyZXR1cm4gTkMoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIFlre2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJv''@;'; put 'put ''cGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7cGF9KWB9fWZ1bmN0aW9uIG0yKGMpe3JldHVybiBjIGluc3RhbmNlb2YgWWs/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24g''@;'; put 'put ''SDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIEdrKGMpe3JldHVybiBjIGluc3RhbmNlb2YgWWsmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVsbCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJl''@;'; put 'put ''ZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7cGF9KWApfXJldHVybiBhPT09bH1jbGFzcyAka3tjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25z''@;'; put 'put ''dCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKEY1KGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNh''@;'; put 'put ''dGNoe3JldHVybiBudWxsfX19Y2xhc3MgVEJ7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVs''@;'; put 'put ''ZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9RjUobCksYX19Y29uc3QgQUI9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rp''@;'; put 'put ''b24gQkMoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChBQik/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBMZihjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIGE4KC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEg''@;'; put 'put ''b2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBxaz1MZigiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLFhrPUxmKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksSms9TGYoInJw''@;'; put 'put ''LHJ0IiksakM9YTgocWssYTgoWGssTGYoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlu''@;'; put 'put ''cyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLGE4KEprLExmKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJl''@;'; put 'put ''LHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksYTgoSmssWGspKSx6Qz1MZigiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpo''@;'; put 'put ''cmVmIiksUWs9YTgoekMsTGYoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZh''@;'; put 'put ''dWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9s''@;'; put 'put ''ZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLExmKCJh''@;'; put 'put ''cmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1k''@;'; put 'put ''ZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1ncmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJp''@;'; put 'put ''YS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1vcmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5''@;'; put 'put ''LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dzcGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1''@;'; put 'put ''ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxrQj1MZigic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3MgZUR7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwLGg9W107''@;'; put 'put ''Zm9yKDthOylpZihhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/ZD10aGlzLnN0YXJ0RWxlbWVudChhKTphLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhhLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZCYmYS5maXJzdENoaWxkKWgucHVz''@;'; put 'put ''aChhKSxhPVJCKGEpO2Vsc2UgZm9yKDthOyl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoYSk7bGV0IGY9SUIoYSk7aWYoZil7YT1mO2JyZWFrfWE9aC5wb3AoKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGwpe2NvbnN0IGE9''@;'; put 'put ''dEQobCkudG9Mb3dlckNhc2UoKTtpZighakMuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFrQi5oYXNPd25Qcm9wZXJ0eShhKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChhKTtjb25zdCBkPWwuYXR0cmlidXRlcztmb3IobGV0''@;'; put 'put ''IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kLml0ZW0oaCksdj1mLm5hbWUsTT12LnRvTG93ZXJDYXNlKCk7aWYoIVFrLmhhc093blByb3BlcnR5KE0pKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgST1mLnZhbHVlO3pDW01dJiYoST1CQyhJKSksdGhpcy5i''@;'; put 'put ''dWYucHVzaCgiICIsdiwnPSInLHJEKEkpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KGwpe2NvbnN0IGE9dEQobCkudG9Mb3dlckNhc2UoKTtqQy5oYXNPd25Qcm9wZXJ0eShhKSYmIXFrLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8i''@;'; put 'put ''KSx0aGlzLmJ1Zi5wdXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChyRChsKSl9fWZ1bmN0aW9uIElCKGMpe2NvbnN0IGw9Yy5uZXh0U2libGluZztpZihsJiZjIT09bC5wcmV2aW91c1NpYmxpbmcpdGhyb3cgbkQobCk7cmV0dXJuIGx9ZnVuY3Rpb24g''@;'; put 'put ''UkIoYyl7Y29uc3QgbD1jLmZpcnN0Q2hpbGQ7aWYobCYmZnVuY3Rpb24gREIoYyxsKXtyZXR1cm4oYy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkhPT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWX0oYyxs''@;'; put 'put ''KSl0aHJvdyBuRChsKTtyZXR1cm4gbH1mdW5jdGlvbiB0RChjKXtjb25zdCBsPWMubm9kZU5hbWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6IkZPUk0ifWZ1bmN0aW9uIG5EKGMpe3JldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1l''@;'; put 'put ''bnQgaXMgY2xvYmJlcmVkOiAke2Mub3V0ZXJIVE1MfWApfWNvbnN0IExCPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxPQj0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gckQoYyl7cmV0dXJuIGMucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoTEIsZnVuY3Rpb24obCl7''@;'; put 'put ''cmV0dXJuIiYjIisoMTAyNCoobC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsobC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShPQixmdW5jdGlvbihsKXtyZXR1cm4iJiMiK2wuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+''@;'; put 'put ''L2csIiZndDsiKX1sZXQgdHk7ZnVuY3Rpb24gVUMoYyl7cmV0dXJuImNvbnRlbnQiaW4gYyYmZnVuY3Rpb24gRkIoYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWMubm9kZU5hbWV9KGMpP2MuY29udGVudDpudWxsfXZhciBONT1mdW5jdGlv''@;'; put 'put ''bihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5IVE1MPTFdPSJIVE1MIixjW2MuU1RZTEU9Ml09IlNUWUxFIixjW2MuU0NSSVBUPTNdPSJTQ1JJUFQiLGNbYy5VUkw9NF09IlVSTCIsY1tjLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixjfShONXx8e30pO2Z1bmN0aW9u''@;'; put 'put ''IFY0KGMpe2NvbnN0IGw9bzgoKTtyZXR1cm4gbD9VayhsLnNhbml0aXplKE41LkhUTUwsYyl8fCIiKTpINChjLCJIVE1MIik/VWsobTIoYykpOmZ1bmN0aW9uIFBCKGMsbCl7bGV0IGE9bnVsbDt0cnl7dHk9dHl8fGZ1bmN0aW9uIFZDKGMpe2NvbnN0IGw9bmV3IFRCKGMpO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBLaygpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKEY1KCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyAkayhsKTpsfShjKTtsZXQgZD1sP1N0cmluZyhsKToiIjthPXR5LmdldEluZXJ0Qm9keUVsZW1lbnQoZCk7''@;'; put 'put ''bGV0IGg9NSxmPWQ7ZG97aWYoMD09PWgpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2gtLSxkPWYsZj1hLmlubmVySFRNTCxhPXR5LmdldEluZXJ0Qm9keUVsZW1lbnQoZCl9d2hpbGUoZCE9PWYpO3JldHVy''@;'; put 'put ''biBGNSgobmV3IGVEKS5zYW5pdGl6ZUNoaWxkcmVuKFVDKGEpfHxhKSl9ZmluYWxseXtpZihhKXtjb25zdCBkPVVDKGEpfHxhO2Zvcig7ZC5maXJzdENoaWxkOylkLnJlbW92ZUNoaWxkKGQuZmlyc3RDaGlsZCl9fX0oWTMoKSxDYShjKSl9ZnVuY3Rpb24gWkMoYyl7Y29uc3QgbD1vOCgpO3Jl''@;'; put 'put ''dHVybiBsP2wuc2FuaXRpemUoTjUuVVJMLGMpfHwiIjpINChjLCJVUkwiKT9tMihjKTpCQyhDYShjKSl9ZnVuY3Rpb24gaUQoYyl7Y29uc3QgbD1vOCgpO2lmKGwpcmV0dXJuIFdrKGwuc2FuaXRpemUoTjUuUkVTT1VSQ0VfVVJMLGMpfHwiIik7aWYoSDQoYywiUmVzb3VyY2VVUkwiKSlyZXR1''@;'; put 'put ''cm4gV2sobTIoYykpO3Rocm93IG5ldyBRbig5MDQsITEpfWZ1bmN0aW9uIG84KCl7Y29uc3QgYz1kaSgpO3JldHVybiBjJiZjW0wxXS5zYW5pdGl6ZXJ9Y29uc3QgekI9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxVQj0vKDx8PikvZyxaQj0iXHUyMDBiJDFcdTIwMGIiO2Z1bmN0aW9u''@;'; put 'put ''IHFDKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gJDMoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudH1mdW5jdGlvbiBGMShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP2MoKTpjfXZhciBLMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9y''@;'; put 'put ''dGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShLM3x8e30pO2xldCBYQztmdW5jdGlvbiBKQyhjLGwpe3JldHVybiBYQyhjLGwpfWZ1bmN0aW9uIEI1KGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsdj0hMTtIdShkKT9mPWQ6RnUoZCkmJih2PSEw''@;'; put 'put ''LGQ9ZFtVbF0pO2NvbnN0IE09Q2woZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/b3kobCxhLE0pOlo0KGwsYSxNLGh8fG51bGwsITApOjE9PT1jJiZudWxsIT09YT9aNChsLGEsTSxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiBkOChjLGwsYSl7Y29uc3QgZD1xMyhjLGwpO2QmJmZ1bmN0''@;'; put 'put ''aW9uIGw4KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxNLHYpOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKE0pLG51bGwhPWYmJmZ1bmN0aW9uIG5qKGMsbCxhLGQsaCl7Y29uc3QgZj1hW3Z1XTtmIT09Q2woYSkmJkI1KGwsYyxkLGYsaCk7Zm9yKGxldCBNPWdjO008''@;'; put 'put ''YS5sZW5ndGg7TSsrKXtjb25zdCBJPWFbTV07c3koSVtLaV0sSSxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIGVTKGMsbCl7cmV0dXJuIGMuY3JlYXRlQ29tbWVudChmdW5jdGlvbiBWNShjKXtyZXR1cm4gYy5yZXBsYWNlKHpCLGw9PmwucmVwbGFjZShVQixaQikpfShsKSl9ZnVu''@;'; put 'put ''Y3Rpb24gejQoYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiBmRChjLGwpe2xbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDEpLHN5KGMsbCxsW3lvXSwyLG51bGwsbnVsbCl9ZnVuY3Rpb24gblMoYyxsKXtjb25zdCBhPWNbVjNdLGQ9YS5p''@;'; put 'put ''bmRleE9mKGwpO2Euc3BsaWNlKGQsMSl9ZnVuY3Rpb24gczgoYyxsKXtpZihjLmxlbmd0aDw9Z2MpcmV0dXJuO2NvbnN0IGE9Z2MrbCxkPWNbYV07aWYoZCl7Y29uc3QgaD1kW1M0XTtudWxsIT09aCYmaCE9PWMmJm5TKGgsZCksbD4wJiYoY1thLTFdW05jXT1kW05jXSk7Y29uc3QgZj1PdShj''@;'; put 'put ''LGdjK2wpOyFmdW5jdGlvbiBoRChjLGwpe2ZEKGMsbCksbFtVbF09bnVsbCxsW3JjXT1udWxsfShkW0tpXSxkKTtjb25zdCB2PWZbdWRdO251bGwhPT12JiZ2LmRldGFjaFZpZXcoZltLaV0pLGRbZmNdPW51bGwsZFtOY109bnVsbCxkW1VhXSY9LTEyOX1yZXR1cm4gZH1mdW5jdGlvbiBVNChj''@;'; put 'put ''LGwpe2lmKCEoMjU2JmxbVWFdKSl7Y29uc3QgYT1sW3lvXTthLmRlc3Ryb3lOb2RlJiZzeShjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gSkIoYyl7bGV0IGw9Y1tTZl07aWYoIWwpcmV0dXJuIHJTKGNbS2ldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoRnUobCkpYT1sW1NmXTtlbHNl''@;'; put 'put ''e2NvbnN0IGQ9bFtnY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbTmNdJiZsIT09YzspRnUobCkmJnJTKGxbS2ldLGwpLGw9bFtmY107bnVsbD09PWwmJihsPWMpLEZ1KGwpJiZyUyhsW0tpXSxsKSxhPWwmJmxbTmNdfWw9YX19KGwpfX1mdW5jdGlvbiByUyhjLGwpe2lmKDI1NiZsW1Vh''@;'; put 'put ''XSlyZXR1cm47Y29uc3QgYT1fZShudWxsKTt0cnl7bFtVYV0mPS0xMjksbFtVYV18PTI1NixsW3hmXSYmZnVuY3Rpb24gQShjKXtpZih3ZShjKSxsZShjKSlmb3IobGV0IGw9MDtsPGMucHJvZHVjZXJOb2RlLmxlbmd0aDtsKyspbmUoYy5wcm9kdWNlck5vZGVbbF0sYy5wcm9kdWNlckluZGV4''@;'; put 'put ''T2ZUaGlzW2xdKTtjLnByb2R1Y2VyTm9kZS5sZW5ndGg9Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5sZW5ndGg9Yy5wcm9kdWNlckluZGV4T2ZUaGlzLmxlbmd0aD0wLGMubGl2ZUNvbnN1bWVyTm9kZSYmKGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGg9Yy5saXZlQ29uc3VtZXJJbmRleE9m''@;'; put 'put ''VGhpcy5sZW5ndGg9MCl9KGxbeGZdKSxmdW5jdGlvbiBlaihjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBQMSkpe2NvbnN0IGY9YVtkKzFd''@;'; put 'put ''O2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kz0yKXtjb25zdCBNPWhbZlt2XV0sST1mW3YrMV07dTIoNCxNLEkpO3RyeXtJLmNhbGwoTSl9ZmluYWxseXt1Mig1LE0sSSl9fWVsc2V7dTIoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXt1Mig1LGgsZil9''@;'; put 'put ''fX19fShjLGwpLGZ1bmN0aW9uIHBEKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1gwXTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09dHlwZW9mIGFbZl0pe2NvbnN0IHY9YVtmKzNdO3Y+PTA/ZFt2XSgpOmRbLXZdLnVuc3Vic2NyaWJl''@;'; put 'put ''KCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtYMF09bnVsbCk7Y29uc3QgaD1sW28yXTtpZihudWxsIT09aCl7bFtvMl09bnVsbDtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtLaV0udHlwZSYmbFt5b10uZGVz''@;'; put 'put ''dHJveSgpO2NvbnN0IGQ9bFtTNF07aWYobnVsbCE9PWQmJkh1KGxbZmNdKSl7ZCE9PWxbZmNdJiZuUyhkLGwpO2NvbnN0IGg9bFt1ZF07bnVsbCE9PWgmJmguZGV0YWNoVmlldyhjKX0hZnVuY3Rpb24gV1YoYyl7U0MuZGVsZXRlKGNbdzBdKX0obCl9ZmluYWxseXtfZShhKX19ZnVuY3Rpb24g''@;'; put 'put ''YXkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBpUyhjLGwsYSl7bGV0IGQ9bDtmb3IoO251bGwhPT1kJiY0MCZkLnR5cGU7KWQ9KGw9ZCkucGFyZW50O2lmKG51bGw9PT1kKXJldHVybiBhW1VsXTt7Y29uc3R7Y29tcG9uZW50T2Zmc2V0Omh9PWQ7aWYoaD4tMSl7Y29uc3R7ZW5jYXBzdWxhdGlv''@;'; put 'put ''bjpmfT1jLmRhdGFbZC5kaXJlY3RpdmVTdGFydCtoXTtpZihmPT09SnMuTm9uZXx8Zj09PUpzLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBMMChkLGEpfX0oYyxsLnBhcmVudCxhKX1mdW5jdGlvbiBaNChjLGwsYSxkLGgpe2MuaW5zZXJ0QmVmb3JlKGwsYSxkLGgpfWZ1bmN0aW9uIG95''@;'; put 'put ''KGMsbCxhKXtjLmFwcGVuZENoaWxkKGwsYSl9ZnVuY3Rpb24gZ0QoYyxsLGEsZCxoKXtudWxsIT09ZD9aNChjLGwsYSxkLGgpOm95KGMsbCxhKX1mdW5jdGlvbiBxMyhjLGwpe3JldHVybiBjLnBhcmVudE5vZGUobCl9ZnVuY3Rpb24gdTgoYyxsLGEpe3JldHVybiBYMyhjLGwsYSl9bGV0IHNT''@;'; put 'put ''LFgzPWZ1bmN0aW9uIG9TKGMsbCxhKXtyZXR1cm4gNDAmYy50eXBlP0wwKGMsYSk6bnVsbH07ZnVuY3Rpb24gbDAoYyxsLGEsZCl7Y29uc3QgaD1heShjLGQsbCksZj1sW3lvXSxNPXU4KGQucGFyZW50fHxsW3JjXSxkLGwpO2lmKG51bGwhPWgpaWYoQXJyYXkuaXNBcnJheShhKSlmb3IobGV0''@;'; put 'put ''IEk9MDtJPGEubGVuZ3RoO0krKylnRChmLGgsYVtJXSxNLCExKTtlbHNlIGdEKGYsaCxhLE0sITEpO3ZvaWQgMCE9PXNTJiZzUyhmLGQsbCxhLGgpfWZ1bmN0aW9uIEozKGMsbCl7aWYobnVsbCE9PWwpe2NvbnN0IGE9bC50eXBlO2lmKDMmYSlyZXR1cm4gTDAobCxjKTtpZig0JmEpcmV0dXJu''@;'; put 'put ''IGNTKC0xLGNbbC5pbmRleF0pO2lmKDgmYSl7Y29uc3QgZD1sLmNoaWxkO2lmKG51bGwhPT1kKXJldHVybiBKMyhjLGQpO3tjb25zdCBoPWNbbC5pbmRleF07cmV0dXJuIEh1KGgpP2NTKC0xLGgpOkNsKGgpfX1pZigzMiZhKXJldHVybiBKQyhsLGMpKCl8fENsKGNbbC5pbmRleF0pO3tjb25z''@;'; put 'put ''dCBkPW1EKGMsbCk7cmV0dXJuIG51bGwhPT1kP0FycmF5LmlzQXJyYXkoZCk/ZFswXTpKMyhUNChjW1psXSksZCk6SjMoYyxsLm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtRChjLGwpe3JldHVybiBudWxsIT09bD9jW1psXVtyY10ucHJvamVjdGlvbltsLnByb2plY3Rpb25dOm51bGx9''@;'; put 'put ''ZnVuY3Rpb24gY1MoYyxsKXtjb25zdCBhPWdjK2MrMTtpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV0saD1kW0tpXS5maXJzdENoaWxkO2lmKG51bGwhPT1oKXJldHVybiBKMyhkLGgpfXJldHVybiBsW3Z1XX1mdW5jdGlvbiB1UyhjLGwsYSxkLGgsZix2KXtmb3IoO251bGwhPWE7KXtjb25z''@;'; put 'put ''dCBNPWRbYS5pbmRleF0sST1hLnR5cGU7aWYodiYmMD09PWwmJihNJiZqdShDbChNKSxkKSxhLmZsYWdzfD0yKSwzMiZ+YS5mbGFncylpZig4JkkpdVMoYyxsLGEuY2hpbGQsZCxoLGYsITEpLEI1KGwsYyxoLE0sZik7ZWxzZSBpZigzMiZJKXtjb25zdCBHPUpDKGEsZCk7bGV0IGllO2Zvcig7''@;'; put 'put ''aWU9RygpOylCNShsLGMsaCxpZSxmKTtCNShsLGMsaCxNLGYpfWVsc2UgMTYmST95RChjLGwsZCxhLGgsZik6QjUobCxjLGgsTSxmKTthPXY/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9fWZ1bmN0aW9uIHN5KGMsbCxhLGQsaCxmKXt1UyhhLGQsYy5maXJzdENoaWxkLGwsaCxmLCExKX1mdW5j''@;'; put 'put ''dGlvbiB5RChjLGwsYSxkLGgsZil7Y29uc3Qgdj1hW1psXSxJPXZbcmNdLnByb2plY3Rpb25bZC5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KEkpKWZvcihsZXQgRz0wO0c8SS5sZW5ndGg7RysrKUI1KGwsYyxoLElbR10sZik7ZWxzZXtsZXQgRz1JO2NvbnN0IGllPXZbZmNdO1p2KGQp''@;'; put 'put ''JiYoRy5mbGFnc3w9MTI4KSx1UyhjLGwsRyxpZSxoLGYsITApfX1mdW5jdGlvbiB3RChjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRBdHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIENEKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNz''@;'; put 'put ''ZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmbTQoYyxsLGQpLG51bGwhPT1oJiZ3RChjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIF9EKGMsbCxhKXtjLnNldEF0dHJpYnV0ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1jb25zdCBSbz17fTtmdW5jdGlvbiBmZShjPTEpe2RTKGxzKCksZGkoKSxW''@;'; put 'put ''dSgpK2MsITEpfWZ1bmN0aW9uIGRTKGMsbCxhLGQpe2lmKCFkKWlmKDMmfmxbVWFdKXtjb25zdCBmPWMucHJlT3JkZXJIb29rcztudWxsIT09ZiYmT3YobCxmLDAsYSl9ZWxzZXtjb25zdCBmPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1mJiZMdihsLGYsYSl9QTQoYSl9ZnVuY3Rpb24g''@;'; put 'put ''R2UoYyxsPXJhLkRlZmF1bHQpe2NvbnN0IGE9ZGkoKTtyZXR1cm4gbnVsbD09PWE/eHIoYyxsKTpoayh1bCgpLGEsWWkoYyksbCl9ZnVuY3Rpb24gTUQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9X2UobnVsbCk7dHJ5e2xldCBNPW51bGw7aCZObi5TaWduYWxCYXNlZCYmKE09bFtkXVtnZV0pLG51''@;'; put 'put ''bGwhPT1NJiZ2b2lkIDAhPT1NLnRyYW5zZm9ybUZuJiYoZj1NLnRyYW5zZm9ybUZuKGYpKSxoJk5uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtJiYoZj1jLmlucHV0VHJhbnNmb3Jtc1tkXS5jYWxsKGwsZikpLG51bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxNLGYsYSxkKTpZQShs''@;'; put 'put ''LE0sZCxmKX1maW5hbGx5e19lKHYpfX1mdW5jdGlvbiBseShjLGwsYSxkLGgsZix2LE0sSSxHLGllKXtjb25zdCB1ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB1ZVtVbF09aCx1ZVtVYV09MjA0fGQsKG51bGwhPT1HfHxjJiYyMDQ4JmNbVWFdKSYmKHVlW1VhXXw9MjA0OCksZUModWUp''@;'; put 'put ''LHVlW2ZjXT11ZVtvMF09Yyx1ZVtjbF09YSx1ZVtMMV09dnx8YyYmY1tMMV0sdWVbeW9dPU18fGMmJmNbeW9dLHVlW3BjXT1JfHxjJiZjW3BjXXx8bnVsbCx1ZVtyY109Zix1ZVt3MF09ZnVuY3Rpb24gVVYoKXtyZXR1cm4gelYrK30oKSx1ZVtudV09aWUsdWVbYTJdPUcsdWVbWmxdPTI9PWwu''@;'; put 'put ''dHlwZT9jW1psXTp1ZSx1ZX1mdW5jdGlvbiBqNShjLGwsYSxkLGgpe2xldCBmPWMuZGF0YVtsXTtpZihudWxsPT09ZilmPWZ1bmN0aW9uIGhTKGMsbCxhLGQsaCl7Y29uc3QgZj1yQygpLHY9aUMoKSxJPWMuZGF0YVtsXT1mdW5jdGlvbiBERChjLGwsYSxkLGgsZil7bGV0IHY9bD9sLmluamVj''@;'; put 'put ''dG9ySW5kZXg6LTEsTT0wO3JldHVybiBfNSgpJiYoTXw9MTI4KSx7dHlwZTphLGluZGV4OmQsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnYsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNl''@;'; put 'put ''dDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6TSxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTpoLGF0dHJzOmYsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3Om51bGwsbmV4dDpu''@;'; put 'put ''dWxsLHByZXY6bnVsbCxwcm9qZWN0aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmwscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91dEhvc3Q6bnVsbCxy''@;'; put 'put ''ZXNpZHVhbENsYXNzZXM6dm9pZCAwLGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9fSgwLHY/ZjpmJiZmLnBhcmVudCxhLGwsZCxoKTtyZXR1cm4gbnVsbD09PWMuZmlyc3RDaGlsZCYmKGMuZmlyc3RDaGlsZD1JKSxudWxsIT09ZiYmKHY/bnVsbD09Zi5jaGlsZCYmbnVsbCE9PUku''@;'; put 'put ''cGFyZW50JiYoZi5jaGlsZD1JKTpudWxsPT09Zi5uZXh0JiYoZi5uZXh0PUksSS5wcmV2PWYpKSxJfShjLGwsYSxkLGgpLGZ1bmN0aW9uIHlWKCl7cmV0dXJuIENvLmxGcmFtZS5pbkkxOG59KCkmJihmLmZsYWdzfD0zMik7ZWxzZSBpZig2NCZmLnR5cGUpe2YudHlwZT1hLGYudmFsdWU9ZCxm''@;'; put 'put ''LmF0dHJzPWg7Y29uc3Qgdj1mdW5jdGlvbiAkNigpe2NvbnN0IGM9Q28ubEZyYW1lLGw9Yy5jdXJyZW50VE5vZGU7cmV0dXJuIGMuaXNQYXJlbnQ/bDpsLnBhcmVudH0oKTtmLmluamVjdG9ySW5kZXg9bnVsbD09PXY/LTE6di5pbmplY3RvckluZGV4fXJldHVybiBoMihmLCEwKSxmfWZ1bmN0''@;'; put 'put ''aW9uIGg4KGMsbCxhLGQpe2lmKDA9PT1hKXJldHVybi0xO2NvbnN0IGg9bC5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxhO2YrKylsLnB1c2goZCksYy5ibHVlcHJpbnQucHVzaChkKSxjLmRhdGEucHVzaChudWxsKTtyZXR1cm4gaH1mdW5jdGlvbiB4RChjLGwsYSxkLGgpe2NvbnN0IGY9VnUoKSx2''@;'; put 'put ''PTImZDt0cnl7QTQoLTEpLHYmJmwubGVuZ3RoPndvJiZkUyhjLGwsd28sITEpLHUyKHY/MjowLGgpLGEoZCxoKX1maW5hbGx5e0E0KGYpLHUyKHY/MzoxLGgpfX1mdW5jdGlvbiBmUyhjLGwsYSl7aWYocnUobCkpe2NvbnN0IGQ9X2UobnVsbCk7dHJ5e2NvbnN0IGY9bC5kaXJlY3RpdmVFbmQ7''@;'; put 'put ''Zm9yKGxldCB2PWwuZGlyZWN0aXZlU3RhcnQ7djxmO3YrKyl7Y29uc3QgTT1jLmRhdGFbdl07TS5jb250ZW50UXVlcmllcyYmTS5jb250ZW50UXVlcmllcygxLGFbdl0sdil9fWZpbmFsbHl7X2UoZCl9fX1mdW5jdGlvbiBwUyhjLGwsYSl7dGsoKSYmKGZ1bmN0aW9uIGhqKGMsbCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9YS5kaXJlY3RpdmVTdGFydCxmPWEuZGlyZWN0aXZlRW5kO0VmKGEpJiZmdW5jdGlvbiB5aihjLGwsYSl7Y29uc3QgZD1MMChsLGMpLGg9Y3koYSk7bGV0IHY9MTY7YS5zaWduYWxzP3Y9NDA5NjphLm9uUHVzaCYmKHY9NjQpO2NvbnN0IE09ZjgoYyxseShjLGgsbnVsbCx2LGQsbCxu''@;'; put 'put ''dWxsLGNbTDFdLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihkLGEpLG51bGwsbnVsbCxudWxsKSk7Y1tsLmluZGV4XT1NfShsLGEsYy5kYXRhW2grYS5jb21wb25lbnRPZmZzZXRdKSxjLmZpcnN0Q3JlYXRlUGFzc3x8TnYoYSxsKSxqdShkLGwpO2NvbnN0IHY9YS5pbml0aWFsSW5w''@;'; put 'put ''dXRzO2ZvcihsZXQgTT1oO008ZjtNKyspe2NvbnN0IEk9Yy5kYXRhW01dLEc9RDQobCxjLE0sYSk7anUoRyxsKSxudWxsIT09diYmdXkoMCxNLWgsRyxJLDAsdiksVmMoSSkmJihPMShhLmluZGV4LGwpW2NsXT1ENChsLGMsTSxhKSl9fShjLGwsYSxMMChhLGwpKSwhKDY0Jn5hLmZsYWdzKSYm''@;'; put 'put ''T0QoYyxsLGEpKX1mdW5jdGlvbiBnUyhjLGwsYT1MMCl7Y29uc3QgZD1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWQpe2xldCBoPWwuaW5kZXgrMTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrPTIpe2NvbnN0IHY9ZFtmKzFdLE09LTE9PT12P2EobCxjKTpjW3ZdO2NbaCsrXT1NfX19ZnVuY3Rp''@;'; put 'put ''b24gY3koYyl7Y29uc3QgbD1jLnRWaWV3O3JldHVybiBudWxsPT09bHx8bC5pbmNvbXBsZXRlRmlyc3RQYXNzP2MudFZpZXc9bVMoMSxudWxsLGMudGVtcGxhdGUsYy5kZWNscyxjLnZhcnMsYy5kaXJlY3RpdmVEZWZzLGMucGlwZURlZnMsYy52aWV3UXVlcnksYy5zY2hlbWFzLGMuY29uc3Rz''@;'; put 'put ''LGMuaWQpOmx9ZnVuY3Rpb24gbVMoYyxsLGEsZCxoLGYsdixNLEksRyxpZSl7Y29uc3QgdWU9d28rZCx5ZT11ZStoLEVlPWZ1bmN0aW9uIGlqKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGw7ZCsrKWEucHVzaChkPGM/bnVsbDpSbyk7cmV0dXJuIGF9KHVlLHllKSxqZT0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgRz9HKCk6RztyZXR1cm4gRWVbS2ldPXt0eXBlOmMsYmx1ZXByaW50OkVlLHRlbXBsYXRlOmEscXVlcmllczpudWxsLHZpZXdRdWVyeTpNLGRlY2xUTm9kZTpsLGRhdGE6RWUuc2xpY2UoKS5maWxsKG51bGwsdWUpLGJpbmRpbmdTdGFydEluZGV4OnVlLGV4cGFuZG9TdGFy''@;'; put 'put ''dEluZGV4OnllLGhvc3RCaW5kaW5nT3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hlY2tIb29rczpudWxsLGNvbnRl''@;'; put 'put ''bnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGY/ZigpOmYscGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiB2P3YoKTp2LGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOkksY29uc3RzOmplLGluY29tcGxldGVGaXJzdFBhc3M6ITEsc3NySWQ6aWV9fWxldCBFRD0oKT0+bnVsbDtmdW5jdGlvbiBJRChjLGwsYSxkLGgp''@;'; put 'put ''e2ZvcihsZXQgZiBpbiBsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShmKSljb250aW51ZTtjb25zdCB2PWxbZl07aWYodm9pZCAwPT09diljb250aW51ZTtkPz89e307bGV0IE0sST1Obi5Ob25lO0FycmF5LmlzQXJyYXkodik/KE09dlswXSxJPXZbMV0pOk09djtsZXQgRz1mO2lmKG51bGwhPT1o''@;'; put 'put ''KXtpZighaC5oYXNPd25Qcm9wZXJ0eShmKSljb250aW51ZTtHPWhbZl19MD09PWM/UkQoZCxhLEcsTSxJKTpSRChkLGEsRyxNKX1yZXR1cm4gZH1mdW5jdGlvbiBSRChjLGwsYSxkLGgpe2xldCBmO2MuaGFzT3duUHJvcGVydHkoYSk/KGY9Y1thXSkucHVzaChsLGQpOmY9Y1thXT1bbCxkXSx2''@;'; put 'put ''b2lkIDAhPT1oJiZmLnB1c2goaCl9ZnVuY3Rpb24gRjAoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBJPUwwKGwsYSk7bGV0IGllLEc9bC5pbnB1dHM7IU0mJm51bGwhPUcmJihpZT1HW2RdKT8oQ1MoYyxhLGllLGQsaCksRWYobCkmJmZ1bmN0aW9uIGNqKGMsbCl7Y29uc3QgYT1PMShsLGMpOzE2''@;'; put 'put ''JmFbVWFdfHwoYVtVYV18PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIGxqKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJmb3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhU''@;'; put 'put ''TUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPXY/dihoLGwudmFsdWV8fCIiLGQpOmgsZi5zZXRQcm9wZXJ0eShJLGQsaCkpfWZ1bmN0aW9uIHZTKGMsbCxhLGQpe2lmKHRrKCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVs''@;'; put 'put ''bDp7IiI6LTF9LGY9ZnVuY3Rpb24gZmooYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKyl7Y29uc3Qgdj1hW2ZdO2lmKHk0KGwsdi5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxWYyh2KSlp''@;'; put 'put ''ZihudWxsIT09di5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IE09W107aD1ofHxuZXcgTWFwLHYuZmluZEhvc3REaXJlY3RpdmVEZWZzKHYsTSxoKSxkLnVuc2hpZnQoLi4uTSx2KSxiUyhjLGwsTS5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KHYpLGJTKGMsbCwwKTtlbHNlIGg9aHx8bmV3''@;'; put 'put ''IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKHYsZCxoKSxkLnB1c2godil9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IHYsTTtudWxsPT09Zj92PU09bnVsbDpbdixNXT1mLG51bGwhPT12JiZ5UyhjLGwsYSx2LGgsTSksaCYmZnVuY3Rpb24gcGooYyxsLGEpe2lm''@;'; put 'put ''KGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9dmYoYS5tZXJnZWRBdHRycyxh''@;'; put 'put ''LmF0dHJzKX1mdW5jdGlvbiB5UyhjLGwsYSxkLGgsZil7Zm9yKGxldCBHPTA7RzxkLmxlbmd0aDtHKyspaGQoTnYoYSxsKSxjLGRbR10udHlwZSk7IWZ1bmN0aW9uIG1qKGMsbCxhKXtjLmZsYWdzfD0xLGMuZGlyZWN0aXZlU3RhcnQ9bCxjLmRpcmVjdGl2ZUVuZD1sK2EsYy5wcm92aWRlcklu''@;'; put 'put ''ZGV4ZXM9bH0oYSxjLmRhdGEubGVuZ3RoLGQubGVuZ3RoKTtmb3IobGV0IEc9MDtHPGQubGVuZ3RoO0crKyl7Y29uc3QgaWU9ZFtHXTtpZS5wcm92aWRlcnNSZXNvbHZlciYmaWUucHJvdmlkZXJzUmVzb2x2ZXIoaWUpfWxldCB2PSExLE09ITEsST1oOChjLGwsZC5sZW5ndGgsbnVsbCk7Zm9y''@;'; put 'put ''KGxldCBHPTA7RzxkLmxlbmd0aDtHKyspe2NvbnN0IGllPWRbR107YS5tZXJnZWRBdHRycz12ZihhLm1lcmdlZEF0dHJzLGllLmhvc3RBdHRycyksdmooYyxhLGwsSSxpZSksZ2ooSSxpZSxoKSxudWxsIT09aWUuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PWllLmhvc3RC''@;'; put 'put ''aW5kaW5nc3x8bnVsbCE9PWllLmhvc3RBdHRyc3x8MCE9PWllLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB1ZT1pZS50eXBlLnByb3RvdHlwZTshdiYmKHVlLm5nT25DaGFuZ2VzfHx1ZS5uZ09uSW5pdHx8dWUubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVz''@;'; put 'put ''aChhLmluZGV4KSx2PSEwKSwhTSYmKHVlLm5nT25DaGFuZ2VzfHx1ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYS5pbmRleCksTT0hMCksSSsrfSFmdW5jdGlvbiBzaihjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSx2PWwuYXR0''@;'; put 'put ''cnMsTT1bXTtsZXQgST1udWxsLEc9bnVsbDtmb3IobGV0IGllPWwuZGlyZWN0aXZlU3RhcnQ7aWU8aDtpZSsrKXtjb25zdCB1ZT1mW2llXSx5ZT1hP2EuZ2V0KHVlKTpudWxsLGplPXllP3llLm91dHB1dHM6bnVsbDtJPUlEKDAsdWUuaW5wdXRzLGllLEkseWU/eWUuaW5wdXRzOm51bGwpLEc9''@;'; put 'put ''SUQoMSx1ZS5vdXRwdXRzLGllLEcsamUpO2NvbnN0IHFlPW51bGw9PT1JfHxudWxsPT09dnx8djQobCk/bnVsbDpGRChJLGllLHYpO00ucHVzaChxZSl9bnVsbCE9PUkmJihJLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYobC5mbGFnc3w9OCksSS5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYm''@;'; put 'put ''KGwuZmxhZ3N8PTE2KSksbC5pbml0aWFsSW5wdXRzPU0sbC5pbnB1dHM9SSxsLm91dHB1dHM9R30oYyxhLGYpfWZ1bmN0aW9uIE9EKGMsbCxhKXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsdj1mdW5jdGlvbiBfVigpe3JldHVybiBDby5sRnJh''@;'; put 'put ''bWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtBNChmKTtmb3IobGV0IE09ZDtNPGg7TSsrKXtjb25zdCBJPWMuZGF0YVtNXSxHPWxbTV07b0MoTSksKG51bGwhPT1JLmhvc3RCaW5kaW5nc3x8MCE9PUkuaG9zdFZhcnN8fG51bGwhPT1JLmhvc3RBdHRycykmJlBEKEksRyl9fWZpbmFs''@;'; put 'put ''bHl7QTQoLTEpLG9DKHYpfX1mdW5jdGlvbiBQRChjLGwpe251bGwhPT1jLmhvc3RCaW5kaW5ncyYmYy5ob3N0QmluZGluZ3MoMSxsKX1mdW5jdGlvbiBiUyhjLGwsYSl7bC5jb21wb25lbnRPZmZzZXQ9YSwoYy5jb21wb25lbnRzPz89W10pLnB1c2gobC5pbmRleCl9ZnVuY3Rpb24gZ2ooYyxs''@;'; put 'put ''LGEpe2lmKGEpe2lmKGwuZXhwb3J0QXMpZm9yKGxldCBkPTA7ZDxsLmV4cG9ydEFzLmxlbmd0aDtkKyspYVtsLmV4cG9ydEFzW2RdXT1jO1ZjKGwpJiYoYVsiIl09Yyl9fWZ1bmN0aW9uIHZqKGMsbCxhLGQsaCl7Yy5kYXRhW2RdPWg7Y29uc3QgZj1oLmZhY3Rvcnl8fChoLmZhY3Rvcnk9bXUo''@;'; put 'put ''aC50eXBlKSksdj1uZXcgUDEoZixWYyhoKSxHZSk7Yy5ibHVlcHJpbnRbZF09dixhW2RdPXYsZnVuY3Rpb24gTEQoYyxsLGEsZCxoKXtjb25zdCBmPWguaG9zdEJpbmRpbmdzO2lmKGYpe2xldCB2PWMuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT12JiYodj1jLmhvc3RCaW5kaW5nT3BDb2Rl''@;'; put 'put ''cz1bXSk7Y29uc3QgTT1+bC5pbmRleDsoZnVuY3Rpb24gZGooYyl7bGV0IGw9Yy5sZW5ndGg7Zm9yKDtsPjA7KXtjb25zdCBhPWNbLS1sXTtpZigibnVtYmVyIj09dHlwZW9mIGEmJmE8MClyZXR1cm4gYX1yZXR1cm4gMH0pKHYpIT1NJiZ2LnB1c2goTSksdi5wdXNoKGEsZCxmKX19KGMsbCxk''@;'; put 'put ''LGg4KGMsYSxoLmhvc3RWYXJzLFJvKSxoKX1mdW5jdGlvbiB1aChjLGwsYSxkLGgsZil7Y29uc3Qgdj1MMChjLGwpOyFmdW5jdGlvbiBfUyhjLGwsYSxkLGgsZix2KXtpZihudWxsPT1mKWMucmVtb3ZlQXR0cmlidXRlKGwsaCxhKTtlbHNle2NvbnN0IE09bnVsbD09dj9DYShmKTp2KGYsZHx8''@;'; put 'put ''IiIsaCk7Yy5zZXRBdHRyaWJ1dGUobCxoLE0sYSl9fShsW3lvXSx2LGYsYy52YWx1ZSxhLGQsaCl9ZnVuY3Rpb24gdXkoYyxsLGEsZCxoLGYpe2NvbnN0IHY9ZltsXTtpZihudWxsIT09dilmb3IobGV0IE09MDtNPHYubGVuZ3RoOylNRChkLGEsdltNKytdLHZbTSsrXSx2W00rK10sdltNKytd''@;'; put 'put ''KX1mdW5jdGlvbiBGRChjLGwsYSl7bGV0IGQ9bnVsbCxoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKDAhPT1mKWlmKDUhPT1mKXtpZigibnVtYmVyIj09dHlwZW9mIGYpYnJlYWs7aWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7bnVsbD09PWQmJihkPVtdKTtjb25zdCB2PWNb''@;'; put 'put ''Zl07Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKz0zKWlmKHZbTV09PT1sKXtkLnB1c2goZix2W00rMV0sdltNKzJdLGFbaCsxXSk7YnJlYWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiB3UyhjLGwsYSxkKXtyZXR1cm5bYywhMCwwLGwsbnVsbCxkLG51bGws''@;'; put 'put ''YSxudWxsLG51bGxdfWZ1bmN0aW9uIEhEKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPV9lKG51bGwpO3RyeXtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grPTIpe2NvbnN0IHY9YVtoKzFdO2lmKC0xIT09dil7Y29uc3QgTT1jLmRhdGFbdl07QjMo''@;'; put 'put ''YVtoXSksTS5jb250ZW50UXVlcmllcygyLGxbdl0sdil9fX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gZjgoYyxsKXtyZXR1cm4gY1tTZl0/Y1tDNF1bTmNdPWw6Y1tTZl09bCxjW0M0XT1sLGx9ZnVuY3Rpb24gZHkoYyxsLGEpe0IzKDApO2NvbnN0IGQ9X2UobnVsbCk7dHJ5e2woYyxhKX1m''@;'; put 'put ''aW5hbGx5e19lKGQpfX1mdW5jdGlvbiBORChjKXtyZXR1cm4gY1tYMF18fChjW1gwXT1bXSl9ZnVuY3Rpb24gcDgoYyl7cmV0dXJuIGMuY2xlYW51cHx8KGMuY2xlYW51cD1bXSl9ZnVuY3Rpb24gVzQoYyxsLGEpe3JldHVybihudWxsPT09Y3x8VmMoYykpJiYoYT1mdW5jdGlvbiBKdyhjKXtm''@;'; put 'put ''b3IoO0FycmF5LmlzQXJyYXkoYyk7KXtpZigib2JqZWN0Ij09dHlwZW9mIGNbejZdKXJldHVybiBjO2M9Y1tVbF19cmV0dXJuIG51bGx9KGFbbC5pbmRleF0pKSxhW3lvXX1mdW5jdGlvbiB6NShjLGwpe2NvbnN0IGE9Y1twY10sZD1hP2EuZ2V0KGcyLG51bGwpOm51bGw7ZCYmZC5oYW5kbGVF''@;'; put 'put ''cnJvcihsKX1mdW5jdGlvbiBDUyhjLGwsYSxkLGgpe2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7KXtjb25zdCB2PWFbZisrXSxNPWFbZisrXSxJPWFbZisrXTtNRChjLmRhdGFbdl0sbFt2XSxkLE0sSSxoKX19ZnVuY3Rpb24gdjIoYyxsLGEpe2NvbnN0IGQ9YjUobCxjKTshZnVuY3Rpb24gZEQo''@;'; put 'put ''YyxsLGEpe2Muc2V0VmFsdWUobCxhKX0oY1t5b10sZCxhKX1mdW5jdGlvbiBfaihjLGwpe2NvbnN0IGE9TzEobCxjKSxkPWFbS2ldOyFmdW5jdGlvbiB3aihjLGwpe2ZvcihsZXQgYT1sLmxlbmd0aDthPGMuYmx1ZXByaW50Lmxlbmd0aDthKyspbC5wdXNoKGMuYmx1ZXByaW50W2FdKX0oZCxh''@;'; put 'put ''KTtjb25zdCBoPWFbVWxdO251bGwhPT1oJiZudWxsPT09YVtudV0mJihhW251XT1SQyhoLGFbcGNdKSksU1MoZCxhLGFbY2xdKX1mdW5jdGlvbiBTUyhjLGwsYSl7SzYobCk7dHJ5e2NvbnN0IGQ9Yy52aWV3UXVlcnk7bnVsbCE9PWQmJmR5KDEsZCxhKTtjb25zdCBoPWMudGVtcGxhdGU7bnVs''@;'; put 'put ''bCE9PWgmJnhEKGMsbCxoLDEsYSksYy5maXJzdENyZWF0ZVBhc3MmJihjLmZpcnN0Q3JlYXRlUGFzcz0hMSksbFt1ZF0/LmZpbmlzaFZpZXdDcmVhdGlvbihjKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZIRChjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJmR5KDIsYy52aWV3UXVlcnksYSk7''@;'; put 'put ''Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIENqKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspX2ooYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxjLmZpcnN0Q3JlYXRl''@;'; put 'put ''UGFzcz0hMSksZH1maW5hbGx5e2xbVWFdJj0tNSx3NSgpfX1mdW5jdGlvbiBVNShjLGwpe3JldHVybiFsfHxudWxsPT09bC5maXJzdENoaWxkfHxadihjKX1mdW5jdGlvbiB2OChjLGwsYSxkPSEwKXtjb25zdCBoPWxbS2ldO2lmKGZ1bmN0aW9uIHRTKGMsbCxhLGQpe2NvbnN0IGg9Z2MrZCxm''@;'; put 'put ''PWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtOY109bCksZDxmLWdjPyhsW05jXT1hW2hdLFBsKGEsZ2MrZCxsKSk6KGEucHVzaChsKSxsW05jXT1udWxsKSxsW2ZjXT1hO2NvbnN0IHY9bFtTNF07bnVsbCE9PXYmJmEhPT12JiZmdW5jdGlvbiBRQihjLGwpe2NvbnN0IGE9Y1tWM107bFtabF0hPT1s''@;'; put 'put ''W2ZjXVtmY11bWmxdJiYoY1tVYV18PXk1Lkhhc1RyYW5zcGxhbnRlZFZpZXdzKSxudWxsPT09YT9jW1YzXT1bbF06YS5wdXNoKGwpfSh2LGwpO2NvbnN0IE09bFt1ZF07bnVsbCE9PU0mJk0uaW5zZXJ0VmlldyhjKSxuQyhsKSxsW1VhXXw9MTI4fShoLGwsYyxhKSxkKXtjb25zdCB2PWNTKGEs''@;'; put 'put ''YyksTT1sW3lvXSxJPXEzKE0sY1t2dV0pO251bGwhPT1JJiZmdW5jdGlvbiBYQihjLGwsYSxkLGgsZil7ZFtVbF09aCxkW3JjXT1sLHN5KGMsZCxhLDEsaCxmKX0oaCxjW3JjXSxNLGwsSSx2KX1jb25zdCBmPWxbbnVdO251bGwhPT1mJiZudWxsIT09Zi5maXJzdENoaWxkJiYoZi5maXJzdENo''@;'; put 'put ''aWxkPW51bGwpfWZ1bmN0aW9uIHk4KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtudWxsIT09ZiYmZC5wdXNoKENsKGYpKSxIdShmKSYmVkQoZixkKTtjb25zdCB2PWEudHlwZTtpZig4JnYpeTgoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZ2KXtj''@;'; put 'put ''b25zdCBNPUpDKGEsbCk7bGV0IEk7Zm9yKDtJPU0oKTspZC5wdXNoKEkpfWVsc2UgaWYoMTYmdil7Y29uc3QgTT1tRChsLGEpO2lmKEFycmF5LmlzQXJyYXkoTSkpZC5wdXNoKC4uLk0pO2Vsc2V7Y29uc3QgST1UNChsW1psXSk7eTgoSVtLaV0sSSxNLGQsITApfX1hPWg/YS5wcm9qZWN0aW9u''@;'; put 'put ''TmV4dDphLm5leHR9cmV0dXJuIGR9ZnVuY3Rpb24gVkQoYyxsKXtmb3IobGV0IGE9Z2M7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXSxoPWRbS2ldLmZpcnN0Q2hpbGQ7bnVsbCE9PWgmJnk4KGRbS2ldLGQsaCxsKX1jW3Z1XSE9PWNbVWxdJiZsLnB1c2goY1t2dV0pfWxldCBCRD1bXTtj''@;'; put 'put ''b25zdCBFaj17dmVyc2lvbjowLGxhc3RDbGVhbkVwb2NoOjAsZGlydHk6ITEscHJvZHVjZXJOb2RlOnZvaWQgMCxwcm9kdWNlckxhc3RSZWFkVmVyc2lvbjp2b2lkIDAscHJvZHVjZXJJbmRleE9mVGhpczp2b2lkIDAsbmV4dFByb2R1Y2VySW5kZXg6MCxsaXZlQ29uc3VtZXJOb2RlOnZvaWQg''@;'; put 'put ''MCxsaXZlQ29uc3VtZXJJbmRleE9mVGhpczp2b2lkIDAsY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlczohMSxjb25zdW1lcklzQWx3YXlzTGl2ZTohMSxwcm9kdWNlck11c3RSZWNvbXB1dGU6KCk9PiExLHByb2R1Y2VyUmVjb21wdXRlVmFsdWU6KCk9Pnt9LGNvbnN1bWVyTWFya2VkRGlydHk6''@;'; put 'put ''KCk9Pnt9LGNvbnN1bWVyT25TaWduYWxSZWFkOigpPT57fSxjb25zdW1lcklzQWx3YXlzTGl2ZTohMCxjb25zdW1lck1hcmtlZERpcnR5OmM9PntHNihjLmxWaWV3KX0sY29uc3VtZXJPblNpZ25hbFJlYWQoKXt0aGlzLmxWaWV3W3hmXT10aGlzfX0sakQ9MTAwO2Z1bmN0aW9uIGh5KGMsbD0h''@;'; put 'put ''MCxhPTApe2NvbnN0IGQ9Y1tMMV0saD1kLnJlbmRlcmVyRmFjdG9yeTtoLmJlZ2luPy4oKTt0cnl7IWZ1bmN0aW9uIFRqKGMsbCl7eFMoYyxsKTtsZXQgYT0wO2Zvcig7VHYoYyk7KXtpZihhPT09akQpdGhyb3cgbmV3IFFuKDEwMywhMSk7YSsrLHhTKGMsMSl9fShjLGEpfWNhdGNoKHYpe3Ro''@;'; put 'put ''cm93IGwmJno1KGMsdiksdn1maW5hbGx5e2guZW5kPy4oKSxkLmlubGluZUVmZmVjdFJ1bm5lcj8uZmx1c2goKX19ZnVuY3Rpb24gQWooYyxsLGEsZCl7Y29uc3QgaD1sW1VhXTtpZighKDI1NiZ+aCkpcmV0dXJuO2xbTDFdLmlubGluZUVmZmVjdFJ1bm5lcj8uZmx1c2goKSxLNihsKTtsZXQg''@;'; put 'put ''dj1udWxsLE09bnVsbDsoZnVuY3Rpb24ga2ooYyl7cmV0dXJuIDIhPT1jLnR5cGV9KShjKSYmKE09ZnVuY3Rpb24gU2ooYyl7cmV0dXJuIGNbeGZdPz9mdW5jdGlvbiBNaihjKXtjb25zdCBsPUJELnBvcCgpPz9PYmplY3QuY3JlYXRlKEVqKTtyZXR1cm4gbC5sVmlldz1jLGx9KGMpfShsKSx2''@;'; put 'put ''PWZ1bmN0aW9uIFUoYyl7cmV0dXJuIGMmJihjLm5leHRQcm9kdWNlckluZGV4PTApLF9lKGMpfShNKSk7dHJ5e2VDKGwpLGZ1bmN0aW9uIHJrKGMpe3JldHVybiBDby5sRnJhbWUuYmluZGluZ0luZGV4PWN9KGMuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1hJiZ4RChjLGwsYSwyLGQpO2Nv''@;'; put 'put ''bnN0IEk9ISgzJn5oKTtpZihJKXtjb25zdCB1ZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09dWUmJkx2KGwsdWUsbnVsbCl9ZWxzZXtjb25zdCB1ZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PXVlJiZPdihsLHVlLDAsbnVsbCksZEMobCwwKX1pZihmdW5jdGlvbiBEaihjKXtmb3IobGV0''@;'; put 'put ''IGw9RWsoYyk7bnVsbCE9PWw7bD1UayhsKSl7aWYoIShsW1VhXSZ5NS5IYXNUcmFuc3BsYW50ZWRWaWV3cykpY29udGludWU7Y29uc3QgYT1sW1YzXTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y1YoYVtkXSl9fX0obCksekQobCwwKSxudWxsIT09Yy5jb250ZW50UXVlcmllcyYmSEQo''@;'; put 'put ''YyxsKSxJKXtjb25zdCB1ZT1jLmNvbnRlbnRDaGVja0hvb2tzO251bGwhPT11ZSYmTHYobCx1ZSl9ZWxzZXtjb25zdCB1ZT1jLmNvbnRlbnRIb29rcztudWxsIT09dWUmJk92KGwsdWUsMSksZEMobCwxKX0hZnVuY3Rpb24gcmooYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdPcENvZGVzO2lm''@;'; put 'put ''KG51bGwhPT1hKXRyeXtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdO2lmKGg8MClBNCh+aCk7ZWxzZXtjb25zdCBmPWgsdj1hWysrZF0sTT1hWysrZF07YlYodixmKSxNKDIsbFtmXSl9fX1maW5hbGx5e0E0KC0xKX19KGMsbCk7Y29uc3QgRz1jLmNvbXBvbmVudHM7''@;'; put 'put ''bnVsbCE9PUcmJlpEKGwsRywwKTtjb25zdCBpZT1jLnZpZXdRdWVyeTtpZihudWxsIT09aWUmJmR5KDIsaWUsZCksSSl7Y29uc3QgdWU9Yy52aWV3Q2hlY2tIb29rcztudWxsIT09dWUmJkx2KGwsdWUpfWVsc2V7Y29uc3QgdWU9Yy52aWV3SG9va3M7bnVsbCE9PXVlJiZPdihsLHVlLDIpLGRD''@;'; put 'put ''KGwsMil9aWYoITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW3Y1XSl7Zm9yKGNvbnN0IHVlIG9mIGxbdjVdKXVlKCk7bFt2NV09bnVsbH1sW1VhXSY9LTczfWNhdGNoKEkpe3Rocm93IEc2KGwpLEl9ZmluYWxseXtudWxsIT09TSYmKGZ1bmN0aW9uIEUo''@;'; put 'put ''YyxsKXtpZihfZShsKSxjJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTm9kZSYmdm9pZCAwIT09Yy5wcm9kdWNlckluZGV4T2ZUaGlzJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uKXtpZihsZShjKSlmb3IobGV0IGE9Yy5uZXh0UHJvZHVjZXJJbmRleDthPGMucHJvZHVjZXJOb2Rl''@;'; put 'put ''Lmxlbmd0aDthKyspbmUoYy5wcm9kdWNlck5vZGVbYV0sYy5wcm9kdWNlckluZGV4T2ZUaGlzW2FdKTtmb3IoO2MucHJvZHVjZXJOb2RlLmxlbmd0aD5jLm5leHRQcm9kdWNlckluZGV4OyljLnByb2R1Y2VyTm9kZS5wb3AoKSxjLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLnBvcCgpLGMucHJv''@;'; put 'put ''ZHVjZXJJbmRleE9mVGhpcy5wb3AoKX19KE0sdiksZnVuY3Rpb24geGooYyl7Yy5sVmlld1t4Zl0hPT1jJiYoYy5sVmlldz1udWxsLEJELnB1c2goYykpfShNKSksdzUoKX19ZnVuY3Rpb24gekQoYyxsKXtmb3IobGV0IGE9RWsoYyk7bnVsbCE9PWE7YT1UayhhKSlmb3IobGV0IGQ9Z2M7ZDxh''@;'; put 'put ''Lmxlbmd0aDtkKyspVUQoYVtkXSxsKX1mdW5jdGlvbiBJaihjLGwsYSl7VUQoTzEobCxjKSxhKX1mdW5jdGlvbiBVRChjLGwpe1F3KGMpJiZ4UyhjLGwpfWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgZD1jW0tpXSxoPWNbVWFdLGY9Y1t4Zl07bGV0IHY9ISEoMD09PWwmJjE2JmgpO2lmKHZ8fD0h''@;'; put 'put ''ISg2NCZoJiYwPT09bCksdnx8PSEhKDEwMjQmaCksdnx8PSEoIWY/LmRpcnR5fHwhbShmKSksZiYmKGYuZGlydHk9ITEpLGNbVWFdJj0tOTIxNyx2KUFqKGQsYyxkLnRlbXBsYXRlLGNbY2xdKTtlbHNlIGlmKDgxOTImaCl7ekQoYywxKTtjb25zdCBNPWQuY29tcG9uZW50cztudWxsIT09TSYm''@;'; put 'put ''WkQoYyxNLDEpfX1mdW5jdGlvbiBaRChjLGwsYSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspSWooYyxsW2RdLGEpfWZ1bmN0aW9uIGI4KGMpe2ZvcihjW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgpO2M7KXtjW1VhXXw9NjQ7Y29uc3QgbD1UNChjKTtpZih4NChj''@;'; put 'put ''KSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWNsYXNzIF84e2dldCByb290Tm9kZXMoKXtjb25zdCBsPXRoaXMuX2xWaWV3LGE9bFtLaV07cmV0dXJuIHk4KGEsbCxhLmZpcnN0Q2hpbGQsW10pfWNvbnN0cnVjdG9yKGwsYSxkPSEwKXt0aGlzLl9sVmlldz1sLHRoaXMuX2NkUmVmSW5q''@;'; put 'put ''ZWN0aW5nVmlldz1hLHRoaXMubm90aWZ5RXJyb3JIYW5kbGVyPWQsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbY2xdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W2NsXT1sfWdldCBk''@;'; put 'put ''ZXN0cm95ZWQoKXtyZXR1cm4hKDI1NiZ+dGhpcy5fbFZpZXdbVWFdKX1kZXN0cm95KCl7aWYodGhpcy5fYXBwUmVmKXRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpO2Vsc2UgaWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpe2NvbnN0IGw9dGhpcy5fbFZpZXdbZmNdO2lmKEh1''@;'; put 'put ''KGwpKXtjb25zdCBhPWxbOF0sZD1hP2EuaW5kZXhPZih0aGlzKTotMTtkPi0xJiYoczgobCxkKSxPdShhLGQpKX10aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1VNCh0aGlzLl9sVmlld1tLaV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveShsKXtBdih0aGlzLl9sVmlldyxsKX1tYXJr''@;'; put 'put ''Rm9yQ2hlY2soKXtiOCh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1tVYV0mPS0xMjl9cmVhdHRhY2goKXtuQyh0aGlzLl9sVmlldyksdGhpcy5fbFZpZXdbVWFdfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3RoaXMuX2xWaWV3W1VhXXw9''@;'; put 'put ''MTAyNCxoeSh0aGlzLl9sVmlldyx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcil9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBRbig5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFj''@;'; put 'put ''aEZyb21BcHBSZWYoKXt0aGlzLl9hcHBSZWY9bnVsbCxmRCh0aGlzLl9sVmlld1tLaV0sdGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBRbig5MDIsITEpO3RoaXMuX2FwcFJlZj1sLG5DKHRoaXMuX2xWaWV3''@;'; put 'put ''KX19bGV0IFNsPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189T2p9fXJldHVybiBjfSkoKTtjb25zdCBSaj1TbCxMaj1jbGFzcyBleHRlbmRzIFJqe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNs''@;'; put 'put ''YXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGws''@;'; put 'put ''YSl9Y3JlYXRlRW1iZWRkZWRWaWV3SW1wbChsLGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBnOChjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtjb25zdCBmPWwudFZpZXcsST1seShjLGYsYSw0MDk2JmNbVWFdPzQwOTY6MTYsbnVsbCxsLG51bGwsbnVsbCxkPy5pbmplY3Rvcj8/bnVsbCxk''@;'; put 'put ''Py5lbWJlZGRlZFZpZXdJbmplY3Rvcj8/bnVsbCxkPy5kZWh5ZHJhdGVkVmlldz8/bnVsbCk7SVtTNF09Y1tsLmluZGV4XTtjb25zdCBpZT1jW3VkXTtyZXR1cm4gbnVsbCE9PWllJiYoSVt1ZF09aWUuY3JlYXRlRW1iZWRkZWRWaWV3KGYpKSxTUyhmLEksYSksSX1maW5hbGx5e19lKGgpfX0o''@;'; put 'put ''dGhpcy5fZGVjbGFyYXRpb25MVmlldyx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIsbCx7ZW1iZWRkZWRWaWV3SW5qZWN0b3I6YSxkZWh5ZHJhdGVkVmlldzpkfSk7cmV0dXJuIG5ldyBfOChoKX19O2Z1bmN0aW9uIE9qKCl7cmV0dXJuIGZ5KHVsKCksZGkoKSl9ZnVuY3Rpb24gZnkoYyxs''@;'; put 'put ''KXtyZXR1cm4gNCZjLnR5cGU/bmV3IExqKGwsYyxMNChjLGwpKTpudWxsfWNsYXNzIHl5e31jbGFzcyByent9Y2xhc3MgUUR7fWNsYXNzIG96e3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe3Rocm93IGZ1bmN0aW9uIGl6KGMpe2NvbnN0IGw9RXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5''@;'; put 'put ''IGZvdW5kIGZvciAke1ByKGMpfS5gKTtyZXR1cm4gbC5uZ0NvbXBvbmVudD1jLGx9KGwpfX1sZXQgVzU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5OVUxMPW5ldyBven19cmV0dXJuIGN9KSgpO2NsYXNzIHg4e31sZXQgRW89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVz''@;'; put 'put ''dHJveU5vZGU9bnVsbH1zdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gc3ooKXtjb25zdCBjPWRpKCksYT1PMSh1bCgpLmluZGV4LGMpO3JldHVybihGdShhKT9hOmMpW3lvXX0oKX19cmV0dXJuIGN9KSgpLGx6PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSl9fXJldHVybiBjfSkoKTtjb25zdCBSUz17fSxlST1uZXcgU2V0O2Z1bmN0aW9uIHkyKGMpe2VJLmhhcyhjKXx8KGVJLmFkZChjKSxwZXJmb3JtYW5jZT8ubWFyaz8uKCJtYXJrX2ZlYXR1cmVf''@;'; put 'put ''dXNhZ2UiLHtkZXRhaWw6e2ZlYXR1cmU6Y319KSl9ZnVuY3Rpb24gdEkoLi4uYyl7fWNsYXNzIFdhe2NvbnN0cnVjdG9yKHtlbmFibGVMb25nU3RhY2tUcmFjZTpsPSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246YT0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVj''@;'; put 'put ''dGlvbjpkPSExfSl7aWYodGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBLcighMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBLcighMSksdGhpcy5vblN0YWJsZT1u''@;'; put 'put ''ZXcgS3IoITEpLHRoaXMub25FcnJvcj1uZXcgS3IoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgUW4oOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7Y29uc3QgaD10aGlzO2guX25lc3Rpbmc9MCxoLl9vdXRlcj1oLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5UYXNrVHJh''@;'; put 'put ''Y2tpbmdab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxsJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLGguc2hvdWxk''@;'; put 'put ''Q29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0hZCYmYSxoLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWQsaC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsaC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24gY3ooKXtjb25zdCBjPSJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBWdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9VnRbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9VnRbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwmJmEpe2NvbnN0IGQ9''@;'; put 'put ''bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2VsQW5pbWF0aW9uRnJh''@;'; put 'put ''bWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIGh6KGMpe2NvbnN0IGw9KCk9PnshZnVuY3Rpb24gZHooYyl7Yy5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KGMubGFzdFJlcXVlc3RBbmltYXRpb25G''@;'; put 'put ''cmFtZUlkPWMubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoVnQsKCk9PntjLmZha2VUb3BFdmVudFRhc2t8fChjLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e2MubGFzdFJlcXVlc3RBbmltYXRpb25G''@;'; put 'put ''cmFtZUlkPS0xLE9TKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsTFMoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxjLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxPUyhjKSl9KGMpfTtjLl9pbm5lcj1jLl9pbm5lci5mb3JrKHtu''@;'; put 'put ''YW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGEsZCxoLGYsdixNKT0+e2lmKGZ1bmN0aW9uIGZ6KGMpe3JldHVybiEoIUFycmF5LmlzQXJyYXkoYyl8fDEhPT1jLmxlbmd0aCkmJiEwPT09Y1swXS5kYXRhPy5fX2lnbm9yZV9uZ196b25l''@;'; put 'put ''X199KE0pKXJldHVybiBhLmludm9rZVRhc2soaCxmLHYsTSk7dHJ5e3JldHVybiBieShjKSxhLmludm9rZVRhc2soaCxmLHYsTSl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNo''@;'; put 'put ''YW5nZURldGVjdGlvbikmJmwoKSxuSShjKX19LG9uSW52b2tlOihhLGQsaCxmLHYsTSxJKT0+e3RyeXtyZXR1cm4gYnkoYyksYS5pbnZva2UoaCxmLHYsTSxJKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxuSShjKX19LG9uSGFzVGFzazooYSxkLGgs''@;'; put 'put ''Zik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssT1MoYyksTFMoYykpOiJtYWNyb1Rhc2siPT1mLmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25I''@;'; put 'put ''YW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0''@;'; put 'put ''KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighV2EuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihXYS5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgUW4oOTA5''@;'; put 'put ''LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcix2PWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK2gsbCx1eix0SSx0SSk7dHJ5e3JldHVybiBmLnJ1blRhc2sodixhLGQpfWZp''@;'; put 'put ''bmFsbHl7Zi5jYW5jZWxUYXNrKHYpfX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZChsLGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bihsKX19Y29uc3QgdXo9e307ZnVuY3Rpb24gTFMoYyl7aWYoMD09Yy5fbmVz''@;'; put 'put ''dGluZyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MmJiFjLmlzU3RhYmxlKXRyeXtjLl9uZXN0aW5nKyssYy5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZihjLl9uZXN0aW5nLS0sIWMuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e2MucnVuT3V0c2lkZUFuZ3VsYXIoKCk9''@;'; put 'put ''PmMub25TdGFibGUuZW1pdChudWxsKSl9ZmluYWxseXtjLmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gT1MoYyl7Yy5oYXNQZW5kaW5nTWljcm90YXNrcz0hIShjLl9oYXNQZW5kaW5nTWljcm90YXNrc3x8KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbnx8Yy5zaG91bGRDb2Fs''@;'; put 'put ''ZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJi0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpfWZ1bmN0aW9uIGJ5KGMpe2MuX25lc3RpbmcrKyxjLmlzU3RhYmxlJiYoYy5pc1N0YWJsZT0hMSxjLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gbkkoYyl7Yy5fbmVzdGlu''@;'; put 'put ''Zy0tLExTKGMpfWNsYXNzIHJJe2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBLcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEtyLHRoaXMu''@;'; put 'put ''b25TdGFibGU9bmV3IEtyLHRoaXMub25FcnJvcj1uZXcgS3J9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFw''@;'; put 'put ''cGx5KGEsZCl9fXZhciBRMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVhcmx5UmVhZD0wXT0iRWFybHlSZWFkIixjW2MuV3JpdGU9MV09IldyaXRlIixjW2MuTWl4ZWRSZWFkV3JpdGU9Ml09Ik1peGVkUmVhZFdyaXRlIixjW2MuUmVhZD0zXT0iUmVhZCIsY30oUTN8fHt9KTtjb25zdCBQUz17''@;'; put 'put ''ZGVzdHJveSgpe319O2Z1bmN0aW9uIF95KGMsbCl7IWwmJmZ1bmN0aW9uIHdmKGMpe2lmKCFNdigpKXRocm93IG5ldyBRbigtMjAzLCExKX0oKTtjb25zdCBhPWw/LmluamVjdG9yPz9maShEcyk7aWYoIWZ1bmN0aW9uIGNoKGMpe3JldHVybiJicm93c2VyIj09PShjPz9maShEcykpLmdldChp''@;'; put 'put ''byl9KGEpKXJldHVybiBQUzt5MigiTmdBZnRlck5leHRSZW5kZXIiKTtjb25zdCBkPWEuZ2V0KEU4KSxoPWQuaGFuZGxlcj8/PW5ldyBvSSxmPWw/LnBoYXNlPz9RMy5NaXhlZFJlYWRXcml0ZSx2PSgpPT57aC51bnJlZ2lzdGVyKEkpLE0oKX0sTT1hLmdldChrNSkub25EZXN0cm95KHYpLEk9''@;'; put 'put ''cTAoYSwoKT0+bmV3IGFJKGYsKCk9Pnt2KCksYygpfSkpO3JldHVybiBoLnJlZ2lzdGVyKEkpLHtkZXN0cm95OnZ9fWNsYXNzIGFJe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5waGFzZT1sLHRoaXMuY2FsbGJhY2tGbj1hLHRoaXMuem9uZT1maShXYSksdGhpcy5lcnJvckhhbmRsZXI9ZmkoZzIs''@;'; put 'put ''e29wdGlvbmFsOiEwfSksZmkoeXkse29wdGlvbmFsOiEwfSk/Lm5vdGlmeSgxKX1pbnZva2UoKXt0cnl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuY2FsbGJhY2tGbil9Y2F0Y2gobCl7dGhpcy5lcnJvckhhbmRsZXI/LmhhbmRsZUVycm9yKGwpfX19Y2xhc3Mgb0l7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz0hMSx0aGlzLmJ1Y2tldHM9e1tRMy5FYXJseVJlYWRdOm5ldyBTZXQsW1EzLldyaXRlXTpuZXcgU2V0LFtRMy5NaXhlZFJlYWRXcml0ZV06bmV3IFNldCxbUTMuUmVhZF06bmV3IFNldH0sdGhpcy5kZWZlcnJlZENhbGxiYWNrcz1uZXcg''@;'; put 'put ''U2V0fXJlZ2lzdGVyKGwpeyh0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz90aGlzLmRlZmVycmVkQ2FsbGJhY2tzOnRoaXMuYnVja2V0c1tsLnBoYXNlXSkuYWRkKGwpfXVucmVnaXN0ZXIobCl7dGhpcy5idWNrZXRzW2wucGhhc2VdLmRlbGV0ZShsKSx0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmRl''@;'; put 'put ''bGV0ZShsKX1leGVjdXRlKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITA7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWZvcihjb25zdCBhIG9mIGwpYS5pbnZva2UoKTt0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz0hMTtmb3IoY29uc3QgbCBvZiB0aGlzLmRl''@;'; put 'put ''ZmVycmVkQ2FsbGJhY2tzKXRoaXMuYnVja2V0c1tsLnBoYXNlXS5hZGQobCk7dGhpcy5kZWZlcnJlZENhbGxiYWNrcy5jbGVhcigpfWRlc3Ryb3koKXtmb3IoY29uc3QgbCBvZiBPYmplY3QudmFsdWVzKHRoaXMuYnVja2V0cykpbC5jbGVhcigpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xl''@;'; put 'put ''YXIoKX19bGV0IEU4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmludGVybmFsQ2FsbGJhY2tzPVtdfWV4ZWN1dGUoKXt0aGlzLmV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpLHRoaXMuaGFuZGxlcj8uZXhlY3V0ZSgpfWV4ZWN1dGVJbnRlcm5h''@;'; put 'put ''bENhbGxiYWNrcygpe2NvbnN0IGE9Wy4uLnRoaXMuaW50ZXJuYWxDYWxsYmFja3NdO3RoaXMuaW50ZXJuYWxDYWxsYmFja3MubGVuZ3RoPTA7Zm9yKGNvbnN0IGQgb2YgYSlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmhhbmRsZXI/LmRlc3Ryb3koKSx0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmlu''@;'; put 'put ''dGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IGN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEN5KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl''@;'; put 'put ''czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKyl7Y29uc3QgTT1sW3ZdOyJudW1iZXIiPT10eXBlb2YgTT9mPU06MT09Zj9oPW9kKGgsTSk6Mj09ZiYmKGQ9b2QoZCxNKyI6ICIrbFsrK3ZdKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI''@;'; put 'put ''b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWNsYXNzIGNJIGV4dGVuZHMgVzV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7Y29uc3QgYT1WbyhsKTtyZXR1cm4gbmV3IGs4KGEsdGhpcy5u''@;'; put 'put ''Z01vZHVsZSl9fWZ1bmN0aW9uIHVJKGMpe2NvbnN0IGw9W107Zm9yKGNvbnN0IGEgaW4gYyl7aWYoIWMuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgZD1jW2FdO3ZvaWQgMCE9PWQmJmwucHVzaCh7cHJvcE5hbWU6QXJyYXkuaXNBcnJheShkKT9kWzBdOmQsdGVtcGxhdGVOYW1l''@;'; put 'put ''OmF9KX1yZXR1cm4gbH1jbGFzcyBTeXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaW5qZWN0b3I9bCx0aGlzLnBhcmVudEluamVjdG9yPWF9Z2V0KGwsYSxkKXtkPW81KGQpO2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQobCxSUyxkKTtyZXR1cm4gaCE9PVJTfHxhPT09UlM/aDp0aGlzLnBhcmVu''@;'; put 'put ''dEluamVjdG9yLmdldChsLGEsZCl9fWNsYXNzIGs4IGV4dGVuZHMgUUR7Z2V0IGlucHV0cygpe2NvbnN0IGw9dGhpcy5jb21wb25lbnREZWYsYT1sLmlucHV0VHJhbnNmb3JtcyxkPXVJKGwuaW5wdXRzKTtpZihudWxsIT09YSlmb3IoY29uc3QgaCBvZiBkKWEuaGFzT3duUHJvcGVydHkoaC5w''@;'; put 'put ''cm9wTmFtZSkmJihoLnRyYW5zZm9ybT1hW2gucHJvcE5hbWVdKTtyZXR1cm4gZH1nZXQgb3V0cHV0cygpe3JldHVybiB1SSh0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9bCx0aGlzLm5nTW9kdWxlPWEsdGhpcy5j''@;'; put 'put ''b21wb25lbnRUeXBlPWwudHlwZSx0aGlzLnNlbGVjdG9yPWZ1bmN0aW9uIEJ3KGMpe3JldHVybiBjLm1hcChWdykuam9pbigiLCIpfShsLnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9bC5uZ0NvbnRlbnRTZWxlY3RvcnM/bC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5p''@;'; put 'put ''c0JvdW5kVG9Nb2R1bGU9ISFhfWNyZWF0ZShsLGEsZCxoKXtjb25zdCBmPV9lKG51bGwpO3RyeXtsZXQgdj0oaD1ofHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YgaGM/aDpoPy5pbmplY3Rvcjt2JiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYodj10''@;'; put 'put ''aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iodil8fHYpO2NvbnN0IE09dj9uZXcgU3kobCx2KTpsLEk9TS5nZXQoeDgsbnVsbCk7aWYobnVsbD09PUkpdGhyb3cgbmV3IFFuKDQwNywhMSk7Y29uc3QgRz1NLmdldChseixudWxsKSx5ZT17cmVuZGVyZXJGYWN0b3J5Okks''@;'; put 'put ''c2FuaXRpemVyOkcsaW5saW5lRWZmZWN0UnVubmVyOm51bGwsYWZ0ZXJSZW5kZXJFdmVudE1hbmFnZXI6TS5nZXQoRTgsbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOk0uZ2V0KHl5LG51bGwpfSxFZT1JLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLGplPXRo''@;'; put 'put ''aXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIscWU9ZD9mdW5jdGlvbiBhaihjLGwsYSxkKXtjb25zdCBmPWQuZ2V0KGprLCExKXx8YT09PUpzLlNoYWRvd0RvbSx2PWMuc2VsZWN0Um9vdEVsZW1lbnQobCxmKTtyZXR1cm4gZnVuY3Rpb24gb2ooYyl7RUQoYyl9KHYpLHZ9''@;'; put 'put ''KEVlLGQsdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbixNKTp6NChFZSxqZSxmdW5jdGlvbiB2eihjKXtjb25zdCBsPWMudG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PWw/InN2ZyI6Im1hdGgiPT09bD8ibWF0aCI6bnVsbH0oamUpKTtsZXQgcnQ9NTEyO3RoaXMuY29tcG9uZW50''@;'; put 'put ''RGVmLnNpZ25hbHM/cnR8PTQwOTY6dGhpcy5jb21wb25lbnREZWYub25QdXNofHwocnR8PTE2KTtsZXQgcHQ9bnVsbDtudWxsIT09cWUmJihwdD1SQyhxZSxNLCEwKSk7Y29uc3QgZHQ9bVMoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSxKdD1seShudWxs''@;'; put 'put ''LGR0LG51bGwscnQsbnVsbCxudWxsLHllLEVlLE0sbnVsbCxwdCk7bGV0IHZuLENuO0s2KEp0KTt0cnl7Y29uc3QgdG49dGhpcy5jb21wb25lbnREZWY7bGV0IE1uLENyPW51bGw7dG4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhNbj1bXSxDcj1uZXcgTWFwLHRuLmZpbmRIb3N0RGlyZWN0aXZl''@;'; put 'put ''RGVmcyh0bixNbixDciksTW4ucHVzaCh0bikpOk1uPVt0bl07Y29uc3QgR3I9ZnVuY3Rpb24gYnooYyxsKXtjb25zdCBhPWNbS2ldLGQ9d287cmV0dXJuIGNbZF09bCxqNShhLGQsMiwiI2hvc3QiLG51bGwpfShKdCxxZSksbXI9ZnVuY3Rpb24gX3ooYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1o''@;'; put 'put ''W0tpXTshZnVuY3Rpb24gd3ooYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPXZmKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoQ3kobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmQ0QoZCxhLGwpKX0oZCxjLGwsdik7''@;'; put 'put ''bGV0IEk9bnVsbDtudWxsIT09bCYmKEk9UkMobCxoW3BjXSkpO2NvbnN0IEc9Zi5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobCxhKTtsZXQgaWU9MTY7YS5zaWduYWxzP2llPTQwOTY6YS5vblB1c2gmJihpZT02NCk7Y29uc3QgdWU9bHkoaCxjeShhKSxudWxsLGllLGhbYy5pbmRl''@;'; put 'put ''eF0sYyxmLEcsbnVsbCxudWxsLEkpO3JldHVybiBNLmZpcnN0Q3JlYXRlUGFzcyYmYlMoTSxjLGQubGVuZ3RoLTEpLGY4KGgsdWUpLGhbYy5pbmRleF09dWV9KEdyLHFlLHRuLE1uLEp0LHllLEVlKTtDbj1ZNihkdCx3bykscWUmJmZ1bmN0aW9uIFN6KGMsbCxhLGQpe2lmKGQpbTQoYyxhLFsi''@;'; put 'put ''bmctdmVyc2lvbiIsIjE3LjMuMTIiXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gS2EoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w''@;'; put 'put ''dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIU1jKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJm00KGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZ3RChjLGEsZi5qb2luKCIgIikpfX0oRWUsdG4scWUsZCks''@;'; put 'put ''dm9pZCAwIT09YSYmZnVuY3Rpb24gTXooYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KENuLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLHZu''@;'; put 'put ''PWZ1bmN0aW9uIEN6KGMsbCxhLGQsaCxmKXtjb25zdCB2PXVsKCksTT1oW0tpXSxJPUwwKHYsaCk7eVMoTSxoLHYsYSxudWxsLGQpO2ZvcihsZXQgaWU9MDtpZTxhLmxlbmd0aDtpZSsrKWp1KEQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K2llLHYpLGgpO09EKE0saCx2KSxJJiZqdShJLGgpO2Nv''@;'; put 'put ''bnN0IEc9RDQoaCxNLHYuZGlyZWN0aXZlU3RhcnQrdi5jb21wb25lbnRPZmZzZXQsdik7aWYoY1tjbF09aFtjbF09RyxudWxsIT09Zilmb3IoY29uc3QgaWUgb2YgZilpZShHLGwpO3JldHVybiBmUyhNLHYsaCksR30obXIsdG4sTW4sQ3IsSnQsW3h6XSksU1MoZHQsSnQsbnVsbCl9ZmluYWxs''@;'; put 'put ''eXt3NSgpfXJldHVybiBuZXcgeXoodGhpcy5jb21wb25lbnRUeXBlLHZuLEw0KENuLEp0KSxKdCxDbil9ZmluYWxseXtfZShmKX19fWNsYXNzIHl6IGV4dGVuZHMgcnp7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcigpLHRoaXMubG9jYXRpb249ZCx0aGlzLl9yb290TFZpZXc9aCx0aGlz''@;'; put 'put ''Ll90Tm9kZT1mLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz1udWxsLHRoaXMuaW5zdGFuY2U9YSx0aGlzLmhvc3RWaWV3PXRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9bmV3IF84KGgsdm9pZCAwLCExKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5v''@;'; put 'put ''ZGUuaW5wdXRzO2xldCBoO2lmKG51bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29u''@;'; put 'put ''c3QgZj10aGlzLl9yb290TFZpZXc7Q1MoZltLaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGI4KE8xKHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBCdSh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLmhvc3RWaWV3LmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIHh6KCl7Y29uc3QgYz11bCgpO1J2KGRpKClbS2ldLGMpfWxldCBEbz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPUV6''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRXooKXtyZXR1cm4gZkkodWwoKSxkaSgpKX1jb25zdCBUej1EbyxkST1jbGFzcyBleHRlbmRzIFR6e2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1n''@;'; put 'put ''ZXQgZWxlbWVudCgpe3JldHVybiBMNCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IEJ1KHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9QzUodGhpcy5faG9zdFROb2Rl''@;'; put 'put ''LHRoaXMuX2hvc3RMVmlldyk7aWYoUHYobCkpe2NvbnN0IGE9SjYobCx0aGlzLl9ob3N0TFZpZXcpLGQ9WDYobCk7cmV0dXJuIG5ldyBCdShhW0tpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyBCdShudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRo''@;'; put 'put ''aXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPWhJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWdjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0''@;'; put 'put ''IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVjdG9yKTtjb25zdCBNPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoTSxoLFU1KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksTX1j''@;'; put 'put ''cmVhdGVDb21wb25lbnQobCxhLGQsaCxmKXtjb25zdCB2PWwmJiFmdW5jdGlvbiB6aShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY30obCk7bGV0IE07aWYodilNPWE7ZWxzZXtjb25zdCBqZT1hfHx7fTtNPWplLmluZGV4LGQ9amUuaW5qZWN0b3IsaD1qZS5wcm9qZWN0YWJsZU5vZGVz''@;'; put 'put ''LGY9amUuZW52aXJvbm1lbnRJbmplY3Rvcnx8amUubmdNb2R1bGVSZWZ9Y29uc3QgST12P2w6bmV3IGs4KFZvKGwpKSxHPWR8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PUkubmdNb2R1bGUpe2NvbnN0IHFlPSh2P0c6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KGhjLG51bGwp''@;'; put 'put ''O3FlJiYoZj1xZSl9Vm8oSS5jb21wb25lbnRUeXBlPz97fSk7Y29uc3QgRWU9SS5jcmVhdGUoRyxoLG51bGwsZik7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChFZS5ob3N0VmlldyxNLFU1KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksRWV9aW5zZXJ0KGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1w''@;'; put 'put ''bChsLGEsITApfWluc2VydEltcGwobCxhLGQpe2NvbnN0IGg9bC5fbFZpZXc7aWYoZnVuY3Rpb24gSkEoYyl7cmV0dXJuIEh1KGNbZmNdKX0oaCkpe2NvbnN0IE09dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09TSl0aGlzLmRldGFjaChNKTtlbHNle2NvbnN0IEk9aFtmY10sRz1uZXcgZEkoSSxJ''@;'; put 'put ''W3JjXSxJW2ZjXSk7Ry5kZXRhY2goRy5pbmRleE9mKGwpKX19Y29uc3QgZj10aGlzLl9hZGp1c3RJbmRleChhKSx2PXRoaXMuX2xDb250YWluZXI7cmV0dXJuIHY4KHYsaCxmLGQpLGwuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCksUGwoVlModiksZixsKSxsfW1vdmUobCxhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbnNlcnQobCxhKX1pbmRleE9mKGwpe2NvbnN0IGE9aEkodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1hP2EuaW5kZXhPZihsKTotMX1yZW1vdmUobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChsLC0xKSxkPXM4KHRoaXMuX2xDb250YWluZXIsYSk7ZCYmKE91KFZT''@;'; put 'put ''KHRoaXMuX2xDb250YWluZXIpLGEpLFU0KGRbS2ldLGQpKX1kZXRhY2gobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChsLC0xKSxkPXM4KHRoaXMuX2xDb250YWluZXIsYSk7cmV0dXJuIGQmJm51bGwhPU91KFZTKHRoaXMuX2xDb250YWluZXIpLGEpP25ldyBfOChkKTpudWxsfV9hZGp1''@;'; put 'put ''c3RJbmRleChsLGE9MCl7cmV0dXJuIGw/P3RoaXMubGVuZ3RoK2F9fTtmdW5jdGlvbiBoSShjKXtyZXR1cm4gY1s4XX1mdW5jdGlvbiBWUyhjKXtyZXR1cm4gY1s4XXx8KGNbOF09W10pfWZ1bmN0aW9uIGZJKGMsbCl7bGV0IGE7Y29uc3QgZD1sW2MuaW5kZXhdO3JldHVybiBIdShkKT9hPWQ6''@;'; put 'put ''KGE9d1MoZCxsLG51bGwsYyksbFtjLmluZGV4XT1hLGY4KGwsYSkpLEJTKGEsbCxjLGQpLG5ldyBkSShhLGMsbCl9bGV0IEJTPWZ1bmN0aW9uIGpTKGMsbCxhLGQpe2lmKGNbdnVdKXJldHVybjtsZXQgaDtoPTgmYS50eXBlP0NsKGQpOmZ1bmN0aW9uIEF6KGMsbCl7Y29uc3QgYT1jW3lvXSxk''@;'; put 'put ''PWEuY3JlYXRlQ29tbWVudCgiIiksaD1MMChsLGMpO3JldHVybiBaNChhLHEzKGEsaCksZCxmdW5jdGlvbiBhUyhjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbdnVdPWh9LE15PSgpPT4hMTtjbGFzcyB6U3tjb25zdHJ1Y3RvcihsKXt0aGlzLnF1ZXJ5''@;'; put 'put ''TGlzdD1sLHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyB6Uyh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyB4eXtjb25zdHJ1Y3RvcihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1jcmVhdGVFbWJlZGRlZFZpZXcobCl7''@;'; put 'put ''Y29uc3QgYT1sLnF1ZXJpZXM7aWYobnVsbCE9PWEpe2NvbnN0IGQ9bnVsbCE9PWwuY29udGVudFF1ZXJpZXM/bC5jb250ZW50UXVlcmllc1swXTphLmxlbmd0aCxoPVtdO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2NvbnN0IHY9YS5nZXRCeUluZGV4KGYpO2gucHVzaCh0aGlzLnF1ZXJpZXNbdi5p''@;'; put 'put ''bmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IHh5KGgpfXJldHVybiBudWxsfWluc2VydFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKX1kZXRhY2hWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZmluaXNoVmlld0Ny''@;'; put 'put ''ZWF0aW9uKGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyludWxsIT09WVMobCxhKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbYV0uc2V0RGlydHkoKX19Y2xhc3Mg''@;'; put 'put ''cEl7Y29uc3RydWN0b3IobCxhLGQ9bnVsbCl7dGhpcy5mbGFncz1hLHRoaXMucmVhZD1kLHRoaXMucHJlZGljYXRlPSJzdHJpbmciPT10eXBlb2YgbD9mdW5jdGlvbiBiSShjKXtyZXR1cm4gYy5zcGxpdCgiLCIpLm1hcChsPT5sLnRyaW0oKSl9KGwpOmx9fWNsYXNzIFVTe2NvbnN0cnVjdG9y''@;'; put 'put ''KGw9W10pe3RoaXMucXVlcmllcz1sfWVsZW1lbnRTdGFydChsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLmVsZW1lbnRTdGFydChsLGEpfWVsZW1lbnRFbmQobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyl0''@;'; put 'put ''aGlzLnF1ZXJpZXNbYV0uZWxlbWVudEVuZChsKX1lbWJlZGRlZFRWaWV3KGwpe2xldCBhPW51bGw7Zm9yKGxldCBkPTA7ZDx0aGlzLmxlbmd0aDtkKyspe2NvbnN0IGg9bnVsbCE9PWE/YS5sZW5ndGg6MCxmPXRoaXMuZ2V0QnlJbmRleChkKS5lbWJlZGRlZFRWaWV3KGwsaCk7ZiYmKGYuaW5k''@;'; put 'put ''ZXhJbkRlY2xhcmF0aW9uVmlldz1kLG51bGwhPT1hP2EucHVzaChmKTphPVtmXSl9cmV0dXJuIG51bGwhPT1hP25ldyBVUyhhKTpudWxsfXRlbXBsYXRlKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0udGVtcGxhdGUobCxhKX1nZXRC''@;'; put 'put ''eUluZGV4KGwpe3JldHVybiB0aGlzLnF1ZXJpZXNbbF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKGwpe3RoaXMucXVlcmllcy5wdXNoKGwpfX1jbGFzcyBaU3tjb25zdHJ1Y3RvcihsLGE9LTEpe3RoaXMubWV0YWRhdGE9bCx0aGlzLm1hdGNoZXM9bnVs''@;'; put 'put ''bCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1hfWVsZW1lbnRTdGFydChsLGEpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShhKSYmdGhpcy5t''@;'; put 'put ''YXRjaFROb2RlKGwsYSl9ZWxlbWVudEVuZChsKXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PWwuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUobCxhKXt0aGlzLmVsZW1lbnRTdGFydChsLGEpfWVtYmVkZGVkVFZpZXcobCxhKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c0FwcGx5aW5nVG9Ob2RlKGwpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLWwuaW5kZXgsYSksbmV3IFpTKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUobCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0YWRhdGEu''@;'; put 'put ''ZmxhZ3Mpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylkPWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0''@;'; put 'put ''Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLFJ6KGEsZikpLHRoaXMubWF0''@;'; put 'put ''Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxCdihhLGwsZiwhMSwhMSkpfWVsc2UgZD09PVNsPzQmYS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxCdihhLGwsZCwhMSwhMSkpfW1hdGNoVE5vZGVX''@;'; put 'put ''aXRoUmVhZE9wdGlvbihsLGEsZCl7aWYobnVsbCE9PWQpe2NvbnN0IGg9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1oKWlmKGg9PT1KaXx8aD09PURvfHxoPT09U2wmJjQmYS50eXBlKXRoaXMuYWRkTWF0Y2goYS5pbmRleCwtMik7ZWxzZXtjb25zdCBmPUJ2KGEsbCxoLCExLCExKTtu''@;'; put 'put ''dWxsIT09ZiYmdGhpcy5hZGRNYXRjaChhLmluZGV4LGYpfWVsc2UgdGhpcy5hZGRNYXRjaChhLmluZGV4LGQpfX1hZGRNYXRjaChsLGEpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVtsLGFdOnRoaXMubWF0Y2hlcy5wdXNoKGwsYSl9fWZ1bmN0aW9uIFJ6KGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1jLmxvY2FsTmFtZXM7aWYobnVsbCE9PWEpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKWlmKGFbZF09PT1sKXJldHVybiBhW2QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gTHooYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIGdJKGMsbCl7cmV0dXJuIDExJmMudHlwZT9MNChj''@;'; put 'put ''LGwpOjQmYy50eXBlP2Z5KGMsbCk6bnVsbH0obCxjKTotMj09PWE/ZnVuY3Rpb24gV1MoYyxsLGEpe3JldHVybiBhPT09Smk/TDQobCxjKTphPT09U2w/ZnkobCxjKTphPT09RG8/ZkkobCxjKTp2b2lkIDB9KGMsbCxkKTpENChjLGNbS2ldLGEsbCl9ZnVuY3Rpb24gWTUoYyxsLGEsZCl7Y29u''@;'; put 'put ''c3QgaD1sW3VkXS5xdWVyaWVzW2RdO2lmKG51bGw9PT1oLm1hdGNoZXMpe2NvbnN0IGY9Yy5kYXRhLHY9YS5tYXRjaGVzLE09W107Zm9yKGxldCBJPTA7bnVsbCE9PXYmJkk8di5sZW5ndGg7SSs9Mil7Y29uc3QgRz12W0ldO00ucHVzaChHPDA/bnVsbDpMeihsLGZbR10sdltJKzFdLGEubWV0''@;'; put 'put ''YWRhdGEucmVhZCkpfWgubWF0Y2hlcz1NfXJldHVybiBoLm1hdGNoZXN9ZnVuY3Rpb24gRDgoYyxsLGEsZCl7Y29uc3QgaD1jLnF1ZXJpZXMuZ2V0QnlJbmRleChhKSxmPWgubWF0Y2hlcztpZihudWxsIT09Zil7Y29uc3Qgdj1ZNShjLGwsaCxhKTtmb3IobGV0IE09MDtNPGYubGVuZ3RoO00r''@;'; put 'put ''PTIpe2NvbnN0IEk9ZltNXTtpZihJPjApZC5wdXNoKHZbTS8yXSk7ZWxzZXtjb25zdCBHPWZbTSsxXSxpZT1sWy1JXTtmb3IobGV0IHVlPWdjO3VlPGllLmxlbmd0aDt1ZSsrKXtjb25zdCB5ZT1pZVt1ZV07eWVbUzRdPT09eWVbZmNdJiZEOCh5ZVtLaV0seWUsRyxkKX1pZihudWxsIT09aWVb''@;'; put 'put ''VjNdKXtjb25zdCB1ZT1pZVtWM107Zm9yKGxldCB5ZT0wO3llPHVlLmxlbmd0aDt5ZSsrKXtjb25zdCBFZT11ZVt5ZV07RDgoRWVbS2ldLEVlLEcsZCl9fX19fXJldHVybiBkfWZ1bmN0aW9uIG1JKGMsbCxhKXtjb25zdCBkPW5ldyBmZCghKDQmfmEpKTtyZXR1cm4gZnVuY3Rpb24ga0QoYyxs''@;'; put 'put ''LGEsZCl7Y29uc3QgaD1ORChsKTtoLnB1c2goYSksYy5maXJzdENyZWF0ZVBhc3MmJnA4KGMpLnB1c2goZCxoLmxlbmd0aC0xKX0oYyxsLGQsZC5kZXN0cm95KSwobFt1ZF0/Pz1uZXcgeHkpLnF1ZXJpZXMucHVzaChuZXcgelMoZCkpLTF9ZnVuY3Rpb24gX0koYyxsLGEpe251bGw9PT1jLnF1''@;'; put 'put ''ZXJpZXMmJihjLnF1ZXJpZXM9bmV3IFVTKSxjLnF1ZXJpZXMudHJhY2sobmV3IFpTKGwsYSkpfWZ1bmN0aW9uIFlTKGMsbCl7cmV0dXJuIGMucXVlcmllcy5nZXRCeUluZGV4KGwpfWZ1bmN0aW9uIHdJKGMsbCl7Y29uc3QgYT1jW0tpXSxkPVlTKGEsbCk7cmV0dXJuIGQuY3Jvc3Nlc05nVGVt''@;'; put 'put ''cGxhdGU/RDgoYSxjLGwsW10pOlk1KGEsYyxkLGwpfWZ1bmN0aW9uIFNJKGMpe3JldHVybiBmdW5jdGlvbiBFeShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmdm9pZCAwIT09Y1tnZV19KGMpJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zZXR9ZnVuY3Rpb24gd2EoYyl7bGV0IGw9ZnVu''@;'; put 'put ''Y3Rpb24gWFMoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KGMudHlwZSksYT0hMDtjb25zdCBkPVtjXTtmb3IoO2w7KXtsZXQgaDtpZihWYyhjKSloPWwuXHUwMjc1Y21wfHxsLlx1MDI3NWRpcjtlbHNle2lmKGwuXHUwMjc1Y21wKXRo''@;'; put 'put ''cm93IG5ldyBRbig5MDMsITEpO2g9bC5cdTAyNzVkaXJ9aWYoaCl7aWYoYSl7ZC5wdXNoKGgpO2NvbnN0IHY9Yzt2LmlucHV0cz1QOChjLmlucHV0cyksdi5pbnB1dFRyYW5zZm9ybXM9UDgoYy5pbnB1dFRyYW5zZm9ybXMpLHYuZGVjbGFyZWRJbnB1dHM9UDgoYy5kZWNsYXJlZElucHV0cyks''@;'; put 'put ''di5vdXRwdXRzPVA4KGMub3V0cHV0cyk7Y29uc3QgTT1oLmhvc3RCaW5kaW5ncztNJiZPZihjLE0pO2NvbnN0IEk9aC52aWV3UXVlcnksRz1oLmNvbnRlbnRRdWVyaWVzO2lmKEkmJlJJKGMsSSksRyYmWnooYyxHKSxJSShjLGgpLEx1KGMub3V0cHV0cyxoLm91dHB1dHMpLFZjKGgpJiZoLmRh''@;'; put 'put ''dGEuYW5pbWF0aW9uKXtjb25zdCBpZT1jLmRhdGE7aWUuYW5pbWF0aW9uPShpZS5hbmltYXRpb258fFtdKS5jb25jYXQoaC5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGY9aC5mZWF0dXJlcztpZihmKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl07TSYmTS5uZ0luaGVy''@;'; put 'put ''aXQmJk0oYyksTT09PXdhJiYoYT0hMSl9fWw9T2JqZWN0LmdldFByb3RvdHlwZU9mKGwpfSFmdW5jdGlvbiBVeihjKXtsZXQgbD0wLGE9bnVsbDtmb3IobGV0IGQ9Yy5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1jW2RdO2guaG9zdFZhcnM9bCs9aC5ob3N0VmFycyxoLmhvc3RBdHRycz12''@;'; put 'put ''ZihoLmhvc3RBdHRycyxhPXZmKGEsaC5ob3N0QXR0cnMpKX19KGQpfWZ1bmN0aW9uIElJKGMsbCl7Zm9yKGNvbnN0IGEgaW4gbC5pbnB1dHMpe2lmKCFsLmlucHV0cy5oYXNPd25Qcm9wZXJ0eShhKXx8Yy5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgZD1sLmlucHV0''@;'; put 'put ''c1thXTtpZih2b2lkIDAhPT1kJiYoYy5pbnB1dHNbYV09ZCxjLmRlY2xhcmVkSW5wdXRzW2FdPWwuZGVjbGFyZWRJbnB1dHNbYV0sbnVsbCE9PWwuaW5wdXRUcmFuc2Zvcm1zKSl7Y29uc3QgaD1BcnJheS5pc0FycmF5KGQpP2RbMF06ZDtpZighbC5pbnB1dFRyYW5zZm9ybXMuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoaCkpY29udGludWU7Yy5pbnB1dFRyYW5zZm9ybXM/Pz17fSxjLmlucHV0VHJhbnNmb3Jtc1toXT1sLmlucHV0VHJhbnNmb3Jtc1toXX19fWZ1bmN0aW9uIFA4KGMpe3JldHVybiBjPT09STA/e306Yz09PXRzP1tdOmN9ZnVuY3Rpb24gUkkoYyxsKXtjb25zdCBhPWMudmlld1F1ZXJ5''@;'; put 'put ''O2Mudmlld1F1ZXJ5PWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIFp6KGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2MuY29udGVudFF1ZXJpZXM9YT8oZCxoLGYpPT57bChkLGgsZiksYShkLGgsZil9Omx9ZnVuY3Rpb24gT2YoYyxsKXtjb25zdCBhPWMuaG9zdEJp''@;'; put 'put ''bmRpbmdzO2MuaG9zdEJpbmRpbmdzPWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIHZkKGMpe2NvbnN0IGw9YT0+e2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYyk/YzpjKCkpLm1hcChoPT4iZnVuY3Rpb24iPT10eXBlb2YgaD97ZGlyZWN0aXZlOllpKGgpLGlucHV0czpJMCxv''@;'; put 'put ''dXRwdXRzOkkwfTp7ZGlyZWN0aXZlOllpKGguZGlyZWN0aXZlKSxpbnB1dHM6T0koaC5pbnB1dHMpLG91dHB1dHM6T0koaC5vdXRwdXRzKX0pO251bGw9PT1hLmhvc3REaXJlY3RpdmVzPyhhLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz1MSSxhLmhvc3REaXJlY3RpdmVzPWQpOmEuaG9zdERpcmVj''@;'; put 'put ''dGl2ZXMudW5zaGlmdCguLi5kKX07cmV0dXJuIGwubmdJbmhlcml0PSEwLGx9ZnVuY3Rpb24gTEkoYyxsLGEpe2lmKG51bGwhPT1jLmhvc3REaXJlY3RpdmVzKWZvcihjb25zdCBkIG9mIGMuaG9zdERpcmVjdGl2ZXMpe2NvbnN0IGg9eGMoZC5kaXJlY3RpdmUpOyR6KGguZGVjbGFyZWRJbnB1''@;'; put 'put ''dHMsZC5pbnB1dHMpLExJKGgsbCxhKSxhLnNldChoLGQpLGwucHVzaChoKX19ZnVuY3Rpb24gT0koYyl7aWYodm9pZCAwPT09Y3x8MD09PWMubGVuZ3RoKXJldHVybiBJMDtjb25zdCBsPXt9O2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSs9MilsW2NbYV1dPWNbYSsxXTtyZXR1cm4gbH1mdW5j''@;'; put 'put ''dGlvbiAkeihjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmKGNbbFthXV09Y1thXSl9ZnVuY3Rpb24gV2woYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJy''@;'; put 'put ''YXkuaXNBcnJheShoKSYmaFszXSYmKGFbZF09aFszXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1jbGFzcyBucHt9Y2xhc3MgbWN7fWNsYXNzIFJ5IGV4dGVuZHMgbnB7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy5fcGFyZW50PWEsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0''@;'; put 'put ''aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGNJKHRoaXMpO2NvbnN0IGg9UHUobCk7dGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1GMShoLmJvb3RzdHJhcCksdGhpcy5fcjNJbmplY3Rvcj1SNChsLGEsW3twcm92aWRlOm5wLHVzZVZhbHVlOnRo''@;'; put 'put ''aXN9LHtwcm92aWRlOlc1LHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfSwuLi5kXSxQcihsKSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0lu''@;'; put 'put ''amVjdG9yLmdldChsKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9yM0luamVjdG9yOyFsLmRlc3Ryb3llZCYmbC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goYT0+YSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVs''@;'; put 'put ''bH1vbkRlc3Ryb3kobCl7dGhpcy5kZXN0cm95Q2JzLnB1c2gobCl9fWNsYXNzIEx5IGV4dGVuZHMgbWN7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm1vZHVsZVR5cGU9bH1jcmVhdGUobCl7cmV0dXJuIG5ldyBSeSh0aGlzLm1vZHVsZVR5cGUsbCxbXSl9fWNsYXNzIEY4IGV4dGVuZHMg''@;'; put 'put ''bnB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgY0kodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2NvbnN0IGE9bmV3IGNkKFsuLi5sLnByb3ZpZGVycyx7cHJvdmlkZTpucCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpXNSx1c2VWYWx1''@;'; put 'put ''ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGwucGFyZW50fHxIMygpLGwuZGVidWdOYW1lLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSk7dGhpcy5pbmplY3Rvcj1hLGwucnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnMmJmEucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl9''@;'; put 'put ''ZGVzdHJveSgpe3RoaXMuaW5qZWN0b3IuZGVzdHJveSgpfW9uRGVzdHJveShsKXt0aGlzLmluamVjdG9yLm9uRGVzdHJveShsKX19ZnVuY3Rpb24gRzQoYyxsLGE9bnVsbCl7cmV0dXJuIG5ldyBGOCh7cHJvdmlkZXJzOmMscGFyZW50OmwsZGVidWdOYW1lOmEscnVuRW52aXJvbm1lbnRJbml0''@;'; put 'put ''aWFsaXplcnM6ITB9KS5pbmplY3Rvcn1sZXQgUGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudGFza0lkPTAsdGhpcy5wZW5kaW5nVGFza3M9bmV3IFNldCx0aGlzLmhhc1BlbmRpbmdUYXNrcz1uZXcgZWkoITEpfWdldCBfaGFzUGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aGFzUGVuZGluZ1Rhc2tzLnZhbHVlfWFkZCgpe3RoaXMuX2hhc1BlbmRpbmdUYXNrc3x8dGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3Mu''@;'; put 'put ''ZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfW5nT25EZXN0cm95KCl7dGhpcy5wZW5kaW5nVGFza3MuY2xlYXIoKSx0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVu''@;'; put 'put ''ZGluZ1Rhc2tzLm5leHQoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0''@;'; put 'put ''aW9uIE95KGMpe3JldHVybiEhSlMoYykmJihBcnJheS5pc0FycmF5KGMpfHwhKGMgaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gYyl9ZnVuY3Rpb24gSlMoYyl7cmV0dXJuIG51bGwhPT1jJiYoImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyl9ZnVu''@;'; put 'put ''Y3Rpb24gYjIoYyxsLGEpe3JldHVybiBjW2xdPWF9ZnVuY3Rpb24gQmMoYyxsLGEpe3JldHVybiFPYmplY3QuaXMoY1tsXSxhKSYmKGNbbF09YSwhMCl9ZnVuY3Rpb24gcnAoYyxsLGEsZCl7Y29uc3QgaD1CYyhjLGwsYSk7cmV0dXJuIEJjKGMsbCsxLGQpfHxofWZ1bmN0aW9uIEZ5KGMsbCxh''@;'; put 'put ''LGQsaCl7Y29uc3QgZj1ycChjLGwsYSxkKTtyZXR1cm4gQmMoYyxsKzIsaCl8fGZ9ZnVuY3Rpb24geWQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9cnAoYyxsLGEsZCk7cmV0dXJuIHJwKGMsbCsyLGgsZil8fHZ9ZnVuY3Rpb24gZ3QoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBJPWRpKCksRz1scygp''@;'; put 'put ''LGllPWMrd28sdWU9Ry5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUVMoYyxsLGEsZCxoLGYsdixNLEkpe2NvbnN0IEc9bC5jb25zdHMsaWU9ajUobCxjLDQsdnx8bnVsbCxkMihHLE0pKTt2UyhsLGEsaWUsZDIoRyxJKSksUnYobCxpZSk7Y29uc3QgdWU9aWUudFZpZXc9bVMoMixpZSxkLGgs''@;'; put 'put ''ZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLEcsbnVsbCk7cmV0dXJuIG51bGwhPT1sLnF1ZXJpZXMmJihsLnF1ZXJpZXMudGVtcGxhdGUobCxpZSksdWUucXVlcmllcz1sLnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhpZSkpLGllfShpZSxHLEksbCxh''@;'; put 'put ''LGQsaCxmLHYpOkcuZGF0YVtpZV07aDIodWUsITEpO2NvbnN0IHllPVZJKEcsSSx1ZSxjKTtxNigpJiZsMChHLEkseWUsdWUpLGp1KHllLEkpO2NvbnN0IEVlPXdTKHllLEkseWUsdWUpO3JldHVybiBJW2llXT1FZSxmOChJLEVlKSxmdW5jdGlvbiBIMChjLGwsYSl7cmV0dXJuIE15KGMsbCxh''@;'; put 'put ''KX0oRWUsdWUsSSksSjAodWUpJiZwUyhHLEksdWUpLG51bGwhPXYmJmdTKEksdWUsTSksZ3R9bGV0IFZJPWZ1bmN0aW9uIGVNKGMsbCxhLGQpe3JldHVybiBmMighMCksbFt5b10uY3JlYXRlQ29tbWVudCgiIil9O2Z1bmN0aW9uIGhyKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKTtyZXR1cm4gQmMo''@;'; put 'put ''aCxhaCgpLGwpJiYobHMoKSx1aChRcygpLGgsYyxsLGEsZCkpLGhyfWZ1bmN0aW9uIFlsKGMsbCxhLGQpe3JldHVybiBCYyhjLGFoKCksYSk/bCtDYShhKStkOlJvfWZ1bmN0aW9uIFlvKGMsbCl7cmV0dXJuIGM8PDE3fGw8PDJ9ZnVuY3Rpb24geGwoYyl7cmV0dXJuIGM+PjE3JjMyNzY3fWZ1''@;'; put 'put ''bmN0aW9uIEZmKGMpe3JldHVybiAyfGN9ZnVuY3Rpb24gYmQoYyl7cmV0dXJuKDEzMTA2OCZjKT4+Mn1mdW5jdGlvbiBnbihjLGwpe3JldHVybi0xMzEwNjkmY3xsPDwyfWZ1bmN0aW9uIHduKGMpe3JldHVybiAxfGN9ZnVuY3Rpb24gYnIoYyxsLGEsZCl7Y29uc3QgaD1jW2ErMV0sZj1udWxs''@;'; put 'put ''PT09bDtsZXQgdj1kP3hsKGgpOmJkKGgpLE09ITE7Zm9yKDswIT09diYmKCExPT09TXx8Zik7KXtjb25zdCBHPWNbdisxXTtXcihjW3ZdLGwpJiYoTT0hMCxjW3YrMV09ZD93bihHKTpGZihHKSksdj1kP3hsKEcpOmJkKEcpfU0mJihjW2ErMV09ZD9GZihoKTp3bihoKSl9ZnVuY3Rpb24gV3Io''@;'; put 'put ''YyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZlMihjLGwpPj0wfWNvbnN0IG9pPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVu''@;'; put 'put ''ZDowfTtmdW5jdGlvbiBuaShjKXtyZXR1cm4gYy5zdWJzdHJpbmcob2kua2V5LG9pLmtleUVuZCl9ZnVuY3Rpb24gbm8oYyxsKXtjb25zdCBhPW9pLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPW9pLmtleUVuZD1mdW5jdGlvbiByMShjLGwsYSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChs''@;'; put 'put ''KT4zMjspbCsrO3JldHVybiBsfShjLG9pLmtleT1sLGEpLHhzKGMsbCxhKSl9ZnVuY3Rpb24geHMoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24geGUoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChs''@;'; put 'put ''cygpLFFzKCksZCxjLGwsZFt5b10sYSwhMSkseGV9ZnVuY3Rpb24gaGgoYyxsLGEsZCxoKXtjb25zdCB2PWg/ImNsYXNzIjoic3R5bGUiO0NTKGMsYSxsLmlucHV0c1t2XSx2LGQpfWZ1bmN0aW9uIF9kKGMsbCxhKXtyZXR1cm4gSGYoYyxsLGEsITEpLF9kfWZ1bmN0aW9uIFRyKGMsbCl7cmV0''@;'; put 'put ''dXJuIEhmKGMsbCxudWxsLCEwKSxUcn1mdW5jdGlvbiBhcChjLGwpe2ZvcihsZXQgYT1mdW5jdGlvbiBVaShjKXtyZXR1cm4gZnVuY3Rpb24gVG8oYyl7b2kua2V5PTAsb2kua2V5RW5kPTAsb2kudmFsdWU9MCxvaS52YWx1ZUVuZD0wLG9pLnRleHRFbmQ9Yy5sZW5ndGh9KGMpLG5vKGMseHMo''@;'; put 'put ''YywwLG9pLnRleHRFbmQpKX0obCk7YT49MDthPW5vKGwsYSkpXzAoYyxuaShsKSwhMCl9ZnVuY3Rpb24gSGYoYyxsLGEsZCl7Y29uc3QgaD1kaSgpLGY9bHMoKSx2PUFmKDIpO2YuZmlyc3RVcGRhdGVQYXNzJiZvcmUoZixjLHYsZCksbCE9PVJvJiZCYyhoLHYsbCkmJmxyZShmLGYuZGF0YVtW''@;'; put 'put ''dSgpXSxoLGhbeW9dLGMsaFt2KzFdPWZ1bmN0aW9uIG45ZShjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWN8fCgic3RyaW5nIj09dHlwZW9mIGw/Yys9bDoib2JqZWN0Ij09dHlwZW9mIGMmJihjPVByKG0yKGMpKSkpLGN9KGwsYSksZCx2KX1mdW5jdGlvbiBhcmUoYyxsKXtyZXR1cm4gbD49''@;'; put 'put ''Yy5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiBvcmUoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW1Z1KCldLHY9YXJlKGMsYSk7dXJlKGYsZCkmJm51bGw9PT1sJiYhdiYmKGw9ITEpLGw9ZnVuY3Rpb24gSzdlKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''c0MoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9b00oYT1yVShudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1udWxsKTtlbHNle2NvbnN0IHY9bC5kaXJl''@;'; put 'put ''Y3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PXZ8fGNbdl0hPT1oKWlmKGE9clUoaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IEk9ZnVuY3Rpb24gcTdlKGMsbCxhKXtjb25zdCBkPWE/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncztpZigwIT09YmQoZCkpcmV0dXJuIGNbeGwoZCldfShj''@;'; put 'put ''LGwsZCk7dm9pZCAwIT09SSYmQXJyYXkuaXNBcnJheShJKSYmKEk9clUobnVsbCxjLGwsSVsxXSxkKSxJPW9NKEksbC5hdHRycyxkKSxmdW5jdGlvbiBYN2UoYyxsLGEsZCl7Y1t4bChhP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MpXT1kfShjLGwsZCxJKSl9ZWxzZSBmPWZ1bmN0''@;'; put 'put ''aW9uIEo3ZShjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD1vTShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiBvTShkLGwuYXR0cnMsYSl9KGMsbCxkKX1yZXR1cm4gdm9pZCAwIT09ZiYmKGQ/''@;'; put 'put ''bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIHhuKGMsbCxhLGQsaCxmKXtsZXQgdj1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsTT14bCh2KSxJPWJkKHYpO2NbZF09YTtsZXQgaWUsRz0hMTtpZihBcnJheS5pc0Fy''@;'; put 'put ''cmF5KGEpPyhpZT1hWzFdLChudWxsPT09aWV8fGUyKGEsaWUpPjApJiYoRz0hMCkpOmllPWEsaClpZigwIT09SSl7Y29uc3QgeWU9eGwoY1tNKzFdKTtjW2QrMV09WW8oeWUsTSksMCE9PXllJiYoY1t5ZSsxXT1nbihjW3llKzFdLGQpKSxjW00rMV09ZnVuY3Rpb24gRWwoYyxsKXtyZXR1cm4g''@;'; put 'put ''MTMxMDcxJmN8bDw8MTd9KGNbTSsxXSxkKX1lbHNlIGNbZCsxXT1ZbyhNLDApLDAhPT1NJiYoY1tNKzFdPWduKGNbTSsxXSxkKSksTT1kO2Vsc2UgY1tkKzFdPVlvKEksMCksMD09PU0/TT1kOmNbSSsxXT1nbihjW0krMV0sZCksST1kO0cmJihjW2QrMV09RmYoY1tkKzFdKSksYnIoYyxpZSxk''@;'; put 'put ''LCEwKSxicihjLGllLGQsITEpLGZ1bmN0aW9uIHpuKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZlMihmLGwpPj0wJiYoYVtkKzFdPXduKGFbZCsxXSkpfShsLGllLGMsZCxmKSx2PVlv''@;'; put 'put ''KE0sSSksZj9sLmNsYXNzQmluZGluZ3M9djpsLnN0eWxlQmluZGluZ3M9dn0oaCxmLGwsYSx2LGQpfX1mdW5jdGlvbiByVShjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3Qgdj1hLmRpcmVjdGl2ZUVuZDtsZXQgTT1hLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2ZvcigtMT09PU0/TT1hLmRpcmVj''@;'; put 'put ''dGl2ZVN0YXJ0Ok0rKztNPHYmJihmPWxbTV0sZD1vTShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspTSsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9TSksZH1mdW5jdGlvbiBvTShjLGwsYSl7Y29uc3QgZD1hPzE6MjtsZXQgaD0tMTtpZihudWxsIT09bClmb3Io''@;'; put 'put ''bGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3Qgdj1sW2ZdOyJudW1iZXIiPT10eXBlb2Ygdj9oPXY6aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSksXzAoYyx2LCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZvaWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9u''@;'; put 'put ''IGxyZShjLGwsYSxkLGgsZix2LE0pe2lmKCEoMyZsLnR5cGUpKXJldHVybjtjb25zdCBJPWMuZGF0YSxHPUlbTSsxXSxpZT1mdW5jdGlvbiBrbihjKXtyZXR1cm4hKDEmfmMpfShHKT9jcmUoSSxsLGEsaCxiZChHKSx2KTp2b2lkIDA7WkkoaWUpfHwoWkkoZil8fGZ1bmN0aW9uIF91KGMpe3Jl''@;'; put 'put ''dHVybiEoMiZ+Yyl9KEcpJiYoZj1jcmUoSSxudWxsLGEsaCxNLHYpKSxmdW5jdGlvbiBiRChjLGwsYSxkLGgpe2lmKGwpaD9jLmFkZENsYXNzKGEsZCk6Yy5yZW1vdmVDbGFzcyhhLGQpO2Vsc2V7bGV0IGY9LTE9PT1kLmluZGV4T2YoIi0iKT92b2lkIDA6SzMuRGFzaENhc2U7bnVsbD09aD9j''@;'; put 'put ''LnJlbW92ZVN0eWxlKGEsZCxmKTooInN0cmluZyI9PXR5cGVvZiBoJiZoLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihoPWguc2xpY2UoMCwtMTApLGZ8PUszLkltcG9ydGFudCksYy5zZXRTdHlsZShhLGQsaCxmKSl9fShkLHYsYjUoVnUoKSxhKSxoLGYpKX1mdW5jdGlvbiBjcmUoYyxsLGEs''@;'; put 'put ''ZCxoLGYpe2NvbnN0IHY9bnVsbD09PWw7bGV0IE07Zm9yKDtoPjA7KXtjb25zdCBJPWNbaF0sRz1BcnJheS5pc0FycmF5KEkpLGllPUc/SVsxXTpJLHVlPW51bGw9PT1pZTtsZXQgeWU9YVtoKzFdO3llPT09Um8mJih5ZT11ZT90czp2b2lkIDApO2xldCBFZT11ZT9BNih5ZSxkKTppZT09PWQ/''@;'; put 'put ''eWU6dm9pZCAwO2lmKEcmJiFaSShFZSkmJihFZT1BNihJLGQpKSxaSShFZSkmJihNPUVlLHYpKXJldHVybiBNO2NvbnN0IGplPWNbaCsxXTtoPXY/eGwoamUpOmJkKGplKX1pZihudWxsIT09bCl7bGV0IEk9Zj9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO251bGwhPUkmJihN''@;'; put 'put ''PUE2KEksZCkpfXJldHVybiBNfWZ1bmN0aW9uIFpJKGMpe3JldHVybiB2b2lkIDAhPT1jfWZ1bmN0aW9uIHVyZShjLGwpe3JldHVybiEhKGMuZmxhZ3MmKGw/ODoxNikpfWZ1bmN0aW9uIGRyZShjLGwsYSl7IWZ1bmN0aW9uIE5mKGMsbCxhLGQpe2NvbnN0IGg9bHMoKSxmPUFmKDIpO2guZmly''@;'; put 'put ''c3RVcGRhdGVQYXNzJiZvcmUoaCxudWxsLGYsZCk7Y29uc3Qgdj1kaSgpO2lmKGEhPT1SbyYmQmModixmLGEpKXtjb25zdCBNPWguZGF0YVtWdSgpXTtpZih1cmUoTSxkKSYmIWFyZShoLGYpKXtsZXQgST1kP00uY2xhc3Nlc1dpdGhvdXRIb3N0Ok0uc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9''@;'; put 'put ''PUkmJihhPW9kKEksYXx8IiIpKSxoaChoLE0sdixhLGQpfWVsc2UhZnVuY3Rpb24gdDllKGMsbCxhLGQsaCxmLHYsTSl7aD09PVJvJiYoaD10cyk7bGV0IEk9MCxHPTAsaWU9MDxoLmxlbmd0aD9oWzBdOm51bGwsdWU9MDxmLmxlbmd0aD9mWzBdOm51bGw7Zm9yKDtudWxsIT09aWV8fG51bGwh''@;'; put 'put ''PT11ZTspe2NvbnN0IHllPUk8aC5sZW5ndGg/aFtJKzFdOnZvaWQgMCxFZT1HPGYubGVuZ3RoP2ZbRysxXTp2b2lkIDA7bGV0IHFlLGplPW51bGw7aWU9PT11ZT8oSSs9MixHKz0yLHllIT09RWUmJihqZT11ZSxxZT1FZSkpOm51bGw9PT11ZXx8bnVsbCE9PWllJiZpZTx1ZT8oSSs9MixqZT1p''@;'; put 'put ''ZSk6KEcrPTIsamU9dWUscWU9RWUpLG51bGwhPT1qZSYmbHJlKGMsbCxhLGQsamUscWUsdixNKSxpZT1JPGgubGVuZ3RoP2hbSV06bnVsbCx1ZT1HPGYubGVuZ3RoP2ZbR106bnVsbH19KGgsTSx2LHZbeW9dLHZbZisxXSx2W2YrMV09ZnVuY3Rpb24gUTdlKGMsbCxhKXtpZihudWxsPT1hfHwi''@;'; put 'put ''Ij09PWEpcmV0dXJuIHRzO2NvbnN0IGQ9W10saD1tMihhKTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxm''@;'; put 'put ''LGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1cm4gZH0oYyxsLGEpLGQsZil9fShfMCxhcCxZbChkaSgpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gZGUoYyxsLGEsZCl7Y29uc3QgaD1kaSgpLGY9bHMoKSx2PXdvK2MsTT1oW3lvXSxJPWYuZmlyc3RDcmVhdGVQYXNzP2Z1''@;'; put 'put ''bmN0aW9uIE05ZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1sLmNvbnN0cyxJPWo1KGwsYywyLGQsZDIodixoKSk7cmV0dXJuIHZTKGwsYSxJLGQyKHYsZikpLG51bGwhPT1JLmF0dHJzJiZDeShJLEkuYXR0cnMsITEpLG51bGwhPT1JLm1lcmdlZEF0dHJzJiZDeShJLEkubWVyZ2VkQXR0cnMsITAp''@;'; put 'put ''LG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxJKSxJfSh2LGYsaCxsLGEsZCk6Zi5kYXRhW3ZdLEc9Z3JlKGYsaCxJLE0sbCxjKTtoW3ZdPUc7Y29uc3QgaWU9SjAoSSk7cmV0dXJuIGgyKEksITApLENEKE0sRyxJKSwhZnVuY3Rpb24gSDgoYyl7cmV0dXJuISgz''@;'; put 'put ''MiZ+Yy5mbGFncyl9KEkpJiZxNigpJiZsMChmLGgsRyxJKSwwPT09ZnVuY3Rpb24gdVYoKXtyZXR1cm4gQ28ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50fSgpJiZqdShHLGgpLGZ1bmN0aW9uIGRWKCl7Q28ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksaWUmJihwUyhmLGgsSSksZlMo''@;'; put 'put ''ZixJLGgpKSxudWxsIT09ZCYmZ1MoaCxJKSxkZX1mdW5jdGlvbiBoZSgpe2xldCBjPXVsKCk7aUMoKT9hQygpOihjPWMucGFyZW50LGgyKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIGhWKGMpe3JldHVybiBDby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBt''@;'; put 'put ''Vigpe0NvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiBlaygpe0NvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9bHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihSdihhLGMpLHJ1KGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSks''@;'; put 'put ''bnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIGtWKGMpe3JldHVybiEhKDgmYy5mbGFncyl9KGwpJiZoaChhLGwsZGkoKSxsLmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9bC5zdHlsZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24gRFYoYyl7cmV0dXJuISEoMTYmYy5mbGFn''@;'; put 'put ''cyl9KGwpJiZoaChhLGwsZGkoKSxsLnN0eWxlc1dpdGhvdXRIb3N0LCExKSxoZX1mdW5jdGlvbiBHdChjLGwsYSxkKXtyZXR1cm4gZGUoYyxsLGEsZCksaGUoKSxHdH1sZXQgZ3JlPShjLGwsYSxkLGgsZik9PihmMighMCksejQoZCxoLGZ1bmN0aW9uIHNrKCl7cmV0dXJuIENvLmxGcmFtZS5j''@;'; put 'put ''dXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gc2koYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPWxzKCksZj1jK3dvLHY9aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gVDllKGMsbCxhLGQsaCl7Y29uc3QgZj1sLmNvbnN0cyx2PWQyKGYsZCksTT1qNShsLGMsOCwibmctY29udGFpbmVyIix2''@;'; put 'put ''KTtyZXR1cm4gbnVsbCE9PXYmJkN5KE0sdiwhMCksdlMobCxhLE0sZDIoZixoKSksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVzLmVsZW1lbnRTdGFydChsLE0pLE19KGYsaCxkLGwsYSk6aC5kYXRhW2ZdO2gyKHYsITApO2NvbnN0IE09bXJlKGgsZCx2LGMpO3JldHVybiBkW2ZdPU0scTYo''@;'; put 'put ''KSYmbDAoaCxkLE0sdiksanUoTSxkKSxKMCh2KSYmKHBTKGgsZCx2KSxmUyhoLHYsZCkpLG51bGwhPWEmJmdTKGQsdiksc2l9ZnVuY3Rpb24gbGkoKXtsZXQgYz11bCgpO2NvbnN0IGw9bHMoKTtyZXR1cm4gaUMoKT9hQygpOihjPWMucGFyZW50LGgyKGMsITEpKSxsLmZpcnN0Q3JlYXRlUGFz''@;'; put 'put ''cyYmKFJ2KGwsYykscnUoYykmJmwucXVlcmllcy5lbGVtZW50RW5kKGMpKSxsaX1mdW5jdGlvbiBGbChjLGwsYSl7cmV0dXJuIHNpKGMsbCxhKSxsaSgpLEZsfWxldCBtcmU9KGMsbCxhLGQpPT4oZjIoITApLGVTKGxbeW9dLCIiKSk7ZnVuY3Rpb24gTG4oKXtyZXR1cm4gZGkoKX1mdW5jdGlv''@;'; put 'put ''biBvcChjLGwsYSl7Y29uc3QgZD1kaSgpO3JldHVybiBCYyhkLGFoKCksbCkmJkYwKGxzKCksUXMoKSxkLGMsbCxkW3lvXSxhLCEwKSxvcH1mdW5jdGlvbiBsVShjLGwsYSl7Y29uc3QgZD1kaSgpO2lmKEJjKGQsYWgoKSxsKSl7Y29uc3QgZj1scygpLHY9UXMoKTtGMChmLHYsZCxjLGwsVzQo''@;'; put 'put ''c0MoZi5kYXRhKSx2LGQpLGEsITApfXJldHVybiBsVX1jb25zdCBqOD12b2lkIDA7dmFyIEk5ZT1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGo4XSxbWyJBTSIsIlBNIl0sajgsajhdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIs''@;'; put 'put ''IlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGo4LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJB''@;'; put 'put ''IiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0''@;'; put 'put ''ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxqOCxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDpt''@;'; put 'put ''bSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGo4LCJ7MX0gJ2F0JyB7MH0iLGo4XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywj''@;'; put 'put ''IzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIEQ5ZShjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEm''@;'; put 'put ''JjA9PT1kPzE6NX1dO2xldCBVeT17fTtmdW5jdGlvbiBvMShjKXtjb25zdCBsPWZ1bmN0aW9uIEw5ZShjKXtyZXR1cm4gYy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfShjKTtsZXQgYT15cmUobCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPXly''@;'; put 'put ''ZShkKSxhKXJldHVybiBhO2lmKCJlbiI9PT1kKXJldHVybiBJOWU7dGhyb3cgbmV3IFFuKDcwMSwhMSl9ZnVuY3Rpb24geXJlKGMpe3JldHVybiBjIGluIFV5fHwoVXlbY109VnQubmcmJlZ0Lm5nLmNvbW1vbiYmVnQubmcuY29tbW9uLmxvY2FsZXMmJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzW2Nd''@;'; put 'put ''KSxVeVtjXX12YXIgZWM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zv''@;'; put 'put ''cm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0iTW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJz''@;'; put 'put ''dERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRpbWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9y''@;'; put 'put ''bWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tjLkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJy''@;'; put 'put ''ZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0iUGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30o''@;'; put 'put ''ZWN8fHt9KTtjb25zdCBaeT0iZW4tVVMiO2xldCBicmU9Wnk7ZnVuY3Rpb24gRnQoYyxsLGEsZCl7Y29uc3QgaD1kaSgpLGY9bHMoKSx2PXVsKCk7cmV0dXJuIGhVKGYsaCxoW3lvXSx2LGMsbCxkKSxGdH1mdW5jdGlvbiBkVShjLGwpe2NvbnN0IGE9dWwoKSxkPWRpKCksaD1scygpO3JldHVy''@;'; put 'put ''biBoVShoLGQsVzQoc0MoaC5kYXRhKSxhLGQpLGEsYyxsKSxkVX1mdW5jdGlvbiBoVShjLGwsYSxkLGgsZix2KXtjb25zdCBNPUowKGQpLEc9Yy5maXJzdENyZWF0ZVBhc3MmJnA4KGMpLGllPWxbY2xdLHVlPU5EKGwpO2xldCB5ZT0hMDtpZigzJmQudHlwZXx8dil7Y29uc3QgcWU9TDAoZCxs''@;'; put 'put ''KSxydD12P3YocWUpOnFlLHB0PXVlLmxlbmd0aCxkdD12P3ZuPT52KENsKHZuW2QuaW5kZXhdKSk6ZC5pbmRleDtsZXQgSnQ9bnVsbDtpZighdiYmTSYmKEp0PWZ1bmN0aW9uIGt2ZShjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGgt''@;'; put 'put ''MTtmKz0yKXtjb25zdCB2PWhbZl07aWYodj09PWEmJmhbZisxXT09PWQpe2NvbnN0IE09bFtYMF0sST1oW2YrMl07cmV0dXJuIE0ubGVuZ3RoPkk/TVtJXTpudWxsfSJzdHJpbmciPT10eXBlb2YgdiYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4KSksbnVsbCE9PUp0KShKdC5f''@;'; put 'put ''X25nTGFzdExpc3RlbmVyRm5fX3x8SnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsSnQuX19uZ0xhc3RMaXN0ZW5lckZuX189Zix5ZT0hMTtlbHNle2Y9WXJlKGQsbCxpZSxmLCExKTtjb25zdCB2bj1hLmxpc3RlbihydCxoLGYpO3VlLnB1c2goZix2biksRyYmRy5wdXNoKGgsZHQscHQscHQr''@;'; put 'put ''MSl9fWVsc2UgZj1ZcmUoZCxsLGllLGYsITEpO2NvbnN0IEVlPWQub3V0cHV0cztsZXQgamU7aWYoeWUmJm51bGwhPT1FZSYmKGplPUVlW2hdKSl7Y29uc3QgcWU9amUubGVuZ3RoO2lmKHFlKWZvcihsZXQgcnQ9MDtydDxxZTtydCs9Mil7Y29uc3QgQ249bFtqZVtydF1dW2plW3J0KzFdXS5z''@;'; put 'put ''dWJzY3JpYmUoZiksdG49dWUubGVuZ3RoO3VlLnB1c2goZixDbiksRyYmRy5wdXNoKGgsZC5pbmRleCx0biwtKHRuKzEpKX19fWZ1bmN0aW9uIFdyZShjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtyZXR1cm4gdTIoNixsLGEpLCExIT09YShkKX1jYXRjaChmKXtyZXR1cm4gejUoYyxm''@;'; put 'put ''KSwhMX1maW5hbGx5e3UyKDcsbCxhKSxfZShoKX19ZnVuY3Rpb24gWXJlKGMsbCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9uIGYodil7aWYodj09PUZ1bmN0aW9uKXJldHVybiBkO2I4KGMuY29tcG9uZW50T2Zmc2V0Pi0xP08xKGMuaW5kZXgsbCk6bCk7bGV0IEk9V3JlKGwsYSxkLHYpLEc9Zi5f''@;'; put 'put ''X25nTmV4dExpc3RlbmVyRm5fXztmb3IoO0c7KUk9V3JlKGwsYSxHLHYpJiZJLEc9Ry5fX25nTmV4dExpc3RlbmVyRm5fXztyZXR1cm4gaCYmITE9PT1JJiZ2LnByZXZlbnREZWZhdWx0KCksSX19ZnVuY3Rpb24gTGUoYz0xKXtyZXR1cm4gZnVuY3Rpb24gd1YoYyl7cmV0dXJuKENvLmxGcmFt''@;'; put 'put ''ZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24gdEMoYyxsKXtmb3IoO2M+MDspbD1sW28wXSxjLS07cmV0dXJuIGx9KGMsQ28ubEZyYW1lLmNvbnRleHRMVmlldykpW2NsXX0oYyl9ZnVuY3Rpb24gRHZlKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIGZ2KGMpe2NvbnN0IGw9Yy5hdHRy''@;'; put 'put ''cztpZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD95NChjLGYsITApOk53KGQsZikpcmV0dXJu''@;'; put 'put ''IGh9ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gc2EoYyl7Y29uc3QgbD1kaSgpW1psXVtyY107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249ZnVuY3Rpb24gUWgoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8YztkKyspYS5wdXNoKGwpO3JldHVybiBhfShj''@;'; put 'put ''P2MubGVuZ3RoOjEsbnVsbCksaD1kLnNsaWNlKCk7bGV0IGY9bC5jaGlsZDtmb3IoO251bGwhPT1mOyl7Y29uc3Qgdj1jP0R2ZShmLGMpOjA7bnVsbCE9PXYmJihoW3ZdP2hbdl0ucHJvamVjdGlvbk5leHQ9ZjpkW3ZdPWYsaFt2XT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIFlyKGMsbD0wLGEp''@;'; put 'put ''e2NvbnN0IGQ9ZGkoKSxoPWxzKCksZj1qNShoLHdvK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9uJiYoZi5wcm9qZWN0aW9uPWwpLGFDKCksKCFkW251XXx8XzUoKSkmJjMyJn5mLmZsYWdzJiZmdW5jdGlvbiB0aihjLGwsYSl7eUQobFt5b10sMCxsLGEsYXkoYyxhLGwp''@;'; put 'put ''LHU4KGEucGFyZW50fHxsW3JjXSxhLGwpKX0oaCxkLGYpfWZ1bmN0aW9uIGZNKGMsbCxhKXtyZXR1cm4gZlUoYywiIixsLCIiLGEpLGZNfWZ1bmN0aW9uIGZVKGMsbCxhLGQsaCl7Y29uc3QgZj1kaSgpLHY9WWwoZixsLGEsZCk7cmV0dXJuIHYhPT1SbyYmRjAobHMoKSxRcygpLGYsYyx2LGZb''@;'; put 'put ''eW9dLGgsITEpLGZVfWZ1bmN0aW9uIGFvKGMsbCxhLGQpeyFmdW5jdGlvbiB5SShjLGwsYSxkKXtjb25zdCBoPWxzKCk7aWYoaC5maXJzdENyZWF0ZVBhc3Mpe2NvbnN0IGY9dWwoKTtfSShoLG5ldyBwSShsLGEsZCksZi5pbmRleCksZnVuY3Rpb24gT3ooYyxsKXtjb25zdCBhPWMuY29udGVu''@;'; put 'put ''dFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLCEoMiZ+YSkmJihoLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1yZXR1cm4gbUkoaCxkaSgpLGEpfShjLGwsYSxk''@;'; put 'put ''KX1mdW5jdGlvbiBxYShjLGwsYSl7IWZ1bmN0aW9uIHZJKGMsbCxhKXtjb25zdCBkPWxzKCk7cmV0dXJuIGQuZmlyc3RDcmVhdGVQYXNzJiYoX0koZCxuZXcgcEkoYyxsLGEpLC0xKSwhKDImfmwpJiYoZC5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLG1JKGQsZGkoKSxsKX0oYyxsLGEpfWZ1bmN0''@;'; put 'put ''aW9uIENpKGMpe2NvbnN0IGw9ZGkoKSxhPWxzKCksZD1sQygpO0IzKGQrMSk7Y29uc3QgaD1ZUyhhLGQpO2lmKGMuZGlydHkmJmZ1bmN0aW9uIGxWKGMpe3JldHVybiEoNCZ+Y1tVYV0pfShsKT09PSEoMiZ+aC5tZXRhZGF0YS5mbGFncykpe2lmKG51bGw9PT1oLm1hdGNoZXMpYy5yZXNldChb''@;'; put 'put ''XSk7ZWxzZXtjb25zdCBmPXdJKGwsZCk7Yy5yZXNldChmLGJrKSxjLm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFNpKCl7cmV0dXJuIGZ1bmN0aW9uIEk4KGMsbCl7cmV0dXJuIGNbdWRdLnF1ZXJpZXNbbF0ucXVlcnlMaXN0fShkaSgpLGxDKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGhhKGMpe3JldHVybiBFNChmdW5jdGlvbiB2Vigpe3JldHVybiBDby5sRnJhbWUuY29udGV4dExWaWV3fSgpLHdvK2MpfWZ1bmN0aW9uIE9lKGMsbD0iIil7Y29uc3QgYT1kaSgpLGQ9bHMoKSxoPWMrd28sZj1kLmZpcnN0Q3JlYXRlUGFzcz9qNShkLGgsMSxsLG51bGwpOmQuZGF0YVto''@;'; put 'put ''XSx2PXVpZShkLGEsZixsLGMpO2FbaF09dixxNigpJiZsMChkLGEsdixmKSxoMihmLCExKX1sZXQgdWllPShjLGwsYSxkLGgpPT4oZjIoITApLGZ1bmN0aW9uIGo0KGMsbCl7cmV0dXJuIGMuY3JlYXRlVGV4dChsKX0obFt5b10sZCkpO2Z1bmN0aW9uIHdyKGMpe3JldHVybiBEcigiIixjLCIi''@;'; put 'put ''KSx3cn1mdW5jdGlvbiBEcihjLGwsYSl7Y29uc3QgZD1kaSgpLGg9WWwoZCxjLGwsYSk7cmV0dXJuIGghPT1SbyYmdjIoZCxWdSgpLGgpLERyfWZ1bmN0aW9uIFV1KGMsbCxhLGQsaCl7Y29uc3QgZj1kaSgpLHY9ZnVuY3Rpb24gR2woYyxsLGEsZCxoLGYpe2NvbnN0IE09cnAoYyxUZigpLGEs''@;'; put 'put ''aCk7cmV0dXJuIEFmKDIpLE0/bCtDYShhKStkK0NhKGgpK2Y6Um99KGYsYyxsLGEsZCxoKTtyZXR1cm4gdiE9PVJvJiZ2MihmLFZ1KCksdiksVXV9ZnVuY3Rpb24gVmYoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1kaSgpLEk9ZnVuY3Rpb24gYnUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBHPUZ5''@;'; put 'put ''KGMsVGYoKSxhLGgsdik7cmV0dXJuIEFmKDMpLEc/bCtDYShhKStkK0NhKGgpK2YrQ2EodikrTTpSb30oTSxjLGwsYSxkLGgsZix2KTtyZXR1cm4gSSE9PVJvJiZ2MihNLFZ1KCksSSksVmZ9ZnVuY3Rpb24gS0koYyxsLGEsZCxoLGYsdixNLEkpe2NvbnN0IEc9ZGkoKSxpZT1mdW5jdGlvbiBN''@;'; put 'put ''bChjLGwsYSxkLGgsZix2LE0sSSxHKXtjb25zdCB1ZT15ZChjLFRmKCksYSxoLHYsSSk7cmV0dXJuIEFmKDQpLHVlP2wrQ2EoYSkrZCtDYShoKStmK0NhKHYpK00rQ2EoSSkrRzpSb30oRyxjLGwsYSxkLGgsZix2LE0sSSk7cmV0dXJuIGllIT09Um8mJnYyKEcsVnUoKSxpZSksS0l9ZnVuY3Rp''@;'; put 'put ''b24gcGkoYyxsLGEpe1NJKGwpJiYobD1sKCkpO2NvbnN0IGQ9ZGkoKTtyZXR1cm4gQmMoZCxhaCgpLGwpJiZGMChscygpLFFzKCksZCxjLGwsZFt5b10sYSwhMSkscGl9ZnVuY3Rpb24gbWkoYyxsKXtjb25zdCBhPVNJKGMpO3JldHVybiBhJiZjLnNldChsKSxhfWZ1bmN0aW9uIGdpKGMsbCl7''@;'; put 'put ''Y29uc3QgYT1kaSgpLGQ9bHMoKSxoPXVsKCk7cmV0dXJuIGhVKGQsYSxhW3lvXSxoLGMsbCksZ2l9ZnVuY3Rpb24gcFUoYyxsLGEsZCxoKXtpZihjPVlpKGMpLEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspcFUoY1tmXSxsLGEsZCxoKTtlbHNle2NvbnN0IGY9''@;'; put 'put ''bHMoKSx2PWRpKCksTT11bCgpO2xldCBJPV9mKGMpP2M6WWkoYy5wcm92aWRlKTtjb25zdCBHPUN2KGMpLGllPTEwNDg1NzUmTS5wcm92aWRlckluZGV4ZXMsdWU9TS5kaXJlY3RpdmVTdGFydCx5ZT1NLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoX2YoYyl8fCFjLm11bHRpKXtjb25zdCBFZT1u''@;'; put 'put ''ZXcgUDEoRyxoLEdlKSxqZT1tVShJLGwsaD9pZTppZSt5ZSx1ZSk7LTE9PT1qZT8oaGQoTnYoTSx2KSxmLEkpLGdVKGYsYyxsLmxlbmd0aCksbC5wdXNoKEkpLE0uZGlyZWN0aXZlU3RhcnQrKyxNLmRpcmVjdGl2ZUVuZCsrLGgmJihNLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksYS5wdXNo''@;'; put 'put ''KEVlKSx2LnB1c2goRWUpKTooYVtqZV09RWUsdltqZV09RWUpfWVsc2V7Y29uc3QgRWU9bVUoSSxsLGllK3llLHVlKSxqZT1tVShJLGwsaWUsaWUreWUpLHJ0PWplPj0wJiZhW2plXTtpZihoJiYhcnR8fCFoJiYhKEVlPj0wJiZhW0VlXSkpe2hkKE52KE0sdiksZixJKTtjb25zdCBwdD1mdW5j''@;'; put 'put ''dGlvbiBLdmUoYyxsLGEsZCxoKXtjb25zdCBmPW5ldyBQMShjLGEsR2UpO3JldHVybiBmLm11bHRpPVtdLGYuaW5kZXg9bCxmLmNvbXBvbmVudFByb3ZpZGVycz0wLG1pZShmLGgsZCYmIWEpLGZ9KGg/JHZlOkd2ZSxhLmxlbmd0aCxoLGQsRyk7IWgmJnJ0JiYoYVtqZV0ucHJvdmlkZXJGYWN0''@;'; put 'put ''b3J5PXB0KSxnVShmLGMsbC5sZW5ndGgsMCksbC5wdXNoKEkpLE0uZGlyZWN0aXZlU3RhcnQrKyxNLmRpcmVjdGl2ZUVuZCsrLGgmJihNLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksYS5wdXNoKHB0KSx2LnB1c2gocHQpfWVsc2UgZ1UoZixjLEVlPi0xP0VlOmplLG1pZShhW2g/amU6RWVd''@;'; put 'put ''LEcsIWgmJmQpKTshaCYmZCYmcnQmJmFbamVdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gZ1UoYyxsLGEsZCl7Y29uc3QgaD1fZihsKSxmPWZ1bmN0aW9uIFA2KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7Y29uc3QgST0oZj9ZaShsLnVzZUNsYXNzKTpsKS5w''@;'; put 'put ''cm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoSSl7Y29uc3QgRz1jLmRlc3Ryb3lIb29rc3x8KGMuZGVzdHJveUhvb2tzPVtdKTtpZighaCYmbC5tdWx0aSl7Y29uc3QgaWU9Ry5pbmRleE9mKGEpOy0xPT09aWU/Ry5wdXNoKGEsW2QsSV0pOkdbaWUrMV0ucHVzaChkLEkpfWVsc2UgRy5wdXNoKGEs''@;'; put 'put ''SSl9fX1mdW5jdGlvbiBtaWUoYyxsLGEpe3JldHVybiBhJiZjLmNvbXBvbmVudFByb3ZpZGVycysrLGMubXVsdGkucHVzaChsKS0xfWZ1bmN0aW9uIG1VKGMsbCxhLGQpe2ZvcihsZXQgaD1hO2g8ZDtoKyspaWYobFtoXT09PWMpcmV0dXJuIGg7cmV0dXJuLTF9ZnVuY3Rpb24gR3ZlKGMsbCxh''@;'; put 'put ''LGQpe3JldHVybiB2VSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiAkdmUoYyxsLGEsZCl7Y29uc3QgaD10aGlzLm11bHRpO2xldCBmO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtjb25zdCB2PXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxNPUQ0KGEsYVtLaV0sdGhp''@;'; put 'put ''cy5wcm92aWRlckZhY3RvcnkuaW5kZXgsZCk7Zj1NLnNsaWNlKDAsdiksdlUoaCxmKTtmb3IobGV0IEk9djtJPE0ubGVuZ3RoO0krKylmLnB1c2goTVtJXSl9ZWxzZSBmPVtdLHZVKGgsZik7cmV0dXJuIGZ9ZnVuY3Rpb24gdlUoYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsLnB1''@;'; put 'put ''c2goKDAsY1thXSkoKSk7cmV0dXJuIGx9ZnVuY3Rpb24gZGEoYyxsPVtdKXtyZXR1cm4gYT0+e2EucHJvdmlkZXJzUmVzb2x2ZXI9KGQsaCk9PmZ1bmN0aW9uIFl2ZShjLGwsYSl7Y29uc3QgZD1scygpO2lmKGQuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBoPVZjKGMpO3BVKGEsZC5kYXRhLGQu''@;'; put 'put ''Ymx1ZXByaW50LGgsITApLHBVKGwsZC5kYXRhLGQuYmx1ZXByaW50LGgsITEpfX0oZCxoP2goYyk6YyxsKX19bGV0IHF2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5jYWNoZWRJbmplY3RvcnM9bmV3IE1hcH1nZXRPckNyZWF0ZVN0YW5kYWxv''@;'; put 'put ''bmVJbmplY3RvcihhKXtpZighYS5zdGFuZGFsb25lKXJldHVybiBudWxsO2lmKCF0aGlzLmNhY2hlZEluamVjdG9ycy5oYXMoYSkpe2NvbnN0IGQ9cmgoMCxhLnR5cGUpLGg9ZC5sZW5ndGg+MD9HNChbZF0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHthLnR5cGUubmFtZX1dYCk6bnVs''@;'; put 'put ''bDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoYSxoKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGEpfW5nT25EZXN0cm95KCl7dHJ5e2Zvcihjb25zdCBhIG9mIHRoaXMuY2FjaGVkSW5qZWN0b3JzLnZhbHVlcygpKW51bGwhPT1hJiZhLmRlc3Ryb3koKX1maW5hbGx5e3RoaXMu''@;'; put 'put ''Y2FjaGVkSW5qZWN0b3JzLmNsZWFyKCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBjKHhyKGhjKSl9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHFJKGMpe3kyKCJOZ1N0YW5kYWxvbmUiKSxjLmdl''@;'; put 'put ''dFN0YW5kYWxvbmVJbmplY3Rvcj1sPT5sLmdldChxdmUpLmdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGMpfWZ1bmN0aW9uIEdzKGMsbCxhKXtjb25zdCBkPU8wKCkrYyxoPWRpKCk7cmV0dXJuIGhbZF09PT1Sbz9iMihoLGQsYT9sLmNhbGwoYSk6bCgpKTpmdW5jdGlvbiBBYyhjLGwp''@;'; put 'put ''e3JldHVybiBjW2xdfShoLGQpfWZ1bmN0aW9uIHNwKGMsbCxhLGQpe3JldHVybiB5aWUoZGkoKSxPMCgpLGMsbCxhLGQpfWZ1bmN0aW9uIGxwKGMsbCxhLGQsaCl7cmV0dXJuIGJpZShkaSgpLE8wKCksYyxsLGEsZCxoKX1mdW5jdGlvbiBwTShjLGwsYSxkLGgsZil7cmV0dXJuIF9pZShkaSgp''@;'; put 'put ''LE8wKCksYyxsLGEsZCxoLGYpfWZ1bmN0aW9uIEpJKGMsbCxhLGQsaCxmLHYpe3JldHVybiBmdW5jdGlvbiB3aWUoYyxsLGEsZCxoLGYsdixNLEkpe2NvbnN0IEc9bCthO3JldHVybiB5ZChjLEcsaCxmLHYsTSk/YjIoYyxHKzQsST9kLmNhbGwoSSxoLGYsdixNKTpkKGgsZix2LE0pKTpnTShj''@;'; put 'put ''LEcrNCl9KGRpKCksTzAoKSxjLGwsYSxkLGgsZix2KX1mdW5jdGlvbiBnTShjLGwpe2NvbnN0IGE9Y1tsXTtyZXR1cm4gYT09PVJvP3ZvaWQgMDphfWZ1bmN0aW9uIHlpZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1sK2E7cmV0dXJuIEJjKGMsdixoKT9iMihjLHYrMSxmP2QuY2FsbChmLGgpOmQo''@;'; put 'put ''aCkpOmdNKGMsdisxKX1mdW5jdGlvbiBiaWUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1sK2E7cmV0dXJuIHJwKGMsTSxoLGYpP2IyKGMsTSsyLHY/ZC5jYWxsKHYsaCxmKTpkKGgsZikpOmdNKGMsTSsyKX1mdW5jdGlvbiBfaWUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBJPWwrYTtyZXR1cm4g''@;'; put 'put ''RnkoYyxJLGgsZix2KT9iMihjLEkrMyxNP2QuY2FsbChNLGgsZix2KTpkKGgsZix2KSk6Z00oYyxJKzMpfWZ1bmN0aW9uIGVsKGMsbCl7Y29uc3QgYT1scygpO2xldCBkO2NvbnN0IGg9Yyt3bzthLmZpcnN0Q3JlYXRlUGFzcz8oZD1mdW5jdGlvbiBpeWUoYyxsKXtpZihsKWZvcihsZXQgYT1s''@;'; put 'put ''Lmxlbmd0aC0xO2E+PTA7YS0tKXtjb25zdCBkPWxbYV07aWYoYz09PWQubmFtZSlyZXR1cm4gZH19KGwsYS5waXBlUmVnaXN0cnkpLGEuZGF0YVtoXT1kLGQub25EZXN0cm95JiYoYS5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChoLGQub25EZXN0cm95KSk6ZD1hLmRhdGFbaF07Y29uc3QgZj1k''@;'; put 'put ''LmZhY3Rvcnl8fChkLmZhY3Rvcnk9bXUoZC50eXBlKSksTT1fbChHZSk7dHJ5e2NvbnN0IEk9RnYoITEpLEc9ZigpO3JldHVybiBGdihJKSxmdW5jdGlvbiBPdmUoYyxsLGEsZCl7YT49Yy5kYXRhLmxlbmd0aCYmKGMuZGF0YVthXT1udWxsLGMuYmx1ZXByaW50W2FdPW51bGwpLGxbYV09ZH0o''@;'; put 'put ''YSxkaSgpLGgsRyksR31maW5hbGx5e19sKE0pfX1mdW5jdGlvbiBEYyhjLGwsYSl7Y29uc3QgZD1jK3dvLGg9ZGkoKSxmPUU0KGgsZCk7cmV0dXJuIG1NKGgsZCk/eWllKGgsTzAoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gejgoYyxsLGEsZCl7Y29uc3Qg''@;'; put 'put ''aD1jK3dvLGY9ZGkoKSx2PUU0KGYsaCk7cmV0dXJuIG1NKGYsaCk/YmllKGYsTzAoKSxsLHYudHJhbnNmb3JtLGEsZCx2KTp2LnRyYW5zZm9ybShhLGQpfWZ1bmN0aW9uIHlVKGMsbCxhLGQsaCl7Y29uc3QgZj1jK3dvLHY9ZGkoKSxNPUU0KHYsZik7cmV0dXJuIG1NKHYsZik/X2llKHYsTzAo''@;'; put 'put ''KSxsLE0udHJhbnNmb3JtLGEsZCxoLE0pOk0udHJhbnNmb3JtKGEsZCxoKX1mdW5jdGlvbiBtTShjLGwpe3JldHVybiBjW0tpXS5kYXRhW2xdLnB1cmV9ZnVuY3Rpb24gSWMoYyxsKXtyZXR1cm4gZnkoYyxsKX1jbGFzcyB5TXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZ1bGw9bDtjb25zdCBhPWwu''@;'; put 'put ''c3BsaXQoIi4iKTt0aGlzLm1ham9yPWFbMF0sdGhpcy5taW5vcj1hWzFdLHRoaXMucGF0Y2g9YS5zbGljZSgyKS5qb2luKCIuIil9fWNvbnN0IE5pZT1uZXcgeU0oIjE3LjMuMTIiKTtsZXQgVmllPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53''@;'; put 'put ''YXJuKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSkoKTtjb25zdCBaaWU9bmV3''@;'; put 'put ''IE10KCIiKSx0Uj1uZXcgTXQoIiIpO2xldCBFVSxNVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLnRh''@;'; put 'put ''c2tUcmFja2luZ1pvbmU9bnVsbCxFVXx8KGZ1bmN0aW9uIFF5ZShjKXtFVT1jfShoKSxoLmFkZFRvV2luZG93KGQpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxhLnJ1bigoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0''@;'; put 'put ''KCJUYXNrVHJhY2tpbmdab25lIil9KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5v''@;'; put 'put ''blN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntXYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJl''@;'; put 'put ''bG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1''@;'; put 'put ''bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IoKX19KTtlbHNl''@;'; put 'put ''e2xldCBhPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZD0+IWQudXBkYXRlQ2J8fCFkLnVwZGF0ZUNiKGEpfHwoY2xlYXJUaW1lb3V0KGQudGltZW91dElkKSwhMSkpfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChhPT4oe3NvdXJjZTphLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmEuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmEuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhhLGQsaCl7bGV0IGY9LTE7ZCYmZD4wJiYo''@;'; put 'put ''Zj1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIodj0+di50aW1lb3V0SWQhPT1mKSxhKCl9LGQpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmEsdGltZW91dElkOmYsdXBkYXRlQ2I6aH0pfXdoZW5TdGFibGUoYSxkLGgpe2lmKGgm''@;'; put 'put ''JiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycp''@;'; put 'put ''O3RoaXMuYWRkQ2FsbGJhY2soYSxkLGgpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihhLHRo''@;'; put 'put ''aXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKX1maW5kUHJvdmlkZXJzKGEsZCxoKXtyZXR1cm5bXX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihXYSkseHIoeFUpLHhy''@;'; put 'put ''KHRSKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCkseFU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwfXJlZ2lzdGVyQXBwbGljYXRpb24oYSxkKXt0aGlz''@;'; put 'put ''Ll9hcHBsaWNhdGlvbnMuc2V0KGEsZCl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoYSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfWdldFRlc3RhYmlsaXR5KGEpe3JldHVybiB0aGlzLl9h''@;'; put 'put ''cHBsaWNhdGlvbnMuZ2V0KGEpfHxudWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRU''@;'; put 'put ''ZXN0YWJpbGl0eUluVHJlZShhLGQ9ITApe3JldHVybiBFVT8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsYSxkKT8/bnVsbH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gX00oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufWZ1bmN0aW9uIFdpZShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnN1YnNjcmliZX1j''@;'; put 'put ''b25zdCBUVT1uZXcgTXQoIiIpO2xldCBBVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMucmVzb2x2ZT1hLHRoaXMucmVqZWN0PWR9KSx0aGlzLmFwcElu''@;'; put 'put ''aXRzPWZpKFRVLHtvcHRpb25hbDohMH0pPz9bXX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBhPVtdO2Zvcihjb25zdCBoIG9mIHRoaXMuYXBwSW5pdHMpe2NvbnN0IGY9aCgpO2lmKF9NKGYpKWEucHVzaChmKTtlbHNlIGlmKFdpZShmKSl7Y29u''@;'; put 'put ''c3Qgdj1uZXcgUHJvbWlzZSgoTSxJKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpNLGVycm9yOkl9KX0pO2EucHVzaCh2KX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVj''@;'; put 'put ''dChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJy''@;'; put 'put ''b290In0pfX1yZXR1cm4gY30pKCk7Y29uc3Qga1U9bmV3IE10KCIiKTtmdW5jdGlvbiAkaWUoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnJlZHVjZSgkaWUsYyk6ey4uLmMsLi4ubH19bGV0IHE0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0''@;'; put 'put ''ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcj1maSh2ayksdGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI9ZmkoRTgpLHRoaXMu''@;'; put 'put ''ZXh0ZXJuYWxUZXN0Vmlld3M9bmV3IFNldCx0aGlzLmJlZm9yZVJlbmRlcj1uZXcgV24sdGhpcy5hZnRlclRpY2s9bmV3IFduLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9ZmkoUGYpLmhhc1BlbmRpbmdUYXNrcy5waXBlKExyKGE9PiFh''@;'; put 'put ''KSksdGhpcy5faW5qZWN0b3I9ZmkoaGMpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoYSxkKXtjb25zdCBoPWEgaW5zdGFuY2VvZiBRRDtpZighdGhpcy5faW5qZWN0b3IuZ2V0KEFV''@;'; put 'put ''KS5kb25lKXRocm93IWgmJmZ1bmN0aW9uIG4yKGMpe2NvbnN0IGw9Vm8oYyl8fHhjKGMpfHxldShjKTtyZXR1cm4gbnVsbCE9PWwmJmwuc3RhbmRhbG9uZX0oYSksbmV3IFFuKDQwNSwhMSk7bGV0IHY7dj1oP2E6dGhpcy5faW5qZWN0b3IuZ2V0KFc1KS5yZXNvbHZlQ29tcG9uZW50RmFjdG9y''@;'; put 'put ''eShhKSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2godi5jb21wb25lbnRUeXBlKTtjb25zdCBNPWZ1bmN0aW9uIGViZShjKXtyZXR1cm4gYy5pc0JvdW5kVG9Nb2R1bGV9KHYpP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQobnApLEc9di5jcmVhdGUoRHMuTlVMTCxbXSxkfHx2LnNlbGVjdG9y''@;'; put 'put ''LE0pLGllPUcubG9jYXRpb24ubmF0aXZlRWxlbWVudCx1ZT1HLmluamVjdG9yLmdldChaaWUsbnVsbCk7cmV0dXJuIHVlPy5yZWdpc3RlckFwcGxpY2F0aW9uKGllKSxHLm9uRGVzdHJveSgoKT0+e3RoaXMuZGV0YWNoVmlldyhHLmhvc3RWaWV3KSxuUih0aGlzLmNvbXBvbmVudHMsRyksdWU/''@;'; put 'put ''LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihpZSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KEcpLEd9dGljaygpe3RoaXMuX3RpY2soITApfV90aWNrKGEpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBRbigxMDEsITEpO2NvbnN0IGQ9X2UobnVsbCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNr''@;'; put 'put ''PSEwLHRoaXMuZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3cyhhKX1jYXRjaChoKXt0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyKGgpfWZpbmFsbHl7dGhpcy5hZnRlclRpY2submV4dCgpLHRoaXMuX3J1bm5pbmdUaWNrPSExLF9lKGQpfX1kZXRlY3RDaGFuZ2VzSW5BdHRhY2hlZFZpZXdz''@;'; put 'put ''KGEpe2xldCBkPTA7Y29uc3QgaD10aGlzLmFmdGVyUmVuZGVyRWZmZWN0TWFuYWdlcjtmb3IoOzspe2lmKGQ9PT1qRCl0aHJvdyBuZXcgUW4oMTAzLCExKTtpZihhKXtjb25zdCBmPTA9PT1kO3RoaXMuYmVmb3JlUmVuZGVyLm5leHQoZik7Zm9yKGxldHtfbFZpZXc6dixub3RpZnlFcnJvckhh''@;'; put 'put ''bmRsZXI6TX1vZiB0aGlzLl92aWV3cyluYmUodixmLE0pfWlmKGQrKyxoLmV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpLCFbLi4udGhpcy5leHRlcm5hbFRlc3RWaWV3cy5rZXlzKCksLi4udGhpcy5fdmlld3NdLnNvbWUoKHtfbFZpZXc6Zn0pPT5EVShmKSkmJihoLmV4ZWN1dGUoKSwhWy4u''@;'; put 'put ''LnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+RFUoZikpKSlicmVha319YXR0YWNoVmlldyhhKXtjb25zdCBkPWE7dGhpcy5fdmlld3MucHVzaChkKSxkLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoYSl7Y29u''@;'; put 'put ''c3QgZD1hO25SKHRoaXMuX3ZpZXdzLGQpLGQuZGV0YWNoRnJvbUFwcFJlZigpfV9sb2FkQ29tcG9uZW50KGEpe3RoaXMuYXR0YWNoVmlldyhhLmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaChhKTtjb25zdCBkPXRoaXMuX2luamVjdG9yLmdldChrVSxbXSk7Wy4u''@;'; put 'put ''LnRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycywuLi5kXS5mb3JFYWNoKGg9PmgoYSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGE9PmEuZGVzdHJv''@;'; put 'put ''eSgpKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGEpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSksKCk9Pm5SKHRoaXMu''@;'; put 'put ''X2Rlc3Ryb3lMaXN0ZW5lcnMsYSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgUW4oNDA2LCExKTtjb25zdCBhPXRoaXMuX2luamVjdG9yO2EuZGVzdHJveSYmIWEuZGVzdHJveWVkJiZhLmRlc3Ryb3koKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdz''@;'; put 'put ''Lmxlbmd0aH13YXJuSWZEZXN0cm95ZWQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24gblIoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTthPi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIG5iZShjLGwsYSl7IWwmJiFEVShjKXx8ZnVuY3Rpb24gcmJlKGMsbCxhKXtsZXQgZDthPyhkPTAsY1tVYV18PTEwMjQpOmQ9NjQmY1tVYV0/MDoxLGh5KGMsbCxkKX0o''@;'; put 'put ''YyxhLGwpfWZ1bmN0aW9uIERVKGMpe3JldHVybiBUdihjKX1jbGFzcyBpYmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT1sLHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWF9fWxldCBLaWU9KCgpPT57Y2xhc3MgY3tjb21waWxlTW9kdWxlU3luYyhhKXtyZXR1cm4gbmV3''@;'; put 'put ''IEx5KGEpfWNvbXBpbGVNb2R1bGVBc3luYyhhKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZVN5bmMoYSkpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhhKXtjb25zdCBkPXRoaXMuY29tcGlsZU1vZHVsZVN5bmMoYSksZj1GMShQdShhKS5kZWNs''@;'; put 'put ''YXJhdGlvbnMpLnJlZHVjZSgodixNKT0+e2NvbnN0IEk9Vm8oTSk7cmV0dXJuIEkmJnYucHVzaChuZXcgazgoSSkpLHZ9LFtdKTtyZXR1cm4gbmV3IGliZShkLGYpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBp''@;'; put 'put ''bGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhhKSl9Y2xlYXJDYWNoZSgpe31jbGVhckNhY2hlRm9yKGEpe31nZXRNb2R1bGVJZChhKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksc2JlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnpvbmU9ZmkoV2EpLHRoaXMuYXBwbGljYXRpb25SZWY9ZmkocTQpfWluaXRpYWxpemUoKXt0aGlzLl9vbk1pY3JvdGFza0Vt''@;'; put 'put ''cHR5U3Vic2NyaXB0aW9ufHwodGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj10aGlzLnpvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLnpvbmUucnVuKCgpPT57dGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCl9KX19KSl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGxiZSgpe2NvbnN0IGM9ZmkoV2EpLGw9ZmkoZzIpO3JldHVybiBhPT5jLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5sLmhhbmRsZUVycm9yKGEpKX1sZXQgdWJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbj1uZXcgcXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLnpvbmU9ZmkoV2EpLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKX1pbml0aWFsaXplKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47dGhpcy5pbml0aWFsaXplZD0hMDtsZXQgYT1udWxsOyF0aGlzLnpvbmUuaXNTdGFi''@;'; put 'put ''bGUmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MmJihhPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9u''@;'; put 'put ''U3RhYmxlLnN1YnNjcmliZSgoKT0+e1dhLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e251bGwhPT1hJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5wZW5kaW5nVGFza3Mu''@;'; put 'put ''cmVtb3ZlKGEpLGE9bnVsbCl9KX0pKX0pLHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnpvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntXYS5hc3NlcnRJbkFuZ3VsYXJab25lKCksYT8/PXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3Jp''@;'; put 'put ''cHRpb24udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25z''@;'; put 'put ''dCBCZj1uZXcgTXQoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmZpKEJmLHJhLk9wdGlvbmFsfHJhLlNraXBTZWxmKXx8ZnVuY3Rpb24gZGJlKCl7cmV0dXJuIHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxaeX0oKX0pLElVPW5ldyBNdCgiIik7bGV0''@;'; put 'put ''IFFpZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBpSShjPSJ6''@;'; put 'put ''b25lLmpzIixsKXtyZXR1cm4ibm9vcCI9PT1jP25ldyBySToiem9uZS5qcyI9PT1jP25ldyBXYShsKTpjfShkPy5uZ1pvbmUsZnVuY3Rpb24gSmllKGMpe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmM/LmV2ZW50Q29h''@;'; put 'put ''bGVzY2luZz8/ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246Yz8ucnVuQ29hbGVzY2luZz8/ITF9fSh7ZXZlbnRDb2FsZXNjaW5nOmQ/Lm5nWm9uZUV2ZW50Q29hbGVzY2luZyxydW5Db2FsZXNjaW5nOmQ/Lm5nWm9uZVJ1bkNvYWxlc2Npbmd9KSk7cmV0dXJuIGgucnVuKCgp''@;'; put 'put ''PT57Y29uc3QgZj1mdW5jdGlvbiBGSShjLGwsYSl7cmV0dXJuIG5ldyBSeShjLGwsYSl9KGEubW9kdWxlVHlwZSx0aGlzLmluamVjdG9yLGZ1bmN0aW9uIFhpZShjKXtyZXR1cm5be3Byb3ZpZGU6V2EsdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTp0MixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57''@;'; put 'put ''Y29uc3QgbD1maShzYmUse29wdGlvbmFsOiEwfSk7cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9ZmkodWJlKTtyZXR1cm4oKT0+e2wuaW5pdGlhbGl6ZSgpfX19LHtwcm92aWRlOnZrLHVzZUZhY3Rvcnk6bGJl''@;'; put 'put ''fV19KCgpPT5oKSksdj1mLmluamVjdG9yLmdldChnMixudWxsKTtyZXR1cm4gaC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IE09aC5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpJPT57di5oYW5kbGVFcnJvcihJKX19KTtmLm9uRGVzdHJveSgoKT0+e25SKHRoaXMuX21vZHVsZXMsZiks''@;'; put 'put ''TS51bnN1YnNjcmliZSgpfSl9KSxmdW5jdGlvbiBHaWUoYyxsLGEpe3RyeXtjb25zdCBkPWEoKTtyZXR1cm4gX00oZCk/ZC5jYXRjaChoPT57dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihoKSksaH0pOmR9Y2F0Y2goZCl7dGhyb3cgbC5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+Yy5oYW5kbGVFcnJvcihkKSksZH19KHYsaCwoKT0+e2NvbnN0IE09Zi5pbmplY3Rvci5nZXQoQVUpO3JldHVybiBNLnJ1bkluaXRpYWxpemVycygpLE0uZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uIF9yZShjKXsic3RyaW5nIj09dHlwZW9mIGMmJihicmU9Yy50b0xv''@;'; put 'put ''d2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoQmYsWnkpfHxaeSksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPSRpZSh7fSxkKTtyZXR1cm4gZnVuY3Rpb24gb2JlKGMsbCxhKXtjb25z''@;'; put 'put ''dCBkPW5ldyBMeShhKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGQpfSgwLDAsYSkudGhlbihmPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoZixoKSl9X21vZHVsZURvQm9vdHN0cmFwKGEpe2NvbnN0IGQ9YS5pbmplY3Rvci5nZXQocTQpO2lmKGEuX2Jvb3RzdHJhcENvbXBvbmVudHMu''@;'; put 'put ''bGVuZ3RoPjApYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKGg9PmQuYm9vdHN0cmFwKGgpKTtlbHNle2lmKCFhLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IFFuKC00MDMsITEpO2EuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChkKX10aGlzLl9tb2R1bGVzLnB1c2goYSl9''@;'; put 'put ''b25EZXN0cm95KGEpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChhKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgUW4oNDA0LCExKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChkPT5k''@;'; put 'put ''LmRlc3Ryb3koKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGQ9PmQoKSk7Y29uc3QgYT10aGlzLl9pbmplY3Rvci5nZXQoSVUsbnVsbCk7YSYmKGEuZm9yRWFjaChkPT5kKCkpLGEuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZGVzdHJveWVkfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''LFE1PW51bGw7Y29uc3QgZWFlPW5ldyBNdCgiIik7ZnVuY3Rpb24gdGFlKGMsbCxhPVtdKXtjb25zdCBkPWBQbGF0Zm9ybTogJHtsfWAsaD1uZXcgTXQoZCk7cmV0dXJuKGY9W10pPT57bGV0IHY9UlUoKTtpZighdnx8di5pbmplY3Rvci5nZXQoZWFlLCExKSl7Y29uc3QgTT1bLi4uYSwuLi5m''@;'; put 'put ''LHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoTSk6ZnVuY3Rpb24gcGJlKGMpe2lmKFE1JiYhUTUuZ2V0KGVhZSwhMSkpdGhyb3cgbmV3IFFuKDQwMCwhMSk7KGZ1bmN0aW9uIFlpZSgpeyFmdW5jdGlvbiBSZShjKXtBZT1jfSgoKT0+e3Rocm93IG5ldyBRbig2MDAsITEpfSl9KSgpLFE1''@;'; put 'put ''PWM7Y29uc3QgbD1jLmdldChRaWUpOyhmdW5jdGlvbiByYWUoYyl7Yy5nZXQoUGssbnVsbCk/LmZvckVhY2goYT0+YSgpKX0pKGMpfShmdW5jdGlvbiBuYWUoYz1bXSxsKXtyZXR1cm4gRHMuY3JlYXRlKHtuYW1lOmwscHJvdmlkZXJzOlt7cHJvdmlkZTpGNix1c2VWYWx1ZToicGxhdGZvcm0i''@;'; put 'put ''fSx7cHJvdmlkZTpJVSx1c2VWYWx1ZTpuZXcgU2V0KFsoKT0+UTU9bnVsbF0pfSwuLi5jXX0pfShNLGQpKX1yZXR1cm4gZnVuY3Rpb24gZ2JlKGMpe2NvbnN0IGw9UlUoKTtpZighbCl0aHJvdyBuZXcgUW4oNDAxLCExKTtyZXR1cm4gbH0oKX19ZnVuY3Rpb24gUlUoKXtyZXR1cm4gUTU/Lmdl''@;'; put 'put ''dChRaWUpPz9udWxsfWxldCBFcz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPXZiZX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHZiZShjKXtyZXR1cm4gZnVuY3Rpb24geWJlKGMsbCxhKXtpZihFZihjKSYmIWEpe2NvbnN0IGQ9TzEoYy5pbmRleCxsKTtyZXR1''@;'; put 'put ''cm4gbmV3IF84KGQsZCl9cmV0dXJuIDQ3JmMudHlwZT9uZXcgXzgobFtabF0sbCk6bnVsbH0odWwoKSxkaSgpLCEoMTYmfmMpKX1jbGFzcyBsYWV7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIE95KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IFNiZShsKX19Y29uc3QgQ2JlPShj''@;'; put 'put ''LGwpPT5sO2NsYXNzIFNiZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMu''@;'; put 'put ''X2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxs''@;'; put 'put ''LHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8Q2JlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMu''@;'; put 'put ''X3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IHY9IWR8fGEmJmEuY3VycmVudEluZGV4PHVhZShkLGgsZik/YTpkLE09dWFlKHYsaCxmKSxJPXYuY3VycmVudEluZGV4O2lmKHY9PT1kKWgtLSxkPWQuX25leHRSZW1vdmVkO2Vsc2UgaWYoYT1hLl9uZXh0LG51bGw9''@;'; put 'put ''PXYucHJldmlvdXNJbmRleCloKys7ZWxzZXtmfHwoZj1bXSk7Y29uc3QgRz1NLWgsaWU9SS1oO2lmKEchPWllKXtmb3IobGV0IHllPTA7eWU8Rzt5ZSsrKXtjb25zdCBFZT15ZTxmLmxlbmd0aD9mW3llXTpmW3llXT0wLGplPUVlK3llO2llPD1qZSYmamU8RyYmKGZbeWVdPUVlKzEpfWZbdi5w''@;'; put 'put ''cmV2aW91c0luZGV4XT1pZS1HfX1NIT09SSYmbCh2LE0sSSl9fWZvckVhY2hQcmV2aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2Fk''@;'; put 'put ''ZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoTW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFs''@;'; put 'put ''c0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVudGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSks''@;'; put 'put ''IU95KGwpKXRocm93IG5ldyBRbig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLHYsYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0''@;'; put 'put ''aDtmb3IobGV0IE09MDtNPHRoaXMubGVuZ3RoO00rKylmPWxbTV0sdj10aGlzLl90cmFja0J5Rm4oTSxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLHYpPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsdixNKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5f''@;'; put 'put ''YWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLHYsTSksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIFF6KGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5''@;'; put 'put ''bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTspbChkLnZhbHVlKX19KGwsTT0+e3Y9dGhpcy5fdHJhY2tCeUZuKGgsTSksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxNLHYsaCkp''@;'; put 'put ''LE9iamVjdC5pcyhhLml0ZW0sTSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsTSkpOihhPXRoaXMuX21pc21hdGNoKGEsTSx2LGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlz''@;'; put 'put ''RGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7''@;'; put 'put ''bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJ''@;'; put 'put ''bmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0''@;'; put 'put ''aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJl''@;'; put 'put ''dix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFm''@;'; put 'put ''dGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlz''@;'; put 'put ''Ll9hZGRBZnRlcihuZXcgTWJlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlvbihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0''@;'; put 'put ''QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9''@;'; put 'put ''YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNU''@;'; put 'put ''YWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFp''@;'; put 'put ''bCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9''@;'; put 'put ''bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVhZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9''@;'; put 'put ''X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09''@;'; put 'put ''PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51''@;'; put 'put ''bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9pdEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBjYWUpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4''@;'; put 'put ''PWQsbH1fcmVtb3ZlKGwpe3JldHVybiB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayhsKSl9X3VubGluayhsKXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgYT1sLl9wcmV2LGQ9bC5fbmV4dDtyZXR1cm4gbnVs''@;'; put 'put ''bD09PWE/dGhpcy5faXRIZWFkPWQ6YS5fbmV4dD1kLG51bGw9PT1kP3RoaXMuX2l0VGFpbD1hOmQuX3ByZXY9YSxsfV9hZGRUb01vdmVzKGwsYSl7cmV0dXJuIGwucHJldmlvdXNJbmRleD09PWF8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hl''@;'; put 'put ''YWQ9bDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1sKSxsfV9hZGRUb1JlbW92YWxzKGwpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBjYWUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5k''@;'; put 'put ''ZXg9bnVsbCxsLl9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9bCxsLl9wcmV2UmVtb3ZlZD1udWxsKToobC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxz''@;'; put 'put ''VGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPWwpLGx9X2FkZElkZW50aXR5Q2hhbmdlKGwsYSl7cmV0dXJuIGwuaXRlbT1hLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVh''@;'; put 'put ''ZD1sOnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1sLGx9fWNsYXNzIE1iZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaXRlbT1sLHRoaXMudHJhY2tCeUlkPWEsdGhpcy5jdXJyZW50SW5kZXg9bnVsbCx0aGlzLnByZXZpb3VzSW5kZXg9bnVsbCx0aGlzLl9u''@;'; put 'put ''ZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXZEdXA9bnVsbCx0aGlzLl9uZXh0RHVwPW51bGwsdGhpcy5fcHJldlJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRN''@;'; put 'put ''b3ZlZD1udWxsLHRoaXMuX25leHRJZGVudGl0eUNoYW5nZT1udWxsfX1jbGFzcyB4YmV7Y29uc3RydWN0b3IoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfWFkZChsKXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPWwsbC5fbmV4dER1cD1udWxsLGwu''@;'; put 'put ''X3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9bCxsLl9wcmV2RHVwPXRoaXMuX3RhaWwsbC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9bCl9Z2V0KGwsYSl7bGV0IGQ7Zm9yKGQ9dGhpcy5faGVhZDtudWxsIT09ZDtkPWQuX25leHREdXApaWYoKG51bGw9PT1hfHxhPD1kLmN1''@;'; put 'put ''cnJlbnRJbmRleCkmJk9iamVjdC5pcyhkLnRyYWNrQnlJZCxsKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1yZW1vdmUobCl7Y29uc3QgYT1sLl9wcmV2RHVwLGQ9bC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWE/dGhpcy5faGVhZD1kOmEuX25leHREdXA9ZCxudWxsPT09ZD90aGlzLl90YWlsPWE6''@;'; put 'put ''ZC5fcHJldkR1cD1hLG51bGw9PT10aGlzLl9oZWFkfX1jbGFzcyBjYWV7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgeGJlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1n''@;'; put 'put ''ZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEpOm51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9''@;'; put 'put ''PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24gdWFlKGMsbCxhKXtjb25zdCBkPWMucHJldmlvdXNJbmRleDtpZihudWxsPT09ZClyZXR1cm4gZDtsZXQgaD0wO3JldHVybiBhJiZkPGEubGVuZ3RoJiYoaD1hW2RdKSxkK2wraH1jbGFzcyBkYWV7Y29u''@;'; put 'put ''c3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBNYXB8fEpTKGwpfWNyZWF0ZSgpe3JldHVybiBuZXcgRWJlfX1jbGFzcyBFYmV7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51''@;'; put 'put ''bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNU''@;'; put 'put ''YWlsPW51bGx9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tYXBIZWFkO251bGwhPT1hO2E9YS5f''@;'; put 'put ''bmV4dClsKGEpfWZvckVhY2hQcmV2aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaENoYW5nZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5f''@;'; put 'put ''bmV4dENoYW5nZWQpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1hO2E9YS5f''@;'; put 'put ''bmV4dFJlbW92ZWQpbChhKX1kaWZmKGwpe2lmKGwpe2lmKCEobCBpbnN0YW5jZW9mIE1hcHx8SlMobCkpKXRocm93IG5ldyBRbig5MDAsITEpfWVsc2UgbD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTts''@;'; put 'put ''ZXQgYT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaChsLChkLGgpPT57aWYoYSYmYS5rZXk9PT1oKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGEsZCksdGhpcy5fYXBwZW5kQWZ0ZXI9YSxhPWEuX25leHQ7ZWxzZXtjb25zdCBmPXRoaXMuX2dl''@;'; put 'put ''dE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGgsZCk7YT10aGlzLl9pbnNlcnRCZWZvcmVPckFwcGVuZChhLGYpfX0pLGEpe2EuX3ByZXYmJihhLl9wcmV2Ll9uZXh0PW51bGwpLHRoaXMuX3JlbW92YWxzSGVhZD1hO2ZvcihsZXQgZD1hO251bGwhPT1kO2Q9ZC5fbmV4dFJlbW92ZWQpZD09PXRoaXMu''@;'; put 'put ''X21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPW51bGwpLHRoaXMuX3JlY29yZHMuZGVsZXRlKGQua2V5KSxkLl9uZXh0UmVtb3ZlZD1kLl9uZXh0LGQucHJldmlvdXNWYWx1ZT1kLmN1cnJlbnRWYWx1ZSxkLmN1cnJlbnRWYWx1ZT1udWxsLGQuX3ByZXY9bnVsbCxkLl9uZXh0PW51bGx9cmV0dXJu''@;'; put 'put ''IHRoaXMuX2NoYW5nZXNUYWlsJiYodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPW51bGwpLHRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksdGhpcy5pc0RpcnR5fV9pbnNlcnRCZWZvcmVPckFwcGVuZChsLGEpe2lmKGwpe2Nv''@;'; put 'put ''bnN0IGQ9bC5fcHJldjtyZXR1cm4gYS5fbmV4dD1sLGEuX3ByZXY9ZCxsLl9wcmV2PWEsZCYmKGQuX25leHQ9YSksbD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWEpLHRoaXMuX2FwcGVuZEFmdGVyPWwsbH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFm''@;'; put 'put ''dGVyLl9uZXh0PWEsYS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1hLHRoaXMuX2FwcGVuZEFmdGVyPWEsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkobCxhKXtpZih0aGlzLl9yZWNvcmRzLmhhcyhsKSl7Y29uc3QgaD10aGlzLl9yZWNvcmRzLmdldChsKTt0''@;'; put 'put ''aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhoLGEpO2NvbnN0IGY9aC5fcHJldix2PWguX25leHQ7cmV0dXJuIGYmJihmLl9uZXh0PXYpLHYmJih2Ll9wcmV2PWYpLGguX25leHQ9bnVsbCxoLl9wcmV2PW51bGwsaH1jb25zdCBkPW5ldyBUYmUobCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KGws''@;'; put 'put ''ZCksZC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0FkZGl0aW9ucyhkKSxkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLGw9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9u''@;'; put 'put ''ZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09bDtsPWwuX25leHRDaGFuZ2VkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPWw7bD1sLl9uZXh0QWRkZWQpbC5wcmV2aW91c1ZhbHVl''@;'; put 'put ''PWwuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fV9tYXliZUFkZFRvQ2hhbmdlcyhsLGEpe09iamVjdC5pcyhhLGwu''@;'; put 'put ''Y3VycmVudFZhbHVlKXx8KGwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZSxsLmN1cnJlbnRWYWx1ZT1hLHRoaXMuX2FkZFRvQ2hhbmdlcyhsKSl9X2FkZFRvQWRkaXRpb25zKGwpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRp''@;'; put 'put ''b25zVGFpbD1sOih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCx0aGlzLl9hZGRpdGlvbnNUYWlsPWwpfV9hZGRUb0NoYW5nZXMobCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPWw6KHRoaXMuX2NoYW5nZXNUYWls''@;'; put 'put ''Ll9uZXh0Q2hhbmdlZD1sLHRoaXMuX2NoYW5nZXNUYWlsPWwpfV9mb3JFYWNoKGwsYSl7bCBpbnN0YW5jZW9mIE1hcD9sLmZvckVhY2goYSk6T2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT5hKGxbZF0sZCkpfX1jbGFzcyBUYmV7Y29uc3RydWN0b3IobCl7dGhpcy5rZXk9bCx0aGlzLnByZXZp''@;'; put 'put ''b3VzVmFsdWU9bnVsbCx0aGlzLmN1cnJlbnRWYWx1ZT1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0Q2hhbmdlZD1udWxsfX1mdW5j''@;'; put 'put ''dGlvbiBoYWUoKXtyZXR1cm4gbmV3IGVtKFtuZXcgbGFlXSl9bGV0IGVtPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmhhZX0pfWNvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNy''@;'; put 'put ''ZWF0ZShhLGQpe2lmKG51bGwhPWQpe2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGgpfXJldHVybiBuZXcgYyhhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fGhhZSgpKSxkZXBzOltbYyxuZXcgbGQs''@;'; put 'put ''bmV3IEkxXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IFFuKDkwMSwhMSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBmYWUoKXtyZXR1cm4gbmV3IHdNKFtuZXcgZGFlXSl9bGV0IHdN''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZhZX0pfWNvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShhLGQpe2lmKGQpe2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2Uo''@;'; put 'put ''KTthPWEuY29uY2F0KGgpfXJldHVybiBuZXcgYyhhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fGZhZSgpKSxkZXBzOltbYyxuZXcgbGQsbmV3IEkxXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9''@;'; put 'put ''Pmguc3VwcG9ydHMoYSkpO2lmKGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFFuKDkwMSwhMSl9fXJldHVybiBjfSkoKTtjb25zdCBEYmU9dGFlKG51bGwsImNvcmUiLFtdKTtsZXQgSWJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHhyKHE0KSl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHt9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHMxKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGM/YzpudWxsIT1jJiYiZmFsc2Ui''@;'; put 'put ''IT09Y31mdW5jdGlvbiBQYWUoYyl7Y29uc3QgbD1fZShudWxsKTt0cnl7cmV0dXJuIGMoKX1maW5hbGx5e19lKGwpfX1sZXQgSGFlPW51bGw7ZnVuY3Rpb24gdG0oKXtyZXR1cm4gSGFlfWNsYXNzIHBfZXt9Y29uc3QgdnM9bmV3IE10KCIiKTtsZXQgVlU9KCgpPT57Y2xhc3MgY3toaXN0b3J5''@;'; put 'put ''R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShtX2UpLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCk7Y29uc3QgZ19lPW5ldyBNdCgiIik7bGV0IG1fZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVlV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2RvYz1maSh2cyksdGhpcy5fbG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFz''@;'; put 'put ''ZUhyZWZGcm9tRE9NKCl7cmV0dXJuIHRtKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGEpe2NvbnN0IGQ9dG0oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixhLCExKSwoKT0+''@;'; put 'put ''ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSl9b25IYXNoQ2hhbmdlKGEpe2NvbnN0IGQ9dG0oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGEsITEpLCgpPT5kLnJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGEpfWdldCBocmVmKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZX1nZXQgcG9y''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaH1nZXQgaGFzaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5oYXNofXNldCBwYXRo''@;'; put 'put ''bmFtZShhKXt0aGlzLl9sb2NhdGlvbi5wYXRobmFtZT1hfXB1c2hTdGF0ZShhLGQsaCl7dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUoYSxkLGgpfXJlcGxhY2VTdGF0ZShhLGQsaCl7dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoYSxkLGgpfWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndh''@;'; put 'put ''cmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5faGlzdG9yeS5nbyhhKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQlUoYyxsKXtpZigwPT1jLmxlbmd0aClyZXR1cm4gbDtpZigwPT1sLmxlbmd0aClyZXR1cm4gYztsZXQgYT0wO3JldHVybiBj''@;'; put 'put ''LmVuZHNXaXRoKCIvIikmJmErKyxsLnN0YXJ0c1dpdGgoIi8iKSYmYSsrLDI9PWE/YytsLnN1YnN0cmluZygxKToxPT1hP2MrbDpjKyIvIitsfWZ1bmN0aW9uIE5hZShjKXtjb25zdCBsPWMubWF0Y2goLyN8XD98JC8pLGE9bCYmbC5pbmRleHx8Yy5sZW5ndGg7cmV0dXJuIGMuc2xpY2UoMCxh''@;'; put 'put ''LSgiLyI9PT1jW2EtMV0/MTowKSkrYy5zbGljZShhKX1mdW5jdGlvbiBYNChjKXtyZXR1cm4gYyYmIj8iIT09Y1swXT8iPyIrYzpjfWxldCBaOD0oKCk9PntjbGFzcyBje2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmZpKEJhZSkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFZhZT1uZXcgTXQoIiIpO2xldCBCYWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFo4e2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9ZD8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/ZmkodnMpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5n''@;'; put 'put ''T25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlz''@;'; put 'put ''Ll9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShhKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBCVSh0aGlzLl9iYXNlSHJlZixhKX1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5w''@;'; put 'put ''YXRobmFtZStYNCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksaD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIGgmJmE/YCR7ZH0ke2h9YDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpO3RoaXMuX3Bs''@;'; put 'put ''YXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9j''@;'; put 'put ''YXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihWVSkseHIoVmFlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSx2X2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgYyBleHRlbmRzIFo4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fYmFzZUhyZWY9IiIsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sbnVsbCE9ZCYmKHRoaXMuX2Jhc2VIcmVmPWQpfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFz''@;'; put 'put ''aENoYW5nZShhKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaD8/IiMiO3JldHVybiBkLmxlbmd0aD4wP2Quc3Vic3RyaW5nKDEpOmR9cHJlcGFyZUV4dGVybmFsVXJsKGEpe2NvbnN0IGQ9''@;'; put 'put ''QlUodGhpcy5fYmFzZUhyZWYsYSk7cmV0dXJuIGQubGVuZ3RoPjA/IiMiK2Q6ZH1wdXNoU3RhdGUoYSxkLGgsZil7bGV0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7MD09di5sZW5ndGgmJih2PXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRm''@;'; put 'put ''b3JtTG9jYXRpb24ucHVzaFN0YXRlKGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7bGV0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7MD09di5sZW5ndGgmJih2PXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVw''@;'; put 'put ''bGFjZVN0YXRlKGEsZCx2KX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oYT0wKXt0''@;'; put 'put ''aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFZVKSx4cihWYWUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19''@;'; put 'put ''cmV0dXJuIGN9KSgpLGZoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fc3ViamVjdD1uZXcgS3IsdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3k9YTtjb25zdCBkPXRoaXMu''@;'; put 'put ''X2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbiBfX2UoYyl7aWYobmV3IFJlZ0V4cCgiXihodHRwcz86KT8vLyIpLnRlc3QoYykpe2NvbnN0WyxhXT1jLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGF9cmV0dXJuIGN9KE5hZShqYWUoZCkp''@;'; put 'put ''KSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNj''@;'; put 'put ''cmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRo''@;'; put 'put ''RXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStYNChkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBiX2UoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25zdCBhPWwuc3Vi''@;'; put 'put ''c3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgsamFlKGEpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBhJiYiLyIhPT1hWzBdJiYoYT0iLyIrYSksdGhpcy5fbG9jYXRpb25TdHJh''@;'; put 'put ''dGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoYSl9Z28oYSxkPSIiLGg9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUoaCwiIixhLGQpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhK1g0KGQpKSxoKX1yZXBsYWNlU3Rh''@;'; put 'put ''dGUoYSxkPSIiLGg9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUoaCwiIixhLGQpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhK1g0KGQpKSxoKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5m''@;'; put 'put ''b3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oYSl9b25VcmxDaGFuZ2UoYSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGEpLHRoaXMuX3VybENo''@;'; put 'put ''YW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSwoKT0+e2NvbnN0IGQ9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoYSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGlj''@;'; put 'put ''ZShkLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhhPSIiLGQpe3RoaXMuX3Vy''@;'; put 'put ''bENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKGg9PmgoYSxkKSl9c3Vic2NyaWJlKGEsZCxoKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkLGNvbXBsZXRlOmh9KX1zdGF0aWN7dGhpcy5ub3JtYWxpemVRdWVyeVBhcmFtcz1YNH1zdGF0aWN7dGhpcy5qb2lu''@;'; put 'put ''V2l0aFNsYXNoPUJVfXN0YXRpY3t0aGlzLnN0cmlwVHJhaWxpbmdTbGFzaD1OYWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoWjgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5mdW5jdGlvbiB5''@;'; put 'put ''X2UoKXtyZXR1cm4gbmV3IGZoKHhyKFo4KSl9KCkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGphZShjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGQwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi''@;'; put 'put ''LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShkMHx8e30pLGRsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShk''@;'; put 'put ''bHx8e30pLENkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oQ2R8fHt9KTtmdW5jdGlvbiBqVShjLGwsYSl7Y29uc3QgZD1vMShjKSxmPUMyKFtkW2Vj''@;'; put 'put ''LkRheXNGb3JtYXRdLGRbZWMuRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gQzIoZixhKX1mdW5jdGlvbiB6VShjLGwsYSl7Y29uc3QgZD1vMShjKSxmPUMyKFtkW2VjLk1vbnRoc0Zvcm1hdF0sZFtlYy5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIEMyKGYsYSl9ZnVuY3Rpb24gQzIo''@;'; put 'put ''YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHFhZShjLGwpe2w9ZW5jb2RlVVJJQ29tcG9uZW50KGwpO2Zvcihjb25z''@;'; put 'put ''dCBhIG9mIGMuc3BsaXQoIjsiKSl7Y29uc3QgZD1hLmluZGV4T2YoIj0iKSxbaCxmXT0tMT09ZD9bYSwiIl06W2Euc2xpY2UoMCxkKSxhLnNsaWNlKGQrMSldO2lmKGgudHJpbSgpPT09bClyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGYpfXJldHVybiBudWxsfWNvbnN0IEpVPS9ccysvLFhh''@;'; put 'put ''ZT1bXTtsZXQgd3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nRWw9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuaW5pdGlhbENsYXNzZXM9WGFlLHRoaXMuc3RhdGVNYXA9bmV3IE1hcH1zZXQga2xhc3MoYSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1hP2EudHJp''@;'; put 'put ''bSgpLnNwbGl0KEpVKTpYYWV9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoSlUpOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBh''@;'; put 'put ''PXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtk''@;'; put 'put ''XSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5lbmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5h''@;'; put 'put ''YmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8''@;'; put 'put ''fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYmYS5zcGxpdChKVSkuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFz''@;'; put 'put ''cyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKEVvKSl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6W05uLk5vbmUsImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgYXdle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgpe3RoaXMuJGltcGxpY2l0PWwsdGhpcy5uZ0Zvck9mPWEsdGhpcy5pbmRleD1kLHRoaXMuY291bnQ9aH1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fWxldCBucz0oKCk9PntjbGFzcyBje3NldCBuZ0Zvck9mKGEpe3RoaXMuX25nRm9yT2Y9YSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShhKXt0aGlzLl90cmFja0J5Rm49YX1nZXQgbmdGb3JUcmFj''@;'; put 'put ''a0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhpcy5fZGlmZmVycz1oLHRoaXMuX25nRm9yT2Y9bnVsbCx0aGlzLl9uZ0Zvck9mRGlydHk9ITAsdGhpcy5fZGlmZmVyPW51bGx9c2V0''@;'; put 'put ''IG5nRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX3RlbXBsYXRlPWEpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2NvbnN0IGE9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZhJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMu''@;'; put 'put ''ZmluZChhKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fYXBwbHlDaGFuZ2VzKGEpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lcjth''@;'; put 'put ''LmZvckVhY2hPcGVyYXRpb24oKGgsZix2KT0+e2lmKG51bGw9PWgucHJldmlvdXNJbmRleClkLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgYXdlKGguaXRlbSx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09dj92b2lkIDA6dik7ZWxzZSBpZihudWxsPT12KWQucmVt''@;'; put 'put ''b3ZlKG51bGw9PT1mP3ZvaWQgMDpmKTtlbHNlIGlmKG51bGwhPT1mKXtjb25zdCBNPWQuZ2V0KGYpO2QubW92ZShNLHYpLFFhZShNLGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgTT1kLmdldChoKS5jb250ZXh0O00uaW5kZXg9aCxNLmNvdW50PWYsTS5uZ0Zv''@;'; put 'put ''ck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e1FhZShkLmdldChoLmN1cnJlbnRJbmRleCksaCl9KX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGR8fGMpKEdlKERvKSxHZShTbCksR2UoZW0pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRl''@;'; put 'put ''bXBsYXRlOiJuZ0ZvclRlbXBsYXRlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gUWFlKGMsbCl7Yy5jb250ZXh0LiRpbXBsaWNpdD1sLml0ZW19bGV0IHlhPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl92aWV3Q29udGFpbmVyPWEsdGhpcy5f''@;'; put 'put ''Y29udGV4dD1uZXcgb3dlLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZH1zZXQgbmdJZihhKXt0aGlzLl9jb250ZXh0''@;'; put 'put ''LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9YSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGEpe2VvZSgibmdJZlRoZW4iLGEpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1hLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShh''@;'; put 'put ''KXtlb2UoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5j''@;'; put 'put ''bGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdS''@;'; put 'put ''ZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5f''@;'; put 'put ''Y29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERvKSxHZShTbCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mgb3dle2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVs''@;'; put 'put ''bH19ZnVuY3Rpb24gZW9lKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtQcihsKX0nLmApfWNsYXNzIFFVe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5l''@;'; put 'put ''clJlZj1sLHRoaXMuX3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92''@;'; put 'put ''aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgUzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0''@;'; put 'put ''aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRD''@;'; put 'put ''YXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PT10aGlzLl9uZ1N3aXRjaDtyZXR1cm4gdGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8PWQsdGhp''@;'; put 'put ''cy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRj''@;'; put 'put ''aGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRlKGEpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCksY3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1N3aXRjaD1oLGguX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBRVShhLGQpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dp''@;'; put 'put ''dGNoQ2FzZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERvKSxHZShTbCksR2UoUzIsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdT''@;'; put 'put ''d2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxub2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdFbD1hLHRoaXMuX2RpZmZlcnM9ZCx0aGlzLl9yZW5kZXJlcj1oLHRoaXMuX25nU3R5bGU9bnVsbCx0aGlzLl9k''@;'; put 'put ''aWZmZXI9bnVsbH1zZXQgbmdTdHlsZShhKXt0aGlzLl9uZ1N0eWxlPWEsIXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlz''@;'; put 'put ''Ll9uZ1N0eWxlKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9zZXRTdHlsZShhLGQpe2NvbnN0W2gsZl09YS5zcGxpdCgiLiIpLHY9LTE9PT1oLmluZGV4T2YoIi0iKT92b2lkIDA6SzMuRGFzaENhc2U7bnVsbCE9ZD90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQsaCxmP2Ake2R9JHtmfWA6ZCx2KTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCx2KX1fYXBwbHlDaGFuZ2VzKGEpe2EuZm9yRWFjaFJlbW92ZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LG51bGwpKSxhLmZvckVhY2hB''@;'; put 'put ''ZGRlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKSxhLmZvckVhY2hDaGFuZ2VkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KEppKSxHZSh3TSksR2UoRW8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksTjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj1udWxsfW5nT25DaGFuZ2VzKGEpe2lm''@;'; put 'put ''KHRoaXMuX3Nob3VsZFJlY3JlYXRlVmlldyhhKSl7Y29uc3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksIXRoaXMubmdUZW1wbGF0ZU91dGxldClyZXR1cm4gdm9pZCh0aGlzLl92aWV3UmVmPW51''@;'; put 'put ''bGwpO2NvbnN0IGg9dGhpcy5fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpO3RoaXMuX3ZpZXdSZWY9ZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LGgse2luamVjdG9yOnRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPz92b2lkIDB9KX19X3Nob3VsZFJl''@;'; put 'put ''Y3JlYXRlVmlldyhhKXtyZXR1cm4hIWEubmdUZW1wbGF0ZU91dGxldHx8ISFhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcn1fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpe3JldHVybiBuZXcgUHJveHkoe30se3NldDooYSxkLGgpPT4hIXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQm''@;'; put 'put ''JlJlZmxlY3Quc2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKSxnZXQ6KGEsZCxoKT0+e2lmKHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKX19KX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0''@;'; put 'put ''Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIHV3ZXtjcmVhdGVTdWJzY3Jp''@;'; put 'put ''cHRpb24obCxhKXtyZXR1cm4gUGFlKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe1BhZSgoKT0+bC51bnN1YnNjcmliZSgpKX19Y2xhc3MgZHdle2NyZWF0ZVN1YnNjcmlwdGlvbihsLGEpe3JldHVybiBsLnRoZW4oYSxkPT57dGhyb3cg''@;'; put 'put ''ZH0pfWRpc3Bvc2UobCl7fX1jb25zdCBod2U9bmV3IGR3ZSxmd2U9bmV3IHV3ZTtsZXQgRU09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0''@;'; put 'put ''aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1hfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGEpe2lmKCF0aGlzLl9vYmope2lmKGEpdHJ5e3RoaXMubWFya0ZvckNoZWNr''@;'; put 'put ''T25WYWx1ZVVwZGF0ZT0hMSx0aGlzLl9zdWJzY3JpYmUoYSl9ZmluYWxseXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITB9cmV0dXJuIHRoaXMuX2xhdGVzdFZhbHVlfXJldHVybiBhIT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0oYSkpOnRoaXMu''@;'; put 'put ''X2xhdGVzdFZhbHVlfV9zdWJzY3JpYmUoYSl7dGhpcy5fb2JqPWEsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3koYSksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihhLGQ9PnRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKGEsZCkp''@;'; put 'put ''fV9zZWxlY3RTdHJhdGVneShhKXtpZihfTShhKSlyZXR1cm4gaHdlO2lmKFdpZShhKSlyZXR1cm4gZndlO3Rocm93IGZ1bmN0aW9uIHpmKGMsbCl7cmV0dXJuIG5ldyBRbigyMTAwLCExKX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0''@;'; put 'put ''aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShhLGQpe2E9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1kLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZSYmdGhpcy5fcmVmPy5t''@;'; put 'put ''YXJrRm9yQ2hlY2soKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRXMsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToiYXN5bmMiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLGVa''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6Impzb24iLHR5cGU6YyxwdXJlOiEx''@;'; put 'put ''LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLHdSPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49cm9lfXRyYW5zZm9ybShhLGQ9cm9lKXtpZighYXx8IShhIGluc3RhbmNlb2YgTWFwKSYmIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RoaXMuZGlmZmVyPz89dGhpcy5kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCk7Y29uc3QgaD10aGlzLmRpZmZlci5kaWZmKGEpLGY9ZCE9PXRoaXMuY29tcGFyZUZuO3JldHVybiBoJiYodGhpcy5rZXlWYWx1ZXM9W10saC5mb3JFYWNoSXRlbSh2''@;'; put 'put ''PT57dGhpcy5rZXlWYWx1ZXMucHVzaChmdW5jdGlvbiB4d2UoYyxsKXtyZXR1cm57a2V5OmMsdmFsdWU6bH19KHYua2V5LHYuY3VycmVudFZhbHVlKSl9KSksKGh8fGYpJiYodGhpcy5rZXlWYWx1ZXMuc29ydChkKSx0aGlzLmNvbXBhcmVGbj1kKSx0aGlzLmtleVZhbHVlc31zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh3TSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJrZXl2YWx1ZSIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gcm9lKGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1jLmtleSxkPWwua2V5O2lmKGE9PT1kKXJldHVybiAwO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE7aWYodm9pZCAwPT09ZClyZXR1cm4tMTtpZihudWxsPT09YSlyZXR1cm4gMTtpZihudWxsPT09ZClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGEmJiJzdHJpbmciPT10eXBlb2YgZCly''@;'; put 'put ''ZXR1cm4gYTxkPy0xOjE7aWYoIm51bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQpcmV0dXJuIGEtZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtjb25zdCBoPVN0cmluZyhhKSxmPVN0cmluZyhkKTtyZXR1cm4g''@;'; put 'put ''aD09Zj8wOmg8Zj8tMToxfWxldCBSYT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtmdW5jdGlvbiB0bChjKXtyZXR1cm4iYnJvd3NlciI9PT1jfWZ1bmN0aW9uIGFvZShjKXtyZXR1cm4ic2VydmVyIj09PWN9bGV0IFJ3ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+dGwoZmko''@;'; put 'put ''aW8pKT9uZXcgTHdlKGZpKHZzKSx3aW5kb3cpOm5ldyBQd2V9KX19cmV0dXJuIGN9KSgpO2NsYXNzIEx3ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNB''@;'; put 'put ''cnJheShsKT8oKT0+bDpsfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuW3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV19c2Nyb2xsVG9Qb3NpdGlvbihsKXt0aGlzLndpbmRvdy5zY3JvbGxUbyhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2NvbnN0IGE9ZnVu''@;'; put 'put ''Y3Rpb24gT3dlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFj''@;'; put 'put ''aFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2RlO2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IHY9Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYodilyZXR1cm4gdn1oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe3RoaXMud2luZG93Lmhp''@;'; put 'put ''c3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb249bH1zY3JvbGxUb0VsZW1lbnQobCl7Y29uc3QgYT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9YS5sZWZ0K3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LGg9YS50b3ArdGhpcy53aW5kb3cucGFnZVlPZmZzZXQsZj10aGlzLm9mZnNldCgpO3RoaXMu''@;'; put 'put ''d2luZG93LnNjcm9sbFRvKGQtZlswXSxoLWZbMV0pfX1jbGFzcyBQd2V7c2V0T2Zmc2V0KGwpe31nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7fXNjcm9sbFRvQW5jaG9yKGwpe31zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24obCl7fX1jbGFz''@;'; put 'put ''cyBvb2V7fWNsYXNzIGNDZSBleHRlbmRzIHBfZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zdXBwb3J0c0RPTUV2ZW50cz0hMH19Y2xhc3MgaVogZXh0ZW5kcyBjQ2V7c3RhdGljIG1ha2VDdXJyZW50KCl7IWZ1bmN0aW9uIGZfZShjKXtIYWU/Pz1jfShuZXcgaVop''@;'; put 'put ''fW9uQW5kQ2FuY2VsKGwsYSxkKXtyZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKGEsZCksKCk9PntsLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkKX19ZGlzcGF0Y2hFdmVudChsLGEpe2wuZGlzcGF0Y2hFdmVudChhKX1yZW1vdmUobCl7bC5wYXJlbnROb2RlJiZsLnBhcmVudE5vZGUucmVtb3Zl''@;'; put 'put ''Q2hpbGQobCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybihhPWF8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxl''@;'; put 'put ''Iil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUobCl7cmV0dXJuIGwubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFy''@;'; put 'put ''Z2V0KGwsYSl7cmV0dXJuIndpbmRvdyI9PT1hP3dpbmRvdzoiZG9jdW1lbnQiPT09YT9sOiJib2R5Ij09PWE/bC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYobCl7Y29uc3QgYT1mdW5jdGlvbiB1Q2UoKXtyZXR1cm4ga009a018fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxrTT9rTS5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsfSgpO3JldHVybiBudWxsPT1hP251bGw6ZnVuY3Rpb24gZENlKGMpe3JldHVybiBuZXcgVVJMKGMsZG9jdW1lbnQuYmFzZVVSSSkucGF0aG5hbWV9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtrTT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5k''@;'; put 'put ''b3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIHFhZShkb2N1bWVudC5jb29raWUsbCl9fWxldCBrTT1udWxsLGZDZT0oKCk9PntjbGFzcyBje2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBhWj1uZXcgTXQoIiIpO2xldCBnb2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlz''@;'; put 'put ''Ll9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihh''@;'; put 'put ''LGQsaCl9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBRbig1MTAx''@;'; put 'put ''LCExKTtyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihhWikseHIoV2EpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyBtb2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IG9aPSJuZy1hcHAtaWQiO2xldCB2b2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmPXt9KXt0aGlzLmRvYz1hLHRoaXMuYXBwSWQ9ZCx0aGlzLm5vbmNlPWgsdGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkPWYsdGhpcy5zdHlsZVJlZj1uZXcgTWFwLHRoaXMuaG9zdE5vZGVzPW5ldyBTZXQsdGhpcy5zdHlsZU5vZGVzSW5ET009dGhpcy5jb2xsZWN0U2VydmVyUmVuZGVyZWRTdHlsZXMoKSx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9YW9lKGYpLHRoaXMucmVzZXRIb3N0Tm9kZXMo''@;'; put 'put ''KX1hZGRTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSkxPT09dGhpcy5jaGFuZ2VVc2FnZUNvdW50KGQsMSkmJnRoaXMub25TdHlsZUFkZGVkKGQpfXJlbW92ZVN0eWxlcyhhKXtmb3IoY29uc3QgZCBvZiBhKXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLC0xKTw9MCYmdGhpcy5vblN0eWxlUmVt''@;'; put 'put ''b3ZlZChkKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy5zdHlsZU5vZGVzSW5ET007YSYmKGEuZm9yRWFjaChkPT5kLnJlbW92ZSgpKSxhLmNsZWFyKCkpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5vblN0eWxlUmVtb3ZlZChkKTt0aGlzLnJlc2V0SG9zdE5v''@;'; put 'put ''ZGVzKCl9YWRkSG9zdChhKXt0aGlzLmhvc3ROb2Rlcy5hZGQoYSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLmFkZFN0eWxlVG9Ib3N0KGEsZCl9cmVtb3ZlSG9zdChhKXt0aGlzLmhvc3ROb2Rlcy5kZWxldGUoYSl9Z2V0QWxsU3R5bGVzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''c3R5bGVSZWYua2V5cygpfW9uU3R5bGVBZGRlZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLmhvc3ROb2Rlcyl0aGlzLmFkZFN0eWxlVG9Ib3N0KGQsYSl9b25TdHlsZVJlbW92ZWQoYSl7Y29uc3QgZD10aGlzLnN0eWxlUmVmO2QuZ2V0KGEpPy5lbGVtZW50cz8uZm9yRWFjaChoPT5oLnJlbW92''@;'; put 'put ''ZSgpKSxkLmRlbGV0ZShhKX1jb2xsZWN0U2VydmVyUmVuZGVyZWRTdHlsZXMoKXtjb25zdCBhPXRoaXMuZG9jLmhlYWQ/LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlWyR7b1p9PSIke3RoaXMuYXBwSWR9Il1gKTtpZihhPy5sZW5ndGgpe2NvbnN0IGQ9bmV3IE1hcDtyZXR1cm4gYS5mb3JFYWNo''@;'; put 'put ''KGg9PntudWxsIT1oLnRleHRDb250ZW50JiZkLnNldChoLnRleHRDb250ZW50LGgpfSksZH1yZXR1cm4gbnVsbH1jaGFuZ2VVc2FnZUNvdW50KGEsZCl7Y29uc3QgaD10aGlzLnN0eWxlUmVmO2lmKGguaGFzKGEpKXtjb25zdCBmPWguZ2V0KGEpO3JldHVybiBmLnVzYWdlKz1kLGYudXNhZ2V9''@;'; put 'put ''cmV0dXJuIGguc2V0KGEse3VzYWdlOmQsZWxlbWVudHM6W119KSxkfWdldFN0eWxlRWxlbWVudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZU5vZGVzSW5ET00sZj1oPy5nZXQoZCk7aWYoZj8ucGFyZW50Tm9kZT09PWEpcmV0dXJuIGguZGVsZXRlKGQpLGYucmVtb3ZlQXR0cmlidXRlKG9aKSxm''@;'; put 'put ''O3tjb25zdCB2PXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMubm9uY2UmJnYuc2V0QXR0cmlidXRlKCJub25jZSIsdGhpcy5ub25jZSksdi50ZXh0Q29udGVudD1kLHRoaXMucGxhdGZvcm1Jc1NlcnZlciYmdi5zZXRBdHRyaWJ1dGUob1osdGhpcy5hcHBJZCks''@;'; put 'put ''YS5hcHBlbmRDaGlsZCh2KSx2fX1hZGRTdHlsZVRvSG9zdChhLGQpe2NvbnN0IGg9dGhpcy5nZXRTdHlsZUVsZW1lbnQoYSxkKSxmPXRoaXMuc3R5bGVSZWYsdj1mLmdldChkKT8uZWxlbWVudHM7dj92LnB1c2goaCk6Zi5zZXQoZCx7ZWxlbWVudHM6W2hdLHVzYWdlOjF9KX1yZXNldEhvc3RO''@;'; put 'put ''b2Rlcygpe2NvbnN0IGE9dGhpcy5ob3N0Tm9kZXM7YS5jbGVhcigpLGEuYWRkKHRoaXMuZG9jLmhlYWQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSx4cigkdikseHIoTDUsOCkseHIoaW8pKX19c3RhdGlje3RoaXMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBzWj17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5r''@;'; put 'put ''Iix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGhNTC8ifSxsWj0vJUNPTVAlL2csdkNlPW5ldyBNdCgiIix7cHJvdmlkZWRJbjoicm9v''@;'; put 'put ''dCIsZmFjdG9yeTooKT0+ITB9KTtmdW5jdGlvbiBib2UoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YS5yZXBsYWNlKGxaLGMpKX1sZXQgY1o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEc9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hv''@;'; put 'put ''c3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLm5nWm9uZT1JLHRoaXMubm9uY2U9Ryx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9YW9lKE0p''@;'; put 'put ''LHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5ldyB1WihhLHYsSSx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PUpzLlNoYWRv''@;'; put 'put ''d0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxhdGlvbjpKcy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB3b2U/aC5hcHBseVRvSG9zdChhKTpoIGluc3RhbmNlb2YgZFomJmguYXBwbHlTdHlsZXMoKSxofWdldE9yQ3Jl''@;'; put 'put ''YXRlUmVuZGVyZXIoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXJCeUNvbXBJZDtsZXQgZj1oLmdldChkLmlkKTtpZighZil7Y29uc3Qgdj10aGlzLmRvYyxNPXRoaXMubmdab25lLEk9dGhpcy5ldmVudE1hbmFnZXIsRz10aGlzLnNoYXJlZFN0eWxlc0hvc3QsaWU9dGhpcy5yZW1vdmVTdHls''@;'; put 'put ''ZXNPbkNvbXBEZXN0cm95LHVlPXRoaXMucGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIEpzLkVtdWxhdGVkOmY9bmV3IHdvZShJLEcsZCx0aGlzLmFwcElkLGllLHYsTSx1ZSk7YnJlYWs7Y2FzZSBKcy5TaGFkb3dEb206cmV0dXJuIG5ldyB3Q2UoSSxHLGEs''@;'; put 'put ''ZCx2LE0sdGhpcy5ub25jZSx1ZSk7ZGVmYXVsdDpmPW5ldyBkWihJLEcsZCxpZSx2LE0sdWUpfWguc2V0KGQuaWQsZil9cmV0dXJuIGZ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbmRlcmVyQnlDb21wSWQuY2xlYXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKSh4cihnb2UpLHhyKHZvZSkseHIoJHYpLHhyKHZDZSkseHIodnMpLHhyKGlvKSx4cihXYSkseHIoTDUpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyB1Wntjb25zdHJ1Y3RvcihsLGEs''@;'; put 'put ''ZCxoKXt0aGlzLmV2ZW50TWFuYWdlcj1sLHRoaXMuZG9jPWEsdGhpcy5uZ1pvbmU9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9aCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnRocm93T25TeW50aGV0aWNQcm9wcz0hMCx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgp''@;'; put 'put ''e31jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIGE/dGhpcy5kb2MuY3JlYXRlRWxlbWVudE5TKHNaW2FdfHxhLGwpOnRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0''@;'; put 'put ''aGlzLmRvYy5jcmVhdGVUZXh0Tm9kZShsKX1hcHBlbmRDaGlsZChsLGEpeyhfb2UobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxkKGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKF9vZShsKT9sLmNvbnRlbnQ6bCkuaW5zZXJ0QmVmb3JlKGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtsJiZsLnJl''@;'; put 'put ''bW92ZUNoaWxkKGEpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7bGV0IGQ9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IobCk6bDtpZighZCl0aHJvdyBuZXcgUW4oLTUxMDQsITEpO3JldHVybiBhfHwoZC50ZXh0Q29udGVudD0iIiksZH1wYXJlbnROb2RlKGwpe3Jl''@;'; put 'put ''dHVybiBsLnBhcmVudE5vZGV9bmV4dFNpYmxpbmcobCl7cmV0dXJuIGwubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKGwsYSxkLGgpe2lmKGgpe2E9aCsiOiIrYTtjb25zdCBmPXNaW2hdO2Y/bC5zZXRBdHRyaWJ1dGVOUyhmLGEsZCk6bC5zZXRBdHRyaWJ1dGUoYSxkKX1lbHNlIGwuc2V0QXR0''@;'; put 'put ''cmlidXRlKGEsZCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXtpZihkKXtjb25zdCBoPXNaW2RdO2g/bC5yZW1vdmVBdHRyaWJ1dGVOUyhoLGEpOmwucmVtb3ZlQXR0cmlidXRlKGAke2R9OiR7YX1gKX1lbHNlIGwucmVtb3ZlQXR0cmlidXRlKGEpfWFkZENsYXNzKGwsYSl7bC5jbGFzc0xpc3Qu''@;'; put 'put ''YWRkKGEpfXJlbW92ZUNsYXNzKGwsYSl7bC5jbGFzc0xpc3QucmVtb3ZlKGEpfXNldFN0eWxlKGwsYSxkLGgpe2gmKEszLkRhc2hDYXNlfEszLkltcG9ydGFudCk/bC5zdHlsZS5zZXRQcm9wZXJ0eShhLGQsaCZLMy5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOmwuc3R5bGVbYV09ZH1yZW1v''@;'; put 'put ''dmVTdHlsZShsLGEsZCl7ZCZLMy5EYXNoQ2FzZT9sLnN0eWxlLnJlbW92ZVByb3BlcnR5KGEpOmwuc3R5bGVbYV09IiJ9c2V0UHJvcGVydHkobCxhLGQpe251bGwhPWwmJihsW2FdPWQpfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgbCYmIShsPXRtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5k''@;'; put 'put ''ZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJldHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5w''@;'; put 'put ''cmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gX29lKGMpe3JldHVybiJURU1QTEFURSI9PT1jLnRhZ05hbWUmJnZvaWQgMCE9PWMuY29udGVudH1jbGFzcyB3Q2UgZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEkpe3N1cGVyKGwsZix2LEkpLHRoaXMuc2hhcmVkU3R5bGVz''@;'; put 'put ''SG9zdD1hLHRoaXMuaG9zdEVsPWQsdGhpcy5zaGFkb3dSb290PWQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7Y29uc3QgRz1ib2UoaC5pZCxoLnN0eWxlcyk7Zm9yKGNvbnN0IGllIG9mIEcpe2NvbnN0''@;'; put 'put ''IHVlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7TSYmdWUuc2V0QXR0cmlidXRlKCJub25jZSIsTSksdWUudGV4dENvbnRlbnQ9aWUsdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHVlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMu''@;'; put 'put ''c2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNlcnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3Zl''@;'; put 'put ''Q2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBkWiBleHRlbmRzIHVae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sSSl7c3VwZXIobCxmLHYsTSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95''@;'; put 'put ''PWgsdGhpcy5zdHlsZXM9ST9ib2UoSSxkLnN0eWxlcyk6ZC5zdHlsZXN9YXBwbHlTdHlsZXMoKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHRoaXMuc3R5bGVzKX1kZXN0cm95KCl7dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95JiZ0aGlzLnNoYXJlZFN0eWxlc0hvc3Qu''@;'; put 'put ''cmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzKX19Y2xhc3Mgd29lIGV4dGVuZHMgZFp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxJKXtjb25zdCBHPWgrIi0iK2QuaWQ7c3VwZXIobCxhLGQsZix2LE0sSSxHKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHlDZShjKXtyZXR1cm4iX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCUiLnJlcGxhY2UobFosYyl9KEcpLHRoaXMuaG9zdEF0dHI9ZnVuY3Rpb24gYkNlKGMpe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShsWixjKX0oRyl9YXBwbHlUb0hvc3QobCl7dGhpcy5hcHBseVN0eWxlcygpLHRoaXMuc2V0QXR0cmlidXRlKGwsdGhpcy5ob3N0''@;'; put 'put ''QXR0ciwiIil9Y3JlYXRlRWxlbWVudChsLGEpe2NvbnN0IGQ9c3VwZXIuY3JlYXRlRWxlbWVudChsLGEpO3JldHVybiBzdXBlci5zZXRBdHRyaWJ1dGUoZCx0aGlzLmNvbnRlbnRBdHRyLCIiKSxkfX1sZXQgQ0NlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBtb2V7Y29uc3RydWN0b3IoYSl7c3Vw''@;'; put 'put ''ZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuITB9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihkLGgsITEpLCgpPT50aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgpfXJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLnJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXIoZCxoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IENvZT1bImFsdCIs''@;'; put 'put ''ImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxTQ2U9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAi''@;'; put 'put ''LERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LE1DZT17YWx0OmM9PmMuYWx0S2V5LGNvbnRyb2w6Yz0+Yy5jdHJsS2V5LG1ldGE6Yz0+Yy5tZXRhS2V5LHNoaWZ0OmM9PmMuc2hpZnRLZXl9O2xldCB4Q2U9KCgpPT57Y2xh''@;'; put 'put ''c3MgYyBleHRlbmRzIG1vZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxoKXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksdj1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5''@;'; put 'put ''LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRtKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50TmFtZSx2KSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBvcCgpKTtsZXQgdj0iIixNPWQuaW5kZXhPZigiY29kZSIpO2lmKE0+LTEmJihkLnNwbGljZShNLDEp''@;'; put 'put ''LHY9ImNvZGUuIiksQ29lLmZvckVhY2goRz0+e2NvbnN0IGllPWQuaW5kZXhPZihHKTtpZT4tMSYmKGQuc3BsaWNlKGllLDEpLHYrPUcrIi4iKX0pLHYrPWYsMCE9ZC5sZW5ndGh8fDA9PT1mLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBJPXt9O3JldHVybiBJLmRvbUV2ZW50TmFtZT1oLEku''@;'; put 'put ''ZnVsbEtleT12LEl9c3RhdGljIG1hdGNoRXZlbnRGdWxsS2V5Q29kZShhLGQpe2xldCBoPVNDZVthLmtleV18fGEua2V5LGY9IiI7cmV0dXJuIGQuaW5kZXhPZigiY29kZS4iKT4tMSYmKGg9YS5jb2RlLGY9ImNvZGUuIiksIShudWxsPT1ofHwhaCkmJihoPWgudG9Mb3dlckNhc2UoKSwiICI9''@;'; put 'put ''PT1oP2g9InNwYWNlIjoiLiI9PT1oJiYoaD0iZG90IiksQ29lLmZvckVhY2godj0+e3YhPT1oJiYoMCxNQ2Vbdl0pKGEpJiYoZis9disiLiIpfSksZis9aCxmPT09ZCl9c3RhdGljIGV2ZW50Q2FsbGJhY2soYSxkLGgpe3JldHVybiBmPT57Yy5tYXRjaEV2ZW50RnVsbEtleUNvZGUoZixhKSYm''@;'; put 'put ''aC5ydW5HdWFyZGVkKCgpPT5kKGYpKX19c3RhdGljIF9ub3JtYWxpemVLZXkoYSl7cmV0dXJuImVzYyI9PT1hPyJlc2NhcGUiOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBNb2U9W3twcm92aWRlOmlvLHVzZVZhbHVlOiJicm93c2VyIn0se3Byb3ZpZGU6UGssdXNlVmFsdWU6ZnVuY3Rpb24gRUNlKCl7aVoubWFrZUN1cnJlbnQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOnZzLHVzZUZh''@;'; put 'put ''Y3Rvcnk6ZnVuY3Rpb24gQUNlKCl7cmV0dXJuIGZ1bmN0aW9uIG9CKGMpe1RDPWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLGtDZT10YWUoRGJlLCJicm93c2VyIixNb2UpLERDZT1uZXcgTXQoIiIpLHhvZT1be3Byb3ZpZGU6dFIsdXNlQ2xhc3M6Y2xhc3MgaENle2FkZFRvV2lu''@;'; put 'put ''ZG93KGwpe1Z0LmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBRbig1MTAzLCExKTtyZXR1cm4gZn0sVnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxs''@;'; put 'put ''VGVzdGFiaWxpdGllcygpLFZ0LmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksVnQuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChWdC5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksVnQuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChkPT57Y29uc3Qg''@;'; put 'put ''aD1WdC5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoO2NvbnN0IHY9ZnVuY3Rpb24oKXtmLS0sMD09ZiYmZCgpfTtoLmZvckVhY2goTT0+e00ud2hlblN0YWJsZSh2KX0pfSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYSxkKXtyZXR1cm4gbnVsbD09YT9udWxs''@;'; put 'put ''OmwuZ2V0VGVzdGFiaWxpdHkoYSk/PyhkP3RtKCkuaXNTaGFkb3dSb290KGEpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5ob3N0LCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEucGFyZW50RWxlbWVudCwhMCk6bnVsbCl9fSxkZXBzOltdfSx7cHJvdmlkZTpaaWUs''@;'; put 'put ''dXNlQ2xhc3M6TVUsZGVwczpbV2EseFUsdFJdfSx7cHJvdmlkZTpNVSx1c2VDbGFzczpNVSxkZXBzOltXYSx4VSx0Ul19XSxFb2U9W3twcm92aWRlOkY2LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6ZzIsdXNlRmFjdG9yeTpmdW5jdGlvbiBUQ2UoKXtyZXR1cm4gbmV3IGcyfSxkZXBzOltd''@;'; put 'put ''fSx7cHJvdmlkZTphWix1c2VDbGFzczpDQ2UsbXVsdGk6ITAsZGVwczpbdnMsV2EsaW9dfSx7cHJvdmlkZTphWix1c2VDbGFzczp4Q2UsbXVsdGk6ITAsZGVwczpbdnNdfSxjWix2b2UsZ29lLHtwcm92aWRlOng4LHVzZUV4aXN0aW5nOmNafSx7cHJvdmlkZTpvb2UsdXNlQ2xhc3M6ZkNlLGRl''@;'; put 'put ''cHM6W119LFtdXTtsZXQgVG9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7fXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbihhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOiR2LHVzZVZhbHVlOmEuYXBwSWR9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoRENlLDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6Wy4uLkVvZSwuLi54b2VdLGltcG9ydHM6W1JhLEliZV19KX19cmV0dXJuIGN9KSgpLElDZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvYz1hfWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZShhKXt0aGlzLl9kb2MudGl0bGU9YXx8IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMp''@;'; put 'put ''KX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtiKDM3NDgyKSxiKDgwNjg1KTtjb25zdCBoWj17ZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNs''@;'; put 'put ''YXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sS249e3Jvb3RQYXJhbToiIixkY0xpYjoiIix4bG1hcHM6W10sZWRpdG9yOntzdGFydHVwU2V0OiExLHRyZWVOb2RlTGlicmFyaWVzOltdLGxpYnNBbmRUYWJsZXM6W10sbGlicmFyaWVzOltdLGxpYnJhcnk6IiIsdGFibGU6''@;'; put 'put ''IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sdmlld2VyOntzdGFydHVwU2V0OiExLHRhYmxlc1NldDohMSxsaWJyYXJpZXM6W10sdGFibGVzOm51bGwsbGlicmFyeToiIix0YWJsZToi''@;'; put 'put ''IixsaWJpbmZvOltdLGxpYnJhcmllc1NlYXJjaDoiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119LGN1cnJlbnRTZWxlY3Rpb246IiJ9LHZpZXdib3hlczp7fSxsaW5lYWdlOntsaWJyYXJ5''@;'; put 'put ''TGlzdDpbXSx0YWJsZXNMaXN0OltdLGNvbHVtbnNMaXN0OltdLGxpYnJhcmllc1NlYXJjaDoiIixsaWI6IiIsdGFibGU6IiIsY29sdW1uOiIiLGN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlOiIiLGN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjoiIn0sbWV0YWRhdGE6e21ldGFEYXRhTGlzdDp2''@;'; put 'put ''b2lkIDAsbWV0YURhdGFTZWFyY2g6IiIsbWV0YU9iamVjdExpc3Q6W10sbWV0YU9iamVjdFNlYXJjaDoiIixtZXRhUmVwb3NpdG9yaWVzOnZvaWQgMCxzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHZpeWFBcGk6e2NvbGxlY3Rpb25zTGlzdDp2b2lkIDAsY29sbGVjdGlvbnNTZWFyY2g6IiIsc2Vs''@;'; put 'put ''ZWN0ZWRSZXBvc2l0b3J5OiIifSx1c2VybmF2Ont1c2VyTGlzdDp2b2lkIDAsdXNlclNlYXJjaDoiIixncm91cExpc3Q6dm9pZCAwLGdyb3VwU2VhcmNoOiIiLHJvbGVMaXN0OnZvaWQgMCxyb2xlU2VhcmNoOiIifSxvcGVyYXRvcnM6e251bU9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9Iiwi''@;'; put 'put ''Pj0iLCJCRVRXRUVOIiwiSU4iLCJOT1QgSU4iLCJORSJdLGNoYXJPcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl19LGhhbmRzb250YWJsZTp7ZGFya1RhYmxlSGVhZGVyQ2xhc3M6ImRhcmtUSCJ9LHVzZXJEcm9wZG93bkNvbmZp''@;'; put 'put ''Zzp7Y2xvc2VPbkRlYnVnQ2xpY2s6ITF9fTt2YXIgT289Yig5NzU4NiksSW9lPWIubihPbyk7ZnVuY3Rpb24gUm9lKGMsbCl7c3dpdGNoKGMpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNDpyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oYSxkLGgsZil7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdil7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDY6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNKXtyZXR1cm4gbC5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sSSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDg6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEksRyl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtj''@;'; put 'put ''YXNlIDk6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEksRyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDEwOnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxJLEcsaWUsdWUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZGVmYXVsdDp0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIF9hcml0eSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuIHRlbiIpfX1mdW5jdGlvbiBubShjKXtyZXR1cm4gbnVsbCE9YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYhMD09PWNbIkBAZnVuY3Rpb25hbC9w''@;'; put 'put ''bGFjZWhvbGRlciJdfWZ1bmN0aW9uIGVnKGMpe3JldHVybiBmdW5jdGlvbiBsKGEpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8bm0oYSk/bDpjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gS3koYyl7cmV0dXJuIGZ1bmN0aW9uIGwoYSxkKXtzd2l0Y2goYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBsO2Nhc2UgMTpyZXR1cm4gbm0oYSk/bDplZyhmdW5jdGlvbihoKXtyZXR1cm4gYyhhLGgpfSk7ZGVmYXVsdDpyZXR1cm4gbm0oYSkmJm5tKGQpP2w6bm0oYSk/ZWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoaCxkKX0pOm5tKGQpP2VnKGZ1bmN0aW9uKGgp''@;'; put 'put ''e3JldHVybiBjKGEsaCl9KTpjKGEsZCl9fX1mdW5jdGlvbiBMb2UoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZD1bXSxoPTAsZj1jLHY9MCxNPSExO3Y8bC5sZW5ndGh8fGg8YXJndW1lbnRzLmxlbmd0aDspe3ZhciBJO3Y8bC5sZW5ndGgmJighbm0obFt2XSl8fGg+PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgpP0k9bFt2XTooST1hcmd1bWVudHNbaF0saCs9MSksZFt2XT1JLG5tKEkpP009ITA6Zi09MSx2Kz0xfXJldHVybiFNJiZmPD0wP2EuYXBwbHkodGhpcyxkKTpSb2UoTWF0aC5tYXgoMCxmKSxMb2UoYyxkLGEpKX19Y29uc3QgT29lPUt5KGZ1bmN0aW9uKGwsYSl7cmV0dXJu''@;'; put 'put ''IDE9PT1sP2VnKGEpOlJvZShsLExvZShsLFtdLGEpKX0pLFBvZT1LeShmdW5jdGlvbihsLGEpe3JldHVybiBhIGluc3RhbmNlb2YgbHx8bnVsbCE9YSYmKGEuY29uc3RydWN0b3I9PT1sfHwiT2JqZWN0Ij09PWwubmFtZSYmIm9iamVjdCI9PXR5cGVvZiBhKX0pO2Z1bmN0aW9uIHhSKGMsbCl7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpfXZhciBGb2U9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBIb2U9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PUZvZS5jYWxsKGFyZ3VtZW50cyk/ZnVuY3Rpb24obCl7''@;'; put 'put ''cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1Gb2UuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIHhSKCJjYWxsZWUiLGwpfX0oKSxOQ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBOb2UoYyl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9dmFyIGpDZT1lZyhmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGxb''@;'; put 'put ''ImZhbnRhc3ktbGFuZC9lbXB0eSJdP2xbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2wuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0''@;'; put 'put ''eSJdKCk6bnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZW1wdHk/bC5lbXB0eSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yLmVtcHR5P2wuY29uc3RydWN0b3IuZW1wdHkoKTpOQ2UobCk/W106Tm9lKGwpPyIiOmZ1''@;'; put 'put ''bmN0aW9uIFZDZShjKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX0obCk/e306SG9lKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiBCQ2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''Zy5jYWxsKGMpO3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVj''@;'; put 'put ''dCBJbnQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1s''@;'; put 'put ''fShsKT9sLmNvbnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IHpDZT1qQ2U7ZnVuY3Rpb24gVm9lKGMpe2Zvcih2YXIgYSxsPVtdOyEoYT1jLm5leHQoKSkuZG9uZTspbC5wdXNoKGEudmFsdWUpO3JldHVybiBsfWZ1bmN0aW9uIEJvZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1hLmxl''@;'; put 'put ''bmd0aDtkPGg7KXtpZihjKGwsYVtkXSkpcmV0dXJuITA7ZCs9MX1yZXR1cm4hMX1jb25zdCBmWj0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpmdW5jdGlvbiBaQ2UoYyxsKXtyZXR1cm4gYz09PWw/MCE9PWN8fDEvYz09MS9sOmMhPWMmJmwhPWx9O3ZhciBXQ2U9IXt0''@;'; put 'put ''b1N0cmluZzpudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgidG9TdHJpbmciKSxqb2U9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSx6b2U9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJsZW5ndGgiKX0oKSxZQ2U9ZnVuY3Rpb24obCxhKXtmb3IodmFyIGQ9MDtkPGwubGVuZ3RoOyl7aWYobFtkXT09PWEpcmV0dXJuITA7ZCs9MX1yZXR1cm4hMX07Y29uc3QgVW9lPWVnKCJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBPYmplY3Qua2V5c3x8em9lP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9em9lJiZIb2UobCk7Zm9yKGEgaW4gbCl4UihhLGwpJiYoIWZ8fCJsZW5ndGgiIT09YSkmJihoW2gubGVuZ3RoXT1hKTtpZihXQ2UpZm9yKGQ9am9lLmxl''@;'; put 'put ''bmd0aC0xO2Q+PTA7KXhSKGE9am9lW2RdLGwpJiYhWUNlKGgsYSkmJihoW2gubGVuZ3RoXT1hKSxkLT0xO3JldHVybiBofTpmdW5jdGlvbihsKXtyZXR1cm4gT2JqZWN0KGwpIT09bD9bXTpPYmplY3Qua2V5cyhsKX0pLFpvZT1lZyhmdW5jdGlvbihsKXtyZXR1cm4gbnVsbD09PWw/Ik51bGwi''@;'; put 'put ''OnZvaWQgMD09PWw/IlVuZGVmaW5lZCI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNlKDgsLTEpfSk7ZnVuY3Rpb24gV29lKGMsbCxhLGQpe3ZhciBoPVZvZShjKTtmdW5jdGlvbiB2KE0sSSl7cmV0dXJuIHBaKE0sSSxhLnNsaWNlKCksZC5zbGljZSgpKX1yZXR1cm4h''@;'; put 'put ''Qm9lKGZ1bmN0aW9uKE0sSSl7cmV0dXJuIUJvZSh2LEksTSl9LFZvZShsKSxoKX1mdW5jdGlvbiBwWihjLGwsYSxkKXtpZihmWihjLGwpKXJldHVybiEwO3ZhciBoPVpvZShjKTtpZihoIT09Wm9lKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1''@;'; put 'put ''YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5k''@;'; put 'put ''L2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gVUNlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1''@;'; put 'put ''bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFmWihjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkp''@;'; put 'put ''cmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjppZighZlooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJj''@;'; put 'put ''ZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5pZ25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFb''@;'; put 'put ''Zl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0xfXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmV29lKGMuZW50cmllcygpLGwuZW50cmllcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJTZXQiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJldv''@;'; put 'put ''ZShjLnZhbHVlcygpLGwudmFsdWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmNhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjpjYXNlIkRhdGUiOmNhc2UiRXJyb3IiOmNhc2UiUmVn''@;'; put 'put ''RXhwIjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFy''@;'; put 'put ''cmF5IjpjYXNlIkFycmF5QnVmZmVyIjpicmVhaztkZWZhdWx0OnJldHVybiExfXZhciB2PVVvZShjKTtpZih2Lmxlbmd0aCE9PVVvZShsKS5sZW5ndGgpcmV0dXJuITE7dmFyIE09YS5jb25jYXQoW2NdKSxJPWQuY29uY2F0KFtsXSk7Zm9yKGY9di5sZW5ndGgtMTtmPj0wOyl7dmFyIEc9dltm''@;'; put 'put ''XTtpZigheFIoRyxsKXx8IXBaKGxbR10sY1tHXSxNLEkpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgcUNlPUt5KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIHBaKGwsYSxbXSxbXSl9KSxZb2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJnFDZShsLHpDZShsKSl9KTtmdW5jdGlv''@;'; put 'put ''biBJTShjKXtyZXR1cm4gbnVsbD09Y31mdW5jdGlvbiBSTShjKXtyZXR1cm4gSU0oYyl8fFlvZShjKX1mdW5jdGlvbiBnWihjKXtyZXR1cm4gUG9lKFN0cmluZyxjKX1mdW5jdGlvbiBLb2UoYyxsKXtyZXR1cm4gYyE9PWx9ZnVuY3Rpb24gUW9lKGM9d2luZG93KXtyZXR1cm4hSU0oYyl9Y29u''@;'; put 'put ''c3Qgb1NlPU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKGwpe3JldHVybigwfGwpPT09bH0sbFNlPUt5KGZ1bmN0aW9uKGwsYSl7dmFyIGQ9bDwwP2EubGVuZ3RoK2w6bDtyZXR1cm4gTm9lKGEpP2EuY2hhckF0KGQpOmFbZF19KSx1U2U9S3koZnVuY3Rpb24obCxhKXtyZXR1cm4gbC5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oZCl7Zm9yKHZhciB2LGg9YSxmPTA7ZjxkLmxlbmd0aDspe2lmKG51bGw9PWgpcmV0dXJuO2g9b1NlKHY9ZFtmXSk/bFNlKHYsaCk6aFt2XSxmKz0xfXJldHVybiBofSl9KSxoU2U9S3koZnVuY3Rpb24obCxhKXtyZXR1cm4gdVNlKFtsXSxhKVswXX0pLHBTZT1Pb2UoMiwoYyxs''@;'; put 'put ''KT0+dm9pZCAwIT09aFNlKGMsbCkpLGVzZT1wU2UoeyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiOiEwfSx3aW5kb3cpO2xldCBUUix0c2UsbVosdlo7ZnVuY3Rpb24gbnNlKGM9ITApe2lmKCFjfHwhVFIpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12''@;'; put 'put ''ZXJzaW9uXSIpO1RSPWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJuIFRSfWZ1bmN0aW9uIG1TZShjPSEwKXtyZXR1cm4gYyYmVFJ8fCh0c2U9d2luZG93Py5hbmd1bGFyPy52ZXJzaW9uPy5mdWxsKSx0c2V9ZnVuY3Rpb24gcnNlKGM9ITApe3JldHVybiBj''@;'; put 'put ''JiZtWnx8KG1aPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lvbjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksbVp9ZnVuY3Rpb24gaXNl''@;'; put 'put ''KGM9ITApe2lmKCFjfHwhdlope2NvbnN0IGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2xldCBhO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWlmKGxbZF0uX192dWVfXyl7YT1sW2RdO2JyZWFrfXZaPWE/InVua25vd24gdmVyc2lvbiI6dm9pZCAwfXJldHVybiB2Wn1mdW5j''@;'; put 'put ''dGlvbiBXOChjKXtyZXR1cm4gYy5yZXBsYWNlKC9bQS1aXS9nLGw9PiItIitsLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHNzZShjKXtyZXR1cm4gYy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpfWNvbnN0IENTZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtpZih0aGlzLnN1''@;'; put 'put ''cHBvcnRzPXtqczohMH0sIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKXx8Im5vLWpzIj09PWRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKSl7Y29uc3QgYz1XOChPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRzKS5yZWR1Y2UoKGwsYSk9''@;'; put 'put ''PmAke2x9ICR7dGhpcy5zdXBwb3J0c1thXT9hOiJuby0iK2F9YCwiIikpLnRyaW0oKTtkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIixjKX19fTtjbGFzcyBMTXtzdGF0aWMgbG9nKC4uLmwpe19aKCkmJmJaKCkmJmNvbnNvbGUubG9nKC4uLmwpfXN0YXRpYyB3YXJu''@;'; put 'put ''KC4uLmwpe19aKCkmJmJaKCkmJmNvbnNvbGUud2FybiguLi5sKX1zdGF0aWMgZXJyb3IoLi4ubCl7X1ooKSYmYlooKSYmY29uc29sZS5lcnJvciguLi5sKX19ZnVuY3Rpb24gYlooKXtyZXR1cm4hZXNlKFsiamFzbWluZSJdKX1mdW5jdGlvbiBfWigpe3JldHVybiF3aW5kb3cuQ0RTLmVudmly''@;'; put 'put ''b25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gdXNlKCl7UW9lKCkmJih3aW5kb3cuQ0RTPXdpbmRvdy5DRFN8fHtfdmVyc2lvbjpbXSxfcmVhY3Q6e3ZlcnNpb246dm9pZCAwfSxfc3VwcG9ydHM6Q1NlLnN1cHBvcnRzLF9pc1N0YXRlUHJveGllZDohMSxfc3RhdGU6e2ZvY3VzVHJhcEl0ZW1z''@;'; put 'put ''OltdLGxheWVyRWxlbWVudHM6W10saTE4blJlZ2lzdHJ5Ont9LGVsZW1lbnRSZWdpc3RyeTp7fSxpY29uUmVnaXN0cnk6e30sbW90aW9uUmVnaXN0cnk6e319LGVudmlyb25tZW50Ontwcm9kdWN0aW9uOiExfSxnZXREZXRhaWxzOmRzZSxsb2dEZXRhaWxzOlNTZX0sZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBjPSI2LjE1LjEiO3dpbmRvdy5DRFMuX3ZlcnNpb24uaW5kZXhPZihjKTwwJiYod2luZG93LkNEUy5fdmVyc2lvbi5wdXNoKGMpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uc2V0QXR0cmlidXRlKCJjZHMtdmVyc2lvbiIsd2luZG93LkNEUy5fdmVyc2lvbi5qb2luKCIgIikp''@;'; put 'put ''KSx3aW5kb3cuQ0RTLl92ZXJzaW9uLmxlbmd0aD4xJiZMTS53YXJuKCJSdW5uaW5nIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiBDbGFyaXR5IGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4gUGxlYXNlIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGxvYWRlZC4iKX0oKSx3aW5kb3cu''@;'; put 'put ''Q0RTLl9pc1N0YXRlUHJveGllZHx8KHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkPSEwLHdpbmRvdy5DRFMuX3N0YXRlPW5ldyBQcm94eSh3aW5kb3cuQ0RTLl9zdGF0ZSx7c2V0OihjLGwsYSk9Pntjb25zdCBkPXtrZXk6bCxwcmV2OndpbmRvdy5DRFMuX3N0YXRlW2xdLGN1cnJlbnQ6YX07''@;'; put 'put ''cmV0dXJuIGNbbF09YSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiQ0RTX1NUQVRFX1VQREFURSIse2RldGFpbDpkfSkpLCEwfX0pKSl9ZnVuY3Rpb24gZHNlKCl7cmV0dXJue3ZlcnNpb25zOndpbmRvdy5DRFMuX3ZlcnNpb24sZW52aXJvbm1lbnQ6d2luZG93LkNE''@;'; put 'put ''Uy5lbnZpcm9ubWVudCx1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxzdXBwb3J0czp3aW5kb3cuQ0RTLl9zdXBwb3J0cyxhbmd1bGFyVmVyc2lvbjpuc2UoITEpLGFuZ3VsYXJKU1ZlcnNpb246bVNlKCExKSxyZWFjdFZlcnNpb246cnNlKCExKSx2dWVWZXJzaW9uOmlzZSghMSksc3Rh''@;'; put 'put ''dGU6ey4uLndpbmRvdy5DRFMuX3N0YXRlLGljb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5pY29uUmVnaXN0cnkpLG1vdGlvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLm1vdGlvblJlZ2lzdHJ5KSxmb2N1c1RyYXBSZWdpc3RyeTpPYmpl''@;'; put 'put ''Y3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5mb2N1c1RyYXBJdGVtcy5tYXAoYz0+Yy5mb2N1c1RyYXBJZCkpfX19ZnVuY3Rpb24gU1NlKCl7TE0ubG9nKEpTT04uc3RyaW5naWZ5KGRzZSgpLG51bGwsMikpfWNvbnN0IE1TZT1Pb2UoMywoYyxsLGEpPT57IWZ1bmN0aW9uIGdTZShjLGwpe3Jl''@;'; put 'put ''dHVybiBsfHwobD13aW5kb3cmJndpbmRvdy5jdXN0b21FbGVtZW50cyksIWx8fCEhbC5nZXQoYyl9KGMpfHxmdW5jdGlvbiB2U2UoKXtyZXR1cm4gd2luZG93Py5sb2NhdGlvbj8uaHJlZj8uaW5jbHVkZXMoImxvY2FsaG9zdDo2MDA2Iil9KCk/KGEuZGVmaW5lKGMsbCksdXNlKCksd2luZG93''@;'; put 'put ''JiYhT2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5KS5zb21lKGQ9PmQ9PT1jKSYmKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeT17Li4ud2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5LFtjXTp7fX0pKTpMTS53YXJuKGMrIiBoYXMg''@;'; put 'put ''YWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQiKX0pO2Z1bmN0aW9uIFVmKGMsbCxhLGQpe3ZhciB2LGg9YXJndW1lbnRzLmxlbmd0aCxmPWg8Mz9sOm51bGw9PT1kP2Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGEpOmQ7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlmPVJlZmxlY3QuZGVjb3JhdGUoYyxsLGEsZCk7ZWxzZSBmb3IodmFyIE09Yy5sZW5ndGgtMTtNPj0wO00tLSkodj1jW01dKSYmKGY9KGg8Mz92KGYpOmg+Mz92KGwsYSxmKTp2KGwsYSkpfHxmKTtyZXR1cm4gaD4zJiZmJiZPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobCxhLGYpLGZ9ZnVuY3Rpb24gcm0oYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBybT8odGhpcy52PWMsdGhpcyk6bmV3IHJtKGMpfWZ1bmN0aW9uIGdzZShjKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5j''@;'; put 'put ''SXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gTVooYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSly''@;'; put 'put ''ZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsrXSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlz''@;'; put 'put ''IG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNb''@;'; put 'put ''Zl0mJmZ1bmN0aW9uKHYpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihNLEkpeyFmdW5jdGlvbiBoKGYsdixNLEkpe1Byb21pc2UucmVzb2x2ZShJKS50aGVuKGZ1bmN0aW9uKEcpe2Yoe3ZhbHVlOkcsZG9uZTpNfSl9LHYpfShNLEksKHY9Y1tmXSh2KSkuZG9uZSx2LnZhbHVlKX0pfX19''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN1cHByZXNzZWRFcnJvciYmU3VwcHJlc3NlZEVycm9yO2xldCBtc2U9ITE7ZnVuY3Rpb24gWFNlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZigh''@;'; put 'put ''bXNlKXttc2U9ITA7Y29uc3QgYz1SZWZsZWN0LmdldFByb3RvdHlwZU9mKEludDhBcnJheSk7Zm9yKGNvbnN0IGwgb2ZbQXJyYXksU3RyaW5nLGNdKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSwiYXQiLHt2YWx1ZTpYU2Usd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KX1sZXQgdnNlPSExLHlzZT0hMTtmdW5jdGlvbiBic2UoYyxsLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShsKT90aGlzLmdldEF0dHJp''@;'; put 'put ''YnV0ZShsKTpudWxsfSxzZXQ6ZnVuY3Rpb24oZCl7bnVsbCE9PWQ/dGhpcy5zZXRBdHRyaWJ1dGUobCxkKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZShsKX19KX12c2V8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChic2UoRWxlbWVudC5wcm90b3R5cGUsInJvbGUi''@;'; put 'put ''LCJyb2xlIiksdnNlPSEwKSx5c2V8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KHlzZT0hMCxbIkFjdGl2ZURlc2NlbmRhbnQiLCJBdG9taWMiLCJBdXRvQ29tcGxldGUiLCJCdXN5IiwiQ2hlY2tlZCIsIkNvbENvdW50IiwiQ29sSW5kZXgiLCJDb2xT''@;'; put 'put ''cGFuIiwiQ29udHJvbHMiLCJDdXJyZW50IiwiRGVzY3JpYmVkQnkiLCJEZXRhaWxzIiwiRGlzYWJsZWQiLCJFcnJvck1lc3NhZ2UiLCJFeHBhbmRlZCIsIkZsb3dUbyIsIkhhc1BvcHVwIiwiSGlkZGVuIiwiSW52YWxpZCIsIktleVNob3J0Y3V0cyIsIkxhYmVsIiwiTGFiZWxsZWRCeSIsIkxl''@;'; put 'put ''dmVsIiwiTGl2ZSIsIk1vZGFsIiwiTXVsdGlMaW5lIiwiTXVsdGlTZWxlY3RhYmxlIiwiT3JpZW50YXRpb24iLCJPd25zIiwiUGxhY2Vob2xkZXIiLCJQb3NJblNldCIsIlByZXNzZWQiLCJSZWFkT25seSIsIlJlbGV2YW50IiwiUmVxdWlyZWQiLCJSb2xlRGVzY3JpcHRpb24iLCJSb3dDb3Vu''@;'; put 'put ''dCIsIlJvd0luZGV4IiwiUm93U3BhbiIsIlNlbGVjdGVkIiwiU2V0U2l6ZSIsIlNvcnQiLCJWYWx1ZU1heCIsIlZhbHVlTWluIiwiVmFsdWVOb3ciLCJWYWx1ZVRleHQiXS5mb3JFYWNoKGM9PmJzZShFbGVtZW50LnByb3RvdHlwZSwiYXJpYS0iK2MudG9Mb3dlckNhc2UoKSwiYXJpYSIrYykp''@;'; put 'put ''KTtjb25zdCBBUj13aW5kb3csRVo9QVIuU2hhZG93Um9vdCYmKHZvaWQgMD09PUFSLlNoYWR5Q1NTfHxBUi5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUs''@;'; put 'put ''VFo9U3ltYm9sKCksX3NlPW5ldyBXZWFrTWFwO2NsYXNzIHdzZXtjb25zdHJ1Y3RvcihsLGEsZCl7aWYodGhpcy5fJGNzc1Jlc3VsdCQ9ITAsZCE9PVRaKXRocm93IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFk''@;'; put 'put ''LiIpO3RoaXMuY3NzVGV4dD1sLHRoaXMudD1hfWdldCBzdHlsZVNoZWV0KCl7bGV0IGw9dGhpcy5vO2NvbnN0IGE9dGhpcy50O2lmKEVaJiZ2b2lkIDA9PT1sKXtjb25zdCBkPXZvaWQgMCE9PWEmJjE9PT1hLmxlbmd0aDtkJiYobD1fc2UuZ2V0KGEpKSx2b2lkIDA9PT1sJiYoKHRoaXMubz1s''@;'; put 'put ''PW5ldyBDU1NTdHlsZVNoZWV0KS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLGQmJl9zZS5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBDc2U9KGMsLi4ubCk9Pntjb25zdCBhPTE9PT1jLmxlbmd0aD9jWzBdOmwucmVkdWNlKChkLGgs''@;'; put 'put ''Zik9PmQrKHY9PntpZighMD09PXYuXyRjc3NSZXN1bHQkKXJldHVybiB2LmNzc1RleHQ7aWYoIm51bWJlciI9PXR5cGVvZiB2KXJldHVybiB2O3Rocm93IEVycm9yKCJWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogIit2KyIu''@;'; put 'put ''IFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0IHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS4iKX0pKGgpK2NbZisxXSxjWzBdKTtyZXR1cm4gbmV3IHdzZShhLGMsVFopfSxTc2U9RVo/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVT''@;'; put 'put ''aGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25zdCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgd3NlKCJzdHJpbmciPT10eXBlb2YgYz9jOmMrIiIsdm9pZCAwLFRaKSkoYSl9KShjKTpjO3ZhciBBWjtjb25zdCBrUj13aW5kb3csTXNlPWtSLnRydXN0ZWRUeXBl''@;'; put 'put ''cyxlTWU9TXNlP01zZS5lbXB0eVNjcmlwdDoiIix4c2U9a1IucmVhY3RpdmVFbGVtZW50UG9seWZpbGxTdXBwb3J0LGtaPXt0b0F0dHJpYnV0ZShjLGwpe3N3aXRjaChsKXtjYXNlIEJvb2xlYW46Yz1jP2VNZTpudWxsO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6Yz1udWxsPT1jP2M6''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoYyl9cmV0dXJuIGN9LGZyb21BdHRyaWJ1dGUoYyxsKXtsZXQgYT1jO3N3aXRjaChsKXtjYXNlIEJvb2xlYW46YT1udWxsIT09YzticmVhaztjYXNlIE51bWJlcjphPW51bGw9PT1jP251bGw6TnVtYmVyKGMpO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6dHJ5''@;'; put 'put ''e2E9SlNPTi5wYXJzZShjKX1jYXRjaHthPW51bGx9fXJldHVybiBhfX0sRXNlPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLERaPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmtaLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpFc2V9LElaPSJmaW5hbGl6ZWQiO2NsYXNzIHF5''@;'; put 'put ''IGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuXyRFaT1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRWw9bnVsbCx0aGlzLl8kRXUoKX1zdGF0aWMgYWRkSW5pdGlhbGl6ZXIobCl7dmFyIGE7dGhp''@;'; put 'put ''cy5maW5hbGl6ZSgpLChudWxsIT09KGE9dGhpcy5oKSYmdm9pZCAwIT09YT9hOnRoaXMuaD1bXSkucHVzaChsKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtjb25zdCBsPVtdO3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGEs''@;'; put 'put ''ZCk9Pntjb25zdCBoPXRoaXMuXyRFcChkLGEpO3ZvaWQgMCE9PWgmJih0aGlzLl8kRXYuc2V0KGgsZCksbC5wdXNoKGgpKX0pLGx9c3RhdGljIGNyZWF0ZVByb3BlcnR5KGwsYT1EWil7aWYoYS5zdGF0ZSYmKGEuYXR0cmlidXRlPSExKSx0aGlzLmZpbmFsaXplKCksdGhpcy5lbGVtZW50UHJv''@;'; put 'put ''cGVydGllcy5zZXQobCxhKSwhYS5ub0FjY2Vzc29yJiYhdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkobCkpe2NvbnN0IGQ9InN5bWJvbCI9PXR5cGVvZiBsP1N5bWJvbCgpOiJfXyIrbCxoPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsZCxhKTt2b2lkIDAhPT1oJiZPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsbCxoKX19c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRvcihsLGEsZCl7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoaCl7Y29uc3QgZj10aGlzW2xdO3RoaXNbYV09aCx0aGlzLnJlcXVlc3RVcGRhdGUobCxmLGQpfSxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5nZXQobCl8fERafXN0YXRpYyBmaW5hbGl6ZSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSVopKXJldHVybiExO3RoaXNbSVpdPSEwO2Nv''@;'; put 'put ''bnN0IGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKGwuZmluYWxpemUoKSx2b2lkIDAhPT1sLmgmJih0aGlzLmg9Wy4uLmwuaF0pLHRoaXMuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcChsLmVsZW1lbnRQcm9wZXJ0aWVzKSx0aGlzLl8kRXY9bmV3IE1hcCx0aGlzLmhhc093blBy''@;'; put 'put ''b3BlcnR5KCJwcm9wZXJ0aWVzIikpe2NvbnN0IGE9dGhpcy5wcm9wZXJ0aWVzLGQ9Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYSldO2Zvcihjb25zdCBoIG9mIGQpdGhpcy5jcmVhdGVQcm9wZXJ0eShoLGFbaF0pfXJl''@;'; put 'put ''dHVybiB0aGlzLmVsZW1lbnRTdHlsZXM9dGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyksITB9c3RhdGljIGZpbmFsaXplU3R5bGVzKGwpe2NvbnN0IGE9W107aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgZD1uZXcgU2V0KGwuZmxhdCgxLzApLnJldmVyc2UoKSk7Zm9yKGNvbnN0''@;'; put 'put ''IGggb2YgZClhLnVuc2hpZnQoU3NlKGgpKX1lbHNlIHZvaWQgMCE9PWwmJmEucHVzaChTc2UobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9s''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk6dm9pZCAwfV8kRXUoKXt2YXIgbDt0aGlzLl8kRV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8''@;'; put 'put ''dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRyb2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVs''@;'; put 'put ''bD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2FsbChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVj''@;'; put 'put ''dG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3Qp''@;'; put 'put ''JiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57RVo/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9y''@;'; put 'put ''RWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGg9QVIubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3Iu''@;'; put 'put ''ZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09''@;'; put 'put ''PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAw''@;'; put 'put ''PT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShkPWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1EWil7dmFyIGg7Y29u''@;'; put 'put ''c3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAhPT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3Qgdj0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmtaKS50b0F0dHJpYnV0''@;'; put 'put ''ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09dj90aGlzLnJlbW92ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLHYpLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1m''@;'; put 'put ''JiZ0aGlzLl8kRWwhPT1mKXtjb25zdCB2PWguZ2V0UHJvcGVydHlPcHRpb25zKGYpLE09ImZ1bmN0aW9uIj09dHlwZW9mIHYuY29udmVydGVyP3tmcm9tQXR0cmlidXRlOnYuY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPXYuY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5m''@;'; put 'put ''cm9tQXR0cmlidXRlKT92LmNvbnZlcnRlcjprWjt0aGlzLl8kRWw9Zix0aGlzW2ZdPU0uZnJvbUF0dHJpYnV0ZShhLHYudHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9w''@;'; put 'put ''ZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fEVzZSkodGhpc1tsXSxhKT8odGhpcy5fJEFMLmhhcyhsKXx8dGhpcy5fJEFMLnNldChsLGEpLCEwPT09ZC5yZWZsZWN0JiZ0aGlzLl8kRWwhPT1sJiYodm9pZCAwPT09dGhpcy5fJEVDJiYodGhpcy5fJEVDPW5ldyBNYXApLHRoaXMuXyRFQy5z''@;'; put 'put ''ZXQobCxkKSkpOmg9ITEpLCF0aGlzLmlzVXBkYXRlUGVuZGluZyYmaCYmKHRoaXMuXyRFXz10aGlzLl8kRWooKSl9XyRFaigpe3ZhciBsPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVj''@;'; put 'put ''dChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVsbCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRl''@;'; put 'put ''UGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVhY2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0o''@;'; put 'put ''bD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3ZhciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVr''@;'; put 'put ''KCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9''@;'; put 'put ''KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhpcy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBk''@;'; put 'put ''YXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVD''@;'; put 'put ''PXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRhdGVkKGwpe319dmFyIFJaO3F5W0laXT0hMCxxeS5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLHF5LmVsZW1lbnRTdHlsZXM9W10scXkuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSx4c2U/Lih7UmVhY3Rp''@;'; put 'put ''dmVFbGVtZW50OnF5fSksKG51bGwhPT0oQVo9a1IucmVhY3RpdmVFbGVtZW50VmVyc2lvbnMpJiZ2b2lkIDAhPT1BWj9BWjprUi5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMS42LjMiKTtjb25zdCBEUj13aW5kb3csWHk9RFIudHJ1c3RlZFR5cGVzLFRzZT1YeT9YeS5jcmVh''@;'; put 'put ''dGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDpjPT5jfSk6dm9pZCAwLElSPSIkbGl0JCIsdGc9YGxpdCQkeyhNYXRoLnJhbmRvbSgpKyIiKS5zbGljZSg5KX0kYCxMWj0iPyIrdGcsdE1lPWA8JHtMWn0+YCxZOD1kb2N1bWVudCxPTT0oKT0+WTguY3JlYXRlQ29tbWVudCgiIiksUE09''@;'; put 'put ''Yz0+bnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYyYmImZ1bmN0aW9uIiE9dHlwZW9mIGMsQXNlPUFycmF5LmlzQXJyYXksT1o9IlsgXHRcblxmXHJdIixGTT0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxEc2U9Ly0tPi9nLElzZT0vPi9n''@;'; put 'put ''LEc4PVJlZ0V4cChgPnwke09afSg/OihbXlxccyInPj0vXSspKCR7T1p9Kj0ke09afSooPzpbXiBcdFxuXGZcciInXGA8Pj1dfCgifCcpfCkpfCQpYCwiZyIpLFJzZT0vJy9nLExzZT0vIi9nLE9zZT0vXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksUHNlPWM9PihsLC4uLmEp''@;'; put 'put ''PT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSxuTWU9UHNlKDEpLHJNZT1Qc2UoMiksSnk9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksUzA9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxGc2U9bmV3IFdlYWtNYXAsJDg9WTguY3JlYXRlVHJlZVdhbGtlcihZOCwxMjks''@;'; put 'put ''bnVsbCwhMSk7ZnVuY3Rpb24gSHNlKGMsbCl7aWYoIUFycmF5LmlzQXJyYXkoYyl8fCFjLmhhc093blByb3BlcnR5KCJyYXciKSl0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7cmV0dXJuIHZvaWQgMCE9PVRzZT9Uc2UuY3JlYXRlSFRNTChsKTpsfWNsYXNz''@;'; put 'put ''IEhNe2NvbnN0cnVjdG9yKHtzdHJpbmdzOmwsXyRsaXRUeXBlJDphfSxkKXtsZXQgaDt0aGlzLnBhcnRzPVtdO2xldCBmPTAsdj0wO2NvbnN0IE09bC5sZW5ndGgtMSxJPXRoaXMucGFydHMsW0csaWVdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxz''@;'; put 'put ''dmc+IjoiIix2PUZNO2ZvcihsZXQgTT0wO008YTtNKyspe2NvbnN0IEk9Y1tNXTtsZXQgRyxpZSx1ZT0tMSx5ZT0wO2Zvcig7eWU8SS5sZW5ndGgmJih2Lmxhc3RJbmRleD15ZSxpZT12LmV4ZWMoSSksbnVsbCE9PWllKTspeWU9di5sYXN0SW5kZXgsdj09PUZNPyIhLS0iPT09aWVbMV0/dj1E''@;'; put 'put ''c2U6dm9pZCAwIT09aWVbMV0/dj1Jc2U6dm9pZCAwIT09aWVbMl0/KE9zZS50ZXN0KGllWzJdKSYmKGg9UmVnRXhwKCI8LyIraWVbMl0sImciKSksdj1HOCk6dm9pZCAwIT09aWVbM10mJih2PUc4KTp2PT09Rzg/Ij4iPT09aWVbMF0/KHY9aD8/Rk0sdWU9LTEpOnZvaWQgMD09PWllWzFdP3Vl''@;'; put 'put ''PS0yOih1ZT12Lmxhc3RJbmRleC1pZVsyXS5sZW5ndGgsRz1pZVsxXSx2PXZvaWQgMD09PWllWzNdP0c4OiciJz09PWllWzNdP0xzZTpSc2UpOnY9PT1Mc2V8fHY9PT1Sc2U/dj1HODp2PT09RHNlfHx2PT09SXNlP3Y9Rk06KHY9RzgsaD12b2lkIDApO2NvbnN0IEVlPXY9PT1HOCYmY1tNKzFd''@;'; put 'put ''LnN0YXJ0c1dpdGgoIi8+Iik/IiAiOiIiO2YrPXY9PT1GTT9JK3RNZTp1ZT49MD8oZC5wdXNoKEcpLEkuc2xpY2UoMCx1ZSkrSVIrSS5zbGljZSh1ZSkrdGcrRWUpOkkrdGcrKC0yPT09dWU/KGQucHVzaCh2b2lkIDApLE0pOkVlKX1yZXR1cm5bSHNlKGMsZisoY1thXXx8Ijw/PiIpKygyPT09''@;'; put 'put ''bD8iPC9zdmc+IjoiIikpLGRdfSkobCxhKTtpZih0aGlzLmVsPUhNLmNyZWF0ZUVsZW1lbnQoRyxkKSwkOC5jdXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHVlPXRoaXMuZWwuY29udGVudCx5ZT11ZS5maXJzdENoaWxkO3llLnJlbW92ZSgpLHVlLmFwcGVuZCguLi55''@;'; put 'put ''ZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD0kOC5uZXh0Tm9kZSgpKSYmSS5sZW5ndGg8TTspe2lmKDE9PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3QgdWU9W107Zm9yKGNvbnN0IHllIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZih5ZS5lbmRzV2l0aChJ''@;'; put 'put ''Uil8fHllLnN0YXJ0c1dpdGgodGcpKXtjb25zdCBFZT1pZVt2KytdO2lmKHVlLnB1c2goeWUpLHZvaWQgMCE9PUVlKXtjb25zdCBqZT1oLmdldEF0dHJpYnV0ZShFZS50b0xvd2VyQ2FzZSgpK0lSKS5zcGxpdCh0ZykscWU9LyhbLj9AXSk/KC4qKS8uZXhlYyhFZSk7SS5wdXNoKHt0eXBlOjEs''@;'; put 'put ''aW5kZXg6ZixuYW1lOnFlWzJdLHN0cmluZ3M6amUsY3RvcjoiLiI9PT1xZVsxXT9Cc2U6Ij8iPT09cWVbMV0/anNlOiJAIj09PXFlWzFdP3pzZTpOTX0pfWVsc2UgSS5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCB5ZSBvZiB1ZSloLnJlbW92ZUF0dHJpYnV0ZSh5ZSl9aWYoT3Nl''@;'; put 'put ''LnRlc3QoaC50YWdOYW1lKSl7Y29uc3QgdWU9aC50ZXh0Q29udGVudC5zcGxpdCh0ZykseWU9dWUubGVuZ3RoLTE7aWYoeWU+MCl7aC50ZXh0Q29udGVudD1YeT9YeS5lbXB0eVNjcmlwdDoiIjtmb3IobGV0IEVlPTA7RWU8eWU7RWUrKyloLmFwcGVuZCh1ZVtFZV0sT00oKSksJDgubmV4dE5v''@;'; put 'put ''ZGUoKSxJLnB1c2goe3R5cGU6MixpbmRleDorK2Z9KTtoLmFwcGVuZCh1ZVt5ZV0sT00oKSl9fX1lbHNlIGlmKDg9PT1oLm5vZGVUeXBlKWlmKGguZGF0YT09PUxaKUkucHVzaCh7dHlwZToyLGluZGV4OmZ9KTtlbHNle2xldCB1ZT0tMTtmb3IoOy0xIT09KHVlPWguZGF0YS5pbmRleE9mKHRn''@;'; put 'put ''LHVlKzEpKTspSS5wdXNoKHt0eXBlOjcsaW5kZXg6Zn0pLHVlKz10Zy5sZW5ndGgtMX1mKyt9fXN0YXRpYyBjcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1ZOC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBkLmlubmVySFRNTD1sLGR9fWZ1bmN0aW9uIEs4KGMsbCxhPWMsZCl7''@;'; put 'put ''dmFyIGgsZix2LE07aWYobD09PUp5KXJldHVybiBsO2xldCBJPXZvaWQgMCE9PWQ/bnVsbD09PShoPWEuXyRDbyl8fHZvaWQgMD09PWg/dm9pZCAwOmhbZF06YS5fJENsO2NvbnN0IEc9UE0obCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBJPy5jb25zdHJ1Y3RvciE9PUcmJihu''@;'; put 'put ''dWxsPT09KGY9ST8uXyRBTyl8fHZvaWQgMD09PWZ8fGYuY2FsbChJLCExKSx2b2lkIDA9PT1HP0k9dm9pZCAwOihJPW5ldyBHKGMpLEkuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0odj0oTT1hKS5fJENvKSYmdm9pZCAwIT09dj92Ok0uXyRDbz1bXSlbZF09STphLl8kQ2w9SSks''@;'; put 'put ''dm9pZCAwIT09SSYmKGw9SzgoYyxJLl8kQVMoYyxsLnZhbHVlcyksSSxkKSksbH1jbGFzcyBWc2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLl8kQVY9W10sdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUQ9bCx0aGlzLl8kQU09YX1nZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLl8kQU0ucGFy''@;'; put 'put ''ZW50Tm9kZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX11KGwpe3ZhciBhO2NvbnN0e2VsOntjb250ZW50OmR9LHBhcnRzOmh9PXRoaXMuXyRBRCxmPShudWxsIT09KGE9bD8uY3JlYXRpb25TY29wZSkmJnZvaWQgMCE9PWE/YTpZOCkuaW1wb3J0Tm9kZShkLCEwKTskOC5jdXJy''@;'; put 'put ''ZW50Tm9kZT1mO2xldCB2PSQ4Lm5leHROb2RlKCksTT0wLEk9MCxHPWhbMF07Zm9yKDt2b2lkIDAhPT1HOyl7aWYoTT09PUcuaW5kZXgpe2xldCBpZTsyPT09Ry50eXBlP2llPW5ldyBReSh2LHYubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09Ry50eXBlP2llPW5ldyBHLmN0b3IodixHLm5hbWUs''@;'; put 'put ''Ry5zdHJpbmdzLHRoaXMsbCk6Nj09PUcudHlwZSYmKGllPW5ldyBVc2Uodix0aGlzLGwpKSx0aGlzLl8kQVYucHVzaChpZSksRz1oWysrSV19TSE9PUc/LmluZGV4JiYodj0kOC5uZXh0Tm9kZSgpLE0rKyl9cmV0dXJuICQ4LmN1cnJlbnROb2RlPVk4LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8kQUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIFF5e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1T''@;'; put 'put ''MCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1kLHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0o''@;'; put 'put ''bD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihs''@;'; put 'put ''PWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1LOCh0aGlzLGwsYSksUE0obCk/bD09PVMwfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PVMwJiZ0aGlzLl8k''@;'; put 'put ''QVIoKSx0aGlzLl8kQUg9UzApOmwhPT10aGlzLl8kQUgmJmwhPT1KeSYmdGhpcy5fKGwpOnZvaWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PkFzZShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGM/LltTeW1ib2wuaXRlcmF0b3Jd''@;'; put 'put ''KShsKT90aGlzLlQobCk6dGhpcy5fKGwpfWsobCl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLHRoaXMuXyRBQil9JChsKXt0aGlzLl8kQUghPT1sJiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMuayhsKSl9XyhsKXt0aGlzLl8kQUghPT1TMCYmUE0odGhp''@;'; put 'put ''cy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT1sOnRoaXMuJChZOC5jcmVhdGVUZXh0Tm9kZShsKSksdGhpcy5fJEFIPWx9ZyhsKXt2YXIgYTtjb25zdHt2YWx1ZXM6ZCxfJGxpdFR5cGUkOmh9PWwsZj0ibnVtYmVyIj09dHlwZW9mIGg/dGhpcy5fJEFDKGwpOih2b2lkIDA9PT1o''@;'; put 'put ''LmVsJiYoaC5lbD1ITS5jcmVhdGVFbGVtZW50KEhzZShoLmgsaC5oWzBdKSx0aGlzLm9wdGlvbnMpKSxoKTtpZigobnVsbD09PShhPXRoaXMuXyRBSCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuXyRBRCk9PT1mKXRoaXMuXyRBSC52KGQpO2Vsc2V7Y29uc3Qgdj1uZXcgVnNlKGYsdGhpcyksTT12''@;'; put 'put ''LnUodGhpcy5vcHRpb25zKTt2LnYoZCksdGhpcy4kKE0pLHRoaXMuXyRBSD12fX1fJEFDKGwpe2xldCBhPUZzZS5nZXQobC5zdHJpbmdzKTtyZXR1cm4gdm9pZCAwPT09YSYmRnNlLnNldChsLnN0cmluZ3MsYT1uZXcgSE0obCkpLGF9VChsKXtBc2UodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1b''@;'; put 'put ''XSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwpaD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBReSh0aGlzLmsoT00oKSksdGhpcy5rKE9NKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0''@;'; put 'put ''aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRoaXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7''@;'; put 'put ''KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIgYTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBOTXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1TMCx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5n''@;'; put 'put ''dGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPVMwfWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5n''@;'; put 'put ''cztsZXQgdj0hMTtpZih2b2lkIDA9PT1mKWw9SzgodGhpcyxsLGEsMCksdj0hUE0obCl8fGwhPT10aGlzLl8kQUgmJmwhPT1KeSx2JiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgTT1sO2xldCBJLEc7Zm9yKGw9ZlswXSxJPTA7STxmLmxlbmd0aC0xO0krKylHPUs4KHRoaXMsTVtkK0ldLGEs''@;'; put 'put ''SSksRz09PUp5JiYoRz10aGlzLl8kQUhbSV0pLHZ8fCh2PSFQTShHKXx8RyE9PXRoaXMuXyRBSFtJXSksRz09PVMwP2w9UzA6bCE9PVMwJiYobCs9KEc/PyIiKStmW0krMV0pLHRoaXMuXyRBSFtJXT1HfXYmJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09UzA/dGhpcy5lbGVtZW50LnJlbW92ZUF0''@;'; put 'put ''dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGw/PyIiKX19Y2xhc3MgQnNlIGV4dGVuZHMgTk17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWoobCl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09bD09PVMw''@;'; put 'put ''P3ZvaWQgMDpsfX1jb25zdCBpTWU9WHk/WHkuZW1wdHlTY3JpcHQ6IiI7Y2xhc3MganNlIGV4dGVuZHMgTk17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT00fWoobCl7bCYmbCE9PVMwP3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGlNZSk6''@;'; put 'put ''dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpfX1jbGFzcyB6c2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPUs4KHRoaXMsbCxhLDAp''@;'; put 'put ''KSYmdm9pZCAwIT09ZD9kOlMwKT09PUp5KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9PT1TMCYmaCE9PVMwfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLHY9bCE9PVMwJiYoaD09PVMwfHxmKTtmJiZ0aGlzLmVsZW1l''@;'; put 'put ''bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSx2JiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFI''@;'; put 'put ''LmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgVXNle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmVsZW1lbnQ9''@;'; put 'put ''bCx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1hLHRoaXMub3B0aW9ucz1kfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCl7SzgodGhpcyxsKX19Y29uc3QgWnNlPURSLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7dmFyIFBaLEZaO1pzZT8uKEhN''@;'; put 'put ''LFF5KSwobnVsbCE9PShSWj1EUi5saXRIdG1sVmVyc2lvbnMpJiZ2b2lkIDAhPT1SWj9SWjpEUi5saXRIdG1sVmVyc2lvbnM9W10pLnB1c2goIjIuOC4wIik7Y2xhc3MgVk0gZXh0ZW5kcyBxeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZW5kZXJPcHRpb25zPXto''@;'; put 'put ''b3N0OnRoaXN9LHRoaXMuXyREbz12b2lkIDB9Y3JlYXRlUmVuZGVyUm9vdCgpe3ZhciBsLGE7Y29uc3QgZD1zdXBlci5jcmVhdGVSZW5kZXJSb290KCk7cmV0dXJuIG51bGwhPT0obD0oYT10aGlzLnJlbmRlck9wdGlvbnMpLnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWx8fChhLnJlbmRlckJl''@;'; put 'put ''Zm9yZT1kLmZpcnN0Q2hpbGQpLGR9dXBkYXRlKGwpe2NvbnN0IGE9dGhpcy5yZW5kZXIoKTt0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLnJlbmRlck9wdGlvbnMuaXNDb25uZWN0ZWQ9dGhpcy5pc0Nvbm5lY3RlZCksc3VwZXIudXBkYXRlKGwpLHRoaXMuXyREbz0oKGMsbCxhKT0+e3ZhciBkLGg7''@;'; put 'put ''Y29uc3QgZj1udWxsIT09KGQ9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09ZD9kOmw7bGV0IHY9Zi5fJGxpdFBhcnQkO2lmKHZvaWQgMD09PXYpe2NvbnN0IE09bnVsbCE9PShoPWE/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWg/aDpudWxsO2YuXyRsaXRQYXJ0JD12PW5ldyBReShsLmlu''@;'; put 'put ''c2VydEJlZm9yZShPTSgpLE0pLE0sdm9pZCAwLGE/P3t9KX1yZXR1cm4gdi5fJEFJKGMpLHZ9KShhLHRoaXMucmVuZGVyUm9vdCx0aGlzLnJlbmRlck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERv''@;'; put 'put ''KXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERvKXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBKeX19''@;'; put 'put ''Vk0uZmluYWxpemVkPSEwLFZNLl8kbGl0RWxlbWVudCQ9ITAsbnVsbD09PShQWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRyYXRlU3VwcG9ydCl8fHZvaWQgMD09PVBafHxQWi5jYWxsKGdsb2JhbFRoaXMse0xpdEVsZW1lbnQ6Vk19KTtjb25zdCBXc2U9Z2xvYmFsVGhpcy5saXRFbGVtZW50''@;'; put 'put ''UG9seWZpbGxTdXBwb3J0O1dzZT8uKHtMaXRFbGVtZW50OlZNfSksKG51bGwhPT0oRlo9Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVyc2lvbnMpJiZ2b2lkIDAhPT1GWj9GWjpnbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMy4zLjMiKTtjb25zdCBzTWU9Q3NlYEBjaGFy''@;'; put 'put ''c2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAv''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAq''@;'; put 'put ''IDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNh''@;'; put 'put ''bGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxheW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRl''@;'; put 'put ''bXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7Zmxl''@;'; put 'put ''eC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJl''@;'; put 'put ''dGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1jb250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRl''@;'; put 'put ''bnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpz''@;'; put 'put ''dHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50''@;'; put 'put ''OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXtt''@;'; put 'put ''YXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6''@;'; put 'put ''bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGlj''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0g''@;'; put 'put ''OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp''@;'; put 'put ''YSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn''@;'; put 'put ''aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1j''@;'; put 'put ''ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xv''@;'; put 'put ''dHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFy''@;'; put 'put ''Z2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0''@;'; put 'put ''aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0''@;'; put 'put ''bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXth''@;'; put 'put ''bGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6''@;'; put 'put ''Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwt''@;'; put 'put ''Y2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVy''@;'; put 'put ''Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNl''@;'; put 'put ''bnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50''@;'; put 'put ''ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0g''@;'; put 'put ''OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRp''@;'; put 'put ''Y2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9u''@;'; put 'put ''dGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpm''@;'; put 'put ''bGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQi''@;'; put 'put ''XSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdo''@;'; put 'put ''dCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''eGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtt''@;'; put 'put ''YXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQq''@;'; put 'put ''PXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAw''@;'; put 'put ''LHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdo''@;'; put 'put ''dDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSAr''@;'; put 'put ''IC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAy''@;'; put 'put ''KSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5n''@;'; put 'put ''LC0uMDA4MzMzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxj''@;'; put 'put ''KCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkg''@;'; put 'put ''KyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4zMzMzMzNlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNp''@;'; put 'put ''emUsY2FsYygyMCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCwxLjJlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcsLS4wMWVtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1zZWN0aW9uXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1b''@;'; put 'put ''Y2RzLXRleHQqPXN1YnNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNp''@;'; put 'put ''bmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxj''@;'; put 'put ''KCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4t''@;'; put 'put ''dG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwu''@;'; put 'put ''NTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9u''@;'; put 'put ''dC13ZWlnaHQsNDAwKTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplLGNhbGMoMTQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nLC0uMDA3MTQyODZlbSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1NzE0ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjFlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1ib2R5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVt''@;'; put 'put ''KX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50Om5vbmV9W2Nkcy10ZXh0Kj1tZXNzYWdlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0LGNhbGMoNDAwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkq''@;'; put 'put ''LTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPW1lc3NhZ2VdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFl''@;'; put 'put ''bSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUsY2FsYygxMyAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCw0MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nLC0uMDA3NjkyZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2Fw''@;'; put 'put ''LWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2Nr''@;'; put 'put ''O2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0LDEuMjMwNzdlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsIzAwNzlhZCkpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSxIaWdobGlnaHQgc29saWQgMnB4KTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0''@;'; put 'put ''LDFweCl9W2Nkcy10ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwLCMwMDYwOGEpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2Rz''@;'; put 'put ''LXRleHR+PXN0YXRpY10pe2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci02MDAsIzNiNDBjZSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49''@;'; put 'put ''c3RhdGljXSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCwjMjQyOWMyKSkhaW1wb3J0YW50fUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJh''@;'; put 'put ''dGlvOjApe1tjZHMtdGV4dD1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS13ZWJraXQsNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yKX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzouMDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdp''@;'; put 'put ''bi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5z''@;'; put 'put ''LXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoi''@;'; put 'put ''IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1o''@;'; put 'put ''ZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVy''@;'; put 'put ''LXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMo''@;'; put 'put ''KDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln''@;'; put 'put ''aHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHth''@;'; put 'put ''bGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJpdDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFy''@;'; put 'put ''aXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0''@;'; put 'put ''ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVk''@;'; put 'put ''KCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxv''@;'; put 'put ''Z11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlk''@;'; put 'put ''ZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMp''@;'; put 'put ''IFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9jdXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''b3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIEhaKGMpe3JldHVybmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y2xhc3MgZE1le2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVuc3Vic2NyaWJlKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19Y29uc3QgTlo9bmV3IGNsYXNzIGhNZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3Vic2NyaXB0aW9ucz1bXX1zdWJzY3JpYmUobCl7Y29uc3QgYT1uZXcgZE1l''@;'; put 'put ''KGwsdGhpcy5zdWJzY3JpcHRpb25zKTtyZXR1cm4gdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYSksYX1lbWl0KGwpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEuZm4obCkpfXRvRXZlbnRPYnNlcnZhYmxlKCl7cmV0dXJuIHRoaXN9fTtOWi5saXN0ZW5lcj1kb2N1bWVudC5hZGRF''@;'; put 'put ''dmVudExpc3RlbmVyKCJDRFNfU1RBVEVfVVBEQVRFIixjPT5OWi5lbWl0KGMuZGV0YWlsKSk7Y2xhc3MgWmZ7c3RhdGljIGdldCBzdGF0ZSgpe3JldHVybiB1c2UoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0aWMgZ2V0VmFsdWUobCl7cmV0dXJuIFpmLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1''@;'; put 'put ''ZShsLGEpe1pmLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0xNLmxvZyhKU09OLnN0cmluZ2lmeShaZi5zdGF0ZSxudWxsLDIpKX19WmYuc3RhdGVVcGRhdGVzPU5aLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29uc3QgZk1lPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYh''@;'; put 'put ''KCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXksYyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMpKX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LHBNZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlv''@;'; put 'put ''biBZc2UoYyl7cmV0dXJuKGwsYSk9PnZvaWQgMCE9PWE/cE1lKGMsbCxhKTpmTWUoYyxsKX1mdW5jdGlvbiBLc2UoYyxsKXtzd2l0Y2gobCYmbC50eXBlKXtjYXNlIEFycmF5OmNhc2UgT2JqZWN0OnJldHVybntyZWZsZWN0OiExLC4uLmx9O2Nhc2UgU3RyaW5nOnJldHVybntyZWZsZWN0OiEw''@;'; put 'put ''LGF0dHJpYnV0ZTpXOChjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmF8fG51bGx9LC4uLmx9O2Nhc2UgTnVtYmVyOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpXOChjKSwuLi5sfTtjYXNlIEJvb2xlYW46cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlc4KGMpLGNvbnZlcnRl''@;'; put 'put ''cjp7dG9BdHRyaWJ1dGU6YT0+YT8iIjpudWxsLGZyb21BdHRyaWJ1dGU6YT0+ZnVuY3Rpb24gYk1lKGMpe3JldHVybiBudWxsIT1jJiYiIitjIT0iZmFsc2UifShhKX0sLi4ubH07Y2FzZSBEYXRlOnJldHVybntyZWZsZWN0OiExLGNvbnZlcnRlcjp7ZnJvbUF0dHJpYnV0ZTphPT5uZXcgRGF0''@;'; put 'put ''ZShhKX0sLi4ubH07ZGVmYXVsdDpyZXR1cm57Li4ubH19fWZ1bmN0aW9uIGltKGMpe3JldHVybihsLGEpPT4oYz8ucmVxdWlyZWQmJmZ1bmN0aW9uIF9NZShjLGwsYSl7Y29uc3QgZD1jLmZpcnN0VXBkYXRlZDtjLmZpcnN0VXBkYXRlZD1mdW5jdGlvbihoKXtpZihhJiZhLnJlcXVpcmVkJiZS''@;'; put 'put ''TSh0aGlzW2xdKSl7Y29uc3QgZj1hLnJlcXVpcmVkTWVzc2FnZXx8ZnVuY3Rpb24odj0id2FybmluZyIsTSxJKXtjb25zdCBHPUkudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm5gJHtzc2Uodil9OiAke019IGlzIHJlcXVpcmVkIHRvIHVzZSAke0d9IGNvbXBvbmVudC4gU2V0IHRoZSBKUyBQ''@;'; put 'put ''cm9wZXJ0eSBvciBIVE1MIEF0dHJpYnV0ZS5cblxuYCsobnNlKCk/YEFuZ3VsYXI6IDwke0d9IFske019XT0iLi4uIj48LyR7R30+XG5gOiIiKSsoaXNlKCk/YFZ1ZTogPCR7R30gOiR7TX09Ii4uLiI+PC8ke0d9PlxuYDoiIikrKHJzZSgpP2BSZWFjdDogPCR7ZnVuY3Rpb24gYlNlKGMpe3Jl''@;'; put 'put ''dHVybiBzc2UoZnVuY3Rpb24geVNlKGMpe3JldHVybiBjLnNwbGl0KCItIikubWFwKChsLGEpPT5hP2wuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpOmwpLmpvaW4oIiIpfShjKSl9KEcpfSAke2llPU0saWUuc3RhcnRzV2l0aCgiYXJpYSIpP1c4KGll''@;'; put 'put ''KTppZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtHfSAke1c4KE0pfT0iLi4uIj48LyR7R30+XG5KYXZhU2NyaXB0OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcke0d9JykuJHtNfSA9ICcuLi4nO1xuXG5gO3ZhciBpZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9y''@;'; put 'put ''Ij09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7TE0ud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgpfX0obCxhLGMpLFlzZShLc2UoYSxjKSkobCxhKSl9dmFyIE1NZT1Dc2VgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0''@;'; put 'put ''ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3IpO2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14''@;'; put 'put ''bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtz''@;'; put 'put ''aXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkp''@;'; put 'put ''O3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0''@;'; put 'put ''OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWln''@;'; put 'put ''aHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7''@;'; put 'put ''LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGly''@;'; put 'put ''ZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpy''@;'; put 'put ''b3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2Ut''@;'; put 'put ''Y29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDApKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRn''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRn''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhv''@;'; put 'put ''c3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdl''@;'; put 'put ''LWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246''@;'; put 'put ''ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91''@;'; put 'put ''dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1pbnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2NvbnN0IHhNZT1bInVua25vd24iLHtvdXRsaW5lOic8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTMiIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMiIgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMSIgY3g9IjQuOSIgY3k9IjE4''@;'; put 'put ''IiByPSIyLjkiLz4nfV07Y2xhc3MgVHN7c3RhdGljIGdldCByZWdpc3RyeSgpe3JldHVybnt1bmtub3duOnhNZVsxXSwuLi5aZi5zdGF0ZS5pY29uUmVnaXN0cnl9fXN0YXRpYyBhZGRJY29ucyguLi5sKXtaZi5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLlpmLnN0YXRlLmljb25SZWdpc3RyeSwu''@;'; put 'put ''Li5PYmplY3QuZnJvbUVudHJpZXMobC5maWx0ZXIoKFthXSk9PiFUcy5yZWdpc3RyeVthXSkpfX1zdGF0aWMgYWRkQWxpYXNlcyguLi5sKXtjb25zdCBhPWwuZmlsdGVyKChbZF0pPT5Ucy5yZWdpc3RyeVtkXSkuZmxhdE1hcCgoW2QsaF0pPT5oLm1hcChmPT5bZixUcy5yZWdpc3RyeVtkXV0p''@;'; put 'put ''KTtaZi5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLlpmLnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMoYSl9fXN0YXRpYyBnZXRJY29uTmFtZUZyb21TaGFwZShsKXtyZXR1cm4gbFswXX19dmFyIGRwLGM7ZnVuY3Rpb24ga01lKGMsbCl7bGV0IGE9IiI7c3dpdGNoKGZ1''@;'; put 'put ''bmN0aW9uIEVNZShjKXtzd2l0Y2goITApe2Nhc2UgUk0oYyk6cmV0dXJuIGRwLk5pbFNpemVWYWx1ZTtjYXNlIGZ1bmN0aW9uIHFzZShjKXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gZHAuVmFsaWRTaXplU3Ry''@;'; put 'put ''aW5nO2Nhc2UgZnVuY3Rpb24gR29lKGMpe3JldHVybiBnWihjKSYmIVlvZShjLnRyaW0oKSkmJitjPT0rY30oYyk6cmV0dXJuIGRwLlZhbGlkTnVtZXJpY1N0cmluZztkZWZhdWx0OnJldHVybiBkcC5CYWRTaXplVmFsdWV9fShmdW5jdGlvbiBUTWUoYyl7cmV0dXJuIFJNKGMpPyIiOmZ1bmN0''@;'; put 'put ''aW9uIF9TZShjLGwsYT0iIil7Y29uc3QgZD1jLnNwbGl0KCIgIiksaD0iIj09PWE/ZC5maWx0ZXIoZj0+ZiE9PWwpOmQubWFwKGY9PmY9PT1sP2E6Zik7cmV0dXJuIGgubGVuZ3RoPjA/aC5qb2luKCIgIik6IiJ9KGMsImZpdCIpfShsKSkpe2Nhc2UgZHAuVmFsaWROdW1lcmljU3RyaW5nOnJl''@;'; put 'put ''dHVybiBhPUhaKHBhcnNlSW50KGwpKSx2b2lkIGZ1bmN0aW9uIGNNZShjLC4uLmwpe2wuZm9yRWFjaCgoW2EsZF0pPT57Yy5zdHlsZVthXT1kfSl9KGMsLi4uZnVuY3Rpb24gQU1lKGMsbCl7cmV0dXJuIUlNKGMpJiZjLmluZGV4T2YoImZpdCIpPi0xP1tbIndpZHRoIiwiYXV0byJdLFsiaGVp''@;'; put 'put ''Z2h0IiwiYXV0byJdLFsibWluLXdpZHRoIixsXSxbIm1pbi1oZWlnaHQiLGxdXTpbWyJ3aWR0aCIsbF0sWyJoZWlnaHQiLGxdLFsibWluLXdpZHRoIixsXSxbIm1pbi1oZWlnaHQiLGxdXX0obCxhKSk7Y2FzZSBkcC5WYWxpZFNpemVTdHJpbmc6Y2FzZSBkcC5OaWxTaXplVmFsdWU6cmV0dXJu''@;'; put 'put ''IHZvaWQgZnVuY3Rpb24gdU1lKGMsLi4ubCl7bC5mb3JFYWNoKGE9PntjLnN0eWxlW2FdPSIifSl9KGMsIndpZHRoIiwiaGVpZ2h0IiwibWluLXdpZHRoIiwibWluLWhlaWdodCIpO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBWWihjKXtyZXR1cm4gYy5iYWRnZSYmKCJpbmhlcml0LXRyaWFu''@;'; put 'put ''Z2xlIj09PWMuYmFkZ2V8fCJ3YXJuaW5nLXRyaWFuZ2xlIj09PWMuYmFkZ2UpfShjPWRwfHwoZHA9e30pKS5CYWRTaXplVmFsdWU9ImJhZC12YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMu''@;'; put 'put ''TmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwiO2NsYXNzIFdmIGV4dGVuZHMgVk17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3NoYXBlPSJ1bmtub3duIix0aGlzLnNvbGlkPSExLHRoaXMuaW52ZXJzZT0hMX1zdGF0aWMgZ2V0IHN0eWxlcygpe3JldHVybltzTWUs''@;'; put 'put ''TU1lXX1nZXQgc2hhcGUoKXtyZXR1cm4gdGhpcy5fc2hhcGV9c2V0IHNoYXBlKGwpe2lmKGZ1bmN0aW9uIGVTZShjLGwpe3JldHVybiFSTShjKSYmS29lKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJz''@;'; put 'put ''aGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gUUNlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIEpDZShjKXtyZXR1cm4gUG9lKFN0cmluZyxjKXx8SU0oYyl9KGMpJiZLb2UoYyxsKX0obCx0aGlzLl9zaXplKSl7Y29uc3QgYT10aGlz''@;'; put 'put ''Ll9zaXplO3RoaXMuX3NpemU9bCxrTWUodGhpcyxsKSx0aGlzLnJlcXVlc3RVcGRhdGUoInNpemUiLGEpfX11cGRhdGVkKGwpe2lmKGwuaGFzKCJpbm5lck9mZnNldCIpJiZ0aGlzLmlubmVyT2Zmc2V0PjApe2NvbnN0IGE9SFooLTEqdGhpcy5pbm5lck9mZnNldCksZD1gY2FsYygxMDAlICsg''@;'; put 'put ''JHtIWigyKnRoaXMuaW5uZXJPZmZzZXQpfSlgO3RoaXMuc3ZnLnN0eWxlLndpZHRoPWQsdGhpcy5zdmcuc3R5bGUuaGVpZ2h0PWQsdGhpcy5zdmcuc3R5bGUubWFyZ2luPWAke2F9IDAgMCAke2F9YH19Zmlyc3RVcGRhdGVkKGwpe2lmKHN1cGVyLmZpcnN0VXBkYXRlZChsKSx0aGlzLmlzQ29u''@;'; put 'put ''bmVjdGVkKXtsZXQgYT0idW5rbm93biI7dGhpcy5zdWJzY3JpcHRpb249WmYuc3RhdGVVcGRhdGVzLnN1YnNjcmliZShkPT57Imljb25SZWdpc3RyeSI9PT1kLmtleSYmVHMucmVnaXN0cnlbdGhpcy5zaGFwZV0mJmEhPT10aGlzLnNoYXBlJiYoYT10aGlzLnNoYXBlLHRoaXMucmVxdWVzdFVw''@;'; put 'put ''ZGF0ZSgic2hhcGUiKSl9KX19ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXJlbmRlcigpe3JldHVybiBnWihUcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSk/bk1lYDxzcGFuIC5pbm5lckhU''@;'; put 'put ''TUw9IiR7VHMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpyTWVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9uIElNZShjKXtjb25zdCBsPVRzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Ucy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91''@;'; put 'put ''dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiFWWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdlZD8/YSksVlooYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gRE1lKGMpe2xldCBs''@;'; put 'put ''PSIiO3JldHVybiBjLmJhZGdlJiZWWihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAwMDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdl''@;'; put 'put ''JiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fWZ1bmN0aW9uIEJNKGMpe3Jl''@;'; put 'put ''dHVybiEhYyYmKGMgaW5zdGFuY2VvZiBYdHx8JGUoYy5saWZ0KSYmJGUoYy5zdWJzY3JpYmUpKX1VZihbaW0oe3R5cGU6U3RyaW5nfSldLFdmLnByb3RvdHlwZSwic2hhcGUiLG51bGwpLFVmKFtpbSh7dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJzaXplIixudWxsKSxVZihbaW0oe3R5''@;'; put 'put ''cGU6U3RyaW5nfSldLFdmLnByb3RvdHlwZSwiZGlyZWN0aW9uIix2b2lkIDApLFVmKFtpbSh7dHlwZTpTdHJpbmd9KV0sV2YucHJvdG90eXBlLCJmbGlwIix2b2lkIDApLFVmKFtpbSh7dHlwZTpCb29sZWFufSldLFdmLnByb3RvdHlwZSwic29saWQiLHZvaWQgMCksVWYoW2ltKHt0eXBlOlN0''@;'; put 'put ''cmluZ30pXSxXZi5wcm90b3R5cGUsInN0YXR1cyIsdm9pZCAwKSxVZihbaW0oe3R5cGU6Qm9vbGVhbn0pXSxXZi5wcm90b3R5cGUsImludmVyc2UiLHZvaWQgMCksVWYoW2ltKHt0eXBlOlN0cmluZ30pXSxXZi5wcm90b3R5cGUsImJhZGdlIix2b2lkIDApLFVmKFtmdW5jdGlvbiB3TWUoYyl7''@;'; put 'put ''cmV0dXJuKGwsYSk9Pntjb25zdCBkPUtzZShhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitXOChhKSkpLFlzZShkKShsLGEpfX0oe3R5cGU6TnVtYmVyfSldLFdmLnByb3Rv''@;'; put 'put ''dHlwZSwiaW5uZXJPZmZzZXQiLHZvaWQgMCksVWYoW2Z1bmN0aW9uIFNNZShjLGwpe3JldHVybigoe2ZpbmlzaGVyOmMsZGVzY3JpcHRvcjpsfSk9PihhLGQpPT57dmFyIGg7aWYodm9pZCAwPT09ZCl7Y29uc3QgZj1udWxsIT09KGg9YS5vcmlnaW5hbEtleSkmJnZvaWQgMCE9PWg/aDphLmtl''@;'; put 'put ''eSx2PW51bGwhPWw/e2tpbmQ6Im1ldGhvZCIscGxhY2VtZW50OiJwcm90b3R5cGUiLGtleTpmLGRlc2NyaXB0b3I6bChhLmtleSl9OnsuLi5hLGtleTpmfTtyZXR1cm4gbnVsbCE9YyYmKHYuZmluaXNoZXI9ZnVuY3Rpb24oTSl7YyhNLGYpfSksdn17Y29uc3QgZj1hLmNvbnN0cnVjdG9yO3Zv''@;'; put 'put ''aWQgMCE9PWwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQsbChkKSksYz8uKGYsZCl9fSkoe2Rlc2NyaXB0b3I6YT0+e2NvbnN0IGQ9e2dldCgpe3ZhciBoLGY7cmV0dXJuIG51bGwhPT0oZj1udWxsPT09KGg9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09aD92b2lkIDA6aC5xdWVyeVNl''@;'; put 'put ''bGVjdG9yKGMpKSYmdm9pZCAwIT09Zj9mOm51bGx9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtpZihsKXtjb25zdCBoPSJzeW1ib2wiPT10eXBlb2YgYT9TeW1ib2woKToiX18iK2E7ZC5nZXQ9ZnVuY3Rpb24oKXt2YXIgZix2O3JldHVybiB2b2lkIDA9PT10aGlzW2hdJiYodGhp''@;'; put 'put ''c1toXT1udWxsIT09KHY9bnVsbD09PShmPXRoaXMucmVuZGVyUm9vdCl8fHZvaWQgMD09PWY/dm9pZCAwOmYucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PXY/djpudWxsKSx0aGlzW2hdfX1yZXR1cm4gZH19KX0oInN2ZyIpXSxXZi5wcm90b3R5cGUsInN2ZyIsdm9pZCAwKSxmdW5jdGlv''@;'; put 'put ''biB4U2UoYyxsKXtRb2UoKSYmZXNlKFsiY3VzdG9tRWxlbWVudHMiXSkmJk1TZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX0oImNkcy1pY29uIixXZik7Y29uc3QgQlo9Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVuY3Rpb24gWHNl''@;'; put 'put ''KGMpe3JldHVybiAkZShjPy50aGVuKX1mdW5jdGlvbiBKc2UoYyl7cmV0dXJuICRlKGNbaGldKX1mdW5jdGlvbiBRc2UoYyl7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiYkZShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBlbGUoYyl7cmV0dXJuIG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGM/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7Y30nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFy''@;'; put 'put ''cmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX1jb25zdCB0bGU9ZnVuY3Rpb24gTk1lKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gbmxlKGMpe3JldHVybiAk''@;'; put 'put ''ZShjPy5bdGxlXSl9ZnVuY3Rpb24gcmxlKGMpe3JldHVybiBmdW5jdGlvbiBwc2UoYyxsLGEpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaCxkPWEuYXBwbHkoYyxsfHxbXSks''@;'; put 'put ''Zj1bXTtyZXR1cm4gaD1PYmplY3QuY3JlYXRlKCgiZnVuY3Rpb24iPT10eXBlb2YgQXN5bmNJdGVyYXRvcj9Bc3luY0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKSxNKCJuZXh0IiksTSgidGhyb3ciKSxNKCJyZXR1cm4iLGZ1bmN0aW9uIHYoRWUpe3JldHVybiBmdW5jdGlvbihqZSl7cmV0''@;'; put 'put ''dXJuIFByb21pc2UucmVzb2x2ZShqZSkudGhlbihFZSx1ZSl9fSksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBNKEVlLGplKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKHFlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocnQs''@;'; put 'put ''cHQpe2YucHVzaChbRWUscWUscnQscHRdKT4xfHxJKEVlLHFlKX0pfSxqZSYmKGhbRWVdPWplKGhbRWVdKSkpfWZ1bmN0aW9uIEkoRWUsamUpe3RyeXshZnVuY3Rpb24gRyhFZSl7RWUudmFsdWUgaW5zdGFuY2VvZiBybT9Qcm9taXNlLnJlc29sdmUoRWUudmFsdWUudikudGhlbihpZSx1ZSk6''@;'; put 'put ''eWUoZlswXVsyXSxFZSl9KGRbRWVdKGplKSl9Y2F0Y2gocWUpe3llKGZbMF1bM10scWUpfX1mdW5jdGlvbiBpZShFZSl7SSgibmV4dCIsRWUpfWZ1bmN0aW9uIHVlKEVlKXtJKCJ0aHJvdyIsRWUpfWZ1bmN0aW9uIHllKEVlLGplKXtFZShqZSksZi5zaGlmdCgpLGYubGVuZ3RoJiZJKGZbMF1b''@;'; put 'put ''MF0sZlswXVsxXSl9fSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtjb25zdCBhPWMuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7dmFsdWU6ZCxkb25lOmh9PXlpZWxkIHJtKGEucmVhZCgpKTtpZihoKXJldHVybiB5aWVsZCBybSh2b2lkIDApO3lpZWxkIHlpZWxkIHJtKGQpfX1m''@;'; put 'put ''aW5hbGx5e2EucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiBpbGUoYyl7cmV0dXJuICRlKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gbDEoYyl7aWYoYyBpbnN0YW5jZW9mIFh0KXJldHVybiBjO2lmKG51bGwhPWMpe2lmKEpzZShjKSlyZXR1cm4gZnVuY3Rpb24gVk1lKGMpe3JldHVybiBuZXcg''@;'; put 'put ''WHQobD0+e2NvbnN0IGE9Y1toaV0oKTtpZigkZShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoQlooYykp''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIEJNZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntmb3IobGV0IGE9MDthPGMubGVuZ3RoJiYhbC5jbG9zZWQ7YSsrKWwubmV4dChjW2FdKTtsLmNvbXBsZXRlKCl9KX0oYyk7aWYoWHNlKGMpKXJldHVybiBmdW5jdGlvbiBqTWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Yy50''@;'; put 'put ''aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChhKSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsUmkpfSl9KGMpO2lmKFFzZShjKSlyZXR1cm4gYWxlKGMpO2lmKG5sZShjKSlyZXR1cm4gZnVuY3Rpb24gek1lKGMpe3JldHVybiBuZXcgWHQobD0+e2Zvcihjb25zdCBh''@;'; put 'put ''IG9mIGMpaWYobC5uZXh0KGEpLGwuY2xvc2VkKXJldHVybjtsLmNvbXBsZXRlKCl9KX0oYyk7aWYoaWxlKGMpKXJldHVybiBmdW5jdGlvbiBVTWUoYyl7cmV0dXJuIGFsZShybGUoYykpfShjKX10aHJvdyBlbGUoYyl9ZnVuY3Rpb24gYWxlKGMpe3JldHVybiBuZXcgWHQobD0+eyhmdW5jdGlv''@;'; put 'put ''biBaTWUoYyxsKXt2YXIgYSxkLGgsZjtyZXR1cm4gZnVuY3Rpb24gaHNlKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsdil7ZnVuY3Rpb24gTShpZSl7dHJ5e0coZC5uZXh0KGllKSl9Y2F0Y2godWUpe3YodWUpfX1mdW5jdGlvbiBJKGllKXt0cnl7Ryhk''@;'; put 'put ''LnRocm93KGllKSl9Y2F0Y2godWUpe3YodWUpfX1mdW5jdGlvbiBHKGllKXtpZS5kb25lP2YoaWUudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24odil7dihmKX0pfShpZS52YWx1ZSkudGhlbihNLEkpfUcoKGQ9ZC5hcHBseShjLGx8''@;'; put 'put ''fFtdKSkubmV4dCgpKX0pfSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihhPWdzZShjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2godil7aD17ZXJyb3I6dn19ZmluYWxseXt0cnl7ZCYmIWQu''@;'; put 'put ''ZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEpKX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gbmcoYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlv''@;'; put 'put ''bigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxkKSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiBvbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2Euc3Vic2NyaWJlKE5pKGQsaD0+bmcoZCxjLCgpPT5kLm5leHQoaCks''@;'; put 'put ''bCksKCk9Pm5nKGQsYywoKT0+ZC5jb21wbGV0ZSgpLGwpLGg9Pm5nKGQsYywoKT0+ZC5lcnJvcihoKSxsKSkpfSl9ZnVuY3Rpb24gc2xlKGMsbD0wKXtyZXR1cm4gVmkoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBsbGUoYyxsKXtp''@;'; put 'put ''ZighYyl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBYdChhPT57bmcoYSxsLCgpPT57Y29uc3QgZD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO25nKGEsbCwoKT0+e2QubmV4dCgpLnRoZW4oaD0+e2guZG9uZT9hLmNvbXBsZXRlKCk6YS5u''@;'; put 'put ''ZXh0KGgudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiBZdShjLGwpe3JldHVybiBsP2Z1bmN0aW9uIHFNZShjLGwpe2lmKG51bGwhPWMpe2lmKEpzZShjKSlyZXR1cm4gZnVuY3Rpb24gV01lKGMsbCl7cmV0dXJuIGwxKGMpLnBpcGUoc2xlKGwpLG9sZShsKSl9KGMsbCk7aWYoQlooYykp''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIEdNZShjLGwpe3JldHVybiBuZXcgWHQoYT0+e2xldCBkPTA7cmV0dXJuIGwuc2NoZWR1bGUoZnVuY3Rpb24oKXtkPT09Yy5sZW5ndGg/YS5jb21wbGV0ZSgpOihhLm5leHQoY1tkKytdKSxhLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KGMsbCk7aWYoWHNl''@;'; put 'put ''KGMpKXJldHVybiBmdW5jdGlvbiBZTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShzbGUobCksb2xlKGwpKX0oYyxsKTtpZihRc2UoYykpcmV0dXJuIGxsZShjLGwpO2lmKG5sZShjKSlyZXR1cm4gZnVuY3Rpb24gJE1lKGMsbCl7cmV0dXJuIG5ldyBYdChhPT57bGV0IGQ7cmV0dXJuIG5nKGEs''@;'; put 'put ''bCwoKT0+e2Q9Y1t0bGVdKCksbmcoYSxsLCgpPT57bGV0IGgsZjt0cnl7KHt2YWx1ZTpoLGRvbmU6Zn09ZC5uZXh0KCkpfWNhdGNoKHYpe3JldHVybiB2b2lkIGEuZXJyb3Iodil9Zj9hLmNvbXBsZXRlKCk6YS5uZXh0KGgpfSwwLCEwKX0pLCgpPT4kZShkPy5yZXR1cm4pJiZkLnJldHVybigp''@;'; put 'put ''fSl9KGMsbCk7aWYoaWxlKGMpKXJldHVybiBmdW5jdGlvbiBLTWUoYyxsKXtyZXR1cm4gbGxlKHJsZShjKSxsKX0oYyxsKX10aHJvdyBlbGUoYyl9KGMsbCk6bDEoYyl9ZnVuY3Rpb24gY2xlKGMpe3JldHVybiBjJiYkZShjLnNjaGVkdWxlKX1mdW5jdGlvbiBqWihjKXtyZXR1cm4gY1tjLmxl''@;'; put 'put ''bmd0aC0xXX1mdW5jdGlvbiB1bGUoYyl7cmV0dXJuICRlKGpaKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBqTShjKXtyZXR1cm4gY2xlKGpaKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBmbyguLi5jKXtyZXR1cm4gWXUoYyxqTShjKSl9Y29uc3R7aXNBcnJheTpKTWV9PUFycmF5''@;'; put 'put ''LHtnZXRQcm90b3R5cGVPZjpRTWUscHJvdG90eXBlOmV4ZSxrZXlzOnR4ZX09T2JqZWN0O2Z1bmN0aW9uIGRsZShjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihKTWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIG54ZShjKXtyZXR1cm4gYyYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBjJiZRTWUoYyk9PT1leGV9KGwpKXtjb25zdCBhPXR4ZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpyeGV9PUFycmF5O2Z1bmN0aW9uIHpaKGMpe3JldHVybiBMcihsPT5m''@;'; put 'put ''dW5jdGlvbiBpeGUoYyxsKXtyZXR1cm4gcnhlKGwpP2MoLi4ubCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gaGxlKGMsbCl7cmV0dXJuIGMucmVkdWNlKChhLGQsaCk9PihhW2RdPWxbaF0sYSkse30pfWZ1bmN0aW9uIHE4KC4uLmMpe2NvbnN0IGw9ak0oYyksYT11bGUoYykse2FyZ3M6ZCxrZXlz''@;'; put 'put ''Omh9PWRsZShjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIFl1KFtdLGwpO2NvbnN0IGY9bmV3IFh0KGZ1bmN0aW9uIGF4ZShjLGwsYT11bil7cmV0dXJuIGQ9PntmbGUobCwoKT0+e2NvbnN0e2xlbmd0aDpofT1jLGY9bmV3IEFycmF5KGgpO2xldCB2PWgsTT1oO2ZvcihsZXQgST0wO0k8aDtJ''@;'; put 'put ''KyspZmxlKGwsKCk9Pntjb25zdCBHPVl1KGNbSV0sbCk7bGV0IGllPSExO0cuc3Vic2NyaWJlKE5pKGQsdWU9PntmW0ldPXVlLGllfHwoaWU9ITAsTS0tKSxNfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLXZ8fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/dj0+aGxlKGgs''@;'; put 'put ''dik6dW4pKTtyZXR1cm4gYT9mLnBpcGUoelooYSkpOmZ9ZnVuY3Rpb24gZmxlKGMsbCxhKXtjP25nKGEsYyxsKTpsKCl9Y29uc3QgUlI9dHQoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9''@;'; put 'put ''KTtmdW5jdGlvbiBOMChjLGwsYT0xLzApe3JldHVybiAkZShsKT9OMCgoZCxoKT0+THIoKGYsdik9PmwoZCxmLGgsdikpKGwxKGMoZCxoKSkpLGEpOigibnVtYmVyIj09dHlwZW9mIGwmJihhPWwpLFZpKChkLGgpPT5mdW5jdGlvbiBveGUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBJPVtdO2xl''@;'; put 'put ''dCBHPTAsaWU9MCx1ZT0hMTtjb25zdCB5ZT0oKT0+e3VlJiYhSS5sZW5ndGgmJiFHJiZsLmNvbXBsZXRlKCl9LEVlPXFlPT5HPGQ/amUocWUpOkkucHVzaChxZSksamU9cWU9PntmJiZsLm5leHQocWUpLEcrKztsZXQgcnQ9ITE7bDEoYShxZSxpZSsrKSkuc3Vic2NyaWJlKE5pKGwscHQ9Pnto''@;'; put 'put ''Py4ocHQpLGY/RWUocHQpOmwubmV4dChwdCl9LCgpPT57cnQ9ITB9LHZvaWQgMCwoKT0+e2lmKHJ0KXRyeXtmb3IoRy0tO0kubGVuZ3RoJiZHPGQ7KXtjb25zdCBwdD1JLnNoaWZ0KCk7dj9uZyhsLHYsKCk9PmplKHB0KSk6amUocHQpfXllKCl9Y2F0Y2gocHQpe2wuZXJyb3IocHQpfX0pKX07''@;'; put 'put ''cmV0dXJuIGMuc3Vic2NyaWJlKE5pKGwsRWUsKCk9Pnt1ZT0hMCx5ZSgpfSkpLCgpPT57TT8uKCl9fShkLGgsYyxhKSkpfWZ1bmN0aW9uIGViKGM9MS8wKXtyZXR1cm4gTjAodW4sYyl9ZnVuY3Rpb24gVVooLi4uYyl7cmV0dXJuIGZ1bmN0aW9uIHN4ZSgpe3JldHVybiBlYigxKX0oKShZdShj''@;'; put 'put ''LGpNKGMpKSl9ZnVuY3Rpb24gcGxlKGMpe3JldHVybiBuZXcgWHQobD0+e2wxKGMoKSkuc3Vic2NyaWJlKGwpfSl9ZnVuY3Rpb24gek0oYyxsKXtjb25zdCBhPSRlKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBYdChsP2g9Pmwuc2NoZWR1bGUoZCwwLGgpOmQpfWNv''@;'; put 'put ''bnN0IE0yPW5ldyBYdChjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIFpaKCl7cmV0dXJuIFZpKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9TmkobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50''@;'; put 'put ''KXJldHVybiB2b2lkKGE9bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgV1ogZXh0ZW5kcyBY''@;'; put 'put ''dHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLFFyKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9y''@;'; put 'put ''ZWZDb3VudD0wO2NvbnN0e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBxdDtjb25zdCBhPXRo''@;'; put 'put ''aXMuZ2V0U3ViamVjdCgpO2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShOaShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMu''@;'; put 'put ''X2Nvbm5lY3Rpb249bnVsbCxsPXF0LkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBaWigpKHRoaXMpfX1mdW5jdGlvbiBWMShjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPW51bGwsZj0wLHY9ITE7Y29uc3QgTT0oKT0+diYmIWgmJmQuY29tcGxldGUoKTthLnN1YnNjcmli''@;'; put 'put ''ZShOaShkLEk9PntoPy51bnN1YnNjcmliZSgpO2xldCBHPTA7Y29uc3QgaWU9ZisrO2wxKGMoSSxpZSkpLnN1YnNjcmliZShoPU5pKGQsdWU9PmQubmV4dChsP2woSSx1ZSxpZSxHKyspOnVlKSwoKT0+e2g9bnVsbCxNKCl9KSl9LCgpPT57dj0hMCxNKCl9KSl9KX1mdW5jdGlvbiBZZihjKXty''@;'; put 'put ''ZXR1cm4gYzw9MD8oKT0+TTI6VmkoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKE5pKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkpfSkpfSl9ZnVuY3Rpb24geDIoLi4uYyl7Y29uc3QgbD1qTShjKTtyZXR1cm4gVmkoKGEsZCk9PnsobD9VWihjLGEsbCk6''@;'; put 'put ''VVooYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gJGwoYyxsKXtyZXR1cm4gVmkoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKE5pKGQsZj0+Yy5jYWxsKGwsZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIExSKGMpe3JldHVybiBWaSgobCxhKT0+e2xldCBkPSExO2wuc3Vi''@;'; put 'put ''c2NyaWJlKE5pKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBnbGUoYz1jeGUpe3JldHVybiBWaSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKE5pKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+ZD9hLmNvbXBs''@;'; put 'put ''ZXRlKCk6YS5lcnJvcihjKCkpKSl9KX1mdW5jdGlvbiBjeGUoKXtyZXR1cm4gbmV3IFJSfWZ1bmN0aW9uIGFtKGMsbCl7Y29uc3QgYT1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBkPT5kLnBpcGUoYz8kbCgoaCxmKT0+YyhoLGYsZCkpOnVuLFlmKDEpLGE/TFIobCk6Z2xlKCgpPT5uZXcg''@;'; put 'put ''UlIpKX1mdW5jdGlvbiB0YihjLGwpe3JldHVybiAkZShsKT9OMChjLGwsMSk6TjAoYywxKX1mdW5jdGlvbiBHdShjLGwsYSl7Y29uc3QgZD0kZShjKXx8bHx8YT97bmV4dDpjLGVycm9yOmwsY29tcGxldGU6YX06YztyZXR1cm4gZD9WaSgoaCxmKT0+e3ZhciB2O251bGw9PT0odj1kLnN1YnNj''@;'; put 'put ''cmliZSl8fHZvaWQgMD09PXZ8fHYuY2FsbChkKTtsZXQgTT0hMDtoLnN1YnNjcmliZShOaShmLEk9Pnt2YXIgRztudWxsPT09KEc9ZC5uZXh0KXx8dm9pZCAwPT09R3x8Ry5jYWxsKGQsSSksZi5uZXh0KEkpfSwoKT0+e3ZhciBJO009ITEsbnVsbD09PShJPWQuY29tcGxldGUpfHx2b2lkIDA9''@;'; put 'put ''PT1JfHxJLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxJPT57dmFyIEc7TT0hMSxudWxsPT09KEc9ZC5lcnJvcil8fHZvaWQgMD09PUd8fEcuY2FsbChkLEkpLGYuZXJyb3IoSSl9LCgpPT57dmFyIEksRztNJiYobnVsbD09PShJPWQudW5zdWJzY3JpYmUpfHx2b2lkIDA9PT1JfHxJLmNhbGwoZCkp''@;'; put 'put ''LG51bGw9PT0oRz1kLmZpbmFsaXplKXx8dm9pZCAwPT09R3x8Ry5jYWxsKGQpfSkpfSk6dW59ZnVuY3Rpb24gWDgoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGYsZD1udWxsLGg9ITE7ZD1sLnN1YnNjcmliZShOaShhLHZvaWQgMCx2b2lkIDAsdj0+e2Y9bDEoYyh2LFg4KGMpKGwpKSksZD8o''@;'; put 'put ''ZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSk6aD0hMH0pKSxoJiYoZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSl9KX1mdW5jdGlvbiBZWihjKXtyZXR1cm4gYzw9MD8oKT0+TTI6VmkoKGwsYSk9PntsZXQgZD1bXTtsLnN1YnNjcmliZShOaShhLGg9''@;'; put 'put ''PntkLnB1c2goaCksYzxkLmxlbmd0aCYmZC5zaGlmdCgpfSwoKT0+e2Zvcihjb25zdCBoIG9mIGQpYS5uZXh0KGgpO2EuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57ZD1udWxsfSkpfSl9ZnVuY3Rpb24gVU0oYyl7cmV0dXJuIFZpKChsLGEpPT57dHJ5e2wuc3Vic2NyaWJlKGEpfWZpbmFsbHl7''@;'; put 'put ''YS5hZGQoYyl9fSl9ZnVuY3Rpb24gVjAoYyl7cmV0dXJuIFZpKChsLGEpPT57bDEoYykuc3Vic2NyaWJlKE5pKGEsKCk9PmEuY29tcGxldGUoKSxobikpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1jb25zdCBLbz0icHJpbWFyeSIsWk09U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3Mg''@;'; put 'put ''cHhle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFyYW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rp''@;'; put 'put ''b24gbmIoYyl7cmV0dXJuIG5ldyBweGUoYyl9ZnVuY3Rpb24gZ3hlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxs''@;'; put 'put ''O2NvbnN0IGg9e307Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXSxNPWNbZl07aWYodi5zdGFydHNXaXRoKCI6IikpaFt2LnN1YnN0cmluZygxKV09TTtlbHNlIGlmKHYhPT1NLnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0''@;'; put 'put ''aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIGhwKGMsbCl7Y29uc3QgYT1jP0daKGMpOnZvaWQgMCxkPWw/R1oobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhbWxlKGNbaF0s''@;'; put 'put ''bFtoXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gR1ooYyl7cmV0dXJuWy4uLk9iamVjdC5rZXlzKGMpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYyldfWZ1bmN0aW9uIG1sZShjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVu''@;'; put 'put ''Z3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtmXT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiB2bGUoYyl7cmV0dXJuIGMubGVuZ3RoPjA/Y1tjLmxlbmd0aC0xXTpudWxsfWZ1bmN0''@;'; put 'put ''aW9uIG9tKGMpe3JldHVybiBCTShjKT9jOl9NKGMpP1l1KFByb21pc2UucmVzb2x2ZShjKSk6Zm8oYyl9Y29uc3QgdnhlPXtleGFjdDpmdW5jdGlvbiBfbGUoYyxsLGEpe2lmKCFKOChjLnNlZ21lbnRzLGwuc2VnbWVudHMpfHwhT1IoYy5zZWdtZW50cyxsLnNlZ21lbnRzLGEpfHxjLm51bWJl''@;'; put 'put ''ck9mQ2hpbGRyZW4hPT1sLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuITE7Zm9yKGNvbnN0IGQgaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltkXXx8IV9sZShjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDp3bGV9LHlsZT17ZXhhY3Q6''@;'; put 'put ''ZnVuY3Rpb24geXhlKGMsbCl7cmV0dXJuIGhwKGMsbCl9LHN1YnNldDpmdW5jdGlvbiBieGUoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoPD1PYmplY3Qua2V5cyhjKS5sZW5ndGgmJk9iamVjdC5rZXlzKGwpLmV2ZXJ5KGE9Pm1sZShjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+''@;'; put 'put ''ITB9O2Z1bmN0aW9uIGJsZShjLGwsYSl7cmV0dXJuIHZ4ZVthLnBhdGhzXShjLnJvb3QsbC5yb290LGEubWF0cml4UGFyYW1zKSYmeWxlW2EucXVlcnlQYXJhbXNdKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcykmJiEoImV4YWN0Ij09PWEuZnJhZ21lbnQmJmMuZnJhZ21lbnQhPT1sLmZy''@;'; put 'put ''YWdtZW50KX1mdW5jdGlvbiB3bGUoYyxsLGEpe3JldHVybiBDbGUoYyxsLGwuc2VnbWVudHMsYSl9ZnVuY3Rpb24gQ2xlKGMsbCxhLGQpe2lmKGMuc2VnbWVudHMubGVuZ3RoPmEubGVuZ3RoKXtjb25zdCBoPWMuc2VnbWVudHMuc2xpY2UoMCxhLmxlbmd0aCk7cmV0dXJuISghSjgoaCxhKXx8''@;'; put 'put ''bC5oYXNDaGlsZHJlbigpfHwhT1IoaCxhLGQpKX1pZihjLnNlZ21lbnRzLmxlbmd0aD09PWEubGVuZ3RoKXtpZighSjgoYy5zZWdtZW50cyxhKXx8IU9SKGMuc2VnbWVudHMsYSxkKSlyZXR1cm4hMTtmb3IoY29uc3QgaCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2hdfHwhd2xlKGMu''@;'; put 'put ''Y2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNlZ21lbnRzLmxlbmd0aCk7cmV0dXJuISEoSjgoYy5zZWdtZW50cyxoKSYmT1IoYy5zZWdtZW50cyxoLGQpJiZjLmNo''@;'; put 'put ''aWxkcmVuW0tvXSkmJkNsZShjLmNoaWxkcmVuW0tvXSxsLGYsZCl9fWZ1bmN0aW9uIE9SKGMsbCxhKXtyZXR1cm4gbC5ldmVyeSgoZCxoKT0+eWxlW2FdKGNbaF0ucGFyYW1ldGVycyxkLnBhcmFtZXRlcnMpKX1jbGFzcyByYntjb25zdHJ1Y3RvcihsPW5ldyBLbChbXSx7fSksYT17fSxkPW51''@;'; put 'put ''bGwpe3RoaXMucm9vdD1sLHRoaXMucXVlcnlQYXJhbXM9YSx0aGlzLmZyYWdtZW50PWR9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PW5iKHRoaXMucXVlcnlQYXJhbXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gQ3hlLnNl''@;'; put 'put ''cmlhbGl6ZSh0aGlzKX19Y2xhc3MgS2x7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNlZ21lbnRzPWwsdGhpcy5jaGlsZHJlbj1hLHRoaXMucGFyZW50PW51bGwsT2JqZWN0LnZhbHVlcyhhKS5mb3JFYWNoKGQ9PmQucGFyZW50PXRoaXMpfWhhc0NoaWxkcmVuKCl7cmV0dXJuIHRoaXMubnVtYmVy''@;'; put 'put ''T2ZDaGlsZHJlbj4wfWdldCBudW1iZXJPZkNoaWxkcmVuKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH10b1N0cmluZygpe3JldHVybiBQUih0aGlzKX19Y2xhc3MgV017Y29uc3RydWN0b3IobCxhKXt0aGlzLnBhdGg9bCx0aGlzLnBhcmFtZXRlcnM9YX1nZXQg''@;'; put 'put ''cGFyYW1ldGVyTWFwKCl7cmV0dXJuIHRoaXMuX3BhcmFtZXRlck1hcD8/PW5iKHRoaXMucGFyYW1ldGVycyksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHhsZSh0aGlzKX19ZnVuY3Rpb24gSjgoYyxsKXtyZXR1cm4gYy5sZW5ndGg9PT1sLmxlbmd0aCYmYy5ldmVyeSgo''@;'; put 'put ''YSxkKT0+YS5wYXRoPT09bFtkXS5wYXRoKX1sZXQgaWI9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgJFoscHJvdmlkZWRJbjoi''@;'; put 'put ''cm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzICRae3BhcnNlKGwpe2NvbnN0IGE9bmV3IEx4ZShsKTtyZXR1cm4gbmV3IHJiKGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7WU0obC5y''@;'; put 'put ''b290LCEwKX1gLGQ9ZnVuY3Rpb24geHhlKGMpe2NvbnN0IGw9T2JqZWN0LmVudHJpZXMoYykubWFwKChbYSxkXSk9PkFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7RlIoYSl9PSR7RlIoaCl9YCkuam9pbigiJiIpOmAke0ZSKGEpfT0ke0ZSKGQpfWApLmZpbHRlcihhPT5hKTtyZXR1cm4g''@;'; put 'put ''bC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpLGg9InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBTeGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIjtyZXR1cm5gJHthfSR7ZH0ke2h9YH19Y29uc3QgQ3hl''@;'; put 'put ''PW5ldyAkWjtmdW5jdGlvbiBQUihjKXtyZXR1cm4gYy5zZWdtZW50cy5tYXAobD0+eGxlKGwpKS5qb2luKCIvIil9ZnVuY3Rpb24gWU0oYyxsKXtpZighYy5oYXNDaGlsZHJlbigpKXJldHVybiBQUihjKTtpZihsKXtjb25zdCBhPWMuY2hpbGRyZW5bS29dP1lNKGMuY2hpbGRyZW5bS29dLCEx''@;'; put 'put ''KToiIixkPVtdO3JldHVybiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbaCxmXSk9PntoIT09S28mJmQucHVzaChgJHtofToke1lNKGYsITEpfWApfSksZC5sZW5ndGg+MD9gJHthfSgke2Quam9pbigiLy8iKX0pYDphfXtjb25zdCBhPWZ1bmN0aW9uIHd4ZShjLGwpe2xl''@;'; put 'put ''dCBhPVtdO3JldHVybiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkPT09S28mJihhPWEuY29uY2F0KGwoaCxkKSkpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0pPT57ZCE9PUtvJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0p''@;'; put 'put ''LGF9KGMsKGQsaCk9Pmg9PT1Lbz9bWU0oYy5jaGlsZHJlbltLb10sITEpXTpbYCR7aH06JHtZTShkLCExKX1gXSk7cmV0dXJuIDE9PT1PYmplY3Qua2V5cyhjLmNoaWxkcmVuKS5sZW5ndGgmJm51bGwhPWMuY2hpbGRyZW5bS29dP2Ake1BSKGMpfS8ke2FbMF19YDpgJHtQUihjKX0vKCR7YS5q''@;'; put 'put ''b2luKCIvLyIpfSlgfX1mdW5jdGlvbiBTbGUoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24gRlIoYyl7cmV0dXJuIFNs''@;'; put 'put ''ZShjKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBLWihjKXtyZXR1cm4gU2xlKGMpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIEhSKGMpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYyl9ZnVu''@;'; put 'put ''Y3Rpb24gTWxlKGMpe3JldHVybiBIUihjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiB4bGUoYyl7cmV0dXJuYCR7S1ooYy5wYXRoKX0ke2Z1bmN0aW9uIE14ZShjKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykubWFwKChbbCxhXSk9PmA7JHtLWihsKX09JHtLWihhKX1gKS5qb2lu''@;'; put 'put ''KCIiKX0oYy5wYXJhbWV0ZXJzKX1gfWNvbnN0IEV4ZT0vXlteXC8oKT87I10rLztmdW5jdGlvbiBxWihjKXtjb25zdCBsPWMubWF0Y2goRXhlKTtyZXR1cm4gbD9sWzBdOiIifWNvbnN0IFR4ZT0vXlteXC8oKT87PSNdKy8sa3hlPS9eW149PyYjXSsvLEl4ZT0vXlteJiNdKy87Y2xhc3MgTHhl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWwsdGhpcy5yZW1haW5pbmc9bH1wYXJzZVJvb3RTZWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIj''@;'; put 'put ''Iik/bmV3IEtsKFtdLHt9KTpuZXcgS2woW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfXBhcnNlUXVlcnlQYXJhbXMoKXtjb25zdCBsPXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0obCl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYi''@;'; put 'put ''KSk7cmV0dXJuIGx9cGFyc2VGcmFnbWVudCgpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH1wYXJzZUNoaWxkcmVuKCl7aWYoIiI9PT10aGlzLnJlbWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRp''@;'; put 'put ''b25hbCgiLyIpO2NvbnN0IGw9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8bC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlz''@;'; put 'put ''LmNhcHR1cmUoIi8iKSxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7bGV0IGE9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLGE9dGhpcy5wYXJzZVBhcmVucyghMCkpO2xldCBkPXt9O3JldHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihk''@;'; put 'put ''PXRoaXMucGFyc2VQYXJlbnMoITEpKSwobC5sZW5ndGg+MHx8T2JqZWN0LmtleXMoYSkubGVuZ3RoPjApJiYoZFtLb109bmV3IEtsKGwsYSkpLGR9cGFyc2VTZWdtZW50KCl7Y29uc3QgbD1xWih0aGlzLnJlbWFpbmluZyk7aWYoIiI9PT1sJiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhy''@;'; put 'put ''b3cgbmV3IFFuKDQwMDksITEpO3JldHVybiB0aGlzLmNhcHR1cmUobCksbmV3IFdNKEhSKGwpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9cGFyc2VNYXRyaXhQYXJhbXMoKXtjb25zdCBsPXt9O2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWwoIjsiKTspdGhpcy5wYXJzZVBhcmFtKGwpO3Jl''@;'; put 'put ''dHVybiBsfXBhcnNlUGFyYW0obCl7Y29uc3QgYT1mdW5jdGlvbiBBeGUoYyl7Y29uc3QgbD1jLm1hdGNoKFR4ZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO2lmKCFhKXJldHVybjt0aGlzLmNhcHR1cmUoYSk7bGV0IGQ9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0i''@;'; put 'put ''KSl7Y29uc3QgaD1xWih0aGlzLnJlbWFpbmluZyk7aCYmKGQ9aCx0aGlzLmNhcHR1cmUoZCkpfWxbSFIoYSldPUhSKGQpfXBhcnNlUXVlcnlQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIER4ZShjKXtjb25zdCBsPWMubWF0Y2goa3hlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmlu''@;'; put 'put ''Zyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCB2PWZ1bmN0aW9uIFJ4ZShjKXtjb25zdCBsPWMubWF0Y2goSXhlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7diYmKGQ9dix0aGlzLmNh''@;'; put 'put ''cHR1cmUoZCkpfWNvbnN0IGg9TWxlKGEpLGY9TWxlKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCB2PWxbaF07QXJyYXkuaXNBcnJheSh2KXx8KHY9W3ZdLGxbaF09diksdi5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVy''@;'; put 'put ''ZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9cVoodGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IFFuKDQwMTAsITEp''@;'; put 'put ''O2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYpLHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1Lbyk7Y29uc3Qgdj10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyh2KS5sZW5ndGg/dltLb106''@;'; put 'put ''bmV3IEtsKFtdLHYpLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3JldHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFp''@;'; put 'put ''bmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgUW4oNDAxMSwhMSl9fWZ1bmN0aW9uIEVsZShjKXtyZXR1cm4gYy5zZWdtZW50cy5sZW5ndGg+MD9uZXcgS2woW10se1tLb106''@;'; put 'put ''Y30pOmN9ZnVuY3Rpb24gVGxlKGMpe2NvbnN0IGw9e307Zm9yKGNvbnN0W2QsaF1vZiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKSl7Y29uc3QgZj1UbGUoaCk7aWYoZD09PUtvJiYwPT09Zi5zZWdtZW50cy5sZW5ndGgmJmYuaGFzQ2hpbGRyZW4oKSlmb3IoY29uc3RbdixNXW9mIE9iamVj''@;'; put 'put ''dC5lbnRyaWVzKGYuY2hpbGRyZW4pKWxbdl09TTtlbHNlKGYuc2VnbWVudHMubGVuZ3RoPjB8fGYuaGFzQ2hpbGRyZW4oKSkmJihsW2RdPWYpfXJldHVybiBmdW5jdGlvbiBPeGUoYyl7aWYoMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmYy5jaGlsZHJlbltLb10pe2NvbnN0IGw9Yy5jaGlsZHJl''@;'; put 'put ''bltLb107cmV0dXJuIG5ldyBLbChjLnNlZ21lbnRzLmNvbmNhdChsLnNlZ21lbnRzKSxsLmNoaWxkcmVuKX1yZXR1cm4gY30obmV3IEtsKGMuc2VnbWVudHMsbCkpfWZ1bmN0aW9uIGFiKGMpe3JldHVybiBjIGluc3RhbmNlb2YgcmJ9ZnVuY3Rpb24gQWxlKGMpe2xldCBsO2NvbnN0IGg9RWxl''@;'; put 'put ''KGZ1bmN0aW9uIGEoZil7Y29uc3Qgdj17fTtmb3IoY29uc3QgSSBvZiBmLmNoaWxkcmVuKXtjb25zdCBHPWEoSSk7dltJLm91dGxldF09R31jb25zdCBNPW5ldyBLbChmLnVybCx2KTtyZXR1cm4gZj09PWMmJihsPU0pLE19KGMucm9vdCkpO3JldHVybiBsPz9ofWZ1bmN0aW9uIGtsZShjLGws''@;'; put 'put ''YSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBYWihoLGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gRnhlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgSWxl''@;'; put 'put ''KCEwLDAsYyk7bGV0IGw9MCxhPSExO2NvbnN0IGQ9Yy5yZWR1Y2UoKGgsZix2KT0+e2lmKCJvYmplY3QiPT10eXBlb2YgZiYmbnVsbCE9Zil7aWYoZi5vdXRsZXRzKXtjb25zdCBNPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhmLm91dGxldHMpLmZvckVhY2goKFtJLEddKT0+e01bSV09InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBHP0cuc3BsaXQoIi8iKTpHfSksWy4uLmgse291dGxldHM6TX1dfWlmKGYuc2VnbWVudFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT12PyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoTSxJKT0+''@;'; put 'put ''ezA9PUkmJiIuIj09PU18fCgwPT1JJiYiIj09PU0/YT0hMDoiLi4iPT09TT9sKys6IiIhPU0mJmgucHVzaChNKSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgSWxlKGEsbCxkKX0obCk7aWYoZi50b1Jvb3QoKSlyZXR1cm4gWFooaCxoLG5ldyBLbChbXSx7fSksYSxkKTtjb25zdCB2''@;'; put 'put ''PWZ1bmN0aW9uIEh4ZShjLGwsYSl7aWYoYy5pc0Fic29sdXRlKXJldHVybiBuZXcgVlIobCwhMCwwKTtpZighYSlyZXR1cm4gbmV3IFZSKGwsITEsTmFOKTtpZihudWxsPT09YS5wYXJlbnQpcmV0dXJuIG5ldyBWUihhLCEwLDApO2NvbnN0IGQ9TlIoYy5jb21tYW5kc1swXSk/MDoxO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBOeGUoYyxsLGEpe2xldCBkPWMsaD1sLGY9YTtmb3IoO2Y+aDspe2lmKGYtPWgsZD1kLnBhcmVudCwhZCl0aHJvdyBuZXcgUW4oNDAwNSwhMSk7aD1kLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IFZSKGQsITEsaC1mKX0oYSxhLnNlZ21lbnRzLmxlbmd0aC0xK2QsYy5u''@;'; put 'put ''dW1iZXJPZkRvdWJsZURvdHMpfShmLGgsYyksTT12LnByb2Nlc3NDaGlsZHJlbj8kTSh2LnNlZ21lbnRHcm91cCx2LmluZGV4LGYuY29tbWFuZHMpOlJsZSh2LnNlZ21lbnRHcm91cCx2LmluZGV4LGYuY29tbWFuZHMpO3JldHVybiBYWihoLHYuc2VnbWVudEdyb3VwLE0sYSxkKX1mdW5jdGlv''@;'; put 'put ''biBOUihjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJiFjLm91dGxldHMmJiFjLnNlZ21lbnRQYXRofWZ1bmN0aW9uIEdNKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmYy5vdXRsZXRzfWZ1bmN0aW9uIFhaKGMsbCxhLGQsaCl7bGV0IHYsZj17fTtk''@;'; put 'put ''JiZPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChbSSxHXSk9PntmW0ldPUFycmF5LmlzQXJyYXkoRyk/Ry5tYXAoaWU9PmAke2llfWApOmAke0d9YH0pLHY9Yz09PWw/YTpEbGUoYyxsLGEpO2NvbnN0IE09RWxlKFRsZSh2KSk7cmV0dXJuIG5ldyByYihNLGYsaCl9ZnVuY3Rpb24gRGxlKGMs''@;'; put 'put ''bCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbaCxmXSk9PntkW2hdPWY9PT1sP2E6RGxlKGYsbCxhKX0pLG5ldyBLbChjLnNlZ21lbnRzLGQpfWNsYXNzIElsZXtjb25zdHJ1Y3RvcihsLGEsZCl7aWYodGhpcy5pc0Fic29sdXRlPWws''@;'; put 'put ''dGhpcy5udW1iZXJPZkRvdWJsZURvdHM9YSx0aGlzLmNvbW1hbmRzPWQsbCYmZC5sZW5ndGg+MCYmTlIoZFswXSkpdGhyb3cgbmV3IFFuKDQwMDMsITEpO2NvbnN0IGg9ZC5maW5kKEdNKTtpZihoJiZoIT09dmxlKGQpKXRocm93IG5ldyBRbig0MDA0LCExKX10b1Jvb3QoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX19Y2xhc3MgVlJ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc2VnbWVudEdyb3VwPWwsdGhpcy5wcm9jZXNzQ2hpbGRyZW49YSx0aGlzLmluZGV4PWR9fWZ1bmN0aW9uIFJsZShjLGws''@;'; put 'put ''YSl7aWYoYz8/PW5ldyBLbChbXSx7fSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0dXJuICRNKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIEJ4ZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9''@;'; put 'put ''O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IHY9Yy5zZWdtZW50c1toXSxNPWFbZF07aWYoR00oTSkpYnJlYWs7Y29uc3QgST1gJHtNfWAsRz1kPGEubGVuZ3RoLTE/YVtkKzFdOm51bGw7aWYoaD4wJiZ2b2lkIDA9PT1JKWJyZWFrO2lm''@;'; put 'put ''KEkmJkcmJiJvYmplY3QiPT10eXBlb2YgRyYmdm9pZCAwPT09Ry5vdXRsZXRzKXtpZighT2xlKEksRyx2KSlyZXR1cm4gZjtkKz0yfWVsc2V7aWYoIU9sZShJLHt9LHYpKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEp''@;'; put 'put ''LGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IGY9bmV3IEtsKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW0tvXT1uZXcgS2woYy5zZWdtZW50cy5zbGlj''@;'; put 'put ''ZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksJE0oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5ndGg/bmV3IEtsKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/SlooYyxsLGEpOmQubWF0Y2g/JE0oYywwLGgpOkpaKGMsbCxhKX1mdW5jdGlvbiAkTShj''@;'; put 'put ''LGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgS2woYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVuY3Rpb24gVnhlKGMpe3JldHVybiBHTShjWzBdKT9jWzBdLm91dGxldHM6e1tLb106Y319KGEpLGg9e307aWYoT2JqZWN0LmtleXMoZCkuc29tZShmPT5mIT09S28pJiZjLmNoaWxk''@;'; put 'put ''cmVuW0tvXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bS29dLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj0kTShjLmNoaWxkcmVuW0tvXSxsLGEpO3JldHVybiBuZXcgS2woYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9y''@;'; put 'put ''RWFjaCgoW2Ysdl0pPT57InN0cmluZyI9PXR5cGVvZiB2JiYodj1bdl0pLG51bGwhPT12JiYoaFtmXT1SbGUoYy5jaGlsZHJlbltmXSxsLHYpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtmLHZdKT0+e3ZvaWQgMD09PWRbZl0mJihoW2ZdPXYpfSksbmV3IEtsKGMu''@;'; put 'put ''c2VnbWVudHMsaCl9fWZ1bmN0aW9uIEpaKGMsbCxhKXtjb25zdCBkPWMuc2VnbWVudHMuc2xpY2UoMCxsKTtsZXQgaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZihHTShmKSl7Y29uc3QgST1qeGUoZi5vdXRsZXRzKTtyZXR1cm4gbmV3IEtsKGQsSSl9aWYoMD09PWgmJk5S''@;'; put 'put ''KGFbMF0pKXtkLnB1c2gobmV3IFdNKGMuc2VnbWVudHNbbF0ucGF0aCxMbGUoYVswXSkpKSxoKys7Y29udGludWV9Y29uc3Qgdj1HTShmKT9mLm91dGxldHNbS29dOmAke2Z9YCxNPWg8YS5sZW5ndGgtMT9hW2grMV06bnVsbDt2JiZNJiZOUihNKT8oZC5wdXNoKG5ldyBXTSh2LExsZShNKSkp''@;'; put 'put ''LGgrPTIpOihkLnB1c2gobmV3IFdNKHYse30pKSxoKyspfXJldHVybiBuZXcgS2woZCx7fSl9ZnVuY3Rpb24ganhlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxb''@;'; put 'put ''YV09SloobmV3IEtsKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gTGxlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+bFthXT1gJHtkfWApLGx9ZnVuY3Rpb24gT2xlKGMsbCxhKXtyZXR1cm4gYz09YS5wYXRoJiZocChsLGEucGFyYW1l''@;'; put 'put ''dGVycyl9Y29uc3QgS009ImltcGVyYXRpdmUiO3ZhciBScz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hdmlnYXRpb25TdGFydD0wXT0iTmF2aWdhdGlvblN0YXJ0IixjW2MuTmF2aWdhdGlvbkVuZD0xXT0iTmF2aWdhdGlvbkVuZCIsY1tjLk5hdmlnYXRpb25DYW5jZWw9Ml09Ik5hdmlnYXRp''@;'; put 'put ''b25DYW5jZWwiLGNbYy5OYXZpZ2F0aW9uRXJyb3I9M109Ik5hdmlnYXRpb25FcnJvciIsY1tjLlJvdXRlc1JlY29nbml6ZWQ9NF09IlJvdXRlc1JlY29nbml6ZWQiLGNbYy5SZXNvbHZlU3RhcnQ9NV09IlJlc29sdmVTdGFydCIsY1tjLlJlc29sdmVFbmQ9Nl09IlJlc29sdmVFbmQiLGNbYy5H''@;'; put 'put ''dWFyZHNDaGVja1N0YXJ0PTddPSJHdWFyZHNDaGVja1N0YXJ0IixjW2MuR3VhcmRzQ2hlY2tFbmQ9OF09Ikd1YXJkc0NoZWNrRW5kIixjW2MuUm91dGVDb25maWdMb2FkU3RhcnQ9OV09IlJvdXRlQ29uZmlnTG9hZFN0YXJ0IixjW2MuUm91dGVDb25maWdMb2FkRW5kPTEwXT0iUm91dGVDb25m''@;'; put 'put ''aWdMb2FkRW5kIixjW2MuQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9MTFdPSJDaGlsZEFjdGl2YXRpb25TdGFydCIsY1tjLkNoaWxkQWN0aXZhdGlvbkVuZD0xMl09IkNoaWxkQWN0aXZhdGlvbkVuZCIsY1tjLkFjdGl2YXRpb25TdGFydD0xM109IkFjdGl2YXRpb25TdGFydCIsY1tjLkFjdGl2YXRp''@;'; put 'put ''b25FbmQ9MTRdPSJBY3RpdmF0aW9uRW5kIixjW2MuU2Nyb2xsPTE1XT0iU2Nyb2xsIixjW2MuTmF2aWdhdGlvblNraXBwZWQ9MTZdPSJOYXZpZ2F0aW9uU2tpcHBlZCIsY30oUnN8fHt9KTtjbGFzcyBmcHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBCUiBl''@;'; put 'put ''eHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPVJzLk5hdmlnYXRpb25TdGFydCx0aGlzLm5hdmlnYXRpb25UcmlnZ2VyPWQsdGhpcy5yZXN0b3JlZFN0YXRlPWh9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvblN0''@;'; put 'put ''YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgcHAgZXh0ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25FbmR9dG9TdHJpbmcoKXtyZXR1cm5gTmF2''@;'; put 'put ''aWdhdGlvbkVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nKWB9fXZhciBwaD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJlZGlyZWN0PTBdPSJSZWRpcmVjdCIsY1tjLlN1cGVyc2VkZWRC''@;'; put 'put ''eU5ld05hdmlnYXRpb249MV09IlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24iLGNbYy5Ob0RhdGFGcm9tUmVzb2x2ZXI9Ml09Ik5vRGF0YUZyb21SZXNvbHZlciIsY1tjLkd1YXJkUmVqZWN0ZWQ9M109Ikd1YXJkUmVqZWN0ZWQiLGN9KHBofHx7fSksalI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNb''@;'; put 'put ''Yy5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb249MF09Iklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbiIsY1tjLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3k9MV09Iklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3kiLGN9KGpSfHx7fSk7Y2xhc3Mgb2IgZXh0ZW5kcyBmcHtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25DYW5jZWx9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkNhbmNlbChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIHNiIGV4dGVu''@;'; put 'put ''ZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnJlYXNvbj1kLHRoaXMuY29kZT1oLHRoaXMudHlwZT1Scy5OYXZpZ2F0aW9uU2tpcHBlZH19Y2xhc3MgelIgZXh0ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMuZXJyb3I9ZCx0aGlz''@;'; put 'put ''LnRhcmdldD1oLHRoaXMudHlwZT1Scy5OYXZpZ2F0aW9uRXJyb3J9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9KWB9fWNsYXNzIFBsZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUm91dGVzUmVjb2duaXplZH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFm''@;'; put 'put ''dGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHp4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5''@;'; put 'put ''cGU9UnMuR3VhcmRzQ2hlY2tTdGFydH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9''@;'; put 'put ''fWNsYXNzIFV4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9UnMuR3VhcmRzQ2hlY2tFbmR9dG9TdHJpbmcoKXtyZXR1cm5gR3Vh''@;'; put 'put ''cmRzQ2hlY2tFbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hvdWxkQWN0aXZhdGV9KWB9fWNsYXNz''@;'; put 'put ''IFp4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUmVzb2x2ZVN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAn''@;'; put 'put ''JHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBXeGUgZXh0ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0''@;'; put 'put ''aGlzLnN0YXRlPWgsdGhpcy50eXBlPVJzLlJlc29sdmVFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0''@;'; put 'put ''YXRlfSlgfX1jbGFzcyBZeGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Scy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19Y2xhc3MgR3hle2NvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3RoaXMucm91dGU9bCx0aGlzLnR5cGU9UnMuUm91dGVDb25maWdMb2FkRW5kfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19Y2xhc3MgJHhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5''@;'; put 'put ''cGU9UnMuQ2hpbGRBY3RpdmF0aW9uU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEt4ZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVJzLkNoaWxkQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNs''@;'; put 'put ''YXNzIHF4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVJzLkFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5w''@;'; put 'put ''YXRofHwiIn0nKWB9fWNsYXNzIFh4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVJzLkFjdGl2YXRpb25FbmR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJv''@;'; put 'put ''dXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgRmxle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlckV2ZW50PWwsdGhpcy5wb3NpdGlvbj1hLHRoaXMuYW5jaG9yPWQsdGhpcy50eXBlPVJzLlNjcm9sbH10b1N0cmluZygpe3JldHVybmBTY3JvbGwoYW5jaG9yOiAnJHt0aGlzLmFu''@;'; put 'put ''Y2hvcn0nLCBwb3NpdGlvbjogJyR7dGhpcy5wb3NpdGlvbj9gJHt0aGlzLnBvc2l0aW9uWzBdfSwgJHt0aGlzLnBvc2l0aW9uWzFdfWA6bnVsbH0nKWB9fWNsYXNzIFFae31jbGFzcyBlV3tjb25zdHJ1Y3RvcihsKXt0aGlzLnVybD1sfX1jbGFzcyBKeGV7Y29uc3RydWN0b3IoKXt0aGlzLm91''@;'; put 'put ''dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51bGwsdGhpcy5jaGlsZHJlbj1uZXcgcU0sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IHFNPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQo''@;'; put 'put ''YSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gub3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9u''@;'; put 'put ''T3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4g''@;'; put 'put ''ZHx8KGQ9bmV3IEp4ZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdldENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFu''@;'; put 'put ''KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIEhsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhG''@;'; put 'put ''cm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29uc3QgYT10VyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT10VyhsLHRoaXMuX3Jvb3QpO3Jl''@;'; put 'put ''dHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhsKXtjb25zdCBhPW5XKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1s''@;'; put 'put ''KX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuIG5XKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5jdGlvbiB0VyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9dFcoYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBu''@;'; put 'put ''dWxsfWZ1bmN0aW9uIG5XKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9blcoYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgR2Z7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZh''@;'; put 'put ''bHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0pYH19ZnVuY3Rpb24gbGIoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgTmxlIGV4dGVuZHMg''@;'; put 'put ''SGxle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCksdGhpcy5zbmFwc2hvdD1hLGFXKHRoaXMsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdC50b1N0cmluZygpfX1mdW5jdGlvbiBWbGUoYyl7Y29uc3QgbD1mdW5jdGlvbiBReGUoYyl7Y29uc3QgZj1uZXcgaVcoW10se30se30s''@;'; put 'put ''IiIse30sS28sYyxudWxsLHt9KTtyZXR1cm4gbmV3IEJsZSgiIixuZXcgR2YoZixbXSkpfShjKSxhPW5ldyBlaShbbmV3IFdNKCIiLHt9KV0pLGQ9bmV3IGVpKHt9KSxoPW5ldyBlaSh7fSksZj1uZXcgZWkoe30pLHY9bmV3IGVpKCIiKSxNPW5ldyBDdShhLGQsZix2LGgsS28sYyxsLnJvb3Qp''@;'; put 'put ''O3JldHVybiBNLnNuYXBzaG90PWwucm9vdCxuZXcgTmxlKG5ldyBHZihNLFtdKSxsKX1jbGFzcyBDdXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEkpe3RoaXMudXJsU3ViamVjdD1sLHRoaXMucGFyYW1zU3ViamVjdD1hLHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0PWQsdGhpcy5mcmFnbWVu''@;'; put 'put ''dFN1YmplY3Q9aCx0aGlzLmRhdGFTdWJqZWN0PWYsdGhpcy5vdXRsZXQ9dix0aGlzLmNvbXBvbmVudD1NLHRoaXMuX2Z1dHVyZVNuYXBzaG90PUksdGhpcy50aXRsZT10aGlzLmRhdGFTdWJqZWN0Py5waXBlKExyKEc9PkdbWk1dKSk/P2ZvKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFt''@;'; put 'put ''cz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRlQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9v''@;'; put 'put ''dCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwPz89dGhpcy5wYXJhbXMucGlwZShMcihsPT5uYihsKSkpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3F1ZXJ5UGFyYW1NYXA/Pz10aGlzLnF1ZXJ5UGFyYW1zLnBpcGUoTHIobD0+bmIobCkpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc25hcHNob3Q/dGhpcy5zbmFwc2hvdC50b1N0cmluZygpOmBGdXR1cmUoJHt0aGlzLl9mdXR1cmVTbmFwc2hvdH0pYH19''@;'; put 'put ''ZnVuY3Rpb24gclcoYyxsLGE9ImVtcHR5T25seSIpe2xldCBkO2NvbnN0e3JvdXRlQ29uZmlnOmh9PWM7cmV0dXJuIGQ9bnVsbD09PWx8fCJhbHdheXMiIT09YSYmIiIhPT1oPy5wYXRoJiYobC5jb21wb25lbnR8fGwucm91dGVDb25maWc/LmxvYWRDb21wb25lbnQpP3twYXJhbXM6ey4uLmMu''@;'; put 'put ''cGFyYW1zfSxkYXRhOnsuLi5jLmRhdGF9LHJlc29sdmU6ey4uLmMuZGF0YSwuLi5jLl9yZXNvbHZlZERhdGE/P3t9fX06e3BhcmFtczp7Li4ubC5wYXJhbXMsLi4uYy5wYXJhbXN9LGRhdGE6ey4uLmwuZGF0YSwuLi5jLmRhdGF9LHJlc29sdmU6ey4uLmMuZGF0YSwuLi5sLmRhdGEsLi4uaD8u''@;'; put 'put ''ZGF0YSwuLi5jLl9yZXNvbHZlZERhdGF9fSxoJiZ6bGUoaCkmJihkLnJlc29sdmVbWk1dPWgudGl0bGUpLGR9Y2xhc3MgaVd7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGF0YT8uW1pNXX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEksRyl7dGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRo''@;'; put 'put ''aXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWYsdGhpcy5vdXRsZXQ9dix0aGlzLmNvbXBvbmVudD1NLHRoaXMucm91dGVDb25maWc9SSx0aGlzLl9yZXNvbHZlPUd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21S''@;'; put 'put ''b290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz1uYih0aGlzLnBhcmFtcyksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1h''@;'; put 'put ''cD8/PW5iKHRoaXMucXVlcnlQYXJhbXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGUodXJsOicke3RoaXMudXJsLm1hcChkPT5kLnRvU3RyaW5nKCkpLmpvaW4oIi8iKX0nLCBwYXRoOicke3RoaXMucm91dGVDb25maWc/dGhpcy5yb3V0ZUNvbmZpZy5wYXRo''@;'; put 'put ''OiIifScpYH19Y2xhc3MgQmxlIGV4dGVuZHMgSGxle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoYSksdGhpcy51cmw9bCxhVyh0aGlzLGEpfXRvU3RyaW5nKCl7cmV0dXJuIGpsZSh0aGlzLl9yb290KX19ZnVuY3Rpb24gYVcoYyxsKXtsLnZhbHVlLl9yb3V0ZXJTdGF0ZT1jLGwuY2hpbGRyZW4u''@;'; put 'put ''Zm9yRWFjaChhPT5hVyhjLGEpKX1mdW5jdGlvbiBqbGUoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGpsZSkuam9pbigiLCAiKX0gfSBgOiIiO3JldHVybmAke2MudmFsdWV9JHtsfWB9ZnVuY3Rpb24gb1coYyl7aWYoYy5zbmFwc2hvdCl7Y29u''@;'; put 'put ''c3QgbD1jLnNuYXBzaG90LGE9Yy5fZnV0dXJlU25hcHNob3Q7Yy5zbmFwc2hvdD1hLGhwKGwucXVlcnlQYXJhbXMsYS5xdWVyeVBhcmFtcyl8fGMucXVlcnlQYXJhbXNTdWJqZWN0Lm5leHQoYS5xdWVyeVBhcmFtcyksbC5mcmFnbWVudCE9PWEuZnJhZ21lbnQmJmMuZnJhZ21lbnRTdWJqZWN0''@;'; put 'put ''Lm5leHQoYS5mcmFnbWVudCksaHAobC5wYXJhbXMsYS5wYXJhbXMpfHxjLnBhcmFtc1N1YmplY3QubmV4dChhLnBhcmFtcyksZnVuY3Rpb24gbXhlKGMsbCl7aWYoYy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPGMubGVuZ3RoOysrYSlpZighaHAoY1thXSxsW2Fd''@;'; put 'put ''KSlyZXR1cm4hMTtyZXR1cm4hMH0obC51cmwsYS51cmwpfHxjLnVybFN1YmplY3QubmV4dChhLnVybCksaHAobC5kYXRhLGEuZGF0YSl8fGMuZGF0YVN1YmplY3QubmV4dChhLmRhdGEpfWVsc2UgYy5zbmFwc2hvdD1jLl9mdXR1cmVTbmFwc2hvdCxjLmRhdGFTdWJqZWN0Lm5leHQoYy5fZnV0''@;'; put 'put ''dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gc1coYyxsKXtjb25zdCBhPWhwKGMucGFyYW1zLGwucGFyYW1zKSYmZnVuY3Rpb24gX3hlKGMsbCl7cmV0dXJuIEo4KGMsbCkmJmMuZXZlcnkoKGEsZCk9PmhwKGEucGFyYW1ldGVycyxsW2RdLnBhcmFtZXRlcnMpKX0oYy51cmwsbC51cmwpO3Jl''@;'; put 'put ''dHVybiBhJiYhKCFjLnBhcmVudCE9IWwucGFyZW50KSYmKCFjLnBhcmVudHx8c1coYy5wYXJlbnQsbC5wYXJlbnQpKX1mdW5jdGlvbiB6bGUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1sZXQgcmc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3RoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLm5hbWU9S28sdGhpcy5hY3RpdmF0ZUV2ZW50cz1uZXcgS3IsdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyBLcix0aGlzLmF0dGFjaEV2ZW50cz1uZXcgS3IsdGhpcy5kZXRhY2hFdmVudHM9bmV3IEty''@;'; put 'put ''LHRoaXMucGFyZW50Q29udGV4dHM9ZmkocU0pLHRoaXMubG9jYXRpb249ZmkoRG8pLHRoaXMuY2hhbmdlRGV0ZWN0b3I9ZmkoRXMpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy5pbnB1dEJpbmRlcj1maShVUix7b3B0aW9uYWw6ITB9KSx0aGlzLnN1cHBvcnRzQmluZGlu''@;'; put 'put ''Z1RvQ29tcG9uZW50SW5wdXRzPSEwfWdldCBhY3RpdmF0ZWRDb21wb25lbnRSZWYoKXtyZXR1cm4gdGhpcy5hY3RpdmF0ZWR9bmdPbkNoYW5nZXMoYSl7aWYoYS5uYW1lKXtjb25zdHtmaXJzdENoYW5nZTpkLHByZXZpb3VzVmFsdWU6aH09YS5uYW1lO2lmKGQpcmV0dXJuO3RoaXMuaXNUcmFj''@;'; put 'put ''a2VkSW5QYXJlbnRDb250ZXh0cyhoKSYmKHRoaXMuZGVhY3RpdmF0ZSgpLHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZChoKSksdGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX19bmdPbkRlc3Ryb3koKXt0aGlzLmlzVHJhY2tlZEluUGFyZW50Q29udGV4''@;'; put 'put ''dHModGhpcy5uYW1lKSYmdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSksdGhpcy5pbnB1dEJpbmRlcj8udW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHRoaXMpfWlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoYSl7cmV0dXJuIHRoaXMucGFyZW50''@;'; put 'put ''Q29udGV4dHMuZ2V0Q29udGV4dChhKT8ub3V0bGV0PT09dGhpc31uZ09uSW5pdCgpe3RoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9aW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl7aWYodGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0aGlzLm5hbWUsdGhp''@;'; put 'put ''cyksdGhpcy5hY3RpdmF0ZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7YT8ucm91dGUmJihhLmF0dGFjaFJlZj90aGlzLmF0dGFjaChhLmF0dGFjaFJlZixhLnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aChhLnJvdXRlLGEuaW5qZWN0''@;'; put 'put ''b3IpKX1nZXQgaXNBY3RpdmF0ZWQoKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfWdldCBjb21wb25lbnQoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX1nZXQgYWN0aXZhdGVkUm91dGUoKXtpZighdGhpcy5h''@;'; put 'put ''Y3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZX1nZXQgYWN0aXZhdGVkUm91dGVEYXRhKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319ZGV0YWNoKCl7aWYoIXRo''@;'; put 'put ''aXMuYWN0aXZhdGVkKXRocm93IG5ldyBRbig0MDEyLCExKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRldGFjaEV2ZW50cy5lbWl0KGEuaW5zdGFu''@;'; put 'put ''Y2UpLGF9YXR0YWNoKGEsZCl7dGhpcy5hY3RpdmF0ZWQ9YSx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1kLHRoaXMubG9jYXRpb24uaW5zZXJ0KGEuaG9zdFZpZXcpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYXR0YWNoRXZl''@;'; put 'put ''bnRzLmVtaXQoYS5pbnN0YW5jZSl9ZGVhY3RpdmF0ZSgpe2lmKHRoaXMuYWN0aXZhdGVkKXtjb25zdCBhPXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZWFjdGl2YXRlRXZl''@;'; put 'put ''bnRzLmVtaXQoYSl9fWFjdGl2YXRlV2l0aChhLGQpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTMsITEpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPWE7Y29uc3QgaD10aGlzLmxvY2F0aW9uLHY9YS5zbmFwc2hvdC5jb21wb25lbnQsTT10aGlzLnBhcmVudENvbnRleHRzLmdl''@;'; put 'put ''dE9yQ3JlYXRlQ29udGV4dCh0aGlzLm5hbWUpLmNoaWxkcmVuLEk9bmV3IGxXKGEsTSxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudCh2LHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpJLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudElu''@;'; put 'put ''amVjdG9yfSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0''@;'; put 'put ''aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBsV3tfX25nT3V0bGV0SW5qZWN0b3IobCl7''@;'; put 'put ''cmV0dXJuIG5ldyBsVyh0aGlzLnJvdXRlLHRoaXMuY2hpbGRDb250ZXh0cyxsKX1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5yb3V0ZT1sLHRoaXMuY2hpbGRDb250ZXh0cz1hLHRoaXMucGFyZW50PWR9Z2V0KGwsYSl7cmV0dXJuIGw9PT1DdT90aGlzLnJvdXRlOmw9PT1xTT90aGlzLmNoaWxk''@;'; put 'put ''Q29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KGwsYSl9fWNvbnN0IFVSPW5ldyBNdCgiIik7bGV0IFVsZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucz1uZXcgTWFwfWJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KGEpe3Ro''@;'; put 'put ''aXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpLHRoaXMuc3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl9dW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpe3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuZ2V0KGEpPy51bnN1YnNjcmliZSgpLHRoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlv''@;'; put 'put ''bnMuZGVsZXRlKGEpfXN1YnNjcmliZVRvUm91dGVEYXRhKGEpe2NvbnN0e2FjdGl2YXRlZFJvdXRlOmR9PWEsaD1xOChbZC5xdWVyeVBhcmFtcyxkLnBhcmFtcyxkLmRhdGFdKS5waXBlKFYxKChbZix2LE1dLEkpPT4oTT17Li4uZiwuLi52LC4uLk19LDA9PT1JP2ZvKE0pOlByb21pc2UucmVz''@;'; put 'put ''b2x2ZShNKSkpKS5zdWJzY3JpYmUoZj0+e2lmKCFhLmlzQWN0aXZhdGVkfHwhYS5hY3RpdmF0ZWRDb21wb25lbnRSZWZ8fGEuYWN0aXZhdGVkUm91dGUhPT1kfHxudWxsPT09ZC5jb21wb25lbnQpcmV0dXJuIHZvaWQgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSk7Y29uc3Qgdj1m''@;'; put 'put ''dW5jdGlvbiBoX2UoYyl7Y29uc3QgbD1WbyhjKTtpZighbClyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBrOChsKTtyZXR1cm57Z2V0IHNlbGVjdG9yKCl7cmV0dXJuIGEuc2VsZWN0b3J9LGdldCB0eXBlKCl7cmV0dXJuIGEuY29tcG9uZW50VHlwZX0sZ2V0IGlucHV0cygpe3JldHVybiBhLmlu''@;'; put 'put ''cHV0c30sZ2V0IG91dHB1dHMoKXtyZXR1cm4gYS5vdXRwdXRzfSxnZXQgbmdDb250ZW50U2VsZWN0b3JzKCl7cmV0dXJuIGEubmdDb250ZW50U2VsZWN0b3JzfSxnZXQgaXNTdGFuZGFsb25lKCl7cmV0dXJuIGwuc3RhbmRhbG9uZX0sZ2V0IGlzU2lnbmFsKCl7cmV0dXJuIGwuc2lnbmFsc319''@;'; put 'put ''fShkLmNvbXBvbmVudCk7aWYodilmb3IoY29uc3R7dGVtcGxhdGVOYW1lOk19b2Ygdi5pbnB1dHMpYS5hY3RpdmF0ZWRDb21wb25lbnRSZWYuc2V0SW5wdXQoTSxmW01dKTtlbHNlIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpfSk7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9u''@;'; put 'put ''cy5zZXQoYSxoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBYTShjLGwsYSl7aWYoYSYmYy5zaG91''@;'; put 'put ''bGRSZXVzZVJvdXRlKGwudmFsdWUsYS52YWx1ZS5zbmFwc2hvdCkpe2NvbnN0IGQ9YS52YWx1ZTtkLl9mdXR1cmVTbmFwc2hvdD1sLnZhbHVlO2NvbnN0IGg9ZnVuY3Rpb24gdEVlKGMsbCxhKXtyZXR1cm4gbC5jaGlsZHJlbi5tYXAoZD0+e2Zvcihjb25zdCBoIG9mIGEuY2hpbGRyZW4paWYo''@;'; put 'put ''Yy5zaG91bGRSZXVzZVJvdXRlKGQudmFsdWUsaC52YWx1ZS5zbmFwc2hvdCkpcmV0dXJuIFhNKGMsZCxoKTtyZXR1cm4gWE0oYyxkKX0pfShjLGwsYSk7cmV0dXJuIG5ldyBHZihkLGgpfXtpZihjLnNob3VsZEF0dGFjaChsLnZhbHVlKSl7Y29uc3QgZj1jLnJldHJpZXZlKGwudmFsdWUpO2lm''@;'; put 'put ''KG51bGwhPT1mKXtjb25zdCB2PWYucm91dGU7cmV0dXJuIHYudmFsdWUuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWUsdi5jaGlsZHJlbj1sLmNoaWxkcmVuLm1hcChNPT5YTShjLE0pKSx2fX1jb25zdCBkPWZ1bmN0aW9uIG5FZShjKXtyZXR1cm4gbmV3IEN1KG5ldyBlaShjLnVybCksbmV3IGVp''@;'; put 'put ''KGMucGFyYW1zKSxuZXcgZWkoYy5xdWVyeVBhcmFtcyksbmV3IGVpKGMuZnJhZ21lbnQpLG5ldyBlaShjLmRhdGEpLGMub3V0bGV0LGMuY29tcG9uZW50LGMpfShsLnZhbHVlKSxoPWwuY2hpbGRyZW4ubWFwKGY9PlhNKGMsZikpO3JldHVybiBuZXcgR2YoZCxoKX19Y29uc3QgWmxlPSJuZ05h''@;'; put 'put ''dmlnYXRpb25DYW5jZWxpbmdFcnJvciI7ZnVuY3Rpb24gV2xlKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09YWIobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOnZvaWQgMH06bCxoPVlsZSghMSxwaC5SZWRpcmVj''@;'; put 'put ''dCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBZbGUoYyxsKXtjb25zdCBhPW5ldyBFcnJvcihgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiAke2N8fCIifWApO3JldHVybiBhW1psZV09ITAsYS5jYW5jZWxsYXRpb25Db2RlPWwsYX1m''@;'; put 'put ''dW5jdGlvbiBHbGUoYyl7cmV0dXJuISFjJiZjW1psZV19bGV0ICRsZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50''@;'; put 'put ''Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3FJXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGNXKGMpe2Nv''@;'; put 'put ''bnN0IGw9Yy5jaGlsZHJlbiYmYy5jaGlsZHJlbi5tYXAoY1cpLGE9bD97Li4uYyxjaGlsZHJlbjpsfTp7Li4uY307cmV0dXJuIWEuY29tcG9uZW50JiYhYS5sb2FkQ29tcG9uZW50JiYobHx8YS5sb2FkQ2hpbGRyZW4pJiZhLm91dGxldCYmYS5vdXRsZXQhPT1LbyYmKGEuY29tcG9uZW50PSRs''@;'; put 'put ''ZSksYX1mdW5jdGlvbiBncChjKXtyZXR1cm4gYy5vdXRsZXR8fEtvfWZ1bmN0aW9uIEpNKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4gYy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7''@;'; put 'put ''Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1cm4gbnVsbH1jbGFzcyB1RWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VT''@;'; put 'put ''dHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29uc3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3Rh''@;'; put 'put ''dGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksb1codGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sYihhKTtsLmNoaWxkcmVuLmZvckVh''@;'; put 'put ''Y2goZj0+e2NvbnN0IHY9Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFt2XSxkKSxkZWxldGUgaFt2XX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhs''@;'; put 'put ''LGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IHY9ZC5nZXRDb250ZXh0KGgub3V0bGV0KTt2JiZ0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsdi5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGls''@;'; put 'put ''ZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNvbXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25h''@;'; put 'put ''cHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGwsYSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21w''@;'; put 'put ''b25lbnQ/ZC5jaGlsZHJlbjphLGY9bGIobCk7Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LnZhbHVlcyhmKSl0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHYsaCk7aWYoZCYmZC5vdXRsZXQpe2NvbnN0IHY9ZC5vdXRsZXQuZGV0YWNoKCksTT1kLmNoaWxkcmVuLm9uT3V0bGV0RGVh''@;'; put 'put ''Y3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZShsLnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6dixyb3V0ZTpsLGNvbnRleHRzOk19KX19ZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9''@;'; put 'put ''ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9bGIobCk7Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LnZhbHVlcyhmKSl0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHYsaCk7ZCYmKGQub3V0bGV0JiYoZC5vdXRsZXQuZGVhY3RpdmF0ZSgpLGQuY2hpbGRyZW4ub25P''@;'; put 'put ''dXRsZXREZWFjdGl2YXRlZCgpKSxkLmF0dGFjaFJlZj1udWxsLGQucm91dGU9bnVsbCl9YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sYihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e3RoaXMuYWN0aXZhdGVSb3V0ZXMoZixoW2YudmFsdWUub3V0bGV0XSxkKSx0aGlzLmZv''@;'; put 'put ''cndhcmRFdmVudChuZXcgWHhlKGYudmFsdWUuc25hcHNob3QpKX0pLGwuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgS3hlKGwudmFsdWUuc25hcHNob3QpKX1hY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYob1co''@;'; put 'put ''aCksaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IHY9ZC5nZXRPckNyZWF0ZUNvbnRleHQoaC5vdXRsZXQpO3RoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsdi5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpO2Vsc2UgaWYoaC5jb21wb25lbnQpe2Nv''@;'; put 'put ''bnN0IHY9ZC5nZXRPckNyZWF0ZUNvbnRleHQoaC5vdXRsZXQpO2lmKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZEF0dGFjaChoLnNuYXBzaG90KSl7Y29uc3QgTT10aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5yZXRyaWV2ZShoLnNuYXBzaG90KTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVn''@;'; put 'put ''eS5zdG9yZShoLnNuYXBzaG90LG51bGwpLHYuY2hpbGRyZW4ub25PdXRsZXRSZUF0dGFjaGVkKE0uY29udGV4dHMpLHYuYXR0YWNoUmVmPU0uY29tcG9uZW50UmVmLHYucm91dGU9TS5yb3V0ZS52YWx1ZSx2Lm91dGxldCYmdi5vdXRsZXQuYXR0YWNoKE0uY29tcG9uZW50UmVmLE0ucm91dGUu''@;'; put 'put ''dmFsdWUpLG9XKE0ucm91dGUudmFsdWUpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsdi5jaGlsZHJlbil9ZWxzZXtjb25zdCBNPUpNKGguc25hcHNob3QpO3YuYXR0YWNoUmVmPW51bGwsdi5yb3V0ZT1oLHYuaW5qZWN0b3I9TSx2Lm91dGxldCYmdi5vdXRsZXQuYWN0aXZhdGVX''@;'; put 'put ''aXRoKGgsdi5pbmplY3RvciksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX19ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLGQpfX1jbGFzcyBLbGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXRoPWwsdGhpcy5yb3V0ZT10aGlzLnBhdGhbdGhp''@;'; put 'put ''cy5wYXRoLmxlbmd0aC0xXX19Y2xhc3MgWlJ7Y29uc3RydWN0b3IobCxhKXt0aGlzLmNvbXBvbmVudD1sLHRoaXMucm91dGU9YX19ZnVuY3Rpb24gZEVlKGMsbCxhKXtjb25zdCBkPWMuX3Jvb3Q7cmV0dXJuIFFNKGQsbD9sLl9yb290Om51bGwsYSxbZC52YWx1ZV0pfWZ1bmN0aW9uIGNiKGMs''@;'; put 'put ''bCl7Y29uc3QgYT1TeW1ib2woKSxkPWwuZ2V0KGMsYSk7cmV0dXJuIGQ9PT1hPyJmdW5jdGlvbiIhPXR5cGVvZiBjfHxmdW5jdGlvbiBlbyhjKXtyZXR1cm4gbnVsbCE9PVBvKGMpfShjKT9sLmdldChjKTpjOmR9ZnVuY3Rpb24gUU0oYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltd''@;'; put 'put ''LGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1sYihsKTtyZXR1cm4gYy5jaGlsZHJlbi5mb3JFYWNoKHY9PnsoZnVuY3Rpb24gZkVlKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9Yy52YWx1ZSx2PWw/bC52YWx1''@;'; put 'put ''ZTpudWxsLE09YT9hLmdldENvbnRleHQoYy52YWx1ZS5vdXRsZXQpOm51bGw7aWYodiYmZi5yb3V0ZUNvbmZpZz09PXYucm91dGVDb25maWcpe2NvbnN0IEk9ZnVuY3Rpb24gcEVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlyZXR1cm4gYShjLGwpO3N3aXRjaChhKXtjYXNlInBh''@;'; put 'put ''dGhQYXJhbXNDaGFuZ2UiOnJldHVybiFKOChjLnVybCxsLnVybCk7Y2FzZSJwYXRoUGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIUo4KGMudXJsLGwudXJsKXx8IWhwKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1z''@;'; put 'put ''T3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIXNXKGMsbCl8fCFocChjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2RlZmF1bHQ6cmV0dXJuIXNXKGMsbCl9fSh2LGYsZi5yb3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpO0k/aC5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5l''@;'; put 'put ''dyBLbGUoZCkpOihmLmRhdGE9di5kYXRhLGYuX3Jlc29sdmVkRGF0YT12Ll9yZXNvbHZlZERhdGEpLFFNKGMsbCxmLmNvbXBvbmVudD9NP00uY2hpbGRyZW46bnVsbDphLGQsaCksSSYmTSYmTS5vdXRsZXQmJk0ub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVz''@;'; put 'put ''aChuZXcgWlIoTS5vdXRsZXQuY29tcG9uZW50LHYpKX1lbHNlIHYmJmV4KGwsTSxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEtsZShkKSksUU0oYyxudWxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKX0pKHYsZlt2LnZhbHVlLm91dGxldF0sYSxkLmNvbmNh''@;'; put 'put ''dChbdi52YWx1ZV0pLGgpLGRlbGV0ZSBmW3YudmFsdWUub3V0bGV0XX0pLE9iamVjdC5lbnRyaWVzKGYpLmZvckVhY2goKFt2LE1dKT0+ZXgoTSxhLmdldENvbnRleHQodiksaCkpLGh9ZnVuY3Rpb24gZXgoYyxsLGEpe2NvbnN0IGQ9bGIoYyksaD1jLnZhbHVlO09iamVjdC5lbnRyaWVzKGQp''@;'; put 'put ''LmZvckVhY2goKFtmLHZdKT0+e2V4KHYsaC5jb21wb25lbnQ/bD9sLmNoaWxkcmVuLmdldENvbnRleHQoZik6bnVsbDpsLGEpfSksYS5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IFpSKGguY29tcG9uZW50JiZsJiZsLm91dGxldCYmbC5vdXRsZXQuaXNBY3RpdmF0ZWQ/bC5vdXRsZXQu''@;'; put 'put ''Y29tcG9uZW50Om51bGwsaCkpfWZ1bmN0aW9uIHR4KGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIHFsZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFJSfHwiRW1wdHlFcnJvciI9PT1jPy5uYW1lfWNvbnN0IFdSPVN5bWJvbCgiSU5JVElBTF9WQUxVRSIpO2Z1bmN0aW9u''@;'; put 'put ''IHViKCl7cmV0dXJuIFYxKGM9PnE4KGMubWFwKGw9PmwucGlwZShZZigxKSx4MihXUikpKSkucGlwZShMcihsPT57Zm9yKGNvbnN0IGEgb2YgbClpZighMCE9PWEpe2lmKGE9PT1XUilyZXR1cm4gV1I7aWYoITE9PT1hfHxhIGluc3RhbmNlb2YgcmIpcmV0dXJuIGF9cmV0dXJuITB9KSwkbChs''@;'; put 'put ''PT5sIT09V1IpLFlmKDEpKSl9ZnVuY3Rpb24gWGxlKGMpe3JldHVybiBmdW5jdGlvbiBmbiguLi5jKXtyZXR1cm4gSWkoYyl9KEd1KGw9PntpZihhYihsKSl0aHJvdyBXbGUoMCxsKX0pLExyKGw9PiEwPT09bCkpfWNsYXNzIHVXe2NvbnN0cnVjdG9yKGwpe3RoaXMuc2VnbWVudEdyb3VwPWx8''@;'; put 'put ''fG51bGx9fWNsYXNzIGRXIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnVybFRyZWU9bH19ZnVuY3Rpb24gZGIoYyl7cmV0dXJuIHpNKG5ldyB1VyhjKSl9Y2xhc3MgTEVle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy51cmxTZXJpYWxpemVyPWwsdGhpcy51cmxUcmVl''@;'; put 'put ''PWF9bGluZXJhbGl6ZVNlZ21lbnRzKGwsYSl7bGV0IGQ9W10saD1hLnJvb3Q7Zm9yKDs7KXtpZihkPWQuY29uY2F0KGguc2VnbWVudHMpLDA9PT1oLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIGZvKGQpO2lmKGgubnVtYmVyT2ZDaGlsZHJlbj4xfHwhaC5jaGlsZHJlbltLb10pcmV0dXJuIHpN''@;'; put 'put ''KG5ldyBRbig0ZTMsITEpKTtoPWguY2hpbGRyZW5bS29dfX1hcHBseVJlZGlyZWN0Q29tbWFuZHMobCxhLGQpe2NvbnN0IGg9dGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpO2lmKGEuc3RhcnRzV2l0aCgiLyIpKXRocm93''@;'; put 'put ''IG5ldyBkVyhoKTtyZXR1cm4gaH1hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKGwsYS5yb290LGQsaCk7cmV0dXJuIG5ldyByYihmLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoYS5xdWVyeVBhcmFtcyx0aGlzLnVybFRy''@;'; put 'put ''ZWUucXVlcnlQYXJhbXMpLGEuZnJhZ21lbnQpfWNyZWF0ZVF1ZXJ5UGFyYW1zKGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2gsZl0pPT57aWYoInN0cmluZyI9PXR5cGVvZiBmJiZmLnN0YXJ0c1dpdGgoIjoiKSl7Y29uc3QgTT1mLnN1YnN0cmlu''@;'; put 'put ''ZygxKTtkW2hdPWFbTV19ZWxzZSBkW2hdPWZ9KSxkfWNyZWF0ZVNlZ21lbnRHcm91cChsLGEsZCxoKXtjb25zdCBmPXRoaXMuY3JlYXRlU2VnbWVudHMobCxhLnNlZ21lbnRzLGQsaCk7bGV0IHY9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGEuY2hpbGRyZW4pLmZvckVhY2goKFtNLEldKT0+''@;'; put 'put ''e3ZbTV09dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxJLGQsaCl9KSxuZXcgS2woZix2KX1jcmVhdGVTZWdtZW50cyhsLGEsZCxoKXtyZXR1cm4gYS5tYXAoZj0+Zi5wYXRoLnN0YXJ0c1dpdGgoIjoiKT90aGlzLmZpbmRQb3NQYXJhbShsLGYsaCk6dGhpcy5maW5kT3JSZXR1cm4oZixkKSl9''@;'; put 'put ''ZmluZFBvc1BhcmFtKGwsYSxkKXtjb25zdCBoPWRbYS5wYXRoLnN1YnN0cmluZygxKV07aWYoIWgpdGhyb3cgbmV3IFFuKDQwMDEsITEpO3JldHVybiBofWZpbmRPclJldHVybihsLGEpe2xldCBkPTA7Zm9yKGNvbnN0IGggb2YgYSl7aWYoaC5wYXRoPT09bC5wYXRoKXJldHVybiBhLnNwbGlj''@;'; put 'put ''ZShkKSxoO2QrK31yZXR1cm4gbH19Y29uc3QgaFc9e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czpbXSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtmdW5jdGlvbiBPRWUoYyxsLGEsZCxoKXtjb25zdCBmPWZXKGMsbCxh''@;'; put 'put ''KTtyZXR1cm4gZi5tYXRjaGVkPyhkPWZ1bmN0aW9uIGlFZShjLGwpe3JldHVybiBjLnByb3ZpZGVycyYmIWMuX2luamVjdG9yJiYoYy5faW5qZWN0b3I9RzQoYy5wcm92aWRlcnMsbCxgUm91dGU6ICR7Yy5wYXRofWApKSxjLl9pbmplY3Rvcj8/bH0obCxkKSxmdW5jdGlvbiBERWUoYyxsLGEs''@;'; put 'put ''ZCl7Y29uc3QgaD1sLmNhbk1hdGNoO3JldHVybiBoJiYwIT09aC5sZW5ndGg/Zm8oaC5tYXAodj0+e2NvbnN0IE09Y2IodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gX0VlKGMpe3JldHVybiBjJiZ0eChjLmNhbk1hdGNoKX0oTSk/TS5jYW5NYXRjaChsLGEpOnEwKGMsKCk9Pk0obCxhKSkpfSkp''@;'; put 'put ''LnBpcGUodWIoKSxYbGUoKSk6Zm8oITApfShkLGwsYSkucGlwZShMcih2PT4hMD09PXY/Zjp7Li4uaFd9KSkpOmZvKGYpfWZ1bmN0aW9uIGZXKGMsbCxhKXtpZigiKioiPT09bC5wYXRoKXJldHVybiBmdW5jdGlvbiBQRWUoYyl7cmV0dXJue21hdGNoZWQ6ITAscGFyYW1ldGVyczpjLmxlbmd0''@;'; put 'put ''aD4wP3ZsZShjKS5wYXJhbWV0ZXJzOnt9LGNvbnN1bWVkU2VnbWVudHM6YyxyZW1haW5pbmdTZWdtZW50czpbXSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19KGEpO2lmKCIiPT09bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0''@;'; put 'put ''aD4wKT97Li4uaFd9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTtjb25zdCBoPShsLm1hdGNoZXJ8fGd4ZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5oV307Y29uc3Qg''@;'; put 'put ''Zj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtNLEldKT0+e2ZbTV09SS5wYXRofSk7Y29uc3Qgdj1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4uLmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hl''@;'; put 'put ''ZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczp2LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gSmxlKGMsbCxhLGQpe3JldHVybiBhLmxl''@;'; put 'put ''bmd0aD4wJiZmdW5jdGlvbiBORWUoYyxsLGEpe3JldHVybiBhLnNvbWUoZD0+WVIoYyxsLGQpJiZncChkKSE9PUtvKX0oYyxhLGQpP3tzZWdtZW50R3JvdXA6bmV3IEtsKGwsSEVlKGQsbmV3IEtsKGEsYy5jaGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpbXX06MD09PWEubGVuZ3RoJiZmdW5j''@;'; put 'put ''dGlvbiBWRWUoYyxsLGEpe3JldHVybiBhLnNvbWUoZD0+WVIoYyxsLGQpKX0oYyxhLGQpP3tzZWdtZW50R3JvdXA6bmV3IEtsKGMuc2VnbWVudHMsRkVlKGMsYSxkLGMuY2hpbGRyZW4pKSxzbGljZWRTZWdtZW50czphfTp7c2VnbWVudEdyb3VwOm5ldyBLbChjLnNlZ21lbnRzLGMuY2hpbGRy''@;'; put 'put ''ZW4pLHNsaWNlZFNlZ21lbnRzOmF9fWZ1bmN0aW9uIEZFZShjLGwsYSxkKXtjb25zdCBoPXt9O2Zvcihjb25zdCBmIG9mIGEpaWYoWVIoYyxsLGYpJiYhZFtncChmKV0pe2NvbnN0IHY9bmV3IEtsKFtdLHt9KTtoW2dwKGYpXT12fXJldHVybnsuLi5kLC4uLmh9fWZ1bmN0aW9uIEhFZShjLGwp''@;'; put 'put ''e2NvbnN0IGE9e307YVtLb109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZncChkKSE9PUtvKXtjb25zdCBoPW5ldyBLbChbXSx7fSk7YVtncChkKV09aH1yZXR1cm4gYX1mdW5jdGlvbiBZUihjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8''@;'; put 'put ''ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyB6RWV7fWNsYXNzIFdFZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLmluamVjdG9yPWwsdGhpcy5jb25maWdMb2FkZXI9YSx0aGlzLnJvb3RDb21wb25lbnRUeXBlPWQsdGhpcy5jb25maWc9aCx0aGlzLnVy''@;'; put 'put ''bFRyZWU9Zix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dix0aGlzLnVybFNlcmlhbGl6ZXI9TSx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyBMRWUodGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSksdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ9MCx0aGlzLmFsbG93UmVk''@;'; put 'put ''aXJlY3RzPSEwfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IFFuKDQwMDIsYCcke2wuc2VnbWVudEdyb3VwfSdgKX1yZWNvZ25pemUoKXtjb25zdCBsPUpsZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLm1hdGNoKGwpLnBp''@;'; put 'put ''cGUoTHIoYT0+e2NvbnN0IGQ9bmV3IGlXKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoey4uLnRoaXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCx7fSxLbyx0aGlzLnJvb3RDb21wb25lbnRUeXBlLG51bGwse30pLGg9bmV3IEdmKGQsYSks''@;'; put 'put ''Zj1uZXcgQmxlKCIiLGgpLHY9ZnVuY3Rpb24gUHhlKGMsbCxhPW51bGwsZD1udWxsKXtyZXR1cm4ga2xlKEFsZShjKSxsLGEsZCl9KGQsW10sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5mcmFnbWVudCk7cmV0dXJuIHYucXVlcnlQYXJhbXM9dGhpcy51cmxUcmVlLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLGYudXJsPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodiksdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShmLl9yb290LG51bGwpLHtzdGF0ZTpmLHRyZWU6dn19KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmluamVjdG9yLHRo''@;'; put 'put ''aXMuY29uZmlnLGwsS28pLnBpcGUoWDgoZD0+e2lmKGQgaW5zdGFuY2VvZiBkVylyZXR1cm4gdGhpcy51cmxUcmVlPWQudXJsVHJlZSx0aGlzLm1hdGNoKGQudXJsVHJlZS5yb290KTt0aHJvdyBkIGluc3RhbmNlb2YgdVc/dGhpcy5ub01hdGNoRXJyb3IoZCk6ZH0pKX1pbmhlcml0UGFyYW1z''@;'; put 'put ''QW5kRGF0YShsLGEpe2NvbnN0IGQ9bC52YWx1ZSxoPXJXKGQsYSx0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO2QucGFyYW1zPU9iamVjdC5mcmVlemUoaC5wYXJhbXMpLGQuZGF0YT1PYmplY3QuZnJlZXplKGguZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGY9PnRoaXMuaW5oZXJp''@;'; put 'put ''dFBhcmFtc0FuZERhdGEoZixkKSl9cHJvY2Vzc1NlZ21lbnRHcm91cChsLGEsZCxoKXtyZXR1cm4gMD09PWQuc2VnbWVudHMubGVuZ3RoJiZkLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4obCxhLGQpOnRoaXMucHJvY2Vzc1NlZ21lbnQobCxhLGQsZC5zZWdtZW50cyxoLCEw''@;'; put 'put ''KS5waXBlKExyKGY9PmYgaW5zdGFuY2VvZiBHZj9bZl06W10pKX1wcm9jZXNzQ2hpbGRyZW4obCxhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgT2JqZWN0LmtleXMoZC5jaGlsZHJlbikpInByaW1hcnkiPT09Zj9oLnVuc2hpZnQoZik6aC5wdXNoKGYpO3JldHVybiBZdShoKS5waXBl''@;'; put 'put ''KHRiKGY9Pntjb25zdCB2PWQuY2hpbGRyZW5bZl0sTT1mdW5jdGlvbiBsRWUoYyxsKXtjb25zdCBhPWMuZmlsdGVyKGQ9PmdwKGQpPT09bCk7cmV0dXJuIGEucHVzaCguLi5jLmZpbHRlcihkPT5ncChkKSE9PWwpKSxhfShhLGYpO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAobCxN''@;'; put 'put ''LHYsZil9KSxmdW5jdGlvbiBkeGUoYyxsKXtyZXR1cm4gVmkoZnVuY3Rpb24gdXhlKGMsbCxhLGQsaCl7cmV0dXJuKGYsdik9PntsZXQgTT1hLEk9bCxHPTA7Zi5zdWJzY3JpYmUoTmkodixpZT0+e2NvbnN0IHVlPUcrKztJPU0/YyhJLGllLHVlKTooTT0hMCxpZSksZCYmdi5uZXh0KEkpfSxo''@;'; put 'put ''JiYoKCk9PntNJiZ2Lm5leHQoSSksdi5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLHYpPT4oZi5wdXNoKC4uLnYpLGYpKSxMUihudWxsKSxmdW5jdGlvbiBoeGUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlw''@;'; put 'put ''ZShjPyRsKChoLGYpPT5jKGgsZixkKSk6dW4sWVooMSksYT9MUihsKTpnbGUoKCk9Pm5ldyBSUikpfSgpLE4wKGY9PntpZihudWxsPT09ZilyZXR1cm4gZGIoZCk7Y29uc3Qgdj1RbGUoZik7cmV0dXJuIGZ1bmN0aW9uIFlFZShjKXtjLnNvcnQoKGwsYSk9PmwudmFsdWUub3V0bGV0PT09S28/''@;'; put 'put ''LTE6YS52YWx1ZS5vdXRsZXQ9PT1Lbz8xOmwudmFsdWUub3V0bGV0LmxvY2FsZUNvbXBhcmUoYS52YWx1ZS5vdXRsZXQpKX0odiksZm8odil9KSl9cHJvY2Vzc1NlZ21lbnQobCxhLGQsaCxmLHYpe3JldHVybiBZdShhKS5waXBlKHRiKE09PnRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91''@;'; put 'put ''dGUoTS5faW5qZWN0b3I/P2wsYSxNLGQsaCxmLHYpLnBpcGUoWDgoST0+e2lmKEkgaW5zdGFuY2VvZiB1VylyZXR1cm4gZm8obnVsbCk7dGhyb3cgSX0pKSksYW0oTT0+ISFNKSxYOChNPT57aWYocWxlKE0pKXJldHVybiBmdW5jdGlvbiBqRWUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgm''@;'; put 'put ''JiFjLmNoaWxkcmVuW2FdfShkLGgsZik/Zm8obmV3IHpFZSk6ZGIoZCk7dGhyb3cgTX0pKX1wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsdixNKXtyZXR1cm4gZnVuY3Rpb24gQkVlKGMsbCxhLGQpe3JldHVybiEhKGdwKGMpPT09ZHx8ZCE9PUtvJiZZUihsLGEsYykpJiZm''@;'; put 'put ''VyhsLGMsYSkubWF0Y2hlZH0oZCxoLGYsdik/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGwsaCxkLGYsdik6dGhpcy5hbGxvd1JlZGlyZWN0cyYmTT90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsaCxhLGQs''@;'; put 'put ''Zix2KTpkYihoKTpkYihoKX1leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsdil7Y29uc3R7bWF0Y2hlZDpNLGNvbnN1bWVkU2VnbWVudHM6SSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpHLHJlbWFpbmluZ1NlZ21lbnRzOmllfT1mVyhhLGgsZik7aWYo''@;'; put 'put ''IU0pcmV0dXJuIGRiKGEpO2gucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIikmJih0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudCsrLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PjMxJiYodGhpcy5hbGxvd1JlZGlyZWN0cz0hMSkpO2NvbnN0IHVlPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBw''@;'; put 'put ''bHlSZWRpcmVjdENvbW1hbmRzKEksaC5yZWRpcmVjdFRvLEcpO3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RzLmxpbmVyYWxpemVTZWdtZW50cyhoLHVlKS5waXBlKE4wKHllPT50aGlzLnByb2Nlc3NTZWdtZW50KGwsZCxhLHllLmNvbmNhdChpZSksdiwhMSkpKX1tYXRjaFNlZ21lbnRBZ2Fp''@;'; put 'put ''bnN0Um91dGUobCxhLGQsaCxmKXtjb25zdCB2PU9FZShhLGQsaCxsKTtyZXR1cm4iKioiPT09ZC5wYXRoJiYoYS5jaGlsZHJlbj17fSksdi5waXBlKFYxKE09Pk0ubWF0Y2hlZD90aGlzLmdldENoaWxkQ29uZmlnKGw9ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFYxKCh7cm91dGVzOkl9KT0+''@;'; put 'put ''e2NvbnN0IEc9ZC5fbG9hZGVkSW5qZWN0b3I/P2wse2NvbnN1bWVkU2VnbWVudHM6aWUscmVtYWluaW5nU2VnbWVudHM6dWUscGFyYW1ldGVyczp5ZX09TSxFZT1uZXcgaVcoaWUseWUsT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZy''@;'; put 'put ''YWdtZW50LGZ1bmN0aW9uICRFZShjKXtyZXR1cm4gYy5kYXRhfHx7fX0oZCksZ3AoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLGZ1bmN0aW9uIEtFZShjKXtyZXR1cm4gYy5yZXNvbHZlfHx7fX0oZCkpLHtzZWdtZW50R3JvdXA6amUsc2xpY2VkU2VnbWVudHM6''@;'; put 'put ''cWV9PUpsZShhLGllLHVlLEkpO2lmKDA9PT1xZS5sZW5ndGgmJmplLmhhc0NoaWxkcmVuKCkpcmV0dXJuIHRoaXMucHJvY2Vzc0NoaWxkcmVuKEcsSSxqZSkucGlwZShMcihwdD0+bnVsbD09PXB0P251bGw6bmV3IEdmKEVlLHB0KSkpO2lmKDA9PT1JLmxlbmd0aCYmMD09PXFlLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gZm8obmV3IEdmKEVlLFtdKSk7Y29uc3QgcnQ9Z3AoZCk9PT1mO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50KEcsSSxqZSxxZSxydD9LbzpmLCEwKS5waXBlKExyKHB0PT5uZXcgR2YoRWUscHQgaW5zdGFuY2VvZiBHZj9bcHRdOltdKSkpfSkpOmRiKGEpKSl9Z2V0Q2hpbGRDb25m''@;'; put 'put ''aWcobCxhLGQpe3JldHVybiBhLmNoaWxkcmVuP2ZvKHtyb3V0ZXM6YS5jaGlsZHJlbixpbmplY3RvcjpsfSk6YS5sb2FkQ2hpbGRyZW4/dm9pZCAwIT09YS5fbG9hZGVkUm91dGVzP2ZvKHtyb3V0ZXM6YS5fbG9hZGVkUm91dGVzLGluamVjdG9yOmEuX2xvYWRlZEluamVjdG9yfSk6ZnVuY3Rp''@;'; put 'put ''b24ga0VlKGMsbCxhLGQpe2NvbnN0IGg9bC5jYW5Mb2FkO3JldHVybiB2b2lkIDA9PT1ofHwwPT09aC5sZW5ndGg/Zm8oITApOmZvKGgubWFwKHY9Pntjb25zdCBNPWNiKHYsYyk7cmV0dXJuIG9tKGZ1bmN0aW9uIG1FZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5Mb2FkKX0oTSk/TS5jYW5Mb2Fk''@;'; put 'put ''KGwsYSk6cTAoYywoKT0+TShsLGEpKSl9KSkucGlwZSh1YigpLFhsZSgpKX0obCxhLGQpLnBpcGUoTjAoaD0+aD90aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ2hpbGRyZW4obCxhKS5waXBlKEd1KGY9PnthLl9sb2FkZWRSb3V0ZXM9Zi5yb3V0ZXMsYS5fbG9hZGVkSW5qZWN0b3I9Zi5pbmplY3Rv''@;'; put 'put ''cn0pKTpmdW5jdGlvbiBSRWUoYyl7cmV0dXJuIHpNKFlsZSghMSxwaC5HdWFyZFJlamVjdGVkKSl9KCkpKTpmbyh7cm91dGVzOltdLGluamVjdG9yOmx9KX19ZnVuY3Rpb24gR0VlKGMpe2NvbnN0IGw9Yy52YWx1ZS5yb3V0ZUNvbmZpZztyZXR1cm4gbCYmIiI9PT1sLnBhdGh9ZnVuY3Rpb24g''@;'; put 'put ''UWxlKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFHRWUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNo''@;'; put 'put ''KC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTpsLnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD1RbGUoZC5jaGlsZHJlbik7bC5wdXNoKG5ldyBHZihkLnZhbHVlLGgpKX1yZXR1cm4gbC5maWx0ZXIoZD0+IWEuaGFzKGQpKX1mdW5jdGlvbiBlY2UoYyl7Y29uc3QgbD1jLmNoaWxk''@;'; put 'put ''cmVuLm1hcChhPT5lY2UoYSkpLmZsYXQoKTtyZXR1cm5bYywuLi5sXX1mdW5jdGlvbiBwVyhjKXtyZXR1cm4gVjEobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9ZdShhKS5waXBlKExyKCgpPT5sKSk6Zm8obCl9KX1sZXQgdGNlPSgoKT0+e2NsYXNzIGN7YnVpbGRUaXRsZShhKXtsZXQgZCxo''@;'; put 'put ''PWEucm9vdDtmb3IoO3ZvaWQgMCE9PWg7KWQ9dGhpcy5nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoaCk/P2QsaD1oLmNoaWxkcmVuLmZpbmQoZj0+Zi5vdXRsZXQ9PT1Lbyk7cmV0dXJuIGR9Z2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKGEpe3JldHVybiBhLmRhdGFbWk1dfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmZpKHRUZSkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLHRUZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdGNle2NvbnN0''@;'; put 'put ''cnVjdG9yKGEpe3N1cGVyKCksdGhpcy50aXRsZT1hfXVwZGF0ZVRpdGxlKGEpe2NvbnN0IGQ9dGhpcy5idWlsZFRpdGxlKGEpO3ZvaWQgMCE9PWQmJnRoaXMudGl0bGUuc2V0VGl0bGUoZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoSUNl''@;'; put 'put ''KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaGI9bmV3IE10KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSksZmI9bmV3IE10KCIiKTts''@;'; put 'put ''ZXQgZ1c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29tcG9uZW50TG9hZGVycz1uZXcgV2Vha01hcCx0aGlzLmNoaWxkcmVuTG9hZGVycz1uZXcgV2Vha01hcCx0aGlzLmNvbXBpbGVyPWZpKEtpZSl9bG9hZENvbXBvbmVudChhKXtpZih0aGlzLmNvbXBvbmVudExvYWRlcnMu''@;'; put 'put ''Z2V0KGEpKXJldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuZ2V0KGEpO2lmKGEuX2xvYWRlZENvbXBvbmVudClyZXR1cm4gZm8oYS5fbG9hZGVkQ29tcG9uZW50KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihhKTtjb25zdCBkPW9tKGEubG9h''@;'; put 'put ''ZENvbXBvbmVudCgpKS5waXBlKExyKG5jZSksR3UoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxVTSgoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgV1ooZCwoKT0+''@;'; put 'put ''bmV3IFduKS5waXBlKFpaKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMpcmV0''@;'; put 'put ''dXJuIGZvKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj1mdW5jdGlvbiBuVGUoYyxsLGEsZCl7cmV0dXJuIG9tKGMubG9hZENoaWxk''@;'; put 'put ''cmVuKCkpLnBpcGUoTHIobmNlKSxOMChoPT5oIGluc3RhbmNlb2YgbWN8fEFycmF5LmlzQXJyYXkoaCk/Zm8oaCk6WXUobC5jb21waWxlTW9kdWxlQXN5bmMoaCkpKSxMcihoPT57ZCYmZChjKTtsZXQgZix2LE09ITE7cmV0dXJuIEFycmF5LmlzQXJyYXkoaCk/KHY9aCwhMCk6KGY9aC5jcmVh''@;'; put 'put ''dGUoYSkuaW5qZWN0b3Isdj1mLmdldChmYixbXSx7b3B0aW9uYWw6ITAsc2VsZjohMH0pLmZsYXQoKSkse3JvdXRlczp2Lm1hcChjVyksaW5qZWN0b3I6Zn19KSl9KGQsdGhpcy5jb21waWxlcixhLHRoaXMub25Mb2FkRW5kTGlzdGVuZXIpLnBpcGUoVU0oKCk9Pnt0aGlzLmNoaWxkcmVuTG9h''@;'; put 'put ''ZGVycy5kZWxldGUoZCl9KSksdj1uZXcgV1ooZiwoKT0+bmV3IFduKS5waXBlKFpaKCkpO3JldHVybiB0aGlzLmNoaWxkcmVuTG9hZGVycy5zZXQoZCx2KSx2fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92''@;'; put 'put ''PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG5jZShjKXtyZXR1cm4gZnVuY3Rpb24gclRlKGMpe3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJkZWZhdWx0ImluIGN9KGMpP2MuZGVmYXVsdDpj''@;'; put 'put ''fWxldCBtVz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmZpKGlUZSkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLGlU''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje3Nob3VsZFByb2Nlc3NVcmwoYSl7cmV0dXJuITB9ZXh0cmFjdChhKXtyZXR1cm4gYX1tZXJnZShhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHJjZT1uZXcgTXQoIiIpLGljZT1uZXcgTXQoIiIpO2Z1bmN0aW9uIGFUZShjLGwsYSl7Y29uc3QgZD1jLmdldChpY2UpLGg9Yy5nZXQodnMpO3JldHVybiBjLmdldChXYSku''@;'; put 'put ''cnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZighaC5zdGFydFZpZXdUcmFuc2l0aW9ufHxkLnNraXBOZXh0VHJhbnNpdGlvbilyZXR1cm4gZC5za2lwTmV4dFRyYW5zaXRpb249ITEsbmV3IFByb21pc2UoRz0+c2V0VGltZW91dChHKSk7bGV0IGY7Y29uc3Qgdj1uZXcgUHJvbWlzZShHPT57Zj1H''@;'; put 'put ''fSksTT1oLnN0YXJ0Vmlld1RyYW5zaXRpb24oKCk9PihmKCksZnVuY3Rpb24gb1RlKGMpe3JldHVybiBuZXcgUHJvbWlzZShsPT57X3kobCx7aW5qZWN0b3I6Y30pfSl9KGMpKSkse29uVmlld1RyYW5zaXRpb25DcmVhdGVkOkl9PWQ7cmV0dXJuIEkmJnEwKGMsKCk9Pkkoe3RyYW5zaXRpb246''@;'; put 'put ''TSxmcm9tOmwsdG86YX0pKSx2fSl9bGV0IEdSPSgoKT0+e2NsYXNzIGN7Z2V0IGhhc1JlcXVlc3RlZE5hdmlnYXRpb24oKXtyZXR1cm4gMCE9PXRoaXMubmF2aWdhdGlvbklkfWNvbnN0cnVjdG9yKCl7dGhpcy5jdXJyZW50TmF2aWdhdGlvbj1udWxsLHRoaXMuY3VycmVudFRyYW5zaXRpb249''@;'; put 'put ''bnVsbCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj1udWxsLHRoaXMuZXZlbnRzPW5ldyBXbix0aGlzLnRyYW5zaXRpb25BYm9ydFN1YmplY3Q9bmV3IFduLHRoaXMuY29uZmlnTG9hZGVyPWZpKGdXKSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9ZmkoaGMpLHRoaXMudXJsU2VyaWFs''@;'; put 'put ''aXplcj1maShpYiksdGhpcy5yb290Q29udGV4dHM9ZmkocU0pLHRoaXMubG9jYXRpb249ZmkoZmgpLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZD1udWxsIT09ZmkoVVIse29wdGlvbmFsOiEwfSksdGhpcy50aXRsZVN0cmF0ZWd5PWZpKHRjZSksdGhpcy5vcHRpb25zPWZpKGhiLHtvcHRpb25h''@;'; put 'put ''bDohMH0pfHx7fSx0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3l8fCJlbXB0eU9ubHkiLHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1maShtVyksdGhpcy5jcmVhdGVWaWV3VHJhbnNpdGlvbj1maShyY2Use29wdGlv''@;'; put 'put ''bmFsOiEwfSksdGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+Zm8odm9pZCAwKSx0aGlzLnJvb3RDb21wb25lbnRUeXBlPW51bGwsdGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgR3hlKGgpKSx0''@;'; put 'put ''aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyPWg9PnRoaXMuZXZlbnRzLm5leHQobmV3IFl4ZShoKSl9Y29tcGxldGUoKXt0aGlzLnRyYW5zaXRpb25zPy5jb21wbGV0ZSgpfWhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KGEpe2NvbnN0IGQ9Kyt0aGlzLm5hdmlnYXRpb25JZDt0''@;'; put 'put ''aGlzLnRyYW5zaXRpb25zPy5uZXh0KHsuLi50aGlzLnRyYW5zaXRpb25zLnZhbHVlLC4uLmEsaWQ6ZH0pfXNldHVwTmF2aWdhdGlvbnMoYSxkLGgpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zPW5ldyBlaSh7aWQ6MCxjdXJyZW50VXJsVHJlZTpkLGN1cnJlbnRSYXdVcmw6ZCxleHRyYWN0ZWRV''@;'; put 'put ''cmw6dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZCksdXJsQWZ0ZXJSZWRpcmVjdHM6dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZCkscmF3VXJsOmQsZXh0cmFzOnt9LHJlc29sdmU6bnVsbCxyZWplY3Q6bnVsbCxwcm9taXNlOlByb21pc2UucmVzb2x2ZSghMCks''@;'; put 'put ''c291cmNlOktNLHJlc3RvcmVkU3RhdGU6bnVsbCxjdXJyZW50U25hcHNob3Q6aC5zbmFwc2hvdCx0YXJnZXRTbmFwc2hvdDpudWxsLGN1cnJlbnRSb3V0ZXJTdGF0ZTpoLHRhcmdldFJvdXRlclN0YXRlOm51bGwsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpbXSxjYW5EZWFjdGl2YXRlQ2hl''@;'; put 'put ''Y2tzOltdfSxndWFyZHNSZXN1bHQ6bnVsbH0pLHRoaXMudHJhbnNpdGlvbnMucGlwZSgkbChmPT4wIT09Zi5pZCksTHIoZj0+KHsuLi5mLGV4dHJhY3RlZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChmLnJhd1VybCl9KSksVjEoZj0+e2xldCB2PSExLE09ITE7cmV0dXJu''@;'; put 'put ''IGZvKGYpLnBpcGUoVjEoST0+e2lmKHRoaXMubmF2aWdhdGlvbklkPmYuaWQpcmV0dXJuIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZiwiIixwaC5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSxNMjt0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWYsdGhpcy5jdXJyZW50TmF2aWdh''@;'; put 'put ''dGlvbj17aWQ6SS5pZCxpbml0aWFsVXJsOkkucmF3VXJsLGV4dHJhY3RlZFVybDpJLmV4dHJhY3RlZFVybCx0cmlnZ2VyOkkuc291cmNlLGV4dHJhczpJLmV4dHJhcyxwcmV2aW91c05hdmlnYXRpb246dGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24/ey4uLnRoaXMubGFzdFN1Y2Nlc3Nm''@;'; put 'put ''dWxOYXZpZ2F0aW9uLHByZXZpb3VzTmF2aWdhdGlvbjpudWxsfTpudWxsfTtjb25zdCBHPSFhLm5hdmlnYXRlZHx8dGhpcy5pc1VwZGF0aW5nSW50ZXJuYWxTdGF0ZSgpfHx0aGlzLmlzVXBkYXRlZEJyb3dzZXJVcmwoKTtpZighRyYmInJlbG9hZCIhPT0oSS5leHRyYXMub25TYW1lVXJsTmF2''@;'; put 'put ''aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgdWU9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IHNiKEkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLnJhd1VybCksdWUsalIuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uKSksSS5yZXNvbHZlKG51''@;'; put 'put ''bGwpLE0yfWlmKHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKEkucmF3VXJsKSlyZXR1cm4gZm8oSSkucGlwZShWMSh1ZT0+e2NvbnN0IHllPXRoaXMudHJhbnNpdGlvbnM/LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IEJSKHVlLmlkLHRo''@;'; put 'put ''aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodWUuZXh0cmFjdGVkVXJsKSx1ZS5zb3VyY2UsdWUucmVzdG9yZWRTdGF0ZSkpLHllIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9NMjpQcm9taXNlLnJlc29sdmUodWUpfSksZnVuY3Rpb24gcUVlKGMsbCxhLGQsaCxmKXtyZXR1cm4g''@;'; put 'put ''TjAodj0+ZnVuY3Rpb24gVUVlKGMsbCxhLGQsaCxmLHY9ImVtcHR5T25seSIpe3JldHVybiBuZXcgV0VlKGMsbCxhLGQsaCx2LGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLHYuZXh0cmFjdGVkVXJsLGgsZikucGlwZShMcigoe3N0YXRlOk0sdHJlZTpJfSk9Pih7Li4udix0YXJnZXRTbmFwc2hv''@;'; put 'put ''dDpNLHVybEFmdGVyUmVkaXJlY3RzOkl9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxTZXJpYWxpemVyLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksR3UodWU9Pntm''@;'; put 'put ''LnRhcmdldFNuYXBzaG90PXVlLnRhcmdldFNuYXBzaG90LGYudXJsQWZ0ZXJSZWRpcmVjdHM9dWUudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50TmF2aWdhdGlvbixmaW5hbFVybDp1ZS51cmxBZnRlclJlZGlyZWN0c307Y29uc3QgeWU9''@;'; put 'put ''bmV3IFBsZSh1ZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHVlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh1ZS51cmxBZnRlclJlZGlyZWN0cyksdWUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoeWUpfSkpO2lmKEcmJnRoaXMu''@;'; put 'put ''dXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKEkuY3VycmVudFJhd1VybCkpe2NvbnN0e2lkOnVlLGV4dHJhY3RlZFVybDp5ZSxzb3VyY2U6RWUscmVzdG9yZWRTdGF0ZTpqZSxleHRyYXM6cWV9PUkscnQ9bmV3IEJSKHVlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUo''@;'; put 'put ''eWUpLEVlLGplKTt0aGlzLmV2ZW50cy5uZXh0KHJ0KTtjb25zdCBwdD1WbGUodGhpcy5yb290Q29tcG9uZW50VHlwZSkuc25hcHNob3Q7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb249Zj17Li4uSSx0YXJnZXRTbmFwc2hvdDpwdCx1cmxBZnRlclJlZGlyZWN0czp5ZSxleHRyYXM6ey4u''@;'; put 'put ''LnFlLHNraXBMb2NhdGlvbkNoYW5nZTohMSxyZXBsYWNlVXJsOiExfX0sdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5maW5hbFVybD15ZSxmbyhmKX17Y29uc3QgdWU9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IHNiKEkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLmV4''@;'; put 'put ''dHJhY3RlZFVybCksdWUsalIuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSkpLEkucmVzb2x2ZShudWxsKSxNMn19KSxHdShJPT57Y29uc3QgRz1uZXcgenhlKEkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShJLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNl''@;'; put 'put ''cmlhbGl6ZShJLnVybEFmdGVyUmVkaXJlY3RzKSxJLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KEcpfSksTHIoST0+KHRoaXMuY3VycmVudFRyYW5zaXRpb249Zj17Li4uSSxndWFyZHM6ZEVlKEkudGFyZ2V0U25hcHNob3QsSS5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29u''@;'; put 'put ''dGV4dHMpfSxmKSksZnVuY3Rpb24gd0VlKGMsbCl7cmV0dXJuIE4wKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOnZ9fT1hO3JldHVybiAwPT09di5sZW5ndGgmJjA9PT1m''@;'; put 'put ''Lmxlbmd0aD9mbyh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9KTpmdW5jdGlvbiBDRWUoYyxsLGEsZCl7cmV0dXJuIFl1KGMpLnBpcGUoTjAoaD0+ZnVuY3Rpb24gQUVlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3Jl''@;'; put 'put ''dHVybiBmJiYwIT09Zi5sZW5ndGg/Zm8oZi5tYXAoTT0+e2NvbnN0IEk9Sk0obCk/P2gsRz1jYihNLEkpO3JldHVybiBvbShmdW5jdGlvbiBiRWUoYyl7cmV0dXJuIGMmJnR4KGMuY2FuRGVhY3RpdmF0ZSl9KEcpP0cuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpxMChJLCgpPT5HKGMsbCxhLGQp''@;'; put 'put ''KSkucGlwZShhbSgpKX0pKS5waXBlKHViKCkpOmZvKCEwKX0oaC5jb21wb25lbnQsaC5yb3V0ZSxhLGwsZCkpLGFtKGg9PiEwIT09aCwhMCkpfSh2LGQsaCxjKS5waXBlKE4wKE09Pk0mJmZ1bmN0aW9uIGdFZShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjfShNKT9mdW5jdGlvbiBTRWUo''@;'; put 'put ''YyxsLGEsZCl7cmV0dXJuIFl1KGwpLnBpcGUodGIoaD0+VVooZnVuY3Rpb24geEVlKGMsbCl7cmV0dXJuIG51bGwhPT1jJiZsJiZsKG5ldyAkeGUoYykpLGZvKCEwKX0oaC5yb3V0ZS5wYXJlbnQsZCksZnVuY3Rpb24gTUVlKGMsbCl7cmV0dXJuIG51bGwhPT1jJiZsJiZsKG5ldyBxeGUoYykp''@;'; put 'put ''LGZvKCEwKX0oaC5yb3V0ZSxkKSxmdW5jdGlvbiBURWUoYyxsLGEpe2NvbnN0IGQ9bFtsLmxlbmd0aC0xXSxmPWwuc2xpY2UoMCxsLmxlbmd0aC0xKS5yZXZlcnNlKCkubWFwKHY9PmZ1bmN0aW9uIGhFZShjKXtjb25zdCBsPWMucm91dGVDb25maWc/Yy5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0''@;'; put 'put ''ZUNoaWxkOm51bGw7cmV0dXJuIGwmJjAhPT1sLmxlbmd0aD97bm9kZTpjLGd1YXJkczpsfTpudWxsfSh2KSkuZmlsdGVyKHY9Pm51bGwhPT12KS5tYXAodj0+cGxlKCgpPT5mbyh2Lmd1YXJkcy5tYXAoST0+e2NvbnN0IEc9Sk0odi5ub2RlKT8/YSxpZT1jYihJLEcpO3JldHVybiBvbShmdW5j''@;'; put 'put ''dGlvbiB5RWUoYyl7cmV0dXJuIGMmJnR4KGMuY2FuQWN0aXZhdGVDaGlsZCl9KGllKT9pZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6cTAoRywoKT0+aWUoZCxjKSkpLnBpcGUoYW0oKSl9KSkucGlwZSh1YigpKSkpO3JldHVybiBmbyhmKS5waXBlKHViKCkpfShjLGgucGF0aCxhKSxmdW5jdGlv''@;'; put 'put ''biBFRWUoYyxsLGEpe2NvbnN0IGQ9bC5yb3V0ZUNvbmZpZz9sLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7aWYoIWR8fDA9PT1kLmxlbmd0aClyZXR1cm4gZm8oITApO2NvbnN0IGg9ZC5tYXAoZj0+cGxlKCgpPT57Y29uc3Qgdj1KTShsKT8/YSxNPWNiKGYsdik7cmV0dXJuIG9tKGZ1''@;'; put 'put ''bmN0aW9uIHZFZShjKXtyZXR1cm4gYyYmdHgoYy5jYW5BY3RpdmF0ZSl9KE0pP00uY2FuQWN0aXZhdGUobCxjKTpxMCh2LCgpPT5NKGwsYykpKS5waXBlKGFtKCkpfSkpO3JldHVybiBmbyhoKS5waXBlKHViKCkpfShjLGgucm91dGUsYSkpKSxhbShoPT4hMCE9PWgsITApKX0oZCxmLGMsbCk6''@;'; put 'put ''Zm8oTSkpLExyKE09Pih7Li4uYSxndWFyZHNSZXN1bHQ6TX0pKSl9KX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEk9PnRoaXMuZXZlbnRzLm5leHQoSSkpLEd1KEk9PntpZihmLmd1YXJkc1Jlc3VsdD1JLmd1YXJkc1Jlc3VsdCxhYihJLmd1YXJkc1Jlc3VsdCkpdGhyb3cgV2xlKDAsSS5n''@;'; put 'put ''dWFyZHNSZXN1bHQpO2NvbnN0IEc9bmV3IFV4ZShJLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoSS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoSS51cmxBZnRlclJlZGlyZWN0cyksSS50YXJnZXRTbmFwc2hvdCwhIUkuZ3VhcmRzUmVzdWx0KTt0''@;'; put 'put ''aGlzLmV2ZW50cy5uZXh0KEcpfSksJGwoST0+ISFJLmd1YXJkc1Jlc3VsdHx8KHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oSSwiIixwaC5HdWFyZFJlamVjdGVkKSwhMSkpLHBXKEk9PntpZihJLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIGZvKEkpLnBp''@;'; put 'put ''cGUoR3UoRz0+e2NvbnN0IGllPW5ldyBaeGUoRy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEcuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEcudXJsQWZ0ZXJSZWRpcmVjdHMpLEcudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoaWUp''@;'; put 'put ''fSksVjEoRz0+e2xldCBpZT0hMTtyZXR1cm4gZm8oRykucGlwZShmdW5jdGlvbiBYRWUoYyxsKXtyZXR1cm4gTjAoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpofX09YTtpZighaC5sZW5ndGgpcmV0dXJuIGZvKGEpO2NvbnN0IGY9bmV3IFNl''@;'; put 'put ''dChoLm1hcChJPT5JLnJvdXRlKSksdj1uZXcgU2V0O2Zvcihjb25zdCBJIG9mIGYpaWYoIXYuaGFzKEkpKWZvcihjb25zdCBHIG9mIGVjZShJKSl2LmFkZChHKTtsZXQgTT0wO3JldHVybiBZdSh2KS5waXBlKHRiKEk9PmYuaGFzKEkpP2Z1bmN0aW9uIEpFZShjLGwsYSxkKXtjb25zdCBoPWMu''@;'; put 'put ''cm91dGVDb25maWcsZj1jLl9yZXNvbHZlO3JldHVybiB2b2lkIDAhPT1oPy50aXRsZSYmIXpsZShoKSYmKGZbWk1dPWgudGl0bGUpLGZ1bmN0aW9uIFFFZShjLGwsYSxkKXtjb25zdCBoPUdaKGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gZm8oe30pO2NvbnN0IGY9e307cmV0dXJuIFl1KGgp''@;'; put 'put ''LnBpcGUoTjAodj0+ZnVuY3Rpb24gZVRlKGMsbCxhLGQpe2NvbnN0IGg9Sk0obCk/P2QsZj1jYihjLGgpO3JldHVybiBvbShmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6cTAoaCwoKT0+ZihsLGEpKSl9KGNbdl0sbCxhLGQpLnBpcGUoYW0oKSxHdShNPT57Zlt2XT1NfSkpKSxZWigxKSxmdW5j''@;'; put 'put ''dGlvbiBmeGUoYyl7cmV0dXJuIExyKCgpPT5jKX0oZiksWDgodj0+cWxlKHYpP00yOnpNKHYpKSl9KGYsYyxsLGQpLnBpcGUoTHIodj0+KGMuX3Jlc29sdmVkRGF0YT12LGMuZGF0YT1yVyhjLGMucGFyZW50LGEpLnJlc29sdmUsbnVsbCkpKX0oSSxkLGMsbCk6KEkuZGF0YT1yVyhJLEkucGFy''@;'; put 'put ''ZW50LGMpLnJlc29sdmUsZm8odm9pZCAwKSkpLEd1KCgpPT5NKyspLFlaKDEpLE4wKEk9Pk09PT12LnNpemU/Zm8oYSk6TTIpKX0pfSh0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yKSxHdSh7bmV4dDooKT0+aWU9ITAsY29tcGxldGU6KCk9''@;'; put 'put ''PntpZXx8dGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihHLCIiLHBoLk5vRGF0YUZyb21SZXNvbHZlcil9fSkpfSksR3UoRz0+e2NvbnN0IGllPW5ldyBXeGUoRy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEcuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIu''@;'; put 'put ''c2VyaWFsaXplKEcudXJsQWZ0ZXJSZWRpcmVjdHMpLEcudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoaWUpfSkpfSkscFcoST0+e2NvbnN0IEc9aWU9Pntjb25zdCB1ZT1bXTtpZS5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIWllLnJvdXRlQ29uZmlnLl9sb2FkZWRDb21w''@;'; put 'put ''b25lbnQmJnVlLnB1c2godGhpcy5jb25maWdMb2FkZXIubG9hZENvbXBvbmVudChpZS5yb3V0ZUNvbmZpZykucGlwZShHdSh5ZT0+e2llLmNvbXBvbmVudD15ZX0pLExyKCgpPT57fSkpKTtmb3IoY29uc3QgeWUgb2YgaWUuY2hpbGRyZW4pdWUucHVzaCguLi5HKHllKSk7cmV0dXJuIHVlfTty''@;'; put 'put ''ZXR1cm4gcTgoRyhJLnRhcmdldFNuYXBzaG90LnJvb3QpKS5waXBlKExSKG51bGwpLFlmKDEpKX0pLHBXKCgpPT50aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSxWMSgoKT0+e2NvbnN0e2N1cnJlbnRTbmFwc2hvdDpJLHRhcmdldFNuYXBzaG90Okd9PWYsaWU9dGhpcy5jcmVhdGVWaWV3VHJh''@;'; put 'put ''bnNpdGlvbj8uKHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcixJLnJvb3QsRy5yb290KTtyZXR1cm4gaWU/WXUoaWUpLnBpcGUoTHIoKCk9PmYpKTpmbyhmKX0pLExyKEk9Pntjb25zdCBHPWZ1bmN0aW9uIGVFZShjLGwsYSl7Y29uc3QgZD1YTShjLGwuX3Jvb3QsYT9hLl9yb290OnZvaWQgMCk7''@;'; put 'put ''cmV0dXJuIG5ldyBObGUoZCxsKX0oYS5yb3V0ZVJldXNlU3RyYXRlZ3ksSS50YXJnZXRTbmFwc2hvdCxJLmN1cnJlbnRSb3V0ZXJTdGF0ZSk7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb249Zj17Li4uSSx0YXJnZXRSb3V0ZXJTdGF0ZTpHfSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLnRh''@;'; put 'put ''cmdldFJvdXRlclN0YXRlPUcsZn0pLEd1KCgpPT57dGhpcy5ldmVudHMubmV4dChuZXcgUVopfSksKChjLGwsYSxkKT0+THIoaD0+KG5ldyB1RWUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0''@;'; put 'put ''cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxJPT50aGlzLmV2ZW50cy5uZXh0KEkpLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksWWYoMSksR3Uoe25leHQ6ST0+e3Y9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbix0aGlzLmV2ZW50cy5uZXh0''@;'; put 'put ''KG5ldyBwcChJLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoSS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoSS51cmxBZnRlclJlZGlyZWN0cykpKSx0aGlzLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKEkudGFyZ2V0Um91dGVyU3RhdGUuc25h''@;'; put 'put ''cHNob3QpLEkucmVzb2x2ZSghMCl9LGNvbXBsZXRlOigpPT57dj0hMH19KSxWMCh0aGlzLnRyYW5zaXRpb25BYm9ydFN1YmplY3QucGlwZShHdShJPT57dGhyb3cgSX0pKSksVU0oKCk9PnshdiYmIU0mJnRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZiwiIixwaC5TdXBlcnNlZGVk''@;'; put 'put ''QnlOZXdOYXZpZ2F0aW9uKSx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5pZD09PWYuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsKX0pLFg4KEk9PntpZihNPSEwLEdsZShJKSl0aGlzLmV2ZW50cy5uZXh0KG5ldyBvYihmLmlkLHRo''@;'; put 'put ''aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5leHRyYWN0ZWRVcmwpLEkubWVzc2FnZSxJLmNhbmNlbGxhdGlvbkNvZGUpKSxmdW5jdGlvbiByRWUoYyl7cmV0dXJuIEdsZShjKSYmYWIoYy51cmwpfShJKT90aGlzLmV2ZW50cy5uZXh0KG5ldyBlVyhJLnVybCkpOmYucmVzb2x2ZSghMSk7''@;'; put 'put ''ZWxzZXt0aGlzLmV2ZW50cy5uZXh0KG5ldyB6UihmLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5leHRyYWN0ZWRVcmwpLEksZi50YXJnZXRTbmFwc2hvdD8/dm9pZCAwKSk7dHJ5e2YucmVzb2x2ZShhLmVycm9ySGFuZGxlcihJKSl9Y2F0Y2goRyl7dGhpcy5vcHRpb25zLnJl''@;'; put 'put ''c29sdmVOYXZpZ2F0aW9uUHJvbWlzZU9uRXJyb3I/Zi5yZXNvbHZlKCExKTpmLnJlamVjdChHKX19cmV0dXJuIE0yfSkpfSkpfWNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKGEsZCxoKXtjb25zdCBmPW5ldyBvYihhLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5leHRyYWN0''@;'; put 'put ''ZWRVcmwpLGQsaCk7dGhpcy5ldmVudHMubmV4dChmKSxhLnJlc29sdmUoITEpfWlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uY3VycmVudFVybFRy''@;'; put 'put ''ZWUudG9TdHJpbmcoKX1pc1VwZGF0ZWRCcm93c2VyVXJsKCl7cmV0dXJuIHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0aGlzLmxvY2F0aW9uLnBhdGgoITApKSkudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4''@;'; put 'put ''dHJhY3RlZFVybC50b1N0cmluZygpJiYhdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzVGUoYyl7cmV0dXJuIGMhPT1LTX1sZXQgbFRlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkodVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgY1Rle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0''@;'; put 'put ''dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShsLGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IHVUZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY1Rle3N0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8''@;'; put 'put ''fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLGFjZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmZpKGRUZSkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLGRUZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1l''@;'; put 'put ''bnRzKSx0aGlzLmxvY2F0aW9uPWZpKGZoKSx0aGlzLnVybFNlcmlhbGl6ZXI9ZmkoaWIpLHRoaXMub3B0aW9ucz1maShoYix7b3B0aW9uYWw6ITB9KXx8e30sdGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uPXRoaXMub3B0aW9ucy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9u''@;'; put 'put ''fHwicmVwbGFjZSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1XKSx0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyByYix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50''@;'; put 'put ''VXJsVHJlZSx0aGlzLmN1cnJlbnRQYWdlSWQ9MCx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5yb3V0ZXJTdGF0ZT1WbGUobnVsbCksdGhpcy5zdGF0ZU1lbWVudG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKX1nZXRDdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLmN1cnJlbnRV''@;'; put 'put ''cmxUcmVlfWdldFJhd1VybFRyZWUoKXtyZXR1cm4gdGhpcy5yYXdVcmxUcmVlfXJlc3RvcmVkU3RhdGUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpfWdldCBicm93c2VyUGFnZUlkKCl7cmV0dXJuImNvbXB1dGVkIiE9PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlv''@;'; put 'put ''bj90aGlzLmN1cnJlbnRQYWdlSWQ6dGhpcy5yZXN0b3JlZFN0YXRlKCk/Llx1MDI3NXJvdXRlclBhZ2VJZD8/dGhpcy5jdXJyZW50UGFnZUlkfWdldFJvdXRlclN0YXRlKCl7cmV0dXJuIHRoaXMucm91dGVyU3RhdGV9Y3JlYXRlU3RhdGVNZW1lbnRvKCl7cmV0dXJue3Jhd1VybFRyZWU6dGhp''@;'; put 'put ''cy5yYXdVcmxUcmVlLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUscm91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX19cmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcihhKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zdWJzY3JpYmUoZD0+eyJwb3Bz''@;'; put 'put ''dGF0ZSI9PT1kLnR5cGUmJmEoZC51cmwsZC5zdGF0ZSl9KX1oYW5kbGVSb3V0ZXJFdmVudChhLGQpe2lmKGEgaW5zdGFuY2VvZiBCUil0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIHNiKXRoaXMucmF3VXJsVHJlZT1kLmlu''@;'; put 'put ''aXRpYWxVcmw7ZWxzZSBpZihhIGluc3RhbmNlb2YgUGxlKXtpZigiZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmIWQuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSl7Y29uc3QgaD10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC5maW5hbFVybCxkLmluaXRpYWxVcmwp''@;'; put 'put ''O3RoaXMuc2V0QnJvd3NlclVybChoLGQpfX1lbHNlIGEgaW5zdGFuY2VvZiBRWj8odGhpcy5jdXJyZW50VXJsVHJlZT1kLmZpbmFsVXJsLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC5maW5hbFVybCxkLmluaXRpYWxVcmwpLHRoaXMucm91dGVyU3Rh''@;'; put 'put ''dGU9ZC50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmKGQuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8dGhpcy5zZXRCcm93c2VyVXJsKHRoaXMucmF3VXJsVHJlZSxkKSkpOmEgaW5zdGFuY2VvZiBvYiYmKGEuY29kZT09PXBoLkd1YXJk''@;'; put 'put ''UmVqZWN0ZWR8fGEuY29kZT09PXBoLk5vRGF0YUZyb21SZXNvbHZlcik/dGhpcy5yZXN0b3JlSGlzdG9yeShkKTphIGluc3RhbmNlb2YgelI/dGhpcy5yZXN0b3JlSGlzdG9yeShkLCEwKTphIGluc3RhbmNlb2YgcHAmJih0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQ''@;'; put 'put ''YWdlSWQ9dGhpcy5icm93c2VyUGFnZUlkKX1zZXRCcm93c2VyVXJsKGEsZCl7Y29uc3QgaD10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpO2lmKHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaCl8fGQuZXh0cmFzLnJlcGxhY2VVcmwpe2NvbnN0IHY9ey4uLmQuZXh0''@;'; put 'put ''cmFzLnN0YXRlLC4uLnRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGQuaWQsdGhpcy5icm93c2VyUGFnZUlkKX07dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaCwiIix2KX1lbHNle2NvbnN0IGY9ey4uLmQuZXh0cmFzLnN0YXRlLC4uLnRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGQu''@;'; put 'put ''aWQsdGhpcy5icm93c2VyUGFnZUlkKzEpfTt0aGlzLmxvY2F0aW9uLmdvKGgsIiIsZil9fXJlc3RvcmVIaXN0b3J5KGEsZD0hMSl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbil7Y29uc3QgZj10aGlzLmN1cnJlbnRQYWdlSWQtdGhpcy5icm93c2Vy''@;'; put 'put ''UGFnZUlkOzAhPT1mP3RoaXMubG9jYXRpb24uaGlzdG9yeUdvKGYpOnRoaXMuY3VycmVudFVybFRyZWU9PT1hLmZpbmFsVXJsJiYwPT09ZiYmKHRoaXMucmVzZXRTdGF0ZShhKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNlInJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5h''@;'; put 'put ''dmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT10aGlzLnN0YXRlTWVtZW50by5yb3V0ZXJTdGF0ZSx0aGlzLmN1cnJlbnRVcmxUcmVlPXRoaXMuc3Rh''@;'; put 'put ''dGVNZW1lbnRvLmN1cnJlbnRVcmxUcmVlLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxhLmZpbmFsVXJsPz90aGlzLnJhd1VybFRyZWUpfXJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpe3RoaXMubG9jYXRpb24ucmVw''@;'; put 'put ''bGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix0aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZSh0aGlzLmxhc3RTdWNjZXNzZnVsSWQsdGhpcy5jdXJyZW50UGFnZUlkKSl9Z2VuZXJhdGVOZ1JvdXRlclN0YXRlKGEsZCl7cmV0dXJuImNv''@;'; put 'put ''bXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj97bmF2aWdhdGlvbklkOmEsXHUwMjc1cm91dGVyUGFnZUlkOmR9OntuYXZpZ2F0aW9uSWQ6YX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9''@;'; put 'put ''WXMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7dmFyIG54PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2Mu''@;'; put 'put ''RkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KG54fHx7fSk7ZnVuY3Rpb24gb2NlKGMsbCl7Yy5ldmVudHMucGlwZSgkbChhPT5hIGluc3RhbmNlb2YgcHB8fGEgaW5zdGFuY2VvZiBvYnx8YSBpbnN0YW5jZW9mIHpSfHxhIGluc3RhbmNlb2Yg''@;'; put 'put ''c2IpLExyKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIHNiP254LkNPTVBMRVRFOmEgaW5zdGFuY2VvZiBvYiYmKGEuY29kZT09PXBoLlJlZGlyZWN0fHxhLmNvZGU9PT1waC5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKT9ueC5SRURJUkVDVElORzpueC5GQUlMRUQpLCRsKGE9''@;'; put 'put ''PmEhPT1ueC5SRURJUkVDVElORyksWWYoMSkpLnN1YnNjcmliZSgoKT0+e2woKX0pfWZ1bmN0aW9uIGhUZShjKXt0aHJvdyBjfWNvbnN0IGZUZT17cGF0aHM6ImV4YWN0IixmcmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVyeVBhcmFtczoiZXhhY3QifSxwVGU9''@;'; put 'put ''e3BhdGhzOiJzdWJzZXQiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJzdWJzZXQifTtsZXQgTHM9KCgpPT57Y2xhc3MgY3tnZXQgY3VycmVudFVybFRyZWUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Q3VycmVudFVybFRyZWUo''@;'; put 'put ''KX1nZXQgcmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSYXdVcmxUcmVlKCl9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLl9ldmVudHN9Z2V0IHJvdXRlclN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJvdXRlclN0YXRlKCl9Y29uc3RydWN0b3Io''@;'; put 'put ''KXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuaXNOZ1pvbmVFbmFibGVkPSExLHRoaXMuY29uc29sZT1maShWaWUpLHRoaXMuc3RhdGVNYW5hZ2VyPWZpKGFjZSksdGhpcy5vcHRpb25zPWZpKGhiLHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1maShQZiksdGhpcy51cmxVcGRh''@;'; put 'put ''dGVTdHJhdGVneT10aGlzLm9wdGlvbnMudXJsVXBkYXRlU3RyYXRlZ3l8fCJkZWZlcnJlZCIsdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnM9ZmkoR1IpLHRoaXMudXJsU2VyaWFsaXplcj1maShpYiksdGhpcy5sb2NhdGlvbj1maShmaCksdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKG1X''@;'; put 'put ''KSx0aGlzLl9ldmVudHM9bmV3IFduLHRoaXMuZXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXJ8fGhUZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1maShsVGUpLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1l''@;'; put 'put ''VXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5jb25maWc9ZmkoZmIse29wdGlvbmFsOiEwfSk/LmZsYXQoKT8/W10sdGhpcy5jb21wb25lbnRJbnB1dEJpbmRpbmdFbmFibGVkPSEhZmkoVVIse29wdGlvbmFsOiEwfSksdGhpcy5ldmVudHNTdWJzY3JpcHRpb249bmV3IHF0LHRoaXMuaXNO''@;'; put 'put ''Z1pvbmVFbmFibGVkPWZpKFdhKWluc3RhbmNlb2YgV2EmJldhLmlzSW5Bbmd1bGFyWm9uZSgpLHRoaXMucmVzZXRDb25maWcodGhpcy5jb25maWcpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcyx0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm91dGVy''@;'; put 'put ''U3RhdGUpLnN1YnNjcmliZSh7ZXJyb3I6YT0+e3RoaXMuY29uc29sZS53YXJuKGEpfX0pLHRoaXMuc3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl9c3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl7Y29uc3QgYT10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHMuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9Pnt0cnl7Y29uc3QgaD10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50VHJhbnNpdGlvbixmPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9uO2lmKG51bGwhPT1oJiZudWxsIT09ZilpZih0aGlzLnN0YXRlTWFuYWdlci5oYW5kbGVSb3V0''@;'; put 'put ''ZXJFdmVudChkLGYpLGQgaW5zdGFuY2VvZiBvYiYmZC5jb2RlIT09cGguUmVkaXJlY3QmJmQuY29kZSE9PXBoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihkIGluc3RhbmNlb2YgcHApdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihkIGluc3Rh''@;'; put 'put ''bmNlb2YgZVcpe2NvbnN0IHY9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGQudXJsLGguY3VycmVudFJhd1VybCksTT17aW5mbzpoLmV4dHJhcy5pbmZvLHNraXBMb2NhdGlvbkNoYW5nZTpoLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDoiZWFnZXIiPT09dGhp''@;'; put 'put ''cy51cmxVcGRhdGVTdHJhdGVneXx8c1RlKGguc291cmNlKX07dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24odixLTSxudWxsLE0se3Jlc29sdmU6aC5yZXNvbHZlLHJlamVjdDpoLnJlamVjdCxwcm9taXNlOmgucHJvbWlzZX0pfShmdW5jdGlvbiBtVGUoYyl7cmV0dXJuIShjIGluc3RhbmNlb2Yg''@;'; put 'put ''UVp8fGMgaW5zdGFuY2VvZiBlVyl9KShkKSYmdGhpcy5fZXZlbnRzLm5leHQoZCl9Y2F0Y2goaCl7dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5uZXh0KGgpfX0pO3RoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLmFkZChhKX1yZXNldFJvb3RDb21wb25l''@;'; put 'put ''bnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9uZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7dGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSx0aGlzLm5hdmlnYXRpb25UcmFu''@;'; put 'put ''c2l0aW9ucy5oYXNSZXF1ZXN0ZWROYXZpZ2F0aW9ufHx0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSxLTSx0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlZFN0YXRlKCkpfXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubm9uUm91''@;'; put 'put ''dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPz89dGhpcy5zdGF0ZU1hbmFnZXIucmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcigoYSxkKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYSwicG9wc3RhdGUi''@;'; put 'put ''LGQpfSwwKX0pfW5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYSxkLGgpe2NvbnN0IGY9e3JlcGxhY2VVcmw6ITB9LHY9aD8ubmF2aWdhdGlvbklkP2g6bnVsbDtpZihoKXtjb25zdCBJPXsuLi5ofTtkZWxldGUgSS5uYXZpZ2F0aW9uSWQsZGVsZXRlIEkuXHUwMjc1cm91dGVyUGFnZUlkLDAh''@;'; put 'put ''PT1PYmplY3Qua2V5cyhJKS5sZW5ndGgmJihmLnN0YXRlPUkpfWNvbnN0IE09dGhpcy5wYXJzZVVybChhKTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihNLGQsdixmKX1nZXQgdXJsKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3VycmVudFVybFRyZWUpfWdldEN1cnJlbnROYXZp''@;'; put 'put ''Z2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9ufWdldCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9ufXJlc2V0Q29uZmlnKGEp''@;'; put 'put ''e3RoaXMuY29uZmlnPWEubWFwKGNXKSx0aGlzLm5hdmlnYXRlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uJiYo''@;'; put 'put ''dGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITAsdGhpcy5ldmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KX1jcmVhdGVVcmxUcmVlKGEsZD17fSl7Y29uc3R7cmVsYXRpdmVUbzpoLHF1ZXJ5UGFyYW1zOmYsZnJhZ21lbnQ6dixxdWVyeVBhcmFtc0hhbmRsaW5nOk0scHJlc2VydmVGcmFnbWVudDpJfT1kLEc9ST90aGlzLmN1cnJlbnRVcmxUcmVlLmZyYWdtZW50OnY7bGV0IHVlLGllPW51bGw7c3dp''@;'; put 'put ''dGNoKE0pe2Nhc2UibWVyZ2UiOmllPXsuLi50aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLC4uLmZ9O2JyZWFrO2Nhc2UicHJlc2VydmUiOmllPXRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM7YnJlYWs7ZGVmYXVsdDppZT1mfHxudWxsfW51bGwhPT1pZSYmKGllPXRoaXMu''@;'; put 'put ''cmVtb3ZlRW1wdHlQcm9wcyhpZSkpO3RyeXt1ZT1BbGUoaD9oLnNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCl9Y2F0Y2h7KCJzdHJpbmciIT10eXBlb2YgYVswXXx8IWFbMF0uc3RhcnRzV2l0aCgiLyIpKSYmKGE9W10pLHVlPXRoaXMuY3VycmVudFVybFRyZWUucm9v''@;'; put 'put ''dH1yZXR1cm4ga2xlKHVlLGEsaWUsRz8/bnVsbCl9bmF2aWdhdGVCeVVybChhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe2NvbnN0IGg9YWIoYSk/YTp0aGlzLnBhcnNlVXJsKGEpLGY9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGgsdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oZixLTSxudWxsLGQpfW5hdmlnYXRlKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7cmV0dXJuIGZ1bmN0aW9uIGdUZShjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihudWxsPT1jW2xdKXRocm93IG5ldyBRbig0MDA4LCExKX0oYSks''@;'; put 'put ''dGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZShhLGQpLGQpfXNlcmlhbGl6ZVVybChhKXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhKX1wYXJzZVVybChhKXt0cnl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKX1jYXRjaHtyZXR1cm4g''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKCIvIil9fWlzQWN0aXZlKGEsZCl7bGV0IGg7aWYoaD0hMD09PWQ/ey4uLmZUZX06ITE9PT1kP3suLi5wVGV9OmQsYWIoYSkpcmV0dXJuIGJsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEsaCk7Y29uc3QgZj10aGlzLnBhcnNlVXJsKGEpO3JldHVybiBi''@;'; put 'put ''bGUodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGEpLnJlZHVjZSgoZCxbaCxmXSk9PihudWxsIT1mJiYoZFtoXT1mKSxkKSx7fSl9c2NoZWR1bGVOYXZpZ2F0aW9uKGEsZCxoLGYsdil7aWYodGhpcy5kaXNwb3NlZCly''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtsZXQgTSxJLEc7dj8oTT12LnJlc29sdmUsST12LnJlamVjdCxHPXYucHJvbWlzZSk6Rz1uZXcgUHJvbWlzZSgodWUseWUpPT57TT11ZSxJPXllfSk7Y29uc3QgaWU9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCk7cmV0dXJuIG9jZSh0aGlzLCgpPT57''@;'; put 'put ''cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShpZSkpfSksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1''@;'; put 'put ''cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOk0scmVqZWN0OkkscHJvbWlzZTpHLGN1cnJlbnRTbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LGN1cnJlbnRSb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfSksRy5jYXRj''@;'; put 'put ''aCh1ZT0+UHJvbWlzZS5yZWplY3QodWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9dix0aGlzLmxvY2F0aW9uU3RyYXRlZ3k9TSx0aGlzLmhyZWY9bnVsbCx0aGlz''@;'; put 'put ''LmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IFduLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgST12Lm5hdGl2ZUVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5j''@;'; put 'put ''aG9yRWxlbWVudD0iYSI9PT1JfHwiYXJlYSI9PT1JLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShHPT57RyBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZUhyZWYoKX0pOnRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoIjAi''@;'; put 'put ''KX1zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbChhKXtudWxsIT10aGlzLnRhYkluZGV4QXR0cmlidXRlfHx0aGlzLmlzQW5jaG9yRWxlbWVudHx8dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJ0YWJpbmRleCIsYSl9bmdPbkNoYW5nZXMoYSl7dGhpcy5pc0FuY2hvckVsZW1lbnQmJnRoaXMu''@;'; put 'put ''dXBkYXRlSHJlZigpLHRoaXMub25DaGFuZ2VzLm5leHQodGhpcyl9c2V0IHJvdXRlckxpbmsoYSl7bnVsbCE9YT8odGhpcy5jb21tYW5kcz1BcnJheS5pc0FycmF5KGEpP2E6W2FdLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoIjAiKSk6KHRoaXMuY29tbWFuZHM9bnVsbCx0aGlz''@;'; put 'put ''LnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKG51bGwpKX1vbkNsaWNrKGEsZCxoLGYsdil7Y29uc3QgTT10aGlzLnVybFRyZWU7cmV0dXJuISEobnVsbD09PU18fHRoaXMuaXNBbmNob3JFbGVtZW50JiYoMCE9PWF8fGR8fGh8fGZ8fHZ8fCJzdHJpbmciPT10eXBlb2YgdGhpcy50YXJnZXQm''@;'; put 'put ''JiJfc2VsZiIhPXRoaXMudGFyZ2V0KSl8fCh0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKE0se3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxzdGF0ZTp0aGlzLnN0YXRlLGluZm86dGhpcy5pbmZvfSksIXRoaXMu''@;'; put 'put ''aXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXtjb25zdCBhPXRoaXMudXJsVHJlZTt0aGlzLmhyZWY9bnVsbCE9PWEmJnRoaXMubG9jYXRpb25TdHJhdGVneT90aGlzLmxvY2F0aW9uU3RyYXRlZ3k/LnBy''@;'; put 'put ''ZXBhcmVFeHRlcm5hbFVybCh0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwoYSkpOm51bGw7Y29uc3QgZD1udWxsPT09dGhpcy5ocmVmP251bGw6ZnVuY3Rpb24gYUQoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBqQihjLGwpe3JldHVybiJzcmMiPT09bCYmKCJlbWJlZCI9PT1jfHwiZnJhbWUiPT09''@;'; put 'put ''Y3x8ImlmcmFtZSI9PT1jfHwibWVkaWEiPT09Y3x8InNjcmlwdCI9PT1jKXx8ImhyZWYiPT09bCYmKCJiYXNlIj09PWN8fCJsaW5rIj09PWMpP2lEOlpDfShsLGEpKGMpfSh0aGlzLmhyZWYsdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSwiaHJlZiIpO3RoaXMu''@;'; put 'put ''YXBwbHlBdHRyaWJ1dGVWYWx1ZSgiaHJlZiIsZCl9YXBwbHlBdHRyaWJ1dGVWYWx1ZShhLGQpe2NvbnN0IGg9dGhpcy5yZW5kZXJlcixmPXRoaXMuZWwubmF0aXZlRWxlbWVudDtudWxsIT09ZD9oLnNldEF0dHJpYnV0ZShmLGEsZCk6aC5yZW1vdmVBdHRyaWJ1dGUoZixhKX1nZXQgdXJsVHJl''@;'; put 'put ''ZSgpe3JldHVybiBudWxsPT09dGhpcy5jb21tYW5kcz9udWxsOnRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp2b2lkIDAhPT10aGlzLnJlbGF0aXZlVG8/dGhpcy5yZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6dGhpcy5xdWVyeVBh''@;'; put 'put ''cmFtcyxmcmFnbWVudDp0aGlzLmZyYWdtZW50LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6dGhpcy5wcmVzZXJ2ZUZyYWdtZW50fSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyko''@;'; put 'put ''R2UoTHMpLEdlKEN1KSxJZigidGFiaW5kZXgiKSxHZShFbyksR2UoSmkpLEdlKFo4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJyb3V0ZXJMaW5rIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodi5idXR0b24sdi5jdHJsS2V5LHYuc2hpZnRLZXksdi5hbHRLZXksdi5tZXRhS2V5KX0pLDImZCYmaHIoInRhcmdldCIsaC50YXJnZXQpfSxpbnB1dHM6e3RhcmdldDoidGFyZ2V0IixxdWVyeVBhcmFtczoicXVlcnlQYXJhbXMi''@;'; put 'put ''LGZyYWdtZW50OiJmcmFnbWVudCIscXVlcnlQYXJhbXNIYW5kbGluZzoicXVlcnlQYXJhbXNIYW5kbGluZyIsc3RhdGU6InN0YXRlIixpbmZvOiJpbmZvIixyZWxhdGl2ZVRvOiJyZWxhdGl2ZVRvIixwcmVzZXJ2ZUZyYWdtZW50OltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwicHJl''@;'; put 'put ''c2VydmVGcmFnbWVudCIsInByZXNlcnZlRnJhZ21lbnQiLHMxXSxza2lwTG9jYXRpb25DaGFuZ2U6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJza2lwTG9jYXRpb25DaGFuZ2UiLCJza2lwTG9jYXRpb25DaGFuZ2UiLHMxXSxyZXBsYWNlVXJsOltObi5IYXNEZWNvcmF0b3JJbnB1''@;'; put 'put ''dFRyYW5zZm9ybSwicmVwbGFjZVVybCIsInJlcGxhY2VVcmwiLHMxXSxyb3V0ZXJMaW5rOiJyb3V0ZXJMaW5rIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbV2wsd2xdfSl9fXJldHVybiBjfSkoKSxwYj0oKCk9PntjbGFzcyBje2dldCBpc0FjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2''@;'; put 'put ''ZX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2RyPWYsdGhpcy5saW5rPXYsdGhpcy5jbGFzc2VzPVtdLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnM9e2V4YWN0OiEx''@;'; put 'put ''fSx0aGlzLmlzQWN0aXZlQ2hhbmdlPW5ldyBLcix0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj1hLmV2ZW50cy5zdWJzY3JpYmUoTT0+e00gaW5zdGFuY2VvZiBwcCYmdGhpcy51cGRhdGUoKX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe2ZvKHRoaXMubGlua3MuY2hhbmdlcyxmbyhudWxs''@;'; put 'put ''KSkucGlwZShlYigpKS5zdWJzY3JpYmUoYT0+e3RoaXMudXBkYXRlKCksdGhpcy5zdWJzY3JpYmVUb0VhY2hMaW5rT25DaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb0VhY2hMaW5rT25DaGFuZ2VzKCl7dGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO2NvbnN0''@;'; put 'put ''IGE9Wy4uLnRoaXMubGlua3MudG9BcnJheSgpLHRoaXMubGlua10uZmlsdGVyKGQ9PiEhZCkubWFwKGQ9PmQub25DaGFuZ2VzKTt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb249WXUoYSkucGlwZShlYigpKS5zdWJzY3JpYmUoZD0+e3RoaXMuX2lzQWN0aXZlIT09dGhpcy5pc0xp''@;'; put 'put ''bmtBY3RpdmUodGhpcy5yb3V0ZXIpKGQpJiZ0aGlzLnVwZGF0ZSgpfSl9c2V0IHJvdXRlckxpbmtBY3RpdmUoYSl7Y29uc3QgZD1BcnJheS5pc0FycmF5KGEpP2E6YS5zcGxpdCgiICIpO3RoaXMuY2xhc3Nlcz1kLmZpbHRlcihoPT4hIWgpfW5nT25DaGFuZ2VzKGEpe3RoaXMudXBkYXRlKCl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX11cGRhdGUoKXshdGhpcy5saW5rc3x8IXRoaXMucm91dGVyLm5hdmlnYXRlZHx8cXVldWVNaWNyb3Rh''@;'; put 'put ''c2soKCk9Pntjb25zdCBhPXRoaXMuaGFzQWN0aXZlTGlua3MoKTt0aGlzLmNsYXNzZXMuZm9yRWFjaChkPT57YT90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsZCl9KSxhJiZ2b2lkIDAhPT10aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZT90aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwiYXJpYS1jdXJyZW50Iix0aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZS50b1N0cmluZygpKTp0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwiYXJpYS1jdXJyZW50IiksdGhpcy5faXNBY3RpdmUhPT1hJiYodGhpcy5faXNBY3RpdmU9YSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlzQWN0aXZlQ2hhbmdlLmVtaXQoYSkpfSl9aXNMaW5r''@;'; put 'put ''QWN0aXZlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdlRlKGMpe3JldHVybiEhYy5wYXRoc30odGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyk/dGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczp0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zLmV4YWN0fHwhMTtyZXR1cm4gaD0+e2NvbnN0''@;'; put 'put ''IGY9aC51cmxUcmVlO3JldHVybiEhZiYmYS5pc0FjdGl2ZShmLGQpfX1oYXNBY3RpdmVMaW5rcygpe2NvbnN0IGE9dGhpcy5pc0xpbmtBY3RpdmUodGhpcy5yb3V0ZXIpO3JldHVybiB0aGlzLmxpbmsmJmEodGhpcy5saW5rKXx8dGhpcy5saW5rcy5zb21lKGEpfXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZShKaSksR2UoRW8pLEdlKEVzKSxHZShjMSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0''@;'; put 'put ''aW9uKGQsaCxmKXtpZigxJmQmJmFvKGYsYzEsNSksMiZkKXtsZXQgdjtDaSh2PVNpKCkpJiYoaC5saW5rcz12KX19LGlucHV0czp7cm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6InJvdXRlckxpbmtBY3RpdmVPcHRpb25zIixhcmlhQ3VycmVudFdoZW5BY3RpdmU6ImFyaWFDdXJyZW50V2hlbkFj''@;'; put 'put ''dGl2ZSIscm91dGVyTGlua0FjdGl2ZToicm91dGVyTGlua0FjdGl2ZSJ9LG91dHB1dHM6e2lzQWN0aXZlQ2hhbmdlOiJpc0FjdGl2ZUNoYW5nZSJ9LGV4cG9ydEFzOlsicm91dGVyTGlua0FjdGl2ZSJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3dsXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mg''@;'; put 'put ''c2Nle31sZXQgeVRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJvdXRlcj1hLHRoaXMuaW5qZWN0b3I9aCx0aGlzLnByZWxvYWRpbmdTdHJhdGVneT1mLHRoaXMubG9hZGVyPXZ9c2V0VXBQcmVsb2FkaW5nKCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0''@;'; put 'put ''ZXIuZXZlbnRzLnBpcGUoJGwoYT0+YSBpbnN0YW5jZW9mIHBwKSx0YigoKT0+dGhpcy5wcmVsb2FkKCkpKS5zdWJzY3JpYmUoKCk9Pnt9KX1wcmVsb2FkKCl7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0aGlzLmluamVjdG9yLHRoaXMucm91dGVyLmNvbmZpZyl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcm9jZXNzUm91dGVzKGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBkKXtmLnByb3ZpZGVycyYmIWYuX2luamVjdG9yJiYoZi5faW5qZWN0b3I9RzQoZi5wcm92aWRlcnMsYSxgUm91dGU6ICR7''@;'; put 'put ''Zi5wYXRofWApKTtjb25zdCB2PWYuX2luamVjdG9yPz9hLE09Zi5fbG9hZGVkSW5qZWN0b3I/P3Y7KGYubG9hZENoaWxkcmVuJiYhZi5fbG9hZGVkUm91dGVzJiZ2b2lkIDA9PT1mLmNhbkxvYWR8fGYubG9hZENvbXBvbmVudCYmIWYuX2xvYWRlZENvbXBvbmVudCkmJmgucHVzaCh0aGlzLnBy''@;'; put 'put ''ZWxvYWRDb25maWcodixmKSksKGYuY2hpbGRyZW58fGYuX2xvYWRlZFJvdXRlcykmJmgucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoTSxmLmNoaWxkcmVuPz9mLl9sb2FkZWRSb3V0ZXMpKX1yZXR1cm4gWXUoaCkucGlwZShlYigpKX1wcmVsb2FkQ29uZmlnKGEsZCl7cmV0dXJuIHRoaXMucHJl''@;'; put 'put ''bG9hZGluZ1N0cmF0ZWd5LnByZWxvYWQoZCwoKT0+e2xldCBoO2g9ZC5sb2FkQ2hpbGRyZW4mJnZvaWQgMD09PWQuY2FuTG9hZD90aGlzLmxvYWRlci5sb2FkQ2hpbGRyZW4oYSxkKTpmbyhudWxsKTtjb25zdCBmPWgucGlwZShOMCh2PT5udWxsPT09dj9mbyh2b2lkIDApOihkLl9sb2FkZWRS''@;'; put 'put ''b3V0ZXM9di5yb3V0ZXMsZC5fbG9hZGVkSW5qZWN0b3I9di5pbmplY3Rvcix0aGlzLnByb2Nlc3NSb3V0ZXModi5pbmplY3Rvcj8/YSx2LnJvdXRlcykpKSk7cmV0dXJuIGQubG9hZENvbXBvbmVudCYmIWQuX2xvYWRlZENvbXBvbmVudD9ZdShbZix0aGlzLmxvYWRlci5sb2FkQ29tcG9uZW50''@;'; put 'put ''KGQpXSkucGlwZShlYigpKTpmfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoTHMpLHhyKEtpZSkseHIoaGMpLHhyKHNjZSkseHIoZ1cpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj''@;'; put 'put ''LHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCB2Vz1uZXcgTXQoIiIpO2xldCBsY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHY9e30pe3RoaXMudXJsU2VyaWFsaXplcj1hLHRoaXMudHJhbnNpdGlvbnM9ZCx0aGlzLnZpZXdwb3J0U2Nyb2xsZXI9''@;'; put 'put ''aCx0aGlzLnpvbmU9Zix0aGlzLm9wdGlvbnM9dix0aGlzLmxhc3RJZD0wLHRoaXMubGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSIsdGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zdG9yZT17fSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9ZmkoaGMpLHYuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbnx8''@;'; put 'put ''PSJkaXNhYmxlZCIsdi5hbmNob3JTY3JvbGxpbmd8fD0iZGlzYWJsZWQifWluaXQoKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIpLHRo''@;'; put 'put ''aXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9Y3JlYXRlU2Nyb2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1''@;'; put 'put ''YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIEJSPyh0aGlzLnN0b3JlW3RoaXMubGFzdElkXT10aGlzLnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLmxhc3RTb3VyY2U9YS5uYXZpZ2F0aW9uVHJpZ2dlcix0aGlzLnJlc3RvcmVkSWQ9YS5yZXN0b3JlZFN0YXRlP2Eu''@;'; put 'put ''cmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6MCk6YSBpbnN0YW5jZW9mIHBwPyh0aGlzLmxhc3RJZD1hLmlkLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybEFmdGVyUmVkaXJlY3RzKS5mcmFnbWVudCkpOmEgaW5zdGFuY2VvZiBzYiYm''@;'; put 'put ''YS5jb2RlPT09alIuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs''@;'; put 'put ''RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIEZsZSYmKGEucG9zaXRpb24/InRvcCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3Np''@;'; put 'put ''dGlvbihbMCwwXSk6ImVuYWJsZWQiPT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKGEucG9zaXRpb24pOmEuYW5jaG9yJiYiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuYW5jaG9yU2Nyb2xsaW5n''@;'; put 'put ''P3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb0FuY2hvcihhLmFuY2hvcik6ImRpc2FibGVkIiE9PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihbMCwwXSkpfSl9c2NoZWR1bGVTY3JvbGxF''@;'; put 'put ''dmVudChhLGQpe3ZhciBoPXRoaXM7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKFEoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoZj0+e3NldFRpbWVvdXQoKCk9PntmKCl9KSxfeSgoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25lLnJ1''@;'; put 'put ''bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IEZsZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0''@;'; put 'put ''aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIFNEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiB1Y2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVudHNb''@;'; put 'put ''MF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoZGNlKTsxPT09Yy5nZXQoeVcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQoaGNlLG51bGwscmEuT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldCh2VyxudWxsLHJhLk9wdGlvbmFsKT8uaW5pdCgpLGQucmVz''@;'; put 'put ''ZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBdKSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBkY2U9bmV3IE10KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSx5Vz1uZXcgTXQoIiIse3Byb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''LGZhY3Rvcnk6KCk9PjF9KSxoY2U9bmV3IE10KCIiKTtmdW5jdGlvbiBDVGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOmhjZSx1c2VFeGlzdGluZzp5VGV9LHtwcm92aWRlOnNjZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIE1UZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6cmNlLHVz''@;'; put 'put ''ZVZhbHVlOmFUZX0se3Byb3ZpZGU6aWNlLHVzZVZhbHVlOntza2lwTmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZmNlPW5ldyBNdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4VGU9W2ZoLHtwcm92aWRlOmliLHVzZUNsYXNzOiRafSxM''@;'; put 'put ''cyxxTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LGdXLFtdXTtsZXQgemM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6Yyxw''@;'; put 'put ''cm92aWRlcnM6W3hUZSxbXSx7cHJvdmlkZTpmYixtdWx0aTohMCx1c2VWYWx1ZTphfSx7cHJvdmlkZTpmY2UsdXNlRmFjdG9yeTprVGUsZGVwczpbW0xzLG5ldyBJMSxuZXcgbGRdXX0se3Byb3ZpZGU6aGIsdXNlVmFsdWU6ZHx8e319LGQ/LnVzZUhhc2g/e3Byb3ZpZGU6WjgsdXNlQ2xhc3M6''@;'; put 'put ''dl9lfTp7cHJvdmlkZTpaOCx1c2VDbGFzczpCYWV9LHtwcm92aWRlOnZXLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPWZpKFJ3ZSksbD1maShXYSksYT1maShoYiksZD1maShHUiksaD1maShpYik7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3''@;'; put 'put ''IGxjZShoLGQsYyxsLGEpfX0sZD8ucHJlbG9hZGluZ1N0cmF0ZWd5P0NUZShkLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmluaXRpYWxOYXZpZ2F0aW9uP0RUZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/bXAoOCxbVWxlLHtwcm92aWRlOlVSLHVz''@;'; put 'put ''ZUV4aXN0aW5nOlVsZX1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8uZW5hYmxlVmlld1RyYW5zaXRpb25zP01UZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6cGNlLHVzZUZhY3Rvcnk6dWNlfSx7cHJvdmlkZTprVSxtdWx0aTohMCx1c2VFeGlzdGluZzpwY2V9XV19fXN0YXRpYyBm''@;'; put 'put ''b3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOmZiLG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoZmNlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0''@;'; put 'put ''eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24ga1RlKGMpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBEVGUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDMsW3twcm92aWRlOlRVLG11bHRpOiEw''@;'; put 'put ''LHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKExzKTtyZXR1cm4oKT0+e2wuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6eVcsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21w''@;'; put 'put ''KDIsW3twcm92aWRlOnlXLHVzZVZhbHVlOjB9LHtwcm92aWRlOlRVLG11bHRpOiEwLGRlcHM6W0RzXSx1c2VGYWN0b3J5Omw9Pntjb25zdCBhPWwuZ2V0KGdfZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9bC5nZXQoTHMp''@;'; put 'put ''LGY9bC5nZXQoZGNlKTtvY2UoaCwoKT0+e2QoITApfSksbC5nZXQoR1IpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KGQoITApLGYuY2xvc2VkP2ZvKHZvaWQgMCk6ZiksaC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IHBjZT1uZXcgTXQoIiIp''@;'; put 'put ''O3ZhciBnYj1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGlnaHQiLGMuZGFyaz0iZGFyayIsY30oZ2J8fHt9KSxnY2U9Yig1NTE4OCksUlRlPWIoNzg3NTUpO2NvbnN0IGJXPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2VkOjE1''@;'; put 'put ''LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVj''@;'; put 'put ''b3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGdoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2FsbG93''@;'; put 'put ''ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNfaW5f''@;'; put 'put ''bGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5lZGl0''@;'; put 'put ''UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZ2h8fHt9KSxtaD1iKDM3MzQpLG1jZT1iLm4obWgpLEIwPWIoMTMyNDcpO2xldCBROD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3RoaXMu''@;'; put 'put ''ZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLF9XPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVzZXJDaGFuZ2U9bmV3IFdufXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzICRSe2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1lOiEwLHNlbGVjdGVkVGhlbWU6Z2IubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IGVpKHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtjb25z''@;'; put 'put ''dCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3MiKTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5ncyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxsIHNl''@;'; put 'put ''dCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xlLndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3JnYWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5naWZ5''@;'; put 'put ''KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4ubH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgdmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNldHRp''@;'; put 'put ''bmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBLcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IEtyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgS3IsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBLcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5ldyBL''@;'; put 'put ''cix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IGVpKCExKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFyayIp''@;'; put 'put ''OmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHtzZWxlY3RlZFRoZW1lOmE/Z2IuZGFyazpnYi5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0TW9k''@;'; put 'put ''YWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxsKTts''@;'; put 'put ''ZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9yKGEs''@;'; put 'put ''ZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJihoPSJT''@;'; put 'put ''QVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFyKCl7''@;'; put 'put ''d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0dXBE''@;'; put 'put ''YXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBLUnt9Y2xhc3MgcVJ7fWNs''@;'; put 'put ''YXNzIEUye2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29uc3Qg''@;'; put 'put ''ZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGljZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVzaCh2''@;'; put 'put ''KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMu''@;'; put 'put ''aGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkpfWdl''@;'; put 'put ''dChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwo''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJz''@;'; put 'put ''In0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5SW5p''@;'; put 'put ''dCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFMj90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSksdGhp''@;'; put 'put ''cy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1lcy5n''@;'; put 'put ''ZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgRTI7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEUyP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9YXBw''@;'; put 'put ''bHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwu''@;'; put 'put ''bmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2KXJl''@;'; put 'put ''dHVybjt2PXYuZmlsdGVyKE09Pi0xPT09Zi5pbmRleE9mKE0pKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9y''@;'; put 'put ''bWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5h''@;'; put 'put ''bWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgTFRle2VuY29kZUtleShsKXtyZXR1cm4g''@;'; put 'put ''dmNlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiB2Y2UobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgUFRlPS8lKFxkW2EtZjAtOV0pL2dpLEZUZT17NDA6IkAiLCIz''@;'; put 'put ''QSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gdmNlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShQVGUsKGwsYSk9PkZUZVthXT8/bCl9ZnVuY3Rpb24gWFIoYyl7cmV0dXJuYCR7Y31gfWNs''@;'; put 'put ''YXNzIHNte2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5jb2Rlcnx8bmV3IExUZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGgg''@;'; put 'put ''ZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBPVGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1dPS0x''@;'; put 'put ''PT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxJPWEuZ2V0KHYpfHxbXTtJLnB1c2goTSksYS5zZXQodixJKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2JqZWN0''@;'; put 'put ''Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKFhSKTpbWFIoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5p''@;'; put 'put ''dCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJyYXku''@;'; put 'put ''aXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9ZGVs''@;'; put 'put ''ZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1hcChk''@;'; put 'put ''PT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShsKXtjb25zdCBhPW5ldyBzbSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMs''@;'; put 'put ''YS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9PnRo''@;'; put 'put ''aXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goWFIobC52YWx1''@;'; put 'put ''ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKFhSKGwudmFsdWUpKTstMSE9PWgm''@;'; put 'put ''JmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgSFRle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxhKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIHljZShjKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGJjZShjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3Rh''@;'; put 'put ''bmNlb2YgQmxvYn1mdW5jdGlvbiBfY2UoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyByeHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEs''@;'; put 'put ''dGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBOVGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJl''@;'; put 'put ''dHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFscyxm''@;'; put 'put ''LnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRyYW5z''@;'; put 'put ''ZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgRTIsdGhpcy5jb250ZXh0Pz89bmV3IEhUZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0IE09''@;'; put 'put ''YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgc20sdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fHljZSh0aGlzLmJvZHkpfHxiY2UodGhpcy5ib2R5KXx8X2NlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFZUZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSk/''@;'; put 'put ''dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHNtP3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRo''@;'; put 'put ''aXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fF9jZSh0aGlzLmJvZHkpP251bGw6YmNlKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6eWNlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRo''@;'; put 'put ''aXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2Ygc20/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlw''@;'; put 'put ''ZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFuc2Zl''@;'; put 'put ''ckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsST1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBHPWwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGllPWwucGFyYW1z''@;'; put 'put ''fHx0aGlzLnBhcmFtcztjb25zdCB1ZT1sLmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoRz1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgoeWUsRWUpPT55ZS5zZXQoRWUsbC5zZXRIZWFkZXJzW0VlXSksRykpLGwuc2V0UGFyYW1z''@;'; put 'put ''JiYoaWU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoeWUsRWUpPT55ZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxpZSkpLG5ldyByeChhLGQsdix7cGFyYW1zOmllLGhlYWRlcnM6Ryxjb250ZXh0OnVlLHJlcG9ydFByb2dyZXNzOkkscmVzcG9uc2VUeXBlOmgsd2l0aENyZWRl''@;'; put 'put ''bnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9hZFBy''@;'; put 'put ''b2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30obG18fHt9KTtjbGFzcyB3V3tjb25zdHJ1Y3RvcihsLGE9aXguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5zdGF0''@;'; put 'put ''dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBKUiBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30p''@;'; put 'put ''e3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZUhlYWRlcn1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEpSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVzVGV4''@;'; put 'put ''dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBlNyBleHRlbmRzIHdXe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1sbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25lKGw9''@;'; put 'put ''e30pe3JldHVybiBuZXcgZTcoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRoaXMu''@;'; put 'put ''c3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgbWIgZXh0ZW5kcyB3V3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0''@;'; put 'put ''YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1c1Rl''@;'; put 'put ''eHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciBpeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vzc2lu''@;'; put 'put ''ZyIsY1tjLkVhcmx5SGludHM9MTAzXT0iRWFybHlIaW50cyIsY1tjLk9rPTIwMF09Ik9rIixjW2MuQ3JlYXRlZD0yMDFdPSJDcmVhdGVkIixjW2MuQWNjZXB0ZWQ9MjAyXT0iQWNjZXB0ZWQiLGNbYy5Ob25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb249MjAzXT0iTm9uQXV0aG9yaXRhdGl2ZUlu''@;'; put 'put ''Zm9ybWF0aW9uIixjW2MuTm9Db250ZW50PTIwNF09Ik5vQ29udGVudCIsY1tjLlJlc2V0Q29udGVudD0yMDVdPSJSZXNldENvbnRlbnQiLGNbYy5QYXJ0aWFsQ29udGVudD0yMDZdPSJQYXJ0aWFsQ29udGVudCIsY1tjLk11bHRpU3RhdHVzPTIwN109Ik11bHRpU3RhdHVzIixjW2MuQWxyZWFk''@;'; put 'put ''eVJlcG9ydGVkPTIwOF09IkFscmVhZHlSZXBvcnRlZCIsY1tjLkltVXNlZD0yMjZdPSJJbVVzZWQiLGNbYy5NdWx0aXBsZUNob2ljZXM9MzAwXT0iTXVsdGlwbGVDaG9pY2VzIixjW2MuTW92ZWRQZXJtYW5lbnRseT0zMDFdPSJNb3ZlZFBlcm1hbmVudGx5IixjW2MuRm91bmQ9MzAyXT0iRm91''@;'; put 'put ''bmQiLGNbYy5TZWVPdGhlcj0zMDNdPSJTZWVPdGhlciIsY1tjLk5vdE1vZGlmaWVkPTMwNF09Ik5vdE1vZGlmaWVkIixjW2MuVXNlUHJveHk9MzA1XT0iVXNlUHJveHkiLGNbYy5VbnVzZWQ9MzA2XT0iVW51c2VkIixjW2MuVGVtcG9yYXJ5UmVkaXJlY3Q9MzA3XT0iVGVtcG9yYXJ5UmVkaXJl''@;'; put 'put ''Y3QiLGNbYy5QZXJtYW5lbnRSZWRpcmVjdD0zMDhdPSJQZXJtYW5lbnRSZWRpcmVjdCIsY1tjLkJhZFJlcXVlc3Q9NDAwXT0iQmFkUmVxdWVzdCIsY1tjLlVuYXV0aG9yaXplZD00MDFdPSJVbmF1dGhvcml6ZWQiLGNbYy5QYXltZW50UmVxdWlyZWQ9NDAyXT0iUGF5bWVudFJlcXVpcmVkIixj''@;'; put 'put ''W2MuRm9yYmlkZGVuPTQwM109IkZvcmJpZGRlbiIsY1tjLk5vdEZvdW5kPTQwNF09Ik5vdEZvdW5kIixjW2MuTWV0aG9kTm90QWxsb3dlZD00MDVdPSJNZXRob2ROb3RBbGxvd2VkIixjW2MuTm90QWNjZXB0YWJsZT00MDZdPSJOb3RBY2NlcHRhYmxlIixjW2MuUHJveHlBdXRoZW50aWNhdGlv''@;'; put 'put ''blJlcXVpcmVkPTQwN109IlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCIsY1tjLlJlcXVlc3RUaW1lb3V0PTQwOF09IlJlcXVlc3RUaW1lb3V0IixjW2MuQ29uZmxpY3Q9NDA5XT0iQ29uZmxpY3QiLGNbYy5Hb25lPTQxMF09IkdvbmUiLGNbYy5MZW5ndGhSZXF1aXJlZD00MTFdPSJMZW5n''@;'; put 'put ''dGhSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvbkZhaWxlZD00MTJdPSJQcmVjb25kaXRpb25GYWlsZWQiLGNbYy5QYXlsb2FkVG9vTGFyZ2U9NDEzXT0iUGF5bG9hZFRvb0xhcmdlIixjW2MuVXJpVG9vTG9uZz00MTRdPSJVcmlUb29Mb25nIixjW2MuVW5zdXBwb3J0ZWRNZWRpYVR5cGU9NDE1''@;'; put 'put ''XT0iVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLGNbYy5SYW5nZU5vdFNhdGlzZmlhYmxlPTQxNl09IlJhbmdlTm90U2F0aXNmaWFibGUiLGNbYy5FeHBlY3RhdGlvbkZhaWxlZD00MTddPSJFeHBlY3RhdGlvbkZhaWxlZCIsY1tjLkltQVRlYXBvdD00MThdPSJJbUFUZWFwb3QiLGNbYy5NaXNkaXJl''@;'; put 'put ''Y3RlZFJlcXVlc3Q9NDIxXT0iTWlzZGlyZWN0ZWRSZXF1ZXN0IixjW2MuVW5wcm9jZXNzYWJsZUVudGl0eT00MjJdPSJVbnByb2Nlc3NhYmxlRW50aXR5IixjW2MuTG9ja2VkPTQyM109IkxvY2tlZCIsY1tjLkZhaWxlZERlcGVuZGVuY3k9NDI0XT0iRmFpbGVkRGVwZW5kZW5jeSIsY1tjLlRv''@;'; put 'put ''b0Vhcmx5PTQyNV09IlRvb0Vhcmx5IixjW2MuVXBncmFkZVJlcXVpcmVkPTQyNl09IlVwZ3JhZGVSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvblJlcXVpcmVkPTQyOF09IlByZWNvbmRpdGlvblJlcXVpcmVkIixjW2MuVG9vTWFueVJlcXVlc3RzPTQyOV09IlRvb01hbnlSZXF1ZXN0cyIsY1tj''@;'; put 'put ''LlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZT00MzFdPSJSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLGNbYy5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucz00NTFdPSJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsY1tjLkludGVybmFsU2VydmVyRXJyb3I9NTAwXT0iSW50ZXJu''@;'; put 'put ''YWxTZXJ2ZXJFcnJvciIsY1tjLk5vdEltcGxlbWVudGVkPTUwMV09Ik5vdEltcGxlbWVudGVkIixjW2MuQmFkR2F0ZXdheT01MDJdPSJCYWRHYXRld2F5IixjW2MuU2VydmljZVVuYXZhaWxhYmxlPTUwM109IlNlcnZpY2VVbmF2YWlsYWJsZSIsY1tjLkdhdGV3YXlUaW1lb3V0PTUwNF09Ikdh''@;'; put 'put ''dGV3YXlUaW1lb3V0IixjW2MuSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ9NTA1XT0iSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLGNbYy5WYXJpYW50QWxzb05lZ290aWF0ZXM9NTA2XT0iVmFyaWFudEFsc29OZWdvdGlhdGVzIixjW2MuSW5zdWZmaWNpZW50U3RvcmFnZT01MDddPSJJbnN1ZmZp''@;'; put 'put ''Y2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxvb3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KGl4fHx7''@;'; put 'put ''fSk7ZnVuY3Rpb24gQ1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3''@;'; put 'put ''aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBTVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiByeClmPWE7ZWxz''@;'; put 'put ''ZXtsZXQgSSxHO0k9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5oZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoRz1oLnBhcmFtcyBpbnN0YW5jZW9mIHNtP2gucGFyYW1zOm5ldyBzbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyByeChhLGQsdm9pZCAwIT09aC5i''@;'; put 'put ''b2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkksY29udGV4dDpoLmNvbnRleHQscGFyYW1zOkcscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJD''@;'; put 'put ''YWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZvKGYpLnBpcGUodGIoST0+dGhpcy5oYW5kbGVyLmhhbmRsZShJKSkpO2lmKGEgaW5zdGFuY2VvZiByeHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoJGwoST0+SSBpbnN0YW5jZW9mIGU3KSk7c3dp''@;'; put 'put ''dGNoKGgub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE0ucGlwZShMcihJPT57aWYobnVsbCE9PUkuYm9keSYmIShJLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJS''@;'; put 'put ''ZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIEkuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoTHIoST0+e2lmKG51bGwhPT1JLmJvZHkmJiEoSS5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9i''@;'; put 'put ''LiIpO3JldHVybiBJLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gTS5waXBlKExyKEk9PntpZihudWxsIT09SS5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEkuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gSS5ib2R5fSkpO2RlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIE0ucGlwZShMcihJPT5JLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0''@;'; put 'put ''KCJERUxFVEUiLGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHNtKS5hcHBl''@;'; put 'put ''bmQoZCwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLENXKGgsZCkp''@;'; put 'put ''fXBvc3QoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsQ1coaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsQ1coaCxkKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoS1IpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBDY2UoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBaVGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0p''@;'; put 'put ''fWNvbnN0IFlUZT1uZXcgTXQoIiIpLGF4PW5ldyBNdCgiIiksU2NlPW5ldyBNdCgiIiksTWNlPW5ldyBNdCgiIik7ZnVuY3Rpb24gR1RlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoWVRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoWlRlLENj''@;'; put 'put ''ZSkpO2NvbnN0IGQ9ZmkoUGYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoVU0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCB4Y2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5j''@;'; put 'put ''aGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFBmKTtjb25zdCBoPWZpKE1jZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChh''@;'; put 'put ''eCksLi4udGhpcy5pbmplY3Rvci5nZXQoU2NlLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFdUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLENjZSl9Y29uc3QgZD10aGlzLnBl''@;'; put 'put ''bmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoVU0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHFSKSx4''@;'; put 'put ''cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEpUZT0vXlwpXF1cfScsP1xuLztsZXQgVGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFuZGxl''@;'; put 'put ''KGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4oLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1l1KGQuXHUwMjc1bG9hZEltcGwoKSk6Zm8obnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1kLmJ1''@;'; put 'put ''aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMoIkFj''@;'; put 'put ''Y2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1ZXN0''@;'; put 'put ''SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNlVHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgST1udWxsO2NvbnN0IEc9''@;'; put 'put ''KCk9PntpZihudWxsIT09SSlyZXR1cm4gSTtjb25zdCBxZT12LnN0YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uIFFUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9e''@;'; put 'put ''WC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEk9bmV3IEpSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVybDpw''@;'; put 'put ''dH0pLEl9LGllPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1HKCksSnQ9bnVsbDtydCE9PWl4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9peC5P''@;'; put 'put ''azowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEpUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24sdm4m''@;'; put 'put ''Jih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5uZXh0KG5ldyBlNyh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbWIoe2Vycm9yOkp0LGhlYWRlcnM6cWUsc3Rh''@;'; put 'put ''dHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSl9LHVlPXFlPT57Y29uc3R7dXJsOnJ0fT1HKCkscHQ9bmV3IG1iKHtlcnJvcjpxZSxzdGF0dXM6di5zdGF0dXN8fDAsc3RhdHVzVGV4dDp2LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6cnR8fHZvaWQgMH0pO2Yu''@;'; put 'put ''ZXJyb3IocHQpfTtsZXQgeWU9ITE7Y29uc3QgRWU9cWU9Pnt5ZXx8KGYubmV4dChHKCkpLHllPSEwKTtsZXQgcnQ9e3R5cGU6bG0uRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLCJ0ZXh0Ij09PWEucmVz''@;'; put 'put ''cG9uc2VUeXBlJiZ2LnJlc3BvbnNlVGV4dCYmKHJ0LnBhcnRpYWxUZXh0PXYucmVzcG9uc2VUZXh0KSxmLm5leHQocnQpfSxqZT1xZT0+e2xldCBydD17dHlwZTpsbS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90''@;'; put 'put ''YWwpLGYubmV4dChydCl9O3JldHVybiB2LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGllKSx2LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix1ZSksdi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0Iix1ZSksdi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsdWUpLGEucmVwb3J0UHJvZ3Jlc3Mm''@;'; put 'put ''Jih2LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixFZSksbnVsbCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsamUpKSx2LnNlbmQoTSksZi5uZXh0KHt0eXBlOmxtLlNlbnR9KSwoKT0+e3YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3Ii''@;'; put 'put ''LHVlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1ZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixpZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0Iix1ZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVlKSxu''@;'; put 'put ''dWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixqZSkpLHYucmVhZHlTdGF0ZSE9PXYuRE9ORSYmdi5hYm9ydCgpfX0pKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIob29lKSl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVc9bmV3IE10KCIiKSxBY2U9bmV3IE10KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxrY2U9bmV3IE10KCIiLHtw''@;'; put 'put ''cm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pO2NsYXNzIERjZXt9bGV0IG5BZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9''@;'; put 'put ''IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNl''@;'; put 'put ''Q291bnQrKyx0aGlzLmxhc3RUb2tlbj1xYWUoYSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoaW8pLHhyKEFjZSkpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHJBZShjLGwpe2NvbnN0IGE9Yy51cmwudG9Mb3dlckNhc2UoKTtpZighZmkoRVcpfHwiR0VUIj09PWMubWV0aG9kfHwiSEVBRCI9PT1jLm1ldGhvZHx8YS5z''@;'; put 'put ''dGFydHNXaXRoKCJodHRwOi8vIil8fGEuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gbChjKTtjb25zdCBkPWZpKERjZSkuZ2V0VG9rZW4oKSxoPWZpKGtjZSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQo''@;'; put 'put ''aCxkKX0pKSxsKGMpfXZhciBjbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNv''@;'; put 'put ''bmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIs''@;'; put 'put ''Y30oY218fHt9KTtmdW5jdGlvbiB0NyhjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIGlBZSguLi5jKXtjb25zdCBsPVtTVyxUY2UseGNlLHtwcm92aWRlOktSLHVzZUV4aXN0aW5nOnhjZX0se3Byb3ZpZGU6cVIsdXNlRXhpc3Rpbmc6VGNlfSx7''@;'; put 'put ''cHJvdmlkZTpheCx1c2VWYWx1ZTpyQWUsbXVsdGk6ITB9LHtwcm92aWRlOkVXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpEY2UsdXNlQ2xhc3M6bkFlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiBiZihjKXtyZXR1cm57XHUw''@;'; put 'put ''Mjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBJY2U9bmV3IE10KCIiKTtsZXQgb0FlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1aW5qPUFyKHtwcm92aWRlcnM6W2lBZSh0NyhjbS5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOkljZSx1c2VGYWN0b3J5OkdUZX0se3Byb3ZpZGU6YXgsdXNlRXhpc3Rpbmc6SWNlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLFZjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRp''@;'; put 'put ''bmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0''@;'; put 'put ''aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAs''@;'; put 'put ''dGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdl''@;'; put 'put ''dEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZp''@;'; put 'put ''bmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihTVykseHIoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9fXJldHVybiBjfSkoKSxUVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3NfSW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBv''@;'; put 'put ''cnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNzIn0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9q''@;'; put 'put ''b2JFeGVjdXRpb24iLGNvbnRleHRzOiIvY29tcHV0ZS9jb250ZXh0cyJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1p''@;'; put 'put ''Y3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0''@;'; put 'put ''aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlv''@;'; put 'put ''bnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3Ro''@;'; put 'put ''ZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIifXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWE/LnNlcnZlclVybHx8IiJ9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy52aXlhQXBpc31nZXRCeVVybChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFs''@;'; put 'put ''czohMH0pfWdldENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldENvbXB1dGVDb250ZXh0QnlJZChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2Nv''@;'; put 'put ''bXB1dGUvY29udGV4dHMvJHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEZvbGRlckJ5UGF0aChhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJNZW1i''@;'; put 'put ''ZXJzKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzLyR7YX0vbWVtYmVyc2Ase3dpdGhDcmVkZW50aWFsczohMH0pfWdldEFkbWluR3JvdXBzKGE9NWUzKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvZ3Jv''@;'; put 'put ''dXBzP3NvcnRCeT1uYW1lJmxpbWl0PSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDdXJyZW50VXNlcigpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXQoYSxkKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5odHRwLmdldChhLGQpLnBpcGUoWDgoaD0+KGNvbnNvbGUubG9nKCJ1cmwiLGEpLGNvbnNvbGUubG9nKCJlcnIuc3RhdHVzIixoLnN0YXR1cyksNDQ5PT09aC5zdGF0dXN8fDQwMT09PWguc3RhdHVzP3RoaXMuaHR0cC5nZXQoYSxkKTp6TSgoKT0+aCkpKSl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU1cpLHhyKFE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksQnM9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5zYXNWaXlhU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMucm91dGVyPUks''@;'; put 'put ''dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBLcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEtyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhtY2UoKSksdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITEsdGhp''@;'; put 'put ''cy5zaG91bGRMb2dpbj1uZXcgZWkoITEpLHRoaXMubGljZW5zZV9zaXRlX2lkPW5ldyBlaShudWxsKX1zYXNTZXJ2aWNlSW5pdCgpe2lmKHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnNhc2pzU2VydmljZS5z''@;'; put 'put ''ZXR1cCgpLHRoaXMuc2FzVml5YVNlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNqc0FkYXB0ZXI9bmV3KG1jZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgQjAuWS5T''@;'; put 'put ''YXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBCMC5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIEIwLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95''@;'; put 'put ''KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxk''@;'; put 'put ''KSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihJPT57Y29uc3QgRz10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoaWU9PmllLnNlcnZpY2VMaW5rPT09''@;'; put 'put ''YSk7aWYoITE9PT1JLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOkc/LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmSS5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpJLk1GX0dF''@;'; put 'put ''VFVTRVJ9KSxJLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoSS5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEkuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1p''@;'; put 'put ''dHRlci5lbWl0KEkuU1lTU0lURSkpKSw0MDQ9PT1JLnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkkuYm9keXx8IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpHPy5sb2dGaWxlfSksdHlwZW9mIEkuc2FzanNBYm9ydDwidSIpe2NvbnN0IGllPUksdWU9aWUuc2Fz''@;'; put 'put ''anNBYm9ydFswXS5NU0cseWU9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYodWUuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOnVlfSxsb2c6Rz8ubG9nRmlsZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiks''@;'; put 'put ''dWUse1NZU1dBUk5JTkdURVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOnllfSksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjp1ZX0sbG9nOkc/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6SSxsb2c6Rz8ubG9nRmlsZX0pfSxJPT57''@;'; put 'put ''Y29uc29sZS5lcnJvcihJKTtjb25zdCBHPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChpZT0+aWUuc2VydmljZUxpbms9PT1hKTtpZihJLmVycm9yKXtsZXQgdWUsaWU9SS5lcnJvci5tZXNzYWdlO0kuZXJyb3IuZGV0YWlscyYmSS5lcnJvci5kZXRhaWxzLmxvZyYm''@;'; put 'put ''KHVlPUkuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtMT0c6dWV9LCJSZXF1''@;'; put 'put ''ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjppZX0sbG9nOkc/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9uc2U6SSxsb2c6Rz8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRlci51''@;'; put 'put ''cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBJPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChHPT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1HLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6ST8ubG9nRmlsZX0pfSxNPT57''@;'; put 'put ''Y29uc3QgST10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoRz0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09Ry5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6ST8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVu''@;'; put 'put ''Y3Rpb24qKCl7Y29uc3QgZj1oLmdldFNlcnZlclR5cGUoKT09PUIwLlkuU2FzanM/ImNsaWVudElEMSI6dm9pZCAwO3JldHVybiBoLnNhc2pzQWRhcHRlci5sb2dJbihhLGQsZikudGhlbih2PT4odi5pc0xvZ2dlZEluJiYoaC51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTp2LnVzZXJOYW1l''@;'; put 'put ''fSxoLmFwcExvY0NoZWNrUGVuZGluZyYmKGguY2hlY2tWaXlhRGVwbG95KGguZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIpLGguYXBwTG9jQ2hlY2tQZW5kaW5nPSExKSksaC5zaG91bGRMb2dpbi5uZXh0KCF2LmlzTG9nZ2VkSW4pLHYuaXNMb2dnZWRJbiksdj0+KGNvbnNvbGUuZXJy''@;'; put 'put ''b3IodiksaC5zaG91bGRMb2dpbi5uZXh0KCEwKSwhMSkpLmNhdGNoKHY9Pig0MDM9PT12JiZjb25zb2xlLmVycm9yKCJJbnZhbGlkIGhvc3QiKSwhMSkpfSkoKX1yZWxvYWRTdGFydHVwRGF0YSgpe3RoaXMubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCl9Z2V0TGljZW5zZVNpdGVJ''@;'; put 'put ''ZCgpe3JldHVybiB0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNpdGVJZChhKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgYT9hOlthXSl9Y2hlY2tTYXNqc0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7''@;'; put 'put ''Y29uc3QgaD1gJHthLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoaCkuc3Vic2NyaWJlKGY9PntmLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT8oYS5ldmVudFNlcnZpY2Uuc3Rh''@;'; put 'put ''cnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpOihhLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpLGEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKSl9LGY9PntmLmVycm9yLmlu''@;'; put 'put ''Y2x1ZGVzKCJVbmF1dGhvcml6ZWQiKT8oYS5zaG91bGRMb2dpbi5uZXh0KCEwKSxhLnNob3VsZExvZ2luLnN1YnNjcmliZSh2PT57ITE9PT12JiZsb2NhdGlvbi5yZWxvYWQoKX0pKTpmLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmKGNvbnNvbGUud2FybigiU0FT''@;'; put 'put ''anMgU0FTIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSl9KSgpfXNhc2pzTWFrZWRhdGFDaGVja2luZygpe3ZhciBhPXRo''@;'; put 'put ''aXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9UShmdW5jdGlvbiooaCxmKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoUShmdW5jdGlvbiooKXthLnNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpLnRoZW4odj0+e3YmJihj''@;'; put 'put ''bGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksaCh2KSl9KS5jYXRjaCh2PT57Y2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGYodil9KX0pLDFlMyl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX0pKCl9c2Fz''@;'; put 'put ''anNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250''@;'; put 'put ''ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57TS5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlz''@;'; put 'put ''O3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2LGY9ITE7aWYodHlwZW9mIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcjwidSIpe2NvbnN0IE09eWllbGQgZC5hcHBMb2NDaGVjayhhKTtmPU0uZm91bmQsdj1NLmVycm9yTWVzc2FnZX1lbHNlIGY9eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9z''@;'; put 'put ''ZEFkYXB0ZXIoYSk7Zj9kLnZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihNPT57TT9kLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpOihkLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9LE09Pntj''@;'; put 'put ''b25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBsb29raW5nIGZvciB0aGUgZmlsZTogbWFrZWRhdGEuc2FzIixNKX0pOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwodnx8IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3Ig''@;'; put 'put ''QVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIikrYFxuQXBwTG9jOiAke2F9YCl9KSgpfXZpeWFNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25z''@;'; put 'put ''dCBmPWEuZ2V0U2FzanNDb25maWcoKSx2PWAke2YuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNWaXlhU2VydmljZS5nZXRGb2xkZXJCeVBhdGgodikuc3Vic2NyaWJlKE09Pntjb25zdCBJPU0uaWQ7SXx8KGNvbnNvbGUuZXJyb3IoYEZvbGRlciBJRCBpcyBub3QgcHJlc2VudC4gJHt2''@;'; put 'put ''fWAsZiksZCghMSkpLGEuc2FzVml5YVNlcnZpY2UuZ2V0Rm9sZGVyTWVtYmVycyhJKS5zdWJzY3JpYmUoRz0+e0cuaXRlbXMuc29tZShpZT0+Im1ha2VkYXRhIj09PWllLm5hbWUpP2QoITEpOmQoITApfSxHPT57Y29uc29sZS5lcnJvcigiRXJyb3IgZ2V0dGluZyBmb2xkZXIgY29udGVudHMi''@;'; put 'put ''LEcpLGgoKX0pfSxNPT57Y29uc29sZS53YXJuKCJFcnJvciBnZXR0aW5nIGZvbGRlciBpbmZvIixNKSxoKE0pfSl9KX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1RKGZ1bmN0aW9uKihmLHYpe2xldCBJLE09IiI7dHJ5''@;'; put 'put ''e0k9eWllbGQgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9sZGVyKGEpfWNhdGNoKEcpeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09Ry5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoe2ZvdW5kOiExfSkpOk09Ik5vdEZvdW5kZUVycm9yIj09PUcubmFt''@;'; put 'put ''ZT9HLm1lc3NhZ2U6IlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihNLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKE0pLGYoe2ZvdW5k''@;'; put 'put ''OiExLGVycm9yTWVzc2FnZTpNfSk7Zih7Zm91bmQ6ITB9KX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntsZXQgdj0hMTtyZXR1''@;'; put 'put ''cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMmJih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRoaXMuc2hvdWxkTG9n''@;'; put 'put ''aW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9k''@;'; put 'put ''ZXBsb3kiKSxkKCExKTtsZXQgST1udWxsO3RyeXtJPUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEkmJkkuaHR0cFN0YXR1c0NvZGUmJjQwND09PUkuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQg''@;'; put 'put ''YXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipM''@;'; put 'put ''b2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0U2FzUmVxdWVzdHMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBlKCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZlclR5cGUpe2Nhc2Ug''@;'; put 'put ''QjAuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgQjAuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgQjAuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGEsZCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZpbGVDb250ZW50KGEs''@;'; put 'put ''ZCl9dXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChhLGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoUTgpLHhyKF9XKSx4cih2YykseHIoVmNlKSx4cihUVyks''@;'; put 'put ''eHIoU2QpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksU2Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9bG9nKGEsZCl7dGhp''@;'; put 'put ''cy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihkP2NvbnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFwdGVyIFJlcXVlc3Qg''@;'; put 'put ''SW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9yKGxldCBoIG9mIE9iamVjdC5rZXlzKGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNqc0NvbmZpZyl7Y29u''@;'; put 'put ''c3QgYT10aGlzLmluamVjdG9yLmdldChCcyk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQmNlPWZ1bmN0aW9uIHBBZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sZUw9ZnVuY3Rpb24gZ0FlKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoQmNlKGNbYV1bMF0sbCkp''@;'; put 'put ''cmV0dXJuIGE7cmV0dXJuLTF9O3ZhciB2QWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiB2YihjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX12Yi5wcm90b3R5cGUu''@;'; put 'put ''Y2xlYXI9ZnVuY3Rpb24gaEFlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sdmIucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB5QWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6dkFlLmNhbGwobCxh''@;'; put 'put ''LDEpLC0tdGhpcy5zaXplLDApKX0sdmIucHJvdG90eXBlLmdldD1mdW5jdGlvbiBfQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWVMKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sdmIucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBDQWUoYyl7cmV0dXJuIGVMKHRoaXMuX19kYXRh''@;'; put 'put ''X18sYyk+LTF9LHZiLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTUFlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPWVMKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IHRMPXZiLGpjZT0ib2JqZWN0Ij09dHlwZW9mIGds''@;'; put 'put ''b2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIFBBZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHZwPWpjZXx8UEFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHVtPXZwLlN5bWJv''@;'; put 'put ''bDt2YXIgemNlPU9iamVjdC5wcm90b3R5cGUsTkFlPXpjZS5oYXNPd25Qcm9wZXJ0eSxWQWU9emNlLnRvU3RyaW5nLG94PXVtP3VtLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgVUFlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFVjZT11bT91bS50b1N0cmluZ1RhZzp2b2lkIDA7Y29u''@;'; put 'put ''c3QgeWI9ZnVuY3Rpb24gJEFlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlVjZSYmVWNlIGluIE9iamVjdChjKT9mdW5jdGlvbiBCQWUoYyl7dmFyIGw9TkFlLmNhbGwoYyxveCksYT1jW294XTt0cnl7Y1tveF09dm9p''@;'; put 'put ''ZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1WQWUuY2FsbChjKTtyZXR1cm4gZCYmKGw/Y1tveF09YTpkZWxldGUgY1tveF0pLGh9KGMpOmZ1bmN0aW9uIFpBZShjKXtyZXR1cm4gVUFlLmNhbGwoYyl9KGMpfSxzeD1mdW5jdGlvbiBLQWUoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuIG51bGwh''@;'; put 'put ''PWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09bCl9LFpjZT1mdW5jdGlvbiBla2UoYyl7aWYoIXN4KGMpKXJldHVybiExO3ZhciBsPXliKGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEFzeW5jRnVu''@;'; put 'put ''Y3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH0sQVc9dnBbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciBXY2U9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKEFXJiZBVy5rZXlzJiZBVy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChzcmMpXzEuIitjOiIi''@;'; put 'put ''fSgpO3ZhciBha2U9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IG43PWZ1bmN0aW9uIG9rZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIGFrZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIGxrZT0vXlxbb2JqZWN0IC4rP0Nv''@;'; put 'put ''bnN0cnVjdG9yXF0kLyxma2U9UmVnRXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlv''@;'; put 'put ''bikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25zdCBna2U9ZnVuY3Rpb24gcGtlKGMpe3JldHVybiEoIXN4KGMpfHxmdW5jdGlvbiBua2UoYyl7cmV0dXJuISFXY2UmJldjZSBpbiBjfShjKSkmJihaY2UoYyk/ZmtlOmxrZSkudGVzdChuNyhjKSl9LHI3''@;'; put 'put ''PWZ1bmN0aW9uIHlrZShjLGwpe3ZhciBhPWZ1bmN0aW9uIG1rZShjLGwpe3JldHVybiBjPy5bbF19KGMsbCk7cmV0dXJuIGdrZShhKT9hOnZvaWQgMH0sbHg9cjcodnAsIk1hcCIpLGN4PXI3KE9iamVjdCwiY3JlYXRlIik7dmFyIFRrZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''O3ZhciBJa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBiYihjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1iYi5wcm90b3R5cGUuY2xlYXI9ZnVu''@;'; put 'put ''Y3Rpb24gd2tlKCl7dGhpcy5fX2RhdGFfXz1jeD9jeChudWxsKTp7fSx0aGlzLnNpemU9MH0sYmIucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBTa2UoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LGJiLnBy''@;'; put 'put ''b3RvdHlwZS5nZXQ9ZnVuY3Rpb24gQWtlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187aWYoY3gpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gVGtlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0sYmIucHJvdG90eXBlLmhhcz1m''@;'; put 'put ''dW5jdGlvbiBSa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztyZXR1cm4gY3g/dm9pZCAwIT09bFtjXTpJa2UuY2FsbChsLGMpfSxiYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFBrZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoYyk/MDoxLGFb''@;'; put 'put ''Y109Y3gmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmwsdGhpc307Y29uc3QgWWNlPWJiLG5MPWZ1bmN0aW9uIGprZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFZrZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3RyaW5nIj09bHx8Im51''@;'; put 'put ''bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBfYihjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5j''@;'; put 'put ''bGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1fYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSGtlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgWWNlLG1hcDpuZXcobHh8fHRMKSxzdHJpbmc6bmV3IFljZX19LF9iLnByb3RvdHlw''@;'; put 'put ''ZS5kZWxldGU9ZnVuY3Rpb24gemtlKGMpe3ZhciBsPW5MKHRoaXMsYykuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LF9iLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gWmtlKGMpe3JldHVybiBuTCh0aGlzLGMpLmdldChjKX0sX2IucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBZ''@;'; put 'put ''a2UoYyl7cmV0dXJuIG5MKHRoaXMsYykuaGFzKGMpfSxfYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uICRrZShjLGwpe3ZhciBhPW5MKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IGtXPV9iO2Z1bmN0aW9uIHdi''@;'; put 'put ''KGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IHRMKGMpO3RoaXMuc2l6ZT1sLnNpemV9d2IucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIEVBZSgpe3RoaXMuX19kYXRhX189bmV3IHRMLHRoaXMuc2l6ZT0wfSx3Yi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIEFBZShjKXt2YXIgbD10aGlz''@;'; put 'put ''Ll9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZT1sLnNpemUsYX0sd2IucHJvdG90eXBlLmdldD1mdW5jdGlvbiBEQWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSx3Yi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFJBZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFf''@;'; put 'put ''Xy5oYXMoYyl9LHdiLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWGtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgdEwpe3ZhciBkPWEuX19kYXRhX187aWYoIWx4fHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXplPSsrYS5zaXplLHRo''@;'; put 'put ''aXM7YT10aGlzLl9fZGF0YV9fPW5ldyBrVyhkKX1yZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IFFrZT13Yjt2YXIgbkRlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXI3KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwiIix7fSksY31jYXRj''@;'; put 'put ''aHt9fSgpO2NvbnN0IEdjZT1uRGUsJGNlPWZ1bmN0aW9uIHJEZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJkdjZT9HY2UoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgYURlPU9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHk7Y29uc3QgS2NlPWZ1bmN0aW9uIG9EZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIWFEZS5jYWxsKGMsbCl8fCFCY2UoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmJGNlKGMsbCxhKX0sckw9ZnVuY3Rpb24gc0RlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChhPXt9KTtmb3IodmFy''@;'; put 'put ''IGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBNPWxbZl0sST1kP2QoYVtNXSxjW01dLE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09SSYmKEk9Y1tNXSksaD8kY2UoYSxNLEkpOktjZShhLE0sSSl9cmV0dXJuIGF9LENiPWZ1bmN0aW9uIHVEZShjKXtyZXR1cm4gbnVsbCE9YyYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBjfSxxY2U9ZnVuY3Rpb24gaERlKGMpe3JldHVybiBDYihjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXliKGMpfTt2YXIgWGNlPU9iamVjdC5wcm90b3R5cGUsZkRlPVhjZS5oYXNPd25Qcm9wZXJ0eSxwRGU9WGNlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGdEZT1xY2UoZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9xY2U6ZnVuY3Rpb24oYyl7cmV0dXJuIENiKGMpJiZmRGUuY2FsbChjLCJjYWxsZWUiKSYmIXBEZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBtRGU9Z0RlLFNiPUFycmF5LmlzQXJyYXk7dmFyIEpjZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMm''@;'; put 'put ''JmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFFjZT1KY2UmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxldWU9UWNlJiZRY2UuZXhwb3J0cz09PUpjZT92cC5CdWZmZXI6dm9pZCAwO2NvbnN0IHR1ZT0oZXVlP2V1''@;'; put 'put ''ZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiB5RGUoKXtyZXR1cm4hMX07dmFyIE1EZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgRURlPWZ1bmN0aW9uIHhEZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09YXx8InN5''@;'; put 'put ''bWJvbCIhPWEmJk1EZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LG51ZT1mdW5jdGlvbiBBRGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciB5Yz17fTt5Y1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09eWNb''@;'; put 'put ''IltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXljWyJbb2JqZWN0IEludDhBcnJheV0iXT15Y1siW29iamVjdCBJbnQxNkFycmF5XSJdPXljWyJbb2JqZWN0IEludDMyQXJyYXldIl09eWNbIltvYmplY3QgVWludDhBcnJheV0iXT15Y1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT15Y1si''@;'; put 'put ''W29iamVjdCBVaW50MTZBcnJheV0iXT15Y1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCx5Y1siW29iamVjdCBBcmd1bWVudHNdIl09eWNbIltvYmplY3QgQXJyYXldIl09eWNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09eWNbIltvYmplY3QgQm9vbGVhbl0iXT15Y1siW29iamVjdCBEYXRh''@;'; put 'put ''Vmlld10iXT15Y1siW29iamVjdCBEYXRlXSJdPXljWyJbb2JqZWN0IEVycm9yXSJdPXljWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPXljWyJbb2JqZWN0IE1hcF0iXT15Y1siW29iamVjdCBOdW1iZXJdIl09eWNbIltvYmplY3QgT2JqZWN0XSJdPXljWyJbb2JqZWN0IFJlZ0V4cF0iXT15Y1siW29i''@;'; put 'put ''amVjdCBTZXRdIl09eWNbIltvYmplY3QgU3RyaW5nXSJdPXljWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgRFc9ZnVuY3Rpb24gdEllKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBydWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhw''@;'; put 'put ''b3J0cy5ub2RlVHlwZSYmZXhwb3J0cyx1eD1ydWUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxJVz11eCYmdXguZXhwb3J0cz09PXJ1ZSYmamNlLnByb2Nlc3M7Y29uc3QgTWI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHV4JiZ1eC5y''@;'; put 'put ''ZXF1aXJlJiZ1eC5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fElXJiZJVy5iaW5kaW5nJiZJVy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgaXVlPU1iJiZNYi5pc1R5cGVkQXJyYXk7Y29uc3QgYUllPWl1ZT9EVyhpdWUpOmZ1bmN0aW9uIFFEZShjKXtyZXR1cm4gQ2IoYykmJm51ZShj''@;'; put 'put ''Lmxlbmd0aCkmJiEheWNbeWIoYyldfTt2YXIgc0llPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYXVlPWZ1bmN0aW9uIGxJZShjLGwpe3ZhciBhPVNiKGMpLGQ9IWEmJm1EZShjKSxoPSFhJiYhZCYmdHVlKGMpLGY9IWEmJiFkJiYhaCYmYUllKGMpLHY9YXx8ZHx8aHx8''@;'; put 'put ''ZixNPXY/ZnVuY3Rpb24gbERlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9QXJyYXkoYyk7KythPGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxJPU0ubGVuZ3RoO2Zvcih2YXIgRyBpbiBjKShsfHxzSWUuY2FsbChjLEcpKSYmKCF2fHwhKCJsZW5ndGgiPT1HfHxoJiYo''@;'; put 'put ''Im9mZnNldCI9PUd8fCJwYXJlbnQiPT1HKXx8ZiYmKCJidWZmZXIiPT1HfHwiYnl0ZUxlbmd0aCI9PUd8fCJieXRlT2Zmc2V0Ij09Ryl8fEVEZShHLEkpKSkmJk0ucHVzaChHKTtyZXR1cm4gTX07dmFyIGNJZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IFJXPWZ1bmN0aW9uIHVJZShjKXt2YXIg''@;'; put 'put ''bD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8Y0llKX0sb3VlPWZ1bmN0aW9uIGRJZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LGZJZT1vdWUoT2JqZWN0LmtleXMsT2JqZWN0KTt2YXIgZ0ll''@;'; put 'put ''PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qgc3VlPWZ1bmN0aW9uIHlJZShjKXtyZXR1cm4gbnVsbCE9YyYmbnVlKGMubGVuZ3RoKSYmIVpjZShjKX0sTFc9ZnVuY3Rpb24gYkllKGMpe3JldHVybiBzdWUoYyk/YXVlKGMpOmZ1bmN0aW9uIG1JZShjKXtpZighUlcoYykp''@;'; put 'put ''cmV0dXJuIGZJZShjKTt2YXIgbD1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWdJZS5jYWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciB4SWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBUSWU9ZnVuY3Rpb24gRUll''@;'; put 'put ''KGMpe2lmKCFzeChjKSlyZXR1cm4gZnVuY3Rpb24gQ0llKGMpe3ZhciBsPVtdO2lmKG51bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPVJXKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYmKGx8fCF4SWUuY2Fs''@;'; put 'put ''bChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxPVz1mdW5jdGlvbiBBSWUoYyl7cmV0dXJuIHN1ZShjKT9hdWUoYywhMCk6VEllKGMpfTt2YXIgbHVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsY3VlPWx1ZSYmIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLHV1ZT1jdWUmJmN1ZS5leHBvcnRzPT09bHVlP3ZwLkJ1ZmZlcjp2b2lkIDAsZHVlPXV1ZT91dWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IGh1ZT1mdW5jdGlvbiBOSWUoKXtyZXR1cm5bXX07dmFy''@;'; put 'put ''IEJJZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGZ1ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGpJZT1mdWU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIEZJZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9''@;'; put 'put ''PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDspe3ZhciB2PWNbYV07bCh2LGEsYykmJihmW2grK109dil9cmV0dXJuIGZ9KGZ1ZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gQkllLmNhbGwoYyxsKX0pKX06aHVlO2NvbnN0IFBXPWpJZSxwdWU9ZnVuY3Rpb24gWkllKGMsbCl7Zm9yKHZhciBh''@;'; put 'put ''PS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8ZDspY1toK2FdPWxbYV07cmV0dXJuIGN9LGd1ZT1vdWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIEdJZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1bXTtjOylwdWUobCxQ''@;'; put 'put ''VyhjKSksYz1ndWUoYyk7cmV0dXJuIGx9Omh1ZTtjb25zdCBtdWU9R0llLHZ1ZT1mdW5jdGlvbiBxSWUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIFNiKGMpP2Q6cHVlKGQsYShjKSl9LEpJZT1mdW5jdGlvbiBYSWUoYyl7cmV0dXJuIHZ1ZShjLExXLFBXKX0sZVJlPWZ1bmN0aW9uIFFJZShj''@;'; put 'put ''KXtyZXR1cm4gdnVlKGMsT1csbXVlKX0sRlc9cjcodnAsIkRhdGFWaWV3IiksSFc9cjcodnAsIlByb21pc2UiKSxOVz1yNyh2cCwiU2V0IiksVlc9cjcodnAsIldlYWtNYXAiKTt2YXIgeXVlPSJbb2JqZWN0IE1hcF0iLGJ1ZT0iW29iamVjdCBQcm9taXNlXSIsX3VlPSJbb2JqZWN0IFNldF0i''@;'; put 'put ''LHd1ZT0iW29iamVjdCBXZWFrTWFwXSIsQ3VlPSJbb2JqZWN0IERhdGFWaWV3XSIsb1JlPW43KEZXKSxzUmU9bjcobHgpLGxSZT1uNyhIVyksY1JlPW43KE5XKSx1UmU9bjcoVlcpLGk3PXliOyhGVyYmaTcobmV3IEZXKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1DdWV8fGx4JiZpNyhuZXcgbHgp''@;'; put 'put ''IT15dWV8fEhXJiZpNyhIVy5yZXNvbHZlKCkpIT1idWV8fE5XJiZpNyhuZXcgTlcpIT1fdWV8fFZXJiZpNyhuZXcgVlcpIT13dWUpJiYoaTc9ZnVuY3Rpb24oYyl7dmFyIGw9eWIoYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/bjcoYSk6IiI7aWYo''@;'; put 'put ''ZClzd2l0Y2goZCl7Y2FzZSBvUmU6cmV0dXJuIEN1ZTtjYXNlIHNSZTpyZXR1cm4geXVlO2Nhc2UgbFJlOnJldHVybiBidWU7Y2FzZSBjUmU6cmV0dXJuIF91ZTtjYXNlIHVSZTpyZXR1cm4gd3VlfXJldHVybiBsfSk7Y29uc3QgQlc9aTc7dmFyIGhSZT1PYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5O2NvbnN0IFN1ZT12cC5VaW50OEFycmF5LGpXPWZ1bmN0aW9uIG1SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgU3VlKGwpLnNldChuZXcgU3VlKGMpKSxsfTt2YXIgYlJlPS9cdyokLzt2YXIgTXVlPXVtP3VtLnByb3RvdHlw''@;'; put 'put ''ZTp2b2lkIDAseHVlPU11ZT9NdWUudmFsdWVPZjp2b2lkIDA7Y29uc3QgWVJlPWZ1bmN0aW9uIFdSZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGpXKGMpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJb''@;'; put 'put ''b2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2MpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiB2UmUoYyxsKXt2YXIgYT1sP2pXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5ieXRlTGVuZ3RoKX0o''@;'; put 'put ''YyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpj''@;'; put 'put ''YXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gTVJlKGMsbCl7dmFyIGE9bD9qVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9y''@;'; put 'put ''KGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmplY3QgUmVnRXhwXSI6''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIF9SZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLnNvdXJjZSxiUmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gQ1JlKGMpe3JldHVybiB4dWU/T2Jq''@;'; put 'put ''ZWN0KHh1ZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIgRXVlPU9iamVjdC5jcmVhdGUsR1JlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIXN4KGwpKXJldHVybnt9O2lmKEV1ZSlyZXR1cm4gRXVlKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0''@;'; put 'put ''dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtjb25zdCAkUmU9R1JlO3ZhciBUdWU9TWImJk1iLmlzTWFwO2NvbnN0IHRMZT1UdWU/RFcoVHVlKTpmdW5jdGlvbiBKUmUoYyl7cmV0dXJuIENiKGMpJiYiW29iamVjdCBNYXBdIj09QlcoYyl9O3ZhciBBdWU9TWImJk1iLmlzU2V0O2NvbnN0''@;'; put 'put ''IG9MZT1BdWU/RFcoQXVlKTpmdW5jdGlvbiByTGUoYyl7cmV0dXJuIENiKGMpJiYiW29iamVjdCBTZXRdIj09QlcoYyl9O3ZhciBrdWU9IltvYmplY3QgQXJndW1lbnRzXSIsRHVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSXVlPSJbb2JqZWN0IE9iamVjdF0iLG9jPXt9O29jW2t1ZV09b2NbIltv''@;'; put 'put ''YmplY3QgQXJyYXldIl09b2NbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b2NbIltvYmplY3QgRGF0YVZpZXddIl09b2NbIltvYmplY3QgQm9vbGVhbl0iXT1vY1siW29iamVjdCBEYXRlXSJdPW9jWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09''@;'; put 'put ''b2NbIltvYmplY3QgSW50OEFycmF5XSJdPW9jWyJbb2JqZWN0IEludDE2QXJyYXldIl09b2NbIltvYmplY3QgSW50MzJBcnJheV0iXT1vY1siW29iamVjdCBNYXBdIl09b2NbIltvYmplY3QgTnVtYmVyXSJdPW9jW0l1ZV09b2NbIltvYmplY3QgUmVnRXhwXSJdPW9jWyJbb2JqZWN0IFNldF0i''@;'; put 'put ''XT1vY1siW29iamVjdCBTdHJpbmddIl09b2NbIltvYmplY3QgU3ltYm9sXSJdPW9jWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b2NbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09b2NbIltvYmplY3QgVWludDE2QXJyYXldIl09b2NbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsb2Nb''@;'; put 'put ''IltvYmplY3QgRXJyb3JdIl09b2NbRHVlXT1vY1siW29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IExMZT1mdW5jdGlvbiBpTChjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsST0yJmwsRz00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYoIXN4''@;'; put 'put ''KGMpKXJldHVybiBjO3ZhciBpZT1TYihjKTtpZihpZSl7aWYodj1mdW5jdGlvbiBmUmUoYyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZoUmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRleD1jLmluZGV4LGEu''@;'; put 'put ''aW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJuIGZ1bmN0aW9uIE9JZShjLGwpe3ZhciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIHVlPUJXKGMpLHllPXVlPT1EdWV8fCJbb2JqZWN0IEdlbmVy''@;'; put 'put ''YXRvckZ1bmN0aW9uXSI9PXVlO2lmKHR1ZShjKSlyZXR1cm4gZnVuY3Rpb24gUkllKGMsbCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9ZHVlP2R1ZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYodWU9PUl1ZXx8dWU9''@;'; put 'put ''PWt1ZXx8eWUmJiFoKXtpZih2PUl8fHllP3t9OmZ1bmN0aW9uIEtSZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8UlcoYyk/e306JFJlKGd1ZShjKSl9KGMpLCFNKXJldHVybiBJP2Z1bmN0aW9uICRJZShjLGwpe3JldHVybiByTChjLG11ZShjKSxsKX0oYyxm''@;'; put 'put ''dW5jdGlvbiBrSWUoYyxsKXtyZXR1cm4gYyYmckwobCxPVyhsKSxjKX0odixjKSk6ZnVuY3Rpb24gekllKGMsbCl7cmV0dXJuIHJMKGMsUFcoYyksbCl9KGMsZnVuY3Rpb24gX0llKGMsbCl7cmV0dXJuIGMmJnJMKGwsTFcobCksYyl9KHYsYykpfWVsc2V7aWYoIW9jW3VlXSlyZXR1cm4gaD9j''@;'; put 'put ''Ont9O3Y9WVJlKGMsdWUsTSl9fWZ8fChmPW5ldyBRa2UpO3ZhciBFZT1mLmdldChjKTtpZihFZSlyZXR1cm4gRWU7Zi5zZXQoYyx2KSxvTGUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2LmFkZChpTChydCxsLGEscnQsYyxmKSl9KTp0TGUoYykmJmMuZm9yRWFjaChmdW5jdGlvbihydCxw''@;'; put 'put ''dCl7di5zZXQocHQsaUwocnQsbCxhLHB0LGMsZikpfSk7dmFyIHFlPWllP3ZvaWQgMDooRz9JP2VSZTpKSWU6ST9PVzpMVykoYyk7cmV0dXJuIGZ1bmN0aW9uIGVEZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30ocWV8''@;'; put 'put ''fGMsZnVuY3Rpb24ocnQscHQpe3FlJiYocnQ9Y1twdD1ydF0pLEtjZSh2LHB0LGlMKHJ0LGwsYSxwdCxjLGYpKX0pLHZ9LGFMPWZ1bmN0aW9uIEZMZShjKXtyZXR1cm4gTExlKGMsNSl9O3ZhciBITGU9Yig3ODg1NSk7bGV0IFN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlPWEsdGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9zb2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jvc29mdCl9Y29udmVy''@;'; put 'put ''dEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQgaCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5VVEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRNaW51dGVzKCksaC5n''@;'; put 'put ''ZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgST1mKzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IEc9SS84NjRlNTtyZXR1cm4gRz1NYXRoLmFicyhHKSxHPU1hdGguZmxvb3IoRyksR31jYXNlInNlY29uZHMiOnJldHVybiBJLzFlM31yZXR1cm4gMH1jb252ZXJ0U2Fz''@;'; put 'put ''RGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0IE09MWUzKmEtMzE1NjE5MmU1O3JldHVybiBNKz02MCpuZXcgRGF0ZShNKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxuZXcgRGF0ZShNKX1y''@;'; put 'put ''ZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3RyaW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLE09ZisiQWxsIjthW2ZdJiYoYVtNXXx8KGFbTV09dGhpcy5kZWVw''@;'; put 'put ''Q2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUoYVtNXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9JPT5JW3ZdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpJPT5JLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKSkp''@;'; put 'put ''KX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3VuZD0hMSl9KToodGhp''@;'; put 'put ''cy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxpYnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChh''@;'; put 'put ''KSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGlicmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0YU9iamVjdE9uRmls''@;'; put 'put ''dGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVzZXRBcnJheUZpbHRl''@;'; put 'put ''cihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRleE9mKCJUcmlkZW50''@;'; put 'put ''LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5kZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRkTGVhZGluZ1plcm8o''@;'; put 'put ''YSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChhLGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0dXJuIEhMZShKU09O''@;'; put 'put ''LnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBvbmVudChkKSksaC5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGguY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEubGVuZ3RoPDEpcmV0''@;'; put 'put ''dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5zcGxpdCgiLCIpfX1pc1N0cmVhbWluZ1ZpeWEoKXtyZXR1cm4iU0FTVklZQSI9PT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpJiYh''@;'; put 'put ''KCFsb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiP19maWxlPSIpfHwhbG9jYXRpb24ucGF0aG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiL3Nhc2pvYmV4ZWN1dGlvbiIpKX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVv''@;'; put 'put ''dXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIGFMKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5sb2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2Fz''@;'; put 'put ''U2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLl9saWNlbmNlU3RhdGU9YlcsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxl''@;'; put 'put ''ZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZp''@;'; put 'put ''ZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJz''@;'; put 'put ''X2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6T28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVfaWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgZWkobnVsbCksdGhp''@;'; put 'put ''cy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgZWkoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgZWkoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBlaSghMSksdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgZWkobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBlaSghMSks''@;'; put 'put ''dGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgZWkobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IGVpKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IGVpKHRoaXMuX2xpY2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKEk9''@;'; put 'put ''PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgRz1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJm1pc3NtYXRjaElkPSR7SX0mZm9yY2U9dHJ1ZWA7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KEcpLHRo''@;'; put 'put ''aXMuZGVhY3RpdmF0ZUFwcChHKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7ZC5mcmVlVGllckxpY2VuY2VEYXRhLmhvdF9saWNlbnNlX2tleT1kLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHlp''@;'; put 'put ''ZWxkIGQuc2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKSx5aWVsZCBkLmxpY2Vuc2luZyhhLmdsb2J2YXJzLGEuU1lTU0lURSl9KSgpfXNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSl7dGhpcy5fbGljZW5jZVN0YXRlLmVkaXRSZWNvcmQ9IllFUyIhPT1hLmdsb2J2YXJzWzBdLkRDX1JFU1RSSUNU''@;'; put 'put ''X0VESVRSRUNPUkR9bGljZW5zaW5nKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtpZighYXx8IWFbMF0pe2NvbnN0IHY9J0Vycm9yIGdldHRpbmcgIkdsb2J2YXJzIiBmcm9tIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlLic7cmV0dXJuIGNvbnNvbGUuZXJyb3IodiksaC5p''@;'; put 'put ''c0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGgucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2Eodil9YCl9bGV0IGY9YVswXTtyZXR1cm4gdm9pZCAwPT09Zi5MSUNFTkNFX0tFWXx8dm9pZCAwPT09Zi5BQ1RJVkFUSU9O''@;'; put 'put ''X0tFWXx8bnVsbD09Zi5SRUdJU1RFUkNPVU5UfHxudWxsPT1mLklTUkVHSVNURVJFRD8oY29uc29sZS5lcnJvcigiU29tZSBvZiBnbG9idmFycyBhcmUgbm90IHByZXNlbnQiKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJy''@;'; put 'put ''b3IiLCJTb21lIG9mIHRoZSBnbG9idmFycyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNlIikpOmYuTElDRU5DRV9LRVkmJmYuQUNUSVZBVElPTl9LRVk/KGgubGljZW5jZUtleT1mLkxJQ0VOQ0VfS0VZLGguYWN0aXZhdGlvbktleT1mLkFDVElWQVRJT05fS0VZLHZvaWQo''@;'; put 'put ''eWllbGQgaC5kZWNyeXB0TGljZW5zZUtleShmLkxJQ0VOQ0VfS0VZLGYuQUNUSVZBVElPTl9LRVkpLnRoZW4oZnVuY3Rpb24oKXt2YXIgdj1RKGZ1bmN0aW9uKihNKXt5aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihNLGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciB2PVEoZnVuY3Rpb24qKE0pe2NvbnN0IEk9YEVycm9yIGRlY3J5cHRpbmcgbGljZW5zZSBrZXkuICR7TX1gO2NvbnNvbGUuZXJyb3IoSSk7Y29uc3QgRz1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7''@;'; put 'put ''YnRvYShJKX0mZm9yY2U9dHJ1ZWA7aC5saWNlbmNlUHJvYmxlbS5uZXh0KEcpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoRyksc2V0VGltZW91dCgoKT0+aC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCwhMCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3Jl''@;'; put 'put ''dHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlvbihhLGQsaCxmKXtmfHwoZj0hMSksdGhpcy5zZXRTaXRlSWQoYSksIWEuZGVtbyYm''@;'; put 'put ''ZCYmaCYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZik7bGV0IHY9dm9pZCAwIT09YS5ob3RfbGljZW5zZV9rZXk/YS5ob3RfbGljZW5zZV9rZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWU7dnx8KHY9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGlu''@;'; put 'put ''Z3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXkubmV4dCh2KSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMuaGFuZGxlVXNlcnNBbGxvd2VkKGEpLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhKSx3aW5kb3cuYXBw''@;'; put 'put ''aW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOk0sZGF5c1RvRXhwaXJ5Okl9PXRoaXMuY2FsY3VsYXRlRXhwaXJ5KGEpO2lmKHdpbmRvdy5saWNlbnNlRXhwaXJlc0luPUksdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cy5uZXh0KEkpLEk8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Ug''@;'; put 'put ''a2V5IGhhcyBleHBpcmVkIiksdm9pZChkJiZoJiZ0aGlzLmhhbmRsZUV4cGlyeShNLGQsaCxmKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQoISFhLmRlbW8pLGQmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsZiksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSksdGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKXtpZighYS5mZWF0dXJlcyl7aWYoYS5kZW1vKXJldHVybjtyZXR1cm4gdm9pZCh0aGlzLl9saWNlbmNlU3RhdGU9dGhpcy5hbGxGZWF0dXJlc09uKX1jb25zdCBkPWEuZmVhdHVyZXMu''@;'; put 'put ''c3BsaXQoIiwiKTt0aGlzLl9saWNlbmNlU3RhdGU9ey4uLnRoaXMuX2xpY2VuY2VTdGF0ZSx2aWV3ZXJfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtnaC52aWV3ZXJfcm93c19hbGxvd2VkXSksZWRpdG9yX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVl''@;'; put 'put ''KGRbZ2guZWRpdG9yX3Jvd3NfYWxsb3dlZF0pLHN0YWdlX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2guc3RhZ2Vfcm93c19hbGxvd2VkXSksaGlzdG9yeV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLmhpc3Rvcnlfcm93c19hbGxvd2Vk''@;'; put 'put ''XSksc3VibWl0X3Jvd3NfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnN1Ym1pdF9yb3dzX2xpbWl0XSksdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0XSksdmlld2JveF9saW1pdDp0aGlz''@;'; put 'put ''LnBhcnNlRmVhdHVyZVZhbHVlKGRbZ2gudmlld2JveF9saW1pdF0pLGxpbmVhZ2VfZGFpbHlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2doLmxpbmVhZ2VfZGFpbHlfbGltaXRdKSx2aWV3Ym94OnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZ2gudmlld2JveF0pLGZpbGVVcGxv''@;'; put 'put ''YWQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5maWxlVXBsb2FkXSksZWRpdFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2doLmVkaXRSZWNvcmRdKSxhZGRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtnaC5hZGRSZWNvcmRdKX0sdGhpcy5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0ZSl9cGFyc2VGZWF0dXJlVmFsdWUoYSl7cmV0dXJuIi0iPT09YT8xLzA6cGFyc2VJbnQoYSl9cGFyc2VGZWF0dXJlVG9nZ2xlKGEpe3JldHVybiEhcGFyc2VJbnQoYSl9ZGVjcnlwdExpY2Vuc2VLZXkoYSxkKXt2YXIg''@;'; put 'put ''aD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPVEoZnVuY3Rpb24qKHYsTSl7aWYoIXdpbmRvdy5jcnlwdG98fCF3aW5kb3cuY3J5cHRvLnN1YnRsZSl0cnl7bGV0IHllPWF0b2IoYS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpKTt2KEpTT04ucGFyc2UoeWUp''@;'; put 'put ''KX1jYXRjaCh5ZSl7TSgiRXJyb3IgcGFyc2luZyBodHRwIGxpY2Vuc2Uga2V5IGRhdGEuICIreWUpfWxldCBHLEk9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGEpLmNhdGNoKHllPT57TSh5ZSl9KTtjb25zdCBpZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goeWU9''@;'; put 'put ''PntNKHllKX0pO2lmKCFpZSlyZXR1cm4gdm9pZCBNKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHVlO0c9aWU7dHJ5e3VlPXlpZWxkIHdpbmRvdy5jcnlwdG8uc3VidGxlLmltcG9ydEtleSgicGtjczgiLEcse25hbWU6IlJTQS1PQUVQIixoYXNoOiJTSEEtMjU2In0sITAsWyJkZWNy''@;'; put 'put ''eXB0Il0pfWNhdGNoKHllKXtNKCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5OiAiK3llKX1pZih1ZSlpZihJKXRyeXt3aW5kb3cuY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHtuYW1lOiJSU0EtT0FFUCIsaGFzaDp7bmFtZToiU0hBLTI1NiJ9fSx1ZSxJKS50aGVuKHllPT57bGV0IEVl''@;'; put 'put ''PShuZXcgUlRlLlRleHREZWNvZGVyKS5kZWNvZGUoeWUpO3RyeXt2KEpTT04ucGFyc2UoRWUpKX1jYXRjaChqZSl7TSgiRXJyb3IgcGFyc2luZyBsaWNlbnNlIGtleSBkYXRhLiAiK2plKX19LHllPT57TSh5ZSl9KX1jYXRjaCh5ZSl7TSh5ZSl9ZWxzZSBNKCJMaWNlbnNlIGtleSBieXRlcyBt''@;'; put 'put ''aXNzaW5nIik7ZWxzZSBNKCJVbmFibGUgdG8gaW1wb3J0IGRlY3J5cHRpb24ga2V5Iil9KTtyZXR1cm4gZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1nZXRIb3RMaWNlbnNlS2V5KCl7cmV0dXJuIHRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlfWdl''@;'; put 'put ''dExpY2Vuc2VLZXlEYXRhKCl7cmV0dXJuIHRoaXMubGljZW5zZUtleURhdGF9ZGVhY3RpdmF0ZUFwcChhKXt0aGlzLl9saWNlbmNlU3RhdGU9YlcsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhKSxhJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KGEpfWNoZWNrTGluZWFnZUxpbWl0KGEpe2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQ9PT0xLzApcmV0dXJuITE7Y29uc3QgZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIiksaD1PbygpLnZhbHVlT2YoKTtpZighZClyZXR1cm4g''@;'; put 'put ''YXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsMSksITE7Y29uc3QgZj1wYXJzZUludChkLnNwbGl0KCIsIilbMF0pLHY9cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzFdKTtyZXR1cm4gT28oZikuaXNTYW1lKE9vKCksImRheSIpP3Y+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFp''@;'; put 'put ''bHlfbGltaXR8fChhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCx2KzEpLCExKTooYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsMSksITEpfXNldExpbmVhZ2VSZW5kZXIoYSxkKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGluZWFnZV9yZW5kZXJzIixgJHthfSwke2R9YCl9YmFzZTY0VG9B''@;'; put 'put ''cnJheUJ1ZmZlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZD1RKGZ1bmN0aW9uKihoLGYpe2goZ2NlLkQoYSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZmZXJUb0Jhc2U2NChhKXtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKGdjZS5sKGEpKX0pfXNldFNpdGVJZChhKXthLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkX211bHRpcGxlKTphLnNpdGVfaWQmJnRoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlk''@;'; put 'put ''KGEuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpe2xldCB2PSExLE09ITE7aWYoKCFhLnNpdGVfaWR8fGEuc2l0ZV9pZCE9PWgpJiYodj0hMCksKCFhLnNpdGVfaWRfbXVsdGlwbGV8fCFhLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMoaCkpJiYoTT0hMCksdiYmTSly''@;'; put 'put ''ZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntjb25zdCBJPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhpcy5saWNlbmNlUHJvYmxlbS5u''@;'; put 'put ''ZXh0KEkpLHRoaXMuX2xpY2VuY2VTdGF0ZT1iVyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEkpfSl9Y2FsY3VsYXRlRXhwaXJ5KGEpe2xldCBkPU9vKGEudmFsaWRfdW50aWws''@;'; put 'put ''IllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxoPU9vKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntleHBpcnlfZGF0ZTpkLGRheXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2NvbnN0IHY9YC9saWNlbnNpbmcv''@;'; put 'put ''a2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZWVkiKSl9YDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRh''@;'; put 'put ''LGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQgMCE9PXRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZD4wP2EudXNlcnNfYWxsb3dl''@;'; put 'put ''ZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkfWhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQuUkVHSVNURVJDT1VOVD5hLnVz''@;'; put 'put ''ZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNvbGUud2FybigiQXBwIGhhcyBo''@;'; put 'put ''aXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51c2Vyc19hbGxvd2VkfHwhdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0ZXIiKSx0aGlzLmN1cnJlbnRV''@;'; put 'put ''c2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMSksdGhpcy5pc0FwcEFjdGl2''@;'; put 'put ''YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoU2QpLHhyKFE4KSx4''@;'; put 'put ''cih2YykseHIoQnMpLHhyKFN1KSx4cihMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUksdGhpcy5zeXNzaXRlPW5ldyBlaShudWxs''@;'; put 'put ''KSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoaWU9PntpZSBpbnN0YW5jZW9mIHBwJiYiL2RlcGxveSI9PT1pZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCl9KTtjb25zdCBHPXRo''@;'; put 'put ''aXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO0cucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKEcuc2VsZWN0ZWRUaGVtZSE9PWdiLmxpZ2h0JiZHLnNlbGVjdGVkVGhlbWU9PT1nYi5kYXJrKX1zYXNTZXJ2aWNlSW5pdCgp''@;'; put 'put ''e3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5zdWJz''@;'; put 'put ''Y3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJbmZvfXBhdGNoU3lzc2l0ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8KGQucHVzaChhKSx0aGlzLnN5''@;'; put 'put ''c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9UShmdW5jdGlvbiooZil7''@;'; put 'put ''YS5zeXNzaXRlLm5leHQoW2YuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEVdKTtsZXQgdj1bXTtpZigoIWYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzfHxmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFycyYmIWYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdKSYmdi5wdXNoKCJHbG9idmFycyIp''@;'; put 'put ''LGYuYWRhcHRlclJlc3BvbnNlLnNhc2RhdGFzZXRzfHx2LnB1c2goIlNhc2RhdGFzZXRzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlic3x8di5wdXNoKCJTYXNsaWJzIiksZi5hZGFwdGVyUmVzcG9uc2UueGxtYXBzfHx2LnB1c2goIlhMTWFwcyIpLHYubGVuZ3RoPjApcmV0dXJuIGQ9ITAs''@;'; put 'put ''YS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke3Yuam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTtjb25zdCBNPWEuYXBwU3RvcmVTZXJ2aWNl''@;'; put 'put ''LmdldERjQWRhcHRlclNldHRpbmdzKCk7YS5lbnZpcm9ubWVudEluZm89e1NZU1NJVEU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURSxTWVNTQ1BMOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNUQ1BJUEhPU1ROQU1FLFNZ''@;'; put 'put ''U1ZMT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU1ZMT05HLE1FTVNJWkU6Zi5hZGFwdGVyUmVzcG9uc2UuTUVNU0laRSxTWVNQUk9DRVNTTU9ERTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNQUk9DRVNTTU9ERSxTWVNIT1NUTkFNRTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNIT1NUTkFNRSxTWVNVU0VS''@;'; put 'put ''SUQ6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVVNFUklELFNZU0hPU1RJTkZPTE9ORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNIT1NUSU5GT0xPTkcsU1lTRU5DT0RJTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5hZGFwdGVyUmVzcG9uc2UuQVVUT0VYRUMsSVNBRE1J''@;'; put 'put ''TjpmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5JU0FETUlOLERDX0FETUlOX0dST1VQOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQLEFQUF9MT0M6TT8uYXBwTG9jfTtsZXQgaWUsdWUsST1mLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0cyxHPXt9''@;'; put 'put ''O2ZvcihsZXQgcWUgb2YgSSlHW3FlLkxJQlJFRl18fChHW3FlLkxJQlJFRl09W10pLEdbcWUuTElCUkVGXS5wdXNoKHFlLkRTTik7bGV0IHllPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoRykpLEVlPVtdO2ZvcihsZXQgcWUgb2YgT2JqZWN0LmtleXMoeWUpKUVlLnB1c2goe0xJQlJBUllS''@;'; put 'put ''RUY6cWUsdGFibGVzOnllW3FlXX0pO2xldCBqZT1FZTtpZT1HLHVlPU9iamVjdC5rZXlzKEcpLHZvaWQgMCE9PWllJiYoS24uZWRpdG9yLmxpYnNBbmRUYWJsZXM9aWUpLEtuLnhsbWFwcz1mLmFkYXB0ZXJSZXNwb25zZS54bG1hcHMubWFwKHFlPT4oe2lkOnFlWzBdLGRlc2NyaXB0aW9uOnFl''@;'; put 'put ''WzFdLHRhcmdldERTOnFlWzJdfSkpLEtuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcz1qZSxLbi5lZGl0b3IubGlicmFyaWVzPXVlLEtuLmVkaXRvci5zdGFydHVwU2V0PSEwLEtuLmRjTGliPWYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZp''@;'; put 'put ''Y2UuYWN0aXZhdGlvbihmLmFkYXB0ZXJSZXNwb25zZSl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goaD0+e2Q9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJUaGVyZSBpcyBhbiBpc3N1ZSB3aXRo''@;'; put 'put ''IHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlIiksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKX0pLGEubG9nZ2VyU2VydmljZS5sb2coIkFjdGl2YXRlZDoiLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpLGR8fChhLmV2ZW50U2VydmljZS5zdGFy''@;'; put 'put ''dHVwRGF0YUxvYWRlZCgpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWU/YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKTohYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWEucm91dGVy''@;'; put 'put ''LnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NpbmcmZm9yY2U9dHJ1ZSIpKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodTEpLHhyKHZjKSx4''@;'; put 'put ''cihCcykseHIoU2QpLHhyKCRSKSx4cihMcykseHIoUTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKSxSdWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5f''@;'; put 'put ''ZWxlbWVudFJlZj1kLHRoaXMub25DaGFuZ2U9aD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXNldFByb3BlcnR5KGEsZCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGEsZCl9cmVnaXN0ZXJPblRvdWNoZWQoYSl7dGhpcy5vblRv''@;'; put 'put ''dWNoZWQ9YX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9YX1zZXREaXNhYmxlZFN0YXRlKGEpe3RoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShFbyksR2UoSmkpKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KX19cmV0dXJuIGN9KSgpLGE3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSdWV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgpfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOlt3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHlwPW5ldyBNdCgiIiksVkxlPXtwcm92aWRlOnlwLHVzZUV4aXN0aW5nOkNzKCgpPT5NZCksbXVsdGk6ITB9O2xldCBNZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7d3JpdGVW''@;'; put 'put ''YWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7''@;'; put 'put ''MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltkYShbVkxlXSksd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBCTGU9e3Byb3Zp''@;'; put 'put ''ZGU6eXAsdXNlRXhpc3Rpbmc6Q3MoKCk9PnFsKSxtdWx0aTohMH0sekxlPW5ldyBNdCgiIik7bGV0IHFsPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSdWV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9''@;'; put 'put ''PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24gakxlKCl7Y29uc3QgYz10bSgpP3RtKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlz''@;'; put 'put ''LnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0h''@;'; put 'put ''MH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShFbyksR2UoSmkpLEdlKHpMZSw4KSl9fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94''@;'; put 'put ''Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQo''@;'; put 'put ''ImlucHV0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5faGFuZGxlSW5wdXQodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNv''@;'; put 'put ''bXBvc2l0aW9uZW5kIixmdW5jdGlvbih2KXtyZXR1cm4gaC5fY29tcG9zaXRpb25FbmQodi50YXJnZXQudmFsdWUpfSl9LGZlYXR1cmVzOltkYShbQkxlXSksd2FdfSl9fXJldHVybiBjfSkoKTtjb25zdCBoMD1uZXcgTXQoIiIpLGhtPW5ldyBNdCgiIik7ZnVuY3Rpb24gRnVlKGMpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbiBkbShjKXtyZXR1cm4gbnVsbD09Y3x8KCJzdHJpbmciPT10eXBlb2YgY3x8QXJyYXkuaXNBcnJheShjKSkmJjA9PT1jLmxlbmd0aH0oYy52YWx1ZSk/e3JlcXVpcmVkOiEwfTpudWxsfWZ1bmN0aW9uIEh1ZShjKXtyZXR1cm4hMD09PWMudmFsdWU/bnVsbDp7cmVxdWlyZWQ6''@;'; put 'put ''ITB9fWZ1bmN0aW9uIHNMKGMpe3JldHVybiBudWxsfWZ1bmN0aW9uIHp1ZShjKXtyZXR1cm4gbnVsbCE9Y31mdW5jdGlvbiBVdWUoYyl7cmV0dXJuIF9NKGMpP1l1KGMpOmN9ZnVuY3Rpb24gWnVlKGMpe2xldCBsPXt9O3JldHVybiBjLmZvckVhY2goYT0+e2w9bnVsbCE9YT97Li4ubCwuLi5h''@;'; put 'put ''fTpsfSksMD09PU9iamVjdC5rZXlzKGwpLmxlbmd0aD9udWxsOmx9ZnVuY3Rpb24gV3VlKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEoYykpfWZ1bmN0aW9uIFl1ZShjKXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gWkxlKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUo''@;'; put 'put ''YSkpfWZ1bmN0aW9uIFVXKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIEd1ZShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKHp1ZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIFp1ZShXdWUoYSxsKSl9fShZdWUoYykpOm51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gWlcoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gJHVlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoenVlKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24gTkxlKC4uLmMpe2NvbnN0IGw9dWxlKGMpLHthcmdz''@;'; put 'put ''OmEsa2V5czpkfT1kbGUoYyksaD1uZXcgWHQoZj0+e2NvbnN0e2xlbmd0aDp2fT1hO2lmKCF2KXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBNPW5ldyBBcnJheSh2KTtsZXQgST12LEc9djtmb3IobGV0IGllPTA7aWU8djtpZSsrKXtsZXQgdWU9ITE7bDEoYVtpZV0pLnN1YnNjcmli''@;'; put 'put ''ZShOaShmLHllPT57dWV8fCh1ZT0hMCxHLS0pLE1baWVdPXllfSwoKT0+SS0tLHZvaWQgMCwoKT0+eyghSXx8IXVlKSYmKEd8fGYubmV4dChkP2hsZShkLE0pOk0pLGYuY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIGw/aC5waXBlKHpaKGwpKTpofShXdWUoYSxsKS5tYXAoVXVlKSkucGlwZShM''@;'; put 'put ''cihadWUpKX19KFl1ZShjKSk6bnVsbH1mdW5jdGlvbiBLdWUoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gV1coYyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBsTChjLGwpe3JldHVy''@;'; put 'put ''biBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gSnVlKGMsbCl7Y29uc3QgYT1XVyhsKTtyZXR1cm4gV1coYykuZm9yRWFjaChoPT57bEwoYSxoKXx8YS5wdXNoKGgpfSksYX1mdW5jdGlvbiBRdWUoYyxsKXtyZXR1cm4gV1cobCkuZmlsdGVyKGE9PiFsTChj''@;'; put 'put ''LGEpKX1jbGFzcyBlMGV7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1n''@;'; put 'put ''ZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxpZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVu''@;'; put 'put ''ZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/''@;'; put 'put ''dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBz''@;'; put 'put ''dGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRW''@;'; put 'put ''YWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VVyh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFs''@;'; put 'put ''aWRhdG9yRm49WlcodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0''@;'; put 'put ''ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlz''@;'; put 'put ''LmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xh''@;'; put 'put ''c3MgQjEgZXh0ZW5kcyBlMGV7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1jbGFzcyBkMSBleHRlbmRzIGUwZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhp''@;'; put 'put ''cy52YWx1ZUFjY2Vzc29yPW51bGx9fWNsYXNzIHQwZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1n''@;'; put 'put ''ZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBubD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdDBle2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGQxLDIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibmdNb2Rl''@;'; put 'put ''bCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigibmctdW50b3VjaGVkIixoLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaC5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaC5pc1ByaXN0aW5lKSgibmct''@;'; put 'put ''ZGlydHkiLGguaXNEaXJ0eSkoIm5nLXZhbGlkIixoLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixoLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGguaXNQZW5kaW5nKX0sZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCksbzc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHQwZXtjb25zdHJ1Y3Rvcihh''@;'; put 'put ''KXtzdXBlcihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCMSwxMCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdLFsiIiwiZm9ybUFycmF5TmFtZSIsIiJd''@;'; put 'put ''LFsiIiwibmdNb2RlbEdyb3VwIiwiIl0sWyIiLCJmb3JtR3JvdXAiLCIiXSxbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdFZhcnM6MTYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigibmctdW50b3VjaGVkIixoLmlzVW50b3VjaGVkKSgi''@;'; put 'put ''bmctdG91Y2hlZCIsaC5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaC5pc1ByaXN0aW5lKSgibmctZGlydHkiLGguaXNEaXJ0eSkoIm5nLXZhbGlkIixoLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixoLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGguaXNQZW5kaW5nKSgibmctc3VibWl0dGVkIixo''@;'; put 'put ''LmlzU3VibWl0dGVkKX0sZmVhdHVyZXM6W3dhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZHg9IlZBTElEIix1TD0iSU5WQUxJRCIseGI9IlBFTkRJTkciLGh4PSJESVNBQkxFRCI7ZnVuY3Rpb24gJFcoYyl7cmV0dXJuKGRMKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiBLVyhj''@;'; put 'put ''LGwpe3JldHVybihkTChsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiBkTChjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBxV3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlz''@;'; put 'put ''Ll9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlPVtd''@;'; put 'put ''LHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRWYWxpZGF0''@;'; put 'put ''b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFyZW50KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1keH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXVMfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT14Yn1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1oeH1n''@;'; put 'put ''ZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWh4fWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBh''@;'; put 'put ''cmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9y''@;'; put 'put ''cyhKdWUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9YWRkQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKEp1ZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfXJlbW92ZVZhbGlkYXRvcnMobCl7dGhpcy5zZXRWYWxpZGF0b3JzKFF1ZShsLHRoaXMuX3Jhd1Zh''@;'; put 'put ''bGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoUXVlKGwsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9aGFzVmFsaWRhdG9yKGwpe3JldHVybiBsTCh0aGlzLl9yYXdWYWxpZGF0b3JzLGwpfWhhc0FzeW5jVmFsaWRhdG9yKGwpe3Jl''@;'; put 'put ''dHVybiBsTCh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMsbCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKGw9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9w''@;'; put 'put ''YXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZChsKX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZChsPT5sLm1hcmtBbGxBc1RvdWNoZWQoKSl9bWFya0FzVW50b3VjaGVkKGw9''@;'; put 'put ''e30pe3RoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGwpfW1hcmtB''@;'; put 'put ''c0RpcnR5KGw9e30pe3RoaXMucHJpc3RpbmU9ITEsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc0RpcnR5KGwpfW1hcmtBc1ByaXN0aW5lKGw9e30pe3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChh''@;'; put 'put ''PT57YS5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCl9bWFya0FzUGVuZGluZyhsPXt9KXt0aGlzLnN0YXR1cz14YiwhMSE9PWwuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5n''@;'; put 'put ''ZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcobCl9ZGlzYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPWh4LHRoaXMuZXJyb3JzPW51''@;'; put 'put ''bGwsdGhpcy5fZm9yRWFjaENoaWxkKGQ9PntkLmRpc2FibGUoey4uLmwsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0''@;'; put 'put ''dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLmwsc2tpcFByaXN0aW5lQ2hlY2s6YX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChkPT5kKCEwKSl9ZW5hYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9''@;'; put 'put ''ZHgsdGhpcy5fZm9yRWFjaENoaWxkKGQ9PntkLmVuYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLmwsc2tpcFByaXN0aW5lQ2hl''@;'; put 'put ''Y2s6YX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChkPT5kKCExKSl9X3VwZGF0ZUFuY2VzdG9ycyhsKXt0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobCksbC5za2lwUHJpc3RpbmVDaGVja3x8dGhpcy5fcGFy''@;'; put 'put ''ZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX1zZXRQYXJlbnQobCl7dGhpcy5fcGFyZW50PWx9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGw9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMo''@;'; put 'put ''KSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksKHRoaXMuc3RhdHVzPT09ZHh8fHRoaXMu''@;'; put 'put ''c3RhdHVzPT09eGIpJiZ0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcihsLmVtaXRFdmVudCkpLCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhbC5vbmx5''@;'; put 'put ''U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobCl9X3VwZGF0ZVRyZWVWYWxpZGl0eShsPXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+YS5fdXBkYXRlVHJlZVZhbGlkaXR5KGwpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlT''@;'; put 'put ''ZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP2h4OmR4fV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVu''@;'; put 'put ''QXN5bmNWYWxpZGF0b3IobCl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9eGIsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2NvbnN0IGE9VXVlKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlv''@;'; put 'put ''bj1hLnN1YnNjcmliZShkPT57dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuc2V0RXJyb3JzKGQse2VtaXRFdmVudDpsfSl9KX19X2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fYXN5''@;'; put 'put ''bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExKX1zZXRFcnJvcnMobCxhPXt9KXt0aGlzLmVycm9ycz1sLHRoaXMuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKCExIT09YS5lbWl0RXZlbnQpfWdldChsKXtsZXQg''@;'; put 'put ''YT1sO3JldHVybiBudWxsPT1hfHwoQXJyYXkuaXNBcnJheShhKXx8KGE9YS5zcGxpdCgiLiIpKSwwPT09YS5sZW5ndGgpP251bGw6YS5yZWR1Y2UoKGQsaCk9PmQmJmQuX2ZpbmQoaCksdGhpcyl9Z2V0RXJyb3IobCxhKXtjb25zdCBkPWE/dGhpcy5nZXQoYSk6dGhpcztyZXR1cm4gZCYmZC5l''@;'; put 'put ''cnJvcnM/ZC5lcnJvcnNbbF06bnVsbH1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5nZXRFcnJvcihsLGEpfWdldCByb290KCl7bGV0IGw9dGhpcztmb3IoO2wuX3BhcmVudDspbD1sLl9wYXJlbnQ7cmV0dXJuIGx9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpe3RoaXMuc3RhdHVzPXRoaXMu''@;'; put 'put ''X2NhbGN1bGF0ZVN0YXR1cygpLGwmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnMobCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBLcix0aGlzLnN0YXR1''@;'; put 'put ''c0NoYW5nZXM9bmV3IEtyfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP2h4OnRoaXMuZXJyb3JzP3VMOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHhiKT94Yjp0aGlzLl9h''@;'; put 'put ''bnlDb250cm9sc0hhdmVTdGF0dXModUwpP3VMOmR4fV9hbnlDb250cm9sc0hhdmVTdGF0dXMobCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGE9PmEuc3RhdHVzPT09bCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC5kaXJ0eSl9X2FueUNvbnRy''@;'; put 'put ''b2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhsPT5sLnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlz''@;'; put 'put ''dGluZShsKX1fdXBkYXRlVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGwpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShsKXt0aGlzLl9v''@;'; put 'put ''bkNvbGxlY3Rpb25DaGFuZ2U9bH1fc2V0VXBkYXRlU3RyYXRlZ3kobCl7ZEwobCkmJm51bGwhPWwudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj1sLnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkobCl7cmV0dXJuIWwmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkm''@;'; put 'put ''JiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZChsKXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiAkTGUo''@;'; put 'put ''Yyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/VVcoYyk6Y3x8bnVsbH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZEFzeW5jVmFs''@;'; put 'put ''aWRhdG9yRm49ZnVuY3Rpb24gS0xlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1pXKGMpOmN8fG51bGx9KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9fWNsYXNzIGhMIGV4dGVuZHMgcVd7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCRXKGEpLEtXKGQsYSkpLHRoaXMuY29udHJvbHM9''@;'; put 'put ''bCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShhKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9s''@;'; put 'put ''KGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbHNbbF0/dGhpcy5jb250cm9sc1tsXToodGhpcy5jb250cm9sc1tsXT1hLGEuc2V0UGFyZW50KHRoaXMpLGEuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksYSl9YWRkQ29udHJvbChsLGEsZD17fSl7''@;'; put 'put ''dGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wobCxhPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9y''@;'; put 'put ''ZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbChsLGEsZD17fSl7dGhpcy5j''@;'; put 'put ''b250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSxhJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2''@;'; put 'put ''ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnMobCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkobCkmJnRoaXMuY29udHJvbHNbbF0uZW5hYmxlZH1zZXRWYWx1ZShsLGE9e30peyhmdW5jdGlvbiBpMGUoYyxsLGEpe2MuX2ZvckVhY2hDaGlsZCgo''@;'; put 'put ''ZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IFFuKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIHIwZShjLGwsYSl7Y29uc3QgZD1jLmNvbnRyb2xzO2lmKCEobD9PYmplY3Qua2V5cyhkKTpkKS5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IFFuKDFlMywiIik7aWYoIWRbYV0pdGhyb3cgbmV3IFFuKDEwMDEsIiIpfSkodGhpcywhMCxkKSx0aGlzLmNvbnRyb2xzW2RdLnNldFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNo''@;'; put 'put ''VmFsdWUobCxhPXt9KXtudWxsIT1sJiYoT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmNvbnRyb2xzW2RdO2gmJmgucGF0Y2hWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShh''@;'; put 'put ''KSl9cmVzZXQobD17fSxhPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntkLnJlc2V0KGw/bFtoXTpudWxsLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGEpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoYSksdGhpcy51cGRhdGVW''@;'; put 'put ''YWx1ZUFuZFZhbGlkaXR5KGEpfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChsLGEsZCk9PihsW2RdPWEuZ2V0UmF3VmFsdWUoKSxsKSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgbD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoYSxkKT0+ISFkLl9z''@;'; put 'put ''eW5jUGVuZGluZ0NvbnRyb2xzKCl8fGEpO3JldHVybiBsJiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksbH1fZm9yRWFjaENoaWxkKGwpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5jb250cm9sc1thXTtkJiZs''@;'; put 'put ''KGQsYSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZChsPT57bC5zZXRQYXJlbnQodGhpcyksbC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFs''@;'; put 'put ''dWUoKX1fYW55Q29udHJvbHMobCl7Zm9yKGNvbnN0W2EsZF1vZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRhaW5zKGEpJiZsKGQpKXJldHVybiEwO3JldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoYSxkLGgp''@;'; put 'put ''PT4oKGQuZW5hYmxlZHx8dGhpcy5kaXNhYmxlZCkmJihhW2hdPWQudmFsdWUpLGEpKX1fcmVkdWNlQ2hpbGRyZW4obCxhKXtsZXQgZD1sO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKGgsZik9PntkPWEoZCxoLGYpfSksZH1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe2Zvcihjb25zdCBsIG9m''@;'; put 'put ''IE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udHJvbHNbbF0uZW5hYmxlZClyZXR1cm4hMTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X2ZpbmQobCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkobCk/dGhpcy5jb250cm9sc1tsXTpudWxsfX1jb25zdCBzNz1uZXcgTXQoIkNhbGxTZXREaXNhYmxlZFN0YXRlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Znh9KSxmeD0iYWx3YXlzIjtmdW5jdGlvbiBweChjLGwsYT1meCl7WFcoYyxsKSxsLnZhbHVlQWNjZXNzb3Iud3Jp''@;'; put 'put ''dGVWYWx1ZShjLnZhbHVlKSwoYy5kaXNhYmxlZHx8ImFsd2F5cyI9PT1hKSYmbC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGU/LihjLmRpc2FibGVkKSxmdW5jdGlvbiBKTGUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShhPT57Yy5fcGVuZGluZ1ZhbHVlPWEs''@;'; put 'put ''Yy5fcGVuZGluZ0NoYW5nZT0hMCxjLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1jLnVwZGF0ZU9uJiZhMGUoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIGVPZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRl''@;'; put 'put ''KGQpfTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBRTGUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwi''@;'; put 'put ''Ymx1ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZhMGUoYyxsKSwic3VibWl0IiE9PWMudXBkYXRlT24mJmMubWFya0FzVG91Y2hlZCgpfSl9KGMsbCksZnVuY3Rpb24gWExlKGMsbCl7aWYobC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2NvbnN0IGE9ZD0+e2wu''@;'; put 'put ''dmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKGQpfTtjLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpfSl9fShjLGwpfWZ1bmN0aW9uIGdMKGMsbCl7Yy5mb3JFYWNoKGE9Pnth''@;'; put 'put ''LnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmEucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShsKX0pfWZ1bmN0aW9uIFhXKGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBxdWUoYyl7cmV0dXJuIGMuX3Jhd1ZhbGlkYXRvcnN9KGMpO251bGwhPT1sLnZhbGlkYXRvcj9jLnNldFZhbGlkYXRvcnMo''@;'; put 'put ''S3VlKGEsbC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBYdWUoYyl7cmV0dXJuIGMuX3Jhd0FzeW5jVmFsaWRhdG9yc30oYyk7bnVsbCE9PWwuYXN5bmNWYWxpZGF0b3I/Yy5zZXRBc3luY1ZhbGlkYXRvcnMo''@;'; put 'put ''S3VlKGQsbC5hc3luY1ZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBkJiZjLnNldEFzeW5jVmFsaWRhdG9ycyhbZF0pO2NvbnN0IGg9KCk9PmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO2dMKGwuX3Jhd1ZhbGlkYXRvcnMsaCksZ0wobC5fcmF3QXN5bmNWYWxpZGF0b3JzLGgpfWZ1''@;'; put 'put ''bmN0aW9uIGEwZShjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25z''@;'; put 'put ''dCBhT2U9e3Byb3ZpZGU6QjEsdXNlRXhpc3Rpbmc6Q3MoKCk9PmJwKX0sZ3g9UHJvbWlzZS5yZXNvbHZlKCk7bGV0IGJwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBCMXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoKSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPWgsdGhpcy5zdWJtaXR0ZWQ9''@;'; put 'put ''ITEsdGhpcy5fZGlyZWN0aXZlcz1uZXcgU2V0LHRoaXMubmdTdWJtaXQ9bmV3IEtyLHRoaXMuZm9ybT1uZXcgaEwoe30sVVcoYSksWlcoZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29u''@;'; put 'put ''dHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woYSl7Z3gudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2EuY29udHJvbD1kLnJlZ2lz''@;'; put 'put ''dGVyQ29udHJvbChhLm5hbWUsYS5jb250cm9sKSxweChhLmNvbnRyb2wsYSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSxhLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoYSl9KX1nZXRDb250cm9sKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLmZvcm0uZ2V0KGEucGF0aCl9cmVtb3ZlQ29udHJvbChhKXtneC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoYSl9KX1hZGRGb3JtR3JvdXAoYSl7Z3gu''@;'; put 'put ''dGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpLGg9bmV3IGhMKHt9KTsoZnVuY3Rpb24gbzBlKGMsbCl7WFcoYyxsKX0pKGgsYSksZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGgpLGgudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX1y''@;'; put 'put ''ZW1vdmVGb3JtR3JvdXAoYSl7Z3gudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGEpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGEucGF0aCl9dXBkYXRlTW9kZWwoYSxkKXtneC50aGVu''@;'; put 'put ''KCgpPT57dGhpcy5mb3JtLmdldChhLnBhdGgpLnNldFZhbHVlKGQpfSl9c2V0VmFsdWUoYSl7dGhpcy5jb250cm9sLnNldFZhbHVlKGEpfW9uU3VibWl0KGEpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxmdW5jdGlvbiBzMGUoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JF''@;'; put 'put ''YWNoKGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdT''@;'; put 'put ''dWJtaXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVs''@;'; put 'put ''bCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGgwLDEwKSxHZShobSwxMCksR2UoczcsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3Jt''@;'; put 'put ''IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInN1Ym1pdCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25TdWJtaXQodil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbTm4uTm9uZSwibmdGb3JtT3B0aW9u''@;'; put 'put ''cyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbZGEoW2FPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbDBlKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1m''@;'; put 'put ''dW5jdGlvbiBjMGUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IHRZPWNsYXNzIGV4dGVuZHMgcVd7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFco''@;'; put 'put ''YSksS1coZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFs''@;'; put 'put ''dWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLGRMKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9YzBlKGwpP2wudmFsdWU6bCl9c2V0VmFsdWUobCxhPXt9KXt0''@;'; put 'put ''aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sLHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1hLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChkPT5kKHRoaXMudmFsdWUsITEhPT1hLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpLHRoaXMudXBkYXRl''@;'; put 'put ''VmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7dGhpcy5zZXRWYWx1ZShsLGEpfXJlc2V0KGw9dGhpcy5kZWZhdWx0VmFsdWUsYT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUobCksdGhpcy5tYXJrQXNQcmlzdGluZShhKSx0aGlzLm1hcmtBc1VudG91Y2hlZChhKSx0aGlz''@;'; put 'put ''LnNldFZhbHVlKHRoaXMudmFsdWUsYSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKGwpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZShsKXt0aGlzLl9vbkNoYW5n''@;'; put 'put ''ZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25DaGFuZ2UobCl7bDBlKHRoaXMuX29uQ2hhbmdlLGwpfXJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe2wwZSh0aGlzLl9vbkRpc2FibGVk''@;'; put 'put ''Q2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVk''@;'; put 'put ''KCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7YzBlKGwpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sLnZh''@;'; put 'put ''bHVlLGwuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWx9fSxsT2U9e3Byb3ZpZGU6ZDEsdXNlRXhpc3Rpbmc6Q3MoKCk9''@;'; put 'put ''PiRzKX0sZDBlPVByb21pc2UucmVzb2x2ZSgpO2xldCAkcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZDF7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9dix0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPU0sdGhpcy5jb250cm9sPW5ldyB0''@;'; put 'put ''WSx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFtZT0iIix0aGlzLnVwZGF0ZT1uZXcgS3IsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIGVZKGMsbCl7aWYoIWwpcmV0''@;'; put 'put ''dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJheS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PXFsP2E9ZjpmdW5jdGlvbiByT2UoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PWE3fShmKT9kPWY6aD1mfSksaHx8ZHx8''@;'; put 'put ''YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtpZih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJl''@;'; put 'put ''dmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIFFXKGMsbCl7aWYoIWMuaGFz''@;'; put 'put ''T3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9k''@;'; put 'put ''ZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9w''@;'; put 'put ''YXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5f''@;'; put 'put ''c2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhp''@;'; put 'put ''cy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtweCh0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRl''@;'; put 'put ''KSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFt''@;'; put 'put ''ZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXtkMGUudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShhLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6''@;'; put 'put ''ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoYSl7Y29uc3QgZD1hLmlzRGlzYWJsZWQuY3VycmVudFZhbHVlLGg9MCE9PWQmJnMxKGQpO2QwZS50aGVuKCgpPT57aCYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRy''@;'; put 'put ''b2wuZGlzYWJsZSgpOiFoJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChhKXtyZXR1cm4gdGhpcy5fcGFyZW50P2Z1bmN0aW9uIGZMKGMsbCl7cmV0dXJuWy4uLmwu''@;'; put 'put ''cGF0aCxjXX0oYSx0aGlzLl9wYXJlbnQpOlthXX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCMSw5KSxHZShoMCwxMCksR2UoaG0sMTApLEdlKHlwLDEwKSxHZShFcyw4KSxHZShzNyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFtZSIsaXNEaXNhYmxlZDpbTm4uTm9uZSwiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6W05uLk5vbmUsIm5nTW9k''@;'; put 'put ''ZWwiLCJtb2RlbCJdLG9wdGlvbnM6W05uLk5vbmUsIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxmZWF0dXJlczpbZGEoW2xPZV0pLHdhLHdsXX0pfX1yZXR1cm4gY30pKCksbDc9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIiwzLCJuZ05hdGl2ZVZhbGlkYXRlIiwiIl1dLGhvc3RBdHRyczpb''@;'; put 'put ''Im5vdmFsaWRhdGUiLCIiXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgY09lPXtwcm92aWRlOnlwLHVzZUV4aXN0aW5nOkNzKCgpPT52TCksbXVsdGk6ITB9O2xldCB2TD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIp''@;'; put 'put ''fXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1ZcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltkYShbY09lXSksd2FdfSl9fXJldHVybiBj''@;'; put 'put ''fSkoKTtjb25zdCB1T2U9e3Byb3ZpZGU6eXAsdXNlRXhpc3Rpbmc6Q3MoKCk9PnlMKSxtdWx0aTohMH07bGV0IGRPZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChhLGQpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFthLGRdKX1yZW1vdmUoYSl7Zm9y''@;'; put 'put ''KGxldCBkPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtkPj0wOy0tZClpZih0aGlzLl9hY2Nlc3NvcnNbZF1bMV09PT1hKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoZCwxKX1zZWxlY3QoYSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goZD0+e3RoaXMuX2lzU2FtZUdyb3Vw''@;'; put 'put ''KGQsYSkmJmRbMV0hPT1hJiZkWzFdLmZpcmVVbmNoZWNrKGEudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGEsZCl7cmV0dXJuISFhWzBdLmNvbnRyb2wmJmFbMF0uX3BhcmVudD09PWQuX2NvbnRyb2wuX3BhcmVudCYmYVsxXS5uYW1lPT09ZC5uYW1lfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLHlMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhN3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtz''@;'; put 'put ''dXBlcihhLGQpLHRoaXMuX3JlZ2lzdHJ5PWgsdGhpcy5faW5qZWN0b3I9Zix0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZD0hMSx0aGlzLm9uQ2hhbmdlPSgpPT57fSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPWZpKHM3LHtvcHRpb25hbDohMH0pPz9meH1uZ09uSW5pdCgpe3RoaXMuX2Nv''@;'; put 'put ''bnRyb2w9dGhpcy5faW5qZWN0b3IuZ2V0KGQxKSx0aGlzLl9jaGVja05hbWUoKSx0aGlzLl9yZWdpc3RyeS5hZGQodGhpcy5fY29udHJvbCx0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlZ2lzdHJ5LnJlbW92ZSh0aGlzKX13cml0ZVZhbHVlKGEpe3RoaXMuX3N0YXRlPWE9PT10aGlzLnZh''@;'; put 'put ''bHVlLHRoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLHRoaXMuX3N0YXRlKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMuX2ZuPWEsdGhpcy5vbkNoYW5nZT0oKT0+e2EodGhpcy52YWx1ZSksdGhpcy5fcmVnaXN0cnkuc2VsZWN0KHRoaXMpfX1zZXREaXNhYmxlZFN0YXRlKGEpeyh0aGlzLnNl''@;'; put 'put ''dERpc2FibGVkU3RhdGVGaXJlZHx8YXx8IndoZW5EaXNhYmxlZEZvckxlZ2FjeUNvZGUiPT09dGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSkmJnRoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixhKSx0aGlzLnNldERpc2FibGVkU3RhdGVGaXJlZD0hMH1maXJlVW5jaGVjayhhKXt0aGlzLndy''@;'; put 'put ''aXRlVmFsdWUoYSl9X2NoZWNrTmFtZSgpeyF0aGlzLm5hbWUmJnRoaXMuZm9ybUNvbnRyb2xOYW1lJiYodGhpcy5uYW1lPXRoaXMuZm9ybUNvbnRyb2xOYW1lKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShFbyksR2UoSmkpLEdlKGRPZSks''@;'; put 'put ''R2UoRHMpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIs''@;'; put 'put ''Im5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9s''@;'; put 'put ''TmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbZGEoW3VPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgclk9bmV3IE10KCIiKSx5T2U9e3Byb3ZpZGU6eXAsdXNlRXhpc3Rpbmc6Q3MoKCk9PlQyKSxtdWx0aTohMH07ZnVuY3Rpb24gbTBlKGMsbCl7''@;'; put 'put ''cmV0dXJuIG51bGw9PWM/YCR7bH1gOihsJiYib2JqZWN0Ij09dHlwZW9mIGwmJihsPSJPYmplY3QiKSxgJHtjfTogJHtsfWAuc2xpY2UoMCw1MCkpfWxldCBUMj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1h''@;'; put 'put ''cD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoYSl7dGhpcy5fY29tcGFyZVdpdGg9YX13cml0ZVZhbHVlKGEpe3RoaXMudmFsdWU9YTtjb25zdCBoPW0wZSh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNl''@;'; put 'put ''dFByb3BlcnR5KCJ2YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1f''@;'; put 'put ''Z2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIGJPZShjKXty''@;'; put 'put ''ZXR1cm4gYy5zcGxpdCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19KSgp''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11''@;'; put 'put ''bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0''@;'; put 'put ''aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbZGEoW3lPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksQTI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhpcy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10''@;'; put 'put ''aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKCkpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLnNldCh0aGlzLmlkLGEpLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShtMGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFs''@;'; put 'put ''dWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NldEVsZW1lbnRWYWx1ZShhKSx0aGlzLl9zZWxlY3QmJnRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSl9X3NldEVsZW1lbnRWYWx1ZShhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0''@;'; put 'put ''eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRW8pLEdlKFQyLDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSl9''@;'; put 'put ''fXJldHVybiBjfSkoKTtjb25zdCBfT2U9e3Byb3ZpZGU6eXAsdXNlRXhpc3Rpbmc6Q3MoKCk9Pm14KSxtdWx0aTohMH07ZnVuY3Rpb24gdjBlKGMsbCl7cmV0dXJuIG51bGw9PWM/YCR7bH1gOigic3RyaW5nIj09dHlwZW9mIGwmJihsPWAnJHtsfSdgKSxsJiYib2JqZWN0Ij09dHlwZW9mIGwm''@;'; put 'put ''JihsPSJPYmplY3QiKSxgJHtjfTogJHtsfWAuc2xpY2UoMCw1MCkpfWxldCBteD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYTd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRo''@;'; put 'put ''PU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoYSl7dGhpcy5fY29tcGFyZVdpdGg9YX13cml0ZVZhbHVlKGEpe2xldCBkO2lmKHRoaXMudmFsdWU9YSxBcnJheS5pc0FycmF5KGEpKXtjb25zdCBoPWEubWFwKGY9PnRoaXMuX2dldE9wdGlvbklkKGYpKTtkPShmLHYpPT57Zi5fc2V0U2VsZWN0''@;'; put 'put ''ZWQoaC5pbmRleE9mKHYudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGQ9KGgsZik9PntoLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGQpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57Y29uc3QgaD1bXSxmPWQuc2VsZWN0ZWRPcHRpb25zO2lm''@;'; put 'put ''KHZvaWQgMCE9PWYpe2NvbnN0IHY9Zjtmb3IobGV0IE09MDtNPHYubGVuZ3RoO00rKyl7Y29uc3QgRz10aGlzLl9nZXRPcHRpb25WYWx1ZSh2W01dLnZhbHVlKTtoLnB1c2goRyl9fWVsc2V7Y29uc3Qgdj1kLm9wdGlvbnM7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2NvbnN0IEk9dltN''@;'; put 'put ''XTtpZihJLnNlbGVjdGVkKXtjb25zdCBHPXRoaXMuX2dldE9wdGlvblZhbHVlKEkudmFsdWUpO2gucHVzaChHKX19fXRoaXMudmFsdWU9aCxhKGgpfX1fcmVnaXN0ZXJPcHRpb24oYSl7Y29uc3QgZD0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1h''@;'; put 'put ''cC5zZXQoZCxhKSxkfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25z''@;'; put 'put ''dCBkPWZ1bmN0aW9uIHdPZShjKXtyZXR1cm4gYy5zcGxpdCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0''@;'; put 'put ''dXJuKGF8fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNl''@;'; put 'put ''bGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlu''@;'; put 'put ''cHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W2RhKFtfT2VdKSx3YV19KX19cmV0dXJuIGN9KSgpLGsyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3Nl''@;'; put 'put ''bGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUodjBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRo''@;'; put 'put ''aXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKHYwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUo''@;'; put 'put ''YSl9X3NldEVsZW1lbnRWYWx1ZShhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixhKX1fc2V0U2VsZWN0ZWQoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxl''@;'; put 'put ''Y3RlZCIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8YykoR2UoSmkpLEdlKEVvKSxHZShteCw5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfX1yZXR1cm4gY30pKCksYzc9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuX3ZhbGlkYXRvcj1zTH1uZ09uQ2hhbmdlcyhhKXtpZih0aGlzLmlucHV0TmFtZSBpbiBhKXtjb25zdCBkPXRoaXMubm9ybWFsaXplSW5wdXQoYVt0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChkKSx0aGlz''@;'; put 'put ''Ll92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihkKTpzTCx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoYSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihhKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGEpe3RoaXMuX29uQ2hh''@;'; put 'put ''bmdlPWF9ZW5hYmxlZChhKXtyZXR1cm4gbnVsbCE9YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W3dsXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTU9lPXtwcm92aWRl''@;'; put 'put ''OmgwLHVzZUV4aXN0aW5nOkNzKCgpPT5hWSksbXVsdGk6ITB9LHhPZT17cHJvdmlkZTpoMCx1c2VFeGlzdGluZzpDcygoKT0+b1kpLG11bHRpOiEwfTtsZXQgYVk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGM3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFt''@;'; put 'put ''ZT0icmVxdWlyZWQiLHRoaXMubm9ybWFsaXplSW5wdXQ9czEsdGhpcy5jcmVhdGVWYWxpZGF0b3I9YT0+RnVlfWVuYWJsZWQoYSl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WXMoYykpKShofHxjKX19''@;'; put 'put ''KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxb''@;'; put 'put ''IiIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZocigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVy''@;'; put 'put ''ZXM6W2RhKFtNT2VdKSx3YV19KX19cmV0dXJuIGN9KSgpLG9ZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhWXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jcmVhdGVWYWxpZGF0b3I9YT0+SHVlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVlzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBl''@;'; put 'put ''IiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmaHIoInJlcXVpcmVkIixoLl9lbmFi''@;'; put 'put ''bGVkPyIiOm51bGwpfSxmZWF0dXJlczpbZGEoW3hPZV0pLHdhXX0pfX1yZXR1cm4gY30pKCksRTBlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1aW5qPUFyKHt9KX19cmV0dXJuIGN9KSgpLFJjPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpzNyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9meH1dfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0UwZV19KX19cmV0dXJuIGN9KSgpLElPZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29u''@;'; put 'put ''ZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6clksdXNlVmFsdWU6YS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sPz8iYWx3YXlzIn0se3Byb3ZpZGU6czcsdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/Znh9XX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltFMGVdfSl9fXJldHVybiBjfSkoKTtjb25zdCBFYj1bImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0i''@;'; put 'put ''TTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLHZoPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDE5LjhDMTguNTUg''@;'; put 'put ''MTkuOCAxOSAxOS4zNSAxOSAxOC44VjEzQzE5IDEyLjQ1IDE4LjU1IDEyIDE4IDEyQzE3LjQ1IDEyIDE3IDEyLjQ1IDE3IDEzVjE4LjhDMTcgMTkuMzUgMTcuNDUgMTkuOCAxOCAxOS44Wk0xOC44NSAyMS45NUMxOC43MyAyMS44NCAxOC42IDIxLjc1IDE4LjQ2IDIxLjY5QzE4LjE3IDIxLjU3''@;'; put 'put ''IDE3LjgzIDIxLjU3IDE3LjU0IDIxLjY5QzE3LjQgMjEuNzUgMTcuMjcgMjEuODQgMTcuMTUgMjEuOTVDMTYuOTMgMjIuMTggMTYuOCAyMi40OCAxNi44IDIyLjhDMTYuOCAyMy4xMiAxNi45MyAyMy40MiAxNy4xNSAyMy42NUMxNy4yNyAyMy43NiAxNy40IDIzLjg1IDE3LjU0IDIzLjkxQzE3''@;'; put 'put ''LjY5IDIzLjk3IDE3Ljg0IDI0IDE4IDI0QzE4LjE2IDI0IDE4LjMxIDIzLjk3IDE4LjQ2IDIzLjkxQzE4LjYgMjMuODUgMTguNzMgMjMuNzYgMTguODUgMjMuNjVDMTkuMDcgMjMuNDIgMTkuMiAyMy4xMiAxOS4yIDIyLjhDMTkuMiAyMi42NCAxOS4xNyAyMi40OSAxOS4xMSAyMi4zNEMxOS4w''@;'; put 'put ''NSAyMi4yIDE4Ljk2IDIyLjA2IDE4Ljg1IDIxLjk1Wk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAx''@;'; put 'put ''Mi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0''@;'; put 'put ''LjYyIDYgMTggNlpNMTYuOCAxMi42NUMxNi44IDExLjk5IDE3LjM0IDExLjQ1IDE4IDExLjQ1QzE4LjY2IDExLjQ1IDE5LjIgMTEuOTkgMTkuMiAxMi42NVYxOC40NUMxOS4yIDE5LjExIDE4LjY2IDE5LjY1IDE4IDE5LjY1QzE3LjM0IDE5LjY1IDE2LjggMTkuMTEgMTYuOCAxOC40NVYxMi42''@;'; put 'put ''NVpNMTguOTggMjQuMTVDMTguODQgMjQuMjggMTguNjkgMjQuMzggMTguNTMgMjQuNDVDMTguMzUgMjQuNTIgMTguMTggMjQuNTYgMTggMjQuNTZDMTcuODIgMjQuNTYgMTcuNjQgMjQuNTMgMTcuNDYgMjQuNDVDMTcuMzEgMjQuMzggMTcuMTYgMjQuMjkgMTcgMjQuMTRDMTYuNzQgMjMuODcg''@;'; put 'put ''MTYuNTkgMjMuNTIgMTYuNTkgMjMuMTVDMTYuNTkgMjIuNzggMTYuNzMgMjIuNDQgMTcgMjIuMTVDMTcuMTQgMjIuMDIgMTcuMjkgMjEuOTIgMTcuNDUgMjEuODVDMTcuNjIgMjEuNzggMTcuOCAyMS43NCAxNy45OSAyMS43NEMxOC4xOCAyMS43NCAxOC4zNiAyMS43OCAxOC41MyAyMS44NUMx''@;'; put 'put ''OC42OCAyMS45MiAxOC44MyAyMi4wMiAxOC45OCAyMi4xNUMxOS4xIDIyLjI3IDE5LjIxIDIyLjQzIDE5LjI4IDIyLjYxQzE5LjM1IDIyLjc5IDE5LjM5IDIyLjk2IDE5LjM5IDIzLjE0QzE5LjM5IDIzLjUgMTkuMjUgMjMuODUgMTguOTcgMjQuMTRMMTguOTggMjQuMTVaIi8+J31dLHloPVsi''@;'; put 'put ''Y2hlY2stY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTIyLjYxIDE0LjIyTDE2LjI1IDIwLjU4TDEyLjcxIDE3LjA0QzEyLjMyIDE2LjY1IDExLjY5IDE2LjY1IDExLjMgMTcuMDRDMTAuOTEgMTcuNDMgMTAuOTEgMTguMDYgMTEuMyAxOC40NUwxNi4yNSAyMy40TDI0LjAzIDE1LjYyQzI0''@;'; put 'put ''LjQyIDE1LjIzIDI0LjQyIDE0LjYgMjQuMDMgMTQuMjFDMjMuNjQgMTMuODIgMjMuMDEgMTMuODIgMjIuNjIgMTQuMjFMMjIuNjEgMTQuMjJaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAy''@;'; put 'put ''NC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIg''@;'; put 'put ''MTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0yNC4xNiAxNS43OEwxNi4yNCAyMy43TDExLjE1IDE4LjYxQzEwLjY4IDE4LjE0IDEwLjY4IDE3LjM4IDExLjE1IDE2LjkxQzExLjYyIDE2LjQ0IDEyLjM4IDE2LjQ0IDEyLjg1IDE2''@;'; put 'put ''LjkxTDE2LjI0IDIwLjNMMjIuNDYgMTQuMDhDMjIuOTMgMTMuNjEgMjMuNjkgMTMuNjEgMjQuMTYgMTQuMDhDMjQuNjMgMTQuNTUgMjQuNjMgMTUuMzEgMjQuMTYgMTUuNzhaIi8+J31dLFQwZT1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy44IDE4LjFDNy44''@;'; put 'put ''IDE5Ljc1NjggNi41MDE2MyAyMS4xIDQuOSAyMS4xQzMuMjk4MzcgMjEuMSAyIDE5Ljc1NjggMiAxOC4xQzIgMTYuNDQzMSAzLjI5ODM3IDE1LjEgNC45IDE1LjFDNi41MDE2MyAxNS4xIDcuOCAxNi40NDMxIDcuOCAxOC4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45''@;'; put 'put ''IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEgMTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTMxLjEgMjEuMUMzMi43MDE2IDIxLjEgMzQgMTku''@;'; put 'put ''NzU2OCAzNCAxOC4xQzM0IDE2LjQ0MzEgMzIuNzAxNiAxNS4xIDMxLjEgMTUuMUMyOS40OTg0IDE1LjEgMjguMiAxNi40NDMxIDI4LjIgMTguMUMyOC4yIDE5Ljc1NjggMjkuNDk4NCAyMS4xIDMxLjEgMjEuMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik00LjkgMjEuMUM2LjUwMTYz''@;'; put 'put ''IDIxLjEgNy44IDE5Ljc1NjggNy44IDE4LjFDNy44IDE2LjQ0MzEgNi41MDE2MyAxNS4xIDQuOSAxNS4xQzMuMjk4MzcgMTUuMSAyIDE2LjQ0MzEgMiAxOC4xQzIgMTkuNzU2OCAzLjI5ODM3IDIxLjEgNC45IDIxLjFaIi8+PHBhdGggZD0iTTE4IDIxLjFDMTkuNjAxNiAyMS4xIDIwLjkgMTku''@;'; put 'put ''NzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzQgMTguMUMzNCAxOS43NTY4IDMyLjcwMTYgMjEuMSAz''@;'; put 'put ''MS4xIDIxLjFDMjkuNDk4NCAyMS4xIDI4LjIgMTkuNzU2OCAyOC4yIDE4LjFDMjguMiAxNi40NDMxIDI5LjQ5ODQgMTUuMSAzMS4xIDE1LjFDMzIuNzAxNiAxNS4xIDM0IDE2LjQ0MzEgMzQgMTguMVoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4y''@;'; put 'put ''Mzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sdng9WyJ3aW5kb3ctY2xvc2UiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEgMTguMDAwM0wyNi43IDEwLjcxMDNDMjcuMDM5OCAxMC4zMTM1IDI3''@;'; put 'put ''LjAxNjkgOS43MjIwNyAyNi42NDc2IDkuMzUyN0MyNi4yNzgyIDguOTgzMzMgMjUuNjg2OCA4Ljk2MDQ5IDI1LjI5IDkuMzAwMjZMMTggMTYuNTkwM0wxMC43MSA5LjI5MDI2QzEwLjMxMzIgOC45NTA0OSA5LjcyMTgxIDguOTczMzMgOS4zNTI0NCA5LjM0MjdDOC45ODMwNyA5LjcxMjA3IDgu''@;'; put 'put ''OTYwMjMgMTAuMzAzNSA5LjMwMDAxIDEwLjcwMDNMMTYuNTkgMTguMDAwM0w5LjI5MDAxIDI1LjI5MDNDOS4wMDQ2MyAyNS41MzQ3IDguODgwMzIgMjUuOTE4NCA4Ljk2ODE5IDI2LjI4MzdDOS4wNTYwNyAyNi42NDkgOS4zNDEyOSAyNi45MzQyIDkuNzA2NTkgMjcuMDIyMUMxMC4wNzE5IDI3''@;'; put 'put ''LjEwOTkgMTAuNDU1NiAyNi45ODU2IDEwLjcgMjYuNzAwM0wxOCAxOS40MTAzTDI1LjI5IDI2LjcwMDNDMjUuNjg2OCAyNy4wNCAyNi4yNzgyIDI3LjAxNzIgMjYuNjQ3NiAyNi42NDc4QzI3LjAxNjkgMjYuMjc4NSAyNy4wMzk4IDI1LjY4NyAyNi43IDI1LjI5MDNMMTkuNDEgMTguMDAwM1oi''@;'; put 'put ''Lz4nfV0sUk9lPVsiaW5mby1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEgMjNIMTlWMTVIMTZDMTUuNDUgMTUgMTUgMTUuNDUgMTUgMTZDMTUgMTYuNTUgMTUuNDUgMTcgMTYgMTdIMTdWMjNIMTVDMTQuNDUgMjMgMTQgMjMuNDUgMTQgMjRDMTQgMjQuNTUgMTQuNDUgMjUgMTUgMjVI''@;'; put 'put ''MjFDMjEuNTUgMjUgMjIgMjQuNTUgMjIgMjRDMjIgMjMuNDUgMjEuNTUgMjMgMjEgMjNaTTE3LjkzIDEzLjNDMTguNyAxMy4zIDE5LjMzIDEyLjY3IDE5LjMzIDExLjlDMTkuMzMgMTEuMTMgMTguNyAxMC41IDE3LjkzIDEwLjVDMTcuMTYgMTAuNSAxNi41MyAxMS4xMyAxNi41MyAxMS45QzE2''@;'; put 'put ''LjUzIDEyLjY3IDE3LjE2IDEzLjMgMTcuOTMgMTMuM1pNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkg''@;'; put 'put ''MTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAy''@;'; put 'put ''NC42MiA2IDE4IDZaTTE3LjkzIDEwLjNDMTguODEgMTAuMyAxOS41MyAxMS4wMiAxOS41MyAxMS45QzE5LjUzIDEyLjc4IDE4LjgxIDEzLjUgMTcuOTMgMTMuNUMxNy4wNSAxMy41IDE2LjMzIDEyLjc4IDE2LjMzIDExLjlDMTYuMzMgMTEuMDIgMTcuMDUgMTAuMyAxNy45MyAxMC4zWk0yMSAy''@;'; put 'put ''NS4ySDE1QzE0LjM0IDI1LjIgMTMuOCAyNC42NiAxMy44IDI0QzEzLjggMjMuMzQgMTQuMzQgMjIuOCAxNSAyMi44SDE2LjhWMTcuMkgxNkMxNS4zNCAxNy4yIDE0LjggMTYuNjYgMTQuOCAxNkMxNC44IDE1LjM0IDE1LjM0IDE0LjggMTYgMTQuOEgxOS4yVjIyLjhIMjFDMjEuNjYgMjIuOCAy''@;'; put 'put ''Mi4yIDIzLjM0IDIyLjIgMjRDMjIuMiAyNC42NiAyMS42NiAyNS4yIDIxIDI1LjJaIi8+J31dLEEwZT1bInRpbWVzIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQ2OTYgMTcuOTczMkwyNy43NTk2IDkuNzA1NDJDMjguMDk5NCA5LjMwOTcyIDI4LjA3NjUgOC43MTk4NyAyNy43MDcxIDguMzUx''@;'; put 'put ''NDhDMjcuMzM3OCA3Ljk4MzEgMjYuNzQ2MyA3Ljk2MDMyIDI2LjM0OTYgOC4yOTkxOUwxOC4wNTk2IDE2LjU2N0w5Ljc2OTU4IDguMjg5MjJDOS4zNzc0NSA3Ljg5ODE0IDguNzQxNyA3Ljg5ODE0IDguMzQ5NTggOC4yODkyMkM3Ljk1NzQ1IDguNjgwMjkgNy45NTc0NSA5LjMxNDM0IDguMzQ5''@;'; put 'put ''NTggOS43MDU0MkwxNi42NDk2IDE3Ljk3MzJMOC4zNDk1OCAyNi4yNDFDOC4wNjQyIDI2LjQ4NDggNy45Mzk4OSAyNi44Njc1IDguMDI3NzcgMjcuMjMxOEM4LjExNTY0IDI3LjU5NjEgOC40MDA4NiAyNy44ODA2IDguNzY2MTYgMjcuOTY4MkM5LjEzMTQ2IDI4LjA1NTkgOS41MTUxOSAyNy45''@;'; put 'put ''MzE5IDkuNzU5NTggMjcuNjQ3M0wxOC4wNTk2IDE5LjM3OTVMMjYuMzQ5NiAyNy42NDczQzI2Ljc0NjMgMjcuOTg2MSAyNy4zMzc4IDI3Ljk2MzQgMjcuNzA3MSAyNy41OTVDMjguMDc2NSAyNy4yMjY2IDI4LjA5OTQgMjYuNjM2NyAyNy43NTk2IDI2LjI0MUwxOS40Njk2IDE3Ljk3MzJaIi8+''@;'; put 'put ''J31dLGswZT1bImFuZ2xlLWRvdWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOC4zNDkxIDE3Ljg5OTZDMjguNTM4NCAxOC4wODM3IDI4Ljc5NDUgMTguMTg2MyAyOS4wNjEgMTguMTg0OEMyOS40NjQgMTguMTgzMSAyOS44MjY4IDE3Ljk0NTEgMjkuOTgyMSAxNy41ODA1QzMwLjEzNzQgMTcu''@;'; put 'put ''MjE1OCAzMC4wNTUgMTYuNzk1NSAyOS43NzI5IDE2LjUxMzNMMTguMDMxOCA1TDYuMzAwNjcgMTYuNTEzM0M1Ljk1OTk5IDE2LjkwMzQgNS45ODI4OSAxNy40ODQ5IDYuMzUzMjUgMTcuODQ4MUM2LjcyMzYgMTguMjExMiA3LjMxNjYgMTguMjMzNyA3LjcxNDQyIDE3Ljg5OTZMMTguMDMxOCA3''@;'; put 'put ''Ljc4MjQ2TDI4LjM0OTEgMTcuODk5NloiLz48cGF0aCBkPSJNMjguMzQ5MSAyOC43MTQ5QzI4LjUzODQgMjguODk4OSAyOC43OTQ1IDI5LjAwMTUgMjkuMDYxIDI5QzI5LjQ2NCAyOC45OTg0IDI5LjgyNjggMjguNzYwMyAyOS45ODIxIDI4LjM5NTdDMzAuMTM3NCAyOC4wMzExIDMwLjA1NSAy''@;'; put 'put ''Ny42MTA3IDI5Ljc3MjkgMjcuMzI4NUwxOC4wMzE4IDE1LjgxNTJMNi4zMDA2NyAyNy4zMjg1QzUuOTU5OTkgMjcuNzE4NiA1Ljk4Mjg5IDI4LjMwMDEgNi4zNTMyNSAyOC42NjMzQzYuNzIzNiAyOS4wMjY1IDcuMzE2NiAyOS4wNDg5IDcuNzE0NDIgMjguNzE0OUwxOC4wMzE4IDE4LjU5NzdM''@;'; put 'put ''MjguMzQ5MSAyOC43MTQ5WiIvPid9XSxMT2U9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNyAyNS44NkwxMC44MSAyMC41QzEwLjY0NjIgMjAuMzA4NyAxMC41NjA2IDIwLjA2MjYgMTAuNTcwMyAxOS44MTA5QzEwLjU4IDE5LjU1OTMgMTAuNjg0NCAxOS4zMjA1IDEwLjg2MjQg''@;'; put 'put ''MTkuMTQyNEMxMS4wNDA1IDE4Ljk2NDMgMTEuMjc5MyAxOC44NiAxMS41MzEgMTguODUwM0MxMS43ODI2IDE4Ljg0MDYgMTIuMDI4NyAxOC45MjYyIDEyLjIyIDE5LjA5TDE2LjE3IDIzTDI0LjgxIDE0LjM2QzI1LjAwMTMgMTQuMTk2MiAyNS4yNDc0IDE0LjExMDYgMjUuNDk5MSAxNC4xMjAz''@;'; put 'put ''QzI1Ljc1MDcgMTQuMTMgMjUuOTg5NSAxNC4yMzQzIDI2LjE2NzYgMTQuNDEyNEMyNi4zNDU3IDE0LjU5MDUgMjYuNDUgMTQuODI5MyAyNi40NTk3IDE1LjA4MDlDMjYuNDY5NCAxNS4zMzI2IDI2LjM4MzggMTUuNTc4NyAyNi4yMiAxNS43N0wxNi4xNyAyNS44NloiLz48cGF0aCBkPSJNMzIu''@;'; put 'put ''MjUgNkgyOVY4SDMyVjMwSDQuMDAwMDFWOEg3LjAwMDAxVjZIMy43NTAwMUMzLjUxNjI1IDYuMDAzOTEgMy4yODU1NSA2LjA1MzgzIDMuMDcxMDggNi4xNDY5MUMyLjg1NjYxIDYuMjM5OTkgMi42NjI1OCA2LjM3NDQxIDIuNTAwMDcgNi41NDI0OUMyLjMzNzU3IDYuNzEwNTcgMi4yMDk3NiA2''@;'; put 'put ''LjkwOTAyIDIuMTIzOTYgNy4xMjY1QzIuMDM4MTYgNy4zNDM5OCAxLjk5NjA0IDcuNTc2MjQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3''@;'; put 'put ''NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3''@;'; put 'put ''NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjcuODFDMzQuMDA0IDcuNTc2MjQgMzMuOTYxOSA3LjM0Mzk4IDMzLjg3NjEgNy4xMjY1QzMzLjc5''@;'; put 'put ''MDMgNi45MDkwMiAzMy42NjI1IDYuNzEwNTcgMzMuNSA2LjU0MjQ5QzMzLjMzNzQgNi4zNzQ0MSAzMy4xNDM0IDYuMjM5OTkgMzIuOTI4OSA2LjE0NjkxQzMyLjcxNDUgNi4wNTM4MyAzMi40ODM4IDYuMDAzOTEgMzIuMjUgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2''@;'; put 'put ''IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5Mjkx''@;'; put 'put ''IDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0yNiAxMEMyNi4yNjUyIDEwIDI2''@;'; put 'put ''LjUxOTYgOS44OTQ2NCAyNi43MDcxIDkuNzA3MTFDMjYuODk0NyA5LjUxOTU3IDI3IDkuMjY1MjIgMjcgOVYzQzI3IDIuNzM0NzggMjYuODk0NyAyLjQ4MDQzIDI2LjcwNzEgMi4yOTI4OUMyNi41MTk2IDIuMTA1MzYgMjYuMjY1MiAyIDI2IDJDMjUuNzM0OCAyIDI1LjQ4MDQgMi4xMDUzNiAy''@;'; put 'put ''NS4yOTI5IDIuMjkyODlDMjUuMTA1NCAyLjQ4MDQzIDI1IDIuNzM0NzggMjUgM1Y5QzI1IDkuMjY1MjIgMjUuMTA1NCA5LjUxOTU3IDI1LjI5MjkgOS43MDcxMUMyNS40ODA0IDkuODk0NjQgMjUuNzM0OCAxMCAyNiAxMFoiLz48cGF0aCBkPSJNMjMgNkgxM1Y4SDIzVjZaIi8+JyxvdXRsaW5l''@;'; put 'put ''QWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMu''@;'; put 'put ''MDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAy''@;'; put 'put ''Ny4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0zMiAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2NCAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAwNCAzMC40MjM4IDMzLjk2MTkgMzAuNjU2IDMzLjg3NjEgMzAuODczNUMzMy43OTAz''@;'; put 'put ''IDMxLjA5MSAzMy42NjI1IDMxLjI4OTQgMzMuNSAzMS40NTc1QzMzLjMzNzQgMzEuNjI1NiAzMy4xNDM0IDMxLjc2IDMyLjkyODkgMzEuODUzMUMzMi43MTQ1IDMxLjk0NjIgMzIuNDgzOCAzMS45OTYxIDMyLjI1IDMySDMuNzUwMDFDMy41MTYyNSAzMS45OTYxIDMuMjg1NTUgMzEuOTQ2MiAz''@;'; put 'put ''LjA3MTA4IDMxLjg1MzFDMi44NTY2MSAzMS43NiAyLjY2MjU4IDMxLjYyNTYgMi41MDAwNyAzMS40NTc1QzIuMzM3NTcgMzEuMjg5NCAyLjIwOTc2IDMxLjA5MSAyLjEyMzk2IDMwLjg3MzVDMi4wMzgxNiAzMC42NTYgMS45OTYwNCAzMC40MjM4IDIuMDAwMDEgMzAuMTlWNy44MUMxLjk5NjA0''@;'; put 'put ''IDcuNTc2MjQgMi4wMzgxNiA3LjM0Mzk4IDIuMTIzOTYgNy4xMjY1QzIuMjA5NzYgNi45MDkwMiAyLjMzNzU3IDYuNzEwNTcgMi41MDAwNyA2LjU0MjQ5QzIuNjYyNTggNi4zNzQ0MSAyLjg1NjYxIDYuMjM5OTkgMy4wNzEwOCA2LjE0NjkxQzMuMjg1NTUgNi4wNTM4MyAzLjUxNjI1IDYuMDAz''@;'; put 'put ''OTEgMy43NTAwMSA2SDcuMDAwMDFWOEg0LjAwMDAxVjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTI0LjEzMzMgMTUuMDM2N0gyNi40NTdDMjYuNDU4MyAxNS4wNTE0IDI2LjQ1OTIgMTUuMDY2MSAyNi40NTk3IDE1LjA4MDlDMjYuNDY5NCAxNS4zMzI2IDI2LjM4MzggMTUuNTc4NyAyNi4y''@;'; put 'put ''MiAxNS43N0wxNi4xNyAyNS44NkwxMC44MSAyMC41QzEwLjY0NjIgMjAuMzA4NyAxMC41NjA2IDIwLjA2MjYgMTAuNTcwMyAxOS44MTA5QzEwLjU4IDE5LjU1OTMgMTAuNjg0NCAxOS4zMjA1IDEwLjg2MjQgMTkuMTQyNEMxMS4wNDA1IDE4Ljk2NDMgMTEuMjc5MyAxOC44NiAxMS41MzEgMTgu''@;'; put 'put ''ODUwM0MxMS43ODI2IDE4Ljg0MDYgMTIuMDI4NyAxOC45MjYyIDEyLjIyIDE5LjA5TDE2LjE3IDIzTDI0LjEzMzMgMTUuMDM2N1oiLz48cGF0aCBkPSJNMjEuOTU5NCA2TDIwLjc1OTQgOEgxM1Y2SDIxLjk1OTRaIi8+PHBhdGggZD0iTTEwLjcwNzEgOS43MDcxMUMxMC41MTk2IDkuODk0NjQg''@;'; put 'put ''MTAuMjY1MiAxMCAxMCAxMEM5LjczNDggMTAgOS40ODA0NCA5Ljg5NDY0IDkuMjkyOTEgOS43MDcxMUM5LjEwNTM3IDkuNTE5NTcgOS4wMDAwMSA5LjI2NTIyIDkuMDAwMDEgOVYzQzkuMDAwMDEgMi43MzQ3OCA5LjEwNTM3IDIuNDgwNDMgOS4yOTI5MSAyLjI5Mjg5QzkuNDgwNDQgMi4xMDUz''@;'; put 'put ''NiA5LjczNDggMiAxMCAyQzEwLjI2NTIgMiAxMC41MTk2IDIuMTA1MzYgMTAuNzA3MSAyLjI5Mjg5QzEwLjg5NDcgMi40ODA0MyAxMSAyLjczNDc4IDExIDNWOUMxMSA5LjI2NTIyIDEwLjg5NDcgOS41MTk1NyAxMC43MDcxIDkuNzA3MTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJN''@;'; put 'put ''MTAuODEgMjAuNUwxNi4xNyAyNS44NkwyNi4yMiAxNS44MUMyNi4zODM4IDE1LjYxODcgMjYuNDY5NCAxNS4zNzI2IDI2LjQ1OTcgMTUuMTIwOUMyNi40NSAxNC44NjkzIDI2LjM0NTcgMTQuNjMwNSAyNi4xNjc2IDE0LjQ1MjRDMjUuOTg5NSAxNC4yNzQzIDI1Ljc1MDcgMTQuMTcgMjUuNDk5''@;'; put 'put ''MSAxNC4xNjAzQzI1LjI0NzQgMTQuMTUwNiAyNS4wMDEzIDE0LjIzNjIgMjQuODEgMTQuNEwxNi4xNyAyM0wxMi4yMyAxOS4wNkMxMi4wMzg3IDE4Ljg5NjIgMTEuNzkyNiAxOC44MTA2IDExLjU0MSAxOC44MjAzQzExLjI4OTMgMTguODMgMTEuMDUwNSAxOC45MzQzIDEwLjg3MjQgMTkuMTEy''@;'; put 'put ''NEMxMC42OTQ0IDE5LjI5MDUgMTAuNTkgMTkuNTI5MyAxMC41ODAzIDE5Ljc4MDlDMTAuNTcwNiAyMC4wMzI2IDEwLjY1NjIgMjAuMjc4NyAxMC44MiAyMC40N0wxMC44MSAyMC41WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFD''@;'; put 'put ''MTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMg''@;'; put 'put ''OS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMyIDEzLjIyVjMwSDQuMDAwMDFWOEg3LjAwMDAxVjZIMy43NTAwMUMzLjUx''@;'; put 'put ''NjI1IDYuMDAzOTEgMy4yODU1NSA2LjA1MzgzIDMuMDcxMDggNi4xNDY5MUMyLjg1NjYxIDYuMjM5OTkgMi42NjI1OCA2LjM3NDQxIDIuNTAwMDcgNi41NDI0OUMyLjMzNzU3IDYuNzEwNTcgMi4yMDk3NiA2LjkwOTAyIDIuMTIzOTYgNy4xMjY1QzIuMDM4MTYgNy4zNDM5OCAxLjk5NjA0IDcu''@;'; put 'put ''NTc2MjQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFD''@;'; put 'put ''My4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAz''@;'; put 'put ''MS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMzLjM4MDIgMTIuNzMgMzIuNzA2MyAxMy4wMjY2IDMyIDEzLjIyWiIvPjxwYXRoIGQ9Ik0yMi41IDZIMTNWOEgyMi43OEMyMi41OTY4IDcuMzQ5MDMgMjIuNTAyNiA2LjY3''@;'; put 'put ''NjI1IDIyLjUgNloiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTAgMTBD''@;'; put 'put ''MTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgw''@;'; put 'put ''NDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''NiAxMEMyNi4yNjUyIDEwIDI2LjUxOTYgOS44OTQ2NCAyNi43MDcxIDkuNzA3MTFDMjYuODk0NyA5LjUxOTU3IDI3IDkuMjY1MjIgMjcgOVYzQzI3IDIuNzM0NzggMjYuODk0NyAyLjQ4MDQzIDI2LjcwNzEgMi4yOTI4OUMyNi41MTk2IDIuMTA1MzYgMjYuMjY1MiAyIDI2IDJDMjUuNzM0OCAy''@;'; put 'put ''IDI1LjQ4MDQgMi4xMDUzNiAyNS4yOTI5IDIuMjkyODlDMjUuMTA1NCAyLjQ4MDQzIDI1IDIuNzM0NzggMjUgM1Y5QzI1IDkuMjY1MjIgMjUuMTA1NCA5LjUxOTU3IDI1LjI5MjkgOS43MDcxMUMyNS40ODA0IDkuODk0NjQgMjUuNzM0OCAxMCAyNiAxMFoiLz48cGF0aCBkPSJNMzIuMjUgNkgy''@;'; put 'put ''OC4yNVY5QzI4LjI1IDkuNTgzNDggMjguMDE4MiAxMC4xNDMxIDI3LjYwNTYgMTAuNTU1NkMyNy4xOTMxIDEwLjk2ODIgMjYuNjMzNSAxMS4yIDI2LjA1IDExLjJDMjUuNDY2NSAxMS4yIDI0LjkwNyAxMC45NjgyIDI0LjQ5NDQgMTAuNTU1NkMyNC4wODE4IDEwLjE0MzEgMjMuODUgOS41ODM0''@;'; put 'put ''OCAyMy44NSA5VjZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3Ljgw''@;'; put 'put ''MDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2''@;'; put 'put ''MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMx''@;'; put 'put ''LjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMz''@;'; put 'put ''LjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjcuODFDMzQuMDA0IDcuNTc2MjQgMzMuOTYxOSA3LjM0Mzk4IDMzLjg3NjEgNy4xMjY1QzMzLjc5MDMgNi45MDkwMiAz''@;'; put 'put ''My42NjI1IDYuNzEwNTcgMzMuNSA2LjU0MjQ5QzMzLjMzNzQgNi4zNzQ0MSAzMy4xNDM0IDYuMjM5OTkgMzIuOTI4OSA2LjE0NjkxQzMyLjcxNDUgNi4wNTM4MyAzMi40ODM4IDYuMDAzOTEgMzIuMjUgNlpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMy''@;'; put 'put ''IDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45''@;'; put 'put ''IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2''@;'; put 'put ''NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0''@;'; put 'put ''IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45Mjgx''@;'; put 'put ''IDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgw''@;'; put 'put ''OCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMjEuOTU5NCA2SDEyLjJWOUMxMi4yIDkuNTgzNDgg''@;'; put 'put ''MTEuOTY4MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFD''@;'; put 'put ''My41NjIwNCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5''@;'; put 'put ''OSA3LjU3MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44''@;'; put 'put ''NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5''@;'; put 'put ''MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxNS4wMjYzQzMzLjg4ODYgMTUuMDM1NCAzMy43NzY0IDE1LjAzODkgMzMuNjYzNyAxNS4wMzY3SDI2LjE5NjRDMjYuMjA2OCAxNS4wNTg0IDI2LjIxNjYgMTUuMDgwNCAyNi4y''@;'; put 'put ''MjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDE2LjI3IDI2LjI1TDEx''@;'; put 'put ''IDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUy''@;'; put 'put ''NSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyMy42MjMzIDE1LjAzNjdIMjIuMzM5NUMyMS4xNTc3IDE1LjA2MDQgMjAuMDIzMyAxNC40NDg5IDE5LjQyMDYgMTMuMzg5M0MxOC44MjA0IDEyLjMzNDIgMTguODcwMyAxMS4wNDIzIDE5LjUzNjIgMTAuMDM4N0wyMS45NTk0''@;'; put 'put ''IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUy''@;'; put 'put ''IDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAx''@;'; put 'put ''MCAxMCAxMFoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAu''@;'; put 'put ''NTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4''@;'; put 'put ''MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMCAxMy41QzI4LjAxMDkgMTMuNSAyNi4xMDMyIDEyLjcwOTggMjQuNjk2NyAxMS4zMDMzQzIzLjI5MDIgOS44OTY3OCAyMi41IDcuOTg5MTIgMjIuNSA2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAxMC4xNDMx''@;'; put 'put ''IDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1Ljk5NzI5''@;'; put 'put ''IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0IDIuMDAw''@;'; put 'put ''MDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEu''@;'; put 'put ''OTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3''@;'; put 'put ''NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMi44MDQxIDEzLjA5OTEgMzEuNDE2NSAxMy41MDE1IDMwIDEzLjVaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAu''@;'; put 'put ''NjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAx''@;'; put 'put ''NC42NkMyNC4xMjY3IDE0LjUzMzMgMjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAy''@;'; put 'put ''NS44MDMzIDE0LjUzMzMgMjUuOTMgMTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYu''@;'; put 'put ''MTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43''@;'; put 'put ''NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxPT2U9WyJjYWxlbmRhciIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMiAyMEgyMFYyMkgyMlYyMFpNMjAgMjZIMjJWMjRIMjBWMjZaTTI4IDI0SDI2VjI2SDI4VjI0Wk0yOCAyMEgyNlYyMkgyOFYyMFpNMjcgMTJDMjcuNTUgMTIgMjggMTEuNTUg''@;'; put 'put ''MjggMTFWNUMyOCA0LjQ1IDI3LjU1IDQgMjcgNEMyNi40NSA0IDI2IDQuNDUgMjYgNVYxMUMyNiAxMS41NSAyNi40NSAxMiAyNyAxMlpNMjIgMTZIMjBWMThIMjJWMTZaTTI4IDE2SDI2VjE4SDI4VjE2Wk0yNCA4SDEyVjEwSDI0VjhaTTEwIDE2SDhWMThIMTBWMTZaTTEwIDIwSDhWMjJIMTBW''@;'; put 'put ''MjBaTTEwIDI0SDhWMjZIMTBWMjRaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDMwVjEwSDMyVjMwSDRWMTBINlY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUg''@;'; put 'put ''MzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWOS44MUMzNCA5LjM0IDMzLjgzIDguODggMzMuNSA4LjU0Wk0xNCAyNkgxNlYyNEgxNFYyNlpNMTYgMjBI''@;'; put 'put ''MTRWMjJIMTZWMjBaTTE2IDE2SDE0VjE4SDE2VjE2Wk05IDEyQzkuNTUgMTIgMTAgMTEuNTUgMTAgMTFWNUMxMCA0LjQ1IDkuNTUgNCA5IDRDOC40NSA0IDggNC40NSA4IDVWMTFDOCAxMS41NSA4LjQ1IDEyIDkgMTJaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42''@;'; put 'put ''NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEy''@;'; put 'put ''LjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIx''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0zMiAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44''@;'; put 'put ''MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODggMi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2VjEwSDRWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjAuNzU5NCA4TDE5LjU1OTQgMTBIMTJWOEgyMC43NTk0''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAyMlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGgg''@;'; put 'put ''ZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIvPjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJI''@;'; put 'put ''MTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsb3V0bGluZUJhZGdlZDonPHBh''@;'; put 'put ''dGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+PHBhdGggZD0iTTIzLjI4OTkgOEMyMy40NTk0IDguNTY5NjMgMjMuNjk5''@;'; put 'put ''NSA5LjEwODg3IDI0IDkuNjA3NTlWMTBIMTJWOEgyMy4yODk5WiIvPjxwYXRoIGQ9Ik0zNCAxMS43NDUzQzMzLjM5NiAxMi4xNjY2IDMyLjcyMjQgMTIuNDk1MSAzMiAxMi43MTAxVjMwSDRWMTBINlY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5''@;'; put 'put ''LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEuNzQ1M1oiLz48cGF0aCBkPSJNMjAgMjBI''@;'; put 'put ''MjJWMjJIMjBWMjBaIi8+PHBhdGggZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgy''@;'; put 'put ''NloiLz48cGF0aCBkPSJNOCAxNkgxMFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''NCAxNkgxNlYxOEgxNFYxNloiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjcgMTJDMjcuNTUgMTIgMjggMTEu''@;'; put 'put ''NTUgMjggMTFWNUMyOCA0LjQ1IDI3LjU1IDQgMjcgNEMyNi40NSA0IDI2IDQuNDUgMjYgNVYxMUMyNiAxMS41NSAyNi40NSAxMiAyNyAxMlpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMjkuMlYxMUMyOS4yIDEyLjIxIDI4LjIxIDEzLjIgMjcgMTMuMkMyNS43OSAx''@;'; put 'put ''My4yIDI0LjggMTIuMjEgMjQuOCAxMVY4SDExLjJWMTFDMTEuMiAxMi4yMSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAz''@;'; put 'put ''MS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWOS44MUMzNCA5LjM0IDMzLjgzIDguODggMzMuNSA4LjU0Wk0xMC4xIDI2LjFINy45VjIz''@;'; put 'put ''LjlIMTAuMVYyNi4xWk0xMC4xIDIyLjFINy45VjE5LjlIMTAuMVYyMi4xWk0xMC4xIDE4LjFINy45VjE1LjlIMTAuMVYxOC4xWk0xNi4xIDI2LjFIMTMuOVYyMy45SDE2LjFWMjYuMVpNMTYuMSAyMi4xSDEzLjlWMTkuOUgxNi4xVjIyLjFaTTE2LjEgMTguMUgxMy45VjE1LjlIMTYuMVYxOC4x''@;'; put 'put ''Wk0yMi4xIDI2LjFIMTkuOVYyMy45SDIyLjFWMjYuMVpNMjIuMSAyMi4xSDE5LjlWMTkuOUgyMi4xVjIyLjFaTTIyLjEgMTguMUgxOS45VjE1LjlIMjIuMVYxOC4xWk0yOC4xIDI2LjFIMjUuOVYyMy45SDI4LjFWMjYuMVpNMjguMSAyMi4xSDI1LjlWMTkuOUgyOC4xVjIyLjFaTTI4LjEgMTgu''@;'; put 'put ''MUgyNS45VjE1LjlIMjguMVYxOC4xWk05IDEyQzkuNTUgMTIgMTAgMTEuNTUgMTAgMTFWNUMxMCA0LjQ1IDkuNTUgNCA5IDRDOC40NSA0IDggNC40NSA4IDVWMTFDOCAxMS41NSA4LjQ1IDEyIDkgMTJaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIy''@;'; put 'put ''MiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3''@;'; put 'put ''NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBm''@;'; put 'put ''aWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIwLjc1OTQgOEwxOS41MzYyIDEwLjAzODdDMTguODcwMyAxMS4wNDIzIDE4LjgyMDQgMTIuMzM0MiAxOS40MjA2IDEzLjM4OTNDMjAuMDIzMyAxNC40NDg5IDIxLjE1NzcgMTUuMDYwNCAyMi4zMzk1IDE1LjAzNjdI''@;'; put 'put ''MzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAuNjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMySDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEu''@;'; put 'put ''MTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDggMy43NSA4SDYuOFYxMUM2LjggMTIuMjEgNy43OSAxMy4yIDkgMTMuMkMxMC4yMSAxMy4yIDExLjIgMTIuMjEgMTEuMiAxMVY4SDIwLjc1OTRaTTcuOSAyMy45VjI2LjFIMTAu''@;'; put 'put ''MVYyMy45SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYxOS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5''@;'; put 'put ''LjkgMjYuMUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgyNS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4''@;'; put 'put ''LjFIMjguMVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMwIDExQzMyLjc2MTQg''@;'; put 'put ''MTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNCAxMS43NDUzQzMy''@;'; put 'put ''Ljg2NjIgMTIuNTM2MiAzMS40ODcyIDEzIDMwIDEzQzI5LjQwNjMgMTMgMjguODI5OSAxMi45MjYxIDI4LjI3OTQgMTIuNzg3QzI3LjkxODMgMTMuMDQ2NyAyNy40NzYyIDEzLjIgMjcgMTMuMkMyNS43OSAxMy4yIDI0LjggMTIuMjEgMjQuOCAxMVYxMC42ODYyQzI0LjExMjYgOS45MjM5MyAy''@;'; put 'put ''My41OTA0IDkuMDA5NyAyMy4yODk5IDhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMx''@;'; put 'put ''LjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUzWk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFI''@;'; put 'put ''MTAuMVYxOS45SDcuOVpNNy45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYu''@;'; put 'put ''MVpNMTkuOSAyMi4xSDIyLjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPid9XSxQT2U9WyJmb2xkZXItb3BlbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMy4yNiAxM0MzMy44NCAxMi45OSAz''@;'; put 'put ''NC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0MzIDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMg''@;'; put 'put ''NSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI5LjM5QzMwLjQ5IDkgMzEuMzkgOS45IDMxLjM5IDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZDNy45MiAxNC42NiA3LjkyIDE0LjU3IDcuOTIgMTQuNTJDOC4zMiAx''@;'; put 'put ''My42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2Wk01LjkgMjlIMjguOTRMMzIuODggMTQuOTVIMTAuMTZDMTAuMDEgMTQuOTggOS44NyAxNS4wNyA5Ljc4IDE1LjE5TDUuOSAyOVoiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIyMjQgMTEuMTE1''@;'; put 'put ''OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3NSAxMS45OTQ5''@;'; put 'put ''IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUgMS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMC4xMDU4IDEx''@;'; put 'put ''SDE0LjkxMDJDMTQuNTkwMiAxMSAxNC4yOTAyIDEwLjg1IDE0LjEwMDIgMTAuNTlMMTEuNDkwMiA3SDUuMDAwMjRWMjVMNy45MjAyNCAxNC42NlYxNC41MkM4LjMyMDI0IDEzLjYzIDkuMTkwMjQgMTMuMDQgMTAuMTcwMiAxM0gyMC4yMzI3QzIwLjI4NjEgMTMuMTMyNiAyMC4zNDg4IDEzLjI2''@;'; put 'put ''MjcgMjAuNDIwOCAxMy4zODkzQzIwLjg4MTUgMTQuMTk5MSAyMS42NTI3IDE0Ljc0NzIgMjIuNTE4MyAxNC45NUgxMC4xNjAyQzEwLjAxMDIgMTQuOTggOS44NzAyNCAxNS4wNyA5Ljc4MDI0IDE1LjE5TDUuOTAwMjQgMjlIMjguOTQwMkwzMi44NTU5IDE1LjAzNjdIMzQuNjYzOUMzNC43NjM2''@;'; put 'put ''IDE1LjAzODcgMzQuODYzIDE1LjAzNjIgMzQuOTYxNyAxNS4wMjkyQzM0Ljk1MDMgMTUuMDc5OCAzNC45MzY1IDE1LjEzMDEgMzQuOTIwMiAxNS4xOEwzMC43MzAyIDMwLjI4QzMwLjYwMDIgMzAuNzIgMzAuMTkwMiAzMS4wMiAyOS43MzAyIDMxSDQuNDEwMjRDMy42NjAyNCAzMS4wMiAzLjAz''@;'; put 'put ''MDI0IDMwLjQ0IDMuMDAwMjQgMjkuNjlWN0MzLjAwMDI0IDUuOSAzLjkwMDI0IDUgNS4wMDAyNCA1SDExLjQ5MDJDMTIuMTMwMiA1IDEyLjczMDIgNS4zIDEzLjExMDIgNS44MkwxNS40MjAyIDlIMjEuMTU5N0wyMC41MzY0IDEwLjAzODdDMjAuMzM3OCAxMC4zMzgxIDIwLjE5MzkgMTAuNjYz''@;'; put 'put ''MiAyMC4xMDU4IDExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMxIDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGgg''@;'; put 'put ''ZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNi4xMDEgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUgMTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NlYxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZDMzMuODQg''@;'; put 'put ''MTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQuNjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5''@;'; put 'put ''QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyNC42NzM2QzI1LjAyOTcgOS43NDk2IDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFaTTI4Ljk0IDI5SDUuOUw5Ljc4IDE1LjE5QzkuODcgMTUuMDcgMTAuMDEgMTQuOTggMTAuMTYgMTQuOTVIMzIuODhMMjguOTQgMjlaIi8+''@;'; put 'put ''Jyxzb2xpZDonPHBhdGggZD0iTTM0LjcwNTggMTMuNzRDMzQuMzc0NCAxMy4yNjQzIDMzLjgyMjMgMTIuOTg2IDMzLjIzNzkgMTNIMTAuMjU4M0M5LjI2OTUyIDEzLjA0MTQgOC4zODg1OCAxMy42MjkzIDcuOTgwNiAxNC41MkM3Ljk3NzI5IDE0LjU2NjYgNy45NzcyOSAxNC42MTM0IDcuOTgw''@;'; put 'put ''NiAxNC42Nkw1LjAyNDYzIDI1VjcuMDAwMDFIMTEuNTk0NkwxNC4yMzY3IDEwLjU5QzE0LjQyNzkgMTAuODQ4NCAxNC43MzI3IDExLjAwMDggMTUuMDU2NyAxMUgzMS4zNDQ5QzMxLjM0NDkgOS44OTU0NCAzMC40Mzg0IDkuMDAwMDEgMjkuMzIwMyA5LjAwMDAxSDE1LjU3M0wxMy4yMzQ1IDUu''@;'; put 'put ''ODIwMDFDMTIuODUyMiA1LjMwMzE4IDEyLjI0MjYgNC45OTgzNSAxMS41OTQ2IDUuMDAwMDFINS4wMjQ2M0MzLjkwNjQ2IDUuMDAwMDEgMyA1Ljg5NTQ0IDMgNy4wMDAwMVYyOS42OUMzLjAzMjg5IDMwLjQzODkgMy42Njg5MSAzMS4wMjI2IDQuNDI3MzcgMzFIMjkuNjY0NEMzMC4xMjkzIDMx''@;'; put 'put ''LjAxODMgMzAuNTQ2OSAzMC43MjEzIDMwLjY3NjggMzAuMjhMMzQuOTE4NCAxNS4xOEMzNS4wNzg4IDE0LjY5MzUgMzUuMDAwMSAxNC4xNjEgMzQuNzA1OCAxMy43NFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAx''@;'; put 'put ''MS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkxIDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDEx''@;'; put 'put ''LjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAxLjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMjMyNSAxM0MyMC4yODU4IDEz''@;'; put 'put ''LjEzMjYgMjAuMzQ4NSAxMy4yNjI3IDIwLjQyMDYgMTMuMzg5M0MyMS4wMjMzIDE0LjQ0ODkgMjIuMTU3NyAxNS4wNjA0IDIzLjMzOTUgMTUuMDM2N0gzNC42NjM3QzM0Ljc2MjkgMTUuMDM4NyAzNC44NjE4IDE1LjAzNjIgMzQuOTYwMSAxNS4wMjkzQzM0Ljk0ODcgMTUuMDc5OSAzNC45MzQ4''@;'; put 'put ''IDE1LjEzMDIgMzQuOTE4NCAxNS4xOEwzMC42NzY4IDMwLjI4QzMwLjU0NjkgMzAuNzIxMyAzMC4xMjkzIDMxLjAxODMgMjkuNjY0NCAzMUg0LjQyNzM3QzMuNjY4OTEgMzEuMDIyNiAzLjAzMjg5IDMwLjQzODkgMyAyOS42OVY3LjAwMDAxQzMgNS44OTU0NCAzLjkwNjQ2IDUuMDAwMDEgNS4w''@;'; put 'put ''MjQ2MyA1LjAwMDAxSDExLjU5NDZDMTIuMjQyNiA0Ljk5ODM1IDEyLjg1MjIgNS4zMDMxOCAxMy4yMzQ1IDUuODIwMDFMMTUuNTczIDkuMDAwMDFIMjEuMTU5NEwyMC41MzYyIDEwLjAzODdDMjAuMzM3NSAxMC4zMzgxIDIwLjE5MzcgMTAuNjYzMiAyMC4xMDU2IDExSDE1LjA1NjdDMTQuNzMy''@;'; put 'put ''NyAxMS4wMDA4IDE0LjQyNzkgMTAuODQ4NCAxNC4yMzY3IDEwLjU5TDExLjU5NDYgNy4wMDAwMUg1LjAyNDYzVjI1TDcuOTgwNiAxNC42NkM3Ljk3NzI5IDE0LjYxMzQgNy45NzcyOSAxNC41NjY2IDcuOTgwNiAxNC41MkM4LjM4ODU4IDEzLjYyOTMgOS4yNjk1MiAxMy4wNDE0IDEwLjI1ODMg''@;'; put 'put ''MTNIMjAuMjMyNVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4NiAxMSAzMSAxMVoiLz48cGF0aCBkPSJN''@;'; put 'put ''MjQuNjczNiA5LjAwMDAxQzI1LjAyOTcgOS43NDk2MSAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExSDE1LjA1NjdDMTQuNzMyNyAxMS4wMDA4IDE0LjQyNzkgMTAuODQ4NCAxNC4yMzY3IDEwLjU5TDExLjU5NDYgNy4wMDAwMUg1LjAyNDYzVjI1TDcuOTgwNiAxNC42NkM3Ljk3NzI5IDE0LjYx''@;'; put 'put ''MzQgNy45NzcyOSAxNC41NjY2IDcuOTgwNiAxNC41MkM4LjM4ODU4IDEzLjYyOTMgOS4yNjk1MiAxMy4wNDE0IDEwLjI1ODMgMTNIMzMuMjM3OUMzMy44MjIzIDEyLjk4NiAzNC4zNzQ0IDEzLjI2NDMgMzQuNzA1OCAxMy43NEMzNS4wMDAxIDE0LjE2MSAzNS4wNzg4IDE0LjY5MzUgMzQuOTE4''@;'; put 'put ''NCAxNS4xOEwzMC42NzY4IDMwLjI4QzMwLjU0NjkgMzAuNzIxMyAzMC4xMjkzIDMxLjAxODMgMjkuNjY0NCAzMUg0LjQyNzM3QzMuNjY4OTEgMzEuMDIyNiAzLjAzMjg5IDMwLjQzODkgMyAyOS42OVY3LjAwMDAxQzMgNS44OTU0NCAzLjkwNjQ2IDUuMDAwMDEgNS4wMjQ2MyA1LjAwMDAxSDEx''@;'; put 'put ''LjU5NDZDMTIuMjQyNiA0Ljk5ODM1IDEyLjg1MjIgNS4zMDMxOCAxMy4yMzQ1IDUuODIwMDFMMTUuNTczIDkuMDAwMDFIMjQuNjczNloiLz4nfV0sRk9lPVsibWludXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjYgMTdIMTBDOS40NDc3MiAxNyA5IDE3LjQ0NzcgOSAxOEM5IDE4LjU1MjMgOS40''@;'; put 'put ''NDc3MiAxOSAxMCAxOUgyNkMyNi41NTIzIDE5IDI3IDE4LjU1MjMgMjcgMThDMjcgMTcuNDQ3NyAyNi41NTIzIDE3IDI2IDE3WiIvPid9XSxIT2U9WyJwbHVzIix7b3V0bGluZTonPHBhdGggZD0iTTI5Ljk5OTkgMTdIMTguOTk5OVY2QzE4Ljk5OTkgNS40NDc3MiAxOC41NTIyIDUgMTcuOTk5''@;'; put 'put ''OSA1QzE3LjQ0NzYgNSAxNi45OTk5IDUuNDQ3NzIgMTYuOTk5OSA2VjE3SDUuOTk5OTJDNS40NDc2NCAxNyA0Ljk5OTkyIDE3LjQ0NzcgNC45OTk5MiAxOEM0Ljk4OTk0IDE4LjI2MyA1LjA5NDI3IDE4LjUxNzQgNS4yODYgMTguNjk3NkM1LjQ3NzczIDE4Ljg3NzggNS43MzgwOSAxOC45NjYy''@;'; put 'put ''IDUuOTk5OTIgMTguOTRIMTYuOTk5OVYzMEMxNi45OTk5IDMwLjU1MjMgMTcuNDQ3NiAzMSAxNy45OTk5IDMxQzE4LjU1MjIgMzEgMTguOTk5OSAzMC41NTIzIDE4Ljk5OTkgMzBWMTlIMjkuOTk5OUMzMC41NTIyIDE5IDMwLjk5OTkgMTguNTUyMyAzMC45OTk5IDE4QzMwLjk5OTkgMTcuNDQ3''@;'; put 'put ''NyAzMC41NTIyIDE3IDI5Ljk5OTkgMTdaIi8+J31dLE5PZT1bImV5ZS1oaWRlIix7b3V0bGluZTonPHBhdGggZD0iTTI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3''@;'; put 'put ''Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAwMSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxTDE3LjIwMjkgMTMuMDgwMUMxNy40NjI4IDEzLjA0MDEgMTcuNzIyNyAxMy4wMDAxIDE3Ljk5MjYgMTMuMDAwMUMyMC43NTEzIDEzLjAwMDEgMjIuOTkwMiAxNS4yNDAxIDIyLjk5MDIg''@;'; put 'put ''MTguMDAwMUMyMi45OTAyIDE4LjI3MDEgMjIuOTUwMiAxOC41MzAxIDIyLjkxMDMgMTguNzkwMUwyNC41NDk1IDIwLjQzMDFaTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2''@;'; put 'put ''MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAxIDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAw''@;'; put 'put ''MjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4wMDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2QzMuMzE5NDQgMS45MDAwNiAy''@;'; put 'put ''LjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMuNDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAwNyAxNy44NjAxIDEuOTcwMDcg''@;'; put 'put ''MTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAyNy4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAx''@;'; put 'put ''IDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFMMy43MDkyNiAyLjI5MDA2Wk0xMy44MzQ1IDE1LjI1MDFMMjAuNzQxMyAyMi4xNjAxQzE5Ljk1''@;'; put 'put ''MTYgMjIuNjgwMSAxOS4wMTIxIDIzLjAwMDEgMTcuOTkyNiAyMy4wMDAxQzE1LjIzMzkgMjMuMDAwMSAxMi45OTQ5IDIwLjc2MDEgMTIuOTk0OSAxOC4wMDAxQzEyLjk5NDkgMTYuOTgwMSAxMy4zMDQ4IDE2LjA0MDEgMTMuODM0NSAxNS4yNTAxWk0xNy45OTI2IDI3LjAwMDFDMTEuOTk1NCAy''@;'; put 'put ''Ny4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45OTU4IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTggMjEuODYw''@;'; put 'put ''MSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAyNy4wMDAxIDE3Ljk5MjYgMjcuMDAwMVoiLz4nLHNvbGlkOic8cGF0aCBk''@;'; put 'put ''PSJNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45''@;'; put 'put ''MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42''@;'; put 'put ''MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAz''@;'; put 'put ''LjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAw''@;'; put 'put ''MUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4''@;'; put 'put ''NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTE3Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEu''@;'; put 'put ''MzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFM''@;'; put 'put ''MjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAxWk0xNS41NjM3IDExLjQ0MDFMMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44''@;'; put 'put ''NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFaIi8+J31dLFZPZT1bImV5ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAuOTk4NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5''@;'; put 'put ''ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMTcuOTk3NiAyM0MxNS4yMzggMjMgMTIuOTk4MyAyMC43NiAxMi45OTgzIDE4QzEyLjk5ODMgMTUuMjQgMTUu''@;'; put 'put ''MjM4IDEzIDE3Ljk5NzYgMTNDMjAuNzU3MSAxMyAyMi45OTY4IDE1LjI0IDIyLjk5NjggMThDMjIuOTk2OCAyMC43NiAyMC43NTcxIDIzIDE3Ljk5NzYgMjNaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIu''@;'; put 'put ''MDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEg''@;'; put 'put ''MTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+Jyxz''@;'; put 'put ''b2xpZDonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2''@;'; put 'put ''IDExWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAyLjA4MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAyOSAxNy45OTc2''@;'; put 'put ''IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40OCA0LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYg''@;'; put 'put ''OUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPid9XSxCT2U9WyJlbGxpcHNpcy12ZXJ0aWNhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQuOUMyMS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAx''@;'; put 'put ''OC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEu''@;'; put 'put ''MTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAxOC4xMDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEw''@;'; put 'put ''MDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAxIDMyLjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0''@;'; put 'put ''WiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcg''@;'; put 'put ''MiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQg''@;'; put 'put ''MTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIg''@;'; put 'put ''MjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0IDE4LjEwMDEgMzRaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTgg''@;'; put 'put ''MjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLGpPZT1bInZpZXctY29sdW1ucyIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEgNUg1QzMuODk1NDMgNSAzIDUuODk1NDMgMyA3VjI5QzMgMzAuMTA0NiAz''@;'; put 'put ''Ljg5NTQzIDMxIDUgMzFIMzFDMzIuMTA0NiAzMSAzMyAzMC4xMDQ2IDMzIDI5VjdDMzMgNS44OTU0MyAzMi4xMDQ2IDUgMzEgNVpNMTMgMjlINVY3SDEzVjI5Wk0xNSAyOUgyM1Y3SDE1VjI5WiIvPid9XSx6T2U9WyJhcnJvdyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy42NTA0IDE1LjYzNDFM''@;'; put 'put ''MTcuOTk1MSA2TDguMzM5ODEgMTUuNjM0MUM4LjAyODY5IDE1Ljg3MTcgNy44ODQzMiAxNi4yNjk1IDcuOTcwMyAxNi42NTIxQzguMDU2MjkgMTcuMDM0NyA4LjM1Njg1IDE3LjMzMTkgOC43Mzk1MiAxNy40MTI3QzkuMTIyMTkgMTcuNDkzNSA5LjUxNjY3IDE3LjM0MyA5Ljc0OTEyIDE3LjAy''@;'; put 'put ''NzZMMTYuOTk1NiA5LjgxOTU1VjI4Ljk5NzVDMTYuOTk1NiAyOS41NTEyIDE3LjQ0MzEgMzAgMTcuOTk1MSAzMEMxOC41NDcxIDMwIDE4Ljk5NDYgMjkuNTUxMiAxOC45OTQ2IDI4Ljk5NzVWOS44MTk1NUwyNi4yNDExIDE3LjAyNzZDMjYuNjMzIDE3LjQxNzkgMjcuMjY2MiAxNy40MTU3IDI3''@;'; put 'put ''LjY1NTQgMTcuMDIyNkMyOC4wNDQ1IDE2LjYyOTUgMjguMDQyMyAxNS45OTQzIDI3LjY1MDQgMTUuNjA0VjE1LjYzNDFaIi8+J31dLFVPZT1bInN0ZXAtZm9yd2FyZC0yIix7b3V0bGluZTonPHBhdGggZD0iTTcuMDg4OTMgNi41MjAwM0M2LjkyNjQzIDYuNjc2NDUgNi43OTczNCA2Ljg2MzE1''@;'; put 'put ''IDYuNzA5MjEgNy4wNjkyMUM2LjYyMTA4IDcuMjc1MjYgNi41NzU2OCA3LjQ5NjUyIDYuNTc1NjggNy43MjAwM0M2LjU3NTY4IDcuOTQzNTMgNi42MjEwOCA4LjE2NDc5IDYuNzA5MjEgOC4zNzA4NUM2Ljc5NzM0IDguNTc2OSA2LjkyNjQzIDguNzYzNjEgNy4wODg5MyA4LjkyMDAzTDE2LjY4''@;'; put 'put ''NzIgMThMNy4xMjk2NCAyNy4wOEM2LjgyOTc3IDI3LjM5OTEgNi42NjU1NCAyNy44MTg4IDYuNjcwNjUgMjguMjUzQzYuNjc1NzYgMjguNjg3MiA2Ljg0OTgyIDI5LjEwMzEgNy4xNTcxMiAyOS40MTUyQzcuNDY0NDIgMjkuNzI3NCA3Ljg4MTY2IDI5LjkxMjEgOC4zMjMyMyAyOS45MzE2Qzgu''@;'; put 'put ''NzY0OCAyOS45NTExIDkuMTk3MjEgMjkuODAzOCA5LjUzMTc2IDI5LjUyTDIxLjY2NDUgMThMOS41MzE3NiA2LjQ3MDAzQzkuMzY4NTEgNi4zMTQ4MiA5LjE3NTU5IDYuMTkyOTMgOC45NjQxMyA2LjExMTM3QzguNzUyNjcgNi4wMjk4MiA4LjUyNjg2IDUuOTkwMjIgOC4yOTk3NCA1Ljk5NDg3''@;'; put 'put ''QzguMDcyNjIgNS45OTk1MiA3Ljg0ODY5IDYuMDQ4MzIgNy42NDA4NyA2LjEzODQ2QzcuNDMzMDUgNi4yMjg1OSA3LjI0NTQ2IDYuMzU4MjggNy4wODg5MyA2LjUyMDAzWiIvPjxwYXRoIGQ9Ik0yNi44NDUzIDVDMjYuMzg2NCA1IDI1Ljk0NjMgNS4xNzkxMSAyNS42MjE4IDUuNDk3OTJDMjUu''@;'; put 'put ''Mjk3MyA1LjgxNjczIDI1LjExNSA2LjI0OTEzIDI1LjExNSA2LjdWMjkuM0MyNS4xMTUgMjkuNzUwOSAyNS4yOTczIDMwLjE4MzMgMjUuNjIxOCAzMC41MDIxQzI1Ljk0NjMgMzAuODIwOSAyNi4zODY0IDMxIDI2Ljg0NTMgMzFDMjcuMzA0MyAzMSAyNy43NDQ0IDMwLjgyMDkgMjguMDY4OSAz''@;'; put 'put ''MC41MDIxQzI4LjM5MzQgMzAuMTgzMyAyOC41NzU3IDI5Ljc1MDkgMjguNTc1NyAyOS4zVjYuN0MyOC41NzU3IDYuMjQ5MTMgMjguMzkzNCA1LjgxNjczIDI4LjA2ODkgNS40OTc5MkMyNy43NDQ0IDUuMTc5MTEgMjcuMzA0MyA1IDI2Ljg0NTMgNVoiLz4nfV0sWk9lPVsiZmlsdGVyLWdyaWQt''@;'; put 'put ''Y2lyY2xlIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAz''@;'; put 'put ''Mi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQg''@;'; put 'put ''MjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0xNyAyNi44NkwxNSAyNS44NlYyMC42OEw4LjQyIDE0QzguMTU2NzkgMTMuNzMzIDguMDA2NCAxMy4zNzQ5IDggMTNWMTJDOCAxMS40NDc3IDguNDQ3NzIgMTEgOSAxMUgyN0MyNy41NTIzIDExIDI4IDExLjQ0''@;'; put 'put ''NzcgMjggMTJWMTNDMjcuOTkzNiAxMy4zNzQ5IDI3Ljg0MzIgMTMuNzMzIDI3LjU4IDE0TDIxIDIwLjY4VjI5TDE5IDI4TDE5LjAzIDIwLjI3QzE5LjAzMTEgMjAuMDA3NyAxOS4xMzUzIDE5Ljc1NjMgMTkuMzIgMTkuNTdMMjUuNzkgMTNIMTAuMjNMMTYuNzEgMTkuNTdDMTYuODk0NyAxOS43''@;'; put 'put ''NTYzIDE2Ljk5ODkgMjAuMDA3NyAxNyAyMC4yN1YyNi44NloiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQg''@;'; put 'put ''MzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAz''@;'; put 'put ''MiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTggMTIuMTJWMTFIMjcuOThWMTIuMTRDMjcuOTc4MSAxMi4yNzE5IDI3LjkyNDIgMTIuMzk3NyAyNy44MyAxMi40OUwyMC43MSAxOS43NEMyMC42MDgxIDE5''@;'; put 'put ''LjgyOTkgMjAuNTQzOCAxOS45NTQ4IDIwLjUzIDIwLjA5VjI4LjQ4QzIwLjUzMDMgMjguNjUyOCAyMC40NDE1IDI4LjgxMzQgMjAuMjk1IDI4LjkwNUMyMC4xNDg1IDI4Ljk5NjYgMTkuOTY1MSAyOS4wMDYgMTkuODEgMjguOTNMMTUuODYgMjcuNTJDMTUuNjg4MyAyNy40MzU5IDE1LjU3OTYg''@;'; put 'put ''MjcuMjYxMiAxNS41OCAyNy4wN1YyMC4xOEMxNS41NzgxIDIwLjA0ODEgMTUuNTI0MiAxOS45MjIzIDE1LjQzIDE5LjgzTDguMTUgMTIuNDdDOC4wNTU3OSAxMi4zNzc3IDguMDAxODggMTIuMjUxOSA4IDEyLjEyWiIvPid9XSxXT2U9WyJmaWx0ZXItZ3JpZCIse291dGxpbmU6JzxwYXRoIGQ9''@;'; put 'put ''Ik0xNSAyMy44NkwxNyAyNC44NlYxOC4yN0MxNi45OTg5IDE4LjAwNzcgMTYuODk0NyAxNy43NTYzIDE2LjcxIDE3LjU3TDEwLjIzIDExSDI1Ljc5TDE5LjMyIDE3LjU3QzE5LjEzNTMgMTcuNzU2MyAxOS4wMzExIDE4LjAwNzcgMTkuMDMgMTguMjdMMTkgMjZMMjEgMjdWMTguNjhMMjcuNTgg''@;'; put 'put ''MTJDMjcuODQzMiAxMS43MzMgMjcuOTkzNiAxMS4zNzQ5IDI4IDExVjEwQzI4IDkuNDQ3NzIgMjcuNTUyMyA5IDI3IDlIOUM4LjQ0NzcyIDkgOCA5LjQ0NzcyIDggMTBWMTFDOC4wMDY0IDExLjM3NDkgOC4xNTY3OSAxMS43MzMgOC40MiAxMkwxNSAxOC42OFYyMy44NloiLz4nLHNvbGlkOic8''@;'; put 'put ''cGF0aCBkPSJNOCA5VjEwLjEyMTJDOC4wMDE4OCAxMC4yNTMyIDguMDU1ODUgMTAuMzc5MSA4LjE1MDE1IDEwLjQ3MTZMMTUuNDM3NCAxNy44MzkzQzE1LjUzMTcgMTcuOTMxNyAxNS41ODU3IDE4LjA1NzcgMTUuNTg3NiAxOC4xODk3VjI1LjA4N0MxNS41ODcyIDI1LjI3ODQgMTUuNjk2IDI1''@;'; put 'put ''LjQ1MzIgMTUuODY3OSAyNS41Mzc1TDE5LjgyMTggMjYuOTQ4OUMxOS45NzcxIDI3LjAyNSAyMC4xNjA3IDI3LjAxNTYgMjAuMzA3MyAyNi45MjM5QzIwLjQ1MzkgMjYuODMyMyAyMC41NDI5IDI2LjY3MTQgMjAuNTQyNSAyNi40OTg1VjE4LjA5OTZDMjAuNTU2NCAxNy45NjQzIDIwLjYyMDcg''@;'; put 'put ''MTcuODM5MiAyMC43MjI3IDE3Ljc0OTJMMjcuODQ5OCAxMC40OTE2QzI3Ljk0NDIgMTAuMzk5MiAyNy45OTgxIDEwLjI3MzIgMjggMTAuMTQxMlY5SDhaIi8+J31dLHNZPVsiZXJyb3Itc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMjIuNjFDMTcuNDQ3NyAyMi42MSAxNyAyMi4x''@;'; put 'put ''NjIzIDE3IDIxLjYxVjkuNjFDMTcgOS4wNTc3MiAxNy40NDc3IDguNjEgMTggOC42MUMxOC41NTIzIDguNjEgMTkgOS4wNTc3MiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2MjMgMTguNTUyMyAyMi42MSAxOCAyMi42MVoiLz48cGF0aCBkPSJNMTkuMzMgMjYuMDZDMTkuMzMgMjYuNzk0NSAxOC43''@;'; put 'put ''MzQ1IDI3LjM5IDE4IDI3LjM5QzE3LjI2NTUgMjcuMzkgMTYuNjcgMjYuNzk0NSAxNi42NyAyNi4wNkMxNi42NyAyNS4zMjU1IDE3LjI2NTUgMjQuNzMgMTggMjQuNzNDMTguNzM0NSAyNC43MyAxOS4zMyAyNS4zMjU1IDE5LjMzIDI2LjA2WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIg''@;'; put 'put ''Y2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyMi4yNDM1IDM0IDI2LjMxMzEgMzIuMzE0MyAyOS4zMTM3IDI5LjMxMzdDMzIuMzE0MyAyNi4zMTMxIDM0IDIyLjI0MzUgMzQgMThDMzQgOS4xNjM0NCAyNi44MzY2IDIgMTggMkM5LjE2MzQ0''@;'; put 'put ''IDIgMiA5LjE2MzQ0IDIgMThaTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIg''@;'; put 'put ''MThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNyA5LjYxQzE3IDkuMDYgMTcuNDUgOC42MSAxOCA4LjYxQzE4LjU1IDguNjEgMTkgOS4wNiAxOSA5''@;'; put 'put ''LjYxVjIxLjYxQzE5IDIyLjE2IDE4LjU1IDIyLjYxIDE4IDIyLjYxQzE3LjQ1IDIyLjYxIDE3IDIyLjE2IDE3IDIxLjYxVjkuNjFaTTE4IDI3LjI2QzE3LjM0IDI3LjI2IDE2LjggMjYuNzIgMTYuOCAyNi4wNkMxNi44IDI1LjQgMTcuMzQgMjQuODYgMTggMjQuODZDMTguNjYgMjQuODYgMTku''@;'; put 'put ''MiAyNS40IDE5LjIgMjYuMDZDMTkuMiAyNi43MiAxOC42NiAyNy4yNiAxOCAyNy4yNloiLz4nfV0sWU9lPVsiaGVscCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDkuMTYzNDQgOS4xNjM0NCAyIDE4IDJDMjIuMjQz''@;'; put 'put ''NSAyIDI2LjMxMzEgMy42ODU3MSAyOS4zMTM3IDYuNjg2MjlDMzIuMzE0MyA5LjY4Njg3IDM0IDEzLjc1NjUgMzQgMThDMzQgMjYuODM2NiAyNi44MzY2IDM0IDE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThaTTQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzIxLjcxMyAzMiAy''@;'; put 'put ''NS4yNzQgMzAuNTI1IDI3Ljg5OTUgMjcuODk5NUMzMC41MjUgMjUuMjc0IDMyIDIxLjcxMyAzMiAxOEMzMiAxMC4yNjggMjUuNzMyIDQgMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4Wk0xOC4yOSA4LjkyQzE2LjA5NjEgOC44ODM3NCAxMy45OTk4IDkuODI1NiAxMi41NyAxMS40OUMxMi4z''@;'; put 'put ''NzE4IDExLjY3MzcgMTIuMjU2MyAxMS45Mjk4IDEyLjI1IDEyLjJDMTIuMjQ5OSAxMi40NDkzIDEyLjM1MDkgMTIuNjg4IDEyLjUzIDEyLjg2MTRDMTIuNzA5MSAxMy4wMzQ4IDEyLjk1MDggMTMuMTI4MSAxMy4yIDEzLjEyQzEzLjQ2NDIgMTMuMTEzNSAxMy43MTY4IDEzLjAxMDMgMTMuOTEg''@;'; put 'put ''MTIuODNDMTQuOTkxNiAxMS41NjI1IDE2LjU3MzcgMTAuODMxNyAxOC4yNCAxMC44M0MyMC42IDEwLjgzIDIyLjA3IDEyLjM1IDIyLjA3IDE0LjI0VjE0LjI5QzIyLjA3IDE2LjUgMjAuMzEgMTcuNzMgMTcuNTMgMTcuOTRDMTcuMzAyMyAxNy45NDg4IDE3LjA4OTIgMTguMDU0MiAxNi45NDQx''@;'; put 'put ''IDE4LjIyOTlDMTYuNzk5IDE4LjQwNTYgMTYuNzM1NyAxOC42MzQ4IDE2Ljc3IDE4Ljg2VjIxLjYxQzE2LjgyMTUgMjIuMTIyOSAxNy4yNTQ1IDIyLjUxMjYgMTcuNzcgMjIuNTFIMTcuODhDMTguMzkyOSAyMi40NTg1IDE4Ljc4MjYgMjIuMDI1NSAxOC43OCAyMS41MVYxOS40NUMyMS43OCAx''@;'; put 'put ''OS4wMyAyNC4yMSAxNy40NSAyNC4yMSAxNC4xN1YxNC4xMkMyNC4xOCAxMS4xMiAyMS44NCA4LjkyIDE4LjI5IDguOTJaTTE5LjAzIDI2LjJDMTkuMDMgMjYuODkwNCAxOC40NzA0IDI3LjQ1IDE3Ljc4IDI3LjQ1QzE3LjA4OTYgMjcuNDUgMTYuNTMgMjYuODkwNCAxNi41MyAyNi4yQzE2LjUz''@;'; put 'put ''IDI1LjUwOTYgMTcuMDg5NiAyNC45NSAxNy43OCAyNC45NUMxOC40NzA0IDI0Ljk1IDE5LjAzIDI1LjUwOTYgMTkuMDMgMjYuMloiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzIuMzk1OSAxMy4wNDYyIDMxLjc1NTkgMTMuMjQwNiAzMS4wOTg2IDEzLjM0''@;'; put 'put ''NjdDMzMuMjYzNiAxOS41MTA4IDMwLjg3NjMgMjYuMzUyOCAyNS4zNDY1IDI5LjgzMkMxOS44MTY3IDMzLjMxMTIgMTIuNjE1NCAzMi41MDIgNy45OTU2OSAyNy44ODIyQzMuMzc1OTcgMjMuMjYyNSAyLjU2Njc0IDE2LjA2MTMgNi4wNDU5MiAxMC41MzE1QzkuNTI1MDkgNS4wMDE2MiAxNi4z''@;'; put 'put ''NjcxIDIuNjE0MjkgMjIuNTMxMiA0Ljc3OTM4QzIyLjYzNzUgNC4xMjIwNSAyMi44MzE4IDMuNDgyMDQgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3Njcg''@;'; put 'put ''MjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaIi8+PHBhdGggZD0iTTE3LjcxOTYgMjcuMzUzM0MxOC40MDczIDI3LjM1MzMgMTguOTY0OCAyNi43OTU4IDE4''@;'; put 'put ''Ljk2NDggMjYuMTA4MUMxOC45NjQ4IDI1LjQyMDMgMTguNDA3MyAyNC44NjI4IDE3LjcxOTYgMjQuODYyOEMxNy4wMzE4IDI0Ljg2MjggMTYuNDc0MyAyNS40MjAzIDE2LjQ3NDMgMjYuMTA4MUMxNi40NzQzIDI2Ljc5NTggMTcuMDMxOCAyNy4zNTMzIDE3LjcxOTYgMjcuMzUzM1oiLz48cGF0''@;'; put 'put ''aCBkPSJNMjQuMDk1MyAxNC4wNzM5VjE0LjEyMzhDMjQuMDk1MyAxNy4zOTEzIDIxLjY3NDUgMTguOTM1NCAxOC43MjU3IDE5LjM4MzdWMjEuNDM1OUMxOC43MjgzIDIxLjk0OTQgMTguMzQwMSAyMi4zODA3IDE3LjgyOTEgMjIuNDMyMUgxNy43MTk2QzE3LjIwNiAyMi40MzQ3IDE2Ljc3NDcg''@;'; put 'put ''MjIuMDQ2NSAxNi43MjMzIDIxLjUzNTVWMTguNzk1OUMxNi42ODkxIDE4LjU3MTYgMTYuNzUyMiAxOC4zNDMyIDE2Ljg5NjggMTguMTY4MkMxNy4wNDEzIDE3Ljk5MzIgMTcuMjUzNyAxNy44ODgyIDE3LjQ4MDUgMTcuODc5NEMyMC4yNDk5IDE3LjY3MDIgMjIuMDAzMiAxNi40NDQ5IDIyLjAw''@;'; put 'put ''MzIgMTQuMjQzM1YxNC4xOTM1QzIyLjAwMzIgMTIuMzEwNyAyMC41Mzg4IDEwLjc5NjQgMTguMTg3OCAxMC43OTY0QzE2LjUyNzggMTAuNzk4MiAxNC45NTE3IDExLjUyNjEgMTMuODc0MiAxMi43ODg4QzEzLjY4MTcgMTIuOTY4NCAxMy40MzAxIDEzLjA3MTIgMTMuMTY2OSAxMy4wNzc3QzEy''@;'; put 'put ''LjkxODcgMTMuMDg1OCAxMi42Nzc4IDEyLjk5MjkgMTIuNDk5NCAxMi44MjAxQzEyLjMyMSAxMi42NDczIDEyLjIyMDQgMTIuNDA5NiAxMi4yMjA1IDEyLjE2MTJDMTIuMjI2OCAxMS44OTIxIDEyLjM0MTggMTEuNjM2OSAxMi41MzkzIDExLjQ1MzlDMTMuOTYzNyA5Ljc5NTg1IDE2LjA1MiA4''@;'; put 'put ''Ljg1NzU3IDE4LjIzNzYgOC44OTM2OUMyMS43NjQxIDguODkzNjkgMjQuMDk1MyAxMS4wODUzIDI0LjA5NTMgMTQuMDczOVoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAy''@;'; put 'put ''NSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQg''@;'; put 'put ''MjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xNy43OCAyNy44NUMxNy4xMTI2IDI3Ljg1IDE2LjUxMSAyNy40NDggMTYuMjU1NiAyNi44MzE0QzE2LjAwMDIgMjYuMjE0OSAxNi4x''@;'; put 'put ''NDE0IDI1LjUwNTIgMTYuNjEzMyAyNS4wMzMzQzE3LjA4NTIgMjQuNTYxNCAxNy43OTQ5IDI0LjQyMDIgMTguNDExNCAyNC42NzU2QzE5LjAyOCAyNC45MzEgMTkuNDMgMjUuNTMyNiAxOS40MyAyNi4yQzE5LjQzIDI3LjExMTMgMTguNjkxMyAyNy44NSAxNy43OCAyNy44NVpNMTkuMTUgMjEu''@;'; put 'put ''NTFWMTkuNzlDMjIuNjEgMTkuMiAyNC41OCAxNy4xNiAyNC41OCAxNC4xMUMyNC41OCAxMC44MSAyMiA4LjUxIDE4LjMgOC41MUMxNi4wMDA1IDguNDc0NTIgMTMuODAzMyA5LjQ1OTU2IDEyLjMgMTEuMkMxMi4wMzA0IDExLjQ2MzYgMTEuODc1OSAxMS44MjMgMTEuODcgMTIuMkMxMS44ODMg''@;'; put 'put ''MTIuNzUxNiAxMi4yMjggMTMuMjQwNiAxMi43NDMyIDEzLjQzOEMxMy4yNTg1IDEzLjYzNTMgMTMuODQxOSAxMy41MDE4IDE0LjIyIDEzLjFDMTUuMjA5MiAxMS45MDY5IDE2LjY3MDQgMTEuMjA1NiAxOC4yMiAxMS4xOEMyMC4yNCAxMS4xOCAyMS42NSAxMi40MiAyMS42NSAxNC4yNUMyMS42''@;'; put 'put ''NSAxNi44IDE5LjA0IDE3LjM4IDE3LjQ3IDE3LjVDMTcuMTQ0OCAxNy41MTc1IDE2Ljg0MDkgMTcuNjY3NCAxNi42MjkzIDE3LjkxNUMxNi40MTc2IDE4LjE2MjUgMTYuMzE2NyAxOC40ODYgMTYuMzUgMTguODFWMjEuNTdDMTYuMzYwNCAyMS45MjcyIDE2LjUxMzEgMjIuMjY1NSAxNi43NzQx''@;'; put 'put ''IDIyLjUwOTZDMTcuMDM1MSAyMi43NTM3IDE3LjM4MjkgMjIuODgzNSAxNy43NCAyMi44N0gxNy44NUMxOC41NzUzIDIyLjgzMjkgMTkuMTQ1NiAyMi4yMzYyIDE5LjE1IDIxLjUxWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2Rk''@;'; put 'put ''IiBkPSJNMzMuMDAxMyAxMi43Njg5QzMwLjE2NTkgMTQuMDY4OCAyNi44MjEyIDEzLjQ2NzkgMjQuNjE1NiAxMS4yNjIzQzIyLjQxMDEgOS4wNTY3NCAyMS44MDkxIDUuNzEyIDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMw''@;'; put 'put ''LjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5Wk0xNy43MTk2IDI3LjcxMkMxNy4wNTQ3''@;'; put 'put ''IDI3LjcxMiAxNi40NTU0IDI3LjMxMTUgMTYuMjAwOSAyNi42OTczQzE1Ljk0NjUgMjYuMDgzIDE2LjA4NzIgMjUuMzc2IDE2LjU1NzMgMjQuOTA1OUMxNy4wMjc0IDI0LjQzNTggMTcuNzM0NCAyNC4yOTUyIDE4LjM0ODYgMjQuNTQ5NkMxOC45NjI4IDI0LjgwNCAxOS4zNjMzIDI1LjQwMzQg''@;'; put 'put ''MTkuMzYzMyAyNi4wNjgyQzE5LjM3NCAyNi41MTEgMTkuMjA1NiAyNi45Mzk0IDE4Ljg5NjIgMjcuMjU2NEMxOC41ODY3IDI3LjU3MzMgMTguMTYyNSAyNy43NTE5IDE3LjcxOTYgMjcuNzUxOFYyNy43MTJaTTE5LjA4NDQgMjEuMzk2VjE5LjcyMjRDMjIuNTMxMiAxOS4xMzQ3IDI0LjQ5Mzcg''@;'; put 'put ''MTcuMTAyNCAyNC40OTM3IDE0LjAyNDFDMjQuNDkzNyAxMC43MzY3IDIxLjkyMzUgOC40NDU0IDE4LjIzNzYgOC40NDU0QzE1Ljk0NjggOC40MTAwNiAxMy43NTggOS4zOTEzNiAxMi4yNjA0IDExLjEyNTJDMTEuOTkxOCAxMS4zODc4IDExLjgzNzkgMTEuNzQ1OCAxMS44MzIgMTIuMTIxNEMx''@;'; put 'put ''MS44NDUgMTIuNjcwOSAxMi4xODg2IDEzLjE1ODEgMTIuNzAxOSAxMy4zNTQ3QzEzLjIxNTIgMTMuNTUxMiAxMy43OTY0IDEzLjQxODIgMTQuMTczMSAxMy4wMThDMTUuMTU4NiAxMS44Mjk0IDE2LjYxNDEgMTEuMTMwNyAxOC4xNTc5IDExLjEwNTNDMjAuMTcwMiAxMS4xMDUzIDIxLjU3NDkg''@;'; put 'put ''MTIuMzQwNiAyMS41NzQ5IDE0LjE2MzZDMjEuNTc0OSAxNi43MDM5IDE4Ljk3NDggMTcuMjgxNyAxNy40MTA3IDE3LjQwMTNDMTcuMDg2NyAxNy40MTg2IDE2Ljc4NCAxNy41NjgxIDE2LjU3MzIgMTcuODE0N0MxNi4zNjIzIDE4LjA2MTMgMTYuMjYxOCAxOC4zODM1IDE2LjI5NSAxOC43MDYz''@;'; put 'put ''VjIxLjQ1NThDMTYuMzA1NCAyMS44MTE3IDE2LjQ1NzUgMjIuMTQ4NyAxNi43MTc1IDIyLjM5MTlDMTYuOTc3NSAyMi42MzUxIDE3LjMyMzkgMjIuNzY0MyAxNy42Nzk3IDIyLjc1MDlIMTcuNzg5M0MxOC41MTE4IDIyLjcxMzkgMTkuMDggMjIuMTE5NSAxOS4wODQ0IDIxLjM5NloiLz48cGF0''@;'; put 'put ''aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sR09lPVsiaW5mby1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9''@;'; put 'put ''Ik0yIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThaTTQgMThDNCAxMC4yNyAxMC4yNyA0IDE4IDRDMjUuNzMgNCAz''@;'; put 'put ''MiAxMC4yNyAzMiAxOEMzMiAyNS43MyAyNS43MyAzMiAxOCAzMkMxMC4yNyAzMiA0IDI1LjczIDQgMThaTTIxIDI1SDE5VjE0SDE2QzE1LjQ1IDE0IDE1IDE0LjQ1IDE1IDE1QzE1IDE1LjU1IDE1LjQ1IDE2IDE2IDE2SDE3VjI1SDE1QzE0LjQ1IDI1IDE0IDI1LjQ1IDE0IDI2QzE0IDI2LjU1''@;'; put 'put ''IDE0LjQ1IDI3IDE1IDI3SDIxQzIxLjU1IDI3IDIyIDI2LjU1IDIyIDI2QzIyIDI1LjQ1IDIxLjU1IDI1IDIxIDI1Wk0xOS4zNyAxMC40NUMxOS4zNyAxMS4yMiAxOC43NCAxMS44NSAxNy45NyAxMS44NUMxNy4yIDExLjg1IDE2LjU3IDExLjIyIDE2LjU3IDEwLjQ1QzE2LjU3IDkuNjggMTcu''@;'; put 'put ''MiA5LjA1IDE3Ljk3IDkuMDVDMTguNzQgOS4wNSAxOS4zNyA5LjY4IDE5LjM3IDEwLjQ1WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEg''@;'; put 'put ''MzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3Ljk3IDguODVDMTguODUgOC44NSAxOS41NyA5LjU3IDE5LjU3IDEwLjQ1QzE5LjU3IDExLjMzIDE4Ljg1IDEyLjA1IDE3Ljk3IDEyLjA1QzE3LjA5IDEyLjA1IDE2LjM3IDExLjMzIDE2LjM3IDEwLjQ1QzE2LjM3IDkuNTcg''@;'; put 'put ''MTcuMDkgOC44NSAxNy45NyA4Ljg1Wk0yMSAyNy4ySDE1QzE0LjM0IDI3LjIgMTMuOCAyNi42NiAxMy44IDI2QzEzLjggMjUuMzQgMTQuMzQgMjQuOCAxNSAyNC44SDE2LjhWMTYuMkgxNkMxNS4zNCAxNi4yIDE0LjggMTUuNjYgMTQuOCAxNUMxNC44IDE0LjM0IDE1LjM0IDEzLjggMTYgMTMu''@;'; put 'put ''OEgxOS4yVjI0LjhIMjFDMjEuNjYgMjQuOCAyMi4yIDI1LjM0IDIyLjIgMjZDMjIuMiAyNi42NiAyMS42NiAyNy4yIDIxIDI3LjJaIi8+J31dLCRPZT1bIm5vdGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIi8+PHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdM''@;'; put 'put ''MzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLDYuNCwyOS4zLDIu''@;'; put 'put ''N2ExLjcxLDEuNzEsMCwwLDAtMi4zNiwwTDIzLjY1LDZINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMS43NmwzLTNBMS42NywxLjY3LDAsMCwwLDMzLDYuNFpNMTguODMsMjAuMTNsLTQuMTkuOTMsMS00LjE1LDkuNTUtOS41NywzLjIzLDMuMjNa''@;'; put 'put ''TTI5LjUsOS40MywyNi4yNyw2LjJsMS44NS0xLjg1LDMuMjMsMy4yM1oiLz4nfV0sbFk9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2''@;'; put 'put ''LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjgg''@;'; put 'put ''MTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0yNi41OSAxMi4xQzI2Ljk4IDExLjcxMjMgMjcuNjEgMTEuNzEyMyAyOCAxMi4xQzI4LjE4OTMg''@;'; put 'put ''MTIuMjg3OCAyOC4yOTU4IDEyLjU0MzQgMjguMjk1OCAxMi44MUMyOC4yOTU4IDEzLjA3NjYgMjguMTg5MyAxMy4zMzIyIDI4IDEzLjUyTDE1LjQ5IDI2TDggMTguNTNDNy42MTg5MiAxOC4xMTg1IDcuNjQzNTUgMTcuNDc2MSA4LjA1NSAxNy4wOTVDOC40NjY0NSAxNi43MTM5IDkuMTA4OTIg''@;'; put 'put ''MTYuNzM4NSA5LjQ5IDE3LjE1TDE1LjQ5IDIzLjE1TDI2LjU5IDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI5LjMxIDYuNjlDMjYuMzEgMy42OSAyMi4yNCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyNi44NCAzNCAzNCAyNi44NCAzNCAxOEMz''@;'; put 'put ''NCAxMy43NiAzMi4zMSA5LjY5IDI5LjMxIDYuNjlaTTI4LjE0IDEzLjY0TDE1LjYzIDI2LjEyTDE1LjQ5IDI2LjI2TDE1LjM1IDI2LjEyTDcuODUgMTguNjRDNy4zOSAxOC4xNSA3LjQyIDE3LjM4IDcuOTIgMTYuOTJDOC4xNSAxNi43MSA4LjQ0IDE2LjYgOC43NSAxNi42QzkuMDkgMTYuNiA5''@;'; put 'put ''LjQxIDE2Ljc0IDkuNjQgMTYuOThMMTUuNSAyMi44NEwyNi40NiAxMS45M0MyNi42OSAxMS43IDI2Ljk5IDExLjU4IDI3LjMxIDExLjU4QzI3LjYzIDExLjU4IDI3LjkzIDExLjcgMjguMTYgMTEuOTNDMjguMzkgMTIuMTUgMjguNTEgMTIuNDYgMjguNTEgMTIuNzhDMjguNTEgMTMuMSAyOC4z''@;'; put 'put ''OCAxMy40MSAyOC4xNiAxMy42M0wyOC4xNCAxMy42NFoiLz4nfV0sS09lPVsid2FybmluZy1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4wMDAxIDIyLjk5MzJDMTguNTUwMSAyMi45OTMyIDE5LjAwMDEgMjIuNTQzNCAxOS4wMDAxIDIxLjk5MzZWMTAuOTk3NUMxOS4wMDAxIDEw''@;'; put 'put ''LjQ0NzcgMTguNTUwMSA5Ljk5Nzg2IDE4LjAwMDEgOS45OTc4NkMxNy40NTAxIDkuOTk3ODYgMTcuMDAwMSAxMC40NDc3IDE3LjAwMDEgMTAuOTk3NVYyMS45OTM2QzE3LjAwMDEgMjIuNTQzNCAxNy40NTAxIDIyLjk5MzIgMTguMDAwMSAyMi45OTMyWk0zMy41NjAxIDI3LjIxMTdMMjAuNzgw''@;'; put 'put ''MSA1LjU3OTQ0QzIwLjIwMDEgNC41ODk3OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44MDAxIDQuNTg5NzkgMTUuMjIwMSA1LjU3OTQ0TDIuNDQwMSAyNy4yMTE3QzEuODUwMSAyOC4yMTE0IDEuODUwMSAyOS40MDA5IDIuNDMwMSAzMC40MDA2QzMuMDEwMSAzMS40MDAyIDQu''@;'; put 'put ''MDYwMSAzMiA1LjIyMDEgMzJIMzAuNzcwMUMzMS45NDAxIDMyIDMyLjk4MDEgMzEuNDAwMiAzMy41NjAxIDMwLjQwMDZDMzQuMTQwMSAyOS40MDA5IDM0LjE0MDEgMjguMjExNCAzMy41NTAxIDI3LjIxMTdIMzMuNTYwMVpNMzEuODEwMSAyOS40MDA5QzMxLjcxMDEgMjkuNTgwOSAzMS40MDAx''@;'; put 'put ''IDI5Ljk5MDcgMzAuNzgwMSAyOS45OTA3SDUuMjMwMUM0LjYxMDEgMjkuOTkwNyA0LjMwMDEgMjkuNTgwOSA0LjIwMDEgMjkuNDAwOUM0LjEwMDEgMjkuMjIxIDMuODkwMSAyOC43NTEyIDQuMjAwMSAyOC4yMzEzTDE2Ljk4MDEgNi41ODkwOEMxNy4yOTAxIDYuMDY5MjYgMTcuODAwMSA2LjAw''@;'; put 'put ''OTI4IDE4LjAwMDEgNi4wMDkyOEMxOC4yMDAxIDYuMDA5MjggMTguNzEwMSA2LjA2OTI2IDE5LjAyMDEgNi41ODkwOEwzMS43OTAxIDI4LjIyMTNDMzIuMTAwMSAyOC43NTEyIDMxLjkwMDEgMjkuMjIxIDMxLjc5MDEgMjkuMzkwOUwzMS44MTAxIDI5LjQwMDlaTTE4LjAxMDEgMjUuMDAyNUMx''@;'; put 'put ''Ny4yODAxIDI1LjAwMjUgMTYuNjgwMSAyNS42MDIzIDE2LjY4MDEgMjYuMzMyQzE2LjY4MDEgMjcuMDYxOCAxNy4yODAxIDI3LjY2MTUgMTguMDEwMSAyNy42NjE1QzE4Ljc0MDEgMjcuNjYxNSAxOS4zNDAxIDI3LjA2MTggMTkuMzQwMSAyNi4zMzJDMTkuMzQwMSAyNS42MDIzIDE4Ljc0MDEg''@;'; put 'put ''MjUuMDAyNSAxOC4wMTAxIDI1LjAwMjVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLjU2MDEgMjcuMjJMMjAuNzgwMSA1LjU4QzIwLjIwMDEgNC41OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44MDAxIDQuNTkgMTUuMjIwMSA1LjU4TDIuNDQwMDYgMjcuMjJDMS44NTAwNiAy''@;'; put 'put ''OC4yMiAxLjg1MDA2IDI5LjQxIDIuNDQwMDYgMzAuNDFDMy4wMjAwNiAzMS40MSA0LjA3MDA2IDMyLjAxIDUuMjMwMDYgMzIuMDFIMzAuNzgwMUMzMS45NTAxIDMyLjAxIDMyLjk5MDEgMzEuNDEgMzMuNTcwMSAzMC40MUMzNC4xNTAxIDI5LjQxIDM0LjE1MDEgMjguMjIgMzMuNTYwMSAyNy4y''@;'; put 'put ''MlpNMTYuOTAwMSAxMUMxNi45MDAxIDEwLjM5IDE3LjM5MDEgOS45IDE4LjAwMDEgOS45QzE4LjYxMDEgOS45IDE5LjEwMDEgMTAuMzkgMTkuMTAwMSAxMVYyMkMxOS4xMDAxIDIyLjYxIDE4LjYxMDEgMjMuMSAxOC4wMDAxIDIzLjFDMTcuMzkwMSAyMy4xIDE2LjkwMDEgMjIuNjEgMTYuOTAw''@;'; put 'put ''MSAyMlYxMVpNMTguMDAwMSAyNy43NkMxNy4yMTAxIDI3Ljc2IDE2LjU3MDEgMjcuMTIgMTYuNTcwMSAyNi4zM0MxNi41NzAxIDI1LjU0IDE3LjIxMDEgMjQuOSAxOC4wMDAxIDI0LjlDMTguNzkwMSAyNC45IDE5LjQzMDEgMjUuNTQgMTkuNDMwMSAyNi4zM0MxOS40MzAxIDI3LjEyIDE4Ljc5''@;'; put 'put ''MDEgMjcuNzYgMTguMDAwMSAyNy43NloiLz4nfV0scU9lPVsiY2lyY2xlIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1Ljcz''@;'; put 'put ''MiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaTTYgMThDNiAyNC42Mjc0IDExLjM3MjYgMzAgMTggMzBDMjEuMTgyNiAzMCAyNC4yMzQ4IDI4LjczNTcgMjYuNDg1MyAyNi40ODUzQzI4LjczNTcgMjQuMjM0OCAzMCAyMS4xODI2IDMwIDE4QzMwIDExLjM3MjYgMjQu''@;'; put 'put ''NjI3NCA2IDE4IDZDMTEuMzcyNiA2IDYgMTEuMzcyNiA2IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzI1LjczMiAzMiAzMiAyNS43MzIgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0IDE4IDRaIi8+''@;'; put 'put ''J31dLFhPZT1bImRvdC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTFDMTkuMzg0NSAxMSAyMC43Mzc5IDExLjQxMDUgMjEuODg5IDEyLjE3OTdDMjMuMDQwMSAxMi45NDg5IDIzLjkzNzQgMTQuMDQyMSAyNC40NjcyIDE1LjMyMTJDMjQuOTk3IDE2LjYwMDMgMjUuMTM1NiAxOC4w''@;'; put 'put ''MDc4IDI0Ljg2NTUgMTkuMzY1NkMyNC41OTU0IDIwLjcyMzUgMjMuOTI4NyAyMS45NzA4IDIyLjk0OTggMjIuOTQ5OEMyMS45NzA4IDIzLjkyODcgMjAuNzIzNSAyNC41OTU0IDE5LjM2NTYgMjQuODY1NUMxOC4wMDc4IDI1LjEzNTYgMTYuNjAwMyAyNC45OTcgMTUuMzIxMiAyNC40NjcyQzE0''@;'; put 'put ''LjA0MjEgMjMuOTM3NCAxMi45NDg5IDIzLjA0MDEgMTIuMTc5NyAyMS44ODlDMTEuNDEwNSAyMC43Mzc5IDExIDE5LjM4NDUgMTEgMThDMTEgMTYuMTQzNSAxMS43Mzc1IDE0LjM2MyAxMy4wNTAzIDEzLjA1MDNDMTQuMzYzIDExLjczNzUgMTYuMTQzNSAxMSAxOCAxMVoiLz48cGF0aCBkPSJN''@;'; put 'put ''MTggMzRDMTQuODM1NSAzNCAxMS43NDIxIDMzLjA2MTYgOS4xMTA4OCAzMS4zMDM1QzYuNDc5NyAyOS41NDU0IDQuNDI4OTQgMjcuMDQ2NiAzLjIxNzkzIDI0LjEyMjlDMi4wMDY5MyAyMS4xOTkzIDEuNjkwMDggMTcuOTgyMyAyLjMwNzQ0IDE0Ljg3ODZDMi45MjQ4MSAxMS43NzQ5IDQuNDQ4''@;'; put 'put ''NjYgOC45MjM5NCA2LjY4NjMgNi42ODYzQzguOTIzOTQgNC40NDg2NiAxMS43NzQ5IDIuOTI0ODEgMTQuODc4NiAyLjMwNzQ0QzE3Ljk4MjMgMS42OTAwOCAyMS4xOTkzIDIuMDA2OTMgMjQuMTIyOSAzLjIxNzkzQzI3LjA0NjYgNC40Mjg5NCAyOS41NDU0IDYuNDc5NyAzMS4zMDM1IDkuMTEw''@;'; put 'put ''ODhDMzMuMDYxNiAxMS43NDIxIDM0IDE0LjgzNTUgMzQgMThDMzQgMjIuMjQzNSAzMi4zMTQzIDI2LjMxMzEgMjkuMzEzNyAyOS4zMTM3QzI2LjMxMzEgMzIuMzE0MyAyMi4yNDM1IDM0IDE4IDM0Wk0xOCA0LjAwMDAxQzE1LjIzMTEgNC4wMDAwMSAxMi41MjQzIDQuODIxMDkgMTAuMjIyIDYu''@;'; put 'put ''MzU5NDNDNy45MTk3NCA3Ljg5Nzc3IDYuMTI1MzIgMTAuMDg0MyA1LjA2NTY5IDEyLjY0MjRDNC4wMDYwNyAxNS4yMDA2IDMuNzI4ODIgMTguMDE1NSA0LjI2OTAxIDIwLjczMTNDNC44MDkyMSAyMy40NDcgNi4xNDI1OCAyNS45NDE2IDguMTAwNTEgMjcuODk5NUMxMC4wNTg0IDI5Ljg1NzQg''@;'; put 'put ''MTIuNTUzIDMxLjE5MDggMTUuMjY4NyAzMS43MzFDMTcuOTg0NSAzMi4yNzEyIDIwLjc5OTQgMzEuOTkzOSAyMy4zNTc2IDMwLjkzNDNDMjUuOTE1NyAyOS44NzQ3IDI4LjEwMjIgMjguMDgwMyAyOS42NDA2IDI1Ljc3OEMzMS4xNzg5IDIzLjQ3NTcgMzIgMjAuNzY4OSAzMiAxOEMzMiAxNC4y''@;'; put 'put ''ODcgMzAuNTI1IDEwLjcyNiAyNy44OTk1IDguMTAwNTFDMjUuMjc0IDUuNDc1IDIxLjcxMyA0LjAwMDAxIDE4IDQuMDAwMDFaIi8+J31dO2Z1bmN0aW9uIEpPZShjLGwpe3JldHVybiBjPT09bH1jbGFzcyBlUGUgZXh0ZW5kcyBxdHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCl9c2NoZWR1bGUo''@;'; put 'put ''bCxhPTApe3JldHVybiB0aGlzfX1jb25zdCB3TD17c2V0SW50ZXJ2YWwoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXdMO3JldHVybiBkPy5zZXRJbnRlcnZhbD9kLnNldEludGVydmFsKGMsbCwuLi5hKTpzZXRJbnRlcnZhbChjLGwsLi4uYSl9LGNsZWFySW50ZXJ2YWwoYyl7Y29uc3R7''@;'; put 'put ''ZGVsZWdhdGU6bH09d0w7cmV0dXJuKGw/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHVZIGV4dGVuZHMgZVBle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hLHRoaXMucGVuZGlu''@;'; put 'put ''Zz0hMX1zY2hlZHVsZShsLGE9MCl7dmFyIGQ7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT1sO2NvbnN0IGg9dGhpcy5pZCxmPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1oJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGYsaCxhKSksdGhpcy5wZW5kaW5n''@;'; put 'put ''PSEwLHRoaXMuZGVsYXk9YSx0aGlzLmlkPW51bGwhPT0oZD10aGlzLmlkKSYmdm9pZCAwIT09ZD9kOnRoaXMucmVxdWVzdEFzeW5jSWQoZix0aGlzLmlkLGEpLHRoaXN9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIHdMLnNldEludGVydmFsKGwuZmx1c2guYmluZChsLHRoaXMpLGQp''@;'; put 'put ''fXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe2lmKG51bGwhPWQmJnRoaXMuZGVsYXk9PT1kJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gYTtudWxsIT1hJiZ3TC5jbGVhckludGVydmFsKGEpfWV4ZWN1dGUobCxhKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcg''@;'; put 'put ''YSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2NvbnN0IGQ9dGhpcy5fZXhlY3V0ZShsLGEpO2lmKGQpcmV0dXJuIGQ7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxu''@;'; put 'put ''dWxsKSl9X2V4ZWN1dGUobCxhKXtsZXQgaCxkPSExO3RyeXt0aGlzLndvcmsobCl9Y2F0Y2goZil7ZD0hMCxoPWZ8fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGQpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxofXVuc3Vic2NyaWJlKCl7aWYo''@;'; put 'put ''IXRoaXMuY2xvc2VkKXtjb25zdHtpZDpsLHNjaGVkdWxlcjphfT10aGlzLHthY3Rpb25zOmR9PWE7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsdXQoZCx0aGlzKSxudWxsIT1sJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGEs''@;'; put 'put ''bCxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBkWT17bm93OigpPT4oZFkuZGVsZWdhdGV8fERhdGUpLm5vdygpLGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgeXh7Y29uc3RydWN0b3IobCxhPXl4Lm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9y''@;'; put 'put ''PWwsdGhpcy5ub3c9YX1zY2hlZHVsZShsLGE9MCxkKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLGwpLnNjaGVkdWxlKGQsYSl9fXl4Lm5vdz1kWS5ub3c7Y2xhc3MgaFkgZXh0ZW5kcyB5eHtjb25zdHJ1Y3RvcihsLGE9eXgubm93KXtzdXBlcihsLGEpLHRoaXMu''@;'; put 'put ''YWN0aW9ucz1bXSx0aGlzLl9hY3RpdmU9ITF9Zmx1c2gobCl7Y29uc3R7YWN0aW9uczphfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSlyZXR1cm4gdm9pZCBhLnB1c2gobCk7bGV0IGQ7dGhpcy5fYWN0aXZlPSEwO2Rve2lmKGQ9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUo''@;'; put 'put ''bD1hLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxkKXtmb3IoO2w9YS5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgZH19fWNvbnN0IENMPW5ldyBoWSh1WSksdFBlPUNMO2Z1bmN0aW9uIGZtKGMsbD1DTCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9bnVsbCxmPW51bGwsdj1u''@;'; put 'put ''dWxsO2NvbnN0IE09KCk9PntpZihoKXtoLnVuc3Vic2NyaWJlKCksaD1udWxsO2NvbnN0IEc9ZjtmPW51bGwsZC5uZXh0KEcpfX07ZnVuY3Rpb24gSSgpe2NvbnN0IEc9ditjLGllPWwubm93KCk7aWYoaWU8RylyZXR1cm4gaD10aGlzLnNjaGVkdWxlKHZvaWQgMCxHLWllKSx2b2lkIGQuYWRk''@;'; put 'put ''KGgpO00oKX1hLnN1YnNjcmliZShOaShkLEc9PntmPUcsdj1sLm5vdygpLGh8fChoPWwuc2NoZWR1bGUoSSxjKSxkLmFkZChoKSl9LCgpPT57TSgpLGQuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57Zj1oPW51bGx9KSl9KX1jb25zdCBuUGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVy''@;'; put 'put ''Il0sclBlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxpUGU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIHhkKGMsbCxhLGQpe2lmKCRlKGEpJiYoZD1hLGE9dm9pZCAwKSxkKXJldHVybiB4ZChjLGwsYSkucGlwZSh6WihkKSk7Y29uc3RbaCxmXT1mdW5jdGlvbiBz''@;'; put 'put ''UGUoYyl7cmV0dXJuICRlKGMuYWRkRXZlbnRMaXN0ZW5lcikmJiRlKGMucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KGMpP3JQZS5tYXAodj0+TT0+Y1t2XShsLE0sYSkpOmZ1bmN0aW9uIGFQZShjKXtyZXR1cm4gJGUoYy5hZGRMaXN0ZW5lcikmJiRlKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9uUGUu''@;'; put 'put ''bWFwKEQwZShjLGwpKTpmdW5jdGlvbiBvUGUoYyl7cmV0dXJuICRlKGMub24pJiYkZShjLm9mZil9KGMpP2lQZS5tYXAoRDBlKGMsbCkpOltdO2lmKCFoJiZCWihjKSlyZXR1cm4gTjAodj0+eGQodixsLGEpKShsMShjKSk7aWYoIWgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVu''@;'; put 'put ''dCB0YXJnZXQiKTtyZXR1cm4gbmV3IFh0KHY9Pntjb25zdCBNPSguLi5JKT0+di5uZXh0KDE8SS5sZW5ndGg/STpJWzBdKTtyZXR1cm4gaChNKSwoKT0+ZihNKX0pfWZ1bmN0aW9uIEQwZShjLGwpe3JldHVybiBhPT5kPT5jW2FdKGwsZCl9Y2xhc3MgYnggZXh0ZW5kcyBXbntjb25zdHJ1Y3Rv''@;'; put 'put ''cihsPTEvMCxhPTEvMCxkPWRZKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9bCx0aGlzLl93aW5kb3dUaW1lPWEsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9ZCx0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1hPT09''@;'; put 'put ''MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSxsKSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsYSl9bmV4dChsKXtjb25zdHtpc1N0b3BwZWQ6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpoLF90aW1lc3RhbXBQcm92aWRlcjpmLF93aW5kb3dUaW1lOnZ9PXRoaXM7''@;'; put 'put ''YXx8KGQucHVzaChsKSwhaCYmZC5wdXNoKGYubm93KCkrdikpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KGwpfV9zdWJzY3JpYmUobCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCBhPXRoaXMuX2lubmVyU3Vic2NyaWJlKGwpLHtfaW5maW5p''@;'; put 'put ''dGVUaW1lV2luZG93OmQsX2J1ZmZlcjpofT10aGlzLGY9aC5zbGljZSgpO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGgmJiFsLmNsb3NlZDt2Kz1kPzE6MilsLm5leHQoZlt2XSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMobCksYX1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZm''@;'; put 'put ''ZXJTaXplOmwsX3RpbWVzdGFtcFByb3ZpZGVyOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aH09dGhpcyxmPShoPzE6MikqbDtpZihsPDEvMCYmZjxkLmxlbmd0aCYmZC5zcGxpY2UoMCxkLmxlbmd0aC1mKSwhaCl7Y29uc3Qgdj1hLm5vdygpO2xldCBNPTA7Zm9yKGxldCBJPTE7''@;'; put 'put ''STxkLmxlbmd0aCYmZFtJXTw9djtJKz0yKU09STtNJiZkLnNwbGljZSgwLE0rMSl9fX1mdW5jdGlvbiBmWShjLGwsLi4uYSl7aWYoITA9PT1sKXJldHVybiB2b2lkIGMoKTtpZighMT09PWwpcmV0dXJuO2NvbnN0IGQ9bmV3IGh0KHtuZXh0OigpPT57ZC51bnN1YnNjcmliZSgpLGMoKX19KTty''@;'; put 'put ''ZXR1cm4gbDEobCguLi5hKSkuc3Vic2NyaWJlKGQpfWZ1bmN0aW9uIEkwZShjLGwsYSl7bGV0IGQsaD0hMTtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjPyh7YnVmZmVyU2l6ZTpkPTEvMCx3aW5kb3dUaW1lOmw9MS8wLHJlZkNvdW50Omg9ITEsc2NoZWR1bGVyOmF9PWMpOmQ9Yz8/MS8w''@;'; put 'put ''LGZ1bmN0aW9uIGxQZShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBXbikscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVybiBmPT57bGV0IHYsTSxJLEc9MCxpZT0hMSx1ZT0hMTtjb25zdCB5ZT0o''@;'; put 'put ''KT0+e00/LnVuc3Vic2NyaWJlKCksTT12b2lkIDB9LEVlPSgpPT57eWUoKSx2PUk9dm9pZCAwLGllPXVlPSExfSxqZT0oKT0+e2NvbnN0IHFlPXY7RWUoKSxxZT8udW5zdWJzY3JpYmUoKX07cmV0dXJuIFZpKChxZSxydCk9PntHKyssIXVlJiYhaWUmJnllKCk7Y29uc3QgcHQ9ST1JPz9sKCk7''@;'; put 'put ''cnQuYWRkKCgpPT57Ry0tLDA9PT1HJiYhdWUmJiFpZSYmKE09ZlkoamUsaCkpfSkscHQuc3Vic2NyaWJlKHJ0KSwhdiYmRz4wJiYodj1uZXcgaHQoe25leHQ6ZHQ9PnB0Lm5leHQoZHQpLGVycm9yOmR0PT57dWU9ITAseWUoKSxNPWZZKEVlLGEsZHQpLHB0LmVycm9yKGR0KX0sY29tcGxldGU6''@;'; put 'put ''KCk9PntpZT0hMCx5ZSgpLE09ZlkoRWUsZCkscHQuY29tcGxldGUoKX19KSxsMShxZSkuc3Vic2NyaWJlKHYpKX0pKGYpfX0oe2Nvbm5lY3RvcjooKT0+bmV3IGJ4KGQsbCxhKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86aH0pfWZ1bmN0''@;'; put 'put ''aW9uIF94KC4uLmMpe2NvbnN0IGw9ak0oYyksYT1mdW5jdGlvbiBYTWUoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGpaKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP2wxKGRbMF0pOmViKGEpKFl1KGQsbCkpOk0yfXZhciBBbz1mdW5j''@;'; put 'put ''dGlvbihjKXtyZXR1cm4gY1tjLlN0YXRlPTBdPSJTdGF0ZSIsY1tjLlRyYW5zaXRpb249MV09IlRyYW5zaXRpb24iLGNbYy5TZXF1ZW5jZT0yXT0iU2VxdWVuY2UiLGNbYy5Hcm91cD0zXT0iR3JvdXAiLGNbYy5BbmltYXRlPTRdPSJBbmltYXRlIixjW2MuS2V5ZnJhbWVzPTVdPSJLZXlmcmFt''@;'; put 'put ''ZXMiLGNbYy5TdHlsZT02XT0iU3R5bGUiLGNbYy5UcmlnZ2VyPTddPSJUcmlnZ2VyIixjW2MuUmVmZXJlbmNlPThdPSJSZWZlcmVuY2UiLGNbYy5BbmltYXRlQ2hpbGQ9OV09IkFuaW1hdGVDaGlsZCIsY1tjLkFuaW1hdGVSZWY9MTBdPSJBbmltYXRlUmVmIixjW2MuUXVlcnk9MTFdPSJRdWVy''@;'; put 'put ''eSIsY1tjLlN0YWdnZXI9MTJdPSJTdGFnZ2VyIixjfShBb3x8e30pO2NvbnN0IGlnPSIqIjtmdW5jdGlvbiBiaChjLGwpe3JldHVybnt0eXBlOkFvLlRyaWdnZXIsbmFtZTpjLGRlZmluaXRpb25zOmwsb3B0aW9uczp7fX19ZnVuY3Rpb24gTTAoYyxsPW51bGwpe3JldHVybnt0eXBlOkFvLkFu''@;'; put 'put ''aW1hdGUsc3R5bGVzOmwsdGltaW5nczpjfX1mdW5jdGlvbiB1cyhjKXtyZXR1cm57dHlwZTpBby5TdHlsZSxzdHlsZXM6YyxvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gU0woYyxsLGEpe3JldHVybnt0eXBlOkFvLlN0YXRlLG5hbWU6YyxzdHlsZXM6bCxvcHRpb25zOmF9fWZ1bmN0aW9uIHVQZShj''@;'; put 'put ''KXtyZXR1cm57dHlwZTpBby5LZXlmcmFtZXMsc3RlcHM6Y319ZnVuY3Rpb24gaXUoYyxsLGE9bnVsbCl7cmV0dXJue3R5cGU6QW8uVHJhbnNpdGlvbixleHByOmMsYW5pbWF0aW9uOmwsb3B0aW9uczphfX1jbGFzcyB3eHtjb25zdHJ1Y3RvcihsPTAsYT0wKXt0aGlzLl9vbkRvbmVGbnM9W10s''@;'; put 'put ''dGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9u''@;'; put 'put ''PTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT1sK2F9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydChsKXt0aGlzLl9vcmln''@;'; put 'put ''aW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmlu''@;'; put 'put ''aXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0''@;'; put 'put ''aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5z''@;'; put 'put ''PXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24obCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/bCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1l''@;'; put 'put ''P3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBSMGV7Y29uc3RydWN0b3IobCl7dGhpcy5f''@;'; put 'put ''b25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9bDts''@;'; put 'put ''ZXQgYT0wLGQ9MCxoPTA7Y29uc3QgZj10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWY/cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKHY9Pnt2Lm9uRG9uZSgoKT0+eysrYT09ZiYmdGhpcy5fb25GaW5pc2goKX0pLHYub25EZXN0cm95KCgp''@;'; put 'put ''PT57KytkPT1mJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLHYub25TdGFydCgoKT0+eysraD09ZiYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKCh2LE0pPT5NYXRoLm1heCh2LE0udG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5p''@;'; put 'put ''c2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5pbml0KCkpfW9uU3RhcnQobCl7dGhpcy5fb25TdGFydEZucy5wdXNoKGwpfV9vblN0YXJ0KCl7''@;'; put 'put ''dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZShsKXt0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9''@;'; put 'put ''aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGF1c2UoKSl9''@;'; put 'put ''cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVk''@;'; put 'put ''fHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9''@;'; put 'put ''PmwucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24obCl7Y29uc3QgYT1sKnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGQ9Pntjb25zdCBoPWQudG90YWxUaW1lP01hdGgubWluKDEsYS9k''@;'; put 'put ''LnRvdGFsVGltZSk6MTtkLnNldFBvc2l0aW9uKGgpfSl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMucGxheWVycy5yZWR1Y2UoKGEsZCk9Pm51bGw9PT1hfHxkLnRvdGFsVGltZT5hLnRvdGFsVGltZT9kOmEsbnVsbCk7cmV0dXJuIG51bGwhPWw/bC5nZXRQb3NpdGlvbigpOjB9YmVmb3Jl''@;'; put 'put ''RGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PntsLmJlZm9yZURlc3Ryb3kmJmwuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxl''@;'; put 'put ''bmd0aD0wfX1sZXQgZ1k7dHJ5e2dZPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7Z1k9ITF9bGV0IFN4LEN4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fcGxhdGZvcm1JZD1hLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/dGwo''@;'; put 'put ''dGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2ku''@;'; put 'put ''dGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhZ1kpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVz''@;'; put 'put ''dChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklS''@;'; put 'put ''RUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRo''@;'; put 'put ''aXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoaW8pKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBBYihjKXtyZXR1cm4gZnVuY3Rpb24gZ1BlKCl7aWYobnVsbD09U3gmJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PlN4PSEwfSkpfWZpbmFsbHl7U3g9U3h8fCExfXJldHVybiBTeH0oKT9jOiEhYy5jYXB0dXJlfXZhciBfcD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PUk1BTD0wXT0iTk9STUFMIixjW2MuTkVHQVRFRD0xXT0iTkVHQVRFRCIsY1tj''@;'; put 'put ''LklOVkVSVEVEPTJdPSJJTlZFUlRFRCIsY30oX3B8fHt9KTtsZXQgTUwsdTcsbVk7ZnVuY3Rpb24gTXgoKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIF9wLk5PUk1BTDtpZihudWxsPT1NTCl7Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk''@;'; put 'put ''aXYiKSxsPWMuc3R5bGU7Yy5kaXI9InJ0bCIsbC53aWR0aD0iMXB4IixsLm92ZXJmbG93PSJhdXRvIixsLnZpc2liaWxpdHk9ImhpZGRlbiIsbC5wb2ludGVyRXZlbnRzPSJub25lIixsLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxk''@;'; put 'put ''PWEuc3R5bGU7ZC53aWR0aD0iMnB4IixkLmhlaWdodD0iMXB4IixjLmFwcGVuZENoaWxkKGEpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksTUw9X3AuTk9STUFMLDA9PT1jLnNjcm9sbExlZnQmJihjLnNjcm9sbExlZnQ9MSxNTD0wPT09Yy5zY3JvbGxMZWZ0P19wLk5FR0FURUQ6X3Au''@;'; put 'put ''SU5WRVJURUQpLGMucmVtb3ZlKCl9cmV0dXJuIE1MfWZ1bmN0aW9uIE8wZShjKXtpZihmdW5jdGlvbiB2UGUoKXtpZihudWxsPT1tWSl7Y29uc3QgYz10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDttWT0hKCFjfHwhYy5jcmVhdGVTaGFkb3dSb290JiYhYy5hdHRhY2hT''@;'; put 'put ''aGFkb3cpfXJldHVybiBtWX0oKSl7Y29uc3QgbD1jLmdldFJvb3ROb2RlP2MuZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmbCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24geEwoYyl7cmV0''@;'; put 'put ''dXJuIGMuY29tcG9zZWRQYXRoP2MuY29tcG9zZWRQYXRoKClbMF06Yy50YXJnZXR9bGV0IGpQZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtPWF9aXNEaXNhYmxlZChhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGEpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBVUGUoYyl7cmV0dXJuISEoYy5vZmZzZXRXaWR0aHx8Yy5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldENsaWVudFJlY3RzJiZjLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oYSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoYSkudmlz''@;'; put 'put ''aWJpbGl0eX1pc1RhYmJhYmxlKGEpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7Y29uc3QgZD1mdW5jdGlvbiB6UGUoYyl7dHJ5e3JldHVybiBjLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uIFhQZShjKXtyZXR1cm4gYy5vd25lckRvY3Vt''@;'; put 'put ''ZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd30oYSkpO2lmKGQmJigtMT09PU4wZShkKXx8IXRoaXMuaXNWaXNpYmxlKGQpKSlyZXR1cm4hMTtsZXQgaD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZj1OMGUoYSk7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJjb250ZW50''@;'; put 'put ''ZWRpdGFibGUiKT8tMSE9PWY6ISgiaWZyYW1lIj09PWh8fCJvYmplY3QiPT09aHx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbiBLUGUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGE9ImlucHV0Ij09PWwmJmMudHlwZTtyZXR1''@;'; put 'put ''cm4idGV4dCI9PT1hfHwicGFzc3dvcmQiPT09YXx8InNlbGVjdCI9PT1sfHwidGV4dGFyZWEiPT09bH0oYSkpJiYoImF1ZGlvIj09PWg/ISFhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSYmLTEhPT1mOiJ2aWRlbyI9PT1oPy0xIT09ZiYmKG51bGwhPT1mfHx0aGlzLl9wbGF0Zm9ybS5GSVJF''@;'; put 'put ''Rk9YfHxhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSk6YS50YWJJbmRleD49MCl9aXNGb2N1c2FibGUoYSxkKXtyZXR1cm4gZnVuY3Rpb24gcVBlKGMpe3JldHVybiFmdW5jdGlvbiBXUGUoYyl7cmV0dXJuIGZ1bmN0aW9uIEdQZShjKXtyZXR1cm4iaW5wdXQiPT1jLm5vZGVOYW1lLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9KGMpJiYiaGlkZGVuIj09Yy50eXBlfShjKSYmKGZ1bmN0aW9uIFpQZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWx8fCJzZWxlY3QiPT09bHx8ImJ1dHRvbiI9PT1sfHwidGV4dGFyZWEiPT09bH0oYyl8fGZ1bmN0aW9uIFlQZShj''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gJFBlKGMpe3JldHVybiJhIj09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmYy5oYXNBdHRyaWJ1dGUoImhyZWYiKX0oYyl8fGMuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8SDBlKGMpKX0oYSkmJiF0aGlzLmlzRGlzYWJsZWQoYSkmJihk''@;'; put 'put ''Py5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShhKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoQ3gpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46''@;'; put 'put ''InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBIMGUoYyl7aWYoIWMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1jLnRhYkluZGV4KXJldHVybiExO2xldCBsPWMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIWx8fGlzTmFOKHBhcnNlSW50KGwsMTAp''@;'; put 'put ''KSl9ZnVuY3Rpb24gTjBlKGMpe2lmKCFIMGUoYykpcmV0dXJuIG51bGw7Y29uc3QgbD1wYXJzZUludChjLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihsKT8tMTpsfWNsYXNzIFYwZXtnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBl''@;'; put 'put ''bmFibGVkKGwpe3RoaXMuX2VuYWJsZWQ9bCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9lbmRBbmNob3IpKX1jb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEsZCxoLGY9ITEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9jaGVja2VyPWEsdGhpcy5fbmdab25lPWQsdGhpcy5fZG9jdW1lbnQ9aCx0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCks''@;'; put 'put ''dGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5fZW5hYmxlZD0hMCxmfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9zdGFydEFuY2hvcixhPXRoaXMuX2VuZEFuY2hvcjtsJiYobC5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSxsLnJlbW92ZSgpKSxhJiYoYS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksYS5yZW1vdmUoKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9y''@;'; put 'put ''PW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigp''@;'; put 'put ''LHRoaXMuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vz''@;'; put 'put ''Iix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSl9KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo''@;'; put 'put ''dGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVkPSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+''@;'; put 'put ''YSh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQobCkpKX0pfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1mb2N1''@;'; put 'put ''c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCkpKX0pfV9nZXRSZWdpb25Cb3VuZGFyeShsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQu''@;'; put 'put ''cXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHtsfV0sIFtjZGtGb2N1c1JlZ2lvbiR7bH1dLCBbY2RrLWZvY3VzLSR7bH1dYCk7cmV0dXJuInN0YXJ0Ij09bD9hLmxlbmd0aD9hWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmEubGVu''@;'; put 'put ''Z3RoP2FbYS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lm''@;'; put 'put ''KGEpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGEpKXtjb25zdCBkPXRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGEpO3JldHVybiBkPy5mb2N1cyhsKSwhIWR9cmV0dXJuIGEuZm9jdXMobCksITB9cmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKX1m''@;'; put 'put ''b2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1''@;'; put 'put ''cm4gYSYmYS5mb2N1cyhsKSwhIWF9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25zdCBh''@;'; put 'put ''PWwuY2hpbGRyZW47Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2dldExh''@;'; put 'put ''c3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09''@;'; put 'put ''dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9jcmVhdGVBbmNob3IoKXtjb25zdCBsPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlz''@;'; put 'put ''Ll90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLGwpLGwuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLGwuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksbC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGx9X3RvZ2ds''@;'; put 'put ''ZUFuY2hvclRhYkluZGV4KGwsYSl7bD9hLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6YS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyhsKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgo''@;'; put 'put ''bCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKGwpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT9sKCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWWYoMSkpLnN1YnNjcmliZShsKX19bGV0''@;'; put 'put ''IHZZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2NoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1ofWNyZWF0ZShhLGQ9ITEpe3JldHVybiBuZXcgVjBlKGEsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZCl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoalBlKSx4cihXYSkseHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxCMGU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzVHJhcD8uZW5hYmxlZHx8ITF9c2V0IGVuYWJsZWQoYSl7dGhpcy5mb2N1c1RyYXAmJih0aGlzLmZvY3VzVHJhcC5lbmFibGVkPWEpfWNvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50UmVmPWEsdGhpcy5f''@;'; put 'put ''Zm9jdXNUcmFwRmFjdG9yeT1kLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsLGZpKEN4KS5pc0Jyb3dzZXImJih0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApKX1uZ09uRGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZm9jdXNUcmFwPy5kZXN0cm95KCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMu''@;'; put 'put ''Zm9jdXNUcmFwPy5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAmJiF0aGlzLmZvY3VzVHJhcC5oYXNBdHRhY2hlZCgpJiZ0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCl9bmdPbkNoYW5n''@;'; put 'put ''ZXMoYSl7Y29uc3QgZD1hLmF1dG9DYXB0dXJlO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLmZvY3VzVHJhcD8uaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1m''@;'; put 'put ''dW5jdGlvbiB5UGUoKXtsZXQgYz10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtjJiZjLnNoYWRvd1Jvb3Q7KXtjb25zdCBsPWMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O2lmKGw9PT1jKWJyZWFrO2M9bH1yZXR1cm4gY30o''@;'; put 'put ''KSx0aGlzLmZvY3VzVHJhcD8uZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZSh2WSksR2UodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxpbnB1dHM6e2VuYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtUcmFwRm9jdXMiLCJlbmFibGVkIixzMV0sYXV0b0NhcHR1cmU6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtUcmFwRm9jdXNBdXRvQ2Fw''@;'; put 'put ''dHVyZSIsImF1dG9DYXB0dXJlIixzMV19LGV4cG9ydEFzOlsiY2RrVHJhcEZvY3VzIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbV2wsd2xdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBkNyhjLGw9MCl7cmV0dXJuIGZ1bmN0aW9uIHJGZShjKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChj''@;'; put 'put ''KSkmJiFpc05hTihOdW1iZXIoYykpfShjKT9OdW1iZXIoYyk6bH1mdW5jdGlvbiBFZChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEppP2MubmF0aXZlRWxlbWVudDpjfWNvbnN0IHh4PXtzY2hlZHVsZShjKXtsZXQgbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFt''@;'; put 'put ''ZTtjb25zdHtkZWxlZ2F0ZTpkfT14eDtkJiYobD1kLnJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWQuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGg9bChmPT57YT12b2lkIDAsYyhmKX0pO3JldHVybiBuZXcgcXQoKCk9PmE/LihoKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5jKXtj''@;'; put 'put ''b25zdHtkZWxlZ2F0ZTpsfT14eDtyZXR1cm4obD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT14eDtyZXR1cm4obD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNh''@;'; put 'put ''bmNlbEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sZGVsZWdhdGU6dm9pZCAwfSxqMGU9bmV3IGNsYXNzIG9GZSBleHRlbmRzIGhZe2ZsdXNoKGwpe2xldCBhO3RoaXMuX2FjdGl2ZT0hMCxsP2E9bC5pZDooYT10aGlzLl9zY2hlZHVsZWQsdGhpcy5fc2NoZWR1bGVkPXZvaWQgMCk7Y29uc3R7YWN0''@;'; put 'put ''aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlm''@;'; put 'put ''dCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBhRmUgZXh0ZW5kcyB1WXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1''@;'; put 'put ''ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD14eC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmwuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlz''@;'; put 'put ''LmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmYT09PWwuX3NjaGVkdWxlZCYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoeHguY2FuY2VsQW5pbWF0aW9u''@;'; put 'put ''RnJhbWUoYSksbC5fc2NoZWR1bGVkPXZvaWQgMCl9fSk7bGV0IHlZLHNGZT0xO2NvbnN0IEVMPXt9O2Z1bmN0aW9uIHowZShjKXtyZXR1cm4gYyBpbiBFTCYmKGRlbGV0ZSBFTFtjXSwhMCl9Y29uc3QgbEZlPXtzZXRJbW1lZGlhdGUoYyl7Y29uc3QgbD1zRmUrKztyZXR1cm4gRUxbbF09ITAs''@;'; put 'put ''eVl8fCh5WT1Qcm9taXNlLnJlc29sdmUoKSkseVkudGhlbigoKT0+ejBlKGwpJiZjKCkpLGx9LGNsZWFySW1tZWRpYXRlKGMpe3owZShjKX19LHtzZXRJbW1lZGlhdGU6Y0ZlLGNsZWFySW1tZWRpYXRlOnVGZX09bEZlLFRMPXtzZXRJbW1lZGlhdGUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09''@;'; put 'put ''VEw7cmV0dXJuKGw/LnNldEltbWVkaWF0ZXx8Y0ZlKSguLi5jKX0sY2xlYXJJbW1lZGlhdGUoYyl7Y29uc3R7ZGVsZWdhdGU6bH09VEw7cmV0dXJuKGw/LmNsZWFySW1tZWRpYXRlfHx1RmUpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9LGZGZT1uZXcgY2xhc3MgaEZlIGV4dGVuZHMgaFl7Zmx1c2go''@;'; put 'put ''bCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkm''@;'; put 'put ''JmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBkRmUgZXh0ZW5kcyB1WXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hl''@;'; put 'put ''ZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1UTC5zZXRJbW1lZGlhdGUobC5mbHVz''@;'; put 'put ''aC5iaW5kKGwsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFd''@;'; put 'put ''KXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoVEwuY2xlYXJJbW1lZGlhdGUoYSksbC5fc2NoZWR1bGVkPT09YSYmKGwuX3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBVMGUoYz0wLGwsYT10UGUpe2xldCBkPS0xO3JldHVybiBudWxsIT1sJiYoY2xlKGwpP2E9bDpkPWwp''@;'; put 'put ''LG5ldyBYdChoPT57bGV0IGY9ZnVuY3Rpb24gZ0ZlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKGMpfShjKT8rYy1hLm5vdygpOmM7ZjwwJiYoZj0wKTtsZXQgdj0wO3JldHVybiBhLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aC5jbG9zZWR8fChoLm5leHQodisrKSwwPD1kP3Ro''@;'; put 'put ''aXMuc2NoZWR1bGUodm9pZCAwLGQpOmguY29tcGxldGUoKSl9LGYpfSl9ZnVuY3Rpb24gYlkoYyxsPUNMKXtyZXR1cm4gZnVuY3Rpb24gcEZlKGMpe3JldHVybiBWaSgobCxhKT0+e2xldCBkPSExLGg9bnVsbCxmPW51bGwsdj0hMTtjb25zdCBNPSgpPT57aWYoZj8udW5zdWJzY3JpYmUoKSxm''@;'; put 'put ''PW51bGwsZCl7ZD0hMTtjb25zdCBHPWg7aD1udWxsLGEubmV4dChHKX12JiZhLmNvbXBsZXRlKCl9LEk9KCk9PntmPW51bGwsdiYmYS5jb21wbGV0ZSgpfTtsLnN1YnNjcmliZShOaShhLEc9PntkPSEwLGg9RyxmfHxsMShjKEcpKS5zdWJzY3JpYmUoZj1OaShhLE0sSSkpfSwoKT0+e3Y9ITAs''@;'; put 'put ''KCFkfHwhZnx8Zi5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9PlUwZShjLGwpKX1jb25zdCB2RmU9bmV3IE10KCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24geUZlKCl7cmV0dXJuIGZpKHZzKX19KSxiRmU9L14oYXJ8Y2tifGR2fGhlfGl3''@;'; put 'put ''fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IHBtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1u''@;'; put 'put ''ZXcgS3IsYSYmKHRoaXMudmFsdWU9ZnVuY3Rpb24gX0ZlKGMpe2NvbnN0IGw9Yz8udG9Mb3dlckNhc2UoKXx8IiI7cmV0dXJuImF1dG8iPT09bCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/YkZlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRy''@;'; put 'put ''IjoicnRsIj09PWw/InJ0bCI6Imx0ciJ9KChhLmJvZHk/YS5ib2R5LmRpcjpudWxsKXx8KGEuZG9jdW1lbnRFbGVtZW50P2EuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodkZlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyB3RmV7fWNsYXNzIFNGZSBleHRlbmRzIHdGZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2RhdGE9bH1jb25uZWN0KCl7cmV0dXJuIEJNKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6Zm8odGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319dmFyIGdtPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUkVQTEFDRUQ9MF09IlJFUExBQ0VEIixjW2Mu''@;'; put 'put ''SU5TRVJURUQ9MV09IklOU0VSVEVEIixjW2MuTU9WRUQ9Ml09Ik1PVkVEIixjW2MuUkVNT1ZFRD0zXT0iUkVNT1ZFRCIsY30oZ218fHt9KTtjb25zdCBfWT1uZXcgTXQoIl9WaWV3UmVwZWF0ZXIiKTtjbGFzcyBaMGV7Y29uc3RydWN0b3IoKXt0aGlzLnZpZXdDYWNoZVNpemU9MjAsdGhpcy5f''@;'; put 'put ''dmlld0NhY2hlPVtdfWFwcGx5Q2hhbmdlcyhsLGEsZCxoLGYpe2wuZm9yRWFjaE9wZXJhdGlvbigodixNLEkpPT57bGV0IEcsaWU7bnVsbD09di5wcmV2aW91c0luZGV4PyhHPXRoaXMuX2luc2VydFZpZXcoKCk9PmQodixNLEkpLEksYSxoKHYpKSxpZT1HP2dtLklOU0VSVEVEOmdtLlJFUExB''@;'; put 'put ''Q0VEKTpudWxsPT1JPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoTSxhKSxpZT1nbS5SRU1PVkVEKTooRz10aGlzLl9tb3ZlVmlldyhNLEksYSxoKHYpKSxpZT1nbS5NT1ZFRCksZiYmZih7Y29udGV4dDpHPy5jb250ZXh0LG9wZXJhdGlvbjppZSxyZWNvcmQ6dn0pfSl9ZGV0YWNoKCl7Zm9y''@;'; put 'put ''KGNvbnN0IGwgb2YgdGhpcy5fdmlld0NhY2hlKWwuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0VmlldyhsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoYSxkKTtpZihmKXJldHVybiB2b2lkKGYuY29udGV4dC4kaW1wbGljaXQ9aCk7Y29uc3Qg''@;'; put 'put ''dj1sKCk7cmV0dXJuIGQuY3JlYXRlRW1iZWRkZWRWaWV3KHYudGVtcGxhdGVSZWYsdi5jb250ZXh0LHYuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcobCxhKXtjb25zdCBkPWEuZGV0YWNoKGwpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGQsYSl9X21vdmVWaWV3KGwsYSxkLGgpe2NvbnN0IGY9''@;'; put 'put ''ZC5nZXQobCk7cmV0dXJuIGQubW92ZShmLGEpLGYuY29udGV4dC4kaW1wbGljaXQ9aCxmfV9tYXliZUNhY2hlVmlldyhsLGEpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMuX3ZpZXdDYWNoZS5wdXNoKGwpO2Vsc2V7Y29uc3QgZD1hLmluZGV4T2Yo''@;'; put 'put ''bCk7LTE9PT1kP2wuZGVzdHJveSgpOmEucmVtb3ZlKGQpfX1faW5zZXJ0Vmlld0Zyb21DYWNoZShsLGEpe2NvbnN0IGQ9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBkJiZhLmluc2VydChkLGwpLGR8fG51bGx9fWNvbnN0IE1GZT1bImNvbnRlbnRXcmFwcGVyIl0seEZlPVsiKiJdLFcw''@;'; put 'put ''ZT1uZXcgTXQoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7Y2xhc3MgRUZle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBXbix0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKGZ1bmN0aW9uIGNZ''@;'; put 'put ''KGMsbD11bil7cmV0dXJuIGM9Yz8/Sk9lLFZpKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShOaShkLHY9Pntjb25zdCBNPWwodik7KGZ8fCFjKGgsTSkpJiYoZj0hMSxoPU0sZC5uZXh0KHYpKX0pKX0pfSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPWwsdGhp''@;'; put 'put ''cy5fbWluQnVmZmVyUHg9YSx0aGlzLl9tYXhCdWZmZXJQeD1kfWF0dGFjaChsKXt0aGlzLl92aWV3cG9ydD1sLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0''@;'; put 'put ''ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUobCxhLGQpe3RoaXMuX2l0ZW1TaXplPWwsdGhpcy5fbWluQnVmZmVyUHg9YSx0aGlzLl9tYXhCdWZmZXJQeD1kLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJh''@;'; put 'put ''bmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJl''@;'; put 'put ''ZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleChsLGEpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldChsKnRoaXMuX2l0ZW1TaXplLGEpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNldFRv''@;'; put 'put ''dGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47Y29uc3QgbD10aGlzLl92aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksYT17c3RhcnQ6bC5z''@;'; put 'put ''dGFydCxlbmQ6bC5lbmR9LGQ9dGhpcy5fdmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCksaD10aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCk7bGV0IGY9dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHY9dGhpcy5faXRlbVNpemU+MD9mL3RoaXMuX2l0ZW1TaXplOjA7''@;'; put 'put ''aWYoYS5lbmQ+aCl7Y29uc3QgST1NYXRoLmNlaWwoZC90aGlzLl9pdGVtU2l6ZSksRz1NYXRoLm1heCgwLE1hdGgubWluKHYsaC1JKSk7diE9RyYmKHY9RyxmPUcqdGhpcy5faXRlbVNpemUsYS5zdGFydD1NYXRoLmZsb29yKHYpKSxhLmVuZD1NYXRoLm1heCgwLE1hdGgubWluKGgsYS5zdGFy''@;'; put 'put ''dCtJKSl9Y29uc3QgTT1mLWEuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoTTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9YS5zdGFydCl7Y29uc3QgST1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LU0pL3RoaXMuX2l0ZW1TaXplKTthLnN0YXJ0PU1hdGgubWF4KDAsYS5zdGFydC1JKSxhLmVu''@;'; put 'put ''ZD1NYXRoLm1pbihoLE1hdGguY2VpbCh2KyhkK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7Y29uc3QgST1hLmVuZCp0aGlzLl9pdGVtU2l6ZS0oZitkKTtpZihJPHRoaXMuX21pbkJ1ZmZlclB4JiZhLmVuZCE9aCl7Y29uc3QgRz1NYXRoLmNlaWwoKHRoaXMuX21h''@;'; put 'put ''eEJ1ZmZlclB4LUkpL3RoaXMuX2l0ZW1TaXplKTtHPjAmJihhLmVuZD1NYXRoLm1pbihoLGEuZW5kK0cpLGEuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHYtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoYSks''@;'; put 'put ''dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmEuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHYpKX19bGV0IGtiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1h''@;'; put 'put ''LHRoaXMuX3BsYXRmb3JtPWQsdGhpcy5fc2Nyb2xsZWQ9bmV3IFduLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX3Njcm9sbGVkQ291bnQ9MCx0aGlzLnNjcm9sbENvbnRhaW5lcnM9bmV3IE1hcCx0aGlzLl9kb2N1bWVudD1ofXJlZ2lzdGVyKGEpe3RoaXMuc2Nyb2xsQ29u''@;'; put 'put ''dGFpbmVycy5oYXMoYSl8fHRoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQoYSxhLmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChhKSkpfWRlcmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGEpO2QmJihkLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShhKSl9c2Nyb2xsZWQoYT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgWHQoZD0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBoPWE+MD90''@;'; put 'put ''aGlzLl9zY3JvbGxlZC5waXBlKGJZKGEpKS5zdWJzY3JpYmUoZCk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGQpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntoLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMu''@;'; put 'put ''X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6Zm8oKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGEsZCk9PnRoaXMuZGVyZWdpc3RlcihkKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3Rv''@;'; put 'put ''clNjcm9sbGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKTtyZXR1cm4gdGhpcy5zY3JvbGxlZChkKS5waXBlKCRsKGY9PiFmfHxoLmluZGV4T2YoZik+LTEpKX1nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGgsZik9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGYsYSkmJmQucHVzaChmKX0pLGR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNF''@;'; put 'put ''bGVtZW50KGEsZCl7bGV0IGg9RWQoZCksZj1hLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKGg9PWYpcmV0dXJuITB9d2hpbGUoaD1oLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9u''@;'; put 'put ''Z1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnhkKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2ds''@;'; put 'put ''b2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihXYSkseHIoQ3gpLHhyKHZzLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxZMGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMuZGly''@;'; put 'put ''PWYsdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IFh0KHY9PnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT54ZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZShWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJz''@;'; put 'put ''Y3JpYmUodikpKX1uZ09uSW5pdCgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxl''@;'; put 'put ''bWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGg9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1''@;'; put 'put ''ZTtudWxsPT1hLmxlZnQmJihhLmxlZnQ9aD9hLmVuZDphLnN0YXJ0KSxudWxsPT1hLnJpZ2h0JiYoYS5yaWdodD1oP2Euc3RhcnQ6YS5lbmQpLG51bGwhPWEuYm90dG9tJiYoYS50b3A9ZC5zY3JvbGxIZWlnaHQtZC5jbGllbnRIZWlnaHQtYS5ib3R0b20pLGgmJk14KCkhPV9wLk5PUk1BTD8o''@;'; put 'put ''bnVsbCE9YS5sZWZ0JiYoYS5yaWdodD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5sZWZ0KSxNeCgpPT1fcC5JTlZFUlRFRD9hLmxlZnQ9YS5yaWdodDpNeCgpPT1fcC5ORUdBVEVEJiYoYS5sZWZ0PWEucmlnaHQ/LWEucmlnaHQ6YS5yaWdodCkpOm51bGwhPWEucmlnaHQmJihhLmxl''@;'; put 'put ''ZnQ9ZC5zY3JvbGxXaWR0aC1kLmNsaWVudFdpZHRoLWEucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyFmdW5jdGlvbiBtUGUoKXtpZihudWxsPT11Nyl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIHU3PSExLHU3O2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpdTc9ITA7ZWxzZXtjb25zdCBjPUVs''@;'; put 'put ''ZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO3U3PSEhYyYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KGMudG9TdHJpbmcoKSl9fXJldHVybiB1N30oKT8obnVsbCE9YS50b3AmJihkLnNjcm9sbFRvcD1hLnRvcCksbnVsbCE9YS5sZWZ0JiYoZC5zY3JvbGxMZWZ0PWEubGVmdCkp''@;'; put 'put ''OmQuc2Nyb2xsVG8oYSl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtjb25zdCBkPSJsZWZ0IixoPSJyaWdodCIsZj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09YSlyZXR1cm4gZi5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWEpcmV0dXJuIGYuc2Nyb2xsSGVpZ2h0LWYu''@;'; put 'put ''Y2xpZW50SGVpZ2h0LWYuc2Nyb2xsVG9wO2NvbnN0IHY9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtyZXR1cm4ic3RhcnQiPT1hP2E9dj9oOmQ6ImVuZCI9PWEmJihhPXY/ZDpoKSx2JiZNeCgpPT1fcC5JTlZFUlRFRD9hPT1kP2Yuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1m''@;'; put 'put ''LnNjcm9sbExlZnQ6Zi5zY3JvbGxMZWZ0OnYmJk14KCk9PV9wLk5FR0FURUQ/YT09ZD9mLnNjcm9sbExlZnQrZi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoOi1mLnNjcm9sbExlZnQ6YT09ZD9mLnNjcm9sbExlZnQ6Zi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdH1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2Uoa2IpLEdlKFdhKSxHZShwbSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xs''@;'; put 'put ''YWJsZSIsIiJdXSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxBTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5fY2hhbmdlTGlzdGVuZXI9Zj0+e3RoaXMuX2NoYW5nZS5uZXh0KGYpfSx0aGlz''@;'; put 'put ''Ll9kb2N1bWVudD1oLGQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZihhLmlzQnJvd3Nlcil7Y29uc3QgZj10aGlzLl9nZXRXaW5kb3coKTtmLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGYuYWRkRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFu''@;'; put 'put ''Z2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlld3BvcnRTaXplPW51bGwpfSl9bmdPbkRlc3Ryb3koKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7YS5yZW1vdmVFdmVudExp''@;'; put 'put ''c3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0''@;'; put 'put ''aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtjb25zdCBhPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUud2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLl92aWV3cG9ydFNpemU9bnVsbCksYX1nZXRW''@;'; put 'put ''aWV3cG9ydFJlY3QoKXtjb25zdCBhPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHt3aWR0aDpkLGhlaWdodDpofT10aGlzLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybnt0b3A6YS50b3AsbGVmdDphLmxlZnQsYm90dG9tOmEudG9wK2gscmlnaHQ6YS5sZWZ0K2QsaGVpZ2h0Omgs''@;'; put 'put ''d2lkdGg6ZH19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07Y29uc3QgYT10aGlzLl9kb2N1bWVudCxkPXRoaXMuX2dldFdpbmRvdygpLGg9YS5kb2N1bWVudEVsZW1lbnQsZj1oLmdldEJvdW5kaW5n''@;'; put 'put ''Q2xpZW50UmVjdCgpO3JldHVybnt0b3A6LWYudG9wfHxhLmJvZHkuc2Nyb2xsVG9wfHxkLnNjcm9sbFl8fGguc2Nyb2xsVG9wfHwwLGxlZnQ6LWYubGVmdHx8YS5ib2R5LnNjcm9sbExlZnR8fGQuc2Nyb2xsWHx8aC5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoYT0yMCl7cmV0dXJuIGE+MD90aGlz''@;'; put 'put ''Ll9jaGFuZ2UucGlwZShiWShhKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxh''@;'; put 'put ''dGZvcm0uaXNCcm93c2VyP3t3aWR0aDphLmlubmVyV2lkdGgsaGVpZ2h0OmEuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihDeCkseHIoV2EpLHhyKHZzLDgpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBHMGU9bmV3IE10KCJWSVJUVUFMX1NDUk9MTEFCTEUiKTtsZXQgJDBlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBZMGV7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgsZil7c3VwZXIoYSxkLGgsZil9bWVhc3VyZVZpZXdwb3J0U2l6ZShhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWE/ZC5jbGllbnRXaWR0aDpkLmNsaWVudEhlaWdodH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2Uoa2IpLEdlKFdhKSxHZShwbSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOlt3YV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IERGZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9qMGU6ZkZl''@;'; put 'put ''O2xldCBEYj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgJDBle2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oYSl7dGhpcy5fb3JpZW50YXRpb24hPT1hJiYodGhpcy5fb3JpZW50YXRpb249YSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXpl''@;'; put 'put ''KCkpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyl7c3VwZXIoYSxNLGgsdiksdGhpcy5lbGVtZW50UmVmPWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1mLHRoaXMuc2Nyb2xsYWJsZT1HLHRoaXMuX3BsYXRmb3JtPWZpKEN4KSx0aGlzLl9kZXRh''@;'; put 'put ''Y2hlZFN1YmplY3Q9bmV3IFduLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBXbix0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuYXBwZW5kT25seT0hMSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IFh0KGllPT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxl''@;'; put 'put ''ZEluZGV4Q2hhbmdlLnN1YnNjcmliZSh1ZT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT5pZS5uZXh0KHVlKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9''@;'; put 'put ''MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRo''@;'; put 'put ''aXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXF0LkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1JLmNo''@;'; put 'put ''YW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9bmdPbklu''@;'; put 'put ''aXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLnNjcm9sbGFibGU9PT10aGlzJiZzdXBlci5uZ09uSW5pdCgpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRo''@;'; put 'put ''aXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKCkucGlwZSh4MihudWxsKSxiWSgwLERGZSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgp''@;'; put 'put ''KSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0''@;'; put 'put ''ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGEpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9YSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUoVjAodGhpcy5fZGV0YWNoZWRT''@;'; put 'put ''dWJqZWN0KSkuc3Vic2NyaWJlKGQ9Pntjb25zdCBoPWQubGVuZ3RoO2ghPT10aGlzLl9kYXRhTGVuZ3RoJiYodGhpcy5fZGF0YUxlbmd0aD1oLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pfSl9ZGV0YWNoKCl7''@;'; put 'put ''dGhpcy5fZm9yT2Y9bnVsbCx0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpfWdldERhdGFMZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YUxlbmd0aH1nZXRWaWV3cG9ydFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplfWdldFJlbmRlcmVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmVu''@;'; put 'put ''ZGVyZWRSYW5nZX1tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChhKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthXX1zZXRUb3RhbENvbnRlbnRTaXplKGEpe3RoaXMuX3RvdGFsQ29udGVu''@;'; put 'put ''dFNpemUhPT1hJiYodGhpcy5fdG90YWxDb250ZW50U2l6ZT1hLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCkpfXNldFJlbmRlcmVkUmFuZ2UoYSl7KGZ1bmN0aW9uIGtGZShjLGwpe3JldHVybiBjLnN0YXJ0PT1sLnN0YXJ0JiZj''@;'; put 'put ''LmVuZD09bC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGEpfHwodGhpcy5hcHBlbmRPbmx5JiYoYT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsYS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdl''@;'; put 'put ''PWEpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9u''@;'; put 'put ''dWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoYSxkPSJ0by1zdGFydCIpe2E9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09ZD8wOmE7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PXRoaXMub3JpZW50YXRpb24sdj1mPyJYIjoiWSI7bGV0''@;'; put 'put ''IEk9YHRyYW5zbGF0ZSR7dn0oJHtOdW1iZXIoKGYmJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqYSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9YSwidG8tZW5kIj09PWQmJihJKz1gIHRyYW5zbGF0ZSR7dn0oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENv''@;'; put 'put ''bnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9SSYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1JLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVk''@;'; put 'put ''c1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRl''@;'; put 'put ''bnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGEsZD0iYXV0byIpe2NvbnN0IGg9e2JlaGF2aW9yOmR9OyJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/aC5zdGFydD1hOmgudG9wPWEsdGhpcy5z''@;'; put 'put ''Y3JvbGxhYmxlLnNjcm9sbFRvKGgpfXNjcm9sbFRvSW5kZXgoYSxkPSJhdXRvIil7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsVG9JbmRleChhLGQpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7bGV0IGQ7cmV0dXJuIGQ9dGhpcy5zY3JvbGxhYmxlPT10aGlzP2g9PnN1cGVyLm1lYXN1cmVT''@;'; put 'put ''Y3JvbGxPZmZzZXQoaCk6aD0+dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoaCksTWF0aC5tYXgoMCxkKGE/PygiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJzdGFydCI6InRvcCIpKS10aGlzLm1lYXN1cmVWaWV3cG9ydE9mZnNldCgpKX1tZWFzdXJlVmlld3Bv''@;'; put 'put ''cnRPZmZzZXQoYSl7bGV0IGQ7Y29uc3QgaD0ibGVmdCIsZj0icmlnaHQiLHY9InJ0bCI9PXRoaXMuZGlyPy52YWx1ZTtkPSJzdGFydCI9PWE/dj9mOmg6ImVuZCI9PWE/dj9oOmY6YXx8KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ImxlZnQiOiJ0b3AiKTtjb25zdCBNPXRoaXMu''@;'; put 'put ''c2Nyb2xsYWJsZS5tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChkKTtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZF0tTX1tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpe2NvbnN0IGE9dGhpcy5f''@;'; put 'put ''Y29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShhKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShh''@;'; put 'put ''LHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xs''@;'; put 'put ''YWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGEpe2EmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goYSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRl''@;'; put 'put ''Y3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRo''@;'; put 'put ''aXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtjb25zdCBhPXRoaXMuX3J1bkFmdGVyQ2hh''@;'; put 'put ''bmdlRGV0ZWN0aW9uO3RoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO2Zvcihjb25zdCBkIG9mIGEpZCgpfV9jYWxjdWxhdGVTcGFjZXJTaXplKCl7dGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/IiI6YCR7dGhpcy5fdG90YWxD''@;'; put 'put ''b250ZW50U2l6ZX1weGAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9gJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YDoiIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2Uo''@;'; put 'put ''RXMpLEdlKFdhKSxHZShXMGUsOCksR2UocG0sOCksR2Uoa2IpLEdlKEFMKSxHZShHMGUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYm''@;'; put 'put ''cWEoTUZlLDcpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguX2NvbnRlbnRXcmFwcGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNkay12aXJ0dWFs''@;'; put 'put ''LXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1oLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1oLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRp''@;'; put 'put ''b24iLGFwcGVuZE9ubHk6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJhcHBlbmRPbmx5IiwiYXBwZW5kT25seSIsczFdfSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRl''@;'; put 'put ''OlkwZSx1c2VGYWN0b3J5OihhLGQpPT5hfHxkLGRlcHM6W1tuZXcgSTEsbmV3IGM1KEcwZSldLGNdfV0pLFdsLHdhLHFJXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eEZlLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtY29u''@;'; put 'put ''dGVudC13cmFwcGVyIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihzYSgpLGRlKDAsImRpdiIsMSwwKSxZcigyKSxoZSgpLEd0KDMsImRpdiIsMikpLDImZCYmKGZlKDMpLF9kKCJ3aWR0aCIsaC5fdG90YWxDb250ZW50V2lk''@;'; put 'put ''dGgpKCJoZWlnaHQiLGguX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzph''@;'; put 'put ''dXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtk''@;'; put 'put ''aXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmly''@;'; put 'put ''dHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50''@;'; put 'put ''LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50''@;'; put 'put ''YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1y''@;'; put 'put ''aWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12''@;'; put 'put ''aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1''@;'; put 'put ''YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1z''@;'; put 'put ''cGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''O2Z1bmN0aW9uIEswZShjLGwsYSl7aWYoIWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4iaG9yaXpvbnRhbCI9PT1jPyJzdGFydCI9PT1sP2gubGVmdDpoLnJpZ2h0OiJzdGFydCI9PT1sP2gudG9wOmguYm90''@;'; put 'put ''dG9tfWxldCBrTD0oKCk9PntjbGFzcyBje2dldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWEsZnVuY3Rpb24gQ0ZlKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYy5jb25uZWN0JiYhKGMgaW5zdGFuY2VvZiBXWil9KGEpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQoYSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgU0ZlKEJNKGEpP2E6QXJyYXkuZnJvbShhfHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PWE/KGQsaCk9PmEoZCsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0''@;'; put 'put ''OjApLGgpOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT1hKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNl''@;'; put 'put ''dCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9ZDcoYSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl92''@;'; put 'put ''aWV3UmVwZWF0ZXI9Zix0aGlzLl92aWV3cG9ydD12LHRoaXMudmlld0NoYW5nZT1uZXcgV24sdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFduLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKHgyKG51bGwpLGZ1bmN0aW9uIG1GZSgpe3JldHVybiBWaSgo''@;'; put 'put ''YyxsKT0+e2xldCBhLGQ9ITE7Yy5zdWJzY3JpYmUoTmkobCxoPT57Y29uc3QgZj1hO2E9aCxkJiZsLm5leHQoW2YsaF0pLGQ9ITB9KSl9KX0oKSxWMSgoW0ksR10pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKEksRykpLEkwZSgxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRh''@;'; put 'put ''dGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKEk9Pnt0aGlzLl9kYXRhPUksdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShWMCh0aGlzLl9kZXN0cm95ZWQpKS5z''@;'; put 'put ''dWJzY3JpYmUoST0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9SSx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmTS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3Bv''@;'; put 'put ''cnQuYXR0YWNoKHRoaXMpfW1lYXN1cmVSYW5nZVNpemUoYSxkKXtpZihhLnN0YXJ0Pj1hLmVuZClyZXR1cm4gMDtjb25zdCBoPWEuc3RhcnQtdGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCxmPWEuZW5kLWEuc3RhcnQ7bGV0IHYsTTtmb3IobGV0IEk9MDtJPGY7SSsrKXtjb25zdCBHPXRoaXMu''@;'; put 'put ''X3ZpZXdDb250YWluZXJSZWYuZ2V0KEkraCk7aWYoRyYmRy5yb290Tm9kZXMubGVuZ3RoKXt2PU09Ry5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgST1mLTE7ST4tMTtJLS0pe2NvbnN0IEc9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoSStoKTtpZihHJiZHLnJvb3ROb2Rlcy5sZW5n''@;'; put 'put ''dGgpe009Ry5yb290Tm9kZXNbRy5yb290Tm9kZXMubGVuZ3RoLTFdO2JyZWFrfX1yZXR1cm4gdiYmTT9LMGUoZCwiZW5kIixNKS1LMGUoZCwic3RhcnQiLHYpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlm''@;'; put 'put ''Zih0aGlzLl9yZW5kZXJlZEl0ZW1zKTthP3RoaXMuX2FwcGx5Q2hhbmdlcyhhKTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDAp''@;'; put 'put ''LHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7''@;'; put 'put ''dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3Jl''@;'; put 'put ''bmRlcmVkSXRlbXMpLmNyZWF0ZSgoYSxkKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGEsZCk6ZCkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShhLGQpe3JldHVybiBhJiZhLmRpc2Nvbm5lY3QodGhpcyksdGhp''@;'; put 'put ''cy5fbmVlZHNVcGRhdGU9ITAsZD9kLmNvbm5lY3QodGhpcyk6Zm8oKX1fdXBkYXRlQ29udGV4dCgpe2NvbnN0IGE9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtkLS07KXtjb25zdCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0''@;'; put 'put ''KGQpO2guY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2QsaC5jb250ZXh0LmNvdW50PWEsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhoLmNvbnRleHQpLGguZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGEpe3RoaXMuX3ZpZXdSZXBl''@;'; put 'put ''YXRlci5hcHBseUNoYW5nZXMoYSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChmLHYsTSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MoZixNKSxmPT5mLml0ZW0pLGEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGY9Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChmLmN1cnJlbnRJbmRleCku''@;'; put 'put ''Y29udGV4dC4kaW1wbGljaXQ9Zi5pdGVtfSk7Y29uc3QgZD10aGlzLl9kYXRhLmxlbmd0aDtsZXQgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2gtLTspe2NvbnN0IGY9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoaCk7Zi5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRl''@;'; put 'put ''cmVkUmFuZ2Uuc3RhcnQraCxmLmNvbnRleHQuY291bnQ9ZCx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGYuY29udGV4dCl9fV91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGEpe2EuZmlyc3Q9MD09PWEuaW5kZXgsYS5sYXN0PWEuaW5kZXg9PT1hLmNvdW50''@;'; put 'put ''LTEsYS5ldmVuPWEuaW5kZXglMj09MCxhLm9kZD0hYS5ldmVufV9nZXRFbWJlZGRlZFZpZXdBcmdzKGEsZCl7cmV0dXJue3RlbXBsYXRlUmVmOnRoaXMuX3RlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDphLml0ZW0sY2RrVmlydHVhbEZvck9mOnRoaXMuX2Nka1ZpcnR1YWxGb3JPZixpbmRl''@;'; put 'put ''eDotMSxjb3VudDotMSxmaXJzdDohMSxsYXN0OiExLG9kZDohMSxldmVuOiExfSxpbmRleDpkfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEbyksR2UoU2wpLEdlKGVtKSxHZShfWSksR2UoRGIsNCksR2UoV2EpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1ZpcnR1YWxGb3IiLCIiLCJjZGtWaXJ0dWFsRm9yT2YiLCIiXV0saW5wdXRzOntjZGtWaXJ0dWFsRm9yT2Y6ImNka1ZpcnR1YWxGb3JPZiIsY2RrVmlydHVhbEZvclRyYWNrQnk6ImNka1ZpcnR1YWxGb3JUcmFja0J5Iixj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVGVtcGxhdGU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSIsY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6X1ksdXNlQ2xhc3M6WjBlfV0p''@;'; put 'put ''XX0pfX1yZXR1cm4gY30pKCksSUZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHt9KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''O2Z1bmN0aW9uIHdZKGMsbCxhKXtmb3IobGV0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07aD9jLnNldFByb3BlcnR5KGQsaCxhPy5oYXMoZCk/ImltcG9ydGFudCI6IiIpOmMucmVtb3ZlUHJvcGVydHkoZCl9cmV0dXJuIGN9ZnVuY3Rpb24gSWIoYyxsKXtj''@;'; put 'put ''b25zdCBhPWw/IiI6Im5vbmUiO3dZKGMuc3R5bGUseyJ0b3VjaC1hY3Rpb24iOmw/IiI6Im5vbmUiLCItd2Via2l0LXVzZXItZHJhZyI6bD8iIjoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6bD8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6YSwiLW1zLXVzZXIt''@;'; put 'put ''c2VsZWN0IjphLCItd2Via2l0LXVzZXItc2VsZWN0IjphLCItbW96LXVzZXItc2VsZWN0IjphfSl9ZnVuY3Rpb24gcTBlKGMsbCxhKXt3WShjLnN0eWxlLHtwb3NpdGlvbjpsPyIiOiJmaXhlZCIsdG9wOmw/IiI6IjAiLG9wYWNpdHk6bD8iIjoiMCIsbGVmdDpsPyIiOiItOTk5ZW0ifSxhKX1m''@;'; put 'put ''dW5jdGlvbiBETChjLGwpe3JldHVybiBsJiYibm9uZSIhPWw/YysiICIrbDpjfWZ1bmN0aW9uIFgwZShjLGwpe2Muc3R5bGUud2lkdGg9YCR7bC53aWR0aH1weGAsYy5zdHlsZS5oZWlnaHQ9YCR7bC5oZWlnaHR9cHhgLGMuc3R5bGUudHJhbnNmb3JtPUlMKGwubGVmdCxsLnRvcCl9ZnVuY3Rp''@;'; put 'put ''b24gSUwoYyxsKXtyZXR1cm5gdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKGMpfXB4LCAke01hdGgucm91bmQobCl9cHgsIDApYH1mdW5jdGlvbiBDWShjKXtjb25zdCBsPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpsLnRvcCxyaWdodDpsLnJpZ2h0LGJvdHRvbTpsLmJv''@;'; put 'put ''dHRvbSxsZWZ0OmwubGVmdCx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCx4OmwueCx5OmwueX19ZnVuY3Rpb24gU1koYyxsLGEpe2NvbnN0e3RvcDpkLGJvdHRvbTpoLGxlZnQ6ZixyaWdodDp2fT1jO3JldHVybiBhPj1kJiZhPD1oJiZsPj1mJiZsPD12fWZ1bmN0aW9uIEV4KGMsbCxh''@;'; put 'put ''KXtjLnRvcCs9bCxjLmJvdHRvbT1jLnRvcCtjLmhlaWdodCxjLmxlZnQrPWEsYy5yaWdodD1jLmxlZnQrYy53aWR0aH1mdW5jdGlvbiBKMGUoYyxsLGEsZCl7Y29uc3R7dG9wOmgscmlnaHQ6Zixib3R0b206dixsZWZ0Ok0sd2lkdGg6SSxoZWlnaHQ6R309YyxpZT1JKmwsdWU9RypsO3JldHVy''@;'; put 'put ''biBkPmgtdWUmJmQ8dit1ZSYmYT5NLWllJiZhPGYraWV9Y2xhc3MgUTBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvY3VtZW50PWwsdGhpcy5wb3NpdGlvbnM9bmV3IE1hcH1jbGVhcigpe3RoaXMucG9zaXRpb25zLmNsZWFyKCl9Y2FjaGUobCl7dGhpcy5jbGVhcigpLHRoaXMucG9zaXRpb25z''@;'; put 'put ''LnNldCh0aGlzLl9kb2N1bWVudCx7c2Nyb2xsUG9zaXRpb246dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9KSxsLmZvckVhY2goYT0+e3RoaXMucG9zaXRpb25zLnNldChhLHtzY3JvbGxQb3NpdGlvbjp7dG9wOmEuc2Nyb2xsVG9wLGxlZnQ6YS5zY3JvbGxMZWZ0fSxjbGllbnRS''@;'; put 'put ''ZWN0OkNZKGEpfSl9KX1oYW5kbGVTY3JvbGwobCl7Y29uc3QgYT14TChsKSxkPXRoaXMucG9zaXRpb25zLmdldChhKTtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPWQuc2Nyb2xsUG9zaXRpb247bGV0IGYsdjtpZihhPT09dGhpcy5fZG9jdW1lbnQpe2NvbnN0IEc9dGhpcy5nZXRWaWV3cG9y''@;'; put 'put ''dFNjcm9sbFBvc2l0aW9uKCk7Zj1HLnRvcCx2PUcubGVmdH1lbHNlIGY9YS5zY3JvbGxUb3Asdj1hLnNjcm9sbExlZnQ7Y29uc3QgTT1oLnRvcC1mLEk9aC5sZWZ0LXY7cmV0dXJuIHRoaXMucG9zaXRpb25zLmZvckVhY2goKEcsaWUpPT57Ry5jbGllbnRSZWN0JiZhIT09aWUmJmEuY29udGFp''@;'; put 'put ''bnMoaWUpJiZFeChHLmNsaWVudFJlY3QsTSxJKX0pLGgudG9wPWYsaC5sZWZ0PXYse3RvcDpNLGxlZnQ6SX19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybnt0b3A6d2luZG93LnNjcm9sbFksbGVmdDp3aW5kb3cuc2Nyb2xsWH19fWZ1bmN0aW9uIGUxZShjKXtjb25zdCBsPWMu''@;'; put 'put ''Y2xvbmVOb2RlKCEwKSxhPWwucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLGQ9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2wucmVtb3ZlQXR0cmlidXRlKCJpZCIpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKWFbaF0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiJjYW52YXMiPT09''@;'; put 'put ''ZD9yMWUoYyxsKTooImlucHV0Ij09PWR8fCJzZWxlY3QiPT09ZHx8InRleHRhcmVhIj09PWQpJiZuMWUoYyxsKSx0MWUoImNhbnZhcyIsYyxsLHIxZSksdDFlKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIsYyxsLG4xZSksbH1mdW5jdGlvbiB0MWUoYyxsLGEsZCl7Y29uc3QgaD1sLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3JBbGwoYyk7aWYoaC5sZW5ndGgpe2NvbnN0IGY9YS5xdWVyeVNlbGVjdG9yQWxsKGMpO2ZvcihsZXQgdj0wO3Y8aC5sZW5ndGg7disrKWQoaFt2XSxmW3ZdKX19bGV0IExGZT0wO2Z1bmN0aW9uIG4xZShjLGwpeyJmaWxlIiE9PWwudHlwZSYmKGwudmFsdWU9Yy52YWx1ZSksInJh''@;'; put 'put ''ZGlvIj09PWwudHlwZSYmbC5uYW1lJiYobC5uYW1lPWBtYXQtY2xvbmUtJHtsLm5hbWV9LSR7TEZlKyt9YCl9ZnVuY3Rpb24gcjFlKGMsbCl7Y29uc3QgYT1sLmdldENvbnRleHQoIjJkIik7aWYoYSl0cnl7YS5kcmF3SW1hZ2UoYywwLDApfWNhdGNoe319ZnVuY3Rpb24gaTFlKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1jLnJvb3ROb2RlcztpZigxPT09YS5sZW5ndGgmJmFbMF0ubm9kZVR5cGU9PT1sLkVMRU1FTlRfTk9ERSlyZXR1cm4gYVswXTtjb25zdCBkPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuZm9yRWFjaChoPT5kLmFwcGVuZENoaWxkKGgpKSxkfWZ1bmN0aW9uIGExZShjKXtj''@;'; put 'put ''b25zdCBsPWMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtcyIpPi0xPzE6MWUzO3JldHVybiBwYXJzZUZsb2F0KGMpKmx9ZnVuY3Rpb24gTVkoYyxsKXtyZXR1cm4gYy5nZXRQcm9wZXJ0eVZhbHVlKGwpLnNwbGl0KCIsIikubWFwKGQ9PmQudHJpbSgpKX1jb25zdCBQRmU9bmV3IFNldChbInBv''@;'; put 'put ''c2l0aW9uIl0pO2NsYXNzIEZGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEksRyl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLl9yb290RWxlbWVudD1hLHRoaXMuX2RpcmVjdGlvbj1kLHRoaXMuX2luaXRpYWxEb21SZWN0PWgsdGhpcy5fcHJldmlld1RlbXBsYXRlPWYsdGhpcy5fcHJldmll''@;'; put 'put ''d0NsYXNzPXYsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9TSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPUksdGhpcy5fekluZGV4PUd9YXR0YWNoKGwpe3RoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlldygpLGwuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksInNob3dQb3BvdmVy''@;'; put 'put ''ImluIHRoaXMuX3ByZXZpZXcmJnRoaXMuX3ByZXZpZXcuc2hvd1BvcG92ZXIoKX1kZXN0cm95KCl7dGhpcy5fcHJldmlldy5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PW51bGx9c2V0''@;'; put 'put ''VHJhbnNmb3JtKGwpe3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPWx9Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9YWRkQ2xhc3MobCl7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKGwpfWdldFRyYW5z''@;'; put 'put ''aXRpb25EdXJhdGlvbigpe3JldHVybiBmdW5jdGlvbiBPRmUoYyl7Y29uc3QgbD1nZXRDb21wdXRlZFN0eWxlKGMpLGE9TVkobCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLGQ9YS5maW5kKE09PiJ0cmFuc2Zvcm0iPT09TXx8ImFsbCI9PT1NKTtpZighZClyZXR1cm4gMDtjb25zdCBoPWEuaW5k''@;'; put 'put ''ZXhPZihkKSxmPU1ZKGwsInRyYW5zaXRpb24tZHVyYXRpb24iKSx2PU1ZKGwsInRyYW5zaXRpb24tZGVsYXkiKTtyZXR1cm4gYTFlKGZbaF0pK2ExZSh2W2hdKX0odGhpcy5fcHJldmlldyl9YWRkRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcihsLGEp''@;'; put 'put ''fXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhKX1fY3JlYXRlUHJldmlldygpe2NvbnN0IGw9dGhpcy5fcHJldmlld1RlbXBsYXRlLGE9dGhpcy5fcHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYoZCYm''@;'; put 'put ''bCl7Y29uc3QgZj1sLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsRG9tUmVjdDpudWxsLHY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7di5kZXRlY3RDaGFuZ2VzKCksaD1pMWUodix0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmll''@;'; put 'put ''dz12LGwubWF0Y2hTaXplP1gwZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPUlMKHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPWUxZSh0aGlzLl9yb290RWxlbWVudCksWDBlKGgsdGhpcy5faW5pdGlhbERvbVJlY3QpLHRo''@;'; put 'put ''aXMuX2luaXRpYWxUcmFuc2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4gd1koaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgiOnRo''@;'; put 'put ''aXMuX3pJbmRleCsiIn0sUEZlKSxJYihoLCExKSxoLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXByZXZpZXciKSxoLnNldEF0dHJpYnV0ZSgicG9wb3ZlciIsIm1hbnVhbCIpLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuX2RpcmVjdGlvbiksYSYmKEFycmF5LmlzQXJyYXkoYSk/YS5mb3JF''@;'; put 'put ''YWNoKGY9PmguY2xhc3NMaXN0LmFkZChmKSk6aC5jbGFzc0xpc3QuYWRkKGEpKSxofX1jb25zdCBvMWU9QWIoe3Bhc3NpdmU6ITB9KSxSTD1BYih7cGFzc2l2ZTohMX0pLHMxZT1BYih7cGFzc2l2ZTohMSxjYXB0dXJlOiEwfSksbDFlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBORmV7''@;'; put 'put ''Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLl9kcm9wQ29udGFpbmVyfHwhdGhpcy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2whPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWwsdGhpcy5fdG9nZ2xlTmF0aXZl''@;'; put 'put ''RHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChhPT5JYihhLGwpKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMuX2NvbmZpZz1hLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuX2RyYWdEcm9wUmVn''@;'; put 'put ''aXN0cnk9dix0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMSx0aGlzLl9tb3ZlRXZlbnRzPW5ldyBXbix0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0''@;'; put 'put ''aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bnVsbCx0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPSEw''@;'; put 'put ''LHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzPW5ldyBTZXQsdGhpcy5fZGlyZWN0aW9uPSJsdHIiLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IFduLHRoaXMuc3RhcnRlZD1uZXcgV24sdGhpcy5yZWxl''@;'; put 'put ''YXNlZD1uZXcgV24sdGhpcy5lbmRlZD1uZXcgV24sdGhpcy5lbnRlcmVkPW5ldyBXbix0aGlzLmV4aXRlZD1uZXcgV24sdGhpcy5kcm9wcGVkPW5ldyBXbix0aGlzLm1vdmVkPXRoaXMuX21vdmVFdmVudHMsdGhpcy5fcG9pbnRlckRvd249TT0+e2lmKHRoaXMuYmVmb3JlU3RhcnRlZC5uZXh0''@;'; put 'put ''KCksdGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IEk9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0kmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEkpJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShJLE0pfWVsc2UgdGhpcy5kaXNhYmxlZHx8dGhp''@;'; put 'put ''cy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZSh0aGlzLl9yb290RWxlbWVudCxNKX0sdGhpcy5fcG9pbnRlck1vdmU9TT0+e2NvbnN0IEk9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKE0pO2lmKCF0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpe2lmKE1hdGguYWJzKEkueC10aGlzLl9w''@;'; put 'put ''aWNrdXBQb3NpdGlvbk9uUGFnZS54KStNYXRoLmFicyhJLnktdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSk+PXRoaXMuX2NvbmZpZy5kcmFnU3RhcnRUaHJlc2hvbGQpe2NvbnN0IEVlPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVsYXko''@;'; put 'put ''TSksamU9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighRWUpcmV0dXJuIHZvaWQgdGhpcy5fZW5kRHJhZ1NlcXVlbmNlKE0pOyghamV8fCFqZS5pc0RyYWdnaW5nKCkmJiFqZS5pc1JlY2VpdmluZygpKSYmKE0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2hhc1N0YXJ0ZWRE''@;'; put 'put ''cmFnZ2luZz0hMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERyYWdTZXF1ZW5jZShNKSkpfXJldHVybn1NLmNhbmNlbGFibGUmJk0ucHJldmVudERlZmF1bHQoKTtjb25zdCBHPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKEkpO2lmKHRoaXMuX2hhc01vdmVk''@;'; put 'put ''PSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj1JLHRoaXMuX3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShHKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoRyxJKTtlbHNle2NvbnN0IGllPXRoaXMuY29uc3RyYWluUG9zaXRp''@;'; put 'put ''b24/dGhpcy5faW5pdGlhbERvbVJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsdWU9dGhpcy5fYWN0aXZlVHJhbnNmb3JtO3VlLng9Ry54LWllLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LHVlLnk9Ry55LWllLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5''@;'; put 'put ''Um9vdEVsZW1lbnRUcmFuc2Zvcm0odWUueCx1ZS55KX10aGlzLl9tb3ZlRXZlbnRzLm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9tb3ZlRXZlbnRzLm5leHQoe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpHLGV2ZW50Ok0sZGlzdGFuY2U6dGhpcy5f''@;'; put 'put ''Z2V0RHJhZ0Rpc3RhbmNlKEcpLGRlbHRhOnRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YX0pfSl9LHRoaXMuX3BvaW50ZXJVcD1NPT57dGhpcy5fZW5kRHJhZ1NlcXVlbmNlKE0pfSx0aGlzLl9uYXRpdmVEcmFnU3RhcnQ9TT0+e2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBJPXRo''@;'; put 'put ''aXMuX2dldFRhcmdldEhhbmRsZShNKTtJJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhJKSYmIXRoaXMuZGlzYWJsZWQmJk0ucHJldmVudERlZmF1bHQoKX1lbHNlIHRoaXMuZGlzYWJsZWR8fE0ucHJldmVudERlZmF1bHQoKX0sdGhpcy53aXRoUm9vdEVsZW1lbnQobCkud2l0aFBhcmVu''@;'; put 'put ''dChhLnBhcmVudERyYWdSZWZ8fG51bGwpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgUTBlKGQpLHYucmVnaXN0ZXJEcmFnSXRlbSh0aGlzKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnR9Z2V0VmlzaWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp0aGlzLmdldFJvb3RFbGVtZW50KCl9d2l0aEhhbmRsZXMobCl7dGhpcy5faGFuZGxlcz1sLm1hcChkPT5FZChkKSksdGhpcy5faGFuZGxlcy5m''@;'; put 'put ''b3JFYWNoKGQ9PkliKGQsdGhpcy5kaXNhYmxlZCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5mb3JFYWNoKGQ9Pnt0aGlzLl9oYW5kbGVzLmluZGV4T2YoZCk+LTEmJmEuYWRkKGQpfSks''@;'; put 'put ''dGhpcy5fZGlzYWJsZWRIYW5kbGVzPWEsdGhpc313aXRoUHJldmlld1RlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bCx0aGlzfXdpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWwsdGhpc313aXRoUm9vdEVs''@;'; put 'put ''ZW1lbnQobCl7Y29uc3QgYT1FZChsKTtyZXR1cm4gYSE9PXRoaXMuX3Jvb3RFbGVtZW50JiYodGhpcy5fcm9vdEVsZW1lbnQmJnRoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUkwpLGEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sbzFlKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LFJMKX0pLHRo''@;'; put 'put ''aXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWEpLHR5cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxl''@;'; put 'put ''bWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KGwpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bD9FZChsKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5j''@;'; put 'put ''aGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKSkpLHRoaXN9d2l0aFBhcmVudChsKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1sLHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMu''@;'; put 'put ''X3Jvb3RFbGVtZW50KSx0aGlzLmlzRHJhZ2dpbmcoKSYmdGhpcy5fcm9vdEVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX2FuY2hvcj8ucmVtb3ZlKCksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURy''@;'; put 'put ''YWdJdGVtKHRoaXMpLHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuc3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVsZWFzZWQuY29tcGxldGUoKSx0aGlzLmVuZGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhp''@;'; put 'put ''cy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLl9tb3ZlRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXMuY2xlYXIoKSx0aGlzLl9kcm9wQ29udGFpbmVyPXZvaWQgMCx0aGlzLl9yZXNpemVTdWJzY3Jp''@;'; put 'put ''cHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQ9dGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9dGhpcy5fcHJldmlld1RlbXBsYXRlPXRoaXMu''@;'; put 'put ''X2FuY2hvcj10aGlzLl9wYXJlbnREcmFnUmVmPW51bGx9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlz''@;'; put 'put ''Ll9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRpc2FibGVIYW5kbGUobCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZihsKT4tMSYm''@;'; put 'put ''KHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQobCksSWIobCwhMCkpfWVuYWJsZUhhbmRsZShsKXt0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZShsKSxJYihsLHRoaXMuZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLl9kaXJlY3Rpb249bCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcihsKXt0aGlzLl9kcm9wQ29udGFpbmVyPWx9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJhbnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJu''@;'; put 'put ''e3g6bC54LHk6bC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD1sLngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PWwueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBs''@;'; put 'put ''eVJvb3RFbGVtZW50VHJhbnNmb3JtKGwueCxsLnkpLHRoaXN9d2l0aFByZXZpZXdDb250YWluZXIobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9bCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlv''@;'; put 'put ''bjtsJiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpLGwpfV9yZW1vdmVMaXN0ZW5lcnMoKXt0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRo''@;'; put 'put ''aXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dldFNoYWRvd1Jvb3QoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLHUxZSxzMWUpfV9kZXN0cm95UHJldmlldygpe3Ro''@;'; put 'put ''aXMuX3ByZXZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRlcigpe3RoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51''@;'; put 'put ''bGx9X2VuZERyYWdTZXF1ZW5jZShsKXtpZih0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcykmJih0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rp''@;'; put 'put ''b25zKCksdGhpcy5faGFuZGxlcyYmKHRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPXRoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0KSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpKWlmKHRoaXMucmVsZWFzZWQubmV4dCh7c291cmNlOnRoaXMsZXZl''@;'; put 'put ''bnQ6bH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJvcENvbnRhaW5lci5fc3RvcFNjcm9sbGluZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpLnRoZW4oKCk9Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5z''@;'; put 'put ''aW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLng7Y29uc3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7dGhpcy5fcGFzc2l2ZVRyYW5z''@;'; put 'put ''Zm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShhKSxkcm9wUG9pbnQ6YSxldmVudDpsfSl9KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5z''@;'; put 'put ''aW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfX1fc3RhcnREcmFnU2VxdWVuY2UobCl7VHgobCkmJih0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWU9RGF0ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fZ2V0U2hhZG93Um9vdCgpLGQ9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihhJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix1MWUsczFlKX0pLGQpe2NvbnN0IGg9dGhpcy5fcm9vdEVsZW1lbnQsZj1oLnBhcmVu''@;'; put 'put ''dE5vZGUsdj10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxNPXRoaXMuX2FuY2hvcj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpO2YuaW5zZXJ0QmVmb3JlKE0saCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1o''@;'; put 'put ''LnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz1uZXcgRkZlKHRoaXMuX2RvY3VtZW50LHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2RpcmVjdGlvbix0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9wcmV2aWV3VGVtcGxhdGV8fG51bGwsdGhpcy5wcmV2aWV3Q2xhc3N8fG51bGws''@;'; put 'put ''dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSx0aGlzLl9jb25maWcuekluZGV4fHwxZTMpLHRoaXMuX3ByZXZpZXcuYXR0YWNoKHRoaXMuX2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChmLGEpKSxxMGUoaCwhMSxsMWUpLHRoaXMuX2RvY3VtZW50LmJv''@;'; put 'put ''ZHkuYXBwZW5kQ2hpbGQoZi5yZXBsYWNlQ2hpbGQodixoKSksdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSxkLnN0YXJ0KCksdGhpcy5faW5pdGlhbENvbnRhaW5lcj1kLHRoaXMuX2luaXRpYWxJbmRleD1kLmdldEl0ZW1JbmRleCh0aGlzKX1lbHNlIHRoaXMuc3Rh''@;'; put 'put ''cnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10aGlzLl9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZShkP2QuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxpemVEcmFnU2VxdWVuY2Uo''@;'; put 'put ''bCxhKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZhLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGQ9dGhpcy5pc0RyYWdnaW5nKCksaD1UeChhKSxmPSFoJiYwIT09YS5idXR0b24sdj10aGlzLl9yb290RWxlbWVudCxNPXhMKGEpLEk9IWgmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSYmdGhpcy5f''@;'; put 'put ''bGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLEc9aD9mdW5jdGlvbiBRUGUoYyl7Y29uc3QgbD1jLnRvdWNoZXMmJmMudG91Y2hlc1swXXx8Yy5jaGFuZ2VkVG91Y2hlcyYmYy5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCFsfHwtMSE9PWwuaWRlbnRpZmllcnx8bnVsbCE9bC5y''@;'; put 'put ''YWRpdXNYJiYxIT09bC5yYWRpdXNYfHxudWxsIT1sLnJhZGl1c1kmJjEhPT1sLnJhZGl1c1kpfShhKTpmdW5jdGlvbiBKUGUoYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbnN8fDA9PT1jLmRldGFpbH0oYSk7aWYoTSYmTS5kcmFnZ2FibGUmJiJtb3VzZWRvd24iPT09YS50eXBlJiZhLnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCksZHx8Znx8SXx8RylyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IHllPXYuc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9eWUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLHllLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3Bh''@;'; put 'put ''cmVudCJ9dGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9u''@;'; put 'put ''PXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJVcCksdGhpcy5fc2Nyb2xs''@;'; put 'put ''U3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoeWU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKHllKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhpcy5fYm91bmRhcnlSZWN0PUNZKHRoaXMuX2JvdW5k''@;'; put 'put ''YXJ5RWxlbWVudCkpO2NvbnN0IGllPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD1pZSYmaWUudGVtcGxhdGUmJiFpZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlzLl9pbml0aWFsRG9t''@;'; put 'put ''UmVjdCxsLGEpO2NvbnN0IHVlPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9z''@;'; put 'put ''aXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6dWUueCx5OnVlLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRpZmFjdHMobCl7cTBlKHRoaXMuX3Jvb3RFbGVtZW50''@;'; put 'put ''LCEwLGwxZSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9pbml0aWFsRG9tUmVjdD10aGlzLl9ib3VuZGFyeVJl''@;'; put 'put ''Y3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmdab25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRoaXMpLGg9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpLGY9dGhp''@;'; put 'put ''cy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLHY9YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZCxwcmV2aW91''@;'; put 'put ''c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlzLl9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6dixkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSxhLmRyb3AodGhpcyxkLHRoaXMuX2luaXRpYWxJ''@;'; put 'put ''bmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLHYsZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhpcy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7eDpkLHk6aH0pe2xldCBmPXRoaXMuX2luaXRpYWxDb250YWluZXIuX2dldFNp''@;'; put 'put ''YmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVyIT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29udGFpbmVyKGwsYSkmJihmPXRoaXMuX2luaXRpYWxDb250YWluZXIpLGYmJmYh''@;'; put 'put ''PT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRhaW5lci5leGl0KHRoaXMpLHRoaXMuX2Ryb3BDb250YWluZXI9Zix0aGlzLl9k''@;'; put 'put ''cm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNvcnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjpmLGN1cnJlbnRJbmRleDpmLmdldEl0ZW1J''@;'; put 'put ''bmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhpcyxsLGEsdGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhKSx0aGlzLmNvbnN0''@;'; put 'put ''cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55KSl9X2FuaW1hdGVQcmV2aWV3VG9QbGFj''@;'; put 'put ''ZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmFkZENsYXNzKCJjZGstZHJhZy1hbmltYXRpbmciKSx0aGlzLl9hcHBseVByZXZp''@;'; put 'put ''ZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPXRoaXMuX3ByZXZpZXcuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKCk7cmV0dXJuIDA9PT1hP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9dj0+''@;'; put 'put ''eyghdnx8eEwodik9PT10aGlzLl9wcmV2aWV3JiYidHJhbnNmb3JtIj09PXYucHJvcGVydHlOYW1lKSYmKHRoaXMuX3ByZXZpZXc/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpLGQoKSxjbGVhclRpbWVvdXQoZikpfSxmPXNldFRpbWVvdXQoaCwxLjUqYSk7dGhpcy5f''@;'; put 'put ''cHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKX0pKX1fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCl7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLGE9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGQ7cmV0dXJuIGE/KHRoaXMuX3BsYWNlaG9sZGVyUmVm''@;'; put 'put ''PWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSxsLmNvbnRleHQpLHRoaXMuX3BsYWNlaG9sZGVyUmVmLmRldGVjdENoYW5nZXMoKSxkPWkxZSh0aGlzLl9wbGFjZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOmQ9ZTFlKHRoaXMuX3Jvb3RFbGVtZW50KSxkLnN0eWxlLnBv''@;'; put 'put ''aW50ZXJFdmVudHM9Im5vbmUiLGQuY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcGxhY2Vob2xkZXIiKSxkfV9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuX3Jvb3RFbGVtZW50P251bGw6YSxmPWg/aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTps''@;'; put 'put ''LHY9VHgoZCk/ZC50YXJnZXRUb3VjaGVzWzBdOmQsTT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3g6Zi5sZWZ0LWwubGVmdCsodi5wYWdlWC1mLmxlZnQtTS5sZWZ0KSx5OmYudG9wLWwudG9wKyh2LnBhZ2VZLWYudG9wLU0udG9wKX19X2dldFBvaW50ZXJQb3Np''@;'; put 'put ''dGlvbk9uUGFnZShsKXtjb25zdCBhPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxkPVR4KGwpP2wudG91Y2hlc1swXXx8bC5jaGFuZ2VkVG91Y2hlc1swXXx8e3BhZ2VYOjAscGFnZVk6MH06bCxoPWQucGFnZVgtYS5sZWZ0LGY9ZC5wYWdlWS1hLnRvcDtpZih0aGlzLl9vd25l''@;'; put 'put ''clNWR0VsZW1lbnQpe2NvbnN0IHY9dGhpcy5fb3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpO2lmKHYpe2NvbnN0IE09dGhpcy5fb3duZXJTVkdFbGVtZW50LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIE0ueD1oLE0ueT1mLE0ubWF0cml4VHJhbnNmb3JtKHYuaW52ZXJzZSgpKX19cmV0''@;'; put 'put ''dXJue3g6aCx5OmZ9fV9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXI/dGhpcy5fZHJvcENvbnRhaW5lci5sb2NrQXhpczpudWxsO2xldHt4OmQseTpofT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuY29uc3RyYWluUG9zaXRp''@;'; put 'put ''b24obCx0aGlzLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50KTpsO2lmKCJ4Ij09PXRoaXMubG9ja0F4aXN8fCJ4Ij09PWE/aD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBv''@;'; put 'put ''c2l0aW9uSW5FbGVtZW50Lnk6MCk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWEpJiYoZD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lng6MCkpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7''@;'; put 'put ''Y29uc3R7eDpmLHk6dn09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj97eDowLHk6MH06dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQsTT10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOkksaGVpZ2h0Okd9PXRoaXMuX2dldFByZXZpZXdSZWN0KCksaWU9TS50b3Ardix1ZT1NLmJvdHRvbS0o''@;'; put 'put ''Ry12KTtkPWMxZShkLE0ubGVmdCtmLE0ucmlnaHQtKEktZikpLGg9YzFlKGgsaWUsdWUpfXJldHVybnt4OmQseTpofX1fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKGwpe2NvbnN0e3g6YSx5OmR9PWwsaD10aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEsZj10aGlzLl9wb2ludGVyUG9z''@;'; put 'put ''aXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2Usdj1NYXRoLmFicyhhLWYueCksTT1NYXRoLmFicyhkLWYueSk7cmV0dXJuIHY+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLng9YT5mLng/MTotMSxmLng9YSksTT50aGlzLl9jb25maWcucG9pbnRlckRp''@;'; put 'put ''cmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueT1kPmYueT8xOi0xLGYueT1kKSxofV90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCl7aWYoIXRoaXMuX3Jvb3RFbGVtZW50fHwhdGhpcy5faGFuZGxlcylyZXR1cm47Y29uc3QgbD10aGlzLl9oYW5kbGVzLmxlbmd0aD4wfHwhdGhpcy5p''@;'; put 'put ''c0RyYWdnaW5nKCk7bCE9PXRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQmJih0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPWwsSWIodGhpcy5fcm9vdEVsZW1lbnQsbCkpfV9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyhsKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1v''@;'; put 'put ''dXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUkwpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sbzFlKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LFJMKX1fYXBwbHlSb290RWxlbWVu''@;'; put 'put ''dFRyYW5zZm9ybShsLGEpe2NvbnN0IGQ9SUwobCxhKSxoPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWgudHJhbnNmb3JtJiYibm9uZSIhPWgudHJhbnNmb3JtP2gudHJhbnNmb3JtOiIiKSxoLnRy''@;'; put 'put ''YW5zZm9ybT1ETChkLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saD1JTChsLGEpO3RoaXMuX3ByZXZpZXcuc2V0VHJh''@;'; put 'put ''bnNmb3JtKERMKGgsZCkpfV9nZXREcmFnRGlzdGFuY2UobCl7Y29uc3QgYT10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZTtyZXR1cm4gYT97eDpsLngtYS54LHk6bC55LWEueX06e3g6MCx5OjB9fV9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpe3RoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9w''@;'; put 'put ''cmV2aWV3UmVjdD12b2lkIDAsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCl7bGV0e3g6bCx5OmF9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07aWYoMD09PWwmJjA9PT1hfHx0aGlzLmlzRHJhZ2dpbmcoKXx8IXRoaXMuX2JvdW5k''@;'; put 'put ''YXJ5RWxlbWVudClyZXR1cm47Y29uc3QgZD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXRoaXMuX2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aC53aWR0aCYmMD09PWguaGVpZ2h0fHwwPT09ZC53aWR0aCYmMD09PWQu''@;'; put 'put ''aGVpZ2h0KXJldHVybjtjb25zdCBmPWgubGVmdC1kLmxlZnQsdj1kLnJpZ2h0LWgucmlnaHQsTT1oLnRvcC1kLnRvcCxJPWQuYm90dG9tLWguYm90dG9tO2gud2lkdGg+ZC53aWR0aD8oZj4wJiYobCs9Ziksdj4wJiYobC09dikpOmw9MCxoLmhlaWdodD5kLmhlaWdodD8oTT4wJiYoYSs9TSks''@;'; put 'put ''ST4wJiYoYS09SSkpOmE9MCwobCE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueHx8YSE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSkmJnRoaXMuc2V0RnJlZURyYWdQb3NpdGlvbih7eTphLHg6bH0pfV9nZXREcmFnU3RhcnREZWxheShsKXtjb25zdCBhPXRoaXMuZHJhZ1N0YXJ0RGVsYXk7''@;'; put 'put ''cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6VHgobCk/YS50b3VjaDphP2EubW91c2U6MH1fdXBkYXRlT25TY3JvbGwobCl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2lmKGEpe2NvbnN0IGQ9eEwobCk7dGhpcy5fYm91bmRhcnlSZWN0JiZkIT09dGhp''@;'; put 'put ''cy5fYm91bmRhcnlFbGVtZW50JiZkLmNvbnRhaW5zKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkmJkV4KHRoaXMuX2JvdW5kYXJ5UmVjdCxhLnRvcCxhLmxlZnQpLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngrPWEubGVmdCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55Kz1hLnRvcCx0''@;'; put 'put ''aGlzLl9kcm9wQ29udGFpbmVyfHwodGhpcy5fYWN0aXZlVHJhbnNmb3JtLngtPWEubGVmdCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueS09YS50b3AsdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSkp''@;'; put 'put ''fX1fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldCh0aGlzLl9kb2N1bWVudCk/LnNjcm9sbFBvc2l0aW9ufHx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfV9nZXRTaGFk''@;'; put 'put ''b3dSb290KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3QmJih0aGlzLl9jYWNoZWRTaGFkb3dSb290PU8wZSh0aGlzLl9yb290RWxlbWVudCkpLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChsLGEpe2NvbnN0IGQ9dGhpcy5f''@;'; put 'put ''cHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCI7aWYoInBhcmVudCI9PT1kKXJldHVybiBsO2lmKCJnbG9iYWwiPT09ZCl7Y29uc3QgaD10aGlzLl9kb2N1bWVudDtyZXR1cm4gYXx8aC5mdWxsc2NyZWVuRWxlbWVudHx8aC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8aC5tb3pGdWxsU2NyZWVu''@;'; put 'put ''RWxlbWVudHx8aC5tc0Z1bGxzY3JlZW5FbGVtZW50fHxoLmJvZHl9cmV0dXJuIEVkKGQpfV9nZXRQcmV2aWV3UmVjdCgpe3JldHVybighdGhpcy5fcHJldmlld1JlY3R8fCF0aGlzLl9wcmV2aWV3UmVjdC53aWR0aCYmIXRoaXMuX3ByZXZpZXdSZWN0LmhlaWdodCkmJih0aGlzLl9wcmV2aWV3''@;'; put 'put ''UmVjdD10aGlzLl9wcmV2aWV3P3RoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dGhpcy5faW5pdGlhbERvbVJlY3QpLHRoaXMuX3ByZXZpZXdSZWN0fV9nZXRUYXJnZXRIYW5kbGUobCl7cmV0dXJuIHRoaXMuX2hhbmRsZXMuZmluZChhPT5sLnRhcmdldCYmKGwudGFyZ2V0''@;'; put 'put ''PT09YXx8YS5jb250YWlucyhsLnRhcmdldCkpKX19ZnVuY3Rpb24gYzFlKGMsbCxhKXtyZXR1cm4gTWF0aC5tYXgobCxNYXRoLm1pbihhLGMpKX1mdW5jdGlvbiBUeChjKXtyZXR1cm4idCI9PT1jLnR5cGVbMF19ZnVuY3Rpb24gdTFlKGMpe2MucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBk''@;'; put 'put ''MWUoYyxsLGEpe2NvbnN0IGQ9QXgobCxjLmxlbmd0aC0xKSxoPUF4KGEsYy5sZW5ndGgtMSk7aWYoZD09PWgpcmV0dXJuO2NvbnN0IGY9Y1tkXSx2PWg8ZD8tMToxO2ZvcihsZXQgTT1kO00hPT1oO00rPXYpY1tNXT1jW00rdl07Y1toXT1mfWZ1bmN0aW9uIEF4KGMsbCl7cmV0dXJuIE1hdGgu''@;'; put 'put ''bWF4KDAsTWF0aC5taW4obCxjKSl9Y2xhc3MgQkZle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMub3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9wcmV2aW91c1N3YXA9e2RyYWc6''@;'; put 'put ''bnVsbCxkZWx0YTowLG92ZXJsYXBzOiExfX1zdGFydChsKXt0aGlzLndpdGhJdGVtcyhsKX1zb3J0KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faXRlbVBvc2l0aW9ucyx2PXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCk7aWYoLTE9PT12JiZmLmxlbmd0aD4w''@;'; put 'put ''KXJldHVybiBudWxsO2NvbnN0IE09Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixJPWYuZmluZEluZGV4KHJ0PT5ydC5kcmFnPT09bCksRz1mW3ZdLHVlPUcuY2xpZW50UmVjdCx5ZT1JPnY/MTotMSxFZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgoZltJXS5jbGllbnRSZWN0LHVlLHll''@;'; put 'put ''KSxqZT10aGlzLl9nZXRTaWJsaW5nT2Zmc2V0UHgoSSxmLHllKSxxZT1mLnNsaWNlKCk7cmV0dXJuIGQxZShmLEksdiksZi5mb3JFYWNoKChydCxwdCk9PntpZihxZVtwdF09PT1ydClyZXR1cm47Y29uc3QgZHQ9cnQuZHJhZz09PWwsSnQ9ZHQ/RWU6amUsdm49ZHQ/bC5nZXRQbGFjZWhvbGRl''@;'; put 'put ''ckVsZW1lbnQoKTpydC5kcmFnLmdldFJvb3RFbGVtZW50KCk7cnQub2Zmc2V0Kz1KdCxNPyh2bi5zdHlsZS50cmFuc2Zvcm09REwoYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChydC5vZmZzZXQpfXB4LCAwLCAwKWAscnQuaW5pdGlhbFRyYW5zZm9ybSksRXgocnQuY2xpZW50UmVjdCwwLEp0''@;'; put 'put ''KSk6KHZuLnN0eWxlLnRyYW5zZm9ybT1ETChgdHJhbnNsYXRlM2QoMCwgJHtNYXRoLnJvdW5kKHJ0Lm9mZnNldCl9cHgsIDApYCxydC5pbml0aWFsVHJhbnNmb3JtKSxFeChydC5jbGllbnRSZWN0LEp0LDApKX0pLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz1TWSh1ZSxhLGQpLHRoaXMu''@;'; put 'put ''X3ByZXZpb3VzU3dhcC5kcmFnPUcuZHJhZyx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9TT9oLng6aC55LHtwcmV2aW91c0luZGV4OkksY3VycmVudEluZGV4OnZ9fWVudGVyKGwsYSxkLGgpe2NvbnN0IGY9bnVsbD09aHx8aDwwP3RoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRp''@;'; put 'put ''b24obCxhLGQpOmgsdj10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLE09di5pbmRleE9mKGwpLEk9bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTtsZXQgRz12W2ZdO2lmKEc9PT1sJiYoRz12W2YrMV0pLCFHJiYobnVsbD09Znx8LTE9PT1mfHxmPHYubGVuZ3RoLTEpJiZ0aGlzLl9zaG91bGRFbnRl''@;'; put 'put ''ckFzRmlyc3RDaGlsZChhLGQpJiYoRz12WzBdKSxNPi0xJiZ2LnNwbGljZShNLDEpLEcmJiF0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoRykpe2NvbnN0IGllPUcuZ2V0Um9vdEVsZW1lbnQoKTtpZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShJLGllKSx2LnNwbGljZShm''@;'; put 'put ''LDAsbCl9ZWxzZSBFZCh0aGlzLl9lbGVtZW50KS5hcHBlbmRDaGlsZChJKSx2LnB1c2gobCk7SS5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aEl0ZW1zKGwpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXM9bC5zbGljZSgpLHRoaXMuX2NhY2hlSXRlbVBv''@;'; put 'put ''c2l0aW9ucygpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNhdGU9bH1yZXNldCgpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXMuZm9yRWFjaChsPT57Y29uc3QgYT1sLmdldFJvb3RFbGVtZW50KCk7aWYoYSl7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmQoaD0+''@;'; put 'put ''aC5kcmFnPT09bCk/LmluaXRpYWxUcmFuc2Zvcm07YS5zdHlsZS50cmFuc2Zvcm09ZHx8IiJ9fSksdGhpcy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPVtdLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPW51bGwsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPTAsdGhp''@;'; put 'put ''cy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPSExfWdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKXtyZXR1cm4gdGhpcy5fYWN0aXZlRHJhZ2dhYmxlc31nZXRJdGVtSW5kZXgobCl7cmV0dXJuKCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJiJydGwiPT09dGhpcy5kaXJlY3Rpb24/dGhp''@;'; put 'put ''cy5faXRlbVBvc2l0aW9ucy5zbGljZSgpLnJldmVyc2UoKTp0aGlzLl9pdGVtUG9zaXRpb25zKS5maW5kSW5kZXgoZD0+ZC5kcmFnPT09bCl9dXBkYXRlT25TY3JvbGwobCxhKXt0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtjbGllbnRSZWN0OmR9KT0+e0V4KGQsbCxhKX0pLHRoaXMu''@;'; put 'put ''X2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2RyYWc6ZH0pPT57dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGQpJiZkLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKX0pfV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25zdCBsPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50''@;'; put 'put ''YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLm1hcChhPT57Y29uc3QgZD1hLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6YSxvZmZzZXQ6MCxpbml0aWFsVHJhbnNmb3JtOmQuc3R5bGUudHJhbnNmb3JtfHwiIixjbGllbnRSZWN0OkNZKGQp''@;'; put 'put ''fX0pLnNvcnQoKGEsZCk9Pmw/YS5jbGllbnRSZWN0LmxlZnQtZC5jbGllbnRSZWN0LmxlZnQ6YS5jbGllbnRSZWN0LnRvcC1kLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247bGV0IGY9aD9hLmxl''@;'; put 'put ''ZnQtbC5sZWZ0OmEudG9wLWwudG9wO3JldHVybi0xPT09ZCYmKGYrPWg/YS53aWR0aC1sLndpZHRoOmEuaGVpZ2h0LWwuaGVpZ2h0KSxmfV9nZXRTaWJsaW5nT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixmPWFbbF0uY2xpZW50UmVjdCx2''@;'; put 'put ''PWFbbCstMSpkXTtsZXQgTT1mW2g/IndpZHRoIjoiaGVpZ2h0Il0qZDtpZih2KXtjb25zdCBJPWg/ImxlZnQiOiJ0b3AiLEc9aD8icmlnaHQiOiJib3R0b20iOy0xPT09ZD9NLT12LmNsaWVudFJlY3RbSV0tZltHXTpNKz1mW0ldLXYuY2xpZW50UmVjdFtHXX1yZXR1cm4gTX1fc2hvdWxkRW50''@;'; put 'put ''ZXJBc0ZpcnN0Q2hpbGQobCxhKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5sZW5ndGgpcmV0dXJuITE7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihkWzBdLmRyYWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBd''@;'; put 'put ''KXtjb25zdCB2PWRbZC5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPj12LnJpZ2h0OmE+PXYuYm90dG9tfXtjb25zdCB2PWRbMF0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPD12LmxlZnQ6YTw9di50b3B9fV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbix2PXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZEluZGV4KCh7ZHJhZzpNLGNsaWVudFJlY3Q6SX0pPT5NIT09bCYmKCghaHx8TSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnfHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBz''@;'; put 'put ''fHwoZj9oLng6aC55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihmP2E+PU1hdGguZmxvb3IoSS5sZWZ0KSYmYTxNYXRoLmZsb29yKEkucmlnaHQpOmQ+PU1hdGguZmxvb3IoSS50b3ApJiZkPE1hdGguZmxvb3IoSS5ib3R0b20pKSkpO3JldHVybi0xIT09diYmdGhpcy5fc29ydFBy''@;'; put 'put ''ZWRpY2F0ZSh2LGwpP3Y6LTF9fXZhciBEMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5VUD0xXT0iVVAiLGNbYy5ET1dOPTJdPSJET1dOIixjfShEMnx8e30pLGoxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkxFRlQ9MV09IkxF''@;'; put 'put ''RlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGN9KGoxfHx7fSk7Y2xhc3MgakZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLmRpc2FibGVkPSExLHRoaXMuc29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkPSExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbFN0ZXA9Mix0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5lbnRlcmVkPW5ldyBXbix0aGlzLmV4aXRl''@;'; put 'put ''ZD1uZXcgV24sdGhpcy5kcm9wcGVkPW5ldyBXbix0aGlzLnNvcnRlZD1uZXcgV24sdGhpcy5yZWNlaXZpbmdTdGFydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0b3BwZWQ9bmV3IFduLHRoaXMuX2lzRHJhZ2dpbmc9ITEsdGhpcy5fZHJhZ2dhYmxlcz1bXSx0aGlzLl9zaWJsaW5ncz1bXSx0''@;'; put 'put ''aGlzLl9hY3RpdmVTaWJsaW5ncz1uZXcgU2V0LHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPUQyLk5PTkUsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1qMS5OT05FLHRoaXMuX3N0b3BTY3JvbGxU''@;'; put 'put ''aW1lcnM9bmV3IFduLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbCx0aGlzLl9zdGFydFNjcm9sbEludGVydmFsPSgpPT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIFJGZShjPTAsbD1DTCl7cmV0dXJuIGM8MCYmKGM9MCksVTBlKGMsYyxsKX0oMCxqMGUpLnBpcGUoVjAodGhp''@;'; put 'put ''cy5fc3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IHY9dGhpcy5fc2Nyb2xsTm9kZSxNPXRoaXMuYXV0b1Njcm9sbFN0ZXA7dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1EMi5VUD92LnNjcm9sbEJ5KDAsLU0pOnRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0''@;'; put 'put ''aW9uPT09RDIuRE9XTiYmdi5zY3JvbGxCeSgwLE0pLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1qMS5MRUZUP3Yuc2Nyb2xsQnkoLU0sMCk6dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PWoxLlJJR0hUJiZ2LnNjcm9sbEJ5KE0sMCl9KX0sdGhpcy5lbGVtZW50''@;'; put 'put ''PUVkKGwpLHRoaXMuX2RvY3VtZW50PWQsdGhpcy53aXRoU2Nyb2xsYWJsZVBhcmVudHMoW3RoaXMuZWxlbWVudF0pLGEucmVnaXN0ZXJEcm9wQ29udGFpbmVyKHRoaXMpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgUTBlKGQpLHRoaXMuX3NvcnRTdHJhdGVneT1uZXcgQkZlKHRoaXMuZWxl''@;'; put 'put ''bWVudCxhKSx0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aFNvcnRQcmVkaWNhdGUoKHYsTSk9PnRoaXMuc29ydFByZWRpY2F0ZSh2LE0sdGhpcykpfWRpc3Bvc2UoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fc3RvcFNjcm9sbFRpbWVycy5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0U2Ny''@;'; put 'put ''b2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLnNvcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2''@;'; put 'put ''aW5nU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX2FjdGl2ZVNpYmxpbmdzLmNsZWFyKCksdGhpcy5fc2Nyb2xsTm9kZT1udWxsLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3Zl''@;'; put 'put ''RHJvcENvbnRhaW5lcih0aGlzKX1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmd9c3RhcnQoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpfWVudGVyKGwsYSxkLGgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLG51bGw9''@;'; put 'put ''PWgmJnRoaXMuc29ydGluZ0Rpc2FibGVkJiYoaD10aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCkpLHRoaXMuX3NvcnRTdHJhdGVneS5lbnRlcihsLGEsZCxoKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCksdGhpcy5lbnRlcmVk''@;'; put 'put ''Lm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpcyxjdXJyZW50SW5kZXg6dGhpcy5nZXRJdGVtSW5kZXgobCl9KX1leGl0KGwpe3RoaXMuX3Jlc2V0KCksdGhpcy5leGl0ZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzfSl9ZHJvcChsLGEsZCxoLGYsdixNLEk9e30pe3RoaXMuX3Jlc2V0''@;'; put 'put ''KCksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06bCxjdXJyZW50SW5kZXg6YSxwcmV2aW91c0luZGV4OmQsY29udGFpbmVyOnRoaXMscHJldmlvdXNDb250YWluZXI6aCxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmYsZGlzdGFuY2U6dixkcm9wUG9pbnQ6TSxldmVudDpJfSl9d2l0aEl0ZW1zKGwp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5fZHJhZ2dhYmxlcztyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlcz1sLGwuZm9yRWFjaChkPT5kLl93aXRoRHJvcENvbnRhaW5lcih0aGlzKSksdGhpcy5pc0RyYWdnaW5nKCkmJihhLmZpbHRlcihoPT5oLmlzRHJhZ2dpbmcoKSkuZXZlcnkoaD0+LTE9PT1sLmluZGV4T2Yo''@;'; put 'put ''aCkpP3RoaXMuX3Jlc2V0KCk6dGhpcy5fc29ydFN0cmF0ZWd5LndpdGhJdGVtcyh0aGlzLl9kcmFnZ2FibGVzKSksdGhpc313aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uPWwsdGhpc31jb25uZWN0ZWRUbyhsKXtyZXR1cm4gdGhpcy5fc2libGlu''@;'; put 'put ''Z3M9bC5zbGljZSgpLHRoaXN9d2l0aE9yaWVudGF0aW9uKGwpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kub3JpZW50YXRpb249bCx0aGlzfXdpdGhTY3JvbGxhYmxlUGFyZW50cyhsKXtjb25zdCBhPUVkKHRoaXMuZWxlbWVudCk7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cz0t''@;'; put 'put ''MT09PWwuaW5kZXhPZihhKT9bYSwuLi5sXTpsLnNsaWNlKCksdGhpc31nZXRTY3JvbGxhYmxlUGFyZW50cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHN9Z2V0SXRlbUluZGV4KGwpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVneS5nZXRJdGVtSW5k''@;'; put 'put ''ZXgobCk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpfWlzUmVjZWl2aW5nKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0obCxhLGQsaCl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9kb21SZWN0fHwhSjBlKHRoaXMuX2RvbVJlY3QsLjA1''@;'; put 'put ''LGEsZCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQobCxhLGQsaCk7ZiYmdGhpcy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRleDpmLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmYuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06bH0pfV9zdGFydFNj''@;'; put 'put ''cm9sbGluZ0lmTmVjZXNzYXJ5KGwsYSl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQpcmV0dXJuO2xldCBkLGg9RDIuTk9ORSxmPWoxLk5PTkU7aWYodGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKCh2LE0pPT57TT09PXRoaXMuX2RvY3VtZW50fHwhdi5jbGllbnRS''@;'; put 'put ''ZWN0fHxkfHxKMGUodi5jbGllbnRSZWN0LC4wNSxsLGEpJiYoW2gsZl09ZnVuY3Rpb24gekZlKGMsbCxhLGQsaCl7Y29uc3QgZj1wMWUobCxoKSx2PWcxZShsLGQpO2xldCBNPUQyLk5PTkUsST1qMS5OT05FO2lmKGYpe2NvbnN0IEc9Yy5zY3JvbGxUb3A7Zj09PUQyLlVQP0c+MCYmKE09RDIu''@;'; put 'put ''VVApOmMuc2Nyb2xsSGVpZ2h0LUc+Yy5jbGllbnRIZWlnaHQmJihNPUQyLkRPV04pfWlmKHYpe2NvbnN0IEc9Yy5zY3JvbGxMZWZ0OyJydGwiPT09YT92PT09ajEuUklHSFQ/RzwwJiYoST1qMS5SSUdIVCk6Yy5zY3JvbGxXaWR0aCtHPmMuY2xpZW50V2lkdGgmJihJPWoxLkxFRlQpOnY9PT1q''@;'; put 'put ''MS5MRUZUP0c+MCYmKEk9ajEuTEVGVCk6Yy5zY3JvbGxXaWR0aC1HPmMuY2xpZW50V2lkdGgmJihJPWoxLlJJR0hUKX1yZXR1cm5bTSxJXX0oTSx2LmNsaWVudFJlY3QsdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbixsLGEpLChofHxmKSYmKGQ9TSkpfSksIWgmJiFmKXtjb25zdHt3aWR0''@;'; put 'put ''aDp2LGhlaWdodDpNfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLEk9e3dpZHRoOnYsaGVpZ2h0Ok0sdG9wOjAscmlnaHQ6dixib3R0b206TSxsZWZ0OjB9O2g9cDFlKEksYSksZj1nMWUoSSxsKSxkPXdpbmRvd31kJiYoaCE9PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGly''@;'; put 'put ''ZWN0aW9ufHxmIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ZCE9PXRoaXMuX3Njcm9sbE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249aCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWYsdGhpcy5fc2Nyb2xsTm9kZT1kLChofHxmKSYmZD90''@;'; put 'put ''aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhpcy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3RoaXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9kcmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCBsPUVkKHRoaXMuZWxl''@;'; put 'put ''bWVudCkuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRoaXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlwZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9Im5vbmUi''@;'; put 'put ''LHRoaXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQYXJlbnRQb3Np''@;'; put 'put ''dGlvbnMoKXtjb25zdCBsPUVkKHRoaXMuZWxlbWVudCk7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyksdGhpcy5fZG9tUmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldChsKS5jbGllbnRSZWN0fV9yZXNldCgpe3RoaXMu''@;'; put 'put ''X2lzRHJhZ2dpbmc9ITE7Y29uc3QgbD1FZCh0aGlzLmVsZW1lbnQpLnN0eWxlO2wuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxTY3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RvcFJlY2VpdmluZyh0aGlzKSksdGhpcy5fc29y''@;'; put 'put ''dFN0cmF0ZWd5LnJlc2V0KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2lzT3ZlckNvbnRhaW5lcihsLGEpe3JldHVybiBudWxsIT10aGlzLl9kb21SZWN0''@;'; put 'put ''JiZTWSh0aGlzLl9kb21SZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxhLGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5kKGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShsLGEsZCl7aWYoIXRoaXMuX2RvbVJlY3R8fCFTWSh0aGlzLl9k''@;'; put 'put ''b21SZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10aGlzLl9nZXRTaGFkb3dSb290KCkuZWxlbWVudEZyb21Qb2ludChhLGQpO2lmKCFoKXJldHVybiExO2NvbnN0IGY9RWQodGhpcy5lbGVtZW50KTtyZXR1cm4gaD09PWZ8fGYuY29udGFp''@;'; put 'put ''bnMoaCl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5oYXMobCkmJmEuZXZlcnkoaD0+dGhpcy5lbnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoaCk+LTEpJiYoZC5hZGQobCksdGhpcy5fY2FjaGVQYXJl''@;'; put 'put ''bnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhpcy5fYWN0aXZlU2libGluZ3MuZGVsZXRlKGwpLHRoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJv''@;'; put 'put ''cFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRoaXMuX3NvcnRTdHJhdGVneS51cGRhdGVPblNjcm9sbChhLnRv''@;'; put 'put ''cCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpfSl9X2dldFNoYWRvd1Jvb3QoKXtpZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD1PMGUoRWQodGhpcy5lbGVtZW50KSk7dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1s''@;'; put 'put ''fHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKXtjb25zdCBsPXRoaXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmlsdGVyKGE9PmEuaXNEcmFnZ2luZygpKTt0aGlzLl9zaWJsaW5n''@;'; put 'put ''cy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiBwMWUoYyxsKXtjb25zdHt0b3A6YSxib3R0b206ZCxoZWlnaHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9EMi5VUDpsPj1kLWYmJmw8PWQrZj9EMi5ET1dOOkQyLk5PTkV9ZnVuY3Rp''@;'; put 'put ''b24gZzFlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9qMS5MRUZUOmw+PWQtZiYmbDw9ZCtmP2oxLlJJR0hUOmoxLk5PTkV9Y29uc3QgTEw9QWIoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLE9MPW5ldyBTZXQ7bGV0''@;'; put 'put ''IFVGZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGhvc3RBdHRyczpbImNkay1kcmFnLXJlc2V0cy1jb250''@;'; put 'put ''YWluZXIiLCIiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltxSV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXt9LHN0eWxlczpbIkBsYXllciBjZGstcmVzZXRzey5jZGstZHJhZy1wcmV2aWV3e2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Y29s''@;'; put 'put ''b3I6aW5oZXJpdH19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9fXJldHVybiBjfSkoKSxaRmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9uZT1hLHRoaXMuX2FwcFJlZj1maShxNCksdGhpcy5fZW52aXJvbm1lbnRJbmplY3Rvcj1maSho''@;'; put 'put ''YyksdGhpcy5fZHJvcEluc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2RyYWdJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzPVtdLHRoaXMuX2dsb2JhbExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlPWg9PmguaXNEcmFnZ2luZygpLHRoaXMu''@;'; put 'put ''cG9pbnRlck1vdmU9bmV3IFduLHRoaXMucG9pbnRlclVwPW5ldyBXbix0aGlzLnNjcm9sbD1uZXcgV24sdGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiZoLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuX3BlcnNp''@;'; put 'put ''c3RlbnRUb3VjaG1vdmVMaXN0ZW5lcj1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc29tZSh0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZSkmJmgucHJldmVudERlZmF1bHQoKSx0aGlzLnBvaW50ZXJNb3ZlLm5leHQoaCkp''@;'; put 'put ''fSx0aGlzLl9kb2N1bWVudD1kfXJlZ2lzdGVyRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmhhcyhhKXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQoYSl9cmVnaXN0ZXJEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZChhKSwxPT09dGhpcy5fZHJhZ0luc3Rh''@;'; put 'put ''bmNlcy5zaXplJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixMTCl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJ''@;'; put 'put ''bnN0YW5jZXMuZGVsZXRlKGEpfXJlbW92ZURyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZGVsZXRlKGEpLHRoaXMuc3RvcERyYWdnaW5nKGEpLDA9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIs''@;'; put 'put ''dGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLExMKX1zdGFydERyYWdnaW5nKGEsZCl7aWYoISh0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTEpJiYodGhpcy5fbG9hZFJlc2V0cygpLHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMucHVzaChhKSwxPT09dGhp''@;'; put 'put ''cy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgpKXtjb25zdCBoPWQudHlwZS5zdGFydHNXaXRoKCJ0b3VjaCIpO3RoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoaD8idG91Y2hlbmQiOiJtb3VzZXVwIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJVcC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5z''@;'; put 'put ''ZXQoInNjcm9sbCIse2hhbmRsZXI6Zj0+dGhpcy5zY3JvbGwubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzZWxlY3RzdGFydCIse2hhbmRsZXI6dGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nLG9wdGlvbnM6TEx9KSxofHx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KCJtb3Vz''@;'; put 'put ''ZW1vdmUiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlck1vdmUubmV4dChmKSxvcHRpb25zOkxMfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGYsdik9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHYs''@;'; put 'put ''Zi5oYW5kbGVyLGYub3B0aW9ucyl9KX0pfX1zdG9wRHJhZ2dpbmcoYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc3BsaWNlKGQsMSksMD09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVu''@;'; put 'put ''Z3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpKX1pc0RyYWdnaW5nKGEpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTF9c2Nyb2xsZWQoYSl7Y29uc3QgZD1bdGhpcy5zY3JvbGxdO3JldHVybiBhJiZhIT09dGhpcy5fZG9jdW1lbnQmJmQucHVz''@;'; put 'put ''aChuZXcgWHQoaD0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj1NPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJmgubmV4dChNKX07cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix2LCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigic2Nyb2xsIix2LCEwKX19KSkpLF94KC4uLmQpfW5nT25EZXN0cm95KCl7dGhpcy5fZHJhZ0luc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJhZ0l0ZW0oYSkpLHRoaXMuX2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyb3BDb250YWluZXIoYSkp''@;'; put 'put ''LHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9kb2N1bWVudC5yZW1v''@;'; put 'put ''dmVFdmVudExpc3RlbmVyKGQsYS5oYW5kbGVyLGEub3B0aW9ucyl9KSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuY2xlYXIoKX1fbG9hZFJlc2V0cygpe2lmKCFPTC5oYXModGhpcy5fYXBwUmVmKSl7T0wuYWRkKHRoaXMuX2FwcFJlZik7Y29uc3QgYT1mdW5jdGlvbiBkX2UoYyxsKXtjb25zdCBh''@;'; put 'put ''PVZvKGMpLGQ9bC5lbGVtZW50SW5qZWN0b3J8fEgzKCk7cmV0dXJuIG5ldyBrOChhKS5jcmVhdGUoZCxsLnByb2plY3RhYmxlTm9kZXMsbC5ob3N0RWxlbWVudCxsLmVudmlyb25tZW50SW5qZWN0b3IpfShVRmUse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5fZW52aXJvbm1lbnRJbmplY3Rv''@;'; put 'put ''cn0pO3RoaXMuX2FwcFJlZi5vbkRlc3Ryb3koKCk9PntPTC5kZWxldGUodGhpcy5fYXBwUmVmKSwwPT09T0wuc2l6ZSYmYS5kZXN0cm95KCl9KX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoV2EpLHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgV0ZlPXtkcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjV9O2xldCBQTD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX2RvY3VtZW50PWEsdGhpcy5fbmdab25lPWQsdGhpcy5fdmlld3BvcnRSdWxlcj1oLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9Zn1jcmVhdGVEcmFnKGEsZD1XRmUpe3JldHVybiBuZXcgTkZlKGEsZCx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUs''@;'; put 'put ''dGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KX1jcmVhdGVEcm9wTGlzdChhKXtyZXR1cm4gbmV3IGpGZShhLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIpfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSx4cihXYSkseHIoQUwpLHhyKFpGZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGt4''@;'; put 'put ''PW5ldyBNdCgiQ0RLX0RSQUdfUEFSRU5UIiksbTFlPW5ldyBNdCgiQ2RrRHJhZ0hhbmRsZSIpO2xldCB2MWU9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWEsdGhpcy5fc3RhdGVDaGFuZ2Vz''@;'; put 'put ''Lm5leHQodGhpcyl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9wYXJlbnREcmFnPWQsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBXbix0aGlzLl9kaXNhYmxlZD0hMSxkPy5fYWRkSGFuZGxlKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcGFyZW50RHJhZz8uX3JlbW92''@;'; put 'put ''ZUhhbmRsZSh0aGlzKSx0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2Uoa3gsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNk''@;'; put 'put ''a0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6e2Rpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiLHMxXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEo''@;'; put 'put ''W3twcm92aWRlOm0xZSx1c2VFeGlzdGluZzpjfV0pLFdsXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeFk9bmV3IE10KCJDREtfRFJBR19DT05GSUciKSxFWT1uZXcgTXQoIkNka0Ryb3BMaXN0Iik7bGV0IFRZPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX2RyYWdJbnN0YW5jZXM9W119Z2V0''@;'; put 'put ''IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl9kcmFnUmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkfWNvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYsdixNLEksRyxpZSx1ZSx5ZSl7dGhpcy5lbGVtZW50PWEsdGhpcy5kcm9wQ29udGFpbmVyPWQsdGhpcy5fbmdab25lPWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZj12LHRoaXMuX2Rpcj1JLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWllLHRoaXMuX3NlbGZIYW5kbGU9dWUsdGhp''@;'; put 'put ''cy5fcGFyZW50RHJhZz15ZSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2hhbmRsZXM9bmV3IGVpKFtdKSx0aGlzLnN0YXJ0ZWQ9bmV3IEtyLHRoaXMucmVsZWFzZWQ9bmV3IEtyLHRoaXMuZW5kZWQ9bmV3IEtyLHRoaXMuZW50ZXJlZD1uZXcgS3IsdGhpcy5leGl0ZWQ9bmV3IEtyLHRo''@;'; put 'put ''aXMuZHJvcHBlZD1uZXcgS3IsdGhpcy5tb3ZlZD1uZXcgWHQoRWU9Pntjb25zdCBqZT10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoTHIocWU9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOnFlLnBvaW50ZXJQb3NpdGlvbixldmVudDpxZS5ldmVudCxkZWx0YTpxZS5kZWx0YSxkaXN0''@;'; put 'put ''YW5jZTpxZS5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKEVlKTtyZXR1cm4oKT0+e2plLnVuc3Vic2NyaWJlKCl9fSksdGhpcy5fZHJhZ1JlZj1HLmNyZWF0ZURyYWcoYSx7ZHJhZ1N0YXJ0VGhyZXNob2xkOk0mJm51bGwhPU0uZHJhZ1N0YXJ0VGhyZXNob2xkP00uZHJhZ1N0YXJ0VGhyZXNob2xk''@;'; put 'put ''OjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDpNJiZudWxsIT1NLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ/TS5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjUsekluZGV4Ok0/LnpJbmRleH0pLHRoaXMuX2RyYWdSZWYuZGF0YT10aGlzLGMuX2RyYWdJ''@;'; put 'put ''bnN0YW5jZXMucHVzaCh0aGlzKSxNJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhNKSxkJiYodGhpcy5fZHJhZ1JlZi5fd2l0aERyb3BDb250YWluZXIoZC5fZHJvcExpc3RSZWYpLGQuYWRkSXRlbSh0aGlzKSksdGhpcy5fc3luY0lucHV0cyh0aGlzLl9kcmFnUmVmKSx0aGlzLl9oYW5kbGVFdmVu''@;'; put 'put ''dHModGhpcy5fZHJhZ1JlZil9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCl9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRSb290RWxlbWVudCgpfXJlc2V0KCl7dGhpcy5fZHJhZ1JlZi5y''@;'; put 'put ''ZXNldCgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbihhKXt0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24oYSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbmdab25lLnJ1''@;'; put 'put ''bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWWYoMSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSx0aGlzLl9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpLHRoaXMuZnJlZURyYWdQb3NpdGlv''@;'; put 'put ''biYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9KX0pfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5yb290RWxlbWVudFNlbGVjdG9yLGg9YS5mcmVlRHJhZ1Bvc2l0aW9uO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290''@;'; put 'put ''RWxlbWVudCgpLGgmJiFoLmZpcnN0Q2hhbmdlJiZ0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfW5nT25EZXN0cm95KCl7dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIucmVt''@;'; put 'put ''b3ZlSXRlbSh0aGlzKTtjb25zdCBhPWMuX2RyYWdJbnN0YW5jZXMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcmFnSW5zdGFuY2VzLnNwbGljZShhLDEpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2hhbmRsZXMuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQu''@;'; put 'put ''bmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2RyYWdSZWYuZGlzcG9zZSgpfSl9X2FkZEhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKTtkLnB1c2goYSksdGhpcy5faGFuZGxlcy5uZXh0KGQpfV9yZW1vdmVIYW5kbGUoYSl7Y29uc3QgZD10''@;'; put 'put ''aGlzLl9oYW5kbGVzLmdldFZhbHVlKCksaD1kLmluZGV4T2YoYSk7aD4tMSYmKGQuc3BsaWNlKGgsMSksdGhpcy5faGFuZGxlcy5uZXh0KGQpKX1fc2V0UHJldmlld1RlbXBsYXRlKGEpe3RoaXMuX3ByZXZpZXdUZW1wbGF0ZT1hfV9yZXNldFByZXZpZXdUZW1wbGF0ZShhKXthPT09dGhpcy5f''@;'; put 'put ''cHJldmlld1RlbXBsYXRlJiYodGhpcy5fcHJldmlld1RlbXBsYXRlPW51bGwpfV9zZXRQbGFjZWhvbGRlclRlbXBsYXRlKGEpe3RoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9YX1fcmVzZXRQbGFjZWhvbGRlclRlbXBsYXRlKGEpe2E9PT10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlJiYodGhp''@;'; put 'put ''cy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1udWxsKX1fdXBkYXRlUm9vdEVsZW1lbnQoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O2xldCBkPWE7dGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiYoZD12b2lkIDAhPT1hLmNsb3Nlc3Q/YS5jbG9zZXN0KHRoaXMucm9vdEVsZW1l''@;'; put 'put ''bnRTZWxlY3Rvcik6YS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3RvcikpLHRoaXMuX2RyYWdSZWYud2l0aFJvb3RFbGVtZW50KGR8fGEpfV9nZXRCb3VuZGFyeUVsZW1lbnQoKXtjb25zdCBhPXRoaXMuYm91bmRhcnlFbGVtZW50O3JldHVybiBhPyJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgYT90aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZXN0KGEpOkVkKGEpOm51bGx9X3N5bmNJbnB1dHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2lmKCFhLmlzRHJhZ2dpbmcoKSl7Y29uc3QgZD10aGlzLl9kaXIsaD10aGlzLmRyYWdTdGFydERl''@;'; put 'put ''bGF5LGY9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUuZGF0YSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGwsdj10''@;'; put 'put ''aGlzLl9wcmV2aWV3VGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5kYXRhLG1hdGNoU2l6ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUubWF0Y2hTaXplLHZpZXdDb250YWluZXI6dGhpcy5fdmll''@;'; put 'put ''d0NvbnRhaW5lclJlZn06bnVsbDthLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuZHJhZ1N0YXJ0RGVsYXk9Im9iamVjdCI9PXR5cGVvZiBoJiZoP2g6ZDcoaCksYS5jb25zdHJhaW5Qb3NpdGlvbj10aGlzLmNvbnN0cmFpblBvc2l0aW9uLGEucHJl''@;'; put 'put ''dmlld0NsYXNzPXRoaXMucHJldmlld0NsYXNzLGEud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLl9nZXRCb3VuZGFyeUVsZW1lbnQoKSkud2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZikud2l0aFByZXZpZXdUZW1wbGF0ZSh2KS53aXRoUHJldmlld0NvbnRhaW5lcih0aGlzLnByZXZpZXdDb250''@;'; put 'put ''YWluZXJ8fCJnbG9iYWwiKSxkJiZhLndpdGhEaXJlY3Rpb24oZC52YWx1ZSl9fSksYS5iZWZvcmVTdGFydGVkLnBpcGUoWWYoMSkpLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX3BhcmVudERyYWcpcmV0dXJuIHZvaWQgYS53aXRoUGFyZW50KHRoaXMuX3BhcmVudERyYWcuX2RyYWdSZWYpO2xl''@;'; put 'put ''dCBkPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtkOyl7aWYoZC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1kcmFnIikpe2Eud2l0aFBhcmVudChjLl9kcmFnSW5zdGFuY2VzLmZpbmQoaD0+aC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ9PT1kKT8uX2RyYWdS''@;'; put 'put ''ZWZ8fG51bGwpO2JyZWFrfWQ9ZC5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHMoYSl7YS5zdGFydGVkLnN1YnNjcmliZShkPT57dGhpcy5zdGFydGVkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0p''@;'; put 'put ''LGEucmVsZWFzZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KX0pLGEuZW5kZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBv''@;'; put 'put ''aW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXMsY3VycmVudEluZGV4OmQuY3VycmVudElu''@;'; put 'put ''ZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1''@;'; put 'put ''cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOmQu''@;'; put 'put ''ZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KX0pfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdTdGFydERlbGF5OmgsY29uc3RyYWluUG9zaXRpb246ZixwcmV2aWV3Q2xhc3M6dixib3VuZGFyeUVsZW1lbnQ6TSxkcmFnZ2luZ0Rp''@;'; put 'put ''c2FibGVkOkkscm9vdEVsZW1lbnRTZWxlY3RvcjpHLHByZXZpZXdDb250YWluZXI6aWV9PWE7dGhpcy5kaXNhYmxlZD1JPz8hMSx0aGlzLmRyYWdTdGFydERlbGF5PWh8fDAsZCYmKHRoaXMubG9ja0F4aXM9ZCksZiYmKHRoaXMuY29uc3RyYWluUG9zaXRpb249ZiksdiYmKHRoaXMucHJldmll''@;'; put 'put ''d0NsYXNzPXYpLE0mJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1NKSxHJiYodGhpcy5yb290RWxlbWVudFNlbGVjdG9yPUcpLGllJiYodGhpcy5wcmV2aWV3Q29udGFpbmVyPWllKX1fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKXt0aGlzLl9oYW5kbGVzLnBpcGUoR3UoYT0+e2NvbnN0IGQ9YS5tYXAo''@;'; put 'put ''aD0+aC5lbGVtZW50KTt0aGlzLl9zZWxmSGFuZGxlJiZ0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJmQucHVzaCh0aGlzLmVsZW1lbnQpLHRoaXMuX2RyYWdSZWYud2l0aEhhbmRsZXMoZCl9KSxWMShhPT5feCguLi5hLm1hcChkPT5kLl9zdGF0ZUNoYW5nZXMucGlwZSh4MihkKSkpKSksVjAo''@;'; put 'put ''dGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGE9Pntjb25zdCBkPXRoaXMuX2RyYWdSZWYsaD1hLmVsZW1lbnQubmF0aXZlRWxlbWVudDthLmRpc2FibGVkP2QuZGlzYWJsZUhhbmRsZShoKTpkLmVuYWJsZUhhbmRsZShoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFWSwxMiksR2UodnMpLEdlKFdhKSxHZShEbyksR2UoeFksOCksR2UocG0sOCksR2UoUEwpLEdlKEVzKSxHZShtMWUsMTApLEdlKGt4LDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFn''@;'; put 'put ''IiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWciXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIoImNkay1kcmFnLWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGguX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntk''@;'; put 'put ''YXRhOltObi5Ob25lLCJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2NrQXhpczpbTm4uTm9uZSwiY2RrRHJhZ0xvY2tBeGlzIiwibG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVjdG9yOltObi5Ob25lLCJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlF''@;'; put 'put ''bGVtZW50OltObi5Ob25lLCJjZGtEcmFnQm91bmRhcnkiLCJib3VuZGFyeUVsZW1lbnQiXSxkcmFnU3RhcnREZWxheTpbTm4uTm9uZSwiY2RrRHJhZ1N0YXJ0RGVsYXkiLCJkcmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246W05uLk5vbmUsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9u''@;'; put 'put ''IiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiLHMxXSxjb25zdHJhaW5Qb3NpdGlvbjpbTm4uTm9uZSwiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRp''@;'; put 'put ''b24iXSxwcmV2aWV3Q2xhc3M6W05uLk5vbmUsImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOltObi5Ob25lLCJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWluZXIiXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0''@;'; put 'put ''YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVyZWQ6ImNka0RyYWdFbnRlcmVkIixleGl0ZWQ6ImNka0RyYWdFeGl0ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3ZlZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtE''@;'; put 'put ''cmFnIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbZGEoW3twcm92aWRlOmt4LHVzZUV4aXN0aW5nOmN9XSksV2wsd2xdfSl9fXJldHVybiBjfSkoKTtjb25zdCBBWT1uZXcgTXQoIkNka0Ryb3BMaXN0R3JvdXAiKTtsZXQgeTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9p''@;'; put 'put ''dGVtcz1uZXcgU2V0LHRoaXMuZGlzYWJsZWQ9ITF9bmdPbkRlc3Ryb3koKXt0aGlzLl9pdGVtcy5jbGVhcigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''Y2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiLHMxXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJl''@;'; put 'put ''czpbZGEoW3twcm92aWRlOkFZLHVzZUV4aXN0aW5nOmN9XSksV2xdfSl9fXJldHVybiBjfSkoKSxHRmU9MCxiMWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fZHJvcExpc3RzPVtdfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISF0aGlzLl9ncm91cCYmdGhpcy5f''@;'; put 'put ''Z3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Ryb3BMaXN0UmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkPWF9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7dGhpcy5lbGVtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aCx0aGlzLl9zY3JvbGxEaXNwYXRjaGVy''@;'; put 'put ''PWYsdGhpcy5fZGlyPXYsdGhpcy5fZ3JvdXA9TSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuY29ubmVjdGVkVG89W10sdGhpcy5pZD0iY2RrLWRyb3AtbGlzdC0iK0dGZSsrLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5kcm9w''@;'; put 'put ''cGVkPW5ldyBLcix0aGlzLmVudGVyZWQ9bmV3IEtyLHRoaXMuZXhpdGVkPW5ldyBLcix0aGlzLnNvcnRlZD1uZXcgS3IsdGhpcy5fdW5zb3J0ZWRJdGVtcz1uZXcgU2V0LHRoaXMuX2Ryb3BMaXN0UmVmPWQuY3JlYXRlRHJvcExpc3QoYSksdGhpcy5fZHJvcExpc3RSZWYuZGF0YT10aGlzLEkm''@;'; put 'put ''JnRoaXMuX2Fzc2lnbkRlZmF1bHRzKEkpLHRoaXMuX2Ryb3BMaXN0UmVmLmVudGVyUHJlZGljYXRlPShHLGllKT0+dGhpcy5lbnRlclByZWRpY2F0ZShHLmRhdGEsaWUuZGF0YSksdGhpcy5fZHJvcExpc3RSZWYuc29ydFByZWRpY2F0ZT0oRyxpZSx1ZSk9PnRoaXMuc29ydFByZWRpY2F0ZShH''@;'; put 'put ''LGllLmRhdGEsdWUuZGF0YSksdGhpcy5fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24odGhpcy5fZHJvcExpc3RSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcm9wTGlzdFJlZiksYy5fZHJvcExpc3RzLnB1c2godGhpcyksTSYmTS5faXRlbXMuYWRkKHRoaXMpfWFkZEl0ZW0oYSl7''@;'; put 'put ''dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9cmVtb3ZlSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmRlbGV0ZShhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMu''@;'; put 'put ''X3N5bmNJdGVtc1dpdGhSZWYoKX1nZXRTb3J0ZWRJdGVtcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3Vuc29ydGVkSXRlbXMpLnNvcnQoKGEsZCk9PmEuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkLl9kcmFnUmVmLmdldFZpc2libGVF''@;'; put 'put ''bGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT1jLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcm9wTGlzdHMuc3BsaWNlKGEsMSksdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5kZWxl''@;'; put 'put ''dGUodGhpcyksdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVhcigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bvc2UoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbihhKXt0aGlzLl9kaXImJnRoaXMuX2Rp''@;'; put 'put ''ci5jaGFuZ2UucGlwZSh4Mih0aGlzLl9kaXIudmFsdWUpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShkPT5hLndpdGhEaXJlY3Rpb24oZCkpLGEuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIGlGZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShj''@;'; put 'put ''KT9jOltjXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGg9PiJzdHJpbmciPT10eXBlb2YgaD9jLl9kcm9wTGlzdHMuZmluZCh2PT52LmlkPT09aCk6aCk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5mb3JFYWNoKGg9PnstMT09PWQuaW5kZXhPZihoKSYmZC5wdXNoKGgpfSks''@;'; put 'put ''IXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQpe2NvbnN0IGg9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAoZj0+Zi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCk7dGhpcy5fZHJvcExpc3RSZWYu''@;'; put 'put ''d2l0aFNjcm9sbGFibGVQYXJlbnRzKGgpLHRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLnNvcnRpbmdEaXNhYmxlZD10aGlzLnNvcnRpbmdEaXNhYmxlZCxhLmF1dG9TY3JvbGxEaXNh''@;'; put 'put ''YmxlZD10aGlzLmF1dG9TY3JvbGxEaXNhYmxlZCxhLmF1dG9TY3JvbGxTdGVwPWQ3KHRoaXMuYXV0b1Njcm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZpbHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVmKSkud2l0aE9yaWVudGF0aW9uKHRoaXMub3JpZW50YXRp''@;'; put 'put ''b24pfSl9X2hhbmRsZUV2ZW50cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2Nv''@;'; put 'put ''bnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGEsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJr''@;'; put 'put ''Rm9yQ2hlY2soKX0pLGEuc29ydGVkLnN1YnNjcmliZShkPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KX0pLGEuZHJvcHBlZC5zdWJzY3Jp''@;'; put 'put ''YmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06ZC5pdGVt''@;'; put 'put ''LmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksX3goYS5yZWNlaXZp''@;'; put 'put ''bmdTdGFydGVkLGEucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ2dpbmdEaXNhYmxlZDpoLHNvcnRpbmdEaXNhYmxlZDpmLGxpc3RBdXRv''@;'; put 'put ''U2Nyb2xsRGlzYWJsZWQ6dixsaXN0T3JpZW50YXRpb246TX09YTt0aGlzLmRpc2FibGVkPWg/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPWY/PyExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPXY/PyExLHRoaXMub3JpZW50YXRpb249TXx8InZlcnRpY2FsIixkJiYodGhpcy5sb2NrQXhpcz1k''@;'; put 'put ''KX1fc3luY0l0ZW1zV2l0aFJlZigpe3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKGE9PmEuX2RyYWdSZWYpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoUEwpLEdlKEVzKSxH''@;'; put 'put ''ZShrYiksR2UocG0sOCksR2UoQVksMTIpLEdlKHhZLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0IiwiIl0sWyJjZGstZHJvcC1saXN0Il1dLGhvc3RBdHRyczpbMSwiY2RrLWRyb3AtbGlzdCJdLGhvc3RWYXJzOjcsaG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiYoaHIoImlkIixoLmlkKSxUcigiY2RrLWRyb3AtbGlzdC1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcm9wLWxpc3QtZHJhZ2dpbmciLGguX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSkoImNkay1kcm9wLWxpc3QtcmVjZWl2aW5nIixo''@;'; put 'put ''Ll9kcm9wTGlzdFJlZi5pc1JlY2VpdmluZygpKSl9LGlucHV0czp7Y29ubmVjdGVkVG86W05uLk5vbmUsImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGRhdGE6W05uLk5vbmUsImNka0Ryb3BMaXN0RGF0YSIsImRhdGEiXSxvcmllbnRhdGlvbjpbTm4uTm9uZSwiY2Rr''@;'; put 'put ''RHJvcExpc3RPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIl0saWQ6ImlkIixsb2NrQXhpczpbTm4uTm9uZSwiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJs''@;'; put 'put ''ZWQiLHMxXSxzb3J0aW5nRGlzYWJsZWQ6W05uLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZCIsInNvcnRpbmdEaXNhYmxlZCIsczFdLGVudGVyUHJlZGljYXRlOltObi5Ob25lLCJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQ''@;'; put 'put ''cmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOltObi5Ob25lLCJjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGUiLCJzb3J0UHJlZGljYXRlIl0sYXV0b1Njcm9sbERpc2FibGVkOltObi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RBdXRvU2Nyb2xsRGlzYWJsZWQiLCJhdXRv''@;'; put 'put ''U2Nyb2xsRGlzYWJsZWQiLHMxXSxhdXRvU2Nyb2xsU3RlcDpbTm4uTm9uZSwiY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoiY2RrRHJvcExpc3RFbnRlcmVkIixleGl0ZWQ6''@;'; put 'put ''ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpBWSx1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRlOkVZLHVzZUV4aXN0aW5nOmN9XSksV2xdfSl9''@;'; put 'put ''fXJldHVybiBjfSkoKSxfMWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbUExdLGltcG9y''@;'; put 'put ''dHM6W0lGZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJvPVsiKiJdLFhGZT1bW1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0sW1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0sIioiXSxKRmU9WyJjbHItYWNj''@;'; put 'put ''b3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZSIsImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sIGNsci1zdGVwLWRlc2NyaXB0aW9uIiwiKiJdO2Z1bmN0aW9uIFFGZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsOSksRnQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoaCkpfSksZGUoMSwiZGl2IiwxMCksWXIoMiwyKSxoZSgpKCl9MiZjJiZ4ZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBlSGUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDIpKDIsImRpdiIsMykoMywiYnV0dG9uIiw0LDApLGVsKDUsImFzeW5jIiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRvZ2dsZVBhbmVsKCkpfSksZGUoNiwic3BhbiIsNSksR3QoNywiY2RzLWljb24iLDYp''@;'; put 'put ''LGhlKCksWXIoOCksWXIoOSwxKSxoZSgpKCksZGUoMTAsImRpdiIsNyksZ3QoMTEsUUZlLDMsMSwiZGl2Iiw4KSxoZSgpKCksbGkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9bC4kaW1wbGljaXQsaD1MZSgpO2ZlKCkseGUoIm5nQ2xhc3MiLGguZ2V0UGFuZWxTdGF0ZUNsYXNzZXMoZCkpLGZl''@;'; put 'put ''KCksaHIoInJvbGUiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/ImhlYWRpbmciOm51bGwpKCJhcmlhLWxldmVsIixoLmhlYWRpbmdFbmFibGVkfHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsP2guaGVhZGluZ0xldmVsOm51bGwpLGZlKCksVHIoImNsci1hY2NvcmRp''@;'; put 'put ''b24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShhPURjKDUsMTQsaC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDphLmxlbmd0aCl8fGguYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSx4ZSgiaWQiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0''@;'; put 'put ''ZUlkKSkoImRpc2FibGVkIixkLmRpc2FibGVkKSxocigiYXJpYS1jb250cm9scyIsIWQuZGlzYWJsZWQmJmQub3Blbj9oLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBsYXRlSWQpOm51bGwpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW4pLGZlKDcpLHhlKCJAc2tpcEluaXRpYWxSZW5kZXIi''@;'; put 'put ''LHZvaWQgMCkoImlkIixoLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBsYXRlSWQpKSxocigiYXJpYS1oaWRkZW4iLCFkLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSksZmUoKSx4ZSgibmdJZiIsZC5vcGVuKX19Y29uc3Qg''@;'; put 'put ''Q0hlPVsiY2xyTG9hZGluZyIsIiJdO2Z1bmN0aW9uIFNIZShjLGwpezEmYyYmKHNpKDApLEd0KDEsInNwYW4iLDMpLGxpKCkpLDImYyYmKGZlKCkseGUoIkBzcGlubmVyIix2b2lkIDApKX1mdW5jdGlvbiBNSGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJzcGFuIiw0''@;'; put 'put ''KSxGdCgiQHZhbGlkYXRlZC5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5sb2FkaW5nU3RhdGVDaGFuZ2UoaC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9KSxoZSgpLGxpKCl9MiZjJiYoZmUoKSx4ZSgiQHZhbGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24g''@;'; put 'put ''eEhlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNSksWXIoMSksaGUoKSksMiZjJiZ4ZSgiQGRlZmF1bHRCdXR0b24iLHZvaWQgMCl9ZnVuY3Rpb24gRUhlKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiYnV0dG9uIiwxKSxHdCgyLCJjZHMtaWNvbiIsMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9TGUoKTtmZSgpLGhyKCJhcmlhLWxhYmVsIixhLnNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2lnbnBvc3RUb2dnbGUpLGZlKCksaHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvKX19Y29uc3QgVEhlPVtbWyJjbHItc2lnbnBvc3Qt''@;'; put 'put ''dGl0bGUiXV0sIioiXSxBSGU9WyJjbHItc2lnbnBvc3QtdGl0bGUiLCIqIl0sa0hlPVtbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLFtbImxhYmVsIl1dXSxESGU9WyJbY2xyQ2hlY2tib3hdLFtjbHJUb2dnbGVdIiwibGFiZWwiXTtmdW5jdGlvbiBJSGUoYyxs''@;'; put 'put ''KXsxJmMmJkd0KDAsImxhYmVsIil9Y29uc3QgUkhlPVtbWyJsYWJlbCJdXSxbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNz''@;'; put 'put ''Il1dXSxMSGU9WyJsYWJlbCIsImNsci1jaGVja2JveC13cmFwcGVyLGNsci10b2dnbGUtd3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIE9IZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5j''@;'; put 'put ''dGlvbiBQSGUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gRkhlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gSEhlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gTkhlKGMsbCl7MSZjJiZZcigwLDMsWyIq''@;'; put 'put ''bmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFZIZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gQkhlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzKSxndCgxLEZIZSwxLDAsImNkcy1pY29uIiw0KSgyLEhIZSwxLDAsImNkcy1pY29uIiw1''@;'; put 'put ''KSgzLE5IZSwxLDAsIm5nLWNvbnRlbnQiLDApKDQsVkhlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd0ludmFsaWQp''@;'; put 'put ''LGZlKCkseGUoIm5nSWYiLGEuc2hvd1ZhbGlkKX19Y29uc3QgakhlPVsiY2xyS2V5Rm9jdXMiLCIiXSxZSGU9W1tbImxhYmVsIl1dLFtbIiIsImNscklucHV0UHJlZml4IiwiIl1dLFtbIiIsImNscklucHV0IiwiIl1dLFtbIiIsImNscklucHV0U3VmZml4IiwiIl1dLFtbImNsci1jb250cm9s''@;'; put 'put ''LWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxHSGU9WyJsYWJlbCIsIltjbHJJbnB1dFByZWZpeF0iLCJbY2xySW5wdXRdIiwiW2NscklucHV0U3VmZml4XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9y''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uICRIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBLSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBxSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBYSGUoYyxsKXsx''@;'; put 'put ''JmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBKSGUoYyxsKXsxJmMmJllyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gUUhlKGMsbCl7MSZjJiZZcigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBsTmUoYyxsKXsxJmMm''@;'; put 'put ''JllyKDApfWNvbnN0IGNOZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5jdGlvbiB1TmUoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiwxKSxZcigxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtUcigiYWN0aXZlIixhLmFjdGl2ZSkseGUoImlkIixhLnRhYkNvbnRlbnRJZCko''@;'; put 'put ''ImhpZGRlbiIsIWEuYWN0aXZlKSxocigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFMYWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IGROZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl0saE5lPVtbWyJjbHItdGFicy1hY3Rpb25zIl1dXSxmTmU9WyJjbHItdGFi''@;'; put 'put ''cy1hY3Rpb25zIl07ZnVuY3Rpb24gcE5lKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwibGkiLDUpLEZsKDIsNiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUp''@;'; put 'put ''fX1mdW5jdGlvbiBnTmUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHBOZSwzLDEsIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiYhYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24g''@;'; put 'put ''bU5lKGMsbCl7MSZjJiZGbCgwLDYpLDImYyYmeGUoIm5nVGVtcGxhdGVPdXRsZXQiLExlKCkuJGltcGxpY2l0LnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX1mdW5jdGlvbiB2TmUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLG1OZSwxLDEsIm5nLWNvbnRhaW5lciIsMTMpLGxpKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDMpO2ZlKCkseGUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJmEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIHlOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTIpLEZ0KCJr''@;'; put 'put ''ZXlkb3duLmVzY2FwZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuY2xvc2VPbkVzY2FwZUtleSgpKX0sMCwkMykoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKSxMZSgpO2NvbnN0IGY9aGEoNCk7cmV0dXJuIEN0KExlKCkuY2xvc2VPbk91dHNpZGVDbGljayhoLGYpKX0sITEs''@;'; put 'put ''JDMpKCJmb2N1c291dCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsb3NlT25Gb2N1c091dChoKSl9KSxndCgxLHZOZSwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZl''@;'; put 'put ''cyl9fWZ1bmN0aW9uIGJOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsNykoMiwibGkiLDgpKDMsImJ1dHRvbiIsOSwxKSxGdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCkpfSksR3QoNSwiY2RzLWljb24iLDEwKSxoZSgpKCksZ3QoNix5TmUsMiwxLCJjbHIt''@;'; put 'put ''dGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxUcigib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLGZlKDIpLFRyKCJhY3RpdmUiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdykoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxo''@;'; put 'put ''cigidGFiaW5kZXgiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdyYmIWEudG9nZ2xlU2VydmljZS5vcGVuPzA6LTEpKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksZmUoMiksaHIoInN0YXR1cyIsYS50b2dnbGVTZXJ2aWNlLm9wZW4/ImluZm8iOm51bGwpKCJ0aXRsZSIsYS5jb21t''@;'; put 'put ''b25TdHJpbmdzLmtleXMubW9yZSksZmUoKSx4ZSgibmdJZiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pfX1mdW5jdGlvbiBfTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS50b2dnbGVC''@;'; put 'put ''eUJ1dHRvbigpKX0pLEd0KDEsImNkcy1pY29uIiw0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO1RyKCJvbi1jb2xsYXBzZSIsYS5jb2xsYXBzZWQpLGhyKCJhcmlhLWNvbnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtZXhwYW5kZWQiLGEuYXJpYUV4cGFuZGVkKSgiYXJpYS1sYWJlbCIs''@;'; put 'put ''YS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpLGZlKCksaHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpfX1mdW5jdGlvbiB3TmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDUpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jb2xsYXBzZWQ9ITEpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtocigiYXJpYS1jb250cm9scyIsYS5jb250ZW50SWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0''@;'; put 'put ''aWNhbE5hdlRvZ2dsZSl9fWNvbnN0IE1OZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLHhOZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sRU5lPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24gVE5lKGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQp''@;'; put 'put ''KDEsInNwYW4iKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLGhyKCJhcmlhLWxhYmVsIixhLmRheSksZmUoKSx3cihhLm5hcnJvdyl9fWZ1bmN0aW9uIEFOZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInRkIiw3KSgxLCJjbHItZGF5Iiw4KSxG''@;'; put 'put ''dCgic2VsZWN0RGF5IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuc2V0U2VsZWN0ZWREYXkoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24ga05lKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIi''@;'; put 'put ''LDUpLGd0KDEsQU5lLDIsMSwidGQiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixhKX19ZnVuY3Rpb24gRE5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9''@;'; put 'put ''d3QoYSkuaW5kZXg7cmV0dXJuIEN0KExlKCkuY2hhbmdlTW9udGgoaCkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS5vbkhvdmVyKGgpKX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRl''@;'; put 'put ''eCxoPUxlKCk7VHIoImlzLXNlbGVjdGVkIixoLmlzU2VsZWN0ZWQoZCkpKCJpcy1zdGFydC1yYW5nZSIsaC5nZXRJc1JhbmdlU3RhcnRNb250aChkKSkoImlzLWVuZC1yYW5nZSIsaC5nZXRJc1JhbmdlRW5kTW9udGgoZCkpKCJpbi1yYW5nZSIsaC5pc0luUmFuZ2UoZCkpKCJpcy10b2RheSIs''@;'; put 'put ''aC5jYWxlbmRhclllYXI9PT1oLmN1cnJlbnRDYWxlbmRhclllYXImJmQ9PT1oLmN1cnJlbnRDYWxlbmRhck1vbnRoKSxocigidGFiaW5kZXgiLGguZ2V0VGFiSW5kZXgoZCkpLGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gSU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''YnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNoYW5nZVllYXIoaCkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkub25Ib3ZlcihoKSl9''@;'; put 'put ''KSxPZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7VHIoImlzLXNlbGVjdGVkIixhPT09ZC5zZWxlY3RlZFN0YXJ0WWVhcnx8YT09PWQuc2VsZWN0ZWRFbmRZZWFyKSgiaXMtc3RhcnQtcmFuZ2UiLGQuZ2V0SXNSYW5nZVN0YXJ0WWVhcihhKSkoImlzLWVuZC1y''@;'; put 'put ''YW5nZSIsZC5nZXRJc1JhbmdlRW5kWWVhcihhKSkoImluLXJhbmdlIixkLmlzSW5SYW5nZShhKSkoImlzLXRvZGF5IixkLmlzQ3VycmVudENhbGVuZGFyWWVhcihhKSksaHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIFJOZShjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImEiLDYpLEZ0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChh''@;'; put 'put ''KS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSksT2UoMiksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLGhyKCJhcmlhLWxhYmVsIixudWxsPT1hP251bGw6YS5sYWJlbCksZmUoKSxEcigiICIsYS5sYWJlbCwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiBMTmUoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIE9OZShjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImNsci12ZXJ0aWNhbC1uYXYiLDIpLGd0KDIsUk5lLDMsMiwibmctY29udGFpbmVyIiwzKSxoZSgpLGRlKDMsImRpdiIsNCksZ3QoNCxMTmUsMSwwLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDUpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPUxlKCksZD1oYSgyKTtmZSgyKSx4ZSgibmdGb3JPZiIsYS5kYXRlUmFuZ2VPcHRpb25zKSxmZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIFBOZShjLGwpezEmYyYmR3QoMCwiY2xyLW1vbnRocGlja2VyIil9ZnVu''@;'; put 'put ''Y3Rpb24gRk5lKGMsbCl7MSZjJiZHdCgwLCJjbHIteWVhcnBpY2tlciIpfWZ1bmN0aW9uIEhOZShjLGwpezEmYyYmR3QoMCwiY2xyLWRheXBpY2tlciIpfWZ1bmN0aW9uIE5OZShjLGwpezEmYyYmR3QoMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIpfWZ1bmN0aW9uIFZOZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmZ3QoMCxQTmUsMSwwLCJjbHItbW9udGhwaWNrZXIiLDcpKDEsRk5lLDEsMCwiY2xyLXllYXJwaWNrZXIiLDcpKDIsSE5lLDEsMCwiY2xyLWRheXBpY2tlciIsNykoMyxOTmUsMSwwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIiw3KSwyJmMpe2NvbnN0IGE9TGUoKTt4ZSgibmdJZiIsYS5p''@;'; put 'put ''c01vbnRoVmlldyksZmUoKSx4ZSgibmdJZiIsYS5pc1llYXJWaWV3KSxmZSgpLHhlKCJuZ0lmIixhLmlzRGF5VmlldyksZmUoKSx4ZSgibmdJZiIsYS5oYXNBY3Rpb25CdXR0b25zKX19Y29uc3QgQk5lPVsiYWN0aW9uQnV0dG9uIl0sak5lPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJEYXRlIiwi''@;'; put 'put ''Il1dLFtbIiIsImNsclN0YXJ0RGF0ZSIsIiJdXSxbWyIiLCJjbHJFbmREYXRlIiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx6TmU9WyJsYWJlbCIsIltjbHJEYXRlXSIsIltjbHJTdGFydERh''@;'; put 'put ''dGVdIiwiW2NsckVuZERhdGVdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gVU5lKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFpOZShjLGwpezEmYyYmKHNpKDApLFlyKDEsMiksZGUoMiwi''@;'; put 'put ''c3BhbiIsOSksT2UoMywiLSIpLGhlKCksWXIoNCwzKSxsaSgpKX1mdW5jdGlvbiBXTmUoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDEwLDApLEd0KDIsImNkcy1pY29uIiwxMSksaGUoKSksMiZjJiZ4ZSgiZGlzYWJsZWQiLExlKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gWU5l''@;'; put 'put ''KGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDEyKX1mdW5jdGlvbiBHTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMyl9ZnVuY3Rpb24gJE5lKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTQpfWZ1bmN0aW9uIEtOZShjLGwpezEmYyYmWXIoMCw0''@;'; put 'put ''LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHFOZShjLGwpezEmYyYmWXIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBYTmUoYyxsKXsxJmMmJllyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHRWZT1bW1sibGFiZWwiXV0sW1siIiwiY2xy''@;'; put 'put ''TnVtYmVySW5wdXQiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLG5WZT1bImxhYmVsIiwiW2Nsck51bWJlcklucHV0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9y''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHJWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBpVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMSl9ZnVuY3Rpb24gYVZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTIpfWZ1bmN0aW9uIG9WZShjLGwp''@;'; put 'put ''ezEmYyYmWXIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHNWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBsVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IGNWZT1bW1siIiwiY2xy''@;'; put 'put ''UmFkaW8iLCIiXV0sW1sibGFiZWwiXV1dLHVWZT1bIltjbHJSYWRpb10iLCJsYWJlbCJdO2Z1bmN0aW9uIGRWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBoVmU9W1tbImxhYmVsIl1dLFtbImNsci1yYWRpby13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJj''@;'; put 'put ''bHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxmVmU9WyJsYWJlbCIsImNsci1yYWRpby13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gcFZlKGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGdWZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBtVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiB2VmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiB5VmUo''@;'; put 'put ''YyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBfVmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsbVZlLDEsMCwiY2RzLWljb24iLDQpKDIs''@;'; put 'put ''dlZlLDEsMCwiY2RzLWljb24iLDUpKDMseVZlLDEsMCwibmctY29udGVudCIsMCkoNCxiVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCB3VmU9W1tbImxhYmVsIl1dLFtbIiIsImNsclNlbGVjdCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2Vz''@;'; put 'put ''cyJdXV0sQ1ZlPVsibGFiZWwiLCJbY2xyU2VsZWN0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIFNWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBNVmUoYyxsKXsxJmMmJkd0KDAsImNk''@;'; put 'put ''cy1pY29uIiw1KX1mdW5jdGlvbiB4VmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBFVmUoYyxsKXsxJmMmJllyKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBUVmUoYyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVu''@;'; put 'put ''Y3Rpb24gQVZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBrVmU9W1tbImxhYmVsIl1dLFtbIiIsImNsclRleHRhcmVhIiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNj''@;'; put 'put ''ZXNzIl1dXSxEVmU9WyJsYWJlbCIsIltjbHJUZXh0YXJlYV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBJVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gUlZlKGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gTFZlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gT1ZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUFZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0p''@;'; put 'put ''fWZ1bmN0aW9uIEZWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgSFZlPVsiYW5jaG9yIl07ZnVuY3Rpb24gTlZlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNiksR3QoMywiY2RzLWljb24iLDcpLGhlKCko''@;'; put 'put ''KSxZcig0KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTt4ZSgiaWQiLGEucG9wb3ZlcklkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLGZlKDMpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2Up''@;'; put 'put ''fX1jb25zdCBWVmU9WyJpbnB1dF9sb3ciXSxCVmU9WyJpbnB1dCJdLGpWZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIHpWZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgVVZlPVsicmVzaXplVHJhY2tlciJdLFpWZT1bImNvbHVtbkhhbmRsZSJdLFdWZT1bW1siY2xyLWRnLWZpbHRlciJdLFsi''@;'; put 'put ''Y2xyLWRnLXN0cmluZy1maWx0ZXIiXSxbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSwiKiJdLFlWZT1bImNsci1kZy1maWx0ZXIsIGNsci1kZy1zdHJpbmctZmlsdGVyLCBjbHItZGctbnVtZXJpYy1maWx0ZXIiLCIqIl07ZnVuY3Rpb24gR1ZlKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiAk''@;'; put 'put ''VmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMCksMiZjJiZocigiZGlyZWN0aW9uIixMZSgyKS5zb3J0RGlyZWN0aW9uKX1mdW5jdGlvbiBLVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks''@;'; put 'put ''Q3QoTGUoKS5zb3J0KCkpfSksZ3QoMSxHVmUsMSwwLCJuZy1jb250YWluZXIiLDgpKDIsJFZlLDEsMSwiY2RzLWljb24iLDkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1oYSg2KTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxmZSgpLHhlKCJuZ0lmIixhLnNvcnREaXJlY3Rp''@;'; put 'put ''b24pfX1mdW5jdGlvbiBxVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLGdpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmZpbHRlclZhbHVlLGgpfHwoZi5m''@;'; put 'put ''aWx0ZXJWYWx1ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7eGUoImNsckZpbHRlclBsYWNlaG9sZGVyIixhLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEucmVnaXN0ZXJlZCkscGkoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZh''@;'; put 'put ''bHVlKX19ZnVuY3Rpb24gWFZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwxMiksZ2koImNsckZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuZmlsdGVyVmFsdWUsaCl8fChm''@;'; put 'put ''LmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTt4ZSgiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIpKCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciko''@;'; put 'put ''ImNsckRnTnVtZXJpY0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxwaSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBKVmUoYyxsKXsxJmMmJllyKDAsMSl9ZnVuY3Rpb24gUVZlKGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBlQmUoYyxsKXtpZigxJmMmJihkZSgwLCJz''@;'; put 'put ''cGFuIiwxMyksZ3QoMSxRVmUsMSwwLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7TGUoKTtjb25zdCBhPWhhKDYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiB0QmUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9ZnVuY3Rpb24g''@;'; put 'put ''bkJlKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDQpfWZ1bmN0aW9uIHJCZShjLGwpezEmYyYmWXIoMCwwLFsiKm5nSWYiLCJlbXB0eURhdGFncmlkIl0pfWNvbnN0IGlCZT1bImNlbGxQb3J0YWwiXTtmdW5jdGlvbiBhQmUoYyxsKXsxJmMmJllyKDApfWNvbnN0IG9CZT1bInJvd1BvcnRhbCJdO2Z1''@;'; put 'put ''bmN0aW9uIHNCZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgbEJlPVsiZGV0YWlsQnV0dG9uIl0sY0JlPVsic3RpY2t5Q2VsbHMiXSx1QmU9WyJzY3JvbGxhYmxlQ2VsbHMiXSxkQmU9WyJjYWxjdWxhdGVkQ2VsbHMiXSxoQmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxs''@;'; put 'put ''Il1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLGZCZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNlbGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0scEJlPWM9Pih7ImlzLXJlcGxhY2VkIjpjfSksdzFlPWM9Pih7ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9''@;'; put 'put ''KTtmdW5jdGlvbiBnQmUoYyxsKXt9ZnVuY3Rpb24gbUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiwxMCksZ3QoMSxnQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKSxkPWhhKDYpO3hlKCJjbHJFeHBhbmRUcmln''@;'; put 'put ''Z2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiB2QmUoYyxsKXt9ZnVuY3Rpb24geUJlKGMsbCl7MSZjJiZndCgwLHZCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoTGUoMikseGUoIm5nVGVtcGxhdGVPdXRs''@;'; put 'put ''ZXQiLGhhKDYpKSl9ZnVuY3Rpb24gYkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5KSxGdCgibW91c2Vkb3duIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbGVhclJhbmdlcyhoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''TGUoKTtyZXR1cm4gQ3QoZi5zZWxlY3RSb3coIWYuc2VsZWN0ZWQsaCkpfSksZ3QoMSxtQmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIseUJlLDEsMSxudWxsLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5leHBhbmQuZXhwYW5kYWJs''@;'; put 'put ''ZSksZmUoKSx4ZSgibmdJZiIsIWEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBfQmUoYyxsKXt9ZnVuY3Rpb24gd0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiwxMCksZ3QoMSxfQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1MZSgpLGQ9aGEoNik7eGUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIENCZShjLGwpe31mdW5jdGlvbiBTQmUoYyxsKXsxJmMmJmd0KDAsQ0JlLDAsMCwibmctdGVtcGxh''@;'; put 'put ''dGUiLDExKSwyJmMmJihMZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixoYSg2KSkpfWZ1bmN0aW9uIE1CZShjLGwpezEmYyYmWXIoMCl9ZnVuY3Rpb24geEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwiaW5wdXQiLDIzKSxGdCgibmdN''@;'; put 'put ''b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnRvZ2dsZShoKSl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuY2xlYXJSYW5nZXMoaCkpfSksZGUoNCwic3BhbiIsMjUpLE9lKDUp''@;'; put 'put ''LGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO3hlKCJuZ0NsYXNzIixzcCg3LHcxZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSx4ZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxo''@;'; put 'put ''cigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxmZSgpLHhlKCJmb3IiLGEuY2hlY2tib3hJZCksZmUoMiksd3IoYS5jbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3QpfX1mdW5jdGlvbiBFQmUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJjbHItcmFkaW8td3JhcHBlciIpKDIsImlucHV0IiwyNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIG1pKGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUsaCl8fChmLnNlbGVjdGlv''@;'; put 'put ''bi5jdXJyZW50U2luZ2xlPWgpLEN0KGgpfSksaGUoKSxkZSgzLCJsYWJlbCIsMjcpKDQsInNwYW4iLDI1KSxPZSg1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTt4ZSgibmdDbGFzcyIsc3AoMTAsdzFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLHhlKCJpZCIsYS5yYWRp''@;'; put 'put ''b0lkKSgibmFtZSIsYS5zZWxlY3Rpb24uaWQrIi1yYWRpbyIpKCJ2YWx1ZSIsYS5pdGVtKSxwaSgibmdNb2RlbCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSkseGUoImNoZWNrZWQiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9PT1hLml0ZW0pKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxl''@;'; put 'put ''Y3RhYmxlfHxudWxsKSxocigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxmZSgpLHhlKCJmb3IiLGEucmFkaW9JZCksZmUoMiksd3IoYS5jbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3QpfX1mdW5jdGlvbiBUQmUoYyxs''@;'; put 'put ''KXsxJmMmJihkZSgwLCJkaXYiLDI4KSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIEFCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkudG9nZ2xlRXhwYW5kKCkpfSksR3QoMSwiY2Rz''@;'; put 'put ''LWljb24iLDMzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSg0KTtocigiYXJpYS1leHBhbmRlZCIsYS5leHBhbmQuZXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmV4cGFuZC5leHBhbmRlZD9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1jb250''@;'; put 'put ''cm9scyIsYS5leHBhbmQuaGFzRXhwYW5kVGVtcGxhdGUmJiFhLmV4cGFuZC5leHBhbmRlZD9udWxsOmEuZXhwYW5kYWJsZUlkKSxmZSgpLGhyKCJkaXJlY3Rpb24iLGEuZXhwYW5kLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKSgidGl0bGUiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLmNvbGxhcHNlOmEuY29tbW9uU3RyaW5ncy5rZXlzLmV4cGFuZCl9fWZ1bmN0aW9uIGtCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zcGlubmVyIiwzNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGlu''@;'; put 'put ''Zyl9fWZ1bmN0aW9uIERCZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQUJlLDIsNSwiYnV0dG9uIiwzMCkoMixrQmUsMiwxLCJjbHItc3Bpbm5lciIsMzEpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHhlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''YS5leHBhbmQubG9hZGluZyl9fWZ1bmN0aW9uIElCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjkpLGd0KDEsREJlLDMsMiwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIFJC''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzcsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9aGEoMSksZj1MZSgzKTtyZXR1cm4gQ3QoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSksR3QoMiwiY2RzLWljb24iLDM4KSxo''@;'; put 'put ''ZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtUcigiaXMtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSx4ZSgiZGlzYWJsZWQiLGEuZGV0YWlsRGlzYWJsZWQpLGhyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0Rl''@;'; put 'put ''dGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSkoImFyaWEtY29udHJvbHMiLGEuZGV0YWlsU2VydmljZS5pZCksZmUoMiksaHIoImRpcmVjdGlvbiIsYS5kZXRhaWxTZXJ2aWNlLmlz''@;'; put 'put ''Um93T3BlbihhLml0ZW0pPyJsZWZ0IjoicmlnaHQiKSgidGl0bGUiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT9hLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZTphLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVuKX19ZnVuY3Rpb24gTEJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''IiwzNSksZ3QoMSxSQmUsMyw4LCJidXR0b24iLDM2KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsIWEuZGV0YWlsSGlkZGVuKX19ZnVuY3Rpb24gT0JlKGMsbCl7fWZ1bmN0aW9uIFBCZShjLGwpezEmYyYmZ3QoMCxPQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDIm''@;'; put 'put ''YyYmKExlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixoYSg0KSkpfWZ1bmN0aW9uIEZCZShjLGwpe31mdW5jdGlvbiBIQmUoYyxsKXsxJmMmJmd0KDAsRkJlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihMZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsaGEoNCkpKX1mdW5jdGlvbiBO''@;'; put 'put ''QmUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jZWxsIiwzOSl9ZnVuY3Rpb24gVkJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksc2koMixudWxsLDMpLGd0KDQseEJlLDYsOSwiZGl2IiwxNCkoNSxFQmUsNiwxMiwiZGl2IiwxNCkoNixUQmUsMiwwLCJkaXYiLDE1''@;'; put 'put ''KSg3LElCZSwyLDEsImRpdiIsMTYpKDgsTEJlLDIsMSwiZGl2IiwxNyksbGkoKSxoZSgpLGRlKDksImRpdiIsMTgpKDEwLCJkaXYiLDE5KSxZcigxMSwxKSxGbCgxMixudWxsLDQpLGhlKCksZ3QoMTQsUEJlLDEsMSxudWxsLDgpKDE1LEhCZSwxLDEsbnVsbCw4KSxoZSgpLGd0KDE2LE5CZSwx''@;'; put 'put ''LDAsImNsci1kZy1jZWxsIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7VHIoImRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSx4ZSgiaWQiLGEuaWQpLGZlKDQpLHhlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBl''@;'; put 'put ''PT09YS5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSx4ZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxmZSgpLHhlKCJuZ0lmIixhLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSx4ZSgibmdJZiIsYS5n''@;'; put 'put ''bG9iYWxFeHBhbmRhYmxlLmhhc0V4cGFuZGFibGVSb3cpLGZlKCkseGUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSgpLHhlKCJuZ0NsYXNzIixzcCgxMixwQmUsYS5yZXBsYWNlZCYmYS5leHBhbmRlZCkpLGZlKDUpLHhlKCJuZ0lmIixhLnJlcGxhY2VkJiYhYS5leHBhbmQu''@;'; put 'put ''bG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWEucmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLnNrZWxldG9uTG9hZGluZyl9fWNvbnN0IEJCZT1bImRhdGFncmlkIl0sakJlPVsiZGF0YWdyaWRUYWJsZSJdLHpCZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sVUJl''@;'; put 'put ''PVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxaQmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxXQmU9WyJkaXNwbGF5ZWRSb3dzIl0sWUJlPVsiY2FsY3VsYXRpb25Sb3dzIl0sR0JlPVsic2VsZWN0QWxsQ2hlY2tib3giXSwkQmU9W1tbImNsci1kZy1hY3Rpb24tYmFyIl1d''@;'; put 'put ''LFtbImNsci1kZy1wbGFjZWhvbGRlciJdXSxbWyJjbHItZGctZm9vdGVyIl1dLFtbIiIsImNscklmRGV0YWlsIiwiIl0sWyJjbHItZGctZGV0YWlsIl1dXSxLQmU9WyJjbHItZGctYWN0aW9uLWJhciIsImNsci1kZy1wbGFjZWhvbGRlciIsImNsci1kZy1mb290ZXIiLCJbY2xySWZEZXRhaWxd''@;'; put 'put ''LGNsci1kZy1kZXRhaWwiXTtmdW5jdGlvbiBxQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDMwKSgxLCJpbnB1dCIsMzEsNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJuIG1pKGYuYWxsU2VsZWN0ZWQsaCl8''@;'; put 'put ''fChmLmFsbFNlbGVjdGVkPWgpLEN0KGgpfSksaGUoKSxkZSgzLCJsYWJlbCIsMzIpKDQsInNwYW4iLDMzKSxPZSg1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgiaWQiLGEuc2VsZWN0QWxsSWQpLHBpKCJuZ01vZGVsIixhLmFsbFNlbGVjdGVkKSxocigiYXJpYS1s''@;'; put 'put ''YWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKSxmZSgyKSx4ZSgiZm9yIixhLnNlbGVjdEFsbElkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpfX1mdW5jdGlvbiBYQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI3KSxG''@;'; put 'put ''dCgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlQWxsU2VsZWN0ZWQoaCkpfSksZ3QoMSxxQmUsNiw1LCJkaXYiLDI4KSxHdCgyLCJkaXYiLDI5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnZpcnR1YWxT''@;'; put 'put ''Y3JvbGx8fGEuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCl9fWZ1bmN0aW9uIEpCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpKDEsImRpdiIsMzMpLE9lKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMiksd3IoYS5jbHJEZ1NpbmdsZVNlbGVj''@;'; put 'put ''dGlvbkFyaWFMYWJlbCl9fWZ1bmN0aW9uIFFCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzUpKDEsImRpdiIsMzMpLE9lKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMiksd3IoYS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfX1m''@;'; put 'put ''dW5jdGlvbiBlamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM2KSgxLCJkaXYiLDMzKSxPZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHdyKGEuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIHRqZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM3KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzOCksZGUoMywic3BhbiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24g''@;'; put 'put ''bmplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM4KSxkZSgzLCJzcGFuIiksT2UoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDQpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcp''@;'; put 'put ''fX1mdW5jdGlvbiByamUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1wbGFjZWhvbGRlciIpfWZ1bmN0aW9uIGlqZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMzkpKDEsImNsci1zcGlubmVyIiwzOCksT2UoMiwiTG9hZGluZyIpLGhlKCkoKSl9Y29uc3Qgb2plPVsiYWxsU2VsZWN0ZWQiXTtmdW5j''@;'; put 'put ''dGlvbiBzamUoYyxsKXt9ZnVuY3Rpb24gbGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibGkiKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwxMyksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVy''@;'; put 'put ''biBDdChMZSgyKS50b2dnbGVDb2x1bW5TdGF0ZShmLCFoKSl9KSxoZSgpLGRlKDMsImxhYmVsIiksZ3QoNCxzamUsMCwwLCJuZy10ZW1wbGF0ZSIsMTQpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKDIpLHhlKCJkaXNhYmxlZCIsZC5oYXNPbmx5T25l''@;'; put 'put ''VmlzaWJsZUNvbHVtbiYmIWEuaGlkZGVuKSgibmdNb2RlbCIsIWEuaGlkZGVuKSxmZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsYS50aXRsZVRlbXBsYXRlUmVmKX19ZnVuY3Rpb24gY2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzKSgxLCJkaXYiLDQpKDIsImRp''@;'; put 'put ''diIsNSwwKSxPZSg0KSxoZSgpLGRlKDUsImgyIiksT2UoNiksaGUoKSxkZSg3LCJidXR0b24iLDYpLEd0KDgsImNkcy1pY29uIiw3KSxkZSg5LCJzcGFuIiw4KSxPZSgxMCksaGUoKSgpKCksZGUoMTEsInVsIiw5KSxndCgxMixsamUsNSwzLCJsaSIsMTApLGhlKCksZGUoMTMsImRpdiIsMTEp''@;'; put 'put ''KDE0LCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEyKSxGdCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuYWxsQ29sdW1uc1NlbGVjdGVkKCkpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7eGUoImlkIixhLnBvcG92ZXJJZCks''@;'; put 'put ''aHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uKSxmZSg0KSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5hbGxDb2x1bW5zU2VsZWN0ZWQpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zKSxmZSgpLGhy''@;'; put 'put ''KCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoKSxocigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMikseGUoIm5nRm9yT2YiLGEuaGlkZWFibGVDb2x1bW5TdGF0ZXMp''@;'; put 'put ''KCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19Y29uc3QgQzFlPVsidGl0bGUiXSxkamU9W1tbImNsci1kZy1wYWdpbmF0aW9uIl1dLCIqIl0saGplPVsiY2xyLWRnLXBhZ2luYXRpb24iLCIqIl07ZnVuY3Rpb24gZmplKGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2IiwxKSgyLCJj''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlciIsMiksR3QoMywiaW5wdXQiLDMpLGRlKDQsImxhYmVsIiksT2UoNSksaGUoKSxkZSg2LCJzcGFuIiw0KSxPZSg3KSxoZSgpKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg1KSx3cihhLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aCksZmUoMiksd3Io''@;'; put 'put ''YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRSb3dzKX19ZnVuY3Rpb24gcGplKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIpfWZ1bmN0aW9uIGdqZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEscGplLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLGRlKDIs''@;'; put 'put ''ImRpdiIsNSksWXIoMywxKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuaGFzSGlkZWFibGVDb2x1bW5zKX19ZnVuY3Rpb24gbWplKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7''@;'; put 'put ''eGUoIm5nVmFsdWUiLGEpLGZlKCksd3IoYSl9fWNvbnN0IHZqZT1bImN1cnJlbnRQYWdlSW5wdXQiXSx5amU9WyIqIixbWyJjbHItZGctcGFnZS1zaXplIl1dXSxiamU9WyIqIiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uIF9qZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNiksWXIoMSwx''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiB3amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJpbnB1dCIsMTgsMSksRnQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KExlKDMpLnZlcmlmeUN1cnJlbnRQYWdlKGgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDMpO3hlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5n''@;'; put 'put ''cy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gQ2plKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHdyKGEucGFnZS5jdXJyZW50KX19ZnVuY3Rpb24gU2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2''@;'; put 'put ''Iiw3KSgxLCJidXR0b24iLDgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikucGFnZS5jdXJyZW50PTEpfSksZGUoMiwic3BhbiIsOSksT2UoMyksaGUoKSxHdCg0LCJjZHMtaWNvbiIsMTApLGhlKCksZGUoNSwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNiwic3BhbiIsOSksT2UoNyksaGUoKSxHdCg4LCJjZHMtaWNvbiIsMTIpLGhlKCksZ3QoOSx3amUsMiwzLCJpbnB1dCIsMTMpKDEwLENqZSwyLDEsIm5nLXRl''@;'; put 'put ''bXBsYXRlIixudWxsLDAsSWMpLE9lKDEyLCIgXHhhMC9ceGEwIiksZGUoMTMsInNwYW4iKSxPZSgxNCksaGUoKSxkZSgxNSwiYnV0dG9uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50''@;'; put 'put ''KzEpfSksZGUoMTYsInNwYW4iLDkpLE9lKDE3KSxoZSgpLEd0KDE4LCJjZHMtaWNvbiIsMTUpLGhlKCksZGUoMTksImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxkZSgy''@;'; put 'put ''MCwic3BhbiIsOSksT2UoMjEpLGhlKCksR3QoMjIsImNkcy1pY29uIiwxNyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgxMSksZD1MZSgyKTtmZSgpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBh''@;'; put 'put ''Z2UpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMikseGUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''cHJldmlvdXNQYWdlKSxmZSgyKSx4ZSgibmdJZiIsIWQuZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQpKCJuZ0lmRWxzZSIsYSksZmUoNCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnRvdGFsUGFnZXMpLGZlKCksd3IoZC5wYWdlLmxhc3QpLGZlKCkseGUoImRpc2FibGVk''@;'; put 'put ''IixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0''@;'; put 'put ''KSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gTWplKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxfamUsMiwwLCJkaXYiLDMpLGRlKDIsImRpdiIsNCksWXIoMyks''@;'; put 'put ''aGUoKSxndCg0LFNqZSwyMywxNiwiZGl2Iiw1KSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLl9wYWdlU2l6ZUNvbXBvbmVudCksZmUoMykseGUoIm5nSWYiLGEucGFnZS5sYXN0PjEpfX1mdW5jdGlvbiB4amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgw''@;'; put 'put ''KSxkZSgxLCJkaXYiLDE5KSxPZSgyKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg1LCJzcGFuIiw5KSxPZSg2KSxo''@;'; put 'put ''ZSgpLEd0KDcsImNkcy1pY29uIiwxMiksaGUoKSxkZSg4LCJzcGFuIiksT2UoOSksaGUoKSxkZSgxMCwiYnV0dG9uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxMSwi''@;'; put 'put ''c3BhbiIsOSksT2UoMTIpLGhlKCksR3QoMTMsImNkcy1pY29uIiwxNSksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMiksVmYoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxmZSgyKSx4''@;'; put 'put ''ZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDMpLHdyKGEucGFnZS5jdXJyZW50KSxmZSgpLHhlKCJkaXNh''@;'; put 'put ''YmxlZCIsYS5wYWdlLmN1cnJlbnQ+PWEucGFnZS5sYXN0KSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKX19Y29uc3Qga2plPVtbWyJjbHItc3RhY2stbGFiZWwiXV0sIioiLFtbImNs''@;'; put 'put ''ci1zdGFjay1ibG9jayJdXV0sRGplPVsiY2xyLXN0YWNrLWxhYmVsIiwiKiIsImNsci1zdGFjay1ibG9jayJdO2Z1bmN0aW9uIElqZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpLDImYyYmaHIoImRpcmVjdGlvbiIsTGUoKS5jYXJldERpcmVjdGlvbil9ZnVuY3Rpb24gUmplKGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwic3BhbiIsOCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zdGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24gTGplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5KSxZcigxLDIpLGhlKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1MZSgpO19kKCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLGhyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBPamU9W1tbImNsci1zdGFjay1oZWFkZXIiXV0sIioiXSxQamU9WyJjbHItc3RhY2st''@;'; put 'put ''aGVhZGVyIiwiKiJdO2Z1bmN0aW9uIE5qZShjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gVmplKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxOamUsMSwwLCJuZy1jb250YWluZXIiLDIpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKCkseGUoIm5nVGVtcGxhdGVP''@;'; put 'put ''dXRsZXQiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixkLmdldENvbnRleHQoYSkpfX1mdW5jdGlvbiBCamUoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFZqZSwyLDIsIm5nLWNvbnRhaW5lciIsMSksbGkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgamplPVsiY29udGVudENvbnRhaW5lciJdLHpqZT1bW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1d''@;'; put 'put ''LCIqIl0sVWplPVsiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSIsIioiXTtmdW5jdGlvbiBaamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5leHBhbmRTZXJ2aWNlLnRv''@;'; put 'put ''Z2dsZSgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5mb2N1c1RyZWVOb2RlKCkpfSksR3QoMSwiY2RzLWljb24iLDEwKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3hlKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksZmUoKSxocigiZGlyZWN0aW9uIixhLmV4''@;'; put 'put ''cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpfX1mdW5jdGlvbiBXamUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDExKSxHdCgxLCJzcGFuIiwxMiksaGUoKSl9ZnVuY3Rpb24gWWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMykoMSwiaW5wdXQiLDE0''@;'; put 'put ''KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5fbW9kZWwudG9nZ2xlU2VsZWN0aW9uKGguZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZm9jdXNUcmVlTm9kZSgpKX0p''@;'; put 'put ''LGhlKCksZGUoMiwibGFiZWwiLDE1KSxGbCgzLDE2KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCksZD1oYSg3KTtmZSgpLHhlKCJpZCIsYS5ub2RlSWQrIi1jaGVjayIpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCkoImNoZWNrZWQiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFU''@;'; put 'put ''RVMuU0VMRUNURUQpKCJpbmRldGVybWluYXRlIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLklOREVURVJNSU5BVEUpLGZlKCkseGUoImZvciIsYS5ub2RlSWQrIi1jaGVjayIpLGZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBHamUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE3KSxGdCgibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5mb2N1c1RyZWVOb2RlKCkpfSksRmwoMSwxNiksaGUoKX1pZigyJmMpe0xlKCk7Y29uc3QgYT1oYSg3KTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iixh''@;'; put 'put ''KX19ZnVuY3Rpb24gJGplKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSkoMSwic3BhbiIpLE9lKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLERyKCIgIixhLmFyaWFTZWxlY3RlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFRyZWVOb2RlOmEuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLnVuc2VsZWN0ZWRUcmVlTm9kZSwiIil9fWZ1bmN0aW9uIEtqZShjLGwpe2lmKDEmYyYmKFlyKDAsMiksZ3QoMSwkamUsMywxLCJkaXYiLDE4KSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZXx8YS5hcmlhU2Vs''@;'; put 'put ''ZWN0ZWQpfX1mdW5jdGlvbiBxamUoYyxsKXsxJmMmJkd0KDAsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDEpLDImYyYmeGUoImNoaWxkcmVuIixMZSgpLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24ucm9vdCl9ZnVuY3Rpb24gWGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''YnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNsb3NlKCkpfSksR3QoMSwiY2RzLWljb24iLDUpLGhlKCl9MiZjJiZocigiYXJpYS1sYWJlbCIsTGUoMikuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwpfWZ1bmN0aW9uIEpqZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxZcigyKSxoZSgpLGd0KDMsWGplLDIsMSwiYnV0dG9uIiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtUcigiYWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWxpZ2h0d2VpZ2h0IixhLmlzTGlnaHR3ZWlnaHQpKCJhbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwiLGEuaXNBcHBMZXZlbCkseGUoIm5nQ2xhc3MiLGEuYWxlcnRDbGFzcyksZmUoMykseGUoIm5nSWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBRamUoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzKX1mdW5jdGlvbiBlemUoYyxsKXtpZigxJmMmJkd0KDAsImNkcy1pY29uIiw0KSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoKTtocigic2hhcGUiLGEuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKCJhcmlhLWxhYmVsIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblRpdGxlKX19Y29uc3QgdHplPVtbWyJjbHItYWxlcnQiXV1dLG56ZT1bImNsci1hbGVydCJdO2Z1bmN0aW9uIHJ6ZShjLGwp''@;'; put 'put ''ezEmYyYmR3QoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMiksMiZjJiZ4ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLExlKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IGl6ZT1bImNsckludGVybmFsTW9kYWxDb250ZW50VGVtcGxhdGUiXSxTMWU9WyJib2R5Il0sYXplPVtbWyIiLDgsImxlYWRp''@;'; put 'put ''bmctYnV0dG9uIl1dLFtbIiIsOCwibW9kYWwtdGl0bGUiXV0sW1siIiw4LCJtb2RhbC1ib2R5Il1dLFtbIiIsOCwibW9kYWwtZm9vdGVyIl1dXSxvemU9WyIubGVhZGluZy1idXR0b24iLCIubW9kYWwtdGl0bGUiLCIubW9kYWwtYm9keSIsIi5tb2RhbC1mb290ZXIiXTtmdW5jdGlvbiBzemUo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmNsb3NlKCkpfSksR3QoMSwiY2RzLWljb24iLDE1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtocigiYXJpYS1sYWJlbCIsYS5j''@;'; put 'put ''bG9zZUJ1dHRvbkFyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1mdW5jdGlvbiBsemUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDgpKDEsImRpdiIsOSkoMiwiZGl2IiwxMCksWXIoMyksZGUoNCwiZGl2IiwxMSwwKSxZcig2LDEpLGhlKCksZ3QoNyxzemUsMiwxLCJi''@;'; put 'put ''dXR0b24iLDEyKSxoZSgpLGRlKDgsImRpdiIsMTMsMSksWXIoMTAsMiksaGUoKSxZcigxMSwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0KSx4ZSgiaWQiLGEubW9kYWxJZCksZmUoMykseGUoIm5nSWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBjemUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksRnQoIkBmYWRlTW92ZS5kb25lIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5mYWRlRG9uZShoKSl9KSxkZSgyLCJkaXYiLDYpLE9lKDMpLGhlKCksZ3QoNCxsemUsMTIsMiwiZGl2Iiw3KSxkZSg1LCJkaXYiLDYp''@;'; put 'put ''LE9lKDYpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO1RyKCJtb2RhbC1mdWxsLXNjcmVlbiIsImZ1bGwtc2NyZWVuIj09YS5zaXplKSxmZSgpLFRyKCJtb2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUp''@;'; put 'put ''LHhlKCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsITApKCJAZmFkZU1vdmUiLGEuZmFkZU1vdmUpLGhyKCJhcmlhLWhpZGRlbiIsIWEuX29wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeXx8YS5tb2RhbElkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENv''@;'; put 'put ''bnRlbnRTdGFydCksZmUoKSx4ZSgibmdJZiIsIWEubW9kYWxDb250ZW50VGVtcGxhdGUpKCJuZ0lmRWxzZSIsYS5tb2RhbENvbnRlbnRUZW1wbGF0ZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKX19ZnVuY3Rpb24gdXplKGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPUxuKCk7ZGUoMCwiZGl2IiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmJhY2tkcm9wQ2xpY2soKSl9KSxoZSgpfTImYyYmeGUoIkBmYWRlIix2b2lkIDApfWxldCBIbD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxycz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxBcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSkoKTtj''@;'; put 'put ''bGFzcyBEeHt9dmFyIHoxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuREVGQVVMVD0wXT0iREVGQVVMVCIsY1tjLkxPQURJTkc9MV09IkxPQURJTkciLGNbYy5TVUNDRVNTPTJdPSJTVUNDRVNTIixjW2MuRVJST1I9M109IkVSUk9SIixjfSh6MXx8e30pO2xldCBqMD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMubGlzdGVuZXI9YSx0aGlzLl9sb2FkaW5nU3RhdGU9ejEuREVGQVVMVH1nZXQgbG9hZGluZ1N0YXRlKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmdTdGF0ZX1zZXQgbG9hZGluZ1N0YXRlKGEpeyEwPT09YT9hPXoxLkxPQURJTkc6YXx8KGE9ejEuREVGQVVMVCksYSE9''@;'; put 'put ''PXRoaXMuX2xvYWRpbmdTdGF0ZSYmKHRoaXMuX2xvYWRpbmdTdGF0ZT1hLHRoaXMubGlzdGVuZXImJnRoaXMubGlzdGVuZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpKX1uZ09uRGVzdHJveSgpe3RoaXMubG9hZGluZ1N0YXRlPXoxLkRFRkFVTFR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKER4LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyTG9hZGluZyIsIiJdXSxpbnB1dHM6e2xvYWRpbmdTdGF0ZTpbTm4uTm9uZSwiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFUxPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLmhhc0V4cGFuZFRlbXBsYXRlPSExLHRoaXMuX2xvYWRpbmc9ITEsdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBXbn1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNl''@;'; put 'put ''dCBsb2FkaW5nKGEpeyhhPSEhYSkhPT10aGlzLl9sb2FkaW5nJiYodGhpcy5fbG9hZGluZz1hKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPWEsdGhpcy5fZXhwYW5k''@;'; put 'put ''Q2hhbmdlLm5leHQoYSkpfWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZSgpe3RoaXMuZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXt0aGlzLmxvYWRpbmc9YT09PXoxLkxPQURJTkd9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEJ6ZT0wO2Z1bmN0aW9uIE11KCl7cmV0dXJuImNsci1pZC0iK0J6ZSsrfWxldCBNMWU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlv''@;'; put 'put ''bjowfSksY30pKCk7Y29uc3QgJGY9IjAuMnMgZWFzZS1pbi1vdXQiLGp6ZT1bYmgoInNraXBJbml0aWFsUmVuZGVyIixbaXUoIjplbnRlciIsW10pXSksYmgoInRvZ2dsZSIsW2l1KCJ2b2lkID0+ICoiLFt1cyh7ZGlzcGxheToiYmxvY2siLGhlaWdodDowfSksTTAoJGYsdXMoe2hlaWdodDoi''@;'; put 'put ''KiJ9KSldKV0pXSxrWT0oYmgoInNraXBJbml0aWFsUmVuZGVyIixbaXUoIjplbnRlciIsW10pXSksYmgoInRvZ2dsZSIsW2l1KCJ2b2lkID0+ICoiLFt1cyh7ZGlzcGxheToiYmxvY2siLGhlaWdodDowfSksTTAoJGYsdXMoe2hlaWdodDoiKiJ9KSldKSxpdSgiKiA9PiB2b2lkIixbdXMoe2Rp''@;'; put 'put ''c3BsYXk6ImJsb2NrIn0pLE0wKCRmLHVzKHtoZWlnaHQ6MCxkaXNwbGF5OiJub25lIn0pKV0pXSkse29wZW46Ik9wZW4iLGNsb3NlOiJDbG9zZSIsc2hvdzoiU2hvdyIsaGlkZToiSGlkZSIsYXBwbHk6IkFwcGx5IixjYW5jZWw6IkNhbmNlbCIsZXhwYW5kOiJFeHBhbmQiLGNvbGxhcHNlOiJD''@;'; put 'put ''b2xsYXBzZSIsbW9yZToiTW9yZSIsc2VsZWN0OiJTZWxlY3QiLHNlbGVjdEFsbDoiU2VsZWN0IEFsbCIscHJldmlvdXM6IlByZXZpb3VzIixuZXh0OiJOZXh0IixjdXJyZW50OiJKdW1wIHRvIGN1cnJlbnQiLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5pbmc6Ildhcm5pbmci''@;'; put 'put ''LGRhbmdlcjoiRXJyb3IiLG5ldXRyYWw6Ik5ldXRyYWwiLHVua25vd246IlVua25vd24iLHJvd0FjdGlvbnM6IkF2YWlsYWJsZSBhY3Rpb25zIixwaWNrQ29sdW1uczoiTWFuYWdlIENvbHVtbnMiLHNob3dDb2x1bW5zOiJTaG93IENvbHVtbnMiLHNvcnRDb2x1bW46IlNvcnQgQ29sdW1uIixm''@;'; put 'put ''aXJzdFBhZ2U6IkZpcnN0IFBhZ2UiLGxhc3RQYWdlOiJMYXN0IFBhZ2UiLG5leHRQYWdlOiJOZXh0IFBhZ2UiLHByZXZpb3VzUGFnZToiUHJldmlvdXMgUGFnZSIsY3VycmVudFBhZ2U6IkN1cnJlbnQgUGFnZSIsdG90YWxQYWdlczoiVG90YWwgUGFnZXMiLGZpbHRlckl0ZW1zOiJGaWx0ZXIg''@;'; put 'put ''aXRlbXMiLG1pblZhbHVlOiJNaW4gdmFsdWUiLG1heFZhbHVlOiJNYXggdmFsdWUiLG1vZGFsQ29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgTW9kYWwgQ29udGVudCIsbW9kYWxDb250ZW50RW5kOiJFbmQgb2YgTW9kYWwgQ29udGVudCIsc2lkZVBhbmVsUGluOiJQaW4gU2lkZSBQYW5lbCIs''@;'; put 'put ''c2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb246IlNob3cgb3IgaGlkZSBjb2x1bW5zIG1lbnUiLGFsbENvbHVtbnNTZWxlY3RlZDoiQWxsIGNvbHVtbnMgc2VsZWN0ZWQiLHNpZ25wb3N0VG9nZ2xlOiJTaWducG9zdCBUb2dnbGUiLHNpZ25wb3N0Q2xvc2U6IkNsb3NlIixsb2FkaW5nOiJMb2Fk''@;'; put 'put ''aW5nIixkZXRhaWxQYW5lU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixkZXRhaWxQYW5lRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLHNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiU2luZ2xlIHNlbGVjdGlvbiBoZWFkZXIiLHNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6IlNpbmdsZSBh''@;'; put 'put ''Y3Rpb25hYmxlIGhlYWRlciIsZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiVG9nZ2xlIG1vcmUgcm93IGNvbnRlbnQiLGRhdGFncmlkRmlsdGVyQXJpYUxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJE''@;'; put 'put ''aWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGZyb21MYWJlbDoiRnJv''@;'; put 'put ''bSIsdG9MYWJlbDoiVG8iLGFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVy''@;'; put 'put ''dCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWw6IkNoYW5nZSBkYXRlLCB7U0VM''@;'; put 'put ''RUNURURfREFURX0iLGRhdGVwaWNrZXJQcmV2aW91c01vbnRoOiJQcmV2aW91cyBtb250aCIsZGF0ZXBpY2tlckN1cnJlbnRNb250aDoiQ3VycmVudCBtb250aCIsZGF0ZXBpY2tlck5leHRNb250aDoiTmV4dCBtb250aCIsZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlOiJQcmV2aW91cyBkZWNh''@;'; put 'put ''ZGUiLGRhdGVwaWNrZXJOZXh0RGVjYWRlOiJOZXh0IGRlY2FkZSIsZGF0ZXBpY2tlckN1cnJlbnREZWNhZGU6IkN1cnJlbnQgZGVjYWRlIixkYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0OiJTZWxlY3QgbW9udGgsIHRoZSBjdXJyZW50IG1vbnRoIGlzIHtDQUxFTkRBUl9NT05USH0iLGRhdGVw''@;'; put 'put ''aWNrZXJTZWxlY3RZZWFyVGV4dDoiU2VsZWN0IHllYXIsIHRoZSBjdXJyZW50IHllYXIgaXMge0NBTEVOREFSX1lFQVJ9IixkYXRlcGlja2VyU2VsZWN0ZWRMYWJlbDoie0ZVTExfREFURX0gLSBTZWxlY3RlZCIsc3RhY2tWaWV3Q2hhbmdlZDoiVmFsdWUgY2hhbmdlZC4iLHJlc3BvbnNpdmVO''@;'; put 'put ''YXZUb2dnbGVPcGVuOiJPcGVuIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdlRvZ2dsZUNsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd09wZW46Ik9wZW4gbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dD''@;'; put 'put ''bG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdlRvZ2dsZToiVG9nZ2xlIHZlcnRpY2FsIG5hdmlnYXRpb24iLHRpbWVsaW5lU3RlcE5vdFN0YXJ0ZWQ6Ik5vdCBzdGFydGVkIix0aW1lbGluZVN0ZXBDdXJyZW50OiJDdXJyZW50Iix0aW1lbGluZVN0ZXBT''@;'; put 'put ''dWNjZXNzOiJDb21wbGV0ZWQiLHRpbWVsaW5lU3RlcEVycm9yOiJFcnJvciIsdGltZWxpbmVTdGVwUHJvY2Vzc2luZzoiSW4gcHJvZ3Jlc3MiLGNvbWJvYm94RGVsZXRlOiJEZWxldGUgc2VsZWN0ZWQgb3B0aW9uIixjb21ib2JveFNlYXJjaGluZzonU2VhcmNoaW5nIGZvciBtYXRjaGVzIGZv''@;'; put 'put ''ciAie0lOUFVUfSInLGNvbWJvYm94U2VsZWN0aW9uOiJTZWxlY3Rpb24iLGNvbWJvYm94U2VsZWN0ZWQ6IlNlbGVjdGVkIixjb21ib2JveE5vUmVzdWx0czoiTm8gcmVzdWx0cyIsY29tYm9ib3hPcGVuOiJTaG93IG9wdGlvbnMiLGRhdGFncmlkRXhwYW5kYWJsZUJlZ2lubmluZ09mOiJCZWdp''@;'; put 'put ''bm5pbmcgb2YiLGRhdGFncmlkRXhwYW5kYWJsZUVuZE9mOiJFbmQgb2YiLGRhdGFncmlkRXhwYW5kYWJsZVJvd0NvbnRlbnQ6IkV4cGFuZGFibGUgcm93IGNvbnRlbnQiLGRhdGFncmlkRXhwYW5kYWJsZVJvd3NIZWxwZXJUZXh0OiJTY3JlZW4gcmVhZGVyIHRhYmxlIGNvbW1hbmRzIG1heSBu''@;'; put 'put ''b3Qgd29yayBmb3Igdmlld2luZyBleHBhbmRlZCBjb250ZW50LCBwbGVhc2UgdXNlIHlvdXIgc2NyZWVuIHJlYWRlcidzIGJyb3dzZSBtb2RlIHRvIHJlYWQgdGhlIGNvbnRlbnQgZXhwb3NlZCBieSB0aGlzIGJ1dHRvbiIsd2l6YXJkU3RlcDoiU3RlcCIsd2l6YXJkU3RlcFN1Y2Nlc3M6IkNv''@;'; put 'put ''bXBsZXRlZCIsd2l6YXJkU3RlcEVycm9yOiJFcnJvciIsd2l6YXJkU3RlcG5hdkFyaWFMYWJlbDoiV2l6YXJkIHN0ZXBzIixwYXNzd29yZEhpZGU6IkhpZGUgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHBhc3N3b3JkU2hvdzoiU2hvdyBwYXNzd29yZCBmb3Ige0xBQkVMfSIsc2VsZWN0ZWRSb3dz''@;'; put 'put ''OiJTZWxlY3RlZCByb3dzIixzdGVwQ29tcGxldGU6IlN0ZXAge1NURVB9IGNvbXBsZXRlIixzdGVwRXJyb3I6IkVycm9yIGluIHN0ZXAge1NURVB9Iixicm93c2U6IkJyb3dzZSIsZmlsZUNvdW50OiJ7Q09VTlR9IGZpbGVzIixjbGVhckZpbGU6IkNsZWFyIHtGSUxFfSIsY2xlYXJGaWxlczoi''@;'; put 'put ''Q2xlYXIge0NPVU5UfSBmaWxlcyIsc2VsZWN0ZWRUcmVlTm9kZToic2VsZWN0ZWQiLHVuc2VsZWN0ZWRUcmVlTm9kZToidW5zZWxlY3RlZCIsYnJlYWRjcnVtYnNMYWJlbDoiYnJlYWRjcnVtYnMiLGV4cGFuZEJyZWFkY3J1bWJzTGFiZWw6IkV4cGFuZCBicmVhZGNydW1icyJ9KTtsZXQgaXM9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9a1l9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBhcnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTts''@;'; put 'put ''ZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKHY9PntmPWYucmVwbGFjZShgeyR7dn19YCxkW3ZdKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxw''@;'; put 'put ''cm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBLZj1mdW5jdGlvbihjKXtyZXR1cm4gYy5JbmFjdGl2ZT0iaW5hY3RpdmUiLGMuRXJyb3I9ImVycm9yIixjLkNvbXBsZXRlPSJjb21wbGV0ZSIsY30oS2Z8fHt9KSxJeD1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0Iixj''@;'; put 'put ''Lk11bHRpPSJtdWx0aSIsY30oSXh8fHt9KTtsZXQgVXplPTA7Y2xhc3MgWnple2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1LZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhp''@;'; put 'put ''cy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyB4MWV7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmF0ZWd5PUl4LkRlZmF1bHQsdGhpcy5hY2NvcmRpb25Db3VudD1VemUrKyx0aGlzLl9wYW5lbHM9e319Z2V0IHBhbmVscygpe3JldHVybiBPYmplY3Qu''@;'; put 'put ''a2V5cyh0aGlzLl9wYW5lbHMpLm1hcChsPT50aGlzLl9wYW5lbHNbbF0pfXNldFN0cmF0ZWd5KGwpe3RoaXMuc3RyYXRlZ3k9bH11cGRhdGVQYW5lbE9yZGVyKGwpe2wuZm9yRWFjaCgoYSxkKT0+dGhpcy5fcGFuZWxzW2FdLmluZGV4PWQpLHRoaXMucmVtb3ZlT2xkUGFuZWxzKGwpfWFkZFBh''@;'; put 'put ''bmVsKGwsYT0hMSl7dGhpcy5fcGFuZWxzW2xdPW5ldyBaemUobCx0aGlzLmFjY29yZGlvbkNvdW50KSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1hfXRvZ2dsZVBhbmVsKGwsYSl7Y29uc3QgaD12b2lkIDAhPT1hP2E6IXRoaXMuX3BhbmVsc1tsXS5vcGVuO2gmJnRoaXMuc3RyYXRlZ3k9PT1JeC5E''@;'; put 'put ''ZWZhdWx0JiZ0aGlzLmNsb3NlQWxsUGFuZWxzKCksdGhpcy5fcGFuZWxzW2xdLm9wZW49aH1kaXNhYmxlUGFuZWwobCxhKXt0aGlzLl9wYW5lbHNbbF0uZGlzYWJsZWQ9YX1jbG9zZUFsbFBhbmVscygpe3RoaXMucGFuZWxzLmZvckVhY2gobD0+dGhpcy5fcGFuZWxzW2wuaWRdLm9wZW49ITEp''@;'; put 'put ''fXJlbW92ZU9sZFBhbmVscyhsKXt0aGlzLnBhbmVscy5maWx0ZXIoYT0+dm9pZCAwPT09bC5maW5kKGQ9PmQ9PT1hLmlkKSkuZm9yRWFjaChhPT5kZWxldGUgdGhpcy5fcGFuZWxzW2EuaWRdKX19bGV0IFJ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjY29yZGlvbj1uZXcg''@;'; put 'put ''eDFlLHRoaXMuX3BhbmVsc0NoYW5nZXM9bmV3IGVpKHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9Z2V0UGFuZWxDaGFuZ2VzKGEpe3JldHVybiB0aGlzLl9wYW5lbHNDaGFuZ2VzLnBpcGUoTHIoZD0+ZC5maW5kKGg9PmguaWQ9PT1hKSkpfXNldFN0cmF0ZWd5KGEpe3RoaXMuYWNjb3JkaW9uLnNl''@;'; put 'put ''dFN0cmF0ZWd5KGEpfWFkZFBhbmVsKGEsZD0hMSl7dGhpcy5hY2NvcmRpb24uYWRkUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9dG9nZ2xlUGFuZWwoYSxkKXt0aGlzLmFjY29yZGlvbi50b2dnbGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX1kaXNhYmxl''@;'; put 'put ''UGFuZWwoYSxkKXt0aGlzLmFjY29yZGlvbi5kaXNhYmxlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9dXBkYXRlUGFuZWxPcmRlcihhKXt0aGlzLmFjY29yZGlvbi51cGRhdGVQYW5lbE9yZGVyKGEpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX1lbWl0VXBkYXRlZFBhbmVs''@;'; put 'put ''cygpe3RoaXMuX3BhbmVsc0NoYW5nZXMubmV4dCh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGTD0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5wYXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmFjY29yZGlvblNlcnZpY2U9aCx0aGlzLmlmRXhwYW5kU2VydmljZT1mLHRoaXMuY2RyPXYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnBhbmVsT3Blbj0hMSx0aGlzLmhl''@;'; put 'put ''YWRpbmdFbmFibGVkPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBLcix0aGlzLl9pZD1NdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YX1nZXQgcGFuZWxOdW1iZXIoKXtyZXR1cm4gdGhpcy5fcGFuZWxJbmRleCsxfWdldCBoZWFkaW5nTGV2ZWwo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbD90aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsOnRoaXMucGFyZW50PzQ6M31uZ09uSW5pdCgpe3RoaXMucGFuZWw9dGhpcy5hY2NvcmRpb25TZXJ2aWNlLmdldFBhbmVsQ2hhbmdlcyh0aGlzLmlkKS5waXBlKEd1KGE9PnRoaXMuZW1p''@;'; put 'put ''dFBhbmVsQ2hhbmdlKGEpKSksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmFkZFBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVs''@;'; put 'put ''KHRoaXMuaWQsdGhpcy5kaXNhYmxlZCl9bmdPbkNoYW5nZXMoYSl7dGhpcy5wYW5lbCYmYS5wYW5lbE9wZW4mJmEucGFuZWxPcGVuLmN1cnJlbnRWYWx1ZSE9PWEucGFuZWxPcGVuLnByZXZpb3VzVmFsdWUmJnRoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkLGEucGFu''@;'; put 'put ''ZWxPcGVuLmN1cnJlbnRWYWx1ZSksdGhpcy5wYW5lbCYmYS5kaXNhYmxlZCYmYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUhPT1hLmRpc2FibGVkLnByZXZpb3VzVmFsdWUmJnRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCxhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSl9''@;'; put 'put ''dG9nZ2xlUGFuZWwoKXt0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCl9Y29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShhKXthLm9wZW58fCh0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMSl9Z2V0UGFuZWxTdGF0ZUNsYXNzZXMoYSl7cmV0dXJuYGNs''@;'; put 'put ''ci1hY2NvcmRpb24tcGFuZWwtJHthLnN0YXR1c30gJHthLm9wZW4/ImNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiI6IiJ9YH1nZXRBY2NvcmRpb25Db250ZW50SWQoYSl7cmV0dXJuYGNsci1hY2NvcmRpb24tY29udGVudC0ke2F9J2B9Z2V0QWNjb3JkaW9uSGVhZGVySWQoYSl7cmV0dXJuYGNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLSR7YX1gfXN0ZXBDb21wbGV0ZVRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwQ29tcGxldGUse1NURVA6YS50b1N0cmluZygpfSl9c3RlcEVycm9yVGV4dChhKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBFcnJvcix7U1RFUDphLnRvU3RyaW5nKCl9KX1lbWl0UGFuZWxDaGFuZ2UoYSl7YS5pbmRleCE9PXRoaXMuX3BhbmVsSW5kZXgmJih0aGlzLl9wYW5lbEluZGV4PWEuaW5kZXgsdGhpcy5jZHIuZGV0ZWN0Q2hh''@;'; put 'put ''bmdlcygpKSxhLm9wZW4hPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuQ2hhbmdlLmVtaXQoYS5vcGVuKSx0aGlzLnBhbmVsT3Blbj1hLm9wZW4pLGEub3BlbiYmKHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UoaXMpLEdlKFJ4KSxHZShVMSksR2UoRXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLE0xZSw0''@;'; put 'put ''KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCkoImNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQiLGQuZGlzYWJs''@;'; put 'put ''ZWQpfSxpbnB1dHM6e2Rpc2FibGVkOltObi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxwYW5lbE9wZW46W05uLk5vbmUsImNsckFjY29yZGlvblBhbmVsT3BlbiIsInBhbmVsT3BlbiJdLGhlYWRpbmdFbmFibGVkOltObi5Ob25lLCJjbHJBY2NvcmRpb25Q''@;'; put 'put ''YW5lbEhlYWRpbmdFbmFibGVkIiwiaGVhZGluZ0VuYWJsZWQiXSxleHBsaWNpdEhlYWRpbmdMZXZlbDpbTm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxIZWFkaW5nTGV2ZWwiLCJleHBsaWNpdEhlYWRpbmdMZXZlbCJdfSxvdXRwdXRzOntwYW5lbE9wZW5DaGFuZ2U6ImNsckFjY29yZGlvblBh''@;'; put 'put ''bmVsT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOltkYShbVTFdKSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOkpGZSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaGVhZGVyQnV0dG9uIiwiIl0sWzQsIm5nSWYiXSxbMywibmdDbGFzcyJdLFsxLCJjbHItYWNjb3JkaW9uLWhlYWRlciJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsMSwiY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uIiwzLCJjbGljayIsImlkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsicm9sZSIs''@;'; put 'put ''InJlZ2lvbiIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbiIsMywiaWQiXSxbImNsYXNzIiwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsImNsci1hY2NvcmRpb24tY29udGVudCJdLFsxLCJjbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnQiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShYRmUpLGd0KDAsZUhlLDEyLDE2LCJuZy1jb250YWluZXIiLDEpLGVsKDEsImFzeW5jIikpLDImYSYmeGUoIm5nSWYiLERjKDEsMSxkLnBhbmVsKSl9LGRlcGVuZGVuY2llczpbd3UseWEscnMsRU1dLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRp''@;'; put 'put ''b246anplfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEUxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuYWNjb3JkaW9uU2VydmljZT1hLHRoaXMubXVsdGlQYW5lbD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdPbkluaXQoKXt0aGlzLnNldEFjY29yZGlvblN0cmF0''@;'; put 'put ''ZWd5KCl9bmdPbkNoYW5nZXMoYSl7YS5tdWx0aVBhbmVsLmN1cnJlbnRWYWx1ZSE9PWEubXVsdGlQYW5lbC5wcmV2aW91c1ZhbHVlJiZ0aGlzLnNldEFjY29yZGlvblN0cmF0ZWd5KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JET01D''@;'; put 'put ''aGFuZ2VzKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRBY2NvcmRpb25TdHJhdGVneSgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS5zZXRTdHJhdGVneSh0aGlzLm11bHRpUGFuZWw/SXguTXVsdGk6SXguRGVmYXVsdCl9''@;'; put 'put ''bGlzdGVuRm9yRE9NQ2hhbmdlcygpe3JldHVybiB0aGlzLnBhbmVscy5jaGFuZ2VzLnBpcGUoeDIodGhpcy5wYW5lbHMpKS5zdWJzY3JpYmUoYT0+dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnVwZGF0ZVBhbmVsT3JkZXIoYS50b0FycmF5KCkubWFwKGQ9PmQuaWQpKSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFJ4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxGTCw0KSwyJmEpe2xldCBmO0NpKGY9U2ko''@;'; put 'put ''KSkmJihkLnBhbmVscz1mKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbiIsITApfSxpbnB1dHM6e211bHRpUGFuZWw6W05uLk5vbmUsImNsckFjY29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOltk''@;'; put 'put ''YShbUnhdKSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFQxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1jb250ZW50Il0sWyJjbHItc3RlcC1jb250ZW50Il1dLG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxBMWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tdGl0bGUiXSxbImNsci1zdGVwLXRpdGxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFjY29yZGlvbi10aXRsZSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksUmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExLHRoaXMuX2Nob2NvbGF0ZT1uZXcg''@;'; put 'put ''V259Z2V0IGNob2NvbGF0ZSgpe3JldHVybiB0aGlzLl9jaG9jb2xhdGUuYXNPYnNlcnZhYmxlKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2t8fHRoaXMuX2Nob2NvbGF0ZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksTGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc3Vic2NyaXB0aW9uPWQuY2hvY29sYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMubGF0ZXN0Rmxhdm9yIT09dGhpcy5mbGF2b3ImJihkLmRpc2Fi''@;'; put 'put ''bGVDaG9jb2xhdGVDaGVjaz0hMCxhLmRldGVjdENoYW5nZXMoKSxkLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSl9KX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLmxhdGVzdEZsYXZvcj10aGlzLmZsYXZvcn1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJl''@;'; put 'put ''KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxHZShSYikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksRFk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJie31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1ZcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxmZWF0dXJlczpbd2FdfSksY30pKCksazFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBMYntjb25zdHJ1Y3RvcihhLGQs''@;'; put 'put ''aCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItYWNjb3JkaW9uLXBhbmVsIHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGNsci1hY2NvcmRpb24iKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKERZLDgpLEdlKFUxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEQxZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRWIsdmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBc119KSxjfSkoKSxLemU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsRDFlLEQxZV19KSxjfSkoKTt2YXIgZ2E9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuQXJyb3dMZWZ0''@;'; put 'put ''PSJBcnJvd0xlZnQiLGMuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkFycm93RG93bj0iQXJyb3dEb3duIixjLkJhY2tzcGFjZT0iQmFja3NwYWNlIixjLlRhYj0iVGFiIixjLkVudGVyPSJFbnRlciIsYy5Fc2NhcGU9IkVzY2FwZSIsYy5TcGFjZT0iU3Bh''@;'; put 'put ''Y2UiLGMuU3BhY2ViYXI9IiAiLGMuSG9tZT0iSG9tZSIsYy5FbmQ9IkVuZCIsYy5QYWdlRG93bj0iUGFnZURvd24iLGMuUGFnZVVwPSJQYWdlVXAiLGN9KGdhfHx7fSksaDc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuQXJyb3dVcD0iVXAiLGMuQXJyb3dEb3duPSJEb3duIixjLkFycm93UmlnaHQ9''@;'; put 'put ''IlJpZ2h0IixjLkFycm93TGVmdD0iTGVmdCIsYy5TcGFjZT0iU3BhY2ViYXIiLGMuRXNjYXBlPSJFc2MiLGN9KGg3fHx7fSk7ZnVuY3Rpb24gSTIoYyl7cmV0dXJuIGM9PT1nYS5BcnJvd1VwfHxjPT09aDcuQXJyb3dVcD9nYS5BcnJvd1VwOmM9PT1nYS5BcnJvd0Rvd258fGM9PT1oNy5BcnJv''@;'; put 'put ''d0Rvd24/Z2EuQXJyb3dEb3duOmM9PT1nYS5BcnJvd1JpZ2h0fHxjPT09aDcuQXJyb3dSaWdodD9nYS5BcnJvd1JpZ2h0OmM9PT1nYS5BcnJvd0xlZnR8fGM9PT1oNy5BcnJvd0xlZnQ/Z2EuQXJyb3dMZWZ0OmM9PT1nYS5TcGFjZXx8Yz09PWg3LlNwYWNlP2dhLlNwYWNlOmM9PT1nYS5Fc2Nh''@;'; put 'put ''cGV8fGM9PT1oNy5Fc2NhcGU/Z2EuRXNjYXBlOmN9ZnVuY3Rpb24gUlkoYyl7Y29uc3QgbD1JMihjLmtleSk7KGw9PT1nYS5BcnJvd1VwfHxsPT09Z2EuQXJyb3dEb3dufHxsPT09Z2EuQXJyb3dMZWZ0fHxsPT09Z2EuQXJyb3dSaWdodCkmJmMucHJldmVudERlZmF1bHQoKX1sZXQgc2M9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZT1uZXcgV24sdGhpcy5fb3BlbkV2ZW50Q2hhbmdlPW5ldyBXbix0aGlzLl9wb3BvdmVyQWxpZ25lZD1uZXcgV24sdGhpcy5fcG9wb3ZlclZpc2libGU9bmV3IFdufWdldCBvcGVuQ2hhbmdlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX29wZW5DaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHBvcG92ZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJWaXNpYmxlLmFzT2JzZXJ2YWJsZSgpfWdldCBvcGVuRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fXNldCBvcGVuRXZlbnQoYSl7dGhpcy5f''@;'; put 'put ''b3BlbkV2ZW50PWEsdGhpcy5fb3BlbkV2ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihhKXt0aGlzLl9vcGVuIT09KGE9ISFhKSYmKHRoaXMuX29wZW49YSx0aGlzLl9vcGVuQ2hhbmdlLm5leHQoYSkpfWdldCBvcmlnaW5hbEV2ZW50KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX29wZW5FdmVudH1nZXQgcG9wb3ZlckFsaWduZWQoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlckFsaWduZWQuYXNPYnNlcnZhYmxlKCl9Z2V0RXZlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZVdpdGhFdmVudChh''@;'; put 'put ''KXtSWShhKSx0aGlzLm9wZW5FdmVudD1hLHRoaXMub3Blbj0hdGhpcy5vcGVufXBvcG92ZXJWaXNpYmxlRW1pdChhKXt0aGlzLl9wb3BvdmVyVmlzaWJsZS5uZXh0KGEpfXBvcG92ZXJBbGlnbmVkRW1pdChhKXt0aGlzLl9wb3BvdmVyQWxpZ25lZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxPeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWQsdGhp''@;'; put 'put ''cy5kb2N1bWVudD1oLHRoaXMub3V0c2lkZUNsaWNrQ2xvc2U9ITAsdGhpcy5zY3JvbGxUb0Nsb3NlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PntmPyh0aGlzLmFkZEVzY2FwZUxpc3RlbmVyKCksdGhp''@;'; put 'put ''cy5hZGRDbGlja0xpc3RlbmVyKCksdGhpcy5hZGRTY3JvbGxMaXN0ZW5lcigpKTp0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9KSxkLmdldEV2ZW50Q2hhbmdlKCkuc3Vic2NyaWJlKGY9Pnt0aGlzLmlnbm9yZWRFdmVudD1mfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9YWRkU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLnNjcm9sbFRvQ2xvc2UmJih0aGlzLmRvY3VtZW50U2Nyb2xsZXI9eGQodGhpcy5kb2N1bWVudCwic2Nyb2xsIix7Y2FwdHVyZTohMH0p''@;'; put 'put ''LHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuZG9jdW1lbnRTY3JvbGxlci5waXBlKCRsKHRoaXMudGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9''@;'; put 'put ''KSl9cmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLmRvY3VtZW50U2Nyb2xsZXImJih0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGRlbGV0ZSB0aGlzLmRvY3VtZW50U2Nyb2xsZXIpfWFkZENsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYodGhp''@;'; put 'put ''cy5kb2N1bWVudENsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwiY2xpY2siLGE9PnthPT09dGhpcy5pZ25vcmVkRXZlbnQ/ZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50Oih0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSxhLnRhcmdldC5mb2N1cygp''@;'; put 'put ''KX0pKX1yZW1vdmVDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKGRlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudCx0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRDbGlja0xpc3Rl''@;'; put 'put ''bmVyKSl9YWRkRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImtleWRvd24uZXNjYXBlIiwoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pfXJlbW92ZUVz''@;'; put 'put ''Y2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lciYmKHRoaXMuZXNjYXBlTGlzdGVuZXIoKSxkZWxldGUgdGhpcy5lc2NhcGVMaXN0ZW5lcil9c2V0Q2xvc2VGb2N1cygpe3RoaXMuY2xvc2VCdXR0b25SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfXNldEFuY2hvckZvY3VzKCl7dGhp''@;'; put 'put ''cy5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfXRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKGEpe2xldCBkPWEudGFyZ2V0O2Zvcig7ZC5jbGFzc0xpc3QmJiJib2R5IiE9PWQucGFyZW50RWxlbWVudC5sb2NhbE5hbWU7KWQ9ZC5wYXJlbnRFbGVtZW50''@;'; put 'put ''O3JldHVybiEhZC5jbGFzc0xpc3QmJiFkLmNsYXNzTGlzdC5jb250YWlucygiY2xyLXBvcG92ZXItY29udGVudCIpfXJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl7dGhpcy5yZW1vdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucmVtb3ZlRXNjYXBl''@;'; put 'put ''TGlzdGVuZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoRW8pLHhyKHNjKSx4cih2cykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFB4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSxkKXthLmFuY2hvckJ1dHRvblJlZj1kfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShPeCksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckFuY2hvciIsIiJdXSxob3N0VmFyczoyLGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hbmNob3IiLCEwKX19KSxjfSkoKSxMMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2U9ZCx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9aCx0''@;'; put 'put ''aGlzLmNsb3NlQ2hhbmdlPW5ldyBLcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnBpcGUoJGwoZj0+IWYpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNsb3NlQ2hhbmdlLm5leHQoKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0''@;'; put 'put ''T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNldEFuY2hvckZvY3VzKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY2xvc2VCdXR0b25SZWY9dGhpcy5lbGVtZW50UmVmLHRoaXMuc21hcnRFdmVudHNTZXJ2''@;'; put 'put ''aWNlLnNldENsb3NlRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShPeCksR2Uoc2MpKX0sYy5cdTAyNzVkaXI9''@;'; put 'put ''RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZUcigiY2xyLXNtYXJ0''@;'; put 'put ''LWNsb3NlLWJ1dHRvbiIsITApfSxvdXRwdXRzOntjbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9uQ2xvc2VDaGFuZ2UifX0pLGN9KSgpO3ZhciBoMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlZFUlRJQ0FMPTBdPSJWRVJUSUNBTCIsY1tjLkhPUklaT05UQUw9MV09IkhPUklaT05UQUwiLGN9KGgx''@;'; put 'put ''fHx7fSksT3M9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TVEFSVD0wXT0iU1RBUlQiLGNbYy5DRU5URVI9LjVdPSJDRU5URVIiLGNbYy5FTkQ9MV09IkVORCIsY30oT3N8fHt9KSxGeD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJPVFRPTT0wXT0iQk9UVE9NIixjW2MuTEVGVD0xXT0iTEVGVCIs''@;'; put 'put ''Y1tjLlJJR0hUPTJdPSJSSUdIVCIsY1tjLlRPUD0zXT0iVE9QIixjfShGeHx8e30pO2NvbnN0IG1tPWM9Pih7Li4uYyxzaWRlOi0xKmMuc2lkZX0pLGFnPShjLGwpPT57Y29uc3QgYT1jLmNvbnRlbnQrKGw/LjU6LS41KTtyZXR1cm4gYTwwfHxhPjE/Yzp7Li4uYyxjb250ZW50OmF9fTtmdW5j''@;'; put 'put ''dGlvbiBPYihjLGwsYSl7cmV0dXJuIGQ9PmwoYyhkKSxhKX1mdW5jdGlvbiBfaChjLGwsYSl7bGV0IGQ9bC5sZWZ0LGg9bC50b3A7c3dpdGNoKGMuYXhpcytjLnNpZGUpe2Nhc2UtMTpkKz1PMWUoYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nhc2UgMTpkKz1PMWUoYyxsLGEpLGgrPWwuaGVp''@;'; put 'put ''Z2h0O2JyZWFrO2Nhc2UgMDpkLT1hLndpZHRoLGgrPVAxZShjLGwsYSk7YnJlYWs7Y2FzZSAyOmQrPWwud2lkdGgsaCs9UDFlKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gTzFlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBPcy5TVEFS''@;'; put 'put ''VDpicmVhaztjYXNlIE9zLkNFTlRFUjpkKz1sLndpZHRoLzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZCs9bC53aWR0aH1zd2l0Y2goYy5jb250ZW50KXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQtPWEud2lkdGgvMjticmVhaztjYXNlIE9zLkVORDpkLT1hLndpZHRofXJldHVy''@;'; put 'put ''biBkfWZ1bmN0aW9uIFAxZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZCs9bC5oZWlnaHQvMjticmVhaztjYXNlIE9zLkVORDpkKz1sLmhlaWdodH1zd2l0Y2goYy5jb250ZW50KXtjYXNlIE9zLlNUQVJUOmJyZWFr''@;'; put 'put ''O2Nhc2UgT3MuQ0VOVEVSOmQtPWEuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZC09YS5oZWlnaHR9cmV0dXJuIGR9bGV0IEYxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9ZCx0aGlzLl9zaG91bGRSZWFsaWdu''@;'; put 'put ''PW5ldyBXbix0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCF0bCh0aGlzLnBsYXRmb3JtSWQpKXJldHVybnt4T2Zmc2V0OjAseU9mZnNldDow''@;'; put 'put ''fTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY29udGVudE9m''@;'; put 'put ''ZnNldHM9X2godGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBYemUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xlZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9''@;'; put 'put ''Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKEZ4LlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2goRnguTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfHxhLnB1c2goRnguQk9U''@;'; put 'put ''VE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChGeC5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQucmVkdWNlKChmLHYpPT5mK3YsMCk7''@;'; put 'put ''cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09aDEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5IT1JJWk9OVEFMP3RoaXMuaGFuZGxlSG9yaXpvbnRhbEF4''@;'; put 'put ''aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5IT1JJWk9OVEFMJiZ0aGlzLmhhbmRs''@;'; put 'put ''ZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcDwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0Kz1NYXRoLmFicyh0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCkpLHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCt0''@;'; put 'put ''aGlzLmN1cnJlbnRBbmNob3JDb29yZHMueTwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0PTAtdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApLHRoaXMuY29udGVudE9mZnNldHN9aGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGEpe3N3aXRjaChhKXtjYXNlIDA6Y2Fz''@;'; put 'put ''ZSAzOnRoaXMuY29udGVudE9mZnNldHM9X2gobW0odGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMTp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9y''@;'; put 'put ''Q29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpLHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldDwwJiYodGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PTEwKTticmVhaztjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz1faChhZyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJl''@;'; put 'put ''bnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyl9fWhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTp7Y29uc3QgZD1PYihtbSxhZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3Vy''@;'; put 'put ''cmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDQ6e2NvbnN0IGQ9T2IobW0sYWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9X2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv''@;'; put 'put ''b3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOntjb25zdCBkPU9iKG1tLGFnLCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2Ug''@;'; put 'put ''MTp7Y29uc3QgZD1PYihtbSxhZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fWhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGEpe3N3aXRj''@;'; put 'put ''aChhKXtjYXNlIDE6Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9X2gobW0odGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMDp0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGFnKHRoaXMucG9zaXRpb24s''@;'; put 'put ''ITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz1faChhZyh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyl9fWhh''@;'; put 'put ''bmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1OmNhc2UgNDp7Y29uc3QgZD1PYihtbSxhZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz1faChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50''@;'; put 'put ''Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6Y2FzZSAxOntjb25zdCBkPU9iKG1tLGFnLCEwKTt0aGlzLmNvbnRlbnRPZmZzZXRzPV9oKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2Jy''@;'; put 'put ''ZWFrfX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKE94KSx4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEh4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0s''@;'; put 'put ''SSl7dGhpcy5kb2N1bWVudD1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy50ZW1wbGF0ZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlPXYsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2U9TSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9SSx0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W10sdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9bnVsbCx0aGlzLmNoZWNrQ29sbGVjdG9yPW5ldyBLcn1zZXQgb3BlbihhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hIWF9c2V0IGNv''@;'; put 'put ''bnRlbnRBdChhKXt0aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uPWF9c2V0IG91dHNpZGVDbGlja0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLm91dHNpZGVDbGlja0Nsb3NlPSEhYX1zZXQgc2Nyb2xsVG9DbG9zZShhKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5z''@;'; put 'put ''Y3JvbGxUb0Nsb3NlPSEhYX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtpZih0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbiYmdGhpcy52aWV3KXtjb25zdCBhPXRoaXMudmlldy5yb290Tm9kZXNbMF0ub2Zmc2V0SGVpZ2h0Oyh0aGlzLnNob3VsZFJlYWxpZ258fG51bGwhPT10aGlzLnByZXZp''@;'; put 'put ''b3VzQ29udGVudEhlaWdodCYmdGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQhPT1hKSYmKHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PWEsdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCkpfX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnNtYXJ0T3Bl''@;'; put 'put ''blNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5hZGRDb250ZW50KCk6dGhpcy5yZW1vdmVDb250ZW50KCl9KSx0aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlLnNob3VsZFJlYWxpZ24uc3Vic2NyaWJlKCgpPT57dGhpcy5zaG91bGRSZWFsaWduPSEwfSksdGhpcy5jaGVj''@;'; put 'put ''a0NvbGxlY3Rvci5waXBlKGZtKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmFsaWduQ29udGVudCgpLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnZpZXcmJih0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIiksdGhpcy5zbWFydE9w''@;'; put 'put ''ZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMCkpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5yZW1vdmVDb250ZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1hZGRDb250ZW50KCl7dGhpcy52aWV3PXRoaXMuY29udGFpbmVyLmNyZWF0ZUVt''@;'; put 'put ''YmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTtjb25zdFthXT10aGlzLnZpZXcucm9vdE5vZGVzO3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNvbnRlbnRSZWY9YSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsImNsci1wb3BvdmVyLWNvbnRlbnQiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEs''@;'; put 'put ''InRvcCIsIjBweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwibGVmdCIsIjBweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwib3BhY2l0eSIsIjAiKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj10aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJjbGljayIsZD0+e3RoaXMuc21hcnRP''@;'; put 'put ''cGVuU2VydmljZS5vcGVuRXZlbnQ9ZH0pLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChkPT57dGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksZCl9KSx0aGlzLnNob3VsZFJlYWxpZ249ITB9cmVtb3ZlQ29udGVudCgpe3RoaXMudmlldyYmKHRoaXMucmVt''@;'; put 'put ''b3ZlQ2xpY2tMaXN0ZW5lckZuJiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4oKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsKSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goYT0+dGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksYSkpLHRo''@;'; put 'put ''aXMuY29udGFpbmVyLmNsZWFyKCksZGVsZXRlIHRoaXMudmlldyx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCExKSl9YWxpZ25Db250ZW50KCl7aWYoIXRoaXMudmlldylyZXR1cm47Y29uc3QgYT10aGlzLnNtYXJ0UG9zaXRpb25TZXJ2aWNlLmFsaWduQ29udGVu''@;'; put 'put ''dCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sInRvcCIsYCR7YS55T2Zmc2V0fXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJsZWZ0IixgJHthLnhPZmZzZXR9cHhg''@;'; put 'put ''KSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlckFsaWduZWRFbWl0KHRoaXMudmlldy5yb290Tm9kZXNbMF0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh2cyksR2UoRG8pLEdlKFNsKSxHZShFbyksR2UoRjFlKSxHZShPeCksR2Uoc2Mp''@;'; put 'put ''KX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3ZlckNvbnRlbnQiLCIiXV0saW5wdXRzOntvcGVuOltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudCIsIm9wZW4iXSxjb250ZW50QXQ6W05uLk5vbmUsImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250ZW50''@;'; put 'put ''QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbTm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwib3V0c2lkZUNsaWNrQ2xvc2UiXSxzY3JvbGxUb0Nsb3NlOltObi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCJzY3JvbGxUb0Nsb3NlIl19''@;'; put 'put ''fSksY30pKCksTng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2U9YSx0aGlzLm9wZW5DbG9zZUNoYW5nZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+''@;'; put 'put ''e3RoaXMub3BlbkNsb3NlQ2hhbmdlLm5leHQoZCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9KSwyJmEmJlRyKCJjbHItc21hcnQtb3Blbi1jbG9zZSIsITApfSxvdXRwdXRzOntvcGVuQ2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPcGVuQ2xvc2VDaGFuZ2UifX0pLGN9KSgpLFZ4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpO3ZhciB3aD1mdW5jdGlvbihjKXtyZXR1cm4gYy5VUD0idXAiLGMuRE9XTj0iZG93biIsYy5MRUZUPSJsZWZ0IixjLlJJR0hUPSJy''@;'; put 'put ''aWdodCIsY30od2h8fHt9KTtsZXQgd3A9Y2xhc3N7Y29uc3RydWN0b3IobCl7dGhpcy5yZW5kZXJlcj1sLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChsKXt0aGlzLl9jdXJyZW50PWx9bGlzdGVuVG9BcnJvd0tleXMobCl7''@;'; put 'put ''dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUod2guVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRo''@;'; put 'put ''aXMubW92ZSh3aC5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUod2guTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5''@;'; put 'put ''ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZSh3aC5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihsLGE9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsLCJ0YWJpbmRleCIsYSksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhsKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go''@;'; put 'put ''dGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uZW50ZXIiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1v''@;'; put 'put ''dmVUbyhsKXt2b2lkIDAhPT1sJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGwuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWwpfW1vdmUobCl7bGV0IGE9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBkPXRoaXMuY3VycmVudFtsXTtkJiYoQk0oZCk/ZDpmbyhkKSkuc3Vic2Ny''@;'; put 'put ''aWJlKGY9PntmJiYodGhpcy5tb3ZlVG8oZiksYT0hMCl9KX1yZXR1cm4gYX1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5s''@;'; put 'put ''aXN0ZW5GdW5jcy5mb3JFYWNoKGw9PmwoKSl9fTt3cC5cdTAyNzVmYWM9ZnVuY3Rpb24obCl7cmV0dXJuIG5ldyhsfHx3cCkoeHIoRW8pKX0sd3AuXHUwMjc1cHJvdj1hbih7dG9rZW46d3AsZmFjdG9yeTp3cC5cdTAyNzVmYWN9KTtjb25zdCBWMWU9e3Byb3ZpZGU6d3AsdXNlRmFjdG9yeTpm''@;'; put 'put ''dW5jdGlvbiBKemUoYyxsKXtyZXR1cm4gY3x8bmV3IHdwKGwpfSxkZXBzOltbbmV3IEkxLG5ldyBsZCx3cF0sRW9dfTt2YXIgUjI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0iQUZURVIiLGN9KFIyfHx7fSk7Y2xhc3MgVGR7fVRkWyJ0''@;'; put 'put ''b3AtcmlnaHQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSxUZFsidG9wLWxlZnQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sVGRbImJvdHRv''@;'; put 'put ''bS1yaWdodCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6UjIuQUZURVIsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sVGRbImJvdHRvbS1sZWZ0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sVGRbInJpZ2h0''@;'; put 'put ''LXRvcCJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5BRlRFUixhbmNob3I6T3MuQ0VOVEVSLGNvbnRlbnQ6T3MuRU5EfSxUZFsicmlnaHQtYm90dG9tIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSxUZFsi''@;'; put 'put ''bGVmdC10b3AiXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6UjIuQkVGT1JFLGFuY2hvcjpPcy5DRU5URVIsY29udGVudDpPcy5FTkR9LFRkWyJsZWZ0LWJvdHRvbSJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTpSMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9''@;'; put 'put ''O2NvbnN0IE5MPW5ldyBNdCgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2xldCBRemU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGx9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNl''@;'; put 'put ''cnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMubGFzdE9wZW5DaGFuZ2U9YX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9b25Fc2NhcGVLZXkoYSl7bnVsbCE9PXRoaXMubGFzdE9wZW5DaGFuZ2UmJighMT09PXRoaXMubGFzdE9wZW5D''@;'; put 'put ''aGFuZ2UmJmEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JkZ0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRXNjYXBlS2V5KGYpfSl9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxvZz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5''@;'; put 'put ''cGU6YyxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltkYShbc2MsT3gsRjFlLHtwcm92aWRlOk5MLHVzZUV4aXN0aW5nOkppfV0pLHZkKFtRemVdKV19KSxjfSkoKTtjbGFzcyBPWXtzdGF0aWMgbGlua1BhcmVudChsLGEsZCl7bC5mb3JFYWNoKGg9PmhbZF09YSl9c3RhdGljIGxpbmtWZXJ0aWNh''@;'; put 'put ''bChsLGE9ITApe2wuZm9yRWFjaCgoZCxoKT0+e2g+MCYmKGQudXA9bFtoLTFdKSxoPGwubGVuZ3RoLTEmJihkLmRvd249bFtoKzFdKX0pLGEmJmwubGVuZ3RoPjEmJihsWzBdLnVwPWxbbC5sZW5ndGgtMV0sbFtsLmxlbmd0aC0xXS5kb3duPWxbMF0pfX1sZXQgdm09KCgpPT57Y2xhc3MgY3t1''@;'; put 'put ''c2VyRGVmaW5lZFdpZHRoKGEpe2NvbnN0IGQ9YS5jbG9uZU5vZGUoITApO2QuaWQmJihkLmlkPWQuaWQrIi1jbG9uZSIpLGQuY2xhc3NMaXN0LmFkZCgiZGF0YWdyaWQtY2VsbC13aWR0aC16ZXJvIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTtjb25zdCBoPXRoaXMuY2xpZW50UmVj''@;'; put 'put ''dChkKS53aWR0aDtyZXR1cm4gZC5yZW1vdmUoKSxofXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1''@;'; put 'put ''dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChk''@;'; put 'put ''LmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRoKGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13''@;'; put 'put ''aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFZMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgpe3RoaXMuZWxlbWVudD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsckV4cGFuZFRyaWdnZXI9ITEsdGhpcy5zdGFydEhlaWdodD0wfWdldCBleHBhbmRBbmltYXRpb24oKXtyZXR1cm57dmFsdWU6dGhpcy5jbHJFeHBhbmRUcmlnZ2VyLHBhcmFtczp7c3Rh''@;'; put 'put ''cnRIZWlnaHQ6dGhpcy5zdGFydEhlaWdodH19fWFuaW1hdGlvblN0YXJ0KGEpeyJ2b2lkIiE9PWEuZnJvbVN0YXRlJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImhpZGRlbiIpfWFuaW1hdGlvbkRvbmUoYSl7InZvaWQiIT09''@;'; put 'put ''YS5mcm9tU3RhdGUmJih0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIpLHRoaXMudXBkYXRlU3RhcnRIZWlnaHQoKSl9dXBkYXRlU3RhcnRIZWlnaHQoKXt0aGlzLnN0YXJ0SGVpZ2h0PXRoaXMuZG9tQWRhcHRlci5jb21wdXRl''@;'; put 'put ''ZEhlaWdodCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCl8fDB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZSh2bSksR2UoRW8pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWV4cGFuZGFibGUtYW5p''@;'; put 'put ''bWF0aW9uIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZkVSgiQGV4cGFuZEFuaW1hdGlvbi5zdGFydCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5pbWF0aW9uU3RhcnQoZil9KSgiQGV4cGFuZEFuaW1hdGlvbi5kb25lIixmdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''ZC5hbmltYXRpb25Eb25lKGYpfSksMiZhJiZsVSgiQGV4cGFuZEFuaW1hdGlvbiIsZC5leHBhbmRBbmltYXRpb24pfSxpbnB1dHM6e2NsckV4cGFuZFRyaWdnZXI6ImNsckV4cGFuZFRyaWdnZXIifSxmZWF0dXJlczpbZGEoW3ZtXSldLG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoxLHZh''@;'; put 'put ''cnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltiaCgiZXhwYW5kQW5pbWF0aW9uIixbaXUoInRydWUgPD0+IGZhbHNlIixbdXMoe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSksTTAoIjAuMnMg''@;'; put 'put ''ZWFzZS1pbi1vdXQiLHVzKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksUFk9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFd''@;'; put 'put ''fSksY30pKCksZVVlPTA7Y29uc3QgRmI9bmV3IE10KCJJRl9BQ1RJVkVfSUQiKSxuVWU9e3Byb3ZpZGU6RmIsdXNlRmFjdG9yeTpmdW5jdGlvbiB0VWUoKXtyZXR1cm4rK2VVZX19O2xldCBmNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudENoYW5nZT1uZXcgV259''@;'; put 'put ''Z2V0IGN1cnJlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY3VycmVudENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1hJiYodGhpcy5fY3VycmVudD1hLHRoaXMuX2N1cnJlbnRDaGFu''@;'; put 'put ''Z2UubmV4dChhKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEhiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkFjdGl2''@;'; put 'put ''ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50ZW1wbGF0ZT1oLHRoaXMuY29udGFpbmVyPWYsdGhpcy5hY3RpdmVDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLndhc0FjdGl2ZT0hMSx0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyhhLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9uPWEuY3VycmVudENo''@;'; put 'put ''YW5nZS5zdWJzY3JpYmUodj0+e3RoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KHYpfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5n''@;'; put 'put ''T25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09''@;'; put 'put ''PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZlJiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGY3KSxHZShGYiksR2UoU2wpLEdl''@;'; put 'put ''KERvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOltObi5Ob25lLCJjbHJJZkFjdGl2ZSIsImFjdGl2ZSJdfSxvdXRwdXRzOnthY3RpdmVDaGFuZ2U6ImNscklmQWN0aXZlQ2hhbmdlIn19KSxjfSkoKSxM''@;'; put 'put ''Mj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLnRlbXBsYXRlPWQsdGhpcy5jb250YWluZXI9aCx0aGlzLm9wZW5DaGFuZ2U9bmV3IEtyKCExKSx0aGlzLnN1YnNjcmlwdGlvbj1hLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlz''@;'; put 'put ''LnVwZGF0ZVZpZXcoZiksdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo''@;'; put 'put ''KX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShTbCksR2UoRG8pKX0sYy5c''@;'; put 'put ''dTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbTm4uTm9uZSwiY2xySWZPcGVuIiwib3BlbiJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJJZk9wZW5DaGFuZ2UifX0pLGN9KSgpLEIxZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD12LHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRo''@;'; put 'put ''aXMuX3N1YnNjcmlwdGlvbnMucHVzaCh2LmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodi5leHBhbmRlZCl9KSksdi5oYXNFeHBhbmRUZW1wbGF0ZT0hIWF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4''@;'; put 'put ''cGFuZGVkfXNldCBleHBhbmRlZChhKXsiYm9vbGVhbiI9PXR5cGVvZiBhJiYodGhpcy5leHBhbmQuZXhwYW5kZWQ9YSx0aGlzLl9leHBhbmRlZD1hKX1uZ09uSW5pdCgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUrKyx0aGlzLnVwZGF0ZVZpZXcoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5k''@;'; put 'put ''LmV4cGFuZGFibGUtLSx0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX11cGRhdGVWaWV3KCl7aWYoIXRoaXMuZXhwYW5kLmV4cGFuZGVkfHwwPT09dGhpcy5jb250YWluZXIubGVuZ3RoKWlmKHRoaXMudGVtcGxhdGUpdGhpcy5leHBhbmQuZXhwYW5kZWQ/''@;'; put 'put ''dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCk7ZWxzZSB0cnl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc3BsYXkiLHRoaXMuZXhwYW5kLmV4cGFuZGVkP251bGw6Im5v''@;'; put 'put ''bmUiKX1jYXRjaHt9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShTbCw4KSxHZShEbyksR2UoSmkpLEdlKEVvKSxHZShVMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLGlucHV0''@;'; put 'put ''czp7ZXhwYW5kZWQ6W05uLk5vbmUsImNscklmRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntleHBhbmRlZENoYW5nZToiY2xySWZFeHBhbmRlZENoYW5nZSJ9fSksY30pKCksTzI9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7Y29uc3QgclVlPXtwcm92aWRlOm5ldyBNdCgiRk9DVVNfT05fVklFV19JTklUIiksdXNlVmFsdWU6ITB9O2xldCBCTD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W3JVZV0saW1wb3J0czpbUmFdfSksY30pKCksYVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLFZ4XX0pLGN9KSgpLFAyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuY2xyTG9hZGluZ0NoYW5n''@;'; put 'put ''ZT1uZXcgS3IoITEpLHRoaXMuYnV0dG9uU3RhdGU9ejEsdGhpcy5zdGF0ZT16MS5ERUZBVUxUfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtpZihhIT09dGhpcy5zdGF0ZSl7c3dpdGNoKHRoaXMuc3RhdGU9YSxhKXtjYXNlIHoxLkRFRkFVTFQ6dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIiksdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIpLHRoaXMuZGlzYWJsZWR8fHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQi''@;'; put 'put ''KTticmVhaztjYXNlIHoxLkxPQURJTkc6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRyYW5zZm9ybSIsInRyYW5zbGF0ZXooMCkiKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQsImRpc2FibGVkIiwiIik7YnJlYWs7Y2FzZSB6MS5TVUNDRVNTOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpO2JyZWFrO2Nhc2UgejEuRVJST1I6dGhpcy5sb2FkaW5nU3RhdGVDaGFuZ2UoejEuREVGQVVMVCl9dGhpcy5jbHJMb2FkaW5nQ2hhbmdlLmVtaXQoYSl9''@;'; put 'put ''fXNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKXtpZih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9TWF0aC5tYXgoNDIs''@;'; put 'put ''YS53aWR0aCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixgJHtkfXB4YCl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRW8pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siYnV0dG9uIiwiY2xyTG9hZGluZyIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImRpc2FibGVkIixkLmRpc2FibGVkPyIiOm51bGwpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NsckxvYWRpbmdDaGFu''@;'; put 'put ''Z2U6ImNsckxvYWRpbmdDaGFuZ2UifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOkR4LHVzZUV4aXN0aW5nOmN9XSldLGF0dHJzOkNIZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIs''@;'; put 'put ''ImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Iiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsInNwaW5uZXItY2hlY2siXSxbMSwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsInNwYW4iLDApLGd0KDEsU0hlLDIsMSwibmctY29udGFpbmVyIiwxKSgyLE1IZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMyx4SGUsMiwxLCJzcGFuIiwyKSxoZSgpKSwyJmEmJih4ZSgiQHBhcmVudCIsdm9pZCAwKSgibmdTd2l0Y2giLGQuc3Rh''@;'; put 'put ''dGUpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5MT0FESU5HKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuU1VDQ0VTUyksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltTMixjcF0s''@;'; put 'put ''ZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYmgoInBhcmVudCIsW2l1KCI6ZW50ZXIiLFtdKV0pLGJoKCJkZWZhdWx0QnV0dG9uIixbaXUoIjplbnRlciIsW3VzKHtvcGFjaXR5OjB9KSxNMCgiMjAwbXMgMTAwbXMgZWFzZS1pbiIsdXMoe29wYWNpdHk6MX0pKV0pLGl1KCI6bGVh''@;'; put 'put ''dmUiLFt1cyh7b3BhY2l0eTowfSldKV0pLGJoKCJzcGlubmVyIixbaXUoIjplbnRlciIsW3VzKHtvcGFjaXR5OjB9KSxNMCgiMjAwbXMgMTAwbXMgZWFzZS1pbiIsdXMoe29wYWNpdHk6MX0pKV0pLGl1KCI6bGVhdmUiLFt1cyh7b3BhY2l0eToxfSksTTAoIjEwMG1zIGVhc2Utb3V0Iix1cyh7''@;'; put 'put ''b3BhY2l0eTowfSkpXSldKSxiaCgidmFsaWRhdGVkIixbaXUoIjplbnRlciIsW00wKCI2MDBtcyIsdVBlKFt1cyh7dHJhbnNmb3JtOiJzY2FsZSgwLDApIixvZmZzZXQ6MH0pLHVzKHtvcGFjaXR5OjEsb2Zmc2V0Oi4yfSksdXMoe3RyYW5zZm9ybToic2NhbGUoMS4yLDEuMikiLG9mZnNldDou''@;'; put 'put ''NH0pLHVzKHt0cmFuc2Zvcm06InNjYWxlKC45LC45KSIsb2Zmc2V0Oi42fSksdXMoe3RyYW5zZm9ybToic2NhbGUoMSwxKSIsb2Zmc2V0OjF9KV0pKV0pLGl1KCI6bGVhdmUiLFt1cyh7b3BhY2l0eToxfSksTTAoIjEwMG1zIGVhc2Utb3V0Iix1cyh7b3BhY2l0eTowfSkpXSldKV19fSksY30p''@;'; put 'put ''KCksc1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLGxVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''VHMuYWRkSWNvbnMoVDBlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbc1VlLGFVZV19KSxjfSkoKSxjVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQng9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCksdVVlPTAsQ2g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250''@;'; put 'put ''cm9sLSIrICsrdVVlLHRoaXMuX2lkQ2hhbmdlPW5ldyBlaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxkVWU9MCxwNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRh''@;'; put 'put ''aW5lci0iKyArK2RVZSx0aGlzLl9pZENoYW5nZT1uZXcgZWkodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUo''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9''@;'; put 'put ''YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250''@;'; put 'put ''cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENoLDgpLEdlKHA3LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30p''@;'; put 'put ''LGN9KSgpLGhVZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRll7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ2gsOCksR2UocDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksVHIo''@;'; put 'put ''ImNsci1zdWJ0ZXh0IiwhMCkoImVycm9yIiwhMCkpfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqTD0oKCk9PntjbGFzcyBj''@;'; put 'put ''IGV4dGVuZHMgRll7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKEdlKENoLDgpLEdlKHA3LDgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSl9LGZl''@;'; put 'put ''YXR1cmVzOlt3YV0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hZGRpdGlvbmFsQ29u''@;'; put 'put ''dHJvbHM9W10sdGhpcy5fY29udHJvbENoYW5nZXM9bmV3IFduLHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXM9bmV3IFduLHRoaXMuX2hlbHBlcnM9bmV3IFdufWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2x9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NvbnRyb2xDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBhZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzfWdldCBhZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuYXNPYnNl''@;'; put 'put ''cnZhYmxlKCl9Z2V0IGhhc0FkZGl0aW9uYWxDb250cm9scygpe3JldHVybiEhdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPy5sZW5ndGh9Z2V0IGhlbHBlcnNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faGVscGVycy5hc09ic2VydmFibGUoKX1zZXRDb250cm9sKGEpe3RoaXMuX2NvbnRyb2w9YSx0''@;'; put 'put ''aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfWFkZEFkZGl0aW9uYWxDb250cm9sKGEpe3RoaXMuX2FkZGl0aW9uYWxDb250cm9scy5wdXNoKGEpLHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMubmV4dCh0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMpfXNldEhlbHBlcnMoYSl7dGhp''@;'; put 'put ''cy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5W''@;'; put 'put ''QUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30oQWR8fHt9KTtsZXQga2Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0PW5ldyBXbix0aGlzLnN0YXR1c0NoYW5nZXM9dGhpcy5nZXRTdGF0dXNDaGFuZ2VzKGEpLnBp''@;'; put 'put ''cGUoSTBlKDEpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5uZXh0KCl9Z2V0U3RhdHVzQ2hhbmdlcyhhKXtyZXR1cm4gcTgoW2EuY29udHJvbENoYW5nZXMsYS5hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLnBpcGUoeDIoW10pKV0pLnBp''@;'; put 'put ''cGUoVjEoKFtkLGhdKT0+e2lmKGQpe2NvbnN0IGY9W2QsLi4uaF07cmV0dXJuIF94KHE4KGYubWFwKHY9PnYuc3RhdHVzQ2hhbmdlcykpLHRoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QucGlwZShMcigoKT0+Zi5tYXAodj0+di5zdGF0dXMpKSkpfXJldHVybiBNMn0pLExyKGQ9PmQu''@;'; put 'put ''aW5jbHVkZXMoQWQuSU5WQUxJRCk/QWQuSU5WQUxJRDpkLmluY2x1ZGVzKEFkLlZBTElEKT9BZC5WQUxJRDpBZC5OT05FKSx4MihBZC5OT05FKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGYxKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mgekx7fWZ1bmN0aW9uIFoxZShjKXtyZXR1cm5bYyx7cHJvdmlkZTp6TCx1c2VFeGlzdGluZzpjfV19ZnVuY3Rpb24gVzFlKGMsbCxhKXtyZXR1cm4gWHQuY3JlYXRlKGQ9PntsKGQpO2NvbnN0IGg9Yy5zdWJzY3JpYmUoZCk7cmV0''@;'; put 'put ''dXJuKCk9PntoLnVuc3Vic2NyaWJlKCksYSYmYShkKX19KX1sZXQgVUw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnBhcmVudD1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZm9jdXNTZXJ2aWNlPWYsdGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''PXYsdGhpcy5pZD1NdSgpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdLHRoaXMucmVzZXRDaGlsZHJlbigpLHRoaXMubW92ZVRvRmlyc3RJdGVtV2hlbk9wZW4oKSxkfHx0aGlzLmhhbmRsZVJvb3RGb2N1cygpfWdldCB0cmlnZ2Vy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93cmlnaHQiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVX''@;'; put 'put ''aXRoRXZlbnQoZCkpKToodGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxp''@;'; put 'put ''c3RlbihhLCJrZXlkb3duLmFycm93ZG93biIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuZm9jdXNTZXJ2aWNlLmxpc3RlblRvQXJyb3dLZXlzKGEpKX1nZXQgY29udGFpbmVyKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn1zZXQgY29udGFpbmVyKGEp''@;'; put 'put ''e3RoaXMuX2NvbnRhaW5lcj1hLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLnRhYiIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlz''@;'; put 'put ''LnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmUod2guTEVGVCksZC5zdG9wUHJvcGFnYXRpb24oKX0pKToodGhpcy5mb2N1c1NlcnZpY2UucmVnaXN0ZXJDb250YWluZXIoYSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMu''@;'; put 'put ''cmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmNoaWxkcmVuLnBpcGUoWWYoMSkpLnN1''@;'; put 'put ''YnNjcmliZShmPT5mLmZvckVhY2godj0+di5ibHVyKCkpKTtjb25zdCBoPWQucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtoJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiYoYS5jb250YWlucyhoKXx8aD09PXRoaXMudHJpZ2dlcil8fCh0aGlzLmZvY3VzQmFja09uVHJpZ2dl''@;'; put 'put ''cldoZW5DbG9zZWQ9ITEsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChhPT5hKCkpLHRoaXMuZm9jdXNTZXJ2aWNlLmRldGFjaExpc3RlbmVycygpfW1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMudG9nZ2xlU2VydmljZS5vcmlnaW5hbEV2ZW50JiZzZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZVRvKHRoaXMpLHRoaXMuZm9jdXNTZXJ2aWNlLm1vdmUodGhpcy5wYXJlbnQ/''@;'; put 'put ''d2guUklHSFQ6d2guRE9XTil9KX0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVSb290Rm9jdXMoKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZHx8KHRoaXMuZm9jdXNTZXJ2aWNlLnJlc2V0''@;'; put 'put ''KHRoaXMpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZCYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ZH0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1mb2N1cygpe3RoaXMudHJpZ2dlciYmdGwo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmZvY3VzKCl9Ymx1cigpe3RoaXMudHJpZ2dlciYmdGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmJsdXIoKX1hY3RpdmF0ZSgpe3RsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5jbGljaygpfXJlc2V0Q2hpbGRy''@;'; put 'put ''ZW4oKXt0aGlzLmNoaWxkcmVuPW5ldyBieCgxKSx0aGlzLnBhcmVudD90aGlzLnJpZ2h0PXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5hWzBdKSk6KHRoaXMuZG93bj10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVswXSkpLHRoaXMudXA9dGhpcy5v''@;'; put 'put ''cGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFbYS5sZW5ndGgtMV0pKSl9YWRkQ2hpbGRyZW4oYSl7T1kubGlua1ZlcnRpY2FsKGEpLHRoaXMucGFyZW50JiZPWS5saW5rUGFyZW50KGEsdGhpcy5jbG9zZUFuZEdldFRoaXMoKSx3aC5MRUZUKSx0aGlzLmNoaWxkcmVuLm5leHQoYSl9''@;'; put 'put ''b3BlbkFuZEdldENoaWxkcmVuKCl7cmV0dXJuIFcxZSh0aGlzLmNoaWxkcmVuLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9Y2xvc2VBbmRHZXRUaGlzKCl7cmV0dXJuIFcxZShmbyh0aGlzKSwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihFbykseHIoYywxMikseHIoc2MpLHhyKHdwKSx4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZVZT1aMWUoVUwpO2xldCBqeD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5fY2hhbmdlcz1uZXcgV259Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1jbG9zZU1lbnVzKCl7dGhpcy5fY2hhbmdlcy5uZXh0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgZ1VlPXtwcm92aWRlOmp4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcFVlKGMpe3JldHVybiBjfHxuZXcganh9LGRlcHM6W1tuZXcgSTEsbmV3IGxkLGp4XV19O2xldCBzZz0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmZvY3VzSGFuZGxlcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHYuY2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUoTT0+ZC5vcGVuPU0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT5mLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShzYyksR2UoVUwpLEdlKEVzKSxHZShqeCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24iXV0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsyJmEmJlRyKCJkcm9wZG93biIsITApKCJvcGVuIixkLnRvZ2dsZVNlcnZpY2Uub3Blbil9LGlucHV0czp7aXNNZW51Q2xvc2FibGU6W05uLk5vbmUsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xvc2FibGUiXX0sZmVhdHVyZXM6W2RhKFtnVWUsVjFlLGZVZV0pLHZkKFtv''@;'; put 'put ''Z10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIEFpPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUklHSFRfQ0VOVEVSPTBdPSJSSUdIVF9DRU5U''@;'; put 'put ''RVIiLGNbYy5SSUdIVF9UT1A9MV09IlJJR0hUX1RPUCIsY1tjLlJJR0hUX0JPVFRPTT0yXT0iUklHSFRfQk9UVE9NIixjW2MuVE9QX0NFTlRFUj0zXT0iVE9QX0NFTlRFUiIsY1tjLlRPUF9SSUdIVD00XT0iVE9QX1JJR0hUIixjW2MuVE9QX0xFRlQ9NV09IlRPUF9MRUZUIixjW2MuQk9UVE9N''@;'; put 'put ''X0NFTlRFUj02XT0iQk9UVE9NX0NFTlRFUiIsY1tjLkJPVFRPTV9SSUdIVD03XT0iQk9UVE9NX1JJR0hUIixjW2MuQk9UVE9NX0xFRlQ9OF09IkJPVFRPTV9MRUZUIixjW2MuTEVGVF9DRU5URVI9OV09IkxFRlRfQ0VOVEVSIixjW2MuTEVGVF9UT1A9MTBdPSJMRUZUX1RPUCIsY1tjLkxFRlRf''@;'; put 'put ''Qk9UVE9NPTExXT0iTEVGVF9CT1RUT00iLGN9KEFpfHx7fSk7Y2xhc3MgeVVle2NvbnN0cnVjdG9yKGwpe3RoaXMuZWxlbWVudD1sLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyPXRoaXMuZW1pdFNjcm9sbEV2ZW50LmJpbmQodGhpcyksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHM9W10sbC5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGwuc3R5bGUudG9wPTAsbC5zdHlsZS5ib3R0b209ImF1dG8iLGwuc3R5bGUubGVmdD0wLGwuc3R5bGUucmlnaHQ9ImF1dG8ifWFuY2hvcihsLGEsZCx7b2Zmc2V0WDpoPTAsb2Zmc2V0WTpmPTAsdXNlQW5jaG9yUGFyZW50OnY9ITF9PXt9KXt0aGlz''@;'; put 'put ''LmFkZFNjcm9sbEV2ZW50TGlzdGVuZXJzKGwpLHYmJihsPWwucGFyZW50Tm9kZSksbC5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIjtjb25zdCBNPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IEc9TS5sZWZ0LUkubGVm''@;'; put 'put ''dCtoLGllPU0udG9wLUkudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgQWkuTEVGVF9UT1A6Y2FzZSBBaS5UT1BfTEVGVDpicmVhaztjYXNlIEFpLlRPUF9DRU5URVI6Rys9TS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOkcrPU0ud2lkdGg7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5MRUZUX0JPVFRPTTpjYXNlIEFpLkJPVFRPTV9MRUZUOmllKz1NLmhlaWdodDticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5URVI6aWUrPU0uaGVpZ2h0LEcrPU0ud2lkdGgvMjticmVhaztjYXNlIEFpLkJPVFRPTV9SSUdIVDpjYXNlIEFpLlJJR0hUX0JPVFRPTTppZSs9TS5oZWlnaHQs''@;'; put 'put ''Rys9TS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOmllKz1NLmhlaWdodC8yO2JyZWFrO2Nhc2UgQWkuUklHSFRfQ0VOVEVSOmllKz1NLmhlaWdodC8yLEcrPU0ud2lkdGh9c3dpdGNoKGQpe2Nhc2UgQWkuTEVGVF9UT1A6Y2FzZSBBaS5UT1BfTEVGVDpicmVhaztjYXNlIEFpLlRP''@;'; put 'put ''UF9DRU5URVI6Ry09SS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWkuUklHSFRfVE9QOkctPUkud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0JPVFRPTTpjYXNlIEFpLkJPVFRPTV9MRUZUOmllLT1JLmhlaWdodDticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5URVI6aWUt''@;'; put 'put ''PUkuaGVpZ2h0LEctPUkud2lkdGgvMjticmVhaztjYXNlIEFpLkJPVFRPTV9SSUdIVDpjYXNlIEFpLlJJR0hUX0JPVFRPTTppZS09SS5oZWlnaHQsRy09SS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOmllLT1JLmhlaWdodC8yO2JyZWFrO2Nhc2UgQWkuUklHSFRfQ0VOVEVSOmll''@;'; put 'put ''LT1JLmhlaWdodC8yLEctPUkud2lkdGh9Y29uc3QgdWU9Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1lbnQpLHllPXBhcnNlSW50KHVlLm1hcmdpbkxlZnQsMTApLEVlPXBhcnNlSW50KHVlLm1hcmdpblJpZ2h0LDEwKSxqZT1wYXJzZUludCh1ZS5tYXJnaW5Ub3AsMTApLHFlPXBhcnNlSW50''@;'; put 'put ''KHVlLm1hcmdpbkJvdHRvbSwxMCk7c3dpdGNoKGEpe2Nhc2UgQWkuTEVGVF9UT1A6Y2FzZSBBaS5UT1BfTEVGVDpjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDooZD09PUFpLkJPVFRPTV9SSUdIVHx8ZD09PUFpLlJJR0hUX0JPVFRPTSkmJihpZS09cWUsRy09RWUpLChkPT09''@;'; put 'put ''QWkuQk9UVE9NX0xFRlR8fGQ9PT1BaS5MRUZUX0JPVFRPTSkmJihpZS09amUsRys9eWUpLChkPT09QWkuVE9QX0xFRlR8fGQ9PT1BaS5MRUZUX1RPUCkmJihpZSs9amUsRys9eWUpLChkPT09QWkuVE9QX1JJR0hUfHxkPT09QWkuUklHSFRfVE9QKSYmKGllKz1qZSxHLT1FZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5MRUZUX0JPVFRPTTpjYXNlIEFpLkJPVFRPTV9MRUZUOmNhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOihkPT09QWkuQk9UVE9NX0xFRlR8fGQ9PT1BaS5MRUZUX0JPVFRPTSkmJihpZS09cWUsRys9eWUpLChkPT09QWkuQk9UVE9NX1JJR0hUfHxkPT09QWku''@;'; put 'put ''UklHSFRfQk9UVE9NKSYmKGllLT1xZSxHLT1FZSksKGQ9PT1BaS5UT1BfTEVGVHx8ZD09PUFpLkxFRlRfVE9QKSYmKGllKz1qZSxHKz15ZSksKGQ9PT1BaS5UT1BfUklHSFR8fGQ9PT1BaS5SSUdIVF9UT1ApJiYoaWUrPWplLEctPUVlKTticmVhaztjYXNlIEFpLlRPUF9DRU5URVI6aWUtPXFl''@;'; put 'put ''LEcrPXllLEctPUVlO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjppZSs9amUsRys9eWUsRy09RWU7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjppZSs9amUsaWUtPXFlLEctPUVlO2JyZWFrO2Nhc2UgQWkuUklHSFRfQ0VOVEVSOmllKz1qZSxpZS09cWUsRys9eWV9cmV0dXJuIHRoaXMu''@;'; put 'put ''ZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKEcpfXB4KSB0cmFuc2xhdGVZKCR7TWF0aC5yb3VuZChpZSl9cHgpYCx0aGlzLl9zY3JvbGwuYXNPYnNlcnZhYmxlKCl9cmVsZWFzZSgpe3RoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5y''@;'; put 'put ''ZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpfWlzUG9zaXRpb25lZChsKXtjb25zdCBhPWdldENvbXB1dGVkU3R5bGUobCkucG9zaXRpb247cmV0dXJuInJlbGF0aXZlIj09PWF8fCJhYnNvbHV0ZSI9PT1hfHwiZml4ZWQiPT09YX1lbWl0U2Nyb2xsRXZlbnQoKXt0aGlzLl9zY3JvbGwubmV4''@;'; put 'put ''dCgpfWFkZFNjcm9sbEV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3Njcm9sbD1uZXcgV247Y29uc3QgYT1sO2xldCBkPWw7Zm9yKDtkJiZkIT09ZG9jdW1lbnQmJih0aGlzLnNjcm9sbHMoZCkmJihkLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIp''@;'; put 'put ''LHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLnB1c2goZCkpLGQ9PT1hfHwhdGhpcy5pc1Bvc2l0aW9uZWQoZCkpOylkPWQucGFyZW50Tm9kZX1yZW1vdmVTY3JvbGxFdmVudExpc3RlbmVycygpe2Zvcihjb25zdCBsIG9mIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzKWwucmVtb3ZlRXZlbnRMaXN0''@;'; put 'put ''ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcik7dGhpcy5zY3JvbGxhYmxlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fc2Nyb2xsJiYodGhpcy5fc2Nyb2xsLmNvbXBsZXRlKCksZGVsZXRlIHRoaXMuX3Njcm9sbCl9c2Nyb2xscyhsKXtjb25zdCBhPWdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUobCk7cmV0dXJuInNjcm9sbCI9PT1hLm92ZXJmbG93WHx8ImF1dG8iPT09YS5vdmVyZmxvd1h8fCJzY3JvbGwiPT09YS5vdmVyZmxvd1l8fCJhdXRvIj09PWEub3ZlcmZsb3dZfX1jb25zdCBLMWU9ImlzLW9mZi1zY3JlZW4iO2xldCBIWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3Ro''@;'; put 'put ''aXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoSmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChzYyksdGhpcy5yZW5kZXJlcj1hLmdldChFbyksdGhpcy5uZ1pvbmU9YS5nZXQoV2EpLHRoaXMucmVm''@;'; put 'put ''PWEuZ2V0KEVzKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyB5VWUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBlKHgyKHRoaXMudG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuKSkuc3Vic2NyaWJlKGg9PntoPyh0aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLMWUpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRo''@;'; put 'put ''aXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEsxZSkpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVBbmNob3ImJih0aGlzLnVw''@;'; put 'put ''ZGF0ZUFuY2hvcj0hMSx0aGlzLnBvcG92ZXJJbnN0YW5jZS5hbmNob3IodGhpcy5hbmNob3JFbGVtLHRoaXMuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucykuc3Vic2NyaWJlKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9KSx0aGlzLmF0''@;'; put 'put ''dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCkpfW5nT25EZXN0cm95KCl7dGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpLHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9YW5jaG9yKCl7dGhpcy51cGRhdGVBbmNob3I9ITB9cmVsZWFzZSgpe3RoaXMuZGV0YWNo''@;'; put 'put ''T3V0c2lkZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnBvcG92ZXJJbnN0YW5jZS5yZWxlYXNlKCl9YXR0YWNoRVNDTGlzdGVuZXIoKXt0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuZG9jdW1l''@;'; put 'put ''bnRFU0NMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLCJrZXlkb3duIixhPT57YSYmYS5rZXkmJkkyKGEua2V5KT09PWdhLkVzY2FwZSYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5yZWYubWFya0ZvckNoZWNrKCl9''@;'; put 'put ''KX0pfSl9ZGV0YWNoRVNDTGlzdGVuZXIoKXt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXImJih0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXIoKSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCl9YXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2sm''@;'; put 'put ''JnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZkb2N1bWVudCYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX1kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3Ro''@;'; put 'put ''aXMuY2xvc2VPbk91dHNpZGVDbGljayYmZG9jdW1lbnQmJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXImJmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShKaSw0KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxnNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSFl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZHJvcGRvd24tbWVudSBzaG91''@;'; put 'put ''bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kcm9wZG93biIpO3N1cGVyKGEsZCksaD8odGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApOih0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBv''@;'; put 'put ''aW50PUFpLkxFRlRfVE9QKSx0aGlzLnBvcG92ZXJPcHRpb25zLmFsbG93TXVsdGlwbGVPcGVuPSEwLHRoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXI9ITAsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEwLHRoaXMuZm9jdXNIYW5kbGVyPWZ9c2V0IHBvc2l0aW9u''@;'; put 'put ''KGEpe3N3aXRjaChhKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWku''@;'; put 'put ''TEVGVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0IjpkZWZhdWx0OnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0xFRlQs''@;'; put 'put ''dGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtYm90dG9tIjp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX0JP''@;'; put 'put ''VFRPTSx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImxlZnQtdG9wIjp0aGlzLmFuY2hvclBvaW50PUFpLkxFRlRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztjYXNlImxlZnQtYm90dG9tIjp0aGlzLmFuY2hvclBvaW50PUFpLkxF''@;'; put 'put ''RlRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JPVFRPTX19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c0hhbmRsZXIuY29udGFpbmVyPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLml0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLmZvY3VzSGFuZGxl''@;'; put 'put ''ci5hZGRDaGlsZHJlbih0aGlzLml0ZW1zLnRvQXJyYXkoKSkpLHRoaXMuaXRlbXMubm90aWZ5T25DaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuZm9jdXNIYW5kbGVyLnJlc2V0Q2hpbGRyZW4oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKE5MLDgpLEdlKGMsMTIpLEdlKFVMKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93bi1tZW51Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsekwsNCksMiZhKXts''@;'; put 'put ''ZXQgZjtDaShmPVNpKCkpJiYoZC5pdGVtcz1mKX19LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoInJvbGUiLCJtZW51IiksVHIoImRyb3Bkb3duLW1lbnUiLCEwKSl9LGlucHV0czp7cG9zaXRpb246W05uLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRp''@;'; put 'put ''b24iXX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25Ucmln''@;'; put 'put ''Z2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2cpLEdlKHNjKSxHZShKaSksR2UoVUwpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''IiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYm''@;'; put 'put ''KGhyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksVHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dn''@;'; put 'put ''bGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCk7Y29uc3QgYlVlPVt7cHJvdmlkZTp6TCx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9TXUoKSx0aGlzLmRpc2Fi''@;'; put 'put ''bGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwu''@;'; put 'put ''bmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIwIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1ibHVyKCl7dGwodGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5ibHVyKCkpfWFjdGl2YXRlKCl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEppKSx4cihFbykseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKX1dO2xldCBWYj0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCxoKXt0aGlzLmRyb3Bkb3duPWEsdGhpcy5fZHJvcGRvd25TZXJ2aWNlPWQsdGhpcy5mb2N1c2FibGVJdGVtPWh9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVk''@;'; put 'put ''PSEhYXx8IiI9PT1hfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtpZih0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYh''@;'; put 'put ''dGhpcy5kaXNhYmxlZCYmdGhpcy5kcm9wZG93bi50b2dnbGVTZXJ2aWNlLm9wZW4pe2NvbnN0IGE9dGhpcy5maW5kUm9vdERyb3Bkb3duKCk7YS5mb2N1c0hhbmRsZXIuZm9jdXMoKSxhLmZvY3VzSGFuZGxlci5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExfXNldFRpbWVvdXQoKCk9''@;'; put 'put ''Pnt0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZHJvcGRvd25TZXJ2aWNlLmNsb3NlTWVudXMoKX0pfW9uU3BhY2VLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1vbkVudGVyS2V5ZG93bihhKXt0''@;'; put 'put ''aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfWZpbmRSb290RHJvcGRvd24oKXts''@;'; put 'put ''ZXQgYT10aGlzLmRyb3Bkb3duO2Zvcig7YS5wYXJlbnQ7KWE9YS5wYXJlbnQ7cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNnKSxHZShqeCksR2UoekwpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi''@;'; put 'put ''Y2xyRHJvcGRvd25JdGVtIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ecm9wZG93bkl0ZW1DbGljaygpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU3BhY2VL''@;'; put 'put ''ZXlkb3duKGYpfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRW50ZXJLZXlkb3duKGYpfSksMiZhJiYoaHIoInJvbGUiLCJtZW51aXRlbSIpKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLFRyKCJkaXNhYmxlZCIsZC5k''@;'; put 'put ''aXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6W05uLk5vbmUsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxkcm9wZG93bkl0ZW1JZDpbTm4uTm9uZSwiaWQiLCJkcm9wZG93bkl0ZW1JZCJdfSxmZWF0dXJlczpbZGEoW2JVZV0pXX0pLGN9KSgpLE5ZPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLE8yLEFzXX0pLGN9KSgpLFZZPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0''@;'; put 'put ''aGlzLl90cmlnZ2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; put 'put ''YWN9KSxjfSkoKSxCWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IFdufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLmVsPWQsdGhpcy5zaWducG9zdElkU2VydmljZT1oLHRoaXMu''@;'; put 'put ''c2lnbnBvc3RGb2N1c01hbmFnZXI9Zix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5kb2N1bWVudD12fW5nT25Jbml0KCl7dGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci50cmlnZ2VyRWw9dGhpcy5lbC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5hcmlhRXhwYW5kZWQ9YTtjb25zdCBkPXRoaXMuaXNPcGVuO3RoaXMuaXNPcGVuPWEsIXRoaXMuaXNPcGVuJiZkJiZ0aGlzLmZvY3VzT25DbG9zZSgpfSks''@;'; put 'put ''dGhpcy5zaWducG9zdElkU2VydmljZS5pZC5zdWJzY3JpYmUoYT0+dGhpcy5hcmlhQ29udHJvbD1hKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''LnRvZ2dsZVdpdGhFdmVudChhKX1mb2N1c09uQ2xvc2UoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpLEdlKEppKSxHZShCWSksR2UoVlkpLEdlKHZzKSxHZShpbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsx''@;'; put 'put ''LCJzaWducG9zdC10cmlnZ2VyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TaWducG9zdFRyaWdnZXJDbGljayhmKX0pLDImYSYmKGhyKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCko''@;'; put 'put ''ImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2wpLFRyKCJhY3RpdmUiLGQuaXNPcGVuKSl9fSksY30pKCksV0w9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ITF9c2V0IGN1c3RvbVRyaWdnZXIoYSl7dGhp''@;'; put 'put ''cy51c2VDdXN0b21UcmlnZ2VyPSEhYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtp''@;'; put 'put ''ZigxJmEmJmFvKGgsWkwsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jdXN0b21UcmlnZ2VyPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJzaWducG9zdCIsITApfSxpbnB1dHM6e3NpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbDpb''@;'; put 'put ''Tm4uTm9uZSwiY2xyU2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIiwic2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIl19LGZlYXR1cmVzOltkYShbVlksQlldKSx2ZChbb2ddKV0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWxpbmsiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsRUhlLDMsMiwibmct''@;'; put 'put ''Y29udGFpbmVyIiwwKSxZcigxKSksMiZhJiZ4ZSgibmdJZiIsIWQudXNlQ3VzdG9tVHJpZ2dlcil9LGRlcGVuZGVuY2llczpbeWEscnMsWkxdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IF9VZT17InRvcC1sZWZ0Ijp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9p''@;'; put 'put ''bnQ6QWkuQk9UVE9NX1JJR0hULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fQ0VOVEVSLG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1yaWdodCI6e2FuY2hvclBvaW50OkFpLlRP''@;'; put 'put ''UF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9MRUZULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInJpZ2h0LXRvcCI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1taWRkbGUi''@;'; put 'put ''OnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0''@;'; put 'put ''WDoxNn0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkFpLlRPUF9MRUZULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkFpLlRPUF9D''@;'; put 'put ''RU5URVIsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkFpLlRPUF9SSUdIVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImxlZnQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9w''@;'; put 'put ''b3ZlclBvaW50OkFpLlJJR0hUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0LW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC10b3AiOnthbmNob3JQb2ludDpB''@;'; put 'put ''aS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sZGVmYXVsdDp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn19LHdVZT1bInRvcC1s''@;'; put 'put ''ZWZ0IiwidG9wLW1pZGRsZSIsInRvcC1yaWdodCIsInJpZ2h0LXRvcCIsInJpZ2h0LW1pZGRsZSIsInJpZ2h0LWJvdHRvbSIsImJvdHRvbS1yaWdodCIsImJvdHRvbS1taWRkbGUiLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC1taWRkbGUiLCJsZWZ0LXRvcCJdO2xldCBxMWU9''@;'; put 'put ''KCgpPT57Y2xhc3MgYyBleHRlbmRzIEhZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe2lmKHN1cGVyKGEsZCksdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj12LHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuc2lnbnBvc3RDb250ZW50SWQ9TXUoKSwhZCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImNsci1zaWducG9zdC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXNpZ25wb3N0Iik7dGhpcy5wb3NpdGlvbj0icmlnaHQtbWlkZGxlIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsZi5zZXRJZCh0aGlzLnNpZ25wb3N0Q29u''@;'; put 'put ''dGVudElkKSx0aGlzLmRvY3VtZW50PUl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKSx0aGlzLl9wb3NpdGlvbj1hJiZ3VWUuaW5k''@;'; put 'put ''ZXhPZihhKT4tMT9hOiJyaWdodC1taWRkbGUiLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pO2NvbnN0IGQ9X1VlW3RoaXMucG9zaXRpb25dO3RoaXMuYW5jaG9yUG9pbnQ9ZC5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludD1k''@;'; put 'put ''LnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFk9ZC5vZmZzZXRZLHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WD1kLm9mZnNldFh9Y2xvc2UoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGwodGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KEdlKERzKSxHZShOTCw4KSxHZShpcyksR2UoQlkpLEdlKFZZKSxHZShpbyksR2UodnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0LWNvbnRlbnQiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihvcCgiaWQi''@;'; put 'put ''LGQuc2lnbnBvc3RDb250ZW50SWQpLFRyKCJzaWducG9zdC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e3NpZ25wb3N0Q2xvc2VBcmlhTGFiZWw6W05uLk5vbmUsImNsclNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiLCJzaWducG9zdENsb3NlQXJpYUxhYmVsIl0scG9zaXRpb246W05uLk5vbmUsImNs''@;'; put 'put ''clBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W3dhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QUhlLGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJzaWducG9zdC1hY3Rpb24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJ0YWJpbmRleCIsIjAiLDEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFRIZSksZGUoMCwiZGl2Iiww''@;'; put 'put ''KSxHdCgxLCJkaXYiLDEpLGRlKDIsImRpdiIsMiksWXIoMyksZGUoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLEd0KDUsImNkcy1pY29uIiw0KSxoZSgpKCksZGUoNiwiZGl2Iiw1KSxZcig3LDEpLGhlKCkoKSksMiZhJiYoZmUoNCksaHIo''@;'; put 'put ''ImFyaWEtbGFiZWwiLGQuc2lnbnBvc3RDbG9zZUFyaWFMYWJlbHx8ZC5jb21tb25TdHJpbmdzLmtleXMuc2lnbnBvc3RDbG9zZSkoImFyaWEtY29udHJvbHMiLGQuc2lnbnBvc3RDb250ZW50SWQpLGZlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W3JzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxDVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZ4LFJPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLEJMLE8yXX0pLGN9KSgpLGpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgV259Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXVwZGF0ZUlkKGEpe3RoaXMuX2lkLm5leHQoYSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGVTZXJ2aWNlPWF9b25Nb3VzZUVudGVyVHJp''@;'; put 'put ''Z2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMCx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1vbk1vdXNlTGVhdmVUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1vbk1vdXNlRW50ZXJDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJD''@;'; put 'put ''b250ZW50PSEwfW9uTW91c2VMZWF2ZUNvbnRlbnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfWhpZGVJZk1vdXNlT3V0KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLm1vdXNlT3ZlclRyaWdnZXImJiF0aGlzLm1vdXNlT3ZlckNvbnRlbnQmJih0aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihzYykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHY3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdG9vbHRpcCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInRvb2x0aXAiLCEwKX0sZmVhdHVyZXM6W2Rh''@;'; put 'put ''KFtqWSx6WV0pLHZkKFtvZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgTVVlPVsiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiLCJ0''@;'; put 'put ''b3AtbGVmdCIsInRvcC1yaWdodCIsInJpZ2h0IiwibGVmdCJdLHhVZT1bInhzIiwic20iLCJtZCIsImxnIl07bGV0IHk3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZihzdXBlcihhLGQpLHRoaXMudG9vbHRpcElkU2VydmljZT1oLHRoaXMudG9vbHRp''@;'; put 'put ''cE1vdXNlU2VydmljZT1mLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXRvb2x0aXAtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10b29sdGlwIik7dGhpcy5pZD1NdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7Y29uc3QgZD1hfHwiIjt0''@;'; put 'put ''aGlzLl9pZD1kLHRoaXMudG9vbHRpcElkU2VydmljZS51cGRhdGVJZChkKX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe2NvbnN0IGQ9dGhpcy5fcG9zaXRpb24saD1NVWUuaW5jbHVkZXMoYSk/YToicmlnaHQiO3N3aXRjaCh0aGlzLl9wb3Np''@;'; put 'put ''dGlvbj1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSksaCl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVh''@;'; put 'put ''aztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVG''@;'; put 'put ''VF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztjYXNlInJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1B''@;'; put 'put ''aS5MRUZUX1RPUDticmVhaztjYXNlImxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIFNVZShjKXt0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB2YWx1ZTogJHtjfWApfSho''@;'; put 'put ''KX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShhKXtjb25zdCBkPXRoaXMuX3NpemUsaD14VWUuaW5jbHVkZXMoYSk/YToic20iO3RoaXMuX3NpemU9aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0k''@;'; put 'put ''e2h9YH0pfW5nT25Jbml0KCl7dGhpcy5zaXplPXRoaXMuc2l6ZXx8InNtIix0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb258fCJyaWdodCJ9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlckNvbnRlbnQoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRv''@;'; put 'put ''b2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlQ29udGVudCgpfXVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczphLG5ld0NsYXNzOmR9KXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxhKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCxkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKE5MLDgpLEdlKGpZKSxHZSh6WSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdG9vbHRpcC1jb250ZW50Il1dLGhvc3RWYXJzOjYs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYob3AoImlkIixkLmlkKSxocigicm9sZSIs''@;'; put 'put ''InRvb2x0aXAiKSxfZCgib3BhY2l0eSIsMSksVHIoInRvb2x0aXAtY29udGVudCIsITApKX0saW5wdXRzOntpZDoiaWQiLHBvc2l0aW9uOltObi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbTm4uTm9uZSwiY2xyU2l6ZSIsInNpemUiXX0sZmVhdHVyZXM6W3dhXSxuZ0Nv''@;'; put 'put ''bnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYjc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50b29s''@;'; put 'put ''dGlwTW91c2VTZXJ2aWNlPWgsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKGQuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2ds''@;'; put 'put ''ZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91''@;'; put 'put ''c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpLEdlKGpZKSxHZSh6WSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0''@;'; put 'put ''YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKGhyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxUcigidG9vbHRpcC10cmlnZ2Vy''@;'; put 'put ''IiwhMCkpfX0pLGN9KSgpLEVVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxPMixBc119KSxjfSkoKSxUVWU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTlksQ1VlLEVVZV19KSxjfSkoKTt2YXIgXzc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElDQUw9InZl''@;'; put 'put ''cnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQ09NUEFDVD0iY29tcGFjdCIsY30oXzd8fHt9KTtsZXQgQ3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubWluTGFiZWxTaXplPTEsdGhpcy5tYXhMYWJlbFNpemU9MTIsdGhpcy5sYXlvdXQ9XzcuSE9SSVpPTlRB''@;'; put 'put ''TCx0aGlzLmxheW91dFZhbHVlcz1PYmplY3Qua2V5cyhfNykubWFwKGE9Pl83W2FdKSx0aGlzLl9sYWJlbFNpemU9Mn1nZXQgbGFiZWxTaXplKCl7cmV0dXJuIHRoaXMuX2xhYmVsU2l6ZX1zZXQgbGFiZWxTaXplKGEpe3RoaXMubGFiZWxTaXplSXNWYWxpZChhKSYmKHRoaXMuX2xhYmVsU2l6''@;'; put 'put ''ZT1hKX1nZXQgbGF5b3V0Q2xhc3MoKXtyZXR1cm5gY2xyLWZvcm0tJHt0aGlzLmxheW91dH1gfWlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1fNy5WRVJUSUNBTH1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1fNy5IT1JJWk9OVEFMfWlzQ29tcGFjdCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxheW91dD09PV83LkNPTVBBQ1R9aXNWYWxpZChhKXtyZXR1cm4gdGhpcy5sYXlvdXRWYWx1ZXMuaW5kZXhPZihhKT4tMX1sYWJlbFNpemVJc1ZhbGlkKGEpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj10aGlzLm1pbkxhYmVsU2l6ZSYmYTw9dGhpcy5tYXhMYWJl''@;'; put 'put ''bFNpemV9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGRzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmNvbnRyb2xJZFNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMuZW5hYmxlR3JpZD0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IGxhYmVsVGV4dCgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQm''@;'; put 'put ''JnRoaXMuZWwubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1uZ09uSW5pdCgpe3RoaXMuaWRBdHRyPXRoaXMuaWRJbnB1dCwodGhpcy5jb250cm9sSWRTZXJ2aWNlfHx0aGlzLm5nQ29udHJvbFNlcnZpY2UpJiZ0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWwiKSx0aGlzLmVuYWJsZUdyaWQmJnRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIik8''@;'; put 'put ''MCYmKHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29sLTEyIiksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfWApKSx0aGlzLmNvbnRy''@;'; put 'put ''b2xJZFNlcnZpY2UmJiF0aGlzLmZvckF0dHImJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbElkU2VydmljZS5pZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZm9yQXR0cj1hLHRoaXMuaWRBdHRyPXRoaXMuaWRJbnB1dHx8YCR7YX0tbGFiZWxgfSkpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1kaXNhYmxlR3JpZCgpe3RoaXMuZW5hYmxlR3JpZD0hMX1vbkNsaWNrKGEpe3RoaXMucHJldmVudERlZmF1bHRPblNpZ25wb3N0VGFyZ2V0KGEpfXByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChh''@;'; put 'put ''KXt0aGlzLnNpZ25wb3N0JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudC5jb250YWlucyhhLnRhcmdldCkmJmEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''Q2gsOCksR2UoQ3AsOCksR2UoZjEsOCksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImxhYmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsV0wsNSxKaSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5z''@;'; put 'put ''aWducG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2xpY2soZil9KSwyJmEmJmhyKCJpZCIsZC5pZEF0dHIpKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7aWRJbnB1dDpb''@;'; put 'put ''Tm4uTm9uZSwiaWQiLCJpZElucHV0Il0sZm9yQXR0cjpbTm4uTm9uZSwiZm9yIiwiZm9yQXR0ciJdfX0pLGN9KSgpLEFVZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRll7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9InN1Y2Nlc3MifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDaCw4KSxHZShwNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLXN1Y2Nlc3Mi''@;'; put 'put ''XV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLFRyKCJjbHItc3VidGV4dCIsITApKCJzdWNjZXNzIiwhMCkpfSxmZWF0dXJlczpbd2FdLG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKHNhKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY2xhc3NOYW1lPSIifWNvbnRyb2xDbGFzcyhhPUFkLk5PTkUsZD0hMSxoPSIiKXtjb25zdCBmPVt0''@;'; put 'put ''aGlzLmNsYXNzTmFtZSxoXTtzd2l0Y2goYSl7Y2FzZSBBZC5WQUxJRDpmLnB1c2goImNsci1zdWNjZXNzIik7YnJlYWs7Y2FzZSBBZC5JTlZBTElEOmYucHVzaCgiY2xyLWVycm9yIil9cmV0dXJuIGQmJnRoaXMubGF5b3V0U2VydmljZSYmLTE9PT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJj''@;'; put 'put ''bHItY29sIikmJmYucHVzaChgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5tYXhMYWJlbFNpemUtdGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX0gY2xyLWNvbC0xMmApLGYuam9pbigiICIpLnRyaW0oKX1pbml0Q29udHJvbENsYXNzKGEsZCl7ZCYmZC5jbGFzc05hbWUmJih0''@;'; put 'put ''aGlzLmNsYXNzTmFtZT1kLmNsYXNzTmFtZSxkLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goZj0+e2Yuc3RhcnRzV2l0aCgiY2xyLWNvbCIpJiZhLnJlbW92ZUNsYXNzKGQsZil9KSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKENwLDgp''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx3Nz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5jb250cm9sQ2xhc3NTZXJ2''@;'; put 'put ''aWNlPWgsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuc3RhdGU9dixzZXRUaW1lb3V0KCgpPT57dGhpcy51cGRhdGVIZWxwZXJzKCl9KX0pKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaChmLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5jb250cm9sPXZ9KSxmLmFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLmFkZGl0aW9uYWxDb250cm9scz12fSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0''@;'; put 'put ''aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnR9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BZC5WQUxJRCYmdGhpcy5zdWNjZXNzTWVzc2FnZVByZXNlbnR9Z2V0IHNob3dJbnZhbGlkKCl7cmV0dXJuIHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09''@;'; put 'put ''PUFkLklOVkFMSUQmJnRoaXMuZXJyb3JNZXNzYWdlUHJlc2VudH1nZXQgc3VjY2Vzc01lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBlcnJvck1lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xFcnJvckNvbXBvbmVudH1n''@;'; put 'put ''ZXQgdG91Y2hlZCgpe3JldHVybiEoIXRoaXMuY29udHJvbD8udG91Y2hlZCYmIXRoaXMuYWRkaXRpb25hbENvbnRyb2xzPy5zb21lKGE9PmEudG91Y2hlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMudXBkYXRlSGVscGVycygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1jb250cm9sQ2xhc3MoKXtyZXR1cm4gdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmNvbnRyb2xDbGFzcyghdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudCYmdGhpcy5zdGF0ZT09PUFkLlZBTElEfHwhdGhpcy50b3VjaGVkP0FkLk5PTkU6''@;'; put 'put ''dGhpcy5zdGF0ZSx0aGlzLmFkZEdyaWQoKSl9YWRkR3JpZCgpe3JldHVybiB0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpfXVwZGF0ZUhlbHBlcnMoKXt0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5zZXRIZWxw''@;'; put 'put ''ZXJzKHtzaG93OnRoaXMuc2hvd0ludmFsaWR8fHRoaXMuc2hvd0hlbHBlcnx8dGhpcy5zaG93VmFsaWQsc2hvd0ludmFsaWQ6dGhpcy5zaG93SW52YWxpZCxzaG93SGVscGVyOnRoaXMuc2hvd0hlbHBlcixzaG93VmFsaWQ6dGhpcy5zaG93VmFsaWR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoa2QpLEdlKENwLDgpLEdlKERkKSxHZShmMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGRzLDUpLGFvKGgsQVVlLDUpLGFvKGgsaFVlLDUpLGFvKGgsakws''@;'; put 'put ''NSkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubGFiZWw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY29udHJvbEVycm9yQ29tcG9uZW50PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNvbnRyb2xIZWxw''@;'; put 'put ''ZXJDb21wb25lbnQ9Zi5maXJzdCl9fX0pLGN9KSgpO2NsYXNzIFlMe2NvbnN0cnVjdG9yKGwsYSxkPTApe2lmKHRoaXMuaW5qZWN0b3I9YS5pbmplY3RvciwhdGhpcy5pbmplY3Rvci5nZXQobCxudWxsKSl7Y29uc3QgaD10aGlzLmluamVjdG9yLmdldChXNSksZj10aGlzLmluamVjdG9yLmdl''@;'; put 'put ''dChKaSk7YS5jcmVhdGVDb21wb25lbnQoaC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjVWUpKTtjb25zdCB2PWgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCksTT1bXTtNW2RdPVtmLm5hdGl2ZUVsZW1lbnRdO2NvbnN0IEk9YS5jcmVhdGVDb21wb25lbnQodix2b2lkIDAsdm9pZCAwLE0p''@;'; put 'put ''O2EucmVtb3ZlKDApLHRoaXMuaW5qZWN0b3I9SS5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KGwsYSl9fWxldCBVWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgV259Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp''@;'; put 'put ''O3ZhciBaWT1mdW5jdGlvbihjKXtyZXR1cm4gYy5GT1JNPSJmb3JtIixjLk1PREVMPSJtb2RlbCIsY30oWll8fHt9KTtsZXQgQzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy52Y3I9YSx0aGlzLndyYXBwZXJUeXBlPWQsdGhpcy5fbmdDb250cm9sPWYsdGhp''@;'; put 'put ''cy5yZW5kZXJlcj12LHRoaXMuZWw9TSx0aGlzLmluZGV4PTAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuYWRkaXRpb25hbERpZmZlcj1uZXcgTWFwLGgmJih0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoZjEsbnVsbCksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9aC5nZXQoa2Qs''@;'; put 'put ''bnVsbCksdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWguZ2V0KERkLG51bGwpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KFVZLG51bGwpLHRoaXMuZGlmZmVycz1oLmdldCh3TSxudWxsKSksdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2Uu''@;'; put 'put ''aW5pdENvbnRyb2xDbGFzcyh2LE0ubmF0aXZlRWxlbWVudCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhp''@;'; put 'put ''cy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoST0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KEkpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5f''@;'; put 'put ''aWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9YSl9Z2V0IGhhc0FkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2l6ZT4wfW5nT25Jbml0KCl7dGhpcy5fY29udGFpbmVySW5qZWN0b3I9bmV3IFlMKHRo''@;'; put 'put ''aXMud3JhcHBlclR5cGUsdGhpcy52Y3IsdGhpcy5pbmRleCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChDaCksdGhpcy5jb250YWluZXJJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KHA3LG51bGwpLHRoaXMuX2lkP3RoaXMu''@;'; put 'put ''Y29udHJvbElkU2VydmljZS5pZD10aGlzLl9pZDp0aGlzLl9pZD10aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLl9uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbD8odGhpcy5uZ0NvbnRyb2w9dGhpcy5uZ0NvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlLmNvbnRyb2wsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmFkZEFkZGl0aW9uYWxDb250cm9sKHRoaXMuX25nQ29udHJvbCksdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNldCh0aGlzLl9uZ0NvbnRyb2wsdGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdDb250cm9sKS5jcmVhdGUoKSkpOih0''@;'; put 'put ''aGlzLm5nQ29udHJvbD10aGlzLl9uZ0NvbnRyb2wsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNldENvbnRyb2wodGhpcy5uZ0NvbnRyb2wpLHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLnRyaWdnZXJE''@;'; put 'put ''b0NoZWNrKHRoaXMuZGlmZmVyLHRoaXMubmdDb250cm9sKSx0aGlzLmhhc0FkZGl0aW9uYWxDb250cm9scylmb3IoY29uc3RbYSxkXW9mIHRoaXMuYWRkaXRpb25hbERpZmZlcil0aGlzLnRyaWdnZXJEb0NoZWNrKGQsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj''@;'; put 'put ''aChhPT5hPy51bnN1YnNjcmliZSgpKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlJiZ0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS50cmlnZ2VyU3RhdHVzQ2hhbmdlKCl9Z2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKGEsZCl7dHJ5e3JldHVybiB0aGlz''@;'; put 'put ''Ll9jb250YWluZXJJbmplY3Rvci5nZXQoYSxkKX1jYXRjaHtyZXR1cm4gZH19dHJpZ2dlckRvQ2hlY2soYSxkKXtpZihhKXtjb25zdCBoPWEuZGlmZihkKTtoJiZoLmZvckVhY2hDaGFuZ2VkSXRlbShmPT57KGYua2V5PT09WlkuRk9STXx8Zi5rZXk9PT1aWS5NT0RFTCkmJmYuY3VycmVudFZh''@;'; put 'put ''bHVlIT09Zi5wcmV2aW91c1ZhbHVlJiZ0aGlzLnRyaWdnZXJWYWxpZGF0aW9uKCl9KX19bWFya0FzVG91Y2hlZCgpe3RoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlk''@;'; put 'put ''aXR5KCkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhhc0FkZGl0aW9uYWxDb250cm9scyYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmFkZGl0aW9uYWxDb250cm9scz8uZm9yRWFjaChhPT57YS5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSxhLmNvbnRyb2wu''@;'; put 'put ''dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9c2V0QXJpYURlc2NyaWJlZEJ5KGEpe2lmKGEuc2hvdyl7Y29uc3QgZD10aGlzLmdldEFyaWFEZXNjcmliZWRCeUlkKGEpO2lmKG51bGwhPT1kKXJldHVybiB2b2lkIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudCwiYXJpYS1kZXNjcmliZWRieSIsZCl9dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5Iil9Z2V0QXJpYURlc2NyaWJlZEJ5SWQoYSl7Y29uc3QgZD10aGlzLmNvbnRhaW5lcklkU2VydmljZT8uaWR8fHRoaXMu''@;'; put 'put ''Y29udHJvbElkU2VydmljZT8uaWQ7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1bYCR7ZH0taGVscGVyYF07cmV0dXJuIGEuc2hvd0ludmFsaWQ/aC5wdXNoKGAke2R9LWVycm9yYCk6YS5zaG93VmFsaWQmJmgucHVzaChgJHtkfS1zdWNjZXNzYCksaC5qb2luKCIgIil9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShqNiksR2UoRHMpLEdlKGQxKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImJsdXIiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pLDImYSYmb3AoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifX0pLGN9KSgpLFExZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9ZH1zZXQg''@;'; put 'put ''bGFiZWxTaXplKGEpe2NvbnN0IGQ9cGFyc2VJbnQoYSwxMCl8fDI7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZT1kfW9uRm9ybVN1Ym1pdCgpe3RoaXMubWFya0FzVG91Y2hlZCgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLm1hcmtDb250cm9sU2VydmljZS5tYXJrQXNUb3VjaGVkKCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwKSxHZShVWSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb3JtIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZHMsNSks''@;'; put 'put ''MiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbHM9Zil9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoInN1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkZvcm1TdWJtaXQoKX0pLDImYSYmVHIoImNsci1mb3JtIiwhMCkoImNsci1mb3JtLWhv''@;'; put 'put ''cml6b250YWwiLGQubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSkoImNsci1mb3JtLWNvbXBhY3QiLGQubGF5b3V0U2VydmljZS5pc0NvbXBhY3QoKSl9LGlucHV0czp7bGFiZWxTaXplOltObi5Ob25lLCJjbHJMYWJlbFNpemUiLCJsYWJlbFNpemUiXX0sZmVhdHVyZXM6W2RhKFtDcCxV''@;'; put 'put ''WV0pXX0pLGN9KSgpLGF1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCx5aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1Jh''@;'; put 'put ''LEFzXX0pLGN9KSgpO2NvbnN0IFdZPW5ldyBNdCgiSVNfVE9HR0xFIiksUlVlPXtwcm92aWRlOldZLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSVVlKCl7cmV0dXJuIG5ldyBlaSghMSl9fTtsZXQgU2g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVu''@;'; put 'put ''c3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShXWSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVy''@;'; put 'put ''aWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGRzLDcpLGFvKGgsSWQsNykpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubGFiZWw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQuY2hlY2tib3g9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezImYSYmVHIoImNsci1jaGVja2JveC13cmFwcGVyIiwhZC50b2dnbGUpKCJjbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCIsbnVsbD09ZC5jaGVja2JveD9udWxsOmQuY2hlY2tib3guY29udHJvbERpc2FibGVkKSgiY2xyLXRvZ2dsZS13cmFwcGVyIixkLnRvZ2dsZSl9LGZlYXR1cmVz''@;'; put 'put ''OltkYShbQ2gsUlVlXSldLG5nQ29udGVudFNlbGVjdG9yczpESGUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGtIZSksWXIoMCksWXIoMSwxKSxndCgyLElIZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbeWEsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLElkPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoYSxTaCxkLGgsZix2KSx0aGlzLmNvbnRyb2w9aCx0aGlzLnRvZ2dsZT1N''@;'; put 'put ''fWdldCBjb250cm9sRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihXWSxudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUmJmEubmV4dCghMCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSksSWYoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2tib3giLCIiXSxbIiIsImNs''@;'; put 'put ''clRvZ2dsZSIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLG51bGwhPT1kLnRvZ2dsZT8ic3dpdGNoIjpudWxsKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEJiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3tjb25zdHJ1Y3RvcihhLGQs''@;'; put 'put ''aCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLmlubGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfWdldCBhbGxDaGVja2JveGVzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZCYmKCF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8ubGVuZ3RofHx0''@;'; put 'put ''aGlzLmFkZGl0aW9uYWxDb250cm9scy5ldmVyeShhPT5hLmRpc2FibGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwLDgpLEdlKERkKSxHZShmMSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6''@;'; put 'put ''ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxJZCw1KSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIixkLnJvbGUpLFRyKCJjbHItZm9ybS1jb250cm9sIiwhMCko''@;'; put 'put ''ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuYWxsQ2hlY2tib3hlc0Rpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LGZlYXR1cmVzOltkYShba2QsZjEsRGQscDddKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOkxIZSxk''@;'; put 'put ''ZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWlj''@;'; put 'put ''b24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRl''@;'; put 'put ''biIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoUkhlKSxZcigwKSxndCgxLE9IZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFlyKDMsMSksZ3QoNCxQSGUsMiwwLCJkaXYiLDIpKDUsQkhlLDUsNCwiZGl2IiwyKSxo''@;'; put 'put ''ZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksVHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSx4ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLHhlKCJuZ0lm''@;'; put 'put ''IixkLnNob3dJbnZhbGlkfHxkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlhLHJzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLHloKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsYXUsQngsYXVdfSksY30pKCk7ZnVuY3Rpb24gcWYoYyl7cmV0dXJuIG51bGwhPT1jJiYoInN0cmluZyI9PXR5cGVvZiBjP2MubGVuZ3RoPj0wOiJib29sZWFu''@;'; put 'put ''Ij09dHlwZW9mIGMmJmMpfWxldCBSZD0oKCk9PntjbGFzcyBje2dldCBzcGlubmVyQ2xhc3MoKXtyZXR1cm4hMH1nZXQgaW5saW5lQ2xhc3MoKXtyZXR1cm4gdGhpcy5faW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5faW5saW5lPXFmKGEpfWdldCBpbnZlcnNlQ2xhc3MoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faW52ZXJzZX1zZXQgY2xySW52ZXJzZShhKXt0aGlzLl9pbnZlcnNlPXFmKGEpfWdldCBzbWFsbENsYXNzKCl7cmV0dXJuIHRoaXMuX3NtYWxsfXNldCBjbHJTbWFsbChhKXt0aGlzLl9zbWFsbD1xZihhKX1nZXQgbWVkaXVtQ2xhc3MoKXtyZXR1cm4hdGhpcy5fc21hbGwmJnRoaXMu''@;'; put 'put ''X21lZGl1bX1zZXQgY2xyTWVkaXVtKGEpe3RoaXMuX21lZGl1bT1xZihhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zcGlubmVyIl1dLGhvc3RWYXJzOjExLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLWJ1c3kiLCEwKSxUcigic3Bpbm5lciIsZC5zcGlubmVyQ2xhc3MpKCJzcGlubmVyLWlubGluZSIsZC5pbmxpbmVDbGFzcykoInNwaW5uZXItaW52ZXJzZSIsZC5pbnZlcnNlQ2xhc3MpKCJzcGlubmVyLXNtIixkLnNtYWxsQ2xhc3Mp''@;'; put 'put ''KCJzcGlubmVyLW1kIixkLm1lZGl1bUNsYXNzKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUiLGNsckludmVyc2U6ImNsckludmVyc2UiLGNsclNtYWxsOiJjbHJTbWFsbCIsY2xyTWVkaXVtOiJjbHJNZWRpdW0ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksamI9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7dmFyIHltPWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkJPVEg9ImJvdGgiLGN9KHltfHx7fSk7bGV0IGVkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlkPWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoaW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksemI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0''@;'; put 'put ''aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj15bS5WRVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBLcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3Vz''@;'; put 'put ''YWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMuY2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhp''@;'; put 'put ''cy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9''@;'; put 'put ''Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVu''@;'; put 'put ''dEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1o''@;'; put 'put ''YW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVudEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkm''@;'; put 'put ''JnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PWdhLkhvbWU/''@;'; put 'put ''dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09Z2EuRW5kJiZ0aGlzLm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxSWShhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9''@;'; put 'put ''Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2Uo''@;'; put 'put ''YSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxl''@;'; put 'put ''SXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMuZm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3Ro''@;'; put 'put ''LTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5lbWl0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPUkyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeW0uVkVSVElDQUw6cmV0dXJuIGQ9PT1nYS5B''@;'; put 'put ''cnJvd0Rvd247Y2FzZSB5bS5IT1JJWk9OVEFMOnJldHVybiBkPT09Z2EuQXJyb3dSaWdodDtjYXNlIHltLkJPVEg6cmV0dXJuIGQ9PT1nYS5BcnJvd0Rvd258fGQ9PT1nYS5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9STIoYS5rZXkpO3N3''@;'; put 'put ''aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB5bS5WRVJUSUNBTDpyZXR1cm4gZD09PWdhLkFycm93VXA7Y2FzZSB5bS5IT1JJWk9OVEFMOnJldHVybiBkPT09Z2EuQXJyb3dMZWZ0O2Nhc2UgeW0uQk9USDpyZXR1cm4gZD09PWdhLkFycm93VXB8fGQ9PT1nYS5BcnJvd0xlZnQ7ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmYW8oaCxlZGUsNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5jbHJLZXlGb2N1c0l0ZW1zPWYpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5''@;'; put 'put ''ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlS2V5Ym9hcmRFdmVudChmKX0pKCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGYpfSl9LGlucHV0czp7ZGlyZWN0aW9uOltObi5Ob25lLCJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxm''@;'; put 'put ''b2N1c09uTG9hZDpbTm4uTm9uZSwiY2xyRm9jdXNPbkxvYWQiLCJmb2N1c09uTG9hZCJdLGZvY3VzYWJsZUl0ZW1zOltObi5Ob25lLCJjbHJLZXlGb2N1cyIsImZvY3VzYWJsZUl0ZW1zIl19LG91dHB1dHM6e2ZvY3VzQ2hhbmdlOiJjbHJGb2N1c0NoYW5nZSJ9LGF0dHJzOmpIZSxuZ0NvbnRl''@;'; put 'put ''bnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWVk9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7Y2xhc3MgT1Vle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4hIXRoaXMubW9kZWwmJnRoaXMubW9kZWwuaW5jbHVkZXMobCl9c2VsZWN0KGwpe3RoaXMuYWRkSXRlbShsKX11bnNlbGVjdChs''@;'; put 'put ''KXt0aGlzLnJlbW92ZUl0ZW0obCl9aXNFbXB0eSgpe3JldHVybiEodGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCl9cG9wKCl7bGV0IGw7cmV0dXJuIHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjAmJihsPXRoaXMubW9kZWxbdGhpcy5tb2RlbC5sZW5ndGgtMV0sdGhpcy5y''@;'; put 'put ''ZW1vdmVJdGVtKGwpKSxsfXRvU3RyaW5nKGwsYT0tMSl7bGV0IGQ9IiI7cmV0dXJuIHRoaXMubW9kZWwmJihhPi0xP3RoaXMubW9kZWxbYV0mJihkKz1sJiZ0aGlzLm1vZGVsW2FdW2xdP3RoaXMubW9kZWxbYV1bbF06dGhpcy5tb2RlbFthXS50b1N0cmluZygpKTp0aGlzLm1vZGVsLmZvckVh''@;'; put 'put ''Y2goaD0+e2QrPWwmJmhbbF0/aFtsXTpoLnRvU3RyaW5nKCksZCs9IiAifSkpLGQudHJpbSgpfWFkZEl0ZW0obCl7dGhpcy5jb250YWluc0l0ZW0obCl8fCh0aGlzLm1vZGVsPXRoaXMubW9kZWx8fFtdLHRoaXMubW9kZWwucHVzaChsKSl9cmVtb3ZlSXRlbShsKXtpZihudWxsPT10aGlzLm1v''@;'; put 'put ''ZGVsKXJldHVybjtjb25zdCBhPXRoaXMubW9kZWwuaW5kZXhPZihsKTthPi0xJiZ0aGlzLm1vZGVsLnNwbGljZShhLDEpLDA9PT10aGlzLm1vZGVsLmxlbmd0aCYmKHRoaXMubW9kZWw9bnVsbCl9fWNsYXNzIFBVZXtjb250YWluc0l0ZW0obCl7cmV0dXJuIHRoaXMubW9kZWw9PT1sfXNlbGVj''@;'; put 'put ''dChsKXt0aGlzLm1vZGVsPWx9dW5zZWxlY3QobCl7dGhpcy5jb250YWluc0l0ZW0obCkmJih0aGlzLm1vZGVsPW51bGwpfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5tb2RlbH1wb3AoKXtjb25zdCBsPXRoaXMubW9kZWw7cmV0dXJuIHRoaXMubW9kZWw9bnVsbCxsfXRvU3RyaW5nKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLm1vZGVsP2wmJnRoaXMubW9kZWxbbF0/dGhpcy5tb2RlbFtsXTp0aGlzLm1vZGVsLnRvU3RyaW5nKCk6IiJ9fWNsYXNzIEZVZSBleHRlbmRzIFBVZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBlaShudWxsKX1nZXQgZm9j''@;'; put 'put ''dXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1sZXQgSFVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITEsdGhpcy5zaG93QWxsT3B0aW9ucz0hMCx0aGlzLl9jdXJyZW50SW5wdXQ9IiIsdGhpcy5faW5wdXRDaGFuZ2VkPW5ldyBlaSgiIiksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZD1uZXcgYngoMSksdGhpcy5pbnB1dENoYW5nZWQ9dGhpcy5faW5wdXRDaGFuZ2VkLmFzT2JzZXJ2YWJs''@;'; put 'put ''ZSgpfWdldCBjdXJyZW50SW5wdXQoKXtyZXR1cm4gdGhpcy5fY3VycmVudElucHV0fXNldCBjdXJyZW50SW5wdXQoYSl7IiI9PT1hJiYhdGhpcy5tdWx0aXNlbGVjdGFibGUmJnRoaXMuc2V0U2VsZWN0aW9uVmFsdWUobnVsbCksdGhpcy5fY3VycmVudElucHV0PWEsdGhpcy5faW5wdXRDaGFu''@;'; put 'put ''Z2VkLm5leHQoYSl9Z2V0IHNlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgbXVsdGlzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZWwgaW5zdGFuY2VvZiBPVWV9c2VsZWN0KGEpe251bGw9PWF8fHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX10b2dnbGUoYSl7bnVsbCE9YSYmKHRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJ''@;'; put 'put ''dGVtKGEpP3RoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSk6dGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX11bnNlbGVjdChhKXtudWxsPT1hfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250''@;'; put 'put ''YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9c2V0U2VsZWN0aW9uVmFsdWUoYSl7IXRoaXMuc2VsZWN0aW9uTW9kZWx8fHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9''@;'; put 'put ''PT1hfHwhdGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbCYmIWF8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPWEsdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7WjFlKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5wc2V1''@;'; put 'put ''ZG9Gb2N1cz1uZXcgRlVlLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90''@;'; put 'put ''cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElucHV0KCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5wdXQoKXt0aGlzLnRleHRJbnB1''@;'; put 'put ''dCYmdGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhpcy5wc2V1ZG9Gb2N1cy5zZWxl''@;'; put 'put ''Y3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsO2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7dGhpcy5vcHRpb25EYXRhPWF9''@;'; put 'put ''aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJbmRleChoPT5oLmVxdWFscyh0''@;'; put 'put ''aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PXdoLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT13aC5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRo''@;'; put 'put ''aXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShZZigxKSkuc3Vic2NyaWJlKGQ9''@;'; put 'put ''PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPUkyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIGdhLkVudGVyOnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLnBzZXVk''@;'; put 'put ''b0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52''@;'; put 'put ''YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSBnYS5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2UgZ2EuQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8o''@;'; put 'put ''d2guVVApLGQ9ITA7YnJlYWs7Y2FzZSBnYS5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKHdoLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PWdhLlRhYiYmKCF0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxl''@;'; put 'put ''Y3RhYmxlfHxhLmtleSE9PWdhLkJhY2tzcGFjZSkmJmEua2V5IT09Z2EuRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3RoIil7dGhpcy5wc2V1ZG9Gb2N1''@;'; put 'put ''cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpe2EucHJldmVudERlZmF1''@;'; put 'put ''bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRoaXMudG9nZ2xlU2VydmljZS5v''@;'; put 'put ''cGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0aGlzLnRleHRJbnB1dC5jb250''@;'; put 'put ''YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cih4OCkseHIoc2MpLHhyKEhVZSkseHIoaW8pKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpj''@;'; put 'put ''LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IE5VZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgseWgsRWIsdngpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxZWSxhdSxPMixWeCxqYixhdSxPMl19KSxjfSkoKSxHTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSko''@;'; put 'put ''ZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVk''@;'; put 'put ''IixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltkYShba2QsZjEsQ2gsRGRdKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOkdIZSxkZWNsczoxMyx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHIt''@;'; put 'put ''Y29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRl''@;'; put 'put ''biIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFu''@;'; put 'put ''Z2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm''@;'; put 'put ''KHNhKFlIZSksWXIoMCksZ3QoMSwkSGUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksWXIoNSwxKSxZcig2LDIpLFlyKDcsMyksaGUoKSxndCg4LEtIZSwxLDAsImNkcy1pY29uIiw0KSg5LHFIZSwxLDAsImNkcy1pY29uIiw1KSxoZSgpLGd0KDEw''@;'; put 'put ''LFhIZSwxLDAsIm5nLWNvbnRlbnQiLDApKDExLEpIZSwxLDAsIm5nLWNvbnRlbnQiLDApKDEyLFFIZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSks''@;'; put 'put ''ZmUoNikseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3Us''@;'; put 'put ''eWEscnMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFoxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsR0wsZCxoLGYsdiksdGhpcy5pbmRleD0xLCJudW1iZXIiPT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgi''@;'; put 'put ''dHlwZSIpJiZjb25zb2xlLndhcm4oJ1dhcm5pbmc6IElucHV0cyBvZiB0eXBlICJudW1iZXIiIHNob3VsZCB1dGlsaXplIHRoZSBudW1iZXItaW5wdXQgY29tcG9uZW50IGZvciBwcm9wZXIgaGFuZGxpbmcuXG5cbiAgRXhhbXBsZSB1c2FnZTpcbiAgPGNsci1udW1iZXItaW5wdXQtY29udGFp''@;'; put 'put ''bmVyPlxuICAgIDxsYWJlbD5OdW1iZXIgSW5wdXQ8L2xhYmVsPlxuICAgIDxpbnB1dCBjbHJOdW1iZXJJbnB1dCB0eXBlPSJudW1iZXIiLz5cbiAgPC9jbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICcpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItaW5wdXQiLCEwKX0s''@;'; put 'put ''ZmVhdHVyZXM6W3dhXX0pLGN9KSgpLHRkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSxVYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNlZD1uZXcgZWkoITEpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkLmFzT2JzZXJ2YWJsZSgpfXNldCBmb2N1c2VkKGEpe3RoaXMuX2Zv''@;'; put 'put ''Y3VzZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVlVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2aCx5''@;'; put 'put ''aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHRkZSxBc119KSxjfSkoKSxCVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsQngsemNdfSksY30pKCksalVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzXX0pLGN9KSgpLEdVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxOWV19KSxjfSkoKSxpZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKFNsLDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsbE5lLDEsMCwibmct''@;'; put 'put ''dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KSxjfSko''@;'; put 'put ''KSxibT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUmJ7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxmZWF0''@;'; put 'put ''dXJlczpbd2FdfSksY30pKCksUzc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIExie2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRhYnMiKTtz''@;'; put 'put ''dXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFcyksR2UoYm0sOCksR2UoRmIpLEdlKGY3''@;'; put 'put ''KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbd2FdfSksY30pKCk7dmFyIE03PWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVSVElDQUw9''@;'; put 'put ''InZlcnRpY2FsIixjfShNN3x8e30pO2xldCB6eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9TTcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVybiB0aGlz''@;'; put 'put ''LmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1NNy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJlbi5wdXNo''@;'; put 'put ''KGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSksY30pKCksS1VlPTAsX209KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10YWItY29u''@;'; put 'put ''dGVudC0iK0tVZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJMaW5rLmlkPT09dGhpcy5pZCk/LnRhYkxp''@;'; put 'put ''bms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29u''@;'; put 'put ''dGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZjcpLEdlKEZiKSxHZSh6eCkpfSxjLlx1MDI3''@;'; put 'put ''NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShjTmUsNyksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOltObi5O''@;'; put 'put ''b25lLCJpZCIsInRhYkNvbnRlbnRJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMSwidGFiLWNvbnRlbnQiLDMsImlkIiwiaGlkZGVuIl1dLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLHVOZSwyLDYsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkscVVlPTA7Y29uc3QgJFk9bmV3IE10KCJUQUJTX0lEIiksSlVlPXtwcm92aWRlOiRZLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWFVlKCl7cmV0''@;'; put 'put ''dXJuImNsci10YWJzLSIrcVVlKyt9fTtsZXQgUVVlPTAsd209KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLmVsPWgsdGhpcy50YWJzU2VydmljZT1NLHRoaXMudGFic0lkPUksdGhpcy50YWJMaW5r''@;'; put 'put ''SWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrUVVlKyspO2NvbnN0IEc9Zi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShpZGUpO3RoaXMudGVtcGxhdGVSZWZDb250YWluZXI9di5jcmVhdGVDb21wb25lbnQoRyx2b2lkIDAsdm9pZCAwLFtbaC5uYXRpdmVFbGVtZW50XV0pLmlu''@;'; put 'put ''c3RhbmNlfWdldCBpbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMuX2luT3ZlcmZsb3cmJnRoaXMudGFic1NlcnZpY2UubGF5b3V0IT09TTcuVkVSVElDQUx9c2V0IGluT3ZlcmZsb3coYSl7dGhpcy5faW5PdmVyZmxvdz1hfWdldCBhZGRMaW5rQ2xhc3Nlcygpe3JldHVybiF0aGlzLmluT3ZlcmZs''@;'; put 'put ''b3d9Z2V0IGFyaWFDb250cm9scygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJMaW5rPT09dGhpcyk/LnRhYkNvbnRlbnQ/LnRhYkNvbnRlbnRJZH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlk''@;'; put 'put ''fWdldCB0YWJpbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZT8wOi0xfWFjdGl2YXRlKCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmNyksR2UoRmIpLEdlKEppKSxHZShXNSks''@;'; put 'put ''R2UoRG8pLEdlKHp4KSxHZSgkWSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl1dLGhvc3RBdHRyczpbInJvbGUiLCJ0YWIiLCJ0eXBlIiwiYnV0dG9uIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYWN0aXZhdGUoKX0pLDImYSYmKG9wKCJpZCIsZC50YWJMaW5rSWQpLGhyKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9scykoImFyaWEtc2VsZWN0ZWQiLGQuYWN0aXZlKSgidGFiaW5kZXgiLGQudGFiaW5kZXgpLFRyKCJidG4iLCEw''@;'; put 'put ''KSgiYnRuLWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJuYXYtbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoImFjdGl2ZSIsZC5hY3RpdmUpKX0saW5wdXRzOnt0YWJMaW5rSWQ6W05uLk5vbmUsImlkIiwidGFiTGlua0lkIl0saW5PdmVyZmxvdzpbTm4uTm9uZSwiY2xyVGFiTGlua0luT3ZlcmZs''@;'; put 'put ''b3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksQ209KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgucmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZl''@;'; put 'put ''U2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZjcpLEdlKEZiKSxHZSh6eCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLHdtLDcpLGFvKGgsX20sNykpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQudGFiTGluaz1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC50YWJDb250ZW50PWYuZmly''@;'; put 'put ''c3QpfX0sZmVhdHVyZXM6W2RhKFtuVWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGFkZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiQWN0aW9uIiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdfSksY30pKCksS1k9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWItb3ZlcmZsb3ctY29udGVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRyb3Bkb3duLW1lbnUiLCEwKX0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHg3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMu''@;'; put 'put ''dG9nZ2xlU2VydmljZT1kLHRoaXMudGFic1NlcnZpY2U9aCx0aGlzLnRhYnNJZD1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMudGFiTGlua0VsZW1lbnRzPVtdLHRoaXMuX21vdXNlZG93bj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9W119Z2V0''@;'; put 'put ''IGxheW91dCgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmxheW91dH1zZXQgbGF5b3V0KGEpe09iamVjdC5rZXlzKE03KS5tYXAoZD0+TTdbZF0pLmluZGV4T2YoYSk+PTAmJih0aGlzLnRhYnNTZXJ2aWNlLmxheW91dD1hKX1nZXQgdGFiTGlua0RpcmVjdGl2ZXMoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dGFiTGlua0RpcmVjdGl2ZXN9Z2V0IGFjdGl2ZVRhYkluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMuaW5kZXhPZih0aGlzLnRhYnNTZXJ2aWNlLmFjdGl2ZVRhYik+LTF9Z2V0IGFjdGl2ZVRhYlBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtE''@;'; put 'put ''aXJlY3RpdmVzLmZpbmRJbmRleChhPT5hLmFjdGl2ZSl9Z2V0IGlzQ3VycmVudEluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5rZXlGb2N1cy5jdXJyZW50Pj10aGlzLm92ZXJmbG93UG9zaXRpb259Z2V0IGlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1NNy5WRVJUSUNBTH1zZXQg''@;'; put 'put ''dGFiT3ZlcmZsb3dFbChhKXt0aGlzLl90YWJPdmVyZmxvd0VsPWEmJmEubmF0aXZlRWxlbWVudCx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmYSYmdGhpcy5rZXlGb2N1cy5mb2N1c0N1cnJlbnQoKX1nZXQgb3ZlcmZsb3dQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZl''@;'; put 'put ''cy5maWx0ZXIoYT0+IWEuaW5PdmVyZmxvdykubGVuZ3RofXNldCB0YWJDb250ZW50Vmlld0NvbnRhaW5lcihhKXt0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5G''@;'; put 'put ''b3JUYWJMaW5rQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlZEZvclRhYnNBY3Rpb25zQ2hhbmdlcygpKSx0eXBlb2YgdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD4idSImJnRoaXMudGFiTGlua0RpcmVjdGl2ZXNbMF0mJnRoaXMudGFiTGlua0RpcmVj''@;'; put 'put ''dGl2ZXNbMF0uYWN0aXZhdGUoKSx0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbn1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX10b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oYSl7dGhpcy50b2dn''@;'; put 'put ''bGVTZXJ2aWNlLm9wZW49YT49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufXJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoYSl7IXRoaXMua2V5Rm9jdXMubmF0aXZlRWxlbWVudC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLmtleUZvY3VzLmN1cnJlbnQhPT10aGlzLmFjdGl2ZVRh''@;'; put 'put ''YlBvc2l0aW9uJiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfXRvZ2dsZU92ZXJmbG93T25DbGljaygpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5vdmVyZmxv''@;'; put 'put ''d1Bvc2l0aW9uLTE6dGhpcy5vdmVyZmxvd1Bvc2l0aW9uKSx0aGlzLl9tb3VzZWRvd249ITF9b3Blbk92ZXJmbG93T25Gb2N1cygpeyF0aGlzLl9tb3VzZWRvd24mJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9''@;'; put 'put ''Y2xvc2VPbkZvY3VzT3V0KGEpeyF0aGlzLl90YWJPdmVyZmxvd0VsLmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYhdGhpcy5fbW91c2Vkb3duJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy50YWJMaW5rRWxlbWVudHNbdGhpcy5h''@;'; put 'put ''Y3RpdmVUYWJQb3NpdGlvbl09PT1hLnJlbGF0ZWRUYXJnZXQmJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbikpfWNsb3NlT25Fc2NhcGVLZXkoKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLm92ZXJmbG93UG9zaXRpb24tMSl9Y2xvc2VPbk91dHNpZGVD''@;'; put 'put ''bGljayhhLGQpe2NvbnN0IGg9dGhpcy50YWJzQWN0aW9ucy5zb21lKGY9PmYubmF0aXZlRWxlbWVudC5jb250YWlucyhhLnRhcmdldCkpO2EudGFyZ2V0PT09ZHx8ZC5jb250YWlucyhhLnRhcmdldCl8fGh8fCF0aGlzLl90YWJPdmVyZmxvd0VsLmNvbnRhaW5zKGEudGFyZ2V0KSYmdGhpcy5p''@;'; put 'put ''c0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLm92ZXJmbG93UG9zaXRpb24tMSl9c2V0VGFiTGlua0VsZW1lbnRzKCl7dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRoaXMu''@;'; put 'put ''X3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMudGFic0FjdGlvbnMmJnRoaXMudGFic0FjdGlvbnMmJnRoaXMudGFiTGlua0VsZW1lbnRzLnB1c2goLi4udGhpcy50YWJzQWN0aW9ucy5tYXAoYT0+YS5uYXRpdmVFbGVtZW50KSl9bGlzdGVuRm9yVGFi''@;'; put 'put ''TGlua0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzLmNoYW5nZXMucGlwZSh4Mih0aGlzLnRhYnMubWFwKGE9PmEudGFiTGluaykpKS5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfWxpc3RlZEZvclRhYnNBY3Rpb25zQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnNB''@;'; put 'put ''Y3Rpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZjcpLEdlKHNjKSxHZSh6eCksR2UoJFkpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNsci10YWJzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihhbyhoLGFkZSw1LEppKSxhbyhoLENtLDQpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLnRhYnNBY3Rpb25zPWYpLENpKGY9U2koKSkmJihkLnRhYnM9Zil9fSx2aWV3UXVl''@;'; put 'put ''cnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihxYSh6Yiw3KSxxYShLWSw1LEppKSxxYShkTmUsNyxEbykpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQua2V5Rm9jdXM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQudGFiT3ZlcmZsb3dFbD1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC50YWJDb250''@;'; put 'put ''ZW50Vmlld0NvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigidGFicy12ZXJ0aWNhbCIsZC5pc1ZlcnRpY2FsKX0saW5wdXRzOntsYXlvdXQ6W05uLk5vbmUsImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbZGEo''@;'; put 'put ''W2Y3LHp4LEpVZV0pLHZkKFtvZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Zk5lLGRlY2xzOjYsdmFyczozLGNvbnN0czpbWyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciIsIiJdLFsidGFiT3ZlcmZsb3dUcmlnZ2VyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsImNsckRpcmVjdGlvbiIsImJvdGgi''@;'; put 'put ''LDEsIm5hdiIsMywiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCIsImNscktleUZvY3VzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0lmIl0sWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJuYXYtaXRlbSJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicHJlc2VudGF0''@;'; put 'put ''aW9uIiwxLCJ0YWJzLW92ZXJmbG93IiwiYm90dG9tLXJpZ2h0Il0sWyJyb2xlIiwiYXBwbGljYXRpb24iLDEsIm5hdi1pdGVtIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJidG4iLCJidG4tbGluayIsIm5hdi1saW5rIiwiZHJvcGRvd24tdG9nZ2xlIiwzLCJt''@;'; put 'put ''b3VzZWRvd24iLCJmb2N1cyIsImNsaWNrIl0sWyJzaGFwZSIsImVsbGlwc2lzLWhvcml6b250YWwiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Iiw0LCJuZ0lmIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCJdLFszLCJuZ1RlbXBsYXRlT3V0''@;'; put 'put ''bGV0Iiw0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7c2EoaE5lKSxkZSgwLCJ1bCIsMiksRnQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24odikpfSkoImZv''@;'; put 'put ''Y3Vzb3V0IixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKHYpKX0pLGd0KDEsZ05lLDIsMSwibmctY29udGFpbmVyIiwzKSgyLGJOZSw3LDExLCJuZy1jb250YWluZXIiLDQpLFlyKDMpLGhlKCksRmwoNCxudWxsLDApfTImYSYmKHhl''@;'; put 'put ''KCJjbHJLZXlGb2N1cyIsZC50YWJMaW5rRWxlbWVudHMpLGZlKCkseGUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLGZlKCkseGUoIm5nSWYiLGQudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbbnMseWEsTjEscnMsemIsS1ldLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLGN9KSgpLGVaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoVDBlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0''@;'; put 'put ''czpbUmEsTzIsQXMsJFVlLFlZLE8yXX0pLGN9KSgpLHFZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5hdkdyb3VwQ291bnQ9MH1yZWdpc3Rlck5hdkdyb3VwKCl7dGhpcy5uYXZHcm91cENvdW50Kyt9dW5yZWdpc3Rlck5hdkdyb3VwKCl7dGhpcy5uYXZHcm91cENvdW50LS19''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFhZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pY29ucz0wfWdldCBoYXNJY29ucygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9pY29ucz4wfXJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zKyt9dW5yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucy0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWN9KSxjfSkoKSxKWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkPW5ldyBXbix0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBXbix0aGlzLl9jb2xsYXBzZWQ9ITEsdGhpcy5fY29sbGFwc2libGU9ITF9Z2V0IGFuaW1hdGVPbkNv''@;'; put 'put ''bGxhcHNlZCgpe3JldHVybiB0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZENoYW5nZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNlZH1z''@;'; put 'put ''ZXQgY29sbGFwc2VkKGEpe2E9ISFhLHRoaXMuY29sbGFwc2libGUmJnRoaXMuX2NvbGxhcHNlZCE9PWEmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX2NvbGxh''@;'; put 'put ''cHNpYmxlIT09KGE9ISFhKSYmKCFhJiZ0aGlzLmNvbGxhcHNlZCYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKCExKSx0aGlzLl9jb2xsYXBzaWJsZT1hKX11cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5uZXh0KGEpLHRoaXMuX2NvbGxhcHNl''@;'; put 'put ''ZD1hLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmKXt0aGlzLl9uYXZTZXJ2aWNlPWEsdGhpcy5fbmF2SWNvblNlcnZpY2U9ZCx0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLmNvbnRlbnRJZD1NdSgpLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEtyKCEwKSx0''@;'; put 'put ''aGlzLl9zdWI9YS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZSh2PT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KHYpfSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2Uu''@;'; put 'put ''Y29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vy''@;'; put 'put ''dmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7''@;'; put 'put ''dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEpZKSxHZShYWSksR2UocVkpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMi''@;'; put 'put ''LGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOnt0b2dnbGVMYWJlbDpbTm4uTm9uZSwiY2xyVmVydGljYWxOYXZUb2dnbGVMYWJlbCIsInRvZ2dsZUxhYmVsIl0sY29sbGFwc2libGU6W05uLk5vbmUsImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUiLCJj''@;'; put 'put ''b2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbTm4uTm9uZSwiY2xyVmVydGljYWxOYXZDb2xsYXBzZWQiLCJjb2xsYXBzZWQiXX0sb3V0cHV0czp7X2NvbGxhcHNlZENoYW5nZWQ6ImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtKWSxYWSxxWV0pXSxuZ0NvbnRl''@;'; put 'put ''bnRTZWxlY3RvcnM6Ym8sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi10cmlnZ2VyIiwzLCJvbi1jb2xsYXBzZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm5hdi1jb250ZW50IiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2''@;'; put 'put ''LWJ0biIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJuYXYtdHJpZ2dlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJuYXYtdHJpZ2dlci1pY29uIl0sWyJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMSwibmF2LWJ0biIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsX05lLDIsNiwiYnV0dG9uIiwwKSxkZSgxLCJkaXYiLDEpLFlyKDIpLGd0KDMsd05lLDEsMiwiYnV0dG9u''@;'; put 'put ''IiwyKSxoZSgpKSwyJmEmJih4ZSgibmdJZiIsZC5jb2xsYXBzaWJsZSksZmUoKSx4ZSgiaWQiLGQuY29udGVudElkKSxmZSgyKSx4ZSgibmdJZiIsZC5jb2xsYXBzaWJsZSYmZC5jb2xsYXBzZWQpKX0sZGVwZW5kZW5jaWVzOlt5YSxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZUc9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V4cGFuZENoYW5nZT1uZXcgV259Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRlc3Ryb3kkPW5ldyBXbixoJiZ4ZChhLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''ImNsaWNrIikucGlwZShWMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57aC5leHBhbmQoKSxkLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''SmkpLEdlKEVzKSxHZShlRyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclZlcnRpY2FsTmF2TGluayIsIiJdXSxob3N0QXR0cnM6WzEsIm5hdi1saW5rIl0sYXR0cnM6TU5lLG5nQ29udGVudFNlbGVjdG9yczpFTmUsZGVjbHM6Myx2YXJzOjAsY29uc3Rz''@;'; put 'put ''OltbMSwibmF2LXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh4TmUpLFlyKDApLGRlKDEsInNwYW4iLDApLFlyKDIsMSksaGUoKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG9kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRWIsazBl''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsTzIsQkwsTzIsQXMsQkxdfSksY30pKCksaVplPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2pVZSxHVWUsZVplLG9kZSxCVWVdfSksY30pKCksWmI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEIwZXtjb25zdHJ1Y3RvcihhLGQsaCl7c3Vw''@;'; put 'put ''ZXIoYSxkLGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UodlkpLEdlKHZzLDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGZlYXR1cmVzOlt3YV19KSxjfSkoKSxL''@;'; put 'put ''TD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKTtjb25zdCBvWmU9L2QrLittKy4reSsvaSxzWmU9L20rLitkKy4reSsvaSxsWmU9L2Qr''@;'; put 'put ''fG0rfHkrL2ksY1plPS9cZCsvZyx1WmU9L01vYmkvaSxkWmU9L1x1MjAwZi9nLG5HPSJZWVlZIixxTD17bmFtZToiTElUVExFX0VORElBTiIsZm9ybWF0OlsiREQiLCJNTSIsbkddfSxhRz17bmFtZToiTUlERExFX0VORElBTiIsZm9ybWF0OlsiTU0iLCJERCIsbkddfSxoWmU9e25hbWU6IkJJ''@;'; put 'put ''R19FTkRJQU4iLGZvcm1hdDpbbkcsIk1NIiwiREQiXX07ZnVuY3Rpb24gbGRlKGMsbCl7cmV0dXJuIG5ldyBEYXRlKGMsbCsxLDApLmdldERhdGUoKX1jbGFzcyB2WmV7Y29uc3RydWN0b3IobCxhPSExLGQ9ITEsaD0hMSxmPSExLHY9ITEsTT0hMSxJPSExKXt0aGlzLmRheU1vZGVsPWwsdGhp''@;'; put 'put ''cy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhjbHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPXYsdGhpcy5pc1JhbmdlU3RhcnREYXk9TSx0aGlzLmlzUmFuZ2VFbmREYXk9SX1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5pc0Zv''@;'; put 'put ''Y3VzYWJsZT8wOi0xfX1jbGFzcyBMZHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuZGF0ZT1kfWlzRXF1YWwobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRoJiZ0aGlzLmRhdGU9PT1sLmRhdGV9dG9E''@;'; put 'put ''YXRlKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9aW5jcmVtZW50QnkobCl7Y29uc3QgYT1uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUrbCk7cmV0dXJuIG5ldyBMZChhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEu''@;'; put 'put ''Z2V0RGF0ZSgpKX1jbG9uZSgpe3JldHVybiBuZXcgTGQodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX10b0NvbXBhcmlzb25TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnllYXJ9JHt0aGlzLnBhZCh0aGlzLm1vbnRoKX0ke3RoaXMucGFkKHRoaXMuZGF0ZSl9YH10b0RhdGVTdHJpbmco''@;'; put 'put ''KXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHt3ZWVrZGF5OiJsb25nIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIix5ZWFyOiJudW1lcmljIn0pfWlzQmVmb3JlKGwsYT0hMSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8PWw/LnRv''@;'; put 'put ''RGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0ZSgpLmdldFRpbWUoKTxsPy50b0RhdGUoKS5nZXRUaW1lKCl9aXNBZnRlcihsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPj1sPy50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+bD8udG9E''@;'; put 'put ''YXRlKCkuZ2V0VGltZSgpfXBhZChsKXtyZXR1cm4gbDwxMD9gMCR7bH1gOmAke2x9YH19Y2xhc3MgeVple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5zZWxlY3RlZEVuZERheT1kLHRoaXMuZm9jdXNhYmxlRGF5PWgs''@;'; put 'put ''dGhpcy50b2RheT1mLHRoaXMuZmlyc3REYXlPZldlZWs9dix0aGlzLmV4Y2x1ZGVkRGF0ZXM9TSx0aGlzLmN1cnJNb250aERheVZpZXdzPVtdLHRoaXMuaW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpfWdldCBjYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJWaWV3fXVwZGF0ZUZv''@;'; put 'put ''Y3VzYWJsZURheShsKXt0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITEpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyhsLCEwKSx0aGlzLmZvY3VzYWJsZURheT1sfXVwZGF0ZVNlbGVjdGVkRGF5KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwh''@;'; put 'put ''MSksdGhpcy5zZWxlY3RlZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9dXBkYXRlU2VsZWN0ZWRFbmREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCExKSx0aGlzLnNlbGVjdGVkRW5kRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX1p''@;'; put 'put ''bml0aWFsaXplQ2FsZW5kYXJWaWV3KCl7Y29uc3QgbD10aGlzLmNhbGVuZGFyLnByZXZpb3VzTW9udGgoKSxhPXRoaXMuY2FsZW5kYXIubmV4dE1vbnRoKCksZD10aGlzLm51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRo''@;'; put 'put ''KSxoPTQyLSh0aGlzLmNhbGVuZGFyLmRheXMubGVuZ3RoK2QpO2xldCBmPVtdLHY9W107ZD4wJiYoZj10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhsLmRheXMuc2xpY2UoLTEqZCksITAsITEpKSx0aGlzLmN1cnJNb250aERheVZpZXdzPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKHRo''@;'; put 'put ''aXMuY2FsZW5kYXIuZGF5cywhMSwhMCksaD4wJiYodj10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhhLmRheXMuc2xpY2UoMCxoKSwhMCwhMSkpLHRoaXMuX2NhbGVuZGFyVmlldz10aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KGYsdGhpcy5jdXJyTW9udGhEYXlWaWV3cyx2KSx0aGlzLmlu''@;'; put 'put ''aXRpYWxpemVTZWxlY3RlZERheSgpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpfWlzRGF0ZUV4Y2x1ZGVkKGwpe2NvbnN0e21pbkRhdGU6YSxtYXhEYXRlOmR9PXRoaXMuZXhjbHVkZWREYXRlcyxoPWEudG9Db21wYXJpc29uU3RyaW5nKCksZj1kLnRvQ29tcGFyaXNvblN0cmluZygp''@;'; put 'put ''LHY9bC50b0NvbXBhcmlzb25TdHJpbmcoKTtyZXR1cm4hKHY+PWgmJnY8PWYpfWdlbmVyYXRlRGF5Vmlld01vZGVscyhsLGEsZCl7Y29uc3QgaD1sLm1hcChmPT5uZXcgdlplKGYsITEsYSx0aGlzLmlzRGF0ZUV4Y2x1ZGVkKGYpLCExLCExKSk7cmV0dXJuIGQmJnRoaXMuY2FsZW5kYXIuaXNE''@;'; put 'put ''YXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpJiYoaFt0aGlzLnRvZGF5LmRhdGUtMV0uaXNUb2RheXNEYXRlPSEwKSxofW51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBwWmUoYyxsLGEpe3JldHVybiBuZXcgRGF0ZShjLGwsYSkuZ2V0RGF5KCl9KGws''@;'; put 'put ''YSwxKTtyZXR1cm4gZD49dGhpcy5maXJzdERheU9mV2Vlaz9kLXRoaXMuZmlyc3REYXlPZldlZWs6NytkLXRoaXMuZmlyc3REYXlPZldlZWt9aXNEYXlJbkNhbGVuZGFyVmlldyhsKXtyZXR1cm4hIXRoaXMuY2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKGwpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3''@;'; put 'put ''KGwsYSxkKXtjb25zdCBoPVsuLi5sLC4uLmEsLi4uZF0sZj1bXTtmb3IobGV0IHY9MDt2PDY7disrKWZbdl09aC5zbGljZSg3KnYsNyoodisxKSk7cmV0dXJuIGZ9aW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLnNl''@;'; put 'put ''dFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXks''@;'; put 'put ''ITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5zZWxlY3Rl''@;'; put 'put ''ZEVuZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWRFbmREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZEVuZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZEVuZERheS5jbG9uZSgpKTp0aGlzLmlzRGF5SW5DYWxl''@;'; put 'put ''bmRhclZpZXcodGhpcy50b2RheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnRvZGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnRvZGF5LmNsb25lKCkpOih0aGlzLmZvY3VzYWJsZURheT1uZXcgTGQodGhpcy5jYWxlbmRhci55ZWFyLHRoaXMuY2FsZW5kYXIubW9udGgsMTUp''@;'; put 'put ''LHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMCkpfXNldEZvY3VzYWJsZUZsYWcobCxhKXtsJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsLmRhdGUtMV0uaXNGb2N1c2FibGU9YSl9c2V0U2VsZWN0ZWREYXkobCxhKXtsJiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZp''@;'; put 'put ''ZXcobCkmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2w/LmRhdGUtMV0uaXNTZWxlY3RlZD1hKX19bGV0IFp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sb2NhbGU9YSx0aGlzLl9maXJzdERheU9mV2Vlaz0wLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGEoKX1nZXQgZmly''@;'; put 'put ''c3REYXlPZldlZWsoKXtyZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWt9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5c31nZXQgbG9jYWxlRGF5c05hcnJvdygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzLm1hcChhPT5hLm5hcnJvdyl9Z2V0IGxvY2FsZU1vbnRoc0Fi''@;'; put 'put ''YnJldmlhdGVkKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkfWdldCBsb2NhbGVNb250aHNXaWRlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc1dpZGV9Z2V0IGxvY2FsZURhdGVGb3JtYXQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF0ZUZvcm1hdH1pbml0aWFsaXpl''@;'; put 'put ''TG9jYWxlRGF0YSgpe3RoaXMuaW5pdGlhbGl6ZUZpcnN0RGF5T2ZXZWVrKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0ZUZvcm1hdCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpLHRoaXMuaW5pdGlh''@;'; put 'put ''bGl6ZUxvY2FsZURheXMoKX1pbml0aWFsaXplTG9jYWxlRGF5cygpe2NvbnN0IGE9W10sZD1qVSh0aGlzLmxvY2FsZSxkMC5TdGFuZGFsb25lLGRsLldpZGUpLnNsaWNlKCksaD1qVSh0aGlzLmxvY2FsZSxkMC5TdGFuZGFsb25lLGRsLk5hcnJvdykuc2xpY2UoKSxmPXRoaXMuZmlyc3REYXlP''@;'; put 'put ''ZldlZWs7Zm9yKGxldCB2PTA7djw3O3YrKylhLnB1c2goe2RheTpkW3ZdLG5hcnJvdzpoW3ZdfSk7aWYoZj4wKXtjb25zdCB2PWEuc3BsaWNlKDAsZik7YS5wdXNoKC4uLnYpfXRoaXMuX2xvY2FsZURheXM9YX1pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXt0aGlzLl9sb2Nh''@;'; put 'put ''bGVNb250aHNBYmJyZXZpYXRlZD16VSh0aGlzLmxvY2FsZSxkMC5TdGFuZGFsb25lLGRsLkFiYnJldmlhdGVkKS5zbGljZSgpfWluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCl7dGhpcy5fbG9jYWxlTW9udGhzV2lkZT16VSh0aGlzLmxvY2FsZSxkMC5TdGFuZGFsb25lLGRsLldpZGUpLnNs''@;'; put 'put ''aWNlKCl9aW5pdGlhbGl6ZUZpcnN0RGF5T2ZXZWVrKCl7dGhpcy5fZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24geF9lKGMpe3JldHVybiBvMShjKVtlYy5GaXJzdERheU9mV2Vla119KHRoaXMubG9jYWxlKX1pbml0aWFsaXplTG9jYWxlRGF0ZUZvcm1hdCgpe3RoaXMuX2xvY2FsZURhdGVGb3Jt''@;'; put 'put ''YXQ9ZnVuY3Rpb24gTU0oYyxsKXtyZXR1cm4gQzIobzEoYylbZWMuRGF0ZUZvcm1hdF0sbCl9KHRoaXMubG9jYWxlLENkLlNob3J0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoQmYpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyBPZHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpfWlzRXF1YWwobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1v''@;'; put 'put ''bnRofWlzRGF5SW5DYWxlbmRhcihsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9cHJldmlvdXNNb250aCgpe3JldHVybiAwPT09dGhpcy5tb250aD9uZXcgT2QodGhpcy55ZWFyLTEsMTEpOm5ldyBPZCh0aGlzLnllYXIsdGhpcy5tb250aC0x''@;'; put 'put ''KX1uZXh0TW9udGgoKXtyZXR1cm4gMTE9PT10aGlzLm1vbnRoP25ldyBPZCh0aGlzLnllYXIrMSwwKTpuZXcgT2QodGhpcy55ZWFyLHRoaXMubW9udGgrMSl9cHJldmlvdXNZZWFyKCl7cmV0dXJuIG5ldyBPZCh0aGlzLnllYXItMSx0aGlzLm1vbnRoKX1uZXh0WWVhcigpe3JldHVybiBuZXcg''@;'; put 'put ''T2QodGhpcy55ZWFyKzEsdGhpcy5tb250aCl9aW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl7Y29uc3QgbD1sZGUodGhpcy55ZWFyLHRoaXMubW9udGgpO3RoaXMuZGF5cz1BcnJheShsKS5maWxsKG51bGwpLm1hcCgoYSxkKT0+bmV3IExkKHRoaXMueWVhcix0aGlzLm1vbnRoLGQrMSkpfX1s''@;'; put 'put ''ZXQgTWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaXNSYW5nZVBpY2tlcj0hMSx0aGlzLmhhc0FjdGlvbkJ1dHRvbnM9ITEsdGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2U9bmV3IFduLHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hh''@;'; put 'put ''bmdlPW5ldyBXbix0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZT1uZXcgV24sdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlPW5ldyBXbix0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3PW5ldyBXbix0aGlzLl9mb2N1c2VkRGF5Q2hhbmdlPW5ldyBXbn1nZXQgdG9kYXkoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fdG9kYXl9Z2V0IGRpc3BsYXllZENhbGVuZGFyKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2VsZWN0ZWRFbmREYXlDaGFuZ2UoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCkucGlwZShHdShhPT50aGlzLmZvY3VzZWREYXk9YSkpfWdldCByZWZyZXNoQ2FsZW5kYXJWaWV3''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEse2VtaXRFdmVudDpkfT17ZW1pdEV2ZW50OiEwfSl7aWYodGhpcy5pc1JhbmdlUGlja2VyKXtjb25zdHtzdGFydERhdGU6aCxlbmREYXRlOmZ9PWE7aCYm''@;'; put 'put ''Zj8odGhpcy5zZXRTZWxlY3RlZERheShoLGQpLHRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSk6KG51bGwhPT1mJiZ0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCksbnVsbCE9PWgmJnRoaXMuc2V0U2VsZWN0ZWREYXkoaCxkKSl9ZWxzZSB0aGlzLnNldFNlbGVjdGVkRGF5KGEsZCk7dGhp''@;'; put 'put ''cy5fcmVmcmVzaENhbGVuZGFyVmlldy5uZXh0KCl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5mb2N1c2VkRGF5PW51bGwsdGhpcy5pbml0aWFsaXplVG9kYXlzRGF0ZSgpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyPXRoaXMuc2VsZWN0ZWREYXk/bmV3IE9kKHRoaXMuc2VsZWN0ZWREYXku''@;'; put 'put ''eWVhcix0aGlzLnNlbGVjdGVkRGF5Lm1vbnRoKTpuZXcgT2QodGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpfWNoYW5nZU1vbnRoKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnllYXIsYSkpfWNoYW5nZVllYXIoYSl7''@;'; put 'put ''dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QoYSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5tb250aCkpfW1vdmVUb05leHRNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubmV4dE1vbnRoKCkpfW1vdmVUb1ByZXZpb3VzTW9u''@;'; put 'put ''dGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzTW9udGgoKSl9bW92ZVRvTmV4dFllYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRZZWFyKCkpfW1vdmVUb1ByZXZpb3Vz''@;'; put 'put ''WWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNZZWFyKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlzLnNldERpc3BsYXllZENh''@;'; put 'put ''bGVuZGFyKG5ldyBPZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9bW92ZVRvU3BlY2lmaWNNb250aChhKXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihhKXx8dGhpcy5zZXREaXNwbGF5''@;'; put 'put ''ZWRDYWxlbmRhcihuZXcgT2QoYS55ZWFyLGEubW9udGgpKX1pbmNyZW1lbnRGb2N1c0RheShhKXt0aGlzLmhvdmVyZWREYXk9dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShhKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5m''@;'; put 'put ''b2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBPZCh0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZvY3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4''@;'; put 'put ''dCgpfXJlc2V0U2VsZWN0ZWREYXkoKXt0aGlzLnNlbGVjdGVkRGF5PXRoaXMucGVyc2lzdGVkRGF0ZSx0aGlzLnNlbGVjdGVkRW5kRGF5PXRoaXMucGVyc2lzdGVkRW5kRGF0ZX1jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYSl7cmV0dXJuIG5ldyBMZChhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250''@;'; put 'put ''aCgpLGEuZ2V0RGF0ZSgpKX1zZXRTZWxlY3RlZERheShhLGQpe3RoaXMuc2VsZWN0ZWREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfXNldFNlbGVjdGVkRW5kRGF5KGEsZCl7dGhpcy5zZWxlY3RlZEVuZERheT1hLGQmJnRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdl''@;'; put 'put ''Lm5leHQoYSl9c2V0RGlzcGxheWVkQ2FsZW5kYXIoYSl7dGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNFcXVhbChhKXx8KHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyPWEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UubmV4dCgpKX1pbml0aWFsaXplVG9kYXlzRGF0ZSgpe3RoaXMuX3Rv''@;'; put 'put ''ZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3RvZGF5PW5ldyBMZCh0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldE1vbnRoKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RGF0ZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksU209KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9uZT1hLHRoaXMucGxhdGZvcm1JZD1kfWZvY3VzQ2VsbChhKXt0aGlzLl9u''@;'; put 'put ''Z1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCkuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3RhYmluZGV4PSIwIl0nKTtkJiZkLmZvY3VzKCl9KX0pfWZvY3VzSW5wdXQoYSl7dGhp''@;'; put 'put ''cy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLm5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCkuc3Vic2NyaWJlKCgpPT5hLmZvY3VzKCkpKX1lbGVtZW50SXNGb2N1c2VkKGEpe3JldHVybiB0bCh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YX1u''@;'; put 'put ''Z1pvbmVJc1N0YWJsZUluQnJvd3Nlcigpe3JldHVybiB0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShhbSgpLCRsKCgpPT50bCh0aGlzLnBsYXRmb3JtSWQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSx4''@;'; put 'put ''cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaXNhYmxlZERhdGVzPXttaW5EYXRlOm5ldyBMZCgwLDAsMSksbWF4RGF0ZTpuZXcgTGQoOTk5OSwxMSwzMSl9LHRo''@;'; put 'put ''aXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9ImRkL01NL3kiLHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1xTCx0aGlzLmRlbGltaXRlcnM9WyIvIiwiLyJdLHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9YS5sb2NhbGVEYXRlRm9ybWF0LHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3Jt''@;'; put 'put ''YXQoKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7Y29uc3QgYT10aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQuZm9ybWF0O3JldHVybiBhWzBdK3RoaXMuZGVsaW1pdGVyc1swXSthWzFdK3RoaXMuZGVsaW1pdGVyc1sxXSthWzJdfXNldE1pbkRhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3Bs''@;'; put 'put ''aXQoIi0iKS5tYXAodj0+cGFyc2VJbnQodiwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBMZChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBMZCgwLDAsMSl9c2V0TWF4RGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIp''@;'; put 'put ''Lm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IExkKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IExkKDk5OTksMTEsMzEpfXNldFJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPXRoaXMudmFsaWRhdGVEYXRlUmFu''@;'; put 'put ''Z2VPcHRpb25zKGEpO3RoaXMuZGF0ZVJhbmdlT3B0aW9ucz1kfHxbXX1nZXRSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlUmFuZ2VPcHRpb25zfXRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKXtpZihhKXtpZihpc05hTihhLmdldFRpbWUoKSkpcmV0dXJuIiI7Y29uc3QgZD1h''@;'; put 'put ''LmdldERhdGUoKSxoPWEuZ2V0TW9udGgoKSsxLGY9ZD45P2QudG9TdHJpbmcoKToiMCIrZCx2PWg+OT9oLnRvU3RyaW5nKCk6IjAiK2g7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PXFMP2YrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVs''@;'; put 'put ''bFllYXIoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1hRz92K3RoaXMuZGVsaW1pdGVyc1swXStmK3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6YS5nZXRGdWxsWWVhcigpK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXStmfXJldHVybiIifWdl''@;'; put 'put ''dERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7Y29uc3QgZD1hLm1hdGNoKGNaZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsdl09ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0''@;'; put 'put ''PT09cUw/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWFHP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKHYsaCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsdil9dmFsaWRhdGVEYXRlUmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9''@;'; put 'put ''W107cmV0dXJuIGE/LmZvckVhY2goaD0+ezIhPT1oPy52YWx1ZT8ubGVuZ3RofHwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaD8udmFsdWVbMF0pfHwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaD8udmFs''@;'; put 'put ''dWVbMV0pfHxkLnB1c2goaCl9KSxkfWluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl7Y29uc3QgYT10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PW9aZS50ZXN0KGEpP3FMOnNaZS50ZXN0KGEpP2FHOmha''@;'; put 'put ''ZSx0aGlzLmV4dHJhY3REZWxpbWl0ZXJzKCl9ZXh0cmFjdERlbGltaXRlcnMoKXtpZih0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0KXtjb25zdCBkPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQucmVwbGFjZShkWmUsIiIpLnNwbGl0KGxaZSk7ZCYmND09PWQubGVuZ3RoP3RoaXMuZGVsaW1p''@;'; put 'put ''dGVycz1bZFsxXSxkWzJdXTpjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIGRhdGUgZm9ybWF0IHJlY2VpdmVkLiBEZWxpbWl0ZXJzIGV4dHJhY3RlZDogIixkKX19aXNWYWxpZE1vbnRoKGEpe3JldHVybiBhPi0xJiZhPDEyfWlzVmFsaWREYXRlKGEsZCxoKXtyZXR1cm4gaD4wJiZoPD1sZGUo''@;'; put 'put ''YSxkKX12YWxpZGF0ZUFuZEdldERhdGUoYSxkLGgpe2NvbnN0IGY9K2Esdj0rZC0xLE09K2g7aWYoIXRoaXMuaXNWYWxpZE1vbnRoKHYpfHwhdGhpcy5pc1ZhbGlkRGF0ZShmLHYsTSkpcmV0dXJuIG51bGw7Y29uc3QgST1mdW5jdGlvbiBnWmUoYyl7aWYoYz45OTk5fHxjPjEwMCYmYzw5OTl8''@;'; put 'put ''fGM8MTApcmV0dXJuLTE7aWYoYz45OTkpcmV0dXJuIGM7Y29uc3QgbD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk7bGV0IGQ9YysxMDAqTWF0aC5mbG9vcihsLzEwMCk7cmV0dXJuIGQ+bCsyMCYmKGQtPTEwMCksZH0oZik7cmV0dXJuLTEhPT1JP25ldyBEYXRlKEksdixNKTpudWxsfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihaeCkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFliPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkQ2hhbmdlPW5ldyBXbix0''@;'; put 'put ''aGlzLl9kaXJ0eUNoYW5nZT1uZXcgV259Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlydHlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlydHlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMu''@;'; put 'put ''X3RvdWNoZWRDaGFuZ2UubmV4dCgpfW1hcmtBc0RpcnR5KCl7dGhpcy5fZGlydHlDaGFuZ2UubmV4dCgpfXNldERpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQ9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksY2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLm9uU2VsZWN0RGF5PW5ldyBLcn1nZXQgZGF5Vmlldygpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9kYXlWaWV3fXNldCBkYXlWaWV3KGEpe3RoaXMuX2RheVZpZXc9YX1nZXQgZGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMuZGF5Vmlldy5pc1NlbGVjdGVkP3RoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0ZWRMYWJlbCx7RlVM''@;'; put 'put ''TF9EQVRFOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9KTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfWdldCBpc1JhbmdlU3RhcnREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5''@;'; put 'put ''Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1nZXQgaXNSYW5nZUVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBp''@;'; put 'put ''Y2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWhvdmVyTGlzdGVuZXIoKXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8KHRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9b25EYXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5kYXlWaWV3LmlzRGlz''@;'; put 'put ''YWJsZWR8fHRoaXMub25TZWxlY3REYXkuZW1pdCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpfWlzSW5SYW5nZSgpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2Rh''@;'; put 'put ''dGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT90aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0FmdGVyKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQmVmb3JlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZEVuZERheSk6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0FmdGVyKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vy''@;'; put 'put ''dmljZS5zZWxlY3RlZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQmVmb3JlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkRGF5LCEwKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1oKSxHZShpcykpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5ob3Zlckxpc3RlbmVyKCl9KSwyJmEmJlRyKCJkYXkiLCEwKX0saW5wdXRz''@;'; put 'put ''OntkYXlWaWV3OltObi5Ob25lLCJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxvdXRwdXRzOntvblNlbGVjdERheToic2VsZWN0RGF5In0sZGVjbHM6Mix2YXJzOjE5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXktYnRuIiwzLCJjbGljayIsImZvY3VzIl1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VsZWN0RGF5KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25EYXlWaWV3Rm9jdXMoKX0pLE9lKDEpLGhlKCkpLDImYSYmKFRyKCJpcy10b2RheSIsZC5kYXlWaWV3''@;'; put 'put ''LmlzVG9kYXlzRGF0ZSkoImlzLWV4Y2x1ZGVkIixkLmRheVZpZXcuaXNFeGNsdWRlZCkoImlzLWRpc2FibGVkIixkLmRheVZpZXcuaXNEaXNhYmxlZCkoImlzLXNlbGVjdGVkIixkLmRheVZpZXcuaXNTZWxlY3RlZCkoImluLXJhbmdlIixkLmlzSW5SYW5nZSgpKSgiaXMtc3RhcnQtcmFuZ2Ui''@;'; put 'put ''LGQuaXNSYW5nZVN0YXJ0RGF5KSgiaXMtZW5kLXJhbmdlIixkLmlzUmFuZ2VFbmREYXkpLGhyKCJ0YWJpbmRleCIsZC5kYXlWaWV3LnRhYkluZGV4KSgiYXJpYS1jdXJyZW50IixkLmRheVZpZXcuaXNUb2RheXNEYXRlPyJkYXRlIjoiZmFsc2UiKSgiYXJpYS1sYWJlbCIsZC5kYXlTdHJpbmcp''@;'; put 'put ''KCJhcmlhLXNlbGVjdGVkIixkLmRheVZpZXcuaXNTZWxlY3RlZCksZmUoKSxEcigiICIsZC5kYXlWaWV3LmRheU1vZGVsLmRhdGUsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHVkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMuX2xvY2FsZUhl''@;'; put 'put ''bHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPXYsdGhpcy5fZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuX3RvZ2dsZVNlcnZpY2U9SSx0''@;'; put 'put ''aGlzLl9zdWJzPVtdLHRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKSx0aGlzLmluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVEYXlzfWdldCBjYWxlbmRhcigpe3JldHVybiB0aGlzLl9kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJ9Z2V0IHNlbGVjdGVkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheX1nZXQgc2VsZWN0ZWRFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVk''@;'; put 'put ''RW5kRGF5fWdldCBmb2N1c2VkRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5fWdldCB0b2RheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2Vy''@;'; put 'put ''dmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25LZXlEb3duKGEpe2lmKGEmJnRoaXMuZm9jdXNlZERheSlzd2l0Y2goSTIoYS5rZXkpKXtjYXNlIGdhLkFycm93VXA6YS5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtNyk7YnJlYWs7Y2FzZSBnYS5BcnJvd0Rvd246YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSg3KTticmVhaztjYXNlIGdhLkFycm93''@;'; put 'put ''TGVmdDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC0xKTticmVhaztjYXNlIGdhLkFycm93UmlnaHQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgx''@;'; put 'put ''KX19c2V0U2VsZWN0ZWREYXkoYSl7Y29uc3QgZD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9ucyxoPXRoaXMudXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSk7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChoLHtl''@;'; put 'put ''bWl0RXZlbnQ6IWR9KSxkfHwodGhpcy5fZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMudmFsaWRhdGVBbmRDbG9zZURhdGVQaWNrZXIoKSl9aW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKXt0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LmRpc3BsYXllZENhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNhbGVuZGFyVmlld01v''@;'; put 'put ''ZGVsLnVwZGF0ZUZvY3VzYWJsZURheShhKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzT25DYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9KSks''@;'; put 'put ''dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5yZWZyZXNoQ2FsZW5kYXJWaWV3LnN1YnNjcmliZSgoKT0+e3RoaXMucmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl9KSl9dmFsaWRhdGVBbmRDbG9zZURhdGVQaWNrZXIoKXsodGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fHwhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkmJih0aGlzLl90b2dnbGVTZXJ2aWNlLm9wZW49ITEpfXVwZGF0ZUNhbGVuZGFyVmlld01vZGFsKGEpe2NvbnN0IGQ9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheXx8bnVsbCxoPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5p''@;'; put 'put ''c1JhbmdlUGlja2VyO2xldCBmPXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl8fG51bGw7cmV0dXJuIGg/IWR8fGQmJmZ8fGQmJmE/LmlzQmVmb3JlKGQpPyh0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KGEpLGYmJihmPXZvaWQgMCx0aGlzLmNh''@;'; put 'put ''bGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGYpKSk6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShhKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5KGEpLGg/e3N0YXJ0RGF0ZTp0aGlzLmNhbGVuZGFyVmlld01v''@;'; put 'put ''ZGVsLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheX06dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheX1yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRGF5''@;'; put 'put ''KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVk''@;'; put 'put ''RW5kRGF5KX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IHlaZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5zZWxlY3RlZEVuZERheSx0aGlzLmZvY3VzZWREYXksdGhpcy50b2RheSx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmZpcnN0RGF5T2ZXZWVrLHRoaXMuX2RhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFp4KSxHZShNaCksR2UoU20pLEdlKGNnKSxHZShKaSksR2UoWWIpLEdlKHNjKSl9LGMuXHUwMjc1Y21wPVZy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jYWxlbmRhciJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KX0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbInJvbGUiLCJwcmVzZW50YXRpb24i''@;'; put 'put ''LDEsImNhbGVuZGFyLXRhYmxlIl0sWzEsImNhbGVuZGFyLXJvdyIsIndlZWtkYXlzIl0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwgd2Vla2RheSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFyLWNl''@;'; put 'put ''bGwiLCJ3ZWVrZGF5Il0sWzEsImNhbGVuZGFyLXJvdyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5kYXItY2VsbCJdLFszLCJzZWxlY3REYXkiLCJjbHJEYXlWaWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwi''@;'; put 'put ''dGFibGUiLDApKDEsInRyIiwxKSxndCgyLFROZSwzLDIsInRoIiwyKSxoZSgpLGd0KDMsa05lLDIsMSwidHIiLDMpLGhlKCkpLDImYSYmKGZlKDIpLHhlKCJuZ0Zvck9mIixkLmxvY2FsZURheXMpLGZlKCkseGUoIm5nRm9yT2YiLGQuY2FsZW5kYXJWaWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbbnMsY2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxYTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWEsdGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9ITEsYSYmKHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPXVaZS50ZXN0KGEuZGVm''@;'; put 'put ''YXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRoPDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cih2cykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9HPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcsaWUs''@;'; put 'put ''dWUseWUsRWUsamUpe3N1cGVyKGEsWXgsZCx2LGYsaCksdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmNvbnRyb2w9dix0aGlzLmNvbnRhaW5lcj1NLHRoaXMuZGF0ZUlPU2VydmljZT1JLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPUcsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNl''@;'; put 'put ''cnZpY2U9aWUsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXVlLHRoaXMucGxhdGZvcm1JZD15ZSx0aGlzLmZvY3VzU2VydmljZT1FZSx0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2U9amUsdGhpcy5pbmRleD0xfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJv''@;'; put 'put ''bFNlcnZpY2U/dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpc2FibGVkfHwhIXRoaXMuY29udHJvbD8uY29udHJvbD8uZGlzYWJsZWQ6bnVsbH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2Uuc2V0RGlz''@;'; put 'put ''YWJsZWQocWYoYSkpfWdldCBwbGFjZWhvbGRlclRleHQoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcj90aGlzLnBsYWNlaG9sZGVyOnRoaXMuZGF0ZUlPU2VydmljZS5wbGFjZWhvbGRlclRleHR9Z2V0IGlucHV0VHlwZSgpe3JldHVybiB0bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnVzaW5n''@;'; put 'put ''TmF0aXZlRGF0ZXBpY2tlcigpPyJkYXRlIjoidGV4dCJ9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMucG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5n''@;'; put 'put ''ZXMoKSx0aGlzLmxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvclRvdWNoQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yRGlydHlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5wcm9jZXNzSW5pdGlh''@;'; put 'put ''bElucHV0cygpfXNldEZvY3VzU3RhdGVzKCl7dGhpcy5zZXRGb2N1cyghMCl9dHJpZ2dlclZhbGlkYXRpb24oKXtzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuc2V0Rm9jdXMoITEpfW9uVmFsdWVDaGFuZ2UoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVl''@;'; put 'put ''RnJvbURhdGVTdHJpbmcoYS52YWx1ZSk7aWYodGhpcy51c2luZ0NsYXJpdHlEYXRlcGlja2VyKCkmJmQpdGhpcy51cGRhdGVEYXRlKGQsITApO2Vsc2UgaWYodGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKSl7Y29uc3RbaCxmLHZdPWEudmFsdWUuc3BsaXQoIi0iKTt0aGlzLnVwZGF0ZURh''@;'; put 'put ''dGUobmV3IERhdGUoK2gsK2YtMSwrdiksITApfWVsc2UgdGhpcy5lbWl0RGF0ZU91dHB1dChudWxsKX1kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKXtyZXR1cm4hIXRoaXMuY29udHJvbH1zZXREYXRlKGEpeyJzdHJpbmciPT10eXBlb2YgYSYmKGE9bmV3IERhdGUoYSkpLHRoaXMucHJldmlv''@;'; put 'put ''dXNEYXRlQ2hhbmdlIT09YSYmdGhpcy51cGRhdGVEYXRlKGEpLHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlfHwodGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWU9YSl9dXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5p''@;'; put 'put ''c0VuYWJsZWR9dXNpbmdOYXRpdmVEYXRlcGlja2VyKCl7cmV0dXJuIXRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1zZXRGb2N1cyhhKXt0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9YSl9cG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250''@;'; put 'put ''YWluZXJDb21wb25lbnQoKXt0aGlzLmNvbnRhaW5lcnx8KHRoaXMuZGF0ZUlPU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihjZyksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoTWgpLHRoaXMuZGF0ZXBpY2tlckVu''@;'; put 'put ''YWJsZWRTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFhMKSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoWWIpKX1wcm9jZXNzSW5pdGlhbElucHV0cygpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCk/''@;'; put 'put ''dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0aGlzLmNvbnRyb2wudmFsdWUpKTp0aGlzLnVwZGF0ZURhdGUodGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWUpfXVwZGF0ZURhdGUoYSxkPSExKXtjb25zdCBoPXRoaXMuZ2V0''@;'; put 'put ''VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKTtpZihkP3RoaXMuZW1pdERhdGVPdXRwdXQoaCk6dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9aCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZSl7Y29uc3QgZj1oP25ldyBMZChoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgp''@;'; put 'put ''KTpudWxsO3RoaXMudXBkYXRlRGF5TW9kZWwoZil9dGhpcy51cGRhdGVJbnB1dChoKX11cGRhdGVJbnB1dChhKXtpZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSk7dGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8oYS5zZXRN''@;'; put 'put ''aW51dGVzKGEuZ2V0TWludXRlcygpLWEuZ2V0VGltZXpvbmVPZmZzZXQoKSksdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlQXNEYXRlIixhKSk6dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmZCE9PXRoaXMuY29udHJvbC52YWx1''@;'; put 'put ''ZT90aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZShkKTp0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLGQpLHRoaXMudmFsaWRhdGVEYXRlUmFuZ2UoKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVF''@;'; put 'put ''bGVtZW50LCJ2YWx1ZSIsIiIpfWdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSk7cmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFs''@;'; put 'put ''dWVGcm9tRGF0ZVN0cmluZyhkKX1yZXR1cm4gbnVsbH1lbWl0RGF0ZU91dHB1dChhKXshZnVuY3Rpb24gbVplKGMsbCl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiZsIGluc3RhbmNlb2YgRGF0ZSYmYy5nZXRGdWxsWWVhcigpPT09bC5nZXRGdWxsWWVhcigpJiZjLmdldE1vbnRoKCk9PT1s''@;'; put 'put ''LmdldE1vbnRoKCkmJmMuZ2V0RGF0ZSgpPT09bC5nZXREYXRlKCl9KGEsdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UpPyh0aGlzLmRhdGVDaGFuZ2UuZW1pdChhKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1hKTohYSYmdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UmJih0aGlzLmRhdGVDaGFuZ2Uu''@;'; put 'put ''ZW1pdChudWxsKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1udWxsKX1saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCk/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKCRsKCgpPT4hdGhpcy5kYXRlcGlja2Vy''@;'; put 'put ''Rm9jdXNTZXJ2aWNlLmVsZW1lbnRJc0ZvY3VzZWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSkpLnN1YnNjcmliZShhPT50aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEpKSk6bnVsbH1saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlD''@;'; put 'put ''aGFuZ2VzKCl7cmV0dXJuIHRoaXMudXNlclNlbGVjdGVkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnVwZGF0ZURhdGUoYT8udG9EYXRlKCksITApKX1saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2UucGlw''@;'; put 'put ''ZSgkbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpKX1saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpcnR5Q2hhbmdl''@;'; put 'put ''LnBpcGUoJGwoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc0RpcnR5KCkpfWxpc3RlbkZvcklucHV0UmVmb2N1cygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eUNoYW5nZS5waXBlKCRsKGE9PiEhYSYmIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfXZhbGlkYXRlRGF0ZVJhbmdlKCl7''@;'; put 'put ''aWYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcil7Y29uc3QgYT10aGlzLm5nQ29udHJvbFNlcnZpY2U/LmNvbnRyb2wsZD10aGlzLm5nQ29udHJvbFNlcnZpY2U/LmFkZGl0aW9uYWxDb250cm9sczt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERh''@;'; put 'put ''eT8uaXNCZWZvcmUodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXksITApJiYoYT8uaGFzRXJyb3IoInJhbmdlIil8fGQ/LnNvbWUoZj0+Zi5oYXNFcnJvcigicmFuZ2UiKSkpJiYoYS5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9''@;'; put 'put ''KSxkLmZvckVhY2goZj0+e2Y/LmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRG8pLEdlKERzKSxHZShKaSksR2UoRW8pLEdlKGQxLDEwKSxHZShDcygo''@;'; put 'put ''KT0+WXgpLDgpLEdlKGNnLDgpLEdlKE1oLDgpLEdlKFhMLDgpLEdlKFliLDgpLEdlKGlvKSxHZShVYiw4KSxHZShTbSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGQuc2V0Rm9jdXNTdGF0ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKG9wKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksaHIoInBs''@;'; put 'put ''YWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSl9LGlucHV0czp7cGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixkaXNhYmxlZDoiZGlzYWJsZWQifSxmZWF0dXJlczpbd2FdfSksY30pKCksZGRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvR3tjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcighMSksdGhpcy5pbnB1dFdpZHRoPTEzfXNldCBkYXRlKGEpe3RoaXMuc2V0RGF0ZShhKX1nZXQgaW5wdXRTaXplKCl7cmV0dXJuIHRoaXMuaW5wdXRXaWR0aH1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Q2hhbmdlfXRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlk''@;'; put 'put ''aXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfXVwZGF0ZURheU1vZGVsKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZEVuZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Uuc2VsZWN0ZWRFbmREYXk9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckVuZERhdGUiLCIiXV0saG9z''@;'; put 'put ''dFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigic2l6ZSIsZC5pbnB1dFNpemUpLFRyKCJjbHItaW5wdXQiLCEwKSl9LGlucHV0czp7aW5wdXRXaWR0aDoiaW5wdXRXaWR0aCIsZGF0ZTpbTm4uTm9uZSwiY2xyRW5kRGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0''@;'; put 'put ''ZUNoYW5nZToiY2xyRW5kRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltkYShbU21dKSx3YV19KSxjfSkoKSxKTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgb0d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpfXNldCBkYXRlKGEpe3RoaXMu''@;'; put 'put ''c2V0RGF0ZShhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKSx0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpfWdl''@;'; put 'put ''dCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZERheT1hfXRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9y''@;'; put 'put ''cyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIi''@;'; put 'put ''XV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItaW5wdXQiLCEwKX0saW5wdXRzOntkYXRlOltObi5Ob25lLCJjbHJEYXRlIiwiZGF0ZSJdLG1pbjoibWluIixtYXg6Im1heCJ9LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckRhdGVDaGFuZ2UifSxm''@;'; put 'put ''ZWF0dXJlczpbZGEoW1NtXSksd2FdfSksY30pKCksaGRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvR3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcighMSksdGhpcy5pbnB1dFdpZHRoPTEzfXNldCBkYXRlKGEpe3RoaXMuc2V0RGF0ZShh''@;'; put 'put ''KX1nZXQgaW5wdXRTaXplKCl7cmV0dXJuIHRoaXMuaW5wdXRXaWR0aH1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlfXRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlj''@;'; put 'put ''a2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfXVwZGF0ZURheU1vZGVsKGEpe3Ro''@;'; put 'put ''aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMu''@;'; put 'put ''XHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclN0YXJ0RGF0ZSIsIiJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJzaXplIixkLmlucHV0U2l6ZSksX2QoInRleHQtYWxpZ24iLCJyaWdodCIpLFRyKCJjbHItaW5wdXQiLCEw''@;'; put 'put ''KSl9LGlucHV0czp7aW5wdXRXaWR0aDoiaW5wdXRXaWR0aCIsZGF0ZTpbTm4uTm9uZSwiY2xyU3RhcnREYXRlIiwiZGF0ZSJdfSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJTdGFydERhdGVDaGFuZ2UifSxmZWF0dXJlczpbZGEoW1NtXSksd2FdfSksY30pKCksR2I9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpb249VGRbImJvdHRvbS1sZWZ0Il0sdGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifWdldCBpc0RheVZpZXcoKXtyZXR1cm4iREFZVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiJZRUFSVklFVyI9PT10aGlz''@;'; put 'put ''Ll9jdXJyZW50Vmlld31nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4iTU9OVEhWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9Ik1PTlRIVklFVyJ9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJZRUFSVklF''@;'; put 'put ''VyJ9Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxmZGU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT12LHRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncz1NLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4PXRoaXMuY2FsZW5kYXJNb250aEluZGV4fWdldCBtb250aE5hbWVzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzV2lkZX1nZXQgY2FsZW5kYXJNb250aEluZGV4KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aH1nZXQgY2FsZW5kYXJFbmRNb250aEluZGV4KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Z2V0IGN1cnJlbnRDYWxlbmRhclllYXIoKXtyZXR1cm4obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0IGN1cnJlbnRDYWxlbmRhck1vbnRoKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNb250aCgpfWdldElzUmFuZ2VTdGFydE1vbnRoKGEp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1v''@;'; put 'put ''bnRofWdldElzUmFuZ2VFbmRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJl''@;'; put 'put ''Zil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9STIoYS5rZXkpO2Q9PT1nYS5BcnJvd1VwJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4xPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgtPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0Nl''@;'; put 'put ''bGwodGhpcy5fZWxSZWYpKTpkPT09Z2EuQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4Kz0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09''@;'; put 'put ''PWdhLkFycm93UmlnaHQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDExPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrKyx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1nYS5BcnJvd0xlZnQmJnRoaXMu''@;'; put 'put ''X2ZvY3VzZWRNb250aEluZGV4PjAmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgtLSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpfX1pc1NlbGVjdGVkKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Uuc2VsZWN0ZWREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFy''@;'; put 'put ''JiZhPT09dGhpcy5jYWxlbmRhckVuZE1vbnRoSW5kZXh9b25Ib3ZlcihhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoPWF9Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2Vy''@;'; put 'put ''dmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9bmV4dFllYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dFllYXIoKX1wcmV2aW91c1llYXIoKXt0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNZZWFyKCl9Y3VycmVudFllYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1vbnRoKCl9aXNJblJhbmdlKGEpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlz''@;'; put 'put ''Ll9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT90aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE+dGhpcy5fZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5tb250aHx8dGhpcy5jYWxlbmRhclllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFy''@;'; put 'put ''PHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmKHRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoWngpLEdlKE1oKSxHZShTbSksR2UoSmkpLEdlKEdiKSxHZShp''@;'; put 'put ''cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9uIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1''@;'; put 'put ''cm4gZC5vbktleURvd24oZil9KSwyJmEmJlRyKCJtb250aHBpY2tlciIsITApfSxkZWNsczoxMyx2YXJzOjEwLGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciIsImluLW1vbnRocGlja2VyIl0sWzEsInllYXItdmlldy1zd2l0Y2hlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXIt''@;'; put 'put ''YnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwi''@;'; put 'put ''ZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJtb250aHMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biBtb250aCIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1yYW5nZSIsImluLXJhbmdlIiwi''@;'; put 'put ''aXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGgiLDMsImNsaWNrIiwibW91c2VlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwi''@;'; put 'put ''ZGl2IiwxKSgyLCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxPZSgzKSxoZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c1llYXIoKX0pLEd0''@;'; put 'put ''KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRZZWFyKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxkZSg5LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0WWVh''@;'; put 'put ''cigpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCkoKSxkZSgxMSwiZGl2Iiw4KSxndCgxMixETmUsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihmZSgyKSxocigiYXJpYS1sYWJlbCIsZC55ZWFyQXR0clN0cmluZykoInRpdGxlIixkLnllYXJBdHRyU3RyaW5nKSxmZSgpLERyKCIg''@;'; put 'put ''IixkLmNhbGVuZGFyWWVhciwiICIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJhcmlh''@;'; put 'put ''LWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tl''@;'; put 'put ''ck5leHRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKDIpLHhlKCJuZ0Zvck9mIixkLm1vbnRoTmFtZXMpKX0sZGVwZW5kZW5jaWVzOltucyxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgV3h7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy55ZWFyPWwsdGhpcy55ZWFyUmFuZ2U9W10sdGhpcy5nZW5lcmF0ZVllYXJSYW5nZSgpfWdldCBtaWRkbGVZZWFyKCl7cmV0dXJuIHRoaXMueWVhclJhbmdlW01hdGguZmxvb3IodGhpcy55ZWFyUmFuZ2UubGVuZ3RoLzIpXX1uZXh0RGVjYWRlKCl7cmV0dXJuIG5ldyBX''@;'; put 'put ''eCh0aGlzLnllYXIrMTApfXByZXZpb3VzRGVjYWRlKCl7cmV0dXJuIG5ldyBXeCh0aGlzLnllYXItMTApfWN1cnJlbnREZWNhZGUoKXtyZXR1cm4gbmV3IFd4KChuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSl9aW5SYW5nZShsKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2UuaW5kZXhPZihsKT4tMX1n''@;'; put 'put ''ZW5lcmF0ZVllYXJSYW5nZSgpe2NvbnN0IGE9dGhpcy55ZWFyLXRoaXMueWVhciUxMDt0aGlzLnllYXJSYW5nZT10aGlzLmdlbmVyYXRlUmFuZ2UoYSxhKzEwKX1nZW5lcmF0ZVJhbmdlKGwsYSl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDphLWx9LChkLGgpPT5oK2wpfX1sZXQgZ2RlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnll''@;'; put 'put ''YXJSYW5nZU1vZGVsPW5ldyBXeCh0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IHNlbGVjdGVkU3RhcnRZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcn1nZXQgc2VsZWN0ZWRF''@;'; put 'put ''bmRZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWlzQ3VycmVudENhbGVuZGFyWWVhcihh''@;'; put 'put ''KXtyZXR1cm4gYT09PShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXRJc1JhbmdlU3RhcnRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcn1nZXRJ''@;'; put 'put ''c1JhbmdlRW5kWWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2Vydmlj''@;'; put 'put ''ZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPUkyKGEua2V5KTtkPT09Z2EuQXJyb3dVcD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoLTIpKTpkPT09Z2EuQXJyb3dEb3duPyhhLnByZXZlbnREZWZhdWx0KCks''@;'; put 'put ''dGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgyKSk6ZD09PWdhLkFycm93UmlnaHQ/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09Z2EuQXJyb3dMZWZ0JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoLTEp''@;'; put 'put ''KX19Y2hhbmdlWWVhcihhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlWWVhcihhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9b25Ib3ZlcihhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZFllYXI9YX1wcmV2aW91c0Rl''@;'; put 'put ''Y2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VN''@;'; put 'put ''b2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJlbnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRh''@;'; put 'put ''YkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1v''@;'; put 'put ''ZGVsLmluUmFuZ2UodGhpcy5zZWxlY3RlZEVuZFllYXIpP3RoaXMuc2VsZWN0ZWRFbmRZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwubWlkZGxlWWVhciksdGhpcy5fZm9jdXNlZFllYXI9PT1hPzA6LTF9aXNJblJhbmdlKGEpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXImJnRoaXMuc2VsZWN0ZWRFbmRZZWFyP2E+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmYTx0aGlzLnNlbGVjdGVkRW5kWWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs''@;'; put 'put ''ZWN0ZWREYXk/LnllYXJ8fHRoaXMuc2VsZWN0ZWRFbmRZZWFyKSYmYT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkWWVhcil9Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5Vmll''@;'; put 'put ''dygpfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9kZWwubmV4dERl''@;'; put 'put ''Y2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNaCksR2UoR2IpLEdlKFNt''@;'; put 'put ''KSxHZShKaSksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9uIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJlRyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjEzLHZhcnM6OSxjb25zdHM6W1sxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVh''@;'; put 'put ''cnBpY2tlci10cmlnZ2VyIiwieWVhci1yYW5nZSIsMywiY2xpY2siXSxbMSwieWVhci1zd2l0Y2hlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwi''@;'; put 'put ''ZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJ5ZWFycyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIHllYXIiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlz''@;'; put 'put ''LXRvZGF5IiwiY2xpY2siLCJtb3VzZWVudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIiwibW91c2VlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwiZGl2''@;'; put 'put ''IiwxKSgyLCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb0RheVZpZXcoKX0pLE9lKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzRGVjYWRlKCl9KSxHdCg2''@;'; put 'put ''LCJjZHMtaWNvbiIsNSksaGUoKSxkZSg3LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50RGVjYWRlKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxkZSg5LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0RGVj''@;'; put 'put ''YWRlKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgpLGd0KDEyLElOZSwyLDEyLCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDMpLFV1KCIgIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZVswXSwiIC0gIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5n''@;'; put 'put ''ZVtkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZS5sZW5ndGgtMV0sIiAiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxmZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZp''@;'; put 'put ''b3VzRGVjYWRlKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgyKSx4ZSgibmdGb3JPZiIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UpKX0sZGVwZW5kZW5jaWVzOltucyxy''@;'; put 'put ''c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1oLHRoaXMuY29tbW9uU3Ry''@;'; put 'put ''aW5ncz1mfWdldCBtb250aEF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQse0NBTEVOREFSX01PTlRIOnRoaXMuY2FsZW5kYXJNb250aH0pfWdldCB5ZWFyQXR0clN0cmlu''@;'; put 'put ''Zygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMuY2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJNb250aCgpe3JldHVybiB0aGlzLl9s''@;'; put 'put ''b2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc0FiYnJldmlhdGVkW3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aF19Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5k''@;'; put 'put ''YXIueWVhcn1jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb01vbnRoVmlldygpfWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5leHRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5tb3ZlVG9OZXh0TW9udGgoKX1wcmV2aW91c01vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzTW9udGgoKX1jdXJyZW50TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1vbnRoKCl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEdiKSxHZShNaCksR2UoWngpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXlwaWNrZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9uIl0saG9zdFZh''@;'; put 'put ''cnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXlwaWNrZXIiLCEwKX0sZGVjbHM6MTgsdmFyczoxNCxjb25zdHM6W1sxLCJjbHItc3Itb25seSJdLFsxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwi''@;'; put 'put ''Y2FsZW5kYXItYnRuIiwibW9udGhwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRh''@;'; put 'put ''ci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDAp''@;'; put 'put ''LE9lKDEpLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvTW9udGhWaWV3KCl9KSxPZSg1KSxoZSgpLGRlKDYsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNo''@;'; put 'put ''YW5nZVRvWWVhclZpZXcoKX0pLE9lKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDUpKDksImJ1dHRvbiIsNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzTW9udGgoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSxkZSgxMSwiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudE1vbnRoKCl9KSxHdCgxMiwiY2RzLWljb24iLDgpLGhlKCksZGUoMTMsImJ1dHRvbiIsNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHRNb250aCgpfSksR3QoMTQsImNkcy1pY29uIiw5KSxoZSgpKCkoKSxHdCgxNSwiY2xyLWNh''@;'; put 'put ''bGVuZGFyIiksZGUoMTYsImRpdiIsMCksT2UoMTcpLGhlKCkpLDImYSYmKGZlKCksd3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGZlKDMpLGhyKCJhcmlhLWxhYmVsIixkLm1vbnRoQXR0clN0cmluZykoInRpdGxlIixkLm1vbnRoQXR0clN0cmluZyksZmUoKSxE''@;'; put 'put ''cigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksZmUoKSxocigiYXJpYS1sYWJlbCIsZC55ZWFyQXR0clN0cmluZykoInRpdGxlIixkLnllYXJBdHRyU3RyaW5nKSxmZSgpLERyKCIgIixkLmNhbGVuZGFyWWVhciwiICIpLGZlKDIpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGhyKCJ0''@;'; put 'put ''aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0''@;'; put 'put ''TW9udGgpLGZlKDMpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCkpfSxkZXBlbmRlbmNpZXM6W3JzLHVkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhp''@;'; put 'put ''cy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Zn1hcHBseSgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5''@;'; put 'put ''JiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8odGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHtzdGFydERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmRhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX0pLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKTohdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJih0aGlz''@;'; put 'put ''LmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1jYW5jZWwo''@;'; put 'put ''KXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5yZXNldFNlbGVjdGVkRGF5KCksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSxHZShzYyksR2UoTWgpLEdlKFliKSl9LGMuXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlcGlja2VyLWFjdGlvbnMiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRlcGlja2VyLWFjdGlvbnMiLCEwKX0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYnRuIiwiYnRuLW91dGxp''@;'; put 'put ''bmUiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNhbmNlbCgpfSksT2UoMSksaGUoKSxkZSgyLCJidXR0b24iLDEp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hcHBseSgpfSksT2UoMyksaGUoKSksMiZhJiYoZmUoKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5jYW5jZWwpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLmFwcGx5KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHlkZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLmRhdGVJT1NlcnZpY2U9Zn1nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4gdGhpcy52aWV3''@;'; put 'put ''TWFuYWdlclNlcnZpY2UuaXNNb250aFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNZZWFyVmlld31nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzRGF5Vmlld31nZXQgaGFzUmFuZ2VPcHRpb25zKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT8uaXNSYW5nZVBpY2tlciYmISF0aGlzLmRhdGVSYW5nZU9wdGlvbnM/Lmxlbmd0aH1nZXQgaGFzQWN0aW9uQnV0dG9ucygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zfWdldCBkYXRl''@;'; put 'put ''UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXRSYW5nZU9wdGlvbnMoKX1vblJhbmdlT3B0aW9uU2VsZWN0KGEpe2NvbnN0IGQ9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzBdKSxoPXRoaXMuZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVsxXSk7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHtzdGFydERhdGU6ZCxlbmREYXRlOmh9LHtlbWl0RXZlbnQ6IXRoaXMuaGFzQWN0aW9uQnV0dG9uc30pLHRo''@;'; put 'put ''aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1NwZWNpZmljTW9udGgoZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSxHZShHYiksR2UoTWgpLEdlKGNnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZGlhbG9nIl0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1tb2RhbCIsITApKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2Vy''@;'; put 'put ''RGlhbG9nTGFiZWwpLFRyKCJkYXRlcGlja2VyIiwhMCkoImhhcy1yYW5nZS1vcHRpb24iLGQuaGFzUmFuZ2VPcHRpb25zKSgiaGFzLWFjdGlvbi1idXR0b25zIixkLmhhc0FjdGlvbkJ1dHRvbnMpKX0sZmVhdHVyZXM6W2RhKFtTbV0pXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siY2FsZW5k''@;'; put 'put ''YXJWaWV3IiwiIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsxLCJjbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkYXRlcGlja2VyLXZpZXctbWFuYWdlciJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIi''@;'; put 'put ''LCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApIiwidGFiaW5kZXgiLCIwIiwzLCJrZXl1cC5lbnRlciIsImNsaWNrIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJmd0KDAsT05lLDUsMiwibmctY29udGFpbmVyIiwxKSgxLFZOZSw0LDQsIm5nLXRlbXBsYXRl''@;'; put 'put ''IixudWxsLDAsSWMpLDImYSl7Y29uc3QgaD1oYSgyKTt4ZSgibmdJZiIsZC5oYXNSYW5nZU9wdGlvbnMpKCJuZ0lmRWxzZSIsaCl9fSxkZXBlbmRlbmNpZXM6W25zLHlhLE4xLFFZLHRHLGZkZSxnZGUsbWRlLHZkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWXg9KCgpPT57Y2xhc3MgYyBl''@;'; put 'put ''eHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxpZSx1ZSx5ZSxFZSxqZSxxZSl7aWYoc3VwZXIocWUsRWUseWUsamUpLHRoaXMucmVuZGVyZXI9YSx0aGlzLmVsZW09ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1mLHRoaXMuZGF0''@;'; put 'put ''ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXYsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUksdGhpcy5jb21tb25TdHJpbmdzPUcsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9dWUsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPXllLHRoaXMubGF5b3V0U2Vy''@;'; put 'put ''dmljZT1FZSx0aGlzLm5nQ29udHJvbFNlcnZpY2U9amUsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9cWUsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChpZS5mb2N1c0NoYW5nZS5zdWJzY3JpYmUocnQ9Pnt0aGlzLmZvY3VzPXJ0fSkpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKGgub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PntNLm1hcmtBc1RvdWNoZWQoKX0pKSxmKXtjb25zdCBydD1kLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2YuaGFzQWN0aW9uQnV0dG9ucz1mLmlzUmFuZ2VQaWNrZXI9ImNsci1kYXRlLXJhbmdlLWNvbnRhaW5l''@;'; put 'put ''ciI9PT1ydH19c2V0IHNob3dBY3Rpb25CdXR0b25zKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJiFhP2NvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSByYW5nZSBwaWNrZXIgcmVxdWlyZXMgYWN0aW9uIGJ1dHRvbnMsIFtzaG93QWN0aW9uQnV0dG9u''@;'; put 'put ''c10gY2Fubm90IGJlIHR1cm5lZCBvZmYuIik6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9ucz1hfXNldCBjbHJQb3NpdGlvbihhKXthJiZUZFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPVRkW2FdKX1zZXQgcmFuZ2VPcHRpb25zKGEpe3Ro''@;'; put 'put ''aXMuZGF0ZUlPU2VydmljZS5zZXRSYW5nZU9wdGlvbnMoYSl9c2V0IG1pbihhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyPyh0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShhKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0''@;'; put 'put ''VmFsaWRhdGlvbigpLHRoaXMuY2xyRW5kRGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpKTpjb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgY29udGFpbmVyIFttaW5dIGlucHV0IG9ubHkgd29ya3MgZm9yIGRhdGUgcmFuZ2UgcGlja2Vycy4gVXNlIHRoZSBu''@;'; put 'put ''YXRpdmUgYG1pbmAgYXR0cmlidXRlL3Byb3BlcnR5IGZvciBzaW5nbGUtZGF0ZSBpbnB1dHMuIil9c2V0IG1heChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyPyh0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0''@;'; put 'put ''Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpLHRoaXMuY2xyRW5kRGF0ZUlucHV0Py50cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpKTpjb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgY29udGFpbmVyIFttYXhdIGlucHV0IG9ubHkgd29ya3MgZm9yIGRhdGUgcmFu''@;'; put 'put ''Z2UgcGlja2Vycy4gVXNlIHRoZSBuYXRpdmUgYG1heGAgYXR0cmlidXRlL3Byb3BlcnR5IGZvciBzaW5nbGUtZGF0ZSBpbnB1dHMuIil9c2V0IGFjdGlvbkJ1dHRvbihhKXt0aGlzLnRvZ2dsZUJ1dHRvbj1hfWdldCBwb3BvdmVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNl''@;'; put 'put ''cnZpY2UucG9zaXRpb259Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59Z2V0IGlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9Z2V0IGlzSW5wdXREYXRlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9s''@;'; put 'put ''JiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWR8fHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpc2FibGVkfWdldCBpc1JhbmdlUGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXJ9bmdBZnRl''@;'; put 'put ''clZpZXdJbml0KCl7dGhpcy5kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuaW5pdGlhbGl6ZUNhbGVuZGFyKCk6KHRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5yZXNldFNlbGVjdGVkRGF5KCkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRh''@;'; put 'put ''dGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl9cmV0dXJu''@;'; put 'put ''IHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZSh4Mih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChhKSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCks''@;'; put 'put ''dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfWRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5pc1JhbmdlUGlja2VyJiYodGhpcy5jbHJEYXRlSW5wdXQmJmNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0ZSBhbmQgY2xyRW5kRGF0ZSBpbnB1dHMiKSx0aGlzLmNsclN0YXJ0RGF0ZUlucHV0fHxjb25zb2xl''@;'; put 'put ''LmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgaW5wdXQiKSx0aGlzLmNsckVuZERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyRW5kRGF0''@;'; put 'put ''ZSBpbnB1dCIpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRW8pLEdlKEppKSxHZShzYyksR2UoTWgpLEdlKFhMKSxHZShZYiksR2UoY2cpLEdlKGlzKSxHZShVYiksR2UoR2IpLEdlKERkKSxHZShDcCw4KSxHZShmMSksR2Uoa2QpKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGUtY29udGFpbmVyIl0sWyJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsSkwsNSksYW8oaCxoZGUsNSksYW8oaCxkZGUsNSkpLDImYSl7''@;'; put 'put ''bGV0IGY7Q2koZj1TaSgpKSYmKGQuY2xyRGF0ZUlucHV0PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNsclN0YXJ0RGF0ZUlucHV0PWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNsckVuZERhdGVJbnB1dD1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoQk5l''@;'; put 'put ''LDUpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuYWN0aW9uQnV0dG9uPWguZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZGF0ZS1jb250YWluZXIiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5pc0lucHV0RGF0''@;'; put 'put ''ZURpc2FibGVkKSgiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGlucHV0czp7c2hvd0FjdGlvbkJ1dHRvbnM6InNob3dBY3Rpb25CdXR0b25zIixjbHJQb3NpdGlvbjoiY2xyUG9zaXRpb24iLHJhbmdlT3B0aW9uczoicmFuZ2VPcHRpb25zIixtaW46Im1p''@;'; put 'put ''biIsbWF4OiJtYXgifSxmZWF0dXJlczpbZGEoW0NoLFp4LERkLFViLGYxLGNnLE1oLFhMLFliLEdiLGtkXSksdmQoW29nXSksd2FdLG5nQ29udGVudFNlbGVjdG9yczp6TmUsZGVjbHM6MTQsdmFyczoxNSxjb25zdHM6W1siYWN0aW9uQnV0dG9uIiwiIl0sWzQsIm5nSWYiXSxbMSwiY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQt''@;'; put 'put ''Z3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjZGtUcmFwRm9jdXMiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Ny''@;'; put 'put ''b2xsVG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzEsImRhdGUtcmFuZ2Utc2VwYXJhdG9yIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwz''@;'; put 'put ''LCJkaXNhYmxlZCJdLFsic3RhdHVzIiwiaW5mbyIsInNoYXBlIiwiY2FsZW5kYXIiXSxbImNka1RyYXBGb2N1cyIsIiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJz''@;'; put 'put ''aGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2Eoak5lKSxZcigwKSxndCgxLFVOZSwxLDAsImxhYmVsIiwxKSxkZSgyLCJkaXYiLDIp''@;'; put 'put ''KDMsImRpdiIsMykoNCwiZGl2Iiw0KSxndCg1LFpOZSw1LDAsIm5nLWNvbnRhaW5lciIsMSksWXIoNiwxKSxndCg3LFdOZSwzLDEsImJ1dHRvbiIsNSkoOCxZTmUsMSwwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDYpLGhlKCksZ3QoOSxHTmUsMSwwLCJjZHMtaWNvbiIsNykoMTAs''@;'; put 'put ''JE5lLDEsMCwiY2RzLWljb24iLDgpLGhlKCksZ3QoMTEsS05lLDEsMCwibmctY29udGVudCIsMSkoMTIscU5lLDEsMCwibmctY29udGVudCIsMSkoMTMsWE5lLDEsMCwibmctY29udGVudCIsMSksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxUcigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgpLHhlKCJuZ0lmIixkLmlzUmFuZ2VQaWNrZXIpLGZlKDIpLHhlKCJuZ0lmIixkLmlzRW5hYmxlZCksZmUoKSx4ZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlbikoImNsclBv''@;'; put 'put ''cG92ZXJDb250ZW50QXQiLGQucG9wb3ZlclBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hv''@;'; put 'put ''d1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseWEsWmIsUHgsTngsSHgscnMsZHMseWRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxz''@;'; put 'put ''Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0ZUlPU2VydmljZT1hfXZhbGlkYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52YWx1ZSksaD10aGlzLmRhdGVJT1Nl''@;'; put 'put ''cnZpY2UuZGlzYWJsZWREYXRlcy5taW5EYXRlLnRvRGF0ZSgpLGY9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0RhdGUoKTtpZihkJiZkPGgpcmV0dXJue21pbjp7bWluOmgudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmQudG9Mb2NhbGVEYXRlU3RyaW5n''@;'; put 'put ''KCl9fTtpZihkJiZkPmYpcmV0dXJue21heDp7bWF4OmYudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fX1yZXR1cm4gbnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoY2csOCkpfSxjLlx1MDI3''@;'; put 'put ''NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl0sWyIiLCJjbHJTdGFydERhdGUiLCIiXSxbIiIsImNsckVuZERhdGUiLCIiXV0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTpoMCx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLGJaZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgseWgsRWIsTE9lLE9PZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEtMLEJ4LE8yLFZ4LEFz''@;'; put 'put ''LGF1LG9kZV19KSxjfSkoKTtuZXcgTXQoIkNsckZpbGVNZXNzYWdlc1RlbXBsYXRlQ29udGV4dCIpO2xldCB3WmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKFBPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1''@;'; put 'put ''MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEFzLGF1LGF1XX0pLGN9KSgpLGJkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcih2LGQsYSxoKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT12LHRo''@;'; put 'put ''aXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoTT0+dGhpcy5mb2N1cz1NKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERkKSxHZShDcCw4KSxHZShmMSksR2UoVWIpLEdlKGtkKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsX2RlLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuaW5wdXQ9Zi5maXJzdCl9fSxob3N0''@;'; put 'put ''VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLWZvcm0tY29udHJvbC1yZWFkb25seSIsZC5p''@;'; put 'put ''bnB1dC5yZWFkb25seSkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtVYixrZCxmMSxDaCxEZF0pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6blZlLGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5n''@;'; put 'put ''Q2xhc3MiXSxbMSwiY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsxLCJjbHItaW5wdXQtZ3JvdXAtYWN0aW9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJz''@;'; put 'put ''aGFwZSIsIm1pbnVzIiwic2l6ZSIsInNtIl0sWzEsImNsci1udW1iZXItaW5wdXQtc2VwYXJhdG9yIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwic20iXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIs''@;'; put 'put ''ImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJz''@;'; put 'put ''dGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7MSZhJiYoc2EodFZlKSxZcigwKSxndCgxLHJWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiZGl2IiwzKSxZcig1LDEpLGRlKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcERv''@;'; put 'put ''d24oKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLEd0KDksImRpdiIsNyksZGUoMTAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBVcCgpfSksR3QoMTEsImNkcy1pY29uIiw4KSxoZSgpKCkoKSxndCgxMixpVmUsMSwwLCJjZHMtaWNvbiIs''@;'; put 'put ''OSkoMTMsYVZlLDEsMCwiY2RzLWljb24iLDEwKSxoZSgpLGd0KDE0LG9WZSwxLDAsIm5nLWNvbnRlbnQiLDApKDE1LHNWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDE2LGxWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQo''@;'; put 'put ''KSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksVHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoMykseGUoImRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpLGZlKDMpLHhlKCJkaXNhYmxlZCIsbnVsbD09ZC5jb250cm9s''@;'; put 'put ''P251bGw6ZC5jb250cm9sLmRpc2FibGVkKSxmZSgyKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93''@;'; put 'put ''VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5YSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksX2RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBDN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7aWYoc3VwZXIoZCxiZGUsaCxmLHYsTSksdGhpcy5mb2N1c1NlcnZpY2U9YSx0aGlzLmNv''@;'; put 'put ''bnRyb2w9Zix0aGlzLmVsPU0sdGhpcy5pbmRleD0xLCFhKXRocm93IG5ldyBFcnJvcigiY2xyTnVtYmVySW5wdXQgcmVxdWlyZXMgYmVpbmcgd3JhcHBlZCBpbiA8Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+Iil9Z2V0IHJlYWRvbmx5KCl7cmV0dXJuIG51bGwhPT10aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJyZWFkb25seSIpfXRyaWdnZXJGb2N1cygpeyF0aGlzLnJlYWRvbmx5JiZ0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7dGhpcy5yZWFkb25seXx8KHN1cGVyLnRyaWdnZXJW''@;'; put 'put ''YWxpZGF0aW9uKCksdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSExKSl9c3RlcFVwKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBVcCgpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVz''@;'; put 'put ''OiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfXN0ZXBEb3duKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0ZXBEb3duKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIse2J1YmJs''@;'; put 'put ''ZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFViLDgpLEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1''@;'; put 'put ''MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJGb2N1cygp''@;'; put 'put ''fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pLDImYSYmVHIoImNsci1pbnB1dCIsITApKCJjbHItbnVtYmVyLWlucHV0IiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxDWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25z''@;'; put 'put ''KHZoLHloLEZPZSxIT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKTtuZXcgTXQodm9pZCAwKTtsZXQgeFplPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhOT2UsVk9lLHZoLHloKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUs''@;'; put 'put ''YXVdfSksY30pKCksbEc9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1yYWRpby13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZHMsNyksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXJh''@;'; put 'put ''ZGlvLXdyYXBwZXIiLCEwKX0sZmVhdHVyZXM6W2RhKFtDaF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dVZlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShjVmUpLFlyKDApLFlyKDEsMSksZ3QoMixkVmUsMSwwLCJsYWJl''@;'; put 'put ''bCIsMCkpLDImYSYmKGZlKDIpLHhlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3lhLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxjRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLGxHLGQsaCxmLHYpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUmFkaW8iLCIiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLEVaZT0oKCk9''@;'; put 'put ''PntjbGFzcyBjIGV4dGVuZHMgdzd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlu''@;'; put 'put ''bGluZT0hMSx0aGlzLl9nZW5lcmF0ZWRJZD1NdSgpfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLmlubGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJv''@;'; put 'put ''bGVzKCksdGhpcy5zZXRBcmlhTGFiZWxsZWRCeSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnJhZGlvcy5sZW5ndGg/InJhZGlvZ3JvdXAiOm51bGx9c2V0QXJpYUxhYmVsbGVkQnkoKXtjb25zdCBhPXRoaXMuZ3JvdXBMYWJlbD8ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImlkIik7YT90aGlzLmFyaWFMYWJlbGxlZEJ5PXRoaXMucmFkaW9zLmxlbmd0aD9hOm51bGw6KHRoaXMuZ3JvdXBMYWJlbD8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIix0aGlzLl9nZW5lcmF0ZWRJZCksdGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/dGhp''@;'; put 'put ''cy5fZ2VuZXJhdGVkSWQ6bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKENwLDgpLEdlKERkKSxHZShmMSksR2Uoa2QpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLWNvbnRhaW5lciJdXSxjb250''@;'; put 'put ''ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxkcyw3LEppKSxhbyhoLGNHLDUpKSwyJmEpe2xldCBmO0NpKGY9U2koKSkmJihkLmdyb3VwTGFiZWw9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGQucmFkaW9zPWYpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJihocigicm9sZSIsZC5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixkLmFyaWFMYWJlbGxlZEJ5KSxUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJj''@;'; put 'put ''bHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W2RhKFtmMSxrZCxEZCxwN10pLHdhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZlZlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFp''@;'; put 'put ''bmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJp''@;'; put 'put ''YS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1''@;'; put 'put ''cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsxJmEmJihzYShoVmUpLFlyKDApLGd0KDEscFZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksWXIoMywxKSxndCg0LGdWZSwyLDAsImRpdiIsMikoNSxfVmUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxU''@;'; put 'put ''cigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkfHxkLnNob3dJbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseWEsZHMs''@;'; put 'put ''cnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5q''@;'; put 'put ''PUFyKHtpbXBvcnRzOltSYSxhdSxCeCxBcyxhdV19KSxjfSkoKSxBWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLHloKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxj''@;'; put 'put ''Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsYXUsQngsQXMsYXVdfSksY30pKCksJGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMu''@;'; put 'put ''bmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5tdWx0aT0hMX1uZ09uSW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoYT0+e2EmJih0aGlzLm11bHRpPWEu''@;'; put 'put ''dmFsdWVBY2Nlc3NvciBpbnN0YW5jZW9mIG14LHRoaXMuY29udHJvbD1hKX0pKX13cmFwcGVyQ2xhc3MoKXtyZXR1cm4gdGhpcy5tdWx0aT8iY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIiOiJjbHItc2VsZWN0LXdyYXBwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShHZShDcCw4KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zZWxlY3QtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsbXgsNSksMiZhKXtsZXQgZjtD''@;'; put 'put ''aShmPVNpKCkpJiYoZC5tdWx0aXBsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlz''@;'; put 'put ''YWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltkYShba2QsZjEsQ2gsRGRdKSx3YV0sbmdDb250ZW50U2VsZWN0b3JzOkNWZSxkZWNsczoxMCx2YXJzOjgsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMywi''@;'; put 'put ''bmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj''@;'; put 'put ''bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2ly''@;'; put 'put ''Y2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSh3VmUpLFlyKDApLGd0KDEsU1ZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxZcig0''@;'; put 'put ''LDEpLGd0KDUsTVZlLDEsMCwiY2RzLWljb24iLDMpKDYseFZlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksZ3QoNyxFVmUsMSwwLCJuZy1jb250ZW50IiwwKSg4LFRWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksQVZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLndyYXBwZXJDbGFzcygpKSxmZSgyKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5YSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSwkYixkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSxHZShEcyksR2UoZDEsMTApLEdlKEVvKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOlt3YV19KSxjfSkoKSxrWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKHZoLHlo''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsYXUsYXVdfSksY30pKCksd2RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3N3t9cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WXMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10ZXh0YXJlYS1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W2RhKFtrZCxmMSxDaCxEZF0pLHdhXSxu''@;'; put 'put ''Z0NvbnRlbnRTZWxlY3RvcnM6RFZlLGRlY2xzOjEwLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItdGV4dGFyZWEtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhj''@;'; put 'put ''bGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xy''@;'; put 'put ''LXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShrVmUpLFlyKDApLGd0KDEsSVZlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxZcig0LDEpLGd0KDUsUlZlLDEsMCwiY2RzLWljb24iLDMpKDYsTFZlLDEsMCwiY2RzLWljb24i''@;'; put 'put ''LDQpLGhlKCksZ3QoNyxPVmUsMSwwLCJuZy1jb250ZW50IiwwKSg4LFBWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksRlZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRy''@;'; put 'put ''b2xDbGFzcygpKSxmZSgzKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOlt3dSx5YSxycyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUUw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEM3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSx3ZGUsZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKShHZShEbyksR2UoRHMpLEdlKGQxLDEwKSxHZShFbyksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGV4dGFyZWEiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItdGV4''@;'; put 'put ''dGFyZWEiLCEwKX0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLERaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnModmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUw''@;'; put 'put ''Mjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyxBcyxhdSxhdV19KSxjfSkoKSxDZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEs''@;'; put 'put ''YXUsTFVlLE5VZSxiWmUsd1plLHRkZSx4WmUsVFplLGtaZSxEWmUsQVplLFZVZSxDWmVdfSksY30pKCksU2RlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9''@;'; put 'put ''QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLElaZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVFl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLGllKXtzdXBlcihhLGQsaCxmLHYsTSxJLEcsaWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShK''@;'; put 'put ''aSksR2UoRVksOCksR2UodnMsOCksR2UoV2EpLEdlKERvKSxHZSh4WSw4KSxHZShwbSksR2UoUEwpLEdlKEVzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0sZmVhdHVyZXM6W3dhXX0pLGN9KSgpLFJaZT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKSxMWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7Y2xhc3MgZU97fWxldCBHeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYkNoYW5nZXM9MCx0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWNoYW5nZVN0YXJ0KCl7dGhpcy5uYkNoYW5nZXMrK31jaGFuZ2VEb25lKCl7MD09LS10aGlzLm5iQ2hhbmdlcyYmdGhpcy5fY2hhbmdlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw''@;'; put 'put ''Mjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTW09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5hY3RpdmF0ZWQ9ITEsdGhpcy5fc2l6ZT0wLHRoaXMuX2N1cnJlbnQ9MSx0aGlzLl9jaGFuZ2U9bmV3''@;'; put 'put ''IFduLHRoaXMucHJldmVudEVtaXQ9ITEsdGhpcy5fc2l6ZUNoYW5nZT1uZXcgV259Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShhKXtjb25zdCBkPXRoaXMuX3NpemU7YSE9PWQmJih0aGlzLnByZXZlbnRFbWl0fHx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0''@;'; put 'put ''KCksdGhpcy5fc2l6ZT1hLHRoaXMuX2N1cnJlbnQ9MD09PWE/MTpNYXRoLmZsb29yKGQvYSoodGhpcy5fY3VycmVudC0xKSkrMSx0aGlzLnByZXZlbnRFbWl0fHwodGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCksdGhpcy5fc2l6ZUNoYW5nZS5uZXh0KHRoaXMuX3NpemUpLHRoaXMu''@;'; put 'put ''c3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKSksdGhpcy5wcmV2ZW50RW1pdD0hMX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfHwwfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRlbXM9YSx0aGlzLmN1cnJlbnQ+dGhpcy5sYXN0JiYodGhpcy5jdXJy''@;'; put 'put ''ZW50PXRoaXMubGFzdCl9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fbGFzdD90aGlzLl9sYXN0OnRoaXMuc2l6ZT4wJiZ0aGlzLnRvdGFsSXRlbXM/TWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcy90aGlzLnNpemUpOjF9c2V0IGxhc3QoYSl7dGhpcy5fbGFzdD1hfWdldCBjaGFuZ2UoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzaXplQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NpemVDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXthIT09dGhpcy5fY3VycmVudCYmKHRoaXMuc3Rh''@;'; put 'put ''dGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gMD09PXRoaXMuX3RvdGFsSXRlbXM/LTE6MD09PXRoaXMuc2l6ZT8wOih0aGlz''@;'; put 'put ''LmN1cnJlbnQtMSkqdGhpcy5zaXplfWdldCBsYXN0SXRlbSgpe2lmKDA9PT10aGlzLl90b3RhbEl0ZW1zKXJldHVybi0xO2lmKDA9PT10aGlzLnNpemUpcmV0dXJuIHRoaXMudG90YWxJdGVtcy0xO2xldCBhPXRoaXMuY3VycmVudCp0aGlzLnNpemUtMTtyZXR1cm4gdGhpcy50b3RhbEl0ZW1z''@;'; put 'put ''JiYoYT1NYXRoLm1pbihhLHRoaXMudG90YWxJdGVtcy0xKSksYX1wcmV2aW91cygpe3RoaXMuY3VycmVudD4xJiZ0aGlzLmN1cnJlbnQtLX1uZXh0KCl7dGhpcy5jdXJyZW50PHRoaXMubGFzdCYmdGhpcy5jdXJyZW50Kyt9cmVzZXRQYWdlU2l6ZShhPSExKXt0aGlzLnByZXZlbnRFbWl0PWEs''@;'; put 'put ''dGhpcy5zaXplPTB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEd4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3Bh''@;'; put 'put ''Z2U9YSx0aGlzLnN0YXRlRGVib3VuY2VyPWQsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9hbGw9W119Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9aGFzQWN0aXZlRmlsdGVycygpe2Zvcihjb25zdHtmaWx0ZXI6YX1vZiB0aGlzLl9hbGwpaWYoYSYm''@;'; put 'put ''YS5pc0FjdGl2ZSgpKXJldHVybiEwO3JldHVybiExfWdldEFjdGl2ZUZpbHRlcnMoKXtjb25zdCBhPVtdO2Zvcihjb25zdHtmaWx0ZXI6ZH1vZiB0aGlzLl9hbGwpZCYmZC5pc0FjdGl2ZSgpJiZhLnB1c2goZCk7cmV0dXJuIGF9YWRkKGEpe2NvbnN0IGQ9YS5jaGFuZ2VzLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+dGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFthXSkpO2xldCBoPSExO2NvbnN0IGY9bmV3IHRPKGEsKCk9PntpZihoKXJldHVybjtkLnVuc3Vic2NyaWJlKCk7Y29uc3Qgdj10aGlzLl9hbGwuZmluZEluZGV4KE09Pk0uZmlsdGVyPT09YSk7dj49MCYmdGhpcy5fYWxsLnNw''@;'; put 'put ''bGljZSh2LDEpLGEuaXNBY3RpdmUoKSYmdGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFtdKSxoPSEwfSk7cmV0dXJuIHRoaXMuX2FsbC5wdXNoKGYpLGEuaXNBY3RpdmUoKSYmdGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFthXSksZn1hY2NlcHRzKGEpe2Zvcihj''@;'; put 'put ''b25zdHtmaWx0ZXI6ZH1vZiB0aGlzLl9hbGwpaWYoZCYmZC5pc0FjdGl2ZSgpJiYhZC5hY2NlcHRzKGEpKXJldHVybiExO3JldHVybiEwfXJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3BhZ2UuY3VycmVudD0x''@;'; put 'put ''LHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihNbSkseHIoR3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9''@;'; put 'put ''KSxjfSkoKTtjbGFzcyB0T3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZmlsdGVyPWwsdGhpcy51bnJlZ2lzdGVyPWF9fWxldCBuTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsdGVycz1hfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkJiZ0aGlzLnJlZ2lz''@;'; put 'put ''dGVyZWQuZmlsdGVyfW5nT25EZXN0cm95KCl7dGhpcy5kZWxldGVGaWx0ZXIoKX1zZXRGaWx0ZXIoYSl7dGhpcy5kZWxldGVGaWx0ZXIoKSxhIGluc3RhbmNlb2YgdE8/dGhpcy5yZWdpc3RlcmVkPWE6YSYmKHRoaXMucmVnaXN0ZXJlZD10aGlzLmZpbHRlcnMuYWRkKGEpKX1kZWxldGVGaWx0''@;'; put 'put ''ZXIoKXt0aGlzLnJlZ2lzdGVyZWQmJih0aGlzLnJlZ2lzdGVyZWQudW5yZWdpc3RlcigpLGRlbGV0ZSB0aGlzLnJlZ2lzdGVyZWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1ZykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCk7''@;'; put 'put ''Y2xhc3MgTWRle2NvbnN0cnVjdG9yKGwpe3RoaXMudXRpbHM9bH1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTthLnk9bC55LTE7Y29uc3QgZD10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKTtyZXR1cm4gdGhp''@;'; put 'put ''cy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpJiYhZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoZD9hLnk9YS55LTE6YS54PWEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtl''@;'; put 'put ''eURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKGwueT49KHRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCkpcmV0dXJuIGE7Y29uc3QgaD10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKTtyZXR1cm4gYS55PWwueSsx''@;'; put 'put ''LCFoJiZ0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5TGVmdChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3Jl''@;'; put 'put ''YXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIDA9PT1sLnh8fChhLng9bC54LTEpLGF9a2V5UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxl''@;'; put 'put ''bmd0aC0xOjA7cmV0dXJuIGEueD1sLng8ZD9hLngrMTphLngsYX1rZXlFbmQobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksaD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0dXJuIGQueD1oP3RoaXMudXRpbHMuZ2V0''@;'; put 'put ''Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MCxhJiYoZC55PWgsdGhpcy51dGlscy5pc0RldGFpbHNSb3coZC55KSYmKGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGQueSkubGVuZ3RoLTEpKSxkfWtleUhvbWUobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29y''@;'; put 'put ''ZHMobCk7cmV0dXJuIGQueD0wLGEmJihkLnk9MCksZH1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2Vs''@;'; put 'put ''bChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KTp0aGlzLnV0''@;'; put 'put ''aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRD''@;'; put 'put ''ZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1Jvdyhh''@;'; put 'put ''LnkpP2EueT1hLnktMTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZ0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/YS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSk6dGhpcy51''@;'; put 'put ''dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfX1jbGFzcyB4ZGUgZXh0ZW5kcyBNZGV7Y29uc3RydWN0b3IobCl7c3VwZXIo''@;'; put 'put ''bCl9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7aWYoYS55PWwueS0xLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpKXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJmEueT4wJiYoYS55PWEueS0xKTtl''@;'; put 'put ''bHNlIHN3aXRjaCh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSYmKGEueT1hLnktMSksITApe2Nhc2UgdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KTphLng9MDticmVhaztjYXNlITE9PT10aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpOmEueD1sLng7YnJlYWs7ZGVmYXVsdDph''@;'; put 'put ''Lng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KX1yZXR1cm4gYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MDtyZXR1cm4gbC55Pj1kfHwoYS55PWwu''@;'; put 'put ''eSsxLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP2EueT1hLnk8ZD9hLnkrMTphLnk6KHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxKSxhLng9dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT8wOnRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSkpKSxh''@;'; put 'put ''fWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KT8oMCE9PWwueD9hLng9bC54LTE6dGhpcy51dGlscy5pc0FjdGlvbkNlbGwo''@;'; put 'put ''bCl8fChhLnk9bC55LTEsYS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSktMSksYSk6c3VwZXIua2V5TGVmdChsKX1rZXlSaWdodChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0''@;'; put 'put ''aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSlyZXR1cm4gc3VwZXIua2V5UmlnaHQobCk7Y29uc3QgZD10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gbC54Pj1kfHwodGhpcy51dGlscy5pc0FjdGlvbkNl''@;'; put 'put ''bGwobCkmJmwueD09PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueCktMSYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpPyhhLnk9bC55KzEsYS54PTApOmEueD1sLngrMSksYX1rZXlFbmQobCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''dXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KXx8YT9zdXBlci5rZXlFbmQobCxhKTooZC54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3cobC55KS5sZW5ndGgtMSxk''@;'; put 'put ''KX1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KT8oZC54PTAsZC55PWwueS0xLGEmJihkLnk9MCksZCk6c3VwZXIua2V5''@;'; put 'put ''SG9tZShsLGEpfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRh''@;'; put 'put ''aWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLnk9YS55KzEsYS54PTApOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk/dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmKHRo''@;'; put 'put ''aXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9MCksYX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCks''@;'; put 'put ''ZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnkt''@;'; put 'put ''MSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/YS55PGQmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueSsxKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0''@;'; put 'put ''aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD0wKSxhfX1jbGFzcyBPWmUgZXh0ZW5kcyB4ZGV7Y29uc3RydWN0b3IobCl7c3VwZXIobCl9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1s''@;'; put 'put ''LnkpcmV0dXJuIGE7aWYoYS55PWwueS0xLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KSlyZXR1cm4gc3VwZXIua2V5VXAobCk7Y29uc3QgZD10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKTtyZXR1cm4gZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLnk9''@;'; put 'put ''YS55LTE6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/KGEueT1hLnktMSx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNE''@;'; put 'put ''ZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOiFkJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNy''@;'; put 'put ''ZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9ZD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZD9hOihhLnk9bC55KzEsdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBh''@;'; put 'put ''bmRlZFJvdyhhLnkpP3N1cGVyLmtleURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT9hLnk9YS55PGQ/YS55KzE6YS55LTE6YS54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3cobC55KS5sZW5ndGg+aD9sLngtdGhpcy51''@;'; put 'put ''dGlscy5hY3Rpb25DZWxsQ291bnQobC55KTpsLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSxhKSl9a2V5TGVmdChsKXtyZXR1cm4gc3VwZXIua2V5TGVmdChsKX1rZXlSaWdodChsKXtyZXR1cm4gc3VwZXIua2V5UmlnaHQobCl9a2V5RW5kKGwsYSl7cmV0dXJuIHN1cGVyLmtl''@;'; put 'put ''eUVuZChsLGEpfWtleUhvbWUobCxhKXtyZXR1cm4gc3VwZXIua2V5SG9tZShsLGEpfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRoaXMu''@;'; put 'put ''dXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlQYWdlVXAobCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP3RoaXMudXRpbHMu''@;'; put 'put ''aXNEZXRhaWxzUm93KGEueSl8fChhLnk9YS55KzEsYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50''@;'; put 'put ''KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYSl9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRp''@;'; put 'put ''bHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlQYWdlRG93bihsKToodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhp''@;'; put 'put ''cy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueTxkJiYoYS55PWEueSsxLGEueD1sLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSk6dGhpcy51''@;'; put 'put ''dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkp''@;'; put 'put ''LGEpfX1jbGFzcyBQWmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvc3Q9bCx0aGlzLmNvbmZpZz1hfWdldCBncmlkKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy5rZXlHcmlkKX1nZXQgcm93cygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JB''@;'; put 'put ''bGwodGhpcy5jb25maWcua2V5R3JpZFJvd3MpfWdldCBjZWxscygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1nZXQgY3VycmVudENlbGxDb29yZGluYXRlcygpe2NvbnN0IGw9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''Y2VsbHMpLmZpbmQoaD0+IjAiPT09aC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGwsYT1sP2wuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyk6bnVsbDtyZXR1cm57eDphJiZsP0FycmF5LmZyb20oYS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxs''@;'; put 'put ''cykpLmluZGV4T2YobCk6MCx5OmEmJmwmJnRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihhKTowfX1nZXQgaXRlbXNQZXJQYWdlKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5y''@;'; put 'put ''b3dzWzBdLmNsaWVudEhlaWdodCktMXx8MH1nZXROZXh0SXRlbUNvb3JkaW5hdGUobCl7Y29uc3QgYT10aGlzLmN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMsZD10aGlzLmdldE5hdlN0cmF0ZWd5KGEpO3N3aXRjaChsLmtleSl7Y2FzZSBnYS5BcnJvd1VwOnJldHVybiBkLmtleVVwKGEpO2Nhc2Ug''@;'; put 'put ''Z2EuQXJyb3dEb3duOnJldHVybiBkLmtleURvd24oYSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9nYS5BcnJvd1JpZ2h0OmdhLkFycm93TGVmdDpyZXR1cm4gZC5rZXlMZWZ0KGEpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/Z2EuQXJyb3dMZWZ0OmdhLkFycm93UmlnaHQ6cmV0dXJu''@;'; put 'put ''IGQua2V5UmlnaHQoYSk7Y2FzZSBnYS5Ib21lOnJldHVybiBkLmtleUhvbWUoYSxsLmN0cmxLZXkpO2Nhc2UgZ2EuRW5kOnJldHVybiBkLmtleUVuZChhLGwuY3RybEtleSk7Y2FzZSBnYS5QYWdlVXA6cmV0dXJuIGQua2V5UGFnZVVwKGEpO2Nhc2UgZ2EuUGFnZURvd246cmV0dXJuIGQua2V5''@;'; put 'put ''UGFnZURvd24oYSk7ZGVmYXVsdDpyZXR1cm4gYX19Z2V0Q2VsbHNGb3JSb3cobCl7cmV0dXJuIHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9aXNFeHBhbmRlZFJvdyhsKXtjb25zdCBhPXRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yKCIu''@;'; put 'put ''ZGF0YWdyaWQtcm93LWRldGFpbCIpO3JldHVybiEhYSYmIm5vbmUiIT09YS5zdHlsZS5kaXNwbGF5fWlzRGV0YWlsc1JvdyhsKXtyZXR1cm4gdGhpcy5yb3dzW2xdLmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtcm93LWRldGFpbCIpfWlzUm93UmVwbGFjZWQobCl7cmV0dXJuISF0aGlz''@;'; put 'put ''LnJvd3NbbF0uY2xvc2VzdCgiY2xyLWRnLXJvdy5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKX1pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhsKXtyZXR1cm4gMT09PXRoaXMucm93c1tsXT8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpLmxlbmd0aH1hY3Rpb25DZWxs''@;'; put 'put ''Q291bnQobCl7cmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGwpLmxlbmd0aH1hY3Rpb25DZWxsc0FzQXJyYXkobCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5yb3dzW2xdLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jZWxsLCAuZGF0YWdy''@;'; put 'put ''aWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY29sdW1uIikpfWlzQWN0aW9uQ2VsbChsKXtyZXR1cm4hIXRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGwueSlbbC54XX1jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKXtyZXR1cm57eDpsLngseTpsLnl9fWdldE5hdlN0cmF0ZWd5KGwpe3N3aXRjaCghMCl7''@;'; put 'put ''Y2FzZSB0aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGwueSk6cmV0dXJuIG5ldyB4ZGUodGhpcyk7Y2FzZSB0aGlzLmlzRGV0YWlsc1JvdyhsLnkpOmNhc2UgdGhpcy5pc0V4cGFuZGVkUm93KGwueSk6cmV0dXJuIG5ldyBPWmUodGhpcyk7ZGVmYXVsdDpyZXR1cm4gbmV3IE1kZSh0aGlz''@;'; put 'put ''KX19fWNvbnN0IEVkZT1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVjdDpub3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJpZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIs''@;'; put 'put ''Iltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1idXR0b25dOm5vdChbZGlzYWJsZWRdKSJdO2Z1bmN0aW9uIEhaZShjKXtjb25zdCBsPUVkZS5qb2luKCIsIik7cmV0dXJuIGMubWF0Y2hlcyhsKX1sZXQgck89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnpvbmU9YSx0''@;'; put 'put ''aGlzLnNraXBJdGVtRm9jdXM9ITEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBXbix0aGlzLl9hY3RpdmVDZWxsPW51bGwsdGhpcy5jb25maWc9e2tleUdyaWRSb3dzOidbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXIpOm5vdChbc3R5bGUqPSJk''@;'; put 'put ''aXNwbGF5OiBub25lIl0pJyxrZXlHcmlkQ2VsbHM6Iltyb2xlPWdyaWRjZWxsXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIFtyb2xlPWNvbHVtbmhlYWRlcl06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3Qo''@;'; put 'put ''LmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IixrZXlHcmlkOiJbcm9sZT1ncmlkXSJ9fW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVu''@;'; put 'put ''ZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsIm1vdXNlZG93biIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmtl''@;'; put 'put ''eU5hdlV0aWxzLmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQse2tlZXBGb2N1czpIWmUo''@;'; put 'put ''YS50YXJnZXQpfSl9fSkseGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJ3aGVlbCIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSkseGQodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJmb2N1c291dCIpLnBpcGUoZm0oMCksVjAo''@;'; put 'put ''dGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2VXRpbHMuZ3JpZC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSx4ZCh0aGlzLmtleU5hdlV0aWxzLmdyaWQsImtleWRvd24iKS5waXBlKFYwKHRoaXMuZGVz''@;'; put 'put ''dHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKCghYS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcmFnLWhhbmRsZSIpfHxhLmtleSE9PWdhLkFycm93TGVmdCYmYS5rZXkhPT1nYS5BcnJvd1JpZ2h0KSYmKGEua2V5PT09Z2EuQXJyb3dVcHx8YS5rZXk9PT1nYS5BcnJvd0Rvd258fGEua2V5''@;'; put 'put ''PT09Z2EuQXJyb3dMZWZ0fHxhLmtleT09PWdhLkFycm93UmlnaHR8fGEua2V5PT09Z2EuRW5kfHxhLmtleT09PWdhLkhvbWV8fGEua2V5PT09Z2EuUGFnZVVwfHxhLmtleT09PWdhLlBhZ2VEb3duKSl7Y29uc3QgZD10aGlzLmtleU5hdlV0aWxzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxo''@;'; put 'put ''PXRoaXMua2V5TmF2VXRpbHMucm93cz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuZ2V0Q2VsbHNGb3JSb3coZC55KSlbZC54XTpudWxsO2gmJnRoaXMuc2V0QWN0aXZlQ2VsbChoKSxhLnByZXZlbnREZWZhdWx0KCl9fSl9KSx0aGlzLmxpc3RlbmVyc0FkZGVkPSEwKX1pbml0aWFsaXpl''@;'; put 'put ''S2V5R3JpZChhKXt0aGlzLmtleU5hdlV0aWxzPW5ldyBQWmUoYSx0aGlzLmNvbmZpZyksdGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMua2V5TmF2VXRpbHMuY2VsbHM/LmZvckVhY2goZD0+ZC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4''@;'; put 'put ''IiwiLTEiKSksKHRoaXMua2V5TmF2VXRpbHMuY2VsbHM/dGhpcy5rZXlOYXZVdGlscy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX1yZW1vdmVBY3RpdmVDZWxsKCl7dGhpcy5fYWN0aXZlQ2VsbD1udWxsfWdldEFjdGl2ZUNlbGwoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YWN0aXZlQ2VsbH1zZXRBY3RpdmVDZWxsKGEse2tlZXBGb2N1czpkfT17a2VlcEZvY3VzOiExfSl7Y29uc3QgaD10aGlzLmtleU5hdlV0aWxzLmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChmPT4iMCI9PT1mLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6''@;'; put 'put ''bnVsbDtpZihoJiZoLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGEuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9hY3RpdmVDZWxsPWEsIXRoaXMuc2tpcEl0ZW1Gb2N1cyYmIWQpe2xldCBmO2lmKCJjb2x1bW5oZWFkZXIiPT09YS5nZXRBdHRyaWJ1dGUoInJvbGUi''@;'; put 'put ''KSlmPWE7ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIEZaZShjKXtjb25zdCBhPVsuLi5FZGUsJ1t0YWJpbmRleD0iMCJdOm5vdChbZGlzYWJsZWRdKSddLmpvaW4oIiwiKTtyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwoYSkpfShhKTtmPXYubGVuZ3RoP3ZbMF06YX1mLmZvY3Vz''@;'; put 'put ''KCl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihXYSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLCR4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYs''@;'; put 'put ''TSl7c3VwZXIoYSksdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmtleU5hdmlnYXRpb249TSx0aGlzLm9wZW5DaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0''@;'; put 'put ''aGlzLnBvcG92ZXJJZD1NdSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpoMS5WRVJUSUNBTCxzaWRlOlIyLkFGVEVSLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LHRoaXMuX29wZW49ITEsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKGgub3BlbkNoYW5nZS5zdWJzY3JpYmUo''@;'; put 'put ''ST0+e3RoaXMub3Blbj1JLHRoaXMuYXJpYUV4cGFuZGVkPUl9KSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihhKXt0aGlzLm9wZW4hPT0oYT0hIWEpJiYodGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpLCFhJiZ0bCh0''@;'; put 'put ''aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5rZXlOYXZpZ2F0aW9uJiYodGhpcy5rZXlOYXZpZ2F0aW9uLnNraXBJdGVtRm9jdXM9YSksdGhpcy5fb3Blbj1hKX1zZXQgY3VzdG9tRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEpfWdldCBh''@;'; put 'put ''Y3RpdmUoKXtyZXR1cm4hIXRoaXMuZmlsdGVyJiZ0aGlzLmZpbHRlci5pc0FjdGl2ZSgpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzLmZvckVh''@;'; put 'put ''Y2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKXtjb25zdCBoPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKT8udGV4dENvbnRl''@;'; put 'put ''bnQudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy50b2dnbGVCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyQXJpYUxhYmVsLHtDT0xVTU46aHx8IiJ9KX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpLEdlKGlzKSxHZShzYyksR2UoaW8pLEdlKEppKSxHZShyTyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShI''@;'; put 'put ''VmUsNSxKaSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5hbmNob3I9aC5maXJzdCl9fSxpbnB1dHM6e29wZW46W05uLk5vbmUsImNsckRnRmlsdGVyT3BlbiIsIm9wZW4iXSxjdXN0b21GaWx0ZXI6W05uLk5vbmUsImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w''@;'; put 'put ''ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOltkYShbe3Byb3ZpZGU6ZU8sdXNlRXhpc3Rpbmc6Y31dKSx3YSx3bF0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1siYW5jaG9yIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xy''@;'; put 'put ''UG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImRhdGFncmlkLWZpbHRlci10b2dnbGUiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ''@;'; put 'put ''b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs''@;'; put 'put ''MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwi''@;'; put 'put ''YnV0dG9uIiwxLDApLEd0KDIsImNkcy1pY29uIiwyKSxoZSgpLGd0KDMsTlZlLDUsMywiZGl2IiwzKSksMiZhJiYoVHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLGhyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM''@;'; put 'put ''YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLGZlKDIpLGhyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLGZlKCks''@;'; put 'put ''eGUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6''@;'; put 'put ''W1piLHJzLFB4LEwxZSxOeCxIeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgdUd7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7''@;'; put 'put ''bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgaU97Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9''@;'; put 'put ''bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyB1RyhsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBUN3tjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgV24sdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93''@;'; put 'put ''LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp''@;'; put 'put ''e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBpTz97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs''@;'; put 'put ''aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j''@;'; put 'put ''ZW9mIFQ3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBpTyYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBUZGU9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIG5Pe2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZT1mLHRoaXMubmdab25lPXYsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhp''@;'; put 'put ''cy5vcGVuPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmQXJyYXkuaXNBcnJheShhKT9hJiYoYVswXSE9PXRoaXMuZmlsdGVyLmxvd3x8YVsxXSE9PXRo''@;'; put 'put ''aXMuZmlsdGVyLmhpZ2gpJiYodGhpcy5maWx0ZXIubG93PSJudW1iZXIiPT10eXBlb2YgYVswXT9hWzBdOm51bGwsdGhpcy5maWx0ZXIuaGlnaD0ibnVtYmVyIj09dHlwZW9mIGFbMV0/YVsxXTpudWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChhKSk6dGhpcy5pbml0RmlsdGVyVmFs''@;'; put 'put ''dWVzPWF9c2V0IGN1c3RvbU51bWVyaWNGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIHRPP2E6bmV3IFQ3KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZXMmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlcyxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWVzKX1n''@;'; put 'put ''ZXQgbWF4UGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLm1heFBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5tYXhWYWx1ZX1nZXQgbWluUGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLm1pblBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5t''@;'; put 'put ''aW5WYWx1ZX1nZXQgZnJvbUxhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy5mcm9tTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmZyb21MYWJlbH1nZXQgdG9MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMudG9MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMudG9MYWJlbH1nZXQgbG93''@;'; put 'put ''KCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5sb3cmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmxvdyk/dGhpcy5maWx0ZXIubG93Om51bGx9c2V0IGxvdyhhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5sb3c/KHRoaXMuZmlsdGVyLmxvdz1hLHRoaXMu''@;'; put 'put ''ZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIubG93PW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0p''@;'; put 'put ''KX1nZXQgaGlnaCgpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIuaGlnaCYmaXNGaW5pdGUodGhpcy5maWx0ZXIuaGlnaCk/dGhpcy5maWx0ZXIuaGlnaDpudWxsfXNldCBoaWdoKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmhpZ2g/KHRoaXMuZmls''@;'; put 'put ''dGVyLmhpZ2g9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmhpZ2g9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0''@;'; put 'put ''aGlzLmZpbHRlci5oaWdoXSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVz''@;'; put 'put ''dEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSxHZSh2bSksR2UoaXMpLEdlKHNjKSxHZShXYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''aWYoMSZhJiYocWEoVlZlLDUpLHFhKCR4LDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmlucHV0PWguZmlyc3QpLENpKGg9U2koKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7bWluUGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlck1pblBsYWNlaG9s''@;'; put 'put ''ZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJtYXhQbGFjZWhvbGRlciJdLGZyb21MYWJlbDpbTm4uTm9uZSwiY2xyRmlsdGVyRnJvbUxhYmVsIiwiZnJvbUxhYmVsIl0sdG9MYWJlbDpbTm4uTm9uZSwiY2xy''@;'; put 'put ''RmlsdGVyVG9MYWJlbCIsInRvTGFiZWwiXSx2YWx1ZTpbTm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdLGN1c3RvbU51bWVyaWNGaWx0ZXI6W05uLk5vbmUsImNsckRnTnVtZXJpY0ZpbHRlciIsImN1c3RvbU51bWVyaWNGaWx0ZXIiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFt7cHJvdmlkZTplTyx1c2VFeGlzdGluZzpjfV0pLHdhXSxkZWNsczoxMix2YXJzOjEwLGNvbnN0czpbWyJpbnB1dF9sb3ciLCIiXSxbImlucHV0X2hpZ2giLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xy''@;'; put 'put ''RGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0''@;'; put 'put ''YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJoaWdoIiwxLCJkYXRhZ3JpZC1udW1lcmljLWZp''@;'; put 'put ''bHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2RlKDAsImNsci1kZy1maWx0ZXIiLDIpLGdpKCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3Jl''@;'; put 'put ''dHVybiB3dChoKSxtaShkLm9wZW4sdil8fChkLm9wZW49diksQ3Qodil9KSxkZSgxLCJkaXYiLDMpKDIsImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIikoMywibGFiZWwiLDQpLE9lKDQpLGhlKCksZGUoNSwiaW5wdXQiLDUsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3Jl''@;'; put 'put ''dHVybiB3dChoKSxtaShkLmxvdyx2KXx8KGQubG93PXYpLEN0KHYpfSksaGUoKSgpLGRlKDcsImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIikoOCwibGFiZWwiLDQpLE9lKDkpLGhlKCksZGUoMTAsImlucHV0Iiw2LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4g''@;'; put 'put ''d3QoaCksbWkoZC5oaWdoLHYpfHwoZC5oaWdoPXYpLEN0KHYpfSksaGUoKSgpKCkoKX0yJmEmJih4ZSgiY2xyRGdGaWx0ZXIiLGQucmVnaXN0ZXJlZCkscGkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxmZSg0KSx3cihkLmZyb21MYWJlbFZhbHVlKSxmZSgpLHBpKCJuZ01vZGVsIixkLmxv''@;'; put 'put ''dykseGUoInBsYWNlaG9sZGVyIixkLm1pblBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLm1pblBsYWNlaG9sZGVyVmFsdWUpLGZlKDQpLHdyKGQudG9MYWJlbFZhbHVlKSxmZSgpLHBpKCJuZ01vZGVsIixkLmhpZ2gpLHhlKCJwbGFjZWhvbGRlciIsZC5tYXhQbGFjZWhvbGRl''@;'; put 'put ''clZhbHVlKSxocigiYXJpYS1sYWJlbCIsZC5tYXhQbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbZHMsX2RlLGJkZSxxbCx2TCxubCwkcywkeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgYU97Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9bCx0aGlzLmV4YWN0''@;'; put 'put ''PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyB1RyhsKX1hY2NlcHRzKGwsYSl7Y29uc3QgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodHlwZW9mIGQ+InUiKSYmKHRoaXMuZXhhY3Q/KCIiK2QpLnRvTG93ZXJDYXNlKCk9PT1hOigiIitkKS50b0xvd2VyQ2FzZSgpLmlu''@;'; put 'put ''ZGV4T2YoYSk+PTApfX1jbGFzcyBBN3tjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgV24sdGhpcy5fbG93ZXJDYXNlVmFsdWU9IiIsdGhpcy5fcmF3VmFsdWU9IiJ9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUo''@;'; put 'put ''KX1nZXQgbG93ZXJDYXNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fbG93ZXJDYXNlVmFsdWV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBhTz97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLHZhbHVlOnRoaXMudmFsdWV9OnRoaXN9Z2V0IHZhbHVlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3Jhd1ZhbHVlfXNldCB2YWx1ZShsKXtsfHwobD0iIiksbCE9PXRoaXMuX3Jhd1ZhbHVlJiYodGhpcy5fcmF3VmFsdWU9bCx0aGlzLl9sb3dlckNhc2VWYWx1ZT1sLnRvTG93ZXJDYXNlKCkudHJpbSgpLHRoaXMuX2NoYW5nZXMubmV4dChsKSl9aXNBY3RpdmUoKXtyZXR1cm4h''@;'; put 'put ''IXRoaXMudmFsdWV9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5sb3dlckNhc2VWYWx1ZSl9ZXF1YWxzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgQTcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgYU8/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIGFPJiZs''@;'; put 'put ''LmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwudmFsdWU9PT10aGlzLnZhbHVlOmw9PT10aGlzKX19bGV0IGRHPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBuT3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1v''@;'; put 'put ''blN0cmluZ3M9aCx0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZT1mLHRoaXMuZWxlbWVudFJlZj12LHRoaXMuY2RyPU0sdGhpcy5uZ1pvbmU9SSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9wZW49ITEsdGhpcy5sYWJlbFZhbHVlPSIiLHRoaXMuc3Vicz1bXX1zZXQgY3VzdG9t''@;'; put 'put ''U3RyaW5nRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiB0Tz9hOm5ldyBBNyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZmlsdGVyLnZhbHVlfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmInN0cmluZyI9PXR5cGVvZiBhPyhhfHwoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpKTp0aGlzLmluaXRGaWx0ZXJW''@;'; put 'put ''YWx1ZT1hfWdldCBwbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmZpbHRlckl0ZW1zfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vicy5wdXNoKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9''@;'; put 'put ''Pnt0aGlzLnNldEZpbHRlckxhYmVsKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRGaWx0ZXJMYWJlbCgpe2lmKHRoaXMubGFiZWwpcmV0dXJuIHZvaWQo''@;'; put 'put ''dGhpcy5sYWJlbFZhbHVlPXRoaXMubGFiZWwpO2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoImNsci1kZy1jb2x1bW4iKT8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLWNvbHVtbi10aXRsZSIpO3RoaXMubGFiZWxWYWx1ZT10aGlzLmNvbW1vblN0cmlu''@;'; put 'put ''Z3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJMYWJlbCx7Q09MVU1OOmQ/LnRleHRDb250ZW50LnRyaW0oKXx8IiJ9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpLEdlKHZtKSxHZShpcyksR2Uoc2Mp''@;'; put 'put ''LEdlKEppKSxHZShFcyksR2UoV2EpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXN0cmluZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYocWEoQlZlLDUpLHFhKCR4LDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmlu''@;'; put 'put ''cHV0PWguZmlyc3QpLENpKGg9U2koKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7cGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlclBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxsYWJlbDpbTm4uTm9uZSwiY2xyRmlsdGVyTGFiZWwiLCJsYWJlbCJdLGN1''@;'; put 'put ''c3RvbVN0cmluZ0ZpbHRlcjpbTm4uTm9uZSwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjdXN0b21TdHJpbmdGaWx0ZXIiXSx2YWx1ZTpbTm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0''@;'; put 'put ''dXJlczpbZGEoW3twcm92aWRlOmVPLHVzZUV4aXN0aW5nOmN9XSksd2Esd2xdLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWyJpbnB1dCIsIiJdLFszLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsidHlwZSIsInRleHQiLCJhdXRvY29t''@;'; put 'put ''cGxldGUiLCJvZmYiLCJuYW1lIiwic2VhcmNoIiwiY2xySW5wdXQiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwxKSxnaSgiY2xyRGdG''@;'; put 'put ''aWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksbWkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiY2xyLWlucHV0LWNvbnRhaW5lciIpKDIsImxhYmVsIiksT2UoMyksaGUoKSxkZSg0LCJpbnB1dCIsMiwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24odil7cmV0dXJuIHd0KGgpLG1pKGQudmFsdWUsdil8fChkLnZhbHVlPXYpLEN0KHYpfSksaGUoKSgpKCl9MiZhJiYoeGUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLHBpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoMyksd3IoZC5sYWJlbFZhbHVlKSxmZSgpLHBpKCJu''@;'; put 'put ''Z01vZGVsIixkLnZhbHVlKSx4ZSgicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQucGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2RzLFoxLEdMLHFsLG5sLCRzLCR4XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx4bT0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgUmJ7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVlzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sZmVhdHVyZXM6W3dhXX0p''@;'; put 'put ''LGN9KSgpLEtiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlz''@;'; put 'put ''LmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxrNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTGJ7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''LGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlvbnMuaGFzQWN0aW9uYWJsZVJv''@;'; put 'put ''d319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRXMpLEdlKHhtLDgpLEdlKEtiKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbd2FdfSksY30pKCks''@;'; put 'put ''QWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5tb2RhbFN0YWNrPVtdLHRoaXMua2V5VXBFdmVudExpc3RlbmVyPXRoaXMub25LZXlVcC5iaW5kKHRoaXMpfXRyYWNrTW9kYWxPcGVuKGEpeyExPT09dGhpcy5tb2RhbFN0YWNrLmluY2x1ZGVz''@;'; put 'put ''KGEpJiZ0aGlzLm1vZGFsU3RhY2sudW5zaGlmdChhKSx0bCh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcil9dHJhY2tNb2RhbENsb3NlKGEpe2NvbnN0IGQ9dGhpcy5tb2RhbFN0YWNrLmluZGV4''@;'; put 'put ''T2YoYSk7ZD4tMSYmdGhpcy5tb2RhbFN0YWNrLnNwbGljZShkLDEpLDA9PT10aGlzLm1vZGFsU3RhY2subGVuZ3RoJiZ0bCh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcil9b25LZXlVcChh''@;'; put 'put ''KXt0aGlzLm1vZGFsU3RhY2subGVuZ3RoJiZJMihhLmtleSk9PT1nYS5Fc2NhcGUmJihkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKSx0aGlzLm1vZGFsU3RhY2tbMF0uY2xvc2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKGlvKSl9''@;'; put 'put ''LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksWGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWEsdGhpcy5wcmV2ZW50U2Nyb2xsPSExLHRoaXMudG9nZ2xlU3Rh''@;'; put 'put ''dGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgZWkodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHByZXZlbnRGb2N1c1Njcm9sbCgpe3JldHVybiB0aGlzLnBy''@;'; put 'put ''ZXZlbnRTY3JvbGx9c2V0IHByZXZlbnRGb2N1c1Njcm9sbChhKXt0aGlzLnByZXZlbnRTY3JvbGw9YX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5jYWNoZX1nZXQgc3RhdGVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCl9Z2V0IGlzT3Blbigpe3JldHVybiEwPT09''@;'; put 'put ''dGhpcy50b2dnbGVTdGF0ZX1vcGVuKGEsZCl7dGhpcy5jYWNoZT1hLHRoaXMuYnV0dG9uPWQsdGhpcy50b2dnbGVTdGF0ZT0hMCx0aGlzLl9zdGF0ZS5uZXh0KHRoaXMudG9nZ2xlU3RhdGUpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcyl9Y2xvc2UoKXt0aGlz''@;'; put 'put ''LnRvZ2dsZVN0YXRlPSExLHRoaXMucmV0dXJuRm9jdXMoKSx0aGlzLl9zdGF0ZS5uZXh0KHRoaXMudG9nZ2xlU3RhdGUpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpfXJldHVybkZvY3VzKCl7dGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cyh7cHJl''@;'; put 'put ''dmVudFNjcm9sbDp0aGlzLnByZXZlbnRGb2N1c1Njcm9sbH0pLHRoaXMuYnV0dG9uPW51bGwpfXRvZ2dsZShhLGQpe3RoaXMuaXNSb3dPcGVuKGEpfHwhYT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKGEsZCl9aXNSb3dPcGVuKGEpe3JldHVybiEoIXRoaXMudG9nZ2xlU3RhdGV8fHRoaXMuY2Fj''@;'; put 'put ''aGUhPT1hKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoQWRlKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscWI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRldGFpbFNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmV4cGFuZGFibGVDb3VudD0wfWdldCBoYXNFeHBhbmRhYmxlUm93KCl7cmV0dXJuIXRoaXMuZGV0YWlsU2VydmljZS5lbmFibGVkJiZ0aGlzLmV4cGFuZGFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5leHBhbmRhYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5l''@;'; put 'put ''eHBhbmRhYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoWGYpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxENz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTGJ7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmRhYmxlQ291bnQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZUNvdW50''@;'; put 'put ''Lmhhc0V4cGFuZGFibGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxHZSh4bSw4KSxHZShxYikpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVy''@;'; put 'put ''ZXM6W3dhXX0pLGN9KSgpO2NsYXNzIG9Pe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLHRoaXMubmVzdGVkUHJvcD1uZXcgdUcobCl9Y29tcGFyZShsLGEpe2xldCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCksaD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGEpO3Jl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgZCYmKGQ9ZC50b0xvd2VyQ2FzZSgpKSwic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb3dlckNhc2UoKSksdHlwZW9mIGQ+InUifHxudWxsPT09ZD90eXBlb2YgaD4idSJ8fG51bGw9PT1oPzA6MTp0eXBlb2YgaD4idSJ8fG51bGw9PT1ofHxkPGg/LTE6''@;'; put 'put ''ZD5oPzE6MH19dmFyIHhoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TT1JURUQ9MF09IlVOU09SVEVEIixjW2MuQVNDPTFdPSJBU0MiLGNbYy5ERVNDPS0xXT0iREVTQyIsY30oeGh8fHt9KTtjb25zdCBYYj0iZGF0YWdyaWQtZml4ZWQtd2lkdGgiLEt4PSJkYXRhZ3JpZC1oaWRkZW4tY29s''@;'; put 'put ''dW1uIjtsZXQgaEc9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShqVmUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1o''@;'; put 'put ''LmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLHpWZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksY30pKCksc089KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5fcmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5z''@;'; put 'put ''dGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5j''@;'; put 'put ''ZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5j''@;'; put 'put ''aGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlzLl9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5j''@;'; put 'put ''ZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlzLnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEd4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEpmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNB''@;'; put 'put ''TENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FMQ1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1O''@;'; put 'put ''X1dJRFRIUyIsY30oSmZ8fHt9KTtsZXQgSTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0ZXA9bmV3IFduLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVu''@;'; put 'put ''ZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKCRsKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNMRUFSX1dJRFRIUyks''@;'; put 'put ''dGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEpmLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxmRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdh''@;'; put 'put ''bml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQgbWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNpemUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGlu''@;'; put 'put ''TWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJl''@;'; put 'put ''c2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8YykoeHIoSmkpLHhyKHZtKSx4cihJNykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHBHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXt0bCh0aGlzLnBsYXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0''@;'; put 'put ''Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihpbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLERkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMubmdab25lPWgsdGhpcy50YWJsZVNpemVTZXJ2aWNlPWYsdGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmc9dix0aGlzLmRvY3VtZW50PU0sdGhpcy5jb2x1bW5TZXBhcmF0b3JJZD1NdSgpLHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnVubGlzdGVuZXJzPVtdfWdldCBkZXNjcmlwdGlvbklkKCl7cmV0dXJuYCR7dGhpcy5jb2x1bW5TZXBhcmF0b3JJZH0tYXJpYS1kZXNjcmli''@;'; put 'put ''ZWRieWB9Z2V0IHJlc2l6ZVRyYWNrZXJFbCgpe3JldHVybiB0aGlzLnJlc2l6ZVRyYWNrZXJSZWYubmF0aXZlRWxlbWVudH1nZXQgY29sdW1uSGFuZGxlRWwoKXtyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVSZWYubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLm5nWm9uZS5y''@;'; put 'put ''dW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXlkb3duIixhPT57dGhpcy5zaG93VHJhY2tlck9uRmlyc3RLZXlEb3duKGEpLHRoaXMubW92ZVRyYWNrZXJPbktleURvd24oYSl9KSks''@;'; put 'put ''dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleXVwIixhPT57dGhpcy5oaWRlVHJhY2tlck9uS2V5VXAoYSl9KSl9KX1uZ09uRGVzdHJveSgpe3RoaXMudW5saXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpfXNob3dUcmFja2Vy''@;'; put 'put ''KCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5zdGFydFJlc2l6ZSgpO2NvbnN0IGE9dGhpcy50YWJsZVNpemVTZXJ2aWNlLmdldENvbHVtbkRyYWdIZWlnaHQoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJoZWlnaHQiLGEpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''c2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJibG9jayIpfW1vdmVUcmFja2VyKGEpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuY2FsY3VsYXRlUmVzaXplKGEpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIs''@;'; put 'put ''YHRyYW5zbGF0ZVgoJHt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeX1weClgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiY29sLXJlc2l6ZSIpLHRoaXMucmVkRmxhZ1RyYWNrZXIoKX1oaWRlVHJhY2tlcigpe3RoaXMuY29s''@;'; put 'put ''dW1uUmVzaXplclNlcnZpY2UuZW5kUmVzaXplKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsIm5vbmUiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCki''@;'; put 'put ''KSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29sdW1uSGFuZGxlRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKXsh''@;'; put 'put ''dGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucmVzaXplVHJhY2tlckVs''@;'; put 'put ''LCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/KGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6''@;'; put 'put ''ZWRCeS0xMikpOnRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkmJihhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkrMTIpKX1oaWRlVHJhY2tlck9uS2V5VXAoYSl7dGhpcy5yZXNpemVTdGFydGVkT25LZXlE''@;'; put 'put ''b3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXpl''@;'; put 'put ''IiksdGhpcy5oaWRlVHJhY2tlcigpLHRoaXMuY29sdW1uSGFuZGxlRWwuZm9jdXMoKSl9cmVkRmxhZ1RyYWNrZXIoKXt0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UhPT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UmJih0aGlzLmlzV2l0aGluTWF4''@;'; put 'put ''UmVzaXplUmFuZ2U9dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT90aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNlZWRlZC1tYXgiKTp0aGlzLnJlbmRlcmVy''@;'; put 'put ''LmFkZENsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNlZWRlZC1tYXgiKSl9aXNBcnJvd0xlZnRLZXlFdmVudChhKXtyZXR1cm4gSTIoYS5rZXkpPT09Z2EuQXJyb3dMZWZ0fWlzQXJyb3dSaWdodEtleUV2ZW50KGEpe3JldHVybiBJMihhLmtleSk9PT1nYS5BcnJvd1JpZ2h0fX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShmRyksR2UoRW8pLEdlKFdhKSxHZShwRyksR2UoaXMpLEdlKHZzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIl1dLHZpZXdRdWVyeTpmdW5j''@;'; put 'put ''dGlvbihhLGQpe2lmKDEmYSYmKHFhKFVWZSw1KSxxYShaVmUsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQucmVzaXplVHJhY2tlclJlZj1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5jb2x1bW5IYW5kbGVSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmVHIoImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiLCEwKX0sZGVjbHM6Nix2YXJzOjQsY29uc3RzOltbImNvbHVtbkhhbmRsZSIsIiJdLFsicmVzaXplVHJhY2tlciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNka0RyYWciLCIiLCJjZGtEcmFnTG9ja0F4aXMiLCJ4Iiwx''@;'; put 'put ''LCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjZGtEcmFnU3RhcnRlZCIsImNka0RyYWdNb3ZlZCIsImNka0RyYWdFbmRlZCJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2Nv''@;'; put 'put ''bnN0IGg9TG4oKTtkZSgwLCJidXR0b24iLDIsMCksRnQoImNka0RyYWdTdGFydGVkIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChkLnNob3dUcmFja2VyKCkpfSkoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQubW92ZVRyYWNrZXIodi5kaXN0YW5jZS54''@;'; put 'put ''KSl9KSgiY2RrRHJhZ0VuZGVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksZC5oaWRlVHJhY2tlcigpLEN0KHYuc291cmNlLl9kcmFnUmVmLnJlc2V0KCkpfSksaGUoKSxkZSgyLCJzcGFuIiwzKSxPZSgzKSxoZSgpLEd0KDQsImRpdiIsNCwxKX0yJmEmJihocigiYXJpYS1sYWJlbCIsZC5j''@;'; put 'put ''b21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWwpKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmRlc2NyaXB0aW9uSWQpLGZlKDIpLGhyKCJpZCIsZC5kZXNjcmlwdGlvbklkKSxmZSgpLERyKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0''@;'; put 'put ''aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0laZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG5Pe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihoKSx0aGlzLmVsPWEsdGhpcy5fc29ydD1kLHRoaXMudmNyPWYsdGhpcy5kZXRhaWxTZXJ2''@;'; put 'put ''aWNlPXYsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1NLHRoaXMuc29ydE9yZGVyQ2hhbmdlPW5ldyBLcix0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLmN1c3RvbUZpbHRlcj0hMSx0aGlzLl9jb2xUeXBlPSJzdHJpbmciLHRoaXMuX3NvcnRPcmRlcj14aC5VTlNPUlRFRCx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2hvd1NlcGFyYXRvcj0hMCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGlzSGlk''@;'; put 'put ''ZGVuKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoS3gpfWdldCBzaG93U2VwYXJhdG9yKCl7cmV0dXJuIHRoaXMuX3Nob3dTZXBhcmF0b3J9c2V0IHNob3dTZXBhcmF0b3IoYSl7dGhpcy5fc2hvd1NlcGFyYXRvcj1hLHRoaXMuY2hhbmdlRGV0ZWN0''@;'; put 'put ''b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShhKXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1h''@;'; put 'put ''LHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgb08oYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3NvcnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IG9PKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9z''@;'; put 'put ''b3J0Qnk9bmV3IG9PKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2Nhc2UgeGguQVNDOnRo''@;'; put 'put ''aXMuc29ydCghMSk7YnJlYWs7Y2FzZSB4aC5ERVNDOnRoaXMuc29ydCghMCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zb3J0LmNsZWFyKCl9fXNldCB1cGRhdGVGaWx0ZXJWYWx1ZShhKXt0aGlzLmZpbHRlcj90aGlzLmZpbHRlciBpbnN0YW5jZW9mIEE3PygoIWF8fCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''YSkmJihhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBUNyYmKCghYXx8IShhIGluc3RhbmNlb2YgQXJyYXkpKSYmKGE9W251bGwsbnVsbF0pLDI9PT1hLmxlbmd0aCYmKGFbMF0hPT10aGlzLmZpbHRlci52''@;'; put 'put ''YWx1ZVswXXx8YVsxXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzFdKSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfXNldCBwcm9qZWN0ZWRGaWx0ZXIoYSl7YSYmKHRoaXMuZGVsZXRlRmlsdGVyKCksdGhpcy5jdXN0b21GaWx0ZXI9ITApfWdldCBzb3J0YWJs''@;'; put 'put ''ZSgpe3JldHVybiEhdGhpcy5fc29ydEJ5fWdldCBhcmlhU29ydCgpe3N3aXRjaCh0aGlzLl9zb3J0T3JkZXIpe2Nhc2UgeGguQVNDOnJldHVybiJhc2NlbmRpbmciO2Nhc2UgeGguREVTQzpyZXR1cm4iZGVzY2VuZGluZyI7ZGVmYXVsdDpyZXR1cm4ibm9uZSJ9fWdldCBzb3J0RGlyZWN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb259Z2V0IGZpbHRlclZhbHVlKCl7cmV0dXJuIHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgQTd8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgVDc/dGhpcy5maWx0ZXIudmFsdWU6bnVsbH1zZXQgZmlsdGVyVmFsdWUoYSl7KHRoaXMuZmlsdGVyIGlu''@;'; put 'put ''c3RhbmNlb2YgQTd8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgVDcpJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlci52YWx1ZSkpfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQoaEcsdGhp''@;'; put 'put ''cy52Y3IpLmNvbHVtblZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgWUwoaEcsdGhpcy52Y3IpfW5nT25DaGFuZ2VzKGEpe2EuY29sVHlwZSYmYS5jb2xUeXBlLmN1cnJlbnRWYWx1ZSYmYS5jb2xUeXBlLmN1cnJlbnRWYWx1ZSE9PWEuY29sVHlwZS5wcmV2aW91c1Zh''@;'; put 'put ''bHVlJiYhdGhpcy5jdXN0b21GaWx0ZXImJiF0aGlzLmZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLmZpZWxkJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSksYS5maWVsZCYmYS5maWVsZC5jdXJyZW50VmFsdWUmJmEuZmllbGQuY3VycmVudFZhbHVl''@;'; put 'put ''IT09YS5maWVsZC5wcmV2aW91c1ZhbHVlJiYhdGhpcy5jdXN0b21GaWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9y''@;'; put 'put ''RWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNvcnQoYSl7dGhpcy5zb3J0YWJsZSYmKHRoaXMuX3NvcnQudG9nZ2xlKHRoaXMuX3NvcnRCeSxhKSx0aGlzLl9zb3J0T3JkZXI9dGhpcy5fc29ydC5yZXZlcnNlP3hoLkRFU0M6eGguQVNDLHRoaXMuX3NvcnREaXJlY3Rpb249dGhpcy5fc29ydE9y''@;'; put 'put ''ZGVyPT09eGguREVTQz8iZG93biI6InVwIix0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlcikpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFy''@;'; put 'put ''YXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhKX0pfWxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnNvcnRPcmRlciE9PXhoLlVOU09S''@;'; put 'put ''VEVEJiZhLmNvbXBhcmF0b3IhPT10aGlzLl9zb3J0QnkmJih0aGlzLl9zb3J0T3JkZXI9eGguVU5TT1JURUQsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCl9KX1zZXR1cERlZmF1bHRGaWx0ZXIoYSxkKXsibnVtYmVy''@;'; put 'put ''Ij09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IFQ3KG5ldyBpTyhhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IEE3KG5ldyBhTyhhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5pbml0RmlsdGVyVmFs''@;'; put 'put ''dWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKHNPKSxHZSh1ZyksR2UoRG8pLEdlKFhmKSxHZShFcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''ZGctY29sdW1uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsZU8sNSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5wcm9qZWN0ZWRGaWx0ZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1uaGVhZGVyIl0saG9zdFZhcnM6Myxob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1zb3J0IixkLmFyaWFTb3J0KSxUcigiZGF0YWdyaWQtY29sdW1uIiwhMCkpfSxpbnB1dHM6e2ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOltObi5Ob25lLCJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmlu''@;'; put 'put ''Z1BsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6W05uLk5vbmUsImNsckZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlcjpbTm4uTm9uZSwiY2xyRmlsdGVyTnVtYmVy''@;'; put 'put ''TWluUGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciJdLGNvbFR5cGU6W05uLk5vbmUsImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbTm4uTm9uZSwiY2xyRGdGaWVsZCIsImZpZWxkIl0sc29ydEJ5OltObi5Ob25lLCJjbHJEZ1NvcnRCeSIsInNvcnRCeSJd''@;'; put 'put ''LHNvcnRPcmRlcjpbTm4uTm9uZSwiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSx1cGRhdGVGaWx0ZXJWYWx1ZTpbTm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixm''@;'; put 'put ''aWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdmQoW29nXSksd2Esd2xdLG5nQ29udGVudFNlbGVjdG9yczpZVmUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbImNvbHVtblRpdGxlIiwiIl0sWzEsImRhdGFncmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFz''@;'; put 'put ''cyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNs''@;'; put 'put ''ckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsNCwibmdJZiJdLFs0''@;'; put 'put ''LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJdLFsic2hhcGUiLCJh''@;'; put 'put ''cnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVy''@;'; put 'put ''TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKFdWZSksZGUoMCwiZGl2IiwxKSxndCgx''@;'; put 'put ''LEtWZSwzLDIsImJ1dHRvbiIsMiksWXIoMiksZ3QoMyxxVmUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCxYVmUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDQpKDUsSlZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykoNyxlQmUsMiwxLCJzcGFuIiw1KSg4LHRCZSwx''@;'; put 'put ''LDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIixkLnNvcnRhYmxlKSxmZSgyKSx4ZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ZC5jb2xUeXBlKSxmZSgpLHhlKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0''@;'; put 'put ''b21GaWx0ZXImJiJudW1iZXIiPT1kLmNvbFR5cGUpLGZlKDMpLHhlKCJuZ0lmIiwhZC5zb3J0YWJsZSksZmUoKSx4ZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbeWEsTjEscnMsRGRlLFRkZSxkR10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSks''@;'; put 'put ''Y30pKCksZGc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZmlsdGVycz1hLHRoaXMuX3NvcnQ9ZCx0aGlzLl9wYWdlPWgsdGhpcy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3BsYXllZD1bXSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuX2FsbENo''@;'; put 'put ''YW5nZXM9bmV3IFduLHRoaXMudHJhY2tCeT1mPT5mfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2FsbH1zZXQgYWxsKGEpe3RoaXMuX2FsbD1hLHRoaXMuZW1pdEFsbENoYW5nZXMoYSksdGhpcy5zbWFydD90aGlzLl9maWx0ZXJJdGVtcygp''@;'; put 'put ''Oih0aGlzLl9kaXNwbGF5ZWQ9YSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdl''@;'; put 'put ''cy5hc09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMuX2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3ViJiZ0aGlzLl9zb3J0U3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFn''@;'; put 'put ''ZVN1YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5Eb3duKCl7dGhpcy5fc21hcnQ9ITEsdGhpcy5kZXN0cm95KCl9c21hcnRlblVwKCl7dGhpcy5fc21hcnQ9ITAsdGhpcy5fZmlsdGVyc1N1Yj10aGlzLl9maWx0ZXJzLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2Zp''@;'; put 'put ''bHRlckl0ZW1zKCkpLHRoaXMuX3NvcnRTdWI9dGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fc29ydC5jb21wYXJhdG9yP3RoaXMuX3NvcnRJdGVtcygpOnRoaXMuX2ZpbHRlckl0ZW1zKCl9KSx0aGlzLl9wYWdlU3ViPXRoaXMuX3BhZ2UuY2hhbmdlLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+dGhpcy5fY2hhbmdlUGFnZSgpKX1yZWZyZXNoKCl7dGhpcy5zbWFydCYmdGhpcy5fZmlsdGVySXRlbXMoKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcy5kaXNwbGF5ZWQpfWVtaXRBbGxDaGFuZ2VzKGEpe3RoaXMuX2FsbENoYW5nZXMubmV4dChhKX1fZmlsdGVySXRl''@;'; put 'put ''bXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9maWx0ZXJlZD10aGlzLl9maWx0ZXJzLmhhc0FjdGl2ZUZpbHRlcnMoKT90aGlzLl9hbGwuZmlsdGVyKGE9PnRoaXMuX2ZpbHRlcnMuYWNjZXB0cyhhKSk6dGhpcy5fYWxsLnNsaWNlKCksdGhpcy5fcGFnZS50b3RhbEl0ZW1zPXRoaXMu''@;'; put 'put ''X2ZpbHRlcmVkLmxlbmd0aCx0aGlzLl9zb3J0SXRlbXMoKSl9X3NvcnRJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX3NvcnQuY29tcGFyYXRvciYmdGhpcy5fZmlsdGVyZWQuc29ydCgoYSxkKT0+dGhpcy5fc29ydC5jb21wYXJlKGEsZCkpLHRoaXMuX2NoYW5nZVBhZ2UoKSl9''@;'; put 'put ''X2NoYW5nZVBhZ2UoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fHRoaXMuX3BhZ2UuYWN0aXZhdGVkJiYwPT09dGhpcy5fcGFnZS5zaXplfHwodGhpcy5fZGlzcGxheWVkPXRoaXMuX3BhZ2Uuc2l6ZT4wP3RoaXMuX2ZpbHRlcmVkLnNsaWNlKHRoaXMuX3BhZ2UuZmlyc3RJdGVtLHRoaXMuX3BhZ2Uu''@;'; put 'put ''bGFzdEl0ZW0rMSk6dGhpcy5fZmlsdGVyZWQsdGhpcy5lbWl0Q2hhbmdlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cih1ZykseHIoc08pLHhyKE1tKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSks''@;'; put 'put ''Y30pKCksSmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5kaWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMuZGlmZmVyPW51bGwsdGhpcy5zdWJzY3JpcHRpb25zPVtdLGguc21hcnRlblVwKCksdGhpcy5pdGVyYWJsZVByb3h5PW5ldyBu''@;'; put 'put ''cyhmLGEsZCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JPZj12LHRoaXMuaXRlcmFibGVQcm94eS5uZ0RvQ2hlY2soKX0pKX1zZXQgcmF3SXRlbXMoYSl7dGhpcy5fcmF3SXRlbXM9YXx8W119c2V0IHRyYWNr''@;'; put 'put ''QnkoYSl7dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRo''@;'; put 'put ''aXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShTbCksR2UoZW0pLEdlKGRnKSxHZShEbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0''@;'; put 'put ''czp7cmF3SXRlbXM6W05uLk5vbmUsImNsckRnSXRlbXNPZiIsInJhd0l0ZW1zIl0sdHJhY2tCeTpbTm4uTm9uZSwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZ0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLml0ZW1zPWF9Z2V0IGVtcHR5RGF0YWdy''@;'; put 'put ''aWQoKXtyZXR1cm4hKHRoaXMuaXRlbXMubG9hZGluZ3x8dGhpcy5pdGVtcy5kaXNwbGF5ZWQmJjAhPT10aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShkZykpfSxjLlx1MDI3NWNtcD1Wcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjQsdmFyczo0LGNvbnN0''@;'; put 'put ''czpbWzEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSJdXSx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZGUoMCwiZGl2IiwwKSxndCgxLG5CZSwxLDAsImRpdiIsMSksZGUoMiwic3BhbiIsMiksZ3QoMyxyQmUsMSwwLCJuZy1jb250ZW50IiwzKSxoZSgpKCkpLDImYSYmKFRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0eURhdGFncmlkKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLmVtcHR5RGF0YWdyaWQpLGZlKDIpLHhlKCJuZ0lmIixkLmVtcHR5RGF0YWdyaWQpKX0sZGVwZW5kZW5jaWVzOlt5YV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbUc9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVS''@;'; put 'put ''ZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNl''@;'; put 'put ''bGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShpQmUsNSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1w''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKCksZ3QoMCxhQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFFmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFw''@;'; put 'put ''cGVkSW5qZWN0b3IuZ2V0KG1HLHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBZTChtRyx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERvKSl9LGMuXHUwMjc1Y21wPVZyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsV0wsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQs''@;'; put 'put ''aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtY2VsbCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYoc2EoKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLElkZT0wLHF4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBVMXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5leHBhbmRhYmxlSWQ9IiIsdGhpcy5fcmVwbGFjZT1uZXcgZWkoITEpLHRoaXMuX2FuaW1hdGU9bmV3IFdu''@;'; put 'put ''LElkZSsrLHRoaXMuZXhwYW5kYWJsZUlkPSJjbHItZGctZXhwYW5kYWJsZS1yb3ctIitJZGV9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUu''@;'; put 'put ''bmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3JldHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxv''@;'; put 'put ''YWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09ejEuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5uZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBRYj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oUWJ8fHt9KSxwbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb''@;'; put 'put ''Yy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30ocGx8fHt9KTtsZXQgdkc9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnJvd1ZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnJvd1ZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1yb3ciXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZxYShvQmUsNSks''@;'; put 'put ''MiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpibyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm93UG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxndCgwLHNCZSwxLDAsIm5nLXRl''@;'; put 'put ''bXBsYXRlIixudWxsLDAsSWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVlplPTAsZV89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX2l0ZW1zPWEsdGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbj0hMSx0aGlzLnNoaWZ0UHJlc3NlZD0hMSx0aGlzLnJvd1NlbGVjdGlvbk1v''@;'; put 'put ''ZGU9ITEsdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmxvY2tlZFJlZnM9W10sdGhpcy52YWx1ZUNvbGxlY3Rvcj1uZXcgV24sdGhpcy5fc2VsZWN0aW9uVHlwZT1wbC5Ob25lLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuaWQ9ImNsci1kZy1z''@;'; put 'put ''ZWxlY3Rpb24iK1ZaZSsrLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuY2hhbmdlLnN1YnNjcmliZSgoKT0+eyF0aGlzLl9zZWxlY3RhYmxlfHx0aGlzLnByZXNlcnZlU2VsZWN0aW9ufHx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5hbGxDaGFu''@;'; put 'put ''Z2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIHBsLk5vbmU6YnJlYWs7Y2FzZSBwbC5TaW5nbGU6e2xldCB2LE09ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmJiYodGhpcy5wcmV2U2lu''@;'; put 'put ''Z2xlU2VsZWN0aW9uUmVmPWEudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goST0+e2NvbnN0IEc9YS50cmFja0J5KEkpO3RoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj09PUcmJih2PUksTT0hMCksdGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoRyk+LTEmJmYucHVzaChH''@;'; put 'put ''KX0pLGEuc21hcnQmJiF2JiYoTT0hMCksc2V0VGltZW91dCgoKT0+e00mJih0aGlzLmN1cnJlbnRTaW5nbGU9dil9LDApO2JyZWFrfWNhc2UgcGwuTXVsdGk6e2xldCB2PXRoaXMuY3VycmVudC5zbGljZSgpLE09ITE7dGhpcy5jdXJyZW50Lmxlbmd0aD4wJiZ0aGlzLnByZXZTZWxlY3Rpb25S''@;'; put 'put ''ZWZzLmxlbmd0aCE9PXRoaXMuY3VycmVudC5sZW5ndGgmJih0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMuY3VycmVudC5mb3JFYWNoKEk9Pnt0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2goYS50cmFja0J5KEkpKX0pKSxoLmZvckVhY2goST0+e2NvbnN0IEc9YS50cmFja0J5KEkp''@;'; put 'put ''O3RoaXMubG9ja2VkUmVmcy5pbmRleE9mKEcpPi0xJiZmLnB1c2goRyl9KSx2Lmxlbmd0aD4wJiYoaC5mb3JFYWNoKEk9Pntjb25zdCBHPWEudHJhY2tCeShJKSxpZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoRyk7aWU+LTEmJih2W2llXT1JLE09ITApfSksYS5zbWFydCYmKHY9''@;'; put 'put ''di5maWx0ZXIoST0+aC5pbmRleE9mKEkpPi0xKSx0aGlzLmN1cnJlbnQubGVuZ3RoIT09di5sZW5ndGgmJihNPSEwKSksc2V0VGltZW91dCgoKT0+e00mJih0aGlzLmN1cnJlbnQ9dil9LDApKTticmVha319dGhpcy5sb2NrZWRSZWZzPWZ9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhp''@;'; put 'put ''cy52YWx1ZUNvbGxlY3Rvci5waXBlKGZtKDApKS5zdWJzY3JpYmUoKCk9PnRoaXMuZW1pdENoYW5nZSgpKSl9Z2V0IHNlbGVjdGlvblR5cGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZX1zZXQgc2VsZWN0aW9uVHlwZShhKXthIT09dGhpcy5zZWxlY3Rpb25UeXBlJiYodGhpcy5fc2Vs''@;'; put 'put ''ZWN0aW9uVHlwZT1hLGE9PT1wbC5Ob25lP2RlbGV0ZSB0aGlzLmN1cnJlbnQ6dGhpcy51cGRhdGVDdXJyZW50KFtdLCExKSl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLnVwZGF0ZUN1cnJlbnQoYSwhMCl9Z2V0IGN1cnJlbnRTaW5nbGUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fY3VycmVudFNpbmdsZX1zZXQgY3VycmVudFNpbmdsZShhKXthIT09dGhpcy5fY3VycmVudFNpbmdsZSYmKHRoaXMuX2N1cnJlbnRTaW5nbGU9YSxhJiYodGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSkpLHRoaXMuZW1pdENo''@;'; put 'put ''YW5nZSgpKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgX3NlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpfHx0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlfWNsZWFyU2VsZWN0aW9uKCl7dGhp''@;'; put 'put ''cy5fY3VycmVudD1bXSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1udWxsLHRoaXMuX2N1cnJlbnRTaW5nbGU9bnVsbCx0aGlzLmVtaXRDaGFuZ2UoKX1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNj''@;'; put 'put ''cmliZSgpKX11cGRhdGVDdXJyZW50KGEsZCl7dGhpcy5fY3VycmVudD1hLGQmJnRoaXMudmFsdWVDb2xsZWN0b3IubmV4dChhKX1pc1NlbGVjdGVkKGEpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlP3RoaXMuY3VycmVudFNpbmdsZT09PWE6dGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''VHlwZT09PXBsLk11bHRpJiZ0aGlzLmN1cnJlbnQuaW5kZXhPZihhKT49MH1zZXRTZWxlY3RlZChhLGQpe2NvbnN0IGg9dGhpcy5jdXJyZW50P3RoaXMuY3VycmVudC5pbmRleE9mKGEpOi0xO3N3aXRjaCh0aGlzLl9zZWxlY3Rpb25UeXBlKXtjYXNlIHBsLk5vbmU6Y2FzZSBwbC5TaW5nbGU6''@;'; put 'put ''YnJlYWs7Y2FzZSBwbC5NdWx0aTpoPj0wJiYhZD90aGlzLmRlc2VsZWN0SXRlbShoKTpoPDAmJmQmJnRoaXMuc2VsZWN0SXRlbShhKX19aXNBbGxTZWxlY3RlZCgpe2lmKHRoaXMuX3NlbGVjdGlvblR5cGUhPT1wbC5NdWx0aXx8IXRoaXMuX2l0ZW1zLmRpc3BsYXllZClyZXR1cm4hMTtjb25z''@;'; put 'put ''dCBhPXRoaXMuX2l0ZW1zLmRpc3BsYXllZC5maWx0ZXIoZj0+ITE9PT10aGlzLmlzTG9ja2VkKGYpKTtyZXR1cm4hKGEubGVuZ3RoPDEpJiZhLmZpbHRlcihmPT50aGlzLmN1cnJlbnQuaW5kZXhPZihmKT4tMSkubGVuZ3RoPT09YS5sZW5ndGh9bG9ja0l0ZW0oYSxkKXtpZih0aGlzLmNhbkl0''@;'; put 'put ''QmVMb2NrZWQoKSl7Y29uc3QgaD10aGlzLl9pdGVtcy50cmFja0J5KGEpOyEwPT09ZD90aGlzLmxvY2tlZFJlZnMucHVzaChoKTp0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihmPT5oIT09Zil9fWlzTG9ja2VkKGEpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuX2l0ZW1zLnRyYWNrQnkoYSk7cmV0dXJuIHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKGQpPi0xfXJldHVybiExfXRvZ2dsZUFsbCgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5Ob25lfHx0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlfHwodGhpcy5pc0FsbFNlbGVj''@;'; put 'put ''dGVkKCk/dGhpcy5faXRlbXMuZGlzcGxheWVkLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5jdXJyZW50LmluZGV4T2YoYSk7ZD4tMSYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLmRlc2VsZWN0SXRlbShkKX0pOnRoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pnt0aGlzLmN1''@;'; put 'put ''cnJlbnQuaW5kZXhPZihhKTwwJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuc2VsZWN0SXRlbShhKX0pKX1zZWxlY3RJdGVtKGEpe3RoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuY29uY2F0KGEpLHRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEp''@;'; put 'put ''KX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEp''@;'; put 'put ''O3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09cGwuTm9uZX1lbWl0Q2hhbmdlKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLlNpbmdsZT90aGlzLl9jaGFuZ2Uu''@;'; put 'put ''bmV4dCh0aGlzLmN1cnJlbnRTaW5nbGUpOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5NdWx0aSYmdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoZGcpLHhyKHVnKSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl92aWV3PW5ldyBlaShRYi5ESVNQTEFZKSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJT''@;'; put 'put ''dGVwcyhKZi5DQUxDVUxBVEVfTU9ERV9PTikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoUWIuQ0FMQ1VMQVRFKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ0FMQ1VMQVRFX01PREVfT0ZGKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcu''@;'; put 'put ''bmV4dChRYi5ESVNQTEFZKSkpfWdldCB2aWV3KCl7cmV0dXJuIHRoaXMuX3ZpZXcuYXNPYnNlcnZhYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKSh4cihJNykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zZWxlY3Rpb249YX1vblNlbGVjdGlvbkNlbGxDbGljayhhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxl''@;'; put 'put ''Y3Rpb25Nb2RlfHwiTEFCRUwiIT09YS50YXJnZXQudGFnTmFtZSYmIklOUFVUIiE9PWEudGFyZ2V0LnRhZ05hbWUmJmEudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik/LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGVfKSl9''@;'; put 'put ''LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiZGF0YWdyaWQtc2VsZWN0Il1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNlbGVjdGlvbkNlbGxDbGljayhmKX0pfX0pLGN9KSgpLFNwPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJX''@;'; put 'put ''aWR0aCgpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZXNldFN0YXRlKGEpe3RoaXMuc2V0V2lkdGgoYSksdGhp''@;'; put 'put ''cy5zZXRIaWRkZW4oYSl9c2V0V2lkdGgoYSl7YS5zdHJpY3RXaWR0aD90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYYik6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWGIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUo''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsS3gpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEt4''@;'; put 'put ''KX1jbGVhcldpZHRoKCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWGIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKEdlKEppKSxHZShFbyksR2UoSTcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV19KSxjfSkoKSxsTz0wLEVtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLGllLHVlLHllLEVlKXt0aGlzLnNlbGVj''@;'; put 'put ''dGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1kLHRoaXMuZ2xvYmFsRXhwYW5kYWJsZT1oLHRoaXMuZXhwYW5kPWYsdGhpcy5kZXRhaWxTZXJ2aWNlPXYsdGhpcy5kaXNwbGF5TW9kZT1NLHRoaXMudmNyPUksdGhpcy5jb21tb25TdHJpbmdzPXVlLHRoaXMuaXRlbXM9eWUsdGhpcy5kb2N1''@;'; put 'put ''bWVudD1FZSx0aGlzLnNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmRldGFpbERpc2FibGVkPSExLHRoaXMuZGV0YWlsSGlkZGVuPSExLHRoaXMuc2tlbGV0b25Mb2FkaW5nPSExLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMu''@;'; put 'put ''ZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPXBsLHRoaXMuaXRlbUNoYW5nZXM9bmV3IGJ4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd1NlbGVjdGlvbkxh''@;'; put 'put ''YmVsPSIiLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zZWxlY3RhYmxlPSEwLGxPKyssdGhpcy5pZD0iY2xyLWRnLXJvdyIrbE8sdGhpcy5yYWRpb0lkPSJjbHItZGctcm93LXJkIitsTyx0aGlzLmNoZWNrYm94SWQ9ImNsci1kZy1yb3ctY2IiK2xPLHRoaXMuZXhwYW5kYWJsZUlkPWYu''@;'; put 'put ''ZXhwYW5kYWJsZUlkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHE4KGYucmVwbGFjZSxmLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbamUscWVdKT0+e2plJiZxZT8odGhpcy5yZXBsYWNlZD0hMCxHLmFkZENsYXNzKGllLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIp''@;'; put 'put ''KToodGhpcy5yZXBsYWNlZD0hMSxHLnJlbW92ZUNsYXNzKGllLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKX0pKX1nZXQgaXRlbSgpe3JldHVybiB0aGlzLl9pdGVtfXNldCBpdGVtKGEpe3RoaXMuX2l0ZW09YSx0aGlzLml0ZW1DaGFuZ2VzLm5leHQoYSksdGhpcy5j''@;'; put 'put ''bHJEZ1NlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX1nZXQgY2xyRGdTZWxlY3RhYmxlKCl7cmV0dXJuIXRoaXMuc2VsZWN0aW9uLmlzTG9ja2VkKHRoaXMuaXRlbSl9c2V0IGNsckRnU2VsZWN0YWJsZShhKXt0aGlzLml0ZW0mJnRoaXMuc2VsZWN0aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwi''@;'; put 'put ''ZmFsc2UiPT09YXx8ITE9PT1hKSx0aGlzLl9zZWxlY3RhYmxlPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5Ob25lP3RoaXMuX3NlbGVjdGVkOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQodGhpcy5pdGVtKX1zZXQgc2VsZWN0ZWQo''@;'; put 'put ''YSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ9YTooYSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk11bHRpP3RoaXMucmFuZ2VTZWxlY3QoKTp0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PW51bGwsdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uc2V0U2VsZWN0ZWQodGhpcy5pdGVtLGEpKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kLmV4cGFuZGVkPWF9Z2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbE9wZW5MYWJl''@;'; put 'put ''bD90aGlzLl9kZXRhaWxPcGVuTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMub3Blbn1zZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoYSl7dGhpcy5fZGV0YWlsT3BlbkxhYmVsPWF9Z2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxDbG9zZUxhYmVsP3Ro''@;'; put 'put ''aXMuX2RldGFpbENsb3NlTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2V9c2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbChhKXt0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPWF9Z2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoKXtyZXR1cm4gdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw/''@;'; put 'put ''dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0fXNldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKGEpe3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldCh2Ryx0aGlzLnZj''@;'; put 'put ''cikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBZTCh2Ryx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2Vz''@;'; put 'put ''LnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxscy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3''@;'; put 'put ''LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0''@;'; put 'put ''YWNoKCk7YT09PVFiLkNBTENVTEFURT8odGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMu''@;'; put 'put ''Zm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2Vy''@;'; put 'put ''fSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhw''@;'; put 'put ''YW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRL''@;'; put 'put ''ZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVj''@;'; put 'put ''dGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFu''@;'; put 'put ''Z2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGVfKSxHZShLYiksR2Uo''@;'; put 'put ''cWIpLEdlKHF4KSxHZShYZiksR2UoeUcpLEdlKERvKSxHZShFbyksR2UoSmkpLEdlKGlzKSxHZShkZyksR2UodnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLFFm''@;'; put 'put ''LDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKHFhKFZMLDUpLHFhKGxCZSw1KSxxYShjQmUsNSxEbykscWEodUJlLDUsRG8pLHFhKGRCZSw1LERvKSksMiZhKXtsZXQgaDtDaShoPVNpKCkpJiYoZC5leHBh''@;'; put 'put ''bmRBbmltYXRpb249aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLl9jYWxjdWxhdGVkQ2Vs''@;'; put 'put ''bHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJhcmlhLW93bnMiLGQuaWQpLFRyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtcm93LXNrZWxldG9uIixkLnNrZWxldG9u''@;'; put 'put ''TG9hZGluZykoImRhdGFncmlkLXNlbGVjdGVkIixkLnNlbGVjdGVkKSl9LGlucHV0czp7ZGV0YWlsRGlzYWJsZWQ6W05uLk5vbmUsImNsckRnRGV0YWlsRGlzYWJsZWQiLCJkZXRhaWxEaXNhYmxlZCJdLGRldGFpbEhpZGRlbjpbTm4uTm9uZSwiY2xyRGdEZXRhaWxIaWRkZW4iLCJkZXRhaWxI''@;'; put 'put ''aWRkZW4iXSxza2VsZXRvbkxvYWRpbmc6W05uLk5vbmUsImNsckRnU2tlbGV0b25Mb2FkaW5nIiwic2tlbGV0b25Mb2FkaW5nIl0saXRlbTpbTm4uTm9uZSwiY2xyRGdJdGVtIiwiaXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbTm4uTm9uZSwiY2xy''@;'; put 'put ''RGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W05uLk5vbmUsImNsckRnRXhwYW5kZWQiLCJleHBhbmRlZCJdLGNsckRnRGV0YWlsT3BlbkxhYmVsOiJjbHJEZ0RldGFpbE9wZW5MYWJlbCIsY2xyRGdEZXRhaWxDbG9zZUxhYmVsOiJjbHJEZ0RldGFpbENsb3NlTGFiZWwiLGNsckRn''@;'; put 'put ''Um93U2VsZWN0aW9uTGFiZWw6ImNsckRnUm93U2VsZWN0aW9uTGFiZWwifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJEZ0V4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtxeCx7cHJvdmlkZTpVMSx1c2VFeGlz''@;'; put 'put ''dGluZzpxeH0se3Byb3ZpZGU6RHgsdXNlRXhpc3Rpbmc6cXh9XSldLG5nQ29udGVudFNlbGVjdG9yczpmQmUsZGVjbHM6OSx2YXJzOjMsY29uc3RzOltbImRldGFpbCIsIiJdLFsicm93Q29udGVudCIsIiJdLFsiY2FsY3VsYXRlZENlbGxzIiwiIl0sWyJzdGlja3lDZWxscyIsIiJdLFsic2Ny''@;'; put 'put ''b2xsYWJsZUNlbGxzIiwiIl0sWyJkZXRhaWxCdXR0b24iLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kVHJpZ2dlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1j''@;'; put 'put ''bGlja2FibGUiLDMsIm1vdXNlZG93biIsImNsaWNrIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93LW1hc3RlciIsImRhdGFncmlkLXJvdy1mbGV4IiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1yb3ctc3Rp''@;'; put 'put ''Y2t5Il0sWyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0''@;'; put 'put ''YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFp''@;'; put 'put ''bC1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbImNsYXNzIiwic2tlbGV0b24t''@;'; put 'put ''bG9hZGluZyIsNCwibmdJZiJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImNo''@;'; put 'put ''ZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImNsaWNrIiwiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsInJhZGlvIiwiY2xyUmFk''@;'; put 'put ''aW8iLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5hbWUiLCJ2YWx1ZSIsIm5nTW9kZWwiLCJjaGVja2VkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9u''@;'; put 'put ''cyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24iLDMsImNs''@;'; put 'put ''aWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWljb24iXSxbImNsclNtYWxsIiwiIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLWRldGFpbC1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInRh''@;'; put 'put ''YmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMywiZGlzYWJsZWQiLCJpcy1vcGVuIiwiY2xpY2siLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uIl0sWzEsInNrZWxldG9uLWxvYWRpbmciXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYShoQmUpLGd0KDAsYkJlLDMsMiwiZGl2Iiw2KSgxLHdCZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixTQmUsMSwxLG51bGwsOCkoMyxNQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEljKSg1LFZCZSwxNywxNCwibmct''@;'; put 'put ''dGVtcGxhdGUiLG51bGwsMSxJYyksRmwoNyxudWxsLDIpKSwyJmEmJih4ZSgibmdJZiIsZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSksZmUoKSx4ZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJmQuZXhwYW5kLmV4cGFuZGFibGUpLGZlKCkseGUoIm5nSWYiLCFk''@;'; put 'put ''LnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W3d1LHlhLE4xLHJzLGRzLGNHLGxHLHFsLE1kLHlMLG5sLCRzLFZMLFJkLFFmLGJHLFNwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgVzE9ZnVuY3Rpb24oYyl7cmV0''@;'; put 'put ''dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY1tjLklOSVRJQUxJWkU9Ml09IklOSVRJQUxJWkUiLGN9KFcxfHx7fSk7Y29uc3QgQlplPU9iamVjdC5rZXlzKFcxKS5tYXAoYz0+VzFbY10pLmZpbHRlcihjPT5jPT09cGFyc2VJbnQoYywxMCkmJmMhPT1X''@;'; put 'put ''MS5JTklUSUFMSVpFKTtsZXQgaGc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZT1uZXcgZWkobnVsbCksdGhpcy5fY2FjaGU9W119Z2V0IGNvbHVtblN0YXRlcygpe3JldHVybiB0aGlzLmNvbHVtbnMubWFwKGE9PmEu''@;'; put 'put ''dmFsdWUpfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PmEuaGlkZWFibGUpLmxlbmd0aD4wfWdldCB2aXNpYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+IWEuaGlkZGVuKX1jYWNoZSgpe3Ro''@;'; put 'put ''aXMuX2NhY2hlPXRoaXMuY29sdW1ucy5tYXAoYT0+e2NvbnN0IGQ9ey4uLmEudmFsdWV9O3JldHVybiBkZWxldGUgZC5jaGFuZ2VzLGR9KX1oYXNDYWNoZSgpe3JldHVybiEhdGhpcy5fY2FjaGUubGVuZ3RofXJlc2V0VG9MYXN0Q2FjaGUoKXt0aGlzLl9jYWNoZS5mb3JFYWNoKChhLGQpPT57''@;'; put 'put ''Y29uc3QgaD17Li4uYSxjaGFuZ2VzOkJaZX07dGhpcy5jb2x1bW5zW2RdLm5leHQoaCksdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2UubmV4dChoKX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0ZUNoYW5nZSh0aGlz''@;'; put 'put ''LmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7Y29uc3QgaD17Li4uYS52YWx1ZSwuLi5kfTthLm5leHQoaCksdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2UubmV4dChoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgalplPXtpdGVtU2l6ZTozMixtaW5CdWZmZXJQeDoyMDAsbWF4QnVmZmVyUHg6NDAwfTtsZXQgUmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSxHLGllLHVlLHllLEVlLGplKXt0''@;'; put 'put ''aGlzLmNoYW5nZURldGVjdG9yUmVmPWEsdGhpcy5pdGVyYWJsZURpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5uZ1pvbmU9Zix0aGlzLnJlbmRlcmVyMj12LHRoaXMudGVtcGxhdGVSZWY9TSx0aGlzLnZpZXdDb250YWluZXJSZWY9SSx0aGlzLmRpcmVjdGlvbmFsaXR5PUcsdGhpcy5zY3Jv''@;'; put 'put ''bGxEaXNwYXRjaGVyPWllLHRoaXMudmlld3BvcnRSdWxlcj11ZSx0aGlzLmRhdGFncmlkPXllLHRoaXMuY29sdW1uc1NlcnZpY2U9RWUsdGhpcy5pbmplY3Rvcj1qZSx0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2U9bmV3IEtyLHRoaXMucGVyc2lzdEl0ZW1zPSEwLHRoaXMuX2Nka0ZpeGVkU2l6''@;'; put 'put ''ZVZpcnR1YWxTY3JvbGxJbnB1dHM9ey4uLmpaZX0sdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMudG9wSW5kZXg9MCx0aGlzLm11dGF0aW9uQ2hhbmdlcz1uZXcgTXV0YXRpb25PYnNlcnZlcihxZT0+e3FlLmZvckVhY2gocnQ9PntydC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRh''@;'; put 'put ''Z3JpZC1jb21wYWN0IikmJnRoaXMuaXRlbVNpemU+MjQmJih0aGlzLml0ZW1TaXplPTI0KX0pfSksdGhpcy52aWV3UmVwZWF0ZXI9bmV3IFowZSx0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHM9e2Nka1ZpcnR1YWxGb3JUcmFja0J5OnFlPT5xZX0saC5zbWFydGVuVXAoKSx5ZS5kZXRhaWxTZXJ2''@;'; put 'put ''aWNlLnByZXZlbnRGb2N1c1Njcm9sbD0hMCx0aGlzLmRhdGFncmlkRWxlbWVudFJlZj15ZS5lbCx0aGlzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT0yMCx0aGlzLm11dGF0aW9uQ2hhbmdlcy5vYnNlcnZlKHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQse2F0''@;'; put 'put ''dHJpYnV0ZUZpbHRlcjpbImNsYXNzIl0sYXR0cmlidXRlT2xkVmFsdWU6ITB9KSx0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneT1uZXcgRUZlKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0''@;'; put 'put ''cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX1nZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0aGlzLmNk''@;'; put 'put ''a1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvck9mPWEsdGhpcy5pdGVtcy5hbGw9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5''@;'; put 'put ''fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnk9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKCl7cmV0dXJuIHRoaXM/LmNka1ZpcnR1YWxGb3JJ''@;'; put 'put ''bnB1dHM/LmNka1ZpcnR1YWxGb3JUZW1wbGF0ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGU9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRl''@;'; put 'put ''Q2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVT''@;'; put 'put ''aXplPWQ3KGEpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplfXNldCBpdGVtU2l6ZShhKXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRz''@;'; put 'put ''Lml0ZW1TaXplPWQ3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChhKXt0aGlzLl9jZGtGaXhl''@;'; put 'put ''ZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4PWQ3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4fXNldCBt''@;'; put 'put ''YXhCdWZmZXJQeChhKXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4PWQ3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfXNldCBkYXRhUmFuZ2UoYSl7YSYmKHRoaXMuaXRlbXMuc21hcnQmJnRoaXMuaXRlbXMuc21h''@;'; put 'put ''cnRlbkRvd24oKSx0aGlzLnRvdGFsSXRlbXM9YS50b3RhbCx0aGlzLnVwZGF0ZURhdGFSYW5nZShhLnNraXAsYS5kYXRhKSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc31zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWF9bmdBZnRlclZpZXdJbml0''@;'; put 'put ''KCl7dGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCk9Pnt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD10aGlzLmNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYsdGhpcy5uZ1pvbmUsdGhpcy5yZW5kZXJlcjIsdGhpcy5kaXJl''@;'; put 'put ''Y3Rpb25hbGl0eSx0aGlzLnNjcm9sbERpc3BhdGNoZXIsdGhpcy52aWV3cG9ydFJ1bGVyLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5KSx0aGlzLmNka1ZpcnR1YWxGb3I9ZnVuY3Rpb24gVVplKGMsbCxhLGQsaCxmKXtpZigrTmllLm1ham9yPDE5''@;'; put 'put ''KXJldHVybiBuZXcga0woYyxsLGEsZCxoLGYpO3tjb25zdCB2PURzLmNyZWF0ZSh7cGFyZW50OmZpKGhjKSxwcm92aWRlcnM6W3twcm92aWRlOkRiLHVzZVZhbHVlOmh9XX0pO3JldHVybiBEcy5jcmVhdGUoe3BhcmVudDp2LHByb3ZpZGVyczpbe3Byb3ZpZGU6RG8sdXNlVmFsdWU6Y30se3By''@;'; put 'put ''b3ZpZGU6U2wsdXNlVmFsdWU6bH0se3Byb3ZpZGU6ZW0sdXNlVmFsdWU6YX0se3Byb3ZpZGU6X1ksdXNlVmFsdWU6ZH0se3Byb3ZpZGU6V2EsdXNlVmFsdWU6Zn0se3Byb3ZpZGU6a0wsdXNlQ2xhc3M6a0x9XX0pLmdldChrTCl9fSh0aGlzLnZpZXdDb250YWluZXJSZWYsdGhpcy50ZW1wbGF0''@;'; put 'put ''ZVJlZix0aGlzLml0ZXJhYmxlRGlmZmVycyx0aGlzLnZpZXdSZXBlYXRlcix0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCx0aGlzLm5nWm9uZSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQubmdPbkluaXQoKX0pLHRoaXMuZ3JpZFJvbGVFbGVtZW50PXRoaXMuZGF0YWdyaWRFbGVtZW50''@;'; put 'put ''UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9ImdyaWQiXScpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5pdGVtcy5zbWFydCYmKHRoaXMuY2Rr''@;'; put 'put ''VmlydHVhbEZvci5jZGtWaXJ0dWFsRm9yT2Y9YSl9KSx0aGlzLmNka1ZpcnR1YWxGb3IuZGF0YVN0cmVhbS5zdWJzY3JpYmUoYT0+e3RoaXMudXBkYXRlQXJpYVJvd0NvdW50KGEubGVuZ3RoKX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGE9Pnt0aGlzLnRvcEluZGV4PWF9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnN1YnNjcmliZShhPT57dGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlLmVtaXQoYSl9KSx0aGlzLmRhdGFncmlkLnJlZnJlc2guc3Vic2NyaWJlKGE9PnthLmZpbHRl''@;'; put 'put ''cnMmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKX0pLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudmlld1JlcGVhdGVyLmRldGFjaCgpfSkpfW5nRG9DaGVjaygpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdEb0NoZWNrKCksdGhpcy51cGRh''@;'; put 'put ''dGVBcmlhUm93SW5kZXhlcygpfW5nT25EZXN0cm95KCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ09uRGVzdHJveSgpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5uZ09uRGVzdHJveSgpLHRoaXMubXV0YXRpb25DaGFuZ2VzPy5kaXNjb25uZWN0KCksdGhpcy5zdWJzY3JpcHRpb25zLmZv''@;'; put 'put ''ckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXNjcm9sbFVwKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4LWEsZCl9c2Nyb2xsRG93bihhLGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleCthLGQpfXNjcm9sbFRvSW5kZXgoYSxk''@;'; put 'put ''PSJhdXRvIil7dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/LnNjcm9sbFRvSW5kZXgoYSxkKX11cGRhdGVEYXRhUmFuZ2UoYSxkKXtsZXQgaD10aGlzLmNka1ZpcnR1YWxGb3JPZjsoIXRoaXMucGVyc2lzdEl0ZW1zfHwhaHx8aD8ubGVuZ3RoIT09dGhpcy50b3RhbEl0ZW1zKSYmKGg9QXJy''@;'; put 'put ''YXkodGhpcy50b3RhbEl0ZW1zKSksaC5zcGxpY2UoYSxkLmxlbmd0aCwuLi5kKSx0aGlzLmNka1ZpcnR1YWxGb3JPZj1BcnJheS5mcm9tKGgpfXVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKXtpZih0aGlzLmNka1ZpcnR1YWxGb3IpZm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXModGhpcy5j''@;'; put 'put ''ZGtWaXJ0dWFsRm9ySW5wdXRzKSl0aGlzLmNka1ZpcnR1YWxGb3JbYV0hPT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0mJih0aGlzLmNka1ZpcnR1YWxGb3JbYV09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdKX11cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl7dGhp''@;'; put 'put ''cy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kmJnRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5C''@;'; put 'put ''dWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX11cGRhdGVBcmlhUm93Q291bnQoYSl7dGhpcy5ncmlkUm9sZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsYS50b1N0cmluZygpKX11cGRhdGVBcmlhUm93SW5kZXhl''@;'; put 'put ''cygpe2ZvcihsZXQgYT0wO2E8dGhpcy52aWV3Q29udGFpbmVyUmVmLmxlbmd0aDthKyspe2NvbnN0IGQ9dGhpcy52aWV3Q29udGFpbmVyUmVmLmdldChhKTtkLnJvb3ROb2Rlcy5maW5kKE09PiJDTFItREctUk9XIj09PU0udGFnTmFtZSk/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJyb3ciXScp''@;'; put 'put ''Py5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLChkLmNvbnRleHQuaW5kZXgrMSkudG9TdHJpbmcoKSl9fWNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKGEsZCxoLGYsdixNLEksRyl7Y29uc3QgaWU9SS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRh''@;'; put 'put ''Z3JpZCIpLHVlPUkubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSx5ZT1JLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvd3MiKTtsZXQgamU9MCxxZT0wO2Z1bmN0aW9uIHJ0KCl7eWUuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xh''@;'; put 'put ''dGVZKCR7amV9cHgpYCx5ZS5zdHlsZS5oZWlnaHQ9cWUtamUrInB4In1jb25zdCBwdD1mdW5jdGlvbiB6WmUoYyxsLGEsZCxoLGYsdixNLEkpe3JldHVybitOaWUubWFqb3I8MTk/bmV3IERiKGMsbCxhLGgsZix2LE0sSSk6RHMuY3JlYXRlKHtwYXJlbnQ6ZmkoaGMpLHByb3ZpZGVyczpbe3By''@;'; put 'put ''b3ZpZGU6SmksdXNlVmFsdWU6Y30se3Byb3ZpZGU6RXMsdXNlVmFsdWU6bH0se3Byb3ZpZGU6V2EsdXNlVmFsdWU6YX0se3Byb3ZpZGU6RW8sdXNlVmFsdWU6ZH0se3Byb3ZpZGU6VzBlLHVzZVZhbHVlOmh9LHtwcm92aWRlOnBtLHVzZVZhbHVlOmZ9LHtwcm92aWRlOmtiLHVzZVZhbHVlOnZ9''@;'; put 'put ''LHtwcm92aWRlOkFMLHVzZVZhbHVlOk19LHtwcm92aWRlOiQwZSx1c2VWYWx1ZTpJfSx7cHJvdmlkZTpEYix1c2VDbGFzczpEYn1dfSkuZ2V0KERiKX0oe25hdGl2ZUVsZW1lbnQ6aWV9LGEsZCxoLEcsZix2LE0sbnVsbCk7cmV0dXJuIHB0Ll9jb250ZW50V3JhcHBlcj17bmF0aXZlRWxlbWVu''@;'; put 'put ''dDp7c3R5bGU6e3NldCB0cmFuc2Zvcm0oZHQpe2plPXZvaWQgMD09PWR0PzA6Ky90cmFuc2xhdGVZXCgoWzAtOV0rKXB4XCkvLmV4ZWMoZHQpPy5bMV0scnQoKX19fX0scHQuc2V0VG90YWxDb250ZW50U2l6ZT1kdD0+e3FlPWR0LHVlLnN0eWxlLmhlaWdodD1gJHtxZX1weGAscnQoKX0scHR9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVzKSxHZShlbSksR2UoZGcpLEdlKFdhKSxHZShFbyksR2UoU2wpLEdlKERvKSxHZShwbSksR2Uoa2IpLEdlKEFMKSxHZShDcygoKT0+QW0pKSxHZShoZyksR2UoaGMpKX0sYy5cdTAyNzVkaXI9RXIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmlydHVhbFNjcm9sbCIsIiJdLFsiIiwiQ2xyVmlydHVhbFNjcm9sbCIsIiJdXSxpbnB1dHM6e3BlcnNpc3RJdGVtczpbTm4uTm9uZSwiY2xyVmlydHVhbFBlcnNpc3RJdGVtcyIsInBlcnNpc3RJdGVtcyJdLGNka1ZpcnR1YWxGb3JPZjpbTm4u''@;'; put 'put ''Tm9uZSwiY2xyVmlydHVhbFJvd3NPZiIsImNka1ZpcnR1YWxGb3JPZiJdLGNka1ZpcnR1YWxGb3JUcmFja0J5OltObi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RyYWNrQnkiLCJjZGtWaXJ0dWFsRm9yVHJhY2tCeSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbTm4uTm9uZSwiY2xyVmlydHVhbFJv''@;'; put 'put ''d3NUZW1wbGF0ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZTpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NUZW1wbGF0ZUNhY2hlU2l6ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJdLGl0ZW1TaXplOltObi5Ob25lLCJj''@;'; put 'put ''bHJWaXJ0dWFsUm93c0l0ZW1TaXplIiwiaXRlbVNpemUiXSxtaW5CdWZmZXJQeDpbTm4uTm9uZSwiY2xyVmlydHVhbFJvd3NNaW5CdWZmZXJQeCIsIm1pbkJ1ZmZlclB4Il0sbWF4QnVmZmVyUHg6W05uLk5vbmUsImNsclZpcnR1YWxSb3dzTWF4QnVmZmVyUHgiLCJtYXhCdWZmZXJQeCJdLGRh''@;'; put 'put ''dGFSYW5nZTpbTm4uTm9uZSwiY2xyVmlydHVhbERhdGFSYW5nZSIsImRhdGFSYW5nZSJdfSxvdXRwdXRzOntyZW5kZXJlZFJhbmdlQ2hhbmdlOiJyZW5kZXJlZFJhbmdlQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtkZ10pXX0pLGN9KSgpLExkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCxoLGYpe3RoaXMuZmlsdGVycz1hLHRoaXMuc29ydD1kLHRoaXMucGFnZT1oLHRoaXMuZGVib3VuY2VyPWYsdGhpcy5jaGFuZ2U9dGhpcy5kZWJvdW5jZXIuY2hhbmdlLnBpcGUoTHIoKCk9PnRoaXMuc3RhdGUpKX1nZXQgc3RhdGUoKXtjb25zdCBhPXt9O3RoaXMucGFnZS5zaXplPjAmJihh''@;'; put 'put ''LnBhZ2U9e2Zyb206dGhpcy5wYWdlLmZpcnN0SXRlbSx0bzp0aGlzLnBhZ2UubGFzdEl0ZW0sc2l6ZTp0aGlzLnBhZ2Uuc2l6ZSxjdXJyZW50OnRoaXMucGFnZS5jdXJyZW50fSksdGhpcy5zb3J0LmNvbXBhcmF0b3ImJihhLnNvcnQ9dGhpcy5zb3J0LmNvbXBhcmF0b3IgaW5zdGFuY2VvZiBv''@;'; put 'put ''Tz97Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IucHJvcCxyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfTp7Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX0pO2NvbnN0IGQ9dGhpcy5maWx0ZXJzLmdldEFjdGl2ZUZpbHRlcnMoKTtpZihkLmxlbmd0aD4w''@;'; put 'put ''KXthLmZpbHRlcnM9W107Zm9yKGNvbnN0IGggb2YgZClhLmZpbHRlcnMucHVzaChoLnN0YXRlP2guc3RhdGU6aCl9cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHVnKSx4cihzTykseHIoTW0pLHhyKEd4KSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVG09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlPWEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Q2VsbHNTdGF0ZSgpLHRoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY2VsbHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldENlbGxzU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q2VsbHNTdGF0ZSgpe3RoaXMuY2VsbHMu''@;'; put 'put ''bGVuZ3RoPT09dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmdGhpcy5jZWxscy5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdJiZhLnJlc2V0U3RhdGUodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdLnZhbHVlKX0pfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShoZykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8o''@;'; put 'put ''aCxjLDUpLGFvKGgsU3AsNCkpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuZXhwYW5kYWJsZVJvdz1mLmZpcnN0KSxDaShmPVNpKCkpJiYoZC5jZWxscz1mKX19fSksY30pKCksQW09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcsaWUsdWUseWUsRWUsamUscWUs''@;'; put 'put ''cnQpe3RoaXMub3JnYW5pemVyPWEsdGhpcy5pdGVtcz1kLHRoaXMuZXhwYW5kYWJsZVJvd3M9aCx0aGlzLnNlbGVjdGlvbj1mLHRoaXMucm93QWN0aW9uU2VydmljZT12LHRoaXMuc3RhdGVQcm92aWRlcj1NLHRoaXMuZGlzcGxheU1vZGU9SSx0aGlzLnJlbmRlcmVyPUcsdGhpcy5kZXRhaWxT''@;'; put 'put ''ZXJ2aWNlPWllLHRoaXMuZG9jdW1lbnQ9dWUsdGhpcy5lbD15ZSx0aGlzLnBhZ2U9RWUsdGhpcy5jb21tb25TdHJpbmdzPWplLHRoaXMua2V5TmF2aWdhdGlvbj1xZSx0aGlzLnpvbmU9cnQsdGhpcy5jbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5zaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwsdGhpcy5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCx0aGlzLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCx0aGlzLmNsckRnRGlzYWJsZVBhZ2VGb2N1cz0hMSx0aGlzLnNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5yZWZyZXNoPW5ldyBLcighMSksdGhpcy5jdXN0''@;'; put 'put ''b21TZWxlY3RBbGxFbmFibGVkPSExLHRoaXMuY3VzdG9tU2VsZWN0QWxsPW5ldyBLcix0aGlzLlNFTEVDVElPTl9UWVBFPXBsLHRoaXMuX3N1YnNjcmlwdGlvbnM9W107Y29uc3QgcHQ9TXUoKTt0aGlzLnNlbGVjdEFsbElkPSJjbHItZGctc2VsZWN0LWFsbC0iK3B0LGllLmlkPXB0fWdldCBs''@;'; put 'put ''b2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRpbmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP3BsLk11bHRpOnBsLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChh''@;'; put 'put ''LCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1wbC5TaW5nbGUsYT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9''@;'; put 'put ''c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1zZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy50cmFja0J5PWF9Z2V0IGFs''@;'; put 'put ''bFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQoKX1zZXQgYWxsU2VsZWN0ZWQoYSl7dGhpcy5jdXN0b21TZWxlY3RBbGxFbmFibGVkP3RoaXMuY3VzdG9tU2VsZWN0QWxsLmVtaXQoYSk6dGhpcy5zZWxlY3Rpb24udG9nZ2xlQWxsKCl9bmdBZnRlckNvbnRl''@;'; put 'put ''bnRJbml0KCl7dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPXRoaXMucm93cy5tYXAoZD0+ZC5pdGVtKSk7Y29uc3QgYT10aGlzLnJvd3MuY2hhbmdlcy5waXBlKFYxKGQ9Pl94KGZvKGQubWFwKGg9PmguaXRlbSkpLHE4KGQubWFwKGg9PmguaXRlbUNoYW5nZXMpKS5waXBlKGZt''@;'; put 'put ''KDApKSkpKTt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD1kKX0pLHRoaXMucm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aC0xO2Q+PTA7''@;'; put 'put ''ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZ2V0KGQpLmRlc3Ryb3llZCYmdGhpcy5fZGlzcGxheWVkUm93cy5yZW1vdmUoZCk7aWYodGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMu''@;'; put 'put ''dmlydHVhbFNjcm9sbCl7Y29uc3QgZD10aGlzLmtleU5hdmlnYXRpb24uZ2V0QWN0aXZlQ2VsbCgpO2QmJnRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PnRoaXMua2V5TmF2aWdhdGlvbi5zZXRBY3RpdmVDZWxsKGQpKX0pfX0pKX1uZ0FmdGVyVmlld0lu''@;'; put 'put ''aXQoKXt0aGlzLmtleU5hdmlnYXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnVwZGF0ZURldGFpbFN0YXRlKCksdGhpcy5yZWZyZXNoLmVtaXQodGhpcy5zdGF0ZVByb3ZpZGVyLnN0YXRlKSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5z''@;'; put 'put ''dGF0ZVByb3ZpZGVyLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5yZWZyZXNoLmVtaXQoYSkpLHRoaXMuc2VsZWN0aW9uLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQuZW1pdChh''@;'; put 'put ''KTp0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSl9KSx0aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKSx0aGlzLmNsckRnRGlzYWJsZVBhZ2VGb2N1''@;'; put 'put ''c3x8dGhpcy5kYXRhZ3JpZFRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1u''@;'; put 'put ''cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMu''@;'; put 'put ''X2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1RYi5ESVNQTEFZPyh0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''ZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlz''@;'; put 'put ''LnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9''@;'; put 'put ''Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh4ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtl''@;'; put 'put ''eSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSx4ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3Jp''@;'; put 'put ''cHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVBbGxTZWxlY3RlZChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxlY3RBbGxDaGVja2JveD8ubmF0aXZlRWxlbWVudC5jbGljaygpfXJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfXVwZGF0ZURldGFp''@;'; put 'put ''bFN0YXRlKCl7aWYodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlJiZ0aGlzLmRldGFpbFNlcnZpY2UuaXNPcGVuKXtjb25zdCBhPXRoaXMucm93cy5maW5kKGQ9PnRoaXMuaXRlbXMudHJhY2tCeShkLml0ZW0pPT09dGhpcy5pdGVtcy50cmFja0J5KHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSkp''@;'; put 'put ''O2E/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oYS5pdGVtLGEuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMudmlydHVhbFNjcm9sbHx8c2V0VGltZW91dCgoKT0+e3RoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfSl9fWRhdGFDaGFuZ2VkKCl7dGhpcy5pdGVtcy5yZWZyZXNoKCl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEk3KSxHZShkZyksR2UocWIpLEdlKGVfKSxHZShLYiksR2UoTGRlKSxHZSh5RyksR2UoRW8pLEdlKFhmKSxHZSh2cyksR2UoSmkpLEdlKE1tKSxHZShpcyksR2Uock8pLEdlKFdhKSl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoYW8oaCxSZGUsNSksYW8oaCxKYiw1KSxhbyhoLGdHLDUpLGFvKGgsUjcsNCksYW8oaCxFbSw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYo''@;'; put 'put ''ZC52aXJ0dWFsU2Nyb2xsPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLml0ZXJhdG9yPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLnBsYWNlaG9sZGVyPWYuZmlyc3QpLENpKGY9U2koKSkmJihkLmNvbHVtbnM9ZiksQ2koZj1TaSgpKSYmKGQucm93cz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihh''@;'; put 'put ''LGQpe2lmKDEmYSYmKHFhKEJCZSw1LEppKSxxYShqQmUsNSxKaSkscWEoekJlLDUsRG8pLHFhKFVCZSw1LERvKSxxYShaQmUsNSxEbykscWEoV0JlLDUsRG8pLHFhKFlCZSw1LERvKSxxYShHQmUsNSkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuZGF0YWdyaWQ9aC5maXJzdCksQ2koaD1T''@;'; put 'put ''aSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCksQ2koaD1TaSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1u''@;'; put 'put ''cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxDaShoPVNpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpLENpKGg9U2koKSkmJihkLnNlbGVjdEFsbENoZWNrYm94PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntsb2FkaW5nTW9yZUl0ZW1zOltObi5Ob25lLCJjbHJMb2FkaW5nTW9yZUl0ZW1zIiwibG9hZGluZ01vcmVJdGVtcyJdLGNsckRn''@;'; put 'put ''U2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCIsY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwiLGNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6ImNsckRldGFpbEV4cGFu''@;'; put 'put ''ZGFibGVBcmlhTGFiZWwiLGNsckRnRGlzYWJsZVBhZ2VGb2N1czoiY2xyRGdEaXNhYmxlUGFnZUZvY3VzIixjdXN0b21TZWxlY3RBbGxFbmFibGVkOltObi5Ob25lLCJjbHJEZ0N1c3RvbVNlbGVjdEFsbEVuYWJsZWQiLCJjdXN0b21TZWxlY3RBbGxFbmFibGVkIl0sbG9hZGluZzpbTm4uTm9u''@;'; put 'put ''ZSwiY2xyRGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVjdGVkOltObi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbTm4uTm9uZSwiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xy''@;'; put 'put ''RGdQcmVzZXJ2ZVNlbGVjdGlvbiIscm93U2VsZWN0aW9uTW9kZTpbTm4uTm9uZSwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbTm4uTm9uZSwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xy''@;'; put 'put ''RGdTZWxlY3RlZENoYW5nZSIsc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2giLGN1c3RvbVNlbGVjdEFsbDoiY2xyRGdDdXN0b21TZWxlY3RBbGwifSxmZWF0dXJlczpbZGEoW2VfLHNPLHVnLE1tLGRnLEk3LEti''@;'; put 'put ''LHFiLEd4LFhmLExkZSxwRyxoZyx5RyxyT10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6S0JlLGRlY2xzOjM1LHZhcnM6OSxjb25zdHM6W1siZGF0YWdyaWQiLCIiXSxbImRhdGFncmlkVGFibGUiLCIiXSxbInByb2plY3RlZERpc3BsYXlDb2x1bW5zIiwiIl0sWyJkaXNwbGF5ZWRSb3dzIiwiIl0s''@;'; put 'put ''WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiLCIiXSxbImNhbGN1bGF0aW9uUm93cyIsIiJdLFsic2VsZWN0QWxsQ2hlY2tib3giLCIiXSxbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWzEsImRhdGFn''@;'; put 'put ''cmlkLXRhYmxlLXdyYXBwZXIiXSxbInJvbGUiLCJncmlkIiwidGFiaW5kZXgiLCItMSIsMSwiZGF0YWdyaWQtdGFibGUiXSxbInJvbGUiLCJyb3dncm91cCIsMSwiZGF0YWdyaWQtaGVhZGVyIl0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ciXSxbMSwiZGF0YWdyaWQtcm93LW1hc3Rl''@;'; put 'put ''ciIsImRhdGFncmlkLXJvdy1mbGV4Il0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXJvdy1hY3Rpb25z''@;'; put 'put ''IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxh''@;'; put 'put ''YmxlIl0sWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJkYXRhZ3JpZC1yb3dzIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1sb2FkaW5nIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtc3Bpbm5lciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi10''@;'; put 'put ''YWJsZSJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsiY2xhc3MiLCJjbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9s''@;'; put 'put ''LWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0''@;'; put 'put ''YWdyaWQtcm93LWxvYWRpbmciXSxbImNsck1lZGl1bSIsIiJdLFsxLCJkYXRhZ3JpZC1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoJEJlKSxZcigwKSxkZSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiZGl2Iiw5LDApKDUsImRpdiIsMTApKDYsImRpdiIsMTEs''@;'; put 'put ''MSkoOCwiZGl2IiwxMikoOSwiZGl2IiwxMykoMTAsImRpdiIsMTQpKDExLCJkaXYiLDE1KSxndCgxMixYQmUsMywxLCJkaXYiLDE2KSgxMyxKQmUsNCwxLCJkaXYiLDE3KSgxNCxRQmUsNCwxLCJkaXYiLDE4KSgxNSxlamUsNCwxLCJkaXYiLDE5KSxoZSgpLGRlKDE2LCJkaXYiLDIwKSxGbCgx''@;'; put 'put ''NyxudWxsLDIpLGhlKCkoKSgpKCksZGUoMTksImRpdiIsMjEpLGd0KDIwLHRqZSw1LDEsImNsci1kZy1yb3ciLDIyKSxGbCgyMSxudWxsLDMpLGd0KDIzLG5qZSw1LDEsImNsci1kZy1yb3ciLDIyKSxZcigyNCwxKSxndCgyNSxyamUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIiLDIzKSxoZSgp''@;'; put 'put ''KCkoKSgpLFlyKDI2LDIpLGd0KDI3LGlqZSwzLDAsImRpdiIsMjQpLGhlKCksWXIoMjgsMyksaGUoKSxkZSgyOSwiZGl2IiwyNSkoMzAsImRpdiIsMjYpLEZsKDMxLG51bGwsNCksaGUoKSxGbCgzMyxudWxsLDUpLGhlKCkpLDImYSYmKGZlKDMpLGhyKCJhcmlhLWhpZGRlbiIsISFkLmRldGFp''@;'; put 'put ''bFNlcnZpY2UuaXNPcGVufHxudWxsKSxmZSg5KSx4ZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLGZlKCkseGUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLlNpbmdsZSksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsZC5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLGZlKCkseGUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKDUpLHhlKCJuZ0lmIixkLmxvYWRpbmdNb3JlSXRlbXMpLGZlKDMpLHhl''@;'; put 'put ''KCJuZ0lmIixkLmxvYWRpbmdNb3JlSXRlbXMpLGZlKDIpLHhlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciksZmUoMikseGUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3lhLGRzLE1kLG5sLCRzLFJkLFFmLGdHLEVtLGJHLFNwLFRtLGs3LEQ3XSxlbmNhcHN1bGF0aW9uOjJ9KSxj''@;'; put 'put ''fSkoKTtjb25zdCBHWmU9Yz0+YztsZXQgT2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5hbGxTZWxlY3RlZD1uZXcgS3J9Z2V0IGNsckFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuYWxsU2Vs''@;'; put 'put ''ZWN0ZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbEhpZGVhYmxlc1Zpc2libGUoKXtyZXR1cm4gMD09PXRoaXMuaGlkZWFibGVDb2x1bW5zKCkuZmlsdGVyKGE9PmEudmFsdWUuaGlkZGVuKS5sZW5ndGh9c2VsZWN0QWxsKCl7dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5mb3JFYWNoKGE9PnRoaXMu''@;'; put 'put ''Y29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2hpZGRlbjohMSxjaGFuZ2VzOltXMS5ISURERU5dfSkpLHRoaXMuYWxsU2VsZWN0ZWQubmV4dCghMCl9aGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoYT0+YS52YWx1ZS5o''@;'; put 'put ''aWRlYWJsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlzKSxHZShoZykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iXV0sb3V0cHV0czp7Y2xyQWxsU2VsZWN0ZWQ6''@;'; put 'put ''ImNsckFsbFNlbGVjdGVkIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwic3dpdGNoLWJ1dHRvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRv''@;'; put 'put ''biIsMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdEFsbCgpfSksT2UoMSksaGUoKSksMiZhJiYoeGUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2libGUpLGZlKCksRHIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCwiICIpKX0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSksY30pKCksUGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLnBvcG92ZXJJZD1NdSgpLHRoaXMub3BlblN0YXRlPSExLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpoMS5WRVJU''@;'; put 'put ''SUNBTCxzaWRlOlIyLkJFRk9SRSxhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sdGhpcy50cmFja0J5Rm49R1plLHRoaXMuc3Vic2NyaXB0aW9uPWgub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+dGhpcy5vcGVuU3RhdGU9Zil9Z2V0IGFsbENvbHVtbnNWaXNpYmxlKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2FsbENvbHVtbnNWaXNpYmxlfXNldCBhbGxDb2x1bW5zVmlzaWJsZShhKXt0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZT1hfWdldCBoaWRlYWJsZUNvbHVtblN0YXRlcygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGQ9PmQudmFsdWUuaGlkZWFibGUp''@;'; put 'put ''Lm1hcChkPT5kLnZhbHVlKX1nZXQgaGFzT25seU9uZVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aC10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmxlbmd0aD09MCYmMT09PXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMuZmlsdGVyKGQ9''@;'; put 'put ''PiFkLmhpZGRlbikubGVuZ3RofW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX10b2dnbGVDb2x1bW5TdGF0ZShhLGQpe2NvbnN0IGg9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihmPT5mLnZhbHVlPT09YSlbMF07dGhpcy5jb2x1bW5zU2Vy''@;'; put 'put ''dmljZS5lbWl0U3RhdGVDaGFuZ2UoaCx7aGlkZGVuOmQsY2hhbmdlczpbVzEuSElEREVOXX0pfXRvZ2dsZVN3aXRjaFBhbmVsKCl7dGhpcy5vcGVuU3RhdGU9IXRoaXMub3BlblN0YXRlfWFsbENvbHVtbnNTZWxlY3RlZCgpe3RoaXMuYWxsU2VsZWN0ZWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQu''@;'; put 'put ''Zm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaXMpLEdlKGhnKSxHZShzYykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtp''@;'; put 'put ''ZigxJmEmJnFhKG9qZSw1LEppKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY29sdW1uLXN3aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVu''@;'; put 'put ''U3RhdGUpfSxmZWF0dXJlczpbdmQoW29nXSldLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJhbGxTZWxlY3RlZCIsIiJdLFsicm9sZSIsImJ1dHRvbiIsInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiYnRuIiwi''@;'; put 'put ''YnRuLXNtIiwiY29sdW1uLXRvZ2dsZS0tYWN0aW9uIl0sWyJjbGFzcyIsImNvbHVtbi1zd2l0Y2giLCJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRz''@;'; put 'put ''aWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwxLCJjb2x1bW4tc3dpdGNoIiwzLCJpZCJdLFsxLCJzd2l0Y2gtaGVhZGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwxLCJjbHItc3Itb25seSJd''@;'; put 'put ''LFsiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJ0b2dnbGUtc3dpdGNoLWNsb3NlLWJ1dHRvbiJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwiY2xyLXNyLW9ubHki''@;'; put 'put ''XSxbMSwic3dpdGNoLWNvbnRlbnQiLCJsaXN0LXVuc3R5bGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJzd2l0Y2gtZm9vdGVyIl0sWzMsImNsckFsbFNlbGVjdGVkIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwxKSxPZSgxKSxoZSgpLGd0KDIsY2plLDE1LDksImRpdiIsMikpLDImYSYmKGhyKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92''@;'; put 'put ''ZXJJZCkoImFyaWEtZXhwYW5kZWQiLGQub3BlblN0YXRlKSgiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSxmZSgpLERyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLGZlKCkseGUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW5TdGF0ZSkoImNsclBvcG92ZXJDb250''@;'; put 'put ''ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSl9LGRlcGVuZGVuY2llczpbbnMsTjEsWmIscnMsZHMsSWQsU2gsTWQsbmwsJHMsUHgsTDFlLE54LEh4LE9k''@;'; put 'put ''ZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50PWEsYSYmYS5yZWdpc3RlcigpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50JiZ0aGlzLmV4cGFuZGFibGVSb3dzQ291''@;'; put 'put ''bnQudW5yZWdpc3RlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxYiw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV19KSxjfSkoKSxjTz0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5kZXRhaWxTZXJ2aWNlPWQsdGhpcy5jb2x1bW5zU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuU0VMRUNUSU9OX1RZUEU9cGx9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtbnNT''@;'; put 'put ''ZXJ2aWNlLmhhc0hpZGVhYmxlQ29sdW1uc319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZV8pLEdlKFhmKSxHZShoZyksR2UoaXMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWZvb3RlciJdXSxob3N0VmFy''@;'; put 'put ''czoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6aGplLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1m''@;'; put 'put ''b290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoc2EoZGplKSxndCgwLGZqZSw4LDIsIm5nLWNvbnRhaW5lciIsMCkoMSxnamUsNCwxLCJuZy1jb250YWluZXIiLDApLFlyKDIpKSwyJmEmJih4ZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQu''@;'; put 'put ''bGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLCFkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbeWEsZHMsSWQsU2gsUGRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBfRz1uZXcgTXQoIkNPTFVNTl9TVEFURSIpLFhaZT17cHJvdmlkZTpfRyx1c2VGYWN0b3J5''@;'; put 'put ''OmZ1bmN0aW9uIHFaZSgpe3JldHVybiBuZXcgZWkoe2NoYW5nZXM6W119KX19O2xldCBYeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9TXUoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlz''@;'; put 'put ''LnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKE1tKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1k''@;'; put 'put ''Zy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6W05uLk5vbmUsImNsclBhZ2VTaXplT3B0aW9ucyIsInBhZ2VTaXplT3B0aW9ucyJdLHBhZ2VTaXplT3B0aW9uc0lkOltObi5Ob25lLCJjbHJQYWdlU2l6ZU9wdGlvbnNJZCIsInBhZ2VTaXplT3B0aW9uc0lkIl19LG5nQ29u''@;'; put 'put ''dGVudFNlbGVjdG9yczpibyxkZWNsczo1LHZhcnM6Nixjb25zdHM6W1szLCJmb3IiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWzMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGRlKDAsImxhYmVsIiwwKSxZcigxKSxoZSgpLGRlKDIsImRpdiIsMSkoMywic2VsZWN0IiwyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIG1pKGQucGFnZS5zaXplLGYpfHwoZC5wYWdlLnNpemU9ZiksZn0pLGd0KDQs''@;'; put 'put ''bWplLDIsMiwib3B0aW9uIiwzKSxoZSgpKCkpLDImYSYmKHhlKCJmb3IiLGQucGFnZVNpemVPcHRpb25zSWQpLGZlKDMpLFRyKCJjbHItcGFnZS1zaXplLXNlbGVjdCIsITApLHhlKCJpZCIsZC5wYWdlU2l6ZU9wdGlvbnNJZCkscGkoIm5nTW9kZWwiLGQucGFnZS5zaXplKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0Zvck9mIixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W25zLGRzLEEyLGsyLFQyLG5sLCRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx1Tz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRl''@;'; put 'put ''dGFpbFNlcnZpY2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBLcighMSksYS5hY3RpdmF0ZWQ9ITB9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMucGFnZS5zaXplfXNldCBwYWdlU2l6ZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2Uuc2l6ZT1hKX1nZXQgdG90YWxJdGVt''@;'; put 'put ''cygpe3JldHVybiB0aGlzLnBhZ2UudG90YWxJdGVtc31zZXQgdG90YWxJdGVtcyhhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UudG90YWxJdGVtcz1hKX1nZXQgbGFzdFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3R9c2V0IGxhc3RQYWdlKGEpeyJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''YSYmKHRoaXMucGFnZS5sYXN0PWEpfWdldCBjdXJyZW50UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UuY3VycmVudH1zZXQgY3VycmVudFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmN1cnJlbnQ9YSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UuZmlyc3RJ''@;'; put 'put ''dGVtfWdldCBsYXN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdEl0ZW19Z2V0IG1pZGRsZVBhZ2VzKCl7Y29uc3QgYT1bXTtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnQ+MSYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50LTEpLGEucHVzaCh0aGlzLnBhZ2UuY3VycmVudCksdGhpcy5wYWdl''@;'; put 'put ''LmN1cnJlbnQ8dGhpcy5wYWdlLmxhc3QmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudCsxKSxhfW5nT25Jbml0KCl7dGhpcy5wYWdlLnNpemV8fCh0aGlzLnBhZ2Uuc2l6ZT0xMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbj10aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmN1cnJl''@;'; put 'put ''bnRDaGFuZ2VkLmVtaXQoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5wYWdlLnJlc2V0UGFnZVNpemUoITApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb24mJnRoaXMuX3BhZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcmV2aW91cygpe3RoaXMucGFnZS5wcmV2aW91cygpfW5leHQoKXt0aGlz''@;'; put 'put ''LnBhZ2UubmV4dCgpfXZlcmlmeUN1cnJlbnRQYWdlKGEpe3BhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKSE9PXRoaXMucGFnZS5jdXJyZW50JiYoYS50YXJnZXQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQpfXVwZGF0ZUN1cnJlbnRQYWdlKGEpe2NvbnN0IGQ9cGFyc2VJbnQoYS50YXJnZXQu''@;'; put 'put ''dmFsdWUsMTApO2lzTmFOKGQpfHwodGhpcy5wYWdlLmN1cnJlbnQ9ZDwxPzE6ZD50aGlzLnBhZ2UubGFzdD90aGlzLnBhZ2UubGFzdDpkKSx0aGlzLmN1cnJlbnRQYWdlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudC50b1N0cmluZygpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShNbSksR2UoaXMpLEdlKFhmKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsWHgs''@;'; put 'put ''NSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJnFhKHZqZSw1KSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFy''@;'; put 'put ''czoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbTm4uTm9uZSwiY2xyRGdQYWdlSW5wdXREaXNhYmxlZCIsImRpc2FibGVDdXJyZW50UGFnZUlucHV0Il0scGFnZVNpemU6W05uLk5v''@;'; put 'put ''bmUsImNsckRnUGFnZVNpemUiLCJwYWdlU2l6ZSJdLHRvdGFsSXRlbXM6W05uLk5vbmUsImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbTm4uTm9uZSwiY2xyRGdMYXN0UGFnZSIsImxhc3RQYWdlIl0sY3VycmVudFBhZ2U6W05uLk5vbmUsImNsckRnUGFnZSIsImN1''@;'; put 'put ''cnJlbnRQYWdlIl19LG91dHB1dHM6e2N1cnJlbnRDaGFuZ2VkOiJjbHJEZ1BhZ2VDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6YmplLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJyZWFkT25seSIsIiJdLFsiY3VycmVudFBhZ2VJbnB1dCIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsInBh''@;'; put 'put ''Z2luYXRpb24tc2l6ZSIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uIl0sWyJjbGFzcyIsInBhZ2luYXRpb24tbGlzdCIsNCwibmdJZiJdLFsxLCJwYWdpbmF0aW9uLXNpemUiXSxbMSwicGFnaW5hdGlvbi1saXN0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9u''@;'; put 'put ''LWZpcnN0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImNsci1zci1vbmx5Il0sWyJzaGFwZSIsInN0ZXAtZm9yd2FyZC0yIiwiZGlyZWN0aW9uIiwiZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1wcmV2aW91cyIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUi''@;'; put 'put ''LCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInR5cGUiLCJ0ZXh0IiwiY2xhc3MiLCJwYWdpbmF0aW9uLWN1cnJlbnQgY2xyLWlucHV0IiwzLCJzaXplIiwidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJw''@;'; put 'put ''YWdpbmF0aW9uLW5leHQiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1sYXN0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsInN0ZXAtZm9yd2FyZC0yIiwiZGly''@;'; put 'put ''ZWN0aW9uIiwidXAiXSxbInR5cGUiLCJ0ZXh0IiwxLCJwYWdpbmF0aW9uLWN1cnJlbnQiLCJjbHItaW5wdXQiLDMsImtleWRvd24uZW50ZXIiLCJibHVyIiwic2l6ZSIsInZhbHVlIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24tY29tcGFjdCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezEmYSYmKHNhKHlqZSksZ3QoMCxNamUsNSwyLCJuZy1jb250YWluZXIiLDIpKDEseGplLDE0LDEwLCJuZy1jb250YWluZXIiLDIpKSwyJmEmJih4ZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pLGZlKCkseGUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOlt5YSxyc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMuZG9tQWRhcHRlcj1mLHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9dix0aGlzLmNvbHVt''@;'; put 'put ''bnNTZXJ2aWNlPU0sdGhpcy5jb2x1bW5TdGF0ZT1JLHRoaXMucmVzaXplRW1pdHRlcj1uZXcgS3IsdGhpcy53aWR0aFNldD0hMSx0aGlzLmF1dG9TZXQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoSmYuQ0xFQVJf''@;'; put 'put ''V0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWdldENvbHVtbldpZHRoU3RhdGUoKXtjb25zdCBhPXRoaXMuZGV0ZWN0U3RyaWN0V2lkdGgoKTtyZXR1cm57''@;'; put 'put ''d2lkdGg6dGhpcy5jb21wdXRlV2lkdGgoYSksc3RyaWN0V2lkdGg6YX19c2V0Q29sdW1uU3RhdGUoYSl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2FdPXRoaXMuY29sdW1uU3RhdGV9c2V0V2lkdGgoYSl7YS5zdHJpY3RXaWR0aD8odGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNp''@;'; put 'put ''emVkQnkmJih0aGlzLnJlc2l6ZUVtaXR0ZXIuZW1pdChhLndpZHRoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4IiksdGhpcy53aWR0aFNldD0hMSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsWGIpLHRoaXMuYXV0b1NldD0hMSk6KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFhiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGEud2lkdGgrInB4IiksdGhpcy53aWR0aFNldD0hMCx0''@;'; put 'put ''aGlzLmF1dG9TZXQ9ITApfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxLeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsS3gpfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0''@;'; put 'put ''JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCksdGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYYil9''@;'; put 'put ''ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVyUmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSksR2UoRW8p''@;'; put 'put ''LEdlKEk3KSxHZSh2bSksR2UoZkcpLEdlKGhnKSxHZShfRykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLG91dHB1dHM6e3Jlc2l6ZUVtaXR0ZXI6ImNsckRnQ29sdW1uUmVzaXplIn0sZmVhdHVyZXM6W2RhKFtmRyxYWmVdKV19KSxjfSko''@;'; put 'put ''KSx0V2U9KCgpPT57Y2xhc3MgY3t1c2VyRGVmaW5lZFdpZHRoKGEpe3JldHVybiAwfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiAwfXNjcm9sbFdpZHRoKGEpe3JldHVybiAwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiAwfWNsaWVudFJlY3QoYSl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxl''@;'; put 'put ''ZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fW1pbldpZHRoKGEpe3JldHVybiAwfWZvY3VzKGEpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7''@;'; put 'put ''Y29uc3QgbldlPWM9PnRsKGMpP25ldyB2bTpuZXcgdFdlO2xldCB0Xz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxpZSx1ZSx5ZSxFZSl7dGhpcy5kYXRhZ3JpZD1hLHRoaXMub3JnYW5pemVyPWQsdGhpcy5pdGVtcz1oLHRoaXMucGFnZT1mLHRoaXMuZWw9dix0''@;'; put 'put ''aGlzLnJlbmRlcmVyPU0sdGhpcy50YWJsZVNpemVTZXJ2aWNlPUcsdGhpcy5jb2x1bW5zU2VydmljZT1pZSx0aGlzLm5nWm9uZT11ZSx0aGlzLmtleU5hdmlnYXRpb249eWUsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1FZSx0aGlzLl9oZWlnaHRTZXQ9ITEsdGhpcy5zaG91bGRTdGFiaWxpemVD''@;'; put 'put ''b2x1bW5zPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW51bGwsdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DT01QVVRFX0NPTFVNTl9XSURUSFMpLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+dGhpcy5jb21wdXRlSGVhZGVyc1dpZHRoKCkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLnNpemVDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnJlc2V0RGF0YWdyaWRIZWlnaHQoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChJLnN0''@;'; put 'put ''YXRlQ2hhbmdlLnN1YnNjcmliZShqZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKGplKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdPbkluaXQoKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNv''@;'; put 'put ''bHVtbnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jb2x1bW5TdGF0ZUNoYW5nZWQoYSkpLG51bGw9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50JiYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKFthXSk9PnsodGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudHx8YS5pc0ludGVyc2VjdGluZykmJnRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiYodGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLmludGVyc2VjdGlvbk9ic2Vy''@;'; put 'put ''dmVyLmRpc2Nvbm5lY3QoKSl9KSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUoKCk9Pnt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3Ro''@;'; put 'put ''aXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5n''@;'; put 'put ''T25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCl9dG9nZ2xlRGV0YWlsUGFuZShhKXt0aGlzLmhlYWRlcnMmJihhJiYhdGhpcy5jb2x1bW5zU2VydmljZS5oYXNDYWNo''@;'; put 'put ''ZSgpPyh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNhY2hlKCksdGhpcy5jb2x1bW5zU2VydmljZS52aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChkLGgpPT57aD4wJiZ0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KGQuY29sdW1uSW5kZXgse2NoYW5nZXM6W1cxLkhJRERFTl0saGlk''@;'; put 'put ''ZGVuOmF9KX0pKTphfHx0aGlzLmNvbHVtbnNTZXJ2aWNlLnJlc2V0VG9MYXN0Q2FjaGUoKSl9c2V0dXBDb2x1bW5zKCl7dGhpcy5oZWFkZXJzLmZvckVhY2goKGEsZCk9PmEuc2V0Q29sdW1uU3RhdGUoZCkpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5zcGxpY2UodGhpcy5oZWFkZXJz''@;'; put 'put ''Lmxlbmd0aCksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShhLHtjaGFuZ2VzOltXMS5JTklUSUFMSVpFXSxjb2x1bW5JbmRleDpkfSl9KX1zaG91bGRDb21wdXRlSGVpZ2h0KCl7cmV0dXJuIXRo''@;'; put 'put ''aXMuX2hlaWdodFNldCYmdGhpcy5wYWdlLnNpemU+MCYmdGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPT09dGhpcy5wYWdlLnNpemV9Y29tcHV0ZURhdGFncmlkSGVpZ2h0KCl7Y29uc3QgYT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmhlaWdodDt0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IixhKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWln''@;'; put 'put ''aHRTZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aCxkPXRoaXMuaGVhZGVycy5tYXAoZj0+Zi5nZXRDb2x1bW5XaWR0aFN0YXRlKCkpO2xldCBoPSEwO3RoaXMuaGVhZGVycy5mb3JFYWNoKChmLHYpPT57Y29uc3QgTT17Y2hhbmdlczpbVzEu''@;'; put 'put ''V0lEVEhdLC4uLmRbdl19O00uc3RyaWN0V2lkdGh8fChoPSExKSxhPT09disxJiZoJiYoTS5zdHJpY3RXaWR0aD0wKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZUF0KHYsTSl9KX1jb2x1bW5TdGF0ZUNoYW5nZWQoYSl7aWYoIXRoaXMuaGVhZGVyc3x8bnVsbD09YS5jb2x1''@;'; put 'put ''bW5JbmRleClyZXR1cm47Y29uc3QgZD1hLmNvbHVtbkluZGV4O2EuY2hhbmdlcyYmYS5jaGFuZ2VzLmxlbmd0aCYmYS5jaGFuZ2VzLmZvckVhY2goaD0+e3N3aXRjaChoKXtjYXNlIFcxLldJRFRIOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0V2lkdGgoYSksdGhpcy5yb3dzLmZvckVhY2goZj0+''@;'; put 'put ''e2Y/LmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRXaWR0aChhKSxmLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0V2lkdGgoYSkpfSk7YnJlYWs7Y2FzZSBXMS5ISURERU46dGhpcy5oZWFkZXJzLmdl''@;'; put 'put ''dChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2YuY2VsbHMmJmYuY2VsbHMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCkuc2V0SGlkZGVuKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRIaWRkZW4oYSkpfSksdGhpcy51cGRhdGVDb2x1bW5TZXBhcmF0''@;'; put 'put ''b3JzVmlzaWJpbGl0eSgpLHRoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKTticmVhaztjYXNlIFcxLklOSVRJQUxJWkU6YS5oaWRlYWJsZSYmYS5oaWRkZW4mJih0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zi5zZXRDZWxsc1N0''@;'; put 'put ''YXRlKCksZi5leHBhbmRhYmxlUm93Py5zZXRDZWxsc1N0YXRlKCl9KSl9fSl9c3RhYmlsaXplQ29sdW1ucygpe3RoaXMuY29sdW1uc1NpemVzU3RhYmxlfHx0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3Rh''@;'; put 'put ''YmxlPSEwKX11cGRhdGVDb2x1bW5TZXBhcmF0b3JzVmlzaWJpbGl0eSgpe2NvbnN0IGE9dGhpcy5kYXRhZ3JpZC5jb2x1bW5zLmZpbHRlcihkPT4hZC5pc0hpZGRlbik7YS5mb3JFYWNoKChkLGgpPT57aD09PWEubGVuZ3RoLTE/ZC5zaG93U2VwYXJhdG9yPSExOmQuc2hvd1NlcGFyYXRvcnx8''@;'; put 'put ''KGQuc2hvd1NlcGFyYXRvcj0hMCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQW0pLEdlKEk3KSxHZShkZyksR2UoTW0pLEdlKEppKSxHZShFbyksR2UoWGYpLEdlKHBHKSxHZShoZyksR2UoV2EpLEdlKHJPKSxHZShFcykpfSxjLlx1MDI3''@;'; put 'put ''NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGFvKGgsTDcsNCksYW8oaCxUbSw0KSksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5oZWFkZXJzPWYpLENpKGY9U2koKSkmJihkLnJvd3M9''@;'; put 'put ''Zil9fSxmZWF0dXJlczpbZGEoW3twcm92aWRlOnZtLHVzZUZhY3Rvcnk6bldlLGRlcHM6W2lvXX1dKV19KSxjfSkoKSxyV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEJPZSxqT2Usdngsek9lLEEwZSxVT2UsazBlLFpPZSxXT2UpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSWmUsS0wsQXMsQ2RlLFJjLFBZLE8yLExaZSxTZGUsamIsVngsWVldfSksY30pKCksTmRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLHdHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lk''@;'; put 'put ''PW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVkSWQ9ImNsci1zdGFjay1sYWJlbC0iK011KCksdGhpcy5pZHx8KHRo''@;'; put 'put ''aXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1sYWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmaHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVmRlPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudD1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuZXhwYW5kZWQ9ITEsdGhpcy5leHBhbmRhYmxlPSExLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmZvY3VzZWQ9ITEsdGhpcy51bmlxdWVJZD1NdSgpLHRoaXMuX2NoYW5n''@;'; put 'put ''ZWRDaGlsZHJlbj0wLHRoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITEsdGhpcy5fY2hhbmdlZD0hMSxhJiZhLmFkZENoaWxkKCl9c2V0IHNldENoYW5nZWRWYWx1ZShhKXt0aGlzLl9jaGFuZ2VkPWEsdGhpcy5wYXJlbnQmJnRoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQmJihhP3RoaXMucGFyZW50Ll9j''@;'; put 'put ''aGFuZ2VkQ2hpbGRyZW4rKzp0aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuLS0pfWdldCBnZXRDaGFuZ2VkVmFsdWUoKXtyZXR1cm4gdGhpcy5fY2hhbmdlZHx8dGhpcy5fY2hhbmdlZENoaWxkcmVuPjAmJiF0aGlzLmV4cGFuZGVkfWdldCBvblN0YWNrTGFiZWxGb2N1cygpe3JldHVybiB0''@;'; put 'put ''aGlzLmV4cGFuZGFibGUmJiF0aGlzLmV4cGFuZGVkJiZ0aGlzLmZvY3VzZWR9Z2V0IGxhYmVsbGVkQnlJZCgpe3JldHVybiB0aGlzLnN0YWNrQmxvY2tUaXRsZS5pZH1nZXQgaGVhZGluZ0xldmVsKCl7cmV0dXJuIHRoaXMuYXJpYUxldmVsP3RoaXMuYXJpYUxldmVsKyIiOnRoaXMucGFyZW50''@;'; put 'put ''PyI0IjoiMyJ9Z2V0IGNhcmV0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCJ9Z2V0IHJvbGUoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyJidXR0b24iOm51bGx9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iMCI6bnVsbH1nZXQg''@;'; put 'put ''YXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT90aGlzLmV4cGFuZGVkPyJ0cnVlIjoiZmFsc2UiOm51bGx9bmdPbkluaXQoKXt0aGlzLl9mdWxseUluaXRpYWxpemVkPSEwfWFkZENoaWxkKCl7dGhpcy5leHBhbmRhYmxlPSEwfXRvZ2dsZUV4cGFuZChhKXtCZGUoYSl8fHRo''@;'; put 'put ''aXMuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRoaXMuZXhwYW5kZWQpKX1nZXRTdGFja0NoaWxkcmVuSWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZD9gY2xyLXN0YWNrLWNoaWxkcmVuLSR7dGhpcy51bmlxdWVJZH1g''@;'; put 'put ''Om51bGx9cHJldmVudERlZmF1bHRJZk5vdElucHV0RXZlbnQoYSl7QmRlKGEpfHxhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci1zdGFjay1ibG9jayJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLHdHLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuc3RhY2tCbG9ja1RpdGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MiZhJiYoaHIoInJvbGUiLCJoZWFkaW5nIikoImFyaWEtbGV2ZWwiLGQuaGVhZGluZ0xldmVsKSxUcigic3RhY2stYmxvY2siLCEwKSgic3RhY2stYmxvY2stZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJzdGFjay1ibG9jay1leHBhbmRhYmxlIixkLmV4cGFuZGFibGUpKCJzdGFjay1ibG9jay1j''@;'; put 'put ''aGFuZ2VkIixkLmdldENoYW5nZWRWYWx1ZSkoIm9uLWZvY3VzIixkLm9uU3RhY2tMYWJlbEZvY3VzKSl9LGlucHV0czp7ZXhwYW5kZWQ6W05uLk5vbmUsImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6W05uLk5vbmUsImNsclNiRXhwYW5kYWJsZSIsImV4cGFuZGFibGUi''@;'; put 'put ''XSxhcmlhTGV2ZWw6W05uLk5vbmUsImNsclN0YWNrVmlld0xldmVsIiwiYXJpYUxldmVsIl0sc2V0Q2hhbmdlZFZhbHVlOltObi5Ob25lLCJjbHJTYk5vdGlmeUNoYW5nZSIsInNldENoYW5nZWRWYWx1ZSJdfSxvdXRwdXRzOntleHBhbmRlZENoYW5nZToiY2xyU2JFeHBhbmRlZENoYW5nZSJ9''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczpEamUsZGVjbHM6OSx2YXJzOjksY29uc3RzOltbMSwic3RhY2stYmxvY2stbGFiZWwiLDMsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3BhY2UiLCJmb2N1cyIsImJsdXIiLCJpZCJdLFsic2hhcGUiLCJhbmdsZSIsImNs''@;'; put 'put ''YXNzIiwic3RhY2stYmxvY2stY2FyZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQsIm5nSWYiXSxbMSwic3RhY2stdmlldy1rZXkiXSxbMSwic3RhY2stYmxvY2stY29udGVudCJdLFsxLCJzdGFjay1jaGlsZHJlbiIsMywiY2xyRXhwYW5kVHJpZ2dlciJdLFsicm9sZSIs''@;'; put 'put ''InJlZ2lvbiIsMywiaGVpZ2h0Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJzdGFjay1ibG9jay1jYXJldCJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsInJlZ2lvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKGtqZSksZGUoMCwiZGl2IiwwKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5ZG93bi5zcGFjZSIs''@;'; put 'put ''ZnVuY3Rpb24oZil7cmV0dXJuIGQucHJldmVudERlZmF1bHRJZk5vdElucHV0RXZlbnQoZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxndCgxLElqZSwxLDEsImNkcy1pY29uIiwxKSgy''@;'; put 'put ''LFJqZSwyLDEsInNwYW4iLDIpLGRlKDMsImRpdiIsMyksWXIoNCksaGUoKSxkZSg1LCJkaXYiLDQpLFlyKDYsMSksaGUoKSgpLGRlKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksZ3QoOCxMamUsMiw0LCJkaXYiLDYpLGhlKCkpLDImYSYmKHhlKCJpZCIsZC51bmlxdWVJZCksaHIo''@;'; put 'put ''InJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxmZSgpLHhlKCJuZ0lmIixkLmV4cGFuZGFibGUpLGZlKCkseGUoIm5nSWYiLGQuZ2V0Q2hhbmdl''@;'; put 'put ''ZFZhbHVlKSxmZSg1KSx4ZSgiY2xyRXhwYW5kVHJpZ2dlciIsZC5leHBhbmRlZCksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W3lhLHJzLFZMXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBCZGUoYyl7Y29uc3QgbD1jPy50YXJnZXQ7cmV0dXJu''@;'; put 'put ''ISFsPy50YWdOYW1lJiZbIklOUFVUIiwiVEVYVEFSRUEiLCJCVVRUT04iLCJBIiwiU0VMRUNUIiwiT1BUSU9OIl0uaW5jbHVkZXMobC50YWdOYW1lKX1sZXQgQ0c9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay12aWV3Il1dLG5nQ29udGVudFNlbGVjdG9yczpQamUsZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwic3RhY2stdmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNhKE9qZSksWXIoMCksZGUoMSwiZGl2Iiww''@;'; put 'put ''KSxZcigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1RzLmFkZEljb25zKEViKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxj''@;'; put 'put ''Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsQXMsU2RlXX0pLGN9KSgpLE83PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnNlbGVjdGFibGU9ITEsdGhpcy5lYWdlcj0hMCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD1uZXcgV259fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGpkZT17cHJvdmlkZTpPNyx1c2VGYWN0b3J5OmZ1bmN0aW9uIG9XZShjKXtyZXR1cm4gY3x8bmV3IE83fSxkZXBzOltbbmV3IEkxLG5ldyBsZCxP''@;'; put 'put ''N11dfTtsZXQgemRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNjcmlwdGlvbj1kLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoaD0+eyFoJiZ0aGlzLnBhcmVudCYmIWEuZWFnZXIm''@;'; put 'put ''JmEucmVjdXJzaW9uJiZ0aGlzLnBhcmVudC5jbGVhckNoaWxkcmVuKCl9KSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zaG91bGRSZW5kZXIoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uJiYodGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFn''@;'; put 'put ''ZXJ8fCF0aGlzLmV4cGFuZFNlcnZpY2V8fHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZCl9Z2V0Q29udGV4dChhKXtyZXR1cm57JGltcGxpY2l0OmEubW9kZWwsY2xyTW9kZWw6YX19bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3Jp''@;'; put 'put ''YmUoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5wYXJlbnQ/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShPNyksR2UoVTEsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVj''@;'; put 'put ''dXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigicm9sZSIsZC5yb2xlKX0saW5wdXRzOntwYXJlbnQ6InBhcmVudCIsY2hpbGRyZW46ImNoaWxkcmVuIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFs0LCJu''@;'; put 'put ''Z0ZvciIsIm5nRm9yT2YiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZndCgwLEJqZSwyLDEsIm5nLWNvbnRhaW5lciIsMCksMiZhJiZ4ZSgibmdJZiIsZC5zaG91bGRSZW5kZXIoKSl9LGRlcGVu''@;'; put 'put ''ZGVuY2llczpbbnMseWEsTjFdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciAkdT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlVOU0VMRUNURUQ9MF09IlVOU0VMRUNURUQiLGNbYy5TRUxFQ1RFRD0xXT0iU0VMRUNURUQiLGNbYy5JTkRFVEVSTUlOQVRFPTJdPSJJTkRFVEVSTUlOQVRFIixj''@;'; put 'put ''fSgkdXx8e30pO2NsYXNzIFVkZXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IGVpKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBlaSgkdS5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhp''@;'; put 'put ''cy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4hKCF0aGlzLl9kaXNhYmxlZCYmIXRoaXMucGFyZW50Py5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe3RoaXMuX2Rpc2FibGVkPWx9ZGVzdHJveSgpe3RoaXMuc2VsZWN0ZWQuY29tcGxldGUo''@;'; put 'put ''KX1zZXRTZWxlY3RlZChsLGEsZCl7bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksZCYmbCE9PSR1LklOREVURVJNSU5BVEUmJnRoaXMuY2hpbGRyZW4mJnRoaXMuY2hpbGRyZW4uZm9yRWFjaChoPT57aC5kaXNhYmxlZHx8aC5zZXRTZWxlY3RlZChsLCEx''@;'; put 'put ''LCEwKX0pLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihsKXt0aGlzLmRpc2FibGVkfHx0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT0kdS5TRUxFQ1RFRD8kdS5VTlNFTEVDVEVE''@;'; put 'put ''OiR1LlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMu''@;'; put 'put ''cGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3QgZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlICR1LklOREVURVJNSU5BVEU6''@;'; put 'put ''aWYoZC5kaXNhYmxlZCljb250aW51ZTtyZXR1cm4gJHUuSU5ERVRFUk1JTkFURTtjYXNlICR1LlNFTEVDVEVEOmlmKGw9ITAsYSlyZXR1cm4gJHUuSU5ERVRFUk1JTkFURTticmVhaztkZWZhdWx0OmlmKGE9ITAsbClyZXR1cm4gJHUuSU5ERVRFUk1JTkFURX1yZXR1cm4gbD9hPyR1LlVOU0VM''@;'; put 'put ''RUNURUQ6JHUuU0VMRUNURUQ6JHUuVU5TRUxFQ1RFRH19Y2xhc3MgZE8gZXh0ZW5kcyBVZGV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1b''@;'; put 'put ''XSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVu''@;'; put 'put ''RmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBzV2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0JNKGwpPyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+''@;'; put 'put ''e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3JldHVybiBsLm1hcChhPT5uZXcgZE8oYSx0aGlzLHRoaXMuZ2V0Q2hpbGRy''@;'; put 'put ''ZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IFpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9ZCx0aGlzLmNkcj1ofW5nT25DaGFuZ2VzKCl7bGV0IGE7YT1BcnJheS5pc0FycmF5KHRoaXMubm9kZXMp''@;'; put 'put ''P3RoaXMubm9kZXMubWFwKGQ9Pm5ldyBkTyhkLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpOltuZXcgZE8odGhpcy5ub2RlcyxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpXSx0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRp''@;'; put 'put ''b258fCh0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb249dGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLnBpcGUoZm0oMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pKSx0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb249e3RlbXBs''@;'; put 'put ''YXRlOnRoaXMudGVtcGxhdGUscm9vdDphfX1uZ09uRGVzdHJveSgpe3RoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbiYmdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KEdlKFNsKSxHZShPNyksR2UoRXMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUmVjdXJzaXZlRm9yIiwiIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCIiXV0saW5wdXRzOntub2RlczpbTm4uTm9uZSwiY2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENo''@;'; put 'put ''aWxkcmVuOltObi5Ob25lLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsImdldENoaWxkcmVuIl19LGZlYXR1cmVzOlt3bF19KSxjfSkoKSxTRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNSZXF1ZXN0PW5ldyBXbix0aGlzLl9mb2N1c0NoYW5nZT1uZXcgV259''@;'; put 'put ''Z2V0IGZvY3VzUmVxdWVzdCgpe3JldHVybiB0aGlzLl9mb2N1c1JlcXVlc3QuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWZvY3VzTm9kZShhKXthJiZ0aGlzLl9mb2N1c1JlcXVlc3QubmV4dChhLm5vZGVJ''@;'; put 'put ''ZCl9YnJvYWRjYXN0Rm9jdXNlZE5vZGUoYSl7dGhpcy5mb2N1c2VkTm9kZUlkIT09YSYmKHRoaXMuZm9jdXNlZE5vZGVJZD1hLHRoaXMuX2ZvY3VzQ2hhbmdlLm5leHQoYSkpfWZvY3VzUGFyZW50KGEpe2EmJnRoaXMuZm9jdXNOb2RlKGEucGFyZW50KX1mb2N1c0ZpcnN0VmlzaWJsZU5vZGUo''@;'; put 'put ''KXt0aGlzLmZvY3VzTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzWzBdKX1mb2N1c0xhc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZExhc3RWaXNpYmxlSW5UcmVlKCkpfWZvY3VzTm9kZUFib3ZlKGEpe3RoaXMuZm9jdXNOb2RlKHRo''@;'; put 'put ''aXMuZmluZE5vZGVBYm92ZShhKSl9Zm9jdXNOb2RlQmVsb3coYSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUJlbG93KGEpKX1mb2N1c05vZGVTdGFydHNXaXRoKGEsZCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kQ2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCkpfWZpbmRTaWJsaW5n''@;'; put 'put ''cyhhKXtyZXR1cm4gYS5wYXJlbnQ/YS5wYXJlbnQuY2hpbGRyZW46dGhpcy5yb290Tm9kZU1vZGVsc31maW5kTGFzdFZpc2libGVJbk5vZGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZD1hLmNoaWxkcmVuO3JldHVybiB0''@;'; put 'put ''aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZShkW2QubGVuZ3RoLTFdKX1yZXR1cm4gYX1maW5kTmV4dEZvY3VzYWJsZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiBoPGQubGVuZ3RoLTE/ZFtoKzFdOmg9PT1k''@;'; put 'put ''Lmxlbmd0aC0xP3RoaXMuZmluZE5leHRGb2N1c2FibGUoYS5wYXJlbnQpOm51bGx9ZmluZExhc3RWaXNpYmxlSW5UcmVlKCl7cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoJiZ0aGlzLnJvb3RO''@;'; put 'put ''b2RlTW9kZWxzW3RoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoLTFdKX1maW5kTm9kZUFib3ZlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIDA9PT1oP2EucGFyZW50Omg+MD90aGlzLmZpbmRMYXN0VmlzaWJs''@;'; put 'put ''ZUluTm9kZShkW2gtMV0pOm51bGx9ZmluZE5vZGVCZWxvdyhhKXtyZXR1cm4gYT9hLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF06dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhKTpudWxsfWZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZihkLmV4''@;'; put 'put ''cGFuZGVkJiZkLmNoaWxkcmVuLmxlbmd0aD4wKWZvcihjb25zdCBoIG9mIGQuY2hpbGRyZW4pe2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKXtjb25zdCBoPXRoaXMuZmlu''@;'; put 'put ''ZFNpYmxpbmdzKGQpO2ZvcihsZXQgdj1oLmluZGV4T2YoZCkrMTt2PGgubGVuZ3RoO3YrKyl7Y29uc3QgST10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGhbdl0pO2lmKEkpcmV0dXJuIEl9cmV0dXJuIG51bGx9ZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpe2Zvcihjb25zdCBoIG9mIHRo''@;'; put 'put ''aXMucm9vdE5vZGVNb2RlbHMpe2lmKGQucGFyZW50JiZkLnBhcmVudD09PWgpY29udGludWU7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZE5vZGVTdGFydHNXaXRoKGEsZCl7cmV0dXJuIGQ/ZC50ZXh0Q29udGVudC5z''@;'; put 'put ''dGFydHNXaXRoKGEpP2Q6dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk6bnVsbH1maW5kQ2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD10aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTtpZihoKXJldHVy''@;'; put 'put ''biBoO2NvbnN0IGY9dGhpcy5maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCk7cmV0dXJuIGZ8fCh0aGlzLmZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXx8dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxkLnBhcmVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyBsV2UgZXh0ZW5kcyBVZGV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxkKHRoaXMpLHRoaXMuY2hpbGRyZW49W119''@;'; put 'put ''ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGwpO2E+LTEmJnRoaXMu''@;'; put 'put ''Y2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBmZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFjdGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVF''@;'; put 'put ''bGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgs''@;'; put 'put ''ImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksUGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5leHBhbmRTZXJ2aWNlPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy5m''@;'; put 'put ''b2N1c01hbmFnZXI9TSx0aGlzLmVsZW1lbnRSZWY9SSx0aGlzLnNlbGVjdGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgS3IsdGhpcy5TVEFURVM9JHUsdGhpcy5pc01vZGVsTG9hZGluZz0hMSx0aGlzLm5vZGVJZD1NdSgpLHRoaXMuY29udGVudENvbnRhaW5l''@;'; put 'put ''clRhYmluZGV4PS0xLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITEsdGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiIsdGhpcy50eXBlQWhlYWRLZXlFdmVudD1uZXcgV24sdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX21vZGVsPWgucmVjdXJzaW9uP0cudmlldz9HLnZpZXcuY29udGV4dC5jbHJN''@;'; put 'put ''b2RlbDpHLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgbFdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fbW9kZWwuZGlzYWJsZWQ9YX1n''@;'; put 'put ''ZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWV9c2V0IHNlbGVjdGVkKGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGU9ITAsKG51bGw9PT1hfHx0eXBlb2YgYT4idSIpJiYoYT0kdS5VTlNFTEVDVEVEKSwiYm9vbGVhbiI9PXR5cGVvZiBhJiYo''@;'; put 'put ''YT1hPyR1LlNFTEVDVEVEOiR1LlVOU0VMRUNURUQpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITAsdGhpcy5fbW9kZWwuc2V0U2VsZWN0ZWQoYSx0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcix0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlciksdGhpcy5za2lwRW1pdENoYW5nZT0hMX1nZXQgZXhw''@;'; put 'put ''YW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9YX1zZXQgY2xyRm9yVHlwZUFoZWFkKGEpe3RoaXMuX21vZGVsLnRleHRDb250ZW50PVdkZShhfHx0aGlzLmVsZW1lbnRSZWYubmF0aXZl''@;'; put 'put ''RWxlbWVudC50ZXh0Q29udGVudCl9Z2V0IGFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLmlzU2VsZWN0YWJsZSgpP3RoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09JHUuU0VMRUNURUQ6ISF0aGlzLnRyZWVOb2RlTGluaz8uYWN0aXZlfHxudWxsfWdldCB0cmVlTm9kZUxpbmsoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50cmVlTm9kZUxpbmtMaXN0JiZ0aGlzLnRyZWVOb2RlTGlua0xpc3QuZmlyc3R9Z2V0IGlzUGFyZW50KCl7cmV0dXJuIHRoaXMuX21vZGVsLmNoaWxkcmVuJiZ0aGlzLl9tb2RlbC5jaGlsZHJlbi5sZW5ndGg+MH1uZ09uSW5pdCgpe3RoaXMuX21vZGVsLmV4cGFuZGVkPXRoaXMu''@;'; put 'put ''ZXhwYW5kZWQsdGhpcy5fbW9kZWwuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5zZWxlY3RlZC5waXBlKCRsKCgpPT4hdGhpcy5za2lwRW1pdENoYW5nZSkpLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGEp''@;'; put 'put ''fSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQoYSksdGhpcy5fbW9kZWwuZXhwYW5kZWQ9YX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvY3VzTWFu''@;'; put 'put ''YWdlci5mb2N1c1JlcXVlc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLm5vZGVJZD09PWEmJnRoaXMuZm9jdXNUcmVlTm9kZSgpfSksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoZWNrVGFiSW5kZXgoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2go''@;'; put 'put ''dGhpcy5fbW9kZWwubG9hZGluZyQucGlwZShmbSgwKSkuc3Vic2NyaWJlKGE9PnRoaXMuaXNNb2RlbExvYWRpbmc9YSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudHlwZUFoZWFkS2V5RXZlbnQucGlwZShmbSgyMDApKS5zdWJzY3JpYmUoYT0+''@;'; put 'put ''e3RoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZVN0YXJ0c1dpdGgoYSx0aGlzLl9tb2RlbCksdGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnR8fCh0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1XZGUodGhpcy5lbGVt''@;'; put 'put ''ZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vZGVsLmRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWlzRXhwYW5kYWJsZSgpe3JldHVybiB0eXBlb2YgdGhpcy5leHBhbmRhYmxlPCJ1''@;'; put 'put ''Ij90aGlzLmV4cGFuZGFibGU6ISF0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kYWJsZXx8dGhpcy5pc1BhcmVudH1pc1NlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZX1mb2N1c1RyZWVOb2RlKCl7Y29uc3QgYT10aGlzLmNvbnRlbnRDb250YWluZXIu''@;'; put 'put ''bmF0aXZlRWxlbWVudDt0bCh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09YSYmKHRoaXMuc2V0VGFiSW5kZXgoMCksYS5mb2N1cygpLGEuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSkpfWJyb2FkY2FzdEZvY3VzT25D''@;'; put 'put ''b250YWluZXIoKXt0aGlzLmZvY3VzTWFuYWdlci5icm9hZGNhc3RGb2N1c2VkTm9kZSh0aGlzLm5vZGVJZCl9b25LZXlEb3duKGEpe3N3aXRjaChSWShhKSxJMihhLmtleSkpe2Nhc2UgZ2EuQXJyb3dVcDp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVBYm92ZSh0aGlzLl9tb2RlbCk7YnJl''@;'; put 'put ''YWs7Y2FzZSBnYS5BcnJvd0Rvd246dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQmVsb3codGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2UgZ2EuQXJyb3dSaWdodDp0aGlzLmV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCk7YnJlYWs7Y2FzZSBnYS5BcnJvd0xlZnQ6dGhpcy5jb2xsYXBzZU9yRm9j''@;'; put 'put ''dXNQYXJlbnQoKTticmVhaztjYXNlIGdhLkhvbWU6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpO2JyZWFrO2Nhc2UgZ2EuRW5kOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0xhc3RWaXNpYmxlTm9k''@;'; put 'put ''ZSgpO2JyZWFrO2Nhc2UgZ2EuRW50ZXI6dGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7Y2FzZSBnYS5TcGFjZTpjYXNlIGdhLlNwYWNlYmFyOmEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztkZWZhdWx0''@;'; put 'put ''OmlmKHRoaXMuX21vZGVsLnRleHRDb250ZW50JiZmdW5jdGlvbiBxemUoYyl7Y29uc3QgbD1jLmtleTtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpIT09bC50b1VwcGVyQ2FzZSgpfHxsPj0iMCImJmw8PSI5In0oYSkpcmV0dXJuIHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKz1hLmtleSx2b2lkIHRo''@;'; put 'put ''aXMudHlwZUFoZWFkS2V5RXZlbnQubmV4dCh0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcil9dGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9c2V0VGFiSW5kZXgoYSl7dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9YSx0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoInRhYmluZGV4IixhLnRvU3RyaW5nKCkpfWNoZWNrVGFiSW5kZXgoYSl7dGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5ub2RlSWQhPT1hJiYtMSE9PXRoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4JiZ0aGlzLnNldFRhYkluZGV4KC0xKX10b2dnbGVFeHBhbmRPclRyaWdn''@;'; put 'put ''ZXJEZWZhdWx0KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuaXNFeHBhbmRhYmxlKCkmJiF0aGlzLmlzU2VsZWN0YWJsZSgpP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hdGhpcy5leHBhbmRlZDp0aGlzLnRyaWdnZXJEZWZhdWx0QWN0aW9uKCkpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxk''@;'; put 'put ''KCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ/dGhpcy5pc1BhcmVudCYmdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQmVsb3codGhpcy5fbW9kZWwpOnRoaXMuaXNFeHBhbmRhYmxlKCkmJih0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApKX1jb2xsYXBzZU9yRm9jdXNQ''@;'; put 'put ''YXJlbnQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpKX10cmlnZ2VyRGVmYXVsdEFjdGlvbigpe3RoaXMudHJlZU5vZGVMaW5rP3RoaXMudHJlZU5v''@;'; put 'put ''ZGVMaW5rLmFjdGl2YXRlKCk6dGhpcy5pc1NlbGVjdGFibGUoKSYmdGhpcy5fbW9kZWwudG9nZ2xlU2VsZWN0aW9uKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaW8pLEdlKGMsMTIpLEdlKE83''@;'; put 'put ''KSxHZShVMSksR2UoaXMpLEdlKFNHKSxHZShKaSksR2UoRHMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLGZnLDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYm''@;'; put 'put ''KGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmcWEoamplLDcsSmkpLDImYSl7bGV0IGg7Q2koaD1TaSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiZUcigiY2xyLXRyZWUtbm9kZSIsITApKCJkaXNhYmxlZCIsZC5fbW9kZWwuZGlzYWJsZWQpfSxpbnB1dHM6e2V4cGFuZGFibGU6W05uLk5vbmUsImNsckV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sZGlzYWJsZWQ6W05uLk5vbmUsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxzZWxlY3Rl''@;'; put 'put ''ZDpbTm4uTm9uZSwiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOltObi5Ob25lLCJjbHJFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRm9yVHlwZUFoZWFkOiJjbHJGb3JUeXBlQWhlYWQifSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltkYShbamRlLFUxLHtwcm92aWRlOkR4LHVzZUV4aXN0aW5nOlUxfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VWplLGRlY2xzOjEyLHZhcnM6MTIsY29uc3RzOltbImNvbnRlbnRDb250YWluZXIiLCIiXSxbInRyZWVub2Rl''@;'; put 'put ''Q29udGVudCIsIiJdLFsicm9sZSIsInRyZWVpdGVtIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciIsMywia2V5ZG93biIsImZvY3VzIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsImNsYXNz''@;'; put 'put ''IiwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJkaXNhYmxlZCIsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2Jv''@;'; put 'put ''eCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY2hpbGRyZW4iXSxbMywicGFyZW50Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsMSwi''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLDEsImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5u''@;'; put 'put ''ZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiY2hhbmdlIiwiZm9jdXMiLCJpZCIsImRpc2FibGVkIiwi''@;'; put 'put ''Y2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsImZvciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsImNsci1zci1v''@;'; put 'put ''bmx5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7c2EoemplKSxkZSgwLCJkaXYiLDIsMCksRnQoImtleWRvd24iLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm9uS2V5RG93bih2KSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgp''@;'; put 'put ''LEN0KGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpKX0pLGd0KDIsWmplLDIsMiwiYnV0dG9uIiwzKSgzLFdqZSwyLDAsImRpdiIsNCkoNCxZamUsNCw2LCJkaXYiLDUpKDUsR2plLDIsMSwiZGl2Iiw2KSg2LEtqZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsSWMpLGhlKCksZGUoOCwi''@;'; put 'put ''ZGl2Iiw3KSxZcig5KSxZcigxMCwxKSxHdCgxMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsOCksaGUoKX0yJmEmJihUcigiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5kaXNhYmxlZCksaHIoImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJhcmlhLWV4cGFuZGVkIixkLmlzRXhw''@;'; put 'put ''YW5kYWJsZSgpP2QuZXhwYW5kZWQ6bnVsbCkoImFyaWEtc2VsZWN0ZWQiLGQuYXJpYVNlbGVjdGVkKSxmZSgyKSx4ZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoKSYmIWQuaXNNb2RlbExvYWRpbmcmJiFkLmV4cGFuZFNlcnZpY2UubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRTZXJ2''@;'; put 'put ''aWNlLmxvYWRpbmd8fGQuaXNNb2RlbExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKCkseGUoIm5nSWYiLCFkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxmZSgzKSx4ZSgiQHRvZ2dsZUNoaWxkcmVuQW5pbSIsZC5leHBhbmRTZXJ2''@;'; put 'put ''aWNlLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCIpLGhyKCJyb2xlIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPyJncm91cCI6bnVsbCksZmUoMykseGUoInBhcmVudCIsZC5fbW9kZWwpKX0sZGVwZW5kZW5jaWVzOlt5YSxOMSxycyx6ZGVd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2JoKCJ0b2dnbGVDaGlsZHJlbkFuaW0iLFtpdSgiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbdXMoe2hlaWdodDowfSksTTAoMjAwLHVzKHtoZWlnaHQ6IioifSkpXSksaXUoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW3VzKHtoZWln''@;'; put 'put ''aHQ6IioifSksTTAoMjAwLHVzKHtoZWlnaHQ6MH0pKV0pLFNMKCJleHBhbmRlZCIsdXMoe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxTTCgiY29sbGFwc2VkIix1cyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCk7ZnVuY3Rpb24gV2RlKGMpe3JldHVybiBjLnRvTG9jYWxl''@;'; put 'put ''TG93ZXJDYXNlKCkudHJpbSgpfWxldCBFaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2U9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5lbD1mLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlz''@;'; put 'put ''Ll9pc011bHRpU2VsZWN0YWJsZT0hMTtjb25zdCBNPXYucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnhkKGYubmF0aXZlRWxlbWVudCwiZm9jdXNpbiIpLnN1YnNjcmliZShJPT57SS50YXJnZXQ9PT1mLm5hdGl2ZUVsZW1lbnQmJihkLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpLGgucmVtb3ZlQXR0''@;'; put 'put ''cmlidXRlKGYubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSl9KSk7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goTSl9c2V0IGxhenkoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXI9IWF9Z2V0IGlzTXVsdGlTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlfW5n''@;'; put 'put ''QWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Um9vdE5vZGVzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5yb290Tm9kZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldE11bHRpU2VsZWN0YWJsZSgpLHRoaXMuc2V0Um9vdE5vZGVzKCl9KSl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldE11bHRpU2VsZWN0YWJsZSgpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUmJnRoaXMucm9vdE5vZGVzLmxlbmd0aD4wPyh0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMCx0aGlzLnJlbmRlcmVy''@;'; put 'put ''LnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpKToodGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0''@;'; put 'put ''YWJsZSIpKX1zZXRSb290Tm9kZXMoKXt0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2Uucm9vdE5vZGVNb2RlbHM9dGhpcy5yb290Tm9kZXMubWFwKGE9PmEuX21vZGVsKS5maWx0ZXIoYT0+IWEucGFyZW50KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''R2UoTzcpLEdlKFNHKSxHZShFbyksR2UoSmkpLEdlKFdhKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsUGQsNCksMiZhKXtsZXQgZjtDaShmPVNpKCkpJiYoZC5yb290''@;'; put 'put ''Tm9kZXM9Zil9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLCJ0cmVlIil9LGlucHV0czp7bGF6eTpbTm4uTm9uZSwiY2xyTGF6eSIsImxhenkiXX0sZmVhdHVyZXM6W2RhKFtqZGUsU0ddKV0s''@;'; put 'put ''bmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzMsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzMsImNoaWxkcmVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoKSxZcigwKSxndCgxLHFqZSwxLDEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDAp''@;'; put 'put ''KSwyJmEmJihmZSgpLHhlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24pKX0sZGVwZW5kZW5jaWVzOlt5YSx6ZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGRXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VHMuYWRkSWNvbnMoRWIpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxQWV19KSxjfSkoKSxoV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbcldlLGFXZSxkV2VdfSksY30pKCk7Y29uc3QgZldlPVsiaW5mbyIsIndhcm5pbmciLCJkYW5nZXIiLCJzdWNjZXNzIiwibmV1dHJhbCIsInVua25vd24iLCJsb2FkaW5nIl07bGV0IE1HPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5kZWZhdWx0SWNvblNoYXBlPSJpbmZvLXN0YW5kYXJkIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRU''@;'; put 'put ''eXBlfXNldCBhbGVydFR5cGUoYSl7ZldlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFsZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9h''@;'; put 'put ''bGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRo''@;'; put 'put ''aXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFzczoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0id2FybmluZy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtd2FybmluZyIsZC50aXRs''@;'; put 'put ''ZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy53YXJuaW5nO2JyZWFrO2Nhc2UiZGFuZ2VyIjpkLnNoYXBlPSJlcnJvci1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtZGFuZ2VyIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcjticmVhaztjYXNlInN1Y2Nlc3MiOmQu''@;'; put 'put ''c2hhcGU9InN1Y2Nlc3Mtc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXN1Y2Nlc3MiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3VjY2VzczticmVhaztjYXNlIm5ldXRyYWwiOmQuc2hhcGU9Im5vdGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhp''@;'; put 'put ''cy5jb21tb25TdHJpbmdzLmtleXMubmV1dHJhbDticmVhaztjYXNlInVua25vd24iOmQuc2hhcGU9ImhlbHAiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMudW5rbm93bjticmVhaztjYXNlImxvYWRpbmciOmQuc2hhcGU9ImxvYWRp''@;'; put 'put ''bmciLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMudW5rbm93bjticmVhaztkZWZhdWx0OmQuc2hhcGU9dGhpcy5kZWZhdWx0SWNvblNoYXBlLGQuY3NzQ2xhc3M9ImFsZXJ0LWluZm8iLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuaW5mb31yZXR1cm4gZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoaXMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxoTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5fY2hhbmdlPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXthIT09dGhpcy5fY3VycmVudCYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFuZ2Uu''@;'; put 'put ''bmV4dChhKSl9Z2V0IGFjdGl2ZUFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cyYmdGhpcy5hbGxBbGVydHMuZmlsdGVyKGE9PiFhLl9jbG9zZWQpfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxlcnRzW3RoaXMuY3VycmVudF19''@;'; put 'put ''c2V0IGN1cnJlbnRBbGVydChhKXt0aGlzLmN1cnJlbnQ9dGhpcy5hY3RpdmVBbGVydHMuaW5kZXhPZihhKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aHx8MH1tYW5hZ2UoYSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5hbGxBbGVydHM9YSx0aGlzLmN1cnJlbnQ9Im51bWJlciI9PXR5cGVvZiB0aGlzLl9jdXJyZW50P3RoaXMuX2N1cnJlbnQ6MCx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMuYWxsQWxlcnRz''@;'; put 'put ''LmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5jdXJyZW50Pj10aGlzLmFsbEFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmFsbEFsZXJ0cy5sZW5ndGgtMSkpfSl9bmV4dCgpe3RoaXMuX2N1cnJlbnQ9dGhpcy5jdXJyZW50PT09dGhpcy5hY3RpdmVBbGVy''@;'; put 'put ''dHMubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnQrMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1wcmV2aW91cygpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PTA9PT10aGlzLmN1cnJlbnQ/dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoLTE6dGhp''@;'; put 'put ''cy5jdXJyZW50LTEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfW9wZW4oKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50QWxlcnR8fCh0aGlzLl9jdXJyZW50PTApLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1jbG9zZShhKXsw''@;'; put 'put ''IT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYoYSYmKHRoaXMuX2N1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmN1cnJlbnQtMSkpLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEp4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuaWNvblNlcnZp''@;'; put 'put ''Y2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5ob3N0RWxlbWVudD1NLHRoaXMuaXNTbWFsbD0hMSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuaXNBcHBMZXZlbD0hMSx0aGlzLmNsckNsb3NlQnV0''@;'; put 'put ''dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWwsdGhpcy5fY2xvc2VkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNMaWdodHdlaWdodD0hMX1nZXQgaXNMaWdo''@;'; put 'put ''dHdlaWdodCgpe3JldHVybiB0aGlzLl9pc0xpZ2h0d2VpZ2h0fXNldCBpc0xpZ2h0d2VpZ2h0KGEpe3RoaXMuX2lzTGlnaHR3ZWlnaHQ9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZSh0aGlzLl9vcmlnQWxlcnRUeXBlKX1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuYWxl''@;'; put 'put ''cnRUeXBlfXNldCBhbGVydFR5cGUoYSl7dGhpcy5fb3JpZ0FsZXJ0VHlwZT1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKGEpfXNldCBhbGVydEljb25TaGFwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xv''@;'; put 'put ''c2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJvbVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNl''@;'; put 'put ''dCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuX2hpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIik6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmhvc3RF''@;'; put 'put ''bGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgp''@;'; put 'put ''PT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1jb25maWdBbGVydFR5cGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydFR5''@;'; put 'put ''cGU9YX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhpcy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxl''@;'; put 'put ''cnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5hY3RpdmVBbGVydHMmJnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2xvc2UoYSksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTUcpLEdlKEVzKSxHZShoTyw4KSxHZShpcyksR2UoRW8pLEdlKEppKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydCJdXSxpbnB1dHM6e2lzU21hbGw6W05uLk5vbmUsImNsckFsZXJ0U2l6ZVNt''@;'; put 'put ''YWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOltObi5Ob25lLCJjbHJBbGVydENsb3NhYmxlIiwiY2xvc2FibGUiXSxpc0FwcExldmVsOltObi5Ob25lLCJjbHJBbGVydEFwcExldmVsIiwiaXNBcHBMZXZlbCJdLGNsckNsb3NlQnV0dG9uQXJpYUxhYmVsOiJjbHJDbG9zZUJ1dHRvbkFyaWFMYWJl''@;'; put 'put ''bCIsaXNMaWdodHdlaWdodDpbTm4uTm9uZSwiY2xyQWxlcnRMaWdodHdlaWdodCIsImlzTGlnaHR3ZWlnaHQiXSxhbGVydFR5cGU6W05uLk5vbmUsImNsckFsZXJ0VHlwZSIsImFsZXJ0VHlwZSJdLGFsZXJ0SWNvblNoYXBlOltObi5Ob25lLCJjbHJBbGVydEljb24iLCJhbGVydEljb25TaGFw''@;'; put 'put ''ZSJdLGNsb3NlZDpbTm4uTm9uZSwiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVhdHVyZXM6W2RhKFtNR10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Ym8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNs''@;'; put 'put ''YXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1zbSIsImFsZXJ0LWxpZ2h0d2VpZ2h0IiwiYWxlcnQtYXBwLWxldmVsIiw0LCJuZ0lmIl0sWzEsImFsZXJ0IiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xp''@;'; put 'put ''Y2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihzYSgpLGd0KDAsSmplLDQsOCwiZGl2IiwwKSksMiZhJiZ4ZSgibmdJZiIsIWQuX2Nsb3NlZCl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbd3UseWEscnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFlkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTUcpKX0sYy5cdTAyNzVj''@;'; put 'put ''bXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250ZW50U2VsZWN0b3JzOmJvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsiY2xhc3MiLCJhbGVydC1zcGlubmVy''@;'; put 'put ''IiwiY2xySW5saW5lIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0LWljb24iLCJyb2xlIiwiaW1nIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCIiLDEsImFsZXJ0LXNwaW5uZXIiXSxbInJvbGUiLCJpbWciLDEsImFsZXJ0LWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihzYSgpLGRlKDAsImRpdiIsMCksZ3QoMSxRamUsMSwwLCJjbHItc3Bpbm5lciIsMSkoMixlemUsMSwyLCJjZHMtaWNvbiIsMiksaGUoKSxZcigzKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsImxvYWRpbmciPT09ZC5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''ImxvYWRpbmciIT09ZC5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkpfSxkZXBlbmRlbmNpZXM6W3lhLHJzLFJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxReD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksR2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3''@;'; put 'put ''IEtyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBLcn1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0''@;'; put 'put ''PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBwcmV2aW91c0FsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KDE9PT1hP3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ6YS0xKS50b1N0cmluZygp''@;'; put 'put ''LENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfWdldCBuZXh0QWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFs''@;'; put 'put ''ZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOihhPT09dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD8xOmErMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VD''@;'; put 'put ''aGFuZ2VzPXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UuZW1pdChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5lbWl0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuYWN0aXZlQWxlcnRzW2FdKX0pfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXMudW5zdWJzY3JpYmUoKX1wYWdlVXAoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm5leHQoKX1wYWdlRG93bigpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UucHJldmlvdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykoR2UoaE8pLEdlKGlzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMtcGFnZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJhbGVydHMtcGFnZXIiLCEwKX0saW5wdXRz''@;'; put 'put ''OntjdXJyZW50QWxlcnQ6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OltObi5Ob25lLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsImN1cnJlbnRBbGVydEluZGV4Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3Vy''@;'; put 'put ''cmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxkZWNsczo5LHZhcnM6Nixjb25zdHM6W1sxLCJhbGVydHMtcGFnZXItY29udHJvbCJdLFsxLCJhbGVydHMtcGFnZS1kb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJh''@;'; put 'put ''bGVydHMtcGFnZXItYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbMSwiYWxlcnRzLXBhZ2VyLXRleHQiXSxbMSwiYWxlcnRzLXBhZ2UtdXAiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlRG93bigpfSksR3QoMywiY2RzLWljb24iLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLE9lKDUpLGhlKCksZGUoNiwiZGl2Iiw1KSg3''@;'; put 'put ''LCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlVXAoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpKCkoKSksMiZhJiYoZmUoMiksaHIoImFyaWEtbGFiZWwiLGQucHJldmlvdXNBbGVydEFyaWFMYWJlbCksZmUoKSxocigidGl0bGUiLGQuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLnByZXZpb3VzKSxmZSgyKSxVdSgiIixkLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQrMSwiIC8gIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LCIiKSxmZSgyKSxocigiYXJpYS1sYWJlbCIsZC5uZXh0QWxlcnRBcmlhTGFiZWwpLGZlKCksaHIoInRpdGxlIixkLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5uZXh0KSl9LGRlcGVuZGVuY2llczpbcnNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgS3IoITEpLHRoaXMuY3Vy''@;'; put 'put ''cmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11''@;'; put 'put ''bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgp''@;'; put 'put ''e3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVu''@;'; put 'put ''KX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhp''@;'; put 'put ''cy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoaE8pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZhbyhoLEp4LDQpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiYWxlcnRz''@;'; put 'put ''IiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9''@;'; put 'put ''PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LW5ldXRyYWwiLCJuZXV0cmFsIj09ZC5jdXJyZW50QWxlcnRUeXBlKX0saW5wdXRzOntfaW5wdXRDdXJyZW50SW5kZXg6W05uLk5vbmUsImNsckN1cnJlbnRBbGVydEluZGV4IiwiX2lucHV0Q3VycmVudEluZGV4Il0sY3VycmVudEFsZXJ0OltO''@;'; put 'put ''bi5Ob25lLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOltkYShbaE9d''@;'; put 'put ''KV0sbmdDb250ZW50U2VsZWN0b3JzOm56ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1sxLCJhbGVydHMtd3JhcHBlciJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKHNh''@;'; put 'put ''KHR6ZSksZGUoMCwiZGl2IiwwKSxndCgxLHJ6ZSwxLDEsImNsci1hbGVydHMtcGFnZXIiLDEpLFlyKDIpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQ+MSkpfSxkZXBlbmRlbmNpZXM6W3lhLEdkZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAl''@;'; put 'put ''XXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksS2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhzWSxZT2UsR09lLCRPZSxsWSxLT2UsdngpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5''@;'; put 'put ''cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxBcyxOWSxqYl19KSxjfSkoKSxwV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1w''@;'; put 'put ''b3J0czpbS2RlXX0pLGN9KSgpLHFkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1l''@;'; put 'put ''bnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cih2cykpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFhkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5mYWRlTW92ZT0iZmFkZURvd24iLHRoaXMuYmFja2Ryb3A9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fc2Nyb2xsaW5nU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMubW9k''@;'; put 'put ''YWxTdGFja1NlcnZpY2U9aCx0aGlzLmNvbmZpZ3VyYXRpb249Zix0aGlzLm1vZGFsSWQ9TXUoKSx0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2VkPW5ldyBLcighMSksdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmNsb3NlLHRoaXMuc2l6ZT0ibWQiLHRoaXMuc3RhdGljQmFja2Ryb3A9ITAsdGhpcy5za2lwQW5pbWF0aW9uPSExLHRoaXMuc3RvcENsb3NlPSExLHRoaXMuYWx0Q2xvc2U9bmV3IEtyKCExKSx0aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2U9ITF9Z2V0IGZhZGVNb3ZlKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''c2tpcEFuaW1hdGlvbj8iIjp0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmV9c2V0IGZhZGVNb3ZlKGEpe3RoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZT1hfWdldCBiYWNrZHJvcCgpe3JldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFja2Ryb3B9bmdPbkNoYW5nZXMoYSl7IXRoaXMuYnlw''@;'; put 'put ''YXNzU2Nyb2xsU2VydmljZSYmYSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9vcGVuIikmJihhLl9vcGVuLmN1cnJlbnRWYWx1ZT8odGhpcy5fc2Nyb2xsaW5nU2VydmljZS5zdG9wU2Nyb2xsaW5nKCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFs''@;'; put 'put ''T3Blbih0aGlzKSk6dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpfW9wZW4oKXt0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMCx0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0''@;'; put 'put ''KCEwKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKX1iYWNrZHJvcENsaWNrKCl7dGhpcy5zdGF0aWNCYWNrZHJvcD90aGlzLnRpdGxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTp0aGlzLmNsb3NlKCl9Y2xvc2UoKXt0aGlzLnN0b3BDbG9zZT90aGlzLmFsdENs''@;'; put 'put ''b3NlLmVtaXQoITEpOiF0aGlzLmNsb3NhYmxlfHwhdGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITEpfWZhZGVEb25lKGEpeyJ2b2lkIj09PWEudG9TdGF0ZSYmKHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQoITEpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpKX1z''@;'; put 'put ''Y3JvbGxUb3AoKXt0aGlzLmJvZHlFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oMCwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UocWRlKSxHZShpcyksR2UoQWRlKSxHZShYZGUpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siY2xyLW1vZGFsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmFvKGgsaXplLDUpLDImYSl7bGV0IGY7Q2koZj1TaSgpKSYmKGQubW9kYWxDb250ZW50VGVtcGxhdGU9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEm''@;'; put 'put ''JihxYShDMWUsNSkscWEoUzFlLDUpKSwyJmEpe2xldCBoO0NpKGg9U2koKSkmJihkLnRpdGxlPWguZmlyc3QpLENpKGg9U2koKSkmJihkLmJvZHlFbGVtZW50UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJvcGVuIixkLl9vcGVu''@;'; put 'put ''KX0saW5wdXRzOntfb3BlbjpbTm4uTm9uZSwiY2xyTW9kYWxPcGVuIiwiX29wZW4iXSxjbG9zYWJsZTpbTm4uTm9uZSwiY2xyTW9kYWxDbG9zYWJsZSIsImNsb3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6W05uLk5vbmUsImNsck1vZGFsQ2xvc2VCdXR0b25BcmlhTGFiZWwiLCJjbG9z''@;'; put 'put ''ZUJ1dHRvbkFyaWFMYWJlbCJdLHNpemU6W05uLk5vbmUsImNsck1vZGFsU2l6ZSIsInNpemUiXSxzdGF0aWNCYWNrZHJvcDpbTm4uTm9uZSwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0JhY2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbTm4uTm9uZSwiY2xyTW9kYWxTa2lwQW5pbWF0''@;'; put 'put ''aW9uIiwic2tpcEFuaW1hdGlvbiJdLHN0b3BDbG9zZTpbTm4uTm9uZSwiY2xyTW9kYWxQcmV2ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OltObi5Ob25lLCJjbHJNb2RhbExhYmVsbGVkQnlJZCIsImxhYmVsbGVkQnkiXSxieXBhc3NTY3JvbGxTZXJ2aWNlOltObi5Ob25lLCJj''@;'; put 'put ''bHJNb2RhbE92ZXJyaWRlU2Nyb2xsU2VydmljZSIsImJ5cGFzc1Njcm9sbFNlcnZpY2UiXX0sb3V0cHV0czp7X29wZW5DaGFuZ2VkOiJjbHJNb2RhbE9wZW5DaGFuZ2UiLGFsdENsb3NlOiJjbHJNb2RhbEFsdGVybmF0ZUNsb3NlIn0sZmVhdHVyZXM6W2RhKFtdLFtxZGVdKSx3bF0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOm96ZSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1sidGl0bGUiLCIiXSxbImJvZHkiLCIiXSxbImNsYXNzIiwibW9kYWwiLDMsIm1vZGFsLWZ1bGwtc2NyZWVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwzLCJj''@;'; put 'put ''bGljayIsNCwibmdJZiJdLFsxLCJtb2RhbCJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLDMsImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIl0sWzEsImNsci1zci1vbmx5Il0sWyJjbGFzcyIsIm1vZGFsLWNv''@;'; put 'put ''bnRlbnQtd3JhcHBlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsIm1vZGFsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSJdLFsiY2RrRm9jdXNJbml0aWFsIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibW9kYWwtdGl0''@;'; put 'put ''bGUtd3JhcHBlciIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5LXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoc2EoYXplKSxndCgwLGN6ZSw3LDE2LCJkaXYiLDIpKDEsdXplLDEsMSwiZGl2IiwzKSksMiZhJiYoeGUoIm5nSWYiLGQuX29wZW4pLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLGQuYmFja2Ryb3ApKX0sZGVwZW5kZW5jaWVzOlt5YSxaYixyc10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYmgoImZhZGVNb3ZlIixbaXUoIiogPT4gZmFkZURvd24iLFt1cyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pLE0wKCIwLjJz''@;'; put 'put ''IGVhc2UtaW4tb3V0IildKSxpdSgiZmFkZURvd24gPT4gKiIsW00wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pKV0pLGl1KCIqID0+IGZhZGVMZWZ0IixbdXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgy''@;'; put 'put ''NSUsIDApIn0pLE0wKCIwLjJzIGVhc2UtaW4tb3V0IildKSxpdSgiZmFkZUxlZnQgPT4gKiIsW00wKCIwLjJzIGVhc2UtaW4tb3V0Iix1cyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSkpXSldKSxiaCgiZmFkZSIsW2l1KCJ2b2lkID0+ICoiLFt1cyh7b3BhY2l0''@;'; put 'put ''eTowfSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiLHVzKHtvcGFjaXR5Oi44NX0pKV0pLGl1KCIqID0+IHZvaWQiLFtNMCgiMC4ycyBlYXNlLWluLW91dCIsdXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLEt1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVy''@;'; put 'put ''ZXI9YSx0aGlzLmhvc3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2''@;'; put 'put ''ZShkLm5hdGl2ZUVsZW1lbnQpLHRoaXMudW5saXN0ZW5lcnMucHVzaChhLmxpc3RlbihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLCgpPT57dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCl9KSxhLmxpc3RlbihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRh''@;'; put 'put ''YkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJp''@;'; put 'put ''YnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH''@;'; put 'put ''ZShFbyksR2UoSmkpLEdlKFdhKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLGZPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyh2eCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLEtMLEFzLEFzXX0pLGN9KSgpLGdXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt''@;'; put 'put ''b2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxLTCxBcyxmTyxmTyxBc119KSxjfSkoKSxtV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1''@;'; put 'put ''MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCkseVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhxT2UsWE9lLHNZLGxZKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9''@;'; put 'put ''KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsQXMsamIsQXMsamJdfSksY30pKCksU1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtUcy5hZGRJY29ucyhzWSxsWSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLGZPLEtkZV19KSxjfSkoKSx6MD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtp''@;'; put 'put ''bXBvcnRzOltwV2UsaFdlLEFzLGZPLFBZLE8yLEJMLGxVZSxDZGUsaVplLFRVZSxTV2UsZ1dlLEt6ZSxqYixtV2UsVngseVdlXX0pLGN9KSgpLE1XZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5fc3Vi''@;'; put 'put ''c2NyaXB0aW9uPW5ldyBxdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5hbGVydENsb3NlZD0hMCx0aGlzLmRhdGE9e3VzZXI6bnVsbCxwYXNzOm51bGx9fW5nT25Jbml0KCl7IlJlZGlyZWN0ZWQiIT09dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJih0aGlz''@;'; put 'put ''Ll9zdWJzY3JpcHRpb249dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLnN1YnNjcmliZShkPT57dGhpcy5pc0FjdGl2ZT1kO2xldCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKTtoJiYoZD9oLmNsYXNzTGlzdC5hZGQoInNob3VsZC1sb2dpbiIpOmguY2xhc3NMaXN0LnJlbW92''@;'; put 'put ''ZSgic2hvdWxkLWxvZ2luIikpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3VibWl0KCl7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPSEwLHRoaXMuZGF0YS51c2VyJiZ0aGlzLmRhdGEucGFzcyYmdGhpcy5zYXNTZXJ2aWNlLmxvZ2luKHRo''@;'; put 'put ''aXMuZGF0YS51c2VyLHRoaXMuZGF0YS5wYXNzKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsYXx8KHRoaXMuZXJyb3JNc2c9IlVzZXJuYW1lIG9yIHBhc3N3b3JkIGludmFsaWQiLHRoaXMuYWxlcnRDbG9zZWQ9ITEpfSxhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5lcnJvck1zZz1hLHRoaXMuYWxlcnRDbG9zZWQ9ITF9KSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKFNkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9n''@;'; put 'put ''aW4iXV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWzEsImxvZ2luLXNpZGViYXItd3JhcHBlciJdLFsxLCJsb2dpbi1zaWRlYmFyIiwic2lkZUJhclByb3BzIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2Vz''@;'; put 'put ''L2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsImxvZ2luLWxvZ28iXSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGludCJdLFsxLCJsb2dpbi1ncm91cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1l''@;'; put 'put ''IiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIsMSwidXNlcm5hbWUiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlwZSIsInBhc3N3b3JkIiwicGxhY2Vob2xkZXIiLCJQYXNzd29yZCIsMSwi''@;'; put 'put ''cGFzc3dvcmQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJt''@;'; put 'put ''aXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxHdCgyLCJpbWciLDIpLGRlKDMsImZvcm0iLDMpLEZ0KCJu''@;'; put 'put ''Z1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zdWJtaXQoKX0pLGRlKDQsImxhYmVsIiw0KSg1LCJoMyIsNSksT2UoNiwiV2VsY29tZSB0byIpLGhlKCksT2UoNywiIERhdGEgQ29udHJvbGxlciAiKSxkZSg4LCJoNCIsNiksT2UoOSwiQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIp''@;'; put 'put ''LGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5kYXRhLnVzZXIsdil8fChoLmRhdGEudXNlcj12KSx2fSksaGUoKSxkZSgxMiwiaW5wdXQiLDkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gbWkoaC5kYXRhLnBhc3Msdil8fChoLmRhdGEucGFzcz12KSx2fSksaGUoKSxkZSgxMywiY2xyLWFsZXJ0IiwxMCksZ2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5hbGVydENsb3NlZCx2KXx8KGguYWxlcnRDbG9zZWQ9diksdn0pLGRl''@;'; put 'put ''KDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLE9lKDE2KSxoZSgpKCkoKSxkZSgxNywiYnV0dG9uIiwxMyksT2UoMTgsIiBMb2cgaW4gIiksaGUoKSgpKCkoKSxHdCgxOSwiZGl2IiwxNCksaGUoKSksMiZkJiYoVHIoImFjdGl2ZSIsaC5pc0FjdGl2ZSksZmUoMTEpLHBpKCJuZ01vZGVsIixo''@;'; put 'put ''LmRhdGEudXNlciksZmUoKSxwaSgibmdNb2RlbCIsaC5kYXRhLnBhc3MpLGZlKCkseGUoImNsckFsZXJ0VHlwZSIsImFsZXJ0LWRhbmdlciIpLHBpKCJjbHJBbGVydENsb3NlZCIsaC5hbGVydENsb3NlZCksZmUoMyksd3IoaC5lcnJvck1zZyksZmUoKSx4ZSgiY2xyTG9hZGluZyIsaC5sb2Fk''@;'; put 'put ''aW5nKSgiZGlzYWJsZWQiLGgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2w3LHFsLG5sLG83LCRzLGJwLEp4LFF4LGowLFAyLGRzLFoxXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHhXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDEwKSxPZSgxLCJsb2FkaW5n''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gRVdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTEpLE9lKDEsImxvYWRlZCIpLGhlKCkpfWZ1bmN0aW9uIFRXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDEyKSxPZSgxLCJmYWlsZWQiKSxoZSgpKX1mdW5jdGlvbiBBV2UoYyxsKXtpZigxJmMmJihkZSgwLCJw''@;'; put 'put ''IikoMSwiY29kZSIpLE9lKDIpLGhlKCksT2UoMywiIFx4YTAgIiksZ3QoNCx4V2UsMiwwLCJzcGFuIiw3KSg1LEVXZSwyLDAsInNwYW4iLDgpKDYsVFdlLDIsMCwic3BhbiIsOSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEucHJvZ3JhbSksZmUoMikseGUoIm5n''@;'; put 'put ''SWYiLGEucnVubmluZyksZmUoKSx4ZSgibmdJZiIsIWEucnVubmluZyYmYS5zdWNjZXNzZnVsKSxmZSgpLHhlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDUpLGd0KDEsQVdl''@;'; put 'put ''LDcsNCwicCIsNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7eGUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLGZlKCkseGUoIm5nRm9yT2YiLGEucmVxdWVzdHMpfX1sZXQgRFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yZXF1ZXN0''@;'; put 'put ''cz1bXSx0aGlzLl9sb2FkaW5nU3ViPW5ldyBxdH1uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe3RoaXMuX2xvYWRpbmdTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC1sb2FkaW5nLWluZGljYXRvciJdXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1sxLCJsb2FkaW5nLWluZGljYXRvciJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInNwaW5uZXItaW52ZXJzZSJdLFsiY2xy''@;'; put 'put ''U2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCIsMSwiaXMtaW5mbyJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJlcnJvciIsInNpemUiLCIyNCIsMSwiaXMtZXJyb3IiXSxbMywiY2xyUG9zaXRpb24iLDQsImNscklmT3BlbiJdLFszLCJj''@;'; put 'put ''bHJQb3NpdGlvbiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwicnVubmluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWNjZXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZhaWwiLDQsIm5nSWYiXSxbMSwicnVubmluZyJdLFsxLCJzdWNjZXNzIl0sWzEsImZhaWwiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImNsci1zaWducG9zdCIpLEd0KDIsInNwYW4iLDEpKDMsImNsci1pY29uIiwyKSg0LCJjbHItaWNvbiIsMyksZ3QoNSxrV2UsMiwyLCJjbHItc2lnbnBvc3QtY29udGVudCIsNCksaGUoKSgpKSwyJmQmJihmZSgyKSxfZCgi''@;'; put 'put ''ZGlzcGxheSIsaC5sb2FkaW5nPyJpbmxpbmUtYmxvY2siOiJub25lIiksZmUoKSxfZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIiksZmUoKSxfZCgiZGlzcGxheSIsIWgubG9h''@;'; put 'put ''ZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOltucyx5YSxIbCxMMixXTCxxMWUsWkxdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSVdlKGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2RzLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlRGFya01vZGUoITApKX0pLGhlKCl9fWZ1bmN0aW9uIFJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNkcy1pY29u''@;'; put 'put ''IiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRvZ2dsZURhcmtNb2RlKCExKSl9KSxoZSgpfX1mdW5jdGlvbiBMV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiaW1nIiwxNCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxmTSgi''@;'; put 'put ''c3JjIixhLmdldFBpY3R1cmVVcmwoKSxaQyl9fWZ1bmN0aW9uIE9XZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtUcigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0aCksZmUoKSx3cihhLmZhaWxlZFJlcXMubGVuZ3Ro''@;'; put 'put ''KX19ZnVuY3Rpb24gUFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO1RyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLGZlKCksd3IoYS5kZWJ1Z0xvZ3MubGVuZ3RoKX19ZnVuY3Rpb24gRldlKGMsbCl7MSZjJiZH''@;'; put 'put ''dCgwLCJjbHItaWNvbiIsMTcpfWZ1bmN0aW9uIEhXZShjLGwpezEmYyYmKHNpKDApLGRlKDEsImEiLDI4KSgyLCJzcGFuIiwyOSksT2UoMywiRG9jdW1lbnRhdGlvbiIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiBOV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZHJvcGRv''@;'; put 'put ''d24tbWVudSIsMTgpKDEsImRpdiIsMTksMCkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9aGEoMik7cmV0dXJuIEN0KExlKCkub25EZWJ1Z1Jvd0NsaWNrKGgsZikpfSksZGUoNCwiY2xyLXRvZ2dsZS13cmFwcGVyIiko''@;'; put 'put ''NSwiaW5wdXQiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnNhc2pzQ29uZmlnLmRlYnVnLGgpfHwoZi5zYXNqc0NvbmZpZy5kZWJ1Zz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChMZSgpLm9uRGVidWdNb2RlQ2hhbmdlKCkpfSksaGUoKSxkZSg2LCJsYWJlbCIpLE9lKDcsIkRlYnVnIE1vZGUiKSxoZSgpKCkoKSgpLGRlKDgsImEiLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9''@;'; put 'put ''KSxkZSg5LCJzcGFuIiksT2UoMTAsIlNBUyBSZXF1ZXN0cyIpLGhlKCkoKSxndCgxMSxIV2UsNCwwLCJuZy1jb250YWluZXIiLDcpLEd0KDEyLCJkaXYiLDIzKSxkZSgxMywiYSIsMjQpKDE0LCJzcGFuIiksT2UoMTUsIlN5c3RlbSIpLGhlKCkoKSxkZSgxNiwiYSIsMjUpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubG9nb3V0KGgpKX0pLGRlKDE3LCJzcGFuIiksT2UoMTgsIkxvZyBPdXQiKSxoZSgpLEd0KDE5LCJjbHItaWNvbiIsMjYpLGhlKCksZGUoMjAsImRpdiIsMjcpKDIxLCJzcGFuIiksT2UoMjIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1MZSgpO2ZlKDUpLHBpKCJuZ01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxmZSg2KSx4ZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxmZSgxMSksRHIoInYiLGEuY29tbWl0VmVyLCIiKX19bGV0IFZXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudXNlclNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5yZXFTdWI9bmV3IHF0LHRoaXMudXNlclN1Yj1uZXcgcXQsdGhpcy5hcHBMb2dzPVtdLHRoaXMuZGVidWdMb2dzPVtdLHRo''@;'; put 'put ''aXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLnJlcXVlc3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIix0aGlzLmRhcmtNb2RlPXRoaXMuZXZlbnRTZXJ2aWNlLmRhcmtNb2Rl''@;'; put 'put ''fW5nT25Jbml0KCl7dGhpcy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ny4wLjMiLnJlcGxhY2UoInYiLCIiKSsiLmdjMmUzYjM2In1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlRGFy''@;'; put 'put ''a01vZGUoYSl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoYSl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2VydmljZS5zZXREZWJ1''@;'; put 'put ''Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9uKCksS24udXNlckRyb3Bkb3duQ29uZmlnLmNsb3NlT25EZWJ1Z0NsaWNrJiZzZXRUaW1lb3V0KCgpPT57ZC5jbGljaygpfSwzMDApfWxvZ291dChhKXthLnByZXZlbnRE''@;'; put 'put ''ZWZhdWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGQpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0YXIvY29udGVu''@;'; put 'put ''dGB9Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKF9XKSxHZShCcyksR2UodmMpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt''@;'; put 'put ''cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWFjdGlvbnMiXV0sZGVjbHM6MTQsdmFyczo3LGNvbnN0czpbWyJkcm9wZG93bkl0ZW1EZWJ1ZyIsIiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaXplIiwi''@;'; put 'put ''bWQiLCJjbGFzcyIsInRoZW1lLXRvZ2dsZS1pY29uIGN1cnNvci1wb2ludGVyIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBv''@;'; put 'put ''aW50ZXIiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImFwcC1uYXYtZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIiwidXNlci1uYXYtdG9nZ2xl''@;'; put 'put ''Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90''@;'; put 'put ''dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbInNpemUiLCJtZCIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwibWQiLCJzaGFwZSIsInN1biIs''@;'; put 'put ''ImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhbHQiLCJwcm9maWxlIHBpY3R1cmUiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciJdLFsxLCJi''@;'; put 'put ''YWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbMSwidG9nZ2xlLXN3aXRjaCIsMywiY2xpY2siXSxbImlkIiwiZGVidWctdG9n''@;'; put 'put ''Z2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbMSwic2VwYXJhdG9yIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGluayIsIi9zeXN0ZW0iLCJjbHJEcm9wZG93''@;'; put 'put ''bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8i''@;'; put 'put ''LCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24tdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxndCgyLElXZSwxLDAsImNkcy1pY29uIiwzKSgzLFJXZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLEd0KDQsImFwcC1s''@;'; put 'put ''b2FkaW5nLWluZGljYXRvciIpLGRlKDUsImNsci1kcm9wZG93biIsNSkoNiwiYnV0dG9uIiw2KSg3LCJzcGFuIiksT2UoOCksaGUoKSxndCg5LExXZSwyLDEsInNwYW4iLDcpKDEwLE9XZSwyLDMsInNwYW4iLDgpKDExLFBXZSwyLDMsInNwYW4iLDkpKDEyLEZXZSwxLDAsImNsci1pY29uIiwx''@;'; put 'put ''MCksaGUoKSxndCgxMyxOV2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDExKSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwhaC5kYXJrTW9kZS52YWx1ZSksZmUoKSx4ZSgibmdJZiIsISFoLmRhcmtNb2RlLnZhbHVlKSxmZSg1KSx3cihoLnVzZXJOYW1lKSxmZSgpLHhlKCJuZ0lm''@;'; put 'put ''IiwiTm90IGxvZ2dlZCBpbiIhPT1oLnVzZXJOYW1lJiZoLmlzVml5YSksZmUoKSx4ZSgibmdJZiIsIWguc2FzanNDb25maWcuZGVidWcpLGZlKCkseGUoIm5nSWYiLGguc2FzanNDb25maWcuZGVidWcpLGZlKCkseGUoIm5nSWYiLCFoLmlzVml5YSkpfSxkZXBlbmRlbmNpZXM6W3lhLE1kLG5s''@;'; put 'put ''LCRzLGMxLEhsLHJzLEwyLGRzLElkLEJiLFNoLHNnLGc3LG03LFZiLERXZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxkaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBXbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBCV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItYWxlcnQiLDIpLGdpKCJjbHJBbGVydENsb3NlZENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuY2xvc2VkLGgpfHwoZi5jbG9zZWQ9aCksQ3QoaCl9KSxGdCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uQWxlcnRDbG9zZSgpKX0pLGRl''@;'; put 'put ''KDEsImRpdiIsMykoMiwic3BhbiIsNCksT2UoMyksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSxwaSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xvc2VkKSxmZSgzKSxEcigiICIsYS5tZXNz''@;'; put 'put ''YWdlLCIgIil9fWZ1bmN0aW9uIGpXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1hbGVydHMiKSxndCgxLEJXZSw0LDQsImNsci1hbGVydCIsMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgeldlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBxdH1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVy''@;'; put 'put ''dHMucHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy''@;'; put 'put ''biBuZXcoZHx8YykoR2UoZGhlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xv''@;'; put 'put ''c2VkIiwiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCJdLFsxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsaldlLDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZkJiZ4ZSgibmdJZiIsaC5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W25zLHlhLEp4LCRkZSxReF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxwTz0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0czp7''@;'; put 'put ''Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYSIsMCksT2UoMSwic3Vw''@;'; put 'put ''cG9ydEBkYXRhY29udHJvbGxlci5pbyIpLGhlKCkpLDImZCYmKFRyKCJ1bnNldCIsIiIhPT1oLmNsYXNzZXMpLHhlKCJuZ0NsYXNzIixoLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOlt3dV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxoaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe3RoaXMub3B0aW9uc1N1YmplY3QkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQ9bmV3IFdufW9wZW4oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITAsLi4uYX0pLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV24sdGhpcy5yZXN1bHRDaGFuZ2UkLmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfWNsb3NlKGEpe3RoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITF9KSx0aGlzLnJlc3VsdENoYW5nZSQubmV4dCh7cGFzc3dvcmQ6YX0pLHRoaXMucmVzdWx0Q2hhbmdlJC5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFVXZShjLGwpezEmYyYmKGRlKDAsInAiLDEzKSxPZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qg''@;'; put 'put ''d29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIpKDEsImNsci1tb2RhbCIsMykoMiwiaDMiLDQpLE9lKDMsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDQsImRpdiIsNSkoNSwicCIs''@;'; put 'put ''NiksT2UoNiwiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGhlKCksZGUoNywiaW5wdXQiLDcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5wYXNzd29yZElucHV0LGgpfHwoZi5wYXNzd29yZElucHV0PWgpLEN0KGgpfSks''@;'; put 'put ''aGUoKSgpLGRlKDksImRpdiIsOCkoMTAsImRpdiIpLGd0KDExLFVXZSwyLDAsInAiLDkpLGhlKCksZGUoMTIsImRpdiIsMTApKDEzLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY2xvc2UoKSl9KSxPZSgxNCwiIENhbmNlbCAiKSxoZSgp''@;'; put 'put ''LGRlKDE1LCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSg4KTtyZXR1cm4gQ3QoTGUoKS5jbG9zZShoLnZhbHVlKSl9KSxPZSgxNiwiIFVubG9jayAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwubmdJZixkPWhhKDgpLGg9TGUoKTtm''@;'; put 'put ''ZSgpLHhlKCJjbHJNb2RhbE9wZW4iLGEub3BlbikoImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxwaSgibmdNb2RlbCIsaC5wYXNzd29yZElucHV0KSxmZSg0KSx4ZSgibmdJZiIsYS5lcnJvciksZmUoNCkseGUoImRpc2FibGVkIixkLnZhbHVlLmxl''@;'; put 'put ''bmd0aDwxKX19bGV0IFdXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMub3B0aW9ucyQ9dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wdGlvbnNTdWJqZWN0JCx0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0''@;'; put 'put ''aGlzLnBhc3N3b3JkSW5wdXQ9IiJ9Y2xvc2UoYSl7dGhpcy5wYXNzd29yZElucHV0PSIiLHRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5jbG9zZShhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShoaGUpKX19c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siZmlsZVBhc3N3b3JkSW5wdXQiLCIiXSxbImNsYXNzIiwiZXhjZWwtcGFzc3dvcmQtcm9vdCIsNCwibmdJZiJdLFsxLCJleGNlbC1wYXNz''@;'; put 'put ''d29yZC1yb290Il0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciJdLFsxLCJtLTAiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJuZ01vZGVsIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihndCgwLFpXZSwxNyw2LCJkaXYiLDEpLGVsKDEsImFzeW5jIikpLDImZCYmeGUoIm5nSWYiLERjKDEs''@;'; put 'put ''MSxoLm9wdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbeWEscWwsbmwsJHMsb3UsS3UsRU1dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksdEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmlsZU92ZXI9ITEsdGhpcy5maWxlRHJvcHBlZD1uZXcgS3IsdGhpcy5maWxl''@;'; put 'put ''RHJhZ2dlZE92ZXI9bmV3IEtyfW9uRHJhZ092ZXIoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jb250YWluc0ZpbGVzKGEpJiYhdGhpcy5maWxlT3ZlciYmKHRoaXMuZmlsZU92ZXI9ITAsdGhpcy5maWxlRHJhZ2dlZE92ZXIuZW1pdCgpKX1vbkRyYWdM''@;'; put 'put ''ZWF2ZShhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExfW9uZHJvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZpbGVPdmVyPSExO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXIuZmlsZXM7ZC5sZW5n''@;'; put 'put ''dGg+MCYmdGhpcy5maWxlRHJvcHBlZC5lbWl0KGQpfWNvbnRhaW5zRmlsZXMoYSl7aWYoYSYmYS5kYXRhVHJhbnNmZXImJmEuZGF0YVRyYW5zZmVyLnR5cGVzKWZvcihsZXQgZD0wO2Q8YS5kYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoO2QrKylpZigiRmlsZXMiPT1hLmRhdGFUcmFuc2Zlci50''@;'; put 'put ''eXBlc1tkXSlyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcERyYWdOZHJvcCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihkLGgpezEmZCYmRnQoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KSgiZHJvcCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25kcm9wKHYpfSksMiZkJiZUcigi''@;'; put 'put ''ZmlsZW92ZXIiLGguZmlsZU92ZXIpfSxvdXRwdXRzOntmaWxlRHJvcHBlZDoiZmlsZURyb3BwZWQiLGZpbGVEcmFnZ2VkT3ZlcjoiZmlsZURyYWdnZWRPdmVyIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGZoZT0oKT0+W107ZnVuY3Rpb24gWVdlKGMsbCl7MSZjJiYoZGUoMCwicCIsNiksT2Uo''@;'; put 'put ''MSwiTm8gcmVxdWVzdHMgbWFkZSIpLGhlKCkpfWZ1bmN0aW9uIEdXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJjbHItaWNvbiIsMTMpLGhlKCkpfWZ1bmN0aW9uICRXZShjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxHdCgxLCJjbHItaWNvbiIsMTQpLGhlKCkpfWZ1bmN0aW9uIEtX''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1MZSgzKS5pbmRleDtyZXR1cm4gQ3QoTGUoMikuZ29Ub0xvZ0xpbmUoaCwicmVxdWVzdF8iK2YsImVycm9yIikp''@;'; put 'put ''fSksZGUoMSwiYnV0dG9uIiwyMyksT2UoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYSwiICIpfX1mdW5jdGlvbiBxV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOSksR3QoMSwiY2xyLWljb24iLDIwKSxPZSgyKSxndCgz''@;'; put 'put ''LEtXZSwzLDEsImNsci10cmVlLW5vZGUiLDIxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKDIpLERyKCIgRXJyb3JzICgiLGEubG9nRXJyb3JzLmxlbmd0aCwiKSAiKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmxvZ0Vycm9yc3x8R3MoMixmaGUpKX19ZnVuY3Rpb24gWFdl''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDMpLmluZGV4O3JldHVybiBDdChMZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrZiwid2FybmluZyIp''@;'; put 'put ''KX0pLGRlKDEsImJ1dHRvbiIsMjMpLE9lKDIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gSldlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTkpLEd0KDEsImNsci1pY29uIiwyNCksT2UoMiksZ3Qo''@;'; put 'put ''MyxYV2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgyKSxEcigiIFdhcm5pbmdzICgiLGEubG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLGZlKCkseGUoIm5nRm9yT2YiLGEubG9nV2FybmluZ3N8fEdzKDIsZmhlKSl9fWZ1bmN0''@;'; put 'put ''aW9uIFFXZShjLGwpezEmYyYmR3QoMCwiZGl2IiwyNSksMiZjJiZ4ZSgiaW5uZXJIVE1MIixMZSgyKS4kaW1wbGljaXQubG9nRmlsZSxWNCl9ZnVuY3Rpb24gZVllKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDI2KSwyJmMmJnhlKCJ0ZXh0Q29udGVudCIsTGUoMikuJGltcGxpY2l0LmxvZ0ZpbGUp''@;'; put 'put ''fWZ1bmN0aW9uIHRZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikuZG93bmxvYWRMb2coaC5sb2dGaWxlKSl9KSxPZSgxLCIgRG93bmxv''@;'; put 'put ''YWQgIiksaGUoKX19ZnVuY3Rpb24gblllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxndCgyLHFXZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSgzLEpXZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSxoZSgpLGd0KDQsUVdlLDEsMSwiZGl2Iiwx''@;'; put 'put ''NikoNSxlWWUsMSwxLCJkaXYiLDE3KSg2LHRZZSwyLDAsImJ1dHRvbiIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKDIpLHhlKCJuZ0lmIixhLmxvZ0Vycm9ycyksZmUoKSx4ZSgibmdJZiIsYS5sb2dXYXJuaW5ncyksZmUoKSx4ZSgibmdJZiIsIlNB''@;'; put 'put ''U1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlKSxmZSgpLHhlKCJuZ0lmIiwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gclllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo''@;'; put 'put ''MCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxPZSgxLCIgRG93bmxvYWQgIiksaGUoKX19ZnVuY3Rpb24gaVllKGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksT2UoMiksaGUoKSxndCgzLHJZZSwyLDAsImJ1dHRvbiIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihhLnNvdXJjZUNvZGUpLGZlKCkseGUoIm5nSWYiLChudWxsPT1hLnNvdXJj''@;'; put 'put ''ZUNvZGU/bnVsbDphLnNvdXJjZUNvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gYVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5kb3du''@;'; put 'put ''bG9hZEdlbmVyYXRlZENvZGUoaC5nZW5lcmF0ZWRDb2RlKSl9KSxPZSgxLCIgRG93bmxvYWQgIiksaGUoKX19ZnVuY3Rpb24gb1llKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyOCksT2UoMiksaGUoKSxndCgzLGFZZSwyLDAsImJ1dHRvbiIsMTgpLGhl''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgyKSxEcigiICIsYS5nZW5lcmF0ZWRDb2RlLCIgIiksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEuZ2VuZXJhdGVkQ29kZT9udWxsOmEuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBzWWUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWgua2V5KX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1RyKCJz''@;'; put 'put ''ZWxlY3RlZCIsTGUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1hLmtleSksZmUoKSxEcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gbFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLHNZZSwyLDMsImRpdiIsMzMpLGVsKDIsImtleXZhbHVlIiks''@;'; put 'put ''aGUoKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixEYygyLDEsYS5TQVNXT1JLKSl9fWZ1bmN0aW9uIGNZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDM4KSgxLCJzdHJvbmciKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoMiksRHIoIiIsYS5zZWxlY3RlZFRhYmxlLCIgKGZpcnN0IDEwIHJvd3MpICIpfX1mdW5jdGlvbiB1WWUoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLERyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBkWWUo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIGhZZShjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiksZ3QoMSxkWWUsMiwxLCJ0ZCIsNDAp''@;'; put 'put ''LGVsKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixEYygyLDEsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKX19ZnVuY3Rpb24gZlllKGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDM5''@;'; put 'put ''KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyx1WWUsMiwxLCJ0aCIsNDApLGVsKDQsImtleXZhbHVlIiksaGUoKSgpLGRlKDUsInRib2R5IiksZ3QoNixoWWUsMywzLCJ0ciIsNDApLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpLiRpbXBsaWNpdDtmZSgzKSx4ZSgibmdGb3JPZiIsRGMoNCwy''@;'; put 'put ''LGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSksZmUoMykseGUoIm5nRm9yT2YiLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzKX19ZnVuY3Rpb24gcFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IiksZ3QoMSxjWWUs''@;'; put 'put ''MywxLCJwIiwzNSksZGUoMiwiZGl2IiwzNiksZ3QoMyxmWWUsNyw0LCJ0YWJsZSIsMzcpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpLGZlKDIpLHhlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpfX1mdW5jdGlvbiBn''@;'; put 'put ''WWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyOSkoMiwiYnV0dG9uIiwzMCksT2UoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSxHdCg0LCJjbHItaWNvbiIsMzEpLGhlKCksZ3QoNSxsWWUsMywzLCJjbHItZHJvcGRvd24tbWVudSIs''@;'; put 'put ''MzIpLGhlKCksZ3QoNixwWWUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKTtyZXR1cm4gbWkoZi50YWJsZXNBY3RpdmUsaCl8fChmLnRhYmxlc0FjdGl2ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDMpO2ZlKCkseGUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCksZmUoNSkscGkoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIG1ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1zdGFjay1ibG9jayIsOCkoMSwiY2xyLXN0''@;'; put 'put ''YWNrLWxhYmVsIiksT2UoMiksZGUoMywic3BhbiIsOSksZ3QoNCxHV2UsMiwwLCJzcGFuIiw1KSg1LCRXZSwyLDAsInNwYW4iLDUpLGhlKCkoKSxkZSg2LCJjbHItc3RhY2stY29udGVudCIpLE9lKDcpLGhlKCksZGUoOCwiY2xyLXN0YWNrLWJsb2NrIiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRl''@;'; put 'put ''bnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwiY2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxPZSgxMywiU0FTIExvZyIpLGhlKCksZ3QoMTQsblllLDcsNSwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMik7cmV0dXJu''@;'; put 'put ''IG1pKGYuc2FzTG9nQWN0aXZlLGgpfHwoZi5zYXNMb2dBY3RpdmU9aCksQ3QoaCl9KSxoZSgpLGRlKDE1LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLE9lKDE3LCJTQVMgU291cmNlIENvZGUiKSxoZSgpLGd0KDE4LGlZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZl''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLnNhc1NvdXJjZUNvZGVBY3RpdmUsaCl8fChmLnNhc1NvdXJjZUNvZGVBY3RpdmU9aCksQ3QoaCl9KSxoZSgpLGRlKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTEpLE9lKDIxLCJTQVMgR2VuZXJh''@;'; put 'put ''dGVkIENvZGUiKSxoZSgpLGd0KDIyLG9ZZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUsaCl8fChmLnNhc0dlbmVyYXRlZENvZGVBY3Rp''@;'; put 'put ''dmU9aCksQ3QoaCl9KSxoZSgpLGd0KDIzLGdZZSw3LDIsImNsci10YWIiLDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPUxlKDIpO3hlKCJpZCIsInJlcXVlc3RfIitkKSgiY2xyU3RhY2tWaWV3TGV2ZWwiLDEpLGZlKDIpLERyKCIgIixhLnNl''@;'; put 'put ''cnZpY2VMaW5rLCIgIiksZmUoMikseGUoIm5nSWYiLChudWxsPT1hLmxvZ1dhcm5pbmdzP251bGw6YS5sb2dXYXJuaW5ncy5sZW5ndGgpPjApLGZlKCkseGUoIm5nSWYiLChudWxsPT1hLmxvZ0Vycm9ycz9udWxsOmEubG9nRXJyb3JzLmxlbmd0aCk+MCksZmUoMiksd3IoYS5wYXJzZWRUaW1l''@;'; put 'put ''c3RhbXApLGZlKDcpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNMb2dBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFjdGl2ZSIsaC5zYXNTb3VyY2VDb2RlQWN0aXZlKSxmZSg0KSxwaSgiY2xySWZBY3RpdmUiLGguc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksZmUoKSx4ZSgibmdJZiIsYS5TQVNXT1JL''@;'; put 'put ''KX19ZnVuY3Rpb24gdlllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXN0YWNrLXZpZXciKSxndCgxLG1ZZSwyNCwxMCwiY2xyLXN0YWNrLWJsb2NrIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0Zvck9mIixhLnNhc2pzUmVxdWVzdHMpfX1sZXQgeVllPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Z2V0IG9wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9c2V0IG9wZW5lZChhKXt0aGlzLl9vcGVuZWQ9YSxhJiZ0aGlzLm1vZGFsT3BlbmVkKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLnNhc2pzUmVxdWVzdHMpfWNvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IEtyLHRoaXMuc2FzTG9nQWN0aXZlPSEwLHRoaXMuc2FzU291cmNlQ29kZUFjdGl2ZT0hMSx0aGlzLnNhc0dlbmVyYXRlZENvZGVBY3RpdmU9''@;'; put 'put ''ITEsdGhpcy50YWJsZXNBY3RpdmU9ITEsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNhc2pzUmVxdWVzdHM9W10sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVzdGFtcChhKXtyZXR1cm4gT28oYSkuZm9ybWF0KCk/T28oYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gT28oYSkuZm9ybWF0KCk/YCAoJHtPbyhhKS5m''@;'; put 'put ''cm9tTm93KCl9KWA6IiJ9bW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRo''@;'; put 'put ''aXMuc2FzanNSZXF1ZXN0cyl0aGlzLnBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7''@;'; put 'put ''Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7aWYoZilpZigiU0FTVklZQSI9PT10aGlzLnNlcnZlclR5cGUpe2NvbnN0IE09KGYudGV4dENvbnRlbnR8fCIiKS5zcGxpdCgiXG4iKTtsZXQgST0tMTtmb3IobGV0IHllPTA7eWU8TS5s''@;'; put 'put ''ZW5ndGg7eWUrKylpZihNW3llXS5pbmNsdWRlcyhhKSl7ST15ZTticmVha31pZigtMT09PUkpcmV0dXJuO2NvbnN0IEc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc05hbWU9InRlbXAtbGluZS1oZWlnaHQtY2FsYyIsRy50ZXh0Q29udGVudD0iWCIsZi5hcHBlbmRDaGls''@;'; put 'put ''ZChHKTtjb25zdCBpZT1HLmNsaWVudEhlaWdodDtmLnJlbW92ZUNoaWxkKEcpLGYuc2Nyb2xsVG9wPWllKkk7Y29uc3QgdWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dWUuY2xhc3NOYW1lPSJsaW5lLWhpZ2hsaWdodC1vdmVybGF5ICIrKCJlcnJvciI9PT1oPyJlcnJvci1oaWdo''@;'; put 'put ''bGlnaHQiOiJ3YXJuaW5nLWhpZ2hsaWdodCIpLHVlLmNsYXNzTGlzdC5hZGQoInRlbXAtaGVpZ2h0LXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLWhlaWdodCIsYCR7aWV9cHhgKSx1ZS5jbGFzc0xpc3QuYWRkKCJsaW5lLXBvc2l0''@;'; put 'put ''aW9uLXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLXRvcCIsaWUqSSsicHgiKSxmLmFwcGVuZENoaWxkKHVlKSxzZXRUaW1lb3V0KCgpPT57Zi5jb250YWlucyh1ZSkmJmYucmVtb3ZlQ2hpbGQodWUpfSwzZTMpfWVsc2V7Y29uc3Qg''@;'; put 'put ''dj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKTtmb3IobGV0IE0gb2YgQXJyYXkuZnJvbSh2KSlpZihNLnRleHRDb250ZW50Py5pbmNsdWRlcyhhKSl7Zi5zY3JvbGxUb3A9TS5vZmZzZXRUb3AtZi5vZmZzZXRUb3AsTS5jbGFzc0xp''@;'; put 'put ''c3QuYWRkKCJoaWdobGlnaHRlZC1saW5lIiksc2V0VGltZW91dCgoKT0+e00uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQtbGluZSIpfSwzZTMpO2JyZWFrfX19cGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5s''@;'; put 'put ''b2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIiksTT1bLi4udl07Zm9yKGxldCBJPTA7STx2Lmxlbmd0aDtJKyspe2lm''@;'; put 'put ''KC88Lio+RVJST1IvZ20udGVzdCh2W0ldKSl7bGV0IEc9dltJXS5zdWJzdHJpbmcodltJXS5pbmRleE9mKCJFIiksdltJXS5sZW5ndGgtMSk7aC5wdXNoKEcpfWVsc2UvXkVSUk9SL2dtLnRlc3QodltJXSkmJihoLnB1c2godltJXSksIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlJiYodltJXT0n''@;'; put 'put ''PGZvbnQgY2xhc3M9ImVycm9yLWxpbmUiPicrdltJXSsiPC9mb250PiIpKTtpZigvPC4qPldBUk5JTkcvZ20udGVzdCh2W0ldKSl7bGV0IEc9dltJXS5zdWJzdHJpbmcodltJXS5pbmRleE9mKCJXIiksdltJXS5sZW5ndGgtMSk7Zi5wdXNoKEcpfWVsc2UvXldBUk5JTkcvZ20udGVzdCh2W0ld''@;'; put 'put ''KSYmKGYucHVzaCh2W0ldKSwiU0FTVklZQSIhPT1kLnNlcnZlclR5cGUmJih2W0ldPSc8Zm9udCBjbGFzcz0id2FybmluZy1saW5lIj4nK3ZbSV0rIjwvZm9udD4iKSl9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSwiU0FTVklZQSI9PT1kLnNlcnZlclR5cGUmJihhLm9yaWdpbmFsTG9nRmlsZT1N''@;'; put 'put ''LmpvaW4oIlxuIiksYS5sb2dGaWxlTGluZU1hcD17fSxoLmZvckVhY2goST0+e2ZvcihsZXQgRz0wO0c8TS5sZW5ndGg7RysrKWlmKE1bR10uaW5jbHVkZXMoSSkpe2EubG9nRmlsZUxpbmVNYXAuZXJyb3JzfHwoYS5sb2dGaWxlTGluZU1hcC5lcnJvcnM9e30pLGEubG9nRmlsZUxpbmVNYXAu''@;'; put 'put ''ZXJyb3JzW0ldPUc7YnJlYWt9fSksZi5mb3JFYWNoKEk9Pntmb3IobGV0IEc9MDtHPE0ubGVuZ3RoO0crKylpZihNW0ddLmluY2x1ZGVzKEkpKXthLmxvZ0ZpbGVMaW5lTWFwLndhcm5pbmdzfHwoYS5sb2dGaWxlTGluZU1hcC53YXJuaW5ncz17fSksYS5sb2dGaWxlTGluZU1hcC53YXJuaW5n''@;'; put 'put ''c1tJXT1HO2JyZWFrfX0pKSxhLmxvZ0ZpbGU9di5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7''@;'; put 'put ''ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVP''@;'; put 'put ''ZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShTZCksR2UoU3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFs''@;'; put 'put ''IiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMi''@;'; put 'put ''XSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJz''@;'; put 'put ''aGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2ci''@;'; put 'put ''LDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywidGV4dENvbnRlbnQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJz''@;'; put 'put ''aGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWzEsImxv''@;'; put 'put ''Zy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2aXlhIiwzLCJ0ZXh0Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwi''@;'; put 'put ''IiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwi''@;'; put 'put ''IiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgubW9kYWxPcGVu''@;'; put 'put ''Q2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLE9lKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksT2UoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksZ3QoNixZV2UsMiwwLCJwIiw0KSg3LHZZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgpKCkpLDImZCYmKHhlKCJjbHJNb2Rh''@;'; put 'put ''bE9wZW4iLGgub3BlbmVkKSxmZSg0KSxEcigiQXBwIExvY2F0aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCkseGUoIm5nSWYiLGgub3BlbmVkJiYo''@;'; put 'put ''bnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W25zLHlhLENHLFZkZSx3RyxOZGUsRWgsUGQsZmcsSGwsb3UsS3UsSGIsTDIsX20sQ20seDcsd20sYm0sUzcsc2csZzcsbTcsVmIsd1JdLGVuY2Fwc3VsYXRpb246Mn0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7Y2xhc3MgYllle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgcGhlfX1jbGFzcyBwaGV7fWZ1bmN0aW9uIF9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDgpLE9lKDEsIiBTQVMgU2Vydmlj''@;'; put 'put ''ZTogIiksZGUoMiwic3Ryb25nIiksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx3cihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLE9lKDMsIlNZU1dBUk5JTkdURVhUOiIp''@;'; put 'put ''LGhlKCksT2UoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksT2UoNywiU1lTRVJST1JURVhUOiIpLGhlKCksT2UoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLE9lKDExLCJNQUM6IiksaGUoKSxPZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSxEcigiICIs''@;'; put 'put ''YS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLGZlKDQpLERyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBDWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0''@;'; put 'put ''b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLE9lKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxPZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBNWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZG93bmxvYWRMb2coKSl9KSxPZSgxLCIgRG93bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uIHhZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoTGUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxPZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVuY3Rpb24gRVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnJlbG9h''@;'; put 'put ''ZCgpKX0pLE9lKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFRZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFs''@;'; put 'put ''Q2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgYlllLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgcGhlfX1uZ09u''@;'; put 'put ''SW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYm''@;'; put 'put ''ZC5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxv''@;'; put 'put ''eSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVl''@;'; put 'put ''c3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZSh2YyksR2UoQnMpLEdlKExzKSl9fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2''@;'; put 'put ''YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNl''@;'; put 'put ''IG10LTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiLCJtdC0wIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJsZWQ9diksdn0pLGRlKDEsImgzIiwxKSxPZSgyKSxndCgzLF9ZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLGd0KDYsd1llLDEzLDMsImRpdiIsNSks''@;'; put 'put ''aGUoKSxkZSg3LCJkaXYiLDYpLGd0KDgsQ1llLDIsMCwiYnV0dG9uIiw3KSg5LFNZZSwyLDAsImJ1dHRvbiIsNykoMTAsTVllLDIsMCwiYnV0dG9uIiw3KSgxMSx4WWUsMiwwLCJidXR0b24iLDcpKDEyLEVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwyJmQmJihwaSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''IixoLm1vZGFsRW5hYmxlZCkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxEcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLHhlKCJuZ0lmIixoLmRhdGEuc2FzU2VydmljZSYmaC5kYXRhLnNhc1NlcnZpY2Uu''@;'; put 'put ''bGVuZ3RoPjApLGZlKDIpLHhlKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLFY0KSxmZSgpLHhlKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLHhlKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZpY2UpKSxmZSgpLHhlKCJuZ0lmIixu''@;'; put 'put ''dWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9udWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRhLmRldGFpbHMuTE9HLnRyaW0oKS5s''@;'; put 'put ''ZW5ndGgpPjApLGZlKCkseGUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLHhlKCJuZ0lmIixoLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbeWEsb3UsS3UsdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQVllPSgpPT5bIi8iXSxnaGU9KCk9PlsiL3Zp''@;'; put 'put ''ZXciXSxtaGU9KCk9PlsiL2hvbWUiXSxFRz0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLGtZZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSxEWWU9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiYoc2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCko''@;'; put 'put ''MywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLE9lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCksZGUoOCwiYSIsMjMpLE9lKDksIlVw''@;'; put 'put ''ZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLE9lKDYsIiBEYXRh''@;'; put 'put ''IENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0u''@;'; put 'put ''dmFsdWUpKX0pLE9lKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksbGkoKX19ZnVuY3Rpb24gTFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxJWWUsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLFJZZSw5LDAsIm5nLWNvbnRhaW5lciIsMSksaGUoKSksMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KDIpO2ZlKCkseGUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIE9ZZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxPZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgp''@;'; put 'put ''KX1mdW5jdGlvbiBQWWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksT2UoNiksR3QoNywiY29udGFjdC1saW5rIiwyMiksT2UoOCksaGUoKSgpKCks''@;'; put 'put ''Z3QoOSxPWWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDYpLFV1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNl''@;'; put 'put ''IGNvbnRhY3QgIiksZmUoMiksRHIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSx4ZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBGWWUoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJhIiwyMyksT2UoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gSFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIs''@;'; put 'put ''MjEpLE9lKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLE9lKDgpLGhlKCkoKSgpLGd0KDksRlllLDIsMCwiYSIsMjYp''@;'; put 'put ''LGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg4KSxEcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYh''@;'; put 'put ''YS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIE5ZZShjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTFllLDMsMiwiZGl2IiwxNCkoMixQWWUsMTAsNCwiZGl2IiwxNSkoMyxIWWUsMTAsMiwiZGl2IiwxNSksbGkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5mcmVlVGll''@;'; put 'put ''ckJhbm5lciYmKCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSx4ZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSx4ZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBWWWUo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gQlllKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjkp''@;'; put 'put ''LEd0KDEsImltZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmeGUoInJvdXRlckxpbmsiLEdzKDEsQVllKSl9ZnVuY3Rpb24galllKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiB6WWUoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24t''@;'; put 'put ''bWVudSIsNDApKDEsImEiLDQxKSxPZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksT2UoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLE9lKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSx4ZSgicm91dGVyTGluayIsR3MoMyxnaGUpKSxmZSgyKSx4ZSgicm91dGVyTGluayIs''@;'; put 'put ''R3MoNCxtaGUpKSxmZSgyKSx4ZSgicm91dGVyTGluayIsR3MoNSxFRykpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxPZSg0LCIgTWVudSAiKSxoZSgpLGd0KDUselllLDcsNiwiY2xyLWRy''@;'; put 'put ''b3Bkb3duLW1lbnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLE9lKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxPZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxPZSgxMiwiUkVWSUVXIiksaGUoKSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDcp''@;'; put 'put ''LHhlKCJyb3V0ZXJMaW5rIixHcyg3LGdoZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLHhlKCJyb3V0ZXJMaW5rIixH''@;'; put 'put ''cyg4LG1oZSkpLGZlKDIpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSkseGUoInJvdXRlckxpbmsiLEdzKDksRUcpKX19ZnVuY3Rp''@;'; put 'put ''b24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxPZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksT2UoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJsaSIsNDQpKDksImEiLDM3KSxPZSgx''@;'; put 'put ''MCwiSElTVE9SWSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLHhlKCJyb3V0ZXJMaW5rIixHcyg1LEVHKSksZmUoMyksVHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLHhlKCJyb3V0ZXJMaW5rIixHcyg2LGtZZSkpLGZlKDMpLHhlKCJy''@;'; put 'put ''b3V0ZXJMaW5rIixHcyg3LERZZSkpfX1mdW5jdGlvbiBXWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBHWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiAkWWUo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLEZ0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxoZSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7eGUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEtZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0KDEsImRpdiIsNTApKDIsImRpdiIs''@;'; put 'put ''NTEpKDMsImRpdiIsNTIpLGhlKCkpfWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIsS1llLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fVRz''@;'; put 'put ''LmFkZEljb25zKFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44''@;'; put 'put ''NCA0Ljk5MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5''@;'; put 'put ''LjI3MDMgMzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMgNiAxMi4yNDAzIDYgMTcuOTkwM0M2''@;'; put 'put ''IDI0LjYxMDMgMTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTguMzMwMyAxMy43MSAxMi4yMDAzQzEz''@;'; put 'put ''LjcxIDEwLjA3MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAx''@;'; put 'put ''OC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAy''@;'; put 'put ''MC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaIi8+J31dLFsic3VuIix7b3V0''@;'; put 'put ''bGluZTonPHBhdGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2''@;'; put 'put ''LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYz''@;'; put 'put ''QzE5IDIuNDUgMTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAy''@;'; put 'put ''OC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUx''@;'; put 'put ''IDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAy''@;'; put 'put ''OSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIy''@;'; put 'put ''Ljk2IDkgMTggOVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUu''@;'; put 'put ''MzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4''@;'; put 'put ''IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4''@;'; put 'put ''LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNNyAx''@;'; put 'put ''OEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAx''@;'; put 'put ''MC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5''@;'; put 'put ''LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk0xOCA3QzE4LjU1''@;'; put 'put ''IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNW''@;'; put 'put ''MzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3''@;'; put 'put ''IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcu''@;'; put 'put ''OUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0i''@;'; put 'put ''TTE3Ljk5NDMgMjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4zNSAxNy40NDQ1IDIwLjggMTcuOTk0''@;'; put 'put ''MyAyMC44Wk0xOC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIuOTVDMTYuOTI0NyAyMy4xOCAxNi43''@;'; put 'put ''OTQ4IDIzLjQ4IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMxOC4xNTQyIDI1IDE4LjMwNDEgMjQu''@;'; put 'put ''OTcgMTguNDU0MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTkuMDQzOCAyMy4yIDE4Ljk1MzggMjMu''@;'; put 'put ''MDYgMTguODQzOSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAy''@;'; put 'put ''OC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3QzI4Ljc1OTUgMjcuNjMgMjguNDc5''@;'; put 'put ''NiAyOCAyNy45Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4NDMgOEMxOC4xNjQyIDggMTguNjM0''@;'; put 'put ''IDguMDUgMTguOTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZD''@;'; put 'put ''MTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41''@;'; put 'put ''Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41VjE5LjNDMTkuMTkzNyAxOS45NiAx''@;'; put 'put ''OC42NTQgMjAuNSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1LjQxIDE3Ljk5NDMgMjUuNDFDMTcu''@;'; put 'put ''ODE0MyAyNS40MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMuMjkgMTYuOTk0NyAyM0MxNy4xMzQ2''@;'; put 'put ''IDIyLjg3IDE3LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAxOC45NzM4IDIzQzE5LjA5MzggMjMu''@;'; put 'put ''MTIgMTkuMjAzNyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMyAx''@;'; put 'put ''OEMzMy41NSAxOCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDNDMi40NSA2IDIgNi40NSAyIDdDMiA3''@;'; put 'put ''LjU1IDIuNDUgOCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAzNCAyNyAzNEMyNy41NSAzNCAyOCAz''@;'; put 'put ''My41NSAyOCAzM1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYxNloiLz4nfV0sWyJ0cmFzaCIse291''@;'; put 'put ''dGxpbmU6JzxwYXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcgMzEuMjUgNy45OSAzMVYxMS4wM0g1''@;'; put 'put ''Ljk3VjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNIMjcuOThWMzFaTTEzIDEyLjk4''@;'; put 'put ''VjI3Ljk4SDE1LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1''@;'; put 'put ''IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2''@;'; put 'put ''SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAxMS4wM1YzMUM1Ljk1IDMxLjc4IDYu''@;'; put 'put ''MjQgMzIuNTMgNi43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4LjgyVjE1SDIzLjIxVjI5SDIwLjc5VjI4''@;'; put 'put ''LjgyWk0xMi44MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0MyMy41NSAyNS41MDAxIDI0IDI1LjA1''@;'; put 'put ''MDEgMjQgMjQuNTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAxQzUuODEgMjIuMjAwMSA2LjE5IDIx''@;'; put 'put ''LjcwMDEgNi4xMSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZDMTYuNDkgOS40MDAwNiAxNi43NCA5''@;'; put 'put ''LjQ5MDA2IDE3IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAxNS45MSA0LjgxMDA2IDE2LjMgNS4y''@;'; put 'put ''MDAwNkwxNi42NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEgMjIuMjkwMSA1LjI2IDIyLjI5MDFW''@;'; put 'put ''MjIuMjgwMVpNMjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45OCAyNi4xMjAxQzEwLjA3IDI1LjU4''@;'; put 'put ''MDEgOS43IDI1LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAxIDYuNjQgMjguOTMwMSA2LjczIDI4''@;'; put 'put ''LjQ1MDFMNi44MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43NyAzMC4wMDAxIDI0LjE2IDI5Ljgy''@;'; put 'put ''MDEgMjMuNjggMzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQxMDA2IDIyLjQ2IDYuNjQwMDYgMjIu''@;'; put 'put ''MjQgNy4xNTAwNkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1LjMyMDFDMjcuOSAyNC43ODAxIDI3''@;'; put 'put ''LjM5IDI0LjQwMDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAyNy4xMjAxIDMwLjY0IDI2Ljc0MDEg''@;'; put 'put ''MzAuMDkgMjYuODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IFhZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxpZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249''@;'; put 'put ''dix0aGlzLmV2ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUksdGhpcy5jZHI9Ryx0aGlzLmVsZW1lbnRSZWY9aWUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0hMSx0aGlzLmFwcHJvdmVBY3RpdmU9''@;'; put 'put ''ITEsdGhpcy5mcmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRoaXMuYXBwQWN0aXZlPW51bGwsdGhp''@;'; put 'put ''cy5yZXF1ZXN0c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5saWNlbmNl''@;'; put 'put ''U3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMi4xIiwiQXBwIHZlcnNpb24iOiJ2Ny4wLjMiLnJlcGxhY2UoInYi''@;'; put 'put ''LCIiKSwiQnVpbGQgdGltZXN0YW1wIjpPbyhwYXJzZUludCgiMTc1MDk1NTM3MTg0NSIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIiksIi4uLiI6Ii4uLiJ9KX0sdGhpcy5zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKSx0aGlzLmNvbW1pdFZlcj0idjcuMC4zIi5yZXBsYWNlKCJ2Iiwi''@;'; put 'put ''IikrIi5nYzJlM2IzNiIsaC5ldmVudHMuc3Vic2NyaWJlKHVlPT57aWYodGhpcy5yb3V0ZVVybD10aGlzLnJvdXRlci51cmwsdHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD40KXtsZXQgeWU9dGhpcy5yb3V0ZVVybC5zcGxpdCgiLyIpWzFdOyJlZGl0b3Ii''@;'; put 'put ''PT09eWU/KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6ImhvbWUiPT09eWU/KHRoaXMuZXJyVG9wPSExLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9y''@;'; put 'put ''QWN0aXZlPSExKSxLbi5yb290UGFyYW09eWV9dHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD42JiYodGhpcy5hcHByb3ZlQWN0aXZlPSEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygiYXBwcm92ZURldCIpfHwhIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoInRv''@;'; put 'put ''YXBwcm92ZSIpKX0pLHRoaXMuc3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCksdGhpcy5zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpLHRoaXMuc3Vic2NyaWJlVG9EZW1vTGltaXRNb2Rh''@;'; put 'put ''bCgpLHdpbmRvdy5mcmFtZUVsZW1lbnQmJih3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIp''@;'; put 'put ''LHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRlciIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKSx3aW5kb3cu''@;'; put 'put ''ZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwiYXV0byIpLHdpbmRvdy5mb2N1cygpKX1wYXJzZURjQWRhcHRlclNldHRpbmdzKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzYXNqcyIpO2lmKCFhKXJldHVybiB0aGlzLmxpY2VuY2VTZXJ2aWNlLmRlYWN0''@;'; put 'put ''aXZhdGVBcHAoKSx2b2lkIHNldFRpbWVvdXQoKCk9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJQbGVhc2UgbWFrZSBzdXJlICdTQVNKUycgdGFnIHdpdGggY29uZmlnIGF0dHJpYnV0ZXMgaXMgYWRkZWQgdG8gaW5kZXguaHRtbCIsbnVsbCwiU0FTanMgQ29uZmln''@;'; put 'put ''IG5vdCBmb3VuZCIpfSk7Y29uc3QgZD1mPT5hLmdldEF0dHJpYnV0ZShmKXx8dm9pZCAwLGg9e3NlcnZlclVybDpkKCJzZXJ2ZXJVcmwiKXx8IiIsYXBwTG9jOmQoImFwcExvYyIpfHwiIixzZXJ2ZXJUeXBlOmQoInNlcnZlclR5cGUiKSxsb2dpbk1lY2hhbmlzbTpkKCJsb2dpbk1lY2hhbmlz''@;'; put 'put ''bSIpfHwiIixhZG1pbkdyb3VwOmQoImFkbWluR3JvdXAiKXx8IiIsZGNQYXRoOmQoImRjUGF0aCIpfHwiIixkZWJ1ZzoidHJ1ZSI9PT1kKCJkZWJ1ZyIpfHwhMSx1c2VDb21wdXRlQXBpOnRoaXMucGFyc2VDb21wdXRlQXBpKGQoInVzZUNvbXB1dGVBcGkiKSksY29udGV4dE5hbWU6ZCgiY29u''@;'; put 'put ''dGV4dE5hbWUiKXx8IiIsaG90TGljZW5jZUtleTpkKCJob3RMaWNlbmNlS2V5Iil8fCIifTt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWgsdGhpcy5hcHBTdG9yZVNlcnZpY2Uuc2V0RGNBZGFwdGVyU2V0dGluZ3MoaCksdGhpcy5hcHBTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9bGljZW5jZVBy''@;'; put 'put ''b2JsZW1EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9cGFyc2VDb21wdXRlQXBpKGEpe3JldHVybiB2b2lkIDA9PT1hfHwidW5kZWZpbmVkIj09PWF8fCJudWxsIj09PWE/bnVsbDoidHJ1ZSI9PT1hfHwhMX1zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCl7dGhpcy5l''@;'; put 'put ''dmVudFNlcnZpY2Uub25EZW1vTGltaXRNb2RhbFNob3cuc3Vic2NyaWJlKGE9Pnt0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMCxmZWF0dXJlTmFtZTphfX0pfXN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci5zdWJzY3JpYmUo''@;'; put 'put ''YT0+e3RoaXMuZnJlZVRpZXJCYW5uZXI9YX0pLHRoaXMubGljZW5jZVNlcnZpY2UubGljZW5zZUV4cGlyZXNJbkRheXMuc3Vic2NyaWJlKGE9PnthJiZhPD0xNCYmKHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1hKX0pLHRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBPdmVyQ2FwYWNpdHkuc3Vi''@;'; put 'put ''c2NyaWJlKGE9Pnt0aGlzLmFwcE92ZXJDYXBhY2l0eT1hfSl9c3Vic2NyaWJlVG9BcHBBY3RpdmUoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnN1YnNjcmliZShhPT57dGhpcy5hcHBBY3RpdmU9YX0pfXN1YnNjcmliZVRvU2hvd0Fib3J0TW9kYWwoKXt0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZS5vblNob3dBYm9ydE1vZGFsLnN1YnNjcmliZShhPT57YS5pZD10aGlzLnNhc2pzQWJvcnRzLmxlbmd0aCsxLHRoaXMuc2FzanNBYm9ydHMucHVzaChhKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCl7dGhpcy5ldmVudFNlcnZpY2Uu''@;'; put 'put ''b25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSEwfSl9c3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25SZXF1ZXN0c01vZGFsT3Blbi5zdWJzY3JpYmUoYT0+e3RoaXMucmVxdWVzdHNNb2RhbD0hMH0p''@;'; put 'put ''fWNsb3NlQWJvcnRNb2RhbChhKXtsZXQgZD10aGlzLnNhc2pzQWJvcnRzLmZpbmRJbmRleChoPT5oLmlkPT09YSk7dGhpcy5zYXNqc0Fib3J0cy5zcGxpY2UoZCwxKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlU2lkZWJhcigpfWlzTWFpblJvdXRlKGEpe3JldHVy''@;'; put 'put ''biB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoYSl9b3BlbkxpY2VuY2luZ1BhZ2UoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL3VwZGF0ZSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKG9MKSxHZSh1MSksR2Uo''@;'; put 'put ''THMpLEdlKEN1KSxHZShmaCksR2UodmMpLEdlKFE4KSxHZShFcyksR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm15LWFwcCJdXSxkZWNsczoyNix2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzQsIm5nSWYiXSxbMSwi''@;'; put 'put ''YXBwLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImxvZ28iLCJkLWZs''@;'; put 'put ''ZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJocmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQi''@;'; put 'put ''LCJvbkNvbmZpcm1Nb2RhbENsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9k''@;'; put 'put ''YWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwibG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJh''@;'; put 'put ''bGVydCIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwiLCJhbGVydC13YXJuaW5nIl0sWzEsImFsZXJ0LWl0ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQtdGV4dCJdLFsiY2xhc3NlcyIsImNv''@;'; put 'put ''bG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwiLCJhbGVydC1kYW5nZXIiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBa''@;'; put 'put ''S2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYy1sb2dvLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28gd2l0aG91dCB0ZXh0IiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09''@;'; put 'put ''cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWljb24iLCJoZWFkZXItbG9nbyIsIm1sLTEwIl0sWzEsImhl''@;'; put 'put ''YWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4i''@;'; put 'put ''XSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20tZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwi''@;'; put 'put ''bmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYiXSxbMSwibmF2LWl0ZW0iXSxbMywib25Db25maXJtTW9k''@;'; put 'put ''YWxDbGljayIsImRhdGEiLCJmb3JjZVJlbG9hZCJdLFsxLCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBs''@;'; put 'put ''b2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxO''@;'; put 'put ''WWUsNCwzLCJuZy1jb250YWluZXIiLDEpLGRlKDIsImhlYWRlciIsMiksZ3QoMyxWWWUsMiwwLCJkaXYiLDMpLGRlKDQsImRpdiIsNCksZ3QoNSxCWWUsMywyLCJhIiw1KSg2LGpZZSwyLDAsImEiLDEpLGhlKCksZ3QoNyxVWWUsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksR3QoOCwiYXBwLWhl''@;'; put 'put ''YWRlci1hY3Rpb25zIiksaGUoKSxndCg5LFpZZSwxMSw4LCJuYXYiLDYpKDEwLFdZZSwxLDAsImFwcC1hbGVydHMiLDEpLGRlKDExLCJhcHAtcmVxdWVzdHMtbW9kYWwiLDcpLGdpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlcXVlc3RzTW9kYWwsdil8fChoLnJl''@;'; put 'put ''cXVlc3RzTW9kYWw9diksdn0pLGhlKCksR3QoMTIsImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCIpLGd0KDEzLFlZZSwxLDAsInJvdXRlci1vdXRsZXQiLDEpLEd0KDE0LCJhcHAtbG9naW4iKSxndCgxNSxHWWUsMSwwLCJhcHAtYWxlcnRzIiwxKSgxNiwkWWUsMSwyLCJhcHAtaW5mby1tb2Rh''@;'; put 'put ''bCIsOCksZGUoMTcsImNsci1tb2RhbCIsOSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGVtb0xpbWl0Tm90aWNlLm9wZW4sdil8fChoLmRlbW9MaW1pdE5vdGljZS5vcGVuPXYpLHZ9KSxkZSgxOCwiaDMiLDEwKSxPZSgxOSksR3QoMjAsImNsci1p''@;'; put 'put ''Y29uIiwxMSksaGUoKSxkZSgyMSwiZGl2IiwxMiksT2UoMjIsIiBDb250YWN0ICIpLEd0KDIzLCJjb250YWN0LWxpbmsiKSxPZSgyNCksaGUoKSgpKCksZ3QoMjUscVllLDMsMSwiZGl2IiwxMykpLDImZCYmKGZlKCkseGUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2lu''@;'; put 'put ''ZyIpKSxmZSgyKSx4ZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldyIpfHxoLmlzTWFpblJvdXRlKCJob21lIikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCkseGUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMikseGUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygic3Vi''@;'; put 'put ''bWl0dGVkIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksZmUoKSx4ZSgibmdJZiIsIWguZXJyVG9wKSxmZSgpLHBpKCJvcGVuZWQiLGgucmVxdWVzdHNNb2RhbCksZmUoMikseGUoIm5nSWYiLGguc3RhcnR1cERh''@;'; put 'put ''dGFMb2FkZWQpLGZlKDIpLHhlKCJuZ0lmIixoLmVyclRvcCksZmUoKSx4ZSgibmdGb3JPZiIsaC5zYXNqc0Fib3J0cyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSx4ZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZl''@;'; put 'put ''KDIpLERyKCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksZmUoNSksRHIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLGZlKCkseGUoIm5nSWYiLCFoLnN0YXJ0dXBEYXRhTG9hZGVk''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbbnMseWEscmcsYzEscGIsTVdlLFZXZSx6V2UscE8sV1dlLFF4LEhsLHJzLG91LEt1LEwyLHNnLGc3LG03LFZiLHRFLHlZZSxUWWVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdmhlKGMpe3JldHVybiBuZXcgUW4oM2UzLCExKX1m''@;'; put 'put ''dW5jdGlvbiBEbShjKXtzd2l0Y2goYy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHd4O2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgUjBlKGMpfX1mdW5jdGlvbiB5aGUoYyxsLGE9bmV3IE1hcCxkPW5ldyBNYXApe2NvbnN0IGg9W10sZj1bXTtsZXQgdj0tMSxNPW51''@;'; put 'put ''bGw7aWYobC5mb3JFYWNoKEk9Pntjb25zdCBHPUkuZ2V0KCJvZmZzZXQiKSxpZT1HPT12LHVlPWllJiZNfHxuZXcgTWFwO0kuZm9yRWFjaCgoeWUsRWUpPT57bGV0IGplPUVlLHFlPXllO2lmKCJvZmZzZXQiIT09RWUpc3dpdGNoKGplPWMubm9ybWFsaXplUHJvcGVydHlOYW1lKGplLGgpLHFl''@;'; put 'put ''KXtjYXNlIiEiOnFlPWEuZ2V0KEVlKTticmVhaztjYXNlIGlnOnFlPWQuZ2V0KEVlKTticmVhaztkZWZhdWx0OnFlPWMubm9ybWFsaXplU3R5bGVWYWx1ZShFZSxqZSxxZSxoKX11ZS5zZXQoamUscWUpfSksaWV8fGYucHVzaCh1ZSksTT11ZSx2PUd9KSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlv''@;'; put 'put ''biBfR2UoYyl7cmV0dXJuIG5ldyBRbigzNTAyLCExKX0oKTtyZXR1cm4gZn1mdW5jdGlvbiBURyhjLGwsYSxkKXtzd2l0Y2gobCl7Y2FzZSJzdGFydCI6Yy5vblN0YXJ0KCgpPT5kKGEmJkFHKGEsInN0YXJ0IixjKSkpO2JyZWFrO2Nhc2UiZG9uZSI6Yy5vbkRvbmUoKCk9PmQoYSYmQUcoYSwi''@;'; put 'put ''ZG9uZSIsYykpKTticmVhaztjYXNlImRlc3Ryb3kiOmMub25EZXN0cm95KCgpPT5kKGEmJkFHKGEsImRlc3Ryb3kiLGMpKSl9fWZ1bmN0aW9uIEFHKGMsbCxhKXtjb25zdCBmPWtHKGMuZWxlbWVudCxjLnRyaWdnZXJOYW1lLGMuZnJvbVN0YXRlLGMudG9TdGF0ZSxsfHxjLnBoYXNlTmFtZSxh''@;'; put 'put ''LnRvdGFsVGltZT8/Yy50b3RhbFRpbWUsISFhLmRpc2FibGVkKSx2PWMuX2RhdGE7cmV0dXJuIG51bGwhPXYmJihmLl9kYXRhPXYpLGZ9ZnVuY3Rpb24ga0coYyxsLGEsZCxoPSIiLGY9MCx2KXtyZXR1cm57ZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsZnJvbVN0YXRlOmEsdG9TdGF0ZTpkLHBo''@;'; put 'put ''YXNlTmFtZTpoLHRvdGFsVGltZTpmLGRpc2FibGVkOiEhdn19ZnVuY3Rpb24gVGgoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO3JldHVybiBkfHxjLnNldChsLGQ9YSksZH1mdW5jdGlvbiBiaGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIjoiKTtyZXR1cm5bYy5zdWJzdHJpbmcoMSxsKSxjLnNsaWNl''@;'; put 'put ''KGwrMSldfWNvbnN0IFJHZT10eXBlb2YgZG9jdW1lbnQ+InUiP251bGw6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIERHKGMpe2NvbnN0IGw9Yy5wYXJlbnROb2RlfHxjLmhvc3R8fG51bGw7cmV0dXJuIGw9PT1SR2U/bnVsbDpsfWxldCBQNz1udWxsLF9oZT0hMTtmdW5jdGlv''@;'; put 'put ''biB3aGUoYyxsKXtmb3IoO2w7KXtpZihsPT09YylyZXR1cm4hMDtsPURHKGwpfXJldHVybiExfWZ1bmN0aW9uIENoZShjLGwsYSl7aWYoYSlyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpO2NvbnN0IGQ9Yy5xdWVyeVNlbGVjdG9yKGwpO3JldHVybiBkP1tkXTpbXX1s''@;'; put 'put ''ZXQgSUc9KCgpPT57Y2xhc3MgY3t2YWxpZGF0ZVN0eWxlUHJvcGVydHkoYSl7cmV0dXJuIGZ1bmN0aW9uIE9HZShjKXtQN3x8KFA3PWZ1bmN0aW9uIFBHZSgpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbH0oKXx8e30sX2hlPSEhUDcuc3R5bGUmJiJXZWJr''@;'; put 'put ''aXRBcHBlYXJhbmNlImluIFA3LnN0eWxlKTtsZXQgbD0hMDtyZXR1cm4gUDcuc3R5bGUmJiFmdW5jdGlvbiBMR2UoYyl7cmV0dXJuImVia2l0Ij09Yy5zdWJzdHJpbmcoMSw2KX0oYykmJihsPWMgaW4gUDcuc3R5bGUsIWwmJl9oZSYmKGw9IldlYmtpdCIrYy5jaGFyQXQoMCkudG9VcHBlckNh''@;'; put 'put ''c2UoKStjLnNsaWNlKDEpaW4gUDcuc3R5bGUpKSxsfShhKX1tYXRjaGVzRWxlbWVudChhLGQpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChhLGQpe3JldHVybiB3aGUoYSxkKX1nZXRQYXJlbnRFbGVtZW50KGEpe3JldHVybiBERyhhKX1xdWVyeShhLGQsaCl7cmV0dXJuIENoZShhLGQsaCl9''@;'; put 'put ''Y29tcHV0ZVN0eWxlKGEsZCxoKXtyZXR1cm4gaHx8IiJ9YW5pbWF0ZShhLGQsaCxmLHYsTT1bXSxJKXtyZXR1cm4gbmV3IHd4KGgsZil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgUkd7c3RhdGlje3RoaXMuTk9PUD1uZXcgSUd9fWNsYXNzIExHe31jb25zdCBIR2U9MWUzLE9HPSJuZy1lbnRlciIsZ089Im5nLWxlYXZlIixtTz0ibmctdHJpZ2dlciIsdk89Ii5uZy10cmlnZ2VyIixNaGU9Im5nLWFu''@;'; put 'put ''aW1hdGluZyIsUEc9Ii5uZy1hbmltYXRpbmciO2Z1bmN0aW9uIHBnKGMpe2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gYztjb25zdCBsPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWx8fGwubGVuZ3RoPDI/MDpGRyhwYXJzZUZsb2F0KGxbMV0pLGxbMl0pfWZ1bmN0''@;'; put 'put ''aW9uIEZHKGMsbCl7cmV0dXJuInMiPT09bD9jKkhHZTpjfWZ1bmN0aW9uIHlPKGMsbCxhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9jOmZ1bmN0aW9uIFZHZShjLGwsYSl7bGV0IGgsZj0wLHY9IiI7aWYoInN0cmluZyI9PXR5cGVvZiBjKXtjb25zdCBNPWMubWF0Y2go''@;'; put 'put ''L14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1NKXJldHVybiBsLnB1c2godmhlKCkpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtoPUZHKHBhcnNlRmxvYXQoTVsxXSksTVsy''@;'; put 'put ''XSk7Y29uc3QgST1NWzNdO251bGwhPUkmJihmPUZHKHBhcnNlRmxvYXQoSSksTVs0XSkpO2NvbnN0IEc9TVs1XTtHJiYodj1HKX1lbHNlIGg9YztpZighYSl7bGV0IE09ITEsST1sLmxlbmd0aDtoPDAmJihsLnB1c2goZnVuY3Rpb24gSlllKCl7cmV0dXJuIG5ldyBRbigzMTAwLCExKX0oKSks''@;'; put 'put ''TT0hMCksZjwwJiYobC5wdXNoKGZ1bmN0aW9uIFFZZSgpe3JldHVybiBuZXcgUW4oMzEwMSwhMSl9KCkpLE09ITApLE0mJmwuc3BsaWNlKEksMCx2aGUoKSl9cmV0dXJue2R1cmF0aW9uOmgsZGVsYXk6ZixlYXNpbmc6dn19KGMsbCxhKX1mdW5jdGlvbiBNcChjLGwsYSl7bC5mb3JFYWNoKChk''@;'; put 'put ''LGgpPT57Y29uc3QgZj1ORyhoKTthJiYhYS5oYXMoaCkmJmEuc2V0KGgsYy5zdHlsZVtmXSksYy5zdHlsZVtmXT1kfSl9ZnVuY3Rpb24gRjcoYyxsKXtsLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPU5HKGQpO2Muc3R5bGVbaF09IiJ9KX1mdW5jdGlvbiBuRShjKXtyZXR1cm4gQXJyYXkuaXNB''@;'; put 'put ''cnJheShjKT8xPT1jLmxlbmd0aD9jWzBdOmZ1bmN0aW9uIGNQZShjLGw9bnVsbCl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6YyxvcHRpb25zOmx9fShjKTpjfWNvbnN0IEhHPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIEVoZShjKXtsZXQgbD1b''@;'; put 'put ''XTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1IRy5leGVjKGMpOylsLnB1c2goYVsxXSk7SEcubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gckUoYyxsLGEpe2NvbnN0IGQ9YCR7Y31gLGg9ZC5yZXBsYWNlKEhHLChmLHYpPT57bGV0IE09bFt2XTtyZXR1cm4gbnVs''@;'; put 'put ''bD09TSYmKGEucHVzaChmdW5jdGlvbiB0R2UoYyl7cmV0dXJuIG5ldyBRbigzMDAzLCExKX0oKSksTT0iIiksTS50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWNvbnN0IHpHZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gTkcoYyl7cmV0dXJuIGMucmVwbGFjZSh6R2UsKC4uLmwpPT5s''@;'; put 'put ''WzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIEFoKGMsbCxhKXtzd2l0Y2gobC50eXBlKXtjYXNlIEFvLlRyaWdnZXI6cmV0dXJuIGMudmlzaXRUcmlnZ2VyKGwsYSk7Y2FzZSBBby5TdGF0ZTpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSBBby5UcmFuc2l0aW9uOnJldHVybiBjLnZp''@;'; put 'put ''c2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgQW8uU2VxdWVuY2U6cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgQW8uR3JvdXA6cmV0dXJuIGMudmlzaXRHcm91cChsLGEpO2Nhc2UgQW8uQW5pbWF0ZTpyZXR1cm4gYy52aXNpdEFuaW1hdGUobCxhKTtjYXNlIEFvLktleWZyYW1lczpy''@;'; put 'put ''ZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgQW8uU3R5bGU6cmV0dXJuIGMudmlzaXRTdHlsZShsLGEpO2Nhc2UgQW8uUmVmZXJlbmNlOnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSBBby5BbmltYXRlQ2hpbGQ6cmV0dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxh''@;'; put 'put ''KTtjYXNlIEFvLkFuaW1hdGVSZWY6cmV0dXJuIGMudmlzaXRBbmltYXRlUmVmKGwsYSk7Y2FzZSBBby5RdWVyeTpyZXR1cm4gYy52aXNpdFF1ZXJ5KGwsYSk7Y2FzZSBBby5TdGFnZ2VyOnJldHVybiBjLnZpc2l0U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhyb3cgZnVuY3Rpb24gbkdlKGMpe3Jl''@;'; put 'put ''dHVybiBuZXcgUW4oMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIFZHKGMsbCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IFdHZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibGVm''@;'; put 'put ''dCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20i''@;'; put 'put ''LCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUiXSk7Y2xhc3MgVGhlIGV4dGVuZHMg''@;'; put 'put ''TEd7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIE5HKGwpfW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3Qgdj1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKFdHZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJudW1iZXIiPT10eXBlb2YgZClmPSJw''@;'; put 'put ''eCI7ZWxzZXtjb25zdCBNPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTtNJiYwPT1NWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIHJHZShjLGwpe3JldHVybiBuZXcgUW4oMzAwNSwhMSl9KCkpfXJldHVybiB2K2Z9fWNvbnN0IGJPPSIqIjtjb25zdCBfTz1uZXcgU2V0KFsi''@;'; put 'put ''dHJ1ZSIsIjEiXSksd089bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBBaGUoYyxsKXtjb25zdCBhPV9PLmhhcyhjKXx8d08uaGFzKGMpLGQ9X08uaGFzKGwpfHx3Ty5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgdj1jPT1iT3x8Yz09aCxNPWw9PWJPfHxsPT1mO3JldHVybiF2JiZh''@;'; put 'put ''JiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYodj1oP19PLmhhcyhjKTp3Ty5oYXMoYykpLCFNJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoTT1mP19PLmhhcyhsKTp3Ty5oYXMobCkpLHYmJk19fWNvbnN0IEtHZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBCRyhjLGws''@;'; put 'put ''YSxkKXtyZXR1cm4gbmV3IHFHZShjKS5idWlsZChsLGEsZCl9Y2xhc3MgcUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBRR2UoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoaCksQWgodGhpcyxuRShs''@;'; put 'put ''KSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIobCxhKXtsZXQgZD1h''@;'; put 'put ''LnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLHY9W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGlHZSgpe3JldHVybiBuZXcgUW4oMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMuZm9yRWFjaChNPT57aWYodGhpcy5f''@;'; put 'put ''cmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSxNLnR5cGU9PUFvLlN0YXRlKXtjb25zdCBJPU0sRz1JLm5hbWU7Ry50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChpZT0+e0kubmFtZT1pZSxmLnB1c2godGhpcy52aXNpdFN0YXRlKEksYSkpfSksSS5uYW1lPUd9ZWxz''@;'; put 'put ''ZSBpZihNLnR5cGU9PUFvLlRyYW5zaXRpb24pe2NvbnN0IEk9dGhpcy52aXNpdFRyYW5zaXRpb24oTSxhKTtkKz1JLnF1ZXJ5Q291bnQsaCs9SS5kZXBDb3VudCx2LnB1c2goSSl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGFHZSgpe3JldHVybiBuZXcgUW4oMzAwNywhMSl9KCkpfSks''@;'; put 'put ''e3R5cGU6QW8uVHJpZ2dlcixuYW1lOmwubmFtZSxzdGF0ZXM6Zix0cmFuc2l0aW9uczp2LHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9bC5vcHRpb25zJiZsLm9wdGlvbnMu''@;'; put 'put ''cGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVzKXtjb25zdCBmPW5ldyBTZXQsdj1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKE09PntNIGluc3RhbmNlb2YgTWFwJiZNLmZvckVhY2goST0+e0VoZShJKS5mb3JFYWNoKEc9Pnt2Lmhhc093blByb3BlcnR5KEcpfHxmLmFkZChH''@;'; put 'put ''KX0pfSl9KSxmLnNpemUmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gb0dlKGMsbCl7cmV0dXJuIG5ldyBRbigzMDA4LCExKX0oMCxmLnZhbHVlcygpKSl9cmV0dXJue3R5cGU6QW8uU3RhdGUsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFtczpofTpudWxsfX12aXNpdFRyYW5z''@;'; put 'put ''aXRpb24obCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50PTA7Y29uc3QgZD1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSxoPWZ1bmN0aW9uIFlHZShjLGwpe2NvbnN0IGE9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGQ9PmZ1bmN0''@;'; put 'put ''aW9uIEdHZShjLGwsYSl7aWYoIjoiPT1jWzBdKXtjb25zdCBJPWZ1bmN0aW9uICRHZShjLGwpe3N3aXRjaChjKXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxv''@;'; put 'put ''YXQoZCk+cGFyc2VGbG9hdChhKTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPHBhcnNlRmxvYXQoYSk7ZGVmYXVsdDpyZXR1cm4gbC5wdXNoKGZ1bmN0aW9uIG1HZShjKXtyZXR1cm4gbmV3IFFuKDMwMTYsITEpfSgpKSwiKiA9PiAqIn19KGMsYSk7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEkpcmV0dXJuIHZvaWQgbC5wdXNoKEkpO2M9SX1jb25zdCBkPWMubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWR8fGQubGVuZ3RoPDQpcmV0dXJuIGEucHVzaChmdW5jdGlvbiBnR2UoYyl7cmV0dXJuIG5l''@;'; put 'put ''dyBRbigzMDE1LCExKX0oKSksbDtjb25zdCBoPWRbMV0sZj1kWzJdLHY9ZFszXTtsLnB1c2goQWhlKGgsdikpLCI8Ij09ZlswXSYmKGghPWJPfHx2IT1iTykmJmwucHVzaChBaGUodixoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9KGwuZXhwcixhLmVycm9ycyk7cmV0dXJue3R5cGU6QW8uVHJh''@;'; put 'put ''bnNpdGlvbixtYXRjaGVyczpoLGFuaW1hdGlvbjpkLHF1ZXJ5Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291bnQsb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6bC5zdGVwcy5tYXAoZD0+QWgo''@;'; put 'put ''dGhpcyxkLGEpKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0R3JvdXAobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKHY9PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgTT1BaCh0aGlzLHYsYSk7cmV0dXJuIGg9TWF0aC5tYXgoaCxhLmN1''@;'; put 'put ''cnJlbnRUaW1lKSxNfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9aCx7dHlwZTpBby5Hcm91cCxzdGVwczpmLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1mdW5jdGlvbiB0JGUoYyxsKXtpZihjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVy''@;'; put 'put ''biBjO2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gakcoeU8oYyxsKS5kdXJhdGlvbiwwLCIiKTtjb25zdCBhPWM7aWYoYS5zcGxpdCgvXHMrLykuc29tZShmPT4ieyI9PWYuY2hhckF0KDApJiYieyI9PWYuY2hhckF0KDEpKSl7Y29uc3QgZj1qRygwLDAsIiIpO3JldHVybiBmLmR5bmFt''@;'; put 'put ''aWM9ITAsZi5zdHJWYWx1ZT1hLGZ9Y29uc3QgaD15TyhhLGwpO3JldHVybiBqRyhoLmR1cmF0aW9uLGguZGVsYXksaC5lYXNpbmcpfShsLnRpbWluZ3MsYS5lcnJvcnMpO2EuY3VycmVudEFuaW1hdGVUaW1pbmdzPWQ7bGV0IGgsZj1sLnN0eWxlcz9sLnN0eWxlczp1cyh7fSk7aWYoZi50eXBl''@;'; put 'put ''PT1Bby5LZXlmcmFtZXMpaD10aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk7ZWxzZXtsZXQgdj1sLnN0eWxlcyxNPSExO2lmKCF2KXtNPSEwO2NvbnN0IEc9e307ZC5lYXNpbmcmJihHLmVhc2luZz1kLmVhc2luZyksdj11cyhHKX1hLmN1cnJlbnRUaW1lKz1kLmR1cmF0aW9uK2QuZGVsYXk7Y29u''@;'; put 'put ''c3QgST10aGlzLnZpc2l0U3R5bGUodixhKTtJLmlzRW1wdHlTdGVwPU0saD1JfXJldHVybiBhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOkFvLkFuaW1hdGUsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD10aGlzLl9tYWtl''@;'; put 'put ''U3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgTSBvZiBoKSJzdHJpbmciPT10eXBlb2YgTT9NPT09''@;'; put 'put ''aWc/ZC5wdXNoKE0pOmEuZXJyb3JzLnB1c2gobmV3IFFuKDMwMDIsITEpKTpkLnB1c2gobmV3IE1hcChPYmplY3QuZW50cmllcyhNKSkpO2xldCBmPSExLHY9bnVsbDtyZXR1cm4gZC5mb3JFYWNoKE09PntpZihNIGluc3RhbmNlb2YgTWFwJiYoTS5oYXMoImVhc2luZyIpJiYodj1NLmdldCgi''@;'; put 'put ''ZWFzaW5nIiksTS5kZWxldGUoImVhc2luZyIpKSwhZikpZm9yKGxldCBJIG9mIE0udmFsdWVzKCkpaWYoSS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6QW8uU3R5bGUsc3R5bGVzOmQsZWFzaW5nOnYsb2Zmc2V0Omwub2Zmc2V0LGNvbnRhaW5zRHlu''@;'; put 'put ''YW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1hLmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5kZWxheSksbC5zdHlsZXMuZm9yRWFj''@;'; put 'put ''aCh2PT57InN0cmluZyIhPXR5cGVvZiB2JiZ2LmZvckVhY2goKE0sSSk9Pntjb25zdCBHPWEuY29sbGVjdGVkU3R5bGVzLmdldChhLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxpZT1HLmdldChJKTtsZXQgdWU9ITA7aWUmJihmIT1oJiZmPj1pZS5zdGFydFRpbWUmJmg8PWllLmVuZFRpbWUmJihh''@;'; put 'put ''LmVycm9ycy5wdXNoKGZ1bmN0aW9uIGxHZShjLGwsYSxkLGgpe3JldHVybiBuZXcgUW4oMzAxMCwhMSl9KCkpLHVlPSExKSxmPWllLnN0YXJ0VGltZSksdWUmJkcuc2V0KEkse3N0YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24gakdlKGMsbCxhKXtjb25zdCBkPWwu''@;'; put 'put ''cGFyYW1zfHx7fSxoPUVoZShjKTtoLmxlbmd0aCYmaC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gZUdlKGMpe3JldHVybiBuZXcgUW4oMzAwMSwhMSl9KCkpfSl9KE0sYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMobCxhKXtj''@;'; put 'put ''b25zdCBkPXt0eXBlOkFvLktleWZyYW1lcyxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY0dlKCl7cmV0dXJuIG5ldyBRbigzMDExLCExKX0oKSksZDtsZXQgZj0wO2NvbnN0IHY9W107bGV0''@;'; put 'put ''IE09ITEsST0hMSxHPTA7Y29uc3QgaWU9bC5zdGVwcy5tYXAocHQ9Pntjb25zdCBkdD10aGlzLl9tYWtlU3R5bGVBc3QocHQsYSk7bGV0IEp0PW51bGwhPWR0Lm9mZnNldD9kdC5vZmZzZXQ6ZnVuY3Rpb24gZSRlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gbnVsbDtsZXQgbD1u''@;'; put 'put ''dWxsO2lmKEFycmF5LmlzQXJyYXkoYykpYy5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiZhLmhhcygib2Zmc2V0Iikpe2NvbnN0IGQ9YTtsPXBhcnNlRmxvYXQoZC5nZXQoIm9mZnNldCIpKSxkLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgTWFwJiZj''@;'; put 'put ''Lmhhcygib2Zmc2V0Iikpe2NvbnN0IGE9YztsPXBhcnNlRmxvYXQoYS5nZXQoIm9mZnNldCIpKSxhLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIGx9KGR0LnN0eWxlcyksdm49MDtyZXR1cm4gbnVsbCE9SnQmJihmKyssdm49ZHQub2Zmc2V0PUp0KSxJPUl8fHZuPDB8fHZuPjEsTT1NfHx2bjxH''@;'; put 'put ''LEc9dm4sdi5wdXNoKHZuKSxkdH0pO0kmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gdUdlKCl7cmV0dXJuIG5ldyBRbigzMDEyLCExKX0oKSksTSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBkR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDAsITEpfSgpKTtjb25zdCB1ZT1sLnN0ZXBzLmxlbmd0aDts''@;'; put 'put ''ZXQgeWU9MDtmPjAmJmY8dWU/YS5lcnJvcnMucHVzaChmdW5jdGlvbiBoR2UoKXtyZXR1cm4gbmV3IFFuKDMyMDIsITEpfSgpKTowPT1mJiYoeWU9MS8odWUtMSkpO2NvbnN0IEVlPXVlLTEsamU9YS5jdXJyZW50VGltZSxxZT1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxydD1xZS5kdXJhdGlv''@;'; put 'put ''bjtyZXR1cm4gaWUuZm9yRWFjaCgocHQsZHQpPT57Y29uc3QgSnQ9eWU+MD9kdD09RWU/MTp5ZSpkdDp2W2R0XSx2bj1KdCpydDthLmN1cnJlbnRUaW1lPWplK3FlLmRlbGF5K3ZuLHFlLmR1cmF0aW9uPXZuLHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QocHQsYSkscHQub2Zmc2V0PUp0LGQuc3R5''@;'; put 'put ''bGVzLnB1c2gocHQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOkFvLlJlZmVyZW5jZSxhbmltYXRpb246QWgodGhpcyxuRShsLmFuaW1hdGlvbiksYSksb3B0aW9uczpINyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZChsLGEpe3JldHVybiBhLmRlcENvdW50Kyss''@;'; put 'put ''e3R5cGU6QW8uQW5pbWF0ZUNoaWxkLG9wdGlvbnM6SDcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6QW8uQW5pbWF0ZVJlZixhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0''@;'; put 'put ''UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZix2XT1mdW5jdGlvbiBYR2UoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEp''@;'; put 'put ''O3JldHVybiBsJiYoYz1jLnJlcGxhY2UoS0dlLCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLHZPKS5yZXBsYWNlKC9AXHcrL2csYT0+dk8rIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxQRyksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5s''@;'; put 'put ''ZW5ndGg/ZCsiICIrZjpmLFRoKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgTT1BaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6QW8u''@;'; put 'put ''UXVlcnksc2VsZWN0b3I6ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjp2LGFuaW1hdGlvbjpNLG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOkg3KGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5''@;'; put 'put ''fHxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGZHZSgpe3JldHVybiBuZXcgUW4oMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06eU8obC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZTpBby5TdGFn''@;'; put 'put ''Z2VyLGFuaW1hdGlvbjpBaCh0aGlzLG5FKGwuYW5pbWF0aW9uKSxhKSx0aW1pbmdzOmQsb3B0aW9uczpudWxsfX19Y2xhc3MgUUdle2NvbnN0cnVjdG9yKGwpe3RoaXMuZXJyb3JzPWwsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVs''@;'; put 'put ''bCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBw''@;'; put 'put ''b3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19ZnVuY3Rpb24gSDcoYyl7cmV0dXJuIGM/KGM9ey4uLmN9KS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBKR2UoYyl7cmV0dXJuIGM/ey4uLmN9Om51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1bmN0aW9uIGpHKGMsbCxhKXtyZXR1''@;'; put 'put ''cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiB6RyhjLGwsYSxkLGgsZix2PW51bGwsTT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRpb246aCxkZWxheTpmLHRvdGFsVGlt''@;'; put 'put ''ZTpoK2YsZWFzaW5nOnYsc3ViVGltZWxpbmU6TX19Y2xhc3MgQ097Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8dGhpcy5fbWFwLnNldChsLGQ9W10p''@;'; put 'put ''LGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJuIHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgaSRlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxvJGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFVHKGMsbCxhLGQsaCxmPW5ldyBN''@;'; put 'put ''YXAsdj1uZXcgTWFwLE0sSSxHPVtdKXtyZXR1cm4obmV3IHMkZSkuYnVpbGRLZXlmcmFtZXMoYyxsLGEsZCxoLGYsdixNLEksRyl9Y2xhc3MgcyRle2J1aWxkS2V5ZnJhbWVzKGwsYSxkLGgsZix2LE0sSSxHLGllPVtdKXtHPUd8fG5ldyBDTztjb25zdCB1ZT1uZXcgWkcobCxhLEcsaCxmLGll''@;'; put 'put ''LFtdKTt1ZS5vcHRpb25zPUk7Y29uc3QgeWU9SS5kZWxheT9wZyhJLmRlbGF5KTowO3VlLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHllKSx1ZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFt2XSxudWxsLHVlLmVycm9ycyxJKSxBaCh0aGlzLGQsdWUpO2NvbnN0IEVlPXVlLnRp''@;'; put 'put ''bWVsaW5lcy5maWx0ZXIoamU9PmplLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKEVlLmxlbmd0aCYmTS5zaXplKXtsZXQgamU7Zm9yKGxldCBxZT1FZS5sZW5ndGgtMTtxZT49MDtxZS0tKXtjb25zdCBydD1FZVtxZV07aWYocnQuZWxlbWVudD09PWEpe2plPXJ0O2JyZWFrfX1qZSYmIWplLmFs''@;'; put 'put ''bG93T25seVRpbWVsaW5lU3R5bGVzKCkmJmplLnNldFN0eWxlcyhbTV0sbnVsbCx1ZS5lcnJvcnMsSSl9cmV0dXJuIEVlLmxlbmd0aD9FZS5tYXAoamU9PmplLmJ1aWxkS2V5ZnJhbWVzKCkpOlt6RyhhLFtdLFtdLFtdLDAseWUsIiIsITEpXX12aXNpdFRyaWdnZXIobCxhKXt9dmlzaXRTdGF0''@;'; put 'put ''ZShsLGEpe312aXNpdFRyYW5zaXRpb24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50''@;'; put 'put ''VGltZSx2PXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPXYmJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtkLnRy''@;'; put 'put ''YW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGQuY3VycmVudFRp''@;'; put 'put ''bWVsaW5lLmN1cnJlbnRUaW1lKSxhLnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCB2PSJudW1iZXIiPT10eXBlb2YgZj9mOnBnKHJFKGYsaD8ucGFyYW1zPz97fSxhLmVy''@;'; put 'put ''cm9ycykpO2QuZGVsYXlOZXh0U3RlcCh2KX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3Qgdj1udWxsIT1kLmR1cmF0aW9uP3BnKGQuZHVyYXRpb24pOm51bGwsTT1udWxsIT1kLmRlbGF5P3BnKGQuZGVsYXkp''@;'; put 'put ''Om51bGw7cmV0dXJuIDAhPT12JiZsLmZvckVhY2goST0+e2NvbnN0IEc9YS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUoSSx2LE0pO2Y9TWF0aC5tYXgoZixHLmR1cmF0aW9uK0cuZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRlT3B0aW9ucyhsLm9wdGlvbnMsITAp''@;'; put 'put ''LEFoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEuY3JlYXRlU3ViQ29udGV4dChmKSxo''@;'; put 'put ''LnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXtoLnByZXZpb3VzTm9kZS50eXBlPT1Bby5TdHlsZSYmKGguY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGgucHJldmlvdXNOb2RlPVNPKTtjb25zdCB2PXBnKGYuZGVsYXkpO2guZGVsYXlO''@;'; put 'put ''ZXh0U3RlcCh2KX1sLnN0ZXBzLmxlbmd0aCYmKGwuc3RlcHMuZm9yRWFjaCh2PT5BaCh0aGlzLHYsaCkpLGguY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGguc3ViQ29udGV4dENvdW50PmQmJmgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGEucHJldmlvdXNO''@;'; put 'put ''b2RlPWx9dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9W107bGV0IGg9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgZj1sLm9wdGlvbnMmJmwub3B0aW9ucy5kZWxheT9wZyhsLm9wdGlvbnMuZGVsYXkpOjA7bC5zdGVwcy5mb3JFYWNoKHY9Pntjb25zdCBNPWEuY3JlYXRlU3Vi''@;'; put 'put ''Q29udGV4dChsLm9wdGlvbnMpO2YmJk0uZGVsYXlOZXh0U3RlcChmKSxBaCh0aGlzLHYsTSksaD1NYXRoLm1heChoLE0uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxkLnB1c2goTS5jdXJyZW50VGltZWxpbmUpfSksZC5mb3JFYWNoKHY9PmEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGlt''@;'; put 'put ''ZWxpbmVDb2xsZWN0ZWRTdHlsZXModikpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgpLGEucHJldmlvdXNOb2RlPWx9X3Zpc2l0VGltaW5nKGwsYSl7aWYobC5keW5hbWljKXtjb25zdCBkPWwuc3RyVmFsdWU7cmV0dXJuIHlPKGEucGFyYW1zP3JFKGQsYS5wYXJhbXMsYS5lcnJvcnMp''@;'; put 'put ''OmQsYS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjpsLmR1cmF0aW9uLGRlbGF5OmwuZGVsYXksZWFzaW5nOmwuZWFzaW5nfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKGwudGltaW5ncyxhKSxoPWEuY3VycmVudFRp''@;'; put 'put ''bWVsaW5lO2QuZGVsYXkmJihhLmluY3JlbWVudFRpbWUoZC5kZWxheSksaC5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7Y29uc3QgZj1sLnN0eWxlO2YudHlwZT09QW8uS2V5ZnJhbWVzP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRUaW1lKGQuZHVyYXRpb24pLHRoaXMu''@;'; put 'put ''dmlzaXRTdHlsZShmLGEpLGguYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFoJiZkLmhh''@;'; put 'put ''c0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9wdGlvbnMpLGEucHJldmlvdXNOb2Rl''@;'; put 'put ''PWx9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLE09YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO00uZWFzaW5nPWQuZWFzaW5nLGwuc3R5bGVzLmZv''@;'; put 'put ''ckVhY2goST0+e00uZm9yd2FyZFRpbWUoKEkub2Zmc2V0fHwwKSpmKSxNLnNldFN0eWxlcyhJLnN0eWxlcyxJLmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLE0uYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVz''@;'; put 'put ''KE0pLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P3BnKGguZGVsYXkpOjA7ZiYmKGEucHJldmlvdXNOb2Rl''@;'; put 'put ''LnR5cGU9PT1Bby5TdHlsZXx8MD09ZCYmYS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGEucHJldmlvdXNOb2RlPVNPKTtsZXQgdj1kO2NvbnN0IE09YS5pbnZva2VRdWVyeShs''@;'; put 'put ''LnNlbGVjdG9yLGwub3JpZ2luYWxTZWxlY3RvcixsLmxpbWl0LGwuaW5jbHVkZVNlbGYsISFoLm9wdGlvbmFsLGEuZXJyb3JzKTthLmN1cnJlbnRRdWVyeVRvdGFsPU0ubGVuZ3RoO2xldCBJPW51bGw7TS5mb3JFYWNoKChHLGllKT0+e2EuY3VycmVudFF1ZXJ5SW5kZXg9aWU7Y29uc3QgdWU9''@;'; put 'put ''YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyxHKTtmJiZ1ZS5kZWxheU5leHRTdGVwKGYpLEc9PT1hLmVsZW1lbnQmJihJPXVlLmN1cnJlbnRUaW1lbGluZSksQWgodGhpcyxsLmFuaW1hdGlvbix1ZSksdWUuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHY9TWF0''@;'; put 'put ''aC5tYXgodix1ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksYS5jdXJyZW50UXVlcnlJbmRleD0wLGEuY3VycmVudFF1ZXJ5VG90YWw9MCxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KSxJJiYoYS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxl''@;'; put 'put ''cyhJKSxhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdFN0YWdnZXIobCxhKXtjb25zdCBkPWEucGFyZW50Q29udGV4dCxoPWEuY3VycmVudFRpbWVsaW5lLGY9bC50aW1pbmdzLHY9TWF0aC5hYnMoZi5kdXJhdGlvbiksTT12''@;'; put 'put ''KihhLmN1cnJlbnRRdWVyeVRvdGFsLTEpO2xldCBJPXYqYS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goZi5kdXJhdGlvbjwwPyJyZXZlcnNlIjpmLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpJPU0tSTticmVhaztjYXNlImZ1bGwiOkk9ZC5jdXJyZW50U3RhZ2dlclRpbWV9Y29uc3QgaWU9YS5j''@;'; put 'put ''dXJyZW50VGltZWxpbmU7SSYmaWUuZGVsYXlOZXh0U3RlcChJKTtjb25zdCB1ZT1pZS5jdXJyZW50VGltZTtBaCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWwsZC5jdXJyZW50U3RhZ2dlclRpbWU9aC5jdXJyZW50VGltZS11ZSsoaC5zdGFydFRpbWUtZC5jdXJyZW50VGlt''@;'; put 'put ''ZWxpbmUuc3RhcnRUaW1lKX19Y29uc3QgU089e307Y2xhc3MgWkd7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxJKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN1Ykluc3RydWN0aW9ucz1kLHRoaXMuX2VudGVyQ2xhc3NOYW1lPWgsdGhpcy5fbGVhdmVDbGFzc05hbWU9''@;'; put 'put ''Zix0aGlzLmVycm9ycz12LHRoaXMudGltZWxpbmVzPU0sdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1TTyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVy''@;'; put 'put ''eUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9SXx8bmV3IE1PKHRoaXMuX2RyaXZlcixhLDApLE0ucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9w''@;'; put 'put ''dGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnMobCxhKXtpZighbClyZXR1cm47Y29uc3QgZD1sO2xldCBoPXRoaXMub3B0aW9ucztudWxsIT1kLmR1cmF0aW9uJiYoaC5kdXJhdGlvbj1wZyhkLmR1cmF0aW9uKSksbnVsbCE9ZC5kZWxheSYmKGguZGVsYXk9cGcoZC5kZWxheSkpO2NvbnN0IGY9''@;'; put 'put ''ZC5wYXJhbXM7aWYoZil7bGV0IHY9aC5wYXJhbXM7dnx8KHY9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57KCFhfHwhdi5oYXNPd25Qcm9wZXJ0eShNKSkmJih2W01dPXJFKGZbTV0sdix0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2Nv''@;'; put 'put ''bnN0IGw9e307aWYodGhpcy5vcHRpb25zKXtjb25zdCBhPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYSl7Y29uc3QgZD1sLnBhcmFtcz17fTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntkW2hdPWFbaF19KX19cmV0dXJuIGx9Y3JlYXRlU3ViQ29udGV4dChsPW51bGwsYSxkKXtjb25zdCBo''@;'; put 'put ''PWF8fHRoaXMuZWxlbWVudCxmPW5ldyBaRyh0aGlzLl9kcml2ZXIsaCx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGgsZHx8MCkp''@;'; put 'put ''O3JldHVybiBmLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxmLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxmLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxmLnVwZGF0ZU9wdGlvbnMobCksZi5jdXJyZW50UXVlcnlJbmRleD10aGlz''@;'; put 'put ''LmN1cnJlbnRRdWVyeUluZGV4LGYuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxmLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGZ9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGwpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1TTyx0''@;'; put 'put ''aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxsKSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxhLGQpe2NvbnN0''@;'; put 'put ''IGg9e2R1cmF0aW9uOmE/P2wuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGQ/PzApK2wuZGVsYXksZWFzaW5nOiIifSxmPW5ldyBsJGUodGhpcy5fZHJpdmVyLGwuZWxlbWVudCxsLmtleWZyYW1lcyxsLnByZVN0eWxlUHJvcHMsbC5wb3N0U3R5bGVQ''@;'; put 'put ''cm9wcyxoLGwuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGYpLGh9aW5jcmVtZW50VGltZShsKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbitsKX1kZWxheU5leHRTdGVwKGwp''@;'; put 'put ''e2w+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChsKX1pbnZva2VRdWVyeShsLGEsZCxoLGYsdil7bGV0IE09W107aWYoaCYmTS5wdXNoKHRoaXMuZWxlbWVudCksbC5sZW5ndGg+MCl7bD0obD1sLnJlcGxhY2UoaSRlLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJl''@;'; put 'put ''cGxhY2UobyRlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IEc9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCxsLDEhPWQpOzAhPT1kJiYoRz1kPDA/Ry5zbGljZShHLmxlbmd0aCtkLEcubGVuZ3RoKTpHLnNsaWNlKDAsZCkpLE0ucHVzaCguLi5HKX1yZXR1cm4hZiYmMD09''@;'; put 'put ''TS5sZW5ndGgmJnYucHVzaChmdW5jdGlvbiBwR2UoYyl7cmV0dXJuIG5ldyBRbigzMDE0LCExKX0oKSksTX19Y2xhc3MgTU97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHls''@;'; put 'put ''ZXNMb29rdXA9aCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9j''@;'; put 'put ''YWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1l''@;'; put 'put ''bGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1l''@;'; put 'put ''bGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7''@;'; put 'put ''Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRU''@;'; put 'put ''aW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZStsKSxhJiZ0aGlzLnNuYXBzaG90''@;'; put 'put ''Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IE1PKHRoaXMuX2RyaXZlcixsLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtl''@;'; put 'put ''eWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMu''@;'; put 'put ''X2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKGwpe3RoaXMuYXBwbHlTdHls''@;'; put 'put ''ZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldChs''@;'; put 'put ''LHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1l''@;'; put 'put ''LnNldCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxpZyksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGlnKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtl''@;'; put 'put ''eWZyYW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSx2PWZ1bmN0aW9uIGMkZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5mb3JFYWNoKGg9PntpZigiKiI9PT1o''@;'; put 'put ''KXtkPz89bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQpYS5zZXQoZixpZyl9ZWxzZSBmb3IobGV0W2Ysdl1vZiBoKWEuc2V0KGYsdil9KSxhfShsLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W00sSV1vZiB2KXtjb25zdCBHPXJFKEksZixkKTt0aGlzLl9wZW5kaW5nU3R5bGVz''@;'; put 'put ''LnNldChNLEcpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKE0pfHx0aGlzLl9iYWNrRmlsbC5zZXQoTSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoTSk/P2lnKSx0aGlzLl91cGRhdGVTdHlsZShNLEcpfX1hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKXswIT10aGlzLl9wZW5k''@;'; put 'put ''aW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSx0aGlzLl9wZW5kaW5nU3R5bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3Vy''@;'; put 'put ''cmVudEtleWZyYW1lLmhhcyhhKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygpe2ZvcihsZXRbbCxhXW9mIHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQobCxhKSx0aGlzLl91cGRhdGVTdHls''@;'; put 'put ''ZShsLGEpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSlsLnB1c2goYSk7cmV0dXJuIGx9bWVyZ2VUaW1lbGluZUNv''@;'; put 'put ''bGxlY3RlZFN0eWxlcyhsKXtsLl9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChkKTsoIWh8fGEudGltZT5oLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShkLGEudmFsdWUpfSl9YnVpbGRLZXlmcmFtZXMoKXt0aGlzLmFwcGx5U3R5''@;'; put 'put ''bGVzVG9LZXlmcmFtZSgpO2NvbnN0IGw9bmV3IFNldCxhPW5ldyBTZXQsZD0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uO2xldCBoPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChNLEkpPT57Y29uc3QgRz1uZXcgTWFwKFsuLi50aGlzLl9iYWNrRmlsbCwu''@;'; put 'put ''Li5NXSk7Ry5mb3JFYWNoKChpZSx1ZSk9PnsiISI9PT1pZT9sLmFkZCh1ZSk6aWU9PT1pZyYmYS5hZGQodWUpfSksZHx8Ry5zZXQoIm9mZnNldCIsSS90aGlzLmR1cmF0aW9uKSxoLnB1c2goRyl9KTtjb25zdCBmPVsuLi5sLnZhbHVlcygpXSx2PVsuLi5hLnZhbHVlcygpXTtpZihkKXtjb25z''@;'; put 'put ''dCBNPWhbMF0sST1uZXcgTWFwKE0pO00uc2V0KCJvZmZzZXQiLDApLEkuc2V0KCJvZmZzZXQiLDEpLGg9W00sSV19cmV0dXJuIHpHKHRoaXMuZWxlbWVudCxoLGYsdix0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgbCRlIGV4dGVuZHMgTU97Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLHYsTT0hMSl7c3VwZXIobCxhLHYuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPU0sdGhpcy50aW1pbmdzPXtkdXJhdGlvbjp2LmR1''@;'; put 'put ''cmF0aW9uLGRlbGF5OnYuZGVsYXksZWFzaW5nOnYuZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmQsZWFzaW5nOmh9PXRoaXMudGlt''@;'; put 'put ''aW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSx2PWQrYSxNPWEvdixJPW5ldyBNYXAobFswXSk7SS5zZXQoIm9mZnNldCIsMCksZi5wdXNoKEkpO2NvbnN0IEc9bmV3IE1hcChsWzBdKTtHLnNldCgib2Zmc2V0IixJaGUoTSkpLGYucHVzaChHKTtj''@;'; put 'put ''b25zdCBpZT1sLmxlbmd0aC0xO2ZvcihsZXQgdWU9MTt1ZTw9aWU7dWUrKyl7bGV0IHllPW5ldyBNYXAobFt1ZV0pO2NvbnN0IEVlPXllLmdldCgib2Zmc2V0Iik7eWUuc2V0KCJvZmZzZXQiLEloZSgoYStFZSpkKS92KSksZi5wdXNoKHllKX1kPXYsYT0wLGg9IiIsbD1mfXJldHVybiB6Ryh0''@;'; put 'put ''aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIEloZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1mdW5jdGlvbiBSaGUoYyxsLGEsZCxoLGYsdixNLEks''@;'; put 'put ''RyxpZSx1ZSx5ZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxlczp2LHRpbWVsaW5lczpNLHF1ZXJpZWRFbGVtZW50czpJLHByZVN0eWxlUHJvcHM6Ryxw''@;'; put 'put ''b3N0U3R5bGVQcm9wczppZSx0b3RhbFRpbWU6dWUsZXJyb3JzOnllfX1jb25zdCBXRz17fTtjbGFzcyBMaGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiB1''@;'; put 'put ''JGUoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwmJihoPXRoaXMuX3N0YXRlU3R5bGVzLmdl''@;'; put 'put ''dChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsdixNLEksRyxpZSl7Y29uc3QgdWU9W10seWU9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fFdHLGplPXRoaXMuYnVpbGRTdHlsZXMoZCxNJiZN''@;'; put 'put ''LnBhcmFtc3x8V0csdWUpLHFlPUkmJkkucGFyYW1zfHxXRyxydD10aGlzLmJ1aWxkU3R5bGVzKGgscWUsdWUpLHB0PW5ldyBTZXQsZHQ9bmV3IE1hcCxKdD1uZXcgTWFwLHZuPSJ2b2lkIj09PWgsQ249e3BhcmFtczpPaGUocWUseWUpLGRlbGF5OnRoaXMuYXN0Lm9wdGlvbnM/LmRlbGF5fSx0''@;'; put 'put ''bj1pZT9bXTpVRyhsLGEsdGhpcy5hc3QuYW5pbWF0aW9uLGYsdixqZSxydCxDbixHLHVlKTtsZXQgTW49MDtyZXR1cm4gdG4uZm9yRWFjaChDcj0+e01uPU1hdGgubWF4KENyLmR1cmF0aW9uK0NyLmRlbGF5LE1uKX0pLHVlLmxlbmd0aD9SaGUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgsdm4s''@;'; put 'put ''amUscnQsW10sW10sZHQsSnQsTW4sdWUpOih0bi5mb3JFYWNoKENyPT57Y29uc3QgR3I9Q3IuZWxlbWVudCxtcj1UaChkdCxHcixuZXcgU2V0KTtDci5wcmVTdHlsZVByb3BzLmZvckVhY2goYWk9Pm1yLmFkZChhaSkpO2NvbnN0IEduPVRoKEp0LEdyLG5ldyBTZXQpO0NyLnBvc3RTdHlsZVBy''@;'; put 'put ''b3BzLmZvckVhY2goYWk9PkduLmFkZChhaSkpLEdyIT09YSYmcHQuYWRkKEdyKX0pLFJoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx2bixqZSxydCx0bixbLi4ucHQudmFsdWVzKCldLGR0LEp0LE1uKSl9fWZ1bmN0aW9uIE9oZShjLGwpe2NvbnN0IGE9ey4uLmx9O3JldHVybiBPYmplY3Qu''@;'; put 'put ''ZW50cmllcyhjKS5mb3JFYWNoKChbZCxoXSk9PntudWxsIT1oJiYoYVtkXT1oKX0pLGF9Y2xhc3MgZCRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVzKGwsYSl7Y29uc3QgZD1uZXcgTWFw''@;'; put 'put ''LGg9T2hlKGwsdGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKCh2LE0pPT57diYmKHY9ckUodixoLGEpKTtjb25zdCBJPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5h''@;'; put 'put ''bWUoTSxhKTt2PXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKE0sSSx2LGEpLGQuc2V0KE0sdil9KX0pLGR9fWNsYXNzIGYkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy50cmFuc2l0aW9uRmFjdG9y''@;'; put 'put ''aWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0ZXMuc2V0KGgubmFtZSxuZXcgZCRlKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxQaGUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksUGhlKHRoaXMuc3Rh''@;'; put 'put ''dGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBMaGUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiBwJGUoYyxsLGEpe3JldHVybiBuZXcgTGhlKGMse3R5''@;'; put 'put ''cGU6QW8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6QW8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHYsTSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVz''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHY9PnYubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5z''@;'; put 'put ''aXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBQaGUoYyxsLGEpe2MuaGFzKGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgZyRlPW5ldyBDTztjbGFzcyBtJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9k''@;'; put 'put ''eU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5pbWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPUJHKHRoaXMuX2RyaXZlcixhLGQsW10pO2lmKGQu''@;'; put 'put ''bGVuZ3RoKXRocm93IGZ1bmN0aW9uIHdHZShjKXtyZXR1cm4gbmV3IFFuKDM1MDMsITEpfSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPXloZSh0aGlzLl9ub3JtYWxpemVyLGwua2V5ZnJhbWVzLGEsZCk7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCB2O2NvbnN0IE09bmV3IE1hcDtpZihmPyh2PVVHKHRoaXMuX2RyaXZlcixhLGYs''@;'; put 'put ''T0csZ08sbmV3IE1hcCxuZXcgTWFwLGQsZyRlLGgpLHYuZm9yRWFjaChpZT0+e2NvbnN0IHVlPVRoKE0saWUuZWxlbWVudCxuZXcgTWFwKTtpZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKHllPT51ZS5zZXQoeWUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rpb24gQ0dlKCl7cmV0dXJuIG5ldyBR''@;'; put 'put ''bigzMzAwLCExKX0oKSksdj1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gU0dlKGMpe3JldHVybiBuZXcgUW4oMzUwNCwhMSl9KCk7TS5mb3JFYWNoKChpZSx1ZSk9PntpZS5mb3JFYWNoKCh5ZSxFZSk9PntpZS5zZXQoRWUsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZSh1ZSxFZSxpZykp''@;'; put 'put ''fSl9KTtjb25zdCBHPURtKHYubWFwKGllPT57Y29uc3QgdWU9TS5nZXQoaWUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKGllLG5ldyBNYXAsdWUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZC5zZXQobCxHKSxHLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KGwpKSx0''@;'; put 'put ''aGlzLnBsYXllcnMucHVzaChHKSxHfWRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9nZXRQbGF5ZXIobCk7YS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKGwpO2NvbnN0IGQ9dGhpcy5wbGF5ZXJzLmluZGV4T2YoYSk7ZD49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShkLDEpfV9n''@;'; put 'put ''ZXRQbGF5ZXIobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXJzQnlJZC5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24gTUdlKGMpe3JldHVybiBuZXcgUW4oMzMwMSwhMSl9KCk7cmV0dXJuIGF9bGlzdGVuKGwsYSxkLGgpe2NvbnN0IGY9a0coYSwiIiwiIiwiIik7cmV0dXJuIFRHKHRoaXMuX2dl''@;'; put 'put ''dFBsYXllcihsKSxkLGYsaCksKCk9Pnt9fWNvbW1hbmQobCxhLGQsaCl7aWYoInJlZ2lzdGVyIj09ZClyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKGwsaFswXSk7aWYoImNyZWF0ZSI9PWQpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUobCxhLGhbMF18fHt9KTtjb25zdCBmPXRoaXMuX2dldFBs''@;'; put 'put ''YXllcihsKTtzd2l0Y2goZCl7Y2FzZSJwbGF5IjpmLnBsYXkoKTticmVhaztjYXNlInBhdXNlIjpmLnBhdXNlKCk7YnJlYWs7Y2FzZSJyZXNldCI6Zi5yZXNldCgpO2JyZWFrO2Nhc2UicmVzdGFydCI6Zi5yZXN0YXJ0KCk7YnJlYWs7Y2FzZSJmaW5pc2giOmYuZmluaXNoKCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJpbml0IjpmLmluaXQoKTticmVhaztjYXNlInNldFBvc2l0aW9uIjpmLnNldFBvc2l0aW9uKHBhcnNlRmxvYXQoaFswXSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6dGhpcy5kZXN0cm95KGwpfX19Y29uc3QgRmhlPSJuZy1hbmltYXRlLXF1ZXVlZCIsWUc9Im5nLWFuaW1hdGUtZGlzYWJsZWQi''@;'; put 'put ''LHckZT1bXSxIaGU9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LEMkZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1vdmFsOiExLGhhc0FuaW1hdGlvbjoh''@;'; put 'put ''MSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sZTM9Il9fbmdfcmVtb3ZlZCI7Y2xhc3MgR0d7Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWNvbnN0cnVjdG9yKGwsYT0iIil7dGhpcy5uYW1lc3BhY2VJZD1hO2NvbnN0IGQ9bCYmbC5oYXNPd25Qcm9wZXJ0eSgidmFs''@;'; put 'put ''dWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uIEUkZShjKXtyZXR1cm4gYz8/bnVsbH0oZD9sLnZhbHVlOmwpLGQpe2NvbnN0e3ZhbHVlOmYsLi4udn09bDt0aGlzLm9wdGlvbnM9dn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFt''@;'; put 'put ''cz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1zO2lmKGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgaUU9InZvaWQiLCRHPW5ldyBHRyhpRSk7Y2xhc3Mg''@;'; put 'put ''UyRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmlkPWwsdGhpcy5ob3N0RWxlbWVudD1hLHRoaXMuX2VuZ2luZT1kLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xh''@;'; put 'put ''c3NOYW1lPSJuZy10bnMtIitsLEYyKGEsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24geEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzMzAyLCExKX0oKTtpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl0aHJv''@;'; put 'put ''dyBmdW5jdGlvbiBFR2UoYyl7cmV0dXJuIG5ldyBRbigzMzAzLCExKX0oKTtpZighZnVuY3Rpb24gVCRlKGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVuY3Rpb24gVEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNDAwLCExKX0oKTtjb25zdCBmPVRoKHRoaXMuX2Vs''@;'; put 'put ''ZW1lbnRMaXN0ZW5lcnMsbCxbXSksdj17bmFtZTphLHBoYXNlOmQsY2FsbGJhY2s6aH07Zi5wdXNoKHYpO2NvbnN0IE09VGgodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBNYXApO3JldHVybiBNLmhhcyhhKXx8KEYyKGwsbU8pLEYyKGwsbU8rIi0iK2EpLE0uc2V0KGEsJEcp''@;'; put 'put ''KSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29uc3QgST1mLmluZGV4T2Yodik7ST49MCYmZi5zcGxpY2UoSSwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fE0uZGVsZXRlKGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyhsKSYmKHRoaXMu''@;'; put 'put ''X3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtjb25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBBR2UoYyl7cmV0dXJuIG5ldyBRbigzNDAxLCExKX0oKTtyZXR1cm4gYX10cmlnZ2VyKGwsYSxkLGg9ITApe2NvbnN0IGY9dGhpcy5f''@;'; put 'put ''Z2V0VHJpZ2dlcihhKSx2PW5ldyBLRyh0aGlzLmlkLGEsbCk7bGV0IE09dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7TXx8KEYyKGwsbU8pLEYyKGwsbU8rIi0iK2EpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KGwsTT1uZXcgTWFwKSk7bGV0IEk9TS5nZXQo''@;'; put 'put ''YSk7Y29uc3QgRz1uZXcgR0coZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZJJiZHLmFic29yYk9wdGlvbnMoSS5vcHRpb25zKSxNLnNldChhLEcpLEl8fChJPSRHKSxHLnZhbHVlIT09aUUmJkkudmFsdWU9PT1HLnZhbHVlKXtpZighZnVuY3Rpb24gRCRl''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1PYmplY3Qua2V5cyhjKSxkPU9iamVjdC5rZXlzKGwpO2lmKGEubGVuZ3RoIT1kLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2lmKCFsLmhhc093blByb3BlcnR5KGYpfHxjW2ZdIT09bFtmXSlyZXR1cm4hMX1y''@;'; put 'put ''ZXR1cm4hMH0oSS5wYXJhbXMsRy5wYXJhbXMpKXtjb25zdCBxZT1bXSxydD1mLm1hdGNoU3R5bGVzKEkudmFsdWUsSS5wYXJhbXMscWUpLHB0PWYubWF0Y2hTdHlsZXMoRy52YWx1ZSxHLnBhcmFtcyxxZSk7cWUubGVuZ3RoP3RoaXMuX2VuZ2luZS5yZXBvcnRFcnJvcihxZSk6dGhpcy5fZW5n''@;'; put 'put ''aW5lLmFmdGVyRmx1c2goKCk9PntGNyhsLHJ0KSxNcChsLHB0KX0pfXJldHVybn1jb25zdCB5ZT1UaCh0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCxsLFtdKTt5ZS5mb3JFYWNoKHFlPT57cWUubmFtZXNwYWNlSWQ9PXRoaXMuaWQmJnFlLnRyaWdnZXJOYW1lPT1hJiZxZS5xdWV1ZWQm''@;'; put 'put ''JnFlLmRlc3Ryb3koKX0pO2xldCBFZT1mLm1hdGNoVHJhbnNpdGlvbihJLnZhbHVlLEcudmFsdWUsbCxHLnBhcmFtcyksamU9ITE7aWYoIUVlKXtpZighaClyZXR1cm47RWU9Zi5mYWxsYmFja1RyYW5zaXRpb24samU9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMr''@;'; put 'put ''Kyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOkVlLGZyb21TdGF0ZTpJLHRvU3RhdGU6RyxwbGF5ZXI6dixpc0ZhbGxiYWNrVHJhbnNpdGlvbjpqZX0pLGplfHwoRjIobCxGaGUpLHYub25TdGFydCgoKT0+e2lfKGwsRmhlKX0pKSx2Lm9uRG9u''@;'; put 'put ''ZSgoKT0+e2xldCBxZT10aGlzLnBsYXllcnMuaW5kZXhPZih2KTtxZT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShxZSwxKTtjb25zdCBydD10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYocnQpe2xldCBwdD1ydC5pbmRleE9mKHYpO3B0Pj0wJiZydC5zcGxpY2UocHQs''@;'; put 'put ''MSl9fSksdGhpcy5wbGF5ZXJzLnB1c2godikseWUucHVzaCh2KSx2fWRlcmVnaXN0ZXIobCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKGwpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChhPT5hLmRlbGV0ZShsKSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChh''@;'; put 'put ''LGQpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoZCxhLmZpbHRlcihoPT5oLm5hbWUhPWwpKX0pfWNsZWFyRWxlbWVudENhY2hlKGwpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKGwpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKGwpO2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJihhLmZvckVhY2goZD0+ZC5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZShsKSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmUuZHJp''@;'; put 'put ''dmVyLnF1ZXJ5KGwsdk8sITApO2QuZm9yRWFjaChoPT57aWYoaFtlM10pcmV0dXJuO2NvbnN0IGY9dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChoKTtmLnNpemU/Zi5mb3JFYWNoKHY9PnYudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGgsYSwhMSwhMCkpOnRoaXMuY2xlYXJF''@;'; put 'put ''bGVtZW50Q2FjaGUoaCl9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5kLmZvckVhY2goaD0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbihsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1l''@;'; put 'put ''bnQuZ2V0KGwpLHY9bmV3IE1hcDtpZihmKXtjb25zdCBNPVtdO2lmKGYuZm9yRWFjaCgoSSxHKT0+e2lmKHYuc2V0KEcsSS52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKEcpKXtjb25zdCBpZT10aGlzLnRyaWdnZXIobCxHLGlFLGgpO2llJiZNLnB1c2goaWUpfX0pLE0ubGVuZ3RoKXJldHVy''@;'; put 'put ''biB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCxsLCEwLGEsdiksZCYmRG0oTSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShsKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fZWxlbWVudExpc3RlbmVycy5nZXQobCksZD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihhJiZkKXtjb25zdCBoPW5ldyBTZXQ7YS5mb3JFYWNoKGY9Pntjb25zdCB2PWYubmFtZTtpZihoLmhhcyh2KSlyZXR1cm47aC5hZGQodik7Y29uc3QgST10aGlzLl90cmln''@;'; put 'put ''Z2Vycy5nZXQodikuZmFsbGJhY2tUcmFuc2l0aW9uLEc9ZC5nZXQodil8fCRHLGllPW5ldyBHRyhpRSksdWU9bmV3IEtHKHRoaXMuaWQsdixsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOnYsdHJhbnNp''@;'; put 'put ''dGlvbjpJLGZyb21TdGF0ZTpHLHRvU3RhdGU6aWUscGxheWVyOnVlLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lO2lmKGwuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJz''@;'; put 'put ''KGwsYSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLCEwKSlyZXR1cm47bGV0IGg9ITE7aWYoZC50b3RhbEFuaW1hdGlvbnMpe2NvbnN0IGY9ZC5wbGF5ZXJzLmxlbmd0aD9kLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTpbXTtpZihmJiZmLmxlbmd0aCloPSEwO2Vsc2V7''@;'; put 'put ''bGV0IHY9bDtmb3IoO3Y9di5wYXJlbnROb2RlOylpZihkLnN0YXRlc0J5RWxlbWVudC5nZXQodikpe2g9ITA7YnJlYWt9fX1pZih0aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKSxoKWQubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCxsLCExLGEpO2Vsc2V7Y29uc3Qg''@;'; put 'put ''Zj1sW2UzXTsoIWZ8fGY9PT1IaGUpJiYoZC5hZnRlckZsdXNoKCgpPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGwpKSxkLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCksZC5fb25SZW1vdmFsQ29tcGxldGUobCxhKSl9fWluc2VydE5vZGUobCxhKXtGMihsLHRoaXMuX2hvc3RDbGFzc05hbWUp''@;'; put 'put ''fWRyYWluUXVldWVkVHJhbnNpdGlvbnMobCl7Y29uc3QgYT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChkPT57Y29uc3QgaD1kLnBsYXllcjtpZihoLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgZj1kLmVsZW1lbnQsdj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChmKTt2JiZ2LmZv''@;'; put 'put ''ckVhY2goTT0+e2lmKE0ubmFtZT09ZC50cmlnZ2VyTmFtZSl7Y29uc3QgST1rRyhmLGQudHJpZ2dlck5hbWUsZC5mcm9tU3RhdGUudmFsdWUsZC50b1N0YXRlLnZhbHVlKTtJLl9kYXRhPWwsVEcoZC5wbGF5ZXIsTS5waGFzZSxJLE0uY2FsbGJhY2spfX0pLGgubWFya2VkRm9yRGVzdHJveT90''@;'; put 'put ''aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2guZGVzdHJveSgpfSk6YS5wdXNoKGQpfSksdGhpcy5fcXVldWU9W10sYS5zb3J0KChkLGgpPT57Y29uc3QgZj1kLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHY9aC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09Znx8MD09dj9m''@;'; put 'put ''LXY6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoZC5lbGVtZW50LGguZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kobCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goYT0+YS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1l''@;'; put 'put ''bnQsbCl9fWNsYXNzIE0kZXtfb25SZW1vdmFsQ29tcGxldGUobCxhKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKGwsYSl9Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuc2NoZWR1bGVyPWgsdGhpcy5wbGF5''@;'; put 'put ''ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50''@;'; put 'put ''b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBN''@;'; put 'put ''YXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT57fX1nZXQgcXVldWVkUGxheWVycygpe2NvbnN0IGw9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChh''@;'; put 'put ''PT57YS5wbGF5ZXJzLmZvckVhY2goZD0+e2QucXVldWVkJiZsLnB1c2goZCl9KX0pLGx9Y3JlYXRlTmFtZXNwYWNlKGwsYSl7Y29uc3QgZD1uZXcgUyRlKGwsYSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsYSk/''@;'; put 'put ''dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxhKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGEsZCksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF09ZH1fYmFsYW5jZU5hbWVzcGFjZUxpc3QobCxhKXtjb25zdCBkPXRoaXMuX25hbWVz''@;'; put 'put ''cGFjZUxpc3QsaD10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGQubGVuZ3RoLTE+PTApe2xldCB2PSExLE09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChhKTtmb3IoO007KXtjb25zdCBJPWguZ2V0KE0pO2lmKEkpe2NvbnN0IEc9ZC5pbmRleE9mKEkpO2Quc3BsaWNlKEcr''@;'; put 'put ''MSwwLGwpLHY9ITA7YnJlYWt9TT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KE0pfXZ8fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO3JldHVybiBkfHwoZD10aGlz''@;'; put 'put ''LmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMuYWZ0ZXJGbHVzaCgoKT0+e30pLHRo''@;'; put 'put ''aXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihkKTtoPj0wJiZ0aGlz''@;'; put 'put ''Ll9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShhKSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChsKXtjb25zdCBhPW5l''@;'; put 'put ''dyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVybiBhfXRyaWdnZXIobCxhLGQsaCl7''@;'; put 'put ''aWYoeE8oYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCF4TyhhKSlyZXR1cm47Y29uc3QgZj1hW2UzXTtpZihmJiZmLnNldEZvclJlbW92YWwpe2Yuc2V0Rm9y''@;'; put 'put ''UmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3Qgdj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTt2Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHYsMSl9aWYobCl7Y29uc3Qgdj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt2JiZ2Lmlu''@;'; put 'put ''c2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCl8fCh0aGlz''@;'; put 'put ''LmRpc2FibGVkTm9kZXMuYWRkKGwpLEYyKGwsWUcpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxpXyhsLFlHKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoeE8oYSkpe3RoaXMuc2NoZWR1bGVyPy5ub3RpZnkoKTtjb25zdCBoPWw/dGhp''@;'; put 'put ''cy5fZmV0Y2hOYW1lc3BhY2UobCk6bnVsbDtoP2gucmVtb3ZlTm9kZShhLGQpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLCExLGQpO2NvbnN0IGY9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoYSk7ZiYmZi5pZCE9PWwmJmYucmVtb3ZlTm9kZShhLGQpfWVsc2UgdGhp''@;'; put 'put ''cy5fb25SZW1vdmFsQ29tcGxldGUoYSxkKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsZCxoLGYpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGEpLGFbZTNdPXtuYW1lc3BhY2VJZDpsLHNldEZvclJlbW92YWw6aCxoYXNBbmltYXRpb246ZCxyZW1vdmVkQmVmb3JlUXVlcmll''@;'; put 'put ''ZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmZ9fWxpc3RlbihsLGEsZCxoLGYpe3JldHVybiB4TyhhKT90aGlzLl9mZXRjaE5hbWVzcGFjZShsKS5saXN0ZW4oYSxkLGgsZik6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKGwsYSxkLGgsZil7cmV0dXJuIGwudHJhbnNpdGlvbi5idWlsZCh0''@;'; put 'put ''aGlzLmRyaXZlcixsLmVsZW1lbnQsbC5mcm9tU3RhdGUudmFsdWUsbC50b1N0YXRlLnZhbHVlLGQsaCxsLmZyb21TdGF0ZS5vcHRpb25zLGwudG9TdGF0ZS5vcHRpb25zLGEsZil9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKXtsZXQgYT10aGlzLmRyaXZlci5xdWVyeShsLHZPLCEwKTthLmZv''@;'; put 'put ''ckVhY2goZD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZCkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGE9dGhpcy5kcml2ZXIucXVlcnkobCxQRywhMCksYS5mb3JFYWNoKGQ9PnRoaXMuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlv''@;'; put 'put ''bk9uRWxlbWVudChkKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PntkLnF1ZXVlZD9kLm1hcmtlZEZvckRlc3Ryb3k9ITA6ZC5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVR''@;'; put 'put ''dWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PmQuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntpZih0aGlzLnBsYXllcnMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBEbSh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+bCgpKTtsKCl9KX1wcm9jZXNzTGVhdmVOb2RlKGwpe2NvbnN0IGE9bFtlM107aWYoYSYmYS5zZXRGb3JSZW1vdmFsKXtpZihsW2UzXT1IaGUsYS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpO2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYS5uYW1lc3BhY2VJZCk7ZCYmZC5jbGVhckVsZW1lbnRDYWNoZShsKX10aGlzLl9vblJlbW92YWxDb21wbGV0ZShsLGEuc2V0Rm9yUmVtb3ZhbCl9bC5jbGFzc0xpc3Q/LmNvbnRhaW5zKFlHKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQo''@;'; put 'put ''bCwhMSksdGhpcy5kcml2ZXIucXVlcnkobCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGQ9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChkLCExKX0pfWZsdXNoKGw9LTEpe2xldCBhPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RF''@;'; put 'put ''bGVtZW50cy5mb3JFYWNoKChkLGgpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGgpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IobGV0IGQ9MDtkPHRoaXMuY29s''@;'; put 'put ''bGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7ZCsrKUYyKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tkXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVt''@;'; put 'put ''ZW50cy5sZW5ndGgpKXtjb25zdCBkPVtdO3RyeXthPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhkLGwpfWZpbmFsbHl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspZFtoXSgpfX1lbHNlIGZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtkKyspdGhpcy5w''@;'; put 'put ''cm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tkXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5z''@;'; put 'put ''LmZvckVhY2goZD0+ZCgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCBkPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sYS5sZW5ndGg/RG0oYSkub25Eb25lKCgpPT57ZC5mb3JFYWNoKGg9PmgoKSl9KTpkLmZvckVh''@;'; put 'put ''Y2goaD0+aCgpKX19cmVwb3J0RXJyb3IobCl7dGhyb3cgZnVuY3Rpb24ga0dlKGMpe3JldHVybiBuZXcgUW4oMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhsLGEpe2NvbnN0IGQ9bmV3IENPLGg9W10sZj1uZXcgTWFwLHY9W10sTT1uZXcgTWFwLEk9bmV3IE1hcCxHPW5ldyBNYXAsaWU9''@;'; put 'put ''bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChKbj0+e2llLmFkZChKbik7Y29uc3QgSXI9dGhpcy5kcml2ZXIucXVlcnkoSm4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgJHI9MDskcjxJci5sZW5ndGg7JHIrKylpZS5hZGQoSXJbJHJdKX0pO2NvbnN0IHVlPXRo''@;'; put 'put ''aXMuYm9keU5vZGUseWU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLEVlPUJoZSh5ZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLGplPW5ldyBNYXA7bGV0IHFlPTA7RWUuZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9T0crcWUrKztqZS5zZXQoSXIsJHIp''@;'; put 'put ''LEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KTtjb25zdCBydD1bXSxwdD1uZXcgU2V0LGR0PW5ldyBTZXQ7Zm9yKGxldCBKbj0wO0puPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7Sm4rKyl7Y29uc3QgSXI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0puXSwkcj1J''@;'; put 'put ''cltlM107JHImJiRyLnNldEZvclJlbW92YWwmJihydC5wdXNoKElyKSxwdC5hZGQoSXIpLCRyLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShJciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKHdpPT5wdC5hZGQod2kpKTpkdC5hZGQoSXIpKX1jb25zdCBKdD1uZXcgTWFw''@;'; put 'put ''LHZuPUJoZSh5ZSxBcnJheS5mcm9tKHB0KSk7dm4uZm9yRWFjaCgoSm4sSXIpPT57Y29uc3QgJHI9Z08rcWUrKztKdC5zZXQoSXIsJHIpLEpuLmZvckVhY2god2k9PkYyKHdpLCRyKSl9KSxsLnB1c2goKCk9PntFZS5mb3JFYWNoKChKbixJcik9Pntjb25zdCAkcj1qZS5nZXQoSXIpO0puLmZv''@;'; put 'put ''ckVhY2god2k9PmlfKHdpLCRyKSl9KSx2bi5mb3JFYWNoKChKbixJcik9Pntjb25zdCAkcj1KdC5nZXQoSXIpO0puLmZvckVhY2god2k9PmlfKHdpLCRyKSl9KSxydC5mb3JFYWNoKEpuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEpuKX0pfSk7Y29uc3QgQ249W10sdG49W107Zm9yKGxldCBK''@;'; put 'put ''bj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO0puPj0wO0puLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtKbl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKCRyPT57Y29uc3Qgd2k9JHIucGxheWVyLGVhPSRyLmVsZW1lbnQ7aWYoQ24ucHVzaCh3aSksdGhpcy5jb2xsZWN0''@;'; put 'put ''ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgYXI9ZWFbZTNdO2lmKGFyJiZhci5zZXRGb3JNb3ZlKXtpZihhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZhci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IEhyPWFyLnByZXZpb3VzVHJpZ2dl''@;'; put 'put ''cnNWYWx1ZXMuZ2V0KCRyLnRyaWdnZXJOYW1lKSxxcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoJHIuZWxlbWVudCk7aWYocXImJnFyLmhhcygkci50cmlnZ2VyTmFtZSkpe2NvbnN0IG9uPXFyLmdldCgkci50cmlnZ2VyTmFtZSk7b24udmFsdWU9SHIscXIuc2V0KCRyLnRyaWdnZXJOYW1l''@;'; put 'put ''LG9uKX19cmV0dXJuIHZvaWQgd2kuZGVzdHJveSgpfX1jb25zdCBmYT0hdWV8fCF0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodWUsZWEpLHZ0PUp0LmdldChlYSksTnQ9amUuZ2V0KGVhKSxIdD10aGlzLl9idWlsZEluc3RydWN0aW9uKCRyLGQsTnQsdnQsZmEpO2lmKEh0LmVycm9ycyYm''@;'; put 'put ''SHQuZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCB0bi5wdXNoKEh0KTtpZihmYSlyZXR1cm4gd2kub25TdGFydCgoKT0+RjcoZWEsSHQuZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+TXAoZWEsSHQudG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7aWYoJHIuaXNGYWxsYmFja1RyYW5z''@;'; put 'put ''aXRpb24pcmV0dXJuIHdpLm9uU3RhcnQoKCk9PkY3KGVhLEh0LmZyb21TdHlsZXMpKSx3aS5vbkRlc3Ryb3koKCk9Pk1wKGVhLEh0LnRvU3R5bGVzKSksdm9pZCBoLnB1c2god2kpO2NvbnN0IEhuPVtdO0h0LnRpbWVsaW5lcy5mb3JFYWNoKGFyPT57YXIuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJh''@;'; put 'put ''bWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhhci5lbGVtZW50KXx8SG4ucHVzaChhcil9KSxIdC50aW1lbGluZXM9SG4sZC5hcHBlbmQoZWEsSHQudGltZWxpbmVzKSx2LnB1c2goe2luc3RydWN0aW9uOkh0LHBsYXllcjp3aSxlbGVtZW50OmVhfSksSHQucXVlcmllZEVsZW1lbnRzLmZv''@;'; put 'put ''ckVhY2goYXI9PlRoKE0sYXIsW10pLnB1c2god2kpKSxIdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKGFyLEhyKT0+e2lmKGFyLnNpemUpe2xldCBxcj1JLmdldChIcik7cXJ8fEkuc2V0KEhyLHFyPW5ldyBTZXQpLGFyLmZvckVhY2goKG9uLGJuKT0+cXIuYWRkKGJuKSl9fSksSHQucG9zdFN0''@;'; put 'put ''eWxlUHJvcHMuZm9yRWFjaCgoYXIsSHIpPT57bGV0IHFyPUcuZ2V0KEhyKTtxcnx8Ry5zZXQoSHIscXI9bmV3IFNldCksYXIuZm9yRWFjaCgob24sYm4pPT5xci5hZGQoYm4pKX0pfSk7aWYodG4ubGVuZ3RoKXtjb25zdCBKbj1bXTt0bi5mb3JFYWNoKElyPT57Sm4ucHVzaChmdW5jdGlvbiBE''@;'; put 'put ''R2UoYyxsKXtyZXR1cm4gbmV3IFFuKDM1MDUsITEpfSgpKX0pLENuLmZvckVhY2goSXI9PklyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihKbil9Y29uc3QgTW49bmV3IE1hcCxDcj1uZXcgTWFwO3YuZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVsZW1lbnQ7ZC5oYXMoSXIpJiYoQ3Iu''@;'; put 'put ''c2V0KElyLElyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKbi5wbGF5ZXIubmFtZXNwYWNlSWQsSm4uaW5zdHJ1Y3Rpb24sTW4pKX0pLGguZm9yRWFjaChKbj0+e2NvbnN0IElyPUpuLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKElyLCExLEpuLm5hbWVzcGFjZUlkLEpu''@;'; put 'put ''LnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2god2k9PntUaChNbixJcixbXSkucHVzaCh3aSksd2kuZGVzdHJveSgpfSl9KTtjb25zdCBHcj1ydC5maWx0ZXIoSm49PnpoZShKbixJLEcpKSxtcj1uZXcgTWFwO1ZoZShtcix0aGlzLmRyaXZlcixkdCxHLGlnKS5mb3JFYWNoKEpuPT57emhlKEpu''@;'; put 'put ''LEksRykmJkdyLnB1c2goSm4pfSk7Y29uc3QgYWk9bmV3IE1hcDtFZS5mb3JFYWNoKChKbixJcik9PntWaGUoYWksdGhpcy5kcml2ZXIsbmV3IFNldChKbiksSSwiISIpfSksR3IuZm9yRWFjaChKbj0+e2NvbnN0IElyPW1yLmdldChKbiksJHI9YWkuZ2V0KEpuKTttci5zZXQoSm4sbmV3IE1h''@;'; put 'put ''cChbLi4uSXI/LmVudHJpZXMoKT8/W10sLi4uJHI/LmVudHJpZXMoKT8/W11dKSl9KTtjb25zdCBfaT1bXSxPbj1bXSx6cj17fTt2LmZvckVhY2goSm49Pntjb25zdHtlbGVtZW50OklyLHBsYXllcjokcixpbnN0cnVjdGlvbjp3aX09Sm47aWYoZC5oYXMoSXIpKXtpZihpZS5oYXMoSXIpKXJl''@;'; put 'put ''dHVybiAkci5vbkRlc3Ryb3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksJHIuZGlzYWJsZWQ9ITAsJHIub3ZlcnJpZGVUb3RhbFRpbWUod2kudG90YWxUaW1lKSx2b2lkIGgucHVzaCgkcik7bGV0IGVhPXpyO2lmKENyLnNpemU+MSl7bGV0IHZ0PUlyO2NvbnN0IE50PVtdO2Zvcig7dnQ9dnQu''@;'; put 'put ''cGFyZW50Tm9kZTspe2NvbnN0IEh0PUNyLmdldCh2dCk7aWYoSHQpe2VhPUh0O2JyZWFrfU50LnB1c2godnQpfU50LmZvckVhY2goSHQ9PkNyLnNldChIdCxlYSkpfWNvbnN0IGZhPXRoaXMuX2J1aWxkQW5pbWF0aW9uKCRyLm5hbWVzcGFjZUlkLHdpLE1uLGYsYWksbXIpO2lmKCRyLnNldFJl''@;'; put 'put ''YWxQbGF5ZXIoZmEpLGVhPT09enIpX2kucHVzaCgkcik7ZWxzZXtjb25zdCB2dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGVhKTt2dCYmdnQubGVuZ3RoJiYoJHIucGFyZW50UGxheWVyPURtKHZ0KSksaC5wdXNoKCRyKX19ZWxzZSBGNyhJcix3aS5mcm9tU3R5bGVzKSwkci5vbkRlc3Ry''@;'; put 'put ''b3koKCk9Pk1wKElyLHdpLnRvU3R5bGVzKSksT24ucHVzaCgkciksaWUuaGFzKElyKSYmaC5wdXNoKCRyKX0pLE9uLmZvckVhY2goSm49Pntjb25zdCBJcj1mLmdldChKbi5lbGVtZW50KTtpZihJciYmSXIubGVuZ3RoKXtjb25zdCAkcj1EbShJcik7Sm4uc2V0UmVhbFBsYXllcigkcil9fSks''@;'; put 'put ''aC5mb3JFYWNoKEpuPT57Sm4ucGFyZW50UGxheWVyP0puLnN5bmNQbGF5ZXJFdmVudHMoSm4ucGFyZW50UGxheWVyKTpKbi5kZXN0cm95KCl9KTtmb3IobGV0IEpuPTA7Sm48cnQubGVuZ3RoO0puKyspe2NvbnN0IElyPXJ0W0puXSwkcj1JcltlM107aWYoaV8oSXIsZ08pLCRyJiYkci5oYXNB''@;'; put 'put ''bmltYXRpb24pY29udGludWU7bGV0IHdpPVtdO2lmKE0uc2l6ZSl7bGV0IGZhPU0uZ2V0KElyKTtmYSYmZmEubGVuZ3RoJiZ3aS5wdXNoKC4uLmZhKTtsZXQgdnQ9dGhpcy5kcml2ZXIucXVlcnkoSXIsUEcsITApO2ZvcihsZXQgTnQ9MDtOdDx2dC5sZW5ndGg7TnQrKyl7bGV0IEh0PU0uZ2V0''@;'; put 'put ''KHZ0W050XSk7SHQmJkh0Lmxlbmd0aCYmd2kucHVzaCguLi5IdCl9fWNvbnN0IGVhPXdpLmZpbHRlcihmYT0+IWZhLmRlc3Ryb3llZCk7ZWEubGVuZ3RoP0EkZSh0aGlzLElyLGVhKTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoSXIpfXJldHVybiBydC5sZW5ndGg9MCxfaS5mb3JFYWNoKEpuPT57''@;'; put 'put ''dGhpcy5wbGF5ZXJzLnB1c2goSm4pLEpuLm9uRG9uZSgoKT0+e0puLmRlc3Ryb3koKTtjb25zdCBJcj10aGlzLnBsYXllcnMuaW5kZXhPZihKbik7dGhpcy5wbGF5ZXJzLnNwbGljZShJciwxKX0pLEpuLnBsYXkoKX0pLF9pfWFmdGVyRmx1c2gobCl7dGhpcy5fZmx1c2hGbnMucHVzaChsKX1h''@;'; put 'put ''ZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2gobCl9X2dldFByZXZpb3VzUGxheWVycyhsLGEsZCxoLGYpe2xldCB2PVtdO2lmKGEpe2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7TSYmKHY9TSl9ZWxzZXtjb25zdCBN''@;'; put 'put ''PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYoTSl7Y29uc3QgST0hZnx8Zj09aUU7TS5mb3JFYWNoKEc9PntHLnF1ZXVlZHx8IUkmJkcudHJpZ2dlck5hbWUhPWh8fHYucHVzaChHKX0pfX1yZXR1cm4oZHx8aCkmJih2PXYuZmlsdGVyKE09PiEoZCYmZCE9TS5uYW1lc3BhY2VJZHx8''@;'; put 'put ''aCYmaCE9TS50cmlnZ2VyTmFtZSkpKSx2fV9iZWZvcmVBbmltYXRpb25CdWlsZChsLGEsZCl7Y29uc3QgZj1hLmVsZW1lbnQsdj1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsTT1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dlck5hbWU7Zm9yKGNvbnN0IEkgb2Yg''@;'; put 'put ''YS50aW1lbGluZXMpe2NvbnN0IEc9SS5lbGVtZW50LGllPUchPT1mLHVlPVRoKGQsRyxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKEcsaWUsdixNLGEudG9TdGF0ZSkuZm9yRWFjaChFZT0+e2NvbnN0IGplPUVlLmdldFJlYWxQbGF5ZXIoKTtqZS5iZWZvcmVEZXN0cm95JiZqZS5iZWZv''@;'; put 'put ''cmVEZXN0cm95KCksRWUuZGVzdHJveSgpLHVlLnB1c2goRWUpfSl9RjcoZixhLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbihsLGEsZCxoLGYsdil7Y29uc3QgTT1hLnRyaWdnZXJOYW1lLEk9YS5lbGVtZW50LEc9W10saWU9bmV3IFNldCx1ZT1uZXcgU2V0LHllPWEudGltZWxpbmVzLm1h''@;'; put 'put ''cChqZT0+e2NvbnN0IHFlPWplLmVsZW1lbnQ7aWUuYWRkKHFlKTtjb25zdCBydD1xZVtlM107aWYocnQmJnJ0LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgd3goamUuZHVyYXRpb24samUuZGVsYXkpO2NvbnN0IHB0PXFlIT09SSxkdD1mdW5jdGlvbiBrJGUoYyl7Y29uc3QgbD1b''@;'; put 'put ''XTtyZXR1cm4gamhlKGMsbCksbH0oKGQuZ2V0KHFlKXx8dyRlKS5tYXAoTW49Pk1uLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcihNbj0+ISFNbi5lbGVtZW50JiZNbi5lbGVtZW50PT09cWUpLEp0PWYuZ2V0KHFlKSx2bj12LmdldChxZSksQ249eWhlKHRoaXMuX25vcm1hbGl6ZXIsamUua2V5''@;'; put 'put ''ZnJhbWVzLEp0LHZuKSx0bj10aGlzLl9idWlsZFBsYXllcihqZSxDbixkdCk7aWYoamUuc3ViVGltZWxpbmUmJmgmJnVlLmFkZChxZSkscHQpe2NvbnN0IE1uPW5ldyBLRyhsLE0scWUpO01uLnNldFJlYWxQbGF5ZXIodG4pLEcucHVzaChNbil9cmV0dXJuIHRufSk7Ry5mb3JFYWNoKGplPT57''@;'; put 'put ''VGgodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxqZS5lbGVtZW50LFtdKS5wdXNoKGplKSxqZS5vbkRvbmUoKCk9PmZ1bmN0aW9uIHgkZShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7aWYoZCl7aWYoZC5sZW5ndGgpe2NvbnN0IGg9ZC5pbmRleE9mKGEpO2Quc3BsaWNlKGgsMSl9MD09ZC5s''@;'; put 'put ''ZW5ndGgmJmMuZGVsZXRlKGwpfXJldHVybiBkfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGplLmVsZW1lbnQsamUpKX0pLGllLmZvckVhY2goamU9PkYyKGplLE1oZSkpO2NvbnN0IEVlPURtKHllKTtyZXR1cm4gRWUub25EZXN0cm95KCgpPT57aWUuZm9yRWFjaChqZT0+aV8oamUs''@;'; put 'put ''TWhlKSksTXAoSSxhLnRvU3R5bGVzKX0pLHVlLmZvckVhY2goamU9PntUaChoLGplLFtdKS5wdXNoKEVlKX0pLEVlfV9idWlsZFBsYXllcihsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZShsLmVsZW1lbnQsYSxsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcs''@;'; put 'put ''ZCk6bmV3IHd4KGwuZHVyYXRpb24sbC5kZWxheSl9fWNsYXNzIEtHe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy50cmlnZ2VyTmFtZT1hLHRoaXMuZWxlbWVudD1kLHRoaXMuX3BsYXllcj1uZXcgd3gsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMu''@;'; put 'put ''X3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1zZXRSZWFsUGxheWVyKGwpe3RoaXMuX2Nv''@;'; put 'put ''bnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj1sLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKGg9PlRHKGwsZCx2b2lkIDAsaCkpfSksdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmNsZWFyKCksdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRo''@;'; put 'put ''aXMub3ZlcnJpZGVUb3RhbFRpbWUobC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX1nZXRSZWFsUGxheWVyKCl7cmV0dXJuIHRoaXMuX3BsYXllcn1vdmVycmlkZVRvdGFsVGltZShsKXt0aGlzLnRvdGFsVGltZT1sfXN5bmNQbGF5ZXJFdmVudHMobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7''@;'; put 'put ''YS50cmlnZ2VyQ2FsbGJhY2smJmwub25TdGFydCgoKT0+YS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLGwub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSxsLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KGwsYSl7VGgodGhpcy5fcXVldWVkQ2FsbGJhY2tzLGws''@;'; put 'put ''W10pLnB1c2goYSl9b25Eb25lKGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIixsKSx0aGlzLl9wbGF5ZXIub25Eb25lKGwpfW9uU3RhcnQobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0IixsKSx0aGlzLl9wbGF5ZXIub25TdGFydChsKX1vbkRl''@;'; put 'put ''c3Ryb3kobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLGwpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kobCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1w''@;'; put 'put ''bGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24obCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbihsKX1nZXRQb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmYS50cmlnZ2VyQ2FsbGJhY2sobCl9fWZ1bmN0aW9uIHhPKGMpe3JldHVybiBjJiYxPT09Yy5ub2RlVHlwZX1m''@;'; put 'put ''dW5jdGlvbiBOaGUoYyxsKXtjb25zdCBhPWMuc3R5bGUuZGlzcGxheTtyZXR1cm4gYy5zdHlsZS5kaXNwbGF5PWw/PyJub25lIixhfWZ1bmN0aW9uIFZoZShjLGwsYSxkLGgpe2NvbnN0IGY9W107YS5mb3JFYWNoKEk9PmYucHVzaChOaGUoSSkpKTtjb25zdCB2PVtdO2QuZm9yRWFjaCgoSSxH''@;'; put 'put ''KT0+e2NvbnN0IGllPW5ldyBNYXA7SS5mb3JFYWNoKHVlPT57Y29uc3QgeWU9bC5jb21wdXRlU3R5bGUoRyx1ZSxoKTtpZS5zZXQodWUseWUpLCgheWV8fDA9PXllLmxlbmd0aCkmJihHW2UzXT1DJGUsdi5wdXNoKEcpKX0pLGMuc2V0KEcsaWUpfSk7bGV0IE09MDtyZXR1cm4gYS5mb3JFYWNo''@;'; put 'put ''KEk9Pk5oZShJLGZbTSsrXSkpLHZ9ZnVuY3Rpb24gQmhlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2lmKGMuZm9yRWFjaChNPT5hLnNldChNLFtdKSksMD09bC5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgaD1uZXcgU2V0KGwpLGY9bmV3IE1hcDtmdW5jdGlvbiB2KE0pe2lmKCFNKXJldHVybiAxO2xl''@;'; put 'put ''dCBJPWYuZ2V0KE0pO2lmKEkpcmV0dXJuIEk7Y29uc3QgRz1NLnBhcmVudE5vZGU7cmV0dXJuIEk9YS5oYXMoRyk/RzpoLmhhcyhHKT8xOnYoRyksZi5zZXQoTSxJKSxJfXJldHVybiBsLmZvckVhY2goTT0+e2NvbnN0IEk9dihNKTsxIT09SSYmYS5nZXQoSSkucHVzaChNKX0pLGF9ZnVuY3Rp''@;'; put 'put ''b24gRjIoYyxsKXtjLmNsYXNzTGlzdD8uYWRkKGwpfWZ1bmN0aW9uIGlfKGMsbCl7Yy5jbGFzc0xpc3Q/LnJlbW92ZShsKX1mdW5jdGlvbiBBJGUoYyxsLGEpe0RtKGEpLm9uRG9uZSgoKT0+Yy5wcm9jZXNzTGVhdmVOb2RlKGwpKX1mdW5jdGlvbiBqaGUoYyxsKXtmb3IobGV0IGE9MDthPGMu''@;'; put 'put ''bGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdO2QgaW5zdGFuY2VvZiBSMGU/amhlKGQucGxheWVycyxsKTpsLnB1c2goZCl9fWZ1bmN0aW9uIHpoZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtpZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4gaD9kLmZvckVhY2goZj0+aC5hZGQo''@;'; put 'put ''ZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgYUV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT57fSx0aGlzLl90cmFuc2l0aW9u''@;'; put 'put ''RW5naW5lPW5ldyBNJGUobC5ib2R5LGEsZCxoKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgbSRlKGwuYm9keSxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGYsdik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoZix2KX1yZWdpc3RlclRyaWdnZXIobCxh''@;'; put 'put ''LGQsaCxmKXtjb25zdCB2PWwrIi0iK2g7bGV0IE09dGhpcy5fdHJpZ2dlckNhY2hlW3ZdO2lmKCFNKXtjb25zdCBJPVtdLGllPUJHKHRoaXMuX2RyaXZlcixmLEksW10pO2lmKEkubGVuZ3RoKXRocm93IGZ1bmN0aW9uIGJHZShjLGwpe3JldHVybiBuZXcgUW4oMzQwNCwhMSl9KCk7TT1mdW5j''@;'; put 'put ''dGlvbiBoJGUoYyxsLGEpe3JldHVybiBuZXcgZiRlKGMsbCxhKX0oaCxpZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbdl09TX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsTSl9cmVnaXN0ZXIobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5n''@;'; put 'put ''aW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2lu''@;'; put 'put ''ZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLHZdPWJoZShkKTt0aGlzLl90aW1lbGluZUVu''@;'; put 'put ''Z2luZS5jb21tYW5kKGYsYSx2LGgpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W3YsTV09YmhlKGQpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odixhLE0s''@;'; put 'put ''Zil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMsLi4udGhpcy5fdGltZWxp''@;'; put 'put ''bmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShs''@;'; put 'put ''KX19Y2xhc3Mgb0V7c3RhdGlje3RoaXMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcH1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX3N0YXJ0U3R5bGVzPWEsdGhpcy5fZW5kU3R5bGVzPWQsdGhpcy5fc3RhdGU9MDtsZXQgaD1vRS5pbml0aWFsU3R5''@;'; put 'put ''bGVzQnlFbGVtZW50LmdldChsKTtofHxvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChsLGg9bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1ofXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZNcCh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVz''@;'; put 'put ''LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoTXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihNcCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyks''@;'; put 'put ''dGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihvRS5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEY3KHRoaXMuX2VsZW1lbnQsdGhp''@;'; put 'put ''cy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihGNyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9''@;'; put 'put ''fWZ1bmN0aW9uIHFHKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+eyhmdW5jdGlvbiBSJGUoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xhc3MgVWhle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgpe3RoaXMuZWxlbWVudD1sLHRoaXMua2V5ZnJhbWVzPWEsdGhpcy5vcHRpb25zPWQsdGhpcy5fc3BlY2lhbFN0eWxlcz1oLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9m''@;'; put 'put ''aW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFw''@;'; put 'put ''LHRoaXMuX2R1cmF0aW9uPWQuZHVyYXRpb24sdGhpcy5fZGVsYXk9ZC5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkp''@;'; put 'put ''LHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2NvbnN0IGw9dGhpcy5rZXlmcmFt''@;'; put 'put ''ZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsbCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9bC5sZW5ndGg/bFtsLmxlbmd0aC0xXTpuZXcgTWFwO2NvbnN0IGE9KCk9PnRoaXMuX29uRmluaXNoKCk7dGhpcy5kb21QbGF5''@;'; put 'put ''ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKSx0aGlzLm9uRGVzdHJveSgoKT0+e3RoaXMuZG9tUGxheWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlzaCIsYSl9KX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0''@;'; put 'put ''ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVzaChPYmplY3QuZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihsLGEsZCl7cmV0dXJuIGwuYW5pbWF0''@;'; put 'put ''ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5z''@;'; put 'put ''LnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEw''@;'; put 'put ''LHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9z''@;'; put 'put ''cGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFy''@;'; put 'put ''dEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5''@;'; put 'put ''KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0''@;'; put 'put ''eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT1sKnRoaXMudGltZX1n''@;'; put 'put ''ZXRQb3NpdGlvbigpe3JldHVybisodGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU/PzApL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtjb25zdCBsPW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRo''@;'; put 'put ''aXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoZCxoKT0+eyJvZmZzZXQiIT09aCYmbC5zZXQoaCx0aGlzLl9maW5pc2hlZD9kOlZHKHRoaXMuZWxlbWVudCxoKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1sfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PT1sP3RoaXMuX29u''@;'; put 'put ''U3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFpoZXt2YWxpZGF0ZVN0eWxlUHJvcGVydHkobCl7cmV0dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH1tYXRjaGVzRWxlbWVudChsLGEpe3Jl''@;'; put 'put ''dHVybiExfWNvbnRhaW5zRWxlbWVudChsLGEpe3JldHVybiB3aGUobCxhKX1nZXRQYXJlbnRFbGVtZW50KGwpe3JldHVybiBERyhsKX1xdWVyeShsLGEsZCl7cmV0dXJuIENoZShsLGEsZCl9Y29tcHV0ZVN0eWxlKGwsYSxkKXtyZXR1cm4gVkcobCxhKX1hbmltYXRlKGwsYSxkLGgsZix2PVtd''@;'; put 'put ''KXtjb25zdCBJPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYoSS5lYXNpbmc9Zik7Y29uc3QgRz1uZXcgTWFwLGllPXYuZmlsdGVyKEVlPT5FZSBpbnN0YW5jZW9mIFVoZSk7KGZ1bmN0aW9uIFVHZShjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9''@;'; put 'put ''KShkLGgpJiZpZS5mb3JFYWNoKEVlPT57RWUuY3VycmVudFNuYXBzaG90LmZvckVhY2goKGplLHFlKT0+Ry5zZXQocWUsamUpKX0pO2xldCB1ZT1mdW5jdGlvbiBCR2UoYyl7cmV0dXJuIGMubGVuZ3RoP2NbMF1pbnN0YW5jZW9mIE1hcD9jOmMubWFwKGw9Pm5ldyBNYXAoT2JqZWN0LmVudHJp''@;'; put 'put ''ZXMobCkpKTpbXX0oYSkubWFwKEVlPT5uZXcgTWFwKEVlKSk7dWU9ZnVuY3Rpb24gWkdlKGMsbCxhKXtpZihhLnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLHYpPT57ZC5oYXModil8fGgucHVzaCh2KSxkLnNldCh2LGYpfSksaC5sZW5ndGgpZm9yKGxl''@;'; put 'put ''dCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCB2PWxbZl07aC5mb3JFYWNoKE09PnYuc2V0KE0sVkcoYyxNKSkpfX1yZXR1cm4gbH0obCx1ZSxHKTtjb25zdCB5ZT1mdW5jdGlvbiBJJGUoYyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg/KGE9''@;'; put 'put ''cUcobFswXSksbC5sZW5ndGg+MSYmKGQ9cUcobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYoYT1xRyhsKSksYXx8ZD9uZXcgb0UoYyxhLGQpOm51bGx9KGwsdWUpO3JldHVybiBuZXcgVWhlKGwsdWUsSSx5ZSl9fWNvbnN0IFdoZT0iQC5kaXNhYmxlZCI7Y2xhc3MgWWhle2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLmRlbGVnYXRlPWEsdGhpcy5lbmdpbmU9ZCx0aGlzLl9vbkRlc3Ryb3k9aCx0aGlzLlx1MDI3NXR5cGU9MH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveU5vZGUobCl7dGhpcy5kZWxl''@;'; put 'put ''Z2F0ZS5kZXN0cm95Tm9kZT8uKGwpfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmRlbGVnYXRlLmRlc3Ry''@;'; put 'put ''b3koKX0pfSksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChsLGEpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0''@;'; put 'put ''aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQobCl9YXBwZW5kQ2hpbGQobCxhKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKGwsYSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsITEpfWluc2VydEJlZm9yZShsLGEsZCxoPSEwKXt0aGlzLmRlbGVnYXRlLmluc2Vy''@;'; put 'put ''dEJlZm9yZShsLGEsZCksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxhLGwsaCl9cmVtb3ZlQ2hpbGQobCxhLGQpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsYSx0aGlzLmRlbGVnYXRlKX1zZWxlY3RSb290RWxlbWVudChsLGEpe3JldHVybiB0''@;'; put 'put ''aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KGwsYSl9cGFyZW50Tm9kZShsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKGwpfW5leHRTaWJsaW5nKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKGwpfXNldEF0dHJpYnV0ZShsLGEsZCxoKXt0aGlzLmRl''@;'; put 'put ''bGVnYXRlLnNldEF0dHJpYnV0ZShsLGEsZCxoKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGwsYSxkKX1hZGRDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3MobCxhKX1yZW1vdmVDbGFzcyhsLGEpe3RoaXMuZGVsZWdhdGUucmVt''@;'; put 'put ''b3ZlQ2xhc3MobCxhKX1zZXRTdHlsZShsLGEsZCxoKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKGwsYSxkLGgpfXJlbW92ZVN0eWxlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKGwsYSxkKX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNoYXJBdCgwKSYmYT09V2hlP3RoaXMu''@;'; put 'put ''ZGlzYWJsZUFuaW1hdGlvbnMobCwhIWQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfXNldFZhbHVlKGwsYSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZShsLGEpfWxpc3RlbihsLGEsZCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9u''@;'; put 'put ''cyhsLGEpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKGwsYSl9fWNsYXNzIEwkZSBleHRlbmRzIFloZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGEsZCxoLGYpLHRoaXMuZmFjdG9yeT1sLHRoaXMubmFtZXNwYWNlSWQ9YX1zZXRQcm9wZXJ0eShsLGEsZCl7IkAiPT1hLmNo''@;'; put 'put ''YXJBdCgwKT8iLiI9PWEuY2hhckF0KDEpJiZhPT1XaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLGQ9dm9pZCAwPT09ZHx8ISFkKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsbCxhLnNsaWNlKDEpLGQpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkobCxhLGQpfWxp''@;'; put 'put ''c3RlbihsLGEsZCl7aWYoIkAiPT1hLmNoYXJBdCgwKSl7Y29uc3QgaD1mdW5jdGlvbiBPJGUoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6''@;'; put 'put ''cmV0dXJuIGN9fShsKTtsZXQgZj1hLnNsaWNlKDEpLHY9IiI7cmV0dXJuIkAiIT1mLmNoYXJBdCgwKSYmKFtmLHZdPWZ1bmN0aW9uIFAkZShjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19KGYpKSx0aGlzLmVuZ2luZS5saXN0''@;'; put 'put ''ZW4odGhpcy5uYW1lc3BhY2VJZCxoLGYsdixNPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhNLl9kYXRhfHwtMSxkLE0pfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkKX19Y2xhc3MgRiRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmRlbGVnYXRl''@;'; put 'put ''PWwsdGhpcy5lbmdpbmU9YSx0aGlzLl96b25lPWQsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLGEub25SZW1vdmFsQ29t''@;'; put 'put ''cGxldGU9KGgsZik9Pntjb25zdCB2PWY/LnBhcmVudE5vZGUoaCk7diYmZi5yZW1vdmVDaGlsZCh2LGgpfX1jcmVhdGVSZW5kZXJlcihsLGEpe2NvbnN0IGg9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihsLGEpO2lmKCFsfHwhYT8uZGF0YT8uYW5pbWF0aW9uKXtjb25zdCBHPXRoaXMu''@;'; put 'put ''X3JlbmRlcmVyQ2FjaGU7bGV0IGllPUcuZ2V0KGgpO3JldHVybiBpZXx8KGllPW5ldyBZaGUoIiIsaCx0aGlzLmVuZ2luZSwoKT0+Ry5kZWxldGUoaCkpLEcuc2V0KGgsaWUpKSxpZX1jb25zdCBmPWEuaWQsdj1hLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhp''@;'; put 'put ''cy5lbmdpbmUucmVnaXN0ZXIodixsKTtjb25zdCBNPUc9PntBcnJheS5pc0FycmF5KEcpP0cuZm9yRWFjaChNKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZix2LGwsRy5uYW1lLEcpfTtyZXR1cm4gYS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKE0pLG5ldyBMJGUodGhpcyx2LGgsdGhp''@;'; put 'put ''cy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxs''@;'; put 'put ''YmFjayhsLGEsZCl7aWYobD49MCYmbDx0aGlzLl9taWNyb3Rhc2tJZClyZXR1cm4gdm9pZCB0aGlzLl96b25lLnJ1bigoKT0+YShkKSk7Y29uc3QgaD10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI7MD09aC5sZW5ndGgmJnF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5fem9uZS5ydW4o''@;'; put 'put ''KCk9PntoLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zjt2KE0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSxoLnB1c2goW2EsZF0pfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmlu''@;'; put 'put ''Z0RvbmUoKX19bGV0IEgkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYUV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoLGZpKHl5LHtvcHRpb25hbDohMH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKSh4cih2cykseHIoUkcpLHhyKExHKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgR2hlPVt7cHJvdmlkZTpMRyx1c2VGYWN0b3J5OmZ1bmN0aW9uIE4kZSgpe3JldHVybiBuZXcgVGhl''@;'; put 'put ''fX0se3Byb3ZpZGU6YUUsdXNlQ2xhc3M6SCRlfSx7cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIFYkZShjLGwsYSl7cmV0dXJuIG5ldyBGJGUoYyxsLGEpfSxkZXBzOltjWixhRSxXYV19XSxYRz1be3Byb3ZpZGU6UkcsdXNlRmFjdG9yeTooKT0+bmV3IFpoZX0se3Byb3ZpZGU6Rmss''@;'; put 'put ''dXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uR2hlXSwkaGU9W3twcm92aWRlOlJHLHVzZUNsYXNzOklHfSx7cHJvdmlkZTpGayx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5HaGVdO2xldCBCJGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57''@;'; put 'put ''bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz8kaGU6WEd9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJv''@;'; put 'put ''dmlkZXJzOlhHLGltcG9ydHM6W1RvZV19KX19cmV0dXJuIGN9KSgpLGokZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJwIiksT2Uo''@;'; put 'put ''MiwiNDA0IC0gTm90IEZvdW5kIiksaGUoKSgpKX0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxLaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlwZToidGV4dC9wbGFpbiJ9KTtpZihu''@;'; put 'put ''YXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTt2LmhyZWY9ImRhdGE6dGV4dC9wbGFpbiwiK2VuY29kZVVS''@;'; put 'put ''SUNvbXBvbmVudChhKSx2LmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodiksdi5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodil9fXJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBmPW5ldyBGaWxlUmVhZGVy''@;'; put 'put ''O2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7dmFyIGdnPWIoNTk0OCk7Y29uc3QgSkc9ZnVuY3Rpb24gVSRlKGMpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgY3x8Q2IoYykm''@;'; put 'put ''JiJbb2JqZWN0IFN5bWJvbF0iPT15YihjKX07dmFyIFokZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxXJGU9L15cdyokLztmdW5jdGlvbiBRRyhjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjfHxudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1cm4gZi5nZXQoaCk7dmFyIHY9Yy5hcHBseSh0aGlzLGQp''@;'; put 'put ''O3JldHVybiBhLmNhY2hlPWYuc2V0KGgsdil8fGYsdn07cmV0dXJuIGEuY2FjaGU9bmV3KFFHLkNhY2hlfHxrVyksYX1RRy5DYWNoZT1rVztjb25zdCBLJGU9UUc7dmFyIFEkZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwy''@;'; put 'put ''KVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxlS2U9L1xcKFxcKT8vZyx0S2U9ZnVuY3Rpb24gWCRlKGMpe3ZhciBsPUskZShjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1sLmNhY2hlO3JldHVybiBsfShmdW5jdGlvbihjKXt2YXIg''@;'; put 'put ''bD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKFEkZSxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoZUtlLCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IG5LZT10S2U7dmFyIHFoZT11bT91bS5wcm90b3R5cGU6dm9pZCAwLFho''@;'; put 'put ''ZT1xaGU/cWhlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBvS2U9ZnVuY3Rpb24gSmhlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihTYihjKSlyZXR1cm4gZnVuY3Rpb24gcktlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9QXJyYXkoZCk7Kyth''@;'; put 'put ''PGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsSmhlKSsiIjtpZihKRyhjKSlyZXR1cm4gWGhlP1hoZS5jYWxsKGMpOiIiO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSx1S2U9ZnVuY3Rpb24gY0tlKGMsbCl7cmV0dXJuIFNiKGMpP2M6ZnVuY3Rpb24g''@;'; put 'put ''WSRlKGMsbCl7aWYoU2IoYykpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9YyYmIUpHKGMpKXx8VyRlLnRlc3QoYyl8fCFaJGUudGVzdChjKXx8bnVsbCE9bCYmYyBpbiBPYmplY3QobCl9KGMsbCk/''@;'; put 'put ''W2NdOm5LZShmdW5jdGlvbiBzS2UoYyl7cmV0dXJuIG51bGw9PWM/IiI6b0tlKGMpfShjKSl9LGZLZT1mdW5jdGlvbiBoS2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjfHxKRyhjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sYmM9ZnVuY3Rp''@;'; put 'put ''b24gbUtlKGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlvbiBwS2UoYyxsKXtmb3IodmFyIGE9MCxkPShsPXVLZShsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbZktlKGxbYSsrXSldO3JldHVybiBhJiZhPT1kP2M6dm9pZCAwfShjLGwpO3JldHVybiB2b2lkIDA9PT1k''@;'; put 'put ''P2E6ZH07bGV0IGtoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IFduLHRoaXMuY2hhbmdlZFRhYmxlPW5ldyBXbix0aGlzLmRldGFpbHM9''@;'; put 'put ''bmV3IFduLHRoaXMuZGlmZnM9bmV3IFduLHRoaXMuY29sdW1ucz1uZXcgV24sdGhpcy52YWx1ZXM9bmV3IFduLHRoaXMuZmlsdGVyPW5ldyBXbix0aGlzLnF1ZXJ5PW5ldyBXbix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IFduLHRoaXMucmVtb3ZlUXVlcnk9bmV3IFduLHRoaXMuc2V0U3VibWl0''@;'; put 'put ''PW5ldyBXbix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IFdufWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Y29uc3QgTT17fTtyZXR1cm4gTVtkXT1bYV0se2RhdGE6KHlpZWxkIHYuc2FzU2VydmljZS5yZXF1ZXN0KGgsTSkpLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZSxsaWJkczpmfX0pKCl9dXBkYXRlVGFibGUoYSxkLGgsZix2LE0sSSl7dmFyIEc9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgaWU9e2pzZGF0YTpkfTtpZih2KXtsZXQgeWU9Ry5wYXJzZUZvcm1hdHModik7aWUuJGpzZGF0YT17Zm9ybWF0czp5ZX19cmV0dXJuIGllW2hdPVth''@;'; put 'put ''XSx5aWVsZCBHLnNhc1NlcnZpY2UucmVxdWVzdChmLGllLEkse3N1cHByZXNzRXJyb3JBYm9ydE1vZGFsOk0sc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDpNfSl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4g''@;'; put 'put ''dltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2VuZERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IHY9T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtmLnN1Ym1pdHREZXRhaWwubmV4''@;'; put 'put ''dCh7ZGF0YTpoW2RdLHZpZXdEYXRhOnZ9KX0pKCl9Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3TGli''@;'; put 'put ''cygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7''@;'; put 'put ''Y29uc3QgaD17bGliMnJlZnJlc2g6W3tsaWJyZWY6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld1RhYmxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xl''@;'; put 'put ''dCBoPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZj17''@;'; put 'put ''U0FTQ29udHJvbFRhYmxlOlt7TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4oeWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGFTZWFyY2goYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbioo''@;'; put 'put ''aCxmPSExLHYsTSl7bGV0IEc9e1NBU0NvbnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6aC5sZW5ndGg+MD9mPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmgsTElCRFM6dixGSUxURVJfUks6TX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0''@;'; put 'put ''YSIsRykpLmFkYXB0ZXJSZXNwb25zZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1nZXRYTE1hcFJ1bGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Y29uc3QgaD17Z2V0eGxtYXBzX2luOlt7WExNQVBfSUQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoImVkaXRvcnMvZ2V0eGxtYXBzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYse3VzZUNvbXB1dGVB''@;'; put 'put ''cGk6bnVsbH0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdix7dXNlQ29tcHV0ZUFwaTpudWxsfSkpLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZX0pKCl9YXBwcm92ZVRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2''@;'; put 'put ''YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zZXRRdWVyeVZhcmlhYmxlcyhhLGQpe3RoaXMuY29sdW1ucy5uZXh0KHtkYXRhOntjb2xzOmR9''@;'; put 'put ''LGxpYmRzOmF9KX1nZXRDaGFuZ2VJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZikpLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZX0pKCl9Z2V0UXVlcnlWYWx1ZXMoYSxkLGgsZix2KXt2YXIgTT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBJPXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJUUk9XOmZ9LC4uLnYmJntST1dTOnZ9fV19O3JldHVybiBoLmxlbmd0aD4wJiYoSS5GSUxURVJR''@;'; put 'put ''VUVSWT1oKSwoeWllbGQgTS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjb2x2YWxzIixJKS5jYXRjaChHPT57dGhyb3cgR30pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNhdmVRdWVyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGY9e2l3YW50Olt7Zmls''@;'; put 'put ''dGVyX3RhYmxlOmF9XSxmaWx0ZXJxdWVyeTpkfTtjb25zdCB2PXlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmFsaWRhdGVmaWx0ZXIiLGYpO3JldHVybiBoLmZpbHRlci5uZXh0KHYpLHYuYWRhcHRlclJlc3BvbnNlfSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1''@;'; put 'put ''cm4gUShmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEp''@;'; put 'put ''e2Nhc2UiQkVUV0VFTiI6ZCBpbnN0YW5jZW9mIEFycmF5JiYoIiIhPT1kWzBdJiYiIiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIiPT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFsw''@;'; put 'put ''XSsiIEFORCAiK2RbMV0pOihkWzBdPSIuIixkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBNPVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IEk9MDtJPGQubGVuZ3RoO0krKykhMD09PWRbSV0uY2hlY2tlZCYmKCJjaGFyIj09''@;'; put 'put ''PWg/KCJzdHJpbmciPT10eXBlb2YgZFtJXS52YWwmJihkW0ldLnZhbD1kW0ldLnZhbC5yZXBsYWNlKCInIiwiJyciKSksTS5wdXNoKCInIitkW0ldLnZhbCsiJyIpKToobnVsbD09PWRbSV0udmFsJiYoZFtJXS52YWw9Ii4iKSxNLnB1c2goZFtJXS52YWwpKSk7ZD0iKCIrTSsiKSI7YnJlYWs7''@;'; put 'put ''Y2FzZSJDT05UQUlOUyI6YT0iPyI7YnJlYWs7Y2FzZSJOT1QgRVFVQUwiOmE9Im5lIn1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYm''@;'; put 'put ''Im51bSI9PT1oJiYiIj09PWQmJihkPSIuIiksIkJFVFdFRU4iPT09YT97dmFsdWU6ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNsYXVzZUNyZWF0b3IoYSxkLGgpe2xldCBJLHVlLGY9IiIsRz0iIixpZT1bXTtmb3IobGV0IEVlPTA7RWU8YS5xdWVyeU9iai5sZW5n''@;'; put 'put ''dGg7RWUrKyl7bGV0IGplPSIiLHFlPWEucXVlcnlPYmpbRWVdO2ZvcihsZXQgcnQ9MDtydDxxZS5lbGVtZW50cy5sZW5ndGg7cnQrKyl7bGV0IGR0LHB0PXFlLmVsZW1lbnRzW3J0XTtJPXJ0PHFlLmVsZW1lbnRzLmxlbmd0aC0xP3FlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgQ3I9MDtDcjxw''@;'; put 'put ''dC52YWx1ZXMubGVuZ3RoO0NyKyspe2lmKCJzdHJpbmciPT10eXBlb2YgcHQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgcHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQpcHQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCkmJihkdD1wdC52YWx1ZXNbQ3JdLnVu''@;'; put 'put ''Zm9ybWF0dGVkKTtlbHNle2xldCBtcj0ibnVtYmVyIiE9dHlwZW9mIHB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiZudWxsIT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQ/cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQudHJpbSgpOnB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkO3B0LnZhbHVlPT09bXIm''@;'; put 'put ''JihkdD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1wdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YocHQub3BlcmF0b3IpJiYoZHQ9IiIpLCgiQ09OVEFJTlMiPT09cHQub3BlcmF0b3J8fCJMSUtFIj09''@;'; put 'put ''PXB0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09cHQub3BlcmF0b3IpJiYoZHQ9cHQudmFsdWUpfWlmKGR0fHwoZHQ9cHQudmFsdWUpLHB0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PXB0Lm9wZXJhdG9yKXtkdD1bXSxkdC5wdXNoKHB0LnZhbHVlWzBdKSxkdC5wdXNo''@;'; put 'put ''KHB0LnZhbHVlWzFdKTtmb3IobGV0IENyPTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtDcisrKWR0WzBdPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFswXT1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKSxkdFsxXT09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbMV09cHQudmFs''@;'; put 'put ''dWVzW0NyXS51bmZvcm1hdHRlZCl9aWYocHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1wdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1wdC5vcGVyYXRvcikpe2R0PVtdLGR0PXB0LnZhbHVlO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3RoO0NyKyspZHRbQ3JdJiZkdFtD''@;'; put 'put ''cl0udmFsPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFtDcl0udmFsPXB0LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfWxldCBKdD1wdC50eXBlO2NvbnN0IHZuPXB0LnZhbHVlVmFyaWFibGU7bGV0IE1uLENuPW51bGw9PT1wdC52YXJpYWJsZT8iIjpwdC52YXJpYWJsZSx0bj1udWxs''@;'; put 'put ''PT09cHQub3BlcmF0b3I/IiI6cHQub3BlcmF0b3I7TW49dGhpcy5jaGVja09wZXJhdG9yKHRuLGR0LEp0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIE1uJiYiKCIhPT1NblswXSYmKE1uPU1uLnJlcGxhY2UoIiciLCInJyIpKSx0bj10aGlzLmNoZWNrT3BlcmF0b3IodG4sTW4sSnQpLm9wZXJh''@;'; put 'put ''dG9yLCJjaGFyIj09PUp0JiYiSU4iIT09dG4mJiJOT1QgSU4iIT09dG4/KHR5cGVvZiBNbj4idSImJihNbj0iIiksTW49dm4/IiAiK01uKyIgIjoiICciK01uKyInICIsamU9amUrIiAiK0NuKyIgIit0bitNbitJKTooIm51bSI9PT1KdCYmdHlwZW9mIE1uPiJ1IiYmKE1uPSIuIiksTW49dHlw''@;'; put 'put ''ZW9mIE1uPiJ1Ij8iIjoiICIrTW4rIiAiLGplPWplKyIgIitDbisiICIrdG4rTW4rSSl9aWUucHVzaChqZSl9Rz0iIjtmb3IobGV0IEVlPTA7RWU8aWUubGVuZ3RoO0VlKyspdWU9RWU8aWUubGVuZ3RoLTE/ZDoiIixHPTE9PT1pZS5sZW5ndGg/aWVbMF06RysiICgiK2llW0VlXSsiKSAiK3Vl''@;'; put 'put ''O3JldHVybiBmPUcuc3Vic3RyKDEpLnNsaWNlKDAsLTEpLEc9IldIRVJFIitHKyI7Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNlOkcsc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpHLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9''@;'; put 'put ''W107cmV0dXJuIGEuZmlsdGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaCh2PT57bGV0IE09IiI7IkJFVFdFRU4iPT09di5vcGVyYXRvcj9NPWAke3YudmFsdWVbMF19IEFORCAke3YudmFsdWVbMV19YDoiSU4iPT09di5vcGVyYXRvcnx8Ik5PVCBJTiI9''@;'; put 'put ''PT12Lm9wZXJhdG9yPyh2LnZhbHVlLmZvckVhY2goST0+e2lmKEkuY2hlY2tlZCl7Y29uc3QgRz1JLnZhbDsic3RyaW5nIiE9dHlwZW9mIEd8fCgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKEcpJiYiY2hhciIhPT12LnR5cGU/TS5sZW5ndGg+MD9NKz1gLCR7R31gOk09YCgke0d9YDpNLmxlbmd0''@;'; put 'put ''aD4wP00rPWAsJyR7Ry5yZXBsYWNlKC8nL2csIicnIil9J2A6TT1gKCcke0cucmVwbGFjZSgvJy9nLCInJyIpfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXYudmFsdWU/TT0iY2hhciI9PT12LnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXYudHlwZSYmIXYudmFsdWVWYXJpYWJs''@;'; put 'put ''ZSYmKE09YCcke3YudmFsdWUucmVwbGFjZSgvJy9nLCInJyIpfSdgKSxkLnB1c2goe0dST1VQX0xPR0lDOmEuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOnYudmFyaWFibGUsT1BFUkFUT1JfTk06di5vcGVy''@;'; put 'put ''YXRvcixSQVdfVkFMVUU6TXx8di52YWx1ZX0pfSl9KSxkfWluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoYSxkKXtjb25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOmJjKEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307YmMoS24sYSkuZmls''@;'; put 'put ''dGVyLmNsYXVzZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoKSxiYyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz1iYyhLbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsdj17ZWxlbWVudHM6W119LE09MDtiYyhLbixhKS5maWx0ZXIucXVlcnkuZm9yRWFj''@;'; put 'put ''aChJPT57Y29uc3QgRz17fTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKylpZihkW2llXS5OQU1FPT09SS5WQVJJQUJMRV9OTSl7aWYoZj1JLlNVQkdST1VQX0xPR0lDLEcuZGR0eXBlPWRbaWVdLkREVFlQRSxHLnR5cGU9ZFtpZV0uVFlQRSxHLm9wZXJhdG9ycz0ibnVtIj09PWRbaWVd''@;'; put 'put ''LlRZUEU/S24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpLbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxHLmxvZ2ljPW51bGwsRy5vcGVyYXRvcj1JLk9QRVJBVE9SX05NLEcudmFyaWFibGU9SS5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW2llXS5UWVBFKWlmKCJJTiI9PT1JLk9QRVJBVE9SX05N''@;'; put 'put ''fHwiTk9UIElOIj09PUkuT1BFUkFUT1JfTk0pe2NvbnN0IHVlPVtdLEVlPUkuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09RWUubGVuZ3RoP3VlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkVlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOkVlLmZvckVh''@;'; put 'put ''Y2goKGplLHFlKT0+e3VlLnB1c2goMD09PXFlP3tjaGVja2VkOiEwLHZhbDpqZS5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OnFlPT09RWUubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOmplLnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOmplLnJl''@;'; put 'put ''cGxhY2UoLycnL2csIiciKX0pfSksRy52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHVlKX1lbHNlIEcudmFsdWU9SS5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PUkuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09SS5PUEVS''@;'; put 'put ''QVRPUl9OTSl7Y29uc3QgdWU9W107SS5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JFYWNoKChqZSxxZSk9Pnt1ZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpqZX0pfSksRy52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHVlKX1lbHNlIGlmKCJCRVRXRUVOIj09''@;'; put 'put ''PUkuT1BFUkFUT1JfTk0pe2NvbnN0IHVlPUkuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO0cudmFsdWU9dWV9ZWxzZSBHLnZhbHVlPUkuUkFXX1ZBTFVFO0cudmFsdWVzPVtdLE09PT1JLlNVQkdST1VQX0lEfHwoYmMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhl''@;'; put 'put ''bHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxiYyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLGJjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEsTSsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0''@;'; put 'put ''aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEcpKTticmVha319KSx2LmVsZW1lbnRzLmxlbmd0aD4wJiYoYmMoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxiYyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''altNXS5jbGF1c2VMb2dpYz1mLGJjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEpLGJjKEtuLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBhLnJlbW92ZVF1ZXJ5''@;'; put 'put ''Lm5leHQoITApLCEwfSkoKX1zcGVjQ29udmVyc2lvbihhKXtsZXQgZD17fSxoPVtdO2lmKGg9YS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuTkFNRS50b1VwcGVyQ2FzZSgpfSksYSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWRbaFtmXV09MT09PWFbZl0u''@;'; put 'put ''VFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9Ontjb2xUeXBlOiJzdHJpbmciLGNvbExlbmd0aDphW2ZdLkxFTkdUSH07cmV0dXJuIGR9c2V0U3VibWl0UmVhZHkoKXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMoYSl7Y29uc3QgZD17fSxoPWEu''@;'; put 'put ''dmFycztmb3IobGV0IGYgb2YgT2JqZWN0LmtleXMoaCkpe2NvbnN0IHY9aFtmXS50eXBlLE09aFtmXS5sZW5ndGg7Im51bSI9PT12P2RbZl09ImJlc3QuIjoiY2hhciI9PT12JiYoZFtmXT1gJGNoYXIke019LmApfXJldHVybiBkfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpKHhyKEJzKSx4cihTdSkseHIoU2QpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2S2UoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiwyMSksT2UoMiwiIExv''@;'; put 'put ''YWRpbmcuLi4gIiksaGUoKSxkZSgzLCJwIiksT2UoNCwiRGVwbG95aW5nLi4uIiksaGUoKSxsaSgpKX1mdW5jdGlvbiB5S2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gYktlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIF9LZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImRpdiIsMzApLGd0KDEseUtlLDEsMCwiY2xyLWljb24iLDMxKSgyLGJLZSwxLDAsImNsci1pY29uIiwyNyksZGUoMywicCIpLE9lKDQsIkRlcGxveSBTQVMgSm9icyIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLCEwPT09YS5hdXRvRGVw''@;'; put 'put ''bG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLHhlKCJuZ0lmIiwhIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayl9fWZ1bmN0aW9uIHdLZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBDS2UoYyxsKXsxJmMmJkd0KDAsImNsci1pY29u''@;'; put 'put ''IiwzMyl9ZnVuY3Rpb24gU0tlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMCksZ3QoMSx3S2UsMSwwLCJjbHItaWNvbiIsMzEpKDIsQ0tlLDEsMCwiY2xyLWljb24iLDI3KSxkZSgzLCJwIiksT2UoNCwiQ3JlYXRlIGRhdGFiYXNlIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSgpLHhlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIE1LZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiB4S2UoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwyMiksT2UoMiwiRG9uZSIpLGhlKCksR3QoMywiaHIiLDIzKSxndCg0LF9LZSw1LDIsImRpdiIsMjQpKDUsU0tlLDUsMiwiZGl2IiwyNCksR3QoNiwiaHIiLDIzKSxkZSg3LCJkaXYiLDI1KSg4LCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksZ3QoOSxNS2UsMSwwLCJjbHItaWNvbiIsMjcpLE9lKDEwLCIgTEFVTkNIICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3Jl''@;'; put 'put ''dHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxPZSgxMiwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCksR3QoMTMsImhyIiwyMyksZGUoMTQsImRpdiIsMjUpKDE1LCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLEN0KGguYXV0b2RlcGxveURvbmU9ITEpfSksT2UoMTYsIiBDbG9zZSAiKSxoZSgpLGRlKDE3LCJidXR0b24iLDI5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIp''@;'; put 'put ''Lm9wZW5TYXNSZXF1ZXN0c01vZGFsKCkpfSksT2UoMTgsIiBTQVMgUmVxdWVzdHMgIiksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDQpLHhlKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLHhlKCJuZ0lmIixudWxs''@;'; put 'put ''IT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxmZSg0KSx4ZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gRUtlKGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''ZGl2IiwxOSkoMSwiZGl2IiwyMCksZ3QoMix2S2UsNSwwLCJuZy1jb250YWluZXIiLDEyKSgzLHhLZSwxOSwzLCJuZy1jb250YWluZXIiLDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJuZ0lmIiwhYS5hdXRvZGVwbG95RG9uZSksZmUoKSx4ZSgibmdJZiIsYS5hdXRv''@;'; put 'put ''ZGVwbG95RG9uZSl9fWZ1bmN0aW9uIFRLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuaWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBBS2UoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJzZWxlY3QiLDM0KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQWRtaW5Hcm91cCxoKXx8KGYuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksZ3QoMSxUS2UsMiwyLCJvcHRp''@;'; put 'put ''b24iLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3BpKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCksZmUoKSx4ZSgibmdGb3JPZiIsYS5hZG1pbkdyb3Vwcyl9fWZ1bmN0aW9uIGtLZShjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KX1mdW5jdGlvbiBES2UoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLmlkKSxmZSgpLERyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gSUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VsZWN0IiwzNCks''@;'; put 'put ''RnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoaCkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5zZWxlY3RlZENvbXB1dGVDb250ZXh0''@;'; put 'put ''LGgpfHwoZi5zZWxlY3RlZENvbXB1dGVDb250ZXh0PWgpLEN0KGgpfSksZ3QoMSxES2UsMiwyLCJvcHRpb24iLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO3BpKCJuZ01vZGVsIixhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpLGZlKCkseGUoIm5nRm9yT2YiLGEuY29tcHV0ZUNvbnRl''@;'; put 'put ''eHRzKX19ZnVuY3Rpb24gUktlKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpfWZ1bmN0aW9uIExLZShjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImxhYmVsIiwyKSxPZSgyLCJSdW5uaW5nIGFzIHVzZXI6IiksaGUoKSxkZSgzLCJkaXYiLDMpKDQsImRpdiIsNCkoNSwicCIsNSks''@;'; put 'put ''T2UoNiksaGUoKSgpKCksbGkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoNiksd3IoYS5ydW5uaW5nQXNVc2VyKX19bGV0IE9LZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuZGVwbG95U2VydmljZT1kLHRoaXMuc2FzU2Vy''@;'; put 'put ''dmljZT1oLHRoaXMuc2FzVml5YVNlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9dix0aGlzLmhlbHBlclNlcnZpY2U9TSx0aGlzLnNhc0pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0''@;'; put 'put ''aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEtyLHRoaXMuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD0iIix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRh''@;'; put 'put ''YmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITAsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwc0xvYWRpbmc9ITEsdGhpcy5jdXJyZW50VXNlckluZm9M''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY3VycmVudFVzZXJJbmZvPW51bGwsdGhpcy5jb21wdXRlQ29udGV4dHM9W10sdGhpcy5hdXRvRGVwbG95U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VE''@;'; put 'put ''YXRhOm51bGx9LHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5kZXBsb3lJbk5ld1dpbmRvdz0hMH1uZ09uSW5pdCgpe3RoaXMubG9hZERhdGEoKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7eWllbGQgYS5n''@;'; put 'put ''ZXRBZG1pbkdyb3VwcygpLHlpZWxkIGEuZ2V0Q29tcHV0ZUNvbnRleHRzKCkseWllbGQgYS5nZXRDdXJyZW50VXNlcigpLHNldFRpbWVvdXQoKCk9PnthLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQmJmEub25Db21wdXRlQ29udGV4dENoYW5nZShhLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpfSw1''@;'; put 'put ''MDApfSkoKX1nZXRDb21wdXRlQ29udGV4dHMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY29tcHV0ZUNvbnRleHRzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250ZXh0cygpLnN1YnNjcmliZShm''@;'; put 'put ''PT57YS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExO2NvbnN0IHY9Zi5pdGVtcy5maW5kKE09PiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiPT09TS5uYW1lKTt2JiYoYS5zZWxlY3RlZENvbXB1dGVDb250ZXh0PXYuaWQpLGEuY29tcHV0ZUNvbnRleHRzPWYuaXRlbXMsZCgp''@;'; put 'put ''fSxmPT57aChmKX0pfSl9KSgpfWdldEN1cnJlbnRVc2VyKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmN1cnJlbnRVc2VySW5mb0xvYWRpbmc9ITAsYS5zYXNWaXlhU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnN1YnNjcmli''@;'; put 'put ''ZShmPT57YS5jdXJyZW50VXNlckluZm9Mb2FkaW5nPSExLGEuY3VycmVudFVzZXJJbmZvPWYsYS5kY1BhdGg9YC9leHBvcnQvdml5YS9ob21lcy8ke2YuaWR9YCxkKCl9LGY9Pntjb25zb2xlLmVycm9yKCJFcnJvciB3aGlsZSBnZXR0aW5nIGN1cnJlbnQgdXNlciIsZiksaChmKX0pfSl9KSgp''@;'; put 'put ''fWdldEFkbWluR3JvdXBzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PnthLmFkbWluR3JvdXBzTG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldEFkbWluR3JvdXBzKCkuc3Vic2NyaWJlKGY9PnthLmFkbWluR3JvdXBzTG9h''@;'; put 'put ''ZGluZz0hMSxhLmFkbWluR3JvdXBzPWYuaXRlbXMubWFwKHY9Pih7aWQ6di5pZCxuYW1lOnYubmFtZX0pKSxkKCl9KX0pfSkoKX1vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7ZC5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4''@;'; put 'put ''dEJ5SWQoYSkuc3Vic2NyaWJlKGg9PntkLnJ1bm5pbmdBc1VzZXI9aC5hdHRyaWJ1dGVzJiZoLmF0dHJpYnV0ZXMucnVuU2VydmVyQXM/aC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFzOmQuY3VycmVudFVzZXJJbmZvPy5pZHx8InVua25vd24ifSl9KSgpfWdldENvbXB1dGVDb250ZXh0TmFtZShh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jb21wdXRlQ29udGV4dHMuZmluZChkPT5kLmlkPT09YSk/Lm5hbWV8fHZvaWQgMH1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNr''@;'; put 'put ''KGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMCxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlwZW9mIGQu''@;'; put 'put ''bWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0hMSxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6''@;'; put 'put ''ZH1gKSxhLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChhLmF1dG9kZXBsb3lEb25lPSExKX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfXJ1bkF1dG9EZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKihkPSExKXthLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVwbG95aW5n''@;'; put 'put ''PSEwKSxkJiZhLmV4ZWN1dGVKc29uKCksYS5yZWNyZWF0ZURhdGFiYXNlP2EuY3JlYXRlRGF0YWJhc2UoKTphLmRlcGxveUluTmV3V2luZG93fHwoYS5hdXRvZGVwbG95RG9uZT0hMCl9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y3JlYXRlRGF0YWJhc2UoKXtsZXQgYT17ZnJvbWpzOlt7QURN''@;'; put 'put ''SU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LGQ9dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZTtpZih0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQubGVuZ3RoJiZ0aGlzLmNvbXB1dGVDb250ZXh0cy5sZW5ndGgpe2NvbnN0IGY9dGhpcy5nZXRD''@;'; put 'put ''b21wdXRlQ29udGV4dE5hbWUodGhpcy5zZWxlY3RlZENvbXB1dGVDb250ZXh0KTtmJiYoZD1mKX1sZXQgaD17dXNlQ29tcHV0ZUFwaTpudWxsLGNvbnRleHROYW1lOmQsZGVidWc6ITB9O3RoaXMuZGVwbG95SW5OZXdXaW5kb3c/dGhpcy5ydW5NYWtlZGF0YUluTmV3V2luZG93KHtjb250ZXh0''@;'; put 'put ''TmFtZTpkLGFkbWluOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLGRjUGF0aDp0aGlzLmRjUGF0aH0pOnRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLGEsaCwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RoaXMu''@;'; put 'put ''YXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoZi5yZXN1bHQmJmYucmVzdWx0Lmxlbmd0aD4wKSx0eXBlb2Yg''@;'; put 'put ''Zi5zYXNqc0Fib3J0PCJ1IiYmdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixmLnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6Zi5zYXNqc0Fib3J0WzBdLk1B''@;'; put 'put ''Q30pLHRoaXMuaGVscGVyU2VydmljZS5pc1N0cmVhbWluZ1ZpeWEoKSYmdGhpcy51cGRhdGVJbmRleEh0bWxDb21wdXRlQ29udGV4dCgpfSkuY2F0Y2goZj0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJtYWtlZGF0YSIsSlNPTi5zdHJpbmdpZnkoZikpLHRoaXMuYXV0b0Rl''@;'; put 'put ''cGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9cnVuTWFrZWRhdGFJbk5ld1dpbmRvdyhhKXtsZXQgZD10aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLnNlcnZlclVybCxoPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vbWFrZWRhdGEiK2AmX2NvbnRleHRuYW1lPSR7''@;'; put 'put ''YS5jb250ZXh0TmFtZX1gK2AmYWRtaW49JHthLmFkbWlufWArYCZkY3BhdGg9JHthLmRjUGF0aH0mX2RlYnVnPTEzMWApfXVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBkPWxvY2F0aW9uLnNlYXJjaC5zcGxpdCgi''@;'; put 'put ''LyIpLnBvcCgpLGg9ZD8uaW5jbHVkZXMoIi4iKT9kOnZvaWQgMDtpZighaClyZXR1cm4gdm9pZCBhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJXZSBjb3VsZCBub3QgZmlndXJlIG91dCB0aGUgZmlsZSBuYW1lIG9mIGBpbmRleC5odG1sYCBiYXNlZCBvbiB0aGUgdXJsLiIp''@;'; put 'put ''O2NvbnN0IGY9eWllbGQgYS5zYXNTZXJ2aWNlLmdldEZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNlc2AsaCk7aWYoIWYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7aH0gYXQgJHthLmFwcExvY30vc2VydmljZXNgKTtjb25zdCB2PWEu''@;'; put 'put ''Z2V0Q29tcHV0ZUNvbnRleHROYW1lKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCk7aWYoIXYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBDb21wdXRlIGNvbnRleHQgbmFtZSBub3QgZm91bmQgZm9yIElEOiAke2Euc2VsZWN0ZWRDb21wdXRlQ29udGV4dH0gfCBMaXN0OiAk''@;'; put 'put ''e0pTT04uc3RyaW5naWZ5KGEuY29tcHV0ZUNvbnRleHRzKX1gKTtjb25zdCBNPWYucmVwbGFjZSgvY29udGV4dG5hbWU9IlteIl0qIi9nLGBjb250ZXh0bmFtZT0iJHt2fSJgKTt5aWVsZCBhLnNhc1NlcnZpY2UudXBkYXRlRmlsZUNvbnRlbnQoYCR7YS5hcHBMb2N9L3NlcnZpY2VzYCxoLE0p''@;'; put 'put ''LmNhdGNoKEk9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgRGF0YUNvbnRyb2xsZXIuaHRtbDogJHtJfWApfSl9KSgpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5n''@;'; put 'put ''ZShhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09PWEudGFyZ2V0LmNoZWNrZWQmJih0aGlz''@;'; put 'put ''LnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdhdGVUb0hvbWUoKXt0''@;'; put 'put ''aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZShLaGUpLEdlKEJzKSxHZShUVyksR2UoU2QpLEdlKFN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJhcHAtYXV0b21hdGljLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRjUGF0aCIsc2VsZWN0ZWRBZG1pbkdyb3Vw''@;'; put 'put ''OiJzZWxlY3RlZEFkbWluR3JvdXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDQsdmFyczoxMSxjb25zdHM6W1siY2xhc3MiLCJhdXRvLWRlcGxveSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWyJmb3IiLCJkY2xv''@;'; put 'put ''YyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJtdC0wIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwiZGMtbG9jLWlucHV0LXdyYXBwZXIiXSxb''@;'; put 'put ''MSwiY2xyLWlucHV0LXdyYXBwZXIiLCJzbWFsbC1tdCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwiZGNsb2MiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNscklubGluZSIsIiIsImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiZm9yIiwiY29tcHV0ZUNvbnRleHQiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbNCwibmdJZiJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxv''@;'; put 'put ''Y2siLCJtci0xMCIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiZGVwbG95LXN0YXR1cy1yb3ciLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbImNsYXNzIiwiZGVwbG95LWVycm9yIiwic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1''@;'; put 'put ''IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsImFsaWduLXNlbGYtZW5kIiwzLCJjbGljayJdLFsxLCJkZXBsb3ktc3RhdHVzLXJvdyJdLFsiY2xhc3MiLCJkZXBsb3ktc3VjY2VzcyIsInNoYXBlIiwic3VjY2Vzcy1zdGFu''@;'; put 'put ''ZGFyZCIsNCwibmdJZiJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDEsImRlcGxveS1lcnJvciJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsIm9wdGlvbnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVs''@;'; put 'put ''Il0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbImNscklubGluZSIsIiIsMSwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsRUtlLDQsMiwiZGl2IiwwKSxkZSgxLCJoNCIsMSksT2UoMiwiVml5YSBEZXBsb3kiKSxo''@;'; put 'put ''ZSgpLEd0KDMsImhyIiksZGUoNCwibGFiZWwiLDIpLE9lKDUsIkFwcCBMb2MiKSxoZSgpLGRlKDYsImRpdiIsMykoNywiZGl2Iiw0KSg4LCJwIiw1KSxPZSg5KSxoZSgpKCkoKSxkZSgxMCwibGFiZWwiLDIpLE9lKDExLCJEQyBMb2MiKSxoZSgpLGRlKDEyLCJkaXYiLDYpKDEzLCJkaXYiLDcp''@;'; put 'put ''KDE0LCJpbnB1dCIsOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjUGF0aCx2KXx8KGguZGNQYXRoPXYpLHZ9KSxoZSgpKCkoKSxkZSgxNSwibGFiZWwiLDIpLE9lKDE2LCJTQVMgQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDE3LCJkaXYiLDMpKDE4LCJkaXYi''@;'; put 'put ''LDcpLGd0KDE5LEFLZSwyLDIsInNlbGVjdCIsOSkoMjAsa0tlLDEsMCwiY2xyLXNwaW5uZXIiLDEwKSxoZSgpKCksZGUoMjEsImxhYmVsIiwxMSksT2UoMjIsIkNvbXB1dGUgQ29udGV4dCIpLGhlKCksZGUoMjMsImRpdiIsMykoMjQsImRpdiIsNyksZ3QoMjUsSUtlLDIsMiwic2VsZWN0Iiw5''@;'; put 'put ''KSgyNixSS2UsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxndCgyNyxMS2UsNywxLCJuZy1jb250YWluZXIiLDEyKSxHdCgyOCwiaHIiKSxkZSgyOSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJ1bkF1dG9EZXBsb3koKX0pLE9lKDMwLCIgRGVwbG95''@;'; put 'put ''XG4iKSxoZSgpLGRlKDMxLCJjbHItbW9kYWwiLDE0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwsdil8fChoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD12KSx2fSksZGUoMzIsImgzIiwxNSksT2UoMzMsIldhcm5p''@;'; put 'put ''bmciKSxoZSgpLGRlKDM0LCJkaXYiLDE2KSxPZSgzNSwiIFRoaXMgYWN0aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlzdHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlzIGlzIGEgcmUtZGVwbG95bWVudCwgeW91''@;'; put 'put ''IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLGRlKDM2LCJzdHJvbmciKSxPZSgzNyksaGUoKSxPZSgzOCwiLiAiKSxoZSgpLGRlKDM5LCJkaXYiLDE3KSg0MCwiYnV0dG9uIiwxOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlY3JlYXRlRGF0YWJhc2VNb2Rh''@;'; put 'put ''bD0hMSxoLnJlY3JlYXRlRGF0YWJhc2U9ITF9KSxPZSg0MSwiIENhbmNlbCAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMH0pLE9lKDQzLCIgT2sgIiks''@;'; put 'put ''aGUoKSgpKCkpLDImZCYmKHhlKCJuZ0lmIixoLmF1dG9kZXBsb3lpbmcpLGZlKDkpLHdyKGguYXBwTG9jKSxmZSg1KSxwaSgibmdNb2RlbCIsaC5kY1BhdGgpLGZlKDUpLHhlKCJuZ0lmIiwhaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGguYWRtaW5Hcm91cHNMb2FkaW5n''@;'; put 'put ''KSxmZSg1KSx4ZSgibmdJZiIsIWguY29tcHV0ZUNvbnRleHRzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5jb21wdXRlQ29udGV4dHNMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnJ1bm5pbmdBc1VzZXIpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVjcmVhdGVEYXRhYmFzZU1vZGFs''@;'; put 'put ''KSx4ZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbbnMseWEsQTIsazIscWwsVDIsbmwsJHMsSGwsb3UsS3UsZHMsWjEsRTcsUmRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZSQ9KCk9Pih7c3RhbmRhbG9u''@;'; put 'put ''ZTohMH0pO2Z1bmN0aW9uIFBLZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNikoMSwicCIsNyksT2UoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLGhlKCksZGUoMywibGFiZWwiLDgpLE9lKDQsIlVzZXJuYW1lIiksaGUoKSxkZSg1LCJkaXYiLDkpKDYsImRpdiIsMTApLEd0KDcsImlucHV0Iiwx''@;'; put 'put ''MSksaGUoKSgpLGRlKDgsImxhYmVsIiwxMiksT2UoOSwiUGFzc3dvcmQiKSxoZSgpLGRlKDEwLCJkaXYiLDkpKDExLCJkaXYiLDEwKSxHdCgxMiwiaW5wdXQiLDEzKSxoZSgpKCksZGUoMTMsImJ1dHRvbiIsMTQpLE9lKDE0LCJMb2cgaW4iKSxoZSgpKCkpfWZ1bmN0aW9uIEZLZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuaWQpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBIS2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBOS2UoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxPZSgxKSxndCgyLEhLZSwyLDEsInNwYW4iLDUpLGVsKDMsImpzb24iKSxoZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLm5hbWUpLGZlKCksRHIoIiAiLGEubmFtZSwiICIpLGZlKCkseGUoIm5nSWYiLCJ7fSIhPURjKDMsMyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gVktlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLE9lKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nl''@;'; put 'put ''c3NmdWxseSIpLGhlKCkpfWZ1bmN0aW9uIEJLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLEd0KDEsImNsci1pY29uIiwzOCks''@;'; put 'put ''aGUoKX19ZnVuY3Rpb24gaktlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwicCIsMzkpLE9lKDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9TGUoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxPZSg2LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxsaSgpfX1mdW5jdGlvbiB6S2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxPZSgxKSxo''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSxEcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIFVLZShjLGwpezEmYyYmKHNpKDApLGRlKDEsInNwYW4iLDI1KSxPZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxkZSgzLCJzcGFuIiksT2UoNCwiIFZh''@;'; put 'put ''bGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gWktlKGMsbCl7MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDQ2KSxkZSgyLCJzcGFuIiksT2UoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gV0tlKGMsbCl7MSZjJiYoc2koMCks''@;'; put 'put ''R3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJzcGFuIiksT2UoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gWUtlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NSksZ3QoMSxVS2UsNSwwLCJuZy1jb250YWluZXIiLDUpKDIsWktlLDQsMCwibmctY29u''@;'; put 'put ''dGFpbmVyIiw1KSgzLFdLZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLGEuaXNWYWxpZGF0aW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIEdLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsInAiLDM5KSxPZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLGd0''@;'; put 'put ''KDQsektlLDIsMSwiZGl2Iiw0MSksZGUoNSwiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE9lKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxoZSgpLGRlKDcsImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxPZSg4LCIgRG93bmxvYWQgbG9nICIpLGhlKCksZGUoOSwiYnV0dG9uIiw0MiksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE9lKDEwLCIgVmFsaWRhdGUgIiksaGUoKSxndCgxMSxZS2UsNCwzLCJkaXYiLDQzKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg0KSx4ZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxl''@;'; put 'put ''bmd0aD4wKSxmZSg3KSx4ZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19ZnVuY3Rpb24gJEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMsImxhYmVsIiwxNiksT2UoNCwiQWRtaW4g''@;'; put 'put ''Z3JvdXAiKSxoZSgpLGRlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgpKDcsInNlbGVjdCIsMTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCks''@;'; put 'put ''Q3QoaCl9KSxndCg4LEZLZSwyLDIsIm9wdGlvbiIsMjApLGhlKCkoKSgpKCksZGUoOSwiZGl2IiwxNSkoMTAsImRpdiIpKDExLCJsYWJlbCIsMTYpLE9lKDEyLCJDb250ZXh0IiksaGUoKSxkZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJzZWxlY3QiLDIxKSxnaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnNlbGVjdGVkQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb250ZXh0PWgpLEN0KGgpfSksZ3QoMTYsTktlLDQsNSwib3B0aW9uIiwyMCksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMjIpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5leGVjdXRhYmxlQ29udGV4dCgpKX0pLEd0KDE4LCJjbHItaWNvbiIsMjMpLGhlKCkoKSxkZSgxOSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSxPZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSxkZSgyMiwic3BhbiIpLE9l''@;'; put 'put ''KDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpKCksZGUoMjQsImxhYmVsIiwyNiksT2UoMjUsIkRDIExvYyIpLGhlKCksZGUoMjYsImRpdiIsOSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxl''@;'; put 'put ''KCk7cmV0dXJuIG1pKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCksQ3QoaCl9KSxGdCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuc2F2ZURjUGF0aCgpKX0pLGhlKCkoKSgpLGRlKDI5LCJwIiwyOCksT2UoMzAsIiBTZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9h''@;'; put 'put ''ZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGhlKCksZGUoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoTGUoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGhlKCkoKSxkZSgzMywiZGl2IiwzMSkoMzQsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5leGVjdXRlSnNvbigpKX0pLE9lKDM1LCIgU1VCTUlUIEpTT04gIiksaGUoKSxn''@;'; put 'put ''dCgzNixWS2UsMiwwLCJzcGFuIiw1KSxoZSgpLGRlKDM3LCJwIiwyOCksT2UoMzgsIlNlbGVjdCBTQVMgZmlsZSB0byB1cGxvYWQ6IiksaGUoKSxkZSgzOSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5jbGVhclVw''@;'; put 'put ''bG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gZi5vblNhc0ZpbGVDaGFuZ2UoaCksQ3QoZi5kb3dubG9hZEZpbGVCdG49ITApfSksaGUoKSxndCg0MSxCS2UsMiwwLCJidXR0b24iLDMzKSxoZSgpLGRlKDQyLCJkaXYiLDMxKSg0''@;'; put 'put ''MywiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmV4ZWN1dGVTQVMoKSl9KSxPZSg0NCwiIFNVQk1JVCAiKSxoZSgpKCkoKSxndCg0NSxqS2UsNywwLCJuZy1jb250YWluZXIiLDUpLGRlKDQ2LCJidXR0b24iLDM1KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxPZSg0NywiIENyZWF0ZSBEYXRhYmFzZSAiKSxoZSgpLGd0KDQ4LEdLZSwxMiwyLCJuZy1jb250YWluZXIiLDUpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSg3KSxwaSgibmdNb2RlbCIs''@;'; put 'put ''YS5zZWxlY3RlZEFkbWluR3JvdXApLHhlKCJuZ01vZGVsT3B0aW9ucyIsR3MoMTksZSQpKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxmZSgyKSxUcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksZmUoNSkscGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb250ZXh0KSx4ZSgi''@;'; put 'put ''bmdNb2RlbE9wdGlvbnMiLEdzKDIwLGUkKSksZmUoKSx4ZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksZmUoMyksVHIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSxmZSg5KSxwaSgibmdNb2RlbCIsYS5kY1BhdGgpLHhlKCJuZ01vZGVsT3B0aW9ucyIsR3MoMjEsZSQpKSxmZSg2KSx4''@;'; put 'put ''ZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLGZlKDUpLHhlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksZmUoMikseGUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxmZSgyKSx4ZSgibmdJZiIsYS5q''@;'; put 'put ''b2JMb2cubGVuZ3RoPjApLGZlKCkseGUoImNsckxvYWRpbmciLGEuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IEtLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLm5lZWRzTG9naW49ITEsdGhpcy5hZG1pbkdyb3Vw''@;'; put 'put ''cz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuc2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtd''@;'; put 'put ''LHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEwLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEsdGhpcy5jb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49''@;'; put 'put ''ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJsZUNvbnRleHQoKXtyZXR1cm4gUShmdW5j''@;'; put 'put ''dGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFtZTtsZXQgaD1u''@;'; put 'put ''ZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITAs''@;'; put 'put ''dGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVhZEFzVGV4dChkKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgp''@;'; put 'put ''fWFkZFByZWNvZGVMaW5lcygpe3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3Bh''@;'; put 'put ''dGg9JHt0aGlzLmRjUGF0aH07YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7''@;'; put 'put ''dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNv''@;'; put 'put ''bj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9''@;'; put 'put ''ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmlsZU5hbWUsbGluZXNP''@;'; put 'put ''ZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQoIkVycm9yISIpOmEu''@;'; put 'put ''am9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0ZW1zLm1hcChoPT5oLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7aWYoYSl7bGV0IGY9''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwKyImRENQQVRIPSIr''@;'; put 'put ''dGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3BlbihmLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5H''@;'; put 'put ''cm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6bnVsbCxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VE''@;'; put 'put ''YXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0''@;'; put 'put ''cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0''@;'; put 'put ''dXBzZXJ2aWNlIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzPyJzdWNjZXNzIjoiZXJyb3IiLHRoaXMuaXNWYWxpZGF0aW5nPSExfSkuY2F0Y2goYT0+''@;'; put 'put ''e3RoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJlcnJvciJ9KX1kZWxldGVLZXlzKCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImRlcGxveV9kY19sb2MiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShCcyks''@;'; put 'put ''R2UodmMpLEdlKFNkKSxHZShLaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tYW51YWwtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0''@;'; put 'put ''ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2NrIiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxb''@;'; put 'put ''MSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVhci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0i''@;'; put 'put ''LDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsiZm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1p''@;'; put 'put ''bnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dvcmQiLCJpZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRy''@;'; put 'put ''b2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJhZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNl''@;'; put 'put ''bGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRp''@;'; put 'put ''b25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIw''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2MiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZs''@;'; put 'put ''ZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4t''@;'; put 'put ''dy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJtYi0wIiwibXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0''@;'; put 'put ''biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwi''@;'; put 'put ''Y2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxPZSgxLCIgQ29uZmlndXJhdG9yICIpLGRlKDIsInAiLDEpLE9lKDMpLGhlKCksZGUoNCwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGguZGVsZXRlS2V5cygpfSksT2UoNSwiIENsZWFyIG1lbW9yeSAiKSxoZSgpKCksZGUoNiwiZGl2IiwzKSxndCg3LFBLZSwxNSwwLCJkaXYiLDQpKDgsJEtlLDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImZCYmKGZlKDMpLERyKCJBcHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIp''@;'; put 'put ''LGZlKDQpLHhlKCJuZ0lmIixoLm5lZWRzTG9naW4pLGZlKCkseGUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOltucyx5YSxsNyxBMixrMixxbCxUMixubCxvNywkcyxicCxIbCxqMCxQMixkcyxlWl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlv''@;'; put 'put ''biBxS2UoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE1KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIFhLZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuR1JPVVBOQU1FKSxmZSgp''@;'; put 'put ''LFV1KCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgSktlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IG1oLlNB''@;'; put 'put ''U2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1RO''@;'; put 'put ''QU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxl''@;'; put 'put ''ciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1n''@;'; put 'put ''ZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuYWRhcHRlclJlc3BvbnNlLk1GX0dFVFVTRVIsdGhpcy5TWVNVU0VSSUQ9YS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsdGhpcy5TWVNWTE9ORz1hLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyx0aGlzLmRjRGlyZWN0b3J5PXRoaXMudG1wRGlyZWN0b3JpZXNbWyJMIiwiSCIsIkEiLCJTIl0u''@;'; put 'put ''aW5jbHVkZXMoYS5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQ''@;'; put 'put ''TkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRo''@;'; put 'put ''aXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09QjAuWS5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihJPT57SSYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhp''@;'; put 'put ''cy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09QjAuWS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9h''@;'; put 'put ''ZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShWY2UpLEdl''@;'; put 'put ''KGZoKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9''@;'; put 'put ''LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJs''@;'; put 'put ''aWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQtMTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwi''@;'; put 'put ''Y2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJi''@;'; put 'put ''dG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsx''@;'; put 'put ''JmQmJihndCgwLHFLZSwyLDAsImRpdiIsMCksZGUoMSwiaDQiLDEpLE9lKDIsIlNhc2pzIERlcGxveSIpLGhlKCksR3QoMywiaHIiLDIpLGRlKDQsInAiLDMpLE9lKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93''@;'; put 'put ''aW5nIGRldGFpbHM6XG4iKSxoZSgpLGRlKDYsInAiLDQpLE9lKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSAob24gdGhlICIpLGRlKDgsInN0cm9uZyIpLE9lKDkpLGhlKCksT2UoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIiksZGUo''@;'; put 'put ''MTEsInN0cm9uZyIpLE9lKDEyKSxoZSgpLE9lKDEzLCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgxNCwibGFiZWwiLDUpLE9lKDE1LCJEQyBTdGFnaW5nIERpcmVjdG9yeSIpLGhlKCksZGUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgs''@;'; put 'put ''ImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGguZGNEaXJlY3Rvcnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxoZSgpKCkoKSxkZSgxOSwicCIsNCksT2UoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBi''@;'; put 'put ''ZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDIxLCJsYWJlbCIs''@;'; put 'put ''NSksT2UoMjIsIkRhdGEgQ29udHJvbGxlciBBZG1pbiBncm91cCIpLGhlKCksZGUoMjMsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdy''@;'; put 'put ''b3VwPXYpLHZ9KSxndCgyNSxYS2UsMiwzLCJvcHRpb24iLDExKSxoZSgpKCksZGUoMjYsInAiLDQpLE9lKDI3LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92''@;'; put 'put ''ZTpcbiIpLGhlKCksZGUoMjgsImRpdiIsMTIpKDI5LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLE9lKDMwLCIgU1VCTUlUICIpLGhlKCkoKSxHdCgzMSwiaHIiLDIpLGRlKDMyLCJkaXYiLDE0KSgzMywicCIpLE9lKDM0LCJZb3UgYXJl''@;'; put 'put ''IGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksaGUoKSxkZSgzNSwidWwiKSgzNiwibGkiKSxPZSgzNyksaGUoKSxkZSgzOCwibGkiKSxPZSgzOSksaGUoKSxkZSg0MCwibGkiKSxPZSg0MSksaGUoKSxkZSg0MiwibGkiKSxPZSg0MyksaGUoKSgpKCkpLDImZCYm''@;'; put 'put ''KHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKDkpLERyKCIgIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgzKSx3cihoLlNZU1VTRVJJRCksZmUoNikscGkoIm5nTW9kZWwiLGguZGNEaXJlY3RvcnkpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjQWRtaW5Hcm91cCksZmUoKSx4ZSgibmdGb3JPZiIsaC5k''@;'; put 'put ''Y0FkbWluR3JvdXBMaXN0KSxmZSgxMiksRHIoIk1FVEFQRVJTT046ICIsaC5NRVRBUEVSU09OLCIiKSxmZSgyKSxEcigiU1lTVVNFUklEOiAiLGguU1lTVVNFUklELCIiKSxmZSgyKSxEcigiU1lTSE9TVE5BTUU6ICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMiksRHIoIlNZU1ZMT05HOiAiLGgu''@;'; put 'put ''U1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVzOltucyx5YSxBMixrMixxbCxUMixubCwkcyxkcyxFNywkYl0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBRS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksT2UoMiwi''@;'; put 'put ''VGVybXMgYW5kIENvbmRpdGlvbnMiKSxoZSgpLGRlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiw4KSxPZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBCZWZvcmUgcHJvY2VlZGluZyB3aXRo''@;'; put 'put ''IGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksZGUoNywiYSIsOSksT2UoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSxPZSg5LCIu''@;'; put 'put ''ICIpLGhlKCkoKSxHdCgxMCwiaHIiLDEwKSxkZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDExKSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEzLCJsYWJlbCIpLE9lKDE0LCJJ''@;'; put 'put ''IGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxkZSgxNSwiYSIsOSksT2UoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gZXFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiZGl2IiwxNikoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE3KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgic2Fz''@;'; put 'put ''SnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKX19''@;'; put 'put ''ZnVuY3Rpb24gdHFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxOCkoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gbnFlKGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxlcWUsMiw2LCJk''@;'; put 'put ''aXYiLDE0KSgyLHRxZSwyLDMsImRpdiIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIixhLmF1dG9kZXBsb3kpLGZlKCkseGUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBycWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJk''@;'; put 'put ''aXYiLDE2KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOSksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMikseGUoInNhc0pz''@;'; put 'put ''IixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIGlxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0''@;'; put 'put ''b3IiLDE5KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSx4ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNK''@;'; put 'put ''c0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gYXFlKGMsbCl7aWYoMSZjJiYoc2koMCwxMiksZ3QoMSxucWUsMywyLCJuZy1jb250YWluZXIiLDEzKSgyLHJxZSwzLDMsIm5nLWNvbnRhaW5lciIsMTMpKDMsaXFlLDMsMywibmctY29u''@;'; put 'put ''dGFpbmVyIiwxMyksbGkoKSksMiZjKXtjb25zdCBhPUxlKCk7eGUoIm5nU3dpdGNoIiwhMCksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgUWhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9''@;'; put 'put ''YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5zYXNKc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0Fk''@;'; put 'put ''YXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNq''@;'; put 'put ''c0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhpcy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lf''@;'; put 'put ''c2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2RjX2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2V0RGVwbG95RGVmYXVsdHMoKX1zZXREZXBsb3lEZWZhdWx0cygpe3RoaXMuZGNQYXRoPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmRj''@;'; put 'put ''UGF0aHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYWRtaW5Hcm91cHx8IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXB8fCh0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiKX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhp''@;'; put 'put ''cy5hdXRvZGVwbG95fHx0aGlzLmdldEFkbWluR3JvdXBzKCksdGhpcy5zdGVwKyt9Z2V0QWRtaW5Hcm91cHMoKXtmZXRjaCh0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP3NvcnRCeT1uYW1lJmxpbWl0PTUwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5hZG1pbkdyb3Vwcz1kLml0ZW1zLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuYWRtaW5Hcm91cHNb''@;'; put 'put ''MF0uaWQpfSl9b25OYXZpZ2F0ZVRvSG9tZSgpe3dpbmRvdy5vcGVuKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSwiX2JsYW5rIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoUTgpLEdlKEJzKSxHZShTZCksR2UoTHMpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxb''@;'; put 'put ''ImlkIiwiVENTIiwiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJpZCIsIlRDUyIsMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJtdC0wIl0sWyJocmVmIiwiaHR0cHM6Ly9kb2Nz''@;'; put 'put ''LmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRpb24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxhbmsiXSxbMSwibGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJj''@;'; put 'put ''bGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0Fk''@;'; put 'put ''YXB0ZXJTZXR0aW5ncyIsImFwcExvYyIsImRjUGF0aCIsInNlbGVjdGVkQWRtaW5Hcm91cCJdLFsiaWQiLCJtYWluYm9keSIsMSwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIl1dLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsUUtlLDE3LDAsImRpdiIsMiksaGUoKSxndCgzLGFxZSw0LDQsIm5nLWNvbnRhaW5lciIsMyksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLDA9PT1oLnN0ZXApLGZlKCkseGUoIm5nSWYiLGguc3RlcD4wKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbeWEsUzIsY3AsZHMsSWQsU2gsT0tlLEtLZSxKS2VdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgb3FlPVt7cGF0aDoiIixjb21wb25lbnQ6UWhlfSx7cGF0aDoibWFudWFsZGVwbG95Iixjb21wb25lbnQ6UWhlfV07bGV0IHNxZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQob3FlKSx6Y119KX19cmV0dXJuIGN9KSgpLGxx''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsUmMsejAsc3FlXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7Yig0OTUzNyksYig3NzUyNSksYig1NzcyKSxiKDY5ODc1KSxiKDE2MDkzKSxiKDk1NjA4KSxiKDE2NDkzKSxiKDYxOTM0KSxiKDEwMTAxKSxiKDI2ODg5KSxiKDQzMjg3KSxiKDY1NzQ1KSxiKDI5NzA4KSxiKDY1MTE3KSxiKDEwMzYzKTtjb25zdHtlbnRyaWVzOmUyZSxzZXRQcm90b3R5''@;'; put 'put ''cGVPZjp0MmUsaXNGcm96ZW46Y3FlLGdldFByb3RvdHlwZU9mOnVxZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZHFlfT1PYmplY3Q7bGV0e2ZyZWV6ZTpZMSxzZWFsOkgyLGNyZWF0ZTpuMmV9PU9iamVjdCx7YXBwbHk6dCQsY29uc3RydWN0Om4kfT10eXBlb2YgUmVmbGVjdDwidSImJlJl''@;'; put 'put ''ZmxlY3Q7WTF8fChZMT1mdW5jdGlvbihsKXtyZXR1cm4gbH0pLEgyfHwoSDI9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSx0JHx8KHQkPWZ1bmN0aW9uKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfSksbiR8fChuJD1mdW5jdGlvbihsLGEpe3JldHVybiBuZXcgbCguLi5hKX0pO2NvbnN0IFRP''@;'; put 'put ''PSQxKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSxocWU9JDEoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSxyMmU9JDEoQXJyYXkucHJvdG90eXBlLnBvcCksc0U9JDEoQXJyYXkucHJvdG90eXBlLnB1c2gpLGZxZT0kMShBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxBTz0kMShTdHJpbmcu''@;'; put 'put ''cHJvdG90eXBlLnRvTG93ZXJDYXNlKSxyJD0kMShTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxpMmU9JDEoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksbEU9JDEoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxwcWU9JDEoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxncWU9JDEoU3RyaW5n''@;'; put 'put ''LnByb3RvdHlwZS50cmltKSx0Mz0kMShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxHMT0kMShSZWdFeHAucHJvdG90eXBlLnRlc3QpLGNFPWZ1bmN0aW9uIG1xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxk''@;'; put 'put ''PTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbiQoYyxhKX19KFR5cGVFcnJvcik7ZnVuY3Rpb24gJDEoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2wgaW5zdGFuY2VvZiBSZWdFeHAmJihsLmxhc3RJbmRleD0wKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh''@;'; put 'put ''eShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHQkKGMsbCxkKX19ZnVuY3Rpb24geXMoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06QU87dDJlJiZ0MmUoYyxudWxsKTtsZXQg''@;'; put 'put ''ZD1sLmxlbmd0aDtmb3IoO2QtLTspe2xldCBoPWxbZF07aWYoInN0cmluZyI9PXR5cGVvZiBoKXtjb25zdCBmPWEoaCk7ZiE9PWgmJihjcWUobCl8fChsW2RdPWYpLGg9Zil9Y1toXT0hMH1yZXR1cm4gY31mdW5jdGlvbiB2cWUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspdDMoYyxs''@;'; put 'put ''KXx8KGNbbF09bnVsbCk7cmV0dXJuIGN9ZnVuY3Rpb24gbWcoYyl7Y29uc3QgbD1uMmUobnVsbCk7Zm9yKGNvbnN0W2EsZF1vZiBlMmUoYykpdDMoYyxhKSYmKGxbYV09QXJyYXkuaXNBcnJheShkKT92cWUoZCk6ZCYmIm9iamVjdCI9PXR5cGVvZiBkJiZkLmNvbnN0cnVjdG9yPT09T2JqZWN0''@;'; put 'put ''P21nKGQpOmQpO3JldHVybiBsfWZ1bmN0aW9uIHVFKGMsbCl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGQ9ZHFlKGMsbCk7aWYoZCl7aWYoZC5nZXQpcmV0dXJuICQxKGQuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC52YWx1ZSlyZXR1cm4gJDEoZC52YWx1ZSl9Yz11cWUoYyl9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGEoKXtyZXR1cm4gbnVsbH19Y29uc3QgYTJlPVkxKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0''@;'; put 'put ''b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxl''@;'; put 'put ''bWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwi''@;'; put 'put ''bGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwi''@;'; put 'put ''cnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0''@;'; put 'put ''ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxpJD1ZMShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0''@;'; put 'put ''ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNr''@;'; put 'put ''IiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwi''@;'; put 'put ''dmtlcm4iXSksYSQ9WTEoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFk''@;'; put 'put ''b3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5n''@;'; put 'put ''IiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSkseXFlPVkxKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQt''@;'; put 'put ''ZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxvJD1ZMShbIm1hdGgi''@;'; put 'put ''LCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0IiwibXN0eWxl''@;'; put 'put ''IiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksYnFlPVkxKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNj''@;'; put 'put ''YXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxvMmU9WTEoWyIjdGV4dCJdKSxzMmU9WTEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIs''@;'; put 'put ''ImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xl''@;'; put 'put ''YXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1v''@;'; put 'put ''dGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJr''@;'; put 'put ''aW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dy''@;'; put 'put ''YXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwi''@;'; put 'put ''LCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJz''@;'; put 'put ''dW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxzJD1ZMShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFz''@;'; put 'put ''ZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgi''@;'; put 'put ''LCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlz''@;'; put 'put ''cGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJm''@;'; put 'put ''b250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0i''@;'; put 'put ''LCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNw''@;'; put 'put ''YWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5p''@;'; put 'put ''dHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWlu''@;'; put 'put ''dC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJy''@;'; put 'put ''YWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRo''@;'; put 'put ''b2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGlt''@;'; put 'put ''aXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4''@;'; put 'put ''dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3Jp''@;'; put 'put ''Z2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLGwyZT1ZMShbImFjY2VudCIsImFj''@;'; put 'put ''Y2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdo''@;'; put 'put ''dCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRp''@;'; put 'put ''b24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNl''@;'; put 'put ''cGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxrTz1ZMShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0p''@;'; put 'put ''LF9xZT1IMigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLHdxZT1IMigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksQ3FlPUgyKC9cJFx7W1x3XFddKi9nbSksU3FlPUgyKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXSskLyksTXFlPUgyKC9eYXJpYS1bXC1cd10rJC8pLGMyZT1IMigv''@;'; put 'put ''Xig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHB8bWF0cml4KTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSkseHFlPUgyKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxFcWU9SDIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgw''@;'; put 'put ''XHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksdTJlPUgyKC9eaHRtbCQvaSksVHFlPUgyKC9eW2Etel1bLlx3XSooLVsuXHddKykrJC9pKTt2YXIgZDJlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjpNcWUsQVRUUl9XSElURVNQQUNFOkVxZSxDVVNU''@;'; put 'put ''T01fRUxFTUVOVDpUcWUsREFUQV9BVFRSOlNxZSxET0NUWVBFX05BTUU6dTJlLEVSQl9FWFBSOndxZSxJU19BTExPV0VEX1VSSTpjMmUsSVNfU0NSSVBUX09SX0RBVEE6eHFlLE1VU1RBQ0hFX0VYUFI6X3FlLFRNUExJVF9FWFBSOkNxZX0pO3ZhciBEcWU9ZnVuY3Rpb24gZjJlKCl7bGV0IGM9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93O2NvbnN0IGw9Y289PmYyZShjbyk7aWYobC52ZXJzaW9uPSIzLjIuNiIsbC5yZW1vdmVkPVtdLCFjfHwhYy5kb2N1bWVudHx8OSE9PWMuZG9j''@;'; put 'put ''dW1lbnQubm9kZVR5cGV8fCFjLkVsZW1lbnQpcmV0dXJuIGwuaXNTdXBwb3J0ZWQ9ITEsbDtsZXR7ZG9jdW1lbnQ6YX09Yztjb25zdCBkPWEsaD1kLmN1cnJlbnRTY3JpcHQse0RvY3VtZW50RnJhZ21lbnQ6ZixIVE1MVGVtcGxhdGVFbGVtZW50OnYsTm9kZTpNLEVsZW1lbnQ6SSxOb2RlRmls''@;'; put 'put ''dGVyOkcsTmFtZWROb2RlTWFwOmllPWMuTmFtZWROb2RlTWFwfHxjLk1vek5hbWVkQXR0ck1hcCxIVE1MRm9ybUVsZW1lbnQ6dWUsRE9NUGFyc2VyOnllLHRydXN0ZWRUeXBlczpFZX09YyxqZT1JLnByb3RvdHlwZSxxZT11RShqZSwiY2xvbmVOb2RlIikscnQ9dUUoamUsInJlbW92ZSIpLHB0''@;'; put 'put ''PXVFKGplLCJuZXh0U2libGluZyIpLGR0PXVFKGplLCJjaGlsZE5vZGVzIiksSnQ9dUUoamUsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdil7Y29uc3QgY289YS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2NvLmNvbnRlbnQmJmNvLmNvbnRlbnQub3duZXJEb2N1bWVu''@;'; put 'put ''dCYmKGE9Y28uY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgdm4sQ249IiI7Y29uc3R7aW1wbGVtZW50YXRpb246dG4sY3JlYXRlTm9kZUl0ZXJhdG9yOk1uLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6Q3IsZ2V0RWxlbWVudHNCeVRhZ05hbWU6R3J9PWEse2ltcG9ydE5vZGU6bXJ9PWQ7bGV0''@;'; put 'put ''IEduPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1''@;'; put 'put ''cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfTtsLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBlMmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBKdCYmdG4mJnZvaWQgMCE9PXRuLmNyZWF0ZUhUTUxEb2N1''@;'; put 'put ''bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOmFpLEVSQl9FWFBSOl9pLFRNUExJVF9FWFBSOk9uLERBVEFfQVRUUjp6cixBUklBX0FUVFI6Sm4sSVNfU0NSSVBUX09SX0RBVEE6SXIsQVRUUl9XSElURVNQQUNFOiRyLENVU1RPTV9FTEVNRU5UOndpfT1kMmU7bGV0e0lTX0FMTE9XRURfVVJJOmVh''@;'; put 'put ''fT1kMmUsZmE9bnVsbDtjb25zdCB2dD15cyh7fSxbLi4uYTJlLC4uLmkkLC4uLmEkLC4uLm8kLC4uLm8yZV0pO2xldCBOdD1udWxsO2NvbnN0IEh0PXlzKHt9LFsuLi5zMmUsLi4ucyQsLi4ubDJlLC4uLmtPXSk7bGV0IEhuPU9iamVjdC5zZWFsKG4yZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dy''@;'; put 'put ''aXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksdHI9bnVsbCxhcj1udWxsLEhyPSEwLHFyPSEwLG9uPSExLGJuPSEwLHBuPSExLHByPSEwLCRuPSExLGRyPSExLFVyPSExLFpuPSExLHNyPSExLE5yPSExLE1yPSEwLFpyPSExLEJhPSEwLElvPSExLFpvPXt9''@;'; put 'put ''LHBzPW51bGw7Y29uc3QgTW89eXMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0''@;'; put 'put ''IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgaHM9bnVsbDtjb25zdCBuYz15cyh7fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBRbz1u''@;'; put 'put ''dWxsO2NvbnN0IE0zPXlzKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksYWQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0''@;'; put 'put ''aC9NYXRoTUwiLFVzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsSmM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBxcz1KYyxCbD0hMSxlcz1udWxsO2NvbnN0IEUxPXlzKHt9LFthZCxVcyxKY10sciQpO2xldCB4Mz15cyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwi''@;'; put 'put ''bXRleHQiXSksUWc9eXMoe30sWyJhbm5vdGF0aW9uLXhtbCJdKTtjb25zdCBkND15cyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKTtsZXQgYXY9bnVsbDtjb25zdCBWQT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xldCAkYT1udWxsLHg2''@;'; put 'put ''PW51bGw7Y29uc3QgV3RlPWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLFpOPWZ1bmN0aW9uKGdyKXtyZXR1cm4gZ3IgaW5zdGFuY2VvZiBSZWdFeHB8fGdyIGluc3RhbmNlb2YgRnVuY3Rpb259LEJBPWZ1bmN0aW9uKCl7bGV0IGdyPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZigheDZ8fHg2IT09Z3Ipe2lmKCghZ3J8fCJvYmplY3QiIT10eXBlb2YgZ3IpJiYoZ3I9e30pLGdyPW1nKGdyKSxhdj0tMT09PVZBLmluZGV4T2YoZ3IuUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOmdyLlBBUlNFUl9NRURJQV9UWVBFLCRh''@;'; put 'put ''PSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09YXY/ciQ6QU8sZmE9dDMoZ3IsIkFMTE9XRURfVEFHUyIpP3lzKHt9LGdyLkFMTE9XRURfVEFHUywkYSk6dnQsTnQ9dDMoZ3IsIkFMTE9XRURfQVRUUiIpP3lzKHt9LGdyLkFMTE9XRURfQVRUUiwkYSk6SHQsZXM9dDMoZ3IsIkFMTE9XRURfTkFN''@;'; put 'put ''RVNQQUNFUyIpP3lzKHt9LGdyLkFMTE9XRURfTkFNRVNQQUNFUyxyJCk6RTEsUW89dDMoZ3IsIkFERF9VUklfU0FGRV9BVFRSIik/eXMobWcoTTMpLGdyLkFERF9VUklfU0FGRV9BVFRSLCRhKTpNMyxocz10MyhnciwiQUREX0RBVEFfVVJJX1RBR1MiKT95cyhtZyhuYyksZ3IuQUREX0RBVEFf''@;'; put 'put ''VVJJX1RBR1MsJGEpOm5jLHBzPXQzKGdyLCJGT1JCSURfQ09OVEVOVFMiKT95cyh7fSxnci5GT1JCSURfQ09OVEVOVFMsJGEpOk1vLHRyPXQzKGdyLCJGT1JCSURfVEFHUyIpP3lzKHt9LGdyLkZPUkJJRF9UQUdTLCRhKTptZyh7fSksYXI9dDMoZ3IsIkZPUkJJRF9BVFRSIik/eXMoe30sZ3Iu''@;'; put 'put ''Rk9SQklEX0FUVFIsJGEpOm1nKHt9KSxabz0hIXQzKGdyLCJVU0VfUFJPRklMRVMiKSYmZ3IuVVNFX1BST0ZJTEVTLEhyPSExIT09Z3IuQUxMT1dfQVJJQV9BVFRSLHFyPSExIT09Z3IuQUxMT1dfREFUQV9BVFRSLG9uPWdyLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxibj0hMSE9PWdy''@;'; put 'put ''LkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUixwbj1nci5TQUZFX0ZPUl9URU1QTEFURVN8fCExLHByPSExIT09Z3IuU0FGRV9GT1JfWE1MLCRuPWdyLldIT0xFX0RPQ1VNRU5UfHwhMSxabj1nci5SRVRVUk5fRE9NfHwhMSxzcj1nci5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxOcj1nci5SRVRV''@;'; put 'put ''Uk5fVFJVU1RFRF9UWVBFfHwhMSxVcj1nci5GT1JDRV9CT0RZfHwhMSxNcj0hMSE9PWdyLlNBTklUSVpFX0RPTSxacj1nci5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsQmE9ITEhPT1nci5LRUVQX0NPTlRFTlQsSW89Z3IuSU5fUExBQ0V8fCExLGVhPWdyLkFMTE9XRURfVVJJX1JFR0VYUHx8''@;'; put 'put ''YzJlLHFzPWdyLk5BTUVTUEFDRXx8SmMseDM9Z3IuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHx4MyxRZz1nci5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8UWcsSG49Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZaTihn''@;'; put 'put ''ci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoSG4udGFnTmFtZUNoZWNrPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlpOKGdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0''@;'; put 'put ''ZU5hbWVDaGVjaykmJihIbi5hdHRyaWJ1dGVOYW1lQ2hlY2s9Z3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxnci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgZ3IuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0''@;'; put 'put ''b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWdyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cykscG4mJihxcj0hMSksc3ImJihabj0hMCksWm8mJihmYT15cyh7fSxvMmUpLE50PVtd''@;'; put 'put ''LCEwPT09Wm8uaHRtbCYmKHlzKGZhLGEyZSkseXMoTnQsczJlKSksITA9PT1aby5zdmcmJih5cyhmYSxpJCkseXMoTnQscyQpLHlzKE50LGtPKSksITA9PT1aby5zdmdGaWx0ZXJzJiYoeXMoZmEsYSQpLHlzKE50LHMkKSx5cyhOdCxrTykpLCEwPT09Wm8ubWF0aE1sJiYoeXMoZmEsbyQpLHlz''@;'; put 'put ''KE50LGwyZSkseXMoTnQsa08pKSksZ3IuQUREX1RBR1MmJihmYT09PXZ0JiYoZmE9bWcoZmEpKSx5cyhmYSxnci5BRERfVEFHUywkYSkpLGdyLkFERF9BVFRSJiYoTnQ9PT1IdCYmKE50PW1nKE50KSkseXMoTnQsZ3IuQUREX0FUVFIsJGEpKSxnci5BRERfVVJJX1NBRkVfQVRUUiYmeXMoUW8s''@;'; put 'put ''Z3IuQUREX1VSSV9TQUZFX0FUVFIsJGEpLGdyLkZPUkJJRF9DT05URU5UUyYmKHBzPT09TW8mJihwcz1tZyhwcykpLHlzKHBzLGdyLkZPUkJJRF9DT05URU5UUywkYSkpLEJhJiYoZmFbIiN0ZXh0Il09ITApLCRuJiZ5cyhmYSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxmYS50YWJsZSYmKHlz''@;'; put 'put ''KGZhLFsidGJvZHkiXSksZGVsZXRlIHRyLnRib2R5KSxnci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGdyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9u''@;'; put 'put ''IG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgY0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBh''@;'; put 'put ''ICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7dm49Z3IuVFJVU1RFRF9UWVBFU19QT0xJQ1ksQ249dm4uY3JlYXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT12biYmKHZuPWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQb2xp''@;'; put 'put ''Y3kpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2EmJmEuaGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShmLHtj''@;'; put 'put ''cmVhdGVIVE1MOnY9PnYsY3JlYXRlU2NyaXB0VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShFZSxoKSksbnVsbCE9PXZuJiYic3RyaW5nIj09dHlwZW9mIENuJiYoQ249''@;'; put 'put ''dm4uY3JlYXRlSFRNTCgiIikpO1kxJiZZMShncikseDY9Z3J9fSxXTj15cyh7fSxbLi4uaSQsLi4uYSQsLi4ueXFlXSksWU49eXMoe30sWy4uLm8kLC4uLmJxZV0pLFl0PWZ1bmN0aW9uKGdyKXtzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3J9KTt0cnl7SnQoZ3IpLnJlbW92ZUNoaWxkKGdyKX1j''@;'; put 'put ''YXRjaHtydChncil9fSx2MD1mdW5jdGlvbihncixRaSl7dHJ5e3NFKGwucmVtb3ZlZCx7YXR0cmlidXRlOlFpLmdldEF0dHJpYnV0ZU5vZGUoZ3IpLGZyb206UWl9KX1jYXRjaHtzRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206UWl9KX1pZihRaS5yZW1vdmVBdHRyaWJ1dGUoZ3Ip''@;'; put 'put ''LCJpcyI9PT1ncilpZihabnx8c3IpdHJ5e1l0KFFpKX1jYXRjaHt9ZWxzZSB0cnl7UWkuc2V0QXR0cmlidXRlKGdyLCIiKX1jYXRjaHt9fSxacz1mdW5jdGlvbihncil7bGV0IFFpPW51bGwsWGE9bnVsbDtpZihVcilncj0iPHJlbW92ZT48L3JlbW92ZT4iK2dyO2Vsc2V7Y29uc3QgUnU9aTJl''@;'; put 'put ''KGdyLC9eW1xyXG5cdCBdKy8pO1hhPVJ1JiZSdVswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PWF2JiZxcz09PUpjJiYoZ3I9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytncisiPC9ib2R5PjwvaHRtbD4iKTtjb25z''@;'; put 'put ''dCBkYz12bj92bi5jcmVhdGVIVE1MKGdyKTpncjtpZihxcz09PUpjKXRyeXtRaT0obmV3IHllKS5wYXJzZUZyb21TdHJpbmcoZGMsYXYpfWNhdGNoe31pZighUWl8fCFRaS5kb2N1bWVudEVsZW1lbnQpe1FpPXRuLmNyZWF0ZURvY3VtZW50KHFzLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e1FpLmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudC5pbm5lckhUTUw9Qmw/Q246ZGN9Y2F0Y2h7fX1jb25zdCBBMD1RaS5ib2R5fHxRaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGdyJiZYYSYmQTAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4dE5vZGUoWGEpLEEwLmNoaWxkTm9kZXNbMF18fG51bGwpLHFzPT09SmM/R3Iu''@;'; put 'put ''Y2FsbChRaSwkbj8iaHRtbCI6ImJvZHkiKVswXTokbj9RaS5kb2N1bWVudEVsZW1lbnQ6QTB9LEdOPWZ1bmN0aW9uKGdyKXtyZXR1cm4gTW4uY2FsbChnci5vd25lckRvY3VtZW50fHxncixncixHLlNIT1dfRUxFTUVOVHxHLlNIT1dfQ09NTUVOVHxHLlNIT1dfVEVYVHxHLlNIT1dfUFJPQ0VT''@;'; put 'put ''U0lOR19JTlNUUlVDVElPTnxHLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sRTY9ZnVuY3Rpb24oZ3Ipe3JldHVybiBnciBpbnN0YW5jZW9mIHVlJiYoInN0cmluZyIhPXR5cGVvZiBnci5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBnci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIGdyLnJlbW92ZUNoaWxkfHwhKGdyLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBpZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBnci5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgZ3IubmFtZXNwYWNlVVJJfHwiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgZ3IuaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgZ3IuaGFzQ2hpbGROb2Rlcyl9LGU1PWZ1bmN0aW9uKGdyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmZ3IgaW5zdGFuY2VvZiBNfTtmdW5jdGlvbiBFMyhjbyxncixRaSl7VE8oY28sWGE9PntY''@;'; put 'put ''YS5jYWxsKGwsZ3IsUWkseDYpfSl9Y29uc3QgJE49ZnVuY3Rpb24oZ3Ipe2xldCBRaT1udWxsO2lmKEUzKEduLmJlZm9yZVNhbml0aXplRWxlbWVudHMsZ3IsbnVsbCksRTYoZ3IpKXJldHVybiBZdChnciksITA7Y29uc3QgWGE9JGEoZ3Iubm9kZU5hbWUpO2lmKEUzKEduLnVwb25TYW5pdGl6''@;'; put 'put ''ZUVsZW1lbnQsZ3Ise3RhZ05hbWU6WGEsYWxsb3dlZFRhZ3M6ZmF9KSxwciYmZ3IuaGFzQ2hpbGROb2RlcygpJiYhZTUoZ3IuZmlyc3RFbGVtZW50Q2hpbGQpJiZHMSgvPFsvXHchXS9nLGdyLmlubmVySFRNTCkmJkcxKC88Wy9cdyFdL2csZ3IudGV4dENvbnRlbnQpfHw3PT09Z3Iubm9kZVR5''@;'; put 'put ''cGV8fHByJiY4PT09Z3Iubm9kZVR5cGUmJkcxKC88Wy9cd10vZyxnci5kYXRhKSlyZXR1cm4gWXQoZ3IpLCEwO2lmKCFmYVtYYV18fHRyW1hhXSl7aWYoIXRyW1hhXSYmcU4oWGEpJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssWGEpfHxI''@;'; put 'put ''bi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKFhhKSkpcmV0dXJuITE7aWYoQmEmJiFwc1tYYV0pe2NvbnN0IGRjPUp0KGdyKXx8Z3IucGFyZW50Tm9kZSxBMD1kdChncil8fGdyLmNoaWxkTm9kZXM7aWYoQTAmJmRjKWZvcihsZXQgVDE9QTAubGVu''@;'; put 'put ''Z3RoLTE7VDE+PTA7LS1UMSl7Y29uc3QgWmg9cWUoQTBbVDFdLCEwKTtaaC5fX3JlbW92YWxDb3VudD0oZ3IuX19yZW1vdmFsQ291bnR8fDApKzEsZGMuaW5zZXJ0QmVmb3JlKFpoLHB0KGdyKSl9fXJldHVybiBZdChnciksITB9cmV0dXJuIGdyIGluc3RhbmNlb2YgSSYmIWZ1bmN0aW9uKGdy''@;'; put 'put ''KXtsZXQgUWk9SnQoZ3IpOyghUWl8fCFRaS50YWdOYW1lKSYmKFFpPXtuYW1lc3BhY2VVUkk6cXMsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWGE9QU8oZ3IudGFnTmFtZSksZGM9QU8oUWkudGFnTmFtZSk7cmV0dXJuISFlc1tnci5uYW1lc3BhY2VVUkldJiYoZ3IubmFtZXNwYWNlVVJJ''@;'; put 'put ''PT09VXM/UWkubmFtZXNwYWNlVVJJPT09SmM/InN2ZyI9PT1YYTpRaS5uYW1lc3BhY2VVUkk9PT1hZD8ic3ZnIj09PVhhJiYoImFubm90YXRpb24teG1sIj09PWRjfHx4M1tkY10pOiEhV05bWGFdOmdyLm5hbWVzcGFjZVVSST09PWFkP1FpLm5hbWVzcGFjZVVSST09PUpjPyJtYXRoIj09PVhh''@;'; put 'put ''OlFpLm5hbWVzcGFjZVVSST09PVVzPyJtYXRoIj09PVhhJiZRZ1tkY106ISFZTltYYV06Z3IubmFtZXNwYWNlVVJJPT09SmM/IShRaS5uYW1lc3BhY2VVUkk9PT1VcyYmIVFnW2RjXXx8UWkubmFtZXNwYWNlVVJJPT09YWQmJiF4M1tkY10pJiYhWU5bWGFdJiYoZDRbWGFdfHwhV05bWGFdKToh''@;'; put 'put ''KCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIT09YXZ8fCFlc1tnci5uYW1lc3BhY2VVUkldKSl9KGdyKXx8KCJub3NjcmlwdCI9PT1YYXx8Im5vZW1iZWQiPT09WGF8fCJub2ZyYW1lcyI9PT1YYSkmJkcxKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLGdyLmlubmVySFRNTCk/KFl0KGdy''@;'; put 'put ''KSwhMCk6KHBuJiYzPT09Z3Iubm9kZVR5cGUmJihRaT1nci50ZXh0Q29udGVudCxUTyhbYWksX2ksT25dLGRjPT57UWk9bEUoUWksZGMsIiAiKX0pLGdyLnRleHRDb250ZW50IT09UWkmJihzRShsLnJlbW92ZWQse2VsZW1lbnQ6Z3IuY2xvbmVOb2RlKCl9KSxnci50ZXh0Q29udGVudD1RaSkp''@;'; put 'put ''LEUzKEduLmFmdGVyU2FuaXRpemVFbGVtZW50cyxncixudWxsKSwhMSl9LEtOPWZ1bmN0aW9uKGdyLFFpLFhhKXtpZihNciYmKCJpZCI9PT1RaXx8Im5hbWUiPT09UWkpJiYoWGEgaW4gYXx8WGEgaW4gV3RlKSlyZXR1cm4hMTtpZigoIXFyfHxhcltRaV18fCFHMSh6cixRaSkpJiYoIUhyfHwh''@;'; put 'put ''RzEoSm4sUWkpKSlpZighTnRbUWldfHxhcltRaV0pe2lmKCEocU4oZ3IpJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZHMShIbi50YWdOYW1lQ2hlY2ssZ3IpfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4udGFnTmFtZUNoZWNrKGdyKSkmJihI''@;'; put 'put ''bi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLmF0dHJpYnV0ZU5hbWVDaGVjayxRaSl8fEhuLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi5hdHRyaWJ1dGVOYW1lQ2hlY2soUWkpKXx8ImlzIj09PVFpJiZIbi5hbGxvd0N1c3Rv''@;'; put 'put ''bWl6ZWRCdWlsdEluRWxlbWVudHMmJihIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkcxKEhuLnRhZ05hbWVDaGVjayxYYSl8fEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZIbi50YWdOYW1lQ2hlY2soWGEpKSkpcmV0dXJuITF9ZWxzZSBpZighUW9bUWld''@;'; put 'put ''JiYhRzEoZWEsbEUoWGEsJHIsIiIpKSYmKCJzcmMiIT09UWkmJiJ4bGluazpocmVmIiE9PVFpJiYiaHJlZiIhPT1RaXx8InNjcmlwdCI9PT1ncnx8MCE9PXBxZShYYSwiZGF0YToiKXx8IWhzW2dyXSkmJighb258fEcxKElyLGxFKFhhLCRyLCIiKSkpJiZYYSlyZXR1cm4hMTtyZXR1cm4hMH0s''@;'; put 'put ''cU49ZnVuY3Rpb24oZ3Ipe3JldHVybiJhbm5vdGF0aW9uLXhtbCIhPT1nciYmaTJlKGdyLHdpKX0sWE49ZnVuY3Rpb24oZ3Ipe0UzKEduLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxncixudWxsKTtjb25zdHthdHRyaWJ1dGVzOlFpfT1ncjtpZighUWl8fEU2KGdyKSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''WGE9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpOdCxmb3JjZUtlZXBBdHRyOnZvaWQgMH07bGV0IGRjPVFpLmxlbmd0aDtmb3IoO2RjLS07KXtjb25zdCBBMD1RaVtkY10se25hbWU6UnUsbmFtZXNwYWNlVVJJOlQxLHZhbHVlOlpofT1B''@;'; put 'put ''MCxzdj0kYShSdSksekE9Wmg7bGV0IGswPSJ2YWx1ZSI9PT1SdT96QTpncWUoekEpO2lmKFhhLmF0dHJOYW1lPXN2LFhhLmF0dHJWYWx1ZT1rMCxYYS5rZWVwQXR0cj0hMCxYYS5mb3JjZUtlZXBBdHRyPXZvaWQgMCxFMyhHbi51cG9uU2FuaXRpemVBdHRyaWJ1dGUsZ3IsWGEpLGswPVhhLmF0''@;'; put 'put ''dHJWYWx1ZSxaciYmKCJpZCI9PT1zdnx8Im5hbWUiPT09c3YpJiYodjAoUnUsZ3IpLGswPSJ1c2VyLWNvbnRlbnQtIitrMCkscHImJkcxKC8oKC0tIT98XSk+KXw8XC8oc3R5bGV8dGl0bGUpL2ksazApKXt2MChSdSxncik7Y29udGludWV9aWYoWGEuZm9yY2VLZWVwQXR0ciljb250aW51ZTtp''@;'; put 'put ''ZighWGEua2VlcEF0dHIpe3YwKFJ1LGdyKTtjb250aW51ZX1pZighYm4mJkcxKC9cLz4vaSxrMCkpe3YwKFJ1LGdyKTtjb250aW51ZX1wbiYmVE8oW2FpLF9pLE9uXSxKTj0+e2swPWxFKGswLEpOLCIgIil9KTtjb25zdCBrdz0kYShnci5ub2RlTmFtZSk7aWYoS04oa3csc3YsazApKXtpZih2''@;'; put 'put ''biYmIm9iamVjdCI9PXR5cGVvZiBFZSYmImZ1bmN0aW9uIj09dHlwZW9mIEVlLmdldEF0dHJpYnV0ZVR5cGUmJiFUMSlzd2l0Y2goRWUuZ2V0QXR0cmlidXRlVHlwZShrdyxzdikpe2Nhc2UiVHJ1c3RlZEhUTUwiOmswPXZuLmNyZWF0ZUhUTUwoazApO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlw''@;'; put 'put ''dFVSTCI6azA9dm4uY3JlYXRlU2NyaXB0VVJMKGswKX1pZihrMCE9PXpBKXRyeXtUMT9nci5zZXRBdHRyaWJ1dGVOUyhUMSxSdSxrMCk6Z3Iuc2V0QXR0cmlidXRlKFJ1LGswKSxFNihncik/WXQoZ3IpOnIyZShsLnJlbW92ZWQpfWNhdGNoe3YwKFJ1LGdyKX19ZWxzZSB2MChSdSxncil9RTMo''@;'; put 'put ''R24uYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMsZ3IsbnVsbCl9LG92PWZ1bmN0aW9uIGNvKGdyKXtsZXQgUWk9bnVsbDtjb25zdCBYYT1HTihncik7Zm9yKEUzKEduLmJlZm9yZVNhbml0aXplU2hhZG93RE9NLGdyLG51bGwpO1FpPVhhLm5leHROb2RlKCk7KUUzKEduLnVwb25TYW5pdGl6ZVNo''@;'; put 'put ''YWRvd05vZGUsUWksbnVsbCksJE4oUWkpLFhOKFFpKSxRaS5jb250ZW50IGluc3RhbmNlb2YgZiYmY28oUWkuY29udGVudCk7RTMoR24uYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSxncixudWxsKX07cmV0dXJuIGwuc2FuaXRpemU9ZnVuY3Rpb24oY28pe2xldCBncj1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sUWk9bnVsbCxYYT1udWxsLGRjPW51bGwsQTA9bnVsbDtpZihCbD0hY28sQmwmJihjbz0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIGNvJiYhZTUoY28pKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgY28udG9T''@;'; put 'put ''dHJpbmcpdGhyb3cgY0UoInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZihjbz1jby50b1N0cmluZygpKSl0aHJvdyBjRSgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFsLmlzU3VwcG9ydGVkKXJldHVybiBjbztpZihkcnx8QkEo''@;'; put 'put ''Z3IpLGwucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIGNvJiYoSW89ITEpLElvKXtpZihjby5ub2RlTmFtZSl7Y29uc3QgWmg9JGEoY28ubm9kZU5hbWUpO2lmKCFmYVtaaF18fHRyW1poXSl0aHJvdyBjRSgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXpl''@;'; put 'put ''ZCBpbi1wbGFjZSIpfX1lbHNlIGlmKGNvIGluc3RhbmNlb2YgTSlRaT1acygiXHgzYyEtLS0tXHgzZSIpLFhhPVFpLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShjbywhMCksMT09PVhhLm5vZGVUeXBlJiYiQk9EWSI9PT1YYS5ub2RlTmFtZXx8IkhUTUwiPT09WGEubm9kZU5hbWU/UWk9WGE6''@;'; put 'put ''UWkuYXBwZW5kQ2hpbGQoWGEpO2Vsc2V7aWYoIVpuJiYhcG4mJiEkbiYmLTE9PT1jby5pbmRleE9mKCI8IikpcmV0dXJuIHZuJiZOcj92bi5jcmVhdGVIVE1MKGNvKTpjbztpZihRaT1acyhjbyksIVFpKXJldHVybiBabj9udWxsOk5yP0NuOiIifVFpJiZVciYmWXQoUWkuZmlyc3RDaGlsZCk7''@;'; put 'put ''Y29uc3QgUnU9R04oSW8/Y286UWkpO2Zvcig7ZGM9UnUubmV4dE5vZGUoKTspJE4oZGMpLFhOKGRjKSxkYy5jb250ZW50IGluc3RhbmNlb2YgZiYmb3YoZGMuY29udGVudCk7aWYoSW8pcmV0dXJuIGNvO2lmKFpuKXtpZihzcilmb3IoQTA9Q3IuY2FsbChRaS5vd25lckRvY3VtZW50KTtRaS5m''@;'; put 'put ''aXJzdENoaWxkOylBMC5hcHBlbmRDaGlsZChRaS5maXJzdENoaWxkKTtlbHNlIEEwPVFpO3JldHVybihOdC5zaGFkb3dyb290fHxOdC5zaGFkb3dyb290bW9kZSkmJihBMD1tci5jYWxsKGQsQTAsITApKSxBMH1sZXQgVDE9JG4/UWkub3V0ZXJIVE1MOlFpLmlubmVySFRNTDtyZXR1cm4gJG4m''@;'; put 'put ''JmZhWyIhZG9jdHlwZSJdJiZRaS5vd25lckRvY3VtZW50JiZRaS5vd25lckRvY3VtZW50LmRvY3R5cGUmJlFpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZHMSh1MmUsUWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYoVDE9IjwhRE9DVFlQRSAiK1FpLm93bmVyRG9jdW1lbnQu''@;'; put 'put ''ZG9jdHlwZS5uYW1lKyI+XG4iK1QxKSxwbiYmVE8oW2FpLF9pLE9uXSxaaD0+e1QxPWxFKFQxLFpoLCIgIil9KSx2biYmTnI/dm4uY3JlYXRlSFRNTChUMSk6VDF9LGwuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7QkEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOnt9KSxkcj0hMH0sbC5jbGVhckNvbmZpZz1mdW5jdGlvbigpe3g2PW51bGwsZHI9ITF9LGwuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihjbyxncixRaSl7eDZ8fEJBKHt9KTtjb25zdCBYYT0kYShjbyksZGM9JGEoZ3IpO3JldHVybiBLTihYYSxkYyxRaSl9LGwuYWRkSG9v''@;'; put 'put ''az1mdW5jdGlvbihjbyxncil7ImZ1bmN0aW9uIj09dHlwZW9mIGdyJiZzRShHbltjb10sZ3IpfSxsLnJlbW92ZUhvb2s9ZnVuY3Rpb24oY28sZ3Ipe2lmKHZvaWQgMCE9PWdyKXtjb25zdCBRaT1ocWUoR25bY29dLGdyKTtyZXR1cm4tMT09PVFpP3ZvaWQgMDpmcWUoR25bY29dLFFpLDEpWzBd''@;'; put 'put ''fXJldHVybiByMmUoR25bY29dKX0sbC5yZW1vdmVIb29rcz1mdW5jdGlvbihjbyl7R25bY29dPVtdfSxsLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7R249e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9N''@;'; put 'put ''OltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSxsfSgp''@;'; put 'put ''O2Z1bmN0aW9uIHAyZShjKXtjb25zdCBsPWMubGVuZ3RoO2xldCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIGhFKGMpe2NvbnN0IGw9W107''@;'; put 'put ''aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBdLmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9''@;'; put 'put ''ZnVuY3Rpb24gcXUoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLHY9YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBNPWYubGVuZ3RoO2ZvcihkJiZNJiYoaCs9MSx2PWZbaF0pLGgrPTE7aDxNOyl2PWwodixmW2hdLGgsZiksaCs9MTtyZXR1cm4gdn1mdW5jdGlvbiBJ''@;'; put 'put ''bShjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspe2NvbnN0IE09ZFthXTtsKE0sYSxkKSYmKHYrPTEsZlt2XT1NKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uIGJzKGMsbCl7''@;'; put 'put ''bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl2Kz0xLGZbdl09bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBZbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJy''@;'; put 'put ''YXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gZzJlKGMpe3JldHVybiBxdShjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gSXFlKGMpe3JldHVybiBxdShjLChsLGEpPT5sPmE/''@;'; put 'put ''bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIFJxZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBMcWUoYyl7cmV0dXJuIGMubGVuZ3RoP2cyZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9u''@;'; put 'put ''IG0yZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bC5jb25jYXQoQXJyYXkuaXNBcnJheShhKT9tMmUoYSk6YSksW10pfWZ1bmN0aW9uIHYyZShjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEpfSksbH1mdW5jdGlvbiBjJCgpe2Zvcih2YXIg''@;'; put 'put ''Yz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIFluKGgsdj0+e2Y9Zi5maWx0ZXIoTT0+IXYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBPcWUoKXtmb3IodmFy''@;'; put 'put ''IGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PnYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBQcWUoKXtmb3IodmFy''@;'; put 'put ''IGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIFluKGgsdj0+e1luKHYsTT0+e2YuaGFzKE0pfHxmLmFkZChNKX0pfSksQXJyYXkuZnJvbShmKX1mdW5j''@;'; put 'put ''dGlvbiB1JChjKXtyZXR1cm4gYy5zcGxpdChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBnbChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFb''@;'; put 'put ''ZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIHF1KGMsKGYsdixNKT0+Zit2LnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhhW01dP2FbTV06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gbGMoYyl7bGV0IGw7c3dpdGNoKHR5cGVvZiBjKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9YCR7Y31g''@;'; put 'put ''O2JyZWFrO2Nhc2Uib2JqZWN0IjpsPW51bGw9PT1jPyIiOmMudG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0iIjticmVhaztkZWZhdWx0Omw9Yy50b1N0cmluZygpfXJldHVybiBsfWZ1bmN0aW9uIFBhKGMpe3JldHVybiB0eXBlb2YgYzwidSJ9ZnVuY3Rpb24gX2MoYyl7cmV0''@;'; put 'put ''dXJuIHR5cGVvZiBjPiJ1In1mdW5jdGlvbiBVYyhjKXtyZXR1cm4gbnVsbD09PWN8fCIiPT09Y3x8X2MoYyl9ZnVuY3Rpb24geTJlKGMpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWNvbnN0IGZFPSJsZW5ndGgiLHBFPWM9PnBh''@;'; put 'put ''cnNlSW50KGMsMTYpLGIyZT1jPT5wYXJzZUludChjLDEwKSxETz0oYyxsLGEpPT5jLnN1YnN0cihsLGEpLGdFPWM9PmMuY29kZVBvaW50QXQoMCktNjUsZCQ9Yz0+YCR7Y31gLnJlcGxhY2UoL1wtL2csIiIpLEZxZT1jPT5wRShETyhkJChjKSxwRSgiMTIiKSxnRSgiRiIpKSkvKHBFKERPKGQk''@;'; put 'put ''KGMpLGdFKCJCIiksfn4hW11bZkVdKSl8fDkpLEhxZT0oKT0+dHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpO2xl''@;'; put 'put ''dCBfMmU9ITE7Y29uc3QgdzJlPXtpbnZhbGlkOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsZXhwaXJlZDpj''@;'; put 'put ''PT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIFJl''@;'; put 'put ''bmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2FsZXNAaGFuZHNvbnRhYmxlLmNvbS5gfSxtaXNz''@;'; put 'put ''aW5nOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8g''@;'; put 'put ''dXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxu''@;'; put 'put ''b25fY29tbWVyY2lhbDooKT0+IiJ9LEMyZT17aW52YWxpZDooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwi''@;'; put 'put ''IHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJl''@;'; put 'put ''ZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gZ2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0u''@;'; put 'put ''IDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueVx4MjAK''@;'; put 'put ''ICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlv''@;'; put 'put ''dXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNv''@;'; put 'put ''bW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0IGluXHgyMAogICAgdGhlIGRvY3VtZW50YXRp''@;'; put 'put ''b24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBTMmUoYyxsKXtjb25zdCBhPSFVYyhjKSxkPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgYyYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWMudG9Mb3dlckNhc2UoKSxoPSIxNS4zLjAiO2xldCBmLHY9ImludmFsaWQiLE09ImludmFsaWQiO2NvbnN0IEk9ZnVuY3Rpb24gTnFlKGMpe2xldCBsPVtdW2ZFXSxhPWw7aWYoY1tmRV0hPT1nRSgiWiIpKXJldHVybiEx''@;'; put 'put ''O2ZvcihsZXQgZD0iIixoPSJCPEg0UCsiLnNwbGl0KCIiKSxmPWdFKGguc2hpZnQoKSk7ZjtmPWdFKGguc2hpZnQoKXx8IkEiKSktLWY8IiJbZkVdP2F8PShiMmUoYCR7YjJlKHBFKGQpKyhwRShETyhjLE1hdGguYWJzKGYpLDIpKStbXSkucGFkU3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjE6''@;'; put 'put ''ZD1ETyhjLGYsZj8xPT09aFtmRV0/OTo4OjYpO3JldHVybiBhPT09bH0oYz1kJChjfHwiIikpO2lmKGF8fGR8fEkpaWYoSSl7Y29uc3QgRz1PbygiMjkvMDQvMjAyNSIsIkREL01NL1lZWVkiKSxpZT1NYXRoLmZsb29yKEcudG9EYXRlKCkuZ2V0VGltZSgpLzg2NGU1KSx1ZT1GcWUoYyk7Zj1P''@;'; put 'put ''byg4NjRlNSoodWUrMSksIngiKS5mb3JtYXQoIk1NTU0gREQsIFlZWVkiKSxpZT51ZT8odj0iZXhwaXJlZCIsTT0iZXhwaXJlZCIpOih2PSJ2YWxpZCIsTT0idmFsaWQiKX1lbHNlIGQ/KHY9Im5vbl9jb21tZXJjaWFsIixNPSJ2YWxpZCIpOih2PSJpbnZhbGlkIixNPSJpbnZhbGlkIik7ZWxz''@;'; put 'put ''ZSB2PSJtaXNzaW5nIixNPSJtaXNzaW5nIjtpZihIcWUoKSYmKHY9InZhbGlkIixNPSJ2YWxpZCIpLCFfMmUmJiJ2YWxpZCIhPT12JiYodzJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSYmY29uc29sZVsibm9uX2NvbW1lcmNpYWwiPT09dj8iaW5mbyI6Indhcm4iXSh3''@;'; put 'put ''MmVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKSxfMmU9ITApLCJ2YWxpZCIhPT1NJiZsLnBhcmVudE5vZGUmJkMyZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpe2NvbnN0IGllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2llLmNsYXNz''@;'; put 'put ''TmFtZT0iaGFuZHNvbnRhYmxlIGhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIsaWUuaW5uZXJIVE1MPUMyZVtNXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSksbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpZSxsLm5leHRTaWJsaW5nKX19ZnVuY3Rpb24gcDEoYyl7cmV0dXJu''@;'; put 'put ''IGNbMF0udG9VcHBlckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBWcWUoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3RoO2Zvcig7aDspe2gtPTE7Y29uc3Qg''@;'; put 'put ''Zj1sYyhhW2hdKS50b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBoJCgpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmlu''@;'; put 'put ''ZygxKX1yZXR1cm4gYygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIGYkKGMpe3JldHVybi9eKFswLTldWzAtOV0/JSQpfCheMTAwJSQpLy50ZXN0KGMpfWZ1bmN0aW9uIHAkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTty''@;'; put 'put ''ZXR1cm5gJHtjfWAucmVwbGFjZSgvKD86XFwpP1xbKFteW1xdXSspXS9nLChhLGQpPT4iXFwiPT09YS5jaGFyQXQoMCk/YS5zdWJzdHIoMSxhLmxlbmd0aC0xKTp2b2lkIDA9PT1sW2RdPyIiOmxbZF0pfWZ1bmN0aW9uIGckKGMpe3JldHVybiBJTyhgJHtjfWAse0FMTE9XRURfVEFHUzpbXX0p''@;'; put 'put ''fWZ1bmN0aW9uIElPKGMsbCl7cmV0dXJuIERxZS5zYW5pdGl6ZShjLGwpfWNvbnN0IE43PWM9PlsidGFiaW5kZXgiLGNdLEtxZT0oKT0+WyJyb2xlIiwiY2hlY2tib3giXSxtRT1jPT5bImFyaWEtbGFiZWwiLGNdLFY3PSgpPT5bImFyaWEtaGlkZGVuIiwidHJ1ZSJdLEUyZT1jPT5bImFyaWEt''@;'; put 'put ''aGFzcG9wdXAiLGNdLFQyZT1jPT5bImFyaWEtcm93Y291bnQiLGNdLFJPPWM9PlsiYXJpYS1jb2xjb3VudCIsY10sQTJlPWM9PlsiYXJpYS1yb3dpbmRleCIsY10sdiQ9Yz0+WyJhcmlhLWNvbGluZGV4IixjXSxOMj1jPT5bImFyaWEtZXhwYW5kZWQiLGNdLGsyZT0oKT0+WyJhcmlhLXJlYWRv''@;'; put 'put ''bmx5IiwidHJ1ZSJdLEQyZT0oKT0+WyJhcmlhLWludmFsaWQiLCJ0cnVlIl0sSTJlPWM9PlsiYXJpYS1jaGVja2VkIixjXSxyWGU9Yz0+WyJhcmlhLWNvbnRyb2xzIixjXSxhWGU9Yz0+WyJhcmlhLWxpdmUiLGNdLG9YZT1jPT5bImFyaWEtcmVsZXZhbnQiLGNdLHNYZT1jPT5bImFyaWEtc2V0''@;'; put 'put ''c2l6ZSIsY10sbFhlPWM9PlsiYXJpYS1wb3NpbnNldCIsY107ZnVuY3Rpb24gUjJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZD1udWxsLGg9Yztmb3IoO251bGwhPT1oOyl7aWYoYT09PWwpe2Q9aDticmVh''@;'; put 'put ''a31oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aD1oLmhvc3Q6KGErPTEsaD1oLnBhcmVudE5vZGUpfXJldHVybiBkfWZ1bmN0aW9uIHZFKGMsbCl7Y29uc3QgYT1jLmNsb3Nlc3QoIi5oYW5kc29udGFibGUiKTtyZXR1cm4hIWEmJihhLnBhcmVudE5v''@;'; put 'put ''ZGU9PT1sfHxhPT09bCl9ZnVuY3Rpb24gTDJlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBCNyhjKXtyZXR1cm4gTDJlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBjWGUoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90''@;'; put 'put ''eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIFJtKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5U''@;'; put 'put ''X0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQgZj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2RlVHlwZTp2LG5vZGVOYW1lOk19PWY7aWYodj09PWQmJihsLmluY2x1ZGVzKE0pfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0Okl9PWY7Zj1JJiZ2PT09aD9JOmYu''@;'; put 'put ''cGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB5RShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zvcig7aCYmKGg9Um0oaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05P''@;'; put 'put ''REU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25zdCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1bmN0aW9uIE8yZShjLGwpe2NvbnN0IGE9e2VsZW1lbnQ6dm9pZCAwLGNsYXNzTmFtZXM6W119O2xldCBkPWM7Zm9yKDtudWxsIT09ZCYmZCE9PWMub3duZXJEb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQmJiFhLmVsZW1lbnQ7KXtpZigic3RyaW5nIj09dHlwZW9mIGwmJmQuY2xhc3NMaXN0LmNvbnRhaW5zKGwpKWEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKGwpO2Vsc2UgaWYobCBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgaD1BcnJheS5mcm9tKGQuY2xhc3NMaXN0''@;'; put 'put ''KS5maWx0ZXIoZj0+bC50ZXN0KGYpKTtoLmxlbmd0aCYmKGEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKC4uLmgpKX1kPWQucGFyZW50RWxlbWVudH1yZXR1cm4gYX1mdW5jdGlvbiBMbShjLGwpe2xldCBhPWMucGFyZW50Tm9kZSxkPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGw/ZD1B''@;'; put 'put ''cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRlZmF1bHRWaWV3P2MucXVlcnlTZWxlY3RvckFsbChsKTpjLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChsKSwwKTpkLnB1c2gobCk7bnVsbCE9PWE7KXtpZihkLmluZGV4T2YoYSk+LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9''@;'; put 'put ''cmV0dXJuITF9ZnVuY3Rpb24gUDJlKGMpe2xldCBsPTAsYT1jO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7YT1hLnByZXZpb3VzU2libGluZzspbCs9MTtyZXR1cm4gbH1mdW5jdGlvbiBPbShjLGwsYSl7Y29uc3QgZD1hLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25l''@;'; put 'put ''XyR7Y31gKTtyZXR1cm4gZD9kLmNvbnRhaW5zKGwpOm51bGx9ZnVuY3Rpb24gRjJlKGMpe3JldHVybiBjJiZjLmxlbmd0aD9jLmZpbHRlcihsPT4hIWwpOltdfWZ1bmN0aW9uIEgyZShjLGwpe2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuIGw/e3JlZ2V4RnJlZTpbXSxyZWdleGVzOltdfTpbXTtj''@;'; put 'put ''b25zdCBhPVtdLGQ9W107cmV0dXJuIGQucHVzaCguLi5jLmZpbHRlcihoPT57Y29uc3QgZj1oIGluc3RhbmNlb2YgUmVnRXhwO3JldHVybiBmJiZsJiZhLnB1c2goaCksIWZ9KSksbD97cmVnZXhGcmVlOmQscmVnZXhlczphfTpkfWZ1bmN0aW9uIHBvKGMsbCl7cmV0dXJuIHZvaWQgMCE9PWMu''@;'; put 'put ''Y2xhc3NMaXN0JiYic3RyaW5nIj09dHlwZW9mIGwmJiIiIT09bCYmYy5jbGFzc0xpc3QuY29udGFpbnMobCl9ZnVuY3Rpb24gVGkoYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9RjJlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QuYWRkKC4uLmwpfWZ1bmN0''@;'; put 'put ''aW9uIGxvKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7bGV0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09SDJlKGwsITApO2E9RjJlKGEpLGEubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LnJlbW92ZSguLi5hKSxkLmZvckVh''@;'; put 'put ''Y2goaD0+e2MuY2xhc3NMaXN0LmZvckVhY2goZj0+e2gudGVzdChmKSYmYy5jbGFzc0xpc3QucmVtb3ZlKGYpfSl9KX1mdW5jdGlvbiB2byhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjI/YXJndW1lbnRzWzJdOnZvaWQgMDtBcnJheS5pc0FycmF5KGwpfHwobD1bW2wsYV1dKSxsLmZvckVhY2goZD0+e0FycmF5LmlzQXJyYXkoZCkmJiIiIT09ZFswXSYmYy5zZXRBdHRyaWJ1dGUoLi4uZCl9KX1mdW5jdGlvbiBqNyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7Y29uc3R7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1IMmUobCwhMCk7YS5mb3JFYWNoKGg9PnsiIiE9PWgmJmMucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKGgpfSksZC5mb3JFYWNoKGg9PntjLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLnJlbW92ZUF0dHJpYnV0ZShmKX0pfSl9ZnVuY3Rpb24gYiQoYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2Ug''@;'; put 'put ''aWYoWyJUQUJMRSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pYiQobFthXSl9fWZ1bmN0aW9uIHhwKGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGls''@;'; put 'put ''ZDspYy5yZW1vdmVDaGlsZChsKX1jb25zdCBOMmU9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gejcoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO04yZS50ZXN0KGwpP2MuaW5uZXJIVE1MPWE/SU8obCk6bDpQ''@;'; put 'put ''bShjLGwpfWZ1bmN0aW9uIFBtKGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooeHAoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobCkpKX1mdW5jdGlv''@;'; put 'put ''biBVNyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QhPT1sOyl7aWYobnVsbD09PWQpcmV0dXJuITE7aWYoZC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7''@;'; put 'put ''aWYoZC5ob3N0KXtpZihkLmhvc3QuaW1wbClyZXR1cm4gVTcoZC5ob3N0LmltcGwpO2lmKGQuaG9zdClyZXR1cm4gVTcoZC5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZigibm9uZSI9PT1hLmdldENvbXB1dGVkU3R5bGUo''@;'; put 'put ''ZCkuZGlzcGxheSlyZXR1cm4hMTtkPWQucGFyZW50Tm9kZX1yZXR1cm4hMH1mdW5jdGlvbiBWMmUoYyl7Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QucGFyZW50Tm9kZTspe2lmKCIwcHgiPT09ZC5zdHlsZS5oZWlnaHR8fCIwIj09PWQuc3R5bGUu''@;'; put 'put ''aGVpZ2h0KXJldHVybiJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLm92ZXJmbG93O2Q9ZC5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIFUwKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLHYsTSxo''@;'; put 'put ''PWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LHY9aC5vZmZzZXRUb3AsTT1oOyhoPWgub2Zmc2V0UGFyZW50KSYmaCE9PWwuYm9keSYmIm9mZnNldExlZnQiaW4gaDspZis9aC5vZmZzZXRMZWZ0LHYrPWgub2Zmc2V0VG9wLE09aDtyZXR1cm4gTSYmImZpeGVkIj09PU0uc3R5bGUucG9zaXRpb24mJihm''@;'; put 'put ''Kz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsdis9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYsdG9wOnZ9fWZ1bmN0aW9uIF8kKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9s''@;'; put 'put ''bFl9ZnVuY3Rpb24gTE8oKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBPTyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu''@;'; put 'put ''dHNbMV06d2luZG93O3JldHVybiBjPT09bD9fJChsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiB3JChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9MTyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rp''@;'; put 'put ''b24gYkUoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3VtZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYm''@;'; put 'put ''bC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1oLnN0eWxlO2lmKFtmLHYsTV0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxk''@;'; put 'put ''LmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKE0pfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxIZWlnaHQrMSYmKGQuaW5jbHVkZXMoTSl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKHYpfHxkLmluY2x1''@;'; put 'put ''ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBCMmUoYyl7cmV0dXJuIGMuc2Nyb2xsSGVpZ2h0LWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIGoyZShjKXtyZXR1cm4gYy5zY3JvbGxXaWR0aC1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIGFfKGMpe2NvbnN0''@;'; put 'put ''IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldztsZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21w''@;'; put 'put ''dXRlZFN0eWxlKGQpLGY9WyJzY3JvbGwiLCJoaWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93IiksTT1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxJPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKGYuaW5jbHVkZXModil8fGYu''@;'; put 'put ''aW5jbHVkZXMoTSl8fGYuaW5jbHVkZXMoSSkpcmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gX0UoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93O2lmKCFjKXJldHVybjtpZihjPT09''@;'; put 'put ''YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlubmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHthLmlubmVySGVpZ2h0fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShjKTtyZXR1''@;'; put 'put ''cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lkIDB9ZnVuY3Rpb24gdVhlKGMsbCl7Y29uc3R7c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1Nl''@;'; put 'put ''bGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEpKSksZH1mdW5jdGlvbiBzdShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aH1mdW5jdGlvbiB4dShjKXtyZXR1cm4gYy5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gb18oYyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0''@;'; put 'put ''fWZ1bmN0aW9uIEMkKGMpe3JldHVybiBjLmNsaWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24gZFhlKGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBoWGUoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFMkKGMpe3Jl''@;'; put 'put ''dHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2VsZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiB6MmUoYyl7cmV0dXJuIGMuc2VsZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gZlhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9jdW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9uP2E9Yy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYiQ29udHJvbCIhPT1sLnNlbGVjdGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp''@;'; put 'put ''LnRleHQpLGF9ZnVuY3Rpb24gTSQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYoYy5nZXRTZWxlY3Rpb24oKS5lbXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxl''@;'; put 'put ''Y3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1bmN0aW9uIHdFKGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNlbGVjdGlvblJhbmdlKXtjLmZvY3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRj''@;'; put 'put ''aHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWguc3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixjLnNldFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9fX1sZXQgeCQsbF87ZnVuY3Rpb24gZjAoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PXgkJiYoeCQ9ZnVuY3Rpb24gcFhlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAwcHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEu''@;'; put 'put ''c3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgiLGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCku''@;'; put 'put ''YXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9mZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGg9bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxkLWh9KGMp''@;'; put 'put ''KSx4JH1mdW5jdGlvbiBFJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0PmMuaW5uZXJIZWlnaHQ6Yy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5k''@;'; put 'put ''b2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPmMuaW5uZXJXaWR0aDpjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIFBPKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBnWGUoYyl7bGV0IGw7cmV0dXJuIGMu''@;'; put 'put ''c3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rpb24gQ0UoYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gU0UoYyl7cmV0dXJu''@;'; put 'put ''IGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gRk8oYyl7cmV0dXJuIFNFKGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIG1Y''@;'; put 'put ''ZShjKXtGTyhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBVMmUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3Rp''@;'; put 'put ''bmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxoLnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIGskKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVu''@;'; put 'put ''dHNbMV0sYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGQ9Yy5vd25lckRvY3VtZW50LGg9ZC5jcmVhdGVSYW5nZSgpLGY9ZC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTt2byhjLCJjb250ZW50ZWRpdGFibGUiLCEw''@;'; put 'put ''KSxhJiZ2byhjLC4uLlY3KCkpLGwmJlRpKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGguc2VsZWN0Tm9kZUNvbnRlbnRzKGMpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShoKX1mdW5jdGlvbiBEJChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO2MuaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZjLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxhLnJlbW92ZUFsbFJhbmdlcygpLGwmJmxvKGMs''@;'; put 'put ''ImludmlzaWJsZVNlbGVjdGlvbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5jdGlvbiBaMmUoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2skKGMsYSksbCgpLEQkKGMsYSl9ZnVu''@;'; put 'put ''Y3Rpb24gRXAoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT1jfHxudWxsPT09KGw9Yy5vd25lckRvY3VtZW50KXx8dm9pZCAwPT09bD92b2lkIDA6bC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGEmJm51bGwhPT1hJiZjIGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gbWwoYyl7cmV0dXJuImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gVzJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7''@;'; put 'put ''Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksST0wO0k8djtJKyspTVtJXT1hcmd1bWVudHNbSV07Y29uc3QgRz1EYXRlLm5vdygpO2xldCBpZT0hMTtkLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPUcsaWU9ITApO2NvbnN0IHVlPWwtKEctYSk7cmV0dXJuIGll''@;'; put 'put ''PyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSxhPTAsaD12b2lkIDB9LHVlKSksZH19ZnVuY3Rpb24gdlhlKGMpe2xldCBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPVcyZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gdigpe2Zvcih2YXIgTT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLEk9bmV3IEFycmF5KE0pLEc9MDtHPE07RysrKUlbR109YXJndW1lbnRzW0ddO3JldHVybiBoPyhoLT0xLGMuYXBwbHkodGhpcyxJKSk6ZC5hcHBseSh0aGlzLEkpfXJldHVybiB2LmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSx2fWZ1bmN0aW9uIE1FKGMpe2xldCBk''@;'; put 'put ''LGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1''@;'; put 'put ''cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLHYpfSxsKSxkfX1mdW5jdGlvbiB5WGUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhd''@;'; put 'put ''PWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksST0wO0k8djtJKyspTVtJXT1hcmd1bWVudHNbSV07cmV0dXJuIHF1KGgsKEcsaWUpPT5pZShHKSxkLmFwcGx5KHRoaXMsTSkpfX1mdW5jdGlvbiBJJChjKXtmb3IodmFyIGw9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJu''@;'; put 'put ''IGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9fWZ1bmN0aW9uIFkyZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1l''@;'; put 'put ''bnRzW01dO2NvbnN0IEk9ZC5jb25jYXQodik7bGV0IEc7cmV0dXJuIEc9SS5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEkpOmEoSSksR319KFtdKX1mdW5jdGlvbiBiWGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBJPWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgRztyZXR1cm4gRz1JLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsSSk6YShJKSxHfX0oW10pfWZ1bmN0aW9uIEhPKGMsbCxh''@;'; put 'put ''LGQsaCxmLHYsTSl7cmV0dXJuIFBhKE0pP2MuY2FsbChsLGEsZCxoLGYsdixNKTpQYSh2KT9jLmNhbGwobCxhLGQsaCxmLHYpOlBhKGYpP2MuY2FsbChsLGEsZCxoLGYpOlBhKGgpP2MuY2FsbChsLGEsZCxoKTpQYShkKT9jLmNhbGwobCxhLGQpOlBhKGEpP2MuY2FsbChsLGEpOmMuY2FsbChs''@;'; put 'put ''KX1mdW5jdGlvbiBzXyhjKXtsZXQgbDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBBcnJheShjLmxlbmd0aCkuZmlsbChudWxsKTpbXToobD17fSxYbyhjLChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXku''@;'; put 'put ''aXNBcnJheShhKT9zXyhhKTpBcnJheS5pc0FycmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFbMF0mJiFBcnJheS5pc0FycmF5KGFbMF0pP1tzXyhhWzBdKV06W106bnVsbCl9KSksbH1mdW5jdGlvbiBHMmUoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxj''@;'; put 'put ''LnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gRXUoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4gWG8obCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24geEUoYyxsKXtY''@;'; put 'put ''byhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSx4RShjW2RdLGxbZF0pKTpjW2RdPWxbZF19''@;'; put 'put ''KX1mdW5jdGlvbiBnMShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBuMyhjKXtjb25zdCBsPXt9O3JldHVybiBYbyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiBUbChjKXtjLk1JWElOU3x8KGMuTUlYSU5T''@;'; put 'put ''PVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIFluKGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxYbyhoLChmLHYpPT57aWYodm9pZCAwIT09Yy5wcm90b3R5''@;'; put 'put ''cGVbdl0pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7dn0nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVt2XT1mO2Vsc2V7Y29uc3QgST1mdW5jdGlvbihpZSl7''@;'; put 'put ''Y29uc3QgdWU9YF8ke2llfWA7cmV0dXJuIGZ1bmN0aW9uKHllKXt0aGlzW3VlXT15ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSx2LHtnZXQ6ZnVuY3Rpb24oaWUsdWUpe2NvbnN0IHllPWBfJHtpZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlz''@;'; put 'put ''W3llXSYmKHRoaXNbeWVdPShqZT0+e2xldCBxZT1qZTtyZXR1cm4oQXJyYXkuaXNBcnJheShxZSl8fHFvKHFlKSkmJihxZT1nMShxZSkpLHFlfSkodWUpKSx0aGlzW3llXX19KHYsZiksc2V0OkkodiksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIE5PKGMsbCl7cmV0dXJuIEpT''@;'; put 'put ''T04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gcW8oYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gVHAoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRh''@;'; put 'put ''YmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwsZCl9ZnVuY3Rpb24gWG8oYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uICQyZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIFhvKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9''@;'; put 'put ''PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gVk8oYyxsLGEpe2lmKCJzdHJpbmciIT10eXBlb2YgbClyZXR1cm47Y29uc3QgZD1sLnNwbGl0KCIuIik7bGV0IGg9YztkLmZvckVhY2goKGYsdik9PnsiX19wcm90b19fIj09PWZ8fCJjb25zdHJ1Y3RvciI9PT1mfHwicHJvdG90''@;'; put 'put ''eXBlIj09PWZ8fCh2IT09ZC5sZW5ndGgtMT8oVHUoaCxmKXx8KGhbZl09e30pLGg9aFtmXSk6aFtmXT1hKX0pfWZ1bmN0aW9uIEJPKGMpe2lmKCFxbyhjKSlyZXR1cm4gMDtjb25zdCBsPWZ1bmN0aW9uKGEpe2xldCBkPTA7cmV0dXJuIHFvKGEpP1hvKGEsKGgsZik9PnsiX19jaGlsZHJlbiIh''@;'; put 'put ''PT1mJiYoZCs9bChoKSl9KTpkKz0xLGR9O3JldHVybiBsKGMpfWZ1bmN0aW9uIEZkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToidmFsdWUiO2NvbnN0IGE9YF8ke2x9YCxkPXtfdG91Y2hlZDohMSxbYV06Yyxpc1RvdWNo''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZH19O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe3RoaXMuX3RvdWNoZWQ9ITAsdGhpc1thXT1ofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGR9ZnVuY3Rpb24gVHUo''@;'; put 'put ''YyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbCl9ZnVuY3Rpb24gRUUoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gVEUoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIFIk''@;'; put 'put ''KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9ZnVuY3Rpb24gSzJlKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUifWZ1bmN0aW9uIHEyZShjKXtyZXR1cm4gbF98fChsXz0ib2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsbF8pfWIoOTU0OTMp''@;'; put 'put ''O2NvbnN0IFYyPWM9Pntjb25zdCBsPXt2YWx1ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTtyZXR1cm4gbH0seWc9e2Nocm9tZTpWMigoYyxsKT0+L0Nocm9tZS8udGVzdChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OlYyKGM9Pi9DcmlPUy8udGVzdChjKSks''@;'; put 'put ''ZWRnZTpWMihjPT4vRWRnZS8udGVzdChjKSksZWRnZVdlYktpdDpWMihjPT4vRWRnaU9TLy50ZXN0KGMpKSxmaXJlZm94OlYyKGM9Pi9GaXJlZm94Ly50ZXN0KGMpKSxmaXJlZm94V2ViS2l0OlYyKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOlYyKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9u''@;'; put 'put ''ZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOlYyKChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYvQXBwbGUgQ29tcHV0ZXIvLnRlc3QobCkpfSxjXz17bWFjOlYyKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46VjIoYz0+L15XaW4vLnRl''@;'; put 'put ''c3QoYykpLGxpbnV4OlYyKGM9Pi9eTGludXgvLnRlc3QoYykpLGlvczpWMihjPT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBYMmUoKXtsZXR7dXNlckFnZW50OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307WG8oeWcsYT0+e2xldHt0ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24gSjJlKCl7bGV0e3BsYXRmb3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06e307WG8oY18sbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9uIEwkKCl7cmV0dXJuIHlnLmNocm9tZS52YWx1ZX1mdW5jdGlvbiBRMmUoKXtyZXR1cm4geWcuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGpPKCl7cmV0dXJuIHlnLmZpcmVm''@;'; put 'put ''b3gudmFsdWV9ZnVuY3Rpb24gZWZlKCl7cmV0dXJuIHlnLmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24gQUUoKXtyZXR1cm4geWcuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIHRmZSgpe3JldHVybiB5Zy5lZGdlLnZhbHVlfWZ1bmN0aW9uIF9YZSgpe3JldHVybiB5Zy5lZGdlV2ViS2l0LnZh''@;'; put 'put ''bHVlfWZ1bmN0aW9uIEFwKCl7cmV0dXJuIHlnLm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBPJCgpe3JldHVybiBjXy5pb3MudmFsdWV9ZnVuY3Rpb24gUCQoKXtsZXR7bWF4VG91Y2hQb2ludHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd''@;'; put 'put ''Om5hdmlnYXRvcjtyZXR1cm4gYz4yJiZjXy5tYWMudmFsdWV9ZnVuY3Rpb24gRiQoKXtyZXR1cm4gY18ud2luLnZhbHVlfWZ1bmN0aW9uIHpPKCl7cmV0dXJuIGNfLm1hYy52YWx1ZX1mdW5jdGlvbiB3WGUoKXtyZXR1cm4gY18ubGludXgudmFsdWV9SzJlKCkmJihYMmUoKSxKMmUoKSk7Y29u''@;'; put 'put ''c3QgWWE9e0FMVDoxOCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpqTygpPzE4MjoxNzQsQVVESU9fTVVURTpqTygpPzE4MToxNzMsQVVESU9fVVA6ak8oKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxD''@;'; put 'put ''T01NQToxODgsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTks''@;'; put 'put ''Rjk6MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFfUExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RP''@;'; put 'put ''UDoxNzgsTlVMTDowLE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxGOjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODks''@;'; put 'put ''Wjo5MH0sQ1hlPVtZYS5BTFQsWWEuQVJST1dfRE9XTixZYS5BUlJPV19MRUZULFlhLkFSUk9XX1JJR0hULFlhLkFSUk9XX1VQLFlhLkFVRElPX0RPV04sWWEuQVVESU9fTVVURSxZYS5BVURJT19VUCxZYS5CQUNLU1BBQ0UsWWEuQ0FQU19MT0NLLFlhLkRFTEVURSxZYS5FTkQsWWEuRU5URVIs''@;'; put 'put ''WWEuRVNDQVBFLFlhLkYxLFlhLkYyLFlhLkYzLFlhLkY0LFlhLkY1LFlhLkY2LFlhLkY3LFlhLkY4LFlhLkY5LFlhLkYxMCxZYS5GMTEsWWEuRjEyLFlhLkYxMyxZYS5GMTQsWWEuRjE1LFlhLkYxNixZYS5GMTcsWWEuRjE4LFlhLkYxOSxZYS5IT01FLFlhLklOU0VSVCxZYS5NRURJQV9ORVhU''@;'; put 'put ''LFlhLk1FRElBX1BMQVlfUEFVU0UsWWEuTUVESUFfUFJFVixZYS5NRURJQV9TVE9QLFlhLk5VTEwsWWEuTlVNX0xPQ0ssWWEuUEFHRV9ET1dOLFlhLlBBR0VfVVAsWWEuUEFVU0UsWWEuU0NST0xMX0xPQ0ssWWEuU0hJRlQsWWEuVEFCXTtmdW5jdGlvbiBuZmUoYyl7cmV0dXJuIDMyPT09Y3x8''@;'; put 'put ''Yz49NDgmJmM8PTU3fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIEgkKGMpe3JldHVybiBDWGUuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gU1hlKGMpe2NvbnN0IGw9W107cmV0dXJuIHpPKCk/bC5wdXNo''@;'; put 'put ''KFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5EX1JJR0hULFlhLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKFlhLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gcmZlKGMpe3JldHVybltZYS5DT05UUk9MLFlhLkNPTU1BTkRfTEVGVCxZYS5DT01NQU5EX1JJR0hULFlhLkNPTU1BTkRf''@;'; put 'put ''RklSRUZPWF0uaW5jbHVkZXMoYyl9ZnVuY3Rpb24gdV8oYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gWW4oYSxoPT57aWYoYz09PVlhW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiBCMihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSEx''@;'; put 'put ''LGMuY2FuY2VsQnViYmxlPSEwfWZ1bmN0aW9uIEZtKGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBIbShjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIFVPKGMpe3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gaWZlKGMpe3Jl''@;'; put 'put ''dHVybiBjIGluc3RhbmNlb2YgVG91Y2hFdmVudH1mdW5jdGlvbiBhZmUoYyxsKXtjb25zdCBhPXt4OmMub2Zmc2V0WCx5OmMub2Zmc2V0WX07bGV0IGQ9Yy50YXJnZXQ7aWYoIUVwKGwpfHxkIT09bCYmZC5jb250YWlucyhsKSlyZXR1cm4gYTtmb3IoO2QhPT1sOylhLngrPWQub2Zmc2V0TGVm''@;'; put 'put ''dCxhLnkrPWQub2Zmc2V0VG9wLGQ9ZC5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9ZnVuY3Rpb24gaWwoKXtQYShjb25zb2xlKSYmY29uc29sZS53YXJuKC4uLmFyZ3VtZW50cyl9ZnVuY3Rpb24gTiQoKXtQYShjb25zb2xlKSYmY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpfWNvbnN0IFo3PVsi''@;'; put 'put ''YWZ0ZXJDZWxsTWV0YVJlc2V0IiwiYWZ0ZXJDaGFuZ2UiLCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIiwiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIiwiYWZ0ZXJD''@;'; put 'put ''b250ZXh0TWVudUhpZGUiLCJiZWZvcmVDb250ZXh0TWVudVNob3ciLCJhZnRlckNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29weUxpbWl0IiwiYmVmb3JlQ3JlYXRlQ29sIiwiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsImFmdGVyQ3JlYXRlQ29sIiwiYmVmb3JlQ3JlYXRlUm93IiwiYWZ0''@;'; put 'put ''ZXJDcmVhdGVSb3ciLCJhZnRlckRlc2VsZWN0IiwiYWZ0ZXJEZXN0cm95IiwiYWZ0ZXJEb2N1bWVudEtleURvd24iLCJhZnRlckRyYXdTZWxlY3Rpb24iLCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0''@;'; put 'put ''ZXJHZXRDb2xIZWFkZXIiLCJhZnRlckdldFJvd0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEiLCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0''@;'; put 'put ''ZXJPbkNlbGxNb3VzZURvd24iLCJhZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0''@;'; put 'put ''ZXJSZW5kZXJlciIsImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsIiwiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCJhZnRlclNjcm9s''@;'; put 'put ''bFZlcnRpY2FsbHkiLCJhZnRlclNjcm9sbCIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNlbGVjdENvbHVtbnMiLCJhZnRl''@;'; put 'put ''clNlbGVjdENvbHVtbnMiLCJiZWZvcmVTZWxlY3RSb3dzIiwiYWZ0ZXJTZWxlY3RSb3dzIiwiYWZ0ZXJTZXRDZWxsTWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwi''@;'; put 'put ''LCJhZnRlclNldFRoZW1lIiwiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIsImFmdGVyQXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVmb3JlQ2hh''@;'; put 'put ''bmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJl''@;'; put 'put ''Zm9yZUtleURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJv''@;'; put 'put ''dyIsImJlZm9yZVZpZXdSZW5kZXIiLCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEiLCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdl''@;'; put 'put ''U3RhcnRPbmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJlZm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlm''@;'; put 'put ''eUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwi''@;'; put 'put ''bW9kaWZ5U291cmNlRGF0YSIsIm1vZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1u''@;'; put 'put ''SGVhZGVyIiwicGVyc2lzdGVudFN0YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1''@;'; put 'put ''dCIsImFmdGVyQ3V0IiwiYmVmb3JlQ29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXpl''@;'; put 'put ''IiwiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJh''@;'; put 'put ''ZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJl''@;'; put 'put ''bW92ZWQiLCJhZnRlclNoZWV0QWRkZWQiLCJhZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVkIiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZvcmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRv''@;'; put 'put ''IiwiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLCJiZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQi''@;'; put 'put ''LCJtb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxj''@;'; put 'put ''dWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0ZXJIaWRlUm93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJhZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRlQ29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVD''@;'; put 'put ''b2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5zIiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJlZm9yZVVudHJpbVJvdyIsImFmdGVyVW50cmltUm93IiwiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlk''@;'; put 'put ''ZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJBZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJEZXRhY2hDaGlsZCIsImJlZm9yZUJlZ2luRWRpdGluZyIsImFmdGVyQmVnaW5FZGl0aW5nIiwiYmVmb3JlTWVyZ2VDZWxscyIsImFmdGVyTWVyZ2VDZWxscyIsImJlZm9yZVVubWVy''@;'; put 'put ''Z2VDZWxscyIsImFmdGVyVW5tZXJnZUNlbGxzIiwiYWZ0ZXJMaXN0ZW4iLCJhZnRlclVubGlzdGVuIiwiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLCJhZnRlckNvbHVtbkNvbGxhcHNlIiwiYmVmb3JlQ29s''@;'; put 'put ''dW1uRXhwYW5kIiwiYWZ0ZXJDb2x1bW5FeHBhbmQiLCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiXSxWJD1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2RpZnlDb2wiLCI4LjAuMCJdLFsi''@;'; put 'put ''c2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxbImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSksQiQ9bmV3IE1hcChbW11dKTtmdW5jdGlvbiBqJChjLGwsYSl7b2ZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBvZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHNmZShjLGwsYSl7cmV0dXJuIGMuc2V0KFpPKGMsbCksYSksYX1mdW5jdGlvbiBaMChjLGwpe3JldHVybiBjLmdldChaTyhjLGwp''@;'; put 'put ''KX1mdW5jdGlvbiBaTyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9YigyMzAx''@;'; put 'put ''MiksYig4MTI2MCk7dmFyIERoPW5ldyBXZWFrTWFwLGRfPW5ldyBXZWFrTWFwLHokPW5ldyBXZWFrTWFwLFUkPW5ldyBXZWFrU2V0O2NsYXNzIGxmZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBNWGUoYyxsKXtvZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsVSQpLGokKHRoaXMsRGgsbmV3IE1h''@;'; put 'put ''cCksaiQodGhpcyxkXyxuZXcgTWFwKSxqJCh0aGlzLHokLG5ldyBTZXQpLFo3LmZvckVhY2gobD0+Wk8oVSQsdGhpcyxjZmUpLmNhbGwodGhpcyxsKSl9Z2V0SG9va3MobCl7dmFyIGE7cmV0dXJuIG51bGwhPT0oYT1aMChEaCx0aGlzKS5nZXQobCkpJiZ2b2lkIDAhPT1hP2E6W119YWRkKGws''@;'; put 'put ''YSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O1owKERoLHRoaXMpLmhhcyhsKXx8KFpPKFUkLHRoaXMsY2ZlKS5jYWxsKHRoaXMsbCksWjcucHVzaChsKSk7Y29uc3QgaD1aMChEaCx0aGlzKS5nZXQobCk7aWYoaC5maW5k''@;'; put 'put ''KEc9PkcuY2FsbGJhY2s9PT1hKSlyZXR1cm47Y29uc3QgZj1OdW1iZXIuaXNJbnRlZ2VyKGQub3JkZXJJbmRleCk/ZC5vcmRlckluZGV4OjAsdj0hIWQucnVuT25jZSxNPSEhZC5pbml0aWFsSG9vaztsZXQgST0hMTtpZihNKXtjb25zdCBHPWguZmluZChpZT0+aWUuaW5pdGlhbEhvb2spO0cm''@;'; put 'put ''JihHLmNhbGxiYWNrPWEsST0hMCl9aWYoIUkpe2gucHVzaCh7Y2FsbGJhY2s6YSxvcmRlckluZGV4OmYscnVuT25jZTp2LGluaXRpYWxIb29rOk0sc2tpcDohMX0pO2xldCBHPVowKHokLHRoaXMpLmhhcyhsKTshRyYmMCE9PWYmJihHPSEwLFowKHokLHRoaXMpLmFkZChsKSksRyYmaC5sZW5n''@;'; put 'put ''dGg+MSYmWjAoRGgsdGhpcykuc2V0KGwsaC50b1NvcnRlZCgoaWUsdWUpPT5pZS5vcmRlckluZGV4LXVlLm9yZGVySW5kZXgpKX19aGFzKGwpe3JldHVybiBaMChEaCx0aGlzKS5oYXMobCkmJlowKERoLHRoaXMpLmdldChsKS5sZW5ndGg+MH1yZW1vdmUobCxhKXtpZighWjAoRGgsdGhpcyku''@;'; put 'put ''aGFzKGwpKXJldHVybiExO2NvbnN0IGQ9WjAoRGgsdGhpcykuZ2V0KGwpLGg9ZC5maW5kKGY9PmYuY2FsbGJhY2s9PT1hKTtpZihoKXtsZXQgZj1aMChkXyx0aGlzKS5nZXQobCk7cmV0dXJuIGguc2tpcD0hMCxmKz0xLGY+MTAwJiYoWjAoRGgsdGhpcykuc2V0KGwsZC5maWx0ZXIodj0+IXYu''@;'; put 'put ''c2tpcCkpLGY9MCksWjAoZF8sdGhpcykuc2V0KGwsZiksITB9cmV0dXJuITF9ZGVzdHJveSgpe1owKERoLHRoaXMpLmNsZWFyKCksWjAoZF8sdGhpcykuY2xlYXIoKSxzZmUoRGgsdGhpcyxudWxsKSxzZmUoZF8sdGhpcyxudWxsKX19ZnVuY3Rpb24gY2ZlKGMpe1owKERoLHRoaXMpLnNldChj''@;'; put 'put ''LFtdKSxaMChkXyx0aGlzKS5zZXQoYywwKX1jb25zdCBrWGU9Z2xgVGhlIHBsdWdpbiBob29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHVi''@;'; put 'put ''LmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0gdG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgU2F7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gRVhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBUWGUoYyl7dmFyIGw9ZnVuY3Rpb24gQVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgbGZlKX1zdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIElYZSgpe3Jl''@;'; put 'put ''dHVybiBEWGV9KCl9Z2V0QnVja2V0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwucGx1Z2luSG9va0J1Y2tldD1uZXcgbGZlKSxsLnBsdWdpbkhvb2tCdWNr''@;'; put 'put ''ZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4o''@;'; put 'put ''YSxmPT50aGlzLmFkZChsLGYsZCkpOihWJC5oYXMobCkmJmlsKHAkKGtYZSx7aG9va05hbWU6bCxyZW1vdmVkSW5WZXJzaW9uOlYkLmdldChsKX0pKSxCJC5oYXMobCkmJmlsKEIkLmdldChsKSksdGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITF9KSks''@;'; put 'put ''dGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9PnRoaXMub25jZShs''@;'; put 'put ''LGYsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiEwfSksdGhpc31hZGRBc0ZpeGVkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJy''@;'; put 'put ''YXkoYSk/WW4oYSxoPT50aGlzLmFkZEFzRml4ZWQobCxoLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2Fy''@;'; put 'put ''Z3VtZW50c1syXTpudWxsKS5yZW1vdmUobCxhKX1oYXMobCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXMobCl9cnVuKGwsYSxkLGgsZix2LE0sSSl7e2NvbnN0IEc9dGhpcy5nZXRC''@;'; put 'put ''dWNrZXQoKS5nZXRIb29rcyhhKSxpZT1HP0cubGVuZ3RoOjA7bGV0IHVlPTA7aWYoaWUpZm9yKDt1ZTxpZTspe2lmKCFHW3VlXXx8R1t1ZV0uc2tpcCl7dWUrPTE7Y29udGludWV9Y29uc3QgeWU9SE8oR1t1ZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sSSk7dm9pZCAwIT09eWUmJihkPXllKSxH''@;'; put 'put ''W3VlXSYmR1t1ZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxHW3VlXS5jYWxsYmFjayksdWUrPTF9fXtjb25zdCBHPXRoaXMuZ2V0QnVja2V0KGwpLmdldEhvb2tzKGEpLGllPUc/Ry5sZW5ndGg6MDtsZXQgdWU9MDtpZihpZSlmb3IoO3VlPGllOyl7aWYoIUdbdWVdfHxHW3VlXS5za2lwKXt1''@;'; put 'put ''ZSs9MTtjb250aW51ZX1jb25zdCB5ZT1ITyhHW3VlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxJKTt2b2lkIDAhPT15ZSYmKGQ9eWUpLEdbdWVdJiZHW3VlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLEdbdWVdLmNhbGxiYWNrLGwpLHVlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7dGhpcy5nZXRC''@;'; put 'put ''dWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpLmRlc3Ryb3koKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8WjcucHVzaChsKX1kZXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZaNy5zcGxp''@;'; put 'put ''Y2UoWjcuaW5kZXhPZihsKSwxKX1pc0RlcHJlY2F0ZWQobCl7cmV0dXJuIEIkLmhhcyhsKXx8ViQuaGFzKGwpfWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gWjcuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0dXJuIFo3fX1jb25zdCBEWGU9bmV3IFNhLFokPW5ldyBNYXA7ZnVuY3Rp''@;'; put 'put ''b24gcjMoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7WiQuaGFzKGMpfHxaJC5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPVokLmdldChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShNLEkpe2wuc2V0KE0s''@;'; put 'put ''SSl9LGdldEl0ZW06ZnVuY3Rpb24gZChNKXtyZXR1cm4gbC5nZXQoTSl9LGhhc0l0ZW06ZnVuY3Rpb24gaChNKXtyZXR1cm4gbC5oYXMoTSl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlzKCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gdigpe3JldHVyblsuLi5sLnZhbHVl''@;'; put 'put ''cygpXX19fWNvbnN0IFckPW5ldyBXZWFrTWFwLHtyZWdpc3RlcjpSWGUsZ2V0SXRlbTp1ZmUsaGFzSXRlbTpkZmUsZ2V0TmFtZXM6TFhlfT1yMygiZWRpdG9ycyIpO2Z1bmN0aW9uIE9YZShjKXtjb25zdCBsPXt9LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9''@;'; put 'put ''LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LFNhLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gaGZlKGMs''@;'; put 'put ''bCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpVyQuZ2V0KGMpfHxIZChudWxsLGMpLGE9VyQuZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFt''@;'; put 'put ''ZXRlcicpO2E9dWZlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIFdPKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFkZmUoYykpdGhyb3cg''@;'; put 'put ''RXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHVmZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIEhkKGMsbCl7YyYmInN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgT1hlKGwp''@;'; put 'put ''OyJzdHJpbmciPT10eXBlb2YgYyYmUlhlKGMsYSksVyQuc2V0KGwsYSl9bGV0IFlPPTA7Y29uc3QgajI9Y2xhc3MgTlhle2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9uIFBYZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRlhlKGMpe3ZhciBsPWZ1bmN0aW9uIEhYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJjb250ZXh0Iix2b2lkIDApLHRoaXMuY29udGV4dD1sfHx0aGlzLHRoaXMuY29u''@;'; put 'put ''dGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKHYpe2QuY2FsbCh0aGlz''@;'; put 'put ''LGZ1bmN0aW9uIFZYZShjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksQjIodGhpcyl9LGN9KHYpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1''@;'; put 'put ''c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30pLGwuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCksWU8rPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3Rl''@;'; put 'put ''bmVyKGwsYSxkKXtsZXQgdixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSx2PXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSx2LmV2''@;'; put 'put ''ZW50PT09YSYmdi5lbGVtZW50PT09bCl7aWYoZCYmZCE9PXYuY2FsbGJhY2t8fGgmJnYuZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksdi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodi5ldmVudCx2LmNhbGxi''@;'; put 'put ''YWNrUHJveHksdi5vcHRpb25zKSxZTy09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5n''@;'; put 'put ''dGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNh''@;'; put 'put ''bGxiYWNrUHJveHksZC5vcHRpb25zKSxZTy09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFyRXZlbnRzKCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0''@;'; put 'put ''PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVudDpsLGg9ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2Ny''@;'; put 'put ''ZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCB2O2QuY3JlYXRlRXZlbnQ/KHY9ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSx2''@;'; put 'put ''LmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxmLmNsaWVudFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQu''@;'; put 'put ''Ym9keS5wYXJlbnROb2RlKSk6dj1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudCh2KTpsLmZpcmVFdmVudChgb24ke2F9YCx2KX19O2Z1bmN0aW9uIFc3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVWGUoYyl7dmFyIGw9ZnVuY3Rpb24gWlhl''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZJChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEdPPW5ldyBXZWFrU2V0O2NsYXNzIEcke2NvbnN0cnVjdG9yKGwsYSxkKXsoZnVuY3Rpb24galhlKGMsbCl7KGZ1bmN0aW9uIHpYZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxHTyksVzcodGhpcywiaG90Iix2b2lkIDApLFc3KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxXNyh0aGlzLCJzZWxlY3Rp''@;'; put 'put ''b24iLHZvaWQgMCksVzcodGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLFc3KHRoaXMsImRlc3Ryb3llZCIsITEpLFc3KHRoaXMsImFjdGl2ZUVkaXRvciIsdm9pZCAwKSxXNyh0aGlzLCJjZWxsUHJvcGVydGllcyIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb249ZCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIobCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGg9PlkkKEdPLHRoaXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGg9PlkkKEdPLHRo''@;'; put 'put ''aXMsZmZlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2siLChoLGYsdik9PlkkKEdPLHRoaXMsV1hlKS5jYWxsKHRoaXMsaCxmLHYpKX1nZXRBY3RpdmVFZGl0b3IoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3J9cHJlcGFyZUVkaXRvcigp''@;'; put 'put ''e3ZhciBsO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNsb3NlRWRpdG9yKCExLCExLEc9PntHJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8YS5pc0hlYWRlcigpKXJldHVybjtjb25zdHtyb3c6ZCxjb2w6aH09YSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtsZXQgdj1kLE09aDtpZihBcnJh''@;'; put 'put ''eS5pc0FycmF5KGYpJiYoW3YsTV09ZiksdGhpcy5jZWxsUHJvcGVydGllcz10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LE0pLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IEk9dGhpcy5ob3QuZ2V0Q2VsbChkLGgsITApO2lm''@;'; put 'put ''KEkpe2NvbnN0IEc9dGhpcy5ob3QuZ2V0Q2VsbEVkaXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKSxpZT10aGlzLmhvdC5jb2xUb1Byb3AoTSksdWU9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pO3RoaXMuYWN0aXZlRWRpdG9yPWhmZShH''@;'; put 'put ''LHRoaXMuaG90KSx0aGlzLmFjdGl2ZUVkaXRvci5wcmVwYXJlKGQsaCxpZSxJLHVlLHRoaXMuY2VsbFByb3BlcnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNPcGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZighdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bGV0IGY9''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUJlZ2luRWRpdGluZyIsaC5oaWdobGlnaHQucm93LGguaGlnaGxpZ2h0LmNvbCxsLGEsZCk7YSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJiJib29sZWFuIiE9dHlwZW9mIGYmJihmPTA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgp''@;'; put 'put ''JiZoLmlzU2luZ2xlKCkpLCExIT09Zj8odGhpcy5hY3RpdmVFZGl0b3J8fCh0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCksdGhpcy5wcmVwYXJlRWRpdG9yKCkpLHRoaXMuYWN0aXZlRWRpdG9yJiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5h''@;'; put 'put ''Y3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGwsYSkpKTp0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCl9Y2xvc2VFZGl0b3IobCxhLGQpe3RoaXMuYWN0aXZlRWRpdG9yP3RoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcobCxhLGQpOmQmJmQoITEpfWNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5n''@;'; put 'put ''ZXMobCl7dGhpcy5jbG9zZUVkaXRvcighMSxsKX1jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwpe3RoaXMuY2xvc2VFZGl0b3IoITAsbCl9Y2xlYXJBY3RpdmVFZGl0b3IoKXt0aGlzLmFjdGl2ZUVkaXRvcj12b2lkIDB9aXNDZWxsRWRpdGFibGUoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6ZCxjb2w6aH09bC5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5o''@;'; put 'put ''b3QsTT1mLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZCkpfHx2LmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWF8fE0pfW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9''@;'; put 'put ''ey4uLiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92ZXMobCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlc307bC5zaGlmdEtleSYmKGEucm93PS1hLnJvdyxhLmNvbD0tYS5jb2wpLHRoaXMuaG90LnNlbGVjdGlvbi5p''@;'; put 'put ''c011bHRpcGxlKCk/dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoYS5yb3csYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1mdW5jdGlv''@;'; put 'put ''biBmZmUoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHwhbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8Rm0oYykpcmV0dXJuO2NvbnN0e2tleUNvZGU6YX09YyxkPShjLmN0cmxLZXl8fGMubWV0YUtleSkmJiFj''@;'; put 'put ''LmFsdEtleTsoIXRoaXMuYWN0aXZlRWRpdG9yfHx0aGlzLmFjdGl2ZUVkaXRvciYmIXRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKSYmIUgkKGEpJiYhcmZlKGEpJiYhZCYmIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5vcGVuRWRpdG9yKCIiLGMpfWZ1bmN0aW9uIFdYZShjLGwp''@;'; put 'put ''e2wuaXNDZWxsKCkmJnRoaXMub3BlbkVkaXRvcihudWxsLGMsITApfWNvbnN0IHBmZT1uZXcgV2Vha01hcDtHJC5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9cGZlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IEckKGMsbCxhKSxwZmUuc2V0KGMsZCkpLGR9O2NvbnN0IFlYZT1H''@;'; put 'put ''JDtmdW5jdGlvbiBrRShjLGwsYSl7Z2ZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBnZmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9u''@;'; put 'put ''IGNjKGMsbCl7cmV0dXJuIGMuZ2V0KGJnKGMsbCkpfWZ1bmN0aW9uIERFKGMsbCxhKXtyZXR1cm4gYy5zZXQoYmcoYyxsKSxhKSxhfWZ1bmN0aW9uIGJnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBoXz1PYmplY3QuZnJlZXplKHtDRUxMOiJjZWxsIixNSVhFRDoibWl4ZWQifSk7dmFyIFh1PW5ldyBXZWFrTWFwLCRPPW5ldyBXZWFrTWFwLEtPPW5ldyBXZWFr''@;'; put 'put ''TWFwLHFPPW5ldyBXZWFrTWFwLFhPPW5ldyBXZWFrTWFwLE5tPW5ldyBXZWFrU2V0O2NsYXNzICRYZXtjb25zdHJ1Y3RvcihsKXt2YXIgYT10aGlzOyhmdW5jdGlvbiBHWGUoYyxsKXtnZmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTm0pLGtFKHRoaXMsWHUsdm9pZCAwKSxrRSh0aGlzLCRPLHZv''@;'; put 'put ''aWQgMCksa0UodGhpcyxLTywxKSxrRSh0aGlzLHFPLG51bGwpLGtFKHRoaXMsWE8sbmV3IE1hcCk7Y29uc3QgZD1sLmdldFNldHRpbmdzKCk7REUoWHUsdGhpcyxsKSxERSgkTyx0aGlzLGQuaW1lRmFzdEVkaXQ/aF8uTUlYRUQ6aF8uQ0VMTCksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJV''@;'; put 'put ''cGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gYmcoTm0sYSxxWGUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0''@;'; put 'put ''aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBiZyhObSxhLG1mZSkuY2FsbChhLC4uLmYpfSksY2MoWHUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1Nl''@;'; put 'put ''dCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gYmcoTm0sYSxtZmUpLmNhbGwoYSwuLi5mKX0pLGNjKFh1LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBiZyhObSxhLEtYZSkuY2FsbChhLC4uLmYpfSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIGNjKCRPLHRoaXMpfXNldEZvY3VzTW9kZShsKXtP''@;'; put 'put ''YmplY3QudmFsdWVzKGhfKS5pbmNsdWRlcyhsKT9ERSgkTyx0aGlzLGwpOmlsKGAiJHtsfSIgaXMgbm90IGEgdmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXkoKXtyZXR1cm4gY2MoS08sdGhpcyl9c2V0UmVmb2N1c0RlbGF5KGwpe0RFKEtPLHRoaXMsbCl9c2V0UmVmb2N1c0Vs''@;'; put 'put ''ZW1lbnRHZXR0ZXIobCl7REUocU8sdGhpcyxsKX1nZXRSZWZvY3VzRWxlbWVudCgpe3ZhciBsO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjYyhxTyx0aGlzKT9jYyhxTyx0aGlzKS5jYWxsKHRoaXMpOm51bGw9PT0obD1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09''@;'; put 'put ''PWw/dm9pZCAwOmwuVEVYVEFSRUF9Zm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChsKXtjb25zdCBhPWQ9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbD09PShoPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodDtpZighdilyZXR1cm47''@;'; put 'put ''bGV0IE09Y2MoWHUsdGhpcykucnVuSG9va3MoIm1vZGlmeUZvY3VzZWRFbGVtZW50Iix2LnJvdyx2LmNvbCxkKTtFcChNKXx8KE09ZCksTSYmKG51bGw9PT0oZj1jYyhYdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWZ8fCFmLmlzT3BlbmVkKCkpJiZNLmZvY3VzKHtwcmV2''@;'; put 'put ''ZW50U2Nyb2xsOiEwfSl9O2w/YShsKTpiZyhObSx0aGlzLCQkKS5jYWxsKHRoaXMsZD0+YShkKSl9cmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06Y2MoS08sdGhpcyk7dmFy''@;'; put 'put ''IGQsaDshY2MoWHUsdGhpcykuZ2V0U2V0dGluZ3MoKS5pbWVGYXN0RWRpdHx8bnVsbCE9PShsPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKSYmdm9pZCAwIT09bCYmbC5pc09wZW5lZCgpfHwobnVsbD09PShkPWNjKFh1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09''@;'; put 'put ''ZHx8bnVsbD09PShoPWQucmVmcmVzaFZhbHVlKXx8dm9pZCAwPT09aHx8aC5jYWxsKGQpLGNjKFhPLHRoaXMpLmhhcyhhKXx8Y2MoWE8sdGhpcykuc2V0KGEsTUUoKCk9Pnt2YXIgZjtjYyhYdSx0aGlzKS5pc0Rlc3Ryb3llZHx8bnVsbD09PShmPXRoaXMuZ2V0UmVmb2N1c0VsZW1lbnQoKSl8''@;'; put 'put ''fHZvaWQgMD09PWZ8fGYuc2VsZWN0KCl9LGEpKSxjYyhYTyx0aGlzKS5nZXQoYSkoKSl9fWZ1bmN0aW9uICQkKGMpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPWNjKFh1LHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8''@;'; put 'put ''IWNjKFh1LHRoaXMpLnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpKXJldHVybiB2b2lkIGMobnVsbCk7Y29uc3QgZD1jYyhYdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKTtudWxsPT09ZD9jYyhYdSx0aGlzKS5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLCgpPT57YyhjYyhYdSx0''@;'; put 'put ''aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKSl9KTpjKGQpfWZ1bmN0aW9uIG1mZSgpe2JnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxjPT57Y29uc3R7YWN0aXZlRWxlbWVudDpsfT1jYyhYdSx0aGlzKS5yb290RG9jdW1lbnQ7bCYmRk8obCkmJmwuYmx1cigpLHRoaXMuZm9jdXNPbkhpZ2hs''@;'; put 'put ''aWdodGVkQ2VsbChjKX0pfWZ1bmN0aW9uIEtYZSgpe2JnKE5tLHRoaXMsJCQpLmNhbGwodGhpcyxjPT57dGhpcy5nZXRGb2N1c01vZGUoKT09PWhfLk1JWEVEJiYiVEQiPT09Yz8ubm9kZU5hbWUmJnRoaXMucmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKX0pfWZ1bmN0aW9uIHFYZShjKXsiYm9v''@;'; put 'put ''bGVhbiI9PXR5cGVvZiBjLmltZUZhc3RFZGl0JiZ0aGlzLnNldEZvY3VzTW9kZShjLmltZUZhc3RFZGl0P2hfLk1JWEVEOmhfLkNFTEwpfWIoMTYyMjkpLGIoNDQyMTMpO2NvbnN0IHZmZT17IiZuYnNwOyI6IiAiLCImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+In0sWFhlPW5ldyBS''@;'; put 'put ''ZWdFeHAoT2JqZWN0LmtleXModmZlKS5tYXAoYz0+YCgke2N9KWApLmpvaW4oInwiKSwiZ2kiKTtmdW5jdGlvbiBLJChjKXtjb25zdCBsPWMuaGFzQ29sSGVhZGVycygpLGE9Yy5oYXNSb3dIZWFkZXJzKCksZD1bbD8tMTowLGE/LTE6MCxjLmNvdW50Um93cygpLTEsYy5jb3VudENvbHMoKS0x''@;'; put 'put ''XSxoPWMuZ2V0RGF0YSguLi5kKSxmPWgubGVuZ3RoLHY9Zj4wP2hbMF0ubGVuZ3RoOjAsTT1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLEk9bD9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLEc9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxpZT1hPzE6MCx1ZT1sPzE6MDtmb3IobGV0IHllPTA7eWU8''@;'; put 'put ''Zjt5ZSs9MSl7Y29uc3QgRWU9bCYmMD09PXllLGplPVtdO2ZvcihsZXQgcnQ9MDtydDx2O3J0Kz0xKXtjb25zdCBwdD0hRWUmJmEmJjA9PT1ydDtsZXQgZHQ9IiI7aWYoRWUpZHQ9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHJ0LWllKX08L3RoPmA7ZWxzZSBpZihwdClkdD1gPHRoPiR7Yy5nZXRS''@;'; put 'put ''b3dIZWFkZXIoeWUtdWUpfTwvdGg+YDtlbHNle2NvbnN0IEp0PWhbeWVdW3J0XSx7aGlkZGVuOnZuLHJvd3NwYW46Q24sY29sc3Bhbjp0bn09Yy5nZXRDZWxsTWV0YSh5ZS11ZSxydC1pZSk7aWYoIXZuKXtjb25zdCBNbj1bXTtpZihDbiYmTW4ucHVzaChgcm93c3Bhbj0iJHtDbn0iYCksdG4m''@;'; put 'put ''Jk1uLnB1c2goYGNvbHNwYW49IiR7dG59ImApLFVjKEp0KSlkdD1gPHRkICR7TW4uam9pbigiICIpfT48L3RkPmA7ZWxzZXtjb25zdCBDcj1KdC50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxc''@;'; put 'put ''bik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtkdD1gPHRkICR7TW4uam9pbigiICIpfT4ke0NyfTwvdGQ+YH19fWplLnB1c2goZHQpfWNvbnN0IHFlPVsiPHRyPiIsLi4uamUsIjwvdHI+Il0uam9pbigi''@;'; put 'put ''Iik7RWU/SS5zcGxpY2UoMSwwLHFlKTpHLnNwbGljZSgtMSwwLHFlKX1yZXR1cm4gTS5zcGxpY2UoMSwwLEkuam9pbigiIiksRy5qb2luKCIiKSksTS5qb2luKCIiKX1mdW5jdGlvbiBxJChjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2Nv''@;'; put 'put ''bnN0IGg9Y1tkXSxmPWgubGVuZ3RoLHY9W107MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgTT0wO008ZjtNKz0xKXtjb25zdCBJPWhbTV0sRz1VYyhJKT8iIjpJLnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4v''@;'; put 'put ''ZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2ksaWU9PmA8c3BhbiBzdHlsZT0ibXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KGllLmxlbmd0aC0xKX0gPC9zcGFuPmAp''@;'; put 'put ''LnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7di5wdXNoKGA8dGQ+JHtHfTwvdGQ+YCl9YS5wdXNoKCI8dHI+IiwuLi52LCI8L3RyPiIpLGQrMT09PWwmJmEucHVzaCgiPC90Ym9keT4iKX1yZXR1cm4gYS5wdXNoKCI8L3RhYmxlPiIpLGEuam9pbigiIil9ZnVuY3Rpb24geWZlKGMpe2xldCBsPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGYpe2NvbnN0IEp0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLHZuPT57Y29uc3QgQ249dm4ubWF0Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHtDbn0ke3ZuLnN1YnN0cmluZyhDbi5sZW5ndGgsdm4ubGFzdEluZGV4T2YoIjwiKSku''@;'; put 'put ''dHJpbSgpLnJlcGxhY2VBbGwoL1xuXHMrL2csIiAiKS5yZXBsYWNlQWxsKC88cC4qPz4vZywiXG4iKS5yZXBsYWNlKCJcbiIsIiIpLnJlcGxhY2VBbGwoLzxcLyguKik+XHMrJC9nbSwiPC8kMT4iKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIikucmVwbGFjZUFsbCgvXiZuYnNw''@;'; put 'put ''OyQvZ20sIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHtKdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFibGUiKX1pZighZnx8IWZ1bmN0aW9uIEpYZShjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0''@;'; put 'put ''IHY9aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksTT1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLEk9Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLEc9ST9BcnJheS5mcm9tKEkuY2VsbHMpLnJlZHVjZSgoSnQsdm4pPT5KdCt2bi5jb2xTcGFuLDApLShN''@;'; put 'put ''PzE6MCk6MCxpZT1mLnRGb290JiZBcnJheS5mcm9tKGYudEZvb3Qucm93cyl8fFtdLHVlPVtdO2xldCB5ZT0hMSxFZT0wLGplPTA7aWYoZi50SGVhZCl7Y29uc3QgSnQ9QXJyYXkuZnJvbShmLnRIZWFkLnJvd3MpLmZpbHRlcih2bj0+e2NvbnN0IENuPW51bGwhPT12bi5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KCJ0ZCIpO3JldHVybiBDbiYmdWUucHVzaCh2biksIUNufSk7RWU9SnQubGVuZ3RoLHllPUVlPjAsRWU+MT9hLm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShKdCkucmVkdWNlKCh2bixDbik9Pntjb25zdCB0bj1BcnJheS5mcm9tKENuLmNlbGxzKS5yZWR1Y2UoKE1uLENyLEdyKT0+e2lmKE0m''@;'; put 'put ''JjA9PT1HcilyZXR1cm4gTW47Y29uc3R7Y29sU3Bhbjptcixpbm5lckhUTUw6R259PUNyO3JldHVybiBNbi5wdXNoKG1yPjE/e2xhYmVsOkduLGNvbHNwYW46bXJ9OkduKSxNbn0sW10pO3JldHVybiB2bi5wdXNoKHRuKSx2bn0sW10pOnllJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20oSnRb''@;'; put 'put ''MF0uY2hpbGRyZW4pLnJlZHVjZSgodm4sQ24sdG4pPT4oTSYmMD09PXRufHx2bi5wdXNoKENuLmlubmVySFRNTCksdm4pLFtdKSl9dWUubGVuZ3RoJiYoYS5maXhlZFJvd3NUb3A9dWUubGVuZ3RoKSxpZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1pZS5sZW5ndGgpO2NvbnN0IHFlPVsu''@;'; put 'put ''Li51ZSwuLi5BcnJheS5mcm9tKGYudEJvZGllcykucmVkdWNlKChKdCx2bik9PihKdC5wdXNoKC4uLkFycmF5LmZyb20odm4ucm93cykpLEp0KSxbXSksLi4uaWVdO2plPXFlLmxlbmd0aDtjb25zdCBydD1uZXcgQXJyYXkoamUpO2ZvcihsZXQgSnQ9MDtKdDxqZTtKdCsrKXJ0W0p0XT1uZXcg''@;'; put 'put ''QXJyYXkoRyk7Y29uc3QgcHQ9W10sZHQ9W107Zm9yKGxldCBKdD0wO0p0PGplO0p0Kyspe2NvbnN0IENuPUFycmF5LmZyb20ocWVbSnRdLmNlbGxzKSx0bj1Dbi5sZW5ndGg7Zm9yKGxldCBNbj0wO01uPHRuO01uKyspe2NvbnN0IENyPUNuW01uXSx7bm9kZU5hbWU6R3IsaW5uZXJIVE1MOm1y''@;'; put 'put ''LHJvd1NwYW46R24sY29sU3BhbjphaX09Q3IsX2k9cnRbSnRdLmZpbmRJbmRleChPbj0+dm9pZCAwPT09T24pO2lmKCJURCI9PT1Hcil7aWYoR24+MXx8YWk+MSl7Zm9yKGxldCBJcj1KdDtJcjxKdCtHbjtJcisrKWlmKElyPGplKWZvcihsZXQgJHI9X2k7JHI8X2krYWk7JHIrKylydFtJcl1b''@;'; put 'put ''JHJdPW51bGw7Y29uc3QgenI9Q3IuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO3pyJiZ6ci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFuIil8fHB0LnB1c2goe2NvbDpfaSxyb3c6SnQscm93c3BhbjpHbixjb2xzcGFuOmFpfSl9bGV0IE9uPSIiO09uPXYmJi9leGNlbC9naS50ZXN0KHYuY29u''@;'; put 'put ''dGVudCk/bXIucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17MCwzfS9naW0sIlxyXG4iKTptci5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHJ0W0p0XVtfaV09T24ucmVwbGFjZShYWGUs''@;'; put 'put ''enI9PnZmZVt6cl0pfWVsc2UgZHQucHVzaChtcil9fXJldHVybiBwdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9cHQpLGR0Lmxlbmd0aCYmKGEucm93SGVhZGVycz1kdCkscnQubGVuZ3RoJiYoYS5kYXRhPXJ0KSxhfWZ1bmN0aW9uIG0xKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNOYU4oYykmJmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQv''@;'; put 'put ''LnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3JldHVybiBuZXcgUmVnRXhwKGBeWystXT8oKCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50''@;'; put 'put ''ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBEYXRlKX1mdW5jdGlvbiBiZmUoYyl7cmV0dXJuIG0xKGMsWyIsIl0pfWZ1bmN0aW9uIEdhKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIFgkKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsJiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gSiQoYyxsKXtyZXR1cm4gbD1wYXJz''@;'; put 'put ''ZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1mdW5jdGlvbiBrcyhjLGwsYSl7cmV0dXJuIE1hdGgubWluKGMsbCk9PT1jP2w6TWF0aC5tYXgoYyxhKT09PWM/YTpjfWNvbnN0IF9mZT1uZXcgTWFwKFtbImFz''@;'; put 'put ''YyIsWy0xLDFdXSxbImRlc2MiLFsxLC0xXV1dKSxlSmU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLHRKZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBub3QgYSBudW1iZXIuYCxySmU9Yz0+YFRoZSBpZCAnJHtjfScgaXMgYWxyZWFk''@;'; put 'put ''eSBkZWNsYXJlZCBpbiBhIG1hcC5gO2Z1bmN0aW9uIEpPKCl7bGV0e2Vycm9ySWRFeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IE1hcDtmdW5jdGlvbiBNKCl7cmV0dXJuWy4uLmxdfWZ1bmN0aW9u''@;'; put 'put ''IEkoRyl7cmV0dXJuIGwuaGFzKEcpfXJldHVybiBjPW1sKGMpP2M6ckplLHthZGRJdGVtOmZ1bmN0aW9uIGEoRyxpZSl7aWYoSShHKSl0aHJvdyBuZXcgRXJyb3IoYyhHKSk7bC5zZXQoRyxpZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGYoRyl7Y29u''@;'; put 'put ''c3RbaWVdPU0oKS5maW5kKHVlPT57bGV0W3llLEVlXT11ZTtyZXR1cm4gRz09PUVlJiZ5ZX0pfHxbbnVsbF07cmV0dXJuIGllfSxnZXRJdGVtOmZ1bmN0aW9uIHYoRyl7cmV0dXJuIGwuZ2V0KEcpfSxnZXRJdGVtczpNLGhhc0l0ZW06SSxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoRyl7cmV0dXJu''@;'; put 'put ''IGwuZGVsZXRlKEcpfX19Y29uc3QgaUplPWM9PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIHVuaXF1ZSBzZXQuYCxlSz1jPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkICIke2N9IiBwbHVnaW4uYCx3ZmU9ZnVuY3Rpb24gbkplKCl7bGV0e2Vycm9yUHJpb3Jp''@;'; put 'put ''dHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFOOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGM9bWwoYyk/YzplSmUsbD1tbChsKT9sOnRKZSx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7''@;'; put 'put ''aWYoIW0xKGYpKXRocm93IG5ldyBFcnJvcihsKGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNj''@;'; put 'put ''Ijtjb25zdFt2LE1dPV9mZS5nZXQoZil8fF9mZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChJLEcpPT5JWzBdPEdbMF0/djpNKS5tYXAoST0+SVsxXSl9fX0oe2Vycm9yUHJpb3JpdHlFeGlzdHM6Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBwbHVnaW4gb24gcHJpb3Jp''@;'; put 'put ''dHkgIiR7Y30iLmAsZXJyb3JQcmlvcml0eU5hTjpjPT5gVGhlIHByaW9yaXR5ICIke2N9IiBpcyBub3QgYSBudW1iZXIuYH0pLENmZT1mdW5jdGlvbiBhSmUoKXtsZXR7ZXJyb3JJdGVtRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50''@;'; put 'put ''c1swXTp7fTtjb25zdCBsPW5ldyBTZXQ7cmV0dXJuIGM9bWwoYyk/YzppSmUse2FkZEl0ZW06ZnVuY3Rpb24gYShmKXtpZihsLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7bC5hZGQoZil9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldEl0ZW1zOmZ1bmN0aW9uIGQoKXty''@;'; put 'put ''ZXR1cm5bLi4ubF19fX0oe2Vycm9ySXRlbUV4aXN0czplS30pLHRLPUpPKHtlcnJvcklkRXhpc3RzOmVLfSk7ZnVuY3Rpb24gbksoKXtyZXR1cm5bLi4ud2ZlLmdldEl0ZW1zKCksLi4uQ2ZlLmdldEl0ZW1zKCldfWZ1bmN0aW9uIElFKGMpe2NvbnN0IGw9cDEoYyk7cmV0dXJuIHRLLmdldEl0''@;'; put 'put ''ZW0obCl9ZnVuY3Rpb24gUHMoYyxsLGEpe1tjLGwsYV09ZnVuY3Rpb24gbEplKGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9KGw9YykuUExVR0lOX0tFWSxhPWwuUExVR0lOX1BSSU9SSVRZKSxbYyxsLGFdfShjLGwsYSksdm9pZCAwPT09SUUoYykmJmZ1bmN0aW9uIHNK''@;'; put 'put ''ZShjLGwsYSl7Y29uc3QgZD1wMShjKTtpZih0Sy5oYXNJdGVtKGQpKXRocm93IG5ldyBFcnJvcihlSyhkKSk7dm9pZCAwPT09YT9DZmUuYWRkSXRlbShkKTp3ZmUuYWRkSXRlbShhLGQpLHRLLmFkZEl0ZW0oZCxsKX0oYyxsLGEpfWNvbnN0e3JlZ2lzdGVyOmNKZSxnZXRJdGVtOnVKZSxoYXNJ''@;'; put 'put ''dGVtOlNmZSxnZXROYW1lczpkSmV9PXIzKCJyZW5kZXJlcnMiKTtmdW5jdGlvbiBRTyhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighU2ZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJu''@;'; put 'put ''IHVKZShjKX1mdW5jdGlvbiBJaChjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuUkVOREVSRVJfVFlQRSksY0plKGMsbCl9Y29uc3R7cmVnaXN0ZXI6aEplLGdldEl0ZW06ZkplLGhhc0l0ZW06TWZlLGdldE5hbWVzOnBKZX09cjMoInZhbGlkYXRvcnMiKTtmdW5jdGlvbiBySyhj''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZighTWZlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHZhbGlkYXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBmSmUoYyl9ZnVuY3Rpb24gWTcoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShs''@;'; put 'put ''PWMpLlZBTElEQVRPUl9UWVBFKSxoSmUoYyxsKX1mdW5jdGlvbiBrcChjLGwsYSl7KGZ1bmN0aW9uIGdKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9''@;'; put 'put ''KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUWEoYyxsKXtyZXR1cm4gYy5nZXQoeGZlKGMsbCkpfWZ1bmN0aW9uIFZtKGMsbCxhKXtyZXR1cm4gYy5zZXQoeGZlKGMsbCksYSksYX1mdW5jdGlvbiB4ZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB6Mj1uZXcgV2Vha01hcCxpSz1uZXcgV2Vha01hcCx4MD1uZXcgV2Vha01hcCxmXz1uZXcgV2Vha01hcCxlUD1u''@;'; put 'put ''ZXcgV2Vha01hcCxpMz1uZXcgV2Vha01hcCxhSz1uZXcgV2Vha01hcCxSRT1uZXcgV2Vha01hcCxHNz1uZXcgV2Vha01hcCxEcD1uZXcgV2Vha01hcDtjb25zdCBFZmU9Y2xhc3MgbUple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQgTT1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDtrcCh0aGlzLHoyLHZvaWQgMCksa3AodGhpcyxpSyx2b2lkIDApLGtwKHRoaXMseDAsdm9pZCAwKSxrcCh0aGlzLGZfLHZvaWQgMCksa3AodGhpcyxlUCx2b2lkIDApLGtwKHRoaXMsaTMsdm9pZCAwKSxrcCh0aGlzLGFLLHZvaWQgMCks''@;'; put 'put ''a3AodGhpcyxSRSx2b2lkIDApLGtwKHRoaXMsRzcsW251bGwsbnVsbF0pLGtwKHRoaXMsRHAsW251bGwsbnVsbF0pLFZtKHoyLHRoaXMsZCksVm0oaUssdGhpcyxhKSxWbSh4MCx0aGlzLGYpLFZtKGZfLHRoaXMsdiksVm0oZVAsdGhpcyxNKSxWbShpMyx0aGlzLGgpLFZtKGFLLHRoaXMsbCks''@;'; put 'put ''dGhpcy5yZWdpc3RlckV2ZW50cygpfXJlZ2lzdGVyRXZlbnRzKCl7UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsImNvbnRleHRtZW51IixkPT50aGlzLm9uQ29udGV4dE1lbnUoZCkpLFFhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUWEoeDAsdGhp''@;'; put 'put ''cykuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5UQUJMRSwibW91c2VvdXQiLGQ9PnRoaXMub25Nb3VzZU91dChkKSk7Y29uc3QgbD0oKT0+e1FhKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoUWEoeDAsdGhpcykuaG9sZGVyLCJ0b3VjaHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksUWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hFbmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8''@;'; put 'put ''fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwic2Nyb2xsIiwoKT0+e2NsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29p''@;'; put 'put ''bmd8fFFhKHoyLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1vbWVudHVt''@;'; put 'put ''U2Nyb2xsaW5nLm9uZ29pbmc9ITEsUWEoejIsdGhpcykuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O0FwKCk/bCgpOihSJCgpJiZsKCksKCgpPT57UWEoaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRYSh4MCx0aGlzKS5ob2xkZXIsIm1vdXNldXAiLGQ9''@;'; put 'put ''PnRoaXMub25Nb3VzZVVwKGQpKSxRYShpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFhKHgwLHRoaXMpLmhvbGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKX0pKCkpfXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3QgZD10aGlzLnBhcmVudENlbGwobCkuY29v''@;'; put 'put ''cmRzO2lmKFFhKFJFLHRoaXMpJiZkKXtjb25zdFtoLGZdPVtkLnJvdyxRYShSRSx0aGlzKS5mcm9tLnJvd10sW3YsTV09W2QuY29sLFFhKFJFLHRoaXMpLmZyb20uY29sXTtyZXR1cm4gaD09PWYmJnY9PT1NfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPXlFKGwsWyJURCIs''@;'; put 'put ''IlRIIl0sUWEoeDAsdGhpcykuVEFCTEUpO3JldHVybiBoPyhhLmNvb3Jkcz1RYSh4MCx0aGlzKS5nZXRDb29yZHMoaCksYS5URD1oKTpwbyhsLCJ3dEJvcmRlciIpJiZwbyhsLCJjdXJyZW50Iik/KGEuY29vcmRzPVFhKGZfLHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhp''@;'; put 'put ''Z2hsaWdodCxhLlREPVFhKHgwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKTpwbyhsLCJ3dEJvcmRlciIpJiZwbyhsLCJhcmVhIikmJlFhKGZfLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UmJihhLmNvb3Jkcz1RYShmXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJh''@;'; put 'put ''bmdlLnRvLGEuVEQ9UWEoeDAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1RYShpSyx0aGlzKS5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxkPUkkKFIyZSxsLnRhcmdldCksaD1sLnRhcmdldDtpZighWyJURCIsIlRIIl0uaW5jbHVkZXMoYS5u''@;'; put 'put ''b2RlTmFtZSkmJihoPT09YXx8ZCgwKT09PWF8fGQoMSk9PT1hKSlyZXR1cm47Y29uc3QgZj10aGlzLnBhcmVudENlbGwoaCk7cG8oaCwiY29ybmVyIik/UWEoejIsdGhpcykuZ2V0U2V0dGluZygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGgpOmYuVEQmJlFhKHoyLHRoaXMpLmhhcygib25D''@;'; put 'put ''ZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZURvd24iLGwsZi5jb29yZHMsZi5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZmLlREJiYoUWEoRHAsdGhpcylbMF09Zi5URCxjbGVhclRpbWVvdXQoUWEoRzcsdGhpcylbMF0pLFFhKEc3''@;'; put 'put ''LHRoaXMpWzBdPXNldFRpbWVvdXQoKCk9PntRYShEcCx0aGlzKVswXT1udWxsfSwxZTMpKX1vbkNvbnRleHRNZW51KGwpe2lmKFFhKHoyLHRoaXMpLmhhcygib25DZWxsQ29udGV4dE1lbnUiKSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3Rl''@;'; put 'put ''bmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxhLmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIobCl7aWYoIVFhKHoyLHRoaXMpLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0IGE9UWEoeDAsdGhpcykuVEFCTEUsZD15RShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPVFhKGVQ''@;'; put 'put ''LHRoaXMpfHx0aGlzO2QmJmQhPT1oLmxhc3RNb3VzZU92ZXImJkxtKGQsYSkmJihoLmxhc3RNb3VzZU92ZXI9ZCx0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdmVyIixsLFFhKHgwLHRoaXMpLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighUWEoejIsdGhpcykuaGFz''@;'; put 'put ''KCJvbkNlbGxNb3VzZU91dCIpKXJldHVybjtjb25zdCBhPVFhKHgwLHRoaXMpLlRBQkxFLGQ9eUUobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD15RShsLnJlbGF0ZWRUYXJnZXQsWyJURCIsIlRIIl0sYSksZj1RYShlUCx0aGlzKXx8dGhpcztkJiZkIT09aCYmTG0oZCxhKSYmKHRoaXMuY2Fs''@;'; put 'put ''bExpc3RlbmVyKCJvbkNlbGxNb3VzZU91dCIsbCxRYSh4MCx0aGlzKS5nZXRDb29yZHMoZCksZCksbnVsbD09PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VVcChsKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmUWEoejIsdGhpcykuaGFzKCJvbkNl''@;'; put 'put ''bGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGEuY29vcmRzLGEuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGEuVEQ9PT1RYShEcCx0aGlzKVswXSYmYS5URD09PVFhKERwLHRoaXMpWzFdPyhwbyhsLnRhcmdldCwiY29ybmVy''@;'; put 'put ''Iik/dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvcm5lckRibENsaWNrIixsLGEuY29vcmRzLGEuVEQpOnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxEYmxDbGljayIsbCxhLmNvb3JkcyxhLlREKSxRYShEcCx0aGlzKVswXT1udWxsLFFhKERwLHRoaXMpWzFdPW51bGwpOmEuVEQ9PT1RYShE''@;'; put 'put ''cCx0aGlzKVswXSYmKFFhKERwLHRoaXMpWzFdPWEuVEQsY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxRYShHNyx0aGlzKVsxXT1zZXRUaW1lb3V0KCgpPT57UWEoRHAsdGhpcylbMV09bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtWbShSRSx0aGlzLFFhKGZfLHRoaXMpLmdldEZv''@;'; put 'put ''Y3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlKSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFyIGE7Y29uc3QgZD1sLnRhcmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3Jkcyxm''@;'; put 'put ''PVBhKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZRYSh6Mix0aGlzKS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSl7Y29uc3QgTT1bIkEiLCJCVVRUT04iLCJJTlBVVCJdO08kKCkmJihRMmUoKXx8ZWZlKCkpJiZ0aGlzLnNlbGVjdGVkQ2VsbFdh''@;'; put 'put ''c1RvdWNoZWQoZCkmJiFNLmluY2x1ZGVzKGQudGFnTmFtZSk/bC5wcmV2ZW50RGVmYXVsdCgpOnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKXx8bC5wcmV2ZW50RGVmYXVsdCgpfXRoaXMub25Nb3VzZVVwKGwpLHRoaXMudG91Y2hBcHBsaWVkPSExfWNhbGxMaXN0ZW5lcihsLGEsZCxo''@;'; put 'put ''KXtjb25zdCBmPVFhKHoyLHRoaXMpLmdldFNldHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsUWEoYUssdGhpcykuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dChRYShHNyx0aGlzKVswXSksY2xlYXJUaW1lb3V0KFFhKEc3LHRoaXMpWzFdKSxRYShpMyx0aGlzKS5kZXN0cm95KCl9''@;'; put 'put ''fTtmdW5jdGlvbiBvSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdkplKGMpe3ZhciBsPWZ1bmN0aW9uIHlKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgX0plPWNsYXNzIGJKZXtjb25zdHJ1Y3RvcihsLGEsZCl7''@;'; put 'put ''b0sodGhpcywib2Zmc2V0Iix2b2lkIDApLG9LKHRoaXMsInRvdGFsIix2b2lkIDApLG9LKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwp''@;'; put 'put ''e3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgo''@;'; put 'put ''bCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiBzSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd0plKGMpe3ZhciBsPWZ1bmN0aW9uIENKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y29uc3QgTUplPWNsYXNzIFNKZXtjb25zdHJ1Y3RvcihsLGEsZCl7c0sodGhpcywib2Zmc2V0Iix2b2lkIDApLHNLKHRoaXMsInRvdGFsIix2b2lkIDApLHNLKHRoaXMsImNvdW50VEgiLHZvaWQgMCksdGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0''@;'; put 'put ''dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRlcmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVk''@;'; put 'put ''VEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZVJvd1RvVmlz''@;'; put 'put ''aWJsZUNvbEhlYWRlZFJvdyhsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNlVG9SZW5kZXJlZChsKSl9fTtmdW5jdGlvbiB0UChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geEplKGMpe3ZhciBsPWZ1bmN0aW9uIEVKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVEple2NvbnN0cnVjdG9yKCl7dFAodGhpcywiY3VycmVudFNpemUiLDApLHRQKHRoaXMsIm5leHRTaXplIiwwKSx0UCh0aGlzLCJjdXJyZW50T2Zmc2V0IiwwKSx0UCh0aGlzLCJuZXh0T2Zmc2V0IiwwKX1zZXRTaXplKGwp''@;'; put 'put ''e3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWZ1bmN0aW9uIGNLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrSmUoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gREplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBJSmV7Y29uc3RydWN0b3IoKXtjSyh0aGlzLCJzaXplIixuZXcgVEplKSxjSyh0aGlzLCJ3b3JraW5nU3BhY2UiLDApLGNLKHRoaXMsInNoYXJlZFNp''@;'; put 'put ''emUiLG51bGwpfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZzZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLnNoYXJlZFNpemV9aXNQbGFjZU9uKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLndvcmtpbmdTcGFjZT09PWx9YXBwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTEsbC53b3JraW5nU3BhY2U9Mix0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfXByZXBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MixsLndvcmtpbmdTcGFjZT0xLHRoaXMuc2hhcmVk''@;'; put 'put ''U2l6ZT1sLmdldFZpZXdTaXplKCl9fWIoMjk3NjApO2NsYXNzIEFmZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBSSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIExKZShjKXt2YXIgbD1mdW5jdGlvbiBPSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywib3JkZXIiLFtdKSx0aGlzLm9yZGVyPVsuLi5BcnJheShhKS5rZXlzKCldLm1hcChkPT5sK2QpfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlci5sZW5ndGh9aGFzKGwpe3JldHVybiB0aGlzLm9yZGVyLmluZGV4T2YobCk+LTF9Z2V0KGwp''@;'; put 'put ''e3JldHVybiBsPHRoaXMub3JkZXIubGVuZ3RoP3RoaXMub3JkZXJbbF06LTF9cmVtb3ZlKGwpe3RoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihsKSwxKX1wcmVwZW5kKGwpe3JldHVybiB0aGlzLm9yZGVyLnVuc2hpZnQobCksdGhpcy5vcmRlci5wb3AoKX19Y2xhc3MgTkpl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBQSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZKZShjKXt2YXIgbD1mdW5jdGlvbiBISmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywic2l6ZVNldCIsdm9pZCAw''@;'; put 'put ''KSx0aGlzLnNpemVTZXQ9bH1kaWZmKCl7Y29uc3R7c2l6ZVNldDpsfT10aGlzLHtjdXJyZW50U2l6ZTphLG5leHRTaXplOmR9PWwuZ2V0Vmlld1NpemUoKTtsZXQgaD1NYXRoLm1heChkLGEpO2lmKDA9PT1oKXJldHVybltdO2NvbnN0e2N1cnJlbnRPZmZzZXQ6ZixuZXh0T2Zmc2V0OnZ9PWwu''@;'; put 'put ''Z2V0Vmlld1NpemUoKSxNPW5ldyBBZmUoZixhKSxJPW5ldyBBZmUodixkKSxHPVtdO2ZvcihsZXQgaWU9MDtpZTxoO2llKyspe2NvbnN0IHVlPU0uZ2V0KGllKSx5ZT1JLmdldChpZSk7aWYoLTE9PT15ZSlHLnB1c2goWyJyZW1vdmUiLHVlXSk7ZWxzZSBpZigtMT09PXVlKSFsLmlzU2hhcmVk''@;'; put 'put ''KCl8fGwuaXNTaGFyZWQoKSYmbC5pc1BsYWNlT24oMik/Ry5wdXNoKFsiYXBwZW5kIix5ZV0pOkcucHVzaChbInByZXBlbmQiLHllXSk7ZWxzZSBpZih5ZT51ZSlNLmhhcyh5ZSkmJihNLnJlbW92ZSh5ZSksZDw9TS5sZW5ndGgmJihoLT0xKSksRy5wdXNoKFsicmVwbGFjZSIseWUsdWVdKTtl''@;'; put 'put ''bHNlIGlmKHllPHVlKXtjb25zdCBFZT1NLnByZXBlbmQoeWUpO0cucHVzaChbImluc2VydF9iZWZvcmUiLHllLHVlLEVlXSl9ZWxzZSBHLnB1c2goWyJub25lIix5ZV0pfXJldHVybiBHfX1mdW5jdGlvbiBwXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVkplKGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IEJKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga2Zle2NvbnN0cnVjdG9yKGwsYSl7cF8odGhpcywicm9vdE5vZGUiLHZvaWQgMCkscF8odGhpcywibm9kZXNQb29sIix2b2lkIDApLHBfKHRoaXMsInNpemVTZXQi''@;'; put 'put ''LG5ldyBJSmUpLHBfKHRoaXMsImNvbGxlY3RlZE5vZGVzIixbXSkscF8odGhpcywidmlld0RpZmZlciIsbmV3IE5KZSh0aGlzLnNpemVTZXQpKSxwXyh0aGlzLCJsZWFkcyIsW10pLHRoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNl''@;'; put 'put ''dC5zZXRTaXplKGwpLHRoaXN9c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jb2xsZWN0ZWROb2Rlc1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9kZXNbbC0xXTpudWxsfWFwcGx5Q29tbWFuZChsKXtjb25zdHtyb290Tm9kZTphfT10aGlzLFtkLGgs''@;'; put 'put ''Zix2XT1sLE09dGhpcy5ub2Rlc1Bvb2woaCk7c3dpdGNoKHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChNKSxkKXtjYXNlInByZXBlbmQiOmEuaW5zZXJ0QmVmb3JlKE0sYS5maXJzdENoaWxkKTticmVhaztjYXNlImFwcGVuZCI6YS5hcHBlbmRDaGlsZChNKTticmVhaztjYXNlImluc2VydF9i''@;'; put 'put ''ZWZvcmUiOmEuaW5zZXJ0QmVmb3JlKE0sdGhpcy5ub2Rlc1Bvb2woZikpLGEucmVtb3ZlQ2hpbGQodGhpcy5ub2Rlc1Bvb2wodikpO2JyZWFrO2Nhc2UicmVwbGFjZSI6YS5yZXBsYWNlQ2hpbGQoTSx0aGlzLm5vZGVzUG9vbChmKSk7YnJlYWs7Y2FzZSJyZW1vdmUiOmEucmVtb3ZlQ2hpbGQo''@;'; put 'put ''TSl9fXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLmxlYWRzPXRoaXMudmlld0RpZmZlci5kaWZmKCl9cmVuZGVyKCl7dGhpcy5sZWFkcy5sZW5ndGg+MCYmdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX1lbmQoKXtmb3IoO3RoaXMubGVhZHMu''@;'; put 'put ''bGVuZ3RoPjA7KXRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9fWNsYXNzIERmZSBleHRlbmRzIGtmZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBl''@;'; put 'put ''bmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1mdW5jdGlvbiBJZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGpKZShjKXt2YXIgbD1mdW5jdGlvbiB6SmUoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFVKZXtjb25zdHJ1Y3RvcihsKXtJZmUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksSWZlKHRoaXMsInBvb2wiLG5ldyBNYXApLHRoaXMubm9kZVR5cGU9bC50b1VwcGVyQ2FzZSgpfXNldFJvb3REb2N1''@;'; put 'put ''bWVudChsKXt0aGlzLnJvb3REb2N1bWVudD1sfW9idGFpbihsLGEpe2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBhP2Ake2x9eCR7YX1gOmwudG9TdHJpbmcoKTtpZih0aGlzLnBvb2wuaGFzKGgpKXJldHVybiB0aGlzLnBvb2wuZ2V0KGgpO2NvbnN0IGY9dGhpcy5yb290RG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCh0aGlzLm5vZGVUeXBlKTtyZXR1cm4gdGhpcy5wb29sLnNldChoLGYpLGZ9fWZ1bmN0aW9uIExFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaSmUoYyl7dmFyIGw9ZnVuY3Rpb24gV0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y''@;'; put 'put ''ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY31jbGFzcyBPRXtjb25zdHJ1Y3RvcihsLGEpe0xFKHRoaXMsIm5vZGVzUG9vbCIsbnVsbCksTEUodGhpcywibm9kZVR5cGUiLHZvaWQgMCksTEUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksTEUodGhpcywidGFibGUiLG51bGwpLExFKHRoaXMsInJlbmRlcmVkTm9kZXMi''@;'; put 'put ''LDApLHRoaXMubm9kZXNQb29sPSJzdHJpbmciPT10eXBlb2YgbD9uZXcgVUplKGwpOm51bGwsdGhpcy5ub2RlVHlwZT1sLHRoaXMucm9vdE5vZGU9YX1zZXRUYWJsZShsKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlz''@;'; put 'put ''LnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319ZnVuY3Rpb24gUmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZSmUoYyl7dmFyIGw9ZnVuY3Rpb24gR0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo''@;'; put 'put ''dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu''@;'; put 'put ''ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkSmUg''@;'; put 'put ''ZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUSCIpLFJmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksUmZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9y''@;'; put 'put ''ZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRl''@;'; put 'put ''cnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlzLnRhYmxlO2ZvcihsZXQgdj0wO3Y8bDt2Kyspe2NvbnN0IE09dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYpLEk9aC5nZXRSZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1NO2NvbnN0IEc9dGhpcy5vYnRhaW5P''@;'; put 'put ''cmRlclZpZXcoSSksaWU9Zi5vYnRhaW5PcmRlclZpZXcoSSk7Ry5hcHBlbmRWaWV3KGllKS5zZXRTaXplKGQpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgdWU9ZC0xO3VlPj0wO3VlLS0pe0cucmVuZGVyKCk7Y29uc3QgeWU9Ry5nZXRDdXJyZW50Tm9kZSgpO3llLmNsYXNzTmFtZT0i''@;'; put 'put ''Iix5ZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksajcoeWUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2byh5ZSxbWyJyb2xlIiwicm93aGVhZGVyIl0sWyJzY29wZSIsInJvdyJdLHYkKHVlKzEpLE43''@;'; put 'put ''KC0xKV0pLGFbdWVdKE0seWUsdWUpfUcuZW5kKCl9fX1jbGFzcyBLSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xldCBkPXRoaXMucm9vdE5v''@;'; put 'put ''ZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IE09MCxJPWw7TTxJO00rKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW01dLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''InRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKSksdGhpcy5yZW5k''@;'; put 'put ''ZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgTT1sO008djtNKyspdGhpcy5yb290''@;'; put 'put ''Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZ4cChkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwicm93Z3Jv''@;'; put 'put ''dXAiXV0pO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdHtjb2x1bW5IZWFkZXJGdW5jdGlvbnM6ZCxjb2x1bW5zVG9SZW5kZXI6aCxyb3dIZWFkZXJzQ291bnQ6Zn09dGhpcy50YWJsZSx2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1thXTt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYm''@;'; put 'put ''dm8odixbWyJyb2xlIiwicm93Il0sQTJlKGErMSldKTtmb3IobGV0IE09LTEqZjtNPGg7TSs9MSl7Y29uc3QgST10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoTSksRz12LmNoaWxkTm9kZXNbTStmXTtHLmNsYXNzTmFtZT0iIixHLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxq''@;'; put 'put ''NyhHLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oRyxbdiQoTSsxK3RoaXMudGFibGUucm93SGVhZGVyc0NvdW50KSxONygtMSksWyJyb2xlIiwiY29sdW1uaGVhZGVyIl0sLi4uTT49MD9bWyJzY29w''@;'; put 'put ''ZSIsImNvbCJdXTpbWyJyb2xlIiwicm93Il1dXSksZFthXShJLEcsYSl9fX19bGV0IExmZT0hMTtjbGFzcyBxSmUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRh''@;'; put 'put ''YmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJv''@;'; put 'put ''b3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTshTGZlJiZsPjFlMyYmKExmZT0hMCxp''@;'; put 'put ''bChnbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIGNvbHVtbnMuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0''@;'; put 'put ''aCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxDb2x1bW5zIiBvcHRpb24uYCkpO2ZvcihsZXQgaD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFk''@;'; put 'put ''ZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFdpZHRoKGYpO3Ro''@;'; put 'put ''aXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2QmJlRpKGQsInJvd0hlYWRlciIpfX1sZXQgT2ZlPSExO2NsYXNzIGVRZSBleHRlbmRzIE9Fe2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCks''@;'; put 'put ''ZnVuY3Rpb24gWEplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKSmUoYyl7dmFyIGw9ZnVuY3Rpb24gUUplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJWaWV3Iix2b2lkIDApLHRoaXMub3JkZXJWaWV3''@;'; put 'put ''PW5ldyBrZmUobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSkpfWdldFJlbmRlcmVkTm9kZShsKXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuZ2V0Tm9kZShsKX1oYXNTdGFsZUNvbnRlbnQobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3Lmhhc1N0YWxlQ29udGVudChsKX1yZW5kZXIoKXtjb25z''@;'; put 'put ''dHtyb3dzVG9SZW5kZXI6bH09dGhpcy50YWJsZTshT2ZlJiZsPjFlMyYmKE9mZT0hMCxpbChnbGBQZXJmb3JtYW5jZSB0aXA6IEhhbmRzb250YWJsZSByZW5kZXJlZCBtb3JlIHRoYW4gMTAwMCB2aXNpYmxlIHJvd3MuXHgyMAogICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIg''@;'; put 'put ''b2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsUm93cyIgb3B0aW9uLmApKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8odGhpcy5yb290Tm9kZSxbWyJyb2xlIiwi''@;'; put 'put ''cm93Z3JvdXAiXV0pLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGg9MDtoPGw7aCsrKXt0aGlzLm9yZGVyVmlldy5yZW5kZXIoKTtjb25zdCBmPXRoaXMub3JkZXJWaWV3LmdldEN1''@;'; put 'put ''cnJlbnROb2RlKCksdj10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoaCk7dmFyIGEsZDt0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdm8oZixbWyJyb2xlIiwicm93Il0sQTJlKHYrKG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PWR8''@;'; put 'put ''fG51bGw9PT0oZD1kLmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbHVtbkhlYWRlcnMubGVuZ3RoKSYmdm9pZCAwIT09YT9hOjApKzEpXSksKHYrMSklMj09MD9wbyhmLCJodF9fcm93X2V2ZW4iKXx8KGxvKGYsImh0X19yb3dfb2RkIiksVGkoZiwiaHRfX3Jvd19l''@;'; put 'put ''dmVuIikpOnBvKGYsImh0X19yb3dfb2RkIil8fChsbyhmLCJodF9fcm93X2V2ZW4iKSxUaShmLCJodF9fcm93X29kZCIpKX10aGlzLm9yZGVyVmlldy5lbmQoKX19ZnVuY3Rpb24gUGZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0UWUoYyl7dmFyIGw9ZnVuY3Rpb24gblFlKGMsbCl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p''@;'; put 'put ''dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyByUWUgZXh0ZW5kcyBPRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLFBmZSh0aGlzLCJvcmRlclZpZXdzIixuZXcgV2Vha01hcCksUGZlKHRoaXMsInNvdXJjZVJvd0luZGV4IiwwKX1v''@;'; put 'put ''YnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihhPW5ldyBEZmUobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVy''@;'; put 'put ''Vmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEscm93czpkLHJvd0hlYWRlcnM6aH09dGhpcy50YWJsZTtmb3IobGV0IE09MDtNPGw7TSsrKXtjb25zdCBJPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShNKSxHPWQu''@;'; put 'put ''Z2V0UmVuZGVyZWROb2RlKE0pO3RoaXMuc291cmNlUm93SW5kZXg9STtjb25zdCBpZT10aGlzLm9idGFpbk9yZGVyVmlldyhHKSx1ZT1oLm9idGFpbk9yZGVyVmlldyhHKTtpZS5wcmVwZW5kVmlldyh1ZSkuc2V0U2l6ZShhKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IHllPTA7eWU8''@;'; put 'put ''YTt5ZSsrKXtpZS5yZW5kZXIoKTtjb25zdCBFZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoeWUpLGplPWllLmdldEN1cnJlbnROb2RlKCk7dmFyIGYsdjtwbyhqZSwiaGlkZSIpfHwoamUuY2xhc3NOYW1lPSIiKSxqZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksamUucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJkaXIiKSxqNyhqZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoSSxFZSxqZSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZvKGplLFsuLi5qZS5oYXNBdHRyaWJ1dGUoInJvbGUi''@;'; put 'put ''KT9bXTpbWyJyb2xlIiwiZ3JpZGNlbGwiXV0sTjcoLTEpLHYkKEVlKyhudWxsIT09KGY9bnVsbD09PSh2PXRoaXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT12fHxudWxsPT09KHY9di5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09dj92b2lkIDA6di5yb3dIZWFkZXJzLmxlbmd0aCkm''@;'; put 'put ''JnZvaWQgMCE9PWY/ZjowKSsxKV0pfWllLmVuZCgpfX19ZnVuY3Rpb24gSnUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGlRZShjKXt2YXIgbD1mdW5jdGlvbiBhUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG9R''@;'; put 'put ''ZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJlbmRlcmVyOmEsc3R5bGVzSGFuZGxlcjpkfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307SnUodGhpcywicm9vdE5vZGUiLHZvaWQgMCksSnUodGhpcywicm9vdERvY3VtZW50Iix2b2lk''@;'; put 'put ''IDApLEp1KHRoaXMsInJvd0hlYWRlcnMiLG51bGwpLEp1KHRoaXMsImNvbHVtbkhlYWRlcnMiLG51bGwpLEp1KHRoaXMsImNvbEdyb3VwIixudWxsKSxKdSh0aGlzLCJyb3dzIixudWxsKSxKdSh0aGlzLCJjZWxscyIsbnVsbCksSnUodGhpcywicm93RmlsdGVyIixudWxsKSxKdSh0aGlzLCJj''@;'; put 'put ''b2x1bW5GaWx0ZXIiLG51bGwpLEp1KHRoaXMsInJvd1V0aWxzIixudWxsKSxKdSh0aGlzLCJjb2x1bW5VdGlscyIsbnVsbCksSnUodGhpcywicm93c1RvUmVuZGVyIiwwKSxKdSh0aGlzLCJjb2x1bW5zVG9SZW5kZXIiLDApLEp1KHRoaXMsInJvd0hlYWRlckZ1bmN0aW9ucyIsW10pLEp1KHRo''@;'; put 'put ''aXMsInJvd0hlYWRlcnNDb3VudCIsMCksSnUodGhpcywiY29sdW1uSGVhZGVyRnVuY3Rpb25zIixbXSksSnUodGhpcywiY29sdW1uSGVhZGVyc0NvdW50IiwwKSxKdSh0aGlzLCJjZWxsUmVuZGVyZXIiLHZvaWQgMCksSnUodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLHZvaWQgMCksSnUodGhp''@;'; put 'put ''cywic3R5bGVzSGFuZGxlciIsdm9pZCAwKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5yb290RG9jdW1lbnQ9dGhpcy5yb290Tm9kZS5vd25lckRvY3VtZW50LHRoaXMuY2VsbFJlbmRlcmVyPWEsdGhpcy5zdHlsZXNIYW5kbGVyPWR9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7dGhpcy5hY3RpdmVP''@;'; put 'put ''dmVybGF5TmFtZT1sfXNldEF4aXNVdGlscyhsLGEpe3RoaXMucm93VXRpbHM9bCx0aGlzLmNvbHVtblV0aWxzPWF9c2V0Vmlld3BvcnRTaXplKGwsYSl7dGhpcy5yb3dzVG9SZW5kZXI9bCx0aGlzLmNvbHVtbnNUb1JlbmRlcj1hfXNldEZpbHRlcnMobCxhKXt0aGlzLnJvd0ZpbHRlcj1sLHRo''@;'; put 'put ''aXMuY29sdW1uRmlsdGVyPWF9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3RoaXMucm93SGVhZGVyRnVuY3Rpb25zPWwsdGhpcy5yb3dIZWFkZXJzQ291bnQ9bC5sZW5ndGgsdGhpcy5jb2x1bW5IZWFkZXJGdW5jdGlvbnM9YSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD1hLmxlbmd0''@;'; put 'put ''aH1zZXRSZW5kZXJlcnMoKXtsZXR7cm93SGVhZGVyczpsLGNvbHVtbkhlYWRlcnM6YSxjb2xHcm91cDpkLHJvd3M6aCxjZWxsczpmfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307bC5zZXRUYWJsZSh0aGlzKSxhLnNldFRhYmxlKHRo''@;'; put 'put ''aXMpLGQuc2V0VGFibGUodGhpcyksaC5zZXRUYWJsZSh0aGlzKSxmLnNldFRhYmxlKHRoaXMpLHRoaXMucm93SGVhZGVycz1sLHRoaXMuY29sdW1uSGVhZGVycz1hLHRoaXMuY29sR3JvdXA9ZCx0aGlzLnJvd3M9aCx0aGlzLmNlbGxzPWZ9cmVuZGVyZWRSb3dUb1NvdXJjZShsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXJlZENvbHVtblRvU291cmNlKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfWlzQXJpYUVuYWJsZWQoKXtyZXR1cm4gdGhpcy5yb3dVdGlscy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''ImFyaWFUYWdzIil9cmVuZGVyKCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMuYWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRo''@;'; put 'put ''aXMucm93SGVhZGVycy5yZW5kZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1h''@;'; put 'put ''LmdldFJlbmRlcmVkTm9kZShkKSxmPXRoaXMucm93VXRpbHM7aWYoaC5maXJzdENoaWxkKXtjb25zdCB2PXRoaXMucmVuZGVyZWRSb3dUb1NvdXJjZShkKSxNPWYuZ2V0SGVpZ2h0QnlPdmVybGF5TmFtZSh2LHRoaXMuYWN0aXZlT3ZlcmxheU5hbWUpLEc9dGhpcy5zdHlsZXNIYW5kbGVyLmFy''@;'; put 'put ''ZUNlbGxzQm9yZGVyQm94KCk/MDoxO2guZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQ9TT9NLUcrInB4IjoiIn19fX1jbGFzcyBzUWV7Y29uc3RydWN0b3IoKXtsZXR7VEFCTEU6bCxUSEVBRDphLENPTEdST1VQOmQsVEJPRFk6aCxyb3dVdGlsczpmLGNvbHVtblV0aWxzOnYsY2VsbFJlbmRlcmVy''@;'; put 'put ''Ok0sc3R5bGVzSGFuZGxlcjpJfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgb1FlKGwse2NlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6SX0pLHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHty''@;'; put 'put ''b3dIZWFkZXJzOm5ldyAkSmUsY29sdW1uSGVhZGVyczpuZXcgS0plKGEpLGNvbEdyb3VwOm5ldyBxSmUoZCkscm93czpuZXcgZVFlKGgpLGNlbGxzOm5ldyByUWV9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLHYpfXNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnNldEFjdGl2ZU92ZXJsYXlOYW1lKGwpLHRoaXN9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEZpbHRlcnMobCxhKSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0''@;'; put 'put ''SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKSx0aGlzfWFkanVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19ZnVuY3Rpb24gdUsoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIGxRZShjKXt2YXIgbD1mdW5jdGlvbiBjUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHVRZXtjb25zdHJ1Y3RvcihsLGEpe3VLKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZv''@;'; put 'put ''aWQgMCksdUsodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx1Syh0aGlzLCJoZWFkZXJXaWR0aHMiLG5ldyBNYXApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uV2lk''@;'; put 'put ''dGgiLGwpfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIil9Z2V0SGVhZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09i''@;'; put 'put ''amVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRoKGwpe3JldHVybiB0aGlzLmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29s''@;'; put 'put ''dW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcztsZXQgYT1sLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIik7aWYoYT1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLGEpLG51bGwhPWEp''@;'; put 'put ''e2NvbnN0IGQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLGg9bC5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgdj1BcnJheS5pc0FycmF5KGEpP2FbZl06YTt2PXY/P2gsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KGYsdil9''@;'; put 'put ''fX19ZnVuY3Rpb24gRmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkUWUoYyl7dmFyIGw9ZnVuY3Rpb24gaFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBmUWV7Y29uc3RydWN0b3IobCxhKXtGZmUodGhpcywi''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxGZmUodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9PT1hP2Q6TWF0aC5tYXgoYSxkKSksYX1nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKGwsYSl7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''InJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGwsYSk7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1oJiYoZD12b2lkIDA9PT1kP2g6TWF0aC5tYXgoZCxoKSksZH19Y29uc3QgJDc9InRvcCIsSXA9ImJvdHRv''@;'; put 'put ''bSIsSzc9ImlubGluZV9zdGFydCIscTc9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixCbT0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLEhmZT1bJDcsSXAsSzcscTcsQm1dLHBRZT1uZXcgTWFwKFtbJDcsYGh0X2Nsb25lXyR7JDd9YF0sW0lwLGBodF9jbG9uZV8ke0lwfWBdLFtLNyxg''@;'; put 'put ''aHRfY2xvbmVfJHtLN30gaHRfY2xvbmVfbGVmdGBdLFtxNyxgaHRfY2xvbmVfJHtxN30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW0JtLGBodF9jbG9uZV8ke0JtfSBodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXJgXV0pO2Z1bmN0aW9uIFJwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBnUWUoYyl7dmFyIGw9ZnVuY3Rpb24gbVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBtXz1jbGFzcyB2UWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtScCh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxScCh0aGlz''@;'; put 'put ''LCJkb21CaW5kaW5ncyIsdm9pZCAwKSxScCh0aGlzLCJUQk9EWSIsbnVsbCksUnAodGhpcywiVEhFQUQiLG51bGwpLFJwKHRoaXMsIkNPTEdST1VQIixudWxsKSxScCh0aGlzLCJoYXNUYWJsZUhlaWdodCIsITApLFJwKHRoaXMsImhhc1RhYmxlV2lkdGgiLCEwKSxScCh0aGlzLCJpc1RhYmxl''@;'; put 'put ''VmlzaWJsZSIsITEpLFJwKHRoaXMsInRhYmxlT2Zmc2V0IiwwKSxScCh0aGlzLCJob2xkZXJPZmZzZXQiLDApLHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmlzTWFzdGVyPSJtYXN0ZXIiPT09Zix0aGlzLm5hbWU9Zix0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLmZhY2FkZUdldHRlcj1h''@;'; put 'put ''LHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuaW5zdGFuY2U9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLndvdD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMuVEFCTEU9ZC5yb290VGFibGUsYiQodGhpcy5UQUJMRSksdGhpcy5zcHJlYWRlcj10aGlzLmNyZWF0ZVNwcmVhZGVy''@;'; put 'put ''KHRoaXMuVEFCTEUpLHRoaXMuaGlkZXI9dGhpcy5jcmVhdGVIaWRlcih0aGlzLnNwcmVhZGVyKSx0aGlzLmhvbGRlcj10aGlzLmNyZWF0ZUhvbGRlcih0aGlzLmhpZGVyKSx0aGlzLnd0Um9vdEVsZW1lbnQ9dGhpcy5ob2xkZXIucGFyZW50Tm9kZSx0aGlzLmlzTWFzdGVyJiZ0aGlzLmFsaWdu''@;'; put 'put ''T3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLmZpeFRhYmxlRG9tVHJlZSgpLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0hMTtjb25zdCB2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgi''@;'; put 'put ''cm93SGVhZGVyV2lkdGgiKTt0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJyb3dIZWFkZXJXaWR0aCIsKCk9PnRoaXMuX21vZGlmeVJvd0hlYWRlcldpZHRoKHYpKSx0aGlzLnJvd1V0aWxzPW5ldyBmUWUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy5jb2x1bW5V''@;'; put 'put ''dGlscz1uZXcgdVFlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMudGFibGVSZW5kZXJlcj1uZXcgc1FlKHtUQUJMRTp0aGlzLlRBQkxFLFRIRUFEOnRoaXMuVEhFQUQsQ09MR1JPVVA6dGhpcy5DT0xHUk9VUCxUQk9EWTp0aGlzLlRCT0RZLHJvd1V0aWxzOnRo''@;'; put 'put ''aXMucm93VXRpbHMsY29sdW1uVXRpbHM6dGhpcy5jb2x1bW5VdGlscyxjZWxsUmVuZGVyZXI6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJjZWxsUmVuZGVyZXIiKSxzdHlsZXNIYW5kbGVyOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyfSl9aXMobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5Iiks''@;'; put 'put ''dGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQs''@;'; put 'put ''dGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMu''@;'; put 'put ''VEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk''@;'; put 'put ''aXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlv''@;'; put 'put ''biJdXSksZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdm8oZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBhPWwu''@;'; put 'put ''cGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IXBvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZC5j''@;'; put 'put ''bGFzc05hbWU9Ind0SG9sZGVyIix2byhkLFtONygtMSldKSxhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMuaXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJsZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQucGFyZW50Tm9kZSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSksZC5hcHBlbmRDaGlsZChsKSksdGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoImFyaWFUYWdzIikmJnZvKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3''@;'; put 'put ''dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLE09YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksST1NLmxlbmd0aCxHPWEuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIp''@;'; put 'put ''LGllPUcubGVuZ3RoO2xldCB1ZT1sO2lmKHRoaXMuaXNNYXN0ZXImJihkLmJlZm9yZURyYXcoKSx0aGlzLmhvbGRlck9mZnNldD1VMCh0aGlzLmhvbGRlciksdWU9aC5jcmVhdGVDYWxjdWxhdG9ycyh1ZSksSSYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IEVl''@;'; put 'put ''PWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksamU9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PUVlLGplIT09dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJih1ZT0hMSl9aWYodWUpdGhpcy5pc01hc3RlciYmZC5yZWZy''@;'; put 'put ''ZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9VMCh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgRWU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCksMCksamU9TWF0aC5tYXgodGhpcy5n''@;'; put 'put ''ZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksMCk7dGhpcy5yb3dGaWx0ZXI9bmV3IE1KZShFZSxmLGllKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgX0plKGplLHYsSSk7bGV0IHFlPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2Nv''@;'; put 'put ''bnN0IHJ0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxydCkscWU9ITAhPT1ydC5za2lwUmVuZGVyfXFlJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxHKSwodGhpcy5pcyhJcCl8fHRoaXMuaXMoQm0pKSYmdGhp''@;'; put 'put ''cy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxbXSksdGhpcy5yZXNldE92ZXJzaXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3Vu''@;'; put 'put ''dCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRqdXN0Q29sdW1uSGVhZGVySGVp''@;'; put 'put ''Z2h0cygpLCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKElwKSkmJnRoaXMubWFya092ZXJzaXplZFJvd3MoKSx0aGlzLmlzTWFzdGVyPyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIil8fGguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZC5yZWZy''@;'; put 'put ''ZXNoKCExKSxkLmFwcGx5VG9ET00oKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkpOnRoaXMuaXMoSXApJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0IHllPSExO3JldHVybiB0aGlz''@;'; put 'put ''LmlzTWFzdGVyJiYoeWU9ZC50b3BPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHllPWQuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8eWUpLHllPWQuaW5saW5lU3RhcnRPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHx5''@;'; put 'put ''ZSxkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZkLmJvdHRv''@;'; put 'put ''bUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSkseWU/KGQucmVmcmVzaEFsbCgpLGQuYWRqdXN0RWxlbWVudHNTaXplKCkpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25NYW5hZ2VyLnNldEFjdGl2ZU92ZXJsYXkodGhpcy5mYWNhZGVHZXR0ZXIo''@;'; put 'put ''KSkucmVuZGVyKHVlKSx0aGlzLmlzTWFzdGVyJiZkLmFmdGVyRHJhdygpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt''@;'; put 'put ''bkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO2Q7KWQtPTEsZj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkKSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09b18odiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRD''@;'; put 'put ''b2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5LmlzQXJyYXkoSSk/bnVsbCE9SVtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09SVtkXSk6aXNOYU4oSSl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6''@;'; put 'put ''ZWRDb2x1bW5IZWFkZXJzW2RdPUkpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KElbZF18fEkpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1JW2RdfHxJKSl9YWRq''@;'; put 'put ''dXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdldFNldHRpbmcoImNvbHVt''@;'; put 'put ''bkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2YrKylpZihkW2ZdKXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09''@;'; put 'put ''dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoSXApKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgaD0wO2g8''@;'; put 'put ''ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJvd3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJS''@;'; put 'put ''ZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlRE''@;'; put 'put ''IG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1Rv''@;'; put 'put ''VmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0''@;'; put 'put ''aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZp''@;'; put 'put ''bHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVz''@;'; put 'put ''LmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5n''@;'; put 'put ''KCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhpcy5UQk9EWSkuY2hpbGRO''@;'; put 'put ''b2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlz''@;'; put 'put ''LnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSx2PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYpfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9Um0oYSxbIlREIiwiVEgiXSkpLG51bGw9PT1h''@;'; put 'put ''KXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2RlO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9ZC5wYXJlbnROb2RlO2xldCBmPVAyZShkKSx2PWEuY2VsbEluZGV4O09tKHE3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8T20oJDcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9''@;'; put 'put ''PT1oLm5vZGVOYW1lJiYoZi09aC5jaGlsZE5vZGVzLmxlbmd0aCk6T20oQm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxPbShJcCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10''@;'; put 'put ''aGlzLlRIRUFEP2Y9dGhpcy5yb3dGaWx0ZXIudmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRoaXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxPbShxNyxhLHRoaXMud3RSb290RWxlbWVudCl8fE9tKEs3LGEsdGhpcy53dFJvb3RF''@;'; put 'put ''bGVtZW50KXx8T20oQm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBNJiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGE9bCp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCksZD1vXyh0aGlzLlRCT0RZKS0xLGg9''@;'; put 'put ''dGhpcy53b3Quc3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpLGY9aD94dTpvXyx2PWg/MDoxLE09aD8xOjA7bGV0IEksRyxpZSx1ZSx5ZTtpZihhIT09ZHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKWZvcig7bDspe2wtPTEsaWU9dGhpcy5y''@;'; put 'put ''b3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKSxJPXRoaXMuZ2V0Um93SGVpZ2h0KGllKSx1ZT10aGlzLmdldFRyRm9yUm93KGllKSx5ZT11ZS5xdWVyeVNlbGVjdG9yKCJ0aCIpO2NvbnN0IEVlPTA9PT1pZT9NOjA7Rz15ZT9mKHllKTpmKHVlKS12LCghSSYmdGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpPEctRWV8fEk8RykmJihofHwoRys9MSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tpZV09Ryl9fWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhp''@;'; put 'put ''cy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVhZGVy''@;'; put 'put ''UmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJl''@;'; put 'put ''ZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5n''@;'; put 'put ''ZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigp''@;'; put 'put ''fWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1uQmVm''@;'; put 'put ''b3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVk''@;'; put 'put ''Um93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIp''@;'; put 'put ''PT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlzLnJv''@;'; put 'put ''d1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiBzdSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQoKXtyZXR1cm4geHUodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9c3UodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhp''@;'; put 'put ''cy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD14dSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgpfWlzVmlzaWJsZSgpe3JldHVybiBVNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bWwobCk/bCgpOm51bGw7''@;'; put 'put ''cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5ndGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sTmZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLmdldFJlbmRlcmVk''@;'; put 'put ''Um93c0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dz''@;'; put 'put ''Q291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''fSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07VHAoTmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBWZmU9TmZlLEJmZT17Z2V0''@;'; put 'put ''Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJs''@;'; put 'put ''ZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25z''@;'; put 'put ''dCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0''@;'; put 'put ''UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENv''@;'; put 'put ''bHVtbnNSZW5kZXJlZH0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zVmlzaWJsZX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O1RwKEJm''@;'; put 'put ''ZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRDb2x1bW5zIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGRLPUJmZTtjbGFzcyBoSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsJDcpfX1UbChoSyxWZmUpLFRsKGhLLGRLKTtjb25zdCBf''@;'; put 'put ''UWU9aEs7ZnVuY3Rpb24gblAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZh''@;'; put 'put ''ciBQRT1uZXcgV2Vha1NldDtmdW5jdGlvbiBqZmUoYyl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGluZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzp2fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoYS5tYWluVGFibGVTY3Jv''@;'; put 'put ''bGxhYmxlRWxlbWVudD09PXYpe2xldCBJPW51bGw7aWYobC5nZXRTZXR0aW5nKCJydGxNb2RlIikpe2NvbnN0IGllPWQuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ST1NYXRoLmFicyhpZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVsc2UgST1VMChkLnd0Um9vdEVsZW1lbnQpLmxlZnQ7Y29uc3QgRz1NYXRoLmFicyh3JCh2LHYpKTtpZihJPkcpe2NvbnN0IGllPUMkKHYpO2xldCB1ZT1oLmdldFJvd0hlYWRlcldpZHRoKCk7Zm9yKGxldCB5ZT0xO3llPD1mO3llKyspaWYodWUr''@;'; put 'put ''PWEuc3VtQ2VsbFNpemVzKHllLTEseWUpLEkrdWUtRz49aWUpe2M9eWUtMjticmVha319fXJldHVybiBjfWZ1bmN0aW9uIHpmZShjKXtjb25zdHt0b3BPdmVybGF5Omwsd3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCx0b3RhbFJvd3M6aCxyb290V2luZG93OmZ9PXRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dDtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3Qgdj1VMChhLnd0Um9vdEVsZW1lbnQpLE09T08oZixmKTtpZih2LnRvcD5NKXtjb25zdCBJPW9fKGYpO2xldCBHPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7Zm9yKGxldCBpZT0xO2llPD1oO2llKyspaWYoRys9''@;'; put 'put ''bC5zdW1DZWxsU2l6ZXMoaWUtMSxpZSksdi50b3ArRy1NPj1JKXtjPWllLTI7YnJlYWt9fX1yZXR1cm4gY31jb25zdCBUUWU9Y2xhc3MgRVFle2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB3UWUoYyxsKXsoZnVuY3Rpb24gQ1FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFBFKSxmdW5jdGlvbiBTUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1RZShjKXt2YXIgbD1mdW5jdGlvbiB4UWUoYyxsKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp''@;'; put 'put ''bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6''@;'; put 'put ''YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtpZihsLmNvbDwwfHxsLnJvdzwwKXJldHVybiExO2Nv''@;'; put 'put ''bnN0IGg9dGhpcy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLmNvbCxhKSxmPXRoaXMuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwucm93LGQpO3JldHVybiBofHxmfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbENvbHVtbnM6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJv''@;'; put 'put ''bkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRDb2x1bW5zU3RhcnQ6dixpbmxpbmVTdGFydE92ZXJsYXk6TX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LEk9ImF1''@;'; put 'put ''dG8iPT09YTtpZihJJiZsPHYpcmV0dXJuITE7Y29uc3QgRz10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGllPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtsZXQgdWU9ITE7cmV0dXJuKEkmJihsPEd8fGw+aWUpfHwhSSkmJih1ZT1NLnNjcm9sbFRvKGwsST9sPj10aGlzLmdldExh''@;'; put 'put ''c3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCk6ImVuZCI9PT1hKSksdWV9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYXV0byI7Y29uc3R7ZHJhd246ZCx0b3RhbFJvd3M6aH09''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybiExO2NvbnN0IGY9RmQoYSk7aWYobD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDww''@;'; put 'put ''fHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkUm93c0JvdHRvbTp2LGZpeGVkUm93c1RvcDpNLHRvcE92ZXJsYXk6SX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LEc9ImF1dG8iPT09YTtpZihHJiYobDxNfHxsPmgtdi0xKSlyZXR1cm4hMTtjb25zdCBpZT10aGlzLmdldEZpcnN0''@;'; put 'put ''VmlzaWJsZVJvdygpLHVlPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTtsZXQgeWU9ITE7cmV0dXJuKEcmJihsPGllfHxsPnVlKXx8IUcpJiYoeWU9SS5zY3JvbGxUbyhsLEc/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpOiJib3R0b20iPT09YSkpLHllfWdldEZpcnN0Vmlz''@;'; put 'put ''aWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKX1nZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RWaXNpYmxl''@;'; put 'put ''Um93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiBuUChQRSx0aGlzLHpmZSkuY2FsbCh0aGlz''@;'; put 'put ''LHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKX1nZXRMYXN0VmlzaWJsZUNvbHVt''@;'; put 'put ''bigpe3JldHVybiBuUChQRSx0aGlzLGpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRG''@;'; put 'put ''aXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiBuUChQRSx0aGlzLGpmZSkuY2FsbCh0aGlzLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfX07ZnVuY3Rp''@;'; put 'put ''b24gVWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEUWUoYyl7dmFyIGw9ZnVuY3Rpb24gSVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2XyhjLGwpe3JldHVybiBjLmdldChXZmUoYyxsKSl9ZnVuY3Rp''@;'; put 'put ''b24gWmZlKGMsbCxhKXtyZXR1cm4gYy5zZXQoV2ZlKGMsbCksYSksYX1mdW5jdGlvbiBXZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfZz1uZXcgV2Vha01hcDtjbGFzcyByUHtjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07VWZlKHRoaXMsInJvdyIsbnVsbCksVWZl''@;'; put 'put ''KHRoaXMsImNvbCIsbnVsbCksZnVuY3Rpb24gQVFlKGMsbCxhKXsoZnVuY3Rpb24ga1FlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX0odGhpcyxfZywhMSksWmZlKF9nLHRoaXMsZCksdHlwZW9mIGw8InUiJiZ0eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7Y29uc3R7Y291bnRSb3dzOmEsY291bnRDb2xzOmQsY291bnRSb3dIZWFkZXJzOmgsY291bnRDb2xIZWFkZXJzOmZ9''@;'; put 'put ''PXtjb3VudFJvd3M6MCxjb3VudENvbHM6MCxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6MCwuLi5sfTtyZXR1cm4hKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucm93KXx8IU51bWJlci5pc0ludGVnZXIodGhpcy5jb2wpfHx0aGlzLnJvdzwtZnx8dGhpcy5jb2w8LWh8fHRoaXMu''@;'; put 'put ''cm93Pj1hfHx0aGlzLmNvbD49ZCl9aXNFcXVhbChsKXtyZXR1cm4gbD09PXRoaXN8fHRoaXMucm93PT09bC5yb3cmJnRoaXMuY29sPT09bC5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hdGhpcy5pc0NlbGwoKX1pc0NlbGwoKXtyZXR1cm4gdGhpcy5yb3c+PTAmJnRoaXMuY29sPj0wfWlzUnRsKCl7''@;'; put 'put ''cmV0dXJuIHZfKF9nLHRoaXMpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMu''@;'; put 'put ''Y29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYmKHZfKF9nLHRoaXMpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHZfKF9nLHRo''@;'; put 'put ''aXMpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRoaXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDAp''@;'; put 'put ''LHRoaXN9YXNzaWduKGwpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGw/LnJvdykmJih0aGlzLnJvdz1sLnJvdyksTnVtYmVyLmlzSW50ZWdlcihsPy5jb2wpJiYodGhpcy5jb2w9bC5jb2wpLGwgaW5zdGFuY2VvZiByUCYmWmZlKF9nLHRoaXMsbC5pc1J0bCgpKSx0aGlzfWNsb25lKCl7cmV0''@;'; put 'put ''dXJuIG5ldyByUCh0aGlzLnJvdyx0aGlzLmNvbCx2XyhfZyx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57cm93OnRoaXMucm93LGNvbDp0aGlzLmNvbH19fWNvbnN0IGlQPXJQO2Z1bmN0aW9uIGZLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPUWUoYyl7dmFyIGw9ZnVuY3Rpb24gUFFlKGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVMihjLGwpe3JldHVybiBjLmdldChZZmUoYyxsKSl9ZnVuY3Rpb24gWWZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTmQ9bmV3IFdlYWtNYXA7Y2xhc3MgcEt7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107ZksodGhpcywiaGlnaGxp''@;'; put 'put ''Z2h0IixudWxsKSxmSyh0aGlzLCJmcm9tIixudWxsKSxmSyh0aGlzLCJ0byIsbnVsbCksZnVuY3Rpb24gUlFlKGMsbCxhKXsoZnVuY3Rpb24gTFFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxOZCwhMSksdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24gRlFlKGMsbCxhKXtjLnNldChZZmUoYyxsKSxhKX0oTmQsdGhpcyxo''@;'; put 'put ''KX1zZXRIaWdobGlnaHQobCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzfXNldEZyb20obCl7cmV0dXJuIHRoaXMuZnJvbT1sLmNsb25lKCksdGhpc31zZXRUbyhsKXtyZXR1cm4gdGhpcy50bz1sLmNsb25lKCksdGhpc31ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5oaWdo''@;'; put 'put ''bGlnaHQubm9ybWFsaXplKCksdGhpcy5mcm9tLm5vcm1hbGl6ZSgpLHRoaXMudG8ubm9ybWFsaXplKCksdGhpc31pc1ZhbGlkKGwpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChsKSYmdGhpcy50by5pc1ZhbGlkKGwpfWlzU2luZ2xlKCl7cmV0dXJuIHRoaXMuaXNTaW5nbGVDZWxsKCl8fHRo''@;'; put 'put ''aXMuaXNTaW5nbGVIZWFkZXIoKX1pc1NpbmdsZUNlbGwoKXtyZXR1cm4gdGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNTaW5nbGVIZWFkZXIoKXtyZXR1cm4odGhpcy5m''@;'; put 'put ''cm9tLnJvdzwwfHx0aGlzLmZyb20uY29sPDApJiZ0aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc0hlYWRlcigpe3JldHVybiEoIXRoaXMuZnJvbS5pc0hlYWRlcigpfHwhdGhpcy50by5pc0hlYWRlcigpKXx8dGhpcy5mcm9tLmNvbDww''@;'; put 'put ''JiZ0aGlzLnRvLmNvbDwwfHx0aGlzLmZyb20ucm93PDAmJnRoaXMudG8ucm93PDB9Y29udGFpbnNIZWFkZXJzKCl7cmV0dXJuIHRoaXMuZnJvbS5pc0hlYWRlcigpfHx0aGlzLnRvLmlzSGVhZGVyKCl9Z2V0T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlz''@;'; put 'put ''LnRvLnJvdyktTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5m''@;'; put 'put ''cm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhp''@;'; put 'put ''cy50by5jb2w8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRI''@;'; put 'put ''ZWlnaHQoKX1pbmNsdWRlcyhsKXtjb25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJvdzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1Jhbmdl''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLmluY2x1ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5m''@;'; put 'put ''cm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4''@;'; put 'put ''KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdo''@;'; put 'put ''dENvcm5lcigpKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRP''@;'; put 'put ''dXRlclRvcExlZnRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0''@;'; put 'put ''ZXJUb3BTdGFydENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbHx8dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVy''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbH1pc092ZXJsYXBwaW5nVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0''@;'; put 'put ''T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93fHx0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c+''@;'; put 'put ''PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvd31leHBhbmQobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4obC5yb3c8YS5yb3d8fGwuY29sPGEuY29sfHxsLnJvdz5kLnJvd3x8bC5jb2w+''@;'; put 'put ''ZC5jb2wpJiYodGhpcy5mcm9tPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oYS5yb3csbC5yb3cpLE1hdGgubWluKGEuY29sLGwuY29sKSksdGhpcy50bz10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGQucm93LGwucm93KSxNYXRoLm1heChkLmNvbCxsLmNvbCkpLCEw''@;'; put 'put ''KX1leHBhbmRCeVJhbmdlKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuZ2V0T3V0ZXJUb3BTdGFy''@;'; put 'put ''dENvcm5lcigpLGg9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGY9dGhpcy5nZXREaXJlY3Rpb24oKSx2PWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLE09bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLEk9TWF0aC5taW4oZC5yb3csdi5yb3cpLEc9TWF0aC5taW4oZC5jb2ws''@;'; put 'put ''di5jb2wpLGllPU1hdGgubWF4KGgucm93LE0ucm93KSx1ZT1NYXRoLm1heChoLmNvbCxNLmNvbCkseWU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhJLEcpLEVlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaWUsdWUpO3JldHVybiB0aGlzLmZyb209eWUsdGhpcy50bz1FZSx0aGlzLnNldERpcmVj''@;'; put 'put ''dGlvbihmKSxhJiYodGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCkpLCEwfWdldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmZyb20uaXNOb3J0aFdlc3RPZih0aGlzLnRvKT8iTlct''@;'; put 'put ''U0UiOnRoaXMuZnJvbS5pc05vcnRoRWFzdE9mKHRoaXMudG8pPyJORS1TVyI6dGhpcy5mcm9tLmlzU291dGhFYXN0T2YodGhpcy50byk/IlNFLU5XIjp0aGlzLmZyb20uaXNTb3V0aFdlc3RPZih0aGlzLnRvKT8iU1ctTkUiOnZvaWQgMH1zZXREaXJlY3Rpb24obCl7c3dpdGNoKGwpe2Nhc2Ui''@;'; put 'put ''TlctU0UiOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCldO2JyZWFrO2Nhc2UiTkUtU1ciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLHRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU0UtTlciOlt0aGlzLmZyb20sdGhpcy50b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCldO2JyZWFrO2Nhc2UiU1ctTkUiOlt0aGlzLmZyb20sdGhpcy50''@;'; put 'put ''b109W3RoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCldfX1nZXRWZXJ0aWNhbERpcmVjdGlvbigpe3JldHVyblsiTkUtU1ciLCJOVy1TRSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/Ik4tUyI6IlMtTiJ9Z2V0SG9y''@;'; put 'put ''aXpvbnRhbERpcmVjdGlvbigpe3JldHVyblsiTlctU0UiLCJTVy1ORSJdLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSk+LTE/IlctRSI6IkUtVyJ9ZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJl''@;'; put 'put ''Y3Rpb24oIlNXLU5FIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIil9fWZsaXBEaXJlY3Rpb25I''@;'; put 'put ''b3Jpem9udGFsbHkoKXtzd2l0Y2godGhpcy5nZXREaXJlY3Rpb24oKSl7Y2FzZSJOVy1TRSI6dGhpcy5zZXREaXJlY3Rpb24oIk5FLVNXIik7YnJlYWs7Y2FzZSJORS1TVyI6dGhpcy5zZXREaXJlY3Rpb24oIk5XLVNFIik7YnJlYWs7Y2FzZSJTRS1OVyI6dGhpcy5zZXREaXJlY3Rpb24oIlNX''@;'; put 'put ''LU5FIik7YnJlYWs7Y2FzZSJTVy1ORSI6dGhpcy5zZXREaXJlY3Rpb24oIlNFLU5XIil9fWdldFRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlz''@;'; put 'put ''LnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcExlZnRDb3JuZXIoKXtyZXR1cm4gVTIoTmQsdGhpcyk/dGhpcy5nZXRUb3BFbmRDb3JuZXIoKTp0aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCl9Z2V0Qm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5t''@;'; put 'put ''YXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbUVu''@;'; put 'put ''ZENvcm5lcigpfWdldFRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BSaWdodENvcm5lcigpe3Jl''@;'; put 'put ''dHVybiBVMihOZCx0aGlzKT90aGlzLmdldFRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRUb3BFbmRDb3JuZXIoKX1nZXRCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRo''@;'; put 'put ''aXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpfWdldE91dGVyVG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIo''@;'; put 'put ''KTp0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKX1nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRP''@;'; put 'put ''dXRlckJvdHRvbVJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKX1nZXRPdXRlclRvcEVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgu''@;'; put 'put ''bWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIFUyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3Ju''@;'; put 'put ''ZXIoKX1nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tTGVmdENvcm5lcigpe3Jl''@;'; put 'put ''dHVybiBVMihOZCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCl9aXNDb3JuZXIobCl7cmV0dXJuIGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJU''@;'; put 'put ''b3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwpe3JldHVybiBsIGluc3RhbmNlb2YgaVAmJihsLmlzRXF1YWwodGhp''@;'; put 'put ''cy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5l''@;'; put 'put ''cigpKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lkIDApfWdldEJvcmRlcnNTaGFyZWRXaXRoKGwpe2lmKCF0aGlzLmluY2x1ZGVzUmFuZ2Uo''@;'; put 'put ''bCkpcmV0dXJuW107Y29uc3QgYV90b3A9TWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9ib3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGFfcmlnaHQ9TWF0aC5tYXgo''@;'; put 'put ''dGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksZF90b3A9TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdyksZF9ib3R0b209TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdyksZF9sZWZ0PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpLGRfcmlnaHQ9TWF0aC5tYXgobC5mcm9tLmNv''@;'; put 'put ''bCxsLnRvLmNvbCksaD1bXTtyZXR1cm4gYV90b3A9PT1kX3RvcCYmaC5wdXNoKCJ0b3AiKSxhX3JpZ2h0PT09ZF9yaWdodCYmaC5wdXNoKFUyKE5kLHRoaXMpPyJsZWZ0IjoicmlnaHQiKSxhX2JvdHRvbT09PWRfYm90dG9tJiZoLnB1c2goImJvdHRvbSIpLGFfbGVmdD09PWRfbGVmdCYmaC5w''@;'; put 'put ''dXNoKFUyKE5kLHRoaXMpPyJyaWdodCI6ImxlZnQiKSxofWdldElubmVyKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29s''@;'; put 'put ''O2Y8PWEuY29sO2YrKykodGhpcy5mcm9tLnJvdyE9PWh8fHRoaXMuZnJvbS5jb2whPT1mKSYmKHRoaXMudG8ucm93IT09aHx8dGhpcy50by5jb2whPT1mKSYmZC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Z2V0QWxsKCl7Y29uc3QgbD10aGlzLmdldE91dGVy''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKylkLnB1c2gobC5yb3c9PT1oJiZsLmNvbD09PWY/bDphLnJvdz09PWgmJmEuY29sPT09Zj9h''@;'; put 'put ''OnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Zm9yQWxsKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBoPWEucm93O2g8PWQucm93O2grKylmb3IobGV0IGY9YS5jb2w7''@;'; put 'put ''Zjw9ZC5jb2w7ZisrKWlmKCExPT09bChoLGYpKXJldHVybn1jbG9uZSgpe3JldHVybiBuZXcgcEsodGhpcy5oaWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sVTIoTmQsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVj''@;'; put 'put ''dCgpfX1fY3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiBuZXcgaVAobCxhLFUyKE5kLHRoaXMpKX19Y29uc3QgZ0s9cEs7ZnVuY3Rpb24gWjIoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhRZShjKXt2YXIgbD1mdW5jdGlvbiBOUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj''@;'; put 'put ''KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG1Le2dldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGoyKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7WjIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxaMih0aGlzLCJ3dFNjcm9sbCIsdm9pZCAwKSxaMih0aGlzLCJ3dFZpZXdw''@;'; put 'put ''b3J0Iix2b2lkIDApLFoyKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksWjIodGhpcywic2VsZWN0aW9uTWFuYWdlciIsdm9pZCAwKSxaMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLFoyKHRoaXMsImd1aWQiLGB3dF8ke2gkKCl9YCksWjIodGhpcywiZHJhd0ludGVycnVwdGVkIiwhMSksWjIo''@;'; put 'put ''dGhpcywiZHJhd24iLCExKSxaMih0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsIm1hc3RlciIpLFoyKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLFoyKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kb21CaW5kaW5ncz17cm9vdFRhYmxlOmwscm9vdERvY3VtZW50Omwub3duZXJE''@;'; put 'put ''b2N1bWVudCxyb290V2luZG93Omwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld30sdGhpcy53dFNldHRpbmdzPWEsdGhpcy53dFNjcm9sbD1uZXcgVFFlKHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMud3RUYWJsZS5USEVB''@;'; put 'put ''RC5jaGlsZE5vZGVzLmxlbmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpe2ZvcihsZXQgYT0wLGQ9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKylsLnB1c2godGhpcy53dFRhYmxl''@;'; put 'put ''LlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1thXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oYSxkKXtQbShkLGxbYV0pfV0p''@;'; put 'put ''fX1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBpUChsLGEsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gbmV3IGdLKGwsYSxkLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRy''@;'; put 'put ''YXcoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSwhdGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpfHxWMmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9k''@;'; put 'put ''ZSk/dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITA6dGhpcy53dFRhYmxlLmRyYXcobCksdGhpc31nZXRDZWxsKGwpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpO2NvbnN0IGQ9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZp''@;'; put 'put ''eGVkQ29sdW1uc1N0YXJ0Iik7aWYobC5yb3c8aCYmbC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwuY29sPHYmJmwucm93Pj1kLWYpe2lmKHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVy''@;'; put 'put ''bGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfWVsc2V7aWYobC5jb2w8dilyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8ZCYmbC5yb3c+PWQt''@;'; put 'put ''ZiYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpfXNj''@;'; put 'put ''cm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVy''@;'; put 'put ''dGljYWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWdldFZpZXdwb3J0KCl7cmV0dXJuW3RoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGhpcy53dFRh''@;'; put 'put ''YmxlLmdldExhc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCldfWRlc3Ryb3koKXt0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpLHRoaXMud3RFdmVudC5kZXN0cm95KCl9Y3JlYXRlU2Nyb2xsRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgZHJh''@;'; put 'put ''d24oKXtyZXR1cm4gbC5kcmF3bn0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxl''@;'; put 'put ''fSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJuIGwud3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gbC5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKX0sZ2V0IHRvdGFsQ29sdW1ucygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4''@;'; put 'put ''ZWRSb3dzQm90dG9tKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX0sZ2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19Z2V0VGFibGVEYW8oKXtjb25zdCBs''@;'; put 'put ''PXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHBhcmVudFRhYmxlT2Zmc2V0KCl7cmV0dXJuIGwuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldH0sZ2V0IGNsb25lU291cmNlKCl7cmV0dXJuIGwuY2xvbmVTb3VyY2V9LGdldCB3b3Jrc3BhY2VXaWR0aCgpe3JldHVy''@;'; put 'put ''biBsLnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RPdmVybGF5cygpe3JldHVybiBsLnd0T3ZlcmxheXN9LGdldCBzZWxlY3Rpb25NYW5hZ2VyKCl7cmV0dXJuIGwuc2VsZWN0aW9uTWFuYWdlcn0sZ2V0''@;'; put 'put ''IHN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gbC5zdHlsZXNIYW5kbGVyfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5kcmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmll''@;'; put 'put ''d3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVy''@;'; put 'put ''biBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblZpc2libGUoKXty''@;'; put 'put ''ZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1''@;'; put 'put ''bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgp''@;'; put 'put ''e3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBs''@;'; put 'put ''Lnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgZW5kUm93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJv''@;'; put 'put ''d3NWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NS''@;'; put 'put ''ZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgY29sdW1uSGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpfSxn''@;'; put 'put ''ZXQgcm93SGVhZGVycygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpfX19fWZ1bmN0aW9uIEdmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVlFlKGMpe3ZhciBsPWZ1bmN0aW9uIEJRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgalFlIGV4dGVuZHMgbUt7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksR2ZlKHRoaXMsImNsb25lU291cmNlIix2b2lkIDApLEdmZSh0aGlzLCJjbG9uZU92ZXJsYXkiLHZvaWQgMCk7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLmNsb25lU291cmNlPWQuc291cmNlLHRoaXMuY2xvbmVPdmVybGF5PWQub3ZlcmxheSx0aGlzLnN0eWxlc0hhbmRsZXI9ZC5zdHlsZXNIYW5kbGVyLHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRh''@;'; put 'put ''YmxlRGFvKCksaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PWQudmlld3BvcnQsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyPWQuc2VsZWN0aW9uTWFuYWdlcix0aGlzLnd0RXZlbnQ9bmV3IEVmZShoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRp''@;'; put 'put ''bmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIsZC5ldmVudCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIEZFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7KGZ1bmN0aW9uIHpRZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''VVFlKGMpe3ZhciBsPWZ1bmN0aW9uIFpRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxUcCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRo''@;'; put 'put ''aXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWg7Y29uc3R7VEFCTEU6dixoaWRlcjpNLHNwcmVhZGVyOkksaG9sZGVyOkcsd3RSb290RWxlbWVudDppZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Ny''@;'; put 'put ''b2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPXYsdGhpcy5oaWRlcj1NLHRoaXMuc3ByZWFkZXI9SSx0aGlzLmhvbGRlcj1HLHRoaXMud3RSb290RWxlbWVudD1pZSx0aGlzLnRyaW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKSx0aGlzLm5l''@;'; put 'put ''ZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX1oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXtyZXR1cm4gdGhpcy5uZWVkRnVsbFJlbmRlciE9PXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJp''@;'; put 'put ''bmcobCl7ImJlZm9yZSI9PT1sJiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKT90aGlzLm5lZWRGdWxsUmVuZGVyPSEwOiJhZnRlciI9PT1sJiYhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCkmJih0aGlzLm5lZWRGdWxsUmVuZGVyPSExKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuITB9dXBkYXRl''@;'; put 'put ''VHJpbW1pbmdDb250YWluZXIoKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPWFfKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGlu''@;'; put 'put ''Z3M7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjpiRShsLlRBQkxFKX1nZXRSZWxh''@;'; put 'put ''dGl2ZUNlbGxQb3NpdGlvbihsLGEsZCl7aWYoITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGwpKXJldHVybiB2b2lkIGlsKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBoPXRoaXMu''@;'; put 'put ''bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj1kPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksTT1hPj10aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEk9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLEc9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKEkpLHRvcDpJLm9mZnNl''@;'; put 'put ''dFRvcH0saWU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRvcH07bGV0IHVlPW51bGw7cmV0dXJuIHVlPWg/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyh2LGYsaWUsRyk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3Np''@;'; put 'put ''dGlvbldpdGhpbkhvbGRlcih2LE0sZixpZSxHKSx1ZX1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCl7cmV0dXJuIHRoaXMuaXNSdGwoKT9sLm9mZnNldFBhcmVudC5vZmZzZXRXaWR0aC1sLm9mZnNldExlZnQtbC5vZmZzZXRXaWR0aDpsLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9z''@;'; put 'put ''aXRpb25XaXRoaW5XaW5kb3cobCxhLGQsaCl7Y29uc3QgZj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9MCxNPTA7aWYoYSl7bGV0IEk9Zi5sZWZ0O3RoaXMuaXNSdGwoKSYmKEk9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93''@;'; put 'put ''LmlubmVyV2lkdGgtKGYubGVmdCtmLndpZHRoK2YwKCkpKSx2PUk8PTA/LTEqSTowfWVsc2Ugdj1oLnN0YXJ0O3JldHVybiBNPWw/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLnRvcDpoLnRvcCx7c3RhcnQ6ZC5zdGFydCt2LHRvcDpkLnRv''@;'; put 'put ''cCtNfX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihsLGEsZCxoLGYpe2NvbnN0IHZfaG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHZfdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BP''@;'; put 'put ''dmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7bGV0IE09MCxJPTA7aWYoZHx8KE09dl9ob3Jpem9udGFsLWYuc3RhcnQpLGEpe2NvbnN0IEc9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0k9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxF''@;'; put 'put ''LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtHLnRvcH1lbHNlIGx8fChJPXZfdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LU0sdG9wOmgudG9wLUl9fW1ha2VDbG9uZSgpe2lmKC0xPT09SGZlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25l''@;'; put 'put ''IHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmwsd3RTZXR0aW5nczphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgidGFibGUiKSxNPWwud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2YuY2xhc3NOYW1lPWAke3BRZS5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxmLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRl''@;'; put 'put ''IixmLnN0eWxlLnRvcD0wLGYuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9mLnN0eWxlLnJpZ2h0PTA6Zi5zdHlsZS5sZWZ0PTAsYS5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2byhmLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHYuY2xhc3NOYW1lPWwuVEFCTEUu''@;'; put 'put ''Y2xhc3NOYW1lLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikmJnYuc2V0QXR0cmlidXRlKCJyb2xlIixsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpKSxmLmFwcGVuZENoaWxkKHYpLE0uYXBwZW5kQ2hpbGQoZik7Y29uc3QgRz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJl''@;'; put 'put ''dmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1HfHwiaG9yaXpvbnRhbCI9PT1HJiZ0aGlzLnR5cGU9PT0kN3x8InZlcnRpY2FsIj09PUcmJnRoaXMudHlwZT09PUs3P2g6ImhpZGRlbiI9PT1oLmdldENvbXB1dGVkU3R5bGUoTSkuZ2V0''@;'; put 'put ''UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjpiRShsLlRBQkxFKSxuZXcgalFlKHYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25N''@;'; put 'put ''YW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIsc3R5bGVzSGFuZGxlcjp0aGlzLndvdC5zdHlsZXNIYW5kbGVyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5uZWVkRnVsbFJlbmRl''@;'; put 'put ''cil7Y29uc3QgYT10aGlzLmNsb25lLmNsb25lU291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9uZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9s''@;'; put 'put ''ZGVyO1tsLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVdLmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpfWRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IHZLPWM9Pntjb25zdCBsPWMuc3R5bGVzSGFuZGxlcjtpZihsLmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6MSxib3JkZXJTdHlsZToic29saWQi''@;'; put 'put ''LGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0IGE9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxkPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxoPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmls''@;'; put 'put ''bC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6YSxoZWlnaHQ6YSxib3JkZXJXaWR0aDpkLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aH0pfTtjbGFzcyAkUWUgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsJDcsZCxo''@;'; put 'put ''KSxmdW5jdGlvbiBXUWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlRZShjKXt2YXIgbD1mdW5jdGlvbiBHUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl''@;'; put 'put ''dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSx0aGlzLmNh''@;'; put 'put ''Y2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IF9RZSguLi5h''@;'; put 'put ''KX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0''@;'; put 'put ''VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgaD0w''@;'; put 'put ''LGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLENFKGwpO2Vsc2V7Y29uc3R7d3RUYWJsZTpNfT10aGlzLndvdCxJPU0uaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zj1NYXRoLmNlaWwo''@;'; put 'put ''SS5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQsaD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxQTyhsLCIwcHgiLGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdn1zZXRTY3JvbGxQ''@;'; put 'put ''b3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2xldCBoPSExO2lmKGQ9PT1hJiZsIT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKExPKGEpLGwpLGg9ZiE9PWEuc2Ny''@;'; put 'put ''b2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVz''@;'; put 'put ''KGwsYSl7Y29uc3QgZD10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09dj9kOnYsaCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVt''@;'; put 'put ''ZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3''@;'; put 'put ''dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYo''@;'; put 'put ''dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBHPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihHLT1mMChkKSksRz1NYXRoLm1pbihHLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtHfXB4''@;'; put 'put ''YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBJPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoST0wKSx2LmhlaWdodD1gJHtJfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXpl''@;'; put 'put ''KCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10''@;'; put 'put ''aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0''@;'; put 'put ''YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxS''@;'; put 'put ''ZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3Bv''@;'; put 'put ''cnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLHY9KGQuY2xvbmVT''@;'; put 'put ''b3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcixNPWguZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLEc9MD09PWguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJk0ubGVuZ3RoPjAmJiFwbyh2LnBhcmVudE5vZGUsImlubmVyQm9yZGVyVG9wIik/MTowO2xldCBpZT10''@;'; put 'put ''aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksdWU9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxhJiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYodWU9ZjAodGhp''@;'; put 'put ''cy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCB5ZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEVlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWUrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxpZS09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0''@;'; put 'put ''KCktdGhpcy5zdW1DZWxsU2l6ZXMoRWUteWUsRWUpLGllKz0xLGllKz1HfWVsc2UgaWUrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIGllKz11ZSxCMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1pZS1HJiZHPjAm''@;'; put 'put ''JnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoRyksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihpZSl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRv''@;'; put 'put ''dz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBPTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6''@;'; put 'put ''bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVp''@;'; put 'put ''Z2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2xldCBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxmPWQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj0iaG9yaXpvbnRhbCI9''@;'; put 'put ''PT1kLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2Y/bG8oaCwiZW1wdHlDb2x1bW5zIik6VGkoaCwiZW1wdHlDb2x1bW5zIik7bGV0IE09ITE7aWYoIWEmJiF2KXtjb25zdCBJPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksRz10aGlzLmNhY2hlZEZpeGVkUm93c1RvcCE9PUks''@;'; put 'put ''aWU9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKEd8fDA9PT1JKSYmaWUubGVuZ3RoPjApe2NvbnN0IHVlPXBvKGgsImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09ZC5nZXRTZXR0aW5n''@;'; put 'put ''KCJ0b3RhbFJvd3MiKT8oVGkoaCwiaW5uZXJCb3JkZXJUb3AiKSxNPSF1ZSk6KGxvKGgsImlubmVyQm9yZGVyVG9wIiksTT11ZSl9fXJldHVybiBNfX1jb25zdCAkZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtyZXR1cm4gMD09''@;'; put 'put ''PWM/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWN9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJv''@;'; put 'put ''dygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0s''@;'; put 'put ''Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NCb3R0b20iKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQ6KCk9PjB9O1RwKCRmZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NCb3R0b20iLHt3cml0YWJsZTohMSxl''@;'; put 'put ''bnVtZXJhYmxlOiExfSk7Y29uc3QgS2ZlPSRmZTtjbGFzcyB5SyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsSXApfX1UbCh5SyxLZmUpLFRsKHlLLGRLKTtjb25zdCBxUWU9eUs7Y2xhc3MgZWV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCl7''@;'; put 'put ''c3VwZXIobCxhLElwLGQsaCksZnVuY3Rpb24gWFFlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKUWUoYyl7dmFyIGw9ZnVuY3Rpb24gUVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7''@;'; put 'put ''dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp''@;'; put 'put ''fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dz''@;'; put 'put ''Qm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVu''@;'; put 'put ''dHNbZF07cmV0dXJuIG5ldyBxUWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91''@;'; put 'put ''bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0''@;'; put 'put ''IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYidmVydGljYWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJs''@;'; put 'put ''YXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09''@;'; put 'put ''dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFz''@;'; put 'put ''VmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1mMChkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxl''@;'; put 'put ''bWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhMTyhhKSx0b3ApLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Ny''@;'; put 'put ''b2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3R7d3RUYWJsZTpkLHN0eWxlc0hhbmRsZXI6aH09dGhpcy53b3QsZj1oLmdldERlZmF1bHRSb3dIZWlnaHQoKTts''@;'; put 'put ''ZXQgdj1sLE09MDtmb3IoO3Y8YTspe2NvbnN0IEk9ZC5nZXRSb3dIZWlnaHQodik7TSs9dm9pZCAwPT09ST9mOkksdis9MX1yZXR1cm4gTX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0''@;'; put 'put ''Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlz''@;'; put 'put ''LmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBHPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTth''@;'; put 'put ''Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihHLT1mMChkKSksRz1NYXRoLm1pbihHLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtHfXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBJPXh1KHRo''@;'; put 'put ''aXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoST0wKSx2LmhlaWdodD1gJHtJfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9''@;'; put 'put ''dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0fWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7''@;'; put 'put ''aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJs''@;'; put 'put ''YXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1''@;'; put 'put ''bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9KHRoaXMud290LmNsb25lU291cmNl''@;'; put 'put ''P3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcjtsZXQgdj0wO2EmJmYub2Zmc2V0SGVpZ2h0IT09Zi5jbGllbnRIZWlnaHQmJih2PWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oZCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLGQtPXRo''@;'; put 'put ''aXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSxkKz0xKTpkKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbCksZCs9dix0aGlzLnNldFNjcm9sbFBvc2l0aW9uKGQpfWdldFRhYmxlUGFyZW50T2Zmc2V0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gT08odGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxl''@;'; put 'put ''bWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9MDtpZih0aGlzLnRyaW1taW5nQ29u''@;'; put 'put ''dGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IGg9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLHY9aC10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxNPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5j''@;'; put 'put ''bGllbnRIZWlnaHQ7ZD1NYXRoLm1heCh0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLU0raCwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxkPXRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tIT09YSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7bGV0IGY9ITE7aWYoKGR8fDA9PT1hKSYmaC5sZW5ndGg+MCl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmhv''@;'; put 'put ''bGRlci5wYXJlbnROb2RlLE09cG8odiwiaW5uZXJCb3JkZXJCb3R0b20iKTt0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8o''@;'; put 'put ''VGkodiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPSFNKToobG8odiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPU0pfXJldHVybiBmfX1jb25zdCBxZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1JlbmRlcmVkO3JldHVybiBudWxs''@;'; put 'put ''PT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0''@;'; put 'put ''Um93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dQYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJl''@;'; put 'put ''ZFJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzUmVuZGVyZWR9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1Zpc2libGV9LGdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlz''@;'; put 'put ''LmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5sZW5ndGh9fTtUcChxZmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkUm93cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBYZmU9cWZlLEpmZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpPy0xOjB9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigp''@;'; put 'put ''fSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSl9''@;'; put 'put ''LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAoSmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29s''@;'; put 'put ''dW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGJLPUpmZTtjbGFzcyBfSyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsSzcpfX1UbChfSyxYZmUpLFRsKF9LLGJLKTtjb25zdCByZXQ9X0s7Y2xhc3MgaWV0IGV4dGVuZHMg''@;'; put 'put ''RkV7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLEs3LGQsaCl9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHJldCguLi5hKX1zaG91bGRCZVJlbmRlcmVk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290O2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVk''@;'; put 'put ''KCl8fCFsLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZj0w''@;'; put 'put ''O3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1hfHxoJiYiaG9yaXpvbnRhbCI9PT1oPyhmPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxDRShkKSk6KGY9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSxQTyhkLGAke2Z9cHhgLCIwcHgiKSk7Y29uc3Qgdj10aGlz''@;'; put 'put ''LmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx2fXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTt0aGlzLmlzUnRsKCkmJihsPS1sKTtjb25zdCBoPXRo''@;'; put 'put ''aXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7aWYoaD09PWEmJmwhPT1hLnNjcm9sbFgpe2NvbnN0IGY9YS5zY3JvbGxYO2Euc2Nyb2xsVG8obCxfJChhKSksZD1mIT09YS5zY3JvbGxYfWVsc2UgaWYobCE9PWguc2Nyb2xsTGVmdCl7Y29uc3QgZj1oLnNjcm9sbExlZnQ7aC5zY3JvbGxM''@;'; put 'put ''ZWZ0PWwsZD1mIT09aC5zY3JvbGxMZWZ0fXJldHVybiBkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0''@;'; put 'put ''aCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOylmKz10aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGgpfHxkLGgrPTE7cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVz''@;'; put 'put ''dFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhp''@;'; put 'put ''cy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwidmVydGljYWwiPT09TSl7bGV0IEc9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKTth''@;'; put 'put ''Lmhhc0hvcml6b250YWxTY3JvbGwoKSYmKEctPWYwKGQpKSxHPU1hdGgubWluKEcsbC53dFJvb3RFbGVtZW50LnNjcm9sbEhlaWdodCksdi5oZWlnaHQ9YCR7R31weGB9ZWxzZSB2LmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD12LmhlaWdodDtjb25z''@;'; put 'put ''dCBJPXN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7di53aWR0aD1gJHtJfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXZLKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxl''@;'; put 'put ''Y3Rpb24oKT9wYXJzZUludChhLndpZHRoLDEwKS8yOjA7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLmhlaWdodD10aGlzLmhpZGVyLnN0eWxlLmhlaWdodCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LGwuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQobC5w''@;'; put 'put ''YXJlbnROb2RlLnN0eWxlLndpZHRoLDEwKStkfXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksYT10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCI7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0''@;'; put 'put ''LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZVthXT1gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJl''@;'; put 'put ''Y3QgdmFsdWUgb2YgdGhlIGNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZVthXT0iMCJ9dGhpcy5pc1J0bCgpP3RoaXMuc3ByZWFkZXIuc3R5bGUubGVmdD0iIjp0aGlzLnNwcmVhZGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMu''@;'; put 'put ''c3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe3RoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlci5zdHlsZS50b3A9Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RW''@;'; put 'put ''aWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3d0U2V0dGluZ3M6ZH09dGhpcyxoPWQuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9ZC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLE09KHRoaXMud290''@;'; put 'put ''LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcixJPTA9PT1mJiZoLmxlbmd0aD4wJiYhcG8oTS5wYXJlbnROb2RlLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik/MTowO2xldCBHPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSxpZT0w''@;'; put 'put ''O3JldHVybiBhJiZ0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoYT0hMSksYSYmTS5vZmZzZXRXaWR0aCE9PU0uY2xpZW50V2lkdGgmJihpZT1mMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkp''@;'; put 'put ''LGE/KEcrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxHLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSxHKz1JKTpHKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxsKSxHKz1pZSxqMmUodGhp''@;'; put 'put ''cy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1HLUkmJkk+MCYmdGhpcy53b3Qud3RPdmVybGF5cy5leHBhbmRIaWRlckhvcml6b250YWxseUJ5KEkpLHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oRyl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtsZXQgYT0wO3JldHVybiF0aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IikmJnRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cmJihhPXRoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LmxlZnQpLGF9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gTWF0aC5h''@;'; put 'put ''YnModyQodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVy''@;'; put 'put ''ZmxvdyIpO2xldCBkPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxhJiYiaG9yaXpvbnRhbCI9PT1hfHwoZD10aGlzLmlzUnRsKCk/TWF0aC5hYnMoTWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0''@;'; put 'put ''aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCkmJihkPTApKSxkfWFkanVzdEhlYWRlckJvcmRlcnNQb3Np''@;'; put 'put ''dGlvbihsKXtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMsZD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksZj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iiksdj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09''@;'; put 'put ''InZlcnRpY2FsIj09PWEuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dj9sbyhkLCJlbXB0eVJvd3MiKTpUaShkLCJlbXB0eVJvd3MiKTtsZXQgST0hMTtpZighTSlpZihmJiYhaC5sZW5ndGgpVGkoZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtlbHNl''@;'; put 'put ''IGlmKCFmJiZoLmxlbmd0aCl7Y29uc3QgRz1wbyhkLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7bD8oVGkoZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxJPSFHKToobG8oZCwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSxJPUcp''@;'; put 'put ''fXJldHVybiBJfX1jbGFzcyB3SyBleHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgscTcpfX1UbCh3SyxWZmUpLFRsKHdLLGJLKTtjb25zdCBhZXQ9d0s7ZnVuY3Rpb24gUWZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBvZXQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''c2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBjZXQgZXh0ZW5kcyBGRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCxhLHE3LGQsaCksUWZlKHRoaXMsInRvcE92ZXJsYXkiLHZvaWQgMCksUWZlKHRo''@;'; put 'put ''aXMsImlubGluZVN0YXJ0T3ZlcmxheSIsdm9pZCAwKSx0aGlzLnRvcE92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0''@;'; put 'put ''dXJuIG5ldyBhZXQoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRG''@;'; put 'put ''aXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMudHJpbW1pbmdDb250YWluZXI9PT10''@;'; put 'put ''aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/UE8obCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSsicHgiLGAke3RoaXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCl9cHhgKTpDRShsKTtsZXQgYT14dSh0aGlzLmNs''@;'; put 'put ''b25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGQ9c3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoYT0wKSxsLnN0eWxlLmhlaWdodD1gJHthfXB4YCxsLnN0eWxlLndpZHRoPWAke2R9cHhgLCExfX1jbGFzcyBDSyBl''@;'; put 'put ''eHRlbmRzIG1fe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsQm0pfX1UbChDSyxLZmUpLFRsKENLLGJLKTtjb25zdCB1ZXQ9Q0s7Y2xhc3MgZGV0IGV4dGVuZHMgRkV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxCbSxkLGgpLHRoaXMuYm90dG9tT3Zlcmxh''@;'; put 'put ''eT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IHVldCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3b3Q6bH09dGhpcztpZih0aGlzLnVw''@;'; put 'put ''ZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIWwud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihhLnN0eWxlLnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5n''@;'; put 'put ''cy5yb290V2luZG93KXtjb25zdCBmPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSx2PXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7YS5zdHlsZVt0aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2Z9cHhgLGEuc3R5bGUuYm90dG9t''@;'; put 'put ''PWAke3Z9cHhgfWVsc2UgQ0UoYSksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpO2xldCBkPXh1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgaD1zdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChkPTAp''@;'; put 'put ''LGEuc3R5bGUuaGVpZ2h0PWAke2R9cHhgLGEuc3R5bGUud2lkdGg9YCR7aH1weGAsITF9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUu''@;'; put 'put ''aG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWYwKGQpKSxoLnN0eWxlLmJv''@;'; put 'put ''dHRvbT1gJHtmfXB4YH19ZnVuY3Rpb24gYVAoYyxsLGEpeyhmdW5jdGlvbiBoZXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChj''@;'; put 'put ''LGEpfWZ1bmN0aW9uIHdnKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBmZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcGV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBYNyhjLGwsYSl7cmV0dXJuIGMuc2V0KGUzZShj''@;'; put 'put ''LGwpLGEpLGF9ZnVuY3Rpb24gQ2coYyxsKXtyZXR1cm4gYy5nZXQoZTNlKGMsbCkpfWZ1bmN0aW9uIGUzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHlfPW5ldyBXZWFrTWFwLG9QPW5ldyBXZWFrTWFwLGJfPW5ldyBXZWFrTWFwLHNQPW5ldyBXZWFrTWFwO2NvbnN0IG1ldD1jbGFzcyBnZXR7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3dnKHRoaXMsIndvdCIs''@;'; put 'put ''bnVsbCksYVAodGhpcyx5XyxbXSksd2codGhpcywidG9wT3ZlcmxheSIsbnVsbCksd2codGhpcywiYm90dG9tT3ZlcmxheSIsbnVsbCksd2codGhpcywiaW5saW5lU3RhcnRPdmVybGF5IixudWxsKSx3Zyh0aGlzLCJ0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHdnKHRoaXMs''@;'; put 'put ''ImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksd2codGhpcywiYnJvd3NlckxpbmVIZWlnaHQiLHZvaWQgMCksd2codGhpcywid3RTZXR0aW5ncyIsbnVsbCksYVAodGhpcyxvUCwhMSksYVAodGhpcyxiXywwKSxhUCh0aGlzLHNQLG51bGwpLHdnKHRoaXMsInJlc2l6ZU9i''@;'; put 'put ''c2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIoaWU9PntFRSgoKT0+eyFBcnJheS5pc0FycmF5KGllKXx8IWllLmxlbmd0aHx8KFg3KGJfLHRoaXMsQ2coYl8sdGhpcykrMSksMTAwPT09Q2coYl8sdGhpcykmJihpbCgiVGhlIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIHdhcyBmaXJlZCB0b28g''@;'; put 'put ''bWFueSB0aW1lcyBpbiBkaXJlY3Qgc3VjY2Vzc2lvbi5cblRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbmZpbml0ZSBsb29wIGNhdXNlZCBieSBzZXR0aW5nIGEgZHluYW1pYyBoZWlnaHQvd2lkdGggKGZvciBleGFtcGxlLCB3aXRoIHRoZSBgZHZoYCB1bml0cykgdG8gYSBIYW5kc29udGFibGUg''@;'; put 'put ''Y29udGFpbmVyJ3MgcGFyZW50LiBcblRoZSBvYnNlcnZlciB3aWxsIGJlIGRpc2Nvbm5lY3RlZC4iKSx0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSksbnVsbCE9PUNnKHNQLHRoaXMpJiZjbGVhclRpbWVvdXQoQ2coc1AsdGhpcykpLFg3KHNQLHRoaXMsc2V0VGltZW91dCgoKT0+''@;'; put 'put ''e1g3KGJfLHRoaXMsMCl9LDEwMCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNvbnRhaW5lckVsZW1lbnRSZXNpemUiKSl9KX0pKSx0aGlzLndvdD1sLHRoaXMud3RTZXR0aW5ncz1oLHRoaXMuZG9tQmluZGluZ3M9ZCx0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RUYWJsZT12''@;'; put 'put ''O2NvbnN0e3Jvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6SX09dGhpcy5kb21CaW5kaW5nczt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZXZlbnRNYW5hZ2VyPWYsdGhpcy5zY3JvbGxiYXJTaXplPWYwKE0pO2NvbnN0IEc9ImhpZGRlbiI9PT1JLmdldENvbXB1dGVkU3R5bGUodi53dFJv''@;'; put 'put ''b3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD1HP3YuaG9sZGVyOmJFKHYuVEFCTEUpLHRoaXMuaW5pdE92ZXJsYXlzKCksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5rZXlQcmVzc2VkPSExLHRoaXMuc3ByZWFk''@;'; put 'put ''ZXJMYXN0U2l6ZT17d2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH0sdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITEsdGhpcy5pbml0QnJvd3NlckxpbmVIZWlnaHQoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksdGhpcy5sYXN0U2Nyb2xsWD1JLnNj''@;'; put 'put ''cm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1JLnNjcm9sbFl9Z2V0T3ZlcmxheXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGE9Wy4uLkNnKHlfLHRoaXMpXTtyZXR1cm4gbCYmYS5wdXNoKHRoaXMud3RUYWJsZSks''@;'; put 'put ''YX1pbml0QnJvd3NlckxpbmVIZWlnaHQoKXtjb25zdHtyb290V2luZG93Omwscm9vdERvY3VtZW50OmF9PXRoaXMuZG9tQmluZGluZ3MsZD1sLmdldENvbXB1dGVkU3R5bGUoYS5ib2R5KSxoPXBhcnNlSW50KGQubGluZUhlaWdodCwxMCksZj0xLjIqcGFyc2VJbnQoZC5mb250U2l6ZSwxMCk7''@;'; put 'put ''dGhpcy5icm93c2VyTGluZUhlaWdodD1ofHxmfWluaXRPdmVybGF5cygpe2NvbnN0IGw9W3RoaXMud290LHRoaXMuZmFjYWRlR2V0dGVyLHRoaXMud3RTZXR0aW5ncyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9bmV3ICRRZSguLi5sKSx0aGlzLmJvdHRvbU92ZXJsYXk9bmV3''@;'; put 'put ''IGVldCguLi5sKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1uZXcgaWV0KC4uLmwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBjZXQoLi4ubCx0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5PW5ldyBkZXQoLi4ubCx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLFg3KHlfLHRoaXMsW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJs''@;'; put 'put ''YXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldKX1iZWZvcmVEcmF3KCl7WDcob1AsdGhpcyxDZyh5Xyx0aGlzKS5yZWR1Y2UoKGwsYSk9PmEuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl8fGwsITEpKSxDZyh5Xyx0aGlzKS5mb3JFYWNoKGw9PmwudXBkYXRlU3RhdGVP''@;'; put 'put ''ZlJlbmRlcmluZygiYmVmb3JlIikpfWFmdGVyRHJhdygpe3RoaXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSxDZyh5Xyx0aGlzKS5mb3JFYWNoKGw9Pntjb25zdCBhPWwuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7bC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCJhZnRlciIpLGEmJiFsLm5l''@;'; put 'put ''ZWRGdWxsUmVuZGVyJiZsLnJlc2V0KCl9KX1yZWZyZXNoQWxsKCl7aWYodGhpcy53b3QuZHJhd24pe2lmKCF0aGlzLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuIHZvaWQgdGhpcy5kZXN0cm95KCk7dGhpcy53b3QuZHJhdyghMCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmdGhp''@;'; put 'put ''cy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcmJnRoaXMudG9wT3ZlcmxheS5vblNjcm9sbCgpLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExfX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0''@;'; put 'put ''e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6ZH09dGhpcy50b3BPdmVybGF5LHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpofT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheTt0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''ci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXlkb3duIix1ZT0+dGhpcy5vbktleURvd24odWUpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnRFbGVtZW50LCJrZXl1cCIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKGwsInZpc2liaWxpdHljaGFuZ2UiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkLCJzY3JvbGwiLHVlPT50aGlzLm9uVGFibGVTY3JvbGwodWUpLHtwYXNzaXZlOiEwfSksZCE9PWgmJnRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwic2Nyb2xsIix1ZT0+dGhpcy5vblRhYmxlU2Nyb2xsKHVlKSx7cGFzc2l2ZTohMH0pO2NvbnN0IGY9YS5kZXZpY2VQaXhlbFJhdGlvJiZhLmRldmljZVBpeGVsUmF0aW8+MSx2PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1hLE09dGhpcy53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRXaGVlbCIpLEk9e3Bhc3NpdmU6dn07bGV0IGllOyhNfHxmfHwhTCQoKSkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsIndoZWVsIix1ZT0+dGhpcy5vbkNsb25lV2hlZWwo''@;'; put 'put ''dWUsTSksSSksW3RoaXMudG9wT3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLmZvckVhY2godWU9Pnt0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKHVlLmNsb25lLnd0VGFibGUuaG9sZGVyLCJ3aGVlbCIseWU9PnRoaXMub25DbG9uZVdoZWVsKHllLE0pLEkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJyZXNpemUiLCgpPT57RUUoKCk9PntjbGVhclRpbWVvdXQoaWUpLHRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbldpbmRvd1Jlc2l6ZSIpLGllPXNldFRpbWVvdXQoKCk9PntYNyhiXyx0aGlzLDApfSwyMDApfSl9KSx2fHx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50RWxlbWVudCl9b25UYWJs''@;'; put 'put ''ZVNjcm9sbChsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGg9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9bC50YXJnZXQ7dGhpcy5rZXlQ''@;'; put 'put ''cmVzc2VkJiYoaCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoaCl8fGQhPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGQpKXx8dGhpcy5zeW5jU2Nyb2xsUG9zaXRpb25zKGwpfW9uQ2xvbmVXaGVlbChsLGEpe2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5n''@;'; put 'put ''cyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHY9bC50YXJnZXQsTT1mIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGYpLEk9aCE9PWQmJnYhPT1kJiYhdi5jb250''@;'; put 'put ''YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihNfHxJKXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQpcmV0dXJuO2NvbnN0IEc9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZHKSYmbC5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpfW9uS2V5RG93bihsKXt0aGlzLmtleVByZXNzZWQ9dV8obC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKXtsZXQgYT1pc05hTihs''@;'; put 'put ''LmRlbHRhWSk/LTEqbC53aGVlbERlbHRhWTpsLmRlbHRhWSxkPWlzTmFOKGwuZGVsdGFYKT8tMSpsLndoZWVsRGVsdGFYOmwuZGVsdGFYOzE9PT1sLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxhKz1hKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGg9dGhp''@;'; put 'put ''cy5zY3JvbGxWZXJ0aWNhbGx5KGEpLGY9dGhpcy5zY3JvbGxIb3Jpem9udGFsbHkoZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmVydGljYWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9''@;'; put 'put ''bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3B9c2Nyb2xsSG9yaXpvbnRhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWwsYSE9PXRoaXMuc2Nyb2xsYWJs''@;'; put 'put ''ZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI7bGV0IGQ9''@;'; put 'put ''dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy53b3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFgpLHRo''@;'; put 'put ''aXMud290Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWSksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFghPT1kLHRoaXMudmVydGljYWxTY3JvbGxpbmc9dGhpcy5sYXN0''@;'; put 'put ''U2Nyb2xsWSE9PWgsdGhpcy5sYXN0U2Nyb2xsWD1kLHRoaXMubGFzdFNjcm9sbFk9aCx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2wuc2Nyb2xsTGVmdD1kO2NvbnN0IGY9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxl''@;'; put 'put ''LmhvbGRlcjpudWxsO2YmJihmLnNjcm9sbExlZnQ9ZCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGEuc2Nyb2xsVG9wPWgpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIUNnKG9QLHRoaXMpKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWlu''@;'; put 'put ''VGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Nyb2xsTGVmdDphLHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJl''@;'; put 'put ''bmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpLFg3KG9Q''@;'; put 'put ''LHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6YkUobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2Vy''@;'; put 'put ''dmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMu''@;'; put 'put ''dG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlu''@;'; put 'put ''bGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0''@;'; put 'put ''RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVm''@;'; put 'put ''cmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdpZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDty''@;'; put 'put ''ZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1hZGp1c3RFbGVtZW50c1NpemUoKXtjb25zdHt3dFZpZXdwb3J0Omx9PXRoaXMud290LHt3dFRhYmxlOmF9PXRoaXMse3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncyxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09bC5nZXRSb3dIZWFkZXJXaWR0aCgpLEc9bC5nZXRDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHQoKSt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdikrMSxpZT1NK3RoaXMuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpLHllPWEuaGlkZXIuc3R5bGUscWU9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A+TWF0aC5tYXgo''@;'; put 'put ''MCxHLWEuaG9sZGVyLmNsaWVudEhlaWdodCkpKCk/MTowLHJ0PSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD5NYXRoLm1heCgwLGllLWEuaG9sZGVyLmNsaWVudFdpZHRoKSkoKT8xOjA7eWUud2lkdGg9YCR7aWUrcnR9cHhgLHllLmhlaWdodD1gJHtHK3FlfXB4''@;'; put 'put ''YCx0aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6''@;'; put 'put ''YX09dGhpczthLmhpZGVyLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLmhlaWdodCwxMCkrbH1weGB9ZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLmhpZGVyLnN0''@;'; put 'put ''eWxlLndpZHRoLDEwKStsfXB4YH1hcHBseVRvRE9NKCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy50b3BPdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJlbnRPdmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBkPW51bGw7cmV0dXJuIFluKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGwpJiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJM''@;'; put 'put ''RTtZbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUu''@;'; put 'put ''Y2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07ZnVuY3Rpb24gdDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2ZXQoYyl7dmFyIGw9ZnVuY3Rpb24geWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBiZXR7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dDNlKHRoaXMsInNldHRpbmdzIix7fSksdDNlKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLFhvKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGluZ3NbZF09bFtkXTtlbHNle2lmKHZv''@;'; put 'put ''aWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4''@;'; put 'put ''dGVybmFsUm93Q2FsY3VsYXRvcjohMSxjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzooKT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4''@;'; put 'put ''ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhpcy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+''@;'; put 'put ''W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57UG0oZCx0aGlzLmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9LHJvd0hlaWdodCgpe30scm93SGVpZ2h0QnlP''@;'; put 'put ''dmVybGF5TmFtZSgpe30sZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydFJv''@;'; put 'put ''d1JlbmRlcmluZ1RocmVzaG9sZDpudWxsLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOm51bGwsb25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29udGV4dE1lbnU6bnVsbCxvbkNlbGxNb3VzZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVs''@;'; put 'put ''bCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9u''@;'; put 'put ''QmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Omw9Pmwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6bD0+bCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hT''@;'; put 'put ''Y3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3JvbGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGwsb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGlu''@;'; put 'put ''Z1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmw9Pmwsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRo''@;'; put 'put ''Om51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxhcmlhVGFnczohMH19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/WG8obCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdl''@;'; put 'put ''dFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdz''@;'; put 'put ''W2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIFNLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmlt''@;'; put 'put ''bWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9YV8odGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2''@;'; put 'put ''aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9X0UobCwiaGVpZ2h0IixhKSxmPV9FKGwsIm92ZXJmbG93IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhl''@;'; put 'put ''aWdodDpJfT1sO2xldCBHPWwub2Zmc2V0V2lkdGgsaWU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IHllPWwuY2xvbmVOb2RlKCExKTt5ZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIseWUuc3R5bGUucG9zaXRpb249ImFi''@;'; put 'put ''c29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZSh5ZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZCh5ZSk7Y29uc3QgRWU9cGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKHllKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoeWUpLDA9PT1FZSYm''@;'; put 'put ''KGllPTApfWllPU1hdGgubWluKGllLEkpLHYuaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke2llfXB4YCxHPU1hdGgubWluKEcsTSksdi53aWR0aD1gJHtHfXB4YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fGllPjAsdGhpcy5oYXNUYWJs''@;'; put 'put ''ZVdpZHRoPUc+MH10aGlzLmlzVGFibGVWaXNpYmxlPVU3KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJj''@;'; put 'put ''b2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLEk9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgRz0wO0c8ZjtHKyspZm9y''@;'; put 'put ''KGxldCBpZT0tMSpNO2llPEk7aWUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihpZSk7YS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdPSEwfX19VGwoU0ssWGZlKSxUbChTSyxkSyk7Y29uc3QgX2V0PVNLO2Z1bmN0aW9uIEhFKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiB3ZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQ2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZXR7Y29uc3RydWN0b3IoKXtIRSh0aGlzLCJjb3VudCIsMCksSEUodGhpcywic3RhcnRSb3ciLDApLEhFKHRo''@;'; put 'put ''aXMsImVuZFJvdyIsMCksSEUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksSEUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsUm93czphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygp''@;'; put 'put ''e31maW5hbGl6ZSgpe319ZnVuY3Rpb24gTkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhldChjKXt2YXIgbD1mdW5jdGlvbiBFZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWIoMzkwOTIpLGIoMTQzNjApO2NsYXNzIG4z''@;'; put 'put ''ZXtjb25zdHJ1Y3Rvcigpe05FKHRoaXMsImNvdW50IiwwKSxORSh0aGlzLCJzdGFydFJvdyIsbnVsbCksTkUodGhpcywiZW5kUm93IixudWxsKSxORSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxORSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6''@;'; put 'put ''ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFy''@;'; put 'put ''dFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6SSxyb3dIZWlnaHQ6R309bDtp''@;'; put 'put ''Zih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCB1ZT1JW3RoaXMuZW5kUm93XStHLUlbdGhpcy5zdGFydFJvdy0xXTtpZih0aGlzLnN0YXJ0Um93LT0xLHVlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0''@;'; put 'put ''aW9uPW51bGwhPT0oYT1JW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLWY8MHx8ZD5JLmF0KC0xKStHKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYm''@;'; put 'put ''KHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gcjNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31jbGFzcyBrZXQgZXh0ZW5kcyBuM2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHIzZSh0aGlzLCJyb3dTdGFydE9mZnNldCIsMCkscjNlKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVG''@;'; put 'put ''bjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRSb3csTT10aGlzLmVuZFJvdztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRo''@;'; put 'put ''aXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxu''@;'; put 'put ''dWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gVkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERldChjKXt2YXIgbD1mdW5jdGlvbiBJZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFJldHtjb25zdHJ1Y3Rvcigpe1ZFKHRoaXMsImNvdW50IiwwKSxWRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksVkUodGhpcywiZW5kUm93IixudWxsKSxWRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxWRSh0aGlzLCJpc1Zpc2libGVJblRy''@;'; put 'put ''aW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlz''@;'; put 'put ''LnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRp''@;'; put 'put ''b25zOkkscm93SGVpZ2h0Okd9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgeWU9SVt0aGlzLmVuZFJvd10rRy1JW3RoaXMuc3RhcnRSb3ctMV07aWYoeWU8PWgtZiYmKHRoaXMuc3RhcnRSb3ct''@;'; put 'put ''PTEpLHllPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1JW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgaWU9ZCtoLWYsdWU9bnVsbD09PXRoaXMuc3RhcnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlz''@;'; put 'put ''aWJsZUluVHJpbW1pbmdDb250YWluZXI9IShpZTx1ZXx8ZD5JLmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIEJFKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBMZXQoYyl7dmFyIGw9ZnVuY3Rpb24gT2V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBQZXR7Y29uc3RydWN0b3IoKXtCRSh0aGlzLCJjb3VudCIsMCksQkUodGhpcywic3RhcnRDb2x1bW4i''@;'; put 'put ''LDApLEJFKHRoaXMsImVuZENvbHVtbiIsMCksQkUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksQkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlz''@;'; put 'put ''LmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gakUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZldChjKXt2YXIgbD1mdW5jdGlvbiBIZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp''@;'; put 'put ''Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry''@;'; put 'put ''aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGkz''@;'; put 'put ''ZXtjb25zdHJ1Y3Rvcigpe2pFKHRoaXMsImNvdW50IiwwKSxqRSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksakUodGhpcywiZW5kQ29sdW1uIixudWxsKSxqRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxqRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5p''@;'; put 'put ''dGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENv''@;'; put 'put ''bHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2''@;'; put 'put ''ZXJzZTpJLHN0YXJ0UG9zaXRpb25zOkcsY29sdW1uV2lkdGg6aWV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkkpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRWU9R1t0aGlzLmVuZENvbHVtbl0raWUtR1t0aGlzLnN0''@;'; put 'put ''YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsRWU+aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPUdbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6''@;'; put 'put ''aCk8LTEqZnx8ZD5HLmF0KC0xKStpZXx8LTEqZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBhM2UoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIE5ldChjKXt2YXIgbD1mdW5jdGlvbiBWZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJldCBleHRlbmRzIGkzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksYTNl''@;'; put 'put ''KHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0IiwwKSxhM2UodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5z''@;'; put 'put ''dGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRoaXMuZW5kQ29sdW1uO2QodGhpcyksdGhpcy5jb2x1bW5TdGFydE9mZnNldD12LXRoaXMuc3RhcnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10''@;'; put 'put ''aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0''@;'; put 'put ''Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiB6RShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamV0KGMpe3ZhciBsPWZ1bmN0aW9uIHpldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVWV0e2NvbnN0cnVjdG9yKCl7ekUodGhpcywiY291bnQiLDApLHpFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSx6RSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLHpFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLHpFKHRoaXMsImlzVmlzaWJsZUluVHJp''@;'; put 'put ''bW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixjb2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9''@;'; put 'put ''PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29s''@;'; put 'put ''dW1uczpNLG5lZWRSZXZlcnNlOkksc3RhcnRQb3NpdGlvbnM6Ryxjb2x1bW5XaWR0aDppZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmSSlmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBqZT1HW3RoaXMuZW5kQ29sdW1u''@;'; put 'put ''XStpZS1HW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoamU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxqZT49aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPUdbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCB5ZT1kK2gtKHY+MD9oKzE6aCks''@;'; put 'put ''RWU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKHllPC0xKmZ8fGQ+Ry5hdCgtMSl8fC0xKmQtaD4tMSpFZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29s''@;'; put 'put ''dW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIG8zZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWmV0KGMpe3ZhciBsPWZ1bmN0aW9uIFdldChjLGwpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgczNle2NvbnN0cnVjdG9yKGwpe28zZSh0aGlzLCJjYWxjdWxhdGlvblR5cGVzIixbXSksbzNlKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2lu''@;'; put 'put ''aXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuc2V0KGQsaCksaC5pbml0aWFsaXplKGwpfSl9X3Byb2Nlc3MobCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1k''@;'; put 'put ''O3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9maW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0WyxkXT1hO3JldHVybiBkLmZpbmFsaXplKGwpfSl9Z2V0UmVzdWx0c0ZvcihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5j''@;'; put 'put ''dGlvbiBXMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWV0KGMpe3ZhciBsPWZ1bmN0aW9uIEdldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJGV0IGV4dGVuZHMgczNle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxj''@;'; put 'put ''dWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWlnaHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZhdWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0Rm46TSxvdmVycmlkZUZuOkksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpHfT1sO3N1cGVyKGEpLFcyKHRoaXMsInZpZXdwb3J0SGVp''@;'; put 'put ''Z2h0IiwwKSxXMih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLFcyKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksVzIodGhpcywidG90YWxSb3dzIiwwKSxXMih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksVzIodGhpcywicm93SGVpZ2h0IiwwKSxXMih0aGlzLCJvdmVycmlkZUZuIixu''@;'; put 'put ''dWxsKSxXMih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSxXMih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0IiwwKSxXMih0aGlzLCJ0b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLFcyKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksVzIodGhpcywibmVlZFJldmVyc2UiLCEw''@;'; put 'put ''KSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlzLnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxSb3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1JLHRoaXMu''@;'; put 'put ''aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1HPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3Ro''@;'; put 'put ''aXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5yb3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWlnaHQobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdo''@;'; put 'put ''dCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10aGlzLmlubmVyVmlld3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTtyZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9fWZ1bmN0aW9uIGEzKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLZXQoYyl7dmFyIGw9ZnVuY3Rpb24gcWV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g''@;'; put 'put ''Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBfXz01MDtjbGFzcyBYZXQgZXh0ZW5kcyBzM2V7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRl''@;'; put 'put ''Rm46TSxpbmxpbmVTdGFydE9mZnNldDpJfT1sO3N1cGVyKGEpLGEzKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLGEzKHRoaXMsInNjcm9sbE9mZnNldCIsMCksYTModGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxhMyh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLGEzKHRoaXMsImNvbHVt''@;'; put 'put ''bldpZHRoRm4iLG51bGwpLGEzKHRoaXMsImNvbHVtbldpZHRoIiwwKSxhMyh0aGlzLCJvdmVycmlkZUZuIixudWxsKSxhMyh0aGlzLCJpbmxpbmVTdGFydE9mZnNldCIsMCksYTModGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLGEzKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksYTMo''@;'; put 'put ''dGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlzLmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0''@;'; put 'put ''aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUksdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9j''@;'; put 'put ''ZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhp''@;'; put 'put ''cy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT9fXzphfX1jb25zdCBRZXQ9Y2xhc3MgSmV0e2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29s''@;'; put 'put ''dW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGws''@;'; put 'put ''dGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpP25ldyBNZXQ6bmV3IGtldF0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgUmV0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5u''@;'; put 'put ''ZXcgbjNlXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgUGV0Om5ldyBCZXRdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFVldF0sWyJwYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlIiwoKT0+bmV3IGkzZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQo''@;'; put 'put ''KX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgZD0wO3JldHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9j''@;'; put 'put ''dW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDp4dShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVpZ2h0OjEvMCxkfWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1''@;'; put 'put ''bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRh''@;'; put 'put ''aW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aD10aGlzLnd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTty''@;'; put 'put ''ZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVp''@;'; put 'put ''Z2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBsLmNsaWVudEhlaWdodDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5''@;'; put 'put ''V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbFdpZHRoPmYuY2xpZW50V2lkdGh9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRXaWR0aDtyZXR1cm4gbC5jbGll''@;'; put 'put ''bnRXaWR0aDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31pc0hvcml6''@;'; put 'put ''b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7''@;'; put 'put ''KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBVMCh0aGlzLnd0VGFibGUuaG9sZGVyKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVt''@;'; put 'put ''bkhlYWRlcnMiKS5sZW5ndGg/aXNOYU4odGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQpJiYodGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9eHUodGhpcy53dFRhYmxlLlRIRUFEKSk6dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9MCx0aGlzLmNvbHVtbkhlYWRlckhlaWdodH1nZXRSb3dIZWFkZXJXaWR0''@;'; put 'put ''aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5y''@;'; put 'put ''b3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylk''@;'; put 'put ''Pyh0aGlzLnJvd0hlYWRlcldpZHRoKz1zdShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hl''@;'; put 'put ''YWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWNyZWF0ZVJvd3NDYWxjdWxhdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVy''@;'; put 'put ''ZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgZix2LGg9dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BT''@;'; put 'put ''Y3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IEk9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxHPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksaWU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gSSYmTT49''@;'; put 'put ''MCYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsSSksTSs9dixoLT12KSxHJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVz''@;'; put 'put ''KGllLUcsaWUpLGgtPXYpLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6ZjAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyAkZXQoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAodWU9Plt1ZSx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXMu''@;'; put 'put ''Z2V0KHVlKSgpXSksdmlld3BvcnRIZWlnaHQ6aCxzY3JvbGxPZmZzZXQ6TSx0b3RhbFJvd3M6YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxkZWZhdWx0Um93SGVpZ2h0OnRoaXMuaW5zdGFuY2Uuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46dWU9PmQu''@;'; put 'put ''Z2V0Um93SGVpZ2h0KHVlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3Qgdj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7''@;'; put 'put ''Y29uc3QgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpO2YrPU0saC09TX1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPWYwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50''@;'; put 'put ''KSksbmV3IFhldCh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChNPT5bTSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXMuZ2V0KE0pKCldKSx2aWV3cG9ydFdpZHRoOmgsc2Nyb2xsT2Zmc2V0OmYsdG90YWxDb2x1bW5zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksY29sdW1uV2lkdGhG''@;'; put 'put ''bjpNPT5kLmdldENvbHVtbldpZHRoKE0pLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxpbmxpbmVTdGFydE9mZnNldDp0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXR9KX1jcmVhdGVDYWxj''@;'; put 'put ''dWxhdG9ycygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigpLGg9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGwm''@;'; put 'put ''JiFhLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKSl7Y29uc3QgZj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGYpfWlmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKSl7''@;'; put 'put ''Y29uc3QgZj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGYpfXJldHVybiBsfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5j''@;'; put 'put ''b2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZp''@;'; put 'put ''c2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSxsfWNyZWF0ZVZp''@;'; put 'put ''c2libGVDYWxjdWxhdG9ycygpe2NvbnN0IGw9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksYT10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJv''@;'; put 'put ''d3NWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9y''@;'; put 'put ''KCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1''@;'; put 'put ''bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Um93OmEsZW5kUm93OmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJldHVybiEwO2E9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3csZD10aGlzLnJv''@;'; put 'put ''d3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9Y29uc3R7c3RhcnRSb3c6aCxlbmRSb3c6Zixyb3dTdGFydE9mZnNldDp2LHJvd0VuZE9mZnNldDpNfT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLEk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEs''@;'; put 'put ''Rz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihHKSYmRz4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LEcpKSxkPU1hdGgubWluKEksZCtNYXRoLm1pbihNLEcpKSk6ImF1dG8iPT09''@;'; put 'put ''RyYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIpKSxkPU1hdGgubWluKEksZCtNYXRoLmNlaWwoTS8yKSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEkpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1u''@;'; put 'put ''c1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydENvbHVtbjphLGVuZENvbHVtbjpkfT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCl7aWYoIWwuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0Q29sdW1uLGQ9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufWNvbnN0e3N0YXJ0Q29sdW1uOmgsZW5kQ29sdW1uOmYsY29sdW1uU3RhcnRPZmZzZXQ6dixjb2x1bW5FbmRPZmZzZXQ6TX09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRv''@;'; put 'put ''cixJPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLEc9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoRykmJkc+MD8oYT1NYXRoLm1heCgwLGEtTWF0''@;'; put 'put ''aC5taW4odixHKSksZD1NYXRoLm1pbihJLGQrTWF0aC5taW4oTSxHKSkpOiJhdXRvIj09PUcmJihhPU1hdGgubWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRoLm1pbihJLGQrTWF0aC5jZWlsKE0vMikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxJKX1yZXNldEhhc092''@;'; put 'put ''ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXtYbyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fTtmdW5jdGlvbiBsM2UoYyxsLGEpe2MzZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gYzNlKGMsbCl7aWYobC5oYXMoYykp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBaYyhjLGwpe3JldHVybiBjLmdldChVRShjLGwpKX1mdW5jdGlvbiB1M2UoYyxsLGEpe3JldHVybiBjLnNldChVRShjLGwp''@;'; put 'put ''LGEpLGF9ZnVuY3Rpb24gVUUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWIo''@;'; put 'put ''OTM5MDkpO3ZhciBvMz1uZXcgV2Vha01hcCx2MT1uZXcgV2Vha01hcCxsUD1uZXcgV2Vha1NldDtjbGFzcyB0dHR7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gZXR0KGMsbCl7YzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGxQKSxsM2UodGhpcyxvMyx2b2lkIDApLGwzZSh0aGlzLHYxLHZvaWQg''@;'; put 'put ''MCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gdTNlKHYxLHRoaXMsbCksdGhpc31zZXRBY3RpdmVTZWxlY3Rpb24obCl7cmV0dXJuIHUzZShvMyx0aGlzLGwpLHRoaXN9c2Nhbigpe2NvbnN0IGw9WmMobzMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxhPW5ldyBTZXQ7cmV0dXJu''@;'; put 'put ''ImFjdGl2ZS1oZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToiYXJlYSI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJmb2N1cyI9PT1sPyh0''@;'; put 'put ''aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJmaWxsIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6Imhl''@;'; put 'put ''YWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJyb3ciPT09bD8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5D''@;'; put 'put ''ZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImNvbHVtbiI9PT1sJiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSksYX1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2Es''@;'; put 'put ''ZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxJPXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7bGV0IEc9MDtmb3IobGV0IGllPS12LmdldFJvd0hlYWRlcnNDb3VudCgpO2llPE07aWUr''@;'; put 'put ''Kyl7Y29uc3QgdWU9di5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShpZSk7aWYoISh1ZTxkfHx1ZT5mKSl7Zm9yKGxldCB5ZT0tSTt5ZTwwO3llKyspe2lmKHllPGF8fHllPmgpY29udGludWU7Y29uc3QgRWU9eWUrSTtsZXQgamU9di5nZXRDb2x1bW5IZWFkZXIodWUsRWUpO2NvbnN0''@;'; put 'put ''IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIix1ZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhvMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGNvbHVtbkN1cnNvcjpHLHNlbGVjdGlvbldpZHRoOmYtZCsxfSk7bnVsbCE9PXFl''@;'; put 'put ''JiYocWUhPT11ZSYmKGplPXYuZ2V0Q29sdW1uSGVhZGVyKHFlLEVlKSksbChqZSkpfUcrPTF9fX1zY2FuUm93c0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG8zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyh2MSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRSb3dz''@;'; put 'put ''Q291bnQoKSxJPXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7bGV0IEc9MDtmb3IobGV0IGllPS12LmdldENvbHVtbkhlYWRlcnNDb3VudCgpO2llPE07aWUrKyl7Y29uc3QgdWU9di5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShpZSk7aWYoISh1ZTxhfHx1ZT5oKSl7Zm9yKGxldCB5ZT0tSTt5''@;'; put 'put ''ZTwwO3llKyspe2lmKHllPGR8fHllPmYpY29udGludWU7Y29uc3QgRWU9eWUrSTtsZXQgamU9di5nZXRSb3dIZWFkZXIodWUsRWUpO2NvbnN0IHFlPVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIix1ZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhv''@;'; put 'put ''Myx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLHJvd0N1cnNvcjpHLHNlbGVjdGlvbkhlaWdodDpoLWErMX0pO251bGwhPT1xZSYmKHFlIT09dWUmJihqZT12LmdldFJvd0hlYWRlcihxZSxFZSkpLGwoamUpKX1HKz0xfX19c2NhbkNlbGxzUmFuZ2UobCl7Y29uc3R7d3RUYWJsZTphfT1a''@;'; put 'put ''Yyh2MSx0aGlzKTtVRShsUCx0aGlzLG50dCkuY2FsbCh0aGlzLChkLGgpPT57Y29uc3QgZj1hLmdldENlbGwoWmModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSx2PVpjKHYxLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixkLGgsWmMobzMsdGhpcykuc2V0''@;'; put 'put ''dGluZ3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiB2JiZUaShmLHYpLGwoZil9KX1zY2FuUm93c0luQ2VsbHNSYW5nZShsKXtjb25zdFthLCxkXT1aYyhvMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09WmModjEsdGhpcyk7VUUobFAsdGhpcyxkM2UpLmNhbGwodGhpcywo''@;'; put 'put ''Zix2KT0+e2lmKGY+PWEmJmY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKFpjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX1zY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShsKXtjb25zdFssYSwsZF09WmMobzMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKHYx''@;'; put 'put ''LHRoaXMpO1VFKGxQLHRoaXMsZDNlKS5jYWxsKHRoaXMsKGYsdik9PntpZih2Pj1hJiZ2PD1kKXtjb25zdCBNPWguZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9fWZ1bmN0aW9uIG50dChjKXtsZXRbbCxhLGQsaF09WmMobzMsdGhpcykuZ2V0Q29y''@;'; put 'put ''bmVycygpO2lmKGw8MCYmZDwwfHxhPDAmJmg8MClyZXR1cm47Y29uc3R7d3RUYWJsZTpmfT1aYyh2MSx0aGlzKSx2PWwhPT1kfHxhIT09aDtpZihhPU1hdGgubWF4KGEsMCksaD1NYXRoLm1heChoLDApLGw9TWF0aC5tYXgobCwwKSxkPU1hdGgubWF4KGQsMCksdil7aWYoYT1NYXRoLm1heChh''@;'; put 'put ''LGYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPU1hdGgubWluKGgsZi5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSksbD1NYXRoLm1heChsLGYuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKSxkPU1hdGgubWluKGQsZi5nZXRMYXN0UmVuZGVyZWRSb3coKSksaDxhfHxkPGwpcmV0dXJufWVsc2Ug''@;'; put 'put ''aWYoIUVwKGYuZ2V0Q2VsbChaYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSkpKSlyZXR1cm47Zm9yKGxldCBNPWw7TTw9ZDtNKz0xKWZvcihsZXQgST1hO0k8PWg7SSs9MSljKE0sSSl9ZnVuY3Rpb24gZDNlKGMpe2NvbnN0e3d0VGFibGU6bH09WmModjEsdGhpcyksYT1sLmdldFJl''@;'; put 'put ''bmRlcmVkUm93c0NvdW50KCksZD1sLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBoPTA7aDxhO2grPTEpe2NvbnN0IGY9bC5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTtmb3IobGV0IHY9MDt2PGQ7dis9MSljKGYsbC5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJj''@;'; put 'put ''ZSh2KSl9fWNvbnN0IGgzZT1jbGFzcyBydHR7Y29uc3RydWN0b3IobCxhKXthJiYodGhpcy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9w''@;'; put 'put ''PW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT12Syh0aGlz''@;'; put 'put ''Lmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJl''@;'; put 'put ''Z2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3Vz''@;'; put 'put ''ZWVudGVyIixmPT50aGlzLm9uTW91c2VFbnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndv''@;'; put 'put ''dC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSxCMihsKTtjb25zdCBkPXRoaXMsaD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25l''@;'; put 'put ''Iix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gTShJKXsoZnVuY3Rpb24gdihJKXtpZihJLmNsaWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fEkuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxJLmNsaWVudFg8TWF0aC5m''@;'; put 'put ''bG9vcihmLmxlZnQpfHxJLmNsaWVudFg+TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKEkpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLE0pLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29u''@;'; put 'put ''c3R7cm9vdERvY3VtZW50OmF9PXRoaXMud290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxl''@;'; put 'put ''ZnQ9MDtmb3IobGV0IE09MDtNPDU7TSsrKXtjb25zdCBJPWRbTV0sRz1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO0cuY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbSV0mJnRoaXMuc2V0dGluZ3NbSV0uaGlkZSYmKEcuY2xh''@;'; put 'put ''c3NOYW1lKz0iIGhpZGRlbiIpLGg9Ry5zdHlsZSxoLmJhY2tncm91bmRDb2xvcj10aGlzLnNldHRpbmdzW0ldJiZ0aGlzLnNldHRpbmdzW0ldLmNvbG9yP3RoaXMuc2V0dGluZ3NbSV0uY29sb3I6bC5ib3JkZXIuY29sb3IsaC5oZWlnaHQ9dGhpcy5zZXR0aW5nc1tJXSYmdGhpcy5zZXR0aW5n''@;'; put 'put ''c1tJXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW0ldLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsaC53aWR0aD10aGlzLnNldHRpbmdzW0ldJiZ0aGlzLnNldHRpbmdzW0ldLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbSV0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCx0''@;'; put 'put ''aGlzLm1haW4uYXBwZW5kQ2hpbGQoRyl9dGhpcy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5zdGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rlc1szXSx0aGlz''@;'; put 'put ''LnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0XSx0aGlzLmNv''@;'; put 'put ''cm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuaGVpZ2h0PWAke3RoaXMuY29ybmVyRGVmYXVs''@;'; put 'put ''dFN0eWxlLmhlaWdodH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXI9W2Ake3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigi''@;'; put 'put ''ICIpLEFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMuY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IHY9Zi5ib3JkZXJzSG9sZGVyO3Z8fCh2''@;'; put 'put ''PWEuY3JlYXRlRWxlbWVudCgiZGl2Iiksdi5jbGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9sZGVyPXYsZi5zcHJlYWRlci5hcHBlbmRDaGlsZCh2KSksdi5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3Vt''@;'; put 'put ''ZW50Omwsc3R5bGVzSGFuZGxlcjphfT10aGlzLndvdCxkPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLXNpemUiKSxoPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1yYWRpdXMiKSxmPWEuZ2V0Q1NTVmFyaWFibGVWYWx1''@;'; put 'put ''ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJhY2tncm91bmQtY29sb3IiKSx2PWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci13aWR0aCIpLE09YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRs''@;'; put 'put ''ZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0''@;'; put 'put ''aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVh''@;'; put 'put ''IGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMu''@;'; put 'put ''c2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0sWG8oe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50''@;'; put 'put ''KDQwLzEuNSwxMCl9cHhgfSwoeWUsRWUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhW0VlXT15ZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbRWVdPXllfSksWG8oYS5pc0NsYXNzaWNUaGVtZSgpP3twb3NpdGlvbjoiYWJzb2x1''@;'; put 'put ''dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8xLjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In06e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OmAke2R9cHhgLHdpZHRo''@;'; put 'put ''OmAke2R9cHhgLCJib3JkZXItcmFkaXVzIjpgJHtofXB4YCxiYWNrZ3JvdW5kOmAke2Z9YCxib3JkZXI6YCR7dn1weCBzb2xpZCAke019YH0sKHllLEVlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW0VlXT15ZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRv''@;'; put 'put ''cFtFZV09eWV9KSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJl''@;'; put 'put ''YSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRBcmVhU2VsZWN0aW9uKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxS''@;'; put 'put ''YW5nZS50by5yb3cmJmE9PT1kLmNlbGxSYW5nZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBJPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6Ryx0b3BI''@;'; put 'put ''aXRBcmVhOmllLGJvdHRvbTp1ZSxib3R0b21IaXRBcmVhOnllfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLEVlPXBhcnNlSW50KEcuYm9yZGVyV2lkdGgsMTApLGplPXBhcnNlSW50KEcud2lkdGgsMTApLHFlPXBhcnNlSW50KGllLndpZHRoLDEwKSxydD10aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldFdpZHRoKCkscHQ9dGhpcy53b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtHLnRvcD1gJHtwYXJzZUludChkLWplLTEsMTApfXB4YCxHW0ldPWAke3BhcnNlSW50KGgtamUtMSwxMCl9cHhgLGllLnRvcD1gJHtwYXJzZUludChkLXFlLzQqMywxMCl9cHhgLGllW0ldPWAke3BhcnNlSW50KGgt''@;'; put 'put ''cWUvNCozLDEwKX1weGA7Y29uc3QgZHQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSxydC1qZS0yKkVlKSxKdD1NYXRoLm1pbihwYXJzZUludChoK2YtcWUvNCwxMCkscnQtcWUtMipFZSk7dWVbSV09YCR7ZHR9cHhgLHllW0ldPWAke0p0fXB4YDtjb25zdCB2bj1NYXRoLm1pbihwYXJzZUlu''@;'; put 'put ''dChkK3YsMTApLHB0LWplLTIqRWUpLENuPU1hdGgubWluKHBhcnNlSW50KGQrdi1xZS80LDEwKSxwdC1xZS0yKkVlKTt1ZS50b3A9YCR7dm59cHhgLHllLnRvcD1gJHtDbn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVy''@;'; put 'put ''VmlzaWJsZSgpPyhHLmRpc3BsYXk9ImJsb2NrIixpZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShsLGEpPyh1ZS5kaXNwbGF5PSJub25lIix5ZS5kaXNwbGF5PSJub25lIik6KHVlLmRpc3BsYXk9ImJsb2NrIix5ZS5kaXNwbGF5PSJibG9jayIpKTooRy5kaXNwbGF5PSJub25l''@;'; put 'put ''Iix1ZS5kaXNwbGF5PSJub25lIixpZS5kaXNwbGF5PSJub25lIix5ZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/''@;'; put 'put ''KEcuekluZGV4PSI5OTk5IixpZS56SW5kZXg9Ijk5OTkiKTooRy56SW5kZXg9IiIsaWUuekluZGV4PSIiKX1hcHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0W2EsZCxoLGZdPWw7aWYoYTwwJiZoPDB8fGQ8MCYmZjwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29u''@;'; put 'put ''c3R7d3RUYWJsZTp2LHJvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6SX09dGhpcy53b3QsRz1hIT09aHx8ZCE9PWYsaWU9di5nZXRGaXJzdFJlbmRlcmVkUm93KCksdWU9di5nZXRMYXN0UmVuZGVyZWRSb3coKSx5ZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxFZT12LmdldExhc3RSZW5k''@;'; put 'put ''ZXJlZENvbHVtbigpO2lmKHllPDAmJkVlPDB8fGllPDAmJnVlPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtsZXQgamU7aWYoRyl7aWYoZD1NYXRoLm1heChkLHllKSxmPU1hdGgubWluKGYsRWUpLGE9TWF0aC5tYXgoYSxpZSksaD1NYXRoLm1pbihoLHVlKSxmPGR8fGg8YSlyZXR1''@;'; put 'put ''cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2plPXYuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpfWVsc2UgaWYoamU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSksIUVwKGplKSlyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2NvbnN0''@;'; put 'put ''IHFlPUc/di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoaCxmKSk6amUscnQ9VTAoamUpLHB0PUc/VTAocWUpOnJ0LGR0PVUwKHYuVEFCTEUpLEp0PXJ0LnRvcCx2bj1ydC5sZWZ0LENuPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCB0bj0w''@;'; put 'put ''LE1uPTA7aWYoQ24pe2NvbnN0IElyPXN1KHYuVEFCTEUpLCRyPXN1KGplKTtNbj12biskci1wdC5sZWZ0LHRuPUkuaW5uZXJXaWR0aC12bi0kci0oSS5pbm5lcldpZHRoLWR0LmxlZnQtSXIpLTF9ZWxzZSBNbj1wdC5sZWZ0K3N1KHFlKS12bix0bj12bi1kdC5sZWZ0LTE7aWYodGhpcy5pc0Vu''@;'; put 'put ''dGlyZUNvbHVtblNlbGVjdGVkKGEsaCkpe2NvbnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMiLGQsZixhLGR0KTtsZXQgd2k9bnVsbDskciYmKFt3aSx0bixNbl09JHIpLHdpJiYoamU9d2kpfWxldCBDcj1KdC1kdC50b3AtMSxHcj1wdC50b3AreHUocWUpLUp0''@;'; put 'put ''O2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChkLGYpKXtjb25zdCAkcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixhLGgsZCxkdCk7bGV0IHdpPW51bGw7JHImJihbd2ksQ3IsR3JdPSRyKSx3aSYmKGplPXdpKX1jb25zdCBtcj1JLmdldENvbXB1dGVkU3R5bGUoamUp''@;'; put 'put ''O3BhcnNlSW50KG1yLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoQ3IrPTEsR3I9R3I+MD9Hci0xOjApLHBhcnNlSW50KG1yW0NuPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJih0bis9MSxNbj1Nbj4wP01uLTE6MCk7Y29uc3QgR249Q24/InJpZ2h0IjoibGVm''@;'; put 'put ''dCI7dGhpcy50b3BTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMudG9wU3R5bGVbR25dPWAke3RufXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke01ufXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0NyfXB4YCx0aGlzLnN0YXJ0U3R5bGVb''@;'; put 'put ''R25dPWAke3RufXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke0dyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGFpPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9Q3IrR3ItYWkrInB4Iix0''@;'; put 'put ''aGlzLmJvdHRvbVN0eWxlW0duXT1gJHt0bn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtNbn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMuZW5kU3R5bGVbR25dPXRuK01uLWFpKyJweCIsdGhpcy5lbmRT''@;'; put 'put ''dHlsZS5oZWlnaHQ9YCR7R3IrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IF9pPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGU7X2k9ImZ1bmN0aW9uIj09dHlwZW9mIF9pP19pKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6X2k7Y29uc3QgT249dGhp''@;'; put 'put ''cy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixoLGYsITEsInJlbmRlciIpO2xldFt6cixKbl09W2gsZl07aWYoT24mJkFycmF5LmlzQXJyYXkoT24pJiYoWywsenIsSm5dPU9uKSxBcCgpfHwhX2l8fHRoaXMuaXNQYXJ0UmFuZ2UoenIsSm4pKXRoaXMuY29ybmVyU3R5''@;'; put 'put ''bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1DcitHcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZVtHbl09dG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQ''@;'; put 'put ''b2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyUmlnaHRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJMZWZ0V2lkdGg9YCR7''@;'; put 'put ''dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUu''@;'; put 'put ''d2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtsZXQgSXI9YV8odi5UQUJMRSk7Y29uc3QgJHI9SXI9PT1JOyRyJiYoSXI9TS5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IHdpPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLDEwKS0xLGVhPU1h''@;'; put 'put ''dGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMiksZmE9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMik7aWYoZj09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpe2NvbnN0''@;'; put 'put ''IHZ0PSRyP3FlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ6cWUub2Zmc2V0TGVmdDtsZXQgTnQ9ITEsSHQ9MDtDbj8oSHQ9dnQtcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsTnQ9SHQ8MCk6KEh0PXZ0K3N1KHFlKStwYXJzZUludCh0aGlzLmNvcm5l''@;'; put 'put ''ckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixOdD1IdD49QyQoSXIpKSxOdCYmKHRoaXMuY29ybmVyU3R5bGVbR25dPWAke01hdGguZmxvb3IodG4rTW4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1lYS13aSl9cHhgLHRoaXMuY29ybmVyU3R5bGVbQ24/ImJvcmRlckxlZnRXaWR0aCI6''@;'; put 'put ''ImJvcmRlclJpZ2h0V2lkdGgiXT0wKX1pZihoPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSl7Y29uc3QgSHQ9KCRyP3FlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDpxZS5vZmZzZXRUb3ApK3h1KHFlKStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5o''@;'; put 'put ''ZWlnaHQsMTApLzI+PW9fKElyKSxIbj10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCk7aWYoSHQpe2NvbnN0IHRyPU1hdGguZmxvb3IoQ3IrR3IrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1mYS13aSk7SG4/KHRoaXMuY29ybmVyU3R5bGUudG9wPWAke3RyfXB4''@;'; put 'put ''YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApOnRoaXMuY29ybmVyU3R5bGUudG9wPXRyLTErInB4In19dGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJibG9jayJ9QXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy51''@;'; put 'put ''cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbihoLGYsQ3IsdG4sTW4sR3IpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVu''@;'; put 'put ''ZGVyZWRSb3coKX1pc0VudGlyZVJvd1NlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIobCxhLGQs''@;'; put 'put ''aCxmKXtjb25zdHt3dFRhYmxlOnZ9PXRoaXMud290LE09di53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0IEk9bnVsbCxHPW51bGwsaWU9bnVsbCx1ZT1udWxsLHllPW51bGwsRWU9bnVsbCxqZT1udWxsLHFlPW51bGw7c3dpdGNoKGwpe2Nhc2Uicm93cyI6ST1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB2LmdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSxHPWZ1bmN0aW9uKCl7cmV0dXJuIHh1KC4uLmFyZ3VtZW50cyl9LGllPSJodF9fc2VsZWN0aW9uLS1yb3dzIixFZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOkk9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRDb2x1bW5IZWFkZXIoLi4u''@;'; put 'put ''YXJndW1lbnRzKX0sRz1mdW5jdGlvbigpe3JldHVybiBzdSguLi5hcmd1bWVudHMpfSxpZT0iaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIsRWU9ImxlZnQifWlmKE0uY2xhc3NMaXN0LmNvbnRhaW5zKGllKSl7Y29uc3QgcnQ9dGhpcy53b3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aDtpZihqZT1JKGEscnQtaCkscWU9SShkLHJ0LWgpLCFqZXx8IXFlKXJldHVybiExO2NvbnN0IHB0PVUwKGplKSxkdD1VMChxZSk7cmV0dXJuIGplJiZxZSYmKHVlPXB0W0VlXS1mW0VlXS0xLHllPWR0W0VlXStHKHFlKS1wdFtFZV0pLFtqZSx1ZSx5ZV19cmV0dXJuITF9Y2hhbmdlQm9y''@;'; put 'put ''ZGVyU3R5bGUobCxhKXtjb25zdCBkPXRoaXNbbF0uc3R5bGUsaD1hW2xdOyFofHxoLmhpZGU/VGkodGhpc1tsXSwiaGlkZGVuIik6KHBvKHRoaXNbbF0sImhpZGRlbiIpJiZsbyh0aGlzW2xdLCJoaWRkZW4iKSxkLmJhY2tncm91bmRDb2xvcj1oLmNvbG9yLCgidG9wIj09PWx8fCJib3R0b20i''@;'; put 'put ''PT09bCkmJihkLmhlaWdodD1gJHtoLndpZHRofXB4YCksKCJzdGFydCI9PT1sfHwiZW5kIj09PWwpJiYoZC53aWR0aD1gJHtoLndpZHRofXB4YCkpfWNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZTtkLmJhY2tncm91bmRDb2xvcj0iIzAwMCIsZC53''@;'; put 'put ''aWR0aD0iMXB4IixkLmhlaWdodD0iMXB4In10b2dnbGVIaWRkZW5DbGFzcyhsLGEpe3RoaXMuY2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCksYT9UaSh0aGlzW2xdLCJoaWRkZW4iKTpsbyh0aGlzW2xdLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIixBcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0''@;'; put 'put ''YVZpZXdJbnN0YW5jZSIpJiYodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9''@;'; put 'put ''Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25lIil9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpLHRoaXMubWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubWFpbil9''@;'; put 'put ''fTtmdW5jdGlvbiB3XyhjLGwsYSl7ZjNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBmM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9u''@;'; put 'put ''IGFzKGMsbCl7cmV0dXJuIGMuZ2V0KE1LKGMsbCkpfWZ1bmN0aW9uIHAzZShjLGwsYSl7cmV0dXJuIGMuc2V0KE1LKGMsbCksYSksYX1mdW5jdGlvbiBNSyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHkxPW5ldyBXZWFrTWFwLFZkPW5ldyBXZWFrTWFwLHhLPW5ldyBXZWFrTWFwLFpFPW5ldyBXZWFrTWFwLEVLPW5ldyBXZWFrTWFwLEo3PW5ldyBXZWFrTWFwLGcz''@;'; put 'put ''ZT1uZXcgV2Vha1NldDtjbGFzcyBhdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGl0dChjLGwpe2YzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxnM2UpLHdfKHRoaXMseTEsdm9pZCAwKSx3Xyh0aGlzLFZkLHZvaWQgMCksd18odGhpcyx4SyxuZXcgdHR0KSx3Xyh0aGlzLFpFLG5ldyBXZWFr''@;'; put 'put ''TWFwKSx3Xyh0aGlzLEVLLG5ldyBXZWFrU2V0KSx3Xyh0aGlzLEo3LG5ldyBNYXApLHAzZShWZCx0aGlzLGwpfXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIHAzZSh5MSx0aGlzLGwpLGFzKHhLLHRoaXMpLnNldEFjdGl2ZU92ZXJsYXkoYXMoeTEsdGhpcykpLGFzKFpFLHRoaXMpLmhhcyhh''@;'; put 'put ''cyh5MSx0aGlzKSl8fGFzKFpFLHRoaXMpLnNldChhcyh5MSx0aGlzKSxuZXcgU2V0KSx0aGlzfWdldEZvY3VzU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1hcyhWZCx0aGlzKT9hcyhWZCx0aGlzKS5nZXRGb2N1cygpOm51bGx9Z2V0QXJlYVNlbGVjdGlvbigpe3JldHVybiBudWxsIT09YXMo''@;'; put 'put ''VmQsdGhpcyk/YXMoVmQsdGhpcykuY3JlYXRlTGF5ZXJlZEFyZWEoKTpudWxsfWdldEJvcmRlckluc3RhbmNlKGwpe2lmKCFsLnNldHRpbmdzLmJvcmRlcilyZXR1cm4gbnVsbDtpZihhcyhKNyx0aGlzKS5oYXMobCkpe2NvbnN0IGQ9YXMoSjcsdGhpcykuZ2V0KGwpO2lmKGQuaGFzKGFzKHkx''@;'; put 'put ''LHRoaXMpKSlyZXR1cm4gZC5nZXQoYXMoeTEsdGhpcykpO2NvbnN0IGg9bmV3IGgzZShhcyh5MSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gZC5zZXQoYXMoeTEsdGhpcyksaCksaH1jb25zdCBhPW5ldyBoM2UoYXMoeTEsdGhpcyksbC5zZXR0aW5ncyk7cmV0dXJuIGFzKEo3LHRoaXMpLnNl''@;'; put 'put ''dChsLG5ldyBNYXAoW1thcyh5MSx0aGlzKSxhXV0pKSxhfWdldEJvcmRlckluc3RhbmNlcyhsKXt2YXIgYSxkO3JldHVybiBBcnJheS5mcm9tKG51bGwhPT0oYT1udWxsPT09KGQ9YXMoSjcsdGhpcykuZ2V0KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC52YWx1ZXMoKSkmJnZvaWQgMCE9PWE/''@;'; put 'put ''YTpbXSl9ZGVzdHJveUJvcmRlcnMobCl7YXMoSjcsdGhpcykuZ2V0KGwpLmZvckVhY2goYT0+YS5kZXN0cm95KCkpLGFzKEo3LHRoaXMpLmRlbGV0ZShsKX1yZW5kZXIobCl7aWYobnVsbD09PWFzKFZkLHRoaXMpKXJldHVybjtsJiZNSyhnM2UsdGhpcyxvdHQpLmNhbGwodGhpcyk7Y29uc3Qg''@;'; put 'put ''YT1BcnJheS5mcm9tKGFzKFZkLHRoaXMpKSxkPW5ldyBNYXAsaD1uZXcgTWFwO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCB2PWFbZl0se2NsYXNzTmFtZTpNLGhlYWRlckF0dHJpYnV0ZXM6SSxjcmVhdGVMYXllcnM6RyxzZWxlY3Rpb25UeXBlOmllfT12LnNldHRpbmdzO2Fz''@;'; put 'put ''KEVLLHRoaXMpLmhhcyh2KXx8KGFzKEVLLHRoaXMpLmFkZCh2KSx2LmFkZExvY2FsSG9vaygiZGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveUJvcmRlcnModikpKTtjb25zdCB1ZT10aGlzLmdldEJvcmRlckluc3RhbmNlKHYpO2lmKHYuaXNFbXB0eSgpKXt1ZT8uZGlzYXBwZWFyKCk7Y29udGlu''@;'; put 'put ''dWV9TSYmYXMoeEssdGhpcykuc2V0QWN0aXZlU2VsZWN0aW9uKHYpLnNjYW4oKS5mb3JFYWNoKGplPT57aWYoZC5oYXMoamUpKXtjb25zdCBxZT1kLmdldChqZSk7cWUuaGFzKE0pJiYhMD09PUc/cWUuc2V0KE0scWUuZ2V0KE0pKzEpOnFlLnNldChNLDEpfWVsc2UgZC5zZXQoamUsbmV3IE1h''@;'; put 'put ''cChbW00sMV1dKSk7SSYmKGguaGFzKGplKXx8aC5zZXQoamUsW10pLCJUSCI9PT1qZS5ub2RlTmFtZSYmaC5nZXQoamUpLnB1c2goLi4uSSkpfSk7Y29uc3QgeWU9di5nZXRDb3JuZXJzKCk7YXMoeTEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVEcmF3Qm9yZGVycyIseWUsaWUpLHVlPy5h''@;'; put 'put ''cHBlYXIoeWUpfWQuZm9yRWFjaCgoZix2KT0+e3ZhciBNO2NvbnN0IEk9QXJyYXkuZnJvbShmKS5tYXAoRz0+e2xldFtpZSx1ZV09RztyZXR1cm4gMT09PXVlP2llOltpZSwuLi5BcnJheS5mcm9tKHtsZW5ndGg6dWUtMX0sKHllLEVlKT0+YCR7aWV9LSR7RWUrMX1gKV19KS5mbGF0KCk7SS5m''@;'; put 'put ''b3JFYWNoKEc9PmFzKFpFLHRoaXMpLmdldChhcyh5MSx0aGlzKSkuYWRkKEcpKSxUaSh2LEkpLCJURCI9PT12Lm5vZGVOYW1lJiZBcnJheS5pc0FycmF5KG51bGw9PT0oTT1hcyhWZCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09TT92b2lkIDA6TS5jZWxsQXR0cmlidXRlcykmJnZvKHYsYXMo''@;'; put 'put ''VmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmlidXRlcyl9KSxBcnJheS5mcm9tKGgua2V5cygpKS5mb3JFYWNoKGY9Pnt2byhmLFsuLi5oLmdldChmKV0pfSl9fWZ1bmN0aW9uIG90dCgpe2NvbnN0IGM9YXMoWkUsdGhpcykuZ2V0KGFzKHkxLHRoaXMpKSxsPWFzKHkxLHRoaXMpLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygib25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspYy5hZGQobFthXSk7Yy5mb3JFYWNoKGE9Pnt2YXIgZCxoO2NvbnN0IGY9YXMoeTEsdGhpcykud3RUYWJsZS5UQUJMRS5xdWVy''@;'; put 'put ''eVNlbGVjdG9yQWxsKGAuJHthfWApO2xldCB2PVtdO0FycmF5LmlzQXJyYXkobnVsbD09PShkPWFzKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNlbGxBdHRyaWJ1dGVzKSYmKHY9YXMoVmQsdGhpcykub3B0aW9ucy5jZWxsQXR0cmlidXRlcy5tYXAoTT0+TVswXSkp''@;'; put 'put ''LEFycmF5LmlzQXJyYXkobnVsbD09PShoPWFzKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhlYWRlckF0dHJpYnV0ZXMpJiYodj1bLi4udiwuLi5hcyhWZCx0aGlzKS5vcHRpb25zLmhlYWRlckF0dHJpYnV0ZXMubWFwKE09Pk1bMF0pXSk7Zm9yKGxldCBNPTAsST1m''@;'; put 'put ''Lmxlbmd0aDtNPEk7TSsrKWxvKGZbTV0sYSksajcoZltNXSx2KX0pLGMuY2xlYXIoKX1mdW5jdGlvbiBRNyhjLGwsYSl7bTNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBtM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft''@;'; put 'put ''ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHdjKGMsbCl7cmV0dXJuIGMuZ2V0KGwzKGMsbCkpfWZ1bmN0aW9uIHMzKGMsbCxhKXtyZXR1cm4gYy5zZXQobDMoYyxsKSxhKSxhfWZ1bmN0aW9uIGwzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTHA9bmV3IFdlYWtNYXAsU2c9bmV3IFdlYWtNYXAsVEs9bmV3IFdlYWtNYXAs''@;'; put 'put ''QUs9bmV3IFdlYWtNYXAsam09bmV3IFdlYWtNYXAsV0U9bmV3IFdlYWtNYXAsWUU9bmV3IFdlYWtNYXAsT3A9bmV3IFdlYWtTZXQ7Y2xhc3MgbHR0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBzdHQoYyxsKXttM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsT3ApLFE3KHRoaXMsTHAsdm9pZCAw''@;'; put 'put ''KSxRNyh0aGlzLFNnLHZvaWQgMCksUTcodGhpcyxUSyx2b2lkIDApLFE3KHRoaXMsQUssdm9pZCAwKSxRNyh0aGlzLGptLCEwKSxRNyh0aGlzLFdFLHt9KSxRNyh0aGlzLFlFLHt9KSxzMyhTZyx0aGlzLGwucm9vdFRhYmxlLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksczMoQUssdGhp''@;'; put 'put ''cyxsLnJvb3REb2N1bWVudCl9aXNDbGFzc2ljVGhlbWUoKXtyZXR1cm4gd2Moam0sdGhpcyl9Z2V0Q1NTVmFyaWFibGVWYWx1ZShsKXt2YXIgYTtpZih3YyhqbSx0aGlzKSlyZXR1cm4gbnVsbDtpZih3YyhXRSx0aGlzKVtgLS1odC0ke2x9YF0pcmV0dXJuIHdjKFdFLHRoaXMpW2AtLWh0LSR7''@;'; put 'put ''bH1gXTtjb25zdCBkPW51bGwhPT0oYT1sMyhPcCx0aGlzLGh0dCkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKSkmJnZvaWQgMCE9PWE/YTpsMyhPcCx0aGlzLGIzZSkuY2FsbCh0aGlzLGAtLWh0LSR7bH1gKTtyZXR1cm4gbnVsbCE9PWQ/KHdjKFdFLHRoaXMpW2AtLWh0LSR7bH1gXT1kLGQpOnZv''@;'; put 'put ''aWQgMH1nZXRTdHlsZUZvclREKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9d2MoWUUsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnRkW2xdfWdldERlZmF1bHRSb3dIZWlnaHQoKXtpZih3YyhqbSx0aGlzKSlyZXR1cm4gMjM7Y29uc3QgbD1sMyhPcCx0aGlzLGN0dCkuY2FsbCh0aGlz''@;'; put 'put ''KTtyZXR1cm4hbCYmcG8od2MoU2csdGhpcyksImh0LXdyYXBwZXIiKT8oaWwoYFRoZSAiJHt3YyhMcCx0aGlzKX0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJlY3RseS4gSW1wb3J0IHRoZSBjb3JyZWN0IENT''@;'; put 'put ''UyBmaWxlcyBpbiBvcmRlciB0byB1c2UgdGhhdCB0aGVtZS5gKSxzMyhqbSx0aGlzLCEwKSx0aGlzLnVzZVRoZW1lKCksMjMpOmx9YXJlQ2VsbHNCb3JkZXJCb3goKXtyZXR1cm4iYm9yZGVyLWJveCI9PT10aGlzLmdldFN0eWxlRm9yVEQoImJveC1zaXppbmciKX11c2VUaGVtZShsKXtpZigh''@;'; put 'put ''bClyZXR1cm4gbDMoT3AsdGhpcyx5M2UpLmNhbGwodGhpcyksczMoam0sdGhpcywhMCksdm9pZCBzMyhMcCx0aGlzLGx8fHZvaWQgMCk7bCYmbCE9PXdjKExwLHRoaXMpJiYod2MoTHAsdGhpcykmJmwzKE9wLHRoaXMsZnR0KS5jYWxsKHRoaXMpLHMzKExwLHRoaXMsbCksczMoam0sdGhpcywh''@;'; put 'put ''MSksbDMoT3AsdGhpcyx1dHQpLmNhbGwodGhpcyksbDMoT3AsdGhpcyx5M2UpLmNhbGwodGhpcykpfWdldFRoZW1lTmFtZSgpe3JldHVybiB3YyhMcCx0aGlzKX1yZW1vdmVDbGFzc05hbWVzKCl7cG8od2MoU2csdGhpcyksd2MoTHAsdGhpcykpJiZsbyh3YyhTZyx0aGlzKSx3YyhMcCx0aGlz''@;'; put 'put ''KSl9fWZ1bmN0aW9uIGN0dCgpe2NvbnN0IGM9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJsaW5lLWhlaWdodCIpLGw9dGhpcy5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLXZlcnRpY2FsLXBhZGRpbmciKSxhPU1hdGguY2VpbChwYXJzZUZsb2F0KHRoaXMuZ2V0U3R5bGVGb3JURCgiYm9y''@;'; put 'put ''ZGVyLWJvdHRvbS13aWR0aCIpKSk7cmV0dXJuIG51bGw9PT1jfHxudWxsPT09bHx8aXNOYU4oYSk/bnVsbDpjKzIqbCthfWZ1bmN0aW9uIHV0dCgpe2xvKHdjKFNnLHRoaXMpLC9odC10aGVtZS0uKi9nKSxUaSh3YyhTZyx0aGlzKSx3YyhMcCx0aGlzKSl9ZnVuY3Rpb24geTNlKCl7dGhpcy5p''@;'; put 'put ''c0NsYXNzaWNUaGVtZSgpfHxzMyhUSyx0aGlzLGdldENvbXB1dGVkU3R5bGUod2MoU2csdGhpcykpKTtjb25zdCBjPWwzKE9wLHRoaXMsZHR0KS5jYWxsKHRoaXMsWyJib3gtc2l6aW5nIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdKTt3YyhZRSx0aGlzKS50ZD17Li4ud2MoWUUsdGhpcykudGQs''@;'; put 'put ''ImJveC1zaXppbmciOmNbImJveC1zaXppbmciXSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6Y1siYm9yZGVyLWJvdHRvbS13aWR0aCJdfX1mdW5jdGlvbiBkdHQoYyl7Y29uc3QgbD13YyhBSyx0aGlzKSxhPXdjKFNnLHRoaXMpLGQ9bC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGg9bC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJ0Ym9keSIpLGY9bC5jcmVhdGVFbGVtZW50KCJ0ciIpLHY9bC5jcmVhdGVFbGVtZW50KCJ0ciIpLE09bC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3YuYXBwZW5kQ2hpbGQoTSksaC5hcHBlbmRDaGlsZChmKSxoLmFwcGVuZENoaWxkKHYpLGQuYXBwZW5kQ2hpbGQoaCksYS5hcHBlbmRD''@;'; put 'put ''aGlsZChkKTtjb25zdCBJPWdldENvbXB1dGVkU3R5bGUoTSksRz17fTtyZXR1cm4gYy5mb3JFYWNoKGllPT57R1tpZV09SS5nZXRQcm9wZXJ0eVZhbHVlKGllKX0pLGEucmVtb3ZlQ2hpbGQoZCksR31mdW5jdGlvbiBodHQoYyl7Y29uc3QgbD1NYXRoLmNlaWwocGFyc2VGbG9hdChsMyhPcCx0''@;'; put 'put ''aGlzLGIzZSkuY2FsbCh0aGlzLGMpKSk7cmV0dXJuIE51bWJlci5pc05hTihsKT9udWxsOmx9ZnVuY3Rpb24gYjNlKGMpe2NvbnN0IGw9d2MoVEssdGhpcykuZ2V0UHJvcGVydHlWYWx1ZShjKTtyZXR1cm4iIj09PWw/bnVsbDpsfWZ1bmN0aW9uIGZ0dCgpe3MzKFlFLHRoaXMse30pLHMzKFdF''@;'; put 'put ''LHRoaXMse30pLHMzKGptLHRoaXMsITApfWNsYXNzIHB0dCBleHRlbmRzIG1Le2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxuZXcgYmV0KGEpKSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IGx0dCh0aGlzLmRvbUJpbmRpbmdzKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJm''@;'; put 'put ''YWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgX2V0KHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IFFldCh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9bmV3IGF0dCh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2VsZWN0aW9ucyIpKSx0aGlzLnd0RXZlbnQ9bmV3IEVmZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIpLHRoaXMud3RPdmVybGF5cz1uZXcgbWV0KHRoaXMsZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuZXhwb3J0U2V0dGlu''@;'; put 'put ''Z3NBc0NsYXNzTmFtZXMoKSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe2NvbnN0IGE9W10sZD1bXTtYbyh7cm93SGVhZGVyczoiaHRSb3dIZWFkZXJzIixjb2x1bW5IZWFkZXJzOiJodENvbHVtbkhlYWRlcnMifSwoaCxmKT0+e3RoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKGYpLmxlbmd0aCYmZC5wdXNoKGgpLGEucHVzaChoKX0pLGxvKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUsYSksVGkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxkKX1nZXRPdmVybGF5QnlOYW1lKGwpe3Zh''@;'; put 'put ''ciBhO2lmKCFIZmUuaW5jbHVkZXMobCkpcmV0dXJuIG51bGw7Y29uc3QgZD1sLnJlcGxhY2UoL18oW2Etel0pL2csaD0+aFsxXS50b1VwcGVyQ2FzZSgpKTtyZXR1cm4gbnVsbCE9PShhPXRoaXMud3RPdmVybGF5c1tgJHtkfU92ZXJsYXlgXSkmJnZvaWQgMCE9PWE/YTpudWxsfWdldFZpZXdw''@;'; put 'put ''b3J0RGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0Nv''@;'; put 'put ''bnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyfSxnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IHRvcFBhcmVudE9mZnNldCgp''@;'; put 'put ''e3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpfSxnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCl9LGdldCBpbmxpbmVTdGFydFBh''@;'; put 'put ''cmVudE9mZnNldCgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVy''@;'; put 'put ''bGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCBib3R0b21PdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5ib3R0b21PdmVybGF5fX19fWNsYXNzIGtLe2NvbnN0cnVjdG9yKGwpe2wgaW5zdGFuY2VvZiBtSz90aGlzLl93b3Q9bDp0aGlzLl9pbml0RnJvbVNldHRpbmdzKGwpfV9pbml0''@;'; put 'put ''RnJvbVNldHRpbmdzKGwpe2wuZmFjYWRlPWE9Pntjb25zdCBkPW5ldyBrSyhhKTtyZXR1cm4oKT0+ZH0sdGhpcy5fd290PW5ldyBwdHQobC50YWJsZSxsKX1nZXQgZ3VpZCgpe3JldHVybiB0aGlzLl93b3QuZ3VpZH1nZXQgcm9vdERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX3dvdC5kb21CaW5k''@;'; put 'put ''aW5ncy5yb290RG9jdW1lbnR9Z2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9Z2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3N9Z2V0IGNsb25lU291cmNlKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZVNvdXJj''@;'; put 'put ''ZX1nZXQgY2xvbmVPdmVybGF5KCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXl9Z2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LnNlbGVjdGlvbk1hbmFnZXJ9Z2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0Vmlld3BvcnR9Z2V0IHd0T3Zlcmxh''@;'; put 'put ''eXMoKXtyZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXN9Z2V0IHd0VGFibGUoKXtyZXR1cm4gdGhpcy5fd290Lnd0VGFibGV9Z2V0IHd0RXZlbnQoKXtyZXR1cm4gdGhpcy5fd290Lnd0RXZlbnR9Z2V0IHd0U2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbH1nZXQgZHJhd24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd290LmRyYXdufXNldCBkcmF3bihsKXt0aGlzLl93b3QuZHJhd249bH1nZXQgYWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmFjdGl2ZU92ZXJsYXlOYW1lfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRl''@;'; put 'put ''ZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNj''@;'; put 'put ''cm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Nyb2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVk''@;'; put 'put ''KGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVu''@;'; put 'put ''dExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdlcn1nZXQgc3R5bGVzSGFuZGxlcigpe3JldHVybiB0aGlzLl93b3Quc3R5bGVzSGFuZGxlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdl''@;'; put 'put ''dENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdw''@;'; put 'put ''b3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCl9Z2V0T3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheT90aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGU6Im1hc3RlciJ9Z2V0T3ZlcmxheUJ5TmFtZShsKXtyZXR1cm4gdGhpcy5fd290LmdldE92ZXJsYXlCeU5hbWUo''@;'; put 'put ''bCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl9dXBkYXRlKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShsLGEpLHRoaXN9Z2V0U2V0dGluZyhsLGEsZCxoLGYpe3JldHVybiB0''@;'; put 'put ''aGlzLl93b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKGwsYSxkLGgsZil9aGFzU2V0dGluZyhsKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhsKX1kZXN0cm95KCl7dGhpcy5fd290LmRlc3Ryb3koKX19ZnVuY3Rpb24gXzNlKGMpe2xldHtpc1NoaWZ0S2V5OmwsaXNM''@;'; put 'put ''ZWZ0Q2xpY2s6YSxpc1JpZ2h0Q2xpY2s6ZCxjb29yZHM6aCxzZWxlY3Rpb246Zixjb250cm9sbGVyOnYsY2VsbENvb3Jkc0ZhY3Rvcnk6TX09Yztjb25zdCBJPWYuaXNTZWxlY3RlZCgpP2YuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLEc9Zi5pc1NlbGVjdGVkQnlDb3JuZXIo''@;'; put 'put ''KSxpZT1mLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGYubWFya1NvdXJjZSgibW91c2UiKSxsJiZJKWgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKGgpOihHfHxpZSkmJmgucm93Pj0wJiZoLmNvbD49MCYmIXYuY2VsbD9mLnNldFJhbmdlRW5kKE0oaC5yb3cs''@;'; put 'put ''aC5jb2wpKTpHJiZoLnJvdzwwJiYhdi5jb2x1bW4/Zi5zZXRSYW5nZUVuZChNKEkudG8ucm93LGguY29sKSk6aWUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKE0oaC5yb3csSS50by5jb2wpKTooIUcmJiFpZSYmaC5jb2w8MHx8RyYmaC5jb2w8MCkmJiF2LnJvdz9mLnNlbGVjdFJv''@;'; put 'put ''d3MoTWF0aC5tYXgoSS5mcm9tLnJvdywwKSxoLnJvdyxoLmNvbCk6KCFHJiYhaWUmJmgucm93PDB8fGllJiZoLnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoSS5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCB1ZT0hZi5pbkluU2VsZWN0aW9u''@;'; put 'put ''KGgpLHllPWF8fGQmJnVlO2gucm93PDAmJmguY29sPj0wJiYhdi5jb2x1bW4/eWUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJvdz95ZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAm''@;'; put 'put ''JiF2LmNlbGw/eWUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITAsZm9jdXNQb3NpdGlvbjp7cm93OjAsY29sOjB9fSl9Zi5tYXJrRW5kU291cmNlKCl9Y29uc3QgbXR0PW5ldyBNYXAoW1si''@;'; put 'put ''bW91c2Vkb3duIixfM2VdLFsibW91c2VvdmVyIixmdW5jdGlvbiBndHQoYyl7bGV0e2lzTGVmdENsaWNrOmwsY29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9PWM7aWYoIWwpcmV0dXJuO2NvbnN0IHY9ZC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIo''@;'; put 'put ''KSxNPWQuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksST1kLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRz1kLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7ZC5tYXJrU291cmNlKCJtb3VzZSIpLE0mJiFoLmNvbHVtbj9kLnNldFJhbmdlRW5kKGYoRy0xLGEuY29sKSk6diYmIWgucm93P2Quc2V0''@;'; put 'put ''UmFuZ2VFbmQoZihhLnJvdyxJLTEpKTpoLmNlbGx8fGQuc2V0UmFuZ2VFbmQoYSksZC5tYXJrRW5kU291cmNlKCl9XSxbInRvdWNoc3RhcnQiLF8zZV1dKTtmdW5jdGlvbiB3M2UoYyxsKXtsZXR7Y29vcmRzOmEsc2VsZWN0aW9uOmQsY29udHJvbGxlcjpoLGNlbGxDb29yZHNGYWN0b3J5OmZ9''@;'; put 'put ''PWw7bXR0LmdldChjLnR5cGUpKHtjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zixpc1NoaWZ0S2V5OmMuc2hpZnRLZXksaXNMZWZ0Q2xpY2s6VU8oYyl8fCJ0b3VjaHN0YXJ0Ij09PWMudHlwZSxpc1JpZ2h0Q2xpY2s6SG0oYyl9KX1jb25zdCBD''@;'; put 'put ''M2U9bmV3IFdlYWtNYXAsREs9U3ltYm9sKCJyb290SW5zdGFuY2UiKTtmdW5jdGlvbiBjUChjKXtyZXR1cm4gQzNlLmhhcyhjKX1mdW5jdGlvbiB6bShjLGwsYSl7UzNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBTM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFVtKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfdHQoYyl7dmFyIGw9ZnVuY3Rpb24gd3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g''@;'; put 'put ''Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBBdShjLGwpe3JldHVybiBjLmdldChDXyhjLGwpKX1mdW5jdGlvbiBCZChjLGwsYSl7cmV0dXJuIGMuc2V0KENfKGMsbCksYSksYX1mdW5jdGlvbiBDXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkp''@;'; put 'put ''cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIElLPW5ldyBXZWFrTWFwLHVQPW5ldyBXZWFrTWFwLGRQPW5ldyBXZWFrTWFwLE1nPW5ldyBXZWFrTWFwLGMz''@;'; put 'put ''PW5ldyBXZWFrTWFwLFJLPW5ldyBXZWFrTWFwLExLPW5ldyBXZWFrTWFwLFNfPW5ldyBXZWFrTWFwLEdFPW5ldyBXZWFrU2V0O2Z1bmN0aW9uIE0zZSgpe3JldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoUk8oKVswXSksMTApfWZ1bmN0aW9uIFN0dChj''@;'; put 'put ''KXtjb25zdCBsPUNfKEdFLHRoaXMsTTNlKS5jYWxsKHRoaXMpK2M7dm8odGhpcy5ob3Qucm9vdEVsZW1lbnQsLi4uUk8obCkpfWZ1bmN0aW9uIE10dCgpe2NvbnN0IGM9dGhpcy5ob3Qucm9vdEVsZW1lbnQ7dGhpcy5oYXNWZXJ0aWNhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xsWSIpOmxv''@;'; put 'put ''KGMsImh0SGFzU2Nyb2xsWSIpLHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP1RpKGMsImh0SGFzU2Nyb2xsWCIpOmxvKGMsImh0SGFzU2Nyb2xsWCIpfWNvbnN0IHh0dD1jbGFzcyBDdHR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGJ0dChjLGwpe1MzZShjLGwpLGwuYWRkKGMpfSkodGhp''@;'; put 'put ''cyxHRSksVW0odGhpcywiaG90Iix2b2lkIDApLFVtKHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxVbSh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxVbSh0aGlzLCJUSEVBRCIsdm9pZCAwKSxVbSh0aGlzLCJUQk9EWSIsdm9pZCAwKSxVbSh0aGlzLCJfd3QiLHZvaWQgMCksVW0odGhpcywi''@;'; put 'put ''YWN0aXZlV3QiLHZvaWQgMCksem0odGhpcyxJSywwKSx6bSh0aGlzLHVQLDApLFVtKHRoaXMsInBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLHptKHRoaXMsZFAsITEpLHptKHRoaXMsTWcsdm9pZCAwKSx6bSh0aGlzLGMzLHZvaWQgMCksem0odGhpcyxSSywwKSx6bSh0aGlzLExL''@;'; put 'put ''LDApLHptKHRoaXMsU18sbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgajIodGhpcy5ob3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlhbGl6ZVdh''@;'; put 'put ''bGtvbnRhYmxlKCl9cmVuZGVyKCl7aWYoIXRoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpe2NvbnN0IGw9dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXIiLGwpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5w''@;'; put 'put ''b3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSksdGhpcy5fd3QuZHJhdyghbCksQ18oR0UsdGhpcyxNdHQpLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIixsKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITF9''@;'; put 'put ''fWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCk/dGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITA6dGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDZWxsQXRDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuX3d0''@;'; put 'put ''LmdldENlbGwobCxhKTtyZXR1cm4gZDwwP251bGw6ZH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxs''@;'; put 'put ''eShsLGEpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3RFbGVtZW50Omwscm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9bC5nZXRBdHRyaWJ1dGUoInN0''@;'; put 'put ''eWxlIik7ZCYmbC5zZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsZCksVGkobCwiaGFuZHNvbnRhYmxlIiksQmQoYzMsdGhpcyxhLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikpLFRpKEF1KGMzLHRoaXMpLCJodENvcmUiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NO''@;'; put 'put ''YW1lJiZUaShBdShjMyx0aGlzKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYodm8oQXUoYzMsdGhpcyksW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksdm8obCxbWyJyb2xlIiwidHJlZWdyaWQiXSxUMmUoLTEpLFJPKHRo''@;'; put 'put ''aXMuaG90LmNvdW50Q29scygpKSxbImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhFQUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLEF1KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLEF1''@;'; put 'put ''KGMzLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPUF1KGMzLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoQXUoYzMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdEVs''@;'; put 'put ''ZW1lbnQ6bCxyb290RG9jdW1lbnQ6YSxzZWxlY3Rpb246ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9YS5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLE09PntCZChkUCx0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlv''@;'; put 'put ''bkFsbG93ZWQoTS50YXJnZXQpfHwoTSQoaCksTS5wcmV2ZW50RGVmYXVsdCgpLGguZm9jdXMoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT57QmQoZFAsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGws''@;'; put 'put ''Im1vdXNlbW92ZSIsTT0+e0F1KGRQLHRoaXMpJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJk0kKGgpLE0ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy''@;'; put 'put ''KGYsImtleXVwIixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmIU0uc2hpZnRLZXkmJmQuZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiZVTyhNKSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCExKTtjb25z''@;'; put 'put ''dCBJPUZPKGEuYWN0aXZlRWxlbWVudCk7U0UoYS5hY3RpdmVFbGVtZW50KSYmIUl8fChJfHwhZC5pc1NlbGVjdGVkKCkmJiFkLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhbC5jb250YWlucyhNLnRhcmdldCkmJiFIbShNKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmSG0oTSkmJihkLmZpbmlzaCgpLEJkKE1nLHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57ZC5pc0luUHJvZ3Jlc3Mo''@;'; put 'put ''KSYmZC5maW5pc2goKSxCZChNZyx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixNPT57Y29uc3QgST1NLnRhcmdldCxHPU0ueHx8TS5jbGllbnRYLGllPU0ueXx8TS5jbGllbnRZO2xldCB1ZT1NLnRhcmdldDtpZihBdShNZyx0aGlz''@;'; put 'put ''KXx8IWx8fCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtob2xkZXI6eWV9PXRoaXMuX3d0Lnd0VGFibGU7aWYodWU9PT15ZSl7Y29uc3QgamU9ZjAoYSk7aWYoYS5lbGVtZW50RnJvbVBvaW50KEcramUsaWUpIT09eWV8fGEuZWxlbWVudEZyb21Qb2ludChHLGllK2plKSE9PXllKXJldHVy''@;'; put 'put ''bn1lbHNlIGZvcig7dWUhPT1mOyl7aWYobnVsbD09PXVlKXtpZihNLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZih1ZT09PWwpcmV0dXJuO3VlPXVlLnBhcmVudE5vZGV9KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90''@;'; put 'put ''aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhJKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVzdHJveUVkaXRvcighMSwhMSl9KTtsZXQgdj1CNyhoKTtmb3IoO251bGwhPT12Oyl0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksdj1CNyh2KTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKEF1KGMzLHRoaXMpLCJzZWxlY3RzdGFydCIsTT0+e3Ro''@;'; put 'put ''aXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fFNFKE0udGFyZ2V0KXx8TS5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRo''@;'; put 'put ''aXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKTpsLGg9YT49MD90''@;'; put 'put ''aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRSZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVk''@;'; put 'put ''SW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXhlcyh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnRO''@;'; put 'put ''b3RIaWRkZW5Sb3dJbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChsLGEpLHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHYpKXJldHVybiAwO2xldCBNPTA7cmV0dXJuIGE8MD9NPXYrMTphPjAmJihNPWgtdiksTX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmhvdC5jb3VudENvbHMoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5ob3Qu''@;'; put 'put ''Y291bnRSb3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBo''@;'; put 'put ''PWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRo''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1nZXRTdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxlc0hhbmRsZXJ9Z2V0RGVmYXVsdFJvd0hlaWdodCgpe3JldHVybiB0aGlzLl93dC5zdHlsZXNI''@;'; put 'put ''YW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKX1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxh''@;'; put 'put ''eS1saWNlbnNlLWluZm8iKTtkJiZUaShkLGwpfXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRp''@;'; put 'put ''c3BsYXktbGljZW5zZS1pbmZvIik7ZCYmbG8oZCxsKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90''@;'; put 'put ''SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT5sJiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCl7Y29uc3QgbD17YXJpYVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxN''@;'; put 'put ''b2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpLmlzRW5hYmxlZCgpLHRhYmxlOkF1KGMzLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+''@;'; put 'put ''Y1AodGhpcy5ob3QpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9y''@;'; put 'put ''dENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihmLHYpPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRl''@;'; put 'put ''cmFibGVUb1Zpc3VhbEluZGV4KGYsdikpLHRvdGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxmaXhlZENvbHVtbnNTdGFydDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1u''@;'; put 'put ''c1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdz''@;'; put 'put ''LmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGwucm93SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGwuY29sdW1uSGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMu''@;'; put 'put ''c2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAsbWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNwYXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93cyxyZW5kZXJBbGxDb2x1bW5zOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dI''@;'; put 'put ''ZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBJPXY+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kUm93SGVhZGVyKEks''@;'; put 'put ''TSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGYpLEJkKHVQLHRoaXMsZi5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJkNfKEdFLHRoaXMsTTNlKS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJkNfKEdF''@;'; put 'put ''LHRoaXMsU3R0KS5jYWxsKHRoaXMsQXUodVAsdGhpcykpLGZ9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEk9dj49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxG''@;'; put 'put ''cm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRDb2xIZWFkZXIoSSxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZiksQmQoSUssdGhpcyxmLmxlbmd0aCksZn0sY29sdW1uV2lkdGg6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuY29s''@;'; put 'put ''dW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sV2lkdGgobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0OmY9Pntjb25zdCB2PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''Zik7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lOihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLEk9bnVsbD09PU0/ZjpNO3JldHVybiB0''@;'; put 'put ''aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEkpLEksdil9LGNlbGxSZW5kZXJlcjooZix2LE0pPT57Y29uc3RbSSxHXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLGllPXRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixJLEcsITEsIm1ldGEiKTtsZXQgdWU9SSx5ZT1HO0FycmF5LmlzQXJyYXkoaWUpJiYoW3VlLHllXT1pZSk7Y29uc3QgRWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodWUseWUpLGplPXRoaXMuaG90LmNvbFRvUHJvcCh5ZSk7bGV0''@;'; put 'put ''IHFlPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AodWUsamUpO3RoaXMuaG90Lmhhc0hvb2soImJlZm9yZVZhbHVlUmVuZGVyIikmJihxZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmFsdWVSZW5kZXIiLHFlLEVlKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixNLEks''@;'; put 'put ''RyxqZSxxZSxFZSksdGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEVlKSh0aGlzLmhvdCxNLEksRyxqZSxxZSxFZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLE0sSSxHLGplLHFlLEVlKX0sc2VsZWN0aW9uczp0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3Jk''@;'; put 'put ''ZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24sb25XaW5kb3dSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9''@;'; put 'put ''Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZVNyh0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooZix2LE0sSSk9Pntjb25zdCBHPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENv''@;'; put 'put ''b3Jkcyh2KSxpZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PUksQmQoTWcsdGhpcywhMCksQmQoU18sdGhpcyx7eDpmLmNsaWVudFgseTpmLmNsaWVudFl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3du''@;'; put 'put ''IixmLEcsTSxpZSksIUZtKGYpJiYodzNlKGYse2Nvb3JkczpHLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjppZSxjZWxsQ29vcmRzRmFjdG9yeToodWUseWUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh1ZSx5ZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJPbkNlbGxNb3VzZURvd24iLGYsRyxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29udGV4dE1lbnU6KGYsdixNLEkpPT57Y29uc3QgRz10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1JLEJkKE1nLHRoaXMsITEp''@;'; put 'put ''LHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsZixHLE0pLCFGbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvbnRleHRNZW51''@;'; put 'put ''IixmLEcsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihmLHYsTSxJKT0+e2NvbnN0IEc9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9SSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91''@;'; put 'put ''c2VPdXQiLGYsRyxNKSwhRm0oZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsZixHLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6KGYsdixNLEkpPT57Y29uc3QgRz10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1''@;'; put 'put ''YWxDb29yZHModiksaWU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5hY3RpdmVXdD1JLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGYsRyxNLGllKSwhRm0oZikmJihBdShNZyx0aGlzKSYmKCFBdShTXyx0aGlzKXx8QXUoU18sdGhpcykueCE9PWYu''@;'; put 'put ''Y2xpZW50WHx8QXUoU18sdGhpcykueSE9PWYuY2xpZW50WSkmJnczZShmLHtjb29yZHM6RyxzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6aWUsY2VsbENvb3Jkc0ZhY3Rvcnk6KHVlLHllKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModWUseWUpfSksdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixmLEcsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCxCZChTXyx0aGlzLG51bGwpKX0sb25DZWxsTW91c2VVcDooZix2LE0sSSk9Pntjb25zdCBHPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0''@;'; put 'put ''aGlzLmFjdGl2ZVd0PUksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGYsRyxNKSwhRm0oZikmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAiLGYsRyxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0s''@;'; put 'put ''b25DZWxsQ29ybmVyTW91c2VEb3duOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixmKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJP''@;'; put 'put ''bkNlbGxDb3JuZXJEYmxDbGljayIsZil9LGJlZm9yZURyYXc6KGYsdik9PnRoaXMuYmVmb3JlUmVuZGVyKGYsdiksb25EcmF3OmY9PnRoaXMuYWZ0ZXJSZW5kZXIoZiksb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLEk9ZjwwO2xldCBHPWY7cmV0dXJuIEl8fChHPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Ryk/KEc9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsRyx2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3Bv''@;'; put 'put ''cnRTY3JvbGwiKSxJP0c6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEcpKTpmfSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixJPWY8MDtsZXQgRz1mO3JldHVybiBJfHwoRz1NLmdldFZp''@;'; put 'put ''c3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PUcpPyhHPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsRyx2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxJP0c6TS5nZXRSZW5kZXJhYmxlRnJvbVZp''@;'; put 'put ''c3VhbEluZGV4KEcpKTpmfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVh''@;'; put 'put ''ZGVyOihmLHYsTSk9Pntjb25zdCBJPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEc9ZjwwO2xldCBpZT1mO0d8fChpZT1JLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IHVlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGllLHYs''@;'; put 'put ''TSk7cmV0dXJuIEc/dWU6SS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEkuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHVlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KGYsdixNKT0+e2NvbnN0IEk9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsRz1mPDA7''@;'; put 'put ''bGV0IGllPWY7R3x8KGllPUkuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgdWU9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsaWUsdixNKTtyZXR1cm4gRz91ZTpJLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSS5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodWUsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooZix2LE0pPT57bGV0IEk7Y29uc3RbRyxpZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSx1ZT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZSgpO2lmKHVlLnNpemUoKT4wKXtjb25zdCBFZT11ZS5wZWVrQnlJbmRleChNPz8wKTtJPVtFZS5mcm9tLnJvdyxFZS5mcm9tLmNvbCxFZS50by5yb3csRWUudG8uY29sXX1yZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsRyxpZSxJLE0pfSxvbkJlZm9yZURy''@;'; put 'put ''YXdCb3JkZXJzOihmLHYpPT57Y29uc3RbTSxJLEcsaWVdPWYsdWU9W3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChJKSx0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEcpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaWUpXTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIix1ZSx2KX0sb25CZWZv''@;'; put 'put ''cmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Zj0+dGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGYsdixNLEkpPT57Y29uc3QgRz10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixpZT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix1ZT12Pj0wP2llLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgo''@;'; put 'put ''dik6dix5ZT1mPj0wP0cuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLEVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIix5ZSx1ZSxNLEkpO2lmKEFycmF5LmlzQXJyYXkoRWUpKXtjb25zdFtqZSxxZSxydCxwdF09RWU7cmV0dXJuW2plPj0wP0cuZ2V0''@;'; put 'put ''UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChHLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChqZSwxKSk6amUscWU+PTA/aWUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChpZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocWUsMSkpOnFlLHJ0Pj0wP0cuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChHLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChydCwtMSkpOnJ0LHB0Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHB0LC0xKSk6cHRdfX0sb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50OihmLHYpPT57Y29u''@;'; put 'put ''c3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixJPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLEc9dj49MD9JLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixpZT1mPj0wP00uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLHVlPXRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IixpZSxHKTtpZihBcnJheS5pc0FycmF5KHVlKSl7Y29uc3RbeWUsRWVdPXVlO3JldHVyblt5ZT49MD9NLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeWUsMSkpOnllLEVlPj0wP0kuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleChJLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxKSk6RWVdfX0sdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5z''@;'; put 'put ''ZXR0aW5ncy5maXhlZFJvd3NUb3AmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksST1mLnN0YXJ0Um93LEc9Zi5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiB2KWYuc3RhcnRSb3c9TWF0aC5tYXgoSS12LDApLGYuZW5kUm93PU1h''@;'; put 'put ''dGgubWluKEcrdixNLTEpO2Vsc2UgaWYoImF1dG8iPT09dil7Y29uc3QgaWU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoRy9NKjEyKSk7Zi5zdGFydFJvdz1NYXRoLm1heChJLWllLDApLGYuZW5kUm93PU1hdGgubWluKEcraWUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRS''@;'; put 'put ''b3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYodj0x''@;'; put 'put ''MCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLEk9Zi5zdGFydENvbHVtbixHPWYuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgdiYmKGYuc3RhcnRDb2x1bW49TWF0aC5tYXgoSS12LDApLGYuZW5kQ29sdW1uPU1hdGgubWluKEcr''@;'; put 'put ''dixNLTEpKSwiYXV0byI9PT12KXtjb25zdCBpZT1NYXRoLm1heCgxLE1hdGguY2VpbChHL00qNikpO2Yuc3RhcnRDb2x1bW49TWF0aC5tYXgoSS1pZSwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihHK2llLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3Vs''@;'; put 'put ''YXRvck92ZXJyaWRlIixmKX0scm93SGVhZGVyV2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lkdGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3Mu''@;'; put 'put ''Y29sdW1uSGVhZGVySGVpZ2h0fHxmfX07dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsbCksdGhpcy5fd3Q9bmV3IGtLKGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgYT10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpkLGhlaWdodDpofT10''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKGQsaCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigp''@;'; put 'put ''fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5k''@;'; put 'put ''b2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmdGhpcy5ob3QucmVuZGVyKCl9KX1pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGwpe2lmKFNFKGwpKXJldHVybiEwO2NvbnN0IGE9TG0o''@;'; put 'put ''bCx0aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyKTtyZXR1cm4hISghMD09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmF8fCJjZWxsIj09PXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkmJmF8fCF0aGlzLnNldHRpbmdz''@;'; put 'put ''LmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzQ2VsbEVkaXRlZCgpJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKX1pc01vdXNlRG93bigpe3JldHVybiBBdShNZyx0aGlzKX1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlQ2VsbCgpKSYmdm9pZCAwIT09bCYmbH1pc0NlbGxFZGl0ZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGws''@;'; put 'put ''YSl7bCYmdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcixhKX1hZnRlclJlbmRlcihsKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWFwcGVuZFJvd0hlYWRl''@;'; put 'put ''cihsLGEpe2lmKGEuZmlyc3RDaGlsZCl7Y29uc3QgZD1hLmZpcnN0Q2hpbGQ7aWYoIXBvKGQsInJlbGF0aXZlIikpcmV0dXJuIHhwKGEpLHZvaWQgdGhpcy5hcHBlbmRSb3dIZWFkZXIobCxhKTt0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoZC5xdWVyeVNlbGVjdG9yKCIucm93SGVhZGVyIiksbCx0''@;'; put 'put ''aGlzLmhvdC5nZXRSb3dIZWFkZXIpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OmQsZ2V0Um93SGVhZGVyOmh9PXRoaXMuaG90LGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsdi5jbGFzc05hbWU9InJvd0hl''@;'; put 'put ''YWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKHYsbCxoKSxmLmFwcGVuZENoaWxkKHYpLGEuYXBwZW5kQ2hpbGQoZil9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyIixsLGEpfWFwcGVuZENvbEhlYWRlcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmhvdC5nZXRDb2xIZWFkZXIsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MDtjb25zdCBmPSgpPT57Y29uc3Qgdj1sPj0wP3RoaXMuaG90LmdldENvbHVtbk1ldGEobCkuaGVh''@;'; put 'put ''ZGVyQ2xhc3NOYW1lOm51bGw7cmV0dXJuIHY/di5zcGxpdCgiICIpOltdfTtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IHY9YS5maXJzdENoaWxkO3BvKHYsInJlbGF0aXZlIik/KHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCksdi5jbGFz''@;'; put 'put ''c05hbWU9IiIsVGkodixbInJlbGF0aXZlIiwuLi5mKCldKSk6KHhwKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDp2fT10aGlzLmhvdCxNPXYuY3JlYXRlRWxlbWVudCgiZGl2IiksST12LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxHPWYo''@;'; put 'put ''KTtNLmNsYXNzTGlzdC5hZGQoInJlbGF0aXZlIiwuLi5HKSxJLmNsYXNzTmFtZT0iY29sSGVhZGVyIix0aGlzLnNldHRpbmdzLmFyaWFUYWdzJiYodm8oTSwicm9sZSIsInByZXNlbnRhdGlvbiIpLHZvKEksInJvbGUiLCJwcmVzZW50YXRpb24iKSksdGhpcy51cGRhdGVDZWxsSGVhZGVyKEks''@;'; put 'put ''bCxkLGgpLE0uYXBwZW5kQ2hpbGQoSSksYS5hcHBlbmRDaGlsZChNKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwsYSxoKX11cGRhdGVDZWxsSGVhZGVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVu''@;'; put 'put ''dHNbM106MCxmPWE7Y29uc3Qgdj10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCl8fHRoaXMuX3d0O2wucGFyZW50Tm9kZSYmKHBvKGwsImNvbEhlYWRlciIpP2Y9di53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpOnBvKGwsInJvd0hlYWRlciIp''@;'; put 'put ''JiYoZj12Lnd0VGFibGUucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSkpKSxmPi0xP3o3KGwsZChhLGgpKTooUG0obCwiXHhhMCIpLFRpKGwsImNvcm5lckhlYWRlciIpKX1tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChsKXtjb25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29y''@;'; put 'put ''a3NwYWNlV2lkdGgoKS1sO3JldHVybiBkPjA/ZDowfW1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChsKXtjb25zdCBkPXRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbDtyZXR1cm4gZD4wP2Q6MH1zZXRMYXN0U2l6ZShsLGEpe0JkKFJLLHRoaXMsbCksQmQoTEss''@;'; put 'put ''dGhpcyxhKX1nZXRMYXN0U2l6ZSgpe3JldHVybnt3aWR0aDpBdShSSyx0aGlzKSxoZWlnaHQ6QXUoTEssdGhpcyl9fWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lm''@;'; put 'put ''KCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKSk7cmV0dXJu''@;'; put 'put ''IGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/P3RoaXMuaG90LmNvdW50Um93cygpLTEsLTEpfWdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/PzAsMSl9Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVt''@;'; put 'put ''bigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRD''@;'; put 'put ''b2x1bW4oKSk7cmV0dXJuIGwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGE/P3RoaXMuaG90LmNvdW50Q29scygpLTEsLTEpfWdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5f''@;'; put 'put ''d3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJz''@;'; put 'put ''dEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3Vh''@;'; put 'put ''bEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5f''@;'; put 'put ''d3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RQ''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1''@;'; put 'put ''bW4oKSl9Z2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIEF1KElLLHRoaXMpfWdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiBBdSh1UCx0aGlzKX1nZXRWaWV3cG9ydFdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpfWdldFdvcmtzcGFj''@;'; put 'put ''ZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKX1nZXRWaWV3cG9ydEhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmll''@;'; put 'put ''d3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9Z2V0RWxlbWVudE92ZXJsYXlOYW1lKGwpe3ZhciBhO3JldHVybihudWxsIT09KGE9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpKSYmdm9pZCAwIT09YT9hOnRoaXMuX3d0KS53dFRhYmxlLm5hbWV9Z2V0T3ZlcmxheUJ5''@;'; put 'put ''TmFtZShsKXtyZXR1cm4gdGhpcy5fd3QuZ2V0T3ZlcmxheUJ5TmFtZShsKX1nZXRBY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93dC5hY3RpdmVPdmVybGF5TmFtZX1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5pc1Zpc2libGUoKX1oYXNWZXJ0aWNhbFNjcm9s''@;'; put 'put ''bCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmhhc0hvcml6b250YWxTY3JvbGwoKX1nZXRUYWJsZVdpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0''@;'; put 'put ''V2lkdGgoKX1nZXRUYWJsZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldEhlaWdodCgpfWdldFRhYmxlT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlT2Zmc2V0KCl9Z2V0Um93SGVhZGVyV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RW''@;'; put 'put ''aWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0Lmlz''@;'; put 'put ''VmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpfWlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1kZXN0cm95KCl7dGhpcy5fd3QuZGVzdHJveSgpLHRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmRlc3Ryb3koKX19O2IoMTM5MDgpO2NvbnN0IHgzZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLE9LPXgzZS5sZW5ndGg7ZnVuY3Rpb24gaFAoYyl7bGV0IGQsbD1jKzEsYT0iIjtmb3IoO2w+MDspZD0obC0xKSVPSyxhPVN0cmluZy5mcm9tQ2hhckNvZGUoNjUrZCkr''@;'; put 'put ''YSxsPXBhcnNlSW50KChsLWQpL09LLDEwKTtyZXR1cm4gYX1mdW5jdGlvbiBFdHQoYyl7bGV0IGw9MDtpZihjKWZvcihsZXQgYT0wLGQ9Yy5sZW5ndGgtMTthPGMubGVuZ3RoO2ErPTEsZC09MSlsKz1PSyoqZCooeDNlLmluZGV4T2YoY1thXSkrMSk7cmV0dXJuIGwtPTEsbH1mdW5jdGlvbiBU''@;'; put 'put ''dHQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7''@;'; put 'put ''Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDtoKyspZi5wdXNoKGhQKGgpKyhkKzEpKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gQXR0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9e307Zm9yKGg9MDtoPGw7aCsrKWZbYHByb3Ake2h9YF09aFAoaCkrKGQrMSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGt0dChjLGwp''@;'; put 'put ''e2NvbnN0IGE9W107bGV0IGQ7Zm9yKGxldCBoPTA7aDxjO2grKyl7ZD1bXTtmb3IobGV0IGY9MDtmPGw7ZisrKWQucHVzaCgiIik7YS5wdXNoKGQpfXJldHVybiBhfWZ1bmN0aW9uIFBLKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50''@;'; put 'put ''c1sxXTowLGE9Yztjb25zdCBkPVtdO3JldHVybighQXJyYXkuaXNBcnJheShjKXx8IUFycmF5LmlzQXJyYXkoY1swXSkpJiYoYT1bY10pLGEuZm9yRWFjaCgoaCxmKT0+e0FycmF5LmlzQXJyYXkoaCk/aC5mb3JFYWNoKCh2LE0pPT57ZC5wdXNoKFtmK2wsTSx2XSl9KTpPYmplY3Qua2V5cyho''@;'; put 'put ''KS5mb3JFYWNoKHY9PntkLnB1c2goW2YrbCx2LGhbdl1dKX0pfSksZH1mdW5jdGlvbiBGSyhjKXtsZXQgbD0wO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoY1swXSYmQXJyYXkuaXNBcnJheShjWzBdKT9sPWNbMF0ubGVuZ3RoOmNbMF0mJnFvKGNbMF0pJiYobD1CTyhjWzBdKSkpLGx9ZnVu''@;'; put 'put ''Y3Rpb24gRTNlKGMpe3JldHVybiEhKEFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PkFycmF5LmlzQXJyYXkobCkpKX1mdW5jdGlvbiBUM2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+Im9iamVjdCI9PXR5cGVvZiBsJiYh''@;'; put 'put ''QXJyYXkuaXNBcnJheShsKSYmbnVsbCE9PWwpKX1mdW5jdGlvbiAkRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRHR0KGMpe3ZhciBsPWZ1bmN0aW9uIEl0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgTHR0PWNs''@;'; put 'put ''YXNzIFJ0dHtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107JEUodGhpcywiaG90Iix2b2lkIDApLCRFKHRoaXMsImRhdGEiLHZvaWQgMCksJEUodGhpcywiZGF0YVR5cGUiLCJhcnJheSIpLCRFKHRo''@;'; put 'put ''aXMsImNvbFRvUHJvcCIsKCk9Pnt9KSwkRSh0aGlzLCJwcm9wVG9Db2wiLCgpPT57fSksdGhpcy5ob3Q9bCx0aGlzLmRhdGE9YX1tb2RpZnlSb3dEYXRhKGwpe2xldCBhO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlSb3dEYXRhIikmJihhPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2Rp''@;'; put 'put ''ZnlSb3dEYXRhIixsKSksdm9pZCAwPT09YXx8TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF06YX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YSYmMCE9PXRoaXMuZGF0YS5sZW5ndGg/dGhpcy5nZXRCeVJhbmdlKG51bGwsbnVsbCxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKTp0aGlzLmRhdGF9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRBdENvbHVtbihsKXtjb25zdCBhPVtdO3JldHVybiBZbih0aGlzLmRhdGEsKGQsaCk9Pntjb25zdCBmPXRoaXMuZ2V0QXRDZWxsKGgsbCk7YS5wdXNoKGYpfSksYX1nZXRBdFJv''@;'; put 'put ''dyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBmPXZvaWQgMD09PWEmJnZvaWQgMD09PWQse2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGwsST1udWxsO2lm''@;'; put 'put ''KE09dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFycmF5LmlzQXJyYXkoTSkpST1bXSxmP00uZm9yRWFjaCgoRyxpZSk9PntJW2llXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsaWUsTSl9KTpHYShhLGQsRz0+e0lbRy1hXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsRyxNKX0pO2Vsc2UgaWYo''@;'; put 'put ''cW8oTSl8fG1sKE0pKWlmKEk9aD9bXTp7fSwhZnx8aCl7Y29uc3QgaWU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7R2EoMCxpZSx1ZT0+e2NvbnN0IHllPXRoaXMuY29sVG9Qcm9wKHVlKTtpZih1ZT49KGF8fDApJiZ1ZTw9KGR8fGllKSYmIU51bWJlci5pc0ludGVnZXIoeWUpKXtjb25z''@;'; put 'put ''dCBFZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwseWUsTSk7aD9JLnB1c2goRWUpOnY/Vk8oSSx5ZSxFZSk6SVt5ZV09RWV9fSl9ZWxzZSBYbyhNLChHLGllKT0+e2NvbnN0IHVlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxNKTt2P1ZPKEksaWUsdWUpOklbaWVdPXVlfSk7cmV0dXJu''@;'; put 'put ''IEl9c2V0QXRDZWxsKGwsYSxkKXtpZighKGw+PXRoaXMuY291bnRSb3dzKCl8fGE+PXRoaXMuY291bnRGaXJzdFJvd0tleXMoKSkpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgaD1GZChkKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0''@;'; put 'put ''YSIsbCxhLGgsInNldCIpLGguaXNUb3VjaGVkKCkmJihkPWgudmFsdWUpfVsiX19wcm90b19fIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiXS5pbmNsdWRlcyhsKXx8KE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdW2FdPWQ6Vk8odGhpcy5kYXRhW2xdLGEsZCkpfX1nZXRBdFBo''@;'; put 'put ''eXNpY2FsQ2VsbChsLGEsZCl7bGV0IGg9bnVsbDtpZihkKWlmKCJzdHJpbmciPT10eXBlb2YgYSl7Y29uc3R7ZGF0YURvdE5vdGF0aW9uOmZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aD1mPyQyZShkLGEpOmRbYV19ZWxzZSBoPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXTtpZih0''@;'; put 'put ''aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRhIikpe2NvbnN0IGY9RmQoaCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxmLCJnZXQiKSxmLmlzVG91Y2hlZCgpJiYoaD1mLnZhbHVlKX1yZXR1cm4gaH1nZXRBdENlbGwobCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''bW9kaWZ5Um93RGF0YShsKTtyZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRoaXMuY29sVG9Qcm9wKGEpLGQpfWdldEJ5UmFuZ2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCxhPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9bnVsbCx2PW51bGwsTT1udWxsLEk9bnVsbDtudWxsPT09bHx8bnVsbD09PWE/KGg9ITAsZj0w''@;'; put 'put ''LE09dGhpcy5jb3VudFJvd3MoKS0xKTooZj1NYXRoLm1pbihsLnJvdyxhLnJvdyksdj1NYXRoLm1pbihsLmNvbCxhLmNvbCksTT1NYXRoLm1heChsLnJvdyxhLnJvdyksST1NYXRoLm1heChsLmNvbCxhLmNvbCkpO2NvbnN0IEc9W107cmV0dXJuIEdhKGYsTSxpZT0+e0cucHVzaChoP3RoaXMu''@;'; put 'put ''Z2V0QXRSb3coaWUsdm9pZCAwLHZvaWQgMCxkKTp0aGlzLmdldEF0Um93KGllLHYsSSxkKSl9KSxHfWNvdW50Um93cygpe2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIpKXtjb25zdCBsPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VMZW5ndGgiKTtpZihO''@;'; put 'put ''dW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsfXJldHVybiB0aGlzLmRhdGEubGVuZ3RofWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIEZLKHRoaXMuZGF0YSl9ZGVzdHJveSgpe3RoaXMuZGF0YT1udWxsLHRoaXMuaG90PW51bGx9fTtiKDIwMjkxKTtjb25zdCBBM2U9e19sb2NhbEhvb2tz''@;'; put 'put ''Ok9iamVjdC5jcmVhdGUobnVsbCksYWRkTG9jYWxIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3NbY118fCh0aGlzLl9sb2NhbEhvb2tzW2NdPVtdKSx0aGlzLl9sb2NhbEhvb2tzW2NdLnB1c2gobCksdGhpc30scnVuTG9jYWxIb29rcyhjLGwsYSxkLGgsZix2KXtpZih0aGlzLl9s''@;'; put 'put ''b2NhbEhvb2tzW2NdKXtjb25zdCBNPXRoaXMuX2xvY2FsSG9va3NbY10ubGVuZ3RoO2ZvcihsZXQgST0wO0k8TTtJKyspSE8odGhpcy5fbG9jYWxIb29rc1tjXVtJXSx0aGlzLGwsYSxkLGgsZix2KX19LGNsZWFyTG9jYWxIb29rcygpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzPXt9LHRoaXN9''@;'; put 'put ''fTtUcChBM2UsIk1JWElOX05BTUUiLCJsb2NhbEhvb2tzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IGIxPUEzZTtmdW5jdGlvbiBrM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFB0dChjKXt2YXIgbD1mdW5jdGlvbiBGdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGU5e2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7azNlKHRoaXMsImluZGV4ZWRWYWx1ZXMiLFtdKSxrM2UodGhpcywi''@;'; put 'put ''aW5pdFZhbHVlT3JGbiIsdm9pZCAwKSx0aGlzLmluaXRWYWx1ZU9yRm49bH1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5pbmRleGVkVmFsdWVzfWdldFZhbHVlQXRJbmRleChsKXtjb25zdCBhPXRoaXMuaW5kZXhlZFZhbHVlcztpZihsPGEubGVuZ3RoKXJldHVybiBhW2xdfXNldFZhbHVlcyhs''@;'; put 'put ''KXt0aGlzLmluZGV4ZWRWYWx1ZXM9bC5zbGljZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9c2V0VmFsdWVBdEluZGV4KGwsYSl7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRoaXMuaW5kZXhlZFZhbHVlc1tsXT1hLHRoaXMucnVuTG9jYWxIb29rcygiY2hh''@;'; put 'put ''bmdlIiksITApfWNsZWFyKCl7dGhpcy5zZXREZWZhdWx0VmFsdWVzKCl9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVzKCkubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06''@;'; put 'put ''dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoPTAsbWwodGhpcy5pbml0VmFsdWVPckZuKT9HYShsLTEsYT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKGEpKSk6R2EobC0xLCgpPT50aGlzLmluZGV4ZWRWYWx1ZXMu''@;'; put 'put ''cHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4pKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWluaXQobCl7cmV0dXJuIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyhsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKSx0aGlzfWluc2VydCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9''@;'; put 'put ''cmVtb3ZlKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmluZGV4ZWRWYWx1ZXM9bnVsbCx0aGlzLmluaXRWYWx1ZU9yRm49bnVsbH19ZnVuY3Rpb24gSEsoYyxsLGEpe3JldHVyblsuLi5jLnNsaWNlKDAsbCksLi4u''@;'; put 'put ''YSwuLi5jLnNsaWNlKGwpXX1mdW5jdGlvbiBLRShjLGwpe3JldHVybiBJbShjLGE9PiExPT09bC5pbmNsdWRlcyhhKSl9ZnVuY3Rpb24gTksoYyxsKXtyZXR1cm4gYnMoYyxhPT5hLWwuZmlsdGVyKGQ9PmQ8YSkubGVuZ3RoKX1mdW5jdGlvbiBWSyhjLGwpe2NvbnN0IGE9bFswXSxkPWwubGVu''@;'; put 'put ''Z3RoO3JldHVybiBicyhjLGg9Pmg+PWE/aCtkOmgpfVRsKGU5LGIxKTtjbGFzcyBEM2UgZXh0ZW5kcyBlOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9VksodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz1ISyhkLGwsYSksc3Vw''@;'; put 'put ''ZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9S0UodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz1OSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19ZnVuY3Rpb24gQksoYyxsLGEsZCl7Y29uc3QgaD1hLmxlbmd0aD9hWzBdOnZvaWQgMDtyZXR1cm5bLi4uYy5z''@;'; put 'put ''bGljZSgwLGgpLC4uLmEubWFwKChmLHYpPT5tbChkKT9kKGYsdik6ZCksLi4udm9pZCAwPT09aD9bXTpjLnNsaWNlKGgpXX1mdW5jdGlvbiBqSyhjLGwpe3JldHVybiBJbShjLChhLGQpPT4hMT09PWwuaW5jbHVkZXMoZCkpfWNsYXNzIFptIGV4dGVuZHMgZTl7aW5zZXJ0KGwsYSl7dGhpcy5p''@;'; put 'put ''bmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWpLKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9fWNsYXNzIGZQIGV4dGVuZHMg''@;'; put 'put ''Wm17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRIaWRkZW5JbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNsYXNzIHBQ''@;'; put 'put ''IGV4dGVuZHMgZTl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEh0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTnR0KGMpe3ZhciBsPWZ1bmN0aW9uIFZ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9KHRoaXMsIm9yZGVyT2ZJbmRleGVzIixbXSl9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PnRoaXMuaW5kZXhlZFZhbHVlc1tsXSl9c2V0VmFsdWVzKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9Wy4uLkFycmF5KGwubGVuZ3RoKS5rZXlzKCldLHN1''@;'; put 'put ''cGVyLnNldFZhbHVlcyhsKX1zZXRWYWx1ZUF0SW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg7cmV0dXJuIGw8dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCYmKHRo''@;'; put 'put ''aXMuaW5kZXhlZFZhbHVlc1tsXT1hLCExPT09dGhpcy5vcmRlck9mSW5kZXhlcy5pbmNsdWRlcyhsKSYmdGhpcy5vcmRlck9mSW5kZXhlcy5zcGxpY2UoZCwwLGwpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIiksITApfWNsZWFyVmFsdWUobCl7dGhpcy5vcmRlck9mSW5kZXhlcz1LRSh0''@;'; put 'put ''aGlzLm9yZGVyT2ZJbmRleGVzLFtsXSksbWwodGhpcy5pbml0VmFsdWVPckZuKT9zdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4obCkpOnN1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbil9Z2V0TGVuZ3RoKCl7cmV0dXJuIHRoaXMub3Jk''@;'; put 'put ''ZXJPZkluZGV4ZXMubGVuZ3RofXNldERlZmF1bHRWYWx1ZXMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aDt0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aD0wLHN1cGVyLnNldERl''@;'; put 'put ''ZmF1bHRWYWx1ZXMobCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUJLKHRoaXMuaW5kZXhlZFZhbHVlcywwLGEsdGhpcy5pbml0VmFsdWVPckZuKSx0aGlzLm9yZGVyT2ZJbmRleGVzPVZLKHRoaXMub3JkZXJPZkluZGV4ZXMsYSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwp''@;'; put 'put ''e3RoaXMuaW5kZXhlZFZhbHVlcz1qSyh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz1LRSh0aGlzLm9yZGVyT2ZJbmRleGVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9TksodGhpcy5vcmRlck9mSW5kZXhlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0RW50cmllcygp''@;'; put 'put ''e3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT5bbCx0aGlzLmdldFZhbHVlQXRJbmRleChsKV0pfX1jbGFzcyBxRSBleHRlbmRzIFpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0''@;'; put 'put ''VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4gcXUodGhpcy5nZXRWYWx1ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNoKGQpLGwpLFtdKX19Y29uc3QgSTNlPW5ldyBNYXAoW1siaGlkaW5nIixmUF0sWyJpbmRleCIsZTldLFsibGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWUiLHBQXSxbInBoeXNpY2Fs''@;'; put 'put ''SW5kZXhUb1ZhbHVlIixabV0sWyJ0cmltbWluZyIscUVdXSk7bGV0IHpLPTA7Y2xhc3MgVUt7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24ganR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB6dHQoYyl7dmFyIGw9ZnVuY3Rpb24gVXR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly''@;'; put 'put ''ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY29sbGVjdGlvbiIsbmV3IE1hcCl9cmVnaXN0ZXIobCxhKXshMT09PXRoaXMuY29sbGVjdGlvbi5oYXMobCkmJih0aGlzLmNvbGxlY3Rpb24uc2V0KGwsYSksYS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9PnRoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygiY2hhbmdlIixhKSkseksrPTEpfXVucmVnaXN0ZXIobCl7Y29uc3QgYT10aGlzLmNvbGxlY3Rpb24uZ2V0KGwpO1BhKGEpJiYoYS5kZXN0cm95KCksdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSksekstPTEpfXVucmVnaXN0''@;'; put 'put ''ZXJBbGwoKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaCgobCxhKT0+dGhpcy51bnJlZ2lzdGVyKGEpKSx0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKX1nZXQobCl7cmV0dXJuIF9jKGwpP0FycmF5LmZyb20odGhpcy5jb2xsZWN0aW9uLnZhbHVlcygpKTp0aGlzLmNvbGxlY3Rpb24uZ2V0KGwpfWdl''@;'; put 'put ''dExlbmd0aCgpe3JldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZX1yZW1vdmVGcm9tRXZlcnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EucmVtb3ZlKGwpfSl9aW5zZXJ0VG9FdmVyeShsLGEpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGQ9PntkLmluc2VydChsLGEpfSl9aW5p''@;'; put 'put ''dEV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLmluaXQobCl9KX19ZnVuY3Rpb24gWksoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFd0dChjKXt2YXIgbD1mdW5jdGlvbiBZdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfVRsKFVLLGIxKTtjbGFzcyBSM2UgZXh0ZW5kcyBVS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksWksodGhpcywibWVyZ2VkVmFsdWVzQ2FjaGUiLFtdKSxaSyh0aGlzLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIix2b2lkIDApLFpLKHRoaXMsImZhbGxiYWNrVmFsdWUiLHZvaWQg''@;'; put 'put ''MCksdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uPWwsdGhpcy5mYWxsYmFja1ZhbHVlPWF9Z2V0TWVyZ2VkVmFsdWVzKCl7aWYoITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMubWVyZ2VkVmFsdWVzQ2Fj''@;'; put 'put ''aGU7aWYoMD09PXRoaXMuZ2V0TGVuZ3RoKCkpcmV0dXJuW107Y29uc3QgYT1icyh0aGlzLmdldCgpLGY9PmYuZ2V0VmFsdWVzKCkpLGQ9W10saD1QYShhWzBdKSYmYVswXS5sZW5ndGh8fDA7Zm9yKGxldCBmPTA7ZjxoO2YrPTEpe2NvbnN0IHY9W107Zm9yKGxldCBNPTA7TTx0aGlzLmdldExl''@;'; put 'put ''bmd0aCgpO00rPTEpdi5wdXNoKGFbTV1bZl0pO2QucHVzaCh2KX1yZXR1cm4gYnMoZCx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb24pfWdldE1lcmdlZFZhbHVlQXRJbmRleChsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoYSlbbF07cmV0dXJuIFBhKGQpP2Q6dGhpcy5mYWxsYmFj''@;'; put 'put ''a1ZhbHVlfXVwZGF0ZUNhY2hlKCl7dGhpcy5tZXJnZWRWYWx1ZXNDYWNoZT10aGlzLmdldE1lcmdlZFZhbHVlcyghMSl9fWZ1bmN0aW9uIEwzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFdLPW5ldyBXZWFrTWFwO2NsYXNzIE8zZXtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBHdHQoYyxsLGEpeyhmdW5jdGlvbiAkdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdLLFtdKX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMu''@;'; put 'put ''X3dyaXRlKGZ1bmN0aW9uIHF0dChjLGwpe3JldHVybiBjLmdldChMM2UoYyxsKSl9KFdLLHRoaXMpKSx0aGlzfXVuc3Vic2NyaWJlKCl7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygidW5zdWJzY3JpYmUiKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXN9X3dyaXRlKGwpe3JldHVybiBs''@;'; put 'put ''Lmxlbmd0aD4wJiZ0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCksdGhpc31fd3JpdGVJbml0aWFsQ2hhbmdlcyhsKXshZnVuY3Rpb24gS3R0KGMsbCxhKXtjLnNldChMM2UoYyxsKSxhKX0oV0ssdGhpcyxsKX19ZnVuY3Rpb24gUDNlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZD0wLGg9MDtm''@;'; put 'put ''b3IoO2Q8Yy5sZW5ndGgmJmg8bC5sZW5ndGg7ZCsrLGgrKyljW2RdIT09bFtoXSYmYS5wdXNoKHtvcDoicmVwbGFjZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2RdLG5ld1ZhbHVlOmxbaF19KTtmb3IoO2Q8bC5sZW5ndGg7ZCsrKWEucHVzaCh7b3A6Imluc2VydCIsaW5kZXg6ZCxvbGRWYWx1ZTp2''@;'; put 'put ''b2lkIDAsbmV3VmFsdWU6bFtkXX0pO2Zvcig7aDxjLmxlbmd0aDtoKyspYS5wdXNoKHtvcDoicmVtb3ZlIixpbmRleDpoLG9sZFZhbHVlOmNbaF0sbmV3VmFsdWU6dm9pZCAwfSk7cmV0dXJuIGF9ZnVuY3Rpb24gWEUoYyxsLGEpeyhmdW5jdGlvbiBYdHQoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFkyKGMsbCl7cmV0dXJuIGMuZ2V0KEYzZShjLGwpKX1mdW5jdGlvbiBnUChjLGwsYSl7cmV0dXJu''@;'; put 'put ''IGMuc2V0KEYzZShjLGwpLGEpLGF9ZnVuY3Rpb24gRjNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhpcyBvYmplY3QiKX1UbChPM2UsYjEpO3ZhciBtUD1uZXcgV2Vha01hcCxKRT1uZXcgV2Vha01hcCx2UD1uZXcgV2Vha01hcCx5UD1uZXcgV2Vha01hcCxiUD1uZXcgV2Vha01hcDtjbGFzcyBKdHR7Y29uc3RydWN0b3IoKXtsZXR7aW5pdGlhbEluZGV4VmFsdWU6bH09YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O1hFKHRoaXMsbVAsbmV3IFNldCksWEUodGhpcyxKRSxbXSksWEUodGhpcyx2UCxbXSksWEUodGhpcyx5UCwhMSksWEUodGhpcyxiUCwhMSksZ1AoYlAsdGhpcyxsPz8hMSl9Y3JlYXRlT2JzZXJ2ZXIoKXtjb25z''@;'; put 'put ''dCBsPW5ldyBPM2U7cmV0dXJuIFkyKG1QLHRoaXMpLmFkZChsKSxsLmFkZExvY2FsSG9vaygidW5zdWJzY3JpYmUiLCgpPT57WTIobVAsdGhpcykuZGVsZXRlKGwpfSksbC5fd3JpdGVJbml0aWFsQ2hhbmdlcyhQM2UoWTIoSkUsdGhpcyksWTIodlAsdGhpcykpKSxsfWVtaXQobCl7bGV0IGE9''@;'; put 'put ''WTIodlAsdGhpcyk7KCFZMih5UCx0aGlzKXx8WTIoSkUsdGhpcykubGVuZ3RoIT09bC5sZW5ndGgpJiYoMD09PWwubGVuZ3RoP2w9bmV3IEFycmF5KGEubGVuZ3RoKS5maWxsKFkyKGJQLHRoaXMpKTpnUChKRSx0aGlzLG5ldyBBcnJheShsLmxlbmd0aCkuZmlsbChZMihiUCx0aGlzKSkpLFky''@;'; put 'put ''KHlQLHRoaXMpfHwoZ1AoeVAsdGhpcywhMCksYT1ZMihKRSx0aGlzKSkpO2NvbnN0IGQ9UDNlKGEsbCk7WTIobVAsdGhpcykuZm9yRWFjaChoPT5oLl93cml0ZShkKSksZ1AodlAsdGhpcyxsKX19ZnVuY3Rpb24gSzEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFF0dChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBlbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFlLe2NvbnN0cnVjdG9yKCl7SzEodGhpcywiaW5kZXhlc1NlcXVlbmNlIixuZXcgRDNlKSxLMSh0aGlzLCJ0cmltbWluZ01hcHNDb2xsZWN0aW9uIixuZXcg''@;'; put 'put ''UjNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSksSzEodGhpcywiaGlkaW5nTWFwc0NvbGxlY3Rpb24iLG5ldyBSM2UobD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxLMSh0aGlzLCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb24iLG5ldyBVSyksSzEodGhpcywiaGlkaW5nQ2hhbmdlc09ic2VydmFi''@;'; put 'put ''bGUiLG5ldyBKdHQoe2luaXRpYWxJbmRleFZhbHVlOiExfSkpLEsxKHRoaXMsIm5vdFRyaW1tZWRJbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJub3RIaWRkZW5JbmRleGVzQ2FjaGUiLFtdKSxLMSh0aGlzLCJpc0JhdGNoZWQiLCExKSxLMSh0aGlzLCJpbmRleGVzU2VxdWVuY2VDaGFuZ2Vk''@;'; put 'put ''IiwhMSksSzEodGhpcywiaW5kZXhlc0NoYW5nZVNvdXJjZSIsdm9pZCAwKSxLMSh0aGlzLCJ0cmltbWVkSW5kZXhlc0NoYW5nZWQiLCExKSxLMSh0aGlzLCJoaWRkZW5JbmRleGVzQ2hhbmdlZCIsITEpLEsxKHRoaXMsInJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZSIsW10pLEsxKHRo''@;'; put 'put ''aXMsImZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlIixuZXcgTWFwKSxLMSh0aGlzLCJmcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlIixuZXcgTWFwKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5hZGRMb2NhbEhvb2soImNoYW5nZSIsKCk9Pnt0aGlzLmluZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZUNoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZSxudWxsKX0pLHRoaXMu''@;'; put 'put ''dHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24pfSksdGhpcy52YXJpb3Vz''@;'; put 'put ''TWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbil9KX1zdXNwZW5kT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRjaGVkPSEwfXJlc3VtZU9wZXJhdGlvbnMoKXt0aGlzLmlz''@;'; put 'put ''QmF0Y2hlZD0hMSx0aGlzLnVwZGF0ZUNhY2hlKCl9Y3JlYXRlQ2hhbmdlc09ic2VydmVyKGwpe2lmKCJoaWRpbmciIT09bCl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlICIke2x9Ii5gKTtyZXR1cm4gdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZS5jcmVh''@;'; put 'put ''dGVPYnNlcnZlcigpfWNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAobCxhLGQpe3JldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGwsZnVuY3Rpb24gQnR0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFJM2UuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIG1hcCB0eXBlICgiJHtjfSIpIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBuZXcoSTNlLmdldChjKSkobCl9KGEsZCkpfXJlZ2lzdGVyTWFwKGwsYSl7aWYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldChsKSl0aHJvdyBFcnJvcihgTWFwIHdpdGggbmFtZSAiJHtsfSIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO2EgaW5zdGFuY2VvZiBxRT90aGlzLnRyaW1taW5nTWFwc0NvbGxl''@;'; put 'put ''Y3Rpb24ucmVnaXN0ZXIobCxhKTphIGluc3RhbmNlb2YgZlA/dGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpOnRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk7Y29uc3QgZD10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3JldHVybiBkPjAmJmEu''@;'; put 'put ''aW5pdChkKSxhfXVucmVnaXN0ZXJNYXAobCl7dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCl9dW5yZWdpc3RlckFsbCgp''@;'; put 'put ''e3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpfWdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlW2xdO3JldHVybiBQYShhKT9hOm51bGx9Z2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpe2NvbnN0IGE9dGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGVbbF07cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXRWaXN1YWxG''@;'; put 'put ''cm9tUGh5c2ljYWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBQYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKXtyZXR1cm4gdGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh0''@;'; put 'put ''aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKSl9Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIFBhKGEpP2E6bnVsbH1nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKG51bGw9PT10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGwpKXJldHVybiBudWxsO2lmKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4''@;'; put 'put ''ZXNDYWNoZS5oYXMobCkpcmV0dXJuIGw7Y29uc3QgZj1BcnJheS5mcm9tKHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5rZXlzKCkpO2xldCB2PS0xO3JldHVybiB2PWE+MD9mLmZpbmRJbmRleChNPT5NPmwpOmYucmV2ZXJzZSgpLmZpbmRJbmRleChNPT5NPGwpLC0x''@;'; put 'put ''PT09dj9kP3RoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsLWEsITEpOm51bGw6Zlt2XX1pbml0VG9MZW5ndGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTt0aGlzLm5v''@;'; put 'put ''dFRyaW1tZWRJbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbml0Iix0aGlzLmluZGV4''@;'; put 'put ''ZXNTZXF1ZW5jZS5pbml0KGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlv''@;'; put 'put ''bi5pbml0RXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpfWZpdFRvTGVuZ3RoKGwpe2NvbnN0IGE9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtpZihsPGEpe2Nv''@;'; put 'put ''bnN0IGQ9Wy4uLkFycmF5KHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCktbCkua2V5cygpXS5tYXAoaD0+aCtsKTt0aGlzLnJlbW92ZUluZGV4ZXMoZCl9ZWxzZSB0aGlzLmluc2VydEluZGV4ZXMoYSxsLWEpfWdldEluZGV4ZXNTZXF1ZW5jZSgpe3JldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZS5nZXRWYWx1ZXMoKX1zZXRJbmRleGVzU2VxdWVuY2UobCl7dm9pZCAwPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJ1cGRhdGUiKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMobCksInVwZGF0ZSI9PT10aGlzLmluZGV4ZXND''@;'; put 'put ''aGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwKX1nZXROb3RUcmltbWVkSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90VHJpbW1lZEluZGV4ZXND''@;'; put 'put ''YWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNUcmltbWVkKGQpKX1nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RofWdldE5vdEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4h''@;'; put 'put ''MD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZTp0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCkubGVuZ3RofWdldFJlbmRlcmFibGVJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5yZW5kZXJhYmxl''@;'; put 'put ''UGh5c2ljYWxJbmRleGVzQ2FjaGU6dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmZpbHRlcihkPT4hMT09PXRoaXMuaXNIaWRkZW4oZCkpfWdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoKS5sZW5ndGh9Z2V0TnVtYmVyT2ZJ''@;'; put 'put ''bmRleGVzKCl7cmV0dXJuIHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkubGVuZ3RofW1vdmVJbmRleGVzKGwsYSl7Im51bWJlciI9PXR5cGVvZiBsJiYobD1bbF0pO2NvbnN0IGQ9YnMobCxHPT50aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KEcpKSxoPXRoaXMuZ2V0Tm90VHJpbW1l''@;'; put 'put ''ZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3RoLHY9S0UodGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKSxkKSxNPXYuZmlsdGVyKEc9PiExPT09dGhpcy5pc1RyaW1tZWQoRykpO2xldCBJPXYuaW5kZXhPZihNW00ubGVuZ3RoLTFdKSsxO2ErZjxoJiYoST12LmluZGV4T2YoTVthXSkpLHRoaXMu''@;'; put 'put ''aW5kZXhlc0NoYW5nZVNvdXJjZT0ibW92ZSIsdGhpcy5zZXRJbmRleGVzU2VxdWVuY2UoSEsodixJLGQpKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChs''@;'; put 'put ''KX1pc0hpZGRlbihsKXtyZXR1cm4gdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aW5zZXJ0SW5kZXhlcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpW2xdLGg9UGEoZCk/ZDp0aGlzLmdldE51bWJlck9mSW5kZXhlcygp''@;'; put 'put ''LGY9dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmNsdWRlcyhkKT90aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluZGV4T2YoZCk6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSx2PWJzKG5ldyBBcnJheShhKS5maWxsKGgpLChNLEkpPT5NK0kpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMo''@;'; put 'put ''KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0KGYsdiksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMuaGlkaW5nTWFwc0Nv''@;'; put 'put ''bGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX1yZW1vdmVJbmRleGVzKGwpe3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9''@;'; put 'put ''InJlbW92ZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UucmVtb3ZlKGwpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0''@;'; put 'put ''aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9dXBkYXRlQ2FjaGUoKXsoITA9PT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl8fCExPT09dGhpcy5pc0JhdGNo''@;'; put 'put ''ZWQmJiEwPT09KHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZHx8dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWR8fHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQpKSYmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24u''@;'; put 'put ''dXBkYXRlQ2FjaGUoKSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcyghMSksdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9dGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKCExKSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT10''@;'; put 'put ''aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCExKSx0aGlzLmNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCksdGhpcy5jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCksdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCYmdGhpcy5oaWRpbmdDaGFuZ2VzT2JzZXJ2YWJs''@;'; put 'put ''ZS5lbWl0KHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkpLHRoaXMucnVuTG9jYWxIb29rcygiY2FjaGVVcGRhdGVkIix7aW5kZXhlc1NlcXVlbmNlQ2hhbmdlZDp0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQsdHJpbW1lZEluZGV4ZXNDaGFuZ2VkOnRoaXMu''@;'; put 'put ''dHJpbW1lZEluZGV4ZXNDaGFuZ2VkLGhpZGRlbkluZGV4ZXNDaGFuZ2VkOnRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWR9KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ9ITEsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSl9Y2Fj''@;'; put 'put ''aGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhpcy5nZXRQaHlzaWNh''@;'; put 'put ''bEZyb21WaXN1YWxJbmRleChhKTt0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLnNldChkLGEpfX1jYWNoZUZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tVmlzdWFsVG9S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0IGQ9dGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSksaD10aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGQpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUlu''@;'; put 'put ''ZGV4ZXNDYWNoZS5zZXQoaCxhKX19fWZ1bmN0aW9uIEgzZShjKXtjb25zdCBhPS9eKFthLXpBLVpdezJ9KS0oW2EtekEtWl17Mn0pJC8uZXhlYyhjKTtyZXR1cm4gYT9gJHthWzFdLnRvTG93ZXJDYXNlKCl9LSR7YVsyXS50b1VwcGVyQ2FzZSgpfWA6Y31mdW5jdGlvbiBOM2UoYyl7UGEoYykm''@;'; put 'put ''Jk4kKGdsYExhbmd1YWdlIHdpdGggY29kZSAiJHtjfSIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdpc3RlciBwYXJ0aWN1bGFyIGxhbmd1YWdlXHgyMAogICAgYmVmb3JlIHVzaW5nIGl0LiBSZWFkIG1vcmUgYWJvdXQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9kb2NzLmhhbmRzb250''@;'; put 'put ''YWJsZS5jb20vaTE4bi9taXNzaW5nLWxhbmd1YWdlLWNvZGUuYCl9VGwoWUssYjEpO2NvbnN0e3JlZ2lzdGVyOnJudCxnZXRWYWx1ZXM6aW50fT1yMygicGhyYXNlRm9ybWF0dGVycyIpOyFmdW5jdGlvbiBhbnQoYyxsKXtybnQoYyxsKX0oInBsdXJhbGl6ZSIsZnVuY3Rpb24gbm50KGMsbCl7''@;'; put 'put ''cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJk51bWJlci5pc0ludGVnZXIobCk/Y1tsXTpjfSk7Y29uc3QgVjNlPSJDb250ZXh0TWVudTppdGVtcyIsR0s9YCR7VjNlfS5ub0l0ZW1zYCwkSz1gJHtWM2V9Lmluc2VydFJvd0Fib3ZlYCxLSz1gJHtWM2V9Lmluc2VydFJvd0JlbG93YCxxSz1gJHtW''@;'; put 'put ''M2V9Lmluc2VydENvbHVtbk9uVGhlTGVmdGAsWEs9YCR7VjNlfS5pbnNlcnRDb2x1bW5PblRoZVJpZ2h0YCxKSz1gJHtWM2V9LnJlbW92ZVJvd2AsUUs9YCR7VjNlfS5yZW1vdmVDb2x1bW5gLGVxPWAke1YzZX0udW5kb2AsdHE9YCR7VjNlfS5yZWRvYCxfUD1gJHtWM2V9LnJlYWRPbmx5YCxu''@;'; put 'put ''cT1gJHtWM2V9LmNsZWFyQ29sdW1uYCxycT1gJHtWM2V9LmNvcHlgLGlxPWAke1YzZX0uY29weVdpdGhIZWFkZXJzYCxhcT1gJHtWM2V9LmNvcHlXaXRoR3JvdXBIZWFkZXJzYCxvcT1gJHtWM2V9LmNvcHlIZWFkZXJzT25seWAsc3E9YCR7VjNlfS5jdXRgLGxxPWAke1YzZX0uZnJlZXplQ29s''@;'; put 'put ''dW1uYCxjcT1gJHtWM2V9LnVuZnJlZXplQ29sdW1uYCx1cT1gJHtWM2V9Lm1lcmdlQ2VsbHNgLGRxPWAke1YzZX0udW5tZXJnZUNlbGxzYCxocT1gJHtWM2V9LmFkZENvbW1lbnRgLGZxPWAke1YzZX0uZWRpdENvbW1lbnRgLHBxPWAke1YzZX0ucmVtb3ZlQ29tbWVudGAsZ3E9YCR7VjNlfS5y''@;'; put 'put ''ZWFkT25seUNvbW1lbnRgLG1xPWAke1YzZX0uYWxpZ25gLHZxPWAke1YzZX0uYWxpZ24ubGVmdGAseXE9YCR7VjNlfS5hbGlnbi5jZW50ZXJgLGJxPWAke1YzZX0uYWxpZ24ucmlnaHRgLF9xPWAke1YzZX0uYWxpZ24uanVzdGlmeWAsd3E9YCR7VjNlfS5hbGlnbi50b3BgLENxPWAke1YzZX0u''@;'; put 'put ''YWxpZ24ubWlkZGxlYCxTcT1gJHtWM2V9LmFsaWduLmJvdHRvbWAsTXE9YCR7VjNlfS5ib3JkZXJzYCx4cT1gJHtWM2V9LmJvcmRlcnMudG9wYCxFcT1gJHtWM2V9LmJvcmRlcnMucmlnaHRgLFRxPWAke1YzZX0uYm9yZGVycy5ib3R0b21gLEFxPWAke1YzZX0uYm9yZGVycy5sZWZ0YCxrcT1g''@;'; put 'put ''JHtWM2V9LmJvcmRlcnMucmVtb3ZlYCxEcT1gJHtWM2V9Lm5lc3RlZEhlYWRlcnMuaW5zZXJ0Q2hpbGRSb3dgLElxPWAke1YzZX0ubmVzdGVkSGVhZGVycy5kZXRhY2hGcm9tUGFyZW50YCxScT1gJHtWM2V9LmhpZGVDb2x1bW5gLExxPWAke1YzZX0uc2hvd0NvbHVtbmAsT3E9YCR7VjNlfS5o''@;'; put 'put ''aWRlUm93YCxQcT1gJHtWM2V9LnNob3dSb3dgLHExPSJGaWx0ZXJzOiIsV2M9YCR7cTF9Y29uZGl0aW9uc2Asd1A9YCR7V2N9Lm5vbmVgLEZxPWAke1djfS5pc0VtcHR5YCxIcT1gJHtXY30uaXNOb3RFbXB0eWAsTnE9YCR7V2N9LmlzRXF1YWxUb2AsVnE9YCR7V2N9LmlzTm90RXF1YWxUb2As''@;'; put 'put ''QnE9YCR7V2N9LmJlZ2luc1dpdGhgLGpxPWAke1djfS5lbmRzV2l0aGAsenE9YCR7V2N9LmNvbnRhaW5zYCxVcT1gJHtXY30uZG9lc05vdENvbnRhaW5gLHNudD1gJHtXY30uYnlWYWx1ZWAsWnE9YCR7V2N9LmdyZWF0ZXJUaGFuYCxXcT1gJHtXY30uZ3JlYXRlclRoYW5PckVxdWFsVG9gLFlx''@;'; put 'put ''PWAke1djfS5sZXNzVGhhbmAsR3E9YCR7V2N9Lmxlc3NUaGFuT3JFcXVhbFRvYCwkcT1gJHtXY30uaXNCZXR3ZWVuYCxLcT1gJHtXY30uaXNOb3RCZXR3ZWVuYCxxcT1gJHtXY30uYWZ0ZXJgLFhxPWAke1djfS5iZWZvcmVgLEpxPWAke1djfS50b2RheWAsUXE9YCR7V2N9LnRvbW9ycm93YCxl''@;'; put 'put ''WD1gJHtXY30ueWVzdGVyZGF5YCx0WD1gJHtxMX1sYWJlbHMuZmlsdGVyQnlDb25kaXRpb25gLG5YPWAke3ExfWxhYmVscy5maWx0ZXJCeVZhbHVlYCxyWD1gJHtxMX1sYWJlbHMuY29uanVuY3Rpb25gLENQPWAke3ExfWxhYmVscy5kaXNqdW5jdGlvbmAsU1A9YCR7cTF9dmFsdWVzLmJsYW5r''@;'; put 'put ''Q2VsbHNgLGlYPWAke3ExfWJ1dHRvbnMuc2VsZWN0QWxsYCxhWD1gJHtxMX1idXR0b25zLmNsZWFyYCxvWD1gJHtxMX1idXR0b25zLm9rYCxzWD1gJHtxMX1idXR0b25zLmNhbmNlbGAsbFg9YCR7cTF9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWFyY2hgLGNYPWAke3ExfWJ1dHRvbnMucGxhY2Vo''@;'; put 'put ''b2xkZXIudmFsdWVgLHVYPWAke3ExfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2Vjb25kVmFsdWVgLGRYPSJDaGVja2JveFJlbmRlcmVyOiIsaFg9YCR7ZFh9Y2hlY2tlZGAsZlg9YCR7ZFh9dW5jaGVja2VkYCxCM2U9e2xhbmd1YWdlQ29kZToiZW4tVVMiLFtHS106Ik5vIGF2YWlsYWJsZSBvcHRp''@;'; put 'put ''b25zIixbJEtdOiJJbnNlcnQgcm93IGFib3ZlIixbS0tdOiJJbnNlcnQgcm93IGJlbG93IixbcUtdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtYS106Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtKS106WyJSZW1vdmUgcm93IiwiUmVtb3ZlIHJvd3MiXSxbUUtdOlsiUmVtb3ZlIGNvbHVtbiIsIlJl''@;'; put 'put ''bW92ZSBjb2x1bW5zIl0sW2VxXToiVW5kbyIsW3RxXToiUmVkbyIsW19QXToiUmVhZCBvbmx5IixbbnFdOiJDbGVhciBjb2x1bW4iLFttcV06IkFsaWdubWVudCIsW3ZxXToiTGVmdCIsW3lxXToiQ2VudGVyIixbYnFdOiJSaWdodCIsW19xXToiSnVzdGlmeSIsW3dxXToiVG9wIixbQ3FdOiJN''@;'; put 'put ''aWRkbGUiLFtTcV06IkJvdHRvbSIsW2xxXToiRnJlZXplIGNvbHVtbiIsW2NxXToiVW5mcmVlemUgY29sdW1uIixbTXFdOiJCb3JkZXJzIixbeHFdOiJUb3AiLFtFcV06IlJpZ2h0IixbVHFdOiJCb3R0b20iLFtBcV06IkxlZnQiLFtrcV06IlJlbW92ZSBib3JkZXIocykiLFtocV06IkFkZCBj''@;'; put 'put ''b21tZW50IixbZnFdOiJFZGl0IGNvbW1lbnQiLFtwcV06IkRlbGV0ZSBjb21tZW50IixbZ3FdOiJSZWFkLW9ubHkgY29tbWVudCIsW3VxXToiTWVyZ2UgY2VsbHMiLFtkcV06IlVubWVyZ2UgY2VsbHMiLFtycV06IkNvcHkiLFtpcV06WyJDb3B5IHdpdGggaGVhZGVyIiwiQ29weSB3aXRoIGhl''@;'; put 'put ''YWRlcnMiXSxbYXFdOlsiQ29weSB3aXRoIGdyb3VwIGhlYWRlciIsIkNvcHkgd2l0aCBncm91cCBoZWFkZXJzIl0sW29xXTpbIkNvcHkgaGVhZGVyIG9ubHkiLCJDb3B5IGhlYWRlcnMgb25seSJdLFtzcV06IkN1dCIsW0RxXToiSW5zZXJ0IGNoaWxkIHJvdyIsW0lxXToiRGV0YWNoIGZyb20g''@;'; put 'put ''cGFyZW50IixbUnFdOlsiSGlkZSBjb2x1bW4iLCJIaWRlIGNvbHVtbnMiXSxbTHFdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbT3FdOlsiSGlkZSByb3ciLCJIaWRlIHJvd3MiXSxbUHFdOlsiU2hvdyByb3ciLCJTaG93IHJvd3MiXSxbd1BdOiJOb25lIixbRnFdOiJJcyBlbXB0''@;'; put 'put ''eSIsW0hxXToiSXMgbm90IGVtcHR5IixbTnFdOiJJcyBlcXVhbCB0byIsW1ZxXToiSXMgbm90IGVxdWFsIHRvIixbQnFdOiJCZWdpbnMgd2l0aCIsW2pxXToiRW5kcyB3aXRoIixbenFdOiJDb250YWlucyIsW1VxXToiRG9lcyBub3QgY29udGFpbiIsW1pxXToiR3JlYXRlciB0aGFuIixbV3Fd''@;'; put 'put ''OiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFtZcV06Ikxlc3MgdGhhbiIsW0dxXToiTGVzcyB0aGFuIG9yIGVxdWFsIHRvIixbJHFdOiJJcyBiZXR3ZWVuIixbS3FdOiJJcyBub3QgYmV0d2VlbiIsW3FxXToiQWZ0ZXIiLFtYcV06IkJlZm9yZSIsW0pxXToiVG9kYXkiLFtRcV06IlRvbW9y''@;'; put 'put ''cm93IixbZVhdOiJZZXN0ZXJkYXkiLFtTUF06IkJsYW5rIGNlbGxzIixbdFhdOiJGaWx0ZXIgYnkgY29uZGl0aW9uIixbblhdOiJGaWx0ZXIgYnkgdmFsdWUiLFtyWF06IkFuZCIsW0NQXToiT3IiLFtpWF06IlNlbGVjdCBhbGwiLFthWF06IkNsZWFyIixbb1hdOiJPSyIsW3NYXToiQ2FuY2Vs''@;'; put 'put ''IixbbFhdOiJTZWFyY2giLFtjWF06IlZhbHVlIixbdVhdOiJTZWNvbmQgdmFsdWUiLFtoWF06IkNoZWNrZWQiLFtmWF06IlVuY2hlY2tlZCJ9LGxudD1XLHBYPUIzZS5sYW5ndWFnZUNvZGUse3JlZ2lzdGVyOmNudCxnZXRJdGVtOmozZSxoYXNJdGVtOnVudCxnZXRWYWx1ZXM6ZG50fT1yMygi''@;'; put 'put ''bGFuZ3VhZ2VzRGljdGlvbmFyaWVzIik7ZnVuY3Rpb24gejNlKGMsbCl7bGV0IGE9YyxkPWw7cmV0dXJuIHFvKGMpJiYoZD1jLGE9ZC5sYW5ndWFnZUNvZGUpLGZ1bmN0aW9uIGhudChjLGwpe2MhPT1wWCYmZnVuY3Rpb24gdG50KGMsbCl7WG8obCwoYSxkKT0+e19jKGNbZF0pJiYoY1tkXT1h''@;'; put 'put ''KX0pfShsLGozZShwWCkpfShhLGQpLGNudChhLGcxKGQpKSxnMShkKX1mdW5jdGlvbiBVM2UoYyl7cmV0dXJuIGdYKGMpP2cxKGozZShjKSk6bnVsbH1mdW5jdGlvbiBnWChjKXtyZXR1cm4gdW50KGMpfWZ1bmN0aW9uIFozZShjLGwsYSl7Y29uc3QgZD1VM2UoYyk7aWYobnVsbD09PWQpcmV0''@;'; put 'put ''dXJuIG51bGw7Y29uc3QgaD1kW2xdO2lmKF9jKGgpKXJldHVybiBudWxsO2NvbnN0IGY9ZnVuY3Rpb24gcG50KGMsbCl7bGV0IGE9YztyZXR1cm4gWW4oZnVuY3Rpb24gb250KCl7cmV0dXJuIGludCgpfSgpLGQ9PnthPWQoYyxsKX0pLGF9KGgsYSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZik/''@;'; put 'put ''ZlswXTpmfXozZShCM2UpO2NvbnN0IFczZT0iYWN0aXZlLWhlYWRlciIsbVg9ImhlYWRlciIsdlg9ImFyZWEiLFFFPSJmb2N1cyI7Y2xhc3MgWTNle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZXR0aW5ncz1sLHRoaXMuY2VsbFJhbmdlPWF8fG51bGx9aXNFbXB0eSgpe3JldHVybiBudWxsPT09''@;'; put 'put ''dGhpcy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNl''@;'; put 'put ''bGxSYW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhp''@;'; put 'put ''c31nZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19ZGVzdHJveSgpe3RoaXMucnVuTG9jYWxIb29r''@;'; put 'put ''cygiZGVzdHJveSIpfX1UbChZM2UsYjEpO2NvbnN0IF9udD1ZM2U7Y29uc3QgeGc9Y2xhc3MgTW50IGV4dGVuZHMgX250e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5jdGlvbiB3bnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENudChjKXt2YXIgbD1mdW5jdGlvbiBTbnQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJ2aXN1YWxDZWxsUmFuZ2UiLG51bGwpLHRoaXMudmlzdWFsQ2VsbFJhbmdlPWF8fG51bGwsdGhpcy5jb21taXQoKX1hZGQobCl7cmV0dXJuIG51bGw9PT10aGlzLnZpc3Vh''@;'; put 'put ''bENlbGxSYW5nZT90aGlzLnZpc3VhbENlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLnZpc3VhbENlbGxSYW5nZS5leHBhbmQobCksdGhpc31jbGVhcigpe3JldHVybiB0aGlzLnZpc3VhbENlbGxSYW5nZT1udWxsLHN1cGVyLmNsZWFyKCl9dHJpbVRvVmlz''@;'; put 'put ''aWJsZUNlbGxzUmFuZ2VPbmx5KGwpe2xldHtmcm9tOmEsdG86ZH09bCxoPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLDEpLGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGQsLTEpO3JldHVybiBudWxsPT09aHx8bnVsbD09PWY/bnVsbDooKGgucm93PmYucm93fHxo''@;'; put 'put ''LmNvbD5mLmNvbCkmJihoPWEsZj1kKSx0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShoLGgsZikpfWdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YTtjb25zdCBoPXRo''@;'; put 'put ''aXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3Mucm93SW5kZXhNYXBwZXIsbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyLGwuY29s''@;'; put 'put ''LGQpO3JldHVybiBudWxsPT09Zj9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEsZCl7cmV0dXJuIGE8MD9hOmwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEsZCl9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlz''@;'; put 'put ''dWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50''@;'; put 'put ''byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPWwuZnJvbS5jbG9uZSgpLm5vcm1hbGl6ZSgpLGQ9Ik4tUyI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCk/MTotMSxoPSJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCk/MTotMSxmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5k''@;'; put 'put ''ZXJhYmxlQ29vcmRzKHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCk7bGV0IHY9bnVsbDtpZigobnVsbD09PWZ8fG51bGw9PT1mLmNvbHx8bnVsbD09PWYucm93KSYmKHY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsZCxoKSksbnVsbCE9PXYmJmwub3ZlcmxhcHModikp''@;'; put 'put ''e2NvbnN0IE09bC5oaWdobGlnaHQuY2xvbmUoKTtpZihNLnJvdz49MCYmKE0ucm93PXYucm93KSxNLmNvbD49MCYmKE0uY29sPXYuY29sKSxudWxsPT09dGhpcy5jZWxsUmFuZ2Upe2NvbnN0IEk9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoTSk7dGhpcy5jZWxsUmFu''@;'; put 'put ''Z2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoSSl9bC5zZXRIaWdobGlnaHQoTSl9cmV0dXJuImZvY3VzIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSYmbnVsbCE9PWYmJm51bGw9PT12JiZsLnNldEhpZ2hsaWdodCh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQp''@;'; put 'put ''LHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNlbGxSYW5nZTtyZXR1cm5bTWF0aC5taW4obC5yb3csYS5yb3cpLE1hdGgubWluKGwuY29sLGEuY29sKSxNYXRoLm1heChsLnJvdyxhLnJvdyksTWF0aC5tYXgobC5jb2wsYS5jb2wpXX1nZXRWaXN1YWxDb3JuZXJz''@;'; put 'put ''KCl7Y29uc3QgbD10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpKSxhPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpKTty''@;'; put 'put ''ZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobCxhKXtjb25zdCBkPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpLGg9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYSk7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1kLnJvd3x8bnVsbD09PWQuY29sfHxudWxsPT09aC5yb3d8fG51bGw9PT1oLmNvbD9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGQsZCxoKX19O2Z1bmN0aW9uIHlYKGMpe2xldHthY3RpdmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2Ns''@;'; put 'put ''YXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTpXM2V9KX1mdW5jdGlvbiB4bnQoYyl7bGV0e2FyZWFDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImFyZWEiLGNyZWF0ZUxheWVyczohMCxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNv''@;'; put 'put ''cm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOnZYfSl9ZnVuY3Rpb24gRW50KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IiwuLi5sLHNlbGVjdGlvblR5cGU6dlh9KX1mdW5jdGlvbiBUbnQoYyl7bGV0e2NvbHVtbkNsYXNzTmFtZTps''@;'; put 'put ''LC4uLmF9PWM7cmV0dXJuIG5ldyB4Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJjb2x1bW4ifSl9ZnVuY3Rpb24gRzNlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTptWH0pfWZ1''@;'; put 'put ''bmN0aW9uIEludChjKXtsZXR7cm93Q2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6InJvdyJ9KX1mdW5jdGlvbiBqZChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT250KGMpe3ZhciBsPWZ1bmN0aW9uIFBudChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRWcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlBy''@;'; put 'put ''aXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBQcD1uZXcgV2Vha1NldDtjbGFzcyBGbnR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIFJudChjLGwpeyhmdW5jdGlvbiBMbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsUHApLGpkKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksamQodGhpcywibGF5ZXJMZXZlbCIsMCksamQodGhpcywiZm9jdXMiLHZvaWQgMCksamQo''@;'; put 'put ''dGhpcywiZmlsbCIsdm9pZCAwKSxqZCh0aGlzLCJsYXllcmVkQXJlYXMiLG5ldyBNYXApLGpkKHRoaXMsImFyZWFzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVSb3dIZWFkZXJz''@;'; put 'put ''IixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVDb2x1bW5IZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJhY3RpdmVDb3JuZXJIZWFkZXJzIixuZXcgTWFwKSxqZCh0aGlzLCJyb3dIaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlzLCJjb2x1bW5IaWdobGlnaHRzIixuZXcgTWFwKSxqZCh0aGlz''@;'; put 'put ''LCJjdXN0b21TZWxlY3Rpb25zIixbXSksdGhpcy5vcHRpb25zPWwsdGhpcy5mb2N1cz1mdW5jdGlvbiBBbnQoYyl7bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IHhnKHtjbGFzc05hbWU6ImN1cnJlbnQiLGhlYWRlckF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3Rl''@;'; put 'put ''ZCIsInRydWUiXV0sYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpRRX0pfShsKSx0aGlzLmZpbGw9ZnVuY3Rpb24gRG50KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgeGcoe2NsYXNzTmFtZToiZmlsbCIsYm9yZGVy''@;'; put 'put ''Ont3aWR0aDoxLGNvbG9yOiIjZmYwMDAwIn0sLi4ubCxzZWxlY3Rpb25UeXBlOiJmaWxsIn0pfShsKX1pc0VuYWJsZWRGb3IobCxhKXtsZXQgZD1sO2w9PT1RRSYmKGQ9ImN1cnJlbnQiKTtsZXQgaD10aGlzLm9wdGlvbnMuZGlzYWJsZWRDZWxsU2VsZWN0aW9uKGEucm93LGEuY29sKTtyZXR1''@;'; put 'put ''cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPVtoXSksITE9PT1ofHxBcnJheS5pc0FycmF5KGgpJiYhaC5pbmNsdWRlcyhkKX11c2VMYXllckxldmVsKCl7cmV0dXJuIHRoaXMubGF5ZXJMZXZlbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06''@;'; put 'put ''MCx0aGlzfWdldEZvY3VzKCl7cmV0dXJuIHRoaXMuZm9jdXN9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9Y3JlYXRlTGF5ZXJlZEFyZWEoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMubGF5ZXJlZEFyZWFzLHhudCl9Z2V0TGF5ZXJlZEFyZWFzKCl7cmV0dXJuWy4u''@;'; put 'put ''LnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpXX1jcmVhdGVBcmVhKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFyZWFzLEVudCl9Z2V0QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRo''@;'; put 'put ''aXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hlYWRlcnMsRzNlKX1nZXRSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhlYWRlcnMsRzNl''@;'; put 'put ''KX1nZXRDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlUm93SGVhZGVyKCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZVJvd0hlYWRlcnMseVgpfWdldEFjdGl2ZVJvd0hlYWRlcnMoKXty''@;'; put 'put ''ZXR1cm5bLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gRWcoUHAsdGhpcyxUZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycyx5WCl9Z2V0QWN0aXZlQ29sdW1uSGVhZGVycygpe3JldHVyblsuLi50''@;'; put 'put ''aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpe3JldHVybiBFZyhQcCx0aGlzLFRnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLHlYKX1nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0''@;'; put 'put ''aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlUm93SGlnaGxpZ2h0KCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLnJvd0hpZ2hsaWdodHMsSW50KX1nZXRSb3dIaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKV19Y3Jl''@;'; put 'put ''YXRlQ29sdW1uSGlnaGxpZ2h0KCl7cmV0dXJuIEVnKFBwLHRoaXMsVGcpLmNhbGwodGhpcyx0aGlzLmNvbHVtbkhpZ2hsaWdodHMsVG50KX1nZXRDb2x1bW5IaWdobGlnaHRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygp''@;'; put 'put ''e3JldHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaChmdW5jdGlvbiBrbnQoYyl7bGV0e2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTphLC4uLmR9PWM7cmV0dXJuIG5ldyB4Zyh7Li4u''@;'; put 'put ''bCwuLi5kLHNlbGVjdGlvblR5cGU6ImN1c3RvbS1zZWxlY3Rpb24ifSxhKX0oey4uLnRoaXMub3B0aW9ucywuLi5sfSkpfWNsZWFyKCl7dGhpcy5mb2N1cy5jbGVhcigpLHRoaXMuZmlsbC5jbGVhcigpLFluKHRoaXMuYXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMubGF5''@;'; put 'put ''ZXJlZEFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLGw9Pnts''@;'; put 'put ''LmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZ''@;'; put 'put ''bih0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuZm9jdXMsdGhpcy5maWxsLC4uLnRoaXMuYXJlYXMudmFsdWVzKCksLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksLi4udGhpcy5yb3dIZWFk''@;'; put 'put ''ZXJzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29ybmVySGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLnJvd0hp''@;'; put 'put ''Z2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1mdW5jdGlvbiBUZyhjLGwpe2NvbnN0IGE9dGhpcy5sYXllckxldmVsO2lmKGMuaGFzKGEpKXJldHVybiBjLmdldChh''@;'; put 'put ''KTtjb25zdCBkPWwoe2xheWVyTGV2ZWw6YSwuLi50aGlzLm9wdGlvbnN9KTtyZXR1cm4gYy5zZXQoYSxkKSxkfWNvbnN0IEhudD1GbnQ7ZnVuY3Rpb24gJDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBObnQoYyl7dmFyIGw9ZnVuY3Rpb24gVm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBCbnR7Y29uc3RydWN0b3IobCl7JDNlKHRoaXMsInJhbmdlcyIsW10pLCQzZSh0aGlzLCJjcmVhdGVDZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jcmVhdGVDZWxsUmFuZ2U9bH1pc0VtcHR5KCl7cmV0dXJuIDA9PT10''@;'; put 'put ''aGlzLnNpemUoKX1zZXQobCl7cmV0dXJuIHRoaXMuY2xlYXIoKSx0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfWFkZChsKXtyZXR1cm4gdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''YW5nZXMucG9wKCksdGhpc31jdXJyZW50KCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMSl9cHJldmlvdXMoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0yKX1pbmNsdWRlcyhsKXtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZShhPT5hLmluY2x1ZGVz''@;'; put 'put ''KGwpKX1jbGVhcigpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGg9MCx0aGlzfXNpemUoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RofXBlZWtCeUluZGV4KCl7bGV0IGEsbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4g''@;'; put 'put ''bD49MCYmbDx0aGlzLnNpemUoKSYmKGE9dGhpcy5yYW5nZXNbbF0pLGF9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBqbnQ9Qm50O2Z1bmN0aW9uIGJYKGMsbCxhKXtLM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEsz''@;'; put 'put ''ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24ganMoYyxsKXtyZXR1cm4gYy5nZXQoUXUoYyxsKSl9ZnVuY3Rpb24gTVAoYyxsLGEpe3Jl''@;'; put 'put ''dHVybiBjLnNldChRdShjLGwpLGEpLGF9ZnVuY3Rpb24gUXUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBv''@;'; put 'put ''biB0aGlzIG9iamVjdCIpfXZhciB4UD1uZXcgV2Vha01hcCx1Yz1uZXcgV2Vha01hcCx1Mz1uZXcgV2Vha01hcCxwMD1uZXcgV2Vha1NldDtjbGFzcyBxM2V7Y29uc3RydWN0b3IobCxhKXsoZnVuY3Rpb24gem50KGMsbCl7SzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHAwKSxiWCh0aGlzLHhQ''@;'; put 'put ''LHZvaWQgMCksYlgodGhpcyx1Yyx2b2lkIDApLGJYKHRoaXMsdTMse3g6MCx5OjB9KSxNUCh4UCx0aGlzLGwpLE1QKHVjLHRoaXMsYSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0''@;'; put 'put ''IGg9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpO2xldCBmPWpzKHhQLHRoaXMpLmN1cnJlbnQoKS5oaWdobGlnaHQ7Y29uc3Qgdj1qcyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IE09MCxJPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVU''@;'; put 'put ''cmFuc2Zvcm1TdGFydCIsaCksbnVsbCE9PXYucm93JiZudWxsIT09di5jb2wpe2NvbnN0e3dpZHRoOkcsaGVpZ2h0OmllfT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKSx7cm93OnVlLGNvbDp5ZX09UXUocDAsdGhpcyxRM2UpLmNhbGwodGhpcyxmKSxFZT1qcyh1Yyx0aGlzKS5maXhlZFJv''@;'; put 'put ''d3NCb3R0b20oKSxqZT1qcyh1Yyx0aGlzKS5taW5TcGFyZVJvd3MoKSxxZT1qcyh1Yyx0aGlzKS5taW5TcGFyZUNvbHMoKSxydD1qcyh1Yyx0aGlzKS5hdXRvV3JhcFJvdygpLHB0PWpzKHVjLHRoaXMpLmF1dG9XcmFwQ29sKCksZHQ9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh1ZSto''@;'; put 'put ''LnJvdyx5ZStoLmNvbCk7aWYoZHQucm93Pj1pZSl7Y29uc3QgQ249RmQoZCYmamU+MCYmMD09PUVlKSx0bj1kdC5jb2wrMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGR0LnJvdy1pZSx0bj49Rz90bi1HOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAi''@;'; put 'put ''LENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG4+PUcpLENuLnZhbHVlP3RoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsanModWMsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpKTpwdCYmZHQuYXNzaWduKE1uKX1lbHNlIGlmKGR0LnJvdzwwKXtjb25zdCBD''@;'; put 'put ''bj1GZChwdCksdG49ZHQuY29sLTEsTW49anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhpZStkdC5yb3csdG48MD9HK3RuOnRuKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLENuLFF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxNbiksdG48MCkscHQmJmR0LmFzc2ln''@;'; put 'put ''bihNbil9aWYoZHQuY29sPj1HKXtjb25zdCBDbj1GZChkJiZxZT4wKSx0bj1kdC5yb3crMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHRuPj1pZT90bi1pZTp0bixkdC5jb2wtRyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixDbixRdShwMCx0aGlzLE1fKS5j''@;'; put 'put ''YWxsKHRoaXMsTW4pLHRuPj1pZSksQ24udmFsdWU/dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIixqcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpOnJ0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQuY29sPDApe2NvbnN0IENuPUZkKHJ0KSx0bj1kdC5y''@;'; put 'put ''b3ctMSxNbj1qcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHRuPDA/aWUrdG46dG4sRytkdC5jb2wpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsQ24sUXUocDAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bjwwKSxydCYmZHQuYXNzaWduKE1uKX1jb25zdHtyb3dEaXI6''@;'; put 'put ''SnQsY29sRGlyOnZufT1RdShwMCx0aGlzLFgzZSkuY2FsbCh0aGlzLGR0KTtNPUp0LEk9dm4sZj1RdShwMCx0aGlzLE1fKS5jYWxsKHRoaXMsZHQpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtU3RhcnQiLGYsTSxJKSxmfXRyYW5zZm9ybUVuZChsLGEpe2NvbnN0''@;'; put 'put ''IGQ9anModWMsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpLGg9anMoeFAsdGhpcykuY3VycmVudCgpLGY9anModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxpZ2h0KSx2PVF1KHAwLHRoaXMsX1gpLmNhbGwodGhpcyxoLnRvLnJvdyxoLmZyb20ucm93KSxNPVF1''@;'; put 'put ''KHAwLHRoaXMsd1gpLmNhbGwodGhpcyxoLnRvLmNvbCxoLmZyb20uY29sKSxJPWgudG8uY2xvbmUoKTtsZXQgRz0wLGllPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpLG51bGwhPT1mLnJvdyYmbnVsbCE9PWYuY29sJiZudWxsIT09diYmbnVsbCE9PU0p''@;'; put 'put ''e2NvbnN0e3Jvdzp1ZSxjb2w6eWV9PVF1KHAwLHRoaXMsUTNlKS5jYWxsKHRoaXMsaC5oaWdobGlnaHQpLEVlPWpzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModitkLnJvdyxNK2QuY29sKSxqZT1oLmdldFRvcFN0YXJ0Q29ybmVyKCkscWU9aC5nZXRUb3BFbmRDb3JuZXIoKSxydD1oLmdl''@;'; put 'put ''dEJvdHRvbUVuZENvcm5lcigpO2lmKGQuY29sPDAmJk0+PXllJiZFZS5jb2w8eWUpe2NvbnN0IHZuPUVlLmNvbC15ZTtFZS5jb2w9UXUocDAsdGhpcyx3WCkuY2FsbCh0aGlzLGplLmNvbCxxZS5jb2wpK3ZufWVsc2UgaWYoZC5jb2w+MCYmTTw9eWUmJkVlLmNvbD55ZSl7Y29uc3Qgdm49UXUo''@;'; put 'put ''cDAsdGhpcyx3WCkuY2FsbCh0aGlzLHFlLmNvbCxqZS5jb2wpLENuPU1hdGgubWF4KEVlLmNvbC12biwxKTtFZS5jb2w9dm4rQ259aWYoZC5yb3c8MCYmdj49dWUmJkVlLnJvdzx1ZSl7Y29uc3Qgdm49RWUucm93LXVlO0VlLnJvdz1RdShwMCx0aGlzLF9YKS5jYWxsKHRoaXMsamUucm93LHJ0''@;'; put 'put ''LnJvdykrdm59ZWxzZSBpZihkLnJvdz4wJiZ2PD11ZSYmRWUucm93PnVlKXtjb25zdCB2bj1RdShwMCx0aGlzLF9YKS5jYWxsKHRoaXMscnQucm93LGplLnJvdyksQ249TWF0aC5tYXgoRWUucm93LXZuLDEpO0VlLnJvdz12bitDbn1jb25zdHtyb3dEaXI6cHQsY29sRGlyOmR0fT1RdShwMCx0''@;'; put 'put ''aGlzLFgzZSkuY2FsbCh0aGlzLEVlKTtHPXB0LGllPWR0O2NvbnN0IEp0PVF1KHAwLHRoaXMsTV8pLmNhbGwodGhpcyxFZSk7MD09PWQucm93JiYwIT09ZC5jb2w/SS5jb2w9SnQuY29sOjAhPT1kLnJvdyYmMD09PWQuY29sP0kucm93PUp0LnJvdzooSS5yb3c9SnQucm93LEkuY29sPUp0LmNv''@;'; put 'put ''bCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLEksRyxpZSksSX1zZXRPZmZzZXRTaXplKGwpe2xldHt4OmEseTpkfT1sO01QKHUzLHRoaXMse3g6YSx5OmR9KX1yZXNldE9mZnNldFNpemUoKXtNUCh1Myx0aGlzLHt4OjAseTowfSl9fWZ1bmN0aW9uIFgz''@;'; put 'put ''ZShjKXtjb25zdHt3aWR0aDpsLGhlaWdodDphfT1RdShwMCx0aGlzLEozZSkuY2FsbCh0aGlzKTtsZXQgZD0wLGg9MDtyZXR1cm4gYy5yb3c8MD8oZD0tMSxjLnJvdz0wKTpjLnJvdz4wJiZjLnJvdz49YSYmKGQ9MSxjLnJvdz1hLTEpLGMuY29sPDA/KGg9LTEsYy5jb2w9MCk6Yy5jb2w+MCYm''@;'; put 'put ''Yy5jb2w+PWwmJihoPTEsYy5jb2w9bC0xKSx7cm93RGlyOmQsY29sRGlyOmh9fWZ1bmN0aW9uIEozZSgpe3JldHVybnt3aWR0aDpqcyh1Myx0aGlzKS54K2pzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxoZWlnaHQ6anModTMsdGhpcykueStqcyh1Yyx0aGlzKS5jb3VudFJl''@;'; put 'put ''bmRlcmFibGVSb3dzKCl9fWZ1bmN0aW9uIF9YKGMsbCl7Y29uc3QgYT1qcyh1Yyx0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6anModTMsdGhpcykueSthfWZ1bmN0aW9uIHdYKGMsbCl7Y29uc3QgYT1qcyh1Yyx0aGlzKS5m''@;'; put 'put ''aW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKGMsbCk7cmV0dXJuIG51bGw9PT1hP251bGw6anModTMsdGhpcykueCthfWZ1bmN0aW9uIFEzZShjKXtjb25zdHtyb3c6bCxjb2w6YX09anModWMsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGMpO2lmKG51bGw9PT1sfHxu''@;'; put 'put ''dWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmFibGUgY29vcmRzIGFyZSBub3QgdmlzaWJsZS4iKTtyZXR1cm4ganModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyhqcyh1Myx0aGlzKS55K2wsanModTMsdGhpcykueCthKX1mdW5jdGlvbiBNXyhjKXtjb25zdCBsPWMuY2xvbmUoKTty''@;'; put 'put ''ZXR1cm4gbC5jb2w9Yy5jb2wtanModTMsdGhpcykueCxsLnJvdz1jLnJvdy1qcyh1Myx0aGlzKS55LGpzKHVjLHRoaXMpLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKX1UbChxM2UsYjEpO2NvbnN0IGVwZT1xM2UsVW50PVszLDJdLFpudD1bWyJudW1iZXIiXSxbIm51bWJlciIsInN0cmlu''@;'; put 'put ''ZyJdLFsibnVtYmVyIiwidW5kZWZpbmVkIl0sWyJudW1iZXIiLCJzdHJpbmciLCJ1bmRlZmluZWQiXV0sU1g9U3ltYm9sKCJyb290IiksbnBlPVN5bWJvbCgiY2hpbGQiKTtmdW5jdGlvbiB4XyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06U1g7aWYobCE9PVNYJiZsIT09bnBlKXRocm93IG5ldyBFcnJvcigiVGhlIHNlY29uZCBhcmd1bWVudCBpcyB1c2VkIGludGVybmFsbHkgb25seSBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLiIpO2NvbnN0IGE9QXJyYXkuaXNBcnJheShjKSxkPWw9PT1TWDtsZXQgaD0wO2lm''@;'; put 'put ''KGEpe2NvbnN0IGY9Y1swXTswPT09Yy5sZW5ndGg/aD0xOmQmJmYgaW5zdGFuY2VvZiBnSz9oPTM6ZCYmQXJyYXkuaXNBcnJheShmKT9oPXhfKGYsbnBlKTpjLmxlbmd0aD49MiYmYy5sZW5ndGg8PTQmJiFjLnNvbWUoKE0sSSk9PiFabnRbSV0uaW5jbHVkZXModHlwZW9mIE0pKSYmKGg9Mil9''@;'; put 'put ''cmV0dXJuIGh9ZnVuY3Rpb24gZVQoYyl7bGV0e2NyZWF0ZUNlbGxDb29yZHM6bCxjcmVhdGVDZWxsUmFuZ2U6YSxrZWVwRGlyZWN0aW9uOmQ9ITEscHJvcFRvQ29sOmh9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighVW50Lmlu''@;'; put 'put ''Y2x1ZGVzKGMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGYpe2NvbnN0IHY9Mz09PWM7bGV0IE09dj9mLmZyb20ucm93OmZbMF0sST12P2YuZnJvbS5jb2w6ZlsxXSxHPXY/''@;'; put 'put ''Zi50by5yb3c6ZlsyXSxpZT12P2YudG8uY29sOmZbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgmJigic3RyaW5nIj09dHlwZW9mIEkmJihJPWgoSSkpLCJzdHJpbmciPT10eXBlb2YgaWUmJihpZT1oKGllKSkpLF9jKEcpJiYoRz1NKSxfYyhpZSkmJihpZT1JKSwhZCl7Y29uc3QgRWU9TSxq''@;'; put 'put ''ZT1JLHFlPUcscnQ9aWU7TT1NYXRoLm1pbihFZSxxZSksST1NYXRoLm1pbihqZSxydCksRz1NYXRoLm1heChFZSxxZSksaWU9TWF0aC5tYXgoamUscnQpfWNvbnN0IHVlPWwoTSxJKSx5ZT1sKEcsaWUpO3JldHVybiBhKHVlLHVlLHllKX19ZnVuY3Rpb24gRV8oYyxsLGEpeyhmdW5jdGlvbiBH''@;'; put 'put ''bnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHQ5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiAkbnQo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24gS250KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBDYyhjLGwpe3JldHVybiBjLmdldChycGUoYyxsKSl9ZnVuY3Rpb24gRnAoYyxsLGEpe3JldHVybiBjLnNldChycGUoYyxsKSxh''@;'; put 'put ''KSxhfWZ1bmN0aW9uIHJwZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFy''@;'; put 'put ''IF8xPW5ldyBXZWFrTWFwLG45PW5ldyBXZWFrTWFwLEFQPW5ldyBXZWFrTWFwLHRUPW5ldyBXZWFrTWFwLGtQPW5ldyBXZWFrTWFwLG5UPW5ldyBXZWFrTWFwO2NsYXNzIGlwZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7dDkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksdDkodGhpcywi''@;'; put 'put ''dGFibGVQcm9wcyIsdm9pZCAwKSx0OSh0aGlzLCJpblByb2dyZXNzIiwhMSksdDkodGhpcywic2VsZWN0ZWRSYW5nZSIsbmV3IGpudCgoaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KSkpLHQ5KHRoaXMsImhpZ2hsaWdodCIsdm9pZCAwKSxFXyh0aGlzLF8x''@;'; put 'put ''LHZvaWQgMCksRV8odGhpcyxuOSx2b2lkIDApLHQ5KHRoaXMsInNlbGVjdGVkQnlSb3dIZWFkZXIiLG5ldyBTZXQpLHQ5KHRoaXMsInNlbGVjdGVkQnlDb2x1bW5IZWFkZXIiLG5ldyBTZXQpLEVfKHRoaXMsQVAsITEpLEVfKHRoaXMsdFQsITEpLEVfKHRoaXMsa1AsInVua25vd24iKSxFXyh0''@;'; put 'put ''aGlzLG5ULC0xKSx0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5oaWdobGlnaHQ9bmV3IEhudCh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NO''@;'; put 'put ''YW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NOYW1lLGNlbGxBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLHJvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsZGlzYWJsZWRDZWxsU2VsZWN0aW9uOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuaXNEaXNhYmxlZENlbGxTZWxlY3Rpb24oaCxmKSxjZWxsQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQ2VsbENvcm5lclZp''@;'; put 'put ''c2libGUoLi4uYXJndW1lbnRzKX0sYXJlYUNvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0FyZWFDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgp''@;'; put 'put ''LHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksY3JlYXRlQ2VsbFJhbmdlOihoLGYsdik9PnRoaXMu''@;'; put 'put ''dGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxmLHYpfSksRnAoXzEsdGhpcyxuZXcgZXBlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlcixjb3VudFJlbmRlcmFibGVSb3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9''@;'; put 'put ''PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4u''@;'; put 'put ''LmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksZml4ZWRSb3dzQm90dG9tOigpPT5sLmZpeGVkUm93c0JvdHRvbSxtaW5TcGFyZVJvd3M6KCk9PmwubWluU3BhcmVSb3dzLG1pblNwYXJlQ29sczooKT0+bC5t''@;'; put 'put ''aW5TcGFyZUNvbHMsYXV0b1dyYXBSb3c6KCk9PmwuYXV0b1dyYXBSb3csYXV0b1dyYXBDb2w6KCk9PmwuYXV0b1dyYXBDb2x9KSksRnAobjksdGhpcyxuZXcgZXBlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7cm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixjb3VudFJlbmRlcmFibGVSb3dzOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLmdl''@;'; put 'put ''dE91dGVyQm90dG9tRW5kQ29ybmVyKCkucm93KX0sY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRv''@;'; put 'put ''bUVuZENvcm5lcigpLmNvbCl9LHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGgpLGZp''@;'; put 'put ''bmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVybiBkLnRh''@;'; put 'put ''YmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+MCxtaW5TcGFyZVJvd3M6KCk9PjAsbWlu''@;'; put 'put ''U3BhcmVDb2xzOigpPT4wLGF1dG9XcmFwUm93OigpPT4hMCxhdXRvV3JhcENvbDooKT0+ITB9KSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxo''@;'; put 'put ''O3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksQ2MoXzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5z''@;'; put 'put ''Zm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRM''@;'; put 'put ''b2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Um93UmVxdWlyZSIsLi4uZil9KSxDYyhf''@;'; put 'put ''MSx0aGlzKS5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVpcmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIs''@;'; put 'put ''Li4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlUm93''@;'; put 'put ''V3JhcCIsLi4uZil9KSxDYyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygi''@;'; put 'put ''YmVmb3JlQ29sdW1uV3JhcCIsLi4uZil9KSxDYyhuOSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBk''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5mKX0pLENjKG45LHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylm''@;'; put 'put ''W3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5mKX0pfWdldFNlbGVjdGVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlfW1hcmtTb3VyY2UobCl7RnAoa1AsdGhpcyxsKX1tYXJrRW5kU291cmNlKCl7''@;'; put 'put ''RnAoa1AsdGhpcywidW5rbm93biIpfWdldFNlbGVjdGlvblNvdXJjZSgpe3JldHVybiBDYyhrUCx0aGlzKX1zZXRFeHBlY3RlZExheWVycyhsKXtGcChuVCx0aGlzLGwpfWJlZ2luKCl7dGhpcy5pblByb2dyZXNzPSEwfWZpbmlzaCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rp''@;'; put 'put ''b25GaW5pc2hlZCIsQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpKSx0aGlzLmluUHJvZ3Jlc3M9ITEsRnAoblQsdGhpcywtMSl9aXNJblByb2dyZXNzKCl7cmV0dXJuIHRoaXMuaW5Qcm9ncmVzc31zZXRSYW5nZVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpsO2NvbnN0IGY9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSx2PV9jKGEpP3RoaXMudGFibGVQcm9wcy5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6YSxNPWwuY2xvbmUoKTtGcChBUCx0aGlzLCExKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5IjoiIiksTSksKCFmfHxmJiYhdiYmX2MoYSkpJiZ0aGlzLnNlbGVjdGVkUmFuZ2UuY2xl''@;'; put 'put ''YXIoKSx0aGlzLnNlbGVjdGVkUmFuZ2UuYWRkKE0pLmN1cnJlbnQoKS5zZXRIaWdobGlnaHQoaC5jbG9uZSgpKSwwPT09dGhpcy5nZXRMYXllckxldmVsKCkmJih0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuY2xlYXIoKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuY2xlYXIoKSksZHx8''@;'; put 'put ''dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEsITAsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwpfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5p''@;'; put 'put ''c0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpLGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5jbG9uZSgpLnNldFRvKGwpLmlzU2luZ2xlSGVhZGVyKCk7aWYoKGQ+''@;'; put 'put ''MHx8aD4wKSYmKDA9PT1kJiZhLmNvbDwwJiYhZnx8MD09PWgmJmEucm93PDAmJiFmKSlyZXR1cm47dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsYSksdGhpcy5iZWdpbigpO2NvbnN0IHY9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLnNldHRpbmdz''@;'; put 'put ''Lm5hdmlnYWJsZUhlYWRlcnN8fHYuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlKXYuc2V0RnJvbSh2LmhpZ2hsaWdodCksdi5zZXRUbyh2LmhpZ2hsaWdodCk7ZWxzZXtjb25zdCBJPXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigp''@;'; put 'put ''LEc9di5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLGllPXRoaXMuaXNNdWx0aXBsZSgpO3Yuc2V0VG8oYSksaWUmJihJIT09di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl8fDE9PT12LmdldFdpZHRoKCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe2NvbDp2Lmhp''@;'; put 'put ''Z2hsaWdodC5jb2x9KSxpZSYmKEchPT12LmdldFZlcnRpY2FsRGlyZWN0aW9uKCl8fDE9PT12LmdldEhlaWdodCgpJiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdodCkpJiZ2LmZyb20uYXNzaWduKHtyb3c6di5oaWdobGlnaHQucm93fSl9ZD4wJiZoPjAmJighdGhpcy5zZXR0aW5ncy5uYXZpZ2Fi''@;'; put 'put ''bGVIZWFkZXJzfHx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMmJiF2LmlzU2luZ2xlSGVhZGVyKCkpJiZ2LnRvLm5vcm1hbGl6ZSgpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5zZXRSYW5nZUZvY3VzKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJy''@;'; put 'put ''ZW50KCkuaGlnaGxpZ2h0KSx0aGlzLmFwcGx5QW5kQ29tbWl0KCk7Y29uc3QgTT0tMT09PUNjKG5ULHRoaXMpfHx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpPT09Q2MoblQsdGhpcyk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsLE0pfWFwcGx5QW5kQ29tbWl0KCl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVs''@;'; put 'put ''KCk7Y29uc3QgZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7YTx0aGlzLmhpZ2hsaWdodC5sYXllckxldmVsJiYoWW4odGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSxqZT0+e2plLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5n''@;'; put 'put ''ZXRMYXllcmVkQXJlYXMoKSxqZT0+e2plLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIZWFkZXJzKCksamU9PntqZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLGplPT57amUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFj''@;'; put 'put ''dGl2ZVJvd0hlYWRlcnMoKSxqZT0+e2plLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb2x1bW5IZWFkZXJzKCksamU9PntqZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLGplPT57amUuY2xlYXIoKX0pLFluKHRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0LmdldFJvd0hpZ2hsaWdodHMoKSxqZT0+e2plLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IaWdobGlnaHRzKCksamU9PntqZS5jbGVhcigpfSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVh''@;'; put 'put ''dGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksST10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxHPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLGllPXRo''@;'; put 'put ''aXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLHVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLHllPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgp''@;'; put 'put ''O2lmKGYuY2xlYXIoKSx2LmNsZWFyKCksTS5jbGVhcigpLEkuY2xlYXIoKSxHLmNsZWFyKCksaWUuY2xlYXIoKSx1ZS5jbGVhcigpLHllLmNsZWFyKCksRWUuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IodlgsbC5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fGE+''@;'; put 'put ''PTEpJiYoZi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksdi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksMT09PWEpKXtjb25zdCBqZT10aGlzLnNlbGVjdGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEtMSksdGhpcy5oaWdobGln''@;'; put 'put ''aHQuY3JlYXRlQXJlYSgpLmFkZChqZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChqZSksdGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKS5hZGQoamUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoamUpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9aWYodGhpcy5oaWdo''@;'; put 'put ''bGlnaHQuaXNFbmFibGVkRm9yKG1YLGwuaGlnaGxpZ2h0KSl7aWYoIWwuaXNTaW5nbGVIZWFkZXIoKSl7Y29uc3QgcnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSwtMSkscHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''bC50by5yb3csLTEpLGR0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpLEp0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLGwudG8uY29sKTsic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZT8o''@;'; put 'put ''TS5hZGQocnQpLmNvbW1pdCgpLEkuYWRkKGR0KS5jb21taXQoKSx5ZS5hZGQocnQpLmNvbW1pdCgpLEVlLmFkZChkdCkuY29tbWl0KCkpOihNLmFkZChydCkuYWRkKHB0KS5jb21taXQoKSxJLmFkZChkdCkuYWRkKEp0KS5jb21taXQoKSx5ZS5hZGQocnQpLmFkZChwdCkuY29tbWl0KCksRWUu''@;'; put 'put ''YWRkKGR0KS5hZGQoSnQpLmNvbW1pdCgpKX1jb25zdCBqZT0hQ2ModFQsdGhpcykmJnRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiYoaD4wJiZoPT09bC5nZXRXaWR0aCgpfHwwPT09aCYmdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkscWU9IUNjKHRULHRoaXMpJiZ0aGlzLmlzRW50''@;'; put 'put ''aXJlQ29sdW1uU2VsZWN0ZWQoKSYmKGQ+MCYmZD09PWwuZ2V0SGVpZ2h0KCl8fDA9PT1kJiZ0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKTtqZSYmRy5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC5mcm9tLnJvdywwKSxNYXRoLm1pbigtdGhp''@;'; put 'put ''cy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLC0xKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLnRvLnJvdywwKSwtMSkpLmNvbW1pdCgpLHFlJiZpZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oLXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtMSksTWF0aC5tYXgobC5mcm9tLmNvbCwwKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLnRvLmNvbCwwKSkpLmNvbW1pdCgpLGplJiZxZSYmdWUuYWRkKHRoaXMudGFibGVQcm9wcy5j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwtMSkpLmNvbW1pdCgpfX1zZXRSYW5nZUZvY3VzKGwpe2lmKHRo''@;'; put 'put ''aXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTt0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0Rm9jdXMiLGwpO2NvbnN0IGQ9dGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtkLmNs''@;'; put 'put ''ZWFyKCksYS5zZXRIaWdobGlnaHQobCksdGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNldCIpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihRRSxhLmhpZ2hsaWdodCkmJmQuYWRkKGEuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChh''@;'; put 'put ''KSx0aGlzLmluUHJvZ3Jlc3N8fChGcChBUCx0aGlzLCEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0Rm9jdXMiLGEuaGlnaGxpZ2h0KSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd''@;'; put 'put ''O3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6ZSgpLHRo''@;'; put 'put ''aXMuc2V0UmFuZ2VTdGFydChDYyhfMSx0aGlzKS50cmFuc2Zvcm1TdGFydChsLGEsZCkpfXRyYW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycz9DYyhfMSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OnRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSx5''@;'; put 'put ''OnRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKX0pOkNjKF8xLHRoaXMpLnJlc2V0T2Zmc2V0U2l6ZSgpLHRoaXMuc2V0UmFuZ2VFbmQoQ2MoXzEsdGhpcykudHJhbnNmb3JtRW5kKGwsYSkpfXRyYW5zZm9ybUZvY3VzKGwsYSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3Vy''@;'; put 'put ''cmVudCgpLHtyb3c6aCxjb2w6Zn09ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxmLTEpLE09dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC0xKTtkLmhpZ2hsaWdo''@;'; put 'put ''dC5pc0hlYWRlcigpP0NjKG45LHRoaXMpLnNldE9mZnNldFNpemUoe3g6ZjwwP01hdGguYWJzKGYpOi12LHk6aDwwP01hdGguYWJzKGgpOi1NfSk6Q2MobjksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/MDotdix5Omg8MD8wOi1NfSk7Y29uc3QgST1DYyhuOSx0aGlzKS50cmFuc2Zvcm1T''@;'; put 'put ''dGFydChsLGEpO3RoaXMuc2V0UmFuZ2VGb2N1cyhJLm5vcm1hbGl6ZSgpKX1zaGlmdFJvd3MobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0''@;'; put 'put ''QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8ZC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkucm93Pj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jb3VudFJvd3MoKSxJPXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksRz10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLGllPUc/LTE6MCx1ZT1HPzA6YTt0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtjb25zdCB5ZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhrcyhoLnJvdyt1ZSxpZSxNLTEpLGguY29sKSxFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhrcyhmLnJvdythLGllLE0tMSksZi5jb2wpO3RoaXMubWFya1NvdXJjZSgic2hpZnQiKSx2LnJvdz49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KHllLCEwLHRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGtzKHYucm93K2EsMCxNLTEpLHYuY29sKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh5ZSwhMCksSSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksRyYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVy''@;'; put 'put ''LmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fXNoaWZ0Q29sdW1ucyhsLGEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hs''@;'; put 'put ''aWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLEk9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxHPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksaWU9ST8tMTowLHVlPUk/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IHllPXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgucm93LGtzKGguY29sK3VlLGllLE0tMSkpLEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYucm93LGtzKGYuY29sK2EsaWUsTS0xKSk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYuY29sPj1sP3RoaXMuc2V0UmFu''@;'; put 'put ''Z2VTdGFydE9ubHkoeWUsITAsdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModi5yb3csa3Modi5jb2wrYSwwLE0tMSkpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHllLCEwKSxJJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxHJiZ0''@;'; put 'put ''aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxlY3RlZCgpe3JldHVy''@;'; put 'put ''biF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpfWlzTXVsdGlwbGUoKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuITE7Y29uc3QgbD1GZCghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVs''@;'; put 'put ''dGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9aXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKCkmJkNjKEFQLHRoaXMpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e2NvbDpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMo''@;'; put 'put ''KSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12KSYmaC5nZXRXaWR0aCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5w''@;'; put 'put ''ZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEoZCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNv''@;'; put 'put ''cm5lcigpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyhsKSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtyb3c6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7cmV0dXJuKHY+MCYmZjwwfHww''@;'; put 'put ''PT09dikmJmguZ2V0SGVpZ2h0KCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlBbnlIZWFk''@;'; put 'put ''ZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMo''@;'; put 'put ''dGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKX1pbkluU2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNl''@;'; put 'put ''dHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNNdWx0aXBsZSgpfWlzQ2VsbFZpc2libGUobCl7Y29uc3QgYT10aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpO3JldHVybiBudWxsIT09YS5yb3cmJm51''@;'; put 'put ''bGwhPT1hLmNvbH1pc0FyZWFDb3JuZXJWaXNpYmxlKGwpe3JldHVybighTnVtYmVyLmlzSW50ZWdlcihsKXx8bD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBs''@;'; put 'put ''ZSgpfWNsZWFyKCl7dGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKX1kZXNlbGVjdCgpe3RoaXMuaXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3QiKSl9c2Vs''@;'; put 'put ''ZWN0QWxsKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e2ZvY3VzUG9zaXRpb246ITEsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9O2NvbnN0IGY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93''@;'; put 'put ''SGVhZGVycygpLEk9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLEc9ZD8tSTowLGllPWE/LU06MDtpZigwPT09RyYmMD09PWllJiYoMD09PWZ8fDA9PT12KSlyZXR1cm47bGV0IHVlPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCkpfHx2b2lkIDA9''@;'; put 'put ''PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtjb25zdHtmb2N1c1Bvc2l0aW9uOnllLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OkVlfT1oO0ZwKHRULHRoaXMsRWUpLHllJiZOdW1iZXIuaXNJbnRlZ2VyKHllPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKHllPy5jb2wpJiYodWU9dGhpcy50YWJsZVBy''@;'; put 'put ''b3BzLmNyZWF0ZUNlbGxDb29yZHMoa3MoeWUucm93LEcsZi0xKSxrcyh5ZS5jb2wsaWUsdi0xKSkpO2NvbnN0IGplPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEcsaWUpLHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGYtMSx2LTEpO3RoaXMuY2xlYXIoKSx0''@;'; put 'put ''aGlzLnNldFJhbmdlU3RhcnRPbmx5KGplLHZvaWQgMCx1ZSksaWU8MCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksRzwwJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdl''@;'; put 'put ''RW5kKHFlKSx0aGlzLmZpbmlzaCgpLEZwKHRULHRoaXMsITEpfXNlbGVjdENlbGxzKGwpe3ZhciBhPXRoaXM7Y29uc3QgZD14XyhsKTtpZigxPT09ZClyZXR1cm4hMTtpZigwPT09ZCl0aHJvdyBuZXcgRXJyb3IoZ2xgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2Vz''@;'; put 'put ''IHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblByb3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJv''@;'; put 'put ''cEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBoPWVUKGQse2NyZWF0ZUNlbGxDb29yZHM6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbFJhbmdlOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoLi4uYXJndW1lbnRzKX0scHJvcFRvQ29sOkk9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woSSksa2VlcERpcmVjdGlvbjohMH0pLGY9dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzLHY9e2NvdW50Um93czp0aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY291bnRSb3dzKCksY291bnRDb2xzOnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxjb3VudFJvd0hlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk6MCxjb3VudENvbEhlYWRlcnM6Zj90aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJz''@;'; put 'put ''KCk6MH0sTT0hbC5zb21lKEk9Pntjb25zdCBHPWgoSSksaWU9Ry5pc1ZhbGlkKHYpO3JldHVybiEoaWUmJiFHLmNvbnRhaW5zSGVhZGVycygpfHxpZSYmRy5jb250YWluc0hlYWRlcnMoKSYmRy5pc1NpbmdsZUhlYWRlcigpKX0pO3JldHVybiBNJiYodGhpcy5jbGVhcigpLHRoaXMuc2V0RXhw''@;'; put 'put ''ZWN0ZWRMYXllcnMobC5sZW5ndGgpLFluKGwsST0+e2NvbnN0e2Zyb206Ryx0bzppZX09aChJKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KEcuY2xvbmUoKSwhMSksdGhpcy5zZXRSYW5nZUVuZChpZS5jbG9uZSgpKX0pLHRoaXMuZmluaXNoKCkpLE19c2VsZWN0Q29sdW1ucyhsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9D''@;'; put 'put ''b2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksST10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksRz0wPT09ST8w''@;'; put 'put ''Oi1JLGllPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEcsaCksdWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModi0xLGYpLHllPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaWUsaWUsdWUpLmlzVmFsaWQoe2NvdW50Um93czp2LGNvdW50Q29sczpN''@;'; put 'put ''LGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczpJfSk7aWYoeWUpe2xldCBFZT0wLGplPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KEVlPWtzKGQucm93LEcsdi0xKSxqZT1rcyhkLmNvbCxNYXRoLm1pbihoLGYpLE1hdGgubWF4''@;'; put 'put ''KGgsZikpKTooRWU9a3MoZCxHLHYtMSksamU9aCk7Y29uc3QgcWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoRWUsamUpLHJ0PTA9PT1JPzA6a3MocWUucm93LEcsLTEpLHB0PXYtMSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhydCxoKSxKdD10aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhwdCxmKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdENvbHVtbnMiLGR0LEp0LHFlKSxkdC5yb3c9cnQsSnQucm93PXB0LHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoZHQsdm9pZCAwLHFlKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEp0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsZHQsSnQscWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIHllfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSx2PXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxNPTA9PT12PzA6LXYsST10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLE0pLEc9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxmLTEpLGllPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoSSxJ''@;'; put 'put ''LEcpLmlzVmFsaWQoe2NvdW50Um93czpoLGNvdW50Q29sczpmLGNvdW50Um93SGVhZGVyczp2LGNvdW50Q29sSGVhZGVyczowfSk7aWYoaWUpe2xldCB1ZT0wLHllPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KHVlPWtzKGQucm93LE1hdGgu''@;'; put 'put ''bWluKGwsYSksTWF0aC5tYXgobCxhKSkseWU9a3MoZC5jb2wsTSxmLTEpKToodWU9bCx5ZT1rcyhkLE0sZi0xKSk7Y29uc3QgRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModWUseWUpLGplPTA9PT12PzA6a3MoRWUuY29sLE0sLTEpLHFlPWYtMSxydD10aGlzLnRhYmxlUHJv''@;'; put 'put ''cHMuY3JlYXRlQ2VsbENvb3JkcyhsLGplKSxwdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLHFlKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLHJ0LHB0LEVlKSxydC5jb2w9amUscHQuY29sPXFlLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkocnQsdm9p''@;'; put 'put ''ZCAwLEVlKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKHB0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Um93cyIscnQscHQsRWUpLHRoaXMuZmluaXNoKCl9cmV0dXJuIGllfXJlZnJlc2goKXtpZigh''@;'; put 'put ''dGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKDA9PT1sfHwwPT09YSlyZXR1cm4gdm9pZCB0aGlzLmRlc2VsZWN0KCk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVl''@;'; put 'put ''a0J5SW5kZXgodGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xKSx7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQ7dGhpcy5jbGVhcigpLHYuYXNzaWduKHtyb3c6a3Modi5yb3csLTEvMCxsLTEpLGNvbDprcyh2LmNvbCwtMS8wLGEtMSl9KSxoLmFzc2lnbih7cm93OmtzKGgucm93LC0xLzAs''@;'; put 'put ''bC0xKSxjb2w6a3MoaC5jb2wsLTEvMCxhLTEpfSksZi5hc3NpZ24oe3JvdzprcyhmLnJvdywwLGwtMSksY29sOmtzKGYuY29sLDAsYS0xKX0pLHRoaXMuc2VsZWN0ZWRSYW5nZS5yYW5nZXMucHVzaChkKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsdGhpcy5zZWxlY3RlZFJhbmdl''@;'; put 'put ''LmN1cnJlbnQoKS5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpLmFkZCh2KS5jb21taXQoKS5zeW5jV2l0aChkKSx0aGlzLmFwcGx5QW5kQ29tbWl0KGQpfWNvbW1pdCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNv''@;'; put 'put ''bW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpLGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTt0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoUUUsZC5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygp''@;'; put 'put ''LmNvbW1pdCgpLnN5bmNXaXRoKGQpO2ZvcihsZXQgaD0wO2g8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKTtoKz0xKXt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGgpO2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJl''@;'; put 'put ''ZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEk9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCksRz10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxpZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIo''@;'; put 'put ''KSx1ZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKSx5ZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIaWdobGlnaHQoKSxFZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtmLmNvbW1pdCgpLHYuY29tbWl0KCksTS5jb21taXQoKSxJLmNv''@;'; put 'put ''bW1pdCgpLEcuY29tbWl0KCksaWUuY29tbWl0KCksdWUuY29tbWl0KCkseWUuY29tbWl0KCksRWUuY29tbWl0KCl9dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX19VGwoaXBlLGIxKTtjb25zdCBxbnQ9aXBlLHtyZWdpc3RlcjpYbnQsZ2V0SXRlbTpKbnQsaGFzSXRlbTphcGUsZ2V0''@;'; put 'put ''TmFtZXM6UW50fT1yMygiY2VsbFR5cGVzIik7ZnVuY3Rpb24gTVgoYyl7aWYoIWFwZShjKSl0aHJvdyBFcnJvcihgWW91IGRlY2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBD''@;'; put 'put ''ZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBKbnQoYyl9ZnVuY3Rpb24g''@;'; put 'put ''RzIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6ZCx2YWxpZGF0b3I6aH09bDthJiZIZChjLGEpLGQmJkloKGMsZCksaCYmWTcoYyxoKSxYbnQoYyxsKX1mdW5jdGlvbiBEUChjLGwpe2xldCBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBsLnR5cGU/TVgobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZYbyhsLChmLHYpPT57Yy5fYXV0b21hdGljYWxseUFz''@;'; put 'put ''c2lnbmVkTWV0YVByb3BzLmRlbGV0ZSh2KX0pLCFxbyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtYbyhkLChmLHYpPT57dmFyIE07KGZ1bmN0''@;'; put 'put ''aW9uIGVydChjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oYXMoYykpfHwhVHUobCxjKSl9KSh2LGEpJiYoaFt2XT1mLG51bGw9PT0oTT1jLl9hdXRvbWF0''@;'; put 'put ''aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1NfHxNLmFkZCh2KSl9KSxFdShjLGgpfWZ1bmN0aW9uIElQKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1bmN0aW9uIFJQKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6''@;'; put 'put ''ICR7bH1gKX1mdW5jdGlvbiBMUChjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBvcGU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEs''@;'; put 'put ''YWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGFyaWFUYWdzOiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0''@;'; put 'put ''b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lk''@;'; put 'put ''IDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBh''@;'; put 'put ''c3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhRG90Tm90YXRpb246ITAs''@;'; put 'put ''ZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1hdDoiREQvTU0vWVlZWSIsdGltZUZvcm1hdDoiaDptbTpzcyBhIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51OnZv''@;'; put 'put ''aWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVmdDow''@;'; put 'put ''LGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlYWRlckNsYXNzTmFtZTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxoaWRkZW5Db2x1bW5zOnZvaWQgMCxoaWRkZW5Sb3dzOnZvaWQg''@;'; put 'put ''MCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixpbWVGYXN0RWRpdDohMSxpc0VtcHR5Q29sKGMpe2xldCBsLGEsZDtmb3IobD0wLGE9dGhpcy5jb3VudFJvd3MoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGwsYyksITE9PT1VYyhkKSlyZXR1cm4hMTtyZXR1cm4h''@;'; put 'put ''MH0saXNFbXB0eVJvdyhjKXtsZXQgbCxhLGQsaDtmb3IobD0wLGE9dGhpcy5jb3VudENvbHMoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGMsbCksITE9PT1VYyhkKSlyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJihoPXRoaXMuZ2V0Q2VsbE1ldGEoYyxsKSxOTyh0aGlzLmdl''@;'; put 'put ''dFNjaGVtYSgpW2gucHJvcF0sZCkpO3JldHVybiEwfSxsYWJlbDp2b2lkIDAsbGFuZ3VhZ2U6ImVuLVVTIixsYXlvdXREaXJlY3Rpb246ImluaGVyaXQiLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLG1hbnVhbENvbHVtbkZyZWV6ZTp2b2lkIDAsbWFudWFsQ29sdW1uTW92ZTp2''@;'; put 'put ''b2lkIDAsbWFudWFsQ29sdW1uUmVzaXplOnZvaWQgMCxtYW51YWxSb3dNb3ZlOnZvaWQgMCxtYW51YWxSb3dSZXNpemU6dm9pZCAwLG1heENvbHM6MS8wLG1heFJvd3M6MS8wLG1lcmdlQ2VsbHM6ITEsbWluQ29sczowLG1pblJvd3M6MCxtaW5TcGFyZUNvbHM6MCxtaW5TcGFyZVJvd3M6MCxt''@;'; put 'put ''dWx0aUNvbHVtblNvcnRpbmc6dm9pZCAwLG5hdmlnYWJsZUhlYWRlcnM6ITEsdGFiTmF2aWdhdGlvbjohMCxuZXN0ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZp''@;'; put 'put ''c2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seToh''@;'; put 'put ''MSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOiExLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9u''@;'; put 'put ''TW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNraXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRh''@;'; put 'put ''YmxlQ2xhc3NOYW1lOnZvaWQgMCx0aGVtZU5hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86''@;'; put 'put ''ITAsdmFsaWRhdG9yOnZvaWQgMCx2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOjAsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aXNpYmxl''@;'; put 'put ''Um93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtmdW5jdGlvbiBzcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5ydChjKXt2YXIgbD1mdW5jdGlvbiBycnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZl''@;'; put 'put ''XTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/''@;'; put 'put ''U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNz''@;'; put 'put ''IGFydHtjb25zdHJ1Y3RvcihsKXtzcGUodGhpcywibWV0YUN0b3IiLGNsYXNze30pLHNwZSh0aGlzLCJtZXRhIix2b2lkIDApLHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxFdSh0aGlzLm1ldGEsb3BlKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7RXUodGhpcy5tZXRhLGwpLERQKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1j''@;'; put 'put ''bGFzcyBjcnR7Y29uc3RydWN0b3IobCl7IWZ1bmN0aW9uIG9ydChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3J0KGMpe3ZhciBsPWZ1bmN0aW9uIGxydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm1ldGEiLHZv''@;'; put 'put ''aWQgMCk7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe0V1KHRoaXMubWV0YSxsKSxEUCh0aGlzLm1ldGEsbCxsKX19ZnVuY3Rpb24gT1AoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u''@;'; put 'put ''IHVydChjKXt2YXIgbD1mdW5jdGlvbiBkcnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1''@;'; put 'put ''cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFBQe2NvbnN0cnVjdG9yKGwpe09QKHRoaXMsInZhbHVlRmFjdG9yeSIsdm9pZCAwKSxPUCh0aGlzLCJkYXRhIixbXSksT1Ao''@;'; put 'put ''dGhpcywiaW5kZXgiLFtdKSxPUCh0aGlzLCJob2xlcyIsbmV3IFNldCksdGhpcy52YWx1ZUZhY3Rvcnk9bH1vYnRhaW4obCl7UlAoKCk9PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9dGhpcy5fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCk7bGV0IGQ7aWYo''@;'; put 'put ''YT49MClkPXRoaXMuZGF0YVthXSx2b2lkIDA9PT1kJiYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmRhdGFbYV09ZCk7ZWxzZSBpZihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuaG9sZXMuc2l6ZT4wKXtjb25zdCBoPXRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO3Ro''@;'; put 'put ''aXMuaG9sZXMuZGVsZXRlKGgpLHRoaXMuZGF0YVtoXT1kLHRoaXMuaW5kZXhbbF09aH1lbHNlIHRoaXMuZGF0YS5wdXNoKGQpLHRoaXMuaW5kZXhbbF09dGhpcy5kYXRhLmxlbmd0aC0xO3JldHVybiBkfWluc2VydChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXT9hcmd1bWVudHNbMV06MTtSUCgoKT0+SVAobCl8fExQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9W10saD10aGlzLmRhdGEubGVuZ3RoO2ZvcihsZXQgdj0wO3Y8YTt2KyspZC5wdXNoKGgrdiks''@;'; put 'put ''dGhpcy5kYXRhLnB1c2godm9pZCAwKTtjb25zdCBmPUxQKGwpP3RoaXMuaW5kZXgubGVuZ3RoOmw7dGhpcy5pbmRleD1bLi4udGhpcy5pbmRleC5zbGljZSgwLGYpLC4uLmQsLi4udGhpcy5pbmRleC5zbGljZShmKV19cmVtb3ZlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO1JQKCgpPT5JUChsKXx8TFAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD10aGlzLmluZGV4LnNwbGljZShMUChsKT90aGlzLmluZGV4Lmxlbmd0aC1hOmws''@;'; put 'put ''YSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTsibnVtYmVyIj09dHlwZW9mIGYmJnRoaXMuaG9sZXMuYWRkKGYpfX1zaXplKCl7cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGgtdGhpcy5ob2xlcy5zaXplfXZhbHVlcygpe3JldHVybiB0aGlzLmRhdGEuZmlsdGVyKChs''@;'; put 'put ''LGEpPT52b2lkIDAhPT1sJiYhdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dldEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmdm9pZCAw''@;'; put 'put ''IT09dGhpcy5kYXRhW2RdJiZsLnB1c2goW2gsdGhpcy5kYXRhW2RdXSl9bGV0IGE9MDtyZXR1cm57bmV4dDooKT0+e2lmKGE8bC5sZW5ndGgpe2NvbnN0IGQ9bFthXTtyZXR1cm4gYSs9MSx7dmFsdWU6ZCxkb25lOiExfX1yZXR1cm57ZG9uZTohMH19fX1jbGVhcigpe3RoaXMuZGF0YT1bXSx0''@;'; put 'put ''aGlzLmluZGV4PVtdLHRoaXMuaG9sZXMuY2xlYXIoKX1fZ2V0U3RvcmFnZUluZGV4QnlLZXkobCl7cmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoPmw/dGhpcy5pbmRleFtsXTotMX1fZ2V0S2V5QnlTdG9yYWdlSW5kZXgobCl7cmV0dXJuIHRoaXMuaW5kZXguaW5kZXhPZihsKX1bU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX19ZnVuY3Rpb24gbHBlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBocnQoYyl7dmFyIGw9ZnVuY3Rpb24gZnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBw''@;'; put 'put ''cnQ9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBncnR7Y29uc3RydWN0b3IobCl7bHBlKHRoaXMsImdsb2JhbE1ldGEiLHZvaWQgMCksbHBlKHRoaXMsIm1ldGFzIixuZXcgUFAoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSkpLHRoaXMuZ2xvYmFsTWV0YT1sLHRoaXMubWV0YXM9bmV3IFBQKCgpPT50''@;'; put 'put ''aGlzLl9jcmVhdGVNZXRhKCkpfXVwZGF0ZU1ldGEobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWV0YShsKTtFdShkLGEpLERQKGQsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1yZW1vdmVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfWdldE1ldGEo''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpfWdldE1ldGFDb25zdHJ1Y3RvcihsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCkuY29uc3RydWN0b3J9Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlTWV0YSgpe3JldHVybiBmdW5jdGlvbiB0cnQoYyl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Z1bmN0aW9uIGEoKXt9RzJlKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0''@;'; put 'put ''TWV0YUNvbnN0cnVjdG9yKCkscHJ0KS5wcm90b3R5cGV9fWZ1bmN0aW9uIGNwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHZydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mg''@;'; put 'put ''eXJ0e2NvbnN0cnVjdG9yKGwpe2NwZSh0aGlzLCJjb2x1bW5NZXRhIix2b2lkIDApLGNwZSh0aGlzLCJtZXRhcyIsbmV3IFBQKCgpPT50aGlzLl9jcmVhdGVSb3coKSkpLHRoaXMuY29sdW1uTWV0YT1sfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7RXUoaCxk''@;'; put 'put ''KSxEUChoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1v''@;'; put 'put ''dmUobCxhKX1yZW1vdmVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09''@;'; put 'put ''ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxoKXt2YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQp''@;'; put 'put ''e2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylQYShhW2RdKSYmbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVy''@;'; put 'put ''biBsfWdldE1ldGFzQXRSb3cobCl7UlAoKCk9PklQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0''@;'; put 'put ''YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBQUChsPT50aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFzcyB1cGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9iYWxNZXRhPW5ldyBhcnQobCksdGhpcy50YWJsZU1ldGE9''@;'; put 'put ''bmV3IGNydCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1uZXcgZ3J0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgeXJ0KHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRH''@;'; put 'put ''bG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlz''@;'; put 'put ''LnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdldENlbGxNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuY2Vs''@;'; put 'put ''bE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiBoLnZpc3VhbFJvdz1kLnZpc3VhbFJvdyxoLnZpc3VhbENvbD1kLnZpc3VhbENvbHVtbixoLnJvdz1sLGguY29sPWEsZC5za2lwTWV0YUV4dGVuc2lvbnx8dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIixoKSxofWdldENlbGxN''@;'; put 'put ''ZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7''@;'; put 'put ''dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxkLGgpfXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEobCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNNZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3RoaXMuY2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1u''@;'; put 'put ''TWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIGRwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYnJ0KGMpe3ZhciBsPWZ1bmN0aW9uIF9ydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9VGwodXBlLGIxKTtjbGFzcyB3cnR7''@;'; put 'put ''Y29uc3RydWN0b3IobCl7dmFyIGE9dGhpcztkcGUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksZHBlKHRoaXMsIm1ldGFTeW5jTWVtbyIsbmV3IE1hcCksdGhpcy5tZXRhTWFuYWdlcj1sLGwuYWRkTG9jYWxIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe3JldHVybiBhLmV4''@;'; put 'put ''dGVuZENlbGxNZXRhKC4uLmFyZ3VtZW50cyl9KSxTYS5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVJlbmRlciIsZD0+e2QmJnRoaXMubWV0YVN5bmNNZW1vLmNsZWFyKCl9LHRoaXMubWV0YU1hbmFnZXIuaG90KX1leHRlbmRDZWxsTWV0YShsKXt2YXIgYTtjb25zdHtyb3c6ZCxjb2w6aH09''@;'; put 'put ''bDtpZihudWxsIT09KGE9dGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpKSYmdm9pZCAwIT09YSYmYS5oYXMoaCkpcmV0dXJuO2NvbnN0e3Zpc3VhbFJvdzpmLHZpc3VhbENvbDp2fT1sLE09dGhpcy5tZXRhTWFuYWdlci5ob3QsST1NLmNvbFRvUHJvcCh2KTtsLnByb3A9SSxNLnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVHZXRDZWxsTWV0YSIsZix2LGwpO2NvbnN0IEc9VHUobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCBpZT1tbChsLmNlbGxzKT9sLmNlbGxzKGQsaCxJKTpudWxsO2lmKEcpaWYoaWUpe3ZhciB1ZTtpZS50eXBlPW51bGwhPT0odWU9aWUudHlwZSkmJnZvaWQgMCE9PXVlP3VlOkd9ZWxz''@;'; put 'put ''ZSBpZT17dHlwZTpHfTtpZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgsaWUpLE0ucnVuSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGYsdixsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5''@;'; put 'put ''bmNNZW1vLmdldChkKS5hZGQoaCl9fWZ1bmN0aW9uIHhYKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNcnQoYyl7dmFyIGw9ZnVuY3Rpb24geHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY312YXIgaHBlPW5ldyBXZWFrTWFw''@;'; put 'put ''O2NsYXNzIEFydHtjb25zdHJ1Y3RvcihsKXt4WCh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSx4WCh0aGlzLCJ1c2FnZVRyYWNrZXIiLG5ldyBTZXQpLHhYKHRoaXMsInByb3BEZXNjcmlwdG9ycyIsbmV3IE1hcChbWyJhcmlhVGFncyIse2luaXRPbmx5OiEwfV0sWyJmaXhlZENvbHVtbnNM''@;'; put 'put ''ZWZ0Iix7dGFyZ2V0OiJmaXhlZENvbHVtbnNTdGFydCIsb25DaGFuZ2UoYSl7aWYodGhpcy5tZXRhTWFuYWdlci5ob3QuaXNSdGwoKSYmImZpeGVkQ29sdW1uc0xlZnQiPT09YSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRM''@;'; put 'put ''LiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpO2lmKHRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zTGVmdCIpJiZ0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc1N0YXJ0IikpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1u''@;'; put 'put ''c0xlZnRgIGFuZCBgZml4ZWRDb2x1bW5zU3RhcnRgIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKX19XSxbImxheW91dERpcmVjdGlvbiIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxDb2x1bW5z''@;'; put 'put ''Iix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbFJvd3MiLHtpbml0T25seTohMH1dXSkpLGZ1bmN0aW9uIENydChjLGwsYSl7KGZ1bmN0aW9uIFNydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsaHBlLChhLGQsaCk9PntpZighaCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBcYCR7YX1cYCBvcHRpb24gY2FuIG5vdCBiZSB1cGRhdGVkIGFmdGVyIHRoZSBIYW5kc29udGFibGUgaXMgaW5pdGlhbGl6ZWQuYCl9''@;'; put 'put ''KSx0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7aW5pdE9ubHk6ZCx0YXJnZXQ6aCxvbkNoYW5nZTpmfT1sLHY9InN0cmluZyI9PXR5cGVvZiBoLE09dj9o''@;'; put 'put ''OmEsST1gXyR7TX1gO3RoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW0ldPXRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW01dLGY/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsSSxmKSx2JiZ0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihoLEksZikpOmQmJih0aGlzLmlu''@;'; put 'put ''c3RhbGxQcm9wV2F0Y2hlcihhLEksZnVuY3Rpb24gRXJ0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIFRydChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJp''@;'; put 'put ''dmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShocGUsdGhpcykpLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzfHwodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGlu''@;'; put 'put ''Z3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2goYSkpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGws''@;'; put 'put ''e2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBmcGU9L14oXHJcbnxcblxy''@;'; put 'put ''fFxyfFxuKS8sa3J0PS9eW15cdFxyXG5dKy8scHBlPS9eXHQvO2Z1bmN0aW9uIHJUKGMpe2xldCBsLGEsZCxoLHYsZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9djpmKz1udWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWZ1bmN0aW9uIHI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJcnQoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gUnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUX3tzdGF0aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7''@;'; put 'put ''cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQpe3I5KHRoaXMsImhvdCIsdm9pZCAwKSxyOSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxyOSh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCkscjkodGhpcywiZGF0YVNvdXJjZSIsdm9pZCAwKSxyOSh0aGlzLCJkdWNrU2NoZW1hIix2b2lkIDAp''@;'; put 'put ''LHI5KHRoaXMsImNvbFRvUHJvcENhY2hlIix2b2lkIDApLHI5KHRoaXMsInByb3BUb0NvbENhY2hlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5tZXRhTWFuYWdlcj1kLHRoaXMudGFibGVNZXRhPWQuZ2V0VGFibGVNZXRhKCksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5yZWZyZXNoRHVja1Nj''@;'; put 'put ''aGVtYSgpLHRoaXMuY3JlYXRlTWFwKCl9Y3JlYXRlTWFwKCl7Y29uc3QgbD10aGlzLmdldFNjaGVtYSgpO2lmKHR5cGVvZiBsPiJ1Iil0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBjcmVhdGUgYGNvbHVtbnNgIGRlZmluaXRpb24gYnV0IHlvdSBkaWRuJ3QgcHJvdmlkZSBgc2NoZW1hYCBu''@;'; put 'put ''b3IgYGRhdGFgIik7Y29uc3QgYT10aGlzLnRhYmxlTWV0YS5jb2x1bW5zO2xldCBkO2lmKHRoaXMuY29sVG9Qcm9wQ2FjaGU9W10sdGhpcy5wcm9wVG9Db2xDYWNoZT1uZXcgTWFwLGEpe2xldCBoPTAsZj0wLHY9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpe2NvbnN0IE09Qk8obCk7aD1N''@;'; put 'put ''PjA/TTp0aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCksdj0hMH1lbHNlIGg9TWF0aC5taW4odGhpcy50YWJsZU1ldGEubWF4Q29scyxhLmxlbmd0aCk7Zm9yKGQ9MDtkPGg7ZCsrKXtjb25zdCBNPXY/YShkKTphW2RdO2lmKHFvKE0pKXtpZih0eXBlb2YgTS5kYXRhPCJ1Iil7Y29uc3QgST12P2Y6''@;'; put 'put ''ZDt0aGlzLmNvbFRvUHJvcENhY2hlW0ldPU0uZGF0YSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChNLmRhdGEsSSl9Zis9MX19fWVsc2UgdGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhsKX1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBGSyh0aGlzLmRhdGFTb3VyY2UpfXJlY3Vyc2l2ZUR1''@;'; put 'put ''Y2tDb2x1bW5zKGwsYSxkKXtsZXQgdixoPWEsZj1kO3JldHVybiB0eXBlb2YgaD4idSImJihoPTAsZj0iIiksIm9iamVjdCI9PXR5cGVvZiBsJiYhQXJyYXkuaXNBcnJheShsKSYmWG8obCwoTSxJKT0+e251bGw9PT1NPyh2PWYrSSx0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2godiksdGhpcy5w''@;'; put 'put ''cm9wVG9Db2xDYWNoZS5zZXQodixoKSxoKz0xKTpoPXRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoTSxoLGAke0l9LmApfSksaH1jb2xUb1Byb3AobCl7aWYoITE9PT1OdW1iZXIuaXNJbnRlZ2VyKGwpKXJldHVybiBsO2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hlJiZQYSh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNvbFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoUGEoYSkpcmV0dXJuIHRoaXMuaG90LnRvVmlz''@;'; put 'put ''dWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1kP2w6ZH1nZXRTY2hlbWEoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWE7cmV0dXJuIGw/ImZ1bmN0aW9uIj09dHlwZW9mIGw/bCgpOmw6dGhpcy5kdWNrU2NoZW1h''@;'; put 'put ''fWNyZWF0ZUR1Y2tTY2hlbWEoKXtyZXR1cm4gdGhpcy5kYXRhU291cmNlJiZ0aGlzLmRhdGFTb3VyY2VbMF0/c18odGhpcy5kYXRhU291cmNlWzBdKTp7fX1yZWZyZXNoRHVja1NjaGVtYSgpe3RoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKX1jcmVhdGVSb3cobCl7bGV0''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0iYWJvdmUifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZj10aGlzLmhvdC5jb3Vu''@;'; put 'put ''dFNvdXJjZVJvd3MoKTtsZXQgdj1mLE09MCxJPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgSXx8ST49ZikmJihJPWYpLEk8dGhpcy5ob3QuY291bnRSb3dzKCkmJih2PXRoaXMuaG90LnRvUGh5c2ljYWxSb3coSSkpLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsSSxh''@;'; put 'put ''LGQpfHxudWxsPT09dilyZXR1cm57ZGVsdGE6MH07Y29uc3QgaWU9dGhpcy50YWJsZU1ldGEubWF4Um93cyx1ZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCx5ZT1bXTtmb3IoO008YSYmZitNPGllOyl7bGV0IGplPW51bGw7ImFycmF5Ij09PXRoaXMuaG90LmRhdGFUeXBlP3RoaXMudGFibGVN''@;'; put 'put ''ZXRhLmRhdGFTY2hlbWE/amU9ZzEodGhpcy5nZXRTY2hlbWEoKSk6KGplPVtdLEdhKHVlLTEsKCk9PmplLnB1c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5ob3QuZGF0YVR5cGU/amU9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYShJK00pOihqZT17fSx4RShqZSx0aGlzLmdldFNjaGVt''@;'; put 'put ''YSgpKSkseWUucHVzaChqZSksTSs9MX10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEksTSksImJlbG93Ij09PWgmJih2PU1hdGgubWluKHYrMSxmKSksdGhpcy5zcGxpY2VEYXRhKHYsMCx5ZSk7Y29uc3QgRWU9dGhpcy5ob3QudG9WaXN1YWxSb3codik7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LmNvdW50U291cmNlUm93cygpPT09eWUubGVuZ3RoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5ob3QuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLE0+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3cobnVsbCxNKToiYXV0''@;'; put 'put ''byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyh2LGEpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLEVlLE0sZCkse2RlbHRhOk0sc3RhcnRQaHlzaWNhbEluZGV4OnZ9fWNyZWF0ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJzdGFydCJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZighdGhpcy5ob3QuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNvbHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywgZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5n''@;'; put 'put ''LklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRoaXMuZGF0YVNvdXJjZSx2PXRoaXMudGFibGVNZXRhLm1heENvbHMsTT10aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKTtsZXQgST1s''@;'; put 'put ''O2lmKCgibnVtYmVyIiE9dHlwZW9mIEl8fEk+PU0pJiYoST1NKSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVDb2wiLEksYSxkKSlyZXR1cm57ZGVsdGE6MH07bGV0IGllPU07STx0aGlzLmhvdC5jb3VudENvbHMoKSYmKGllPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4o''@;'; put 'put ''SSkpO2NvbnN0IHVlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2xldCB5ZT10aGlzLmhvdC5jb3VudENvbHMoKSxFZT0wLGplPWllOyJlbmQiPT09aCYmKGplPU1hdGgubWluKGplKzEsTSkpO2NvbnN0IHFlPWplO2Zvcig7RWU8YSYmeWU8djspe2lmKCJudW1iZXIiIT10eXBlb2YgSXx8''@;'; put 'put ''ST49eWUpaWYodWU+MClmb3IobGV0IHB0PTA7cHQ8dWU7cHQrPTEpdHlwZW9mIGZbcHRdPiJ1IiYmKGZbcHRdPVtdKSxmW3B0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IHB0PTA7cHQ8dWU7cHQrKylmW3B0XS5zcGxpY2UoamUsMCxudWxsKTtFZSs9MSxq''@;'; put 'put ''ZSs9MSx5ZSs9MX10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKEksRWUpLEVlPjAmJihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsRWUpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKHFlLGEpKTtjb25z''@;'; put 'put ''dCBydD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihxZSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIscnQsRWUsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpFZSxzdGFydFBoeXNpY2FsSW5kZXg6cWV9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhp''@;'; put 'put ''cy5ob3QuY291bnRTb3VyY2VSb3dzKCk7aWYoaD0oditoKSV2LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsaCxmLmxlbmd0aCxmLGQpKXJldHVybiExO2NvbnN0IEk9Zi5sZW5ndGg7aWYodGhpcy5maWx0ZXJEYXRhKGgsSSxmKSxoPHRoaXMuaG90LmNvdW50Um93''@;'; put 'put ''cygpKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IGllPVBhKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxQYSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmIWllJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pfXJldHVybiBmLnNsaWNlKDApLnNvcnQoKGllLHVlKT0+dWUtaWUpLmZvckVhY2goaWU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJv''@;'; put 'put ''dyhpZSwxKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsaCxJLGYsZCksITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1sy''@;'; put 'put ''XTp2b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmhvdC5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1ucyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVtbnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJu''@;'; put 'put ''dW1iZXIiIT10eXBlb2YgbD8tYTpsO2g9KHRoaXMuaG90LmNvdW50Q29scygpK2gpJXRoaXMuaG90LmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLHY9Zi5zbGljZSgwKS5zb3J0KCh1ZSx5ZSk9PnllLXVlKTtpZighMT09PXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgsYSxmLGQpKXJldHVybiExO2xldCBJPSEwO2NvbnN0IEc9di5sZW5ndGgsaWU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgdWU9MDt1ZTxHO3VlKyspSSYmZlswXSE9PWZbdWVdLXVlJiYoST0hMSk7aWYoSSlmb3IobGV0IHVlPTAseWU9dGhpcy5o''@;'; put 'put ''b3QuY291bnRTb3VyY2VSb3dzKCk7dWU8eWU7dWUrKylpZVt1ZV0uc3BsaWNlKGZbMF0sYSksMD09PXVlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCB1ZT0wLHllPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3VlPHllO3VlKyspZm9yKGxl''@;'; put 'put ''dCBFZT0wO0VlPEc7RWUrKylpZVt1ZV0uc3BsaWNlKHZbRWVdLDEpLDA9PT11ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4odltFZV0sMSk7cmV0dXJuIGg8dGhpcy5ob3QuY291bnRDb2xzKCkmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpLCF0''@;'; put 'put ''aGlzLnRhYmxlTWV0YS5yb3dIZWFkZXJzJiYwPT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3Zl''@;'; put 'put ''Q29sIixoLGEsZixkKSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEk9bmV3IEFycmF5KE0+''@;'; put 'put ''Mz9NLTM6MCksRz0zO0c8TTtHKyspSVtHLTNdPWFyZ3VtZW50c1tHXTtsJChJLHYpO2xldCBpZT0wO2Zvcig7aWU8ZDspSS5wdXNoKG51bGwpLGllKz0xO3JldHVybiBwMmUoSSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYSxsLEksbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGlj''@;'; put 'put ''ZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxJPW5ldyBBcnJheShNPjM/TS0zOjApLEc9MztHPE07RysrKUlbRy0zXT1hcmd1bWVudHNbR107''@;'; put 'put ''bCQoSSx2KTtsZXQgaWU9MDtmb3IoO2llPGQ7KUkucHVzaChudWxsKSxpZSs9MTtyZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkobCxhLFtJXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''RGF0YVNwbGljZSIsbCxhLGQpKXtjb25zdCBmPVsuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UoMCxsKSwuLi5kLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaCh2PT50aGlzLmRhdGFTb3VyY2UucHVzaCh2KSl9fWZpbHRlckRh''@;'; put 'put ''dGEobCxhLGQpe2xldCBoPXRoaXMuaG90LnJ1bkhvb2tzKCJmaWx0ZXJEYXRhIixsLGEsZCk7ITE9PT1BcnJheS5pc0FycmF5KGgpJiYoaD10aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChmLHYpPT4tMT09PWQuaW5kZXhPZih2KSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90''@;'; put 'put ''b3R5cGUucHVzaC5hcHBseSh0aGlzLmRhdGFTb3VyY2UsaCl9Z2V0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtj''@;'; put 'put ''b25zdHtkYXRhRG90Tm90YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsO2lmKGgmJmguaGFzT3duUHJvcGVydHkmJlR1KGgsYSkpTT1oW2FdO2Vsc2UgaWYodiYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IEk9aDtpZighSSlyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBHPWEuc3BsaXQoIi4iKTtmb3IobGV0IGllPTAsdWU9Ry5sZW5ndGg7aWU8dWU7aWUrKylpZihJPUlbR1tpZV1dLHR5cGVvZiBJPiJ1IilyZXR1cm4gbnVsbDtNPUl9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoTT1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQr''@;'; put 'put ''MSlbMF0pKTtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlEYXRhIikpe2NvbnN0IEk9RmQoTSk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5wcm9wVG9Db2woYSksSSwiZ2V0IiksSS5pc1RvdWNoZWQoKSYmKE09SS52YWx1ZSl9cmV0dXJuIE19Z2V0Q29weWFibGUo''@;'; put 'put ''bCxhKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtsZXQgZj1kLHY9dGhpcy5kYXRhU291cmNlW2hdO2NvbnN0IE09dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKHY9aXNOYU4oTSk/TTp2LHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgRz1GZChmKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsaCx0aGlzLnByb3BUb0NvbChhKSxHLCJzZXQiKSxHLmlzVG91''@;'; put 'put ''Y2hlZCgpJiYoZj1HLnZhbHVlKX1jb25zdHtkYXRhRG90Tm90YXRpb246SX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZih2JiZ2Lmhhc093blByb3BlcnR5JiZUdSh2LGEpKXZbYV09ZjtlbHNlIGlmKEkmJiJzdHJpbmciPT10eXBlb2YgYSYmYS5pbmRleE9mKCIuIik+LTEpe2xldCB1ZSxH''@;'; put 'put ''PXYsaWU9MDtjb25zdCB5ZT1hLnNwbGl0KCIuIik7Zm9yKGllPTAsdWU9eWUubGVuZ3RoLTE7aWU8dWU7aWUrKyl7aWYoIl9fcHJvdG9fXyI9PT15ZVtpZV18fCJjb25zdHJ1Y3RvciI9PT15ZVtpZV18fCJwcm90b3R5cGUiPT09eWVbaWVdKXJldHVybjt0eXBlb2YgR1t5ZVtpZV1dPiJ1IiYm''@;'; put 'put ''KEdbeWVbaWVdXT17fSksRz1HW3llW2llXV19R1t5ZVtpZV1dPWZ9ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlhKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik7ZWxzZXtpZigiX19wcm90b19fIj09PWF8fCJjb25zdHJ1Y3RvciI9PT1hfHwicHJvdG90eXBlIj09PWEp''@;'; put 'put ''cmV0dXJuO3ZbYV09Zn19dmlzdWFsUm93c1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpLGg9W107bGV0IE0sZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpLGgucHVzaChNKSx2LT0xLGYrPTE7cmV0''@;'; put 'put ''dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLGg9W107bGV0IGY9KGQrbCklZCx2PWE7Zm9yKDtmPGQmJnY7KXtjb25zdCBNPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKE0pLHYtPTEsZis9MX1yZXR1cm4g''@;'; put 'put ''aH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bCsrKWZvcihsZXQgYT0wO2E8dGhpcy5ob3QuY291bnRDb2xzKCk7YSsrKXRoaXMuc2V0KGwsdGhpcy5jb2xUb1Byb3AoYSksIiIpfWdldExlbmd0aCgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEubWF4''@;'; put 'put ''Um93cztsZXQgYTthPWw8MHx8MD09PWw/MDpsfHwxLzA7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhp''@;'; put 'put ''cy5ob3QuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhpcy5ob3QuY291bnRDb2xzKCktMSwwKX07cmV0dXJuIGwucm93LWEucm93IT0wfHx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRD''@;'; put 'put ''YWNoZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdlKGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLHYsTTtjb25zdCBJPXRoaXMudGFibGVNZXRhLm1heFJvd3MsRz10aGlzLnRhYmxlTWV0YS5tYXhDb2xzO2lmKDA9PT1JfHwwPT09RylyZXR1cm5b''@;'; put 'put ''XTtjb25zdCBpZT1kPT09VF8uREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LHVlPU1hdGgubWluKE1hdGgubWF4KEktMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLHllPU1hdGgubWluKE1hdGgubWF4KEctMSwwKSxNYXRoLm1heChs''@;'; put 'put ''LmNvbCxhLmNvbCkpO2ZvcihmPU1hdGgubWluKGwucm93LGEucm93KTtmPD11ZTtmKyspe009W107Y29uc3QgRWU9Zj49MD90aGlzLmhvdC50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKHY9TWF0aC5taW4obC5jb2wsYS5jb2wpO3Y8PXllJiZudWxsIT09RWU7disrKU0ucHVzaChpZS5jYWxsKHRo''@;'; put 'put ''aXMsZix0aGlzLmNvbFRvUHJvcCh2KSkpO251bGwhPT1FZSYmaC5wdXNoKE0pfXJldHVybiBofWdldFRleHQobCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5nZShsLGEsVF8uREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxhKXtyZXR1cm4gclQodGhpcy5nZXRSYW5n''@;'; put 'put ''ZShsLGEsVF8uREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmhvdD1udWxsLHRoaXMubWV0YU1hbmFnZXI9bnVsbCx0aGlzLmRhdGFTb3VyY2U9bnVsbCx0aGlzLmR1Y2tTY2hlbWE9bnVsbCx0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''cHJvcFRvQ29sQ2FjaGUuY2xlYXIoKSx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMH19Y29uc3QgTHJ0PVRfO2Z1bmN0aW9uIGdwZShjLGwsYSxkKXtjb25zdHtob3RJbnN0YW5jZTpoLGRhdGFNYXA6ZixkYXRhU291cmNlOnYsaW50ZXJuYWxTb3VyY2U6TSxzb3VyY2U6SSxtZXRhTWFuYWdl''@;'; put 'put ''cjpHLGZpcnN0UnVuOmllfT1kLHVlPXAxKE0pLHllPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkoeWUuZGF0YVNjaGVtYSk/ImFycmF5IjptbCh5ZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVzdHJveSgpLGM9aC5ydW5Ib29rcyhgYmVm''@;'; put 'put ''b3JlJHt1ZX1gLGMsaWUsSSk7Y29uc3QgRWU9bmV3IExydChoLGMsRyk7aWYobChFZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke019IG9ubHkgYWNjZXB0cyBhcnJheSBv''@;'; put 'put ''ZiBvYmplY3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30gZ2l2ZW4pYCk7e2NvbnN0IGplPUVlLmdldFNjaGVtYSgpO2M9W107bGV0IHFlLHJ0PTAscHQ9MDtmb3IocnQ9MCxwdD15ZS5zdGFydFJvd3M7cnQ8cHQ7cnQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5j''@;'; put 'put ''dGlvbiIhPT1oLmRhdGFUeXBlfHwheWUuZGF0YVNjaGVtYSlpZigiYXJyYXkiPT09aC5kYXRhVHlwZSlxZT1nMShqZVswXSksYy5wdXNoKHFlKTtlbHNle3FlPVtdO2ZvcihsZXQgZHQ9MCxKdD15ZS5zdGFydENvbHM7ZHQ8SnQ7ZHQrKylxZS5wdXNoKG51bGwpO2MucHVzaChxZSl9ZWxzZSBx''@;'; put 'put ''ZT1nMShqZSksYy5wdXNoKHFlKX19QXJyYXkuaXNBcnJheShjWzBdKSYmKGguZGF0YVR5cGU9ImFycmF5IikseWUuZGF0YT1jLEVlLmRhdGFTb3VyY2U9Yyx2LmRhdGE9Yyx2LmRhdGFUeXBlPWguZGF0YVR5cGUsdi5jb2xUb1Byb3A9RWUuY29sVG9Qcm9wLmJpbmQoRWUpLHYucHJvcFRvQ29s''@;'; put 'put ''PUVlLnByb3BUb0NvbC5iaW5kKEVlKSx2LmNvdW50Q2FjaGVkQ29sdW1ucz1FZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChFZSksYShFZSksaC5ydW5Ib29rcyhgYWZ0ZXIke3VlfWAsYyxpZSxJKSxpZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLE0pLGgucmVuZGVyKCkpLGgu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8oaC5yb290RWxlbWVudCxbVDJlKC0xKSxSTyhoLmNvdW50Q29scygpKyhoLnZpZXc/aC5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBBXyhjKXtFcChjKSYmYy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToi''@;'; put 'put ''bmVhcmVzdCJ9KX1mdW5jdGlvbiBGUChjKXtjb25zdHtzZWxlY3Rpb246bCx2aWV3OmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1sLmdldFNlbGVjdGlvblNvdXJjZSgpLGY9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLHY9YS5nZXRMYXN0RnVsbHlWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCksTT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLEk9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsRz1NPD1mLGllPUk+PXYsdWU9YS5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLHllPWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpLEVlPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5y''@;'; put 'put ''b3csamU9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3cscWU9RWU8PXVlLHJ0PWplPj15ZTtyZXR1cm57Z2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQ6cHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9wdC5jb2w6RyYmaWU/ZC5oaWdobGlnaHQuY29sOkc/TTppZT9JOnB0LmNvbCxnZXRD''@;'; put 'put ''b21wdXRlZFJvd1RhcmdldDpwdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP3B0LnJvdzpxZSYmcnQ/ZC5oaWdobGlnaHQucm93OnFlP0VlOnJ0P2plOnB0LnJvd319Y29uc3QgbXBlPSJncmlkRGVmYXVsdCIsV209ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2Z1bmN0aW9u''@;'; put 'put ''IHZwZShjKXtjb25zdCBhPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGEudHlwZT0idGV4dCIsYS5uYW1lPSJfX2h0Rm9jdXNDYXRjaGVyIixhLmNsYXNzTGlzdC5hZGQoImh0Rm9jdXNDYXRjaGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhh''@;'; put 'put ''LFttRSgiRm9jdXMgY2F0Y2hlciIpXSksYX1mdW5jdGlvbiBFWChjKXtjb25zdHtyb3dJbmRleE1hcHBlcjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse25hdmlnYWJsZUhlYWRlcnM6ZH09Yy5nZXRTZXR0aW5ncygpO2xldCBoPWQmJmMuY291bnRDb2xIZWFkZXJzKCk+MD8tYy5jb3VudENv''@;'; put 'put ''bEhlYWRlcnMoKTowLGY9ZCYmYy5jb3VudFJvd0hlYWRlcnMoKT4wPy1jLmNvdW50Um93SGVhZGVycygpOjA7cmV0dXJuIDA9PT1oJiYoaD1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLDA9PT1mJiYoZj1hLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLG51bGw9''@;'; put 'put ''PT1ofHxudWxsPT09Zj9udWxsOmMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1mdW5jdGlvbiBUWChjKXt2YXIgbCxhO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09Yyx7bmF2aWdhYmxlSGVhZGVyczpmfT1jLmdldFNldHRpbmdzKCk7bGV0IHY9ZC5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTEsTT1oLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMTtpZih2PDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDt2PS0xfWlmKE08MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxs''@;'; put 'put ''O009LTF9cmV0dXJuIGMuX2NyZWF0ZUNlbGxDb29yZHMobnVsbCE9PShsPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KSkmJnZvaWQgMCE9PWw/bDp2LG51bGwhPT0oYT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSkpJiZ2b2lkIDAhPT1hP2E6TSl9Y29uc3QgeXBl''@;'; put 'put ''PW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNlIl0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRpYXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVk''@;'; put 'put ''aWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1ldXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5IiwiKiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJh''@;'; put 'put ''Y3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFycm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksSFA9Yz0+Yy5tYXAobD0+e2NvbnN0IGE9bC50b0xvd2VyQ2FzZSgpO3JldHVybiB5cGUuaGFzKGEpP3lwZS5nZXQoYSk6YX0p''@;'; put 'put ''LnNvcnQoKS5qb2luKCIrIiksYnBlPW5ldyBNYXAoW1s5NiwibnVtcGFkMCJdLFs5NywibnVtcGFkMSJdLFs5OCwibnVtcGFkMiJdLFs5OSwibnVtcGFkMyJdLFsxMDAsIm51bXBhZDQiXSxbMTAxLCJudW1wYWQ1Il0sWzEwMiwibnVtcGFkNiJdLFsxMDMsIm51bXBhZDciXSxbMTA0LCJudW1w''@;'; put 'put ''YWQ4Il0sWzEwNSwibnVtcGFkOSJdLFsxMDYsIm11bHRpcGx5Il0sWzEwNywiYWRkIl0sWzEwOCwiZGVjaW1hbCJdLFsxMDksInN1YnRyYWN0Il0sWzExMCwiZGVjaW1hbCJdLFsxMTEsImRpdmlkZSJdLFsxMTIsImYxIl0sWzExMywiZjIiXSxbMTE0LCJmMyJdLFsxMTUsImY0Il0sWzExNiwi''@;'; put 'put ''ZjUiXSxbMTE3LCJmNiJdLFsxMTgsImY3Il0sWzExOSwiZjgiXSxbMTIwLCJmOSJdLFsxMjEsImYxMCJdLFsxMjIsImYxMSJdLFsxMjMsImYxMiJdLFsxODYsInNlbWljb2xvbiJdLFsxODcsImVxdWFsIl0sWzE4OCwiY29tbWEiXSxbMTg5LCJtaW51cyJdLFsxOTAsInBlcmlvZCJdLFsxOTEs''@;'; put 'put ''InNsYXNoIl0sWzE5MiwiYmFja3F1b3RlIl0sWzIxOSwiYnJhY2tldGxlZnQiXSxbMjIwLCJiYWNrc2xhc2giXSxbMjIxLCJicmFja2V0cmlnaHQiXSxbMjIyLCJxdW90ZSJdXSksQVg9Yz0+e2xldHt3aGljaDpsLGtleTphfT1jO2lmKGJwZS5oYXMobCkpcmV0dXJuIGJwZS5nZXQobCk7Y29u''@;'; put 'put ''c3QgZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpLnRvTG93ZXJDYXNlKCk7cmV0dXJuL15bYS16MC05XSQvLnRlc3QoZCk/ZDphLnRvTG93ZXJDYXNlKCl9LF9wZT1TeW1ib2woInNob3J0Y3V0LWNvbnRleHQiKTtmdW5jdGlvbiB3cGUoYyl7cmV0dXJuIHFvKGMpJiZjLl9fa2luZE9mPT09X3Bl''@;'; put 'put ''fWNvbnN0ICRydD1bIm1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSxpVD1mdW5jdGlvbiBHcnQoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxsKCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+''@;'; put 'put ''Yy5oYXMobCl9fSgpLGFUPVtdO2xldCBOUD0wO2NvbnN0IHFydD1jPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1KTyh7ZXJyb3JJZEV4aXN0czpqZT0+YFRoZSAiJHtqZX0iIGNvbnRleHQgbmFtZSBp''@;'; put 'put ''cyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCB2PSJncmlkIjtjb25zdCBJPSgpPT52LEc9amU9PmYuZ2V0SXRlbShqZSk7bGV0IHVlPSExO2NvbnN0IHllPWZ1bmN0aW9uKGplLHFlKXtsZXQgcnQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz''@;'; put 'put ''WzJdOkkoKTtjb25zdCBwdD13cGUocnQpP3J0OkcocnQpO2xldCBkdD0hMTtpZighcHQuaGFzU2hvcnRjdXQocWUpKXJldHVybiBkdDtjb25zdCBKdD1wdC5nZXRTaG9ydGN1dHMocWUpO2ZvcihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKyl7Y29uc3R7Y2FsbGJhY2s6Q24scnVuT25seUlm''@;'; put 'put ''OnRuLHByZXZlbnREZWZhdWx0Ok1uLHN0b3BQcm9wYWdhdGlvbjpDcixjYXB0dXJlQ3RybDpHcixmb3J3YXJkVG9Db250ZXh0Om1yfT1KdFt2bl07aWYoITA9PT10bihqZSkpe2lmKHVlPUdyLGR0PSExPT09Q24oamUscWUpLHVlPSExLE1uJiZqZS5wcmV2ZW50RGVmYXVsdCgpLENyJiYoQjIo''@;'; put 'put ''amUpLGplLnN0b3BQcm9wYWdhdGlvbigpKSxkdClicmVhazttciYmeWUoamUscWUsbXIpfX1yZXR1cm4gZHR9LEVlPWZ1bmN0aW9uIEtydChjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PiRydC5pbmNsdWRlcyhFZSksdj1mdW5jdGlvbihFZSl7bGV0IGplPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgcWU9W107cmV0dXJuIEVlLmFsdEtleSYmcWUucHVzaCgiYWx0IiksamUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9xZS5wdXNoKCJjb250cm9sL21ldGEiKTooRWUuY3RybEtleSYmcWUucHVzaCgiY29udHJvbCIpLEVl''@;'; put 'put ''Lm1ldGFLZXkmJnFlLnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJnFlLnB1c2goInNoaWZ0IikscWV9LE09RWU9PntpZighMT09PWwoRWUpfHwhMT09PWEoRWUpfHwyMjk9PT1FZS5rZXlDb2RlfHwic3RyaW5nIiE9dHlwZW9mIEVlLmtleXx8Rm0oRWUpKXJldHVybjtjb25zdCBxZT1BWChF''@;'; put 'put ''ZSk7bGV0IHJ0PVtdO2YocWUpfHwocnQ9dihFZSkpO2NvbnN0IHB0PVtxZV0uY29uY2F0KHJ0KTshaChFZSxwdCkmJih6TygpJiZydC5pbmNsdWRlcygibWV0YSIpfHwhek8oKSYmcnQuaW5jbHVkZXMoImNvbnRyb2wiKSkmJmgoRWUsW3FlXS5jb25jYXQodihFZSwhMCkpKSxkKEVlKX0sST1F''@;'; put 'put ''ZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBqZT1BWChFZSk7ZihqZSkmJmlULnByZXNzKGplKX19LEc9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgamU9QVgoRWUpO2YoamUpJiZpVC5yZWxlYXNlKGplKX19LGllPSgpPT57aVQucmVsZWFzZUFs''@;'; put 'put ''bCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoTlArPTE7RWU7KTE9PT1OUCYmKEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixJKSxhVC5wdXNoKHtldmVudDoia2V5ZG93biIsbGlzdGVuZXI6SX0pLEVlLmRvY3VtZW50LmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsRyksYVQucHVzaCh7ZXZlbnQ6ImtleXVwIixsaXN0ZW5lcjpHfSkpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPUI3KEVlKX0sdW5tb3VudDooKT0+e2xldCBFZT1jO2ZvcihOUC09MTtFZTspe2lmKDA9PT1OUCl7Zm9yKGxldCBqZT0wO2plPGFULmxlbmd0aDtqZSsrKXtjb25zdHtldmVudDpxZSxsaXN0ZW5lcjpydH09YVRbamVdO0VlLmRvY3VtZW50''@;'; put 'put ''LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHFlLHJ0KX1hVC5sZW5ndGg9MH1FZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo''@;'; put 'put ''ImJsdXIiLGllKSxFZT1CNyhFZSl9fSxpc1ByZXNzZWQ6RWU9PmlULmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5pVC5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLHllKTtyZXR1cm4gRWUubW91bnQoKSx7YWRkQ29udGV4dDpqZT0+e2NvbnN0IHFlPShjPT57Y29uc3QgbD1K''@;'; put 'put ''Tyh7ZXJyb3JJZEV4aXN0czpJPT5gVGhlICIke0l9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6SSxjYWxsYmFjazpHLGdyb3VwOmllLHJ1bk9ubHlJZjp1ZT0oKCk9PiEwKSxjYXB0dXJlQ3Ry''@;'; put 'put ''bDp5ZT0hMSxwcmV2ZW50RGVmYXVsdDpFZT0hMCxzdG9wUHJvcGFnYXRpb246amU9ITEscmVsYXRpdmVUb0dyb3VwOnFlLHBvc2l0aW9uOnJ0LGZvcndhcmRUb0NvbnRleHQ6cHR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihf''@;'; put 'put ''YyhpZSkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIik7aWYoITE9PT1tbChHKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0Fy''@;'; put 'put ''cmF5KEkpKXRocm93IG5ldyBFcnJvcihnbGBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv''@;'; put 'put ''ZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgZHQ9e2NhbGxiYWNrOkcsZ3JvdXA6aWUscnVuT25seUlmOnVlLGNhcHR1cmVDdHJsOnllLHByZXZlbnREZWZhdWx0OkVlLHN0b3BQcm9wYWdhdGlvbjpqZX07UGEocWUpJiYoZHQucmVsYXRp''@;'; put 'put ''dmVUb0dyb3VwPXFlLGR0LnBvc2l0aW9uPXJ0KSx3cGUocHQpJiYoZHQuZm9yd2FyZFRvQ29udGV4dD1wdCksSS5mb3JFYWNoKEp0PT57Y29uc3Qgdm49SFAoSnQpO2lmKGwuaGFzSXRlbSh2bikpe2NvbnN0IHRuPWwuZ2V0SXRlbSh2bik7bGV0IE1uPXRuLmZpbmRJbmRleChDcj0+Q3IuZ3Jv''@;'; put 'put ''dXA9PT1xZSk7LTEhPT1Nbj8iYmVmb3JlIj09PXJ0P01uLT0xOk1uKz0xOk1uPXRuLmxlbmd0aCx0bi5zcGxpY2UoTW4sMCxkdCl9ZWxzZSBsLmFkZEl0ZW0odm4sW2R0XSl9KX0saD1JPT57Y29uc3QgRz1IUChJKTtsLnJlbW92ZUl0ZW0oRyl9O3JldHVybntfX2tpbmRPZjpfcGUsYWRkU2hv''@;'; put 'put ''cnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oSSl7bGV0IEc9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0kuZm9yRWFjaChpZT0+e1hvKEcsKHVlLHllKT0+eyExPT09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKGllLHllKSYmKGllW3llXT1HW3llXSl9KSxhKGllKX0pfSxnZXRTaG9ydGN1dHM6ST0+e2NvbnN0IEc9SFAoSSksaWU9bC5nZXRJdGVtKEcpO3JldHVybiBQYShpZSk/aWUuc2xpY2UoKTpbXX0saGFzU2hvcnRjdXQ6ST0+e2NvbnN0IEc9SFAoSSk7cmV0dXJuIGwuaGFzSXRlbShHKX0s''@;'; put 'put ''cmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpJPT57bC5nZXRJdGVtcygpLmZvckVhY2goaWU9PntsZXRbdWUseWVdPWllO2NvbnN0IEVlPXllLmZpbHRlcihqZT0+amUuZ3JvdXAhPT1JKTswPT09RWUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkodWUp''@;'; put 'put ''KTooeWUubGVuZ3RoPTAseWUucHVzaCguLi5FZSkpfSl9fX0pKGplKTtyZXR1cm4gZi5hZGRJdGVtKGplLHFlKSxxZX0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6SSxnZXRDb250ZXh0Okcsc2V0QWN0aXZlQ29udGV4dE5hbWU6amU9PntpZighZi5oYXNJdGVtKGplKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Z2xgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRlIHRoZSAiJHtqZX0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAgICAgICAgdGhhdCBkb2VzIG5vdCBleGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO3Y9''@;'; put 'put ''amV9LGlzQ3RybFByZXNzZWQ6KCk9PiF1ZSYmKEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5FZS51bm1vdW50KCl9fSxYcnQ9e25hbWU6ImVkaXRv''@;'; put 'put ''ckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2soYyl7Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKX19LENwZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhp''@;'; put 'put ''cy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtZbih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xl''@;'; put 'put ''YXJIb29rcygpe1hvKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtUcChDcGUsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qg''@;'; put 'put ''UXJ0PUNwZTtmdW5jdGlvbiBkMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZWl0KGMpe3ZhciBsPWZ1bmN0aW9uIHRpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgbHU9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJT''@;'; put 'put ''VEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KTtjbGFzcyBrX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe2QzKHRoaXMsImhvdCIs''@;'; put 'put ''dm9pZCAwKSxkMyh0aGlzLCJzdGF0ZSIsbHUuVklSR0lOKSxkMyh0aGlzLCJfb3BlbmVkIiwhMSksZDModGhpcywiX2Z1bGxFZGl0TW9kZSIsITEpLGQzKHRoaXMsIl9jbG9zZUNhbGxiYWNrIixudWxsKSxkMyh0aGlzLCJURCIsbnVsbCksZDModGhpcywicm93IixudWxsKSxkMyh0aGlzLCJj''@;'; put 'put ''b2wiLG51bGwpLGQzKHRoaXMsInByb3AiLG51bGwpLGQzKHRoaXMsIm9yaWdpbmFsVmFsdWUiLG51bGwpLGQzKHRoaXMsImNlbGxQcm9wZXJ0aWVzIixudWxsKSx0aGlzLmhvdD1sLHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9z''@;'; put 'put ''ZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmlt''@;'; put 'put ''cGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZix2KXt0aGlzLlREPWgsdGhpcy5y''@;'; put 'put ''b3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9dix0aGlzLnN0YXRlPXRoaXMuaXNPcGVuZWQoKT90aGlzLnN0YXRlOmx1LlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''e319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLHY7aWYoYSl7Y29uc3QgST10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtkPU1hdGgubWF4KE1hdGgubWluKElbMF0sSVsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbihJWzFdLElbM10pLDApLGY9TWF0aC5tYXgoSVswXSxJWzJdKSx2PU1h''@;'; put 'put ''dGgubWF4KElbMV0sSVszXSl9ZWxzZVtkLGgsZix2XT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtBcnJheS5pc0FycmF5KE0pJiYoW2QsaF09TSksdGhpcy5ob3QucG9w''@;'; put 'put ''dWxhdGVGcm9tQXJyYXkoZCxoLGwsZix2LCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PWx1LlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLHY9KCk9PntpZih0aGlzLnN0YXRlPWx1LkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IEk9InN0cmluZyI9PXR5cGVvZiBsP2w6bGModGhpcy5vcmlnaW5hbFZhbHVlKTt0''@;'; put 'put ''aGlzLnNldFZhbHVlKEkpfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfTt0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHYpLGQu''@;'; put 'put ''dmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpfHwodGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHYpLHYoKSl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgZj10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2Fs''@;'; put 'put ''bGJhY2s9dj0+e2YmJmYodiksZCh2KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRpbmcoKSl7aWYodGhpcy5zdGF0ZT09PWx1LlZJUkdJTilyZXR1cm4gdm9pZCB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KTtp''@;'; put 'put ''Zih0aGlzLnN0YXRlPT09bHUuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgZj9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChmfHwiIik6Zl1dOltbZl1dLHRoaXMuc3RhdGU9bHUuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RB''@;'; put 'put ''ZnRlclZhbGlkYXRlIix2PT57dGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Iodil9KToodGhpcy5zdGF0ZT1sdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19fWNhbmNlbENoYW5nZXMoKXt0aGlzLnN0YXRlPWx1LkZJTklTSEVELHRoaXMuZGlzY2Fy''@;'; put 'put ''ZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IobCl7dGhpcy5zdGF0ZT09PWx1LkZJTklTSEVEJiYoITE9PT1sJiYhMCE9PXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dJbnZhbGlkPyh0aGlzLmhvdC5zZWxlY3RDZWxsKHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmZvY3VzKCksdGhpcy5zdGF0ZT1s''@;'; put 'put ''dS5FRElUSU5HLHRoaXMuX2ZpcmVDYWxsYmFja3MoITEpKToodGhpcy5jbG9zZSgpLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5zdGF0ZT1sdS5WSVJHSU4sdGhpcy5fZmlyZUNhbGxiYWNrcyghMCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0''@;'; put 'put ''QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSkpfWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0TW9kZT0hMH1pc0luRnVsbEVkaXRNb2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZX1pc09wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RhdGU9PT1sdS5XQUlUSU5HfWdldEVkaXRlZENlbGxSZWN0KCl7dmFyIGw7Y29uc3QgYT10aGlzLmdldEVkaXRlZENlbGwoKTtpZighYSlyZXR1cm47Y29uc3R7d3RPdmVybGF5czpkLHd0Vmlld3BvcnQ6aH09dGhpcy5ob3Qudmlldy5fd3QsZj10aGlzLmhvdC5yb290V2luZG93''@;'; put 'put ''LHY9VTAoYSksTT1zdShhKSxJPVUwKHRoaXMuaG90LnJvb3RFbGVtZW50KSxHPXN1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxpZT1kLnRvcE92ZXJsYXkuaG9sZGVyLHVlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcix5ZT1pZSE9PWY/aWUuc2Nyb2xsVG9wOjAsRWU9dWUhPT1mP3VlLnNj''@;'; put 'put ''cm9sbExlZnQ6MCxqZT1mLmlubmVyV2lkdGgtSS5sZWZ0LUcse3d0VGFibGU6cWV9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QscnQ9cWUubmFtZSxwdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHJ0''@;'; put 'put ''KT95ZTowLGR0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMocnQpP0VlOjA7bGV0IHZuPXYudG9wLUkudG9wLSh2LnRvcD09PUkudG9wPzA6MSktcHQsQ249MDtDbj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC12LmxlZnQtTS1qZS0xK2R0OnYubGVmdC1JLmxlZnQt''@;'; put 'put ''MS1kdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocnQpJiYodm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkmJihDbis9TWF0aC5hYnMoZC5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgdG49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLE1uPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLENyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLG1yPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KHRuJiZNbjw9MHx8TW49PT1t''@;'; put 'put ''cikmJih2bis9MSksQ3I8PTAmJihDbis9MSk7Y29uc3QgR249aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGFpPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixfaT1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlv''@;'; put 'put ''bigpKSxPbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx6cj1mMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpO2xldCBKbj1hLm9mZnNldFRvcDtpZihbImlubGluZV9zdGFydCIsIm1hc3RlciJdLmluY2x1ZGVzKHJ0KSYmKEpuKz1Hbi1PbiksWyJib3R0b20iLCJib3R0b21faW5s''@;'; put 'put ''aW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSl7Y29uc3R7d3RWaWV3cG9ydDpIcix3dFRhYmxlOnFyfT1kLmJvdHRvbU92ZXJsYXkuY2xvbmU7Sm4rPUhyLmdldFdvcmtzcGFjZUhlaWdodCgpLXFyLmdldEhlaWdodCgpLXpyfWxldCBJcj1hLm9mZnNldExlZnQ7dGhpcy5ob3QuaXNS''@;'; put 'put ''dGwoKT8oSXI9SXI+PTA/cWUuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoSXIpLElyKz1haS1faS1NKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKHJ0KSYmKElyKz1haS1faSk7Y29uc3QgJHI9Zi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpLHdpPXRoaXMu''@;'; put 'put ''aG90LmlzUnRsKCk/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiLGVhPXBhcnNlSW50KCRyW3dpXSwxMCk+MD8wOjEsZmE9cGFyc2VJbnQoJHIuYm9yZGVyVG9wV2lkdGgsMTApPjA/MDoxLHZ0PXN1KGEpK2VhLE50PXh1KGEpK2ZhLEh0PUUkKGllKT96cjowLEhuPVQkKHVl''@;'; put 'put ''KT96cjowLHRyPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoSXIpLUh0K2VhO3JldHVybnt0b3A6dm4sc3RhcnQ6Q24saGVpZ2h0Ok50LG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChKbiktSG4rZmEs''@;'; put 'put ''dGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpLHdpZHRoOnZ0LG1heFdpZHRoOnRyfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Ns''@;'; put 'put ''b25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2Ui''@;'; put 'put ''dG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRD''@;'; put 'put ''ZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9''@;'; put 'put ''dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93''@;'; put 'put ''c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0''@;'; put 'put ''IiksYX19VGwoa18sUXJ0KTtjb25zdCByaXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1kLmdldEFjdGl2ZUVkaXRvcigpO2guaXNJbkZ1bGxFZGl0TW9kZSgpJiZoLnN0YXRlPT09''@;'; put 'put ''bHUuRURJVElOR3x8KGQuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpLGMuZ2V0U2VsZWN0ZWQoKSYmKGEuaW5jbHVkZXMoImFycm93ZG93biIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6YS5pbmNsdWRlcygiYXJyb3d1cCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0''@;'; put 'put ''KC0xLDApOmEuaW5jbHVkZXMoImFycm93bGVmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSk6YS5pbmNsdWRlcygiYXJyb3dyaWdodCIpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkp''@;'; put 'put ''KSxsLnByZXZlbnREZWZhdWx0KCkpfX0saWl0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhjLGwpe2NvbnN0IGE9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2EuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsLmN0cmxLZXl8fGwubWV0YUtleSksYS5tb3ZlU2Vs''@;'; put 'put ''ZWN0aW9uQWZ0ZXJFbnRlcihsKX19LGFpdD17bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhjKXtjb25zdCBsPWMuX2dldEVkaXRvck1hbmFnZXIoKTtsLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUoYy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0''@;'; put 'put ''cmxQcmVzc2VkKCkpLGwuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fSxvaXQ9e25hbWU6ImVkaXRvckZhc3RPcGVuIixjYWxsYmFjayhjLGwpe2NvbnN0e2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5pc0hlYWRlcigpfHxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkub3BlbkVk''@;'; put 'put ''aXRvcihudWxsLGwsITApfX0sc2l0PXtuYW1lOiJlZGl0b3JPcGVuIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpmfT1oO2lmKGMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWguaXNI''@;'; put 'put ''ZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wKXtjb25zdCB2PWMuZ2V0U2V0dGluZ3MoKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmVudGVyTW92ZXM/di5lbnRlck1vdmVzKGwpOnYuZW50ZXJNb3ZlczthLmluY2x1ZGVzKCJzaGlmdCIp''@;'; put 'put ''P2Muc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKC1NLnJvdywtTS5jb2wpOmMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKE0ucm93LE0uY29sKX1lbHNlIGYuaXNIZWFkZXIoKXx8KGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmc/ZC5jZWxsUHJvcGVydGllcy5yZWFkT25seT9k''@;'; put 'put ''Lm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpOmQub3BlbkVkaXRvcihudWxsLGwsITApOmQubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCksQjIobCkpfX0sY2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdo''@;'; put 'put ''bGlnaHQ6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJv''@;'; put 'put ''YXJkIiksbC50cmFuc2Zvcm1FbmQoMSwwKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSx1aXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWluKGQucm93K2MuY291bnRWaXNpYmxlUm93cygpLGMuY291bnRSb3dzKCktMSksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09ZC5yb3ct''@;'; put 'put ''Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEk9TWF0aC5taW4odi5yb3ctTSxjLmNvdW50Um93cygpLTEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkksdmVydGljYWxTbmFwOiJ0''@;'; put 'put ''b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxkaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVy''@;'; put 'put ''KCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0Vu''@;'; put 'put ''ZFNvdXJjZSgpKX19LGhpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpKX19LGZpdD17bmFt''@;'; put 'put ''ZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtoaWdobGlnaHQ6YSxmcm9tOmQsdG86aH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeVJvd0hlYWRl''@;'; put 'put ''cigpP2wuc2VsZWN0QWxsKCEwLCEwKTpjLnNlbGVjdENvbHVtbnMoZC5jb2wsaC5jb2wsYSksbC5tYXJrRW5kU291cmNlKCl9fSxwaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjph''@;'; put 'put ''fT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0x''@;'; put 'put ''LC0xKSxJPWguY2xvbmUoKTtJLnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEksdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxnaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86''@;'; put 'put ''Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpLE09aC5jbG9uZSgpO00u''@;'; put 'put ''Y29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoTSx2b2lkIDAsITEsZC5jbG9uZSgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csdikpLGwubWFya0VuZFNvdXJjZSgpfX19LG1pdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxl''@;'; put 'put ''Y3Rpb25Ub01vc3RJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYsMSksST1oLmNsb25lKCk7SS5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2Fy''@;'; put 'put ''ZCIpLGwuc2V0UmFuZ2VTdGFydChJLHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sdml0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2Nv''@;'; put 'put ''bnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pLEk9aC5jbG9uZSgpO0kuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoSSx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVk''@;'; put 'put ''QnlDb2x1bW5IZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LHlpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7''@;'; put 'put ''c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVh''@;'; put 'put ''cmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bMCwxXTpbYy5jb3VudENvbHMoKS0xLC0xXSksST1oLmNsb25lKCk7SS5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChJLHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNv''@;'; put 'put ''bHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sYml0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0''@;'; put 'put ''aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KDAsMSksST1oLmNsb25lKCk7SS5yb3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChJLHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhNLGYuY29sKSksbC5tYXJrRW5kU291cmNlKCl9fX0sX2l0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/bC5zZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Um93cyhkLnJvdyxoLnJvdyxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LHdpdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCIsY2Fs''@;'; put 'put ''bGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRC''@;'; put 'put ''eVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybUVuZCgtMSwwKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxDaXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxy''@;'; put 'put ''b3dJbmRleE1hcHBlcjphfT1jLHt0bzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1NYXRoLm1heChkLnJvdy1jLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxJPU1hdGgubWF4KHYucm93LU0sMCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNlKCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6SSx2ZXJ0aWNhbFNu''@;'; put 'put ''YXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LE1pdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMSwwKSxsLm1hcmtFbmRTb3VyY2Uo''@;'; put 'put ''KX19LHhpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8xOmYsaD09PWMuY291bnRSb3dzKCktMT9mPTE6aCtmPmMuY291bnRSb3dzKCkmJihmPWMuY291bnRSb3dzKCktaC0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFu''@;'; put 'put ''c2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNvdXJjZSgpLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LEVpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7''@;'; put 'put ''c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hl''@;'; put 'put ''YWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cygtZi5yb3csLWYuY29sKTphLnRyYW5zZm9ybVN0YXJ0KC1mLnJvdywtZi5jb2wpLGEubWFya0VuZFNvdXJjZSgpfX0sVGl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVj''@;'; put 'put ''dGlvbklubGluZVN0YXJ0IixjYWxsYmFjayhjLGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ImZ1bmN0aW9uIj09dHlwZW9mIGQudGFiTW92ZXM/ZC50YWJNb3ZlcyhsKTpkLnRhYk1vdmVzO2EubWFya1NvdXJj''@;'; put 'put ''ZSgia2V5Ym9hcmQiKSxhLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJhbnNmb3JtRm9jdXMoZi5yb3csZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoZi5yb3csZi5jb2wpLGEubWFya0VuZFNv''@;'; put 'put ''dXJjZSgpfX0sQWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkxlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9''@;'; put 'put ''fSxraXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uUmlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCl9fSxEaXQ9e25h''@;'; put 'put ''bWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3Vu''@;'; put 'put ''dFJvd3MoKS0xLC0xKTtudWxsPT09ZCYmKGQ9LTEpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpfX0sSWl0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhN''@;'; put 'put ''YXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLWgtMSwtMSksdj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50''@;'; put 'put ''Q29scygpLTEsLTEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFJpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3Nl''@;'; put 'put ''bGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291''@;'; put 'put ''bnRDb2xzKCktMSwtMSkpKSxsLm1hcmtFbmRTb3VyY2UoKX19LExpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5m''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydCwxMCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLGwu''@;'; put 'put ''bWFya0VuZFNvdXJjZSgpfX0sT2l0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMsZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdztsZXQgaD1hLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LTE6LWMuY291bnRSb3dIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LFBpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGln''@;'; put 'put ''aHQ7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy1jLmNvdW50Um93SGVhZGVycygpOi0xKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0''@;'; put 'put ''KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKSksbC5tYXJrRW5kU291cmNlKCl9fSxGaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7Y29sOmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0''@;'; put 'put ''IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtudWxsPT09ZCYmKGQ9LWMuY291bnRDb2xIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGEpKSxsLm1hcmtFbmRTb3Vy''@;'; put 'put ''Y2UoKX19LEhpdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1Rv''@;'; put 'put ''cCwxMCksZj1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLHY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwxKSxNPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYsMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChj''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKHYsTSkpLGwubWFya0VuZFNvdXJjZSgpfX0sTml0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoLTEsMCksbC5tYXJrRW5k''@;'; put 'put ''U291cmNlKCl9fSxWaXQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtuYXZpZ2FibGVIZWFkZXJzOmF9PWMuZ2V0U2V0dGluZ3MoKSxkPWE/Yy5jb3VudENvbEhlYWRlcnMoKTowLHtyb3c6aH09Yy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9MD09PWY/LTE6LWYsaD09PS1kP2Y9LTE6aCtmPGQmJihmPS0oaCtkKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3Vy''@;'; put 'put ''Y2UoKSxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSxqaXQ9e25hbWU6ImVtcHR5U2VsZWN0ZWRDZWxscyIsY2FsbGJhY2soYyl7Yy5lbXB0eVNlbGVjdGVkQ2VsbHMoKSxjLl9nZXRFZGl0b3JNYW5hZ2VyKCku''@;'; put 'put ''cHJlcGFyZUVkaXRvcigpfX0seml0PXtuYW1lOiJzY3JvbGxUb0ZvY3VzZWRDZWxsIixjYWxsYmFjayhjKXtjb25zdHtoaWdobGlnaHQ6bH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLTEsZD1jLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCktMSxoPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpKzEsZj1jLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSsxLHY9Yy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLE09Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpO2lmKCFjLl9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLmluY2x1ZGVz''@;'; put 'put ''KGwpJiYobC5yb3c+PTB8fGwuY29sPj0wKSl7Y29uc3QgRz17fTtpZihsLmNvbD49MCl7Y29uc3QgaWU9TWF0aC5mbG9vcihjLmNvdW50VmlzaWJsZUNvbHMoKS8yKTtHLmNvbD1NYXRoLm1heChsLmNvbC1pZSwwKX1pZihsLnJvdz49MCl7Y29uc3QgaWU9TWF0aC5mbG9vcihjLmNvdW50Vmlz''@;'; put 'put ''aWJsZVJvd3MoKS8yKTtHLnJvdz1NYXRoLm1heChsLnJvdy1pZSwwKX1jLnNjcm9sbFZpZXdwb3J0VG8oey4uLkcsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxVaXQ9e25hbWU6InNlbGVjdEFsbENlbGxzIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9u''@;'; put 'put ''Omx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pLGwubWFya0VuZFNvdXJjZSgpfX0sWml0PXtuYW1lOiJzZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09''@;'; put 'put ''YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfSksbC5tYXJrRW5kU291cmNlKCl9fSxXaXQ9e25hbWU6InBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEiLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCkse3JvdzphLGNvbDpkfT1sW2wubGVuZ3RoLTFdLmhpZ2hsaWdodC5ub3JtYWxpemUoKSxoPWMuZ2V0RGF0YUF0Q2VsbChhLGQpLGY9bmV3IE1hcDtmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKylsW3ZdLmZvckFsbCgoTSxJKT0+e2lmKE0+PTAmJkk+PTAmJihNIT09YXx8SSE9''@;'; put 'put ''PWQpKXtjb25zdHtyZWFkT25seTpHfT1jLmdldENlbGxNZXRhKE0sSSk7R3x8Zi5zZXQoYCR7TX14JHtJfWAsW00sSSxoXSl9fSk7Yy5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oZi52YWx1ZXMoKSkpfX0sWWl0PVsuLi5mdW5jdGlvbiBsaXQoKXtyZXR1cm5bWHJ0LHJpdCxpaXQsYWl0LG9p''@;'; put 'put ''dCxzaXRdfSgpLC4uLmZ1bmN0aW9uIFNpdCgpe3JldHVybltjaXQsdWl0LGRpdCxoaXQsZml0LHBpdCxnaXQsbWl0LHZpdCx5aXQsYml0LF9pdCx3aXQsQ2l0XX0oKSwuLi5mdW5jdGlvbiBCaXQoKXtyZXR1cm5bTWl0LHhpdCxFaXQsVGl0LEFpdCxraXQsRGl0LElpdCxSaXQsTGl0LE9pdCxQ''@;'; put 'put ''aXQsRml0LEhpdCxOaXQsVml0XX0oKSxqaXQseml0LFVpdCxaaXQsV2l0XTtmdW5jdGlvbiBTcGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gWWl0LmZvckVhY2goYT0+e2xldHtuYW1lOmQsY2FsbGJhY2s6aH09YTtsW2RdPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1u''@;'; put 'put ''ZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGgoYywuLi52KX19KSxsfWZ1bmN0aW9uIEdpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksYT1TcGUoYyksZD17Z3JvdXA6V219O2wuYWRkU2hvcnRj''@;'; put 'put ''dXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhcHR1cmVD''@;'; put 'put ''dHJsOiEwLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siVGFiIl0sWyJUYWIiLCJTaGlmdCJdLFsiUGFnZURvd24iXSxbIlBhZ2VVcCJdXSxmb3J3YXJkVG9Db250ZXh0OmMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi''@;'; put 'put ''Z3JpZCIpLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZShoLGYpfSx7a2V5czpbWyJBcnJvd0Rvd24iXSxbIkFycm93VXAiXSxbIkFycm93TGVmdCJdLFsiQXJyb3dSaWdodCJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNh''@;'; put 'put ''dmVCeUFycm93S2V5cyhoLGYpfSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+YS5lZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmcoKX1dLGQpfWZ1bmN0aW9uICRpdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29u''@;'; put 'put ''dGV4dCgiZ3JpZCIpLGE9U3BlKGMpLGQ9e3J1bk9ubHlJZjooKT0+e2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6aH09Yy5nZXRTZXR0aW5ncygpO3JldHVybiBQYShjLmdldFNlbGVjdGVkKCkpJiYoaHx8IWgmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+''@;'; put 'put ''MCl9LGdyb3VwOm1wZX07bC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmg9PmEuZWRpdG9yRmFzdE9wZW4oaCl9LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvck9wZW4oaCxmKX0se2tleXM6W1siQmFja3Nw''@;'; put 'put ''YWNlIl0sWyJEZWxldGUiXV0sY2FsbGJhY2s6KCk9PmEuZW1wdHlTZWxlY3RlZENlbGxzKCl9XSx7Z3JvdXA6V20scnVuT25seUlmOigpPT5QYShjLmdldFNlbGVjdGVkKCkpfSksbC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PmEuc2Vs''@;'; put 'put ''ZWN0QWxsQ2VsbHMoKSxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4hKG51bGwhPT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpJiZ2b2lkIDAhPT1oJiZoLmhpZ2hsaWdodC5pc0hlYWRlcigpKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9Pnt9LHJ1''@;'; put 'put ''bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNIZWFkZXIoKX0scHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiU3BhY2UiXV0s''@;'; put 'put ''Y2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT5hLnBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEoKSxydW5Pbmx5SWY6KCk9Pnt2YXIgaCxmO3JldHVybiEobnVsbCE9PShoPWMuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpJiYobnVsbD09PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuZ2V0Q2VsbHNDb3VudCgpKT4xfX0se2tleXM6W1siQ29udHJvbCIsIlNwYWNlIl1d''@;'; put 'put ''LGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zKCl9LHtrZXlzOltbIlNoaWZ0IiwiU3BhY2UiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzKCl9LHtrZXlzOltbIkFy''@;'; put 'put ''cm93VXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlm''@;'; put 'put ''dCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCgpLHJ1bk9ubHlJZjooKT0+''@;'; put 'put ''IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRy''@;'; put 'put ''b2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3du''@;'; put 'put ''IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20oKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25U''@;'; put 'put ''b01vc3RMZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRl''@;'; put 'put ''bmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNl''@;'; put 'put ''bGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0''@;'; put 'put ''ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJIb21lIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5p''@;'; put 'put ''c01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKX0se2tleXM6W1siSG9tZSIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDoh''@;'; put 'put ''MCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0KCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5t''@;'; put 'put ''b3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGlu''@;'; put 'put ''ZUVuZCgpfSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3Zlcmxh''@;'; put 'put ''eXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQoKX0se2tleXM6W1siUGFnZVVwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQoKX0se2tl''@;'; put 'put ''eXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tl''@;'; put 'put ''eXM6W1siVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmg9PmEubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydChoKX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZChoKX0s''@;'; put 'put ''e2tleXM6W1siQ29udHJvbC9NZXRhIiwiQmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT5hLnNjcm9sbFRvRm9jdXNlZENlbGwoKX1dLGQpfWZ1bmN0aW9uIE1wZShjKXtjb25zdHtjbGFzc05hbWVzOmx9PU8yZShjLC9odC10aGVtZS1bYS16QS1aMC05Xy1dKy8pO3JldHVybiBsLnBvcCgpfWxl''@;'; put 'put ''dCBrWD1udWxsO2NvbnN0IERYPW5ldyBNYXA7ZnVuY3Rpb24geHBlKGMsbCl7dmFyIGEsZD10aGlzO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sZj10aGlzO2NvbnN0IHY9bmV3IGoyKGYpO2xldCBNLEksRyxpZSx1ZSx5ZSxF''@;'; put 'put ''ZT0hMDsoZnVuY3Rpb24geXR0KGMpe3JldHVybiBjPT09REt9KShoKSYmZnVuY3Rpb24gdnR0KGMpe0MzZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdEVsZW1lbnQ9Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50''@;'; put 'put ''LmRlZmF1bHRWaWV3LHRoaXMuaXNEZXN0cm95ZWQ9ITEsdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAsdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgamU9bnVsbCE9PShhPWw/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIscWU9WyJy''@;'; put 'put ''dGwiLCJsdHIiXS5pbmNsdWRlcyhqZSk/amU6dGhpcy5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLHFlKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1x''@;'; put 'put ''ZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFmLmlzUnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuaXNMdHIoKT8xOi0xfSxsLmxhbmd1YWdlPWZ1bmN0aW9uIGdudChjKXtsZXQgbD1IM2UoYyk7cmV0dXJuIGdYKGwpfHwobD1wWCxOM2Uo''@;'; put 'put ''YykpLGx9KGwubGFuZ3VhZ2UpO2NvbnN0IHJ0PU9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhsKS5maWx0ZXIodnQ9PntsZXRbTnRdPXZ0O3JldHVybiEoU2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKE50KXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKE50''@;'; put 'put ''KSl9KSkscHQ9bmV3IHVwZShmLHJ0LFt3cnQsQXJ0XSksZHQ9cHQuZ2V0VGFibGVNZXRhKCksSnQ9cHQuZ2V0R2xvYmFsTWV0YSgpLHZuPUpPKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5pbnNlcnRCZWZvcmUodGhpcy5jb250YWlu''@;'; put 'put ''ZXIsYy5maXJzdENoaWxkKSxjUCh0aGlzKSYmKFMyZShsLmxpY2Vuc2VLZXksYyksVGkoYywiaHQtd3JhcHBlciIpKSx0aGlzLmd1aWQ9YGh0XyR7aCQoKX1gLERYLnNldCh0aGlzLmd1aWQsdGhpcyksdGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcgWUssdGhpcy5yb3dJbmRleE1hcHBlcj1u''@;'; put 'put ''ZXcgWUssdGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix2dCl9KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNl''@;'; put 'put ''Q2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHYuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNvbXBvc2l0aW9uc3RhcnQiLHZ0PT57Zi5ydW5Ib29rcygiYmVmb3JlQ29tcG9zaXRpb25TdGFy''@;'; put 'put ''dCIsdnQpfSksST1uZXcgTHR0KGYpLCghdGhpcy5yb290RWxlbWVudC5pZHx8Imh0XyI9PT10aGlzLnJvb3RFbGVtZW50LmlkLnN1YnN0cmluZygwLDMpKSYmKHRoaXMucm9vdEVsZW1lbnQuaWQ9dGhpcy5ndWlkKTtsZXQgR3I9bmV3IHFudChkdCx7cm93SW5kZXhNYXBwZXI6Zi5yb3dJbmRl''@;'; put 'put ''eE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjpmLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOnZ0PT5NLnByb3BUb0NvbCh2dCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRBY3RpdmVF''@;'; put 'put ''ZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxjb3VudFJv''@;'; put 'put ''d0hlYWRlcnM6KCk9PnRoaXMuY291bnRSb3dIZWFkZXJzKCksY291bnRDb2xIZWFkZXJzOigpPT50aGlzLmNvdW50Q29sSGVhZGVycygpLGNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSguLi5hcmd1''@;'; put 'put ''bWVudHMpfSxjb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sZ2V0U2hvcnRjdXRNYW5hZ2VyOigpPT5mLmdldFNob3J0Y3V0TWFuYWdlcigpLGNyZWF0ZUNlbGxD''@;'; put 'put ''b29yZHM6KHZ0LE50KT0+Zi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksY3JlYXRlQ2VsbFJhbmdlOih2dCxOdCxIdCk9PmYuX2NyZWF0ZUNlbGxSYW5nZSh2dCxOdCxIdCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOnZ0PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7cmV0dXJuIGYuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSHQpOkh0KX0scmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOnZ0''@;'; put 'put ''PT57Y29uc3R7cm93Ok50LGNvbDpIdH09dnQ7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoTnQ+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE50KTpOdCxIdD49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXgoSHQpOkh0KX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzoodnQsTnQpPT57Y29uc3QgSHQ9TnQ+dnQ/MTotMSxIbj1NYXRoLm1pbih2dCxOdCksdHI9TWF0aC5tYXgodnQsTnQpLGFyPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LEh0KTty''@;'; put 'put ''ZXR1cm4gbnVsbD09PWFyfHwxPT09SHQmJmFyPnRyfHwtMT09PUh0JiZhcjxIbj9udWxsOmFyPj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhcik6YXJ9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46KHZ0LE50KT0+e2NvbnN0IEh0''@;'; put 'put ''PU50PnZ0PzE6LTEsSG49TWF0aC5taW4odnQsTnQpLHRyPU1hdGgubWF4KHZ0LE50KSxhcj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCxIdCk7cmV0dXJuIG51bGw9PT1hcnx8MT09PUh0JiZhcj50cnx8LTE9PT1IdCYmYXI8SG4/bnVsbDphcj49MD9m''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYXIpOmFyfSxpc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbjoodnQsTnQpPT52dDwwfHxOdDwwP2YuZ2V0U2V0dGluZ3MoKS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9uOmYuZ2V0Q2VsbE1ldGEodnQsTnQpLmRpc2Fi''@;'; put 'put ''bGVWaXN1YWxTZWxlY3Rpb259KTt0aGlzLnNlbGVjdGlvbj1Hcjtjb25zdCBtcj12dD0+e2xldHtoaWRkZW5JbmRleGVzQ2hhbmdlZDpOdH09dnQ7dGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsTnQmJnRoaXMuc2VsZWN0aW9uLmNvbW1pdCgpfTtmdW5jdGlvbiBhaSh2dCxOdCl7Y29uc3QgSHQ9''@;'; put 'put ''ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVtZW50OmYudGFibGU7aWYoRWUpVGkoSHQsTnQpO2Vsc2V7bGV0IEhuPVtdLHRyPVtdO0p0W3Z0XSYmKEhuPUFycmF5LmlzQXJyYXkoSnRbdnRdKT9KdFt2dF06dSQoSnRbdnRdKSksTnQmJih0cj1BcnJheS5pc0FycmF5KE50KT9OdDp1JChOdCkp''@;'; put 'put ''O2NvbnN0IGFyPWMkKEhuLHRyKSxIcj1jJCh0cixIbik7YXIubGVuZ3RoJiZsbyhIdCxhciksSHIubGVuZ3RoJiZUaShIdCxIcil9SnRbdnRdPU50fWZ1bmN0aW9uIF9pKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEwLGFkZFZhbGlkYXRvclRvUXVldWUo''@;'; put 'put ''KXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0xLHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMuY2hlY2tJZlF1ZXVlSXNFbXB0eSgp''@;'; put 'put ''fSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIE9uKHZ0KXtjb25zdCBOdD12dC5yZXBsYWNlKCIsIiwiLiIpO3Jl''@;'; put 'put ''dHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChOdCkpP3BhcnNlRmxvYXQoTnQpOnZ0fWZ1bmN0aW9uIHpyKHZ0LE50LEh0KXtpZighdnQubGVuZ3RoKXJldHVybiB2b2lkIEh0KCk7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKSx0cj1uZXcgX2k7bGV0IGFyPSEwO3RyLm9uUXVldWVFbXB0''@;'; put 'put ''eT0oKT0+e0huJiZhciYmSG4uY2FuY2VsQ2hhbmdlcygpLEh0KCl9O2ZvcihsZXQgSHI9dnQubGVuZ3RoLTE7SHI+PTA7SHItLSl7Y29uc3RbcXIsb25dPXZ0W0hyXSxibj1NLnByb3BUb0NvbChvbik7bGV0IHBuO3BuPU51bWJlci5pc0ludGVnZXIoYm4pP2YuZ2V0Q2VsbE1ldGEocXIsYm4p''@;'; put 'put ''OnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZHQpLC4uLmR0fSxmLmdldENlbGxWYWxpZGF0b3IocG4pJiYodHIuYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKHZ0W0hyXVszXSxwbixmdW5jdGlvbihwciwkbil7cmV0dXJuIGZ1bmN0aW9uKGRyKXtpZigiYm9vbGVhbiIh''@;'; put 'put ''PXR5cGVvZiBkcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09ZHImJiExPT09JG4uYWxsb3dJbnZhbGlkJiYoYXI9ITEsdnQuc3BsaWNlKHByLDEpLCRuLnZhbGlkPSEwKSx0ci5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUo''@;'; put 'put ''KX19KEhyLHBuKSxOdCkpfXRyLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBKbih2dCxOdCl7Zm9yKGxldCBIbj12dC5sZW5ndGgtMTtIbj49MDtIbi0tKXtsZXQgdHI9ITE7aWYobnVsbCE9PXZ0W0huXSl7aWYobnVsbCE9dnRbSG5dWzJdfHxudWxsIT12dFtIbl1bM10pe2lmKGR0''@;'; put 'put ''LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbSG5dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOmFyfT1NLmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFyKXt0cj0hMDticmVha319aWYoImFycmF5Ij09PWYuZGF0YVR5cGUmJighZHQuY29s''@;'; put 'put ''dW1uc3x8MD09PWR0LmNvbHVtbnMubGVuZ3RoKSYmZHQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtNLnByb3BUb0NvbCh2dFtIbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOmFyfT1NLmNyZWF0ZUNvbCh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWFy''@;'; put 'put ''KXt0cj0hMDticmVha319dHJ8fE0uc2V0KHZ0W0huXVswXSx2dFtIbl1bMV0sdnRbSG5dWzNdKX19ZWxzZSB2dC5zcGxpY2UoSG4sMSl9aWYodnQubGVuZ3RoPjApe0cuYWRqdXN0Um93c0FuZENvbHMoKSxmLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLHZ0LE50KSxpZS5jbG9zZUVk''@;'; put 'put ''aXRvcigpLGYucmVuZGVyKCksaWUucHJlcGFyZUVkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsTnR8fCJlZGl0Iik7Y29uc3QgSG49Zi5nZXRBY3RpdmVFZGl0b3IoKTtIbiYmUGEoSG4ucmVmcmVzaFZhbHVlKSYmSG4ucmVm''@;'; put 'put ''cmVzaFZhbHVlKCl9ZWxzZSBmLnJlbmRlcigpfWZ1bmN0aW9uIElyKHZ0LE50LEh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh2dCk/dnQ6W1t2dCxOdCxIdF1dfWZ1bmN0aW9uICRyKHZ0LE50KXtjb25zdCBIdD1mLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2UiLHZ0LE50fHwiZWRpdCIpLEhuPXZ0''@;'; put 'put ''LmZpbHRlcihhcj0+bnVsbCE9PWFyKTt2YXIgdHI7aWYoITE9PT1IdHx8MD09PUhuLmxlbmd0aClyZXR1cm4gbnVsbD09PSh0cj1mLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09dHJ8fHRyLmNhbmNlbENoYW5nZXMoKSxbXTtmb3IobGV0IGFyPUhuLmxlbmd0aC0xO2FyPj0wO2FyLS0p''@;'; put 'put ''e2NvbnN0W0hyLHFyLCxvbl09SG5bYXJdLGJuPU0ucHJvcFRvQ29sKHFyKTtsZXQgcG47cG49TnVtYmVyLmlzSW50ZWdlcihibik/Zi5nZXRDZWxsTWV0YShIcixibik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9O2NvbnN0e3R5cGU6cHIsY2hlY2tlZFRlbXBsYXRlOiRu''@;'; put 'put ''LHVuY2hlY2tlZFRlbXBsYXRlOmRyfT1wbjtpZigibnVtZXJpYyI9PT1wciYmInN0cmluZyI9PXR5cGVvZiBvbiYmYmZlKG9uKSYmKEhuW2FyXVszXT1PbihvbikpLCJjaGVja2JveCI9PT1wcil7Y29uc3QgVXI9bGMob24pLFpuPVVyPT09bGMoJG4pLHNyPVVyPT09bGMoZHIpOyhabnx8c3Ip''@;'; put 'put ''JiYoSG5bYXJdWzNdPVpuPyRuOmRyKX19cmV0dXJuIEhufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLG1yKSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixtciksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxI''@;'; put 'put ''b29rKCJhZnRlclNldFJhbmdlRW5kIiwodnQsTnQpPT57Y29uc3QgSHQ9RmQoITEpLEhuPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTp0cix0bzphcn09SG4uY3VycmVudCgpLEhyPUhuLnNpemUoKS0xO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uIix0ci5y''@;'; put 'put ''b3csdHIuY29sLGFyLnJvdyxhci5jb2wsSHQsSHIpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIix0ci5yb3csZi5jb2xUb1Byb3AodHIuY29sKSxhci5yb3csZi5jb2xUb1Byb3AoYXIuY29sKSxIdCxIciksTnQmJighSHQuaXNUb3VjaGVkKCl8fEh0LmlzVG91Y2hlZCgp''@;'; put 'put ''JiYhSHQudmFsdWUpJiZ5ZS5zY3JvbGxUbyh2dCk7Y29uc3QgcXI9R3IuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksb249R3IuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7cXImJm9uP1RpKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0t''@;'; put 'put ''Y29sdW1ucyJdKTpxcj8obG8odGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpLFRpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSk6b24/KGxvKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSxUaSh0aGlzLnJvb3RF''@;'; put 'put ''bGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikpOmxvKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSwic2hpZnQiIT09R3IuZ2V0U2VsZWN0aW9uU291cmNlKCkmJmllLmNsb3NlRWRpdG9yKG51bGwpLGYudmll''@;'; put 'put ''dy5yZW5kZXIoKSxpZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldEZvY3VzIix2dD0+e3RoaXMucnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9v''@;'; put 'put ''aygiYWZ0ZXJTZXRGb2N1cyIsdnQ9Pntjb25zdCBOdD1GZCghMSk7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0LmNvbCxOdCksKCFOdC5pc1RvdWNoZWQoKXx8TnQuaXNUb3VjaGVkKCkmJiFOdC52YWx1ZSkmJnllLnNjcm9sbFRvKHZ0KSxpZS5jbG9z''@;'; put 'put ''ZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxpZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgTnQ9dnQubGVuZ3RoLTEse2Zyb206SHQsdG86SG59PXZ0W050XTt0aGlzLnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlclNlbGVjdGlvbkVuZCIsSHQucm93LEh0LmNvbCxIbi5yb3csSG4uY29sLE50KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsSHQucm93LGYuY29sVG9Qcm9wKEh0LmNvbCksSG4ucm93LGYuY29sVG9Qcm9wKEhuLmNvbCksTnQpfSksdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgTnQ9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1OdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVy''@;'; put 'put ''RGVzZWxlY3QiLCgpPT57aWUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCksbG8odGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3''@;'; put 'put ''IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29s''@;'; put 'put ''dW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZv''@;'; put 'put ''cmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29r''@;'; put 'put ''KCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2Fs''@;'; put 'put ''SG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFy''@;'; put 'put ''dCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50''@;'; put 'put ''c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtI''@;'; put 'put ''dCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3''@;'; put 'put ''IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2''@;'; put 'put ''dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT50aGlzLmFs''@;'; put 'put ''dGVyKCJpbnNlcnRfcm93X2Fib3ZlIix2dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKSksRz17YWx0ZXIodnQsTnQpe2xldCBIdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxIbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCx0cj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBhcj1Icj0+e2lmKDA9PT1Ici5sZW5ndGgpcmV0dXJuW107Y29uc3QgcXI9''@;'; put 'put ''Wy4uLkhyXTtyZXR1cm4gcXIuc29ydCgoYm4scG4pPT57bGV0W3ByXT1ibixbJG5dPXBuO3JldHVybiBwcj09PSRuPzA6cHI+JG4/MTotMX0pLHF1KHFyLChibixwbik9PntsZXRbcHIsJG5dPXBuO2NvbnN0IGRyPWJuW2JuLmxlbmd0aC0xXSxbVXIsWm5dPWRyLHNyPVVyK1puO2lmKHByPD1z''@;'; put 'put ''cil7Y29uc3QgTnI9TWF0aC5tYXgoJG4tKHNyLXByKSwwKTtkclsxXSs9TnJ9ZWxzZSBibi5wdXNoKFtwciwkbl0pO3JldHVybiBibn0sW3FyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IEhyPWYuY291bnRTb3Vy''@;'; put 'put ''Y2VSb3dzKCk7aWYoZHQubWF4Um93cz09PUhyKXJldHVybjtjb25zdCBxcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7TnQ9TnQ/PygiYmVsb3ciPT09cXI/SHI6MCk7Y29uc3R7ZGVsdGE6b24sc3RhcnRQaHlzaWNhbEluZGV4OmJufT1NLmNyZWF0ZVJvdyhOdCxI''@;'; put 'put ''dCx7c291cmNlOkhuLG1vZGU6cXJ9KTtHci5zaGlmdFJvd3MoZi50b1Zpc3VhbFJvdyhibiksb24pO2JyZWFrO2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgcG49Imluc2VydF9jb2xfZW5kIj09PXZ0PyJlbmQiOiJzdGFydCI7TnQ9TnQ/PygiZW5k''@;'; put 'put ''Ij09PXBuP2YuY291bnRTb3VyY2VDb2xzKCk6MCk7Y29uc3R7ZGVsdGE6cHIsc3RhcnRQaHlzaWNhbEluZGV4OiRufT1NLmNyZWF0ZUNvbChOdCxIdCx7c291cmNlOkhuLG1vZGU6cG59KTtpZihwcil7aWYoQXJyYXkuaXNBcnJheShkdC5jb2xIZWFkZXJzKSl7Y29uc3QgWm49W2YudG9WaXN1''@;'; put 'put ''YWxDb2x1bW4oJG4pLDBdO1puLmxlbmd0aCs9cHIsQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShkdC5jb2xIZWFkZXJzLFpuKX1Hci5zaGlmdENvbHVtbnMoZi50b1Zpc3VhbENvbHVtbigkbikscHIpfWJyZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgZHI9Wm49PntsZXQgc3I9MDtZ''@;'; put 'put ''bihabixOcj0+e2xldFtNcixacl09TnI7Y29uc3QgYWE9VWMoTXIpP2YuY291bnRSb3dzKCktMTpNYXRoLm1heChNci1zciwwKTtpZihOdW1iZXIuaXNJbnRlZ2VyKE1yKSYmKE1yPU1hdGgubWF4KE1yLXNyLDApKSwhTS5yZW1vdmVSb3coTXIsWnIsSG4pKXJldHVybjtpZihHci5pc1NlbGVj''@;'; put 'put ''dGVkKCkpe2NvbnN0e3JvdzpNb309Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNbz49TXImJk1vPD1Ncitaci0xJiZpZS5jbG9zZUVkaXRvcighMCl9Y29uc3QgSW89Zi5jb3VudFJvd3MoKSxabz1kdC5maXhlZFJvd3NUb3A7Wm8+PWFhKzEmJihkdC5maXhlZFJvd3NUb3At''@;'; put 'put ''PU1hdGgubWluKFpyLFpvLWFhKSk7Y29uc3QgcHM9ZHQuZml4ZWRSb3dzQm90dG9tO3BzJiZhYT49SW8tcHMmJihkdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKFpyLHBzKSksMD09PUlvP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZVJvdyI9PT1Ibj9Hci5yZWZyZXNoKCk6''@;'; put 'put ''R3Iuc2hpZnRSb3dzKE1yLC1aciksc3IrPVpyfSl9O0FycmF5LmlzQXJyYXkoTnQpP2RyKGFyKE50KSk6ZHIoW1tOdCxIdF1dKTticmVhaztjYXNlInJlbW92ZV9jb2wiOmNvbnN0IFVyPVpuPT57bGV0IHNyPTA7WW4oWm4sTnI9PntsZXRbTXIsWnJdPU5yO2NvbnN0IGFhPVVjKE1yKT9mLmNv''@;'; put 'put ''dW50Q29scygpLTE6TWF0aC5tYXgoTXItc3IsMCk7bGV0IEJhPWYudG9QaHlzaWNhbENvbHVtbihhYSk7aWYoTnVtYmVyLmlzSW50ZWdlcihNcikmJihNcj1NYXRoLm1heChNci1zciwwKSksIU0ucmVtb3ZlQ29sKE1yLFpyLEhuKSlyZXR1cm47aWYoR3IuaXNTZWxlY3RlZCgpKXtjb25zdHtj''@;'; put 'put ''b2w6TW99PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7TW8+PU1yJiZNbzw9TXIrWnItMSYmaWUuY2xvc2VFZGl0b3IoITApfTA9PT1mLmNvdW50Q29scygpP0dyLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1Ibj9Hci5yZWZyZXNoKCk6R3Iuc2hp''@;'; put 'put ''ZnRDb2x1bW5zKE1yLC1acik7Y29uc3QgcHM9ZHQuZml4ZWRDb2x1bW5zU3RhcnQ7cHM+PWFhKzEmJihkdC5maXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4oWnIscHMtYWEpKSxBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiYodHlwZW9mIEJhPiJ1IiYmKEJhPS0xKSxkdC5jb2xIZWFk''@;'; put 'put ''ZXJzLnNwbGljZShCYSxacikpLHNyKz1acn0pfTtBcnJheS5pc0FycmF5KE50KT9VcihhcihOdCkpOlVyKFtbTnQsSHRdXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX10cnx8Ry5hZGp1c3RSb3dzQW5kQ29scygpLGYu''@;'; put 'put ''dmlldy5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGFkanVzdFJvd3NBbmRDb2xzKCl7Y29uc3QgdnQ9ZHQubWluUm93cyxOdD1kdC5taW5TcGFyZVJvd3MsSHQ9ZHQubWluQ29scyxIbj1kdC5taW5TcGFyZUNvbHM7aWYodnQpe2NvbnN0IHRyPWYuY291bnRSb3dzKCk7''@;'; put 'put ''dHI8dnQmJk0uY3JlYXRlUm93KHRyLHZ0LXRyLHtzb3VyY2U6ImF1dG8ifSl9aWYoTnQpe2NvbnN0IHRyPWYuY291bnRFbXB0eVJvd3MoITApO2lmKHRyPE50KXtjb25zdCBIcj1NYXRoLm1pbihOdC10cixkdC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO00uY3JlYXRlUm93KGYuY291''@;'; put 'put ''bnRSb3dzKCksSHIse3NvdXJjZToiYXV0byJ9KX19e2xldCB0cjsoSHR8fEhuKSYmKHRyPWYuY291bnRFbXB0eUNvbHMoITApKTtsZXQgYXI9Zi5jb3VudENvbHMoKTtpZihIdCYmIWR0LmNvbHVtbnMmJmFyPEh0KXtjb25zdCBIcj1IdC1hcjt0cis9SHIsTS5jcmVhdGVDb2woYXIsSHIse3Nv''@;'; put 'put ''dXJjZToiYXV0byJ9KX1pZihIbiYmIWR0LmNvbHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiZ0cjxIbil7YXI9Zi5jb3VudENvbHMoKTtjb25zdCBxcj1NYXRoLm1pbihIbi10cixkdC5tYXhDb2xzLWFyKTtNLmNyZWF0ZUNvbChhcixxcix7c291cmNlOiJhdXRvIn0pfX19LHBvcHVsYXRl''@;'; put 'put ''RnJvbUFycmF5KHZ0LE50LEh0LEhuLHRyKXtsZXQgYXIsSHIscXIsb247Y29uc3QgYm49W10scG49e30scHI9W10sJG49dnQucm93LGRyPXZ0LmNvbDtpZihIcj1OdC5sZW5ndGgsMD09PUhyKXJldHVybiExO2xldCBVcj0wLFpuPTA7c3dpdGNoKHFvKEh0KSYmKFVyPUh0LmNvbC1kcisxLFpu''@;'; put 'put ''PUh0LnJvdy0kbisxKSx0cil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBzcj1oRShOdCksTnI9c3IubGVuZ3RoLE1yPU1hdGgubWF4KE5yLFVyKSxacj1mLmdldERhdGEoKS5zbGljZSgkbiksYWE9aEUoWnIpLnNsaWNlKGRyLGRyK01yKTtmb3IocXI9MDtxcjxNcjtxcis9MSlpZihxcjxOcil7''@;'; put 'put ''Zm9yKGFyPTAsSHI9c3JbcXJdLmxlbmd0aDthcjxabi1Icjthcis9MSlzcltxcl0ucHVzaChzcltxcl1bYXIlSHJdKTtwci5wdXNoKHNyW3FyXS5jb25jYXQocXI8YWEubGVuZ3RoP2FhW3FyXTpuZXcgQXJyYXkoWnIubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBwci5wdXNoKHNyW3FyJU5y''@;'; put 'put ''XS5jb25jYXQoYWFbcXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheSgkbixkcixoRShwcikpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEJhPU50Lmxlbmd0aCxJbz1NYXRoLm1heChCYSxabiksWm89Zi5nZXREYXRhKCkuc2xpY2UoJG4pLm1hcChVcz0+VXMuc2xpY2UoZHIpKTtmb3Io''@;'; put 'put ''YXI9MDthcjxJbzthcis9MSlpZihhcjxCYSl7Zm9yKHFyPTAsb249TnRbYXJdLmxlbmd0aDtxcjxVci1vbjtxcis9MSlOdFthcl0ucHVzaChOdFthcl1bcXIlb25dKTtpZihhcjxaby5sZW5ndGgpZm9yKGxldCBVcz0wO1VzPFpvW2FyXS5sZW5ndGg7VXMrPTEpTnRbYXJdLnB1c2goWm9bYXJd''@;'; put 'put ''W1VzXSk7ZWxzZSBOdFthcl0ucHVzaCguLi5uZXcgQXJyYXkoWm9bMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE50LnB1c2goTnRbYXIlSHJdLnNsaWNlKDAsSW8pLmNvbmNhdChab1thcl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KCRuLGRyLE50KTticmVhaztkZWZhdWx0OnBuLnJvdz12''@;'; put 'put ''dC5yb3cscG4uY29sPXZ0LmNvbDtsZXQgbmMscHM9MCxNbz0wLGhzPSEwO2NvbnN0IFFvPWZ1bmN0aW9uKEpjKXtsZXQgcXM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgQmw9TnRbSmMlTnQubGVuZ3RoXTtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PXFzP0JsW3FzJUJsLmxlbmd0aF06Qmx9LE0zPU50Lmxlbmd0aCxhZD1IdD9IdC5yb3ctdnQucm93KzE6MDtmb3IoSHI9SHQ/YWQ6TWF0aC5tYXgoTTMsYWQpLGFyPTA7YXI8SHImJiEoSHQmJnBuLnJvdz5IdC5yb3cmJmFkPk0zfHwhZHQuYWxsb3dJbnNlcnRSb3cmJnBuLnJvdz5m''@;'; put 'put ''LmNvdW50Um93cygpLTF8fHBuLnJvdz49ZHQubWF4Um93cyk7YXIrKyl7Y29uc3QgVXM9YXItcHMsSmM9UW8oVXMpLmxlbmd0aCxxcz1IdD9IdC5jb2wtdnQuY29sKzE6MDtpZihvbj1IdD9xczpNYXRoLm1heChKYyxxcykscG4uY29sPXZ0LmNvbCxuYz1mLmdldENlbGxNZXRhKHBuLnJvdyxw''@;'; put 'put ''bi5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09SG4mJiJBdXRvZmlsbC5maWxsIiE9PUhufHwhbmMuc2tpcFJvd09uUGFzdGUpe2ZvcihNbz0wLHFyPTA7cXI8b24mJiEoSHQmJnBuLmNvbD5IdC5jb2wmJnFzPkpjfHwhZHQuYWxsb3dJbnNlcnRDb2x1bW4mJnBuLmNvbD5mLmNvdW50Q29scygp''@;'; put 'put ''LTF8fHBuLmNvbD49ZHQubWF4Q29scyk7cXIrKyl7aWYobmM9Zi5nZXRDZWxsTWV0YShwbi5yb3cscG4uY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Ibnx8IkF1dG9maWxsLmZpbGwiPT09SG4pJiZuYy5za2lwQ29sdW1uT25QYXN0ZSl7TW8rPTEscG4uY29sKz0xLG9uKz0xO2NvbnRpbnVl''@;'; put 'put ''fWlmKG5jLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Ibil7cG4uY29sKz0xO2NvbnRpbnVlfWxldCBlcz1RbyhVcyxxci1NbyksRTE9Zi5nZXREYXRhQXRDZWxsKHBuLnJvdyxwbi5jb2wpO2lmKG51bGwhPT1lcyYmIm9iamVjdCI9PXR5cGVvZiBlcylpZihBcnJheS5pc0FycmF5KGVz''@;'; put 'put ''KSYmbnVsbD09PUUxJiYoRTE9W10pLG51bGw9PT1FMXx8Im9iamVjdCIhPXR5cGVvZiBFMSlocz0hMTtlbHNle2NvbnN0IHgzPXNfKEFycmF5LmlzQXJyYXkoRTEpP0UxOkUxWzBdfHxFMSksUWc9c18oQXJyYXkuaXNBcnJheShlcyk/ZXM6ZXNbMF18fGVzKTtOTyh4MyxRZyl8fEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoeDMpJiZBcnJheS5pc0FycmF5KFFnKT9lcz1nMShlcyk6aHM9ITF9ZWxzZSBudWxsIT09RTEmJiJvYmplY3QiPT10eXBlb2YgRTEmJihocz0hMSk7aHMmJmJuLnB1c2goW3BuLnJvdyxwbi5jb2wsZXNdKSxocz0hMCxwbi5jb2wrPTF9cG4ucm93Kz0xfWVsc2UgcHMrPTEscG4ucm93''@;'; put 'put ''Kz0xLEhyKz0xfWYuc2V0RGF0YUF0Q2VsbChibixudWxsLG51bGwsSG58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe0kuc2V0RGF0YShkdC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKEFwKCl8fFAkKCkpJiZUaShmLnJvb3RFbGVtZW50LCJt''@;'; put 'put ''b2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGwsITApLHRoaXMudmlldz1uZXcgeHR0KHRoaXMpO2NvbnN0IHZ0PWR0LnRoZW1lTmFtZXx8TXBlKGYucm9vdEVsZW1lbnQpO2YudXNlVGhlbWUodnQpLGYudmlldy5hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGYuZ2V0Q3VycmVudFRo''@;'; put 'put ''ZW1lTmFtZSgpKSxpZT1ZWGUuZ2V0SW5zdGFuY2UoZixkdCxHcikseWU9ZnVuY3Rpb24ganJ0KGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jO2xldCBhPSExLGQ9ITE7cmV0dXJue3Jlc3VtZSgpe2Q9ITF9LHN1c3BlbmQoKXtkPSEwfSxza2lwTmV4dFNjcm9sbEN5Y2xlKCl7YT0hMH0sc2Nyb2xs''@;'; put 'put ''VG8oaCl7dmFyIGY7aWYoYXx8ZClyZXR1cm4gdm9pZChhPSExKTtsZXQgdjtsLmlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCk/dj1mdW5jdGlvbiBGcnQoYyl7cmV0dXJuIGw9PntjLnNjcm9sbFZpZXdwb3J0VG8obC50b09iamVjdCgpLCgpPT57Y29uc3R7cm93OmEsY29sOmR9PWMuZ2V0U2Vs''@;'; put 'put ''ZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7QV8oYy5nZXRDZWxsKGEsZCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvcm5lcigpP3Y9KCk9Pnt9OmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/dj1mdW5jdGlvbiBWcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLmdldENvbXB1''@;'; put 'put ''dGVkUm93VGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7cm93OmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzO0FfKGMuZ2V0Q2VsbChhLGQ/LTE6MCwhMCkpfSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP3Y9ZnVuY3Rpb24gT3J0KGMp''@;'; put 'put ''e3JldHVybiBsPT57Y29uc3QgYT1GUChjKS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKTtjLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDphfSwoKT0+e2NvbnN0IGQ9ISFjLmdldFNldHRpbmdzKCkuY29sSGVhZGVycztBXyhjLmdldENlbGwoZD8tMTowLGEsITApKX0pfX0oYyk6MT09PWwuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLnNpemUoKSYmbC5pc011bHRpcGxlKCk/dj1mdW5jdGlvbiBIcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPUZQKGMpLGQ9e3JvdzphLmdldENvbXB1dGVkUm93VGFyZ2V0KGwpLGNvbDphLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpfTtjLnNjcm9sbFZpZXdwb3J0''@;'; put 'put ''VG8oZCwoKT0+e2NvbnN0e3JvdzpoLGNvbDpmfT1kO0FfKGMuZ2V0Q2VsbChoLGYsITApKX0pfX0oYyk6MSE9PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8bC5pc011bHRpcGxlKCk/bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJih2PWZ1bmN0aW9uIE5ydChjKXtyZXR1cm4g''@;'; put 'put ''bD0+e2NvbnN0IGE9RlAoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKSk6dj1m''@;'; put 'put ''dW5jdGlvbiBCcnQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPWMuc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpLHtyb3c6ZCxjb2w6aH09bCxmPSgpPT57QV8oYy5nZXRDZWxsKGQsaCwhMCkpfTtpZihkPDAmJmg+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6aH0sZik7ZWxzZSBpZiho''@;'; put 'put ''PDAmJmQ+PTApYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZH0sZik7ZWxzZXtpZigibW91c2UiPT09YSYmKGg9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8ZD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSlyZXR1cm47Yy5zY3JvbGxWaWV3''@;'; put 'put ''cG9ydFRvKHtyb3c6ZCxjb2w6aH0sZil9fX0oYyksbnVsbD09PShmPXYpfHx2b2lkIDA9PT1mfHxmKGgpfX19KGYpLHVlPW5ldyAkWGUoZiksY1AodGhpcykmJmZ1bmN0aW9uIFVydChjKXtjb25zdCBsPWZ1bmN0aW9uIFpydChjKXtyZXR1cm4gbD0+e2lmKCFsKXJldHVybiBudWxsO2NvbnN0''@;'; put 'put ''IGE9RVgoYyksZD1UWChjKTtyZXR1cm4gbC5jb2w8YS5jb2wmJihsLmNvbD1hLmNvbCksbC5jb2w+ZC5jb2wmJihsLmNvbD1kLmNvbCksbC5yb3c8YS5yb3cmJihsLnJvdz1hLnJvdyksbC5yb3c+ZC5yb3cmJihsLnJvdz1kLnJvdyksbH19KGMpO2xldCBhO2NvbnN0e2FjdGl2YXRlOmQsZGVh''@;'; put 'put ''Y3RpdmF0ZTpofT1mdW5jdGlvbiB6cnQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0IGE9Yy5yb290RWxlbWVudCxkPXZwZShjKSxoPXZwZShjKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIs''@;'; put 'put ''KCk9Pmw/Lm9uRm9jdXNGcm9tVG9wKCkpLGguYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZvY3VzRnJvbUJvdHRvbSgpKSxhLmZpcnN0Q2hpbGQuYmVmb3JlKGQpLGEubGFzdENoaWxkLmFmdGVyKGgpLHthY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2QudGFi''@;'; put 'put ''SW5kZXg9MCxoLnRhYkluZGV4PTB9LDEwKX0sZGVhY3RpdmF0ZSgpe2MuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2QudGFiSW5kZXg9LTEsaC50YWJJbmRleD0tMX0sMTApfX19KGMse29uRm9jdXNGcm9tVG9wKCl7dmFyIHVlO2NvbnN0IHllPW51bGwhPT0odWU9bChhKSkmJnZvaWQgMCE9PXVl''@;'; put 'put ''P3VlOkVYKGMpO3llJiYoYy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fib3ZlIix5ZSksYy5zZWxlY3RDZWxsKHllLnJvdyx5ZS5jb2wpKSxjLmxpc3RlbigpfSxvbkZvY3VzRnJvbUJvdHRvbSgpe3ZhciB1ZTtjb25zdCB5ZT1udWxsIT09KHVlPWwoYSkp''@;'; put 'put ''JiZ2b2lkIDAhPT11ZT91ZTpUWChjKTt5ZSYmKGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9iZWxvdyIseWUpLGMuc2VsZWN0Q2VsbCh5ZS5yb3cseWUuY29sKSksYy5saXN0ZW4oKX19KSxmPXt3cmFwcGVkOiExLGZsaXBwZWQ6ITF9O2xldCB2PSEwLE09''@;'; put 'put ''ITEsST0hMTtjLmFkZEhvb2soImFmdGVyTGlzdGVuIiwoKT0+aCgpKSxjLmFkZEhvb2soImFmdGVyVW5saXN0ZW4iLCgpPT5kKCkpLGMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCh1ZSx5ZSxFZSxqZSxxZSk9Pnt2YXIgcnQ7TSYmKGYud3JhcHBlZCYmZi5mbGlwcGVkfHxJKSYmKEk9ITEs''@;'; put 'put ''cWUudmFsdWU9ITApLHYmJihhPW51bGw9PT0ocnQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09cnQ/dm9pZCAwOnJ0LmhpZ2hsaWdodCl9KSxjLmFkZEhvb2soImJlZm9yZVJvd1dyYXAiLCh1ZSx5ZSxFZSk9PntmLndyYXBwZWQ9ITAsZi5mbGlwcGVkPUVlfSk7Y29uc3Qg''@;'; put 'put ''aWU9e2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEscmVsYXRpdmVUb0dyb3VwOm1wZSxncm91cDoiZm9jdXNDYXRjaGVyIn07Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRj''@;'; put 'put ''dXRzKFt7Li4uaWUsY2FsbGJhY2s6KCk9Pntjb25zdHt0YWJOYXZpZ2F0aW9uOnVlfT1jLmdldFNldHRpbmdzKCk7TT0hMCxjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkmJiF1ZSYmKHY9ITEpLHVlfHwoST0hMCl9LHBvc2l0aW9uOiJiZWZvcmUifSx7Li4uaWUsY2FsbGJhY2s6dWU9Pntjb25z''@;'; put 'put ''dHt0YWJOYXZpZ2F0aW9uOnllLGF1dG9XcmFwUm93OkVlfT1jLmdldFNldHRpbmdzKCk7aWYoTT0hMSx2PSEwLCF5ZXx8IWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKXx8RWUmJmYud3JhcHBlZCYmZi5mbGlwcGVkfHwhRWUmJmYud3JhcHBlZClyZXR1cm4gRWUmJmYud3JhcHBlZCYmZi5mbGlw''@;'; put 'put ''cGVkJiYoYT11ZS5zaGlmdEtleT9FWChjKTpUWChjKSksZnVuY3Rpb24gRygpe2Yud3JhcHBlZD0hMSxmLmZsaXBwZWQ9ITEsYy5kZXNlbGVjdENlbGwoKSxjLnVubGlzdGVuKCl9KCksITE7dWUucHJldmVudERlZmF1bHQoKX0scG9zaXRpb246ImFmdGVyIn1dKX0oZiksZi5ydW5Ib29rcygi''@;'; put 'put ''aW5pdCIpLHRoaXMucmVuZGVyKCksRWUmJm51bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmVTJlKGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6''@;'; put 'put ''ZSgpfSksIm9iamVjdCI9PXR5cGVvZiBFZSYmKGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIixFZVswXSxFZVsxXSksRWU9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKHZ0LE50KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE50LEh0KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsTnQsSHQpfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyPWYuZ2V0Q2VsbFZhbGlkYXRv''@;'; put 'put ''cihOdCk7ZnVuY3Rpb24gYXIoSHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU50LmhpZGRlbilyZXR1cm4gdm9pZCBIdChIcik7Y29uc3Qgb249TnQudmlzdWFsQ29sLGJuPU50LnZpc3VhbFJvdyxwbj1mLmdldENl''@;'; put 'put ''bGwoYm4sb24sITApO2lmKHBuJiYiVEgiIT09cG4ubm9kZU5hbWUpe2NvbnN0IHByPWYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChibiksJG49Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG9uKTtmLnZpZXcuX3d0''@;'; put 'put ''LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIscHIsJG4scG4pfUh0KEhyKX15MmUodHIpJiYodHI9ZnVuY3Rpb24oSHIpe3JldHVybiBmdW5jdGlvbihxcixvbil7b24oSHIudGVzdChxcikpfX0odHIpKSxtbCh0cik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxOdC52aXN1''@;'; put 'put ''YWxSb3csTnQucHJvcCxIbiksZi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt0ci5jYWxsKE50LHZ0LEhyPT57ZiYmKEhyPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSxOdC52YWxpZD1IcixhcihIciksZi5ydW5Ib29rcygicG9zdEFm''@;'; put 'put ''dGVyVmFsaWRhdGUiLEhyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLEhuKSl9KX0pKTpmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e050LnZhbGlkPSEwLGFyKE50LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPUlyKHZ0LE50''@;'; put 'put ''LEh0KSxhcj1bXTtsZXQgcXIsb24sYm4sSHI9SG47Zm9yKHFyPTAsb249dHIubGVuZ3RoO3FyPG9uO3FyKyspe2lmKCJvYmplY3QiIT10eXBlb2YgdHJbcXJdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJh''@;'; put 'put ''eSBvZiBhcnJheXMgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgdHJbcXJdWzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdh''@;'; put 'put ''bnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO2JuPXRyW3FyXVsxXT49dGhpcy5jb3VudENvbHMoKT90cltxcl1bMV06TS5jb2xUb1Byb3AodHJbcXJdWzFdKSxhci5wdXNoKFt0cltxcl1bMF0sYm4sSS5nZXRBdENlbGwodGhp''@;'; put 'put ''cy50b1BoeXNpY2FsUm93KHRyW3FyXVswXSksdHJbcXJdWzFdKSx0cltxcl1bMl1dKX0hSHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihIcj1OdCk7Y29uc3QgcG49JHIoYXIsSHIpO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIscG4sSHIpLHpyKHBuLEhyLCgpPT57Sm4ocG4sSHIp''@;'; put 'put ''fSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9SXIodnQsTnQsSHQpLGFyPVtdO2xldCBxcixvbixIcj1Ibjtmb3IocXI9MCxvbj10ci5sZW5ndGg7cXI8b247cXIrKylhci5wdXNoKFt0cltxcl1bMF0sdHJbcXJdWzFdLEkuZ2V0QXRDZWxs''@;'; put 'put ''KHRoaXMudG9QaHlzaWNhbFJvdyh0cltxcl1bMF0pLHRyW3FyXVsxXSksdHJbcXJdWzJdXSk7IUhyJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoSHI9TnQpO2NvbnN0IGJuPSRyKGFyLEhuKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGJuLEhyKSx6cihibixIciwoKT0+e0pu''@;'; put 'put ''KGJuLEhyKX0pfSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihEWC5mb3JFYWNoKHZ0PT57ZiE9PXZ0JiZ2dC51bmxpc3RlbigpfSksa1g9Zi5ndWlkLGYucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5p''@;'; put 'put ''c0xpc3RlbmluZygpJiYoa1g9bnVsbCxmLnJ1bkhvb2tzKCJhZnRlclVubGlzdGVuIikpfSx0aGlzLmlzTGlzdGVuaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGtYPT09Zi5ndWlkfSx0aGlzLmRlc3Ryb3lFZGl0b3I9ZnVuY3Rpb24oKXtsZXQgTnQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtpZS5jbG9zZUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksTnQmJkdyLmlzU2VsZWN0ZWQoKSYmaWUucHJlcGFyZUVkaXRvcigpfSx0aGlz''@;'; put 'put ''LnBvcHVsYXRlRnJvbUFycmF5PWZ1bmN0aW9uKHZ0LE50LEh0LEhuLHRyLGFyLEhyKXtpZigib2JqZWN0IiE9dHlwZW9mIEh0fHwib2JqZWN0IiE9dHlwZW9mIEh0WzBdKXRocm93IG5ldyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJh''@;'; put 'put ''eSBvZiBhcnJheXMiKTtjb25zdCBxcj0ibnVtYmVyIj09dHlwZW9mIEhuP2YuX2NyZWF0ZUNlbGxDb29yZHMoSG4sdHIpOm51bGw7cmV0dXJuIEcucG9wdWxhdGVGcm9tQXJyYXkoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksSHQscXIsYXIsSHIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlv''@;'; put 'put ''bih2dCxOdCxIdCl7Zm9yKHZhciBIbj1hcmd1bWVudHMubGVuZ3RoLHRyPW5ldyBBcnJheShIbj4zP0huLTM6MCksYXI9MzthcjxIbjthcisrKXRyW2FyLTNdPWFyZ3VtZW50c1thcl07cmV0dXJuIE0uc3BsaWNlQ29sKHZ0LE50LEh0LC4uLnRyKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24o''@;'; put 'put ''dnQsTnQsSHQpe2Zvcih2YXIgSG49YXJndW1lbnRzLmxlbmd0aCx0cj1uZXcgQXJyYXkoSG4+Mz9Ibi0zOjApLGFyPTM7YXI8SG47YXIrKyl0clthci0zXT1hcmd1bWVudHNbYXJdO3JldHVybiBNLnNwbGljZVJvdyh2dCxOdCxIdCwuLi50cil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtpZihHci5pc1NlbGVjdGVkKCkpcmV0dXJuIGJzKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtmcm9tOk50LHRvOkh0fT12dDtyZXR1cm5bTnQucm93LE50LmNvbCxIdC5yb3csSHQuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMu''@;'; put 'put ''Z2V0U2VsZWN0ZWQoKTtsZXQgTnQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0xXSksTnR9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKEdyLmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShHci5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12dFt2dC5sZW5ndGgtMV0pLE50fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYo''@;'; put 'put ''IUdyLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybjtjb25zdCBOdD1bXTtZbihHci5nZXRTZWxlY3RlZFJhbmdlKCksSHQ9PntpZihIdC5pc1NpbmdsZUhlYWRlcigpKXJldHVybjtjb25zdCBIbj1IdC5nZXRUb3BTdGFydENv''@;'; put 'put ''cm5lcigpLHRyPUh0LmdldEJvdHRvbUVuZENvcm5lcigpO0dhKEhuLnJvdyx0ci5yb3csYXI9PntHYShIbi5jb2wsdHIuY29sLEhyPT57dGhpcy5nZXRDZWxsTWV0YShhcixIcikucmVhZE9ubHl8fE50LnB1c2goW2FyLEhyLG51bGxdKX0pfSl9KSxOdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRh''@;'; put 'put ''QXRDZWxsKE50LHZ0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRl''@;'; put 'put ''cj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlciYmZi52aWV3LnJl''@;'; put 'put ''bmRlcigpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKXx8Zi52aWV3LnJlbmRlcigpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29u''@;'; put 'put ''c3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRp''@;'; put 'put ''b25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgTnQ9dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE50LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZOdD09PXRoaXMu''@;'; put 'put ''ZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBIdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihOdCksSHR9LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigp''@;'; put 'put ''LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0IHZ0PWYudmlldyx7d2lk''@;'; put 'put ''dGg6TnQsaGVpZ2h0Okh0fT12dC5nZXRMYXN0U2l6ZSgpLHt3aWR0aDpIbixoZWlnaHQ6dHJ9PWYucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYXI9SG4hPT1OdHx8dHIhPT1IdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQs''@;'; put 'put ''aGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0OnRyfSxhcikmJigoYXJ8fHZ0Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKHZ0LnNldExhc3RTaXplKEhuLHRyKSxmLnJlbmRlcigpLHZ0LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxmLnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Okh0fSx7d2lkdGg6SG4saGVpZ2h0OnRyfSxhcikpfSx0aGlzLnVwZGF0ZURhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LEh0PT57TT1IdCxmLmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3Ro''@;'; put 'put ''KHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLGYucm93SW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSksRy5hZGp1c3RSb3dzQW5kQ29scygpLEdyLnJlZnJlc2goKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6SSxpbnRlcm5h''@;'; put 'put ''bFNvdXJjZToidXBkYXRlRGF0YSIsc291cmNlOk50LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVuOkVlfSl9LHRoaXMubG9hZERhdGE9ZnVuY3Rpb24odnQsTnQpe2dwZSh2dCxIdD0+e009SHR9LCgpPT57cHQuY2xlYXJDZWxsc0NhY2hlKCksZi5pbml0SW5kZXhNYXBwZXJzKCksRy5hZGp1c3RS''@;'; put 'put ''b3dzQW5kQ29scygpLEdyLnJlZnJlc2goKSxFZSYmKEVlPVtudWxsLCJsb2FkRGF0YSJdKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6SSxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpwdCxmaXJzdFJ1bjpFZX0pfSx0aGlzLmdl''@;'; put 'put ''dEluaXRpYWxDb2x1bW5Db3VudD1mdW5jdGlvbigpe2NvbnN0IHZ0PWR0LmNvbHVtbnM7bGV0IE50PTA7aWYoQXJyYXkuaXNBcnJheSh2dCkpTnQ9dnQubGVuZ3RoO2Vsc2UgaWYobWwodnQpKWlmKCJhcnJheSI9PT1mLmRhdGFUeXBlKXtjb25zdCBIdD10aGlzLmNvdW50U291cmNlQ29scygp''@;'; put 'put ''O2ZvcihsZXQgSG49MDtIbjxIdDtIbis9MSl2dChIbikmJihOdCs9MSl9ZWxzZSgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fCJmdW5jdGlvbiI9PT1mLmRhdGFUeXBlKSYmKE50PU0uY29sVG9Qcm9wQ2FjaGUubGVuZ3RoKTtlbHNlIGlmKFBhKGR0LmRhdGFTY2hlbWEpKXtjb25zdCBIdD1NLmdl''@;'; put 'put ''dFNjaGVtYSgpO050PUFycmF5LmlzQXJyYXkoSHQpP0h0Lmxlbmd0aDpCTyhIdCl9ZWxzZSBOdD10aGlzLmNvdW50U291cmNlQ29scygpO3JldHVybiBOdH0sdGhpcy5pbml0SW5kZXhNYXBwZXJzPWZ1bmN0aW9uKCl7dGhpcy5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5n''@;'; put 'put ''ZXRJbml0aWFsQ29sdW1uQ291bnQoKSksdGhpcy5yb3dJbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSl9LHRoaXMuZ2V0RGF0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7cmV0dXJuIF9jKHZ0KT9NLmdldEFsbCgpOk0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbiksTS5ERVNUSU5BVElPTl9SRU5ERVJFUil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtyZXR1cm4gTS5nZXRDb3B5YWJsZVRleHQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhIdCxIbikpfSx0aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0Q29weWFibGUodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRTY2hlbWEoKX0sdGhpcy51cGRhdGVT''@;'; put 'put ''ZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgSHQ9KEVlP2YubG9hZERhdGE6Zi51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xldCB0cixhcixIbj0hMTtpZihQYSh2dC5yb3dzKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihQYSh2dC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiY29scyIgc2V0dGluZyBpcyBubyBsb25n''@;'; put 'put ''ZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29scz8nKTtpZihQYSh2dC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicpO2Zvcih0''@;'; put 'put ''ciBpbiB2dC5sYW5ndWFnZSYmZnVuY3Rpb24gR24odnQpe2NvbnN0IE50PUgzZSh2dCk7Z1goTnQpPyhmLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsTnQpLEp0Lmxhbmd1YWdlPU50LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE50KSk6TjNlKHZ0KX0odnQubGFu''@;'; put 'put ''Z3VhZ2UpLHZ0KWlmKCJkYXRhIiE9PXRyJiYibGFuZ3VhZ2UiIT09dHIpaWYoImNsYXNzTmFtZSI9PT10cilhaSgiY2xhc3NOYW1lIix2dC5jbGFzc05hbWUpO2Vsc2UgaWYoInRhYmxlQ2xhc3NOYW1lIj09PXRyJiZmLnRhYmxlKWFpKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05h''@;'; put 'put ''bWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpO2Vsc2UgaWYoU2EuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKHRyKXx8U2EuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKHRyKSl7Y29uc3QgcG49dnRbdHJdO21sKHBuKT8oU2EuZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkuYWRkQXNGaXhlZCh0cixwbixmKSxkdFt0cl09cG4pOkFycmF5LmlzQXJyYXkocG4pJiYoU2EuZ2V0U2luZ2xldG9uKCkuYWRkKHRyLHBuLGYpLGR0W3RyXT1wbil9ZWxzZSFOdCYmVHUodnQsdHIpJiYoSnRbdHJdPXZ0W3RyXSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAw''@;'; put 'put ''PT09ZHQuZGF0YT9IdChudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/SHQodnQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5jb2x1bW5zJiYoTS5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMoKSk7Y29uc3QgSHI9Zi5jb3VudENvbHMoKSxx''@;'; put 'put ''cj1kdC5jb2x1bW5zO2lmKHFyJiZtbChxcikmJihIbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5jb2x1bW5zKSYmcHQuY2xlYXJDYWNoZSgpLEhyPjApZm9yKHRyPTAsYXI9MDt0cjxIcjt0cisrKXtpZihxcil7Y29uc3QgcG49SG4/cXIo''@;'; put 'put ''dHIpOnFyW2FyXTtwbiYmcHQudXBkYXRlQ29sdW1uTWV0YShhcixwbil9YXIrPTF9UGEodnQuY2VsbCkmJlhvKHZ0LmNlbGwscG49PntmLnNldENlbGxNZXRhT2JqZWN0KHBuLnJvdyxwbi5jb2wscG4pfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJlc2V0Iik7bGV0IG9uPWYucm9vdEVs''@;'; put 'put ''ZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09b24mJihvbj1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpO2xldCBibj12dC5oZWlnaHQ7aWYobWwoYm4pJiYoYm49Ym4oKSksTnQmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50''@;'; put 'put ''LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxudWxsPT09Ym4pe2NvbnN0IHBuPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO3BuJiYocG4uaW5kZXhPZigiaGVpZ2h0Iik+''@;'; put 'put ''LTF8fHBuLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIscG4pOihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PWJuJiYoZi5yb290RWxlbWVu''@;'; put 'put ''dC5zdHlsZS5oZWlnaHQ9aXNOYU4oYm4pP2Ake2JufWA6YCR7Ym59cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiB2dC53aWR0aDwidSIpe2xldCBwbj12dC53aWR0aDttbChwbikmJihwbj1wbigpKSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRo''@;'; put 'put ''PWlzTmFOKHBuKT9gJHtwbn1gOmAke3BufXB4YH1pZighTnQpe2lmKGYudmlldyl7Zi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKTtjb25zdCBwbj1mLmdldEN1''@;'; put 'put ''cnJlbnRUaGVtZU5hbWUoKSxwcj1UdSh2dCwidGhlbWVOYW1lIik7cG4mJnByJiZwbiE9PXZ0LnRoZW1lTmFtZSYmKGYudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkucmVtb3ZlQ2xhc3NOYW1lcygpLGYudmlldy5yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQocG4pKTtjb25zdCAk''@;'; put 'put ''bj1wciYmdnQudGhlbWVOYW1lfHxNcGUoZi5yb290RWxlbWVudCk7Zi51c2VUaGVtZSgkbiksZi52aWV3LmFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQoZi5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KX1HLmFkanVzdFJvd3NB''@;'; put 'put ''bmRDb2xzKCksZi52aWV3JiYhRWUmJihmLnJlbmRlcigpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSksIU50JiZmLnZpZXcmJigiIj09PW9ufHwiIj09PWJufHx2b2lkIDA9PT1ibikmJm9uIT09Ym4mJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWlu''@;'; put 'put ''U2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVjdGVkTGFzdCgpO2lmKGR0LmdldFZhbHVlKXtpZihtbChkdC5nZXRWYWx1ZSkpcmV0dXJuIGR0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0''@;'; put 'put ''WzBdWzBdXVtkdC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFdKX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBkdH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVk''@;'; put 'put ''Q2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxOdCxIdCxIbix0cil7Ry5hbHRlcih2dCxOdCxIdCxIbix0cil9LHRoaXMuZ2V0Q2VsbD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sSG49''@;'; put 'put ''TnQsdHI9dnQ7aWYoTnQ+PTApe2lmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KSkpcmV0dXJuIG51bGw7SG49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE50KX1pZih2dD49MCl7aWYo''@;'; put 'put ''dGhpcy5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxSb3codnQpKSlyZXR1cm4gbnVsbDt0cj10aGlzLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodnQpfXJldHVybiBudWxsPT09dHJ8fG51bGw9PT1Ibnx8dm9pZCAwPT09dHJ8fHZv''@;'; put 'put ''aWQgMD09PUhuP251bGw6Zi52aWV3LmdldENlbGxBdENvb3JkcyhmLl9jcmVhdGVDZWxsQ29vcmRzKHRyLEhuKSxIdCl9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29vcmRzKHZ0KTtpZihudWxsPT09TnQpcmV0dXJuIG51''@;'; put 'put ''bGw7Y29uc3R7cm93Okh0LGNvbDpIbn09TnQ7bGV0IHRyPUh0LGFyPUhuO3JldHVybiBIdD49MCYmKHRyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChIdCkpLEhuPj0wJiYoYXI9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KEhuKSksZi5fY3JlYXRlQ2VsbENvb3Jkcyh0cixhcil9LHRoaXMuY29sVG9Qcm9wPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5jb2xUb1Byb3AodnQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih2dCl7cmV0dXJuIE0ucHJvcFRvQ29sKHZ0KX0sdGhpcy50b1Zpc3VhbFJv''@;'; put 'put ''dz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1Zpc3VhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsUm93PXZ0PT50aGlzLnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJu''@;'; put 'put ''IE0uZ2V0KHZ0LE0uY29sVG9Qcm9wKE50KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIE0uZ2V0KHZ0LE50KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odnQpe2NvbnN0IE50PVtdLEh0PU0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcygw''@;'; put 'put ''LHZ0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0LmRhdGEubGVuZ3RoLTEsdnQpLE0uREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgSG49MDtIbjxIdC5sZW5ndGg7SG4rPTEpZm9yKGxldCB0cj0wO3RyPEh0W0huXS5sZW5ndGg7dHIrPTEpTnQucHVzaChIdFtIbl1bdHJdKTtyZXR1cm4g''@;'; put 'put ''TnR9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9W10sSHQ9TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsTS5wcm9wVG9Db2wodnQpKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGR0LmRhdGEubGVuZ3RoLTEsTS5wcm9wVG9Db2wodnQpKSxNLkRFU1RJTkFU''@;'; put 'put ''SU9OX1JFTkRFUkVSKTtmb3IobGV0IEhuPTA7SG48SHQubGVuZ3RoO0huKz0xKWZvcihsZXQgdHI9MDt0cjxIdFtIbl0ubGVuZ3RoO3RyKz0xKU50LnB1c2goSHRbSG5dW3RyXSk7cmV0dXJuIE50fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1''@;'; put 'put ''cm4gdHI9dm9pZCAwPT09dnQ/SS5nZXREYXRhKCk6SS5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoSHQsSG4pKSx0cn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cjtyZXR1cm4gdHI9''@;'; put 'put ''dm9pZCAwPT09dnQ/SS5nZXREYXRhKCEwKTpJLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbiksITApLHRyfSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1mdW5jdGlvbih2dCl7cmV0dXJuIEkuZ2V0QXRDb2x1bW4odnQpfSx0''@;'; put 'put ''aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2NvbnN0IHRyPUlyKHZ0LE50LEh0KSxhcj10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLEhyPVtdO2FyJiZZbih0cixvbj0+e2xldFtibixwbixwcl09b247SHIucHVzaChbYm4scG4s''@;'; put 'put ''SS5nZXRBdENlbGwoYm4scG4pLHByXSl9KSxZbih0cixvbj0+e2xldFtibixwbixwcl09b247SS5zZXRBdENlbGwoYm4scG4scHIpfSksYXImJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsSHIsSG4pLHRoaXMucmVuZGVyKCk7Y29uc3QgcXI9Zi5nZXRBY3RpdmVF''@;'; put 'put ''ZGl0b3IoKTtxciYmUGEocXIucmVmcmVzaFZhbHVlKSYmcXIucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gSS5nZXRBdFJvdyh2dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCl7cmV0dXJuIEkuZ2V0''@;'; put 'put ''QXRDZWxsKHZ0LE50KX0sdGhpcy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBNLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsMCksZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCx0aGlzLmNvdW50Q29scygpLTEpLE0uREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0s''@;'; put 'put ''dGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9dm9pZCAwPT09dnQ/WzAsMCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt2dCxOdCxIdCxIbl0sW2FyLEhyXT10cjtsZXRbLCxxcixvbl09dHIsYm49bnVsbCxwbj1udWxsO3ZvaWQgMD09''@;'; put 'put ''PXFyJiYocXI9YXIpLHZvaWQgMD09PW9uJiYob249SHIpO2xldCBwcj0ibWl4ZWQiO3JldHVybiBHYShNYXRoLm1heChNYXRoLm1pbihhcixxciksMCksTWF0aC5tYXgoYXIscXIpLCRuPT57bGV0IGRyPSEwO3JldHVybiBHYShNYXRoLm1heChNYXRoLm1pbihIcixvbiksMCksTWF0aC5tYXgo''@;'; put 'put ''SHIsb24pLFVyPT4ocG49dGhpcy5nZXRDZWxsTWV0YSgkbixVcikudHlwZSxibj9kcj1ibj09PXBuOmJuPXBuLGRyKSkscHI9ZHI/cG46Im1peGVkIixkcn0pLHByfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LEh0KXtjb25zdFtIbix0cl09W3RoaXMudG9QaHlzaWNhbFJv''@;'; put 'put ''dyh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KV07bGV0IGFyPXB0LmdldENlbGxNZXRhS2V5VmFsdWUoSG4sdHIsSHQpOyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LEh0LGFyKSYmKHB0LnJlbW92ZUNlbGxNZXRhKEhuLHRyLEh0KSxmLnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlclJlbW92ZUNlbGxNZXRhIix2dCxOdCxIdCxhcikpLGFyPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNNZXRhPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBIdD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLEhuPW5ldyBBcnJheShIdD4yP0h0LTI6MCksdHI9Mjt0cjxIdDt0cisrKUhuW3RyLTJdPWFyZ3VtZW50c1t0cl07aWYoSG4ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KEhuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRv''@;'; put 'put ''IGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtOdD4wJiZwdC5yZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSxOdCksSG4ubGVuZ3RoPjAmJlluKEhuLnJldmVyc2UoKSxhcj0+e3B0LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3co''@;'; put 'put ''dnQpKSxZbihhciwoSHIscXIpPT50aGlzLnNldENlbGxNZXRhT2JqZWN0KHZ0LHFyLEhyKSl9KSxmLnJlbmRlcigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHZ0LE50LEh0KXsib2JqZWN0Ij09dHlwZW9mIEh0JiZYbyhIdCwoSG4sdHIpPT57dGhpcy5zZXRDZWxsTWV0YSh2''@;'; put 'put ''dCxOdCx0cixIbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7aWYoITE9PT1mLnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pKXJldHVybjtsZXQgYXI9dnQsSHI9TnQ7dnQ8dGhpcy5jb3VudFJvd3MoKSYmKGFyPXRoaXMudG9QaHlz''@;'; put 'put ''aWNhbFJvdyh2dCkpLE50PHRoaXMuY291bnRDb2xzKCkmJihIcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpKSxwdC5zZXRDZWxsTWV0YShhcixIcixIdCxIbiksZi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdnQsTnQsSHQsSG4pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBwdC5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7c2tpcE1ldGFFeHRlbnNpb246ITF9LEhuPXRoaXMudG9QaHlzaWNhbFJv''@;'; put 'put ''dyh2dCksdHI9dGhpcy50b1BoeXNpY2FsQ29sdW1uKE50KTtyZXR1cm4gbnVsbD09PUhuJiYoSG49dnQpLG51bGw9PT10ciYmKHRyPU50KSxwdC5nZXRDZWxsTWV0YShIbix0cix7dmlzdWFsUm93OnZ0LHZpc3VhbENvbHVtbjpOdCwuLi5IdH0pfSx0aGlzLmdldENvbHVtbk1ldGE9ZnVuY3Rp''@;'; put 'put ''b24odnQpe3JldHVybiBwdC5nZXRDb2x1bW5NZXRhKHRoaXMudG9QaHlzaWNhbENvbHVtbih2dCkpfSx0aGlzLmdldENlbGxNZXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBwdC5nZXRDZWxsc01ldGFBdFJvdyh2dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fGR0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJlcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS5yZW5kZXJlcjp2dC5yZW5kZXJlcjtyZXR1cm4i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIEh0P1FPKEh0KTpfYyhIdCk/UU8oInRleHQiKTpIdH0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLmVkaXRvcjp2dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBIdD9XTyhIdCk6X2MoSHQpP1dPKCJ0ZXh0Iik6SHR9LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlvbih2dCxOdCl7Y29uc3QgSHQ9Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE50KS52YWxpZGF0b3I6dnQudmFsaWRhdG9yO3JldHVybiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgSHQ/cksoSHQpOkh0fSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQpe3RoaXMuX3ZhbGlkYXRlQ2VsbHModnQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dz''@;'; put 'put ''IHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdnQpfSx0aGlzLnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih2dCxOdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRl''@;'; put 'put ''ciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoTnQsdm9pZCAwLHZ0KX0sdGhpcy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCxOdCxIdCl7Y29uc3QgSG49bmV3IF9pO3Z0JiYoSG4ub25RdWV1ZUVtcHR5PXZ0KTtsZXQgdHI9Zi5jb3VudFJvd3Mo''@;'; put 'put ''KS0xO2Zvcig7dHI+PTA7KXtpZih2b2lkIDAhPT1OdCYmLTE9PT1OdC5pbmRleE9mKHRyKSl7dHItPTE7Y29udGludWV9bGV0IGFyPWYuY291bnRDb2xzKCktMTtmb3IoO2FyPj0wOyl2b2lkIDA9PT1IdHx8LTEhPT1IdC5pbmRleE9mKGFyKT8oSG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYu''@;'; put 'put ''dmFsaWRhdGVDZWxsKGYuZ2V0RGF0YUF0Q2VsbCh0cixhciksZi5nZXRDZWxsTWV0YSh0cixhciksSHI9PntpZigiYm9vbGVhbiIhPXR5cGVvZiBIcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09SHImJihIbi52YWxpZD0h''@;'; put 'put ''MSksSG4ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksYXItPTEpOmFyLT0xO3RyLT0xfUhuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1kdC5yb3dIZWFkZXJzLEh0PXZ0O3JldHVybiB2b2lk''@;'; put 'put ''IDAhPT1IdCYmKEh0PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsSHQpKSx2b2lkIDA9PT1IdD8oTnQ9W10sR2EoZi5jb3VudFJvd3MoKS0xLEhuPT57TnQucHVzaChmLmdldFJvd0hlYWRlcihIbikpfSkpOkFycmF5LmlzQXJyYXkoTnQpJiZ2b2lkIDAhPT1OdFtIdF0/TnQ9TnRbSHRd''@;'; put 'put ''Om1sKE50KT9OdD1OdChIdCk6TnQmJiJzdHJpbmciIT10eXBlb2YgTnQmJiJudW1iZXIiIT10eXBlb2YgTnQmJihOdD1IdCsxKSxOdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFkdC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihu''@;'; put 'put ''dWxsIT1kdC5jb2xIZWFkZXJzKXJldHVybiEhZHQuY29sSGVhZGVycztmb3IobGV0IHZ0PTAsTnQ9Zi5jb3VudENvbHMoKTt2dDxOdDt2dCsrKWlmKGYuZ2V0Q29sSGVhZGVyKHZ0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Q29sSGVhZGVyIix2dCk7aWYodm9pZCAwPT09SHQpe2NvbnN0IHFyPVtdLG9uPWYuY291bnRDb2xzKCk7Zm9yKGxldCBibj0wO2JuPG9uO2JuKysp''@;'; put 'put ''cXIucHVzaChmLmdldENvbEhlYWRlcihibikpO3JldHVybiBxcn1sZXQgSG49ZHQuY29sSGVhZGVycztjb25zdCBhcj1mLnRvUGh5c2ljYWxDb2x1bW4oSHQpLEhyPWZ1bmN0aW9uKHFyKXtjb25zdCBvbj1bXSxibj1mLmNvdW50Q29scygpO2xldCBwbj0wO2Zvcig7cG48Ym47cG4rKyltbChk''@;'; put 'put ''dC5jb2x1bW5zKSYmZHQuY29sdW1ucyhwbikmJm9uLnB1c2gocG4pO3JldHVybiBvbltxcl19KGFyKTtyZXR1cm4hMT09PWR0LmNvbEhlYWRlcnM/SG49bnVsbDpkdC5jb2x1bW5zJiZtbChkdC5jb2x1bW5zKSYmZHQuY29sdW1ucyhIcikmJmR0LmNvbHVtbnMoSHIpLnRpdGxlP0huPWR0LmNv''@;'; put 'put ''bHVtbnMoSHIpLnRpdGxlOmR0LmNvbHVtbnMmJmR0LmNvbHVtbnNbYXJdJiZkdC5jb2x1bW5zW2FyXS50aXRsZT9Ibj1kdC5jb2x1bW5zW2FyXS50aXRsZTpBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1kdC5jb2xIZWFkZXJzW2FyXT9Ibj1kdC5jb2xIZWFkZXJzW2Fy''@;'; put 'put ''XTptbChkdC5jb2xIZWFkZXJzKT9Ibj1kdC5jb2xIZWFkZXJzKGFyKTpkdC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlwZW9mIGR0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgZHQuY29sSGVhZGVycyYmKEhuPWhQKEh0KSksSG49Zi5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVy''@;'; put 'put ''VmFsdWUiLEhuLHZ0LE50KSxIbn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBOdDtpZih2dD49MCYmKE50PWYuZ2V0Q2VsbE1ldGEoMCx2dCkud2lkdGgpLCh2b2lkIDA9PT1OdHx8TnQ9PT1kdC53aWR0aCkmJihOdD1kdC5jb2xXaWR0aHMpLG51bGwh''@;'; put 'put ''PU50KXtzd2l0Y2godHlwZW9mIE50KXtjYXNlIm9iamVjdCI6TnQ9TnRbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk50PU50KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE50JiYoTnQ9cGFyc2VJbnQoTnQsMTApKX1yZXR1cm4gTnR9LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odnQsTnQpe2xl''@;'; put 'put ''dCBIdD1mLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIEh0PWYucnVuSG9va3MoIm1vZGlmeUNvbFdpZHRoIixIdCx2dCxOdCksdm9pZCAwPT09SHQmJihIdD1fXyksSHR9LHRoaXMuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9dGhp''@;'; put 'put ''cy52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgSHQ9ZHQucm93SGVpZ2h0cztpZihudWxsIT1IdCl7c3dpdGNoKHR5cGVvZiBIdCl7Y2FzZSJvYmplY3QiOkh0PUh0W3Z0XTticmVhaztjYXNlImZ1bmN0aW9uIjpIdD1IdCh2dCl9InN0cmluZyI9PXR5cGVvZiBIdCYmKEh0PXBhcnNl''@;'; put 'put ''SW50KEh0LDEwKSl9cmV0dXJuIG51bGwhPUh0JiZIdDxOdD9OdDpIdH0sdGhpcy5nZXRSb3dIZWlnaHQ9ZnVuY3Rpb24odnQsTnQpe2xldCBIdD1mLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3ModnQpO3JldHVybiBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHQiLEh0LHZ0LE50KSxI''@;'; put 'put ''dH0sdGhpcy5jb3VudFNvdXJjZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gSS5jb3VudFJvd3MoKX0sdGhpcy5jb3VudFNvdXJjZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gSS5jb3VudEZpcnN0Um93S2V5cygpfSx0aGlzLmNvdW50Um93cz1mdW5jdGlvbigpe3JldHVybiBNLmdldExlbmd0aCgp''@;'; put 'put ''fSx0aGlzLmNvdW50Q29scz1mdW5jdGlvbigpe2NvbnN0IHZ0PWR0Lm1heENvbHMsTnQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbih2dCxOdCl9LHRoaXMuY291bnRSZW5kZXJlZFJvd3M9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTotMX0sdGhpcy5jb3VudFZpc2libGVSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVSb3dzQ291bnQoKTot''@;'; put 'put ''MX0sdGhpcy5jb3VudFJlbmRlcmVkQ29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZUNvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3''@;'; put 'put ''bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpOi0xfSx0aGlzLmNvdW50Um93SGVhZGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXcuZ2V0Um93SGVhZGVyc0NvdW50KCl9LHRoaXMuY291bnRDb2xIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIFgkKGYuY291bnRSb3dzKCktMSxIdD0+e2lmKGYu''@;'; put 'put ''aXNFbXB0eVJvdyhIdCkpTnQrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxOdD0wO3JldHVybiBYJChmLmNv''@;'; put 'put ''dW50Q29scygpLTEsSHQ9PntpZihmLmlzRW1wdHlDb2woSHQpKU50Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE50fSx0aGlzLmlzRW1wdHlSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBkdC5pc0VtcHR5Um93LmNhbGwoZix2dCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7''@;'; put 'put ''cmV0dXJuIGR0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtsZXQgdHI9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxhcj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFfYyh2dCkmJiFfYyhOdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxOdCxIdCxIbl1dLHRyLGFyKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXT9hcmd1bWVudHNbMF06W1tdXSxIdD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiZ5ZS5zdXNw''@;'; put 'put ''ZW5kKCk7Y29uc3QgSG49R3Iuc2VsZWN0Q2VsbHModnQpO3JldHVybiBIbiYmSHQmJmYubGlzdGVuKCkseWUucmVzdW1lKCksSG59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih2dCl7cmV0dXJuIEdyLnNlbGVjdENvbHVtbnModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gR3Iuc2VsZWN0Um93cyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe0dyLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0LEh0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO3llLnNraXBOZXh0U2Nyb2xsQ3ljbGUoKSxHci5zZWxlY3RB''@;'; put 'put ''bGwodnQsTnQsSHQpfTtjb25zdCB3aT0odnQsTnQpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTnQsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE50KXt2YXIgSHQ7Im51bWJlciI9PXR5cGVvZiB2dCYmKHZ0PXtyb3c6YXJndW1lbnRzWzBdLGNvbDphcmd1''@;'; put 'put ''bWVudHNbMV0sdmVydGljYWxTbmFwOmFyZ3VtZW50c1syXT8iYm90dG9tIjoidG9wIixob3Jpem9udGFsU25hcDphcmd1bWVudHNbM10/ImVuZCI6InN0YXJ0Iixjb25zaWRlckhpZGRlbkluZGV4ZXM6bnVsbD09PShIdD1hcmd1bWVudHNbNF0pfHx2b2lkIDA9PT1IdHx8SHR9KTtjb25zdHty''@;'; put 'put ''b3c6SG4sY29sOnRyLGNvbnNpZGVySGlkZGVuSW5kZXhlczphcn09dnQ/P3t9O2xldCBIcj1Ibixxcj10cjtpZihtbChOdCkmJnRoaXMuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIixOdCksdm9pZCAwPT09YXJ8fGFyKXtjb25zdCBwcj1OdW1iZXIuaXNJbnRlZ2VyKEhuKSYmSG4+PTAsJG49''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcih0cikmJnRyPj0wLGRyPXByP3dpKHRoaXMucm93SW5kZXhNYXBwZXIsSG4pOnZvaWQgMCxVcj0kbj93aSh0aGlzLmNvbHVtbkluZGV4TWFwcGVyLHRyKTp2b2lkIDA7aWYobnVsbD09PWRyfHxudWxsPT09VXIpcmV0dXJuITE7SHI9cHI/Zi5yb3dJbmRleE1hcHBl''@;'; put 'put ''ci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGRyKTpIbixxcj0kbj9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVXIpOnRyfWNvbnN0IG9uPU51bWJlci5pc0ludGVnZXIoSHIpLGJuPU51bWJlci5pc0ludGVnZXIocXIpO2xldCBwbj0hMTty''@;'; put 'put ''ZXR1cm4gb24mJkhyPj0wJiZibiYmcXI+PTA/cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0KGYuX2NyZWF0ZUNlbGxDb29yZHMoSHIscXIpLHZ0Lmhvcml6b250YWxTbmFwLHZ0LnZlcnRpY2FsU25hcCk6b24mJkhyPj0wJiYoYm4mJnFyPDB8fCFibik/cG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0''@;'; put 'put ''VmVydGljYWxseShIcix2dC52ZXJ0aWNhbFNuYXApOmJuJiZxcj49MCYmKG9uJiZIcjwwfHwhb24pJiYocG49Zi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KHFyLHZ0Lmhvcml6b250YWxTbmFwKSksbWwoTnQpJiYocG4/dGhpcy52aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhv''@;'; put 'put ''b2soImFmdGVyU2Nyb2xsIixOdCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9Pk50KCkpKSkscG59LHRoaXMuc2Nyb2xsVG9Gb2N1c2VkQ2VsbD1mdW5jdGlvbih2dCl7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTttbCh2dCkmJnRoaXMuYWRkSG9va09uY2Uo''@;'; put 'put ''ImFmdGVyU2Nyb2xsIix2dCk7Y29uc3R7aGlnaGxpZ2h0Ok50fT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksSHQ9dGhpcy5zY3JvbGxWaWV3cG9ydFRvKE50LnRvT2JqZWN0KCkpO3JldHVybiBIdD90aGlzLnZpZXcucmVuZGVyKCk6bWwodnQpJiYodGhpcy5yZW1vdmVIb29rKCJhZnRl''@;'; put 'put ''clNjcm9sbCIsdnQpLHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrKCgpPT52dCgpKSksSHR9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2lmKGYuX2NsZWFyVGltZW91dHMoKSxmLl9jbGVhckltbWVkaWF0ZXMoKSxmLnZpZXcmJmYudmlldy5kZXN0cm95KCksSSYmSS5kZXN0cm95KCksST1udWxs''@;'; put 'put ''LHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZGVzdHJveSgpLHB0LmNsZWFyQ2FjaGUoKSxEWC5kZWxldGUodGhpcy5ndWlkKSxjUChmKSl7Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO3Z0JiZ2dC5wYXJlbnRO''@;'; put 'put ''b2RlLnJlbW92ZUNoaWxkKHZ0KX14cChmLnJvb3RFbGVtZW50KSx2LmRlc3Ryb3koKSxpZSYmaWUuZGVzdHJveSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxmLmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSx2bi5nZXRJ''@;'; put 'put ''dGVtcygpLmZvckVhY2godnQ9PntsZXRbLE50XT12dDtOdC5kZXN0cm95KCl9KSx2bi5jbGVhcigpLGYucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksU2EuZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxYbyhmLCh2dCxOdCxIdCk9PnttbCh2dCk/SHRbTnRdPWZ1bmN0aW9uIGVhKHZ0''@;'; put 'put ''KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJvcihgVGhlICIke3Z0fSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19KE50KToiZ3VpZCIhPT1OdCYmKEh0W050XT1udWxsKX0pLGYuaXNEZXN0''@;'; put 'put ''cm95ZWQ9ITAsTSYmTS5kZXN0cm95KCksTT1udWxsLEc9bnVsbCxHcj1udWxsLGllPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiBpZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdz1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl9LHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW49''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldEZpcnN0RnVs''@;'; put 'put ''bHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdEZ1bGx5Vmlz''@;'; put 'put ''aWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RQ''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKX0sdGhp''@;'; put 'put ''cy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlh''@;'; put 'put ''bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldFBsdWdpbj1mdW5jdGlvbih2dCl7cmV0dXJuIHZuLmdldEl0ZW0ocDEodnQpKX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdnQ9PT10aGlzLnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lO''@;'; put 'put ''X0tFWTp2bi5nZXRJZCh2dCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKHZ0LE50LEh0KXtTYS5nZXRTaW5nbGV0b24oKS5hZGQodnQsTnQsZixIdCl9LHRoaXMuaGFzSG9vaz1mdW5jdGlvbih2dCl7cmV0dXJuIFNhLmdldFNp''@;'; put 'put ''bmdsZXRvbigpLmhhcyh2dCxmKXx8U2EuZ2V0U2luZ2xldG9uKCkuaGFzKHZ0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbih2dCxOdCxIdCl7U2EuZ2V0U2luZ2xldG9uKCkub25jZSh2dCxOdCxmLEh0KX0sdGhpcy5yZW1vdmVIb29rPWZ1bmN0aW9uKHZ0LE50KXtTYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZW1vdmUodnQsTnQsZil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIsYXIsSHIpe3JldHVybiBTYS5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxOdCxIdCxIbix0cixhcixIcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxOdCl7cmV0''@;'; put 'put ''dXJuIFozZShkdC5sYW5ndWFnZSx2dCxOdCl9LHRoaXMudG9IVE1MPSgpPT5LJCh0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHZ0Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdp''@;'; put 'put ''biIsSyQodGhpcykpLHZ0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMudXNlVGhlbWU9dnQ9Pnt0aGlzLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLnVzZVRoZW1lKHZ0KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNldFRoZW1lIix2dCwhIUVlKX0sdGhpcy5nZXRDdXJy''@;'; put 'put ''ZW50VGhlbWVOYW1lPSgpPT50aGlzLnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLmdldFRoZW1lTmFtZSgpLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbih2dCl7bGV0IEh0PXZ0OyJmdW5jdGlvbiI9PXR5cGVvZiBIdCYmKEh0PXNldFRpbWVvdXQoSHQsYXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goSHQpfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7WW4odGhpcy50aW1lb3V0cyx2dD0+e2NsZWFyVGltZW91dCh2dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3Jl''@;'; put 'put ''Z2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHZ0KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUodnQpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7WW4odGhpcy5pbW1lZGlhdGVzLHZ0PT57Y2xlYXJJbW1lZGlhdGUodnQpfSl9LHRoaXMuX3JlZ2lzdGVyTWlj''@;'; put 'put ''cm90YXNrPWZ1bmN0aW9uKHZ0KXt0aGlzLnJvb3RXaW5kb3cucXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmlzRGVzdHJveWVkfHx2dCgpfSl9LHRoaXMuX2dldEVkaXRvck1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaWV9O2NvbnN0IGZhPXFydCh7aGFuZGxlRXZlbnQ6KCk9PmYuaXNMaXN0''@;'; put 'put ''ZW5pbmcoKSxiZWZvcmVLZXlEb3duOnZ0PT50aGlzLnJ1bkhvb2tzKCJiZWZvcmVLZXlEb3duIix2dCksYWZ0ZXJLZXlEb3duOnZ0PT57dGhpcy5pc0Rlc3Ryb3llZHx8Zi5ydW5Ib29rcygiYWZ0ZXJEb2N1bWVudEtleURvd24iLHZ0KX0sb3duZXJXaW5kb3c6dGhpcy5yb290V2luZG93fSk7''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLHZ0PT57ITE9PT12dC5jdHJsS2V5JiYhMT09PXZ0Lm1ldGFLZXkmJmZhLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZmF9LHRoaXMuZ2V0Rm9jdXNNYW5h''@;'; put 'put ''Z2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHVlfSxuSygpLmZvckVhY2godnQ9Pntjb25zdCBOdD1JRSh2dCk7dm4uYWRkSXRlbSh2dCxuZXcgTnQodGhpcykpfSksZnVuY3Rpb24gS2l0KGMpe1skaXQsR2l0XS5mb3JFYWNoKGw9PmwoYykpfShmKSxmYS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3Jp''@;'; put 'put ''ZCIpLFNhLmdldFNpbmdsZXRvbigpLnJ1bihmLCJjb25zdHJ1Y3QiKX1mdW5jdGlvbiBFcGUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFRwZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gVlAoYyl7cmV0dXJuIGMub3du''@;'; put 'put ''ZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGMpfWZ1bmN0aW9uIEFwZShjKXtjb25zdCBhPXttaW5IZWlnaHQ6MjAwLG1heEhlaWdodDozMDAsbWluV2lkdGg6MTAwLG1heFdpZHRoOjMwMCx0ZXh0Q29udGVudDp1ZT0+dWUudmFsdWUsLi4uYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9fSxkPWMuYm9keSxoPWMuY3JlYXRlVGV4dE5vZGUoIiIpLGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7bGV0IHY7ZnVuY3Rpb24gTSgpe3ZhciB1ZSx5ZTtoLnRleHRDb250ZW50PWEudGV4dENvbnRlbnQodiksZi5z''@;'; put 'put ''dHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUuZm9udFNpemU9VlAodikuZm9udFNpemUsZi5zdHlsZS5mb250RmFtaWx5PVZQKHYpLmZvbnRGYW1pbHksZi5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGQuYXBwZW5kQ2hpbGQoZik7Y29uc3QgRWU9cGFyc2VJbnQoKG51bGw9PT0odWU9''@;'; put 'put ''VlAodikpfHx2b2lkIDA9PT11ZT92b2lkIDA6dWUucGFkZGluZ0lubGluZVN0YXJ0KXx8MCwxMCksamU9cGFyc2VJbnQoKG51bGw9PT0oeWU9VlAodikpfHx2b2lkIDA9PT15ZT92b2lkIDA6eWUucGFkZGluZ0lubGluZUVuZCl8fDAsMTApLHFlPWYuY2xpZW50V2lkdGgrRWUramUrMTtkLnJl''@;'; put 'put ''bW92ZUNoaWxkKGYpO2NvbnN0IHJ0PXYuc3R5bGU7cnQuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCxydC53aWR0aD1hLm1pbldpZHRoPnFlP2Ake2EubWluV2lkdGh9cHhgOnFlPmEubWF4V2lkdGg/YCR7YS5tYXhXaWR0aH1weGA6YCR7cWV9cHhgO2NvbnN0IHB0PXYuc2Nyb2xsSGVpZ2h0''@;'; put 'put ''P3Yuc2Nyb2xsSGVpZ2h0LTE6MDthLm1pbkhlaWdodD5wdD9ydC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgOmEubWF4SGVpZ2h0PHB0PyhydC5oZWlnaHQ9YCR7YS5tYXhIZWlnaHR9cHhgLHJ0Lm92ZXJmbG93WT0idmlzaWJsZSIpOnJ0LmhlaWdodD1gJHtwdH1weGB9ZnVuY3Rpb24gSSgp''@;'; put 'put ''e2MuZGVmYXVsdFZpZXcuc2V0VGltZW91dChNLDApfXJldHVybntpbml0OmZ1bmN0aW9uIGllKHVlLHllKXtsZXQgRWU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2PXVlLGZ1bmN0aW9uIEcodWUpe2lmKHVlJiZ1ZS5taW5IZWlnaHQp''@;'; put 'put ''aWYoImluaGVyaXQiPT09dWUubWluSGVpZ2h0KWEubWluSGVpZ2h0PXYuY2xpZW50SGVpZ2h0O2Vsc2V7Y29uc3QgeWU9cGFyc2VJbnQodWUubWluSGVpZ2h0LDEwKTtpc05hTih5ZSl8fChhLm1pbkhlaWdodD15ZSl9aWYodWUmJnVlLm1heEhlaWdodClpZigiaW5oZXJpdCI9PT11ZS5tYXhI''@;'; put 'put ''ZWlnaHQpYS5tYXhIZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCB5ZT1wYXJzZUludCh1ZS5tYXhIZWlnaHQsMTApO2lzTmFOKHllKXx8KGEubWF4SGVpZ2h0PXllKX1pZih1ZSYmdWUubWluV2lkdGgpaWYoImluaGVyaXQiPT09dWUubWluV2lkdGgpYS5taW5XaWR0aD12LmNsaWVu''@;'; put 'put ''dFdpZHRoO2Vsc2V7Y29uc3QgeWU9cGFyc2VJbnQodWUubWluV2lkdGgsMTApO2lzTmFOKHllKXx8KGEubWluV2lkdGg9eWUpfWlmKHVlJiZ1ZS5tYXhXaWR0aClpZigiaW5oZXJpdCI9PT11ZS5tYXhXaWR0aClhLm1heFdpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCB5ZT1wYXJzZUlu''@;'; put 'put ''dCh1ZS5tYXhXaWR0aCwxMCk7aXNOYU4oeWUpfHwoYS5tYXhXaWR0aD15ZSl9Zi5maXJzdENoaWxkfHwoZi5jbGFzc05hbWU9ImF1dG9SZXNpemUiLGYuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIixmLmFwcGVuZENoaWxkKGgpKX0oeWUpLCJURVhUQVJFQSI9PT12Lm5vZGVOYW1lJiYo''@;'; put 'put ''di5zdHlsZS5yZXNpemU9Im5vbmUiLHYuc3R5bGUuaGVpZ2h0PWAke2EubWluSGVpZ2h0fXB4YCx2LnN0eWxlLm1pbldpZHRoPWAke2EubWluV2lkdGh9cHhgLHYuc3R5bGUubWF4V2lkdGg9YCR7YS5tYXhXaWR0aH1weGAsdi5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLEVlJiYoRXBlKHYs''@;'; put 'put ''ImlucHV0IixNKSxFcGUodiwia2V5ZG93biIsSSkpLE0oKX0scmVzaXplOk0sdW5PYnNlcnZlKCl7VHBlKHYsImlucHV0IixNKSxUcGUodiwia2V5ZG93biIsSSl9fX1mdW5jdGlvbiBrcGUoYyxsKXtjb25zdCBhPVMkKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3Io''@;'; put 'put ''bGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7MCE9PXYmJihmKz1kW3YtMV0ubGVuZ3RoKzEpO2NvbnN0IEk9ZitkW3ZdLmxlbmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPUkpLGE8PUkpYnJlYWt9d0UobCxoKX1mdW5jdGlvbiBpOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''cWl0KGMpe3ZhciBsPWZ1bmN0aW9uIFhpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQlA9Imh0X2VkaXRvcl9oaWRkZW4iLERwZT0idGV4dEVkaXRvciI7Y2xhc3MgYTkgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVE''@;'; put 'put ''SVRPUl9UWVBFKCl7cmV0dXJuInRleHQifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGk5KHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxpOSh0aGlzLCJhdXRvUmVzaXplIixBcGUodGhpcy5ob3Qucm9vdERvY3VtZW50KSksaTkodGhpcywiVEVYVEFSRUEiLHZvaWQgMCksaTko''@;'; put 'put ''dGhpcywidGV4dGFyZWFTdHlsZSIsdm9pZCAwKSxpOSh0aGlzLCJURVhUQVJFQV9QQVJFTlQiLHZvaWQgMCksaTkodGhpcywidGV4dGFyZWFQYXJlbnRTdHlsZSIsdm9pZCAwKSxpOSh0aGlzLCJsYXllckNsYXNzIix2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqMih0aGlzKSx0aGlz''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFsdWU9bH1v''@;'; put 'put ''cGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLmF1dG9SZXNp''@;'; put 'put ''emUudW5PYnNlcnZlKCksdkUodGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdGhpcy5ob3Qucm9vdEVsZW1lbnQpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKX1wcmVwYXJlKGwsYSxkLGgs''@;'; put 'put ''Zix2KXtjb25zdCBNPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksIXYucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpJfT12O0kmJiF0aGlzLmlzT3BlbmVkKCkmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxN''@;'; put 'put ''IT09bHUuRklOSVNIRUQmJiF0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpfX1iZWdpbkVkaXRpbmcobCxhKXt0aGlzLnN0YXRlPT09bHUuVklSR0lOJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIixzdXBlci5iZWdpbkVkaXRpbmcobCxhKSl9Zm9jdXMoKXt0aGlz''@;'; put 'put ''LlRFWFRBUkVBLnNlbGVjdCgpLHdFKHRoaXMuVEVYVEFSRUEsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O3RoaXMuVEVYVEFSRUE9bC5jcmVhdGVFbGVtZW50KCJURVhUQVJFQSIpLHZvKHRoaXMuVEVY''@;'; put 'put ''VEFSRUEsW1siZGF0YS1ob3QtaW5wdXQiLCIiXSxONygtMSldKSxUaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29udGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWln''@;'; put 'put ''aHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLHBvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRo''@;'; put 'put ''aXMubGF5ZXJDbGFzcykmJmxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcyksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsQlApLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRD''@;'; put 'put ''aGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe3RmZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50ZXh0YXJlYVN0eWxl''@;'; put 'put ''Lm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsbG8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCl9''@;'; put 'put ''c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3Qu''@;'; put 'put ''aXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIjtjb25zdCBsPXRoaXMuVEVYVEFSRUFfUEFSRU5ULmNoaWxkTm9kZXM7bGV0IGE9ITE7R2EobC5sZW5ndGgtMSxk''@;'; put 'put ''PT57aWYocG8obFtkXSwiaGFuZHNvbnRhYmxlRWRpdG9yIikpcmV0dXJuIGE9ITAsITF9KSxwbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCxCUCkmJmxvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULEJQKSxhPyh0aGlzLmxheWVyQ2xhc3M9Imh0X2VkaXRvcl92aXNpYmxlIixUaSh0aGlzLlRFWFRBUkVB''@;'; put 'put ''X1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKToodGhpcy5sYXllckNsYXNzPXRoaXMuZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSl9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC50b1BoeXNpY2FsUm93KHRo''@;'; put 'put ''aXMucm93KSxhPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwobCx0aGlzLmNvbCk7dGhpcy5vcmlnaW5hbFZhbHVlPWEsdGhpcy5zZXRWYWx1ZShhKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuc3RhdGUhPT1sdS5FRElUSU5HJiYhbClyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZChsfHx0aGlzLmNsb3NlKCkpO2NvbnN0e3RvcDphLHN0YXJ0OmQsd2lkdGg6''@;'; put 'put ''aCxtYXhXaWR0aDpmLGhlaWdodDp2LG1heEhlaWdodDpNfT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGVbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7ZH1weGAs''@;'; put 'put ''dGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7Y29uc3QgST10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5URCk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1JLmZvbnRTaXplLHRoaXMuVEVYVEFSRUEuc3R5bGUuZm9udEZhbWlseT1JLmZvbnRGYW1pbHks''@;'; put 'put ''dGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IsdGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaCxmKSxtaW5IZWlnaHQ6TWF0aC5taW4odixNKSxtYXhXaWR0aDpmLG1heEhl''@;'; put 'put ''aWdodDpNfSwhMCl9YmluZEV2ZW50cygpe08kKCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhp''@;'; put 'put ''cy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09''@;'; put 'put ''PWx1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT57dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT1sdS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24oKXt9ZGVzdHJveSgp''@;'; put 'put ''e3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFu''@;'; put 'put ''ZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5fSx7a2V5czpbWyJNZXRhIiwi''@;'; put 'put ''RW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjooKT0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCl9LHtrZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZix2KT0+e2xldFtN''@;'; put 'put ''XT12O2twZShNLHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7a3BlKE0sdGhpcy5URVhUQVJFQSl9fV0se3J1bk9ubHlJZjooKT0+UGEodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6RHBlfSl9dW5yZWdpc3RlclNob3J0Y3V0''@;'; put 'put ''cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRHBlKX19ZnVuY3Rpb24gb1QoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT12LmFyaWFUYWdzLEk9W10sRz1bXSxpZT1bXSx1ZT1bXTt2LmNsYXNzTmFtZSYm''@;'; put 'put ''VGkobCx2LmNsYXNzTmFtZSksdi5yZWFkT25seT8oSS5wdXNoKHYucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSxNJiZ1ZS5wdXNoKGsyZSgpKSk6TSYmaWUucHVzaChrMmUoKVswXSksITE9PT12LnZhbGlkJiZ2LmludmFsaWRDZWxsQ2xhc3NOYW1lPyhJLnB1c2godi5pbnZhbGlkQ2VsbENsYXNz''@;'; put 'put ''TmFtZSksTSYmdWUucHVzaChEMmUoKSkpOihHLnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSksTSYmaWUucHVzaChEMmUoKVswXSkpLCExPT09di53b3JkV3JhcCYmdi5ub1dvcmRXcmFwQ2xhc3NOYW1lJiZJLnB1c2godi5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFjZWhvbGRl''@;'; put 'put ''ciYmSS5wdXNoKHYucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxsbyhsLEcpLFRpKGwsSSksajcobCxpZSksdm8obCx1ZSl9ZnVuY3Rpb24gQWcoYyxsLGEsZCxoLGYsdil7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2xldCBNPWY7IU0mJnYucGxhY2Vob2xkZXImJihNPXYucGxh''@;'; put 'put ''Y2Vob2xkZXIpLE09bGMoTSksdi50cmltV2hpdGVzcGFjZSYmKE09TS50cmltKCkpLFBtKGwsTSl9b1QuUkVOREVSRVJfVFlQRT0iYmFzZSIsQWcuUkVOREVSRVJfVFlQRT0idGV4dCI7Y29uc3QgSXBlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjphOSxyZW5kZXJlcjpBZ307ZnVuY3Rpb24g''@;'; put 'put ''aDMoYyxsKXtjb25zdCBhPW5ldyB4cGUoYyxsfHx7fSxESyk7cmV0dXJuIGEuaW5pdCgpLGF9RzIoSXBlKSxoMy5lZGl0b3JzPXtCYXNlRWRpdG9yOmtffSxoMy5Db3JlPWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgeHBlKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0/YXJndW1lbnRzWzFdOnt9LERLKX0saDMuRGVmYXVsdFNldHRpbmdzPW9wZSgpLGgzLmhvb2tzPVNhLmdldFNpbmdsZXRvbigpLGgzLkNlbGxDb29yZHM9aVAsaDMuQ2VsbFJhbmdlPWdLLGgzLnBhY2thZ2VOYW1lPSJoYW5kc29udGFibGUiLGgzLmJ1aWxkRGF0ZT0iMjQvMDQvMjAyNSAx''@;'; put 'put ''MDo1OTowMCIsaDMudmVyc2lvbj0iMTUuMy4wIixoMy5sYW5ndWFnZXM9e2RpY3Rpb25hcnlLZXlzOmxudCxnZXRMYW5ndWFnZURpY3Rpb25hcnk6VTNlLGdldExhbmd1YWdlc0RpY3Rpb25hcmllczpmdW5jdGlvbiBmbnQoKXtyZXR1cm4gZG50KCl9LHJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9u''@;'; put 'put ''YXJ5OnozZSxnZXRUcmFuc2xhdGVkUGhyYXNlOlozZX07Y29uc3Qgb3M9aDMsbmF0PVsiY29udGFpbmVyIl0sSVg9bmV3IE1hcCxScGU9IlRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgYm91bmQgdG8gdGhpcyBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBhbmQgY2Fubm90IGJlIHVzZWQgcHJv''@;'; put 'put ''cGVybHkuIjtsZXQgWW09KCgpPT57Y2xhc3MgY3tnZXRJbnN0YW5jZShhKXtjb25zdCBkPUlYLmdldChhKTtyZXR1cm4gZC5pc0Rlc3Ryb3llZD8oY29uc29sZS53YXJuKFJwZSksbnVsbCk6ZH1yZWdpc3Rlckluc3RhbmNlKGEsZCl7cmV0dXJuIElYLnNldChhLGQpfXJlbW92ZUluc3RhbmNl''@;'; put 'put ''KGEpe3JldHVybiBJWC5kZWxldGUoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHJhdD1PYmplY3Qua2V5cyhvcy5EZWZh''@;'; put 'put ''dWx0U2V0dGluZ3MpLExwZT1vcy5ob29rcy5nZXRSZWdpc3RlcmVkKCk7bGV0IE9wZT0oKCk9PntjbGFzcyBje21lcmdlU2V0dGluZ3MoYSl7Y29uc3QgZD0ic2V0dGluZ3MiaW4gYSYmIm9iamVjdCI9PXR5cGVvZiBhLnNldHRpbmdzLGg9ZD9hLnNldHRpbmdzOnt9O3JldHVybiBMcGUuY29u''@;'; put 'put ''Y2F0KHJhdCkuZm9yRWFjaCh2PT57Y29uc3QgTT1McGUuaW5kZXhPZih2KT4tMTtsZXQgSTtkJiZNJiYoST1hLnNldHRpbmdzW3ZdKSx2b2lkIDAhPT1hW3ZdJiYoST1hW3ZdKSx2b2lkIDAhPT1JJiYoaFt2XT0ibmdab25lImluIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBJJiZNP2Z1bmN0aW9u''@;'; put 'put ''KC4uLkcpe3JldHVybiBhLm5nWm9uZS5ydW4oKCk9PkkuYXBwbHkodGhpcyxHKSl9OkkpfSksaH1wcmVwYXJlQ2hhbmdlcyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9''@;'; put 'put ''KSxkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxEXz0oKCk9PntjbGFzcyBje19ob3RUYWJsZVJlZ2lzdGVyZXI7X2hvdFNldHRpbmdz''@;'; put 'put ''UmVzb2x2ZXI7bmdab25lO2NvbnRhaW5lcjtfX2hvdEluc3RhbmNlPW51bGw7Y29sdW1uc0NvbXBvbmVudHM9W107c2V0dGluZ3M7aG90SWQ9IiI7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lO2FsbG93RW1wdHk7YWxsb3dIdG1sO2FsbG93SW5zZXJ0Q29sdW1uO2FsbG93SW5zZXJ0Um93O2FsbG93''@;'; put 'put ''SW52YWxpZDthbGxvd1JlbW92ZUNvbHVtbjthbGxvd1JlbW92ZVJvdzthcmlhVGFnczthdXRvQ29sdW1uU2l6ZTthdXRvUm93U2l6ZTthdXRvV3JhcENvbDthdXRvV3JhcFJvdztiaW5kUm93c1dpdGhIZWFkZXJzO2NlbGw7Y2VsbHM7Y2hlY2tlZFRlbXBsYXRlO2NsYXNzTmFtZTtjb2xIZWFk''@;'; put 'put ''ZXJzO2NvbGxhcHNpYmxlQ29sdW1ucztjb2x1bW5IZWFkZXJIZWlnaHQ7Y29sdW1ucztjb2x1bW5Tb3J0aW5nO2NvbHVtblN1bW1hcnk7Y29sV2lkdGhzO2NvbW1lbnRlZENlbGxDbGFzc05hbWU7Y29tbWVudHM7Y29udGV4dE1lbnU7Y29weWFibGU7Y29weVBhc3RlO2NvcnJlY3RGb3JtYXQ7''@;'; put 'put ''Y3VycmVudENvbENsYXNzTmFtZTtjdXJyZW50SGVhZGVyQ2xhc3NOYW1lO2N1cnJlbnRSb3dDbGFzc05hbWU7Y3VzdG9tQm9yZGVycztkYXRhO2RhdGFEb3ROb3RhdGlvbjtkYXRhU2NoZW1hO2RhdGVGb3JtYXQ7ZGF0ZVBpY2tlckNvbmZpZztkZWZhdWx0RGF0ZTt0YWJOYXZpZ2F0aW9uO3Ro''@;'; put 'put ''ZW1lTmFtZTtkaXNhYmxlVmlzdWFsU2VsZWN0aW9uO2RyYWdUb1Njcm9sbDtkcm9wZG93bk1lbnU7ZWRpdG9yO2VudGVyQmVnaW5zRWRpdGluZztlbnRlck1vdmVzO2ZpbGxIYW5kbGU7ZmlsdGVyO2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU7ZmlsdGVycztmaXhlZENvbHVtbnNMZWZ0O2ZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0O2ZpeGVkUm93c0JvdHRvbTtmaXhlZFJvd3NUb3A7Zm9ybXVsYXM7ZnJhZ21lbnRTZWxlY3Rpb247aGVhZGVyQ2xhc3NOYW1lO2hlaWdodDtoaWRkZW5Db2x1bW5zO2hpZGRlblJvd3M7aW52YWxpZENlbGxDbGFzc05hbWU7aW1lRmFzdEVkaXQ7bGFiZWw7bGFuZ3VhZ2U7''@;'; put 'put ''bGF5b3V0RGlyZWN0aW9uO2xpY2Vuc2VLZXk7bG9jYWxlO21hbnVhbENvbHVtbkZyZWV6ZTttYW51YWxDb2x1bW5Nb3ZlO21hbnVhbENvbHVtblJlc2l6ZTttYW51YWxSb3dNb3ZlO21hbnVhbFJvd1Jlc2l6ZTttYXhDb2xzO21heFJvd3M7bWVyZ2VDZWxsczttaW5Db2xzO21pblJvd3M7bWlu''@;'; put 'put ''U3BhcmVDb2xzO21pblNwYXJlUm93czttdWx0aUNvbHVtblNvcnRpbmc7bmF2aWdhYmxlSGVhZGVycztuZXN0ZWRIZWFkZXJzO25lc3RlZFJvd3M7bm9Xb3JkV3JhcENsYXNzTmFtZTtudW1lcmljRm9ybWF0O29ic2VydmVET01WaXNpYmlsaXR5O291dHNpZGVDbGlja0Rlc2VsZWN0cztwZXJz''@;'; put 'put ''aXN0ZW50U3RhdGU7cGxhY2Vob2xkZXI7cGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lO3ByZXZlbnRPdmVyZmxvdztwcmV2ZW50V2hlZWw7cmVhZE9ubHk7cmVhZE9ubHlDZWxsQ2xhc3NOYW1lO3JlbmRlckFsbENvbHVtbnM7cmVuZGVyQWxsUm93cztyZW5kZXJlcjtyb3dIZWFkZXJzO3Jvd0hl''@;'; put 'put ''YWRlcldpZHRoO3Jvd0hlaWdodHM7c2VhcmNoO3NlbGVjdGlvbk1vZGU7c2VsZWN0T3B0aW9ucztza2lwQ29sdW1uT25QYXN0ZTtza2lwUm93T25QYXN0ZTtzb3J0QnlSZWxldmFuY2U7c291cmNlO3N0YXJ0Q29scztzdGFydFJvd3M7c3RyZXRjaEg7c3RyaWN0O3RhYmxlQ2xhc3NOYW1lO3Rh''@;'; put 'put ''Yk1vdmVzO3RpdGxlO3RyaW1Ecm9wZG93bjt0cmltUm93czt0cmltV2hpdGVzcGFjZTt0eXBlO3VuY2hlY2tlZFRlbXBsYXRlO3VuZG87dmFsaWRhdG9yO3ZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O3ZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0O3Zpc2libGVSb3dzO3dpZHRoO3dv''@;'; put 'put ''cmRXcmFwO2FmdGVyQWRkQ2hpbGQ7YWZ0ZXJBdXRvZmlsbDthZnRlckJlZ2luRWRpdGluZzthZnRlckNlbGxNZXRhUmVzZXQ7YWZ0ZXJDaGFuZ2U7YWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ7YWZ0ZXJDb2x1bW5Db2xsYXBzZTthZnRlckNvbHVtbkV4cGFuZDthZnRlckNvbHVtbkZyZWV6ZTthZnRl''@;'; put 'put ''ckNvbHVtbk1vdmU7YWZ0ZXJDb2x1bW5SZXNpemU7YWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZTthZnRlckNvbHVtblNvcnQ7YWZ0ZXJDb2x1bW5VbmZyZWV6ZTthZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM7YWZ0ZXJDb250ZXh0TWVudUhpZGU7YWZ0ZXJDb250ZXh0TWVudVNob3c7''@;'; put 'put ''YWZ0ZXJDb3B5O2FmdGVyQ29weUxpbWl0O2FmdGVyQ3JlYXRlQ29sO2FmdGVyQ3JlYXRlUm93O2FmdGVyQ3V0O2FmdGVyRGVzZWxlY3Q7YWZ0ZXJEZXN0cm95O2FmdGVyRGV0YWNoQ2hpbGQ7YWZ0ZXJEb2N1bWVudEtleURvd247YWZ0ZXJEcmF3U2VsZWN0aW9uO2FmdGVyRHJvcGRvd25NZW51''@;'; put 'put ''RGVmYXVsdE9wdGlvbnM7YWZ0ZXJEcm9wZG93bk1lbnVIaWRlO2FmdGVyRHJvcGRvd25NZW51U2hvdzthZnRlckZpbHRlcjthZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlO2FmdGVyR2V0Q2VsbE1ldGE7YWZ0ZXJHZXRDb2xIZWFkZXI7YWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnM7YWZ0''@;'; put 'put ''ZXJHZXRSb3dIZWFkZXI7YWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM7YWZ0ZXJIaWRlQ29sdW1uczthZnRlckhpZGVSb3dzO2FmdGVySW5pdDthZnRlckxhbmd1YWdlQ2hhbmdlO2FmdGVyTGlzdGVuO2FmdGVyTG9hZERhdGE7YWZ0ZXJNZXJnZUNlbGxzO2FmdGVyTW9kaWZ5VHJhbnNmb3Jt''@;'; put 'put ''RW5kO2FmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydDthZnRlck1vbWVudHVtU2Nyb2xsO2FmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ7YWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkO2FmdGVyT25DZWxsQ29udGV4dE1lbnU7YWZ0ZXJPbkNlbGxD''@;'; put 'put ''b3JuZXJEYmxDbGljazthZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjthZnRlck9uQ2VsbE1vdXNlRG93bjthZnRlck9uQ2VsbE1vdXNlT3V0O2FmdGVyT25DZWxsTW91c2VPdmVyO2FmdGVyT25DZWxsTW91c2VVcDthZnRlclBhc3RlO2FmdGVyUGx1Z2luc0luaXRpYWxpemVkO2FmdGVyUmVk''@;'; put 'put ''bzthZnRlclJlZG9TdGFja0NoYW5nZTthZnRlclJlZnJlc2hEaW1lbnNpb25zO2FmdGVyUmVtb3ZlQ2VsbE1ldGE7YWZ0ZXJSZW1vdmVDb2w7YWZ0ZXJSZW1vdmVSb3c7YWZ0ZXJSZW5kZXI7YWZ0ZXJSZW5kZXJlcjthZnRlclJvd01vdmU7YWZ0ZXJSb3dSZXNpemU7YWZ0ZXJSb3dTZXF1ZW5j''@;'; put 'put ''ZUNoYW5nZTthZnRlclNjcm9sbEhvcml6b250YWxseTthZnRlclNjcm9sbFZlcnRpY2FsbHk7YWZ0ZXJTY3JvbGw7YWZ0ZXJTZWxlY3RDb2x1bW5zO2FmdGVyU2VsZWN0aW9uO2FmdGVyU2VsZWN0aW9uQnlQcm9wO2FmdGVyU2VsZWN0aW9uRW5kO2FmdGVyU2VsZWN0aW9uRW5kQnlQcm9wO2Fm''@;'; put 'put ''dGVyU2VsZWN0aW9uRm9jdXNTZXQ7YWZ0ZXJTZWxlY3RSb3dzO2FmdGVyU2V0Q2VsbE1ldGE7YWZ0ZXJTZXREYXRhQXRDZWxsO2FmdGVyU2V0RGF0YUF0Um93UHJvcDthZnRlclNldFNvdXJjZURhdGFBdENlbGw7YWZ0ZXJTZXRUaGVtZTthZnRlclNoZWV0QWRkZWQ7YWZ0ZXJTaGVldFJlbmFt''@;'; put 'put ''ZWQ7YWZ0ZXJTaGVldFJlbW92ZWQ7YWZ0ZXJUcmltUm93O2FmdGVyVW5kbzthZnRlclVuZG9TdGFja0NoYW5nZTthZnRlclVuaGlkZUNvbHVtbnM7YWZ0ZXJVbmhpZGVSb3dzO2FmdGVyVW5saXN0ZW47YWZ0ZXJVbm1lcmdlQ2VsbHM7YWZ0ZXJVbnRyaW1Sb3c7YWZ0ZXJVcGRhdGVEYXRhO2Fm''@;'; put 'put ''dGVyVXBkYXRlU2V0dGluZ3M7YWZ0ZXJWYWxpZGF0ZTthZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlO2FmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3UmVuZGVyO2JlZm9yZUFkZENoaWxkO2JlZm9yZUF1dG9maWxsO2JlZm9yZUJlZ2luRWRp''@;'; put 'put ''dGluZztiZWZvcmVDZWxsQWxpZ25tZW50O2JlZm9yZUNoYW5nZTtiZWZvcmVDaGFuZ2VSZW5kZXI7YmVmb3JlQ29sdW1uQ29sbGFwc2U7YmVmb3JlQ29sdW1uRXhwYW5kO2JlZm9yZUNvbHVtbkZyZWV6ZTtiZWZvcmVDb2x1bW5Nb3ZlO2JlZm9yZUNvbHVtblJlc2l6ZTtiZWZvcmVDb2x1bW5T''@;'; put 'put ''b3J0O2JlZm9yZUNvbHVtbldyYXA7YmVmb3JlQ29sdW1uVW5mcmVlemU7YmVmb3JlQ29tcG9zaXRpb25TdGFydDtiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zO2JlZm9yZUNvbnRleHRNZW51U2hvdztiZWZvcmVDb3B5O2JlZm9yZUNyZWF0ZUNvbDtiZWZvcmVDcmVhdGVSb3c7YmVmb3JlQ3V0''@;'; put 'put ''O2JlZm9yZURldGFjaENoaWxkO2JlZm9yZURyYXdCb3JkZXJzO2JlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zO2JlZm9yZURyb3Bkb3duTWVudVNob3c7YmVmb3JlRmlsdGVyO2JlZm9yZUdldENlbGxNZXRhO2JlZm9yZUhpZGVDb2x1bW5zO2JlZm9yZUhpZGVSb3dzO2JlZm9yZUhpZ2hsaWdo''@;'; put 'put ''dGluZ0NvbHVtbkhlYWRlcjtiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI7YmVmb3JlSW5pdDtiZWZvcmVJbml0V2Fsa29udGFibGU7YmVmb3JlS2V5RG93bjtiZWZvcmVMYW5ndWFnZUNoYW5nZTtiZWZvcmVMb2FkRGF0YTtiZWZvcmVNZXJnZUNlbGxzO2JlZm9yZU9uQ2VsbENvbnRleHRN''@;'; put 'put ''ZW51O2JlZm9yZU9uQ2VsbE1vdXNlRG93bjtiZWZvcmVPbkNlbGxNb3VzZU91dDtiZWZvcmVPbkNlbGxNb3VzZU92ZXI7YmVmb3JlT25DZWxsTW91c2VVcDtiZWZvcmVQYXN0ZTtiZWZvcmVSZWRvO2JlZm9yZVJlZG9TdGFja0NoYW5nZTtiZWZvcmVSZWZyZXNoRGltZW5zaW9ucztiZWZvcmVS''@;'; put 'put ''ZW1vdmVDZWxsQ2xhc3NOYW1lcztiZWZvcmVSZW1vdmVDZWxsTWV0YTtiZWZvcmVSZW1vdmVDb2w7YmVmb3JlUmVtb3ZlUm93O2JlZm9yZVJlbmRlcjtiZWZvcmVSZW5kZXJlcjtiZWZvcmVSb3dNb3ZlO2JlZm9yZVJvd1Jlc2l6ZTtiZWZvcmVSb3dXcmFwO2JlZm9yZVNlbGVjdENvbHVtbnM7''@;'; put 'put ''YmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQ7YmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0O2JlZm9yZVNlbGVjdFJvd3M7YmVmb3JlU2V0Q2VsbE1ldGE7YmVmb3JlU2V0UmFuZ2VFbmQ7YmVmb3JlU2V0UmFuZ2VTdGFydDtiZWZvcmVTZXRSYW5nZVN0YXJ0T25seTtiZWZvcmVTdHJldGNoaW5n''@;'; put 'put ''Q29sdW1uV2lkdGg7YmVmb3JlVG91Y2hTY3JvbGw7YmVmb3JlVHJpbVJvdztiZWZvcmVVbmRvO2JlZm9yZVVuZG9TdGFja0NoYW5nZTtiZWZvcmVVbmhpZGVDb2x1bW5zO2JlZm9yZVVuaGlkZVJvd3M7YmVmb3JlVW5tZXJnZUNlbGxzO2JlZm9yZVVudHJpbVJvdztiZWZvcmVVcGRhdGVEYXRh''@;'; put 'put ''O2JlZm9yZVZhbGlkYXRlO2JlZm9yZVZhbHVlUmVuZGVyO2JlZm9yZVZpZXdwb3J0U2Nyb2xsO2JlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5O2JlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTtiZWZvcmVWaWV3UmVuZGVyO2NvbnN0cnVjdDtpbml0O21vZGlmeUF1dG9Db2x1''@;'; put 'put ''bW5TaXplU2VlZDttb2RpZnlBdXRvZmlsbFJhbmdlO21vZGlmeUNvbEhlYWRlcjttb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ7bW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU7bW9kaWZ5Q29sV2lkdGg7bW9kaWZ5Q29weWFibGVSYW5nZTttb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZTttb2Rp''@;'; put 'put ''ZnlGb2N1c2VkRWxlbWVudDttb2RpZnlEYXRhO21vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uO21vZGlmeUdldENlbGxDb29yZHM7bW9kaWZ5R2V0Q29vcmRzRWxlbWVudDttb2RpZnlSb3dEYXRhO21vZGlmeVJvd0hlYWRlcjttb2RpZnlSb3dIZWFkZXJXaWR0aDttb2RpZnlSb3dIZWlnaHQ7''@;'; put 'put ''bW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZTttb2RpZnlTb3VyY2VEYXRhO21vZGlmeVRyYW5zZm9ybUVuZDttb2RpZnlUcmFuc2Zvcm1Gb2N1czttb2RpZnlUcmFuc2Zvcm1TdGFydDtwZXJzaXN0ZW50U3RhdGVMb2FkO3BlcnNpc3RlbnRTdGF0ZVJlc2V0O3BlcnNpc3RlbnRTdGF0ZVNh''@;'; put 'put ''dmU7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlcj1hLHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXI9ZCx0aGlzLm5nWm9uZT1ofWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19o''@;'; put 'put ''b3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4oUnBlKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRl''@;'; put 'put ''clZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhpcyk7aWYodGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RT''@;'; put 'put ''ZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBvcy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90''@;'; put 'put ''VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3RhbmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVz''@;'; put 'put ''b2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhpcy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RU''@;'; put 'put ''YWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVt''@;'; put 'put ''bnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlzLmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VT''@;'; put 'put ''ZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRo''@;'; put 'put ''aXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1''@;'; put 'put ''bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnNDb21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5zcGxpY2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdl''@;'; put 'put ''KFltKSxHZShPcGUpLEdlKFdhKSl9O3N0YXRpYyBcdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEobmF0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguY29udGFpbmVyPWYuZmlyc3QpfX0s''@;'; put 'put ''aW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRD''@;'; put 'put ''b2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNvbHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhcmlhVGFnczoiYXJpYVRhZ3MiLGF1dG9Db2x1''@;'; put 'put ''bW5TaXplOiJhdXRvQ29sdW1uU2l6ZSIsYXV0b1Jvd1NpemU6ImF1dG9Sb3dTaXplIixhdXRvV3JhcENvbDoiYXV0b1dyYXBDb2wiLGF1dG9XcmFwUm93OiJhdXRvV3JhcFJvdyIsYmluZFJvd3NXaXRoSGVhZGVyczoiYmluZFJvd3NXaXRoSGVhZGVycyIsY2VsbDoiY2VsbCIsY2VsbHM6ImNl''@;'; put 'put ''bGxzIixjaGVja2VkVGVtcGxhdGU6ImNoZWNrZWRUZW1wbGF0ZSIsY2xhc3NOYW1lOiJjbGFzc05hbWUiLGNvbEhlYWRlcnM6ImNvbEhlYWRlcnMiLGNvbGxhcHNpYmxlQ29sdW1uczoiY29sbGFwc2libGVDb2x1bW5zIixjb2x1bW5IZWFkZXJIZWlnaHQ6ImNvbHVtbkhlYWRlckhlaWdodCIs''@;'; put 'put ''Y29sdW1uczoiY29sdW1ucyIsY29sdW1uU29ydGluZzoiY29sdW1uU29ydGluZyIsY29sdW1uU3VtbWFyeToiY29sdW1uU3VtbWFyeSIsY29sV2lkdGhzOiJjb2xXaWR0aHMiLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6ImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLGNvbW1lbnRzOiJjb21tZW50''@;'; put 'put ''cyIsY29udGV4dE1lbnU6ImNvbnRleHRNZW51Iixjb3B5YWJsZToiY29weWFibGUiLGNvcHlQYXN0ZToiY29weVBhc3RlIixjb3JyZWN0Rm9ybWF0OiJjb3JyZWN0Rm9ybWF0IixjdXJyZW50Q29sQ2xhc3NOYW1lOiJjdXJyZW50Q29sQ2xhc3NOYW1lIixjdXJyZW50SGVhZGVyQ2xhc3NOYW1l''@;'; put 'put ''OiJjdXJyZW50SGVhZGVyQ2xhc3NOYW1lIixjdXJyZW50Um93Q2xhc3NOYW1lOiJjdXJyZW50Um93Q2xhc3NOYW1lIixjdXN0b21Cb3JkZXJzOiJjdXN0b21Cb3JkZXJzIixkYXRhOiJkYXRhIixkYXRhRG90Tm90YXRpb246ImRhdGFEb3ROb3RhdGlvbiIsZGF0YVNjaGVtYToiZGF0YVNjaGVt''@;'; put 'put ''YSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIix0YWJOYXZpZ2F0aW9uOiJ0YWJOYXZpZ2F0aW9uIix0aGVtZU5hbWU6InRoZW1lTmFtZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoi''@;'; put 'put ''ZGlzYWJsZVZpc3VhbFNlbGVjdGlvbiIsZHJhZ1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVudToiZHJvcGRvd25NZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxI''@;'; put 'put ''YW5kbGU6ImZpbGxIYW5kbGUiLGZpbHRlcjoiZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQiLGZpeGVkUm93c0JvdHRvbToiZml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVkUm93c1RvcCIsZm9ybXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlYWRlckNsYXNzTmFtZToiaGVhZGVyQ2xhc3NOYW1lIixo''@;'; put 'put ''ZWlnaHQ6ImhlaWdodCIsaGlkZGVuQ29sdW1uczoiaGlkZGVuQ29sdW1ucyIsaGlkZGVuUm93czoiaGlkZGVuUm93cyIsaW52YWxpZENlbGxDbGFzc05hbWU6ImludmFsaWRDZWxsQ2xhc3NOYW1lIixpbWVGYXN0RWRpdDoiaW1lRmFzdEVkaXQiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxh''@;'; put 'put ''bmd1YWdlIixsYXlvdXREaXJlY3Rpb246ImxheW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtleSIsbG9jYWxlOiJsb2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxD''@;'; put 'put ''b2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJlc2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIsbWFudWFsUm93UmVzaXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6''@;'; put 'put ''Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3MiLG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFyZVJvd3M6Im1pblNwYXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5hdmlnYWJsZUhlYWRlcnM6Im5hdmlnYWJsZUhlYWRlcnMiLG5lc3Rl''@;'; put 'put ''ZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5lc3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFzc05hbWU6Im5vV29yZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIs''@;'; put 'put ''b3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToicGVyc2lzdGVudFN0YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50''@;'; put 'put ''T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIscHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5OiJyZWFkT25seSIscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNlbGxDbGFzc05hbWUiLHJlbmRlckFsbENvbHVtbnM6InJlbmRlckFsbENvbHVtbnMiLHJlbmRlckFs''@;'; put 'put ''bFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRlcmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVycyIscm93SGVhZGVyV2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0aW9uTW9kZToic2VsZWN0aW9uTW9k''@;'; put 'put ''ZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5PblBhc3RlIixza2lwUm93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6InNvdXJjZSIsc3RhcnRDb2xzOiJz''@;'; put 'put ''dGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRSb3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3RyaWN0Iix0YWJsZUNsYXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRvd246InRyaW1Ecm9wZG93biIsdHJp''@;'; put 'put ''bVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVzcGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVuY2hlY2tlZFRlbXBsYXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJ2''@;'; put 'put ''aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFwIixhZnRlckFkZENoaWxkOiJhZnRl''@;'; put 'put ''ckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJhZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0ZXJCZWdpbkVkaXRpbmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2UiLGFmdGVyQ2hhbmdlc09ic2VydmVk''@;'; put 'put ''OiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJDb2x1bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFmdGVyQ29sdW1uTW92ZToiYWZ0ZXJD''@;'; put 'put ''b2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U6ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNvbHVtblVuZnJlZXplOiJhZnRlckNv''@;'; put 'put ''bHVtblVuZnJlZXplIixhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoiYWZ0ZXJDb250ZXh0TWVudVNob3ci''@;'; put 'put ''LGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRlckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3JlYXRlQ29sOiJhZnRlckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVyRGVzZWxlY3Q6ImFmdGVyRGVzZWxl''@;'; put 'put ''Y3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENoaWxkIixhZnRlckRvY3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2VsZWN0aW9uIixhZnRlckRyb3Bkb3du''@;'; put 'put ''TWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bkb3duTWVudUhpZGU6ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ciLGFmdGVyRmlsdGVyOiJhZnRlckZp''@;'; put 'put ''bHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0ZXJHZXRDZWxsTWV0YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczoi''@;'; put 'put ''YWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hlYWRlciIsYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJhZnRlckhpZGVDb2x1bW5zIixhZnRl''@;'; put 'put ''ckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixhZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNoYW5nZToiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRhIixhZnRlck1lcmdlQ2VsbHM6ImFm''@;'; put 'put ''dGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzOiJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9y''@;'; put 'put ''bVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xsOiJhZnRlck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkOiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0''@;'; put 'put ''ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazoiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2Vs''@;'; put 'put ''bE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25DZWxsTW91c2VPdXQiLGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVy''@;'; put 'put ''UGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1Z2luc0luaXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsYWZ0ZXJSZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJS''@;'; put 'put ''ZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1vdmVDZWxsTWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0ZXJSZW1vdmVDb2w6ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoi''@;'; put 'put ''YWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3ZlOiJhZnRlclJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRlclJvd1Jlc2l6ZSIsYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpv''@;'; put 'put ''bnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2FsbHk6ImFmdGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTY3JvbGw6ImFmdGVyU2Nyb2xsIixhZnRlclNlbGVjdENvbHVtbnM6ImFmdGVyU2VsZWN0Q29sdW1ucyIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlv''@;'; put 'put ''bkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlvbkVuZCIsYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNlbGVjdGlvbkZvY3VzU2V0OiJhZnRlclNlbGVjdGlvbkZvY3VzU2V0''@;'; put 'put ''IixhZnRlclNlbGVjdFJvd3M6ImFmdGVyU2VsZWN0Um93cyIsYWZ0ZXJTZXRDZWxsTWV0YToiYWZ0ZXJTZXRDZWxsTWV0YSIsYWZ0ZXJTZXREYXRhQXRDZWxsOiJhZnRlclNldERhdGFBdENlbGwiLGFmdGVyU2V0RGF0YUF0Um93UHJvcDoiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixhZnRlclNl''@;'; put 'put ''dFNvdXJjZURhdGFBdENlbGw6ImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsYWZ0ZXJTZXRUaGVtZToiYWZ0ZXJTZXRUaGVtZSIsYWZ0ZXJTaGVldEFkZGVkOiJhZnRlclNoZWV0QWRkZWQiLGFmdGVyU2hlZXRSZW5hbWVkOiJhZnRlclNoZWV0UmVuYW1lZCIsYWZ0ZXJTaGVldFJlbW92ZWQ6''@;'; put 'put ''ImFmdGVyU2hlZXRSZW1vdmVkIixhZnRlclRyaW1Sb3c6ImFmdGVyVHJpbVJvdyIsYWZ0ZXJVbmRvOiJhZnRlclVuZG8iLGFmdGVyVW5kb1N0YWNrQ2hhbmdlOiJhZnRlclVuZG9TdGFja0NoYW5nZSIsYWZ0ZXJVbmhpZGVDb2x1bW5zOiJhZnRlclVuaGlkZUNvbHVtbnMiLGFmdGVyVW5oaWRl''@;'; put 'put ''Um93czoiYWZ0ZXJVbmhpZGVSb3dzIixhZnRlclVubGlzdGVuOiJhZnRlclVubGlzdGVuIixhZnRlclVubWVyZ2VDZWxsczoiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGFmdGVyVW50cmltUm93OiJhZnRlclVudHJpbVJvdyIsYWZ0ZXJVcGRhdGVEYXRhOiJhZnRlclVwZGF0ZURhdGEiLGFmdGVyVXBk''@;'; put 'put ''YXRlU2V0dGluZ3M6ImFmdGVyVXBkYXRlU2V0dGluZ3MiLGFmdGVyVmFsaWRhdGU6ImFmdGVyVmFsaWRhdGUiLGFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld3BvcnRSb3dDYWxjdWxh''@;'; put 'put ''dG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld1JlbmRlcjoiYWZ0ZXJWaWV3UmVuZGVyIixiZWZvcmVBZGRDaGlsZDoiYmVmb3JlQWRkQ2hpbGQiLGJlZm9yZUF1dG9maWxsOiJiZWZvcmVBdXRvZmlsbCIsYmVmb3JlQmVnaW5FZGl0aW5n''@;'; put 'put ''OiJiZWZvcmVCZWdpbkVkaXRpbmciLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJlZm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVt''@;'; put 'put ''bkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9yZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXpl''@;'; put 'put ''IixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5XcmFwOiJiZWZvcmVDb2x1bW5XcmFwIixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbXBvc2l0aW9uU3RhcnQ6ImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQi''@;'; put 'put ''LGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3Jl''@;'; put 'put ''Q3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9yZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bk''@;'; put 'put ''b3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1lbnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVt''@;'; put 'put ''bnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJ''@;'; put 'put ''bml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29udGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERh''@;'; put 'put ''dGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdlQ2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVP''@;'; put 'put ''bkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VPdmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0''@;'; put 'put ''YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVm''@;'; put 'put ''b3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNvbDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVm''@;'; put 'put ''b3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZvcmVSb3dSZXNpemUiLGJlZm9yZVJvd1dyYXA6ImJlZm9yZVJvd1dyYXAiLGJlZm9yZVNlbGVjdENvbHVtbnM6ImJlZm9yZVNlbGVjdENvbHVtbnMiLGJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0OiJiZWZvcmVTZWxlY3Rpb25Gb2N1c1Nl''@;'; put 'put ''dCIsYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0OiJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGJlZm9yZVNlbGVjdFJvd3M6ImJlZm9yZVNlbGVjdFJvd3MiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJh''@;'; put 'put ''bmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVU''@;'; put 'put ''b3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8iLGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVD''@;'; put 'put ''b2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIsYmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlk''@;'; put 'put ''YXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3cG9ydFNjcm9sbDoiYmVmb3JlVmlld3BvcnRTY3JvbGwiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250''@;'; put 'put ''YWxseSIsYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGJlZm9yZVZpZXdSZW5kZXI6ImJlZm9yZVZpZXdSZW5kZXIiLGNvbnN0cnVjdDoiY29uc3RydWN0Iixpbml0OiJpbml0Iixtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ6''@;'; put 'put ''Im1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsbW9kaWZ5QXV0b2ZpbGxSYW5nZToibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsbW9kaWZ5Q29sSGVhZGVyOiJtb2RpZnlDb2xIZWFkZXIiLG1vZGlmeUNvbHVtbkhlYWRlckhlaWdodDoibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iixtb2RpZnlDb2x1''@;'; put 'put ''bW5IZWFkZXJWYWx1ZToibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLG1vZGlmeUNvbFdpZHRoOiJtb2RpZnlDb2xXaWR0aCIsbW9kaWZ5Q29weWFibGVSYW5nZToibW9kaWZ5Q29weWFibGVSYW5nZSIsbW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWU6Im1vZGlmeUZpbHRlcnNNdWx0aVNl''@;'; put 'put ''bGVjdFZhbHVlIixtb2RpZnlGb2N1c2VkRWxlbWVudDoibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uOiJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsbW9kaWZ5R2V0Q2VsbENvb3JkczoibW9kaWZ5R2V0''@;'; put 'put ''Q2VsbENvb3JkcyIsbW9kaWZ5R2V0Q29vcmRzRWxlbWVudDoibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsbW9kaWZ5Um93RGF0YToibW9kaWZ5Um93RGF0YSIsbW9kaWZ5Um93SGVhZGVyOiJtb2RpZnlSb3dIZWFkZXIiLG1vZGlmeVJvd0hlYWRlcldpZHRoOiJtb2RpZnlSb3dIZWFkZXJXaWR0''@;'; put 'put ''aCIsbW9kaWZ5Um93SGVpZ2h0OiJtb2RpZnlSb3dIZWlnaHQiLG1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6Im1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLG1vZGlmeVNvdXJjZURhdGE6Im1vZGlmeVNvdXJjZURhdGEiLG1vZGlmeVRyYW5zZm9ybUVuZDoibW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtRW5kIixtb2RpZnlUcmFuc2Zvcm1Gb2N1czoibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLG1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lzdGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNp''@;'; put 'put ''c3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3RhdGVTYXZlIn0sZmVhdHVyZXM6W2RhKFtZbSxPcGVdKSx3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImNvbnRhaW5lciIsIiJdLFszLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYm''@;'; put 'put ''R3QoMCwiZGl2IiwxLDApLDImZCYmeGUoImlkIixoLmhvdElkKX0sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJuIGN9KSgpLG85PSgoKT0+e2NsYXNzIGN7c3RhdGljIHZlcnNpb249IjE1LjMuMCI7c3RhdGljIGZvclJvb3QoKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W1ltXX19c3Rh''@;'; put 'put ''dGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPWtpKHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPUFyKHt9KX1yZXR1cm4gY30pKCk7Y29uc3QgUHBlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIFJYIGV4dGVuZHMgYTl7c3Rh''@;'; put 'put ''dGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKSxsLndpZHRoPSIiLGwuaGVpZ2h0PSIiLGwub3ZlcmZs''@;'; put 'put ''b3c9IiIpLCJub25lIj09PWwuZGlzcGxheSYmKGwuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0T3B0aW9ucyksdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHls''@;'; put 'put ''ZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksd0UodGhpcy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0''@;'; put 'put ''ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1v''@;'; put 'put ''dmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMsST17c3RhcnRSb3dzOjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxp''@;'; put 'put ''c3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdzOiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0''@;'; put 'put ''ZXJPbkNlbGxNb3VzZURvd24oRyxpZSl7Y29uc3QgdWU9dGhpcy5nZXRTb3VyY2VEYXRhKGllLnJvdyxpZS5jb2wpO3ZvaWQgMCE9PXVlJiZNLnNldFZhbHVlKHVlKSxNLmhvdC5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwo''@;'; put 'put ''KT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJkV1KEksdi5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPUl9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxz''@;'; put 'put ''dXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJF''@;'; put 'put ''TlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRF''@;'; put 'put ''ZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9Z2V0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdo''@;'; put 'put ''dCgpKzF9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt2YXIgbDtudWxsPT09KGw9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgp''@;'; put 'put ''fSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9Pnt2YXIgZDthfHxudWxsPT09KGQ9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWR8fGQudXNlVGhlbWUobCl9KX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCku''@;'; put 'put ''Z2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLHYpPT57Y29uc3QgTT10aGlzLmh0RWRpdG9yO2lmKHZvaWQgMCE9PWYmJihmPDB8fE0uZmxpcHBlZCYmZj5NLmNvdW50Um93cygpLTE/TS5kZXNlbGVjdENlbGwoKTpNLnNlbGVjdENlbGwo''@;'; put 'put ''ZiwwKSxNLmdldERhdGEoKS5sZW5ndGgpKXJldHVybiB2LnByZXZlbnREZWZhdWx0KCksQjIodiksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5URVhUQVJFQS5mb2N1cygpLCExfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0''@;'; put 'put ''RWRpdG9yO2xldCBNLEk7cmV0dXJuIXYuZ2V0U2VsZWN0ZWRMYXN0KCkmJnYuZmxpcHBlZD9NPXYuY291bnRSb3dzKCktMTp2LmdldFNlbGVjdGVkTGFzdCgpJiYodi5mbGlwcGVkPyhJPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1heCgwLEktMSkpOihJPXYuZ2V0U2VsZWN0ZWRM''@;'; put 'put ''YXN0KClbMF0sTT1JLTEpKSxoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxJO2lmKHYuZ2V0U2VsZWN0ZWRMYXN0KCl8fHYuZmxpcHBlZCl7aWYodi5nZXRTZWxlY3RlZExhc3Qo''@;'; put 'put ''KSlpZih2LmZsaXBwZWQpTT12LmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighdi5mbGlwcGVkKXtjb25zdCBHPXYuY291bnRSb3dzKCktMTtJPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1pbihHLEkrMSl9fWVsc2UgTT0wO3JldHVybiBoKE0sZil9LHByZXZlbnREZWZh''@;'; put 'put ''dWx0OiExfV0se2dyb3VwOlBwZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92''@;'; put 'put ''ZVNob3J0Y3V0c0J5R3JvdXAoUHBlKX19ZnVuY3Rpb24gRnBlKGMsbCxhKXtIcGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEhwZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ug''@;'; put 'put ''b24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24galAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9hdChjKXt2YXIgbD1mdW5jdGlvbiBzYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIExYKGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KE9YKGMsbCkpfWZ1bmN0aW9uIE9YKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX12YXIgUFg9bmV3IFdlYWtNYXAsTnBlPW5ldyBXZWFrTWFwLEZYPW5ldyBXZWFrU2V0O2NsYXNzIEhYIGV4dGVuZHMgUlh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGFhdChjLGwpe0hwZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZYKSxqUCh0aGlzLCJx''@;'; put 'put ''dWVyeSIsbnVsbCksalAodGhpcywic3RyaXBwZWRDaG9pY2VzIixbXSksalAodGhpcywicmF3Q2hvaWNlcyIsW10pLEZwZSh0aGlzLFBYLHRoaXMuaG90Lmd1aWQuc2xpY2UoMCw5KSksRnBlKHRoaXMsTnBlLE1FKCgpPT57dGhpcy5mb2N1cygpfSwxMDApKSxqUCh0aGlzLCJzb3J0QnlSZWxl''@;'; put 'put ''dmFuY2UiLGZ1bmN0aW9uKGwsYSxkKXtjb25zdCBoPVtdLGY9W10sdj1sLmxlbmd0aDtsZXQgSSxHLGllLHVlLE09YS5sZW5ndGg7aWYoMD09PXYpe2ZvcihpZT0wO2llPE07aWUrKylmLnB1c2goaWUpO3JldHVybiBmfWZvcihpZT0wO2llPE07aWUrKyl7aWYoRz1nJChsYyhhW2llXSkpLGQp''@;'; put 'put ''dWU9Ry5pbmRleE9mKGwpO2Vsc2V7Y29uc3QgeWU9dGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGU7dWU9Ry50b0xvY2FsZUxvd2VyQ2FzZSh5ZSkuaW5kZXhPZihsLnRvTG9jYWxlTG93ZXJDYXNlKHllKSl9LTEhPT11ZSYmKEk9Ry5sZW5ndGgtdWUtdixoLnB1c2goe2Jhc2VJbmRleDppZSxp''@;'; put 'put ''bmRleDp1ZSxjaGFyc0xlZnQ6SSx2YWx1ZTpHfSkpfWZvcihoLnNvcnQoKHllLEVlKT0+e2lmKC0xPT09RWUuaW5kZXgpcmV0dXJuLTE7aWYoLTE9PT15ZS5pbmRleClyZXR1cm4gMTtpZih5ZS5pbmRleDxFZS5pbmRleClyZXR1cm4tMTtpZihFZS5pbmRleDx5ZS5pbmRleClyZXR1cm4gMTtp''@;'; put 'put ''Zih5ZS5pbmRleD09PUVlLmluZGV4KXtpZih5ZS5jaGFyc0xlZnQ8RWUuY2hhcnNMZWZ0KXJldHVybi0xO2lmKHllLmNoYXJzTGVmdD5FZS5jaGFyc0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSxpZT0wLE09aC5sZW5ndGg7aWU8TTtpZSsrKWYucHVzaChoW2llXS5iYXNlSW5kZXgpO3JldHVy''@;'; put 'put ''biBmfSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRvY29tcGxldGUifWdldFZhbHVlKCl7Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT50aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKT09PXRoaXMuVEVYVEFSRUEudmFsdWUpO3JldHVybiBQYShsKT9sOnRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLFRpKHRoaXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLFRpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRl''@;'; put 'put ''eE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlzLlRFWFRBUkVBLFtbInR5cGUiLCJ0ZXh0Il0sWyJyb2xlIiwiY29tYm9ib3giXSxFMmUoImxpc3Rib3giKSxbImFyaWEtYXV0b2NvbXBsZXRlIiwibGlzdCJdXSl9cHJl''@;'; put 'put ''cGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5URVhUQVJFQSxbTjIoImZhbHNlIiksclhlKGAke0xYKFBYLHRoaXMpfS1saXN0Ym94LSR7bH0tJHthfWApXSl9b3Blbigpe3N1cGVyLm9w''@;'; put 'put ''ZW4oKTtjb25zdCBsPXZvaWQgMD09PXRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3dufHx0aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bixhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MsZD1BcnJheS5pc0FycmF5KHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNl''@;'; put 'put ''KT90aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTpudWxsLGg9ZD8ubGVuZ3RoLHtyb3c6Zixjb2w6dn09dGhpczt0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzKCksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixNPT50aGlzLm9uQmVmb3JlS2V5RG93bihNKSksdGhp''@;'; put 'put ''cy5odEVkaXRvci5hZGRIb29rKCJhZnRlclNjcm9sbCIsTFgoTnBlLHRoaXMpKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6bD9bc3UodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLGF1dG9Db2x1bW5TaXplOiEwLHJlbmRlcmVyOihNLEksRyxpZSx1ZSx5ZSxFZSk9''@;'; put 'put ''PntBZyhNLEksRyxpZSx1ZSx5ZSxFZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTpqZSxhbGxvd0h0bWw6cWUsbG9jYWxlOnJ0fT10aGlzLmNlbGxQcm9wZXJ0aWVzLHB0PXRoaXMucXVlcnk7bGV0IEp0LHZuLGR0PWxjKHllKTtkdCYmIXFlJiYoSnQ9ITA9PT1qZT9kdC5pbmRleE9m''@;'; put 'put ''KHB0KTpkdC50b0xvY2FsZUxvd2VyQ2FzZShydCkuaW5kZXhPZihwdC50b0xvY2FsZUxvd2VyQ2FzZShydCkpLC0xIT09SnQmJih2bj1kdC5zdWJzdHIoSnQscHQubGVuZ3RoKSxkdD1kdC5yZXBsYWNlKHZuLGA8c3Ryb25nPiR7dm59PC9zdHJvbmc+YCkpKSxhJiZ2byhJLFtbInJvbGUiLCJv''@;'; put 'put ''cHRpb24iXSwuLi5kP1tzWGUoaCldOltdLC4uLmQ/W2xYZShkLmluZGV4T2YoeWUpKzEpXTpbXSxbImlkIixgJHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke0d9LSR7aWV9YF1dKSxJLmlubmVySFRNTD1kdH0sYWZ0ZXJTZWxlY3Rpb25FbmQ6KE0sSSk9PntpZihhKXtjb25zdCBH''@;'; put 'put ''PXVlPT57dm8odWUsW1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uKGM9PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixjXSkodWUuaWQpKX0saWU9dGhpcy5odEVkaXRvci5nZXRDZWxsKE0sSSwhMCk7bnVsbCE9PWllP0coaWUpOnRoaXMuaHRFZGl0b3Iu''@;'; put 'put ''YWRkSG9va09uY2UoImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9Pntjb25zdCB1ZT10aGlzLmh0RWRpdG9yLmdldENlbGwoTSxJLCEwKTtHKHVlKX0pfX19KSxhJiYodm8odGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsInJvbGUiLCJwcmVzZW50YXRp''@;'; put 'put ''b24iKSx2byh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il0sYVhlKCJwb2xpdGUiKSxvWGUoInRleHQiKSxbImlkIixgJHtMWChQWCx0aGlzKX0tbGlzdGJveC0ke2Z9LSR7dn1gXV0pLHZvKHRoaXMuVEVYVEFSRUEsLi4uTjIoInRydWUiKSkpLHRoaXMuaG90''@;'; put 'put ''Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byh0aGlz''@;'; put 'put ''LlRFWFRBUkVBLFtOMigiZmFsc2UiKV0pfWRpc2NhcmRFZGl0b3IobCl7c3VwZXIuZGlzY2FyZEVkaXRvcihsKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfXF1ZXJ5Q2hvaWNlcyhsKXtjb25zdCBhPXRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlO3RoaXMucXVlcnk9bCwiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYT9hLmNhbGwodGhpcy5jZWxsUHJvcGVydGllcyxsLGQ9Pnt0aGlzLnJhd0Nob2ljZXM9ZCx0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChkKSl9KTpBcnJheS5pc0FycmF5KGEpPyh0aGlzLnJhd0Nob2ljZXM9YSx0aGlzLnVwZGF0ZUNob2lj''@;'; put 'put ''ZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChhKSkpOnRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10pfXVwZGF0ZUNob2ljZXNMaXN0KGwpe2NvbnN0IGE9UyQodGhpcy5URVhUQVJFQSksZD16MmUodGhpcy5URVhUQVJFQSksaD10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvcnRCeVJlbGV2''@;'; put 'put ''YW5jZSxmPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyO2xldCB2PW51bGwsTT1udWxsLEk9bDtoJiYodj10aGlzLnNvcnRCeVJlbGV2YW5jZSh0aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdldFZhbHVlKCkpLEksdGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXJpbmdDYXNlU2Vuc2l0''@;'; put 'put ''aXZlKSk7Y29uc3QgRz1BcnJheS5pc0FycmF5KHYpP3YubGVuZ3RoOjA7aWYoITE9PT1mKUcmJihNPXZbMF0pO2Vsc2V7Y29uc3QgaWU9W107Zm9yKGxldCB1ZT0wLHllPUkubGVuZ3RoO3VlPHllJiYhKGgmJkc8PXVlKTt1ZSsrKWllLnB1c2goRz9JW3ZbdWVdXTpJW3VlXSk7TT0wLEk9aWV9''@;'; put 'put ''dGhpcy5zdHJpcHBlZENob2ljZXM9SSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9MD09PUkubGVuZ3RoPyJub25lIjoiIix0aGlzLmh0RWRpdG9yLmxvYWREYXRhKGhFKFtJXSkpLEkubGVuZ3RoPjAmJih0aGlzLnVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpLHRo''@;'; put 'put ''aXMuZmxpcERyb3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShNKSksdGhpcy5ob3QubGlzdGVuKCksd0UodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25JZk5l''@;'; put 'put ''ZWRlZCgpe2NvbnN0IGw9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGE9bC5oZWlnaHQ7bGV0IGQ9bC50b3A7aWYodGhpcy5ob3Qudmlldy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgTT10aGlzLmhvdC52aWV3LmdldFRhYmxlT2Zmc2V0KCkudG9wLXRoaXMuaG90''@;'; put 'put ''LnJvb3RXaW5kb3cuc2Nyb2xsWTtkPU1hdGgubWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0SGVpZ2h0KCksZj10aGlzLmhvdC52aWV3LmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYSx2PWg+ZiYmZD5mK2E7cmV0dXJuIHY/dGhpcy5mbGlwRHJvcGRvd24oaCk6dGhpcy51bmZsaXBEcm9wZG93''@;'; put 'put ''bigpLHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKHY/ZDpmLGgpLHZ9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsdj1udWxsO2Rve2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0''@;'; put 'put ''Um93SGVpZ2h0KCksZCs9ZixoKz0xfXdoaWxlKGQ8bCk7dj1kLWYsdGhpcy5odEVkaXRvci5mbGlwcGVkJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3A9cGFyc2VJbnQodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3AsMTApK2EtdisicHgiKSx0aGlzLnNl''@;'; put 'put ''dERyb3Bkb3duSGVpZ2h0KGQtZil9fWZsaXBEcm9wZG93bihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7YS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEudG9wPS1sKyJweCIsdGhpcy5odEVkaXRvci5mbGlwcGVkPSEwfXVuZmxpcERyb3Bkb3duKCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsLnRvcD0iIix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9dm9pZCAwfXVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lk''@;'; put 'put ''dGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoKX0pLE9YKEZYLHRoaXMsVnBlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRh''@;'; put 'put ''dGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSxPWChGWCx0aGlzLFZwZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRIZWlnaHQoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJzZUludChsLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxkPU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKTtyZXR1cm4g''@;'; put 'put ''QXJyYXkuZnJvbSh7bGVuZ3RoOmR9LChmLHYpPT52KS5yZWR1Y2UoKGYsdik9PmYrKHRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KHYpfHx0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKSwwKSthKzF9Z2V0V2lkdGgoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5k''@;'; put 'put ''b3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJzZUludChsLmJvcmRlcklubGluZVN0YXJ0V2lkdGgsMTApK3BhcnNlSW50KGwuYm9yZGVySW5saW5lRW5kV2lkdGgsMTApO3JldHVybiB0aGlzLmh0RWRpdG9yLmdldENv''@;'; put 'put ''bFdpZHRoKDApK2F9c3RyaXBWYWx1ZUlmTmVlZGVkKGwpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9YnMobCxmPT5sYyhmKSk7cmV0dXJuIGJzKGQs''@;'; put 'put ''Zj0+YT9mOmckKGYpKX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZF9yb3c9YT9hLmZyb20ucm93Oi0xO2xldCBoPSExO3JldHVybiBsPT09WWEuQVJST1dfRE9XTiYmZF9yb3c+MCYmZF9yb3c8dGhpcy5o''@;'; put 'put ''dEVkaXRvci5jb3VudFJvd3MoKS0xJiYoaD0hMCksbD09PVlhLkFSUk9XX1VQJiZkX3Jvdz4tMSYmKGg9ITApLGh9b25CZWZvcmVLZXlEb3duKGwpe2lmKG5mZShsLmtleUNvZGUpfHxsLmtleUNvZGU9PT1ZYS5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PVlhLkRFTEVURXx8bC5rZXlDb2RlPT09''@;'; put 'put ''WWEuSU5TRVJUKXtsZXQgYT0xMDtpZihsLmtleUNvZGU9PT1ZYS5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChhKz0xMCksdGhpcy5odEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWUpfSxhKX19fWZ1bmN0aW9uIFZwZSgpe3RoaXMuaHRFZGl0b3Iudmlldy5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZ0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCkrZjAodGhpcy5ob3Qucm9vdERvY3VtZW50KX0pfWNsYXNzIEJw''@;'; put 'put ''ZSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iY2hlY2tib3gifWJlZ2luRWRpdGluZyhsLGEpe2lmKGEmJiJtb3VzZXVwIj09PWEudHlwZSYmIlREIj09PWEudGFyZ2V0Lm5vZGVOYW1lKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlw''@;'; put 'put ''ZT0iY2hlY2tib3giXScpO3BvKGQsImh0QmFkVmFsdWUiKXx8ZC5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRWYWx1ZSgpe31mb2N1cygpe319Y29uc3QgR209KCk9PndpbmRvdywkMj0oKT0+d2luZG93LmRvY3VtZW50''@;'; put 'put ''LE5YPShjLGwpPT53aW5kb3cuc2V0VGltZW91dChjLGwpLEhwPWZ1bmN0aW9uKGMsbCxhLGQpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0sa2c9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxSaD1mdW5jdGlvbihjLGwpe3JldHVybi0xIT09''@;'; put 'put ''KCIgIitjLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiAiK2wrIiAiKX0sVlg9ZnVuY3Rpb24oYyxsKXtSaChjLGwpfHwoYy5jbGFzc05hbWU9IiI9PT1jLmNsYXNzTmFtZT9sOmMuY2xhc3NOYW1lKyIgIitsKX0sQlg9ZnVuY3Rpb24oYyxsKXtjLmNsYXNzTmFtZT1mdW5jdGlvbihjKXtyZXR1''@;'; put 'put ''cm4gYy50cmltP2MudHJpbSgpOmMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSgoIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrbCsiICIsIiAiKSl9LGpYPWZ1bmN0aW9uKGMpe3JldHVybi9BcnJheS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpfSxM''@;'; put 'put ''aD1mdW5jdGlvbihjKXtyZXR1cm4vRGF0ZS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpJiYhaXNOYU4oYy5nZXRUaW1lKCkpfSxkYXQ9ZnVuY3Rpb24oYyl7bGV0IGw9Yy5nZXREYXkoKTtyZXR1cm4gMD09PWx8fDY9PT1sfSxoYXQ9ZnVuY3Rpb24oYyl7cmV0dXJu''@;'; put 'put ''IGMlND09MCYmYyUxMDAhPTB8fGMlNDAwPT0wfSxqcGU9ZnVuY3Rpb24oYyxsKXtyZXR1cm5bMzEsaGF0KGMpPzI5OjI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVtsXX0selA9ZnVuY3Rpb24oYyl7TGgoYykmJmMuc2V0SG91cnMoMCwwLDAsMCl9LFVQPWZ1bmN0aW9uKGMsbCl7''@;'; put 'put ''cmV0dXJuIGMuZ2V0VGltZSgpPT09bC5nZXRUaW1lKCl9LFpQPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZCxoO2ZvcihkIGluIGwpaD12b2lkIDAhPT1jW2RdLGgmJiJvYmplY3QiPT10eXBlb2YgbFtkXSYmbnVsbCE9PWxbZF0mJnZvaWQgMD09PWxbZF0ubm9kZU5hbWU/TGgobFtkXSk/YSYmKGNb''@;'; put 'put ''ZF09bmV3IERhdGUobFtkXS5nZXRUaW1lKCkpKTpqWChsW2RdKT9hJiYoY1tkXT1sW2RdLnNsaWNlKDApKTpjW2RdPVpQKHt9LGxbZF0sYSk6KGF8fCFoKSYmKGNbZF09bFtkXSk7cmV0dXJuIGN9LHpwZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9JDIoKS5jcmVhdGVFdmVudCgiSFRNTEV2ZW50''@;'; put 'put ''cyIpO2QuaW5pdEV2ZW50KGwsITAsITEpLGQ9WlAoZCxhKSxjLmRpc3BhdGNoRXZlbnQoZCl9LFVwZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5tb250aDwwJiYoYy55ZWFyLT1NYXRoLmNlaWwoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgrPTEyKSxjLm1vbnRoPjExJiYoYy55ZWFyKz1N''@;'; put 'put ''YXRoLmZsb29yKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRoLT0xMiksY30sTnA9e2ZpZWxkOm51bGwsYm91bmQ6dm9pZCAwLGFyaWFMYWJlbDoiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIHBpY2sgYSBkYXRlIixwb3NpdGlvbjoiYm90dG9tIGxlZnQiLHJlcG9zaXRpb246ITAsZm9ybWF0''@;'; put 'put ''OiJZWVlZLU1NLUREIix0b1N0cmluZzpudWxsLHBhcnNlOm51bGwsZGVmYXVsdERhdGU6bnVsbCxzZXREZWZhdWx0RGF0ZTohMSxmaXJzdERheTowLGZpcnN0V2Vla09mWWVhck1pbkRheXM6NCxmb3JtYXRTdHJpY3Q6ITEsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAs''@;'; put 'put ''c2hvd1dlZWtOdW1iZXI6ITEscGlja1dob2xlV2VlazohMSxtaW5ZZWFyOjAsbWF4WWVhcjo5OTk5LG1pbk1vbnRoOnZvaWQgMCxtYXhNb250aDp2b2lkIDAsc3RhcnRSYW5nZTpudWxsLGVuZFJhbmdlOm51bGwsaXNSVEw6ITEseWVhclN1ZmZpeDoiIixzaG93TW9udGhBZnRlclllYXI6ITEs''@;'; put 'put ''c2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsbnVtYmVyT2ZNb250aHM6MSxtYWluQ2FsZW5kYXI6ImxlZnQiLGNvbnRhaW5lcjp2b2lkIDAsYmx1ckZpZWxkT25TZWxlY3Q6ITAsaTE4bjp7cHJl''@;'; put 'put ''dmlvdXNNb250aDoiUHJldmlvdXMgTW9udGgiLG5leHRNb250aDoiTmV4dCBNb250aCIsbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1i''@;'; put 'put ''ZXIiXSx3ZWVrZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sd2Vla2RheXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdfSx0aGVtZTpudWxsLGV2ZW50czpb''@;'; put 'put ''XSxvblNlbGVjdDpudWxsLG9uT3BlbjpudWxsLG9uQ2xvc2U6bnVsbCxvbkRyYXc6bnVsbCxrZXlib2FyZElucHV0OiEwfSxacGU9ZnVuY3Rpb24oYyxsLGEpe2ZvcihsKz1jLmZpcnN0RGF5O2w+PTc7KWwtPTc7cmV0dXJuIGE/Yy5pMThuLndlZWtkYXlzU2hvcnRbbF06Yy5pMThuLndlZWtk''@;'; put 'put ''YXlzW2xdfSxmYXQ9ZnVuY3Rpb24oYyl7bGV0IGw9W10sYT0iZmFsc2UiO2lmKGMuaXNFbXB0eSl7aWYoIWMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocylyZXR1cm4nPHRkIGNsYXNzPSJpcy1lbXB0eSI+PC90ZD4nO2wucHVzaCgiaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIiks''@;'; put 'put ''Yy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHN8fGwucHVzaCgiaXMtc2VsZWN0aW9uLWRpc2FibGVkIil9cmV0dXJuIGMuaXNEaXNhYmxlZCYmbC5wdXNoKCJpcy1kaXNhYmxlZCIpLGMuaXNUb2RheSYmbC5wdXNoKCJpcy10b2RheSIpLGMuaXNTZWxlY3RlZCYm''@;'; put 'put ''KGwucHVzaCgiaXMtc2VsZWN0ZWQiKSxhPSJ0cnVlIiksYy5oYXNFdmVudCYmbC5wdXNoKCJoYXMtZXZlbnQiKSxjLmlzSW5SYW5nZSYmbC5wdXNoKCJpcy1pbnJhbmdlIiksYy5pc1N0YXJ0UmFuZ2UmJmwucHVzaCgiaXMtc3RhcnRyYW5nZSIpLGMuaXNFbmRSYW5nZSYmbC5wdXNoKCJpcy1l''@;'; put 'put ''bmRyYW5nZSIpLCc8dGQgZGF0YS1kYXk9IicrYy5kYXkrJyIgY2xhc3M9IicrbC5qb2luKCIgIikrJyIgYXJpYS1zZWxlY3RlZD0iJythKyciPjxidXR0b24gY2xhc3M9InBpa2EtYnV0dG9uIHBpa2EtZGF5IiB0eXBlPSJidXR0b24iIGRhdGEtcGlrYS15ZWFyPSInK2MueWVhcisnIiBkYXRh''@;'; put 'put ''LXBpa2EtbW9udGg9IicrYy5tb250aCsnIiBkYXRhLXBpa2EtZGF5PSInK2MuZGF5KyciPicrYy5kYXkrIjwvYnV0dG9uPjwvdGQ+In0sZ2F0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7bGV0IGY9bmV3IERhdGUoZCxhLGwpO3JldHVybic8dGQgY2xhc3M9InBpa2Etd2VlayI+JysoYy5oYXNNb21l''@;'; put 'put ''bnQ/Yy5tb21lbnQoZikuaXNvV2VlaygpOmZ1bmN0aW9uKGMsbCl7Yy5zZXRIb3VycygwLDAsMCwwKTtsZXQgYT1jLmdldERhdGUoKSxkPWMuZ2V0RGF5KCksaD1sLGY9aC0xLE09ZnVuY3Rpb24oeWUpe3JldHVybih5ZSs3LTEpJTd9O2Muc2V0RGF0ZShhK2YtTShkKSk7bGV0IEk9bmV3IERh''@;'; put 'put ''dGUoYy5nZXRGdWxsWWVhcigpLDAsaCksaWU9KGMuZ2V0VGltZSgpLUkuZ2V0VGltZSgpKS84NjRlNTtyZXR1cm4gMStNYXRoLnJvdW5kKChpZS1mK00oSS5nZXREYXkoKSkpLzcpfShmLGgpKSsiPC90ZD4ifSxtYXQ9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJuJzx0ciBjbGFzcz0icGlrYS1y''@;'; put 'put ''b3cnKyhhPyIgcGljay13aG9sZS13ZWVrIjoiIikrKGQ/IiBpcy1zZWxlY3RlZCI6IiIpKyciPicrKGw/Yy5yZXZlcnNlKCk6Yykuam9pbigiIikrIjwvdHI+In0sYmF0PWZ1bmN0aW9uKGMsbCxhLGQsaCxmKXtsZXQgdixNLEksRWUsamUsRz1jLl9vLGllPWE9PT1HLm1pblllYXIsdWU9YT09''@;'; put 'put ''PUcubWF4WWVhcix5ZT0nPGRpdiBpZD0iJytmKyciIGNsYXNzPSJwaWthLXRpdGxlIiByb2xlPSJoZWFkaW5nIiBhcmlhLWxpdmU9InBvbGl0ZSI+JyxxZT0hMCxydD0hMDtmb3IoST1bXSx2PTA7djwxMjt2KyspSS5wdXNoKCc8b3B0aW9uIHZhbHVlPSInKyhhPT09aD92LWw6MTIrdi1sKSsn''@;'; put 'put ''IicrKHY9PT1kPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyhpZSYmdjxHLm1pbk1vbnRofHx1ZSYmdj5HLm1heE1vbnRoPycgZGlzYWJsZWQ9ImRpc2FibGVkIic6IiIpKyI+IitHLmkxOG4ubW9udGhzW3ZdKyI8L29wdGlvbj4iKTtmb3IoRWU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwi''@;'; put 'put ''PicrRy5pMThuLm1vbnRoc1tkXSsnPHNlbGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGgiIHRhYmluZGV4PSItMSI+JytJLmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLGpYKEcueWVhclJhbmdlKT8odj1HLnllYXJSYW5nZVswXSxNPUcueWVhclJhbmdlWzFdKzEp''@;'; put 'put ''Oih2PWEtRy55ZWFyUmFuZ2UsTT0xK2ErRy55ZWFyUmFuZ2UpLEk9W107djxNJiZ2PD1HLm1heFllYXI7disrKXY+PUcubWluWWVhciYmSS5wdXNoKCc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT09YT8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrdisiPC9vcHRpb24+Iik7cmV0''@;'; put 'put ''dXJuIGplPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK2ErRy55ZWFyU3VmZml4Kyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEiPicrSS5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+Iix5ZSs9Ry5zaG93TW9udGhBZnRlclllYXI/''@;'; put 'put ''amUrRWU6RWUramUsaWUmJigwPT09ZHx8Ry5taW5Nb250aD49ZCkmJihxZT0hMSksdWUmJigxMT09PWR8fEcubWF4TW9udGg8PWQpJiYocnQ9ITEpLDA9PT1sJiYoeWUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhxZT8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4n''@;'; put 'put ''K0cuaTE4bi5wcmV2aW91c01vbnRoKyI8L2J1dHRvbj4iKSxsPT09Yy5fby5udW1iZXJPZk1vbnRocy0xJiYoeWUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLW5leHQnKyhydD8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK0cuaTE4bi5uZXh0TW9udGgrIjwvYnV0dG9uPiIp''@;'; put 'put ''LHllKyI8L2Rpdj4ifTtmdW5jdGlvbiB6WChjKXtsZXQgbD10aGlzLGE9bC5jb25maWcoYyk7bC5fb25Nb3VzZURvd249ZnVuY3Rpb24oaCl7aWYoIWwuX3YpcmV0dXJuO2xldCBmPShoPWh8fEdtKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2lmKGYpaWYoUmgoZiwiaXMtZGlzYWJs''@;'; put 'put ''ZWQiKXx8KCFSaChmLCJwaWthLWJ1dHRvbiIpfHxSaChmLCJpcy1lbXB0eSIpfHxSaChmLnBhcmVudE5vZGUsImlzLWRpc2FibGVkIik/UmgoZiwicGlrYS1wcmV2Iik/bC5wcmV2TW9udGgoKTpSaChmLCJwaWthLW5leHQiKSYmbC5uZXh0TW9udGgoKToobC5zZXREYXRlKG5ldyBEYXRlKGYu''@;'; put 'put ''Z2V0QXR0cmlidXRlKCJkYXRhLXBpa2EteWVhciIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtbW9udGgiKSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLWRheSIpKSksYS5ib3VuZCYmTlgoZnVuY3Rpb24oKXtsLmhpZGUoKSxhLmJsdXJGaWVsZE9uU2VsZWN0JiZhLmZpZWxkJiZhLmZp''@;'; put 'put ''ZWxkLmJsdXIoKX0sMTAwKSkpLFJoKGYsInBpa2Etc2VsZWN0IikpbC5fYz0hMDtlbHNle2lmKCFoLnByZXZlbnREZWZhdWx0KXJldHVybiBoLnJldHVyblZhbHVlPSExLCExO2gucHJldmVudERlZmF1bHQoKX19LGwuX29uQ2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fEdtKCkuZXZl''@;'; put 'put ''bnQpLnRhcmdldHx8aC5zcmNFbGVtZW50O2YmJihSaChmLCJwaWthLXNlbGVjdC1tb250aCIpP2wuZ290b01vbnRoKGYudmFsdWUpOlJoKGYsInBpa2Etc2VsZWN0LXllYXIiKSYmbC5nb3RvWWVhcihmLnZhbHVlKSl9LGwuX29uS2V5Q2hhbmdlPWZ1bmN0aW9uKGgpe2lmKGg9aHx8R20oKS5l''@;'; put 'put ''dmVudCxsLmlzVmlzaWJsZSgpKXN3aXRjaChoLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzphLmZpZWxkJiZhLmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OmwuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpO2JyZWFrO2Nhc2UgMzg6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7''@;'; put 'put ''Y2FzZSAzOTpsLmFkanVzdERhdGUoImFkZCIsMSk7YnJlYWs7Y2FzZSA0MDpsLmFkanVzdERhdGUoImFkZCIsNyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6bC5zZXREYXRlKG51bGwpfX0sbC5fcGFyc2VGaWVsZFZhbHVlPWZ1bmN0aW9uKCl7aWYoYS5wYXJzZSlyZXR1cm4gYS5wYXJzZShhLmZp''@;'; put 'put ''ZWxkLnZhbHVlLGEuZm9ybWF0KTtpZih0aGlzLmhhc01vbWVudCl7bGV0IGg9dGhpcy5tb21lbnQoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCxhLmZvcm1hdFN0cmljdCk7cmV0dXJuIGgmJmguaXNWYWxpZCgpP2gudG9EYXRlKCk6bnVsbH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShhLmZp''@;'; put 'put ''ZWxkLnZhbHVlKSl9LGwuX29uSW5wdXRDaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY7aC5maXJlZEJ5IT09bCYmKGY9bC5fcGFyc2VGaWVsZFZhbHVlKCksTGgoZikmJmwuc2V0RGF0ZShmKSxsLl92fHxsLnNob3coKSl9LGwuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9v''@;'; put 'put ''bklucHV0Q2xpY2s9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dEJsdXI9ZnVuY3Rpb24oKXtsZXQgaD0kMigpLmFjdGl2ZUVsZW1lbnQ7ZG97aWYoUmgoaCwicGlrYS1zaW5nbGUiKSlyZXR1cm59d2hpbGUoaD1oLnBhcmVudE5vZGUpO2wuX2N8fChsLl9iPU5YKGZ1bmN0aW9uKCl7''@;'; put 'put ''bC5oaWRlKCl9LDUwKSksbC5fYz0hMX0sbC5fb25DbGljaz1mdW5jdGlvbihoKXtsZXQgZj0oaD1ofHxHbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudCx2PWY7aWYoZil7IWhhc0V2ZW50TGlzdGVuZXJzJiZSaChmLCJwaWthLXNlbGVjdCIpJiYoZi5vbmNoYW5nZXx8KGYuc2V0QXR0''@;'; put 'put ''cmlidXRlKCJvbmNoYW5nZSIsInJldHVybjsiKSxIcChmLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSkpO2Rve2lmKFJoKHYsInBpa2Etc2luZ2xlIil8fHY9PT1hLnRyaWdnZXIpcmV0dXJufXdoaWxlKHY9di5wYXJlbnROb2RlKTtsLl92JiZmIT09YS50cmlnZ2VyJiZ2IT09YS50cmlnZ2VyJiZs''@;'; put 'put ''LmhpZGUoKX19LGwuZWw9JDIoKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsLmVsLmNsYXNzTmFtZT0icGlrYS1zaW5nbGUiKyhhLmlzUlRMPyIgaXMtcnRsIjoiIikrKGEudGhlbWU/IiAiK2EudGhlbWU6IiIpLEhwKGwuZWwsIm1vdXNlZG93biIsbC5fb25Nb3VzZURvd24sITApLEhwKGwuZWws''@;'; put 'put ''InRvdWNoZW5kIixsLl9vbk1vdXNlRG93biwhMCksSHAobC5lbCwiY2hhbmdlIixsLl9vbkNoYW5nZSksYS5rZXlib2FyZElucHV0JiZIcCgkMigpLCJrZXlkb3duIixsLl9vbktleUNoYW5nZSksYS5maWVsZCYmKGEuY29udGFpbmVyP2EuY29udGFpbmVyLmFwcGVuZENoaWxkKGwuZWwpOmEu''@;'; put 'put ''Ym91bmQ/JDIoKS5ib2R5LmFwcGVuZENoaWxkKGwuZWwpOmEuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobC5lbCxhLmZpZWxkLm5leHRTaWJsaW5nKSxIcChhLmZpZWxkLCJjaGFuZ2UiLGwuX29uSW5wdXRDaGFuZ2UpLGEuZGVmYXVsdERhdGV8fChhLmRlZmF1bHREYXRlPWwuX3Bh''@;'; put 'put ''cnNlRmllbGRWYWx1ZSgpLGEuc2V0RGVmYXVsdERhdGU9ITApKTtsZXQgZD1hLmRlZmF1bHREYXRlO0xoKGQpP2Euc2V0RGVmYXVsdERhdGU/bC5zZXREYXRlKGQsITApOmwuZ290b0RhdGUoZCk6bC5nb3RvRGF0ZShuZXcgRGF0ZSksYS5ib3VuZD8odGhpcy5oaWRlKCksbC5lbC5jbGFzc05h''@;'; put 'put ''bWUrPSIgaXMtYm91bmQiLEhwKGEudHJpZ2dlciwiY2xpY2siLGwuX29uSW5wdXRDbGljayksSHAoYS50cmlnZ2VyLCJmb2N1cyIsbC5fb25JbnB1dEZvY3VzKSxIcChhLnRyaWdnZXIsImJsdXIiLGwuX29uSW5wdXRCbHVyKSk6dGhpcy5zaG93KCl9ZnVuY3Rpb24gV3BlKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBTYXQoYyl7dmFyIGw9ZnVuY3Rpb24gTWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBVWChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9elgucHJvdG90eXBlPXtjb25maWc6ZnVuY3Rpb24oYyl7dGhpcy5fb3x8KHRoaXMuX289WlAoe30sTnAsITApKTtsZXQgbD1a''@;'; put 'put ''UCh0aGlzLl9vLGMsITApO2wuaXNSVEw9ISFsLmlzUlRMLGwuZmllbGQ9bC5maWVsZCYmbC5maWVsZC5ub2RlTmFtZT9sLmZpZWxkOm51bGwsbC50aGVtZT0ic3RyaW5nIj09dHlwZW9mIGwudGhlbWUmJmwudGhlbWU/bC50aGVtZTpudWxsLGwuYm91bmQ9ISEodm9pZCAwIT09bC5ib3VuZD9s''@;'; put 'put ''LmZpZWxkJiZsLmJvdW5kOmwuZmllbGQpLGwudHJpZ2dlcj1sLnRyaWdnZXImJmwudHJpZ2dlci5ub2RlTmFtZT9sLnRyaWdnZXI6bC5maWVsZCxsLmRpc2FibGVXZWVrZW5kcz0hIWwuZGlzYWJsZVdlZWtlbmRzLGwuZGlzYWJsZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBsLmRpc2FibGVE''@;'; put 'put ''YXlGbj9sLmRpc2FibGVEYXlGbjpudWxsO2xldCBhPXBhcnNlSW50KGwubnVtYmVyT2ZNb250aHMsMTApfHwxO2lmKGwubnVtYmVyT2ZNb250aHM9YT40PzQ6YSxMaChsLm1pbkRhdGUpfHwobC5taW5EYXRlPSExKSxMaChsLm1heERhdGUpfHwobC5tYXhEYXRlPSExKSxsLm1pbkRhdGUmJmwu''@;'; put 'put ''bWF4RGF0ZSYmbC5tYXhEYXRlPGwubWluRGF0ZSYmKGwubWF4RGF0ZT1sLm1pbkRhdGU9ITEpLGwubWluRGF0ZSYmdGhpcy5zZXRNaW5EYXRlKGwubWluRGF0ZSksbC5tYXhEYXRlJiZ0aGlzLnNldE1heERhdGUobC5tYXhEYXRlKSxqWChsLnllYXJSYW5nZSkpe2xldCBkPShuZXcgRGF0ZSku''@;'; put 'put ''Z2V0RnVsbFllYXIoKS0xMDtsLnllYXJSYW5nZVswXT1wYXJzZUludChsLnllYXJSYW5nZVswXSwxMCl8fGQsbC55ZWFyUmFuZ2VbMV09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMV0sMTApfHxkfWVsc2UgbC55ZWFyUmFuZ2U9TWF0aC5hYnMocGFyc2VJbnQobC55ZWFyUmFuZ2UsMTApKXx8TnAu''@;'; put 'put ''eWVhclJhbmdlLGwueWVhclJhbmdlPjEwMCYmKGwueWVhclJhbmdlPTEwMCk7cmV0dXJuIGx9LHRvU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybiBjPWN8fHRoaXMuX28uZm9ybWF0LExoKHRoaXMuX2QpP3RoaXMuX28udG9TdHJpbmc/dGhpcy5fby50b1N0cmluZyh0aGlzLl9kLGMpOnRoaXMu''@;'; put 'put ''aGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpLmZvcm1hdChjKTp0aGlzLl9kLnRvRGF0ZVN0cmluZygpOiIifSxnZXRNb21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKGMsbCl7dGhp''@;'; put 'put ''cy5oYXNNb21lbnQmJnRoaXMubW9tZW50LmlzTW9tZW50KGMpJiZ0aGlzLnNldERhdGUoYy50b0RhdGUoKSxsKX0sdXNlTW9tZW50OmZ1bmN0aW9uKGMpe3RoaXMuaGFzTW9tZW50PSEwLHRoaXMubW9tZW50PWN9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgodGhpcy5fZCk/bmV3IERh''@;'; put 'put ''dGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9LHNldERhdGU6ZnVuY3Rpb24oYyxsKXtpZighYylyZXR1cm4gdGhpcy5fZD1udWxsLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPSIiLHpwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksdGhpcy5k''@;'; put 'put ''cmF3KCk7aWYoInN0cmluZyI9PXR5cGVvZiBjJiYoYz1uZXcgRGF0ZShEYXRlLnBhcnNlKGMpKSksIUxoKGMpKXJldHVybjtsZXQgYT10aGlzLl9vLm1pbkRhdGUsZD10aGlzLl9vLm1heERhdGU7TGgoYSkmJmM8YT9jPWE6TGgoZCkmJmM+ZCYmKGM9ZCksdGhpcy5fZD1uZXcgRGF0ZShjLmdl''@;'; put 'put ''dFRpbWUoKSkselAodGhpcy5fZCksdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKSx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT10aGlzLnRvU3RyaW5nKCksenBlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSwhbCYmImZ1bmN0aW9uIj09dHlwZW9mIHRo''@;'; put 'put ''aXMuX28ub25TZWxlY3QmJnRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLHRoaXMuZ2V0RGF0ZSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLnNldERhdGUobnVsbCl9LGdvdG9EYXRlOmZ1bmN0aW9uKGMpe2xldCBsPSEwO2lmKExoKGMpKXtpZih0aGlzLmNhbGVuZGFycyl7bGV0IGE9bmV3''@;'; put 'put ''IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhcix0aGlzLmNhbGVuZGFyc1swXS5tb250aCwxKSxkPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwxKSxoPWMu''@;'; put 'put ''Z2V0VGltZSgpO2Quc2V0TW9udGgoZC5nZXRNb250aCgpKzEpLGQuc2V0RGF0ZShkLmdldERhdGUoKS0xKSxsPWg8YS5nZXRUaW1lKCl8fGQuZ2V0VGltZSgpPGh9bCYmKHRoaXMuY2FsZW5kYXJzPVt7bW9udGg6Yy5nZXRNb250aCgpLHllYXI6Yy5nZXRGdWxsWWVhcigpfV0sInJpZ2h0Ij09''@;'; put 'put ''PXRoaXMuX28ubWFpbkNhbGVuZGFyJiYodGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrPTEtdGhpcy5fby5udW1iZXJPZk1vbnRocykpLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9fSxhZGp1c3REYXRlOmZ1bmN0aW9uKGMsbCl7bGV0IGgsYT10aGlzLmdldERhdGUoKXx8bmV3IERhdGUsZD0yNCpw''@;'; put 'put ''YXJzZUludChsKSo2MCo2MCoxZTM7ImFkZCI9PT1jP2g9bmV3IERhdGUoYS52YWx1ZU9mKCkrZCk6InN1YnRyYWN0Ij09PWMmJihoPW5ldyBEYXRlKGEudmFsdWVPZigpLWQpKSx0aGlzLnNldERhdGUoaCl9LGFkanVzdENhbGVuZGFyczpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdPVVw''@;'; put 'put ''ZSh0aGlzLmNhbGVuZGFyc1swXSk7Zm9yKGxldCBjPTE7Yzx0aGlzLl9vLm51bWJlck9mTW9udGhzO2MrKyl0aGlzLmNhbGVuZGFyc1tjXT1VcGUoe21vbnRoOnRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoK2MseWVhcjp0aGlzLmNhbGVuZGFyc1swXS55ZWFyfSk7dGhpcy5kcmF3KCl9LGdvdG9U''@;'; put 'put ''b2RheTpmdW5jdGlvbigpe3RoaXMuZ290b0RhdGUobmV3IERhdGUpfSxnb3RvTW9udGg6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5j''@;'; put 'put ''YWxlbmRhcnNbMF0ubW9udGgrKyx0aGlzLmFkanVzdENhbGVuZGFycygpfSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0u''@;'; put 'put ''eWVhcj1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sc2V0TWluRGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oelAoYyksdGhpcy5fby5taW5EYXRlPWMsdGhpcy5fby5taW5ZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1pbk1vbnRoPWMuZ2V0''@;'; put 'put ''TW9udGgoKSk6KHRoaXMuX28ubWluRGF0ZT1OcC5taW5EYXRlLHRoaXMuX28ubWluWWVhcj1OcC5taW5ZZWFyLHRoaXMuX28ubWluTW9udGg9TnAubWluTW9udGgsdGhpcy5fby5zdGFydFJhbmdlPU5wLnN0YXJ0UmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRNYXhEYXRlOmZ1bmN0aW9uKGMpe2Mg''@;'; put 'put ''aW5zdGFuY2VvZiBEYXRlPyh6UChjKSx0aGlzLl9vLm1heERhdGU9Yyx0aGlzLl9vLm1heFllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWF4TW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5tYXhEYXRlPU5wLm1heERhdGUsdGhpcy5fby5tYXhZZWFyPU5wLm1heFllYXIsdGhpcy5f''@;'; put 'put ''by5tYXhNb250aD1OcC5tYXhNb250aCx0aGlzLl9vLmVuZFJhbmdlPU5wLmVuZFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0U3RhcnRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLnN0YXJ0UmFuZ2U9Y30sc2V0RW5kUmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5lbmRSYW5nZT1jfSxkcmF3OmZ1''@;'; put 'put ''bmN0aW9uKGMpe2lmKCF0aGlzLl92JiYhYylyZXR1cm47bGV0IE0sbD10aGlzLl9vLGE9bC5taW5ZZWFyLGQ9bC5tYXhZZWFyLGg9bC5taW5Nb250aCxmPWwubWF4TW9udGgsdj0iIjt0aGlzLl95PD1hJiYodGhpcy5feT1hLCFpc05hTihoKSYmdGhpcy5fbTxoJiYodGhpcy5fbT1oKSksdGhp''@;'; put 'put ''cy5feT49ZCYmKHRoaXMuX3k9ZCwhaXNOYU4oZikmJnRoaXMuX20+ZiYmKHRoaXMuX209ZikpO2ZvcihsZXQgST0wO0k8bC5udW1iZXJPZk1vbnRocztJKyspTT0icGlrYS10aXRsZS0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywiIikuc3Vic3RyKDAs''@;'; put 'put ''Miksdis9JzxkaXYgY2xhc3M9InBpa2EtbGVuZGFyIj4nK2JhdCh0aGlzLEksdGhpcy5jYWxlbmRhcnNbSV0ueWVhcix0aGlzLmNhbGVuZGFyc1tJXS5tb250aCx0aGlzLmNhbGVuZGFyc1swXS55ZWFyLE0pK3RoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW0ldLnllYXIsdGhpcy5jYWxlbmRh''@;'; put 'put ''cnNbSV0ubW9udGgsTSkrIjwvZGl2PiI7dGhpcy5lbC5pbm5lckhUTUw9dixsLmJvdW5kJiYiaGlkZGVuIiE9PWwuZmllbGQudHlwZSYmTlgoZnVuY3Rpb24oKXtsLnRyaWdnZXIuZm9jdXMoKX0sMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25EcmF3JiZ0aGlzLl9vLm9uRHJhdyh0''@;'; put 'put ''aGlzKSxsLmJvdW5kJiZsLmZpZWxkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbC5hcmlhTGFiZWwpfSxhZGp1c3RQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBjLGwsYSxkLGgsZix2LE0sSSxHLGllO3RoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1''@;'; put 'put ''dGUiLGM9dGhpcy5fby50cmlnZ2VyLGw9dGhpcy5lbC5vZmZzZXRXaWR0aCxhPXRoaXMuZWwub2Zmc2V0SGVpZ2h0LGQ9R20oKS5pbm5lcldpZHRofHwkMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxoPUdtKCkuaW5uZXJIZWlnaHR8fCQyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVu''@;'; put 'put ''dEhlaWdodCxmPSQyKCkuYm9keS5zY3JvbGxUb3B8fCQyKCkuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxHPSEwLGllPSEwLEk9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PUkubGVmdCtHbSgpLnBhZ2VYT2Zmc2V0LE09SS5ib3R0b20rR20oKS5wYWdlWU9mZnNldCwodGhpcy5fby5y''@;'; put 'put ''ZXBvc2l0aW9uJiZ2K2w+ZHx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpPi0xJiZ2LWwrYy5vZmZzZXRXaWR0aD4wKSYmKHY9di1sK2Mub2Zmc2V0V2lkdGgsRz0hMSksKHRoaXMuX28ucmVwb3NpdGlvbiYmTSthPmgrZnx8dGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKCJ0b3Ai''@;'; put 'put ''KT4tMSYmTS1hLWMub2Zmc2V0SGVpZ2h0PjApJiYoTT1NLWEtYy5vZmZzZXRIZWlnaHQsaWU9ITEpLHY8MCYmKHY9MCksTTwwJiYoTT0wKSx0aGlzLmVsLnN0eWxlLmxlZnQ9disicHgiLHRoaXMuZWwuc3R5bGUudG9wPU0rInB4IixWWCh0aGlzLmVsLEc/ImxlZnQtYWxpZ25lZCI6InJpZ2h0''@;'; put 'put ''LWFsaWduZWQiKSxWWCh0aGlzLmVsLGllPyJib3R0b20tYWxpZ25lZCI6InRvcC1hbGlnbmVkIiksQlgodGhpcy5lbCxHPyJyaWdodC1hbGlnbmVkIjoibGVmdC1hbGlnbmVkIiksQlgodGhpcy5lbCxpZT8idG9wLWFsaWduZWQiOiJib3R0b20tYWxpZ25lZCIpKX0scmVuZGVyOmZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhKXtsZXQgZD10aGlzLl9vLGg9bmV3IERhdGUsZj1qcGUoYyxsKSx2PW5ldyBEYXRlKGMsbCwxKS5nZXREYXkoKSxNPVtdLEk9W107elAoaCksZC5maXJzdERheT4wJiYodi09ZC5maXJzdERheSx2PDAmJih2Kz03KSk7bGV0IEc9MD09PWw/MTE6bC0xLGllPTExPT09bD8wOmwrMSx1''@;'; put 'put ''ZT0wPT09bD9jLTE6Yyx5ZT0xMT09PWw/YysxOmMsRWU9anBlKHVlLEcpLGplPWYrdixxZT1qZTtmb3IoO3FlPjc7KXFlLT03O2plKz03LXFlO2xldCBydD0hMTtmb3IobGV0IHB0PTAsZHQ9MDtwdDxqZTtwdCsrKXtsZXQgSnQ9bmV3IERhdGUoYyxsLHB0LXYrMSksdm49ISFMaCh0aGlzLl9k''@;'; put 'put ''KSYmVVAoSnQsdGhpcy5fZCksQ249VVAoSnQsaCksdG49LTEhPT1kLmV2ZW50cy5pbmRleE9mKEp0LnRvRGF0ZVN0cmluZygpKSxNbj1wdDx2fHxwdD49Zit2LENyPXB0LXYrMSxHcj1sLG1yPWMsR249ZC5zdGFydFJhbmdlJiZVUChkLnN0YXJ0UmFuZ2UsSnQpLGFpPWQuZW5kUmFuZ2UmJlVQ''@;'; put 'put ''KGQuZW5kUmFuZ2UsSnQpLF9pPWQuc3RhcnRSYW5nZSYmZC5lbmRSYW5nZSYmZC5zdGFydFJhbmdlPEp0JiZKdDxkLmVuZFJhbmdlLE9uPWQubWluRGF0ZSYmSnQ8ZC5taW5EYXRlfHxkLm1heERhdGUmJkp0PmQubWF4RGF0ZXx8ZC5kaXNhYmxlV2Vla2VuZHMmJmRhdChKdCl8fGQuZGlzYWJs''@;'; put 'put ''ZURheUZuJiZkLmRpc2FibGVEYXlGbihKdCk7TW4mJihwdDx2PyhDcj1FZStDcixHcj1HLG1yPXVlKTooQ3ItPWYsR3I9aWUsbXI9eWUpKSxkLnBpY2tXaG9sZVdlZWsmJnZuJiYocnQ9ITApLEkucHVzaChmYXQoe2RheTpDcixtb250aDpHcix5ZWFyOm1yLGhhc0V2ZW50OnRuLGlzU2VsZWN0''@;'; put 'put ''ZWQ6dm4saXNUb2RheTpDbixpc0Rpc2FibGVkOk9uLGlzRW1wdHk6TW4saXNTdGFydFJhbmdlOkduLGlzRW5kUmFuZ2U6YWksaXNJblJhbmdlOl9pLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzLGVuYWJsZVNlbGVjdGlv''@;'; put 'put ''bkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc30pKSw3PT0rK2R0JiYoZC5zaG93V2Vla051bWJlciYmSS51bnNoaWZ0KGdhdCh0aGlzLHB0LXYsbCxjLGQuZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykpLE0ucHVz''@;'; put 'put ''aChtYXQoSSxkLmlzUlRMLGQucGlja1dob2xlV2VlayxydCkpLEk9W10sZHQ9MCxydD0hMSl9cmV0dXJuIGZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4nPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBpa2EtdGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxs''@;'; put 'put ''ZWRieT0iJythKyciPicrZnVuY3Rpb24oYyl7bGV0IGwsYT1bXTtmb3IoYy5zaG93V2Vla051bWJlciYmYS5wdXNoKCI8dGg+PC90aD4iKSxsPTA7bDw3O2wrKylhLnB1c2goJzx0aCBzY29wZT0iY29sIj48YWJiciB0aXRsZT0iJytacGUoYyxsKSsnIj4nK1pwZShjLGwsITApKyI8L2FiYnI+''@;'; put 'put ''PC90aD4iKTtyZXR1cm4iPHRoZWFkPjx0cj4iKyhjLmlzUlRMP2EucmV2ZXJzZSgpOmEpLmpvaW4oIiIpKyI8L3RyPjwvdGhlYWQ+In0oYykrZnVuY3Rpb24oYyl7cmV0dXJuIjx0Ym9keT4iK2Muam9pbigiIikrIjwvdGJvZHk+In0obCkrIjwvdGFibGU+In0oZCxNLGEpfSxpc1Zpc2libGU6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdn0sc2hvdzpmdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlKCl8fCh0aGlzLl92PSEwLHRoaXMuZHJhdygpLEJYKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX28uYm91bmQmJihIcCgkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5hZGp1''@;'; put 'put ''c3RQb3NpdGlvbigpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbk9wZW4mJnRoaXMuX28ub25PcGVuLmNhbGwodGhpcykpfSxoaWRlOmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fdjshMSE9PWMmJih0aGlzLl9vLmJvdW5kJiZrZygkMigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhp''@;'; put 'put ''cy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiLHRoaXMuZWwuc3R5bGUubGVmdD0iYXV0byIsdGhpcy5lbC5zdHlsZS50b3A9ImF1dG8iKSxWWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl92PSExLHZvaWQgMCE9PWMmJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB0aGlzLl9vLm9uQ2xvc2UmJnRoaXMuX28ub25DbG9zZS5jYWxsKHRoaXMpKX0sZGVzdHJveTpmdW5jdGlvbigpe2xldCBjPXRoaXMuX287dGhpcy5oaWRlKCksa2codGhpcy5lbCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biwhMCksa2codGhpcy5lbCwidG91Y2hlbmQiLHRoaXMu''@;'; put 'put ''X29uTW91c2VEb3duLCEwKSxrZyh0aGlzLmVsLCJjaGFuZ2UiLHRoaXMuX29uQ2hhbmdlKSxjLmtleWJvYXJkSW5wdXQmJmtnKCQyKCksImtleWRvd24iLHRoaXMuX29uS2V5Q2hhbmdlKSxjLmZpZWxkJiYoa2coYy5maWVsZCwiY2hhbmdlIix0aGlzLl9vbklucHV0Q2hhbmdlKSxjLmJvdW5k''@;'; put 'put ''JiYoa2coYy50cmlnZ2VyLCJjbGljayIsdGhpcy5fb25JbnB1dENsaWNrKSxrZyhjLnRyaWdnZXIsImZvY3VzIix0aGlzLl9vbklucHV0Rm9jdXMpLGtnKGMudHJpZ2dlciwiYmx1ciIsdGhpcy5fb25JbnB1dEJsdXIpKSksdGhpcy5lbC5wYXJlbnROb2RlJiZ0aGlzLmVsLnBhcmVudE5vZGUu''@;'; put 'put ''cmVtb3ZlQ2hpbGQodGhpcy5lbCl9fTtjb25zdCBZcGU9ImRhdGUiLEdwZT0iZGF0ZUVkaXRvciI7dmFyIFdQPW5ldyBXZWFrU2V0O2NsYXNzICRwZSBleHRlbmRzIGE5e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB3YXQoYyxsKXsoZnVuY3Rpb24gQ2F0KGMs''@;'; put 'put ''bCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsV1ApLFdwZSh0aGlzLCJwYXJlbnREZXN0cm95ZWQiLCExKSxXcGUodGhp''@;'; put 'put ''cywiJGRhdGVQaWNrZXIiLG51bGwpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4gWXBlfWluaXQoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgT28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5qcyB0byB5b3VyIHByb2plY3QuIik7c3VwZXIuaW5p''@;'; put 'put ''dCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLnBhcmVudERlc3Ryb3llZD0hMCx0aGlzLmRlc3Ryb3lFbGVtZW50cygpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9PnthfHwobG8odGhpcy5kYXRlUGlja2VyLC9odC10aGVtZS0u''@;'; put 'put ''Ki9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCkpfSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuZGF0ZVBpY2tlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kYXRlUGlja2VyU3R5bGU9dGhpcy5kYXRlUGlja2Vy''@;'; put 'put ''LnN0eWxlLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPTAsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnpJbmRleD05OTk5LHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''ImRpciIsdGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIiksVGkodGhpcy5kYXRlUGlja2VyLCJodERhdGVwaWNrZXJIb2xkZXIiKTtjb25zdCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTtsbyh0aGlzLmRhdGVQaWNrZXIsL2h0LXRoZW1lLS4qL2cpLFRpKHRoaXMuZGF0ZVBp''@;'; put 'put ''Y2tlcixsKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGE9PntwbyhhLnRhcmdldCwicGlrYS1kYXkiKSYmdGhpcy5oaWRl''@;'; put 'put ''RGF0ZXBpY2tlcigpLGEuc3RvcFByb3BhZ2F0aW9uKCl9KX1kZXN0cm95RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZGF0ZVBpY2tlci5wYXJlbnROb2RlO3RoaXMuJGRhdGVQaWNrZXImJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2Vy''@;'; put 'put ''KX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX1vcGVuKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3QgZD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRD''@;'; put 'put ''b250ZXh0KCJlZGl0b3IiKTt0aGlzLnNob3dEYXRlcGlja2VyKGwpLHN1cGVyLm9wZW4oKSxkLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSl9fSx7a2V5czpbWyJBcnJvd1Jp''@;'; put 'put ''Z2h0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDEpfX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxi''@;'; put 'put ''YWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDcpfX1dLHtncm91cDpHcGV9KX1jbG9zZSgpe3ZhciBsO3RoaXMuX29wZW5lZD0hMSxudWxsIT09KGw9dGhpcy4kZGF0ZVBpY2tlcikmJnZvaWQgMCE9PWwmJmwuZGVzdHJveSYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0''@;'; put 'put ''cm95KCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2NvbnN0IGg9dGhpcy5ob3QuX2dldEVkaXRvck1hbmFnZXIoKTtoLmNsb3NlRWRpdG9yKCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxoLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdl''@;'; put 'put ''dENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR3BlKSxzdXBlci5jbG9zZSgpfWZpbmlzaEVkaXRpbmcoKXtzdXBlci5maW5pc2hFZGl0aW5nKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT1VWChXUCx0aGlzLFpYKS5jYWxsKHRoaXMpLGQ9dGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpLGg9ISFsJiZIJChsLmtleUNvZGUpO2xldCBmO3RoaXMuZGF0ZVBp''@;'; put 'put ''Y2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0ZVBpY2tlcj1uZXcgelgodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudCYmdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQoT28pLHRoaXMuJGRh''@;'; put 'put ''dGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigpe30sdGhpcy5vcmlnaW5hbFZhbHVlPyhmPXRoaXMub3JpZ2luYWxWYWx1ZSxPbyhmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoT28oZixhKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmln''@;'; put 'put ''aW5hbFZhbHVlJiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWgmJiFkJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLE9vKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlz''@;'; put 'put ''LiRkYXRlUGlja2VyLnNldE1vbWVudChPbyhmLGEpLCEwKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRl''@;'; put 'put ''KCl9Z2V0RGF0ZVBpY2tlckNvbmZpZygpe3ZhciBsO2NvbnN0IGE9dGhpcy5URVhUQVJFQSxkPXt9O3RoaXMuY2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmeEUoZCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0''@;'; put 'put ''IGg9ZC5vblNlbGVjdCxmPWQub25DbG9zZTtyZXR1cm4gZC5maWVsZD1hLGQudHJpZ2dlcj1hLGQuY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixkLmJvdW5kPSExLGQua2V5Ym9hcmRJbnB1dD0hMSxkLmZvcm1hdD1udWxsIT09KGw9ZC5mb3JtYXQpJiZ2b2lkIDAhPT1sP2w6VVgoV1AsdGhp''@;'; put 'put ''cyxaWCkuY2FsbCh0aGlzKSxkLnJlcG9zaXRpb249ZC5yZXBvc2l0aW9ufHwhMSxkLmlzUlRMPSExLGQub25TZWxlY3Q9dj0+e2xldCBNPXY7aXNOYU4oTS5nZXRUaW1lKCkpfHwoTT1PbyhNKS5mb3JtYXQoVVgoV1AsdGhpcyxaWCkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUoTSksaCYm''@;'; put 'put ''aCgpLEFwKCkmJnRoaXMuaGlkZURhdGVwaWNrZXIoKX0sZC5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksZiYmZigpfSxkfXJlZnJlc2hEaW1lbnNpb25zKGwpe3ZhciBhO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGwpLHRoaXMu''@;'; put 'put ''c3RhdGUhPT1sdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PXRoaXMuaG90LHt3dE92ZXJsYXlz''@;'; put 'put ''OmZ9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRhYmxlOnZ9PW51bGwhPT0oYT1mLmdldFBhcmVudE92ZXJsYXkodGhpcy5URCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5ob3Qudmlldy5fd3QsTT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVS''@;'; put 'put ''b3coKSksST1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSxHPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSxpZT1oLmdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtpZih0aGlzLnJvdz49TSYmdGhpcy5yb3c8PUkmJnRoaXMuY29sPj1HJiZ0aGlzLmNvbDw9aWUpe2NvbnN0IHVlPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9w''@;'; put 'put ''PWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQrdWUudG9wK3h1KHRoaXMuVEQpfXB4YDtsZXQgeWU9dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDt0aGlzLmhvdC5pc1J0bCgpP3llKz11ZS5yaWdodC1zdSh0aGlzLmRhdGVQaWNrZXIpOnllKz11ZS5sZWZ0LHRoaXMu''@;'; put 'put ''ZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7eWV9cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5jdGlvbiBaWCgpe3ZhciBjO3JldHVybiBudWxsIT09KGM9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0KSYmdm9pZCAwIT09Yz9jOiJERC9NTS9ZWVlZIn1jbGFzcyBLcGUg''@;'; put 'put ''ZXh0ZW5kcyBIWHtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgsZix2KXt2LmZpbHRlcj0hMSx2LnN0cmljdD0hMCxzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX19Y2xhc3MgcXBlIGV4dGVuZHMgYTl7c3RhdGljIGdldCBFRElUT1Jf''@;'; put 'put ''VFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgWHBlIGV4dGVuZHMgYTl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEFhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2F0KGMpe3ZhciBsPWZ1bmN0aW9uIERhdChjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1''@;'; put 'put ''cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAs''@;'; put 'put ''Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImF1dG9SZXNpemUiLEFwZSh0aGlzLmhvdC5yb290RG9jdW1lbnQse3RleHRDb250ZW50Omw9PiJcdTIwMjIiLnJlcGVhdChsLnZhbHVlLmxlbmd0aCl9KSl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVy''@;'; put 'put ''biJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVY''@;'; put 'put ''VEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0''@;'; put 'put ''eWxlLmhlaWdodD0wLHhwKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgV1g9Imh0X2VkaXRvcl92aXNpYmxlIixKcGU9InNlbGVjdEVkaXRvciI7Y2xhc3MgUXBlIGV4dGVuZHMga197c3RhdGljIGdl''@;'; put 'put ''dCBFRElUT1JfVFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdFdyYXBwZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2VsZWN0PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSx0aGlzLnNl''@;'; put 'put ''bGVjdC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwidHJ1ZSIpLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRh''@;'; put 'put ''Z3M7bC5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRlQXJyb3ciLGEmJmwuc2V0QXR0cmlidXRlKC4uLlY3KCkpLGwuYXBwZW5kQ2hpbGQodGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksVGkodGhpcy5zZWxlY3RXcmFwcGVyLCJodFNlbGVjdEVkaXRvciIp''@;'; put 'put ''LHRoaXMuc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdCksdGhpcy5zZWxlY3RXcmFwcGVyLmluc2VydEJlZm9yZShsLHRoaXMuc2VsZWN0V3JhcHBlci5maXJzdENoaWxkKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdFdyYXBwZXIpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZhbHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3Bs''@;'; put 'put ''YXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29wZW5lZD0hMSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIscG8odGhpcy5z''@;'; put 'put ''ZWxlY3RXcmFwcGVyLFdYKSYmbG8odGhpcy5zZWxlY3RXcmFwcGVyLFdYKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFySG9va3MoKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9u''@;'; put 'put ''dGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygp''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgSTtJPXRoaXMu''@;'; put 'put ''cHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09dHlwZW9mIE0/TSh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOk0pLHhwKHRoaXMuc2VsZWN0KSxYbyhJLChHLGllKT0+e2NvbnN0IHVlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTt1ZS52YWx1ZT1p''@;'; put 'put ''ZSx6Nyh1ZSxHKSx0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZCh1ZSl9KX1wcmVwYXJlT3B0aW9ucyhsKXtsZXQgYT17fTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgZD0wLGg9bC5sZW5ndGg7ZDxoO2QrKylhW2xbZF1dPWxbZF07ZWxzZSJvYmplY3QiPT10eXBlb2YgbCYmKGE9bCk7cmV0''@;'; put 'put ''dXJuIGF9cmVmcmVzaFZhbHVlKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMucm93LHRoaXMucHJvcCk7dGhpcy5vcmlnaW5hbFZhbHVlPWwsdGhpcy5zZXRWYWx1ZShsKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9cmVmcmVzaERpbWVuc2lvbnMoKXtpZih0''@;'; put 'put ''aGlzLnN0YXRlIT09bHUuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENlbGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7Y29uc3R7dG9wOmwsc3RhcnQ6YSx3aWR0aDpkLGhlaWdodDpofT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksZj10aGlz''@;'; put 'put ''LnNlbGVjdFdyYXBwZXIuc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhgLGYubWFyZ2luPSIwcHgiLFRpKHRoaXMuc2VsZWN0V3JhcHBlcixXWCl9cmVnaXN0ZXJT''@;'; put 'put ''aG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGQ9e2dyb3VwOkpwZX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJmEuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57Y29uc3Qg''@;'; put 'put ''aD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4LTE7aD49MCYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleCsxO2g8PXRoaXMuc2VsZWN0Lmxlbmd0aC0xJiYo''@;'; put 'put ''dGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX1dLGQpfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpwZSl9fWNsYXNzIGU0ZSBleHRlbmRzIGE5e3N0YXRpYyBn''@;'; put 'put ''ZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGltZSJ9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksdGhpcy5URVhUQVJFQS5kaXI9Imx0ciJ9fWZ1bmN0aW9uIFlYKGMsbCxhLGQsaCxmLHYpe29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSx6Nyhs''@;'; put 'put ''LGY/PyIiLCExKX1mdW5jdGlvbiBJXyhjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxJPXYuYWxsb3dIdG1sP1lYOkFnLEc9TS5jcmVhdGVFbGVtZW50KCJESVYiKSxpZT1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7aWYoRy5jbGFzc05hbWU9Imh0QXV0b2NvbXBsZXRl''@;'; put 'put ''QXJyb3ciLGllJiZHLnNldEF0dHJpYnV0ZSguLi5WNygpKSxHLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIlx1MjViYyIpKSxJLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxsLmlu''@;'; put 'put ''c2VydEJlZm9yZShHLGwuZmlyc3RDaGlsZCksVGkobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlzdGVuZXIpe2NvbnN0IHVlPW5ldyBqMihjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbih5ZSl7cG8oeWUudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJmMudmlldy5f''@;'; put 'put ''d3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwpfSx1ZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9Pnt1''@;'; put 'put ''ZS5kZXN0cm95KCl9KX19ZnVuY3Rpb24gR1goYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfVlYLlJFTkRFUkVSX1RZUEU9Imh0bWwiLElfLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsR1guUkVOREVSRVJfVFlQRT0iZHJvcGRvd24iO2NvbnN0IHQ0''@;'; put 'put ''ZT1uZXcgV2Vha01hcCxuNGU9bmV3IFdlYWtNYXAsTmF0PSJodEJhZFZhbHVlIixSXz0iZGF0YS1yb3ciLExfPSJkYXRhLWNvbCIsVmF0PSJjaGVja2JveFJlbmRlcmVyIjtmdW5jdGlvbiAkWChjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxJPWMuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KS5hcmlhVGFncztvVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksZnVuY3Rpb24gQmF0KGMpe2xldCBsPW40ZS5nZXQoYyk7aWYoIWwpe2NvbnN0e3Jvb3RFbGVtZW50OmF9PWM7bD1uZXcgajIoYyksbC5hZGRFdmVudExpc3RlbmVyKGEsImNsaWNrIixkPT5mdW5jdGlvbiBaYXQoYyxs''@;'; put 'put ''KXtjb25zdHt0YXJnZXQ6YX09YztpZighS1goYSl8fCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCk7bC5nZXRDZWxsTWV0''@;'; put 'put ''YShkLGgpLnJlYWRPbmx5JiZjLnByZXZlbnREZWZhdWx0KCl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIixkPT5mdW5jdGlvbiBVYXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztLWChhKSYmKCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXyl8fHNl''@;'; put 'put ''dFRpbWVvdXQobC5saXN0ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gV2F0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUtYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoUl8pfHwhYS5oYXNBdHRyaWJ1dGUoTF8pKXJldHVybjtjb25zdCBk''@;'; put 'put ''PXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFJfKSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShMXyksMTApLGY9bC5nZXRDZWxsTWV0YShkLGgpO2lmKCFmLnJlYWRPbmx5KXtsZXQgdj1udWxsO3Y9Yy50YXJnZXQuY2hlY2tlZD92b2lkIDA9PT1mLnVuY2hlY2tlZFRlbXBsYXRlfHxm''@;'; put 'put ''LmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAhPT1mLnVuY2hlY2tlZFRlbXBsYXRlJiZmLnVuY2hlY2tlZFRlbXBsYXRlLGwuc2V0RGF0YUF0Q2VsbChkLGgsdil9fShkLGMpKSxuNGUuc2V0KGMsbCl9fShjKTtsZXQgRz1mdW5jdGlvbiBqYXQoYyl7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImlu''@;'; put 'put ''cHV0Iik7cmV0dXJuIGwuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJJbnB1dCIsbC50eXBlPSJjaGVja2JveCIsbC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxsLmNsb25lTm9kZSghMSl9KE0pO2NvbnN0IGllPXYubGFiZWw7bGV0IHVlPSExO2lmKHR5cGVvZiB2LmNoZWNr''@;'; put 'put ''ZWRUZW1wbGF0ZT4idSImJih2LmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIHYudW5jaGVja2VkVGVtcGxhdGU+InUiJiYodi51bmNoZWNrZWRUZW1wbGF0ZT0hMSkseHAobCksZj09PXYuY2hlY2tlZFRlbXBsYXRlfHxsYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1sYyh2''@;'; put 'put ''LmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpP0cuY2hlY2tlZD0hMDpmPT09di51bmNoZWNrZWRUZW1wbGF0ZXx8bGMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bGModi51bmNoZWNrZWRUZW1wbGF0ZSkudG9Mb2NhbGVMb3dlckNhc2Uodi5s''@;'; put 'put ''b2NhbGUpP0cuY2hlY2tlZD0hMTpVYyhmKT9UaShHLCJub1ZhbHVlIik6KEcuc3R5bGUuZGlzcGxheT0ibm9uZSIsVGkoRyxOYXQpLHVlPSEwKSx2byhHLFtbUl8sYV0sW0xfLGRdXSksSSYmdm8oRyxbbUUoYy5nZXRUcmFuc2xhdGVkUGhyYXNlKEcuY2hlY2tlZD9oWDpmWCkpLEkyZShHLmNo''@;'; put 'put ''ZWNrZWQpLEtxZSgpXSksIXVlJiZpZSl7bGV0IHFlPSIiO2lmKGllLnZhbHVlKXFlPSJmdW5jdGlvbiI9PXR5cGVvZiBpZS52YWx1ZT9pZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6aWUudmFsdWU7ZWxzZSBpZihpZS5wcm9wZXJ0eSl7Y29uc3QgcHQ9Yy5nZXREYXRhQXRSb3dQcm9wKGEs''@;'; put 'put ''aWUucHJvcGVydHkpO3FlPW51bGwhPT1wdD9wdDoiIn1jb25zdCBydD1mdW5jdGlvbiB6YXQoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2QuY2xhc3NOYW1lPSJodENoZWNrYm94UmVuZGVyZXJMYWJlbCAiKyhhPyJmdWxsV2lkdGgiOiIiKTtjb25zdCBoPWMuY3Jl''@;'; put 'put ''YXRlVGV4dE5vZGUobCk7aWYoYSl7Y29uc3QgZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmFwcGVuZENoaWxkKGgpLGQuYXBwZW5kQ2hpbGQoZil9ZWxzZSBkLmFwcGVuZENoaWxkKGgpO3JldHVybiBkLmNsb25lTm9kZSghMCl9KE0scWUsITAhPT1pZS5zZXBhcmF0ZWQpOyJiZWZvcmUi''@;'; put 'put ''PT09aWUucG9zaXRpb24/aWUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKHJ0KSxsLmFwcGVuZENoaWxkKEcpKToocnQuYXBwZW5kQ2hpbGQoRyksRz1ydCk6KCFpZS5wb3NpdGlvbnx8ImFmdGVyIj09PWllLnBvc2l0aW9uKSYmKGllLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChHKSxsLmFw''@;'; put 'put ''cGVuZENoaWxkKHJ0KSk6KHJ0Lmluc2VydEJlZm9yZShHLHJ0LmZpcnN0Q2hpbGQpLEc9cnQpKX1mdW5jdGlvbiBFZSgpe2xldCBxZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHJ0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHB0''@;'; put 'put ''PVtdLGR0PW5ldyBNYXA7bGV0IEp0PVtdLHZuPTA7aWYocnQpe2ZvcihsZXQgQ249MDtDbjxydC5sZW5ndGg7Q24rKyl7Y29uc3R7cm93OnRuLGNvbDpNbn09cnRbQ25dLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpDcixjb2w6R3J9PXJ0W0NuXS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3Io''@;'; put 'put ''bGV0IG1yPXRuO21yPD1Dcjttcis9MSlmb3IobGV0IEduPU1uO0duPD1HcjtHbis9MSl7Y29uc3QgYWk9Yy5nZXRDZWxsTWV0YShtcixHbik7aWYoYWkuaGlkZGVuKWNvbnRpbnVlO2NvbnN0IF9pPXtjaGVja2VkVGVtcGxhdGU6YWkuY2hlY2tlZFRlbXBsYXRlLHVuY2hlY2tlZFRlbXBsYXRl''@;'; put 'put ''OmFpLnVuY2hlY2tlZFRlbXBsYXRlfTtpZigiY2hlY2tib3giIT09YWkudHlwZSl7ITA9PT1xZSYmIWFpLnJlYWRPbmx5JiYoZHQuaGFzKHB0Lmxlbmd0aCk/ZHQuc2V0KHB0Lmxlbmd0aCxbLi4uZHQuZ2V0KHB0Lmxlbmd0aCksW21yLEduLG51bGxdXSk6ZHQuc2V0KHB0Lmxlbmd0aCxbW21y''@;'; put 'put ''LEduLG51bGxdXSkpO2NvbnRpbnVlfWlmKCEwPT09YWkucmVhZE9ubHkpY29udGludWU7dHlwZW9mIGFpLmNoZWNrZWRUZW1wbGF0ZT4idSImJihhaS5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBhaS51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihhaS51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7''@;'; put 'put ''Y29uc3QgT249Yy5nZXREYXRhQXRDZWxsKG1yLEduKTshMT09PXFlP1thaS5jaGVja2VkVGVtcGxhdGUsYWkuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKE9uKT9KdC5wdXNoKFttcixHbixhaS51bmNoZWNrZWRUZW1wbGF0ZSxfaV0pOlthaS51bmNoZWNrZWRUZW1wbGF0''@;'; put 'put ''ZSxhaS51bmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhPbikmJkp0LnB1c2goW21yLEduLGFpLmNoZWNrZWRUZW1wbGF0ZSxfaV0pOkp0LnB1c2goW21yLEduLGFpLnVuY2hlY2tlZFRlbXBsYXRlLF9pXSksdm4rPTF9cHQucHVzaCh2biksdm49MH1K''@;'; put 'put ''dD1KdC5ldmVyeShDbj0+e2xldFssLHRuXT1DbjtyZXR1cm4gdG49PT1KdFswXVsyXX0pP0p0Lm1hcChDbj0+e2xldFt0bixNbixDcl09Q247cmV0dXJuW3RuLE1uLENyXX0pOkp0Lm1hcChDbj0+e2xldFt0bixNbiwsQ3JdPUNuO3JldHVyblt0bixNbixDci5jaGVja2VkVGVtcGxhdGVdfSks''@;'; put 'put ''SnQubGVuZ3RoPjAmJnB0LmZvckVhY2goKENuLHRuKT0+e2xldCBNbj1KdC5zcGxpY2UoMCxDbik7ZHQuc2l6ZSYmZHQuaGFzKHRuKSYmKE1uPVsuLi5NbiwuLi5kdC5nZXQodG4pXSksYy5zZXREYXRhQXRDZWxsKE1uKX0pfX1mdW5jdGlvbiBqZSgpe2NvbnN0IHFlPWMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZSgpO2lmKHFlKXtmb3IobGV0IHJ0PTA7cnQ8cWUubGVuZ3RoO3J0Kyspe2NvbnN0IHB0PXFlW3J0XS5nZXRUb3BTdGFydENvcm5lcigpLGR0PXFlW3J0XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IEp0PXB0LnJvdztKdDw9ZHQucm93O0p0KyspZm9yKGxldCB2bj1wdC5jb2w7''@;'; put 'put ''dm48PWR0LmNvbDt2bisrKXtpZihjLmdldENlbGxNZXRhKEp0LHZuKS5yZWFkT25seSljb250aW51ZTtjb25zdCB0bj1jLmdldENlbGwoSnQsdm4pO2lmKEVwKHRuKSYmdG4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKS5sZW5ndGg+MClyZXR1cm4hMH19cmV0dXJu''@;'; put 'put ''ITF9fSghaWV8fGllJiYhaWUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChHKSx1ZSYmbC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSx0NGUuaGFzKGMpfHwodDRlLnNldChjLCEwKSxmdW5jdGlvbiB5ZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0''@;'; put 'put ''Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFqZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgZHQ7cmV0dXJuIG51bGw9PT0oZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZHQ/dm9pZCAwOmR0Lmhp''@;'; put 'put ''Z2hsaWdodC5pc0NlbGwoKX19LHtrZXlzOltbImVudGVyIl1dLGNhbGxiYWNrOigpPT4oRWUoKSwhamUoKSkscnVuT25seUlmOigpPT57Y29uc3QgZHQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiBjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nJiZkdD8uaGlnaGxp''@;'; put 'put ''Z2h0LmlzQ2VsbCgpJiYhYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfX0se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PihFZSghMCksIWplKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQuaGlnaGxpZ2h0LmlzQ2VsbCgpfX1dLHtncm91cDpWYXQscmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUifSl9KCkpfWZ1bmN0aW9uIEtYKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0''@;'; put 'put ''dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIHFYKGMsbCxhLGQsaCxmLHYpe0lfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1TYS5nZXRTaW5nbGV0b24oKS5hZGQoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsZnVuY3Rpb24oYyxsLGEpe2NvbnN0e2xhYmVsOmQsdHlwZTpoLHJvdzpm''@;'; put 'put ''LGNvbHVtbjp2LHByb3A6TX09bDtpZigiY2hlY2tib3giPT09aCl7aWYoZCl7Y29uc3R7dmFsdWU6SSxwcm9wZXJ0eTpHfT1kO2xldCBpZT1hO2lmKEkpaWU9ImZ1bmN0aW9uIj09dHlwZW9mIEk/SShmLHYsTSxhKTpJO2Vsc2UgaWYoRyl7Y29uc3QgdWU9dGhpcy5nZXREYXRhQXRSb3dQcm9w''@;'; put 'put ''KGYsRyk7aWU9bnVsbCE9PXVlP3VlOmF9Yz1pZX1yZXR1cm4gY319KSwkWC5SRU5ERVJFUl9UWVBFPSJjaGVja2JveCIscVguUkVOREVSRVJfVFlQRT0iaGFuZHNvbnRhYmxlIjt2YXIgWFgsaTRlLEpYLGE0ZSxRWCxzNGUsR2F0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5''@;'; put 'put ''cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6e307ZnVuY3Rpb24gJGF0KGMpe3JldHVybiBjJiZjLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLCJkZWZhdWx0Iik/Yy5k''@;'; put 'put ''ZWZhdWx0OmN9ZnVuY3Rpb24gbzRlKCl7aWYoYTRlKXJldHVybiBKWDthNGU9MTtjb25zdCBjPVt7a2V5OiJaaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDcpfSx7a2V5OiJaQiIsZmFjdG9yOk1hdGgucG93KDFlMyw3KX0se2tleToiWWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tl''@;'; put 'put ''eToiWUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsOCl9LHtrZXk6IlRpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNCl9LHtrZXk6IlRCIixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OiJQaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDUpfSx7a2V5OiJQQiIsZmFjdG9yOk1hdGgucG93KDFl''@;'; put 'put ''Myw1KX0se2tleToiTWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwyKX0se2tleToiTUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsMil9LHtrZXk6IktpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMSl9LHtrZXk6IktCIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OiJHaUIiLGZhY3RvcjpN''@;'; put 'put ''YXRoLnBvdygxMDI0LDMpfSx7a2V5OiJHQiIsZmFjdG9yOk1hdGgucG93KDFlMywzKX0se2tleToiRWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw2KX0se2tleToiRUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNil9LHtrZXk6IkIiLGZhY3RvcjoxfV07ZnVuY3Rpb24gbChJKXtyZXR1cm4gSS5y''@;'; put 'put ''ZXBsYWNlKC9bLS9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gYShJLEcsaWUsdWUseWUsRWUsamUpe2lmKCFpc05hTigrSSkpcmV0dXJuK0k7bGV0IHFlPSIiLHJ0PUkucmVwbGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywiJDEkMiQzIik7aWYocnQhPT1JKXJl''@;'; put 'put ''dHVybi0xKmEocnQsRyxpZSx1ZSx5ZSxFZSk7Zm9yKGxldCB0bj0wO3RuPGMubGVuZ3RoO3RuKyspe2xldCBNbj1jW3RuXTtpZihxZT1JLnJlcGxhY2UoUmVnRXhwKGAoWzAtOSBdKSgke01uLmtleX0pJGApLCIkMSIpLHFlIT09SSlyZXR1cm4gYShxZSxHLGllLHVlLHllLEVlKSpNbi5mYWN0''@;'; put 'put ''b3J9aWYocWU9SS5yZXBsYWNlKCIlIiwiIikscWUhPT1JKXJldHVybiBhKHFlLEcsaWUsdWUseWUsRWUpLzEwMDtsZXQgcHQ9cGFyc2VGbG9hdChJKTtpZihpc05hTihwdCkpcmV0dXJuO2xldCBkdD11ZShwdCk7aWYoZHQmJiIuIiE9PWR0JiYocWU9SS5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7''@;'; put 'put ''bChkdCl9JGApLCIiKSxxZSE9PUkpKXJldHVybiBhKHFlLEcsaWUsdWUseWUsRWUpO2xldCBKdD17fTtPYmplY3Qua2V5cyhFZSkuZm9yRWFjaCh0bj0+e0p0W0VlW3RuXV09dG59KTtsZXQgdm49T2JqZWN0LmtleXMoSnQpLnNvcnQoKS5yZXZlcnNlKCksQ249dm4ubGVuZ3RoO2ZvcihsZXQg''@;'; put 'put ''dG49MDt0bjxDbjt0bisrKXtsZXQgTW49dm5bdG5dLENyPUp0W01uXTtpZihxZT1JLnJlcGxhY2UoTW4sIiIpLHFlIT09SSl7bGV0IEdyO3N3aXRjaChDcil7Y2FzZSJ0aG91c2FuZCI6R3I9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpHcj1NYXRoLnBvdygxMCw2KTticmVh''@;'; put 'put ''aztjYXNlImJpbGxpb24iOkdyPU1hdGgucG93KDEwLDkpO2JyZWFrO2Nhc2UidHJpbGxpb24iOkdyPU1hdGgucG93KDEwLDEyKX1yZXR1cm4gYShxZSxHLGllLHVlLHllLEVlKSpHcn19fWZ1bmN0aW9uIGgoSSxHLGllPSIiLHVlLHllLEVlLGplKXtpZigiIj09PUkpcmV0dXJuO2lmKEk9PT15''@;'; put 'put ''ZSlyZXR1cm4gMDtsZXQgcWU9ZnVuY3Rpb24gZChJLEcsaWUpe2xldCB1ZT1JLnJlcGxhY2UoaWUsIiIpO3JldHVybiB1ZT11ZS5yZXBsYWNlKG5ldyBSZWdFeHAoYChbMC05XSkke2woRy50aG91c2FuZHMpfShbMC05XSlgLCJnIiksIiQxJDIiKSx1ZT11ZS5yZXBsYWNlKEcuZGVjaW1hbCwi''@;'; put 'put ''LiIpLHVlfShJLEcsaWUpO3JldHVybiBhKHFlLEcsaWUsdWUseWUsRWUpfXJldHVybiBKWD17dW5mb3JtYXQ6ZnVuY3Rpb24gTShJLEcpe2NvbnN0IGllPXJKKCk7bGV0IHJ0LHVlPWllLmN1cnJlbnREZWxpbWl0ZXJzKCkseWU9aWUuY3VycmVudEN1cnJlbmN5KCkuc3ltYm9sLEVlPWllLmN1''@;'; put 'put ''cnJlbnRPcmRpbmFsKCksamU9aWUuZ2V0WmVyb0Zvcm1hdCgpLHFlPWllLmN1cnJlbnRBYmJyZXZpYXRpb25zKCk7aWYoInN0cmluZyI9PXR5cGVvZiBJKXJ0PWZ1bmN0aW9uIGYoSSxHKXtpZighSS5pbmRleE9mKCI6Iil8fCI6Ij09PUcudGhvdXNhbmRzKXJldHVybiExO2xldCB1ZT1JLnNw''@;'; put 'put ''bGl0KCI6Iik7aWYoMyE9PXVlLmxlbmd0aClyZXR1cm4hMTtsZXQgRWU9K3VlWzFdLGplPSt1ZVsyXTtyZXR1cm4haXNOYU4oK3VlWzBdKSYmIWlzTmFOKEVlKSYmIWlzTmFOKGplKX0oSSx1ZSk/ZnVuY3Rpb24gdihJKXtsZXQgRz1JLnNwbGl0KCI6Iik7cmV0dXJuK0dbMl0rNjAqK0dbMV0r''@;'; put 'put ''MzYwMCorR1swXX0oSSk6aChJLHVlLHllLEVlLGplLHFlKTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2YgSSlyZXR1cm47cnQ9SX1pZih2b2lkIDAhPT1ydClyZXR1cm4gcnR9fX1mdW5jdGlvbiBlSigpe2lmKHM0ZSlyZXR1cm4gUVg7czRlPTE7bGV0IGM9bzRlKCk7Y29uc3QgbD0vXlthLXpd''@;'; put 'put ''ezIsM30oLVthLXpBLVpdezR9KT8oLShbQS1aXXsyfXxbMC05XXszfSkpPyQvLEc9e291dHB1dDp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImN1cnJlbmN5IiwicGVyY2VudCIsImJ5dGUiLCJ0aW1lIiwib3JkaW5hbCIsIm51bWJlciJdfSxiYXNlOnt0eXBlOiJzdHJpbmciLHZhbGlk''@;'; put 'put ''VmFsdWVzOlsiZGVjaW1hbCIsImJpbmFyeSIsImdlbmVyYWwiXSxyZXN0cmljdGlvbjoocnQscHQpPT4iYnl0ZSI9PT1wdC5vdXRwdXQsbWVzc2FnZToiYGJhc2VgIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgYGJ5dGVgIixtYW5kYXRvcnk6cnQ9PiJieXRlIj09''@;'; put 'put ''PXJ0Lm91dHB1dH0sY2hhcmFjdGVyaXN0aWM6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246cnQ9PnJ0Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxwcmVmaXg6InN0cmluZyIscG9zdGZpeDoic3RyaW5nIixmb3JjZUF2ZXJhZ2U6e3R5cGU6InN0cmluZyIsdmFsaWRW''@;'; put 'put ''YWx1ZXM6WyJ0cmlsbGlvbiIsImJpbGxpb24iLCJtaWxsaW9uIiwidGhvdXNhbmQiXX0sYXZlcmFnZToiYm9vbGVhbiIsbG93UHJlY2lzaW9uOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoocnQscHQpPT4hMD09PXB0LmF2ZXJhZ2UsbWVzc2FnZToiYGxvd1ByZWNpc2lvbmAgbXVzdCBi''@;'; put 'put ''ZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG9wdGlvbiBgYXZlcmFnZWAgaXMgc2V0In0sY3VycmVuY3lQb3NpdGlvbjp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInByZWZpeCIsImluZml4IiwicG9zdGZpeCJdfSxjdXJyZW5jeVN5bWJvbDoic3RyaW5nIix0b3RhbExlbmd0aDp7dHlw''@;'; put 'put ''ZToibnVtYmVyIixyZXN0cmljdGlvbnM6W3tyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHtyZXN0cmljdGlvbjoocnQscHQpPT4hcHQuZXhwb25lbnRpYWwsbWVzc2FnZToiYHRvdGFsTGVuZ3RoYCBpcyBpbmNvbXBhdGlibGUgd2l0aCBg''@;'; put 'put ''ZXhwb25lbnRpYWxgIn1dfSxtYW50aXNzYTp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LG9wdGlvbmFsTWFudGlzc2E6ImJvb2xlYW4iLHRyaW1NYW50aXNzYToiYm9vbGVhbiIscm91bmRpbmdGdW5jdGlvbjoi''@;'; put 'put ''ZnVuY3Rpb24iLG9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM6ImJvb2xlYW4iLHRob3VzYW5kU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ImJvb2xlYW4i''@;'; put 'put ''LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOiJzdHJpbmciLG1pbGxpb246InN0cmluZyIsYmlsbGlvbjoic3RyaW5nIix0cmlsbGlvbjoic3RyaW5nIn19LG5lZ2F0aXZlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsic2lnbiIsInBhcmVudGhl''@;'; put 'put ''c2lzIl19LGZvcmNlU2lnbjoiYm9vbGVhbiIsZXhwb25lbnRpYWw6e3R5cGU6ImJvb2xlYW4ifSxwcmVmaXhTeW1ib2w6e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihydCxwdCk9PiJwZXJjZW50Ij09PXB0Lm91dHB1dCxtZXNzYWdlOiJgcHJlZml4U3ltYm9sYCBjYW4gYmUgcHJvdmlk''@;'; put 'put ''ZWQgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgYHBlcmNlbnRgIn19LGllPXtsYW5ndWFnZVRhZzp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITAscmVzdHJpY3Rpb246cnQ9PnJ0Lm1hdGNoKGwpLG1lc3NhZ2U6InRoZSBsYW5ndWFnZSB0YWcgbXVzdCBmb2xsb3cgdGhlIEJDUCA0NyBzcGVj''@;'; put 'put ''aWZpY2F0aW9uIChzZWUgaHR0cHM6Ly90b29scy5pZWZ0Lm9yZy9odG1sL2JjcDQ3KSJ9LGRlbGltaXRlcnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kczoic3RyaW5nIixkZWNpbWFsOiJzdHJpbmciLHRob3VzYW5kc1NpemU6Im51bWJlciJ9LG1hbmRhdG9yeTohMH0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxtaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sYmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LHRyaWxsaW9uOnt0eXBlOiJz''@;'; put 'put ''dHJpbmciLG1hbmRhdG9yeTohMH19LG1hbmRhdG9yeTohMH0sc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLG9yZGluYWw6e3R5cGU6ImZ1bmN0aW9uIixtYW5kYXRvcnk6ITB9LGJ5dGVzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnti''@;'; put 'put ''aW5hcnlTdWZmaXhlczoib2JqZWN0IixkZWNpbWFsU3VmZml4ZXM6Im9iamVjdCJ9fSxjdXJyZW5jeTp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7c3ltYm9sOiJzdHJpbmciLHBvc2l0aW9uOiJzdHJpbmciLGNvZGU6InN0cmluZyJ9LG1hbmRhdG9yeTohMH0sZGVmYXVsdHM6ImZvcm1hdCIs''@;'; put 'put ''b3JkaW5hbEZvcm1hdDoiZm9ybWF0IixieXRlRm9ybWF0OiJmb3JtYXQiLHBlcmNlbnRhZ2VGb3JtYXQ6ImZvcm1hdCIsY3VycmVuY3lGb3JtYXQ6ImZvcm1hdCIsdGltZURlZmF1bHRzOiJmb3JtYXQiLGZvcm1hdHM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2ZvdXJEaWdpdHM6e3R5cGU6''@;'; put 'put ''ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIs''@;'; put 'put ''bWFuZGF0b3J5OiEwfX19fTtmdW5jdGlvbiB5ZShydCl7cmV0dXJuIHZvaWQgMCE9PWMudW5mb3JtYXQocnQpfWZ1bmN0aW9uIEVlKHJ0LHB0LGR0LEp0PSExKXtsZXQgdm49T2JqZWN0LmtleXMocnQpLm1hcChDbj0+e2lmKCFwdFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9IElu''@;'; put 'put ''dmFsaWQga2V5OiAke0NufWApLCExO2xldCB0bj1ydFtDbl0sTW49cHRbQ25dO2lmKCJzdHJpbmciPT10eXBlb2YgTW4mJihNbj17dHlwZTpNbn0pLCJmb3JtYXQiPT09TW4udHlwZSl7aWYoIUVlKHRuLEcsYFtWYWxpZGF0ZSAke0NufV1gLCEwKSlyZXR1cm4hMX1lbHNlIGlmKHR5cGVvZiB0''@;'; put 'put ''biE9PU1uLnR5cGUpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IHR5cGUgbWlzbWF0Y2hlZDogIiR7TW4udHlwZX0iIGV4cGVjdGVkLCAiJHt0eXBlb2YgdG59IiBwcm92aWRlZGApLCExO2lmKE1uLnJlc3RyaWN0aW9ucyYmTW4ucmVzdHJpY3Rpb25zLmxlbmd0aCl7bGV0IENy''@;'; put 'put ''PU1uLnJlc3RyaWN0aW9ucy5sZW5ndGg7Zm9yKGxldCBHcj0wO0dyPENyO0dyKyspe2xldHtyZXN0cmljdGlvbjptcixtZXNzYWdlOkdufT1Nbi5yZXN0cmljdGlvbnNbR3JdO2lmKCFtcih0bixydCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7''@;'; put 'put ''R259YCksITF9fXJldHVybiBNbi5yZXN0cmljdGlvbiYmIU1uLnJlc3RyaWN0aW9uKHRuLHJ0KT8oY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogJHtNbi5tZXNzYWdlfWApLCExKTpNbi52YWxpZFZhbHVlcyYmLTE9PT1Nbi52YWxpZFZhbHVlcy5pbmRleE9mKHRu''@;'; put 'put ''KT8oY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhbW9uZyAke0pTT04uc3RyaW5naWZ5KE1uLnZhbGlkVmFsdWVzKX0sICIke3RufSIgcHJvdmlkZWRgKSwhMSk6IShNbi5jaGlsZHJlbiYmIUVlKHRuLE1uLmNoaWxkcmVuLGBbVmFsaWRhdGUgJHtD''@;'; put 'put ''bn1dYCkpfSk7cmV0dXJuIEp0fHx2bi5wdXNoKC4uLk9iamVjdC5rZXlzKHB0KS5tYXAoQ249PntsZXQgdG49cHRbQ25dO2lmKCJzdHJpbmciPT10eXBlb2YgdG4mJih0bj17dHlwZTp0bn0pLHRuLm1hbmRhdG9yeSl7bGV0IE1uPXRuLm1hbmRhdG9yeTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''TW4mJihNbj1NbihydCkpLE1uJiZ2b2lkIDA9PT1ydFtDbl0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoYCR7ZHR9IE1pc3NpbmcgbWFuZGF0b3J5IGtleSAiJHtDbn0iYCksITF9cmV0dXJuITB9KSksdm4ucmVkdWNlKChDbix0bik9PkNuJiZ0biwhMCl9ZnVuY3Rpb24gamUocnQpe3JldHVybiBF''@;'; put 'put ''ZShydCxHLCJbVmFsaWRhdGUgZm9ybWF0XSIpfXJldHVybiBRWD17dmFsaWRhdGU6ZnVuY3Rpb24gdWUocnQscHQpe2xldCBkdD15ZShydCksSnQ9amUocHQpO3JldHVybiBkdCYmSnR9LHZhbGlkYXRlRm9ybWF0OmplLHZhbGlkYXRlSW5wdXQ6eWUsdmFsaWRhdGVMYW5ndWFnZTpmdW5jdGlv''@;'; put 'put ''biBxZShydCl7cmV0dXJuIEVlKHJ0LGllLCJbVmFsaWRhdGUgbGFuZ3VhZ2VdIil9fX12YXIgbkosbDRlLHRKPXtwYXJzZUZvcm1hdDpmdW5jdGlvbiBkb3QoYyxsPXt9KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGM/YzooYz1mdW5jdGlvbiBxYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC9eeyhb''@;'; put 'put ''Xn1dKil9Lyk7cmV0dXJuIGE/KGwucHJlZml4PWFbMV0sYy5zbGljZShhWzBdLmxlbmd0aCkpOmN9KGMsbCksYz1mdW5jdGlvbiBYYXQoYyxsKXtsZXQgYT1jLm1hdGNoKC97KFtefV0qKX0kLyk7cmV0dXJuIGE/KGwucG9zdGZpeD1hWzFdLGMuc2xpY2UoMCwtYVswXS5sZW5ndGgpKTpjfShj''@;'; put 'put ''LGwpLGZ1bmN0aW9uIEphdChjLGwpe2lmKC0xPT09Yy5pbmRleE9mKCIkIikpe2lmKC0xPT09Yy5pbmRleE9mKCIlIikpcmV0dXJuLTEhPT1jLmluZGV4T2YoImJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZ2VuZXJhbCIpKTotMSE9PWMuaW5kZXhPZigiYiIpPyhsLm91dHB1''@;'; put 'put ''dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImJpbmFyeSIpKTotMSE9PWMuaW5kZXhPZigiZCIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImRlY2ltYWwiKSk6dm9pZCgtMT09PWMuaW5kZXhPZigiOiIpPy0xIT09Yy5pbmRleE9mKCJvIikmJihsLm91dHB1dD0ib3JkaW5hbCIpOmwub3V0''@;'; put 'put ''cHV0PSJ0aW1lIik7bC5vdXRwdXQ9InBlcmNlbnQifWVsc2UgbC5vdXRwdXQ9ImN1cnJlbmN5In0oYyxsKSxmdW5jdGlvbiB0b3QoYyxsKXtsZXQgYT1jLm1hdGNoKC9bMS05XStbMC05XSovKTthJiYobC50b3RhbExlbmd0aD0rYVswXSl9KGMsbCksZnVuY3Rpb24gbm90KGMsbCl7bGV0IGQ9''@;'; put 'put ''Yy5zcGxpdCgiLiIpWzBdLm1hdGNoKC8wKy8pO2QmJihsLmNoYXJhY3RlcmlzdGljPWRbMF0ubGVuZ3RoKX0oYyxsKSxmdW5jdGlvbiBsb3QoYyxsKXtpZigtMSE9PWMuaW5kZXhPZigiLiIpKXtsZXQgYT1jLnNwbGl0KCIuIilbMF07bC5vcHRpb25hbENoYXJhY3RlcmlzdGljPS0xPT09YS5p''@;'; put 'put ''bmRleE9mKCIwIil9fShjLGwpLGZ1bmN0aW9uIGFvdChjLGwpey0xIT09Yy5pbmRleE9mKCJhIikmJihsLmF2ZXJhZ2U9ITApfShjLGwpLGZ1bmN0aW9uIG9vdChjLGwpey0xIT09Yy5pbmRleE9mKCJLIik/bC5mb3JjZUF2ZXJhZ2U9InRob3VzYW5kIjotMSE9PWMuaW5kZXhPZigiTSIpP2wu''@;'; put 'put ''Zm9yY2VBdmVyYWdlPSJtaWxsaW9uIjotMSE9PWMuaW5kZXhPZigiQiIpP2wuZm9yY2VBdmVyYWdlPSJiaWxsaW9uIjotMSE9PWMuaW5kZXhPZigiVCIpJiYobC5mb3JjZUF2ZXJhZ2U9InRyaWxsaW9uIil9KGMsbCksZnVuY3Rpb24gcm90KGMsbCl7bGV0IGE9Yy5zcGxpdCgiLiIpWzFdO2lm''@;'; put 'put ''KGEpe2xldCBkPWEubWF0Y2goLzArLyk7ZCYmKGwubWFudGlzc2E9ZFswXS5sZW5ndGgpfX0oYyxsKSxmdW5jdGlvbiBzb3QoYyxsKXtjLm1hdGNoKC9cW1wuXS8pP2wub3B0aW9uYWxNYW50aXNzYT0hMDpjLm1hdGNoKC9cLi8pJiYobC5vcHRpb25hbE1hbnRpc3NhPSExKX0oYyxsKSxmdW5j''@;'; put 'put ''dGlvbiBpb3QoYyxsKXtjb25zdCBhPWMuc3BsaXQoIi4iKVsxXTthJiYobC50cmltTWFudGlzc2E9LTEhPT1hLmluZGV4T2YoIlsiKSl9KGMsbCksZnVuY3Rpb24gUWF0KGMsbCl7LTEhPT1jLmluZGV4T2YoIiwiKSYmKGwudGhvdXNhbmRTZXBhcmF0ZWQ9ITApfShjLGwpLGZ1bmN0aW9uIGVv''@;'; put 'put ''dChjLGwpey0xIT09Yy5pbmRleE9mKCIgIikmJihsLnNwYWNlU2VwYXJhdGVkPSEwLGwuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT0hMCwobC5hdmVyYWdlfHxsLmZvcmNlQXZlcmFnZSkmJihsLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uPSEwKSl9KGMsbCksZnVuY3Rpb24gY290KGMsbCl7''@;'; put 'put ''Yy5tYXRjaCgvXlwrP1woW14pXSpcKSQvKSYmKGwubmVnYXRpdmU9InBhcmVudGhlc2lzIiksYy5tYXRjaCgvXlwrPy0vKSYmKGwubmVnYXRpdmU9InNpZ24iKX0oYyxsKSxmdW5jdGlvbiB1b3QoYyxsKXtjLm1hdGNoKC9eXCsvKSYmKGwuZm9yY2VTaWduPSEwKX0oYyxsKSxsKX19O2Z1bmN0''@;'; put 'put ''aW9uIHJKKCl7aWYobDRlKXJldHVybiBuSjtsNGU9MTtjb25zdCBjPWZ1bmN0aW9uIEthdCgpe3JldHVybiBpNGV8fChpNGU9MSxYWD17bGFuZ3VhZ2VUYWc6ImVuLVVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIs''@;'; put 'put ''bWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxzcGFjZVNlcGFyYXRlZDohMSxvcmRpbmFsOmZ1bmN0aW9uKGMpe2xldCBsPWMlMTA7cmV0dXJuIDE9PX5+KGMlMTAwLzEwKT8idGgiOjE9PT1sPyJzdCI6Mj09PWw/Im5kIjozPT09bD8icmQiOiJ0aCJ9LGJ5dGVzOntiaW5h''@;'; put 'put ''cnlTdWZmaXhlczpbIkIiLCJLaUIiLCJNaUIiLCJHaUIiLCJUaUIiLCJQaUIiLCJFaUIiLCJaaUIiLCJZaUIiXSxkZWNpbWFsU3VmZml4ZXM6WyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiLCJQQiIsIkVCIiwiWkIiLCJZQiJdfSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4''@;'; put 'put ''Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwfSxm''@;'; put 'put ''dWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KSxYWH0oKSxsPWVKKCksYT10SjtsZXQgaCxkPXt9LGY9e30sdj1udWxsLE09e307ZnVuY3Rpb24gSShpZSl7aD1pZX1mdW5jdGlvbiBHKCl7cmV0dXJuIGZbaF19cmV0dXJuIGQubGFuZ3VhZ2VzPSgpPT5PYmplY3Qu''@;'; put 'put ''YXNzaWduKHt9LGYpLGQuY3VycmVudExhbmd1YWdlPSgpPT5oLGQuY3VycmVudEJ5dGVzPSgpPT5HKCkuYnl0ZXN8fHt9LGQuY3VycmVudEN1cnJlbmN5PSgpPT5HKCkuY3VycmVuY3ksZC5jdXJyZW50QWJicmV2aWF0aW9ucz0oKT0+RygpLmFiYnJldmlhdGlvbnMsZC5jdXJyZW50RGVsaW1p''@;'; put 'put ''dGVycz0oKT0+RygpLmRlbGltaXRlcnMsZC5jdXJyZW50T3JkaW5hbD0oKT0+RygpLm9yZGluYWwsZC5jdXJyZW50RGVmYXVsdHM9KCk9Pk9iamVjdC5hc3NpZ24oe30sRygpLmRlZmF1bHRzLE0pLGQuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQu''@;'; put 'put ''Y3VycmVudERlZmF1bHRzKCksRygpLm9yZGluYWxGb3JtYXQpLGQuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksRygpLmJ5dGVGb3JtYXQpLGQuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3Qu''@;'; put 'put ''YXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksRygpLnBlcmNlbnRhZ2VGb3JtYXQpLGQuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLEcoKS5jdXJyZW5jeUZvcm1hdCksZC5jdXJyZW50VGltZURlZmF1bHRG''@;'; put 'put ''b3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxHKCkudGltZUZvcm1hdCksZC5zZXREZWZhdWx0cz1pZT0+e2llPWEucGFyc2VGb3JtYXQoaWUpLGwudmFsaWRhdGVGb3JtYXQoaWUpJiYoTT1pZSl9LGQuZ2V0WmVyb0Zvcm1hdD0oKT0+dixkLnNldFplcm9G''@;'; put 'put ''b3JtYXQ9aWU9PnY9InN0cmluZyI9PXR5cGVvZiBpZT9pZTpudWxsLGQuaGFzWmVyb0Zvcm1hdD0oKT0+bnVsbCE9PXYsZC5sYW5ndWFnZURhdGE9aWU9PntpZihpZSl7aWYoZltpZV0pcmV0dXJuIGZbaWVdO3Rocm93IG5ldyBFcnJvcihgVW5rbm93biB0YWcgIiR7aWV9ImApfXJldHVybiBH''@;'; put 'put ''KCl9LGQucmVnaXN0ZXJMYW5ndWFnZT0oaWUsdWU9ITEpPT57aWYoIWwudmFsaWRhdGVMYW5ndWFnZShpZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxhbmd1YWdlIGRhdGEiKTtmW2llLmxhbmd1YWdlVGFnXT1pZSx1ZSYmSShpZS5sYW5ndWFnZVRhZyl9LGQuc2V0TGFuZ3VhZ2U9KGll''@;'; put 'put ''LHVlPWMubGFuZ3VhZ2VUYWcpPT57aWYoIWZbaWVdKXtsZXQgeWU9aWUuc3BsaXQoIi0iKVswXSxFZT1PYmplY3Qua2V5cyhmKS5maW5kKGplPT5qZS5zcGxpdCgiLSIpWzBdPT09eWUpO3JldHVybiBmW0VlXT92b2lkIEkoRWUpOnZvaWQgSSh1ZSl9SShpZSl9LGQucmVnaXN0ZXJMYW5ndWFn''@;'; put 'put ''ZShjKSxoPWMubGFuZ3VhZ2VUYWcsbko9ZH12YXIgYzRlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oYyl7IWZ1bmN0aW9uKGwpe3ZhciBhLGQ9L14tPyg/OlxkKyg/OlwuXGQqKT98XC5cZCspKD86ZVsrLV0/XGQrKT8kL2ksaD1NYXRoLmNlaWwsZj1NYXRoLmZsb29yLHY9IltCaWdOdW1iZXIg''@;'; put 'put ''RXJyb3JdICIsTT12KyJOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAiLEk9MWUxNCxHPTE0LGllPTkwMDcxOTkyNTQ3NDA5OTEsdWU9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSx5''@;'; put 'put ''ZT0xZTcsRWU9MWU5O2Z1bmN0aW9uIHFlKHRuKXt2YXIgTW49MHx0bjtyZXR1cm4gdG4+MHx8dG49PT1Nbj9NbjpNbi0xfWZ1bmN0aW9uIHJ0KHRuKXtmb3IodmFyIE1uLENyLEdyPTEsbXI9dG4ubGVuZ3RoLEduPXRuWzBdKyIiO0dyPG1yOyl7Zm9yKE1uPXRuW0dyKytdKyIiLENyPUctTW4u''@;'; put 'put ''bGVuZ3RoO0NyLS07TW49IjAiK01uKTtHbis9TW59Zm9yKG1yPUduLmxlbmd0aDs0OD09PUduLmNoYXJDb2RlQXQoLS1tcik7KTtyZXR1cm4gR24uc2xpY2UoMCxtcisxfHwxKX1mdW5jdGlvbiBwdCh0bixNbil7dmFyIENyLEdyLG1yPXRuLmMsR249TW4uYyxhaT10bi5zLF9pPU1uLnMsT249''@;'; put 'put ''dG4uZSx6cj1Nbi5lO2lmKCFhaXx8IV9pKXJldHVybiBudWxsO2lmKEdyPUduJiYhR25bMF0sKENyPW1yJiYhbXJbMF0pfHxHcilyZXR1cm4gQ3I/R3I/MDotX2k6YWk7aWYoYWkhPV9pKXJldHVybiBhaTtpZihDcj1haTwwLEdyPU9uPT16ciwhbXJ8fCFHbilyZXR1cm4gR3I/MDohbXJeQ3I/''@;'; put 'put ''MTotMTtpZighR3IpcmV0dXJuIE9uPnpyXkNyPzE6LTE7Zm9yKF9pPShPbj1tci5sZW5ndGgpPCh6cj1Hbi5sZW5ndGgpP09uOnpyLGFpPTA7YWk8X2k7YWkrKylpZihtclthaV0hPUduW2FpXSlyZXR1cm4gbXJbYWldPkduW2FpXV5Dcj8xOi0xO3JldHVybiBPbj09enI/MDpPbj56cl5Dcj8x''@;'; put 'put ''Oi0xfWZ1bmN0aW9uIGR0KHRuLE1uLENyLEdyKXtpZih0bjxNbnx8dG4+Q3J8fHRuIT09Zih0bikpdGhyb3cgRXJyb3IodisoR3J8fCJBcmd1bWVudCIpKygibnVtYmVyIj09dHlwZW9mIHRuP3RuPE1ufHx0bj5Dcj8iIG91dCBvZiByYW5nZTogIjoiIG5vdCBhbiBpbnRlZ2VyOiAiOiIgbm90''@;'; put 'put ''IGEgcHJpbWl0aXZlIG51bWJlcjogIikrU3RyaW5nKHRuKSl9ZnVuY3Rpb24gSnQodG4pe3ZhciBNbj10bi5jLmxlbmd0aC0xO3JldHVybiBxZSh0bi5lL0cpPT1NbiYmdG4uY1tNbl0lMiE9MH1mdW5jdGlvbiB2bih0bixNbil7cmV0dXJuKHRuLmxlbmd0aD4xP3RuLmNoYXJBdCgwKSsiLiIr''@;'; put 'put ''dG4uc2xpY2UoMSk6dG4pKyhNbjwwPyJlIjoiZSsiKStNbn1mdW5jdGlvbiBDbih0bixNbixDcil7dmFyIEdyLG1yO2lmKE1uPDApe2Zvcihtcj1DcisiLiI7KytNbjttcis9Q3IpO3RuPW1yK3RufWVsc2UgaWYoKytNbj4oR3I9dG4ubGVuZ3RoKSl7Zm9yKG1yPUNyLE1uLT1HcjstLU1uO21y''@;'; put 'put ''Kz1Dcik7dG4rPW1yfWVsc2UgTW48R3ImJih0bj10bi5zbGljZSgwLE1uKSsiLiIrdG4uc2xpY2UoTW4pKTtyZXR1cm4gdG59YT1mdW5jdGlvbiBqZSh0bil7dmFyIE1uLENyLEdyLG9uLGJuLG1yPUh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SHQsdG9TdHJpbmc6bnVsbCx2YWx1ZU9mOm51''@;'; put 'put ''bGx9LEduPW5ldyBIdCgxKSxhaT0yMCxfaT00LE9uPS03LHpyPTIxLEpuPS0xZTcsSXI9MWU3LCRyPSExLHdpPTEsZWE9MCxmYT17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFsU2VwYXJhdG9yOiIuIixmcmFjdGlv''@;'; put 'put ''bkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0sdnQ9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTnQ9ITA7ZnVuY3Rpb24gSHQob24sYm4pe3ZhciBwbixwciwkbixkcixVcixabixzcixOcixNcj10aGlzO2lmKCEoTXIg''@;'; put 'put ''aW5zdGFuY2VvZiBIdCkpcmV0dXJuIG5ldyBIdChvbixibik7aWYobnVsbD09Ym4pe2lmKG9uJiYhMD09PW9uLl9pc0JpZ051bWJlcilyZXR1cm4gTXIucz1vbi5zLHZvaWQoIW9uLmN8fG9uLmU+SXI/TXIuYz1Nci5lPW51bGw6b24uZTxKbj9Nci5jPVtNci5lPTBdOihNci5lPW9uLmUsTXIu''@;'; put 'put ''Yz1vbi5jLnNsaWNlKCkpKTtpZigoWm49Im51bWJlciI9PXR5cGVvZiBvbikmJjAqb249PTApe2lmKE1yLnM9MS9vbjwwPyhvbj0tb24sLTEpOjEsb249PT1+fm9uKXtmb3IoZHI9MCxVcj1vbjtVcj49MTA7VXIvPTEwLGRyKyspO3JldHVybiB2b2lkKGRyPklyP01yLmM9TXIuZT1udWxsOihN''@;'; put 'put ''ci5lPWRyLE1yLmM9W29uXSkpfU5yPVN0cmluZyhvbil9ZWxzZXtpZighZC50ZXN0KE5yPVN0cmluZyhvbikpKXJldHVybiBHcihNcixOcixabik7TXIucz00NT09TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjF9KGRyPU5yLmluZGV4T2YoIi4iKSk+LTEmJihOcj1Oci5y''@;'; put 'put ''ZXBsYWNlKCIuIiwiIikpLChVcj1Oci5zZWFyY2goL2UvaSkpPjA/KGRyPDAmJihkcj1VciksZHIrPStOci5zbGljZShVcisxKSxOcj1Oci5zdWJzdHJpbmcoMCxVcikpOmRyPDAmJihkcj1Oci5sZW5ndGgpfWVsc2V7aWYoZHQoYm4sMix2dC5sZW5ndGgsIkJhc2UiKSwxMD09Ym4mJk50KXJl''@;'; put 'put ''dHVybiBIcihNcj1uZXcgSHQob24pLGFpK01yLmUrMSxfaSk7aWYoTnI9U3RyaW5nKG9uKSxabj0ibnVtYmVyIj09dHlwZW9mIG9uKXtpZigwKm9uIT0wKXJldHVybiBHcihNcixOcixabixibik7aWYoTXIucz0xL29uPDA/KE5yPU5yLnNsaWNlKDEpLC0xKToxLEh0LkRFQlVHJiZOci5yZXBs''@;'; put 'put ''YWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGg+MTUpdGhyb3cgRXJyb3IoTStvbil9ZWxzZSBNci5zPTQ1PT09TnIuY2hhckNvZGVBdCgwKT8oTnI9TnIuc2xpY2UoMSksLTEpOjE7Zm9yKHBuPXZ0LnNsaWNlKDAsYm4pLGRyPVVyPTAsc3I9TnIubGVuZ3RoO1VyPHNyO1VyKyspaWYocG4uaW5k''@;'; put 'put ''ZXhPZihwcj1Oci5jaGFyQXQoVXIpKTwwKXtpZigiLiI9PXByKXtpZihVcj5kcil7ZHI9c3I7Y29udGludWV9fWVsc2UgaWYoISRuJiYoTnI9PU5yLnRvVXBwZXJDYXNlKCkmJihOcj1Oci50b0xvd2VyQ2FzZSgpKXx8TnI9PU5yLnRvTG93ZXJDYXNlKCkmJihOcj1Oci50b1VwcGVyQ2FzZSgp''@;'; put 'put ''KSkpeyRuPSEwLFVyPS0xLGRyPTA7Y29udGludWV9cmV0dXJuIEdyKE1yLFN0cmluZyhvbiksWm4sYm4pfVpuPSExLChkcj0oTnI9Q3IoTnIsYm4sMTAsTXIucykpLmluZGV4T2YoIi4iKSk+LTE/TnI9TnIucmVwbGFjZSgiLiIsIiIpOmRyPU5yLmxlbmd0aH1mb3IoVXI9MDs0OD09PU5yLmNo''@;'; put 'put ''YXJDb2RlQXQoVXIpO1VyKyspO2Zvcihzcj1Oci5sZW5ndGg7NDg9PT1Oci5jaGFyQ29kZUF0KC0tc3IpOyk7aWYoTnI9TnIuc2xpY2UoVXIsKytzcikpe2lmKHNyLT1VcixabiYmSHQuREVCVUcmJnNyPjE1JiYob24+aWV8fG9uIT09ZihvbikpKXRocm93IEVycm9yKE0rTXIucypvbik7aWYo''@;'; put 'put ''KGRyPWRyLVVyLTEpPklyKU1yLmM9TXIuZT1udWxsO2Vsc2UgaWYoZHI8Sm4pTXIuYz1bTXIuZT0wXTtlbHNle2lmKE1yLmU9ZHIsTXIuYz1bXSxVcj0oZHIrMSklRyxkcjwwJiYoVXIrPUcpLFVyPHNyKXtmb3IoVXImJk1yLmMucHVzaCgrTnIuc2xpY2UoMCxVcikpLHNyLT1HO1VyPHNyOylN''@;'; put 'put ''ci5jLnB1c2goK05yLnNsaWNlKFVyLFVyKz1HKSk7VXI9Ry0oTnI9TnIuc2xpY2UoVXIpKS5sZW5ndGh9ZWxzZSBVci09c3I7Zm9yKDtVci0tO05yKz0iMCIpO01yLmMucHVzaCgrTnIpfX1lbHNlIE1yLmM9W01yLmU9MF19ZnVuY3Rpb24gSG4ob24sYm4scG4scHIpe3ZhciAkbixkcixVcixa''@;'; put 'put ''bixzcjtpZihudWxsPT1wbj9wbj1faTpkdChwbiwwLDgpLCFvbi5jKXJldHVybiBvbi50b1N0cmluZygpO2lmKCRuPW9uLmNbMF0sVXI9b24uZSxudWxsPT1ibilzcj1ydChvbi5jKSxzcj0xPT1wcnx8Mj09cHImJihVcjw9T258fFVyPj16cik/dm4oc3IsVXIpOkNuKHNyLFVyLCIwIik7ZWxz''@;'; put 'put ''ZSBpZihkcj0ob249SHIobmV3IEh0KG9uKSxibixwbikpLmUsWm49KHNyPXJ0KG9uLmMpKS5sZW5ndGgsMT09cHJ8fDI9PXByJiYoYm48PWRyfHxkcjw9T24pKXtmb3IoO1puPGJuO3NyKz0iMCIsWm4rKyk7c3I9dm4oc3IsZHIpfWVsc2UgaWYoYm4tPVVyLHNyPUNuKHNyLGRyLCIwIiksZHIr''@;'; put 'put ''MT5abil7aWYoLS1ibj4wKWZvcihzcis9Ii4iO2JuLS07c3IrPSIwIik7fWVsc2UgaWYoKGJuKz1kci1abik+MClmb3IoZHIrMT09Wm4mJihzcis9Ii4iKTtibi0tO3NyKz0iMCIpO3JldHVybiBvbi5zPDAmJiRuPyItIitzcjpzcn1mdW5jdGlvbiB0cihvbixibil7Zm9yKHZhciBwbixwciwk''@;'; put 'put ''bj0xLGRyPW5ldyBIdChvblswXSk7JG48b24ubGVuZ3RoOyRuKyspKCEocHI9bmV3IEh0KG9uWyRuXSkpLnN8fChwbj1wdChkcixwcikpPT09Ym58fDA9PT1wbiYmZHIucz09PWJuKSYmKGRyPXByKTtyZXR1cm4gZHJ9ZnVuY3Rpb24gYXIob24sYm4scG4pe2Zvcih2YXIgcHI9MSwkbj1ibi5s''@;'; put 'put ''ZW5ndGg7IWJuWy0tJG5dO2JuLnBvcCgpKTtmb3IoJG49Ym5bMF07JG4+PTEwOyRuLz0xMCxwcisrKTtyZXR1cm4ocG49cHIrcG4qRy0xKT5Jcj9vbi5jPW9uLmU9bnVsbDpwbjxKbj9vbi5jPVtvbi5lPTBdOihvbi5lPXBuLG9uLmM9Ym4pLG9ufWZ1bmN0aW9uIEhyKG9uLGJuLHBuLHByKXt2''@;'; put 'put ''YXIgJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnI9b24uYyxhYT11ZTtpZihacil7ZTp7Zm9yKCRuPTEsWm49WnJbMF07Wm4+PTEwO1puLz0xMCwkbisrKTtpZigoZHI9Ym4tJG4pPDApZHIrPUcsc3I9WnJbTnI9MF0sTXI9Zihzci9hYVskbi0oVXI9Ym4pLTFdJTEwKTtlbHNlIGlmKChOcj1oKChk''@;'; put 'put ''cisxKS9HKSk+PVpyLmxlbmd0aCl7aWYoIXByKWJyZWFrIGU7Zm9yKDtaci5sZW5ndGg8PU5yO1pyLnB1c2goMCkpO3NyPU1yPTAsJG49MSxVcj0oZHIlPUcpLUcrMX1lbHNle2Zvcihzcj1abj1acltOcl0sJG49MTtabj49MTA7Wm4vPTEwLCRuKyspO01yPShVcj0oZHIlPUcpLUcrJG4pPDA/''@;'; put 'put ''MDpmKHNyL2FhWyRuLVVyLTFdJTEwKX1pZihwcj1wcnx8Ym48MHx8bnVsbCE9WnJbTnIrMV18fChVcjwwP3NyOnNyJWFhWyRuLVVyLTFdKSxwcj1wbjw0PyhNcnx8cHIpJiYoMD09cG58fHBuPT0ob24uczwwPzM6MikpOk1yPjV8fDU9PU1yJiYoND09cG58fHByfHw2PT1wbiYmKGRyPjA/VXI+''@;'; put 'put ''MD9zci9hYVskbi1Vcl06MDpacltOci0xXSklMTAmMXx8cG49PShvbi5zPDA/ODo3KSksYm48MXx8IVpyWzBdKXJldHVybiBaci5sZW5ndGg9MCxwcj8oWnJbMF09YWFbKEctKGJuLT1vbi5lKzEpJUcpJUddLG9uLmU9LWJufHwwKTpaclswXT1vbi5lPTAsb247aWYoMD09ZHI/KFpyLmxlbmd0''@;'; put 'put ''aD1Ocixabj0xLE5yLS0pOihaci5sZW5ndGg9TnIrMSxabj1hYVtHLWRyXSxacltOcl09VXI+MD9mKHNyL2FhWyRuLVVyXSVhYVtVcl0pKlpuOjApLHByKWZvcig7Oyl7aWYoMD09TnIpe2Zvcihkcj0xLFVyPVpyWzBdO1VyPj0xMDtVci89MTAsZHIrKyk7Zm9yKFVyPVpyWzBdKz1abixabj0x''@;'; put 'put ''O1VyPj0xMDtVci89MTAsWm4rKyk7ZHIhPVpuJiYob24uZSsrLFpyWzBdPT1JJiYoWnJbMF09MSkpO2JyZWFrfWlmKFpyW05yXSs9Wm4sWnJbTnJdIT1JKWJyZWFrO1pyW05yLS1dPTAsWm49MX1mb3IoZHI9WnIubGVuZ3RoOzA9PT1aclstLWRyXTtaci5wb3AoKSk7fW9uLmU+SXI/b24uYz1v''@;'; put 'put ''bi5lPW51bGw6b24uZTxKbiYmKG9uLmM9W29uLmU9MF0pfXJldHVybiBvbn1mdW5jdGlvbiBxcihvbil7dmFyIGJuLHBuPW9uLmU7cmV0dXJuIG51bGw9PT1wbj9vbi50b1N0cmluZygpOihibj1ydChvbi5jKSxibj1wbjw9T258fHBuPj16cj92bihibixwbik6Q24oYm4scG4sIjAiKSxvbi5z''@;'; put 'put ''PDA/Ii0iK2JuOmJuKX1yZXR1cm4gSHQuY2xvbmU9amUsSHQuUk9VTkRfVVA9MCxIdC5ST1VORF9ET1dOPTEsSHQuUk9VTkRfQ0VJTD0yLEh0LlJPVU5EX0ZMT09SPTMsSHQuUk9VTkRfSEFMRl9VUD00LEh0LlJPVU5EX0hBTEZfRE9XTj01LEh0LlJPVU5EX0hBTEZfRVZFTj02LEh0LlJPVU5E''@;'; put 'put ''X0hBTEZfQ0VJTD03LEh0LlJPVU5EX0hBTEZfRkxPT1I9OCxIdC5FVUNMSUQ9OSxIdC5jb25maWc9SHQuc2V0PWZ1bmN0aW9uKG9uKXt2YXIgYm4scG47aWYobnVsbCE9b24pe2lmKCJvYmplY3QiIT10eXBlb2Ygb24pdGhyb3cgRXJyb3IodisiT2JqZWN0IGV4cGVjdGVkOiAiK29uKTtpZihv''@;'; put 'put ''bi5oYXNPd25Qcm9wZXJ0eShibj0iREVDSU1BTF9QTEFDRVMiKSYmKGR0KHBuPW9uW2JuXSwwLEVlLGJuKSxhaT1wbiksb24uaGFzT3duUHJvcGVydHkoYm49IlJPVU5ESU5HX01PREUiKSYmKGR0KHBuPW9uW2JuXSwwLDgsYm4pLF9pPXBuKSxvbi5oYXNPd25Qcm9wZXJ0eShibj0iRVhQT05F''@;'; put 'put ''TlRJQUxfQVQiKSYmKChwbj1vbltibl0pJiZwbi5wb3A/KGR0KHBuWzBdLC1FZSwwLGJuKSxkdChwblsxXSwwLEVlLGJuKSxPbj1wblswXSx6cj1wblsxXSk6KGR0KHBuLC1FZSxFZSxibiksT249LSh6cj1wbjwwPy1wbjpwbikpKSxvbi5oYXNPd25Qcm9wZXJ0eShibj0iUkFOR0UiKSlpZigo''@;'; put 'put ''cG49b25bYm5dKSYmcG4ucG9wKWR0KHBuWzBdLC1FZSwtMSxibiksZHQocG5bMV0sMSxFZSxibiksSm49cG5bMF0sSXI9cG5bMV07ZWxzZXtpZihkdChwbiwtRWUsRWUsYm4pLCFwbil0aHJvdyBFcnJvcih2K2JuKyIgY2Fubm90IGJlIHplcm86ICIrcG4pO0puPS0oSXI9cG48MD8tcG46cG4p''@;'; put 'put ''fWlmKG9uLmhhc093blByb3BlcnR5KGJuPSJDUllQVE8iKSl7aWYoKHBuPW9uW2JuXSkhPT0hIXBuKXRocm93IEVycm9yKHYrYm4rIiBub3QgdHJ1ZSBvciBmYWxzZTogIitwbik7aWYocG4pe2lmKCEodHlwZW9mIGNyeXB0bzwidSImJmNyeXB0byYmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXN8''@;'; put 'put ''fGNyeXB0by5yYW5kb21CeXRlcykpKXRocm93ICRyPSFwbixFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTskcj1wbn1lbHNlICRyPXBufWlmKG9uLmhhc093blByb3BlcnR5KGJuPSJNT0RVTE9fTU9ERSIpJiYoZHQocG49b25bYm5dLDAsOSxibiksd2k9cG4pLG9uLmhhc093blByb3Bl''@;'; put 'put ''cnR5KGJuPSJQT1dfUFJFQ0lTSU9OIikmJihkdChwbj1vbltibl0sMCxFZSxibiksZWE9cG4pLG9uLmhhc093blByb3BlcnR5KGJuPSJGT1JNQVQiKSl7aWYoIm9iamVjdCIhPXR5cGVvZihwbj1vbltibl0pKXRocm93IEVycm9yKHYrYm4rIiBub3QgYW4gb2JqZWN0OiAiK3BuKTtmYT1wbn1p''@;'; put 'put ''Zihvbi5oYXNPd25Qcm9wZXJ0eShibj0iQUxQSEFCRVQiKSl7aWYoInN0cmluZyIhPXR5cGVvZihwbj1vbltibl0pfHwvXi4/JHxbK1wtLlxzXXwoLikuKlwxLy50ZXN0KHBuKSl0aHJvdyBFcnJvcih2K2JuKyIgaW52YWxpZDogIitwbik7TnQ9IjAxMjM0NTY3ODkiPT1wbi5zbGljZSgwLDEw''@;'; put 'put ''KSx2dD1wbn19cmV0dXJue0RFQ0lNQUxfUExBQ0VTOmFpLFJPVU5ESU5HX01PREU6X2ksRVhQT05FTlRJQUxfQVQ6W09uLHpyXSxSQU5HRTpbSm4sSXJdLENSWVBUTzokcixNT0RVTE9fTU9ERTp3aSxQT1dfUFJFQ0lTSU9OOmVhLEZPUk1BVDpmYSxBTFBIQUJFVDp2dH19LEh0LmlzQmlnTnVt''@;'; put 'put ''YmVyPWZ1bmN0aW9uKG9uKXtpZighb258fCEwIT09b24uX2lzQmlnTnVtYmVyKXJldHVybiExO2lmKCFIdC5ERUJVRylyZXR1cm4hMDt2YXIgYm4scG4scHI9b24uYywkbj1vbi5lLGRyPW9uLnM7ZTppZigiW29iamVjdCBBcnJheV0iPT17fS50b1N0cmluZy5jYWxsKHByKSl7aWYoKDE9PT1k''@;'; put 'put ''cnx8LTE9PT1kcikmJiRuPj0tRWUmJiRuPD1FZSYmJG49PT1mKCRuKSl7aWYoMD09PXByWzBdKXtpZigwPT09JG4mJjE9PT1wci5sZW5ndGgpcmV0dXJuITA7YnJlYWsgZX1pZigoYm49KCRuKzEpJUcpPDEmJihibis9RyksU3RyaW5nKHByWzBdKS5sZW5ndGg9PWJuKXtmb3IoYm49MDtibjxw''@;'; put 'put ''ci5sZW5ndGg7Ym4rKylpZigocG49cHJbYm5dKTwwfHxwbj49SXx8cG4hPT1mKHBuKSlicmVhayBlO2lmKDAhPT1wbilyZXR1cm4hMH19fWVsc2UgaWYobnVsbD09PXByJiZudWxsPT09JG4mJihudWxsPT09ZHJ8fDE9PT1kcnx8LTE9PT1kcikpcmV0dXJuITA7dGhyb3cgRXJyb3IodisiSW52''@;'; put 'put ''YWxpZCBCaWdOdW1iZXI6ICIrb24pfSxIdC5tYXhpbXVtPUh0Lm1heD1mdW5jdGlvbigpe3JldHVybiB0cihhcmd1bWVudHMsLTEpfSxIdC5taW5pbXVtPUh0Lm1pbj1mdW5jdGlvbigpe3JldHVybiB0cihhcmd1bWVudHMsMSl9LEh0LnJhbmRvbT0ob249OTAwNzE5OTI1NDc0MDk5Mixibj1N''@;'; put 'put ''YXRoLnJhbmRvbSgpKm9uJjIwOTcxNTE/ZnVuY3Rpb24oKXtyZXR1cm4gZihNYXRoLnJhbmRvbSgpKm9uKX06ZnVuY3Rpb24oKXtyZXR1cm4gODM4ODYwOCooMTA3Mzc0MTgyNCpNYXRoLnJhbmRvbSgpfDApKyg4Mzg4NjA4Kk1hdGgucmFuZG9tKCl8MCl9LGZ1bmN0aW9uKHBuKXt2YXIgcHIs''@;'; put 'put ''JG4sZHIsVXIsWm4sc3I9MCxOcj1bXSxNcj1uZXcgSHQoR24pO2lmKG51bGw9PXBuP3BuPWFpOmR0KHBuLDAsRWUpLFVyPWgocG4vRyksJHIpaWYoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7Zm9yKHByPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFVyKj0yKSk7c3I8''@;'; put 'put ''VXI7KShabj0xMzEwNzIqcHJbc3JdKyhwcltzcisxXT4+PjExKSk+PTllMTU/KCRuPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSxwcltzcl09JG5bMF0scHJbc3IrMV09JG5bMV0pOihOci5wdXNoKFpuJTFlMTQpLHNyKz0yKTtzcj1Vci8yfWVsc2V7aWYoIWNy''@;'; put 'put ''eXB0by5yYW5kb21CeXRlcyl0aHJvdyAkcj0hMSxFcnJvcih2KyJjcnlwdG8gdW5hdmFpbGFibGUiKTtmb3IocHI9Y3J5cHRvLnJhbmRvbUJ5dGVzKFVyKj03KTtzcjxVcjspKFpuPTI4MTQ3NDk3NjcxMDY1NiooMzEmcHJbc3JdKSsxMDk5NTExNjI3Nzc2KnByW3NyKzFdKzQyOTQ5NjcyOTYq''@;'; put 'put ''cHJbc3IrMl0rMTY3NzcyMTYqcHJbc3IrM10rKHByW3NyKzRdPDwxNikrKHByW3NyKzVdPDw4KStwcltzcis2XSk+PTllMTU/Y3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkocHIsc3IpOihOci5wdXNoKFpuJTFlMTQpLHNyKz03KTtzcj1Vci83fWlmKCEkcilmb3IoO3NyPFVyOykoWm49Ym4o''@;'; put 'put ''KSk8OWUxNSYmKE5yW3NyKytdPVpuJTFlMTQpO2ZvcihVcj1OclstLXNyXSxwbiU9RyxVciYmcG4mJihOcltzcl09ZihVci8oWm49dWVbRy1wbl0pKSpabik7MD09PU5yW3NyXTtOci5wb3AoKSxzci0tKTtpZihzcjwwKU5yPVtkcj0wXTtlbHNle2Zvcihkcj0tMTswPT09TnJbMF07TnIuc3Bs''@;'; put 'put ''aWNlKDAsMSksZHItPUcpO2Zvcihzcj0xLFpuPU5yWzBdO1puPj0xMDtabi89MTAsc3IrKyk7c3I8RyYmKGRyLT1HLXNyKX1yZXR1cm4gTXIuZT1kcixNci5jPU5yLE1yfSksSHQuc3VtPWZ1bmN0aW9uKCl7Zm9yKHZhciBvbj0xLGJuPWFyZ3VtZW50cyxwbj1uZXcgSHQoYm5bMF0pO29uPGJu''@;'; put 'put ''Lmxlbmd0aDspcG49cG4ucGx1cyhibltvbisrXSk7cmV0dXJuIHBufSxDcj1mdW5jdGlvbigpe3ZhciBvbj0iMDEyMzQ1Njc4OSI7ZnVuY3Rpb24gYm4ocG4scHIsJG4sZHIpe2Zvcih2YXIgVXIsc3IsWm49WzBdLE5yPTAsTXI9cG4ubGVuZ3RoO05yPE1yOyl7Zm9yKHNyPVpuLmxlbmd0aDtz''@;'; put 'put ''ci0tO1puW3NyXSo9cHIpO2ZvcihablswXSs9ZHIuaW5kZXhPZihwbi5jaGFyQXQoTnIrKykpLFVyPTA7VXI8Wm4ubGVuZ3RoO1VyKyspWm5bVXJdPiRuLTEmJihudWxsPT1abltVcisxXSYmKFpuW1VyKzFdPTApLFpuW1VyKzFdKz1abltVcl0vJG58MCxabltVcl0lPSRuKX1yZXR1cm4gWm4u''@;'; put 'put ''cmV2ZXJzZSgpfXJldHVybiBmdW5jdGlvbihwbixwciwkbixkcixVcil7dmFyIFpuLHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvPXBuLmluZGV4T2YoIi4iKSxwcz1haSxNbz1faTtmb3IoWm8+PTAmJihNcj1lYSxlYT0wLHBuPXBuLnJlcGxhY2UoIi4iLCIiKSxhYT0oSW89bmV3IEh0KHByKSku''@;'; put 'put ''cG93KHBuLmxlbmd0aC1abyksZWE9TXIsSW8uYz1ibihDbihydChhYS5jKSxhYS5lLCIwIiksMTAsJG4sb24pLElvLmU9SW8uYy5sZW5ndGgpLE5yPU1yPShCYT1ibihwbixwciwkbixVcj8oWm49dnQsb24pOihabj1vbix2dCkpKS5sZW5ndGg7MD09QmFbLS1Ncl07QmEucG9wKCkpO2lmKCFC''@;'; put 'put ''YVswXSlyZXR1cm4gWm4uY2hhckF0KDApO2lmKFpvPDA/LS1OcjooYWEuYz1CYSxhYS5lPU5yLGFhLnM9ZHIsQmE9KGFhPU1uKGFhLElvLHBzLE1vLCRuKSkuYyxacj1hYS5yLE5yPWFhLmUpLFpvPUJhW3NyPU5yK3BzKzFdLE1yPSRuLzIsWnI9WnJ8fHNyPDB8fG51bGwhPUJhW3NyKzFdLFpy''@;'; put 'put ''PU1vPDQ/KG51bGwhPVpvfHxacikmJigwPT1Nb3x8TW89PShhYS5zPDA/MzoyKSk6Wm8+TXJ8fFpvPT1NciYmKDQ9PU1vfHxacnx8Nj09TW8mJjEmQmFbc3ItMV18fE1vPT0oYWEuczwwPzg6NykpLHNyPDF8fCFCYVswXSlwbj1acj9Dbihabi5jaGFyQXQoMSksLXBzLFpuLmNoYXJBdCgwKSk6''@;'; put 'put ''Wm4uY2hhckF0KDApO2Vsc2V7aWYoQmEubGVuZ3RoPXNyLFpyKWZvcigtLSRuOysrQmFbLS1zcl0+JG47KUJhW3NyXT0wLHNyfHwoKytOcixCYT1bMV0uY29uY2F0KEJhKSk7Zm9yKE1yPUJhLmxlbmd0aDshQmFbLS1Ncl07KTtmb3IoWm89MCxwbj0iIjtabzw9TXI7cG4rPVpuLmNoYXJBdChC''@;'; put 'put ''YVtabysrXSkpO3BuPUNuKHBuLE5yLFpuLmNoYXJBdCgwKSl9cmV0dXJuIHBufX0oKSxNbj1mdW5jdGlvbigpe2Z1bmN0aW9uIG9uKHByLCRuLGRyKXt2YXIgVXIsWm4sc3IsTnIsTXI9MCxacj1wci5sZW5ndGgsYWE9JG4leWUsQmE9JG4veWV8MDtmb3IocHI9cHIuc2xpY2UoKTtaci0tOylN''@;'; put 'put ''cj0oKFpuPWFhKihzcj1wcltacl0leWUpKyhVcj1CYSpzcisoTnI9cHJbWnJdL3llfDApKmFhKSV5ZSp5ZStNcikvZHJ8MCkrKFVyL3llfDApK0JhKk5yLHByW1pyXT1abiVkcjtyZXR1cm4gTXImJihwcj1bTXJdLmNvbmNhdChwcikpLHByfWZ1bmN0aW9uIGJuKHByLCRuLGRyLFVyKXt2YXIg''@;'; put 'put ''Wm4sc3I7aWYoZHIhPVVyKXNyPWRyPlVyPzE6LTE7ZWxzZSBmb3IoWm49c3I9MDtabjxkcjtabisrKWlmKHByW1puXSE9JG5bWm5dKXtzcj1wcltabl0+JG5bWm5dPzE6LTE7YnJlYWt9cmV0dXJuIHNyfWZ1bmN0aW9uIHBuKHByLCRuLGRyLFVyKXtmb3IodmFyIFpuPTA7ZHItLTspcHJbZHJd''@;'; put 'put ''LT1abixwcltkcl09KFpuPXByW2RyXTwkbltkcl0/MTowKSpVcitwcltkcl0tJG5bZHJdO2Zvcig7IXByWzBdJiZwci5sZW5ndGg+MTtwci5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5jdGlvbihwciwkbixkcixVcixabil7dmFyIHNyLE5yLE1yLFpyLGFhLEJhLElvLFpvLHBzLE1vLGhzLG5j''@;'; put 'put ''LFFvLE0zLGFkLFVzLEpjLHFzPXByLnM9PSRuLnM/MTotMSxCbD1wci5jLGVzPSRuLmM7aWYoIShCbCYmQmxbMF0mJmVzJiZlc1swXSkpcmV0dXJuIG5ldyBIdChwci5zJiYkbi5zJiYoQmw/IWVzfHxCbFswXSE9ZXNbMF06ZXMpP0JsJiYwPT1CbFswXXx8IWVzPzAqcXM6cXMvMDpOYU4pO2Zv''@;'; put 'put ''cihwcz0oWm89bmV3IEh0KHFzKSkuYz1bXSxxcz1kcisoTnI9cHIuZS0kbi5lKSsxLFpufHwoWm49SSxOcj1xZShwci5lL0cpLXFlKCRuLmUvRykscXM9cXMvR3wwKSxNcj0wO2VzW01yXT09KEJsW01yXXx8MCk7TXIrKyk7aWYoZXNbTXJdPihCbFtNcl18fDApJiZOci0tLHFzPDApcHMucHVz''@;'; put 'put ''aCgxKSxacj0hMDtlbHNle2ZvcihNMz1CbC5sZW5ndGgsVXM9ZXMubGVuZ3RoLE1yPTAscXMrPTIsKGFhPWYoWm4vKGVzWzBdKzEpKSk+MSYmKGVzPW9uKGVzLGFhLFpuKSxCbD1vbihCbCxhYSxabiksVXM9ZXMubGVuZ3RoLE0zPUJsLmxlbmd0aCksUW89VXMsaHM9KE1vPUJsLnNsaWNlKDAs''@;'; put 'put ''VXMpKS5sZW5ndGg7aHM8VXM7TW9baHMrK109MCk7SmM9ZXMuc2xpY2UoKSxKYz1bMF0uY29uY2F0KEpjKSxhZD1lc1swXSxlc1sxXT49Wm4vMiYmYWQrKztkb3tpZihhYT0wLChzcj1ibihlcyxNbyxVcyxocykpPDApe2lmKG5jPU1vWzBdLFVzIT1ocyYmKG5jPW5jKlpuKyhNb1sxXXx8MCkp''@;'; put 'put ''LChhYT1mKG5jL2FkKSk+MSlmb3IoYWE+PVpuJiYoYWE9Wm4tMSksSW89KEJhPW9uKGVzLGFhLFpuKSkubGVuZ3RoLGhzPU1vLmxlbmd0aDsxPT1ibihCYSxNbyxJbyxocyk7KWFhLS0scG4oQmEsVXM8SW8/SmM6ZXMsSW8sWm4pLElvPUJhLmxlbmd0aCxzcj0xO2Vsc2UgMD09YWEmJihzcj1h''@;'; put 'put ''YT0xKSxJbz0oQmE9ZXMuc2xpY2UoKSkubGVuZ3RoO2lmKElvPGhzJiYoQmE9WzBdLmNvbmNhdChCYSkpLHBuKE1vLEJhLGhzLFpuKSxocz1Nby5sZW5ndGgsLTE9PXNyKWZvcig7Ym4oZXMsTW8sVXMsaHMpPDE7KWFhKysscG4oTW8sVXM8aHM/SmM6ZXMsaHMsWm4pLGhzPU1vLmxlbmd0aH1l''@;'; put 'put ''bHNlIDA9PT1zciYmKGFhKyssTW89WzBdKTtwc1tNcisrXT1hYSxNb1swXT9Nb1tocysrXT1CbFtRb118fDA6KE1vPVtCbFtRb11dLGhzPTEpfXdoaWxlKChRbysrPE0zfHxudWxsIT1Nb1swXSkmJnFzLS0pO1pyPW51bGwhPU1vWzBdLHBzWzBdfHxwcy5zcGxpY2UoMCwxKX1pZihabj09SSl7''@;'; put 'put ''Zm9yKE1yPTEscXM9cHNbMF07cXM+PTEwO3FzLz0xMCxNcisrKTtIcihabyxkcisoWm8uZT1NcitOcipHLTEpKzEsVXIsWnIpfWVsc2UgWm8uZT1Ocixaby5yPStacjtyZXR1cm4gWm99fSgpLEdyPWZ1bmN0aW9uKCl7dmFyIG9uPS9eKC0/KTAoW3hib10pKD89XHdbXHcuXSokKS9pLGJuPS9e''@;'; put 'put ''KFteLl0rKVwuJC8scG49L15cLihbXi5dKykkLyxwcj0vXi0/KEluZmluaXR5fE5hTikkLywkbj0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbihkcixVcixabixzcil7dmFyIE5yLE1yPVpuP1VyOlVyLnJlcGxhY2UoJG4sIiIpO2lmKHByLnRlc3QoTXIpKWRy''@;'; put 'put ''LnM9aXNOYU4oTXIpP251bGw6TXI8MD8tMToxO2Vsc2V7aWYoIVpuJiYoTXI9TXIucmVwbGFjZShvbixmdW5jdGlvbihacixhYSxCYSl7cmV0dXJuIE5yPSJ4Ij09KEJhPUJhLnRvTG93ZXJDYXNlKCkpPzE2OiJiIj09QmE/Mjo4LHNyJiZzciE9TnI/WnI6YWF9KSxzciYmKE5yPXNyLE1yPU1y''@;'; put 'put ''LnJlcGxhY2UoYm4sIiQxIikucmVwbGFjZShwbiwiMC4kMSIpKSxVciE9TXIpKXJldHVybiBuZXcgSHQoTXIsTnIpO2lmKEh0LkRFQlVHKXRocm93IEVycm9yKHYrIk5vdCBhIisoc3I/IiBiYXNlICIrc3I6IiIpKyIgbnVtYmVyOiAiK1VyKTtkci5zPW51bGx9ZHIuYz1kci5lPW51bGx9fSgp''@;'; put 'put ''LG1yLmFic29sdXRlVmFsdWU9bXIuYWJzPWZ1bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4gb24uczwwJiYob24ucz0xKSxvbn0sbXIuY29tcGFyZWRUbz1mdW5jdGlvbihvbixibil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KG9uLGJuKSl9LG1yLmRlY2ltYWxQbGFjZXM9bXIu''@;'; put 'put ''ZHA9ZnVuY3Rpb24ob24sYm4pe3ZhciBwbixwciwkbjtpZihudWxsIT1vbilyZXR1cm4gZHQob24sMCxFZSksbnVsbD09Ym4/Ym49X2k6ZHQoYm4sMCw4KSxIcihuZXcgSHQodGhpcyksb24rdGhpcy5lKzEsYm4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihwcj0oKCRuPXBuLmxl''@;'; put 'put ''bmd0aC0xKS1xZSh0aGlzLmUvRykpKkcsJG49cG5bJG5dKWZvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO3JldHVybiBwcjwwJiYocHI9MCkscHJ9LG1yLmRpdmlkZWRCeT1tci5kaXY9ZnVuY3Rpb24ob24sYm4pe3JldHVybiBNbih0aGlzLG5ldyBIdChvbixibiksYWksX2kpfSxtci5kaXZp''@;'; put 'put ''ZGVkVG9JbnRlZ2VyQnk9bXIuaWRpdj1mdW5jdGlvbihvbixibil7cmV0dXJuIE1uKHRoaXMsbmV3IEh0KG9uLGJuKSwwLDEpfSxtci5leHBvbmVudGlhdGVkQnk9bXIucG93PWZ1bmN0aW9uKG9uLGJuKXt2YXIgcG4scHIsJG4sZHIsWm4sc3IsTnIsTXIsWnI9dGhpcztpZigob249bmV3IEh0''@;'; put 'put ''KG9uKSkuYyYmIW9uLmlzSW50ZWdlcigpKXRocm93IEVycm9yKHYrIkV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAiK3FyKG9uKSk7aWYobnVsbCE9Ym4mJihibj1uZXcgSHQoYm4pKSxabj1vbi5lPjE0LCFaci5jfHwhWnIuY1swXXx8MT09WnIuY1swXSYmIVpyLmUmJjE9PVpyLmMubGVuZ3Ro''@;'; put 'put ''fHwhb24uY3x8IW9uLmNbMF0pcmV0dXJuIE1yPW5ldyBIdChNYXRoLnBvdygrcXIoWnIpLFpuP29uLnMqKDItSnQob24pKTorcXIob24pKSksYm4/TXIubW9kKGJuKTpNcjtpZihzcj1vbi5zPDAsYm4pe2lmKGJuLmM/IWJuLmNbMF06IWJuLnMpcmV0dXJuIG5ldyBIdChOYU4pOyhwcj0hc3Im''@;'; put 'put ''JlpyLmlzSW50ZWdlcigpJiZibi5pc0ludGVnZXIoKSkmJihacj1aci5tb2QoYm4pKX1lbHNle2lmKG9uLmU+OSYmKFpyLmU+MHx8WnIuZTwtMXx8KDA9PVpyLmU/WnIuY1swXT4xfHxabiYmWnIuY1sxXT49MjRlNzpaci5jWzBdPDhlMTN8fFpuJiZaci5jWzBdPD05OTk5OTc1ZTcpKSlyZXR1''@;'; put 'put ''cm4gZHI9WnIuczwwJiZKdChvbik/LTA6MCxaci5lPi0xJiYoZHI9MS9kciksbmV3IEh0KHNyPzEvZHI6ZHIpO2VhJiYoZHI9aChlYS9HKzIpKX1mb3IoWm4/KHBuPW5ldyBIdCguNSksc3ImJihvbi5zPTEpLE5yPUp0KG9uKSk6TnI9KCRuPU1hdGguYWJzKCtxcihvbikpKSUyLE1yPW5ldyBI''@;'; put 'put ''dChHbik7Oyl7aWYoTnIpe2lmKCEoTXI9TXIudGltZXMoWnIpKS5jKWJyZWFrO2RyP01yLmMubGVuZ3RoPmRyJiYoTXIuYy5sZW5ndGg9ZHIpOnByJiYoTXI9TXIubW9kKGJuKSl9aWYoJG4pe2lmKDA9PT0oJG49Zigkbi8yKSkpYnJlYWs7TnI9JG4lMn1lbHNlIGlmKEhyKG9uPW9uLnRpbWVz''@;'; put 'put ''KHBuKSxvbi5lKzEsMSksb24uZT4xNClOcj1KdChvbik7ZWxzZXtpZigwPT0oJG49K3FyKG9uKSkpYnJlYWs7TnI9JG4lMn1acj1aci50aW1lcyhaciksZHI/WnIuYyYmWnIuYy5sZW5ndGg+ZHImJihaci5jLmxlbmd0aD1kcik6cHImJihacj1aci5tb2QoYm4pKX1yZXR1cm4gcHI/TXI6KHNy''@;'; put 'put ''JiYoTXI9R24uZGl2KE1yKSksYm4/TXIubW9kKGJuKTpkcj9IcihNcixlYSxfaSx2b2lkIDApOk1yKX0sbXIuaW50ZWdlclZhbHVlPWZ1bmN0aW9uKG9uKXt2YXIgYm49bmV3IEh0KHRoaXMpO3JldHVybiBudWxsPT1vbj9vbj1faTpkdChvbiwwLDgpLEhyKGJuLGJuLmUrMSxvbil9LG1yLmlz''@;'; put 'put ''RXF1YWxUbz1tci5lcT1mdW5jdGlvbihvbixibil7cmV0dXJuIDA9PT1wdCh0aGlzLG5ldyBIdChvbixibikpfSxtci5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jfSxtci5pc0dyZWF0ZXJUaGFuPW1yLmd0PWZ1bmN0aW9uKG9uLGJuKXtyZXR1cm4gcHQodGhpcyxuZXcgSHQo''@;'; put 'put ''b24sYm4pKT4wfSxtci5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvPW1yLmd0ZT1mdW5jdGlvbihvbixibil7cmV0dXJuIDE9PT0oYm49cHQodGhpcyxuZXcgSHQob24sYm4pKSl8fDA9PT1ibn0sbXIuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJnFlKHRoaXMuZS9HKT50aGlz''@;'; put 'put ''LmMubGVuZ3RoLTJ9LG1yLmlzTGVzc1RoYW49bXIubHQ9ZnVuY3Rpb24ob24sYm4pe3JldHVybiBwdCh0aGlzLG5ldyBIdChvbixibikpPDB9LG1yLmlzTGVzc1RoYW5PckVxdWFsVG89bXIubHRlPWZ1bmN0aW9uKG9uLGJuKXtyZXR1cm4tMT09PShibj1wdCh0aGlzLG5ldyBIdChvbixibikp''@;'; put 'put ''KXx8MD09PWJufSxtci5pc05hTj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN9LG1yLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LG1yLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPjB9LG1yLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5j''@;'; put 'put ''JiYwPT10aGlzLmNbMF19LG1yLm1pbnVzPWZ1bmN0aW9uKG9uLGJuKXt2YXIgcG4scHIsJG4sZHIsVXI9dGhpcyxabj1Vci5zO2lmKGJuPShvbj1uZXcgSHQob24sYm4pKS5zLCFabnx8IWJuKXJldHVybiBuZXcgSHQoTmFOKTtpZihabiE9Ym4pcmV0dXJuIG9uLnM9LWJuLFVyLnBsdXMob24p''@;'; put 'put ''O3ZhciBzcj1Vci5lL0csTnI9b24uZS9HLE1yPVVyLmMsWnI9b24uYztpZighc3J8fCFOcil7aWYoIU1yfHwhWnIpcmV0dXJuIE1yPyhvbi5zPS1ibixvbik6bmV3IEh0KFpyP1VyOk5hTik7aWYoIU1yWzBdfHwhWnJbMF0pcmV0dXJuIFpyWzBdPyhvbi5zPS1ibixvbik6bmV3IEh0KE1yWzBd''@;'; put 'put ''P1VyOjM9PV9pPy0wOjApfWlmKHNyPXFlKHNyKSxOcj1xZShOciksTXI9TXIuc2xpY2UoKSxabj1zci1Ocil7Zm9yKChkcj1abjwwKT8oWm49LVpuLCRuPU1yKTooTnI9c3IsJG49WnIpLCRuLnJldmVyc2UoKSxibj1abjtibi0tOyRuLnB1c2goMCkpOyRuLnJldmVyc2UoKX1lbHNlIGZvcihw''@;'; put 'put ''cj0oZHI9KFpuPU1yLmxlbmd0aCk8KGJuPVpyLmxlbmd0aCkpP1puOmJuLFpuPWJuPTA7Ym48cHI7Ym4rKylpZihNcltibl0hPVpyW2JuXSl7ZHI9TXJbYm5dPFpyW2JuXTticmVha31pZihkciYmKCRuPU1yLE1yPVpyLFpyPSRuLG9uLnM9LW9uLnMpLChibj0ocHI9WnIubGVuZ3RoKS0ocG49''@;'; put 'put ''TXIubGVuZ3RoKSk+MClmb3IoO2JuLS07TXJbcG4rK109MCk7Zm9yKGJuPUktMTtwcj5abjspe2lmKE1yWy0tcHJdPFpyW3ByXSl7Zm9yKHBuPXByO3BuJiYhTXJbLS1wbl07TXJbcG5dPWJuKTstLU1yW3BuXSxNcltwcl0rPUl9TXJbcHJdLT1acltwcl19Zm9yKDswPT1NclswXTtNci5zcGxp''@;'; put 'put ''Y2UoMCwxKSwtLU5yKTtyZXR1cm4gTXJbMF0/YXIob24sTXIsTnIpOihvbi5zPTM9PV9pPy0xOjEsb24uYz1bb24uZT0wXSxvbil9LG1yLm1vZHVsbz1tci5tb2Q9ZnVuY3Rpb24ob24sYm4pe3ZhciBwbixwciwkbj10aGlzO3JldHVybiBvbj1uZXcgSHQob24sYm4pLCEkbi5jfHwhb24uc3x8''@;'; put 'put ''b24uYyYmIW9uLmNbMF0/bmV3IEh0KE5hTik6IW9uLmN8fCRuLmMmJiEkbi5jWzBdP25ldyBIdCgkbik6KDk9PXdpPyhwcj1vbi5zLG9uLnM9MSxwbj1NbigkbixvbiwwLDMpLG9uLnM9cHIscG4ucyo9cHIpOnBuPU1uKCRuLG9uLDAsd2kpLCEob249JG4ubWludXMocG4udGltZXMob24pKSku''@;'; put 'put ''Y1swXSYmMT09d2kmJihvbi5zPSRuLnMpLG9uKX0sbXIubXVsdGlwbGllZEJ5PW1yLnRpbWVzPWZ1bmN0aW9uKG9uLGJuKXt2YXIgcG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmEsSW8sWm8scHMsTW89dGhpcyxocz1Nby5jLG5jPShvbj1uZXcgSHQob24sYm4pKS5jO2lmKCEo''@;'; put 'put ''aHMmJm5jJiZoc1swXSYmbmNbMF0pKXJldHVybiFNby5zfHwhb24uc3x8aHMmJiFoc1swXSYmIW5jfHxuYyYmIW5jWzBdJiYhaHM/b24uYz1vbi5lPW9uLnM9bnVsbDoob24ucyo9TW8ucyxocyYmbmM/KG9uLmM9WzBdLG9uLmU9MCk6b24uYz1vbi5lPW51bGwpLG9uO2Zvcihwcj1xZShNby5l''@;'; put 'put ''L0cpK3FlKG9uLmUvRyksb24ucyo9TW8ucywoc3I9aHMubGVuZ3RoKTwoWnI9bmMubGVuZ3RoKSYmKElvPWhzLGhzPW5jLG5jPUlvLCRuPXNyLHNyPVpyLFpyPSRuKSwkbj1zcitacixJbz1bXTskbi0tO0lvLnB1c2goMCkpO2Zvcihabz1JLHBzPXllLCRuPVpyOy0tJG4+PTA7KXtmb3IocG49''@;'; put 'put ''MCxhYT1uY1skbl0lcHMsQmE9bmNbJG5dL3BzfDAsZHI9JG4rKFVyPXNyKTtkcj4kbjspcG49KChOcj1hYSooTnI9aHNbLS1Vcl0lcHMpKyhabj1CYSpOcisoTXI9aHNbVXJdL3BzfDApKmFhKSVwcypwcytJb1tkcl0rcG4pL1pvfDApKyhabi9wc3wwKStCYSpNcixJb1tkci0tXT1OciVabztJ''@;'; put 'put ''b1tkcl09cG59cmV0dXJuIHBuPysrcHI6SW8uc3BsaWNlKDAsMSksYXIob24sSW8scHIpfSxtci5uZWdhdGVkPWZ1bmN0aW9uKCl7dmFyIG9uPW5ldyBIdCh0aGlzKTtyZXR1cm4gb24ucz0tb24uc3x8bnVsbCxvbn0sbXIucGx1cz1mdW5jdGlvbihvbixibil7dmFyIHBuLHByPXRoaXMsJG49''@;'; put 'put ''cHIucztpZihibj0ob249bmV3IEh0KG9uLGJuKSkucywhJG58fCFibilyZXR1cm4gbmV3IEh0KE5hTik7aWYoJG4hPWJuKXJldHVybiBvbi5zPS1ibixwci5taW51cyhvbik7dmFyIGRyPXByLmUvRyxVcj1vbi5lL0csWm49cHIuYyxzcj1vbi5jO2lmKCFkcnx8IVVyKXtpZighWm58fCFzcily''@;'; put 'put ''ZXR1cm4gbmV3IEh0KCRuLzApO2lmKCFablswXXx8IXNyWzBdKXJldHVybiBzclswXT9vbjpuZXcgSHQoWm5bMF0/cHI6MCokbil9aWYoZHI9cWUoZHIpLFVyPXFlKFVyKSxabj1abi5zbGljZSgpLCRuPWRyLVVyKXtmb3IoJG4+MD8oVXI9ZHIscG49c3IpOigkbj0tJG4scG49Wm4pLHBuLnJl''@;'; put 'put ''dmVyc2UoKTskbi0tO3BuLnB1c2goMCkpO3BuLnJldmVyc2UoKX1mb3IoKCRuPVpuLmxlbmd0aCktKGJuPXNyLmxlbmd0aCk8MCYmKHBuPXNyLHNyPVpuLFpuPXBuLGJuPSRuKSwkbj0wO2JuOykkbj0oWm5bLS1ibl09Wm5bYm5dK3NyW2JuXSskbikvSXwwLFpuW2JuXT1JPT09Wm5bYm5dPzA6''@;'; put 'put ''Wm5bYm5dJUk7cmV0dXJuICRuJiYoWm49WyRuXS5jb25jYXQoWm4pLCsrVXIpLGFyKG9uLFpuLFVyKX0sbXIucHJlY2lzaW9uPW1yLnNkPWZ1bmN0aW9uKG9uLGJuKXt2YXIgcG4scHIsJG47aWYobnVsbCE9b24mJm9uIT09ISFvbilyZXR1cm4gZHQob24sMSxFZSksbnVsbD09Ym4/Ym49X2k6''@;'; put 'put ''ZHQoYm4sMCw4KSxIcihuZXcgSHQodGhpcyksb24sYm4pO2lmKCEocG49dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihwcj0oJG49cG4ubGVuZ3RoLTEpKkcrMSwkbj1wblskbl0pe2Zvcig7JG4lMTA9PTA7JG4vPTEwLHByLS0pO2Zvcigkbj1wblswXTskbj49MTA7JG4vPTEwLHByKyspO31yZXR1''@;'; put 'put ''cm4gb24mJnRoaXMuZSsxPnByJiYocHI9dGhpcy5lKzEpLHByfSxtci5zaGlmdGVkQnk9ZnVuY3Rpb24ob24pe3JldHVybiBkdChvbiwtaWUsaWUpLHRoaXMudGltZXMoIjFlIitvbil9LG1yLnNxdWFyZVJvb3Q9bXIuc3FydD1mdW5jdGlvbigpe3ZhciBvbixibixwbixwciwkbixkcj10aGlz''@;'; put 'put ''LFVyPWRyLmMsWm49ZHIucyxzcj1kci5lLE5yPWFpKzQsTXI9bmV3IEh0KCIwLjUiKTtpZigxIT09Wm58fCFVcnx8IVVyWzBdKXJldHVybiBuZXcgSHQoIVpufHxabjwwJiYoIVVyfHxVclswXSk/TmFOOlVyP2RyOjEvMCk7aWYoMD09KFpuPU1hdGguc3FydCgrcXIoZHIpKSl8fFpuPT0xLzA/''@;'; put 'put ''KCgoYm49cnQoVXIpKS5sZW5ndGgrc3IpJTI9PTAmJihibis9IjAiKSxabj1NYXRoLnNxcnQoK2JuKSxzcj1xZSgoc3IrMSkvMiktKHNyPDB8fHNyJTIpLHBuPW5ldyBIdChibj1abj09MS8wPyI1ZSIrc3I6KGJuPVpuLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCxibi5pbmRleE9mKCJlIikr''@;'; put 'put ''MSkrc3IpKTpwbj1uZXcgSHQoWm4rIiIpLHBuLmNbMF0pZm9yKChabj0oc3I9cG4uZSkrTnIpPDMmJihabj0wKTs7KWlmKHBuPU1yLnRpbWVzKCgkbj1wbikucGx1cyhNbihkciwkbixOciwxKSkpLHJ0KCRuLmMpLnNsaWNlKDAsWm4pPT09KGJuPXJ0KHBuLmMpKS5zbGljZSgwLFpuKSl7aWYo''@;'; put 'put ''cG4uZTxzciYmLS1abiwiOTk5OSIhPShibj1ibi5zbGljZShabi0zLFpuKzEpKSYmKHByfHwiNDk5OSIhPWJuKSl7KCErYm58fCErYm4uc2xpY2UoMSkmJiI1Ij09Ym4uY2hhckF0KDApKSYmKEhyKHBuLHBuLmUrYWkrMiwxKSxvbj0hcG4udGltZXMocG4pLmVxKGRyKSk7YnJlYWt9aWYoIXBy''@;'; put 'put ''JiYoSHIoJG4sJG4uZSthaSsyLDApLCRuLnRpbWVzKCRuKS5lcShkcikpKXtwbj0kbjticmVha31Ocis9NCxabis9NCxwcj0xfXJldHVybiBIcihwbixwbi5lK2FpKzEsX2ksb24pfSxtci50b0V4cG9uZW50aWFsPWZ1bmN0aW9uKG9uLGJuKXtyZXR1cm4gbnVsbCE9b24mJihkdChvbiwwLEVl''@;'; put 'put ''KSxvbisrKSxIbih0aGlzLG9uLGJuLDEpfSxtci50b0ZpeGVkPWZ1bmN0aW9uKG9uLGJuKXtyZXR1cm4gbnVsbCE9b24mJihkdChvbiwwLEVlKSxvbj1vbit0aGlzLmUrMSksSG4odGhpcyxvbixibil9LG1yLnRvRm9ybWF0PWZ1bmN0aW9uKG9uLGJuLHBuKXt2YXIgcHI7aWYobnVsbD09cG4p''@;'; put 'put ''bnVsbCE9b24mJmJuJiYib2JqZWN0Ij09dHlwZW9mIGJuPyhwbj1ibixibj1udWxsKTpvbiYmIm9iamVjdCI9PXR5cGVvZiBvbj8ocG49b24sb249Ym49bnVsbCk6cG49ZmE7ZWxzZSBpZigib2JqZWN0IiE9dHlwZW9mIHBuKXRocm93IEVycm9yKHYrIkFyZ3VtZW50IG5vdCBhbiBvYmplY3Q6''@;'; put 'put ''ICIrcG4pO2lmKHByPXRoaXMudG9GaXhlZChvbixibiksdGhpcy5jKXt2YXIgZHIsVXI9cHIuc3BsaXQoIi4iKSxabj0rcG4uZ3JvdXBTaXplLHNyPStwbi5zZWNvbmRhcnlHcm91cFNpemUsTnI9cG4uZ3JvdXBTZXBhcmF0b3J8fCIiLE1yPVVyWzBdLFpyPVVyWzFdLGFhPXRoaXMuczwwLEJh''@;'; put 'put ''PWFhP01yLnNsaWNlKDEpOk1yLElvPUJhLmxlbmd0aDtpZihzciYmKGRyPVpuLFpuPXNyLHNyPWRyLElvLT1kciksWm4+MCYmSW8+MCl7Zm9yKE1yPUJhLnN1YnN0cigwLGRyPUlvJVpufHxabik7ZHI8SW87ZHIrPVpuKU1yKz1OcitCYS5zdWJzdHIoZHIsWm4pO3NyPjAmJihNcis9TnIrQmEu''@;'; put 'put ''c2xpY2UoZHIpKSxhYSYmKE1yPSItIitNcil9cHI9WnI/TXIrKHBuLmRlY2ltYWxTZXBhcmF0b3J8fCIiKSsoKHNyPStwbi5mcmFjdGlvbkdyb3VwU2l6ZSk/WnIucmVwbGFjZShuZXcgUmVnRXhwKCJcXGR7IitzcisifVxcQiIsImciKSwiJCYiKyhwbi5mcmFjdGlvbkdyb3VwU2VwYXJhdG9y''@;'; put 'put ''fHwiIikpOlpyKTpNcn1yZXR1cm4ocG4ucHJlZml4fHwiIikrcHIrKHBuLnN1ZmZpeHx8IiIpfSxtci50b0ZyYWN0aW9uPWZ1bmN0aW9uKG9uKXt2YXIgYm4scG4scHIsJG4sZHIsVXIsWm4sc3IsTnIsTXIsWnIsYWEsQmE9dGhpcyxJbz1CYS5jO2lmKG51bGwhPW9uJiYoIShabj1uZXcgSHQo''@;'; put 'put ''b24pKS5pc0ludGVnZXIoKSYmKFpuLmN8fDEhPT1abi5zKXx8Wm4ubHQoR24pKSl0aHJvdyBFcnJvcih2KyJBcmd1bWVudCAiKyhabi5pc0ludGVnZXIoKT8ib3V0IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikrcXIoWm4pKTtpZighSW8pcmV0dXJuIG5ldyBIdChCYSk7Zm9yKGJu''@;'; put 'put ''PW5ldyBIdChHbiksTnI9cG49bmV3IEh0KEduKSxwcj1zcj1uZXcgSHQoR24pLGFhPXJ0KElvKSxkcj1ibi5lPWFhLmxlbmd0aC1CYS5lLTEsYm4uY1swXT11ZVsoVXI9ZHIlRyk8MD9HK1VyOlVyXSxvbj0hb258fFpuLmNvbXBhcmVkVG8oYm4pPjA/ZHI+MD9ibjpOcjpabixVcj1JcixJcj0x''@;'; put 'put ''LzAsWm49bmV3IEh0KGFhKSxzci5jWzBdPTA7TXI9TW4oWm4sYm4sMCwxKSwxIT0oJG49cG4ucGx1cyhNci50aW1lcyhwcikpKS5jb21wYXJlZFRvKG9uKTspcG49cHIscHI9JG4sTnI9c3IucGx1cyhNci50aW1lcygkbj1OcikpLHNyPSRuLGJuPVpuLm1pbnVzKE1yLnRpbWVzKCRuPWJuKSks''@;'; put 'put ''Wm49JG47cmV0dXJuICRuPU1uKG9uLm1pbnVzKHBuKSxwciwwLDEpLHNyPXNyLnBsdXMoJG4udGltZXMoTnIpKSxwbj1wbi5wbHVzKCRuLnRpbWVzKHByKSksc3Iucz1Oci5zPUJhLnMsWnI9TW4oTnIscHIsZHIqPTIsX2kpLm1pbnVzKEJhKS5hYnMoKS5jb21wYXJlZFRvKE1uKHNyLHBuLGRy''@;'; put 'put ''LF9pKS5taW51cyhCYSkuYWJzKCkpPDE/W05yLHByXTpbc3IscG5dLElyPVVyLFpyfSxtci50b051bWJlcj1mdW5jdGlvbigpe3JldHVybitxcih0aGlzKX0sbXIudG9QcmVjaXNpb249ZnVuY3Rpb24ob24sYm4pe3JldHVybiBudWxsIT1vbiYmZHQob24sMSxFZSksSG4odGhpcyxvbixibiwy''@;'; put 'put ''KX0sbXIudG9TdHJpbmc9ZnVuY3Rpb24ob24pe3ZhciBibixwbj10aGlzLHByPXBuLnMsJG49cG4uZTtyZXR1cm4gbnVsbD09PSRuP3ByPyhibj0iSW5maW5pdHkiLHByPDAmJihibj0iLSIrYm4pKTpibj0iTmFOIjoobnVsbD09b24/Ym49JG48PU9ufHwkbj49enI/dm4ocnQocG4uYyksJG4p''@;'; put 'put ''OkNuKHJ0KHBuLmMpLCRuLCIwIik6MTA9PT1vbiYmTnQ/Ym49Q24ocnQoKHBuPUhyKG5ldyBIdChwbiksYWkrJG4rMSxfaSkpLmMpLHBuLmUsIjAiKTooZHQob24sMix2dC5sZW5ndGgsIkJhc2UiKSxibj1DcihDbihydChwbi5jKSwkbiwiMCIpLDEwLG9uLHByLCEwKSkscHI8MCYmcG4uY1sw''@;'; put 'put ''XSYmKGJuPSItIitibikpLGJufSxtci52YWx1ZU9mPW1yLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBxcih0aGlzKX0sbXIuX2lzQmlnTnVtYmVyPSEwLG51bGwhPXRuJiZIdC5zZXQodG4pLEh0fSgpLGEuZGVmYXVsdD1hLkJpZ051bWJlcj1hLGMuZXhwb3J0cz9jLmV4cG9ydHM9YToobHx8''@;'; put 'put ''KGw9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3NlbGY6d2luZG93KSxsLkJpZ051bWJlcj1hKX0oR2F0KX0oYzRlKTt2YXIgdTRlPWM0ZS5leHBvcnRzO2NvbnN0IGYzPXJKKCksZ290PWVKKCksbW90PXRKLHZvdD11NGUsVzA9e3RyaWxsaW9uOk1hdGgucG93KDEwLDEyKSxiaWxsaW9uOk1hdGgu''@;'; put 'put ''cG93KDEwLDkpLG1pbGxpb246TWF0aC5wb3coMTAsNiksdGhvdXNhbmQ6TWF0aC5wb3coMTAsMyl9LHNUPXt0b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVyYWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMSxzcGFjZVNlcGFyYXRlZDohMSxuZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExLHJvdW5kaW5nRnVuY3Rpb246TWF0aC5yb3VuZCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMX0se2JpbmFyeVN1ZmZpeGVzOmQ0ZSxkZWNpbWFsU3VmZml4ZXM6WVB9PWYzLmN1cnJlbnRC''@;'; put 'put ''eXRlcygpLGlKPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOllQLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6ZDRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpZUCxtYXJrZXI6ImQifX07ZnVuY3Rpb24gR1AoYyxsLGEpe2xl''@;'; put 'put ''dCBkPWxbMF0saD1NYXRoLmFicyhjKTtpZihoPj1hKXtmb3IobGV0IGY9MTtmPGwubGVuZ3RoOysrZil7bGV0IHY9TWF0aC5wb3coYSxmKSxNPU1hdGgucG93KGEsZisxKTtpZihoPj12JiZoPE0pe2Q9bFtmXSxjLz12O2JyZWFrfX1kPT09bFswXSYmKGMvPU1hdGgucG93KGEsbC5sZW5ndGgt''@;'; put 'put ''MSksZD1sW2wubGVuZ3RoLTFdKX1yZXR1cm57dmFsdWU6YyxzdWZmaXg6ZH19ZnVuY3Rpb24gJFAoYyl7bGV0IGw9IiI7Zm9yKGxldCBhPTA7YTxjO2ErKylsKz0iMCI7cmV0dXJuIGx9ZnVuY3Rpb24gbFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphPWYzLGRlY2ltYWxT''@;'; put 'put ''ZXBhcmF0b3I6ZCxkZWZhdWx0czpoPWEuY3VycmVudERlZmF1bHRzKCl9KXtsZXQgZj1jLl92YWx1ZTtpZigwPT09ZiYmYS5oYXNaZXJvRm9ybWF0KCkpcmV0dXJuIGEuZ2V0WmVyb0Zvcm1hdCgpO2lmKCFpc0Zpbml0ZShmKSlyZXR1cm4gZi50b1N0cmluZygpO2xldCB2PU9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sc1QsaCxsKSxNPXYudG90YWxMZW5ndGgsST1NPzA6di5jaGFyYWN0ZXJpc3RpYyxHPXYub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYyxpZT12LmZvcmNlQXZlcmFnZSx5ZT0hIU18fCEhaWV8fHYuYXZlcmFnZSxFZT1NPy0xOnllJiZ2b2lkIDA9PT1sLm1hbnRpc3NhPzA6di5tYW50aXNz''@;'; put 'put ''YSxqZT0hTSYmKHZvaWQgMD09PWwub3B0aW9uYWxNYW50aXNzYT8tMT09PUVlOnYub3B0aW9uYWxNYW50aXNzYSkscWU9di50cmltTWFudGlzc2EscnQ9di50aG91c2FuZFNlcGFyYXRlZCxwdD12LnNwYWNlU2VwYXJhdGVkLGR0PXYubmVnYXRpdmUsSnQ9di5mb3JjZVNpZ24sdm49di5leHBv''@;'; put 'put ''bmVudGlhbCxDbj12LnJvdW5kaW5nRnVuY3Rpb24sdG49IiI7aWYoeWUpe2xldCBDcj1mdW5jdGlvbiBBb3Qoe3ZhbHVlOmMsZm9yY2VBdmVyYWdlOmwsbG93UHJlY2lzaW9uOmE9ITAsYWJicmV2aWF0aW9uczpkLHNwYWNlU2VwYXJhdGVkOmg9ITEsdG90YWxMZW5ndGg6Zj0wLHJvdW5kaW5n''@;'; put 'put ''RnVuY3Rpb246dj1NYXRoLnJvdW5kfSl7bGV0IE09IiIsST1NYXRoLmFicyhjKSxHPS0xO2lmKGwmJmRbbF0mJlcwW2xdPyhNPWRbbF0sYy89VzBbbF0pOkk+PVcwLnRyaWxsaW9ufHxhJiYxPT09dihJL1cwLnRyaWxsaW9uKT8oTT1kLnRyaWxsaW9uLGMvPVcwLnRyaWxsaW9uKTpJPFcwLnRy''@;'; put 'put ''aWxsaW9uJiZJPj1XMC5iaWxsaW9ufHxhJiYxPT09dihJL1cwLmJpbGxpb24pPyhNPWQuYmlsbGlvbixjLz1XMC5iaWxsaW9uKTpJPFcwLmJpbGxpb24mJkk+PVcwLm1pbGxpb258fGEmJjE9PT12KEkvVzAubWlsbGlvbik/KE09ZC5taWxsaW9uLGMvPVcwLm1pbGxpb24pOihJPFcwLm1pbGxp''@;'; put 'put ''b24mJkk+PVcwLnRob3VzYW5kfHxhJiYxPT09dihJL1cwLnRob3VzYW5kKSkmJihNPWQudGhvdXNhbmQsYy89VzAudGhvdXNhbmQpLE0mJihNPShoPyIgIjoiIikrTSksZil7bGV0IHVlPWM8MCx5ZT1jLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVswXTtHPU1hdGgubWF4KGYtKHVlP3llLmxlbmd0''@;'; put 'put ''aC0xOnllLmxlbmd0aCksMCl9cmV0dXJue3ZhbHVlOmMsYWJicmV2aWF0aW9uOk0sbWFudGlzc2FQcmVjaXNpb246R319KHt2YWx1ZTpmLGZvcmNlQXZlcmFnZTppZSxsb3dQcmVjaXNpb246di5sb3dQcmVjaXNpb24sYWJicmV2aWF0aW9uczphLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6cHQscm91bmRpbmdGdW5jdGlvbjpDbix0b3RhbExlbmd0aDpNfSk7Zj1Dci52YWx1ZSx0bis9Q3IuYWJicmV2aWF0aW9uLE0mJihFZT1Dci5tYW50aXNzYVByZWNpc2lvbil9aWYodm4pe2xldCBDcj1mdW5jdGlvbiBrb3Qoe3ZhbHVlOmMsY2hhcmFjdGVyaXN0aWNQcmVj''@;'; put 'put ''aXNpb246bH0pe2xldFthLGRdPWMudG9FeHBvbmVudGlhbCgpLnNwbGl0KCJlIiksaD0rYTtyZXR1cm4gbD8oMTxsJiYoaCo9TWF0aC5wb3coMTAsbC0xKSxkPStkLShsLTEpLGQ9ZD49MD9gKyR7ZH1gOmQpLHt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfSk6e3ZhbHVlOmgsYWJicmV2''@;'; put 'put ''aWF0aW9uOmBlJHtkfWB9fSh7dmFsdWU6ZixjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpJfSk7Zj1Dci52YWx1ZSx0bj1Dci5hYmJyZXZpYXRpb24rdG59bGV0IE1uPWZ1bmN0aW9uIFJvdChjLGwsYSxkLGgsZil7aWYoLTE9PT1kKXJldHVybiBjO2xldCB2PWZ1bmN0aW9uIElvdChjLGwsYT1N''@;'; put 'put ''YXRoLnJvdW5kKXtyZXR1cm4tMSE9PWMudG9TdHJpbmcoKS5pbmRleE9mKCJlIik/ZnVuY3Rpb24gRG90KGMsbCl7bGV0IGE9Yy50b1N0cmluZygpLFtkLGhdPWEuc3BsaXQoImUiKSxbZix2PSIiXT1kLnNwbGl0KCIuIik7aWYoK2g+MClhPWYrdiskUChoLXYubGVuZ3RoKTtlbHNle2xldCBN''@;'; put 'put ''PSIuIjtNPStmPDA/YC0wJHtNfWA6YDAke019YDtsZXQgST0oJFAoLWgtMSkrTWF0aC5hYnMoZikrdikuc3Vic3RyKDAsbCk7SS5sZW5ndGg8bCYmKEkrPSRQKGwtSS5sZW5ndGgpKSxhPU0rSX1yZXR1cm4raD4wJiZsPjAmJihhKz1gLiR7JFAobCl9YCksYX0oYyxsKTpuZXcgdm90KGEoK2Ak''@;'; put 'put ''e2N9ZSske2x9YCkvTWF0aC5wb3coMTAsbCkpLnRvRml4ZWQobCl9KGwsZCxmKSxbTSxJPSIiXT12LnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihJLm1hdGNoKC9eMCskLykmJihhfHxoKSlyZXR1cm4gTTtsZXQgRz1JLm1hdGNoKC8wKyQvKTtyZXR1cm4gaCYmRz9gJHtNfS4ke0kudG9TdHJp''@;'; put 'put ''bmcoKS5zbGljZSgwLEcuaW5kZXgpfWA6di50b1N0cmluZygpfShmLnRvU3RyaW5nKCksZixqZSxFZSxxZSxDbik7cmV0dXJuIE1uPWZ1bmN0aW9uIExvdChjLGwsYSxkKXtsZXQgaD1jLFtmLHZdPWgudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKGYubWF0Y2goL14tPzAkLykmJmEpcmV0dXJu''@;'; put 'put ''IHY/YCR7Zi5yZXBsYWNlKCIwIiwiIil9LiR7dn1gOmYucmVwbGFjZSgiMCIsIiIpO2NvbnN0IE09bDwwJiYwPT09Zi5pbmRleE9mKCItIik7aWYoTSYmKGY9Zi5zbGljZSgxKSxoPWguc2xpY2UoMSkpLGYubGVuZ3RoPGQpe2xldCBJPWQtZi5sZW5ndGg7Zm9yKGxldCBHPTA7RzxJO0crKylo''@;'; put 'put ''PWAwJHtofWB9cmV0dXJuIE0mJihoPWAtJHtofWApLGgudG9TdHJpbmcoKX0oTW4sZixHLEkpLE1uPWZ1bmN0aW9uIFBvdChjLGwsYSxkLGgpe2xldCBmPWQuY3VycmVudERlbGltaXRlcnMoKSx2PWYudGhvdXNhbmRzO2g9aHx8Zi5kZWNpbWFsO2xldCBNPWYudGhvdXNhbmRzU2l6ZXx8MyxJ''@;'; put 'put ''PWMudG9TdHJpbmcoKSxHPUkuc3BsaXQoIi4iKVswXSxpZT1JLnNwbGl0KCIuIilbMV07Y29uc3QgdWU9bDwwJiYwPT09Ry5pbmRleE9mKCItIik7cmV0dXJuIGEmJih1ZSYmKEc9Ry5zbGljZSgxKSksZnVuY3Rpb24gT290KGMsbCl7bGV0IGE9W10sZD0wO2ZvcihsZXQgaD1jO2g+MDtoLS0p''@;'; put 'put ''ZD09PWwmJihhLnVuc2hpZnQoaCksZD0wKSxkKys7cmV0dXJuIGF9KEcubGVuZ3RoLE0pLmZvckVhY2goKEVlLGplKT0+e0c9Ry5zbGljZSgwLEVlK2plKSt2K0cuc2xpY2UoRWUramUpfSksdWUmJihHPWAtJHtHfWApKSxJPWllP0craCtpZTpHLEl9KE1uLGYscnQsYSxkKSwoeWV8fHZuKSYm''@;'; put 'put ''KE1uPWZ1bmN0aW9uIEZvdChjLGwpe3JldHVybiBjK2x9KE1uLHRuKSksKEp0fHxmPDApJiYoTW49ZnVuY3Rpb24gSG90KGMsbCxhKXtyZXR1cm4gMD09PWw/YzowPT0rYz9jLnJlcGxhY2UoIi0iLCIiKTpsPjA/YCske2N9YDoic2lnbiI9PT1hP2M6YCgke2MucmVwbGFjZSgiLSIsIiIpfSlg''@;'; put 'put ''fShNbixmLGR0KSksTW59ZnVuY3Rpb24gT18oYyxsKXtpZighYylyZXR1cm4gbDtsZXQgYT1PYmplY3Qua2V5cyhjKTtyZXR1cm4gMT09PWEubGVuZ3RoJiYib3V0cHV0Ij09PWFbMF0/bDpjfWNvbnN0IERnPXU0ZTtmdW5jdGlvbiBoNGUoYyxsLGEpe2xldCBkPW5ldyBEZyhjLl92YWx1ZSks''@;'; put 'put ''aD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRGcoaCksYy5fdmFsdWU9ZC5taW51cyhoKS50b051bWJlcigpLGN9Y29uc3QgVnA9ckooKSwkb3Q9ZUooKSxLb3Q9KGM9Pih7bG9hZExhbmd1YWdlc0luTm9kZTpsPT5mdW5jdGlvbiBmb3QoYyxsKXtjLmZvckVh''@;'; put 'put ''Y2goYT0+e2xldCBkO3RyeXtkPWZ1bmN0aW9uIGhvdChjKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkeW5hbWljYWxseSByZXF1aXJlICInK2MrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHluYW1pY1JlcXVpcmVzIG9w''@;'; put 'put ''dGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUgY2FsbCB0byB3b3JrLicpfShgLi4vbGFuZ3VhZ2VzLyR7YX1gKX1jYXRjaHtjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gbG9hZCAiJHthfSIuIE5vIG1hdGNoaW5nIGxhbmd1YWdl''@;'; put 'put ''IGZpbGUgZm91bmQuYCl9ZCYmbC5yZWdpc3Rlckxhbmd1YWdlKGQpfSl9KGwsYyl9KSkoY3UpLHFvdD1vNGUoKTtsZXQgczk9KGM9Pih7Zm9ybWF0OiguLi5sKT0+ZnVuY3Rpb24geW90KGMsbD17fSxhKXtpZigic3RyaW5nIj09dHlwZW9mIGwmJihsPW1vdC5wYXJzZUZvcm1hdChsKSksIWdv''@;'; put 'put ''dC52YWxpZGF0ZUZvcm1hdChsKSlyZXR1cm4iRVJST1I6IGludmFsaWQgZm9ybWF0IjtsZXQgaD1sLnByZWZpeHx8IiIsZj1sLnBvc3RmaXh8fCIiLHY9ZnVuY3Rpb24gYm90KGMsbCxhKXtzd2l0Y2gobC5vdXRwdXQpe2Nhc2UiY3VycmVuY3kiOnJldHVybiBmdW5jdGlvbiBUb3QoYyxsLGEp''@;'; put 'put ''e2NvbnN0IGQ9YS5jdXJyZW50Q3VycmVuY3koKTtsZXQgdixoPU9iamVjdC5hc3NpZ24oe30sbCksZj1PYmplY3QuYXNzaWduKHt9LHNULGgpLE09IiIsST0hIWYudG90YWxMZW5ndGh8fCEhZi5mb3JjZUF2ZXJhZ2V8fGYuYXZlcmFnZSxHPWguY3VycmVuY3lQb3NpdGlvbnx8ZC5wb3NpdGlv''@;'; put 'put ''bixpZT1oLmN1cnJlbmN5U3ltYm9sfHxkLnN5bWJvbDtjb25zdCB1ZT12b2lkIDAhPT1mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k/Zi5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5OmYuc3BhY2VTZXBhcmF0ZWQ7dm9pZCAwPT09aC5sb3dQcmVjaXNpb24mJihoLmxvd1ByZWNpc2lvbj0hMSksdWUm''@;'; put 'put ''JihNPSIgIiksImluZml4Ij09PUcmJih2PU0raWUrTSk7bGV0IHllPWxUKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omgsc3RhdGU6YSxkZWNpbWFsU2VwYXJhdG9yOnZ9KTtyZXR1cm4icHJlZml4Ij09PUcmJih5ZT1jLl92YWx1ZTwwJiYic2lnbiI9PT1mLm5lZ2F0aXZlP2AtJHtNfSR7''@;'; put 'put ''aWV9JHt5ZS5zbGljZSgxKX1gOmMuX3ZhbHVlPjAmJmYuZm9yY2VTaWduP2ArJHtNfSR7aWV9JHt5ZS5zbGljZSgxKX1gOmllK00reWUpLCghR3x8InBvc3RmaXgiPT09RykmJihNPSFmLnNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uJiZJPyIiOk0seWU9eWUrTStpZSkseWV9KGMsbD1PXyhs''@;'; put 'put ''LGYzLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSksZjMpO2Nhc2UicGVyY2VudCI6cmV0dXJuIGZ1bmN0aW9uIEVvdChjLGwsYSxkKXtsZXQgaD1sLnByZWZpeFN5bWJvbCxmPWxUKHtpbnN0YW5jZTpkKDEwMCpjLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1P''@;'; put 'put ''YmplY3QuYXNzaWduKHt9LHNULGwpO3JldHVybiBoP2AlJHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke2Z9YDpgJHtmfSR7di5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCgpKSxmMyxhKTtjYXNlImJ5dGUiOnJl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBTb3QoYyxsLGEsZCl7bGV0IGg9bC5iYXNlfHwiYmluYXJ5IixmPU9iamVjdC5hc3NpZ24oe30sc1QsbCk7Y29uc3R7YmluYXJ5U3VmZml4ZXM6dixkZWNpbWFsU3VmZml4ZXM6TX09YS5jdXJyZW50Qnl0ZXMoKTtsZXQgRz17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZm''@;'; put 'put ''aXhlczpNfHxZUCxtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOnZ8fGQ0ZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6TXx8WVAsbWFya2VyOiJkIn19W2hdLHt2YWx1ZTppZSxzdWZmaXg6dWV9PUdQKGMuX3ZhbHVlLEcuc3VmZml4ZXMs''@;'; put 'put ''Ry5zY2FsZSk7cmV0dXJuYCR7bFQoe2luc3RhbmNlOmQoaWUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YSxkZWZhdWx0czphLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCgpfSl9JHtmLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke3VlfWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRCeXRlRGVmYXVs''@;'; put 'put ''dEZvcm1hdCgpKSxmMyxhKTtjYXNlInRpbWUiOnJldHVybiBsPU9fKGwsZjMuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0KCkpLGZ1bmN0aW9uIHhvdChjKXtsZXQgbD1NYXRoLmZsb29yKGMuX3ZhbHVlLzYwLzYwKSxhPU1hdGguZmxvb3IoKGMuX3ZhbHVlLTYwKmwqNjApLzYwKSxkPU1hdGgu''@;'; put 'put ''cm91bmQoYy5fdmFsdWUtNjAqbCo2MC02MCphKTtyZXR1cm5gJHtsfToke2E8MTA/IjAiOiIifSR7YX06JHtkPDEwPyIwIjoiIn0ke2R9YH0oYyk7Y2FzZSJvcmRpbmFsIjpyZXR1cm4gZnVuY3Rpb24gTW90KGMsbCxhKXtsZXQgZD1hLmN1cnJlbnRPcmRpbmFsKCksaD1PYmplY3QuYXNzaWdu''@;'; put 'put ''KHt9LHNULGwpLGY9bFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphfSksdj1kKGMuX3ZhbHVlKTtyZXR1cm5gJHtmfSR7aC5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHt2fWB9KGMsbD1PXyhsLGYzLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdCgpKSxmMyk7ZGVmYXVs''@;'; put 'put ''dDpyZXR1cm4gbFQoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxudW1icm86YX0pfX0oYyxsLGEpO3JldHVybiB2PWZ1bmN0aW9uIE5vdChjLGwpe3JldHVybiBsK2N9KHYsaCksdj1mdW5jdGlvbiBWb3QoYyxsKXtyZXR1cm4gYytsfSh2LGYpLHZ9KC4uLmwsYyksZ2V0Qnl0ZVVuaXQ6''@;'; put 'put ''KC4uLmwpPT5mdW5jdGlvbiBDb3QoYyl7bGV0IGw9aUouZ2VuZXJhbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0QmluYXJ5Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiB3b3QoYyl7bGV0IGw9aUouYmluYXJ5O3JldHVybiBHUChj''@;'; put 'put ''Ll92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxnZXREZWNpbWFsQnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBfb3QoYyl7bGV0IGw9aUouZGVjaW1hbDtyZXR1cm4gR1AoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZm9ybWF0''@;'; put 'put ''T3JEZWZhdWx0Ok9ffSkpKGN1KSxsOT0oYz0+KHthZGQ6KGwsYSk9PmZ1bmN0aW9uIGpvdChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnBsdXMoaCkudG9OdW1iZXIoKSxj''@;'; put 'put ''fShsLGEsYyksc3VidHJhY3Q6KGwsYSk9Pmg0ZShsLGEsYyksbXVsdGlwbHk6KGwsYSk9PmZ1bmN0aW9uIHpvdChjLGwsYSl7bGV0IGQ9bmV3IERnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBEZyhoKSxjLl92YWx1ZT1kLnRpbWVzKGgp''@;'; put 'put ''LnRvTnVtYmVyKCksY30obCxhLGMpLGRpdmlkZToobCxhKT0+ZnVuY3Rpb24gVW90KGMsbCxhKXtsZXQgZD1uZXcgRGcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IERnKGgpLGMuX3ZhbHVlPWQuZGl2aWRlZEJ5KGgpLnRvTnVtYmVyKCks''@;'; put 'put ''Y30obCxhLGMpLHNldDoobCxhKT0+ZnVuY3Rpb24gWm90KGMsbCxhKXtsZXQgZD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoZD1sLl92YWx1ZSksYy5fdmFsdWU9ZCxjfShsLGEsYyksZGlmZmVyZW5jZToobCxhKT0+ZnVuY3Rpb24gV290KGMsbCxhKXtsZXQgZD1hKGMuX3ZhbHVlKTtyZXR1''@;'; put 'put ''cm4gaDRlKGQsbCxhKSxNYXRoLmFicyhkLl92YWx1ZSl9KGwsYSxjKSxCaWdOdW1iZXI6RGd9KSkoY3UpO2NvbnN0IFhvdD10SjtjbGFzcyBmNGV7Y29uc3RydWN0b3IobCl7dGhpcy5fdmFsdWU9bH1jbG9uZSgpe3JldHVybiBjdSh0aGlzLl92YWx1ZSl9Zm9ybWF0KGw9e30pe3JldHVybiBz''@;'; put 'put ''OS5mb3JtYXQodGhpcyxsKX1mb3JtYXRDdXJyZW5jeShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJihsPVhvdC5wYXJzZUZvcm1hdChsKSksKGw9czkuZm9ybWF0T3JEZWZhdWx0KGwsVnAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PSJjdXJyZW5jeSIsczku''@;'; put 'put ''Zm9ybWF0KHRoaXMsbCl9Zm9ybWF0VGltZShsPXt9KXtyZXR1cm4gbC5vdXRwdXQ9InRpbWUiLHM5LmZvcm1hdCh0aGlzLGwpfWJpbmFyeUJ5dGVVbml0cygpe3JldHVybiBzOS5nZXRCaW5hcnlCeXRlVW5pdCh0aGlzKX1kZWNpbWFsQnl0ZVVuaXRzKCl7cmV0dXJuIHM5LmdldERlY2ltYWxC''@;'; put 'put ''eXRlVW5pdCh0aGlzKX1ieXRlVW5pdHMoKXtyZXR1cm4gczkuZ2V0Qnl0ZVVuaXQodGhpcyl9ZGlmZmVyZW5jZShsKXtyZXR1cm4gbDkuZGlmZmVyZW5jZSh0aGlzLGwpfWFkZChsKXtyZXR1cm4gbDkuYWRkKHRoaXMsbCl9c3VidHJhY3QobCl7cmV0dXJuIGw5LnN1YnRyYWN0KHRoaXMsbCl9''@;'; put 'put ''bXVsdGlwbHkobCl7cmV0dXJuIGw5Lm11bHRpcGx5KHRoaXMsbCl9ZGl2aWRlKGwpe3JldHVybiBsOS5kaXZpZGUodGhpcyxsKX1zZXQobCl7cmV0dXJuIGw5LnNldCh0aGlzLHA0ZShsKSl9dmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9dmFsdWVPZigpe3JldHVybiB0aGlzLl92YWx1ZX19''@;'; put 'put ''ZnVuY3Rpb24gcDRlKGMpe2xldCBsPWM7cmV0dXJuIGN1LmlzTnVtYnJvKGMpP2w9Yy5fdmFsdWU6InN0cmluZyI9PXR5cGVvZiBjP2w9Y3UudW5mb3JtYXQoYyk6aXNOYU4oYykmJihsPU5hTiksbH1mdW5jdGlvbiBjdShjKXtyZXR1cm4gbmV3IGY0ZShwNGUoYykpfWN1LnZlcnNpb249IjIu''@;'; put 'put ''NS4wIixjdS5pc051bWJybz1mdW5jdGlvbihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGY0ZX0sY3UubGFuZ3VhZ2U9VnAuY3VycmVudExhbmd1YWdlLGN1LnJlZ2lzdGVyTGFuZ3VhZ2U9VnAucmVnaXN0ZXJMYW5ndWFnZSxjdS5zZXRMYW5ndWFnZT1WcC5zZXRMYW5ndWFnZSxjdS5sYW5ndWFn''@;'; put 'put ''ZXM9VnAubGFuZ3VhZ2VzLGN1Lmxhbmd1YWdlRGF0YT1WcC5sYW5ndWFnZURhdGEsY3UuemVyb0Zvcm1hdD1WcC5zZXRaZXJvRm9ybWF0LGN1LmRlZmF1bHRGb3JtYXQ9VnAuY3VycmVudERlZmF1bHRzLGN1LnNldERlZmF1bHRzPVZwLnNldERlZmF1bHRzLGN1LmRlZmF1bHRDdXJyZW5jeUZv''@;'; put 'put ''cm1hdD1WcC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0LGN1LnZhbGlkYXRlPSRvdC52YWxpZGF0ZSxjdS5sb2FkTGFuZ3VhZ2VzSW5Ob2RlPUtvdC5sb2FkTGFuZ3VhZ2VzSW5Ob2RlLGN1LnVuZm9ybWF0PXFvdC51bmZvcm1hdCxjdS5CaWdOdW1iZXI9bDkuQmlnTnVtYmVyO3ZhciAk''@;'; put 'put ''bT0kYXQoY3UpO2Z1bmN0aW9uIGc0ZShjLGwpe2lmKG0xKGMpKXtjb25zdCBhPWwubnVtZXJpY0Zvcm1hdCxkPWEmJmEuY3VsdHVyZXx8Ii0iLGg9YSYmYS5wYXR0ZXJuO2lmKHR5cGVvZiBkPCJ1IiYmISRtLmxhbmd1YWdlcygpW2RdKXtjb25zdCBmPWQucmVwbGFjZSgiLSIsIiIpLHY9JG0u''@;'; put 'put ''YWxsTGFuZ3VhZ2VzPyRtLmFsbExhbmd1YWdlc1tkXTokbVtmXTt2JiYkbS5yZWdpc3Rlckxhbmd1YWdlKHYpfSRtLnNldExhbmd1YWdlKGQpLGM9JG0oYykuZm9ybWF0KGh8fCIwIil9cmV0dXJuIGN9ZnVuY3Rpb24gYUooYyxsLGEsZCxoLGYsdil7bGV0IE09ZjtpZihtMShNKSl7bGV0IEc9''@;'; put 'put ''W107aWYoQXJyYXkuaXNBcnJheSh2LmNsYXNzTmFtZSkpRz12LmNsYXNzTmFtZTtlbHNle3ZhciBJO2NvbnN0IGllPW51bGwhPT0oST12LmNsYXNzTmFtZSkmJnZvaWQgMCE9PUk/SToiIjtpZS5sZW5ndGgmJihHPWllLnNwbGl0KCIgIikpfU09ZzRlKE0sdiksRy5pbmRleE9mKCJodExlZnQi''@;'; put 'put ''KTwwJiZHLmluZGV4T2YoImh0Q2VudGVyIik8MCYmRy5pbmRleE9mKCJodFJpZ2h0Iik8MCYmRy5pbmRleE9mKCJodEp1c3RpZnkiKTwwJiZHLnB1c2goImh0UmlnaHQiKSxHLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJkcucHVzaCgiaHROdW1lcmljIiksdi5jbGFzc05hbWU9Ry5qb2luKCIg''@;'; put 'put ''IiksbC5kaXI9Imx0ciJ9QWcoYyxsLGEsZCxoLE0sdil9ZnVuY3Rpb24gb0ooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pO2NvbnN0IEk9di5oYXNoU3ltYm9sfHwiKiI7bGV0IEc9IiI7R2EoKHYuaGFzaExlbmd0aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0x''@;'; put 'put ''LCgpPT57Rys9SX0pLHo3KGwsRyl9ZnVuY3Rpb24gc0ooYyxsLGEsZCxoLGYsdil7QWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWZ1bmN0aW9uIGxKKGMsbCxhLGQsaCxmLHYpe0FnLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxsLmRpcj0ibHRyIn1mdW5jdGlvbiBjVChjLGwp''@;'; put 'put ''e2xldCBhPWM7bnVsbD09YSYmKGE9IiIpLHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1hP2woITApOnRoaXMuc3RyaWN0JiZ0aGlzLnNvdXJjZT8iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zb3VyY2U/dGhpcy5zb3VyY2UoYSxtNGUoYSxsKSk6bTRlKGEsbCkodGhpcy5zb3VyY2UpOmwoITApfWZ1''@;'; put 'put ''bmN0aW9uIG00ZShjLGwpe2NvbnN0IGE9YztyZXR1cm4gZnVuY3Rpb24oZCl7bGV0IGg9ITE7Zm9yKGxldCBmPTAsdj1kLmxlbmd0aDtmPHY7ZisrKWlmKGE9PT1kW2ZdKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIHY0ZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihu''@;'; put 'put ''ZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShsLmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBLUChjLGwpe2NvbnN0IGE9aGZlKFlwZSx0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBm''@;'; put 'put ''PU9vKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEwKS5pc1ZhbGlkKCksdj1PbyhuZXcgRGF0ZShkKSkuaXNWYWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYodj0hMCxmPSEwKSx2fHwoaD0hMSksIXYmJmYmJihoPSEwKSx2JiYhZilpZighMD09''@;'; put 'put ''PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgTT1mdW5jdGlvbiBvc3QoYyxsKXtjb25zdCBhPU9vKHY0ZShjKSksZD1PbyhjLGwpLGg9Yy5zZWFyY2goL1tBLVphLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQu''@;'; put 'put ''aXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxNLCJkYXRlVmFsaWRhdG9yIiksaD0hMH1lbHNlIGg9ITE7bChoKX1mdW5jdGlvbiBjSihjLGwpe2NU''@;'; put 'put ''LmFwcGx5KHRoaXMsW2MsbF0pfWZ1bmN0aW9uIHVKKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmbTEoYykpfWFKLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLG9KLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixzSi5S''@;'; put 'put ''RU5ERVJFUl9UWVBFPSJzZWxlY3QiLGxKLlJFTkRFUkVSX1RZUEU9InRpbWUiLGNULlZBTElEQVRPUl9UWVBFPSJhdXRvY29tcGxldGUiLEtQLlZBTElEQVRPUl9UWVBFPSJkYXRlIixjSi5WQUxJREFUT1JfVFlQRT0iZHJvcGRvd24iLHVKLlZBTElEQVRPUl9UWVBFPSJudW1lcmljIjtjb25z''@;'; put 'put ''dCBjc3Q9WyJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1oiLCJYIiwieCJdO2Z1bmN0aW9uIHFQKGMsbCl7Y29uc3QgYT10aGlzLnRpbWVGb3JtYXR8fCJoOm1tOnNzIGEiO2xldCBkPSEwLGg9YztudWxsPT09aCYmKGg9IiIpLGg9L15cZHszLH0kLy50ZXN0KGgpP3BhcnNlSW50KGgsMTApOmg7''@;'; put 'put ''Y29uc3QgZj0vXlxkezEsMn0kLy50ZXN0KGgpO2YmJihoKz0iOjAwIik7Y29uc3Qgdj1PbyhoLGNzdCwhMCkuaXNWYWxpZCgpP09vKGgpOk9vKGgsYSk7bGV0IE09di5pc1ZhbGlkKCksST1PbyhoLGEsITApLmlzVmFsaWQoKSYmIWY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWgmJihNPSEw''@;'; put 'put ''LEk9ITApLE18fChkPSExKSwhTSYmSSYmKGQ9ITApLE0mJiFJKWlmKCEwPT09dGhpcy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBHPXYuZm9ybWF0KGEpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxHLCJ0aW1lVmFsaWRhdG9yIiksZD0h''@;'; put 'put ''MH1lbHNlIGQ9ITE7bChkKX1xUC5WQUxJREFUT1JfVFlQRT0idGltZSI7Y29uc3QgaHN0PXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOkhYLHJlbmRlcmVyOklfLHZhbGlkYXRvcjpjVH0sZnN0PXtDRUxMX1RZUEU6ImNoZWNrYm94IixlZGl0b3I6QnBlLHJlbmRlcmVyOiRYfTtm''@;'; put 'put ''dW5jdGlvbiB5NGUoYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfXk0ZS5SRU5ERVJFUl9UWVBFPSJkYXRlIjtjb25zdCBnc3Q9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9yOiRwZSxyZW5kZXJlcjp5NGUsdmFsaWRhdG9yOktQfSxtc3Q9e0NFTExfVFlQRToi''@;'; put 'put ''ZHJvcGRvd24iLGVkaXRvcjpLcGUscmVuZGVyZXI6R1gsdmFsaWRhdG9yOmNKLGZpbHRlcjohMSxzdHJpY3Q6ITB9LHZzdD17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpSWCxyZW5kZXJlcjpxWH0seXN0PXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpxcGUscmVuZGVyZXI6''@;'; put 'put ''YUosdmFsaWRhdG9yOnVKLGRhdGFUeXBlOiJudW1iZXIifSxic3Q9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjpYcGUscmVuZGVyZXI6b0osY29weWFibGU6ITF9LF9zdD17Q0VMTF9UWVBFOiJzZWxlY3QiLGVkaXRvcjpRcGUscmVuZGVyZXI6c0p9LHdzdD17Q0VMTF9UWVBFOiJ0aW1l''@;'; put 'put ''IixlZGl0b3I6ZTRlLHJlbmRlcmVyOmxKLHZhbGlkYXRvcjpxUH07ZnVuY3Rpb24gYjRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQ''@;'; put 'put ''XyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEVzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRl8oYyxsKXtyZXR1cm4gYy5nZXQoXzRlKGMsbCkpfWZ1bmN0aW9uIF80''@;'; put 'put ''ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdzRlPW5ldyBNYXAo''@;'; put 'put ''W1sicGx1Z2luIixmdW5jdGlvbiBvSmUoYyl7cmV0dXJuISFJRShjKX1dLFsiY2VsbC10eXBlIixhcGVdLFsiZWRpdG9yIixkZmVdLFsicmVuZGVyZXIiLFNmZV0sWyJ2YWxpZGF0b3IiLE1mZV1dKSxDNGU9U3ltYm9sKCJtYWluU2V0dGluZyIpLFhQPVtdO2xldCBjOT1udWxsO3ZhciB1OT1u''@;'; put 'put ''ZXcgV2Vha01hcCxTNGU9bmV3IFdlYWtTZXQ7Y2xhc3MgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImJhc2UifXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RoaXMuUExVR0lOX0tFWV19c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue319Y29u''@;'; put 'put ''c3RydWN0b3IobCl7KGZ1bmN0aW9uIFNzdChjLGwpe2I0ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxTNGUpLFBfKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGoyKHRoaXMpKSxQXyh0aGlzLCJwbHVnaW5OYW1lIixudWxsKSxQXyh0aGlzLCJwbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MiLFtd''@;'; put 'put ''KSxQXyh0aGlzLCJpc1BsdWdpbnNSZWFkeSIsITEpLFBfKHRoaXMsImVuYWJsZWQiLCExKSxQXyh0aGlzLCJpbml0aWFsaXplZCIsITEpLGZ1bmN0aW9uIE1zdChjLGwsYSl7YjRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyx1OSx7fSksVHAodGhpcywiaG90IixsLHt3cml0YWJsZTohMX0pLGM5''@;'; put 'put ''PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT50aGlzLm9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYT0+dGhpcy5vblVwZGF0ZVNldHRpbmdzKGEpKSx0aGlzLmhvdC5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVJbml0IiwoKT0+dGhpcy5pbml0KCkpfWluaXQoKXt0aGlzLnBsdWdpbk5hbWU9dGhpcy5ob3QuZ2V0UGx1Z2luTmFtZSh0aGlzKTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuUExVR0lOX0RFUFMsYT1BcnJheS5pc0FycmF5KGwpP2w6W107aWYoYS5sZW5ndGg+MCl7''@;'; put 'put ''Y29uc3QgaD1bXTtpZihhLmZvckVhY2goZj0+e2NvbnN0W3YsTV09Zi5zcGxpdCgiOiIpO2lmKCF3NGUuaGFzKHYpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwbHVnaW4gZGVwZW5kZW5jeSB0eXBlICIke3Z9IiB3YXMgZm91bmQuYCk7dzRlLmdldCh2KShNKXx8aC5wdXNoKGAgLSAke019''@;'; put 'put ''ICgke3Z9KWApfSksaC5sZW5ndGg+MCl7Y29uc3QgZj1bYFRoZSAke3RoaXMucGx1Z2luTmFtZX0gcGx1Z2luIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbW9kdWxlczpcbmAsYCR7aC5qb2luKCJcbiIpfVxuYF0uam9pbigiIik7WFAucHVzaChmKX19aWYoYzl8fChjOT1uSygpKSxjOS5pbmRl''@;'; put 'put ''eE9mKHRoaXMucGx1Z2luTmFtZSk+PTAmJmM5LnNwbGljZShjOS5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSksMSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+e3RoaXMuaXNFbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpfSksMD09PWM5Lmxlbmd0aCl7aWYoWFAubGVuZ3RoPjApe2NvbnN0IGg9W2Ake1hQLmpvaW4oIlxuIil9XG5gLCJZb3UgaGF2ZSB0byBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZW0gbWFudWFsbHkuIl0uam9pbigiIik7dGhyb3cgWFAubGVuZ3RoPTAsbmV3IEVycm9yKGgpfXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIpfXRoaXMuaW5pdGlhbGl6ZWQ9ITB9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkPSEwfWRpc2FibGVQbHVnaW4oKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmNsZWFyKCks''@;'; put 'put ''dGhpcy5jbGVhckhvb2tzKCksdGhpcy5lbmFibGVkPSExfWdldFNldHRpbmcobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV07aWYodm9pZCAwPT09bClyZXR1cm4gYTtjb25zdCBkPXRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9T''@;'; put 'put ''RVRUSU5HUzt2YXIgaCxmO3JldHVybihBcnJheS5pc0FycmF5KGEpfHxxbyhhKSkmJmRbQzRlXT09PWw/QXJyYXkuaXNBcnJheShhKT9hOm51bGwhPT0oaD1hW2xdKSYmdm9pZCAwIT09aD9oOmRbbF06cW8oYSkmJm51bGwhPT0oZj1hW2xdKSYmdm9pZCAwIT09Zj9mOmRbbF19YWRkSG9vayhs''@;'; put 'put ''LGEsZCl7Rl8odTksdGhpcylbbF09Rl8odTksdGhpcylbbF18fFtdO2NvbnN0IGg9Rl8odTksdGhpcylbbF07dGhpcy5ob3QuYWRkSG9vayhsLGEsZCksaC5wdXNoKGEpLEZfKHU5LHRoaXMpW2xdPWh9cmVtb3ZlSG9va3MobCl7WW4oRl8odTksdGhpcylbbF18fFtdLGE9Pnt0aGlzLmhvdC5y''@;'; put 'put ''ZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3QgbD1GXyh1OSx0aGlzKTtYbyhsLChhLGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBsdWdpbnNJbml0aWFsaXplZENh''@;'; put 'put ''bGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtZbih0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVhZHk9ITB9b25VcGRhdGVTZXR0''@;'; put 'put ''aW5ncyhsKXtjb25zdCBhPV80ZShTNGUsdGhpcyxBc3QpLmNhbGwodGhpcyxsKTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1''@;'; put 'put ''Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZhJiZ0aGlzLnVwZGF0ZVBsdWdpbihsKSl9dXBkYXRlUGx1Z2luKCl7fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5ldmVudE1hbmFnZXIpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3Mo''@;'; put 'put ''KSxYbyh0aGlzLChhLGQpPT57ImhvdCIhPT1kJiYodGhpc1tkXT1udWxsKX0pLGRlbGV0ZSB0aGlzLnQsZGVsZXRlIHRoaXMuaG90fX1mdW5jdGlvbiBBc3QoYyl7aWYoIWMpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlNFVFRJTkdfS0VZUztpZigiYm9vbGVhbiI9PXR5cGVv''@;'; put 'put ''ZiBsKXJldHVybiBsO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWlmKHZvaWQgMCE9PWNbbFthXV0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtzdChjKXt2YXIgbD1mdW5jdGlvbiBEc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGRKPWNsYXNzIElzdHtjb25zdHJ1Y3RvcihsKXtkOSh0aGlzLCJob3QiLG51bGwpLGQ5KHRoaXMsImNvbnRhaW5lciIsbnVsbCksZDkodGhpcywiaW5qZWN0ZWQiLCExKSxkOSh0aGlzLCJyb3dzIixbXSksZDkodGhp''@;'; put 'put ''cywiY29sdW1ucyIsW10pLGQ5KHRoaXMsInNhbXBsZXMiLG51bGwpLGQ5KHRoaXMsInNldHRpbmdzIix7dXNlSGVhZGVyczohMH0pLHRoaXMuaG90PWx9YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1l''@;'; put 'put ''bnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10''@;'; put 'put ''aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbChsKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksMD09PWwmJlRpKHRoaXMudGFi''@;'; put 'put ''bGUudGFibGUsImh0R2hvc3RUYWJsZUZpcnN0Um93IiksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhl''@;'; put 'put ''YWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50''@;'; put 'put ''YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQu''@;'; put 'put ''dGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0''@;'; put 'put ''ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5n''@;'; put 'put ''KCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2wobCkpLHRoaXMuY29udGFp''@;'; put 'put ''bmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9Z2V0SGVpZ2h0cyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5yb3dzLGE9Pntjb25zdHtoZWlnaHQ6ZH09YS50YWJsZS5nZXRC''@;'; put 'put ''b3VuZGluZ0NsaWVudFJlY3QoKTtsKGEucm93LE1hdGguY2VpbChkKSl9KX1nZXRXaWR0aHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLFluKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29s''@;'; put 'put ''LE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGluZyhsLGEpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2wobCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmEuYXBwZW5kQ2hp''@;'; put 'put ''bGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0xLC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZD0+e1luKGQuc3RyaW5ncyxoPT57YS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoaC5jb2wsbCkpfSl9KSxhfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhp''@;'; put 'put ''cy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFj''@;'; put 'put ''aChmPT57WW4oZi5zdHJpbmdzLHY9Pntjb25zdCBNPXYuY29sLEk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxNKSxHPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihJKSxpZT1hLmNyZWF0ZUVsZW1lbnQoInRkIik7aWUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksRyh0aGlzLmhvdCxp''@;'; put 'put ''ZSxsLE0sdGhpcy5ob3QuY29sVG9Qcm9wKE0pLHYudmFsdWUsSSksZC5hcHBlbmRDaGlsZChpZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3Qu''@;'; put 'put ''aGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goWy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntZbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5jb2wsTT1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNo''@;'; put 'put ''KFt2LE1dKSxhLmFwcGVuZENoaWxkKE0pfSl9KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGEpLFluKGQsaD0+e2NvbnN0W2Ysdl09aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLHYpfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxk''@;'; put 'put ''PWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57WW4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYucm93LE09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixsKSxJPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihNKSxHPWEuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgidGQiKSxpZT1hLmNyZWF0ZUVsZW1lbnQoInRyIik7Ry5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxJKHRoaXMuaG90LEcsdixsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLE0pLGllLmFwcGVuZENoaWxkKEcpLGQuYXBwZW5kQ2hpbGQoaWUpfSl9KSxkfWNsZWFuKCl7''@;'; put 'put ''dGhpcy5yb3dzLmxlbmd0aD0wLHRoaXMucm93c1stMV09dm9pZCAwLHRoaXMuY29sdW1ucy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMmJnRoaXMuc2FtcGxlcy5jbGVhcigpLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMucmVtb3ZlVGFibGUoKX1pbmplY3RUYWJsZSgpe3RoaXMuaW5qZWN0ZWR8fCgo''@;'; put 'put ''KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKXx8dGhpcy5ob3Qucm9vdEVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyLmZyYWdtZW50KSx0aGlzLmluamVjdGVkPSEwKX1yZW1vdmVUYWJsZSgpe3RoaXMuaW5qZWN0''@;'; put 'put ''ZWQmJnRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlJiYodGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEpfWNyZWF0ZUNvbEVs''@;'; put 'put ''ZW1lbnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtsZXQgaD0wO2E+PTAmJmw+PTAmJihoPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbCkuY29sc3Bhbik7bGV0IGY9dGhpcy5ob3QuZ2V0Q29sV2lkdGgobCk7aWYoaD4xKWZvcihsZXQg''@;'; put 'put ''dj1sKzE7djxsK2g7disrKWYrPXRoaXMuaG90LmdldENvbFdpZHRoKHYpO3JldHVybiBkLnN0eWxlLndpZHRoPWAke2Z9cHhgLGR9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERv''@;'; put 'put ''Y3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdj1hLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksTT1hLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksST1hLmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoInRyIiksRz1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbCgpJiZoLmFwcGVuZENoaWxkKE0pLHRoaXMuaXNIb3Jpem9udGFsKCkmJihJLmFwcGVuZENoaWxkKEcpLGYuYXBwZW5kQ2hpbGQoSSksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0''@;'; put 'put ''byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJnYuYXBwZW5kQ2hpbGQoSSksaC5hcHBlbmRDaGlsZCh2KSxUaShoLGwpLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5OnYsY29sR3JvdXA6''@;'; put 'put ''TSx0cjpJLHRoOkd9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgpe3JldHVybiEoIXRoaXMucm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5n''@;'; put 'put ''dGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07ZnVuY3Rpb24gSlAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJzdChjKXt2YXIgbD1mdW5jdGlvbiBMc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs''@;'; put 'put ''ZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGhKe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0dXJuIDN9Y29uc3RydWN0b3IobCl7SlAodGhpcywic2FtcGxlcyIsbnVsbCksSlAodGhpcywiZGF0YUZhY3RvcnkiLG51bGwpLEpQKHRoaXMsImN1c3RvbVNhbXBsZUNvdW50''@;'; put 'put ''IixudWxsKSxKUCh0aGlzLCJhbGxvd0R1cGxpY2F0ZXMiLCExKSx0aGlzLmRhdGFGYWN0b3J5PWx9Z2V0U2FtcGxlQ291bnQoKXtyZXR1cm4gdGhpcy5jdXN0b21TYW1wbGVDb3VudD90aGlzLmN1c3RvbVNhbXBsZUNvdW50OmhKLlNBTVBMRV9DT1VOVH1zZXRTYW1wbGVDb3VudChsKXt0aGlz''@;'; put 'put ''LmN1c3RvbVNhbXBsZUNvdW50PWx9c2V0QWxsb3dEdXBsaWNhdGVzKGwpe3RoaXMuYWxsb3dEdXBsaWNhdGVzPWx9Z2VuZXJhdGVSb3dTYW1wbGVzKGwsYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVTYW1wbGVzKCJyb3ciLGEsbCl9Z2VuZXJhdGVDb2x1bW5TYW1wbGVzKGwsYSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2VuZXJhdGVTYW1wbGVzKCJjb2wiLGEsbCl9Z2VuZXJhdGVTYW1wbGVzKGwsYSxkKXtjb25zdCBoPW5ldyBNYXAse2Zyb206Zix0bzp2fT0ibnVtYmVyIj09dHlwZW9mIGQ/e2Zyb206ZCx0bzpkfTpkO3JldHVybiBHYShmLHYsTT0+e2NvbnN0IEk9dGhpcy5nZW5lcmF0ZVNhbXBsZShs''@;'; put 'put ''LGEsTSk7aC5zZXQoTSxJKX0pLGh9Z2VuZXJhdGVTYW1wbGUobCxhLGQpe2lmKCJyb3ciIT09bCYmImNvbCIhPT1sKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2FtcGxlIHR5cGUiKTtjb25zdCBoPW5ldyBNYXAsZj0icm93Ij09PWw/ImNvbCI6InJvdyIsdj1bXTtyZXR1cm4gR2Eo''@;'; put 'put ''YS5mcm9tLGEudG8sTT0+e2NvbnN0IEk9InJvdyI9PT1sP3RoaXMuZGF0YUZhY3RvcnkoZCxNKTp0aGlzLmRhdGFGYWN0b3J5KE0sZCk7aWYoITE9PT1JKXJldHVybjtjb25zdHt2YWx1ZTpHLGJ1bmRsZVNlZWQ6aWV9PUksdWU9InN0cmluZyI9PXR5cGVvZiBpZSYmaWUubGVuZ3RoPjA7bGV0''@;'; put 'put ''IHllO3llPXVlP2llOnFvKEcpP2Ake09iamVjdC5rZXlzKEcpLmxlbmd0aH1gOkFycmF5LmlzQXJyYXkoRyk/YCR7Ry5sZW5ndGh9YDpgJHtsYyhHKS5sZW5ndGh9YCxoLmhhcyh5ZSl8fGguc2V0KHllLHtuZWVkZWQ6dGhpcy5nZXRTYW1wbGVDb3VudCgpLHN0cmluZ3M6W119KTtjb25zdCBF''@;'; put 'put ''ZT1oLmdldCh5ZSk7RWUubmVlZGVkJiYoISh2LmluZGV4T2YoRyk+LTEpfHx0aGlzLmFsbG93RHVwbGljYXRlc3x8dWUpJiYoRWUuc3RyaW5ncy5wdXNoKHt2YWx1ZTpHLFtmXTpNfSksdi5wdXNoKEcpLEVlLm5lZWRlZC09MSl9KSxofX1jb25zdCBNNGU9aEo7ZnVuY3Rpb24gZkooYyxsLGEp''@;'; put 'put ''e3g0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geDRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1VChjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gUHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEZzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gS20oYyxsKXtyZXR1cm4gYy5nZXQoemQoYyxsKSl9ZnVuY3Rpb24gUVAoYyxsLGEpe3JldHVybiBjLnNl''@;'; put 'put ''dCh6ZChjLGwpLGEpLGF9ZnVuY3Rpb24gemQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i''@;'; put 'put ''amVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKTtjb25zdCBwSj0iYXV0b0NvbHVtblNpemUiO3ZhciBnSj1uZXcgV2Vha01hcCxIXz1uZXcgV2Vha01hcCxOXz1uZXcgV2Vha01hcCxPaD1uZXcgV2Vha1NldDtjbGFzcyBkVCBleHRl''@;'; put 'put ''bmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBwSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEw''@;'; put 'put ''LHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24g''@;'; put 'put ''T3N0KGMsbCl7eDRlKGMsbCksbC5hZGQoYyl9KHRoaXMsT2gpLHVUKHRoaXMsImdob3N0VGFibGUiLG5ldyBkSih0aGlzLmhvdCkpLHVUKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBNNGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKSlyZXR1cm4hMTtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGEsZCk7bGV0IE09IiI7di5zcGFubmVkfHwoTT10''@;'; put 'put ''aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCkpO2xldCBJPSIiO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKSYmKEk9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsSSx2LE0pKSx7dmFsdWU6TSxidW5kbGVTZWVk''@;'; put 'put ''Okl9fSkpLHVUKHRoaXMsImluUHJvZ3Jlc3MiLCExKSx1VCh0aGlzLCJtZWFzdXJlZENvbHVtbnMiLDApLHVUKHRoaXMsImNvbHVtbldpZHRoc01hcCIsbmV3IFptKSxmSih0aGlzLGdKLCExKSxmSih0aGlzLEhfLFtdKSxmSih0aGlzLE5fLFtdKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5yZWdpc3Rlck1hcCgiYXV0b0NvbHVtblNpemUiLHRoaXMuY29sdW1uV2lkdGhzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGEsZCxoKT0+emQoT2gsdGhpcyxBNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe3JldHVybiExIT09dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKVtwSl0mJiF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmNvbFdpZHRoc31lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVy''@;'; put 'put ''cyIpKSx0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iu''@;'; put 'put ''c2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gemQoT2gsbCxqc3QpLmNh''@;'; put 'put ''bGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLHpzdCkuY2FsbChsLC4uLmgpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLFpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT56ZChPaCx0aGlzLEJzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+emQoT2gsdGhpcyxVc3QpLmNhbGwodGhp''@;'; put 'put ''cykpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe1FQKE5fLHRoaXMsdGhpcy5maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQpPT56ZChPaCx0aGlzLEE0ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLGE9''@;'; put 'put ''dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpsLHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0s''@;'; put 'put ''ZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7R2EoaC5mcm9tLGgudG8sdj0+e2xldCBNPXRo''@;'; put 'put ''aXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pJiYhdGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKE0pKSYmemQoT2gsdGhpcyxFNGUpLmNhbGwodGhpcyx2LGYp''@;'; put 'put ''fSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyksdGhpcy5tZWFzdXJlZENvbHVtbnM9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRDb2xzKCkt''@;'; put 'put ''MTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBURShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpNYXRoLm1pbihkK2RULkNBTENVTEFUSU9OX1NURVAs''@;'; put 'put ''aCl9LGwsYSksZD1kK2RULkNBTENVTEFUSU9OX1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVD''@;'; put 'put ''b2x1bW5zV2lkdGgoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOnRoaXMuaW5Qcm9ncmVzcz0hMX1yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86dGhp''@;'; put 'put ''cy5ob3QuY291bnRSb3dzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BKXTtsZXQgYT1kVC5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtyZXR1cm4gcW8obCkmJihh''@;'; put 'put ''PWwuc3luY0xpbWl0LGYkKGEpP2E9SiQoZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRDb2x1bW5XaWR0aChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlz''@;'; put 'put ''LmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLF9fKSkpLGh9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5n''@;'; put 'put ''ZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9ZmluZENvbHVtbnNX''@;'; put 'put ''aGVyZUhlYWRlcldhc0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkucmVkdWNlKChkLGgsZik9Pntjb25zdCB2PUttKEhfLHRoaXMpLmxlbmd0aDtyZXR1cm4odi0xPGZ8fEttKEhfLHRoaXMpW2ZdIT09aCkmJmQucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihm''@;'; put 'put ''KSksdi0xPGY/S20oSF8sdGhpcykucHVzaChoKTpLbShIXyx0aGlzKVtmXT1oLGR9LFtdKX1jbGVhckNhY2hlKGwpe0FycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChh''@;'; put 'put ''LG51bGwpfSl9LCEwKTp0aGlzLmNvbHVtbldpZHRoc01hcC5jbGVhcigpfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRDb2x1bW5zKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWc3QoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9O2MuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO251bGwhPT1k''@;'; put 'put ''JiYodGhpcy5ob3QuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKGQpfHx6ZChPaCx0aGlzLEU0ZSkuY2FsbCh0aGlzLGEsbCkpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoemQoT2gsdGhpcyxUNGUpLmNhbGwodGhpcyksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0''@;'; put 'put ''aW9uIEU0ZShjLGwpe3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoYyxsKS5mb3JFYWNoKChkLGgpPT50aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGgsZCkpfWZ1bmN0aW9uIFQ0ZSgpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRh''@;'; put 'put ''YmxlLmdldFdpZHRocygoYyxsKT0+e2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxsKX0pfSwhMCl9ZnVuY3Rpb24gQnN0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5p''@;'; put 'put ''blByb2dyZXNzfHwoemQoT2gsdGhpcyxWc3QpLmNhbGwodGhpcyxLbShOXyx0aGlzKSksUVAoTl8sdGhpcyxbXSkpfWZ1bmN0aW9uIGpzdChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX1mdW5jdGlvbiB6c3QoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xl''@;'; put 'put ''dFssaF09ZDtjb25zdCBmPXRoaXMuaG90LnByb3BUb0NvbChoKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihmKSYmLTE9PT1hLmluZGV4T2YoZikmJmEucHVzaChmKSxhfSxbXSk7S20oTl8sdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBBNGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0''@;'; put 'put ''aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChsLHZvaWQgMCwhMCksZD10aGlzLmdldENvbHVtbldpZHRoKGwsdm9pZCAwLCExKSksZH1mdW5jdGlvbiBVc3QoKXtRUChIXyx0aGlzLHRoaXMuaG90LmdldENvbEhlYWRlcigpKSx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCksUVAo''@;'; put 'put ''Z0osdGhpcywhMCl9ZnVuY3Rpb24gWnN0KGMpe2lmKCFLbShnSix0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9pZCAwOmguY29sO2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0''@;'; put 'put ''IHY9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO0ttKE5fLHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgaDk9e2hvcml6b250YWw6Imhvcml6b250YWwiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9O2Z1bmN0aW9uIFZfKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLc3QoYyl7dmFyIGw9ZnVuY3Rpb24gcXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBoVChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo''@;'; put 'put ''bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxTYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO2NvbnN0IEpzdD1bImZpbGxIYW5kbGUiXTt2YXIgQl89bmV3IFdlYWtTZXQ7Y2xhc3MgdGx0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h''@;'; put 'put ''cmd1bWVudHMpLGZ1bmN0aW9uIEdzdChjLGwpeyhmdW5jdGlvbiAkc3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp''@;'; put 'put ''cyxCXyksVl8odGhpcywiYWRkaW5nU3RhcnRlZCIsITEpLFZfKHRoaXMsIm1vdXNlRG93bk9uQ2VsbENvcm5lciIsITEpLFZfKHRoaXMsIm1vdXNlRHJhZ091dHNpZGUiLCExKSxWXyh0aGlzLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLDApLFZfKHRoaXMsImRpcmVjdGlvbnMiLFtdKSxWXyh0aGlz''@;'; put 'put ''LCJhdXRvSW5zZXJ0Um93IiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImF1dG9maWxsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblsiYXV0b2ZpbGwiLC4uLkpzdF19aXNFbmFibGVkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PmhUKEJfLHRo''@;'; put 'put ''aXMscmx0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+aFQoQl8sdGhpcyxubHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT5oVChCXyx0aGlzLGlsdCkuY2FsbCh0aGlz''@;'; put 'put ''LGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhck1hcHBlZFNldHRpbmdzKCksc3VwZXIuZGlzYWJsZVBsdWdp''@;'; put 'put ''bigpfWdldFNlbGVjdGlvbkRhdGEoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNv''@;'; put 'put ''cHlhYmxlUmFuZ2UiLFt7c3RhcnRSb3c6YSxzdGFydENvbDpkLGVuZFJvdzpoLGVuZENvbDpmfV0pLE09W10sST1bXSxHPVtdO3JldHVybiBZbih2LGllPT57Zm9yKGxldCB1ZT1pZS5zdGFydFJvdzt1ZTw9aWUuZW5kUm93O3VlKz0xKS0xPT09TS5pbmRleE9mKHVlKSYmTS5wdXNoKHVlKTtm''@;'; put 'put ''b3IobGV0IHVlPWllLnN0YXJ0Q29sO3VlPD1pZS5lbmRDb2w7dWUrPTEpLTE9PT1JLmluZGV4T2YodWUpJiZJLnB1c2godWUpfSksWW4oTSxpZT0+e2NvbnN0IHVlPVtdO1luKEkseWU9Pnt1ZS5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShpZSx5ZSkpfSksRy5wdXNoKHVlKX0pLEd9''@;'; put 'put ''ZmlsbEluKCl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0W2wsYSxkLGhdPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxmPXRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VMYXN0KCksdj1mLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1mLmdldEJvdHRvbUVuZENvcm5lcigpO3RoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7Y29uc3QgST1bdi5yb3csdi5jb2wsTS5yb3csTS5jb2xdLEc9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9maWxs''@;'; put 'put ''UmFuZ2UiLFtNYXRoLm1pbih2LnJvdyxsKSxNYXRoLm1pbih2LmNvbCxhKSxNYXRoLm1heChNLnJvdyxkKSxNYXRoLm1heChNLmNvbCxoKV0sSSkse2RpcmVjdGlvbk9mRHJhZzppZSxzdGFydE9mRHJhZ0Nvb3Jkczp1ZSxlbmRPZkRyYWdDb29yZHM6eWV9PWZ1bmN0aW9uIFdzdChjLGwsYSl7''@;'; put 'put ''bGV0IGQsaCxmO3JldHVybiBsWzBdPT09Y1swXSYmbFsxXTxjWzFdPyhmPSJsZWZ0IixkPWEobFswXSxsWzFdKSxoPWEobFsyXSxjWzFdLTEpKTpsWzJdPT09Y1syXSYmbFswXT09PWNbMF0mJmxbM10+Y1szXT8oZj0icmlnaHQiLGQ9YShsWzBdLGNbM10rMSksaD1hKGxbMl0sbFszXSkpOmxb''@;'; put 'put ''MF08Y1swXSYmbFsxXT09PWNbMV0/KGY9InVwIixkPWEobFswXSxsWzFdKSxoPWEoY1swXS0xLGxbM10pKTpsWzJdPmNbMl0mJmxbMV09PT1jWzFdJiYoZj0iZG93biIsZD1hKGNbMl0rMSxsWzFdKSxoPWEobFsyXSxsWzNdKSksZCYmZC5ub3JtYWxpemUoKSxoJiZoLm5vcm1hbGl6ZSgpLHtk''@;'; put 'put ''aXJlY3Rpb25PZkRyYWc6ZixzdGFydE9mRHJhZ0Nvb3JkczpkLGVuZE9mRHJhZ0Nvb3JkczpofX0oSSxHLChFZSxqZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEVlLGplKSk7aWYodWUmJnVlLnJvdz4tMSYmdWUuY29sPi0xKXtjb25zdCBFZT10aGlzLmdldFNlbGVjdGlvbkRhdGEo''@;'; put 'put ''KSxqZT1mLmNsb25lKCkscWU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh1ZSx1ZSx5ZSkscnQ9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUF1dG9maWxsIixFZSxqZSxxZSxpZSk7aWYoITE9PT1ydClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xl''@;'; put 'put ''YXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQgcHQ9cnQ7Y29uc3QgZHQ9cnQ7aWYoWyJ1cCIsImxlZnQiXS5pbmRleE9mKGllKT4tMSYmKDEhPT1kdC5sZW5ndGh8fDAhPT1kdFswXS5sZW5ndGgpKWlmKHB0PVtdLCJ1cCI9PT1pZSl7Y29uc3QgSnQ9eWUucm93LXVlLnJvdysxLHZuPUp0''@;'; put 'put ''JWR0Lmxlbmd0aDtmb3IobGV0IENuPTA7Q248SnQ7Q24rKylwdC5wdXNoKGR0WyhDbisoZHQubGVuZ3RoLXZuKSklZHQubGVuZ3RoXSl9ZWxzZXtjb25zdCBKdD15ZS5jb2wtdWUuY29sKzEsdm49SnQlZHRbMF0ubGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxkdC5sZW5ndGg7Q24rKyl7cHQucHVz''@;'; put 'put ''aChbXSk7Zm9yKGxldCB0bj0wO3RuPEp0O3RuKyspcHRbQ25dLnB1c2goZHRbQ25dWyh0bisoZHRbQ25dLmxlbmd0aC12bikpJWR0W0NuXS5sZW5ndGhdKX19dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodWUucm93LHVlLmNvbCxwdCx5ZS5yb3cseWUuY29sLGAke3RoaXMucGx1Z2luTmFt''@;'; put 'put ''ZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oRyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLHB0LGplLHFlLGllKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7cmV0dXJuITB9cmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVk''@;'; put 'put ''KGwpe3JldHVybiBsLnJvdzwwJiYobC5yb3c9MCksbC5jb2w8MCYmKGwuY29sPTApLGx9Z2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgaD1sO2lmKHRoaXMu''@;'; put 'put ''ZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0aWNhbCkmJnRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS5ob3Jpem9udGFsKSl7Y29uc3QgZj1hLmdldFRvcFN0YXJ0Q29ybmVyKCk7KGQuY29sPD1sLmNvbHx8Zi5jb2w+PWwuY29sKSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''ZC5yb3csbC5jb2wpKSwoZC5yb3c8bC5yb3d8fGYucm93Pmwucm93KSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpKX1lbHNlIGlmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhoOS52ZXJ0aWNhbCkpaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJv''@;'; put 'put ''dyxkLmNvbCk7ZWxzZXtpZighdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGg5Lmhvcml6b250YWwpKXJldHVybjtoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKX1yZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoaCl9c2hvd0JvcmRlcihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuZ2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCk7YSYmdGhpcy5yZWRyYXdCb3JkZXJzKGEpfWFkZFJvdygpe3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsdm9pZCAwLDEsYCR7dGhpcy5wbHVn''@;'; put 'put ''aW5OYW1lfS5maWxsYCksdGhpcy5hZGRpbmdTdGFydGVkPSExfSwyMDApfWFkZE5ld1Jvd0lmTmVlZGVkKCl7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSYmITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuYXV0b0luc2VydFJvdyl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xbMl08ZC0xJiZhWzJdPT09ZC0xJiYodGhpcy5hZGRpbmdTdGFydGVkPSEwLHRoaXMu''@;'; put 'put ''YWRkUm93KCkpfX1nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCl7Y29uc3QgYT10aGlzLmhvdC5nZXREYXRhKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgaDtmb3IobGV0IGY9bFsyXSsxO2Y8ZDtmKyspe2ZvcihsZXQgST1sWzFdO0k8PWxbM107SSsrKWlmKCFVYyhh''@;'; put 'put ''W2ZdW0ldKSlyZXR1cm4tMTtjb25zdCBNPWFbZl1bbFszXSsxXTsoIVVjKGFbZl1bbFsxXS0xXSl8fCFVYyhNKSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZp''@;'; put 'put ''bGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVjdENlbGwoLi4uYnMobCxhPT5NYXRoLm1heChhLDAp''@;'; put 'put ''KSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9T''@;'; put 'put ''cGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdCb3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5o''@;'; put 'put ''aWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFn''@;'; put 'put ''Z2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9VTAodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK3h1KHRoaXMuaG90LnRhYmxlKSxoPVUwKHRoaXMuaG90''@;'; put 'put ''LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3N1KHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5y''@;'; put 'put ''b290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+aFQoQl8sdGhpcyxhbHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5oVChCXyx0aGlzLG9sdCkuY2FsbCh0''@;'; put 'put ''aGlzLGEpKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25zLmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24gWXN0KGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMo''@;'; put 'put ''aDkpLGwuYXV0b0luc2VydFJvdz0hMCk6cW8oYyk/KGwuYXV0b0luc2VydFJvdz0hIVBhKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09aDkuaG9yaXpvbnRhbCYmYy5hdXRvSW5zZXJ0Um93LGwuZGlyZWN0aW9ucz1QYShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qu''@;'; put 'put ''a2V5cyhoOSkpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtjXSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVj''@;'; put 'put ''dGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBubHQoKXt0aGlzLnNlbGVjdEFkamFjZW50KCkmJnRoaXMuZmlsbEluKCl9ZnVuY3Rpb24gcmx0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlz''@;'; put 'put ''Lm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1mdW5jdGlvbiBpbHQoYyl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9y''@;'; put 'put ''ZGVyKGMpLHRoaXMuYWRkTmV3Um93SWZOZWVkZWQoKSl9ZnVuY3Rpb24gYWx0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3Ju''@;'; put 'put ''ZXI9ITEpfWZ1bmN0aW9uIG9sdChjKXtjb25zdCBsPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGMpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZsPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdTdGFydGVk''@;'; put 'put ''PSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9ZnVuY3Rpb24gRDRlKGMsbCxhKXtJNGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEk0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gal8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxsdChjKXt2YXIgbD1mdW5jdGlvbiBjbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFI0ZShjLGwsYSl7cmV0dXJuIGMuc2V0KEJwKGMsbCksYSksYX1mdW5jdGlvbiBlRihjLGwpe3JldHVybiBjLmdldChCcChjLGwpKX1mdW5jdGlvbiBCcChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/''@;'; put 'put ''Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgbUo9ImF1dG9Sb3dTaXplIjt2YXIgZlQ9bmV3IFdlYWtNYXAsdko9bmV3IFdl''@;'; put 'put ''YWtNYXAsSWc9bmV3IFdlYWtTZXQ7Y2xhc3MgcFQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gbUp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFV''@;'; put 'put ''TFRfU0VUVElOR1MoKXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUw''@;'; put 'put ''MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBzbHQoYyxsKXtJNGUoYyxsKSxsLmFkZChjKX0odGhpcyxJZyksal8odGhpcywiaGVhZGVySGVpZ2h0IixudWxsKSxqXyh0aGlzLCJnaG9zdFRhYmxlIixuZXcgZEoodGhpcy5ob3QpKSxqXyh0aGlzLCJzYW1wbGVzR2VuZXJhdG9y''@;'; put 'put ''IixuZXcgTTRlKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZil8fGE+''@;'; put 'put ''PTAmJmQ+PTAmJnRoaXMuaG90LmdldENlbGxNZXRhKGEsZCkuaGlkZGVuKXJldHVybiExO2xldCB2O3JldHVybiBhPj0wP3Y9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKHY9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6dn19KSksal8odGhpcywiaW5Qcm9n''@;'; put 'put ''cmVzcyIsITEpLGpfKHRoaXMsIm1lYXN1cmVkUm93cyIsMCksal8odGhpcywicm93SGVpZ2h0c01hcCIsbmV3IFptKSxENGUodGhpcyxmVCxbXSksRDRlKHRoaXMsdkosITEpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5yb3dIZWlnaHRz''@;'; put 'put ''TWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+QnAoSWcsdGhpcyxMNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07cmV0dXJuITA9PT1sfHxxbyhsKX1lbmFibGVQbHVnaW4oKXt2YXIg''@;'; put 'put ''bD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2EmJiFpc05hTihh''@;'; put 'put ''KSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb''@;'; put 'put ''Zl07cmV0dXJuIEJwKElnLGwscGx0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQnAo''@;'; put 'put ''SWcsbCxnbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChJZyxsLHZsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5CcChJZyx0aGlzLGZsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJt''@;'; put 'put ''b2RpZnlSb3dIZWlnaHQiLChkLGgpPT50aGlzLmdldFJvd0hlaWdodChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5CcChJZyx0aGlzLG1sdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhl''@;'; put 'put ''aWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChsLGEsZCk9PkJwKElnLHRoaXMsTDRlKS5jYWxsKHRoaXMsbCxhLGQpKX1j''@;'; put 'put ''YWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpe2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zy''@;'; put 'put ''b206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKX1jYWxjdWxhdGVSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX0sYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtpZihudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKDApKXtjb25zdCB2PXRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsZik7dGhpcy5naG9zdFRh''@;'; put 'put ''YmxlLmFkZENvbHVtbkhlYWRlcnNSb3codi5nZXQoLTEpKX1HYShoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KE0pKSYmdGhpcy5zYW1wbGVz''@;'; put 'put ''R2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyh2LGYpLmZvckVhY2goKEcsaWUpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KGllLEcpKX0pLHRoaXMuZ2hvc3RUYWJsZS5yb3dzLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldEhlaWdo''@;'; put 'put ''dHMoKHYsTSk9Pnt2PDA/dGhpcy5oZWFkZXJIZWlnaHQ9TTp0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSl9KX0sITApLHRoaXMubWVhc3VyZWRSb3dzPWgudG8rMSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9Y2FsY3VsYXRl''@;'; put 'put ''QWxsUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50''@;'; put 'put ''c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFRFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206''@;'; put 'put ''ZCx0bzpNYXRoLm1pbihkK3BULkNBTENVTEFUSU9OX1NURVAsaCl9LGwsYSksZD1kK3BULkNBTENVTEFUSU9OX1NURVArMSxkPGg/Zj1FRSh2KTooVEUoZiksdGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1''@;'; put 'put ''bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOjAsdG86TX0sbCxhKSxkPU0rMSksZDxoP3YoKToodGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe3Ro''@;'; put 'put ''aXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSl07bGV0IGE9cFQuU1lO''@;'; put 'put ''Q19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHFvKGwpJiYoYT1sLnN5bmNMaW1pdCxmJChhKT9hPUokKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwsYSl7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6''@;'; put 'put ''dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0Vmlz''@;'; put 'put ''aWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJv''@;'; put 'put ''dygpKSYmdm9pZCAwIT09bD9sOi0xfWNsZWFyQ2FjaGUobCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJheS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0s''@;'; put 'put ''ITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFyQ2FjaGVCeVJhbmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57R2EoTWF0aC5taW4oYSxkKSxNYXRoLm1heChhLGQp''@;'; put 'put ''LGg9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsbnVsbCl9KX0sITApfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5n''@;'; put 'put ''dGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaGx0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtjLmZvckVhY2goYT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBs''@;'; put 'put ''ZXMoYSxsKS5mb3JFYWNoKChoLGYpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KGYsaCkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbFJvdyhhKTt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCl9KX0sITApLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBmbHQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoQnAoSWcsdGhp''@;'; put 'put ''cyxobHQpLmNhbGwodGhpcyxlRihmVCx0aGlzKSksUjRlKGZULHRoaXMsW10pKX1mdW5jdGlvbiBMNGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQobCx2b2lkIDAsITApLGQ9dGhpcy5nZXRSb3dIZWlnaHQobCkpLGR9ZnVuY3Rpb24gcGx0KGMs''@;'; put 'put ''bCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX1mdW5jdGlvbiBnbHQoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFtoXT1kO3JldHVybi0xPT09YS5pbmRleE9mKGgpJiZhLnB1c2goaCksYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gbWx0''@;'; put 'put ''KCl7dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSxSNGUodkosdGhpcywhMCl9ZnVuY3Rpb24gdmx0KGMpe2lmKCFlRih2Six0aGlzKSlyZXR1cm47Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e3ZhciBoO2NvbnN0IGY9bnVsbD09PShoPWQuYWRkcmVzcyl8fHZvaWQgMD09PWg/dm9p''@;'; put 'put ''ZCAwOmgucm93O2lmKE51bWJlci5pc0ludGVnZXIoZikpe2NvbnN0IHY9dGhpcy5ob3QudG9WaXN1YWxSb3coZik7LTE9PT1hLmluZGV4T2YodikmJmEucHVzaCh2KX1yZXR1cm4gYX0sW10pO2VGKGZULHRoaXMpLnB1c2goLi4ubCl9Y29uc3QgTzRlPW5ldyBNYXAoW1siaW5kZXhlc1NlcXVl''@;'; put 'put ''bmNlIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkhLLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOktFfV0sWyJwaHlzaWNhbGx5SW5kZXhlZCIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpCSyxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpqS31dXSksUDRlPWM9PntpZighMT09PU80ZS5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IEVycm9yKGBBbHRlciBzdHJhdGVneSB3aXRoIElEICcke2N9JyBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gTzRlLmdldChjKX0se2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczp5bHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6Ymx0fT1QNGUoInBoeXNpY2FsbHlJ''@;'; put 'put ''bmRleGVkIikse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczpDbHQsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6U2x0fT1QNGUoInBoeXNpY2FsbHlJbmRleGVkIik7Y29uc3QgRjRlPSJiaW5kUm93c1dpdGhIZWFkZXJzIixINGU9bmV3IE1hcChbWyJsb29zZSIsY2xhc3MgX2x0IGV4dGVuZHMg''@;'; put 'put ''ZTl7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVZLKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9eWx0KGQsbCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe2NvbnN0IGE9Ymx0KHRo''@;'; put 'put ''aXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9TksoYSxsKSxzdXBlci5yZW1vdmUobCl9fV0sWyJzdHJpY3QiLGNsYXNzIE1sdCBleHRlbmRzIGU5e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7dGhpcy5pbmRleGVkVmFsdWVzPUNsdCh0aGlzLmlu''@;'; put 'put ''ZGV4ZWRWYWx1ZXMsbCxhLChkLGgpPT50aGlzLmdldE5leHRWYWx1ZShoKSksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1TbHQodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXROZXh0VmFsdWUobCl7cmV0dXJuIE1hdGgubWF4''@;'; put 'put ''KC4uLnRoaXMuZ2V0VmFsdWVzKCkpKzErbH19XV0pO3ZhciBONGU9bmV3IFdlYWtTZXQ7Y2xhc3MgT2x0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEVsdChjLGwpeyhmdW5jdGlvbiBUbHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxONGUpLGZ1bmN0aW9uIEFsdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2x0KGMpe3ZhciBsPWZ1bmN0aW9uIERs''@;'; put 'put ''dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImhlYWRlckluZGV4ZXMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGNGV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEw''@;'; put 'put ''fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGNGVdfWVuYWJsZVBsdWdpbigpe3ZhciBsO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT1udWxsIT09KGw9SDRlLmdldCh0aGlzLmdldFNldHRpbmcoKSkpJiZ2b2lkIDAhPT1sP2w6SDRlLmdldCgibG9v''@;'; put 'put ''c2UiKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+ZnVuY3Rpb24gSWx0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oTjRlLHRoaXMsUGx0KS5jYWxsKHRoaXMsZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigp''@;'; put 'put ''fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFBsdChjKXtyZXR1cm4gdGhpcy5oZWFkZXJJbmRl''@;'; put 'put ''eGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGMpKX1mdW5jdGlvbiBWNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1''@;'; put 'put ''bmN0aW9uIEI0ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTmx0KGMpe3ZhciBsPWZ1bmN0aW9uIFZsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gajRlKGMsbCl7cmV0dXJuIGMuZ2V0KHpfKGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIHlKKGMsbCxhKXtyZXR1cm4gYy5zZXQoel8oYyxsKSxhKSxhfWZ1bmN0aW9uIHpfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB0Rj0iY29sbGFwc2libGVDb2x1bW5zIixqbHQ9WyJuZXN0ZWRIZWFkZXJzIl0sVV89ImNvbGxhcHNpYmxlSW5kaWNhdG9yIix6NGU9dEYsVTRlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9y''@;'; put 'put ''ZUhvb2s6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBaXz1uZXcg''@;'; put 'put ''V2Vha01hcCxnVD1uZXcgV2Vha1NldDtjbGFzcyB6bHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRmx0KGMsbCl7VjRlKGMsbCksbC5hZGQoYyl9KHRoaXMsZ1QpLEI0ZSh0aGlzLCJuZXN0ZWRIZWFkZXJzUGx1Z2luIixudWxsKSxCNGUo''@;'; put 'put ''dGhpcywiaGVhZGVyU3RhdGVNYW5hZ2VyIixudWxsKSxmdW5jdGlvbiBIbHQoYyxsLGEpe1Y0ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsWl8sbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0''@;'; put 'put ''aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46TmVzdGVkSGVhZGVycyJdfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW3RGLC4uLmpsdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10''@;'; put 'put ''aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2F8fGlsKCJZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBpbiBvcmRlciB0byB1c2UgY29sbGFwc2libGUgaGVhZGVycy4i''@;'; put 'put ''KSx5SihaXyx0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAodGhpcy5wbHVnaW5OYW1lLCJoaWRpbmciKSksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPXRoaXMuaG90LmdldFBsdWdpbigibmVzdGVkSGVhZGVycyIpLHRoaXMuaGVhZGVy''@;'; put 'put ''U3RhdGVNYW5hZ2VyPXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5nZXRTdGF0ZU1hbmFnZXIoKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT56XyhnVCx0aGlzLFdsdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6XyhnVCxsLFlsdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5l''@;'; put 'put ''dyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gel8oZ1QsbCxVbHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIiwoZCxoLGYpPT56XyhnVCx0aGlzLFpsdCkuY2FsbCh0aGlzLGQsaCxmKSksdGhpcy5yZWdp''@;'; put 'put ''c3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYodGhpcy5ob3Qudmlldyl7aWYoIXRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbi5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzKXtjb25zdHtjb2xsYXBzaWJsZUNv''@;'; put 'put ''bHVtbnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsiYm9vbGVhbiI9PXR5cGVvZiBsP3RoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0YXRlKGE9Pih7Y29sbGFwc2libGU6YS5vcmlnQ29sc3Bhbj4xfSkpOkFycmF5LmlzQXJyYXkobCkmJih0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5t''@;'; put 'put ''YXBTdGF0ZSgoKT0+KHtjb2xsYXBzaWJsZTohMX0pKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tZXJnZVN0YXRlV2l0aChsKSl9c3VwZXIudXBkYXRlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2lu''@;'; put 'put ''TmFtZSkseUooWl8sdGhpcyxudWxsKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49bnVsbCx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFyQnV0dG9ucygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFu''@;'; put 'put ''YWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e3ZhciBsO2NvbnN0e3JvdzphLGNvbDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCx7Y29sbGFwc2libGU6aCxpc0NvbGxhcHNlZDpm''@;'; put 'put ''LGNvbHVtbkluZGV4OnZ9PW51bGwhPT0obD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxkKSkmJnZvaWQgMCE9PWw/bDp7fTtpZihoKXJldHVybiBmP3RoaXMuZXhwYW5kU2VjdGlvbih7cm93OmEsY29sOnZ9KTp0aGlzLmNvbGxhcHNlU2VjdGlvbih7''@;'; put 'put ''cm93OmEsY29sOnZ9KSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtyZXR1cm4obnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzU2luZ2xlKCkpJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0''@;'; put 'put ''KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhpZ2hsaWdodC5pc0hlYWRlcigpKX0sZ3JvdXA6ejRlLHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlk''@;'; put 'put ''IikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh6NGUpfWNsZWFyQnV0dG9ucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFE''@;'; put 'put ''LGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT90aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0''@;'; put 'put ''Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGwsZj1mdW5jdGlvbih2KXt2JiZ2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodil9O0dhKDAsbC0xLHY9Pntjb25zdCBNPWEuY2hpbGROb2Rlc1t2XSxJPWQuY2hpbGROb2Rlc1t2XSxHPWg/aC5jaGlsZE5vZGVzW3ZdOm51bGw7''@;'; put 'put ''R2EoMCxNLmNoaWxkTm9kZXMubGVuZ3RoLTEsaWU9PntsZXQgdWU9TS5jaGlsZE5vZGVzW2llXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKTtmKHVlKSxJJiZJLmNoaWxkTm9kZXNbaWVdJiYodWU9SS5jaGlsZE5vZGVzW2llXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKHVlKSksaCYmRyYm''@;'; put 'put ''Ry5jaGlsZE5vZGVzW2llXSYmKHVlPUcuY2hpbGROb2Rlc1tpZV0ucXVlcnlTZWxlY3RvcihgLiR7VV99YCksZih1ZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9nZ2xl''@;'; put 'put ''Q29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46ZixoZWFkZXJMZXZlbDp2LGNvbHVt''@;'; put 'put ''bkluZGV4Ok0saXNDb2xsYXBzZWQ6SX09ZDtpZighMD09PWgmJmY+MSYmKEkmJiJleHBhbmQiPT09bHx8IUkmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHModiksY29sOk19fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJs''@;'; put 'put ''ZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lmKCFV''@;'; put 'put ''NGUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9SW0obCxFZT0+e2xldHtyb3c6amV9PUVlO3JldHVybiBqZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtZbihkLEVl''@;'; put 'put ''PT57dmFyIGplO2xldHtyb3c6cWUsY29sOnJ0fT1FZTtjb25zdHtjb2xsYXBzaWJsZTpwdCxpc0NvbGxhcHNlZDpkdH09bnVsbCE9PShqZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhxZSxydCkpJiZ2b2lkIDAhPT1qZT9qZTp7fTtpZighcHR8fGR0JiYiY29s''@;'; put 'put ''bGFwc2UiPT09YXx8IWR0JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLHY9W107aCYmWW4oZCxFZT0+e2xldHtyb3c6amUsY29sOnFlfT1FZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOnJ0LGFmZmVjdGVkQ29sdW1uczpwdCxyb2xsYmFja01vZGlmaWNhdGlv''@;'; put 'put ''bjpkdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxqZSxxZSk7cnQ+MCYmKHYucHVzaCguLi5wdCksZi5wdXNoKGR0KSl9KTtjb25zdCBNPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xldCBJPVtdOyJjb2xsYXBzZSI9PT1hP0k9djJlKFsu''@;'; put 'put ''Li5NLC4uLnZdKToiZXhwYW5kIj09PWEmJihJPUltKE0sRWU9PiF2LmluY2x1ZGVzKEVlKSkpO2NvbnN0IEc9VTRlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKEcuYmVmb3JlSG9vayxNLEksaCkpcmV0dXJuIHZvaWQgWW4oZixFZT0+e0VlKCl9KTt0aGlzLmhvdC5iYXRjaEV4''@;'; put 'put ''ZWN1dGlvbigoKT0+e1luKHYsRWU9PntqNGUoWl8sdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRWUpLEcuaGlkZUNvbHVtbil9KX0sITApO2NvbnN0IHVlPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpLmxlbmd0aCE9PU0ubGVuZ3RoLHllPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoImNvbGxhcHNlIj09PWEmJnVlJiZ5ZSl7Y29uc3R7cm93OkVlLGNvbDpqZX09eWUuaGlnaGxpZ2h0O2lmKCh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihFZSl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVu''@;'; put 'put ''KGplKSkmJnYuaW5jbHVkZXMoamUpKXtjb25zdCBydD1FZT49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRWUsMSwhMCk6RWUscHQ9amU+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGplLDEs''@;'; put 'put ''ITApOmplO251bGwhPT1ydCYmbnVsbCE9PXB0JiZ0aGlzLmhvdC5zZWxlY3RDZWxsKHJ0LHB0KX19dGhpcy5ob3QucnVuSG9va3MoRy5hZnRlckhvb2ssTSxJLGgsdWUpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q29sbGFwc2VkQ29s''@;'; put 'put ''dW1ucygpe3JldHVybiBqNGUoWl8sdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpfWRlc3Ryb3koKXt5SihaXyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVWx0KGMsbCxhKXt2YXIgZDtjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaXNDb2xsYXBzZWQ6dn09''@;'; put 'put ''bnVsbCE9PShkPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGEsYykpJiZ2b2lkIDAhPT1kP2Q6e30sTT1oJiZmPjEmJmM+PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsST10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2xl''@;'; put 'put ''dCBHPWwucXVlcnlTZWxlY3RvcihgLiR7VV99YCk7dmFyIGllO2o3KGwsW04yKCIiKVswXV0pLE0/KEd8fChHPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxUaShHLFVfKSxsLnF1ZXJ5U2VsZWN0b3IoImRpdjpmaXJzdC1jaGlsZCIpLmFwcGVuZENoaWxkKEcp''@;'; put 'put ''KSxsbyhHLFsiY29sbGFwc2VkIiwiZXhwYW5kZWQiXSksdj8oVGkoRywiY29sbGFwc2VkIiksUG0oRywiKyIpLEkmJnZvKGwsLi4uTjIoITEpKSk6KFRpKEcsImV4cGFuZGVkIiksUG0oRywiLSIpLEkmJnZvKGwsLi4uTjIoITApKSksSSYmdm8oRywuLi5WNygpKSk6bnVsbD09PShpZT1HKXx8''@;'; put 'put ''dm9pZCAwPT09aWV8fGllLnJlbW92ZSgpfWZ1bmN0aW9uIFpsdChjLGwpe3BvKGMudGFyZ2V0LFVfKSYmKHBvKGMudGFyZ2V0LCJleHBhbmRlZCIpPyh0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihb''@;'; put 'put ''bF0sImNvbGxhcHNlIikpOnBvKGMudGFyZ2V0LCJjb2xsYXBzZWQiKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIikpLEIyKGMpKX1mdW5jdGlvbiBXbHQoKXt0aGlzLnVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIFlsdChjLGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gZjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdsdChjKXt2YXIgbD1mdW5jdGlvbiAkbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWNvbnN0IEtsdD1bInNvcnRFbXB0eUNlbGxzIiwiaW5kaWNhdG9yIiwiaGVhZGVyQWN0aW9uIiwiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSJdO2NsYXNzIFFsdHtjb25zdHJ1Y3RvcihsLGEpe2Y5KHRoaXMsImhvdCIsdm9pZCAwKSxmOSh0aGlzLCJzb3J0aW5nU3RhdGVz''@;'; put 'put ''IixuZXcgcFApLGY5KHRoaXMsInNvcnRFbXB0eUNlbGxzIiwhMSksZjkodGhpcywiaW5kaWNhdG9yIiwhMCksZjkodGhpcywiaGVhZGVyQWN0aW9uIiwhMCksZjkodGhpcywiY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIsdm9pZCAwKSxmOSh0aGlzLCJtYXBOYW1lIix2b2lkIDApLHRoaXMuaG90''@;'; put 'put ''PWwsdGhpcy5tYXBOYW1lPWEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoYSx0aGlzLnNvcnRpbmdTdGF0ZXMpfXVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpe3FvKGwpJiZYbyhsLChhLGQpPT57S2x0LmluY2x1ZGVzKGQpJiYodGhpc1tkXT1hKX0pfWdldEFs''@;'; put 'put ''bENvbHVtbnNQcm9wZXJ0aWVzKCl7Y29uc3QgbD17c29ydEVtcHR5Q2VsbHM6dGhpcy5zb3J0RW1wdHlDZWxscyxpbmRpY2F0b3I6dGhpcy5pbmRpY2F0b3IsaGVhZGVyQWN0aW9uOnRoaXMuaGVhZGVyQWN0aW9ufTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21wYXJlRnVuY3Rp''@;'; put 'put ''b25GYWN0b3J5JiYobC5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSksbH1nZXRTb3J0T3JkZXJPZkNvbHVtbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuc29ydGluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlz''@;'; put 'put ''aWNhbENvbHVtbihsKSkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnNvcnRPcmRlcn1nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCl7cmV0dXJuIGw9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSx0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLmZpbmRJbmRleChhPT57bGV0''@;'; put 'put ''W2RdPWE7cmV0dXJuIGQ9PT1sfSl9Z2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc29ydGluZ1N0YXRlcy5nZXRMZW5ndGgoKX1pc0xpc3RPZlNvcnRlZENvbHVtbnNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKX1pc0NvbHVt''@;'; put 'put ''blNvcnRlZChsKXtyZXR1cm4gcW8odGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl9Z2V0U29ydFN0YXRlcygpe3JldHVybiBudWxsPT09dGhpcy5zb3J0aW5nU3RhdGVzP1tdOnRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRy''@;'; put 'put ''aWVzKCkubWFwKGE9PntsZXRbZCxoXT1hO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZCksLi4uaH19KX1nZXRDb2x1bW5Tb3J0U3RhdGUobCl7Y29uc3QgYT10aGlzLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFBhKGEpKXJldHVybntjb2x1bW46bCxzb3J0T3Jk''@;'; put 'put ''ZXI6YX19c2V0U29ydFN0YXRlcyhsKXt0aGlzLnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErPTEpdGhpcy5zb3J0aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGxbYV0uY29sdW1uKSx7c29ydE9yZGVyOmxb''@;'; put 'put ''YV0uc29ydE9yZGVyfSl9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5tYXBOYW1lKSx0aGlzLnNvcnRpbmdTdGF0ZXM9bnVsbH19ZnVuY3Rpb24gWjRlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2Nv''@;'; put 'put ''bnN0e3NvcnRFbXB0eUNlbGxzOnZ9PWE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mP2pwOlVjKGgpP1VjKGYpP2pwOnYmJiJhc2MiPT09Yz9ZYzpH''@;'; put 'put ''YzpVYyhmKT92JiYiYXNjIj09PWM/R2M6WWM6aXNOYU4oaCkmJiFpc05hTihmKT8iYXNjIj09PWM/R2M6WWM6IWlzTmFOKGgpJiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jP1ljOkdjOmg+Zj8i''@;'; put 'put ''YXNjIj09PWM/R2M6WWM6anB9fWNvbnN0e3JlZ2lzdGVyOm1ULGdldEl0ZW06WTRlLGhhc0l0ZW06bGN0fT1yMygic29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOkc0ZSxnZXRJdGVtOmNjdH09cjMoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rp''@;'; put 'put ''b24gJDRlKGMpe3JldHVybiBsY3QoYyk/WTRlKGMpOlk0ZSgiZGVmYXVsdCIpfW1UKCJjaGVja2JveCIsZnVuY3Rpb24gbmN0KGMsbCxhKXtjb25zdCBkPWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''dixNKXtjb25zdCBJPVVjKHYpLEc9VWMoTSksaWU9ST9oOnYsdWU9Rz9oOk0seWU9aWU9PT1ofHxpZT09PWQsRWU9dWU9PT1ofHx1ZT09PWQ7aWYoITE9PT1mKXtpZihJJiYhMT09PUcpcmV0dXJuIEdjO2lmKCExPT09SSYmRylyZXR1cm4gWWN9cmV0dXJuITE9PT15ZSYmRWU/ImFzYyI9PT1j''@;'; put 'put ''P1ljOkdjOnllJiYhMT09PUVlPyJhc2MiPT09Yz9HYzpZYzohMT09PXllJiYhMT09PUVlP1o0ZShjLGwsYSkodixNKTppZT09PWgmJnVlPT09ZD8iYXNjIj09PWM/WWM6R2M6aWU9PT1kJiZ1ZT09PWg/ImFzYyI9PT1jP0djOlljOmpwfX0pLG1UKCJkYXRlIixmdW5jdGlvbiBpY3QoYyxsLGEp''@;'; put 'put ''e3JldHVybiBRNGUoYyxsLmRhdGVGb3JtYXQsYSl9KSxtVCgiZGVmYXVsdCIsWjRlKSxtVCgibnVtZXJpYyIsZnVuY3Rpb24gZWN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksdj1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpNfT1hO2lm''@;'; put 'put ''KGY9PT12fHxpc05hTihmKSYmaXNOYU4odikpcmV0dXJuIGpwO2lmKE0pe2lmKFVjKGQpKXJldHVybiJhc2MiPT09Yz9ZYzpHYztpZihVYyhoKSlyZXR1cm4iYXNjIj09PWM/R2M6WWN9cmV0dXJuIGlzTmFOKGYpP0djOmlzTmFOKHYpP1ljOmY8dj8iYXNjIj09PWM/WWM6R2M6Zj52PyJhc2Mi''@;'; put 'put ''PT09Yz9HYzpZYzpqcH19KSxtVCgidGltZSIsZnVuY3Rpb24gb2N0KGMsbCxhKXtyZXR1cm4gUTRlKGMsbC50aW1lRm9ybWF0LGEpfSk7Y29uc3QganA9MCxZYz0tMSxHYz0xLG5GPSJhc2MiLHJGPSJkZXNjIixLNGU9ImNvbEhlYWRlciI7ZnVuY3Rpb24gcTRlKGMpe2lmKGMhPT1yRilyZXR1''@;'; put 'put ''cm4gYz09PW5GP3JGOm5GfWZ1bmN0aW9uIFg0ZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKGAuJHtLNGV9YCl9ZnVuY3Rpb24gSjRlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztyZXR1cm4g''@;'; put 'put ''QXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFyZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIGJKKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09SG0oYSl9ZnVuY3Rpb24gUTRlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdHtzb3J0RW1wdHlDZWxsczpmfT1h''@;'; put 'put ''O2lmKGQ9PT1oKXJldHVybiBqcDtpZihVYyhkKSlyZXR1cm4gVWMoaCk/anA6ZiYmImFzYyI9PT1jP1ljOkdjO2lmKFVjKGgpKXJldHVybiBmJiYiYXNjIj09PWM/R2M6WWM7Y29uc3Qgdj1PbyhkLGwpLE09T28oaCxsKTtyZXR1cm4gdi5pc1ZhbGlkKCk/TS5pc1ZhbGlkKCk/TS5pc0FmdGVy''@;'; put 'put ''KHYpPyJhc2MiPT09Yz9ZYzpHYzpNLmlzQmVmb3JlKHYpPyJhc2MiPT09Yz9HYzpZYzpqcDpZYzpHY319Y29uc3QgZWdlPSJpbmRpY2F0b3JEaXNhYmxlZCIsdGdlPSJjb2x1bW5Tb3J0aW5nIixuZ2U9InNvcnRBY3Rpb24iLHJnZT1uZXcgTWFwKFtbbkYsImFzY2VuZGluZyJdLFtyRiwiZGVz''@;'; put 'put ''Y2VuZGluZyJdXSk7ZnVuY3Rpb24gaUYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdjdChjKXt2YXIgbD1mdW5jdGlvbiBDY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1h''@;'; put 'put ''LmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0''@;'; put 'put ''cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFdfKGMsbCxhKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBhRj0iY29sdW1uU29ydGluZyIsb0Y9ImFwcGVuZCIs''@;'; put 'put ''aWdlPWFGO0c0ZShhRixmdW5jdGlvbiB5Y3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uKE0pe2NvbnN0IEk9Y1swXSxHPWxbMF0saWU9aFswXSx1ZT1mWzBdLHllPUcuY29sdW1uU29ydGluZztyZXR1cm4oeWUuY29t''@;'; put 'put ''cGFyZUZ1bmN0aW9uRmFjdG9yeT95ZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OiQ0ZShHLnR5cGUpKShJLEcseWUpKGllLHVlKX0oKX19KSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVt''@;'; put 'put ''blNvcnQiKTtjb25zdCB2VD1uZXcgV2Vha01hcDt2YXIgcDk9bmV3IFdlYWtTZXQ7Y2xhc3MgYWdlIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGJjdChjLGwpeyhmdW5jdGlvbiBfY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxwOSksaUYodGhpcywiY29sdW1uU3RhdGVzTWFuYWdlciIsbnVsbCksaUYodGhpcywiY29sdW1uTWV0YUNhY2hlIixudWxs''@;'; put 'put ''KSxpRih0aGlzLCJwbHVnaW5LZXkiLGFGKSxpRih0aGlzLCJpbmRleGVzU2VxdWVuY2VDYWNoZSIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGFGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDUwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih2VC5oYXModGhpcy5ob3QpJiZ2VC5nZXQodGhpcy5ob3QpIT09dGhpcy5wbHVnaW5LZXkpcmV0dXJuIHRoaXMuaG90LnVwZGF0ZVNldHRpbmdzKHtbdGhpcy5wbHVnaW5LZXldOiExfSks''@;'; put 'put ''dm9pZCBmdW5jdGlvbiBmY3QoYyxsKXtpbChnbGBQbHVnaW5zIFxgY29sdW1uU29ydGluZ1xgIGFuZCBcYG11bHRpQ29sdW1uU29ydGluZ1xgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS5ceDIwCiAgICBPbmx5IFxgJHtjfVxgIHdpbGwgd29yay4gVGhlIFxgJHtsfVxg''@;'; put 'put ''IHBsdWdpbiB3aWxsIHJlbWFpbiBkaXNhYmxlZC5gKX0odlQuZ2V0KHRoaXMuaG90KSx0aGlzLnBsdWdpbktleSk7dGhpcy5lbmFibGVkfHwodlQuc2V0KHRoaXMuaG90LHRoaXMucGx1Z2luS2V5KSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bmV3IFFsdCh0aGlzLmhvdCxgJHt0aGlzLnBs''@;'; put 'put ''dWdpbktleX0uc29ydGluZ1N0YXRlc2ApLHRoaXMuY29sdW1uTWV0YUNhY2hlPW5ldyBabShhPT57bGV0IGQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1hKSx0aGlzLmdldE1lcmdlZFBsdWdpblNldHRpbmdzKGQpfSksdGhpcy5ob3QuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgLHRoaXMuY29sdW1uTWV0YUNhY2hlKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIiwoYSxkKT0+V18ocDksdGhpcyx4Y3QpLmNhbGwodGhpcyxhLGQpKSx0aGlzLmFkZEhvb2soImJlZm9y''@;'; put 'put ''ZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18ocDksbCxUY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3Vz''@;'; put 'put ''ZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT5XXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFdfKHA5LGwsRWN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmhvdC52aWV3JiZXXyhwOSx0aGlzLF9KKS5jYWxsKHRoaXMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQ''@;'; put 'put ''bHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2NvbnN0IGw9KGEsZCk9Pntjb25zdCBoPVg0ZShkKTshMT09PUo0ZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt2VC5kZWxldGUodGhpcy5ob3QpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVy''@;'; put 'put ''IixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT1udWxsKX0sITAp''@;'; put 'put ''LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGws''@;'; put 'put ''dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29u''@;'; put 'put ''c3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcobC5jb2wpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQp''@;'; put 'put ''JiYtMT09PWQucm93JiZkLmNvbD49MH0scmVsYXRpdmVUb0dyb3VwOldtLHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOmlnZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91''@;'; put 'put ''cChpZ2UpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1h''@;'; put 'put ''Lmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyBEM2UpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVz''@;'; put 'put ''KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmdGhpcy5ob3QucmVuZGVyKCkpfWNsZWFyU29ydCgpe3RoaXMuc29ydChbXSl9aXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29ydGVkQ29sdW1uc0Vt''@;'; put 'put ''cHR5KCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gUGEobCk/dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldENvbHVtblNvcnRTdGF0ZShsKTp0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcobCl7Y29uc3QgYT10aGlzLmdldE5vcm1hbGl6''@;'; put 'put ''ZWRTb3J0Q29uZmlncyhsKTt0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoYSkmJnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGEpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKDAsMSk6W2xdfWFyZVZhbGlkU29ydENvbmZpZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4gZnVuY3Rpb24gaGN0KGMpe2lmKGMuc29tZShhPT4hMT09PWZ1bmN0aW9uIGRjdChjKXtp''@;'; put 'put ''ZighMT09PXFvKGMpKXJldHVybiExO2NvbnN0e2NvbHVtbjpsLHNvcnRPcmRlcjphfT1jO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGwpJiZbbkYsckZdLmluY2x1ZGVzKGEpfShhKSkpcmV0dXJuITE7Y29uc3QgbD1jLm1hcChhPT57bGV0e2NvbHVtbjpkfT1hO3JldHVybiBkfSk7cmV0dXJu''@;'; put 'put ''IG5ldyBTZXQobCkuc2l6ZT09PWwubGVuZ3RofShsKSYmbC5ldmVyeShkPT57bGV0e2NvbHVtbjpofT1kO3JldHVybiBoPD1hJiZoPj0wfSl9c2F2ZUFsbFNvcnRTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpO2Eu''@;'; put 'put ''aW5pdGlhbENvbmZpZz1icyhsLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZiksLi4udn19KSx0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsImNvbHVtblNvcnRpbmciLGEpfWdldEFsbFNhdmVk''@;'; put 'put ''U29ydFNldHRpbmdzKCl7Y29uc3QgbD17fTt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsImNvbHVtblNvcnRpbmciLGwpO2NvbnN0IGE9bC52YWx1ZTtyZXR1cm4gUGEoYSkmJkFycmF5LmlzQXJyYXkoYS5pbml0aWFsQ29uZmlnKSYmKGEuaW5pdGlhbENvbmZpZz1i''@;'; put 'put ''cyhhLmluaXRpYWxDb25maWcsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZiksLi4udn19KSksYX1nZXRDb2x1bW5OZXh0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9m''@;'; put 'put ''Q29sdW1uKGwpO2lmKFBhKGEpKXtjb25zdCBoPXE0ZShhKTtyZXR1cm4gUGEoaCk/e2NvbHVtbjpsLHNvcnRPcmRlcjpofTp2b2lkIDB9Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wJiZsPGQpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRl''@;'; put 'put ''cjpxNGUoKX19Z2V0TmV4dFNvcnRDb25maWcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm9GO2NvbnN0IGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSxoPS0xIT09''@;'; put 'put ''ZCxmPXRoaXMuZ2V0U29ydENvbmZpZygpLHY9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwpO2lmKGgpe2lmKF9jKHYpKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpXTtpZihhPT09b0YpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSksdl07aWYo''@;'; put 'put ''InJlcGxhY2UiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLHYsLi4uZi5zbGljZShkKzEpXX1yZXR1cm4gUGEodik/Zi5jb25jYXQodik6Zn1nZXRQbHVnaW5Db2x1bW5Db25maWcobCl7aWYocW8obCkpe2NvbnN0IGE9bFt0aGlzLnBsdWdpbktleV07aWYocW8oYSkpcmV0dXJuIGF9cmV0''@;'; put 'put ''dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSxkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxmPU9i''@;'; put 'put ''amVjdC5nZXRQcm90b3R5cGVPZihoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1uc1tsXSkpOm1sKGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1''@;'; put 'put ''bW5Db25maWcoZi5jb2x1bW5zKGwpKSk6T2JqZWN0LmFzc2lnbihkLGEpfWdldEZpcnN0Q2VsbFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxkPU9iamVjdC5jcmVhdGUoYSk7cmV0dXJuIGRbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29sdW1uTWV0YUNhY2hl''@;'; put 'put ''LmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkfWdldE51bWJlck9mUm93c1RvU29ydChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCk7cmV0dXJuIGEubWF4Um93czw9bD9hLm1heFJvd3M6bC1hLm1pblNwYXJlUm93c31zb3J0QnlQcmVzZXRT''@;'; put 'put ''b3J0U3RhdGVzKGwpe2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSwwPT09bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPUc9PmJzKGwsaWU9''@;'; put 'put ''PnRoaXMuaG90LmdldERhdGFBdENlbGwoRyxpZS5jb2x1bW4pKTtmb3IobGV0IEc9MDtHPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGQpO0crPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KEcpXS5jb25jYXQoaChHKSkpO2NvbnN0IGY9YnMoYSxHPT5HWzBdKTshZnVuY3Rp''@;'; put 'put ''b24gdWN0KGMsbCl7Y29uc3QgYT1jY3QobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSxicyhsLEc9Pkcuc29ydE9yZGVyKSxi''@;'; put 'put ''cyhsLEc9PnRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoRy5jb2x1bW4pKSk7Zm9yKGxldCBHPWEubGVuZ3RoO0c8ZDtHKz0xKWEucHVzaChbR10uY29uY2F0KGgoRykpKTtjb25zdCB2PWJzKGEsRz0+R1swXSksTT1uZXcgTWFwKGJzKGYsKEcsaWUpPT5bRyx2W2llXV0pKSxJPWJzKHRoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLEc9Pk0uaGFzKEcpP00uZ2V0KEcpOkcpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShJKX1zb3J0QnlTZXR0aW5ncyhsKXtpZihxbyhsKSl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnVw''@;'; put 'put ''ZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpO2NvbnN0IGE9bC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0FycmF5KGEpfHxxbyhhKSkmJnRoaXMuc29ydChhKX1lbHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYobG8obCxmdW5jdGlvbiB2Y3QoKXtyZXR1''@;'; put 'put ''cm4gQXJyYXkuZnJvbShyZ2UudmFsdWVzKCkpLmNvbmNhdChuZ2UsZWdlLHRnZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07VGkobCxmdW5jdGlv''@;'; put 'put ''biBtY3QoYyxsLGEsZCl7Y29uc3QgaD1bdGdlXTtpZihkJiZoLnB1c2gobmdlKSwhMT09PWEpcmV0dXJuIGgucHVzaChlZ2UpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3JldHVybiBQYShmKSYmaC5wdXNoKHJnZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0''@;'; put 'put ''aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKGwpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksUGEobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlz''@;'; put 'put ''LnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmcG8obC50YXJnZXQsSzRlKX1vbkFmdGVyT25DZWxsTW91''@;'; put 'put ''c2VEb3duKGwsYSl7aWYoITEhPT1iSihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxl''@;'; put 'put ''Y3RDb2x1bW5zKGEuY29sKSk7Y29uc3QgZD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSxoPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCk7bnVsbCE9ZCYmZC5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKGQucm93LGQuY29sKT90aGlzLmhvdC5hZGRIb29r''@;'; put 'put ''T25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGgpfSk6dGhpcy5zb3J0KGgpfX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gX0oo''@;'; put 'put ''KXtjb25zdCBjPXRoaXMuZ2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKTtpZihxbyhjKSl0aGlzLnNvcnRCeVNldHRpbmdzKGMpO2Vsc2V7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTt0aGlzLnNvcnRCeVNldHRpbmdzKGwpfX1mdW5jdGlvbiB4Y3QoYyxs''@;'; put 'put ''KXtjb25zdCBhPVg0ZShsKTtpZighMT09PUo0ZShjLGwpfHxudWxsPT09YSlyZXR1cm47Y29uc3QgZD10aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGMpW3RoaXMucGx1Z2luS2V5XTtpZih0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoYSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIsYyxkLmlu''@;'; put 'put ''ZGljYXRvcixkLmhlYWRlckFjdGlvbiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qgdj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oYyk7dm8obCwuLi4oYz0+WyJhcmlhLXNvcnQiLGNdKSh2P2Ake3Z9ZW5kaW5nYDoibm9uZSIp''@;'; put 'put ''KX19ZnVuY3Rpb24gRWN0KGMpeyEwPT09YyYmdGhpcy5ob3QudmlldyYmV18ocDksdGhpcyxfSikuY2FsbCh0aGlzKX1mdW5jdGlvbiBUY3QoYyxsLGEsZCl7ITEhPT1iSihsLnJvdyxsLmNvbCxjKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGMsbC5jb2wpJiZ0aGlzLmhvdC5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gZzkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFjdChjKXt2YXIgbD1mdW5jdGlvbiBrY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt''@;'; put 'put ''Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy''@;'; put 'put ''bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p''@;'; put 'put ''OmNbbF09YSxjfWNvbnN0IEljdD1jbGFzcyBEY3R7Y29uc3RydWN0b3IobCxhKXtnOSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksZzkodGhpcywiaG90Iix2b2lkIDApLGc5KHRoaXMsImVuZHBvaW50cyIsW10pLGc5KHRoaXMsInNldHRpbmdzIix2b2lkIDApLGc5KHRoaXMsInNldHRpbmdzVHlw''@;'; put 'put ''ZSIsImFycmF5IiksZzkodGhpcywiY3VycmVudEVuZHBvaW50IixudWxsKSxnOSh0aGlzLCJjZWxsc1RvU2V0Q2FjaGUiLFtdKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PXRoaXMucGx1Z2luLmhvdCx0aGlzLnNldHRpbmdzPWF9aW5pdEVuZHBvaW50cygpe3RoaXMuZW5kcG9pbnRzPXRoaXMu''@;'; put 'put ''cGFyc2VTZXR0aW5ncygpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWdldEVuZHBvaW50KGwpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2xdOnRoaXMuZW5kcG9pbnRzW2xdfWdldEFs''@;'; put 'put ''bEVuZHBvaW50cygpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpOnRoaXMuZW5kcG9pbnRzfWZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKGwpe3JldHVybiB0aGlzLnBhcnNlU2V0dGluZ3MobC5j''@;'; put 'put ''YWxsKHRoaXMpKX1wYXJzZVNldHRpbmdzKGwpe2NvbnN0IGE9W107bGV0IGQ9bDtpZihkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zZXR0aW5ncylyZXR1cm4gZHx8KGQ9dGhpcy5zZXR0aW5ncyksWW4oZCxoPT57Y29uc3QgZj17fTt0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyYW5nZXMi''@;'; put 'put ''LFtbMCx0aGlzLmhvdC5jb3VudFJvd3MoKS0xXV0pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJldmVyc2VkUm93Q29vcmRzIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3ZpZGUgYSBkZXN0aW5h''@;'; put 'put ''dGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvbkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3Rp''@;'; put 'put ''bmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInNvdXJjZUNvbHVtbiIsaC5kZXN0aW5hdGlvbkNvbHVtbiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwi''@;'; put 'put ''dHlwZSIsInN1bSIpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImZvcmNlTnVtZXJpYyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCksdGhpcy5hc3NpZ25T''@;'; put 'put ''ZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lkIDAhPT1sW2RdKXtp''@;'; put 'put ''ZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50Um93cygpLWxbZF0t''@;'; put 'put ''MTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0QWxsRW5kcG9pbnRz''@;'; put 'put ''KCk7WW4oZix2PT57InJvdyI9PT1oJiZ2LmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVtbj49YSYmKCJpbnNl''@;'; put 'put ''cnRfY29sIj09PWw/di5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxoLGYpe2xldCB2PSEo''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCB5ZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLHllKSx0aGlzLnJlZnJlc2hBbGxF''@;'; put 'put ''bmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLHllKX1jb25zdCBNPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsST1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsRz10aGlzLmdldEFsbEVuZHBvaW50cygpLGll''@;'; put 'put ''PTA9PT1sLmluZGV4T2YoIm1vdmVfcm93IiksdWU9YTtZbihHLHllPT57InJvdyI9PT1NJiZ5ZS5kZXN0aW5hdGlvblJvdz49dWUmJih5ZS5hbHRlclJvd09mZnNldD1JKmQpLCJjb2wiPT09TSYmeWUuZGVzdGluYXRpb25Db2x1bW4+PXVlJiYoeWUuYWx0ZXJDb2x1bW5PZmZzZXQ9SSpkKX0p''@;'; put 'put ''LHRoaXMucmVzZXRBbGxFbmRwb2ludHMoRywhaWUpLFluKEcsaWU/eWU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKHllLHVlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyh5ZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKHllKX06eWU9Pnt0aGlz''@;'; put 'put ''LnNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyh5ZSx1ZSl9KSx2JiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBvaW50UmFuZ2VzKGws''@;'; put 'put ''YSxkLGgpe1luKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhsKXtj''@;'; put 'put ''b25zdCBkPVtdLGg9W107WW4obC5yYW5nZXMsZj0+e2NvbnN0IHY9W107aWYoZlsxXSlmb3IobGV0IE09ZlswXTtNPD1mWzFdO00rKyl2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhNKSk7ZWxzZSB2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7aC5wdXNoKHYpfSks''@;'; put 'put ''WW4oaCxmPT57bGV0IHY9W107WW4oZiwoTSxJKT0+ezA9PT1JP3YucHVzaChNKTpmW0ldIT09ZltJLTFdKzEmJih2LnB1c2goZltJLTFdKSxkLnB1c2godiksdj1bXSx2LnB1c2goTSkpLEk9PT1mLmxlbmd0aC0xJiYodi5wdXNoKE0pLGQucHVzaCh2KSl9KX0pLGwucmFuZ2VzPWR9c2hpZnRF''@;'; put 'put ''bmRwb2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsWW4obC5yYW5nZXMsZD0+e1luKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJvd09mZnNldHx8MCl9''@;'; put 'put ''KX0pKTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRzKCl7bGV0IGw9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3Qgdj1oLmFsdGVyQ29s''@;'; put 'put ''dW1uT2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rdj49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKGwsaD0+e3Ro''@;'; put 'put ''aXMucmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxzVG9TZXRDYWNoZT1b''@;'; put 'put ''XSxZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRo''@;'; put 'put ''aXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbihsLChkLGgsZik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNd''@;'; put 'put ''fWAmJlluKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKHYsTSk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT12LnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoTSkmJmEucHVzaChNKX0pfSksWW4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChk''@;'; put 'put ''KSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2gobD0+e2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1''@;'; put 'put ''YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsLmRlc3RpbmF0aW9uQ29sdW1uKTtkLnJlYWRPbmx5PWwucmVhZE9ubHksZC5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJlc2hFbmRwb2ludChs''@;'; put 'put ''KXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29s''@;'; put 'put ''dW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25S''@;'; put 'put ''b3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRl''@;'; put 'put ''c3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9ImNvbHVtblN1bW1h''@;'; put 'put ''cnlSZXN1bHQiKX1pZigoITA9PT1sLnJvdW5kRmxvYXR8fE51bWJlci5pc0ludGVnZXIobC5yb3VuZEZsb2F0KSkmJiFpc05hTihsLnJlc3VsdCkpe2NvbnN0IHY9bC5yb3VuZEZsb2F0O2xldCBNPTA7TnVtYmVyLmlzSW50ZWdlcih2KSYmKE09TWF0aC5taW4oTWF0aC5tYXgoMCx2KSwxMDAp''@;'; put 'put ''KSxsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVkKE0pfWQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0''@;'; put 'put ''XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtpbCgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUg''@;'; put 'put ''dGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0aW9uIHdKKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1mdW5jdGlvbiBzRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQ0o9ImNvbHVtblN1bW1hcnkiO3ZhciB5VD1uZXcgV2Vha1NldDtjbGFzcyBOY3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUmN0''@;'; put 'put ''KGMsbCl7KGZ1bmN0aW9uIExjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHlUKSxmdW5jdGlvbiBPY3QoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIFBjdChjKXt2YXIgbD1mdW5jdGlvbiBGY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBD''@;'; put 'put ''Sn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NKXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVtDSl0sdGhpcy5lbmRwb2ludHM9bmV3IEljdCh0aGlzLHRoaXMuc2V0dGluZ3MpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBz''@;'; put 'put ''Rih5VCxsLFZjdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoeVQsbCxqY3QpLmNhbGwobCwu''@;'; put 'put ''Li5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gc0YoeVQsbCxCY3QpLmNhbGwobCwuLi5kKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50''@;'; put 'put ''cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2lu''@;'; put 'put ''dHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wi''@;'; put 'put ''LGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1''@;'; put 'put ''Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9p''@;'; put 'put ''bnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu''@;'; put 'put ''dHNbaF07cmV0dXJuIHNGKHlULGwsemN0KS5jYWxsKGwsLi4uZCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''fXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic3VtIjpsLnJl''@;'; put 'put ''c3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhsKTticmVhaztjYXNlImF2ZXJhZ2UiOmwucmVz''@;'; put 'put ''dWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShsKTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBYbyhsLnJhbmdlcyxkPT57YSs9dGhpcy5nZXRQYXJ0aWFsU3VtKGQsbC5zb3Vy''@;'; put 'put ''Y2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3VtKGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLHY9MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj13SihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IE09KGAke2Z9YC5zcGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwx''@;'; put 'put ''O00+diYmKHY9TSl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKnYpLzEwKip2fWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIFhvKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRoaXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291''@;'; put 'put ''cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVub3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5N''@;'; put 'put ''YXgobCxhLGQpe2xldCB2LGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYodj10aGlzLmdldENlbGxWYWx1ZShmLGEpLHY9d0oodik/bnVsbDp2LG51bGw9PT1oKWg9djtlbHNlIGlmKG51bGwhPT12KXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRoLm1pbihoLHYpO2JyZWFrO2Nhc2UibWF4Ijpo''@;'; put 'put ''PU1hdGgubWF4KGgsdil9Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD13SihkKT9udWxsOmQsbnVsbD09PWQmJihoKz0xKSxmLT0xfXdoaWxlKGY+PWxbMF0pO3Jl''@;'; put 'put ''dHVybiBofWNvdW50RW50cmllcyhsKXtsZXQgYT0wO3JldHVybiBYbyhsLnJhbmdlcyxoPT57Y29uc3QgZj12b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsdj10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT12fSksYX1jYWxjdWxhdGVBdmVyYWdlKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlzLmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLGEpLHY9''@;'; put 'put ''IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYodj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZXx8IiIpLHYuaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5mb3JjZU51bWVyaWMm''@;'; put 'put ''Jigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxpc05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBFcnJvcihnbGBDb2x1bW5TdW1tYXJ5IHBsdWdp''@;'; put 'put ''bjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMgbm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn19ZnVuY3Rpb24gVmN0KCl7dGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpfWZ1bmN0aW9uIEJjdChj''@;'; put 'put ''KXt2b2lkIDAhPT1jLmNvbHVtbnMmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDZWxsTWV0YXMoKX1mdW5jdGlvbiBqY3QoYyxsKXtjJiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1sJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09bCYmImxvYWREYXRhIiE9PWwmJnRoaXMuZW5kcG9pbnRzLnJlZnJl''@;'; put 'put ''c2hDaGFuZ2VkRW5kcG9pbnRzKGMpfWZ1bmN0aW9uIHpjdChjLGwpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsY1swXSxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVy''@;'; put 'put ''U3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGwsYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpfWZ1bmN0aW9uIFNKKGMsbCxhKXtvZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG9nZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWV8oYyxsKXtyZXR1cm4gYy5nZXQoeEooYyxsKSl9ZnVuY3Rpb24gTUooYyxsLGEpe3JldHVybiBjLnNldCh4SihjLGwpLGEpLGF9ZnVuY3Rpb24geEooYyxsLGEpe2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBsRj1uZXcgV2Vha01hcCxjRj1uZXcgV2Vha01hcCx1Rj1u''@;'; put 'put ''ZXcgV2Vha01hcCxzZ2U9bmV3IFdlYWtTZXQ7Y2xhc3MgbGdle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIFVjdChjLGwpe29nZShjLGwpLGwuYWRkKGMpfSkodGhpcyxzZ2UpLFNKKHRoaXMsbEYsITApLFNKKHRoaXMsY0YsbnVsbCksU0oodGhpcyx1RixuZXcgUmVzaXplT2JzZXJ2ZXIobD0+''@;'; put 'put ''eEooc2dlLHRoaXMsWmN0KS5jYWxsKHRoaXMsbCkpKX1zZXRPYnNlcnZlZEVsZW1lbnQobCl7TUooY0YsdGhpcyxsKX11bm9ic2VydmUoKXtZXyh1Rix0aGlzKS51bm9ic2VydmUoWV8oY0YsdGhpcykpfW9ic2VydmUoKXtNSihsRix0aGlzLCEwKSxZXyh1Rix0aGlzKS5vYnNlcnZlKFlfKGNG''@;'; put 'put ''LHRoaXMpKX1kZXN0cm95KCl7WV8odUYsdGhpcykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBaY3QoYyl7IVlfKGxGLHRoaXMpJiZBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD9jLmZvckVhY2gobD0+e2xldHtib3JkZXJCb3hTaXplOmF9PWw7Y29uc3R7aW5saW5lU2l6ZTpkLGJsb2NrU2l6''@;'; put 'put ''ZTpofT1hWzBdO3RoaXMucnVuTG9jYWxIb29rcygicmVzaXplIixkLGgpfSk6TUoobEYsdGhpcywhMSl9ZnVuY3Rpb24gbTkoYyxsLGEpeyhmdW5jdGlvbiBXY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRl''@;'; put 'put ''IGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE5sKGMsbCl7cmV0dXJuIGMuZ2V0KGNnZShjLGwpKX1mdW5jdGlvbiBSZyhjLGwsYSl7cmV0dXJuIGMuc2V0KGNnZShjLGwpLGEpLGF9ZnVuY3Rpb24gY2dlKGMsbCxhKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChsZ2UsYjEpO3ZhciB2OT1uZXcgV2Vha01hcCxFSj1uZXcg''@;'; put 'put ''V2Vha01hcCxMZz1uZXcgV2Vha01hcCxxbT1uZXcgV2Vha01hcCxYbT1uZXcgV2Vha01hcCxkRj1uZXcgV2Vha01hcCxHXz1uZXcgV2Vha01hcDtjbGFzcyB5OXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdl''@;'; put 'put ''dCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczttOSh0''@;'; put 'put ''aGlzLHY5LHZvaWQgMCksbTkodGhpcyxFSiwhMSksbTkodGhpcyxMZyxudWxsKSxtOSh0aGlzLHFtLHZvaWQgMCksbTkodGhpcyxYbSx2b2lkIDApLG05KHRoaXMsZEYsITApLG05KHRoaXMsR18sbmV3IGxnZSksUmcodjksdGhpcyxsKSxSZyhFSix0aGlzLGEpLFJnKHFtLHRoaXMsdGhpcy5j''@;'; put 'put ''cmVhdGVFZGl0b3IoKSksUmcoWG0sdGhpcyxObChxbSx0aGlzKS5zdHlsZSksTmwoR18sdGhpcykuc2V0T2JzZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLE5sKEdfLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4uZil9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbihsLGEpe05sKFhtLHRoaXMpLmxlZnQ9YCR7bH1weGAsTmwoWG0sdGhpcykudG9wPWAk''@;'; put 'put ''e2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDpzdSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6''@;'; put 'put ''eHUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fW9ic2VydmVTaXplKCl7TmwoR18sdGhpcykub2JzZXJ2ZSgpfXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7dGhp''@;'; put 'put ''cy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXtObChYbSx0aGlzKS5kaXNwbGF5PSJibG9jayIsUmcoZEYsdGhpcywhMSl9aGlkZSgpe05sKEdfLHRoaXMpLnVub2JzZXJ2ZSgpLE5sKGRGLHRoaXMpfHwoTmwoWG0sdGhpcykuZGlzcGxheT0ibm9uZSIpLFJnKGRGLHRoaXMs''@;'; put 'put ''ITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT1ObChYbSx0aGlzKS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1h''@;'; put 'put ''fWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIE5sKHY5LHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVk''@;'; put 'put ''aXRvcigpe2NvbnN0IGw9TmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1ObCh2OSx0aGlzKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLFJnKExnLHRoaXMsTmwodjksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IikpLE5s''@;'; put 'put ''KExnLHRoaXMpLnNldEF0dHJpYnV0ZSgiZGlyIixObChFSix0aGlzKT8icnRsIjoibHRyIiksVGkoTmwoTGcsdGhpcykseTkuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksTmwodjksdGhpcykuYm9keS5hcHBlbmRDaGlsZChObChMZyx0aGlzKSksVGkobCx5OS5DTEFTU19FRElUT1IpLFRpKGEs''@;'; put 'put ''eTkuQ0xBU1NfSU5QVVQpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGwuYXBwZW5kQ2hpbGQoYSksTmwoTGcsdGhpcykuYXBwZW5kQ2hpbGQobCksbH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4gTmwocW0sdGhpcykucXVlcnlTZWxlY3RvcihgLiR7eTkuQ0xBU1NfSU5Q''@;'; put 'put ''VVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3JldHVybiBObChxbSx0aGlzKX1kZXN0cm95KCl7Y29uc3QgbD1ObChMZyx0aGlzKT9ObChMZyx0aGlzKS5wYXJlbnROb2RlOm51bGw7TmwocW0sdGhpcykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChObChxbSx0aGlzKSksUmcocW0sdGhpcyxudWxs''@;'; put 'put ''KSxSZyhYbSx0aGlzLG51bGwpLE5sKEdfLHRoaXMpLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKE5sKExnLHRoaXMpKX19VGwoeTksYjEpO2NvbnN0IFljdD15OTtmdW5jdGlvbiBUSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR2N0KGMpe3ZhciBsPWZ1bmN0aW9uICRjdChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdWdle2NvbnN0cnVjdG9yKGwpe1RKKHRoaXMsIndhc0xhc3RBY3Rpb25TaG93IiwhMCksVEoodGhpcywic2hvd0RlYm91bmNlZCIsbnVsbCksVEoodGhpcywiaGlkaW5nVGltZXIiLG51''@;'; put 'put ''bGwpLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1lcj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwpe3RoaXMu''@;'; put 'put ''d2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hvd0RlYm91''@;'; put 'put ''bmNlZD1NRShhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhpcy5jbGVh''@;'; put 'put ''ckxvY2FsSG9va3MoKX19VGwodWdlLGIxKTtjb25zdCBYY3Q9dWdlLHNzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIGI5KGMsbCl7Y29uc3QgYT17fTtyZXR1cm4gWW4oYyxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiYoYVtoXXx8KGFbaF09W10pLGFbaF1bZl09bChoLGYpKX0pfSks''@;'; put 'put ''YX1mdW5jdGlvbiBKbShjLGwsYSxkLGgpe1luKGMsZj0+e2YuZm9yQWxsKCh2LE0pPT57dj49MCYmTT49MCYmZnVuY3Rpb24gcnV0KGMsbCxhLGQsaCxmKXtjb25zdCB2PWgoYyxsKTtsZXQgTT1kO3YuY2xhc3NOYW1lJiYoTT0idmVydGljYWwiPT09YT9mdW5jdGlvbiB0dXQoYyxsKXtyZXR1''@;'; put 'put ''cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRsZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpOmZ1bmN0aW9uIG51dChjLGwpe3JldHVybi0xIT09Yy5p''@;'; put 'put ''bmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJlcGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCkpLGYoYyxsLCJjbGFzc05hbWUi''@;'; put 'put ''LE0pfSh2LE0sbCxhLGQsaCl9KX0pfWZ1bmN0aW9uIGRnZShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9ZnVuY3Rpb24gaEYoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmWW4oYyxkPT4oZC5mb3JBbGwoKGgsZik9Pntp''@;'; put 'put ''ZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAsITF9KSxhKSksYX1mdW5jdGlvbiBmRihjLGwpe2NvbnN0IGE9e3RvcDowLGxlZnQ6MH07aWYobCE9PWMub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmR9PWwuZGVmYXVsdFZpZXcse3RvcDpoLGxlZnQ6Zn09ZC5nZXRC''@;'; put 'put ''b3VuZGluZ0NsaWVudFJlY3QoKTthLnRvcD1oLGEubGVmdD1mfXJldHVybiBhfWZ1bmN0aW9uICRfKGMsbCxhKXtoZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGhnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUW0oYyxsLGEpe3JldHVybiBjLnNldChVZChjLGwpLGEpLGF9ZnVuY3Rpb24gSm8oYyxsKXtyZXR1cm4gYy5nZXQoVWQoYyxsKSl9ZnVuY3Rpb24gVWQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9''@;'; put 'put ''PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHBGPSJjb21tZW50cyIsT2c9ImNvbW1lbnQiLGJUPSJ2YWx1ZSIsZ0Y9InJlYWRP''@;'; put 'put ''bmx5IixfVD1wRixBSj1gcGx1Z2luOiR7cEZ9YDt2YXIgQWw9bmV3IFdlYWtNYXAsenA9bmV3IFdlYWtNYXAsbUY9bmV3IFdlYWtNYXAsdkY9bmV3IFdlYWtNYXAsa0o9bmV3IFdlYWtNYXAseUY9bmV3IFdlYWtNYXAsUGg9bmV3IFdlYWtTZXQ7Y2xhc3MgdXV0IGV4dGVuZHMgRnN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGF1dChjLGwpe2hnZShjLGwpLGwuYWRkKGMpfSh0aGlzLFBoKSxmdW5jdGlvbiBvdXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHN1dChjKXt2YXIgbD1mdW5jdGlvbiBsdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJyYW5nZSIse30pLCRfKHRoaXMsQWwsbnVsbCksJF8odGhpcyx6cCxudWxsKSwkXyh0aGlzLG1GLCExKSwkXyh0aGlzLHZGLCExKSwkXyh0aGlzLGtKLG51bGwpLCRfKHRoaXMseUYsIiIpfXN0YXRpYyBnZXQgUExVR0lO''@;'; put 'put ''X0tFWSgpe3JldHVybiBwRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3BGXX1lbmFibGVQ''@;'; put 'put ''bHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KEpvKEFsLHRoaXMpfHwoUW0oQWwsdGhpcyxuZXcgWWN0KHRoaXMuaG90LnJvb3REb2N1bWVudCx0aGlzLmhvdC5pc1J0bCgpKSksSm8oQWwsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFVkKFBoLGwseXV0KS5jYWxsKGwsLi4uZCl9KSksSm8oenAsdGhpcyl8fFFtKHpwLHRoaXMsbmV3IFhjdCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGE9PnRoaXMuYWRkVG9Db250ZXh0TWVudShhKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoYSxkLGgsZix2LE0pPT5VZChQaCx0aGlzLGd1dCkuY2FsbCh0aGlzLGEsTSkpLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJTY3JvbGwiLCgpPT5VZChQaCx0aGlzLGJ1dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT5VZChQaCx0aGlzLHBnZSkuY2FsbCh0aGlzLGEpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGE9PlVkKFBoLHRoaXMscGdlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hd''@;'; put 'put ''PWFyZ3VtZW50c1toXTtyZXR1cm4gVWQoUGgsbCxfdXQpLmNhbGwobCwuLi5kKX0pLEpvKHpwLHRoaXMpLmFkZExvY2FsSG9vaygiaGlkZSIsKCk9PnRoaXMuaGlkZSgpKSxKbyh6cCx0aGlzKS5hZGRMb2NhbEhvb2soInNob3ciLChhLGQpPT50aGlzLnNob3dBdENlbGwoYSxkKSksdGhpcy5y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7Sm8oenAsdGhpcykudXBkYXRlRGVsYXkodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYT1sLmdldENvbnRleHQoImdyaWQiKSxkPWwuYWRkQ29udGV4dChBSik7YS5hZGRT''@;'; put 'put ''aG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwiQWx0IiwiTSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtRbSh2Rix0aGlzLCEwKSx0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCgpPT57dGhpcy5zZXRSYW5nZShoKSx0aGlzLnNo''@;'; put 'put ''b3coKSx0aGlzLmZvY3VzRWRpdG9yKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZShBSiksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1FtKHZGLHRoaXMsITEpfSl9KX0sc3RvcFByb3BhZ2F0aW9uOiEwLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0LmlzQ2VsbCgpfSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57Sm8oQWwsdGhpcykuc2V0VmFsdWUoSm8oeUYsdGhpcykpLHRoaXMu''@;'; put 'put ''aGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlmOigpPT5KbyhBbCx0aGlzKS5pc1Zpc2libGUoKSYmSm8oQWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6X1R9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxi''@;'; put 'put ''YWNrOigpPT57dGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PkpvKEFsLHRoaXMpLmlzVmlzaWJsZSgpJiZKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDpfVH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxb''@;'; put 'put ''IlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT57Sm8oQWwsdGhpcykuc2V0VmFsdWUoSm8oQWwsdGhpcykuZ2V0VmFsdWUoKSksdGhpcy5oaWRlKCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxncm91cDpfVH0pfXVucmVn''@;'; put 'put ''aXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChfVCl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT10aGlzLmdldEVkaXRvcklucHV0''@;'; put 'put ''RWxlbWVudCgpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5VZChQaCx0aGlzLGZ1dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+VWQoUGgsdGhpcyxkdXQpLmNhbGwo''@;'; put 'put ''dGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+VWQoUGgsdGhpcyxwdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiZm9jdXMiLCgpPT5VZChQaCx0aGlzLHZ1dCkuY2FsbCh0aGlzKSks''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJibHVyIiwoKT0+VWQoUGgsdGhpcyxtdXQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKSwibW91c2Vkb3duIixkPT5VZChQaCx0aGlz''@;'; put 'put ''LGh1dCkuY2FsbCh0aGlzLGQpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1SbShsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVybiEhKGEmJnBvKGEsImh0Q29tbWVudENlbGwi''@;'; put 'put ''KSYmUm0oYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCk9PT1sLnRhcmdldH1zZXRDb21tZW50KGwpe2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUg''@;'; put 'put ''dXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdCBhPUpvKEFsLHRoaXMpLmdldFZhbHVlKCk7bGV0IGQ9IiI7bnVsbCE9bD9kPWw6bnVsbCE9YSYmKGQ9YSksdGhpcy51cGRhdGVDb21tZW50''@;'; put 'put ''TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse1tiVF06ZH0pLHRoaXMuaG90LnJlbmRlcigpfXNldENvbW1lbnRBdENlbGwobCxhLGQpe3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2V0Q29tbWVu''@;'; put 'put ''dChkKX1yZW1vdmVDb21tZW50KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCBy''@;'; put 'put ''YW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7dGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLE9nKSxsJiZ0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhpZGUoKX1yZW1vdmVDb21tZW50QXRDZWxsKGws''@;'; put 'put ''YSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnJlbW92ZUNvbW1lbnQoZCl9Z2V0Q29tbWVudCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldENvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxiVCl9Z2V0Q29tbWVudEF0Q2VsbChsLGEpe3JldHVybiB0aGlzLmdldENvbW1lbnRNZXRhKGwsYSxiVCl9c2hvdygpe3ZhciBsO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdlIChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTtjb25zdHtmcm9tOntyb3c6YSxjb2w6ZH19PXRoaXMucmFuZ2U7aWYoYTwwfHxhPnRoaXMuaG90LmNvdW50U291cmNlUm93cygp''@;'; put 'put ''LTF8fGQ8MHx8ZD50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sKTtyZXR1cm4gSm8oenAsdGhpcykuY2FuY2VsSGlkaW5nKCksSm8oQWwsdGhpcyku''@;'; put 'put ''c2V0VmFsdWUobnVsbCE9PShsPWhbT2ddP2hbT2ddW2JUXTpudWxsKSYmdm9pZCAwIT09bD9sOiIiKSxKbyhBbCx0aGlzKS5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXtKbyhBbCx0aGlzKS5oaWRlKCl9cmVmcmVzaEVkaXRvcigpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZKbyhBbCx0aGlzKS5pc1Zp''@;'; put 'put ''c2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3Qse3JvdzpoLGNvbDpmfT10aGlzLnJhbmdlLmZyb207bGV0IHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3Vh''@;'; put 'put ''bEluZGV4KGYpO2NvbnN0IEk9bnVsbD09PXY7Sm8oQWwsdGhpcykuc2V0UG9zaXRpb24oMCwwKSxudWxsPT09diYmKHY9YS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpKSksbnVsbD09PU0mJihNPWQuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLC0xKSkpO2NvbnN0IEc9bnVsbD09PXYsaWU9bnVsbD09PU07dj12Pz8wLE09TT8/MDtjb25zdHtyb290V2luZG93OnVlLHZpZXc6e193dDp5ZX19PXRoaXMuaG90LHt3dFRhYmxlOkVlfT15ZSxqZT15ZS5nZXRDZWxs''@;'; put 'put ''KHtyb3c6dixjb2w6TX0sITApLHFlPXRoaXMuZ2V0Q29tbWVudE1ldGEoaCxmLCJzdHlsZSIpO3FlP0pvKEFsLHRoaXMpLnNldFNpemUocWUud2lkdGgscWUuaGVpZ2h0KTpKbyhBbCx0aGlzKS5yZXNldFNpemUoKTtjb25zdCBydD1pZT8wOkVlLmdldENvbHVtbldpZHRoKE0pLHB0PUkmJiFH''@;'; put 'put ''P3h1KGplKTowLHtsZWZ0OmR0LHRvcDpKdCx3aWR0aDp2bixoZWlnaHQ6Q259PWplLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDp0bixoZWlnaHQ6TW59PUpvKEFsLHRoaXMpLmdldFNpemUoKSx7aW5uZXJXaWR0aDpDcixpbm5lckhlaWdodDpHcn09dGhpcy5ob3Qucm9vdFdpbmRv''@;'; put 'put ''dyxtcj10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEduPWYwKHRoaXMuaG90LnJvb3REb2N1bWVudCksYWk9RSQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MCxfaT1UJCh0aGlzLmhvdC5yb290V2luZG93KT9HbjowO2xldCBPbj1kdCt1ZS5zY3JvbGxYK3J0LHpyPUp0''@;'; put 'put ''K3VlLnNjcm9sbFkrcHQ7dGhpcy5ob3QuaXNSdGwoKSYmKE9uLT10bitydCksdGhpcy5ob3QuaXNMdHIoKSYmZHQrdm4rdG4+Q3ItYWk/T249ZHQrdWUuc2Nyb2xsWC10bi0xOnRoaXMuaG90LmlzUnRsKCkmJk9uPC0obXIuc2Nyb2xsV2lkdGgtbXIuY2xpZW50V2lkdGgpJiYoT249ZHQrdWUu''@;'; put 'put ''c2Nyb2xsWCtydCsxKSxKdCtNbj5Hci1faSYmKHpyLT1Nbi1DbisxKSxKbyhBbCx0aGlzKS5zZXRQb3NpdGlvbihPbix6ciksSm8oQWwsdGhpcykuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKGgsZixnRikpLEpvKEFsLHRoaXMpLm9ic2VydmVTaXplKCl9Zm9jdXNFZGl0''@;'; put 'put ''b3IoKXtKbyhBbCx0aGlzKS5mb2N1cygpfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbT2ddO2xldCBmO2g/KGY9ZzEoaCkseEUoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSxPZyxmKX1nZXRDb21tZW50TWV0YShs''@;'; put 'put ''LGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbT2ddKXJldHVybiBoW09nXVtkXX1hZGRUb0NvbnRleHRNZW51KGwpe2wuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gUWN0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzQWRkRWRpdCIsbmFtZSgpe3ZhciBs''@;'; put 'put ''O2NvbnN0IGE9bnVsbD09PShsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1hJiZhLmlzQ2VsbCgpJiZjLmdldENvbW1lbnRBdENlbGwoYS5yb3csYS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShm''@;'; put 'put ''cSk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGhxKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtjLnNldFJhbmdlKGwpLGMuc2hvdygpLGMuZm9jdXNFZGl0b3IoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVu''@;'; put 'put ''ZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0aW9uIGV1dChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlbW92ZSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocHEpfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9Pnth''@;'; put 'put ''Pj0wJiZkPj0wJiZjLnJlbW92ZUNvbW1lbnRBdENlbGwoYSxkLCExKX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJl''@;'; put 'put ''Um93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBpdXQoYyl7cmV0dXJue2tleToiY29tbWVudHNSZWFk''@;'; put 'put ''T25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGdxKTtyZXR1cm4gaEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGQsaCk9PmMuZ2V0Q29tbWVudE1ldGEoZCxoLGdGKSk/ZGdlKGwpOmx9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgp''@;'; put 'put ''LmZvckFsbCgoYSxkKT0+e2lmKGE+PTAmJmQ+PTApe2NvbnN0IGg9ISFjLmdldENvbW1lbnRNZXRhKGEsZCxnRik7Yy51cGRhdGVDb21tZW50TWV0YShhLGQse1tnRl06IWh9KX19KX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8''@;'; put 'put ''bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IWMuZ2V0Q29tbWVudEF0Q2VsbChsLmhpZ2hsaWdodC5yb3csbC5oaWdobGlnaHQuY29sKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlz''@;'; put 'put ''LmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpKX1nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKXtyZXR1cm4gSm8oQWwsdGhpcykuZ2V0SW5wdXRFbGVtZW50KCl9ZGVzdHJveSgpe3ZhciBsLGE7bnVsbD09PShsPUpvKEFsLHRoaXMpKXx8''@;'; put 'put ''dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbnVsbD09PShhPUpvKHpwLHRoaXMpKXx8dm9pZCAwPT09YXx8YS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkdXQoYyl7aWYodGhpcy5ob3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFKbyhtRix0aGlzKSYmIXRoaXMudGFy''@;'; put 'put ''Z2V0SXNDb21tZW50VGV4dEFyZWEoYykpe2NvbnN0IGw9Um0oYy50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgYT1udWxsO2wmJihhPXRoaXMuaG90LmdldENvb3JkcyhsKSksKCFsfHx0aGlzLnJhbmdlLmZyb20mJmEmJih0aGlzLnJhbmdlLmZyb20ucm93IT09YS5yb3d8fHRoaXMucmFuZ2Uu''@;'; put 'put ''ZnJvbS5jb2whPT1hLmNvbCkpJiZ0aGlzLmhpZGUoKX19ZnVuY3Rpb24gaHV0KGMpe2Muc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZnV0KGMpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDtpZighKEpvKG1GLHRoaXMpfHxKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKXx8cG8oYy50''@;'; put 'put ''YXJnZXQsInd0Qm9yZGVyIil8fEpvKGtKLHRoaXMpPT09Yy50YXJnZXQpJiZKbyhBbCx0aGlzKSlpZihRbShrSix0aGlzLGwuZWxlbWVudEZyb21Qb2ludChjLmNsaWVudFgsYy5jbGllbnRZKSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChjKSl7Y29uc3QgYT10aGlzLmhvdC5fY3Jl''@;'; put 'put ''YXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhjLnRhcmdldCkpO0pvKHpwLHRoaXMpLnNob3coYSl9ZWxzZSBMbShjLnRhcmdldCxsKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykmJkpvKHpwLHRoaXMpLmhpZGUoKX1mdW5jdGlvbiBwdXQoKXtRbShtRix0aGlzLCEx''@;'; put 'put ''KX1mdW5jdGlvbiBndXQoYyxsKXtsW09nXSYmbFtPZ11bYlRdJiZUaShjLGwuY29tbWVudGVkQ2VsbENsYXNzTmFtZSl9ZnVuY3Rpb24gbXV0KCl7UW0oeUYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNl''@;'; put 'put ''dENvbW1lbnQoKX1mdW5jdGlvbiB2dXQoKXtRbSh5Rix0aGlzLHRoaXMuZ2V0Q29tbWVudCgpKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShBSil9ZnVuY3Rpb24geXV0KGMsbCl7dGhpcy51cGRhdGVDb21tZW50''@;'; put 'put ''TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wse3N0eWxlOnt3aWR0aDpjLGhlaWdodDpsfX0pfWZ1bmN0aW9uIHBnZShjKXtKbyhBbCx0aGlzKS5pc0ZvY3VzZWQoKSYmQjIoYyl9ZnVuY3Rpb24gYnV0KCl7Sm8odkYsdGhpcyl8fHRoaXMuaGlkZSgpfWZ1bmN0''@;'; put 'put ''aW9uIF91dCgpe2NvbnN0IGM9Sm8oQWwsdGhpcykuZ2V0RWRpdG9yRWxlbWVudCgpO2xvKGMsL2h0LXRoZW1lLS4qL2cpLFRpKGMsdGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpKX1mdW5jdGlvbiBESihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd3V0KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IEN1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZ2dle2NvbnN0cnVjdG9yKGwpe0RKKHRoaXMsImhvdCIsdm9pZCAwKSxESih0aGlzLCJjb21tYW5kcyIse30pLERKKHRoaXMsImNvbW1vbkNhbGxiYWNrIixudWxs''@;'; put 'put ''KSx0aGlzLmhvdD1sfXJlZ2lzdGVyQ29tbWFuZChsLGEpe3RoaXMuY29tbWFuZHNbbF09YX1zZXRDb21tb25DYWxsYmFjayhsKXt0aGlzLmNvbW1vbkNhbGxiYWNrPWx9ZXhlY3V0ZShsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7''@;'; put 'put ''aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07Y29uc3QgZj1sLnNwbGl0KCI6Iiksdj1mWzBdLE09Mj09PWYubGVuZ3RoP2ZbMV06bnVsbDtsZXQgST10aGlzLmNvbW1hbmRzW3ZdO2lmKCFJKXRocm93IG5ldyBFcnJvcihgTWVudSBjb21tYW5kICcke3Z9JyBub3QgZXhpc3RzLmApO2lmKE0mJkku''@;'; put 'put ''c3VibWVudSYmKEk9ZnVuY3Rpb24gU3V0KGMsbCl7bGV0IGE7cmV0dXJuIFluKGwsZD0+e2NvbnN0IGg9ZC5rZXk/ZC5rZXkuc3BsaXQoIjoiKTpudWxsO2lmKEFycmF5LmlzQXJyYXkoaCkmJmhbMV09PT1jKXJldHVybiBhPWQsITF9KSxhfShNLEkuc3VibWVudS5pdGVtcykpLCEwPT09SS5k''@;'; put 'put ''aXNhYmxlZHx8ImZ1bmN0aW9uIj09dHlwZW9mIEkuZGlzYWJsZWQmJiEwPT09SS5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KXx8VHUoSSwic3VibWVudSIpKXJldHVybjtjb25zdCBHPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBJLmNhbGxiYWNrJiZHLnB1c2goSS5jYWxsYmFjayksImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2smJkcucHVzaCh0aGlzLmNvbW1vbkNhbGxiYWNrKSxkLnVuc2hpZnQoZi5qb2luKCI6IikpLFluKEcsaWU9PmllLmFwcGx5KHRoaXMuaG90LGQpKX19Y29uc3QgSzI9ImFsaWdubWVudCIsYkY9ImNsZWFyX2NvbHVtbiIsd1Q9ImNvbF9sZWZ0''@;'; put 'put ''IixDVD0iY29sX3JpZ2h0IixTVD0ibWFrZV9yZWFkX29ubHkiLF9GPSJyZWRvIixNVD0icmVtb3ZlX2NvbCIsd0Y9InJlbW92ZV9yb3ciLENGPSJyb3dfYWJvdmUiLFNGPSJyb3dfYmVsb3ciLHhUPSJub19pdGVtcyIsTUY9InVuZG8iLG1nZT1bQ0YsU0Ysd1QsQ1QsYkYsd0YsTVQsTUYsX0Ys''@;'; put 'put ''U1QsSzIsc3MseFRdLHZnZT17W3NzXTpmdW5jdGlvbiBKY3QoKXtyZXR1cm57bmFtZTpzc319LFt4VF06ZnVuY3Rpb24gT3V0KCl7cmV0dXJue2tleTp4VCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHSyl9LGRpc2FibGVkOiEwLGlzQ29tbWFuZDohMX19LFtDRl06''@;'; put 'put ''ZnVuY3Rpb24gUnV0KCl7cmV0dXJue2tleTpDRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJv''@;'; put 'put ''dmUiLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0Fib3ZlIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGln''@;'; put 'put ''aGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Um93cygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFs''@;'; put 'put ''bG93SW5zZXJ0Um93fX19LFtTRl06ZnVuY3Rpb24gTHV0KCl7cmV0dXJue2tleTpTRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKTt0''@;'; put 'put ''aGlzLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dCZWxvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8''@;'; put 'put ''Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFt3VF06ZnVuY3Rpb24gRXV0KCl7''@;'; put 'put ''cmV0dXJue2tleTp3VCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShxSyl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9j''@;'; put 'put ''b2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8''@;'; put 'put ''fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29y''@;'; put 'put ''bmVyKCkmJjA9PT10aGlzLmNvdW50Q29scygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFtDVF06ZnVuY3Rpb24gVHV0KCl7cmV0dXJue2tleTpDVCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShYSyl9LGNh''@;'; put 'put ''bGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wUmlnaHRDb3JuZXIoKSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9zdGFydCI6Imluc2VydF9jb2xfZW5kIjt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uUmlnaHQiKX0s''@;'; put 'put ''ZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIo''@;'; put 'put ''KSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbYkZdOmZ1bmN0aW9uIHh1dCgpe3JldHVybntrZXk6YkYs''@;'; put 'put ''bmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobnEpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgwLGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5z''@;'; put 'put ''dGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHwhdGhpcy5zZWxlY3Rpb24uaXNT''@;'; put 'put ''ZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpcmV0dXJuITA7bGV0IGw9ITE7cmV0dXJuIGMuZm9yQWxsKChhLGQpPT57aWYoYTwwfHxkPDApcmV0dXJuITA7Y29uc3R7cmVhZE9ubHk6aH09dGhpcy5nZXRDZWxsTWV0YShhLGQpO3JldHVybiEhaHx8KGw9ITAsITEpfSksIWx9fX0sW3dGXTpmdW5j''@;'; put 'put ''dGlvbiBJdXQoKXtyZXR1cm57a2V5OndGLG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFthLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKSyxsKX0s''@;'; put 'put ''Y2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1vdmVfcm93IixmdW5jdGlvbiBZbnQoYyl7Y29uc3QgbD14XyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPWVUKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNy''@;'; put 'put ''ZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxsUmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86SX09YSh2KSxHPU1hdGgubWF4KE0ucm93LDApO1luKEFycmF5LmZyb20obmV3IEFycmF5KEkucm93LUcrMSksKHVl''@;'; put 'put ''LHllKT0+Ryt5ZSksdWU9PntkLmhhcyh1ZSl8fGQuYWRkKHVlKX0pfSkscXUoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sSSxHKT0+KDAhPT1JJiZNPT09R1tJLTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksMSwiQ29udGV4''@;'; put 'put ''dE1lbnUucmVtb3ZlUm93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDApcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlzLnNlbGVjdGlv''@;'; put 'put ''bi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW01UXTpmdW5jdGlvbiBEdXQoKXtyZXR1cm57a2V5Ok1U''@;'; put 'put ''LG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUUssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigi''@;'; put 'put ''cmVtb3ZlX2NvbCIsZnVuY3Rpb24gV250KGMpe2NvbnN0IGw9eF8oYy5nZXRTZWxlY3RlZCgpKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT1lVChsLHtjcmVhdGVDZWxsQ29vcmRzOmMuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRl''@;'; put 'put ''Q2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBTZXQ7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29uc3R7ZnJvbTpNLHRvOkl9PWEodiksRz1NYXRoLm1heChNLmNvbCwwKTtZbihBcnJheS5mcm9tKG5ldyBBcnJheShJLmNvbC1HKzEpLCh1ZSx5ZSk9PkcreWUpLHVlPT57ZC5oYXMo''@;'; put 'put ''dWUpfHxkLmFkZCh1ZSl9KX0pLHF1KEFycmF5LmZyb20oZCkuc29ydCgodixNKT0+di1NKSwodixNLEksRyk9PigwIT09SSYmTT09PUdbSS0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtNLDFdKSx2KSxbXSl9KHRoaXMpLG51bGwsIkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiIp''@;'; put 'put ''fSxkaXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5j''@;'; put 'put ''b3VudENvbHMoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtN''@;'; put 'put ''Rl06ZnVuY3Rpb24gUHV0KCl7cmV0dXJue2tleTpNRixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlcSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikudW5kbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIp''@;'; put 'put ''O3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNVbmRvQXZhaWxhYmxlKCl9fX0sW19GXTpmdW5jdGlvbiBrdXQoKXtyZXR1cm57a2V5Ol9GLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNl''@;'; put 'put ''KHRxKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8i''@;'; put 'put ''KS5pc1JlZG9BdmFpbGFibGUoKX19fSxbU1RdOmZ1bmN0aW9uIEF1dCgpe3JldHVybntrZXk6U1QsY2hlY2thYmxlOiEwLGFyaWFDaGVja2VkKCl7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChsLGEpPT50aGlzLmdldENlbGxNZXRhKGwsYSkucmVhZE9ubHkpfSxhcmlhTGFi''@;'; put 'put ''ZWwoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9QKX0sbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfUCk7cmV0dXJuIGhGKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1kZ2Uo''@;'; put 'put ''YykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWhGKGMsKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7WW4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHki''@;'; put 'put ''LCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAh''@;'; put 'put ''PT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW0syXTpmdW5jdGlvbiBNdXQoKXtyZXR1cm57a2V5OksyLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG1xKX0sZGlz''@;'; put 'put ''YWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShjJiYhYy5pc1NpbmdsZUhlYWRlcigpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmIXRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX0sc3VibWVudTp7aXRlbXM6W3trZXk6YCR7SzJ9OmxlZnRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHZxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YjkoYywoaCxmKT0+''@;'; put 'put ''dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRMZWZ0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxs''@;'; put 'put ''TWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9OmNlbnRlcmAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeXEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1iOShjLChoLGYpPT50''@;'; put 'put ''aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2Vs''@;'; put 'put ''bE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke0syfTpyaWdodGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYnEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1iOShjLChoLGYpPT50''@;'; put 'put ''aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodFJpZ2h0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxs''@;'; put 'put ''TWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Omp1c3RpZnlgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9xKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9YjkoYywoaCxmKT0+''@;'; put 'put ''dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRD''@;'; put 'put ''ZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOnNzfSx7a2V5OmAke0syfTp0b3BgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9Yjko''@;'; put 'put ''YywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxKbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5z''@;'; put 'put ''ZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7SzJ9Om1pZGRsZWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1iOShjLCho''@;'; put 'put ''LGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEptKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNl''@;'; put 'put ''dENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtLMn06Ym90dG9tYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTcSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPWI5KGMsKGgs''@;'; put 'put ''Zik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodEJvdHRvbSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksSm0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0''@;'; put 'put ''Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfV19fX19O2Z1bmN0aW9uIHlnZSgpe2NvbnN0IGM9e307cmV0dXJuIFhvKHZnZSwobCxhKT0+e2NbYV09bCgpfSksY31mdW5jdGlvbiBJSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRnV0KGMpe3ZhciBsPWZ1''@;'; put 'put ''bmN0aW9uIEh1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYmdle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO0lK''@;'; put 'put ''KHRoaXMsImhvdCIsdm9pZCAwKSxJSih0aGlzLCJwcmVkZWZpbmVkSXRlbXMiLHlnZSgpKSxJSih0aGlzLCJkZWZhdWx0T3JkZXJQYXR0ZXJuIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhp''@;'; put 'put ''cy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLFhvKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5hbWU9PT1zcz8oYVtzc109ZCxmPXNzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5r''@;'; put 'put ''ZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9YX1nZXRJdGVtcygpe3JldHVybiBmdW5jdGlvbiBOdXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZD1bXTtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXku''@;'; put 'put ''aXNBcnJheShoKXx8KGg9bCkscW8oaCk/WG8oaCwoZix2KT0+e2xldCBNPWFbInN0cmluZyI9PXR5cGVvZiBmP2Y6dl07TXx8KE09ZikscW8oZik/RXUoTSxmKToic3RyaW5nIj09dHlwZW9mIE0mJihNPXtuYW1lOk19KSx2b2lkIDA9PT1NLmtleSYmKE0ua2V5PXYpLGQucHVzaChNKX0pOllu''@;'; put 'put ''KGgsKGYsdik9PntsZXQgTT1hW2ZdOyFNJiZtZ2UuaW5kZXhPZihmKT49MHx8KE18fChNPXtuYW1lOmYsa2V5OmAke3Z9YH0pLHFvKGYpJiZFdShNLGYpLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmluZWRJdGVtcyl9fWZ1bmN0aW9uIGU2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWdXQoYyl7dmFyIGw9ZnVuY3Rpb24gQnV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwh''@;'; put 'put ''YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHBy''@;'; put 'put ''aW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBqdXR7Y29uc3RydWN0b3IobCxhKXtlNih0aGlzLCJ0b3AiLHZvaWQgMCksZTYodGhpcywidG9wUmVsYXRpdmUiLHZvaWQgMCksZTYodGhpcywibGVmdCIsdm9pZCAwKSxlNih0aGlzLCJsZWZ0UmVsYXRpdmUiLHZvaWQgMCks''@;'; put 'put ''ZTYodGhpcywic2Nyb2xsVG9wIix2b2lkIDApLGU2KHRoaXMsInNjcm9sbExlZnQiLHZvaWQgMCksZTYodGhpcywiY2VsbEhlaWdodCIsdm9pZCAwKSxlNih0aGlzLCJjZWxsV2lkdGgiLHZvaWQgMCk7Y29uc3QgZD1hLnNjcm9sbFksaD1hLnNjcm9sbFg7bGV0IGYsdixNLEksRyxpZTt0aGlz''@;'; put 'put ''LnJvb3RXaW5kb3c9YSx0aGlzLnR5cGU9dGhpcy5nZXRTb3VyY2VUeXBlKGwpLCJsaXRlcmFsIj09PXRoaXMudHlwZT8oZj1wYXJzZUludChsLnRvcCwxMCksTT1wYXJzZUludChsLmxlZnQsMTApLEc9bC5oZWlnaHR8fDAsaWU9bC53aWR0aHx8MCx2PWYsST1NLGYrPWQsTSs9aCk6ImV2ZW50''@;'; put 'put ''Ij09PXRoaXMudHlwZSYmKGY9cGFyc2VJbnQobC5wYWdlWSwxMCksTT1wYXJzZUludChsLnBhZ2VYLDEwKSxHPWwudGFyZ2V0LmNsaWVudEhlaWdodCxpZT1sLnRhcmdldC5jbGllbnRXaWR0aCx2PWYtZCxJPU0taCksdGhpcy50b3A9Zix0aGlzLnRvcFJlbGF0aXZlPXYsdGhpcy5sZWZ0PU0s''@;'; put 'put ''dGhpcy5sZWZ0UmVsYXRpdmU9SSx0aGlzLnNjcm9sbFRvcD1kLHRoaXMuc2Nyb2xsTGVmdD1oLHRoaXMuY2VsbEhlaWdodD1HLHRoaXMuY2VsbFdpZHRoPWllfWdldFNvdXJjZVR5cGUobCl7bGV0IGE9ImxpdGVyYWwiO3JldHVybiBsIGluc3RhbmNlb2YgRXZlbnQmJihhPSJldmVudCIpLGF9''@;'; put 'put ''Zml0c0Fib3ZlKGwpe3JldHVybiB0aGlzLnRvcFJlbGF0aXZlPj1sLm9mZnNldEhlaWdodH1maXRzQmVsb3cobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmUrbC5vZmZzZXRIZWlnaHQ8PShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhp''@;'; put 'put ''cy5yb290V2luZG93LmlubmVySGVpZ2h0KX1maXRzT25SaWdodChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmUrdGhpcy5jZWxsV2lkdGgrbC5vZmZzZXRXaWR0aDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5k''@;'; put 'put ''b3cuaW5uZXJXaWR0aCl9Zml0c09uTGVmdChsKXtyZXR1cm4gdGhpcy5sZWZ0UmVsYXRpdmU+PWwub2Zmc2V0V2lkdGh9fWZ1bmN0aW9uIEVUKGMsbCxhKXsoZnVuY3Rpb24genV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBVbyhjLGwpe3JldHVybiBjLmdldChfZ2UoYyxsKSl9ZnVuY3Rpb24geEYoYyxsLGEpe3JldHVybiBjLnNldChfZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIF9nZShjLGwsYSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFgxPW5ldyBXZWFrTWFwLFpkPW5ldyBX''@;'; put 'put ''ZWFrTWFwLFdkPW5ldyBXZWFrTWFwLFJKPW5ldyBXZWFrTWFwLEtfPW5ldyBXZWFrTWFwO2NsYXNzIFV1dHtjb25zdHJ1Y3RvcihsKXtFVCh0aGlzLFgxLHZvaWQgMCksRVQodGhpcyxaZCx2b2lkIDApLEVUKHRoaXMsV2Qsdm9pZCAwKSxFVCh0aGlzLFJKLCExKSxFVCh0aGlzLEtfLHthYm92''@;'; put 'put ''ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9KSx4RihSSix0aGlzLGwpfXNldE9mZnNldChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4gVW8oS18sdGhpcylbbF09YSx0aGlzfXNldEVsZW1lbnQobCl7cmV0''@;'; put 'put ''dXJuIHhGKFgxLHRoaXMsbCksdGhpc31zZXRQYXJlbnRFbGVtZW50KGwpe3JldHVybiB4RihaZCx0aGlzLGwpLHRoaXN9dXBkYXRlUG9zaXRpb24obCl7eEYoV2QsdGhpcyxuZXcganV0KGwsVW8oWDEsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpLFVvKFJKLHRoaXMpPyhVbyhX''@;'; put 'put ''ZCx0aGlzKS5maXRzQmVsb3coVW8oWDEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpOlVvKFdkLHRoaXMpLmZpdHNBYm92ZShVbyhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy51cGRh''@;'; put 'put ''dGVIb3Jpem9udGFsUG9zaXRpb24oKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpLHRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKSl9dXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCl7InJ0bCI9PT1VbyhYMSx0aGlzKS5kaXI/VW8oV2QsdGhpcykuZml0c09uTGVmdChV''@;'; put 'put ''byhYMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpOlVvKFdkLHRoaXMpLmZpdHNPblJpZ2h0KFVvKFgxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6dGhpcy5zZXRQb3NpdGlv''@;'; put 'put ''bk9uTGVmdE9mQ3Vyc29yKCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcigpe2xldCBsPVVvKEtfLHRoaXMpLmFib3ZlK1VvKFdkLHRoaXMpLnRvcC1VbyhYMSx0aGlzKS5vZmZzZXRIZWlnaHQ7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0''@;'; put 'put ''Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhXZCx0aGlzKS50b3ArVW8oV2QsdGhpcykuY2Vs''@;'; put 'put ''bEhlaWdodC1VbyhYMSx0aGlzKS5zY3JvbGxIZWlnaHQraCtmfVVvKFgxLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykuYmVsb3crVW8oV2QsdGhpcykudG9wKzE7aWYoVW8oWmQsdGhpcykpe2NvbnN0IGQ9VW8oWmQs''@;'; put 'put ''dGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKFVvKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odF9tYXN0ZXIiKSksaD1OdW1iZXIucGFyc2VJbnQoZC5wYWRkaW5nVG9wLDEwKSxmPU51bWJlci5wYXJzZUludChkLmJvcmRlclRvcCwxMCk7bD1VbyhX''@;'; put 'put ''ZCx0aGlzKS50b3AtaC1mLTF9VW8oWDEsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCl7bGV0IGw9VW8oV2QsdGhpcykubGVmdDtpZihVbyhaZCx0aGlzKSl7Y29uc3QgYT1VbyhaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LGQ9''@;'; put 'put ''TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlclJpZ2h0V2lkdGgsMTApO2wrPVVvKFdkLHRoaXMpLmNlbGxXaWR0aCtkfWVsc2UgbCs9VW8oS18sdGhpcykucmlnaHQ7VW8oWDEsdGhpcykuc3R5bGUu''@;'; put 'put ''bGVmdD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl7bGV0IGw9VW8oS18sdGhpcykubGVmdCtVbyhXZCx0aGlzKS5sZWZ0LVVvKFgxLHRoaXMpLm9mZnNldFdpZHRoO2lmKFVvKFpkLHRoaXMpKXtjb25zdCBhPVVvKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZp''@;'; put 'put ''ZXc7bC09TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShVbyhaZCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlckxlZnRXaWR0aCwxMCl9VW8oWDEsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH19ZnVuY3Rpb24gd2dlKGMpe2xldHtpbml0aWFsUGFnZTps''@;'; put 'put ''PS0xLHNpemU6YT0oKCk9PjApLG9uSXRlbVNlbGVjdDpkPSgoKT0+e30pLG9uQ2xlYXI6aD0oKCk9Pnt9KX09Yztjb25zdCBmPW5ldyBTZXQ7bGV0IHY9a3MobCwtMSxqZSgpLTEpO2Z1bmN0aW9uIE0ocnQscHQpe2NvbnN0IGR0PWplKCktMTtyZXR1cm4gcnQ8MCYmKHJ0PWR0KSxydD5kdCYm''@;'; put 'put ''KHJ0PTApLGYuaGFzKHJ0KT8tMTooZi5hZGQocnQpLCExPT09ZChydCwhMSkmJihydD1NKDE9PT1wdD8rK3J0Oi0tcnQscHQpKSxydCl9ZnVuY3Rpb24gamUoKXtyZXR1cm4gTWF0aC5tYXgoYSgpLDApfXJldHVybntzZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBJKHJ0KXtydD4tMSYmcnQ8amUo''@;'; put 'put ''KSYmITEhPT1kKHJ0LCEwKSYmKHY9cnQpfSxnZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBHKCl7cmV0dXJuIHZ9LHRvRmlyc3RJdGVtOmZ1bmN0aW9uIGllKCl7amUoKT4wJiYoZi5jbGVhcigpLHY9TSgwLDEpKX0sdG9MYXN0SXRlbTpmdW5jdGlvbiB1ZSgpe2plKCk+MCYmKGYuY2xlYXIoKSx2''@;'; put 'put ''PU0oamUoKS0xLC0xKSl9LHRvTmV4dEl0ZW06ZnVuY3Rpb24geWUoKXtqZSgpPjAmJihmLmNsZWFyKCksdj1NKCsrdiwxKSl9LHRvUHJldmlvdXNJdGVtOmZ1bmN0aW9uIEVlKCl7amUoKT4wJiYoZi5jbGVhcigpLHY9TSgtLXYsLTEpKX0sZ2V0U2l6ZTpqZSxjbGVhcjpmdW5jdGlvbiBxZSgp''@;'; put 'put ''e2YuY2xlYXIoKSx2PWwsaCgpfX19ZnVuY3Rpb24gTEooYyl7cmV0dXJuIFR1KGMsInN1Ym1lbnUiKX1mdW5jdGlvbiBPSihjKXtyZXR1cm4gbmV3IFJlZ0V4cChzcywiaSIpLnRlc3QoYy5uYW1lKX1mdW5jdGlvbiBFRihjLGwpe3JldHVybiEwPT09Yy5kaXNhYmxlZHx8ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIGMuZGlzYWJsZWQmJiEwPT09Yy5kaXNhYmxlZC5jYWxsKGwpfWZ1bmN0aW9uIENnZShjKXtyZXR1cm4gVHUoYywiZGlzYWJsZVNlbGVjdGlvbiIpfWZ1bmN0aW9uIFNnZShjLGwpe2NvbnN0IGE9Yy5zbGljZSgwKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoJiZhW2RdLm5hbWU9PT1s''@;'; put 'put ''OylhLnNoaWZ0KCk7cmV0dXJuIGF9ZnVuY3Rpb24gUXV0KGMpe3JldHVybiEwPT09Yy5jaGVja2FibGV9ZnVuY3Rpb24gcjB0KGMpe3JldHVybihsLGEsZCxoLGYsdik9Pntjb25zdCBNPWwuZ2V0U291cmNlRGF0YUF0Um93KGQpLEk9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2''@;'; put 'put ''IiksRz0iZnVuY3Rpb24iPT10eXBlb2Ygdj92LmNhbGwoYyk6dixpZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5hcmlhTGFiZWw/TS5hcmlhTGFiZWwuY2FsbChjKTpNLmFyaWFMYWJlbCx1ZT0iZnVuY3Rpb24iPT10eXBlb2YgTS5hcmlhQ2hlY2tlZD9NLmFyaWFDaGVja2VkLmNhbGwoYyk6TS5h''@;'; put 'put ''cmlhQ2hlY2tlZDtpZih4cChhKSxUaShJLCJodEl0ZW1XcmFwcGVyIiksYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCB5ZT0hRUYoTSxjKSYmIUNnZShNKSYmIU9KKE0pO3ZvKGEsWy4uLlF1dChNKT9bWyJyb2xlIiwibWVudWl0ZW1jaGVja2JveCJdLG1FKGllKSxJMmUodWUpXTpb''@;'; put 'put ''WyJyb2xlIiwibWVudWl0ZW0iXSxtRShHKV0sLi4ueWU/W043KC0xKV06W10sLi4uRUYoTSxjKT9bWyJhcmlhLWRpc2FibGVkIiwidHJ1ZSJdXTpbXSwuLi5MSihNKT9bTjIoITEpXTpbXV0pfWEuY2xhc3NOYW1lPSIiLGEuYXBwZW5kQ2hpbGQoSSksT0ooTSk/VGkoYSwiaHRTZXBhcmF0b3Ii''@;'; put 'put ''KToiZnVuY3Rpb24iPT10eXBlb2YgTS5yZW5kZXJlcj8oVGkoYSwiaHRDdXN0b21NZW51UmVuZGVyZXIiKSxhLmFwcGVuZENoaWxkKE0ucmVuZGVyZXIobCxJLGQsaCxmLEcpKSk6ejcoSSxHKSxFRihNLGMpP1RpKGEsImh0RGlzYWJsZWQiKTpDZ2UoTSk/VGkoYSwiaHRTZWxlY3Rpb25EaXNh''@;'; put 'put ''YmxlZCIpOkxKKE0pJiZUaShhLCJodFN1Ym1lbnUiKX19ZnVuY3Rpb24gUEooYyxsLGEpeyhmdW5jdGlvbiBpMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBhMHQoYyl7dmFyIGw9ZnVuY3Rpb24gbzB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGSihjLGwsYSl7''@;'; put 'put ''cmV0dXJuIGMuc2V0KEVnZShjLGwpLGEpLGF9ZnVuY3Rpb24gXzkoYyxsKXtyZXR1cm4gYy5nZXQoRWdlKGMsbCkpfWZ1bmN0aW9uIEVnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFRUPW5ldyBXZWFrTWFwLFRGPW5ldyBXZWFrTWFwLEFGPW5ldyBXZWFrTWFwO2NsYXNzIHFfe2dldCB0YWJsZUJvcmRlcldpZHRoKCl7cmV0dXJuIHZvaWQgMD09PV85KEFGLHRo''@;'; put 'put ''aXMpJiZ0aGlzLmhvdE1lbnUmJkZKKEFGLHRoaXMscGFyc2VJbnQodGhpcy5ob3RNZW51LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZS5UQUJMRSkuYm9yZGVyV2lkdGgsMTApKSxfOShBRix0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe3Zh''@;'; put 'put ''ciBkPXRoaXM7VXAodGhpcywiaG90Iix2b2lkIDApLFVwKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksVXAodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgajIodGhpcykpLFVwKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSxVcCh0aGlzLCJwb3NpdGlvbmVyIix2b2lkIDApLFVwKHRoaXMsImhvdE1l''@;'; put 'put ''bnUiLG51bGwpLFVwKHRoaXMsImhvdFN1Yk1lbnVzIix7fSksVXAodGhpcywicGFyZW50TWVudSIsdm9pZCAwKSxVcCh0aGlzLCJtZW51SXRlbXMiLG51bGwpLFVwKHRoaXMsIm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLG51bGwpLFBKKHRoaXMsVFQsdm9pZCAwKSxQSih0aGlzLFRGLHZv''@;'; put 'put ''aWQgMCksUEoodGhpcyxBRix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlzLmhvdC5yb290RG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50fSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5wb3NpdGlvbmVyPW5ldyBVdXQodGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0KSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVs''@;'; put 'put ''bCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3Zd''@;'; put 'put ''O3JldHVybiBkLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLC4uLmYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGgsZik9Pnt2YXIgdjtmfHxudWxsPT09KHY9dGhpcy5ob3RNZW51KXx8dm9pZCAwPT09dnx8di51c2VUaGVtZSho''@;'; put 'put ''KX0pfXJlZ2lzdGVyRXZlbnRzKCl7bGV0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdztmb3IoO2w7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwibW91c2Vkb3duIixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwidG91Y2hzdGFydCIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSks''@;'; put 'put ''bD1CNyhsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXROYXZpZ2F0b3IoKXtyZXR1cm4gXzkoVFQsdGhpcyl9Z2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCl7cmV0dXJuIF85KFRGLHRoaXMpfWdldFNlbGVjdGVkSXRlbSgpe3JldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRl''@;'; put 'put ''bSgpP3RoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3codGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpWzBdKTpudWxsfWhhc1NlbGVjdGVkSXRlbSgpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKSl9aXNTdWJNZW51KCl7cmV0dXJu''@;'; put 'put ''IG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlT3BlbiIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgbD1NRShNPT50aGlzLm9wZW5T''@;'; put 'put ''dWJNZW51KE0pLDMwMCksYT10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgZD0hMSxoPUltKHRoaXMubWVudUl0ZW1zLE09PihNLmtleT09PXhUJiYoZD0hMCksZnVuY3Rpb24gS3V0KGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5o''@;'; put 'put ''aWRkZW4uY2FsbChsKSl9KE0sdGhpcy5ob3QpKSk7aWYoaC5sZW5ndGg8MSYmIWQpaC5wdXNoKHlnZSgpW3hUXSk7ZWxzZSBpZigwPT09aC5sZW5ndGgpcmV0dXJuO2g9ZnVuY3Rpb24gSnV0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTpzcyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9U2dlKGEsbCksYT1mdW5jdGlvbiBxdXQoYyxsKXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPVNnZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBYdXQoYyl7Y29uc3QgbD1bXTtyZXR1cm4g''@;'; put 'put ''WW4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2goYSl9KSxsfShhKSxhfShoLHNzKTtsZXQgZj0hMTtjb25zdCB2PXtkYXRhOmgsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xX''@;'; put 'put ''aWR0aDpNPT5QYShNKSYmTTxhP2E6TSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29weVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjpyMHQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFn''@;'; put 'put ''bWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5h''@;'; put 'put ''bWUoKSxiZWZvcmVSZWZyZXNoRGltZW5zaW9uczooKT0+ITEsYmVmb3JlT25DZWxsTW91c2VPdmVyOihNLEkpPT57XzkoVFQsdGhpcykuc2V0Q3VycmVudFBhZ2UoSS5yb3cpfSxhZnRlck9uQ2VsbE1vdXNlT3ZlcjooTSxJKT0+e3RoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpP2woSS5yb3cp''@;'; put 'put ''OnRoaXMub3BlblN1Yk1lbnUoSS5yb3cpfSxhZnRlck9uQ2VsbENvbnRleHRNZW51Ok09PntNLnByZXZlbnREZWZhdWx0KCksRiQoKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGFmdGVyU2VsZWN0aW9uOihNLEksRyxpZSx1ZSk9Pnt0aGlzLmhvdE1lbnUu''@;'; put 'put ''dmlldy5pc01vdXNlRG93bigpJiYodWUudmFsdWU9ITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpfSxiZWZvcmVPbkNlbGxNb3VzZVVwOk09Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoZj0hdGhpcy5pc0NvbW1h''@;'; put 'put ''bmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoTSkpfSxhZnRlck9uQ2VsbE1vdXNlVXA6TT0+eyghRiQoKXx8IUhtKE0pKSYmZiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKEFwKCl8fFAkKCk/dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgo''@;'; put 'put ''KT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVuKCl9fTt0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmNvbnRhaW5lcix2KSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuaW5pdCgpLEZKKFRULHRoaXMsZnVuY3Rpb24gZTB0KGMpe3JldHVybiB3Z2Uoe3NpemU6KCk9PmMuY291bnRSb3dzKCksb25JdGVtU2VsZWN0KGwsYSl7Y29uc3QgZD1jLmdldENlbGwobCwwKTtpZighZHx8ZnVu''@;'; put 'put ''Y3Rpb24gV3V0KGMpe3JldHVybiBwbyhjLCJodFNlcGFyYXRvciIpfShkKXx8ZnVuY3Rpb24gR3V0KGMpe3JldHVybiBwbyhjLCJodERpc2FibGVkIil9KGQpfHxmdW5jdGlvbiAkdXQoYyl7cmV0dXJuIHBvKGMsImh0U2VsZWN0aW9uRGlzYWJsZWQiKX0oZCkpcmV0dXJuITE7Yy5zZWxlY3RD''@;'; put 'put ''ZWxsKGwsMCwuLi5hP1tsLDAsITEsITFdOltdKX0sb25DbGVhcigpe2MuZGVzZWxlY3RDZWxsKCl9fSl9KHRoaXMuaG90TWVudSkpLEZKKFRGLHRoaXMsZnVuY3Rpb24gbjB0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpb''@;'; put 'put ''XTtjb25zdCBhPVtdO2Z1bmN0aW9uIGQoRyxpZSl7TShpZSkuYWRkU2hvcnRjdXRzKEcse2dyb3VwOiJtZW51In0pfWZ1bmN0aW9uIGgoRyxpZSl7Y29uc3QgdWU9TShpZSk7Ry5mb3JFYWNoKHllPT57bGV0e2tleXM6RWV9PXllO0VlLmZvckVhY2goamU9PnVlLnJlbW92ZVNob3J0Y3V0c0J5''@;'; put 'put ''S2V5cyhqZSkpfSksYS5wdXNoKHtzaG9ydGN1dHM6Ryxjb250ZXh0TmFtZTppZX0pLGQoRyxpZSl9ZnVuY3Rpb24gdihHKXtyZXR1cm4gRz9gbWVudToke0d9YDoibWVudSJ9ZnVuY3Rpb24gTShHKXt2YXIgaWU7Y29uc3QgdWU9Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLHllPXYo''@;'; put 'put ''Ryk7cmV0dXJuIG51bGwhPT0oaWU9dWUuZ2V0Q29udGV4dCh5ZSkpJiZ2b2lkIDAhPT1pZT9pZTp1ZS5hZGRDb250ZXh0KHllKX1yZXR1cm4gZChmdW5jdGlvbiB0MHQoYyl7Y29uc3R7aG90OmwsaG90TWVudTphfT1jO3JldHVyblt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGZvcndh''@;'; put 'put ''cmRUb0NvbnRleHQ6bC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PmMuY2xvc2UoITApfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOihkLGgpPT57Y29uc3QgZj1sLmdldFNldHRpbmdzKCksdj0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgZi50YWJNb3Zlcz9mLnRhYk1vdmVzKGQpOmYudGFiTW92ZXM7aC5pbmNsdWRlcygic2hpZnQiKT9sLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdi5yb3csLXYuY29sKTpsLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh2LnJvdyx2LmNvbCksYy5jbG9zZSghMCl9fSx7a2V5''@;'; put 'put ''czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PmMuY2xvc2UoKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTmV4dEl0ZW0oKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b1ByZXZpb3Vz''@;'; put 'put ''SXRlbSgpfSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dMZWZ0IjoiQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9YS5nZXRTZWxlY3RlZExhc3QoKTtpZihkKXtjb25zdCBoPWMub3BlblN1Yk1lbnUoZFswXSk7aCYmaC5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX19''@;'; put 'put ''LHtrZXlzOltbbC5pc1J0bCgpPyJBcnJvd1JpZ2h0IjoiQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKSYmYy5pc1N1Yk1lbnUoKSYmKGMuY2xvc2UoKSxjLmlzU3ViTWVudSgpJiZjLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKSl9fSx7a2V5czpbWyJD''@;'; put 'put ''b250cm9sL01ldGEiLCJBcnJvd1VwIl0sWyJIb21lIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkFycm93RG93biJdLFsiRW5kIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0o''@;'; put 'put ''KX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLGNhbGxiYWNrOmQ9Pntjb25zdCBoPWEuZ2V0U2VsZWN0ZWRMYXN0KCk7aCYmKGEuZ2V0U291cmNlRGF0YUF0Um93KGhbMF0pLnN1Ym1lbnU/Yy5vcGVuU3ViTWVudShoWzBdKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpOihjLmV4''@;'; put 'put ''ZWN1dGVDb21tYW5kKGQpLGMuY2xvc2UoITApKSl9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1hLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVt''@;'; put 'put ''KCl9fSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCk/YS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5jb3VudFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9fV19KGMpKSxsLmZvckVhY2goRz0+e2xl''@;'; put 'put ''dHtzaG9ydGN1dHM6aWUsY29udGV4dE5hbWU6dWV9PUc7aChpZSx1ZSl9KSx7YWRkQ3VzdG9tU2hvcnRjdXRzOmgsZ2V0Q3VzdG9tU2hvcnRjdXRzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4uYV19LGdldENvbnRleHQ6TSxsaXN0ZW46ZnVuY3Rpb24gSShHKXtjLmhvdE1lbnUuZ2V0U2hvcnRj''@;'; put 'put ''dXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUodihHKSl9fX0odGhpcykpLF85KFRGLHRoaXMpLmxpc3RlbigpLHRoaXMuZm9jdXMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImFmdGVyU3VibWVudU9wZW4iLHRoaXMpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIsdGhpcyl9Y2xvc2UoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuaXNPcGVuZWQoKSlpZihsJiZ0aGlzLmlz''@;'; put 'put ''U3ViTWVudSgpKXRoaXMucGFyZW50TWVudS5jbG9zZSgpO2Vsc2UgaWYoXzkoVFQsdGhpcykuY2xlYXIoKSx0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmhvdE1lbnUuZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLmlzU3ViTWVudSgpKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25z''@;'; put 'put ''dCBhPXRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO2EmJnZvKHRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldENlbGwoYVswXSwwKSxbTjIoITEpXSl9dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCl9fW9wZW5TdWJNZW51KGwpe2lmKCF0aGlzLmhvdE1l''@;'; put 'put ''bnUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO2lmKHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLCFhfHwhZnVuY3Rpb24gWXV0KGMpe3JldHVybiBwbyhjLCJodFN1Ym1lbnUiKX0oYSkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0''@;'; put 'put ''YUF0Um93KGwpLGg9bmV3IHFfKHRoaXMuaG90LHtwYXJlbnQ6dGhpcyxuYW1lOmQubmFtZSxjbGFzc05hbWU6dGhpcy5vcHRpb25zLmNsYXNzTmFtZSxrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnRhaW5lcn0pO3JldHVybiBoLnNldE1lbnVJdGVtcyhkLnN1''@;'; put 'put ''Ym1lbnUuaXRlbXMpLGgub3BlbigpLGguc2V0UG9zaXRpb24oYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5ob3RTdWJNZW51c1tkLmtleV09aCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2byhhLFtOMighMCldKSxofWNsb3NlU3ViTWVudShsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksZD10aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtpZihkKXtkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV07Y29uc3QgaD10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO3RoaXMuaG90LmdldFNldHRpbmdzKCku''@;'; put 'put ''YXJpYVRhZ3MmJnZvKGgsW04yKCExKV0pfX1jbG9zZUFsbFN1Yk1lbnVzKCl7WW4odGhpcy5ob3RNZW51LmdldERhdGEoKSwobCxhKT0+dGhpcy5jbG9zZVN1Yk1lbnUoYSkpfWlzQWxsU3ViTWVudXNDbG9zZWQoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxl''@;'; put 'put ''bmd0aH1mb2N1cygpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMuaG90TWVudS5yb290RWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKCksdGhpcy5ob3RNZW51Lmxpc3RlbigpKX1kZXN0cm95KCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlO3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudT1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX1pc09wZW5lZCgpe3JldHVybiBudWxs''@;'; put 'put ''IT09dGhpcy5ob3RNZW51fWV4ZWN1dGVDb21tYW5kKGwpe2lmKCF0aGlzLmlzT3BlbmVkKCl8fCF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLGEsbCksdGhpcy5pc0NvbW1h''@;'; put 'put ''bmRQYXNzaXZlKGEpKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxoPWQ/ZnVuY3Rpb24gWnV0KGMpe3JldHVybiBicyhjLGw9Pih7c3RhcnQ6bC5nZXRUb3BTdGFydENvcm5lcigpLGVuZDpsLmdldEJvdHRvbUVuZENvcm5lcigpfSkpfShkKTpbXTt0aGlzLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKX1pc0NvbW1hbmRQYXNzaXZlKGwpe3JldHVybiExPT09bC5pc0NvbW1hbmR8fE9KKGwp''@;'; put 'put ''fHxFRihsLHRoaXMuaG90KXx8TEoobCl9c2V0T2Zmc2V0KGwpe3RoaXMucG9zaXRpb25lci5zZXRPZmZzZXQobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCl9c2V0UG9zaXRpb24obCl7dGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wb3Np''@;'; put 'put ''dGlvbmVyLnNldFBhcmVudEVsZW1lbnQodGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lciksdGhpcy5wb3NpdGlvbmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKGwpfXVwZGF0ZU1lbnVEaW1lbnNpb25zKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUudmlldy5nZXRT''@;'; put 'put ''dHlsZXNIYW5kbGVyKCkse3d0VGFibGU6YX09dGhpcy5ob3RNZW51LnZpZXcuX3d0LGQ9dGhpcy5ob3RNZW51LmdldFNldHRpbmdzKCkuZGF0YSxoPWEuaGlkZXIuc3R5bGUsZj1hLmhvbGRlci5zdHlsZSx2PXBhcnNlSW50KGgud2lkdGgsMTApLE09cXUoZCwoSSxHLGllKT0+e2NvbnN0IHll''@;'; put 'put ''PXRoaXMuaG90TWVudS5nZXRDZWxsKGllLDApP3h1KHRoaXMuaG90TWVudS5nZXRDZWxsKGllLDApKTowO3JldHVybiBJKyhHLm5hbWU9PT1zcz8xOnllKX0sMCk7bC5pc0NsYXNzaWNUaGVtZSgpPyhmLndpZHRoPWAke3YrM31weGAsZi5oZWlnaHQ9YCR7TSszfXB4YCk6KGYud2lkdGg9YCR7''@;'; put 'put ''dn1weGAsZi5oZWlnaHQ9YCR7TX1weGApLGguaGVpZ2h0PWYuaGVpZ2h0fWNyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOm51bGw7cmV0dXJuIGQmJihtbChkKSYmKGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxfYyhkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2Vs''@;'; put 'put ''ZWN0b3IoYC4ke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxUaShoLGBodE1lbnUgaGFuZHNvbnRhYmxlICR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1gKSxkJiZUaShoLGQpLHRoaXMub3B0aW9ucy5jb250YWluZXIuYXBwZW5k''@;'; put 'put ''Q2hpbGQoaCkpLGh9b25BZnRlckluaXQoKXt0aGlzLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdm8odGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LFtbInJvbGUiLCJtZW51Il0sTjcoLTEpXSl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0''@;'; put 'put ''aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSYmdGhpcy5ob3RNZW51JiYhTG0obC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIUxtKGwudGFyZ2V0LCIuaHRNZW51''@;'; put 'put ''IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3VtZW50Q29udGV4dE1lbnUobCl7dGhpcy5pc09wZW5lZCgpJiZwbyhsLnRhcmdldCwiaHRDb3JlIikmJkxtKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gSEooYyxsLGEpe3Jl''@;'; put 'put ''dHVybihsPWZ1bmN0aW9uIGMwdChjKXt2YXIgbD1mdW5jdGlvbiB1MHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGtGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1UbChxXyxiMSk7Y29uc3QgQVQ9ImNvbnRleHRNZW51IixBZ2U9QVQ7U2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0''@;'; put 'put ''ZXJDb250ZXh0TWVudUhpZGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTt2YXIga1Q9bmV3IFdlYWtTZXQ7Y2xhc3MgREYgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gczB0KGMsbCl7''@;'; put 'put ''KGZ1bmN0aW9uIGwwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGtUKSxISih0aGlzLCJjb21tYW5kRXhlY3V0''@;'; put 'put ''b3IiLG5ldyBnZ2UodGhpcy5ob3QpKSxISih0aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLEhKKHRoaXMsIm1lbnUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBBVH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA3MH1zdGF0aWMgZ2V0IFBMVUdJTl9E''@;'; put 'put ''RVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bQ0YsU0Ysc3Msd1QsQ1Qsc3Msd0YsTVQsc3MsTUYsX0Ysc3MsU1Qsc3MsSzJdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF19''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBVF07ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2sp''@;'; put 'put ''LHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHRDb250ZXh0TWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9''@;'; put 'put ''PmtGKGtULHRoaXMsZjB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5rRihrVCx0aGlzLHAwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PmtGKGtULHRoaXMsZzB0KS5jYWxsKHRoaXMpKSx0''@;'; put 'put ''aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4uaCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGQ9PmtGKGtULHRoaXMsaDB0KS5jYWxsKHRoaXMsZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdp''@;'; put 'put ''bigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwiQmFja3NsYXNoIl0sWyJTaGlmdCIsIkYxMCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3RoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtjb25zdCBhPXRoaXMuaG90LmdldENlbGwobC5yb3csbC5jb2wsITApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9j''@;'; put 'put ''dW1lbnQpO3RoaXMub3Blbih7bGVmdDphLmxlZnQrZC5sZWZ0LHRvcDphLnRvcCtkLnRvcC0xK2EuaGVpZ2h0fSx7bGVmdDphLndpZHRoLGFib3ZlOi1hLmhlaWdodH0pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbDtjb25zdCBh''@;'; put 'put ''PW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGEmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOkFnZX0pfXVucmVnaXN0''@;'; put 'put ''ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChBZ2UpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O2lmKG51bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lkIDAhPT1hJiZhLmlzT3BlbmVkKCkpcmV0dXJuO3RoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRoaXMubWVudS5vcGVuKCk7Y29uc3QgaD10aGlzLm1lbnUudGFibGVCb3JkZXJXaWR0''@;'; put 'put ''aD4wO1hvKGQsKGYsdik9Pntjb25zdCBNPVsiYmVsb3ciLCJyaWdodCJdLmluY2x1ZGVzKHYpP2YrMTpmLTE7dGhpcy5tZW51LnNldE9mZnNldCh2LGg/ZjpNKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1s''@;'; put 'put ''fHxsLmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbH1leGVjdXRlQ29tbWFuZChsKXtudWxsPT09dGhpcy5pdGVtc0ZhY3RvcnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKysp''@;'; put 'put ''ZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGwsLi4uZCl9cHJlcGFyZU1lbnVJdGVtcygpe3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBiZ2UodGhpcy5ob3QsREYuREVGQVVMVF9JVEVNUyk7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0FUXSxh''@;'; put 'put ''PXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhsKX07dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYSksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGEuaXRlbXMpO2NvbnN0IGQ9dGhpcy5pdGVtc0ZhY3Rvcnku''@;'; put 'put ''Z2V0SXRlbXMobCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGQpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoZCksWW4oZCxoPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoaC5rZXksaCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCks''@;'; put 'put ''dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaDB0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPWwucm93SGVhZGVycyxkPWwuY29sSGVhZGVycyxmPWMudGFyZ2V0O2lmKHRoaXMuY2xvc2UoKSxwbyhmLCJoYW5kc29u''@;'; put 'put ''dGFibGVJbnB1dCIpfHwoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksIShhfHxkfHxmdW5jdGlvbiBoKE0pe3JldHVybiJURCI9PT1NLm5vZGVOYW1lfHwiVEQiPT09TS5wYXJlbnROb2RlLm5vZGVOYW1lfShmKXx8cG8oZiwiY3VycmVudCIpJiZwbyhmLCJ3dEJvcmRl''@;'; put 'put ''ciIpKSkpcmV0dXJuO2NvbnN0IHY9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpO3RoaXMub3Blbih7dG9wOmMuY2xpZW50WSt2LnRvcCxsZWZ0OmMuY2xpZW50WCt2LmxlZnR9KX1mdW5jdGlvbiBmMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29u''@;'; put 'put ''dGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBwMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIGcwdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9REYu''@;'; put 'put ''U0VQQVJBVE9SPXtuYW1lOnNzfTtjbGFzcyB3MHR7Y29uc3RydWN0b3IoKXt0aGlzLmRhdGE9e319c2V0RGF0YShsLGEpe3RoaXMuZGF0YVtsXT1hfWdldERhdGEobCl7cmV0dXJuIHRoaXMuZGF0YVtsXXx8dm9pZCAwfX1jbGFzcyBDMHR7Y29uc3RydWN0b3IoKXt0aGlzLmNsaXBib2FyZERh''@;'; put 'put ''dGE9bmV3IHcwdH1wcmV2ZW50RGVmYXVsdCgpe31jb21wb3NlZFBhdGgoKXtyZXR1cm5bXX19ZnVuY3Rpb24gWF8oYyxsLGEpe2tnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24ga2dlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl''@;'; put 'put ''IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKMShjLGwpe3JldHVybiBjLmdldChRXyhjLGwpKX1mdW5jdGlvbiBKXyhjLGwsYSl7cmV0dXJuIGMuc2V0KFFfKGMsbCksYSksYX1mdW5jdGlvbiBRXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHQ2PW5ldyBXZWFrTWFwLE5KPW5ldyBXZWFrTWFwLERUPW5ldyBXZWFr''@;'; put 'put ''TWFwLFZKPW5ldyBXZWFrTWFwLEJKPW5ldyBXZWFrTWFwLElUPW5ldyBXZWFrTWFwLFJUPW5ldyBXZWFrU2V0O2NsYXNzIE0wdHtjb25zdHJ1Y3RvcihsKXtsZXR7Y291bnRSb3dzOmEsY291bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJz''@;'; put 'put ''OnZ9PWw7KGZ1bmN0aW9uIFMwdChjLGwpe2tnZShjLGwpLGwuYWRkKGMpfSkodGhpcyxSVCksWF8odGhpcyx0Nix2b2lkIDApLFhfKHRoaXMsTkosdm9pZCAwKSxYXyh0aGlzLERULHZvaWQgMCksWF8odGhpcyxWSix2b2lkIDApLFhfKHRoaXMsQkosdm9pZCAwKSxYXyh0aGlzLElULHZvaWQg''@;'; put 'put ''MCksSl8oTkosdGhpcyxhKSxKXyhEVCx0aGlzLGQpLEpfKFZKLHRoaXMsaCksSl8oQkosdGhpcyxmKSxKXyhJVCx0aGlzLHYpfXNldFNlbGVjdGVkUmFuZ2UobCl7Sl8odDYsdGhpcyxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PUoxKE5KLHRoaXMpLmNhbGwodGhpcyl8fDA9PT1KMShEVCx0''@;'; put 'put ''aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1KMSh0Nix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09SjEodDYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1RXyhSVCx0aGlzLHgwdCkuY2FsbCh0aGlzLGwsZCksdj1RXyhS''@;'; put 'put ''VCx0aGlzLGpKKS5jYWxsKHRoaXMsYSxoKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6ZCE9PWZ8fGghPT12LHN0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZixlbmRDb2w6dn19Z2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1KMShEVCx0aGlzKS5jYWxsKHRoaXMp''@;'; put 'put ''fHwwPT09SjEoSVQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09SjEodDYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PUoxKHQ2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9UV8oUlQsdGhpcyxqSikuY2FsbCh0aGlzLGwsYSk7cmV0dXJu''@;'; put 'put ''e2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0Um93Oi0xLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX1nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09SjEoRFQsdGhpcykuY2FsbCh0aGlzKXx8MD09PUoxKElULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29u''@;'; put 'put ''c3R7Y29sOmx9PUoxKHQ2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1KMSh0Nix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPVFfKFJULHRoaXMsakopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotSjEoSVQsdGhpcyku''@;'; put 'put ''Y2FsbCh0aGlzKSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19fWZ1bmN0aW9uIGpKKGMsbCl7cmV0dXJuIE1hdGgubWluKGwsTWF0aC5tYXgoYytKMShCSix0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIHgwdChjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMr''@;'; put 'put ''SjEoVkosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBEZ2UoYyl7Y29uc3QgbD1bXSxhPVtdO3JldHVybiBZbihjLGQ9PntHYShNYXRoLm1pbihkLnN0YXJ0Um93LGQuZW5kUm93KSxNYXRoLm1heChkLnN0YXJ0Um93LGQuZW5kUm93KSxJPT57LTE9PT1sLmluZGV4T2YoSSkmJmwu''@;'; put 'put ''cHVzaChJKX0pLEdhKE1hdGgubWluKGQuc3RhcnRDb2wsZC5lbmRDb2wpLE1hdGgubWF4KGQuc3RhcnRDb2wsZC5lbmRDb2wpLEk9PnstMT09PWEuaW5kZXhPZihJKSYmYS5wdXNoKEkpfSl9KSx7cm93czpsLGNvbHVtbnM6YX19ZnVuY3Rpb24gbjYoYyxsLGEpe0lnZShjLGwpLGwuc2V0KGMs''@;'; put 'put ''YSl9ZnVuY3Rpb24gSWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBMVChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDB0KGMpe3Zh''@;'; put 'put ''ciBsPWZ1bmN0aW9uIEEwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWWQoYyxsKXtyZXR1cm4gYy5nZXQoR2QoYyxsKSl9ZnVuY3Rpb24gcDMoYyxsLGEpe3JldHVybiBjLnNldChHZChjLGwpLGEpLGF9ZnVu''@;'; put 'put ''Y3Rpb24gR2QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmds''@;'; put 'put ''ZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLFNh''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29u''@;'; put 'put ''c3Qgeko9ImNvcHlQYXN0ZSIsRDB0PVsiZnJhZ21lbnRTZWxlY3Rpb24iXSxSZ2U9Wyc8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUtc3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBsYWNlbWVu''@;'; put 'put ''dDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2luKCIiKTt2YXIgVUo9bmV3IFdlYWtNYXAsWko9bmV3IFdlYWtNYXAsV0o9bmV3IFdlYWtNYXAsZXc9bmV3IFdlYWtNYXAsSUY9bmV3IFdlYWtNYXAsUkY9bmV3IFdlYWtNYXAsdHc9bmV3IFdlYWtNYXAsTEY9bmV3IFdlYWtNYXAsRmg9bmV3IFdl''@;'; put 'put ''YWtTZXQ7Y2xhc3MgSTB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEUwdChjLGwpe0lnZShjLGwpLGwuYWRkKGMpfSh0aGlzLEZoKSxMVCh0aGlzLCJjb2x1bW5zTGltaXQiLDEvMCksTFQodGhpcywicm93c0xpbWl0IiwxLzApLExUKHRo''@;'; put 'put ''aXMsInBhc3RlTW9kZSIsIm92ZXJ3cml0ZSIpLExUKHRoaXMsInVpQ29udGFpbmVyIix0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSksbjYodGhpcyxVSiwhMSksbjYodGhpcyxaSiwhMSksbjYodGhpcyxXSiwhMSksbjYodGhpcyxldywiY2VsbHMtb25seSIpLG42KHRoaXMsSUYsITEpLG42''@;'; put 'put ''KHRoaXMsUkYsITEpLG42KHRoaXMsdHcsbmV3IE0wdCh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50aGlzLmNvbHVtbnNM''@;'; put 'put ''aW1pdCxjb3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KSksbjYodGhpcyxMRiwhMSksTFQodGhpcywiY29weWFibGVSYW5nZXMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gekp9c3RhdGljIGdldCBTRVRUSU5H''@;'; put 'put ''X0tFWVMoKXtyZXR1cm5bekosLi4uRDB0XX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57cGFzdGVNb2RlOiJvdmVyd3JpdGUiLHJvd3NMaW1pdDoxLzAsY29sdW1uc0xpbWl0OjEvMCxjb3B5Q29sdW1u''@;'; put 'put ''SGVhZGVyczohMSxjb3B5Q29sdW1uR3JvdXBIZWFkZXJzOiExLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pKXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhLGQ9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnBhc3Rl''@;'; put 'put ''TW9kZT1udWxsIT09KGw9dGhpcy5nZXRTZXR0aW5nKCJwYXN0ZU1vZGUiKSkmJnZvaWQgMCE9PWw/bDp0aGlzLnBhc3RlTW9kZSx0aGlzLnJvd3NMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoInJvd3NMaW1pdCIpKT90aGlzLnJvd3NMaW1pdDp0aGlzLmdldFNldHRpbmcoInJvd3NMaW1p''@;'; put 'put ''dCIpLHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikpP3RoaXMuY29sdW1uc0xpbWl0OnRoaXMuZ2V0U2V0dGluZygiY29sdW1uc0xpbWl0IikscDMoVUosdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzIikpLHAzKFpK''@;'; put 'put ''LHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uR3JvdXBIZWFkZXJzIikpLHAzKFdKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVyc09ubHkiKSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGE9dGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpKSYmdm9p''@;'; put 'put ''ZCAwIT09YT9hOnRoaXMudWlDb250YWluZXIsdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGg9PkdkKEZoLHRoaXMsTzB0KS5jYWxsKHRoaXMsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKEZoLGQsUDB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIiwoKT0+R2QoRmgsdGhpcyxGMHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRN''@;'; put 'put ''YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjb3B5IixmdW5jdGlvbigpe3JldHVybiBkLm9uQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImN1dCIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZC5vbkN1dCguLi5hcmd1bWVudHMpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsInBhc3RlIixmdW5jdGlvbigpe3JldHVybiBkLm9uUGFzdGUoLi4uYXJndW1lbnRzKX0pLEFFKCkmJih0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWVudGVyIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHZChGaCxkLEgwdCku''@;'; put 'put ''Y2FsbChkLC4uLmYpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxOMHQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5HZChGaCx0aGlzLFYwdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y29weSgpe3AzKGV3LHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5Iiks''@;'; put 'put ''cDMoSUYsdGhpcywhMCksR2QoRmgsdGhpcyxMZ2UpLmNhbGwodGhpcywiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNvcHkoImNvbHVtbi1oZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhl''@;'; put 'put ''YWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtwMyhSRix0aGlzLCEwKSxHZChGaCx0aGlzLExnZSkuY2FsbCh0aGlzLCJjdXQiKX1nZXRSYW5n''@;'; put 'put ''ZWRDb3B5YWJsZURhdGEobCl7cmV0dXJuIHJUKHRoaXMuZ2V0UmFuZ2VkRGF0YShsKSl9Z2V0UmFuZ2VkRGF0YShsKXtjb25zdCBhPVtdLHtyb3dzOmQsY29sdW1uczpofT1EZ2UobCk7cmV0dXJuIFluKGQsZj0+e2NvbnN0IHY9W107WW4oaCxNPT57di5wdXNoKGY8MD90aGlzLmhvdC5nZXRD''@;'; put 'put ''b2xIZWFkZXIoTSxmKTp0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEoZixNKSl9KSxhLnB1c2godil9KSxhfXBhc3RlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7aWYoIWwmJiFhKXJldHVybjtjb25zdCBkPW5ldyBDMHQ7bCYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGwpLGEmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGEpLHRoaXMub25QYXN0ZShkKX1zZXRD''@;'; put 'put ''b3B5YWJsZVRleHQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2lmKGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4gdm9pZCh0aGlzLmNvcHlhYmxlUmFuZ2VzPVtdKTtZZCh0dyx0aGlzKS5zZXRTZWxlY3RlZFJhbmdlKGwpO2NvbnN0IGE9''@;'; put 'put ''bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVhZGVycy1vbmx5Ij09PVlkKGV3LHRoaXMpP2Euc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9''@;'; put 'put ''PT1ZZChldyx0aGlzKT9hLnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1ZZChldyx0aGlzKSYmYS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldEFsbENvbHVtbkhlYWRl''@;'; put 'put ''cnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLFlkKHR3LHRoaXMpLmdldENlbGxzUmFuZ2UoKSkpLHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRD''@;'; put 'put ''b2w6SX09aDtyZXR1cm57c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpJfX0pLHRoaXMuY29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQoImNlbGxzIik7aWYo''@;'; put 'put ''bnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQpe2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6ZixlbmRSb3c6dixlbmRDb2w6TX09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLHYtaCsxLE0tZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0KX19aXNFZGl0''@;'; put 'put ''b3JPcGVuZWQoKXt2YXIgbDtyZXR1cm4gbnVsbD09PShsPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc09wZW5lZCgpfXBvcHVsYXRlVmFsdWVzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt''@;'; put 'put ''ZW50c1sxXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmxlbmd0aClyZXR1cm47Y29uc3QgZD1sLmxlbmd0aCxoPWxbMF0ubGVuZ3RoLGY9W10se3Jvdzp2LGNvbDpNfT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpJLGNvbDpHfT1hLmdldEJvdHRvbUVuZENvcm5l''@;'; put 'put ''cigpO2xldCBpZT12LHVlPU0seWU9dixFZT1NO2Zvcig7Zi5sZW5ndGg8ZHx8aWU8PUk7KXtjb25zdHtza2lwUm93T25QYXN0ZTpqZSx2aXN1YWxSb3c6cWV9PXRoaXMuaG90LmdldENlbGxNZXRhKGllLE0pO2lmKGllPXFlKzEsITA9PT1qZSljb250aW51ZTt5ZT1xZSx1ZT1NO2NvbnN0IHJ0''@;'; put 'put ''PVtdLHB0PWYubGVuZ3RoJWQ7Zm9yKDtydC5sZW5ndGg8aHx8dWU8PUc7KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpkdCx2aXN1YWxDb2w6SnR9PXRoaXMuaG90LmdldENlbGxNZXRhKHYsdWUpOyh1ZT1KdCsxLCEwIT09ZHQpJiYoRWU9SnQscnQucHVzaChsW3B0XVtydC5sZW5ndGglaF0p''@;'; put 'put ''KX1mLnB1c2gocnQpfXJldHVybiBwMyhMRix0aGlzLCEwKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LE0sZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbdixNLHllLEVlXX1vbkNvcHkobCl7Y29uc3QgYT1sLmNvbXBvc2VkUGF0aCgpWzBd''@;'; put 'put ''LGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPWE/Lmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIVlkKElGLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fEVwKGEpJiYoaCYmYSE9''@;'; put 'put ''PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiF2RShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHAzKElGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMu''@;'; put 'put ''Y29weWFibGVSYW5nZXMpLHY9R2QoRmgsdGhpcyxSMHQpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpKXtjb25zdCBJPXJUKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29u''@;'; put 'put ''c3QgRz1xJChmKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsSSksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW1JnZSxHXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2Fy''@;'; put 'put ''ZERhdGEuc2V0RGF0YSgiVGV4dCIsSSk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpfXAzKGV3LHRoaXMsImNlbGxzLW9ubHkiKX1vbkN1dChsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFn''@;'; put 'put ''ZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhWWQoUkYsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQuYm9keSYmIXZFKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCkscDMoUkYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZUN1dCIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSl7Y29uc3QgTT1yVChmKTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IEk9cSQoZik7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLE0pLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0''@;'; put 'put ''ZXh0L2h0bWwiLFtSZ2UsSV0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLE0pO3RoaXMuaG90LmVtcHR5U2VsZWN0ZWRDZWxscygiQ29weVBhc3RlLmN1dCIpLHRoaXMuaG90''@;'; put 'put ''LnJ1bkhvb2tzKCJhZnRlckN1dCIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKX19b25QYXN0ZShsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1''@;'; put 'put ''dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhdkUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJl''@;'; put 'put ''dHVybjtsZXQgZjtpZihsLnByZXZlbnREZWZhdWx0KCksbCYmdHlwZW9mIGwuY2xpcGJvYXJkRGF0YTwidSIpe2NvbnN0IGllPUlPKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWToh''@;'; put 'put ''MH0pO2Y9aWUmJi8oPHRhYmxlKXwoPFRBQkxFKS9nLnRlc3QoaWUpP3lmZShpZSx0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoZj10aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGYmJihmPWZ1bmN0aW9uIERydChjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0''@;'; put 'put ''IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0aDspaWYoaD1jLmxlbmd0aCxjLm1hdGNoKHBwZSkpYz1jLnJlcGxhY2UocHBlLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKGZwZSkpYz1jLnJlcGxhY2UoZnBlLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07''@;'; put 'put ''ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0IHY9MCxNPSEwO2Zvcig7TTspe2NvbnN0IEk9Yy5zbGljZSgwLDEpOyciJz09PUkmJih2Kz0xKSxmKz1JLCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmdiUyPT0wKSYmKE09ITEp''@;'; put 'put ''fWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIikucmVwbGFjZSgvWyJdKi9nLEk9Pm5ldyBBcnJheShNYXRoLmZsb29yKEkubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3Qgdj1jLm1hdGNoKGtydCk7Zj12P3ZbMF06IiIsYz1jLnNsaWNlKGYubGVu''@;'; put 'put ''Z3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGYpKSx2b2lkIDA9PT1mfHxmJiYwPT09Zi5sZW5ndGh8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFt2LE0sSSxHXT10aGlzLnBvcHVsYXRlVmFsdWVzKGYpO3Ro''@;'; put 'put ''aXMuaG90LnNlbGVjdENlbGwodixNLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygpLTEsSSksTWF0aC5taW4odGhpcy5ob3QuY291bnRDb2xzKCktMSxHKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyl9ZGVzdHJveSgpe3N1cGVyLmRl''@;'; put 'put ''c3Ryb3koKX19ZnVuY3Rpb24gTGdlKGMpe2lmKEFFKCkpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5oaWdobGlnaHQsaD10aGlzLmhvdC5nZXRDZWxsKGEsZCwhMCk7aCYmWjJlKGgsKCk9Pnt0aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnQuZXhlY0NvbW1hbmQoYyl9KX19ZWxzZSB0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoYyl9ZnVuY3Rpb24gUjB0KGMpe2NvbnN0e3Jvd3M6bH09RGdlKGMpO2xldCBhPTA7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aCYmIShsW2RdPj0wKTtkKyspYSs9MTtyZXR1cm57''@;'; put 'put ''Y29sdW1uSGVhZGVyc0NvdW50OmF9fWZ1bmN0aW9uIEwwdCgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwh''@;'; put 'put ''MCk7ZCYmayQoZCl9fX1mdW5jdGlvbiBPZ2UoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO251bGwh''@;'; put 'put ''PWQmJmQuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSYmRCQoZCl9fX1mdW5jdGlvbiBPMHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBtMHQoYyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJh''@;'; put 'put ''c2UocnEpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigp''@;'; put 'put ''KXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoVUosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBiMHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIixuYW1lKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGlxLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFz''@;'; put 'put ''Q29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZCha''@;'; put 'put ''Six0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHkwdChjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/a3MobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlz''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoYXEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCl8fCF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycylyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksWWQoV0osdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiB2MHQoYyl7''@;'; put 'put ''cmV0dXJue2tleToiY29weV9jb2x1bW5faGVhZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP2tzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9xLGEpfSxjYWxsYmFjaygpe2MuY29w''@;'; put 'put ''eUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7''@;'; put 'put ''cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxjLml0ZW1zLnB1c2goZnVuY3Rpb24gXzB0KGMpe3JldHVybntrZXk6ImN1dCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc3EpfSxjYWxsYmFjaygpe2MuY3V0KCl9LGRpc2FibGVkKCl7aWYo''@;'; put 'put ''MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVu''@;'; put 'put ''Z3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiBQMHQoYyxsLGEsZCxoKXtZZChMRix0aGlzKSYmKGgudmFsdWU9ITApLHAzKExGLHRoaXMsITEpfWZ1bmN0aW9uIEYwdCgpe3RoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVj''@;'; put 'put ''dGlvbnx8dGhpcy5zZXRDb3B5YWJsZVRleHQoKX1mdW5jdGlvbiBIMHQoKXtHZChGaCx0aGlzLE9nZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBOMHQoKXtHZChGaCx0aGlzLEwwdCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBWMHQoKXtHZChGaCx0aGlzLE9nZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBQ''@;'; put 'put ''Z2UoYyxsKXtyZXR1cm5gYm9yZGVyX3JvdyR7Y31jb2wke2x9YH1mdW5jdGlvbiBZSihjKXt2YXIgbCxhO3JldHVybihQYShjLnN0YXJ0KXx8UGEoYy5sZWZ0KSkmJihjLnN0YXJ0PW51bGwhPT0obD1jLnN0YXJ0KSYmdm9pZCAwIT09bD9sOmMubGVmdCksKFBhKGMuZW5kKXx8UGEoYy5yaWdo''@;'; put 'put ''dCkpJiYoYy5lbmQ9bnVsbCE9PShhPWMuZW5kKSYmdm9pZCAwIT09YT9hOmMucmlnaHQpLGRlbGV0ZSBjLmxlZnQsZGVsZXRlIGMucmlnaHQsY31mdW5jdGlvbiBQVChjKXtyZXR1cm4gUGEoYy5zdGFydCkmJihjLmxlZnQ9Yy5zdGFydCksUGEoYy5lbmQpJiYoYy5yaWdodD1jLmVuZCksY31m''@;'; put 'put ''dW5jdGlvbiBHSihjLGwpe3JldHVybntpZDpQZ2UoYyxsKSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiMwMDAiLGNvcm5lclZpc2libGU6ITF9LHJvdzpjLGNvbDpsLHRvcDp7aGlkZTohMH0sYm90dG9tOntoaWRlOiEwfSxzdGFydDp7aGlkZTohMH0sZW5kOntoaWRlOiEwfX19ZnVuY3Rpb24g''@;'; put 'put ''RmcoYyxsKXtsZXQgYT0hMTtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZFJhbmdlKCksZD0+e2QuZm9yQWxsKChoLGYpPT57aWYoaDwwfHxmPDApcmV0dXJuO2NvbnN0IHY9Yy5nZXRDZWxsTWV0YShoLGYpLmJvcmRlcnM7aWYodil7aWYoIWwpcmV0dXJuIGE9ITAsITE7aWYoIVR1KHZbbF0sImhp''@;'; put 'put ''ZGUiKXx8ITE9PT12W2xdLmhpZGUpcmV0dXJuIGE9ITAsITF9fSl9KSxhfWZ1bmN0aW9uIE9GKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1jb25zdCBaMHQ9bmV3IE1hcChbWyJsZWZ0Iiwic3RhcnQiXSxbInJpZ2h0IiwiZW5kIl1dKTtmdW5j''@;'; put 'put ''dGlvbiBZMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczp0b3AiLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeHEpO3JldHVybiBGZyh0aGlzLCJ0b3AiKSYmKGw9T0YobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJ0b3AiKTtjLnByZXBhcmVCb3Jk''@;'; put 'put ''ZXIoYSwidG9wIixkKX19fWZ1bmN0aW9uIEcwdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/InN0YXJ0IjoiZW5kIjtyZXR1cm57a2V5OiJib3JkZXJzOnJpZ2h0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEVxKTtyZXR1cm4gRmcodGhpcyxsKSYmKGE9T0YoYSkp''@;'; put 'put ''LGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1GZyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiAkMHQoYyl7cmV0dXJue2tleToiYm9yZGVyczpib3R0b20iLG5hbWUoKXtsZXQgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVHEpO3JldHVybiBGZyh0aGlzLCJi''@;'; put 'put ''b3R0b20iKSYmKGw9T0YobCkpLGx9LGNhbGxiYWNrKGwsYSl7Y29uc3QgZD1GZyh0aGlzLCJib3R0b20iKTtjLnByZXBhcmVCb3JkZXIoYSwiYm90dG9tIixkKX19fWZ1bmN0aW9uIEswdChjKXtjb25zdCBsPWMuaG90LmlzUnRsKCk/ImVuZCI6InN0YXJ0IjtyZXR1cm57a2V5OiJib3JkZXJz''@;'; put 'put ''OmxlZnQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQXEpO3JldHVybiBGZyh0aGlzLGwpJiYoYT1PRihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPUZnKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIHEwdChjKXtyZXR1cm57a2V5''@;'; put 'put ''OiJib3JkZXJzOm5vX2JvcmRlcnMiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGtxKX0sY2FsbGJhY2sobCxhKXtjLnByZXBhcmVCb3JkZXIoYSwibm9Cb3JkZXJzIil9LGRpc2FibGVkKCl7cmV0dXJuIUZnKHRoaXMpfX19ZnVuY3Rpb24gRmdlKGMsbCxhKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBQRj0iY3VzdG9tQm9yZGVycyI7dmFyICRK''@;'; put 'put ''PW5ldyBXZWFrU2V0O2NsYXNzIHIxdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBYMHQoYyxsKXsoZnVuY3Rpb24gSjB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsJEopLGZ1bmN0aW9uIFEwdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZTF0KGMpe3ZhciBsPWZ1bmN0aW9uIHQxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''UEZdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5GZ2UoJEosdGhpcyxpMXQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+RmdlKCRKLHRoaXMsYTF0KS5jYWxsKHRoaXMp''@;'; put 'put ''KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCks''@;'; put 'put ''c3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVycyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPVlKKGEpKTtjb25zdCB2PWVUKHhfKGwpLHtjcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSk7WW4obCxNPT57dihNKS5mb3JBbGwoKEksRyk9PntZbihkLGllPT57dGhpcy5wcmVwYXJl''@;'; put 'put ''Qm9yZGVyRnJvbUN1c3RvbUFkZGVkKEksRyxoLGZ1bmN0aW9uIFcwdChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPVowdC5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6Y30oaWUpKX0pfSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5LmlzQXJyYXkobCkp''@;'; put 'put ''cmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IGQ9ZVQoeF8obCkse2NyZWF0ZUNlbGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KSxoPVtd''@;'; put 'put ''O3JldHVybiBZbihsLGY9PntkKGYpLmZvckFsbCgodixNKT0+e1luKHRoaXMuc2F2ZWRCb3JkZXJzLEk9PntJLnJvdz09PXYmJkkuY29sPT09TSYmaC5wdXNoKFBUKEkpKX0pfSl9KSxofWNsZWFyQm9yZGVycyhsKXtsP3RoaXMuc2V0Qm9yZGVycyhsKTooWW4odGhpcy5zYXZlZEJvcmRlcnMs''@;'; put 'put ''YT0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGEuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoYS5yb3csYS5jb2wsImJvcmRlcnMiKX0pLHRoaXMuc2F2ZWRCb3JkZXJzLmxlbmd0aD0wKX1pbnNlcnRCb3JkZXJJ''@;'; put 'put ''bnRvU2V0dGluZ3MobCxhKXt0aGlzLmNoZWNrU2F2ZWRCb3JkZXJzKGwpfHx0aGlzLnNhdmVkQm9yZGVycy5wdXNoKGwpO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxsLmNvbCkpO3RoaXMuY2hlY2tDdXN0b21TZWxl''@;'; put 'put ''Y3Rpb25zKGwsaCxhKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5hZGRDdXN0b21TZWxlY3Rpb24oe2JvcmRlcjpsLHZpc3VhbENlbGxSYW5nZTpofSl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmNvdW50Um93cygpLHY9dGhp''@;'; put 'put ''cy5ob3QuY291bnRDb2xzKCk7aWYobD49Znx8YT49dilyZXR1cm47bGV0IE09R0oobCxhKTtkJiYoTT1mdW5jdGlvbiBqMHQoYyxsKXtyZXR1cm4gVHUobCwiYm9yZGVyIikmJmwuYm9yZGVyJiYoYy5ib3JkZXI9bC5ib3JkZXIpLFR1KGwsInRvcCIpJiZQYShsLnRvcCkmJihsLnRvcD8ocW8o''@;'; put 'put ''bC50b3ApfHwobC50b3A9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy50b3A9bC50b3ApOihsLnRvcD17aGlkZTohMH0sYy50b3A9bC50b3ApKSxUdShsLCJib3R0b20iKSYmUGEobC5ib3R0b20pJiYobC5ib3R0b20/KHFvKGwuYm90dG9tKXx8KGwuYm90dG9tPXt3aWR0aDoxLGNvbG9yOiIj''@;'; put 'put ''MDAwIn0pLGMuYm90dG9tPWwuYm90dG9tKToobC5ib3R0b209e2hpZGU6ITB9LGMuYm90dG9tPWwuYm90dG9tKSksVHUobCwic3RhcnQiKSYmUGEobC5zdGFydCkmJihsLnN0YXJ0PyhxbyhsLnN0YXJ0KXx8KGwuc3RhcnQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5zdGFydD1sLnN0YXJ0''@;'; put 'put ''KToobC5zdGFydD17aGlkZTohMH0sYy5zdGFydD1sLnN0YXJ0KSksVHUobCwiZW5kIikmJlBhKGwuZW5kKSYmKGwuZW5kPyhxbyhsLmVuZCl8fChsLmVuZD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmVuZD1sLmVuZCk6KGwuZW5kPXtoaWRlOiEwfSxjLmVuZD1sLmVuZCkpLGN9KE0sZCks''@;'; put 'put ''WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLEk9PntpZihNLmlkPT09SS5zZXR0aW5ncy5pZClyZXR1cm4gT2JqZWN0LmFzc2lnbihJLnNldHRpbmdzLGQpLE0uaWQ9SS5zZXR0aW5ncy5pZCxNLnRvcD1JLnNldHRpbmdzLnRvcCxNLmJvdHRvbT1JLnNl''@;'; put 'put ''dHRpbmdzLmJvdHRvbSxNLnN0YXJ0PUkuc2V0dGluZ3Muc3RhcnQsTS5lbmQ9SS5zZXR0aW5ncy5lbmQsITF9KSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSxoKX1wcmVwYXJlQm9yZGVyRnJvbUN1c3Rv''@;'; put 'put ''bUFkZGVkUmFuZ2UobCxhKXtjb25zdCBkPU1hdGgubWluKGwudG8ucm93LHRoaXMuaG90LmNvdW50Um93cygpLTEpLGg9TWF0aC5taW4obC50by5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCktMSk7R2EobC5mcm9tLnJvdyxkLGY9PntHYShsLmZyb20uY29sLGgsdj0+e2NvbnN0IE09R0ooZix2''@;'; put 'put ''KTtsZXQgST0wO2Y9PT1sLmZyb20ucm93JiZUdShhLCJ0b3AiKSYmKEkrPTEsTS50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmVHUoYSwiYm90dG9tIikmJihJKz0xLE0uYm90dG9tPWEuYm90dG9tKSx2PT09bC5mcm9tLmNvbCYmVHUoYSwic3RhcnQiKSYmKEkrPTEsTS5zdGFydD1hLnN0YXJ0''@;'; put 'put ''KSx2PT09bC50by5jb2wmJlR1KGEsImVuZCIpJiYoSSs9MSxNLmVuZD1hLmVuZCksST4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZix2LCJib3JkZXJzIixQVChNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1Q''@;'; put 'put ''Z2UobCxhKTt0aGlzLnNwbGljZUJvcmRlcihkKSx0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlz''@;'; put 'put ''LmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRlcnM7Zj1mJiZ2b2lkIDAhPT1mLmJvcmRlcj9ZSihmKTpHSihsLGEpLGg/KGZbZF09e2hpZGU6ITB9LDQ9PT10aGlzLmNvdW50SGlkZShmKT90aGlzLnJlbW92ZUFsbEJvcmRlcnMobCxhKToodGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9t''@;'; put 'put ''Q29udGV4dE1lbnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKGYpKSkpOihmW2RdPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0sdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1l''@;'; put 'put ''bnUoZixkLGgpfHx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhmKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLFBUKGYpKSl9cHJlcGFyZUJvcmRlcihsLGEsZCl7WW4obCxoPT57bGV0e3N0YXJ0OmYsZW5kOnZ9PWg7aWYoZi5yb3c9PT12LnJvdyYmZi5jb2w9PT12''@;'; put 'put ''LmNvbCkibm9Cb3JkZXJzIj09PWE/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGYucm93LGYuY29sKTp0aGlzLnNldEJvcmRlcihmLnJvdyxmLmNvbCxhLGQpO2Vsc2Ugc3dpdGNoKGEpe2Nhc2Uibm9Cb3JkZXJzIjpHYShmLmNvbCx2LmNvbCxNPT57R2EoZi5yb3csdi5yb3csST0+e3RoaXMucmVt''@;'; put 'put ''b3ZlQWxsQm9yZGVycyhJLE0pfSl9KTticmVhaztjYXNlInRvcCI6R2EoZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9yZGVyKGYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2UiYm90dG9tIjpHYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIodi5yb3csTSxhLGQpfSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJzdGFydCI6R2EoZi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sZi5jb2wsYSxkKX0pO2JyZWFrO2Nhc2UiZW5kIjpHYShmLnJvdyx2LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSx2LmNvbCxhLGQpfSl9fSl9Y3JlYXRlQ3VzdG9tQm9yZGVycyhsKXtZbihsLGE9Pntjb25zdCBk''@;'; put 'put ''PVlKKGEpO2EucmFuZ2U/dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09''@;'; put 'put ''bDtyZXR1cm4gcXUoW2EsZCxoLGZdLChNLEkpPT57bGV0IEc9TTtyZXR1cm4gSSYmSS5oaWRlJiYoRys9MSksR30sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9YnModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9''@;'; put 'put ''PmQuc2V0dGluZ3MuaWQpLmluZGV4T2YobCk7YT4tMSYmdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEp''@;'; put 'put ''PT57aWYobnVsbD09PWwuY2VsbFJhbmdlKXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJz''@;'; put 'put ''KCl7WW4odGhpcy5zYXZlZEJvcmRlcnMsbD0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT1icyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwp''@;'; put 'put ''O2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJzLnNwbGljZShhLDEpfWNoZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOlluKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09''@;'; put 'put ''PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzW2ZdPWwsYT0hMCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gWW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihs''@;'; put 'put ''LmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1cm4gWW4odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoZiksTT0+e00udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3Qg''@;'; put 'put ''aD10aGlzLmNvdW50SGlkZShsKTtsZXQgZj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCksZj0hMCk6WW4odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLHY9PntpZihsLmlkPT09di5zZXR0aW5ncy5pZClyZXR1''@;'; put 'put ''cm4gdi52aXN1YWxDZWxsUmFuZ2U9YSx2LmNvbW1pdCgpLGQmJlluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKHYpLEk9PntJLmNoYW5nZUJvcmRlclN0eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQRl07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1nMShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZv''@;'; put 'put ''aWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gejB0KGMpe3JldHVybiBjLnNvbWUobD0+UGEobC5sZWZ0KXx8UGEobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIFUwdChj''@;'; put 'put ''KXtyZXR1cm4gYy5zb21lKGw9PlBhKGwuc3RhcnQpfHxQYShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhl''@;'; put 'put ''IG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpfWRlc3Ryb3ko''@;'; put 'put ''KXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGkxdChjKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXSYmYy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNcSl9LGRpc2FibGVkKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIShsJiYhbC5pc1NpbmdsZUhlYWRlcigpKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOltZMHQodGhpcyksRzB0KHRoaXMpLCQwdCh0aGlzKSxLMHQodGhpcykscTB0''@;'; put 'put ''KHRoaXMpXX19KX1mdW5jdGlvbiBhMXQoKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZnVuY3Rpb24gS0ooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGwxdChjKXt2YXIgbD1mdW5jdGlvbiBjMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWZ1bmN0aW9uIEhnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2Jq''@;'; put 'put ''ZWN0Iil9Y29uc3QgTmdlPSJkcmFnVG9TY3JvbGwiO3ZhciBxSj1uZXcgV2Vha1NldDtjbGFzcyBkMXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzF0KGMsbCl7KGZ1bmN0aW9uIHMxdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHFKKSxLSih0aGlzLCJib3VuZGFyaWVzIixudWxsKSxLSih0aGlzLCJjYWxsYmFjayIsbnVsbCksS0oodGhpcywibGlz''@;'; put 'put ''dGVuaW5nIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE5nZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW05nZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwo''@;'; put 'put ''dGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+SGdlKHFKLHRoaXMsVmdlKS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PkhnZShxSix0aGlzLFZnZSkuY2FsbCh0aGlzLGwpKSx0aGlzLnJlZ2lzdGVyRXZlbnRz''@;'; put 'put ''KCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMudW5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1z''@;'; put 'put ''ZXRCb3VuZGFyaWVzKCl7dGhpcy5ib3VuZGFyaWVzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bGVmdDowLHJpZ2h0OnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206dGhpcy5ob3Qucm9vdFdpbmRvdy5p''@;'; put 'put ''bm5lckhlaWdodH19c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1sfWNoZWNrKGwsYSl7bGV0IGQ9MCxoPTA7YTx0aGlzLmJvdW5kYXJpZXMudG9wP2g9YS10aGlzLmJvdW5kYXJpZXMudG9wOmE+dGhpcy5ib3VuZGFyaWVzLmJvdHRvbSYmKGg9YS10aGlzLmJvdW5kYXJpZXMuYm90dG9t''@;'; put 'put ''KSxsPHRoaXMuYm91bmRhcmllcy5sZWZ0P2Q9bC10aGlzLmJvdW5kYXJpZXMubGVmdDpsPnRoaXMuYm91bmRhcmllcy5yaWdodCYmKGQ9bC10aGlzLmJvdW5kYXJpZXMucmlnaHQpLHRoaXMuY2FsbGJhY2soZCxoKX1saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMH11bmxpc3Rlbigpe3RoaXMu''@;'; put 'put ''bGlzdGVuaW5nPSExfWlzTGlzdGVuaW5nKCl7cmV0dXJuIHRoaXMubGlzdGVuaW5nfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmhvdDtsZXQgYT1sO2Zvcig7YTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJjb250ZXh0''@;'; put 'put ''bWVudSIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZXVwIiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNlbW92ZSIsZD0+''@;'; put 'put ''dGhpcy5vbk1vdXNlTW92ZShkKSksYT1CNyhhKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3ko''@;'; put 'put ''KX19ZnVuY3Rpb24gVmdlKGMpe2lmKEhtKGMpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDt0aGlzLnNldEJvdW5kYXJpZXMobCE9PXRoaXMuaG90LnJvb3RXaW5kb3c/bC5nZXRCb3VuZGlu''@;'; put 'put ''Z0NsaWVudFJlY3QoKTp2b2lkIDApLHRoaXMuc2V0Q2FsbGJhY2soKGEsZCk9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbCE9PShoPWwuc2Nyb2xsTGVmdCkmJnZvaWQgMCE9PWg/aDpsLnNjcm9sbFgsTT1udWxsIT09KGY9bC5zY3JvbGxUb3ApJiZ2b2lkIDAhPT1mP2Y6bC5zY3JvbGxZO2wuc2Ny''@;'; put 'put ''b2xsKHYrNTAqTWF0aC5zaWduKGEpLE0rMjAqTWF0aC5zaWduKGQpKX0pLHRoaXMubGlzdGVuKCl9ZnVuY3Rpb24gQmdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX1mdW5jdGlvbiBYSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcDF0KGMpe3ZhciBsPWZ1bmN0aW9uIGcxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gamdlKGMsbCxhKXtyZXR1cm4gYy5zZXQo''@;'; put 'put ''cTIoYyxsKSxhKSxhfWZ1bmN0aW9uIHEyKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51''@;'; put 'put ''U2hvdyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgRkY9ImRyb3Bkb3duTWVudSIsRlQ9ImNoYW5nZVR5cGUiLEpKPUZGO3ZhciBI''@;'; put 'put ''Rj1uZXcgV2Vha01hcCxnMz1uZXcgV2Vha1NldDtjbGFzcyBORiBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1''@;'; put 'put ''dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW3dULENULHNzLE1ULHNzLGJGLHNzLFNULHNzLEsyXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBoMXQoYyxsKXtCZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxnMyksWEoodGhpcywiY29tbWFu''@;'; put 'put ''ZEV4ZWN1dG9yIixuZXcgZ2dlKHRoaXMuaG90KSksWEoodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSxYSih0aGlzLCJtZW51IixudWxsKSxmdW5jdGlvbiBmMXQoYyxsLGEpe0JnZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsSEYsITEpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVh''@;'; put 'put ''ZGVyIiwoYSxkKT0+cTIoZzMsdGhpcyxiMXQpLmNhbGwodGhpcyxhLGQpKX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGRl19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBiZ2Uo''@;'; put 'put ''dGhpcy5ob3QsTkYuREVGQVVMVF9JVEVNUyksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHEyKGczLGwseDF0''@;'; put 'put ''KS5jYWxsKGwsLi4uZil9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBxMihnMyxsLE0x''@;'; put 'put ''dCkuY2FsbChsLC4uLmYpfSk7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0ZGXSxkPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRv''@;'; put 'put ''ci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy5jYWxsT25QbHVnaW5zUmVhZHkoKCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhp''@;'; put 'put ''cy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1uZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHREcm9wZG93bk1lbnUi''@;'; put 'put ''LGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSx0aGlzLm1lbnUuYWRkTG9j''@;'; put 'put ''YWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+cTIoZzMsdGhpcyxfMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnEyKGczLHRoaXMsdzF0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIixmPT5x''@;'; put 'put ''MihnMyx0aGlzLEMxdCkuY2FsbCh0aGlzLGYpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+cTIoZzMsdGhpcyxTMXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBsLmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi52KX0pLFluKGgsZj0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGYua2V5LGYpKX0pfXVwZGF0ZVBsdWdpbigp''@;'; put 'put ''e3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT0oKT0+e2NvbnN0e2hpZ2hsaWdodDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKChkLmlzSGVhZGVyKCkmJi0xPT09ZC5yb3d8fGQuaXNDZWxsKCkpJiZkLmNvbD49MCl7dGhpcy5ob3Quc2VsZWN0Q29sdW1u''@;'; put 'put ''cyhkLmNvbCxkLmNvbCwtMSk7Y29uc3R7ZnJvbTpofT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9ZkYodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLHY9dGhpcy5ob3QuZ2V0Q2VsbCgtMSxoLmNvbCwhMCkucXVlcnlTZWxlY3RvcihgLiR7RlR9''@;'; put 'put ''YCksTT12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMub3Blbih7bGVmdDpNLmxlZnQrZi5sZWZ0LHRvcDpNLnRvcCt2Lm9mZnNldEhlaWdodCtmLnRvcH0se2xlZnQ6TS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pLHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0''@;'; put 'put ''SXRlbSgpfX07dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXSxbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7''@;'; put 'put ''Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoKSYmaC5pc0hlYWRlcigpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9''@;'; put 'put ''LGNhcHR1cmVDdHJsOiEwLGdyb3VwOkpKfSx7a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdXSxjYWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpk''@;'; put 'put ''LmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNDZWxsKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6Skp9XSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRl''@;'; put 'put ''eHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEpKKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixsPT5xMihnMyx0aGlzLHkxdCkuY2FsbCh0aGlzLGwpKX1vcGVuKGwpe3ZhciBh''@;'; put 'put ''O2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtudWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpfHwodGhpcy5tZW51Lm9wZW4oKSxYbyhk''@;'; put 'put ''LChoLGYpPT57dGhpcy5tZW51LnNldE9mZnNldChmLGgpfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpKX1jbG9zZSgpe3ZhciBsO251bGw9PT0obD10aGlzLm1lbnUpfHx2b2lkIDA9PT1sfHxsLmNsb3NlKCl9ZXhlY3V0ZUNvbW1hbmQobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''ZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1zZXRMaXN0ZW5pbmcoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1l''@;'; put 'put ''bnRzWzBdO3RoaXMubWVudS5pc09wZW5lZCgpJiYobD90aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTp0aGlzLm1lbnUuaG90TWVudS51bmxpc3RlbigpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0''@;'; put 'put ''aW9uIHpnZShjKXtjLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSl9ZnVuY3Rpb24geTF0KGMpe2lmKHBvKGMudGFyZ2V0LEZUKSl7Y29uc3QgbD1mRih0aGlzLm1lbnUu''@;'; put 'put ''Y29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksYT1jLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjLnN0b3BQcm9wYWdhdGlvbigpLGpnZShIRix0aGlzLCExKSx0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2wubGVmdCx0b3A6YS50b3ArYy50YXJnZXQub2Zmc2V0SGVpZ2h0''@;'; put 'put ''K2wudG9wfSx7bGVmdDphLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSl9fWZ1bmN0aW9uIGIxdChjLGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2lmKCFhKXJldHVybjtjb25zdCBkPWEucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChk''@;'; put 'put ''LGEpO2lmKGM8MHx8aCE9PWQubGVuZ3RoLTEpcmV0dXJuO2NvbnN0IGY9bC5xdWVyeVNlbGVjdG9yKGAuJHtGVH1gKTtpZih0aGlzLmVuYWJsZWQmJmYpcmV0dXJuO2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQoZiYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpKTtjb25zdCB2PXRo''@;'; put 'put ''aXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTt2LmNsYXNzTmFtZT1GVCx2LnR5cGU9ImJ1dHRvbiIsdi50YWJJbmRleD0tMSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYodm8odixbVjcoKSxtRSgiICIpXSksdm8obCxbRTJlKCJtZW51IildKSks''@;'; put 'put ''di5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGwuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUodixsLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gXzF0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIHcxdCgpe3Ro''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLHRoaXMpLHEyKGczLHRoaXMsemdlKS5jYWxsKHRoaXMsdGhpcy5tZW51KX1mdW5jdGlvbiBDMXQoYyl7cTIoZzMsdGhpcyx6Z2UpLmNhbGwodGhpcyxjKX1mdW5jdGlvbiBTMXQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIix0aGlzKX1mdW5jdGlvbiBNMXQoYyl7cmV0dXJuIGZ1bmN0aW9uIG0xdChjLGwpe3JldHVybiBjLmdldChxMihjLGwpKX0oSEYsdGhpcyk/bnVsbDpjfWZ1bmN0aW9uIHgxdChjKXtwbyhjLnRhcmdldCxGVCkmJmpnZShIRix0''@;'; put 'put ''aGlzLCEwKX1mdW5jdGlvbiBVZ2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEUxdChjKXt2YXIgbD1mdW5jdGlvbiBUMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh''@;'; put 'put ''bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfU5GLlNFUEFSQVRPUj17bmFtZTpzc307Y29uc3QgazF0''@;'; put 'put ''PWNsYXNzIEExdHtjb25zdHJ1Y3RvcihsKXtVZ2UodGhpcywiaG90Iix2b2lkIDApLFVnZSh0aGlzLCJvcHRpb25zIix7fSksdGhpcy5ob3Q9bH1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29s''@;'; put 'put ''Omh9PXRoaXMuX2dldERhdGFSYW5nZSgpLGY9dGhpcy5vcHRpb25zLHY9W107cmV0dXJuIEdhKGwsZCxNPT57Y29uc3QgST1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhNKXx8KEdhKGEsaCxHPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRk''@;'; put 'put ''ZW5Db2x1bW4oRyl8fEkucHVzaCh0aGlzLmhvdC5nZXREYXRhQXRDZWxsKE0sRykpfSksdi5wdXNoKEkpKX0pLHZ9Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5n''@;'; put 'put ''ZSgpLGg9dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7R2EoYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMu''@;'; put 'put ''Y29sdW1uSGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtHYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVz''@;'; put 'put ''aChoW2ZdKX0pfXJldHVybiBsfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSx2PWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgo''@;'; put 'put ''aCwwKSxmPU1hdGgubWluKGYsYSksdj1NYXRoLm1pbih2LGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOnZ9fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lz''@;'; put 'put ''SGlkZGVuQ29sdW1uKGwpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19O2Z1bmN0aW9uIFpnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDF0KGMpe3ZhciBsPWZ1bmN0aW9uIEkxdChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUUp7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvcGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZ''@;'; put 'put ''WV0tW01NXS1bRERdIixlbmNvZGluZzoidXRmLTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRlcnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dzOiExLHJhbmdlOltdfX1jb25zdHJ1Y3RvcihsLGEpe1pnZSh0aGlzLCJkYXRhUHJvdmlkZXIiLHZv''@;'; put 'put ''aWQgMCksWmdlKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksdGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNldE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPW4zKHRoaXMuY29u''@;'; put 'put ''c3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCBkPW5ldyBEYXRlO3JldHVybiBhPUV1KG4zKFFKLkRFRkFVTFRfT1BUSU9OUyksYSksYT1FdShhLGwpLGEuZmlsZW5hbWU9cCQoYS5maWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06YCR7ZC5nZXRNb250aCgpKzF9YC5wYWRT''@;'; put 'put ''dGFydCgyLCIwIiksREQ6YCR7ZC5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCIwIil9KSxhfX1jb25zdCBSMXQ9UUo7ZnVuY3Rpb24gV2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZVE9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gVTF0KGMpe3JldHVybiBjLnN0YXJ0c1dpdGgoIj0iKXx8Yy5zdGFydHNXaXRoKCIrIil8fGMuc3RhcnRzV2l0aCgiLSIpfHxjLnN0YXJ0''@;'; put 'put ''c1dpdGgoIkAiKXx8Yy5zdGFydHNXaXRoKCJcdCIpfHxjLnN0YXJ0c1dpdGgoIlxyIik/YCcke2N9YDpjfWZ1bmN0aW9uIFoxdChjLGwpe3JldHVybiBsLnRlc3QoYyk/YCcke2N9YDpjfWNvbnN0IHRRPXtjc3Y6Y2xhc3MgejF0IGV4dGVuZHMgUjF0e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4u''@;'; put 'put ''YXJndW1lbnRzKSxmdW5jdGlvbiBMMXQoYyxsKXsoZnVuY3Rpb24gTzF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRo''@;'; put 'put ''aXMsZVEpfXN0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4iLHNhbml0aXplVmFsdWVzOiExfX1leHBvcnQoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMub3B0aW9ucyxhPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5ndGg+MDtsZXQgTT1sLmJv''@;'; put 'put ''bT8iXHVmZWZmIjoiIjtyZXR1cm4gaCYmKGQ9YnMoZCxJPT50aGlzLl9lc2NhcGVDZWxsKEkse2ZvcmNlOiEwLHNhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKSx2JiYoTSs9bC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWQuam9pbihsLmNvbHVtbkRlbGltaXRlciksTSs9bC5yb3dEZWxp''@;'; put 'put ''bWl0ZXIpLFluKGEsKEksRyk9PntHPjAmJihNKz1sLnJvd0RlbGltaXRlciksdiYmKE0rPXRoaXMuX2VzY2FwZUNlbGwoZltHXSx7c2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSksTSs9bC5jb2x1bW5EZWxpbWl0ZXIpO2NvbnN0IGllPUkubWFwKHVlPT50aGlzLl9lc2NhcGVDZWxs''@;'; put 'put ''KHVlLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSkuam9pbihsLmNvbHVtbkRlbGltaXRlcik7TSs9aWV9KSxNfV9lc2NhcGVDZWxsKGwpe2xldHtmb3JjZTphPSExLHNhbml0aXplVmFsdWU6ZD0hMX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOnt9LGg9bGMobCk7cmV0dXJuIiI9PT1ofHwoZCYmKGE9ITApLGQgaW5zdGFuY2VvZiBSZWdFeHA/aD1XZ2UoZVEsdGhpcyxaMXQpLmNhbGwodGhpcyxoLGQpOiJmdW5jdGlvbiI9PXR5cGVvZiBkP2g9ZChoKTpkJiYoaD1XZ2UoZVEsdGhpcyxVMXQpLmNhbGwodGhpcyxo''@;'; put 'put ''KSksKGF8fGguaW5kZXhPZigiXHIiKT49MHx8aC5pbmRleE9mKCciJyk+PTB8fGguaW5kZXhPZigiXG4iKT49MHx8aC5pbmRleE9mKHRoaXMub3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpPj0wKSYmKGg9aC5yZXBsYWNlKG5ldyBSZWdFeHAoJyInLCJnIiksJyIiJyksaD1gIiR7aH0iYCkpLGh9''@;'; put 'put ''fX07Y2xhc3MgcTF0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRl''@;'; put 'put ''VHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhp''@;'; put 'put ''cy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksdj10aGlzLl9jcmVhdGVCbG9iKGYpLE09aC5VUkx8fGgud2Via2l0VVJMLEk9ZC5jcmVhdGVFbGVtZW50KCJhIiksRz1gJHtmLm9wdGlvbnMuZmlsZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lk''@;'; put 'put ''IDAhPT1JLmRvd25sb2FkKXtjb25zdCBpZT1NLmNyZWF0ZU9iamVjdFVSTCh2KTtJLnN0eWxlLmRpc3BsYXk9Im5vbmUiLEkuc2V0QXR0cmlidXRlKCJocmVmIixpZSksSS5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixHKSxkLmJvZHkuYXBwZW5kQ2hpbGQoSSksSS5kaXNwYXRjaEV2ZW50KG5l''@;'; put 'put ''dyBNb3VzZUV2ZW50KCJjbGljayIpKSxkLmJvZHkucmVtb3ZlQ2hpbGQoSSksc2V0VGltZW91dCgoKT0+e00ucmV2b2tlT2JqZWN0VVJMKGllKX0sMTAwKX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiZuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYih2LEcpfV9jcmVhdGVUeXBl''@;'; put 'put ''Rm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighdFFbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IEcxdChjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRRW2NdP25ldyB0UVtjXShsLGEpOm51bGx9KGwsbmV3IGsxdCh0aGlzLmhvdCksYSl9X2NyZWF0ZUJsb2IobCl7bGV0IGE9bnVsbDtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiYoYT1uZXcgQmxvYihbbC5leHBvcnQoKV0se3R5''@;'; put 'put ''cGU6YCR7bC5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7bC5vcHRpb25zLmVuY29kaW5nfWB9KSksYX19ZnVuY3Rpb24gbncoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFgxdChjKXt2YXIgbD1mdW5jdGlvbiBKMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEhUe2NvbnN0cnVjdG9yKGwsYSl7bGV0e2lkOmQsc3RhdGVsZXNzOmg9ITB9PWE7bncodGhpcywiaG90Iix2b2lkIDApLG53KHRoaXMsImlkIix2b2lkIDApLG53KHRoaXMsImVsZW1lbnRzIixbXSksbncodGhpcywiaGlkZGVuIiwhMSksbnco''@;'; put 'put ''dGhpcywic3RhdGVJZCIsIiIpLG53KHRoaXMsInN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAo''@;'; put 'put ''dGhpcy5zdGF0ZUlkLG5ldyBwUCl9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50c31yZXNldCgpe1luKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRkZW49ITB9c2hvdygpe3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10''@;'; put 'put ''aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQi''@;'; put 'put ''KX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxZbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0YXRlPW51bGwsdGhpcy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fVRsKEhULGIxKTtj''@;'; put 'put ''b25zdCBOVD17fTtmdW5jdGlvbiByNihjLGwpe2lmKCFOVFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpkfT1OVFtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3Jh''@;'; put 'put ''dG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShmLm1ldGEuaW5zdGFuY2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gdzkoYyl7aWYoIU5UW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2Vz''@;'; put 'put ''IG5vdCBleGlzdC5gKTtyZXR1cm4gTlRbY10uZGVzY3JpcHRvcn1mdW5jdGlvbiBrdShjLGwsYSl7YS5rZXk9YyxOVFtjXT17Y29uZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBFMD0ibm9uZSI7a3UoRTAsZnVuY3Rpb24gUTF0KCl7cmV0dXJuITB9LHtuYW1lOndQLGlucHV0c0NvdW50''@;'; put 'put ''OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IFZUPSJlbXB0eSI7a3UoVlQsZnVuY3Rpb24gZWR0KGMpe3JldHVybiBVYyhjLnZhbHVlKX0se25hbWU6RnEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgVkY9Im5vdF9lbXB0eSI7a3UoVkYsZnVuY3Rpb24gdGR0KGMs''@;'; put 'put ''bCl7cmV0dXJuIXI2KFZULGwpKGMpfSx7bmFtZTpIcSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCVD0iZXEiO2t1KEJULGZ1bmN0aW9uIG5kdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09''@;'; put 'put ''PWxjKGEpfSx7bmFtZTpOcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBCRj0ibmVxIjtrdShCRixmdW5jdGlvbiByZHQoYyxsKXtyZXR1cm4hcjYoQlQsbCkoYyl9LHtuYW1lOlZxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndCIsZnVuY3Rp''@;'; put 'put ''b24gaWR0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPmR9LHtuYW1lOlpxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGt1KCJndGUiLGZ1bmN0aW9uIGFkdChjLGwpe2xldFthXT1s''@;'; put 'put ''LGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6V3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0IixmdW5jdGlvbiBvZHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMi''@;'; put 'put ''PT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6WXEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa3UoImx0ZSIsZnVuY3Rpb24gc2R0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1w''@;'; put 'put ''YXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpHcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBuUT0iZGF0ZV9hZnRlciI7a3UoblEsZnVuY3Rpb24gbGR0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxo''@;'; put 'put ''PU9vKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9LHtuYW1lOnFxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHJRPSJkYXRlX2JlZm9yZSI7a3UoclEsZnVuY3Rpb24gY2R0KGMsbCl7''@;'; put 'put ''bGV0W2FdPWw7Y29uc3QgZD1PbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPU9vKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlhxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0p''@;'; put 'put ''O2NvbnN0IGpGPSJiZXR3ZWVuIjtrdShqRixmdW5jdGlvbiB1ZHQoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cGFyc2VGbG9hdChoLDEwKSxNPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbih2LE0pLGY9TWF0aC5tYXgodixN''@;'; put 'put ''KX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXI2KHJRLFtmXSksTT1yNihuUSxbaF0pO3JldHVybiB2KGMpJiZNKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTokcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBYZ2U9''@;'; put 'put ''Im5vdF9iZXR3ZWVuIjtrdShYZ2UsZnVuY3Rpb24gZGR0KGMsbCl7cmV0dXJuIXI2KGpGLGwpKGMpfSx7bmFtZTpLcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBKZ2U9ImJlZ2luc193aXRoIjtrdShKZ2UsZnVuY3Rpb24gaGR0KGMsbCl7bGV0W2FdPWw7cmV0dXJu''@;'; put 'put ''IGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgobGMoYSkpfSx7bmFtZTpCcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrdSgiZW5kc193aXRoIixmdW5jdGlvbiBmZHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMoYy52YWx1''@;'; put 'put ''ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgobGMoYSkpfSx7bmFtZTpqcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBpUT0iY29udGFpbnMiO2t1KGlRLGZ1bmN0aW9uIHBkdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVl''@;'; put 'put ''KS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKGxjKGEpKT49MH0se25hbWU6enEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZTVlPSJub3RfY29udGFpbnMiO2t1KGU1ZSxmdW5jdGlvbiBnZHQoYyxsKXtyZXR1cm4hcjYoaVEsbCkoYyl9''@;'; put 'put ''LHtuYW1lOlVxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHQ1ZT0iZGF0ZV90b21vcnJvdyI7a3UodDVlLGZ1bmN0aW9uIG1kdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCku''@;'; put 'put ''c3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpRcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgbjVlPSJkYXRlX3RvZGF5IjtrdShuNWUsZnVuY3Rpb24gdmR0KGMpe2NvbnN0IGw9T28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFs''@;'; put 'put ''aWQoKSYmbC5pc1NhbWUoT28oKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpKcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgcjVlPSJkYXRlX3llc3RlcmRheSI7a3UocjVlLGZ1bmN0aW9uIHlkdChjKXtjb25zdCBsPU9vKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5p''@;'; put 'put ''c1ZhbGlkKCkmJmwuaXNTYW1lKE9vKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOmVYLGlucHV0c0NvdW50OjB9KTtjb25zdCBhNWU9e251bWVyaWM6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLCJndCIsImd0ZSIsImx0IiwibHRlIixqRixYZ2VdLHRl''@;'; put 'put ''eHQ6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLEpnZSwiZW5kc193aXRoIixzcyxpUSxlNWVdLGRhdGU6W0UwLHNzLFZULFZGLHNzLEJULEJGLHNzLHJRLG5RLGpGLHNzLHQ1ZSxuNWUscjVlXX07ZnVuY3Rpb24galQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIENkdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiBTZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGFRPSJidWlsdCIsb1E9ImJ1aWxkaW5nIixvNWU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIi''@;'; put 'put ''LCJjaGFuZ2UiXTtjbGFzcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3RvcihsLGEpe2pUKHRoaXMsImhvdCIsdm9pZCAwKSxqVCh0aGlzLCJldmVu''@;'; put 'put ''dE1hbmFnZXIiLG5ldyBqMih0aGlzKSksalQodGhpcywib3B0aW9ucyIsdm9pZCAwKSxqVCh0aGlzLCJfZWxlbWVudCIsdm9pZCAwKSxqVCh0aGlzLCJidWlsZFN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPUV1KEhoLkRFRkFVTFRTLGEpLHRoaXMuX2VsZW1lbnQ9dGhp''@;'; put 'put ''cy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSl9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9''@;'; put 'put ''Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09b1E/dGhpcy5fZWxlbWVudDp0aGlzLmJ1aWxkU3RhdGU9PT1hUT8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPW9RLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9YVEsdGhpcy5f''@;'; put 'put ''ZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1hUX10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKHExKT90aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShh''@;'; put 'put ''LGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1vUSksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iiwh''@;'; put 'put ''MCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnRhYkluZGV4JiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMub3B0aW9ucy50YWJJbmRleCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIix0aGlzLm9w''@;'; put 'put ''dGlvbnMucm9sZSksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmVGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKVluKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxl''@;'; put 'put ''bWVudCkpO2Vsc2UgaWYodGhpcy5vcHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7YS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksWG8odGhpcy5vcHRpb25zLChkLGgpPT57dm9p''@;'; put 'put ''ZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksWW4obzVlLGQ9PmwoYSxkKSl9ZWxzZSBZbihvNWUsYT0+bCh0aGlz''@;'; put 'put ''Ll9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5ob3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fWZ1''@;'; put 'put ''bmN0aW9uIHM1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gekYoYyxsKXtyZXR1cm4gYy5nZXQoc1EoYyxsKSl9ZnVuY3Rpb24gc1Eo''@;'; put 'put ''YyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKEhoLGIxKTt2YXIgcnc9bmV3''@;'; put 'put ''IFdlYWtNYXAsbDVlPW5ldyBXZWFrU2V0O2NsYXNzIGk2IGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQiLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KGk2''@;'; put 'put ''LkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBNZHQoYyxsKXtzNWUoYyxsKSxsLmFkZChjKX0odGhpcyxsNWUpLGZ1bmN0aW9uIHhkdChjLGwsYSl7czVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxydyx2b2lkIDApLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExv''@;'; put 'put ''Y2FsSG9vaygia2V5dXAiLGw9PnNRKGw1ZSx0aGlzLFRkdCkuY2FsbCh0aGlzLGwpKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7KGZ1bmN0aW9uIEVkdChjLGwsYSl7Yy5zZXQoc1EoYyxsKSxhKX0pKHJ3''@;'; put 'put ''LHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSxUaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxUaShsLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoekYocncsdGhpcyku''@;'; put 'put ''dHlwZT10aGlzLm9wdGlvbnMudHlwZSx6Rihydyx0aGlzKS5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSx6Rihydyx0aGlzKS52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKSl9Zm9j''@;'; put 'put ''dXMoKXt0aGlzLmlzQnVpbHQoKSYmekYocncsdGhpcykuZm9jdXMoKX19ZnVuY3Rpb24gVGR0KGMpe3RoaXMub3B0aW9ucy52YWx1ZT1jLnRhcmdldC52YWx1ZX1mdW5jdGlvbiB6VChjLGwsYSl7YzVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGl3KGMsbCxhKXtyZXR1cm4gYy5zZXQoVVQoYyxsKSxhKSxhfWZ1bmN0aW9uICRjKGMsbCl7cmV0dXJuIGMuZ2V0KFVUKGMsbCkp''@;'; put 'put ''fWZ1bmN0aW9uIFVUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZzA9''@;'; put 'put ''bmV3IFdlYWtNYXAsVUY9bmV3IFdlYWtNYXAsWkY9bmV3IFdlYWtNYXAsbFE9bmV3IFdlYWtNYXAsV0Y9bmV3IFdlYWtNYXAsWUY9bmV3IFdlYWtTZXQ7Y2xhc3MgWlQgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdy''@;'; put 'put ''YXBJdDohMSx0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShaVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gQWR0KGMsbCl7YzVlKGMsbCksbC5hZGQoYyl9KHRoaXMsWUYpLHpUKHRoaXMsZzAsbnVsbCkselQodGhpcyxVRixbXSkselQodGhpcyxaRix2b2lkIDApLHpU''@;'; put 'put ''KHRoaXMsbFEsdm9pZCAwKSx6VCh0aGlzLFdGLHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0TWVudSgpe3JldHVybiAkYyhnMCx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+VVQoWUYsdGhpcyxJZHQpLmNhbGwodGhpcykpfXNldEl0''@;'; put 'put ''ZW1zKGwpe2l3KFVGLHRoaXMsdGhpcy50cmFuc2xhdGVOYW1lcyhsKSksJGMoZzAsdGhpcykmJiRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhVRix0aGlzKSl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIFluKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1l''@;'; put 'put ''KX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgpLGl3KGcwLHRoaXMsbmV3IHFfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29u''@;'; put 'put ''dGFpbmVyfSkpLCRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhVRix0aGlzKSk7Y29uc3QgbD1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pO2l3KFpGLHRo''@;'; put 'put ''aXMsbCksaXcobFEsdGhpcyxsLmVsZW1lbnQpLGl3KFdGLHRoaXMsYSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZvKGEuZWxlbWVudCxbVjcoKV0pLHZvKHRoaXMuX2VsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXV0pKSxZbihbbCxhXSxkPT50aGlzLl9lbGVtZW50LmFw''@;'; put 'put ''cGVuZENoaWxkKGQuZWxlbWVudCkpLCRjKGcwLHRoaXMpLmFkZExvY2FsSG9vaygic2VsZWN0IixkPT5VVChZRix0aGlzLGtkdCkuY2FsbCh0aGlzLGQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5VVChZRix0aGlzLERkdCkuY2FsbCh0aGlzKSksdGhpcy51''@;'; put 'put ''cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOiRjKGcwLHRoaXMpLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHdQKSwkYyhsUSx0aGlzKS50ZXh0Q29udGVudD1sLHN1cGVy''@;'; put 'put ''LnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29uc3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5vcGVuKCksJGMoZzAsdGhpcykuc2V0UG9zaXRpb24oe2xlZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQt''@;'; put 'put ''MzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KSwkYyhnMCx0aGlzKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpLCRjKGcwLHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJT''@;'; put 'put ''aGlmdCIsIlRhYiJdXSxjYWxsYmFjazphPT57dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInRhYktleWRvd24iLGEpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+ITF9XSkpfWNsb3NlT3B0aW9ucygpeyRjKGcwLHRoaXMpJiYkYyhn''@;'; put 'put ''MCx0aGlzKS5jbG9zZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudC5mb2N1cygpfWRlc3Ryb3koKXskYyhnMCx0aGlzKSYmKCRjKGcwLHRoaXMpLmRlc3Ryb3koKSxpdyhnMCx0aGlzLG51bGwpKSwkYyhaRix0aGlzKSYmJGMoWkYsdGhpcykuZGVzdHJveSgpLCRjKFdG''@;'; put 'put ''LHRoaXMpJiYkYyhXRix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrZHQoYyl7Yy5uYW1lIT09c3MmJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1mdW5j''@;'; put 'put ''dGlvbiBEZHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1mdW5jdGlvbiBJZHQoKXt0aGlzLm9wZW5PcHRpb25zKCl9ZnVuY3Rpb24gdTVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPZHQoYyl7dmFyIGw9ZnVuY3Rpb24gUGR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBkNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBjUT1uZXcgV2Vha1NldDtjbGFzcyB1USBleHRlbmRzIEhUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBSZHQoYyxsKXsoZnVuY3Rpb24gTGR0KGMsbCl7aWYobC5oYXMo''@;'; put 'put ''YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsY1EpLHU1ZSh0aGlzLCJuYW1lIiwiIiksdTVlKHRoaXMsImFkZFNlcGFyYXRvciIsITEpLHRo''@;'; put 'put ''aXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBaVCh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6''@;'; put 'put ''Y1h9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6dVh9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygic2VsZWN0IixsPT5kNWUoY1EsdGhpcyxGZHQpLmNh''@;'; put 'put ''bGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIikpLmFkZExvY2FsSG9vaygidGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3RUYWJLZXlkb3duIixsKSksWW4odGhpcy5nZXRJbnB1dEVs''@;'; put 'put ''ZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT5kNWUoY1EsdGhpcyxIZHQpLmNhbGwodGhpcyxhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9bjMobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aChXYykmJihhLm5hbWU9''@;'; put 'put ''dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxZbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUo''@;'; put 'put ''ZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fHc5KEUwKSxhPVtdO3JldHVybiBZbih0''@;'; put 'put ''aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFsdWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPXc5KGw/bC5uYW1lOkUwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21t''@;'; put 'put ''YW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFpUKVswXX1nZXRJbnB1dEVsZW1lbnQoKXts''@;'; put 'put ''ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRzKClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgaTYpfWdl''@;'; put 'put ''dE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRl''@;'; put 'put ''cnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJlRpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixh''@;'; put 'put ''LmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsST0+YS5hcHBlbmRDaGlsZChJLmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVj''@;'; put 'put ''dGVkQ29sdW1uKCk7bGV0IGE9W3c5KEUwKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiB3ZHQoYyl7Y29uc3QgbD1bXTtsZXQgYT1jO3JldHVybiBhNWVbYV18fChhPSJ0ZXh0IiksWW4oYTVlW2FdLGQ9PntsZXQgaDtoPWQ9PT1zcz97bmFtZTpzc306''@;'; put 'put ''bjModzkoZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCks''@;'; put 'put ''dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9fWZ1bmN0aW9uIEZkdChjKXtZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwobCxhKT0+e2xbYy5pbnB1dHNDb3VudD5hPyJzaG93IjoiaGlkZSJdKCksMD09PWEmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pmwu''@;'; put 'put ''Zm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYyl9ZnVuY3Rpb24gSGR0KGMpe3VfKGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEIyKGMpKX1jb25zdCBXVD17fTtmdW5jdGlvbiBWZHQoYyl7cmV0dXJuIFdUW2NdLm5h''@;'; put 'put ''bWV9ZnVuY3Rpb24gZFEoYyxsLGEpe1dUW2NdPXtuYW1lOmwsZnVuYzphfX1jb25zdCBhNj0iY29uanVuY3Rpb24iO2RRKGE2LHJYLGZ1bmN0aW9uIGpkdChjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCBHRj0iZGlzanVuY3Rpb24iO2RRKEdGLENQLGZ1bmN0aW9u''@;'; put 'put ''IFVkdChjLGwpe3JldHVybiBjLnNvbWUoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IGhRPSJkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7ZnVuY3Rpb24gaDVlKGMsbCxhKXsoZnVuY3Rpb24gWWR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZVChjLGwpe3JldHVybiBjLmdldChwNWUoYyxsKSl9ZnVuY3Rpb24gZjVlKGMsbCxhKXtyZXR1cm4gYy5zZXQocDVlKGMsbCksYSksYX1mdW5jdGlv''@;'; put 'put ''biBwNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWRRKGhRLENQLGZ1bmN0''@;'; put 'put ''aW9uIFdkdChjLGwpe2lmKGMubGVuZ3RoPDMpdGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIGMuc2xpY2UoMCxjLmxlbmd0aC0xKS5zb21lKGE9PmEuZnVuYyhsKSkmJmNbYy5sZW5ndGgtMV0uZnVuYyhs''@;'; put 'put ''KX0pO3ZhciBhdz1uZXcgV2Vha01hcCxmUT1uZXcgV2Vha01hcDtjbGFzcyAkRiBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhKXtzdXBlcihsLEV1KCRGLkRFRkFVTFRTLGEpKSxoNWUodGhpcyxhdyx2b2lkIDApLGg1ZSh0aGlzLGZRLHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7bC50ZXh0Q29udGVudD10aGlz''@;'; put 'put ''LnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxsLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSxmNWUoZlEsdGhpcyxsKSxmNWUoYXcsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hp''@;'; put 'put ''bGQpLFlUKGF3LHRoaXMpLmNoZWNrZWQ9dGhpcy5vcHRpb25zLmNoZWNrZWQsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoWVQoZlEsdGhpcykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRo''@;'; put 'put ''aXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCkpfWlzQ2hlY2tlZCgpe3JldHVybiEhdGhpcy5pc0J1aWx0KCkmJllUKGF3LHRoaXMpLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07''@;'; put 'put ''dGhpcy5pc0J1aWx0KCkmJihZVChhdyx0aGlzKS5jaGVja2VkPWwpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJllUKGF3LHRoaXMpLmZvY3VzKCl9fXZhciBtNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgUWR0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRl''@;'; put 'put ''bGVzczohMX0pLGZ1bmN0aW9uIEdkdChjLGwpeyhmdW5jdGlvbiAkZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhp''@;'; put 'put ''cyxtNWUpLGZ1bmN0aW9uIEtkdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcWR0KGMpe3ZhciBsPWZ1bmN0aW9uIFhkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1l''@;'; put 'put ''LHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4o''@;'; put 'put ''VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3JzIiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVthNixHRl07WW4obCxhPT57Y29uc3QgZD1uZXcgJEYodGhpcy5ob3Qs''@;'; put 'put ''e25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRtbEZvcjphLHRleHRDb250ZW50OlZkdChhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT5mdW5jdGlvbiBKZHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMu''@;'; put 'put ''aGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShtNWUsdGhpcyxlaHQpLmNhbGwodGhpcyxoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hl''@;'; put 'put ''Y2tlZChsKXtpZih0aGlzLmVsZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKGdsYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtZbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5zZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmVsZW1lbnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mICRGJiZhLmlzQ2hlY2tlZCgpKTtyZXR1cm4gbD9sLmdldFZhbHVlKCk6YTZ9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlz''@;'; put 'put ''LmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1sJiZZbih0aGlzLmVsZW1lbnRzLGE9PnthLnNldENoZWNrZWQoYS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTphNjtkPT09''@;'; put 'put ''aFEmJihkPUdGKSx0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX19ZnVuY3Rpb24gZWh0KGMpe3RoaXMuc2V0U3RhdGUoYy50YXJnZXQudmFsdWUpfWZ1bmN0aW9uIG5o''@;'; put 'put ''dChjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1mdW5jdGlvbiBHVChjKXtjb25zdCBsPW5ldyBTZXQoYyk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmhhcyhhKX19ZnVuY3Rpb24gcFEoYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uIGdRKGMpe3JldHVybiBB''@;'; put 'put ''cnJheS5mcm9tKG5ldyBTZXQoYykpLm1hcChsPT5wUShsKSkuc29ydCgobCxhKT0+Im51bWJlciI9PXR5cGVvZiBsJiYibnVtYmVyIj09dHlwZW9mIGE/bC1hOmw9PT1hPzA6bD5hPzE6LTEpfWZ1bmN0aW9uIHY1ZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IHY7cmV0dXJuIGZ8''@;'; put 'put ''fCh2PUdUKGwpKSxjLmZvckVhY2goTT0+e2xldCBJPSExOyhmfHx2KE0pKSYmKEk9ITApO2NvbnN0IEc9e2NoZWNrZWQ6SSx2YWx1ZTpNLHZpc3VhbFZhbHVlOm5odChNLGEpfTtkJiZkKEcpLGgucHVzaChHKX0pLGh9ZnVuY3Rpb24gbVEoYyxsKXtyZXR1cm4gYy5nZXQoeTVlKGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIHk1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9cTJlKCk7dmFy''@;'; put 'put ''ICRUPW5ldyBXZWFrTWFwO2NsYXNzIEtUIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7aHJlZjoiIyIsdGFnTmFtZToiYSIsdGFiSW5kZXg6LTEscm9sZToiYnV0dG9uIn0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxFdShLVC5ERUZBVUxUUyxhKSksZnVu''@;'; put 'put ''Y3Rpb24gcmh0KGMsbCxhKXsoZnVuY3Rpb24gaWh0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcywkVCx2b2lk''@;'; put 'put ''IDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxmdW5jdGlvbiBhaHQoYyxsLGEpe2Muc2V0KHk1ZShjLGwpLGEpfSgkVCx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihtUSgkVCx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlm''@;'; put 'put ''UG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmbVEoJFQsdGhpcykuZm9jdXMoKX1hY3RpdmF0ZSgpe21RKCRULHRoaXMpLmNsaWNrKCl9fWZ1bmN0aW9uIG93KGMsbCxhKXtiNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGI1ZShj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gam8oYyxsKXtyZXR1cm4gYy5nZXQoc3coYyxsKSl9ZnVuY3Rpb24gbTMoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjLnNldChzdyhjLGwpLGEpLGF9ZnVuY3Rpb24gc3coYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0''@;'; put 'put ''aGlzIG9iamVjdCIpfWNvbnN0IF81ZT0ibXVsdGlwbGVTZWxlY3QuaXRlbUJveCI7dmFyIHYzPW5ldyBXZWFrTWFwLHV1PW5ldyBXZWFrTWFwLHZRPW5ldyBXZWFrTWFwLEhnPW5ldyBXZWFrTWFwLG82PW5ldyBXZWFrTWFwLHM2PW5ldyBXZWFrTWFwLHFUPW5ldyBXZWFrU2V0O2NsYXNzIFhU''@;'; put 'put ''IGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEV1KFhULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBvaHQoYyxsKXtiNWUoYyxsKSxsLmFkZChj''@;'; put 'put ''KX0odGhpcyxxVCksb3codGhpcyx2MyxbXSksb3codGhpcyx1dSx2b2lkIDApLG93KHRoaXMsdlEsdm9pZCAwKSxvdyh0aGlzLEhnLHZvaWQgMCksb3codGhpcyxvNix2b2lkIDApLG93KHRoaXMsczYsdm9pZCAwKSxtMyhIZyx0aGlzLG5ldyBpNih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6bFgs''@;'; put 'put ''Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3RTZWFyY2gifSkpLG0zKG82LHRoaXMsbmV3IEtUKHRoaXMuaG90LHt0ZXh0Q29udGVudDppWCxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSkpLG0zKHM2LHRoaXMsbmV3IEtUKHRoaXMuaG90LHt0ZXh0Q29udGVudDphWCxjbGFzc05hbWU6''@;'; put 'put ''Imh0VUlDbGVhckFsbCJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gam8odXUsdGhpcyl9cmVnaXN0ZXJIb29rcygpe2pvKEhnLHRoaXMpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+c3cocVQsdGhpcyxsaHQpLmNhbGwodGhpcyxsKSksam8oSGcsdGhp''@;'; put 'put ''cykuYWRkTG9jYWxIb29rKCJpbnB1dCIsbD0+c3cocVQsdGhpcyxzaHQpLmNhbGwodGhpcyxsKSksam8obzYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQsdGhpcyxjaHQpLmNhbGwodGhpcyxsKSksam8oczYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+c3cocVQs''@;'; put 'put ''dGhpcyx1aHQpLmNhbGwodGhpcyxsKSl9c2V0SXRlbXMobCl7dmFyIGE7bTModjMsdGhpcyxsKSxudWxsPT09KGE9am8odXUsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmxvYWREYXRhKGpvKHYzLHRoaXMpKX1zZXRMb2NhbGUobCl7bTModlEsdGhpcyxsKX1nZXRMb2NhbGUoKXtyZXR1cm4gam8o''@;'; put 'put ''dlEsdGhpcyl9Z2V0SXRlbXMoKXtyZXR1cm5bLi4uam8odjMsdGhpcyldfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIGhodChjKXtjb25zdCBsPVtdO3JldHVybiBjLmZvckVhY2goYT0+e2EuY2hlY2tlZCYmbC5wdXNoKGEudmFsdWUpfSksbH0oam8odjMsdGhpcykpfWdldFNlYXJjaElu''@;'; put 'put ''cHV0RWxlbWVudCgpe3JldHVybiBqbyhIZyx0aGlzKX1nZXRTZWxlY3RBbGxFbGVtZW50KCl7cmV0dXJuIGpvKG82LHRoaXMpfWdldENsZWFyQWxsRWxlbWVudCgpe3JldHVybiBqbyhzNix0aGlzKX1pc1NlbGVjdGVkQWxsVmFsdWVzKCl7cmV0dXJuIGpvKHYzLHRoaXMpLmxlbmd0aD09PXRo''@;'; put 'put ''aXMuZ2V0VmFsdWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgSGgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbam8o''@;'; put 'put ''bzYsdGhpcyksam8oczYsdGhpcyldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChqbyhIZyx0aGlzKS5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKTtjb25zdCBoPWY9Pnt2YXIgdjtpZighdGhpcy5f''@;'; put 'put ''ZWxlbWVudClyZXR1cm47bnVsbD09PSh2PWpvKHV1LHRoaXMpKXx8dm9pZCAwPT09dnx8di5kZXN0cm95KCksVGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksbTModXUsdGhpcyxuZXcgdGhpcy5ob3QuY29uc3RydWN0b3IoZix7ZGF0YTpqbyh2Myx0aGlzKSxjb2x1bW5zOlt7ZGF0YToi''@;'; put 'put ''Y2hlY2tlZCIsdHlwZToiY2hlY2tib3giLGxhYmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9uOiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KEcsaWUsdWUseWUsRWUsamUpPT57Ry50aXRsZT1qZS5pbnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKGllLGplLmxhYmVsLnByb3Bl''@;'; put 'put ''cnR5KX0sYWZ0ZXJMaXN0ZW46KCk9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3JlT25DZWxsTW91c2VVcDooKT0+e2pvKHV1LHRoaXMpLmxpc3RlbigpfSxtb2RpZnlDb2xXaWR0aDpHPT57Y29uc3QgaWU9am8odXUsdGhpcykuY29udGFpbmVyLnNjcm9sbFdpZHRo''@;'; put 'put ''LWYwKGwpO3JldHVybiB2b2lkIDAhPT1HJiZHPGllP2llOkd9LG1heENvbHM6MSxhdXRvV3JhcENvbDohMCxoZWlnaHQ6MTEwLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiExLGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7''@;'; put 'put ''cm93OjEsY29sOjB9LHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9KSksam8odXUsdGhpcykuaW5pdCgpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChHLGllKT0+e2ll''@;'; put 'put ''fHxqbyh1dSx0aGlzKS51c2VUaGVtZShHKX0pO2NvbnN0IEk9am8odXUsdGhpcykuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpO0kucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiVGFiIl0pLEkucmVtb3ZlU2hvcnRjdXRzQnlLZXlzKFsiU2hpZnQiLCJUYWIiXSksSS5h''@;'; put 'put ''ZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6Rz0+e3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsRyx0aGlzKX0sZ3JvdXA6XzVlfSksSS5hZGRTaG9ydGN1dCh7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOkc9Pntqbyh1dSx0aGlzKS5k''@;'; put 'put ''ZXNlbGVjdENlbGwoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLEcsdGhpcyksdGhpcy5ydW5Mb2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsRyx0aGlzKX0sZ3JvdXA6XzVlfSl9O2goYSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+aChhKSwxMDApfWZvY3VzKCl7dGhp''@;'; put 'put ''cy5pc0J1aWx0KCkmJmpvKHV1LHRoaXMpLmxpc3RlbigpfXJlc2V0KCl7am8oSGcsdGhpcykucmVzZXQoKSxqbyhvNix0aGlzKS5yZXNldCgpLGpvKHM2LHRoaXMpLnJlc2V0KCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihqbyh1dSx0aGlzKS5sb2FkRGF0YShmdW5jdGlvbiBkaHQoYyxs''@;'; put 'put ''KXtjb25zdCBhPUdUKGwpO3JldHVybiBjLm1hcChkPT4oZC5jaGVja2VkPWEoZC52YWx1ZSksZCkpfShqbyh2Myx0aGlzKSx0aGlzLm9wdGlvbnMudmFsdWUpKSxzdXBlci51cGRhdGUoKSl9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD1qbyh1dSx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVz''@;'; put 'put ''dHJveSgpLGpvKEhnLHRoaXMpLmRlc3Ryb3koKSxqbyhzNix0aGlzKS5kZXN0cm95KCksam8obzYsdGhpcykuZGVzdHJveSgpLG0zKEhnLHRoaXMsbnVsbCksbTMoczYsdGhpcyxudWxsKSxtMyhvNix0aGlzLG51bGwpLG0zKHV1LHRoaXMsbnVsbCksbTModjMsdGhpcyxudWxsKSxzdXBlci5k''@;'; put 'put ''ZXN0cm95KCl9fWZ1bmN0aW9uIHNodChjKXtjb25zdCBsPWMudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpO2xldCBhO2E9IiI9PT1sP1suLi5qbyh2Myx0aGlzKV06am8odjMsdGhpcykuZmlsdGVyKGQ9PmAke2QudmFsdWV9YC50b0xvY2FsZUxvd2Vy''@;'; put 'put ''Q2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRleE9mKGwpPj0wKSxqbyh1dSx0aGlzKS5sb2FkRGF0YShhKX1mdW5jdGlvbiBsaHQoYyl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixjLHRoaXMpLEkkKHVfLGMua2V5Q29kZSkoIkFSUk9XX0RPV04iKSYmKGMucHJldmVudERlZmF1bHQo''@;'; put 'put ''KSxCMihjKSxqbyh1dSx0aGlzKS5saXN0ZW4oKSxqbyh1dSx0aGlzKS5zZWxlY3RDZWxsKDAsMCkpfWZ1bmN0aW9uIGNodChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMCxsLnB1''@;'; put 'put ''c2goUEsoYSxkKVswXSl9KSxqbyh1dSx0aGlzKS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWZ1bmN0aW9uIHVodChjKXtjb25zdCBsPVtdO2MucHJldmVudERlZmF1bHQoKSxqbyh1dSx0aGlzKS5nZXRTb3VyY2VEYXRhKCkuZm9yRWFjaCgoYSxkKT0+e2EuY2hlY2tlZD0hMSxsLnB1c2goUEso''@;'; put 'put ''YSxkKVswXSl9KSxqbyh1dSx0aGlzKS5zZXRTb3VyY2VEYXRhQXRDZWxsKGwpfWNvbnN0IEM5PSJieV92YWx1ZSI7ZnVuY3Rpb24gS0YoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWt1KEM5LGZ1bmN0aW9uIGZodChjLGwpe2xldFthXT1sO3JldHVybiBhKGMudmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3IoYyl7''@;'; put 'put ''bGV0W2xdPWM7cmV0dXJuW0dUKGwpXX0sc2hvd09wZXJhdG9yczohMX0pO3ZhciBDNWUsSlQ9bmV3IFdlYWtTZXQ7Y2xhc3MgYmh0IGV4dGVuZHMgSFR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIHBodChjLGwpeyhmdW5jdGlvbiBn''@;'; put 'put ''aHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxKVCksZnVuY3Rpb24gbWh0KGMsbCxhKXtyZXR1cm4obD1mdW5j''@;'; put 'put ''dGlvbiB2aHQoYyl7dmFyIGw9ZnVuY3Rpb24geWh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp''@;'; put 'put ''cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBYVCh0aGlzLmhvdCkpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+S0YoSlQsdGhpcyxfaHQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJsaXN0VGFiS2V5ZG93biIsbD0+dGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJsaXN0VGFiS2V5ZG93biIsbCkpLHRoaXMuaG90LmFkZEhvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIiwobCxhKT0+S0YoSlQsdGhpcyx3aHQpLmNhbGwodGhpcyxsLGEpKX1nZXRFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVs''@;'; put 'put ''ZW1lbnQoKTtyZXR1cm5bbC5nZXRTZWFyY2hJbnB1dEVsZW1lbnQoKSxsLmdldFNlbGVjdEFsbEVsZW1lbnQoKSxsLmdldENsZWFyQWxsRWxlbWVudCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCldfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSxsJiZsLmNvbW1hbmQua2V5''@;'; put 'put ''PT09Qzkpe2NvbnN0IGE9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKTthLnNldEl0ZW1zKGwuaXRlbXNTbmFwc2hvdCksYS5zZXRWYWx1ZShsLmFyZ3NbMF0pLGEuc2V0TG9jYWxlKGwubG9jYWxlKX19Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVt''@;'; put 'put ''ZW50KCksYT1sLmdldEl0ZW1zKCk7cmV0dXJue2NvbW1hbmQ6e2tleTpsLmlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXx8IWEubGVuZ3RoP0UwOkM5fSxhcmdzOltsLmdldFZhbHVlKCldLGl0ZW1zU25hcHNob3Q6YX19dXBkYXRlU3RhdGUobCl7Y29uc3QgYT0oZCxoLGYsdixNKT0+e2NvbnN0W0ld''@;'; put 'put ''PUltKGgsdWU9PnVlLm5hbWU9PT1DOSksRz17fSxpZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFNQKTtpZihJKXtjb25zdCB1ZT12KGQsTSkseWU9YnModWUsZHQ9PmR0LnZhbHVlKSxFZT1uZXcgTWFwKHVlLm1hcChkdD0+W2R0LnZhbHVlLHRoaXMuaG90LmdldENlbGxNZXRhKGR0''@;'; put 'put ''Lm1ldGEudmlzdWFsUm93LGR0Lm1ldGEudmlzdWFsQ29sKV0pKSxqZT1nUSh5ZSk7ZiYmKEkuYXJnc1swXT1mKTtjb25zdCBxZT1bXSxydD12NWUoamUsSS5hcmdzWzBdLGllLGR0PT57ZHQuY2hlY2tlZCYmcWUucHVzaChkdC52YWx1ZSksS0YoSlQsdGhpcyx3NWUpLmNhbGwodGhpcyxkdCxF''@;'; put 'put ''ZSl9KTtHLmxvY2FsZT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsRy5hcmdzPVtxZV0sRy5jb21tYW5kPXc5KEM5KSxHLml0ZW1zU25hcHNob3Q9cnR9ZWxzZSBHLmFyZ3M9W10sRy5jb21tYW5kPXc5KEUwKTt0aGlzLnN0YXRl''@;'; put 'put ''LnNldFZhbHVlQXRJbmRleChkLEcpfTthKGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5n''@;'; put 'put ''dGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVkaXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNl''@;'; put 'put ''bGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIFhUKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigp''@;'; put 'put ''PT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2KT0+e1RpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIp''@;'; put 'put ''LE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsST0+YS5hcHBlbmRDaGlsZChJLmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoU1ApLGE9dGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpLGQ9YS5tYXAoST0+SS52YWx1ZSksaD1uZXcgTWFwKGEubWFwKEk9PltJLnZhbHVlLEkubWV0YV0pKSxmPWdRKGQpLHY9djVlKGYsZixsLEk9PntLRihKVCx0aGlzLHc1ZSkuY2FsbCh0aGlzLEksaCl9KTt0aGlz''@;'; put 'put ''LmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKHYpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShmKTtjb25zdCBNPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PU0m''@;'; put 'put ''JnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRhKDAsTS52aXN1YWxJbmRleCkubG9jYWxlKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRD''@;'; put 'put ''b2x1bW4oKTtyZXR1cm4gbnVsbD09PWw/W106YnModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwudmlzdWFsSW5kZXgpLChhLGQpPT4oe3ZhbHVlOnBRKGEpLG1ldGE6dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxsLnZpc3VhbEluZGV4KX0pKX19ZnVuY3Rpb24gX2h0KGMpe3VfKGMua2V5Q29kZSwi''@;'; put 'put ''RVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLEIyKGMpKX1mdW5jdGlvbiB3NWUoYyxsKXt0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIpJiYoYy52aXN1YWxWYWx1ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RmlsdGVyc011''@;'; put 'put ''bHRpU2VsZWN0VmFsdWUiLGMudmlzdWFsVmFsdWUsbC5nZXQoYy52YWx1ZSkpKX1mdW5jdGlvbiB3aHQoYyxsKXtyZXR1cm4ibnVtZXJpYyI9PT1sLnR5cGU/ZzRlKGMsbCk6Y312YXIgUzVlPW5ldyBXZWFrU2V0O2NsYXNzIFFUIGV4dGVuZHMgSFR7c3RhdGljIGdldCBCVVRUT05fT0soKXty''@;'; put 'put ''ZXR1cm4ib2sifXN0YXRpYyBnZXQgQlVUVE9OX0NBTkNFTCgpe3JldHVybiJjYW5jZWwifWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITB9KSxmdW5jdGlvbiBDaHQoYyxsKXsoZnVuY3Rpb24gU2h0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsUzVlKSxmdW5jdGlvbiBNaHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhodChjKXt2YXIgbD1mdW5jdGlvbiBFaHQoYyxs''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs''@;'; put 'put ''dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IGk2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOm9YLGNsYXNzTmFtZToiaHRV''@;'; put 'put ''SUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZpZXI6UVQuQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgaTYodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6c1gsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25DYW5jZWwiLGlkZW50aWZpZXI6UVQuQlVU''@;'; put 'put ''VE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7WW4odGhpcy5lbGVtZW50cyxsPT57bC5hZGRMb2NhbEhvb2soImNsaWNrIiwoYSxkKT0+ZnVuY3Rpb24gVGh0KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oUzVlLHRoaXMsQWh0KS5jYWxsKHRoaXMsYSxkKSl9KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRo''@;'; put 'put ''aXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVBY3Rpb25CYXIiKSxZbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWFjY2VwdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0Iil9Y2FuY2VsKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKX19ZnVuY3Rpb24gQWh0KGMsbCl7bC5vcHRpb25zLmlkZW50aWZpZXI9PT1DNWUuQlVUVE9OX09LP3RoaXMuYWNj''@;'; put 'put ''ZXB0KCk6dGhpcy5jYW5jZWwoKX1mdW5jdGlvbiB5UShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2h0KGMpe3ZhciBsPWZ1bmN0aW9uIERodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9QzVlPVFUO2NvbnN0IE01ZT0iQ29u''@;'; put 'put ''ZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIHg1ZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3lRKHRoaXMsImhvdCIsdm9pZCAwKSx5USh0aGlzLCJpc01hcFJlZ2lz''@;'; put 'put ''dHJhYmxlIix2b2lkIDApLHlRKHRoaXMsImZpbHRlcmluZ1N0YXRlcyIsbmV3IHBQKSx0aGlzLmhvdD1sLHRoaXMuaXNNYXBSZWdpc3RyYWJsZT1hLCEwPT09dGhpcy5pc01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKE01ZSx0aGlzLmZpbHRl''@;'; put 'put ''cmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdTdGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXRGaWx0ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0''@;'; put 'put ''IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sdj1oPy5vcGVyYXRpb247cmV0dXJuIHRoaXMuaXNNYXRjaEluQ29uZGl0aW9ucyhmLGwsdil9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEp''@;'; put 'put ''e3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24gTmR0KGMpe2lmKCFXVFtjXSl0aHJvdyBFcnJvcihgT3BlcmF0aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0IGw9V1RbY10uZnVuYztyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE2KShsLGEpfWFkZENvbmRpdGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphNixoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVu''@;'; put 'put ''dHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsdj1hLmFyZ3MubWFwKGllPT4ic3RyaW5nIj09dHlwZW9mIGllP2llLnRvTG9jYWxlTG93ZXJDYXNlKGYpOmllKSxNPWEubmFtZXx8YS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJl''@;'; put 'put ''Zm9yZUFkZCIsbCk7Y29uc3QgST10aGlzLmdldE9wZXJhdGlvbihsKTtpZihJKXtpZihJIT09ZCl0aHJvdyBFcnJvcihnbGBUaGUgY29sdW1uIG9mIGluZGV4ICR7bH0gaGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7SX1cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9u''@;'; put 'put ''LiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMuXHgyMAogICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBp''@;'; put 'put ''ZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxceDIwCiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbikuYCl9ZWxzZSBpZihfYyhXVFtkXSkpdGhyb3cgbmV3IEVycm9yKGdsYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtkfVxgLiBQb3Nz''@;'; put 'put ''aWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBcYGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCBHPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTswPT09Ry5sZW5ndGg/dGhpcy5maWx0ZXJpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KGwse29wZXJhdGlvbjpkLGNvbmRp''@;'; put 'put ''dGlvbnM6W3tuYW1lOk0sYXJnczp2LGZ1bmM6cjYoTSx2KX1dfSxoKTpHLnB1c2goe25hbWU6TSxhcmdzOnYsZnVuYzpyNihNLHYpfSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsbCl9Z2V0Q29uZGl0aW9ucyhsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGE9bnVsbD09PShkPXRo''@;'; put 'put ''aXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29uZGl0aW9ucykmJnZvaWQgMCE9PWE/YTpbXX1nZXRPcGVyYXRpb24obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgo''@;'; put 'put ''bCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9wZXJhdGlvbn1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChsPT57bGV0W2FdPWw7cmV0dXJuIGF9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLmdl''@;'; put 'put ''dEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YobCl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkucmVkdWNlKChsLGEpPT57bGV0W2Qse29wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zn1dPWE7cmV0dXJuIGwucHVzaCh7Y29sdW1u''@;'; put 'put ''OmQsb3BlcmF0aW9uOmgsY29uZGl0aW9uczpmLm1hcCh2PT57bGV0e25hbWU6TSxhcmdzOkl9PXY7cmV0dXJue25hbWU6TSxhcmdzOlsuLi5JXX19KX0pLGx9LFtdKX1pbXBvcnRBbGxDb25kaXRpb25zKGwpe3RoaXMuY2xlYW4oKSxsLmZvckVhY2goYT0+e2EuY29uZGl0aW9ucy5mb3JFYWNo''@;'; put 'put ''KGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29sdW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9''@;'; put 'put ''Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdldENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5z''@;'; put 'put ''b21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3RoPjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChNNWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhpcy5jbGVhckxvY2FsSG9va3MoKX19VGwoeDVl''@;'; put 'put ''LGIxKTtjb25zdCBFNWU9eDVlO2Z1bmN0aW9uIFQ1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSWh0KGMpe3ZhciBsPWZ1bmN0aW9uIFJodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQTVlPWNsYXNzIExodHtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06KCk9PltdO1Q1ZSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFQ1ZSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSx0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb249bCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107cmV0dXJuIFluKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9''@;'; put 'put ''dGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShoLGwpKSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9ZmlsdGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lk''@;'; put 'put ''IDAhPT1oJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9nZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gWW4oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSks''@;'; put 'put ''ZH19O2Z1bmN0aW9uIFM5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBGaHQoYyl7dmFyIGw9ZnVuY3Rpb24gSGh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs''@;'; put 'put ''bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBiUShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHFGPW5ldyBXZWFrU2V0O2NsYXNzIGs1ZXtjb25zdHJ1Y3RvcihsLGEp''@;'; put 'put ''e2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTooKT0+W107KGZ1bmN0aW9uIE9odChjLGwpeyhmdW5jdGlvbiBQaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft''@;'; put 'put ''ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMscUYpLFM5KHRoaXMsImhvdCIsdm9pZCAwKSxTOSh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLFM5KHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLFM5''@;'; put 'put ''KHRoaXMsImNoYW5nZXMiLFtdKSxTOSh0aGlzLCJncm91cGluZyIsITEpLFM5KHRoaXMsImxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uIiwtMSksUzkodGhpcywibGF0ZXN0T3JkZXJTdGFjayIsW10pLHRoaXMuaG90PWwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhpcy5jb2x1bW5E''@;'; put 'put ''YXRhRmFjdG9yeT1kLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92ZSIsaD0+YlEocUYsdGhpcyxOaHQpLmNhbGwodGhpcyxoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGg9PnRoaXMudXBkYXRl''@;'; put 'put ''U3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQWRkIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PmJRKHFGLHRo''@;'; put 'put ''aXMsVmh0KS5jYWxsKHRoaXMpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckNsZWFuIiwoKT0+YlEocUYsdGhpcyxCaHQpLmNhbGwodGhpcykpfWdyb3VwQ2hhbmdlcygpe3RoaXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLFluKHRo''@;'; put 'put ''aXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0''@;'; put 'put ''aGlzLmNoYW5nZXMucHVzaChsKSk7Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1''@;'; put 'put ''bW5Qb3NpdGlvbik7Y29uc3Qgdj1oLnNsaWNlKDAsZiksTT1oLnNsaWNlKGYpO00ubGVuZ3RoJiZNWzBdLmNvbHVtbj09PWwmJk0uc2hpZnQoKTtjb25zdCBJPVkyZShmdW5jdGlvbihpZSx1ZSl7bGV0IHllPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3Vt''@;'; put 'put ''ZW50c1syXTpbXTtjb25zdCBFZT1uZXcgRTVlKGQuaG90LCExKSxqZT1bXS5jb25jYXQoaWUseWUpO0VlLmltcG9ydEFsbENvbmRpdGlvbnMoamUpO2NvbnN0IHFlPWQuY29sdW1uRGF0YUZhY3RvcnkodWUpO2xldCBydDtydD1FZS5pc0VtcHR5KCk/cWU6bmV3IEE1ZShFZSxkdD0+ZC5jb2x1''@;'; put 'put ''bW5EYXRhRmFjdG9yeShkdCkpLmZpbHRlcigpLHJ0PWJzKHJ0LGR0PT5kdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgcHQ9R1QocnQpO3JldHVybiBFZS5kZXN0cm95KCksSW0ocWUsZHQ9PnB0KGR0Lm1ldGEudmlzdWFsUm93KSl9KSh2KSxHPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0Q29uZGl0aW9ucyhsKSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJ1cGRhdGUiLHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29sdW1uOmwsY29uZGl0aW9uczpHfSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6TSxmaWx0ZXJlZFJvd3NGYWN0b3J5OkksY29uZGl0aW9uQXJnc0NoYW5n''@;'; put 'put ''ZTphfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksWG8odGhpcywobCxhKT0+e3RoaXNbYV09bnVsbH0pfX1mdW5jdGlvbiBOaHQoYyl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlv''@;'; put 'put ''bihjKX1mdW5jdGlvbiBWaHQoKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfWZ1bmN0aW9uIEJodCgpe1luKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxjPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjKX0pfVRs''@;'; put 'put ''KGs1ZSxiMSk7Y29uc3Qgamh0PWs1ZSxlQT0iZmlsdGVycyI7ZnVuY3Rpb24gX1EoYyxsLGEpe0Q1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRDVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB0QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gV2h0KGMpe3ZhciBsPWZ1bmN0aW9uIFlodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWEYoYyxs''@;'; put 'put ''LGEpe3JldHVybiBjLnNldCgkZChjLGwpLGEpLGF9ZnVuY3Rpb24gWDIoYyxsKXtyZXR1cm4gYy5nZXQoJGQoYyxsKSl9ZnVuY3Rpb24gJGQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHdRPSJmaWx0ZXJzIixJNWU9d1E7dmFyIE5nPW5ldyBXZWFrTWFwLENRPW5ldyBXZWFrTWFwLE05PW5ldyBXZWFrTWFwLE5oPW5ldyBXZWFrU2V0O2NsYXNzICRodCBleHRl''@;'; put 'put ''bmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3UX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBl''@;'; put 'put ''OmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7dmFyIGE7c3VwZXIobCksYT10aGlzLGZ1bmN0aW9uIFpodChjLGwpe0Q1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE5oKSx0QSh0aGlzLCJkcm9wZG93bk1lbnVQbHVnaW4iLG51bGwpLHRBKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLG51bGwp''@;'; put 'put ''LHRBKHRoaXMsImNvbmRpdGlvblVwZGF0ZU9ic2VydmVyIixudWxsKSx0QSh0aGlzLCJjb21wb25lbnRzIixuZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24iLG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJf''@;'; put 'put ''YnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9iYXIiLG51bGxdXSkpLHRBKHRoaXMsImZpbHRlcnNSb3dzTWFwIixudWxsKSxfUSh0aGlzLE5nLHZvaWQgMCksX1EodGhpcyxDUSxuZXcgV2Vha1NldCksX1EodGhpcyxNOSxbXSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xI''@;'; put 'put ''ZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuICRkKE5oLGEsdDJ0KS5jYWxsKGEsLi4uaCl9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KClbd1FdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmZpbHRlcnNSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxuZXcgcUUpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPXRoaXMu''@;'; put 'put ''aG90LmdldFBsdWdpbigiZHJvcGRvd25NZW51Iik7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxkPWEmJmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LGg9TT0+KE0uYWRkTG9jYWxIb29rKCJhY2NlcHQiLCgpPT4kZChOaCx0aGlz''@;'; put 'put ''LFI1ZSkuY2FsbCh0aGlzLCJhY2NlcHQiKSksTS5hZGRMb2NhbEhvb2soImNhbmNlbCIsKCk9PiRkKE5oLHRoaXMsUjVlKS5jYWxsKHRoaXMsImNhbmNlbCIpKSxNLmFkZExvY2FsSG9vaygiY2hhbmdlIixJPT4kZChOaCx0aGlzLGUydCkuY2FsbCh0aGlzLE0sSSkpLE0pLGY9KCk9PmAke3Ro''@;'; put 'put ''aXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UodFgpfTpgO2lmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikpe2NvbnN0IE09bmV3IHVRKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpmLGFkZFNlcGFyYXRvcjohMSxtZW51Q29udGFp''@;'; put 'put ''bmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMu''@;'; put 'put ''Y29tcG9uZW50cy5zZXQoImZpbHRlcl9vcGVyYXRvcnMiLG5ldyBRZHQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfb3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXtjb25zdCBNPW5ldyB1USh0aGlzLmhvdCx7''@;'; put 'put ''aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PiRkKE5oLHRoaXMsTDVlKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0''@;'; put 'put ''aW9uMiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsaChuZXcgYmh0KHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOigpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xh''@;'; put 'put ''dGVkUGhyYXNlKG5YKX06YH0pKSksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGgobmV3IFFUKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkp''@;'; put 'put ''KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IEU1ZSh0aGlzLmhvdCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBqaHQodGhpcy5ob3QsdGhpcy5jb25kaXRpb25D''@;'; put 'put ''b2xsZWN0aW9uLE09PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKE0pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmFkZExvY2FsSG9vaygidXBkYXRlIixNPT4kZChOaCx0aGlzLG4ydCkuY2FsbCh0aGlzLE0pKSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goTT0+TS5zaG93KCkpLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxJPW5ldyBBcnJheShNKSxHPTA7RzxNO0crKylJW0ddPWFyZ3VtZW50c1tHXTtyZXR1cm4gJGQoTmgsbCxRaHQpLmNhbGwobCwuLi5JKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMsSmh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PiRkKE5oLHRoaXMscWh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25N''@;'; put 'put ''ZW51SGlkZSIsKCk9PiRkKE5oLHRoaXMsWGh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixNPT4kZChOaCx0aGlzLEtodCkuY2FsbCh0aGlzLE0pKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJih0''@;'; put 'put ''aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5kaXNhYmxlUGx1Z2luKCksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlUGx1Z2luKCkpLCFYMihOZyx0aGlzKSYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZW5hYmxlZCl7Y29uc3QgTT1be2ZvY3VzOigpPT57Y29uc3QgRz1YMihOZyx0aGlz''@;'; put 'put ''KS5nZXRNZW51KCksaWU9Ry5nZXROYXZpZ2F0b3IoKSx1ZT1YMihOZyx0aGlzKS5nZXRMYXN0TWVudVBhZ2UoKTtHLmZvY3VzKCksdWU+MD9pZS5zZXRDdXJyZW50UGFnZSh1ZSk6aWUudG9GaXJzdEl0ZW0oKX19LC4uLkFycmF5LmZyb20odGhpcy5jb21wb25lbnRzKS5tYXAoRz0+e2xldFss''@;'; put 'put ''aWVdPUc7cmV0dXJuIGllLmdldEVsZW1lbnRzKCl9KS5mbGF0KCldO1hGKE5nLHRoaXMsZnVuY3Rpb24gVWh0KGMsbCl7bGV0IGQsYT0tMTtjb25zdCBoPWZ1bmN0aW9uIHpodChjKXtyZXR1cm4gd2dlKHtpbml0aWFsUGFnZTowLHNpemU6KCk9PmMubGVuZ3RoLG9uSXRlbVNlbGVjdDooYSxk''@;'; put 'put ''KT0+e2NvbnN0IGg9Y1thXTtyZXR1cm4gaCBpbnN0YW5jZW9mIFhUP2Q6IShoLmVsZW1lbnQmJiFVNyhoLmVsZW1lbnQpKSYmdm9pZCBoLmZvY3VzKCl9fSl9KGwpLGY9dWU9PigpPT57ZC5pc09wZW5lZCgpJiZkLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihlQSksaC5zZXRD''@;'; put 'put ''dXJyZW50UGFnZShsLmluZGV4T2YodWUpKX07ZnVuY3Rpb24gdih1ZSl7Y29uc3QgeWU9ZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKSxFZT11ZS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKTtoLmNsZWFyKCksRWUuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNo''@;'; put 'put ''aWZ0IiwiVGFiIl1dLGZvcndhcmRUb0NvbnRleHQ6eWUuZ2V0Q29udGV4dChlQSksY2FsbGJhY2s6KCk9Pnt1ZS5pc1N1Yk1lbnUoKSYmdWUuY2xvc2UoKSx5ZS5saXN0ZW4oZUEpfX1dKSwhdWUuaXNTdWJNZW51KCkmJnllLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJT''@;'; put 'put ''aGlmdCIsIlRhYiJdXSxjYWxsYmFjazpqZT0+e2NvbnN0IHFlPWQuZ2V0TmF2aWdhdG9yKCk7cWUuZ2V0Q3VycmVudFBhZ2UoKT4tMSYmKGE9cWUuZ2V0Q3VycmVudFBhZ2UoKSkscWUuY2xlYXIoKSxqZS5zaGlmdEtleT9oLnRvUHJldmlvdXNJdGVtKCk6aC50b05leHRJdGVtKCl9fSx7a2V5''@;'; put 'put ''czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PntkLmNsb3NlKCl9fSx7a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6amU9Pntjb25zdCBxZT1sW2guZ2V0Q3VycmVudFBhZ2UoKV07cWUgaW5zdGFuY2VvZiBaVCYmKHFlLm9wZW5PcHRpb25z''@;'; put 'put ''KCksamUucHJldmVudERlZmF1bHQoKSkscWUgaW5zdGFuY2VvZiBLVCYmKHFlLmFjdGl2YXRlKCksamUucHJldmVudERlZmF1bHQoKSkscWUgaW5zdGFuY2VvZiBIaHx8amUucHJldmVudERlZmF1bHQoKX19XSxlQSl9ZnVuY3Rpb24gSSh1ZSl7dWUuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVj''@;'; put 'put ''dGlvbkNoYW5nZSIseWU9Pnt5ZS5rZXkuc3RhcnRzV2l0aCgiZmlsdGVyXyIpfHxoLmNsZWFyKCl9KSx1ZS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLHYpLHVlLmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIix2KSxkPXVlfXJldHVybiBsLmZvckVhY2godWU9Pnt1ZSBpbnN0YW5j''@;'; put 'put ''ZW9mIEhoJiYodWUuYWRkTG9jYWxIb29rKCJjbGljayIsZih1ZSkpLHVlLmFkZExvY2FsSG9vaygiZm9jdXMiLGYodWUpKSx1ZS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLGYodWUpKSl9KSxJKGMpLHsuLi5oLGxpc3RlbjpmdW5jdGlvbiBNKCl7ZC5mb2N1cygpLGQuZ2V0S2V5Ym9hcmRT''@;'; put 'put ''aG9ydGN1dHNDdHJsKCkubGlzdGVuKGVBKX0sc2V0TWVudTpJLGdldE1lbnU6ZnVuY3Rpb24gRygpe3JldHVybiBkfSxnZXRMYXN0TWVudVBhZ2U6ZnVuY3Rpb24gaWUoKXtyZXR1cm4gYX19fSh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LE0pKTtjb25zdCBJPUc9PntYMihOZyx0aGlz''@;'; put 'put ''KS5saXN0ZW4oKSxHLnByZXZlbnREZWZhdWx0KCksdV8oRy5rZXlDb2RlLCJUQUIiKSYmKEcuc2hpZnRLZXk/WDIoTmcsdGhpcykudG9QcmV2aW91c0l0ZW0oKTpYMihOZyx0aGlzKS50b05leHRJdGVtKCkpfTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImxpc3RUYWJLZXlkb3duIixJKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuYWRkTG9jYWxIb29rKCJzZWxlY3RUYWJLZXlkb3duIixJKX10aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''e3ZhciBsO3RoaXMuZW5hYmxlZCYmKG51bGwhPT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbikmJnZvaWQgMCE9PWwmJmwuZW5hYmxlZCYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgoYSxkKT0+e2EuZGVz''@;'; put 'put ''dHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoZCxudWxsKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSx0aGlzLnVu''@;'; put 'put ''cmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQWx0IiwiQSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2Fs''@;'; put 'put ''bGJhY2s6KCk9Pntjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkKCk7dGhpcy5jbGVhckNvbmRpdGlvbnMoKSx0aGlzLmZpbHRlcigpLGwmJnRoaXMuaG90LnNlbGVjdENlbGxzKGwpfSxncm91cDpJNWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSTVlKX1hZGRDb25kaXRpb24obCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphNjtjb25zdCBmPXRoaXMuaG90LnRvUGh5c2ljYWxD''@;'; put 'put ''b2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLHtjb21tYW5kOntrZXk6YX0sYXJnczpkfSxoKX1yZW1vdmVDb25kaXRpb25zKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3Zl''@;'; put 'put ''Q29uZGl0aW9ucyhhKX1jbGVhckNvbmRpdGlvbnMobCl7aWYodm9pZCAwPT09bCl0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uY2xlYW4oKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhh''@;'; put 'put ''KX19aW1wb3J0Q29uZGl0aW9ucyhsKXt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyhsKX1leHBvcnRDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCl9ZmlsdGVyKCl7Y29uc3R7bmF2aWdh''@;'; put 'put ''YmxlSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGE9dGhpcy5fY3JlYXRlRGF0YUZpbHRlcigpLGQ9IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc0VtcHR5KCk7bGV0IGg9W107Y29uc3QgZj10aGlzLmV4cG9ydENvbmRpdGlvbnMoKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVGaWx0ZXIiLGYsWDIoTTksdGhpcykpO2lmKCExIT09diYmZCl7Y29uc3QgTT1bXTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSxoPWJzKGEuZmlsdGVyKCksRz0+Ry5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgST1HVChoKTtHYSh0''@;'; put 'put ''aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xLEc9PntJKEcpfHxNLnB1c2goRyl9KSxZbihNLEc9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLnNldFZhbHVlQXRJbmRleChHLCEwKX0pfSwhMCksIWwmJiFoLmxlbmd0aCYmdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksWEYoTTksdGhpcyx0aGlzLmV4''@;'; put 'put ''cG9ydENvbmRpdGlvbnMoKSl9ZWxzZSExPT09dnx8ZD90aGlzLmltcG9ydENvbmRpdGlvbnMoWDIoTTksdGhpcykpOihYRihNOSx0aGlzLHRoaXMuZXhwb3J0Q29uZGl0aW9ucygpKSx0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCkpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkm''@;'; put 'put ''JnRoaXMuaG90LnNlbGVjdENlbGwobD8tMTowLHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmNvbCksITEhPT12JiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJl''@;'; put 'put ''bmRlcigpKX1nZXRTZWxlY3RlZENvbHVtbigpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYT97dmlzdWFsSW5kZXg6YS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhv''@;'; put 'put ''dC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKX06bnVsbH1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBZbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6''@;'; put 'put ''SSx2aXN1YWxDb2w6Ryx2aXN1YWxSb3c6aWUsdHlwZTp1ZSxpbnN0YW5jZTp5ZSxkYXRlRm9ybWF0OkVlLGxvY2FsZTpqZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZixhKSxxZT1udWxsIT09KHY9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhmKSxhKSkmJnZv''@;'; put 'put ''aWQgMCE9PXY/djpoO2QucHVzaCh7bWV0YTp7cm93Ok0sY29sOkksdmlzdWFsQ29sOkcsdmlzdWFsUm93OmllLHR5cGU6dWUsaW5zdGFuY2U6eWUsZGF0ZUZvcm1hdDpFZSxsb2NhbGU6amV9LHZhbHVlOnBRKHFlKX0pfSksZH11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25z''@;'; put 'put ''dCBkPWdRKHRoaXMuaG90LmdldERhdGFBdENvbChsKSk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci51cGRhdGVTdGF0ZXNBdENvbHVtbihsLGQpfXJlc3RvcmVDb21wb25lbnRzKGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSl8fHZvaWQg''@;'; put 'put ''MD09PWE/dm9pZCAwOmEucGh5c2ljYWxJbmRleDtsLmZvckVhY2goaD0+e2guaXNIaWRkZW4oKXx8aC5yZXN0b3JlU3RhdGUoZCl9KSx0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl9Z2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyhsLGEsZCxoKXtsZXQgZj1s''@;'; put 'put ''O3JldHVybiBmPT09R0YmJmEuY29tbWFuZC5rZXkhPT1FMCYmZC5jb21tYW5kLmtleSE9PUUwJiZoLmNvbW1hbmQua2V5IT09RTA/Zj1oUTpoLmNvbW1hbmQua2V5IT09RTAmJihhLmNvbW1hbmQua2V5PT09RTB8fGQuY29tbWFuZC5rZXk9PT1FMCkmJihmPWE2KSxmfXNldExpc3RlbmluZ0Ry''@;'; put 'put ''b3Bkb3duTWVudSgpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5zZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpe2NvbnN0IGw9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIp''@;'; put 'put ''LHtjb21tYW5kOmF9PWwuZ2V0U3RhdGUoKSxkPVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKV07YS5zaG93T3BlcmF0b3JzP3RoaXMuc2hvd0NvbXBvbmVudHMoLi4uZCk6dGhpcy5oaWRl''@;'; put 'put ''Q29tcG9uZW50cyguLi5kKX1fY3JlYXRlRGF0YUZpbHRlcigpe3JldHVybiBuZXcgQTVlKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfWdl''@;'; put 'put ''dEluZGV4ZXNPZkNvbXBvbmVudHMoKXtjb25zdCBsPVtdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm4gbDtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm''@;'; put 'put ''XT1hcmd1bWVudHNbZl07cmV0dXJuIFluKGgsdj0+e1luKGEubWVudUl0ZW1zLChNLEkpPT57TS5rZXk9PT12LmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmbC5wdXNoKEkpfSl9KSxsfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pcmV0dXJuO2NvbnN0IGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LGg9ZC5nZXRQbHVnaW4oImhpZGRlblJvd3MiKTtmb3IodmFyIGY9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCx2PW5ldyBBcnJheShmPjE/Zi0xOjApLE09MTtNPGY7TSsrKXZbTS0xXT1hcmd1bWVudHNbTV07Y29uc3QgST10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udik7bD9oLnNob3dSb3dzKEkpOmguaGlkZVJvd3MoSSksZC5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cygpe2Zv''@;'; put 'put ''cih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITEsLi4uYSl9c2hvd0NvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJh''@;'; put 'put ''eShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCEwLC4uLmEpfWRlc3Ryb3koKXt0aGlzLmVuYWJsZWQmJih0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgobCxhKT0+e251bGwhPT1sJiYobC5kZXN0cm95KCksdGhpcy5jb21w''@;'; put 'put ''b25lbnRzLnNldChhLG51bGwpKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kZXN0cm95''@;'; put 'put ''KCl9fWZ1bmN0aW9uIEtodChjKXtjJiZZbihjLGw9Pntjb25zdFssYV09bCxkPXRoaXMuaG90LnByb3BUb0NvbChhKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihkKX0pfWZ1bmN0aW9uIHFodCgp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnJlc3RvcmVDb21wb25lbnRzKEFycmF5LmZyb20odGhpcy5jb21wb25lbnRzLnZhbHVlcygpKSksYy51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIFhodCgpe3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl''@;'; put 'put ''cl9ieV9jb25kaXRpb24iKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCl9ZnVuY3Rpb24gSmh0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3du''@;'; put 'put ''TWVudVBsdWdpbi5tZW51O1gyKENRLHRoaXMpLmhhcyhjKXx8WDIoTmcsdGhpcykuc2V0TWVudShjKSxYMihDUSx0aGlzKS5hZGQoYyl9ZnVuY3Rpb24gUWh0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30pLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGw9PntjLml0ZW1zLnB1c2gobC5nZXRN''@;'; put 'put ''ZW51SXRlbURlc2NyaXB0b3IoKSl9KX1mdW5jdGlvbiBSNWUoYyl7dmFyIGw7aWYoImFjY2VwdCI9PT1jKXtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTt2YXIgYTtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsPT09KGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lk''@;'; put 'put ''IDA9PT1hfHxhLmNsb3NlKCkpO2NvbnN0e3BoeXNpY2FsSW5kZXg6aH09ZCxmPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTdGF0ZSgpLHY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTdGF0ZSgpLE09dGhpcy5j''@;'; put 'put ''b21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuZ2V0U3RhdGUoKSxJPXRoaXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSxmLHYsTSk7dGhpcy5jb25kaXRpb25V''@;'; put 'put ''cGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMoKTtsZXQgRz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihoKTstMT09PUcmJihHPXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoaCksZi5jb21tYW5kLmtleSE9''@;'; put 'put ''PUUwJiYodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLGYsSSxHKSx2LmNvbW1hbmQua2V5IT09RTAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCx2LEksRykpLE0uY29tbWFuZC5rZXkhPT1FMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u''@;'; put 'put ''LmFkZENvbmRpdGlvbihoLE0sSSxHKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goaWU9PmllLnNhdmVTdGF0ZShoKSksdGhpcy5maWx0ZXIoKX1udWxsPT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1s''@;'; put 'put ''fHxsLmNsb3NlKCl9ZnVuY3Rpb24gZTJ0KGMsbCl7Y29uc3QgYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKSxjLmNvbnN0cnVjdG9yPT09dVEmJiFsLmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ry''@;'; put 'put ''b3Bkb3duTWVudSgpLGEudXBkYXRlTWVudURpbWVuc2lvbnMoKX1mdW5jdGlvbiBMNWUoKXt0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfWZ1bmN0aW9uIHQydChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCkmJmE9PT10aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpLTE/VGkobCwiaHRGaWx0ZXJzQWN0aXZlIik6bG8obCwiaHRGaWx0ZXJzQWN0aXZlIil9ZnVuY3Rpb24gbjJ0KGMpe3ZhciBsO2lmKG51bGw9PT0obD10aGlz''@;'; put 'put ''LmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fCFsLmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRlZENvbmRpdGlvblN0YWNrOntjb25kaXRpb25zOmEsY29sdW1uOmR9LGNvbmRpdGlvbkFyZ3NDaGFuZ2U6aH09YztBcnJheS5pc0FycmF5KGgpJiZYRihNOSx0aGlzLFgyKE05LHRo''@;'; put 'put ''aXMpLm1hcChNPT4oTS5jb2x1bW49PT1kJiZhLmxlbmd0aD4wJiZNLmNvbmRpdGlvbnMuZm9yRWFjaChJPT57ImJ5X3ZhbHVlIj09PUkubmFtZSYmKEkuYXJncz1bWy4uLmhdXSl9KSxNKSkpO2NvbnN0IGY9YS5maWx0ZXIoTT0+TS5uYW1lPT09QzkpLHY9YS5maWx0ZXIoTT0+TS5uYW1lIT09''@;'; put 'put ''QzkpO2lmKGYubGVuZ3RoPj0yfHx2Lmxlbmd0aD49MylpbChnbGBUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG7igJl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAgICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRp''@;'; put 'put ''dGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5gKTtlbHNle2NvbnN0IE09dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihkKTt0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikudXBkYXRlU3RhdGUodlswXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKHZbMV0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0''@;'; put 'put ''ZVN0YXRlKE0sZCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUoYyl9fWNvbnN0IE81ZT0iaW50ZXJuYWwtdXNlLWluLWhhbmRzb250YWJsZSIsU1E9e2xpY2Vuc2VLZXk6TzVlLHVzZUFycmF5QXJpdGhtZXRpYzohMCx1c2VDb2x1bW5JbmRleDoh''@;'; put 'put ''MSx1c2VTdGF0czohMSxldmFsdWF0ZU51bGxUb1plcm86ITAscHJlY2lzaW9uRXBzaWxvbjoxZS0xMyxwcmVjaXNpb25Sb3VuZGluZzoxNCxzbWFydFJvdW5kaW5nOiEwLGxlYXBZZWFyMTkwMDohMSxudWxsRGF0ZTp7eWVhcjoxODk5LG1vbnRoOjEyLGRheTozMH0sbnVsbFllYXI6MzAsZGF0''@;'; put 'put ''ZUZvcm1hdHM6WyJERC9NTS9ZWVlZIiwiREQvTU0vWVkiXSx0aW1lRm9ybWF0czpbImhoOm1tIiwiaGg6bW06c3Muc3NzIl0sbWF0Y2hXaG9sZUNlbGw6ITAsdXNlUmVndWxhckV4cHJlc3Npb25zOiExLHVzZVdpbGRjYXJkczohMCxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0b3I6IiIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsbGFuZ3VhZ2U6ImVuR0IifTtmdW5jdGlvbiBQNWUoYyl7dmFyIGw7cmV0dXJue21heENvbHVtbnM6Yy5tYXhDb2x1bW5zLG1heFJvd3M6Yy5tYXhSb3dzLGxhbmd1YWdlOm51bGw9PT0obD1jW3cxXSl8fHZvaWQgMD09PWx8fG51bGw9''@;'; put 'put ''PT0obD1sLmxhbmd1YWdlKXx8dm9pZCAwPT09bD92b2lkIDA6bC5sYW5nQ29kZX19ZnVuY3Rpb24gRjVlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5yZWR1Y2UoKGwsYSk9PigiaHlwZXJmb3JtdWxhIiE9PWEmJihsW2FdPWNbYV0pLGwpLHt9KX1mdW5jdGlvbiBKRigpe2NvbnN0IGM9ImVu''@;'; put 'put ''Z2luZV9yZWxhdGlvbnNoaXAiLGw9cjModzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gTVEoKXtjb25zdCBjPSJzaGFyZWRfZW5naW5lX3VzYWdlIixsPXIzKHcxKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lz''@;'; put 'put ''dGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIEg1ZShjKXt2YXIgbDtjb25zdCBhPUpGKCksZD0wPT09YS5zaXplP1tdOkFycmF5LmZyb20obnVsbCE9PShsPWEuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOltdKTtyZXR1cm4gbmV3IE1hcChkLm1hcChoPT5baC5nZXRQbHVnaW4o''@;'; put 'put ''ImZvcm11bGFzIikuc2hlZXRJZCxoXSkpfWZ1bmN0aW9uIE41ZShjLGwpe2lmKGMpe2NvbnN0IGE9SkYoKSxkPWEuZ2V0KGMpLGg9TVEoKSxmPWguZ2V0KGMpO2QmJmQuaW5jbHVkZXMobCkmJihkLnNwbGljZShkLmluZGV4T2YobCksMSksMD09PWQubGVuZ3RoJiZhLmRlbGV0ZShjKSksZiYm''@;'; put 'put ''Zi5pbmNsdWRlcyhsLmd1aWQpJiYoZi5zcGxpY2UoZi5pbmRleE9mKGwuZ3VpZCksMSksMD09PWYubGVuZ3RoJiYoaC5kZWxldGUoYyksYy5kZXN0cm95KCkpKX19Y29uc3QgVjVlPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiB4UShjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUi''@;'; put 'put ''PT09bH1mdW5jdGlvbiBCNWUoYyxsKXtyZXR1cm4gT28oYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gajVlKGMsbCl7cmV0dXJuIE9vKGMsbCwhMCkuZm9ybWF0KFY1ZSl9ZnVuY3Rpb24gZzJ0KGMsbCl7cmV0dXJuIE9vKGMsVjVlLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gejVlKGMsbCl7''@;'; put 'put ''Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3JldHVybiBPbyhkKS5mb3JtYXQobCl9ZnVuY3Rpb24gRVEoYyxsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gdjJ0KGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4gYy5mb3JFYWNoKGQ9Pntjb25zdCBoPXtmcm9tOmQsdG86bH07YS5mb3JF''@;'; put 'put ''YWNoKGY9PntmLmZyb20+aC5mcm9tJiZmLnRvPD1oLmZyb20mJmYuZnJvbT5mLnRvJiYoaC5mcm9tKz0xKX0pLGguZnJvbT49bCYmKGwrPTEpLGEucHVzaChoKX0pLGF9KGMsZnVuY3Rpb24gbTJ0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oQXJyYXkoYSkua2V5cygpKS5maWx0ZXIoZj0+''@;'; put 'put ''ITE9PT1jLmluY2x1ZGVzKGYpKTt2YXIgaDtyZXR1cm4gMD09PWw/bnVsbCE9PShoPWRbbF0pJiZ2b2lkIDAhPT1oP2g6MDpkW2wtMV0rMX0oYyxsLGEpKTtyZXR1cm4gZnVuY3Rpb24geTJ0KGMpe3JldHVybiBjLmZvckVhY2goKGwsYSk9PntjLnNsaWNlKGErMSkuZm9yRWFjaChoPT57aC5m''@;'; put 'put ''cm9tPmwuZnJvbSYmaC5mcm9tPGgudG8mJihoLmZyb20tPTEpfSl9KSxjfShkKX1mdW5jdGlvbiB4OShjLGwsYSl7KGZ1bmN0aW9uIGIydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gU2MoYyxsKXtyZXR1cm4gYy5nZXQoVTVlKGMsbCkpfWZ1bmN0aW9uIGw2KGMsbCxhKXtyZXR1cm4gYy5zZXQoVTVlKGMsbCksYSksYX1mdW5jdGlvbiBVNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBuQT1uZXcgV2Vha01hcCxjNj1uZXcgV2Vha01hcCxWaD1uZXcgV2Vha01hcCxR''@;'; put 'put ''Rj1uZXcgV2Vha01hcCxUUT1uZXcgV2Vha01hcCxBUT1uZXcgV2Vha01hcCxlSD1uZXcgV2Vha01hcDtjb25zdCBaNWU9Y2xhc3MgXzJ0e2NvbnN0cnVjdG9yKGwsYSxkKXt4OSh0aGlzLG5BLHZvaWQgMCkseDkodGhpcyxjNix2b2lkIDApLHg5KHRoaXMsVmgsdm9pZCAwKSx4OSh0aGlzLFFG''@;'; put 'put ''LFtdKSx4OSh0aGlzLFRRLFtdKSx4OSh0aGlzLEFRLHZvaWQgMCkseDkodGhpcyxlSCxbXSksbDYobkEsdGhpcyxsKSxsNihjNix0aGlzLGEpLGw2KFZoLHRoaXMsZCl9c2V0UmVtb3ZlZEhmSW5kZXhlcyhsKXtyZXR1cm4gbDYoZUgsdGhpcyxsLm1hcChhPT57Y29uc3QgZD1TYyhjNix0aGlz''@;'; put 'put ''KS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLFNjKGVILHRoaXMpfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gU2MoZUgsdGhpcyl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBh''@;'; put 'put ''PVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9U2MoYzYsdGhpcykuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0sbCl9c3luY01vdmVzKGwpe2NvbnN0IGQ9YG1vdmUke3AxKFNjKG5BLHRoaXMpKX1zYDtTYyhWaCx0aGlzKS5nZXRFbmdpbmUo''@;'; put 'put ''KS5iYXRjaCgoKT0+e2wuZm9yRWFjaChoPT57aC5mcm9tIT09aC50byYmaC5mcm9tKzEhPT1oLnRvJiZTYyhWaCx0aGlzKS5nZXRFbmdpbmUoKVtkXShTYyhWaCx0aGlzKS5nZXRTaGVldElkKCksaC5mcm9tLDEsaC50byl9KX0pfXN0b3JlTW92ZXNJbmZvcm1hdGlvbihsLGEsZCl7ITEhPT1k''@;'; put 'put ''JiYobDYoVFEsdGhpcyxsLm1hcChoPT50aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSxsNihBUSx0aGlzLHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSkpfWNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhsLGEpe2lmKFNjKFZoLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9S''@;'; put 'put ''ZWRvKCl8fCExPT09bHx8ITE9PT1hKXJldHVybjtjb25zdCBkPUVRKFNjKFRRLHRoaXMpLFNjKEFRLHRoaXMpLFNjKGM2LHRoaXMpLmdldE51bWJlck9mSW5kZXhlcygpKTtudWxsPT09U2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpP1NjKFZoLHRoaXMpLmdldFBvc3Rwb25lQWN0aW9uKCgpPT50''@;'; put 'put ''aGlzLnN5bmNNb3ZlcyhkKSk6dGhpcy5zeW5jTW92ZXMoZCl9Z2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKXtjb25zdCBsPWBzZXQke3AxKFNjKG5BLHRoaXMpKX1PcmRlcmA7cmV0dXJuIGE9PntpZihTYyhWaCx0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXJldHVybjtjb25zdCBk''@;'; put 'put ''PVNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO2lmKCJ1cGRhdGUiPT09YSYmZC5sZW5ndGg+MCl7Y29uc3QgaD1TYyhRRix0aGlzKS5tYXAoST0+ZC5pbmRleE9mKEkpKSxmPVNjKFZoLHRoaXMpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhTYyhWaCx0aGlzKS5nZXRT''@;'; put 'put ''aGVldElkKCkpO2xldCB2O3Y9InJvdyI9PT1TYyhuQSx0aGlzKT9mLmhlaWdodDpmLndpZHRoO2ZvcihsZXQgST1oLmxlbmd0aDtJPHY7SSs9MSloLnB1c2goSSk7U2MoVmgsdGhpcykuZ2V0RW5naW5lKClbbF0oU2MoVmgsdGhpcykuZ2V0U2hlZXRJZCgpLGgpfWw2KFFGLHRoaXMsZCl9fWlu''@;'; put 'put ''aXQoKXtsNihRRix0aGlzLFNjKGM2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX19O2Z1bmN0aW9uIEU5KGMsbCxhKXsoZnVuY3Rpb24gdzJ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWZyhjLGwpe3JldHVybiBjLmdldChXNWUoYyxsKSl9ZnVuY3Rpb24gVDkoYyxsLGEpe3JldHVybiBjLnNldChXNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFc1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRIPW5ldyBXZWFrTWFwLG5IPW5ldyBXZWFrTWFwLGtRPW5ldyBXZWFr''@;'; put 'put ''TWFwLERRPW5ldyBXZWFrTWFwLElRPW5ldyBXZWFrTWFwLFJRPW5ldyBXZWFrTWFwLExRPW5ldyBXZWFrTWFwO2NvbnN0IFMydD1jbGFzcyBDMnR7Y29uc3RydWN0b3IobCxhLGQpe0U5KHRoaXMsdEgsdm9pZCAwKSxFOSh0aGlzLG5ILHZvaWQgMCksRTkodGhpcyxrUSx2b2lkIDApLEU5KHRo''@;'; put 'put ''aXMsRFEsITEpLEU5KHRoaXMsSVEsITEpLEU5KHRoaXMsUlEsbnVsbCksRTkodGhpcyxMUSxudWxsKSxUOSh0SCx0aGlzLG5ldyBaNWUoInJvdyIsbCx0aGlzKSksVDkobkgsdGhpcyxuZXcgWjVlKCJjb2x1bW4iLGEsdGhpcykpLFQ5KGtRLHRoaXMsZCl9Z2V0Rm9yQXhpcyhsKXtyZXR1cm4g''@;'; put 'put ''VmcoInJvdyI9PT1sP3RIOm5ILHRoaXMpfXNldFBlcmZvcm1VbmRvKGwpe1Q5KERRLHRoaXMsbCl9c2V0UGVyZm9ybVJlZG8obCl7VDkoSVEsdGhpcyxsKX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBWZyhEUSx0aGlzKXx8VmcoSVEsdGhpcyl9Z2V0U2hlZXRJZCgpe3JldHVybiBW''@;'; put 'put ''ZyhMUSx0aGlzKX1nZXRFbmdpbmUoKXtyZXR1cm4gVmcoUlEsdGhpcyl9Z2V0UG9zdHBvbmVBY3Rpb24oKXtyZXR1cm4gVmcoa1EsdGhpcyl9c2V0dXBTeW5jRW5kcG9pbnQobCxhKXtUOShSUSx0aGlzLGwpLFQ5KExRLHRoaXMsYSksVmcodEgsdGhpcykuaW5pdCgpLFZnKG5ILHRoaXMpLmlu''@;'; put 'put ''aXQoKX19O2Z1bmN0aW9uIEE5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4MnQoYyl7dmFyIGw9ZnVuY3Rpb24gRTJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPUShjLGwsYSl7WTVlKGMsbCksbC5zZXQo''@;'; put 'put ''YyxhKX1mdW5jdGlvbiBZNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHU2KGMsbCxhKXtyZXR1cm4gYy5zZXQoenMoYyxsKSxhKSxh''@;'; put 'put ''fWZ1bmN0aW9uIGs5KGMsbCl7cmV0dXJuIGMuZ2V0KHpzKGMsbCkpfWZ1bmN0aW9uIHpzKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB3MT0iZm9ybXVsYXMiLFQydD1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLFNhLmdldFNpbmdsZXRvbigp''@;'; put 'put ''LnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFm''@;'; put 'put ''dGVyU2hlZXRSZW5hbWVkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTtjb25zdCBsdz1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBCZz1uZXcgV2Vha01hcCxySD1uZXcg''@;'; put 'put ''V2Vha01hcCxyQT1uZXcgV2Vha01hcCxLcz1uZXcgV2Vha1NldDtjbGFzcyBrMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLGZ1bmN0aW9uIE0ydChjLGwpe1k1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEtzKSxPUSh0aGlzLEJnLCEx''@;'; put 'put ''KSxPUSh0aGlzLHJILCExKSxPUSh0aGlzLHJBLFtbInZhbHVlc1VwZGF0ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsVzJ0KS5jYWxsKGwsLi4uZCl9XSxb''@;'; put 'put ''Im5hbWVkRXhwcmVzc2lvbkFkZGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLFkydCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVk''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLEcydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldEFkZGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB6cyhLcyxsLCQydCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbmFtZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHpzKEtzLGwsSzJ0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0UmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4genMo''@;'; put 'put ''S3MsbCxxMnQpLmNhbGwobCwuLi5kKX1dXSksQTkodGhpcywic3RhdGljUmVnaXN0ZXIiLHIzKCJmb3JtdWxhcyIpKSxBOSh0aGlzLCJlbmdpbmUiLG51bGwpLEE5KHRoaXMsInNoZWV0SWQiLG51bGwpLEE5KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksQTkodGhpcywiaW5kZXhTeW5jZXIiLG51''@;'; put 'put ''bGwpLEE5KHRoaXMsInJvd0F4aXNTeW5jZXIiLG51bGwpLEE5KHRoaXMsImNvbHVtbkF4aXNTeW5jZXIiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB3MX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMo''@;'; put 'put ''KXtyZXR1cm5bdzEsLi4uVDJ0XX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVuZ2luZT1udWxsIT09KGw9ZnVuY3Rpb24gbzJ0KGMpe2NvbnN0IGw9Yy5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLGE9bFt3MV0sZD1hPy5lbmdpbmU7aWYoITA9PT1hfHxfYyhkKSlyZXR1cm4gbnVsbDt2YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiBzMnQoYyxsLGEpe2NvbnN0IGQ9bFt3''@;'; put 'put ''MV0saD1mdW5jdGlvbiByMnQoYyl7dmFyIGw7Y29uc3QgYT1jW3cxXSxkPUY1ZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1QNWUoYyk7cmV0dXJuey4uLlNRLC4uLmQsLi4uaH19KGwpLGY9SkYoKSx2PU1R''@;'; put 'put ''KCk7KGZ1bmN0aW9uIGwydChjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKHYpe2lsKHYubWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBjMnQo''@;'; put 'put ''YyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXtpbChkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgTT1jLmJ1aWxkRW1wdHkoaCk7cmV0dXJuIGYuc2V0KE0sW2FdKSx2LnNldChNLFthLmd1aWRdKSxmdW5j''@;'; put 'put ''dGlvbiB1MnQoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6dn09YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Npb24oZCxoLGYsdil9Y2F0Y2goTSl7aWwoTS5tZXNzYWdlKX19KSxjLnJl''@;'; put 'put ''c3VtZUV2YWx1YXRpb24oKSl9KE0sZC5uYW1lZEV4cHJlc3Npb25zKSxNLm9uKCJzaGVldEFkZGVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNLm9uKCJzaGVldFJlbW92ZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE19KG51bGwhPT0oaD1kLmh5cGVy''@;'; put 'put ''Zm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZfYyhkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9SkYoKSx2PU1RKCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQoZCxbXSksZi5nZXQoZCkucHVzaChjKSx2JiZ2LnB1c2goYy5ndWlkKSxk''@;'; put 'put ''LmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5Ok81ZX0pLChkLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PVNRLmxlYXBZZWFyMTkwMHx8ITE9PT1OTyhkLmdldENvbmZpZygpLm51bGxEYXRlLFNRLm51bGxEYXRlKSkmJmlsKGdsYElmIHlvdSB1''@;'; put 'put ''c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhh''@;'; put 'put ''bmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgaWwoIk1pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBs''@;'; put 'put ''ZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5z''@;'; put 'put ''aGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09ZCYmenMoS3MsdGhpcyxpQSkuY2FsbCh0aGlzLGQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8''@;'; put 'put ''ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVu''@;'; put 'put ''dHNbZl07cmV0dXJuIHpzKEtzLGEsJDVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpz''@;'; put 'put ''KEtzLGEsRzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSwkNWUpLmNhbGwo''@;'; put 'put ''YSwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5RGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxMMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9v''@;'; put 'put ''aygibW9kaWZ5U291cmNlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxPMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmFsaWRh''@;'; put 'put ''dGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsRDJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxQMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRDZWxsIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEs1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsSzVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5l''@;'; put 'put ''dyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxGMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtm''@;'; put 'put ''PGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLEgydCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1tmXTtyZXR1cm4genMoS3MsYSxCMnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpz''@;'; put 'put ''KEtzLGEsajJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSxOMnQpLmNhbGwo''@;'; put 'put ''YSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6cyhLcyxhLFYydCkuY2FsbChhLC4uLmgpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4genMoS3MsYSx6MnQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1v''@;'; put 'put ''dmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsVTJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBTMnQodGhpcy5ob3Qucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNlKCJpbml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5k''@;'; put 'put ''ZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2Ui''@;'; put 'put ''LHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZix2KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5j''@;'; put 'put ''TW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5j''@;'; put 'put ''b2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVB''@;'; put 'put ''bmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRo''@;'; put 'put ''aXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsUjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMCksdGhpcy5lbmdpbmUudW5k''@;'; put 'put ''bygpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZWRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITApLHRoaXMuZW5naW5lLnJlZG8oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITEpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm''@;'; put 'put ''XT1hcmd1bWVudHNbZl07cmV0dXJuIHpzKEtzLGEsWjJ0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUF1dG9maWxsIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3Jl''@;'; put 'put ''dHVybiB6cyhLcyxhLEkydCkuY2FsbChhLC4uLmgpfSksazkockEsdGhpcykuZm9yRWFjaChkPT57bGV0W2gsZl09ZDtyZXR1cm4gdGhpcy5lbmdpbmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7azkockEsdGhpcykuZm9yRWFjaChsPT57bGV0W2Es''@;'; put 'put ''ZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEsZCl9KSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIGkydChjKXt2YXIgbDtjb25zdCBhPWNbdzFdO3JldHVy''@;'; put 'put ''bnsuLi5GNWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLC4uLlA1ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBhMnQoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52''@;'; put 'put ''b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGEpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV07aWYoUGEoZCkmJlBhKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlz''@;'; put 'put ''LnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdLnNoZWV0TmFtZTtpZihoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKSl0aGlzLnN3aXRj''@;'; put 'put ''aFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGY9dGhpcy5hZGRTaGVldChoPz92b2lkIDAsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpO3pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxmKX19c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtrOShyQSx0aGlzKS5m''@;'; put 'put ''b3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1sO3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSksdTYockEsdGhpcyxudWxsKSxONWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgp''@;'; put 'put ''fWFkZFNoZWV0KGwsYSl7aWYoUGEoYSkmJiFFM2UoYSkpcmV0dXJuIGlsKCJUaGUgcHJvdmlkZWQgZGF0YSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBpbCgiU2hlZXQgd2l0aCB0aGUg''@;'; put 'put ''cHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRTaGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBp''@;'; put 'put ''bChkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVldChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIHZvaWQgTiQoYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5vdCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7enMoS3MsdGhpcyxpQSkuY2FsbCh0aGlz''@;'; put 'put ''LGwpO2NvbnN0IGE9dGhpcy5lbmdpbmUuZ2V0U2hlZXRTZXJpYWxpemVkKHRoaXMuc2hlZXRJZCk7YS5sZW5ndGg+MCYmdGhpcy5ob3QubG9hZERhdGEoYSxgJHtwMSh3MSl9LnN3aXRjaFNoZWV0YCl9Z2V0Q2VsbFR5cGUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7cmV0dXJuIG51bGwhPT1oJiZudWxsIT09Zj90aGlzLmVuZ2luZS5nZXRDZWxsVHlwZSh7c2hlZXQ6ZCxy''@;'; put 'put ''b3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSk6IkVNUFRZIn1pc0Zvcm11bGFDZWxsVHlwZShsLGEpe3JldHVybiB0aGlzLmVuZ2luZS5kb2VzQ2Vs''@;'; put 'put ''bEhhdmVGb3JtdWxhKHtzaGVldDphcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5zaGVldElkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2Vy''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KX1yZW5kZXJEZXBlbmRlbnRTaGVldHMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPW5ldyBTZXQ7bC5mb3JFYWNoKGg9Pnt2YXIgZjtjb25zdCB2PW51''@;'; put 'put ''bGw9PWh8fG51bGw9PT0oZj1oLmFkZHJlc3MpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNoZWV0O3ZvaWQgMCE9PXYmJihkLmhhcyh2KXx8ZC5hZGQodikpfSksSDVlKHRoaXMuZW5naW5lKS5mb3JFYWNoKChoLGYpPT57dmFyIHY7KGF8fGYhPT10aGlzLnNoZWV0SWQpJiZkLmhhcyhmKSYmKGgu''@;'; put 'put ''cmVuZGVyKCksbnVsbD09PSh2PWgudmlldyl8fHZvaWQgMD09PXZ8fHYuYWRqdXN0RWxlbWVudHNTaXplKCkpfSl9dmFsaWRhdGVEZXBlbmRlbnRDZWxscyhsKXtjb25zdCBkPWY9Pnt2YXIgdjtjb25zdHtyb3c6TSxjb2w6SSxzaGVldDpHfT1udWxsIT09KHY9Zj8uYWRkcmVzcykmJnZvaWQg''@;'; put 'put ''MCE9PXY/djp7fTtyZXR1cm4gUGEoRyk/YCR7R306JHtNfXgke0l9YDoiIn0saD1uZXcgU2V0KChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10pLm1hcChmPT5kKGYpKSk7bC5mb3JFYWNoKGY9Pnt2YXIgdixNO2NvbnN0e3JvdzpJLGNv''@;'; put 'put ''bDpHfT1udWxsIT09KHY9Zi5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O2lmKCExPT09UGEoSSl8fCExPT09UGEoRyl8fEk+PXRoaXMuaG90LmNvdW50Um93cygpfHxHPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgaWU9bnVsbD09Znx8bnVsbD09PShNPWYuYWRkcmVzcyl8''@;'; put 'put ''fHZvaWQgMD09PU0/dm9pZCAwOk0uc2hlZXQsdWU9ZChmKTtpZih2b2lkIDAhPT1pZSYmIWguaGFzKHVlKSl7Y29uc3QgeWU9SDVlKHRoaXMuZW5naW5lKS5nZXQoaWUpO2lmKCF5ZSlyZXR1cm47eWUudmFsaWRhdGVDZWxsKHllLmdldERhdGFBdENlbGwoSSxHKSx5ZS5nZXRDZWxsTWV0YShJ''@;'; put 'put ''LEcpLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6''@;'; put 'put ''dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkpcmV0dXJuIHZvaWQgaWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShs''@;'; put 'put ''LGEpO3JldHVybiB4UShkLGYudHlwZSkmJihCNWUoZCxmLmRhdGVGb3JtYXQpP2Q9ajVlKGQsZi5kYXRlRm9ybWF0KTohMT09PWZ1bmN0aW9uIHAydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMuc3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNl''@;'; put 'put ''dENlbGxDb250ZW50cyhoLGQpfX1mdW5jdGlvbiBpQShjKXt0aGlzLnNoZWV0TmFtZT1jLHRoaXMuc2hlZXRJZD10aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1mdW5jdGlvbiBEMnQoYyxsLGEpe2NvbnN0IGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO2lmKHRoaXMuaXNG''@;'; put 'put ''b3JtdWxhQ2VsbFR5cGUobCxkKSl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChkKSxzaGVldDp0aGlzLnNoZWV0SWR9LGY9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGEobCxkKTtsZXQgdj10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoaCk7cmV0dXJuImRhdGUiPT09Zi50eXBlJiZtMSh2KSYmKHY9ejVlKHYsZi5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiB2JiZudWxsIT09dj92LnZhbHVlOnZ9cmV0dXJuIGN9ZnVuY3Rpb24g''@;'; put 'put ''STJ0KGMsbCxhKXtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx7cm93Ok0sY29sOkl9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OkcsY29sOmllfT1hLmdldEJvdHRvbUVuZENvcm5lcigpLHVl''@;'; put 'put ''PXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5n''@;'; put 'put ''ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2KSxzaGVldDp0aGlzLnNoZWV0SWR9fSx5ZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChN''@;'; put 'put ''KSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoSSksc2hlZXQ6dGhpcy5zaGVldElkfSxlbmQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChHKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhm''@;'; put 'put ''SW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH19O2lmKCExPT09dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoeWUpKXJldHVybiExO2NvbnN0IEVlPXRoaXMuZW5naW5lLmdldEZpbGxSYW5nZURhdGEodWUseWUpLHtyb3c6amUsY29s''@;'; put 'put ''OnFlfT11ZS5zdGFydCx7cm93OnJ0LGNvbDpwdH09dWUuZW5kLGR0PXJ0LWplKzEsSnQ9cHQtcWUrMTtmb3IobGV0IHZuPTA7dm48RWUubGVuZ3RoO3ZuKz0xKWZvcihsZXQgQ249MDtDbjxFZVt2bl0ubGVuZ3RoO0NuKz0xKXtjb25zdCB0bj1FZVt2bl1bQ25dLE1uPWplK3ZuJWR0LENyPXFl''@;'; put 'put ''K0NuJUp0LEdyPXRoaXMuaG90LmdldENlbGxNZXRhKE1uLENyKTt4USh0bixHci50eXBlKSYmKHRuLnN0YXJ0c1dpdGgoIiciKT9FZVt2bl1bQ25dPXRuLnNsaWNlKDEpOiExPT09dGhpcy5pc0Zvcm11bGFDZWxsVHlwZShNbixDcix0aGlzLnNoZWV0SWQpJiYoRWVbdm5dW0NuXT1nMnQodG4s''@;'; put 'put ''R3IuZGF0ZUZvcm1hdCkpKX1yZXR1cm4gRWV9ZnVuY3Rpb24gRzVlKGMsbCl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMocDEodzEpKXx8dTYockgsdGhpcyxfYyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEp''@;'; put 'put ''KX1mdW5jdGlvbiBSMnQoKXtpZihrOShySCx0aGlzKSlyZXR1cm4gdm9pZCB0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtjb25zdCBjPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO2MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IHY9dGhpcy5o''@;'; put 'put ''b3QuZ2V0Q2VsbE1ldGEoZCxmLHtza2lwTWV0YUV4dGVuc2lvbjohMH0pLE09di5kYXRlRm9ybWF0O3hRKGgsdi50eXBlKSYmKEI1ZShoLE0pP2NbZF1bZl09ajVlKGgsTSk6aC5zdGFydHNXaXRoKCI9Iil8fChjW2RdW2ZdPWAnJHtofWApKX0pfSksdTYoQmcsdGhpcywhMCk7Y29uc3QgbD10''@;'; put 'put ''aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGMpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhsKSx1NihCZyx0aGlzLCExKX1mdW5jdGlvbiAkNWUoYyxs''@;'; put 'put ''KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiI7aWYoYS5pbmNsdWRlcyhwMSh3MSkpKXJldHVybjtjb25zdCBkPWZ1bmN0aW9uIGQydChjLGwpe3JldHVybihfYyhsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFk''@;'; put 'put ''ZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2luZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXS5zaGVldE5hbWUpO2lmKHpzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxkKSwidXBkYXRlU2V0dGluZ3MiIT09YSlpZihrOShySCx0aGlzKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtl''@;'; put 'put ''bHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7dTYoQmcsdGhpcywhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5z''@;'; put 'put ''aGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSx1NihCZyx0aGlzLCExKX19fWZ1bmN0aW9uIEwydChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fGs5KEJnLHRoaXMp''@;'; put 'put ''fHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyk7aWYobnVsbD09PWh8fG51bGw9PT1sKXJldHVybjtjb25zdCBmPXRoaXMuZ2V0Q2VsbFR5cGUoaCxs''@;'; put 'put ''KTtpZigiVkFMVUUiPT09Znx8IkVNUFRZIj09PWYpcmV0dXJuIHZvaWQoYS52YWx1ZT1mdW5jdGlvbiBmMnQoYyl7cmV0dXJuIGZ1bmN0aW9uIGgydChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hhckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX0oYyk/Yy5zdWJzdHIo''@;'; put 'put ''MSk6Y30oYS52YWx1ZSkpO2NvbnN0IHY9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksc2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgTT10aGlzLmVu''@;'; put 'put ''Z2luZS5nZXRDZWxsVmFsdWUodik7Y29uc3QgST10aGlzLmhvdC5nZXRDZWxsTWV0YShoLGwse3NraXBNZXRhRXh0ZW5zaW9uOiEwfSk7ImRhdGUiPT09SS50eXBlJiZtMShNKSYmKE09ejVlKE0sSS5kYXRlRm9ybWF0KSksYS52YWx1ZT0ib2JqZWN0Ij09dHlwZW9mIE0mJm51bGwhPT1NP00u''@;'; put 'put ''dmFsdWU6TX1mdW5jdGlvbiBPMnQoYyxsLGEsZCl7aWYoImdldCIhPT1kfHxrOShCZyx0aGlzKXx8bnVsbD09PXRoaXMuc2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpLGY9''@;'; put 'put ''dGhpcy5ob3QucHJvcFRvQ29sKGwpO2lmKG51bGw9PT1ofHxudWxsPT09ZilyZXR1cm47Y29uc3Qgdj10aGlzLmdldENlbGxUeXBlKGgsZik7aWYoIlZBTFVFIj09PXZ8fCJFTVBUWSI9PT12KXJldHVybjtjb25zdCBNPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2lu''@;'; put 'put ''ZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PU0ud2lkdGgmJjA9PT1NLmhlaWdodClyZXR1cm47Y29uc3QgST17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZy''@;'; put 'put ''b21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9O2EudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlhbGl6ZWQoSSl9ZnVuY3Rpb24gSzVlKGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXSxoPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Yy5mb3JFYWNoKGY9''@;'; put 'put ''PntsZXRbdixNLCxJXT1mO2NvbnN0IEc9dGhpcy5ob3QucHJvcFRvQ29sKE0pLGllPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksdWU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihHKSx5ZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLGNv''@;'; put 'put ''bDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChHKSxzaGVldDp0aGlzLnNoZWV0SWR9O251bGwhPT1pZSYmbnVsbCE9PXVlP3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUodixHLEkpOmEucHVzaChbdixHLEldKSxkLnB1c2goe2FkZHJlc3M6eWV9KX0p''@;'; put 'put ''fSk7YS5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57YS5mb3JFYWNoKHY9PntsZXRbTSxJLEddPXY7dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZShNLEksRyl9KX0pO3RoaXMucmVuZGVyRGVwZW5k''@;'; put 'put ''ZW50U2hlZXRzKGYsITApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaCksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGgsZCl9ZnVuY3Rpb24gUDJ0KGMsbCl7aWYobHcobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXTtjLmZvckVhY2goaD0+e2xldFtmLHYsLE1dPWg7Y29uc3Qg''@;'; put 'put ''ST10aGlzLmhvdC5wcm9wVG9Db2wodik7aWYoIW0xKEkpKXJldHVybjtjb25zdCBHPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KEkpLHNoZWV0OnRo''@;'; put 'put ''aXMuc2hlZXRJZH07dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoRyk/KGQucHVzaCh7YWRkcmVzczpHfSksYS5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhHLE0pKSk6aWwoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBh''@;'; put 'put ''dCAke0pTT04uc3RyaW5naWZ5KEcpfWApfSksdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoYSksdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGEsZCl9ZnVuY3Rpb24gRjJ0KGMsbCl7bGV0IGE9dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyk7aWYo''@;'; put 'put ''Yz49dGhpcy5ob3QuY291bnRSb3dzKCkmJihhPWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb0FkZFJvd3ModGhpcy5zaGVldElkLFthLGxdKSlyZXR1cm4hMX1mdW5j''@;'; put 'put ''dGlvbiBIMnQoYyxsKXtsZXQgYT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXRO''@;'; put 'put ''YW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIE4ydChjLGwsYSl7cmV0dXJuITEhPT10aGlzLnJvd0F4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2lu''@;'; put 'put ''ZS5pc0l0UG9zc2libGVUb1JlbW92ZVJvd3ModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiBWMnQoYyxsLGEpe3JldHVybiExIT09dGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxl''@;'; put 'put ''VG9SZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gQjJ0KGMsbCxhKXtpZihsdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCxbdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k''@;'; put 'put ''ZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIGoydChjLGwsYSl7aWYobHcoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKX1mdW5jdGlvbiB6MnQoYyxsLGEsZCl7aWYobHcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2go''@;'; put 'put ''KCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gVTJ0KGMsbCxhLGQpe2lmKGx3KGQpKXJldHVybjtjb25zdCBoPXRoaXMuY29sdW1uQXhpc1N5bmNlci5n''@;'; put 'put ''ZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgodixNKT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5yZW1vdmVDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdiwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9u''@;'; put 'put ''IFoydChjLGwsYSl7dmFyIGQ7dTYoQmcsdGhpcywhMCk7Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoYSwwLGErKChudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5sZW5ndGgpfHwwKSx0aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSk7dTYo''@;'; put 'put ''QmcsdGhpcywhMSksaC5mb3JFYWNoKChmLHYpPT57Zi5mb3JFYWNoKChNLEkpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6SSxyb3c6YSt2LHNoZWV0OnRoaXMuc2hlZXRJZH0sW1tNXV0pfSl9KX1mdW5jdGlvbiBXMnQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRm9y''@;'; put 'put ''bXVsYXNWYWx1ZXNVcGRhdGUiLGMpfWZ1bmN0aW9uIFkydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixjLGwpfWZ1bmN0aW9uIEcydChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGMsbCl9ZnVu''@;'; put 'put ''Y3Rpb24gJDJ0KGMpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0QWRkZWQiLGMpfWZ1bmN0aW9uIEsydChjLGwpe3pzKEtzLHRoaXMsaUEpLmNhbGwodGhpcyxsKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldFJlbmFtZWQiLGMsbCl9ZnVuY3Rpb24gcTJ0KGMsbCl7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIixjLGwpfWZ1bmN0aW9uIHE1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRDko''@;'; put 'put ''YyxsKXtyZXR1cm4gYy5nZXQoZDYoYyxsKSl9ZnVuY3Rpb24gWDVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoZDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGQ2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLFNhLmdl''@;'; put 'put ''dFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IEo1ZT0iaGlkZGVuQ29sdW1ucyI7dmFyIFpwPW5ldyBXZWFrTWFwLEk5PW5ldyBXZWFrU2V0O2NsYXNzIG5mdCBl''@;'; put 'put ''eHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBRMnQoYyxsKXtxNWUoYyxsKSxsLmFkZChjKX0odGhpcyxJOSksZnVuY3Rpb24gZWZ0KGMsbCxhKXtxNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFpwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiBKNWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW0o1ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChYNWUoWnAsdGhpcyxuZXcgZlApLEQ5KFpwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmQ2KEk5LHRoaXMsbGZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsRDkoWnAsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxsLHNmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5kNihJOSx0aGlzLGlmdCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGEsZCk9PmQ2KEk5''@;'; put 'put ''LHRoaXMscmZ0KS5jYWxsKHRoaXMsYSxkKSwyKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkNihJOSxsLG9mdCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5kNihJOSx0aGlzLGFmdCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBl''@;'; put 'put ''ci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx0aGlzLnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdl''@;'; put 'put ''dEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9RDkoWnAsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFwKEc9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oRykpLEc9PntmW0ddPSExfSks''@;'; put 'put ''aD1xdShmLChHLGllLHVlKT0+KGllJiZHLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4odWUpKSxHKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2KSYmKGQmJnYmJkQ5KFpwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC52''@;'; put 'put ''aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd0NvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFb''@;'; put 'put ''ZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd0NvbHVtbnMoYSl9aGlkZUNvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29sdW1ucyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntEOShacCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlckhpZGVDb2x1bW5zIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVDb2x1bW5zKGEpfWdldEhpZGRl''@;'; put 'put ''bkNvbHVtbnMoKXtyZXR1cm4gYnMoRDkoWnAsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gRDkoWnAsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfHwhMX1p''@;'; put 'put ''c1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxz''@;'; put 'put ''TWV0YSgpLGw9PntsLnNraXBDb2x1bW5PblBhc3RlPSExfSl9ZGVzdHJveSgpe1g1ZShacCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcmZ0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDp0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKSYmKHRoaXMuaXNI''@;'; put 'put ''aWRkZW4obCsxKXx8dGhpcy5pc0hpZGRlbihsLTEpKSYmIm51bWJlciI9PXR5cGVvZiBjJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/YysxNTp2b2lkIDB9ZnVuY3Rpb24gaWZ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlk''@;'; put 'put ''ZGVuKGwpJiYoYS5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vs''@;'; put 'put ''c2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtoPi0xJiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gYWZ0KGMp''@;'; put 'put ''e2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wO0dhKGQuc3RhcnRD''@;'; put 'put ''b2wsZC5lbmRDb2wsdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYtMSksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZENvbCYmYShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdiksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gb2Z0KGMsbCl7aWYoIXRoaXMuZ2V0''@;'; put 'put ''U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuQ29sdW1uIiksYzx0aGlzLmhvdC5jb3VudENvbHMoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVu''@;'; put 'put ''Q29sdW1uIiksVGkobCxhKX1mdW5jdGlvbiBzZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOnNzfSxmdW5jdGlvbiBYMnQoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJy''@;'; put 'put ''YXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShScSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wp''@;'; put 'put ''LDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBJPWQ7STw9aDtJKz0xKWYucHVzaChJKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IE09dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIu''@;'; put 'put ''aXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNv''@;'; put 'put ''bHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gSjJ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTHEsbC5s''@;'; put 'put ''ZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9h''@;'; put 'put ''OjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgp''@;'; put 'put ''LGYtaCsxPT09dGhpcy5jb3VudENvbHMoKXx8dGhpcy5zZWxlY3RDb2x1bW5zKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9YnMoYy5nZXRIaWRkZW5Db2x1bW5zKCksdWU9PnRoaXMudG9QaHlzaWNhbENvbHVtbih1ZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVk''@;'; put 'put ''QnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGY9ZC5nZXRCb3R0b21F''@;'; put 'put ''bmRDb3JuZXIoKS5jb2wsdj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEk9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLEc9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLGllPVtdO2lmKGghPT1mKXtpZihmLWgrMT5J''@;'; put 'put ''LU0rMSl7Y29uc3QgRWU9Ry5zbGljZShoLGYrMSk7aWUucHVzaCguLi5FZS5maWx0ZXIoamU9PmEuaW5jbHVkZXMoamUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClpZS5wdXNoKC4uLkcuc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlpZS5wdXNoKC4uLkcuc2xpY2UoMCx0aGlzLmNvdW50''@;'; put 'put ''Q29scygpKSk7ZWxzZXtjb25zdCB1ZT10aGlzLmNvdW50Q29scygpLTE7ST09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh1ZSwtMSkpJiZ1ZT5mJiZpZS5wdXNoKC4uLkcuc2xpY2UoZisxKSl9cmV0dXJuIFluKGllLHVlPT57bC5w''@;'; put 'put ''dXNoKHRoaXMudG9WaXN1YWxDb2x1bW4odWUpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gbGZ0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVDb2x1bW5zKGMpfWZ1bmN0aW9uIFE1ZShjLGwpe2lmKGwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUjkoYyxsKXtyZXR1cm4gYy5nZXQoaDYoYyxsKSl9ZnVuY3Rpb24gZW1lKGMsbCxhKXtyZXR1cm4gYy5zZXQo''@;'; put 'put ''aDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGg2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmpl''@;'; put 'put ''Y3QiKX1TYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZVJvd3MiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0''@;'; put 'put ''ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0IHRtZT0iaGlkZGVuUm93cyI7dmFyIFdwPW5ldyBXZWFrTWFwLEw5PW5ldyBXZWFrU2V0O2NsYXNzIHBmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkZnQoYyxsKXtRNWUoYyxsKSxsLmFk''@;'; put 'put ''ZChjKX0odGhpcyxMOSksZnVuY3Rpb24gaGZ0KGMsbCxhKXtRNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFdwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0bWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9T''@;'; put 'put ''RVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChlbWUoV3AsdGhpcyxuZXcg''@;'; put 'put ''ZlApLFI5KFdwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9Pmg2KEw5LHRoaXMsX2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsUjkoV3AsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURl''@;'; put 'put ''ZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBoNihMOSxsLGJmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwo''@;'; put 'put ''YSxkLGgpPT5oNihMOSx0aGlzLG1mdCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT5oNihMOSx0aGlzLGdmdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGg2KEw5LGwseWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9Pmg2KEw5LHRoaXMsdmZ0KS5jYWxsKHRoaXMsYSkp''@;'; put 'put ''LHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5y''@;'; put 'put ''ZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1SOShXcCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9''@;'; put 'put ''bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAoRz0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhHKSksRz0+e2ZbR109ITF9KSxoPXF1KGYsKEcsaWUsdWUpPT4oaWUmJkcucHVzaCh0aGlzLmhvdC50b1Zpc3VhbFJvdyh1ZSkpLEcpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''VW5oaWRlUm93cyIsYSxoLGQmJnYpJiYoZCYmdiYmUjkoV3AsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3''@;'; put 'put ''IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChs''@;'; put 'put ''KSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntSOShXcCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRl''@;'; put 'put ''blJvd3MoKXtyZXR1cm4gYnMoUjkoV3AsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gUjkoV3AsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29u''@;'; put 'put ''ZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9''@;'; put 'put ''PntsLnNraXBSb3dPblBhc3RlPSExfSl9ZGVzdHJveSgpe2VtZShXcCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZ2Z0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDpjfWZ1bmN0aW9uIG1mdChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQ''@;'; put 'put ''YXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihjKSYmKGEuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4oYy0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0''@;'; put 'put ''ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1''@;'; put 'put ''bmN0aW9uIHZmdChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMsZD0+e2xldCBoPSEwLGY9''@;'; put 'put ''MDtHYShkLnN0YXJ0Um93LGQuZW5kUm93LHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGYsdi0xLGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRSb3cmJmEoZix2LGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIHlmdChjLGwp''@;'; put 'put ''e2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlblJvdyIpLGM8dGhpcy5ob3QuY291bnRSb3dzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJl''@;'; put 'put ''Zm9yZUhpZGRlblJvdyIpLFRpKGwsYSl9ZnVuY3Rpb24gYmZ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTpzc30sZnVuY3Rpb24gY2Z0KGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5p''@;'; put 'put ''c0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShPcSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5y''@;'; put 'put ''b3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBJPWQ7STw9aDtJKz0xKWYucHVzaChJKTtjLmhpZGVSb3dzKGYpO2NvbnN0IE09dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJ''@;'; put 'put ''bnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Um93cyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRl''@;'; put 'put ''cigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gdWZ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUHEsbC5sZW5ndGg+MT8xOjAp''@;'; put 'put ''fSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9''@;'; put 'put ''dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudFJv''@;'; put 'put ''d3MoKXx8dGhpcy5zZWxlY3RSb3dzKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9YnMoYy5nZXRIaWRkZW5Sb3dzKCksdWU9PnRoaXMudG9QaHlzaWNhbFJvdyh1ZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csdj10aGlzLnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEk9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLEc9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLGllPVtdO2lmKGghPT1mKXtpZihmLWgrMT5JLU0rMSl7Y29uc3QgRWU9Ry5zbGljZShoLGYrMSk7aWUucHVz''@;'; put 'put ''aCguLi5FZS5maWx0ZXIoamU9PmEuaW5jbHVkZXMoamUpKSl9fWVsc2UgaWYoMD09PU0mJk08aClpZS5wdXNoKC4uLkcuc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSlpZS5wdXNoKC4uLkcuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCB1ZT10aGlzLmNvdW50Um93''@;'; put 'put ''cygpLTE7ST09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh1ZSwtMSkpJiZ1ZT5mJiZpZS5wdXNoKC4uLkcuc2xpY2UoZisxKSl9cmV0dXJuIFluKGllLHVlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3codWUpKX0pLDA9PT1sLmxl''@;'; put 'put ''bmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gX2Z0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoInJvd3MiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVSb3dzKGMpfWZ1bmN0aW9uIG5tZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUFEoYyxsKXtyZXR1cm4gYy5nZXQoaUgoYyxsKSl9ZnVuY3Rpb24gRlEoYyxsLGEpe3JldHVybiBjLnNldChpSChjLGwpLGEpLGF9ZnVuY3Rpb24gaUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5G''@;'; put 'put ''cmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IHJt''@;'; put 'put ''ZT0ibWFudWFsQ29sdW1uRnJlZXplIjt2YXIgTzk9bmV3IFdlYWtNYXAsSFE9bmV3IFdlYWtTZXQ7Y2xhc3MgRWZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFNmdChjLGwpe25tZShjLGwpLGwuYWRkKGMpfSh0aGlzLEhRKSxmdW5jdGlv''@;'; put 'put ''biBNZnQoYyxsLGEpe25tZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTzksITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBybWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVty''@;'; put 'put ''bWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5pSChIUSx0aGlzLFRmdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChsLGEpPT5pSChIUSx0aGlzLEFm''@;'; put 'put ''dCkuY2FsbCh0aGlzLGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7RlEoTzksdGhpcywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1''@;'; put 'put ''Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+YS5maXhlZENvbHVtbnNTdGFydC0xO1BRKE85LHRoaXMpfHxGUShPOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsZCkmJihkJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSxhLl9maXhlZENvbHVtbnNTdGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIixs''@;'; put 'put ''LGQpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWEuZml4ZWRDb2x1bW5zU3RhcnQtMTtQUShPOSx0aGlzKXx8RlEoTzksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29s''@;'; put 'put ''dW1uVW5mcmVlemUiLGwsZCkmJihkJiYoYS5fZml4ZWRDb2x1bW5zU3RhcnQtPTEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uVW5mcmVlemUiLGwsZCkpfX1mdW5jdGlv''@;'; put 'put ''biBUZnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiB3ZnQoYyl7cmV0dXJue2tleToiZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobHEpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09''@;'; put 'put ''YTtjLmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxb''@;'; put 'put ''MF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIENmdChjKXtyZXR1cm57a2V5OiJ1bmZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhy''@;'; put 'put ''YXNlKGNxKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTty''@;'; put 'put ''ZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9ZnVuY3Rpb24gQWZ0KGMsbCl7aWYoUFEoTzksdGhpcykp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihsPGF8fGMuc29tZShkPT5kPGEpKXJldHVybiExfX1mdW5jdGlvbiBhSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2Z0KGMpe3ZhciBsPWZ1bmN0aW9uIERmdChjLGwpe2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgY3c9InB4IixvbWU9Y2xhc3MgSWZ0e2NvbnN0cnVjdG9yKGwpe2FIKHRoaXMsImhvdCIsdm9pZCAwKSxhSCh0aGlzLCJfZWxlbWVudCIsbnVsbCksYUgodGhpcywic3RhdGUiLDApLGFIKHRoaXMsImlubGlu''@;'; put 'put ''ZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pbmxpbmVQcm9wZXJ0eT1sLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1l''@;'; put 'put ''bnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRo''@;'; put 'put ''aXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMu''@;'; put 'put ''aW5saW5lUHJvcGVydHldPWErY3cpfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlO3JldHVybnt0b3A6bC50b3A/cGFyc2VJbnQobC50b3AsMTApOjAsc3RhcnQ6bFt0aGlzLmlubGluZVByb3BlcnR5XT9wYXJzZUludChsW3RoaXMuaW5saW5lUHJvcGVydHldLDEw''@;'; put 'put ''KTowfX1zZXRTaXplKGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrY3cpLG0xKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStjdyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2Vs''@;'; put 'put ''ZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrY3cpLG0xKGEp''@;'; put 'put ''JiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1hK2N3KX1nZXRPZmZzZXQoKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGUsYT1gbWFyZ2luJHtwMSh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6bC5tYXJnaW5Ub3A/''@;'; put 'put ''cGFyc2VJbnQobC5tYXJnaW5Ub3AsMTApOjAsc3RhcnQ6bFthXT9wYXJzZUludChsW2FdLDEwKTowfX19LE9mdD1jbGFzcyBMZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LEhm''@;'; put 'put ''dD1jbGFzcyBGZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIHkzKGMsbCxhKXtzbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHNtZShjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS2QoYyxsLGEpe3JldHVybiBjLnNldChmNihjLGwpLGEpLGF9ZnVuY3Rpb24gemEoYyxsKXtyZXR1cm4gYy5nZXQo''@;'; put 'put ''ZjYoYyxsKSl9ZnVuY3Rpb24gZjYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp''@;'; put 'put ''fVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IFZRPSJtYW51YWxDb2x1bW5Nb3ZlIixsbWU9Imh0X19tYW51YWxDb2x1bW5Nb3ZlIixvSD0ic2hvdy11aSIsQlE9''@;'; put 'put ''Im9uLW1vdmluZy0tY29sdW1ucyIsalE9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIFExPW5ldyBXZWFrTWFwLHA2PW5ldyBXZWFrTWFwLGpnPW5ldyBXZWFrTWFwLHNIPW5ldyBXZWFrTWFwLGc2PW5ldyBXZWFrTWFwLGVkPW5ldyBXZWFrTWFwLGxIPW5ldyBXZWFrTWFwLEoyPW5l''@;'; put 'put ''dyBXZWFrTWFwLHV3PW5ldyBXZWFrTWFwLGNIPW5ldyBXZWFrTWFwLGFBPW5ldyBXZWFrTWFwLFA5PW5ldyBXZWFrU2V0O2NsYXNzIEJmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOZnQoYyxsKXtzbWUoYyxsKSxsLmFkZChjKX0odGhp''@;'; put 'put ''cyxQOSkseTModGhpcyxRMSxuZXcgT2Z0KHRoaXMuaG90KSkseTModGhpcyxwNixuZXcgSGZ0KHRoaXMuaG90KSkseTModGhpcyxqZyxbXSkseTModGhpcyxzSCwwKSx5Myh0aGlzLGc2LCExKSx5Myh0aGlzLGVkLHt9KSx5Myh0aGlzLGxILHZvaWQgMCkseTModGhpcyxKMix2b2lkIDApLHkz''@;'; put 'put ''KHRoaXMsdXcsdm9pZCAwKSx5Myh0aGlzLGNILHZvaWQgMCkseTModGhpcyxhQSx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBWUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW1ZRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l''@;'; put 'put ''bnRzW2hdO3JldHVybiBmNihQOSxsLGpmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0''@;'; put 'put ''dXJuIGY2KFA5LGwsVWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PmY2KFA5LHRoaXMsV2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFA5LGwsWWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsbG1lKSxzdXBlci5lbmFi''@;'; put 'put ''bGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGxtZSksdGhp''@;'; put 'put ''cy51bnJlZ2lzdGVyRXZlbnRzKCksemEoUTEsdGhpcykuZGVzdHJveSgpLHphKHA2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZUNvbHVtbihsLGEpe3JldHVybiB0aGlzLm1vdmVDb2x1bW5zKFtsXSxhKX1tb3ZlQ29sdW1ucyhsLGEpe2NvbnN0IGQ9emEobEgs''@;'; put 'put ''dGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uTW92ZSIsbCxhLGQsaCk7aWYoS2QobEgsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtj''@;'; put 'put ''b25zdCB2PWgmJnRoaXMuaXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uTW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5kcmFnQ29sdW1ucyhbbF0sYSl9ZHJhZ0NvbHVtbnMobCxhKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIEtkKGxILHRoaXMsYSksdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5n''@;'; put 'put ''dGgrYT5kLGY9YTwwLHY9bC5zb21lKEk9Pkk8MCksTT1sLnNvbWUoST0+ST49ZCk7cmV0dXJuIShofHxmfHx2fHxNKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9cXUobCwoaCxmKT0+''@;'; put 'put ''KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2gr''@;'; put 'put ''PXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgodil8fDApfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpW1ZRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNTdGFy''@;'; put 'put ''dChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdl''@;'; put 'put ''dEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyhs''@;'; put 'put ''LGEpe2NvbnN0IGQ9W107cmV0dXJuIEdhKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KHphKEoyLHRoaXMpKSYmbD4wJiZ0aGlz''@;'; put 'put ''LmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwtMSwtMSl9KTtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50LGg9Im51bWJlciI9PXR5cGVvZiBkLnNjcm9sbFg/ZC5zY3JvbGxYOmQuc2Nyb2xsTGVmdDtsZXQgZj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCx6YShKMix0aGlzKS0xKTtjb25zdCB2PWEuaGlkZXIub2Zmc2V0V2lkdGgsTT1h''@;'; put 'put ''LlRCT0RZLm9mZnNldExlZnQsST16YShRMSx0aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxHPXphKFExLHRoaXMpLmdldFNpemUoKS53aWR0aDtsZXQgaWU9MCx1ZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IGplPXRoaXMuaG90LnJvb3RXaW5kb3cscWU9c3UodGhpcy5ob3Qucm9vdEVs''@;'; put 'put ''ZW1lbnQpLHJ0PWplLmlubmVyV2lkdGgtemEodXcsdGhpcyktcWU7dWU9amUuaW5uZXJXaWR0aC16YShlZCx0aGlzKS5ldmVudFBhZ2VYLXJ0LSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKX1lbHNlIHVlPXphKGVkLHRoaXMpLmV2ZW50UGFnZVgtKHphKHV3LHRoaXMpLSh2b2lkIDA9PT1kLnNj''@;'; put 'put ''cm9sbFg/aDowKSk7aWYoemEoY0gsdGhpcykmJihpZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lkdGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydCh6YShKMix0aGlzKSkm''@;'; put 'put ''JihmKz1oKSxmKz1pZSx6YShKMix0aGlzKTwwKXphKGFBLHRoaXMpPjA/emEoZWQsdGhpcykuY29sPTA6emEoZWQsdGhpcykuY29sPWw+MD9sLTE6bDtlbHNlIGlmKHphKGVkLHRoaXMpLlRELm9mZnNldFdpZHRoLzIrZjw9dWUpe2NvbnN0IGplPXphKEoyLHRoaXMpPj16YShzSCx0aGlzKT96''@;'; put 'put ''YShzSCx0aGlzKS0xOnphKEoyLHRoaXMpO3phKGVkLHRoaXMpLmNvbD1qZSsxLGYrPXphKGVkLHRoaXMpLlRELm9mZnNldFdpZHRofWVsc2UgemEoZWQsdGhpcykuY29sPXphKEoyLHRoaXMpO2xldCB5ZT11ZSxFZT1mO3VlK0crST49dj95ZT12LUctSTp1ZStJPE0raWUmJih5ZT1NK2llK01h''@;'; put 'put ''dGguYWJzKEkpKSxmPj12LTE/RWU9di0xOjA9PT1FZT9FZT0xOnZvaWQgMCE9PWQuc2Nyb2xsWCYmemEoSjIsdGhpcyk8emEoYUEsdGhpcykmJihFZS09emEodXcsdGhpcyk8PWQuc2Nyb2xsWD96YSh1dyx0aGlzKTowKSx6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihudWxsLHllKSx6YShwNix0''@;'; put 'put ''aGlzKS5zZXRQb3NpdGlvbihudWxsLEVlKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmY2KFA5LHRoaXMsemZ0KS5jYWxsKHRo''@;'; put 'put ''aXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PmY2KFA5LHRoaXMsWmZ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7emEoUTEsdGhpcykuYnVpbGQo''@;'; put 'put ''KSx6YShwNix0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXt6YShRMSx0aGlzKS5kZXN0cm95KCksemEocDYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gamZ0KGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx2PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksTT1wbyhjLnRhcmdldCwic29ydEFjdGlvbiIpO2lmKCF2fHwhZnx8emEoZzYsdGhpcyl8fDAhPT1jLmJ1dHRvbnx8TSlyZXR1cm4gS2QoZzYsdGhpcywhMSksemEoamcsdGhp''@;'; put 'put ''cykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbQlEsb0hdKTtjb25zdCBJPXphKHA2LHRoaXMpLmlzQnVpbHQoKSYmIXphKHA2LHRoaXMpLmlzQXBwZW5kZWQoKSxHPXphKFExLHRoaXMpLmlzQnVpbHQoKSYmIXphKFExLHRoaXMpLmlzQXBwZW5kZWQoKTtJJiZHJiYo''@;'; put 'put ''emEocDYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksemEoUTEsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206aWUsdG86dWV9PXYseWU9TWF0aC5taW4oaWUuY29sLHVlLmNvbCksRWU9TWF0aC5tYXgoaWUuY29sLHVlLmNvbCk7aWYobC5yb3c8MCYmbC5jb2w+PXllJiZsLmNv''@;'; put 'put ''bDw9RWUpe2QuY29sdW1uPSEwLEtkKGc2LHRoaXMsITApO2NvbnN0IGplPWEuZmlyc3RDaGlsZD9hZmUoYyxhLmZpcnN0Q2hpbGQpLng6Yy5vZmZzZXRYO3phKGVkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdlWCxLZChKMix0aGlzLGwuY29sKSx6YShlZCx0aGlzKS5URD1hLHphKGVkLHRoaXMp''@;'; put 'put ''LmNvbD1sLmNvbCxLZChqZyx0aGlzLHRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyh5ZSxFZSkpLEtkKGNILHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLEtkKHNILHRoaXMsdGhpcy5ob3QuY291bnRDb2xzKCkpLEtkKGFBLHRoaXMsdGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksS2QodXcsdGhpcyxVMCh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdCk7Y29uc3QgcWU9emEoY0gsdGhpcyk/LTE6MCxydD1oLmhvbGRlci5zY3JvbGxUb3AraC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxwdD1sLmNvbDx6YShhQSx0aGlz''@;'; put 'put ''KSxkdD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksSnQ9TWF0aC5hYnMoamUtKHRoaXMuaG90LmlzUnRsKCk/YS5vZmZzZXRXaWR0aDowKSksdm49dGhpcy5nZXRDb2x1bW5zV2lkdGgoeWUsbC5jb2wtMSkrSnQsQ249''@;'; put 'put ''dGhpcy5nZXRDb2x1bW5zV2lkdGgocWUseWUtMSkrKHB0P2R0OjApK3ZuO3phKFExLHRoaXMpLnNldFBvc2l0aW9uKHJ0LENuKSx6YShRMSx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKHllLEVlKSxoLmhpZGVyLm9mZnNldEhlaWdodC1ydCksemEoUTEsdGhpcykuc2V0T2Zm''@;'; put 'put ''c2V0KG51bGwsLXZuKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxCUSl9ZWxzZSBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxqUSksS2QoZzYsdGhpcywhMSksemEoamcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gemZ0KGMpe3phKGc2LHRoaXMpJiYoemEoZWQsdGhpcykuZXZlbnRQYWdlWD1j''@;'; put 'put ''LnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBVZnQoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCF6YShnNix0aGlzKXx8KHphKGpnLHRoaXMpLmluZGV4T2YobC5jb2wpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LG9IKTpUaSh0''@;'; put 'put ''aGlzLmhvdC5yb290RWxlbWVudCxvSCksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEtkKEoyLHRoaXMsbC5jb2wpLHphKGVkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIFpmdCgpe2NvbnN0IGM9emEoZWQsdGhpcykuY29sLGw9emEoamcsdGhpcykubGVuZ3RoO2lmKEtkKEoyLHRoaXMs''@;'; put 'put ''dm9pZCAwKSxLZChnNix0aGlzLCExKSxsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbQlEsb0gsalFdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJlRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGpRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9''@;'; put 'put ''emEoamcsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGg9dGhpcy5kcmFnQ29sdW1ucyh6YShqZyx0aGlzKSxjKTtpZih6YShqZyx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90''@;'; put 'put ''LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGYsZitsLTEpfX1mdW5jdGlvbiBXZnQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD1jLmdldENvbHVtbkhlYWRlckhl''@;'; put 'put ''aWdodCgwKSsxK2MuaG9sZGVyLnNjcm9sbFRvcDt6YShRMSx0aGlzKS5zZXRQb3NpdGlvbihkKSx6YShRMSx0aGlzKS5zZXRTaXplKG51bGwsYy5oaWRlci5vZmZzZXRIZWlnaHQtZCl9ZnVuY3Rpb24gWWZ0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIEMxKGMsbCxh''@;'; put 'put ''KXtjbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGNtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZHUoYyxsLGEpe3JldHVybiBj''@;'; put 'put ''LnNldChiMyhjLGwpLGEpLGF9ZnVuY3Rpb24gRWEoYyxsKXtyZXR1cm4gYy5nZXQoYjMoYyxsKSl9ZnVuY3Rpb24gYjMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHVIPSJtYW51YWxDb2x1bW5SZXNpemUiLHVtZT0ibWFudWFsQ29sdW1uV2lkdGhzIjt2YXIgemc9bmV3IFdlYWtNYXAsZEg9bmV3IFdlYWtNYXAsQmg9bmV3IFdlYWtNYXAsaEg9bmV3IFdlYWtN''@;'; put 'put ''YXAsWXA9bmV3IFdlYWtNYXAsS2Z0PW5ldyBXZWFrTWFwLGR3PW5ldyBXZWFrTWFwLGZIPW5ldyBXZWFrTWFwLHFkPW5ldyBXZWFrTWFwLFVnPW5ldyBXZWFrTWFwLEY5PW5ldyBXZWFrTWFwLHBIPW5ldyBXZWFrTWFwLG9BPW5ldyBXZWFrTWFwLHNBPW5ldyBXZWFrTWFwLGpoPW5ldyBXZWFr''@;'; put 'put ''TWFwLGxBPW5ldyBXZWFrTWFwLEdwPW5ldyBXZWFrU2V0O2NsYXNzIHFmdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB1SH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gR2Z0''@;'; put 'put ''KGMsbCl7Y21lKGMsbCksbC5hZGQoYyl9KHRoaXMsR3ApLEMxKHRoaXMsemcsbnVsbCksQzEodGhpcyxkSCxudWxsKSxDMSh0aGlzLEJoLFtdKSxDMSh0aGlzLGhILG51bGwpLEMxKHRoaXMsWXAsbnVsbCksQzEodGhpcyxLZnQsbnVsbCksQzEodGhpcyxkdyxudWxsKSxDMSh0aGlzLGZILG51''@;'; put 'put ''bGwpLEMxKHRoaXMscWQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0aGlzLFVnLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksQzEodGhpcyxGOSxudWxsKSxDMSh0aGlzLHBILCExKSxDMSh0aGlzLG9BLDApLEMxKHRo''@;'; put 'put ''aXMsc0EsbnVsbCksQzEodGhpcyxqaCx2b2lkIDApLEMxKHRoaXMsbEEsdm9pZCAwKSxUaShFYShxZCx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplciIpLFRpKEVhKFVnLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90Lmlz''@;'; put 'put ''UnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbdUhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoZHUoamgsdGhpcyxuZXcgWm0pLEVhKGpoLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmIz''@;'; put 'put ''KEdwLHRoaXMsWGZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsRWEoamgsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGIzKEdwLGwscjN0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3''@;'; put 'put ''IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBiMyhHcCxsLGkzdCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo''@;'; put 'put ''PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gYjMoR3AsbCxhM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVy''@;'; put 'put ''LnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtkdShsQSx0aGlzLEVhKGpoLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5X''@;'; put 'put ''aWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsdW1lLEVhKGpoLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHVtZSxs''@;'; put 'put ''KSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gRWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1Bo''@;'; put 'put ''eXNpY2FsQ29sdW1uKGwpO0VhKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChhLG51bGwpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47ZHUoemcsdGhpcyxsKTtjb25zdHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHMoRWEo''@;'; put 'put ''emcsdGhpcykpLGg9ZC5jb2w7aWYoaDwwKXJldHVybjtjb25zdCBmPXh1KEVhKHpnLHRoaXMpKSx2PUVhKHpnLHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBJO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoST1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3Rh''@;'; put 'put ''cnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKEVhKHpnLHRoaXMpLGQucm93LGQuY29sKSksSXx8KEk9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oRWEoemcsdGhpcyksZC5yb3csZC5jb2wpKSxkdShkSCx0aGlzLHRoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLGR1KEJoLHRoaXMsW10pO2NvbnN0IEc9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7dGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmRyYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLHVlPT57R2EodWUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsdWUuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLGplPT57RWEoQmgsdGhpcykuaW5jbHVkZXMoamUpfHxFYShCaCx0''@;'; put 'put ''aGlzKS5wdXNoKGplKX0pfSksRWEoQmgsdGhpcykuaW5jbHVkZXMoRWEoZEgsdGhpcykpfHxkdShCaCx0aGlzLFtFYShkSCx0aGlzKV0pLGR1KGZILHRoaXMsSS5zdGFydC02KSxkdShkdyx0aGlzLHBhcnNlSW50KHYud2lkdGgsMTApKSxFYShxZCx0aGlzKS5zdHlsZS50b3A9YCR7SS50b3B9''@;'; put 'put ''cHhgLEVhKHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtFYShmSCx0aGlzKStFYShkdyx0aGlzKX1weGAsRWEocWQsdGhpcykuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKHFkLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9z''@;'; put 'put ''aXRpb24oKXtFYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7RWEoZkgsdGhpcykrRWEoaEgsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoeHUoRWEocWQsdGhpcykpLDEwKSxhPXBhcnNlSW50KEVhKHFkLHRoaXMpLnN0eWxlLnRvcCwx''@;'; put 'put ''MCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVIZWlnaHQoKTtUaShFYShxZCx0aGlzKSwiYWN0aXZlIiksVGkoRWEoVWcsdGhpcyksImFjdGl2ZSIpLEVhKFVnLHRoaXMpLnN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksRWEoVWcsdGhpcykuc3R5bGUu''@;'; put 'put ''aGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVhKFVnLHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe0VhKFVnLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1FYShxZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFu''@;'; put 'put ''ZEd1aWRlKCl7bG8oRWEocWQsdGhpcyksImFjdGl2ZSIpLGxvKEVhKFVnLHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9Um0obCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHt0b3BPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVy''@;'; put 'put ''bGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5USEVBRCxoLmNsb25lLnd0VGFibGUuVEhFQURdLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/''@;'; put 'put ''bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLEVhKFlwLHRoaXMpLGQsITApO3ZvaWQgMCE9PWYmJmR1KFlwLHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsRWEoWXAsdGhpcykpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVt''@;'; put 'put ''blJlc2l6ZSIsRWEoWXAsdGhpcyksZCwhMCksaCYmbCgpfTtFYShvQSx0aGlzKT49MiYmKEVhKEJoLHRoaXMpLmxlbmd0aD4xPyhZbihFYShCaCx0aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oRWEoQmgsdGhpcyksaD0+e2EoaCwhMCl9KSksZHUob0EsdGhpcywwKSxkdShzQSx0aGlzLG51bGwp''@;'; put 'put ''fWJpbmRFdmVudHMoKXtjb25zdHtyb290V2luZG93Omwscm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW92ZXIiLGQ9PmIzKEdwLHRoaXMsSmZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYSwibW91c2Vkb3duIixkPT5iMyhHcCx0aGlzLFFmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsZD0+YjMoR3AsdGhpcyxlM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+YjMoR3AsdGhpcyx0M3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRWEocWQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+YjMoR3AsdGhpcyxuM3QpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0''@;'; put 'put ''cm95KCl9fWZ1bmN0aW9uIFhmdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0sbD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgbDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRW''@;'; put 'put ''YWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCk6QXJyYXkuaXNBcnJheShjKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntjLmZvckVhY2goKGEsZCk9PntFYShqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCksZHUobEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5''@;'; put 'put ''KEVhKGxBLHRoaXMpKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntFYShsQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57RWEoamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEpmdChjKXtpZighQSQoYy50YXJnZXQpJiYhMCE9PUVhKHBILHRoaXMpJiZ0''@;'; put 'put ''aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0KTtpZighbClyZXR1cm47Y29uc3QgYT1sLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2wmJihudWxsPT09YXx8IjEiPT09YSkmJihFYShGOSx0aGlzKXx8dGhp''@;'; put 'put ''cy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gUWZ0KGMpe2MudGFyZ2V0LnBhcmVudE5vZGU9PT10aGlzLmhvdC5yb290RWxlbWVudCYmcG8oYy50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSksdGhp''@;'; put 'put ''cy5zZXR1cEd1aWRlUG9zaXRpb24oKSxkdShGOSx0aGlzLCEwKSxudWxsPT09RWEoc0EsdGhpcykmJihkdShzQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChFYShzQSx0aGlzKSkpLGR1KG9B''@;'; put 'put ''LHRoaXMsRWEob0EsdGhpcykrMSksdGhpcy5zdGFydFg9Yy5wYWdlWCxkdShZcCx0aGlzLEVhKGR3LHRoaXMpKSl9ZnVuY3Rpb24gZTN0KGMpe2lmKEVhKEY5LHRoaXMpKXtjb25zdCBsPShjLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTtkdShoSCx0''@;'; put 'put ''aGlzLEVhKGR3LHRoaXMpK2wpLFluKEVhKEJoLHRoaXMpLGE9PntkdShZcCx0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShhLEVhKGhILHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19ZnVuY3Rpb24gdDN0KCl7Y29uc3Qg''@;'; put 'put ''Yz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCks''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixFYShZcCx0aGlzKSxhLCExKX07RWEoRjksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLGR1KEY5LHRoaXMsITEpLEVhKFlwLHRoaXMpIT09RWEoZHcsdGhpcykmJihFYShCaCx0aGlzKS5sZW5ndGg+MT8oWW4o''@;'; put 'put ''RWEoQmgsdGhpcyksZD0+e2woZCl9KSxjKCkpOlluKEVhKEJoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFYSh6Zyx0aGlzKSkpfWZ1bmN0aW9uIG4zdCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3Zl''@;'; put 'put ''Q2hpbGQoRWEocWQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVhKFVnLHRoaXMpKSxkdShGOSx0aGlzLCExKSxkdShwSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntkdShwSCx0aGlzLCExKX0pfWZ1bmN0aW9uIHIzdChjLGwpe2xl''@;'; put 'put ''dCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksaD1FYShqaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1SF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIGkzdChjLGwpe2NvbnN0IGE9''@;'; put 'put ''RWEoamgsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpO3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOmN9ZnVuY3Rpb24gYTN0KCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJr''@;'; put 'put ''ZWQoKX1mdW5jdGlvbiB6UShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbzN0KGMpe3ZhciBsPWZ1bmN0aW9uIHMzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChj''@;'; put 'put ''LGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7''@;'; put 'put ''cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgaHc9InB4IixmbWU9Y2xhc3MgbDN0e2NvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3pRKHRoaXMsImhvdCIsdm9pZCAwKSx6USh0aGlzLCJfZWxlbWVudCIsbnVsbCkselEodGhpcywic3RhdGUiLDApLHRoaXMuaG90PWx9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRo''@;'; put 'put ''aXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVu''@;'; put 'put ''dD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK2h3KSx2b2lkIDAhPT1hJiYodGhpcy5f''@;'; put 'put ''ZWxlbWVudC5zdHlsZS5sZWZ0PWEraHcpfWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50''@;'; put 'put ''LnN0eWxlLmxlZnQsMTApOjB9fXNldFNpemUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK2h3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStodyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRo''@;'; put 'put ''aXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtodyksYSYm''@;'; put 'put ''KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD1hK2h3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJn''@;'; put 'put ''aW5MZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSxkM3Q9Y2xhc3MgdTN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0Iil9fSxwM3Q9Y2xhc3Mg''@;'; put 'put ''ZjN0IGV4dGVuZHMgZm1le2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBmdyhjLGwsYSl7cG1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBwbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEg5KGMsbCxhKXtyZXR1cm4gYy5zZXQobTYoYyxsKSxhKSxhfWZ1bmN0aW9uIEZvKGMsbCl7cmV0dXJuIGMuZ2V0KG02KGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIG02KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1TYS5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUm93TW92ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBaUT0ibWFudWFsUm93TW92ZSIsZ21lPSJodF9fbWFudWFsUm93TW92ZSIsZ0g9InNob3ctdWkiLFdRPSJvbi1tb3ZpbmctLXJvd3MiLFlRPSJh''@;'; put 'put ''ZnRlci1zZWxlY3Rpb24tLXJvd3MiO3ZhciB0ZD1uZXcgV2Vha01hcCx2Nj1uZXcgV2Vha01hcCxaZz1uZXcgV2Vha01hcCx5Nj1uZXcgV2Vha01hcCxYZD1uZXcgV2Vha01hcCxtSD1uZXcgV2Vha01hcCxOOT1uZXcgV2Vha1NldDtjbGFzcyB2M3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZzN0KGMsbCl7cG1lKGMsbCksbC5hZGQoYyl9KHRoaXMsTjkpLGZ3KHRoaXMsdGQsbmV3IGQzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsdjYsbmV3IHAzdCh0aGlzLmhvdCkpLGZ3KHRoaXMsWmcsW10pLGZ3KHRoaXMseTYsdm9pZCAwKSxmdyh0''@;'; put 'put ''aGlzLFhkLHt9KSxmdyh0aGlzLG1ILHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFpRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbWlFdfWVuYWJsZVBsdWdpbigp''@;'; put 'put ''e3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG02KE45LGwseTN0''@;'; put 'put ''KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTYoTjksbCxfM3QpLmNhbGwobCwu''@;'; put 'put ''Li5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT5tNihOOSx0aGlzLEMzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtNihOOSxsLFMzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LGdtZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdp''@;'; put 'put ''bigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtsbyh0aGlzLmhvdC5yb290RWxlbWVudCxnbWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLEZv''@;'; put 'put ''KHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVSb3cobCxhKXtyZXR1cm4gdGhpcy5tb3ZlUm93cyhbbF0sYSl9bW92ZVJvd3MobCxhKXtjb25zdCBkPUZvKG1ILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEp''@;'; put 'put ''LGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd01vdmUiLGwsYSxkLGgpO2lmKEg5KG1ILHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSk7''@;'; put 'put ''cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsdiksdn1kcmFnUm93KGwsYSl7cmV0dXJuIHRoaXMuZHJhZ1Jvd3MoW2xdLGEpfWRyYWdSb3dzKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBIOShtSCx0aGlzLGEpLHRo''@;'; put 'put ''aXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShJPT5JPDApLE09bC5zb21lKEk9Pkk+PWQpO3JldHVybiEoaHx8''@;'; put 'put ''Znx8dnx8TSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQodil8fHRoaXMuaG90LnZpZXcuZ2V0''@;'; put 'put ''RGVmYXVsdFJvd0hlaWdodCgpKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lz''@;'; put 'put ''dGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0''@;'; put 'put ''ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiBHYShNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5yb3csaC5yb3cpLE09PnthLnB1c2goTSl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPUZvKFhkLHRoaXMpLmNvb3Jk''@;'; put 'put ''cyxhPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksZD10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qu''@;'; put 'put ''cm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpLHRoaXMuaXNGaXhlZFJvd0JvdHRvbShsLnJvdykmJmQ8aCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCsxLDEp''@;'; put 'put ''LHZvaWQgMCwhMCk7Y29uc3QgZj10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLHY9Rm8oWGQsdGhpcykuVEQsTT10aGlzLmhvdC5yb290RWxlbWVudCxJPVUwKE0pLEc9YV8oTSksaWU9Zi5ob2xkZXIuc2Nyb2xsVG9wLHllPUkudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09Rz9HLnNjcm9s''@;'; put 'put ''bFRvcDowKSxFZT1GbyhYZCx0aGlzKS5ldmVudFBhZ2VZLXllK2llLGplPWYuaGlkZXIub2Zmc2V0SGVpZ2h0LHFlPWYuVEJPRFkub2Zmc2V0VG9wLHJ0PUZvKHRkLHRoaXMpLmdldE9mZnNldCgpLnRvcCxwdD1Gbyh0ZCx0aGlzKS5nZXRTaXplKCkuaGVpZ2h0LGR0PXYub2Zmc2V0SGVpZ2h0''@;'; put 'put ''LzIsSnQ9di5vZmZzZXRIZWlnaHQ7bGV0IHZuPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3RoaXMuZ2V0Um93c0hlaWdodCgwLGwucm93LTEpO2NvbnN0IENuPUVlPj12bitkdDt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiYodm4rPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3Zl''@;'; put 'put ''cmxheXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLGwucm93PDA/Rm8oWGQsdGhpcykucm93PWE+MD9hLTE6YTpDbj8oRm8oWGQsdGhpcykucm93PWwucm93KzEsdm4rPTA9PT1sLnJvdz9KdC0xOkp0KTpGbyhYZCx0aGlzKS5yb3c9bC5yb3c7bGV0IHRuPUVlLE1uPXZuO0VlK3B0''@;'; put 'put ''K3J0Pj1qZT90bj1qZS1wdC1ydDpFZStydDxxZSYmKHRuPXFlK01hdGguYWJzKHJ0KSksdm4+PWplLTEmJihNbj1qZS0xKSxGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbih0biksRm8odjYsdGhpcykuc2V0UG9zaXRpb24oTW4pfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+bTYoTjksdGhpcyxiM3QpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+bTYoTjks''@;'; put 'put ''dGhpcyx3M3QpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtGbyh0ZCx0aGlzKS5idWlsZCgpLEZvKHY2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe0ZvKHRkLHRoaXMpLmRlc3Ryb3koKSxGbyh2Nix0aGlz''@;'; put 'put ''KS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB5M3QoYyxsLGEsZCl7Y29uc3R7d3RUYWJsZTpoLHd0Vmlld3BvcnQ6Zn09dGhpcy5ob3Qudmlldy5fd3Qsdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT10aGlzLmhvdC5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlTGFzdCgpO2lmKCFNfHwhdnx8Rm8oeTYsdGhpcyl8fDAhPT1jLmJ1dHRvbilyZXR1cm4gSDkoeTYsdGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTAsdm9pZCBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxbV1EsZ0hdKTtjb25zdCBJPUZvKHY2LHRoaXMpLmlzQnVpbHQoKSYmIUZv''@;'; put 'put ''KHY2LHRoaXMpLmlzQXBwZW5kZWQoKSxHPUZvKHRkLHRoaXMpLmlzQnVpbHQoKSYmIUZvKHRkLHRoaXMpLmlzQXBwZW5kZWQoKTtJJiZHJiYoRm8odjYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksRm8odGQsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206aWUsdG86dWV9PU0s''@;'; put 'put ''eWU9TWF0aC5taW4oaWUucm93LHVlLnJvdyksRWU9TWF0aC5tYXgoaWUucm93LHVlLnJvdyk7aWYobC5jb2w8MCYmbC5yb3c+PXllJiZsLnJvdzw9RWUpe2Qucm93PSEwLEg5KHk2LHRoaXMsITApLEZvKFhkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSxGbyhYZCx0aGlzKS5jb29yZHM9bCxG''@;'; put 'put ''byhYZCx0aGlzKS5URD1hLEg5KFpnLHRoaXMsdGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO2NvbnN0IGplPWguaG9sZGVyLnNjcm9sbExlZnQrZi5nZXRSb3dIZWFkZXJXaWR0aCgpLHFlPXRoaXMuZ2V0Um93c0hlaWdodCh5ZSxsLnJvdy0xKSsoYy5jbGllbnRZLWEuZ2V0Qm91bmRpbmdD''@;'; put 'put ''bGllbnRSZWN0KCkudG9wKTtGbyh0ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGplKSxGbyh0ZCx0aGlzKS5zZXRTaXplKGguaGlkZXIub2Zmc2V0V2lkdGgtamUsdGhpcy5nZXRSb3dzSGVpZ2h0KHllLEVlKSksRm8odGQsdGhpcykuc2V0T2Zmc2V0KC1xZSxudWxsKSxUaSh0aGlzLmhvdC5y''@;'; put 'put ''b290RWxlbWVudCxXUSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9ZWxzZSBsbyh0aGlzLmhvdC5yb290RWxlbWVudCxZUSksSDkoeTYsdGhpcywhMSksRm8oWmcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gYjN0KGMpe0ZvKHk2LHRoaXMpJiYoRm8oWGQsdGhpcykuZXZlbnRQYWdlWT1jLnBh''@;'; put 'put ''Z2VZLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBfM3QoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCFGbyh5Nix0aGlzKXx8KEZvKFpnLHRoaXMpLmluZGV4T2YobC5yb3cpPi0xP2xvKHRoaXMuaG90LnJvb3RFbGVtZW50LGdIKTpUaSh0aGlz''@;'; put 'put ''LmhvdC5yb290RWxlbWVudCxnSCksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEZvKFhkLHRoaXMpLmNvb3Jkcz1sLEZvKFhkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIHczdCgpe2NvbnN0IGM9Rm8oWGQsdGhpcykucm93LGw9Rm8oWmcsdGhpcykubGVuZ3RoO2lmKEg5KHk2LHRoaXMs''@;'; put 'put ''ITEpLGxvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtXUSxnSCxZUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsWVEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1GbyhaZyx0aGlzKVswXSxkPXRoaXMu''@;'; put 'put ''aG90LnRvUGh5c2ljYWxSb3coYSksaD10aGlzLmRyYWdSb3dzKEZvKFpnLHRoaXMpLGMpO2lmKEZvKFpnLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtj''@;'; put 'put ''b25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGQpO3RoaXMuaG90LnNlbGVjdFJvd3MoZixmK2wtMSl9fWZ1bmN0aW9uIEMzdCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKStjLmhv''@;'; put 'put ''bGRlci5zY3JvbGxMZWZ0O0ZvKHRkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsZCksRm8odGQsdGhpcykuc2V0U2l6ZShjLmhpZGVyLm9mZnNldFdpZHRoLWQpfWZ1bmN0aW9uIFMzdCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBTMShjLGwsYSl7bW1lKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBtbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtjKGMsbCxhKXtyZXR1cm4gYy5zZXQoV2coYyxsKSxh''@;'; put 'put ''KSxhfWZ1bmN0aW9uIE1hKGMsbCl7cmV0dXJuIGMuZ2V0KFdnKGMsbCkpfWZ1bmN0aW9uIFdnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB2SD0ibWFudWFsUm93UmVzaXplIix2bWU9Im1hbnVhbFJvd0hlaWdodHMiO3ZhciAkcD1uZXcgV2Vha01hcCx5SD1uZXcgV2Vha01hcCx6aD1uZXcgV2Vha01hcCxjQT1uZXcgV2Vha01hcCxiNj1uZXcgV2Vha01hcCxH''@;'; put 'put ''UT1uZXcgV2Vha01hcCxwdz1uZXcgV2Vha01hcCxiSD1uZXcgV2Vha01hcCxuZD1uZXcgV2Vha01hcCxLcD1uZXcgV2Vha01hcCxWOT1uZXcgV2Vha01hcCxfSD1uZXcgV2Vha01hcCx1QT1uZXcgV2Vha01hcCxkQT1uZXcgV2Vha01hcCxfMz1uZXcgV2Vha01hcCxoQT1uZXcgV2Vha01hcCxf''@;'; put 'put ''Nj1uZXcgV2Vha1NldDtjbGFzcyBFM3QgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdkh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gTTN0KGMsbCl7bW1lKGMsbCksbC5hZGQo''@;'; put 'put ''Yyl9KHRoaXMsXzYpLFMxKHRoaXMsJHAsbnVsbCksUzEodGhpcyx5SCxudWxsKSxTMSh0aGlzLHpoLFtdKSxTMSh0aGlzLGNBLG51bGwpLFMxKHRoaXMsYjYsbnVsbCksUzEodGhpcyxHUSxudWxsKSxTMSh0aGlzLHB3LG51bGwpLFMxKHRoaXMsYkgsbnVsbCksUzEodGhpcyxuZCx0aGlzLmhv''@;'; put 'put ''dC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFMxKHRoaXMsS3AsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLFY5LCExKSxTMSh0aGlzLF9ILCExKSxTMSh0aGlzLHVBLDApLFMxKHRoaXMsZEEsbnVsbCksUzEodGhpcyxfMyx2''@;'; put 'put ''b2lkIDApLFMxKHRoaXMsaEEsdm9pZCAwKSxUaShNYShuZCx0aGlzKSwibWFudWFsUm93UmVzaXplciIpLFRpKE1hKEtwLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbdkhdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KEtjKF8zLHRoaXMsbmV3IFptKSxNYShfMyx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5XZyhfNix0aGlzLEwzdCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLE1hKF8zLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGwsYSk9PldnKF82LHRoaXMsUjN0KS5jYWxsKHRoaXMsbCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0tjKGhBLHRoaXMsTWEoXzMsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhp''@;'; put 'put ''cy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdodHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsdm1lLE1hKF8zLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsUm93SGVpZ2h0cygpe2NvbnN0IGw9e307cmV0''@;'; put 'put ''dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIix2bWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWF0aC5tYXgoYSx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSk7cmV0''@;'; put 'put ''dXJuIE1hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGgpLGh9Z2V0TGFzdERlc2lyZWRSb3dIZWlnaHQoKXtyZXR1cm4gTWEoY0EsdGhpcyl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtLYygkcCx0aGlzLGwpO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxl''@;'; put 'put ''LmdldENvb3JkcyhNYSgkcCx0aGlzKSksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IHY9c3UoTWEoJHAsdGhpcykpLE09TWEoJHAsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksRz1mPj1hLmNvdW50Tm90SGlkZGVuUm93''@;'; put 'put ''SW5kZXhlcygwLDEpLWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7bGV0IGllO0k/aWU9ZC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNYSgkcCx0aGlzKSxoLnJvdyxoLmNvbCk6RyYmKGllPWQud3RPdmVybGF5''@;'; put 'put ''cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3csaC5jb2wpKSxpZXx8KGllPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTWEoJHAsdGhpcyksaC5yb3cs''@;'; put 'put ''aC5jb2wpKSxLYyh5SCx0aGlzLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLEtjKHpoLHRoaXMsW10pO2NvbnN0IHVlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJnVlJiZZbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksRWU9PntHYShFZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxFZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyxydD0+e01hKHpoLHRo''@;'; put 'put ''aXMpLmluY2x1ZGVzKHJ0KXx8TWEoemgsdGhpcykucHVzaChydCl9KX0pLE1hKHpoLHRoaXMpLmluY2x1ZGVzKE1hKHlILHRoaXMpKXx8S2MoemgsdGhpcyxbTWEoeUgsdGhpcyldKSxLYyhiSCx0aGlzLGllLnRvcC02KSxLYyhwdyx0aGlzLHBhcnNlSW50KE0uaGVpZ2h0LDEwKSksTWEobmQs''@;'; put 'put ''dGhpcykuc3R5bGUudG9wPWAke01hKGJILHRoaXMpK01hKHB3LHRoaXMpfXB4YCxNYShuZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7aWUuc3RhcnR9cHhgLE1hKG5kLHRoaXMpLnN0eWxlLndpZHRoPWAke3Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1h''@;'; put 'put ''KG5kLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtNYShuZCx0aGlzKS5zdHlsZS50b3A9YCR7TWEoYkgsdGhpcykrTWEoY0EsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoc3UoTWEobmQsdGhpcykpLDEwKSxhPXBhcnNlSW50KE1hKG5kLHRo''@;'; put 'put ''aXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVXaWR0aCgpO1RpKE1hKG5kLHRoaXMpLCJhY3RpdmUiKSxUaShNYShLcCx0aGlzKSwiYWN0aXZlIiksTWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5kLHRoaXMpLnN0eWxlLnRvcCxNYShLcCx0''@;'; put 'put ''aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsTWEoS3AsdGhpcykuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTWEoS3AsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7TWEoS3AsdGhpcykuc3R5bGUudG9wPU1hKG5k''@;'; put 'put ''LHRoaXMpLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtsbyhNYShuZCx0aGlzKSwiYWN0aXZlIiksbG8oTWEoS3AsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7Y29uc3QgYT1SbShsLFsiVEJPRFkiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse2lubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEJPRFksaC5jbG9uZS53dFRhYmxlLlRCT0RZLGYuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5UQk9EWV0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmTWEoYjYsdGhpcyk8YT9hOk1hKGI2LHRoaXMpfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVs''@;'; put 'put ''ZW1lbnRzU2l6ZSgpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKTt2b2lkIDAhPT1mJiZLYyhiNix0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLE1hKGI2LHRoaXMpKSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07TWEodUEsdGhpcyk+PTImJihNYSh6aCx0aGlzKS5sZW5ndGg+MT8oWW4oTWEoemgsdGhpcyksaD0+e2EoaCl9KSxsKCkpOlluKE1hKHpoLHRoaXMpLGg9PnthKGgs''@;'; put 'put ''ITApfSkpLEtjKHVBLHRoaXMsMCksS2MoZEEsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5XZyhfNix0aGlzLFQzdCkuY2Fs''@;'; put 'put ''bCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+V2coXzYsdGhpcyxBM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PldnKF82LHRoaXMsazN0KS5jYWxs''@;'; put 'put ''KHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PldnKF82LHRoaXMsRDN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE1hKG5kLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PldnKF82LHRoaXMs''@;'; put 'put ''STN0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBUM3QoYyl7aWYoIUEkKGMudGFyZ2V0KSYmITAhPT1NYShfSCx0aGlzKSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRh''@;'; put 'put ''cmdldCk7bCYmKE1hKFY5LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBBM3QoYyl7cG8oYy50YXJnZXQsIm1hbnVhbFJvd1Jlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihNYSgkcCx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24o''@;'; put 'put ''KSxLYyhWOSx0aGlzLCEwKSxudWxsPT09TWEoZEEsdGhpcykmJihLYyhkQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChNYShkQSx0aGlzKSkpLEtjKHVBLHRoaXMsTWEodUEsdGhpcykrMSks''@;'; put 'put ''S2MoR1EsdGhpcyxjLnBhZ2VZKSxLYyhiNix0aGlzLE1hKHB3LHRoaXMpKSl9ZnVuY3Rpb24gazN0KGMpe01hKFY5LHRoaXMpJiYoS2MoY0EsdGhpcyxNYShwdyx0aGlzKSsoYy5wYWdlWS1NYShHUSx0aGlzKSkpLFluKE1hKHpoLHRoaXMpLGw9PntLYyhiNix0aGlzLHRoaXMuc2V0TWFudWFs''@;'; put 'put ''U2l6ZShsLE1hKGNBLHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSl9ZnVuY3Rpb24gRDN0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9''@;'; put 'put ''KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dI''@;'; put 'put ''ZWlnaHQoYSksYSwhMSl9O01hKFY5LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxLYyhWOSx0aGlzLCExKSxNYShiNix0aGlzKSE9PU1hKHB3LHRoaXMpJiYoTWEoemgsdGhpcykubGVuZ3RoPjE/KFluKE1hKHpoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihNYSh6aCx0aGlz''@;'; put 'put ''KSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oTWEoJHAsdGhpcykpKX1mdW5jdGlvbiBJM3QoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKE1hKG5kLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5y''@;'; put 'put ''ZW1vdmVDaGlsZChNYShLcCx0aGlzKSksS2MoVjksdGhpcywhMSksS2MoX0gsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57S2MoX0gsdGhpcywhMSl9KX1mdW5jdGlvbiBSM3QoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsUm93KGwpLGg9TWEoXzMsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbdkhdJiZoJiYoYT1oKX1yZXR1cm4gYX1mdW5jdGlvbiBMM3QoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbdkhdLGw9dGhpcy5sb2FkTWFudWFsUm93''@;'; put 'put ''SGVpZ2h0cygpO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dHlwZW9mIGw8InUiP2wuZm9yRWFjaCgoYSxkKT0+e01hKF8zLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSk6QXJyYXkuaXNBcnJheShjKT8oYy5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KGQsYSl9KSxLYyhoQSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoTWEoaEEsdGhpcykpJiZNYShoQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57TWEoXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIEI5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBGM3QoYyl7dmFyIGw9ZnVuY3Rpb24gSDN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB5bWUoYyxsKXtyZXR1cm4gYy5nZXQoYm1lKGMsbCkpfWZ1bmN0aW9uIHdIKGMsbCxhKXtyZXR1cm4gYy5zZXQoYm1l''@;'; put 'put ''KGMsbCksYSksYX1mdW5jdGlvbiBibWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfWIoNjgxNDYpLGIoNzQ5OSk7dmFyIGo5PW5ldyBXZWFrTWFwO2NvbnN0IHFwPWNsYXNzIE4zdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7QjkodGhpcywicm93Iix2b2lkIDApLEI5KHRoaXMsImNvbCIsdm9pZCAwKSxCOSh0aGlzLCJyb3dzcGFuIix2b2lkIDApLEI5KHRoaXMsImNv''@;'; put 'put ''bHNwYW4iLHZvaWQgMCksQjkodGhpcywicmVtb3ZlZCIsITEpLEI5KHRoaXMsImNlbGxDb29yZHNGYWN0b3J5Iix2b2lkIDApLEI5KHRoaXMsImNlbGxSYW5nZUZhY3RvcnkiLHZvaWQgMCksZnVuY3Rpb24gTzN0KGMsbCxhKXsoZnVuY3Rpb24gUDN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxqOSxudWxsKSx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgs''@;'; put 'put ''dGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT12fXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3Jv''@;'; put 'put ''dzogJHthfSwgY29sOiAke2R9LFx4MjAKICAgICAgcm93c3BhbjogJHtofSwgY29sc3BhbjogJHtmfX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0''@;'; put 'put ''aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBpcyBwb3NpdGlvbmVkXHgyMAogICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhl''@;'; put 'put ''IHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNldHVwLmB9c3RhdGljIElTX1NJTkdMRV9DRUxMKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZ2xgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBo''@;'; put 'put ''YXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7bGV0e3Jvdzph''@;'; put 'put ''LGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUg''@;'; put 'put ''Y29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBhPDB8fGQ8MHx8aDwwfHxmPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1''@;'; put 'put ''cm4gMT09PWQmJjE9PT1hfXN0YXRpYyBjb250YWluc1plcm9TcGFuKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAwPT09ZHx8MD09PWF9c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dz''@;'; put 'put ''cGFuLTE+PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6''@;'; put 'put ''dGhpcy5jb2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCksd0goajksdGhpcyxudWxsKX1pbmNsdWRlcyhsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRlc0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1''@;'; put 'put ''ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLHY9bFswXT8iY29sIjoicm93''@;'; put 'put ''IixNPU1hdGgubWluKGEsaCksST1NYXRoLm1heChhLGgpLEc9dGhpc1t2XSxpZT10aGlzW3ZdK3RoaXNbZl0tMTtpZihHPj1hJiYodGhpc1t2XSs9ZCksZD4wKWE8PWllJiZhPkcmJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoTTw9RyYmST49aWUpcmV0dXJuIHRoaXMucmVtb3ZlZD0h''@;'; put 'put ''MCx3SChqOSx0aGlzLG51bGwpLCExO2lmKEc+PU0mJkc8PUkpe2NvbnN0IHVlPUktRysxLHllPU1hdGguYWJzKGQpLXVlO3RoaXNbdl0tPXllK2QsdGhpc1tmXS09dWV9ZWxzZSBHPD1NJiZpZT49ST90aGlzW2ZdKz1kOkc8PU0mJmllPj1NJiZpZTxJJiYodGhpc1tmXS09aWUtTSsxKX1yZXR1''@;'; put 'put ''cm4gd0goajksdGhpcyxudWxsKSwhMH1pc0ZhcnRoZXIobCxhKXtyZXR1cm4hbHx8KCJkb3duIj09PWE/bC5yb3crbC5yb3dzcGFuLTE8dGhpcy5yb3crdGhpcy5yb3dzcGFuLTE6InVwIj09PWE/bC5yb3c+dGhpcy5yb3c6InJpZ2h0Ij09PWE/bC5jb2wrbC5jb2xzcGFuLTE8dGhpcy5jb2wr''@;'; put 'put ''dGhpcy5jb2xzcGFuLTE6ImxlZnQiPT09YT9sLmNvbD50aGlzLmNvbDpudWxsKX1nZXRMYXN0Um93KCl7cmV0dXJuIHRoaXMucm93K3RoaXMucm93c3Bhbi0xfWdldExhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTF9Z2V0UmFuZ2UoKXtyZXR1cm4geW1lKGo5LHRo''@;'; put 'put ''aXMpfHx3SChqOSx0aGlzLHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRo''@;'; put 'put ''aXMuZ2V0TGFzdENvbHVtbigpKSkpLHltZShqOSx0aGlzKX19O2Z1bmN0aW9uIENIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBqM3QoYyl7dmFyIGw9ZnVuY3Rpb24gejN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5j''@;'; put 'put ''dGlvbiB6OShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHc2PW5ldyBX''@;'; put 'put ''ZWFrU2V0O2NsYXNzIFNIe2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBWM3QoYyxsKXsoZnVuY3Rpb24gQjN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLHc2KSxDSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksQ0godGhpcywibWVyZ2VkQ2VsbHMiLFtdKSxDSCh0aGlzLCJtZXJnZWRDZWxsc01hdHJpeCIsbmV3IE1hcCksQ0godGhpcywiaG90Iix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5o''@;'; put 'put ''b3R9c3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRo''@;'; put 'put ''ZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEpe3ZhciBkO3JldHVybiEoIXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHxudWxsPT09KGQ9dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc01hdHJpeC5nZXQobCkuZ2V0KGEpKXx8dm9pZCAwPT09ZCkmJmR9Z2V0QnlSYW5nZShsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2xldCBN''@;'; put 'put ''PSExO2ZvcihsZXQgST0wO0k8djtJKyspe2NvbnN0IEc9dGhpcy5tZXJnZWRDZWxsc1tJXSx7cm93OmllLGNvbDp1ZSxyb3dzcGFuOnllLGNvbHNwYW46RWV9PUc7aWYoaWU+PWEmJmllK3llLTE8PWgmJnVlPj1kJiZ1ZStFZS0xPD1mKXtNPUc7YnJlYWt9fXJldHVybiBNfWZpbHRlck92ZXJs''@;'; put 'put ''YXBwaW5nTWVyZ2VDZWxscyhsKXtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46SX09aDtmb3IobGV0IEc9ZjtHPGYrSTtHKyspZm9yKGxldCBpZT12O2llPHYrTTtpZSsrKWEuYWRk''@;'; put 'put ''KGByJHtHfSxjJHtpZX1gKX0pLGwuZmlsdGVyKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpJfT1oLEc9bmV3IFNldDtsZXQgaWU9ITE7Zm9yKGxldCB1ZT1mO3VlPGYrSTt1ZSsrKXtmb3IobGV0IHllPXY7eWU8ditNO3llKyspe2NvbnN0IEVlPWByJHt1ZX0sYyR7''@;'; put 'put ''eWV9YDtpZihhLmhhcyhFZSkpe2lsKFNILklTX09WRVJMQVBQSU5HX1dBUk5JTkcoaCkpLGllPSEwO2JyZWFrfUcuYWRkKEVlKX1pZihpZSlicmVha31yZXR1cm4gaWV8fGEuYWRkKC4uLkcpLCFpZX0pfWdldFdpdGhpblJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1bXTtmb3IobGV0IEk9ZDtJPD1mO0krKylmb3IobGV0IEc9aDtHPD12O0crKyl7Y29uc3QgaWU9''@;'; put 'put ''dGhpcy5nZXQoSSxHKTtpZSYmKGF8fCFhJiZpZS5yb3c9PT1JJiZpZS5jb2w9PT1HKSYmTS5wdXNoKGllKX1yZXR1cm4gTX1hZGQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPWwucm93LGg9bC5jb2wsTT1u''@;'; put 'put ''ZXcgcXAoZCxoLGwucm93c3BhbixsLmNvbHNwYW4sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMsdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSksST10aGlzLmdldChkLGgpLEc9IWEmJnRoaXMuaXNPdmVybGFwcGluZyhNKTtyZXR1cm4gSXx8Rz8oRyYmaWwoU0guSVNfT1ZFUkxBUFBJTkdf''@;'; put 'put ''V0FSTklORyhNKSksITEpOih0aGlzLmhvdCYmTS5ub3JtYWxpemUodGhpcy5ob3QpLHRoaXMubWVyZ2VkQ2VsbHMucHVzaChNKSx6OSh3Nix0aGlzLF9tZSkuY2FsbCh0aGlzLE0pLE0pfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKSxoPWQ/dGhpcy5tZXJnZWRDZWxscy5pbmRl''@;'; put 'put ''eE9mKGQpOi0xO3JldHVybiEoIWR8fC0xPT09aCkmJih0aGlzLm1lcmdlZENlbGxzLnNwbGljZShoLDEpLHo5KHc2LHRoaXMsVTN0KS5jYWxsKHRoaXMsZCksZCl9Y2xlYXIoKXtZbih0aGlzLm1lcmdlZENlbGxzLGw9PntsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtH''@;'; put 'put ''YShhLGEraCx2PT57R2EoZCxkK2YsTT0+e2NvbnN0IEk9dGhpcy5ob3QuZ2V0Q2VsbCh2LE0pO0kmJihJLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLEkucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksSS5zdHlsZS5kaXNwbGF5PSIiKX0pfSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0''@;'; put 'put ''aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9bmV3IE1hcH1pc092ZXJsYXBwaW5nKGwpe2NvbnN0IGE9bC5nZXRSYW5nZSgpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7ZCsrKWlmKHRoaXMubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKS5vdmVybGFwcyhhKSlyZXR1''@;'; put 'put ''cm4hMDtyZXR1cm4hMX1pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWQpcmV0dXJuITE7Y29uc3R7cm93OmgsY29sOmYscm93c3Bhbjp2LGNvbHNwYW46TX09ZCxJPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxH''@;'; put 'put ''PVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhJKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCksaWU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5j''@;'; put 'put ''bHVkZXMoSSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLHVlPWtzKEcsaCxoK3YtMSkseWU9a3MoaWUsZixmK00tMSk7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh1ZSwxKT09PWwmJnRoaXMuaG90LmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh5ZSwxKT09PWF9Z2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO2lmKCFkfHx0aGlzLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybiB0aGlzLmhvdC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhsLGEpO2NvbnN0IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpLGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpO3JldHVybiB0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwiY29sIiwtMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJu''@;'; put 'put ''IGh9Z2V0RW5kTW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD16OSh3Nix0aGlzLE1IKS5jYWxsKHRoaXMsbCwiY29sIiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRUb3BNb3N0Um93SW5kZXgobCxh''@;'; put 'put ''KXtjb25zdCBkPXo5KHc2LHRoaXMsTUgpLmNhbGwodGhpcyxsLCJyb3ciLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPXo5KHc2LHRoaXMsTUgp''@;'; put 'put ''LmNhbGwodGhpcyxsLCJyb3ciLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofXNoaWZ0Q29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9WzAsMF07c3dpdGNoKGwpe2Nhc2UicmlnaHQiOmhbMF0rPWQ7YnJlYWs7''@;'; put 'put ''Y2FzZSJsZWZ0IjpoWzBdLT1kO2JyZWFrO2Nhc2UiZG93biI6aFsxXSs9ZDticmVhaztjYXNlInVwIjpoWzFdLT1kfWNvbnN0IGY9W107dGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9Pnt2LnNoaWZ0KGgsYSksdi5yZW1vdmVkJiZmLnB1c2godil9KSxmLmZvckVhY2godj0+e3RoaXMubWVy''@;'; put 'put ''Z2VkQ2VsbHMuc3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZih2KSwxKX0pLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguY2xlYXIoKSx0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3o5KHc2LHRoaXMsX21lKS5jYWxsKHRoaXMsdil9KX19ZnVuY3Rpb24gTUgoYyxsKXtsZXQgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBkPW5ldyBNYXAsaD0xPT09YT9jLmdldFRvcFN0YXJ0Q29ybmVyKCk6Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxmPTE9PT1hP2MuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6Yy5nZXRUb3BT''@;'; put 'put ''dGFydENvcm5lcigpO2ZvcihsZXQgdj1oLnJvdzsxPT09YT92PD1mLnJvdzp2Pj1mLnJvdzt2Kz1hKWZvcihsZXQgTT1oLmNvbDsxPT09YT9NPD1mLmNvbDpNPj1mLmNvbDtNKz1hKXtjb25zdCBJPSJyb3ciPT09bD92Ok0sRz10aGlzLmdldCh2LE0pO2xldCBpZT1JO0cmJihpZT0xPT09YT9H''@;'; put 'put ''W2xdK0dbYCR7bH1zcGFuYF0tMTpHW2xdKSxkLmhhcyhJKXx8ZC5zZXQoSSxuZXcgU2V0KSxkLmdldChJKS5hZGQoaWUpfXJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShkLmVudHJpZXMoKSkuZmlsdGVyKHY9PntsZXRbLE1dPXY7cmV0dXJuIDE9PT1NLnNpemV9KS5mbGF0''@;'; put 'put ''TWFwKHY9PntsZXRbLE1dPXY7cmV0dXJuIEFycmF5LmZyb20oTSl9KSkpfWZ1bmN0aW9uIF9tZShjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihsZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8''@;'; put 'put ''fHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguc2V0KGwsbmV3IE1hcCksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuc2V0KGEsYyl9ZnVuY3Rpb24gVTN0KGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFu''@;'; put 'put ''O2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5kZWxldGUoYSl9Y29uc3QgWjN0PVNIO2Z1bmN0aW9uICRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXM3QoYyl7dmFyIGw9ZnVuY3Rpb24gWTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIg''@;'; put 'put ''YT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4i''@;'; put 'put ''KX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFi''@;'; put 'put ''bGU6ITB9KTpjW2xdPWEsY31jb25zdCAkM3Q9Y2xhc3MgRzN0e2NvbnN0cnVjdG9yKGwpeyRRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSwkUSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLHZvaWQgMCksJFEodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXREaXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBkPWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsx''@;'; put 'put ''XSYmYVszXT09PWxbM10/InVwIjphWzFdPT09bFsxXSYmYVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1zbmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNsaWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEksRyxpZV09bCx5ZT1bInVwIiwiZG93biJdLmlu''@;'; put 'put ''ZGV4T2YoZCk+LTE/Ry1NKzE6aWUtSSsxLGplPXYtTWF0aC5mbG9vcih2L3llKSp5ZSxxZT10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihxZSlpZigiZG93biI9PT1kKXtjb25zdCBydD1xZS5yb3crcWUucm93c3Bhbi1NLWplO2ZbMl0rcnQ+PXRoaXMucGx1Z2luLmhv''@;'; put 'put ''dC5jb3VudFJvd3MoKT9mWzJdLT1qZTpmWzJdKz1qZT9ydDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0IHJ0PXFlLmNvbCtxZS5jb2xzcGFuLUktamU7ZlszXStydD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPWplOmZbM10rPWplP3J0OjB9ZWxzZSBpZigidXAiPT09''@;'; put 'put ''ZCl7Y29uc3QgcnQ9Ry1qZS1xZS5yb3crMTtmWzBdK3J0PDA/ZlswXSs9amU6ZlswXS09amU/cnQ6MH1lbHNlIGlmKCJsZWZ0Ij09PWQpe2NvbnN0IHJ0PWllLWplLXFlLmNvbCsxO2ZbMV0rcnQ8MD9mWzFdKz1qZTpmWzFdLT1qZT9ydDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxs''@;'; put 'put ''Q2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVjdGlvbjpkLGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6eWV9KSxmfXVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17''@;'; put 'put ''fSksRXUodGhpcy5jdXJyZW50RmlsbERhdGEsbCl9Z2V0QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYsdixNXT1sLFtJLEcsaWUsdWVdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLUk7Y2FzZSJkb3duIjpyZXR1cm4gaWUtdjtjYXNlImxlZnQiOnJldHVybiBmLUc7Y2FzZSJy''@;'; put 'put ''aWdodCI6cmV0dXJuIHVlLU07ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0ksRyxpZSx1ZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuW0ksRyxoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgeWU9dGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uZ2V0KGllLE0pO3JldHVyblt2KzEsZixpZSsoeWU/eWUucm93c3Bhbi0xOjApLE1dfWNhc2UibGVmdCI6cmV0dXJuW0ksRyx2LGYtMV07Y2FzZSJyaWdodCI6e2NvbnN0IHllPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChpZSxNKTtyZXR1cm5baCxNKyh5ZT95ZS5j''@;'; put 'put ''b2xzcGFuLTE6MCksaWUsdWVdfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLHYsTSxJXT1sLEc9WyJ1cCIsImRvd24iXS5pbmRleE9mKGQpPi0xLGllPUc/TTpJLHVlPUc/Zjp2LHllPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxk''@;'; put 'put ''KSxFZT1HP00tZisxOkktdisxLHFlPXllLU1hdGguZmxvb3IoeWUvRWUpKkVlO2xldCBydD1udWxsLHB0PW51bGwsZHQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6cnQ9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9aWUtcWUrMTticmVhaztjYXNlImxlZnQiOnJ0PSJpbmNsdWRlc0hvcml6b250''@;'; put 'put ''YWxseSIsZHQ9aWUtcWUrMTticmVhaztjYXNlImRvd24iOnJ0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLGR0PXVlK3FlLTE7YnJlYWs7Y2FzZSJyaWdodCI6cnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixkdD11ZStxZS0xfXJldHVybiBZbihoLEp0PT57SnRbcnRdKGR0KSYmSnQuaXNGYXJ0aGVy''@;'; put 'put ''KHB0LGQpJiYocHQ9SnQpfSkscHR9cmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhp''@;'; put 'put ''cy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixmPShHLGllKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gRy5yb3ctaWU+PWEuZnJvbS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gRy5yb3crRy5yb3dzcGFuLTEraWU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIEcuY29sLWll''@;'; put 'put ''Pj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVybiBHLmNvbCtHLmNvbHNwYW4tMStpZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2PTAsTT1udWxsLEk9MTtkb3tmb3IobGV0IEc9MDtHPGQubGVuZ3RoO0crPTEpe2lmKE09ZFtHXSx2PUkqdGhpcy5jdXJy''@;'; put 'put ''ZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihNLHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRv''@;'; put 'put ''d24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93''@;'; put 'put ''Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46''@;'; put 'put ''TS5jb2xzcGFufSwhMCl9Rz09PWQubGVuZ3RoLTEmJihJKz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJlbnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5yZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNo''@;'; put 'put ''YW5nZXMobCl7Y29uc3QgYT17bWluOm51bGwsbWF4Om51bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1cm4gWW4obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09''@;'; put 'put ''YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9ZiksKG51bGw9PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwobnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYpfSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0Fy''@;'; put 'put ''ZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtmLHYsTSxJXT1oLEc9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksaWU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sSSksdWU9dGhpcy5w''@;'; put 'put ''bHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoRyxHLGllKTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UodWUsITApLmxlbmd0aClyZXR1cm4hMTtjb25zdCBFZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZSh1ZSwhMSk7''@;'; put 'put ''cmV0dXJuIDA9PT1FZS5sZW5ndGh8fCgidXAiPT09ZHx8ImRvd24iPT09ZD8hRWUuZXZlcnkoamU9PntsZXR7Y29sc3BhbjpxZX09amU7cmV0dXJuIHFlPT09dWUuZ2V0V2lkdGgoKX0pOiFFZS5ldmVyeShqZT0+e2xldHtyb3dzcGFuOnFlfT1qZTtyZXR1cm4gcWU9PT11ZS5nZXRIZWlnaHQo''@;'; put 'put ''KX0pKX19O2Z1bmN0aW9uIEtRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLM3QoYyl7dmFyIGw9ZnVuY3Rpb24gcTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKM3Q9Y2xhc3MgWDN0e2NvbnN0cnVjdG9yKGwp''@;'; put 'put ''e0tRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxLUSh0aGlzLCJob3QiLHZvaWQgMCksS1EodGhpcywiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbCIpLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9Z2V0U2VsZWN0ZWRNZXJnZWRD''@;'; put 'put ''ZWxsQ2xhc3NOYW1lKGwsYSxkLGgpe2NvbnN0IGY9TWF0aC5taW4oZFswXSxkWzJdKSx2PU1hdGgubWluKGRbMV0sZFszXSksTT1NYXRoLm1heChkWzBdLGRbMl0pLEk9TWF0aC5tYXgoZFsxXSxkWzNdKTtpZih2b2lkIDA9PT1ofHwhdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybjtjb25zdCBpZT10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIWllKXJldHVybjtjb25zdCB1ZT1pZS5nZXRMYXN0Um93KCkseWU9aWUuZ2V0TGFzdENvbHVtbigpO3JldHVybiBmPD1p''@;'; put 'put ''ZS5yb3cmJnY8PWllLmNvbCYmTT49dWUmJkk+PXllP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7aH1gOnRoaXMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGllLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxl''@;'; put 'put ''Y3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVz''@;'; put 'put ''aCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2PTA7djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJu''@;'; put 'put ''ITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5m''@;'; put 'put ''dWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX07ZnVuY3Rpb24gZkEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVwdChjKXt2YXIgbD1mdW5jdGlvbiB0cHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNsYXNzIHdtZXtjb25zdHJ1Y3RvcihsKXtmQSh0aGlzLCJkYXRhIix2b2lkIDApLGZBKHRoaXMsIm5leHQiLG51bGwpLGZBKHRoaXMsInByZXYiLG51bGwpLHRoaXMuZGF0YT1sfX1jb25zdCB4SD1jbGFzcyBucHR7Y29uc3RydWN0b3IoKXtmQSh0aGlzLCJmaXJzdCIsbnVsbCks''@;'; put 'put ''ZkEodGhpcywibGFzdCIsbnVsbCl9cHVzaChsKXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmxhc3Q7dGhpcy5sYXN0PWEsYS5wcmV2PWQsZC5uZXh0PWF9cmV0dXJuIGF9dW5zaGlmdChs''@;'; put 'put ''KXtjb25zdCBhPW5ldyB3bWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9YSxhLm5leHQ9ZCxkLnByZXY9YX19aW5vcmRlcihsKXtsZXQgYT10aGlzLmZpcnN0O2Zvcig7YTspe2NvbnN0''@;'; put 'put ''IGQ9bChhKTtpZihhPT09dGhpcy5sYXN0fHwhMD09PWQpYnJlYWs7YT1hLm5leHR9fXJlbW92ZShsKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4hMTtsZXQgZCxoLGE9dGhpcy5maXJzdDtmb3IoO2E7KXtpZihhLmRhdGE9PT1sKXJldHVybiBkPWEubmV4dCxoPWEucHJldixkJiYoZC5w''@;'; put 'put ''cmV2PWgpLGgmJihoLm5leHQ9ZCksYT09PXRoaXMuZmlyc3QmJih0aGlzLmZpcnN0PWQpLGE9PT10aGlzLmxhc3QmJih0aGlzLmxhc3Q9aCksITA7YT1hLm5leHR9cmV0dXJuITF9aGFzQ3ljbGUoKXtsZXQgbD10aGlzLmZpcnN0LGE9dGhpcy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1sfHwo''@;'; put 'put ''bD1sLm5leHQsbnVsbD09PWwpKXJldHVybiExO2lmKGw9bC5uZXh0LGE9YS5uZXh0LGw9PT1hKXJldHVybiEwfX1wb3AoKXtpZihudWxsPT09dGhpcy5sYXN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxhc3Q9dGhpcy5sYXN0LnByZXYsbH1zaGlmdCgpe2lm''@;'; put 'put ''KG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5maXJzdD10aGlzLmZpcnN0Lm5leHQsbH1yZWN1cnNpdmVSZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlvbiBsKGQsaCl7aCYmKGwoaCxoLm5leHQpLGgubmV4''@;'; put 'put ''dD1kKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJzdC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCBhPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD10aGlzLmxhc3QsdGhpcy5sYXN0PWF9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwhdGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZCxs''@;'; put 'put ''PXRoaXMuZmlyc3QubmV4dCxhPXRoaXMuZmlyc3Q7Zm9yKDtsOylkPWwubmV4dCxsLm5leHQ9YSxhLnByZXY9bCxhPWwsbD1kO3RoaXMuZmlyc3QubmV4dD1udWxsLHRoaXMubGFzdC5wcmV2PW51bGwsZD10aGlzLmZpcnN0LHRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9ZH19O2Z1bmN0aW9uIFU5''@;'; put 'put ''KGMsbCxhKXtDbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIENtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdmwoYyxsKXtyZXR1''@;'; put 'put ''cm4gYy5nZXQoRUgoYyxsKSl9ZnVuY3Rpb24gVWgoYyxsLGEpe3JldHVybiBjLnNldChFSChjLGwpLGEpLGF9ZnVuY3Rpb24gRUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYcD1uZXcgV2Vha01hcCxKcD1uZXcgV2Vha01hcCxRcD1uZXcgV2Vha01hcCxlND1uZXcgV2Vha01hcCxxUT1uZXcgV2Vha01hcCxUSD1uZXcgV2Vha01hcCxBSD1uZXcgV2Vha01hcCxY''@;'; put 'put ''UT1uZXcgV2Vha1NldDtjbGFzcyBpcHR7Y29uc3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmEscm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1sOyhmdW5jdGlvbiBycHQoYyxsKXtDbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsWFEpLFU5KHRoaXMsWHAsbmV3''@;'; put 'put ''IHhIKSxVOSh0aGlzLEpwLG5ldyB4SCksVTkodGhpcyxRcCxudWxsKSxVOSh0aGlzLGU0LG51bGwpLFU5KHRoaXMscVEsbnVsbCksVTkodGhpcyxUSCxudWxsKSxVOSh0aGlzLEFILG51bGwpLFVoKHFRLHRoaXMsYSksVWgoVEgsdGhpcyxkKSxVaChBSCx0aGlzLGgpfWdldEN1cnJlbnRWZXJ0''@;'; put 'put ''aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChKcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gdmwoZTQsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1''@;'; put 'put ''cm4gdmwoZTQsdGhpcykucHJldi5kYXRhfWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwoWHAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gdmwo''@;'; put 'put ''UXAsdGhpcykubmV4dC5kYXRhfWdldFByZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe1VoKGU0LHRoaXMsdmwoZTQsdGhpcykucHJldiksVWgoUXAsdGhpcyx2bChRcCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFz''@;'; put 'put ''QWN0aXZlKCl7VWgoZTQsdGhpcyx2bChlNCx0aGlzKS5uZXh0KSxVaChRcCx0aGlzLHZsKFFwLHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtjb25zdCBhPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaD1uZXcgV2Vha1NldDtVaChYcCx0aGlz''@;'; put 'put ''LG5ldyB4SCk7Zm9yKGxldCB2PWEucm93O3Y8PWQucm93O3YrKylpZighdmwoVEgsdGhpcykuaXNIaWRkZW4odikpZm9yKGxldCBNPWEuY29sO008PWQuY29sO00rKyl7aWYodmwoQUgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgST1FSChYUSx0aGlzLFNtZSkuY2FsbCh0aGlz''@;'; put 'put ''LGwsdmwoWHAsdGhpcyksaCx2LE0pO0kmJlVoKFFwLHRoaXMsSSl9dmwoWHAsdGhpcykuZmlyc3QmJih2bChYcCx0aGlzKS5maXJzdC5wcmV2PXZsKFhwLHRoaXMpLmxhc3QsdmwoWHAsdGhpcykubGFzdC5uZXh0PXZsKFhwLHRoaXMpLmZpcnN0KTtjb25zdCBmPW5ldyBXZWFrU2V0O1VoKEpw''@;'; put 'put ''LHRoaXMsbmV3IHhIKTtmb3IobGV0IHY9YS5jb2w7djw9ZC5jb2w7disrKWlmKCF2bChBSCx0aGlzKS5pc0hpZGRlbih2KSlmb3IobGV0IE09YS5yb3c7TTw9ZC5yb3c7TSsrKXtpZih2bChUSCx0aGlzKS5pc0hpZGRlbihNKSljb250aW51ZTtjb25zdCBJPUVIKFhRLHRoaXMsU21lKS5jYWxs''@;'; put 'put ''KHRoaXMsbCx2bChKcCx0aGlzKSxmLE0sdik7SSYmVWgoZTQsdGhpcyxJKX12bChKcCx0aGlzKS5maXJzdCYmKHZsKEpwLHRoaXMpLmZpcnN0LnByZXY9dmwoSnAsdGhpcykubGFzdCx2bChKcCx0aGlzKS5sYXN0Lm5leHQ9dmwoSnAsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUobCxhKXty''@;'; put 'put ''ZXR1cm4gdmwoWHAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gVWgoUXAsdGhpcyxkKSwhMX0pLHZsKEpwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0''@;'; put 'put ''e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3RhcnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYmJmE+PXYmJmE8PU0pcmV0dXJuIFVoKGU0LHRoaXMsZCksITF9KSx0aGlzfX1mdW5jdGlvbiBTbWUoYyxsLGEsZCxoKXtjb25zdCBmPWMuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWMu''@;'; put 'put ''Z2V0Qm90dG9tRW5kQ29ybmVyKCksTT1jLmhpZ2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLEk9dmwocVEsdGhpcykuY2FsbCh0aGlzLGQsaCk7aWYoSSYmYS5oYXMoSSkpcmV0dXJuIG51bGw7Y29uc3QgRz17Y29sU3RhcnQ6aCxjb2xFbmQ6aCxyb3dTdGFydDpkLHJvd0VuZDpkfTtpZihJ''@;'; put 'put ''KXtpZihhLmFkZChJKSxJLnJvdzxmLnJvd3x8SS5yb3crSS5yb3dzcGFuLTE+di5yb3d8fEkuY29sPGYuY29sfHxJLmNvbCtJLmNvbHNwYW4tMT52LmNvbClyZXR1cm4gbnVsbDtHLmNvbFN0YXJ0PUkuY29sLEcuY29sRW5kPUkuY29sK0kuY29sc3Bhbi0xLEcucm93U3RhcnQ9SS5yb3csRy5y''@;'; put 'put ''b3dFbmQ9SS5yb3crSS5yb3dzcGFuLTF9Y29uc3QgaWU9bC5wdXNoKEcpO3JldHVybiBkPT09TS5yb3cmJmg9PT1NLmNvbHx8SSYmTS5yb3c+PUkucm93JiZNLnJvdzw9SS5yb3crSS5yb3dzcGFuLTEmJk0uY29sPj1JLmNvbCYmTS5jb2w8PUkuY29sK0kuY29sc3Bhbi0xP2llOm51bGx9ZnVu''@;'; put 'put ''Y3Rpb24gTW1lKGMsbCxhKXtjb25zdHt2aWV3OmQscm93SW5kZXhNYXBwZXI6aH09YyxmPWQuZ2V0U3R5bGVzSGFuZGxlcigpLHY9ZC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IE09MDtmb3IobGV0IEc9bDtHPGwrYTtHKyspaWYoIWguaXNIaWRkZW4oRykpe3ZhciBJO00rPW51bGwhPT0o''@;'; put 'put ''ST1jLmdldFJvd0hlaWdodChHKSkmJnZvaWQgMCE9PUk/STp2LDA9PT1HJiYhZi5pc0NsYXNzaWNUaGVtZSgpJiYoTSs9MSl9cmV0dXJuIE19ZnVuY3Rpb24ga0goYyxsLGEpe3htZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3B0KGMpe3ZhciBsPWZ1bmN0aW9uIGxwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp''@;'; put 'put ''cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gcEEoYyxsLGEpe3JldHVybiBjLnNldChrbChjLGwpLGEpLGF9ZnVuY3Rpb24gdGMoYyxsKXtyZXR1cm4gYy5nZXQoa2woYyxsKSl9ZnVuY3Rpb24ga2woYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMu''@;'; put 'put ''aGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksU2EuZ2V0U2luZ2xl''@;'; put 'put ''dG9uKCkucmVnaXN0ZXIoImFmdGVyTWVyZ2VDZWxscyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxTYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBRUT0ibWVyZ2VDZWxscyIsRW1lPVFRO3ZhciBR''@;'; put 'put ''Mj1uZXcgV2Vha01hcCxlZj1uZXcgV2Vha01hcCx0ND1uZXcgV2Vha01hcCxUbWU9bmV3IFdlYWtNYXAsVmw9bmV3IFdlYWtTZXQ7Y2xhc3MgdXB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG9wdChjLGwpe3htZShjLGwpLGwuYWRkKGMp''@;'; put 'put ''fSh0aGlzLFZsKSxKUSh0aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLG51bGwpLEpRKHRoaXMsImF1dG9maWxsQ2FsY3VsYXRpb25zIixudWxsKSxKUSh0aGlzLCJzZWxlY3Rpb25DYWxjdWxhdGlvbnMiLG51bGwpLGtIKHRoaXMsUTIsbnVsbCksa0godGhpcyxlZix7cm93OjAsY29sOjB9''@;'; put 'put ''KSxrSCh0aGlzLHQ0LG5ldyBpcHQoe21lcmdlZENlbGxzR2V0dGVyOihsLGEpPT50aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKSxyb3dJbmRleE1hcHBlcjp0aGlzLmhvdC5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''cn0pKSxrSCh0aGlzLFRtZSxmdW5jdGlvbiBhcHQoYyl7Y29uc3R7aG90Omx9PWMse3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09bCxoPW5ldyBNYXA7cmV0dXJue2JlZm9yZTpmdW5jdGlvbiBmKCl7fSxhZnRlcjpmdW5jdGlvbiB2KE0sSSxHKXtjb25zdCBpZT1jLm1l''@;'; put 'put ''cmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoSSxHKTtpZighcW8oaWUpKXJldHVybiBNLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksQUUoKSYmaC5oYXMoSSkmJiFsLmdldFNldHRpbmdzKCkucm93SGVhZGVycyYmKE0uc3R5bGUuaGVpZ2h0''@;'; put 'put ''PWAke2guZ2V0KEkpfXB4YCxoLmRlbGV0ZShJKSksdm9pZChNLnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3Jvdzp1ZSxjb2w6eWUsY29sc3BhbjpFZSxyb3dzcGFuOmplfT1pZSxbcWUscnRdPWMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZSh1ZSxqZSx5ZSxFZSkscHQ9Yy5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ2aXJ0dWFsaXplZCIpO2lmKEFFKCkmJjA9PT15ZSYmIWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKXtjb25zdCBtcj1NbWUobCx1ZSxqZSk7aC5zZXQoSSxtci9qZSl9Y29uc3Qgdm49cWUtYS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEkpKzEsQ249cnQtZC5nZXRS''@;'; put 'put ''ZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEcpKzE7bGV0IHRuPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHVlLDEpLE1uPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHllLDEpO2lmKHB0KXtjb25zdCBtcj1sLnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKTtbInRvcCIsInRvcF9p''@;'; put 'put ''bmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobXIpfHwodG49TWF0aC5tYXgodG4sbC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMo''@;'; put 'put ''bXIpfHwoTW49TWF0aC5tYXgoTW4sbC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpKSl9Y29uc3QgQ3I9TWF0aC5taW4oamUsdm4pLEdyPU1hdGgubWluKEVlLENuKTt0bj09PUkmJk1uPT09Rz8oTS5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLENyKSxNLnNldEF0dHJpYnV0ZSgiY29s''@;'; put 'put ''c3BhbiIsR3IpKTooTS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLE0uc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19KHRoaXMpKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUVF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFko''@;'; put 'put ''KXtyZXR1cm4gMTUwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntbQzRlXToiY2VsbHMiLHZpcnR1YWxpemVkOiExLGNlbGxzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbUVFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhp''@;'; put 'put ''cy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IFozdCh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyAkM3QodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IEozdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxkcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHBwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsZ3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxtcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7''@;'; put 'put ''aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxrbWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp''@;'; put 'put ''ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa21lKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn''@;'; put 'put ''dW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHlwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hd''@;'; put 'put ''O3JldHVybiBrbChWbCxsLGJwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmws''@;'; put 'put ''bCxfcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwo''@;'; put 'put ''bCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBbWUpLmNhbGwobCwuLi5kKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLGhwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiB0YyhUbWUsbCkuYWZ0ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFy''@;'; put 'put ''cmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHZwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLHdwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLENwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEp''@;'; put 'put ''LGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFNwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsr''@;'; put 'put ''KWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLE1wdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1to''@;'; put 'put ''XTtyZXR1cm4ga2woVmwsbCx4cHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGws''@;'; put 'put ''RXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFRwdCkuY2FsbChsLC4uLmQp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woVmwsbCxBcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsa3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLERwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsSXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChWbCxsLFJwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsTHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKFZsLGwsT3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3Ro''@;'; put 'put ''aXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUwkKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93Omgscm93c3BhbjpmfT1kO2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuZ2V0T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dy''@;'; put 'put ''b3VuZD1fRSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGwucHVzaCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e3ZhciBoO2Quc3R5bGUuYmFja2dyb3VuZD1udWxsPT09KGg9X0UoZCwiYmFja2dyb3VuZENv''@;'; put 'put ''bG9yIikpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRhdGVTZXR0aW5nKGwpe3JldHVybiEoIWx8fChxcC5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyhpbChxcC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKSksMSk6cXAuaXNPdXRP''@;'; put 'put ''ZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8oaWwocXAuSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpKSwxKTpxcC5pc1NpbmdsZUNlbGwobCk/KGlsKHFwLklTX1NJTkdMRV9DRUxMKGwpKSwxKTpxcC5jb250YWluc1plcm9TcGFuKGwpJiYo''@;'; put 'put ''aWwocXAuWkVST19TUEFOX1dBUk5JTkcobCkpLDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaD0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaCkpLGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3Zlcmxh''@;'; put 'put ''cHBpbmdNZXJnZUNlbGxzKGwpLGQ9W107YS5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixyb3dzcGFuOk0sY29sc3BhbjpJfT1oLEc9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxpZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmK00tMSx2K0ktMSksdWU9dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxSYW5nZShHLEcsaWUpO3RoaXMubWVyZ2VSYW5nZSh1ZSwhMCwhMCk7Zm9yKGxldCB5ZT1mO3llPGYrTTt5ZSsrKWZvcihsZXQgRWU9djtFZTx2K0k7RWUrKykoeWUhPT1mfHxFZSE9PXYpJiZkLnB1c2goW3llLEVlLG51bGxdKX0pLDAhPT1kLmxlbmd0aCYmdGhpcy5o''@;'; put 'put ''b3Quc2V0RGF0YUF0Q2VsbChkLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKX1jbGVhckNvbGxlY3Rpb25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlzLnZhbGlkYXRlU2V0dGluZyhsKX1tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJl''@;'; put 'put ''dHVybjtsLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEp''@;'; put 'put ''fXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2Uo''@;'; put 'put ''bCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxmPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj17cm93Omgucm93LGNvbDpoLmNvbCxyb3dzcGFuOmYucm93LWgucm93KzEsY29sc3BhbjpmLmNvbC1oLmNvbCsxfSxNPVtdO2xldCBJPW51bGw7cmV0''@;'; put 'put ''dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2UodixhKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVNZXJnZUNlbGxzIixsLGEpLEdhKDAsdi5yb3dzcGFuLTEsaWU9PntHYSgwLHYuY29sc3Bhbi0xLHVlPT57bGV0IHllPW51bGw7TVtpZV18fChNW2llXT1bXSksMD09PWllJiYwPT09dWU/eWU9''@;'; put 'put ''dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYucm93KSx0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYuY29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3craWUsdi5jb2wrdWUsImhpZGRlbiIsITApLE1baWVdW3VlXT15ZX0pfSksdGhp''@;'; put 'put ''cy5ob3Quc2V0Q2VsbE1ldGEodi5yb3csdi5jb2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHYsYSl8fChkP0k9W3Yucm93LHYuY29sLE1dOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYucm93LHYuY29sLE0sdm9pZCAwLHZvaWQgMCx0aGlzLnBs''@;'; put 'put ''dWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNZXJnZUNlbGxzIixsLHYsYSksSSkpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFd''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7MCE9PWQubGVuZ3RoJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVubWVyZ2VDZWxscyIsbCxhKSxZbihkLGg9Pnt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5yZW1vdmUoaC5yb3csaC5j''@;'; put 'put ''b2wpLEdhKDAsaC5yb3dzcGFuLTEsZj0+e0dhKDAsaC5jb2xzcGFuLTEsdj0+e3RoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwiaGlkZGVuIiksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJjb3B5YWJsZSIpfSl9KSx0aGlzLmhvdC5yZW1v''@;'; put 'put ''dmVDZWxsTWV0YShoLnJvdyxoLmNvbCwic3Bhbm5lZCIpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5tZXJnZUNlbGxzIixsLGEpLHRoaXMuaG90LnJlbmRlcigpKX10b2dnbGVNZXJnZShsKXtjb25zdHtmcm9tOmEsdG86ZH09bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLGg9dGhpcy5tZXJn''@;'; put 'put ''ZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEucm93LGEuY29sKTtoLnJvdz09PWEucm93JiZoLmNvbD09PWEuY29sJiZoLnJvdytoLnJvd3NwYW4tMT09PWQucm93JiZoLmNvbCtoLmNvbHNwYW4tMT09PWQuY29sP3RoaXMudW5tZXJnZVJhbmdlKGwpOnRoaXMubWVyZ2VTZWxlY3Rpb24obCl9bWVy''@;'; put 'put ''Z2UobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXVubWVyZ2UobCxhLGQsaCl7Y29uc3QgZj10aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpLHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZCxoKTt0aGlzLnVubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5n''@;'; put 'put ''ZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7ZCYmIWQuaXNTaW5nbGVIZWFkZXIoKSYmKHRoaXMudG9nZ2xlTWVyZ2UoZCksdGhpcy5ob3QucmVu''@;'; put 'put ''ZGVyKCkpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOkVtZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChFbWUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQo''@;'; put 'put ''bCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHFvKHYpKXtjb25zdCBN''@;'; put 'put ''PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdywxKSk7aWYoTTxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5k''@;'; put 'put ''KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYocW8odikpe2NvbnN0IEk9''@;'; put 'put ''ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93K3Yucm93c3Bhbi0xLC0xKSk7aWYoST5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9SSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX19fW1vZGlmeVZpZXdwb3J0''@;'; put 'put ''Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgp''@;'; put 'put ''O2lmKHFvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoTTxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1uPU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQo''@;'; put 'put ''bCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0Nv''@;'; put 'put ''bGxlY3Rpb24uZ2V0KGYsaCk7aWYocW8odikpe2NvbnN0IEk9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoST5sLmVuZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49SSx2b2lkIHRoaXMu''@;'; put 'put ''bW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUobCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDtsZXQgTSxJO3JldHVybiBNPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLEk9MD09PWg/di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwtMSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4''@;'; put 'put ''KE0pOmwsZD49MD92LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoSSk6ZF19fWZ1bmN0aW9uIGRwdCgpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBocHQoYyl7aWYoYyl7Y29uc3QgbD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlv''@;'; put 'put ''bi5tZXJnZWRDZWxscyxhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldFRvcFN0YXJ0Q29ybmVyKCksaD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7Zis9MSlpZihkLnJvdz09PWxbZl0ucm93JiZkLmNvbD09PWxbZl0uY29sJiZo''@;'; put 'put ''LnJvdz09PWxbZl0ucm93K2xbZl0ucm93c3Bhbi0xJiZoLmNvbD09PWxbZl0uY29sK2xbZl0uY29sc3Bhbi0xKXJldHVybiExfXJldHVybiBjfWZ1bmN0aW9uIGZwdChjKXt0YyhlZix0aGlzKS5yb3c9Yy5yb3csdGMoZWYsdGhpcykuY29sPWMuY29sfWZ1bmN0aW9uIHBwdChjKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDphfT1sLHtjb2x1bW5JbmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O3RjKFEyLHRoaXMpJiYobnVsbCE9PWguZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0YyhRMix0aGlzKS5yb3cp''@;'; put 'put ''JiYoYS5yb3c9dGMoUTIsdGhpcykucm93KSxudWxsIT09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRjKFEyLHRoaXMpLmNvbCkmJihhLmNvbD10YyhRMix0aGlzKS5jb2wpLHBBKFEyLHRoaXMsbnVsbCkpO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGEu''@;'; put 'put ''cm93LGEuY29sKTtpZighZilyZXR1cm47Y29uc3Qgdj1mLmNvbCxNPWYuY29sK2YuY29sc3Bhbi0xO2lmKGMuY29sPDApe2NvbnN0IHVlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT92LTE6TSwtMSk7Yy5jb2w9bnVsbD09PXVlPy10aGlzLmhvdC52aWV3''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsYS5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKHVlLGEuY29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgdWU9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5j''@;'; put 'put ''b2w+PXYmJmEuY29sPD1NP00rMTp2LDEpO2MuY29sPW51bGw9PT11ZT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGEuY29sLHRoaXMuaG90LmNvdW50Q29scygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdl''@;'; put 'put ''KGEuY29sLHVlKS0xLDEpfWNvbnN0IEk9Zi5yb3csRz1mLnJvdytmLnJvd3NwYW4tMTtpZihjLnJvdzwwKXtjb25zdCB1ZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49SSYmYS5yb3c8PUc/SS0xOkcsLTEpO2Mucm93PW51bGw9PT11ZT8tdGhpcy5ob3Qudmlldy5jb3VudFJl''@;'; put 'put ''bmRlcmFibGVSb3dzSW5SYW5nZSgwLGEucm93KTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSh1ZSxhLnJvdyktMSwxKX1lbHNlIGlmKGMucm93PjApe2NvbnN0IHVlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1JJiZhLnJvdzw9''@;'; put 'put ''Rz9HKzE6SSwxKTtjLnJvdz1udWxsPT09dWU/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShhLnJvdyx1ZSktMSwxKX19ZnVu''@;'; put 'put ''Y3Rpb24gZ3B0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWwuY2xvbmUoKSx7dG86ZH09bCx7Y29sdW1uSW5kZXhNYXBwZXI6aCxyb3dJbmRleE1hcHBlcjpmfT10aGlzLmhvdCx2PShNLEkpPT57YS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoTSxJKSk7Zm9yKGxldCBHPTA7Rzx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7Rys9MSlhLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbR10uZ2V0UmFuZ2UoKSl9O2lmKGMuY29sPDApe2xldCBNPXRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIkUtVyI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENv''@;'; put 'put ''cm5lcigpLmNvbCk7Y29uc3QgST1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1JJiYoYy5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoSSxkLmNvbCktMSwxKSl9ZWxzZSBpZihjLmNvbD4wKXtsZXQgTT10aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihkLnJvdyxNKSwiVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWEuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbUVuZENvcm5l''@;'; put 'put ''cigpLmNvbCk7Y29uc3QgST1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09SSYmKGMuY29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoZC5jb2wsSSktMSwxKSl9aWYoYy5yb3c8MCl7bGV0IE09dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24uZ2V0VG9wTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIlMtTiI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBJ''@;'; put 'put ''PWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUkmJihjLnJvdz0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShJLGQucm93KS0xLDEpKX1lbHNlIGlmKGMucm93PjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmdldEJvdHRvbU1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyk7Y29uc3QgST1mLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09SSYmKGMucm93PU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoZC5yb3csSSktMSwxKSl9fWZ1bmN0aW9uIG1wdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7''@;'; put 'put ''aGlnaGxpZ2h0Omx9PWM7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQgcEEoUTIsdGhpcyxsLmNsb25lKCkpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJn''@;'; put 'put ''ZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2Vs''@;'; put 'put ''bHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTtwQShRMix0aGlzLGwuY2xvbmUoKSksYSYm''@;'; put 'put ''bC5hc3NpZ24oYSl9ZnVuY3Rpb24gQW1lKGMsbCxhLGQpe2lmKGM8MHx8bDwwKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2lmKCFoKXJldHVybjtjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpJfT1oLEc9ZixpZT12LHVlPWYr''@;'; put 'put ''SS0xLHllPXYrTS0xO2lmKCJyZW5kZXIiPT09ZCYmdGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXtjb25zdCBFZT10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksamU9WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMu''@;'; put 'put ''aG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkscWU9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTty''@;'; put 'put ''ZXR1cm5ba3MoamUsRyx1ZSksa3MocWUsaWUseWUpLGtzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSxHLHVlKSxrcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksaWUseWUpXX1yZXR1cm5bRyxpZSx1ZSx5ZV19ZnVuY3Rpb24gdnB0KGMpe2Mu''@;'; put 'put ''aXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gUTN0KGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYobCl7Y29uc3QgYT1jLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTtpZihh''@;'; put 'put ''LnJvdz09PWxbMF0mJmEuY29sPT09bFsxXSYmYS5yb3crYS5yb3dzcGFuLTE9PT1sWzJdJiZhLmNvbCthLmNvbHNwYW4tMT09PWxbM10pcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShkcSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1cSl9LGNhbGxiYWNrKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO2MudG9nZ2xlTWVyZ2UobCksdGhpcy5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQu''@;'; put 'put ''Y29sLCExKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWx8fHFwLmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0rMSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24ga21lKCl7cEEoUTIsdGhpcyxudWxsKX1mdW5jdGlvbiB5cHQoKXtpZih0YyhRMix0aGlzKS5pc0NlbGwoKSlyZXR1cm47Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGw9Yy5nZXRWZXJ0aWNhbERp''@;'; put 'put ''cmVjdGlvbigpLGE9Yy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksZD10YyhRMix0aGlzKS5jbG9uZSgpLm5vcm1hbGl6ZSgpO3RjKHQ0LHRoaXMpLnNldEFjdGl2ZU5vZGUoZC5yb3csZC5jb2wpLHRjKGVmLHRoaXMpLnJvdz4wfHx0YyhlZix0aGlzKS5jb2w+MD90Yyh0NCx0aGlzKS5zZXRQ''@;'; put 'put ''cmV2Tm9kZUFzQWN0aXZlKCk6KCJFLVciPT09YSYmdGMoZWYsdGhpcykuY29sPDB8fCJTLU4iPT09bCYmdGMoZWYsdGhpcykucm93PDApJiZ0Yyh0NCx0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCl9ZnVuY3Rpb24gYnB0KGMsbCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpLHtjb2x1bW5JbmRleE1hcHBlcjpkLHJvd0luZGV4TWFwcGVyOmh9PXRoaXMuaG90O2xldCBmPW51bGwsdj1udWxsO2lmKHRjKGVmLHRoaXMpLmNvbDwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6SX09dGModDQsdGhpcykuZ2V0UHJldkhvcml6b250YWxOb2RlKCk7dj1kLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChJLC0xKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpfWVsc2UgaWYodGMoZWYsdGhpcykuY29sPjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6SX09dGModDQsdGhpcykuZ2V0TmV4dEhvcml6b250YWxOb2RlKCk7dj1kLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChJLDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1lbHNlIGlmKHRjKGVmLHRoaXMpLnJvdzwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6SX09dGModDQsdGhpcykuZ2V0UHJldlZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVu''@;'; put 'put ''SW5kZXgoSSwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKHRjKGVmLHRoaXMpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0Okl9PXRjKHQ0LHRoaXMpLmdldE5leHRWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KEksMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpfWlmKG51bGwhPT1mfHxudWxsIT09dil7Y29uc3QgTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLEk9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KE0ucm93LE0uY29sKSxHPXRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtjPU0ucm93LGw9TS5jb2wsYS5oaWdobGlnaHQuYXNzaWduKEk/e3Jvdzp0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoSS5yb3csMSksY29sOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChJLmNvbCwxKX06TSksRy5jbGVhcigpLEcuYWRkKE0pLmNvbW1pdCgpfXRjKHQ0LHRoaXMpLnNldEFjdGl2ZU5vZGUoYyxsKSxwQShlZix0aGlzLHtyb3c6MCxjb2w6MH0pfWZ1bmN0aW9uIF9wdCgpe3RoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaXNI''@;'; put 'put ''ZWFkZXIoKXx8dGModDQsdGhpcykuYnVpbGRGb2N1c09yZGVyKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfWZ1bmN0aW9uIHdwdChjLGwsYSl7Y29uc3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYyxsKTtkJiYoZC5yb3chPT1jfHxkLmNvbCE9PWw/YS5jb3B5''@;'; put 'put ''YWJsZT0hMTooYS5yb3dzcGFuPWQucm93c3BhbixhLmNvbHNwYW49ZC5jb2xzcGFuKSl9ZnVuY3Rpb24gQ3B0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQo''@;'; put 'put ''YyxsKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGMsbCl9ZnVuY3Rpb24gU3B0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoYyxsKSx0aGlzLm1v''@;'; put 'put ''ZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGMsbCl9ZnVuY3Rpb24gTXB0KGMsbCl7Y29uc3QgYT10aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihsLGMpO2lmKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYyxhKSlyZXR1''@;'; put 'put ''cm4gbDtjb25zdCBkPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSksaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzJdLGxbM10pLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShkLGQsaCksdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5S''@;'; put 'put ''YW5nZShmKTtyZXR1cm4gMD09PXYubGVuZ3RoP2M6dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEobCxjLGEsdil9ZnVuY3Rpb24geHB0KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGMsbCl9ZnVuY3Rpb24gRXB0''@;'; put 'put ''KGMsbCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsYyxsKX1mdW5jdGlvbiBUcHQoYyxsLGEpeyJhdXRvIiE9PWEmJnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImRvd24iLGMsbCl9ZnVuY3Rpb24gQXB0KGMs''@;'; put 'put ''bCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygidXAiLGMsbCl9ZnVuY3Rpb24ga3B0KGMsbCl7IkF1dG9maWxsLmZpbGwiPT09bCYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oYyl9ZnVuY3Rpb24gRHB0''@;'; put 'put ''KGMsbCl7aWYobCYmImFyZWEiPT09bCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1luKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGEpLGg9PnthLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWguZ2V0TGFzdFJvdygpJiZhLmdl''@;'; put 'put ''dEJvdHRvbUVuZENvcm5lcigpLmNvbD09PWguZ2V0TGFzdENvbHVtbigpJiYoY1syXT1oLnJvdyxjWzNdPWguY29sKX0pfX1mdW5jdGlvbiBJcHQoYyxsLGEsZCl7aWYoYSlyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGMs''@;'; put 'put ''bCxhLGQpfWZ1bmN0aW9uIFJwdCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpfWZ1bmN0aW9uIExwdChjLGwsYSxkKXtpZighKGQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSlyZXR1cm47Y29uc3QgaD10''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0QnlSYW5nZShoKTtpZighZilyZXR1cm47Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxmLmNvbCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhm''@;'; put 'put ''LnJvdytmLnJvd3NwYW4tMSxmLmNvbCtmLmNvbHNwYW4tMSk7cmV0dXJuIDA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzRXF1YWwodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkpfWZ1bmN0aW9uIE9wdChjLGwsYSl7aWYodGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKS5yb3dIZWFkZXJzfHwiYm90dG9tIj09PWF8fCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hKXJldHVybiBjO2xldCBkLGg7aWYoIm1hc3RlciI9PT1hKWQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxoPXRoaXMuaG90LmdldExhc3RSZW5k''@;'; put 'put ''ZXJlZFZpc2libGVDb2x1bW4oKTtlbHNle2NvbnN0IHllPXRoaXMuaG90LnZpZXcuZ2V0T3ZlcmxheUJ5TmFtZShhKTtkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoeWUuY2xvbmUud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1u''@;'; put 'put ''KCkpLGg9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh5ZS5jbG9uZS53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZighdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsZCkpcmV0dXJuIGM7Y29uc3Qgdj10aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGQpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxoKSxJPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLEc9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoSSwhMCksaWU9Ry5yZWR1Y2UoKHllLEVl''@;'; put 'put ''KT0+e2xldHtyb3dzcGFuOmplfT1FZTtyZXR1cm4gTWF0aC5tYXgoeWUsamUpfSwxKTtsZXQgdWU9MDtyZXR1cm4gRy5sZW5ndGg+MSYmR1swXS5yb3dzcGFuPGllJiYodWU9aWUtR1swXS5yb3dzcGFuKSxHLmZvckVhY2goeWU9PntsZXR7cm93c3BhbjpFZX09eWUsamU9MDtqZT0idG9wIj09''@;'; put 'put ''PWF8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hP01hdGgubWluKGllLHRoaXMuaG90LnZpZXcuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKS1sKTpFZS11ZSxjPU1hdGgubWF4KGM/PzAsTW1lKHRoaXMuaG90LGwsamUpKX0pLGN9Y29uc3QgREg9Im11bHRpQ29sdW1uU29ydGlu''@;'; put 'put ''ZyIsSW1lPURIO0c0ZShESCxmdW5jdGlvbiBQcHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIHYoTSl7Y29uc3QgST1jW01dLEc9bFtNXSxpZT1oW01dLHVlPWZbTV0seWU9Ry5tdWx0aUNvbHVtblNvcnRpbmcsamU9''@;'; put 'put ''KHllLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/eWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTokNGUoRy50eXBlKSkoSSxHLHllKShpZSx1ZSk7aWYoamU9PT1qcCl7Y29uc3QgcWU9TSsxO2lmKHR5cGVvZiBsW3FlXTwidSIpcmV0dXJuIHYocWUpfXJldHVybiBqZX0oMCl9fSk7Y2xhc3MgenB0''@;'; put 'put ''IGV4dGVuZHMgYWdle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBOcHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZwdChjKXt2YXIgbD1mdW5jdGlvbiBCcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfSh0aGlzLCJwbHVnaW5LZXkiLERIKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gREh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5h''@;'; put 'put ''YmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIp''@;'; put 'put ''LmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4tMT09PWwucm93JiZsLmNvbD49MCYmdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWco''@;'; put 'put ''bC5jb2wsb0YpKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIGQmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiZkLmlzSGVhZGVyKCl9LHJlbGF0aXZlVG9Hcm91cDpXbSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpJbWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7''@;'; put 'put ''c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEltZSl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVk''@;'; put 'put ''KCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJn''@;'; put 'put ''dW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwuLi5kKSxsbyhsLGZ1bmN0aW9uIEhwdChjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSks''@;'; put 'put ''ITEhPT10aGlzLmVuYWJsZWQmJlRpKGwsZnVuY3Rpb24gRnB0KGMsbCxhKXtjb25zdCBkPVtdO3JldHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1''@;'; put 'put ''ZShsKSsxfWApLGR9KC4uLmQpKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1iSihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpJiYodGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpPyh0aGlz''@;'; put 'put ''LmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSx0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhhLmNvbCxvRikpKTp0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKSkpfX1mdW5jdGlvbiBSbWUoYyxsLGEpe3JldHVy''@;'; put 'put ''bihsPWZ1bmN0aW9uIFVwdChjKXt2YXIgbD1mdW5jdGlvbiBacHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10''@;'; put 'put ''eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwr''@;'; put 'put ''IiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEdwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxSbWUodGhpcywi''@;'; put 'put ''ZHJhZ2dlZCIsW10pLFJtZSh0aGlzLCJsYXN0U2V0Q2VsbCIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTYwfWlzRW5hYmxlZCgpe3JldHVybiBBcCgpfWVu''@;'; put 'put ''YWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMse3Jvb3RFbGVtZW50OmF9PXRoaXMuaG90O2Z1bmN0aW9uIGQoaCl7aWYoMT09PWwuZHJhZ2dlZC5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIGwuZHJhZ2dlZC5zcGxpY2UoMCxsLmRyYWdnZWQubGVuZ3RoKSwhMDtjb25zdCBmPWwuZHJhZ2dlZC5pbmRleE9mKGgpO2lmKC0xPT09ZilyZXR1cm4hMTswPT09Zj9sLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PWYmJihsLmRyYWdnZWQ9bC5kcmFnZ2Vk''@;'; put 'put ''LnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaHN0YXJ0IixoPT57bGV0IGY7cmV0dXJuIHBvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1''@;'; put 'put ''c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6cG8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/''@;'; put 'put ''KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCEx''@;'; put 'put ''KTp2b2lkIDB9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIixoPT5wbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCks''@;'; put 'put ''ITEpOnBvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRv''@;'; put 'put ''dWNobW92ZSIsaD0+e2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmhvdDtsZXQgdixNLEksRyxpZSx1ZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgeWU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hlc1swXS5jbGllbnRZKTsh''@;'; put 'put ''eWV8fHllPT09bC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09eWUubm9kZU5hbWV8fCJUSCI9PT15ZS5ub2RlTmFtZSkmJih2PWwuaG90LmdldENvb3Jkcyh5ZSksLTE9PT12LmNvbCYmKHYuY29sPTApLE09bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxJPU0uZ2V0V2lkdGgoKSxHPU0uZ2V0''@;'; put 'put ''SGVpZ2h0KCksaWU9TS5nZXREaXJlY3Rpb24oKSwxPT09SSYmMT09PUcmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh2KSx1ZT1sLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhNLHYsbC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLGllLGwuZHJhZ2dlZFswXSksbnVsbCE9PXVlLnN0YXJ0''@;'; put 'put ''JiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VTdGFydCh1ZS5zdGFydCksbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKHVlLmVuZCksbC5sYXN0U2V0Q2VsbD15ZSksaC5wcmV2ZW50RGVmYXVsdCgpKX0pfWdldEN1cnJlbnRSYW5nZUNvb3JkcyhsLGEsZCxoLGYpe2NvbnN0IHY9bC5nZXRU''@;'; put 'put ''b3BTdGFydENvcm5lcigpLE09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxJPWwuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKSxHPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IGllPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOmNh''@;'; put 'put ''c2UiTlctU0UiOmllPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csbC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoSS5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdo''@;'; put 'put ''bGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihpZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTS5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9KX1icmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6InRvcCI9PT1mP2llPXtzdGFydDphLGVuZDpJfTppZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/aWU9e3N0YXJ0OmEsZW5kOk19OmllLmVuZD1hO2JyZWFr''@;'; put 'put ''O2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9pZT17c3RhcnQ6YSxlbmQ6dn06aWUuZW5kPWE7YnJlYWs7Y2FzZSJTVy1ORSI6InRvcCI9PT1mP2llPXtzdGFydDphLGVuZDpHfTppZS5lbmQ9YX1icmVhaztjYXNlIlNXLU5FIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6aWU9ImJvdHRvbSI9PT1mP3tz''@;'; put 'put ''dGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEkucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoYS5yb3csTS5jb2wpfTticmVhaztjYXNlIlNXLU5FIjppZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX06e3N0YXJ0OnRoaXMuaG90''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWY/aWU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LEcuY29sKSxlbmQ6dGhp''@;'; put 'put ''cy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfToidG9wIj09PWYmJihpZT17c3RhcnQ6SSxlbmQ6YX0pfWJyZWFrO2Nhc2UiU0UtTlciOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpjYXNlIk5FLVNXIjpjYXNlIlNXLU5FIjoidG9wIj09PWYmJihpZS5lbmQ9YSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJTRS1OVyI6InRvcCI9PT1mP2llLmVuZD1hOmllPXtzdGFydDphLGVuZDp2fX19cmV0dXJuIGllfWlzRHJhZ2dlZCgpe3JldHVybiB0aGlzLmRyYWdnZWQubGVuZ3RoPjB9fWZ1bmN0aW9uIGVlZSgpe2xldHtsYWJlbDpjPSIiLGNvbHNwYW46bD0xLG9yaWdDb2xzcGFuOmE9MSxjb2xsYXBz''@;'; put 'put ''aWJsZTpkPSExLGNyb3NzSGlkZGVuQ29sdW1uczpoPVtdLGlzQ29sbGFwc2VkOmY9ITEsaXNIaWRkZW46dj0hMSxpc1Jvb3Q6TT0hMSxpc1BsYWNlaG9sZGVyOkk9ITEsaGVhZGVyQ2xhc3NOYW1lczpHPVtdfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1''@;'; put 'put ''bWVudHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOnYsaXNSb290Ok0saXNQbGFjZWhvbGRlcjpJLGhlYWRlckNsYXNzTmFtZXM6R319ZnVuY3Rpb24g''@;'; put 'put ''dGVlKGMsbCxhKXsoZnVuY3Rpb24gS3B0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MyhjLGwpe3Jl''@;'; put 'put ''dHVybiBjLmdldChPbWUoYyxsKSl9ZnVuY3Rpb24gZ0EoYyxsLGEpe3JldHVybiBjLnNldChPbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIE9tZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgUG1lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBZZz1uZXcgV2Vha01hcCxaOT1uZXcgV2Vha01hcCxuZWU9bmV3IFdlYWtNYXA7Y2xhc3MgcXB0e2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGVlKHRoaXMsWWcsW10pLHRlZSh0aGlzLFo5LDApLHRlZSh0aGlzLG5lZSwxLzApfXNldENvbHVtbnNMaW1pdChsKXtnQShuZWUsdGhpcyxsKX1zZXREYXRhKCl7Z0EoWWcsdGhpcyxmdW5jdGlvbiAkcHQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO1luKGMsaD0+e2NvbnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksWW4oaCxNPT57Y29uc3QgST1lZWUoKTtpZihxbyhNKSl7Y29uc3R7bGFiZWw6aWUsY29sc3Bhbjp1ZSxoZWFkZXJDbGFzc05hbWU6''@;'; put 'put ''eWV9PU07SS5sYWJlbD1sYyhpZSksIm51bWJlciI9PXR5cGVvZiB1ZSYmdWU+MSYmKEkuY29sc3Bhbj11ZSxJLm9yaWdDb2xzcGFuPXVlKSwic3RyaW5nIj09dHlwZW9mIHllJiYoSS5oZWFkZXJDbGFzc05hbWVzPVsuLi55ZS5zcGxpdCgiICIpXSl9ZWxzZSBJLmxhYmVsPWxjKE0pO3YrPUku''@;'; put 'put ''b3JpZ0NvbHNwYW47bGV0IEc9ITE7aWYodj49bCYmKEkuY29sc3Bhbj1JLm9yaWdDb2xzcGFuLSh2LWwpLEkub3JpZ0NvbHNwYW49SS5jb2xzcGFuLEc9ITApLGYucHVzaChJKSxJLmNvbHNwYW4+MSlmb3IobGV0IGllPTA7aWU8SS5jb2xzcGFuLTE7aWUrKylmLnB1c2goe2xhYmVsOiIiLGlz''@;'; put 'put ''UGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4hR30pfSk7Y29uc3QgZD1NYXRoLm1heCguLi5icyhhLGg9PmgubGVuZ3RoKSk7cmV0dXJuIFluKGEsaD0+e2lmKGgubGVuZ3RoPGQpe2NvbnN0IGY9YnMobmV3IEFycmF5KGQtaC5sZW5ndGgpLCgpPT5lZWUoKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwu''@;'; put 'put ''Li5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdzMobmVlLHRoaXMpKSksZ0EoWjksdGhpcyx3MyhZZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdzMoWWcsdGhpcyl9bWVyZ2VXaXRoKGwpe1luKGwsYT0+''@;'; put 'put ''e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12JiZFdSh2LGYsUG1lKX0pfW1hcChsKXtZbih3MyhZZyx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7cW8oaCkmJkV1KGQsaCxQbWUpfSl9KX1nZXRI''@;'; put 'put ''ZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD13MyhZZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1n''@;'; put 'put ''ZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXczKFo5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13MyhZZyx0aGlzKVtsXTtsZXQgdj0wO2Zvcihs''@;'; put 'put ''ZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25zdCBJPWZbTV07aWYoSS5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUkuY29sc3BhbixoLnB1c2goSSks''@;'; put 'put ''SS5jb2xzcGFuPjEmJihNKz1JLmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4g''@;'; put 'put ''dzMoWjksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHczKFo5LHRoaXMpPjA/dzMoWWcsdGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtnQShZZyx0aGlzLFtdKSxnQShaOSx0aGlzLDApfX1mdW5jdGlvbiByZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhwdChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBKcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEZtZT0iREYtcHJlLW9yZGVyIixCbWU9bmV3IE1hcChbW0ZtZSxmdW5jdGlvbiBIbWUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9''@;'; put 'put ''MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKyspe2lmKCExPT09YSlyZXR1cm4hMTthPUhtZS5jYWxsKHRoaXMuY2hpbGRzW2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uIE5tZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZigh''@;'; put 'put ''MT09PU5tZS5jYWxsKHRoaXMuY2hpbGRzW2FdLGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChsLHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gZTR0KGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVz''@;'; put 'put ''aCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwobCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBJSHtjb25zdHJ1Y3RvcihsKXtyZWUodGhpcywiZGF0YSIse30pLHJlZSh0aGlzLCJwYXJlbnQiLG51bGwpLHJlZSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVu''@;'; put 'put ''dD10aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgSUgoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2Qr''@;'; put 'put ''KylhLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFjZVRyZWVXaXRoKGwpe3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1th''@;'; put 'put ''XSl9d2Fsa0Rvd24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJCRiI7aWYoIUJtZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7Qm1lLmdldChh''@;'; put 'put ''KS5jYWxsKHRoaXMsbCx0aGlzKX13YWxrVXAobCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5jYWxsKGEsaCkmJm51bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIGllZShjLGwsYSl7KGZ1bmN0aW9uIG40dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcmQoYyxsKXtyZXR1cm4gYy5nZXQoam1lKGMsbCkpfWZ1bmN0aW9uIGptZShjLGwsYSl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGd3PW5ldyBXZWFrTWFwLFc5PW5ldyBXZWFrTWFwLG13''@;'; put 'put ''PW5ldyBXZWFrTWFwO2NsYXNzIGk0dHtjb25zdHJ1Y3RvcihsKXtpZWUodGhpcyxndyxuZXcgTWFwKSxpZWUodGhpcyxXOSxuZXcgTWFwKSxpZWUodGhpcyxtdyxudWxsKSxmdW5jdGlvbiByNHQoYyxsLGEpe2Muc2V0KGptZShjLGwpLGEpfShtdyx0aGlzLGwpfWdldFJvb3RzKCl7cmV0dXJu''@;'; put 'put ''IEFycmF5LmZyb20ocmQoZ3csdGhpcykudmFsdWVzKCkpfWdldFJvb3RCeUNvbHVtbihsKXtsZXQgYTtyZXR1cm4gcmQoVzksdGhpcykuaGFzKGwpJiYoYT1yZChndyx0aGlzKS5nZXQocmQoVzksdGhpcykuZ2V0KGwpKSksYX1nZXROb2RlKGwsYSl7Y29uc3QgZD10aGlzLmdldFJvb3RCeUNv''@;'; put 'put ''bHVtbihhKTtpZighZClyZXR1cm47Y29uc3QgaD1hLXJkKFc5LHRoaXMpLmdldChhKTtsZXQgdixmPTA7cmV0dXJuIGQud2Fsa0Rvd24oTT0+e2NvbnN0e2RhdGE6e29yaWdDb2xzcGFuOkksaGVhZGVyTGV2ZWw6R319PU07aWYobD09PUcpe2lmKGg+PWYmJmg8PWYrSS0xKXJldHVybiB2PU0s''@;'; put 'put ''di5kYXRhLmlzUm9vdD1hPT09di5kYXRhLmNvbHVtbkluZGV4LCExO2YrPUl9fSksdn1yZWJ1aWxkVHJlZUluZGV4KCl7bGV0IGw9MDtyZChXOSx0aGlzKS5jbGVhcigpLFluKHJkKGd3LHRoaXMpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKysp''@;'; put 'put ''cmQoVzksdGhpcykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPXJkKG13LHRoaXMpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPXJkKG13LHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSUg7cmQo''@;'; put 'put ''Z3csdGhpcykuc2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9h''@;'; put 'put ''cmd1bWVudHNbM106MTtjb25zdCBmPXJkKG13LHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9MSxZbihmLHY9Pntjb25zdCBNPXsuLi52LGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgSTsxPT09ZD8obC5kYXRhPU0sST1sKTooST1uZXcgSUgoTSksbC5hZGRD''@;'; put 'put ''aGlsZChJKSksZDxyZChtdyx0aGlzKS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKEksYSxkLHYub3JpZ0NvbHNwYW4pLGErPXYub3JpZ0NvbHNwYW59KX1jbGVhcigpe3JkKGd3LHRoaXMpLmNsZWFyKCkscmQoVzksdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gem1lKGMsbCl7''@;'; put 'put ''Yy53YWxrRG93bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gUkgoYyxsKXtsZXR7Y2hpbGRzOmF9''@;'; put 'put ''PWM7aWYoMCE9PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gTEgoYyl7cmV0dXJuIFJIKGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gYWVlKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5p''@;'; put 'put ''c0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKExIKGMpKXJldHVybiBhZWUoYVswXSk7bC5pc0NvbGxhcHNlZD0hMTtjb25zdCBoPWEuc2xpY2UoMSks''@;'; put 'put ''Zj1uZXcgU2V0O2xldCB2PTA7aWYoaC5sZW5ndGg+MClZbihoLE09PntNLnJlcGxhY2VUcmVlV2l0aChNLmRhdGEuY2xvbmVkVHJlZSksTS5kYXRhLmNsb25lZFRyZWU9bnVsbCx2Kz1NLmRhdGEuY29sc3Bhbix6bWUoTSxHPT57Zi5hZGQoRyl9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpNLG9y''@;'; put 'put ''aWdDb2xzcGFuOkksY29sdW1uSW5kZXg6R309bDt2PUktTTtmb3IobGV0IGllPTE7aWU8STtpZSsrKWYuYWRkKEcraWUpfXJldHVybiBjLndhbGtVcChNPT57Y29uc3R7ZGF0YTpJfT1NO0kuY29sc3Bhbis9dixJLmNvbHNwYW4+PUkub3JpZ0NvbHNwYW4/KEkuY29sc3Bhbj1JLm9yaWdDb2xz''@;'; put 'put ''cGFuLEkuaXNDb2xsYXBzZWQ9ITEpOkxIKE0pJiYoSS5pc0NvbGxhcHNlZD1SSChNLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+b2VlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKGYpLGNvbHNwYW5Db21wZW5zYXRpb246dn19ZnVuY3Rpb24gb2Vl''@;'; put 'put ''KGMpe3ZhciBsO2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoTEgo''@;'; put 'put ''YykpcmV0dXJuIG9lZShkWzBdKTthLmlzQ29sbGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2PW5ldyBTZXQ7aWYoZi5sZW5ndGg+MClZbihmLEk9Pnt6bWUoSSxHPT57di5hZGQoRyl9KSxJLmRhdGEuY2xvbmVkVHJlZT1JLmNsb25lVHJlZSgpLEkud2Fsa0Rvd24oRz0+e2xldHtkYXRh''@;'; put 'put ''OmllfT1HO2llLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOkksY29sdW1uSW5kZXg6R309YTtmb3IobGV0IGllPTE7aWU8STtpZSsrKXYuYWRkKEcraWUpfWNvbnN0IE09YS5jb2xzcGFuLShudWxsIT09KGw9UkgoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEp''@;'; put 'put ''O3JldHVybiBjLndhbGtVcChJPT57Y29uc3R7ZGF0YTpHfT1JO0cuY29sc3Bhbi09TSxHLmNvbHNwYW48PTE/KEcuY29sc3Bhbj0xLEcuaXNDb2xsYXBzZWQ9ITApOkxIKEkpJiYoRy5pc0NvbGxhcHNlZD1SSChJLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+''@;'; put 'put ''YWVlKGMpLGFmZmVjdGVkQ29sdW1uczpBcnJheS5mcm9tKHYpLGNvbHNwYW5Db21wZW5zYXRpb246TX19Y29uc3QgVW1lPW5ldyBNYXAoW1siY29sbGFwc2UiLG9lZV0sWyJleHBhbmQiLGFlZV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gYTR0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIo''@;'; put 'put ''bCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihnbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUu''@;'; put 'put ''IE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2Rh''@;'; put 'put ''dGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixm''@;'; put 'put ''dW5jdGlvbiBvNHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBwYXNzZWQg''@;'; put 'put ''bm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhs''@;'; put 'put ''KSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMu''@;'; put 'put ''aW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYmZi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNvbHNwYW4rPTEpLGYuaXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24gT0goYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdD''@;'; put 'put ''b2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFkZXJMZXZlbDpNLGNyb3NzSGlkZGVuQ29sdW1uczpJfT1oLEc9ZnVuY3Rpb24gYzR0KGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxNKTtsZXQgaWU9ITE7Zm9yKGxldCB1ZT12''@;'; put 'put ''O3VlPHYrZjt1ZSsrKWlmKEkuaW5jbHVkZXModWUpfHxpZSlHLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtlbHNle2NvbnN0IEVlPWw0dChoKTtFZS5pc1Jvb3Q9ITAsRy5wdXNoKEVlKSxpZT0hMH19KX0pLGx9ZnVuY3Rpb24gbDR0KGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29s''@;'; put 'put ''dW1uczpsLC4uLmF9PWVlZShjKTtyZXR1cm4gYX1mdW5jdGlvbiBzZWUoYyxsLGEpeyhmdW5jdGlvbiB1NHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp''@;'; put 'put ''fSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG1BKGMsbCxhKXtyZXR1cm4gYy5zZXQoWm1lKGMsbCksYSksYX1mdW5jdGlvbiBxYyhjLGwpe3JldHVybiBjLmdldChabWUoYyxsKSl9ZnVuY3Rpb24gWm1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly''@;'; put 'put ''ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbjQ9bmV3IFdlYWtNYXAsSmQ9bmV3IFdlYWtNYXAsWTk9bmV3IFdlYWtNYXA7Y2xhc3MgZDR0e2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7c2VlKHRoaXMsbjQsbmV3IHFwdCksc2VlKHRoaXMsSmQsbmV3IGk0dChxYyhuNCx0aGlzKSkpLHNlZSh0aGlzLFk5LFtbXV0pfXNldFN0YXRlKGwpe3FjKG40LHRoaXMpLnNldERhdGEobCk7bGV0IGE9ITE7dHJ5e3FjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpfWNhdGNoe3FjKEpkLHRo''@;'; put 'put ''aXMpLmNsZWFyKCkscWMobjQsdGhpcykuY2xlYXIoKSxhPSEwfXJldHVybiBtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtxYyhuNCx0aGlzKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT1icyhs''@;'; put 'put ''LGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6aCwuLi5mfX0pO3FjKG40LHRoaXMpLm1lcmdlV2l0aChhKSxxYyhKZCx0aGlzKS5idWlsZFRyZWUoKSxtQShZOSx0aGlzLE9IKHFjKEpkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBT''@;'; put 'put ''dGF0ZShsKXtxYyhuNCx0aGlzKS5tYXAobCkscWMoSmQsdGhpcykuYnVpbGRUcmVlKCksbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIHF1KHFjKEpkLHRoaXMpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBm''@;'; put 'put ''PWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25zdCBoPXFjKEpkLHRoaXMpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rp''@;'; put 'put ''b24gczR0KGMsbCxhKXtpZighVW1lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gVW1lLmdldChjKShsLGEpfShsLGgsZCksbUEoWTksdGhpcyxPSChxYyhKZCx0aGlzKS5nZXRSb290cygp''@;'; put 'put ''KSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJldHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7''@;'; put 'put ''cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihs''@;'; put 'put ''PXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9cWMoWTksdGhpcylbbF0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVE''@;'; put 'put ''YXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldEhlYWRlclRyZWVOb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0YX06bnVsbH1nZXRIZWFkZXJUcmVlTm9kZShsLGEpe3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291''@;'; put 'put ''bnQoKT9udWxsOnFjKEpkLHRoaXMpLmdldE5vZGUobCxhKXx8bnVsbH1maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2NvbnN0IGQ9YS1sKzE7bGV0IGg9ITEsZj1udWxs''@;'; put 'put ''O2ZvcihsZXQgdj1sO3Y8PWE7disrKXtjb25zdCBNPXFjKEpkLHRoaXMpLmdldFJvb3RCeUNvbHVtbih2KTtpZighTSlicmVhaztoPSEwLE0ud2Fsa0Rvd24oST0+e2NvbnN0e2NvbHVtbkluZGV4OkcsaGVhZGVyTGV2ZWw6aWUsb3JpZ0NvbHNwYW46dWUsaXNIaWRkZW46eWV9PUkuZGF0YTt5''@;'; put 'put ''ZXx8dWU8PWQmJkc+PWwmJkcrdWUtMTw9YSYmKG51bGw9PT1mfHxpZTxmKSYmKGY9aWUpfSxGbWUpfXJldHVybiBoJiZudWxsPT09Zj8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMoZj8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVsbCE9''@;'; put 'put ''PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwfTtpZihoKXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6TX09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQgMCE9''@;'; put 'put ''PXY/djp7aXNSb290OiEwfTtpZihNKWJyZWFrO2YtPTF9cmV0dXJuIGZ9ZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omgsb3JpZ0NvbHNwYW46Zn09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNS''@;'; put 'put ''b290OiEwLG9yaWdDb2xzcGFuOjF9O2lmKGgpcmV0dXJuIGErZi0xO2xldCB2PWErMTtmb3IoO3Y8dGhpcy5nZXRDb2x1bW5zQ291bnQoKTspe3ZhciBNO2NvbnN0e2lzUm9vdDpJfT1udWxsIT09KE09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLHYpKSYmdm9pZCAwIT09TT9NOntpc1Jvb3Q6''@;'; put 'put ''ITB9O2lmKEkpYnJlYWs7dis9MX1yZXR1cm4gdi0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuIHFjKG40LHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHFjKG40LHRoaXMpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7bUEoWTksdGhpcyxbXSkscWMo''@;'; put 'put ''bjQsdGhpcykuY2xlYXIoKSxxYyhKZCx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiB2QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaDR0KGMpe3ZhciBsPWZ1bmN0aW9uIGY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29u''@;'; put 'put ''c3QgZzR0PWNsYXNzIHA0dHtjb25zdHJ1Y3RvcihsLGEpe3ZBKHRoaXMsImhvdCIsdm9pZCAwKSx2QSh0aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSx2QSh0aGlzLCJsYXllcnNDb3VudCIsMCksdkEodGhpcywiY29udGFpbmVyIix2b2lkIDApLHZBKHRoaXMsIndp''@;'; put 'put ''ZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2Fs''@;'; put 'put ''SW5kZXhUb1ZhbHVlIil9c2V0TGF5ZXJzQ291bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9bCx0aGlzfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKTt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIp''@;'; put 'put ''LGwmJnRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobCksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgYT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9y''@;'; put 'put ''QWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxkPWEubGVuZ3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpLHY9dGhpcy5ob3QudG9QaHlz''@;'; put 'put ''aWNhbENvbHVtbihmKTt0aGlzLndpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgodixhW2hdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7''@;'; put 'put ''cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSx2PSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsTT1kLmdldFJlbmRlcmFibGVJbmRleGVz''@;'; put 'put ''TGVuZ3RoKCk7Zm9yKGxldCBJPTA7STx0aGlzLmxheWVyc0NvdW50O0krKyl7Y29uc3QgRz1hLmNyZWF0ZUVsZW1lbnQoInRyIik7Zm9yKGxldCBpZT0wO2llPE07aWUrKyl7bGV0IHVlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChpZSk7bnVsbD09PXVlJiYodWU9aWUpO2NvbnN0''@;'; put 'put ''IHllPWEuY3JlYXRlRWxlbWVudCgidGgiKSxFZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyKEksdWUpO2lmKEVlJiYoIUVlLmlzUGxhY2Vob2xkZXJ8fEVlLmlzSGlkZGVuKSl7bGV0IGplPUVlLmxhYmVsO3YmJihqZSs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0''@;'; put 'put ''dG9uPicpLHo3KHllLGplKSx5ZS5jb2xTcGFuPUVlLmNvbHNwYW4sRy5hcHBlbmRDaGlsZCh5ZSl9fWYuYXBwZW5kQ2hpbGQoRyl9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX07ZnVu''@;'; put 'put ''Y3Rpb24gV21lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2NHQoYyl7dmFyIGw9ZnVuY3Rpb24geTR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB5QShjLGwsYSl7WW1lKGMsbCksbC5zZXQoYyxhKX1mdW5j''@;'; put 'put ''dGlvbiBZbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEdnKGMsbCxhKXtyZXR1cm4gYy5zZXQoWGMoYyxsKSxhKSxhfWZ1bmN0aW9u''@;'; put 'put ''IF9zKGMsbCl7cmV0dXJuIGMuZ2V0KFhjKGMsbCkpfWZ1bmN0aW9uIFhjKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHBy''@;'; put 'put ''ZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBHbWU9Im5lc3RlZEhlYWRlcnMiO3ZhciBEbD1uZXcgV2Vha01hcCxDNj1uZXcgV2Vha01hcCxiQT1uZXcgV2Vha01hcCxQSD1uZXcgV2Vha01hcCxGSD1uZXcgV2Vha01hcCxodT1uZXcgV2Vha1NldDtjbGFzcyBfNHQgZXh0ZW5kcyBGc3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTR0KGMsbCl7WW1lKGMsbCksbC5hZGQoYyl9KHRoaXMsaHUpLHlBKHRoaXMsRGwsbmV3IGQ0dCkseUEodGhpcyxDNixudWxsKSx5QSh0aGlzLGJBLG51bGwpLHlBKHRoaXMsUEgsITEpLHlBKHRoaXMsRkgsbnVsbCks''@;'; put 'put ''V21lKHRoaXMsImdob3N0VGFibGUiLG5ldyBnNHQodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkpLFdtZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdtZX1zdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0dtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmaWwoZ2xgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQg''@;'; put 'put ''YXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1dXWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlhjKGh1LHRoaXMsRjR0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsSDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxNNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''aD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwseDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJh''@;'; put 'put ''eShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxFNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7Zjxk''@;'; put 'put ''O2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxUNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7Zisr''@;'; put 'put ''KWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLEE0dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3Vt''@;'; put 'put ''ZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxrNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCgpPT5YYyhodSx0aGlzLEhIKS5jYWxs''@;'; put 'put ''KHRoaXMpKSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhodSxsLHc0dCkuY2FsbChs''@;'; put 'put ''LC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZD0+WGMoaHUsdGhpcyxJNHQpLmNhbGwodGhpcyxkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJh''@;'; put 'put ''eShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxMNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0w''@;'; put 'put ''O2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1LGwsTzR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7''@;'; put 'put ''ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoaHUsbCxDNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29weSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50''@;'; put 'put ''c1tmXTtyZXR1cm4gWGMoaHUsbCxTNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''WGMoaHUsbCxENHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty''@;'; put 'put ''ZXR1cm4gWGMoaHUsbCxSNHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGh1''@;'; put 'put ''LGwsUDR0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PlhjKGh1LHRoaXMsSEgpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+''@;'; put 'put ''WGMoaHUsdGhpcyxISCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO19zKERsLHRoaXMp''@;'; put 'put ''LnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1fcyhEbCx0aGlzKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZpbChnbGBZb3VyIE5lc3RlZCBI''@;'; put 'put ''ZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO19zKERsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFfcyhDNix0aGlz''@;'; put 'put ''KSYmdGhpcy5lbmFibGVkJiZHZyhDNix0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtj''@;'; put 'put ''b25zdCBNPSEwPT09dj8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7X3MoRGwsdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihNLGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExh''@;'; put 'put ''eWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLF9zKERsLHRoaXMpLmNsZWFyKCksX3MoQzYsdGhpcykudW5zdWJzY3JpYmUoKSxHZyhDNix0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJs''@;'; put 'put ''ZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gX3MoRGwsdGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gX3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBfcyhEbCx0aGlzKS5n''@;'; put 'put ''ZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9w''@;'; put 'put ''T3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBN''@;'; put 'put ''PWQuY2hpbGROb2Rlc1t2XTtpZighTSlicmVhaztjb25zdCBJPWguY2hpbGROb2Rlc1t2XSxHPWY/Zi5jaGlsZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCBpZT0wLHVlPU0uY2hpbGROb2Rlcy5sZW5ndGg7aWU8dWU7aWUrKylNLmNoaWxkTm9kZXNbaWVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3Bh''@;'; put 'put ''biIpLGxvKE0uY2hpbGROb2Rlc1tpZV0sImhpZGRlbkhlYWRlciIpLEkmJkkuY2hpbGROb2Rlc1tpZV0mJihJLmNoaWxkTm9kZXNbaWVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGxvKEkuY2hpbGROb2Rlc1tpZV0sImhpZGRlbkhlYWRlciIpKSxmJiZHJiZHLmNoaWxkTm9kZXNbaWVd''@;'; put 'put ''JiYoRy5jaGlsZE5vZGVzW2llXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxsbyhHLmNoaWxkTm9kZXNbaWVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRD''@;'; put 'put ''b2x1bW5zU3RhcnQiKTtyZXR1cm4oaCxmKT0+e3ZhciB2O2NvbnN0e2NvbHVtbkluZGV4TWFwcGVyOk0sdmlldzpJfT10aGlzLmhvdDtsZXQgRz1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PUcmJihHPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksbG8o''@;'; put 'put ''ZiwiaGlkZGVuSGVhZGVyIiksbG8oZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0e2NvbHNwYW46aWUsaXNIaWRkZW46dWUsaXNQbGFjZWhvbGRlcjp5ZSxoZWFkZXJDbGFzc05hbWVzOkVlfT1udWxsIT09KHY9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxHKSkmJnZvaWQgMCE9''@;'; put 'put ''PXY/djp7bGFiZWw6IiJ9O2lmKHllfHx1ZSlUaShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKGllPjEpe3ZhciBqZSxxZSxydDtjb25zdHt3dE92ZXJsYXlzOnB0fT1JLl93dCxkdD1udWxsPT09KGplPXB0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PWplP3ZvaWQg''@;'; put 'put ''MDpqZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLEp0PW51bGw9PT0ocWU9cHQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09cWU/dm9pZCAwOnFlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0ocnQ9cHQudG9wT3ZlcmxheSl8fHZvaWQgMD09''@;'; put 'put ''PXJ0P3ZvaWQgMDpydC5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpKSYmRzxkJiZUaShmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3QgQ249ZHR8fEp0P01hdGgubWluKGllLGQtaCk6aWU7Q24+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLENuKX1pZih0aGlzLmhvdC52aWV3''@;'; put 'put ''LmFwcGVuZENvbEhlYWRlcihHLGYsZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKSwheWUmJiF1ZSl7Y29uc3QgcHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtwdCYmRWUmJkVlLmxlbmd0aD4wJiYobG8ocHQsdGhpcy5o''@;'; put 'put ''b3QuZ2V0Q29sdW1uTWV0YShHKS5oZWFkZXJDbGFzc05hbWUpLFRpKHB0LEVlKSl9fX1nZXRDb2x1bW5IZWFkZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZv''@;'; put 'put ''aWQgMCE9PWQ/ZDp7fTtyZXR1cm4gZnx8aD8iIjp0aGlzLmhvdC5nZXRDb2xIZWFkZXIobCxhKX1kZXN0cm95KCl7R2coRGwsdGhpcyxudWxsKSxudWxsIT09X3MoQzYsdGhpcykmJihfcyhDNix0aGlzKS51bnN1YnNjcmliZSgpLEdnKEM2LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1f''@;'; put 'put ''Z2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIF9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIEhIKCl7dmFyIGM7Y29uc3QgbD1udWxsPT09KGM9dGhpcy5ob3QpfHx2b2lk''@;'; put 'put ''IDA9PT1jP3ZvaWQgMDpjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDphfT1sO2lmKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApe2NvbnN0IGg9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO2YudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodC5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS5mcm9tLmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLnRvLmNvbD1oLGYuY29tbWl0KCl9fWZ1bmN0aW9uIHc0dChjLGwpe3ZhciBhO2NvbnN0''@;'; put 'put ''IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZClyZXR1cm4gYztjb25zdHtoaWdobGlnaHQ6aH09ZCx7bmF2aWdhYmxlSGVhZGVyczpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLE09''@;'; put 'put ''Zj9oLnJvdzpudWxsPT09KGE9X3MoRkgsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJvdyxJPXY/YzpoLmNvbCxHPU08MCYmST49MDtpZihHZyhGSCx0aGlzLG51bGwpLCFHKXJldHVybiBjO2NvbnN0IGllPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksdWU9dGhp''@;'; put 'put ''cy5ob3QuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLHllPXVlLWllKzEsRWU9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoTSxJKSxqZT1fcyhEbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoTSxJKSxxZT1qZS1FZSsxO2lmKEVlPGllJiZqZT51ZSlyZXR1''@;'; put 'put ''cm4gRWU7aWYodil7bGV0IHJ0PW51bGw7cmV0dXJuIEVlPj1pZSYmamU+dWU/cWU+eWU/KGwudmFsdWU9InN0YXJ0IixydD1FZSk6KGwudmFsdWU9ImVuZCIscnQ9amUpOkVlPGllJiZqZTw9dWUmJihxZT55ZT8obC52YWx1ZT0iZW5kIixydD1qZSk6KGwudmFsdWU9InN0YXJ0IixydD1FZSkp''@;'; put 'put ''LHJ0fXJldHVybiBFZTw9aWU/RWU6amV9ZnVuY3Rpb24gQzR0KGMsbCxhKXtjb25zdCBkPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLGMpO2lmKCFkKXJldHVybiBjO2NvbnN0e2NvbHVtbkN1cnNvcjpoLHNlbGVjdGlvblR5cGU6ZixzZWxlY3Rpb25XaWR0aDp2fT1hLHtp''@;'; put 'put ''c1Jvb3Q6TSxjb2xzcGFuOkl9PV9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYyk7aWYoZj09PW1YKXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT1XM2UmJihJPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIFM0dChjLGwsYSl7bGV0''@;'; put 'put ''e2NvbHVtbkhlYWRlcnNDb3VudDpkfT1hO2lmKDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtjb25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkksZW5kQ29sOkd9PWxbZl0saWU9SS12KzE7aWYodj49MHx8MT09TS1HKzEpYnJlYWs7Zm9yKGxldCB5ZT1NO3llPD1H''@;'; put 'put ''O3llKyspZm9yKGxldCBFZT12O0VlPD1JO0VlKyspe3ZhciBoO2NvbnN0IGplPWllK0VlLHFlPXllLU07MCE9PXFlJiYhMT09PShudWxsPT09KGg9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKEVlLHllKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbamVdW3Fl''@;'; put 'put ''XT0iIil9fX1mdW5jdGlvbiBNNHQoYyxsLGEsZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24geDR0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47R2co''@;'; put 'put ''YkEsdGhpcyxsLmNsb25lKCkpLEdnKFBILHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlzLmhvdCxoPWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxJPSFkLmluSW5TZWxl''@;'; put 'put ''Y3Rpb24obCk7Yy5zaGlmdEtleSYmaD9sLmNvbDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVuZENvcm5lcigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOihVTyhjKXx8SG0oYykmJkl8fGlm''@;'; put 'put ''ZShjKSkmJmYucHVzaCh2LHYrTS0xLGwucm93KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rpb24gRTR0KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRz''@;'; put 'put ''KGwpO2lmKCFoKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEk9TS5nZXRUb3BTdGFydENvcm5lcigpLEc9TS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTppZX09TTtkLmNvbHVtbj0hMCxkLmNl''@;'; put 'put ''bGw9ITA7Y29uc3QgdWU9W10seWU9a3MobC5yb3csLTEvMCwtMSk7bC5jb2w8aWUuY29sP3VlLnB1c2goRy5jb2wsZix5ZSk6dWUucHVzaChsLmNvbD5pZS5jb2w/SS5jb2w6ZixmK3YtMSx5ZSksdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4udWUpfWZ1bmN0aW9uIFQ0dCgp''@;'; put 'put ''e0dnKFBILHRoaXMsITEpfWZ1bmN0aW9uIEE0dCgpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Y309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHwhX3MoUEgsdGhpcyl8fCFjKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VMYXN0KCksYT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wse2NvbHVtbkluZGV4Omgsb3JpZ0NvbHNwYW46Zn09X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKF9zKGJBLHRoaXMpLnJvdyxfcyhiQSx0aGlzKS5jb2wp''@;'; put 'put ''O2lmKGwuc2V0SGlnaGxpZ2h0KF9zKGJBLHRoaXMpKSxmPmwuZ2V0V2lkdGgoKXx8aDxhfHxoK2YtMT5kKXtjb25zdCB2PV9zKERsLHRoaXMpLmZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwoa3MoYSxoLGgrZi0xKSxrcyhkLGgsaCtmLTEpKTtsLmhpZ2hsaWdodC5yb3c9dixsLmhpZ2hs''@;'; put 'put ''aWdodC5jb2w9bC5mcm9tLmNvbH19ZnVuY3Rpb24gazR0KGMpe2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNv''@;'; put 'put ''bD49MCkpcmV0dXJuO2NvbnN0IGg9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9X3MoRGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEpO2MuY29sPW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZUNvbHVtbnNJblJhbmdlKE0sbC5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5j''@;'; put 'put ''b3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBENHQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlz''@;'; put 'put ''Ll9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7R2coRkgsdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRl''@;'; put 'put ''eCtoLm9yaWdDb2xzcGFuLTEpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29sJiYoaCYmKGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIEk0dChjKXtpZihfcyhEbCx0aGlzKS5nZXRMYXll''@;'; put 'put ''cnNDb3VudCgpPjApe2MubGVuZ3RoPTA7Zm9yKGxldCBsPTA7bDxfcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiBSNHQoYyl7Y29uc3QgbD1fcyhEbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xl''@;'; put 'put ''dCBhPWMuc3RhcnRDb2x1bW4sZD0hIWw7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj1fcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChm''@;'; put 'put ''KTtpZihmPj0wJiYoZD0hMSksbTEodikmJnY8Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0YXJ0Q29sdW1uPWQ/X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBMNHQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5n''@;'; put 'put ''ZXRXaWR0aChsKTtyZXR1cm4gYz5hP2M6YX1mdW5jdGlvbiBPNHQoYyxsLGEpe3ZhciBkO2NvbnN0e2xhYmVsOmh9PW51bGwhPT0oZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIFA0dChj''@;'; put 'put ''LGwpe2lmKGM8MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChjLF9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIEY0dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gSDR0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlv''@;'; put 'put ''biBfQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTjR0KGMpe3ZhciBsPWZ1bmN0aW9uIFY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgajR0PWNsYXNzIEI0dHtjb25zdHJ1Y3RvcihsLGEpe19BKHRoaXMsImhv''@;'; put 'put ''dCIsdm9pZCAwKSxfQSh0aGlzLCJkYXRhIixudWxsKSxfQSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksX0EodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksX0EodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9''@;'; put 'put ''KSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10s''@;'; put 'put ''bm9kZUluZm86bmV3IFdlYWtNYXB9LEdhKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxl''@;'; put 'put ''dmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmWW4o''@;'; put 'put ''bC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xl''@;'; put 'put ''dCBNPWw7cmV0dXJuIE18fChNPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxsIT1kJiZ2PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJlluKE0uX19jaGlsZHJlbixJPT57aWYodGhp''@;'; put 'put ''cy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEksZj9udWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEksdixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1v''@;'; put 'put ''Y2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gWG8odGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1u''@;'; put 'put ''dWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxk''@;'; put 'put ''cmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oWW4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMu''@;'; put 'put ''Y291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''bD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3Jl''@;'; put 'put ''dHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChs''@;'; put 'put ''KXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlz''@;'; put 'put ''UGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1h''@;'; put 'put ''O3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1v''@;'; put 'put ''Y2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2Vy''@;'; put 'put ''dEluZGV4ZXModiwxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBNPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE0sMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdp''@;'; put 'put ''bi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLmluc2VydEluZGV4ZXMoTSwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixNLDEpLGY9TX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImlu''@;'; put 'put ''c2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10''@;'; put 'put ''aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhHYShsWzBdLGxbMl0seWU9Pntjb25zdCBFZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coeWUpO2gucHVzaCh0aGlzLmdldERh''@;'; put 'put ''dGFPYmplY3QoRWUpKX0pLEdhKDAsaC5sZW5ndGgtMix5ZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW3llXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0''@;'; put 'put ''aGluUGFyZW50KGQpLEk9dGhpcy5nZXRSb3dQYXJlbnQoZCksRz10aGlzLmdldFJvd1BhcmVudChJKSxpZT10aGlzLmdldFJvd0luZGV4KEcpO2xldCB1ZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsSSxkKSxudWxsIT1NKXtjb25zdCB5ZT1BcnJheS5m''@;'; put 'put ''cm9tKG5ldyBBcnJheShmK3YrMSkua2V5cygpKS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLHllLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEkuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZix2KzEseWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksRyl7dWU9aWUrdGhpcy5jb3VudENoaWxkcmVuKEcpO2NvbnN0IEVlPXRoaXMuZ2V0Q2hpbGQoRyx0aGlzLmNvdW50Q2hpbGRyZW4oRyktMSksamU9dGhpcy5nZXRSb3dJbmRl''@;'; put 'put ''eChFZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsamUrMSx2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksRy5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSB1ZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLHVl''@;'; put 'put ''LTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix1ZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRh''@;'; put 'put ''Y2hDaGlsZCIsSSxkLHRoaXMuZ2V0Um93SW5kZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZpbHRlckRhdGEobCxhLGQpe2NvbnN0IGg9W107WW4oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxZbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5Q''@;'; put 'put ''YXJlbnQoZiksTT10aGlzLmdldFJvd1BhcmVudChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNlKHYsMSk6TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBm''@;'; put 'put ''PW51bGwsdj1sO2gmJmguX19jaGlsZHJlbiYmMD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2PTApOmw8dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGlj''@;'; put 'put ''ZSh2LGEsLi4uZCk6Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2LGEsLi4uZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPWE7ZG97ZD10aGlzLmdldFJvd1BhcmVu''@;'; put 'put ''dChkKSxudWxsIT09ZCYmKGE9ZCl9d2hpbGUobnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5l''@;'; put 'put ''c3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhp''@;'; put 'put ''blBhcmVudChsKSxJPXYuX19jaGlsZHJlbi5zbGljZShNLE0rMSksRz1sPmE7bGV0IGllPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PWllJiYoaWU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09aWUmJihpZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSksaWU/aWUuX19j''@;'; put 'put ''aGlsZHJlbnx8KGllLl9fY2hpbGRyZW49W10pOihpZT10aGlzLmdldERhdGFPYmplY3QoYSksaWUuX19jaGlsZHJlbj1bXSk7Y29uc3QgdWU9Znx8ZHx8aD9pZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLHllPXY9PT1pZTtpZS5fX2NoaWxkcmVu''@;'; put 'put ''LnNwbGljZSh1ZSwwLElbMF0pLHYuX19jaGlsZHJlbi5zcGxpY2UoTSsoRyYmeWU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLHllfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKGllKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xs''@;'; put 'put ''YXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwp''@;'; put 'put ''Omx9fTtmdW5jdGlvbiAkbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHo0dChjKXt2YXIgbD1mdW5jdGlvbiBVNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGxlZT1jbGFzcyBaNHR7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''KXskbWUodGhpcywiaG90Iix2b2lkIDApLCRtZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksdGhpcy5ob3Q9YSx0aGlzLnBsdWdpbj1sfX07Y2xhc3MgJGcgZXh0ZW5kcyBsZWV7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZl''@;'; put 'put ''bHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1''@;'; put 'put ''dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1u''@;'; put 'put ''dWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93TGV2ZWwoZCksZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCksdj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJESVYi''@;'; put 'put ''KVswXSxNPXYucXVlcnlTZWxlY3Rvcigic3Bhbi5yb3dIZWFkZXIiKSxJPXYucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzXj0iaHRfbmVzdGluZyJdJyksRz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFluKEksaWU9PntpZSYmdi5yZW1vdmVDaGlsZChpZSl9KSxUaShhLCRn''@;'; put 'put ''LkNTU19DTEFTU0VTLmluZGljYXRvckNvbnRhaW5lciksaCl7Y29uc3R7cm9vdERvY3VtZW50OmllfT10aGlzLmhvdCx1ZT1NLmNsb25lTm9kZSghMCk7di5pbm5lckhUTUw9IiIsR2EoMCxoLTEsKCk9Pntjb25zdCB5ZT1pZS5jcmVhdGVFbGVtZW50KCJTUEFOIik7VGkoeWUsJGcuQ1NTX0NM''@;'; put 'put ''QVNTRVMuZW1wdHlJbmRpY2F0b3IpLHYuYXBwZW5kQ2hpbGQoeWUpfSksdi5hcHBlbmRDaGlsZCh1ZSl9aWYodGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSl7Y29uc3QgaWU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO0cmJnZvKGllLFtWNygpXSks''@;'; put 'put ''VGkoYSwkZy5DU1NfQ0xBU1NFUy5wYXJlbnQpLHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpPyhUaShpZSxgJHskZy5DU1NfQ0xBU1NFUy5idXR0b259ICR7JGcuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9ufWApLEcmJnZvKGEsW04yKCExKV0pKTooVGkoaWUsYCR7''@;'; put 'put ''JGcuQ1NTX0NMQVNTRVMuYnV0dG9ufSAkeyRnLkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWApLEcmJnZvKGEsW04yKCEwKV0pKSx2LmFwcGVuZENoaWxkKGllKX19dXBkYXRlUm93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDthfHwoYT10aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVsQ291''@;'; put 'put ''bnQpO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5nZXRTdHlsZXNIYW5kbGVyKCk7bGV0IGg9MTE7ZC5pc0NsYXNzaWNUaGVtZSgpfHwoaD0yKmQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1ob3Jpem9udGFsLXBhZGRpbmciKSksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUw''@;'; put 'put ''LGgrMTAqYSsyNSksdGhpcy5ob3QucmVuZGVyKCl9fWNvbnN0IEttZT0kZyxZNHQ9Y2xhc3MgVzR0IGV4dGVuZHMgbGVle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNl''@;'; put 'put ''ZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFu''@;'; put 'put ''ZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksWW4oZC5sYXN0Q29sbGFwc2Vk''@;'; put 'put ''Um93cywoTSxJKT0+e00+PWgmJk08ZiYmKGQubGFzdENvbGxhcHNlZFJvd3NbSV09TSt2KX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57R2EoaCxoK2YtMSx2PT57Y29uc3QgTT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7TT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoTSwxKX0p''@;'; put 'put ''fX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBm''@;'; put 'put ''PW51bGwsdj1udWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJl''@;'; put 'put ''bixJPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoSSkpfSksTT10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5j''@;'; put 'put ''b2xsYXBzZWRSb3dzLnB1c2godiksTX1jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxh''@;'; put 'put ''cmd1bWVudHNbMl07Y29uc3QgaD1bXTtZbihsLGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3Qo''@;'; put 'put ''bCkuX19jaGlsZHJlbix2PT57Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKE0sYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJl''@;'; put 'put ''bix2PT57aWYoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQodikpe2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5leHBhbmRDaGlsZFJvd3MoTSxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9''@;'; put 'put ''IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlz''@;'; put 'put ''TmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIu''@;'; put 'put ''aGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJlbixJPT57Y29uc3QgRz10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEkpO2gucHVzaChHKX0pLE09dGhpcy5leHBhbmRSb3dzKGgsITAsITEpLGQmJnRoaXMudW50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLE19''@;'; put 'put ''ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1lu''@;'; put 'put ''KGwsZj0+e2gucHVzaCguLi50aGlzLmV4cGFuZENoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0pLHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0''@;'; put 'put ''YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkmJmEucHVzaChkKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfXRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93''@;'; put 'put ''c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApfXVudHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQo''@;'; put 'put ''bCl7bGV0IGE9aXNOYU4obCk/bDp0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksZD0hMDtyZXR1cm4gbnVsbD09PWEmJihhPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixo''@;'; put 'put ''PT57Y29uc3QgZj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGgpO2lmKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChmKSlyZXR1cm4gZD0hMSwhMX0pLGR9aXNBbnlQYXJlbnRDb2xsYXBzZWQobCl7bGV0IGE9bDtmb3IoO251bGwhPT1hOyl7YT10''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhKTtjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoZCk+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUobCxhKXtpZihhLmNvbD49MClyZXR1cm47Y29u''@;'; put 'put ''c3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYS5yb3cpO3BvKGwudGFyZ2V0LEttZS5DU1NfQ0xBU1NFUy5idXR0b24pJiYodGhpcy5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT90aGlzLmV4cGFuZENoaWxkcmVuKGQpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihkKSxCMihsKSl9dHJhbnNs''@;'; put 'put ''YXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKX11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KGwpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxl''@;'; put 'put ''bWVudHNTaXplKCl9fTt2YXIgcW1lPW5ldyBXZWFrTWFwO2NvbnN0IHRndD1jbGFzcyBlZ3QgZXh0ZW5kcyBsZWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEs0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTR0KGMpe3ZhciBsPWZ1bmN0aW9uIFg0dChj''@;'; put 'put ''LGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBA''@;'; put 'put ''dG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2''@;'; put 'put ''YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFNYW5hZ2VyIix0aGlzLnBsdWdpbi5kYXRhTWFuYWdlciksZnVuY3Rpb24gRzR0KGMsbCxhKXsoZnVuY3Rpb24gJDR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxxbWUse3Jvd19hYm92ZToobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFd''@;'; put 'put ''LnN0YXJ0LnJvdywiYWJvdmUiKX0scm93X2JlbG93OihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJiZWxvdyIpfX0pfWFwcGVuZE9wdGlvbnMobCl7Y29uc3QgYT1be2tleToiYWRkX2NoaWxkIixuYW1lKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0VHJhbnNsYXRlZFBocmFzZShEcSl9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pLGg9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpO3RoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuYWRkQ2hpbGQoaCl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpLm1heFJvd3N9fSx7a2V5OiJkZXRhY2hfZnJvbV9wYXJlbnQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKElxKX0sY2FsbGJhY2s6KCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmRldGFjaEZyb21QYXJlbnQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkp''@;'; put 'put ''fSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgpfHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rp''@;'; put 'put ''b24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsZD0+e2lmKDA9PT1kKXJldHVybiBZbihhLChoLGYp''@;'; put 'put ''PT57bC5pdGVtcy5zcGxpY2UoZCtmLDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe3JldHVybiBHYSgwLGwuaXRlbXMubGVuZ3RoLTEsYT0+e2NvbnN0IGQ9ZnVuY3Rpb24gSjR0KGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Z2V0KGZ1bmN0aW9uIFE0dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMs''@;'; put 'put ''bCkpfShxbWUsdGhpcylbbC5pdGVtc1thXS5rZXldO251bGwhPWQmJihsLml0ZW1zW2FdLmNhbGxiYWNrPWQpfSksbH19O2Z1bmN0aW9uIE5IKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gcmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly''@;'; put 'put ''ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p''@;'; put 'put ''dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi''@;'; put 'put ''bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpZ3R7Y29uc3RydWN0b3IobCl7TkgodGhpcywicGx1Z2luIix2b2lkIDApLE5IKHRoaXMsImhvdCIsdm9pZCAwKSxOSCh0aGlzLCJkYXRhTWFuYWdlciIsdm9pZCAwKSxOSCh0aGlzLCJjb2xsYXBzaW5nVUkiLHZvaWQgMCksdGhp''@;'; put 'put ''cy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5jb2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmlu''@;'; put 'put ''YWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0IHY9ZD09PXRoaXMuaG90LmNvdW50Um93cygpLE09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRy''@;'; put 'put ''aW1tZWRSb3coZCk7bGV0IEk9ITA7Y29uc3QgRz1sLm1hcChqZT0+e2lmKCFJKXJldHVybiExO2NvbnN0IHFlPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhqZSk7cmV0dXJuIEk9dGhpcy5zaG91bGRBbGxvd01vdmluZyhxZSxNKSxxZX0pLGllPS0xPT09Ry5pbmRleE9m''@;'; put 'put ''KE0pO2lmKCFJfHwhaWUpcmV0dXJuITE7Y29uc3QgdWU9dGhpcy5nZXRCYXNlUGFyZW50KEcpLHllPXRoaXMuZ2V0VGFyZ2V0UGFyZW50KHYsTSksRWU9dWU9PT15ZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKHll''@;'; put 'put ''KSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKEcsTSxFZSksdGhpcy5tb3ZlUm93cyhHLE0seWUpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCksdGhpcy5tb3ZlQ2VsbHNNZXRh''@;'; put 'put ''KEcsTSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxz''@;'; put 'put ''KGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJvcEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IHY9ITE7cmV0dXJuIF9jKGgpJiYoaWwoZ2xgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRh''@;'; put 'put ''YmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUgTmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSx2PSEwKSx2fXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxk''@;'; put 'put ''fXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rh''@;'; put 'put ''c2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChm''@;'; put 'put ''PT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01ldGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRo''@;'; put 'put ''aXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxlbmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MDtpZih0aGlzLm1vdmVkVG9Db2xsYXBzZWQpe2xldCB2''@;'; put 'put ''PW51bGw7dj10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cobFtkLTFdPGE/YS1kOmEpO2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTp2LTEpLEk9dGhpcy5kYXRhTWFuYWdlci5nZXRS''@;'; put 'put ''b3dJbmRleChNKTtoPXRoaXMuZGF0YU1hbmFnZXIudW50cmFuc2xhdGVUcmltbWVkUm93KEkpLGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO3RoaXMuaG90LnNlbGVjdENlbGxzKFtbaCwwLGYsdGhpcy5ob3QuY291bnRDb2xzKCktMV1dLCExKX1pc1Jv''@;'; put 'put ''d09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1mdW5jdGlvbiBYbWUoYyxsLGEpe0ptZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBjZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9ndChjKXt2YXIgbD1mdW5jdGlvbiBzZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxj''@;'; put 'put ''fWZ1bmN0aW9uIFZIKGMsbCl7cmV0dXJuIGMuZ2V0KG0wKGMsbCkpfWZ1bmN0aW9uIEJIKGMsbCxhKXtyZXR1cm4gYy5zZXQobTAoYyxsKSxhKSxhfWZ1bmN0aW9uIG0wKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBqSD0ibmVzdGVkUm93cyIsUW1lPWpIO3ZhciB6SD1uZXcgV2Vha01hcCx2dz1uZXcgV2Vha01hcCxUMD1uZXcgV2Vha1NldDtjbGFzcyB1Z3Qg''@;'; put 'put ''ZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWd0KGMsbCl7Sm1lKGMsbCksbC5hZGQoYyl9KHRoaXMsVDApLGNlZSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCksY2VlKHRoaXMsImhlYWRlcnNVSSIsbnVsbCksY2VlKHRoaXMsImNvbGxhcHNl''@;'; put 'put ''ZFJvd3NNYXAiLG51bGwpLFhtZSh0aGlzLHpILCExKSxYbWUodGhpcyx2dywhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGpIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''akhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgcUUpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IGo0dCh0aGlzLHRoaXMuaG90KSx0''@;'; put 'put ''aGlzLmNvbGxhcHNpbmdVST1uZXcgWTR0KHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBLbWUodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyB0Z3QodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgaWd0KHRoaXMpLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLE1ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVy''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHhndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g''@;'; put 'put ''bTAoVDAsbCxmZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBt''@;'; put 'put ''MChUMCxsLHBndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxnZ3QpLmNh''@;'; put 'put ''bGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLGhndCkuY2FsbChsLC4uLmQp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwseWd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLHZndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxiZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoVDAsbCxfZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsd2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKFQwLGwsQ2d0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChUMCxsLG1ndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtyZXR1cm4gbTAoVDAsbCxTZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAo''@;'; put 'put ''VDAsbCxkZ3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGE9Pm0wKFQwLHRoaXMsZTZlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsYT0+bTAoVDAsdGhpcyxlNmUpLmNhbGwodGhpcyxhKSksdGhpcy5yZWdpc3Rl''@;'; put 'put ''clNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4o''@;'; put 'put ''KXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90Lmdl''@;'; put 'put ''dFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5jb2xsYXBzaW5nVUkudHJhbnNsYXRlVHJp''@;'; put 'put ''bW1lZFJvdyhsLnJvdyk7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGEpP3RoaXMuY29sbGFwc2luZ1VJLmV4cGFuZENoaWxkcmVuKGEpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlQ2hpbGRyZW4oYSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7''@;'; put 'put ''Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xl''@;'; put 'put ''KCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLmNvbCYmZC5yb3c+PTB9LGdyb3VwOlFtZSxyZWxhdGl2ZVRvR3JvdXA6V20scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCku''@;'; put 'put ''Z2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoUW1lKX1kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpe0JIKHZ3LHRoaXMsITApfWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtCSCh2dyx0aGlzLCExKX1vbk1vZGlmeVJvd0RhdGEobCl7aWYoIVZIKHZ3LHRoaXMpKXJl''@;'; put 'put ''dHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighVkgodncsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuY291bnRBbGxSb3dzKCl9b25CZWZvcmVEYXRhU3BsaWNlKGwsYSxkKXtyZXR1cm4hKCFWSCh2dyx0aGlzKSYm''@;'; put 'put ''IXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEobCxhLGQpLDEpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBkZ3QoYyxsLGEsZCl7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZv''@;'; put 'put ''cmVSb3dNb3ZlKGMsbCxhLGQpfWZ1bmN0aW9uIGhndChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUoYyxsLGEpfWZ1bmN0aW9uIGZndChjLGwsYSl7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJ''@;'; put 'put ''LmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goYVswXSxsKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhWzBdLG51bGwsLTEqbCksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGMsbCxhKSxCSCh6SCx0aGlzLCEwKSx0aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldERhdGEoKS5zbGljZSgpfWZ1bmN0aW9uIHBndChjKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMoYyl9ZnVuY3Rpb24gZ2d0KGMsbCl7dGhpcy5oZWFkZXJzVUkuYXBwZW5kTGV2ZWxJbmRpY2F0b3JzKGMsbCl9ZnVuY3Rpb24gbWd0KGMpe3JldHVybiBN''@;'; put 'put ''YXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlLGMpfWZ1bmN0aW9uIHZndChjLGwsYSxkKXtkIT09dGhpcy5wbHVnaW5OYW1lJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57QkgoekgsdGhpcywhMSksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVy''@;'; put 'put ''V2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSl9ZnVuY3Rpb24geWd0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oYS5yZWR1Y2UoKGgsZik9PntpZih0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGYpKXtjb25zdCB2PXRoaXMuZGF0''@;'; put 'put ''YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChmKS5fX2NoaWxkcmVuO3JldHVybiBoLmFkZChmKSxBcnJheS5pc0FycmF5KHYpJiZ2LmZvckVhY2goTT0+aC5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKSkpLGh9cmV0dXJuIGguYWRkKGYpfSxuZXcgU2V0KSk7YS5sZW5ndGg9MCxh''@;'; put 'put ''LnB1c2goLi4uZCl9ZnVuY3Rpb24gYmd0KCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9ZnVuY3Rpb24gX2d0KGMsbCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRl''@;'; put 'put ''eChsKSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHdndCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIENn''@;'; put 'put ''dChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24g''@;'; put 'put ''U2d0KCl7dGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiBNZ3QoKXt0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHhndChjLGwpe1ZIKHpILHRoaXMpJiYobC5za2lwUmVuZGVyPSEwKX1mdW5jdGlvbiBlNmUoYyl7aWYoIVQzZShj''@;'; put 'put ''KSlyZXR1cm4gTiQoIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqSF09ITEsdm9pZCB0aGlz''@;'; put 'put ''LmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEoYyksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiB1ZWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVndChjKXt2YXIgbD1mdW5jdGlvbiBUZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGtndD1jbGFzcyBBZ3R7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdzt1ZWUodGhpcywicm9vdFdpbmRvdyIsdm9p''@;'; put 'put ''ZCAwKSx1ZWUodGhpcywicHJlZml4Iix2b2lkIDApLHVlZSh0aGlzLCJzYXZlZEtleXMiLFtdKSx0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0''@;'; put 'put ''aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFn''@;'; put 'put ''ZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWApfXJlc2V0QWxs''@;'; put 'put ''KCl7WW4odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2NvbnN0IGw9dGhpcy5yb290''@;'; put 'put ''V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlzLnJvb3RXaW5kb3cubG9j''@;'; put 'put ''YWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fTtTYS5nZXRTaW5nbGV0''@;'; put 'put ''b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlU2F2ZSIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVJlc2V0Iik7Y29uc3QgdDZlPSJwZXJzaXN0ZW50U3RhdGUi''@;'; put 'put ''O2NsYXNzIE9ndCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBEZ3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElndChjKXt2YXIgbD1mdW5jdGlvbiBSZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzdG9yYWdlIix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB0NmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdDZlXX1lbmFi''@;'; put 'put ''bGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IGtndCh0aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUo''@;'; put 'put ''bCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''e3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVl''@;'; put 'put ''KGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3RvcmFnZS5zYXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwpe3R5cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZGVlKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiBIZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gTmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBuNmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhlZT0ic2VhcmNoIixqZ3Q9ZnVuY3Rpb24oYyxsLGEsZCxoKXtjLmdldENlbGxNZXRhKGwsYSkuaXNT''@;'; put 'put ''ZWFyY2hSZXN1bHQ9aH0semd0PWZ1bmN0aW9uKGMsbCxhKXtyZXR1cm4hKF9jKGMpfHxudWxsPT09Y3x8IWMudG9Mb2NhbGVMb3dlckNhc2V8fDA9PT1jLmxlbmd0aHx8X2MobCl8fG51bGw9PT1sKSYmLTEhPT1sLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpLmluZGV4''@;'; put 'put ''T2YoYy50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkpfTt2YXIgZmVlPW5ldyBXZWFrU2V0O2NsYXNzIFVndCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBQZ3QoYyxsKXsoZnVuY3Rpb24gRmd0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZmVlKSxkZWUodGhpcywiY2FsbGJhY2siLGpndCksZGVlKHRoaXMsInF1ZXJ5TWV0aG9kIix6Z3QpLGRlZSh0''@;'; put 'put ''aGlzLCJzZWFyY2hSZXN1bHRDbGFzcyIsImh0U2VhcmNoUmVzdWx0Iil9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGhlZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbaGVlXX1l''@;'; put 'put ''bmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hlZV07dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhhKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuNmUoZmVlLGwscjZlKS5jYWxsKGwsLi4uaCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztjb25zdCBhPWZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIG42ZShmZWUsbCxyNmUpLmNhbGwobCwuLi5oKX07dGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpLHRoaXMuaG90LmFkZEhvb2tPbmNl''@;'; put 'put ''KCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpfSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9''@;'; put 'put ''cXVlcnkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0Q2FsbGJhY2soKSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmdldFF1ZXJ5TWV0aG9k''@;'; put 'put ''KCk7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJvd3MoKSxmPXRoaXMuaG90LmNvdW50Q29scygpLHY9W10sTT10aGlzLmhvdDtyZXR1cm4gR2EoMCxoLTEsST0+e0dhKDAsZi0xLEc9Pntjb25zdCBpZT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKEksRyksdWU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEo''@;'; put 'put ''SSxHKSx5ZT11ZS5zZWFyY2guY2FsbGJhY2t8fGEsamU9KHVlLnNlYXJjaC5xdWVyeU1ldGhvZHx8ZCkobCxpZSx1ZSk7amUmJnYucHVzaCh7cm93OkksY29sOkcsZGF0YTppZX0pLHllJiZ5ZShNLEksRyxpZSxqZSl9KX0pLHZ9Z2V0Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja31z''@;'; put 'put ''ZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Z2V0UXVlcnlNZXRob2QoKXtyZXR1cm4gdGhpcy5xdWVyeU1ldGhvZH1zZXRRdWVyeU1ldGhvZChsKXt0aGlzLnF1ZXJ5TWV0aG9kPWx9Z2V0U2VhcmNoUmVzdWx0Q2xhc3MoKXtyZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzc31zZXRT''@;'; put 'put ''ZWFyY2hSZXN1bHRDbGFzcyhsKXt0aGlzLnNlYXJjaFJlc3VsdENsYXNzPWx9dXBkYXRlUGx1Z2luU2V0dGluZ3MobCl7cW8obCkmJihsLnNlYXJjaFJlc3VsdENsYXNzJiZ0aGlzLnNldFNlYXJjaFJlc3VsdENsYXNzKGwuc2VhcmNoUmVzdWx0Q2xhc3MpLGwucXVlcnlNZXRob2QmJnRoaXMu''@;'; put 'put ''c2V0UXVlcnlNZXRob2QobC5xdWVyeU1ldGhvZCksbC5jYWxsYmFjayYmdGhpcy5zZXRDYWxsYmFjayhsLmNhbGxiYWNrKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcjZlKGMsbCxhLGQsaCxmKXtjb25zdCB2PWYuY2xhc3NOYW1lfHxbXTtsZXQgTT1bXTsic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHY/TT12LnNwbGl0KCIgIik6TS5wdXNoKC4uLnYpLHRoaXMuaXNFbmFibGVkKCkmJmYuaXNTZWFyY2hSZXN1bHQ/TS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8TS5wdXNoKGAke3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9YCk6TS5pbmNsdWRlcyh0aGlzLnNl''@;'; put 'put ''YXJjaFJlc3VsdENsYXNzKSYmTS5zcGxpY2UoTS5pbmRleE9mKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpLDEpLGYuY2xhc3NOYW1lPU0uam9pbigiICIpfWZ1bmN0aW9uIFVIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gV2d0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpNmV7Y29uc3RydWN0b3IobCl7VUgodGhpcywidmlld3BvcnRXaWR0aCIsdm9pZCAwKSxVSCh0aGlzLCJvdmVyd3JpdGVDb2x1bW5XaWR0aEZuIix2b2lkIDApLFVIKHRoaXMsImJhc2VXaWR0aHMi''@;'; put 'put ''LG5ldyBNYXApLFVIKHRoaXMsInN0cmV0Y2hlZFdpZHRocyIsbmV3IE1hcCksdGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuPWx9cHJlcGFyZShsKXtsZXR7dmlld3BvcnRXaWR0aDphfT1sO3RoaXMudmlld3BvcnRXaWR0aD1hLHRoaXMuYmFzZVdpZHRocy5jbGVhcigpLHRoaXMuc3RyZXRj''@;'; put 'put ''aGVkV2lkdGhzLmNsZWFyKCl9c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSl7dGhpcy5iYXNlV2lkdGhzLnNldChsLGEpfWNhbGN1bGF0ZSgpe31nZXRXaWR0aHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnN0cmV0Y2hlZFdpZHRocyl9fWNsYXNzIFlndCBleHRlbmRzIGk2ZXtjYWxjdWxhdGUo''@;'; put 'put ''KXtjb25zdCBsPUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKHVlLHllKT0+e2xldFssRWVdPXllO3JldHVybiB1ZStFZX0sMCk7aWYodGhpcy52aWV3cG9ydFdpZHRoLWw8MClyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IGQ9dGhpcy52''@;'; put 'put ''aWV3cG9ydFdpZHRoL2wsaD1bXSxmPVtdO2xldCB2PXRoaXMudmlld3BvcnRXaWR0aCxNPTA7aWYodGhpcy5iYXNlV2lkdGhzLmZvckVhY2goKHVlLHllKT0+e2NvbnN0IEVlPU1hdGgucm91bmQodWUqZCksamU9dGhpcy5vdmVyd3JpdGVDb2x1bW5XaWR0aEZuKEVlLHllKTtFZT09PWplJiZF''@;'; put 'put ''ZT49X18/KGgucHVzaChbeWUsamVdKSxNKz1qZSk6RWUhPT1qZSYmKGgucHVzaChbeWUsamVdKSxmLnB1c2goeWUpLHYtPWplKX0pLHY8PV9fKXJldHVybiB2b2lkIHRoaXMuc3RyZXRjaGVkV2lkdGhzLmNsZWFyKCk7Y29uc3QgST12L007bGV0IEc9LTEsaWU9MDtoLmZvckVhY2goKHVlLHll''@;'; put 'put ''KT0+e2xldFtFZSxqZV09dWUscWU9amU7Zi5pbmNsdWRlcyhFZSl8fChxZT1NYXRoLnJvdW5kKGplKkkpKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoRWUscWUpLEc9RWUseWU8aC5sZW5ndGgtMSYmKGllKz1xZSl9KSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5zaXplPjEmJnRoaXMuc3RyZXRj''@;'; put 'put ''aGVkV2lkdGhzLnNldChHLE1hdGgucm91bmQodGhpcy52aWV3cG9ydFdpZHRoLWllKSl9fWZ1bmN0aW9uIGE2ZShjLGwsYSl7KGZ1bmN0aW9uIEdndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcGVlKGMsbCl7cmV0dXJuIGMuZ2V0KG82ZShjLGwpKX1mdW5jdGlvbiBaSChjLGwsYSl7cmV0dXJuIGMuc2V0KG82ZShjLGwpLGEpLGF9ZnVuY3Rpb24gbzZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgV0g9bmV3IFdlYWtNYXAsd0E9bmV3IFdlYWtNYXA7Y2xhc3MgJGd0''@;'; put 'put ''IGV4dGVuZHMgaTZle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxhNmUodGhpcyxXSCwwKSxhNmUodGhpcyx3QSwtMSl9cHJlcGFyZShsKXtzdXBlci5wcmVwYXJlKGwpLFpIKFdILHRoaXMsMCksWkgod0EsdGhpcywtMSl9c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSl7c3VwZXIu''@;'; put 'put ''c2V0Q29sdW1uQmFzZVdpZHRoKGwsYSksWkgod0EsdGhpcyxsKSxaSChXSCx0aGlzLGEpfWNhbGN1bGF0ZSgpe2lmKC0xPT09cGVlKHdBLHRoaXMpKXJldHVybjtjb25zdCBsPUFycmF5LmZyb20odGhpcy5iYXNlV2lkdGhzKS5yZWR1Y2UoKGQsaCk9PntsZXRbLGZdPWg7cmV0dXJuIGQrZn0s''@;'; put 'put ''MCksYT1NYXRoLm1heCh0aGlzLnZpZXdwb3J0V2lkdGgtbCtwZWUoV0gsdGhpcyksMCk7dGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KHBlZSh3QSx0aGlzKSxhKX19ZnVuY3Rpb24gWUgoYyxsLGEpe3M2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gczZlKGMsbCl7aWYobC5oYXMoYykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBmdShjLGwpe3JldHVybiBjLmdldCh5dyhjLGwpKX1mdW5jdGlvbiBnZWUoYyxsLGEpe3JldHVybiBjLnNldCh5dyhjLGwpLGEp''@;'; put 'put ''LGF9ZnVuY3Rpb24geXcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBN''@;'; put 'put ''MT1uZXcgV2Vha01hcCxidz1uZXcgV2Vha01hcCxtZWU9bmV3IFdlYWtNYXAsR0g9bmV3IFdlYWtNYXAsQ0E9bmV3IFdlYWtTZXQ7Y2xhc3MgWGd0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBLZ3QoYyxsKXtzNmUoYyxsKSxsLmFkZChjKX0pKHRoaXMsQ0EpLFlIKHRoaXMsTTEsdm9pZCAw''@;'; put 'put ''KSxZSCh0aGlzLGJ3LHZvaWQgMCksWUgodGhpcyxtZWUsbmV3IE1hcChbWyJhbGwiLG5ldyBZZ3QoeXcoQ0EsdGhpcyxsNmUpLmJpbmQodGhpcykpXSxbImxhc3QiLG5ldyAkZ3QoeXcoQ0EsdGhpcyxsNmUpLmJpbmQodGhpcykpXV0pKSxZSCh0aGlzLEdILCJub25lIiksZ2VlKE0xLHRoaXMs''@;'; put 'put ''bCksZ2VlKGJ3LHRoaXMsZnUoTTEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgic3RyZXRjaENvbHVtbnMiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpKX11c2VTdHJhdGVneShsKXtnZWUoR0gsdGhpcyxmdShtZWUsdGhpcykuaGFzKGwpP2w6Im5v''@;'; put 'put ''bmUiKX1yZWZyZXNoU3RyZXRjaGluZygpeyJub25lIiE9PWZ1KEdILHRoaXMpP2Z1KE0xLHRoaXMpLmJhdGNoRXhlY3V0aW9uKCgpPT57ZnUoYncsdGhpcykuY2xlYXIoKTtjb25zdCBsPWZ1KG1lZSx0aGlzKS5nZXQoZnUoR0gsdGhpcykpO2xldCBkPWZ1KE0xLHRoaXMpLnZpZXcuZ2V0Vmll''@;'; put 'put ''d3BvcnRXaWR0aCgpO3l3KENBLHRoaXMsSmd0KS5jYWxsKHRoaXMpJiYoZC09ZjAoZnUoTTEsdGhpcykucm9vdERvY3VtZW50KSksbC5wcmVwYXJlKHt2aWV3cG9ydFdpZHRoOmR9KTtmb3IobGV0IGg9MDtoPGZ1KE0xLHRoaXMpLmNvdW50Q29scygpO2grKylmdShNMSx0aGlzKS5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5pc0hpZGRlbihmdShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGgpKXx8bC5zZXRDb2x1bW5CYXNlV2lkdGgoaCx5dyhDQSx0aGlzLFFndCkuY2FsbCh0aGlzLGgpKTtsLmNhbGN1bGF0ZSgpLGwuZ2V0V2lkdGhzKCkuZm9yRWFjaChoPT57bGV0W2Ysdl09aDtmdShidyx0''@;'; put 'put ''aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZnUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihmKSx2KX0pfSwhMCk6ZnUoYncsdGhpcykuY2xlYXIoKX1nZXRTdHJldGNoZWRXaWR0aChsKXtyZXR1cm4gZnUoYncsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGZ1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW4obCkpfX1mdW5jdGlvbiBKZ3QoKXtjb25zdHt2aWV3OmN9PWZ1KE0xLHRoaXMpO2lmKGMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpcmV0dXJuITE7Y29uc3QgbD1jLmdldFZpZXdwb3J0SGVpZ2h0KCksYT1mdShNMSx0aGlzKS5jb3VudFJvd3MoKSxkPWMuZ2V0U3R5bGVz''@;'; put 'put ''SGFuZGxlcigpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD0wLGY9ITE7Zm9yKGxldCBNPTA7TTxhO00rKyl7dmFyIHY7aWYoaCs9KG51bGwhPT0odj1mdShNMSx0aGlzKS5nZXRSb3dIZWlnaHQoTSkpJiZ2b2lkIDAhPT12P3Y6ZCkrKDA9PT1NPzE6MCksaD5sKXtmPSEwO2JyZWFrfX1y''@;'; put 'put ''ZXR1cm4gZn1mdW5jdGlvbiBRZ3QoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1mdShNMSx0aGlzKS5nZXRDb2xXaWR0aChjLCJTdHJldGNoQ29sdW1ucyIpKSYmdm9pZCAwIT09bD9sOl9ffWZ1bmN0aW9uIGw2ZShjLGwpe3JldHVybiBmdShNMSx0aGlzKS5ydW5Ib29rcygiYmVmb3JlU3Ry''@;'; put 'put ''ZXRjaGluZ0NvbHVtbldpZHRoIixjLGwpfWZ1bmN0aW9uIHZlZShjLGwsYSl7YzZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBjNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHllZShjLGwsYSl7cmV0dXJuIGMuc2V0KCRIKGMsbCksYSksYX1mdW5jdGlvbiBLZyhjLGwpe3JldHVybiBjLmdldCgkSChjLGwpKX1mdW5jdGlvbiAkSChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIF93PW5ldyBXZWFrTWFwLEtIPW5ldyBXZWFrTWFwLFNBPW5ldyBXZWFrTWFwLGJlZT1uZXcgV2Vha1NldDtjbGFzcyBy''@;'; put 'put ''NXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZTV0KGMsbCl7YzZlKGMsbCksbC5hZGQoYyl9KHRoaXMsYmVlKSx2ZWUodGhpcyxfdyxuZXcgWGd0KHRoaXMuaG90KSksdmVlKHRoaXMsS0gsbnVsbCksdmVlKHRoaXMsU0EsbmV3IFJlc2l6''@;'; put 'put ''ZU9ic2VydmVyKGw9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgYTtudWxsIT09KGE9dGhpcy5ob3QpJiZ2b2lkIDAhPT1hJiZhLnZpZXcuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmbC5mb3JFYWNoKGQ9PntsZXR7Y29udGVudFJlY3Q6aH09ZDtudWxsIT09''@;'; put 'put ''S2coS0gsdGhpcykmJktnKEtILHRoaXMpIT09aC53aWR0aCYmKHRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSkseWVlKEtILHRoaXMsaC53aWR0aCl9KX0pfSkpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJzdHJl''@;'; put 'put ''dGNoQ29sdW1ucyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTU1fXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuWyJhbGwiLCJsYXN0Il0uaW5jbHVkZXModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCl9ZW5h''@;'; put 'put ''YmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChLZyhfdyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxLZyhTQSx0aGlzKS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gJEgoYmVlLGwsYTV0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiAkSChiZWUsbCxpNXQpLmNhbGwobCwuLi5kKX0sMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtLZyhfdyx0aGlzKS51c2VTdHJhdGVn''@;'; put 'put ''eSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLEtnKFNBLHRoaXMpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIEtn''@;'; put 'put ''KF93LHRoaXMpLmdldFN0cmV0Y2hlZFdpZHRoKGwpfWRlc3Ryb3koKXtLZyhTQSx0aGlzKS5kaXNjb25uZWN0KCkseWVlKFNBLHRoaXMsbnVsbCkseWVlKF93LHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpNXQoYyxsLGEpe2lmKGE9PT10aGlzLnBsdWdpbk5hbWUpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/ZDpjfWZ1bmN0aW9uIGE1dChjKXtjJiZLZyhfdyx0aGlzKS5yZWZyZXNoU3RyZXRjaGluZygpfWZ1bmN0aW9uIHFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsNXQoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gYzV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBfZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBYSD1uZXcgV2Vha1NldDtjbGFzcyBoNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbzV0KGMsbCl7KGZ1bmN0''@;'; put 'put ''aW9uIHM1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFhIKSxxSCh0aGlzLCJzY3JvbGxiYXJzIixbXSkscUgo''@;'; put 'put ''dGhpcywiY2xvbmVzIixbXSkscUgodGhpcywibG9ja2VkQ29sbGVjdGlvbiIsITEpLHFIKHRoaXMsImZyZWV6ZU92ZXJsYXlzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3Rh''@;'; put 'put ''dGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gUiQoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9Pl9lZShYSCx0aGlzLGY1dCkuY2FsbCh0aGlzKSksdGhpcy5yZWdpc3RlckV2''@;'; put 'put ''ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3Jl''@;'; put 'put ''VG91Y2hTY3JvbGwiLCgpPT5fZWUoWEgsdGhpcyxwNXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsKCk9Pl9lZShYSCx0aGlzLGc1dCkuY2FsbCh0aGlzKSl9fWZ1bmN0aW9uIGY1dCgpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29u''@;'; put 'put ''c3R7dG9wT3ZlcmxheTpjLGJvdHRvbU92ZXJsYXk6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6ZCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rp''@;'; put 'put ''b249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGMpLGwuY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGwpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGEpLGQmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGQpLGgmJmguY2xvbmUmJnRoaXMuc2Nyb2xsYmFy''@;'; put 'put ''cy5wdXNoKGgpLHRoaXMuY2xvbmVzPVtdLGMubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSks''@;'; put 'put ''YS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQmJnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZoLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGguY2xvbmUud3RU''@;'; put 'put ''YWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9ZnVuY3Rpb24gcDV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxZbih0aGlzLmNsb25lcyxjPT57VGkoYywiaGlkZS10d2VlbiIpfSl9ZnVuY3Rpb24gZzV0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxZbih0aGlzLmNsb25lcyxjPT57bG8oYywi''@;'; put 'put ''aGlkZS10d2VlbiIpLFRpKGMsInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntZbih0aGlzLmNsb25lcyxjPT57bG8oYywic2hvdy10d2VlbiIpfSl9LDQwMCksWW4odGhpcy5zY3JvbGxiYXJzLGM9PntjLnJlZnJlc2goKSxjLnJlc2V0Rml4ZWRQb3NpdGlv''@;'; put 'put ''bigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfWNvbnN0IEpIPSJ0cmltUm93cyI7dmFyIHU2ZT1uZXcgV2Vha1NldDtjbGFzcyBTNXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbTV0''@;'; put 'put ''KGMsbCl7KGZ1bmN0aW9uIHY1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHU2ZSksZnVuY3Rpb24geTV0KGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiNXQoYyl7dmFyIGw9ZnVuY3Rpb24gXzV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidHJpbW1lZFJvd3NNYXAiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3Jl''@;'; put 'put ''dHVybiBKSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0pIXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFw''@;'; put 'put ''cGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IHFFKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmZ1bmN0aW9uIHc1dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s''@;'; put 'put ''OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KHU2ZSx0aGlzLE01dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3Mo''@;'; put 'put ''KVtKSF07QXJyYXkuaXNBcnJheShsKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLmNsZWFyKCksWW4obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRUcmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3MobCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVj''@;'; put 'put ''dXRpb24oKCk9PntZbihsLHY9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleCh2LCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVHJpbVJvdyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy50cmltUm93cyhhKX11bnRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj10aGlzLnRyaW1tZWRSb3dz''@;'; put 'put ''TWFwLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihZbihsLEk9PntmW0ldPSExfSksaD1xdShmLChJLEcsaWUpPT4oRyYmSS5wdXNoKGllKSxJKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJnYpJiYoZCYmdiYmdGhp''@;'; put 'put ''cy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW50cmltUm93IixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFb''@;'; put 'put ''ZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBNNXQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbSkhdO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkoYykmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4oYyxsPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgobCwhMCl9KX0sITApfWNsYXNzIHRme2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB4NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u''@;'; put 'put ''IEU1dChjKXt2YXIgbD1mdW5jdGlvbiBUNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1''@;'; put 'put ''cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywiYWN0aW9uVHlwZSIsIiIpLHRoaXMuYWN0aW9uVHlwZT1sfXVuZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1l''@;'; put 'put ''bnRlZCIpfXJlZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBRSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQTV0KGMpe3ZhciBsPWZ1bmN0aW9uIGs1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9Y2xhc3Mgd2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e3N0YXRlQmVmb3JlOmEscmFuZ2U6ZCx0eXBlOmgsYWxpZ25tZW50OmZ9PWw7c3VwZXIoImNlbGxfYWxpZ25tZW50IiksUUgodGhpcywic3RhdGVCZWZvcmUiLHZvaWQgMCksUUgodGhpcywicmFuZ2UiLHZv''@;'; put 'put ''aWQgMCksUUgodGhpcywidHlwZSIsdm9pZCAwKSxRSCh0aGlzLCJhbGlnbm1lbnQiLHZvaWQgMCksdGhpcy5zdGF0ZUJlZm9yZT1hLHRoaXMucmFuZ2U9ZCx0aGlzLnR5cGU9aCx0aGlzLmFsaWdubWVudD1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJi''@;'; put 'put ''ZWZvcmVDZWxsQWxpZ25tZW50IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pm5ldyB3ZWUoe3N0YXRlQmVmb3JlOmQscmFuZ2U6aCx0eXBlOmYsYWxpZ25tZW50OnZ9KSl9KX11bmRvKGwsYSl7WW4odGhpcy5yYW5nZSxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiZsLnNldENlbGxN''@;'; put 'put ''ZXRhKGgsZiwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2hdW2ZdfHwiIGh0TGVmdCIpfSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9cmVkbyhsLGEpe0ptKHRoaXMucmFuZ2UsdGhpcy50eXBlLHRoaXMuYWxpZ25tZW50LChkLGgpPT5sLmdl''@;'; put 'put ''dENlbGxNZXRhKGQsaCksKGQsaCxmLHYpPT5sLnNldENlbGxNZXRhKGQsaCxmLHYpKSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9fWZ1bmN0aW9uIGQ2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEk1dChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQ2VlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2NvbHVtbnM6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoImNvbF9tb3ZlIiksZDZlKHRoaXMsImNvbHVtbnMiLHZvaWQg''@;'; put 'put ''MCksZDZlKHRoaXMsImZpbmFsQ29sdW1uSW5kZXgiLHZvaWQgMCksdGhpcy5jb2x1bW5zPWEuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1uSW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCk9PnshMSE9PWQm''@;'; put 'put ''JmEuZG9uZSgoKT0+bmV3IENlZSh7Y29sdW1uczpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLmNvbHVtbnMsdGhpcy5maW5hbENvbHVt''@;'; put 'put ''bkluZGV4LGwuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JFYWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlQ29sdW1uKE0sdil9KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5z''@;'; put 'put ''KHRoaXMuY29sdW1uc1swXSx0aGlzLmNvbHVtbnNbMF0rdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlQ29sdW1ucyh0aGlzLmNvbHVt''@;'; put 'put ''bnMuc2xpY2UoKSx0aGlzLmZpbmFsQ29sdW1uSW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdENvbHVtbnModGhpcy5maW5hbENvbHVtbkluZGV4LHRoaXMuZmluYWxDb2x1bW5JbmRleCt0aGlzLmNvbHVtbnMubGVuZ3RoLTEpfX1mdW5jdGlvbiBoNmUoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIFI1dChjKXt2YXIgbD1mdW5jdGlvbiBMNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjdXJyZW50U29ydFN0YXRlOmEs''@;'; put 'put ''bmV3U29ydFN0YXRlOmR9PWw7c3VwZXIoImNvbF9zb3J0IiksaDZlKHRoaXMsInByZXZpb3VzU29ydFN0YXRlIix2b2lkIDApLGg2ZSh0aGlzLCJuZXh0U29ydFN0YXRlIix2b2lkIDApLHRoaXMucHJldmlvdXNTb3J0U3RhdGU9YSx0aGlzLm5leHRTb3J0U3RhdGU9ZH1zdGF0aWMgc3RhcnRS''@;'; put 'put ''ZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uU29ydCIsKGQsaCxmKT0+e2YmJmEuZG9uZSgoKT0+bmV3IFNlZSh7Y3VycmVudFNvcnRTdGF0ZTpkLG5ld1NvcnRTdGF0ZTpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRp''@;'; put 'put ''bmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxmPWguaXNFbmFibGVkKCk/aDpkO3RoaXMucHJldmlvdXNTb3J0U3RhdGUubGVuZ3RoP2Yuc29ydCh0aGlzLnByZXZpb3VzU29ydFN0YXRlKTpmLmNsZWFyU29ydCgpLGEoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBs''@;'; put 'put ''dWdpbigiY29sdW1uU29ydGluZyIpLGg9bC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpOyhoLmlzRW5hYmxlZCgpP2g6ZCkuc29ydCh0aGlzLm5leHRTb3J0U3RhdGUpLGEoKX19ZnVuY3Rpb24gZjZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBPNXQoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gUDV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBNZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxhbW91bnQ6ZH09bDtzdXBlcigiaW5zZXJ0X2NvbCIpLGY2ZSh0aGlzLCJpbmRleCIs''@;'; put 'put ''dm9pZCAwKSxmNmUodGhpcywiYW1vdW50Iix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmFtb3VudD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGQsaCxmKT0+e2EuZG9uZSgoKT0+bmV3IE1lZSh7aW5kZXg6ZCxhbW91''@;'; put 'put ''bnQ6aH0pLGYpfSl9dW5kbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlQ29sIixhKSxsLmFs''@;'; put 'put ''dGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHA2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRjV0KGMpe3ZhciBsPWZ1bmN0aW9uIEg1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeGVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9yb3ciKSxwNmUodGhpcywiaW5kZXgiLHZvaWQgMCkscDZlKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmluZGV4''@;'; put 'put ''PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyB4ZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuY291bnRSb3dzKCks''@;'; put 'put ''aD1sLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzO3RoaXMuaW5kZXg+PWQmJnRoaXMuaW5kZXgtaDxkJiYodGhpcy5pbmRleC09aCksbC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRv''@;'; put 'put ''LnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVSb3ciLGEpLGwuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19ZnVuY3Rpb24gZU4oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE41dChjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBWNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEVlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtjaGFuZ2VzOmEsc2VsZWN0ZWQ6ZCxjb3VudENvbHM6aCxjb3VudFJvd3M6Zn09''@;'; put 'put ''bDtzdXBlcigiY2hhbmdlIiksZU4odGhpcywiY2hhbmdlcyIsdm9pZCAwKSxlTih0aGlzLCJzZWxlY3RlZCIsdm9pZCAwKSxlTih0aGlzLCJjb3VudENvbHMiLHZvaWQgMCksZU4odGhpcywiY291bnRSb3dzIix2b2lkIDApLHRoaXMuY2hhbmdlcz1hLHRoaXMuc2VsZWN0ZWQ9ZCx0aGlzLmNv''@;'; put 'put ''dW50Q29scz1oLHRoaXMuY291bnRSb3dzPWZ9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNoYW5nZSIsZnVuY3Rpb24oZCxoKXtjb25zdCBmPWQmJmQubGVuZ3RoO2YmJmQuZmluZChJPT57Y29uc3RbLCxHLGllXT1JO3JldHVybiBHIT09aWV9''@;'; put 'put ''KSYmYS5kb25lKCgpPT57Y29uc3QgST1kLnJlZHVjZSgoaWUsdWUpPT4oaWUucHVzaChbLi4udWVdKSxpZSksW10pO0kuZm9yRWFjaChpZT0+e2llWzFdPWwucHJvcFRvQ29sKGllWzFdKX0pO2NvbnN0IEc9Zj4xP3RoaXMuZ2V0U2VsZWN0ZWQoKTpbW0lbMF1bMF0sSVswXVsxXV1dO3JldHVy''@;'; put 'put ''biBuZXcgRWVlKHtjaGFuZ2VzOkksc2VsZWN0ZWQ6Ryxjb3VudENvbHM6bC5jb3VudENvbHMoKSxjb3VudFJvd3M6bC5jb3VudFJvd3MoKX0pfSxoKX0pfXVuZG8obCxhKXtjb25zdCBkPWcxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCB2PTAsTT1kLmxlbmd0aDt2PE07disrKWRbdl0uc3BsaWNl''@;'; put 'put ''KDMsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGg9bC5jb3VudFJvd3MoKS10aGlzLmNvdW50Um93cztoPjAmJmwuYWx0ZXIoInJlbW92ZV9yb3ciLG51bGwsaCwiVW5kb1JlZG8udW5k''@;'; put 'put ''byIpO2NvbnN0IGY9bC5jb3VudENvbHMoKS10aGlzLmNvdW50Q29scztmPjAmJmwuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkmJmwuYWx0ZXIoInJlbW92ZV9jb2wiLG51bGwsZiwiVW5kb1JlZG8udW5kbyIpLGwuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLGwuc2VsZWN0Q2VsbHModGhp''@;'; put 'put ''cy5zZWxlY3RlZCwhMSwhMSl9cmVkbyhsLGEpe2NvbnN0IGQ9ZzEodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspZFtoXS5zcGxpY2UoMiwxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsYSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRv''@;'; put 'put ''UmVkby5yZWRvIiksdGhpcy5zZWxlY3RlZCYmbC5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX19ZnVuY3Rpb24gZzZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCNXQoYyl7dmFyIGw9ZnVuY3Rpb24gajV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g''@;'; put 'put ''Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBUZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y29uZGl0aW9uc1N0YWNrOmEscHJldmlvdXNDb25kaXRpb25zU3RhY2s6ZH09bDtzdXBlcigiZmlsdGVyIiksZzZlKHRoaXMsImNvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSxnNmUo''@;'; put 'put ''dGhpcywicHJldmlvdXNDb25kaXRpb25zU3RhY2siLHZvaWQgMCksdGhpcy5jb25kaXRpb25zU3RhY2s9YSx0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUZpbHRlciIsKGQsaCk9PnthLmRv''@;'; put 'put ''bmUoKCk9Pm5ldyBUZWUoe2NvbmRpdGlvbnNTdGFjazpkLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmlsdGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMu''@;'; put 'put ''cHJldmlvdXNDb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX19''@;'; put 'put ''Y2xhc3MgQWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e2RhdGE6YSxjZWxsUmFuZ2U6ZH09bDtzdXBlcigibWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiB6NXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFU1dChjKXt2YXIgbD1mdW5jdGlvbiBaNXQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9ZCx0aGlzLmRhdGE9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlTWVyZ2VDZWxscyIsKGQs''@;'; put 'put ''aCk9PntpZihoKXJldHVybjtjb25zdCBmPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1sLmdldERhdGEoZi5yb3csZi5jb2wsdi5yb3csdi5jb2wpO2EuZG9uZSgoKT0+bmV3IEFlZSh7ZGF0YTpNLGNlbGxSYW5nZTpkfSkpfSl9dW5kbyhsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKTtjb25zdCBoPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7bC5wb3B1bGF0ZUZyb21BcnJheSho''@;'; put 'put ''LnJvdyxoLmNvbCx0aGlzLmRhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX1mdW5jdGlv''@;'; put 'put ''biBtNmUoYyxsLGEsZCxoKXtjb25zdCBmPVsidmlzdWFsUm93IiwidmlzdWFsQ29sIiwicm93IiwiY29sIiwicHJvcCJdLHY9Zi5sZW5ndGgsTT1bXTtyZXR1cm4gR2EoZCxoLEk9PntHYShsLGEsRz0+e2NvbnN0IGllPWMuZ2V0Q2VsbE1ldGEoRyxJKTtpZihPYmplY3Qua2V5cyhpZSkubGVu''@;'; put 'put ''Z3RoIT09dil7Y29uc3QgdWU9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGllKS5maWx0ZXIoeWU9PntsZXRbRWVdPXllO3JldHVybiExPT09Zi5pbmNsdWRlcyhFZSl9KSk7TS5wdXNoKFtpZS52aXN1YWxSb3csaWUudmlzdWFsQ29sLHVlXSl9fSl9KSxNfWZ1bmN0aW9uIHFn''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXNXQoYyl7dmFyIGw9ZnVuY3Rpb24gWTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBrZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxpbmRl''@;'; put 'put ''eGVzOmQsZGF0YTpoLGFtb3VudDpmLGhlYWRlcnM6dixjb2x1bW5Qb3NpdGlvbnM6TSxyb3dQb3NpdGlvbnM6SSxmaXhlZENvbHVtbnNTdGFydDpHLHJlbW92ZWRDZWxsTWV0YXM6aWV9PWw7c3VwZXIoInJlbW92ZV9jb2wiKSxxZyh0aGlzLCJpbmRleCIsdm9pZCAwKSxxZyh0aGlzLCJpbmRl''@;'; put 'put ''eGVzIix2b2lkIDApLHFnKHRoaXMsImRhdGEiLHZvaWQgMCkscWcodGhpcywiYW1vdW50Iix2b2lkIDApLHFnKHRoaXMsImhlYWRlcnMiLHZvaWQgMCkscWcodGhpcywiY29sdW1uUG9zaXRpb25zIix2b2lkIDApLHFnKHRoaXMsInJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxxZyh0aGlzLCJmaXhl''@;'; put 'put ''ZENvbHVtbnNTdGFydCIsdm9pZCAwKSxxZyh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmluZGV4ZXM9ZCx0aGlzLmRhdGE9aCx0aGlzLmFtb3VudD1mLHRoaXMuaGVhZGVycz12LHRoaXMuY29sdW1uUG9zaXRpb25zPU0uc2xpY2UoMCksdGhpcy5y''@;'; put 'put ''b3dQb3NpdGlvbnM9SS5zbGljZSgwKSx0aGlzLmZpeGVkQ29sdW1uc1N0YXJ0PUcsdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPWllfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0''@;'; put 'put ''IEk9bC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxHPShsLmNvdW50Q29scygpK2QpJWwuY291bnRDb2xzKCksaWU9RytoLTEsdWU9W10seWU9W10sRWU9W107cmV0dXJuIEdhKEkubGVuZ3RoLTEsamU9Pntjb25zdCBxZT1bXSxydD1JW2plXTtHYShHLGllLHB0PT57cWUucHVzaChydFtsLnRvUGh5''@;'; put 'put ''c2ljYWxDb2x1bW4ocHQpXSl9KSx1ZS5wdXNoKHFlKX0pLEdhKGgtMSxqZT0+e0VlLnB1c2gobC50b1BoeXNpY2FsQ29sdW1uKEcramUpKX0pLEFycmF5LmlzQXJyYXkobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZHYShoLTEsamU9Pnt5ZS5wdXNoKGwuZ2V0U2V0dGluZ3MoKS5jb2xI''@;'; put 'put ''ZWFkZXJzW2wudG9QaHlzaWNhbENvbHVtbihHK2plKV18fG51bGwpfSksbmV3IGtlZSh7aW5kZXg6RyxpbmRleGVzOkVlLGRhdGE6dWUsYW1vdW50OmgsaGVhZGVyczp5ZSxjb2x1bW5Qb3NpdGlvbnM6bC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyb3dQb3NpdGlv''@;'; put 'put ''bnM6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxmaXhlZENvbHVtbnNTdGFydDpsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENlbGxNZXRhczptNmUobCwwLGwuY291bnRSb3dzKCksRyxpZSl9KX0sdil9KX11bmRvKGwsYSl7bC5nZXRTZXR0''@;'; put 'put ''aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgaD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGY9KGllLHVlLHllKT0+eWVbdGhpcy5pbmRleGVzLmluZGV4T2YoaFt1ZV0pXSx2PXRoaXMuZGF0YS5sZW5ndGgsTT1bXTtmb3IobGV0IGll''@;'; put 'put ''PTA7aWU8djtpZSsrKU0ucHVzaChicyh0aGlzLmRhdGFbaWVdLGYpKTtjb25zdCBJPWJzKHRoaXMuaGVhZGVycyxmKSxHPVtdO2wuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9zaXRpb25zKSxsLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0IixsLnRv''@;'; put 'put ''VmlzdWFsQ29sdW1uKHRoaXMuaW5kZXhlc1swXSksdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGwuYmF0Y2hFeGVjdXRpb24oKCk9PntsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0aW9ucyksbC5jb2x1bW5JbmRleE1hcHBlci5z''@;'; put 'put ''ZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksWW4obC5nZXRTb3VyY2VEYXRhQXJyYXkoKSwoaWUsdWUpPT57WW4oaCwoeWUsRWUpPT57aWVbeWVdPU1bdWVdW0VlXSxHLnB1c2goW3VlLHllLGllW3llXV0pfSl9KSx0eXBlb2YgdGhpcy5oZWFkZXJzPCJ1IiYm''@;'; put 'put ''WW4oSSwoaWUsdWUpPT57bC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbaFt1ZV1dPWllfSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2goaWU9PntsZXRbdWUseWUsRWVdPWllO2wuc2V0Q2VsbE1ldGFPYmplY3QodWUseWUsRWUpfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVu''@;'; put 'put ''ZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoRyxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGEpLGwuYWx0ZXIoInJlbW92ZV9jb2wiLHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX19''@;'; put 'put ''ZnVuY3Rpb24gd3coYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEc1dChjKXt2YXIgbD1mdW5jdGlvbiAkNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi''@;'; put 'put ''ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERlZSBleHRlbmRzIHRme2NvbnN0cnVjdG9yKGwpe2xldHtp''@;'; put 'put ''bmRleDphLGRhdGE6ZCxmaXhlZFJvd3NCb3R0b206aCxmaXhlZFJvd3NUb3A6Zixyb3dJbmRleGVzU2VxdWVuY2U6dixyZW1vdmVkQ2VsbE1ldGFzOk19PWw7c3VwZXIoInJlbW92ZV9yb3ciKSx3dyh0aGlzLCJpbmRleCIsdm9pZCAwKSx3dyh0aGlzLCJkYXRhIix2b2lkIDApLHd3KHRoaXMs''@;'; put 'put ''ImZpeGVkUm93c0JvdHRvbSIsdm9pZCAwKSx3dyh0aGlzLCJmaXhlZFJvd3NUb3AiLHZvaWQgMCksd3codGhpcywicm93SW5kZXhlc1NlcXVlbmNlIix2b2lkIDApLHd3KHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuZGF0YT1kLHRoaXMuZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tPWgsdGhpcy5maXhlZFJvd3NUb3A9Zix0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZT12LHRoaXMucmVtb3ZlZENlbGxNZXRhcz1NfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLChkLGgsZix2KT0+e2EuZG9uZSgo''@;'; put 'put ''KT0+e2NvbnN0IEk9bC50b1BoeXNpY2FsUm93KGQpLEc9SStoLTEsaWU9ZzEobC5nZXRTb3VyY2VEYXRhKEksMCxJK2gtMSxsLmNvdW50U291cmNlQ29scygpLTEpKTtyZXR1cm4gbmV3IERlZSh7aW5kZXg6SSxkYXRhOmllLGZpeGVkUm93c0JvdHRvbTpsLmdldFNldHRpbmdzKCkuZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tLGZpeGVkUm93c1RvcDpsLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLHJvd0luZGV4ZXNTZXF1ZW5jZTpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJlbW92ZWRDZWxsTWV0YXM6bTZlKGwsSSxHLDAsbC5jb3VudENvbHMoKS0xKX0pfSx2KX0pfXVu''@;'; put 'put ''ZG8obCxhKXtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKSxoPVtdO2QuZml4ZWRSb3dzQm90dG9tPXRoaXMuZml4ZWRSb3dzQm90dG9tLGQuZml4ZWRSb3dzVG9wPXRoaXMuZml4ZWRSb3dzVG9wLHRoaXMuZGF0YS5mb3JFYWNoKChmLHYpPT57T2JqZWN0LmtleXMoZikuZm9yRWFjaChNPT57Y29u''@;'; put 'put ''c3QgST1wYXJzZUludChNLDEwKTtoLnB1c2goW3RoaXMuaW5kZXgrdixpc05hTihJKT9NOkksZltNXV0pfSl9KSxsLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksbC5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsbC50b1Zpc3VhbFJv''@;'; put 'put ''dyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKGY9PntsZXRbdixNLEldPWY7bC5zZXRDZWxs''@;'; put 'put ''TWV0YU9iamVjdCh2LE0sSSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChoLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsYSksbC5hbHRlcigicmVtb3Zl''@;'; put 'put ''X3JvdyIsbC50b1Zpc3VhbFJvdyh0aGlzLmluZGV4KSx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHY2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSzV0KGMpe3ZhciBsPWZ1bmN0aW9uIHE1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSWVlIGV4dGVuZHMgdGZ7Y29uc3RydWN0b3IobCl7bGV0e3Jvd3M6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoInJvd19tb3ZlIiksdjZlKHRoaXMsInJvd3MiLHZvaWQgMCksdjZlKHRoaXMsImZpbmFsUm93SW5kZXgiLHZvaWQgMCks''@;'; put 'put ''dGhpcy5yb3dzPWEuc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IEllZSh7cm93czpkLGZpbmFsSW5kZXg6aH0pKX0pfXVu''@;'; put 'put ''ZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxFUSh0aGlzLnJvd3MsdGhpcy5maW5hbFJvd0luZGV4LGwucm93SW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JF''@;'; put 'put ''YWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlUm93KE0sdil9KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdl''@;'; put 'put ''dFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlUm93cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5maW5hbFJvd0lu''@;'; put 'put ''ZGV4LHRoaXMuZmluYWxSb3dJbmRleCt0aGlzLnJvd3MubGVuZ3RoLTEpfX1jbGFzcyBSZWUgZXh0ZW5kcyB0Zntjb25zdHJ1Y3RvcihsKXtsZXR7Y2VsbFJhbmdlOmF9PWw7c3VwZXIoInVubWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiBYNXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEo1dChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBRNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChkLGgpPT57aHx8YS5kb25lKCgpPT5uZXcgUmVlKHtjZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2Uo''@;'; put 'put ''dGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCksbC5yZW5kZXIoKX19ZnVuY3Rpb24gTGVlKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBybXQoYyl7dmFyIGw9ZnVuY3Rpb24gaW10KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBPZWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIo''@;'; put 'put ''ImFmdGVyVW5kbyIpLFNhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSZWRvIiksU2EuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUmVkbyIpO2NvbnN0IGI2ZT1uZXcgU2V0O3ZhciB0Tj1uZXcgV2Vha1NldDtjbGFzcyBzbXQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4idW5kb1JlZG8ifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDFlM31zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIHRtdChjLGwpeyhmdW5jdGlvbiBubXQoYyxsKXtp''@;'; put 'put ''ZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyx0TiksTGVlKHRoaXMsImRvbmVBY3Rpb25zIixbXSksTGVlKHRoaXMsInVuZG9u''@;'; put 'put ''ZUFjdGlvbnMiLFtdKSxMZWUodGhpcywiaWdub3JlTmV3QWN0aW9ucyIsITEpLGZ1bmN0aW9uIGVtdChjLGwpe1t3ZWUsQ2VlLFNlZSxNZWUseGVlLEVlZSxUZWUsQWVlLGtlZSxEZWUsSWVlLFJlZV0uZm9yRWFjaChhPT5hLnN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoYyxsKSl9KGwsdGhpcyl9''@;'; put 'put ''aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5''@;'; put 'put ''KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBPZWUodE4sbCxsbXQpLmNhbGwobCwuLi5kKX0pLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxPZWUodE4sdGhpcyxjbXQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtzdXBl''@;'; put 'put ''ci5kaXNhYmxlUGx1Z2luKCksdGhpcy5jbGVhcigpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLE9lZSh0Tix0aGlzLHVtdCkuY2FsbCh0aGlzKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1''@;'; put 'put ''dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6Zj0+IWYu''@;'; put 'put ''YWx0S2V5LGdyb3VwOiJ1bmRvUmVkbyJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9ZG9uZShsLGEpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9u''@;'; put 'put ''c3x8IlVuZG9SZWRvLnVuZG8iPT09YXx8IlVuZG9SZWRvLnJlZG8iPT09YXx8ImF1dG8iPT09YSlyZXR1cm47Y29uc3QgaD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixoLGEpKXJldHVybjtjb25zdCB2''@;'; put 'put ''PWwoKSxNPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaCh2KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGgsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hh''@;'; put 'put ''bmdlIixNKSx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixNLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5kb25l''@;'; put 'put ''QWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGwpO2NvbnN0IGE9dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGwsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25z''@;'; put 'put ''dCBkPWcxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG8iLGQpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixmKSxh''@;'; put 'put ''LnVuZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25zLnB1c2goYSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJh''@;'; put 'put ''ZnRlclVuZG8iLGQpfXJlZG8oKXtpZighdGhpcy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMudW5kb25lQWN0aW9ucy5wb3Ao''@;'; put 'put ''KTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGwsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGQ9ZzEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25z''@;'; put 'put ''dCBmPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixmKSxhLnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixmLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkbyIsZCl9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dW5kb25lQWN0aW9ucy5sZW5ndGg+MH1jbGVhcigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsLHN1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX19ZnVuY3Rpb24gbG10KGMsbCl7ImxvYWREYXRhIj09PWwmJnRoaXMuY2xlYXIoKX1mdW5jdGlvbiBjbXQoKXtjb25zdCBjPWw9PntiNmUuaGFzKGwpfHwoaWwoZ2xgVGhlICIke2x9IiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBiZSByZW1vdmVkXHgyMAogICAgICAg''@;'; put 'put ''ICAgZnJvbSB0aGUgQ29yZSBBUEkgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kIGZyb20gdGhlIFVuZG9SZWRvIHBsdWdpblx4MjAKICAgICAgICAgIChlLmcuIFxgaG90SW5zdGFuY2UuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLiR7bH0oKVxgKS5gKSxiNmUuYWRkKGwpKX07''@;'; put 'put ''dGhpcy5ob3QudW5kbz0oKT0+e2MoInVuZG8iKSx0aGlzLnVuZG8oKX0sdGhpcy5ob3QucmVkbz0oKT0+e2MoInJlZG8iKSx0aGlzLnJlZG8oKX0sdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlPSgpPT4oYygiaXNVbmRvQXZhaWxhYmxlIiksdGhpcy5pc1VuZG9BdmFpbGFibGUoKSksdGhpcy5o''@;'; put 'put ''b3QuaXNSZWRvQXZhaWxhYmxlPSgpPT4oYygiaXNSZWRvQXZhaWxhYmxlIiksdGhpcy5pc1JlZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuY2xlYXJVbmRvPSgpPT57YygiY2xlYXIiKSx0aGlzLmNsZWFyKCl9LHRoaXMuaG90LnVuZG9SZWRvPXRoaXN9ZnVuY3Rpb24gdW10KCl7ZGVsZXRlIHRo''@;'; put 'put ''aXMuaG90LnVuZG8sZGVsZXRlIHRoaXMuaG90LnJlZG8sZGVsZXRlIHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5jbGVhclVuZG8sZGVsZXRlIHRoaXMuaG90LnVuZG9SZWRvfWZ1bmN0aW9uIG5OKCl7KGZ1''@;'; put 'put ''bmN0aW9uIE9hdCgpe0hkKGtfKSxIZChIWCksSGQoQnBlKSxIZCgkcGUpLEhkKEtwZSksSGQoUlgpLEhkKHFwZSksSGQoWHBlKSxIZChRcGUpLEhkKGE5KSxIZChlNGUpfSkoKSxmdW5jdGlvbiByc3QoKXtJaChJXyksSWgob1QpLEloKCRYKSxJaChHWCksSWgocVgpLEloKFlYKSxJaChhSiks''@;'; put 'put ''SWgob0opLEloKHNKKSxJaChBZyksSWgobEopfSgpLGZ1bmN0aW9uIGRzdCgpe1k3KGNUKSxZNyhjSiksWTcoS1ApLFk3KHVKKSxZNyhxUCl9KCksZnVuY3Rpb24gQ3N0KCl7RzIoaHN0KSxHMihmc3QpLEcyKGdzdCksRzIobXN0KSxHMih2c3QpLEcyKHlzdCksRzIoYnN0KSxHMihfc3QpLEcy''@;'; put 'put ''KElwZSksRzIod3N0KX0oKSxmdW5jdGlvbiBkbXQoKXtQcyhkVCksUHModGx0KSxQcyhwVCksUHMoT2x0KSxQcyh6bHQpLFBzKGFnZSksUHMoTmN0KSxQcyh1dXQpLFBzKERGKSxQcyhJMHQpLFBzKHIxdCksUHMoZDF0KSxQcyhORiksUHMocTF0KSxQcygkaHQpLFBzKGsydCksUHMobmZ0KSxQ''@;'; put 'put ''cyhwZnQpLFBzKEVmdCksUHMoQmZ0KSxQcyhxZnQpLFBzKHYzdCksUHMoRTN0KSxQcyh1cHQpLFBzKHpwdCksUHMoR3B0KSxQcyhfNHQpLFBzKHVndCksUHMoT2d0KSxQcyhVZ3QpLFBzKHI1dCksUHMoaDV0KSxQcyhTNXQpLFBzKHNtdCl9KCl9bGV0IG5mPSgoKT0+e2NsYXNzIGN7c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYV19KX19cmV0dXJuIGN9KSgpLEN3PSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W19XLGRoZV0saW1wb3J0czpbUmEsUmMsemMsejAsbmZdfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKSxNQT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxfNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHowLFJhLFJjXX0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCksRzk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLFJjLHowLHpjLEN3LE1BLG5m''@;'; put 'put ''LF82ZV19KX19cmV0dXJuIGN9KSgpO2NsYXNzIFBlZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fXZhciBGZWUsSGVlLE5lZSxWZWUsQmVlO25OKCksZnVuY3Rpb24gaG10KGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93''@;'; put 'put ''PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IEc9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0''@;'; put 'put ''aW5ncyhHKTooaD1uZXcgYy5Db3JlKGRbMF0sRyksZC5kYXRhKCJoYW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIHY9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2PjE/di0xOjApLEk9MTtJPHY7SSsrKU1bSS0xXT1hcmd1bWVudHNbSV07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShvcyksb3MuX19HaG9zdFRhYmxlPWRKLG9zLl9nZXRM''@;'; put 'put ''aXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIEJYZSgpe3JldHVybiBZT30sb3MuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBadHQoKXtyZXR1cm4gekt9LG9zLkV2ZW50TWFuYWdlcj1qMjtjb25zdCBmbXQ9W0QsUixCLFosSCx3LF8sWSxGLHAsaixMXSxwbXQ9W04sUF07b3Mu''@;'; put 'put ''aGVscGVyPXt9LG9zLmRvbT17fSxZbihmbXQsYz0+e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG9zLmhlbHBlcltsXT1jW2xdKX0pfSksWW4ocG10LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09''@;'; put 'put ''bC5jaGFyQXQoMCkmJihvcy5kb21bbF09Y1tsXSl9KX0pLG9zLmNlbGxUeXBlcz1udWxsIT09KEZlZT1vcy5jZWxsVHlwZXMpJiZ2b2lkIDAhPT1GZWU/RmVlOnt9LFluKFFudCgpLGM9Pntvcy5jZWxsVHlwZXNbY109TVgoYyl9KSxvcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1HMixv''@;'; put 'put ''cy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9TVgsb3MuZWRpdG9ycz1udWxsIT09KEhlZT1vcy5lZGl0b3JzKSYmdm9pZCAwIT09SGVlP0hlZTp7fSxZbihMWGUoKSxjPT57b3MuZWRpdG9yc1tgJHtwMShjKX1FZGl0b3JgXT1XTyhjKX0pLG9zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9SGQsb3Mu''@;'; put 'put ''ZWRpdG9ycy5nZXRFZGl0b3I9V08sb3MucmVuZGVyZXJzPW51bGwhPT0oTmVlPW9zLnJlbmRlcmVycykmJnZvaWQgMCE9PU5lZT9OZWU6e30sWW4oZEplKCksYz0+e2NvbnN0IGw9UU8oYyk7ImJhc2UiPT09YyYmKG9zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLG9zLnJlbmRlcmVyc1tg''@;'; put 'put ''JHtwMShjKX1SZW5kZXJlcmBdPWx9KSxvcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1JaCxvcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9UU8sb3MudmFsaWRhdG9ycz1udWxsIT09KFZlZT1vcy52YWxpZGF0b3JzKSYmdm9pZCAwIT09VmVlP1ZlZTp7fSxZbihwSmUoKSxjPT57b3MudmFs''@;'; put 'put ''aWRhdG9yc1tgJHtwMShjKX1WYWxpZGF0b3JgXT1ySyhjKX0pLG9zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9WTcsb3MudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9ckssb3MucGx1Z2lucz1udWxsIT09KEJlZT1vcy5wbHVnaW5zKSYmdm9pZCAwIT09QmVlP0JlZTp7fSxZbihuSygp''@;'; put 'put ''LGM9Pntvcy5wbHVnaW5zW2NdPUlFKGMpfSksb3MucGx1Z2luc1tgJHtwMShGcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Gcyxvcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVBzLG9zLnBsdWdpbnMuZ2V0UGx1Z2luPUlFO2NvbnN0IGplZT1vcyx6ZWU9KGMsbCxhKT0+e2ZvcihsZXQgZCBvZiBj''@;'; put 'put ''KXtjb25zdCBoPWwuZmluZCh2PT52LmRhdGE9PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07ZiYmKGQuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxlbmd0aCYm''@;'; put 'put ''KGgubGVuZ3RoPXBhcnNlSW50KGYubGVuZ3RoKSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVsZT1kLkNMU19SVUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gVWVlKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCxnZy5p''@;'; put 'put ''c1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IHc2ZT17Q0FTRTooYyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmco''@;'; put 'put ''KS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVVlZShj''@;'; put 'put ''KSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFhfHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1VZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkpfSxOT1RO''@;'; put 'put ''VUxMOihjLGwpPT5udWxsIT1jJiZjLnRvU3RyaW5nKCkubGVuZ3RoPjB9O3ZhciBaZWU9Yig3ODM3NSk7Y2xhc3MgYm10IGV4dGVuZHMgamVlLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxl''@;'; put 'put ''bWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmlj''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBDNmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29sdW1ucz1b''@;'; put 'put ''XSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxJLEcpPT57Y29uc3QgaWU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBqZWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks''@;'; put 'put ''e30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6MH07bnVsbD09SSYmKEk9IiIpLE0mJk0udmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChpZSxJLHVlPT57RyYmRyh1ZSl9KTpHJiZHKCExKX0sdGhpcy5yZWdpc3RlckN1c3Rv''@;'; put 'put ''bUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9emVlKGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVz''@;'; put 'put ''PShjPT57aWYoIVplZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0''@;'; put 'put ''aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7amVlLmVkaXRvcnMucmVnaXN0ZXJFZGl0''@;'; put 'put ''b3IoImF1dG9jb21wbGV0ZS5jdXN0b20iLGJtdCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9''@;'; put 'put ''dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3Jl''@;'; put 'put ''dHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIo''@;'; put 'put ''aD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4g''@;'; put 'put ''dGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0''@;'; put 'put ''cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRh''@;'; put 'put ''dGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVs''@;'; put 'put ''ZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6''@;'; put 'put ''YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10''@;'; put 'put ''aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xd''@;'; put 'put ''LmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1Rf''@;'; put 'put ''SE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0''@;'; put 'put ''cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMu''@;'; put 'put ''aGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVybiJhdXRv''@;'; put 'put ''Y29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEk9PntNPUl9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2Fs''@;'; put 'put ''bCh0aGlzLGQsST0+e009SX0pLE0/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZih3NmVbYS5SVUxFX1RZUEVdJiYhdzZlW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNv''@;'; put 'put ''bnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdl''@;'; put 'put ''dERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgo''@;'; put 'put ''ITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBo''@;'; put 'put ''KCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNv''@;'; put 'put ''bGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVt''@;'; put 'put ''ZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4g''@;'; put 'put ''bDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBjVDtjYXNlIm51bWVyaWMiOnJldHVy''@;'; put 'put ''biBVZWU7Y2FzZSJkYXRlIjpyZXR1cm4gS1A7Y2FzZSJ0aW1lIjpyZXR1cm4gcVA7ZGVmYXVsdDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0''@;'; put 'put ''Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhp''@;'; put 'put ''ZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25z''@;'; put 'put ''dCByTj17bnVtZXJpYzoiIixkZWZhdWx0OiIifSxfbXQ9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1jP2wmJmwuc291cmNlP2wuc291cmNlWzBdOltdOnJOLmhhc093blByb3BlcnR5KGMpP3JOW2NdOnJOLmRlZmF1bHQ6ck4uZGVmYXVsdCxXZWU9Yz0+bmV3IERhdGUoTWF0aC5yb3VuZCg4''@;'; put 'put ''NjQwMCooYy0yNTU2OSkqMWUzKSksQ210PShjLGwsYSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsbCksWWVlPShjLGws''@;'; put 'put ''YSxkLGgsZix2KT0+KEdlZShsKSxsLmlubmVySFRNTD1mfHwiIixsKSxTbXQ9KGMsbCxhLGQsaCxmLHYpPT4oR2VlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFu''@;'; put 'put ''PmAsbCksR2VlPWM9PntjLmNsYXNzTGlzdC5jb250YWlucygiaHREYXJrIil8fGMuY2xhc3NMaXN0LmFkZCgiaHREYXJrIil9LFM2ZT1jPT57bGV0IGw9KCIwIitjLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0VVRDTWludXRlcygpKS5zbGljZSgt''@;'; put 'put ''MikrIjoiLGwrPSgiMCIrYy5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSwkZWU9Yz0+Yy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhjLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitjLmdldERhdGUoKSkuc2xpY2UoLTIpLEtlZT1jPT4hIS9eLXswLDF9XGQrJC8udGVz''@;'; put 'put ''dChjKSxNNmU9Yz0+ISEvXlxkK1wuXGQrJC8udGVzdChjKSxxZWU9KGMsbCk9Pm5ldyBGaWxlKFtjXSxsLHtsYXN0TW9kaWZpZWQ6KG5ldyBEYXRlKS5nZXRUaW1lKCl9KTt2YXIgRHU9Yig2MzU3OCkseDZlPWIoOTQyNDgpLEU2ZT1iKDgzODM4KTtjbGFzcyBUNmV7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''dGhpcy5saWNlbmNlU3RhdGU9bC5saWNlbmNlU3RhdGV9cGFyc2VTcHJlYWRzaGVldEZpbGUobCxhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKHYsTSk9Pntjb25zdCBJPWwudXBsb2FkZXJ8fG5ldyBQZWU7aWYobC53b3JrYm9vayl0aGlzLnBhcnNlRXhjZWxGaWxlKGws''@;'; put 'put ''bC53b3JrYm9vayxJLGgpLnRoZW4oRz0+e3YoRyl9KS5jYXRjaChHPT57TShHKX0pO2Vsc2V7Y29uc3QgaWU9bC5maWxlO2wuZW5jb2Rpbmd8fChsLmVuY29kaW5nPSJVVEYtOCIpLGQmJmQoYExvYWRpbmcgJHtpZS5uYW1lfSBpbnRvIHRoZSBicm93c2VyYCk7bGV0IHVlPWllLm5hbWUuc2xp''@;'; put 'put ''Y2UoaWUubmFtZS5sYXN0SW5kZXhPZigiLiIpKzEsaWUubmFtZS5sYXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4bHMiIT09dWUudG9Mb3dlckNhc2UoKSl7aWYoImNzdiI9PT11ZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLnBhcnNlQ3N2RmlsZShsLEksdWUpLnRoZW4oeWU9PnYoeWUpKS5j''@;'; put 'put ''YXRjaCh5ZT0+TSh5ZSkpO3tsZXQgeWU9J0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK2wuZmlsZS5uYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nO3JldHVybiBJLnF1ZXVlLnBvcCgpLE0oeWUpfX17bGV0IHllPW5ldyBGaWxlUmVhZGVyO3llLm9ubG9hZD1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBqZT1RKGZ1bmN0aW9uKihxZSl7Y29uc3QgcnQ9eWllbGQgZi54c2x4U3RhcnRSZWFkaW5nKHFlLGEsbC5wYXNzd29yZCk7aWYoIXJ0KXJldHVybiBNKCJObyB3b3JrYm9vayBmb3VuZC4iKTtmLnBhcnNlRXhjZWxGaWxlKGwscnQsSSxoKS50aGVuKHB0PT57dihwdCl9''@;'; put 'put ''KS5jYXRjaChwdD0+e00ocHQpfSl9KTtyZXR1cm4gZnVuY3Rpb24ocWUpe3JldHVybiBqZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHllLnJlYWRBc0FycmF5QnVmZmVyKGllKX19fSl9cGFyc2VFeGNlbEZpbGUobCxhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09''@;'; put 'put ''ITEsST1bXTtjb25zdCBHPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5sLmhlYWRlckFycmF5XSxpZT10aGlzLnNlYXJjaERhdGFJbkV4Y2VsKGEsbCk7bGV0IHVlPVtdO2lmKGllLmZvdW5kPyhNPSEwLHVlPWllLmZvdW5kLmFycmF5RGF0YSxpZS5mb3VuZC5oZWFkZXJz''@;'; put 'put ''LmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKXx8KHVlPXVlLm1hcChqZT0+KGplLnVuc2hpZnQoe3Y6IiJ9KSxqZSkpKSxoJiZoKGBTaGVldDogJHtpZS5mb3VuZC5zaGVldE5hbWV9XG5SYW5nZTogJHtpZS5mb3VuZC5zdGFydEFkZHJlc3N9OiR7aWUuZm91bmQu''@;'; put 'put ''ZW5kQWRkcmVzc31gKSk6ST1pZS5taXNzaW5nfHxbXSxJLmxlbmd0aD4wKXtsZXQgamU9SS5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIik7cmV0dXJuIGQucXVldWUu''@;'; put 'put ''cG9wKCksdihqZSl9aWYoMD09PXVlLmxlbmd0aHx8MD09PXVlWzBdLmxlbmd0aCl7bGV0IGplPSJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIGQucXVldWUucG9wKCksdihqZSl9aWYoKGwuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxsLmRhdGVIZWFkZXJzLmxl''@;'; put 'put ''bmd0aD4wfHxsLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKHVlPXRoaXMudXBkYXRlRGF0ZVRpbWVDb2xzKEcsdWUsbCkpLGwueGxSdWxlcy5sZW5ndGg+MCYmKHVlPXRoaXMudXBkYXRlWExSdWxlQ29scyhHLHVlLGwpKSwhTSl7bGV0IGplPSIiO3JldHVybiBqZT0wPT09SS5sZW5ndGg/Ik5v''@;'; put 'put ''IHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjpJLm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKSxkLnF1ZXVlLnBvcCgpLHYoamUpfXtsLmhlYWRlclNob3c9''@;'; put 'put ''Ryx1ZT11ZS5tYXAoSnQ9Pkp0Lm1hcCh2bj0+Im4iPT09dm4udHx8dm4udz92bi52OiJzdHJpbmciPT10eXBlb2Ygdm4udj92bi52LnRyaW0oKTp2bi52KSksdWU9dWUubWFwKEp0PT5KdC5tYXAoKHZuLENuKT0+eyF2biYmMCE9PXZuJiYodm49IiIpO2NvbnN0IHRuPWwuaGVhZGVyU2hvd1tD''@;'; put 'put ''bl07cmV0dXJuIm51bWVyaWMiPT09bC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZSh0bik/LnR5cGUmJigwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHZuKSYmIXZuLmluY2x1ZGVzKCIuIikmJih2bj0iLiIrdm4pLHZufSkpO2NvbnN0IGplPXVlLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''c3VibWl0X3Jvd3NfbGltaXQpO2xldCBwdCxxZT1EdS51dGlscy5qc29uX3RvX3NoZWV0KGplLHtza2lwSGVhZGVyOiEwfSkscnQ9RHUudXRpbHMuc2hlZXRfdG9fY3N2KHFlKTtpZihydD1HLmpvaW4oIiwiKSsiXG4iK3J0LCJXTEFUSU4xIj09PWwuZW5jb2Rpbmcpe2xldCBKdD14NmUuZGVj''@;'; put 'put ''b2RlKEU2ZS5CdWZmZXIuZnJvbShydCksIkNQLTEyNTIiKTtwdD1uZXcgQmxvYihbSnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9ZWxzZSBwdD1uZXcgQmxvYihbcnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7bGV0IGR0PXFlZShwdCxsLmZpbGUubmFtZSsiLmNzdiIpO2QuYWRk''@;'; put 'put ''VG9RdWV1ZShbZHRdKX1pZigwPT09dWUubGVuZ3RoKXJldHVybiB2KGBUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogJHtpZS5mb3VuZD8uc2hlZXROYW1lfHwiIn1gKTtpZighaWUuZm91bmQpcmV0dXJuIHYoIk5vIHJlbGV2YW50IGRhdGEgZm91bmQu''@;'; put 'put ''ICdmb3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IHllPWllLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsRWU9aWUuZm91bmQuZW5kQWRkcmVzc3x8IiI7cmV0dXJuIGYoe3VwbG9hZGVyOmQsZGF0YTp1ZSxyYW5nZVNoZWV0UmVzOntmb3Vu''@;'; put 'put ''ZDohIWllLmZvdW5kLHNoZWV0TmFtZTppZS5mb3VuZC5zaGVldE5hbWUscmFuZ2VTdGFydEFkZHJlc3M6eWUscmFuZ2VFbmRBZGRyZXNzOkVlLHJhbmdlQWRkcmVzczpgJHt5ZX06JHtFZX1gLG1pc3NpbmdIZWFkZXJzOkl9LGhlYWRlclNob3c6bC5oZWFkZXJTaG93fSl9KX1wYXJzZUNzdkZp''@;'; put 'put ''bGUobCxhLGQpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiBhLnF1ZXVlLnBvcCgpLGYoIkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRh''@;'; put 'put ''Y3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWwuZW5jb2RpbmcpcmV0dXJuIGgoe3VwbG9hZGVyOmF9KTt7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9ST0+e2xldCBHPXg2ZS5kZWNvZGUoRTZlLkJ1ZmZlci5mcm9tKEkudGFyZ2V0LnJlc3VsdCks''@;'; put 'put ''IkNQLTEyNTIiKSxpZT1uZXcgQmxvYihbR10se3R5cGU6ZH0pLHVlPXFlZShpZSxsLmZpbGUubmFtZSk7cmV0dXJuIGEucXVldWUucG9wKCksYS5hZGRUb1F1ZXVlKFt1ZV0pLGgoe3VwbG9hZGVyOmF9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihsLmZpbGUpfX0pfWJ5dGVzVG9NQihsKXtyZXR1''@;'; put 'put ''cm4gcGFyc2VGbG9hdCgobC8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGwsYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPVEoZnVuY3Rpb24qKHYsTSl7Y29uc3QgST1oLnRvQnN0cihsLnRhcmdldC5yZXN1bHQpO2xldCBH''@;'; put 'put ''LGllPSExO2NvbnN0IHVlPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMSxwYXNzd29yZDpkfTt0cnl7Rz15aWVsZCBoLnhsc3hSZWFkKEksey4uLnVlfSl9Y2F0Y2goeWUpe2lmKCF5ZS5tZXNzYWdl''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIE0oIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7aWU9ITA7bGV0IEVlPSExO2Zvcig7aWU7KXtjb25zdCBqZT15aWVsZCBhKHtlcnJvcjpFZX0pO2lmKGplKXRyeXtHPXlpZWxkIGgueGxzeFJlYWQoSSx7Li4udWUs''@;'; put 'put ''cGFzc3dvcmQ6amV9KSxpZT0hMSxFZT0hMX1jYXRjaChxZSl7RWU9ITAscWUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpfHwoaWU9ITEpfWVsc2UgaWU9ITF9fX1yZXR1cm4gRz92KEcpOk0oIkZhaWxlZCB0byBwYXJzZSBhIHdvcmtib29rIil9KTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX14bHN4UmVhZChsLGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKGEmJmEucGFzc3dvcmQpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAt''@;'; put 'put ''IGhhcyBwYXNzd29yZCIpLGQoRHUucmVhZChsLGEpKTtpZih0eXBlb2YgV29ya2VyPiJ1IilyZXR1cm4gY29uc29sZS5pbmZvKCJOb3QgdXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIC0gbm8gV29ya2VyIGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50IiksZChEdS5yZWFkKGws''@;'; put 'put ''YSkpO2NvbnNvbGUuaW5mbygiVXNpbmcgd29ya2VyIHRvIHBhcnNlIHRoZSBYTFNYIik7Y29uc3QgZj1uZXcgV29ya2VyKGIudHUobmV3IFVSTChiLnArYi51KDQxMSksYi5iKSkpO2Yub25tZXNzYWdlPSh7ZGF0YTp2fSk9PnsicmVhZGluZ19lbmQiPT09di5ldmVudD9kKHYud29ya2Jvb2sp''@;'; put 'put ''OnYuZXJyb3I/aCh2LmVycm9yKTooY29uc29sZS5pbmZvKCJXb3JrZXIgZmFpbGVkIHRvIHBhcnNlIHRoZSBYTFNYIC0gZmFsbGJhY2sgdG8gbm9uIHdvcmtlciBwYXJzaW5nIiksZChEdS5yZWFkKHYsYSkpKX0sZi5wb3N0TWVzc2FnZSh7ZGF0YTpsLG9wdHM6YX0pLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''PmQoRHUucmVhZChsLGEpKSw2ZTUpfSl9c2VhcmNoRGF0YUluRXhjZWwobCxhKXtsZXQgZCxoLGYsdixNPSIiLEk9W10saWU9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmEuaGVhZGVyQXJyYXldLm1hcCh5ZT0+eWUudG9Mb3dlckNhc2UoKSksdWU9aWUucmVkdWNlKCh5''@;'; put 'put ''ZSxFZSk9Pih5ZVtFZV09LTEseWUpLHt9KTtmb3IobGV0IHllIG9mIGwuU2hlZXROYW1lcyl7ZD12b2lkIDAsaD12b2lkIDAsdWU9aWUucmVkdWNlKCh0bixNbik9Pih0bltNbl09LTEsdG4pLHt9KTtsZXQgRWU9W107TT15ZTtjb25zdCBqZT1sLlNoZWV0c1tNXTtpZihPYmplY3Qua2V5cyhq''@;'; put 'put ''ZSkuZm9yRWFjaCh0bj0+e2NvbnN0IE1uPWplW3RuXS52O2lmKE1uJiYic3RyaW5nIj09dHlwZW9mIE1uKXtjb25zdCBDcj1Nbi50b0xvd2VyQ2FzZSgpO2llLmluZGV4T2YoQ3IpPi0xJiYodWVbQ3JdPXRuLGR8fChkPXRuKSxoPXRuKX19KSwtMT09PXVlLl9fX19fZGVsZXRlX190aGlzX19y''@;'; put 'put ''ZWNvcmRfX19fXyYmZGVsZXRlIHVlLl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyxFZT1PYmplY3Qua2V5cyh1ZSkuZmlsdGVyKHRuPT4tMT09PXVlW3RuXSksRWUubGVuZ3RoPjApe0kucHVzaCh7c2hlZXROYW1lOk0sbWlzc2luZ0hlYWRlcnM6RWUubWFwKHRuPT50bi50b1VwcGVy''@;'; put 'put ''Q2FzZSgpKX0pO2NvbnRpbnVlfWNvbnN0IHFlPU9iamVjdC5rZXlzKHVlKTtsZXQgZHQscnQ9W10scHQ9W107cWUuc29ydCgodG4sTW4pPT57Y29uc3QgQ3I9YS5oZWFkZXJQa3MuaW5jbHVkZXModG4pPzE6MDtyZXR1cm4oYS5oZWFkZXJQa3MuaW5jbHVkZXMoTW4pPzE6MCktQ3J9KS5mb3JF''@;'; put 'put ''YWNoKHRuPT57Y29uc3QgTW49dWVbdG5dLENyPU1uLm1hdGNoKC9cRCsvKSxHcj1Nbi5tYXRjaCgvXGQrLyksbXI9KENyP0NyWzBdOi0xKXx8LTEsYWk9cGFyc2VJbnQoKEdyP0dyWzBdOi0xKXx8LTEpKzE7bGV0IF9pPTA7aWYoZHQpZm9yKGxldCBPbj1haTtPbjw9ZHQ7T24rKyl7Y29uc3Qg''@;'; put 'put ''Sm49amVbYCR7bXJ9JHtPbn1gXTtpZihhLmhlYWRlclBrcy5pbmNsdWRlcyh0bikmJih2b2lkIDA9PT1Kbnx8dm9pZCAwPT09Sm4udikpe2R0PU9uO2JyZWFrfXJ0W19pXXx8cnQucHVzaCh7fSksSm4mJihydFtfaV1bdG5dPSJzdHJpbmciPT10eXBlb2YgSm4udj9Kbi52LnRyaW0oKTpKbi52''@;'; put 'put ''KSxwdFtfaV18fHB0LnB1c2goW10pLHB0W19pXS5wdXNoKEpuPz97djoiIn0pLF9pKyt9ZWxzZXtsZXQgT249YWk7Zm9yKDt2b2lkIDA9PT1kdDspe2NvbnN0IHpyPWAke21yfSR7T259YCxKbj1qZVt6cl07aWYoIUpufHx2b2lkIDA9PT1Kbi52KXtkdD1Pbi0xO2JyZWFrfXJ0W19pXXx8cnQu''@;'; put 'put ''cHVzaCh7fSkscnRbX2ldW3RuXT0ibiI9PT1qZVt6cl0udD9qZVt6cl0udjpqZVt6cl0udz9qZVt6cl0udzoic3RyaW5nIj09dHlwZW9mIGplW3pyXS52P2plW3pyXS52LnRyaW0oKTpqZVt6cl0udixwdFtfaV18fHB0LnB1c2goW10pLHB0W19pXS5wdXNoKEpuPz97djoiIn0pLE9uKyssX2kr''@;'; put 'put ''K319aWYoZCYmaCl7Y29uc3QgT249aC5tYXRjaCgvXEQrLyk7Zj1kLHY9YCR7T259JHtkdH1gfX0pO2NvbnN0IHZuPVtdO2xldCBDbjtyZXR1cm4gcnQuZm9yRWFjaCgodG4sTW4pPT57bGV0IENyPSExO2EuaGVhZGVyUGtzLmZvckVhY2goR3I9Pnt2b2lkIDA9PT10bltHci50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpXSYmKENyPSEwKX0pLENyJiYodm4ucHVzaChNbiksQ258fChDbj1NbikpfSksQ24/KHJ0LnNwbGljZShDbiwxLzApLHB0LnNwbGljZShDbiwxLzApKTp2bi5zb3J0KCh0bixNbik9Pk1uLXRuKS5mb3JFYWNoKHRuPT57cnQuc3BsaWNlKHRuLDEpLHB0LnNwbGljZSh0biwxKX0pLHB0Lmxl''@;'; put 'put ''bmd0aD97Zm91bmQ6e2RhdGE6cnQsYXJyYXlEYXRhOnB0LHNoZWV0TmFtZTpNLHN0YXJ0QWRkcmVzczpmLGVuZEFkZHJlc3M6dixoZWFkZXJzOnFlfX06e319cmV0dXJue21pc3Npbmc6SX19dXBkYXRlRGF0ZVRpbWVDb2xzKGwsYSxkKXtpZihkLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtjb25z''@;'; put 'put ''dCBoPVtdO2QuZGF0ZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KSl7Y29uc3QgST1XZWUoTnVtYmVyKE0udikpO00udj1JLmdldEZ1''@;'; put 'put ''bGxZZWFyKCkrIi0iKygiMCIrKEkuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK0kuZ2V0RGF0ZSgpKS5zbGljZSgtMil9ZWxzZSBpZihNJiZNLnYmJi0xPT09TS52LnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpKXtjb25zdCBJPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIh''@;'; put 'put ''PT1JLnRvVVRDU3RyaW5nKCkmJihNLnY9JGVlKEkpKX1mW3ZdPU19KX0pfWlmKGQudGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QudGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZv''@;'; put 'put ''ckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KXx8TTZlKE0udil8fE0udi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgST1XZWUoTnVtYmVyKE0udikpO00udj1TNmUoSSl9Zlt2XT1NfSl9KX1pZihkLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107ZC5kYXRlVGltZUhl''@;'; put 'put ''YWRlcnMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZikmJmgucHVzaChsLmluZGV4T2YoZikpfSksYS5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IE09Zlt2XTtpZihLZWUoTS52KXx8TTZlKE0udikpe2NvbnN0IEk9V2VlKE51bWJlcihNLnYpKTtNLnY9JGVlKEkpKyIgIitT''@;'; put 'put ''NmUoSSl9ZWxzZXtpZigtMT09PU0udi5pbmRleE9mKCIgIikmJi0xIT09TS52LmluZGV4T2YoIjoiKSl7bGV0IEc9TS52LnN1YnN0cmluZygwLE0udi5pbmRleE9mKCI6IikpO0c9RysiICIrTS52LnN1YnN0cmluZyhNLnYuaW5kZXhPZigiOiIpKzEpLE0udj1HfWNvbnN0IEk9bmV3IERhdGUo''@;'; put 'put ''TS52KTsiSW52YWxpZCBEYXRlIiE9PUkudG9VVENTdHJpbmcoKSYmKE0udj0kZWUoSSkrIiAiKyhjPT57bGV0IGw9KCIwIitjLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0TWludXRlcygpKS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRTZWNvbmRz''@;'; put 'put ''KCkpLnNsaWNlKC0yKSxsfSkoSSkpfWZbdl09TX0pfSl9cmV0dXJuIGF9dXBkYXRlWExSdWxlQ29scyhsLGEsZCl7aWYoZC54bFJ1bGVzLmxlbmd0aD4wKXtjb25zdCBoPVtdO2QueGxSdWxlcy5mb3JFYWNoKGY9PnstMSE9PWwuaW5kZXhPZihmLlhMX0NPTFVNTikmJihmLmluZGV4PWwuaW5k''@;'; put 'put ''ZXhPZihmLlhMX0NPTFVNTiksaC5wdXNoKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdi5pbmRleF07IkZPUk1VTEEiPT09di5YTF9SVUxFJiYiZiJpbiBNJiYoIm4iPT09TS50P00udj0iPSIrTS5mOk0udz0iPSIrTS5mKSxmW3ZdPU19KX0pfXJldHVybiBh''@;'; put 'put ''fXRvQnN0cihsKXtsZXQgYT1uZXcgVWludDhBcnJheShsKSxkPSIiLGg9YS5ieXRlTGVuZ3RoO2ZvcihsZXQgZj0wO2Y8aDtmKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZShhW2ZdKTtyZXR1cm4gZH19bGV0IEE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmV4Y2Vs''@;'; put 'put ''UGFzc3dvcmRNb2RhbFNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQ9Zj0+bmV3IFByb21pc2UoKHYsTSk9Pnt0''@;'; put 'put ''aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3BlbihmKS5zdWJzY3JpYmUoST0+e3YoSS5wYXNzd29yZCl9KX0pfXBhcnNlRXhjZWxGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFQ2ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSkucGFyc2VTcHJlYWRzaGVldEZpbGUoYSx0''@;'; put 'put ''aGlzLnByb21wdEV4Y2VsUGFzc3dvcmQsZCxoKX14bHN4UmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57Y29uc3QgZj1uZXcgVDZlKHtsaWNlbmNlU3RhdGU6dGhpcy5saWNlbmNlU3RhdGV9KTtsZXQgdj1uZXcgRmlsZVJlYWRlcjt2Lm9ubG9hZD1NPT57Zi54c2x4U3Rh''@;'; put 'put ''cnRSZWFkaW5nKE0sdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkKS50aGVuKEk9PntkKEkpfSkuY2F0Y2goST0+e2goSSl9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihhKX0pfXBhcnNlRXhjZWxTaGVldE5hbWVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQ''@;'; put 'put ''cm9taXNlKChoLGYpPT57Y29uc3Qgdj1uZXcgRmlsZVJlYWRlcjtpZighYSlyZXR1cm4gY29uc29sZS53YXJuKCJmaWxlIGlzIG1pc3NpbmciKSxoKHtzaGVldE5hbWVzOltdfSk7di5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgTT1RKGZ1bmN0aW9uKihJKXtpZighST8udGFyZ2V0KXJldHVybiB2''@;'; put 'put ''b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgRyx1ZSxpZT0hMTtjb25zdCB5ZT1JLnRhcmdldC5yZXN1bHQ7dHJ5e0c9RHUucmVhZCh5ZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2goRWUpe2lmKCFFZS5tZXNz''@;'; put 'put ''YWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7aWU9ITA7bGV0IGplPSExO2Zvcig7aWU7KXtpZih1ZT15aWVsZCBkLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOmplfSksIXVlKXJldHVybiBpZT0hMSxm''@;'; put 'put ''KCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtHPUR1LnJlYWQoeWUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDp1ZX0pLGllPSExLGplPSExfWNhdGNoKHFlKXtqZT0hMCxxZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChpZT0h''@;'; put 'put ''MSl9aWYoIXVlKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIUcpcmV0dXJuIGYoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBoKHtzaGVldE5hbWVzOkcuU2hlZXROYW1lcyxwYXNzd29yZDp1ZX0p''@;'; put 'put ''fWNhdGNoKEVlKXtjb25zb2xlLmVycm9yKEVlKX19KTtyZXR1cm4gZnVuY3Rpb24oSSl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5sb2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9KSgpfWJ5dGVzVG9NQihh''@;'; put 'put ''KXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihoaGUpLHhyKHZjKSx4cih1MSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0ICQ5PXZvaWQgMCxUbXQ9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSwkOV0sW1siYW0iLCJwbSJdLCQ5LCQ5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJU''@;'; put 'put ''dWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSwkOSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIs''@;'; put 'put ''IkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1''@;'; put 'put ''Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLCQ5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJFRUVFLCBkIE1NTU0g''@;'; put 'put ''eSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsJDksInsxfSAnYXQnIHswfSIsJDldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMi''@;'; put 'put ''LCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBFbXQoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJp''@;'; put 'put ''bmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxBbXQ9WyJpbnB1dCJdLGttdD1bIioiXSxEbXQ9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gSW10KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''b3B0aW9uIiw3KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLERyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1sZXQgazZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhp''@;'; put 'put ''cy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1''@;'; put 'put ''dEtleWRvd249bmV3IEtyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgS3IsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBLcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRo''@;'; put 'put ''aXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9u''@;'; put 'put ''KCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQo''@;'; put 'put ''e3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEw''@;'; put 'put ''LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFm''@;'; put 'put ''dGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0''@;'; put 'put ''aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRh''@;'; put 'put ''bGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRk''@;'; put 'put ''ZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1z''@;'; put 'put ''ZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVz''@;'; put 'put ''ZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lk''@;'; put 'put ''dGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xv''@;'; put 'put ''c2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNldD8udHlwZT8iT1BUSU9O''@;'; put 'put ''IiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRN''@;'; put 'put ''b3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VE''@;'; put 'put ''YXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMu''@;'; put 'put ''c2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZv''@;'; put 'put ''aWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZv''@;'; put 'put ''Y3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3Zl''@;'; put 'put ''Rm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYodi5jbGFzc0xpc3QuY29udGFpbnMo''@;'; put 'put ''ImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0''@;'; put 'put ''ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxo''@;'; put 'put ''KXtpZigxJmQmJnFhKEFtdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAscUMpfSxpbnB1dHM6e2lu''@;'; put 'put ''cHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2Vs''@;'; put 'put ''ZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3Jl''@;'; put 'put ''In0sbmdDb250ZW50U2VsZWN0b3JzOmttdCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIs''@;'; put 'put ''IiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0''@;'; put 'put ''IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtzYSgpLGRlKDAsImRpdiIsMiksRnQoImtleWRvd24iLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uTWFpbktleWRvd24oTSkpfSksZGUoMSwiaW5wdXQiLDMsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KE0pe3JldHVybiB3dChmKSxtaShoLnZhbHVlLE0pfHwoaC52YWx1ZT1NKSxDdChNKX0pLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dENsaWNrKE0pKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0''@;'; put 'put ''RmlyZWQoTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRNb3VzZWVudGVyKE0pKX0pKCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZvY3VzaW4oTSkpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNvdXQoTSkpfSkoImtleXVwIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0S2V5dXAoTSkpfSksaGUoKSxHdCgzLCJkaXYiLDQpLGRlKDQsImRpdiIsNSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3Qo''@;'; put 'put ''aC5vbkRhdGFMaXN0Q2xpY2soTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUVudGVyKE0pKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0TW91c2VMZWF2ZShNKSl9KSgi''@;'; put 'put ''c2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0U2Nyb2xsKE0pKX0pLGRlKDUsImRpdiIsbnVsbCwxKSxZcig3KSxoZSgpLGd0KDgsSW10LDIsMSwib3B0aW9uIiw2KSxoZSgpKCl9aWYoMiZkKXtjb25zdCBmPWhhKDYpO2ZlKCkseGUoImlkIixoLmlucHV0''@;'; put 'put ''SWQpKCJwbGFjZWhvbGRlciIsaC5wbGFjZWhvbGRlcikscGkoIm5nTW9kZWwiLGgudmFsdWUpLHhlKCJkaXNhYmxlZCIsaC5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoMiksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxmZSgpLFRyKCJoaWRkZW4i''@;'; put 'put ''LCFoLmRhdGFsaXN0T3BlbikseGUoIm5nU3R5bGUiLGxwKDEyLERtdCxoLmlucHV0Q2xpZW50UmVjdC53aWR0aCxoLmlubmVySGVpZ2h0JiZoLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aC5pbm5lckhlaWdodC1oLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxp''@;'; put 'put ''c3RfIitoLmlucHV0SWQpLGZlKDQpLHhlKCJuZ0lmIixmLmNoaWxkcmVuLmxlbmd0aD4wJiZoLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbeWEsbm9lLEEyLGsyLHFsLG5sLCRzXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLFJtdD0oKCk9PntjbGFzcyBje3RyYW5z''@;'; put 'put ''Zm9ybShhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYS5sZW5ndGg8MSlyZXR1cm4gYTtzd2l0Y2goZCl7Y2FzZSJkYXRlIjpyZXR1cm4gT28oYSwiRERNTU1ZWVlZOmhoOm1tOnNzIikuZm9ybWF0KCJERC9NTS9ZWVlZIik7Y2FzZSJ0aW1lIjp7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0aW1lLiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiIpO2NvbnN0IGg9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSxmPXBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSksdj1wYXJzZUludChhLnNwbGl0KCI6IilbMl0pO3JldHVybmAke2g8MTA/IjAi''@;'; put 'put ''K2g6aH06JHtmPDEwPyIwIitmOmZ9OiR7djwxMD8iMCIrdjp2fWB9fXJldHVybiJzdHJpbmciPT10eXBlb2YgYT9hOmEudG9TdHJpbmcoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToi''@;'; put 'put ''ZGF0ZVRpbWVGb3JtYXR0ZXIiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtjb25zdCBMbXQ9WyJpbnB1dCJdLE9tdD1bIioiXTtmdW5jdGlvbiBQbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxPZSgxLCIgLyAiKSxkZSgyLCJzcGFuIiw1KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIpKX0pLE9lKDMpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksVHIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJzZWNvbmQiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLHdyKGEu''@;'; put 'put ''c2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBGbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJsYWJlbCIsNCkoMSwic3BhbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksT2UoMiksaGUoKSxndCgz''@;'; put 'put ''LFBtdCw0LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtUcigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLGZlKCksVHIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2Vs''@;'; put 'put ''ZWN0ZWQpLGZlKCksd3IoYS5sYWJlbCksZmUoKSx4ZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIEhtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw3KSxlbCgzLCJkYXRlVGltZUZvcm1hdHRlciIp''@;'; put 'put ''LEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkRhdGVJbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChMZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1v''@;'; put 'put ''dXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGhlKCkoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLHo4KDMsNSxhLnRlbXAsImRhdGUiKSkoImNsckRhdGUi''@;'; put 'put ''LGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIE5tdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImlucHV0Iiw4KSxGdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChMZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbklucHV0TW91''@;'; put 'put ''c2VPdXQoKSl9KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgidmFsdWUiLGEudmFsdWUpKCJpZCIsYS5pbnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBWbXQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw5LDApLEZ0KCJvbklucHV0Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbklucHV0RmlyZWQoaCkpfSkoIm9uTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChM''@;'; put 'put ''ZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLFlyKDMpLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRN''@;'; put 'put ''b3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpfX1sZXQgRDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVk''@;'; put 'put ''PSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9uSW5wdXRFdmVudD1uZXcgS3IsdGhpcy5mb2N1c2luSW5wdXQ9bmV3''@;'; put 'put ''IEtyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgS3IsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBLcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNoYW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1''@;'; put 'put ''ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25J''@;'; put 'put ''bnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYSksdGhpcy5vbklu''@;'; put 'put ''cHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudGVtcD10aGlzLnZhbHVlP3RoaXMu''@;'; put 'put ''dmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJzdCI9PT1hP3RoaXMubGFiZWw6dGhpcy5z''@;'; put 'put ''ZWNvbmRMYWJlbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShM''@;'; put 'put ''bXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5pbnB1dEVsZW1lbnQ9Zi5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlw''@;'; put 'put ''ZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRFdmVudDoib25JbnB1''@;'; put 'put ''dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LGZlYXR1cmVzOlt3bF0sbmdDb250ZW50U2VsZWN0b3Jz''@;'; put 'put ''Ok9tdCxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siaW5wdXQiLCIiXSxbImNsYXNzIiwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsInNlY29uZExhYmVsQWN0aXZlIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFszLCJj''@;'; put 'put ''bGljayJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiZGF0ZSIsImNsckRhdGUiLCIiLDMsImNsckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiaWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCJdLFsidHlwZSIs''@;'; put 'put ''InRpbWUiLCJzdGVwIiwiMSIsMSwiaW5wdXQtdmFsIiwzLCJpbnB1dCIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3Vz''@;'; put 'put ''IiwiIiwxLCJpbnB1dC12YWwiLDMsIm9uSW5wdXRDaGFuZ2UiLCJvbkxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihzYSgpLGd0KDAsRm10LDQs''@;'; put 'put ''NiwibGFiZWwiLDEpLHNpKDEsMiksZ3QoMixIbXQsNCw4LCJuZy1jb250YWluZXIiLDMpKDMsTm10LDIsNCwibmctY29udGFpbmVyIiwzKSg0LFZtdCw0LDUsIm5nLWNvbnRhaW5lciIsMyksbGkoKSksMiZkJiYoeGUoIm5nSWYiLGgubGFiZWwpLGZlKCkseGUoIm5nU3dpdGNoIixoLnR5cGUp''@;'; put 'put ''LGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidGV4dCIpKX0sZGVwZW5kZW5jaWVzOlt5YSxTMixjcCxkcyxZeCxKTCxzRyxrNmUsUm10XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLFN3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNvbnRleHQpLHRoaXMuaGFz''@;'; put 'put ''Vmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''KEdlKFNsKSxHZShEbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pfX1yZXR1cm4gY30pKCksQm10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIsaD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZClyZXR1cm4gaD8iMTE6MDA6''@;'; put 'put ''MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgTT1hLnNwbGl0KCI6Iik7Zj1uZXcgRGF0ZShNWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50KE1bMV0pKSxmLnNldE1pbnV0''@;'; put 'put ''ZXMocGFyc2VJbnQoTVsyXSkpLGYuc2V0U2Vjb25kcyhwYXJzZUludChNWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IHY9YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhl''@;'; put 'put ''bHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIGg/djpmfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksam10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJh''@;'; put 'put ''bnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYmKGE9''@;'; put 'put ''cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8o''@;'; put 'put ''aCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1''@;'; put 'put ''cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHptdD0oYyxsLGEpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmF9KSxVbXQ9KGMsbCxhLGQpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksWm10PShjLGwsYSxkKT0+KHty''@;'; put 'put ''YW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksV210PShjLGwsYSxkKT0+KHtyYW5nZToiZW5kIixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlz''@;'; put 'put ''RGF0ZVRpbWU6ZH0pO2Z1bmN0aW9uIFltdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLExlKCkubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksRHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gR210''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyMyksT2UoMSwiXG4gICAgICAgICIpLEd0KDIsInByb2dyZXNzIiksT2UoMywiXG4gICAgICAiKSxoZSgpKX1mdW5jdGlvbiAkbXQoYyxsKXsxJmMmJkd0KDAsImRpdiIpfWZ1bmN0aW9uIEttdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIp''@;'; put 'put ''LE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLExlKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHFtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMzMpLGRlKDIsInNwYW4iKSxPZSgzLCJHcm91cCIpLGhlKCkoKX19ZnVuY3Rpb24gWG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDM0''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLmluZGV4O3JldHVybiBDdChMZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIEptdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRp''@;'; put 'put ''bXBsaWNpdDtmZSgpLERyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gUW10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIGU2dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gdDZ0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuaW5kZXgsZj1MZSgpLmluZGV4LHY9TGUoKTtyZXR1cm4gdi5jdXJyZW50UXVlcnlJbmRleD1oLEN0KHYuY3VycmVu''@;'; put 'put ''dENsYXVzZUluZGV4PWYpfSksT2UoMiwiIENob29zZSB2YWx1ZXMgIiksaGUoKSxndCgzLGU2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4LGY9TGUoKS5pbmRleDtMZSgpO2NvbnN0IHY9aGEoMzcpO2Zl''@;'; put 'put ''KDMpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iix2KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHBNKDIsem10LGQsaCxmKSl9fWZ1bmN0aW9uIG42dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gcjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NCksZ3QoMSxuNnQsMSwwLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDUzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1MZSgpLmluZGV4LE09TGUoKSxJPWhhKDMxKSxHPWhhKDMzKTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/STpHKSgibmdUZW1w''@;'; put 'put ''bGF0ZU91dGxldENvbnRleHQiLEpJKDIsVW10LGgsZix2LGEpKX19ZnVuY3Rpb24gaTZ0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBhNnQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uIG82dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLGd0KDIsaTZ0LDEsMCwi''@;'; put 'put ''bmctY29udGFpbmVyIiw1MyksaGUoKSxkZSgzLCJkaXYiLDU3KSxndCg0LGE2dCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCkubmdWYXIsZD1MZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LHY9TGUoKS5pbmRleCxNPUxlKCksST1oYSgzMSksRz1o''@;'; put 'put ''YSgzNSk7ZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9JOkcpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSkkoNCxabXQsaCxmLHYsYSkpLGZlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/STpHKSgibmdUZW1wbGF0ZU91dGxl''@;'; put 'put ''dENvbnRleHQiLEpJKDksV210LGgsZix2LGEpKX19ZnVuY3Rpb24gczZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLE9lKDIsIlZhbHVlIiksaGUoKSxkZSgzLCJpbnB1dCIsNTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3''@;'; put 'put ''dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS5pbmRleCx2PUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkuc2V0VmFyaWFi''@;'; put 'put ''bGVWYWx1ZXMoaCxmLHYpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0O2ZlKDMpLHBpKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gbDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NiksZ3QoMSx0NnQsNCw2LCJkaXYiLDQ3KSgyLHI2dCwyLDcsImRp''@;'; put 'put ''diIsNDgpKDMsbzZ0LDUsMTQsImRpdiIsNDkpKDQsczZ0LDQsMSwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLGZlKCkseGUoIm5nSWYiLCJCRVRXRUVOIiE9''@;'; put 'put ''PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksZmUoKSx4ZSgibmdJZiIsIkJFVFdFRU4iPT09YS5vcGVyYXRv''@;'; put 'put ''ciksZmUoKSx4ZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gYzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMCkoMSwiZGl2IiwzNSkoMiwiZGl2''@;'; put 'put ''IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNyksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi52YXJpYWJsZSxoKXx8KGYudmFyaWFibGU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25z''@;'; put 'put ''dCBmPXd0KGEpLHY9Zi4kaW1wbGljaXQsTT1mLmluZGV4LEk9TGUoKS5pbmRleDtyZXR1cm4gQ3QoTGUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKHYudmFyaWFibGUsTSxJLGgpKX0pLGd0KDQsSm10LDIsMSwib3B0aW9uIiwzOCksaGUoKSgpKCksZGUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVj''@;'; put 'put ''dC1jb250YWluZXIiKSg3LCJsYWJlbCIpLE9lKDgsIk9wZXJhdG9yIiksaGUoKSxkZSg5LCJzZWxlY3QiLDQwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYub3BlcmF0b3IsaCl8fChmLm9wZXJhdG9yPWgpLEN0KGgp''@;'; put 'put ''fSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkuc2V0VmFyaWFibGVPcGVyYXRvcih2LGYub3BlcmF0b3IsTSkpfSksZ3QoMTAsUW10LDIsMSwib3B0aW9uIiwzOCks''@;'; put 'put ''aGUoKSgpKCksZ3QoMTEsbDZ0LDUsNCwiZGl2Iiw0MSksZGUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleCxmPUxlKCkuaW5kZXg7cmV0dXJuIEN0KExlKCkucmVtb3ZlQ2xhdXNlKGgsZikpfSksR3QoMTQsImNs''@;'; put 'put ''ci1pY29uIiw0NCkoMTUsInNwYW4iKSxoZSgpLGRlKDE2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLmluZGV4O3JldHVybiBDdChMZSgpLmFkZENsYXVzZShoKSl9KSxHdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLGhlKCkoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgpLmluZGV4LGY9TGUoKTtUcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoMykseGUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitk''@;'; put 'put ''KyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLHBpKCJ2YWx1ZSIsYS52YXJpYWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsZi5jb2xzKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5vcGVyYXRvciksZmUoKSx4ZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLGZlKCkseGUoIm5nVmFyIiwiREFURSI9''@;'; put 'put ''PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksZmUoMikseGUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIHU2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRp''@;'; put 'put ''diIsMjQpKDEsImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxPZSg2LCJMb2dpYyIpLGhlKCksZGUoNywic2VsZWN0IiwyNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGlt''@;'; put 'put ''cGxpY2l0O3JldHVybiBtaShmLmNsYXVzZUxvZ2ljLGgpfHwoZi5jbGF1c2VMb2dpYz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnNldExvZ2ljKCkpfSksZ3QoOCxLbXQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxHdCg5''@;'; put 'put ''LCJiciIpLGd0KDEwLHFtdCw0LDAsImJ1dHRvbiIsMjgpLGhlKCksZGUoMTEsImRpdiIsMjkpLGd0KDEyLFhtdCwxLDAsImNsci1pY29uIiwzMCkoMTMsYzZ0LDE5LDExLCJkaXYiLDMxKSxoZSgpKCksR3QoMTQsImJyIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgp''@;'; put 'put ''O2ZlKCksVHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDYpLHBpKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSx4ZSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLGZlKCkseGUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLGZlKDIpLHhlKCJuZ0lmIixk''@;'; put 'put ''LmlubmVyV2lkdGg+NzY4KSxmZSgyKSx4ZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24gZDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2Miks''@;'; put 'put ''ZWwoMiwic2FzVG9Kc0RhdGUiKSxlbCgzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEk9Zi5xdWVyeUluZGV4LEc9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5k''@;'; put 'put ''YXRlQ2hhbmdlKGgsdixJLEcsTSkpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19k''@;'; put 'put ''YXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/RGMoMiwzLGQudmFsdWVbaF0pOkRjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIGg2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLGVsKDIsInNhc1RvSnNEYXRlIiksZWwo''@;'; put 'put ''Mywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLmRhdGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9TGUoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxJPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEksdikpfSksaGUoKSxkZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSxlbCg1LCJz''@;'; put 'put ''YXNUb0pzRGF0ZSIpLGVsKDYsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS50aW1lPWgpfSkoIm9uSW5w''@;'; put 'put ''dXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCksZj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1ZXJ5SW5kZXgsST1oLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLmRhdGVUaW1lQ2hhbmdlKGYsTSxJLHYpKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9TGUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSx4ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP3o4KDIsNixkLnZhbHVl''@;'; put 'put ''W2hdLCJzZWNvbmRzIik6ejgoMyw5LGQudmFsdWUsInNlY29uZHMiKSksZmUoMykseGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD95VSg1LDEyLGQudmFsdWVbaF0sInNlY29uZHMiLCEwKTp5VSg2LDE2''@;'; put 'put ''LGQudmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIGY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLGVsKDIsInNlY29uZHNQYXJzZXIiKSxlbCgzLCJzZWNvbmRzUGFyc2VyIiksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEk9Zi5xdWVyeUluZGV4LEc9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS50aW1lQ2hhbmdlKGgsdixJLEcsTSkpfSksaGUoKSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9YS5xdWVy''@;'; put 'put ''eSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9EYygyLDMsZC52YWx1ZVtoXSk6RGMoMyw1LGQudmFsdWUp''@;'; put 'put ''KX19ZnVuY3Rpb24gcDZ0KGMsbCl7MSZjJiYoc2koMCw2MCksZ3QoMSxkNnQsNCw3LCJuZy1jb250YWluZXIiLDYxKSgyLGg2dCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSgzLGY2dCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLGxpKCkpLDImYyYmKHhlKCJuZ1N3aXRjaCIsbC5xdWVyeS5kZHR5''@;'; put 'put ''cGUpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gZzZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksT2UoMSksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPWwuJGltcGxpY2l0O3hlKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksZmUoKSxEcigiICIsYS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIG02dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsZzZ0LDIsMiwib3B0aW9uIiw2NyksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PUxlKCkucXVlcnk7ZmUoKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiB2NnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7eGUoInZhbHVlIixhLk5BTUUpLGZlKCksRHIoIiAiLGEuTkFNRSwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiB5NnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLHY2dCwyLDIsIm9wdGlvbiIsNjkpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpLnF1ZXJ5O2ZlKCkseGUoIm5nSWYiLGEuVFlQRT09PWQudHlwZSl9fWZ1bmN0aW9uIGI2dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIpLGd0KDEseTZ0LDIsMSwibmctY29udGFpbmVyIiwzOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIF82dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYp''@;'; put 'put ''LEZ0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBDdChMZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaCxmKSl9KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIG1pKGYudmFs''@;'; put 'put ''dWUsaCl8fChmLnZhbHVlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaC50YXJnZXQudmFsdWUsdixNKSl9KSgib25BdXRv''@;'; put 'put ''Y29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsST1mLmNsYXVzZUluZGV4O3JldHVybiBDdChMZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sSSkpfSksZ3QoMSxtNnQsMiwxLCJk''@;'; put 'put ''aXYiLDIwKSgyLGI2dCwyLDEsImRpdiIsMjApLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4O3hlKCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLGEudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2''@;'; put 'put ''YWxzXyIrZCsiXyIraCkscGkoInZhbHVlIixhLnZhbHVlKSx4ZSgiZW5hYmxlTG9hZE1vcmUiLGEubm9icz5hLnZhbHVlcy5sZW5ndGgpLGZlKCkseGUoIm5nSWYiLCFhLnZhbHVlVmFyaWFibGUpLGZlKCkseGUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHc2dChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxmZSgpLERyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBDNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAt''@;'; put 'put ''c29mdC1zZWxlY3QiLDcwKSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIG1pKHYudmFsdWVbTV0saCl8fCh2LnZhbHVlW01dPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24o''@;'; put 'put ''KXtjb25zdCBoPXd0KGEpLGY9aC5xdWVyeSx2PWgucXVlcnlJbmRleCxNPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkuc2V0VmFyaWFibGVWYWx1ZXMoZi52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5x''@;'; put 'put ''dWVyeSxNPWYucXVlcnlJbmRleCxJPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KExlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxJKSl9KSxndCgxLHc2dCwyLDIsIm9wdGlvbiIsNjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucmFuZ2UsZD1sLnF1ZXJ5LGg9''@;'; put 'put ''bC5xdWVyeVZhbHVlSW5kZXg7eGUoImlucHV0SWQiLCJ2YWxzLSIrYSsiXyIrbC5xdWVyeUluZGV4KyJfIitsLmNsYXVzZUluZGV4KSxwaSgidmFsdWUiLGQudmFsdWVbaF0pLHhlKCJlbmFibGVMb2FkTW9yZSIsZC5ub2JzPmQudmFsdWVzLmxlbmd0aCkoImRpc2FibGVkIix2b2lkIDAhPT1o''@;'; put 'put ''JiYic3RhcnQiIT09YSYmIWQudmFsdWVbMF0pLGZlKCkseGUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gUzZ0KGMsbCl7MSZjJiYoZGUoMCwiaDUiLDc4KSxPZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiksaGUoKSl9ZnVuY3Rpb24gTTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLmluZGV4LHY9TGUoMikucXVlcnk7cmV0dXJuIG1pKHYudmFsdWVbZl0uY2hlY2tlZCxoKXx8KHYudmFsdWVbZl0uY2hlY2tl''@;'; put 'put ''ZD1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoTGUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLHYsTSkpfSksaGUoKSxkZSgyLCJsYWJlbCIpLE9lKDMpLGhl''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMikucXVlcnk7ZmUoKSxwaSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxmZSgyKSxEcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24geDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlv''@;'; put 'put ''biIsNzkpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxndCgyLE02dCw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5xdWVyeTtmZSgyKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBFNnQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLE9lKDIsIlNlbGVjdCB2YWx1ZXMiKSxoZSgpLGRlKDMsImRpdiIsNzMpLGd0KDQsUzZ0LDIsMCwiaDUiLDc0KSg1LHg2dCwzLDEsInNlY3Rpb24iLDc1KSxoZSgpLGRlKDYsImRpdiIsNzYpKDcsImJ1dHRvbiIsNzcp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsQ3QoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksT2UoOCwiIEFwcGx5ICIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4''@;'; put 'put ''LGg9bC5jbGF1c2VJbmRleCxmPUxlKCk7eGUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSx4ZSgibmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGYuaXNBcnIoYS52YWx1ZSkpfX0hZnVuY3Rpb24gcndlKGMsbCxhKXsoZnVuY3Rpb24gUjllKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW2VjLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksVXlbbF09YyxhJiYoVXlbbF1bZWMuRXh0''@;'; put 'put ''cmFEYXRhXT1hKX0pKGMsbCxhKX0oVG10KTtsZXQgWGVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuY2RmPWYsdGhpcy5jYWNoaW5nPSEwLHRoaXMu''@;'; put 'put ''cm93c19pbmNyZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFtdD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3JzPVsiPSIsIjwiLCI+Iiwi''@;'; put 'put ''PD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEsdGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRoaXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNlUGlja2Vycz0hMSx0aGlz''@;'; put 'put ''LnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1''@;'; put 'put ''c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5x''@;'; put 'put ''dWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMu''@;'; put 'put ''cGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZCl7bGV0IGg9dGhpcy5xdWVy''@;'; put 'put ''eURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQpO2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9dGhpcy5xdWVyeURhdGVUaW1lW2Zd''@;'; put 'put ''fXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChhPT57YS5lbGVtZW50cy5mb3JFYWNoKGQ9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhkLmRk''@;'; put 'put ''dHlwZSkmJmQudmFsdWVWYXJpYWJsZSYmKGQudmFsdWU9IiIsZC52YWx1ZVZhcmlhYmxlPSExKX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpu''@;'; put 'put ''dWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRo''@;'; put 'put ''aXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJl''@;'; put 'put ''ZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLGJjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihiYyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVz''@;'; put 'put ''ZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoYmMoS24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLGJjKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUtu''@;'; put 'put ''LnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSxiYyhLbixhKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMu''@;'; put 'put ''Y29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJjKEtuLGEpLmZpbHRlci5jb2xzKSkpLGJjKEtuLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYmMoS24sYSkuZmlsdGVyLnZhbHMpKSksIiIhPT1iYyhLbixhKS5maWx0''@;'; put 'put ''ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz1iYyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPWJjKEtuLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPWJjKEtuLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9YmMoS24sYSkuZmlsdGVy''@;'; put 'put ''LmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5ncm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgsZix2KXtsZXQgTT10aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPU0pLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoTSxoLGYpfWRhdGVUaW1l''@;'; put 'put ''Q2hhbmdlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYoIiI9PT12LmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47di5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBNPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzBdKSxJPXBhcnNl''@;'; put 'put ''SW50KHYudGltZS5zcGxpdCgiOiIpWzFdKSxHPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgaWU9bmV3IERhdGUodi5kYXRlKSx1ZT1uZXcgRGF0ZShpZS5nZXRGdWxsWWVhcigpLGllLmdldE1vbnRoKCksaWUuZ2V0RGF0ZSgpLE0sSSxHKSx5ZT10aGlzLmhlbHBlclNl''@;'; put 'put ''cnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZSh1ZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbZl09eWUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoeWUsZCxoKX10aW1l''@;'; put 'put ''Q2hhbmdlKGEsZCxoLGYsdil7YT1hLnRhcmdldC52YWx1ZTtsZXQgeWU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAh''@;'; put 'put ''PT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPXllKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKHllLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQpe2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhp''@;'; put 'put ''cy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCB2PTA7djx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO3YrKyl7aWYoZj09PWEmJnY9PT1kfHxb''@;'; put 'put ''bnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0''@;'; put 'put ''aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWUpKWNvbnRpbnVlO2xldCBNPSIiO2NvbnN0IEk9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yLEc9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlOyJC''@;'; put 'put ''RVRXRUVOIj09PUk/TT1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZVsxXX1gOiJJTiI9PT1JfHwiTk9UIElOIj09PUk/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1''@;'; put 'put ''ZS5mb3JFYWNoKGllPT57aWYoaWUuY2hlY2tlZCl7bGV0IHVlPWllLnZhbDsic3RyaW5nIiE9dHlwZW9mIHVlfHwoMCxnZy5pc1NwZWNpYWxNaXNzaW5nKSh1ZSk/TS5sZW5ndGg+MD9NKz1gLCR7dWV9YDpNPWAoJHt1ZX1gOk0ubGVuZ3RoPjA/TSs9YCwnJHt1ZX0nYDpNPWAoJyR7dWV9J2B9''@;'; put 'put ''fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlP009ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''altmXS5lbGVtZW50c1t2XS50eXBlJiYoTT1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5jbGF1''@;'; put 'put ''c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpHLE9QRVJBVE9SX05NOkksUkFXX1ZBTFVFOk18fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZX0pfXJldHVybiBofWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0''@;'; put 'put ''dXJuIFEoZnVuY3Rpb24qKCl7Y29uc3QgTT12LmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09di5jb2xzKXtmb3IobGV0IHFlPTA7cWU8di5jb2xzLmxlbmd0aDtxZSsrKXYuY29sc1txZV0uTkFNRT09PWQmJih2LnNlbFZhci5pbmRleD1xZSk7Y29uc3QgST12LmNvbHNbdi5zZWxWYXIuaW5k''@;'; put 'put ''ZXhdLkREVFlQRSx7c3RhcnRyb3c6Ryxyb3dzOmllfT12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0sdWU9di5yb3dzX2luY3JlbWVudCx5ZT1HK2llO2xldCBFZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKEVlPXYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtj''@;'; put 'put ''b25zdCBqZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhJKTt2LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLE0sRWUseWUsdWUpLnRoZW4ocWU9Pntjb25zdCBydD1xZS52YWxzLHtTVEFSVFJPVzpwdCxST1dTOmR0LE5PQlM6SnR9PXFlLm1ldGFbMF07aWYo''@;'; put 'put ''di5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PXB0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPWR0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPUp0LDE9PT1ydC5sZW5ndGgmJiIiPT09cnRbMF0uRk9STUFUVEVE''@;'; put 'put ''JiYiIj09PXJ0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi5ydC5tYXAodG49Pntjb25zdCBNbj0ibnVtIj09PXFlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgR3I9''@;'; put 'put ''TW4mJigwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHRuLlVORk9STUFUVEVEKT8iLiIrdG4uVU5GT1JNQVRURUQ6dG4uVU5GT1JNQVRURUQ7cmV0dXJuIE1uJiZudWxsPT09R3ImJihHcj0iLiIpLHtmb3JtYXR0ZWQ6amU/dG4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06dG4uRk9STUFUVEVELHVu''@;'; put 'put ''Zm9ybWF0dGVkOkdyfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoSnQtdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVuZGlu''@;'; put 'put ''Z0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDp2bixxdWVyeUluZGV4OkNufT12LnBlbmRpbmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKHZuLENuKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHFlPT57di53aGVyZUNsYXVz''@;'; put 'put ''ZUxvYWRpbmc9ITF9KX19Y2F0Y2goSSl7di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsSSl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IHY9''@;'; put 'put ''IiI7dm9pZCAwIT09Zi5saWJkcyYmKHY9Zi5saWJkcyksZi5jbGVhclZhbHVlcyhkLGgpLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVt''@;'; put 'put ''ZW50c1tkXS5vcGVyYXRvcj0iPSIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhcmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCBpZT0wO2llPGYuY29scy5sZW5ndGg7aWUrKylmLmNvbHNbaWVdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9aWUp''@;'; put 'put ''O2NvbnN0IE09Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1NLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBJPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoST1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0''@;'; put 'put ''b3IoaCxkKSk7Y29uc3QgRz1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhNKTtmLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhhLHYsSSwxLGYuaW5pdGlhbF9yb3dzKS50aGVuKGllPT57Y29uc3QgdWU9aWUudmFscyx7U1RBUlRST1c6eWUsUk9XUzpFZSxOT0JT''@;'; put 'put ''OmplfT1pZS5tZXRhWzBdO2lmKGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5zdGFydHJvdz15ZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ucm93cz1FZSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ubm9icz1qZSxmLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPXVlLm1hcChxZT0+e2NvbnN0IHJ0PSJudW0iPT09aWUuJHZhbHMudmFycy5VTkZPUk1BVFRFRC50eXBlO2xldCBkdD1ydCYmKDAsZ2cuaXNTcGVjaWFsTWlzc2luZykocWUuVU5GT1JNQVRURUQpPyIuIitxZS5VTkZPUk1BVFRFRDpxZS5VTkZPUk1B''@;'; put 'put ''VFRFRDtyZXR1cm4gcnQmJm51bGw9PT1kdCYmKGR0PSIuIikse2Zvcm1hdHRlZDpHP3FlLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOnFlLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpkdH19KS5zbGljZSgwLDJlMyksZi53aGVyZUNsYXVzZUZuKCksZi5zZXRUb0dsb2JhbHMoKSxmLndoZXJlQ2xh''@;'; put 'put ''dXNlTG9hZGluZz0hMSxudWxsIT09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OnFlLHF1ZXJ5SW5kZXg6cnR9PWYucGVuZGluZ0lOVmFsdWVzU2V0O2Yuc2V0SU5WYWx1ZXMocWUscnQpLGYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Zi5jZGYuZGV0ZWN0Q2hhbmdl''@;'; put 'put ''cygpfSkuY2F0Y2goaWU9PntmLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChNKXtmLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixNKX19KSgpfWdldGxvZ2ljKGEpe3RoaXMubG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1zZXRM''@;'; put 'put ''b2dpYygpe3RoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9aXNBcnIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSYmYS5sZW5ndGg+MCYmdHlwZW9mIGFbMF0uY2hlY2tlZDwidSJ9c2VsZWN0ZWRMYWJlbENoYW5nZShhLGQpe2QudmFsdWVWYXJpYWJsZT0iVmFy''@;'; put 'put ''aWFibGUiPT09YSxkLnZhbHVlPSIiLHRoaXMud2hlcmVDbGF1c2VGbigpfXZhcmlhYmxlSW5wdXRDaGFuZ2UoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXMoYSxkLGgpfXNldFZhcmlhYmxlVmFsdWVzKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3Bl''@;'; put 'put ''cmF0b3I7IkJFVFdFRU4iIT09ZiYmIklOIiE9PWYmJiJOT1QgSU4iIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT1hLnRvU3RyaW5nKCkpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0VmFyaWFibGVPcGVyYXRvcihh''@;'; put 'put ''LGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlO2YgaW5zdGFuY2VvZiBBcnJheSYmIklOIiE9PWQmJiJOT1QgSU4iIT09ZCYmKGY9ZiBpbnN0YW5jZW9mIEFycmF5JiYyPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZlswXT9mWzBdOiIi''@;'; put 'put ''KSx0aGlzLmNsZWFyVmFsdWVzT3BlcmF0b3IoYSxoKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0ub3BlcmF0b3I9ZCwoIj0iPT09ZHx8Ij4iPT09ZHx8IjwiPT09ZHx8Ijw9Ij09PWR8fCI+PSI9PT1kfHwiTkUiPT09ZCkmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0u''@;'; put 'put ''ZWxlbWVudHNbYV0udmFsdWU9ZiksIkJFVFdFRU4iPT09ZCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1bXSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaChmKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVu''@;'; put 'put ''dHNbYV0udmFsdWUucHVzaCgiIikpLCgiSU4iPT09ZHx8Ik5PVCBJTiI9PT1kKSYmdGhpcy5zZXRJTlZhbHVlcyhoLGEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0SU5WYWx1ZXMoYSxkKXtjb25zdCBoPVtdLGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Fd''@;'; put 'put ''LmVsZW1lbnRzW2RdLnZhbHVlcztmLmxlbmd0aDwxJiYodGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9e2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkfSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2KyspaC5wdXNoKHtjaGVja2VkOiExLHZhbDpmW3ZdLmZvcm1hdHRlZH0pO3RoaXMuY2xhdXNl''@;'; put 'put ''cy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZT1ofWNsZWFyVmFsdWVzKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLnZhbHVlPSIifWNsZWFyVmFsdWVzT3BlcmF0b3IoYSxkKXtsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0u''@;'; put 'put ''b3BlcmF0b3I7KCJCRVRXRUVOIj09PWh8fCJJTiI9PT1ofHwiTk9UIElOIj09PWh8fCJDT05UQUlOUyI9PT1oKSYmdGhpcy5jbGVhclZhbHVlcyhhLGQpfWhhc0ludmFsaWRDbHVhc2UoYSl7Zm9yKGxldCBkIG9mIGEpaWYoZC5pbnZhbGlkQ2xhdXNlPSExLCIiPT09ZC52YWx1ZSYmIk5FIiE9''@;'; put 'put ''PWQub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YXJpYWJsZXx8bnVsbD09PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhbHVlKXJldHVybiBkLmludmFsaWRDbGF1c2U9ITAsITA7cmV0dXJuIGEuaW52YWxpZENsYXVzZT0hMSwhMX1oYXNJbnZhbGlkR3JvdXBD''@;'; put 'put ''bHVhc2UoKXtmb3IobGV0IGE9MDthPHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7YSsrKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmludmFsaWRDbGF1c2U9ITAs''@;'; put 'put ''ITA7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmludmFsaWRDbGF1c2U9ITF9cmV0dXJuITF9YWRkQ2xhdXNlKGEpe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZv''@;'; put 'put ''TW9kYWwoIkVycm9yIiwiQ2Fubm90IGFkZCBuZXcgY2xhdXNlLCB3aGVuIG9uZSBvciBtb3JlIGNsYXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHkuIik7dGhpcy5jbGF1c2VBbXQucHVzaCgiIiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlw''@;'; put 'put ''ZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KTtsZXQgZD10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljPXR5cGVvZiBkPiJ1Ij8i''@;'; put 'put ''QU5EIjoiT1IiPT09ZD8iT1IiOiJBTkQiLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9YWRkR3JvdXBDbGF1c2UoKXt0aGlzLmhhc0ludmFsaWRHcm91cENsdWFzZSgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiQ2Fubm90IGFkZCBu''@;'; put 'put ''ZXcgY2xhdXNlLCB3aGVuIG9uZSBvciBtb3JlIGNsYXVzZXMgYXJlIGludmFsaWQgb3IgZW1wdHkuIik6KHRoaXMuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVl''@;'; put 'put ''czpbXSxvcGVyYXRvcnM6W119XX0pLHRoaXMuc2V0VG9HbG9iYWxzKCkpfWlzSW5IdG1sQ29sbGVjdGlvbihhLGQpe2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWlmKGRbaF0udmFsdWU9PT1hKXJldHVybiEwO3JldHVybiExfXJlbW92ZUdyb3VwQ2xhdXNlKGEpe3RoaXMuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9iai5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKX1yZW1vdmVDbGF1c2UoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHMuc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX13aGVyZUNsYXVzZUZuKGE9ITEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmNsYXVzZXMpO2lmKGEmJihkLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdKSx2b2lkIDAhPT10aGlzLmxpYmRzKXtsZXQgaD10aGlzLnNhc1N0b3JlU2VydmljZS53aGVyZUNsYXVzZUNyZWF0b3IoZCx0aGlzLmdyb3Vw''@;'; put 'put ''TG9naWMsdGhpcy5saWJkcyk7YXx8KHRoaXMud2hlcmVDbGF1c2U9aC53aGVyZUNsYXVzZSx0aGlzLndoZXJlU3RyaW5nPWguc3RyaW5nKX19bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2UucmVt''@;'; put 'put ''b3ZlUXVlcnkuc3Vic2NyaWJlKGQ9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEs''@;'; put 'put ''YS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVyZUNs''@;'; put 'put ''YXVzZUZuKCkpKX0pLGEuY29sdW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09S24ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUtuLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxLbi5lZGl0''@;'; put 'put ''b3IuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEtuLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04u''@;'; put 'put ''c3RyaW5naWZ5KGgpKSksYS5saWJkc3x8KGEubGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJktuLmVkaXRvci5maWx0ZXIudmFs''@;'; put 'put ''cy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxLbi52aWV3ZXIu''@;'; put 'put ''ZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMoKSxz''@;'; put 'put ''ZXRUaW1lb3V0KCgpPT57bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhpcy52''@;'; put 'put ''YWx1ZXNTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2UodmMpLEdlKFN1KSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlu''@;'; put 'put ''cHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbZGEoW3twcm92aWRlOkJmLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwiIl0sWyJub3RQaWNrZXJSYW5n''@;'; put 'put ''ZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIiXSxbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJd''@;'; put 'put ''LFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1yb3ci''@;'; put 'put ''XSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5l''@;'; put 'put ''LW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2Vs''@;'; put 'put ''ZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJz''@;'; put 'put ''aXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQt''@;'; put 'put ''MTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdy''@;'; put 'put ''YXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1t''@;'; put 'put ''ZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwi''@;'; put 'put ''YnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwi''@;'; put 'put ''Y2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsi''@;'; put 'put ''dHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElk''@;'; put 'put ''IiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsidHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJs''@;'; put 'put ''ZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVkTGFiZWxDaGFuZ2UiLCJ2YWx1''@;'; put 'put ''ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0s''@;'; put 'put ''WzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2RhbCIs''@;'; put 'put ''MywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigx''@;'; put 'put ''JmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmR5bmFtaWNXaGVyZUNsYXVzZSxNKXx8KGguZHluYW1pY1do''@;'; put 'put ''ZXJlQ2xhdXNlPU0pLEN0KE0pfSksaGUoKSxkZSg0LCJsYWJlbCIsNyksT2UoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxoZSgpKCkoKSxkZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksbWkoaC51c2VQaWNrZXJzLE0pfHwoaC51c2VQaWNrZXJzPU0pLEN0KE0pfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC51c2VQaWNrZXJzQ2hhbmdlKCkpfSksaGUoKSxkZSg5LCJsYWJlbCIsNyksT2UoMTAsIiBVc2UgcGlja2VycyAiKSxo''@;'; put 'put ''ZSgpKCkoKSgpLGRlKDExLCJkaXYiLDEwKSgxMiwiZGl2IiwxMSkoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksT2UoMTUsIkdyb3VwIGxvZ2ljIiksaGUoKSxkZSgxNiwic2VsZWN0IiwxMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm''@;'; put 'put ''KSxtaShoLmdyb3VwTG9naWMsTSl8fChoLmdyb3VwTG9naWM9TSksQ3QoTSl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZXRHcm91cExvZ2ljKGguZ3JvdXBMb2dpYykpfSksZ3QoMTcsWW10LDIsMiwib3B0aW9uIiwxMyksaGUoKSgpKCksZGUo''@;'; put 'put ''MTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSxPZSgyMCwiICAgICAgIiksZ3QoMjEsR210LDQsMCwiZGl2IiwxNiksT2UoMjIsIlxuXG4gICAgICAiKSxkZSgyMywiY29kZSIsMTcpLE9lKDI0KSxoZSgpLE9lKDI1LCJcbiAgICAiKSxoZSgpKCkoKSxkZSgyNiwiZGl2IiwxOCkoMjcsImRpdiIs''@;'; put 'put ''MTkpLGd0KDI4LCRtdCwxLDAsImRpdiIsMjApKDI5LHU2dCwxNSw4LCJkaXYiLDIxKSxoZSgpKCksZ3QoMzAscDZ0LDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxJYykoMzIsXzZ0LDMsNywibmctdGVtcGxhdGUiLG51bGwsMSxJYykoMzQsQzZ0LDIsNSwibmctdGVtcGxhdGUiLG51bGwsMixJ''@;'; put 'put ''YykoMzYsRTZ0LDksNCwibmctdGVtcGxhdGUiLG51bGwsMyxJYyl9MiZkJiYoZmUoMykscGkoIm5nTW9kZWwiLGguZHluYW1pY1doZXJlQ2xhdXNlKSxmZSg1KSxwaSgibmdNb2RlbCIsaC51c2VQaWNrZXJzKSxmZSg4KSx4ZSgiZGlzYWJsZWQiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWgu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpLHBpKCJuZ01vZGVsIixoLmdyb3VwTG9naWMpLGZlKCkseGUoIm5nRm9yT2YiLGgubG9naWNPcGVyYXRvcnMpLGZlKDQpLHhlKCJuZ0lmIixoLndoZXJlQ2xhdXNlTG9hZGluZyksZmUoMyksd3IoaC53''@;'; put 'put ''aGVyZUNsYXVzZSksZmUoMyksVHIoImNsci1jb2wtbWQtMTAiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nRm9yT2YiLGguY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W25zLHlhLE4xLFMyLGNwLEhsLG91LEt1LGRzLElkLEJiLFNoLEU3LCRiLEEyLGsyLHFsLE1kLFQyLG5sLCRzLEQ2ZSxT''@;'; put 'put ''dyxCbXQsam10XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLHI0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9b25DbGljayhhKXthLnRhcmdldC5mb2N1cygpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwU3RlYWxGb2N1cyIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2KX0pfX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgVDZ0PVsi''@;'; put 'put ''c2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24gQTZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIGs2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7''@;'; put 'put ''cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCwwKSxnaSgibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCks''@;'; put 'put ''Z3QoNCxBNnQsMSwwLCJjbHItaWNvbiIsOSkoNSxrNnQsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCks''@;'; put 'put ''eGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJNnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gUjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksTGUoKTtj''@;'; put 'put ''b25zdCBoPWhhKDMpLGY9TGUoMikuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gTDZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUo''@;'; put 'put ''MCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSks''@;'; put 'put ''RnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsSTZ0LDEsMCwiY2xyLWljb24iLDkpKDUsUjZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWhhKDMpLGQ9TGUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBPNnQoYyxsKXsxJmMmJkd0KDAs''@;'; put 'put ''ImNsci1pY29uIiwyNil9ZnVuY3Rpb24gUDZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIEY2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxPZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgp''@;'; put 'put ''KX1mdW5jdGlvbiBINnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksZ3QoMSxGNnQsMiwwLCJzcGFuIiwyNSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoKSx4ZSgibmdJZiIsYSl9fWZ1bmN0aW9uIE42dChjLGwpezEmYyYmR3QoMCwiY2xy''@;'; put 'put ''LWljb24iLDExKX1mdW5jdGlvbiBWNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNl''@;'; put 'put ''YXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBCNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwyOSwyKSxnaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0''@;'; put 'put ''KExlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsTjZ0LDEsMCwiY2xyLWljb24iLDkpKDUsVjZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoMykuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVs''@;'; put 'put ''IixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBqNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoMykuJGltcGxpY2l0LHY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNvbHVtbk9uQ2xpY2soaCx2LGYpKX0pLEd0KDIsImNsci1pY29uIiwzMSksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1sLiRpbXBsaWNpdCxkPUxlKDYpO2ZlKCksVHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksZmUoMiksRHIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiB6NnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEI2dCw2LDMsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDMpKDIsajZ0LDQsMywiY2xyLXRyZWUtbm9kZSIsNCksbGkoKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIixhLmNvbHVtbnMpLGZlKCkseGUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIFU2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdCxNPUxlKCk7cmV0dXJuIEN0KGg/IiI6TS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLHYpKX0p''@;'; put 'put ''LHNpKDIsMjEpLGd0KDMsTzZ0LDEsMCwiY2xyLWljb24iLDIyKSg0LFA2dCwxLDAsImNsci1pY29uIiwyMyksbGkoKSxPZSg1KSxoZSgpLGd0KDYsSDZ0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpKDcsejZ0LDMsMiwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9bC5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0LGg9TGUoMikuJGltcGxpY2l0LGY9TGUoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLHhlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZl''@;'; put 'put ''KCkseGUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksRHIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgyKSx4ZSgibmdJZiIsZi5oYXNDb2x1bW5zKX19ZnVuY3Rpb24gWjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbiho''@;'; put 'put ''KXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxndCgxLFU2dCw4LDksImNsci10b29sdGlwIiwxOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMyk7VHIoImNsci1l''@;'; put 'put ''eHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSx4ZSgibmdWYXIiLGQrMT5oLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1''@;'; put 'put ''bmN0aW9uIFc2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0LDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlM''@;'; put 'put ''aXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMiwicCIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25z''@;'; put 'put ''dCBoPWhhKDEpLGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LmxpYj1mLkxJQlJBUllJRCxDdCh2LmxpYnJhcnlPbkNsaWNrKHYubGlifHwiIixmLGgpKX0pLEd0KDMsImNsci1pY29uIiwxNiksT2UoNCksaGUoKSxndCg1LEw2dCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDYsWjZ0''@;'; put 'put ''LDIsNSwiY2xyLXRyZWUtbm9kZSIsMTcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxm''@;'; put 'put ''ZSg0KSxEcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEudGFibGVzKSxmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFk2dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVzZ0LDcsNywiY2xyLXRyZWUtbm9kZSIsMTMpLGxpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gRzZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9bGV0ICQ2dD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBmZCx0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBLcix0aGlzLmhhc0Nv''@;'; put 'put ''bHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0Fm''@;'; put 'put ''dGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''ZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMu''@;'; put 'put ''bGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEtuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFy''@;'; put 'put ''eU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFk''@;'; put 'put ''LmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRl''@;'; put 'put ''ZDohMX0pO2NvbnN0IHY9c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbCh2KSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVlSXRlbXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRo''@;'; put 'put ''aXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Zi5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCg1MCwoKT0+e2YuaGFzQ29sdW1ucz8oZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7''@;'; put 'put ''dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiEwfSkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9YSxmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6''@;'; put 'put ''aCxjb2x1bW5zTG9hZGVkOiExfSkpLGYuY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCkpOmYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KX0pfSkoKX1jb2x1bW5PbkNsaWNrKGEsZCxoKXt0aGlz''@;'; put 'put ''LmxpYj1kLkxJQlJBUllJRCx0aGlzLnRhYmxlPWguVEFCTEVVUkksdGhpcy5jb2x1bW49YS5DT0xVUkl9bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRo''@;'; put 'put ''aXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0''@;'; put 'put ''cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFy''@;'; put 'put ''aWVzUGFnaW5nPSExKX1oYW5kbGVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZCYmZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLmxvYWRNb3JlTGlicmFyaWVzKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8YykoR2UoU3UpLEdlKHUxKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkYy10cmVlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoVDZ0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguc2VhcmNoTGliSW5wdXRMaXN0''@;'; put 'put ''PWYpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic2Nyb2xsIixmdW5jdGlvbih2KXtyZXR1cm4gaC5oYW5kbGVTY3JvbGwodil9KX0saW5wdXRzOntoYXNDb2x1bW5zOiJoYXNDb2x1bW5zIixwYWdpbmc6InBhZ2luZyIsbGlicmFyeUxpc3Q6ImxpYnJhcnlMaXN0In0s''@;'; put 'put ''b3V0cHV0czp7dGFibGVPbkNsaWNrRW1pdHRlcjoidGFibGVPbkNsaWNrRW1pdHRlciIsbGlicmFyeU9uQ2xpY2tFbWl0dGVyOiJsaWJyYXJ5T25DbGlja0VtaXR0ZXIifSxmZWF0dXJlczpbd2xdLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxp''@;'; put 'put ''YlRyZWVOb2RlIiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNo''@;'; put 'put ''LXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwi''@;'; put 'put ''bmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1l''@;'; put 'put ''eHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3''@;'; put 'put ''aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsi''@;'; put 'put ''YXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsi''@;'; put 'put ''c2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItdHJlZSIpLGd0KDEsRDZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixZNnQsMiwxLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDQpLGhlKCksZ3QoMyxHNnQsMywwLCJkaXYiLDUpKSwyJmQmJihmZSgpLHhlKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLHhlKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLHhlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W25zLHlh''@;'; put 'put ''LFMyLGNwLEVoLFBkLGZnLEhsLGowLEwyLFoxLHY3LGI3LHk3LHFsLG5sLCRzLFN3LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEs2dD1bInJlc2l6ZUJveCJdLHE2dD1bImRyYWdIYW5kbGVDb3JuZXIiXSxYNnQ9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVu''@;'; put 'put ''OmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLEo2dD0oYyxsKT0+KHt4OmMseTpsfSk7ZnVuY3Rpb24gUTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksVXUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixh''@;'; put 'put ''LmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIGU4dChjLGwpezEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsMzgpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gdDh0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDApLE9lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlvbiBuOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw''@;'; put 'put ''LCJkYy10cmVlIiw0MSksRnQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLnRhYmxlT25DbGljayho''@;'; put 'put ''KSl9KSxoZSgpfTImYyYmeGUoImxpYnJhcnlMaXN0IixMZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gcjh0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDIpLE9lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksaGUoKSl9ZnVuY3Rpb24gaTh0KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIGE4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3Bh''@;'; put 'put ''Z2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLE9lKDMsIk1pbmltaXplIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIG84dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qodi5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksT2UoMywiUmVzdG9yZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBzOHQoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxPZSgyKSxndCgzLGk4dCwxLDAsImNsci1zcGlubmVyIiw0NSks''@;'; put 'put ''aGUoKSxkZSg0LCJkaXYiKSg1LCJhIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIs''@;'; put 'put ''MTkpLE9lKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksaGUoKSgpLGd0KDksYTh0LDQsMCwiYSIsNDgpKDEwLG84dCw0LDAsImEiLDQ4KSxkZSgxMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiB2LmNsb3Nl''@;'; put 'put ''KGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsNDkpLGRlKDEzLCJzcGFuIiwxOSksT2UoMTQsIkNsb3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7VHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxl''@;'; put 'put ''Y3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgyKSxWZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSks''@;'; put 'put ''ZmUoNCkseGUoIm5nSWYiLCFhLm1pbmltaXplZCksZmUoKSx4ZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBsOHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxEcigiICIsYSwiICIpfX1mdW5jdGlv''@;'; put 'put ''biBjOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDUzKSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw1NCwwKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9aGEoMyksdj1MZSgpLm5nVmFyO3JldHVybiBDdChMZSgpLm9uQ29sc2Vh''@;'; put 'put ''cmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLGd0KDQsbDh0LDIsMSwib3B0aW9uIiw1NSksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMikseGUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIs''@;'; put 'put ''ITApLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiB1OHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gZDh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykub25Db2xSZW1vdmUoaCkpfSksaGUoKX19ZnVuY3Rpb24gaDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLE9lKDIpLGd0KDMsdTh0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLGd0''@;'; put 'put ''KDQsZDh0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5uZ1ZhcixoPUxlKCk7ZHJlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLFRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlI''@;'; put 'put ''ZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLHhlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLFV1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1o''@;'; put 'put ''LnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCkseGUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiBmOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJwIiwxMCksT2UoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEZ0KCJjZGtE''@;'; put 'put ''cm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgyKS5jb2x1bW5zRHJvcChoKSl9KSxndCg0LGg4dCw1LDEzLCJkaXYiLDU3KSxoZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkubmdWYXI7ZmUoMykseGUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFk''@;'; put 'put ''ZXJzVmlzaWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIHA4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTEpLGd0KDEsYzh0LDUsMywibmctY29udGFpbmVyIiw1MikoMixmOHQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC5uZ1ZhcjtmZSgpLHhlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLGZlKCkseGUoIm5nSWYiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBnOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLmNvbGxhcHNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIG04dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9''@;'; put 'put ''TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIHY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1oYSgx''@;'; put 'put ''Nik7cmV0dXJuIEN0KExlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlvbiB5OHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw4OSksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gYjh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsOTApLE9lKDEsIkxvYWRpbmcu''@;'; put 'put ''Li4iKSxoZSgpKX1mdW5jdGlvbiBfOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsOTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9aGEoMTYpO3JldHVybiBMZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChm''@;'; put 'put ''LnZhbHVlPSIiKX0pLGhlKCl9fWZ1bmN0aW9uIHc4dChjLGwpezEmYyYmKGRlKDAsImRpdiIsOTUpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gQzh0KGMsbCl7aWYoMSZjJiZHdCgwLCJob3QtdGFibGUiLDk2KSwyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCku''@;'; put 'put ''JGltcGxpY2l0LGg9TGUoKTt4ZSgiaG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIrZC5pZCkoInJlYWRPbmx5IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2VyKSgiY29weVBhc3RlIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4''@;'; put 'put ''dE1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmll''@;'; put 'put ''d2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52''@;'; put 'put ''aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZp''@;'; put 'put ''ZXdib3hUYWJsZXNbYV0uaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIFM4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsdzh0LDIsMCwiZGl2Iiw5MykoMixDOHQsMSwxNywiaG90LXRhYmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1MZSgpLiRp''@;'; put 'put ''bXBsaWNpdDtfZCgiZGlzcGxheSIsZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgpLHhlKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLGZlKCkseGUoIm5nSWYiLGE+LTEpfX1mdW5jdGlvbiBNOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDYzLDEpLEZ0KCJtb3Vz''@;'; put 'put ''ZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9''@;'; put 'put ''KSxkZSgyLCJkaXYiLDY0KSgzLCJzcGFuIiw2NSksT2UoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxndCg2LGc4dCwxLDAsImNsci1pY29uIiw2NykoNyxtOHQsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSku''@;'; put 'put ''JGltcGxpY2l0O3JldHVybiBDdChMZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIp''@;'; put 'put ''LEZ0KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9aGEoMSksTT1oYSgxMSk7cmV0dXJuIEN0KExlKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0''@;'; put 'put ''Iiw3NSwzKSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1oYSgxNik7cmV0dXJuIEN0KExlKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLGd0KDE3LHY4dCwxLDAsImNsci1pY29uIiw3NikoMTgseTh0LDIsMCwic3BhbiIsNzcpLGhlKCks''@;'; put 'put ''ZGUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2Vh''@;'; put 'put ''cmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMjIsImxhYmVsIiksT2UoMjMsIk51bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYiLDQ0KSxndCgyNSxiOHQsMiwwLCJzcGFuIiw3OSkoMjYsXzh0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPWhhKDE2KTtyZXR1cm4gTGUoKS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxPZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLEZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgpLGd0KDMyLFM4dCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTtfZCgiZGlzcGxheSIsYS5taW5p''@;'; put 'put ''bWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLFRyKCJmb2N1c2VkIixhLmZvY3VzZWQpLHhl''@;'; put 'put ''KCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsbHAoMzQsSjZ0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksVmYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSx4ZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLHhlKCJuZ0lmIixh''@;'; put 'put ''LmNvbGxhcHNlZCksZmUoMykseGUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSxfZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSx4ZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMikseGUoIm5nSWYiLCFhLnNlYXJj''@;'; put 'put ''aExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMykscGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSxUcigiZmlsdGVyLWFjdGl2ZSIs''@;'; put 'put ''IjAiIT09YS5maWx0ZXJfcGspLGZlKDIpLHdyKGEuZmlsdGVyVGV4dCksZmUoKSxUcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksZmUoKSx4ZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiB4OHQoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1x''@;'; put 'put ''dWVyeSIsOTcsNCksMiZjKXtjb25zdCBhPUxlKCk7eGUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IEk2ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFs''@;'; put 'put ''fXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5f''@;'; put 'put ''dmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyxpZSx1ZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1JLHRoaXMucm91dGVyPUcsdGhpcy5hY3RpdmF0ZWRSb3V0ZT1pZSx0aGlzLmNkZj11ZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEtyLHRoaXMubGli''@;'; put 'put ''aW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IG1o''@;'; put 'put ''LlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dp''@;'; put 'put ''dGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczoh''@;'; put 'put ''MCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0h''@;'; put 'put ''MSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2Jv''@;'; put 'put ''eF9saW1pdHx8Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgWW19bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5h''@;'; put 'put ''bGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7''@;'; put 'put ''YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRl''@;'; put 'put ''ZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJ''@;'; put 'put ''bml0KCl7fWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2Fk''@;'; put 'put ''ZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxl''@;'; put 'put ''OmEubGliVGFibGUsbGlicmFyeTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0RhdGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxz''@;'; put 'put ''ZXRUaW1lb3V0KCgpPT57ZC5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6''@;'; put 'put ''ZSIpLGQuc25hcFRvR3JpZCgpfSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhp''@;'; put 'put ''cy50YWJsZXM9ZixkJiYoZC50YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQubG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlz''@;'; put 'put ''O3JldHVybiBRKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBNPWgudmlld2JveFRhYmxlcy5maW5kKEk9Pkkudmlld2JveElkPT09ZC5pZCk7aC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihJPT57''@;'; put 'put ''TSYmKE0uaG90VGFibGUuZGF0YT1JLnZpZXdkYXRhKSxmKG51bGwpfSkuY2F0Y2goKCk9Pnt2KCl9KX0pfSkoKX1sb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsST1oLnZpZXdib3hUYWJsZXMu''@;'; put 'put ''ZmluZChHPT5HLnZpZXdib3hJZD09PWQuaWQpO0kmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oRz0+e0k/TT0hMDpJPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3''@;'; put 'put ''Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOmFMKGguaG90VGFibGVEZWZhdWx0KX0sSS5ob3RUYWJsZS5kYXRhPUcudmlld2RhdGEsSS5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9Ry4kdmlld2RhdGEsSS5ob3RUYWJsZS5jb2xzPUcuY29scyx6ZWUoSS5ob3RUYWJsZS5jb2xzLFtdLEcuJHZpZXdk''@;'; put 'put ''YXRhKTtsZXQgaWU9W10sdWU9W107Zm9yKGxldCB5ZSBpbiBHLnZpZXdkYXRhWzBdKXllJiZ1ZS5wdXNoKHllKTtmb3IobGV0IHllPTA7eWU8dWUubGVuZ3RoO3llKyspaWUucHVzaCh7ZGF0YTp1ZVt5ZV19KTtJLmhvdFRhYmxlLmhlYWRlclBrcz1hTChHLnNhc3BhcmFtc1swXS5QS19GSUVM''@;'; put 'put ''RFMuc3BsaXQoIiAiKSksSS5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPXVlLmZpbHRlcih5ZT0+IUkuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKHllKSksSS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWFMKEkuaG90VGFibGUuYWxsQ29sSGVhZGVycyksSS5ob3RUYWJsZS5jb2xIZWFk''@;'; put 'put ''ZXJzVmlzaWJsZT11ZS5maWx0ZXIoeWU9PkkuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKHllKSksSS5ob3RUYWJsZS5jb2xIZWFkZXJzPXVlLEkuaG90VGFibGUuY29sdW1ucz1pZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oSS5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3Zl''@;'; put 'put ''PWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoeWUsRWUpPT57Y29uc3QgamU9dWVbeWVdLHFlPUkuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKGplKTtxZT4tMSYmKEkuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UocWUsMSksSS5ob3RUYWJsZS5jb2xIZWFkZXJz''@;'; put 'put ''VmlzaWJsZVtFZV09amUpfSkpOkkuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5JLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxJLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUkuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKHll''@;'; put 'put ''PT55ZSksTXx8aC52aWV3Ym94VGFibGVzLnB1c2goSSksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEcucXVlcnkpLGQuZmlsdGVyVGV4dD1HLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKEkuaG90VGFibGUuY29s''@;'; put 'put ''SGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgeWU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7eWU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOkkuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooRWUsamUpPT57Y29uc3QgcWU9''@;'; put 'put ''eWU/LmNvbFRvUHJvcChFZSk7cWUmJkkuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YocWUpPi0xJiZqZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxqZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSkseWU/LnJl''@;'; put 'put ''bmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSksZigpfSkuY2F0Y2goRz0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihHKSx2KCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtk''@;'; put 'put ''LnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMu''@;'; put 'put ''ZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0''@;'; put 'put ''eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJy''@;'; put 'put ''ZXNpemUiKX0pLHt3aWR0aDp2LGhlaWdodDpNfX1kcmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPXYud2lkdGgsaC5oZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0o''@;'; put 'put ''KXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixNKT0+di5uYXRpdmVF''@;'; put 'put ''bGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj1kLndpZHRoLWYud2lkdGgsTT1kLmhlaWdodC1mLmhl''@;'; put 'put ''aWdodDt2Kz01LE0rPTUsIngiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7TX1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9''@;'; put 'put ''cHgsICR7TX1weClgKX1mb2N1c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYu''@;'; put 'put ''bGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LE09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxJPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVu''@;'; put 'put ''Z3RoLzIpLHVlPShhLTUqKE0rMSkpL00seWU9KGEtNSooSSsxKSkvSTtsZXQgamU9MCxydD0oZC0yNTAtNjApLzIscHQ9MCxkdD0wO2ZvcihsZXQgSnQ9MDtKdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7SnQrKyl7bGV0IHZuPXRoaXMudmlld2JveGVzW0p0XSxDbj0hKEp0Pk0tMSk7Y29uc3Qg''@;'; put 'put ''dG49Q24/dWU6eWU7IUNuJiYwPT09ZHQmJihwdD0wLGR0KyssamU9MCksdm4ueD01K2plK3B0Kih0bis1KSx2bi55PTI1MCtkdCoocnQrNSksdm4ud2lkdGg9dG4sdm4uaGVpZ2h0PXJ0LHB0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRs''@;'; put 'put ''ZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hD''@;'; put 'put ''aGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQs''@;'; put 'put ''dGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2Vk''@;'; put 'put ''KCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4t''@;'; put 'put ''MSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmRlZXBDbG9uZShoWiksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxl''@;'; put 'put ''Y3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09''@;'; put 'put ''YS5jb250YWluZXI/ZDFlKGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBWRmUoYyxsLGEsZCl7Y29uc3QgaD1BeChhLGMubGVuZ3RoLTEpLGY9QXgoZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEp''@;'; put 'put ''WzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFi''@;'; put 'put ''bGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEp''@;'; put 'put ''LGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRh''@;'; put 'put ''YmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxl''@;'; put 'put ''LmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRh''@;'; put 'put ''YmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5z''@;'; put 'put ''ZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0''@;'; put 'put ''Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJs''@;'; put 'put ''ZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2lu''@;'; put 'put ''ZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2Jv''@;'; put 'put ''eENoYW5nZWQoKSxLbi52aWV3Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGhaKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVy''@;'; put 'put ''biB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVtZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBudWxs''@;'; put 'put ''PT09TS52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dy''@;'; put 'put ''b3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgTT17ZmlsdGVyQ2xhdXNlczpbXX07di5lbGVtZW50cy5mb3JFYWNoKEk9PntNLmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuZGVlcENsb25lKEkpKX0pLE0uY2xhdXNlTG9naWM9di5jbGF1c2VMb2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTSkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3Ro''@;'; put 'put ''aXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4odj0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gp''@;'; put 'put ''LnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlz''@;'; put 'put ''O3JldHVybiBRKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLE09cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgST1oLnZpZXdib3hUYWJsZXMuZmluZChHPT5HLnZpZXdib3hJZD09PWQuaWQpO0kmJih5''@;'; put 'put ''aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVtZXJpYyx2LE0pLnRoZW4oRz0+e0cuc2FzcGFyYW1zfHxHLnZpZXdEYXRhP0kuaG90VGFibGUuZGF0YT1HLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKEc9PntoLmxvZ2dlclNlcnZp''@;'; put 'put ''Y2UuZXJyb3IoRyl9KSxkLnNlYXJjaExvYWRpbmc9ITEpfSkoKX1yZWxvYWRUYWJsZURhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVsZCBkLnJlbG9hZERhdGEoaCxhKSxh''@;'; put 'put ''LmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkoKX11cGRhdGVIb3RDb2x1bW5zKGEsZCl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCksdGhpcy5zZXRDb2x1bW5PcmRlcihkKX11cGRhdGVDb2x1bW5PcmRlckhvdChhLGQsaCl7''@;'; put 'put ''Y29uc3QgZj10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShoKTtpZihmKXtjb25zdCB2PWYucHJvcFRvQ29sKGEpO2YuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbih2LGQpLGYucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihoKX19dGFibGVFZGl0RXhpc3Rz''@;'; put 'put ''KGEpe2NvbnN0IGQ9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsaD1hLmxpYnJhcnk7cmV0dXJuISFkW2hdJiZkW2hdLmluY2x1ZGVzKGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZChoPT5oLmlkPT09YSk7aWYoZCl7Y29uc3QgaD10aGlzLmNy''@;'; put 'put ''ZWF0ZUNvbHVtbk9yZGVyKGEpO2QuY29sdW1ucz1oLmxlbmd0aD4wP2g6ZC5jb2x1bW5zfXRoaXMudmlld2JveENoYW5nZWQoKX1jcmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFkKXJldHVybltdO2NvbnN0IGg9ZC5nZXRDb2xI''@;'; put 'put ''ZWFkZXIoKSxmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnM7aWYoIWYpcmV0dXJuW107Y29uc3Qgdj10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LE09W107cmV0dXJuIGgubWFwKChJ''@;'; put 'put ''LEcpPT57aWYoRzx2KXtjb25zdCBpZT1mLmluZGV4T2YoSSk7aWU+LTEmJk0ucHVzaChpZSl9fSksTX11cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCl7Y29uc3QgaD10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShkKTtpZihoKXtjb25zdCBmPWEubWFwKHY9PmgucHJvcFRvQ29sKHYpKTto''@;'; put 'put ''LnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Db2x1bW5zOntjb2x1bW5zOmZ9fSksaC5yZW5kZXIoKX19Z2V0Vmlld2JveEhvdEluc3RhbmNlKGEpe3JldHVybiBhP3RoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKGBob3RJbnN0YW5jZV92aWV3Ym94XyR7YX1gKTp2b2lkIDB9dmll''@;'; put 'put ''d2JveENoYW5nZWQoKXtsZXQgYTtjb25zdCBkPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7ZC5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpkfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczphfSks''@;'; put 'put ''dGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoS24udmlld2JveGVzW2EuaWRdfHwoS24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaFopKSxhLnF1ZXJ5JiZhLnF1''@;'; put 'put ''ZXJ5Lmxlbmd0aD4wKXtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGY9PmYudmlld2JveElkPT09YS5pZCksaD1gdmlld2JveGVzLiR7YS5pZH1gO0tuLnZpZXdib3hlc1thLmlkXS5maWx0ZXIucXVlcnk9YS5xdWVyeSxLbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLmxpYmRzPWEu''@;'; put 'put ''bGlicmFyeSsiLiIrYS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGgsZD8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7bGV0IGQ9IiI7cmV0dXJuIGEubWFwKChoLGYpPT57ZCs9YCR7aC5pZH0tJHtoLmxpYnJhcnl9LSR7''@;'; put 'put ''aC50YWJsZX0tJHtoLndpZHRofS0ke2guaGVpZ2h0fS0ke2gueH0tJHtoLnl9LSR7aC5jb2xsYXBzZWQ/MTowfS0ke2gubWluaW1pemVkPzE6MH0tJHtoLmZpbHRlcl9wa3x8MH0ke2guY29sdW1ucyYmaC5jb2x1bW5zLmxlbmd0aD4wPyItIitoLmNvbHVtbnM/LmpvaW4oIiwiKToiIn1gLGYh''@;'; put 'put ''PT1hLmxlbmd0aC0xJiYoZCs9IjsiKX0pLGR9ZGVjb2RlVXJsRGF0YShhKXtsZXQgaD1bXTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcCh2PT57Y29uc3QgTT12LnNwbGl0KCItIik7aC5wdXNoKHtpZDpwYXJzZUludChNWzBdKSxsaWJyYXJ5Ok1bMV0sdGFibGU6TVsyXSx3aWR0aDpwYXJzZUlu''@;'; put 'put ''dChNWzNdKSxoZWlnaHQ6cGFyc2VJbnQoTVs0XSkseDpwYXJzZUludChNWzVdKSx5OnBhcnNlSW50KE1bNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KE1bN10pLG1pbmltaXplZDohIXBhcnNlSW50KE1bOF0pLGNvbHVtbnM6TVsxMF0/LnNwbGl0KCIsIikubWFwKEk9PnBhcnNlSW50KEkpKXx8''@;'; put 'put ''W10sZmlsdGVyX3BrOk1bOV19KX0pLGh9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShXYSksR2UodTEpLEdlKEJzKSxHZSh2YyksR2Uoa2gpLEdlKFNkKSxHZShTdSks''@;'; put 'put ''R2UoTHMpLEdlKEN1KSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihxYShLNnQsNSkscWEocTZ0LDUpKSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJiho''@;'; put 'put ''LnJlc2l6ZUJveFF1ZXJ5PWYpLENpKGY9U2koKSkmJihoLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1mKX19LGlucHV0czp7dmlld2JveE1vZGFsOiJ2aWV3Ym94TW9kYWwifSxvdXRwdXRzOnt2aWV3Ym94TW9kYWxDaGFuZ2U6InZpZXdib3hNb2RhbENoYW5nZSJ9LGRlY2xzOjU2LHZhcnM6MjMs''@;'; put 'put ''Y29uc3RzOltbImlucHV0IiwiIl0sWyJyZXNpemVCb3giLCIiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xy''@;'; put 'put ''LWZsZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtLTAgdmlld2JveC1saW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0Vt''@;'; put 'put ''aXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAt''@;'; put 'put ''bWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIx''@;'; put 'put ''OSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNsYXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9k''@;'; put 'put ''YWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ2aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFn''@;'; put 'put ''IiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwt''@;'; put 'put ''Ym9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5n''@;'; put 'put ''Il0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGltaXQtbm90aWNlIl0sWzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLCJsaWJyYXJ5''@;'; put 'put ''TGlzdCJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50''@;'; put 'put ''ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3Zl''@;'; put 'put ''Iiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0b20tbGVmdCBtbC0zIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xy''@;'; put 'put ''U21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNoIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwi''@;'; put 'put ''U2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsInZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtEcm9wTGlzdERyb3BwZWQiLCJjZGtEcm9wTGlz''@;'; put 'put ''dERhdGEiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJh''@;'; put 'put ''Z0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJj''@;'; put 'put ''ZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRy''@;'; put 'put ''YWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsxLCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUg''@;'; put 'put ''ZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIsMSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiY2RrRHJhZ01vdmVkIiwiaWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxl''@;'; put 'put ''eCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxb''@;'; put 'put ''ImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNv''@;'; put 'put ''biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsx''@;'; put 'put ''LCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwiY29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hh''@;'; put 'put ''cGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJj''@;'; put 'put ''b250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29w''@;'; put 'put ''eVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1''@;'; put 'put ''bW5SZXNpemUiLCJsaWNlbnNlS2V5Iiw0LCJuZ0lmIl0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlD''@;'; put 'put ''b2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dz''@;'; put 'put ''IiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSJdLFszLCJ2aWV3Ym94SWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDUpLEZ0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSh2KX0pLGRlKDEsImgzIiw2KSxPZSgyLCIgVmlld2JveGVzICIpLGd0KDMsUTZ0LDIsMiwic3BhbiIsNyksaGUoKSxkZSg0LCJkaXYiLDgpKDUsImRpdiIsOSkoNiwicCIsMTApLE9lKDcsIkFkZCBuZXciKSxoZSgpLEd0KDgsImhyIiwxMSksZ3QoOSxlOHQsMiwwLCJkaXYiLDEyKSgxMCx0''@;'; put 'put ''OHQsMiwwLCJwIiwxMykoMTEsbjh0LDEsMSwiZGMtdHJlZSIsMTQpLGhlKCksZGUoMTIsImRpdiIsMTUpKDEzLCJkaXYiLDE2KSgxNCwicCIsMTApLE9lKDE1LCJDdXJyZW50bHkgb3BlbiIpLGhlKCksZGUoMTYsImRpdiIpKDE3LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBoLnNuYXBUb0dyaWQoKX0pLEd0KDE4LCJjbHItaWNvbiIsMTgpLGRlKDE5LCJzcGFuIiwxOSksT2UoMjAsIlNuYXAgdmlld2JveGVzIHRvIGdyaWQiKSxoZSgpKCksZGUoMjEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWluaW1pemVBbGwoKX0pLEd0KDIyLCJj''@;'; put 'put ''bHItaWNvbiIsMjApLGRlKDIzLCJzcGFuIiwxOSksT2UoMjQsIk1pbmltaXplIGFsbCB2aWV3Ym94ZXMiKSxoZSgpKCksZGUoMjUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdG9yZUFsbCgpfSksR3QoMjYsImNsci1pY29uIiwyMSksZGUoMjcsInNwYW4iLDE5''@;'; put 'put ''KSxPZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIiksaGUoKSgpKCkoKSxHdCgyOSwiaHIiKSxndCgzMCxyOHQsMiwwLCJwIiwyMikoMzEsczh0LDE1LDEwLCJkaXYiLDIzKSxkZSgzMiwiZGl2IiwyNCkoMzMsInAiLDI1KSxPZSgzNCksaGUoKSgpLEd0KDM1LCJociIpLGd0KDM2LHA4dCwz''@;'; put 'put ''LDIsImRpdiIsMjYpLGhlKCkoKSxkZSgzNywiZGl2IiwyNykoMzgsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC52aWV3Ym94TW9kYWw9ITF9KSxPZSgzOSwiIE9rICIpLGhlKCkoKSgpLGRlKDQwLCJkaXYiLDI5KSxndCg0MSxNOHQsMzMsMzcsImRpdiIsMzAp''@;'; put 'put ''LGhlKCksZGUoNDIsImNsci1tb2RhbCIsMzEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmZpbHRlcix2KXx8KGguZmlsdGVyPXYpLHZ9KSxkZSg0MywiaDMiLDMyKSxPZSg0NCwiIEZpbHRlciBmb3Igdmlld2JveCB0YWJsZTogIiksZGUoNDUsInNw''@;'; put 'put ''YW4iKSxPZSg0NiksaGUoKSgpLGRlKDQ3LCJkaXYiLDMzKSxndCg0OCx4OHQsMiwxLCJhcHAtcXVlcnkiLDM0KSxoZSgpLGRlKDQ5LCJkaXYiLDI3KSg1MCwiYnV0dG9uIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc2V0RmlsdGVyKCl9KSxPZSg1MSwiIHJlc2V0IGZp''@;'; put 'put ''bHRlciAiKSxoZSgpLGRlKDUyLCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZmlsdGVyPSExfSksT2UoNTMsIiBDYW5jZWwgIiksaGUoKSxkZSg1NCwiYnV0dG9uIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnNlbmRDbGF1c2UoKX0pLE9l''@;'; put 'put ''KDU1LCIgT2sgIiksaGUoKSgpKCkpLDImZCYmKHhlKCJjbHJNb2RhbE9wZW4iLGgudmlld2JveE1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZlKDMpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZp''@;'; put 'put ''bml0eSksZmUoNikseGUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC52aWV3Ym94TGltaXRSZWFjaGVkKSxmZSgpLHhlKCJuZ0lmIixoLnZpZXdib3hNb2RhbCksZmUoMTkpLHhlKCJuZ0lmIixoLnZpZXdib3hlcy5sZW5ndGg8MSksZmUoKSx4ZSgibmdGb3JP''@;'; put 'put ''ZiIsaC52aWV3Ym94ZXMpLGZlKDMpLERyKCIgQ29uZmlndXJhdGlvbiAoIixudWxsIT1oLnNlbGVjdGVkVmlld2JveFRhYmxlJiZoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0PyIjIisobnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94VGFibGUudmlld2JveElkKSsiICIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hMaWJEYXRhc2V0KToic2VsZWN0IHZpZXdib3ggZnJvbSBhYm92ZSIsIikgIiksZmUoMikseGUoIm5nVmFyIixwTSgxOSxYNnQs''@;'; put 'put ''bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbixudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVj''@;'; put 'put ''dGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZSxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZp''@;'; put 'put ''ZXdib3hUYWJsZS5ob3RUYWJsZS5oZWFkZXJQa3MpKSxmZSg1KSx4ZSgibmdGb3JPZiIsaC52aWV3Ym94ZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksVXUoIiAjIixudWxsPT1o''@;'; put 'put ''LmZpbHRlcmluZ1ZpZXdib3g/bnVsbDpoLmZpbHRlcmluZ1ZpZXdib3guaWQsIiAiLGguZmlsdGVyTGliZHMsIiAiKSxmZSgyKSx4ZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLHhlKCJjbHJMb2FkaW5nIixoLmZpbHRlckxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyx5YSxIbCxvdSxLdSxq''@;'; put 'put ''MCxQMixkcyxRMWUsSWQsQmIsU2gsWjEsUmQsbDcsQTIsazIsTWQsbmwsbzcsJHMsYnAsWGVlLERfLGIxZSx5MWUsVFksdjFlLGs2ZSwkNnQsU3csdEVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksUjZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlT3Zl''@;'; put 'put ''cj1uZXcgS3IsdGhpcy5maWxlRHJvcD1uZXcgS3IsdGhpcy5lbGVtZW50PWF9b25Ecm9wKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI/LmZpbGVzLGg9W107aWYoZClmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyloLnB1c2goZFtmXSk7dGhpcy51''@;'; put 'put ''cGxvYWRlcj8uYWRkVG9RdWV1ZShoKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpLHRoaXMuZmlsZURyb3AuZW1pdChoKX1vbkRyYWdPdmVyKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI7aWYoZCl7aWYoLTE9PT1kLnR5cGVzLmluZGV4T2YoIkZpbGVz''@;'; put 'put ''IikpcmV0dXJuO2QuZHJvcEVmZmVjdD0iY29weSJ9dGhpcy5maWxlT3Zlci5lbWl0KCEwKX1vbkRyYWdMZWF2ZShhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChhKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpfV9wcmV2ZW50QW5kU3RvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFn''@;'; put 'put ''YXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZk''@;'; put 'put ''JiZGdCgiZHJvcCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Ecm9wKHYpfSkoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBs''@;'; put 'put ''b2FkZXIifSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9fSl9fXJldHVybiBjfSkoKSxMNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgS3IsdGhpcy5lbGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0''@;'; put 'put ''aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQo''@;'; put 'put ''YSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVTZWxlY3RlZDoi''@;'; put 'put ''ZmlsZVNlbGVjdGVkIn19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEU4dChjLGwpezEmYyYmKGRlKDAsInAiLDgpLE9lKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4gIiksaGUoKSl9ZnVuY3Rpb24gVDh0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiY2xyLWRnLWNvbHVtbiIpLE9l''@;'; put 'put ''KDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuY29sTmFtZXx8YS5jb2xLZXkpfX1mdW5jdGlvbiBBOHQoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJjbHItZGctY2VsbCIpLE9lKDIpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0''@;'; put 'put ''LGQ9TGUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoZFthLmNvbEtleV0pfX1mdW5jdGlvbiBrOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9TGUoMikuJGltcGxpY2l0''@;'; put 'put ''O3JldHVybiBDdChmLm9uUm93Q2xpY2s/Zi5vblJvd0NsaWNrKGgpOiIiKX0pLGd0KDEsQTh0LDMsMSwibmctY29udGFpbmVyIiw1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gRDh0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIiksZ3QoMixUOHQsMywxLCJuZy1jb250YWluZXIiLDUpKDMsazh0LDIsMSwiY2xyLWRnLXJvdyIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLHhlKCJuZ0Zv''@;'; put 'put ''ck9mIixhLmNvbHNUb0Rpc3BsYXkpLGZlKCkseGUoIm5nRm9yT2YiLGEubWV0YSl9fWZ1bmN0aW9uIEk4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLE9lKDIpLGhlKCksZ3QoMyxEOHQsNCwyLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLHdyKGEubmFtZSksZmUoKSx4ZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IE82ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVu''@;'; put 'put ''Q2hhbmdlPW5ldyBLcix0aGlzLnJvd0NsaWNrZWQ9bmV3IEtyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1bXSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdPbkNoYW5nZXMoYSl7YS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNN''@;'; put 'put ''ZXRhKCksdGhpcy5wYXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1RhYnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRhVGFicz1bXTtmb3IobGV0IGEgb2YgdGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhVGFicy5maW5k''@;'; put 'put ''SW5kZXgoaD0+aC5uYW1lPT09YS5PRFNfVEFCTEUpO2Q8MCYmKGQ9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6YS5PRFNfVEFCTEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGlj''@;'; put 'put ''azpoPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoaCl9fSktMSksdGhpcy5kc21ldGFUYWJzW2RdLm1ldGEucHVzaChhKX19cGFyc2VWZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7bmFtZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6''@;'; put 'put ''IkxPQURfUkVGIn0se2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRTIixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFOR0VEX1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFt''@;'; put 'put ''ZToiREVMIn0se2NvbEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOmE9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChhKX19XX1vbk9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuPWEsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9b25DbG9zZUNsaWNrKCl7dGhp''@;'; put 'put ''cy5vbk9wZW5DaGFuZ2UoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToi''@;'; put 'put ''ZHNtZXRhIix2ZXJzaW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sZmVhdHVyZXM6W3dsXSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwi''@;'; put 'put ''Y2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xyTGF5b3V0IiwidmVydGlj''@;'; put 'put ''YWwiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsclRhYkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIs''@;'; put 'put ''ImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIl0sWyJjbGFzcyIsImNsaWNrYWJsZS1y''@;'; put 'put ''b3ciLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDApLEZ0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uT3Bl''@;'; put 'put ''bkNoYW5nZSh2KX0pLGRlKDEsImgzIiwxKSxPZSgyLCJEYXRhc2V0IE1ldGEiKSxoZSgpLGRlKDMsImRpdiIsMiksZ3QoNCxFOHQsMiwwLCJwIiwzKSxkZSg1LCJjbHItdGFicyIsNCksZ3QoNixJOHQsNCwyLCJjbHItdGFiIiw1KSxoZSgpKCksZGUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNsb3NlQ2xpY2soKX0pLE9lKDksIiBDbG9zZSAiKSxoZSgpKCkoKSksMiZkJiYoeGUoImNsck1vZGFsT3BlbiIsaC5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLGZlKDQpLHhlKCJuZ0lm''@;'; put 'put ''IixoLmRzbWV0YVRhYnMubGVuZ3RoPDEpLGZlKDIpLHhlKCJuZ0Zvck9mIixoLnRhYnMpKX0sZGVwZW5kZW5jaWVzOltucyx5YSxBbSxRZixSNyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxvdSxLdSxIYixfbSxDbSx4Nyx3bSxibSxTN10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBSOHQ9KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxQNmU9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLEplZT0oYyxsKT0+KHtjb2w6Yyxjb2xJbmRleDpsfSksTDh0PSgpPT5bdm9pZCAwXSxPOHQ9KCk9PlsiU09GVFNFTEVDVCIsIlNPRlRTRUxFQ1Rf''@;'; put 'put ''SE9PSyJdO2Z1bmN0aW9uIFA4dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx3cihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIEY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIs''@;'; put 'put ''MTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7eGUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLGZlKCksRHIoIiAi''@;'; put 'put ''LGEuZ2VuZXJhdGVkUmVjb3JkVXJsPyJjb3B5IHRvIGNsaXBib2FyZCI6YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPyJHZW5lcmF0aW5nIHVybC4uLiI6IkxpbmsgdG8gdGhpcyByZWNvcmQiLCIgIil9fWZ1bmN0aW9uIEg4dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsUDh0LDIs''@;'; put 'put ''MSwic3BhbiIsMTMpKDIsRjh0LDIsMiwiYnV0dG9uIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKSxmZSgpLHhlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJl''@;'; put 'put ''Y29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBOOHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE3KSgxLCJzcGFuIiwxOCksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBWOHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVu''@;'; put 'put ''Y3Rpb24gQjh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMzIpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIGo4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiB6OHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaW5wdXQtY29u''@;'; put 'put ''dGFpbmVyIiwzNSkoMSwiaW5wdXQiLDM2KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS5pbmRleDtyZXR1cm4gQ3QoTGUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoNSkucmVj''@;'; put 'put ''b3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMykuJGltcGxpY2l0LHY9TGUoMik7cmV0dXJuIHYucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSksQ3Qodi5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSxnaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS4kaW1wbGljaXQsdj1MZSgyKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDMpLiRpbXBsaWNp''@;'; put 'put ''dCxkPUxlKDIpO1RyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksZmUoKSxwaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIFU4dChjLGwpezEmYyYmRmwoMCl9ZnVuY3Rpb24gWjh0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxVOHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7TGUoMik7Y29uc3QgZj1oYSgxNik7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRs''@;'; put 'put ''ZXRDb250ZXh0IixscCgyLEplZSxkLGgpKX19ZnVuY3Rpb24gVzh0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx6OHQsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNCkoMixaOHQsMiw1LCJkaXYiLDUpLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdCxmPUxl''@;'; put 'put ''KDIpO2ZlKCkseGUoIm5nSWYiLEdzKDIsUjh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCkseGUoIm5nSWYiLEdzKDMsUDZlKS5pbmNs''@;'; put 'put ''dWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBZOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29u''@;'; put 'put ''dGFpbmVyIikoMSwidGV4dGFyZWEiLDM4LDEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpLmluZGV4O3JldHVybiBDdChMZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSg1KS5y''@;'; put 'put ''ZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxl''@;'; put 'put ''KDMpLiRpbXBsaWNpdCx2PUxlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLE9lKDMsIiAgICAgICAgICAgICAgICAgICIpLGhlKCksZGUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiksT2UoNSksaGUoKSgp''@;'; put 'put ''fWlmKDImYyl7bGV0IGEsZCxoO2NvbnN0IGY9aGEoMiksdj1MZSgzKS4kaW1wbGljaXQsTT1MZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLE0uY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKHYua2V5KSkoIm5vdC1jaGFyIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDphLnR5cGUpLHhlKCJyb3dzIix2LnZhbHVlLmxlbmd0aD44MD82OjEpLHBpKCJuZ01vZGVsIixNLmN1cnJlbnRSZWNvcmRbdi5rZXldKSx4ZSgibWF4TGVuZ3RoIixudWxsPT1NLmN1cnJl''@;'; put 'put ''bnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpkLmxlbmd0aCksZmUoNCksVXUoIiIsZi52YWx1ZS5sZW5ndGgsIiAvICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1NLmN1cnJl''@;'; put 'put ''bnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6aC5sZW5ndGgsIiIpfX1mdW5jdGlvbiBHOHQoYyxsKXsxJmMmJkZsKDApfWZ1bmN0aW9uICQ4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsRzh0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O0xlKDIpO2NvbnN0IGY9aGEoMTYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAoMixKZWUsZCxoKSl9fWZ1bmN0aW9uIEs4dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0''@;'; put 'put ''KDEsWTh0LDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsNSkoMiwkOHQsMiw1LCJkaXYiLDUpLGxpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdCxmPUxlKDIpO2ZlKCkseGUoIm5nSWYiLEdzKDIsTDh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRW''@;'; put 'put ''YWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCkseGUoIm5nSWYiLEdzKDMsUDZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29y''@;'; put 'put ''ZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBxOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwzOSkoMSwidGV4dGFyZWEiLDQwKSxGdCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChMZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3''@;'; put 'put ''dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdCx2PUxlKDIpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksT2UoMywiSEg6bW06c3MiKSxoZSgpKCl9''@;'; put 'put ''aWYoMiZjKXtsZXQgYTtjb25zdCBkPUxlKDIpLiRpbXBsaWNpdCxoPUxlKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9''@;'; put 'put ''aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEudHlwZSkseGUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSkscGkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pfX1mdW5jdGlvbiBYOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJkaXYiLDM5KSgxLCJ0ZXh0YXJlYSIsNDEpLEZ0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMiku''@;'; put 'put ''cmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMikuJGltcGxpY2l0LHY9TGUoMik7cmV0dXJuIG1pKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0''@;'; put 'put ''KGgpfSksaGUoKSxkZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQyKSgzLCJpbnB1dCIsNDMpLEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMikucmVjb3JkRGF0ZUNoYW5nZShoLGYua2V5KSl9KSxoZSgp''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMikuJGltcGxpY2l0LGQ9TGUoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLHBpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gSjh0KGMs''@;'; put 'put ''bCl7MSZjJiZGbCgwKX1mdW5jdGlvbiBROHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEo4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtMZSgyKTtjb25zdCBmPWhhKDE2KTtmZSgpLHhlKCJu''@;'; put 'put ''Z1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIsSmVlLGQsaCkpfX1mdW5jdGlvbiBlN3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJwIiwyMiksT2UoNCksZ3QoNSxWOHQsMSwwLCJjbHItaWNvbiIsMjMp''@;'; put 'put ''LGhlKCksZGUoNiwicCIsMjQpLE9lKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDI1KSxndCg5LEI4dCwyLDAsInNwYW4iLDI2KSgxMCxqOHQsMSwwLCJjbHItaWNvbiIsMjcpKDExLFc4dCwzLDQsIm5nLWNvbnRhaW5lciIsMjgpKDEyLEs4dCwzLDQsIm5nLWNvbnRhaW5lciIsMjgpKDEzLHE4dCw0''@;'; put 'put ''LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI5KSgxNCxYOHQsNCwzLCJkaXYiLDI5KSgxNSxROHQsMiw1LCJkaXYiLDI4KSxoZSgpKCksR3QoMTYsImhyIiwzMCksbGkoKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9TGUoKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPUxlKDIpO2ZlKDQp''@;'; put 'put ''LERyKCIgIixmLmtleSwiICIpLGZlKCkseGUoIm5nSWYiLE0uaXNDb2xQayhmLmtleSkpLGZlKDIpLERyKCIgIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDphLmRlc2MsIiAiKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ1N3aXRjaCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6ZC50eXBlKSxmZSgpLHhlKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyh2KSks''@;'; put 'put ''ZmUoKSx4ZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKHYpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJudW1lcmljIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIix2b2lkIDApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLHhlKCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLCJkYXRlIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIHQ3dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsZTd0LDE3LDExLCJuZy1jb250YWluZXIiLDUpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwi''@;'; put 'put ''QWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gbjd0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx0N3QsMiwxLCJuZy1jb250YWluZXIiLDE5KSxlbCgyLCJrZXl2YWx1ZSIp''@;'; put 'put ''LGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nRm9yT2YiLHo4KDIsMixhLmN1cnJlbnRSZWNvcmQsYS5vcmlnaW5hbE9yZGVyKSkoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1mdW5jdGlvbiByN3QoYyxsKXsxJmMmJihkZSgwLCJjbHItYWxlcnQiLDQ0KSgxLCJjbHIt''@;'; put 'put ''YWxlcnQtaXRlbSIpKDIsInNwYW4iLDQ1KSxPZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcgIiksaGUoKSgpKCkpLDImYyYmKF9kKCJ2aXNpYmlsaXR5IixMZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MD8idmlzaWJsZSI6ImhpZGRlbiIp''@;'; put 'put ''LHhlKCJjbHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBpN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ2KSgxLCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCku''@;'; put 'put ''b25QcmV2aW91c1JlY29yZENsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDQ4KSxoZSgpLGRlKDMsInAiKSxPZSg0LCIgQ3VycmVudCByb3c6ICIpLGRlKDUsInN0cm9uZyIpLE9lKDYpLGhlKCkoKSxkZSg3LCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KExlKCkub25OZXh0UmVjb3JkQ2xpY2soKSl9KSxHdCg4LCJjbHItaWNvbiIsNDkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKDUpLERyKCIgIixhLmN1cnJlbnRSZWNvcmRJ''@;'; put 'put ''bmRleCsxLCIgIiksZmUoKSx4ZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gYTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw1MyksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJuZ1ZhbHVlIixh''@;'; put 'put ''KSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIG83dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuY29sSW5kZXg7cmV0dXJuIEN0KExlKCku''@;'; put 'put ''b25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuY29sLHY9TGUoKTtyZXR1cm4gbWkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxGdCgib25J''@;'; put 'put ''bnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKSxmPWguY29sLHY9aC5jb2xJbmRleDtyZXR1cm4gQ3QoTGUoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LHYpKX0pLGd0KDIsYTd0LDIsMiwib3B0aW9uIiw1MiksaGUoKSgpfWlmKDImYyl7bGV0IGE7Y29uc3Qg''@;'; put 'put ''ZD1MZSgpLmNvbCxoPUxlKCk7ZmUoKSxwaSgidmFsdWUiLGguY3VycmVudFJlY29yZFtkLmtleV0pLHhlKCJpbnB1dElkIixkLmtleSksZmUoKSx4ZSgibmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0''@;'; put 'put ''UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBzN3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDU2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGw3dChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsNTQpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuY29sSW5kZXg7cmV0dXJuIEN0KExlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGY9TGUoKS5jb2wsdj1MZSgpO3JldHVybiBtaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGd0KDEsczd0LDIsMiwib3B0aW9uIiw1NSksaGUoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9TGUoKS5jb2wsaD1M''@;'; put 'put ''ZSgpO3BpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxmZSgpLHhlKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9u''@;'; put 'put ''IGM3dChjLGwpe2lmKDEmYyYmZ3QoMCxvN3QsMywzLCJkaXYiLDUwKSgxLGw3dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsSWMpLDImYyl7Y29uc3QgYT1sLmNvbCxkPWhhKDIpLGg9TGUoKTt4ZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50''@;'; put 'put ''UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksR3MoMixPOHQpKSkoIm5nSWZFbHNlIixkKX19bGV0IHU3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxs''@;'; put 'put ''LHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0''@;'; put 'put ''aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBLcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBLcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBLcix0aGlzLm9uUmVjb3JkRWRpdENsb3NlPW5ldyBLcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3IEtyLHRoaXMub25O''@;'; put 'put ''ZXh0UmVjb3JkPW5ldyBLcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IEtyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51''@;'; put 'put ''bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJlY29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQ''@;'; put 'put ''cm9taXNlKChmLHYpPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxNPT57ZihNKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksZj1oP2guZGF0ZUZvcm1h''@;'; put 'put ''dDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09SW9lKCkoYSkuZm9ybWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50''@;'; put 'put ''UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtjb2xOYW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlz''@;'; put 'put ''Lm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFjZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBo''@;'; put 'put ''PXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksdj1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2woZix2KS50aGVuKE09Pntjb25z''@;'; put 'put ''dCBJPWguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7TT9JPi0xJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoSSwxKTpJPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNvcmRDbGljaygpe3RoaXMub25O''@;'; put 'put ''ZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVjb3JkTW9kYWxSZWYgLm1vZGFsLXRpdGxlIik7aWYoZCl7Y29uc3QgaD1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2guc3R5bGUucG9zaXRpb249ImZpeGVkIixoLnN0eWxlLmxlZnQ9IjAiLGguc3R5bGUudG9wPSIwIixoLnN0eWxlLm9wYWNpdHk9IjAiLGguc3R5bGUuekluZGV4PSI1MDAwIixoLnZhbHVlPWEsZC5hcHBlbmRDaGlsZChoKSxoLmZvY3Vz''@;'; put 'put ''KCksaC5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGQucmVtb3ZlQ2hpbGQoaCksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX19Z2VuZXJhdGVFZGl0UmVjb3JkVXJsKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtpZihhLmdlbmVyYXRlZFJlY29yZFVy''@;'; put 'put ''bClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9W107YS5oZWFkZXJQa3MuZm9yRWFjaChoPT57bGV0IGY9IkMiLHY9IiI7Zm9yKGxldCBNPTA7TTxhLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDtN''@;'; put 'put ''Kyspe2NvbnN0IEk9YS5jZWxsVmFsaWRhdGlvbltNXTtpZihJLmRhdGE9PT1oKXsoIm51bWVyaWMiPT09SS50eXBlfHwiZGF0ZSI9PT1JLnR5cGV8fCJ0aW1lIj09PUkudHlwZSkmJihmPSJOIik7YnJlYWt9fXY9IkMiPT09Zj9gJyR7YS5jdXJyZW50UmVjb3JkW2hdfSdgOmEuY3VycmVudFJl''@;'; put 'put ''Y29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJQUJMRV9OTTpoLE9QRVJBVE9SX05NOiI9IixSQVdfVkFMVUU6dn0pfSksZC5sZW5ndGg+MCYmYS5saWJkcyYmKHlpZWxkIGEuc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpoLnJlc3VsdFswXS5GSUxURVJfVEFCTEV9O2NvbnN0IE09bG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKyIjL2VkaXRvci9lZGl0LXJlY29y''@;'; put 'put ''ZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKE0pLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSxhLmZpbHRlcj0hMX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9ITF9KSl9fSkoKX1pc0NvbFBrKGEpe3JldHVybiB0''@;'; put 'put ''aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZShTdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''YXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJkcyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZpbHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9h''@;'; put 'put ''ZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5kZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29yZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3Jz''@;'; put 'put ''OiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoib25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3Jk''@;'; put 'put ''RHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25maXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29y''@;'; put 'put ''ZDoib25QcmV2aW91c1JlY29yZCJ9LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbImF1dG9jb21wbGV0ZSIsIiJdLFsiY2hhclRleHRhcmVhIiwiIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWyJpZCIsInJlY29yZE1vZGFsUmVmIiwxLCJyZWNvcmQtZWRpdC1tb2RhbCIsInBv''@;'; put 'put ''c2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAg''@;'; put 'put ''cHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1tZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywidmlzaWJpbGl0eSIsImNsckFsZXJ0Q2xv''@;'; put 'put ''c2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsIm1yLTVpIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXBy''@;'; put 'put ''aW1hcnkiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwicG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1''@;'; put 'put ''dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJzb2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siLCJkaXNh''@;'; put 'put ''YmxlZCJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1''@;'; put 'put ''bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9udC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJj''@;'; put 'put ''bGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUi''@;'; put 'put ''LCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwi''@;'; put 'put ''ZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJd''@;'; put 'put ''LFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYiXSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwibm90LWNoYXIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9k''@;'; put 'put ''ZWwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiXSxbMSwiZGF0ZS1maWVsZCJdLFsi''@;'; put 'put ''Y2xyVGV4dGFyZWEiLCIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2Rl''@;'; put 'put ''bCJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxl''@;'; put 'put ''cnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUg''@;'; put 'put ''cmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzMsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsInZhbHVlIiwiaW5wdXRJZCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0Iiwi''@;'; put 'put ''IiwzLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImNsci1tb2RhbCIsMykoMSwiaDMiLDQpLE9lKDIp''@;'; put 'put ''LGd0KDMsSDh0LDMsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDQsImRpdiIsNiksZ3QoNSxOOHQsMywwLCJkaXYiLDcpKDYsbjd0LDMsNSwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDcsImRpdiIsOCksZ3QoOCxyN3QsNCw0LCJjbHItYWxlcnQiLDkpKDksaTd0LDksMywiZGl2Iiwx''@;'; put 'put ''MCksZGUoMTAsImRpdiIpKDExLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsQ3QoaC5jbG9zZVJlY29yZEVkaXQoKSl9KSxPZSgxMiwiIENhbmNlbCAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDEy''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29uZmlybVJlY29yZEVkaXQoKSl9KSxPZSgxNCwiIENvbmZpcm0gIiksaGUoKSgpKCksZ3QoMTUsYzd0LDMsMywibmctdGVtcGxhdGUiLG51bGwsMCxJYyksaGUoKX0yJmQmJih4ZSgiY2xyTW9kYWxPcGVuIiwhMCko''@;'; put 'put ''ImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxWZigiICIsIkFERCI9PT1oLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgi''@;'; put 'put ''LiIpWzFdLCIgIiksZmUoKSx4ZSgibmdJZiIsIkVESVQiPT09aC5yZWNvcmRBY3Rpb24pLGZlKDIpLHhlKCJuZ0lmIixoLmFkZFJlY29yZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmFkZFJlY29yZExvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s''@;'; put 'put ''cy5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltucyx5YSxOMSxTMixjcCxBMixrMixxbCxUMixu''@;'; put 'put ''bCwkcyxKeCxZZGUsUXgsSGwsb3UsS3UsakwsWXgsSkwsc0csWjEsR0wsRTcsUUwsd2RlLEQ2ZSx3Ul0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBkN3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwzKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSxEcigiICIsYSwiICIpfX1sZXQgaDd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXRlc0xpc3Q9W10sdGhpcy5wcm9jZXNzZWRTdGF0ZXM9W10sdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHRoaXMubWluRGVsYXk9MWUzfW5nT25Jbml0KCl7fWFwcGVuZFN0''@;'; put 'put ''YXRlKGEpe2lmKCJ7ZmluaXNofSI9PT1hKXJldHVybiB0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdm9pZCBjbGVhckludGVydmFsKHRoaXMuc3RhdGVJbnRlcnZhbCk7dGhpcy5zdGF0ZXNMaXN0LnB1c2goYSksdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaChhKX1yZXBsYWNlTGFzdFN0YXRl''@;'; put 'put ''KGEpe3RoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MD8odGhpcy5zdGF0ZXNMaXN0LnBvcCgpLHRoaXMuc3RhdGVzTGlzdC5wdXNoKGEpKTp0aGlzLnByb2Nlc3NlZFN0YXRlc1t0aGlzLnByb2Nlc3NlZFN0YXRlcy5sZW5ndGgtMV09YX1jbGVhclN0YXRlcygpe3RoaXMucHJvY2Vzc2VkU3RhdGVz''@;'; put 'put ''PVtdfXN0YXJ0U3RhdGVyKCl7dGhpcy5zdGF0ZXJJblByb2dyZXNzPSEwLHRoaXMuc3RhdGVzTGlzdC5sZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRlc0xpc3Quc2hpZnQoKXx8IiIpLHRoaXMuc3RhdGVJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMu''@;'; put 'put ''c3RhdGVzTGlzdC5sZW5ndGg+MCYmdGhpcy5wcm9jZXNzZWRTdGF0ZXMucHVzaCh0aGlzLnN0YXRlc0xpc3Quc2hpZnQoKXx8IiIpfSx0aGlzLm1pbkRlbGF5KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21w''@;'; put 'put ''PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11cGxvYWQtc3RhdGVyIl1dLGRlY2xzOjUsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsIm0tMCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24t''@;'; put 'put ''bWlkZGxlIl0sWzEsIm0tMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIpLGd0KDEsZDd0LDIsMSwicCIsMCksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNwYW4iLDIpLE9lKDQsIkxvYWRpbmcuLi4iKSxoZSgpKCkpLDImZCYmKGZlKCkseGUoIm5nRm9yT2YiLGgu''@;'; put 'put ''cHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbbnNdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksZjd0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKSxGNmU9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSxkKXtyZXR1cm4gdGhpcy5hZGRTZXBhcmF0b3JzKGEudG9TdHJp''@;'; put 'put ''bmcoKSxkKX1hZGRTZXBhcmF0b3JzKGEsZD0iICIpe2NvbnN0IGg9KGErPSIiKS5zcGxpdCgiLiIpO2xldCBmPWhbMF07Y29uc3Qgdj1oLmxlbmd0aD4xPyIuIitoWzFdOiIiLE09LyhcZCspKFxkezN9KS87Zm9yKDtNLnRlc3QoZik7KWY9Zi5yZXBsYWNlKE0sIiQxIitkKyIkMiIpO3JldHVy''@;'; put 'put ''biBmK3Z9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InRob3VzYW5kU2VwYXJhdG9yIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcDd0PVsiaHQiXSxnN3Q9WyJ1''@;'; put 'put ''cGxvYWRTdGF0ZXIiXSxtN3Q9WyJxdWVyeUZpbHRlciJdLHY3dD1bImhvdEluc3RhbmNlIl0seTd0PVsiZmlsZVVwbG9hZElucHV0Il0sYjd0PShjLGwpPT4oe2xpYk5hbWU6Yyx0YWJsZU5hbWU6bH0pLEg2ZT0oKT0+WyIiLCIgIl0sXzd0PWM9Pih7aGVhZGVyQmFyRmlsdGVyOmN9KSx3N3Q9''@;'; put 'put ''KCk9PlsiL2hvbWUiXTtmdW5jdGlvbiBDN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY0KSgxLCJzcGFuIiw2NSkoMiwibGFiZWwiLDY2KSxPZSgzLCIgQnJvd3NlICIpLGhlKCkoKSxkZSg0LCJpbnB1dCIsNjcsMyksRnQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KExlKCkuYXR0YWNoRmlsZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoNCkseGUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24gUzd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OCkoMSwiYnV0dG9uIiw2OSks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnVwbG9hZFBhcnNlZEZpbGVzKCkpfSksT2UoMiwiIFVwbG9hZCAiKSxoZSgpKCl9MiZjJiYoZmUoKSx4ZSgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gTTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''YnV0dG9uIiw3MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxPZSgxLCIgQ2xvc2UgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTt4ZSgiZGlzYWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2Fk''@;'; put 'put ''aW5nKX19ZnVuY3Rpb24geDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw3MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxPZSgxLCIgU2tpcCAiKSxoZSgpfX1mdW5jdGlvbiBFN3QoYyxs''@;'; put 'put ''KXsxJmMmJihkZSgwLCJkaXYiLDcyKSxHdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw0KSxoZSgpKX1mdW5jdGlvbiBUN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAtZWRpdC1yZWNvcmQiLDczKSxGdCgib25SZWNvcmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHd0KGEpLEN0KExlKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJbnB1dEZvY3VzZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoKSl9KSgib25SZWNvcmRFZGl0Q2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0''@;'; put 'put ''KExlKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1JlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vblByZXZpb3VzUmVjb3JkKCkpfSks''@;'; put 'put ''aGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKTt4ZSgiY3VycmVudFJlY29yZCIsYS5jdXJyZW50RWRpdFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIsYS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5RmlsdGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1''@;'; put 'put ''Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFkZXJQa3MpKCJjZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJbmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgiY3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1''@;'; put 'put ''cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixhLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9uIEE3dChjLGwpezEmYyYmKGRlKDAsImRpdiIs''@;'; put 'put ''NzQpLEd0KDEsInByb2dyZXNzIiksaGUoKSl9ZnVuY3Rpb24gazd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw3NSkoMSwic3BhbiIsNzYpLEd0KDIsImNsci1pY29uIiw3NyksZGUoMywic3BhbiIsNzgpLE9lKDQsIkJhY2sgdG8gdGFibGUgc2VsZWN0aW9uIiksaGUo''@;'; put 'put ''KSgpLGRlKDUsInNwYW4iLDc5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudmlld2JveE1hbmFnZXIoKSl9KSxHdCg2LCJjbHItaWNvbiIsODApLGRlKDcsInNwYW4iLDc4KSxPZSg4LCJWaWV3Ym94ZXMiKSxoZSgpKCkoKX0yJmMmJihmZSgpLHhlKCJyb3V0''@;'; put 'put ''ZXJMaW5rIixHcygxLHc3dCkpKX1mdW5jdGlvbiBEN3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw4Nil9ZnVuY3Rpb24gSTd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLERyKCIgIixh''@;'; put 'put ''LmRzTm90ZSwiICIpfX1mdW5jdGlvbiBSN3QoYyxsKXsxJmMmJihzaSgwKSxndCgxLEk3dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxsaSgpKX1mdW5jdGlvbiBMN3QoYyxsKXtpZigxJmMmJihzaSgwKSxPZSgxKSxlbCgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLGxpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1MZSgzKTtmZSgpLEtJKCIgKCIsejgoMiw0LGEuZGF0YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PWEuZGF0YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIsYS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gTzd0KGMsbCl7MSZjJiYoc2koMCksT2UoMSwiICgwIHJvd3MpICIpLGxpKCkpfWZ1bmN0aW9uIFA3dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsTDd0LDMsNywibmctY29udGFpbmVyIiwzOSkoMixPN3QsMiwwLCJuZy1jb250YWluZXIiLDM5KSxsaSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''TGUoMik7ZmUoKSx4ZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLGZlKCkseGUoIm5nSWYiLGEuemVyb0ZpbHRlclJvd3MpfX1mdW5jdGlvbiBGN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJoNCIsODEpKDEsImNsci10b29sdGlwIikoMiwiY2xyLWljb24iLDgyKSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZGF0YXNldEluZm89ITApfSksaGUoKSxndCgzLEQ3dCwxLDAsImNsci1pY29uIiw4MyksZGUoNCwic3BhbiIsODQpLE9lKDUpLGRlKDYsImEiLDg1KSxPZSg3KSxoZSgpKCksZ3QoOCxSN3QsMiwwLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDM5KSxoZSgpLGd0KDksUDd0LDMsMiwibmctY29udGFpbmVyIiwzOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPUxlKCk7ZmUoMykseGUoIm5nSWYiLGEudGFibGVOYW1lLmluY2x1ZGVzKCItRkMiKSksZmUoMiksRHIoIiAiLGEubGliTmFtZSwiLiIpLGZlKCkseGUoInJvdXRl''@;'; put 'put ''ckxpbmsiLCIvdmlldy9kYXRhLyIrZC5saWJkcyksZmUoKSx3cihhLnRhYmxlTmFtZS5yZXBsYWNlKCItRkMiLCIiKSksZmUoKSx4ZSgibmdJZiIsZC5kc05vdGUmJmQuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixkLmRhdGFTb3VyY2UpfX1mdW5jdGlvbiBIN3QoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDk1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMSwiY2xyLWljb24iLDk2KSxkZSgyLCJzcGFuIiw3OCksT2UoMywiVXBsb2FkIiksaGUoKSgpfX1mdW5j''@;'; put 'put ''dGlvbiBON3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJidXR0b24iLDkwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm9wZW5RYigpKX0pLEd0KDIsImNsci1pY29uIiw5MSksZGUoMywic3BhbiIsNzgpLE9lKDQsIkZpbHRlciIp''@;'; put 'put ''LGhlKCkoKSxkZSg1LCJidXR0b24iLDkyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmVkaXRUYWJsZSgpKX0pLEd0KDYsImNsci1pY29uIiw5MyksZGUoNywic3BhbiIsNzgpLE9lKDgsIkVkaXQiKSxoZSgpKCksZ3QoOSxIN3QsNCwwLCJidXR0b24iLDk0''@;'; put 'put ''KSxsaSgpfWlmKDImYyl7Y29uc3QgYT1MZSgyKTtmZSg5KSx4ZSgibmdJZiIsIWEuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcpfX1mdW5jdGlvbiBWN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKCksVXUoIlRvIHVubG9jayBt''@;'; put 'put ''b3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEI3''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4KSxndCgxLFY3dCwyLDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBqN3QoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJidXR0b24iLDk3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLmNhbmNlbEVkaXQoKSl9KSxHdCgyLCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxPZSg0LCJDYW5jZWwiKSxoZSgpKCksZGUoNSwiY2xy''@;'; put 'put ''LXRvb2x0aXAiKSg2LCJidXR0b24iLDk5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gQ3QoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSb3coKSl9KSxHdCg3LCJjbHItaWNvbiIsMTAwKSxPZSg4LCJBZGQgUm93ICIpLGhl''@;'; put 'put ''KCksZ3QoOSxCN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksaGUoKSxkZSgxMCwiYnV0dG9uIiw0NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5jaGVja1NhdmUoKSl9KSxHdCgxMSwiY2xyLWljb24iLDEwMSksT2UoMTIsIlN1Ym1pdCAiKSxo''@;'; put 'put ''ZSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDYpLFRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLHhlKCJjbHJMb2FkaW5nIixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIHo3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsMTA1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSksR3QoMSwiY2xyLWljb24iLDkzKSxkZSgyLCJzcGFuIiksT2UoMywiRWRpdCIpLGhlKCkoKX19ZnVuY3Rpb24gVTd0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiYnV0dG9uIiwxMDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITApfSksR3QoMiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksT2UoNCwiRGlzY2FyZCBmaWxlIiksaGUo''@;'; put 'put ''KSgpLGd0KDUsejd0LDQsMCwiYnV0dG9uIiwxMDMpLGRlKDYsImJ1dHRvbiIsMTA0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnN1Ym1pdEV4Y2VsKCkpfSksR3QoNywiY2xyLWljb24iLDEwMSksT2UoOCwiIFN1Ym1pdCAiKSxoZSgpLGxpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPUxlKDIpO2ZlKDUpLHhlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSxmZSgpLHhlKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBaN3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg5KSxndCgxLE43dCwxMCwxLCJuZy1jb250YWluZXIiLDM5''@;'; put 'put ''KSgyLGo3dCwxMywzLCJuZy1jb250YWluZXIiLDM5KSgzLFU3dCw5LDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCkseGUoIm5nSWYiLCFhLmhvdFRhYmxl''@;'; put 'put ''LnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLHhlKCJuZ0lmIixhLnVwbG9hZFByZXZpZXcpfX1mdW5jdGlvbiBXN3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNikoMSwic3BhbiIpLE9lKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxPZSg0KSxoZSgpKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKCk7ZmUoNCksd3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBZN3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiwxMDkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksT2UoNSwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSxs''@;'; put 'put ''aSgpKX1mdW5jdGlvbiBHN3QoYyxsKXsxJmMmJihzaSgwKSxkZSgxLCJzcGFuIiksR3QoMiwiY2xyLWljb24iLDExMiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxPZSg1LCJMb2FkaW5nIHRhYmxlIGVycm9yIiksaGUoKSgpLGxpKCkpfWZ1bmN0aW9uICQ3dChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsMTA3KSgxLCJkaXYiLDEwOCksZ3QoMixZN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSgzLEc3dCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLCFhLmdldGRhdGFFcnJvciksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsYS5nZXRkYXRhRXJyb3IpfX1mdW5jdGlvbiBLN3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksVXUoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIg''@;'; put 'put ''IiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHE3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDExNSksZ3QoMSxL''@;'; put 'put ''N3QsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gWDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDExMyks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSZWNvcmRCdXR0b25DbGljaygpKX0pLEd0KDIsImNsci1pY29uIiwxMDApLE9lKDMsIiBBZGQgUmVjb3JkICIpLGhlKCksZ3QoNCxx''@;'; put 'put ''N3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gSjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTE2KSxPZSgx''@;'; put 'put ''KSxHdCgyLCJjb250YWN0LWxpbmsiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLERyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gUTd0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwic3BhbiIsMTI4KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxVdSgiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3Mi''@;'; put 'put ''LCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBlOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDEyOSkoMSwiZGl2IiwxMzApKDIsImxhYmVsIiwx''@;'; put 'put ''MzEpLE9lKDMsIk1lc3NhZ2UiKSxoZSgpLGRlKDQsInRleHRhcmVhIiwxMzIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLm1lc3NhZ2UsaCl8fChmLm1lc3NhZ2U9aCksQ3QoaCl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9TGUoMik7ZmUoNCkscGkoIm5nTW9kZWwiLGEubWVzc2FnZSkseGUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4''@;'; put 'put ''ZXMubGVuZ3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIHQ5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTE3KSgxLCJkaXYiLDExOCkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJo''@;'; put 'put ''MyIsOCksT2UoNyksaGUoKSgpLGRlKDgsImRpdiIsOSksZ3QoOSxRN3QsMiwyLCJzcGFuIiwxMjMpKDEwLGU5dCw1LDMsImRpdiIsMTI0KSxoZSgpLGRlKDExLCJkaXYiLDEyNSkoMTIsImJ1dHRvbiIsMTI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVy''@;'; put 'put ''biBDdChoLnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLE9lKDEzLCIgU3VibWl0ICIpLGhlKCksZGUoMTQsImJ1dHRvbiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLEN0KGgudmFs''@;'; put 'put ''aWRhdGlvbkRvbmU9MCl9KSxPZSgxNSwiIENhbmNlbCAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoNyksVmYoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwi''@;'; put 'put ''IHVwZGF0ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLGZlKDIpLHhlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0''@;'; put 'put ''IT09YS5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsYS50YWJsZVRydWUpLGZlKDIpLHhlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBuOXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMzMpLE9lKDEpLGVsKDIsInBrU3BhY2VTZXBhcmF0ZSIpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSxVdSgiIE9uIHJvdyAiLGErMSwiOiAiLERjKDIsMixkLnBrRmllbGRzW2FdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVuY3Rpb24gcjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1s''@;'; put 'put ''LiRpbXBsaWNpdDtmZSgpLFZmKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gaTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMzQpKDEsImRpdiIsMTM1KSgyLCJkaXYiLDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIx''@;'; put 'put ''KSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxPZSg3LCJFcnJvciIpLGhlKCkoKSxkZSg4LCJkaXYiLDkpKDksInAiKSxPZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLGhlKCkoKSxkZSgxMSwiZGl2IiwyMykoMTIsImJ1dHRvbiIsNDQpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5udWxsVmFyaWFibGVzPSExKX0pLE9lKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBhOXQoYyxsKXsxJmMmJkd0KDAsImFwcC1xdWVyeSIsbnVsbCw1KX1mdW5jdGlvbiBvOXQoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJwIiwxMzYpLE9lKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWxldCBpTj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLmNudD0wfXN0YXRpY3t0aGlzLm5vblBrQ250PTB9c3RhdGlje3RoaXMubGFzdENlbGw9MH1jb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYsTSxJLEcsaWUsdWUseWUpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLnJvdXRlPUksdGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlPUcsdGhpcy5jZGY9aWUsdGhpcy5ob3RSZWdpc3RlcmVyPXVlLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPXllLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0PW5ldyBmZCx0''@;'; put 'put ''aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PW5ldyBmZCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmNvbHM9W10sdGhpcy5yZXN0cmljdGlvbnM9e30sdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMu''@;'; put 'put ''ZHNOb3RlPSIiLHRoaXMudmlld2JveGVzPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1pblNwYXJlUm93czoxLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5OiEwLGNv''@;'; put 'put ''cHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxzZXR0aW5nczp7Y29udGV4dE1lbnU6e2l0ZW1zOntlZGl0X3Jvdzp7bmFtZToiRWRpdCByb3ciLGhpZGRlbigpe2NvbnN0IHFlPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFxZSlyZXR1''@;'; put 'put ''cm4hMTtjb25zdCBydD1xZVswXTtyZXR1cm4gcnQuZnJvbS5yb3chPT1ydC50by5yb3d9LGNhbGxiYWNrOihqZSxxZSxydCk9Pntjb25zdCBwdD1xZVswXTtwdC5zdGFydC5yb3c9PT1wdC5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCxwdC5zdGFydC5yb3cpfX0scm93X2Fib3ZlOntu''@;'; put 'put ''YW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6IkNvcHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFkZXJzOntuYW1lOiJDb3B5IHdp''@;'; put 'put ''dGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hlYWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVuZG8ifSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9wUm93PW51bGwsdGhpcy5maWx0''@;'; put 'put ''ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0FkZGVkOjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlFcnI9ITEsdGhpcy5zdWNjZXNz''@;'; put 'put ''RW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVkaXQ9ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0aGlzLmVyclZhbGlkYXRpb249''@;'; put 'put ''ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1BrTnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hvd0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhpcy5kdXBsaWNh''@;'; put 'put ''dGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVyPW5ldyBQZWUsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZFBy''@;'; put 'put ''ZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSExLHRoaXMuaGFz''@;'; put 'put ''QmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhlYWRlcnM9W10s''@;'; put 'put ''dGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Q9bmV3IFduLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITEs''@;'; put 'put ''dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycz1b''@;'; put 'put ''XSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29y''@;'; put 'put ''ZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXSx0aGlzLnZh''@;'; put 'put ''bGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxVRToyLERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVfQ0hBUjo1LEZPUkNFX0ZMQUc6''@;'; put 'put ''Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5j''@;'; put 'put ''ZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAsWmVlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdJiYkbS5yZWdpc3Rlckxhbmd1YWdlKFplZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSksdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBZbSx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhp''@;'; put 'put ''cy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9u''@;'; put 'put ''cywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJs''@;'; put 'put ''ZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cp''@;'; put 'put ''fWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25z''@;'; put 'put ''LnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlz''@;'; put 'put ''IGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2FkTW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1hdHRhY2hGaWxlKGEsZD0hMSl7''@;'; put 'put ''dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9Zi5uYW1lLHRoaXMuc3ByZWFkc2hlZXRTZXJ2''@;'; put 'put ''aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmYsdXBsb2FkZXI6dGhpcy51cGxvYWRlcixkY1ZhbGlkYXRvcjp0aGlzLmRjVmFsaWRhdG9yLGhlYWRlclBrczp0aGlzLmhlYWRlclBrcyxoZWFkZXJBcnJheTp0aGlzLmhlYWRlckFycmF5LGhlYWRlclNob3c6dGhpcy5oZWFkZXJTaG93LHRpbWVI''@;'; put 'put ''ZWFkZXJzOnRoaXMudGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6dGhpcy5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6dGhpcy5kYXRlVGltZUhlYWRlcnMseGxSdWxlczp0aGlzLnhsUnVsZXMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ30sdj0+e3RoaXMuYXBwZW5kVXBsb2FkU3RhdGUodil9''@;'; put 'put ''LHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsdil9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9UShmdW5jdGlvbiooTSl7TSYmKGguZXhjZWxGaWxlUmVhZHk9ITAsaC51cGxvYWRlcj1NLnVwbG9hZGVyLE0uZGF0YSYmTS5oZWFkZXJTaG93PyhoLmRh''@;'; put 'put ''dGE9TS5kYXRhLGguaGVhZGVyU2hvdz1NLmhlYWRlclNob3csaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCkpOnlpZWxkIGgudXBsb2FkUGFyc2VkRmlsZXMoKSl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2godj0+e3RoaXMu''@;'; put 'put ''ZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsdixudWxsKSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsc2V0VGltZW91dCgoKT0+e3RoaXMuZmlsZW5hbWU9IiJ9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITF9KX1z''@;'; put 'put ''dWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMudXBsb2FkUGFyc2VkRmlsZXMoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXVwbG9hZFBhcnNlZEZpbGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtp''@;'; put 'put ''ZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEu''@;'; put 'put ''cGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUo''@;'; put 'put ''YS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYu''@;'; put 'put ''c2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2''@;'; put 'put ''ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxl''@;'; put 'put ''VXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3''@;'; put 'put ''KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17''@;'; put 'put ''fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMu''@;'; put 'put ''ZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFy''@;'; put 'put ''c2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0''@;'; put 'put ''KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1b''@;'; put 'put ''XSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENv''@;'; put 'put ''bmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRl''@;'; put 'put ''ckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4t''@;'; put 'put ''MX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W107Y29uc3QgaD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRM''@;'; put 'put ''b2FkaW5nPSExKTt7Y29uc3QgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJihLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRl''@;'; put 'put ''ci5xdWVyeT1bXSxLbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxl''@;'; put 'put ''bWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihJKXtyZXR1cm4gbnVsbD09PUkudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2Vz''@;'; put 'put ''JiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2NvbnN0IEk9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChHPT57SS5maWx0ZXJDbGF1c2Vz''@;'; put 'put ''LnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShHKSl9KSxJLmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEkpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJs''@;'; put 'put ''ZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5RmlsdGVyPXtpZDpNLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6TS5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0''@;'; put 'put ''aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5m''@;'; put 'put ''aWx0ZXI9ITF9KS5jYXRjaChNPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVlcnlFcnJNZXNzYWdlPWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hh''@;'; put 'put ''bmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykpfWVkaXRUYWJsZShhLGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0''@;'; put 'put ''YW5jZSxmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSx2PWYuZ2V0U29ydENvbmZpZygpLE09QXJyYXkuaXNBcnJheSh2KT92Olt2XTtzZXRUaW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMu''@;'; put 'put ''ZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgu''@;'; put 'put ''cmVuZGVyKCk7Zm9yKGNvbnN0IEkgb2YgTSlmLnNvcnQoSSk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9LDApfWNvbnZlcnRUb0NvcnJlY3RUeXBlcyhhKXtmb3IoY29uc3QgZCBvZiBhKWZvcihjb25zdCBoIGluIGQpe2NvbnN0IGY9dGhpcy5jb2xzLmZpbmQodj0+di5OQU1F''@;'; put 'put ''PT09aCk7ZiYmIiIhPT1kW2hdJiYibnVtIj09PWYuVFlQRSYmIWYuRERUWVBFLmluY2x1ZGVzKCJUSU1FIikmJiFmLkREVFlQRS5pbmNsdWRlcygiREFURSIpJiYoZFtoXT1wYXJzZUludChkW2hdKSl9fWNhbmNlbEVkaXQoKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEx''@;'; put 'put ''KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPWEuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxoPWQuZ2V0U29ydENvbmZpZygpLGY9QXJyYXkuaXNBcnJheShoKT9oOltoXTt0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQmJih0''@;'; put 'put ''aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITAsYS51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5o''@;'; put 'put ''b3RUYWJsZS5yZWFkT25seSxkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKTtmb3IoY29uc3QgdiBvZiBmKWQuc29ydCh2KTt0aGlzLmNoZWNrUm93TGltaXQoKX1ob3RDbGlja2VkKCl7MT09PXRoaXMudGltZXNDbGlja2Vk''@;'; put 'put ''JiZ0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSgpLDA9PT10aGlzLnRpbWVzQ2xpY2tlZCYmKHRoaXMudGltZXNDbGlja2VkKyssc2V0VGltZW91dCgoKT0+e3RoaXMudGltZXNDbGlja2VkPTB9LDIwMCkpfWNsZWFuRXhjZWVkKCl7dGhpcy5leGNlZWRDZWxscz1bXX1h''@;'; put 'put ''cHByb3ZlcnNUb2dnbGUoKXt0aGlzLnNob3dBcHByb3ZlcnM9IXRoaXMuc2hvd0FwcHJvdmVyc31hZGRSb3coKXt0aGlzLmFkZGluZ05ld1Jvdz0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLGQ9dGhpcy5kYXRhU291cmNlLmxlbmd0aDthLmFsdGVyKCJpbnNl''@;'; put 'put ''cnRfcm93X2JlbG93IixkLDEpLGEudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS5zZWxlY3RDZWxsKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwwKSxhLnJlbmRlcigpLHRoaXMuZGF0YVNvdXJjZVtkXSYmKHRoaXMuZGF0YVNvdXJjZVtkXS5ub0xpbmtPcHRp''@;'; put 'put ''b249ITApLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSl9Y2FuY2VsU3VibWl0KCl7dGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0KSx0aGlzLmRhdGFTb3Vy''@;'; put 'put ''Y2VCZWZvcmVTdWJtaXQ9W10sdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxW''@;'; put 'put ''YWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIDA9PT1oPzYwOmQ+NTAwPzUwMDpkfX0sITEpLGEuc2VsZWN0Q2VsbCgwLDApLGEucmVuZGVyKCksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlv''@;'; put 'put ''blZhbHVlcygpfWdldFJvd3NTdWJtaXR0aW5nQ291bnQoKXt0aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5kZWJ1ZyYmKHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkp''@;'; put 'put ''O2xldCBhPTAsZD0wLGg9MDt0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLmRhdGFNb2RpZmllZD1bXTtmb3IobGV0IGY9MDtmPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7ZisrKXtjb25zdCB2PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2ZdKTtp''@;'; put 'put ''ZigiWWVzIj09PXYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fKXRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksZCsrO2Vsc2V7Y29uc3QgTT10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQuZmluZChJPT57Zm9yKGNvbnN0IEcgb2YgdGhpcy5oZWFkZXJQa3MpaWYoSVtHXSE9PXZbR10p''@;'; put 'put ''cmV0dXJuITE7cmV0dXJuITB9KTtNP0pTT04uc3RyaW5naWZ5KHYpIT09SlNPTi5zdHJpbmdpZnkoTSkmJih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksYSsrKToodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRS''@;'; put 'put ''b3dzSW5kZXhlcy5wdXNoKGYpLGgrKyl9fXRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOmEscm93c0RlbGV0ZWQ6ZCxyb3dzQWRkZWQ6aH19dmFsaWRhdGVQcmltYXJ5S2V5cygpe2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPWEuZ2V0RGF0YSgpO3RoaXMucGtGaWVsZHM9W107Zm9y''@;'; put 'put ''KGxldCBNPTA7TTxkLmxlbmd0aDtNKyspe2xldCBJPSIiO2ZvcihsZXQgRz0xO0c8dGhpcy5yZWFkT25seUZpZWxkcysxO0crKylJPUkrInwiK2RbTV1bR107dGhpcy5wa0ZpZWxkcy5wdXNoKEkpfWNvbnN0IGg9W10sZj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2ZvcihsZXQgTT0wO008dGhp''@;'; put 'put ''cy5wa0ZpZWxkcy5sZW5ndGg7TSsrKWZvcihsZXQgST0wO0k8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7SSsrKXRoaXMucGtGaWVsZHNbTV09PT10aGlzLnBrRmllbGRzW0ldJiZJIT09TSYmaC5wdXNoKEkpO2lmKHRoaXMucGtGaWVsZHMubGVuZ3RoPmYpZm9yKGxldCBNPWY7TTx0aGlzLnBrRmll''@;'; put 'put ''bGRzLmxlbmd0aDtNKyspZm9yKGxldCBJPWY7STx0aGlzLnBrRmllbGRzLmxlbmd0aDtJKyspTTxJJiZ0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tJXSYmaC5wdXNoKEkpO2xldCB2O2ZvcihsZXQgTT0wO008aC5sZW5ndGg7TSsrKWZvcihsZXQgST0xO0k8dGhpcy5yZWFkT25s''@;'; put 'put ''eUZpZWxkcysxO0krKyl2PWEuZ2V0Q2VsbE1ldGEoaFtNXSxJKSx2LnZhbGlkPSExLHYuZHVwS2V5PSEwLGEucmVuZGVyKCk7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkpXX1yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29uc3QgaD10aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlO2Zvcihjb25zdCBmIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IHY9Zi52YWx1ZXMubWFwKE09Pk1bdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtoLmJhdGNoKCgpPT57Y29uc3QgTT1oLmdldENlbGxNZXRhKGYucm93LGYuY29s''@;'; put 'put ''KSxJPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoTS5kYXRhfHwiIik7bGV0IEc7SSYmKEc9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShJKSksR3x8KEc9W10pO2NvbnN0IGllPVsuLi5uZXcgU2V0KFsuLi5HLC4uLnZdKV07dGhpcy5jdXJyZW50RWRpdFJlY29yZFZh''@;'; put 'put ''bGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7c291cmNlOmllfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIixpZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEo''@;'; put 'put ''Zi5yb3csZi5jb2wsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRh''@;'; put 'put ''dGVSdWxlKGYuY29sLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpmLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoZix2b2lkIDAsYSxkKSxoLnJlbmRlcigpfSl9fXJl''@;'; put 'put ''U2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLGQsaD0hMSxmKXtpZihhKXtkfHwoZD1hLnJvdyk7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLE0saCxmKX1lbHNlIGZvcihjb25zdCBN''@;'; put 'put ''IG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IEk9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKE0pO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKE0sTS5yb3csSSxoLGYpfX1zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLGgsZj0hMSx2KXtjb25z''@;'; put 'put ''dCBNPXRoaXMuaG90SW5zdGFuY2UsST1bXTtmb3IoY29uc3QgRyBvZiBoKUkuaW5kZXhPZihHLkVYVFJBX0NPTF9OQU1FKTwwJiZJLnB1c2goRy5FWFRSQV9DT0xfTkFNRSk7Zm9yKGNvbnN0IEcgb2YgSSl7Y29uc3QgaWU9aC5maWx0ZXIoZHQ9PmR0LkVYVFJBX0NPTF9OQU1FPT09Ryk7bGV0''@;'; put 'put ''IHVlPWllLm1hcChkdD0+IkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0pO2NvbnN0IHllPU0ucHJvcFRvQ29sKEcpO3RoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGR0PT5kdC5yb3c9PT1kJiZkdC5j''@;'; put 'put ''b2w9PT15ZSl8fHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5wdXNoKHtyb3c6ZCxjb2w6eWUsYWN0aXZlOiExfSksTS5zZXRDZWxsTWV0YShkLHllLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLE0uc2V0Q2VsbE1ldGEoZCx5ZSwiZWRpdG9yIiwiYXV0b2Nv''@;'; put 'put ''bXBsZXRlLmN1c3RvbSIpLE0uc2V0Q2VsbE1ldGEoZCx5ZSwic3RyaWN0IixhLnN0cmljdCksTS5zZXRDZWxsTWV0YShkLHllLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHllLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6''@;'; put 'put ''ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDphLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBqZT1NLmdldENlbGxNZXRhKGQseWUpLHFlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoamUuZGF0YXx8IiIpO2xldCBydDtxZSYmKHJ0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRv''@;'; put 'put ''d25Tb3VyY2UocWUpKSxydHx8KHJ0PVtdKSwibnVtZXJpYyI9PT1xZT8udHlwZT8ocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwibnVtYmVyIiksdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh1ZSwibnVtYmVyIikpOihydD10aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJzdHJpbmciKSx1ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHVlLCJzdHJpbmciKSk7Y29uc3QgcHQ9Wy4uLm5ldyBTZXQoWy4uLnJ0LC4uLnVlXSldO2lmKE0uc2V0Q2VsbE1ldGEoZCx5ZSwic291''@;'; put 'put ''cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZSh5ZSx7c291cmNlOnB0fSksZil7aWYodiYmdiE9PWQpcmV0dXJuO2NvbnN0IGR0PWllLmZpbmQoSnQ9PjE9PT1KdC5GT1JDRV9GTEFHKTtkdCYmc2V0VGltZW91dCgoKT0+e00uc2V0RGF0YUF0Q2Vs''@;'; put 'put ''bChkLHllLCJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNLCJmb3JjZV9jZWxsX3ZhbGlkYXRpb25fdmFsdWUiKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9PT1kJiYodGhpcy5kYXRhU291cmNlW3RoaXMuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRJbmRleF1bR109IkMiPT09ZHQuRElTUExBWV9UWVBFP2R0LlJBV19WQUxVRV9DSEFSOmR0LlJBV19WQUxVRV9OVU0pfSl9fX1nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEsZCl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmdldERhdGFBdENlbGwoZHx8YS5yb3csYS5jb2wpLHY9''@;'; put 'put ''KGEudmFsdWVzLmZpbmQoaWU9PmllW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXT09PWYpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZX0lOREVYXSxNPWEuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIoaWU9PmllWzBdPT09diksST10aGlzLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuZGVlcENsb25lKHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcyksRz1bXTtmb3IoY29uc3QgaWUgb2YgTXx8W10pe2NvbnN0IHVlPXt9O2Zvcihjb25zdCB5ZSBvZiBPYmplY3Qua2V5cyhJKSl1ZVt5ZV09aWVbSVt5ZV1dO0cucHVzaCh1ZSl9cmV0dXJuIEd9Y2hl''@;'; put 'put ''Y2tTYXZlKCl7aWYodGhpcy5nZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5nZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFkRWRpdFRpdGxl''@;'; put 'put ''PSJObyBjaGFuZ2VzIHRvIHN1Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29tZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0PSEwKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PXRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGg9MDtoPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7aCsrKWRlbGV0ZSB0aGlzLmRhdGFTb3VyY2VbaF0ubm9MaW5rT3B0aW9uO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhl''@;'; put 'put ''YWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihoLGYpe3JldHVybiBoPjUwMD81MDA6aH19LCExKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxjLmNudD0wLGMubm9uUGtDbnQ9MDtjb25z''@;'; put 'put ''dCBkPWEuZ2V0RGF0YSgpO2lmKGQubGVuZ3RoPjEmJmEuaXNFbXB0eVJvdyhkLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZC5sZW5ndGgtMSksdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5w''@;'; put 'put ''a0R1cHM9ITAsdGhpcy5zdWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxp''@;'; put 'put ''ZGF0aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntjb25zdCBoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKTtoJiZoLmZvY3VzKCl9LDIwMCkp''@;'; put 'put ''fSl9c2F2ZVRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0oYT1hLmZpbHRlcih2PT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoST0+e2Zvcihjb25zdCBHIG9mIGQuaGVhZGVyUGtzKWlmKElbR10hPT12W0ddKXJldHVy''@;'; put 'put ''biExO3JldHVybiEwfSkpKS5tYXAodj0+e2NvbnN0IE09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyx2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1NLE9iamVjdC5rZXlzKHYpLm1h''@;'; put 'put ''cChJPT57Im51bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShJKT8udHlwZSYmIi4iPT09dltJXSYmKHZbSV09bnVsbCl9KSx2fSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dJ''@;'; put 'put ''bmZvTW9kYWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJbmRleGVz''@;'; put 'put ''Lmxlbmd0aCYmYy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtjb25zdCB2PXtBQ1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksdi5NRVNTQUdFPWQubWVzc2FnZSx2LkxJQkRT''@;'; put 'put ''PWQubGliZHMsZC5jb2xzKXtjb25zdCBNPWEuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUodixNLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsZC4kZGF0YUZv''@;'; put 'put ''cm1hdHMpLnRoZW4oRz0+e2lmKHR5cGVvZiBHLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXM8InUiKXJldHVybiBkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitHLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCksITA7bGV0IGllPSJTdWJtaXQgcmVxdWVzdCBmYWls''@;'; put 'put ''ZWQiO0cmJihpZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIEc/RzpKU09OLnN0cmluZ2lmeShHKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGllLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goRz0+e2NvbnNvbGUubG9nKCJlcnIiLEcp''@;'; put 'put ''LGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMCxkLnN1Ym1pdD0hMTtjb25zdCBpZT0ic3RyaW5nIj09dHlwZW9mIEcuYWRhcHRlclJlc3Buc2U/Ry5hZGFwdGVyUmVzcG5zZTpKU09OLnN0cmluZ2lmeShHLmFkYXB0ZXJSZXNwbnNlKTtyZXR1cm4gZC5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke2llfWAsbnVsbCwiU3VibWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8o''@;'; put 'put ''ZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJ''@;'; put 'put ''bnZhbGlkKCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29y''@;'; put 'put ''ZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVs''@;'; put 'put ''cGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYm''@;'; put 'put ''KHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCB2PXRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl0sTT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLEk9KDAsZ2cuaXNTcGVjaWFsTWlzc2luZykodik7''@;'; put 'put ''TSYmIWlzTmFOKHYpJiYhSSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSp2KX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0''@;'; put 'put ''dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4''@;'; put 'put ''Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJl''@;'; put 'put ''bnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1''@;'; put 'put ''dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRo''@;'; put 'put ''aXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2Up''@;'; put 'put ''LHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IoY29uc3QgdiBvZiBmKWlmKHYpe2NvbnN0IE09di5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSB2''@;'; put 'put ''LnByb3AsZGVsZXRlIHYuZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHYuY29sLHsuLi52LGRhdGE6TX0pfX10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9ZCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xv''@;'; put 'put ''bmUodGhpcy5kYXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9Pntjb25zdCBmPWguZ2V0UGx1Z2luKGEpO2Y/KHNldFRpbWVvdXQoKCk9PntkP2YuZW5hYmxlUGx1Z2luKCk6Zi5kaXNhYmxlUGx1Z2luKCl9LDEw''@;'; put 'put ''MCksaC5yZW5kZXIoKSk6Y29uc29sZS53YXJuKCJUb2dnbGUgSG90IFBsdWdpbiBmYWlsZWQgLSBQbHVnaW4gbmFtZWQ6ICIrYSsiIC0gY291bGQgbm90IGJlIGZvdW5kLiIpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKXtyZXR1cm4hIXRoaXMuZGlzYWJsZWRCYXNpY0R5''@;'; put 'put ''bmFtaWNDZWxsVmFsaWRhdGlvbk1hcC5maW5kKGY9PmYucm93PT09YSYmZi5jb2w9PT1kJiYhZi5hY3RpdmUpfWR5bmFtaWNDZWxsVmFsaWRhdGlvbihhLGQpe2lmKHRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uRGlzYWJsZWQoYSxkKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdEluc3RhbmNl''@;'; put 'put ''O2lmKGguZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSlyZXR1cm47Y29uc3Qgdj1oLmdldERhdGFBdENlbGwoYSxkKSxNPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2FdKSxJPU9iamVjdC5rZXlzKE0pW2RdLEc9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0''@;'; put 'put ''ZUtleXNBbmRIYXNoKE0sW0ksIm5vTGlua09wdGlvbiJdLCExKSxpZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleCh1ZT0+dWUuaGFzaD09PUcpO2lmKGllPi0xKXtsZXQgdWU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtpZV0udmFsdWVzLm1hcChqZT0+amVbdGhpcy5j''@;'; put 'put ''ZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCB5ZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLEVlPSIgIiE9PXY7aC5iYXRjaCgoKT0+e2NvbnN0IGplPWguZ2V0Q2VsbE1ldGEoYSxkKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGpl''@;'; put 'put ''LmRhdGF8fCIiKTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLHVlPXRoaXMu''@;'; put 'put ''aGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXModWUsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5nIiksdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh1ZSwic3RyaW5nIikpO2NvbnN0IHB0''@;'; put 'put ''PVsuLi5uZXcgU2V0KFsuLi5ydCwuLi51ZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixwdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtzb3VyY2U6cHR9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2llXS52YWx1ZXMubGVuZ3Ro''@;'; put 'put ''PjApe2NvbnN0IGR0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbaWVdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGEsZCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJz''@;'; put 'put ''dHJpY3QiLGR0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShkLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpkdCxmaWx0ZXI6ITF9KX10''@;'; put 'put ''aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyh0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2llXSxhLHllJiZFZSksaC5yZW5kZXIoKX0pfWlmKGllPDApe2NvbnN0IHVlPXtTQVNDb250cm9sVGFibGU6W3tsaWJkczp0aGlzLmxpYmRzLHZhcmlhYmxlX25tOkl9XSxzb3Vy''@;'; put 'put ''Y2Vfcm93OltNXX0seWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEZXRhaWxzKEkpLmZpbmQoRWU9PiJTT0ZUU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFfHwiSEFSRFNFTEVDVF9IT09LIj09PUVlLlJVTEVfVFlQRSk7eWUmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnB1c2goe3Jv''@;'; put 'put ''dzphLGNvbDpkLHN0cmljdDoiSEFSRFNFTEVDVF9IT09LIj09PXllLlJVTEVfVFlQRSx2YWx1ZXM6W10saGFzaDpHLGNvdW50OnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoKzF9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFNtdCksdGhpcy5jdXJyZW50RWRpdFJlY29y''@;'; put 'put ''ZExvYWRpbmdzLnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsdWUsdm9pZCAwLHtzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihFZT0+e2lmKEVl''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcy5tYXAocWU9PnFlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSkubGVuZ3RoPjApe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHJ0PT5ydC5oYXNoPT09Ryk7cWU+LTEmJih0aGlz''@;'; put 'put ''LmNlbGxWYWxpZGF0aW9uU291cmNlW3FlXT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtxZV0scm93OmEsY29sOmQsdmFsdWVzOkVlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX3ZhbHVlcyxleHRlbmRlZF92YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfZXh0ZW5kZWRf''@;'; put 'put ''dmFsdWVzfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixZZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLGguYmF0Y2goKCk9''@;'; put 'put ''PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsWWVlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3Bs''@;'; put 'put ''aWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aD50aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0KXtjb25zdCBxZT10aGlzLmNlbGxWYWxpZGF0aW9u''@;'; put 'put ''U291cmNlLnJlZHVjZSgocHQsZHQpPT5wdC5jb3VudDxkdC5jb3VudD9wdDpkdCkscnQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5pbmRleE9mKHFlKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShydCwxKX19KS5jYXRjaChFZT0+e2NvbnN0IGplPXRoaXMuY2VsbFZhbGlk''@;'; put 'put ''YXRpb25Tb3VyY2UuZmluZEluZGV4KHFlPT5xZS5oYXNoPT09Ryk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoamUsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsQ210KSxoLnJlbmRlcigpfSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRp''@;'; put 'put ''bmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsWWVlKSxoLnJlbmRlcigpLHRoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRFcnJvcnMuc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMuaW5kZXhPZihkKSwxKX0sM2UzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCJnZXRkeW5hbWljY29sdmFscyBlcnJvcjoiLEVlKX0pKX19''@;'; put 'put ''Y2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKXt0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHR5cGVvZiB0aGlzLmZpbHRlcl9wazwidSImJjE9PT10aGlzLmhvdFRhYmxlLmRhdGEubGVuZ3RoJiZbbnVsbCwiIl0uaW5jbHVkZXModGhpcy5ob3RUYWJsZS5kYXRhWzBdW3RoaXMuaGVhZGVyUGtzWzBd''@;'; put 'put ''XSkmJih0aGlzLnplcm9GaWx0ZXJSb3dzPSEwKX1vblJlY29yZElucHV0Rm9jdXMoYSl7dGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24odGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LGEuY29sTmFtZSl9ZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShhLGQsaCl7''@;'; put 'put ''Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2godGhpcy5kYXRhU291cmNlW2hdLFthLCJub0xpbmtPcHRpb24iXSksdj10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmQoTT0+TS5oYXNoPT09ZiYmZD09PU0uY29sKTtpZih2JiZ2LmV4dGVuZGVkX3ZhbHVl''@;'; put 'put ''cyYmdi5leHRlbmRlZF92YWx1ZXMubGVuZ3RoPjApe2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKHYsaCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHModixoLE0sITApfX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURf''@;'; put 'put ''UkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXZpZXdib3hNYW5hZ2VyKCl7dGhpcy52aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJv''@;'; put 'put ''d3NEZWxldGVkK3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfXNldENlbGxGaWx0ZXIoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCksaD1kJiZkWzBdO2lmKGgpe2NvbnN0IGY9aFswXSxNPWhbMV07aWYoZj09PWhbMl0mJk09PT1oWzNdKXtjb25zdCBHPXRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEoZixNKTtHJiZHLmZpbHRlcj09PSFhJiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKGYsTSwiZmlsdGVyIixhKX19fW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNl''@;'; put 'put ''X2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1ofSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307''@;'; put 'put ''dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxb''@;'; put 'put ''MF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihL''@;'; put 'put ''bi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sS24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJl''@;'; put 'put ''ZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdp''@;'; put 'put ''c3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5kc21ldGEuZmluZChHPT4iTk9URVMiPT09Ry5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoRz0+IkREX0xPTkdERVNDIj09PUcuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKEc9PiJERF9TSE9SVERFU0MiPT09Ry5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5W''@;'; put 'put ''QUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0pKHRoaXMuY29scykpLE0uZm9yRWFjaChHPT57dGhpcy5hcHByb3ZlcnMucHVzaChHLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRh''@;'; put 'put ''dGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFy''@;'; put 'put ''YW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0''@;'; put 'put ''ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/Iiks''@;'; put 'put ''dGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFS''@;'; put 'put ''UyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEu''@;'; put 'put ''eGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBDNmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVz''@;'; put 'put ''LGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBHPTA7Rzx0aGlzLmhlYWRlckNvbHVtbnMubGVu''@;'; put 'put ''Z3RoO0crKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltHXS5kYXRhXT1fbXQodGhpcy5jZWxsVmFsaWRhdGlvbltHXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bR10pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRh''@;'; put 'put ''U291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJl''@;'; put 'put ''YWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oRyxpZSl7cmV0dXJuIDA9PT1pZT82MDpHPjUwMD81MDA6R30sY29weVBhc3RlOnRoaXMuaG90VGFibGUu''@;'; put 'put ''Y29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Rz0+IiAiLHJvd0hlYWRlcldp''@;'; put 'put ''ZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9v''@;'; put 'put ''bmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KEcsaWUsdWUseWUsRWUsamUpPT57Y29uc3QgcWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBydCxwdD0iTm8g''@;'; put 'put ''aW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZHQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1kdD9kdFswXVsxXTotMSx2bj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoSnQpO3J0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3ZuXSxydCYm''@;'; put 'put ''KHB0PWBMQUJFTDogJHtydD8ubGFiZWx9PGJyPlRZUEU6ICR7cnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtydD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7cnQ/LmZvcm1hdH1gKX1yZXR1cm4gcWUuaW5uZXJIVE1MPXB0LHFlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0''@;'; put 'put ''TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihHLGllKT0+e2NvbnN0IHVlPXRoaXMuY29sdW1uSGVhZGVyW0ddLHllPXVlJiZ0aGlzLmlzQ29sUGsodWUpLEVlPXVlJiZ0aGlz''@;'; put 'put ''LmlzUmVhZG9ubHlDb2wodWUpO3llJiZpZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxFZSYmIXllJiZpZS5jbGFzc0xpc3QuYWRkKCJyZWFkb25seUNlbGwiKSwwPT09RyYmaWUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLGllLmNsYXNz''@;'; put 'put ''TGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooRyxpZSx1ZSk9PntpZSYmdGhpcy5pc1JlYWRvbmx5Q29sKGllKSYmKHVlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEs''@;'; put 'put ''dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclsw''@;'; put 'put ''XT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2NvbnN0IEk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7SSYmSS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEc9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRo''@;'; put 'put ''aXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCBpZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2llJiZpZS5jbGljaygpfSwxMDApfSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKEcsaWUsdWUseWUsRWUsamUpPT57''@;'; put 'put ''Rz09PXVlJiZpZT09PXllJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKEcsaWUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3du''@;'; put 'put ''IiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoRyxpZSk9PntpZigiZWRpdCI9PT1pZSl7Y29uc3QgdWU9dGhpcy5ob3RJbnN0YW5jZSx5ZT1HWzBdWzBdLEVlPUdbMF1bMV0samU9dWUucHJvcFRvQ29sKEVlKSxxZT11ZS5nZXRDZWxsTWV0''@;'; put 'put ''YSh5ZSxqZSk7cWUmJiExPT09cWUuZmlsdGVyJiZ1ZS5zZXRDZWxsTWV0YSh5ZSxqZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKEVlLGplLHllKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixHPT57dGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoRyxpZSk9PntpZihHPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IHVlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9Pnt1ZSYmKHVlLnNj''@;'; put 'put ''cm9sbFRvcD11ZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKEcsaWUpPT57Y29uc3QgdWU9aWVbMF0uc3RhcnRDb2w7R1swXT1HWzBdLm1hcCgoeWUsRWUpPT57Y29uc3QgamU9dGhpcy5jb2x1bW5IZWFkZXJbdWUrRWVdLHFlPSJudW0iPT09dGhpcy4kZGF0''@;'; put 'put ''YUZvcm1hdHM/LnZhcnNbamVdPy50eXBlLHJ0PSgwLGdnLmlzU3BlY2lhbE1pc3NpbmcpKHllKTtyZXR1cm4gcWUmJiFpc05hTih5ZSkmJiFydCYmKHllKj0xKSx5ZX0pfSksdi5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHYuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVk''@;'; put 'put ''aXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFy''@;'; put 'put ''YW0pJiYwPT09S24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEtuLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVt''@;'; put 'put ''LHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksdi5yZW5kZXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UodmMpLEdlKFNkKSxHZShraCksR2Uo''@;'; put 'put ''U3UpLEdlKExzKSxHZShDdSksR2UoQnMpLEdlKEVzKSxHZShZbSksR2UoQTZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKHFhKHA3dCw3KSxxYShnN3QsNSkscWEo''@;'; put 'put ''bTd0LDUpLHFhKHY3dCw1KSxxYSh5N3QsNSkpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguaHQ9Zi5maXJzdCksQ2koZj1TaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExpc3Q9ZiksQ2koZj1TaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSxDaShmPVNpKCkpJiYoaC5ob3RJbnN0''@;'; put 'put ''YW5jZUNvbXBMaXN0PWYpLENpKGY9U2koKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjc0LGNvbnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElu''@;'; put 'put ''cHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmls''@;'; put 'put ''ZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0s''@;'; put 'put ''WzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wIl0sWyJ0eXBl''@;'; put 'put ''IiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiVVRGLTgiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJXTEFUSU4xIiwibmFtZSIsImVuY29kaW5nIiwz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBmaWx0ZXJCdG4iLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGVkaXRCdG4iLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFy''@;'; put 'put ''eSBtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhjZWwtcGFyc2luZyBjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsIm1vZGFs''@;'; put 'put ''LWZvb3RlciJdLFszLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRlciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIs''@;'; put 'put ''ImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIiwib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0x''@;'; put 'put ''Il0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAiLCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0aW9uLXJlbGF0aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4i''@;'; put 'put ''LCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVhZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50''@;'; put 'put ''LWxnLWVuZCJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtMyBjbHItY29sLWxnLTQgYmFja0J0biIsNCwibmdJZiJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC01IiwiY2xyLWNvbC1sZy00IiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIi''@;'; put 'put ''XSxbImNsYXNzIiwiZWRpdG9yLXRpdGxlIHRleHQtY2VudGVyIG10LTAiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC00IGNsci1jb2wtbGctNCBidG5DdHJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjYXJkLWJsb2NrIiwicC0wIiwiY2xyLWZsZXgtMSIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWzEsImNhcmQtdGV4dCIsImhvdEVkaXRvciIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwi''@;'; put 'put ''YmFja2dyb3VuZC10cmFuc3BhcmVudCJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwxLCJlZGl0LWhvdCIsMywibGljZW5zZUtleSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIs''@;'; put 'put ''Im10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywi''@;'; put 'put ''Y2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0''@;'; put 'put ''LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10''@;'; put 'put ''aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRh''@;'; put 'put ''dGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImNsYXNzIiwibS0wIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwi''@;'; put 'put ''XSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9h''@;'; put 'put ''ZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdlIiwidXBsb2FkZXIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIsMywiY2xpY2si''@;'; put 'put ''LCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmciLCJjbHItY29s''@;'; put 'put ''LW1kLTEyIl0sWzMsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLCJjdXJyZW50UmVjb3JkIiwicmVjb3JkQWN0aW9uIiwibGliZHMiLCJxdWVyeUZpbHRlciIsImZpbHRl''@;'; put 'put ''ciIsInN1Ym1pdExvYWRpbmciLCJoZWFkZXJQa3MiLCJjZWxsVmFsaWRhdGlvbiIsImN1cnJlbnRSZWNvcmRJbmRleCIsImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsImN1cnJlbnRSZWNvcmRFcnJvcnMiLCJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9n''@;'; put 'put ''cmVzcyIsImxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtMyIsImNsci1jb2wtbGctNCIsImJhY2tCdG4iXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJjYXJldCIsImRp''@;'; put 'put ''ciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwidGV4dCJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tZGltbWVkIiwidmlld2JveC1vcGVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIiwic2l6ZSIsIjIwIl0sWzEsImVkaXRvci10''@;'; put 'put ''aXRsZSIsInRleHQtY2VudGVyIiwibXQtMCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGluZm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGlj''@;'; put 'put ''ayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmlldy10YWJsZSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9u''@;'; put 'put ''IiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiYnRuVmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1w''@;'; put 'put ''cmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJj''@;'; put 'put ''bGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2si''@;'; put 'put ''LCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4t''@;'; put 'put ''dXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1w''@;'; put 'put ''cmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVy''@;'; put 'put ''Il0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIs''@;'; put 'put ''Im10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwi''@;'; put 'put ''XSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1o''@;'; put 'put ''aWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUi''@;'; put 'put ''LCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVh''@;'; put 'put ''LWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9k''@;'; put 'put ''ZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDYpKDEsImNsci1tb2RhbCIsNyksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRh''@;'; put 'put ''Y2hGaWxlKE0sITApKX0pLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLE9lKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJk''@;'; put 'put ''aXYiLDkpKDUsImRpdiIsMTApKDYsInNwYW4iKSxPZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1y''@;'; put 'put ''YWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksT2UoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJj''@;'; put 'put ''bHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLE9lKDIwLCJXTEFUSU4xIiksaGUoKSgpKCko''@;'; put 'put ''KSgpLGd0KDIxLEM3dCw2LDEsImRpdiIsMTgpKDIyLFM3dCwzLDEsImRpdiIsMTkpLGRlKDIzLCJkaXYiLDEzKSxndCgyNCxNN3QsMiwxLCJidXR0b24iLDIwKSgyNSx4N3QsMiwwLCJidXR0b24iLDIxKSxoZSgpLGd0KDI2LEU3dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLEd0KDI3LCJkaXYi''@;'; put 'put ''LDIzKSxoZSgpLGd0KDI4LFQ3dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI0KSxkZSgyOSwiZGl2IiwyNSwwKSxndCgzMSxBN3QsMiwwLCJkaXYiLDI2KSxkZSgzMiwiZGl2IiwyNyksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxv''@;'; put 'put ''YWRNb2RhbCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxndCgzNCxrN3QsOSwyLCJkaXYiLDI5KSxkZSgzNSwiZGl2IiwzMCksZ3QoMzYsRjd0LDEwLDYsImg0IiwzMSksaGUoKSxndCgzNyxaN3QsNCwzLCJkaXYiLDMyKSgzOCxXN3QsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxn''@;'; put 'put ''dCg0MCwkN3QsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIsImRpdiIsMzcpLEd0KDQzLCJob3QtdGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIpLGd0KDQ2LFg3dCw1LDIsImNsci10b29sdGlwIiwzOSkoNDcsSjd0LDMsMSwicCIsNDApLGhlKCksZ3QoNDgsdDl0LDE2LDYs''@;'; put 'put ''ImRpdiIsNDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLE9lKDUxLCJOb3Rp''@;'; put 'put ''Y2UiKSxoZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksT2UoNTQpLGhlKCkoKSxkZSg1NSwiZGl2IiwyMykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxPZSg1NywiIENhbmNlbCAiKSxo''@;'; put 'put ''ZSgpLGRlKDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudXBsb2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLE9lKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxnaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5iYWRFZGl0LE0pfHwoaC5iYWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4KSxPZSg2MiksaGUoKSxkZSg2MywiZGl2Iiw5KSg2NCwicCIpLE9lKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJi''@;'; put 'put ''dXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguYmFkRWRpdD0hMSl9KSxPZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5w''@;'; put 'put ''a051bGwsTSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIsOCksT2UoNzEsIkVycm9yIiksaGUoKSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLE9lKDc0LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBL''@;'; put 'put ''ZXkgY29sdW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtOdWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxPZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxn''@;'; put 'put ''aSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5ub1BrTnVsbCxNKXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3OSwiaDMiLDgpLE9lKDgwLCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxPZSg4MywiSW5jb3JyZWN0IGRh''@;'; put 'put ''dGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgpKCksZGUoODQsImRpdiIsMjMpKDg1LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLE9lKDg2LCIgT2sgIiksaGUoKSgp''@;'; put 'put ''KCksZGUoODcsImNsci1tb2RhbCIsNDYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnBrRHVwcyxNKXx8KGgucGtEdXBzPU0pLEN0KE0pfSksZGUoODgsImgzIiw4KSxPZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJw''@;'; put 'put ''IiksT2UoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLE9lKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLGhlKCksZ3QoOTUsbjl0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIs''@;'; put 'put ''MjMpKDk3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucGtEdXBzPSExKX0pLE9lKDk4LCIgT2sgIiksaGUoKSgpKCksZGUoOTksImNsci1tb2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm''@;'; put 'put ''KSxtaShoLnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxkZSgxMDAsImgzIiw4KSxPZSgxMDEsIkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSkoMTAzLCJwIiksT2UoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBs''@;'; put 'put ''aW1pdHM6ICIpLGhlKCksZ3QoMTA1LHI5dCwyLDMsInAiLDQ4KSxoZSgpLGRlKDEwNiwiZGl2IiwyMykoMTA3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksT2UoMTA4LCIgT2sgIiksaGUo''@;'; put 'put ''KSgpKCkoKSgpKCkoKSgpLGd0KDEwOSxpOXQsMTQsMCwiZGl2Iiw0OSksZGUoMTEwLCJjbHItbW9kYWwiLDUwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUx''@;'; put 'put ''KSxPZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNwYW4iKSxPZSgxMTQpLGhlKCkoKSxkZSgxMTUsImRpdiIsOSksZ3QoMTE2LGE5dCwyLDAsImFwcC1xdWVyeSIsMzkpLGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLE9lKDExOSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxPZSgxMjEsIiBDYW5jZWwgIiksaGUo''@;'; put 'put ''KSxkZSgxMjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksT2UoMTIzLCIgT2sgIiksaGUoKSgpKCksZGUoMTI0LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gd3QoZiksbWkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSgxMjUsImgzIiw4KSxPZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcsImRpdiIsOSkoMTI4LCJwIiksT2UoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSgxMzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSgxMzQsIiBPayAiKSxo''@;'; put 'put ''ZSgpKCkoKSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRpc2NhcmRTb3VyY2VGaWxlLE0pfHwoaC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxPZSgxMzcsIldh''@;'; put 'put ''cm5pbmciKSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxPZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLGRlKDE0MCwiYiIpLE9lKDE0MSksaGUoKSxPZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxo''@;'; put 'put ''ZSgpLGRlKDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZpbGU9ITEpfSksT2UoMTQ1LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3QoaC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKSl9KSxPZSgxNDcsIiBPayAiKSxoZSgpKCkoKSxkZSgxNDgsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChm''@;'; put 'put ''KSxtaShoLmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dvcmRNb2RhbD1NKSxDdChNKX0pLGRlKDE0OSwiaDMiLDUxKSxPZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksT2UoMTUzLCJQbGVhc2UgZW50''@;'; put 'put ''ZXIgcGFzc3dvcmQ6IiksaGUoKSxHdCgxNTQsImlucHV0Iiw1OSwyKSxoZSgpLGRlKDE1NiwiZGl2IiwyMyksZ3QoMTU3LG85dCwyLDAsInAiLDYwKSxkZSgxNTgsImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxD''@;'; put 'put ''dChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLE9lKDE1OSwiIENhbmNlbCB1cGxvYWQgIiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEs''@;'; put 'put ''Q3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSksT2UoMTYxLCIgVW5sb2NrICIpLGhlKCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgubWFudWFsRmlsZUVkaXRNb2Rh''@;'; put 'put ''bCxNKXx8KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRlKDE2MywiaDMiLDUxKSxPZSgxNjQsIldhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5KSxPZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2''@;'; put 'put ''NywiYiIpLE9lKDE2OCksaGUoKSxPZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIsMjMpKDE3MSwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVF''@;'; put 'put ''ZGl0TW9kYWw9ITEpfSksT2UoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTczLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksT2UoMTc0LCIgT2sg''@;'; put 'put ''IiksaGUoKSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2MiksZ2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4g''@;'; put 'put ''d3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDE3NiwiYXBwLXZpZXdib3hlcyIsNjMpLGdpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0p''@;'; put 'put ''fSksaGUoKX1pZigyJmQpe2NvbnN0IGY9aGEoMTU1KTtmZSgpLHhlKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0''@;'; put 'put ''YXRlKSxwaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLHBpKCJuZ01vZGVsIixoLmVuY29kaW5nKSx4ZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSg0KSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZykseGUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSks''@;'; put 'put ''ZmUoMykseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCks''@;'; put 'put ''eGUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSx4ZSgibmdJZiIsaC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSx4ZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmgu''@;'; put 'put ''c3VibWl0KSxmZSgzKSx4ZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCksVHIoImNsci1jb2wtbGctMTIiLCFoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdWYXIiLGxwKDY3LGI3dCxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxp''@;'; put 'put ''YmRzLnNwbGl0KCIuIilbMV0pKSxmZSgpLHhlKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdJZiIsIUdzKDcwLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSxmZSgpLHhlKCJuZ0NsYXNzIixzcCg3MixfN3QsIUdzKDcxLEg2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSxUcigiaGlkZGVuIixoLmhvdFRhYmxlLmhpZGRlbikseGUoImxpY2Vuc2VLZXkiLGguaG90VGFibGUubGljZW5zZUtleSksZmUoMykseGUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0''@;'; put 'put ''dG9uKSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFTb3VyY2UubGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGguc3VibWl0KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJt''@;'; put 'put ''aXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmJhZEVkaXQpLGZlKDIpLHdyKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSx3cihoLmJhZEVkaXRDYXVzZSks''@;'; put 'put ''ZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgucGtEdXBzKSxmZSg4KSx4ZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLHBpKCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iLGgudG9vTG9uZyksZmUoNikseGUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLHhlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUo''@;'; put 'put ''NCksRHIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSx4ZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLHhlKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxwaSgiY2xy''@;'; put 'put ''TW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZmlsZW5hbWUpLGZlKDcpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJt''@;'; put 'put ''ZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSkseGUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3RoPDEpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCkseGUoImNsck1vZGFsU2l6ZSIs''@;'; put 'put ''InhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmZpbGVuYW1lKSxmZSg3KSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbykseGUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W0k2ZSx3dSxucyx5YSxxbCx5TCxubCwkcyxjMSxIbCxvdSxLdSxqMCxMMixQMixkcyxjRyxFWmUsbEcsUUwsdjcsYjcseTcsRF8sU3csdEUsUjZlLEw2ZSxPNmUscE8sWGVlLHU3dCxoN3QsZjd0LEY2ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25z''@;'; put 'put ''dCBzOXQ9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6aU59LHtwYXRoOiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbSIsY29tcG9uZW50OmlOfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVu''@;'; put 'put ''dDppTn1dO2xldCBsOXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhLHpjLmZvckNoaWxk''@;'; put 'put ''KHM5dCksemNdfSl9fXJldHVybiBjfSkoKSx4QT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpb''@;'; put 'put ''UmEsejAsUmEsUmMsbmZdfSl9fXJldHVybiBjfSkoKSxRZWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2lt''@;'; put 'put ''cG9ydHM6W1JhLHowLFJhLFJjLEc5LE1BLG5mXX0pfX1yZXR1cm4gY30pKCksTjZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCxSYSxSYyxRZWUsbzksXzFlLF82ZSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO25OKCk7bGV0IGM5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTjZlLFJhLFJjLGw5dCx6MCxvOS5mb3JSb290KCksRzksbmYsQ3csTUEseEEsXzFlLFFlZV19KX19cmV0dXJuIGN9KSgpLHU5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0''@;'; put 'put ''KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhvbWUtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5l''@;'; put 'put ''ciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZDl0PVsic2lkZWJhck5hdiJdLGg5dD1bIioiXSxmOXQ9KCk9Plsi''@;'; put 'put ''L3ZpZXcvdXNlcm5hdi91c2VycyJdLHA5dD0oKT0+WyIvdmlldy91c2VybmF2L2dyb3VwcyJdLGc5dD0oKT0+WyIvdmlldy91c2VybmF2L3JvbGVzIl07ZnVuY3Rpb24gbTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYSIsMTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoTGUoMykubmF2aWdhdGVUb1ZpZXdlcigpKX0pLE9lKDEsIkRhdGEiKSxoZSgpfX1mdW5jdGlvbiB2OXQoYyxsKXsxJmMmJihkZSgwLCJhIiwxOSksT2UoMSwiQVBJIEV4cGxvcmVyIiksaGUoKSl9ZnVuY3Rpb24geTl0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjApLE9lKDEs''@;'; put 'put ''IkxpbmVhZ2UiKSxoZSgpKX1mdW5jdGlvbiBiOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMSksT2UoMSwiTWV0YWRhdGEiKSxoZSgpKX1mdW5jdGlvbiBfOXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyMiksT2UoMSwiIFVzZXJzIiksaGUoKSl9ZnVuY3Rpb24gdzl0KGMsbCl7MSZjJiYoZGUoMCwi''@;'; put 'put ''YSIsMjMpLE9lKDEsIlN1Ym1pdHRlZCIpLGhlKCkpfWZ1bmN0aW9uIEM5dChjLGwpezEmYyYmKGRlKDAsImEiLDI0KSxPZSgxLCJUbyBBcHByb3ZlIiksaGUoKSl9ZnVuY3Rpb24gUzl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxndCgxLG05dCwyLDAsImEiLDEx''@;'; put 'put ''KSgyLHY5dCwyLDAsImEiLDEyKSgzLHk5dCwyLDAsImEiLDEzKSg0LGI5dCwyLDAsImEiLDE0KSg1LF85dCwyLDAsImEiLDE1KSg2LHc5dCwyLDAsImEiLDE2KSg3LEM5dCwyLDAsImEiLDE3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgi''@;'; put 'put ''dmlldyIpKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVNWSVlBIj09PWEuc2VydmVyVHlwZSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZp''@;'; put 'put ''ZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gTTl0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE9lKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsUzl0LDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLERyKCIgIixh''@;'; put 'put ''LmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiB4OXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIEU5dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gVDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRv''@;'; put 'put ''biIsMjYpKDIsInAiLDI3KSxHdCgzLCJjbHItaWNvbiIsMzIpLE9lKDQsIiBSb2xlcyAiKSxoZSgpKCksZ3QoNSxFOXQsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgicm91dGVyTGluayIsR3MoMixnOXQpKSxmZSg0KSx4ZSgiY2xy''@;'; put 'put ''SWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvcm9sZXMiKSl9fWZ1bmN0aW9uIEE5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIiwyNSkoMSwiY2xyLXRhYiIpKDIsImJ1dHRvbiIsMjYpKDMsInAiLDI3KSxHdCg0LCJjbHItaWNvbiIsMjgpLE9lKDUsIiBVc2Vy''@;'; put 'put ''cyIpLGhlKCkoKSxHdCg2LCJjbHItdGFiLWNvbnRlbnQiKSxoZSgpLGRlKDcsImNsci10YWIiKSg4LCJidXR0b24iLDI2KSg5LCJwIiwyNyksR3QoMTAsImNsci1pY29uIiwyOSksT2UoMTEsIiBHcm91cHMiKSxoZSgpKCksZ3QoMTIseDl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUo''@;'; put 'put ''KSxndCgxMyxUOXQsNiwzLCJjbHItdGFiIiwzMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoInJvdXRlckxpbmsiLEdzKDQsZjl0KSksZmUoNikseGUoInJvdXRlckxpbmsiLEdzKDUscDl0KSksZmUoNCkseGUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91''@;'; put 'put ''c2VybmF2L2dyb3VwcyIpKSxmZSgpLHhlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpfX1mdW5jdGlvbiBrOXQoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxPZSgyLCJUYWJsZXMiKSxoZSgpLGRlKDMsImEiLDM0KSxPZSg0LCJFeGNlbCBNYXBz''@;'; put 'put ''IiksaGUoKSxkZSg1LCJhIiwzNSksT2UoNiwiTXVsdGkgTG9hZCIpLGhlKCkoKSl9ZnVuY3Rpb24gRDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE9lKDMpLEd0KDQsImNsci1pY29uIiw5KSxoZSgpLGd0KDUsazl0LDcsMCwi''@;'; put 'put ''Y2xyLWRyb3Bkb3duLW1lbnUiLDEwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLERyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1sZXQgaTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fcm91dGVyPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLl9z''@;'; put 'put ''YXNTZXJ2aWNlPWgsdGhpcy5zY3JvbGxlZFRvQm90dG9tPW5ldyBLcix0aGlzLnNpZGViYXJPcGVuPSEwLHRoaXMuc2lkZWJhcldpZHRoPW51bGwsdGhpcy5zaWRlYmFyTWF4V2lkdGg9bnVsbCx0aGlzLnJlc2l6aW5nPSExLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnLHRo''@;'; put 'put ''aXMuc2FzanNDb25maWc9dGhpcy5fc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLl9zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKX1uZ09uSW5pdCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2lkZWJhclRvZ2dsZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2lk''@;'; put 'put ''ZWJhck9wZW49YT9hLm9wZW46IXRoaXMuc2lkZWJhck9wZW4sdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KX1vblRyZWVTY3JvbGwoYSl7bGV0IGQ9YS50YXJnZXQ7ZC5zY3JvbGxUb3A+PWQuc2Nyb2xsSGVpZ2h0LWQub2Zmc2V0SGVpZ2h0LTEwJiZ0aGlzLnNj''@;'; put 'put ''cm9sbGVkVG9Cb3R0b20uZW1pdCgpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfWdldFN1YlBhZ2UoKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgiLyIpWzJdfW5hdmlnYXRlVG9WaWV3ZXIoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVj''@;'; put 'put ''dGlvbj0iIix0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXJlc2l6ZVN0YXJ0KCl7dGhpcy5yZXNpemluZz0hMCxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9InVzZXItc2VsZWN0OiBub25lIn1yZXNpemVFbmQo''@;'; put 'put ''KXt0aGlzLnJlc2l6aW5nPSExLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0iIn1vbk1vdXNlTW92ZShhKXtpZih0aGlzLnJlc2l6aW5nKXt0aGlzLnNpZGViYXJXaWR0aD1hLmNsaWVudFg7bGV0IGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNC''@;'; put 'put ''eUNsYXNzTmFtZSgibmF2LXRyZWUiKVswXTt0aGlzLnNpZGViYXJXaWR0aCYmdGhpcy5pc092ZXJmbG93bihkKSYmKHRoaXMuc2lkZWJhck1heFdpZHRoPXRoaXMuc2lkZWJhcldpZHRoPj0zNzU/dGhpcy5zaWRlYmFyV2lkdGgrMTA6dGhpcy5zaWRlYmFyTWF4V2lkdGgpfX1vbk1vdXNlVXAo''@;'; put 'put ''YSl7dGhpcy5yZXNpemluZyYmdGhpcy5yZXNpemVFbmQoKX1pc092ZXJmbG93bihhKXtyZXR1cm4gYS5zY3JvbGxXaWR0aD5hLmNsaWVudFdpZHRofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZSh2YyksR2UoQnMpKX19c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmcWEoZDl0LDUpLDImZCl7bGV0IGY7Q2koZj1TaSgpKSYmKGguc2lkZWJhck5hdj1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihkLGgpezEmZCYmRnQoIm1vdXNlbW92ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZU1vdmUodil9LDAsJDMpKCJtb3VzZXVwIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlVXAodil9LCExLCQzKX0sb3V0cHV0czp7c2Nyb2xsZWRUb0JvdHRvbToic2Nyb2xsZWRUb0JvdHRv''@;'; put 'put ''bSJ9LG5nQ29udGVudFNlbGVjdG9yczpoOXQsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAt''@;'; put 'put ''MTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2Vy''@;'; put 'put ''IiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFyeSJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZl''@;'; put 'put ''cnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2''@;'; put 'put ''ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJu''@;'; put 'put ''YXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGlu''@;'; put 'put ''ayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2''@;'; put 'put ''TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xy''@;'; put 'put ''VmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJj''@;'; put 'put ''bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVy''@;'; put 'put ''TGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0s''@;'; put 'put ''WyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwi''@;'; put 'put ''cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL211bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7c2EoKSxk''@;'; put 'put ''ZSgwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsTTl0LDYsMSwiZGl2IiwyKSgzLEE5dCwxNCw2LCJjbHItdGFicyIsMykoNCxEOXQsNiwxLCJkaXYiLDIpLEd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5v''@;'; put 'put ''blRyZWVTY3JvbGwoTSkpfSksWXIoNyksaGUoKSxkZSg4LCJzcGFuIiw2KSxGdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKF9kKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5z''@;'; put 'put ''aWRlYmFyTWF4V2lkdGgsInB4IiksVHIoImNsb3NlZCIsIWguc2lkZWJhck9wZW4pKCJyZXNpemluZyIsaC5yZXNpemluZyksZmUoMikseGUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSx4ZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCksVHIoInJlc2l6aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVuZGVuY2llczpbeWEsSGwsSGIsTDIsX20sQ20seDcsd20sYm0sUzcsUVksdEcsc2csZzcsbTcsYzEscGJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVu''@;'; put 'put ''Y3Rpb24gSTl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIFI5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNo''@;'; put 'put ''PSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gTDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsSTl0LDEsMCwiY2xyLWljb24i''@;'; put 'put ''LDExKSg1LFI5dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uIE85dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBQOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgyKS4k''@;'; put 'put ''aW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIEY5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSko''@;'; put 'put ''MiwiaW5wdXQiLDE5LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25z''@;'; put 'put ''dCBoPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LE85dCwxLDAsImNsci1pY29uIiwxMSkoNSxQOXQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoMikscGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEg5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBOOXQoYyxs''@;'; put 'put ''KXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gVjl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjkpKDEsInNwYW4iKSxPZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEI5dChjLGwpezEmYyYmKHNpKDApLGd0KDEsVjl0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLGxpKCkpfWZ1bmN0aW9uIGo5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdCxNPUxlKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxzaSgyLDIyKSxndCgzLEg5dCwxLDAsImNsci1pY29uIiwyMykoNCxOOXQsMSwwLCJjbHItaWNvbiIs''@;'; put 'put ''MjQpLGxpKCksT2UoNSksaGUoKSxndCg2LEI5dCwyLDAsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1MZSgpLiRpbXBsaWNpdCxoPUxlKDIpLiRpbXBsaWNpdCxmPUxlKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYu''@;'; put 'put ''bGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLERyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsYSl9fWZ1bmN0aW9uIHo5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLGo5dCw3LDksImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1MZSgzKTtmZSgpLHhlKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gVTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIHYudHJl''@;'; put 'put ''ZU5vZGVDbGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwx''@;'; put 'put ''NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQsZj1MZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDE4KSxPZSgzKSxoZSgpLGd0KDQsRjl0''@;'; put 'put ''LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoNSx6OXQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixh''@;'; put 'put ''LmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksRHIoIiAiLGEuTElCUkFSWVJFRiwiICIpLGZlKCkseGUoIm5nSWYiLGEudGFibGVzKSxmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFo5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsVTl0LDYsNywiY2xyLXRy''@;'; put 'put ''ZWUtbm9kZSIsMTUpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBXOXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksT2UoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkp''@;'; put 'put ''fWZ1bmN0aW9uIFk5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxPZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIpLGhlKCkpfWZ1bmN0aW9uIEc5dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxPZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gJDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksR3QoMSwiaW1nIiwzNCksZ3QoMixZOXQsMiwwLCJwIiwzNSkoMyxHOXQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50''@;'; put 'put ''cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCkseGUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgSzl0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9''@;'; put 'put ''YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlz''@;'; put 'put ''LnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQm''@;'; put 'put ''JihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRl''@;'; put 'put ''ZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10''@;'; put 'put ''aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7bGV0IE09Zi5maWx0ZXIoZnVuY3Rpb24oSSl7cmV0dXJuLTE9PT12LmluZGV4T2YoSSkmJih2LnB1c2goSSksITApfSk7dGhpcy50YWJsZXM9TSxLbi5lZGl0b3IubGli''@;'; put 'put ''cmFyaWVzPXRoaXMubGlicmFyaWVzfUtuLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5s''@;'; put 'put ''aWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksS24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7S24uZWRpdG9yLmZpbHRlci5saWJkcz0iIixLbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xh''@;'; put 'put ''dXNlPSIiLEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEtuLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUp''@;'; put 'put ''JiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhp''@;'; put 'put ''cy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMuc2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFi''@;'; put 'put ''bGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09S24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzJiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1L''@;'; put 'put ''bi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09S24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUtuLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmllcy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRo''@;'; put 'put ''aXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEtuLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Lbi5lZGl0b3IubGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRh''@;'; put 'put ''YmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygp''@;'; put 'put ''fSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEN1KSxHZSh1MSksR2UoU3UpLEdlKHZjKSxHZShCcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9tZS1jb21wb25lbnQiXV0saG9z''@;'; put 'put ''dEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29u''@;'; put 'put ''dGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklu''@;'; put 'put ''cHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0''@;'; put 'put ''aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNr''@;'; put 'put ''IiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxl''@;'; put 'put ''cyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hh''@;'; put 'put ''cGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9w''@;'; put 'put ''ZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vz''@;'; put 'put ''cy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0''@;'; put 'put ''Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiY2xyLXRyZWUiKSxndCgyLEw5dCw2LDMsImNsci10''@;'; put 'put ''cmVlLW5vZGUiLDIpKDMsWjl0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSg1LCJkaXYiLDUpLGd0KDYsVzl0LDQsMCwiZGl2Iiw2KSg3LCQ5dCw0LDIsImRpdiIsNyksaGUoKSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWgudHJlZU5vZGVMaWJy''@;'; put 'put ''YXJpZXM/bnVsbDpoLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdGb3JPZiIsaC50cmVlTm9kZUxpYnJhcmllcyksZmUoMykseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3FsLG5sLCRzLEVoLFBk''@;'; put 'put ''LGZnLEhsLGowLEwyLFoxLHY3LGI3LHk3LGk0LG5zLHlhLFMyLGNwLFN3LHI0XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHE5dD1jPT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxldGU9Yz0+e2NvbnN0IGE9''@;'; put 'put ''Yy5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50KGFbMV0sMTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEwKX06bnVsbH0sVjZlPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIi''@;'; put 'put ''KSksYy5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1ldGUoYyk7aWYoYSl7Y29uc3R7cm93OmQsY29sdW1uOmh9PWE7Yz1EdS51dGlscy5lbmNvZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7Y29uc3QgZD1jLm1hdGNo''@;'; put 'put ''KC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07bGV0IHY9IiIsTT0tMSxJPSIiO2lmKGlzTmFOKE51bWJlcihmKSk/dj1mOk09cGFyc2VJbnQoZiksLTEhPT1NKXtjb25zdCB1ZT1sW00tMV07Zm9yKGNvbnN0IHllIGluIHVlKWlmKCJfX3Jvd051''@;'; put 'put ''bV9fIiE9PXllJiZ1ZVt5ZV09PT1hKXtJPXllK007YnJlYWt9fWVsc2UgZm9yKGxldCB1ZT0wO3VlPGwubGVuZ3RoO3VlKyspaWYobFt1ZV1bdl09PT1hKXtJPXYrKHVlKzEpO2JyZWFrfWNvbnN0IEc9RHUudXRpbHMuZGVjb2RlX2NlbGwoSSksaWU9ZXRlKGMpO2lmKGllKXtjb25zdHtyb3c6''@;'; put 'put ''dWUsY29sdW1uOnllfT1pZTtjPUR1LnV0aWxzLmVuY29kZV9jZWxsKHtyOkcucit1ZSxjOkcuYyt5ZX0pfX1yZXR1cm4gY30sSjl0PVsiZmlsZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gUTl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksR3QoMSwiY2xyLXNwaW5uZXIiLDI5KSxoZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBldnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gdHZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0i''@;'; put 'put ''IixDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gbnZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiY2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4gQ3QoTGUoKS54bG1hcE9uQ2xpY2soaCkpfSksR3QoMywiY2xyLWljb24iLDMzKSxPZSg0KSxoZSgpKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgpO2ZlKDIpLFRyKCJhY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksZmUoMiksRHIoIiAiLGEuaWQs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gcnZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcpLE9lKDEsIiBQbGVhc2Ugc2VsZWN0IGEgbWFwICIpLGhlKCkpfWZ1bmN0aW9uIGl2dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxPZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLGhlKCkpfWZ1bmN0aW9uIGF2''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpLEd0KDEsImltZyIsMzUpLGd0KDIscnZ0LDIsMCwicCIsMzYpKDMsaXZ0LDIsMCwicCIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDIpLHhlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsYS54bG1h''@;'; put 'put ''cHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBvdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiKSg0LCJoNCIpLE9lKDUpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg1KSx3cihhLmlzTG9h''@;'; put 'put ''ZGluZ0Rlc2MpfX1mdW5jdGlvbiBzdnQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIGx2dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gY3Z0KGMsbCl7MSZjJiZGbCgwKX1mdW5jdGlvbiB1dnQoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9TG4oKTtkZSgwLCJkaXYiLDQwKSxGdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVzKX0pLE9lKDQsIlJ1bGVzIiksaGUoKSxndCg1LHN2dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCksZGUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5EYXRhKX0pLE9lKDgsIkRhdGEiKSxoZSgpLGd0KDksbHZ0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaGUoKSgpLGd0KDEwLGN2dCwxLDAsIm5nLWNvbnRhaW5lciIsNDMp''@;'; put 'put ''LGRlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxPZSgxMyksaGUoKSxkZSgxNCwiaSIsNDUpLE9lKDE1KSxoZSgpLGRlKDE2LCJwIiw0NSksT2UoMTcsIiBSdWxlcyBTb3VyY2U6ICIpLGRlKDE4LCJhIiw0NiksT2UoMTkpLGhlKCkoKSxkZSgyMCwicCIsNDUpLE9lKDIxLCIgVGFyZ2V0IGRh''@;'; put 'put ''dGFzZXQ6ICIpLGRlKDIyLCJhIiw0NiksT2UoMjMpLGhlKCkoKSgpLGRlKDI0LCJkaXYiLDQ3KSxHdCgyNSwiaG90LXRhYmxlIiw0OCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLGQ9aGEoNDEpO2ZlKDUpLHhlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0u''@;'; put 'put ''UnVsZXMpLGZlKDQpLHhlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uRGF0YSksZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoMyksRHIoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLGZlKDIpLHdyKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlv''@;'; put 'put ''biksZmUoMykseGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSksZmUoKSxEcigiICIsYS5ydWxlc1NvdXJjZSwiICIpLGZlKDMpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksZmUoKSxEcigiICIsYS5zZWxl''@;'; put 'put ''Y3RlZFhMTWFwLnRhcmdldERTLCIgIiksZmUoMikseGUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXM6YS54bERhdGEpKCJjb2xIZWFkZXJz''@;'; put 'put ''IixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNIZWFkZXJzOmEueGxVcGxvYWRIZWFkZXIpKCJjb2x1bW5zIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNDb2x1bW5zOmEueGxVcGxvYWRDb2x1bW5zKSgiZmlsdGVycyIs''@;'; put 'put ''ITApKCJoZWlnaHQiLCIxMDAlIikoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVja2VyKSgiY2VsbHMiLGEuZ2V0Q2VsbENvbmZpZ3VyYXRpb24pKCJtYXhSb3dzIixhLmhvdFRhYmxlTWF4Um93cykoIm1hbnVh''@;'; put 'put ''bENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsMTUpKCJyb3dIZWlnaHRzIiwyMCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KX19ZnVuY3Rpb24gZHZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''ZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLE9lKDQsIlVwbG9hZCIpLGhlKCkoKSgpfX1mdW5jdGlvbiBodnQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnN1Ym1pdEV4Y2VsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksT2UoNCwiU3VibWl0IiksaGUo''@;'; put 'put ''KSgpKCl9fWZ1bmN0aW9uIGZ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTUp''@;'; put 'put ''LGRlKDMsInNwYW4iKSxPZSg0LCJEaXNjYXJkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIHB2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDkpLGd0KDEsZHZ0LDUsMCwiZGl2Iiw1MCkoMixodnQsNSwwLCJkaXYiLDUwKSgzLGZ2dCw1LDAsImRpdiIsNTApLGhlKCkpLDImYyl7Y29uc3QgYT1M''@;'; put 'put ''ZSgpO2ZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLGZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpLGZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQp''@;'; put 'put ''fX12YXIgcmY9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0Y2hpbmdSdWxlcyIsY1tjLlJlYWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0''@;'; put 'put ''cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixjW2MuU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsY30ocmZ8fHt9KSxNdz1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRhdGE9MV09IkRhdGEiLGN9KE13fHx7fSk7bGV0IEI2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEkpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU3RvcmVTZXJ2aWNlPU0sdGhpcy5zYXNTZXJ2aWNlPUksdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZmQsdGhpcy5TdGF0dXNFbnVtPXJmLHRoaXMuVGFi''@;'; put 'put ''c0VudW09TXcsdGhpcy5zZWxlY3RlZFRhYj1Ndy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPUtuLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0''@;'; put 'put ''aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cmYuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1''@;'; put 'put ''bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05P''@;'; put 'put ''IiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlz''@;'; put 'put ''Lmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IFBlZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12''@;'; put 'put ''b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfWFmdGVyR2V0Q29sSGVhZGVyKGEsZCl7ZC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9eGxtYXBPbkNsaWNr''@;'; put 'put ''KGEpe2EuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJ''@;'; put 'put ''bnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9TXcuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0''@;'; put 'put ''aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Lbi54bG1hcHMuZmlsdGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6S24ueGxtYXBzfWlzQWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRYTE1hcD8uaWQ9PT1hfW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEw''@;'; put 'put ''fWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9diwieGxzIj09PXYu''@;'; put 'put ''c2xpY2Uodi5sYXN0SW5kZXhPZigiLiIpKzEsdi5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz1yZi5FeHRyYWN0''@;'; put 'put ''aW5nRGF0YTtjb25zdCBJPW5ldyBGaWxlUmVhZGVyO0kub25sb2FkPWZ1bmN0aW9uKCl7dmFyIEc9UShmdW5jdGlvbiooaWUpe2NvbnN0IHVlPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShjKTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWEr''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShpZS50YXJnZXQucmVzdWx0KTtsZXQgeWU7Y29uc3QgRWU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7eWU9RHUucmVh''@;'; put 'put ''ZCh1ZSx7Li4uRWV9KX1jYXRjaChqZSl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxqZSx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCF5ZSlyZXR1cm4gaC5pc0xvYWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPXJmLlJlYWR5VG9VcGxvYWQs''@;'; put 'put ''dm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoeWUpfSk7cmV0dXJuIGZ1bmN0aW9uKGllKXtyZXR1cm4gRy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLEkucmVhZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rl''@;'; put 'put ''c2M9IiIsdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwv''@;'; put 'put ''Yj4iLiBQbGVhc2UgdXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3RlZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVz''@;'; put 'put ''LHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuc3VibWl0KCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1zdWJtaXQoKXtpZighdGhpcy5zZWxlY3RlZFhMTWFwfHwhdGhpcy54bERhdGEubGVuZ3RoKXJldHVybjt0aGlzLnN0YXR1cz1yZi5TdWJtaXR0aW5nLHRoaXMu''@;'; put 'put ''aXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iU3VibWl0dGluZyBleHRyYWN0ZWQgZGF0YSI7Y29uc3QgYT1bXTtmb3IoY29uc3QgTSBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpNLGZpbGVOYW1lOk0ubmFtZX0pO2NvbnN0IGQ9T2JqZWN0LmtleXModGhpcy54''@;'; put 'put ''bERhdGFbMF0pLmpvaW4oIiwiKSsiXG4iK3RoaXMueGxEYXRhLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpLm1hcChNPT5PYmplY3QudmFsdWVzKE0pLmpvaW4oIiwiKSkuam9pbigiXG4iKSxoPW5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRp''@;'; put 'put ''b24vY3N2In0pLGY9cWVlKGgsdGhpcy5maWxlbmFtZSsiLmNzdiIpO2EucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pLHRoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixhLHt0YWJsZTp0aGlzLnNlbGVjdGVkWExNYXAudGFyZ2V0RFN9''@;'; put 'put ''KS50aGVuKE09PntpZihNLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0KXtjb25zdCBJPU0uYWRhcHRlclJlc3BvbnNlO3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLEkuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOkkuU1lTV0FSTklOR1RFWFQsU1lTRVJS''@;'; put 'put ''T1JURVhUOkkuU1lTRVJST1JURVhULE1BQzpJLnNhc2pzQWJvcnRbMF0uTUFDfSl9ZWxzZSBNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK00uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKE09''@;'; put 'put ''Pnt0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixNLnJlc3BvbnNlKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnN0YXR1cz1yZi5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEp''@;'; put 'put ''e2NvbnN0IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRoKCIvIikpe2NvbnN0IEVlPWYuc3BsaXQoIi8iKVsxXSxqZT1wYXJzZUludChFZSktMTtmPWEuU2hlZXROYW1lc1tqZV19Y29uc3Qgdj1hLlNoZWV0c1tmXSxN''@;'; put 'put ''PUR1LnV0aWxzLnNoZWV0X3RvX2pzb24odix7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksST1WNmUoaC5YTE1BUF9TVEFSVCxNKSxHPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xV''@;'; put 'put ''VEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9ZXRlKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVtbjpmfT1kLHtyOnYsYzpNfT1EdS51dGlscy5kZWNvZGVfY2VsbChjKTtsPUR1LnV0aWxzLmVuY29kZV9jZWxsKHtyOnYraCxjOk0rZn0pfX1pZihsLnN0YXJ0''@;'; put 'put ''c1dpdGgoIk1BVENIICIpJiYobD1WNmUobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PUR1LnV0aWxzLmRlY29kZV9jZWxsKGMpLGY9RHUudXRpbHMuZW5jb2RlX2NvbChoKTtsZXQgdj1kO2ZvcihsZXQgTT1kKzE7TTxhLmxlbmd0aCYmYVtNXVtmXTtNKyspdj1NO2w9Ziso''@;'; put 'put ''disxKX1pZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1EdS51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQgST1kKzE7STxhLmxlbmd0aCYmIXE5dChhW0ldKTtJKyspaD1JO2w9T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKEk9PiJfX3Jvd051bV9fIiE9PUkpLnJlZHVj''@;'; put 'put ''ZSgoSSxHKT0+Rz5JP0c6SSwiIikrKGgrMSl9cmV0dXJuIGx9KShJLGguWExNQVBfRklOSVNILE0pLGllPWAke0l9OiR7R31gLHVlPUR1LnV0aWxzLmRlY29kZV9yYW5nZShpZSkseWU9RHUudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAscmFuZ2U6aWUsaGVhZGVyOiJBIixibGFua3Jv''@;'; put 'put ''d3M6ITB9KTtmb3IobGV0IEVlPTA7RWU8eWUubGVuZ3RoO0VlKyspe2NvbnN0IGplPXllW0VlXTtmb3IobGV0IHFlPXVlLnMuYyxydD0wO3FlPD11ZS5lLmM7cWUrKyxydCsrKXtjb25zdCBwdD1EdS51dGlscy5lbmNvZGVfY29sKHFlKTtwdCBpbiBqZSYmZC5wdXNoKHtMT0FEX1JFRjoiMCIs''@;'; put 'put ''WExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpFZSsxLENPTF9OTzpydCsxLFZBTFVFX1RYVDpqZVtwdF19KX19fSksdGhpcy5zdGF0dXM9cmYuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9''@;'; put 'put ''IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPU13LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5z''@;'; put 'put ''dGF0dXM9cmYuRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVzKGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz1yZi5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2Vy''@;'; put 'put ''dmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQoKXt0aGlzLnhsbWFwcz1Lbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhs''@;'; put 'put ''bWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExNYXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0Fm''@;'; put 'put ''dGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoU2QpLEdlKEN1KSxHZShMcyksR2Uoa2gpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZx''@;'; put 'put ''YShKOXQsNSksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1mKX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6NDIs''@;'; put 'put ''dmFyczoxNixjb25zdHM6W1sic2VhcmNoWExNYXBUcmVlSW5wdXQiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiYWN0aW9uQnV0dG9ucyIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2Vh''@;'; put 'put ''cmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJj''@;'; put 'put ''aCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJd''@;'; put 'put ''LFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hh''@;'; put 'put ''bmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEs''@;'; put 'put ''ImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4t''@;'; put 'put ''b3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxb''@;'; put 'put ''MSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUi''@;'; put 'put ''LCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFn''@;'; put 'put ''ZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRleHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEs''@;'; put 'put ''InRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxp''@;'; put 'put ''bmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJjbHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWki''@;'; put 'put ''XSxbImNkcy10ZXh0IiwibGFiZWxMaW5rIiwxLCJtbC0xMCIsMywicm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3QtdGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0''@;'; put 'put ''aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiaGVpZ2h0IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hl''@;'; put 'put ''YWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxn''@;'; put 'put ''LTQiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtk''@;'; put 'put ''ZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsUTl0LDIsMCwiZGl2IiwzKSxkZSgyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDQpKDQsImRpdiIsNSkoNSwiaW5wdXQiLDYsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnNlYXJjaFN0cmlu''@;'; put 'put ''ZyxNKXx8KGguc2VhcmNoU3RyaW5nPU0pLEN0KE0pfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg3LGV2dCwxLDAsImNsci1pY29uIiw3KSg4LHR2dCwxLDAsImNsci1pY29uIiw4KSxoZSgpKCksZ3QoOSxu''@;'; put 'put ''dnQsNSwzLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwxMCksZ3QoMTEsYXZ0LDQsMiwiZGl2IiwxMSkoMTIsb3Z0LDYsMSwiZGl2IiwxMikoMTMsdXZ0LDI2LDI1LCJkaXYiLDEzKSxkZSgxNCwiY2xyLW1vZGFsIiwxNCksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNLCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zaG93VXBsb2FkTW9k''@;'; put 'put ''YWwsTSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChNKX0pLGRlKDE1LCJoMyIsMTUpLE9lKDE2LCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoMTcsImRpdiIsMTYpKDE4LCJkaXYiLDE3KSgxOSwic3BhbiIpLE9lKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxk''@;'; put 'put ''ZSgyMSwiZGl2IiwxOCkoMjIsImRpdiIsMTkpKDIzLCJkaXYiLDIwKSgyNCwic3BhbiIsMjEpKDI1LCJsYWJlbCIsMjIpLE9lKDI2LCIgQnJvd3NlICIpLGhlKCkoKSxkZSgyNywiaW5wdXQiLDIzLDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVE''@;'; put 'put ''ZXNjKE0pKX0pLGhlKCkoKSgpKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDI0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSgzMCwiaDMi''@;'; put 'put ''LDE1KSxPZSgzMSwiTm90aWNlIiksaGUoKSxkZSgzMiwiZGl2IiwxNikoMzMsInAiLDI1KSxPZSgzNCksaGUoKSgpLGRlKDM1LCJkaXYiLDI2KSgzNiwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLE9l''@;'; put 'put ''KDM3LCIgQ2FuY2VsICIpLGhlKCksZGUoMzgsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5zdWJtaXQoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLE9lKDM5LCIgU3VibWl0ICIpLGhlKCkoKSgpKCksZ3QoNDAscHZ0LDQsMywibmctdGVt''@;'; put 'put ''cGxhdGUiLG51bGwsMixJYyl9aWYoMiZkKXtjb25zdCBmPWhhKDYpO2ZlKCkseGUoIm5nSWYiLGgueGxtYXBzTG9hZGluZyksZmUoNCkscGkoIm5nTW9kZWwiLGguc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsZi52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsZi52YWx1ZS5s''@;'; put 'put ''ZW5ndGg+MCksZmUoKSx4ZSgibmdGb3JPZiIsaC54bG1hcHMpLGZlKDIpLHhlKCJuZ0lmIiwhaC5zZWxlY3RlZFhMTWFwKSxmZSgpLHhlKCJuZ0lmIixoLmlzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWguaXNMb2FkaW5nJiZoLnNlbGVjdGVkWExNYXApLGZlKCkseGUoInVwbG9hZGVyIixo''@;'; put 'put ''LnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLGZlKDEzKSx4ZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpLGZlKDIpLHBpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLERyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUg''@;'; put 'put ''cmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19LGRlcGVuZGVuY2llczpbRF8sYzEscWwsbmwsJHMsRWgsUGQsZmcsSGwsb3UsS3UsSGIsZHMsWjEsX20sQ20seDcsd20sYm0sUzcsUmQsaTQsbnMseWEsTjEsdEUsUjZlLEw2ZSxyNF0sZW5jYXBzdWxh''@;'; put 'put ''dGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBndnQ9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBl''@;'; put 'put ''bmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6QjZlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6QjZlfV19XTtsZXQgbXZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChndnQpLHpjXX0pfX1yZXR1cm4gY30pKCk7bk4oKTtsZXQgdnZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltvOSxtdnQsUmMsejAsRzksUmEseEEsbmZdfSl9fXJldHVybiBjfSkoKSx5dnQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0LXJv''@;'; put 'put ''dXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJ2''@;'; put 'put ''dD0oYyxsLGEpPT57bC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LF92dD1bImNvbnRlbnRBcmVhIl0sd3Z0PSgpPT5bImh0RGFyayIsImh0Q3VzdG9tSGlkZGVuIl07ZnVuY3Rpb24gQ3Z0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNCksR3Qo''@;'; put 'put ''MSwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpKX1mdW5jdGlvbiBTdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI1KSgxLCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGhhKDQpLmNsaWNrKCkpfSksT2UoMiwiIEJyb3dzZSBm''@;'; put 'put ''aWxlICIpLGhlKCksZGUoMywiaW5wdXQiLDI3LDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChMZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8''@;'; put 'put ''YS5zdWJtaXR0aW5nQ3N2KX19ZnVuY3Rpb24gTXZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5vbkRpc2NhcmQoKSl9KSxPZSgyLCIgRGlzY2FyZCAiKSxo''@;'; put 'put ''ZSgpLGRlKDMsImJ1dHRvbiIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25TdWJtaXRBbGwoKSl9KSxPZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIHh2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBF''@;'; put 'put ''dnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gVHZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSx4dnQsMSwwLCJjZHMtaWNvbiIsMzQpKDIsRXZ0LDEsMCwiY2RzLWljb24iLDM1KSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsYS5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBBdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24ga3Z0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIER2dChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQXZ0LDEsMCwiY2RzLWljb24iLDM0KSgyLGt2dCwxLDAsImNkcy1pY29uIiwzOCksbGkoKSksMiZjKXtjb25zdCBhPUxlKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gSXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIFJ2dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKX1mdW5jdGlvbiBMdnQoYyxsKXtpZigxJmMmJihz''@;'; put 'put ''aSgwKSxndCgxLEl2dCwxLDAsImNkcy1pY29uIiwzOCkoMixSdnQsMSwwLCJjbHItc3Bpbm5lciIsNDApLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLHhlKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0''@;'; put 'put ''aW9uIE92dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsRHZ0LDMsMiwibmctY29udGFpbmVyIiw0KSgyLEx2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''IWEuZGF0YXNvdXJjZSl9fWZ1bmN0aW9uIFB2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLm9uUGFyc2VkRGF0''@;'; put 'put ''YXNldENsaWNrKGgpKX0pLGd0KDIsVHZ0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLE92dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksZGUoNCwic3BhbiIsMzMpLE9lKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSx4ZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxEcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBGdnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLE12dCw1LDAsImRpdiIsMyksZGUoMiwicCIsMjgpLE9lKDMsIkZvdW5k''@;'; put 'put ''IHRhYmxlczoiKSxoZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSxQdnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLHhlKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRz''@;'; put 'put ''KX19ZnVuY3Rpb24gSHZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIE52dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM3KX1mdW5jdGlvbiBWdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0Myks''@;'; put 'put ''RnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChMZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLEh2dCwxLDAsImNkcy1pY29uIiwzNCkoMyxOdnQsMSwwLCJjZHMtaWNvbiIsMzUpLEd0KDQsImNkcy1pY29uIiwz''@;'; put 'put ''OSksT2UoNSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFRyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLHhlKCJuZ0lmIixhLmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLERyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIEJ2dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKHNpKDApLGRlKDEsInAiLDQyKSxPZSgyLCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LFZ2dCw2LDUsImNsci10cmVlLW5vZGUiLDI5KSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDQpLHhlKCJuZ0Zvck9mIixhLnN1Ym1p''@;'; put 'put ''dHRlZENzdkRhdGFzZXRzKX19ZnVuY3Rpb24ganZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NCksR3QoMSwiY2xyLWljb24iLDQ1KSxkZSgyLCJwIiw0NiksT2UoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24genZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7c2koMCksZGUoMSwiZGl2Iiw0NykoMiwiZGl2Iiw0OCkoMywicCIsNDkpLE9lKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxPZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KExlKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxPZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUxKSxPZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLE9lKDE0KSxoZSgp''@;'; put 'put ''KCksZGUoMTUsInAiLDUyKSxPZSgxNiwiIFBhc3RlIG9yIHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDUzKSxPZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBk''@;'; put 'put ''ZXRlY3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU0KSxkZSgyMCwiZGl2Iiw1NSkoMjEsImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikub25TdGFydFBh''@;'; put 'put ''cnNpbmdGaWxlKCkpfSksT2UoMjIsIiBDb250aW51ZSAiKSxoZSgpKCkoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDYpLHdyKGEuc2VsZWN0ZWRGaWxlLm5hbWUpLGZlKDgpLERyKCIiLGEuc2VsZWN0ZWRGaWxlLnNpemVNQiwiIE1CIiksZmUoNSkseGUoImFmdGVyR2V0Q29s''@;'; put 'put ''SGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgic2V0dGluZ3MiLGEuaG90VXNlckRhdGFzZXRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpLGZlKDIpLHhlKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9h''@;'; put 'put ''ZGluZyl9fWZ1bmN0aW9uIFV2dChjLGwpe2lmKDEmYyYmKHNpKDApLEd0KDEsImNsci1pY29uIiw1NyksZGUoMiwicCIsNDYpLE9lKDMpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPUxlKDQpO2ZlKDMpLERyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24gWnZ0KGMs''@;'; put 'put ''bCl7MSZjJiYoc2koMCksR3QoMSwiY2xyLWljb24iLDU4KSxkZSgyLCJwIiw0NiksT2UoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLGxpKCkpfWZ1bmN0aW9uIFd2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDQp''@;'; put 'put ''LGd0KDEsVXZ0LDQsMSwibmctY29udGFpbmVyIiw0KSgyLFp2dCw0LDAsIm5nLWNvbnRhaW5lciIsNCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCkseGUoIm5nSWYiLGEu''@;'; put 'put ''ZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBZdnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NSkoMSwic3Ryb25nIiksT2UoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gR3Z0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpKDEs''@;'; put 'put ''InN0cm9uZyIpLE9lKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiAkdnQoYyxsKXsxJmMmJihkZSgwLCJwIiw2MyksT2UoMSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIEt2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzcpLEZ0KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxPZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJnhlKCJjbHJMb2FkaW5nIixMZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBxdnQo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDY5KSgxLCJkaXYiKSgyLCJwIiw2MiksT2UoMywiIFN1Ym1pdCBTdGF0dXM6ICIpLGd0KDQsWXZ0LDMsMCwic3BhbiIsNzApKDUsR3Z0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoNiwkdnQsMiwwLCJwIiw3MiksaGUoKSxkZSg3''@;'; put 'put ''LCJkaXYiKSxndCg4LEt2dCwyLDEsImJ1dHRvbiIsNzMpLGRlKDksImJ1dHRvbiIsNzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3Rp''@;'; put 'put ''dmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxPZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoNCkseGUoIm5nSWYiLG51bGw9PWEuYWN0''@;'; put 'put ''aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpLGZlKCkseGUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3Vi''@;'; put 'put ''bWl0UmVzdWx0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMikseGUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFj''@;'; put 'put ''dGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfX1mdW5jdGlvbiBYdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxPZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9TGUoNCk7ZmUoMiksRHIoIiAiLERjKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gSnZ0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUo''@;'; put 'put ''MSwic3Ryb25nIiksT2UoMiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoNCk7ZmUoMiksVXUoJyInLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRS''@;'; put 'put ''ZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBRdnQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJzdHJvbmciKSxPZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gZXl0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODEpKDEsInN0cm9uZyIpLE9lKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMsImNsci1zcGlubmVyIiw4MiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gdHl0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxRdnQsMiwwLCJzdHJvbmciLDQpKDIsZXl0LDQsMCwic3BhbiIsODApLGxpKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIG55dChjLGwpezEmYyYmKGRlKDAsImRpdiIsODMpLEd0KDEsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24gcnl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZ3QoMSxxdnQs''@;'; put 'put ''MTEsNCwiZGl2Iiw1OSkoMixYdnQsNCwzLCJkaXYiLDYwKSxkZSgzLCJkaXYiLDYxKSg0LCJkaXYiKSg1LCJwIiw2MiksT2UoNiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3LEp2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoOCx0eXQsMywyLCJuZy1jb250YWluZXIiLDQpLGhlKCksZGUoOSwi''@;'; put 'put ''cCIsNjMpLE9lKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NCksT2UoMTQpLGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxPZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxk''@;'; put 'put ''ZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDMpO3JldHVybiBtaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0''@;'; put 'put ''aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxPZSgyMSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixueXQsMiwwLCJkaXYiLDY3KSxHdCgyMywiaG90LXRhYmxlIiw2OCksbGkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdCksZmUoKSx4ZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQu''@;'; put 'put ''ZXJyb3IpLGZlKDUpLHhlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKCkseGUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKDUpLHhlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlUGFyc2VkRGF0YXNldC5s''@;'; put 'put ''aWJkcyksZmUoKSx3cihhLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGZlKCkseGUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbikseGUoImRpc2Fi''@;'; put 'put ''bGVkIiwhKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlJiZhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpKSxmZSgzKSx4ZSgibmdJZiIsYS5pc0hvdEhpZGRlbiksZmUoKSx4ZSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjbGFzc05h''@;'; put 'put ''bWUiLEdzKDE4LHd2dCkpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiZmlsdGVycyIsITApfX1mdW5jdGlvbiBpeXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihzaSgwKSxndCgxLFd2dCwzLDIsImRpdiIsOSkoMixyeXQsMjQsMTksIm5nLWNvbnRhaW5lciIsNCksbGkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCkseGUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0''@;'; put 'put ''YXNldCl9fWZ1bmN0aW9uIGF5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gb3l0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxheXQsNCwwLCJkaXYiLDkpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gc3l0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEs''@;'; put 'put ''InN0cm9uZyIpLE9lKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIGx5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxPZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gY3l0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLE9lKDEsIiBFcnJvciBkZXRhaWxz''@;'; put 'put ''OiAiKSxoZSgpKX1mdW5jdGlvbiB1eXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxPZSgyKSxlbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMiksRHIoIiAiLERjKDMsMSxhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3Ip''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIGR5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO3NpKDApLGRlKDEsImRpdiIsODUpKDIsImRpdiIpKDMsInAiLDYyKSxPZSg0LCIgTWF0Y2hlZCB3aXRoIGRhdGFzZXQ6ICIpLGRlKDUsInN0cm9uZyIpKDYsImNsci10b29sdGlwIikoNywiYSIsNjQpLE9lKDgp''@;'; put 'put ''LGhlKCksZGUoOSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjUpLE9lKDEwLCIgQ2xpY2sgdG8gZWRpdCB0aGUgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxMSwicCIsNjIpLE9lKDEyLCIgU3RhdHVzOiAiKSxndCgxMyxzeXQsMywwLCJzcGFuIiw3MCkoMTQsbHl0LDMsMCwic3BhbiIsNzEpLGhl''@;'; put 'put ''KCksZ3QoMTUsY3l0LDIsMCwicCIsNzIpLGhlKCksZGUoMTYsImRpdiIpKDE3LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3N8fGgu''@;'; put 'put ''YWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcikpfSksT2UoMTgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCksZ3QoMTksdXl0LDQsMywiZGl2Iiw2MCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNykseGUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVTdWJt''@;'; put 'put ''aXR0ZWRDc3ZEYXRhc2V0LmxpYmRzKSxmZSgpLHdyKGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSx4ZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUoNCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNj''@;'; put 'put ''ZXNzKSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksZmUoNCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcil9fWZ1bmN0aW9u''@;'; put 'put ''IGh5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsenZ0LDIzLDcsIm5nLWNvbnRhaW5lciIsNCkoMixpeXQsMywyLCJuZy1jb250YWluZXIiLDQpKDMsb3l0LDIsMSwibmctY29udGFpbmVyIiw0KSg0LGR5dCwyMCw4LCJuZy1jb250YWluZXIiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgp''@;'; put 'put ''O2ZlKCkseGUoIm5nSWYiLCFhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmbnVsbCE9PWEuc2VsZWN0ZWRGaWxlKSxmZSgpLHhlKCJuZ0lmIixhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWEuc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLHhlKCJuZ0lmIixhLnN1Ym1pdHRlZENz''@;'; put 'put ''dkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gZnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsODYpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCksRHIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNl''@;'; put 'put ''LCBvbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGVhY2ggZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvLiAiKX19dmFyIHh3PWZ1bmN0''@;'; put 'put ''aW9uKGMpe3JldHVybiBjLnJlYWRpbmc9IlJlYWRpbmcgdGhlIGZpbGUiLGMucGFyc2luZz0iU2VhcmNoaW5nIGZvciB0aGUgZGF0YSBpbiB0aGUgZmlsZSIsYy5wYXJzZWQ9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgZmluaXNoZWQiLGMubm90U2VsZWN0ZWQ9IkZpbGUgbm90IHNlbGVjdGVk''@;'; put 'put ''IixjfSh4d3x8e30pO2NvbnN0IHB5dD1be3BhdGg6IiIsY29tcG9uZW50Onl2dCxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sSSl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLnNwcmVhZHNoZWV0U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMuY2RyPUksdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNl''@;'; put 'put ''bmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5maWxlTG9hZGluZ1N0YXRlPXh3Lm5vdFNlbGVjdGVkLHRoaXMuRmlsZUxvYWRpbmdTdGF0ZT14dyx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''dmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHRoaXMuY3N2RmlsZXM9W10sdGhpcy5jc3ZTdWJtaXR0aW5nPSExLHRoaXMuYXV0b0RldGVjdGluZ0NvbHVtbnM9ITEsdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHM9''@;'; put 'put ''W10sdGhpcy5kYXRhc2V0c0xvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNoZWV0TmFtZXM9W10sdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLmxpYnNBbmRUYWJsZXM9e30sdGhp''@;'; put 'put ''cy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIi''@;'; put 'put ''LCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVw''@;'; put 'put ''eCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMH0sdGhpcy5hZnRlckdl''@;'; put 'put ''dENvbEhlYWRlcj1idnQsdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBZbX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFy''@;'; put 'put ''dHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVzPUtuLmVkaXRvci5saWJzQW5kVGFibGVz''@;'; put 'put ''O2NvbnN0IGE9T2JqZWN0LmtleXModGhpcy5saWJzQW5kVGFibGVzKTt0aGlzLmhvdFVzZXJEYXRhc2V0cz8uY29sdW1ucyYmKHRoaXMuaG90VXNlckRhdGFzZXRzLmNvbHVtbnNbMF0uc291cmNlPWEpfW9uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Nv''@;'; put 'put ''bnN0IGg9YT8udGFyZ2V0Py5maWxlc3x8W107aWYoaC5sZW5ndGg8MSlyZXR1cm4gdm9pZCBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyBmaWxlIGZvdW5kLiIsbnVsbCwiRmlsZSBVcGxvYWQiKTtsZXQgZj0iIjtmb3IobGV0IHYgb2YgaCl7Y29uc3QgTT12Lm5hbWUu''@;'; put 'put ''c3BsaXQoIi4iKS5wb3AoKTtpZihmfHwoZj1NKSxmIT09TSlyZXR1cm4gdm9pZCBkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJNaXhlZCBleHRlbnNpb25zIGVycm9yIiwiUGxlYXNlIHNlbGVjdCBmaWxlcyB3aXRoIHNhbWUgZXh0ZW5zaW9uLiIpO2Y9TX1pZihbInhsc3giLCJ4bHNt''@;'; put 'put ''IiwieGxtIl0uaW5jbHVkZXMoZikpZC5zZWxlY3RlZEZpbGU9YS50YXJnZXQuZmlsZXNbMF0sZC5zZWxlY3RlZEZpbGUmJihkLmZpbGVMb2FkaW5nU3RhdGU9eHcucmVhZGluZyxkLnNlbGVjdGVkRmlsZS5zaXplTUI9ZC5zcHJlYWRzaGVldFNlcnZpY2UuYnl0ZXNUb01CKGQuc2VsZWN0ZWRG''@;'; put 'put ''aWxlLnNpemUpLGQuc3ByZWFkc2hlZXRTZXJ2aWNlLnhsc3hSZWFkRmlsZShkLnNlbGVjdGVkRmlsZSkudGhlbih2PT57ZC5maWxlTG9hZGluZ1N0YXRlPXh3LnBhcnNpbmcsZC5zZWxlY3RlZEZpbGUud29ya2Jvb2s9dn0pKSxkLmluaXRVc2VySW5wdXRIb3QoKSxkLm9uQXV0b0RldGVjdENv''@;'; put 'put ''bHVtbnMoKTtlbHNle2lmKCJjc3YiIT09ZilyZXR1cm4gdm9pZCBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJPbmx5IGV4Y2VsIGV4dGVuc2lvbnMgYXJlIGFsbG93ZWQuICh4bHN4KSIsbnVsbCwiRXh0ZW5zaW9uIEVycm9yIik7ZC5vbk11bHRpQ3N2RmlsZXMoYS50YXJn''@;'; put 'put ''ZXQuZmlsZXMpfWEudGFyZ2V0LnZhbHVlPSIifSkoKX1vbk11bHRpQ3N2RmlsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtmb3IobGV0IGggb2YgYSl7Y29uc3QgZj1kLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGgubmFtZSk7ZC5pc1ZhbGlkRGF0YXNldEZvcm1hdChm''@;'; put 'put ''KSYmZC5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShmKSYmZC5jc3ZGaWxlcy5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSl9ZC5jc3ZGaWxlcy5sZW5ndGg/KGQuY3N2U3VibWl0dGluZz0hMCx5aWVsZCBkLnN1Ym1pdENzdkZpbGVzKCksZC5jc3ZTdWJtaXR0aW5nPSExKTpkLmV2ZW50''@;'; put 'put ''U2VydmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0''@;'; put 'put ''cz0iIn1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2xldCBoPVtdO2ZvcihsZXQgZiBvZiBhLm1hdGNoZWREYXRhc2V0cyl7Y29uc3Qgdj1hLmZldGNoRGF0YXNldChmKTtkLnB1c2godil9''@;'; put 'put ''UHJvbWlzZS5hbGxTZXR0bGVkKGQpLnRoZW4oZj0+e2YuZm9yRWFjaChNPT57ImZ1bGZpbGxlZCI9PT1NLnN0YXR1cyYmTS52YWx1ZSYmaC5wdXNoKE0udmFsdWUpfSksYS51cGxvYWRMb2FkaW5nPSExLGEuYnVpbGREYXRhc2V0c09iamVjdHMoaCkuZm9yRWFjaChNPT57YS5wYXJzZWREYXRh''@;'; put 'put ''c2V0cy5wdXNoKHtsaWJkczpNLmxpYmRzLGluY2x1ZGVJblN1Ym1pc3Npb246ITAsZGF0YXNldEluZm86TSxwYXJzaW5nVGFibGU6ITB9KX0pLGEud29ya2Jvb2tMb2FkZWQoKS50aGVuKE09Pntmb3IobGV0IEkgb2YgYS5wYXJzZWREYXRhc2V0cylhLnNwcmVhZHNoZWV0U2VydmljZS5wYXJz''@;'; put 'put ''ZUV4Y2VsRmlsZSh7ZmlsZTphLnNlbGVjdGVkRmlsZSx3b3JrYm9vazpNLHBhc3N3b3JkOmEuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkfHx2b2lkIDAsZGNWYWxpZGF0b3I6SS5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6SS5kYXRhc2V0SW5mby5oZWFkZXJQa3MsaGVhZGVyQXJy''@;'; put 'put ''YXk6SS5kYXRhc2V0SW5mby5oZWFkZXJBcnJheSxoZWFkZXJTaG93OltdLHRpbWVIZWFkZXJzOkkuZGF0YXNldEluZm8udGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6SS5kYXRhc2V0SW5mby5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6SS5kYXRhc2V0SW5mby5kYXRlVGltZUhlYWRlcnMs''@;'; put 'put ''eGxSdWxlczpJLmRhdGFzZXRJbmZvLnhsUnVsZXN9KS50aGVuKEc9PntpZihhLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2VkLEcmJkcuZGF0YSl7bGV0IGllPVtdO0cuZGF0YS5tYXAodWU9PntsZXQgeWU9e307Ry5oZWFkZXJTaG93Lm1hcCgoRWUsamUpPT57eWVbRWVdPXVlW2plXX0pLHll''@;'; put 'put ''Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KHllLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxpZS5wdXNoKHllKX0pLEkuZGF0YXNvdXJjZT1pZSxJLnBhcnNlUmVzdWx0PUcsSS5wYXJzaW5nVGFibGU9ITF9fSkuY2F0Y2goRz0+e2NvbnNvbGUud2Fybigi''@;'; put 'put ''UGFyc2luZyBleGNlbCBmaWxlIGVycm9yLiIsRyksSS5kYXRhc291cmNlPVtdLEkuaW5jbHVkZUluU3VibWlzc2lvbj0hMSxJLnBhcnNpbmdUYWJsZT0hMX0pfSl9KX0pKCl9b25TdWJtaXRBbGwoKXt0aGlzLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD90aGlzLnNob3dTdWJtaXRSZWFzb25Nb2Rh''@;'; put 'put ''bD0hMDp0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJObyB0YWJsZXMgdG8gc3VibWl0IiwiUGxlYXNlIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHRhYmxlIHRvIHByb2NlZWQuIil9b25EaXNjYXJkKCl7dGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLm1hdGNoZWREYXRhc2V0cz1b''@;'; put 'put ''XSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIifWluaXRIb3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNl''@;'; put 'put ''Iik7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJj''@;'; put 'put ''ZXx8W10sY29sSGVhZGVyczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZXMoKSxyZWFkT25seTohMCxoZWlnaHQ6ZHx8IjMwMHB4''@;'; put 'put ''IixjbGFzc05hbWU6Imh0RGFyayJ9KX0pfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZVVzZXJEYXRhc2V0IiksdGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9PntpZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGQ9UShmdW5jdGlvbiooaCxmKXtpZihoKXsiZWRpdCI9PT1mJiYoeWllbGQgYS5vblVzZXJJbnB1dERhdGFzZXRzQ2hhbmdlKCkpO2ZvcihsZXQgdiBvZiBoKWEubWFya1VubWF0Y2hlZFJvd3ModlswXSk7YS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCksYS5ob3RJbnN0YW5jZVVz''@;'; put 'put ''ZXJEYXRhc2V0LnJlbmRlcigpfX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXt2YXIgZD1RKGZ1bmN0aW9uKihoLGYs''@;'; put 'put ''dixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEkgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9u''@;'; put 'put ''cygpe3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFy''@;'; put 'put ''a1VubWF0Y2hlZFJvd3MoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hl''@;'; put 'put ''ZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwi''@;'; put 'put ''Y2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3Ro''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlz''@;'; put 'put ''VmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMu''@;'; put 'put ''Y2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBkPSExO2lmKHlpZWxkIGEucGFyc2VFeGNlbFNoZWV0TmFtZXMoKS50aGVuKHY9PnthLnNoZWV0TmFtZXM9dn0pLmNhdGNoKHY9''@;'; put 'put ''Pnt2LmluY2x1ZGVzKCJwYXNzd29yZCIpJiYoZD0hMCl9KSxkKXJldHVybiBhLm9uRGlzY2FyZEZpbGUoKSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkxvY2tlZCBmaWxlIiwiV2UgZmFpbGVkIHRvIHVubG9jayB0aGUgZmlsZS4iKTthLnNoZWV0TmFtZXMmJihhLm1hdGNo''@;'; put 'put ''ZWREYXRhc2V0cz1bXSxhLnVzZXJJbnB1dERhdGFzZXRzPSIiLGEuc2hlZXROYW1lcy5mb3JFYWNoKCh2LE0pPT57Y29uc3QgST12LnRyaW0oKTthLmlzVmFsaWREYXRhc2V0Rm9ybWF0KEkpJiZhLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKEkpP2EubWF0Y2hlZERhdGFzZXRzLnB1c2goSSk6''@;'; put 'put ''Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke0l9IGlzIG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSksYS51c2VySW5wdXREYXRhc2V0cz1hLm1hdGNoZWREYXRhc2V0cy5qb2luKCJcbiIpO2NvbnN0IGg9YS5tYXRjaGVkRGF0YXNldHMubWFwKHY9Plt2LnNwbGl0KCIu''@;'; put 'put ''IilbMF0sdi5zcGxpdCgiLiIpWzFdXSksZj1hLmhvdFVzZXJEYXRhc2V0cy5kYXRhLmxlbmd0aDtpZihoLmxlbmd0aDxmKXtjb25zdCB2PWYtaC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx2O00rKyloLnB1c2goWyIiLCIiXSl9YS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnVwZGF0ZURhdGEoaCks''@;'; put 'put ''YS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGlj''@;'; put 'put ''ayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9PmQu''@;'; put 'put ''bGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4hMH19''@;'; put 'put ''Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdldCBl''@;'; put 'put ''eGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRlZENz''@;'; put 'put ''dkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIGEuY3N2RmlsZXMpe2NvbnN0IGY9YS5wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShoLmZpbGVO''@;'; put 'put ''YW1lKTtsZXQgdixNO3lpZWxkIGEuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixbaF0se3RhYmxlOmZ9KS50aGVuKEk9Pnt0eXBlb2YgSS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydDwidSI/dj1JLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0''@;'; put 'put ''Ok09SS5hZGFwdGVyUmVzcG9uc2V9LEk9Pntjb25zb2xlLmVycm9yKCJlcnIiLEkpLHY9SS5hZGFwdGVyUmVzcG9uc2V9KSxkLnB1c2goe3N1Y2Nlc3M6TSxlcnJvcjp2LGxpYmRzOmZ9KX1hLnN1Ym1pdHRlZENzdkRhdGFzZXRzPWR9KSgpfWZldGNoRGF0YXNldChhKXt2YXIgZD10aGlzO3Jl''@;'; put 'put ''dHVybiBRKGZ1bmN0aW9uKigpe2lmKGEpcmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldFQiJ9LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJyb3Ig''@;'; put 'put ''ZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQgaCBvZiBk''@;'; put 'put ''LnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2FnZS5yZXBs''@;'; put 'put ''YWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcCh5ZT0+e2xldCBFZT15ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJu''@;'; put 'put ''IGRlbGV0ZSB5ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18seWUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPUVlLE9iamVjdC5rZXlzKHllKS5tYXAoamU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGplKT8udHlwZSYmIi4i''@;'; put 'put ''PT09eWVbamVdJiYoeWVbamVdPW51bGwpfSkseWV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEksRyxpZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRv''@;'; put 'put ''cnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbih5ZT0+e0c9eWUuYWRhcHRlclJlc3BvbnNlLGllPXllLmxvZ30pLmNhdGNoKHllPT57Y29uc29sZS5lcnJvcigiZXJyIix5ZSksST15ZS5hZGFwdGVyUmVzcG9uc2UsaWU9eWUubG9n''@;'; put 'put ''fSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6RyxlcnJvcjpJLGxvZzppZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl9KSgp''@;'; put 'put ''fXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXt5aWVsZCBkLnN1Ym1pdFRhYmxlcyhbYS5saWJkc10pO2NvbnN0IGg9ZC5wYXJzZWREYXRhc2V0cy5maW5kKGY9PmYubGliZHM9PT1hLmxpYmRzKTtoJiYoaC5hY3RpdmU9ITApfSkoKX13b3JrYm9va0xv''@;'; put 'put ''YWRlZCgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuc2VsZWN0ZWRGaWxlfHxkKCJObyBmaWxlIHNlbGVjdGVkIiksdGhpcy53b3JrYm9va0ludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2smJihjbGVhckludGVydmFsKHRoaXMud29y''@;'; put 'put ''a2Jvb2tJbnRlcnZhbCksYSh0aGlzLnNlbGVjdGVkRmlsZS53b3JrYm9vaykpfSw1MDApfSl9cGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoYSl7Y29uc3QgZD1hLnNwbGl0KCIuIik7cmV0dXJuIGQucG9wKCksZC5qb2luKCIuIil9Z2V0RGF0YXNldHNGcm9tSG90KCl7cmV0dXJuIHRoaXMuaG90''@;'; put 'put ''SW5zdGFuY2VVc2VyRGF0YXNldD90aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YSgpLmZpbHRlcihkPT5kWzBdPy5sZW5ndGgmJmRbMV0/Lmxlbmd0aCkubWFwKGQ9PmQ/YCR7ZFswXX0uJHtkWzFdfWA6IiIpOltdfXBhcnNlRXhjZWxTaGVldE5hbWVzKCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gUShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10pO2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYoYS5zZWxl''@;'; put 'put ''Y3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNzd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERhdGFzZXRGb3JtYXQoYSl7cmV0dXJuL15cd3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7Y29uc3Qg''@;'; put 'put ''ZD1hLnNwbGl0KCIuIilbMF0saD1hLnNwbGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgpfWJ1aWxkRGF0YXNldHNPYmplY3RzKGEpe2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25zdCBmPXsu''@;'; put 'put ''Li5oLGhvdFRhYmxlOntkYXRhOmguZGF0YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVyUGtzOltdLGhlYWRlckFycmF5OltdLGRhdGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltdLGNvbHVt''@;'; put 'put ''bkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxmLmhlYWRlclBrcz1oLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5kZXhPZigi''@;'; put 'put ''X19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09''@;'; put 'put ''aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIg''@;'; put 'put ''IikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksaC5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo''@;'; put 'put ''aC5kYXRhLnhsX3J1bGVzKSksZi5kY1ZhbGlkYXRvcj1uZXcgQzZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGguZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVzLGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5z''@;'; put 'put ''cGxpdCgiLCIpLGQucHVzaChmKX1yZXR1cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFyc2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1pdHRlZENz''@;'; put 'put ''dkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoU3UpLEdlKGtoKSxHZShBNmUpLEdlKEJzKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZxYShfdnQsNyksMiZkKXtsZXQgZjtDaShmPVNpKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZU''@;'; put 'put ''cigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6MzcsdmFyczoxOCxjb25zdHM6W1siY29udGVudEFyZWEiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNs''@;'; put 'put ''ck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdpZHRoIl0s''@;'; put 'put ''WyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjZHMtdGV4''@;'; put 'put ''dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsiY2RzLXRl''@;'; put 'put ''eHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayJd''@;'; put 'put ''LFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1''@;'; put 'put ''cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGljayJdLFsx''@;'; put 'put ''LCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEw''@;'; put 'put ''Il0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJhc2giLCJz''@;'; put 'put ''dGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJob3RJZCIsImhvdElu''@;'; put 'put ''c3RhbmNlVXNlckRhdGFzZXQiLCJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLCJzdHJldGNoSCIsImFsbCIsMSwibXQtMTUiLDMsImFmdGVyR2V0Q29sSGVhZGVyIiwic2V0dGluZ3MiLCJsaWNlbnNlS2V5Il0sWzEsImRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnMiLCJ0ZXh0LXJpZ2h0Iiwi''@;'; put 'put ''bXQtMTAiXSxbImlkIiwiY29udGludWUtYnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicHJvY2Vzcy1vbi12bSIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsic2hh''@;'; put 'put ''cGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0xMCBtdC0xNSBzdWJtaXNzaW9uLXJlc3VsdHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZXJyb3It''@;'; put 'put ''ZmllbGQgbXQtMTUiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsiY2xyVG9v''@;'; put 'put ''bHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwib3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdN''@;'; put 'put ''b2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIiw0LCJuZ0lmIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjbGFzc05hbWUiLCJsaWNlbnNl''@;'; put 'put ''S2V5IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJmaWx0ZXJzIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVzdWx0cyJd''@;'; put 'put ''LFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZpZWxkIiwi''@;'; put 'put ''bXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCJd''@;'; put 'put ''LFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIsMSwibGljZW5jZS1saW1pdC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0''@;'; put 'put ''IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLGd0KDEsQ3Z0LDIsMCwiZGl2IiwyKSgyLFN2dCw1LDEsImRpdiIsMykoMyxGdnQsNiwyLCJuZy1jb250YWluZXIiLDQpKDQsQnZ0LDUsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDUsImRpdiIsNSwwKSg3LCJkaXYiLDYpKDgsImRpdiIs''@;'; put 'put ''NykoOSwicCIsOCksT2UoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLGhlKCkoKSxndCgxMSxqdnQsNCwwLCJkaXYiLDkpKDEyLGh5dCw1LDQsIm5nLWNvbnRhaW5lciIsNCksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksbWkoaC5zaG93U3VibWl0UmVhc29uTW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTEpLE9lKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDEyKSxndCgxNyxmeXQsMiwxLCJwIiwxMyksZGUoMTgsImRpdiIsMTQpKDE5LCJs''@;'; put 'put ''YWJlbCIsMTUpLE9lKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwidGV4dGFyZWEiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0pLGhlKCko''@;'; put 'put ''KSxkZSgyMiwicCIsMTcpLE9lKDIzLCIgVGFibGVzIHdpbGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMTgpKDI1LCJidXR0b24iLDE5KSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLE9lKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxPZSgyOCwi''@;'; put 'put ''IFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwxMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTEpLE9lKDMxKSxo''@;'; put 'put ''ZSgpLGRlKDMyLCJkaXYiLDEyKSgzMywiZGl2IiwyMSksR3QoMzQsImNsci1zcGlubmVyIiwyMiksaGUoKSxkZSgzNSwicCIsMjMpLE9lKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRpbmcpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKDcpLHhl''@;'; put 'put ''KCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1pdHRpbmdDc3YpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSx4ZSgiY2xyTW9kYWxD''@;'; put 'put ''bG9zYWJsZSIsITEpLGZlKDIpLFV1KCIgU3VibWl0ICIsaC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJt''@;'; put 'put ''aXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSx4ZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxP''@;'; put 'put ''cGVuIixoLmNzdlN1Ym1pdHRpbmcpLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksVXUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRF8sYzEscWws''@;'; put 'put ''TWQsbmwsb1ksJHMsRWgsUGQsZmcsSGwscnMsb3UsS3UsajAsUDIsZHMsakwsSWQsU2gsUUwsdjcsYjcseTcsUmQsaTQsbnMseWEsZVpdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XX1dO2xldCBneXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3pjLmZvckNoaWxkKHB5dCksemNdfSl9fXJldHVybiBjfSkoKTtuTigpO2xldCBteXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W285LGd5dCxSYyx6MCxHOSxSYSx4QSxuZl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHZ5''@;'; put 'put ''dD1be3BhdGg6IiIsY29tcG9uZW50OnU5dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6Szl0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT52dnR9LHtwYXRoOiJtdWx0''@;'; put 'put ''aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9Pm15dH1dfV07bGV0IHl5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1B''@;'; put 'put ''cih7aW1wb3J0czpbemMuZm9yQ2hpbGQodnl0KSx6Y119KX19cmV0dXJuIGN9KSgpLGJ5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbeXl0LFJjLHowLEc5LFJhLHhBLG5mXX0pfX1yZXR1cm4gY30pKCksdHRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQg''@;'; put 'put ''MCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxp''@;'; put 'put ''Y2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNl''@;'; put 'put ''LmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodTEpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0IFM2PXth''@;'; put 'put ''c3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51''@;'; put 'put ''bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24gajZlKGMpe1M2PWN9Y29uc3QgejZlPS9bJjw+IiddLyxfeXQ9bmV3IFJlZ0V4cCh6NmUuc291cmNlLCJn''@;'; put 'put ''IiksVTZlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyx3eXQ9bmV3IFJlZ0V4cChVNmUuc291cmNlLCJnIiksQ3l0PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxaNmU9Yz0+Q3l0''@;'; put 'put ''W2NdO2Z1bmN0aW9uIHgxKGMsbCl7aWYobCl7aWYoejZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShfeXQsWjZlKX1lbHNlIGlmKFU2ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2Uod3l0LFo2ZSk7cmV0dXJuIGN9Y29uc3QgU3l0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwo''@;'; put 'put ''PzpcdyspKTs/L2dpO2Z1bmN0aW9uIFc2ZShjKXtyZXR1cm4gYy5yZXBsYWNlKFN5dCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJp''@;'; put 'put ''bmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IE15dD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBJbChjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1o''@;'; put 'put ''LnNvdXJjZXx8aCkucmVwbGFjZShNeXQsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCB4eXQ9L1teXHc6XS9nLEV5dD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIFk2ZShjLGwsYSl7''@;'; put 'put ''aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KFc2ZShhKSkucmVwbGFjZSh4eXQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4''@;'; put 'put ''T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIUV5dC50ZXN0KGEpJiYoYT1mdW5jdGlvbiBEeXQoYyxsKXthTlsiICIrY118fChhTlsiICIrY109VHl0LnRlc3QoYyk/YysiLyI6c04oYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9YU5bIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8v''@;'; put 'put ''Ij09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShBeXQsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKGt5dCwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJu''@;'; put 'put ''IGF9Y29uc3QgYU49e30sVHl0PS9eW146XSs6XC8qW14vXSokLyxBeXQ9L14oW146XSs6KVtcc1xTXSokLyxreXQ9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLG9OPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gRzZlKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixN''@;'; put 'put ''KT0+e2xldCBJPSExLEc9djtmb3IoOy0tRz49MCYmIlxcIj09PU1bR107KUk9IUk7cmV0dXJuIEk/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0''@;'; put 'put ''aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBzTihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1''@;'; put 'put ''cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uICQ2ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/eDEo''@;'; put 'put ''bC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBNPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYp''@;'; put 'put ''fTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6eDEodil9fWNsYXNzIGxOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNn1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGlu''@;'; put 'put ''ZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29k''@;'; put 'put ''ZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOnNOKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIEx5dChj''@;'; put 'put ''LGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYu''@;'; put 'put ''bGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19''@;'; put 'put ''aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1zTihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgp''@;'; put 'put ''KX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19Ymxv''@;'; put 'put ''Y2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhl''@;'; put 'put ''ci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEksRyxpZSx1''@;'; put 'put ''ZSx5ZSxFZSxqZSxxZT1hWzFdLnRyaW0oKTtjb25zdCBydD1xZS5sZW5ndGg+MSxwdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6cnQsc3RhcnQ6cnQ/K3FlLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtxZT1ydD9gXFxkezEsOX1cXCR7cWUuc2xpY2UoLTEpfWA6YFxc''@;'; put 'put ''JHtxZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHFlPXJ0P3FlOiJbKistXSIpO2NvbnN0IGR0PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtxZX0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKGplPSExLChhPWR0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5o''@;'; put 'put ''ci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxpZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sdm49PiIgIi5yZXBlYXQoMyp2bi5sZW5ndGgpKSx1ZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyh2PTIs''@;'; put 'put ''RWU9aWUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2goL1teIF0vKSx2PXY+ND8xOnYsRWU9aWUuc2xpY2Uodiksdis9YVsxXS5sZW5ndGgpLEk9ITEsIWllJiYvXiAqJC8udGVzdCh1ZSkmJihkKz11ZSsiXG4iLGw9bC5zdWJzdHJpbmcodWUubGVuZ3RoKzEpLGplPSEwKSwhamUpe2NvbnN0''@;'; put 'put ''IHZuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksQ249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAq''@;'; put 'put ''KXszLH0pKD86XFxuK3wkKWApLHRuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksTW49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKHllPWwuc3BsaXQoIlxuIiwxKVswXSx1ZT15ZSx0aGlzLm9wdGlv''@;'; put 'put ''bnMucGVkYW50aWMmJih1ZT11ZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEodG4udGVzdCh1ZSl8fE1uLnRlc3QodWUpfHx2bi50ZXN0KHVlKXx8Q24udGVzdChsKSkpOyl7aWYodWUuc2VhcmNoKC9bXiBdLyk+PXZ8fCF1ZS50cmltKCkpRWUrPSJcbiIrdWUu''@;'; put 'put ''c2xpY2Uodik7ZWxzZXtpZihJfHxpZS5zZWFyY2goL1teIF0vKT49NHx8dG4udGVzdChpZSl8fE1uLnRlc3QoaWUpfHxDbi50ZXN0KGllKSlicmVhaztFZSs9IlxuIit1ZX0hSSYmIXVlLnRyaW0oKSYmKEk9ITApLGQrPXllKyJcbiIsbD1sLnN1YnN0cmluZyh5ZS5sZW5ndGgrMSksaWU9dWUu''@;'; put 'put ''c2xpY2Uodil9fXB0Lmxvb3NlfHwoRz9wdC5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KGQpJiYoRz0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyhFZSksaCYmKGY9IlsgXSAiIT09aFswXSxFZT1FZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLHB0''@;'; put 'put ''Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6RWV9KSxwdC5yYXcrPWR9cHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLHB0Lml0ZW1zW3B0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PUVl''@;'; put 'put ''LnRyaW1SaWdodCgpLHB0LnJhdz1wdC5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgSnQ9cHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTxKdDtNKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEscHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocHQuaXRlbXNbTV0udGV4''@;'; put 'put ''dCxbXSksIXB0Lmxvb3NlKXtjb25zdCB2bj1wdC5pdGVtc1tNXS50b2tlbnMuZmlsdGVyKHRuPT4ic3BhY2UiPT09dG4udHlwZSksQ249dm4ubGVuZ3RoPjAmJnZuLnNvbWUodG49Pi9cbi4qXG4vLnRlc3QodG4ucmF3KSk7cHQubG9vc2U9Q259aWYocHQubG9vc2UpZm9yKE09MDtNPEp0O00r''@;'; put 'put ''KylwdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gcHR9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFb''@;'; put 'put ''MV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTp4MShhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50''@;'; put 'put ''ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9e''@;'; put 'put ''PCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFn''@;'; put 'put ''OmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOkc2ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8''@;'; put 'put ''XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEksaD1kLmFsaWdu''@;'; put 'put ''Lmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3Mu''@;'; put 'put ''bGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1HNmUoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKEc9Pih7dGV4dDpHfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbdl0udGV4''@;'; put 'put ''dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3YrKylmb3IoST1kLnJvd3Nbdl0sTT0wO008SS5sZW5ndGg7TSsrKUlbTV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKElbTV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRp''@;'; put 'put ''bmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3Jh''@;'; put 'put ''cGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1hWzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJl''@;'; put 'put ''dHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6eDEoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxp''@;'; put 'put ''bms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhl''@;'; put 'put ''ci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQi''@;'; put 'put ''OiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRp''@;'; put 'put ''emVyKGFbMF0pOngxKGFbMF0pOmFbMF19fWxpbmsobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IHY9c04oZC5zbGljZSgwLC0xKSwiXFwiKTtpZigoZC5sZW5ndGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1mdW5jdGlvbiBJeXQoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxh''@;'; put 'put ''O2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihjW2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKHY+LTEpe2NvbnN0IEk9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3Ro''@;'; put 'put ''K3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09YVswXS5zdWJzdHJpbmcoMCxJKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7diYmKGg9''@;'; put 'put ''dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSwkNmUoYSx7aHJlZjpoJiZoLnJlcGxh''@;'; put 'put ''Y2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwp''@;'; put 'put ''KXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1y''@;'; put 'put ''ZXR1cm4gJDZlKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1lbVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMu''@;'; put 'put ''cnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkpKXtjb25zdCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sSSxHPXYsaWU9MDtjb25zdCB1ZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVs''@;'; put 'put ''aW1VbmQ7Zm9yKHVlLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD11ZS5leGVjKGEpKTspe2lmKE09aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihJPU0ubGVuZ3RoLGhbM118fGhbNF0pe0crPUk7Y29udGludWV9''@;'; put 'put ''aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrSSklMykpe2llKz1JO2NvbnRpbnVlfWlmKEctPUksRz4wKWNvbnRpbnVlO0k9TWF0aC5taW4oSSxJK0craWUpO2NvbnN0IHllPWwuc2xpY2UoMCx2K2guaW5kZXgrSSsxKTtpZihNYXRoLm1pbih2LEkpJTIpe2NvbnN0IGplPXllLnNsaWNlKDEs''@;'; put 'put ''LTEpO3JldHVybnt0eXBlOiJlbSIscmF3OnllLHRleHQ6amUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGplKX19Y29uc3QgRWU9eWUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OnllLHRleHQ6RWUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEVl''@;'; put 'put ''KX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vi''@;'; put 'put ''c3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9eDEoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1''@;'; put 'put ''bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQp''@;'; put 'put ''e2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD14MSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9eDEoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0''@;'; put 'put ''Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09dGhpcy5y''@;'; put 'put ''dWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKHYhPT1kWzBdKTtoPXgxKGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJh''@;'; put 'put ''dzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90''@;'; put 'put ''aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOngxKGRbMF0pOmRbMF06eDEodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBtbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9''@;'; put 'put ''W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzot''@;'; put 'put ''W1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXigg''@;'; put 'put ''ezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxc''@;'; put 'put ''bip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1b''@;'; put 'put ''XFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4g''@;'; put 'put ''KikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6b04sbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkp''@;'; put 'put ''Kz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpc''@;'; put 'put ''XC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307bW8uZGVmPUlsKG1vLmRlZikucmVwbGFjZSgibGFiZWwiLG1vLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLG1vLl90aXRsZSkuZ2V0UmVn''@;'; put 'put ''ZXgoKSxtby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sbW8ubGlzdEl0ZW1TdGFydD1JbCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLG1vLmJ1bGxldCkuZ2V0UmVnZXgoKSxtby5saXN0PUlsKG1vLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLnJlcGxh''@;'; put 'put ''Y2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrbW8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksbW8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8''@;'; put 'put ''YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1s''@;'; put 'put ''fGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsbW8uX2Nv''@;'; put 'put ''bW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLG1vLmh0bWw9SWwobW8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLG1vLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoi''@;'; put 'put ''W14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksbW8ubGhlYWRpbmc9SWwobW8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxtby5idWxsZXQpLmdldFJlZ2V4KCksbW8ucGFyYWdyYXBoPUlsKG1vLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhy''@;'; put 'put ''Iixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpc''@;'; put 'put ''XG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbW8uX3RhZyku''@;'; put 'put ''Z2V0UmVnZXgoKSxtby5ibG9ja3F1b3RlPUlsKG1vLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsbW8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLG1vLm5vcm1hbD17Li4ubW99LG1vLmdmbT17Li4ubW8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86''@;'; put 'put ''XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sbW8uZ2ZtLnRhYmxlPUlsKG1vLmdmbS50YWJsZSkucmVw''@;'; put 'put ''bGFjZSgiaHIiLG1vLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMs''@;'; put 'put ''fSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4''@;'; put 'put ''KCksbW8uZ2ZtLnBhcmFncmFwaD1JbChtby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbW8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLG1vLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90''@;'; put 'put ''ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwo''@;'; put 'put ''PzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1vLl90YWcpLmdldFJlZ2V4KCksbW8ucGVkYW50aWM9ey4uLm1vLm5vcm1hbCxodG1sOklsKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/Olxcbnsy''@;'; put 'put ''LH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50Iixtby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxh''@;'; put 'put ''YmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFte''@;'; put 'put ''XHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6b04sbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6SWwobW8ubm9ybWFsLl9wYXJhZ3JhcGgp''@;'; put 'put ''LnJlcGxhY2UoImhyIixtby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixtby5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5y''@;'; put 'put ''ZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IEFhPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOm9OLHRhZzoiXmNvbW1lbnR8Xjwv''@;'; put 'put ''W2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChc''@;'; put 'put ''cyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8h''@;'; put 'put ''XCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1b''@;'; put 'put ''cHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpb''@;'; put 'put ''Xl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1''@;'; put 'put ''bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpvTix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98''@;'; put 'put ''JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIE95dChjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJc''@;'; put 'put ''c10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBLNmUoYyl7bGV0IGEs''@;'; put 'put ''ZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1BYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsQWEucHVuY3R1''@;'; put 'put ''YXRpb249SWwoQWEucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csQWEuYW55UHVuY3R1YXRpb249L1xcW3B1''@;'; put 'put ''bmN0XS9nLEFhLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEFhLl9jb21tZW50PUlsKG1vLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLmxEZWxpbT1JbChBYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5j''@;'; put 'put ''dC9nLEFhLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBYS5lbVN0cm9uZy5yRGVsaW1Bc3Q9SWwoQWEuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csQWEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEFhLmVtU3Ryb25nLnJEZWxpbVVuZD1JbChBYS5lbVN0cm9u''@;'; put 'put ''Zy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuYW55UHVuY3R1YXRpb249SWwoQWEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX2VzY2FwZXM9''@;'; put 'put ''SWwoQWEuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQWEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sQWEuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTld''@;'; put 'put ''KD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sQWEuYXV0b2xpbms9SWwoQWEuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsQWEuX3NjaGVtZSkucmVwbGFjZSgiZW1h''@;'; put 'put ''aWwiLEFhLl9lbWFpbCkuZ2V0UmVnZXgoKSxBYS5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLEFhLnRhZz1JbChBYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLEFhLl9jb21tZW50''@;'; put 'put ''KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLEFhLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksQWEuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLEFhLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLEFhLl90''@;'; put 'put ''aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEFhLmxpbms9SWwoQWEubGluaykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsQWEuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixBYS5fdGl0bGUp''@;'; put 'put ''LmdldFJlZ2V4KCksQWEucmVmbGluaz1JbChBYS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5ub2xpbms9SWwoQWEubm9saW5rKS5yZXBsYWNlKCJyZWYiLG1vLl9sYWJlbCkuZ2V0UmVnZXgoKSxBYS5y''@;'; put 'put ''ZWZsaW5rU2VhcmNoPUlsKEFhLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixBYS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLEFhLm5vbGluaykuZ2V0UmVnZXgoKSxBYS5ub3JtYWw9ey4uLkFhfSxBYS5wZWRhbnRpYz17Li4uQWEubm9ybWFsLHN0cm9uZzp7c3RhcnQ6''@;'; put 'put ''L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNc''@;'; put 'put ''U10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpJbCgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsQWEuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6SWwo''@;'; put 'put ''L14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEFhLl9sYWJlbCkuZ2V0UmVnZXgoKX0sQWEuZ2ZtPXsuLi5BYS5ub3JtYWwsZXNjYXBlOklsKEFhLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tB''@;'; put 'put ''LVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4s''@;'; put 'put ''OjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAt''@;'; put 'put ''OS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19g''@;'; put 'put ''e1x8fX4tXStAKSkpL30sQWEuZ2ZtLnVybD1JbChBYS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLEFhLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksQWEuYnJlYWtzPXsuLi5BYS5nZm0sYnI6SWwoQWEuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0''@;'; put 'put ''OklsKEFhLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgYTR7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlz''@;'; put 'put ''Lm9wdGlvbnM9bHx8UzYsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgbE4sdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10''@;'; put 'put ''aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazptby5ub3JtYWwsaW5saW5lOkFhLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPW1vLnBlZGFudGljLGEuaW5saW5lPUFh''@;'; put 'put ''LnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1tby5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9BYS5icmVha3M6QWEuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6bW8saW5saW5lOkFhfX1zdGF0''@;'; put 'put ''aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBhNChhKS5sZXgobCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgYTQoYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tl''@;'; put 'put ''bnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAg''@;'; put 'put ''ICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwoTSxJLEcpPT5JKyIgICAgIi5yZXBlYXQoRy5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4''@;'; put 'put ''dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQu''@;'; put 'put ''cmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYm''@;'; put 'put ''InRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwu''@;'; put 'put ''c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQu''@;'; put 'put ''cmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVu''@;'; put 'put ''Z3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVu''@;'; put 'put ''Z3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5y''@;'; put 'put ''YXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIu''@;'; put 'put ''bGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgST1sLnNsaWNlKDEpO2xldCBHO3Ro''@;'; put 'put ''aXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihpZSl7Rz1pZS5jYWxsKHtsZXhlcjp0aGlzfSxJKSwibnVtYmVyIj09dHlwZW9mIEcmJkc+PTAmJihNPU1hdGgubWluKE0sRykpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsxKSl9aWYo''@;'; put 'put ''dGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVl''@;'; put 'put ''dWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0''@;'; put 'put ''aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQp''@;'; put 'put ''O2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGlu''@;'; put 'put ''ZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsTSxJLEcsdj1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCBpZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYo''@;'; put 'put ''aWUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspaWUuaW5jbHVkZXMoTVswXS5zbGljZShNWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBl''@;'; put 'put ''YXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4''@;'; put 'put ''KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5z''@;'; put 'put ''bGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKEl8fChHPSIiKSxJPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGlu''@;'; put 'put ''ZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoaWU9PiEhKGQ9aWUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmlu''@;'; put 'put ''ZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9''@;'; put 'put ''ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmlu''@;'; put 'put ''ZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsRykpe2w9bC5zdWJzdHJp''@;'; put 'put ''bmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxl''@;'; put 'put ''bmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxLNmUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCks''@;'; put 'put ''YS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsSzZlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMu''@;'; put 'put ''ZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IGllPTEvMDtjb25zdCB1ZT1sLnNsaWNlKDEpO2xldCB5ZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEVlKXt5ZT1FZS5jYWxsKHtsZXhlcjp0aGlzfSx1ZSksIm51bWJlciI9PXR5cGVvZiB5''@;'; put 'put ''ZSYmeWU+PTAmJihpZT1NYXRoLm1pbihpZSx5ZSkpfSksaWU8MS8wJiZpZT49MCYmKGY9bC5zdWJzdHJpbmcoMCxpZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsT3l0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKEc9''@;'; put 'put ''ZC5yYXcuc2xpY2UoLTEpKSxJPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IGllPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lm''@;'; put 'put ''KHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoaWUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihpZSl9fXJldHVybiBhfX1jbGFzcyBjTntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8UzZ9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtp''@;'; put 'put ''Zih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1By''@;'; put 'put ''ZWZpeCt4MShoKSsnIj4nKyhkP2w6eDEobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0''@;'; put 'put ''dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0''@;'; put 'put ''aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hl''@;'; put 'put ''Y2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEm''@;'; put 'put ''JihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4o''@;'; put 'put ''YS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5g''@;'; put 'put ''fWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPVk2ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xl''@;'; put 'put ''dCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1ZNmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1g''@;'; put 'put ''PGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyBydGV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwp''@;'; put 'put ''e3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwpe3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBpdGV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFs''@;'; put 'put ''aXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0''@;'; put 'put ''TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5b''@;'; put 'put ''ZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIG80e2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxTNix0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25z''@;'; put 'put ''LnJlbmRlcmVyfHxuZXcgY04sdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgcnRlLHRoaXMuc2x1Z2dlcj1uZXcgaXRlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcg''@;'; put 'put ''bzQoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5lKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsdixNLEksRyxpZSx1ZSx5ZSxFZSxqZSxxZSxydCxwdCxkdCxKdCx2bixDbix0bixkPSIiO2NvbnN0IE1uPWwubGVuZ3RoO2Zv''@;'; put 'put ''cihoPTA7aDxNbjtoKyspaWYoRWU9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbRWUudHlwZV0mJih0bj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJl''@;'; put 'put ''cnNbRWUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LEVlKSwhMSE9PXRufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhFZS50eXBlKSkpZCs9dG58fCIiO2Vsc2Ug''@;'; put 'put ''c3dpdGNoKEVlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucyksRWUuZGVwdGgsVzZlKHRoaXMucGFy''@;'; put 'put ''c2VJbmxpbmUoRWUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZShFZS50ZXh0LEVlLmxhbmcsRWUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKHVlPSIiLGllPSIiLE09RWUu''@;'; put 'put ''aGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKylpZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShFZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOkVlLmFsaWduW2ZdfSk7Zm9yKHVlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGllKSx5ZT0iIixN''@;'; put 'put ''PUVlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3IoRz1FZS5yb3dzW2ZdLGllPSIiLEk9Ry5sZW5ndGgsdj0wO3Y8STt2KyspaWUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoR1t2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246RWUuYWxpZ25bdl19KTt5''@;'; put 'put ''ZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhpZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZSh1ZSx5ZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjp5ZT10aGlzLnBhcnNlKEVlLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHllKTtjb250aW51ZTtjYXNlImxpc3QiOmZv''@;'; put 'put ''cihqZT1FZS5vcmRlcmVkLHFlPUVlLnN0YXJ0LHJ0PUVlLmxvb3NlLE09RWUuaXRlbXMubGVuZ3RoLHllPSIiLGY9MDtmPE07ZisrKWR0PUVlLml0ZW1zW2ZdLEp0PWR0LmNoZWNrZWQsdm49ZHQudGFzayxwdD0iIixkdC50YXNrJiYoQ249dGhpcy5yZW5kZXJlci5jaGVja2JveChKdCkscnQ/''@;'; put 'put ''ZHQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PWR0LnRva2Vuc1swXS50eXBlPyhkdC50b2tlbnNbMF0udGV4dD1DbisiICIrZHQudG9rZW5zWzBdLnRleHQsZHQudG9rZW5zWzBdLnRva2VucyYmZHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09ZHQudG9rZW5z''@;'; put 'put ''WzBdLnRva2Vuc1swXS50eXBlJiYoZHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpkdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpDbn0pOnB0Kz1DbikscHQrPXRoaXMucGFyc2UoZHQudG9rZW5zLHJ0KSx5''@;'; put 'put ''ZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShwdCx2bixKdCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KHllLGplLHFlKTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbChFZS50ZXh0LEVlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcih5ZT1FZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQ7aCsxPE1uJiYidGV4dCI9PT1sW2grMV0udHlwZTspRWU9bFsrK2hdLHllKz0iXG4i''@;'; put 'put ''KyhFZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpOkVlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoeWUpOnllO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IENyPSdUb2tlbiB3aXRoICInK0VlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhp''@;'; put 'put ''cy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKENyKTt0aHJvdyBuZXcgRXJyb3IoQ3IpfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2grKylpZihm''@;'; put 'put ''PWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNl''@;'; put 'put ''cjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0''@;'; put 'put ''IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYu''@;'; put 'put ''dGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYu''@;'; put 'put ''dGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBJPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9w''@;'; put 'put ''dGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoSSk7dGhyb3cgbmV3IEVycm9yKEkpfX1yZXR1cm4gZH19Y2xhc3MgdU57Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fFM2fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9z''@;'; put 'put ''dHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgSzk9bmV3IGNsYXNzIFB5dHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFk''@;'; put 'put ''ZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3''@;'; put 'put ''YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoYTQubGV4LG80LnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKGE0LmxleElubGluZSxvNC5wYXJzZUlubGluZSk7UGFyc2VyPW80O3BhcnNlcj1vNC5wYXJzZTtSZW5kZXJlcj1j''@;'; put 'put ''TjtUZXh0UmVuZGVyZXI9cnRlO0xleGVyPWE0O2xleGVyPWE0LmxleDtUb2tlbml6ZXI9bE47U2x1Z2dlcj1pdGU7SG9va3M9dU47Y29uc3RydWN0b3IoLi4ubCl7dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25j''@;'; put 'put ''YXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9r''@;'; put 'put ''ZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3QiOmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMu''@;'; put 'put ''ZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3RoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyho''@;'; put 'put ''LnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtjb25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxo''@;'; put 'put ''LmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVuc2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFt''@;'; put 'put ''ZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgST1mLnJlbmRlcmVyLmFwcGx5KHRoaXMsTSk7cmV0dXJuITE9PT1JJiYoST12LmFwcGx5KHRoaXMsTSkpLEl9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVs''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVsIG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3Rh''@;'; put 'put ''cnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEu''@;'; put 'put ''Y2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5zKX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBjTih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07Zlt2XT0o''@;'; put 'put ''Li4uSSk9PntsZXQgRz1kLnJlbmRlcmVyW3ZdLmFwcGx5KGYsSSk7cmV0dXJuITE9PT1HJiYoRz1NLmFwcGx5KGYsSSkpLEd9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGxOKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25z''@;'; put 'put ''dCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uSSk9PntsZXQgRz1kLnRva2VuaXplclt2XS5hcHBseShmLEkpO3JldHVybiExPT09RyYmKEc9TS5hcHBseShmLEkpKSxHfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29r''@;'; put 'put ''c3x8bmV3IHVOO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0IE09Zlt2XTtmW3ZdPXVOLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP0k9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsSSkpLnRoZW4oaWU9Pk0uY2Fs''@;'; put 'put ''bChmLGllKSk7Y29uc3QgRz1kLmhvb2tzW3ZdLmNhbGwoZixJKTtyZXR1cm4gTS5jYWxsKGYsRyl9OiguLi5JKT0+e2xldCBHPWQuaG9va3Nbdl0uYXBwbHkoZixJKTtyZXR1cm4hMT09PUcmJihHPU0uYXBwbHkoZixJKSksR319aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10''@;'; put 'put ''aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYmKE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRz''@;'; put 'put ''LC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRl''@;'; put 'put ''ZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNpbGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gUnl0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53''@;'; put 'put ''YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3lu''@;'; put 'put ''YyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBp''@;'; put 'put ''biB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxh''@;'; put 'put ''bmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxp''@;'; put 'put ''Z2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0''@;'; put 'put ''aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMg''@;'; put 'put ''ZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29u''@;'; put 'put ''c29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29t''@;'; put 'put ''L3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1''@;'; put 'put ''cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5''@;'; put 'put ''IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5n''@;'; put 'put ''LWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgST1oLmhpZ2hsaWdodDtsZXQgRzt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxHPWwoZCxoKX1j''@;'; put 'put ''YXRjaCh5ZSl7cmV0dXJuIE0oeWUpfWNvbnN0IGllPXllPT57bGV0IEVlO2lmKCF5ZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRyxoLndhbGtUb2tlbnMpLEVlPWEoRyxoKSxoLmhvb2tzJiYoRWU9aC5ob29rcy5wb3N0cHJvY2VzcyhFZSkpfWNhdGNoKGplKXt5ZT1qZX1y''@;'; put 'put ''ZXR1cm4gaC5oaWdobGlnaHQ9SSx5ZT9NKHllKTpmKG51bGwsRWUpfTtpZighSXx8SS5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdodCwhRy5sZW5ndGgpKXJldHVybiBpZSgpO2xldCB1ZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoRyx5ZT0+eyJjb2RlIj09PXllLnR5cGUmJih1ZSsr''@;'; put 'put ''LHNldFRpbWVvdXQoKCk9PntJKHllLnRleHQseWUubGFuZywoRWUsamUpPT57aWYoRWUpcmV0dXJuIGllKEVlKTtudWxsIT1qZSYmamUhPT15ZS50ZXh0JiYoeWUudGV4dD1qZSx5ZS5lc2NhcGVkPSEwKSx1ZS0tLDA9PT11ZSYmaWUoKX0pfSwwKSl9KSx2b2lkKDA9PT11ZSYmaWUoKSl9aWYo''@;'; put 'put ''aC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oST0+bChJLGgpKS50aGVuKEk9Pmgud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoSSxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5JKTpJKS50aGVu''@;'; put 'put ''KEk9PmEoSSxoKSkudGhlbihJPT5oLmhvb2tzP2guaG9va3MucG9zdHByb2Nlc3MoSSk6SSkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSk7Y29uc3QgST1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoSSxoLndhbGtUb2tlbnMpO2xl''@;'; put 'put ''dCBHPWEoSSxoKTtyZXR1cm4gaC5ob29rcyYmKEc9aC5ob29rcy5wb3N0cHJvY2VzcyhHKSksR31jYXRjaChJKXtyZXR1cm4gTShJKX19fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lmKGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRq''@;'; put 'put ''cy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK3gxKGgubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdChoKTtpZigh''@;'; put 'put ''ZCl0aHJvdyBoO2QoaCl9fX0oUzYpO2Z1bmN0aW9uIFJsKGMsbCxhKXtyZXR1cm4gSzkucGFyc2UoYyxsLGEpfVJsLm9wdGlvbnM9Umwuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXtyZXR1cm4gSzkuc2V0T3B0aW9ucyhjKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC5nZXRE''@;'; put 'put ''ZWZhdWx0cz1mdW5jdGlvbiBudGUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1h''@;'; put 'put ''bmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxSbC5kZWZhdWx0cz1TNixSbC51c2U9ZnVuY3Rpb24oLi4uYyl7''@;'; put 'put ''cmV0dXJuIEs5LnVzZSguLi5jKSxqNmUoUmwuZGVmYXVsdHM9SzkuZGVmYXVsdHMpLFJsfSxSbC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIEs5LndhbGtUb2tlbnMoYyxsKX0sUmwucGFyc2VJbmxpbmU9SzkucGFyc2VJbmxpbmUsUmwuUGFyc2VyPW80LFJsLnBhcnNlcj1vNC5w''@;'; put 'put ''YXJzZSxSbC5SZW5kZXJlcj1jTixSbC5UZXh0UmVuZGVyZXI9cnRlLFJsLkxleGVyPWE0LFJsLmxleGVyPWE0LmxleCxSbC5Ub2tlbml6ZXI9bE4sUmwuU2x1Z2dlcj1pdGUsUmwuSG9va3M9dU4sUmwucGFyc2U9Umw7Y29uc3QgSHl0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gTnl0KGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IFZ5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtk''@;'; put 'put ''b3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBh''@;'; put 'put ''IGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAz''@;'; put 'put ''OTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1l''@;'; put 'put ''cmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0''@;'; put 'put ''aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBi''@;'; put 'put ''b3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNv''@;'; put 'put ''bW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwg''@;'; put 'put ''eW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwg''@;'; put 'put ''NEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJM''@;'; put 'put ''RSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdB''@;'; put 'put ''UkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Umwuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJk''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''InB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5N''@;'; put 'put ''U0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEpe2lmKCF0''@;'; put 'put ''aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMp''@;'; put 'put ''KX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJnFhKEh5dCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LGRlY2xzOjEzLHZh''@;'; put 'put ''cnM6Nixjb25zdHM6W1sibWFya2Rvd25DYXJkIiwiIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywic2Nyb2xsIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYWNjZXB0LWNoZWNrYm94Il0sWyJj''@;'; put 'put ''bHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xySW5saW5lIiwic21hbGwiLDQsIm5nSWYiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZk''@;'; put 'put ''KXtjb25zdCBmPUxuKCk7ZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLE9lKDIsIiBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAiKSxkZSgzLCJwIiksT2UoNCwiIFdlbGNvbWUgdG8gRGF0YSBDb250cm9sbGVyIGZvciBTQVMhIFBsZWFzZSByZXZpZXcgYW5kIGFjY2VwdCBhZ3JlZW1lbnQg''@;'; put 'put ''YmVsb3cgaW4gb3JkZXIgdG8gcHJvY2VlZC4gIiksaGUoKSgpLGRlKDUsImRpdiIsMywwKSxGdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkNhcmRCbG9ja1Njcm9sbChNKSl9KSxoZSgpLGRlKDcsImRpdiIsNCkoOCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDUp''@;'; put 'put ''KDksImlucHV0Iiw2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGguYWdyZWVDaGVja2VkLE0pfHwoaC5hZ3JlZUNoZWNrZWQ9TSksQ3QoTSl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnRlcm1zQWdyZWVDaGFuZ2Uo''@;'; put 'put ''KSl9KSxoZSgpLGRlKDEwLCJsYWJlbCIpLE9lKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLGhlKCkoKSxndCgxMixOeXQsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSgpfTImZCYmKGZlKDUpLHhlKCJpbm5lckhUTUwiLGguZXVsYV9tYXJrZG93''@;'; put 'put ''bixWNCksZmUoMyksVHIoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgpLHBpKCJuZ01vZGVsIixoLmFncmVlQ2hlY2tlZCkseGUoImRpc2FibGVkIixoLmFncmVlQm94TG9ja2VkKSxmZSgzKSx4ZSgibmdJZiIsaC5hZ3JlZUJveExvY2tlZCYmaC5hZ3JlZUNsaWNrZWQpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOlt5YSxNZCxubCwkcyxkcyxJZCxTaCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBCeXQoYyxsKXsxJmMmJihkZSgwLCJwIiwyOSksT2UoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0''@;'; put 'put ''YWlscyBhdCB0aGUgbW9tZW50ICIpLGhlKCkpfWZ1bmN0aW9uIGp5dChjLGwpe2lmKDEmYyYmR3QoMCwicCIsMzApLDImYyl7Y29uc3QgYT1MZSgzKTt4ZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sVjQpfX1mdW5jdGlvbiB6eXQoYyxsKXtpZigxJmMmJihkZSgw''@;'; put 'put ''LCJwIikoMSwic3Ryb25nIiksT2UoMiwiRGV0YWlsczoiKSxoZSgpLE9lKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgzKSxEcigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBVeXQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLEJ5dCwyLDAsInAiLDI3KSgyLGp5dCwx''@;'; put 'put ''LDEsInAiLDI4KSgzLHp5dCw0LDEsInAiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5rZXlFcnJvciksZmUoKSx4ZSgibmdJZiIsYS5rZXlFcnJvciksZmUoKSx4ZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBaeXQoYyxsKXsxJmMmJihz''@;'; put 'put ''aSgwKSxkZSgxLCJwIiwyOSksT2UoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIiksR3QoMywiY29udGFjdC1saW5rIiwzMSksT2UoNCwiIG9yIHlvdXIgcmVzZWxs''@;'; put 'put ''ZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLGhlKCksbGkoKSl9ZnVuY3Rpb24gV3l0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwicCIsMjkpLE9lKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBm''@;'; put 'put ''aWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksaGUoKSxsaSgpKX1mdW5jdGlvbiBZeXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9''@;'; put 'put ''bC5pbmRleCxoPUxlKDIpO1RyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksZmUoKSxVdSgiICIsYSwiIixkPT09KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IEd5dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMyKSgxLCJzdHJvbmciKSxPZSgyLCJBbGxvd2VkIHVzZXJzOiIpLGhlKCksT2UoMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDMpLERyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gJHl0''@;'; put 'put ''KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzMpfWZ1bmN0aW9uIEt5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpLE9lKDEsIiBEcm9wIC8gQnJvd3NlIGxpY2VuY2UgZmlsZSAiKSxoZSgpKX1mdW5jdGlvbiBxeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxPZSgxLCIgU2VsZWN0''@;'; put 'put ''ZWQgZmlsZTogIiksZGUoMiwic3Ryb25nIiksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMyksd3IoYS5saWNlbmNlZmlsZS5maWxlbmFtZSl9fWZ1bmN0aW9uIFh5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsInN0cm9uZyIpLE9lKDIpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDMpO2ZlKDIpLHdyKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIEp5dChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsS3l0LDIsMCwiZGl2Iiw0KSgyLHF5dCw0LDEsImRpdiIsNCkoMyxYeXQsMywxLCJkaXYiLDQpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSx4ZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gUXl0KGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwzNCksT2Uo''@;'; put 'put ''MSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLGhlKCkpfWZ1bmN0aW9uIGVidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSxPZSgyLCJMaWNlbmNpbmciKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiZGl2Iiw4KSxndCg1LFV5dCw0LDMsIm5n''@;'; put 'put ''LWNvbnRhaW5lciIsOSkoNixaeXQsNSwwLCJuZy1jb250YWluZXIiLDkpKDcsV3l0LDMsMCwibmctY29udGFpbmVyIiw5KSxkZSg4LCJwIikoOSwic3Ryb25nIiksT2UoMTAsIlNZU1NJVEU6IiksaGUoKSxndCgxMSxZeXQsMiw0LCJzcGFuIiwxMCksZGUoMTIsImEiLDExKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1oYSgxNCksZj1oYSgxNiksdj1MZSgpO3JldHVybiBDdCh2LmNvcHlTeXNzaXRlKGgsZix2LnN5c3NpdGUudmFsdWV8fFtdKSl9KSxHdCgxMywiY2xyLWljb24iLDEyLDApLGRlKDE1LCJzcGFuIiwxMywxKSxPZSgxNywiQ29weSB0byBjbGlwYm9h''@;'; put 'put ''cmQiKSxoZSgpKCkoKSxndCgxOCxHeXQsNCwxLCJwIiwxNCksZGUoMTksImNsci10YWJzIikoMjAsImNsci10YWIiKSgyMSwiYnV0dG9uIiwxNSksT2UoMjIsIlVwbG9hZCBsaWNlbmNlIiksaGUoKSxkZSgyMywiY2xyLXRhYi1jb250ZW50IikoMjQsImlucHV0IiwxNiwyKSxGdCgiY2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLGhlKCksZGUoMjYsImRpdiIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoaGEoMjUpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gd3Qo''@;'; put 'put ''YSksQ3QoTGUoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLGd0KDI3LCR5dCwxLDAsImNsci1zcGlubmVyIiwxOCkoMjgsSnl0LDQsMywibmctY29udGFpbmVyIiw0KSxoZSgpKCkoKSxkZSgyOSwiY2xyLXRhYiIpKDMwLCJidXR0b24iLDE1KSxPZSgzMSwiUGFzdGUgbGljZW5jZSIpLGhlKCks''@;'; put 'put ''ZGUoMzIsImNsci10YWItY29udGVudCIpKDMzLCJmb3JtIiwxOSkoMzQsInAiKSxPZSgzNSwiTGljZW5jZSBrZXk6IiksaGUoKSxkZSgzNiwiZGl2IiwyMCkoMzcsInRleHRhcmVhIiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4g''@;'; put 'put ''bWkoZi5saWNlbmNlS2V5VmFsdWUsaCl8fChmLmxpY2VuY2VLZXlWYWx1ZT1oKSxDdChoKX0pLEZ0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnRyaW1LZXlzKCkpfSksaGUoKSgpKCksZGUoMzgsImZvcm0iLDIyKSgzOSwicCIpLE9lKDQwLCJBY3RpdmF0''@;'; put 'put ''aW9uIGtleToiKSxoZSgpLGRlKDQxLCJkaXYiLDIwKSg0MiwidGV4dGFyZWEiLDIzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmFjdGl2YXRpb25LZXlWYWx1ZSxoKXx8KGYuYWN0aXZhdGlvbktleVZhbHVlPWgpLEN0KGgp''@;'; put 'put ''fSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSgpKCkoKSgpLGRlKDQzLCJkaXYiLDI0KSg0NCwiYnV0dG9uIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmFwcGx5S2V5''@;'; put 'put ''cygpKX0pLE9lKDQ1LCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLGhlKCksZ3QoNDYsUXl0LDIsMCwiYnV0dG9uIiwyNiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMykseGUoIm5nU3dpdGNoIixhLmFjdGlvbiksZmUoMikseGUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLGZlKCks''@;'; put 'put ''eGUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksZmUoNCkseGUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksZmUoNykseGUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksZmUoOSkseGUoIm5n''@;'; put 'put ''SWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKDkpLHBpKCJuZ01vZGVsIixhLmxpY2VuY2VLZXlWYWx1ZSksZmUoNSkscGkoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxmZSgyKSx4ZSgiY2xyTG9hZGluZyIs''@;'; put 'put ''YS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLGZlKDIpLHhlKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1mdW5jdGlvbiB0YnQoYyxsKXsxJmMmJkd0KDAsImFwcC10ZXJtcyIpfXZhciBxNmU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJr''@;'; put 'put ''ZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30ocTZlfHx7fSk7Y29uc3QgbmJ0PVt7cGF0aDoiOmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGlj''@;'; put 'put ''ZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0i''@;'; put 'put ''bWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4i''@;'; put 'put ''IGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9y''@;'; put 'put ''LWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2Vu''@;'; put 'put ''Y2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZh''@;'; put 'put ''bHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0''@;'; put 'put ''aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5s''@;'; put 'put ''aWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFj''@;'; put 'put ''dGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0''@;'; put 'put ''YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHE2ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5n''@;'; put 'put ''ZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpv''@;'; put 'put ''aW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJr''@;'; put 'put ''ZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNT''@;'; put 'put ''Ij09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQu''@;'; put 'put ''ZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9dj0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIs''@;'; put 'put ''IXZ8fCF2LnRhcmdldHx8MiE9di50YXJnZXQucmVhZHlTdGF0ZXx8di50YXJnZXQuZXJyb3J8fCF2LnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgTT12LnRhcmdldC5yZXN1bHQudG9TdHJp''@;'; put 'put ''bmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1NWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPU1bMF19LGYucmVhZEFzVGV4dChoKX1zd2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VL''@;'; put 'put ''ZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGljZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEN1KSxHZSh1MSksR2UoQnMpLEdlKG9MKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjb3B5SWNvbiIs''@;'; put 'put ''IiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNhcmQtdGV4dCJdLFs0LCJuZ1N3aXRj''@;'; put 'put ''aENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWzEsInRvb2x0aXAtY29udGVu''@;'; put 'put ''dCJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFuZ2UiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYXBwbHkta2V5cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbInJvdXRlckxp''@;'; put 'put ''bmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhU''@;'; put 'put ''TUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZndCgwLGVidCw0NywxMywiZGl2IiwzKSgxLHRidCwx''@;'; put 'put ''LDAsImFwcC10ZXJtcyIsNCksMiZkJiYoeGUoIm5nSWYiLCJyZWdpc3RlciIhPT1oLmFjdGlvbiksZmUoKSx4ZSgibmdJZiIsInJlZ2lzdGVyIj09PWguYWN0aW9uKSl9LGRlcGVuZGVuY2llczpbbnMseWEsUzIsY3AsbDcscWwsbmwsbzcsJHMsYnAsSGwsajAsUDIsX20sQ20seDcsd20sYm0s''@;'; put 'put ''UzcsUmQsYzEsVnl0LHBPXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGNhbkFjdGl2YXRlOlt0dGVdLGNhbkRlYWN0aXZhdGU6W3R0ZV19XTtsZXQgcmJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChuYnQpLHpjXX0pfX1yZXR1cm4gY30pKCksaWJ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxSYyx6MCxyYnQsQ3ddfSl9fXJldHVybiBjfSkoKTtjb25zdCBhYnQ9KCk9Pih7c3RhbmRhbG9uZTohMH0pLFg2ZT0oYyxsLGEpPT4oe2FkZGVk''@;'; put 'put ''Um93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX0pLEo2ZT1jPT4oeyJjaCB0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC10b3AtcmlnaHQiOmN9KTtmdW5jdGlvbiBvYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMTkpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBs''@;'; put 'put ''aWNpdCxkPUxlKCk7eGUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIitkLmpzUGFyYW1zW2FdKSxmZSgpLERyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIHNidChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQs''@;'; put 'put ''ZD1MZSgpO2ZlKCksRHIoIiAiLGQuanNQYXJhbXNbYV0sIiAiKX19ZnVuY3Rpb24gbGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksT2UoMiksaGUoKSxndCgzLG9idCwyLDIsInRkIiwxNykoNCxzYnQsMiwxLCJ0ZCIsMTgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgyKSx3cihhKSxmZSgpLHhlKCJuZ0lmIixhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKSxmZSgpLHhlKCJuZ0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIGNidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLE9lKDIpLGhlKCksZGUoMywidGQi''@;'; put 'put ''LDQpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMyk7ZmUoMiksd3IoYSksZmUoMiksd3IoZC5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gdWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwidGFibGUi''@;'; put 'put ''LDMpKDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksT2UoNiwiTmFtZSIpLGhlKCksZGUoNywidGgiLDQpLE9lKDgsIlZhbHVlIiksaGUoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxjYnQsNSwyLCJ0ciIsNSksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDEwKSx4ZSgi''@;'; put 'put ''bmdGb3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBkYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxPZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDIpO2ZlKDIpLHdyKGEpLGZlKDIpLHdyKGQu''@;'; put 'put ''anNQYXJhbXNbYV0pfX1mdW5jdGlvbiBoYnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDIwKSxPZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLGhlKCksZ3QoNCx1YnQsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSksaGUoKSxk''@;'; put 'put ''ZSg1LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksT2UoNywiQmFzZSBUYWJsZSBEZXRhaWxzIiksaGUoKSxkZSg4LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksT2UoMTQsIk5hbWUiKSxoZSgpLGRl''@;'; put 'put ''KDE1LCJ0aCIsNCksT2UoMTYsIlZhbHVlIiksaGUoKSgpKCksZGUoMTcsInRib2R5IiksZ3QoMTgsZGJ0LDUsMiwidHIiLDUpLGhlKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg0KSx4ZSgiY2xySWZBY3RpdmUiLCEwKSxmZSgxNCkseGUoIm5nRm9yT2YiLGEua2V5c0FycmF5''@;'; put 'put ''KX19ZnVuY3Rpb24gZmJ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNzIpLE9lKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIHBidChjLGwpe2lmKDEmYyYmKHNpKDApLGRlKDEsImRpdiIsNzMpKDIsInNwYW4iKSxPZSgzLCJUYWJsZSBJZDoiKSxoZSgp''@;'; put 'put ''LGRlKDQsInN0cm9uZyIsNzQpLE9lKDUpLGhlKCkoKSxkZSg2LCJkaXYiKSg3LCJzcGFuIiksT2UoOCwiU3VibWl0dGVyOiIpLGhlKCksZGUoOSwic3BhbiIsNzUpLE9lKDEwKSxoZSgpKCksZGUoMTEsImRpdiIpKDEyLCJzcGFuIiksT2UoMTMsIlN1Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDE0''@;'; put 'put ''LCJzcGFuIiw3NSksT2UoMTUpLGhlKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxPZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSxoZSgpLGRlKDE5LCJzcGFuIiw3NSksT2UoMjApLGhlKCkoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCkseGUoInJvdXRlckxpbmsiLCIvc3Rh''@;'; put 'put ''Z2UvIisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLGZlKCksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDph''@;'; put 'put ''LnRhYmxlRGV0YWlscy5TVUJNSVRURURfQllfTk0sIiAiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxz''@;'; put 'put ''LlNVQk1JVFRFRF9SRUFTT05fVFhULCIgIil9fWZ1bmN0aW9uIGdidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLE9lKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gbWJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSksZ3QoMyxmYnQsMiwwLCJwIiw0NSkoNCxwYnQsMjEsNSwibmctY29udGFpbmVyIiw4KSxoZSgpLGRlKDUsImRpdiIsNTIpKDYsImRpdiIsNTMpKDcsImRp''@;'; put 'put ''diIsNTQpKDgsImRpdiIsNTUpKDksImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDQpO3JldHVybiBDdChoLmdvVG9CYXNlKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxPZSgxMCwiIFZpZXcgYmFzZSB0YWJs''@;'; put 'put ''ZSAiKSxoZSgpLGRlKDExLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg0KTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLE9lKDEyLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDU4KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSg0KTtyZXR1cm4gQ3QoaC5nb0JhY2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE9lKDE0LCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTUsImRpdiIsNTkpKDE2LCJidXR0b24i''@;'; put 'put ''LDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLmFwcHJvdmVUYWJsZSgpKX0pLE9lKDE3LCIgQUNDRVBUICIpLGhlKCksZGUoMTgsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoNCkucmVqZWN0T3Blbj0h''@;'; put 'put ''MCl9KSxPZSgxOSwiIFJFSkVDVCAiKSxoZSgpLGRlKDIwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsNjIpKDIxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMiwiaW5wdXQiLDYzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSg0KTtyZXR1cm4gbWkoZi5m''@;'; put 'put ''b3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSgyMywibGFiZWwiLDY0KSxPZSgyNCksaGUoKSgpKCkoKSxkZSgyNSwi''@;'; put 'put ''ZGl2Iiw2NSksZ3QoMjYsZ2J0LDMsMCwic3BhbiIsNjYpLGRlKDI3LCJkaXYiLDMxKSgyOCwiZGl2Iiw2NykoMjksInNwYW4iLDY4KSxPZSgzMCwiIENoYW5nZWQgUm93cyAiKSxkZSgzMSwic3BhbiIsNjkpLE9lKDMyKSxoZSgpKCksZGUoMzMsInNwYW4iLDcwKSxPZSgzNCwiIEFkZGVkIFJv''@;'; put 'put ''d3MgIiksZGUoMzUsInNwYW4iLDY5KSxPZSgzNiksaGUoKSgpLGRlKDM3LCJzcGFuIiw3MSksT2UoMzgsIiBEZWxldGVkIFJvd3MgIiksZGUoMzksInNwYW4iLDY5KSxPZSg0MCksaGUoKSgpKCkoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSg0KTtmZSgzKSx4ZSgibmdJZiIsIWEudGFi''@;'; put 'put ''bGVEZXRhaWxzKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlRGV0YWlscyksZmUoMTIpLHhlKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9D''@;'; put 'put ''aGFuZ2VzKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoNCkscGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSx3cihhLmZvcm1hdHRl''@;'; put 'put ''ZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSx4ZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2KSx3cihhLmxlbnMudXBkYXRlZCksZmUoNCksd3IoYS5sZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiB2YnQoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJkaXYiLDc1KSgxLCJwIiw4MSksT2UoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24geWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoMyx2YnQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9TGUoNCk7ZmUoMykseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGJidChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxPZSgxLCIgVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiBfYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''aCIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIHdidChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDIpLmluZGV4LGg9TGUoNCk7ZmUoKSxEcigi''@;'; put 'put ''T3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBDYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLE9lKDEpLGd0KDIsd2J0LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1MZSgy''@;'; put 'put ''KS5pbmRleCxmPUxlKDQpO3hlKCJuZ0NsYXNzIixzcCgzLEo2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksRHIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLHhlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1''@;'; put 'put ''cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIFNidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQ2J0LDMsNSwidGQiLDgzKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIE1idChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInRkIiw0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1MZSgyKS5pbmRleCxoPUxlKDQpO2ZlKCksRHIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24geGJ0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxNYnQs''@;'; put 'put ''MiwxLCJ0ZCIsNDcpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpLmluZGV4LGQ9TGUoNCk7ZmUoKSx4ZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gRWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxndCgxLFNidCwyLDEsIm5nLWNvbnRhaW5lciIsOCkoMix4YnQsMiwx''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoNCk7eGUoIm5nQ2xhc3MiLHBNKDMsWDZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCkseGUoIm5nSWYiLCJ1cGRhdGVk''@;'; put 'put ''Ij09PWQuY2hBcnJbYV0pLGZlKCkseGUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBUYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMyksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5nb1RvQXBwcm92YWxzTGlzdCgpKX0pLEd0KDUsImNsci1pY29uIiwzNCksT2UoNiwiQmFjayB0byBhcHByb3ZhbHMgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxPZSg5KSxoZSgpKCksZGUoMTAs''@;'; put 'put ''ImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgzKS5nZXREZXRhaWxzKCkpfSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDQwKSxPZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDQxKSxndCgxNixtYnQs''@;'; put 'put ''NDEsMTEsImRpdiIsNDIpLGhlKCksZ3QoMTcseWJ0LDQsMSwiZGl2Iiw0MyksZGUoMTgsImRpdiIsNDQpLGd0KDE5LGJidCwyLDAsInAiLDQ1KSxkZSgyMCwidGFibGUiLDMpKDIxLCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLGd0KDIzLF9idCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDI0LCJ0Ym9k''@;'; put 'put ''eSIpLGd0KDI1LEVidCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoOSksRHIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX05NLCIgIiksZmUoNSksRHIoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1z''@;'; put 'put ''LlRBQkxFX0RFU0MsIiAiKSxmZSgyKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUoMikseGUoIm5nSWYiLGEubG9hZGluZ1RhYmxlJiZhLm5vQ2hhbmdlcyksZmUoNCkseGUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSx4ZSgibmdG''@;'; put 'put ''b3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gQWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNyksZ3QoMSxUYnQsMjYsNywiZGl2IiwyOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24ga2J0KGMsbCl7MSZjJiYoZGUoMCwi''@;'; put 'put ''c3BhbiIsNzkpLE9lKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIERidChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiwiTG9hZGluZyBwcmV2aWV3IiksaGUoKSgpKX1mdW5jdGlvbiBJYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDg3KSxndCgxLGtidCwy''@;'; put 'put ''LDAsInNwYW4iLDg4KSgyLERidCwzLDAsImRpdiIsOCksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gUmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMyksZ3QoMSxBYnQsMiwx''@;'; put 'put ''LCJkaXYiLDI0KSxkZSgyLCJkaXYiLDI1KSxndCgzLElidCwzLDIsImRpdiIsMjYpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKDIpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBMYnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3''@;'; put 'put ''NiksR3QoMSwiY2xyLWljb24iLDc3KSxPZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIE9idChjLGwpezEmYyYmR3QoMCwiZGl2Iiw0OSl9ZnVuY3Rpb24gUGJ0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiZGl2Iiw3NSkoMSwicCIsODEpLE9lKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIEZidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA0KSgxLCJzcGFuIiw3OSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLFBidCwzLDAsImRpdiIsODApLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1MZSg0KTtmZSgzKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gSGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHdyKGEpfX1mdW5jdGlvbiBOYnQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJzcGFuIiw4NiksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuaW5kZXgsZD1MZSgyKS5pbmRleCxoPUxlKDQpO2ZlKCksRHIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gVmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''dGQiLDg0KSxPZSgxKSxndCgyLE5idCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9TGUoMikuaW5kZXgsZj1MZSg0KTt4ZSgibmdDbGFzcyIsc3AoMyxKNmUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJb''@;'; put 'put ''aF0pKSxmZSgpLERyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSx4ZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBCYnQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLFZidCwzLDUsInRkIiw4MyksbGko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPUxlKCkuaW5kZXgsZD1MZSg0KTtmZSgpLHhlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBqYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoMikuaW5kZXgsaD1MZSg0''@;'; put 'put ''KTtmZSgpLERyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIHpidChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsamJ0LDIsMSwidGQiLDQ3KSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS5pbmRleCxkPUxlKDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93S2V5c1th''@;'; put 'put ''XSl9fWZ1bmN0aW9uIFVidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksZ3QoMSxCYnQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsemJ0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPUxlKDQpO3hlKCJuZ0NsYXNzIixwTSgzLFg2ZSwiYWRk''@;'; put 'put ''ZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gWmJ0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5MykoMSwiZGl2Iiw5NCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsOTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxHdCg1LCJjZHMtaWNvbiIsOTYpLE9l''@;'; put 'put ''KDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIsOTcpKDgsImgzIiw5OCksT2UoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykudGFibGVGbGFnPSEwKX0pLEd0''@;'; put 'put ''KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw5OSksT2UoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw1MCkoMTYsImRpdiIsNTEpKDE3LCJkaXYiLDczKSgxOCwic3BhbiIpLE9lKDE5LCJUYWJsZSBJZDoiKSxoZSgpLGRlKDIwLCJzdHJvbmciLDc0KSgyMSwic3BhbiIpLE9l''@;'; put 'put ''KDIyKSxoZSgpKCkoKSxkZSgyMywiZGl2IikoMjQsInNwYW4iKSxPZSgyNSwiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMjYsInNwYW4iLDc1KSxPZSgyNyksaGUoKSgpLGRlKDI4LCJkaXYiKSgyOSwic3BhbiIpLE9lKDMwLCJTdWJtaXQgTWVzc2FnZToiKSxoZSgpLGRlKDMxLCJzcGFuIiks''@;'; put 'put ''T2UoMzIpLGhlKCkoKSgpLGRlKDMzLCJkaXYiLDUyKSgzNCwiZGl2Iiw1MykoMzUsImRpdiIsNTQpKDM2LCJkaXYiLDU1KSgzNywiYnV0dG9uIiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGguZ29Ub0Jhc2UoaC5zdWJPYmouYmFzZSkp''@;'; put 'put ''fSksT2UoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgzOSwiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMyk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC5zdWJPYmoudGFibGVJZCkpfSksT2UoNDAsIiBWaWV3IHN0YWdlZCBkYXRhICIp''@;'; put 'put ''LGhlKCksZGUoNDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDMpO3JldHVybiBDdChoLmdvQmFjayhoLnN1Yk9iai5iYXNlKSl9KSxPZSg0MiwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpKCkoKSgpLGRlKDQzLCJkaXYiLDY1KSxndCg0NCxM''@;'; put 'put ''YnQsMywwLCJzcGFuIiw2NiksZGUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLE9lKDQ4LCIgQ2hhbmdlZCBSb3dzICIpLGRlKDQ5LCJzcGFuIiw2OSksT2UoNTApLGhlKCkoKSxkZSg1MSwic3BhbiIsNzApLE9lKDUyLCIgQWRkZWQgUm93cyAiKSxkZSg1Mywic3Bh''@;'; put 'put ''biIsNjkpLE9lKDU0KSxoZSgpKCksZGUoNTUsInNwYW4iLDcxKSxPZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxkZSg1Nywic3BhbiIsNjkpLE9lKDU4KSxoZSgpKCkoKSgpKCksZGUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTAwKSg2MSwiY2xyLXRvZ2dsZS13cmFw''@;'; put 'put ''cGVyIikoNjIsImlucHV0Iiw2MyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoMyk7cmV0dXJuIG1pKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChMZSgzKS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoNjMsImxhYmVsIiksT2UoNjQpLGhlKCkoKSgpKCkoKSgpLGRlKDY1LCJkaXYiLDEwMSksZ3QoNjYsT2J0LDEsMCwiZGl2Iiw0MiksaGUoKSxndCg2NyxGYnQsNCwxLCJkaXYiLDEwMiksZGUoNjgsImRpdiIsMTAz''@;'; put 'put ''KSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIpKDcxLCJ0ciIsNDYpLGd0KDcyLEhidCwyLDEsInRoIiw0NyksaGUoKSgpLGRlKDczLCJ0Ym9keSIpLGd0KDc0LFVidCwzLDcsInRyIiw0OCksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoOSksRHIoIiAiLGEuc3ViT2JqLmJh''@;'; put 'put ''c2UsIiAiKSxmZSg1KSxEcigiICIsYS50YWJsZURlc2NyaXB0aW9uLCIgIiksZmUoNikseGUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIithLnN1Yk9iai50YWJsZUlkKSxmZSgyKSxEcigiICIsYS5zdWJPYmoudGFibGVJZCwiIiksZmUoNSksRHIoIiAiLGEuc3ViT2JqLnN1Ym1pdHRlZCwiICIp''@;'; put 'put ''LGZlKDUpLERyKCIgIixhLnN1Yk9iai5zdWJtaXRSZWFzb24sIiAiKSxmZSgxMikseGUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiksd3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLHdyKGEubGVucy5uZXcpLGZlKDQpLHdyKGEubGVucy5kZWxldGVkKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5m''@;'; put 'put ''b3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxmZSg1KSx4ZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIp''@;'; put 'put ''LHhlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBXYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkxKSxndCgxLFpidCw3NSwxNiwiZGl2Iiw5MiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gWWJ0KGMsbCl7MSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gR2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDUpKDEsImRpdiIsMTA2KSgyLCJzcGFuIiw3OSksT2UoMywiIExvYWRpbmcuLi4gIiksaGUoKSxndCg0LFli''@;'; put 'put ''dCwzLDAsImRpdiIsOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uICRidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsV2J0LDIsMSwiZGl2Iiw4OSkoMixHYnQsNSwxLCJkaXYiLDkwKSxoZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19bGV0IFE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIs''@;'; put 'put ''dGhpcy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9y''@;'; put 'put ''bWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0PTEwMCx0aGlzLnJlZnJlc2hTdGFydHVwc2VydmljZUFmdGVyQXBwcm92ZT0hMX1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJu''@;'; put 'put ''IDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgi''@;'; put 'put ''L3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0''@;'; put 'put ''YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVz''@;'; put 'put ''ZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9hZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIp''@;'; put 'put ''O2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJv''@;'; put 'put ''dXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxhLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92ZVRhYmxlKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXthLmFjY2VwdExvYWRpbmc9ITA7bGV0IGQ9''@;'; put 'put ''e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFyYW1zPy5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0''@;'; put 'put ''YSIpLnRoZW4oaD0+e2EucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlJiZhLnNhc1NlcnZpY2UucmVsb2FkU3RhcnR1cERhdGEoKSxhLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1Rv''@;'; put 'put ''U3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEpLnRoZW4oaD0+e2QudGFi''@;'; put 'put ''bGVEZXRhaWxzPWguanNwYXJhbXNbMF0sZC5qc1BhcmFtcz1oLmpzcGFyYW1zWzBdO2xldCBmPVtdO2Zvcihjb25zdCB2IGluIGQuanNQYXJhbXMpZC5qc1BhcmFtcy5oYXNPd25Qcm9wZXJ0eSh2KSYmZi5wdXNoKHYpO2Qua2V5c0FycmF5PWYsIk1QRV9UQUJMRVMiPT09aC5qc3BhcmFtc1sw''@;'; put 'put ''XS5CQVNFX0RTJiYoZC5yZWZyZXNoU3RhcnR1cHNlcnZpY2VBZnRlckFwcHJvdmU9ITApfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lm''@;'; put 'put ''KCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9u''@;'; put 'put ''ZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBkdD0wO2R0PGQubGVuZ3RoO2R0Kyspe2xldCBKdD1PYmpl''@;'; put 'put ''Y3Qua2V5cyhkW2R0XSk7Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKWRbZHRdW0p0W3ZuXV0hPT1mW2R0XVtKdFt2bl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOmR0LGZpZWxkOkp0W3ZuXSxwcm9wOmRbZHRdW0p0W3ZuXV0sb3JpZ2luYWw6ZltkdF1bSnRbdm5dXX0pfXRo''@;'; put 'put ''aXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBHPVtdLGllPWQuY29uY2F0KGEsaCk7Zm9yKGxldCBkdD0wO2R0PHRoaXMucmVzcG9u''@;'; put 'put ''c2UuY29scy5sZW5ndGg7ZHQrKylHLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW2R0XS5OQU1FKTtsZXQgdWU9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LHllPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0''@;'; put 'put ''P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5h''@;'; put 'put ''ZGRDb3VudD11ZTtsZXQgamU9W10scWU9W107Zm9yKGxldCBkdD0wO2R0PEcubGVuZ3RoO2R0KyspcWUucHVzaCh7ZGF0YTpHW2R0XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRhYmxlLmRhdGE9aWU7Zm9yKGxldCBkdD0wO2R0PGllLmxlbmd0aDtkdCsrKXtsZXQgdm49T2JqZWN0LmtleXMo''@;'; put 'put ''aWVbZHRdKTt0aGlzLnJvd0tleXMucHVzaCh2bil9bGV0IHJ0PVtdLHB0PVtdO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtkdCsrKXtpZihkdDx5ZSYmMCE9PXllKXtydC5wdXNoKFtdKSxwdC5wdXNoKFtdKSxqZS5wdXNoKCJ1cGRhdGVkIik7bGV0IEp0PU9i''@;'; put 'put ''amVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbZHRdKTtmb3IobGV0IHZuPTA7dm48SnQubGVuZ3RoO3ZuKyspe2xldCBDbj1KdFt2bl07ZltkdF1bQ25dIT09ZFtkdF1bQ25dPyhydFtkdF0ucHVzaCghMCkscHRbZHRdLnB1c2goZltkdF1bQ25dKSk6KHJ0W2R0XS5wdXNoKCExKSxwdFtk''@;'; put 'put ''dF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPXJ0LHRoaXMuYXJyT2ZDaGFuZ2VzPXB0fWR0Pj15ZSYmZHQ8eWUrdWUmJmplLnB1c2goImFkZGVkIiksZHQ+dWUreWUtMSYmamUucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9amUsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBd''@;'; put 'put ''LHRoaXMuZGlmZlRhYmxlLmRhdGE9aWV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtpZihhLl9kZXRhaWxzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGg9UShmdW5jdGlvbiooZil7''@;'; put 'put ''YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxldCBNIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PU0mJmEuc3VibWl0QXJy''@;'; put 'put ''LnB1c2goTSk7bGV0IHY9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKHYsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihNPT57''@;'; put 'put ''YS5wYXJhbXM9TS5wYXJhbXNbMF0sYS5yZXNwb25zZT1NLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goTT0+TSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3''@;'; put 'put ''IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8o''@;'; put 'put ''YS50YWJsZUlkKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3Vz''@;'; put 'put ''KCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGtoKSxHZShCcyksR2UodmMpLEdlKEN1''@;'; put 'put ''KSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NDIsdmFyczoxMixjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJj''@;'; put 'put ''bHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJj''@;'; put 'put ''bGljayJdLFs0LCJuZ0lmIl0sWzEsImZvcm0tYmxvY2siXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwiZm9ybUZpZWxkc184Il0sWyJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsImlu''@;'; put 'put ''bmVySFRNTCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCBsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMSwibGVmdCIsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbImNsclRhYkxpbmsiLCIiXSxbNCwiY2xySWZBY3RpdmUiXSxbMSwib3Zl''@;'; put 'put ''cmZsb3ctYXV0byJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVu''@;'; put 'put ''dC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsIm10LTAiLDQsIm5nSWYiXSxbMSwibXQtMCJdLFsxLCJjYXJkLWhl''@;'; put 'put ''YWRlciIsInAtMCJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsQmFjayJdLFsxLCJidG4iLCJidG4tb3V0bGluZSIsIm0tMCIsMywiY2xpY2siXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCIsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEluZm8iXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtc20iLCJ0b29sdGlwLXRvcC1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJpbmZv''@;'; put 'put ''LXN0YW5kYXJkIiwic2l6ZSIsIjI4Il0sWzEsInRleHQtY2VudGVyIiwibXQtMTAiXSxbMSwiY2FyZC1ibG9jayIsInAtMCJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC0yNHZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiLCJtdC0wIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtc2l6ZS0xOCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiXSxbImNsYXNzIiwibGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImQtZmxleCIs''@;'; put 'put ''MywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJjbHItcm93IiwiZm9udC1zaXplLTE1Il0sWzEsImNsci1jb2wtbWQtNSJdLFsxLCJjbHItY29sLW1kLTciXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIi''@;'; put 'put ''XSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTAiXSxbMSwiY2xyLXJvdyIsImNsci1nYXAtNSIsImNsci1nYXAtc20tMCJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJi''@;'; put 'put ''dG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siLCJkLWZs''@;'; put 'put ''ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCJhY2NlcHRCdG4iLCJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4t''@;'; put 'put ''c20iLCJidG4tc3VjY2VzcyIsIm1yLTVpIiwzLCJjbGljayIsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsiaWQiLCJyZWplY3RCdG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0biIsImJ0bi1kYW5nZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJtbC0yMGkiXSxb''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsImNoZWNrZWQiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwi''@;'; put 'put ''Y2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsInJvd3Mtbm90aWNlIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCJdLFsxLCJsYWJlbCIsImxhYmVsLXdhcm5pbmciXSxbMSwiYmFkZ2Ui''@;'; put 'put ''XSxbMSwibGFiZWwiLCJsYWJlbC1zdWNjZXNzIl0sWzEsImxhYmVsIiwibGFiZWwtZGFuZ2VyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0sWzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2UiXSxbInNo''@;'; put 'put ''YXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1vcmFuZ2UiXSxbMSwiaC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwibXQtMTAi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJkLWZsZXgiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwibGVmdCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImxlZnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwidG9vbHRpcC1jb250ZW50Iiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJkLWZsZXggZmxleC1jb2x1bW4g''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJjYXJkIG0tMCIsNCwibmdJZiJdLFsxLCJjYXJkIiwibS0wIl0s''@;'; put 'put ''WzEsImNhcmQtaGVhZGVyIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00Il0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiLCJ0ZXh0LWNlbnRlciJdLFsx''@;'; put 'put ''LCJtLTAiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm0tMCIsIm1sLTIwLWkiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTI1dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50''@;'; put 'put ''ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCJdLFsxLCJoLTI1dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJsb2FkZXIiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItbW9kYWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmRldGFpbHNPcGVuLHYpfHwoaC5kZXRhaWxzT3Blbj12KSx2fSksZGUoMSwiaDMiLDEpLE9lKDIsIkFwcHJvdmFsIERldGFp''@;'; put 'put ''bHMiKSxoZSgpLGRlKDMsImRpdiIsMikoNCwidGFibGUiLDMpKDUsInRoZWFkIikoNiwidHIiKSg3LCJ0aCIsNCksT2UoOCwiTmFtZSIpLGhlKCksZGUoOSwidGgiLDQpLE9lKDEwLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDExLCJ0Ym9keSIpLGd0KDEyLGxidCw1LDMsInRyIiw1KSxoZSgpKCko''@;'; put 'put ''KSxkZSgxMywiZGl2Iiw2KSgxNCwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGV0YWlsc09wZW49ITF9KSxPZSgxNSwiIE9rICIpLGhlKCkoKSgpLGRlKDE2LCJjbHItbW9kYWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVy''@;'; put 'put ''biBtaShoLnRhYmxlRmxhZyx2KXx8KGgudGFibGVGbGFnPXYpLHZ9KSxkZSgxNywiaDMiLDEpLE9lKDE4LCJBbGwgRGV0YWlscyIpLGhlKCksZGUoMTksImRpdiIsMiksZ3QoMjAsaGJ0LDE5LDIsImNsci10YWJzIiw4KSxoZSgpLGRlKDIxLCJkaXYiLDYpKDIyLCJidXR0b24iLDcpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC50YWJsZUZsYWc9ITF9KSxPZSgyMywiIE9rICIpLGhlKCkoKSgpLGRlKDI0LCJjbHItbW9kYWwiLDApLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlamVjdE9wZW4sdil8fChoLnJlamVjdE9wZW49diks''@;'; put 'put ''dn0pLGRlKDI1LCJoMyIsMSksT2UoMjYsIlJlYXNvbiBNZXNzYWdlIiksaGUoKSxkZSgyNywiZGl2IiwyKSgyOCwiZm9ybSIpKDI5LCJzZWN0aW9uIiw5KSgzMCwiZGl2IiwxMCkoMzEsImxhYmVsIiwxMSksT2UoMzIsIlJlYXNvbiBmb3IgcmVqZWN0aW5nPyIpLGhlKCksZGUoMzMsInRleHRh''@;'; put 'put ''cmVhIiwxMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnN1Ym1pdFJlYXNvbix2KXx8KGguc3VibWl0UmVhc29uPXYpLHZ9KSxoZSgpKCkoKSgpKCksZGUoMzQsImRpdiIsNikoMzUsImJ1dHRvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''aC5yZWplY3RPcGVuPSExfSksT2UoMzYsIiBDYW5jZWwgIiksaGUoKSxkZSgzNywiYnV0dG9uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdGluZygpfSksT2UoMzgsIiBPSyAiKSxoZSgpKCkoKSxkZSgzOSwiZGl2IiwxNSksZ3QoNDAsUmJ0LDQsMiwiZGl2Iiwx''@;'; put 'put ''NikoNDEsJGJ0LDMsMiwiZGl2Iiw4KSxoZSgpKSwyJmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLmRldGFpbHNPcGVuKSxmZSgxMikseGUoIm5nRm9yT2YiLGgua2V5c0FycmF5KSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnRhYmxlRmxhZyksZmUoNCkseGUoIm5nSWYiLGgudGFibGVGbGFn''@;'; put 'put ''KSxmZSg0KSxwaSgiY2xyTW9kYWxPcGVuIixoLnJlamVjdE9wZW4pLGZlKDkpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbikseGUoIm5nTW9kZWxPcHRpb25zIixHcygxMSxhYnQpKSgiaW5uZXJIVE1MIixoLnN1Ym1pdFJlYXNvbixWNCksZmUoNCkseGUoImNsckxvYWRpbmciLGgucmVq''@;'; put 'put ''ZWN0TG9hZGluZyksZmUoMykseGUoIm5nSWYiLCFoLnN1Ym1pdHRlZCksZmUoKSx4ZSgibmdJZiIsaC5zdWJtaXR0ZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSxucyx5YSxsNyxxbCxNZCxubCxvNywkcyxicCxjMSxIbCxycyxvdSxLdSxqMCxIYixQMixkcyxJZCxCYixTaCxfbSxDbSx4Nyx3bSxi''@;'; put 'put ''bSxTN10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBLYnQ9Yz0+KHtub0JvcmRlcjpjfSkscWJ0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiBYYnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDExKSxHdCgyLCJjbHItaWNvbiIsMTIpLGRlKDMsImgz''@;'; put 'put ''IiwxMyksT2UoNCwiVGhlcmUgYXJlIG5vIGFwcHJvdmFscyByZW1haW5pbmciKSxoZSgpKCkoKSl9ZnVuY3Rpb24gSmJ0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE0KSxPZSgxLCIgUkVWSUVXICIpLGhlKCkpfWZ1bmN0aW9uIFFidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE1KSxPZSgxLCIg''@;'; put 'put ''WW91IGhhdmUgIiksZGUoMiwic3BhbiIpLE9lKDMpLGhlKCksT2UoNCwiYXBwcm92YWxzIHJlbWFpbmluZyAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSxEcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGVfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDE4KSxPZSgxLCIg''@;'; put 'put ''TG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiB0X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLE9lKDIsIkxvYWRpbmcgYXBwcm92YWxzIGxpc3QiKSxoZSgpKCkpfWZ1bmN0aW9uIG5fdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTYpLGd0KDEsZV90LDIsMCwic3BhbiIs''@;'; put 'put ''MTcpKDIsdF90LDMsMCwiZGl2Iiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHJfdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDM2KX1mdW5jdGlvbiBpX3QoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1zcGlubmVyIiwzNyksMiZjJiZ4ZSgiY2xyU21hbGwiLCEwKX1mdW5jdGlvbiBhX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksT2UoNCksaGUoKSxk''@;'; put 'put ''ZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCksZGUoNywiY2xyLWRnLWNlbGwiKSxPZSg4KSxoZSgpLGRlKDksImNsci1kZy1jZWxsIikoMTAsImRpdiIsMjQpKDExLCJhIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KExlKDIpLmdl''@;'; put 'put ''dENsaWNrZWQoaCkpfSksR3QoMTIsImNsci1pY29uIiwyNiksZGUoMTMsInNwYW4iLDI3KSxPZSgxNCwiR28gdG8gcmV2aWV3IHBhZ2Ugc2NyZWVuIiksaGUoKSgpLGRlKDE1LCJhIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSksZj1oLiRpbXBsaWNpdCx2PWguaW5k''@;'; put 'put ''ZXgsTT1MZSgyKTtyZXR1cm4gQ3QoZi5yZWplY3RMb2FkaW5nPyIiOk0ucmVqZWN0aW5nKHYpKX0pLGd0KDE2LHJfdCwxLDAsImNsci1pY29uIiwyOSkoMTcsaV90LDEsMSwiY2xyLXNwaW5uZXIiLDMwKSxkZSgxOCwic3BhbiIsMjcpLE9lKDE5LCJSZWplY3QiKSxoZSgpKCksZGUoMjAsImEi''@;'; put 'put ''LDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDIpLmdldFRhYmxlKGgudGFibGVJZCkpfSksR3QoMjEsImNsci1pY29uIiwzMiksZGUoMjIsInNwYW4iLDI3KSxPZSgyMywiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiksaGUo''@;'; put 'put ''KSgpKCkoKSxkZSgyNCwiY2xyLWRnLWNlbGwiLDMzKSgyNSwiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gTGUoMikuZG93bmxvYWQoZi50YWJsZUlkKSxDdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEd0KDI2LCJjbHIt''@;'; put 'put ''aWNvbiIsMzUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLnN1Ym1pdHRlciksZmUoMiksd3IoYS5iYXNlVGFibGUpLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnN1Ym1pdFJlYXNvbiksZmUoOCkseGUoIm5nSWYiLCFhLnJlamVjdExv''@;'; put 'put ''YWRpbmcpLGZlKCkseGUoIm5nSWYiLGEucmVqZWN0TG9hZGluZyksZmUoOCkseGUoImlkIixhLnRhYmxlSWQpfX1mdW5jdGlvbiBvX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDE5KSgyLCJjbHItZGctY29sdW1uIiwyMCksT2UoMywiU1VCTUlUVEVSIiks''@;'; put 'put ''aGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwyMCksT2UoNSwiQkFTRSBUQUJMRSIpLGhlKCksZGUoNiwiY2xyLWRnLWNvbHVtbiIsMjApLE9lKDcsIlNVQk1JVFRFRCIpLGhlKCksZGUoOCwiY2xyLWRnLWNvbHVtbiIsMjApLE9lKDksIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDEwLCJjbHIt''@;'; put 'put ''ZGctY29sdW1uIiksT2UoMTEsIkFDVElPTiIpLGhlKCksZGUoMTIsImNsci1kZy1jb2x1bW4iKSxPZSgxMywiRE9XTkxPQUQiKSxoZSgpLGd0KDE0LGFfdCwyNyw3LCJjbHItZGctcm93IiwyMSksZGUoMTUsImNsci1kZy1mb290ZXIiKSgxNiwiY2xyLWRnLXBhZ2luYXRpb24iLDIyLDApKDE4''@;'; put 'put ''LCJjbHItZGctcGFnZS1zaXplIiwyMyksT2UoMTksIkl0ZW1zIHBlciBwYWdlIiksaGUoKSxPZSgyMCksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPWhhKDE3KSxkPUxlKCk7ZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJs''@;'; put 'put ''ZSIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxmZSg2KSx4ZSgiY2xyRGdJdGVtc09mIixkLmFwcHJvdmVMaXN0KSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhlKCJjbHJQYWdlU2l6''@;'; put 'put ''ZU9wdGlvbnMiLEdzKDEwLHFidCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgYXBwcm92YWxzICIpfX1sZXQgc190PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2Vy''@;'; put 'put ''dmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuY2RyPXYsdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMH1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldENsaWNrZWQoYSl7''@;'; put 'put ''dm9pZCAwIT09dGhpcy5hcHByb3ZlTGlzdCYmKHRoaXMudGFibGVJZD10aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQsdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCJyZXZpZXcvYXBwcm92ZURldC8iK3RoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCkpfXJlamVjdGluZyhhKXt2YXIgZD10''@;'; put 'put ''aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07''@;'; put 'put ''dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChk''@;'; put 'put ''LmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChmKXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24i''@;'; put 'put ''LGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EuaXRlbXNOdW09MTA7bGV0IGQ9e1NUUF9BQ1RJT046Ik9QRU5fQVBQ''@;'; put 'put ''Uk9WQUxTIn07dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEFwcHJvdmFscyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIpO2EucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aDtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKHYpe3JldHVy''@;'; put 'put ''bnt0YWJsZUlkOnYuVEFCTEVfSUQsc3VibWl0dGVyOnYuU1VCTUlUVEVEX0JZX05NLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLGJhc2VUYWJsZTp2LkJBU0VfVEFCTEUsc3VibWl0UmVhc29uOnYuU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7YS5hcHByb3ZlTGlzdD1mLGEubG9hZGVk''@;'; put 'put ''PSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIsaCl9fSkoKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShraCksR2Uo''@;'; put 'put ''dmMpLEdlKExzKSxHZShCcyksR2UoRXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5LHZhcnM6OCxjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsx''@;'; put 'put ''LCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1n''@;'; put 'put ''cmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwi''@;'; put 'put ''c3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29s''@;'; put 'put ''dGlwIiwxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIy''@;'; put 'put ''NCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLDQsIm5nSWYiXSxbMywiY2xy''@;'; put 'put ''U21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiaWQiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIl0sWzMsImNsclNtYWxsIl1dLHRlbXBs''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsWGJ0LDUsMCwiZGl2IiwzKSxkZSgzLCJkaXYiLDQpLGd0KDQsSmJ0LDIsMCwiaDMiLDUpKDUsUWJ0LDUsMSwicCIsNiksaGUoKSxndCg2LG5fdCwzLDIsImRpdiIsNyksZGUoNywiZGl2Iiw4KSxn''@;'; put 'put ''dCg4LG9fdCwyMSwxMSwiZGl2Iiw5KSxoZSgpKCkoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLDA9PT1oLnJlbWFpbmVkKSxmZSgpLHhlKCJuZ0NsYXNzIixzcCg2LEtidCwhaC5sb2FkZWQpKSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSx4ZSgibmdJZiIsIWgubG9hZGVkKSxmZSgyKSx4ZSgibmdJZiIsaC5hcHByb3ZlTGlzdCYmMCE9PWgucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5YSxBbSxRZixSNyxjTyxKYixYeCx1TyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxE''@;'; put 'put ''NyxIbCxSZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBsX3Q9Yz0+KHtub0JvcmRlcjpjfSksY190PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiB1X3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxHdCgyLCJjbHItaWNvbiIsMTUpLGRlKDMs''@;'; put 'put ''ImgzIiwxNiksT2UoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxlcyAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gZF90KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE3KSxPZSgxLCIgU1VCTUlUIFFVRVVFICIpLGhlKCkpfWZ1bmN0aW9uIGhfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAi''@;'; put 'put ''LDE4KSxPZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLE9lKDMpLGhlKCksT2UoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMyksRHIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBmX3QoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJzcGFuIiwyMSksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gcF90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBnX3QoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDE5KSxndCgxLGZfdCwyLDAsInNwYW4iLDIwKSgyLHBfdCwzLDAsImRpdiIsMyksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gbV90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu''@;'; put 'put ''KCk7ZGUoMCwiY2xyLWRnLXJvdyIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSxkZSgxLCJjbHItZGctY2VsbCIpLE9lKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxP''@;'; put 'put ''ZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksT2UoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMjkpKDksImEiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDUpLmdvVG9TdGFnZShoLnRhYmxlSWQp''@;'; put 'put ''KX0pLEd0KDEwLCJjbHItaWNvbiIsMzEpLGRlKDExLCJzcGFuIiwzMiksT2UoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMTMsImNsci1kZy1jZWxsIiwzMykoMTQsImJ1dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4k''@;'; put 'put ''aW1wbGljaXQ7cmV0dXJuIExlKDUpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNSwiY2xyLWljb24iLDM1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5iYXNlKSxmZSgyKSx3cihhLnN1Ym1pdHRlZCks''@;'; put 'put ''ZmUoMiksd3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiB2X3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksT2UoMywiQkFTRSBUQUJMRSIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLE9lKDUsIlNVQk1J''@;'; put 'put ''VFRFRCIpLGhlKCksZGUoNiwiY2xyLWRnLWNvbHVtbiIsMjQpLE9lKDcsIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDEzKSxPZSg5LCJBQ1RJT04iKSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiwxMyksT2UoMTEsIkRPV05MT0FEIiksaGUoKSxndCgxMixt''@;'; put 'put ''X3QsMTYsMywiY2xyLWRnLXJvdyIsMjUpLGRlKDEzLCJjbHItZGctZm9vdGVyIikoMTQsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgxNiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLE9lKDE3LCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksT2UoMTgpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1o''@;'; put 'put ''YSgxNSksZD1MZSg0KTtmZSg0KSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoNikseGUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhl''@;'; put 'put ''KCJjbHJQYWdlU2l6ZU9wdGlvbnMiLEdzKDgsY190KSksZmUoMiksVmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBzdWJtaXNzaW9ucyAiKX19ZnVuY3Rpb24geV90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMiksZ3QoMSx2''@;'; put 'put ''X3QsMTksOSwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWZ1bmN0aW9uIGJfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNiksZ3QoMSx1X3QsNSwwLCJkaXYiLDcpLGRlKDIsImRpdiIs''@;'; put 'put ''OCksZ3QoMyxkX3QsMiwwLCJoMyIsOSkoNCxoX3QsNSwxLCJwIiwxMCksaGUoKSxndCg1LGdfdCwzLDIsImRpdiIsMTEpKDYseV90LDIsMSwiZGl2IiwxMiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKCkseGUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksZmUoKSx4ZSgi''@;'; put 'put ''bmdDbGFzcyIsc3AoNixsX3QsIWEubG9hZGVkKSksZmUoKSx4ZSgibmdJZiIsMCE9PWEucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIF9f''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksZ3QoMSxiX3QsNyw4LCJkaXYiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gd190KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksR3QoMSwiYXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyIpLGhlKCkpfWxldCBlOGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLnJlbWFpbmVkPTAsdGhpcy5s''@;'; put 'put ''b2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdl''@;'; put 'put ''dERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5z''@;'; put 'put ''bmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURf''@;'; put 'put ''QllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURf''@;'; put 'put ''UkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9''@;'; put 'put ''fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3Ro''@;'; put 'put ''aXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNl''@;'; put 'put ''LmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQ3UpLEdlKEJzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1j''@;'; put 'put ''b250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJjb250ZW50LWFyZWEiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0s''@;'; put 'put ''WyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2Vp''@;'; put 'put ''Z2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFy''@;'; put 'put ''ZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2''@;'; put 'put ''aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdy''@;'; put 'put ''aWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRl''@;'; put 'put ''ciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAt''@;'; put 'put ''Ym90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmls''@;'; put 'put ''ZSBmb3IgdGFibGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsX190LDIsMSwiZGl2IiwyKSgyLHdfdCwyLDAsImRpdiIsMyksaGUoKSks''@;'; put 'put ''MiZkJiYoZmUoKSx4ZSgibmdJZiIsIWguc3ViUmVhZHkpLGZlKCkseGUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOlt3dSx5YSxBbSxRZixSNyxjTyxKYixYeCx1TyxFbSxTcCxMNyx0XyxUbSxrNyx4bSxENyxIbCxRNmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7Y29uc3QgQ190PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIFNfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxPZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIE1fdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdCxmPUxlKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksT2UoMSksaGUoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1MZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHhfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxmPUxlKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE9lKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxPZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxmPUxlKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE9lKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIEVfdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1M''@;'; put 'put ''ZSgpO2ZlKCksd3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIFRfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLE9lKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsTV90LDIsMSwiYSIsMTUpKDUseF90LDcsMCwiZGl2IiwxNikoNixFX3QsMiwxLCJzcGFuIiwxNiks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLHdyKGEpLGZlKDIpLHhlKCJuZ0lmIixkPDEpLGZlKCkseGUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSx4ZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEFfdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxP''@;'; put 'put ''ZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBrX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLE9lKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gRF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxBX3QsMiwwLCJzcGFuIiwx''@;'; put 'put ''OSkoMixrX3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIElfdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksT2UoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0''@;'; put 'put ''aW9uIFJfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxEcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9y''@;'; put 'put ''dEBkYXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gTF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykuZ2V0QXBwckluZGV4KGgpKX0p''@;'; put 'put ''LGRlKDEsImNsci1kZy1jZWxsIiwzNCkoMiwiYSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxPZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDM2KSxPZSg1''@;'; put 'put ''KSxoZSgpLGRlKDYsImNsci1kZy1jZWxsIiwzNCksT2UoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsMzQpLE9lKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiwzNCksT2UoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiwzNCksT2UoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxs''@;'; put 'put ''IiwzNykoMTUsImJ1dHRvbiIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIExlKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMyksd3IoYS5iYXNldGFibGUpLGZlKCkseGUoIm5nQ2xhc3MiLGxwKDcsQ190LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLHdyKGEuc3RhdHVzKSxmZSgyKSx3cihhLnN1Ym1pdHRlciksZmUoMiksd3Io''@;'; put 'put ''YS5zdWJtaXR0ZWRSZWFzb24pLGZlKDIpLHdyKGEuc3VibWl0dGVkKSxmZSgyKSx3cihhLnJldmlld2VkKX19ZnVuY3Rpb24gT190KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLE9lKDIsIkJBU0VfVEFCTEUiKSxoZSgpLGRlKDMs''@;'; put 'put ''ImNsci1kZy1jb2x1bW4iLDMxKSxPZSg0LCJTVEFUVVMiKSxoZSgpLGRlKDUsImNsci1kZy1jb2x1bW4iLDMxKSxPZSg2LCJTVUJNSVRURVIiKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iLDMxKSxPZSg4LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg5LCJjbHItZGctY29sdW1uIiwzMSks''@;'; put 'put ''T2UoMTAsIlNVQk1JVFRFRCIpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxPZSgxMiwiQVBQUk9WRUQgLyBSRUpFQ1RFRCIpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iKSxPZSgxNCwiRE9XTkxPQUQiKSxoZSgpLGd0KDE1LExfdCwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLGhl''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiks''@;'; put 'put ''ZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksZmUoNCkseGUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gUF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw0MCksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5sb2FkRGF0YSgpKX0pLE9lKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO3hlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLERyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1m''@;'; put 'put ''dW5jdGlvbiBGX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLElfdCwyLDAsImgzIiwyMykoMyxSX3QsMiwxLCJwIiwyNCksaGUoKSxndCg0LE9fdCwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxkZSg1LCJkaXYiLDI2KSxndCg2LFBfdCwyLDIsImJ1dHRv''@;'; put 'put ''biIsMjcpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMikseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBIX3Q9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6c190fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50OlE2''@;'; put 'put ''ZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OmU4ZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRo''@;'; put 'put ''aXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMu''@;'; put 'put ''b3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgbWguU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRl''@;'; put 'put ''PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxl''@;'; put 'put ''KGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9J''@;'; put 'put ''RD09PWEudGFibGVJZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMu''@;'; put 'put ''SElTVDtyZXR1cm4gYTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dy''@;'; put 'put ''YW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgZD17U1RBUlRST1c6YS5oaXN0UGFy''@;'; put 'put ''YW1zLkhJU1QrYS5oaXN0UGFyYW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5nTW9yZT0hMSxhLmhpc3RQYXJh''@;'; put 'put ''bXM9aC5oaXN0cGFyYW1zWzBdO2NvbnN0IHY9aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKHYubGVuZ3RoPjApe2NvbnN0IE09djthLmhpc3RvcnlBcnI9dixmPU9iamVjdC5rZXlzKE1bMF0pLGEudGFibGVUaXRsZXM9Zjts''@;'; put 'put ''ZXQgST12Lm1hcChmdW5jdGlvbihHKXtyZXR1cm57dGFibGVJZDpHLlRBQkxFX0lELHN1Ym1pdHRlcjpHLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246Ry5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6Ry5TVUJNSVRURUQsc3RhdHVzOkcuU1RBVFVTLHJldmlld1JlYXNvbjpHLlJF''@;'; put 'put ''VklFV19SRUFTT05fVFhULHJldmlld2VyOkcuUkVWSUVXRVIscmV2aWV3ZWQ6Ry5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpHLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOkcuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5JKSxhLmxvYWRlZD0hMH1lbHNlIGEu''@;'; put 'put ''bG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJu''@;'; put 'put ''IFEoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2Uoa2gpLEdlKHZjKSxHZShMcyksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImFwcC1oaXN0b3J5Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0Zv''@;'; put 'put ''ciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29s''@;'; put 'put ''dW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRl''@;'; put 'put ''ciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNv''@;'; put 'put ''ci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJj''@;'; put 'put ''YXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlz''@;'; put 'put ''dG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xy''@;'; put 'put ''RGdGaWVsZCJdLFszLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJtLTAiLDMsImNsaWNrIl0sWzEsInZlckNlbnRlciIsMywibmdDbGFzcyJdLFsxLCJ2ZXJDZW50''@;'; put 'put ''ZXIiLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGlj''@;'; put 'put ''ayIsImNsckxvYWRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLGd0KDEsU190LDQsMCwiZGl2IiwxKSxkZSgyLCJjbHItbW9kYWwiLDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLm9wZW5Nb2RhbCx2KXx8''@;'; put 'put ''KGgub3Blbk1vZGFsPXYpLHZ9KSxkZSgzLCJoNCIsMyksT2UoNCwiQXBwcm92YWwgZGV0YWlscyIpLGhlKCksZGUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxPZSgxMCwiTmFtZSIpLGhlKCksZGUoMTEsInRoIiw2KSxPZSgxMiwiVmFsdWUi''@;'; put 'put ''KSxoZSgpKCkoKSxkZSgxMywidGJvZHkiKSxndCgxNCxUX3QsNyw0LCJ0ciIsNyksaGUoKSgpKCksZGUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9wZW5Nb2RhbD0hMX0pLE9lKDE3LCIgT0sgIiksaGUoKSgpKCksZ3QoMTgsRF90''@;'; put 'put ''LDMsMiwiZGl2IiwxMCkoMTksRl90LDcsNCwiZGl2IiwxMSksaGUoKSksMiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5ub0RhdGEpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5vcGVuTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpLGZlKDEyKSx4ZSgibmdGb3JPZiIsaC50YWJsZVRpdGxl''@;'; put 'put ''cyksZmUoNCkseGUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWgubm9EYXRhJiZoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLHlhLEFtLFFmLFI3LEpiLEVtLFNwLEw3LHRfLFRtLGs3LHhtLEQ3LEhsLG91LEt1LGowLFAyXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpfV07bGV0IE5fdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmEsemMuZm9y''@;'; put 'put ''Q2hpbGQoSF90KSx6Y119KX19cmV0dXJuIGN9KSgpLFZfdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1w''@;'; put 'put ''b3J0czpbUmEsUmMsTl90LHowLG85LmZvclJvb3QoKSxuZixDd119KX19cmV0dXJuIGN9KSgpLEJfdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJldmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''OltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBqX3Q9KGMsbCk9Pih7cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfSk7ZnVuY3Rpb24gel90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNiksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gVV90KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gWl90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLHpfdCwyLDAsInNwYW4iLDUpKDIsVV90LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFdfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikuYXBw''@;'; put 'put ''cm92ZVRhYmxlU2NyZWVuKCkpfSksT2UoMSwiIEFwcHJvdmUgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7eGUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9''@;'; put 'put ''PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpfX1mdW5jdGlvbiBZX3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLE9lKDIs''@;'; put 'put ''IiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyAiKSxoZSgpKCkpfWZ1bmN0aW9uIEdfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikucmV2ZXJ0Q2hhbmdl''@;'; put 'put ''cygpKX0pLE9lKDEsIiBSRVZFUlQgIiksZ3QoMixZX3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaGUoKX0yJmMmJnhlKCJjbHJMb2FkaW5nIixMZSgyKS5yZXZlcnRpbmdDaGFuZ2VzKX1mdW5jdGlvbiAkX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgx''@;'; put 'put ''LCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLE9lKDQsIlN0YWdlZCBEYXRhIiksaGUoKSgpKCksZGUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4KSxPZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGhlKCkoKSxkZSgxMCwiZGl2IikoMTEs''@;'; put 'put ''InNwYW4iKSxPZSgxMiwiVGFibGUgSWQ6IiksaGUoKSxkZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxPZSgxNSksaGUoKSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksT2UoMTgsIkJhc2UgVGFibGU6IiksaGUoKSxkZSgxOSwiYSIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoTGUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE9lKDIwKSxoZSgpKCksZGUoMjEsImRpdiIpKDIyLCJzcGFuIiksT2UoMjMsIlN1Ym1pdCBEYXRlOiIpLGhlKCksZGUoMjQsInNwYW4iLDE0KSxPZSgyNSksaGUoKSgpLGRlKDI2LCJkaXYiKSgyNywic3BhbiIpLE9lKDI4''@;'; put 'put ''LCJSZXZpZXcgU3RhdHVzOiIpLGhlKCksZGUoMjksInNwYW4iLDE1KSxPZSgzMCksaGUoKSgpKCksZGUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxPZSgzNCwiQWN0aW9ucyIpLGhlKCkoKSxkZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxPZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGd0KDM5LFdfdCwyLDIsImJ1dHRvbiIsMjApLGRlKDQwLCJidXR0b24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KExlKCkuZ29CYWNrKCkpfSksT2UoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKTtyZXR1cm4gQ3QoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0''@;'; put 'put ''YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxHdCg0MywiY2xyLWljb24iLDIzKSxoZSgpLGRlKDQ0LCJjbHItdG9vbHRpcCIpLGd0KDQ1LEdfdCwzLDEsImJ1dHRvbiIsMjQpLGhlKCkoKSgpKCkoKSxkZSg0NiwiZGl2IiwyNSksR3QoNDcsImhvdC10YWJsZSIsMjYpLGhl''@;'; put 'put ''KCksR3QoNDgsImRpdiIsMjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoMTUpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxmZSg1KSxEcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWls''@;'; put 'put ''cy5CQVNFX1RBQkxFLCIgIiksZmUoNSksRHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg0KSx4ZSgibmdDbGFzcyIsbHAoMTcsal90LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDph''@;'; put 'put ''LnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxmZSgpLERyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklF''@;'; put 'put ''V19TVEFUVVNfSUQsIiAiKSxmZSg3KSx4ZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoMikseGUoIm5nSWYiLCJZRVMiIT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKCkseGUoImRpc2FibGVkIixhLnJldmVy''@;'; put 'put ''dGluZ0NoYW5nZXMpLGZlKDUpLHhlKCJuZ0lmIiwiWUVTIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkFMTE9XX1JFU1RPUkUpKSxmZSgyKSx4ZSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgi''@;'; put 'put ''Y29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSkoImFmdGVyR2V0Q29sSGVhZGVyIixhLmhvdFRhYmxlLmFmdGVyR2V0Q29s''@;'; put 'put ''SGVhZGVyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpfX1jb25zdCBLX3Q9W3twYXRoOiI6dGFibGVJZCIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZl''@;'; put 'put ''bnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2Rh''@;'; put 'put ''dGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDo1MDAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMCxhZnRlckdldENvbEhlYWRlcjooSSxHLGllKT0+e0cuY2xhc3NM''@;'; put 'put ''aXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVy''@;'; put 'put ''bCgiL3Jldmlldy9hcHByb3ZlRGV0LyIrdGhpcy50YWJsZV9pZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1nb0JhY2soKXtLbi54bG1hcHMuZmluZChkPT5kLnRhcmdldERT''@;'; put 'put ''PT09dGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSk/dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBzLyIrdGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5C''@;'; put 'put ''QVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNl''@;'; put 'put ''cy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJv''@;'; put 'put ''dXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1''@;'; put 'put ''YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7''@;'; put 'put ''bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEkgaW4gaCloJiZmLnB1c2goSSk7Zm9yKGxldCBJPTA7STxmLmxlbmd0aDtJKyspdi5wdXNoKHtkYXRhOmZbSV19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0''@;'; put 'put ''YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNw''@;'; put 'put ''b25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1yZXZlcnRDaGFuZ2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0b3JlX2luOlt7bG9hZF9yZWY6dGhp''@;'; put 'put ''cy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXQmJnRoaXMucm91dGUubmF2aWdhdGUoWyIvc3RhZ2UiXSkudGhlbigoKT0+e3RoaXMucm91dGUubmF2aWdhdGUoW2Avc3RhZ2UvJHtkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dFswXS5MT0FE''@;'; put 'put ''UkVGfWBdKX0pfSkuZmluYWxseSgoKT0+e3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMX0pfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUxKSxHZShraCksR2UodmMpLEdlKExzKSxHZShDdSksR2UoQnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29u''@;'; put 'put ''dGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYi''@;'; put 'put ''XSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1o''@;'; put 'put ''ZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVM''@;'; put 'put ''aW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIiwibm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''Im1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImFwcHJvdmFsLWJ0biIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlw''@;'; put 'put ''VHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJo''@;'; put 'put ''dERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJhZnRlckdldENvbEhlYWRlciIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRl''@;'; put 'put ''eHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsWl90LDMsMiwiZGl2IiwyKSgzLCRfdCw0OSwyMCwiZGl2IiwzKSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3Us''@;'; put 'put ''eWEsSGwsajAsTDIsUDIsdjcsYjcseTcsRF9dLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgcV90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlw''@;'; put 'put ''ZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSx6MCx6Yy5mb3JDaGlsZChLX3QpLG85LmZvclJvb3QoKV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGRl''@;'; put 'put ''KDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEpfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIp''@;'; put 'put ''LGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDog''@;'; put 'put ''IiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBld3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIEhpc3Rvcnkgcm93cyBsaW1p''@;'; put 'put ''dDogIiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIHR3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgU3VibWl0IHJvd3Mg''@;'; put 'put ''bGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBud3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksT2UoMSwiIFRhYmxlcyBpbiBs''@;'; put 'put ''aWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxPZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gcnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLE9lKDEs''@;'; put 'put ''IiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLE9lKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIGl3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxPZSgxLCIgTGlu''@;'; put 'put ''ZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksT2UoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gYXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi''@;'; put 'put ''ZGl2IiwxOSksT2UoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksT2UoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1MZSgyKTtmZSgyKSx4ZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxndCgxLGF3dCw0LDEsImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLE9lKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxv''@;'; put 'put ''ZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksT2UoNSwiIFJFRlJFU0ggIiksaGUoKSgpLGRlKDYsImRpdiIsMTkpLE9lKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGRl''@;'; put 'put ''KDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxPZSg5LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRlKDEwLCJkaXYiLDE5KSxPZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxkZSgxMiwi''@;'; put 'put ''YnV0dG9uIiwyMiksT2UoMTMsIiBVUERBVEUgIiksaGUoKSgpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoKSx4ZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgzKSx4ZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBzd3Q9W3twYXRo''@;'; put 'put ''OiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQu''@;'; put 'put ''MTIuMSIsYXBwVmVyc2lvbjoidjcuMC4zIi5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6SW9lKCkocGFyc2VJbnQoIjE3NTA5NTUzNzE4NDUiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVm''@;'; put 'put ''cmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNl''@;'; put 'put ''U3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudEluZm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5m''@;'; put 'put ''bygpLHRoaXMuc2V0dGluZ3M9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWUsdGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMmJih0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQz1kZWNvZGVVUklDb21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VY''@;'; put 'put ''RUMpKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdWJzY3JpYmUodj0+e3RoaXMuc2V0dGluZ3M9dn0pfW5nT25Jbml0KCl7fXNldHRpbmdDaGFuZ2UoYSl7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3ModGhpcy5zZXR0aW5ncyl9ZG93bmxvYWRDb25m''@;'; put 'put ''aWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2YrIi8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhw''@;'; put 'put ''b3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9''@;'; put 'put ''KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaHRhYmxlbGluZWFnZSIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVz''@;'; put 'put ''cG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFy''@;'; put 'put ''c2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShvTCksR2UoQnMpLEdlKHUxKSxHZSgkUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHIt''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4i''@;'; put 'put ''LCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLE9lKDMs''@;'; put 'put ''IlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksT2UoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLE9lKDEyLCIgU1lTU0lURTog''@;'; put 'put ''IiksZGUoMTMsInNwYW4iLDcpLE9lKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLE9lKDE2LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLE9lKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLE9lKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLE9lKDIyKSxoZSgp''@;'; put 'put ''KCksZGUoMjMsInAiLDgpLE9lKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3KSxPZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxPZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxPZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxPZSgzMiwiIFNZU1BST0NFU1NNT0RF''@;'; put 'put ''OiAiKSxkZSgzMywic3BhbiIsNyksT2UoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksT2UoMzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLE9lKDM4KSxoZSgpKCksZGUoMzksInAiLDgpLE9lKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksT2UoNDIpLGhlKCko''@;'; put 'put ''KSxkZSg0MywicCIsOCksT2UoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJzcGFuIiw3KSxPZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxPZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksT2UoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksT2UoNTIsIiBBVVRP''@;'; put 'put ''RVhFQzogIiksZGUoNTMsInNwYW4iLDcpLE9lKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxPZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxPZSg2MSwiIEFwcGxpY2F0aW9u''@;'; put 'put ''IHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxPZSg2MyksaGUoKSgpLGRlKDY0LCJwIiw4KSxPZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLE9lKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLE9lKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3Bh''@;'; put 'put ''biIsNyksT2UoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksT2UoNzMsIiBIVFRQOiAiKSxkZSg3NCwic3BhbiIsNyksT2UoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksT2UoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNwYW4iLDcpLE9lKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLE9l''@;'; put 'put ''KDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksT2UoODMpLGhlKCkoKSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksT2UoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLE9lKDg5LCIgVmFsaWQgdW50aWw6ICIp''@;'; put 'put ''LGRlKDkwLCJzcGFuIiw3KSxPZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxPZSg5MywiIFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxPZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxPZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksT2UoOTkpLGhlKCkoKSxk''@;'; put 'put ''ZSgxMDAsInAiLDgpLE9lKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3KSxPZSgxMDMpLGhlKCkoKSxndCgxMDQsWF90LDQsMSwicCIsMTApKDEwNSxKX3QsNCwxLCJwIiwxMCkoMTA2LFFfdCw0LDEsInAiLDEwKSgxMDcsZXd0LDQsMSwicCIsMTApKDEwOCx0d3QsNCwxLCJw''@;'; put 'put ''IiwxMCkoMTA5LG53dCw0LDEsInAiLDEwKSgxMTAscnd0LDQsMSwicCIsMTApKDExMSxpd3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxPZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksT2UoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxPZSgxMTcsIiBGaWxlIFVw''@;'; put 'put ''bG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxPZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAiLDgpLE9lKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLE9lKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksT2UoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3''@;'; put 'put ''KSxPZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LG93dCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLnJlc3BvbnNlTW9kYWws''@;'; put 'put ''dil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxPZSgxMzIsIlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLE9lKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJl''@;'; put 'put ''c3BvbnNlTW9kYWw9ITF9KSxPZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUoMTQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50''@;'; put 'put ''SW5mby5TWVNTQ1BMKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLHdyKG51''@;'; put 'put ''bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpo''@;'; put 'put ''LmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9M''@;'; put 'put ''T05HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSx3cihoLmFwcEluZm8uYXBwVmVy''@;'; put 'put ''c2lvbiksZmUoNCksd3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSx3cihoLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLHdyKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FE''@;'; put 'put ''TUlOX0dST1VQKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLHdyKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZv''@;'; put 'put ''P251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSx3cihudWxsIT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0''@;'; put 'put ''IT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0''@;'; put 'put ''KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSx4ZSgibmdJZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJ''@;'; put 'put ''bmZvLklTQURNSU4pKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksZmUoNCksRHIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbeWEsYzEsb3UsS3UsajAsUDJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgbHd0PSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlt6Yy5mb3JDaGlsZChzd3QpLHpjXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksY3d0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltSYSxsd3QsejAsUmNdfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKTtmdW5jdGlvbiB1d3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gZHd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5ncm91''@;'; put 'put ''cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaHd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLmdyb3VwU2VhcmNoLGgpfHwoZi5ncm91cFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx1d3QsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMTApKDUsZHd0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3Ro''@;'; put 'put ''PjApfX1mdW5jdGlvbiBmd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2''@;'; put 'put ''KSxHdCgyLCJjbHItaWNvbiIsMTcpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1MZSgpO1RyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gcHd0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoc2koMCksZ3QoMSxmd3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGd3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxPZSgyLCIgTG9hZGlu''@;'; put 'put ''Zy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG13dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxPZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRk''@;'; put 'put ''IiwyNSkoMTEsImkiKSxPZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDgpLHdyKGEuZ3JvdXBOYW1lKSxmZSg0KSx3cihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIHZ3dChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8g''@;'; put 'put ''TWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24geXd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksT2UoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxPZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxPZSg5LCJD''@;'; put 'put ''UkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksT2UoMTIsIlVQREFURUQiKSxoZSgpKCksbGkoKSl9ZnVuY3Rpb24gYnd0KGMsbCl7MSZjJiYoc2koMCksZGUoMSwidGQiLDMxKSgyLCJiIiksT2UoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksT2UoNiwi''@;'; put 'put ''RElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLE9lKDksIlVTRVIgTkFNRSIpLGhlKCkoKSxsaSgpKX1mdW5jdGlvbiBfd3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLE9lKDIpLGhlKCksZGUoMywidGQiLDMyKSxPZSg0KSxoZSgpLGRlKDUsInRk''@;'; put 'put ''IiwzMiksT2UoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLE9lKDgpLGhlKCksbGkoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFU''@;'; put 'put ''RUQpfX1mdW5jdGlvbiB3d3QoYyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ZCIsMzIpLE9lKDIpLGhlKCksZGUoMywidGQiLDMyKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksT2UoNiksaGUoKSxsaSgpKSwyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7ZmUoMiksd3IoYS5JRCksZmUo''@;'; put 'put ''Miksd3IoYS5ESVNQTEFZTkFNRSksZmUoMiksd3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9uIEN3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxfd3QsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsd3d0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQsZD1MZSg0KTt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLHhlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBl''@;'; put 'put ''LlNhc2pzKX19ZnVuY3Rpb24gU3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyx5d3QsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LGJ3dCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsQ3d0LDMs''@;'; put 'put ''MywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgzKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMikseGUoIm5nRm9yT2YiLGEuZ3JvdXBN''@;'; put 'put ''ZW1iZXJzKX19ZnVuY3Rpb24gTXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxPZSgyKSxoZSgpLGd0KDMsdnd0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsU3d0LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSxEcigi''@;'; put 'put ''TUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiB4d3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIE1lbWJlcnMg''@;'; put 'put ''UHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEV3dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMykoMSwidGQiLDMyKSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSx3''@;'; put 'put ''cihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBUd3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxPZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxFd3QsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKDMpO2ZlKDUpLERyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIEF3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLHh3dCwyLDAsImg1''@;'; put 'put ''Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LFR3dCw4LDIsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoMiksd3IoYS5ncm91cE5hbWUpLGZlKCkseGUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJD''@;'; put 'put ''b3VudCl9fWZ1bmN0aW9uIGt3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsbXd0LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUsTXd0LDYsMywiZGl2Iiw2KSg2LEF3dCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgp''@;'; put 'put ''KCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzVml5YSl9fWxldCB0OGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIi''@;'; put 'put ''LHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5T''@;'; put 'put ''ZXJ2ZXJUeXBlPUIwLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5''@;'; put 'put ''YT0hMCl9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBh''@;'; put 'put ''cmFtcy51cmkpLEtuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUtuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9S24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUtuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBh''@;'; put 'put ''cnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxLbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1Ymxp''@;'; put 'put ''Yy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsS24udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0''@;'; put 'put ''aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVy''@;'; put 'put ''cz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklE''@;'; put 'put ''OmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5''@;'; put 'put ''Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09''@;'; put 'put ''ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0u''@;'; put 'put ''R1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5''@;'; put 'put ''T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksS24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFj''@;'; put 'put ''ZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRp''@;'; put 'put ''ZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdS''@;'; put 'put ''T1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxl''@;'; put 'put ''bmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBO''@;'; put 'put ''QU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoQnMpLEdlKFN1KSxHZShMcyksR2UoZmgpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFy''@;'; put 'put ''czo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJ''@;'; put 'put ''ZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2si''@;'; put 'put ''LDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwi''@;'; put 'put ''Y2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1kYXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxl''@;'; put 'put ''IiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIs''@;'; put 'put ''aHd0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxwd3QsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsZ3d0LDMsMCwiZGl2Iiw1KSg2LGt3dCw4LDMsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLGguZ3JvdXBzKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0Zvck9mIixoLmdyb3VwcyksZmUoMikseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5ncm91cE1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltucyx5YSxjMSxxbCxubCwkcyxFaCxQZCxIbCxaMSxpNCxyNF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKTtmdW5jdGlvbiBEd3QoKXt9ZnVuY3Rpb24gYXRlKGMpe3JldHVybiBudWxsPT1jP0R3dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9uIG44ZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShj''@;'; put 'put ''KX1mdW5jdGlvbiBSd3QoKXtyZXR1cm5bXX1mdW5jdGlvbiByOGUoYyl7cmV0dXJuIG51bGw9PWM/Und0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVuY3Rpb24gaThlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1''@;'; put 'put ''bmN0aW9uIGE4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIFB3dD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBId3QoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgVnd0PUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rp''@;'; put 'put ''b24gQnd0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gbzhlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIGROKGMsbCl7dGhpcy5vd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFj''@;'; put 'put ''ZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIFl3dChjLGwsYSxkLGgsZil7Zm9yKHZhciBNLHY9MCxJPWwubGVuZ3RoLEc9Zi5sZW5ndGg7djxHOysrdikoTT1sW3ZdKT8oTS5fX2RhdGFfXz1mW3ZdLGRbdl09TSk6YVt2XT1uZXcg''@;'; put 'put ''ZE4oYyxmW3ZdKTtmb3IoO3Y8STsrK3YpKE09bFt2XSkmJihoW3ZdPU0pfWZ1bmN0aW9uIEd3dChjLGwsYSxkLGgsZix2KXt2YXIgTSxJLEVlLEc9bmV3IE1hcCxpZT1sLmxlbmd0aCx1ZT1mLmxlbmd0aCx5ZT1uZXcgQXJyYXkoaWUpO2ZvcihNPTA7TTxpZTsrK00pKEk9bFtNXSkmJih5ZVtN''@;'; put 'put ''XT1FZT12LmNhbGwoSSxJLl9fZGF0YV9fLE0sbCkrIiIsRy5oYXMoRWUpP2hbTV09STpHLnNldChFZSxJKSk7Zm9yKE09MDtNPHVlOysrTSlFZT12LmNhbGwoYyxmW01dLE0sZikrIiIsKEk9Ry5nZXQoRWUpKT8oZFtNXT1JLEkuX19kYXRhX189ZltNXSxHLmRlbGV0ZShFZSkpOmFbTV09bmV3''@;'; put 'put ''IGROKGMsZltNXSk7Zm9yKE09MDtNPGllOysrTSkoST1sW01dKSYmRy5nZXQoeWVbTV0pPT09SSYmKGhbTV09SSl9ZnVuY3Rpb24gJHd0KGMpe3JldHVybiBjLl9fZGF0YV9ffWZ1bmN0aW9uIHF3dChjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9jOkFycmF5LmZy''@;'; put 'put ''b20oYyl9ZnVuY3Rpb24gbkN0KGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfWROLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZE4sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0saW5zZXJ0QmVm''@;'; put 'put ''b3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoYyl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3Bh''@;'; put 'put ''cmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIG90ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgczhlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvdGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0''@;'; put 'put ''cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBoTihjKXt2YXIgbD1jKz0iIixhPWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5z''@;'; put 'put ''bGljZShhKzEpKSxzOGUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOnM4ZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIGNDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gdUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0''@;'; put 'put ''cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gZEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gaEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1''@;'; put 'put ''bmN0aW9uIGZDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gcEN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0aW9uIGw4ZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQu''@;'; put 'put ''ZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gbUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9uIHZDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0''@;'; put 'put ''eShjLGwsYSl9fWZ1bmN0aW9uIHlDdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBFdyhjLGwpe3Jl''@;'; put 'put ''dHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fGw4ZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBfQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIHdDdChjLGwpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gQ0N0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGM4ZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9''@;'; put 'put ''ZnVuY3Rpb24gc3RlKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IHU4ZShjKX1mdW5jdGlvbiB1OGUoYyl7dGhpcy5fbm9kZT1jLHRoaXMuX25hbWVzPWM4ZShjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGQ4ZShjLGwpe2Zvcih2YXIgYT1zdGUoYyksZD0tMSxoPWwu''@;'; put 'put ''bGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBoOGUoYyxsKXtmb3IodmFyIGE9c3RlKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rpb24gTUN0KGMpe3JldHVybiBmdW5jdGlvbigpe2Q4ZSh0aGlzLGMpfX1mdW5jdGlvbiB4Q3QoYyl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKCl7aDhlKHRoaXMsYyl9fWZ1bmN0aW9uIEVDdChjLGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9kOGU6aDhlKSh0aGlzLGMpfX1mdW5jdGlvbiBBQ3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGtDdChjKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIERDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX1mdW5jdGlvbiBSQ3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBMQ3Qo''@;'; put 'put ''Yyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gT0N0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBGQ3QoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBh''@;'; put 'put ''cmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTkN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gQkN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBs''@;'; put 'put ''PXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09b3RlJiZsLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1vdGU/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIGpDdChjKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBmOGUoYyl7dmFyIGw9aE4oYyk7cmV0dXJuKGwubG9jYWw/akN0OkJDdCkobCl9ZnVuY3Rpb24gVUN0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gV0N0KCl7dmFy''@;'; put 'put ''IGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR0N0KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiAkQ3QoKXt2YXIg''@;'; put 'put ''Yz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIFFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5s''@;'; put 'put ''ZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rp''@;'; put 'put ''b24gZVN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIFhDdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciB2PTAsTT1kLmxlbmd0aDt2PE07Kyt2KWlmKChoPWRb''@;'; put 'put ''dl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1s''@;'; put 'put ''KTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gcDhlKGMsbCxhKXt2YXIgZD1sOGUoYyksaD1kLkN1c3RvbUV2''@;'; put 'put ''ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNo''@;'; put 'put ''RXZlbnQoaCl9ZnVuY3Rpb24gblN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHA4ZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIHJTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwOGUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dThlLnByb3RvdHlwZT17YWRk''@;'; put 'put ''OmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7''@;'; put 'put ''bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIGx0ZT1bbnVsbF07ZnVuY3Rp''@;'; put 'put ''b24gaWQoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gZzhlKCl7cmV0dXJuIG5ldyBpZChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGx0ZSl9aWQucHJvdG90eXBlPWc4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlkLHNlbGVjdDpmdW5jdGlvbiBJ''@;'; put 'put ''d3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgSSxHLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1uZXcgQXJyYXkodiksaWU9MDtpZTx2OysraWUp''@;'; put 'put ''KEk9ZltpZV0pJiYoRz1jLmNhbGwoSSxJLl9fZGF0YV9fLGllLGYpKSYmKCJfX2RhdGFfXyJpbiBJJiYoRy5fX2RhdGFfXz1JLl9fZGF0YV9fKSxNW2llXT1HKTtyZXR1cm4gbmV3IGlkKGQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiBPd3QoYyl7Yz0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgYz9mdW5jdGlvbiBMd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG44ZShjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShjKTpyOGUoYyk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9W10saD1bXSxmPTA7ZjxhOysrZilmb3IodmFyIEksdj1sW2ZdLE09''@;'; put 'put ''di5sZW5ndGgsRz0wO0c8TTsrK0cpKEk9dltHXSkmJihkLnB1c2goYy5jYWxsKEksSS5fX2RhdGFfXyxHLHYpKSxoLnB1c2goSSkpO3JldHVybiBuZXcgaWQoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gTnd0KGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP0h3dDpmdW5jdGlvbiBG''@;'; put 'put ''d3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFB3dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmE4ZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiB6d3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/Qnd0OmZ1bmN0aW9u''@;'; put 'put ''IGp3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVnd0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6YThlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBVd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWk4ZShjKSk7Zm9yKHZhciBsPXRoaXMu''@;'; put 'put ''X2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgSSxmPWxbaF0sdj1mLmxlbmd0aCxNPWRbaF09W10sRz0wO0c8djsrK0cpKEk9ZltHXSkmJmMuY2FsbChJLEkuX19kYXRhX18sRyxmKSYmTS5wdXNoKEkpO3JldHVybiBuZXcgaWQoZCx0aGlzLl9w''@;'; put 'put ''YXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBLd3QoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCR3dCk7dmFyIGE9bD9Hd3Q6WXd0LGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gV3d0''@;'; put 'put ''KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPW5ldyBBcnJheShmKSxJPW5ldyBBcnJheShmKSxHPTA7RzxmOysrRyl7dmFyIGllPWRbR10sdWU9aFtHXSx5ZT11ZS5sZW5ndGgsRWU9cXd0KGMuY2FsbChpZSxp''@;'; put 'put ''ZSYmaWUuX19kYXRhX18sRyxkKSksamU9RWUubGVuZ3RoLHFlPU1bR109bmV3IEFycmF5KGplKSxydD12W0ddPW5ldyBBcnJheShqZSk7YShpZSx1ZSxxZSxydCxJW0ddPW5ldyBBcnJheSh5ZSksRWUsbCk7Zm9yKHZhciB2bixDbixkdD0wLEp0PTA7ZHQ8amU7KytkdClpZih2bj1xZVtkdF0p''@;'; put 'put ''e2ZvcihkdD49SnQmJihKdD1kdCsxKTshKENuPXJ0W0p0XSkmJisrSnQ8amU7KTt2bi5fbmV4dD1Dbnx8bnVsbH19cmV0dXJuKHY9bmV3IGlkKHYsZCkpLl9lbnRlcj1NLHYuX2V4aXQ9SSx2fSxlbnRlcjpmdW5jdGlvbiBad3QoKXtyZXR1cm4gbmV3IGlkKHRoaXMuX2VudGVyfHx0aGlzLl9n''@;'; put 'put ''cm91cHMubWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gWHd0KCl7cmV0dXJuIG5ldyBpZCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG84ZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gSnd0KGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlz''@;'; put 'put ''LGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5v''@;'; put 'put ''cmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIFF3dChjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5fZ3JvdXBzLGg9YS5sZW5ndGgsdj1NYXRoLm1pbihoLGQubGVuZ3RoKSxNPW5ldyBBcnJheShoKSxJPTA7STx2OysrSSlmb3IodmFy''@;'; put 'put ''IEVlLEc9YVtJXSxpZT1kW0ldLHVlPUcubGVuZ3RoLHllPU1bSV09bmV3IEFycmF5KHVlKSxqZT0wO2plPHVlOysramUpKEVlPUdbamVdfHxpZVtqZV0pJiYoeWVbamVdPUVlKTtmb3IoO0k8aDsrK0kpTVtJXT1hW0ldO3JldHVybiBuZXcgaWQoTSx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9u''@;'; put 'put ''OmZ1bmN0aW9uIG9TdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBlQ3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsrK2w8YTspZm9yKHZhciB2LGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKHY9ZFtoXSkmJihmJiY0XnYuY29tcGFy''@;'; put 'put ''ZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodixmKSxmPXYpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIHRDdChjKXtmdW5jdGlvbiBsKHVlLHllKXtyZXR1cm4gdWUmJnllP2ModWUuX19kYXRhX18seWUuX19kYXRhX18pOiF1ZS0heWV9Y3x8KGM9''@;'; put 'put ''bkN0KTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgRyx2PWFbZl0sTT12Lmxlbmd0aCxJPWhbZl09bmV3IEFycmF5KE0pLGllPTA7aWU8TTsrK2llKShHPXZbaWVdKSYmKElbaWVdPUcpO0kuc29ydChsKX1yZXR1''@;'; put 'put ''cm4gbmV3IGlkKGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiByQ3QoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIGlDdCgpe3JldHVybiBBcnJheS5m''@;'; put 'put ''cm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIGFDdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgdj1kW2hdO2lmKHYpcmV0dXJuIHZ9cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rp''@;'; put 'put ''b24gb0N0KCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gc0N0KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIGxDdChjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZh''@;'; put 'put ''ciBNLGg9bFthXSxmPTAsdj1oLmxlbmd0aDtmPHY7KytmKShNPWhbZl0pJiZjLmNhbGwoTSxNLl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gZ0N0KGMsbCl7dmFyIGE9aE4oYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4g''@;'; put 'put ''YS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9hLmxvY2FsP3VDdDpjQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD9wQ3Q6ZkN0OmEubG9jYWw/aEN0OmRDdCkoYSxsKSl9LHN0''@;'; put 'put ''eWxlOmZ1bmN0aW9uIGJDdChjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/bUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP3lDdDp2Q3QpKGMsbCxhPz8iIikpOkV3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBTQ3QoYyxsKXtyZXR1''@;'; put 'put ''cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9fQ3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/Q0N0OndDdCkoYyxsKSk6dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24gVEN0KGMsbCl7dmFyIGE9YzhlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9y''@;'; put 'put ''KHZhciBkPXN0ZSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9FQ3Q6bD9NQ3Q6eEN0KShhLGwpKX0sdGV4dDpmdW5jdGlvbiBJQ3Qo''@;'; put 'put ''Yyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/QUN0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9EQ3Q6a0N0KShjKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gUEN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChu''@;'; put 'put ''dWxsPT1jP1JDdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/T0N0OkxDdCkoYykpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gSEN0KCl7cmV0dXJuIHRoaXMuZWFjaChGQ3QpfSxsb3dlcjpmdW5jdGlvbiBWQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKE5DdCl9LGFwcGVuZDpm''@;'; put 'put ''dW5jdGlvbiB6Q3QoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpmOGUoYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBaQ3QoYyxsKXt2YXIgYT0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgYz9jOmY4ZShjKSxkPW51bGw9PWw/VUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6YXRlKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIFlDdCgpe3JldHVybiB0aGlzLmVhY2goV0N0KX0sY2xvbmU6ZnVuY3Rpb24gS0N0KGMpe3JldHVybiB0aGlzLnNlbGVjdChjPyRDdDpHQ3QpfSxkYXR1bTpmdW5jdGlvbiBxQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/''@;'; put 'put ''dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiB0U3QoYyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlvbiBKQ3QoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhP''@;'; put 'put ''ZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKE09bD9lU3Q6UUN0LGg9MDtoPGY7KytoKXRoaXMuZWFjaChNKGRbaF0sbCxhKSk7''@;'; put 'put ''cmV0dXJuIHRoaXN9dmFyIE09dGhpcy5ub2RlKCkuX19vbjtpZihNKWZvcih2YXIgaWUsST0wLEc9TS5sZW5ndGg7STxHOysrSSlmb3IoaD0wLGllPU1bSV07aDxmOysraClpZigodj1kW2hdKS50eXBlPT09aWUudHlwZSYmdi5uYW1lPT09aWUubmFtZSlyZXR1cm4gaWUudmFsdWV9LGRpc3Bh''@;'; put 'put ''dGNoOmZ1bmN0aW9uIGlTdChjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP3JTdDpuU3QpKGMsbCkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiphU3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciB2''@;'; put 'put ''LGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKSh2PWRbaF0pJiYoeWllbGQgdil9fTtjb25zdCBxOT1nOGU7ZnVuY3Rpb24gY3RlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgaWQoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5kb2N1bWVudEVs''@;'; put 'put ''ZW1lbnRdKTpuZXcgaWQoW244ZShjKV0sbHRlKX1mdW5jdGlvbiB3cyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IGlkKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgaWQoW1tjXV0sbHRlKX12YXIgc1N0PXt2YWx1''@;'; put 'put ''ZTooKT0+e319O2Z1bmN0aW9uIG04ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3VtZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119''@;'; put 'put ''cmV0dXJuIG5ldyBmTihhKX1mdW5jdGlvbiBmTihjKXt0aGlzLl89Y31mdW5jdGlvbiBjU3QoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiB2OGUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5s''@;'; put 'put ''ZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPXNTdCxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31yZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9Zk4ucHJvdG90eXBlPW04ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9y''@;'; put 'put ''OmZOLG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBsU3QoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgw''@;'; put 'put ''LGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6ZH19KX0oYysiIixhKSxmPS0xLHY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8djspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09djhlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09djhlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0''@;'; put 'put ''aGlzfWZvcig7KytmPHY7KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1jU3QoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigpe3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgZk4oYyl9LGNhbGw6ZnVuY3Rp''@;'; put 'put ''b24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2Zvcihk''@;'; put 'put ''PTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxo''@;'; put 'put ''PTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IHV0ZT1tOGU7dmFyIHBOLEFBLFR3PTAsRUE9MCxUQT0wLHk4ZT0xZTMsZ049MCxYOT0wLG1OPTAsa0E9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1h''@;'; put 'put ''bmNlOkRhdGUsYjhlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIGR0ZSgpe3JldHVybiBYOXx8''@;'; put 'put ''KGI4ZSh1U3QpLFg5PWtBLm5vdygpK21OKX1mdW5jdGlvbiB1U3QoKXtYOT0wfWZ1bmN0aW9uIHZOKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBfOGUoYyxsLGEpe3ZhciBkPW5ldyB2TjtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9u''@;'; put 'put ''IHc4ZSgpe1g5PShnTj1rQS5ub3coKSkrbU4sVHc9RUE9MDt0cnl7IWZ1bmN0aW9uIGRTdCgpe2R0ZSgpLCsrVHc7Zm9yKHZhciBsLGM9cE47YzspKGw9WDktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVHd9KCl9ZmluYWxseXtUdz0wLGZ1bmN0aW9u''@;'; put 'put ''IGZTdCgpe2Zvcih2YXIgYyxhLGw9cE4sZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOnBOPWEpO0FBPWMsaHRlKGQpfSgpLFg5PTB9fWZ1bmN0aW9uIGhTdCgpe3ZhciBj''@;'; put 'put ''PWtBLm5vdygpLGw9Yy1nTjtsPnk4ZSYmKG1OLT1sLGdOPWMpfWZ1bmN0aW9uIGh0ZShjKXtUd3x8KEVBJiYoRUE9Y2xlYXJUaW1lb3V0KEVBKSksYy1YOT4yND8oYzwxLzAmJihFQT1zZXRUaW1lb3V0KHc4ZSxjLWtBLm5vdygpLW1OKSksVEEmJihUQT1jbGVhckludGVydmFsKFRBKSkpOihU''@;'; put 'put ''QXx8KGdOPWtBLm5vdygpLFRBPXNldEludGVydmFsKGhTdCx5OGUpKSxUdz0xLGI4ZSh3OGUpKSl9ZnVuY3Rpb24geU4oYyxsLGEpe3ZhciBkPW5ldyB2TjtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9dk4ucHJvdG90eXBlPV84ZS5w''@;'; put 'put ''cm90b3R5cGU9e2NvbnN0cnVjdG9yOnZOLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9kdGUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMu''@;'; put 'put ''X25leHQmJkFBIT09dGhpcyYmKEFBP0FBLl9uZXh0PXRoaXM6cE49dGhpcyxBQT10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLGh0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxodGUoKSl9fTt2YXIgcFN0PXV0''@;'; put 'put ''ZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxnU3Q9W10sQzhlPTAscHRlPTIsYk49MyxndGU9NSxfTj02O2Z1bmN0aW9uIHdOKGMsbCxhLGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNpdGlvbjtpZih2KXtpZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307''@;'; put 'put ''IWZ1bmN0aW9uIG1TdChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KEcpe3ZhciBpZSx1ZSx5ZSxFZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gSSgpO2ZvcihpZSBpbiBkKWlmKChFZT1kW2llXSkubmFtZT09PWEubmFtZSl7aWYoRWUuc3RhdGU9PT1iTilyZXR1cm4g''@;'; put 'put ''eU4odik7ND09PUVlLnN0YXRlPyhFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiaW50ZXJydXB0IixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW2llXSk6K2llPGwmJihFZS5zdGF0ZT1fTixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgi''@;'; put 'put ''Y2FuY2VsIixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW2llXSl9aWYoeU4oZnVuY3Rpb24oKXthLnN0YXRlPT09Yk4mJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KE0sYS5kZWxheSxhLnRpbWUpLE0oRykpfSksYS5zdGF0ZT1wdGUsYS5vbi5jYWxsKCJzdGFy''@;'; put 'put ''dCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PXB0ZSl7Zm9yKGEuc3RhdGU9Yk4saD1uZXcgQXJyYXkoeWU9YS50d2Vlbi5sZW5ndGgpLGllPTAsdWU9LTE7aWU8eWU7KytpZSkoRWU9YS50d2VlbltpZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxh''@;'; put 'put ''Lmdyb3VwKSkmJihoWysrdWVdPUVlKTtoLmxlbmd0aD11ZSsxfX1mdW5jdGlvbiBNKEcpe2Zvcih2YXIgaWU9RzxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGwsRy9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KEkpLGEuc3RhdGU9Z3RlLDEpLHVlPS0xLHllPWgubGVuZ3RoOysrdWU8''@;'; put 'put ''eWU7KWhbdWVdLmNhbGwoYyxpZSk7YS5zdGF0ZT09PWd0ZSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxJKCkpfWZ1bmN0aW9uIEkoKXtmb3IodmFyIEcgaW4gYS5zdGF0ZT1fTixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxl''@;'; put 'put ''dGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9XzhlKGZ1bmN0aW9uIGYoRyl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1HJiZ2KEctYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOnBT''@;'; put 'put ''dCx0d2VlbjpnU3QsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6QzhlfSl9ZnVuY3Rpb24gbXRlKGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPkM4ZSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRl''@;'; put 'put ''OyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIHM0KGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPmJOKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBhfWZ1bmN0aW9uIEMzKGMsbCl7dmFyIGE9Yy5fX3RyYW5zaXRp''@;'; put 'put ''b247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGF9ZnVuY3Rpb24gQ04oYyxsKXt2YXIgZCxoLHYsYT1jLl9fdHJhbnNpdGlvbixmPSEwO2lmKGEpe2Zvcih2IGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSkoZD1hW3ZdKS5u''@;'; put 'put ''YW1lPT09bD8oaD1kLnN0YXRlPnB0ZSYmZC5zdGF0ZTxndGUsZC5zdGF0ZT1fTixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2VsIixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVt2XSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRp''@;'; put 'put ''b259fWZ1bmN0aW9uIGw0KGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciBTTixNOGU9MTgwL01hdGguUEksdnRlPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0''@;'; put 'put ''aW9uIHg4ZShjLGwsYSxkLGgsZil7dmFyIHYsTSxJO3JldHVybih2PU1hdGguc3FydChjKmMrbCpsKSkmJihjLz12LGwvPXYpLChJPWMqYStsKmQpJiYoYS09YypJLGQtPWwqSSksKE09TWF0aC5zcXJ0KGEqYStkKmQpKSYmKGEvPU0sZC89TSxJLz1NKSxjKmQ8bCphJiYoYz0tYyxsPS1sLEk9''@;'; put 'put ''LUksdj0tdikse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSpNOGUsc2tld1g6TWF0aC5hdGFuKEkpKk04ZSxzY2FsZVg6dixzY2FsZVk6TX19ZnVuY3Rpb24gRThlKGMsbCxhLGQpe2Z1bmN0aW9uIGgoRyl7cmV0dXJuIEcubGVuZ3RoP0cucG9wKCkr''@;'; put 'put ''IiAiOiIifXJldHVybiBmdW5jdGlvbihHLGllKXt2YXIgdWU9W10seWU9W107cmV0dXJuIEc9YyhHKSxpZT1jKGllKSxmdW5jdGlvbiBmKEcsaWUsdWUseWUsRWUsamUpe2lmKEchPT11ZXx8aWUhPT15ZSl7dmFyIHFlPUVlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO2plLnB1''@;'; put 'put ''c2goe2k6cWUtNCx4Omw0KEcsdWUpfSx7aTpxZS0yLHg6bDQoaWUseWUpfSl9ZWxzZSh1ZXx8eWUpJiZFZS5wdXNoKCJ0cmFuc2xhdGUoIit1ZStsK3llK2EpfShHLnRyYW5zbGF0ZVgsRy50cmFuc2xhdGVZLGllLnRyYW5zbGF0ZVgsaWUudHJhbnNsYXRlWSx1ZSx5ZSksZnVuY3Rpb24gdihH''@;'; put 'put ''LGllLHVlLHllKXtHIT09aWU/KEctaWU+MTgwP2llKz0zNjA6aWUtRz4xODAmJihHKz0zNjApLHllLnB1c2goe2k6dWUucHVzaChoKHVlKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6bDQoRyxpZSl9KSk6aWUmJnVlLnB1c2goaCh1ZSkrInJvdGF0ZSgiK2llK2QpfShHLnJvdGF0ZSxpZS5yb3Rh''@;'; put 'put ''dGUsdWUseWUpLGZ1bmN0aW9uIE0oRyxpZSx1ZSx5ZSl7RyE9PWllP3llLnB1c2goe2k6dWUucHVzaChoKHVlKSsic2tld1goIixudWxsLGQpLTIseDpsNChHLGllKX0pOmllJiZ1ZS5wdXNoKGgodWUpKyJza2V3WCgiK2llK2QpfShHLnNrZXdYLGllLnNrZXdYLHVlLHllKSxmdW5jdGlvbiBJ''@;'; put 'put ''KEcsaWUsdWUseWUsRWUsamUpe2lmKEchPT11ZXx8aWUhPT15ZSl7dmFyIHFlPUVlLnB1c2goaChFZSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2plLnB1c2goe2k6cWUtNCx4Omw0KEcsdWUpfSx7aTpxZS0yLHg6bDQoaWUseWUpfSl9ZWxzZSgxIT09dWV8fDEhPT15ZSkmJkVlLnB1''@;'; put 'put ''c2goaChFZSkrInNjYWxlKCIrdWUrIiwiK3llKyIpIil9KEcuc2NhbGVYLEcuc2NhbGVZLGllLnNjYWxlWCxpZS5zY2FsZVksdWUseWUpLEc9aWU9bnVsbCxmdW5jdGlvbihFZSl7Zm9yKHZhciBydCxqZT0tMSxxZT15ZS5sZW5ndGg7KytqZTxxZTspdWVbKHJ0PXllW2plXSkuaV09cnQueChF''@;'; put 'put ''ZSk7cmV0dXJuIHVlLmpvaW4oIiIpfX19dmFyIF9TdD1FOGUoZnVuY3Rpb24geVN0KGMpe2NvbnN0IGw9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT92dGU6eDhlKGwuYSxsLmIsbC5j''@;'; put 'put ''LGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksVDhlPUU4ZShmdW5jdGlvbiBiU3QoYyl7cmV0dXJuIG51bGwhPWMmJihTTnx8KFNOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFNOLnNldEF0dHJpYnV0ZSgidHJh''@;'; put 'put ''bnNmb3JtIixjKSxjPVNOLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3g4ZSgoYz1jLm1hdHJpeCkuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKTp2dGV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gd1N0KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1zNCh0aGlz''@;'; put 'put ''LGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxNPShkPWE9ZikubGVuZ3RoO3Y8TTsrK3YpaWYoZFt2XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UodiwxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIENTdChjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9czQodGhpcyxjKSx2PWYudHdlZW47aWYodiE9PWQpe2g9KGQ9dikuc2xpY2UoKTtmb3IodmFyIE09e25hbWU6bCx2YWx1ZTphfSxJPTAsRz1oLmxlbmd0aDtJPEc7KytJKWlmKGhbSV0ubmFtZT09PWwpe2hb''@;'; put 'put ''SV09TTticmVha31JPT09RyYmaC5wdXNoKE0pfWYudHdlZW49aH19ZnVuY3Rpb24geXRlKGMsbCxhKXt2YXIgZD1jLl9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9czQodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0p''@;'; put 'put ''LGZ1bmN0aW9uKGgpe3JldHVybiBDMyhoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiBidGUoYyxsLGEpe2MucHJvdG90eXBlPWwucHJvdG90eXBlPWEsYS5jb25zdHJ1Y3Rvcj1jfWZ1bmN0aW9uIEE4ZShjLGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBs''@;'; put 'put ''KWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBEQSgpe312YXIgTU49MS8uNyxBdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsUkE9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGM0PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1b''@;'; put 'put ''Ky1dP1xcZCspPyklXFxzKiIsTVN0PS9eIyhbMC05YS1mXXszLDh9KSQvLHhTdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtBd30sJHtBd30sJHtBd31cXCkkYCksRVN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2M0fSwke2M0fSwke2M0fVxcKSRgKSxUU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0F3''@;'; put 'put ''fSwke0F3fSwke0F3fSwke1JBfVxcKSRgKSxBU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke2M0fSwke2M0fSwke2M0fSwke1JBfVxcKSRgKSxrU3Q9bmV3IFJlZ0V4cChgXmhzbFxcKCR7UkF9LCR7YzR9LCR7YzR9XFwpJGApLERTdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7UkF9LCR7YzR9LCR7''@;'; put 'put ''YzR9LCR7UkF9XFwpJGApLGs4ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3''@;'; put 'put ''MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Ju''@;'; put 'put ''c2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxk''@;'; put 'put ''YXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJr''@;'; put 'put ''c2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5''@;'; put 'put ''LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdy''@;'; put 'put ''ZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZl''@;'; put 'put ''bmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIz''@;'; put 'put ''LGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3''@;'; put 'put ''NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxt''@;'; put 'put ''ZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlk''@;'; put 'put ''bmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUz''@;'; put 'put ''OTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3Njcz''@;'; put 'put ''LHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEy''@;'; put 'put ''NzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRl''@;'; put 'put ''Z3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEz''@;'; put 'put ''MzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBEOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBJOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2Io''@;'; put 'put ''KX1mdW5jdGlvbiBKOShjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD1NU3QuZXhlYyhjKSk/KGE9bFsxXS5sZW5ndGgsbD1wYXJzZUludChsWzFdLDE2KSw2PT09YT9SOGUobCk6Mz09PWE/bmV3IFFkKGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwy''@;'; put 'put ''NDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT94TihsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUmbCkvMjU1KTo0PT09YT94TihsPj4xMiYxNXxsPj44JjI0MCxsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51bGwpOihsPXhT''@;'; put 'put ''dC5leGVjKGMpKT9uZXcgUWQobFsxXSxsWzJdLGxbM10sMSk6KGw9RVN0LmV4ZWMoYykpP25ldyBRZCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCwxKToobD1UU3QuZXhlYyhjKSk/eE4obFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9QVN0LmV4ZWMoYykpP3hOKDI1NSps''@;'; put 'put ''WzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPWtTdC5leGVjKGMpKT9QOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCwxKToobD1EU3QuZXhlYyhjKSk/UDhlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsbFs0XSk6azhlLmhhc093blByb3BlcnR5KGMpP1I4ZShrOGVb''@;'; put 'put ''Y10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBRZChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFI4ZShjKXtyZXR1cm4gbmV3IFFkKGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYywxKX1mdW5jdGlvbiB4TihjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3IFFkKGMsbCxh''@;'; put 'put ''LGQpfWZ1bmN0aW9uIEVOKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBMU3QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEQXx8KGM9SjkoYykpLGM/bmV3IFFkKChjPWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBRZH0oYyk6bmV3IFFkKGMs''@;'; put 'put ''bCxhLGQ/PzEpfWZ1bmN0aW9uIFFkKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBMOGUoKXtyZXR1cm5gIyR7ZXYodGhpcy5yKX0ke2V2KHRoaXMuZyl9JHtldih0aGlzLmIpfWB9ZnVuY3Rpb24gTzhlKCl7Y29uc3QgYz1U''@;'; put 'put ''Tih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7UTkodGhpcy5yKX0sICR7UTkodGhpcy5nKX0sICR7UTkodGhpcy5iKX0kezE9PT1jPyIpIjpgLCAke2N9KWB9YH1mdW5jdGlvbiBUTihjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgwLE1hdGgubWlu''@;'; put 'put ''KDEsYykpfWZ1bmN0aW9uIFE5KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMpfHwwKSl9ZnVuY3Rpb24gZXYoYyl7cmV0dXJuKChjPVE5KGMpKTwxNj8iMCI6IiIpK2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFA4ZShjLGwsYSxkKXtyZXR1cm4gZDw9MD9j''@;'; put 'put ''PWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IFMzKGMsbCxhLGQpfWZ1bmN0aW9uIEY4ZShjKXtpZihjIGluc3RhbmNlb2YgUzMpcmV0dXJuIG5ldyBTMyhjLmgsYy5zLGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBEQXx8KGM9SjkoYykpLCFjKXJl''@;'; put 'put ''dHVybiBuZXcgUzM7aWYoYyBpbnN0YW5jZW9mIFMzKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRoLm1pbihsLGEsZCksZj1NYXRoLm1heChsLGEsZCksdj1OYU4sTT1mLWgsST0oZitoKS8yO3JldHVybiBNPyh2PWw9PT1mPyhhLWQp''@;'; put 'put ''L00rNiooYTxkKTphPT09Zj8oZC1sKS9NKzI6KGwtYSkvTSs0LE0vPUk8LjU/ZitoOjItZi1oLHYqPTYwKTpNPUk+MCYmSTwxPzA6dixuZXcgUzModixNLEksYy5vcGFjaXR5KX1mdW5jdGlvbiBTMyhjLGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9''@;'; put 'put ''K2R9ZnVuY3Rpb24gSDhlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBBTihjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGN8fDApKX1mdW5jdGlvbiBfdGUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/''@;'; put 'put ''bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIE44ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1cm4oKDEtMypjKzMqZi12KSpsKyg0LTYqZiszKnYpKmErKDErMypjKzMqZi0zKnYpKmQrdipoKS82fWJ0ZShEQSxKOSx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihu''@;'; put 'put ''ZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpEOGUsZm9ybWF0SGV4OkQ4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIElTdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNs''@;'; put 'put ''OmZ1bmN0aW9uIFJTdCgpe3JldHVybiBGOGUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpJOGUsdG9TdHJpbmc6SThlfSksYnRlKFFkLEVOLEE4ZShEQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9NTjpNYXRoLnBvdyhNTixjKSxuZXcgUWQodGhpcy5yKmMsdGhpcy5nKmMs''@;'; put 'put ''dGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFFkKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgUWQoUTkodGhp''@;'; put 'put ''cy5yKSxROSh0aGlzLmcpLFE5KHRoaXMuYiksVE4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0''@;'; put 'put ''aGlzLm9wYWNpdHk8PTF9LGhleDpMOGUsZm9ybWF0SGV4Okw4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIE9TdCgpe3JldHVybmAjJHtldih0aGlzLnIpfSR7ZXYodGhpcy5nKX0ke2V2KHRoaXMuYil9JHtldigyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3Jt''@;'; put 'put ''YXRSZ2I6TzhlLHRvU3RyaW5nOk84ZX0pKSxidGUoUzMsZnVuY3Rpb24gUFN0KGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9GOGUoYyk6bmV3IFMzKGMsbCxhLGQ/PzEpfSxBOGUoREEse2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/TU46TWF0aC5wb3coTU4sYyks''@;'; put 'put ''bmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRo''@;'; put 'put ''aXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgUWQoX3RlKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLF90ZShjLGgsZCksX3RlKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5v''@;'; put 'put ''cGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFMzKEg4ZSh0aGlzLmgpLEFOKHRoaXMucyksQU4odGhpcy5sKSxUTih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYm''@;'; put 'put ''MDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9VE4odGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke0g4ZSh0aGlzLmgpfSwgJHsxMDAqQU4odGhpcy5zKX0lLCAkezEwMCpBTih0aGlzLmwpfSUkezE9PT1jPyIp''@;'; put 'put ''IjpgLCAke2N9KWB9YH19KSk7Y29uc3Qgd3RlPWM9PigpPT5jO2Z1bmN0aW9uIEI4ZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9mdW5jdGlvbiBWOGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTp3dGUoaXNOYU4oYyk/bDpjKX1jb25zdCBrTj1mdW5jdGlv''@;'; put 'put ''biBjKGwpe3ZhciBhPWZ1bmN0aW9uIFZTdChjKXtyZXR1cm4gMT09KGM9K2MpP0I4ZTpmdW5jdGlvbihsLGEpe3JldHVybiBhLWw/ZnVuY3Rpb24gTlN0KGMsbCxhKXtyZXR1cm4gYz1NYXRoLnBvdyhjLGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRo''@;'; put 'put ''LnBvdyhjK2QqbCxhKX19KGwsYSxjKTp3dGUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgdj1hKChoPUVOKGgpKS5yLChmPUVOKGYpKS5yKSxNPWEoaC5nLGYuZyksST1hKGguYixmLmIpLEc9QjhlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihp''@;'; put 'put ''ZSl7cmV0dXJuIGgucj12KGllKSxoLmc9TShpZSksaC5iPUkoaWUpLGgub3BhY2l0eT1HKGllKSxoKyIifX1yZXR1cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0aW9uIGo4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHYsTSxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5''@;'; put 'put ''KGEpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxhOysrdilNPUVOKGxbdl0pLGRbdl09TS5yfHwwLGhbdl09TS5nfHwwLGZbdl09TS5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxNLm9wYWNpdHk9MSxmdW5jdGlvbihJKXtyZXR1cm4gTS5yPWQoSSksTS5nPWgoSSksTS5iPWYo''@;'; put 'put ''SSksTSsiIn19fWo4ZShmdW5jdGlvbiBGU3QoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gTjhlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1m''@;'; put 'put ''LGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLGo4ZShmdW5jdGlvbiBIU3QoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gTjhlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQr''@;'; put 'put ''MSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIEN0ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csU3RlPW5ldyBSZWdFeHAoQ3RlLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHo4ZShjLGwpe3ZhciBkLGgsZixhPUN0ZS5sYXN0SW5kZXg9U3RlLmxhc3RJbmRleD0w''@;'; put 'put ''LHY9LTEsTT1bXSxJPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1DdGUuZXhlYyhjKSkmJihoPVN0ZS5leGVjKGwpKTspKGY9aC5pbmRleCk+YSYmKGY9bC5zbGljZShhLGYpLE1bdl0/TVt2XSs9ZjpNWysrdl09ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9NW3ZdP01bdl0rPWg6TVsrK3ZdPWg6KE1b''@;'; put 'put ''Kyt2XT1udWxsLEkucHVzaCh7aTp2LHg6bDQoZCxoKX0pKSxhPVN0ZS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSxNLmxlbmd0aDwyP0lbMF0/ZnVuY3Rpb24galN0KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4g''@;'; put 'put ''YyhsKSsiIn19KElbMF0ueCk6ZnVuY3Rpb24gQlN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9SS5sZW5ndGgsZnVuY3Rpb24oRyl7Zm9yKHZhciB1ZSxpZT0wO2llPGw7KytpZSlNWyh1ZT1JW2llXSkuaV09dWUueChHKTtyZXR1cm4gTS5qb2luKCIiKX0pfWZ1bmN0''@;'; put 'put ''aW9uIFU4ZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/bDQ6bCBpbnN0YW5jZW9mIEo5P2tOOihhPUo5KGwpKT8obD1hLGtOKTp6OGUpKGMsbCl9ZnVuY3Rpb24gelN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBV''@;'; put 'put ''U3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBaU3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiB2PT09aD9udWxsOnY9''@;'; put 'put ''PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gV1N0KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBZU3Qo''@;'; put 'put ''YyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixJLE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGMpOih2PXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShJPU0rIiIpP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12''@;'; put 'put ''LE0pKX19ZnVuY3Rpb24gR1N0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHYsSSxNPWEodGhpcyk7cmV0dXJuIG51bGw9PU0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMu''@;'; put 'put ''bG9jYWwpKT09PShJPU0rIiIpP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12LE0pKX19ZnVuY3Rpb24gWFN0KGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gcVN0KGMs''@;'; put 'put ''bCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBKU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBLU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gZU10KGMsbCl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7bXRlKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB0TXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe210ZSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIHJNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRp''@;'; put 'put ''b249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBpTXQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRpb249bH19dmFyIGJNdD1xOS5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gWjhlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMu''@;'; put 'put ''c3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBITXQ9MDtmdW5jdGlvbiB1NChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gTXRlKGMpe3JldHVybiBxOSgpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gVzhl''@;'; put 'put ''KCl7cmV0dXJuKytITXR9dmFyIFhnPXE5LnByb3RvdHlwZTt1NC5wcm90b3R5cGU9TXRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dTQsc2VsZWN0OmZ1bmN0aW9uIHZNdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWF0ZShjKSk7Zm9y''@;'; put 'put ''KHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIgaWUsdWUsTT1kW3ZdLEk9TS5sZW5ndGgsRz1mW3ZdPW5ldyBBcnJheShJKSx5ZT0wO3llPEk7Kyt5ZSkoaWU9TVt5ZV0pJiYodWU9Yy5jYWxsKGllLGllLl9fZGF0YV9fLHll''@;'; put 'put ''LE0pKSYmKCJfX2RhdGFfXyJpbiBpZSYmKHVlLl9fZGF0YV9fPWllLl9fZGF0YV9fKSxHW3llXT11ZSx3TihHW3llXSxsLGEseWUsRyxDMyhpZSxhKSkpO3JldHVybiBuZXcgdTQoZix0aGlzLl9wYXJlbnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiB5TXQoYyl7dmFyIGw9dGhpcy5fbmFt''@;'; put 'put ''ZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1yOGUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPVtdLHY9W10sTT0wO008aDsrK00pZm9yKHZhciBpZSxJPWRbTV0sRz1JLmxlbmd0aCx1ZT0wO3VlPEc7Kyt1ZSlpZihpZT1JW3VlXSl7Zm9yKHZh''@;'; put 'put ''ciBFZSx5ZT1jLmNhbGwoaWUsaWUuX19kYXRhX18sdWUsSSksamU9QzMoaWUsYSkscWU9MCxydD15ZS5sZW5ndGg7cWU8cnQ7KytxZSkoRWU9eWVbcWVdKSYmd04oRWUsbCxhLHFlLHllLGplKTtmLnB1c2goeWUpLHYucHVzaChpZSl9cmV0dXJuIG5ldyB1NChmLHYsbCxhKX0sc2VsZWN0Q2hp''@;'; put 'put ''bGQ6WGcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46WGcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIHVNdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9aThlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsr''@;'; put 'put ''K2gpZm9yKHZhciBJLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxHPTA7Rzx2OysrRykoST1mW0ddKSYmYy5jYWxsKEksSS5fX2RhdGFfXyxHLGYpJiZNLnB1c2goSSk7cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9u''@;'; put 'put ''IGRNdChjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSx2PW5ldyBBcnJheShkKSxNPTA7TTxmOysrTSlmb3IodmFyIHllLEk9bFtNXSxHPWFbTV0s''@;'; put 'put ''aWU9SS5sZW5ndGgsdWU9dltNXT1uZXcgQXJyYXkoaWUpLEVlPTA7RWU8aWU7KytFZSkoeWU9SVtFZV18fEdbRWVdKSYmKHVlW0VlXT15ZSk7Zm9yKDtNPGQ7KytNKXZbTV09bFtNXTtyZXR1cm4gbmV3IHU0KHYsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9u''@;'; put 'put ''OmZ1bmN0aW9uIF9NdCgpe3JldHVybiBuZXcgYk10KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBQTXQoKXtmb3IodmFyIGM9dGhpcy5fbmFtZSxsPXRoaXMuX2lkLGE9VzhlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilm''@;'; put 'put ''b3IodmFyIEksdj1kW2ZdLE09di5sZW5ndGgsRz0wO0c8TTsrK0cpaWYoST12W0ddKXt2YXIgaWU9QzMoSSxsKTt3TihJLGMsYSxHLHYse3RpbWU6aWUudGltZStpZS5kZWxheStpZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmllLmR1cmF0aW9uLGVhc2U6aWUuZWFzZX0pfXJldHVybiBu''@;'; put 'put ''ZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6WGcuY2FsbCxub2RlczpYZy5ub2Rlcyxub2RlOlhnLm5vZGUsc2l6ZTpYZy5zaXplLGVtcHR5OlhnLmVtcHR5LGVhY2g6WGcuZWFjaCxvbjpmdW5jdGlvbiBwTXQoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDwyP0MzKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBmTXQoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiBoTXQoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTty''@;'; put 'put ''ZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/bXRlOnM0O3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWYodGhpcyxjKSxNPXYub247TSE9PWQmJihoPShkPU0pLmNvcHkoKSkub24obCxhKSx2Lm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uICRT''@;'; put 'put ''dChjLGwpe3ZhciBhPWhOKGMpLGQ9InRyYW5zZm9ybSI9PT1hP1Q4ZTpVOGU7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/R1N0OllTdCkoYSxkLHl0ZSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD9VU3Q6elN0KShhKToo''@;'; put 'put ''YS5sb2NhbD9XU3Q6WlN0KShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gUVN0KGMsbCl7dmFyIGE9ImF0dHIuIitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lm''@;'; put 'put ''KCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD1oTihjKTtyZXR1cm4gdGhpcy50d2VlbihhLChkLmxvY2FsP1hTdDpKU3QpKGQsbCkpfSxzdHlsZTpmdW5jdGlvbiB4TXQoYyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP19TdDpVOGU7cmV0dXJuIG51''@;'; put 'put ''bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gd010KGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPUV3KHRoaXMsYyksdj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxFdyh0aGlzLGMpKTtyZXR1cm4gZj09PXY/bnVsbDpmPT09YSYmdj09PWQ/aDpo''@;'; put 'put ''PWwoYT1mLGQ9dil9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxaOGUoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIFNNdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyksTT1hKHRoaXMpLEk9TSsi''@;'; put 'put ''IjtyZXR1cm4gbnVsbD09TSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksST1NPUV3KHRoaXMsYykpLHY9PT1JP251bGw6dj09PWQmJkk9PT1oP2Y6KGg9SSxmPWwoZD12LE0pKX19KGMsZCx5dGUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBNTXQoYyxsKXt2YXIg''@;'; put 'put ''YSxkLGgsTSxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgST1zNCh0aGlzLGMpLEc9SS5vbixpZT1udWxsPT1JLnZhbHVlW2ZdP018fChNPVo4ZShsKSk6dm9pZCAwOyhHIT09YXx8aCE9PWllKSYmKGQ9KGE9RykuY29weSgpKS5vbih2LGg9aWUpLEkub249''@;'; put 'put ''ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBDTXQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5''@;'; put 'put ''bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIEFNdChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiBUTXQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciB2PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0aW9uIEVNdChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsdixhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBJTXQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIERNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fSh5dGUodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIGtNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShu''@;'; put 'put ''dWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIE9NdChjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gTE10KGMpe3ZhciBsLGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIFJNdChjKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIG1NdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBnTXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhp''@;'; put 'put ''cy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBTU3QoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIp''@;'; put 'put ''e2Zvcih2YXIgdixkPUMzKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKHY9ZFtoXSkubmFtZT09PWMpcmV0dXJuIHYudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD93U3Q6Q1N0KShhLGMsbCkpfSxkZWxheTpmdW5jdGlv''@;'; put 'put ''biBuTXQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9lTXQ6dE10KShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gYU10KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/ck10OmlNdCkobCxjKSk6QzModGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gc010KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChm''@;'; put 'put ''dW5jdGlvbiBvTXQoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7czQodGhpcyxjKS5lYXNlPWx9fShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBjTXQoYyl7aWYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gbE10KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3M0KHRoaXMsYykuZWFz''@;'; put 'put ''ZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gRk10KCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLHYpe3ZhciBNPXt2YWx1ZTp2fSxJPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIEc9czQodGhpcyxkKSxpZT1HLm9uO2llIT09YyYmKChsPShjPWllKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goTSksbC5fLmludGVycnVwdC5wdXNoKE0pLGwuXy5lbmQucHVzaChJKSksRy5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpYZ1tTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdfTt2YXIgVk10PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBOTXQoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBCTXQoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8''@;'; put 'put ''IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBub3QgZm91bmRgKTtyZXR1cm4gYX1xOS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIHZTdChjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Q04odGhpcyxjKX0p''@;'; put 'put ''fSxxOS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBqTXQoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgdTQ/KGw9Yy5faWQsYz1jLl9uYW1lKToobD1XOGUoKSwoYT1WTXQpLnRpbWU9ZHRlKCksYz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVu''@;'; put 'put ''Z3RoLGY9MDtmPGg7KytmKWZvcih2YXIgSSx2PWRbZl0sTT12Lmxlbmd0aCxHPTA7RzxNOysrRykoST12W0ddKSYmd04oSSxjLGwsRyx2LGF8fEJNdChJLGwpKTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgek10PVtudWxsXTtjb25zdCB4dGU9e2NhcHR1cmU6ITAs''@;'; put 'put ''cGFzc2l2ZTohMX07ZnVuY3Rpb24gRXRlKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFk4ZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpKzEvYykvMn1jb25zdCBLTXQ9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rpb24gaChmLHYp''@;'; put 'put ''e3ZhciBydCxwdCxNPWZbMF0sST1mWzFdLEc9ZlsyXSx5ZT12WzJdLEVlPXZbMF0tTSxqZT12WzFdLUkscWU9RWUqRWUramUqamU7aWYocWU8MWUtMTIpcHQ9TWF0aC5sb2coeWUvRykvbCxydD1mdW5jdGlvbihNbil7cmV0dXJuW00rTW4qRWUsSStNbipqZSxHKk1hdGguZXhwKGwqTW4qcHQp''@;'; put 'put ''XX07ZWxzZXt2YXIgZHQ9TWF0aC5zcXJ0KHFlKSxKdD0oeWUqeWUtRypHK2QqcWUpLygyKkcqYSpkdCksdm49KHllKnllLUcqRy1kKnFlKS8oMip5ZSphKmR0KSxDbj1NYXRoLmxvZyhNYXRoLnNxcnQoSnQqSnQrMSktSnQpLHRuPU1hdGgubG9nKE1hdGguc3FydCh2bip2bisxKS12bik7cHQ9''@;'; put 'put ''KHRuLUNuKS9sLHJ0PWZ1bmN0aW9uKE1uKXt2YXIgQ3I9TW4qcHQsR3I9WThlKENuKSxtcj1HLyhhKmR0KSooR3IqZnVuY3Rpb24gJE10KGMpe3JldHVybigoYz1NYXRoLmV4cCgyKmMpKS0xKS8oYysxKX0obCpDcitDbiktZnVuY3Rpb24gR010KGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkt''@;'; put 'put ''MS9jKS8yfShDbikpO3JldHVybltNK21yKkVlLEkrbXIqamUsRypHci9ZOGUobCpDcitDbildfX1yZXR1cm4gcnQuZHVyYXRpb249MWUzKnB0KmwvTWF0aC5TUVJUMixydH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIHY9TWF0aC5tYXgoLjAwMSwrZiksTT12KnY7cmV0dXJuIGModixN''@;'; put 'put ''LE0qTSl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiB0dihjLGwpe2lmKGM9ZnVuY3Rpb24gcU10KGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25lclNWR0VsZW1l''@;'; put 'put ''bnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91bmRpbmdDbGll''@;'; put 'put ''bnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBETj1jPT4oKT0+YztmdW5jdGlvbiBYTXQoYyx7''@;'; put 'put ''c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZTohMCxjb25maWd1''@;'; put 'put ''cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIEpnKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9bCx0aGlzLnk9''@;'; put 'put ''YX1KZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpnLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlzOm5ldyBKZyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IEpnKHRoaXMuayx0aGlz''@;'; put 'put ''LngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMpe3JldHVybiBj''@;'; put 'put ''KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMu''@;'; put 'put ''eSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0''@;'; put 'put ''aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIElOPW5ldyBKZygxLDAsMCk7ZnVuY3Rpb24gUk4oYyl7Zm9yKDshYy5fX3pv''@;'; put 'put ''b207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiBJTjtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24gVHRlKGMpe2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gTEEoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rp''@;'; put 'put ''b24gSk10KGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24gUU10KCl7dmFyIGM9dGhpcztyZXR1cm4gYyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tb''@;'; put 'put ''KGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtjLndpZHRoLmJhc2VWYWwudmFsdWUsYy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltbMCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIEc4ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9fem9vbXx8SU59ZnVuY3Rpb24gZXh0KGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVsdGFNb2RlPy4wNTpjLmRlbHRhTW9kZT8xOi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gdHh0KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9u''@;'; put 'put ''dG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIG54dChjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFbMF1bMF0saD1jLmludmVydFgobFsxXVswXSktYVsxXVswXSxmPWMuaW52ZXJ0WShsWzBdWzFdKS1hWzBdWzFdLHY9Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1bMV07cmV0dXJu''@;'; put 'put ''IGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksdj5mPyhmK3YpLzI6TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgoMCx2KSl9ZnVuY3Rpb24gJDhlKGMpe3ZhciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQiPT1hP2wudGV4''@;'; put 'put ''dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFyIGQ9Yy5ub2RlKCkuYXR0cmlidXRlcztpZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYudmFsdWV9dmFy''@;'; put 'put ''IGllLEk9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKEkmJjAhPUkuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgRz1JLmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDpHLmUseTpHLmZ9LGwuc2NhbGU9Ry5hfWlmKCJlbGxpcHNlIj09YSYmKGwuY2VudGVyPXt4''@;'; put 'put ''OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIHVlPShpZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMF19KSx5ZT1pZS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBK''@;'; put 'put ''dC5zcGxpdCgiLCIpWzFdfSksRWU9TWF0aC5taW4uYXBwbHkobnVsbCx1ZSksamU9TWF0aC5tYXguYXBwbHkobnVsbCx1ZSkscWU9TWF0aC5taW4uYXBwbHkobnVsbCx5ZSkscnQ9TWF0aC5tYXguYXBwbHkobnVsbCx5ZSk7bC5iYm94PXt4OkVlLHk6cWUsd2lkdGg6amUtRWUsaGVpZ2h0OnJ0''@;'; put 'put ''LXFlfSxsLmNlbnRlcj17eDooRWUramUpLzIseToocWUrcnQpLzJ9fSJwYXRoIj09YSYmKChpZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksdWU9aWUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVswXX0pLHllPWllLm1hcChmdW5jdGlvbihHbil7''@;'; put 'put ''cmV0dXJuK0duLnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLHVlKSxqZT1NYXRoLm1heC5hcHBseShudWxsLHVlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLHllKSxydD1NYXRoLm1heC5hcHBseShudWxsLHllKSxsLmJib3g9e3g6RWUseTpxZSx3aWR0aDpqZS1FZSxo''@;'; put 'put ''ZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4OihFZStqZSkvMix5OihxZStydCkvMn0sbC50b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09YT9sLnRleHQ9''@;'; put 'put ''Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBudihjKXt2YXIgbD0kOGUoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10sY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1udih3cyh0aGlzKSk7ZC5wYXJlbnQ9''@;'; put 'put ''bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIEF0ZShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRO''@;'; put 'put ''UygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBrdGUoYyl7dmFyIGw9QXRlKGMpLGE9d3MobCksZD1jLmF0dHJpYnV0ZXM7Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlzKGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uIEs4ZShjLGwpe3ZhciBh''@;'; put 'put ''PXdzKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9a3RlKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIER0ZShjLGwpeyFmdW5jdGlvbiBpeHQoYyxsKXtjLmRhdHVtKGwpLGMu''@;'; put 'put ''ZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksY3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oZCxoKXtEdGUod3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBPQShjLGw9MCl7dmFyIGE9d3ModGhpcyksaD1jLmF0dHJpYnV0ZXMs''@;'; put 'put ''Zj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBNPWZbdl0sST1NLm5hbWU7aWYoInhtbG5zIiE9SS5zcGxpdCgiOiIpWzBdJiZNLm5hbWVzcGFjZVVSSSl7dmFyIEc9TS5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtJPUdbRy5sZW5ndGgt''@;'; put 'put ''MV0rIjoiK0l9SSBpbiBofHwoaFtJXT1udWxsKX1mb3IodmFyIHVlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cih1ZSxoW3VlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBheHQoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGls''@;'; put 'put ''ZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3JldHVybiB2LnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih2KXtyZXR1cm4gQXRlKHYpfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1lcmdlKGEp''@;'; put 'put ''O3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbih2KXt2YXIgTT12LnRhZztudWxsPT1mW01dJiYoZltNXT0wKTt2YXIgST1mW01dKys7T0EuY2FsbCh0aGlzLHYsSSl9KX0oYSxsKX1mdW5jdGlvbiBxOGUoYyxsKXt2YXIgdixhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxlbmd0aCk6''@;'; put 'put ''MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8ZDsrK3YpaFt2XT1MTihjW3ZdLGxbdl0pO2Zvcig7djxhOysrdilmW3ZdPWxbdl07cmV0dXJuIGZ1bmN0aW9uKE0pe2Zvcih2PTA7djxkOysrdilmW3ZdPWhbdl0oTSk7cmV0dXJuIGZ9fWZ1bmN0aW9uIG94dChjLGwp''@;'; put 'put ''e3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gc3h0KGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSksKG51bGw9''@;'; put 'put ''PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1MTihjW2hdLGxbaF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIGx4dChjLGwpe2x8fChsPVtdKTt2YXIgaCxhPWM/TWF0''@;'; put 'put ''aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBMTihjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJib29sZWFu''@;'; put 'put ''Ij09PWE/d3RlKGwpOigibnVtYmVyIj09PWE/bDQ6InN0cmluZyI9PT1hPyhkPUo5KGwpKT8obD1kLGtOKTp6OGU6bCBpbnN0YW5jZW9mIEo5P2tOOmwgaW5zdGFuY2VvZiBEYXRlP294dDpmdW5jdGlvbiBjeHQoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShjIGluc3RhbmNl''@;'; put 'put ''b2YgRGF0YVZpZXcpfShsKT9seHQ6QXJyYXkuaXNBcnJheShsKT9xOGU6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGwudG9TdHJpbmd8fGlzTmFOKGwpP3N4dDpsNCkoYyxsKX1mdW5jdGlvbiBYOGUoKXt2YXIgYz10aGlzLGQ9d3ModGhpcy5fc2Vs''@;'; put 'put ''ZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhpcy5fem9vbVNlbGVjdGlvbj1kO3ZhciBoPWZ1bmN0aW9uIHJ4dCgpe3ZhciBpZSx1ZSx5ZSxjPUpNdCxsPVFNdCxhPW54dCxkPWV4dCxoPXR4dCxmPVswLDEvMF0sdj1bWy0x''@;'; put 'put ''LzAsLTEvMF0sWzEvMCwxLzBdXSxNPTI1MCxJPUtNdCxHPXV0ZSgic3RhcnQiLCJ6b29tIiwiZW5kIiksRWU9NTAwLGplPTE1MCxxZT0wLHJ0PTEwO2Z1bmN0aW9uIHB0KE9uKXtPbi5wcm9wZXJ0eSgiX196b29tIixHOGUpLm9uKCJ3aGVlbC56b29tIixDcix7cGFzc2l2ZTohMX0pLm9uKCJt''@;'; put 'put ''b3VzZWRvd24uem9vbSIsR3IpLm9uKCJkYmxjbGljay56b29tIixtcikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEduKS5vbigidG91Y2htb3ZlLnpvb20iLGFpKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixfaSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hs''@;'; put 'put ''aWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChPbix6cil7cmV0dXJuKHpyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSx6cikpKT09PU9uLms/T246bmV3IEpnKHpyLE9uLngsT24ueSl9ZnVuY3Rpb24gSnQoT24senIsSm4pe3ZhciBJcj16clswXS1KblswXSpP''@;'; put 'put ''bi5rLCRyPXpyWzFdLUpuWzFdKk9uLms7cmV0dXJuIElyPT09T24ueCYmJHI9PT1Pbi55P09uOm5ldyBKZyhPbi5rLElyLCRyKX1mdW5jdGlvbiB2bihPbil7cmV0dXJuWygrT25bMF1bMF0rICtPblsxXVswXSkvMiwoK09uWzBdWzFdKyArT25bMV1bMV0pLzJdfWZ1bmN0aW9uIENuKE9uLHpy''@;'; put 'put ''LEpuLElyKXtPbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoSXIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5lbmQoKX0pLnR3ZWVuKCJ6b29t''@;'; put 'put ''IixmdW5jdGlvbigpe3ZhciAkcj10aGlzLHdpPWFyZ3VtZW50cyxlYT10bigkcix3aSkuZXZlbnQoSXIpLGZhPWwuYXBwbHkoJHIsd2kpLHZ0PW51bGw9PUpuP3ZuKGZhKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkoJHIsd2kpOkpuLE50PU1hdGgubWF4KGZhWzFdWzBdLWZhWzBd''@;'; put 'put ''WzBdLGZhWzFdWzFdLWZhWzBdWzFdKSxIdD0kci5fX3pvb20sSG49ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KCRyLHdpKTp6cix0cj1JKEh0LmludmVydCh2dCkuY29uY2F0KE50L0h0LmspLEhuLmludmVydCh2dCkuY29uY2F0KE50L0huLmspKTtyZXR1cm4gZnVuY3Rpb24oYXIp''@;'; put 'put ''e2lmKDE9PT1hcilhcj1IbjtlbHNle3ZhciBIcj10cihhcikscXI9TnQvSHJbMl07YXI9bmV3IEpnKHFyLHZ0WzBdLUhyWzBdKnFyLHZ0WzFdLUhyWzFdKnFyKX1lYS56b29tKG51bGwsYXIpfX0pfWZ1bmN0aW9uIHRuKE9uLHpyLEpuKXtyZXR1cm4hSm4mJk9uLl9fem9vbWluZ3x8bmV3IE1u''@;'; put 'put ''KE9uLHpyKX1mdW5jdGlvbiBNbihPbix6cil7dGhpcy50aGF0PU9uLHRoaXMuYXJncz16cix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KE9uLHpyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBDcihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cykpe3ZhciBKbj10bih0aGlzLHpyKS5ldmVudChPbiksSXI9dGhpcy5fX3pvb20sJHI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLElyLmsqTWF0aC5wb3coMixkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSx3aT10dihPbik7aWYoSm4ud2hlZWwpKEpuLm1vdXNlWzBd''@;'; put 'put ''WzBdIT09d2lbMF18fEpuLm1vdXNlWzBdWzFdIT09d2lbMV0pJiYoSm4ubW91c2VbMV09SXIuaW52ZXJ0KEpuLm1vdXNlWzBdPXdpKSksY2xlYXJUaW1lb3V0KEpuLndoZWVsKTtlbHNle2lmKElyLms9PT0kcilyZXR1cm47Sm4ubW91c2U9W3dpLElyLmludmVydCh3aSldLENOKHRoaXMpLEpu''@;'; put 'put ''LnN0YXJ0KCl9TEEoT24pLEpuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gZWEoKXtKbi53aGVlbD1udWxsLEpuLmVuZCgpfSxqZSksSm4uem9vbSgibW91c2UiLGEoSnQoZHQoSXIsJHIpLEpuLm1vdXNlWzBdLEpuLm1vdXNlWzFdKSxKbi5leHRlbnQsdikpfX1mdW5jdGlvbiBHcihPbiwu''@;'; put 'put ''Li56cil7aWYoIXllJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPU9uLmN1cnJlbnRUYXJnZXQsSXI9dG4odGhpcyx6ciwhMCkuZXZlbnQoT24pLCRyPXdzKE9uLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gdnQoSHQpe2lmKExBKEh0KSwhSXIubW92ZWQpe3Zh''@;'; put 'put ''ciBIbj1IdC5jbGllbnRYLWVhLHRyPUh0LmNsaWVudFktZmE7SXIubW92ZWQ9SG4qSG4rdHIqdHI+cWV9SXIuZXZlbnQoSHQpLnpvb20oIm1vdXNlIixhKEp0KElyLnRoYXQuX196b29tLElyLm1vdXNlWzBdPXR2KEh0LEpuKSxJci5tb3VzZVsxXSksSXIuZXh0ZW50LHYpKX0sITApLm9uKCJt''@;'; put 'put ''b3VzZXVwLnpvb20iLGZ1bmN0aW9uIE50KEh0KXskci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxmdW5jdGlvbiBXTXQoYyxsKXt2YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7bCYmKGQub24o''@;'; put 'put ''ImNsaWNrLmRyYWciLEV0ZSx4dGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVsZXRl''@;'; put 'put ''IGEuX19ub3NlbGVjdCl9KEh0LnZpZXcsSXIubW92ZWQpLExBKEh0KSxJci5ldmVudChIdCkuZW5kKCl9LCEwKSx3aT10dihPbixKbiksZWE9T24uY2xpZW50WCxmYT1Pbi5jbGllbnRZOyhmdW5jdGlvbiBaTXQoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT13cyhjKS5v''@;'; put 'put ''bigiZHJhZ3N0YXJ0LmRyYWciLEV0ZSx4dGUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsRXRlLHh0ZSk6KGwuX19ub3NlbGVjdD1sLnN0eWxlLk1velVzZXJTZWxlY3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShPbi52aWV3KSxUdGUoT24p''@;'; put 'put ''LElyLm1vdXNlPVt3aSx0aGlzLl9fem9vbS5pbnZlcnQod2kpXSxDTih0aGlzKSxJci5zdGFydCgpfX1mdW5jdGlvbiBtcihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10aGlzLl9fem9vbSxJcj10dihPbi5jaGFuZ2VkVG91Y2hlcz9Pbi5jaGFuZ2VkVG91''@;'; put 'put ''Y2hlc1swXTpPbix0aGlzKSwkcj1Kbi5pbnZlcnQoSXIpLGVhPWEoSnQoZHQoSm4sSm4uayooT24uc2hpZnRLZXk/LjU6MikpLElyLCRyKSxsLmFwcGx5KHRoaXMsenIpLHYpO0xBKE9uKSxNPjA/d3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwoQ24sZWEsSXIsT24pOndz''@;'; put 'put ''KHRoaXMpLmNhbGwocHQudHJhbnNmb3JtLGVhLElyLE9uKX19ZnVuY3Rpb24gR24oT24sLi4uenIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgd2ksZWEsZmEsdnQsSm49T24udG91Y2hlcyxJcj1Kbi5sZW5ndGgsJHI9dG4odGhpcyx6cixPbi5jaGFuZ2VkVG91Y2hlcy5sZW5n''@;'; put 'put ''dGg9PT1JcikuZXZlbnQoT24pO2ZvcihUdGUoT24pLGVhPTA7ZWE8SXI7KytlYSl2dD1bdnQ9dHYoZmE9Sm5bZWFdLHRoaXMpLHRoaXMuX196b29tLmludmVydCh2dCksZmEuaWRlbnRpZmllcl0sJHIudG91Y2gwPyEkci50b3VjaDEmJiRyLnRvdWNoMFsyXSE9PXZ0WzJdJiYoJHIudG91Y2gx''@;'; put 'put ''PXZ0LCRyLnRhcHM9MCk6KCRyLnRvdWNoMD12dCx3aT0hMCwkci50YXBzPTErISFpZSk7aWUmJihpZT1jbGVhclRpbWVvdXQoaWUpKSx3aSYmKCRyLnRhcHM8MiYmKHVlPXZ0WzBdLGllPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZT1udWxsfSxFZSkpLENOKHRoaXMpLCRyLnN0YXJ0KCkpfX1m''@;'; put 'put ''dW5jdGlvbiBhaShPbiwuLi56cil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSxlYSxmYSx2dCxKbj10bih0aGlzLHpyKS5ldmVudChPbiksSXI9T24uY2hhbmdlZFRvdWNoZXMsJHI9SXIubGVuZ3RoO2ZvcihMQShPbiksd2k9MDt3aTwkcjsrK3dpKWZhPXR2KGVhPUlyW3dpXSx0aGlzKSxK''@;'; put 'put ''bi50b3VjaDAmJkpuLnRvdWNoMFsyXT09PWVhLmlkZW50aWZpZXI/Sm4udG91Y2gwWzBdPWZhOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09ZWEuaWRlbnRpZmllciYmKEpuLnRvdWNoMVswXT1mYSk7aWYoZWE9Sm4udGhhdC5fX3pvb20sSm4udG91Y2gxKXt2YXIgTnQ9Sm4udG91Y2gwWzBd''@;'; put 'put ''LEh0PUpuLnRvdWNoMFsxXSxIbj1Kbi50b3VjaDFbMF0sdHI9Sm4udG91Y2gxWzFdLGFyPShhcj1IblswXS1OdFswXSkqYXIrKGFyPUhuWzFdLU50WzFdKSphcixIcj0oSHI9dHJbMF0tSHRbMF0pKkhyKyhIcj10clsxXS1IdFsxXSkqSHI7ZWE9ZHQoZWEsTWF0aC5zcXJ0KGFyL0hyKSksZmE9''@;'; put 'put ''WyhOdFswXStIblswXSkvMiwoTnRbMV0rSG5bMV0pLzJdLHZ0PVsoSHRbMF0rdHJbMF0pLzIsKEh0WzFdK3RyWzFdKS8yXX1lbHNle2lmKCFKbi50b3VjaDApcmV0dXJuO2ZhPUpuLnRvdWNoMFswXSx2dD1Kbi50b3VjaDBbMV19Sm4uem9vbSgidG91Y2giLGEoSnQoZWEsZmEsdnQpLEpuLmV4''@;'; put 'put ''dGVudCx2KSl9fWZ1bmN0aW9uIF9pKE9uLC4uLnpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLGVhLEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxJcj1Pbi5jaGFuZ2VkVG91Y2hlcywkcj1Jci5sZW5ndGg7Zm9yKFR0ZShPbikseWUmJmNsZWFyVGltZW91dCh5ZSkseWU9c2V0VGltZW91''@;'; put 'put ''dChmdW5jdGlvbigpe3llPW51bGx9LEVlKSx3aT0wO3dpPCRyOysrd2kpZWE9SXJbd2ldLEpuLnRvdWNoMCYmSm4udG91Y2gwWzJdPT09ZWEuaWRlbnRpZmllcj9kZWxldGUgSm4udG91Y2gwOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09ZWEuaWRlbnRpZmllciYmZGVsZXRlIEpuLnRvdWNo''@;'; put 'put ''MTtpZihKbi50b3VjaDEmJiFKbi50b3VjaDAmJihKbi50b3VjaDA9Sm4udG91Y2gxLGRlbGV0ZSBKbi50b3VjaDEpLEpuLnRvdWNoMClKbi50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KEpuLnRvdWNoMFswXSk7ZWxzZSBpZihKbi5lbmQoKSwyPT09Sm4udGFwcyYmKGVhPXR2KGVhLHRo''@;'; put 'put ''aXMpLE1hdGguaHlwb3QodWVbMF0tZWFbMF0sdWVbMV0tZWFbMV0pPHJ0KSl7dmFyIGZhPXdzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7ZmEmJmZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwdC50cmFuc2Zvcm09ZnVuY3Rpb24oT24senIsSm4sSXIpe3ZhciAkcj1Pbi5z''@;'; put 'put ''ZWxlY3Rpb24/T24uc2VsZWN0aW9uKCk6T247JHIucHJvcGVydHkoIl9fem9vbSIsRzhlKSxPbiE9PSRyP0NuKE9uLHpyLEpuLElyKTokci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KElyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyKS5lbmQoKX0pfSxwdC5zY2FsZUJ5PWZ1bmN0aW9uKE9uLHpyLEpuLElyKXtwdC5zY2FsZVRvKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyk6enIpfSxKbixJcil9LHB0LnNjYWxlVG89ZnVuY3Rpb24oT24senIsSm4sSXIpe3B0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3ZhciAkcj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3aT10aGlzLl9fem9vbSxlYT1udWxsPT1Kbj92bigkcik6ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbixmYT13aS5pbnZlcnQoZWEpLHZ0PSJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enI7cmV0dXJuIGEoSnQoZHQod2ksdnQpLGVhLGZhKSwkcix2KX0sSm4sSXIpfSxwdC50cmFuc2xhdGVCeT1m''@;'; put 'put ''dW5jdGlvbihPbix6cixKbixJcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIsImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKTpKbiksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsSXIpfSxwdC50cmFuc2xhdGVUbz1mdW5jdGlvbihPbix6cixKbixJciwkcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyIHdpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVhPXRoaXMuX196b29t''@;'; put 'put ''LGZhPW51bGw9PUlyP3ZuKHdpKToiZnVuY3Rpb24iPT10eXBlb2YgSXI/SXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOklyO3JldHVybiBhKElOLnRyYW5zbGF0ZShmYVswXSxmYVsxXSkuc2NhbGUoZWEuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj8tenIuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpOi16ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/LUpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotSm4pLHdpLHYpfSxJciwkcil9LE1uLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oT24pe3JldHVybiBPbiYmKHRoaXMuc291cmNlRXZlbnQ9T24pLHRoaXN9LHN0YXJ0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKE9uLHpyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PU9uJiYodGhpcy5tb3VzZVsxXT16ci5pbnZlcnQodGhp''@;'; put 'put ''cy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMFsxXT16ci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PU9uJiYodGhpcy50b3VjaDFbMV09enIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9f''@;'; put 'put ''em9vbT16cix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oT24pe3ZhciB6cj13cyh0aGlzLnRoYXQpLmRh''@;'; put 'put ''dHVtKCk7Ry5jYWxsKE9uLHRoaXMudGhhdCxuZXcgWE10KE9uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpwdCx0eXBlOk9uLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOkd9KSx6cil9fSxwdC53aGVlbERlbHRhPWZ1bmN0aW9uKE9uKXtyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oK09uKSxwdCk6ZH0scHQuZmlsdGVyPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246RE4oISFPbikscHQpOmN9LHB0LnRvdWNoYWJsZT1m''@;'; put 'put ''dW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOkROKCEhT24pLHB0KTpofSxwdC5leHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9PbjpETihbWytPblsw''@;'; put 'put ''XVswXSwrT25bMF1bMV1dLFsrT25bMV1bMF0sK09uWzFdWzFdXV0pLHB0KTpsfSxwdC5zY2FsZUV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K09uWzBdLGZbMV09K09uWzFdLHB0KTpbZlswXSxmWzFdXX0scHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0''@;'; put 'put ''aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rT25bMF1bMF0sdlsxXVswXT0rT25bMV1bMF0sdlswXVsxXT0rT25bMF1bMV0sdlsxXVsxXT0rT25bMV1bMV0scHQpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHB0LmNvbnN0cmFpbj1mdW5j''@;'; put 'put ''dGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9T24scHQpOmF9LHB0LmR1cmF0aW9uPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rT24scHQpOk19LHB0LmludGVycG9sYXRlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST1P''@;'; put 'put ''bixwdCk6SX0scHQub249ZnVuY3Rpb24oKXt2YXIgT249Ry5vbi5hcHBseShHLGFyZ3VtZW50cyk7cmV0dXJuIE9uPT09Rz9wdDpPbn0scHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHFlPShPbj0rT24pKk9uLHB0KTpNYXRoLnNxcnQocWUp''@;'; put 'put ''fSxwdC50YXBEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJ0PStPbixwdCk6cnR9LHB0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0''@;'; put 'put ''ZW50KS5pbnRlcnBvbGF0ZShMTikub24oInpvb20iLGZ1bmN0aW9uIGwodil7d3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPXdz''@;'; put 'put ''KGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fFJ0ZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09Uk4oZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gSXRlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhp''@;'; put 'put ''cy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1STih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYuc2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2Fs''@;'; put 'put ''ZShoKX1mdW5jdGlvbiBSdGUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLEl0ZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3Jp''@;'; put 'put ''Z2luYWxUcmFuc2Zvcm09SU4udHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIG14dChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIExOKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gSjhlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1''@;'; put 'put ''dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBROGUoYyl7cmV0dXJuIGMucGFyZW50JiZKOGUoYy5wYXJlbnQpfWZ1bmN0aW9uIGU3ZShjKXt2YXIgbD10aGlzLl90cmFuc2l0''@;'; put 'put ''aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMm''@;'; put 'put ''Jm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEk9dGhpczt2YXIgdWU9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciB5ZT10aGlzLl9qb2JzO2lmKEkuX2FjdGl2ZSlyZXR1cm4geWUucHVzaChudWxsKSx0aGlzO3VlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9u''@;'; put 'put ''KDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7SS5fYWN0aXZlPSExLDAhPXllLmxlbmd0aCYmKHllLnNoaWZ0KCksSS5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmdWUudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7SS5fZGlzcGF0Y2guY2FsbCgidHJhbnNp''@;'; put 'put ''dGlvblN0YXJ0IixJKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7SS5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsSSl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe0kuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEkpLEkuX2Rpc3BhdGNo''@;'; put 'put ''LmNhbGwoImVuZCIsSSksYyYmYy5jYWxsKEkpfSk7dmFyIEVlPXRoaXMuX2RhdGEsamU9dWUuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtFZV0sZnVuY3Rpb24ocWUpe3JldHVybiBxZS5rZXl9KTtyZXR1cm4gamU9amUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKGplKSxmdW5jdGlvbiBp''@;'; put 'put ''ZShxZSl7dmFyIHJ0PXdzKHRoaXMpO2lmKCJzdmciPT1xZS50YWcpe3ZhciBwdD1JLl9vcHRpb25zO2lmKG51bGwhPXB0LndpZHRofHxudWxsIT1wdC5oZWlnaHQpe3ZhciBkdD1wdC53aWR0aCxKdD1wdC5oZWlnaHQ7bnVsbD09ZHQ/ZHQ9NCpxZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2Uo''@;'; put 'put ''InB0IiwiIikvMzoocnQuYXR0cigid2lkdGgiLGR0KSxxZS5hdHRyaWJ1dGVzLndpZHRoPWR0KSxudWxsPT1KdD9KdD00KnFlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigiaGVpZ2h0IixKdCkscWUuYXR0cmlidXRlcy5oZWlnaHQ9SnQpLHB0LmZpdHx8''@;'; put 'put ''KHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApLHFlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypkdC80L3B0LnNjYWxlfSAkezMqSnQvNC9wdC5zY2FsZX1gKX0xIT1wdC5zY2FsZSYmKHB0LmZpdHx8bnVsbD09cHQud2lk''@;'; put 'put ''dGgmJm51bGw9PXB0LmhlaWdodCkmJihkdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxKdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxydC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7ZHQvcHQuc2NhbGV9ICR7SnQvcHQuc2NhbGV9YCkscWUuYXR0cmli''@;'; put 'put ''dXRlcy52aWV3Qm94PWAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKX1NJiZydC5lYWNoKE0pO3ZhciB2bj1xZS50YWcsQ249cWUuYXR0cmlidXRlcyx0bj1ydC5ub2RlKCkuYXR0cmlidXRlcztpZih0bilmb3IodmFyIE1uPTA7TW48dG4ubGVuZ3RoO01uKyspe3ZhciBDcj10''@;'; put 'put ''bltNbl0sR3I9Q3IubmFtZTtpZigieG1sbnMiIT1Hci5zcGxpdCgiOiIpWzBdJiZDci5uYW1lc3BhY2VVUkkpe3ZhciBtcj1Dci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtHcj1tclttci5sZW5ndGgtMV0rIjoiK0dyfUdyIGluIENufHwoQ25bR3JdPW51bGwpfXZhciBhaT0hMSxfaT0hMTtp''@;'; put 'put ''ZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZxZS5hbHRlcm5hdGl2ZU9sZCYmKF9pPSEwKSwoInBvbHlnb24iPT12bnx8ImVsbGlwc2UiPT12bikmJnFlLmFsdGVybmF0aXZlTmV3JiYoYWk9ITApLCJwb2x5Z29uIj09dGhp''@;'; put 'put ''cy5ub2RlTmFtZSYmInBvbHlnb24iPT12biYmcWUuYWx0ZXJuYXRpdmVPbGQpe3ZhciBPbj0kOGUocnQpO2lmKCFmKXt2YXIgSm49T24uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KElyPXFlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09Sm4mJihh''@;'; put 'put ''aT0hMSxfaT0hMSl9fWlmKF9pKXt2YXIgZWE9SzhlKHJ0LHFlLmFsdGVybmF0aXZlT2xkKTtlYS5kYXRhKFtxZV0sZnVuY3Rpb24oKXtyZXR1cm4gcWUua2V5fSkscnQ9ZWF9YWkmJih2bj0icGF0aCIsQ249cWUuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIHZ0PXJ0O2lmKGwmJih2''@;'; put 'put ''dD12dC50cmFuc2l0aW9uKGwpLGEmJnZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLHZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVu''@;'; put 'put ''Y3Rpb24oWm4pe3dzKHRoaXMpLmF0dHIoInN0eWxlIixabiYmWm4uYXR0cmlidXRlcyYmWm4uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT12biYmcWUub2Zmc2V0KXt2YXIgSHQ9cWUudG90YWxMZW5ndGg7cnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsSHQrIiAiK0h0''@;'; put 'put ''KS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3FlLm9mZnNldC54KyIsIitxZS5vZmZzZXQueSsiKSIpLENuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsQ24udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsdnQuYXR0cigic3Ryb2tl''@;'; put 'put ''LWRhc2hvZmZzZXQiLENuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLENuLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigic3Ryb2tl''@;'; put 'put ''LWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9PXZuJiZROGUocWUpJiZxZS5vZmZzZXQmJiJwYXRoIj09cWUucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIHRyPXdzKHJ0Lm5v''@;'; put 'put ''ZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksYXI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksSHI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgpLHFyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoLTEp''@;'; put 'put ''LG9uPTE4MCpNYXRoLmF0YW4yKEhyLnktcXIueSxIci54LXFyLngpL01hdGguUEksYm49YXIueC1Ici54K3FlLm9mZnNldC54LHBuPWFyLnktSHIueStxZS5vZmZzZXQueTtydC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitibisiLCIrcG4rIikiKSx2dC5hdHRyVHdlZW4oInRyYW5z''@;'; put 'put ''Zm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oWm4pe3ZhciBzcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCpabiksTnI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgqWm4rMSksTXI9MTgwKk1hdGguYXRhbjIoTnIueS1z''@;'; put 'put ''ci55LE5yLngtc3IueCkvTWF0aC5QSS1vbjtyZXR1cm4idHJhbnNsYXRlKCIrKGJuPXNyLngtSHIueCtxZS5vZmZzZXQueCooMS1abikpKyIsIisocG49c3IueS1Ici55K3FlLm9mZnNldC55KigxLVpuKSkrIikgcm90YXRlKCIrTXIrIiAiK0hyLngrIiAiK0hyLnkrIikifX0pLm9uKCJzdGFy''@;'; put 'put ''dCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe3dzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgcHI9ZCYmbCYmInBhdGgiPT12biYmbnVsbCE9cnQuYXR0cigiZCIpO2Zvcih2YXIgJG4gb2YgT2JqZWN0''@;'; put 'put ''LmtleXMoQ24pKXt2YXIgZHI9Q25bJG5dO2lmKHByJiYiZCI9PSRuKXt2YXIgSXI7KElyPShxZS5hbHRlcm5hdGl2ZU9sZHx8cWUpLnBvaW50cykmJnZ0LmF0dHJUd2VlbigiZCIsbXh0KElyLGRyKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09JG4mJnFlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBV''@;'; put 'put ''cj12dC5vbigiZW5kIik7dnQub24oInN0YXJ0IixmdW5jdGlvbigpe0kuX3pvb21CZWhhdmlvciYmdnQudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBabj10aGlzO3JldHVybiBmdW5jdGlvbihzcil7Wm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLFQ4ZShSTihJLl96''@;'; put 'put ''b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxJdGUuY2FsbChJLHJ0KS50b1N0cmluZygpKShzcikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXtVci5jYWxsKHRoaXMpLEkuX3pvb21CZWhhdmlvciYmUnRlLmNhbGwoSSxydCl9KX1lbHNlIEkuX3pvb21CZWhhdmlvciYmKFJ0ZS5j''@;'; put 'put ''YWxsKEkscnQpLGRyPUl0ZS5jYWxsKEkscnQpLnRvU3RyaW5nKCkpO3Z0LmF0dHIoJG4sZHIpfX1haSYmdnQub24oImVuZCIsZnVuY3Rpb24oWm4sc3IsTnIpe0s4ZShlYT13cyh0aGlzKSxabikuZGF0YShbWm5dLGZ1bmN0aW9uKCl7cmV0dXJuIFpuLmtleX0pfSkscWUudGV4dCYmdnQudGV4''@;'; put 'put ''dChxZS50ZXh0KSxmdW5jdGlvbiBHKHFlKXt2YXIgcnQ9cWUuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHFlLm5vZGUoKS5jaGlsZE5vZGVzfSkscHQ9KHJ0PXJ0LmRhdGEoZnVuY3Rpb24odm4pe3JldHVybiB2bi5jaGlsZHJlbn0sZnVuY3Rpb24odm4pe3JldHVybiB2bi5rZXl9KSku''@;'; put 'put ''ZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24odm4pe3ZhciBDbj1BdGUodm4pO3JldHVybiIjdGV4dCI9PXZuLnRhZyYmYSYmKENuLm5vZGVWYWx1ZT12bi50ZXh0KSxDbn0pOyhhfHx2JiZKOGUocWUuZGF0dW0oKSkpJiZwdC5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiIjIj09dm4udGFnWzBd''@;'; put 'put ''P251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24odm4pe3ZhciBDbj13cyh0aGlzKTtmb3IodmFyIHRuIG9mIE9iamVjdC5rZXlzKHZuLmF0dHJpYnV0ZXMpKUNuLmF0dHIodG4sdm4uYXR0cmlidXRlc1t0bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4ic3ZnIj09dm4udGFnfHwiZyI9''@;'; put 'put ''PXZuLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIEp0PXJ0LmV4aXQoKTtNJiZKdC5lYWNoKE0pLGwmJihKdD1KdC50cmFuc2l0aW9uKGwpLGEmJkp0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNp''@;'; put 'put ''dHkiLDApKSxKdD1KdC5yZW1vdmUoKSwocnQ9cHQubWVyZ2UocnQpLm9yZGVyKCkpLmVhY2goaWUpfShydCl9LmNhbGwoamUubm9kZSgpLEVlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJlg4ZS5jYWxsKHRoaXMpLEkuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVu''@;'; put 'put ''ZCIsSSksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfVJOLnByb3RvdHlwZT1KZy5wcm90b3R5cGU7dmFyIE5BLEZ0ZSxTeHQ9QXJyYXlCdWZmZXIsSXU9VWludDhBcnJheSxPTj1VaW50MTZBcnJheSxNeHQ9SW50MTZBcnJh''@;'; put 'put ''eSxQTj1JbnQzMkFycmF5LEx0ZT1mdW5jdGlvbihjLGwsYSl7aWYoSXUucHJvdG90eXBlLnNsaWNlKXJldHVybiBJdS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBJ''@;'; put 'put ''dShhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LFBBPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKEl1LnByb3RvdHlwZS5maWxsKXJldHVybiBJdS5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5n''@;'; put 'put ''dGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LHh4dD1mdW5jdGlvbihjLGwsYSxkKXtpZihJdS5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gSXUucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChu''@;'; put 'put ''dWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sRXh0PVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2gg''@;'; put 'put ''ZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxlMD1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fEV4dFtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsZTApLCFhKXRocm93IGQ7''@;'; put 'put ''cmV0dXJuIGR9LHQ3ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LEF4dD1mdW5jdGlvbihjLGwpe3ZhciBhPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1hJiYyNTM9PWNbM10pe3ZhciBkPWNbNF0s''@;'; put 'put ''aD1kPj41JjEsZj1kPj4yJjEsdj0zJmQsTT1kPj42OzgmZCYmZTAoMCk7dmFyIEk9Ni1oLEc9Mz09dj80OnYsaWU9dDdlKGMsSSxHKSx1ZT1NPzE8PE06aCx5ZT10N2UoYyxJKz1HLHVlKSsoMT09TSYmMjU2KSxFZT15ZTtpZighaCl7dmFyIGplPTE8PDEwKyhjWzVdPj4zKTtFZT1qZSsoamU+''@;'; put 'put ''PjMpKig3JmNbNV0pfUVlPjIxNDUzODY0OTYmJmUwKDEpO3ZhciBxZT1uZXcgSXUoKDE9PWw/eWV8fEVlOmw/MDpFZSkrMTIpO3JldHVybiBxZVswXT0xLHFlWzRdPTQscWVbOF09OCx7YjpJK3VlLHk6MCxsOjAsZDppZSx3OmwmJjEhPWw/bDpxZS5zdWJhcnJheSgxMiksZTpFZSxvOm5ldyBQ''@;'; put 'put ''TihxZS5idWZmZXIsMCwzKSx1OnllLGM6ZixtOk1hdGgubWluKDEzMTA3MixFZSl9fWlmKDI1NDgxODkzPT0oYT4+NHxjWzNdPDwyMCkpcmV0dXJuIGZ1bmN0aW9uKGMsbCl7cmV0dXJuKGNbNF18Y1s1XTw8OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O2UwKDApfSxydj1mdW5jdGlv''@;'; put 'put ''bihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sRkE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZlMCgzKTtmb3IodmFyIGY9MTw8aCx2PWYsTT0tMSxJPS0xLEc9LTEsaWU9Zix1ZT1uZXcgU3h0KDUxMisoZjw8MikpLHll''@;'; put 'put ''PW5ldyBNeHQodWUsMCwyNTYpLEVlPW5ldyBPTih1ZSwwLDI1NiksamU9bmV3IE9OKHVlLDUxMixmKSxxZT01MTIrKGY8PDEpLHJ0PW5ldyBJdSh1ZSxxZSxmKSxwdD1uZXcgSXUodWUscWUrZik7TTwyNTUmJnY+MDspe3ZhciBkdD1ydih2KzEpLEp0PWQ+PjMsdm49KDE8PGR0KzEpLTEsQ249''@;'; put 'put ''KGNbSnRdfGNbSnQrMV08PDh8Y1tKdCsyXTw8MTYpPj4oNyZkKSZ2bix0bj0oMTw8ZHQpLTEsTW49dm4tdi0xLENyPUNuJnRuO2lmKENyPE1uPyhkKz1kdCxDbj1Dcik6KGQrPWR0KzEsQ24+dG4mJihDbi09TW4pKSx5ZVsrK01dPS0tQ24sLTE9PUNuPyh2Kz1DbixydFstLWllXT1NKTp2LT1D''@;'; put 'put ''biwhQ24pZG97dmFyIEdyPWQ+PjM7ST0oY1tHcl18Y1tHcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1JfXdoaWxlKDM9PUkpfShNPjI1NXx8dikmJmUwKDApO2Zvcih2YXIgbXI9MCxHbj0oZj4+MSkrKGY+PjMpKzMsYWk9Zi0xLF9pPTA7X2k8PU07KytfaSl7dmFyIE9uPXllW19pXTtpZihP''@;'; put 'put ''bjwxKUVlW19pXT0tT247ZWxzZSBmb3IoRz0wO0c8T247KytHKXtydFttcl09X2k7ZG97bXI9bXIrR24mYWl9d2hpbGUobXI+PWllKX19Zm9yKG1yJiZlMCgwKSxHPTA7RzxmOysrRyl7dmFyIHpyPUVlW3J0W0ddXSsrLEpuPXB0W0ddPWgtcnYoenIpO2plW0ddPSh6cjw8Sm4pLWZ9cmV0dXJu''@;'; put 'put ''W2QrNz4+Myx7YjpoLHM6cnQsbjpwdCx0OmplfV19LER4dD1GQShuZXcgSXUoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSxJeHQ9RkEobmV3IEl1KFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2''@;'; put 'put ''Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLFJ4dD1GQShuZXcgSXUoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sbjdlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9''@;'; put 'put ''bmV3IFBOKGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxPdGU9bmV3IEl1KG5ldyBQTihbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxMeHQ9bjdlKE90ZSwwKSxQdGU9bmV3IEl1''@;'; put 'put ''KG5ldyBQTihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLE94dD1uN2UoUHRlLDMpLEhBPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLHY9KDE8''@;'; put 'put ''PGEuYiktMSxNPS1hLmI7Znx8ZTAoMCk7Zm9yKHZhciBJPTAsRz1hLmIsaWU9KGQ8PDMpLTgrcnYoZiktRyx1ZT0tMTtpZT5NJiZ1ZTxoOyl7dmFyIHllPWllPj4zO2xbKyt1ZV09YS5zW0k9KEk8PEd8KGNbeWVdfGNbeWUrMV08PDh8Y1t5ZSsyXTw8MTYpPj4oNyZpZSkpJnZdLGllLT1HPWEu''@;'; put 'put ''bltJXX0oaWUhPU18fHVlKzEhPWgpJiZlMCgwKX0sUHh0PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5ndGgrMz4+Mix2PWY8PDEsTT1mK3Y7SEEoYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGYpLGEpLEhBKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNb''@;'; put 'put ''M108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxIQShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KHYsTSksYSksSEEoYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KE0pLGEpfSxGeHQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9''@;'; put 'put ''MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsST0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oUEEoYSxjW2hdLGwueSxsLnkrPU0pLGEpOlBBKG5ldyBJdShNKSxjW2hdKSk7aWYoIShJPmMubGVuZ3RoKSl7aWYoMD09dily''@;'; put 'put ''ZXR1cm4gbC5iPUksYT8oYS5zZXQoYy5zdWJhcnJheShoLEkpLGwueSksbC55Kz1NLGEpOkx0ZShjLGgsSSk7aWYoMj09dil7dmFyIEc9Y1toXSxpZT0zJkcsdWU9Rz4+MiYzLHllPUc+PjQsRWU9MCxqZT0wO2llPDI/MSZ1ZT95ZXw9Y1srK2hdPDw0fCgyJnVlJiZjWysraF08PDEyKTp5ZT1H''@;'; put 'put ''Pj4zOihqZT11ZSx1ZTwyPyh5ZXw9KDYzJmNbKytoXSk8PDQsRWU9Y1toXT4+NnxjWysraF08PDIpOjI9PXVlPyh5ZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLEVlPWNbaF0+PjJ8Y1srK2hdPDw2KTooeWV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsRWU9Y1toXT4+NnxjWysraF08''@;'; put 'put ''PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgcWU9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgSXUobC5tKSxydD1xZS5sZW5ndGgteWU7aWYoMD09aWUpcWUuc2V0KGMuc3ViYXJyYXkoaCxoKz15ZSkscnQpO2Vsc2UgaWYoMT09aWUpUEEocWUsY1toKytdLHJ0KTtlbHNle3ZhciBwdD1s''@;'; put 'put ''Lmg7aWYoMj09aWUpe3ZhciBkdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyBJdSgyOTIpLGY9Y1tsXSx2PWguc3ViYXJyYXkoMCwyNTYpLE09aC5zdWJhcnJheSgyNTYsMjY4KSxJPW5ldyBPTihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgRz1GQShjLGwrMSw2KSx1ZT1H''@;'; put 'put ''WzFdLHllPUdbMF08PDMsRWU9Y1tsKz1mXTtFZXx8ZTAoMCk7Zm9yKHZhciBqZT0wLHFlPTAscnQ9dWUuYixwdD1ydCxkdD0oKytsPDwzKS04K3J2KEVlKTshKChkdC09cnQpPHllKTspe3ZhciBKdD1kdD4+MztpZih2WysrZF09dWUuc1tqZSs9KGNbSnRdfGNbSnQrMV08PDgpPj4oNyZkdCkm''@;'; put 'put ''KDE8PHJ0KS0xXSwoZHQtPXB0KTx5ZSlicmVhazt2WysrZF09dWUuc1txZSs9KGNbSnQ9ZHQ+PjNdfGNbSnQrMV08PDgpPj4oNyZkdCkmKDE8PHB0KS0xXSxydD11ZS5uW2plXSxqZT11ZS50W2plXSxwdD11ZS5uW3FlXSxxZT11ZS50W3FlXX0rK2Q+MjU1JiZlMCgwKX1lbHNle2ZvcihkPWYt''@;'; put 'put ''MTI3O2E8ZDthKz0yKXt2YXIgdm49Y1srK2xdO3ZbYV09dm4+PjQsdlthKzFdPTE1JnZufSsrbH12YXIgQ249MDtmb3IoYT0wO2E8ZDsrK2EpKHRuPXZbYV0pPjExJiZlMCgwKSxDbis9dG4mJjE8PHRuLTE7dmFyIE1uPXJ2KENuKSsxLENyPTE8PE1uLEdyPUNyLUNuO2ZvcihHciZHci0xJiZl''@;'; put 'put ''MCgwKSx2W2QrK109cnYoR3IpKzEsYT0wO2E8ZDsrK2Epe3ZhciB0bjsrK01bdlthXT0odG49dlthXSkmJk1uKzEtdG5dfXZhciBtcj1uZXcgSXUoQ3I8PDEpLEduPW1yLnN1YmFycmF5KDAsQ3IpLGFpPW1yLnN1YmFycmF5KENyKTtmb3IoSVtNbl09MCxhPU1uO2E+MDstLWEpe3ZhciBfaT1J''@;'; put 'put ''W2FdO1BBKGFpLGEsX2ksSVthLTFdPV9pK01bYV0qKDE8PE1uLWEpKX1mb3IoSVswXSE9Q3ImJmUwKDApLGE9MDthPGQ7KythKXt2YXIgT249dlthXTtpZihPbil7dmFyIHpyPUlbT25dO1BBKEduLGEsenIsSVtPbl09enIrKDE8PE1uLU9uKSl9fXJldHVybltsLHtuOmFpLGI6TW4sczpHbn1d''@;'; put 'put ''fShjLGgpO0VlKz1oLShoPWR0WzBdKSxsLmg9cHQ9ZHRbMV19ZWxzZSBwdHx8ZTAoMCk7KGplP1B4dDpIQSkoYy5zdWJhcnJheShoLGgrPUVlKSxxZS5zdWJhcnJheShydCkscHQpfXZhciBKdD1jW2grK107aWYoSnQpezI1NT09SnQ/SnQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOkp0PjEy''@;'; put 'put ''NyYmKEp0PUp0LTEyODw8OHxjW2grK10pO3ZhciB2bj1jW2grK107MyZ2biYmZTAoMCk7Zm9yKHZhciBDbj1bSXh0LFJ4dCxEeHRdLHRuPTI7dG4+LTE7LS10bil7dmFyIE1uPXZuPj4yKyh0bjw8MSkmMztpZigxPT1Nbil7dmFyIENyPW5ldyBJdShbMCwwLGNbaCsrXV0pO0NuW3RuXT17czpD''@;'; put 'put ''ci5zdWJhcnJheSgyLDMpLG46Q3Iuc3ViYXJyYXkoMCwxKSx0Om5ldyBPTihDci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09TW4/KGg9KGQ9RkEoYyxoLDktKDEmdG4pKSlbMF0sQ25bdG5dPWRbMV0pOjM9PU1uJiYobC50fHxlMCgwKSxDblt0bl09bC50W3RuXSl9dmFyIEdyPWwudD1Dbixt''@;'; put 'put ''cj1HclswXSxHbj1HclsxXSxhaT1HclsyXSxfaT1jW0ktMV07X2l8fGUwKDApO3ZhciBPbj0oSTw8MyktOCtydihfaSktYWkuYix6cj1Pbj4+MyxKbj0wLElyPShjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxhaS5iKS0xLCRyPShjW3pyPShPbi09R24uYik+PjNdfGNbenIrMV08PDgp''@;'; put 'put ''Pj4oNyZPbikmKDE8PEduLmIpLTEsd2k9KGNbenI9KE9uLT1tci5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8bXIuYiktMTtmb3IoKytKdDstLUp0Oyl7dmFyIGVhPWFpLnNbSXJdLGZhPWFpLm5bSXJdLHZ0PW1yLnNbd2ldLE50PW1yLm5bd2ldLEh0PUduLnNbJHJdLEhuPUduLm5b''@;'; put 'put ''JHJdLHRyPTE8PEh0LGFyPXRyKygoY1t6cj0oT24tPUh0KT4+M118Y1t6cisxXTw8OHxjW3pyKzJdPDwxNnxjW3pyKzNdPDwyNCk+Pj4oNyZPbikmdHItMSk7enI9KE9uLT1QdGVbdnRdKT4+Mzt2YXIgSHI9T3h0W3Z0XSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYpPj4oNyZPbikm''@;'; put 'put ''KDE8PFB0ZVt2dF0pLTEpO3pyPShPbi09T3RlW2VhXSk+PjM7dmFyIHFyPUx4dFtlYV0rKChjW3pyXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2KT4+KDcmT24pJigxPDxPdGVbZWFdKS0xKTtpZih6cj0oT24tPWZhKT4+MyxJcj1haS50W0lyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikm''@;'; put 'put ''KDE8PGZhKS0xKSx6cj0oT24tPU50KT4+Myx3aT1tci50W3dpXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PE50KS0xKSx6cj0oT24tPUhuKT4+Mywkcj1Hbi50WyRyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEhuKS0xKSxhcj4zKWwub1syXT1sLm9bMV0sbC5v''@;'; put 'put ''WzFdPWwub1swXSxsLm9bMF09YXItPTM7ZWxzZXt2YXIgb249YXItKDAhPXFyKTtvbj8oYXI9Mz09b24/bC5vWzBdLTE6bC5vW29uXSxvbj4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9bMF09YXIpOmFyPWwub1swXX1mb3IodG49MDt0bjxxcjsrK3RuKXFlW0puK3RuXT1x''@;'; put 'put ''ZVtydCt0bl07cnQrPXFyO3ZhciBibj0oSm4rPXFyKS1hcjtpZihibjwwKXt2YXIgcG49LWJuLHByPWwuZStibjtmb3IocG4+SHImJihwbj1IciksdG49MDt0bjxwbjsrK3RuKXFlW0puK3RuXT1sLndbcHIrdG5dO0puKz1wbixIci09cG4sYm49MH1mb3IodG49MDt0bjxIcjsrK3RuKXFlW0pu''@;'; put 'put ''K3RuXT1xZVtibit0bl07Sm4rPUhyfWlmKEpuIT1ydClmb3IoO3J0PHFlLmxlbmd0aDspcWVbSm4rK109cWVbcnQrK107ZWxzZSBKbj1xZS5sZW5ndGg7YT9sLnkrPUpuOnFlPUx0ZShxZSwwLEpuKX1lbHNlIGlmKGEpe2lmKGwueSs9eWUscnQpZm9yKHRuPTA7dG48eWU7Kyt0bilxZVt0bl09''@;'; put 'put ''cWVbcnQrdG5dfWVsc2UgcnQmJihxZT1MdGUocWUscnQpKTtyZXR1cm4gbC5iPUkscWV9ZTAoMil9fSxCeHQ9KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LGZ1bmN0aW9uKGw9e30pe3ZhciBoLGYsamUsZD1sLHY9bmV3IFByb21pc2UoKFplLGx0KT0+e2g9WmUsZj1sdH0pLEk9T2Jq''@;'; put 'put ''ZWN0LmFzc2lnbih7fSxkKSxxZT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHJ0PWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGQsSSksST1udWxsO3ZhciBkdCx0bixNbixDcixtcixHbixfaSxwdD1kLndhc21CaW5hcnksSnQ9ITE7ZnVuY3Rpb24gQ24oWmUs''@;'; put 'put ''bHQpe1plfHxxcihsdCl9ZnVuY3Rpb24gT24oKXt2YXIgWmU9ZHQuYnVmZmVyO2QuSEVBUDg9dG49bmV3IEludDhBcnJheShaZSksZC5IRUFQMTY9Q3I9bmV3IEludDE2QXJyYXkoWmUpLGQuSEVBUFU4PU1uPW5ldyBVaW50OEFycmF5KFplKSxkLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KFpl''@;'; put 'put ''KSxkLkhFQVAzMj1tcj1uZXcgSW50MzJBcnJheShaZSksZC5IRUFQVTMyPUduPW5ldyBVaW50MzJBcnJheShaZSksZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoWmUpLGQuSEVBUEY2ND1faT1uZXcgRmxvYXQ2NEFycmF5KFplKX12YXIgenI9W10sSm49W10sSXI9W10sTnQ9MCxIdD1udWxs''@;'; put 'put ''LEhuPW51bGw7ZnVuY3Rpb24gYXIoWmUpe050Kyt9ZnVuY3Rpb24gSHIoWmUpe2lmKDA9PS0tTnQmJihudWxsIT09SHQmJihjbGVhckludGVydmFsKEh0KSxIdD1udWxsKSxIbikpe3ZhciBsdD1IbjtIbj1udWxsLGx0KCl9fWZ1bmN0aW9uIHFyKFplKXtydChaZT0iQWJvcnRlZCgiK1plKyIp''@;'; put 'put ''IiksSnQ9ITAsWmUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihaZSk7dGhyb3cgZihsdCksbHR9dmFyICRuLGJuPVplPT5aZS5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0''@;'; put 'put ''cmVhbTtiYXNlNjQsIik7ZnVuY3Rpb24gZHIoWmUpe2lmKFplPT0kbiYmcHQpcmV0dXJuIG5ldyBVaW50OEFycmF5KHB0KTtpZihqZSlyZXR1cm4gamUoWmUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBabihaZSxsdCxM''@;'; put 'put ''dCl7cmV0dXJuIGZ1bmN0aW9uIFVyKFplKXtyZXR1cm4gcHQ/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZHIoWmUpKToodm9pZCAwKShaZSkudGhlbihsdD0+bmV3IFVpbnQ4QXJyYXkobHQpLCgpPT5kcihaZSkpfShaZSkudGhlbigkdD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoJHQs''@;'; put 'put ''bHQpKS50aGVuKEx0LCR0PT57cnQoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7JHR9YCkscXIoJHQpfSl9dmFyIFpyLGFhLEJhPXsxNzMwNjQ6KFplLGx0KT0+e3ZhciBMdD12MChaZSksJHQ9djAobHQpO1l0LmNyZWF0ZVBhdGgoIi8iLFFvLmRpcm5hbWUoTHQp''@;'; put 'put ''KSxZdC53cml0ZUZpbGUoUW8uam9pbigiLyIsTHQpLCR0KX19O2NsYXNzIElve25hbWU9IkV4aXRTdGF0dXMiO2NvbnN0cnVjdG9yKGx0KXt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHtsdH0pYCx0aGlzLnN0YXR1cz1sdH19dmFyIFpvPVplPT57Zm9yKDta''@;'; put 'put ''ZS5sZW5ndGg+MDspWmUuc2hpZnQoKShkKX07Y2xhc3MgcHN7Y29uc3RydWN0b3IobHQpe3RoaXMuZXhjUHRyPWx0LHRoaXMucHRyPWx0LTI0fXNldF90eXBlKGx0KXtHblt0aGlzLnB0cis0Pj4yXT1sdH1nZXRfdHlwZSgpe3JldHVybiBHblt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3Rv''@;'; put 'put ''cihsdCl7R25bdGhpcy5wdHIrOD4+Ml09bHR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gR25bdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodChsdCl7dG5bdGhpcy5wdHIrMTJdPWx0PWx0PzE6MH1nZXRfY2F1Z2h0KCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEyXX1zZXRfcmV0aHJvd24obHQp''@;'; put 'put ''e3RuW3RoaXMucHRyKzEzXT1sdD1sdD8xOjB9Z2V0X3JldGhyb3duKCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEzXX1pbml0KGx0LEx0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShsdCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihMdCl9c2V0X2FkanVzdGVkX3B0cihs''@;'; put 'put ''dCl7R25bdGhpcy5wdHIrMTY+PjJdPWx0fWdldF9hZGp1c3RlZF9wdHIoKXtyZXR1cm4gR25bdGhpcy5wdHIrMTY+PjJdfX12YXIgUW89e2lzQWJzOlplPT4iLyI9PT1aZS5jaGFyQXQoMCksc3BsaXRQYXRoOlplPT4vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5b''@;'; put 'put ''Xi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhaZSkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KFplLGx0KT0+e2Zvcih2YXIgTHQ9MCwkdD1aZS5sZW5ndGgtMTskdD49MDskdC0tKXt2YXIgRG49WmVbJHRdOyIuIj09PURuP1plLnNwbGljZSgkdCwxKToiLi4iPT09RG4/KFplLnNwbGljZSgk''@;'; put 'put ''dCwxKSxMdCsrKTpMdCYmKFplLnNwbGljZSgkdCwxKSxMdC0tKX1pZihsdClmb3IoO0x0O0x0LS0pWmUudW5zaGlmdCgiLi4iKTtyZXR1cm4gWmV9LG5vcm1hbGl6ZTpaZT0+e3ZhciBsdD1Rby5pc0FicyhaZSksTHQ9Ii8iPT09WmUuc3Vic3RyKC0xKTtyZXR1cm4hKFplPVFvLm5vcm1hbGl6''@;'; put 'put ''ZUFycmF5KFplLnNwbGl0KCIvIikuZmlsdGVyKCR0PT4hISR0KSwhbHQpLmpvaW4oIi8iKSkmJiFsdCYmKFplPSIuIiksWmUmJkx0JiYoWmUrPSIvIiksKGx0PyIvIjoiIikrWmV9LGRpcm5hbWU6WmU9Pnt2YXIgbHQ9UW8uc3BsaXRQYXRoKFplKSxMdD1sdFswXSwkdD1sdFsxXTtyZXR1cm4g''@;'; put 'put ''THR8fCR0PygkdCYmKCR0PSR0LnN1YnN0cigwLCR0Lmxlbmd0aC0xKSksTHQrJHQpOiIuIn0sYmFzZW5hbWU6WmU9PntpZigiLyI9PT1aZSlyZXR1cm4iLyI7dmFyIGx0PShaZT0oWmU9UW8ubm9ybWFsaXplKFplKSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJu''@;'; put 'put ''LTE9PT1sdD9aZTpaZS5zdWJzdHIobHQrMSl9LGpvaW46KC4uLlplKT0+UW8ubm9ybWFsaXplKFplLmpvaW4oIi8iKSksam9pbjI6KFplLGx0KT0+UW8ubm9ybWFsaXplKFplKyIvIitsdCl9LGFkPVplPT4oYWQ9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBaZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaZSk7cXIoImluaXRSYW5kb21EZXZpY2UiKX0pKCkpKFplKSxVcz17cmVzb2x2ZTooLi4uWmUpPT57Zm9yKHZhciBsdD0iIixMdD0hMSwkdD1aZS5sZW5ndGgtMTskdD49LTEm''@;'; put 'put ''JiFMdDskdC0tKXt2YXIgRG49JHQ+PTA/WmVbJHRdOll0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgRG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighRG4pcmV0dXJuIiI7bHQ9RG4rIi8iK2x0LEx0PVFvLmlz''@;'; put 'put ''QWJzKERuKX1yZXR1cm4oTHQ/Ii8iOiIiKSsobHQ9UW8ubm9ybWFsaXplQXJyYXkobHQuc3BsaXQoIi8iKS5maWx0ZXIoY3I9PiEhY3IpLCFMdCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooWmUsbHQpPT57ZnVuY3Rpb24gTHQoR28pe2Zvcih2YXIgSHM9MDtIczxHby5sZW5ndGgmJiIi''@;'; put 'put ''PT09R29bSHNdO0hzKyspO2Zvcih2YXIgYWw9R28ubGVuZ3RoLTE7YWw+PTAmJiIiPT09R29bYWxdO2FsLS0pO3JldHVybiBIcz5hbD9bXTpHby5zbGljZShIcyxhbC1IcysxKX1aZT1Vcy5yZXNvbHZlKFplKS5zdWJzdHIoMSksbHQ9VXMucmVzb2x2ZShsdCkuc3Vic3RyKDEpO2Zvcih2YXIg''@;'; put 'put ''JHQ9THQoWmUuc3BsaXQoIi8iKSksRG49THQobHQuc3BsaXQoIi8iKSksY3I9TWF0aC5taW4oJHQubGVuZ3RoLERuLmxlbmd0aCksUnI9Y3IsWHI9MDtYcjxjcjtYcisrKWlmKCR0W1hyXSE9PURuW1hyXSl7UnI9WHI7YnJlYWt9dmFyIGthPVtdO2ZvcihYcj1ScjtYcjwkdC5sZW5ndGg7WHIr''@;'; put 'put ''KylrYS5wdXNoKCIuLiIpO3JldHVybihrYT1rYS5jb25jYXQoRG4uc2xpY2UoUnIpKSkuam9pbigiLyIpfX0sSmM9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXI6dm9pZCAwLHFzPShaZSxsdD0wLEx0PU5hTik9Pntmb3IodmFyICR0PWx0K0x0LERuPWx0O1plW0RuXSYm''@;'; put 'put ''IShEbj49JHQpOykrK0RuO2lmKERuLWx0PjE2JiZaZS5idWZmZXImJkpjKXJldHVybiBKYy5kZWNvZGUoWmUuc3ViYXJyYXkobHQsRG4pKTtmb3IodmFyIGNyPSIiO2x0PERuOyl7dmFyIFJyPVplW2x0KytdO2lmKDEyOCZScil7dmFyIFhyPTYzJlplW2x0KytdO2lmKDE5MiE9KDIyNCZScikp''@;'; put 'put ''e3ZhciBrYT02MyZaZVtsdCsrXTtpZigoUnI9MjI0PT0oMjQwJlJyKT8oMTUmUnIpPDwxMnxYcjw8NnxrYTooNyZScik8PDE4fFhyPDwxMnxrYTw8Nnw2MyZaZVtsdCsrXSk8NjU1MzYpY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpO2Vsc2V7dmFyIEdvPVJyLTY1NTM2O2NyKz1TdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKDU1Mjk2fEdvPj4xMCw1NjMyMHwxMDIzJkdvKX19ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmUnIpPDw2fFhyKX1lbHNlIGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJyKX1yZXR1cm4gY3J9LEJsPVtdLGVzPVplPT57Zm9yKHZhciBsdD0wLEx0PTA7THQ8''@;'; put 'put ''WmUubGVuZ3RoOysrTHQpe3ZhciAkdD1aZS5jaGFyQ29kZUF0KEx0KTskdDw9MTI3P2x0Kys6JHQ8PTIwNDc/bHQrPTI6JHQ+PTU1Mjk2JiYkdDw9NTczNDM/KGx0Kz00LCsrTHQpOmx0Kz0zfXJldHVybiBsdH0sRTE9KFplLGx0LEx0LCR0KT0+e2lmKCEoJHQ+MCkpcmV0dXJuIDA7Zm9yKHZh''@;'; put 'put ''ciBEbj1MdCxjcj1MdCskdC0xLFJyPTA7UnI8WmUubGVuZ3RoOysrUnIpe3ZhciBYcj1aZS5jaGFyQ29kZUF0KFJyKTtpZihYcj49NTUyOTYmJlhyPD01NzM0MyYmKFhyPTY1NTM2KygoMTAyMyZYcik8PDEwKXwxMDIzJlplLmNoYXJDb2RlQXQoKytScikpLFhyPD0xMjcpe2lmKEx0Pj1jcili''@;'; put 'put ''cmVhaztsdFtMdCsrXT1Ycn1lbHNlIGlmKFhyPD0yMDQ3KXtpZihMdCsxPj1jcilicmVhaztsdFtMdCsrXT0xOTJ8WHI+PjYsbHRbTHQrK109MTI4fDYzJlhyfWVsc2UgaWYoWHI8PTY1NTM1KXtpZihMdCsyPj1jcilicmVhaztsdFtMdCsrXT0yMjR8WHI+PjEyLGx0W0x0KytdPTEyOHxYcj4+''@;'; put 'put ''NiY2MyxsdFtMdCsrXT0xMjh8NjMmWHJ9ZWxzZXtpZihMdCszPj1jcilicmVhaztsdFtMdCsrXT0yNDB8WHI+PjE4LGx0W0x0KytdPTEyOHxYcj4+MTImNjMsbHRbTHQrK109MTI4fFhyPj42JjYzLGx0W0x0KytdPTEyOHw2MyZYcn19cmV0dXJuIGx0W0x0XT0wLEx0LURufSxkND17dHR5czpb''@;'; put 'put ''XSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoWmUsbHQpe2Q0LnR0eXNbWmVdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOmx0fSxZdC5yZWdpc3RlckRldmljZShaZSxkNC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PWQ0LnR0eXNbWmUubm9kZS5yZGV2''@;'; put 'put ''XTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO1plLnR0eT1sdCxaZS5zZWVrYWJsZT0hMX0sY2xvc2UoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0sZnN5bmMoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0''@;'; put 'put ''eXx8IVplLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgY3I9MCxScj0wO1JyPCR0O1JyKyspe3ZhciBYcjt0cnl7WHI9WmUudHR5Lm9wcy5nZXRfY2hhcihaZS50dHkpfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1pZih2b2lk''@;'; put 'put ''IDA9PT1YciYmMD09PWNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVhyKWJyZWFrO2NyKyssbHRbTHQrUnJdPVhyfXJldHVybiBjciYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGNyfSx3cml0ZShaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0eXx8IVplLnR0''@;'; put 'put ''eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGNyPTA7Y3I8JHQ7Y3IrKylaZS50dHkub3BzLnB1dF9jaGFyKFplLnR0eSxsdFtMdCtjcl0pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gJHQmJihaZS5ub2RlLnRp''@;'; put 'put ''bWVzdGFtcD1EYXRlLm5vdygpKSxjcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6WmU9PkJsLmxlbmd0aD9CbC5zaGlmdCgpOm51bGwscHV0X2NoYXIoWmUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ocWUocXMoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKTowIT1sdCYmWmUub3V0cHV0''@;'; put 'put ''LnB1c2gobHQpfSxmc3luYyhaZSl7WmUub3V0cHV0JiZaZS5vdXRwdXQubGVuZ3RoPjAmJihxZShxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6WmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4NyxjX2NjOlszLDI4''@;'; put 'put ''LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KFplLGx0LEx0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlplPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcihaZSxsdCl7''@;'; put 'put ''bnVsbD09PWx0fHwxMD09PWx0PyhydChxcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRwdXQucHVzaChsdCl9LGZzeW5jKFplKXtaZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHJ0KHFzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9fX0sVkE9KFplLGx0''@;'; put 'put ''KT0+TWF0aC5jZWlsKFplL2x0KSpsdCxVTj1aZT0+e1plPVZBKFplLDY1NTM2KTt2YXIgbHQ9VzdlKDY1NTM2LFplKTtyZXR1cm4gbHQmJigoWmUsbHQpPT57TW4uZmlsbCgwLFplLFplK2x0KX0pKGx0LFplKSxsdH0sJGE9e29wc190YWJsZTpudWxsLG1vdW50OlplPT4kYS5jcmVhdGVOb2Rl''@;'; put 'put ''KG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpe2lmKFl0LmlzQmxrZGV2KEx0KXx8WXQuaXNGSUZPKEx0KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7JGEub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0''@;'; put 'put ''dHI6JGEubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6JGEubm9kZV9vcHMubG9va3VwLG1rbm9kOiRhLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTokYS5ub2RlX29wcy5yZW5hbWUsdW5saW5rOiRhLm5vZGVfb3BzLnVubGluayxybWRpcjokYS5ub2RlX29wcy5ybWRpcixyZWFkZGlyOiRhLm5vZGVf''@;'; put 'put ''b3BzLnJlYWRkaXIsc3ltbGluazokYS5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazokYS5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOiRh''@;'; put 'put ''LnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6JGEuc3RyZWFtX29wcy5yZWFkLHdyaXRlOiRhLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6JGEuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOiRhLnN0cmVhbV9vcHMubW1hcCxtc3luYzokYS5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7''@;'; put 'put ''Z2V0YXR0cjokYS5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6JGEubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazokYS5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6JGEubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOiRhLm5vZGVfb3BzLnNldGF0''@;'; put 'put ''dHJ9LHN0cmVhbTpZdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciBEbj1ZdC5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KTtyZXR1cm4gWXQuaXNEaXIoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5kaXIubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5kaXIuc3RyZWFt''@;'; put 'put ''LERuLmNvbnRlbnRzPXt9KTpZdC5pc0ZpbGUoRG4ubW9kZSk/KERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5maWxlLm5vZGUsRG4uc3RyZWFtX29wcz0kYS5vcHNfdGFibGUuZmlsZS5zdHJlYW0sRG4udXNlZEJ5dGVzPTAsRG4uY29udGVudHM9bnVsbCk6WXQuaXNMaW5rKERuLm1vZGUpPyhE''@;'; put 'put ''bi5ub2RlX29wcz0kYS5vcHNfdGFibGUubGluay5ub2RlLERuLnN0cmVhbV9vcHM9JGEub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpZdC5pc0NocmRldihEbi5tb2RlKSYmKERuLm5vZGVfb3BzPSRhLm9wc190YWJsZS5jaHJkZXYubm9kZSxEbi5zdHJlYW1fb3BzPSRhLm9wc190YWJsZS5jaHJk''@;'; put 'put ''ZXYuc3RyZWFtKSxEbi50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZSYmKFplLmNvbnRlbnRzW2x0XT1EbixaZS50aW1lc3RhbXA9RG4udGltZXN0YW1wKSxEbn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6WmU9PlplLmNvbnRlbnRzP1plLmNvbnRlbnRzLnN1YmFycmF5P1plLmNvbnRlbnRzLnN1''@;'; put 'put ''YmFycmF5KDAsWmUudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShaZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCksZXhwYW5kRmlsZVN0b3JhZ2UoWmUsbHQpe3ZhciBMdD1aZS5jb250ZW50cz9aZS5jb250ZW50cy5sZW5ndGg6MDtpZighKEx0Pj1sdCkpe2x0PU1hdGgubWF4KGx0LEx0''@;'; put 'put ''KihMdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9THQmJihsdD1NYXRoLm1heChsdCwyNTYpKTt2YXIgRG49WmUuY29udGVudHM7WmUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobHQpLFplLnVzZWRCeXRlcz4wJiZaZS5jb250ZW50cy5zZXQoRG4uc3ViYXJyYXkoMCxaZS51c2VkQnl0ZXMp''@;'; put 'put ''LDApfX0scmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQpe2lmKFplLnVzZWRCeXRlcyE9bHQpaWYoMD09bHQpWmUuY29udGVudHM9bnVsbCxaZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBMdD1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksTHQmJlplLmNvbnRlbnRzLnNl''@;'; put 'put ''dChMdC5zdWJhcnJheSgwLE1hdGgubWluKGx0LFplLnVzZWRCeXRlcykpKSxaZS51c2VkQnl0ZXM9bHR9fSxub2RlX29wczp7Z2V0YXR0cihaZSl7dmFyIGx0PXt9O3JldHVybiBsdC5kZXY9WXQuaXNDaHJkZXYoWmUubW9kZSk/WmUuaWQ6MSxsdC5pbm89WmUuaWQsbHQubW9kZT1aZS5tb2Rl''@;'; put 'put ''LGx0Lm5saW5rPTEsbHQudWlkPTAsbHQuZ2lkPTAsbHQucmRldj1aZS5yZGV2LGx0LnNpemU9WXQuaXNEaXIoWmUubW9kZSk/NDA5NjpZdC5pc0ZpbGUoWmUubW9kZSk/WmUudXNlZEJ5dGVzOll0LmlzTGluayhaZS5tb2RlKT9aZS5saW5rLmxlbmd0aDowLGx0LmF0aW1lPW5ldyBEYXRlKFpl''@;'; put 'put ''LnRpbWVzdGFtcCksbHQubXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5jdGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGx0LmJsa3NpemU9NDA5NixsdC5ibG9ja3M9TWF0aC5jZWlsKGx0LnNpemUvbHQuYmxrc2l6ZSksbHR9LHNldGF0dHIoWmUsbHQpe3ZvaWQgMCE9PWx0Lm1v''@;'; put 'put ''ZGUmJihaZS5tb2RlPWx0Lm1vZGUpLHZvaWQgMCE9PWx0LnRpbWVzdGFtcCYmKFplLnRpbWVzdGFtcD1sdC50aW1lc3RhbXApLHZvaWQgMCE9PWx0LnNpemUmJiRhLnJlc2l6ZUZpbGVTdG9yYWdlKFplLGx0LnNpemUpfSxsb29rdXAoWmUsbHQpe3Rocm93ICRhLmRvZXNOb3RFeGlzdEVycm9y''@;'; put 'put ''fSxta25vZDooWmUsbHQsTHQsJHQpPT4kYS5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KSxyZW5hbWUoWmUsbHQsTHQpe2lmKFl0LmlzRGlyKFplLm1vZGUpKXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUobHQsTHQpfWNhdGNoe31pZigkdClmb3IodmFyIERuIGluICR0LmNvbnRlbnRzKXRo''@;'; put 'put ''cm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KX1kZWxldGUgWmUucGFyZW50LmNvbnRlbnRzW1plLm5hbWVdLFplLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZS5uYW1lPUx0LGx0LmNvbnRlbnRzW0x0XT1aZSxsdC50aW1lc3RhbXA9WmUucGFyZW50LnRpbWVzdGFtcH0sdW5saW5rKFpl''@;'; put 'put ''LGx0KXtkZWxldGUgWmUuY29udGVudHNbbHRdLFplLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcihaZSxsdCl7dmFyIEx0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpO2Zvcih2YXIgJHQgaW4gTHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBaZS5jb250ZW50''@;'; put 'put ''c1tsdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXIoWmUpe3ZhciBsdD1bIi4iLCIuLiJdO2Zvcih2YXIgTHQgb2YgT2JqZWN0LmtleXMoWmUuY29udGVudHMpKWx0LnB1c2goTHQpO3JldHVybiBsdH0sc3ltbGluayhaZSxsdCxMdCl7dmFyICR0PSRhLmNyZWF0ZU5vZGUoWmUs''@;'; put 'put ''bHQsNDE0NzEsMCk7cmV0dXJuICR0Lmxpbms9THQsJHR9LHJlYWRsaW5rKFplKXtpZighWXQuaXNMaW5rKFplLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWmUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aZS5ub2RlLmNv''@;'; put 'put ''bnRlbnRzO2lmKERuPj1aZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgUnI9TWF0aC5taW4oWmUubm9kZS51c2VkQnl0ZXMtRG4sJHQpO2lmKFJyPjgmJmNyLnN1YmFycmF5KWx0LnNldChjci5zdWJhcnJheShEbixEbitSciksTHQpO2Vsc2UgZm9yKHZhciBYcj0wO1hyPFJyO1hyKysp''@;'; put 'put ''bHRbTHQrWHJdPWNyW0RuK1hyXTtyZXR1cm4gUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZihsdC5idWZmZXI9PT10bi5idWZmZXImJihjcj0hMSksISR0KXJldHVybiAwO3ZhciBScj1aZS5ub2RlO2lmKFJyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGx0LnN1YmFycmF5JiYoIVJyLmNv''@;'; put 'put ''bnRlbnRzfHxSci5jb250ZW50cy5zdWJhcnJheSkpe2lmKGNyKXJldHVybiBSci5jb250ZW50cz1sdC5zdWJhcnJheShMdCxMdCskdCksUnIudXNlZEJ5dGVzPSR0LCR0O2lmKDA9PT1Sci51c2VkQnl0ZXMmJjA9PT1EbilyZXR1cm4gUnIuY29udGVudHM9bHQuc2xpY2UoTHQsTHQrJHQpLFJy''@;'; put 'put ''LnVzZWRCeXRlcz0kdCwkdDtpZihEbiskdDw9UnIudXNlZEJ5dGVzKXJldHVybiBSci5jb250ZW50cy5zZXQobHQuc3ViYXJyYXkoTHQsTHQrJHQpLERuKSwkdH1pZigkYS5leHBhbmRGaWxlU3RvcmFnZShScixEbiskdCksUnIuY29udGVudHMuc3ViYXJyYXkmJmx0LnN1YmFycmF5KVJyLmNv''@;'; put 'put ''bnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pO2Vsc2UgZm9yKHZhciBYcj0wO1hyPCR0O1hyKyspUnIuY29udGVudHNbRG4rWHJdPWx0W0x0K1hyXTtyZXR1cm4gUnIudXNlZEJ5dGVzPU1hdGgubWF4KFJyLnVzZWRCeXRlcyxEbiskdCksJHR9LGxsc2VlayhaZSxsdCxMdCl7''@;'; put 'put ''dmFyICR0PWx0O2lmKDE9PT1MdD8kdCs9WmUucG9zaXRpb246Mj09PUx0JiZZdC5pc0ZpbGUoWmUubm9kZS5tb2RlKSYmKCR0Kz1aZS5ub2RlLnVzZWRCeXRlcyksJHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuICR0fSxhbGxvY2F0ZShaZSxsdCxMdCl7JGEuZXhwYW5k''@;'; put 'put ''RmlsZVN0b3JhZ2UoWmUubm9kZSxsdCtMdCksWmUubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoWmUubm9kZS51c2VkQnl0ZXMsbHQrTHQpfSxtbWFwKFplLGx0LEx0LCR0LERuKXtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO3ZhciBjcixS''@;'; put 'put ''cixYcj1aZS5ub2RlLmNvbnRlbnRzO2lmKDImRG58fCFYcnx8WHIuYnVmZmVyIT09dG4uYnVmZmVyKXtpZihScj0hMCwhKGNyPVVOKGx0KSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO1hyJiYoKEx0PjB8fEx0K2x0PFhyLmxlbmd0aCkmJihYcj1Yci5zdWJhcnJheT9Yci5zdWJhcnJh''@;'; put 'put ''eShMdCxMdCtsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWHIsTHQsTHQrbHQpKSx0bi5zZXQoWHIsY3IpKX1lbHNlIFJyPSExLGNyPVhyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpjcixhbGxvY2F0ZWQ6UnJ9fSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT4oJGEuc3RyZWFtX29wcy53''@;'; put 'put ''cml0ZShaZSxsdCwwLCR0LEx0LCExKSwwKX19LFpOPVtdLGpBPShaZSxsdCk9Pnt2YXIgTHQ9MDtyZXR1cm4gWmUmJihMdHw9MzY1KSxsdCYmKEx0fD0xNDYpLEx0fSxZdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51''@;'; put 'put ''bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6Y2xhc3N7bmFtZT0iRXJybm9FcnJvciI7Y29uc3RydWN0b3IoWmUpe3RoaXMuZXJybm89WmV9fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06''@;'; put 'put ''Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoWmUpe3RoaXMubm9kZT1aZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQg''@;'; put 'put ''aXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoWmUpe3RoaXMuc2hhcmVkLmZsYWdzPVplfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oWmUp''@;'; put 'put ''e3RoaXMuc2hhcmVkLnBvc2l0aW9uPVplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKFplLGx0LEx0LCR0KXtaZXx8KFplPXRoaXMpLHRoaXMucGFyZW50PVplLHRoaXMu''@;'; put 'put ''bW91bnQ9WmUubW91bnQsdGhpcy5pZD1ZdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9bHQsdGhpcy5tb2RlPUx0LHRoaXMucmRldj0kdH1nZXQgcmVhZCgpe3JldHVybih0aGlzLm1vZGUmdGhpcy5yZWFkTW9kZSk9PT10aGlzLnJlYWRNb2RlfXNldCByZWFkKFplKXtaZT90aGlzLm1vZGV8PXRo''@;'; put 'put ''aXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShaZSl7WmU/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50aGlzLndyaXRl''@;'; put 'put ''TW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gWXQuaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gWXQuaXNDaHJkZXYodGhpcy5tb2RlKX19LGxvb2t1cFBhdGgoWmUsbHQ9e30pe2lmKCEoWmU9VXMucmVzb2x2ZShaZSkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07''@;'; put 'put ''aWYoKGx0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LGx0KSkucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKTtmb3IodmFyICR0PVplLnNwbGl0KCIvIikuZmlsdGVyKGFsPT4hIWFsKSxEbj1ZdC5yb290LGNyPSIvIixS''@;'; put 'put ''cj0wO1JyPCR0Lmxlbmd0aDtScisrKXt2YXIgWHI9UnI9PT0kdC5sZW5ndGgtMTtpZihYciYmbHQucGFyZW50KWJyZWFrO2lmKERuPVl0Lmxvb2t1cE5vZGUoRG4sJHRbUnJdKSxjcj1Rby5qb2luMihjciwkdFtScl0pLFl0LmlzTW91bnRwb2ludChEbikmJighWHJ8fFhyJiZsdC5mb2xsb3df''@;'; put 'put ''bW91bnQpJiYoRG49RG4ubW91bnRlZC5yb290KSwhWHJ8fGx0LmZvbGxvdylmb3IodmFyIGthPTA7WXQuaXNMaW5rKERuLm1vZGUpOyl7dmFyIEdvPVl0LnJlYWRsaW5rKGNyKTtpZihjcj1Vcy5yZXNvbHZlKFFvLmRpcm5hbWUoY3IpLEdvKSxEbj1ZdC5sb29rdXBQYXRoKGNyLHtyZWN1cnNl''@;'; put 'put ''X2NvdW50Omx0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsa2ErKz40MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmNyLG5vZGU6RG59fSxnZXRQYXRoKFplKXtmb3IodmFyIGx0Ozspe2lmKFl0LmlzUm9vdChaZSkpe3ZhciBMdD1aZS5tb3VudC5tb3VudHBvaW50''@;'; put 'put ''O3JldHVybiBsdD8iLyIhPT1MdFtMdC5sZW5ndGgtMV0/YCR7THR9LyR7bHR9YDpMdCtsdDpMdH1sdD1sdD9gJHtaZS5uYW1lfS8ke2x0fWA6WmUubmFtZSxaZT1aZS5wYXJlbnR9fSxoYXNoTmFtZShaZSxsdCl7Zm9yKHZhciBMdD0wLCR0PTA7JHQ8bHQubGVuZ3RoOyR0KyspTHQ9KEx0PDw1''@;'; put 'put ''KS1MdCtsdC5jaGFyQ29kZUF0KCR0KXwwO3JldHVybihaZStMdD4+PjApJVl0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO1plLm5hbWVfbmV4dD1ZdC5uYW1lVGFibGVbbHRdLFl0Lm5hbWVUYWJsZVts''@;'; put 'put ''dF09WmV9LGhhc2hSZW1vdmVOb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO2lmKFl0Lm5hbWVUYWJsZVtsdF09PT1aZSlZdC5uYW1lVGFibGVbbHRdPVplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgTHQ9WXQubmFtZVRhYmxlW2x0XTtMdDspe2lmKEx0''@;'; put 'put ''Lm5hbWVfbmV4dD09PVplKXtMdC5uYW1lX25leHQ9WmUubmFtZV9uZXh0O2JyZWFrfUx0PUx0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoWmUsbHQpe3ZhciBMdD1ZdC5tYXlMb29rdXAoWmUpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtmb3IodmFyICR0PVl0Lmhhc2hOYW1l''@;'; put 'put ''KFplLmlkLGx0KSxEbj1ZdC5uYW1lVGFibGVbJHRdO0RuO0RuPURuLm5hbWVfbmV4dClpZihEbi5wYXJlbnQuaWQ9PT1aZS5pZCYmRG4ubmFtZT09PWx0KXJldHVybiBEbjtyZXR1cm4gWXQubG9va3VwKFplLGx0KX0sY3JlYXRlTm9kZShaZSxsdCxMdCwkdCl7dmFyIERuPW5ldyBZdC5GU05v''@;'; put 'put ''ZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5oYXNoQWRkTm9kZShEbiksRG59LGRlc3Ryb3lOb2RlKFplKXtZdC5oYXNoUmVtb3ZlTm9kZShaZSl9LGlzUm9vdDpaZT0+WmU9PT1aZS5wYXJlbnQsaXNNb3VudHBvaW50OlplPT4hIVplLm1vdW50ZWQsaXNGaWxlOlplPT4zMjc2OD09KDYxNDQw''@;'; put 'put ''JlplKSxpc0RpcjpaZT0+MTYzODQ9PSg2MTQ0MCZaZSksaXNMaW5rOlplPT40MDk2MD09KDYxNDQwJlplKSxpc0NocmRldjpaZT0+ODE5Mj09KDYxNDQwJlplKSxpc0Jsa2RldjpaZT0+MjQ1NzY9PSg2MTQ0MCZaZSksaXNGSUZPOlplPT40MDk2PT0oNjE0NDAmWmUpLGlzU29ja2V0OlplPT4h''@;'; put 'put ''KDQ5MTUyJn5aZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoWmUpe3ZhciBsdD1bInIiLCJ3IiwicnciXVszJlplXTtyZXR1cm4gNTEyJlplJiYobHQrPSJ3IiksbHR9LG5vZGVQZXJtaXNzaW9uczooWmUsbHQpPT5ZdC5pZ25vcmVQZXJtaXNzaW9ucz8wOmx0LmluY2x1ZGVzKCJyIikmJiEo''@;'; put 'put ''MjkyJlplLm1vZGUpfHxsdC5pbmNsdWRlcygidyIpJiYhKDE0NiZaZS5tb2RlKXx8bHQuaW5jbHVkZXMoIngiKSYmISg3MyZaZS5tb2RlKT8yOjAsbWF5TG9va3VwOlplPT5ZdC5pc0RpcihaZS5tb2RlKT9ZdC5ub2RlUGVybWlzc2lvbnMoWmUsIngiKXx8KFplLm5vZGVfb3BzLmxvb2t1cD8w''@;'; put 'put ''OjIpOjU0LG1heUNyZWF0ZShaZSxsdCl7dHJ5e3JldHVybiBZdC5sb29rdXBOb2RlKFplLGx0KSwyMH1jYXRjaHt9cmV0dXJuIFl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKX0sbWF5RGVsZXRlKFplLGx0LEx0KXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpfWNhdGNoKGNy''@;'; put 'put ''KXtyZXR1cm4gY3IuZXJybm99dmFyIERuPVl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKTtpZihEbilyZXR1cm4gRG47aWYoTHQpe2lmKCFZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gNTQ7aWYoWXQuaXNSb290KCR0KXx8WXQuZ2V0UGF0aCgkdCk9PT1ZdC5jd2QoKSlyZXR1cm4gMTB9ZWxz''@;'; put 'put ''ZSBpZihZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KFplLGx0KT0+WmU/WXQuaXNMaW5rKFplLm1vZGUpPzMyOll0LmlzRGlyKFplLm1vZGUpJiYoInIiIT09WXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcobHQpfHw1MTImbHQpPzMxOll0Lm5vZGVQZXJt''@;'; put 'put ''aXNzaW9ucyhaZSxZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgWmU9MDtaZTw9WXQuTUFYX09QRU5fRkRTO1plKyspaWYoIVl0LnN0cmVhbXNbWmVdKXJldHVybiBaZTt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigz''@;'; put 'put ''Myl9LGdldFN0cmVhbUNoZWNrZWQoWmUpe3ZhciBsdD1ZdC5nZXRTdHJlYW0oWmUpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtyZXR1cm4gbHR9LGdldFN0cmVhbTpaZT0+WXQuc3RyZWFtc1taZV0sY3JlYXRlU3RyZWFtOihaZSxsdD0tMSk9PihaZT1PYmplY3QuYXNzaWdu''@;'; put 'put ''KG5ldyBZdC5GU1N0cmVhbSxaZSksLTE9PWx0JiYobHQ9WXQubmV4dGZkKCkpLFplLmZkPWx0LFl0LnN0cmVhbXNbbHRdPVplLFplKSxjbG9zZVN0cmVhbShaZSl7WXQuc3RyZWFtc1taZV09bnVsbH0sZHVwU3RyZWFtKFplLGx0PS0xKXt2YXIgTHQ9WXQuY3JlYXRlU3RyZWFtKFplLGx0KTty''@;'; put 'put ''ZXR1cm4gTHQuc3RyZWFtX29wcz8uZHVwPy4oTHQpLEx0fSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PVl0LmdldERldmljZShaZS5ub2RlLnJkZXYpO1plLnN0cmVhbV9vcHM9bHQuc3RyZWFtX29wcyxaZS5zdHJlYW1fb3BzLm9wZW4/LihaZSl9LGxsc2Vlaygpe3Rocm93''@;'; put 'put ''IG5ldyBZdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOlplPT5aZT4+OCxtaW5vcjpaZT0+MjU1JlplLG1ha2VkZXY6KFplLGx0KT0+WmU8PDh8bHQscmVnaXN0ZXJEZXZpY2UoWmUsbHQpe1l0LmRldmljZXNbWmVdPXtzdHJlYW1fb3BzOmx0fX0sZ2V0RGV2aWNlOlplPT5ZdC5kZXZpY2VzW1pl''@;'; put 'put ''XSxnZXRNb3VudHMoWmUpe2Zvcih2YXIgbHQ9W10sTHQ9W1plXTtMdC5sZW5ndGg7KXt2YXIgJHQ9THQucG9wKCk7bHQucHVzaCgkdCksTHQucHVzaCguLi4kdC5tb3VudHMpfXJldHVybiBsdH0sc3luY2ZzKFplLGx0KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihsdD1aZSxaZT0hMSksWXQu''@;'; put 'put ''c3luY0ZTUmVxdWVzdHMrKyxZdC5zeW5jRlNSZXF1ZXN0cz4xJiZydChgd2FybmluZzogJHtZdC5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciBMdD1ZdC5nZXRNb3VudHMo''@;'; put 'put ''WXQucm9vdC5tb3VudCksJHQ9MDtmdW5jdGlvbiBEbihScil7cmV0dXJuIFl0LnN5bmNGU1JlcXVlc3RzLS0sbHQoUnIpfWZ1bmN0aW9uIGNyKFJyKXtpZihScilyZXR1cm4gY3IuZXJyb3JlZD92b2lkIDA6KGNyLmVycm9yZWQ9ITAsRG4oUnIpKTsrKyR0Pj1MdC5sZW5ndGgmJkRuKG51bGwp''@;'; put 'put ''fUx0LmZvckVhY2goUnI9PntpZighUnIudHlwZS5zeW5jZnMpcmV0dXJuIGNyKG51bGwpO1JyLnR5cGUuc3luY2ZzKFJyLFplLGNyKX0pfSxtb3VudChaZSxsdCxMdCl7dmFyIGNyLCR0PSIvIj09PUx0LERuPSFMdDtpZigkdCYmWXQucm9vdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7''@;'; put 'put ''aWYoISR0JiYhRG4pe3ZhciBScj1ZdC5sb29rdXBQYXRoKEx0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZihMdD1Sci5wYXRoLFl0LmlzTW91bnRwb2ludChjcj1Sci5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoIVl0LmlzRGlyKGNyLm1vZGUpKXRocm93IG5ldyBZdC5FcnJu''@;'; put 'put ''b0Vycm9yKDU0KX12YXIgWHI9e3R5cGU6WmUsb3B0czpsdCxtb3VudHBvaW50Okx0LG1vdW50czpbXX0sa2E9WmUubW91bnQoWHIpO3JldHVybiBrYS5tb3VudD1YcixYci5yb290PWthLCR0P1l0LnJvb3Q9a2E6Y3ImJihjci5tb3VudGVkPVhyLGNyLm1vdW50JiZjci5tb3VudC5tb3VudHMu''@;'; put 'put ''cHVzaChYcikpLGthfSx1bm1vdW50KFplKXt2YXIgbHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIVl0LmlzTW91bnRwb2ludChsdC5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0PWx0Lm5vZGUsJHQ9THQubW91bnRlZCxEbj1ZdC5nZXRN''@;'; put 'put ''b3VudHMoJHQpO09iamVjdC5rZXlzKFl0Lm5hbWVUYWJsZSkuZm9yRWFjaChScj0+e2Zvcih2YXIgWHI9WXQubmFtZVRhYmxlW1JyXTtYcjspe3ZhciBrYT1Yci5uYW1lX25leHQ7RG4uaW5jbHVkZXMoWHIubW91bnQpJiZZdC5kZXN0cm95Tm9kZShYciksWHI9a2F9fSksTHQubW91bnRlZD1u''@;'; put 'put ''dWxsO3ZhciBjcj1MdC5tb3VudC5tb3VudHMuaW5kZXhPZigkdCk7THQubW91bnQubW91bnRzLnNwbGljZShjciwxKX0sbG9va3VwOihaZSxsdCk9PlplLm5vZGVfb3BzLmxvb2t1cChaZSxsdCksbWtub2QoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5u''@;'; put 'put ''b2RlLGNyPVFvLmJhc2VuYW1lKFplKTtpZighY3J8fCIuIj09PWNyfHwiLi4iPT09Y3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBScj1ZdC5tYXlDcmVhdGUoRG4sY3IpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKTtpZighRG4ubm9kZV9vcHMubWtub2QpdGhy''@;'; put 'put ''b3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiBEbi5ub2RlX29wcy5ta25vZChEbixjcixsdCxMdCl9LHN0YXRmcyhaZSl7dmFyIGx0PXtic2l6ZTo0MDk2LGZyc2l6ZTo0MDk2LGJsb2NrczoxZTYsYmZyZWU6NWU1LGJhdmFpbDo1ZTUsZmlsZXM6WXQubmV4dElub2RlLGZmcmVlOll0''@;'; put 'put ''Lm5leHRJbm9kZS0xLGZzaWQ6NDIsZmxhZ3M6MixuYW1lbGVuOjI1NX0sTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gTHQ/Lm5vZGVfb3BzLnN0YXRmcyYmT2JqZWN0LmFzc2lnbihsdCxMdC5ub2RlX29wcy5zdGF0ZnMoTHQubW91bnQub3B0cy5yb290KSks''@;'; put 'put ''bHR9LGNyZWF0ZTooWmUsbHQ9NDM4KT0+KGx0Jj00MDk1LFl0Lm1rbm9kKFplLGx0fD0zMjc2OCwwKSksbWtkaXI6KFplLGx0PTUxMSk9PihsdCY9MTAyMyxZdC5ta25vZChaZSxsdHw9MTYzODQsMCkpLG1rZGlyVHJlZShaZSxsdCl7Zm9yKHZhciBMdD1aZS5zcGxpdCgiLyIpLCR0PSIiLERu''@;'; put 'put ''PTA7RG48THQubGVuZ3RoOysrRG4paWYoTHRbRG5dKXskdCs9Ii8iK0x0W0RuXTt0cnl7WXQubWtkaXIoJHQsbHQpfWNhdGNoKGNyKXtpZigyMCE9Y3IuZXJybm8pdGhyb3cgY3J9fX0sbWtkZXY6KFplLGx0LEx0KT0+KHR5cGVvZiBMdD4idSImJihMdD1sdCxsdD00MzgpLFl0Lm1rbm9kKFpl''@;'; put 'put ''LGx0fD04MTkyLEx0KSksc3ltbGluayhaZSxsdCl7aWYoIVVzLnJlc29sdmUoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciBEbj1Rby5i''@;'; put 'put ''YXNlbmFtZShsdCksY3I9WXQubWF5Q3JlYXRlKCR0LERuKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoISR0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiAkdC5ub2RlX29wcy5zeW1saW5rKCR0LERuLFplKX0scmVuYW1l''@;'; put 'put ''KFplLGx0KXt2YXIgWHIsa2EsTHQ9UW8uZGlybmFtZShaZSksJHQ9UW8uZGlybmFtZShsdCksRG49UW8uYmFzZW5hbWUoWmUpLGNyPVFvLmJhc2VuYW1lKGx0KTtpZihYcj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLGthPVl0Lmxvb2t1cFBhdGgobHQse3BhcmVudDohMH0p''@;'; put 'put ''Lm5vZGUsIVhyfHwha2EpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFhyLm1vdW50IT09a2EubW91bnQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzUpO3ZhciBhbCxHbz1ZdC5sb29rdXBOb2RlKFhyLERuKSxIcz1Vcy5yZWxhdGl2ZShaZSwkdCk7aWYoIi4iIT09SHMuY2hhckF0''@;'; put 'put ''KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oSHM9VXMucmVsYXRpdmUobHQsTHQpKS5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO3RyeXthbD1ZdC5sb29rdXBOb2RlKGthLGNyKX1jYXRjaHt9aWYoR28hPT1hbCl7dmFyIGdzPVl0LmlzRGly''@;'; put 'put ''KEdvLm1vZGUpLHhvPVl0Lm1heURlbGV0ZShYcixEbixncyk7aWYoeG8pdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeG8pO2lmKHhvPWFsP1l0Lm1heURlbGV0ZShrYSxjcixncyk6WXQubWF5Q3JlYXRlKGthLGNyKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4byk7aWYoIVhyLm5vZGVfb3Bz''@;'; put 'put ''LnJlbmFtZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KEdvKXx8YWwmJll0LmlzTW91bnRwb2ludChhbCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKGthIT09WHImJih4bz1ZdC5ub2RlUGVybWlzc2lvbnMoWHIsInciKSkpdGhyb3cgbmV3''@;'; put 'put ''IFl0LkVycm5vRXJyb3IoeG8pO1l0Lmhhc2hSZW1vdmVOb2RlKEdvKTt0cnl7WHIubm9kZV9vcHMucmVuYW1lKEdvLGthLGNyKSxHby5wYXJlbnQ9a2F9Y2F0Y2goWHMpe3Rocm93IFhzfWZpbmFsbHl7WXQuaGFzaEFkZE5vZGUoR28pfX19LHJtZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0''@;'; put 'put ''aChaZSx7cGFyZW50OiEwfSkubm9kZSwkdD1Rby5iYXNlbmFtZShaZSksRG49WXQubG9va3VwTm9kZShMdCwkdCksY3I9WXQubWF5RGVsZXRlKEx0LCR0LCEwKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoIUx0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBZdC5FcnJu''@;'; put 'put ''b0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy5ybWRpcihMdCwkdCksWXQuZGVzdHJveU5vZGUoRG4pfSxyZWFkZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtpZigh''@;'; put 'put ''THQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7cmV0dXJuIEx0Lm5vZGVfb3BzLnJlYWRkaXIoTHQpfSx1bmxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0''@;'; put 'put ''NCk7dmFyICR0PVFvLmJhc2VuYW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUoTHQsJHQsITEpO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZ''@;'; put 'put ''dC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy51bmxpbmsoTHQsJHQpLFl0LmRlc3Ryb3lOb2RlKERuKX0scmVhZGxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplKS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJv''@;'; put 'put ''cig0NCk7aWYoIUx0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGxpbmsoTHQpfSxzdGF0KFplLGx0KXt2YXIgJHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLm5vZGU7aWYoISR0KXRocm93IG5ldyBZ''@;'; put 'put ''dC5FcnJub0Vycm9yKDQ0KTtpZighJHQubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuICR0Lm5vZGVfb3BzLmdldGF0dHIoJHQpfSxsc3RhdDpaZT0+WXQuc3RhdChaZSwhMCksY2htb2QoWmUsbHQsTHQpe3ZhciAkdDtpZighKCR0PSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFMdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpOyR0Lm5vZGVfb3BzLnNldGF0dHIoJHQse21vZGU6NDA5NSZsdHwtNDA5NiYkdC5tb2RlLHRpbWVzdGFtcDpEYXRlLm5v''@;'; put 'put ''dygpfSl9LGxjaG1vZChaZSxsdCl7WXQuY2htb2QoWmUsbHQsITApfSxmY2htb2QoWmUsbHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG1vZChMdC5ub2RlLGx0KX0sY2hvd24oWmUsbHQsTHQsJHQpe3ZhciBEbjtpZighKERuPSJzdHJpbmciPT10eXBlb2YgWmU/WXQu''@;'; put 'put ''bG9va3VwUGF0aChaZSx7Zm9sbG93OiEkdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihaZSxsdCxMdCl7WXQuY2hvd24oWmUsbHQsTHQs''@;'; put 'put ''ITApfSxmY2hvd24oWmUsbHQsTHQpe3ZhciAkdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG93bigkdC5ub2RlLGx0LEx0KX0sdHJ1bmNhdGUoWmUsbHQpe2lmKGx0PDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBMdDtpZighKEx0PSJzdHJpbmciPT10eXBlb2YgWmU/''@;'; put 'put ''WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNEaXIoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFZdC5pc0ZpbGUoTHQubW9kZSkpdGhyb3cgbmV3''@;'; put 'put ''IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBEbj1ZdC5ub2RlUGVybWlzc2lvbnMoTHQsInciKTtpZihEbil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihEbik7THQubm9kZV9vcHMuc2V0YXR0cihMdCx7c2l6ZTpsdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoWmUsbHQpe3ZhciBM''@;'; put 'put ''dD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtpZighKDIwOTcxNTUmTHQuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtZdC50cnVuY2F0ZShMdC5ub2RlLGx0KX0sdXRpbWUoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO0RuLm5v''@;'; put 'put ''ZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpNYXRoLm1heChsdCxMdCl9KX0sb3BlbihaZSxsdCxMdD00Mzgpe2lmKCIiPT09WmUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdDtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0PyhaZT0+e3ZhciBMdD17cjowLCJyKyI6Mix3''@;'; put 'put ''OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtaZV07aWYodHlwZW9mIEx0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7WmV9YCk7cmV0dXJuIEx0fSkobHQpOmx0LEx0PTY0Jmx0PzQwOTUmTHR8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIFpl''@;'; put 'put ''KSR0PVplO2Vsc2V7WmU9UW8ubm9ybWFsaXplKFplKTt0cnl7JHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEoMTMxMDcyJmx0KX0pLm5vZGV9Y2F0Y2h7fX12YXIgY3I9ITE7aWYoNjQmbHQpaWYoJHQpe2lmKDEyOCZsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyMCl9ZWxzZSAkdD1Z''@;'; put 'put ''dC5ta25vZChaZSxMdCwwKSxjcj0hMDtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFl0LmlzQ2hyZGV2KCR0Lm1vZGUpJiYobHQmPS01MTMpLDY1NTM2Jmx0JiYhWXQuaXNEaXIoJHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO2lmKCFjcil7dmFyIFJy''@;'; put 'put ''PVl0Lm1heU9wZW4oJHQsbHQpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKX01MTImbHQmJiFjciYmWXQudHJ1bmNhdGUoJHQsMCksbHQmPS0xMzE3MTM7dmFyIFhyPVl0LmNyZWF0ZVN0cmVhbSh7bm9kZTokdCxwYXRoOll0LmdldFBhdGgoJHQpLGZsYWdzOmx0LHNlZWthYmxl''@;'; put 'put ''OiEwLHBvc2l0aW9uOjAsc3RyZWFtX29wczokdC5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIFhyLnN0cmVhbV9vcHMub3BlbiYmWHIuc3RyZWFtX29wcy5vcGVuKFhyKSxYcn0sY2xvc2UoWmUpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcig4KTtaZS5nZXRkZW50cyYmKFplLmdldGRlbnRzPW51bGwpO3RyeXtaZS5zdHJlYW1fb3BzLmNsb3NlJiZaZS5zdHJlYW1fb3BzLmNsb3NlKFplKX1jYXRjaChsdCl7dGhyb3cgbHR9ZmluYWxseXtZdC5jbG9zZVN0cmVhbShaZS5mZCl9WmUuZmQ9bnVsbH0saXNDbG9zZWQ6WmU9Pm51''@;'; put 'put ''bGw9PT1aZS5mZCxsbHNlZWsoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighWmUuc2Vla2FibGV8fCFaZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCk7aWYoMCE9THQmJjEhPUx0JiYyIT1MdCl0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnBvc2l0aW9uPVplLnN0cmVhbV9vcHMubGxzZWVrKFplLGx0LEx0KSxaZS51bmdvdHRlbj1bXSxaZS5wb3NpdGlvbn0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoJHQ8MHx8RG48MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigy''@;'; put 'put ''OCk7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3Ry''@;'; put 'put ''ZWFtX29wcy5yZWFkKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgY3I9dHlwZW9mIERuPCJ1IjtpZihjcil7aWYoIVplLnNlZWthYmxlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPVplLnBvc2l0aW9uO3ZhciBScj1aZS5zdHJlYW1fb3BzLnJlYWQoWmUsbHQs''@;'; put 'put ''THQsJHQsRG4pO3JldHVybiBjcnx8KFplLnBvc2l0aW9uKz1SciksUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZigkdDwwfHxEbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoISgyMDk3''@;'; put 'put ''MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7WmUuc2Vla2FibGUmJjEwMjQm''@;'; put 'put ''WmUuZmxhZ3MmJll0Lmxsc2VlayhaZSwwLDIpO3ZhciBScj10eXBlb2YgRG48InUiO2lmKFJyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIFhyPVplLnN0cmVhbV9vcHMud3JpdGUoWmUsbHQsTHQsJHQsRG4sY3Ip''@;'; put 'put ''O3JldHVybiBScnx8KFplLnBvc2l0aW9uKz1YciksWHJ9LGFsbG9jYXRlKFplLGx0LEx0KXtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYobHQ8MHx8THQ8PTApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZaZS5mbGFncykp''@;'; put 'put ''dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVl0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYhWXQuaXNEaXIoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoIVplLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTM4KTta''@;'; put 'put ''ZS5zdHJlYW1fb3BzLmFsbG9jYXRlKFplLGx0LEx0KX0sbW1hcChaZSxsdCxMdCwkdCxEbil7aWYoMiYkdCYmISgyJkRuKSYmMiE9KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9F''@;'; put 'put ''cnJvcigyKTtpZighWmUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5zdHJlYW1fb3BzLm1tYXAoWmUsbHQsTHQsJHQsRG4pfSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT5aZS5z''@;'; put 'put ''dHJlYW1fb3BzLm1zeW5jP1plLnN0cmVhbV9vcHMubXN5bmMoWmUsbHQsTHQsJHQsRG4pOjAsaW9jdGwoWmUsbHQsTHQpe2lmKCFaZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gWmUuc3RyZWFtX29wcy5pb2N0bChaZSxsdCxMdCl9LHJlYWRG''@;'; put 'put ''aWxlKFplLGx0PXt9KXtpZihsdC5mbGFncz1sdC5mbGFnc3x8MCxsdC5lbmNvZGluZz1sdC5lbmNvZGluZ3x8ImJpbmFyeSIsInV0ZjgiIT09bHQuZW5jb2RpbmcmJiJiaW5hcnkiIT09bHQuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUgIiR7bHQuZW5j''@;'; put 'put ''b2Rpbmd9ImApO3ZhciBMdCwkdD1ZdC5vcGVuKFplLGx0LmZsYWdzKSxjcj1ZdC5zdGF0KFplKS5zaXplLFJyPW5ldyBVaW50OEFycmF5KGNyKTtyZXR1cm4gWXQucmVhZCgkdCxSciwwLGNyLDApLCJ1dGY4Ij09PWx0LmVuY29kaW5nP0x0PXFzKFJyKToiYmluYXJ5Ij09PWx0LmVuY29kaW5n''@;'; put 'put ''JiYoTHQ9UnIpLFl0LmNsb3NlKCR0KSxMdH0sd3JpdGVGaWxlKFplLGx0LEx0PXt9KXtMdC5mbGFncz1MdC5mbGFnc3x8NTc3O3ZhciAkdD1ZdC5vcGVuKFplLEx0LmZsYWdzLEx0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgbHQpe3ZhciBEbj1uZXcgVWludDhBcnJheShlcyhsdCkrMSks''@;'; put 'put ''Y3I9RTEobHQsRG4sMCxEbi5sZW5ndGgpO1l0LndyaXRlKCR0LERuLDAsY3Isdm9pZCAwLEx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGx0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1l0LndyaXRlKCR0LGx0LDAsbHQuYnl0ZUxlbmd0''@;'; put 'put ''aCx2b2lkIDAsTHQuY2FuT3duKX1ZdC5jbG9zZSgkdCl9LGN3ZDooKT0+WXQuY3VycmVudFBhdGgsY2hkaXIoWmUpe3ZhciBsdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KTtpZihudWxsPT09bHQubm9kZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIVl0LmlzRGlyKGx0''@;'; put 'put ''Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO3ZhciBMdD1ZdC5ub2RlUGVybWlzc2lvbnMobHQubm9kZSwieCIpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtZdC5jdXJyZW50UGF0aD1sdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtZ''@;'; put 'put ''dC5ta2RpcigiL3RtcCIpLFl0Lm1rZGlyKCIvaG9tZSIpLFl0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe1l0Lm1rZGlyKCIvZGV2IiksWXQucmVnaXN0ZXJEZXZpY2UoWXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOigkdCxEbixjcixS''@;'; put 'put ''cixYcik9PlJyLGxsc2VlazooKT0+MH0pLFl0Lm1rZGV2KCIvZGV2L251bGwiLFl0Lm1ha2VkZXYoMSwzKSksZDQucmVnaXN0ZXIoWXQubWFrZWRldig1LDApLGQ0LmRlZmF1bHRfdHR5X29wcyksZDQucmVnaXN0ZXIoWXQubWFrZWRldig2LDApLGQ0LmRlZmF1bHRfdHR5MV9vcHMpLFl0Lm1r''@;'; put 'put ''ZGV2KCIvZGV2L3R0eSIsWXQubWFrZWRldig1LDApKSxZdC5ta2RldigiL2Rldi90dHkxIixZdC5tYWtlZGV2KDYsMCkpO3ZhciBaZT1uZXcgVWludDhBcnJheSgxMDI0KSxsdD0wLEx0PSgpPT4oMD09PWx0JiYobHQ9YWQoWmUpLmJ5dGVMZW5ndGgpLFplWy0tbHRdKTtZdC5jcmVhdGVEZXZp''@;'; put 'put ''Y2UoIi9kZXYiLCJyYW5kb20iLEx0KSxZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixMdCksWXQubWtkaXIoIi9kZXYvc2htIiksWXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3Byb2MiKTt2YXIgWmU9WXQubWtk''@;'; put 'put ''aXIoIi9wcm9jL3NlbGYiKTtZdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLFl0Lm1vdW50KHttb3VudCgpe3ZhciBsdD1ZdC5jcmVhdGVOb2RlKFplLCJmZCIsMTY4OTUsNzMpO3JldHVybiBsdC5ub2RlX29wcz17bG9va3VwKEx0LCR0KXt2YXIgY3I9WXQuZ2V0U3RyZWFtQ2hlY2tlZCgrJHQp''@;'; put 'put ''LFJyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+Y3IucGF0aH19O3JldHVybiBSci5wYXJlbnQ9UnIsUnJ9fSxsdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl7WmU/WXQu''@;'; put 'put ''Y3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLFplKTpZdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxsdD9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxMdD9ZdC5jcmVhdGVEZXZp''@;'; put 'put ''Y2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsTHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksWXQub3BlbigiL2Rldi9zdGRpbiIsMCksWXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLFl0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe1l0Lm5hbWVUYWJs''@;'; put 'put ''ZT1uZXcgQXJyYXkoNDA5NiksWXQubW91bnQoJGEse30sIi8iKSxZdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxZdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLFl0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLFl0LmZpbGVzeXN0ZW1zPXtNRU1GUzokYX19LGluaXQoWmUsbHQsTHQp''@;'; put 'put ''e1l0LmluaXRpYWxpemVkPSEwLFl0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl9LHF1aXQoKXtZdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIFplPTA7WmU8WXQuc3RyZWFtcy5sZW5ndGg7WmUrKyl7dmFyIGx0PVl0LnN0cmVhbXNbWmVdO2x0JiZZdC5jbG9zZShsdCl9fSxmaW5k''@;'; put 'put ''T2JqZWN0KFplLGx0KXt2YXIgTHQ9WXQuYW5hbHl6ZVBhdGgoWmUsbHQpO3JldHVybiBMdC5leGlzdHM/THQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoKFplLGx0KXt0cnl7WmU9KEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KSkucGF0aH1jYXRjaHt9dmFyICR0PXtpc1Jvb3Q6''@;'; put 'put ''ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pOyR0LnBhcmVudEV4aXN0cz0hMCwk''@;'; put 'put ''dC5wYXJlbnRQYXRoPUx0LnBhdGgsJHQucGFyZW50T2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1Rby5iYXNlbmFtZShaZSksTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLCR0LmV4aXN0cz0hMCwkdC5wYXRoPUx0LnBhdGgsJHQub2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1MdC5ub2Rl''@;'; put 'put ''Lm5hbWUsJHQuaXNSb290PSIvIj09PUx0LnBhdGh9Y2F0Y2goRG4peyR0LmVycm9yPURuLmVycm5vfXJldHVybiAkdH0sY3JlYXRlUGF0aChaZSxsdCxMdCwkdCl7WmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKTtmb3IodmFyIERuPWx0LnNwbGl0KCIvIikucmV2ZXJz''@;'; put 'put ''ZSgpO0RuLmxlbmd0aDspe3ZhciBjcj1Ebi5wb3AoKTtpZihjcil7dmFyIFJyPVFvLmpvaW4yKFplLGNyKTt0cnl7WXQubWtkaXIoUnIpfWNhdGNoe31aZT1Scn19cmV0dXJuIFJyfSxjcmVhdGVGaWxlKFplLGx0LEx0LCR0LERuKXt2YXIgY3I9UW8uam9pbjIoInN0cmluZyI9PXR5cGVvZiBa''@;'; put 'put ''ZT9aZTpZdC5nZXRQYXRoKFplKSxsdCksUnI9akEoJHQsRG4pO3JldHVybiBZdC5jcmVhdGUoY3IsUnIpfSxjcmVhdGVEYXRhRmlsZShaZSxsdCxMdCwkdCxEbixjcil7dmFyIFJyPWx0O1plJiYoWmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxScj1sdD9Rby5qb2lu''@;'; put 'put ''MihaZSxsdCk6WmUpO3ZhciBYcj1qQSgkdCxEbiksa2E9WXQuY3JlYXRlKFJyLFhyKTtpZihMdCl7aWYoInN0cmluZyI9PXR5cGVvZiBMdCl7Zm9yKHZhciBHbz1uZXcgQXJyYXkoTHQubGVuZ3RoKSxIcz0wLGFsPUx0Lmxlbmd0aDtIczxhbDsrK0hzKUdvW0hzXT1MdC5jaGFyQ29kZUF0KEhz''@;'; put 'put ''KTtMdD1Hb31ZdC5jaG1vZChrYSwxNDZ8WHIpO3ZhciBncz1ZdC5vcGVuKGthLDU3Nyk7WXQud3JpdGUoZ3MsTHQsMCxMdC5sZW5ndGgsMCxjciksWXQuY2xvc2UoZ3MpLFl0LmNobW9kKGthLFhyKX19LGNyZWF0ZURldmljZShaZSxsdCxMdCwkdCl7dmFyIERuPVFvLmpvaW4yKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksbHQpLGNyPWpBKCEhTHQsISEkdCk7WXQuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIFJyPVl0Lm1ha2VkZXYoWXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIFl0LnJlZ2lzdGVyRGV2aWNlKFJyLHtvcGVuKFhyKXtYci5z''@;'; put 'put ''ZWVrYWJsZT0hMX0sY2xvc2UoWHIpeyR0Py5idWZmZXI/Lmxlbmd0aCYmJHQoMTApfSxyZWFkKFhyLGthLEdvLEhzLGFsKXtmb3IodmFyIGdzPTAseG89MDt4bzxIczt4bysrKXt2YXIgWHM7dHJ5e1hzPUx0KCl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09''@;'; put 'put ''PVhzJiYwPT09Z3MpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09WHMpYnJlYWs7Z3MrKyxrYVtHbyt4b109WHN9cmV0dXJuIGdzJiYoWHIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9LHdyaXRlKFhyLGthLEdvLEhzLGFsKXtmb3IodmFyIGdzPTA7Z3M8SHM7Z3Mr''@;'; put 'put ''Kyl0cnl7JHQoa2FbR28rZ3NdKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIEhzJiYoWHIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9fSksWXQubWtkZXYoRG4sY3IsUnIpfSxmb3JjZUxvYWRGaWxlKFplKXtpZihaZS5pc0RldmljZXx8WmUuaXNGb2xk''@;'; put 'put ''ZXJ8fFplLmxpbmt8fFplLmNvbnRlbnRzKXJldHVybiEwO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3cgbmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1dCBpdCB3YXMg''@;'; put 'put ''bm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTt0cnl7WmUuY29udGVudHM9amUoWmUudXJsKSxaZS51c2VkQnl0ZXM9WmUuY29udGVudHMubGVu''@;'; put 'put ''Z3RofWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKFplLGx0LEx0LCR0LERuKXtpZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9k''@;'; put 'put ''ZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBYcixrYT1ZdC5jcmVhdGVGaWxlKFplLGx0LFhyPXtpc0RldmljZTohMSx1cmw6THR9LCR0LERuKTtYci5jb250ZW50cz9rYS5jb250ZW50cz1Yci5jb250ZW50czpYci51cmwmJihr''@;'; put 'put ''YS5jb250ZW50cz1udWxsLGthLnVybD1Yci51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGthLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIEdvPXt9O2Z1bmN0aW9uIGFsKGdzLHhvLFhzLEExLFQzKXt2YXIgV2g9Z3Mu''@;'; put 'put ''bm9kZS5jb250ZW50cztpZihUMz49V2gubGVuZ3RoKXJldHVybiAwO3ZhciBBMz1NYXRoLm1pbihXaC5sZW5ndGgtVDMsQTEpO2lmKFdoLnNsaWNlKWZvcih2YXIgazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1XaFtUMytrM107ZWxzZSBmb3IoazM9MDtrMzxBMztrMysrKXhvW1hzK2szXT1X''@;'; put 'put ''aC5nZXQoVDMrazMpO3JldHVybiBBM31yZXR1cm4gT2JqZWN0LmtleXMoa2Euc3RyZWFtX29wcykuZm9yRWFjaChncz0+e3ZhciB4bz1rYS5zdHJlYW1fb3BzW2dzXTtHb1tnc109KC4uLlhzKT0+KFl0LmZvcmNlTG9hZEZpbGUoa2EpLHhvKC4uLlhzKSl9KSxHby5yZWFkPShncyx4byxYcyxB''@;'; put 'put ''MSxUMyk9PihZdC5mb3JjZUxvYWRGaWxlKGthKSxhbChncyx4byxYcyxBMSxUMykpLEdvLm1tYXA9KGdzLHhvLFhzLEExLFQzKT0+e1l0LmZvcmNlTG9hZEZpbGUoa2EpO3ZhciBXaD1VTih4byk7aWYoIVdoKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gYWwoZ3MsdG4sV2gs''@;'; put 'put ''eG8sWHMpLHtwdHI6V2gsYWxsb2NhdGVkOiEwfX0sa2Euc3RyZWFtX29wcz1HbyxrYX19LHYwPShaZSxsdCk9PlplP3FzKE1uLFplLGx0KToiIixacz17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KFplLGx0LEx0KXtpZihRby5pc0FicyhsdCkpcmV0dXJuIGx0O3ZhciAkdDtpZigk''@;'; put 'put ''dD0tMTAwPT09WmU/WXQuY3dkKCk6WnMuZ2V0U3RyZWFtRnJvbUZEKFplKS5wYXRoLDA9PWx0Lmxlbmd0aCl7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gJHR9cmV0dXJuIFFvLmpvaW4yKCR0LGx0KX0sZG9TdGF0KFplLGx0LEx0KXt2YXIgJHQ9WmUobHQpO21y''@;'; put 'put ''W0x0Pj4yXT0kdC5kZXYsbXJbTHQrND4+Ml09JHQubW9kZSxHbltMdCs4Pj4yXT0kdC5ubGluayxtcltMdCsxMj4+Ml09JHQudWlkLG1yW0x0KzE2Pj4yXT0kdC5naWQsbXJbTHQrMjA+PjJdPSR0LnJkZXYsYWE9WyR0LnNpemU+Pj4wLChacj0kdC5zaXplLCtNYXRoLmFicyhacik+PTE/WnI+''@;'; put 'put ''MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCsyND4+Ml09YWFbMF0sbXJbTHQrMjg+PjJdPWFhWzFdLG1yW0x0KzMyPj4yXT00MDk2LG1yW0x0KzM2Pj4yXT0kdC5ibG9ja3M7dmFy''@;'; put 'put ''IERuPSR0LmF0aW1lLmdldFRpbWUoKSxjcj0kdC5tdGltZS5nZXRUaW1lKCksUnI9JHQuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBhYT1bTWF0aC5mbG9vcihEbi8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihEbi8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0''@;'; put 'put ''OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs0MD4+Ml09YWFbMF0sbXJbTHQrNDQ+PjJdPWFhWzFdLEduW0x0KzQ4Pj4yXT1EbiUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihjci8xZTMpPj4+MCwoWnI9TWF0aC5m''@;'; put 'put ''bG9vcihjci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs1Nj4+Ml09YWFbMF0sbXJbTHQrNjA+PjJdPWFhWzFdLEduW0x0KzY0Pj4y''@;'; put 'put ''XT1jciUxZTMqMWUzKjFlMyxhYT1bTWF0aC5mbG9vcihSci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihSci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4w''@;'; put 'put ''OjApXSxtcltMdCs3Mj4+Ml09YWFbMF0sbXJbTHQrNzY+PjJdPWFhWzFdLEduW0x0KzgwPj4yXT1SciUxZTMqMWUzKjFlMyxhYT1bJHQuaW5vPj4+MCwoWnI9JHQuaW5vLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCha''@;'; put 'put ''ci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxtcltMdCs4OD4+Ml09YWFbMF0sbXJbTHQrOTI+PjJdPWFhWzFdLDB9LGRvTXN5bmMoWmUsbHQsTHQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUobHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoMiYkdCly''@;'; put 'put ''ZXR1cm4gMDt2YXIgY3I9TW4uc2xpY2UoWmUsWmUrTHQpO1l0Lm1zeW5jKGx0LGNyLERuLEx0LCR0KX0sZ2V0U3RyZWFtRnJvbUZEOlplPT5ZdC5nZXRTdHJlYW1DaGVja2VkKFplKSx2YXJhcmdzOnZvaWQgMCxnZXRTdHI6WmU9PnYwKFplKX0sRTY9KCk9Pnt2YXIgWmU9bXJbK1pzLnZhcmFy''@;'; put 'put ''Z3M+PjJdO3JldHVybiBacy52YXJhcmdzKz00LFplfSxlNT1FNixvdj0oWmUsbHQsTHQpPT5FMShaZSxNbixsdCxMdCksWmg9KFplLGx0KT0+bHQrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIVplPyhaZT4+PjApKzQyOTQ5NjcyOTYqbHQ6TmFOLGt3PVtdLEdEdD1aZT0+e3ZhciBMdD0oWmUtZHQu''@;'; put 'put ''YnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e3JldHVybiBkdC5ncm93KEx0KSxPbigpLDF9Y2F0Y2h7fX0sWXRlPXt9LFVBPSgpPT57aWYoIVVBLnN0cmluZ3Mpe3ZhciBsdD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhP''@;'; put 'put ''TUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBMdCBpbiBZ''@;'; put 'put ''dGUpdm9pZCAwPT09WXRlW0x0XT9kZWxldGUgbHRbTHRdOmx0W0x0XT1ZdGVbTHRdO3ZhciAkdD1bXTtmb3IodmFyIEx0IGluIGx0KSR0LnB1c2goYCR7THR9PSR7bHRbTHRdfWApO1VBLnN0cmluZ3M9JHR9cmV0dXJuIFVBLnN0cmluZ3N9O1l0LmNyZWF0ZVByZWxvYWRlZEZpbGU9KFplLGx0''@;'; put 'put ''LEx0LCR0LERuLGNyLFJyLFhyLGthLEdvKT0+e3ZhciBIcz1sdD9Vcy5yZXNvbHZlKFFvLmpvaW4yKFplLGx0KSk6WmU7ZnVuY3Rpb24gZ3MoeG8pe2Z1bmN0aW9uIFhzKEExKXtHbz8uKCksWHJ8fCgoWmUsbHQsTHQsJHQsRG4sY3IpPT57WXQuY3JlYXRlRGF0YUZpbGUoWmUsbHQsTHQsJHQs''@;'; put 'put ''RG4sY3IpfSkoWmUsbHQsQTEsJHQsRG4sa2EpLGNyPy4oKSxIcigpfSgoWmUsbHQsTHQsJHQpPT57dHlwZW9mIEJyb3dzZXI8InUiJiZCcm93c2VyLmluaXQoKTt2YXIgRG49ITE7cmV0dXJuIFpOLmZvckVhY2goY3I9PntEbnx8Y3IuY2FuSGFuZGxlKGx0KSYmKGNyLmhhbmRsZShaZSxsdCxM''@;'; put 'put ''dCwkdCksRG49ITApfSksRG59KSh4byxIcyxYcywoKT0+e1JyPy4oKSxIcigpfSl8fFhzKHhvKX1hcigpLCJzdHJpbmciPT10eXBlb2YgTHQ/KChaZSxsdCxMdCwkdCk9Pnt2YXIgRG49YGFsICR7WmV9YDsodm9pZCAwKShaZSkudGhlbihjcj0+e2x0KG5ldyBVaW50OEFycmF5KGNyKSksRG4m''@;'; put 'put ''JkhyKCl9LGNyPT57aWYoIUx0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke1plfSIgZmFpbGVkLmA7THQoKX0pLERuJiZhcigpfSkoTHQsZ3MsUnIpOmdzKEx0KX0sWXQuc3RhdGljSW5pdCgpLCRhLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBZdC5FcnJub0Vycm9yKDQ0KSwkYS5kb2VzTm90''@;'; put 'put ''RXhpc3RFcnJvci5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiI7dmFyIFFOLGNJdD17YTooWmUsbHQsTHQpPT57dGhyb3cgbmV3IHBzKFplKS5pbml0KGx0LEx0KSxaZX0saTpmdW5jdGlvbiBHTihaZSxsdCxMdCwkdCl7dHJ5e2lmKGx0PVpzLmdldFN0cihsdCksbHQ9WnMuY2Fs''@;'; put 'put ''Y3VsYXRlQXQoWmUsbHQpLC04Jkx0KXJldHVybi0yODt2YXIgY3I9WXQubG9va3VwUGF0aChsdCx7Zm9sbG93OiEwfSkubm9kZTtpZighY3IpcmV0dXJuLTQ0O3ZhciBScj0iIjtyZXR1cm4gNCZMdCYmKFJyKz0iciIpLDImTHQmJihScis9InciKSwxJkx0JiYoUnIrPSJ4IiksUnImJll0Lm5v''@;'; put 'put ''ZGVQZXJtaXNzaW9ucyhjcixScik/LTI6MH1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSxmOmZ1bmN0aW9uIEUzKFplLGx0LEx0KXtacy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9WnMuZ2V0U3RyZWFt''@;'; put 'put ''RnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMDppZigoRG49RTYoKSk8MClyZXR1cm4tMjg7Zm9yKDtZdC5zdHJlYW1zW0RuXTspRG4rKztyZXR1cm4gWXQuZHVwU3RyZWFtKCR0LERuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuICR0''@;'; put 'put ''LmZsYWdzO2Nhc2UgNDp2YXIgRG49RTYoKTtyZXR1cm4gJHQuZmxhZ3N8PURuLDA7Y2FzZSAxMjpyZXR1cm4gRG49ZTUoKSxDcltEbiswPj4xXT0yLDB9cmV0dXJuLTI4fWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVybi1Y''@;'; put 'put ''ci5lcnJub319LHg6ZnVuY3Rpb24gJE4oWmUsbHQpe3RyeXt2YXIgTHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWnMuZG9TdGF0KFl0LnN0YXQsTHQucGF0aCxsdCl9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0''@;'; put 'put ''dXJuLSR0LmVycm5vfX0sazpmdW5jdGlvbiBLTihaZSxsdCxMdCl7WnMudmFyYXJncz1MdDt0cnl7dmFyICR0PVpzLmdldFN0cmVhbUZyb21GRChaZSk7c3dpdGNoKGx0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2FzZSAyMTUxNTpy''@;'; put 'put ''ZXR1cm4gJHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBEbj0kdC50dHkub3BzLmlvY3RsX3RjZ2V0cygkdCksY3I9ZTUoKTttcltjcj4+Ml09RG4uY19pZmxhZ3x8MCxtcltjcis0Pj4yXT1Ebi5jX29m''@;'; put 'put ''bGFnfHwwLG1yW2NyKzg+PjJdPURuLmNfY2ZsYWd8fDAsbXJbY3IrMTI+PjJdPURuLmNfbGZsYWd8fDA7Zm9yKHZhciBScj0wO1JyPDMyO1JyKyspdG5bY3IrUnIrMTddPURuLmNfY2NbUnJdfHwwO3JldHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4Omlm''@;'; put 'put ''KCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtjcj1lNSgpO3ZhciBYcj1tcltjcj4+Ml0sa2E9bXJbY3IrND4+Ml0sR289bXJbY3IrOD4+Ml0sSHM9bXJbY3IrMTI+PjJdLGFsPVtdO2ZvcihScj0wO1JyPDMyO1JyKyspYWwucHVzaCh0bltjcitScisxN10p''@;'; put 'put ''O3JldHVybiAkdC50dHkub3BzLmlvY3RsX3Rjc2V0cygkdC50dHksbHQse2NfaWZsYWc6WHIsY19vZmxhZzprYSxjX2NmbGFnOkdvLGNfbGZsYWc6SHMsY19jYzphbH0pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuICR0LnR0eT8oY3I9ZTUoKSxtcltjcj4+Ml09MCwwKTotNTk7Y2FzZSAy''@;'; put 'put ''MTUyMDpyZXR1cm4gJHQudHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gY3I9ZTUoKSxZdC5pb2N0bCgkdCxsdCxjcik7Y2FzZSAyMTUyMzppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBncz0kdC50dHkub3BzLmlvY3RsX3Rpb2Nn''@;'; put 'put ''d2luc3ooJHQudHR5KTtjcj1lNSgpLENyW2NyPj4xXT1nc1swXSxDcltjcisyPj4xXT1nc1sxXX1yZXR1cm4gMDtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goeG8pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PXhvLm5hbWUpdGhyb3cgeG87cmV0dXJuLXhvLmVycm5vfX0sdjpm''@;'; put 'put ''dW5jdGlvbiBxTihaZSxsdCxMdCwkdCl7dHJ5e2x0PVpzLmdldFN0cihsdCk7dmFyIERuPTI1NiYkdCxjcj00MDk2JiR0O3JldHVybiAkdCY9LTY0MDEsbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQsY3IpLFpzLmRvU3RhdChEbj9ZdC5sc3RhdDpZdC5zdGF0LGx0LEx0KX1jYXRjaChScil7aWYo''@;'; put 'put ''dHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxoOmZ1bmN0aW9uIFhOKFplLGx0LEx0LCR0KXtacy52YXJhcmdzPSR0O3RyeXtsdD1acy5nZXRTdHIobHQpLGx0PVpzLmNhbGN1bGF0ZUF0KFplLGx0KTt2YXIgRG49JHQ/RTYo''@;'; put 'put ''KTowO3JldHVybiBZdC5vcGVuKGx0LEx0LERuKS5mZH1jYXRjaChjcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Y3IubmFtZSl0aHJvdyBjcjtyZXR1cm4tY3IuZXJybm99fSxxOmZ1bmN0aW9uIGNvKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9WnMuZ2V0U3RyKGx0KSxsdD1a''@;'; put 'put ''cy5jYWxjdWxhdGVBdChaZSxsdCksJHQ8PTApcmV0dXJuLTI4O3ZhciBEbj1ZdC5yZWFkbGluayhsdCksY3I9TWF0aC5taW4oJHQsZXMoRG4pKSxScj10bltMdCtjcl07cmV0dXJuIG92KERuLEx0LCR0KzEpLHRuW0x0K2NyXT1Scixjcn1jYXRjaChYcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVy''@;'; put 'put ''cm5vRXJyb3IiIT09WHIubmFtZSl0aHJvdyBYcjtyZXR1cm4tWHIuZXJybm99fSxyOmZ1bmN0aW9uIGdyKFplKXt0cnl7cmV0dXJuIFplPVpzLmdldFN0cihaZSksWXQucm1kaXIoWmUpLDB9Y2F0Y2gobHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWx0Lm5hbWUpdGhyb3cg''@;'; put 'put ''bHQ7cmV0dXJuLWx0LmVycm5vfX0sdzpmdW5jdGlvbiBRaShaZSxsdCl7dHJ5e3JldHVybiBaZT1acy5nZXRTdHIoWmUpLFpzLmRvU3RhdChZdC5zdGF0LFplLGx0KX1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDtyZXR1cm4tTHQu''@;'; put 'put ''ZXJybm99fSxzOmZ1bmN0aW9uIFhhKFplLGx0LEx0KXt0cnl7cmV0dXJuIGx0PVpzLmdldFN0cihsdCksbHQ9WnMuY2FsY3VsYXRlQXQoWmUsbHQpLDA9PT1MdD9ZdC51bmxpbmsobHQpOjUxMj09PUx0P1l0LnJtZGlyKGx0KTpxcigiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQi''@;'; put 'put ''KSwwfWNhdGNoKCR0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kdC5uYW1lKXRocm93ICR0O3JldHVybi0kdC5lcnJub319LGo6KCk9PnFyKCIiKSx5OigpPT4xLHo6KFplLGx0LEx0KT0+TW4uY29weVdpdGhpbihaZSxsdCxsdCtMdCksbDpmdW5jdGlvbiBzdihaZSxsdCxM''@;'; put 'put ''dCwkdCxEbixjcixScixYcil7dmFyIGthPVpoKERuLGNyKTt0cnl7aWYoaXNOYU4oa2EpKXJldHVybiA2MTt2YXIgR289WnMuZ2V0U3RyZWFtRnJvbUZEKCR0KSxIcz1ZdC5tbWFwKEdvLFplLGthLGx0LEx0KSxhbD1Icy5wdHI7cmV0dXJuIG1yW1JyPj4yXT1Icy5hbGxvY2F0ZWQsR25bWHI+''@;'; put 'put ''PjJdPWFsLDB9Y2F0Y2goZ3Mpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWdzLm5hbWUpdGhyb3cgZ3M7cmV0dXJuLWdzLmVycm5vfX0sbTpmdW5jdGlvbiB6QShaZSxsdCxMdCwkdCxEbixjcixScil7dmFyIFhyPVpoKGNyLFJyKTt0cnl7dmFyIGthPVpzLmdldFN0cmVhbUZy''@;'; put 'put ''b21GRChEbik7MiZMdCYmWnMuZG9Nc3luYyhaZSxrYSxsdCwkdCxYcil9Y2F0Y2goR28pe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUdvLm5hbWUpdGhyb3cgR287cmV0dXJuLUdvLmVycm5vfX0sbzooWmUsbHQsTHQsJHQpPT57dmFyIERuPShuZXcgRGF0ZSkuZ2V0RnVsbFll''@;'; put 'put ''YXIoKSxjcj1uZXcgRGF0ZShEbiwwLDEpLFJyPW5ldyBEYXRlKERuLDYsMSksWHI9Y3IuZ2V0VGltZXpvbmVPZmZzZXQoKSxrYT1Sci5nZXRUaW1lem9uZU9mZnNldCgpLEdvPU1hdGgubWF4KFhyLGthKTtHbltaZT4+Ml09NjAqR28sbXJbbHQ+PjJdPSsoWHIhPWthKTt2YXIgSHM9eG89Pnt2''@;'; put 'put ''YXIgWHM9eG8+PTA/Ii0iOiIrIixBMT1NYXRoLmFicyh4byk7cmV0dXJuYFVUQyR7WHN9JHtTdHJpbmcoTWF0aC5mbG9vcihBMS82MCkpLnBhZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyhBMSU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LGFsPUhzKFhyKSxncz1IcyhrYSk7a2E8WHI/KG92KGFsLEx0''@;'; put 'put ''LDE3KSxvdihncywkdCwxNykpOihvdihhbCwkdCwxNyksb3YoZ3MsTHQsMTcpKX0sQTooWmUsbHQsTHQpPT4oKFplLGx0LEx0KT0+e3ZhciAkdD0oKFplLGx0KT0+e2t3Lmxlbmd0aD0wO2Zvcih2YXIgTHQ7THQ9TW5bWmUrK107KXt2YXIgJHQ9MTA1IT1MdDtsdCs9KCR0Jj0xMTIhPUx0KSYm''@;'; put 'put ''bHQlOD80OjAsa3cucHVzaCgxMTI9PUx0P0duW2x0Pj4yXToxMDU9PUx0P21yW2x0Pj4yXTpfaVtsdD4+M10pLGx0Kz0kdD84OjR9cmV0dXJuIGt3fSkobHQsTHQpO3JldHVybiBCYVtaZV0oLi4uJHQpfSkoWmUsbHQsTHQpLGM6KCk9PkRhdGUubm93KCkscDpaZT0+e3ZhciBsdD1Nbi5sZW5n''@;'; put 'put ''dGgsTHQ9MjE0NzQ4MzY0ODtpZigoWmU+Pj49MCk+THQpcmV0dXJuITE7Zm9yKHZhciAkdD0xOyR0PD00OyR0Kj0yKXt2YXIgRG49bHQqKDErLjIvJHQpO0RuPU1hdGgubWluKERuLFplKzEwMDY2MzI5Nik7dmFyIGNyPU1hdGgubWluKEx0LFZBKE1hdGgubWF4KFplLERuKSw2NTUzNikpO2lm''@;'; put 'put ''KEdEdChjcikpcmV0dXJuITB9cmV0dXJuITF9LHQ6KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBVQSgpLmZvckVhY2goKCR0LERuKT0+e3ZhciBjcj1sdCtMdDtHbltaZSs0KkRuPj4yXT1jciwoKFplLGx0KT0+e2Zvcih2YXIgTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl0bltsdCsrXT1aZS5j''@;'; put 'put ''aGFyQ29kZUF0KEx0KTt0bltsdF09MH0pKCR0LGNyKSxMdCs9JHQubGVuZ3RoKzF9KSwwfSx1OihaZSxsdCk9Pnt2YXIgTHQ9VUEoKTtHbltaZT4+Ml09THQubGVuZ3RoO3ZhciAkdD0wO3JldHVybiBMdC5mb3JFYWNoKERuPT4kdCs9RG4ubGVuZ3RoKzEpLEduW2x0Pj4yXT0kdCwwfSxnOiha''@;'; put 'put ''ZSxsdCk9PnsoWmU9PnsoKFplLGx0KT0+e3Rocm93IGx0fSkoMCxuZXcgSW8oWmUpKX0pKFplKX0sYjpmdW5jdGlvbiBySXQoWmUpe3RyeXt2YXIgbHQ9WnMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQuY2xvc2UobHQpLDB9Y2F0Y2goTHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJu''@;'; put 'put ''b0Vycm9yIiE9PUx0Lm5hbWUpdGhyb3cgTHQ7cmV0dXJuIEx0LmVycm5vfX0sZTpmdW5jdGlvbiBhSXQoWmUsbHQsTHQsJHQpe3RyeXt2YXIgY3I9KChaZSxsdCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLFhyPUduW2x0KzQ+PjJdO2x0''@;'; put 'put ''Kz04O3ZhciBrYT1ZdC5yZWFkKFplLHRuLFJyLFhyLCR0KTtpZihrYTwwKXJldHVybi0xO2lmKERuKz1rYSxrYTxYcilicmVhazt0eXBlb2YgJHQ8InUiJiYoJHQrPWthKX1yZXR1cm4gRG59KShacy5nZXRTdHJlYW1Gcm9tRkQoWmUpLGx0LEx0KTtyZXR1cm4gR25bJHQ+PjJdPWNyLDB9Y2F0''@;'; put 'put ''Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJyLm5hbWUpdGhyb3cgUnI7cmV0dXJuIFJyLmVycm5vfX0sbjpmdW5jdGlvbiBvSXQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1aaChsdCxMdCk7dHJ5e2lmKGlzTmFOKGNyKSlyZXR1cm4gNjE7dmFyIFJyPVpzLmdldFN0''@;'; put 'put ''cmVhbUZyb21GRChaZSk7cmV0dXJuIFl0Lmxsc2VlayhScixjciwkdCksYWE9W1JyLnBvc2l0aW9uPj4+MCwoWnI9UnIucG9zaXRpb24sK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0''@;'; put 'put ''OTY3Mjk2KT4+PjA6MCldLG1yW0RuPj4yXT1hYVswXSxtcltEbis0Pj4yXT1hYVsxXSxSci5nZXRkZW50cyYmMD09PWNyJiYwPT09JHQmJihSci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKFhyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Yci5uYW1lKXRocm93IFhyO3JldHVy''@;'; put 'put ''biBYci5lcnJub319LGQ6ZnVuY3Rpb24gbEl0KFplLGx0LEx0LCR0KXt0cnl7dmFyIGNyPSgoWmUsbHQsTHQsJHQpPT57Zm9yKHZhciBEbj0wLGNyPTA7Y3I8THQ7Y3IrKyl7dmFyIFJyPUduW2x0Pj4yXSxYcj1HbltsdCs0Pj4yXTtsdCs9ODt2YXIga2E9WXQud3JpdGUoWmUsdG4sUnIsWHIs''@;'; put 'put ''JHQpO2lmKGthPDApcmV0dXJuLTE7aWYoRG4rPWthLGthPFhyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9a2EpfXJldHVybiBEbn0pKFpzLmdldFN0cmVhbUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5v''@;'; put 'put ''RXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fX0sTGw9ZnVuY3Rpb24gTXIoKXthcigpO3ZhciBMdD1mdW5jdGlvbiBOcigpe3JldHVybnthOmNJdH19KCk7cmV0dXJuICRuPz89ZnVuY3Rpb24gcHIoKXt2YXIgWmU9ImdyYXBodml6bGliLndhc20iO3JldHVybiBi''@;'; put 'put ''bihaZSk/WmU6ZnVuY3Rpb24geWUoWmUpe3JldHVybiIiK1plfShaZSl9KCksZnVuY3Rpb24gc3IoWmUsbHQsTHQsJHQpe3JldHVybiBaZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxibihsdCl8fChaZT0+WmUuc3RhcnRzV2l0aCgiZmls''@;'; put 'put ''ZTovLyIpKShsdCl8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD9abihsdCxMdCwkdCk6ZmV0Y2gobHQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKERuPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhEbixMdCkudGhlbigkdCxmdW5jdGlvbihScil7cmV0dXJu''@;'; put 'put ''IHJ0KGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtScn1gKSxydCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxabihsdCxMdCwkdCl9KSl9KHB0LCRuLEx0LGZ1bmN0aW9uIGx0KCR0KXshZnVuY3Rpb24gWmUoJHQsRG4pe3JldHVybiBkdD0o''@;'; put 'put ''TGw9JHQuZXhwb3J0cykuQixPbigpLGZ1bmN0aW9uIHZ0KFplKXtKbi51bnNoaWZ0KFplKX0oTGwuQyksSHIoKSxMbH0oJHQuaW5zdGFuY2UpfSkuY2F0Y2goZikse319KCkseDdlPShkLl93ZWJpZGxfZnJlZT1aZT0+KGQuX3dlYmlkbF9mcmVlPUxsLkQpKFplKSxkLl9mcmVlPVplPT4oZC5f''@;'; put 'put ''ZnJlZT1MbC5FKShaZSksZC5fd2ViaWRsX21hbGxvYz1aZT0+KGQuX3dlYmlkbF9tYWxsb2M9TGwuRikoWmUpLGQuX21hbGxvYz1aZT0+KGQuX21hbGxvYz1MbC5HKShaZSksZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1aZT0+KHg3ZT1kLl9lbXNjcmlwdGVuX2Jp''@;'; put 'put ''bmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPUxsLkgpKFplKSksRTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPShaZSxsdCk9PihFN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9TGwuSSkoWmUsbHQpLFQ3ZT1kLl9lbXNjcmlwdGVuX2Jp''@;'; put 'put ''bmRfR3JhcGh2aXpfdmVyc2lvbl8wPSgpPT4oVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9TGwuSikoKSxBN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPSgpPT4oQTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJy''@;'; put 'put ''b3JfMD1MbC5LKSgpLGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPShaZSxsdCxMdCk9PihrN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1MbC5MKShaZSxsdCxMdCksRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9s''@;'; put 'put ''YXlvdXRfMz0oWmUsbHQsTHQsJHQpPT4oRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1MbC5NKShaZSxsdCxMdCwkdCksSTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9KFplLGx0LEx0LCR0KT0+KEk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRf''@;'; put 'put ''R3JhcGh2aXpfYWN5Y2xpY18zPUxsLk4pKFplLGx0LEx0LCR0KSxSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz0oWmUsbHQsTHQsJHQpPT4oUjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel90cmVkXzM9TGwuTykoWmUsbHQsTHQsJHQpLEw3ZT1kLl9lbXNjcmlw''@;'; put 'put ''dGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9KFplLGx0LEx0LCR0LERuKT0+KEw3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9TGwuUCkoWmUsbHQsTHQsJHQsRG4pLE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRf''@;'; put 'put ''MD1aZT0+KE83ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1MbC5RKShaZSksUDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPShaZSxsdCk9PihQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3Nl''@;'; put 'put ''dF9sYXlvdXRfcmVzdWx0XzE9TGwuUikoWmUsbHQpLEY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfb3V0RmlsZV8wPVplPT4oRjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9TGwuUykoWmUpLEg3ZT1kLl9lbXNj''@;'; put 'put ''cmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPShaZSxsdCk9PihIN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX291dEZpbGVfMT1MbC5UKShaZSxsdCksTjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19u''@;'; put 'put ''dW1fcmV2XzA9WmU9PihON2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1MbC5VKShaZSksVjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9KFplLGx0KT0+KFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRf''@;'; put 'put ''R3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPUxsLlYpKFplLGx0KSxCN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8wPVplPT4oQjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1MbC5XKShaZSksajdlPWQuX2Vtc2Ny''@;'; put 'put ''aXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT0oWmUsbHQpPT4oajdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT1MbC5YKShaZSxsdCksejdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1aZT0+KHo3ZT1kLl9l''@;'; put 'put ''bXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9TGwuWSkoWmUpLFU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9KFplLGx0KT0+KFU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9TGwuWikoWmUsbHQp''@;'; put 'put ''LFo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1aZT0+KFo3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1MbC5fKShaZSksVzdlPShaZSxsdCk9PihXN2U9TGwuYWEpKFplLGx0KTtmdW5jdGlvbiBZN2UoKXtOdD4wfHwoZnVu''@;'; put 'put ''Y3Rpb24gd2koKXtabyh6cil9KCksTnQ+MCl8fGZ1bmN0aW9uIFplKCl7UU58fChRTj0hMCxkLmNhbGxlZFJ1bj0hMCwhSnQmJihmdW5jdGlvbiBlYSgpeyFkLm5vRlNJbml0JiYhWXQuaW5pdGlhbGl6ZWQmJll0LmluaXQoKSxZdC5pZ25vcmVQZXJtaXNzaW9ucz0hMSxkNC5pbml0KCksWm8o''@;'; put 'put ''Sm4pfSgpLGgoZCksZnVuY3Rpb24gZmEoKXtabyhJcil9KCkpKX0oKX1mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBlVihaZSl7cmV0dXJuKFplfHxzZikuX19jYWNoZV9ffWZ1bmN0aW9uIEd0ZShaZSxsdCl7dmFyIEx0PWVWKGx0KSwkdD1MdFtaZV07cmV0dXJuICR0fHwoKCR0PU9iamVjdC5j''@;'; put 'put ''cmVhdGUoKGx0fHxzZikucHJvdG90eXBlKSkucHRyPVplLEx0W1plXT0kdCl9ZC5VVEY4VG9TdHJpbmc9djAsSG49ZnVuY3Rpb24gWmUoKXtRTnx8WTdlKCksUU58fChIbj1aZSl9LFk3ZSgpLChzZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1z''@;'; put 'put ''ZixzZi5wcm90b3R5cGUuX19jbGFzc19fPXNmLHNmLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9c2YsZC5nZXRDYWNoZT1lVixkLndyYXBQb2ludGVyPUd0ZSxkLmNhc3RPYmplY3Q9ZnVuY3Rpb24gZ0l0KFplLGx0KXtyZXR1cm4gR3RlKFplLnB0cixsdCl9LGQuTlVMTD1HdGUoMCks''@;'; put 'put ''ZC5kZXN0cm95PWZ1bmN0aW9uIG1JdChaZSl7aWYoIVplLl9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3QuIChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtaZS5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBlVihaZS5fX2NsYXNzX18pW1plLnB0cl19LGQu''@;'; put 'put ''Y29tcGFyZT1mdW5jdGlvbiB2SXQoWmUsbHQpe3JldHVybiBaZS5wdHI9PT1sdC5wdHJ9LGQuZ2V0UG9pbnRlcj1mdW5jdGlvbiB5SXQoWmUpe3JldHVybiBaZS5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24gYkl0KFplKXtyZXR1cm4gWmUuX19jbGFzc19ffTt2YXIgV3M9e2J1ZmZlcjowLHNp''@;'; put 'put ''emU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlKCl7aWYoV3MubmVlZGVkKXtmb3IodmFyIFplPTA7WmU8V3MudGVtcHMubGVuZ3RoO1plKyspZC5fd2ViaWRsX2ZyZWUoV3MudGVtcHNbWmVdKTtXcy50ZW1wcy5sZW5ndGg9MCxkLl93ZWJpZGxfZnJlZShXcy5idWZmZXIpLFdz''@;'; put 'put ''LmJ1ZmZlcj0wLFdzLnNpemUrPVdzLm5lZWRlZCxXcy5uZWVkZWQ9MH1Xcy5idWZmZXJ8fChXcy5zaXplKz0xMjgsV3MuYnVmZmVyPWQuX3dlYmlkbF9tYWxsb2MoV3Muc2l6ZSksQ24oV3MuYnVmZmVyKSksV3MucG9zPTB9LGFsbG9jKFplLGx0KXtDbihXcy5idWZmZXIpO3ZhciBEbiwkdD1a''@;'; put 'put ''ZS5sZW5ndGgqbHQuQllURVNfUEVSX0VMRU1FTlQ7cmV0dXJuICR0PVZBKCR0LDgpLFdzLnBvcyskdD49V3Muc2l6ZT8oQ24oJHQ+MCksV3MubmVlZGVkKz0kdCxEbj1kLl93ZWJpZGxfbWFsbG9jKCR0KSxXcy50ZW1wcy5wdXNoKERuKSk6KERuPVdzLmJ1ZmZlcitXcy5wb3MsV3MucG9zKz0k''@;'; put 'put ''dCksRG59LGNvcHkoWmUsbHQsTHQpe0x0Lz1sdC5CWVRFU19QRVJfRUxFTUVOVDtmb3IodmFyICR0PTA7JHQ8WmUubGVuZ3RoOyR0KyspbHRbTHQrJHRdPVplWyR0XX19O2Z1bmN0aW9uIGxmKFplKXtpZigic3RyaW5nIj09dHlwZW9mIFplKXt2YXIgbHQ9ZnVuY3Rpb24geDMoWmUsbHQsTHQp''@;'; put 'put ''e3ZhciAkdD1MdD4wP0x0OmVzKFplKSsxLERuPW5ldyBBcnJheSgkdCksY3I9RTEoWmUsRG4sMCxEbi5sZW5ndGgpO3JldHVybiBsdCYmKERuLmxlbmd0aD1jciksRG59KFplKSxMdD1Xcy5hbGxvYyhsdCx0bik7cmV0dXJuIFdzLmNvcHkobHQsdG4sTHQpLEx0fXJldHVybiBaZX1mdW5jdGlv''@;'; put 'put ''biB0NSgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIHJvKFplLGx0KXtaZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIpLHRoaXMucHRy''@;'; put 'put ''PUU3ZShaZSxsdCksZVYocm8pW3RoaXMucHRyXT10aGlzfXJldHVybih0NS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10NSx0NS5wcm90b3R5cGUuX19jbGFzc19fPXQ1LHQ1Ll9fY2FjaGVfXz17fSxkLlZvaWRQdHI9dDUsdDUucHJvdG90eXBl''@;'; put 'put ''Ll9fZGVzdHJveV9fPXQ1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3g3ZSh0aGlzLnB0cil9LChyby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1ybyxyby5wcm90b3R5cGUuX19jbGFzc19fPXJvLHJvLl9fY2FjaGVfXz17fSxk''@;'; put 'put ''LkdyYXBodml6PXJvLHJvLnByb3RvdHlwZS52ZXJzaW9uPXJvLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKFQ3ZSgpKX0scm8ucHJvdG90eXBlLmxhc3RFcnJvcj1yby5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEE3ZSgpKX0scm8ucHJv''@;'; put 'put ''dG90eXBlLmNyZWF0ZUZpbGU9cm8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWmUsbHQpe3ZhciBMdD10aGlzLnB0cjtXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYo''@;'; put 'put ''bHQpLGs3ZShMdCxaZSxsdCl9LHJvLnByb3RvdHlwZS5sYXlvdXQ9cm8ucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO3JldHVybiBXcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmxmKFplKSxsdD1sdCYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6bGYobHQpLEx0PUx0JiYib2JqZWN0Ij09dHlwZW9mIEx0P0x0LnB0cjpsZihMdCksdjAoRDdlKCR0LFplLGx0LEx0KSl9LHJvLnByb3RvdHlwZS5hY3ljbGljPXJvLnByb3RvdHlwZS5hY3ljbGljPWZ1bmN0aW9uKFplLGx0LEx0KXt2YXIgJHQ9dGhp''@;'; put 'put ''cy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksISFJN2UoJHQsWmUsbHQsTHQpfSxyby5w''@;'; put 'put ''cm90b3R5cGUudHJlZD1yby5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksUjdlKCR0LFplLGx0LEx0KX0scm8ucHJvdG90eXBlLnVuZmxhdHRlbj1yby5wcm90b3R5cGUudW5mbGF0dGVuPWZ1bmN0aW9uKFplLGx0LEx0LCR0KXt2YXIgRG49dGhpcy5wdHI7cmV0dXJuIFdzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksJHQmJiJvYmplY3QiPT10eXBlb2YgJHQmJigkdD0kdC5wdHIpLHYwKEw3ZShEbixaZSxsdCxMdCwkdCkpfSxy''@;'; put 'put ''by5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHYwKE83ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9cm8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PWZ1bmN0''@;'; put 'put ''aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7V3MucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpsZihaZSksUDdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvLnByb3RvdHlwZSwibGF5b3V0X3Jlc3VsdCIse2dldDpyby5wcm90b3R5cGUuZ2V0X2xh''@;'; put 'put ''eW91dF9yZXN1bHQsc2V0OnJvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdH0pLHJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPXJvLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHYwKEY3ZSh0aGlzLnB0cikpfSxyby5wcm90b3R5cGUu''@;'; put 'put ''c2V0X2FjeWNsaWNfb3V0RmlsZT1yby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLEg3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfb3V0RmlsZSIse2dldDpyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZSxzZXQ6cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGV9KSxyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1yby5wcm90b3R5cGUuZ2V0X2Fj''@;'; put 'put ''eWNsaWNfbnVtX3Jldj1mdW5jdGlvbigpe3JldHVybiBON2UodGhpcy5wdHIpfSxyby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1yby5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbihaZSl7WmUmJiJvYmplY3QiPT10eXBlb2YgWmUmJihaZT1aZS5wdHIpLFY3''@;'; put 'put ''ZSh0aGlzLnB0cixaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsImFjeWNsaWNfbnVtX3JldiIse2dldDpyby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3JldixzZXQ6cm8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXZ9KSxyby5wcm90b3R5cGUuZ2V0X3Ry''@;'; put 'put ''ZWRfb3V0PXJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoQjdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9cm8ucHJvdG90eXBlLnNldF90cmVkX291dD1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1dzLnByZXBhcmUoKSxa''@;'; put 'put ''ZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLGo3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsInRyZWRfb3V0Iix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQsc2V0OnJvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXR9KSxyby5w''@;'; put 'put ''cm90b3R5cGUuZ2V0X3RyZWRfZXJyPXJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9ZnVuY3Rpb24oKXtyZXR1cm4gdjAoejdlKHRoaXMucHRyKSl9LHJvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9cm8ucHJvdG90eXBlLnNldF90cmVkX2Vycj1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRy''@;'; put 'put ''O1dzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6bGYoWmUpLFU3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyby5wcm90b3R5cGUsInRyZWRfZXJyIix7Z2V0OnJvLnByb3RvdHlwZS5nZXRfdHJlZF9lcnIsc2V0OnJvLnByb3RvdHlwZS5zZXRf''@;'; put 'put ''dHJlZF9lcnJ9KSxyby5wcm90b3R5cGUuX19kZXN0cm95X189cm8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WjdlKHRoaXMucHRyKX0sdn0pO2Z1bmN0aW9uIFp4dCgpe3JldHVybiBGdGV8fChGdGU9ZnVuY3Rpb24gTnh0KGMsbCl7Zm9yKHZhciBhPVtdLGQ9KyFsLGg9MCxm''@;'; put 'put ''PTA7Yy5sZW5ndGg7KXt2YXIgdj1BeHQoYyxkfHxsKTtpZigib2JqZWN0Ij09dHlwZW9mIHYpe2ZvcihkPyhsPW51bGwsdi53Lmxlbmd0aD09di51JiYoYS5wdXNoKGw9di53KSxmKz12LnUpKTooYS5wdXNoKGwpLHYuZT0wKTshdi5sOyl7dmFyIE09Rnh0KGMsdixsKTtNfHxlMCg1KSxsP3Yu''@;'; put 'put ''ZT12Lnk6KGEucHVzaChNKSxmKz1NLmxlbmd0aCx4eHQodi53LDAsTS5sZW5ndGgpLHYudy5zZXQoTSx2LncubGVuZ3RoLU0ubGVuZ3RoKSl9aD12LmIrNCp2LmN9ZWxzZSBoPXY7Yz1jLnN1YmFycmF5KGgpfXJldHVybiBmdW5jdGlvbihjLGwpe2lmKDE9PWMubGVuZ3RoKXJldHVybiBjWzBd''@;'; put 'put ''O2Zvcih2YXIgYT1uZXcgSXUobCksZD0wLGg9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGY9Y1tkXTthLnNldChmLGgpLGgrPWYubGVuZ3RofXJldHVybiBhfShhLGYpfShmdW5jdGlvbiB6eHQoYyl7bGV0IGw9Yy5sZW5ndGgsYT1bXSxkPTAsaD0wLGY9LTE7Zm9yKGxldCB2PTA7djxsO3YrKyl7''@;'; put 'put ''bGV0IE09J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoY1t2XSk7aWYoLTEhPT1NKWlmKGY8MClmPU07ZWxzZXtmKz05MSpNLGR8PWY8PGgsaCs9KDgxOTEm''@;'; put 'put ''Zik+ODg/MTM6MTQ7ZG97YS5wdXNoKDI1NSZkKSxkPj49OCxoLT04fXdoaWxlKGg+Nyk7Zj0tMX19cmV0dXJuIGY+LTEmJmEucHVzaCgyNTUmKGR8Zjw8aCkpLG5ldyBVaW50OEFycmF5KGEpfSgndjcjYVNYVW5gREBRPCx6M15YJmtVMmh0ejh7L3BZRG1uP3skSmp6MnJfP0psXis2bkZvPXhJ''@;'; put 'put ''PCZCOUZCVit3YjtYYXxxb1J6Z2JlS3NCU15+XXh6dj49fC5xPyhNPDhHRDVHTCNLe3NbUzQhXkM0THlyTmFMS29Sa0VKa0xMbHtmMFY5MDw7XlFwdWd5NUElKSYpWjpzZzpoLn1gOHV1VFtXQkEoeSl1eXxCVUglOCFFKmBmMXdCX3hbJkA1cUc1JWImfmplJjdEYkokTGx6VUM+V14vO2Zoezx8''@;'; put 'put ''R0J5Iil+bCVzXzFhOG0+ZDBYUEFzVDlMYlcoaWpCZU5XV1tAXm0kKDp2fW97UWsudGh+PTsoMWE4XjFtfU1+ezw1P1NQKF4pWzJMc2BNYHU5KXlafWIvSkR+NkZMdFpzbV5GbHxrSFgsNEZVenEqT2F6PUJfNnM3KVNkNExdTGN8bHh6dmhoPzZ0RDglTl1AJj84aU88VVBzWzVKcSNaUmdafWsz''@;'; put 'put ''RHFIPSUyUUR7RHRmfW93RUo2SWRyWUc+VnVFJE1Wd10sJn5PLHFMaUImNW0/IVlHZ2kqaVcrIlFQeSQ/VVprY2E+MGdEbyE3R3x+ZzVkS3xbMy97NX5vJDB2JUpsMTgyQXF+PXplOH5FekhlX1tRRGNZMX0oZSxLSHUxVTspWFhXQH0xJmd0LH5gMnAvOn1YZFluIU5IZl1pNzZeWCNRcXlvZ3A/''@;'; put 'put ''JTckWHN5LFomel8jMmc7JSwlbjleeXJOX3Z5KCsxU3FgZGh9XSZsYWtoTH1yJngzNSpic3pbW3ddd343fFE1bHIrcnZreWk1VHw9WiFLOX1IPD1yNlNfRjhqTlMpfT1SX1NfL09nfjovajxmOEQ/Ql9tfSI0M3RoKmchVSZKVzMkUWRAPXVbKm1YTmNwezt1YyZKXU9QUSEwJGZXOCljSlE2ZTpr''@;'; put 'put ''NUAiIyQ0czY8UDZOYjAwQXEkb2NbTSZDakhDX2I3c2FgW2hGLyR3NVd2RzN0SCguYihLZUhSd1h3Lyp1Pj1dciNwTFc8N19sUVRuKDE+aG9BZXpieXU+fHo/djJKcj1FJWMiZkA4Ll1NKllVIk9HfjFjYjBAODMqWzAxOXclO11tb3RpPnVEcz9wPUUmY0hRd08yP3kmcVkjZCNjfnFuRFJ3T0Bh''@;'; put 'put ''O155U3VCL19qNUlIWnhhJGlFcygwam08WXNFSG0wXWlXe2MyckEuKHkpc0BOX2M6Z05qXUprMyZaKSNfWyNOXkVaYk8jImBCfDd4S2Y+XjZUeEx3N0QvXnlqcllVN2JpZzJzVEBMQEFbbWFFcztNLGI/bTZ2VTFSd3hvei5afEFhK2B+cVRdQC87bl55KmQyI3BDSzkxZ1hOR1BtIm5ZQVYhantK''@;'; put 'put ''eTVhfHxwdm9fRGo3UXA0MHwrTmZRVlo3RHh+P3dsUXAhQ1VOa2xwRTthWjpvY0BNISQ7Lz9hUyhoMm9uQEU0Y0hRSkQ4c1FRK0NxNSxOODpJZnJ7T24+Nl4lSm47VTM8Ly48bTQmWE9XPTdPU1ssSlU1N1IoLyZiMDddWzJBRlp4YUhwMzVheDtJZXNUQEYyc1NpW2hHJjp+e0lwc0xZRS56NlR8''@;'; put 'put ''RTV4YT9Ge09XUSo4XkQlJTJkXWhYQjZFJm1VNX1pa01fK3ZmanoudjB3Vzd+YHBXX20kSVMifD1UIz4vWlZ+QjhGTDw2QE5QfS5nVzErTDw2KmNYZ1Nic2NFSlY3eG9sU0U2JGMjeChwPyRITE4pQnxuNmFoOVBfaisqJSokb10zWCF2RUxdXSRYX3c2ZDZJbCFkQFM2M0gmey9kRjMzZT85KmR4''@;'; put 'put ''SVc3aGRVRDheXnpddCYzSj9jMDYiYj9tQyhDKDVzWVVuInZ9UTo6bnxhIXRsVjwzQE5Te10jQjR5Pnk1Xlt+Ll55SGo5KmB7QzhKTCsjcm4rdkt9L2Y/Uz5AJjw0QDFPQldIV25nLnR9Tzd3cDBUOUw1PFAxOHdbMm06PThdXyE7LytsL3RFWmloOCFWVDMqQEMzSFBQfkhpWi9xXXtwNGU7S28/''@;'; put 'put ''QHVaPTN5I2V6cz1wWk1TQzVbQn4oYDdeJGpAblRnZWozOTNoPkN5YyVWL1F5JW5ESlFhQjN7KTB2QzM7I0traS5BNm44Rz9XIyhsJHwiPGF+WH5KWG1PNjl5TDt0X1l0P1d3WVp4YTk9S3c4OSJgNHlBezs9YyZnLm1AVGVzR1NubSJnZDpZNXg5fEI1Qk1hWVg1NUxgSEFELmZTMmBrY3YlbHMj''@;'; put 'put ''X2tddE1Re3NzWSUifndTOnR8WzhTTn5ITjhYNTc5fHF+OGVsbCJWPVd7OytoLEQuNGJWZ0B7aVVyLlg5Q2g7SW57Ons7SV4uYVpHTFNaOXBUZ1N8KlVTfkVLUTkpX19MXnkrW0EvaDpSVVE1TkxFeXFeMWNtZFJTOn1WL0M4RmoxIXQ+Vkt7eXxeTl5dX05HKXdJdklDT287O2w5WClbJmR+bnBE''@;'; put 'put ''RmY9T3kuQ2Y5YikiPTxnO21uOV9rQ25PfVo5YVlJcjY5dWg0dV9TVDpoN2Q3bj5ObTU2QGYuQmQhPllaPH1rS0AxPF9hPDVIOGJrN2Qjb0ozYnAqOUxlL1NdI24kKFZuZzMmTFtNcWNYVlRzN0RRR3BTUDhJJCUyUkw9UFNaUiRIemUldz8sYEV8e3xsIzpPJX17Q3NNekFwX3ojbmp7KnNia0hN''@;'; put 'put ''ZEt+a204QUw4N0s5I2hNXnBaIitgeVVhSXs7L2hHRShVO2VbdWFEVm46fnF7K2Q4RVckZVhVUTVvMjVYcEchfEgyUHAzOCMsTGQudGpwWE08OnxjKTAsL3BHX2Q2TUNTOn0oSzh7ZFlje3spOVRIVDtkVis4X2pMNn5hSUQoZDtXZWhyZDtXZXEkKkFdOiRIIm88Ymw7c31qZ0gvZDhdZXhpU1Vj''@;'; put 'put ''ZHoje0BWZWlfYmRvRGY+eVpsWjFsY34zVj44YX5oKXsmJlZmUW5dW3YpS0d8NEkkRylgendBJEhnIW8vTyNWS1g2cmZ0TEUwOF1Fd21UNlZyXTIjNXQ7R1lNPWFYPS8kSGA3JTJSIXM5WX5mMilNVmdeXz8mJUNnKjxuUlplSjIhL11IVVp2SVt5b25Rci5VQz58TEBDVFVAfGBMKjdAYnU/Xipj''@;'; put 'put ''fmczUlVXalRRcldGNygzJXNePnglY0ZnPiZDZzc5aDZlbCVjaVRCZWFGcSpbMEJ+VitEWzNyaCxfdnllNX58P25aW0dfeCQ+TSVuR1dUQjB7OEMvLDpzSVJLNilSWXwhSUFdVEZnPy9tWlg0SW1aOnVTVi5vVzMwPEZMPSRkQkxfTGVwV21COjp4ZXg1VE5lRjk5NnVEIys4VTQ1fEx3W0lySVo+''@;'; put 'put ''VHklVTtdYHUlKEorZTxkWyNreTVgRD5USFN7cHZMcnhySHB8SVY3O1RBbltMS2ZyRWE5XmV5UGRdTTk+ajpxMyxIbDRtNzI5SXFhQjBXLmQ4X216IVtLMT5kISg9c2V2OmAqdnlHfSttNz16bGE4eDclMDVUPWtdJkpLNjIzIkpzL1JnMi9bdndxWW4yamZ+PnllbHlKZi8pRDhbM1tlXWViPlNt''@;'; put 'put ''K0ZxVUk8ZCJiO0c4RDh4fll3VHZRWkRZbzUrSVZxS3NRVn5IUn06amxTaF9MW2JMNkhNOXdseU5GJVJzLHMmLDQrRihBRkcldH1qWk9wI3ZRWl9YazZkUGIlcm0iemgzM2pBeCNZSn1wLGw4Kkt5ZnFrVj1yOTlMVzchI2ElfVBQPSVjbm0zN1RUL2R+OGwpd28yXWVdUntsNV9KbTwqUD5XbSlh''@;'; put 'put ''KiY3VH1ZdyVsfm9uUXk7amhfMjJET2I+RyU1Ikk4NVMweT1la3BVLz02V10mRkZ5aT45eHIqeTZ2L1NbXU1dY3BLel9dSEx0WSZoZiQrR3gpZ34qZzkmNHJTbXVaSFB8PDQ1ZndRQHEpfWB1TTlxWWR8Qz54VXsiZzM9bDBbUCN+Mk1KdU9mSnUySCpURmd5cj5dS18rdlp1MDorbEJXSzV1WGJY''@;'; put 'put ''M1N8YX17bF1DUSZvIU13flIzWmE6KlsqemZfYTg1QTlacyFDVUAyTn54eS41YGR6aTdVWzpPPWk7Q3ByRlNaREJSeiNdODYsRkxdJEUrRFcxKz50ejtGWTc5LmwkRXBkKzUlPChwa0RNZExzRFFkJFJmbl9dbVR+eSZKb3d6UmZwVDJXSzEvIyx9KG5Taj5YJDJVRH1OUDE2VmApNCtnNiU8eS40''@;'; put 'put ''dXNkN29XIWEpJUo4JThSTlklXjRqTUtgYmRAQC9Rb0hdUURLcSFhQHRIWjxaa11ZdmM0czZxaV0/OmMlOm14fEN7cClKZEZXPVVLSW98PHJPaWF0fT9iSiQ6Y1NiZjdYS3NnN3sofnM/SkRzY2YwOztAcWxyJXMuWn0kLyhoV0NALlRaWWlrO1V+KCsqOHNEUV1seXpsNyYoSltTZW0oZ3RvXjEr''@;'; put 'put ''RDF3dHFGeGxEOHMoezhWYXhyNU9iN3hqUmNhbEFLO3t3b0hQaH0uI0s4dEttOWY5dDM/WVAqVVRwZ11ben5JJmEpZSh0S0deRl9gKmo3Mj4/T102Kl4veWdbZTxRIXxwV2oheEYlVnVwJTFzIyw/NW03ZSt5cXtpYFNEOXV8YGY+M1tQVTpLfk1qRHRSX295M29WdkBwfVB2NVZYRT4xfWBrKEt7''@;'; put 'put ''Klc9eXJCfV5ZQmQ2NU5sbH1gay5mTT1LeFlaSnl5d1ckcm1RZCU6LFA0OVglPCk/R0t7TSMoInY9UFgmK2F+fSReeSYmeTNBJXsuJEpnYEdKYzJFcWRyYCtJSmJaODJ7WltUQT45X1orYjoqLkMyPHZ9WjxdJndaKyJhMn5FK19eWnZSWmpNMVNyQig1N1RTXy5kfiFDMTdePjZwRDN9O0J9eEYs''@;'; put 'put ''RD9reE1qaWNaTmZkKG5wdVFHY31nX3ZtP1Rwej09c2Nxb0oqMm1rWGsxVDFMKj5sWmh9aSM6Q3h5JjNvSDR2eHw8SmUpYi9kITptVjNdckB9Tl43QngoYkZvOFZtPGdPS1E0OXgzXTNqKVN+OU9HdCZ7SUpjJj8qVj1nPilgY1gvQTkjUTklWlM5MX0xJWVqQ2VfYmhWZltub3RpTjVCOjllW1BT''@;'; put 'put ''Wk9kbi49akxrIj9WTDVjRF82VjlPazBgTmYsSUZaYWZHJHA8Y0E4UEUyJV9bUUR6VlhdOj19Tlg3cDRgUGpgWHl0WTA+d2x5PSM+VWY/UzZNPj9QZypOMT4pTnBhWFk6JChWRldMZG9bNSxdaFIuY0giJTBCUkU0TDxvJmk9JjRMN3JzVn5bci5sfURiVSw4PXRlNlFoaVprKnQrWT1AeTg3YjR6''@;'; put 'put ''Ki92YWdda1QkWWQkLF46IigwLC9FRksjbSImLDYpKSxGZ1B2fnd3JjkrOG4weWZ3PmF1WUpjX1tSdypsXV46Y0gkZjc0PTRJSTNrKHNWMnFWPTZSL3hBT2csaVcuMlZrSmo9bU1eS3wlRiVoYkBrZ0pxfWxab0M2ckY5bSN7ND0wMFQxVndULmQ4RX1uSjU1RCQ2L0hkVDA9I24uR3tbOF1+bSQv''@;'; put 'put ''OjJAaDJHTCgmfiRmZUImO1RdT3AybT9mMX17KUtDKG1pQGZnc2FmOTpaOkh+LEddOCZWc2lESSw2IXlUOXJGI1MhOi9tWngmLmlAbmVWLmF+KEt9Pj9kMXI3bDxedCYsbk1KeTVsN2hdIT0hPk8jaDwocD1FI2NqTy5eals7VFRdbn5wLDNlYlo8VEhRMS5iN3glJng6ZUpxWzVYcG4uTCNtN0k1''@;'; put 'put ''VTx1Xz9HTCptTFg5MEpwUm1TV2UuaCJBREk2NnUyW1FkIlt3amUiaEJCP0ViP3tlOShGQmpJcXFzODIoS0N9S0ZCXVF5dGl4XVBPR3xlU3RJRCQuTHZ8OTF0Y0Q6OmdZL2h9QVdIaUNCUDApJndhcSJBe0h1bXBJWXRKRWkmIl02KEtDV2lldV05MnR3RGY3Vng3KG9DO1JHdSI7RGlFRDo6XTZg''@;'; put 'put ''UTQiQ0YvSDNQOyNxMWN0W0V6I1ZsVkU5KHVDMG91Ml85ISJtRitwNTdjPCl5KndpZT5pMyErK0ZOIkQ4JmM8eitHdWhScE5Tanl6WEM9a2tFYWp0KWpGJkBiZjErV3V3VSUqb3giUSIockIiV2hOVGpiTWNGaUt8ZS4oV0MmTWlhXVFuImtEJTF+bE50I3QkUHM8WTs6eSNDLig7SDdSMkwwRjAi''@;'; put 'put ''XWFiamZNPEZ0ZklUVGpYWFNNflI0ITZMXklCLlZCM1JeKDtDNHpxQ1RqO3Q4RmwzckNUamVYd1NdZyYqVGpnWCxOVmRmPD15d0R3O3BOVWpfdHNMP2ovST95K3hDZXxqVWpxWHhQbiwzUilMRElgbmNmW3lORWA8MntVajBYYlJzb2Y8XXlsRT8hYnJlZl55dEVFP1R2Vmo4WGBUNTdkPF95KkVw''@;'; put 'put ''QGY7VmolWDFUS3U1IT9MRkthLlBtRSFzdVpwSSQ+MXx5V0Y5XzdQUXR2WHZWSW9kPGcidlgvMzhwOmM6ViIoNGREUDtWJD9PUG9pOlZiYH1ER286VkQpOWVoQjZySEIoSnl8XjM4fFNDSC5dS0Y/dVBCLF9LRz8+UCo3OlZ2KXV4MCV0W1p8cUN2QF1LST9sS0Apc0Y8cjZAelFbfF9LSj8qS2hC''@;'; put 'put ''XzJgVHxfeUZjR3szYz8qKmBXVlpifGIsNlhvWThydXUjd3F5MV9YRylPK0g1X35JMkxfM1A/RU4pbz9WXj9VTkEwP1ZoKWdsdGQ4cl11JjNwRjRfTUhqJXJGM19tSjhaXzNVPy9PQCk/VnIpQ2ZTKUo3Qj8hUDU1OHJCdn4mcEY4XzVJWV0zUk16Q3hjVVM6djhpIXB2OlI9UnVQaWl4RWovTFBE''@;'; put 'put ''IXR2I1MmaXVQamkvRTM9Nl1EIXQqP0psKiowR2lHRl5vR2VDZippU0ZgXj9ERiE4Q0NyOyNDZmkleyJBSnRlRnhxZ1pve0JfNTFsUlFDP1RRdTpXUUNpb2dSKUtSaTxSZHluLEMvITo6KmFLKUVRKHh3XjdGe2c8aWp9MztIIUlQTEl+JHN1VzF+JHd1aGV7Z2MpQk07RFQ5T2lvcH1xfGBZPElX''@;'; put 'put ''eyEzO2YvUylvSnhqPVpHPDE7P1QpekshXS9XIUM8WSFqI0IkSVFIJUFJVnVgSjxFIiguRH1QYGZtIXlTcG4oKF4iLkJpUH1nQmdORkVHLy5gdksydXVTUCtpTEkyZ2kpP1NbbjQ7Nm5oRSZkTzh7cWt8dmkuRjYqUVBPOlQ5Uz9kSCRxM2U3bm5hMEkiViR9fjRJd2ZNQEMhP3Y7Ulg0MD9MaUdY''@;'; put 'put ''IV52Z01KRE9aaVNEZ2lHJXppcUNNS3dlWFpKLGV3MkFRI3h+TlhYV1JgdmBpI0pMJXRjYHZuWHhKSGVBSWB1elBNZjY6dD9MUkdGSVt1K31YK0w7eE5SQngxWCVKQWp2O1JYPEl9IT4mQzlpQk8/eDEoKkpSdEUvSDNQaGhmRHkxNHUwYmM5Til+d3tIZklmWCVHVzxjeyheOzdSZEt3UU1JYXZI''@;'; put 'put ''bmU2IXNjMGkpRkR1TmcqQ2Q+LGptZzdYfTAsVHxmbDZOP11JQyljUD0kQSsjUytpa05gbi9FND01KjU7IW5zLF9UN3pVOXVSJnheb09lbmc6KXVTPz1KSSVuZUZGey9sNDE4dWpQTWk9WnRnaCkjU0JYSzEzbiRERDg6XToke3VMZ1A7bGd9P3FJVCVHeDExUTZFWkp5UUtoVUsuK2V+WDtMNkV0''@;'; put 'put ''bGtrflhYR292M1Q7N0F6fXYjKUBKWm97MkgwcHFPQk1MYjt6Oi5GWU5URkRxOmk2KkFHInY8WCtLMTtAJFFWNCI+QnVlVng/aF10KUQvSF5PWHJbUVoiNER+SFhyXjlxIjhEKTgiXTUofEJxbSFHXlE0dF9EQVN6WF85MiJ+RSpsKEg8aH4iTEMmaSZhMSh8Qm1RS118O1B0N0NtSENlJnFzUFto''@;'; put 'put ''I0E7SXA5b29dUTgiT0ZZJColXlFRKXRIMVZnN31AUmpJWHpKPz9lPCx5M0NGOF5EM1JSejJ4NGNUdj1JXXl4RTAjaDU8VmFgSkkqdXFGMF8vSURVXkthP0lSTUB5OEopTUt0Xkk4TDFgJEV1Y2RicDAscmdTKThMTmRUOXxuZyxmU2pSM2Uzbl9EIy5FRT4kWE5JQ25AZHhzP3ZuUENtanosXnZB''@;'; put 'put ''QDZJfSE2OlkhRSp6TDRDYVZ0QiI0L0YoWXlHOzEqW30pJEwvRHNmSF50P0BGTXZicW9ncmksVyJCbGtkeFohbDRzWV5ifkpyL2osQiFlQ1JQLiszOzRuTUJpRWVqRTgzUnd0e0JKLl52aWxNb11SJFNzKVIjSzVdYFl1JFFJaXpBUjprYWxfbks9TjomU3UoRyFhQ2ZLdEA9dEprbldLP0ZsaCtp''@;'; put 'put ''OEJjNU9zVHxDSU1OZ0ltOyw+R2ZgMSU5aSE6dExzdm1UfHtFelolOW08XShmbzpTNXJmQ1ZDJFFtIWYpO2tHZTEzNk5taEgpUkRpI2o/TmdzSXtFRkN3JCgpVCl2InZCWSxfT1EqMzYrLnlVejF9KEBiR3tubn5oNzlUZDptRXlRMyVlIitqS005fXBKK35Ld3xDOn4uclVBLjl3PXs8TGF1LnlB''@;'; put 'put ''ZUI4Imc9Y0FuIUV2MiRlQW4pRmU4WC96XSllako+Y0FQeUNOOEEhPTp1JF5sM0Q0aT1icT8jQWNSJnxgSUUyTGlZJW03cDYzTEI8bGxaZyhxZVJ0TiJhKDdlSDlpOlU8YWExY0gxd2NIflNCJmJnZjJ3JiVrMWM0TCFtfmE7ZUg3YV9FTH5TLkhsJUl7czosM3xkJjdmaDE2JDt3TTE2YjoyU34p''@;'; put 'put ''XmFqUSg7UF1ucGssMWo2TjpoYzZnZzlpPjpXbDFjbXFDVj08Ui5RaGM6YzImSVBsLjIkNmQoITtnZHR7XWIxNjUjVCRBZT5OPzA5SWcqS3xyZDRoaDJtPnlyLDQ5TmNbSTg1UThUYjI8OntLaXV6XyksSkZBMjpuJTJ5RmZ+KVVSd0FEOyp4dzlBTlh4cnJAcl8uJSV0TSUuY0E4KV9nZ2VsOTA7''@;'; put 'put ''QTNXLGNRPSZFWH1FXiU9Knx6OGBddSRodTcvYFVKMShdTXdJQHVAUGpVYyQ/JDVHR04vSjtfN1AhP0VOVSM7dCQ7LlFySjhJUGNbQT4mW004eWhjN2Btc2EuO3BqV0JIOEdqMHBbTjJELyxpWypKOl1EbTRDUzoxYVE1TUUpQjhvczRLOz1OS2liPnYwPGwzd3xwaEtBX3dWMXRgKHc9eyVBW11V''@;'; put 'put ''fCRpSkMkclksJi5eUUdBR3l7OyZGKzhOQ1c1akZCMntwXiIsZ0VWWjUrND5JfEQleXxMU0t8MDQuQkUlIih1XyZWPWJQfGk+TEA2OXomKHlsPDElazxCQkc4PUB3bVdeZ3gkaTNIWjxvRFh1fC5fdkRnJDlobGMkaGx1fSUlUktRXTEpUWk2Nj47eW5uPkJtc1tqaCIjLD54RjZBJHcpJT1XSVAj''@;'; put 'put ''VV0jK082eVp1Onl8VzBzMi4zbXtqeXxVWFdPUy53Z3BZRT9KRSt3ZEV6VzNDWClxQU91TkFicltLfiUqU0Y0Xm1YJENlJigyNmI9SXlORTI7WGk1bSppKCVZSmBAVy8uTGlER0B5KGM7TW0lNX5YVXFYdkJLbF9ILCZAaU9ZXkdgKj9lWWQ4ZEVLVkVKNzV5Jkt8S0dfZjYhXztHM2hzWlp6PlZT''@;'; put 'put ''ejNUQCJRIUBOZkRGelJlUHteOW8rS3FdRiM2dXY9VEhNQSY6cHVlYU1IKkIsYlUwQ14zYFhFcEtTT0BpPERhb1JIWSwyWzxhLm8wUm5HJDlrbltuU2gpTU1VK156TXpMeHtYa3h4XiFbbnwucnt5ckJ0aHt8ZmtLbEYvemsqUXxlXyVqPWcwbDBwTnBub2c5enVoc0szSEVkKjteREY6ND06c1Mv''@;'; put 'put ''LzVQWj4zNH5kX3RaKipoRFhWfjRhbGBGMSQ9en1FfCssfS4mVmtwKmwudCFPQkBJOVUhQm5SIl5NPH18KGx6LkNxVXEsVXlAKmkqdDl4fCl8RndGQVMzWntEJSZvVF8jNlJLKztLYE5yeSwjOW5wMSlIMVYjdlJzeyFDWHw0NyxHInYiUXcmSVMvcF47ekw1al4kRzQhKHdYYHtSM3JvaCtdRXU1''@;'; put 'put ''MUx9PSNVekM/UjBSLlYleTtvWSZ7Iy5nbHc6SFkrWUJHYEpyWVZ9OGdCX0tGJWU9S3xlJCxwPUNHK2FEZ3RQKHd5ZzFHQG55bmAsMSE9NDVuXihvbkxpVm9UXlMxIWx5X3p6SGl1bl0vYyFLdUd6Ukg0LiU1S1NfYTF4cVt0OmppcVNMUz9fTjNeLzNoPVh8IWwpYXZHM0RUdCRCR3wlWSVOcHdq''@;'; put 'put ''PSkkOndoPVdxbHZoPShUQnVoPXNJdVhmR21ENmtUc3lLZlQkXjNDZmJDcTZ0T3QkQj88eyg+dFFqJkJtRGVnT3QkQiVtfj5gKFghPFswN1dLaDBDXTo2R3FsQHtNTE9xbEo7OzpROFZLaDAyNGA3ei80YjFDY3FUbz8iTnZEZGArO0JNYiRPemF8VzlFUmNzMlpwXnQzJWBjTHZJT2czVWFNYl0i''@;'; put 'put ''d0czbiM4e29ZMiNCOiRPQ0daQ2YlV0x5UWFoMlslTGFONVRRRGFLTlU8b1VOZHRVIlsvQmZIL0IhTjVHJldEXV1aZEVSOEpPa14yTmspXlc3XV1TWnd5NUVkNjk8SGk0dkRQZks1YTs0Yl9aVCYoISwvLCtsdz4kV0tdW3tTel1kcGZiWD1FZ015VjdzT3phe2QoIS5uTDZRYiw5eUc7emR3Mj9p''@;'; put 'put ''PFVhIU41RyoyTipwMFNvPUFqNnp0QiYqRnhCM2l1P2RERXZfbmVuLF40KjZGeWd+cS90LlUlfnFeMkxtKlZ0OWJ0Z3VoZUpuNVI2dzk+UyYvPjNmUC54Ji9zcUQhejZMVDZxbyMkfShNQTZDTEIwdF4peHQ7eCU/XXlqKC9aVDw6OSRvTCtGWUZ5fDV8dV95cnM7Y188am93V3B7THNMKWJxO2gx''@;'; put 'put ''fEwkNTxdNVhbanZgTGNVPSU6Vit3MUZEOyVLMHMkRiZZYH4oKEgvJlYsS1IuU2Y3aHxtZyxxUTgzd2I5eWpNcn1oMz81I3ViKHcuUmVMJjA9eWhdOjgqJnlZYDw7VH4wSVBsMj5PKHVxS1RsfFZnQElsezxTdDxyX0pXWSI3KyNSUTF+UlJXTShXQTIrKTM7alBMcjRJVT9Jb3VeU1clXjBLWCwu''@;'; put 'put ''MENGUFlgaTpvayNCUFR2MUA0NGxaRmlWN0RJWz5OZj44Plp1LDFSVlJdbWIie3cxUVJaM3V2PihUa2IxdTU2dl9LQFp4ZEhUaVlYXVVpbiJWQVZwRUQ8eHUqRi9YV2QxI1Jge15aZip0SUVXPV13ZzRWWjxhMDclOi9SbHk6Um1mVV5fSFhOImFSMUR2S0JuTXV8LFc8QWdAUH1KfEN4Sl9TUm1u''@;'; put 'put ''Sl1jREI2ez5PKGJMWENRUzRDOlJsRS9hfVhOciFTTzVpT05IMXd8V05IMSRoSn1LJHtRNyRxQitmU1ImWCl2LjdJQkxJUkpJTmVadjU9dyltY2lWTUVgP3JAMSs3IiFkSzo0NSIvZz5aIX1WeX07Zjw4Oi8vRzZ5X24pK2BeWUN1eTxXTVlvMkVBPWYiRFJ3aHtLfE5ieXQheHwuNz1DUyRmRzNC''@;'; put 'put ''dDJTSTk2bFZvRSJYJEwlakJbcjciJiNwajtXVzc2TnhDQlhJMyMzNjRzMmVLUUUsOnE+I1RiM0tVPGhRcHwpNkJrYVoiVHtwdz9NJk40O3lSPm5ARzhldlo9d0ojVU9KRE1VSlhoUEdieVZlNXpNbHBRZDhsX2J5X3tbWnxUcFQ5JnBPb0VqVEBGOU1tZ0BMOUdzWVpATEZzd2hwTDAzdEchTkQ0''@;'; put 'put ''NEovJW0uSm8jOC5uM1M5MF8xUD11YUdzb2xoKElyR2I5PiFdJWV5b2h9M05HfkpzRUhnLGd2VnU9Ll92NyRxTCU+NF1bXk10SSQ/L2Z4KHt0Jk5qY1EvdSttPSMzdVg5Rll+diU7eld5NXFqK2xKb293MXFAR1t4VERIaFt0WyhYcVQ2U2M4TSMuNSVuaVY3b0xVXTNOU1ooSlQ9Tl5sSk9wbig8''@;'; put 'put ''RWFOQWpTUzJ1d2BFVVEuVDFQPSREOW1PNWNWTHlNS0ZmNl4iMnJEazJQY1R7cTdkVT48SUo1cTU3d0M1ZF0uWXpBPl97KE1QfWh8ckUrXnNLc2Jqa2VLY3hsNnZ8NzlPaTA3az8wN3B5TmtjKUtkLClMZERfX2lFMjF3N3IjU2AyVHtDaGxdOnpxVF16O2g4OTBVRSEpNDpJVzghfDZ9amg6dnNa''@;'; put 'put ''XjxuXjROWzQ8PDtVOXFUWDolIys5dGRjMXl8SXBMNlNvPTgxfC9oRDtlKyk0KTtUalIqX2BrI3VuPEBlVnd9OjR2dWFfeip7dk41ZFJddkUmRjBVOzJ2XWpzLl08VlRESn0vPVAuQTNqZVA8MC5EN1ApOlZjK3FUWSVXfms9Z2tvYiwoUFFJe253YVkqYz89ZjladysmY1t2O31CVGlnJHAlJCpW''@;'; put 'put ''Lz8qXmtYPkJle3R0NFp1NC5ucEY4OHNzWXZ6QzhtPiU+eXJxI3dHTEY7VnRbLDFTQC5HRio+ajV0fCwwSUw9JTpXNGNZSUQxdmZZTzVQOWFPPSxhTykyT0s5SSlOei90fCt4SFN+WylsSHlzV3pWX3BjW0woOS5tJUt8PzNDekxbNHM/IzpOcDsrUUA2ZztrZj9NIjhBNG8pflFHX2Q/TjUrUER0''@;'; put 'put ''JVllWiFMKktuLmhqfTJCYkhaPFpfUzFpVmUoYjxiczZBRSl1cWxTcEtQKmB2MHc3OGJZWFUwMF1sTWQ0VGRLK1cwMF1WYnFkMSg/RFlAOTshYjAyYFFJNlQ1WWB5bzs1V0VbSWhUO2t0bk1vOlNgImNGaDd8QnhObkIiQl4oWF1gOCJNPkswN2s/RkYreyp0My9Kbzs7YzRna083LG5xI3Flbj9h''@;'; put 'put ''Rlc3a2tVcEtQdWRwfVVlVCN8OS94MUxdNzd2Om5xZWAwWH5YdGszYzZVOH0uWFllQlY4TyshOmxmP0kwVjgwKFZwZTFzY1prKno2LE8sQlZmOTM8NE1iIWIvSEYhI1NkIzFDNitSZl9bZ0RTMGkhQEpiS2l1KTQuSFNKW2VLO3pMJnZpUWVwTiUzUXVpbHskSHxtTVhScng1Umo/d0srXVZ4PTU+''@;'; put 'put ''XSRlciIyTHY/LE9nP01VO0FlLGZTK1dAQm5yK0VYbHJRZjUyQ3N8KUI4IzlCJSl5aD4pUT8/RHMhWmU9JmdZKmgrc1U3Qyk6fnEhUnByNi9fVGtCXThFdmZHfTozeTYkdEgubTUyK1NsfigheTRrK3U7dlZaM282WFdseFBtTmdAIyJIMkYve0J+anZgZE44Z0NoWm1XVytIOzlaPj16Oy5HLCpk''@;'; put 'put ''fTFSblJ9TlhAeThhc1p7a2dJMTR3VGk5Un5NJk19RjxtWWhPX252SmslU1VsUW9yTCFMZkdmUDY5YSU8TFI0KlowPjBKS0p+WTtxZ0BPekE0OUMrcFNAeThXc1plYF9gTlJgS1gjakk4QGh4MyExLztqdDc9KWBKfCJXVio3PlNffTZ4ejdIaEooSSVsZVNjWHFiQTJ7Y0ZXNG11JSxWeWZnbk9v''@;'; put 'put ''b2wzNFV6VDw0enk2XTRBaDwvfCY8SVBwUlNOS1Z3R0pVT317eT1bMmpJRlVSRSwkMSUoVSNfeCYsJShMJENLZD1lMDBYfiZ6bHA5SDB2I01pZSNNI0V4bHNIQXhvdUNOUnZUKEZ3c05EYnIjMXZWdjZlMEcoN2N9ek5tJChuU2pQa3omYn5SO3EySEpsYUIvNFVgdGg6PH5EVls3XVNQU3YxMzdo''@;'; put 'put ''fER+KH0+aCgpK3o5aCNjM1Yyd3Q0aC4lMV9POk1zIXhiPj4obyh1ejNrNXdvKSJDM3ZHXXApIixJMGk9R2RZJnV6M3RiTmh5RFcwPnEleS5bMV5jM3FzN1Q8Ol9iZFlYMkgqOWJMMGVAV2h5KFhddXhOUDNUYStVUDNUVW5QOX1ZVjBJJXY+dV9UPjFAK21fS1Y8dXklbiF1Sl5oY3l4QURRczA0''@;'; put 'put ''a3gvX1l1Qm5kM2UhUigvfX5LbGFTK118SXcub2xgZU5rPnMofT1YczJEQjxLcCFZb198JUxqYkREJV5vKkJ6fUhKQkcxNTd0Ul5NamJEQH0qVVNPPnkjVik3OTZgNipycV0ud3xZTzdtNEM+XiFtNXp6ND5HK0MsQEtnYzkvNnEzPGguTF97WF5HW2M7Sj5taHNvUjh1UFhURU9GNF9hNTNEa25A''@;'; put 'put ''cDE0e0E+RUEmcV1ELCt9bVYkNG4sN35UZlNRPDU3dEFXdlFxZTdUc2M7V1NkcUFnKDBkbXNscTREZnlOLCgpZ2RxQXBrRiFhNHd4JnV5SzxkWmIxekdzbThwVFVYYk99aDBwXy9zMHwyIVdSP3BCdzp9ay9qSl9melFjVllNdiwqfHpXcGhiZC9ILGZmI2BIUUxSWyRoJW53a3FTMF9iZzk7XmU5''@;'; put 'put ''NF5AYnJ4LDEwd0oyR2FBP1l+KDJhOWZPdCtVfE88TXtlYXpqZU12aj1PRTAvOGswKF5AYnRZZlVhMmwmWlMxQGArZ31MayExIz9PPnlmcFQyV0k3QTxKOjphRDlVSWxsMWtgSjgwRzxaQTxde1EwWEx2fCwrUE9GcENLJHp1cVYpd3RBLCQ1Vmh4LDg9eThkd0lkST5GPE9KUm9acFpkKG1YcTRF''@;'; put 'put ''YkEvfG46TDFrWjpge2RfSGVUdDhxRXgoeSNpPCtHOTZrMiVdLDt1L3Q3ZituaVslJV0/KG9DeCh5Zl8iSj9GaWo/VSR5cDJFZysvcTFoLF5DZT9qW3EpcTMsSnh9cmFEU2plaFhDWURaM3VVWy9zaUBmYXNFbGdfXV5KPU1VWlExb0RVPmpAMiUvOndFOSpmalFvN006UVByJlE8P0EuXjtKPCRx''@;'; put 'put ''Jmx2Uz9IeisxfThFa3Y4QFRqfElpQDNBUTsiYV1wNmpDbmRQdjwkeVdQcFohJGBddWs+LihKPUBFbyZMQTFSM0NLfjxpei5sK0MkO1BuYzAlRkl6VyQ4YlJgaF1LSyFaPEZOJHFSVm85L0FZQXdvT3A7R3slRiJGbi9wWiIyQ0twOzJZTG1tc1FqPEw1cGQvJWp8Q2VMOjlBWT4/OE0zWUF3di8u''@;'; put 'put ''e2spe2RALDtUP3skJHdIMXw6VGRCWyZfOFV6KUwydH1EJDt0bHtbMlpUZm57RyQuZ0w5b3tHJDl4WTVWclplfHB6dTg5dCF7QCxyNyJVcCFeLEpBQjwlWSV8Kmg3ZyVmbyQjZT8zN2MpQ1cuTCE6JGAiR0s3SHp+KzoqYlUzWDxzNyJyMGpZUzdfbHVnXzMwb3V5YThtTUo9cVFNKTNVYj1GLilU''@;'; put 'put ''MllHbEB7X0Z6eVlzOVJ2Rml6dVY7aGghPyp+bFc9enN3Ul95e28mJVhnI3hxOWV8bVBWZ3h5NSsrcD8hfl96NzdCPUV9KSNuWUhjcE9nPCpeOWNNMztTdDFIL3JnZSxePFJyJVNpMUg3NkxCNVduemR4W216fEpzQVZPRCNKWiw9e3NJcUxIIj8zbUVqNzt5XkEsXlNbe0hde2hVTkVdVihGP0tA''@;'; put 'put ''bCheLl84aFtMZUFXJjNXK3laZF1hIXJXfFVjV3A6JD9bY0VsfG1GekRsMkBtd3k/fCg1fTtIWmo+RiVTQXNdY0VnMnMrM240IUlWMzEvL1Q/VGo7Y0ZhbkArOH4pW1ZVd3RhPnF+MEtLcj1jPGhWdH1tVDlSZDdwSjRVLlFfSHxpNGMpSjVDVmBfa0BUOTozeX13Wzd2VTNxa11GKDp5OX4+L2p8''@;'; put 'put ''V2ZPNzE+eTM9KUVJVHZman1GeSgyWCYpPDZVKFtDMkxpdWxxYHY5YjovPUg6fT1lLlNQezRUUT9+WkFeUmR9WCglaHxPSTlAVUBnSClUUmt9SHklJGhYYk1GU2J+MVAzZjhMP2Mqdmk+YUVGUH5DeXdqaissPVVtRChKb1lkJlpBSyFEazUzaF85MWdFU2RDJmRqTDk+S2l9Rj1pQF1WfC5kKyMj''@;'; put 'put ''VkRqeip3d1ptKjw7bUFaeykhJWkkR3dLeSQ+eTs8UGJkQFNGN2I6SHxMUjxeRnYjaGg4TVVjW3hGfHguMkQrbC4zVzdKenxWWG5bPzN3cEIvMzVZWjxHQ3BKeXpoYip5bm9nVG9fM3t5PE5CfjJUUW8idnt7PzprfnxVOXtwV3hySyNmaG9ediRaVW1zXjIjOX1uXkVPQDdwaFFYZmBbRFYpYGdE''@;'; put 'put ''X2FHPSJjayRnYWdwYTYzYD1GTFVKbzF5MVBlc3B1U0dJRSxmLnBiRzZBLkMyXzJDSGllXmM8W2cqRkYlOyE8Jk52LmF2QHt0Ty95OWh3Yjl+MzlXNFU6MnFEeyVzVndXalRbT2dgP3lhKztJd2V+WzU+WWtJbDk4YVhhcV1DUSg+RjwmcSxkI20+UXghL3xCX0Z+PzArP11ELnwycnYhREBCY3wj''@;'; put 'put ''YWh4X0gxd1NZOXdbUzd1biNUYjQ2ciwyTWJmNEVQV3F5PTZMfDd+MjVvVmk7NnssVDJeRj87e3YxKFZbaXEkaz4vMm5sWXtCNG8kUl1bV1dwNiR5VSxVODdVQGJZSzV3Jkt8KCUoVTV7SU49R104KUwkSlE4YWJFP1I6SmJ2WU81R3NAdVU7QmVTdlRlWW5EZVM1WjA9NU5iMzZOSExHV01JbGs7''@;'; put 'put ''eHVlMCtWcSlWW3EpUV84bispT0ZsTUJbQnRXaXpIQEJffCtBUVlPJHlXVTBjZWt+I2gySWwycnMxWT96OioiUUoyY15kLEtbL08odWR+KTpXTWEoKy4iaTFVPVdXc1p3V1NQVUclTCVTZWp7Oyw/PXBaQnRBPn1UMW01JSVBKmdKO2A0filKKEtqRCEzOnY2WHx9OlElU1lrSGteM3ZJbUdyXUEl''@;'; put 'put ''NmheTCRFK3FUMSZCPW1UImZvWmtXPilEJmIoR0p5MSgxNkw0Vm1oJnt8ZzkmWShJU0RicDUkOmc6OipsSmlhbT1IOyxfQnY9Wz1CTkUwdTIlVj1DenByNXBPZD45P3o4PUJrLjA9bEZxRH5FM0VOO11RXTY2YGMsLj9tY2YhO2JwPTJONSpIUVhkYzFtO3NybEtRUT5+JFtvUlNIJjJ+aTsuWyls''@;'; put 'put ''PzM0Wlspem8uZiEpZVtEJXopJTp9b0I2UGsxPHk3bCFyPS9EN2g5LFhlWUZjWiUmTnwxbVJfbmVUX1FwRj4/NjsvTD1QUjUxVWVeOyIpUHk9eHJNXXspbEs3c3V5VzxyUlhDb0pLUUVdXTBNc1UrSXtbK3FVOyIycTp7eUBMaUdDYnRWMFEyNFZlT158Rk5iUV1+MW5odmliRXpaJTZpRiwzbGBA''@;'; put 'put ''Yi9Mc15SQGR2fX1HfE1YRU1OMlUxX3p1W0FQQDE5VztzQFZPX2MwKFJQRk1Lbz9Ad0ViOCoxdCsiKiIrV3ZMbEU0cj1MdSNLa2V+VUxjVUA4OlZZeG94dTF+K3MpOVRMaX5xMHwvQElwRXp0dyRqME5QRTpOL0F2OjV1WDgpTmtabGBHWmo5bFFsb2BzcU9iJUJ3Uk92KyU6fHJTK35seGtJJGl0''@;'; put 'put ''SjhWaU57MWBqMkg0QCh6dml1K1JBZ35rOT1LZXVIYXdXOnBaRyNNWWtXNG41M104dClkXlV9cTBRb0g2aX5jXlVqRmpke0grQiMzbUU7VVtDTXM7V1tVMjp3dlpHI0QjJUlCOXJjfjgvd0I4PypeXyopdlUjX2o/PD9SQitYNV4+aFFIMj43VjFMNC51cU5qTSIiRy53OkoqfmQ9JigzWmQpKlpQ''@;'; put 'put ''K2dxdH5Acn1lUldhZ0NRQVdteWQwWyJbTTN2MjtfYkxQI0ZuXWhGZUwlTHwzV2U7WHZuRjthS0tKdE1YXUBiJjV3aiE7Uz9ZbUc0bmUmeHxAK31BIytefiF2X2lpOyU3LFd5WitsRndxZCJYY35venRURSVVLFc+RU5IL2drTyVOWUl0dltuc3VCTkM1OFtzaklzTzdISGBTNzlifXkmbk1AIkRf''@;'; put 'put ''Mz99W3B8ODhmfWE8YGxdJXY8NCFSMSsyX0t6eFdFKF9EZVB5XmNVPzc5QC8qK11kN2NrSj1XaVBicnd8K21oS0BNJDczLDYqUk9TQFtKISFSPHElP3o6STlnPl4mMlthUF5HTGIuM0IuM248JGJ+VVVeJlB4PWhFSGdLST9vaU55Q19eOFI9WFQ5c2huRDtYeTVbNHM6KzM/ZCxMVShPSmBdelR0''@;'; put 'put ''JS8pO20yazNMNGtwdSRjOHJaeFQuKmVLYmY4MUV0Zzl3TzpmQ3RiPj56PDJYKToxJl1vYz0sR0VqZ1ZvJDkvZjpMcW5XVnt4Z3pyWlpGQDIqVTUkJU99OD1ve2IyQV1JUV9vUnskO1t3ODIvP0l4eFtadUBxOG5NVXUwcz1GRldjKWI1ZWtOWiVQUj9HfCVnTzlVNEwhZCpnOXd1S1g5UGAuUzkv''@;'; put 'put ''MWxiSmtKbFkxbF4/VUBpNTtxX14iVm87PmdeWU9yXUkmZ09MK0pVPV9yeS5fIz1dYGIzJStaSmNXbF5GNmdkRVFAW1cjVXBPNiEiZ3NMMjNUO3E4fHAkaVBoLE1YOGt5IVolYGt3Mm9PfExQQDEufjQ8RnM4L1JfaXVOXj9UTl4qMTJvfTxFVz9tJVVBbi5dfXtSM3NVPGRSSWJ6MFswcyUwYWI1''@;'; put 'put ''X2YzVDc4ZGtlKFIvW1RadkA1VUZTVGM/JTdoQUZ5NkRJQDFyV1duQyM5M2RWLDh4VHNiZHJuI3MqVEMleT12JDhQcV1NK1d6andYUSpjW1k1XVoxLzc9QllYSzN6Z3Z5R2okWk18PG9hRGRbKSFNSC5pdz9XJH1zXklgS0ZbXjE+dy9NSy9bNGh8UkwqNU0qQ3Y1YDJEdU86PFRDeWkuRHA3UiRN''@;'; put 'put ''bHAuVkExQmJ2PzsvVkVuUiRILF5ZTih+I3IxRkcld2ZnN3dFfDJyfWFLUi5KcF1eeXJfY2hfSzw4PTIrNHpNfSJyOG4yYy5UVDoxI1ckIj41NWsxYzwmeFtGaUBucls/ZnZRWTlUSSQ9bVVeSlZiPzVAVzpoeV56KnNzamJuKGxZUWxsSWBmU2ZmIyswaXhmOUZbL0tdRTVFelF6N2paLCNrVCNQ''@;'; put 'put ''aENTMzUpMFovc11VXVsqfHp9OXxlITQzQk43WEU+SFlISCVoWToqPDI/Kz55VDREQXFbSkhZSEglUlliQ2V2W1skV25fXj98eUdFVkxOSVRPelVPZG9wL0Z4JmNiK1JrOkx7ajNSU2N9NlZJdFRHI1grbTsyOTw5eDRQKGZGOWZBbk1DKD17JE85W3w8YD1UUWhATTpoR2FafjhFclpDJmxzbGZR''@;'; put 'put ''VHRUMVEiRi5SLzQrWnxgcFYvWUM8MnlyRUsuTH44UEE6WVNwVlosVE8/SnwjYTFhT2kmTTtEIVRuez96W3BCTGVOfllAN0FxaGxrMlVuLFYpeSRCXm1jTFlGOTUyJVZnZ2xATGZwJi4hOTE2dDJULlNrMk0waENINWEkWSMqV01xaFdNU1BQJU1LanksZEhSPjlULm9DS29NXlNYWDVqSkNlbDlo''@;'; put 'put ''OysjKnFONXt0NURUZ0klUVNtO0RbWzxpVjRnamQqJF5VeVRWb1Q+JnY/P3p8UTZPOF40Mzo3cSkwcmx8dkd2ZD1qOCtOK210USlnMHIiRChYUmswPEYuVW0xVVlXOldtTVhCYUtbOSE0d25jXVVlPEM9RTUhLmdbU0xGUm9SZnZnMEpETFo8N1giTDVjV0Q5LmpDdEZZS3owTWJYKlF0YX4qN2Fp''@;'; put 'put ''Zj4oM2khcCosdmMkcyltYXF7SkRSdF14R0JgfV5pTlI6bS9NPENIVzksckNAXTpPd0h2cTo9fG9KQHdQVVclWmA6JXd9d3tnVnBObUk8MmEuKWIvO3Ipb01YUDxOKnh8TmJlXllkb2VsMCY0MXx3L0FtWWFuZDAsdkh4NyNaTDZMXk9+S0xgMHl4OWk7VTM8IXhMXjIoOy9bR3dmV2cpJDRZdT9g''@;'; put 'put ''eHFhcXhwYDJVblJHU3BXdjxQMkhXYj10cDA1e29HIXh9Q3NLc0QoV2tWSz0hXzIoITJ0dC59Sz9uTGxyLnVJK0ZATFBaVzY8VH4kRWBofEEhM25UXlk4TTk8TTlvZ0NQO0R6eGVdNzckcFovT1ZnemdiWXRxdFA5aSZbZWEhUzBmM0w3VFtIeS59ZVNSVmMpNVM4Ll4heGh4I0I9WVp2bD0jTVtk''@;'; put 'put ''eV0vW2lrYFtYOXckaU1+NmQ/fXd+bnUqTDo3PTYvZltoaTo1LEpFc2dwaTtNUG1zd3AqXkhNbXBYa1dwSl1Wdzc/LjdBVW8yPlhVSC8kJVM7L0hKcCNfe2cydUUjKyY6b2N+XVQuOUA+blpVQHsoS1Y3LiF9RWwyXXhIISxaNzcsMzNYTjV0S09zQClyYEAvV0Y3KFQ5WTs8PFQ1NyorTWc3YW1W''@;'; put 'put ''UmllSnpaSWxuYE8zblhdNUAkLzdOK118P318STNEISxRYm04JjNJMTJ2cUlgWytTelE8NFR9eG18bWVnNzx2X0FtViUrZ1YwMllEQ1VfeSklbFZfT1Mzak0hVzl7V213QzBFNC5HSGNqcjB8JDQ8fDR4WHViT2BxOTwqeSYxcDE0L1JNbyo1QmhiL1BzZT9zd0RMSHEsZiZsey5NdVNDVjA0KV9q''@;'; put 'put ''PlNkdXkmMVppK3xSc2szXkIvNlJUdk9SWGtzWSkhRDA4JTtybHpmYldwNixYY3NbVGk1L3VjQVZFeGQ3cHpDUEJaPWx3K0AsdF0xNzU6YVpoUlg1TG1QaXNZOltuTm9oc1kvW0ZUTVZMRyo9c2s/Zn53JVZSYE58O1suMlg2VXVdUzEpMjdHSkFGckZsXUhzTkVpd0tZVktNTmJROVtXUm5GYHF1''@;'; put 'put ''e0R+SCZLOjczZjw9L2gxOXYmMzw0PGI1WkxScDA/cSVCL1BhUzBnOTlOeVtkQklJOzo3b3B9eWdZMWRWMlBjYE9deX5MUWxrUytRLzRkcFN5M1kjM3lMNzBSdXFBaSRtVEJ2OkAraCJ6fmVDNC9sbFpWJS5nUXdweW1UMH1MVzdyaGlCMjg9cVdoXWQkOGcvKS96VjkvWylkbjpzSXU0fSVaa2RV''@;'; put 'put ''SFFATXZTK2RnJX5GSGA1Yy5ONFt3O0E+M2x7b3EkXzBWfkRXanlDNkhaWThjKm5KcGVkWGNXOSw0O0Z6VyR1NlN0Y2dFVl5hdm9ScyU6YyV6JGcyLG5WWUI2WHB9aEA8S0cmYTFgZ1JOLjhAcXUhXiV5bEY2Ny5wQG9xTWtwVT1ZcFtuPVNSUzMjPD1lMDplJGhQPzlYdi5VbDk4ZnNLJCI6NmB2''@;'; put 'put ''I2AvVyVkJGcyaz9fXWt5LGQ0WCp2fWAmYSEoWUVPRFplaHJaYDEqWWNORXdIOHE7cXR4aUlAbiNTInd5N3Qma1MkTWttfGYjOlRsXltaVj98bSMrR0VtU1ljLFFmfklxWCVFTkhsRCppLDw2fnl+eX55fnl+eX55fmI+RGIldzY1Xk1PSUBCKzZJXXw/OHJfcyM3QFYuMSVxW2FDVV1hZyI8QEZg''@;'; put 'put ''UCtSUjRGY1ZxPyQ/OVlucVJSd0ZjVi40ZG9OVig3Lk9Ib0QlWiZSNzZDd0gvZWwweHwsfT1vInp+S1I7cDZteXkxMGo+OEp9ISM3ZlFwKF9FdDteSFZkXXNWYl4vOWZAU1VlJWQ4fTBqPyNOUmpDREBtfTJiam0+KnQ5RldMQHB+WDBySkt2RSVVQSZ1OlNPQzc7QElTQi9CXzl2NVhiN0NEPVEp''@;'; put 'put ''Wyw0OWBvaT5vMVVeS24xK3ZLdk17R3x+SSZZKHUsfV57ZygoMyxgMVJ7fDBVWUwmLFJALDRKNmRQTTFCOlZQTEk+RUpeMHcxVWtDMEtGOXVWPFVofG9JcFRhUjdiJXIrQ2hrYHNmXjh2NHFfKWZ1YjlFfWVgaChCZCM+ZSNkLHN9TltwJV9nfVtlcn4yXT5gKVY9QHo0cnBdKTh5WS5FQStobTtQ''@;'; put 'put ''PDtQc2htN1BlVkBpbUw1X0hqQktbdmxGci9PeHB9LDF9TG9gInlIYHh8Q3IuXVBbWkkuMTxObEtIJShSYV5GYDFKL3hUbHdDa11HZHZnbTcsKTw7IWA5ai54Wzh2e05GeiE5PCZTTG9gaWBFYWZWPy5wckh7dUN2KTN8PmYlLG5zKGEpJFB4PUw7OVRdMDU4b0hSM1c5cV9BVXpGOjhXOXBIRXgk''@;'; put 'put ''eHFlXjhnJWwmWVUmez1bQzhhfTg9QjtnbDVydF44fVV6YXBOW2BeMC5iN2l9MD0pIWZiSCs8UE5USWxxYlE+dVgmYDl2bDdaKVpGQE9GYDQuZHl1KWtdMjwmQ3AwND1RViJ3eTdma3JJOTNrL0VdaWRxRnh5WishI31JciFvTnpFfCV9QXNWZ3kmQ0N1dW5SUXdZZE9ZIXdeLndsPE1IOzMyVUBQ''@;'; put 'put ''RkhFTHh2UmBfQEhvJm4sMSJMZUJpKGxWRkxHWDJxS0BIb3hxQ1MpTSxZKFJ3flBKeHI/SHs1QHpIey4xIjFOM3U2fktvYXA/ajVeQF1qXVZRMm8/c2YsSkNZWWt2Om53cCloejAsNGtkdCtuYHhfeXxIVzV+KWRKYlY+OHptQVE8TEkoUyFnOUU0LEZ+XU5eM3dRe15rWyRedEd4PXE8UTN9XTh4''@;'; put 'put ''ek5UYWgxPGYzYTJVdXcyU3A2JEQoTFQlUC46Pj1WZlVpQXgyQV03TzNNdX1tci5MaC81JDw/eilIMTJdMHhFQz4yUyQjcFlGci5FWTYpJlVOekslIkxBXjozQ2o1T3lLKWljSFFIeDJBa2w+aVJ6Q3FIKWk3REkrVmhSe0xKc3gsJHVob01Ma0ZmZXNaczJrZUMkR3RNXk84KUwyXmg3OWJoN3wy''@;'; put 'put ''U2guXTxXLmt9N1NyUngsTjldeFImYGgoQzp7K0RQbDNlcHdxaVZNU0BHOX12YjRfYlkveEYlMUcvbko1Zl0pXWopfXRGNkcjeDxXZkUzUEt+ISl9W19POSg7aEt1aSFJWlVIe3Nqdlt1MG5FXyVDeWRwZD85VCJ8YSFqIytHOnAwO2dsaTkkJSl1WlcmV1NXTTs5Rjh8cFk7bWBvfDp+Jk5UeSln''@;'; put 'put ''eDVCXjw6SGNma0VjdHRZKzt0JGkpUmpAd0BXXm87eWorKUVRaSZSb1k7eXs5TUdxWW5FYTlKISgjLFZTWnVfSzVdXVI7KE0qI2Veb3klSkAqbDI/a1c4cyUkRSZ5UURwO0dzTTBaZHkkd10mPzU1JDk/MXMyYGZUWXo8cjd7UCYpXiVEJUJLQiMmWSVxQWtxeDhHQS8vOGJIbFNONGRlJmlbWFFl''@;'; put 'put ''MlJ2RDtkLn4vLyR6TkdDOE1lQ2VWKXxXSHI1MUkzJWQzc3FlSmx3SC5eNy4veUd3ezZ0WTk2cHs2YTIxLzp7XUZlMUQsUkgqTWhJK2U2P2R2aClRJXE9OFJ6NklqKytmdV1yKFZgNGd2fTo6cmppPnNgKFJSbnJFcUhdNTMxeElAMSVLKnFAMWc5aGtAcUtEKTpMKXdzTkRqeihaSUFaPzhbLzdj''@;'; put 'put ''THNTfUhkWVA0fkYmTms0PUUsWCxMbzdFWjg/NltpelNiVDldcyttJDNjcXlQfXVFfkZBd2dGW1Zec0RCPjZPPWh2ZzssXztaJTkuQHZiUWtpbkZTUTphNjZJVEdkL0VLLCZpQU9FXVVZU2dkYTl9WEVrdTYwREpOVHkhaG9UKiprLEdGYH1AOTwlKVRDZHpgXz9yRCY8VGwmcC9vRDAoNFg5KjRM''@;'; put 'put ''RnY0YykkTUV8aUB6bkdLOVI2ZXNZdiIob2U+UHg7cTUwSy96ZlVPQ05rJU0qWjdVZnR8L3N2MWQ0SWdHLHQ4S1IjbTNVUz87Nn1ZTFErMlg3VmE8PGBlRjN7aXkqbWVJNG05US9GWWViT0FlKURXKXRIcXVUX1R7cUglS2wrcDJ2Z2RWZShZXURJWCtAWHUrb2RDV2N6d3tuVz4hMmJAWGwpUGR8''@;'; put 'put ''d1YwcjAwRGw2Q1M2JFQvaF1FSn1Hd34zRkZqPDNIK08qRCs/TjcoIWFLL2tsQDBJLHJJbCNUZCZXOFtUe0AuPGhNRjR5ezhLVXJdK0slSURKQEc8cyt4WXJtXzZkZlk2alNsLCVfW2x3d3lKUyVCJS5OOWZpUmtHMlU4U2FJRFp3ITNxeDRJbU9gT2hNRk54IXpRNkwwV0J5WjxidTd5OHAubm5X''@;'; put 'put ''YEdQaV9DUWRKKz1ja0sxe0gjWXtLfXMxbCNCVFkzKHJ7eWgzKHJlNnZGOXxiMTtLWnkzbVdWZ0tKZXs/eyV7Jj8qTTFPZns/cnlWckJkZXVleVppQWU0PFFsLnVJKElkUitMX20lOmwhKD5tO0RXbnUxeGI+SW07fkB9MzlUVGFAMWdWIl5EeFZ4YGF3eVszfW9AK20uPE0pPSt1XTxCK3wqcGBX''@;'; put 'put ''X3FodT5GUHVMOEE7NlooM3YpYVR7VWMoNzN3cGg3KGtnVXBaKGFibmRNWyNYNTwkVVMqM2U9KmE5S1toZi9vTVUhYn06UDJFKE5URmQyfGA8U2FmMUhPT1d2PCV4Ikc4VVU7Vi5zekE+UG9oP3VbVDMhMDA8W05RcEZbfStRfUAwTnN4ZnYxT3czJkNdJDAlI24wVn5mR25GTjguSVZqS0BSPj12''@;'; put 'put ''bzgocz5PSjowRXB9U2o/LHQrWCZsSyIwPF8/UDtsQSttYXNZejBOb2RXI2U8dVEsNilYe0YpMU5UP30mU0wjeVtJXXk0PkQsN25EanBGV3xGfDl8cGZrcXQmfnNdNi8vaiwrdHNnW0hRR0w7KDVDNXxWVD5FbDw0MCZBZTlpe2t6NjRoP1B5fXt3W1Z3ejRdLil0WWokak5KYHUlMyViWUcsZF0+''@;'; put 'put ''WGVYaDA6PlhaOnRKJj8wOk9vR2ZQKHl3K3BtR019dz5TOG1MKDosRVJeOUVqMSUuSntfJmQ/eUAiOlJDTEF4TjtlMyxJQDJuT3ZlOXBwPUlOYjxNPzp7Oz1YeVZVflFldjVCTCpATVA5SWh3OSNrezwhYGpJVnc1XSplekI8eTpzMiwlfC47aF12Tms6XVt5OE19aXkoLHtDT2gwL089M1opOEVi''@;'; put 'put ''UnBMdTRzbjhrUXE4WFJSfipiaCxPTWpZPVVmVTRpOyM9OzlYZzZaVWNSTCxMWzEvSW91VGpUY0g4WTspZzxNS3E4NzF7WHQ5QiFXJHcvWkVIOE5vL0wqbkZ0Km8yQlc5Miw6VGtHeD0xT3EzSWxLfmBrMlZkRlFEaENvO3s8R0UqRjpTVDlBSDYxW0l5Oj49UGQwRmwsZDcsODs2VnVyYjs0Wjk3''@;'; put 'put ''dnI4Rl9BY0s+V3ZpK3xvN3txX2VufW8+aUtKfW1mOHg9bXN2fWhQaFMoXnZQZ01nfWJIMiE4fmgzOHd+TT0vUTdWZjlhV3t7NkhnNDJgdlQoQytQTUlhMEo+cnBNLyZha0EvX35ycmo6alE7NFM/fFs0KUpSKFJ7XWEmLE5sNnE0L1ROaz8jeTUlUns8cHIoTEhvZWpSQXovRmdyViVWWHopTSRz''@;'; put 'put ''SGB1V3BWfi4+Q0BzQHFINCJrPF4zZ2xgfHlZRj1ie21tVmtwVShVNDQqPS5kXlhfbVc8NCM0JH5VNDNnPlF6eldAVUA4VihnP0lUMTdrP2B4cDA0NUNheG5FYnVVODBDdjJ8ZGJjMH02Y2hsZSt7fWJ6OFZ+Ln40NDx+SUBHJHFBJkpKcDBnVjtAcSt0Xy5AU2RpLCxZRSpVdkZAcTk7LnY3MkN4''@;'; put 'put ''MCUrQ1FgTklKLkRXLF12ZUA0KTkoWnZGQCJJfUdTVXlDL0B2UkxvK1VnS1lGQE9JKDY7MCxtL34+MCw5Qz0uWjJ7K30uXTJmfHQvXUlZRD9JW3lWIkwvfDQiK1U4TERdVDlfZHVaLEthY29gbnB4JGZVZEt5LmpaLChLcjQmekttbzVbQFUpdi9QMD4vQ1U0QDgzfUd5T25HPEhpO0VzTTt0Kmda''@;'; put 'put ''VitiOVBWI0ptXTF5PiEhOEBUImRIWWxTeVJde11iI2J5NUpTWHxrbFp4UmlxSFRobU1oeCNOaEx8JTxPSWRkOFJqdT4vd1RpXSVbTXsmTTlmPi40bWUsLlZYNE9oLzl8Mi5uQ0lJb01VN3glMz52cnpfeVJpTzJfaFJYNWZkKXU1dCM2Yl1Ue09TLEZ0dVJ4XVFhPjc2UnF9UHhyJmdVdk17cFsz''@;'; put 'put ''cHdCSnAsVFVYIiQzYFZSdmw2MTY9JDkxJm0oNzV8VTxgWDVbOG5KJStOOnohVEdfdUgkLHRCflRHQFVXfEhQQFVRWjEmJTp2OzZLZT1zaVQrLkdeQFA5eGFwOmIyRGhNS0hGZn1XSDx8VDtQc1k1YVdPSU9ISStYZyRZcWl0T1lfIzc8VllaJDp6O2YiME98M00xRWhZVXl+TiUseTl7WD5OeUUz''@;'; put 'put ''YSVsUT9NeT5PVTA/c3F5Ni9bRzhlMENXQU5GYkFOPzlNU2NSd1dgP3lCWDdWMH4/d087I1g5LjZhUC9OTzVrPzgrJmY2Yl1TWFFhSCxuZT05X0ZAc1ZiXmo/Ui4xbzY7MnZkJjs0d0tkJlklMzFWa2skWSV2N0hXXnI5Kys5fVIoTSImTjQ6ajZ3a1NoeUwqc0wwXUs0LG1TampVIyNTZGk4Oms8''@;'; put 'put ''cDl8LmxXOmdhOiU+TTs8fkx1VExKcitYQTVMVlswNDtvSVNxNlNHMHZufkJuPEUzKSpGYEhZQmtjIWhOWFE3ZClEVnJRd1dXP1JXPTJqOnBwYENOeGwvdXhkcDBiOWlJMncrI1VUK09TS3tWfUdWXlNrcGE5O059XnJiampoISUrZUV0elU5bCI9Ni5gVXowb2dSSTxJJVt6eXY7bTtETlg/KGgy''@;'; put 'put ''WGBTLkVndmBFcSIsImo9PmhHLFNRO2gpVmExSEBKXitQeXh2WDgvK2d9e3JkenZrLiE0Y3c5SllNJXFNRDtWK2FOeF1FTno2d0s7MEJjVGdpP0xyMW5dWEJic3J6O1JdNztsOn5sMHJ0ejorcV1SM0V6bTBnTVpfZil5ZFJUVDd8K2FdJT4kMFJuQnEqJjpwL1Z4L0E+bGM1U257d3ZlMyYrZUVQ''@;'; put 'put ''eUd9OEVgazBiLl5NWzpycS5GcHZ+c1NEU1JzZCVMRzdmVVA2LEVVfTByPztnRFQ8Y1FoZEordnxNW1Z+W1kiQCNCR1JTMjhibiFZdzZscFtCO21RQ0ZzWXlhY2sqPnc8RnlQVFQzQyQ+d3hQRzZPSkFRe1NjYzZYMW8+dUxBaDV1ekpnYGB6XSZQbEs8a11bR1F6ZXJ3cTAzQHxGZGR9JXNLUH5Q''@;'; put 'put ''eD0zeXxEaHEkbz03XiMmYWR1Wzh1TWhvI2ZlQVJWOiFyMD1udXR3MERHMHRQIWxLdDQ1XnFWWF1XcEV1NFdJYlhyd349JUFvaHpySTN5OXpCVl52UnpBcSwiTTdESWlbSW1uL1Q4WmwpRXpFcX09d2tuYXlULmgsYkZ4ejtDczNdai89Yktpe0BAdDRFPD1QZThtVk9DYSswWEN3NDZ4P1E2K0hV''@;'; put 'put ''aTZueD80QEMkMSVYbil5LlBwaEx7blQxPFQraG85bGdDK11RcFZ1UV9dTyxSZltNfG1JVEF7S3IrJnleWylsZmEzNTIycVpZPjlzRFcoZiJWVmI/SmlQd3p0O08iIXxLPGt3QHB3NilnMjVoQ3RGfV5AdkNOZWg2RkglITtGdl1GVWlwYV4rKz4jOntkRXQoY0QiNztnMj5SWUA5QklvbHo5SG1+''@;'; put 'put ''SVliP2FDRjhIWjZfeUxpM2ZtPSpVemFta3hgWk8kcjBSSypidT1aQUAkP0gsXjhJXiRvPTokZDhsTHVbY2hVWDpMPjchXSxCe3BVZW8ocSQleS9XU34qfT9paEAvQzp9djAlS0lEIXNEb1dqXTNgVTh9WGgyXy9ZMkNJXksjT2lNKUVkQjYmTGB5b3ZZLmA9eEUzUTdUN3VEak9ARVouNT5PKUYr''@;'; put 'put ''Yy4zRGc8PG5aYHVpV0tsQUtOLldLKyJRd3M0I3g7bUY0YUpAZn0hOUY6P2IxSitaZ1poN0UpcmxgcDJCLEhzcm1BRjVUd3F9bExXbFZOXjNOLmYmcl5acTs0JiJ3eDVrfiJkQCMxVldNZ1ZuOHpaSFZLOE5vNSQ1cXM7X3xBeDUvdTs7L1h1d0twQF98PiRbdEk2T2clWmtwQXYxOihQV3VjSz1b''@;'; put 'put ''QXB5WyN0bHIpcmVqYkU7e19dc2YjSD9nbTdNalErOU57P3MqP18hMEtoLjtucUtoJj9aOmFaa05nMjt+VltWYzA1JmRsaFdGaV86UlU7bjo9en1keWM9blUwcj1GNjRlQ2RvciZsIS90dz93S0dJU1YsJThOIX5vUiZOIUUzYytOY3QwMHZ5SG0oPTZRYj9kdTVuWEFIb0hsI3RIS2EzOiFiOTts''@;'; put 'put ''T2hjPl0mR3NwbyFlS0tqeTxOPCJ3SyR6WktYTk08cmIoQihsVDBjIyNreEp2RHgidCVTYERAOnlnT1NQU1dHbFd0eFRsImdzTENUbF0uRU5mWDhgXX5oaCE0ZUVOZykwd2VlXTBiOyl2W2NDcmMpY3hTYiIlM1plOVAxSTtbd2NvXU00VTN7ZDd4MzdqIS9ZISwoOGY5Km0lY01oPVhxQnR4Qikp''@;'; put 'put ''WkY2eXwvRlswdzZ3JDo3aXp1IXw8QWp6Klk3ZTEjWjksVlFWJm15QlU7aGsjISxQWTlxdyhGS1hrez4kfW9WR1pSW3l3M3lJNU90aWJOdzN9eypieTVKJVB3bjxGc1RfVEhRJTEjbnFoeWd6T3xATzFlLy9jP01XfjY5SUU9IjpwY0EuLG56aVtIc1JnZ1VOfV59b185KTdTTFliRm46WCViNnk2''@;'; put 'put ''VFRHcX1udzchVlk+aCJ4WExPTFRhW1J3TFMjOHkuM05vWmVRKFRlQ0N5e1txXy5FOGdlbkZjbCwlKmR2W2FGVzdKYFQsPmM0U3IrSV5Pd141LE8rPFR5e05lZXh9UkBmW3B3dy8iWTNjUEtgMHdPWjhfLk5sL0JETWk1b05SNSYuaEY7XzM2NjhBLmBvIVlXZyhVZDwpK1FUZyFATmhxVCNqQCkw''@;'; put 'put ''Znh3Qz9QY08/Wz86SnpHVWVZTW0yJXlIOEsmXywjZGA2altPRWRRKDdxeVNAYSNYLjpASFleciskazptVEcreEowbVtqI2JEWE5PaUYrRlVURkJZUCxRLn5PXzQoTkEvOjk/cHJ0JD8uWSgwYi5tLn5Pbj9gMEZQTWRvZGpZa11VZVNTcDBKPFBwaypuZVMqMUtEbDkzRT5qPig3MTMmZmcjOEsi''@;'; put 'put ''SnR9JGA3dnxKZnlPfFMwZGVfaUc/MjVlYF9PQzdyXVEsdFM2QGFgPSpjcE02eGQ4dz5kPy59K1k4aUMjY31bJihOM19idEksUiRKODlmcDU3aHZ6NyQ6SmJ7eEJGUSlRdH0zQC9IWDlZVV14bDtCWFY4dCZYLGx6WmpBfDZbRCwiZjxpUXNrJGNVWE9jcmR8S1QuMWBbb1FNNDtteVhVT3s8WV5Q''@;'; put 'put ''Wjk4TChmZFd+YCJ9dy9oRFBuP25XTmhaUF9NeGJab0Z1ZTJ4aWFqcilAfTtXZkYufTtda01IcWVUbkdzQllHeC9EXnhIcXdDNitFe2FHaiFrWVN9cCxuRzdpTTdsdHJkR25jNHs2e2N+Nzk0b3Vab3t5MWwzeE85alN5eUZLWEA7SnwzVmNKcEwlT25jVWB7Kyp+V2h4MjVXfEpFXiQuUzdpaHM8''@;'; put 'put ''VlB8MWdgbzBAaGljSzZaY25+NTdUVEhHPCVVYmBBJTFDcj0rdjhDLixdV1hIdGwpLi4wenFJUXNyMHBUOllvSXVBT04mS3x4WDsiUnE3ZFJ8IlAjNVs2STwrQ3l2cjNQQiRMcGR0ZXo7U3g0cHp5VyRVMXt7QF9melFONWNBZDxTRUtnS0NZbSNnZEtLX0hqIWNvXVtzdmlWaFV9JFQqTEQ3YT9h''@;'; put 'put ''V3BfaWtdO3kxXUZacm1aXVIpVCk6MWRUcmdaR1ghOHlBcUMiXXZPcGgrbEluZFkqbVtSN2xbWWNpRnF1bF9bRHtPYX0yJXg5Qk92Umd6ZHFbQHVhZV9rOUczLl85XkRvdTxCPTwwQU95MGpGa1crVVlzZDQ5OFNWY3dYUnMxQUd2cVQ0MG4lQlljODUlQnBaWXpuYy5rYVdHW2c4bnx7eCh5c2RE''@;'; put 'put ''WH5NMkQoNTdUYU9GPy50PCkqR2VYR3QzQ0ReN2J1JF0pZDZHJV4hKWoqR2wyKEdaK3FTWikwLkwqKzlRXW5xRzVEeCQ+UWswP0xWO29QYixUXXtgXm9dbC4xLHlmK3I3dU0jPHYmI0c8blU+JHV2SzNwNEorJDhBUGtKKTgkeC94Szwzdi9NXjdQI0hPP2BKaHdLcUhvKGxWPnNTZGImOUtYPEVG''@;'; put 'put ''cUB+b21VR0BUbEdKa0NkRi9qQFRqJkt2MEM2eHssQWhBNHNVfnB5PHVKRCU+bC5TZVdCcCpFSFQuTHsoQHA7cUVARW8zLzZgcGBHK0hAK3gvQEhiMy9WX1ZaMmJLK1RXXmxMVlgxPTZ5OX1SLkVHK20lQUsjZkNadUNGaUJtKUUmY0lIaks3dk83JFthYzNaUjs+Wk9WSGAxKztvKzEjPyNzV1oy''@;'; put 'put ''YjxAJGcuPXJvTk9ZVnMhLDFfNDBxd3EuKUpqJnd3PXI+PysxcXh8TV90X31nOy8vR1RVUjE6TDFyJFVGTDpMMkB0cGxWV196YUhaVkA+fE5YMioiOmIvZXQzUThbUk08WmkqYVtFfEZwbykpenVvfHdhUysjfj5teUd8PGYsZz5VTDp0XT8jZzsrWV1QMnMkPnxbPyMoS01AUXB9cXdbRXFpUytt''@;'; put 'put ''a1ZJNHVuS2lLRz9JPmUoUl02QHpudWo/emJvQXN0Y115Szc0T3R4dyxiK050XWBBMExATzxOKHdAbXI1ak0wY0MmXlMrbTFZZThtXTt3QWUlMG5FKndCLHJAdz4mZ0dXbmcjTWBtaTNhS0BteEhdZ0s6PipFdGQ4TUhoWENzPHExRDBKcnRAeiRyQFQ5Xy49bW4+NCtxLmVBckV4R3NUbENZeTFn''@;'; put 'put ''d1I/LzB7OGlzfDw2KTUkUzdBNWlzPSoiNCI4ayE9KlpTMWM4NHkmKnYvPSs0NEtadmxoYH1GU2haWkF5LHgjQF1KL287bjdPS3NeIXM6ZWhrQ1VPSEoyeXkxTGdIfVAxOzFkU2psRGNsKGxEZXhmPzosI3ZTNCwmN3lMRGpDcGlwfkJWX3slWHNgJm1fbVk/IzBqLCZfcH1nTWVvRG5HfmtsfWZq''@;'; put 'put ''Jk1dUk1JSEZfXl5JXTZBYSZqaWJPIWBRPTFlTFAyNURtfn5xRS5JNzBjQyhVOyI5cV5qNSw3SyN+W0NQMVgwPjF7KHoodjRlWk1OODRPalM9fVdGSFc0bV89KE07OiNudT1VLmZaLD18eXhnRHlQZW02WE85IWJlQz5iKCVCNHdrLkgxV2ZiXUBHbU9uLnRESmQ7V04wPzplIVIoRkVUMVIia1Rr''@;'; put 'put ''WV4hK2g+eDNjUyVrM1FPQDA5Zjw2PU8zVEQ3b1JrImA6JUl4P3ApblorWHt0dHNfJDQlXyRsJm5reFp7JXY+K01mVEkzXWF7YnxUOjFmTjAzMW1gTyY+YFdyMy8yRVpIYTM8dnszVDt1NGAySXhjOnVoOjZIUG9GcX4odCFtLiF1N2QuL1NWT2piRE9uZDNyJDlUSVhPMHc4Yn4sJmJHdDV9KDFa''@;'; put 'put ''VXxWX2NIJmlZT1JNe309bjA7VVt8KiMibC4ySHRUL0trNTdeKiowYyhOVzpQbzNSM1NoWFozfHduRFMqOHRVdzxxcjBOV201VV0hWTBVUnAzVDRIdFQ1dnVzI2NGTiUkbXBXP31pbVZ6QDF3QE1mVHUkJV5Gei5UOjF0VCN1e00yJU82Lz0+Q081Zykoc1tMcmNsN19ONG47NDF2P003LF5sbXc9''@;'; put 'put ''eXAkdlYlTjlGI05dQyxSJGpfOzFtLjpIK25sXi98N3BpPDQlO1Q3MkU3InIkTkQlJSpRV1tNcWBhYipzS25xbylgfXc2eXt5Yz09LGlZT1JNJjJFSiM1cUd7ZCl3Pl83Ql1UKT53K0tvQ2EzPHVCKzxUeU88IlRMJWZOKzwkYkEhWF04SG5aI3VXO0U6TGdwWEVjc1l1fE01P1MmbFsoNCs/VlQr''@;'; put 'put ''RUEiTkJeVDcwL2dPe2g2WDE0akY+U09fO0JRQEYoXUJ0PCVsK0tsVzJ7N3AhNlAsY0ZuNFFmR3A3ZVNpKjA+MEVGMypZTFBzS0BQXUVla0UyNztZTyFsPFJKNUpFZyxIU1BybVhKSjJ7cE0pKyg+Sjw1OHdXSGlQSTZjYmNed2tUZ1NGRSpBaCZOLm4zcGh6TlE8WCVQTDxMMTRePlNHbGhrPyM2''@;'; put 'put ''ZCQueCU2UkkkQ2k/OHhVPW08IS4wSW9dYk1uKTNIW3pddGM8Nm0oXWkmbC8hIksrZ0EzKjF3el1TcFdJUml6LnNsRVNwUyt+bEwiMkpsM0BQVzp4JkZyLE1tNjBVUVgpaXEhc1lgKiVeTigrckJgTFBNO0ZGfjZYRktkWFlpXVNSe2RMSiJbPS46Y2FyeXpBNndoTC9aISNPV016NkFCZU5CYlg1''@;'; put 'put ''aThUW0AuLFQqY1s8TnZwczFCYTlOIWQheD9rZylCUXY2bHA7QmI/I09RbjsjaD44ODdSY01MUFl1IzxfLEtSWV5vVTtBcHs7MlZhc0UlNmNRaVFyOCROTDg1Uyhnc1VRbztIfnBqPjhdLyE0KVdKeDdwfTpAWF5KamMieTI3fGY3ezYrPitURyI4Zno3L2pLRCkmb3NZfi9QUj0zIWYvPSlpcEIj''@;'; put 'put ''Q21+TFZ+VWQ/JUp4IWZAWFJLKy89OmtmOmdCXkBeUTBTfUY7SSN1TmpjRVlMJHRYTEJ0b3d1K0A4UWIiQ2VNK0FAUSxRMlk9RjU9O2t6Nl9iUWU8bzQ8bGBwZGlRe2NvMUFbdSM7Lj9dWUlKRUJHbUFuZlksckM6WzprU3AuMlU2PlNjUjU7b2dIVT4zVlBXUCY/fD9IRlYxdVV9VGNQKFJnTW1F''@;'; put 'put ''Pm44NylZNCNLaGMzbyRdUzw2Y0JVRW5GYlZsN3BvMzwyeElxUl1NTyw1Mnd3Pm0+TjpiKjAlUDAkLnRpTSJSW2R5SU5XNVJwWXNmWE5Nez1uM0EqT2EwY28wIV1FKCw6MER6dTJ1YVlXODMkeXVfRG9PYUNjNVQ1P1dJUW1WPyM3OjBEVz0mbHpnPGtmOjA/aS5tW1s+PDgvPFcuYSUsdGFXOWI3''@;'; put 'put ''LnBRREYhTUcmOj0/RldFJXVjekZgVkpRXyZ5RmBASXxGfTh7ZG9FT2JfWEM4O0RWV0MzXUZ2V2ojdVdJQW5MJnRIRl55PnZVUjNYQVNhTGRHZngzSXFJLjFCLn5gYXlXXkpGMFp+VlAhNyxpWWIydEU6MnV4MGB8YG83N0BRei5pbmd0MCE7ZkAyZyF4dE9TRVR7WSVVOz5eXWpsWih2aShSWG4j''@;'; put 'put ''UV1YWXVVYixIPyhTPVAxOiw9X2tBX09tem5eSHcvZDU0PlRHPT92ZXVwOHFaP29gMitFWG1ZanskVz5AN2M+WUNCZyhUO0VGbE5zI0xmfUZzeXZfRChERHByUEZQdkFPL01GdGdPbkhsKCZ5KHZqR0Q8NyY6QGVmbCwzYV52YkcyUV06SSFhcklsWmNIRklieHUwOys1RlM/UGI7QilqMXQ7cXky''@;'; put 'put ''KHYvLlNmRkBZV2Q+ZTp0VVZwTiElZ3p0Wjd4bCE9VHtbUFNNYE5pJWBkNDkzMV9TNnA2OVIkWmxRZmw+aWBkRzV5OmgmPlN3O3UiZHBEPllhc1o2S0UqUWlvMkRtemRgKSwqW0x0O2N9IUtYRGRJQUZWbk43QVBnRktSYD51cHI0aGojaW03fik/XU1xRlk2Oik7bE0zdXZnTVc+Z2tlJUVuM257''@;'; put 'put ''PWY/dFc4R3cxRGdqK0FsLjxNNWRXQC9adEJBOzIjTTl1V3ZuQXFtZz1nT29pcilbOFMvajlSME4/XU4xc3ZObX4/bkduKUkyLiVzWkI1Py9zelpyVzlOW1lwNjd3Myo4VTBSU0RXYmRIWD95VXovI1QjWFo8WkFZLFMoe3BxLjdHITA5WVoxcGQ7cGF5NTgrcjJxakZJOVlLcDg5SlhROjoiTDFK''@;'; put 'put ''U3FPP0NsUTMsdGkxOmwzQU9wSjJCNjpGL35bXm1mbWI+cFpJQ2VHM0VtQmNwZjhHYDZFOE1GTitWNlQrRDpobUZtY185cSlkVjQ7eHwvREVkR0pfOXx0WWNMQHQmXVc1OzJWUnx5PlV6c2tCZFRrciVjLHJGU1tRNkZyW2FySmVWbSQiMFVdN2kqWmJAanY8Zis2M2RbU2RgIXpBd1VKclExT3A7''@;'; put 'put ''a3tVRCg3MWxsRTp9KypXTSVmS09yT1t2Qz1iSzZoPGtoQGBzVjV8cTQiO1UmN3B5emM8bWNqbSN0LHE5TGA7PUFlciIkI012SV8qaE95ZG5eY2YqN20oNmF4KCxyQ1pxcmdIMztTb089KUIlLFJwKkFRKUV+X3ElOVlveDQjI3JvaTc1PDdXV2VTWy8rX2lpWE82LzpbSEdPVnhOPXROMEpaalJl''@;'; put 'put ''aitteypMWCVzc2BkYHtmNyM5KkVBZCUqVXl7L0hxSl0qITVzWSxjY241IzU5Xj1NIXw5JXhHMk1QZm9eSmovYEglKXhgR2l5VzNwJWpjamZgfjwyMkJRUlVYNXx5V1IyWUxrVSN7OUVfPWwzVFkjMGd0TVg1JTtaalFNZVl+aEpiOEczWGtNfCE4ISs5Ni4zX3AxPWwxVFdTKV1QYiNmRjklYlFu''@;'; put 'put ''eGw7QFdkbkpdXkhFcDMzcEY6OFN5eFFfY282NWRgP2lESjY4XW0wN1lGNkwlbllFT3BtK31wPyFXLHdNJC4rOisiOipLIng+e0xyMl14RElrZTw2MCU3SUxHIUR+JGpJTXp8RTZZRSpuOjw9PjxmNXolMkhCU1khXW1TIjhHQj9FKUplUUJtVmQ0M1VSK2t2SmpxMD8jPjc2KipmOVZdRCFlN2w8''@;'; put 'put ''SWMyWWEwR25NO0RlVXFiYkpHcV8yWzh6PW03X1t+OVN6VWJBRjxDMmEwSmR1MzF+JChXX3suL2dddWdwNihbS3l1MChbK3UmbERgJnh2UkAjWUtOWHdKTnlLTkY7YEtZS0plXzJLflclUnk2SmteSjE7PyYiKUZZVC59QFR6VltOWVlmTH01fl9ZMDkkd0QyQFU/cT0saSZ4K05TX3EjQXlAXmUl''@;'; put 'put ''RVpaOHc+XzN3eCJPfThJcjJifDU1RG15YVkzdUsuYSopN3BGeVVDbCVTRVpZITArcmlMR31sVzprcDM0fXtlMiNaKktZKzQrQzg6NElwIWNZSHRdKFRGc2drME0rc3V4MGs5VywlNTpjWF1tUV0xNmBRNWwpcnRjMC8+OnRnJXdFOE8lRDhlP3V7TmwlclU8UTtoOE4wI3BSI0BNK1NKTHY8JUFd''@;'; put 'put ''KiQuZFUpcHRtVTtZflk8SjRJQk9aUT94fl5eKDVqQUdvRXlbdT13SWx6eUUlXUU7bGBiVywyOlQhKXlHJmQyeWMlUFkvQDJubFpEcHcsQn0oLG03JVshRV5ZWGtGXllAUTpLPGUyaEQyfio0I1hKIUowUWMyTk50JWMlK3kmKFNrKHUydSQ/eCouV1Q3O1M8MG1NVTY7Lzp5KCNMfSl1W3Uye3Fe''@;'; put 'put ''KXdPcG9CQENjTnE+PzA2JH5FZTVHfUQvX1RsW3xKOFlYJnR2N2NVZGUrKTtRTHwveHpbfG5bQXB5WyM8QWMhMFJ+WV8oJT51fW9MMjdYU1tHfm9zfE9mbHBlQS9uIyt3TTJvO2s+MytHLkMmYHwrWVJ1eUh2Q0pvbklFXjptJVo7SVFqKys2S0wjUkl+fWtiYW15WXB+dk5hbTIpcy4hNGhPM2Ui''@;'; put 'put ''OmFtJEckPlVsYW0iNHwuc2c+W2F4P3JCNzkiRWtkRmZYYF0sWG9ScCFFeW4sLjFbMGs5KWB8WDdAa3NAMXw6QUxlSExLOCUyNiUycTZaUVVbcS4qMUFiSzVFc1l3a3NEaGohc2lkSjQzc1lCdHhbaShfTlhMXXw6MiMraEp5cCped3ghOiUqcl49TlRWMk9fdDQzWkZ+JkRIWikoOCxEOG46OWcs''@;'; put 'put ''Yzc6bE9zR3trQitIbzxyMWhvfCEsZWxqPkpOVChpZF5JYGR5YCp6ZjlQW0ZZJV8xL35zZjhqWmI4W0klW0lYX2haQWk0QHV2eDRjRVgvbylpWHtCYjQkWylse3I4RTlaJlo6SG4rM2RjKzVwSUxDM15mXmYkbyErV0UhVnpZQClRMklgXTBXSzE6Y1dvaSIxSWBFazAuISVQNysxVk1eSSJzR3k7''@;'; put 'put ''UnF3PHw+XXNvI3Q0Z0AxRWtBa01fWFIxdXMpeUFWN1RfQmxrfGpsQWtId3BJY0tnNypJNFVRT0Fpbl5LSGlEPiMhWzdUTSNIMjA8KXdmfEliKThmfCZPb0oxd0IuZmtnLzJgNzRWPGcjaSE/PHpTWz16UEFDaGY+Nj5nL01TPGZKKEkvNW94VUlOMyIyRnJPeTNoV1pRQ3JJMS5QVj9SKExnbD5p''@;'; put 'put ''Z3d4fU4zZnEiNGRvZmZPQHE/fn0lfUM2NklbNyRELn1OVDhBRCZeKTwuaVMxUlRTdDN1NmouI24pO19FJC53VV4sI3k+JUY6ZUZ9ajF6NDo1SCMvaF5menZxTUw7c3N0IiRvZWc1L3ZrMjYuOUx4STEyRDN4RilbJHRbakA/fEZwMChfL0MiJWFrZy9UQVdCNnRdOjtSNENGLEtMdjc/XlZMKWQh''@;'; put 'put ''S3gyV097NzVaKihxVzk7WjQveUViO0BJM19URWx+b2dfZGpkJT5uVTUjcytyJGkzcGdfNFBXTXdIIWt+VXpWNXYhIXQzOSgzZDc5X2VkKXBKLmZPeV5DWUMlLjB3ajcjWjpZTTtgIUFJLDpeY1drS0w0XWcpUzJkQk41MXdUVS4uJE58fjosLzg/L1Arb0FqXXxmNiU0IzFVOGE9UFl7dkl3RVlI''@;'; put 'put ''UUhNelkmUzRzWUVgQzQ9UFV5YWI1OV0wV2s4MTdVI3diLlomPHE6VDxkNXk1JFg5cEJtVD83THAiPTZ7ckVLSENjYC4sT3IhUXtySTtla3khWjNiZUZZRzBWaytKREcoWlUxMihfaiQiS2MxVURHKHMhKnEuVythdElZQWJ2QHpYdXNIOV0qS1AuY1IvdXUmfVV3Z2BHOm5sfF1gcGcyYTpDPS4u''@;'; put 'put ''MSoiNXRPYVB0THQqQjlmTXZLQWlpcmp1MmI0WkxsTGpFIjIzaV4/Zks7LGg7fkJgNSVjQiJ9Uk9dSWBVUlIyVkxyLyRrUHA2NHxAcVZQMU5UM0BhVkxqYlQ7ZDNKYXk5dDZ5SWhSdnUkZys5RldvL1lvOy89QEdRdHhEck5VTER0cCt1YEByI1Rrbi8+MFJgcTxYOksvcjxfJWd0Kz1YalFWOUNC''@;'; put 'put ''KHY/WDJTdkEoaz9gYHxYWD1bQ0QjWlhZQXdBY1JoQWNFSUFIcj8ocSRrK0deR3E/SmAuYHM/S2BXTy84dU1xWCYzJks2QSk4dU1pYFlbPCwlR09Db0EmdFk0Ly5jQXU/QUoxM3hiKW1udXhCK098TFJKO0UoXTRDNzZ6RnJZcmp4VnAxSFVsY0BGVmFyakVzZT95NiVjJFhYNTRDQUhgWVZhU1JO''@;'; put 'put ''VD98LE99cnNqVkZ3Tko1U1ZXT2B8Z0QpTlt7ImEkT3NqaT42Z04yPVQvSTRsJVhQfj9yJiMsSVJvK3JSLjhuQ2VdXnU5My9VOEk9ZiVvZk90UVAlZjprdWxjemc2MnR4fClIS0wmUWsxOFJlSXdxU1pLS0FxJFZ9XTovPFZDYVVSTmVLUlBmaXJWcyoqZ3kkOTpLUiY/VXtSMyNlVnBQZG8iKWUr''@;'; put 'put ''ViteeUwqdEtvWkJ9TGtjRXF5KSVFUi9WQElFRUczQTlafXdmP1NteU9mIykpK2h2P203P29IVFIwMUs5cF5FfHdANW9eSjI0NENLOVIhajFTcjhsUiQ+QHlMT3o1X29OO0h1OTFpMHhQU3gvZXAzZVgrd2xpOW5zQT47LHtoekJQeUx5RVVrdDtlZ0YyNCxuZnl0MihSbV9rOC4lY1YzZW1Tbmc7''@;'; put 'put ''dUs7W0NWRjpvKCswO35xOnE3YWFqSUhzJlRxe0chdlZMSmx9NyhfNFs4KDIzJm5FVWp8OHZQZH0vODUuTltiV0JxQU9KSX46Ok9CPFAqQFIycGk3KnI2LjFRTDVjR3I1LD5qWHomV3BoL1E7WXFdQGI5e0M6Tnkodj9Od095XzYhN1JYajlFTXlvQnchOmtBRi9qT0hxKix2dUhLdSZXaExiMSpk''@;'; put 'put ''I0ZHLyxkZ0s2aFg1ZXVeeHwuanYhY2s2WDYjKj4/O1QpZUhabUxoTGdXUCVNMkp9YDtkO1ZKUEZ5Z3B1ejt2T0guaVAoUnB5QHIjKX5Acld+MzhuKXE0RnNGfjJDIV4jJk4xOVdRfjJhJiIkQW9WQGJoUntqYTByKEVefWBKLlN0bV93VC4sMDN0VzlLXys8fXc2JHlGM31vSk5UbiFfdkpqJGZh''@;'; put 'put ''aGNwVn1jZ0Q3ZnNdU1llQjhCO0I4eVlCWSZZLGxTJTkjQXZTIzRkcTNpMDU0aGJteFJbcGREX05CLjREYGwlcDxTPUt9UnwrdXthIVo/Kl9iVkpVYUpiS3BTXXYmK2wvQmMzezx+R0oibH4hJGxnR0ZsJWhYSUA5WGYjQEdpdyltNTJROFZUYDBlXyRLXVN3PkprSC43SCFMU248VHpxS2YmdSRF''@;'; put 'put ''IXE2KUtbYXhpUC5TbGVXaUtgTnxnaGY3VF87VDRuQWVNOTBHJHleWjUyNFEyYC95VXo5bzN0YHNhK2Apcy9tTF0sbnU4Q2BKfUBeKXRPc357fmk6MDwyUzEjOkVhJmV6Yi5Bcy4sTDd+TypOUUBIb3p8WVZCSkBHcj9US1JWUytfQDNAN3l9Vih+e1JgTkEiSTQ4QyR9NEYjQFJCS08rZFl6eU9R''@;'; put 'put ''V2NjXjFAM0tlXWNCVF44Uno3MSI4PFdpTWovS317OG4lNDxeKSZHUTJfVGNXPT9rS2F6XiJobDVVKy40dXcoQjxWSlhwO3ZxZUVqd1tHKDtvWitXRWpkS1tna0xQOzFMJVp+Wi8oRypGJVl8WFNZRUcsR2A+ayN6fl1NMGwvVUpSOTUvZissQTdkcllrcDV5WXVdUTJtM0I0O3VJdCUjSEI5MFJA''@;'; put 'put ''d0NwKzIlbk09ay9mTSo5ZiJxVzU4MXxoW1IlTiZtOnlPbzkpS1t5fSYvUXBRNmxUJGs5U04jcEE0ZGRVK3VUKExbMUI5Y2lUTiY4PUdlOylsPE4zYi5kTCV1PWJxX0FuWyRwTGskSiNtQyx1amo9Nk01IllvSG16dDVsRiZKSzIzKCRMJlFbb3FlNnZmbSZ7aE1DJXNNLDNOcj90OV1qOilufWcz''@;'; put 'put ''RDN1IlhVSzRIKi52V052fGU7PUtlV0AzakhdYl1rKyk9N1JCRz85WHM9T3V9UzU0WVJ4SlljfSpJJSpIJkNlMjZ4MTQ2T0MlZEhoKFB0aFhYJGVTIWddaEY8JVo/IT8mSSFMMyY2b1h7QWVJOkBXbHQwNVtjLmJxSkEzRCFLckBUVSpMfV5QZkI/OlMqT1tCMlo8PH1CUzI0SV5CMiZWdzJyJjlL''@;'; put 'put ''TEAlWzFVUV5+LldZIlV6cXk+emJkNShkfStaSjYqJip2OkZWIktAX3NWLF8xOyU9cFl+VnZNQDFOX0laXmtBSzBJeEJ8P0RGTVYkJEFGRWRoXUFlPlNNKF0wYVtaNVdPOS5kVSFjaF1BVmgmQEclVGxvfDFDdVVRSFlfd3cwZkRaTyJZSGtSRGdrXUtATjFkblMhTGI3QC9xU31HU0B6fXlNYlNR''@;'; put 'put ''QFlfUTNJeCQrbSgrVzQxI34lfENVb2Rpa0k4YndjU0REQ3VsNFpZUUkibkpLOVVXVXFZSCY+YzA9MnRmXTVmT1VuZmR4ZXxOYjpqVihqc10sQWhGanVRODdGbmo4OjNgO3MmTigiLHEoMzJPbkU8LG9XVTF8QFNfbXwmQHk/OURdM1gwYk8jWFo8alNSM25XL1hhIjQhUHQ4ZmZzckR6KlYsd2lj''@;'; put 'put ''TmVtZCNiY2pkZCNiZjpiVU4xZEEjclA/cDZKQDdyfkhbVDU/dzZjKVRMK21BI0B5YStJQUR5NzF0XTdJVjZ2WCpLWFhAYWRNP05KWC4mV344X2hMUFc2cHlMNFRnRzViUXVOVkBORGN2JDMhPXxzTlEyZUduUTklVEkycVlkM3xUPixHblAsXn1DfEVmPntbNikjK11MO1RbcCk1X3ZMU2hUfjlR''@;'; put 'put ''bDtsUjlRalJvTElmRVZDOn07WiIua1FPbygvcEc1SDc7bThzOXpVfkhpUjhCImRsazYyMyFfU0JlRDgwNnh2KWApdXM2SFNdJks5eEVRN21yVkFVJHdMSTlfN1c4KClWUFM/U0RCY0t4JE0yO0pCZ3p3TlteekwwenRaOm9+a3tmVVJgPX4kKjM0NS4lQl8oVmArUFhTe2ZOV01CTCFaZ0V+Q1te''@;'; put 'put ''RFcrKn44Kno/YkxHNi9ReXs8cEduTTtzeDUpe3M6SzFRb1JNcTA/I1JdMzZBTDNhSGtPPGomWyZJbyl3NWVqaE09MEM3WzBYK21oOFQ5SzZrJFJuXih7Ty9ya1pvZFtDOWApWCgrIjNYRlR2RioiM1ldQH5oKWh1c1kjP05XeTJ2QzA/bypXcmNZQlV5czJ8UEI/NHNTR3M3RXMjRTxraHxYJjY5''@;'; put 'put ''eURXdktXYkF6L1toRipNb3ZBSEVtNll3JU8yQ05pOSxjTT1OKkprL3V8angkUDlMU2B2KGpXNVNwTFRwR3E3dTMhNVR9L2s9RmBjfFk1eH0wI2pmSj44UWJ7PTZqO21LW0FoQVRITilnQWZHaD4vYkcsckpTLm4vY0woZy4xNmI6bGo2aHtGZk1oaXBLdVouOTlTOE1rSVYsRyViUlI4bmhTX0VD''@;'; put 'put ''enFCWU48MXxCM3RRREdqRVpMTldEMnh9YExkc0Z0QE01Rl9eU199dn1aQF04Vz5DdnVNI2FGKzk9ZCVvZkhheG94UCNme3AwL25gbk57RE8mSTYhKVNQVXVae2RoNy85dDdmRD9JVVdKenB5MXFsekYoOG5lWTFZKGlna3o7a3YzeCJMeiZPbyU3bXA1N2xFdHc2S0VQbXpQJls4NDM2SUoyPTY0''@;'; put 'put ''cURWKFJuUXNqPz19amQxbmVjentefSZfODcrfU8mTyR4NDZaPmQyaCUkK10ydD02LyozVGh4IVdSPWomLD5jKWxvO1ZTQSZ3c3JDc3ZbM1B7PzQkUyVjej9rT1IoKlVCY0ohSG1nNk9sZmQ1dTlmNTIsbFJyMSRWYSRILGFSdTBbUzBvbCJBa2JFL3NPXkJZdlM0XnlVbGF3RCg+am83QCNbbyMl''@;'; put 'put ''fnBxJFZoVWlWP3clYkh1NEliaDY4Pm9Qez1nYHdIczNfSH5nYS59d2EwIWo8VCYwO1t4RV8xQ3lHdyI5PGs0ZXZNTjpJZG1wWE0xbTxJOSpnQEZLayRBdk1pYlRHMDw2NylPcHQld0REY0Y5QU1AOSVzdlRNSURlK3lVOHNdZHImbHlMcm0jcz8jJmhvMjNfOG5DS1ZxbU0pUnpMSTljLDxTY0s1''@;'; put 'put ''PkR8ZSFjUyJucUgiaUlZSCY3ZWRgbExWR2swMkVjRFNGVUU1cTNDS0NQfENzQV04Un42bVR8dHA9WV9UcFdnIW9bezlPSl9EfikzVSImb2tOUzBMdCZvcE9Nb1ZxQ10wciVEKXkyRTZxTVR1P2hGOm5WaVJeeVpaIWp0VChuWXw3V3NMNyEwWH45RCs5L0VBRE1PLkxOZSFWJTBTYmAkSzhYcGhl''@;'; put 'put ''RmpPbGRzT2Z+TyJBND1Qcns6JGokSFB5JGYkZkoxVSpTckVqZDdLTXdIQVgpMkhqbHtuIzdkNFVCKVZ1cl1RJEpWZmRuZV9ITz41JTw3IWYpXiU1VXh5byI0dF1lWSZ1W35MKHRTfjguVnVOe01OKHVTcm1VTj5wYlo+ekw6MzYxUGlPdGl0SjN0UlJZeGZtZy5JfCplfk8hbyJDeilYIixPP0Rf''@;'; put 'put ''dCNuPV0qWElEfClZSWdZS1IuLGdUUlUsKnVMcyVFVV5EQmApbUI3fndfazNZMWxfbUR9am5kdT84TVg6ZDw6WWl1dT9JUFBFVWVmZVpnMTVqLnJ1RlhreU59WTgxJVReQnB3RXFTWTtGTHFEOXdFRkdxZz19X1p4ckhmJHlGU3ZiSGdKbz1QLl49ZTs9NGxMVC9HPUU8ZGxdMDJBRCg1QXdvLCVq''@;'; put 'put ''L3cjK3Y+YVE1Tn5EJk50fmw4dCU1PDQvd25YWio7d1t0UWFPXUN6QFtxMyxbQjxaKyEvfnkyfUciVSE6M2tSXyk/cz8pbUBGdGlnNE1xSC8kbG9fYVBJIltCQEFGeEpnPUp8SD4kakgiRF4oYEhudnI5JlJHeTJzZCpWJDpvYj5sOTUvaEIranc7OGs7MiE1JkRfS2JmISpMJTtCQDooSzJfXl5U''@;'; put 'put ''d3xiIiEoZnk7WF5ASl17VlU+OHh3PVttQ2VbW3ZkczlFLixNXW16MUI/YCZmSDBXc1NPW1ciLnhYUTc3diZGLjkzRUp3YDR4fiJ5dzdYbzwwbyteQDFMZkI1Y21DMHt1VkAxXylRd0MqbjdBTDxsIUtrJHUqImFmdWVhZE1uYnVrVT8raCFeXUlMcSxRZHg0bWk5fXt1bllJdF0/YkFbJHd6MS5P''@;'; put 'put ''Z2tYNk83aWtqP1A3altuKjN2aT9lRiVYIiVIWnhhS0dhU1JzPjd3Yj40dERXUiRNJGhaUGBtSFk3WkZzajlsIm9kOT5JP21mQU8mJStTWDU5b1VfSTtDU2MzQm99LFN1JTRpXllBM1t5TE5LYE9NQGBMK3A8bVBVTHEoQjM6c0BzNihYMkYqM09+bVlSMnA3TCYoZCNpQWVCOEFlQjgpaWJgaiNK''@;'; put 'put ''bGFbOU47PC56ekB+UDVfND9iZGVCNmM3RE5ITl0sVkdWPkkyKEIkXkhqIU9WV01FNSMxP2NfRy9yKWkmZiM6dWNgPyF3PDxeMVRhVipyNmFWdTQwRG5ScnUkUzJFQ0EwV0JBM25FTUxDXUReSjprcGAuQk5KZTh6N0NXZDJ1QzRPPmljRVZFQUFBQUFBQUFDImVHPCF5Ry4qXj9GZ1FlWlU2aXI3''@;'; put 'put ''I25BVTxvbkdZdU0jISUsXmI5Nk96YF5rRClIOFh1djYzSGA5SG55KnFPUj9pIWZJe2xDdzY5d2pVSm52d1dsV3VPTk40cmJwM35mNGx2Wk5GVmI8SC58QE1bT34scW9zWFYkXWx0bTZ8Rll8K0F1Tm82cVJJQEZ+ZUh5UmJ8SjdvOmxDM1pYZzcrc2BxbjQ8Vj1KYUZ1VCkyc1hKbWo2W1tKIjE0''@;'; put 'put ''UyQrRD9lVlAqWnIsam9NTzVrU19rWld5MiM4VUc7N3M5cGRiX2diQlpnSFl4T1lhRTpFaVlCMlg4eXNAaTsqZlYsI1lWO1pKVnJMVU05bnNIcGhoM2BvWTxPbWd7Q1lOVyMmLmBFTjBPamBBQygjeWd1I3kvSiIjIX5dWCRmd1U7W0BMN0RdUXc5Sy9JTixPQjwsaEpRUz5Yb0VbQ1BKaT0mRkkq''@;'; put 'put ''SWB+LytFM0dJW1VCLGNtSFhGPyFRekNHLGxJYz4qOnhGUyh+Q0s0eXtSTltEIW14OSxfTndbSVtRSD4zKW9sLHhTc19hbWh1ZjRzYEZiWjNlM2ElJlpTPlA7eX4kNFpXT09JTnpEdUI/UGw4RmZGIWB4fGlHdXcjISR5bW9PNTBYPDEseGtOJTxSOVZtUWYwPSM0UFVVaWVGM1NRNFsrNnFnLi9i''@;'; put 'put ''WXAlX09Td2pFW0liKTgwSSY0WSVOR24+TkZ5aGVWUnwwPCIqKkk8azskbjVtJGx+b2pPWm9bTzF6VVZFQDVYb3pacVAua1VbRmp4djFBSGltK059WzVEd1UiRUo0VnU9KHBCb0xTQX50Z0Z1UTVOPy8zeGYle3gpanV6SjA9bFJrK2FGYUVwJFg9OzN+fD5gWmlSdlZza1EwVWA4OnhZcCVfUDpJ''@;'; put 'put ''biJRZmNyRTAvS3gsWXImSi83TTRVXnkmP3hdZGkudG5aaHsqe09zal1KSXwlWHMwXyFNeXhyVkdXYTs4Rlp9I19GTTZoZXg1OEdLWElITTpiJFl3aTZrWWQqKDVaTlMvRltNeSwlOX1JeCJNQFtQRzk1em4/Kjx7Ojlke3lKWyRQKFtCRjFGRVRFeEdMMWomOUgib1AhcnchRUpdW2N3VTVdKyU3''@;'; put 'put ''YEdENlhITDB6VCNddW00JWFdKUVIdkIrPldUYHhJIyROPSlAOnM1cUxrUmhUUnY2U0k1UFgoPCxNM0A1MF1zUyV+XnhaaFhCTHlfImtYRWFVMGNGVnlhcUAjPyVEV1RbT1RqTFJCRWhHZEpPTW1OUG5dR3tzP2NMfXJ9Pj5gODF8XW8qZW9ue0NycXk8cnp6bS5rXz0jUHZiVH5mIVZkOnhrQy47''@;'; put 'put ''d2JpMTZRanNVJTlrZ0BWdU95OElbKyp+Kz5LLjtmdW4qTCVASndgMHFfanl0SDRYYTlNWktXcFRdeGBoY1V0elF7L0VnOF4ldzJFN3NAYnwvN1c6MiNuZmEqYUw4YkJ+PnddJk9URUx5X19WXl0qSl5leFpFeVZYZ1UiSDlXVGpIS0lNSF5dOS99aSNbYWxDJjAoJU48TTxJezNMM092fFFNJkgr''@;'; put 'put ''XTMjO21JW3t2SVZ2Y29uSWpmP2BNQnNidTByZ0VnYCo3aks1YiR3Uy5PejpgNGckNDApfGJzYjB0VihPWGt6MTgsJU5vfixCMGk7IToqcTI7OXlFITp9bS52eXU0OjJNS25RQzBTRUF0K2hKdnU+OT1DJlRibnUjfVckPnh+akF3NS50bH5wb1B0QHZnSm5fRXBgR0JANiROTT9ELykpcnQ1eHNL''@;'; put 'put ''WyklOk0qbntoTm5SdndlUEJscmZ3M1pySiFgeW5xIj5ybHsyNDUvcHdvIkdBPCJzUzF8K3lmYDUpdSNHbmljM009amZxOS8sdTt3RyxQNy9lPlt9R1s9V3tdKVBvfDE+WkEvVVVAdyVPfS5GJWJ6WGEzTCVtd3BvPEVSI2pFMUR8IUVeRW9rJndIalVgX1J0S29JeXBTMUt8PSpFeFRVWUpzUmg/''@;'; put 'put ''ZmlndFlOOVI9a00iVn1fck1LVntte0NuLmZGSGx2ez1vdnRDIXtxIXl1TXAzTlA/ZXZvK1NXQjNUcnx5L3FTeEZgbWNUW1tNeHo2UTk6ckN5VCg9XjhNa21AflR9SS9QYzp3fmFyaV1vVl45YSJjIkxSTi9UZH1BIlVZNXA9Pzt4VFNKXX5QbDYiWCIoIj5ZZzxfKUhKOHQqLE9sPndIRCY6QHF7''@;'; put 'put ''RnY+S2RfaiQmVFlBO0RXVz9jP0RhUGI7M0VWb3hGXk9WT0NKM0woP0RmY2VEfG1TZkJxKSV0TjBDcFgoXkBFUUdQPVloPXBIMUFYeVEsM3pLPThdP3ZRPnksZSxkby8jMlpHZGNWTkIsTWB5aWIjKT9NTExXciNVdSxKOngoXUBKSlB0Y0Qpaj4jK25WVXg8Pkk3ITNpYXtdMHsrZGwzL2F3a1gl''@;'; put 'put ''aiVUIjsvKzd8bGIvSmB4bmtmYC98ezRXNnM/QWAlezlSNSpdUiZ+TzE0Oiw7YndHSkdzSlpnWTxhIzxNTj0oN10iNWltcU5JXmxrfiVPT2t2TV8ueUxPLlZ5KEV3QEE4Z0dhIz1LaHM0NSx3I0FwRnROZyhPdWU3KGZ2eVJjbUN5eS9iempYMkZQOVBqKFhQaFQ/NyVYTjFVanZgbk49aDA0WT9P''@;'; put 'put ''KypMbGMiUm5GckhHakIoREVYRDI9MWRvOnRfTypQQGYpWjdZYW49RHtWIWFPL2F3ZDUkZTwwV0godF4+dHVWYThvTTZHYjIxImBzaiI0ZX5yMCYyIUtQdnBhVDpqYC8ucUUvR1FHPkxdSWRqKjgoVC89UkdmSE00QjhwKlRPM1EsfWl5OlorVGcvOkAieHBzelNge31PSVtZfVcpTEJOe1B+TiMy''@;'; put 'put ''NDc7cVNJPGhRY3p6VihBajVlLE9lUSNTdX45U2NybD9WU3dMdiNbJWFDY1J4aWBVLFNLbyQmJSRrOmA7YC9kPTw1PDEuQFhjLGo3KzNCSyFsOjs/Wkd5KypIJkpNXy9mcnJ7QHJfOypLJWo5Ti9yYHhtNHw2T3FQISVNKHNfejJHMiNHZXtDNzhDbHImZ1ElZ11qVUZVWGdCO2IiVyUlZzg8LEAk''@;'; put 'put ''Knh3d1NyOGguLCY0Oyk6VS5dOlBqKU5jM28iZ2ZfRiN3JTQrJX5BMG41ajFrUGxHYlcqa1FneEoyPnZFZjJDSk41WTN5M3hVa0kzOCNHUFE8b2VLc2lEYTZbIWFfZTo5cz0zSHJESDNjTmpwSDZ3cipsdG9fZ0RmVHlsdSxWJiJBQCptYjVbaDhILGs5dmliJWd5Q1ZpT3E4NipYeitBT1s/S2ti''@;'; put 'put ''MGJLJFV4WmNsbENlIXl8eTJRfVY0NmtwUHJXNDh4RTtKY2J2Yk8+bzFVVCNZd0c5QkwrLnBfbD1+U3E+Wjk1UF9AW3UrOTQjNzZCPGJSQVlYKHU0ZUt5QF10Q0tGJVduRktgR0Z6ajMuWEdlNX56KTBCR3xVJVdWQSw5REBIdClQQz55Xi9DSGM+Yy5lSHwwT3R5MVR8WDhRVGNIWVhRLHd3VDN3''@;'; put 'put ''MVNaVWI3R0NlYm5XXmxwak1kIT0jU0xNe3Yuckhid2xDREwpfFUjT09UOjovWkJVRncpVGA4USQ0Pmxqdik7TmddT1VjfXJmLzVtY1tMQXJ8b2E9XjZuemZEJm85ZXgxa0lecFY5N0ddRHYjQSo1Vyg0O2JOV1ptR3dCIXdxT2dMfSpkdjJRYH1DZHEpWio6bVpJTnxBQ3c8dUMzKGFmQi5GRHVm''@;'; put 'put ''aG1YQGE3RitzTi9MVGNTcGQrNmFwQVJDcGlXQT85cU5aVTpjRzJ7e3hKNE06YyhALilefGtoQit4eDN9OmB4OF0qT1JDO0tOKFtXMXs0UUVJMEdDLzguQE4iRStHQTU4dyhra1dFWVI2ZGRPVjoxSSJbZmN6ZDdaNEpsRXROUy8kUyRhem1PeXx9R3UrSlBzfnllPlc7fTtza28lbChgcG4uMUws''@;'; put 'put ''N09lP2FyZVlVNCxxTDUlIXIsSGtiZ2s8VyNOcHtgPmdgPHZfRCFKeGckbFhGM3MmW2gjQFFDYmhXPjZANUtWcXlVW2twN2lyO35HI1htJjJkb1ViU1tMM11PV0kuVjB1XTldZEEmeSsqUCNYRyEoaDhiLGdsSD4yY0RCfTlKXVlENyNsYERRMld3WTxWNWdxS0RbayU1SmNwR01hem42TiRJaiF7''@;'; put 'put ''QGdTYikzMGwhIyNGXzZHN251KFdQN2RHbFg/XSlvMTZsY2RCOT14OnZHVyx9aVImcS51c1U8TDBed1chLD02dSR3fSojYy4rallBNks0djRZOCUqWjE4UmBvIyxIajRuJip0QVJVc1l5OkY3U1s3bWx7b1l4SC93N2w3bl1vans2cXl+bkhdaytGbFczRypbTHdDZXJTVEhjT3B2Z344U2xoZ0lL''@;'; put 'put ''I21tVFh3Y2olRlttYW9xOmZfSTNSRUlGfVRQanEqTiN3IXdbVG1LfjgpXkh2aDtSYTlsZEFDRD8vSW96TlckSFI/blFRZDpeeVl9UHFJTyhiNV1mN21wdyEzJj1DPVsvJXxmeTVqYVhNJXxifUVMaHBbNyJNNTlRI0FgYjdtPkdfRGZ1N2hhJlhMVGM2UTxXPFIvIWc6X1s4bVVqOixVSG5ZQFcq''@;'; put 'put ''YnlubWJbTVE5ZFBHMU46fT5GbWdBQ2ZPeS9SM0l6OXBEZGlMaWBRQGZwWDM4TVYhWjRUSXJzYD9jRHEsUFJwVD4pOyFFeTExMz8vXjRdJkh7cFNhbncxQj9GRiteP0dXSFtqTHkyVjxYY0FkcUhzSyEwRDtJdTN8cW1ddzFDVC5TXTplWHVpdjQvdHNyb2leM3ZAcWtROSFlYjkmcTV2SVtHNE5i''@;'; put 'put ''ejFDT1RfKVdYZH1NIkBDYFNUKU1SV1NkJV85NndeRyRVRWh5P1VLZD1mKXRBS21JXkZddV5yJEk+Nk4rQEQ8ZXMvIyh2bCpTZX5KP1ZEaHJ1KUtncT8sZHIlbWs7WHd9ZzczMFJNeEozNG4mR0xRfUVxJm1OKGtFSVciVStQdCp8VmFlQys5biVhZzp2bT17WSh8OjNRZGQhdEdFLnk+T041VzhT''@;'; put 'put ''Sy5tMkt1cFBAZEkwTm4jViFsVmRpcV45MlopYTg6O3BeRih9UmB+RyYhbVdXWHo6SFQyfDVCYGd2SlFmfChIM0VTM2ozeylRdShkfUE8cWdXQHFBTCpsTGxpRWslbGU/Nk5IRGsmcXhOUD15MUJvfXFmVV91QmNlRzRCT0l1dnxYKDt9bEJ1ZWlPWD9FNWohUDtlSlElajJQQCljfj9oQlBffTtx''@;'; put 'put ''RjV9WHZvVT0udyFrXz05OzBLek8ybChIRDJORn1LaGp9aEFnMml2OzgjPjNUe0VgQ0ltYTBsQDddO2VxZVd4a30qczxBKj5XYSNRbzAvLmtAIWZldyYvYDg5WWpyYn44e2o8O05gdn11NX15YVs/MSZ4VDN7Q1FPclJuPFY6fX1CaWk7W0tFJjFbb0ZSOFFrcUh3N34rYTksd2dsOFVHOy5CZ0dW''@;'; put 'put ''L1puezhGTEdecjI3MWVDXzhDdGMqfWNtMVZld0UhI2RqeWA8STduZS5TTSsxUT4wN0BrO2VfeF17akxFOWtmdiRBXnwwLk5HM1RjKjNoKWd+IkB4LiQmcmpueypdJDl5bjo4Ll5DS2NIdFZpMVtURUBneW9ZWEcoWiNuKFRKVn4kQ3ZOXkl5VntfUSQlM3Q9TjlIfGppKyxHXXc+K0RMfD9mRXxV''@;'; put 'put ''JiouSHxoL003NUBocDZuLF1KaDQqdiw9XSwvR2lEen5nIXtJUCkyUnsyY0lxZ0t0fVlOMSpsPDBiNkxHViFQYCQ0Z3JqTDNmdlc1TmxeQENnWzZ5ZnN7TDF7WkRoT1svZmhCbnEvUCJSWHBLOD9Hb3svRnQ7OWokSkl0YkYoPz8kcGZNYlRheGF4bWQrY0RhZjVNYi9PPEROcixjQWlhRllRX2Nq''@;'; put 'put ''bjhYJF4+Rl41QlV1QD8/Nytke09IT3I6dCgpOXA+Ij90YWZeZE1jNEIycE1fTSp4e35Icyo+JGQwcXNVU35sZTsyMyhGJWxUd2xMaHRGe1ReJHh9NCU+Jjt9P01TO00kS1pScyREbTh1WHRtM0Y/aX5EV0UjNFleeGQ6aSZ3V25sdV4jWG5UOGwhPzczNlpiIUpGd2cra0B0c2xESTs0d2c6bCE0''@;'; put 'put ''RDxPZ3gsMkdoSjdJTXJmPjxZZ2I4OH0sQTFSZGtofGgxIkkwYFphdVgmLHB7eyZsPW5ZUm5Ja2hAZy5eeG5UPyNmbmJjdWQkfDJYKHBjPCN7YS5tKHFkKF0hLkIocDpXXVQxXUltfH1ubiFbdCkrQUtgcEJfNEF8Yn0rXk0iKGFIJFQ4fDcmMmg2bCtjNDEkLDFtWCwkbmNPc1d5KkoyY20+bjYu''@;'; put 'put ''YXVlJis7XkxQPlh4VH01MVpWY0VnSXRqfXUvYWwwOEIzQzxlaDNnKX4sMHJgSVhTKCZ2SyRLW2wwR0ZlfmBeWlgyPCxzajBzQyZUTSxRcW9eXk98a3UkS2VAfX4kdytWeyQ4Nl9oa3EmNDhwUDtPe2BQX3ZwallIdV1heyQjZFFnQSwkWSxLaU16dyNxXUZEc3UkYXl5SVpaPH0vTFUxaSwwQC4j''@;'; put 'put ''WlY6QE4/RGBFdWQ0dU1mUU82diQ/UnMje0xfay9ARzZ9YyEmTCt5eyg8UUsjajcxRyIicyMwaUNZVG48aEtOZ01xSU1FJEZOIyYycHFvUXU6YGBTcXUvcDxqR3ZTQyZ9ViIvXnhWcm9qJCplS207diliN3UpemY/YzR2fj9FIjcvdGxHbTR0W2s/On5XZVhtWW81KUsxYGdkKjNFWjF+TkR3Wzx5''@;'; put 'put ''alUzWltYWDlaNCpSIzNafSxWKmtIaiIjNC9iRVA+PTA3IXFgZmA6TStJfSVuTVRiPlpbNX5aT29QNnk5VVZoIWIwVk5PbH1GdTN9MWFJKiVbLGpRMkZVbXhuM2xvNEZVcWBCVH5XPDt8IyhILlMzWkYxN1MrJmhzVHVmUCt7WkU0RyVNN3VmJjR8QGh2ejI1TVR8TEx3RkJPL24uRjFkQ3NdKSVM''@;'; put 'put ''WVc6c2Fdb3ZnOS40eExgYV9+JVNJNG4sJSEkZCtuR3BYODtUS2Y5Yk1qe0BbOUI7Ny88ZGFSVm0hVTw6VUMyJFs0QDJMUSJ8MjMqV0N4am8qYHhkOURHUi9VSzc1Z143VEA4XnN9VEdYMjZDYUR+QS5JdHhCNVVjUmh9TzdCNHBAOzRhKHokSFskRzBdIz5IfT9iUSVCMCg5K1pZT0RCUWVMZ1Vn''@;'; put 'put ''Skgye2lsMys1dktPTl8oTi42R3Jidjh2MXB2Ky9mcSkxfWhXUF1MdFs3JmNtMT9fUy9SOCN+Uj9FU0Z9Ky4kOngyMHBrKHVfLHVBa1BlYXxrNlF3ZHgpaSZCVV1AY0NQVXhxPkxAJlFWa0M5RUw1KD9IWVdAUEB4QDghcXA8TWVTb3tZQnhFNldaQ2BrR0t7IztbXVkvYn4oL2VvaT0wKipja3tq''@;'; put 'put ''VnQyZmtPTlJeKGtuSVlVZ1k0Ymh6YXY7ZlIvVFFzNyVQN3ldNVhtelhYRy55aSpfTzhIe2ZpMSlZS2Y6ZjtiJlYmMC9ZS0VZZnokY2YhVWREX2RwV3F4dCV1fjN2SmdeNUd1dVBoNmlzSih3Lj9ha0cyaG0rLn5RZC81dzJHQG8ocl52PjAjVHg4NnRFbjNqaFdVcnNeTiU7Wl1genFSWj1ucHhj''@;'; put 'put ''IT0hVEppZTJNcGl2ISZrKTcyXiZCUiU+fktMQDtRZVkxekB4W3JKOmxfOG1lb3ZmRkRaLlI6PVV9LDR+ISZSQyg3c0FOUVB+KCY2QFRpflJhK0s9Xmo9WmU+RT44cDt6ITRtInxHZkVLdWJHXk99UWcuQkZbJkJBZGF4TE10JlA7eT5ieDZVaCpYTUIxQXNkO3ZSfHRwO1k0P0x2XUswOlN9Yihj''@;'; put 'put ''NXQzJmx+JHZuOTo+OTAkSlhCJGA3aUwzLCp1Q0kwJUY3NlVaWlNYfnhhKSp8Z3MhLFtlYH1wPE0ramU5WzcmVn56Z0xhIV8pO0ZHW11FSUV8T3EwT2oze0dXdkNpd3tUPl17MTN1NUt2SDUmczp+QkBIT0pGIT9fMUQxUHM6Zno2ZVkqNVloY34qVClbWkpkI0hoZDo0IUE6bTY4VU09U15KclEu''@;'; put 'put ''PDJ5ay50WSs9bEtFZXhhbnV2aj1nfEB1JjViKTkvK2RjalFWcENORTBNWCkxVzs0fC83dFI2dSJmKiEwO2RlTElgcjt7L2hBaUM3ZU5WeWdDKVM3eUxOPS9PJH5TU3dvQ0taUXw0OHQkVm1PXzVmVzUxXzVLTFZbXkB3SzZoJE1YXyZ+XWdTT0BDIW99WjxHeVchMXZdZFhEbWZGbyhVKUsjOTQs''@;'; put 'put ''JW55MCJ1TjpWJmIrKUYxJTtqRlZPW2JhcT85YjpKVkw4fi9dXVQ2MCIjNGU+Mi4wa05aY3FYPEtpQmdlKUJZL2IhOD4rWHNxOyhTez4lM25CLmtnOTQiTGNycTFjJk0qLlFuYUh0UWVmZ1F6OFYzbHNVVCkldiUzKzBHZCVJYm1sPGlxMiE4KHZXdXZXbUJSRzd2L3RxRVpyLjpha1RwL2U3eWJ+''@;'; put 'put ''P19zTWdFVC9OVUZQWWEzM0wyVlZLMlVSelswYktIPD4qTz1vcChHbiVZX056Py95OTVUbypIdGFeMVZYRjR4cD4yaUswWFJxOSNNfHl7JntIYGlxdDxGZGg+Mm4yVHoifWBqTDBVOVo2UGZjZmhxIjl0ZCR0MTFFdlg3WFskWEw0Nj55KFdDUyxpZVVlMDlMUEZZR25fd1EmWT84VTZYJkgwUXZ8''@;'; put 'put ''fGo/JCtINGdNSF1CSV8uPXtUX2NOVyV2JX1jVElzcip8KXx8Rn1Xa10idFZycDtGZDl0TTU1VngiPGg8VzRAbW9hMSl3PklpNCZBKnBQUXV6Q3dBe3Mycy5qRDRrKX46c3Y/RTdNODVCV01KfkV6QGhERnpQL204YmJ4OzhEWUp0fD5lJTJCPHBwJE9rbigqejtKUUVDUik7RXFpQVRsTlRgbG91''@;'; put 'put ''I0N6RDYkKFFjbWNidlUlTEtWTnJCT1okcC40THUxTGsmWGM9UmYzVnVUQ3RoM0skfVssNUlDQmlnTEc3ZWp2L15SaDM2UGVlZ2BaLGhBKDVReTEzNj84Y3xJLz5ALlciaHBWUT97VGR7ME99WCMvVTY8Y0ohcHk6Ml9JSldWczpecmU+UHRgNnRRKlMuaC5ZXk9MIXFsZENnQSF9QitUNlRibltU''@;'; put 'put ''IVpWbi5JWFg7bn5rOyROLl0ueCNEZVchK15GJkJGOCxARFROcnEyV185LypaPypdY2leTGRwXihVWXpnJHo0UjAhLnEzOns6cW9+OWRqenZzTSFuLlFpNmtReiM6RTc+cHBHcyl6ZXgmfS4xZ3ZTaSR2SFIjZCtUM0IwVixbQCg2SVs0I2ZDNFlLSVUqY19CITdxI2FlQFAjeWdHTFU/T1IpYV0k''@;'; put 'put ''LH12XitnJHo+djF4flE5KjQ6dFh0eDJNIX1HQFtbRktodUY4Imw8RylBWlUuTmN7SjFmU3F8I3lbQmVaW1VOX25dVSJwd0RDfk9gRy8iJiZbIn5uJS40JChiTSMwSShpPDEsNTYhPSJrUkpDN29raHcyT35WKC5XSncyNmR4LldEbWZXQk52R35gKSM0YmhlaXpJM0tNJUYoKnRvNlc9SmY3ViIo''@;'; put 'put ''VjM1ZEs3KkkzViJOPlB7PDFAbC9qI0ZQUyt+TyojPTo6NV8oM1smJFlyYiZwXnB8Z1RvOlM8PUxhW2NARFQybkFpPGF1NEFSNjpJIStUbylgVXMxZmkwfjV9TXxgNCxWakVZezd3NFhDUV9sIVZgTz1FMDcwXjllIWwiWD1AYD5bLmxYTHU1VG5ZakJPdSJ2eTpWWlU4dSoiSiRrbX43fT9BOGNS''@;'; put 'put ''RWdReXZld0gqYnIoR197IjtxQjBJUSo8aXleN1QoekxrX1M8fGMxN3FUcV8/aCpDcGFpVFhlPX5HWXpPRldZbyUxRUpZbV5eL1JMYDUvP2oudnpBUnByIVRWNHQkcGJFPDkkeH4pPm8majxUVlIwck1JVFUiOyRsQUpySUFWWys+SGB4cC9TcS96O1oqUjImJVNrKWIkV14ofURvJW8kNVYsSSJE''@;'; put 'put ''Y1YzbVAhNy57R1shVyFHeEB0XTh4cURARHJjcGYwTjh4eXYmQGY4XTJ1SUNqOXh2MiJ1QEdHVHw4MkFLQmlRcFY5KGltWCU+TC9Gbz1jbnc3fiV3RXR1NlZMSFB+eFZ+T31KaSJJOz5rPSlOQ0MxYGZlL3cvV1VJKCluTHhwK0dOK1MkdnVZYEFoWSNQcisjIkBrQWJ8S1k8WixOaFlpalRPSVgo''@;'; put 'put ''TmY/ZSx+KzBYTntpSHgiMFVISTA8RztaeXQoflIvOl5QdTJYWX1mXT9VWFpiSG5bS3xkYnlDUmEjeTc+ciVjfkhpbTJdMU9fTEo9JUEjazprYmZVe3A3NGZ0WUFhNyM7XUBsZ2dvbURZOSheWj9rRUI9UU03NGRrYXQyUzY5T0UuKk0jQlhTMGxpZlgmfixocFtfWUhBUDhHR29xPyFWaXVYPUwi''@;'; put 'put ''Jlk+RGw0NnQ6QkF3V1JgLld0TWxwXXNFL1gjdjp2Inxyblo2Rk9ESTV6M2J2XVlSKVFaPExtcFl2UjRzXy8sTFlEQHluND9WZ28xeGRfK3EodmZjNHpGUFZJdzFIaWpxWHtaMFtCS1AqZjoqJXZKbj03ekJ1MFRheDJOSVlHezhvWWA5YFE8U3BOSmF4KEkwen5aNF5wYm9QYkRSYEdtPCJ2NX0u''@;'; put 'put ''bnRbTzxnV0whWipaRSxyWDVjfERtOmB4UDNCR0dSZDgjcCpLUzlmakArWl4hWSs0PXs9VXIlZyRqQTdxfWo6fDdVL1BOaH07RS5TVUlhdT96ZDJJRmNYOCM0UVhaUnV9e2l0UmdJQF9YVGc1MXJAeF0hXXRvIz5EclBbK11KW1V6cjNUKn0pWjguWTZNRS5+bFBDcFZMO0o0QSJubGN9SE9jOFJw''@;'; put 'put ''PDxsY1RJeEpIYDgmJmY9RzRqOyY3L0k0UiN8NHRUPWt6dFk2OHMkMXJ0a2xXTDgsck5bXX50Y2goSkgvVypKOWMxO209cV50N1FnQVJGfmkxVHVDQ2ZfdVpjYlJKdHZIVEA0N09mYSEia1FRM2dZJnxxUjFyKFtfIjE4azpbVlJRW3xGdFp9el1edEM8Y0s9WiM+JkZMM0Qxe2IxYm5PTDBWZCNV''@;'; put 'put ''bExtRCJ6Om4+WTpWSVo1OUo+fVVVPj1oQ2hzcDp7RDxUQyY+Ryw9byV7bD5NO3E3WGJMWnw6IXx8QztDUDVkLzh8VlBxKHlyfXVuJEsvKVluJChGRH5yWVIzOCM3cyp1LExrUmIyOl9dVSk4WU52MGE7fS5lajdtViQlSXpKWHF1cm4mLm5wKldQISs8Lkxqe3xvUWMsYit8SV9sKkByTjx8I35e''@;'; put 'put ''VWtVb1F4MDdIPV40bH59fEdiY1FAZ29Gb0xELEhoSzx+cmxmN0VaNFJ1ZU8rfFcmPmdWZCRmMmF3b1RmQlhxeClrUkFqanhBKyZbJH5eam48e2dNJGFheD4/e3Ypak5QIj5QJUdUfS9gQDBEVjhKbk9CW0JxSDAmezc4cnsjLFV+V1NCSXk9TmE0bU4vJG94JjZdbjAlM3V1NzNHRnFwWClIZDNF''@;'; put 'put ''cnN9RSt0QV8xT1AwSy5fXVlXZ0xoekRAeVN8Ri9fI35ENCVSeyxvb20uTiJ0JmdXcEEiaE17WlFeOllOe3wjbSw8eSVWUyFIQDQqUz5NS3R7e11yX1p8Ilgmcjt5bExNfjJjKXw1WW5jaXdDYFImOSlCKnV5N2ReRWBpK0dUTyg7Z3ZAUD1NYU1AeD9iUUVONnohXiQmb3hnYUJoQk9XTm9nJXZw''@;'; put 'put ''My5JbXM2OWIqLzc6L2FkPVVmdSMsJWxaYiZ8L3xpZHw3bE44KXRMUXJzW0dQOEB0emAwSU9XPldjPUpgMW0+ZmI2b0V4IzhHNC5aLjgufmg2cDx1RlghakE6Tmc9amdhO2c2IzV4YCR0XlZYTjZ1Z3d5bldzZk97Nm4pajV7eGY6NyQ6bkgkYysvKUlZZlpQejgyXSZSKm0xVkcpKWk5VjVGMW5+''@;'; put 'put ''djRDcSpGMTpuZmU/Qktqc3kyK1U2Rzo2Qz5APkNRZilEVnZdWDFdKyt2fVFXQV9CYVBkOmdUNj8waS8lKzwiajhGKDAyJUQuezxQbVIhR04wIUlGQDtxOzlBSSRkbW5TSyZvNEpBfVA8XnNzRGtvRlU8UiFsR2lwSWRgNF5wb3g5UD0yVTM3fkZKayh5VXd0JVNkTTUjN3RCcCZtK280JXRbZzNb''@;'; put 'put ''MCt4WDQ+aDQ3OXxCUTU2fWVhajxoOGw6NnxSVFlWZURvUGQuVmIlXih1bUQlJClgVHxWY3RgKDREfCFhTXVbMkZnNEhyLGMjX2RdeElzOnVDTm9sVUlhUChYKyZVRXs/VzxmYH4jdmtmJkRwJXQyLjMhLm9+PHNLNV1IKG03dyhBTWdjbEA9T3NvJjpSPztmRWZ6VEhdb3JXV1V4eFJ1OWx1TG12''@;'; put 'put ''L0pHekhSYil4K0Z7KXJ3c0pLfHFldzhKeWVeT2J2PF51VyNrRmt0OXlIKipGL35AZHk8c29VRWQ5a28vKVgrZEx2R0giNEdfaG0wNjwkaW8we09MSEo0WXciJDFYfTw9dWNiOiRnP3ZhSU9+LElVfT1tPTdNbChLTXVPU1lbQiYuamN4JUx8b210ImdHIV9bPVEqMyRwWENXKX1wOChaYTREXXx5''@;'; put 'put ''dEYrTjNMOlF2QjArZW0/a3tJd0gpeTFGSklUPlEyKyxARDFoZiQpUXp6RXI1RzpmRHR8UkZgenJJKEgkR19Tam9AT2BlPSU7WVN3QEgzOHVfK2FzPyUjOkNkQ2kvOzZvcXpkWEAofDM9K0UqYCZOPzQzWDc/P1lSPWpEbnAzdyJxRF11UD5WR2VYPGwxcjZBZE9CQ2tmV0E0NGFwdXkkSyNlJCN1''@;'; put 'put ''ZEV7TXhrTmxlc2k8fmRySD00YEE+dV8qMXN1XUBCfnxabCgveHEsRGZ2UztfOFdxZUBoP1cjI2QjREMwPENCc09kZGc/Syo5X2FhXm02dHk+RG5jT09WfHxOIVpaI2YkdURCcURBSl9LeigifkVRQE91VE9HRUQvdkdFPGVecGt6O2hOZSN7eHxDbSJ4XywzaW0/dj9ERThlX0x1QXRxVWBqXkJX''@;'; put 'put ''XXhzSXsjemNsLDpOV3ZpciZhWnIib2xzeD10NUU3KDFZKFo8cn46I3BWYUtldnxNMXh7NkVyZSJgUHQjUT83QE9AYDowQy5+KyNsOEFgR0s+WHN4LHo1RjVSSCFfKkhPZTshSiM+R040QEpIcGEyIUteKDAlTylYWjouLzJsQHVsQlRJMXI1IzV0Oz1qTDNEcTBFRUUhaD1jaWs+Rl54QSxkLGhe''@;'; put 'put ''VzYhe1pUOE41d3J4RnVfN0A7UjJhKkpzI0lJRVp0VXZYdyRDcSJgbmB7WnY/ZWQvTFldMzZYPXpEMzF4Xy81dWIib0YlZT5pUlBVfT5CXi8/UDMsInoqP3ZBWHhKPH0qOzQ+bCxsXjptNipmcFpuYEBxLGRxTHJHNVRXKSFCZWRlUzRCdD5mX1Z7LFdXUiRCYixjeCl3IStMKXBDdGp7RmN2PTpk''@;'; put 'put ''b2VdT1IyUU81NSVITDhHb2ZSWnUsWWR7TDAxeiV9KjtkMiU3PmY4fn5QcntFQ09OQ3JXMXE6SFZMaSlIcmtoeS8hJG9MbS51aVBTNV8mI312Zl95TWxNe2kqX115bTxaUDYhOl1oK1gwWkNNPGxUbVU6S2Q/ZV5INCokbjR0d3d1PEQ0JW9xKSJbOXxZXW5PdX0xaysvZWgkaCwwMGw4Pix0SSt+''@;'; put 'put ''ekl+fCJwPDk7ekhVZGt9T24wOlNLIUNeV1ZjRGFgOmApU0UsXVtbNGRMSllFTzZvdlRnS09NJFNoeCVCVTlweE5HNHteJSw1Tzs8SzRwUTkzWk10dEs5TSMjKmgpLHBuL30mQkJjL0hmamA2QzpbVjEhVXc4ZixPblNKO1FnYDtLIWdLVU9TX3w2aDdnVGlUTUA+eHpDQSM5YllpXlpGP1k0MXBP''@;'; put 'put ''JSY1YF5mXWVhZSxTZnl2Zihid1RgQCNqZkUmeyJTV1c5ey5fO0NnY1U3U2lUdG8kcjZsMyF0aUwsY2BCXURUQzxKKXc6XWd1PzZ8PTNWfXh2TW9bSzlgYUYwTGBKOk14R3MkKF5bVzRqKFs2ViFrISZIOS4sayk5NEMsM1ZGWCFHKDJuPjY/YiplOTpZSHBpQDhXOEE7VWJeJipDOl1nVjE9Z2w1''@;'; put 'put ''WUd2U0h4amNWfCk7cyNgXV5vPU9OL0wue0QoS3lJSTNXOXVUNEBrYTZAeThnWEoxKjQ6Q0AxPT1NOG9tPU1UIkM3bypueUBJWVZFZj1uUzFNNSUxX3ZaLjZNSzBsYE5oYXhBUTltYnFucV4mOlZRcGBDXjRuPyo6WW81WF8/TV18a00wPCxdPVNoTlR7U3ZSdVViMWNyTG5OJEdwQW91Vm9NdUUw''@;'; put 'put ''WU9EM0s8OUJweF1MT1hHb1hrMmhjRThNVW44Sng0cTtbcFhBKCZJI092Ny5XRHwzUz53ODluVExxSjYlQUA6YGhORjVMdnlTZ3M9cnJOSCZwLFEoSFFGKHhEUmBue1cvY3UiLE8hQ0c3KTNCdzI8PSYub054cT08ZWc5W2cwMi96Sm0wWk4oW09AP0QwLytkTVo5eDQ4K0VuMG84PFZbXlQ2OTpE''@;'; put 'put ''bHU7dVg1Iz9odnZfMF9iUlUuKkE4KVtKNFNpfGhVOGZUIk5DSnBGSWcrKXk5NzZ1L28ybmUiKVUoZktSbjoxODk/VnN1ODVaU3NpQW4hS24rUERbKTJkYSspJn40TH0pXlt0Qyh0ZUl3O3FJalE3QCtjWThQN19DUDdRLDlYK29NOU1FZD9oUl52SjdqTGIjJmQ9TDp1UDp9JnRvRzRNWFpSIS9E''@;'; put 'put ''MEUoPlpARzlGQmtEUiwjL2lqO1txTCpEVnxIVyE+SStVc1tyZ1svSVljO251PSU1cU87ZWw3dX1wJHYyNHEkZ1gxb1hSbn4pWk47Y0dRbEU+bUh1YUBnQ3hUL1NvU3ZALipuI31qQTJMPTBKVXFhMEJwJVByNHBwQkp7bHE2R2BoN2VoSXVvMzYxO3d7QFZCcilVIT1fV2VEK204Li8wTlU3Qnsl''@;'; put 'put ''dTN0NHVMYEVxPlI9JHh8NG1xZXZJIkc+TUlhLnE0KFtnN0pIU31FMGoxJCQkJVs0Xl10SmlefDVlI1IlW0FQa1RgdHJvLGpAel9XKEB8Il1QXSltJncoVllVPU5ZQEQ+VF18Ql5Kdz8zdEhJISU4S1ltdFkjR1lYUypAOnM4SF5fa11eRE09OTdVSFZmNmcpWTpaV1EwYkhQbnI7e0lWIVhxXlNl''@;'; put 'put ''YHxzUHdRIiZ1ZnkrK0VwcjtFNXEzajA/WSV1TzxEa11dZnRVOHZYRER+TDMhRClsL2c0aSpsdHIqZzRqaDx8dTlwXUhQfmQ3TnNYL2NQWC4kXmdmQnY6KzhdakdLKj8qcllWTF1fU05eSDZxQWkxe3t4Vm9CYUBITHUrY092aSpkOlBYRz51SmQ1THlyNSkuNzlubzt3Mk1MUWhOUnNFYEwsbkdY''@;'; put 'put ''V09INWRiMjsmd29dfEI8QiErV317N09TNTYoUGs1JC8qPD05U3lBYExHV2s9d0owfC5NdlBPblosIVA6cUFgInphLjZzUHBFVjczXnYxJDhoMjJOSjZmVWZpK21bR3RzfFA9JT54R2hsb2VdWVM8OmpnbHl7S1kzWGRoLmlvTGtfMEssWEpLRXF3PmthezdIbHJ8fkd7dVhVfk5HaEs3YEpWcyJs''@;'; put 'put ''bCM5JmhqQEwkdXVpcTYpQjVNaSssYSQ0OC56STRCRDBNUHRrbT90fXIwOWZPKmUqWyY9a0oqcy8uRjh6S1BfWShwOTgsR01CQStQWFYvKUhed0Jhd30uL2IxZX5aPn19OiwjW2JEOWxSY2I7XnMuY1RAWzNnK3csJDd5VDh7WWhSSio6QDNuMlprSyF7Klp8ZXhPaTN4bWUrW2p6ZW9bRTo6VWdB''@;'; put 'put ''OWpULn1dJGxKVi5DVXZ7TkBkXmkhUVlbclojJCp0U01eRSJIO1FSNFtQVih0OWcub1VkI0d0TS9vOTpBQHxDVGBXfTM+UTxtSGdYe0BFKExkeWFZa10+K09jNEh8O0I3TVZWKUo2XWwrXileUyFzMkRzR2RHTSt6P0RXJltgRkZOMlpxc0F3SmJUd2pOcyl1eXFkeURMKWRrbCNuYn41OXZpZjNl''@;'; put 'put ''dixORnM3U3A3fElwN0ZVPklvS2dnQWY9X1F1KEErX0FTfjlDb1NBYlB7LFJYQytiW01CR09XWGkxb2FHMHFqeEpwWWxaVG5DZT44O3g7WiosQCY6JTVJYjokPzwmbXRJMnwjRns7eCMuPD5xLyJYNjZnUGo2c0QhPVY+VTxKUEB2Kl5sUVVDO2suPHBfbSQka0guVl9bZEY4MHNhfnAmT147Ii44''@;'; put 'put ''V1A0ciFTLyZYXzdfcGlmJC4ofStnPk1Pc0hbJFkjLno1LkUwPVlhViRWTEJzREJbXUc5PD0/MGYrWFltVjNMbSt0X2cwP19uJC9rNnlON2UoRGdeeVhPV0NaN05hOykjMVhrKS4yRUhQX1IhcmhkQX1HWSNYMUFWI3MqSjImPTQ3PkNOPVhmU2lraisoTXtHYj1eVDZTMVk6e1UsVlA3ZG42MkZs''@;'; put 'put ''cTAiREt6KEFuOHpsMjNAQEZYe11UajBGejZ4U1QmW2tMRThNd3Yia0xVNGZVYTg/XzZiU100L3VuL05DRWxqVHhJcTo6YVNEZjZBfHxKLkwlKnR6L0YiYnk+MVh7LiRORnEyZFA9IWEsdHRzKjVEaDp1IjhPaSFUd3M8cWVNPzF3fUo/LzF2ekROdWpVcCNsPDQjY3JwWiYheT58Yi5kNzElOD1i''@;'; put 'put ''RHkwS0J1cEwqTmdmaX4vMGsiKihXT3trb3FSQiw/dlUsWDVSZTw8fGw0JjZLb148dHtNYCg6U1s8TE9BLzsyQippeGd6IWMwKHR5UDsyTDJpUmJhQit4RWs8MXRJQmdyeXAybnFfcSlkRUYsU1NdcTMmMjBUYnhKT0A9Pks0bT8xP29IUStTfFt4ZC4uNVdBR2Yobz00Okx0YHJjUGx4VVFhO24+''@;'; put 'put ''UV0obCJQZXsmKSJhfUZeZHVUNSNCYHwoT1RbeUNnfVFLV249NERBZSxUIjdbaCRYdyY2IT0rcGRFRlNifHRoSmtian02T3wwXkJSJHtzKmBON31TY196d0lxSFk8PHYmIm1bSl1OWHRAa19QMWEqWCElM0FZZTpxK2s9YSF4SkAkTEE/THIpOjhSOihCLl19a2c+WFRxTFc2KipwT2hPO089Zj9B''@;'; put 'put ''PXo8YlJkPSojdj9QLkBDcEk6XWQqJUp4V0kyTG47TTYwLjw9P11IcXYyLGAuVytYWFZqUFo5fFl3WkBPZVZ4eXksTjooOzY0Qm5KPVhTeTwwanhHOS41R3d1ckdtSW0vSE4pJilFSHdQOTJNTldNZi56MU5jNERzQy5XbDNoI2ArViMhNHUxOVYscC4yfU52fW5lP0EvN2YxRzhxKXNsfS94TWV4''@;'; put 'put ''TGEwMXRhJHokX3soJTx8fj1FWz1XRCpyNXRQSWJfQHglRCNQIlZFWWorQT5odE1sXXQ+dz1tQnlkdDh4MkkySzFoPFNeOCZALkpid1BLOTQhTit8fS5+Wn5USX5ZTCk0e1E9ayo3ZVlYVDAofmp8XTRRc3lgJk14QSt2KXRFMCxUYT5sZ341R00jeyRhVzsjR0hhI3siOVJyczpjdlE8REBkcmFp''@;'; put 'put ''NmJkL3NNfSt+ZkYjfXFfcT5mM0YwQHhGKmUqdS4+Pl1xdDYvPTVubCtnLGJmYzFDM0hZSkBEIXA+Lk9lXWsvVWFSVUBGVD5+a3NyZG1vZkJ0eVNgZyV8Ki9VT1h4VjRQPkhjSE5XSWk5TURjYzA/PD11IWkqaTU8OiRvUXJKNn5RV2Q0SStefkxrTVEmdmtlPEJFOHFJdVNwXXglXmUkISUiM1VL''@;'; put 'put ''Mjs+eF4kNTxQNVBgYkRUVHJ1Kl4qIS50IVU5NVVOQWhUYHJ8JHJ5TCJxM18yX0cuS0Z6VFUyRz9EYiUhS2xNamdYJFRzXVg/Ln0zTFNEX0wkSVdORUxRYzZhJSFfSTEiZ2A4SUpGQH44QmBGOk1MKl03QiRDal84ZGMiUTY1Qk4yZWBJakNbLit9Y30jPj90eytLIi86blo4cCY7STRFNURJKGZB''@;'; put 'put ''TkYiVlp5ZntILHprKlUlUjJZMjFJTn5QPzVFPkg9NiI7XiplI1FXOzNPMVklXkwyMWJKRUYwenVwbFUiRGJFUy9nK0xfejN2TGdnUWIwQk1oOXFOYmgsRyJUclVkKl8rU1BUTypBNTdnYHlRWH5dZDpaJihqPSV+U01zNSFHImpfSHxfcUczSSZJPCZySHN8O0tnKi91LHNiQ0FeWlNrZFlbeW8m''@;'; put 'put ''JXRIRFpGe0QkKWlGZn1fNm9oMDNQLF1+ayQyME96dEF4alNra3gzMmdeNFhUXX1AY3deK2k4RT1DeiF5KzhtREMudGR8VnReV1M2eHR7P3guQ2hEV1VCTjguO3JfV2teeyhWWW0yVksoTm9URjNeX2dbMmVmTl9qSzJUOkAyODhHXj92alE1MXsjLDMscChsUV43aTlOZkRAeTM7OHljNlMjZkEm''@;'; put 'put ''ISMxJnd6Q088SGBabX1tYmA/NEl8WEFpYl5gWk1uSio4TS85fDVYck1rNjMzZz09OGdANEBtZUJ1RiVpUnlVT1V0L1tAJElmYkxQWmwyTD1SMXpZXSR+W2NIRkFhU2hBfjdPd2hNS1teZHdvLiNtXUI9Wko2c11FTVorJSl5aTN+UyR1NkFQKzpVUXBZJitWOHpdQ2JZdmV3SG4uZ0R0bkkwXlc5''@;'; put 'put ''U3B8PkZreC9zZWUoLGJUPCNVSW0mYTdIb0A2X3cpRSVOZypAYj44cjN1LFJtRUQ8a0YmZTU1fnUmdiorYVc3XkYudHdUR0AwJGBHSCJaYUUmeilZbSwjRTl1aTxpPys6SEpLMklsfWZnVyU3QDxZQCZpcDFoYEgwTUdDXXtCPl00Sls7UXd6NC9OKWAzdUs+ck8lVTBjRyM6Y2Q3Yz1xMDxKKTU2''@;'; put 'put ''PWxbM3BqXWU7QlReZXMuOjdVP3gzWSVwWChRWmJpNk4+M3t0IkpUMj9EflVOSGZ8dnw9I1ZgI2peLlUoZDM2UkFuMkdpMTdgdGRnKDZWZU0rQHFzN3h4JXFLfTlHaFYzLHIwUWpkeF5jWig0flV7Y2k5PkxTcS8ua3ElX3htNXNqTk9ESVUzb2BsanddUVRAO299OCpWbFleKEpfZjw+LiR9STA8''@;'; put 'put ''YGRxbi94QHhKQ0lXP1pKYi5XdCEjdWBuQkV0P35xZC9hdEZ5Nn5+Ql5XME5SY31GX3BBU0ZnPzFiVHp7QDQkdiRNNTs5LCNEN1FkYy8ke2MkYX1DU29KNE4/QDhAfmQ2Sz8kSDl1ZT0iLzxQc3VBL0xfTj4lYCxyMWx1U2oiaWtMQCpCaz5RPGhiKyVAa0VoOTBtRGJiMj0+WCxfM0ZwcmNVUERj''@;'; put 'put ''diFWYFR6cnV4VHV1TCFfaUxBYXR9Jm5UbEkpMjRvTXprN210OCVXWkglMGJFS2xIc3toJmEvLksib1Y4MEdsbDtaY3lAbU19dih1MiwmKD1OS3YmWFtTdWEjRC56Ll5na11jSVNLfjZLK31Lb2g1RWVBYVg8NEx9aEYoSz4+L1prQHFzRDtlTWZSeVNiZmVUSW4hVmwscE9ITTdoKzNoIlcwQmts''@;'; put 'put ''MyVqUlJYW2VHT29FcGYoQl5HeShoeng9MVtPMmxEfWE9bE42ZkM1cyRYb0hKMDxzOER5K3RYTHNFKktlYDZMKEd0Y2NWeVtTQnA+bElJemBwOVpbUnp0ZX5Jc1dHRHIob0ZrRGovQkM2eih4UWp2Y3EvJDhpISxGVWc/QmosLEZ1K2loP1NIQUJZbkMibXVhUUJTX31ZIXk5YSVNYVsyWkdFUzlA''@;'; put 'put ''YT1WQ3hYV0loMT9lLn56JVFMJnAuLCQxPUtZOj9UQGs0W25oaTBXVztgSV9WJGwhbHVbeFQ6LHYwcGcpTls0VFUkVy86NShCT0N0X0UuemouLit4SDoyXXdxamd7VVk0fFs1cH0hYEYofD1OOF9GYENVbkZtR2h4c3k0Rm1kdjw/dlBWc0pJSzFlPWtaJHZfeX5kcF12TkNmem5KcDUhKlhvTVd9''@;'; put 'put ''MnFBKDlbfTgqUHZGPG9nIzE8OzV0JXFCMFM6N01RX3t9RlB6c0NMIW8lKGN0TGlxKHZkIytMSitIelZBXyRVbDcpPzo0RVE5eEsxdXtVUkdbVWo5fUlkYlEqWjxTYnoxYl4qJClsJXx3Wn17X0VsYncidUVoekI7JFFWbiJDdyJISjBpZkxCUnJYYnpkLyxNS2AwPVF0YE5QM3hRS3VpOkhlZjZM''@;'; put 'put ''eDxpKXI5UiFLWj00biMsb3RjR0t5O3x0MF15aEt3d3VJT1FENmopMj1jYWs4Y0NCOy9CNTl4Zykxc31rdnV3SSxbfFp9X0RPK1ouZlEvITI7WDs2TlUodVhpRzJBZG5tSmd6Xi5CN1V5UWdBJE43aXM9Ok55RUVXSnZZcSRFSUVFKFJGWF1gIVYkPyJ9OS4hQ29lQURPN1A7Iz9JQ3xOd25GJkp1''@;'; put 'put ''KVA0dzN4PTh6IWNJZEYwZyNwam0/WnB+bUtIJkc+Lms6VzVFZVE/MUgoaHREeDgiN25YRCgrL0R3ZG57blVxUlIuJlhlNFh5V2Bkc2dfX1pfLmtxSylsTVs+bGo0SHs4XXx9Pjc/cyVPbjRDN3c7MUg6YVFVVWlaUzxjJkw2T2VdY1hRfWVzW3lXL0pMSk9nO1lgWk5majZjPT80Iyw5dmpuSkhN''@;'; put 'put ''bVhUXW8/VmsuS1k4cTA3Rjk1MiZ7YFtxUVZ0KXJGOXE+TXpKUURxLHFlW2V6UUR7T1t4cntFZnpMOmRaJjteY2lJQz1DT0RMUW9YVDJ8dnchWG04THkkXyt1NGRCKCRMKiFOZXRLS040dkNJQD9KdjlxUkBlWl8jMkw3a31tLHtHfTM7PDZzNnR8OWpZQDcrcEJ5QSxKeDBQYFF7eW44NT97aTgk''@;'; put 'put ''WjhjVkcmTUZoNVprUDlsTG4wPyhFREYzdzYmMHxkO2tORi9jTSomUzdUcFFQYDBGeH4+WUZ3ezJLWS8kTzxmMyE0alJHbitkOCY9JU50WWg2bCl8KnFoXi5CWEc+ckBlVzIjKD9nTmhMKTw/KkIpXmUybj82dEZyR01SdGg8aDB8RjVgTHcpM2VZSl5YJTREbT5XKihVemojPTB6djBBM1Q5TSRw''@;'; put 'put ''YTRsV1BdSGUsU2pqOEpzQkI6WjolM0Q9QFVNYHU4czIxciwiPEs+QHdMIT1bNEVNRnNNUUlULzsxQXIxRGc2Vm9YZ2R0NUZObmNqLno4KkNAbD9PQW0vYThCIS48W252RCgrN3F+YGR0Rl9WNk5dT2s+c29hOl5mPkshU0sjX2RbMnx4e1lZb0puMSp0cWUwdWhkTjp1UzNJPnFDNkpPUH1WXkdn''@;'; put 'put ''aFBsTkllOzNPW0lRPFpXcjAvIW41NWlAPmAwPklncSYlJSxMez4xMnUyeDImU2YrIWkmO05nenJrcyEhLjZ1ey5ENzE5VVUvWCRXJC5FL3F2UTojQVk/cTN2MixlTnFZdUJsMURdajV4WWFbIjpSJENRJTw1fVgqQlkwaTFpMFVBSlBYYkBBSShIW2w4Z3ZYQkxsSntqWGxIOmMjZmR8eV9KSV85''@;'; put 'put ''V2RrM1EjNCxAY0wzIyk0M2c8OVVFKEw1TyQ6KUEvaylqLyRMcThJfXh0I2VkbX01cSZqQCNLT1kuSGhNRFAvYD59XytaO3RdeiYkTzw+V0NRInh9YUhPSyUsZThCcXVlLlVYND4pUD5me2smT1NXUVQyR3E5Vnx4Ylk7IVBqRDoyZlErZnU7WlF1KDoqJW5ndVNjdFp6dE4pRkhfKlg2UEpNZmVG''@;'; put 'put ''Oi4uL25qNy9BUWcmaTUzME9CfXh8bVBtfXFHfTNySjp8OGgkW0dGI3VNLCEiSzpRZmFkaSslVlk/e1FxNlB2Snp+Qm0/bkVhNFk1RGJPKV1yPXZ4ZSNiKT5aQmRSQmlVQntALGlwd2UsMmRITGY7RTdZeDw/Q3d5dXR4NF4vU2I3OjM2RH5gZj9RNHNYUyJaQ014JnEhO1IjbH04KF0wO3htZ2Q2''@;'; put 'put ''cWhwTCNpOiZGJiRzeTM3VEp+bCguZTdlO09DNy88OiM8em98JG1pdiVnNm5RYEpdIUBKWF9+fHFZbSM/Q3E7djx2bGdePldiPVAsVW11dC9kMHxpZnRrW29jKlJFQzJ7NklyVUt3JGcoKEhhX1lJcV4xO3IpdFRUPSlEYCtvcVlheFY3Lmtfe15rWyozYXdyPGlOWXBiVm5DQ21rQF9LeFY1STc+''@;'; put 'put ''Y1JBbS5fQ3oibDolTkUiPzk6UkI8e3oxdHgqTmN3RVQ+XWZzMk0vXlEzPm5ZWTkvX0NbPFJPN1Q+fnQpLGJvQCMqeDcoYkkwNzElWCRnekN0QCFpVkk0MiRHWTJiVXNPUTU6KFl4MU9jZGY+a1ZedyhSOm50KlpRLFM3XmtTRlEpYyN+fWEqYnx5XSxkcEZWdEp5OTNCNSVQPSNicUVyQkgwcnAh''@;'; put 'put ''UDRkRVVLPSM3dGd2OCUhcUAob2k/ZTpOcE0we3tiQi8ob09YWiFSPzgjbkZkMlVQK3pPe1I7bEZdd25+fWJsLkVXSDBsemc4LHY5WV9bS1c8Q3RoSTxMSHUzRDROR2FBbyZrQC9XcTpbfnNgYzkpPXFFZTpOXV08ImhYR21FKyRFNE9jZXAzPnVnaFQ8RXIiey5iRFZRKDlqZ2A7PUNGIXAxV1ZD''@;'; put 'put ''JWtKR1hFQSIxYiJocGhuIWppcmRZYE03OXoqO1FHQT5tSmZQWSNZPihAcG40KFg1UyFMIndeMTpeQWpXLzt6L1lJSUpkPztSIzV+V3ltfV5uOGlYKFpdLGxFbTF5fTlWVlJ9R21uek9IJTxmK3pqQy9EYU9IWThYRCZjMzU5JC5gOGFMaE9sNF9CYis1M1JxdkNCVXZEU0diaWo+PU1rQXJGOmQ/''@;'; put 'put ''WENOOWVoVjxGez4lTDIlZ3BmV3d9fUpvNCkzcDI8VkxsP3lQZmtqJlE7QHw+aWlpJGJhdGxpQjM1c1ErY0FKRj1vLlNlbzowfWU8ISM7PGcwbFMpeCViZ3Y4dEUiWUlwS0EpNSplVWxiNWdvWX1qUDRRWzlHe1VmMHlSPmpFVWMkPkIoI249blRwWUwlUlIiOytUe1JJVEtqfWpJYFNEMT8/Yngu''@;'; put 'put ''LzpDfkE3WVhYc1J3dFAxVlF0KT81KyMzInYpJEcqcTYldyttKjdKX01feFV0IzoyRDtBNmguWlNbWWlQL0sqcCQpaihSKGxWXy8yZUx4Pys8UzU7PixXY3pTfFJxQk4qdj9JWnJQJn0pRGRFIzldbT98eSV2VU4kbU9UezlCdihtTktPbDpKaEMxfVFOdWlgR1J6XWh3S0ZdUy9bdmVPQTVELztK''@;'; put 'put ''aXw6TT12U0NSbV8rUEBbJD4pMGxjbX48O1laJiR0Jn1bVDYiPVpIMjpkOF87I2o2TElrRWdHaWxrNmNbN11VWX5jfiQjUk5wLGEufHRGdFpWSytsfCkwI1Naa1U0Y1RTPHlSJkVBcnRGdHJXIzY4QVp3PDZDS0V4RigqJSRGQE41KzxMZ2NDamYkYDJrIy9ja0FwRFNleU9zXip1I2V1ZF9ydF1v''@;'; put 'put ''WiVrPyRpXmpNNF1wVHNjKCMzLnJUSjpsRyNdKCxHYnR4JEk9VywifUxVe3swP2tlPl5WcU0iQHE9JXcpQCMlV1dtWjMubExWPW41WHw4XzFHZWdCRWBqPkNjUE5YcTFHbnBFIixyO2FjUkFoOShidGtnbW9MP1QmcCttSUo3MEhRXi9gWVYlZmVVIXlMPiZwKVIvdGUraz9PdSEjXT1+KGZ5SGVx''@;'; put 'put ''c0YxWTI3Q1ApYVsxOVEod0RgM2BEIklyWU0sYTBXay84TXtPRiVQKFE9Syl9QnZ1VyRMUikjZ2Q1eHhSWDNUKixlXmRRVTt4S0x4a0IuWHU+VEUvUX58Klc3VSVfJT5CYkx8fCRCRWo4IWA7cV8rWSh6Pmt6TV0jIypiZ11JVDR3Yi8qSSw9Tkk8QGdJZVUzTjsvYFJiVC8ranpBKiQvdl9hNWpP''@;'; put 'put ''clFWVDhDO31nfXtvXzJNVTtgfThdTmxYYyIrfTw9aTtjV0V2cixFQ2c4OCplcHZMbkMwa3tWOiVqLzV8SWkuRHlWRyRgZ2krQUhfclcrRXM3YD9dNzVXR35rIWswK15DNU10eDZ4NzVRcHUmQyEoWzUqdC93PWo1XyYvMkRjZUBoXSZWL1VHLiJ6Yj81aTBRRCJgKGF2YGI5W3J1Z3dvSn5jSXI9''@;'; put 'put ''T2Y/ZWBsVTV7dzhtLHpbPDswTnB+fTlQO29DfVUidnxqaFVpe2A3a3RwcWd0djJndl8hdmpiPjdxZXpGfk11anwuRyU3e2JCRT1uKmx8dSUlZ3dycW9LLlojantgVW52UTE4IjhbLGl1UE9vOVt8PlhHRiEuLlV0IzE8YnA5ZEQqYkRYamZte1dSdHdpYm4iKkBTNlQkQyRfc2orQitfZEMmMG9n''@;'; put 'put ''PG97TTBxTkJ9MzlwODE0Z3Q6aWM7fTheZHVtQUcwWk1SVTckezxVOHJfTz5bcUx3endgNi41JjYzWCU3LytLMm9Zbz5+MjFRXXAwS0I9K3pNbkU6dU42eS9sIWx5KH1dTnVjRyZ+cldgJVBnRF5GJDVZTkY/MlVFZFI/XTRIUT1WJldAYDdfTEglRjM3dSNkWWs7QEBVKDElN0RZKXc1Kmk9SkA0''@;'; put 'put ''MTFCdE17biJIOT0hIyZRNDU0PHErZi9iIXRubVpvKUAsUU5xMCZLUX1AMktxJnZpSlducHoleEoyKzpRfWQ/XWR9fSFlMywwJipQOH57LDk/alFRdz1YVkd0LFhwIi5yWkBBR3JmNl9qUUYxVkllfEIhL2FmZV42RTg/am5oXV96fikvMUFmJiQuI2AmfWEpQE5yYVFOI0U7U15jcHVSaERXekQy''@;'; put 'put ''R18lX0w1UGxVd2RXczZadFVXeHR4UWtqcV9GI3BTR1dJRV48Z2BGektzWGt8LCt1N3ssQyptWTp9UTorbHx8TWFwOlgpdmBZbzJtW04sKF5CaCZxK3Z7d1p7SiVJckRbR25ydVkuSGY5Z2RDJXVnSVR3Wl5xXV1wakRxLz59IS5TJVgpXy5wZigjLjJxXUdpNS8jaDJ8MiQ4YXVUNlV8NXdKQ1Nl''@;'; put 'put ''X3dNcDNqT3d2Wi80WEVOP2leZDxENT8rbDl0UjBaVUxgfXVqWSlgRm0kUWMxQWl+JlE+W0tSamgxUDguNDh9a08uZ2QpdGx9ckV6amhpMU1hQWZfS1FJMCs4MCpuNl0rbGZLN1huPDBoZl9WOkNeaXR1ME5xKX5bUCh1eTxqPyVPaXBmQEVpPHVRYW9+K0BiM25bODlFbSI9a25tLjV8NEt+Kmc9''@;'; put 'put ''ZD5aMGFYMSlrc2EoOSROQFozJW06SUZwRkJbI25PelpFLlUoLi5eKSJyY3ZLcEIlYU1ufFt7JDV8VyQue0Y6dl4/c0t+PjAzIVR6Y1Z8bEx5IU57RSReNFshbHo0bF5bUW5bLDFBSHt1eiZLXUM7bThdYj1QPGExU3Z6Qno6JVNvNy43U08qQXJQdTpxYWwwSTJbJldWaTFXPDRoTV1oSH1NUmh1''@;'; put 'put ''ZSN9WUJzbzN+TmdecmwhVXk+cTtnZVomdDZ5U0Y4UlZLISQpYXxUUl4vRT0zI0ArM1BXXlllK35CRHhWNTZnZlRDbHU6IUlBTEB9em5pbno9N1g1ZlIiS08sZU04czc/YiUiSyZPUmhQaFltTEEuSjokfUEiZyhSI2BWTykwW2FqUyQkVSI8NFRhaHdoUmVWSnlpTFRhcGhxREIkdG5IS2VmeSpU''@;'; put 'put ''Nl9DcGwxY217e2t8THQkKXtIX2Q7TiNIQk42WzIuemJEeWRIVU9ESXNQeShFMXUqYHwoeW94eCoudnBZS11UZEJdImtgUjNBIXJ7TXZ8ezJfQXdfVUUoaVldJXpnJGNqZ3FqPyJ4bVpENjw+RjBASCg/WjR3NHZOXilWRHUzRWVWZzFDP2pkMTBKTDdLdjhySDx+aGxad3U0M1AhY2FJd0FtYUwi''@;'; put 'put ''TTxvR09DNU1ib298aHIxY28rTHEsRENnRXlHREdBMVgpdmN0JVtiVllYWkVDPWMuVDB7MCYsRyM2VDtVXSFdJWIoOmRQVUZTcDBSNzBLJGdjZ3Fyai5rInlCKixTRyMsKklsQE1WTklJSX11SmdTRFd6e3wrUWlgNElBZnFYTFc3TSlsVW51fWt+MHxPXlFwN0ltbzJUNGdha1E4aT13ZCM8TUlm''@;'; put 'put ''M3RWM25sMzJuSi9UeGpmVFYsaXpzdUJXYClfZTQhLip6WGFkc2hrbXk5V1hBXXN0cjhVaWJab2s7eDdlaF5uYytCPjs/PzFMI0tnQlAmbm5hYHk6Tm80LiYhQHQkJmdeZlRjPiouRU5qRGReOV9JamFGRFhzV2F6fStoIzMqODVAL3cvZ3V4QihrfEl2aVlhOFlCKEx5RUlMYikuMCxZR0kycz4y''@;'; put 'put ''U3V7cHIweWZ9cD1oekgsVFthUyF1bkZIeD1+bFpJNCR3Z2ciazVbKTleaipKI09HRyQ/VW83enFseyNhbyRRN2I9KW9KaT5yKGdUQVFNNF91LmQ6W3U7fCtbKVR7RFsqbzxWUjFhfSlZQkxmc2RtQi59cWlkb183Yz5XRyRtdiJCIk4wLFU9fFJqV2V9SGRTdVZRUDRhL3lkb21PYlNXc309L3E7''@;'; put 'put ''fl9IfE4wQmBPMmRKIWVhZjdIbGhCdVlVS3kjRC98c1tlT2VMcG5gXXg2OUB0NjB4OUxgWX5Ea0EqOl9rWVJ9bj5je2RgUktzelZSfilFZ1k8PkpoY253bHc8UURXTC55Tip2RzVoVkIsUD9YXkZXcCpPMVBkcWtYNChzZS4kdDl3OzlFYU5RUzh2TkhxW2g1VGFZdlJPal8/TTRhUiRjTFtHR2Nu''@;'; put 'put ''ZUFVVFlhIn1+N3l9ODUsZlNxeDNQWnMoJHZbRXU2T0cxMSpzeGxwQUtVY102cnldaShRMkZrXy9VISN+fm0vUnZzZls8SDdwLHxGYWZzTzBKWCxWe1BnL0ROSy8lfGtpIiYsSSIiLyxDQyJiNHpLQXR8fkxeNjoieDJoZn1iTiVANnpzYE5FbUlvM3t3I18lSSFRKDd2NlttSns0K3UrRHhiVyxC''@;'; put 'put ''W31xVGF1Pyg3WXpCWXNhKi50NkNAP0tHO0BSVE1tO3xFJlpOOT9kIzpgQnJHUH02XS52RSZuTnN+M1IwdzR5eERPd3RlSXM3cWxRei8+VXhqWFEwQUJVTDxEPi9zSi5QWmRVSFAqND8mMzZSeXBWelk6RUVfLHIjJj9Da0cxLGgpV1NlKXJ6NUY5X0tUOW9yWGtwPS5uMyZoSnQ6RiQvI0U+aHFb''@;'; put 'put ''UGZCckheM09GWFN1eDVCbXhAZ0UifE1bZzooYEMvVjpQanRURDYoJFEpMH5QNGtAIlNMfTEsK1FUdnNSTlYuJH1lI2RPcHs2NStCT08rPU50OzN9KXQqOVB+WUx8QUV6M1thXWVkKkFVYS4yIS9gTXFCNEw3N0Ile2tdMSk3L29AIzpRKD5XZEwlVi5IIzYjP1FAK1NTVj1mWmZCfX59JFU2Uiki''@;'; put 'put ''PHhrQH1xejkvditzQC5LKlJVPUw5SkcxUz9RSnpSSkQ3NW5rekZtdU4kJCVlXWVdcXkpQStXb24ue11UfGheZD5MR2tPSyRLMC9EUUE/RmZ9T0FkcjEwQD88eG1rcUk/TE8xa31RZUMqI2BOcWR4cj0pfF5YRmtFcTpXVmJXPSohLC48UjA8amJ1SXhacVJ+RitXZVEqU28zZz9Cfjp6SXNTVGlQ''@;'; put 'put ''SmNGdFNAeU81LjQhQFlOPjVhO0VLbG5Gd1Z8cFB2ejE9Sj5bK0pzZHxqVXh1fEpwQCt1Z09VWnZfWjRBSjE8PCxgWnJoUlNoJnElYSJlWmAycCY4NTAxLGxmXmlDeXVqPnpidSNIfGxZNTMkMjdMPmlyT0tOW1RoTl9JckpEY19jVUhFUSZbSXw1PiNUP09gXSxmUXQoYXJTUEZCaGZNODJ5NVJn''@;'; put 'put ''Ly9SPSw6TmVTc0NVRSJFWT1aUnglSF9JTExvIyFqV2N0O0pgIlk7c0wrTSNXL0lSQUsrSTpralN6Y0RMdnFNa0YsJitpIXgkZT5EbENtZHsxYlRae11dQCtCNkklcXJOelcpOih1XVV2OGE4THEzaHduLiFBbDhYZTpZLG48YFBUdit3XnohK1c8XUNdSDc2Szd6KjhYbmAiNXJsJXdsVX1na0ZD''@;'; put 'put ''bF0ueGYjSCZGelpLdCZzLGl1ej1tITs3cyZgKGIjUShrKFFiZkM7OSMmKUJdIWVvNGZ6THI9PGNwYVoiUCQvR0V6eGl1dy5hX1Ivc1hxUXNZJFhDOmAzXlpbPjlvLGcqM3o8VDRNe1ZpNl9PJjF2IVNFOjR2enRqaWBLQFpZREU5TClGTzohKnx9QmZSKUVwe1BhKXtodFBVc2d8NmU/NT8/UFkv''@;'; put 'put ''ZUYuLlJdJDp1V0E/VE1zM2M6MFYuV3tHT2lQKnkydm4xdFlmUFdoT05LTSUxXWBvOzpWVENKbndSVnc8S1JYK3VwL0ZnRH4zP09oNnhSM291MHksekhVck18Mmciay9HJktEY0xGaXVsQSRCM3thbWBVYktdRyE0ZUpqRCpPN0MzJDEmdyYyL3FrKWdJKG5HT1QrdU1sd05Ra1RCbix8aDZ6Y2do''@;'; put 'put ''QCpoKmVzKDZBe1RfXzF5Zmk1T15uOzI3Z3xqKks2WVcsPDwxVjMzelRUaGZNRUwrMUN9fnAhYHd7emNWbF1USCE9X09bJTZMUVRoaEw0UXJEbylSckhHM3U8IylXKl58alZjR0VwfDxRInZOQ0oydkkhNGtOM3xlRTciZGd6eEdpJnlGMzhVM0gmLyMkXVdZSU0ib1ZZQmgkflFqRmlPXyE/M1RT''@;'; put 'put ''RFt6SmlYNSVPTzBsbHFtOFMqSzFYd2olLEVgOCJAaW5NP2wwVF0sKTFRRnRPbDlVPUAhYz9ybmx3WCI+bk86bnQqIyxZYC9FbHY5fHhVcXUoZks3Uj1gcDtWeXZNTjh7NHFeOUQzcl5NK2coYmpKZ3giNWxnPUBdWEdQbW01IllCI3hQZWg5c3VJSUpfMFt5TWAja04oQDd5Onl6IUdsdl59QjRH''@;'; put 'put ''cEQpOEQoX1AiTGRUTzgzcyY2VEIyJUFlRjdbZFlSQztqbmxyUEExeVAuK2Jab0UiQGNuNklLamshRndBWHhaZ3ZlWSpFKCgmdF5zVS82T18kIXFMM0xvJGZPLmhpcipxJDxVZkQoYzVES0BvZTJRWTQ9YFdaSShsYltSaWsrKXFGUzp0VixYTUArYXJ2TmB8ZkZZZF84Y3BUdkRTMmp6YWJvL0NR''@;'; put 'put ''QkdbcWVLPGdmaWojP1t4KTNOejZJKlBoaHdHUXV2NFJGKD12fV17bzclZVdjQz9CJWtdTXkzcE5ibXVQNWJtM3dbPjluVktpKn04IXlCNDM8PkhRQCh+bX5helNsXkJ9dmN5JTJLVSR7QlQ6YHkudzZqbUBzPEg9ck5pcHVGYCFJczBbakQmLjZIZlE+c35MP2woPWZBUGNPMX03UktBSTk+RVQ3''@;'; put 'put ''ZnZsU2FVZ3BWaWRJa0xMZFdoKyVaT0t8UmdhO2s9Pnl7bVFHJjRKeUdIW2xTeDhkUyFLKWYqN15+dnhmc2FGMkhjYHZ5OjEwR0pgUnhydlc3NnwwfUZEYm13Yz1KbzM5XjFlODh7XzpXW3MrNjEkN2BrJTgwY2hWZTtSPHQqNmdCTVA9Sn4wOkUhMW5IZ2k6ZTk9U3xLd30sNnwxXzc0OlQyLkFY''@;'; put 'put ''YXIlUXFwOGVXW3g9bE19MkhzP3J1SiRhLDA2YyNCYWZ0Olg3QzZ4RShNKTRHU3xRWHtHUjFqfXt6NGFyfXc2SENocVBDQjxYNmNPTV8hWE03SVFlLkkjRyFDWGtwcUYuNjtgJnw1WU5PX1ZFPmNuaDkoOmlAay98UFJLLGJ6VnssSSZNYWcsWTRoW2BNRS48TmVNJUxGSCVrZnsrZVB6bGc4JnJr''@;'; put 'put ''MX5JYVhicjFGS3BNNm83OjhXZilnMjArRHZgVjE5WGtOXjRtfHQ7Q2EjQXUycG1CV058NCQ0YyJyZXVmViVKe0lGeSx7WVZeQjxNdmNmbGVaSlR2R00ud0RQNzo+QjE3eTUmS05STj5eNz93JH1KWDlCOGdHNTk8WVVsTVBmUVB0byJJJT08PTs0U2pMb3d+Y1tpPGg2Z2ElUUZfOkF3XW5HQl57''@;'; put 'put ''ZyZiQFswV3t3MkkoaVYrOG9GX1BbaD1vI1VuKFRKRyxsZSJObD5qTHFHYFcsa3UwZW9HLGlWY1slSm08MUhkWGdGeGlBdFsjVDNdK3lJZGFeYm9LQ0piTGIqVUpeOXsvYVF9OFVfLzdQbWNVYytTNG9PIVJ0U25XVXxXNk9ZayxLY2lmNHNfa1pSXXpJZyxiOTlaczJuVFMoenpwe2ZOTSFCQzsi''@;'; put 'put ''fGAxOXdFUHBZS01GfUVjbj86YGZCWkBqbT1GYipnKXkzfSl7PXdXNU1yZlBETGQrY2BHeGl5O29PImtqYHM2ZWg+Tlkxb0lCU3Q2KVcrUiFfU31udHRoVDRGfXxzaC8uZHZ6NmNzMldtNVRudTwzOU11Xnp1YHw3fFBOWz9+fFRYTWMxKSljJTRGaklzKz9bMzJqcEZFRTFxPENzNkZ0RGU5a0Ng''@;'; put 'put ''TXxCfnAlbmlmODB2Xkk8M25zZzZfUkBjTlcvWSRTN3JLVntzKC8yQj1PfkAkQkszL01uZ3x6Umk2PV5pVn08b2E/bD0jJXhSaUxfL3F5aDBqVnRNM2BEIyQmUiZjJFoydFFoYU9FV19qWXV0WHxLak4meWdNbSF3PiFIQz4pRSxGSWU8Nihie19YaXZ3Wj0/a3lXO3o4TjRPOm00e2FwW0k3aF9Y''@;'; put 'put ''dTcuT1M0QDhpZThTLl4sPzYrMkhdRDlHInVnUEgzU2pUNylxbTxoPmdTPjB0KElKWDQ0SUU2Ylk0JUdeYDF+RDA4Oz8uLFFBJnlxZkUxM1tobiZoYnBpfEdwOksrRkgrJW5WZGJsWE9qaWE8ckc2JnI4JU55QVoxajhSPilJfSRgfjlubzQhM01gb1s1Q31XNGwkbF16NjVrP2o/ezkkbCN3e2R1''@;'; put 'put ''TChNQjhwIlYycGVabSl0RSNGQjJrN2VKdzF7P3t0T3hvWHJLWD5bcSlxNio9alZiIlhAeiYvY0l3Kzp3PStnXyVHKl1kcywwSmMveUYlKTozZjVxP31MVm9uN1BXdGtoQ1NpSGBVT3pUP3JQdkFpeEdJc2I8WGpkcThqJVN4OnwxdytQdz18d0xPJCxyRyEhJGRrRGZtKyFUZXlbLiReSD10dmEh''@;'; put 'put ''V3RlOTR2JF0+Vmc5byhGXyoiP0dORntgSC4zX1RyUnFycU5rcWVUWVtoPTFzS1lwdzA/OU19VGRFUE9ifTtrJiFYTnpJKVt2KT18KV5uMGByZSYxJkI8NkNSNDJCWmlBdjdgZHtyTSZ9cHZyJC5XaGZLVmlkTDl8cVBZalh2UlNsVG4rVk89bGlKKilsNURmdSxSPWxYfHI5LF9eTkBGd01DY1Y8''@;'; put 'put ''Xi9jcl9XUisiSHhvSGMmTW8qVTkqdzlQXVEoWGhFI3s9PH5taHorTmQkc1F9QCpCWlU9VnROW3F5ZzBmSCF2RT1TKVlDKnladVhqUkVedUdRLmhuMW5lUG4yOyZDMlA9WFNgaXl7Oj9EfCorfkEoTjBFNXFnY1tfZjtEM3tPL2g9eTdadkVEIjV2PT80O0hoZWwqV1FpTnQpYW1WWElGVmdPcy5I''@;'; put 'put ''TmchOFpXM010THM3fCExKkFTOjxJLHxMKjF+U0tnSGZNWXN1JnF0UCl2RV55ZGg+PCQoTWprbUN2ZSY0bWB9LHQxN1J4fHZfNXdJPlVtX0tpRyY9djAzWSxtVjtnYjhQcVNbYUkmSn5wL186YG5PbUkqbjdBKDpPYCpuMG8sWlVgKVQrWSVCZiNeYmNVe0E2RCwvU1hOI2c8M1EsVnp7QSUhSURu''@;'; put 'put ''NmgyezJpQj5kRjRYPFlHfERVd0xPYU9YQVQsYkhDdHFWYGlKbXR7PUFpaSRPcU8zWnhdZlpwRW87WSRIMU5DISwkeVUwb1FLXiRfRUNeNSZHajkrc1U1I2ExXT9FRFZDbkp6aS9KK0k9QDdEVEw1YEswNmV2STZuSz1iSWJScUtfZG93fWFkJV9pNjxNQ2xXanVvdXdVJFdxXVosST08Sn44Yntr''@;'; put 'put ''X3A9aGtaNU54NTlGVXlqInM9bl9TQXhAVCVhd1Uva0N1Y010c21USFsxRlF6TX0qe0BZXVY9Si9QMU0mJj16ZCFURnBVZ2shVHVpKzspbDNCQVNkcDMleWswM1JjTDlaXTUraE5EPGx8U0l6Wj09RCI4NSsoVVBjWEl1d3duQzFvWShhQlp8N2BeWFgwbjJyMGFDSnRac1M4cC5efk9ReCh9OnM8''@;'; put 'put ''VyIxd2RaPXxoa0x0cS55JW5PXUZCQE5iX2tUViYkejVgQnYlZ25lRDQyR2Fsb0k/JiFkc11+Mlhzbm5MVnJZI3E/ai5UQ05nITw6dDhfPyNwXkNsNmxNQmd9M0RzZ1J3KEAjfDRnQ3wxa2A9djgyLktfV2liXztWeV9ZUypqZWY6M1AyTCtVck9sWW1+TTl4dFkwXkJDZWJUYXJUMzBRYTovbjA/''@;'; put 'put ''cGZDc1l2b3ZUQ1JbZC82OVVuKVUrLl5bLGFfP08yOjEzUkFKW0A5Mk1zMCx7JF9fLktIcCFHNEtffWhHe1NnbCNGbUNqOkRaZj44TU5mXzlwUm5BUT9pTn1edFowNkt6OTV+TGVDKGpFOC4qYnVubilOKjhxSTp8eU5YU3VAZkpmbHMzPmNqSjQ+Vm9CWlF7e29lMGZBUDZzODIuTzFEdlM3TCNM''@;'; put 'put ''T1Y7LncwQEo4THI8LC5eKzxlMV4hUE9xYTxBNWBqSnBxM2diW1pSR3hKSC83Q3tuOk12dzVObilzKGxFWENZfDZnelM/TixNWmV5bmFmcmhUayw/VjpgWkAuMEBbb3U8dC5NMSthS3V+Nz42aGFONjYlWmU6TmZONnxnPn05dUBOZDFFNUlbUVdHd1R4YmtqOmBIbXdNOzg/enJHLH4sdihmbFo7''@;'; put 'put ''KD1dbEpkLFA/YUxCezRVLzt3LzsvXXJwInJWYEBCeDQ2M2M3UCo7WylRUE9PIVtRRk9jSzxXSXsrNyV3UFA3dm8vT2p3KFosdlZsUUVdKDxSJCZycig7PGBGKl9maXZDOEtJPlQhczF2SHZfciRsb0VSQV1Vcm9HKToxKHFIMnoyTnE9XmFbLHA0VmhyXTEjJUQ2Qj82RiJxX3lNNzB7PFBALnhw''@;'; put 'put ''LzleT19DP1tib0hsS3Rme2ZMSmQpZnZ+bkBHKHtzaUNHTEVWREEicDZuN0QrMjdpO0R8Yyg/bTE5PX5AJG8mZX42YDk1XUVOI080Yj5yWXYiYFFWWnQhUWB2emVlTU1PTSFwZkBxNigoSnFLRkU0Kyxhdm54dGFdJkxAdkEqTHMmOTNXKEQueW16d2EzO3t4b0ZIQldIYmAqNWlfTVtGeF5VfGtM''@;'; put 'put ''REg8KyopQn1+dkcyVnY4SiM7RCZKaUgjTjxULmYvNmZoP2A6VGQqOi40MyY1ZXkzNDhFeHVFcWhdZjFSUUhNNDdFem4xOlFyVWwzMmB6JEFHJlhqTGMlI3psZm1AKEw8TWA0cE1gM2BEMWU8YG9fZlsjPWE9QkhEJElWYFMvL2RlLkJeOy8qQDY3cm5AL0FXSEtfUThUQ2JFa3ZtbWwzRjJRJlRx''@;'; put 'put ''b1YpUypRdiQpZTA4MFMjPjtkRXkiZ3hEbWdiYXx4bTc3Py9aUytGXXwhN0Qkc2BbfVB3c29hYU90IUFFRUpHXTdzOFJsWHA4OzVebXlPMy5UPnc8JH02IUZZMUMkTCQzL3c9UHZrMDhiayxvd1osR2xacHR8N3cyTzwqdVksPn1GX3ImJGZLVDApakxbYW8wVkVbVjFHNEx9YE1NdmxXfDN0RGRO''@;'; put 'put ''SEE1fGtxSyhNM1NpQn5GLkw8ejQ7TzpiUTl2eU8vYm0pJWxEIS96MW5wSHMjYGRMP3YpWXFbfkVWWDpSKzI1di5gTV0weTJ5OElrPDVuUyx8bmRoeEo9Vmwsd0Y5c2o6Xz1sKz1DeE9SX2xQRlFTcWhtO3lYMXhgWVh6XWpHI3kxVyxJNXViKCNjQlAoUGpMWTxFJmVffi5YV2Q2TiRmQ3ghY2Yr''@;'; put 'put ''e18rUVAqT2JsVmchdGM9I2EvWCE5eE9hYU5lYUhOVlYleTd0Q0w4ZEJwcStsRnElPDMyOXhgPjdFOjVGOW1PcDZiZkp9Y2RiIXBseCpNYXg2WklxfTpddkZ4VUYkdzdAfU1WU0ZjSCEwZDZzQCpjNnkpMVtwMS5BPktweCIoSTJFPX05Xyp8bnM1UWpMKX4xPn4qdVpKQCRee0FuKUwpWV9kPity''@;'; put 'put ''VTNyU3l7djUvJFdQKWB+SDhlbE91R2JlPmslOSZbUyVXWlplKFkqIVU+eDhzYFd4SWcpTHJmZXg0WihfNkFVa0QzQndwa1BPVVsuMXNMa3IrX1h6cDpqWHI4T19TNk1Zam5pUElUJFhkWURKNDRbSFlEMXFMeUlpfTxdL1M3Y1FQRTQ4ajtgMTM6ISgiYXpTKncmSlVDLjV4Yig8ZX43fG1mUVs9''@;'; put 'put ''Wy8+Y3k9P2Z1V1pFRD1jdlMrLkhXYHddYyUhN1ZXeXlHLk5KIkdGOmM+OFFpIkk2TG5bLHY+Y21xeCpFTXpsNFNCcERqRUhSO2JxUTA+MHVGZUUzMkZAIUtXeDNbSnZQZ3NXeiYkNnM3VlNYLDooWVVhPXdOI0QifSxAYTJaOzxQNU96Xl8/bEcoJHhiQi8lQ11pTnAmRXcvfkVfbCJRU35QR18o''@;'; put 'put ''K3Y2QT84dmFBeFI/bkw6ditVTWhVZzRnUyh+fFFldzVkIlVnQmVhN3tCd3tBcXFpRzhIbF5DInA8RTZhTW1rJUR0STdYKXRKdCNCOkt+eF5GZWtvZFYyJjpGS1p7KDd8MjMlcnNmZVpEImVSIlVKfjg6RkBWL29MPHE0MnQkKzNJUz1oPTZeJEVAOlVdQ2xEdXYmPENCUzA3clByNl5gcUpgOCxm''@;'; put 'put ''R1Q/JSlfV3hmeyJJPVdMXmp+OG9pQGJxfXpeRnNIN24/Wk15Jjh1UyQkVTZ0Y2BIXzBxTEd6Y0xodzE8PFMzcl5ieHh4YVlnUm96U21mfWc3NTtpc0UucGt4ODBOdF9HeiFoZylNXyNCbnNucllkSG0udWRqNHBOaDR2SEY5UzdmLEo+RDJaP19KTDpEND8zXj9FXlBDTWs5e0JYIihtI185Mipd''@;'; put 'put ''XkUkV3A1N09SM2VAMzMhJCMwK35aVT9XJk8xTGs3PVUyKztXSSxNY29HPV1JRlBxJFlCU2xdNT1pfFRCMyVNVzciRkpofjpaMSxvImtjazBMMVtpbHo4dm4xZnMxcXpIWFo1VlkwW0s1JlppMj88e3tTaTZybSJPZHFFdUM5IUcud0plcTEwQUI8NSpIOWQjQi88I1EhWDZXbiF2KTs8KF94OXgj''@;'; put 'put ''X1dbSzt1SWI7MlhsT0NIOTVNZ3NTNGN2JVBZKWN0Vmo5Ny95ViZ0Siw6b24iTG08JXVCNDZTMEVQZEcsazRQMmswWjU0KyoxYlZrNVZDRXovJTU9X3pxOjR1TDw0NEdxM3RmU2xbSU1mVGkuPmosPnNUWmE3SDdqcnBUUHR9Olo6b2h4QEQ7TTYyTjs0PyhfKklpJFB5alRCdz45P1glbVJUMWAw''@;'; put 'put ''biJMTHdyZik/Z3dITU0zMmxrTWwyKjcjfl15ZzlRXkpgYH5wMTNyZW9wNlJGemBXeyNeWG9+Xk13Z1lDdiZeaVl4PkgoeHZTW2lvfiVFI3w/P2xxaTpbaz1oJFNmKlh6NlY/bT1Wen4yY0lLKXUlJXZMNTk+OnVTRSMuQV04QTAhPCtxLjdFdjMkUDY4QDlEWDVwem9eI3V+ST54YS9yNktPN1Ei''@;'; put 'put ''Yn1ycDMvdV9wVWQwU1c7WHdXQVdYXklSdVduMFs2eTYxcGRMd11+QnJ9dzpfSU9AIk8sQ1BVS10jIXBVYXRCSTlEcT1lOHY0RkJ6ZzFAdVE5YC9XakUyK1VAd0k1V1FFdERuNj9OPWhoeW5PQkwqW2o6MSVKUUJsbHc2SGhhJSRTZkBELiYxSDZGfEFkMTs9JDVOUFA1RTBmbk5iX35JajV1XitU''@;'; put 'put ''WjRuR19XPElkUHdTWjY0ayJ2RWxFe3k2Z28haz1Zck50MEwkdHJFa34/QndTP2xQTlRKZHFOdmJpQjleR3l4I0Zed31+bnwsYVREa3woJDN0eit3MjJ7JX5CSHZGem8wP11NeSZEQFNja1NJd0tfe2VpIzhUZWJ5VjF4JlpQVCo1cCpCanBHUCF8NyREentdazZEU2ldQGQ9cjhgNT5wRHluWFk+''@;'; put 'put ''WFg5UmlKP2BUJE1sV34xd0htQSskOHxGYSppdE5Cez5hMWRGRWFYazowQyZfV3d1JE04QkgjZGBUVzBCTVdRZnZPP1B1X2VIZTk7cXZeUCN8fTM6YjtYOEk6TnNEcnB4dDZlTjtvc3R4Wl9oTigsME17OD5qY3ZmQ2M1QGZ7JFFBMEZpZ1VlM1pkYE5VPV5Be0NWNV0yYHg3endaPVswTTJdZzFW''@;'; put 'put ''TVZseGA3fE45YXZwRmJ+aVMvQkJoPDk9UWhgPTd+Xm5+JTZXekw5ckMiXzk8fV52YVtvTVpRXkNfZldpUV98XSQoZl1DaFZfKEs4R3hnYlh8fCM4S0UlL2Z9K1RTZDsoP0RBRVQ5eXEmVCMjRi8yXzdVK2F9M24uaDA9PSIhUSJFKkIpMk5xbWwlUWlDSXVIRFBWMkltal54eTh9PWUqV2dxMTlX''@;'; put 'put ''Lj4/KksjT0AwLzApQ14zS24/YHJ3aX5qSFFQQEVJaXtzezMlPm42fHlCKEpPUmF+alBLaTN2YV9BUiRMaVUsW117el5baytIYHhLV1VMPzFwWzxJS3Q3fkIxWzU3MCZWelREKX53KHU3UCZPe2hQUUxvNn1JJWElQGZseCRtM3pRQyFMT3hEQnR3Z0R+MztsL09ALjQyPWtLZ1ZZOXZLfEJUXzQ7''@;'; put 'put ''TmRvcmY6cSk6Kz02eix7P2NHTVoqekt1MS4uMkQjc3Y5dlMqWilxamtbcCZHdn5AcyFGdn5lTUZIP3E3Zjx8UFlzWio0Rjp+fWQhJnJfRDl+aFJ8NGhuVUAsVDYibz4kM0pyfkZ3VS9PIWkpMDArMnNTZ1hwYXk/a1ZdKjVdc00/RChEeDVnXl5NKmdwYDh3TCpGN3pRVSZYNHx8QDBga3Q4bypK''@;'; put 'put ''RUBjKS81NFd6MUFRcCgrWWJFRWNlT2NrJnZKPHF8TjUrKG1QK3Y4KlUqaCY+XUglU2xKSld5Wjgjdi9aX0ZZbHhuOWgmciV8fXUmPHJGc0JzKj1LUi5yeFVVNHdWMF10UHJhQFUjeTJ0bEdLQjJ4ciowYG9pLzFsbkBUQ1N7e2gldyVaRnsvSElEbGFaMzd6NEl3JEguc3RgYGw8OTBFYkliMnIk''@;'; put 'put ''M0RnSXRYZEFGQnVkbz0jNXtFP0ZJP3BncDYpb1NCajV7U2NOJW4vYDIocjRCNFtZYUZwK0d+ZTpBMl1sOD4vSmBiZkd6akZ4OGkpJXlmVVRoJTtzfDJ5ZSVxcD0oZGswfSNKMXh2PDN4N0cla0pZJSVXc3BJNU5CVHFETUFgOzI/M3NXaSNzVGsvbix2O1k+Zyx6aUNaOilUQ0VEOmRIPU5XZUsw''@;'; put 'put ''cHdePXV9cjE3c1cxKDFCeFhFaS48dyJiNjZLQ35MRSosYTJEc2NlMUwzQSR5LyJvVy5lJFtWYUVnbmE0IztLZCJjd21XcEpFaVUySzJGcEwmeHBTTkEzVjVlZUJ+PkZLXlMiLjJmNSlWbmlbK30qKU4vaW9tQGl4TX54Tjg6QklmQEV+OTl3MlQzOW1oX0VJUkt6LzM9dHh2eXBSQCxmNHlKUC8m''@;'; put 'put ''IW9LQXh0W2x9fXF1YmZEQ0hRQEMhb2l7YHpKPHpdZjRUXSo1a2BCQ0B0U347fH0sdjZSLiVodFUvNVBOTFU5Y1Z9LmluLmt+NypCXnc+ZUs6dkZdd2prbkYsP0s+ODpdTlVlbXwyQUs9PmYzY04vMiJvZGxBaHxRW211ZzpZdmtrMGRoLkl7W0liQDBrQFFWemd1dVd8Im1fKS9bcCZDMEZ5PlEv''@;'; put 'put ''Uz43S2NoXnxMaCoyOUYjZExfRG13P1pCVy5AVSpVfjFmXVduVXlDWWp6TVh2WjpTWVtmRSwwclNRd2x2akNAeVUocCNycDEwSD9wdEprWm96aGpEKCo3b3szWGk5ZVNJRyltdSMzNEd9aHd+UTNsMD11MWdeS2hBVzIqMC9Gd1RwTTxAbTRkfF1kViI+STxxelU8azV8dm1UVnsuJWB7eHNXWz18''@;'; put 'put ''SEghPyk+UGk+JV9tYD56M31Me2JJM2crUSFgbXVpKzBzLDdYQ2B6V15hI0FZQ0YodywsJmBiQFQrbC4vbSZUOl1kXiJ7Tnl2RSFkczJIU286JncmZyUzLmpmfEorWVtyQixVbTBDd3RNcSgvT25RPldJaz5HX2MsNmRqNDBDODZsJjpnYyZVSHVAQWUwai9BYnlYRWFgUkouZTx8WSF4dkJ0e0dd''@;'; put 'put ''YTdhLyIzakMvenxIbSYqSXg9cSVnc0dMOj9Xa3ZSWnJmL1ZDRToyaCgsb2tmZXBDe19UX2ZKP05nIXZHTGclKitSYThDJWVHRzpAeUNGLGtEMGhWXWpoajl4SUV+UVJwVnphK2ZMcUoyP0NSNStXRlROQiwrZXAwTXYscS9ZVm0oVFtUcXlOeyUweF4wezRXKGBVOVQ3bSplaUE2cjNULns/Tixz''@;'; put 'put ''Q0Z1aTJlLHZdKEZaLlhCRitWenZhMmtwYTh8amA7U0ROL21RfiQmYGwrd3MuUH57X3EybiMzOnI7MDZDTE9VUjAyKGM3fX1aXmNQSSYjJDBzJn47JHkyKVd1cUk8RSxJdE1wT2p9P2tOMFc5V2xKK1JuWXV7W2VnKUVhbHoyWFZQU0dUQD8ub0xELDckQmRuPyxOKiJlNWBFdyNANnheT0Q+aUN0''@;'; put 'put ''YmlUKUlKN0BgMmYuXm47c1lPX282LEE8PW86WTc/ZHEuNnRDUXMiKmpmYzplYC84OTlJZH4yVU5DbHJiLkxQKHVxLmsxUkFCcHRGNyE0QklYQUhVT20kOisxYnE0R2Ioc0JjWk0ofG8yPCZxNSEiPywwYWw9VUdrR0hwPiVqd01fWXAoO3FFaU9zcCUiTWNKYzF6PjtFMUt9JSZ9SHMkd2J5RUJJ''@;'; put 'put ''Ils6MUUuPU4ra1Z3L0c6P3xpbWcmWmFaUUUiNUxBPU4+WUR9fFkoVFNFNWtNeEk5RytlbmFqMSV9ckhzQkJdR0I7KE5JM0YkaD5JKGsmfDs5Y2FLVCN8QWs3bFYydXNVayRsSktCUDFkfkpkdCxsZXUpMngoOHxJYVtKZ1UyYyE4cnFzWyNKMUxXUip7RU1oR3l6SF52X3ZyOD4uRS5BcyJFLiZa''@;'; put 'put ''IWVKTXhxYHlRRSlWJjE5alFSbl9uIyVLKHV9STBYMmxFPl9gKnZVV1l7YUJxMCM7XW5IKysuMWtdX3pCWSwqO2FyK0A/b2RYNnJOTWd+VW52aytgM0hnOzM5XSNEYmtVTURFMkNiem94YDh3IlIpVlFxUHlsLnBPZHU1aUBpKEFqUygmR2trPXJTZiFVfSVJNyZHXV8iZ2dHfS9+U0F7dkt5U19C''@;'; put 'put ''aDYuWXIqcUA1IzQyeU1kfGFEMHl6ZCpodHIrMGdoNjwqKy5qRUF8WCRAX2tGdFBzWzc5SUkiMWtsaSs7UCUqRnFEImxuKS5KKEJEe0NuQyxeL2AjdjYmI1dPVCV+OCl1WWFGJHJnRFFRUXR3YCk/XldVOE9KNGhSOSoiKkEjbFdCfUNwUGpuRDZkX1U4QWZHZFArKzhHSSVaWUdGO15vIkd2TjZZ''@;'; put 'put ''WEVMdUg2U3ZsdXVPYFZvXiFzbnVHKnUmOVA1ZmskdWJjaCpdMFl+Y3g8flZrM2NnOlIpWzo3MSU+bDpbbjc7b0kuWVleenB2ekxISmp8ejlbLE9lLnxBe3BjbiZjcXFEWTAlam94Vkt+ZltrTC9xNEB9NTksLEI0SEp+ZEY4V0xkaGRJWl9SaVIuYUt+Tj4sOSsxIXpOSDN1IWteekQiNDA2VSlu''@;'; put 'put ''R25yS2R0ZWdrNlNtLiUvRWM/KW0xPFQxcSpze0RAQGJKR11DMUEjK2lNKyY9dlcmOnM4cUtMOGJoOzdWWlhhY0VxbE9AeXgjdHp3Vm94d2A5YDBLVTY6QjFuL2dNe28qfXE+IUQ/QlV5W3l5S1BIbCFvPHo5MHNaW15UIn55c0dkVUdwfj02cixAJTdmRi85JHlVeXFhNlYhfEMsWHxobD15bntv''@;'; put 'put ''VFghN2A+PktzRVZ1b3orKlAyL0AhdyFPUmg6XUtlfG5ETDdqNyFiU3YuYkwuXnp4Ujs2ZnVMMzNtK0pbIVN1QFBvJUF5cj54dm9zTC89Y246IyY9RVlvOHMkYCxGKHNMMiRHNCEiL0w8TVFNLmJlMi9YSjdNfGRjQFd0eH1mUUE8fSMuVnsoPFJYdzhTIjN8YUtxMVJ1UnFofSEpc0lMbkpMaFRt''@;'; put 'put ''ZlEveTlkaUBHUy5ycnIiXmZ5PHBmaUh5cik7IX11Jiw5UHkvS30vUFV7UG4lQyIuSihXOHAlJmt9NFg6W1E+ZX5femAuImVVMmErNUBzLEVGMGRaLCo+eG91XykvK2tweyZwPDgwQjc/dHFLR01TUnhqeC5scTF9eVA+dTkvJD46IXYoU15uLjR5ei5CPkZBUURyJG4kXkAqcmdaflM4JTBLbjt7''@;'; put 'put ''JnJpWm8uQVI1eWpWP3xMSTZIKWFfW2BsJClzU1hpL0YyNCkwWlJLTEsxRSh3Vj14JTRaVDhmKV8sfG9Jd0xVV1c0L3NAYmYpMFkuKkZLe31rcVMiMGkweX1PZSZyZCl1QzJWT0NoX2huaSZ0PkpdJiE5ZncsMF1XPitrPXk+RVglYjR6U0pTNjJfb31+Mks+KGk9a0tGYkM3NzRUVEgjYjl4N0Q4''@;'; put 'put ''fXJ4eWYvJUUhbT98LDp1MSs4fXpCcC5Md1VOMWJxYW1dPjxTVWk0W1RiKWtzdTA2OD8oSlkzKj53fm9aNDomVzk7QjYud2Q4dm95bS47UVYxJWVUaXRDOnZwLzRBJFlxVkZUdiV5SDEmIkNObykiLiYubVl5V11FJVZZcnpfZTdqbjpIRyldZzF7aWVvSXlZfG1nTEdoZ29fam52Nlt+Tk5UVUtd''@;'; put 'put ''Xzgje2Z2NT88LlkhNGx+KmVtU3dtNVRfe2ZGQjYrYTFiTS4jWjh0emB8andycFd8MTE8ZD9WUEs3UUpzSyRQNVZWQ3M0Zn12T2h8bGR+Vnk9TjNtQnx9KXRYSEtyYHthTnIwXSoqakldekpIKWt1YDZMNUhxN3JMUG1wdzc8SG5WSXlha1oza35rJiJUYnRyPDBMdUVYYHh4a0J0b2ssMihxUCN9''@;'; put 'put ''SD9Wa1RCJC54O0J4MysrMUhvUysrfHA+JlpKOURISUpyQXRFNUskcUtBPF5lYy4yL0QyIng2Ozl9LGNNalFsRjNzMW14VUg8eWs5bWxCVXA/VjRsJngmQjVBJi5tfE16SDZXaj8ufCo5aVsqUSM3N1BYaUIzMmouXXFxNnM4W3VhdCg3W0VmYS8lPiU7Mkw9QVVCbix8Kjd+SDk0eVdMblc4QzxQ''@;'; put 'put ''IkwkXW8zSUhfWS9nMUJXT1E4QEZhU351NmZFZWx3IzBONztgZVAjZUtYfWw8cE9YZyx1bWkmKHRCbDByIVRed0xFQ1E7MTx8SGkrQiV2b31fUX5lOUNqN0ddQU5QdkJnJVs7Qj5Xc09VTS9KR3Z6ZX1Deypxdm5ifjhDbz9RdnE3QnhvPVtZbDtvSGZebHNoLDQ/fnpjYV81JiFQMXkoaGEpKFcq''@;'; put 'put ''RTBOPH5fKX0xTVJlSiwxIitreF9mdX5nLC5GQ2FIV0toIntDUSx0MUwwbF5PX1dGRkJ5O2t0eWhVa2M9WD0vPkZFcnVoLjw7RSE6aiVBeih+K1QwZnx+JX5RY1RYLz5pVDwyeyw8KFdILjRpVyFHcD5xVCN9QWJEJXszWl1pSF87K3JOMzY+YEB0VnZzMHY5T3AvY0VoeWBZOUNNcHUvfEVoRXNh''@;'; put 'put ''LHhyeGpxbWRXUEpMI1kiT288O09KPGF7fnEkcTUyQl9baTt1cHExZCpMYGNtIXAyR25DdncvbSZOUjZMKDFJcXxvbn5pZkp8cW5NIUZvOzMiTy4iUj1EZnUiW0oifTdVPWAjZjpoQClTRXNdTnE7by9wXjY4YiU6Q0UqXUVCeWpuIz58KnpEWSU+Zi5nWUFUWGoyK30wY2ooMVZ9ejQ3dUJePiFn''@;'; put 'put ''T11MaX1OK20sPDMyL3o1KkJmI30yVz9fM1phOSU7LjsmY3hAYiFKd1g2WikyMzNpdHoqeDwkTCMiTj1lL0MuLHcwaU82dG1Fa1lAOWhuUylDWTxXeCFROUpQRXBMM09pcUc9V0txZlR0UXg9JSl6SG9jKy41S04hcHNOWktBeHlydjFVR0pVWTRBcHUoNEM+WWg2WlB2LFNgd0Uoc00yMTxNKyFU''@;'; put 'put ''JnNCUVdmTUxmST9BbCZXfCVsWyM4dTpHVlgye0gxRVZNWk9XQl5rfFE+P1t0Jl1vZFlnZVAjZWFMQy53SmxMYjJPJElUI19vLyEjfGFRLmgidGYyYG5NP1EzKFB5YCZoQXMkcUhjXVY+Z2NVWklfSmw3fU8/KWZ2NSlMSnV3STw3KT8zVUslPHQmWEg3aDRaRH44WzZSbTFEM0FMdj5wVkZBTFJD''@;'; put 'put ''ckJnTz5UdmkzSiVENUxrQzUrUDZ3JEU9TkI0PHUoa09rQ1pNbzRLJUYieTdDUzh7Y2w2Oio/TUc9YWlualowblFqOzZRaHkwOzRWcCE7WTNOKVYzK3Z4LExDTVRsfnJ5Z3o9YmBGdmhNIntzaHsmTCw5OSY7cyVMaiZmJnBwR2crJiVVRC5yIzF7emYyO2MmfEFSbGU0K1M3PXZjPENjZmlKWUNm''@;'; put 'put ''M1ZdQjk1UTxFVVBaLCpVYW9MQygvJVQhcE9xLEpabDIvWnIuWi4pIX02JE1eQEY4RzFAaTEydVMoTChnQWMoTHJWdFM3U3NCZDNxJXBRZXpfQD18P3hgTW4yYDFIMz0uY3dWQCguSjhMLDlVWDB7YHo+ZHphcWM5e2oxcUchPUhEMC5eQ19HZGI1fS9tVCwlKFUuJXRPLy9XMjp1QTQ3Nk4qPCwr''@;'; put 'put ''OUE2bDw4NWslczxKLDsjUnpmaSowLkQ7W1ElQTZ0X1hAWUsxdm5mRWEpZHpqVSNqLENhKWR4ZnBQR140dXdJWTI2ZTYmcUB6SFNSZUk4ejlsKykmQG0hUSV6dnEsNEguPyttW0xiQHdwRk08RkVsPjBhZTZjZywsSCYlfU1tSj5yNllJZjs/WSFZTUBtIWxBfTZtWzRUYl9WRlN3ISs4dlheZlda''@;'; put 'put ''US53Y0pqXUN3OGkhUlJrb3hnTUdzZ04xKEBpIVlNfSQ/YllESzNkWSRPaXRHIXhHKD0pVE5DfnRTemxmOXFvWnx3Rk5ZaVtofEsrTlpFKUBzVkdOQX15LnxbI3E3KFNVYSJOVk1DfHRCdSo0eFVXcjpwYCIsMUo3KlVUWSVsIVo+UnJsb1VRJmJGJExYMl8iJDptXXleW01tSnVaezVoNDAxcG9d''@;'; put 'put ''Y1R0R3htTSN4SUh7MG8qJEt6WXRlJHVrN11GPGpSbVBtayohfTF9VylkKXxLUEtAeV1NcElWWDFmS2NoU1dyPGVeMX5lZEIpMDhHTXQyUlREP01iMmJFRGIwU0J1PWc0QC4jd3B+TGpOe0J3cDNSQyQiKEBnYi48TSFWQ14zQjlXKUhxaz1ZISY+JDthanQiMWhgI3J4emdSIyg8Y2NpWSpOb1pF''@;'; put 'put ''d1ltZzRYZ093bWY0M0ZMWDsrWnI5QCxqIkppMUIqSFFeVVYxaS48UTxRdX1wM0JZZ2x9ImsiRlJlWl9YTyFCQCJyRC92ST02OkxpZWBnME5VUUwsUWo5QFZOcmAudks8eFh8VDtAJlZWXWU/XmpKZnNyfVIzSzIwU09yWUhmK2p9RiVmJUYkYF5pSVg3dUJpc31WM3FaITh9RGZDQU0mKiI7JUts''@;'; put 'put ''Pz1pJCpAYEF5OiJwSXkiQURXM3A4bmVKR0cwVGJSTzQrMSMrR3kyaWZLO1IxPkRVL2RZZ1ZFU31wQCxlYU0oOCZMbihpSmRSJjdWTG4pPzpmcVZ+blVZenB6MXQ8dnw+a3MvXmsoME9MPj9mJHlWeiFCZVM+STpzeUhKQVk3XyU9azJAUGlQPm4zPSU4QC5uJCx8RGt5W0JQMls/TVUpQTY9X1sy''@;'; put 'put ''K0hAc2Z6T2RMYExDM0xNYWlVNTlGS1IxfnE1QjdMfX0/TTE1SmFxTW5dV0ReW2I2eEltdWVPM1pUaXZzKXdbWVpoTFs/czxAW2xnQmV8Wz49dkQ1RD5eemBUOkNSL35XLFdYLlNVIzkmZFVhcDk+SDRqaXheJGdwM0goWT98ZVt0ZmpeWDFnOywjWl45VnhiJWIjTiVtKzJwOW5gPUZUaCwlKTIl''@;'; put 'put ''YjsseGksUUZLalpyT2ptSkRQc11nV2ZLJXEuMVs+TSRJXXEyQ00lIj9xSyMqKmhuVXJUNnhNcFNXNyswc3V9dGs8UyFVNkRSIzExYn5qV09kQ0tFNChWdjI2c0ViWGtEPE1XNF42KVMxXkZ2cm55Vl1SOkNVM1NEL1VwSm5jeEo2R1JXLDNtdCZWUGV9UnZqfHJALGpOaz9sVXNIU056W3tWc2dy''@;'; put 'put ''W1suLEQ5RDpQX1NzeDM7eC9IOjFLWCR9Vn0sZytbLmBNcEJNJUg5XTlgOikpJW5LKDt5cCYlJGIxXj43P3JfOzwyQExmM0l5RCVCJiMjK15xUmkkP0RKeUB4Q3UuLDBzTjQkSnNFLkZ3XSZ8YWxtU00hNHx1T0FaZHE4MCYufEBqMktLSVlNLCF8fVJhbj52SGVNI2lIZGo/YHExOmo+dS80V2Nw''@;'; put 'put ''WkwpW2p2TFpGZGxoZTVCWUc3cnBGdjB2fG1MdUxfNXJQKTN5L294OEQpdHsyU0M6TlMye0cqY1MvfXlbT11RI3Z2fDwpJktkPytsPU9DZUZYMHp6TV9EJSpySXs1P04hRFpgdVcwRVVFT2MxQkBYSWtkRSxydUttT3coVlJnKz1DVnQ1O2lGfXwsO2ZDZlB6IihBa0NLQ1V8PU5EVmpLTEM8MU4r''@;'; put 'put ''OEJ9THJKXz9hZU18cHdjTi8wSkdtdylXZEB+NF1oeWpKMUdjYTNxak5+JWpGSnU0TU5TclEjQHJQM2IxNSw9RSoqfn0pb3xYY1hzcz9kQipFcG5VNVFCckNkYXdoSzM2Ml4wZCZeImtGIWkqV296REZsRV5+WEoiQExUMFgzRldzKVlpbStqKFE2TiFXX101TiFdJDJ6eSlPQG8hZzFBVWUsXT9L''@;'; put 'put ''aThjcDR+RDNLS3dYMTxiSXtdJUcmYSwuSkBXaks2KTdqPSRYJHk+KiNqOGZRYmVwJjZePEQ4b10vTT9hMDAlMFoiQmheJVVxI111UnlHV34oT3pLQjJYZyhmcThrQ0A8YnxraGIuVCE9cUFuTkYmcyp2S1M4Qkc2aClqVlFnWHZwVTo0d3tQOnlhKjVGWyhdRCxJREdyaF8oM0lAJUFXIXBhVj41''@;'; put 'put ''cStiYjczdHo0OWpRXjI1PS9oQlt9MXV7S2JgckcsOnlmcl82VDY/O0tqR144V3dBVEA6MCpXVmgoLlhRImBXLyVrTGAuY2czei9Xem0jRE11ZHJESCpGfVtacCVWZjEwOltrLGJAX3NVQjErTWZdUEEvbVl9QCQuIlhFUD1SSkJXeGI6VzJ2WzZjTk1hQVYqV3lYUmUre3w5MUEqTkdCc2Z4JHsv''@;'; put 'put ''JVhSKTl8Til6VjkwTSpHcjpVQGEyInk4TEMjKnRbVjQrLFowdXdFeD0zM09vZ1N9TmpNYn0vTkJ7I04zQSk7TUNxO0I2KV8+RklJOV9FTVZDQnVUaj5lQUFjQiNsSXVSMGVxXVtnSktfPXhbeGZMeFRXazB1W3h2THhUT1lAeT05dXh8QnpNPWJPOlYqL1A1e2tFTjJNI3x8WVUvKWBhUXhGOjkk''@;'; put 'put ''cysvKnZ7YzEjc1lEZzduKmk9RTNdP3BaWzoyXkJpbHlZSl9DTGl2Qz1wTz5BJnI8fWYhWCNbZ1NJYiFjIko7KDIrMWlKbTtRajMlVnZUIjJsO1d4aSJAKDc1RHk2b0VTbnhuNWI/fDIuSHE9bzt8Tlh6P3wlUjxTcUp0JDojN3dfMm9QU0pMeFglVHopK2FDM0IsbkxodSszK2N3b2dpSTtNcnNj''@;'; put 'put ''e3pDYkZqSlFgVzJVVyEwdUdRUEgydU9XaGt3RGJeYl1HSDI+T31iWWtqVk1mdy4veCUqKlIhSElNIXw7RDxHWy9Uak4kP1kmNyZTa3szI1JlSE16TGBnUiZXOEhCYDhlTyo4L0R5OUAhazhgVGROQW9WWipsRTtsdnJNYjI+cjAxUy9uU3trcUApMzAxT3xQWmhxM3hKQmRmcTt7PGNbZSZXZ0M3''@;'; put 'put ''UDU+REZZTkZuW1lIYjFoUH10UUVReDJpfFR0ZiE7fHFUOmR6c0teMSV3X0M0THF1KklHcj1LSmgoPT0kJDxVMVVARnZjLCZrJn1mITdrVSZRJjR7cUd8LzN8OWh4U3pOcjolSWIhciMjSTQ3KngqUkZnaDV5WXReNnt8SD5GcmhBMExeVX16Xj15TUBYVyNrU3pHNk9LfWVQKj10O3JhWjRLJl9B''@;'; put 'put ''MC5qLy9bKllkK0JMT0YlWEdtUiMqYEpGenFoTDBlP0gxZT9BQDVJRTNpKj5aY3l3LkRUYiZzUHF3W3hpWEhXOzNMXk08e1h2TlBOVUJDYnohZURIMnBOMSRZamFwdmdYMkg7M0hSWSR1dktaUHRTOiVDdTwxOzBXQl8md3FNb3tRKWZ5Lkt1PFN1dFVlZmVOWjYsVzB6SFJLdzhQUE93aWQuKFEm''@;'; put 'put ''bSJHezl4LENLOyVjMzdjUG1KaExAdXxpI3s3I18lfTwlezxJOll1WjAvSjI+PGdjKVopUHp7PjYiLDleRjlVXjQsLiUmMEZqLzohYyNoXyRINjMwU3ohYmJpQmxpLl5CSXo/VUJfKzRLMDx2JXYrVnhCRH1zfFRJI0Y8NCo3VWNMWXJOKjxhKHdCdHE4fClHUTtDe0A3QixrV35BRmldRTJ4aU8q''@;'; put 'put ''Uy9WZmxieUBwfng2eVldOEZnQTEzYl9CJSVae0VyblF6RF5nUE1QNTRsPXVPPypMP2h2Mj53QChjSnclPC54QjpjbXAjW0NIZVVfKDVFfGhHYylnNFV1aHJ+LkRLOVFrdWdyUCtPdyo2fmA9W1IpKUtlM15hdmM2XXQpSClhanBnSmV9TGRoekF4PDhfdn1EYW1+M1hCVyx1TCppOmlZPilJPGYh''@;'; put 'put ''VElXTlt3PCZxNlkwJF0rZmdZfnJCNyEuRDs6KTJNQU87fntTcHVQTD47QiZiREgqUTYqIX5nSnF1XkFLOkUpbGVQejxyIjI4QjJeLkM9e3U1PW9wTTlBOXRRLj1DWlo5X1ZZajcxRV5EUS5OZExnPENsZFgzTEg8M1FjTmxVPXVWWnJHcVFVTlJ3a2ovUD42KXAjYiI5SGwkbnNBMX0pV2ROSzAo''@;'; put 'put ''Wn4+IW9kWCFSajtaRU1icXlnKldpRzJqRCRpeC9NV2RHUl9zMUpmQT1+NFgjRX1XYyVtOWhTPndxTTlzYiUuPCwhPl4saTt+MktLdG9DRyshW085ZSJjfmI/JiMwb29DIU5vVjFqTkpTJExyOz1bJihqfltEL0x8VnVSYGZzKVVKZEUyITwoKTpQZi45T0hNKmFpaktlZlVmVEZuMF06UGpaYXBs''@;'; put 'put ''cWloeHBRI2VzKUh3WEgsT3dFYF0+MD9nN0IvIkI0QiNYKT51ayZFJX4mbjV7TXcmYCFEcjQrQyZUYkImUHdaXXxqSC85LFM3MnxlZlkmTHhYRStZIUU9MmA8Sl9PMSIvfVZOeUd5cENQV2Q2MWpPLFkuN3Y+JmQ2ciovfk41fVdtUV1aITg2bGA7WT9hPzVuPC56T3YqLltXOW8zYVZfYkJlZkoj''@;'; put 'put ''TyhddjF7cl9gXyQvI0olZHhdOnw5Ujh6N1MvclZET0s4RV5OUnw4YShSbEwwaGZhZGZhI1JGI2wkMUlWJHNZR2cmRTVfeHRhejwxR0JJQnlYLitQZFohOHZhT3t1X0J3Yl5xXVFqSHdwOW1gMnVlTHBrXldOUm9BKz4oMT9QJDxGMXN8eWFqayEkIWtyUGFwbXd5elJEWE9YfmtYVCxwITBkUF9m''@;'; put 'put ''JklofC5wNywqbktKdkZZUUNRVkZMfEBYMHUiMTx4VXYxdT8rd2J6YEUyWFQpQyNgTzdQc3JsYWtqMypbLG1ROjBwJCpNK1sqdDMrLl9bRGJTRXEmQXdxYylaQkBqL3gwLmUyPV0wfFN9Yz8pMj5kVDwsdWk4ez4kNFtmblM4KSZMPEJ3UFsxP2M4QXdyL25NIUxQfnw5a2JjRXYiaEZHVkZ9ODkl''@;'; put 'put ''Z0cvITs0eTs3cSUlOHlaek5pa2xZc1M2TmE7SEJfRyM1JENlc0xANkBVN31PL2NXS0FPQ3dlfCxjQDNuLjwsISUuJX5hXmo1VXw8Z3F5XiNYYjMlL3pLK3t1aDppPisqQyY+VSE6VFFWQSlOTHR1Y3F6Zmp9IS9ZdV9yej45VVhUaFAjYjFGe3dYZkQ8T0BVKDIwJENqXj8mdEs/aSNIZWBlYGUr''@;'; put 'put ''QUpqMzhjaChleHw6WHJQamNfQThdSz9HQjIiSyQmY0VuOkkqJm45eiN1O143KXlPZkNWeWxST1orKkVNJnskeDZlSX0yPk1DJStQS3MpMVpURFl4KCNuRUJPQT9SU0RZWlZsRWl8U3dwYzVCYUc3cmhOP1hgcmdMcUxpdXA/dl1aZW9ETiNSTyZYYTw8amtqRFAiK293R2QmJD5DaCJrTkZCKkdh''@;'; put 'put ''RCEvN2Q5TEV+W1s0WWZWYzJheXVDYlIqSmxFMEJpIjApaykyKE9CR3VESEdvbWBaYG5OKF58KHxObWdyVigoNjwmTyhvSzFkUmZqejheTmNpNV9oNXh2WUA7S1U2emIhdlFWPUV0QklPSDUsLn4+UD58R0xNYW5NSH5DRVBHZHFoRFVeKEZZNEsmXz5DZXFHImxCMEN4P3BMI3Z2SHcwR3piIS55''@;'; put 'put ''YnlXIVs3PkNDeiZGdE1heXg3azo+fXx4XTYxel9xZSU1UVJGN11tbmdsRnNjVTQpTnpEKzl1eCsyMyFxPk9PUlNvNyhOVHxidU0vSkVxIV85bzpZdUA9MEA9U2RQVlYxRktYPG4sY2ApIzxicnhQWEx7Ql5hMywqQEQ6NzBfOWA1QkBXUFZqVF1CMXlXdjJMa0BXbUY6bkVTZDRYNyFsbGxPbH5l''@;'; put 'put ''VjRpZDs5PnZ5WDwyQG91Zy5lRmc3bixyLiwrWmAmNDhtRjohUGVwSEopNjR3dHhdI09vQFsmSy4kM0VafXdUKEo5MiozTUE+NmBwVSt4Rnk8SS9gTCJPXSVEL3kjQz1eakU4PWo7Kz5JdS5xV30kS0Z5eiJ6bk0sJEtGMHowdnVAc1VgTjZ2U29zNT0mSFRMOlAkRG59QC5yVilXbSxYbEBORWg+''@;'; put 'put ''cVVPYV54bFJ7X1E/UTBQUy4xfCFdUV9OWixveCxSNypbLDtfYjFTOClAcD1XX2o8LEI0SixBPltzTC5ZeUhdYDxOblhmeTE3YFglWUJjSEwrVkI3OlltYkBkLDBbL35xZE42KkBvWWcsMFsvNTI5Q2FXcEBoUTRCbitNXXNsYixWWmZ0UXwvL0V6PkNkX3NsSCg1NXIpcTl2ZiNGSTxkeURhdTR6''@;'; put 'put ''YUB1O1R7M1h1JSwrODBRZSpwWlZFKnUhbGpTb0x6Tj1OM2hqdExPRDBteERiXixBLjx5NHR2Nj5oKnQ3Sy8yODhLKltfVEg9TmRmQUpJUX15e2t3PlcyJkksTnt3JChUeGdVPGUzJTFOTyRLWHN1S2xTTFt0cFpocktTKTx3cEp3NltPWj0/aDxZZyRoKnhTNXs5eGdzLjt4UnVsWilCeVQkJF5R''@;'; put 'put ''JUc1TDlRQCZbdXNRI3tZLlhjbUlSKDQuPy8oJTpMMEEmcXBGaChXKyQuVHssVVIjS0dPd2lFMUI/VldDISRsLlBDPCRgaEt1eD5MZ3s4OWNldkxDVXp+RDNGUVVtYWAuKzEwXzZ5NVdmKy4+aUtkRmN6bD1NRSVHdjE0S0hDZUgiU3xge2JMSVRrIkpbKWtvTj9+eVs0a2hqP3k/K09rQVVJOTs3''@;'; put 'put ''SFNAbm93JSVnbTk6Xmo4NipnLF1bQStZamtQfCpPMU1UfGBaYTh5NX4yKUF5IlQjUjxOSTtxcnFwcjJsb0FTb1B8PyZDe0UyOEBKN3EmRmZMTHFEODU9Nn5mfm9VTTBqaFoiRFRWTG9LaWxxVzApQXlNVCJZIihobSFuJVs+MzVzVCF2c24mP0t0X18/WGJMSSJTdWdten5UXWhbKk8vaEsvaUtw''@;'; put 'put ''UnY4MVs8flBpel5GO2k/TE9eQSYjUXF1ZkRfOGlLWFFpO3RSKWpMU0lbKiRGbTsoZD9QRXkoP0RLYD1lbywhYlRfSkV4WDp3TzFNVGIvRkMqeDxgdllqLFV5T2R6ckNCWypBXm0oTG59RSNGOyR9Vk9eclhkNmlpUCF1Zlc0fUN2XjBZOyooRn5lMk1+SExGdXovLlYkfHkqLC86SWxDdDdfLDwy''@;'; put 'put ''IyszcUI/Y2tFaG07ZjtpWD0odnxQS29sUnNkRzV+JW4seDV3WHYlYCYjNjR2a04jPXJ1WndBWVtrfWBjZmZVJDBuZkdzd2UuTjF6SXdlL2BpTFBAcm5NV2hCOipfUH0mbFlTKW00RTxndXc7aV9YdExtQnlMT3Q3ZktAdjFtOyJ3ZDEpZWdwK0BRVWc0RCZ6bDlqbCRhUDRLcklMaEdCLk5RaHx1''@;'; put 'put ''Ly90eXQlQzp5MnsuQjNJcDhwVSpPdjlWOmpFPG1vMiRCb1N9dEZGNzwxKTV1dlJVUzEhLChkXzIiWWxAY0NENnRfTiFmL1lOPyQ5c0FRNWIrY3tIekhpJXJTI2opM35xPSNpb3VbNFZ6UlE6NyF8OU16VG49L1coWkRGQzJ6KWV6am4yfiU6dyheV255LF1wW0B+ZjVvJkBGIWRqW0gwNiE9ZT0o''@;'; put 'put ''fV9wNjJvSnBULFNCVDFJWUxubSUxTCFyZipqVyw8Rz4kOyV9VGIsXklXMXQsZ3A0V2Q5UnltTUJ2ZGoiJHQkaz1qYHpvODt5Ly5rN2Vldmc6UUZhMmwvJSQ1azBtTVI9ZUIwWXZtOyUpV20pVSxVfCxHbTAjNkpmL0RqaVQyQih9R1oocCV7fD0pUi5HUnZUO3VnXjxDWmVWSHkyJFhTYTtDRkY4''@;'; put 'put ''L3I8aldDZlpaLEo1K3pkSTNXdk9fMS5obGxPKkZ8NjtlJCFPbFJ8YkE2TDY7PEpYYDF6Mm1gUGJxanRSXyUoT2I8TTQhJj8kInAyRT0vNFM0JkM0JXR4cWk5WFlNYWxjOil9NnBPaXokVj0zUj4rKTBPTHI5VjQkT2JTd10oUndKWn4lZnQ/K1B6SipGb1NAUV49OzgiYzYoMTsscn57IWY7S2M4''@;'; put 'put ''UkRwZGZ6Vy9MZ3phMW9+VEBgM1cmVkp5ZHp9P3pKTVMqP09pUDxaKiQmRD9PPTFhZXttOCpSKmF9ZFtaejhtOHBMc2oqS1BbaHErOF1eajshaUFjVChxUmU1KUUpRTVXbF9CTndYbHsjVkllNDw5NzU7UTkhaCUxeWM5JWA8M000NSorIWA6RjpgV0dXMHI3cDF+VDoyal4wcTMjK0huV3pDfTI2''@;'; put 'put ''S31BNzZEc25JZUFjNWJnbzJkNiFbT1Q0emU0ZzQ1L1lQdzB1M0l9eEIrKzBAVXc1dTtPanpPPF9VOT90Xj1GO2k4SWU5VjtRTCRLOnRVIzdSLzE3Pz1wbyN9I11lMkJNOmI1My48bkNecF5+YWE1fHo7Jl84JSNQLGQhPE1WcCRXO2RZU1FeQyJha2lBXTglfjVbfF1oLkNDIzBbbDwpZUJjfWQ0''@;'; put 'put ''YUJdM1U8UW9+KVUycDV8JF9xOW5Ifi8oJVY+XVpOe196UzV1MyE5ZDZqQD5nOlg/T1M0Rl09VmtLUnZsZztCIyY8JSRQTiFSKVQjQiZxdD1EW3s2YmB7ZnJzVjhGUW4uKUR2TEtFRnNgeyVVXkdlJCJLZD9oRkY+cGUiYl5JZWYsJUx8OzdOSWVyYiN7YSkmcUV+bFk8SzVwKTgmOzpBUnYoWSNL''@;'; put 'put ''IVklSH54cUU+WTlWbDQxN0pEJU1OVTopbFJJZUZ0Z0RrN3N8L2hmWD4veFgpW3NsVyNGe3dKcCxbcTNDNzQucClncHpxTWdFWHcifFdnVDBbW2Zoajdnb2kmNiooR0YuVCE2RG9FdXZKPjNGRW1CbWs7eFh7Z3RIVHdgeWdYMl4lRCR7Lzcpbn5tVUFZNkImX1s0TWZoaXl6YTshNkRBJDhJLC99''@;'; put 'put ''ZCpSZSwwLCIhMy9QXyNSTkVUMSojOGNKanJvNihDS2hXNFE5bC9DRU56byJseU1DTVlkWlI7LEZCX0deaixiQ3pXencsdyRRaHwyVklORHFLT1JZRVhTaF4oXV95cD10ckJZI2M2Nzg5K24iXmQ5OXEkKypIUD1XMW1wIl93QGg4U1c8bz0vJWRSeSQ8JXtHZi4pJkxpIllNan1xVztXfnIsWzwy''@;'; put 'put ''a1A7L15RQ3M7V2hePi9nQHNgWktgPFM/TW1gPC88MixMZzJtRDVWakFCOllyJClSSTxoOCtOY0B+fHdzP0UvQGQuc2pvMzB7XUt0XmVvKFovOWhfP00hblRqOn5edUpvJVc5QiJDXS9wTFs/VXpYRXRCJm42NCNyc2smQyIrMXEsXz9XLiozUzBxLF86YVhHRyxiIWU+IklIbjQ9WlByI21eLztq''@;'; put 'put ''I21edltiISprOmZpfndvYUV8dUg9KWw9Lylab01wJWBuQmEpKzxzV35ROFR2Sl1rdXZ6YHF0PS95YkBXPnwlejtKU0JDajhmclhiNlJjZ2QoKnpmfEhHNV44L0o/eUJYSDAvVWw5ODJKPDZJaXFoe1J1Rkc0NXpxcD5PajJ8ckQkNzIhK0g8KishP2YzQmshXkFUeEloO15MOVNOQHY4PnBGbVI2''@;'; put 'put ''cnBickNWQlcsalZdRTZscThgV05QRUNjZGhAPXJeR2hPIXYwRTpGe1Iybj1gKV1PN1E+SyJ9MlgseypFYE91W1ZGJiw5bmpQW2Z0UVBXalB2WjA2azFCen4rTGQ2WyZEN0BjS09dcUxFR3Y6WGA9Rnw5eXFqK3dIW3B5K15lYFtUJEtXcyRjLDhSTkVPc3F5I1BAekNaTnttTjZGQUgqKkczeCtj''@;'; put 'put ''bDZmWWdHSkp6PDFdTnhpfkQmaiZNQm07P0QzKEBsYkNgIS9yIXs/VGZIU25LJmNTY0xgT3ZHPGkvcFg/cjFpc2Z1WytxfHpmWVdJZl4mVFRPQUBTMko3JjlLTDlmLGRyK2ZWO1NYYjhbOVNeQXY+YExpcXkoNyteYVBGKSJQPGBYc2BBRW1fcXlEUE5pWTNIXktwRmJXVWskS2c9cmpMIlNKYWhR''@;'; put 'put ''OWxQIV5vM3BGKj8oP1ZHRWBDfVI8NWklUTg9Py5ILkpbaENaNDxyMDNWOURNeio2YUtxfUVRUDhYZXJ3K3g0OlBiJCFaOWZeU0NeRGI8cEFaPHErfmUwK1ZdaUNYLDhxLjUheSZGI3Q+X2FWSlgyby9WQlp3RTJLfE5OQ15LPiYxIk9hIWNvTWxsemVUWW4xI2l3aXJvWWpfRSlJZD8zZUtZa145''@;'; put 'put ''aU5+RCw0flF2b1psUiYuJnQ9cEBFKEpRIW5+Y2tHZUNzaFtedlo9MyxnYiRSWnNbKmhYflZGLCRkaG89RlB6PG58UUxDMXlSPl9nbT8pYk8mMltfM3tFYF01Xz8qQyt8VlVAMjZ2MzJKJkNnclRGPnwiS1tqciRbUSxMNytyeW50c2JnanNIPWgqc0pFWkhIdzhUPmpKIW0rVFQ4QFZpaHUqQSsw''@;'; put 'put ''U1dVTkY7PCxfTVosd2htUlI3TGZSSHZ7Wm1VbTwvfDl7dDg7XyFqMzA8SnV6SWIoNT1JdTp+aTtqZDAwR2R7ZDF2NHNiY2BpW1A3Nip3S01qa0d3JTN9dHRKeTM9W19xczdXQ3hZe10sIXEwM0siWlZrZHoiajtpISYicUxAeV4xRkU5dkhiWGp+c3V7YXNJSEYxMXxOKVtnLGQhXTN1VjJafShp''@;'; put 'put ''c24xQEFpd2pGOzE6OypMeiNxejppVCM/bGlwWHo3Xj1oS0hfWGVEIl9AUkx6bWUpJlRhKTp+WWU4LnFKW3thYlY0VmBDPGhGVX4jQDVpWD1mTU5WRD9nc1Y0MF9geitfXUYjNTVfYFlQZD5xLFBxMS45MEpZclZWPWpWQUciR3VAQmIhOHlsdGwhbCpEe2tkSCwmJiVOKkkyaEU/MEQrYWtFeENf''@;'; put 'put ''N31kfSpRdXY6JXhwZjp5YXtMTyM7VVd3WzxSPkg0Uj5JJjcvNHRlV0YuIiZIJn1dZCRyczgqIjhdN2dwWVgiOzV2Sk5DI357Z1ssTSt2ZXdwaUw1bCFPLFswQFsuU2FndCVLaHtgPXJVKC4hInJVKGEiXVsjfHdQV1tqb08qfkBaby99THg4MS5ORTJ4KUAwUk8uZjReZHoqN1YyciZJL2xbfSU8''@;'; put 'put ''NSN3SHtpYCFyUThQdGxAbWZIfFRQKldMYnZNNE1MYlhfOV1zXUtXQVdAak5IUHI7UlF1dXFMSyE5O0AlTnAsPXUvZSwyPV0kIlUjQ2hvQ1NgbHpaRnsoY2EzVU51eVQhO3lKSG15P3UvWTJlVVZ6Wk1WPl4vcStdVFl4MngkeyQ0WkZZYHxocD5Ual5PZVNWWCx1UWcmUylVWk1WWE1BTWUxP3sy''@;'; put 'put ''RTRBSEphMzIpS3A7KTE9VmRoRmlmMHVAPGthIWVObVIqXn1jQEwjUjs9QGMrSDUofHkmWHExInJ7TWJTQiQjV34+VUJtbCxXTH01TXhOTltiU3pLNWtfaXVIWyokKjVLSTc2WE03UHN7bVE+WG5qM0JESCI7V1khX0Z4d2pBVkZleEpZaHVdTGheVjhXXzMrUXxeMkRQOmRUeDtXJXk7LHN3WlY9''@;'; put 'put ''OWRlczNeYWM0PyxTej4laCJkP1F+ayYsbjhYa31ZbmE2PT1hWmFFfFghNnFwRyIuTCtVU00xaXgxc2BEP2JEN0JOOCZHIlZzP0lBR2pVOjFHIzI9O1JBTSswfjVxSERpdSZpZCNKIkYxL248OjghK1Ewc3dnRj1Udi8oflZtUy9FRVg9N3s3dUo3c3x5NyFvMGBiIX1YTy9fIVJvTUV8SyNPRlc1''@;'; put 'put ''OSgwcWRLb1lYVithQXhoYyYiXXFlTnxrcWdjUyVFZURNIVMjeVg1KW5WLnpIUFZdZiF0Nm9CPDBXR0FgT3UsdVVyNGF8MD0wWyVAWlttMHVMMHFrTiEoKStzXzs1RSwwOlZuJjZjYSZUSCtKc1FZYyhmNTtjP29xflohenx4eHsiZUokQl1BMFhjSGwsVzxbMXdGNlcyaGI2aTlMcHcrKHVjcDck''@;'; put 'put ''VXhnUWBSLiM4a2luOSZ6YEhZVj5wMExNRXAlIzVodGtVU3RpS1IvJGtPdVg6d2ExTyIkIThbRW1xIldGMDFDM1NzNDUycUVveEAjdDt9bTdoKTNLOGVhKXtOWEopQCxibHoycUVBeDYzb29lYXNlXi9ickEjc3hxRTAqIU09KTRRPV17bWI4NSlTaWVyWlZ2eGBOaCFXVGBJTj1uWTpmPV1KfDNY''@;'; put 'put ''SztXPUAla01zenNlPDpNfmJQWVR1WktyZjVMYnxdPnRpJDtYbXN2TWIsMUxZKV5tPTM9dGFpfiR2fWV9KDtOKFl5KywsI259LkhuPWJGb0EzezwkM0tbdC5YWiUjKzVHTiEsZl5MNUU8Ym8hPlMyJTUpKy5iP3ZTRUk5V2tIY1BZVCR4NCM5O3xrL0htTlgyempbWzghUzhvcTNEOjVIR3laPlo1''@;'; put 'put ''N1VITWlrclhdNSZqeXFsRWwoUE0rUWdeTFFQaVtRZyEiMSxXMk5sazgxMU1yV0lEeCk1TzZkZ3FFSztiRnwoTVdYZ3YkcV5ebFAremd3VjlyPTxUd25HL01fNjBQfUw+L1hVc0NbLk13LF83ZzJELCxbRFZTWkpQSHMqIn13UHlEfXt4d0tNNlg7SVd3e1B5Tm91WGpiMlpGSypJVWthMks3eUVV''@;'; put 'put ''ZTwmWyUmY0pRbiNoKntxOEhmeFNJVDNsXWpafTo1U2BOUjo1UklnYV1qKEt3UFcse0VMQnZpJlddK1VZe019MUZ6KStkYWlqSygqRyFCWUAzPyZZcTo2cU1TUl1+P1hmRElLTWpmYHFIIVI3a301K0VpUnp6L2g+IzhhKlZpKDg2bD9dOjNBY2JpPmsyVG9mSE8oUHJkeEleRWc0W3VLLnRjYyhi''@;'; put 'put ''amplPVtOLltFeThMN1NPXnlQbntScUdFSkYlMltuNzBVNCFSUDprTGJ9fV4vUi8xUDJaJVdKYSNCdnhAdmttbyVgNGpmfWlUbVkmYnw+Izl7VjBEZXhmQlNffkJJIzJ3SlQ5KkxMQ2gwTURtYHxPeHZxTUlDKlo9Y11hR3ZaL35xZzt6UkQhdHlablAzS0tMOTRIOXNzZiN2ZChQVVJKNj03Zk9N''@;'; put 'put ''RjdlUF9gKEtvJVdsbUs7bC5rZEMwMXEqO0w8MDZdSyJqRG1KX21BWWdDVDIieVV6WEc8UyFxMDZmTDxTX3gkRSxNI0hXbDRQZzQyK1dSUlE9S2x3YEs6dWo8WlRLJGhXb2pKRkduSkJUbEhuRGEiXWQ9UTpaZldtN3N0Kl5uRzl0InBMOExofjlMZSpfW0AkJCk5PzZhKkQkcDIufFZsUHY7Y2Ul''@;'; put 'put ''JEd9WGwwSkVrRyEhdjUpeitkbTh1LkxhRHtSTnVWZl0/SDMmZE4sdjcqUCRHWXAwO1lEVnZWdFdWSkouTVFbN0hZYjs1Mio8MTh4YC8mVW9DbEc0QkRNLnJARTppJCFkOHQvIyl4Kzo/aEA2TS9GXzVAdCJufEsjV2g9O0N9KX4wfipSTVMiTF06dlIwcEdwQElSPENPWih6dy47UDszZ3RZQGVu''@;'; put 'put ''fSFbUDFMKE5VXzdMZ2lOYTdQO0N6V0FPSFQyQ1d+NkwhWE9UL1o7Rm9YYFkzTl92YFcqNCMhKihTaj5lWlFEZm9RUXU8UXkwNXVMfD4+TlY1WCIpRyFEbzleZHN0SVMyWjU5I3s8YHVpRWc3XSpFbFo5Uik2Ykxxc1siIzoyaWY6LmpmS2hROj0vTGZxaWFWQGNiRmApK19zYnJ2alIyZDxYOjp+''@;'; put 'put ''V3Mrcyl6K3lnPTBMQEcjSyksQkVOeytyWSorW35MLGBOMCN2SVZFTyY6c0EwQD1Veyk5KD1OWTxbR15hIjxoSW5XZWJLaVlvQ0UuYDxMUGYlYCZNMlFJdEljSyFVSXZfNFE4KlFxSSR6Z3hKaVBTWSU8eDlWeGJmbGZlZyUyUFQ9QX18fGlrbTMvWiI7KVI6ZD8lY0BJTWgvflZ1d0BFS3c6aDJn''@;'; put 'put ''L3c5UGQ2YyFJZmVlMCtQYnpXRFo4MzdqbEV0KUdVeXcleDBjaVlaYWVvNS5lOFBQM1RiLD8hTSYid1prWmcmZ1MrR3pDSkBEWj1QbzRaciV8L3N5JjBNTkIpS1h4dX5CRztjYUpWczpNRiVfWGtmZnxGQHM3ejQpanJmXSI0OC91QG8lRFV0ak94Y1dMWlU2X2NnPjllMFE9Mz05JEtOfjZlaWA0''@;'; put 'put ''T0lJaG9EVzpaQGR8eEM/S28zRTlYJjhNUE8oXigiYWo5Yl9QMEF7ITEiR0hjcU8kJX41OVYufExaek05aSxTXk59MnB7cTE5ZSFAMk9aQWAqdzVXSEk9NGF3QkM1Kyt5JFM9ZkAwcWdJejxibHFldjp1PlcpQ3Bfe3hCfS4pJT1uJmB4KEVebmNvLG18QFtVXT5LM1J+ITVWZHZ0I3tUWCU+NWZZ''@;'; put 'put ''WSpWbjE+dHpBZU4iRldHM1pBKiNVQWRCUjlAI084MWBtXmYlY2gzTTZYWllwdjV4MHFNYE97Tz4scnJrcSY0eDYuYXMpIzlLbjVbXlllJTx+MiJhOWFCN2p9MV57PXFaJCtPaz1rODxDJkFoaz90bSMhUnAuOURxdFc0NUlVSz9hPFNwXz9YYG11dnVeKnNKX3ArJSJPYDtuezF9NXNFJVh9Ryt5''@;'; put 'put ''WDtzVF5TMndQJlNkY3E0RCxyT150e05RaGdDfS9CV1ZBRTF6aj9lV1Y0PGVAaV1WUFZicGp0cl5OPVdFSD01NHdjXlleSkliRkhZUG9oNXJlKDRzenoye3VneFNmOHxfeXZfJDFQOik/ITg3bVcjVDM2XnJKTm8+SUowWjd3LlE4P3EvQGhvNCpAMGZvKVU2PXBpaywiM2NoKm5BR146ZVkqe3pV''@;'; put 'put ''KnEiPHElSTJVI0MjR3NJMkBSZ2lQU1RnX2soVW9HLnwvUVcqSi9sNXJ9fjp4OCNbI3w4Ynl2SzxwQT59bSx0aXYhJmpYLFQ5Yz9OZmdvL35PIkljaTRbNmZtZTZMQEVweWU0ezh4Xypub1JnTnRHYGBQfXk1TDBfNV1EeVJ9O3NwSntEdFciSj9RLyZjUCNqXSpEQFg/XkA/U3BmQ2A+SHZuImtJ''@;'; put 'put ''TzEsMCwjeCFqaiQqKV0hPzlxeUE9a292WCxHenZoLkxiKXhjNUtVQSUzVHRTLyl9fV57cHtbXnh5RWE+fUowWWtXciouXihXfTAvZ2pHSkwwKnEqXiN0Ymc2YzFuaCZGWlA7SyhQQip8OlF2SFlRMl45aVR+LGc9SFd2ck8pKnd6dVNZaTRjYlBASXksRE9GUFI+bz1NNSkrSzRwfWpTVDE6Z0pJ''@;'; put 'put ''bT9uUE9kMmghJn1QVDFtRUtHSXp2JWlSaSpSb0Q3YXUqM2FJI3ZpO3d+YW0qSkMrVXh6UGZoKX00ZVV4YitIXlJCeFlqOzlEMDVrPTxTT0Uqe0JpdD5HRjUqNzdUSDZ1N0oseyozREh+VE8kYSpdeXA+Ly9odnZ8XzRTLF4zT0N8eTsuTlkpYTgveSk2KEZVRGgvKm9RQjcuZkFFQ2BsWEZDLkxA''@;'; put 'put ''VkN9bDk5P05vPTlKIW4hWnxHVVEycG9uXmA4cUkyfFlRQU9SaVkqcThBLFQ9aXJ7KVphZ2Yrb2BDRjB8R2JUUWNxWUVJQUguSEFIUXY+M0tDd156aV1HbjJCIkZyLGNAPH01YDpXTHJdVmZFXjBpMHdOQllrbWs2VF4uP1Z+STIiLzEyIzZtYiRPPTBtYiRPPTBtYiRPPTBtYiRUT0hbZWFqTENG''@;'; put 'put ''alcrNXJ7O2kiY15hQXYka017SVlnPm1pflZncn10QixlTGQ/KSNoPWNQNTlWeFJYdWo4aWNQQU9CYkpdOltSQl86bG4mZnJnRX4+N1c5Ri5FJUNfUiFqKHlYa0ltWU1wJTwicnZ+STIidzFyQWVdfW46Pm5IdTRPOmsqIX1bdDRAdDY5ZnI9ZiNeWipWIXNsVW5ybHBJfk8+UlM8PC90T0JULiVZ''@;'; put 'put ''cjQ7UzZpWHBZVTtwOEJdJEVaLEoye1p2NmRSI0hsMlA8RFRZYjVBPUl5KXAmM2Z2OEJqTGtBbUAlTlMsKn1UKk9yekJAeSs/T3UuYGtSYWlDfnBCbFllY1NWOyJ+WTA2XVtTY2FyWElbdm0sdk8uWi8sfHk0QHpIYkFKdGdBJX1uVl9VODlwNVgjKiZhVj97PzxbQyguUUlDSGxMMXJoVCp+TCMq''@;'; put 'put ''JElPPyJ4UikzaF5iRkx9Nkh9WSFhM2VsI1k5UCY1PUZqd35wP0NrenR1XkhEUElCP0ZDJDFtLDU0KUBOR3dyVGkvZHVbeX5XJHZJXnZwYUV2ellSIUtCRzJJdU1sUkp3aGxjUntAT3trVnF1L0Z9JjhZWGljRn07OV1mcm5MImE/Z2xkRzA6JV9jLk9vUCUwKlViPFpReWdebCVpQChlSVhVTnhQ''@;'; put 'put ''YDU5dFFTdytycVlQPEdRbXZ6MmFEKzkoLGhwQnBpKkdHJV1WKjE4X3FqdTdeN1BGY3Y4PVVZJFR1MzdRWjh1JkAqLkJjcSY1bUI2ZWtLcCliQzRvR2F+UmN5PXopL3lvcCVhKUJIX1J8IXhqWi5eMzFCLEpfIzkpUnJDIj1DQjVlcnI7aW9LWlVpKih6dERMTDlDLmJoZlROUW5EVyRqMXdUOlNo''@;'; put 'put ''Mm1RTSo4OyM2Rlc1bXJCeVs/X2srR11vIUFkZlJaPShaPFd9fllJbEY7TjsxNzBNbktZOWtsdCVsTEZMMFV5fEhudG1RNyV1Lmg2OisqWGUoPExJQStxSVtDZmdUQytgfGt9cDA+YSYvJStde0Evb1B4e1JaYHh4JSFqXl1gZnFOaF1nViUkQzNbJkBjSXFfPkxGXWQoa2pJS1pVaWB3ckVwZiF3''@;'; put 'put ''WUFjXkwvK0Zxb1RiTFBSLCxiZjtiWTxqXnZ1ZF1yJVIuSUY3YXB2Knd2IT0sSkd2bmR3fi9EcyVhPkw1dHRAPFRAK3pjT3Mue2lRL0VFW3VwQFtUa21JbWpOaG5bRnVWVSlINSNIWkxAR3UlL30sOWd6KSw6b0hiWTtaKyRFcGNQVkpmeGhUcVldLGhVMnpSU2c1YjNSUXhIbk1HLlNqbyl0NV81''@;'; put 'put ''MElTUj8sPTtGP0xuWXZoUXREayFdNypnZDNqXnVkdHNkMWt1Y3kzMW1gcnFheE8zdHhgS3ZOKXcrLz1obV0zSTxwUmFfJW8jYyojfCJVVXhuMEVGNjcpW2EpU11HZXQ8KVQydy4oZGMuRSZjaTZrbD9wJiU/W1JkamdRTk1JTnpxbk5PUkhqNlAzKVsrQDB8QX5oeDNSU287KU5UKXFOaEJqNG5U''@;'; put 'put ''TiYlYDpqb1twcUtDNW5yLmRQSE9kY1AlMTYrbTMhcmpPeUBrWl1fQG1MSlVlKyQvTiZVNCNgbT1oW0lPZHN4QVduQyorfXxsTn0hTUkhY3dZNVNlcHBwNHQmYD9zb1RvVXRuI3s0UU4xLmJXM1J5PGlgdHp7bFNYPWJKWkp+Ri56UTtofEpfOWpDOjZ6U2h5JG1qVFFtcnl2eSR8ZkBKd1VZaWpn''@;'; put 'put ''YG80I0Ake3tCWi86UDNpeixzSUl1ZHJrZCQxLmRVI3diZ3tvbm1oVVtpdW9tNmFUYzYrYz0/bjZdN1p5QVdxWywsNXhidHlGT2RoR05ve1EzKE9ybVJUQiZePzdpOE8+ZDA2bjVLLm9ubThOfWFOL0dOVTlpQnhub1BBTzxrNGUhZmheOyZQWXlyZ3J9MTdveD9geEg/STpXfTcqNj5yKWtROUl3''@;'; put 'put ''NjE3KU07L2B3WkQiJmZaYCo3Snk4YlBCcWRHY2FxNjBPd1o1VV91OFchT3JmR2Uub1IuN2lYQkg3IS9vTE8pbjY3d1VlRHNxd0xBT2QjdmNEQk18eyEmd3IjeTlWM1QiVjpONy4va0xzJTwvR1NmTSEvOE4zZU91V18yY2pYPlhTakQkQWosUz9FIWcwNzVCLm1TUjJeWzF4cGBfMnxwaEouMGBb''@;'; put 'put ''PXlgcCQ1VGUyTSJWU3hQU1BVaF5FKFk+XnlkMz50PWBhNGMqRnF2XiQwalk9e11RZkZsQm5iLD06NkJwPzhhKmt0PEhTUjMkUUltRk1hTCRQYilKYT1jQiJ3WTwoQyNIOCY4d1lyNig2WjpgLyRiNCszOT8mWCxqNVB8fWpsYzY6RW5PbXJ5JSJGZnV1dEQ8M1JCITRpPHtIcHNpVUZ8YCltQmRt''@;'; put 'put ''a28ma3JSfTdiZmtUUSszSl9JOlRbJFM1KkZoLm1NeGVJbFI3dkYiT24iMTE3WDlKLmBWIj9CM3pSR08mOHZKUm5sa1g+eVgpeSRoLGJdMFRqdldYTCQkWjRbT1EiMTc2SyhMOURET1BaYkgzUnorcGxSRjo0WXRaRyRsQk40XkM1XTl9fGtRSmxvTGhwV25EXTBORy5CbXgoL1llcXpGJGJaIXZ9''@;'; put 'put ''fE9HL2JVIW5LXXJsTn0mXy9Lb3YjRHghXlQ0MmZ8cTcrVE9FcURGWiMyMVB6YmxzcElXfDEmQzRiZG1SOUlVZD9HOENEPEoueFd6P1V0T1g2eixVRkouR05NVnh5VkVTekJsUmJ3SkpHaEo6VXA7PHVQNE96VHREJTEvVDUqX3d7aC55PHw8Ok8vaEFKIyUzbGo/cyVPWixIJGVhMCVlPSpVeXxD''@;'; put 'put ''ajEyPzYlYFRHNll4fWdeZTp8Oi8uXyUqOitUfl5rdTk/XURIK3k1Rm9LYDo+SCpVfUJMW1tBM1h6Ijk+Kz1TTFBTdltKPXA+QzhaQSROYURdbk50WHR5PUVnZkB3dC9qZ1AvfCZyWVs6TU1wJVUkdCFBNDBtVz11Rm1mcSVbNTA9RngmQnRKNEZYakJ8aFFsQXR0QTRicDlWQlhmaHFnI0hVS3Qu''@;'; put 'put ''dkJmMEo8KTBOWHAxWEJ4aVJkKEFFQXRFYVMmKUd8d3B7dVFQLytFUz5rKl5TanhObWcqWnsxN2EjZWopUlZIdTAoKkFzLzRnUyUhUEJ5dS5fMyssQm9iRTd4Q0RZWEIrMXQwNzZHcV5xUlRqW2tCS1RiO1s8L0Y4KFBOdnFYdl5Ee0txO3M5YT43QCUhfChlInwycSM5KW46ZU11fSs9KCF1YzZ9''@;'; put 'put ''Imh3R3EqeiI8NG9PeUcxTzRuND5xSW52NFljSjptaTB7THE4VTxLMyR+NVteV1RtRSgwbmNNajRzZGM3OykqS15dUER6OF1zM31rQTxlMnJJImg8S2UhemQuK3BIZGxmPDc2eEo9KSUmUmwibF1IPnxseFVVOy9HV2BSPiZeYFYlPnxeP0MrPGhIKnRHazAhb3VGeDJzM1djSVQ5dnI2Ym18bjdV''@;'; put 'put ''LjFXXlN1IzJfcmtzYX1te1IzelI9VTdnaCZnaz1ddWQ3Z2JtUzoxTC48R3ZmZyhId0BCWF9NbU9XJjppPUZfYlZ3ZG41JiovTlRjMTFJdS88ezxdZ3ZpPi8/TGkqeiF7YXs+Mzx5KTtnIXxhdkplLnpKJUc3cTddPS43UHwlczl+NTNnM050RGt7dVpkP1ZJaGNrYXVxUllHeWN4ak93NyxIRm59''@;'; put 'put ''bUp3QkBGI3QmK3U3SDxCRD0xVH5dOFNTUDg7azd9eXtwSHtLTkteN31gQEhZfnJ1N1VpIlVqaUt2e25QNF1lWFg4OCJ9UWY+RWN4PDFqMm18K2NMWXkyQVdrajgxN1N2azhoVSsxY2hiOjZ+Q3VIPXUpaV1fNEh3Oi5zRzEyb2E1U1lIUiN3IntjW0pFaSxpRUpVVllKUFd2QSQ3THxSPTlyTHlY''@;'; put 'put ''S2AjMyQ5TV1eMl89cEs6UGc+MGd1WjpoWkokcE5eaXUpaiNNdkY/Rk8wXXs0TEhLLl5xd0w+c2o6W25LaVlEVXp7XU1LT30jTjpvIzFLQStDbF5fUFs+bGViX1lrIUElUiElIm19dU58PStqI2JQZCM1MWErTzc7cjVxVixebExBSDU5akV6KHRyRkZdcCFfTW9oW185YWo7YXQxMStxJjtAIkNV''@;'; put 'put ''SXdMPWRaLz4oXmAyL0E2cnplUnxxZmU5Jn5ScjZiSCRIaDNrOElxfnd9L21eRj0yJFZRQjRaP1pOOVE7UUwzLy5wK2xJREJBNDU8cXtIYXg9Ym0hJnJAdU5SNTs8ODNKYSZVJEg5SDlIX0NxcjFsVXwvcFgwfFh1I19aVCl8fSQhL304czxLd2xIWSg/PXoxVFoiLiRoWWBdS1U9QEVlOW5JODU8''@;'; put 'put ''fW0ke31nLHEpOEJAOyNbKHFzKE89MzdFWns5d3ROQXlpZVV2Wmo1JSkhdHBPd1RtNkluRC9rUU4xUFY5flNON3pkNzt3NFNgVz0iLyglKk0jPTBtL2Vtb2YrYWkxI2RkUUNvejZqQkNKPS5dbjo0dT57UDsvcD1UX3UmI25NZzdRTFtUIVJSYnBvIUw4dT0wOHczNlR2azg8ZXhefWtdSH45RVhV''@;'; put 'put ''KmBqS0tCNmA0VVc9K2xqOSZeRF5sRTcmamQud0deYCo8XnEmcCEjLG9ZUi93VUxXOSs9MmlYMCtVQTYmdCJwYT05MF9DMz1uT0AxIyZkX3Jib1RCPHo+XSU4STckPWEhZ1FhRTJ9WUpuS1czT2tUVnMpT1cual5+QDxUWTpAKFtqQH1FdmA8MV5WRms/fmM/JWMkTz10XiQyfWFuM2dFY2x6PHEl''@;'; put 'put ''Uy5uUHBXc1I0cHZOXXxlZnQ6WGJaSntGPTNOJGdGeWIxTjJqc08oSV8yWk8manxyJGlGUDhAMmoqelRaQWglOyh6OigzK3FSUHpVfUpRaG9SNlZ7Il0jSUBDRlVeWix3bUpRUyZ9eGRjaTEyJStTS3hzKHVJTyg/PGxVOlkufSU4TzNAd2tCfHhIJG4rRC97aTI/S0o2TTVvITdVdnw9MUJEQ2Mo''@;'; put 'put ''Q0QkSTloO3gofFZ9eipmV3J5cHQ4ajVONXJwTCRTe1ROWHpqOGs4WDlhJG53UEs4aDRzMSkoeiUpZW85TkZeI2JZKHY8UzU3bSw/fWhPZFMhSTw/ci8pSV5mPy9OWntBe1JJWF06dVFuUGRJY2EzY2J0PGRZO11Ydj9nYEZdZGcwPm5iOT5PPEs4aCp0Tz1jKjs7dCp0OX5yVDFTJEolLCpSZCRz''@;'; put 'put ''TFhRRFFDQ11BcDQpPypSZDlsT2RQPGBTKlRFSyI1UUNueiZqV0dFKmAoMV5tbEJgKjx3WyZ5JVooeH40WjlndGBZV2RtYWE5OEJUQG1PdWQ3RUxNRyh6WWowcns5UUI3OC9YXSE/bzVMWTRjSSV+TjM3RFA4M3lXKHkwdCo/OldoPHpJJjhDQCVqU1RCe2krNj5yeEc9ekRQOiJ2aFZ+cXhren1h''@;'; put 'put ''KSJhX0BubSxgeH0uM2t1NSEhX2F8Z3I1bTdueCF4N31PSDo7JihZZz9WSSh0RWVCMjUxZmMyM2ArdGh8a1Rack5xbzxlRC5JaDE2V1tSNUNzMmlUaWooSiNSU0NlUHY7Ry5OQnl0Q19TSjxwOjhfRjJpMzlqdEl+bj42Xld7VDRpaV5bbn0hUFY4NShRSTxaS0dpMGZsejZwOzNiS1o/OWQsJX1P''@;'; put 'put ''I313ano0VSJ8fnVbK1htfixQPStwckokYz5te2gscH13Pm16XnBbe0pQV357QHo0bStQYls+RDV1SW5WT0U8bCZ4QHtRLmwmfjVJZCgxNlp0SkBWZCgyfTtURkQxPzhUYTx+QWpoRD45MGImTzNQZVR0bD1JdkJoRTxgSVNucT8lfCltNEs9KTJ5cyIwPk9PX2I4T3Y9aF5PaCE+X0lwXjUhTmUi''@;'; put 'put ''fCx8TUVqbnhpSCp8WSU2bF45eXB4cHhwfDc7LEsmNCojODV7KjdxJktkWUVBUVVFUzNXa00iOi84Mz1ZMn50Tz1mazBoO1RPUXRlI0JDJCZkaUs9SXZNR3dJc0pXIkgjW31LZm49bGg+IlE0XjQ+NE9jPFQ0RVlNaWY6Iy5JKDNWYjVhSndSS29tRn1DfG0lUiI8RTclMExwRjVFd0J0a3JLWThz''@;'; put 'put ''ZWlIKiZkYWlYdUhCMil2MzE7OU1WeGRwOWo/bVIoZnJkSX5ZbCFCXjZSK2F6UDNdZlpdKHxaTiooVWxEUkI5OEFecHcrP1V8OFFhbj1LSEdIbXYsWS53MmYsVWleS05DKnhXfjN8dG9JJCMic0lFdEthIkNCNEBLWmJwam1RVEN9fD5dJCpSOH4kYDEmazt7LFBNYVlDQldeJncpYj91OHIoRy9s''@;'; put 'put ''dS56S1dNJFM2U3xmOkNDMCspcntlcEAicDslK2kxKmk4aEZ4enJnY2hqVHtdfV1ZaDxLN2IvMlBiWFI1b3JgfilJfHA6a2gwQExzP0kyck1JOVFtP2U5dVtCRnVeRDokVSJwXU88JFRFfl1HUykxcVVyaH0pLmFocjFoZ3J9PEd2cVgqdWxJeFladis5OlswVDEkbiwmJXllZihqJjNoO0VlcGYl''@;'; put 'put ''Z2B8e3Jddj0ieDtefXhdLn18SUVmQU46OnlWXUhaZ2ZwQCw7U2trcE5seDUhdDs/Zj94NUh9fTxiOjpuKXA/KFVLcj9zRmtaMWZzKXJGdFU2IkNdVkYrL0tDTmJnQi9vRyEiVWg+dkkxbTojcF0hVjs1SC90YWJoKUJvVyNnVmJLam11ajJ4NEVOKCJAZ2FXYyhNbHloekZKS2F1V0kzOHZwS0Rb''@;'; put 'put ''REZeMGIyUHE7Q30iMyVgRFp0OngzQUxQPzsoIjxAcCFRZCRddSgoe2tJZmEzIiMkVXNmY0xIQnt2eklWL1JpV3Jac0VoM1RaX3JwT2RZci5WZig7fnAzN1I7WFJQNykwZDtYOn08P15LKEhBYUlhclI5UEJ5PlhvY255VzRAJUYwMHZ1fTJhfT9tS05DTlA5PlE+PStVdUFjXmYvSTQqRjZ2WSlV''@;'; put 'put ''dV5NKFU7PSw3LEVWZ254L21wRGMscHttRCYyUU4uLzk1XUliKW1jWCRRQitzeFpDIyF1ST9NPyJrIXZTOmBJRiFsaEJoRlVMT3xic1FfK15ObCNROkxFTmoiYDxdO2E4OWVrcDA1LCNIc1pLbnlaZm1NX0l7Z0g1cTlAb05hdSZzTnJHZntxfUR8XlYlTl05QkBLRD02RnUrP25Pe25CbEJEeDpk''@;'; put 'put ''MERxIzt3eHxNQE07TVEpfVtTRCNyO2pjJDE1MmFCdUFQXkNiM2kmayw5VkpqTGlJKmB8STYzWGdPUW15UDhUOXNCMFAhTGVXPjRKIUlFdF87WjwkP0dlJS5Mez4hVUlCeU92JiUjandsIldPNH5WVDN7NCQlZCw6RGE1LG8laVpne3JWPSFIKFkkPU9RMXliPzJsKiQ1MEVEMTRCQ3lZclZAc3Re''@;'; put 'put ''IWwuMC4kVkoyLjdePTsrb35dWDJ5PEFjQUxmOHkmJEVeNVs5Y2hoYTxuclpDSS88RWpkT0JFZzNHbGguSG56cl4maGxYSSs2WjwmalBmL0VbdWNyYkUyM10hfGMkcDR3Zz9gVnt1fmdiRDppIksxWUpLN2doJnVPZSo3IjM3UExtPG9TIXh9dixSQjBWMW54TVpmT1hrJHd1UGtOVWEvLGlxJXFn''@;'; put 'put ''clVdS1d2PmFXT292ey8/Yzd6c3sqKUlZTk0/SE93UU9CYV5VaTl1Mlp+KzF0UXxiXndleFR5QWtrPEFRUWdYJWdnZitbXzhsKkh4QzhXMy4rXlZJRz9IQVJXUFUzLitLYWEpTClRSTFZPHV5dSVpcC5IYkcoV0VJYnY0KGt8Ok9QI2kvSXJ1YGlfZi4jKGxee0VuL0BgbkFpKHZ9JFEwUWdedXIv''@;'; put 'put ''SVp0ZWU6RkI6UCYsM11wUGt4SztjeVk/MlteS1kiKGJ5MEdpTnt9al8uKDh9RDB2MnRLMVgpODk4OCsrWjBvcEdqd3AyVzNQKDkmSW5LMllkNl9xeDFYOmBxSTVeb29RdF9FOENKekVpZWlGNjVdIy87WWdUVVM+fFt8XyRpK0lAMHNnTyZ6bH1IUWheUTMxUVpEa2ckNEcwSyZYOltga0o5OVgx''@;'; put 'put ''dVssI0ZhOG9AUzxBRH0kSDZJMEBvWWE0bEluYXBHbmxZR25bWS9dMklhMDcxTSM/P2ghTjk0bk45JktqTnQ8QWsyMTUwNTkmOXhsKkB9ckxlXj5pY0RpXzRseyRNS0YrLHQsaDxHTWllMlApW1BVTjZZTmNGTVB1eF9gRCFGQ0M2JTQpUi56IkJtVXVTKT9ebDV+T2BvfXFHcTElJjM8QltfZkA9''@;'; put 'put ''aDlbdSgqU3FgTkdOWV1LYSFwbztQazk7ITliMGkrcTgqOW52YS9UIyptYjBgOWJNNj8xUDl7cE48U0JgbXlLTXs/NTxocURKKFAzK1hlRjwrYXx4QSUqNEQ5NTVGJn04SzpKTEd1VlE8eGk7VlApW0t6R0ldSXU9cmUqND0jKXVJRURdUzVrOV9xMDgoNEVOYWp3Il0we2pIYWo4VmZiaEE6InR4''@;'; put 'put ''JG84VmY+WSYsaG9qaW5QbSt8JV5MQz8oQCk9X15mb3J8a2AzZ2EwazAhKlspdFUjUldRPUhsPnhlYHBgczVHXVJGTE9nIn0yOSg9RyEpOj4hfHRkKUM6LEhSPk0mJDJ3WGRFTFBzLHlsOUBzJiYvdFUzdnZXSk4kfGBQJExYWmFQUCNYRCwoR1hBUnw4M2JiTntwTGVONkZ7QWlSUkE6byUrI01R''@;'; put 'put ''fDgpaTdhYjh3dkd4JjA5dW1GVnF8S3U5dmxiQyNsfUh0PVImJi9INFAycDMqJHpHI2xzOy4kTTtMbmwwUSh0SUo5UWZHSV1Je3daazBmW1hhOn5IcnpObDdyNTRHfnlyXXJMV3ZYLHpsZmZOYHEpfV9DTzssWyVnfiVeO2FRUyglLDEjfHQwbHJ1dVhfRFpNaWV4MX5xWWkmPTt6Mld+JG9RMl19''@;'; put 'put ''eikrZ09GMFFpcXZfI1BoL3Y4MVppbjIxXylTJjhqWHBhdXl0Xig9ZCxHMGo7MCtJSnlRNkRCUUJOQFZteD5kK0pwSVZeTlJ3XyYrLFcsVDRmdCM8OT1TbTcqe20uPCx7VFNfbEJqNW14STM0OztdS1NXSSpqVGVCa0FVVHEyZmJafSpYUDcpTHssbkVKOGQvTGNkZ1dkazh7cDlBWS4rUGI6aC9i''@;'; put 'put ''XUYpUG1bUyNPbCsjOjw1Ki5UTT99KXtwQmAiVjZtVls1QlVYfF4rOEJvdyR8SVdCSSs2KkIvLy50OlAzXXp0Q3pNU29JZCU5WEA9cFd1LzQxPV5iKjxBSHQuQiNIV1RgODo7QjVmSF0kT0hsdjgzejVWNGEsPDVQSG18I0M9WjVuUTxhVks6V2lQTWRiPCw8aUVGe3YhenNyLj0zSyFlMXppP0co''@;'; put 'put ''UVAzZCg5VEldQm15Xnd8WnB3WzVNfiN7I2RrM0o9VFImfE4qaUZnImBxa3t6T2xlY2VyQnIuUip4UiMyamRjTHN4U2lxMzZIaWZ5JGVLWypzc3NYcDk8Mz9yVHVkRFsqd3xHJTZBLHtbQFZbdmZyJFc5eFJUKiN9YHZdNmE4VzIpUG99NzVyT2FYcT9ld0k2IUkkTSYvaS4seCRBZURfLjtxXzpl''@;'; put 'put ''KUNsTD8sXjhuIXwwc3Vxe2BKKmEpb1BMcCZlKnk/W0hYXypuSVBCVn0xMUtAO2slQW51bDw5dXN3czsoSmYhSWREO0pkRGJGJVFvYS9EdiR5P1c8MHAweigpMEZdTFg5XXc5X1cpY1dnSzU7fGw4fWk4UlR1aTA+UT1pP0loan4kcGVfXmp8bUIqc2oqSl5pcihWVkdKeTBkXyNwYEcmajhwSVU/''@;'; put 'put ''MElVXUwlUkNlTWUoNWNQW0dpMyFxeHYoeWQ/UllxRXk5P2MiKUZSd2ArL3FOLDZkVmlle045YkozK3xMfFgmW3hsUm92aHc2YCsvIVpHVGIpLCg2P2J4UG1bKll6Qnk+S3x6X3peey5uWnhgKVZVfSsvTD5hKFVOa1p4V3hJXklgVl1pJCo0dGo6YmFyezJUMDw1LH06YmFbdnU7MUszLnY7UFla''@;'; put 'put ''MS58a2hLSGVMbCVJMTpJczR1REswcz4hT0N6TUYsLyhZcX07JltGaG9BIXxCSCJfT1NlR01dQyFFeSF0ZVZMZjcsZk90cGNHSDxXK30oeD9USl8pMSw3T3RQaEw7ND9oVDghODE1VDhHekVgSWhbdHNFKEt+OFt0QW8uYVFEKkJWNSZmbWZiU3BKeHooRm10XWtQK3s+UWMlRkMiaUw7YFpGU2l1''@;'; put 'put ''bn1MSVRSQj9XcSMlPzNPakQhKCNZS0AyW287Z2Vjdz4+QUQ8dGBRXXE/I2N5eHEkNVpCa1hQel1rT1pmQTo0KkswQzJWXmRULEc4M0tuaz8mNCxBP3tmLkRUP35xPlNQZ2U4bnFzd2pYY2YuK15xPyMxSFdHZm8sR3R0KjQmZkp0ckxdanRCb3VfTDVbMEhJUj8yMWt2RGEyQW1peVBGS1NNRXdS''@;'; put 'put ''MWtCUXhadCtPO0lHJUlOdVI7MjhzZX44OUIrKE1IMDMyL1R8cFZgZmoicVRpQ2VYRURUOWl5IjBoTmR1LyhzSUouO1t6cXE9WigyO1RWV3U9PlRxeUs2Q0F3XWs4amNMeE5wWloyS0NkQjovJkE6WGYse2RqLCJgQTQzS28/KEslSUR1NXpsZzpaNklFSCQzOXRzNnBbZHFoUUZOOiRmckZYYGg2''@;'; put 'put ''LENaNmo7SzZpdiVTJmIxZnIuWWgqbFMlUGpefEM8QHxoNHZ1ZW5UakQqSWNwaUBZUXE6cE9tRihvR0Yke0hKWjphan1URXJtODNYUjYpMEMqIjJJeSQuYDkiMjczTXcsY09DfDt7WyZQeXpCal5aQlEvcmZQfkY5K09gJFE8S1RaOjIxVDtVU1ZeKFRsaFJaPls8K0hzZDlWaFIyKU49Q0RNYW1R''@;'; put 'put ''VzE5U2xvRElmVmZOVVY1UiNxPTBDXmFGclNqcThZPk0hKGFpdnFROCN8QGEiSVJZLkM+NGZzaXcmW3FWdDFzJSY9dXM5YG8kJS9rYCNPWTNwJihwJiVMcTJsa0toO3d3Q18oNE40LG9NYXNmWDVfO3loWiU3L3JwZW42R1p4XkNifSQ0S141dCM6PzJzbyNudipoLENnNFZ8R1ZgYzZ7RnBAMCs/''@;'; put 'put ''MH1ZaW9dMUd5QHBCWj81cik5QlptXk5pYCFOQTpETzRQY0NTNz1DcnYpcnYyUGYyRjk5Onp5MSZpcUhHVl1UdGZ8UUQ1PXI4fWBAdHM6blpXMn17NVZ+MTA9Knczan5RSj0yOFVBNSY5MGRbey92Q3Y8Sm1yREVuPSJCRG5gdyFbQWBqfnQzJHg3MFgyXj9BWGFkcD4iNiUzOUBNP0A9PG5QVSt9''@;'; put 'put ''QT9eNSgsbiEoZHU6dXFeaGBeez9CKVJSKTg1U2FNQFo7P1c8OyghcTA8SHVSfVdSMkQhcyFVaT9AMXgmJm5DV24yen5zZHF0T2pLJVhleSEpXW1JMkhLJk0+O1ZgamBAfG5+aGpuZ3A4VSt8LGNdZ0ZfKFJSeU48bnUqd0A7bTUpbTZmYUhbeXBwO3pKXyRPYC5ifkFUfEZwQCkzIj8qalJjPDxB''@;'; put 'put ''aDFQX2dLJGZ5JHxsUX1ITHojOyQmKVJmSXJLMUV0ZWwwJn5wLkc+RkJFMyIqdk1RIV03Zn1Tem9wNSU+YkU9NT05Rkt0QCxnY3VZM3s3fXlzP3I5fUhkSnxVVS5HfFFWaXtDNT5eb1t9U2tyRTVWZDlAKmBfak9oUHFxUyxqaCNIT0BEZVBTV2xCJjIqaD1hOWpPaTgoX3lzMGgudjcwVTZvcjxb''@;'; put 'put ''PmpyUCJKQHhyS3lwfjA5Pl5ASX5oPUZ8YzVWQ3tAbDphNnJTK2AlNkBfcG98SUB3Vl9YMkBxLE57XywmXzooMTB+LDsiej00LjtWQ0xadHtUejJ0Xl0sc0R2Uzk8PV5AfG5TfHJ1RCZbT0phQEBHNXFmVWJDTnE/US5pT0YwcXpabG5aUk9AfVpONVdEeS8hfCRRUDNCWVd7U2JKRWg4dkhpQGBF''@;'; put 'put ''XjBaYDpTRzo7KF9tbjtEP25afntqIX5sNzNGQEY+WSJKbmQ4U0FAP2hfP3h0XWx9QS8oWD9gOlclSTpMcjRnZlZEYjtkZyhEa1dKOkU+OTk+Sm03SUU5JEUqfShRZ1c+anF+Pl5nOzV+MiwjXigsUzM4IUUrP19pS1t8SXZkRD1vQSV6YjA5Im5xWHsqKlVtdDVlWX0iZnAxLixGfGBWXj9bZlFF''@;'; put 'put ''IWoiODZPcSUyMHI5Jjs/XVVdVX0zZik7P11ucCYlPmdvOV9sbzlnflQsTlcjLjI9XUgjTT8wJVl7WVZeUGA4IV8uS1l7WXRMcEBAMDAwOkxoekRiRHdGYFlrM3hwTk9YdUAlUjMrVWY0K155XXFwPncuQlZkZn0qXXZ3RTZHTVNKd3cuWFR+LjteVXZQYD9WOXtlWzkzRThuXihORFp8XnMlJj8p''@;'; put 'put ''UnU7aWFNIilyL0gjM2ROJDh5RjosS24hbEt1cikiLCpNK289LjN9ZiwiKFJiRDteVngmZiUuZUs8cEEvfmVvbXk6bDlvZyxuandteV1mLD5+KHZjRSpLPipbUyVQbC9ZZ1l6R25tTkpuaj50MWh7bl97OHVsTjlDImBfYFB1cWtfZyZJcHVxWDg1bmk+VH15JW9UfCFWQmFEdVV8fiF+P3s6LHJ7''@;'; put 'put ''fWlUQiEyTTFoSnhTM1ZhZCNzIkw1PnR8ZjY6MUduZDlPSkVKYH0iMW0/LmAmIU0+fVJKdn09NFdXTjVRJkBeeXYmVHZfcnt1QSxKbyNnYFphQX5lVnNqU0MrKjVDUV17PS4sckolcWsyLj0pST9TaSYyMFFde11pc2NvdUYpWz14WCUxdUh6Tl5zJVVjYnlwLHNgWVEpLzNKXm4zZjdMPislVzND''@;'; put 'put ''UkhQRzA2L01gYj8zUjAvdkwmSSQ8IjQ2LzN4JHpsI1c5MGM8S1EzVjViaS49bXtTNTYvbG0jeyp0JHtSSi8+KnI+IV1pMnUpWkxuYn5BSERhPXJsUztoUjRVYzlqWGF2Om0jJTwsaypGKENwWG8mNFBHQ3YhNkRDI0F2cjRNN14sRDxaO2x4VCplW2xEPHU+cW5jZVlmbDcqJXRbUTczRk9TSVU1''@;'; put 'put ''Xl87Q1o+Pjo5dG1zT1M/JkxkJkBzcDlyTmFQRVRtb3l3RWRkK1tzU3lTPGchdl0oLCUiSlR8KishUExjN1pmVmt4Mzs1IzVxTW9TYyhaUjFaJSY8TShfLjdpODArPCFQLHshO1A2QzpBNnlnK0srSk5NbEhVP1pJXi92TSpkSWE5UCpPUXs2OlA8P0tQMWhbWVh0UFp6M2Mwc1F7bixbNiNRLn5Y''@;'; put 'put ''eWdFRWYuPEs8ZEE9TVJ0Qlh9WE9HZGk0KHFWTXV5enk+dkBRIk1EeDdxWGNKJHpgNVVkaUdlR0FBeDJBQU1Pe3kmaWJDWXg1SylXUTREdF9DSDlZaEdiUjBCKy9GblJBTWdBQUFBQUFBbkIkQUNmYVJ+XUdoV2subDghM0dASX5vPEJqZU9PSFQ6VUs7eHhrPnBrKkBRa2A/enw7ZVZ8c1s+LnRE''@;'; put 'put ''P2Exdit9KWxHNW8heGQmeUpbc1IlKnh3Ojt8ZllUUVM1JTpFeG1+P2YpP2w4PWIzfkNMNFZJUn45M3ZJNncuVzgxVXZZYHY1V2Z0djJacyUhKD0/OkgoPmlNJWozdG8mL0FCU3RzdS9UWSFDVSV9N3tQaDg9eiV+RlJtVS42JjA3U2x6NXNERD5kKU1nLDQ0aChzaSJOcmRSfGxucyFec3wyfGZw''@;'; put 'put ''NDxAWyxRXixRV3YyNCRlR3VpJVpbaltPeUZWWClSLnZQY2ApPWkhbDA+NiNzKV86WzYiSlJ0YzVQdFNdLjtCTy9kV29KKj1VRiZjTDFzPFU4W3JMW3NPPk5nR1ZrVzpOODZlWkc6UU1md0xdY0tKNWsiKF0hWnJ7XyJDamRBQl9sOiEsbCswQUdUI1IxcE4hXzJOaDVwe3FiWl5+KmolNF96REJJ''@;'; put 'put ''aHg5PUVFT1JkNnVtLjZ+TCp8bHxwRCNdalRXS05xSkIqW2p+QW47RklNSWQ6Lmc2UUlOY2VTbX1oej1acWAsTXR5enZDUk0uNEMyeiVKQVZBKSFdK18vZmpQaXk1cEQsJiNraTooXlFZVF9FRkNUV1dhZVBnOHA5L01DZ1N2Ujd9PHRBSXs4Jjg0MWs+dSxbTDh+PlQlLmZZLH5xZFI2O192cj9O''@;'; put 'put ''eyVgQ0Q4QEM2S31yVGZiSWt1SyU0SjxbeCo9MXo1UG5neWJIZGY3YGpuc25DTTpmYjNmSWoodipOaUZAMTtsLGtGWig5SEQ+M1Z6PyEkTlMuaDRQR18xQUVUOFFTeXNWVV93X0lBOjEzVzZ6eXZIZXpURm9LJGltY1BVOkBMMVF1Lz9EMFRuU1svR1ZwIz9IWmlgdVRFdTcoaVY9ej1+QFljQllO''@;'; put 'put ''PVZvdENaKTNhM28mLkA4WUpZIT0mPklJWVUyPDlLZUpOZThbXmcxIzx9K2wkW2Y7PlBpYURAfkdae1phTnl3dF9UQ0VhYFVWUHMlO3dkWFZwPHFnbSlVfWloMmMqOmhpMVg0UStPRDtsJjxhJTokVyU0WXc7dUA9OX55YTBZJjtOLGIpfHhxK3pALGpIIX19I1U5NyE4XXdydzUjU2d8WitQVnJ1''@;'; put 'put ''REVYV15yUXMheiY3JGhOdWIjTS81MnEoZis4fjRmZWlta2FsMGxbYDEpVzFmSEM+UnxHbEdgU3l4MnwjPXdKWlladHRCS3ZYR1BKISNnT2k6LDIjKm5YR3IyPkptLG0kIkhsK3Fsby80Z0Jmdn5iO3pYMj5PPGJLRSFae2NpUzk9Znp+PEdieXQ1VTFpP1tiYVRJIik6SEJYYk13aDN0VSxZJnA1''@;'; put 'put ''ZSNiLixYN2dyJmszQnVycTUoY1tzKylbTUw/cUdOImZoSjUxMG5Bd0MuWFtveDVCVW1uN0piQmg0X3oyWmk/Q1MlRVk1NU1LW3Y5WS46dXUheTJNV3MxQl4vdHpKd1IyeGw2fUd1X0VGRlFRPz58RDR2VGt6elh+RzlaSl1OaXErK1QzNnFab0ZkdTx5LHxzeWhfQyR4JV1xKiNfJHp3M1ohezhv''@;'; put 'put ''ZXNwJUBxZXZmcSIwU1lbXldTTTtLXU9zemVaNCNUW3pYOklgcDJQQmJkY1d6KDNuRF1xTFdLNmEwa2AwNSN9SnNAT35bWmJwL25FJVhleWBAbkk7aHBlLldaaSpuR1dKInYiKWI6aWl9RTAwZnx6OngqJFhtdS5bd3JpUFckO0o+QkRPTTs7NixIXmJoezlYQj1MOyFNcWZJYUgjYVNhW0BLYkww''@;'; put 'put ''TCxtfDYsOmdvS0w1PVV1VylCW1l3RHd1K0R3YGRgU0luN0tNZFc5Q24lIWxoRn03SzRWQFMlSkJoUS9MfV4sOGZAMVYma3k7dj5EYUdXYm89VFl8ejtRdmNQO3QwRn4/V2M0XTYkM1JRJmh1QWEkQkg+fGFCR0ZANExjJXB9SWs2dmU/W0duNHdgLiwmaVBhVFFpVFs2I3UjfS4rT21XOUgmPG12''@;'; put 'put ''S1RkPz1CPjcrYWYse1MuKmZ7eHZiW288elAmdU9kWzBZMEFlI097M1NhYXFuQUNfLDRXKFs2dX1WQURISiMyZkdNYVM7TUZWKWkocDYmQzx3THdNQnIvVHdFSCUuOkNCbml3QDxkNEdRKSQ4UigpTWtSMlpIbGIldHZ6c3QxdWtyPzcxTGBHIjtxXnxUbzZKazM+UF0qdS9tcEMsWlpyWiU9RChk''@;'; put 'put ''ck5mVzFFOUkvSTA9VHtpWE1JOW1fVHZsU3dtNmUuYCxpMyJAUT9ddjdQUC9VUFlrPUNQIU9AUnsiRnRmKXxeKiZkIXpqX3BbZCNgPSN3fmRvJlI6bDF+PTVWXmw/ZylyfmU6OmJaLzlqXUhvVyFRKV5ENn1EVCRxMz8yfmsicE11cGVHajs4ZHx8bWNhYF5vI0Qsemh4PXpzfDhCfWpqTXc7Iigx''@;'; put 'put ''fjZ5UEJbcCEreXk8OjJxcjh+QyJlTFRLZDxBIVNWQDhVMmw7PV08KjUvJUZCWihLbEVfTyNnZGJgQ1Q0cj9eOEtAVUYhTG8ueSUvYz94U0o+Vmp7aVl4P1clKykuMEM8WD5BYGtPa3Y2RDN8Pmo0WTJEJWc3ejN0WzppPTd7TmtwM2kmK2wpW3JkV2JEbDRzdnJgYmdRXkpmVkRUZ0dydyprc1JE''@;'; put 'put ''WjguOyNnTHo+ayFFcV4vPHFFU3BXKEpVSFQicWRSZm90P35HRzR7aGtuO0kjdUVdZF9kfWd5LjRAdnh2cWNhOV90UCkkLHE9I3Z5X3QwUmRzODRsNV1QUFtNJGFxIl47Xjc5Kk1Ze1FoP09DNllDX0VvI0cheTUqJnF2PFRBMz9nLkM9eGFZcVZTelB+YzdGa0pSLmQpPSMrRz0rMFozN2M7cmZF''@;'; put 'put ''YlsoKzZ+Ml1jWjs4eSQ4a0YySzxsdzY6b0VUS0Y3fShJdVB1WGo0IlBifiFNYjdDTnR+KkgkWlV2cHQzdF5KLl1IQipETj1sIWIhMVRXNnl+ZGV5eHRNYTFebz5qRz4kKkJee3l0Z0FDIXdVdkJJek1vdGIpfSMyNjh7blRaVkZqL0hHJDZ6SCF+KTs/SzcwKzVPdFFBWFZUVSw1aVVULy8vJnR0''@;'; put 'put ''IkR7ej4uU3pES0w/Ol9tfnp8SV94LjJ3RkNsYTx9d1FFTylGI20kcypqZnB7KkIqNyVvTy8mWzVQeEFteGJCa2gjcTJzSD5+RUd7WVdhRkk1OyloezRdQHxKclAoXlJxSyFqQHxjdW96bGQ5Kjw7N1VkUUUheE1wbFVrc0NdeXh7Y29nSTx5c0haMCw9PHQ3WXE1TT8iMW9ZLnhhdUtfdXB5UDxl''@;'; put 'put ''MiJ6Pk90bXw4anZ9dW1KUTN0bl05eyo0d0JYNShqcm5CeEM+aDNNJGsweUM/OWkiL2NlM2hVWFtaQ04qcG4jK2I/U3teUEYreiJKZEVCRG50I2lCZCg7dkMmXlQ2TTFOYyVbaSRBbTRqfixaUkM4bzpURi8xS1VNJTQzVipraFJ4PUBjfEY7L3BTdEY0PXhpVVRwfTpxZV0iakBqfkdPaUVeW1Y4''@;'; put 'put ''Xl45YW8oPXIqaEV8cy85fHpXdy9gaGYqSjdPb1hXNTVgdi93UThwXy5zczxdMmEuQHdRMDpMJXllTTRNaSVvbHhONWpGR35uNFNuZUpHfFQxc2RITz9dR1pkU2tWOWdxLDJPdiI3RU8zPk9CKyoyelkzXUNXZlFZS0BCN2EufVNuW2wyZCM/O1A3N0BweFZnOSQlLFZhdT1uaHxsOXhlRm88RmRg''@;'; put 'put ''QmZuOENoTmBxUVo6ezk7UWV8a0V9dD8iQXohUEBDUz0qciFiNDhibkhGajVvdV10emRVZUxFez12ZVsoelZtVnN7bTBQbDRJeVB7IlR7JU52OV8rOypZYGRqOGEyNyswSFh4b0xDO3FIfisyOTM2QWcsQmRGckwuU3E1YHdaS2FDISpdS2syOzRMPytYdHokRktJaW1vQCpZJEZTcjJZa1hrYi9o''@;'; put 'put ''Lm9WN21vSWI2WWZeMlZeeFR+d1UyOjh7Y0siMDQkZ203ZH4hRiwlPTdCRyFNSX1WZ200LFZ4eCssOXJ8Mk8pWjtgazsmJkMqalFLPyssK2dGcXAuXzQwVFdgYlhAKypzUkkrMixVPzR8Sj0rQFZrcF0wJFNbYS8+dGB6I145dCFvbl1wUkVQekRPZzowejxlIS5nLDhMbHNgZm87T2p+Jm1iUEFi''@;'; put 'put ''c0xzb0ZhTGdFRHU7JDdRbX5LUFV1QUxWT0RbR1E3VE5CSUhpaThMImdCL0tWIlpJbz13O3I/Ujhhaj5fRzxeQGErTHs2Mlo0KCoueFNeJkdWT3kmREM6eCh5KVQmQlJHcD1uRHBEPUR+PkZpekNSKiU4WEMmZ1NQKm85R1N1endjJj1HaTJiI2YySFNxKmgwdT9WdzF1SitBKGA/biRdY28wK2Rt''@;'; put 'put ''NHo9fDgrU1kwUiQ4Lm19cSw8cDN0WWZreUxAbktva0pEaVlaSyIyR10oNSVOY0JjeyhmVSphQ107d3AyRiN+dX48LlpedjspTFA/V1UqPHR8TFI5JFVYalpWbyl3bWZIL1JzeiRfPnk8WEZTUzE9b1peN0JBJHlfKDRqdkdeWltqTGR+Ty81OD42KFFHQyExKkx+WFZHN217MjE8YlFQczRtM2hW''@;'; put 'put ''P095TVNgfDhSOjEvKj81QGtiVlAhWyJBZyI/Wj9hZWNxW0QqL28/O0t8VD5hN0UxaTdMNGVbJlU1LEZUJnAiNj5oTCJdblJ6OiF1P2ltUns2cihAIl5WRUtEJG8scEdsSFtTWFVSckd+M0lGQmhIfUkpZ0Q8TXBGVmcpYzYkcS4vOWQ4JT9wKjZKXihgdj9VaFRmJFdaRn5sbVRiP1dlSXhzJGpZ''@;'; put 'put ''QWZKOj5QdWNSIllFWkR+KVheelt4ZiV6QUlpaVp9I1tTdSNSXntSNVZpYj8xd3Axe3ZbbXZmIz1AYl1dcztzYntaJTNGQ1tGIShGL2J4bVtRUDxJR0opTFtRbHA5bWdnIXVkfF1tQG1oeyxNY2kiVHdpYUR7K0xoUEgoaHFdYUpycXclYT94Rm1XSkdSdXRPYlsoRmkmOzRDZiwqMmEjMlFTPDFX''@;'; put 'put ''Yl5EbiNXZmRtJnk4Nk1FL1lgNSxqXlh9eDlCRDFPTTJbQGQ4KlZNVk1rK3dsXigjQ0l1cSxINTFRQGRtL1FpNH01I1Y6PDdRMXQvS0s/JDJFJlBWS0VGPFlAMWEvSGMySll9S3V1NmBkLElaY2F4QV1IVWYqPEZiJHZ4SDxaRlJ2XnB7emxqPXZkUSNvbEk9Unk9MmsmOnI4XkJzUyZkQmlSZ0Jp''@;'; put 'put ''ZH1hJVhaO1NnS1Moa3dYUS9eak1rPjB0Qi5jX2lZWGl1Zm0wOWkrfks6JnV8UWMkbVMoOUclPyh7MzpIWT15I0N9eXwxJCE+X0NJKiE1IVd6WHQ/ZUhseihqL0lMZzt4P2BRT3BUW3lWVzwlZ2E4RCNsX2lmOGhgdGEreDouV0VhX1ZBS303RU4kV3hbbmFsX1tBQDwmVlpXUzgkX2x0enw1cUdu''@;'; put 'put ''flNqfThaR2QmQlpdX2ZlaDJOMChVcEplKU1zI0VAZGlzcm1dPEB5cGBOaUVYZ3VAXnN8L284QWllL2NsVj4zdU98b1Q5NSRib2Ipenp9R0M2e2R0bzx8cDteMURjJHMya3Ykd2ltfjVgVUApN01nMl5lVURSLk5JOnxXL1M8c2YqSmhLdjAwaE5oa0NYU0BdSnwjZjFSUHROZkc8OGZ6azAiKj0s''@;'; put 'put ''WE9xeHEqTko1NEkvYj0xOClwa1BZLGh9cmVdKURwYk94KGxkI1BtSUR+PE1lQnZIQjNCfTQrbToueGRIQlNRQkpjXnsvdEZObGA/eCY0clQxV2MrZGIid2xlQFZKTz1nKV8kZnN1N1JSZ2xfY35+KWomIWUoUXhnPWFdbElQUTt5JH1uKTYhVyI4KFViWHZsSU0+RmpoKnNkQzFlcCV2dkpoUDBD''@;'; put 'put ''e0V6JDtyRytzcXE9L2R4XWxlRVYzJkM4YjtFbiIrd2o2TDBCTnc+RSJKNTpRRUFMMCVAbHtMLn43SztXTmopPzFdd11rWWNvKysjNWRjVzYrYncvdXtAQDBXZnchL2VwOU1rKDBudXxiI09uemM5ITFTQDg/NSxhSj1aZVclcU19KXJRMntmOjxsa3RwbGZvQyk+YnJyMG9kNVdEVG1ldGhWYnlP''@;'; put 'put ''ZHU7OHhzdixYZ2NSeTBuZmlHQnhpbUJDJiJCcF9sWmVSXk8xV3xtV0JiRVVadlN6U0lLXWhTS2IxQDpJdExmJH1lSTM0JVRTP1Y2elNRLF9gVC8jT30/MldbLFE3OCIxOF4wJmMlJWpTLC49bFgxPDlnNjExa3hKb1RiQ2lEZWZDUCVTTj89SCFbMHxUYnkpbWBDPktVPWJLcndOQ245PVpYeT9m''@;'; put 'put ''JiRfeUAlJDthUz48VG5XNXVjRVZNe2c7SGNhLDVMNVVqZHtoYSJFLnlHci9GR2NHZlZIXW0ydCZBO1lnQHp6JmVNKlZsIi8hNTpbQkQkUUtwN0hxNjExNkUjaDFKJXMzQEFnb25GIVFtV3BwT0o8aXg9d3RAPERdR29OJSxnOjNxcThnZDw5bVs6LkReRi5tdElqLi5SJVs2fFpMKX50IihIelh+''@;'; put 'put ''WnlAMSQ8XVh8WGBVVEVWMSwhPF9Kaz1JY3c2ZG1nc0csa280RipUImcmKT5lNiVNaHBuISZ3TFNBfWspTWpXYGo1X25fUVlsRyEqdVRDRjVtPjhFaShaO3ssNnI5ajlqd2paTUkpcS9+IypSL2ZmZE8+UFdsQFhKfG45JH1sRjA6NmE3SHlJcztqZncsdGRweXRMRE17Mz1KPysmbFg3W1d6Y3B1''@;'; put 'put ''c05JeShrez19On5kMylqcmJPe0huaD8kZFQkakwjcHFYZCEhTmwvKm5BY1t9XyphV15qfGUvQmBPbD1JY1c/Mmp+bEQ1X3Zncyg/TGJvMTBZV2t4Y0p0XzxbQHpJWUhlIUsqZ09JLlIhYV5uWV5JQlVwMTxCSCRJPE1rbGBIRzdjYjNAPjlPN3VQKEg2a2Y3MXZJfHJnVEVlQjJ7amxkM3ErP28o''@;'; put 'put ''LG0yVEsuXX5dQ21PT2M8OT4mLzA/aF47JDhndCI5azBRMF5OP3lhP0JDTU4oL01dOm19KD59ZmVlUVV0YDJYQCNzaz9KOk1iZHU7IXBmKyY6KSVTel01MjdxZE9vc1gycC4yO1dJOVBkfDhrWixORCtIVlYsc2U+OFo1akYueyZbcis/KkB8PVQ5dHpkNSpaVGNOWWxvVjZtb05hNGZkO0JHPiMs''@;'; put 'put ''cSJzVj1QIkhTOXBUP0ExJGZ8RCRsfH1+VS40KGdbP1VjZUFYW1JkYnZXKy9gX05uQ0BUVS97ZTJ3XV5LdXtAcy5BV191ZnpdcEQuX1JBOm4mSnEiOFEpbDdgZVRmMUMsUyJFby9hMHNMUi8xNiwyRU53cl0pMGpNNE50IkBHKyR8IThqW2BPZ2k/d1tCO202JkFpXToyfXAlbmpOWV52ejp0T29L''@;'; put 'put ''KFdzN1JOTFpwWmg5PHYvb059Ry4+WFFLbWlxbj1Uens1TVQpZH5rSWVtZG1LcGA8d3E3IzlRJkVEbiRgPVoqWV8kKktFPFN2YlZoIyh1RjZpdipnSVFQN35YN0EvUmA1Y3wuMWtMJF8qL3dkOTBEeiJ6WDB9S1VrOSFfbjwqTWg1PHdSZFUje1MlSGxBPiF+d0RDTXI3a09yeWYyV3RybjQ3XWJ0''@;'; put 'put ''PVJpWklpW1h5KmpTP3ptI1dGSyx6I0o7MH5+Wm1JUWhiSjFPYGJVOig2RyVtdCQqNiwrVnd5YEEjW3doVVJLMl9gOV4rSHQ+aVV5Nk8qeGNqTGc6KSpeZFR1MURyKHl7clh8OH01JFVtQS5ifmtmdjZgYjtXcTZDaHY+Z1hzLixUWSFzPUBKcXBZWiVfJDN2UH5ORj5SS3l4UFtYQXlnZEdpQmZF''@;'; put 'put ''PTp+ekBMfHNfODIkJmNOYDlKOmh8bkNnR0Z+PD8rSSxWZVJTfGApMmJERm8qWXc2SCIiZXlyTmxWUUlZTyhFenAvYjFdSU1NVE1NQyR6c1B1bHN9YDpvPj4/JGoiOWAleGQjdSVRNSpQTCN8aW5NYktraWk5S2EyW14qSV8xKF1Zejg4Vm1zIUM+RUY8Yk4pWl5bb2tRcSx9dTJqTXJjVCVtc0Yi''@;'; put 'put ''Z3Q3NFB9fTJpR21hL21CKWNFM1BAKWYhOF8hZlZvTnV1cHI6WW02WFlMPjh4Wnp2PFQyUDQ/ZHV8fmM2QkZwKmYpUl9YUmBiRkcic0R1aDxmczIzfEQsbzoqT2xORnMwV2YuUl1mQDxpUiQ4ejVlWGVrYylAa1g6bUBXalF5T1kkSyNBMip0MjJMdVBaUXg9ejxjMXclKjJsJHoudiUsUylrKHxm''@;'; put 'put ''RUshTGIrS2U2TGZ7VXErVDw1PSNKezBvOz1APCphQHAuNE1PSUlJOFIzOUxkNUhsOlo9TUMlRj0yMyFROys2IkVPUD9wdVVsRUhhSVZQT25LZXdvMGdvRCo8VVppKHNuV1cxMHNTfSxMLitTVGlQSnVCLHkrVmZAYXJLJk1HT0JrIS5JO0JCMnt3ZmRjbHhWPDBMT1tgKnE1Q0N1Lyo5cCRJMlt1''@;'; put 'put ''UiFGWS47PTY1YkRBMi47NzYqWFUuYVQiVF9fc1REfitneTZzY0RkSEEqe1FmdEFIRClsMmFOO3M4cmZSJUlhV3V4YF4yPUxFP2oueFdpQCJ5XkVddk04RyosTiRuNGVLckU/T0ZLRmtTR0FVSXZ+K1VGeCsyVDM8QmpIJWIyVT9BVGxaYVJEZnxaIXYxdmhvTmJHYlVUKU5LV1lNRGswazU/amtt''@;'; put 'put ''LE8oa2F0QXh2MkJYa2chSD1IeHlOI20vPXBFQn0/SWM0e0ZATVhDcVkwYHtvQy8zRXxwJW4lYUBjUyxJJHMyTXpxU0d9WThFKkhjVnk6NUsvVHhGL3Q2KXpeJF03YEdifXNKWjAoaCtbVUpSQ0klVl4qI19BRCgiXUJ9WjZ0QDoyTW0iUlZMRUwuXXNlbDBBZDJQfF9uXUFMVyp6QDRFQih+fHpg''@;'; put 'put ''KjsyRHQuRHl2KnNPWmE5VGhFNVF9R1dwVD43fVtIa0M/amQ0en5nP2p2TSo/Z3ZHWjxSfHkuMy5CLE5hMXI/NTtWL1FyUXQjKUFfRGR8PnxuYFl3VVYmX1NMJGR4TTkzdUQ7OSNCb19RW3MjPyU3VSNFU30wbk5dQlhFVDJrPHY4Y3RGNkIwKX03RGpMXzN+MitDc2B1ISkjUyx4fVtxPy5oYGlC''@;'; put 'put ''R3U3c2JJdGM9U2pFYHo/VjghI1lUe1QsPEMuTCMyNTc4YF1WK1tvKy9AfGNtekllKl5MOUtiSy9UMHIzfDpLcXUrSVhZP0cwTGZKYGB7K2tUWW47QVQwb3hHMihDKjokNylJeXp5RDc1UTdDUitAOlEmaTtpRSRgNkIyelgsW1J1QSlsWi9QcGtVVSYjKk0zfiR8enxvZSpdQkRKWDxmUyIhP2As''@;'; put 'put ''a0NGI3orOGd2WUx8SjgqYVVVdmt6eiNvPEtSQ1ZBSFk6XT87MyJLW1ZyQzdFNmJhfnYqZC8mIVN8OmdGW1FlZDYvS35jRVBCU2MqeHsoeGxnaiZSN0BXNzhpIUZ4S2YvNjFxTnlYS05CKj9WNGFVZjF6WXYoM041UGB3ZCEsWnNhYyNRVCh+QzopJiIrOVNnNkBZJHhqR3RWbllTRVB7e3BLL0tj''@;'; put 'put ''MUg9Ljcmb1IvbDhqNVdlSzROMXwvfnY0STN9bUc0Tjp8P1NuVE9PaTBUZ1duL30qKktzdTo9M0QjPlJdbkYmTkwxM2JwTU8hWkU3aXBDZGFmInowb1s1X2F6PUZ5ZFI2Uzl+LGgkbEJWISx4JXczRDt1JDY4dnsjdWIiIWI4Znw3cCNldjNmVTQlbEdmWHZXU2d3diFZeGA8UEllcCQiclBfL1g6''@;'; put 'put ''Yjl+LHw4RSYoJmhbW2VHUj4hfDt+aT9AMipMXmE2SyRpfCNyTXhHVHxbPm5IXSltb0pWQiFZTkl5Zn1fRkxNP1VPdSR0K2smc0JuQWZ7ZnttYmU4Ul1uKj4pKWFHKF59c1VYdlR6IWsra1Vkej5kW3R+b1Z3V1ZdTFFxOGUpdnVXPno1Znt9WXhlRDk/IzwwMnduQzplTTBIPXoiX0cza0dORTpX''@;'; put 'put ''WGYpNVRGOXh1OnRZN2YlN3lhKyxWb0t9R2hfdGZPcGBEXXRHIVhuSmhqeTQyY3I9OHAlMUlYdX5yTFBWOz9zbTBeZnh6SXlvRXRiR2d6a2kvfHxRWDg2Wmg1YTVDa0xUUVBXVD56O2laKi5UQlgpUkl2I29lW2p8fltSKEdgT0pSYWdfOkskN0xjQWQwXjozMypjPkJTeTM6bzA3c0A4RC8qLlcv''@;'; put 'put ''Li4kL006VSM5JnhLRUA4VCFFMzVYVkklPGFEO0pAJixVbnBtTDtGIlNlYS5xYFIwLkFJWSZgSkJPKSZ1Y0N9ITV4JXBDO0t4aiglXXYzVnAlPCo7ZHFHc2w8dXJ2Ikh0UUZUcSlgZDZLSitfKW89PXs0OjZLSlIvXnU5a3ExU31nJEE7bmV4IkE4dSRvXlo1RiZOfnYqblU8aCpYaVQ1YUowaEFW''@;'; put 'put ''UjFXSHZWdzlHfkUjfTpfdWVbSCoiYyNSUlFEViFAS3pHTTBgaV0qcXJDXi9lXUFaTGAuRCttQVI7PEhddFhHcE5eTjlocE1acWIkTHNoNT9UO3I6SEVWWEU7eGxnOm4+RzdzIT0vS2IpZWk1cm48YmxvKS4wXytyPmlrK29Mci9yL2swUiwpVmZaX2BGeFAhJlNmVWh+I0NeZks3Sj1faX5FSiI9''@;'; put 'put ''YTRpcHY9R09nN1FKQyUoRj1xbkVTelJtLFc1O0trYS5oQEkuezQmI3REPjAjN11QYil9XWleP1VeQT1JVHM1Y0Ukd0kpdmJrWE9scmdyPFhwLn5NWF4rYHxbUEt0Q0krS0Q7Pns7Kis/PUI3VHtHPkk0ZlpFJlNfaHltfiIybXZ1MiYiYFRkP08uR2c6O0NtQGo2cmh0JEZ+QWx8VF9ZeWsuZ1lg''@;'; put 'put ''I35KXlR7RCp7emYwZiw1M1U8YHd7YG5mXk5YPGdIMX5AX21BTFR2fSFSKGA9OF91QkNBeU9fQylsUF9jZUojWDNqX0UlTERJb190ayRyb09NTk41UTtJQDpYMHRnRjd1VHZ4fktPJG84WVpWZFByYCheZlhtc3k9PFpjTWNVWUNDWz5bOEY+dixlSDNeTTtaQSp1NClNRjdOcS4pV30yWWZKIUpU''@;'; put 'put ''bywoM3orUHZpVCs3aH5DVFVXeyEqRGleMTZYPT5AdCg+YGwyJFpsc3BfI1s5RUg8PUpWaztwVD9NJHNkfEB4dVVTT2BPLm5+Oix3TXN8N1F3LyQvMW9fOCpWSCFFMFFhOyhSayxfSDl9PWtKSV4jZFNiZ2FIZk5HOWcvYkUwPzNMYFdJL2tCX3VZJG9gdjl3PHtpS3VTdSQkOFM6bSlFM084fn12''@;'; put 'put ''JmRAcGl+SjNPKX40WyJJTTlpdEVgdDh8IVsyNUsrITU8IU1aXXp9PyY+OyJ0MDRdI3dLIWouSTIwfH1gWGt2Rz84MTlqcGNnU184OkQmPktKU3AhYDo6XTkvKkt9TntDdjd3dFZdLkIybzM4bHJ2WkEjM00hTGNaMFpRUXJUP3R9YTpHeHR4SX1HKHtkfkxMOSkhOTt2UygsU1dacz56M2wpYkg1''@;'; put 'put ''MiJBcGU6NjQkI1ZNPV9KSG1fNz9saHgkKDk+dWBtT3VAKDQ7ITBzaUB1d29FZ1YxWkxeQU0kSV98QlRkcWxnY0FPOH5eUTloLjEyfkUiNV9LQ3R3YFJpT1I+YjhedkUqUXZleWoraVdDSm9oUWJrPFlDWXF+VmNqdj1NJCImWVFgTHl1PiNZKVBPLD9udGNObVpmW0RYYlBocD5xUlE/ODlOd0pr''@;'; put 'put ''S2lBZjB+QThJd2NFPV5gfS5rN29Ae2Y7Qj9zIyZ7VCZfX1tZZEVmTVozVD05dkgobDZMV3tUYGo4L1o7fFc5RD9hWStaLzIrI05HeWd0ekxUImZXbGVfY11dUFRYdlVZb1g4KUxMem1jZmA1QmU9ayU0RjxuQnNbKl5TOFlUXyl8YU8hdXcmU2gjMGl+VDtKJCZDeVtlMCIueTI0Im5JPVZ5NGJL''@;'; put 'put ''bXdJQEc8eXxeYyxHRXVKUUxzaTUxT2QlWGRkaG81cG8oW2cwRzF9KkZCcT9MKzA1emNjcXtSenRbeDVQK2puNmp1KWtzRm89a1B8Iy9sfnQ4O09nRGxAPHg7S11tPWVYZzcxW09QSiNQOyR+ckIwaTNgbyV+Rm1Cfi9HQ0M8a1pRWzt9W2oxejR7VSZbWHF5MVVeS1VDXkxaMDNTN09AR2BUKFch''@;'; put 'put ''OkVNZ3MmWWx+OSxCMl4sN3ZKbyN1aTUkQj9WckxBSlhMMHR1KCZXYSEkeyI3KWB0TTE4djcxcUlPPUtNWnVnXXM8OCF1eCNBVyFSdm5fSShBb299UVZAR0VMXlRRXSV3UXBgWjpXJDpQSnJBRk1hdVhGdCQsR2YmIjN6OXg1RSJRMipyRkFpMnRJVzpdNnhaKkZ+OCJlRGcxZ1VeWS9bN0EjZChE''@;'; put 'put ''eCxENWhjSjZmOXQ0MnVtMSVad3UoLzhoSUI5Q2hubHN2PWIkTCpFQTBXTXt6dTpJQ2VWMmAsNkgvOyZLMn1DalU0X0hKZEZ0TXV1NiU0YGk3Q29fRUo/X1IjRFlsSmt3WWl1ZV5aJHNOXTA8bUFCLkpvQmhRW2pER0JaZ3lkeE19SkN8U2lHMlFTMSFhW2lgbGYjNmBdfV4hPC4rRWQxdkRqNk5g''@;'; put 'put ''K2MyUTtHIl0vdl9gejhHYylgInw5UWpOSXEmK25TcjBJIXEjTnJkNnB4b31dY1U1NXFEMTtrWE9daXVEKUJifFpiOE5ZI0ouOTdpPzwsbVkuZTcqKS9MYkxZXWJYczAqM2tBWjRPay54ZSJXeytuQiwodjZhPXRJY1NTMjRyfShZN1Rjd0grQFFlcnluXiwmcWlEJHRrdyRGNz5ZSTorV0lmeyEj''@;'; put 'put ''ODcyTDVoMFA9eX16SHtaemUsTnhLc09AY0N2OkJRK0VmeXVDfStkKTBTY01fNGphZjlQcl9fXylqbHlEWVteMTtha0F8LF4maThuc2s9bzI/TSxbK1svSmFQbUVQYEVXZCZ1PENycjd9VGdiMzpjcXF1OUdEVVt4YDx0Yzd0XlUpQypWcE5wIjNVfCo2XkVjWWApMUQ1Yi8+cV9LTU5CUjZnWlV5''@;'; put 'put ''WkZ5XXE7ZCQ6KX1QYjFDM25gaiRfT093bD9SO3VeQk5iJXkrITtGQENjeXx2d3l1emBTWTVpL3EmIUFYSyhhJk9yJjVWZzsrVUYxcUUwN3tiNHc8diVnRG9nV3NESkFFa3V4Q19XQn1FI1dHIS50Qy9IR3pBUUgvST9VN0gyJXd2Nl9wQ1NpSl01bktYcH1gXXteYHVrIUdtKEpOS2BaYVdKMSMu''@;'; put 'put ''XV9yNGY0UGsjUmM3cD5aVVRDKGY/JSVMT0ljSmFCU3xHLD5GLnkuNWJDcU46OCM7KGlPbztrdENeSGR2SV84dUx4Tkt6YXlsemtHbnVTO0txXShoRVc8KUo3cmZJWmYybTcuIzFmcGJAXW1ZbyN7RX15Yy8jP14kMSlVNCteQmJEeExASygyb3BiNi9wQWRdXUF+XnIjcitANmNsfG8pbGtlITJg''@;'; put 'put ''Vl8/Zi9EdGdePjwuemEsTURhLCVzWDplKEldVWdQZjMyPVYwNVt2OT5ae2p9WGpfb0omRWIwWDVEJlBOLE88bUtEayQvUEBbMl8mblZvRjlKPEdkWVBXIWwjVyFwViVPaUlCeDRaVE9OTlJ5XVFiU1RTJm9WcU4uLjFzXm5GX09KK2EmMjE7aCRpcj4mIXNxaD5CLFVtM2MpdkJHbjpfVzF8UyZi''@;'; put 'put ''VHNPc2JaaF9hQ3JUMmgpM0g7eUN4MCojWSk0RmQ3WnZfW01QRHNjV1Ffck98JClETihtRkIiLnFjZjE9O3soY0M0d3ZfVF1+MHsjVmE2RiMjUkZ+JlhBQEhuczwyJXBMO0dGKyRfc0xqTmc5d1B1aV9YUiZIZn1bNXBUJj1LRTljKG5AVXFyNlJlbFg9KWtLYV0jLlBELGooQjNpTWtbJmxEXS5q''@;'; put 'put ''fW1OW1sjPUA8MWtdOjNhYkBwW1lQMm5ReFVpS0ZyOjRQan5WZ1JVPXUzcSsrKjshRUgsbXdHZSNkdzJgeyN3Qm93M3JHVlIjcklbUjxoX0wyKXZUUSpSW1F9RmFsRXMwZVo6MEpPYSt0fWQ5U2hUK0Z0P1dfbCQwb1g+TGV9ZTBNJTxPMEdhaTFKRSo+OlA3SltMcXVfTSU0MiosVVlJdm5yPnVW''@;'; put 'put ''ZklSa19JOVIwUDAjX1p3WEBhRExNflI1ckNvRmU+Jjk+bTtKNSVoXUZnT0R0PnMjM3RjbmQ2cChZYnV2S1sqO0JdPzBtRDUrUkUpd2N8UWxSQl44Rig/Im9dPVQlV3l4fSk7fHksVlZ7I0Z8PER7IWM1MmZGV1BndXlRRmRHPl4vXj9ecHlENVs5dTFbRSN3bDw7c3kvMDUyMHx0eGg9dDdTdGxW''@;'; put 'put ''fSkvKHdNX18/YiUmVlU9JCY3Z3V7fWJnZ0gyXTpeKDtLQCI3VGt5YGs9P35URyQ5TjI/K0J+KWQ+RjR2V1toVD1CTEM4RDhEZFklKy44S3xXMnRKPEM2bzxIW1t1bWtnNT4/bm9DaipwRF5xbXx9YVcmaXprYltjfkg2RlZ3WVcpOjJUYzQmZkA8I1g6Ymp3akUpfEo4Y2xrbiFQezhAdVNKej1J''@;'; put 'put ''e2VRVmJaWUsyUn4lLElbLG9sRDpoaCh3UjY7UGI/PWdFPE17VHU9Jl1fXnxeb2hIckQ+bDM1IWByRE9kd2RrInBRKnlMaU9kNWkvLCs4Ujdjdks1ZCFFSH12QiVjUDh9SXdVSXlAQDxbLn1LWlsjTnJ7IU8hT1F0dztFMS99Om5wVEgrbWJ5alREK0dtWyg0K2dFKjF4d0M6U0NaZiI3dF4rVj5j''@;'; put 'put ''Qj1HeE1ydXNKXXd5d1shajU+Pz1XdVkyIkRMdG07KFtMQFozYzVYWixKVUVzMzorcERCUHRjam1OPEcka1RAaFdyTzNXK1h0JkVVTlUwMn1hYHIwMGRgW3hSKz0iTFB8Ind7aztKRXJdImlGNCg/TEBab05RSnpPSkNhT2kvXms+MTAmOSkwcVdULlYqNGhlOiU0S2dJdyhQOHldQ3BKJEdVVyR5''@;'; put 'put ''dzA+eVBoQiF1eVR2YUVlRFZZK3U/WFc1NXFvLj10L1MzZVE3ZDY2MnprdWlWaV02anhxbm1gK2ZYSVMkQGNWYHQsNzV1aFlmfT1kbi4haSpuKlFMaSo/N0J7NEYlPERNOXNtZlBLckVAUk0wVXEwaTYhLkJCPkExOzsienJUNShpZ2lxOl9XKDAjL3kqfixyU2UqdmJMUnZIU34pUT9kcHk4RjRy''@;'; put 'put ''dmBzX0VDPXM+NzNnTUsocS40IUhKW1huNWJzTjxvTzJJN0MkOUU3PWIhc1A1Y0RMQjxrRV9aUWA/eHRZcHY7KG4mJVpnZ3IwNj97PnhKRmIwdnhsKXBVVCZrKj1WVUAqWXo+c3dnPj9gflN0RVkrSCxlSytfTXJHLzByNGYiTF1ZWm84UTRdP1ZCX3FKIVYwT0FeP1VnZSZlOnZ0OVhEZWBdZCNC''@;'; put 'put ''djBCLHx+OlYiT11sV2hVNHhTZkoiVWxzUGA7O1ZPfHZ4W014JklScH5kMmQrRy4hbyZ3ZnJJQn0xKlFQN01iMnk0OE8jVlJnRF5laSR5VFE4P1NEbjhOK3xycDx3XkZEcUlNRUxfZ0RbKU9UY3BZd2ZoVHVgLi9RXn5vb1pzODs7aVAkL19kRUlnQUtYOz13LltYMyhTNFVbZlpiKGskaEZQaGpL''@;'; put 'put ''NiVOW2c/QmtbXi8yRkt+bU12QyxqYT9NXTVAMV9jdDssR08oZDxXej9XdXk6LnhyQVg9VzY0aSo4aX5jelBoWG82ZjJCaUVWczJNSFozJUk8YnJfKTpXXWRwJFo4fE52Q0YrdW98dTBhbFEmfmFnSWlvdVhbVy5LQEdZajRlbzQsOkk6fSk9VDZje0VsaD8rZ1ZEWns1IXNgKzpKe3BdUWUsOUtP''@;'; put 'put ''fHxleUImaG5oT0IrUik1cSVZcW9UemNZIW41ZUdoNHs6TlVVbW5veFhDa2UsQz4qazlNc0p4fH4ifkoxRUEqbGg2XiVAUV01N1A7KTR6anFwfF9qLE0qYCl7R205LDFUeTwiSmJxOz19fCVPSGRmIThXLmE4K3x7U1d+PlJxZlg6d15gM2Q6TG9OeT9gLjksdW5WSWoyPEhgVHtrN0ZQU0cpMGI6''@;'; put 'put ''PzwoR3JUZFJRYjFXVnsrPGJlfCRebH5IdyQ1QjBKUUoiSzA+NldAYV9VZkdHU31tIkgxWntQP3hRJUlkXS9MSVdjRnd6bWBIR1Y7TmRKZkZ0dWleLE9xRkBjYGxNLCgmez8lWSkyRz00RiYjdEpIX1BULnUhTEs6M2IyNlJzOTY9Kns5L2pxTk92SWxVamNyOC9YQ08kOUNFSEsrJkwiTF5RK0VA''@;'; put 'put ''XXlpOXowLG9dTjpUQ24jdnVDUWpsRTRPR0BVVj98JXQuO3Z4LHMvSkxfIi9AQ2k3cSQyMSp2dXtiL3BuMFpzJHIqSilDMVJUP2Z6JDVzOT4lOCtnTyN2eG1DZDFDeS5tYXspRnJHRCxtO0pBdkh7Xm5RL0o+ZGdDanZ0Mz5XV2NhSCplVEBpVHQ2PFBzWi9OIU87ZURRdTB7ZXssP1taKX16JVcr''@;'; put 'put ''KXk5P2RSflVCI1VAIkQjfmt0b1E8SUZDdGpmR2gxaUUoSmRPTzI3RkMxPzNiUFNEXjppRDB+RmssVCYrdVc/Um0mR1FqXVYydXdOZnMqKX5QUSJkQiR7KG1tR01AaWxeLjBNaWNKKXxBZXsrLzh8ZUhqe3ooI0B0XUlBa0BIWStSZ1hdYiZ1NWo1IyNfYzBHJHlGWDZnWCxeMGNdP2F+K3RGM0Bk''@;'; put 'put ''JC47TEpuZTRTWXRDe3RFVjlpZUlCZ1kuZ3ExaDpEei9jNVd1e2FhQ24iXn5YWVUoPy5jMzpANE4zVkAvJXpVPSxdfUJYRjgxdXoucWRvLl5+d0NmfkVEO0MxO0JWJWZ4aDNFLktDWiNdUUY8NnErKUxQISFmdX47fU58UXN1PGJDWDQjemBmfUhffGcjK09ARH16QCs1amlncXAjPCtUXzpCIWsp''@;'; put 'put ''OHk3W3o0JSlYY3dvemYlUWVTfVtXKTJsYUc6LmBCdHs+NGBHbl4zYDMoIXgvPHIwSik6KE5TJGUlazthITJOWiQ2a1k7fSRqK291JFBsWD8iOnJ9V2o2YHhjfXpBQyh0ZlIhZyx4MWdyMyhiPGQ8ZFckbSJfcU5jT3MkVi42NHFubyEhTD5ESn5fcjUwZ1ZpSkd4NFhNO19TI2ZKL0gqYXVUM0Rs''@;'; put 'put ''Mz5DPTVkS0hhcGtfNHB9K2JeLGJWV2JxZT5WJlBbSy58QlRoPURSO2JUdjFJeSlVY30hKHg2O0hHL0lETiFKbjopbno1W3JtZEZAMVs3WnQ/bFBHKmM+bWEqSkBmQ3l+dXdvPTE0P25fSGd+Nyh5VW9wa1M2O2xDVn1LOHdkcX4yMnFdSDBLYU1hQmRfcUJPbl4va0krdk5MOWZFMUR7UmZTKzsr''@;'; put 'put ''IjEhMTkyQSFOKnguVl1ZNyRxPyF1fStSJnp7MyxienBUQnJpV09ga1ReQ1tLJGBzWTRaWGchZDNVckJlPG9rTDQlXk0kLmJ4d2lgOEUyV2BwSlBzaENScWA9PUdaeFt0eX1hSlAvRkNARVB5Z1hxSUNEQ3MyWlpDM1cvS2FZaSQ4b1QzNT9gNyt4a1VIUC5NXWVwVXZlQ0tqKjs+SlltSEg1anBe''@;'; put 'put ''KWpKYi88aGM0UlZQe0lqbGlpclFOWj5rTjRvKigwW1NYVlJSNSUrUXg0OW42MyxdXlFKPX12YCgvKCFDTlJLJWV6Qzs0Q3xAKDciV0U0JHQiQUthUmZVN19KT3hXZTtVbmtIPWtiOl9sRzQmZkJ5PUpmc3s5QDlocDp+PjNVfndpYVhsWXFHcG07RHlnQH1haXRAKy9uVmYuRG9WfktWcVB7RTd7''@;'; put 'put ''JDU+V0AyYGsuRyxoVVlpfWV7UWcxPE4zPXddblZNTm9IfGg4ayFxd1o7NlA6PTI3KDVtWGV3XklvV2o0USZtUn1UaGdGVz44SkR1PW5FdSljbDFNQ2wlMGhNQVg5SEdGR0NeRiloVHp7aV9rIUJ9PzBJUH5raX5EZS8oM0J4bCx4QkoiS2N4P0ZkZi90d2E1ekMoRGVJa2ZzMz8xNjdSZWVxYV0j''@;'; put 'put ''fSEidk9VIWt7fEgvcXcoR2JGJVlrRDdtMHpgODJ4fDx8MTR+TS5YYD1XX1JbSGQ8dDNSNE9ZOyV3Ol9RZ3coUDVZL3tXajl4YF5BO2ZNPEZFVyYjOktMcl5SPE0/IzJ9SURHKFpMRkdsQUkuNDQwXSQsTWprPD9FUHZoXVg6d1FgY2hvLEJ4OD8lRyYvKGokITF9YzBOOTI4PT9XcGo6UnNEYSJ2''@;'; put 'put ''RTtvY1JPPkRqUHFsIWw0TnswKWIoPFhuc1o1Lm0hP2RiRW9tUmI5LnAjIlV3S3NHM3pDXS8yd2wsPX0xNCxsPk5feWIhUHBdSzgzL3c5RkMjZzl3eD1Yc2IzJEpec0c9TDJUSVVVRmJXWVNjZW1RQ35MOERnRVFIM35bOz1GYVdMRCh8SXZlfS5yOj0vTGY4e01SI2FVWlpfOHNQL0Y7Ono9emZb''@;'; put 'put ''SW9KY0l+eGcwSz1vW0JBPSthayxWcVVtIylCP3d6T2oxaE5BMnhlZXBNb0YhY21IPFM1QXpUY3p8cl1LVXJ5NUNTL2pQQ1oyVjRPfl9NZD4/bSQoRHdJXyVtLjEwOGA4WXRySDxYZTcpa3h7LFU6S15ZVEomZ1hTcT1aKyU4NV5LV3RvPjRWaV9UZDc6bEd4ZHltaEVsU1ZsSSo+YGNFejUxUita''@;'; put 'put ''R18oNCVXYSMsZXRmfj89UFZKWzl+dnc6XTgxaVFhdSQwKzBYPFY1QzgxSD5PfTZYUEQzPD9VQUYwQlZbJFB0ZEMpbm9ENlh3XUBzOVohRyVgVVN4bD5eMDw3ZXkoPzRVcmFxV2xhS244SUdHYEU6a0lXXzR2MlZIIzdmdElEdFZpQTxgelFBIXMyPE5xMXRMemk1SV0+VyFDI24jQkBVM1RvaXR0''@;'; put 'put ''bj51SWdhQkNnfHpJTWZ2dCg/NmskQyklPXJGYlB8QnU3LEo+RiJhVltVK3pUbTNkOXQ4bHtDd2JSaWlDOiYxZTRkTT1KeCJ1YG9fXVFofiRjNUJaIVVEP1o+WSwpLEVVWkx8azo6JktJTFModmovN1FZJnM6Q29WTWQrRnBlIioxbSNCdHBmZVYzTyVVWU04MkVlRitAMzNyKTUwWGslRygxfD82''@;'; put 'put ''VzFMS11kPHdzUXFYKy4iPURMRiltZnxCSjhFWkxpc0FQOkJfPXpFQSpFYiNNPTc+SWU9VFF5Xi5OL2tKRFJEdFRqeGY7Nns6OEJPKilnTDFwNEZSSURyKnshdWZ7KCxkNEl2V0FpLGFbOkteeW1BVlRtRWlHNSxSRXVhXn1GWTYoZW0oO0t6KUBsektdY25TVldXKTs/KnlDUiNde09TI3hpc0Ba''@;'; put 'put ''JDpbYCFhT2krMzs9Q0xwdDduRWpdVmlecF4+dVF2W29UfkRFan5qd3lOO3pLUmlURCY7W0w5MjFGdDcxV2VbPnElJkt5YTc8VHpwQFBdUHE3JmYvfXBxPkMwW10lYGNvekJ6PnZdLEVtVl9TKTQrO0BWYXdpR04/RDw2eV83WnFqKnE2dT8yL3tuRj9QLmx9NkY9cityamB6QXZ7PGhPZEVMPyZa''@;'; put 'put ''MDRoVFhnOChfcF1wImtVKUdqdC8rOU43P1VjOGRIYVMpbmVpQD1lRjZvMldaJGN7ZCoiJWtoIStmIVtqVU1eVyNPaGdLKkQqK1RkVDNVaGJfO2h3UkNuODtsMyJnYG5rNTI8VkNTTUB7LDdrZC9fIzd1Ujc7WWUjSGZeJk9ufnh6WEdgbVFSZT5RMnZORzU/IlBWUXNrZ3liKX5BdkJKYzsvfCpt''@;'; put 'put ''K1l9emZhXVRPdzg1VWxdKzwucygyYGlmcEQqU0l7P0VMPEBVY0RuZFdhaFpUYiU6a1hiITVQQSFZKVs7ezA1Nl0jQiFIcURDO18mMTdXW3RQRiw/ekN+Wl9ZZT1fPlBVND5APmBoaXgzXXlPOm5DT3QyYSNsfVV8WD4zKX1UWSRbYENYIylBRXMpT1gqTV9iV3Q5SjVOblI0W0leYlt1MEljPyNM''@;'; put 'put ''YkpkTiRPbUl3YTUyeD0yUzk3SXFTUnRjK2Y2V2ApZ2ZyN05FcSJeNDJbN3c4RmFCfkRLcTk5OGxCMzhGWSIiVXhXeH1pRmh0XzhGMHooZlBnKGVZV0kkIzkvWyEwTWZQLF02ZlJrcWxRUS8mYkZASFlmbHQ+Uz9MOyhRZE5DamdybUImKT1vVWlfaihLMjs2IndLZF82djYwTGp1OCEkfnxmL2A3''@;'; put 'put ''QCUxcyNNRmEsPSJwMEM4cilWWEZLelBeOVpyNUR9RTc9O3Esa0MjSkJvVkliI0pbWSJSU1p6NyJUQn0oYXlUKVA0JDddZy43QzwzQkJBZ2R2JTR+ajA2cHchT0Z8LE96N2pIZEsoTlRhaGk4OGpEZjYlNnJaUlBYI2UwK2t9YHBXT05OcGclUTkmakhDcnxzNWEhdCo3bnxlPXh0L1E+NCF0YyU7''@;'; put 'put ''X3xgdVVoYnBDKSxJPH0pM1VSfXtIYHpNPkl8TTgkUVE5bm57enM9Iz1adkNWIztIN3VqKCg0aVF0dVZreT9YVkw2by9sZDxzXlF0QX5SUl5ZeSRHYkx0PlVFfSh2QE0vemU6fmhdbl4+fkF2I2c1M1UrQHpfMl9zTTwweDw0Lk81WEAxRloiNFdCI25rUjR7PWUhOjo1TSZHQylIUWZMTSk0clRd''@;'; put 'put ''Qz5Ed3B0WCFPXyR5QGQ6bGxTdnFWU25qfExZfTslWERlU1g5YDVAdyhWX2pafCtOZmhFLiZUcS89QH04WDAvRFRgdXQ9KWdCaFV3ej9rJmM5Nnp+P0wqaiIvTW1iPzEkNGB0YDVPImluUFhQeDxlbClTaFE9N1Jkej9vd3MjMkcmS3RTdiVlWEdlRD08NmhhI3xtbHIpRz9AR0lvXjlScXpZWHlu''@;'; put 'put ''UXRGVm46aUArbSFrdnZuYGMuIjZeZXozbmt6Y2oyK2UpIU9xXkpPNmFQVW44aFBgIjA/RztRUCQ0VVhuV2Noaz1aPmoodEssUUluR3prdGhCIWRxUnl+Pj1HNX4uWnRwbFplWFJYeC82UE9wYl1aXlg/ajdQX3I4fTcsbGI2PkdhNnJreGpkMD90bmshZlo+Sms3LFY9Pks6XkMvT298Y3VdcyFU''@;'; put 'put ''LmQ4bHI+WUZDXj8wN3ZWOXJbfk8/aVJSTUVydSNKQWhWWEc0UGsxT3AvOCM6Tj4sNFR9fEcieypfVUtNZzdsSEJ3NCgkem1PM0hJbj11LHo0flRATU1sdXVZIT1xbDYlempxey8mRShpTHtubE5bPz9GdXZlQk59Zmx+ViNwdlsle1JgTVp+e3YiZkU9dGo0Slp0dz1Yd3k7V0gqIWFJJlpyUiZy''@;'; put 'put ''UF1RLzxjeCo0LFpTYzAuQzRZMCVZMnVsU2tZRXtkKEkuM0Y+L3YuJCMzQSsiKjRTckh6TitfX2MlWjVyal1YI3F3Z01RYEJjU1drNjYkSXB6TXt5LG48PH0rbGFBcVNveS5BIUF3PXN+SXc+VyhCdzdnT3s9QCglJFozKjlmcik8JUVHSmh6Z05PcHczfDFfI2lLUHh9NEg5Rn45b25xTVhINGNd''@;'; put 'put ''NTlJajY5Q110ezF8VUZqXTFRTSg0cFJ4UDg8S2ExUyF0MDosYDhnb3h8T0RDd1J+SyZySCNFbmlhYHh6SHNFTkFhdCZSQXhPJkh0IWhvU0soRzIjSip7bG1Cc0gwZ3dfQjY3IkFlPngyOk8rfmYjcTd0bUhMcD1mcjFpODZ2P3w2M3VuX0E3dDQ2fFB2UylKMUMqVipUKnFfJFs1fn1bcmVxRUdw''@;'; put 'put ''QXZ3TVtTQWJdRmc6e3lTayI4OkpiblJ+b20yUDI2KCh8PlNMaCQzfDA+JkZEO0JJelsxU2NvL2taa0A+VnVILEpmSTNgcmhSKCtOU3BSUntLS2dDOCtIJFEmdGlhWnZJbm18NXEzbT5GSTB6fEdFW0J7IU1YcFFKSHs2SyF6RFFVXWBDW21tdmJ2bzV0PTdUfGprTVs9e1BjK0pyYllpPEA8OD1x''@;'; put 'put ''cGhlZl0mX359OnZvZi5OSik5SDM2eURAK1l+cz94KXswMj5ndmQyPjF8RmtaW0lJNTpbJXRSKlo9IkAqNShHPjZZJFQ/WWIxKXRmOVopJDQ5cEw6WVdoQnRnLitLdWVMYTtuM19FVFROXyZUIXRnTVg7VnpFLnYqe05ERHpLdXlaeVJyTEB5PHN8QlZgcUdwXytUWixdU21GU05DdylqbDRoS19T''@;'; put 'put ''Vik7InwhOHBEfl1WSTRnWyopVlppWUoxZTFtTSl7RnZvSn0sPzNaI2AmM1RBSyJBel5pVnQycFN9eyQ5NDE1O0hVZmhSZiNaKHhaTyxGIzlmUyN7IUgmekQvLnsmcHI9bXp5aGp8RmwsK3NwNXk/c1kvOyt5VzE5bCU+amd2ayVDPzVnXiVTbygvV1U4dF9ffmUzUkVAfHcuKTlwPGtURHNUdlJC''@;'; put 'put ''PUAmZXl8Pm50OXF0ZENwcEhuSEpiZy8/NzFUYiFMPCRdTzJDd3pvTDdkQW8kYUdBTTMjWUpyfnhFWkthSDs/bEhlLzhCayFAZkhjbmBdPFspYUFWbnRWIUcvTyJWMGYsank+SlZGZUhkezw1X2p4XUlfXjF9KjgydD9re0hGbkR6KHQvMClIYGpFImtML1VJMF9LKUxMRmIuTGZ+MX1Gay4xclVb''@;'; put 'put ''RG9RVT53cHFlPShkMXQuMFlhUmEsQHEyalJ9cFJIL0koZ0xZPC5Cck8qfCM0XnlyLkJDTDEsSS46UW5nKWZPTGBOPi9ZSilCJCFwMz1HTlR2a3YsYk42bkRqLiQ4MTZWbzJyNFViRTlJN3cjeDR3O1o9b0JRfnZFQ0ldfWxwJGZlU0hhK09LajpLeTg9OT8uRCpVKTEpWmYoXzhra2VucEtKOVUm''@;'; put 'put ''dmkwY3RuaTw2fHlkNzpjdkNhJEVXdjsyNSxmP05RNGZUNEpqVC9gTnsuc0crKVNCYzJXbnxebl5YaVpCZ3gsL29HVUpZYWdHVUA3PE59dihrZGV6ZmBbQWgqXm4zeDF0aXVCaShOckd4TSpvXiF1Qz86QjlBJSpDYyo1L3ZrKVhnXlpaNSgyMEJuKjYpSU02KjpeQ1NjJlglL3goTmlvK0BkJkh0''@;'; put 'put ''KH0mRXQ9V2pPeyxbUT89fl9rNkArWklUVi8mXWxjbWhuMiY4WXcueyp9O2pVTmBdPXFlZWguI101dlB1JWIlOF11PG9AXi5bbzQ5NkwrfF4pXlh+ZVQkK1kkZU5tT3x8Yyx2MSovTyYoaCwvTUk0KXFZVywmak49Z1tnRVFTQmV1L2s+fHFdNjI8O3tPUlRbejxzfDYwTWFJPmVsaXB+QW83WnR4''@;'; put 'put ''dz9JfEx5JVh0cEMkZ2hIK2RLKFdGWktQZTRWSXc9VldjR2Q3cHdrUzhMNWtPa3w9UytlI3hXcVhuKjpxLmIlfiwhYlAwPERPQ0RaZUJQOEskIldVeHciTDNUPTw/Vj55LCl4PUkxJj5eUztSIndnViJDJlFhXUpNPnZEN2hHfnZIczQ7eGQiUCt6WSlbbSM9dUM1UH0lU3JIOGZoKltfPEMoYmkr''@;'; put 'put ''X1h7SV8lfkU7d31fUihDWyldV0NeWlEyLz5hRWAoI2shKUI+ZWE8bTNTSX07O14sVGgsVyRzJVR0Un03WUBDdUl3L0tkPzBDKVQvN1tpb2h5bVY3OS56Tm9Bc3tMI3c6P2w+cGU9QkRMQDo7MiVMdjc1VDdnNS5fJXAlKUteZytQQFR0PDZXaGFMeFhNOFsvKnJKNWR4Lll+L3ZCST4yWzFiJFRq''@;'; put 'put ''UVNaKkcsbFgoJmt2QF1kdzIsVDsxXWE6cEdDUVlPe2B2ITlwLFNQMXl8V1BoLy9oSyojRHBNUilqdjxXL0d4VTIqaHRFSFRJOHNqNE8+OmRYJVJxJnNjbCE5WypAXT07TTN5KkJrIT07bCZNbWZ8PDRtZFNiSUxPRGY5ImhYX0hSMkF3fHhyNCxtPl8uUi8wY1hfaXAjZylAVE1VX0didmdfSkN0''@;'; put 'put ''ZDErL3BmZFQ+fWpCdVNkX0EoJD8vPSZrKEdXNDpLdSpzKCtNS04pYFt3ISYoZyl5U3shd1lQSCR4QklvcixPKzU3WjciN01qQVMwb0ZEaD9ZVjU+djlyNnw3cmwsKVs6VXg8ZiMrKVRaXSU2dWo4QkUuKlQ5bTApcXZDR29pY19IayspSnRMPk1tV0w8OFMvLnYzYmImcHRGSVRvOGR6aS5eOUQi''@;'; put 'put ''bCUuYFNUVlZORVRZclVYcSh5YFRDVnFUJkRqRlp3PF9CN01VR1AvOF9AQkVkK1J8KEJNTGp8YntrQF8zKno8anB3Sj9ML1hpZyk0U0YxMDB0QGNOPVlncD53a3RvNGZ6LDhEcyVmfDxsYEQ7Ki5iQ2pWUDUhKGlYODh5XkdzNCZETDxxcSJfcTZoPTx3WClmMyosUnwiR09sXkFhb0VjVSRqLHJd''@;'; put 'put ''RyhdW2NbcSxgSzI6czt4Tl0/ezJfWnRYLDNrXk1tYWpxYWZEeWc2YjlncGpXU2duaSIiQSsvNm9nXTE5YWpwKkMjcyUsVjU/SyRqTng8XyhidGVgfGZSS1JdSyI+cFZOUU5QM3MxeVo6ZXpoc3cuZnAkMDBbYllhcjt3eGQyYjFPLmhPalltayx2aGJeYDgyUl90ZDRSOVhCaW1NRnwocGhhUCNx''@;'; put 'put ''MzheKltJeFk2fmE/KmQhYFB7JCQzKywkZDN5Xl8sKyV1WlVZUjA7Z0VEWWskaStIeHx6b3MzYz0mP21haXdJViFSS1UlUWgic0ZoVEk9LzMySiY0fFtFK1BqXmA4OCxsdjR+Y2dGLEBgJXt7JV9sZDpiPUlAKjsiIW9xWmpePTshWF18PUNHI0ZXX007bG55YyxgJH49Z01pJCY1OHVxckwrX3FU''@;'; put 'put ''XSNnKXRtYkZJZ2JGITF+Tz9eKkkoODBMJFQyOVlMJT15Ln55dXsoWXBbPkNPSXY3ZD0vN2lyTERWaSJnKCpVWjsjSUZIVi88QXJ2QXohfEh5KllJR09wZHwqeWVuOihpakdObF1+aWN8cl95KFRENDErXTZEdzs2QlJvTUhlVnI/eUtVVUh3JXo3OzRMRF9eRkhETVYuRUhzKmRqKVRbekRCVmlU''@;'; put 'put ''Ymo4JkpUP0Y/YUMsRTQxZHZQdG0uVSxHKGlmSjZPVGx4PDZNMWFqTj92SGhwKXlrKyFXNG5IVlh4W04xMntibjYxZ1hSYzY1RVRKK2NoK19KaFQ8Z3I9QDEwYkx5SD50UDp0fDlHRUQ5KlE4K3svQV1lW2olWzk6XVYxU2pKQlBAJHJIRGkmZ1QuVG5yJitaOXJnen1UQEY4Ykh5NmVMSGJkXixr''@;'; put 'put ''ZyUrekBjLzZCa1RuZVJLTXFSS15AS180bHY3cDgmd1dXT1NnOzErKXJrVFgmX2A5Nn5kUiNbRkJebyJ4R0dgWTZwayYuM1ZFfkU0LE5RRVtZeGV7NHBfbSpneDJ7UVU0d1BIYzt+bl9haGxDPXBJeHE7KyxqfWMubGl7PSJOJDpxeDU9RklAclk3UmlkdVdxTSwrLjtWXXxNMnUyI0hIMWdnTXde''@;'; put 'put ''VVY5IURHdmJxQldXKntEUntuJnxTOmllaSNdRVRoRl03R0JEdEdZUWllK156eT49fV4uIkMzdj52bmphXSRUTX5MWnpRQGQkSnBUaTVeRHNDRUV9WkdwaFEhU2VRP1d+cDJ9NXpha0JbTHVqLkExK1g/X10iczJzL2FgT2AlT0hALHpbODY2WFNbVWtkR3hfMD9aeDxCI3pxMFYoNiJbUFc+dzU4''@;'; put 'put ''IVFbOHZ0XkQrUy4hWCRhKkVIe3pUMHQhJjU+ZUtKSmZlVXA6QlAyZj1YeVo4O0lGWylTKnkqOkNOV3xzJDZ8SUpGeSh+YFBjZyFmNXpwMUd2ZTgjK0hORUhlJXp2MXFNJEA9QDwzNFAoR2k7RVd2NUwiPGMvTFFkNF40PjpYL3A5WX5IZnNyQ1tWbDlyc0RJMnx9MWJjYz03WTRZbjpsPTxlcE8+''@;'; put 'put ''Zmo0RSpHbDJYNXBHbWRKOENaQntTd2w+eXl7bisxYS5wcy8iZTZnVmpqditzNCVjcXdHazEqYm43PCRSdHdxWzVpXX5sMUxCaDB0NnB1XX5tY0cwUnhpd1llKE9PWndSUUVWYkBsJHJ9NCQoKD5oW0VLM3lLe3tCaXdHJDRWfDooRz0/XS48NHFWLGJ2NX5pPCZpY04yVURQUW5PJntDenFbYiU7''@;'; put 'put ''PWlTRTB3ST9hPy8hU0NPX1RYNEF3U01NOWEleiIqR11CbFpgRT4wNT41cCRYa25laXh4TF58UUQ/MVU6blU7fltPentBbV5qR2BIbHYyLzt0JTpteVJpUHM5ZnN4X2FxTCFsJEh7ZHpdUzQwZHEkLkNiSllMVVRbKkI8WSgqfDEoRkhGTWhsVmN+REA4ens1bHRbRHwoXShWOmU8UUZ0bUZwe1Bg''@;'; put 'put ''cV8kSV9lKy9gSEh1X2pBQ3FmTi5rIVh3R1ZpNipURipUdWtKR2YvSDMsYW9CT0JeUEE6N3ArPnFFZG9WTSY/YiJYN0IhQCs8eShIZG5HPTVrUSE6b0c2JC92W0AxOkd5cT5QOUxuI08yUlU5MSZ7fStFcX18Z3pSP2t2MUc3LFZQZC9CP3R0Izgiczd2MTgjMmFbX01kTGh4PHs6X2hXXUlLM1ow''@;'; put 'put ''eSsmYT8yPG5ELFc5QGhJWz1QRm9ZNFltIi9VOFdhS1RuYm9+K2t2cVk2ODJPLlcpdk1zTFdCVE5DSWkvPVg8LnVLbGZ5PyU3Jm86cj1kc35ZYXIkOStMYXp6VE5fcnAjTW9pY2lEVXlWI0A7JHdUdTBYdFl7WVU0YVpVeWxbfS5IWDxOc2kuVmdHTHpuR0RALmNTekVYRkdOXiFUdlM/NVBuaXQ7''@;'; put 'put ''TDpnInJJMFBpfkJqLGI9OW5dSkw2bz0jL215YTFpZlY6ZloweTY/ZU83fFpDcmoqOE8jTk1eeTxrS14zVWJkRGk6V0JJdy5AeXNsJEJFXllvYVtFOjwyQj9QemB3NixRTkkxYmlzND5kc3l9SW47WC8sa3tQO3cpfSQ1an4yY2VhWH5obFdnfCFTRCxRQGl5VTd0PHZ+Pl9gOC9xNl1aODwhRGM8''@;'; put 'put ''ZT51dk8kOTtPRk9MSjVzYypsZUUlb2F6PDFpKnBde09GNk1AJTZQZjhXc0w+RUlONXhnd3IzP1tZcVpxVDdKLnU1fChbcTtRLGhbTDJpZmlycEBldm1dVHJZcnl3eVpOMjc6S0JFUWU0PnBmOFFCUUtTSGhCXl1PQzNSOjpvWj5ZQTolb0NRPjBhenluL10ibTV8d1pOUD5iaUhlSGBWSmJvPyw0''@;'; put 'put ''fVpUdHp6dT9RMnBYeVFTKHF8d35gfjFMP0RicUUiJXcoIT96cnl8ST53USZVOTY5Lj98QlF4L1hwK0NZWSEzMCs0WlI4fjdFMCxEP2lbKVtlZkFbbnFmNV1RJCllKFNNT1V+Jkw+MyI5S2RULyFrUVlPcFdSeDZkNF5UWCxfWmVIWHBPXSl+Pk1vO1BLJDBRS3gvZDRobFBxdEdxWktqYjwvNjhE''@;'; put 'put ''LCtNJDtHUD90RlVzY1d1dlIyMGpSZXZYJkpSWDhTaS53UzFob2lnW1ovXUFyby88c0ZfWk44Tis9O0VGaHNUL0NPOH5BdyUoYSEoOWpXOSpZcj9tdU5TKmBhJitHeGZaa2BEclosWlEhNXcoe0N7NEdOSTVfSDt8UUlaIXZVWnFfWmdET1UlOU50IUo+e2VmVCV9YTFwZjBffDVEWWlLV347KE5g''@;'; put 'put ''PVNlYm0pfWNQOipScmlFVmJMVkZERjduWHgyJmJAKVp8VS9hb2Esfn44aDdbImJXd0tOY0BCbz5GPCp3QFAuPlM1WzhFMTsuPD5OKDB6YUkoXTR4PU16THh2MWM1TSJjVH08d09NZnhFR3EuYXl5W24qbHU4KVNfd0drQyhxYVZBRTJ8SigqRnI6Ozh4XTF6QEQ6YTxsWUpicmpfS2I4PnxIQm9t''@;'; put 'put ''ZGlhc2c2ZFdvOiQyZmE0ckhNKStOfEJ0clo2RyNzOTcmcChPX191IjIvZj52Q3xnUypZdmx1cXF0RVhdIXRxdClsWlc9MUtLYlg2M1FhKC9nLz8oJXMwcVR9QVY7TG93fD5HRStzLlkmSElpZ2Q/bVpMX111VTpaaT5mRjUoOXp2TTk7W1o3NTlKfS9EK3d+ZUohQWc3IT8uNElRUGdWa3REemVV''@;'; put 'put ''VWBiTTdnV3IiNj9xWjF4PkVlRT09YWZlZCJzPmFhbFg1dzB8TmxzIis4YVZhN3A3Yy5+KiRwW3VORV5fXTUuNS9tOl1pNn5PcnFTdSs+TX0lIkMzKEteVDx+fCtoSixkS0RuKCtjcUFab3B7JkU1NDtlSD9+SnRFMHtHJCRjUTNePj5Cdy4uK0ZjfVZhZjJ3MElUL2ZOdFNYczRdUTlNQm04IkhG''@;'; put 'put ''JnNqdXszXVchYS5xIlJVZEtWc11UZy40U3A1TS9KakVTXTZ6NmZDYyUqJjMvZTVvWjlCfjwpLzhHZCJvYj9AOXBzUjIwNTo/d1FASUF8IyNzLj1+Ijd4YiFeVUMjfV9Odz1JPDd+IlV3QGZMb3xHeVtyZTNUbWZmfDpEMUVZfTppSztfW04iUTM+MTFqaVY9dHZjKlQhdGltL0V3N2YhRCUjTiVK''@;'; put 'put ''Z0ZIZHQ0bGNgWWo6ST8kUlh+MXpyezcoSzkpQHRiS0MsJWM7XWdqMCEmWz8jaDJ4ZX5jVlBNZDZvM3tSYldgTndqfD5HQHhEZ3tVWVFVWzFPXzp8LGhFZW5GNHg1RSRpW0V3UUUjNDRHUldQcEEsZVcwPTZRVmg5aG1oSX1fMTJAJXxlK2w3X0B3Kl1Ley4hUX0yT3lQI3JLYyNkZFAyMlhTcFpu''@;'; put 'put ''MXVxY0VTLmNRSFB0Q1lPRiNENmRhMnJ4KDA2UGFJUVRfZ35Oe1g7dU12ZVUmKVRwPjwvdnlGX0xLRWZ6KjRGJUJHQWs6JUVHNUx0X3ssM3crMiZuTF9mKi4ufX1PSUBzIWh2NUFqUX16aWBgMVhyTS5VP3wyNWBjfkh5TkpqU2xIOnFlZUxpPEldTWl1SGh2cG8xKkdiN1BSTDN2d0U4N1lhdXRh''@;'; put 'put ''aHxYSFhBWTo7aGhTeDxObHh8Q0s6RDRJNEYsQEN5Zj4xTjNkVzZbSEgudUJGR20yKDReeyM7XiQ5W2hTX3xxXTEjR241NEZCRi5aN1c7QmtNUTo7X0ZBPCslITozcWxPaUhiPEdQLmcjKW5WWyVZSmFJfCY7QVExJSNAKG5mZTtDSnhyUCZ1PDpCfkZRbDc+WHxqO2lEKEF3RlZJVHQrc1dpQzBQ''@;'; put 'put ''YnA3U0BIXno1PDsvdjtaNH5Ia199TSIrKEk0bWBeJD0hQm81My59SyVKalhOPEx7ciQ9a1U8VXAjKjBJYGZjKGs3OSF2d3VbOjdlMVZUaHNKJEYpOzVWfFE9JnlqM1pWO3NoXzs/N318d2NpV3s4bCNILkUuek5zSSo6b05Mbi9hIjElYUJrbmFBJS9Sej0sWT0/OHQ1PXRXUj09KERbcldtXToq''@;'; put 'put ''WDN3NSo/blhVfTMpfGBhIUY9Mik3VzY/SnREUGZzMTdheERoUCUoKDhkWD1TUFhPS3hTTUppWi96Y3JHXigzNz4yelJvIjxANy5fY0VveSJab0AmXUpvJWJXTzVgWE5NSEZgW153TGRRaDRIcGNtMzwodVY5PGp7LHtpdjRUWFY/YUJgez1GS1BmWVAvLFcxfGtmNms+cCFyJntpUXA/RHVwPWg9''@;'; put 'put ''RSFVMiJpPD43NXc0OjskWEosdF1pbSxwZVg2RXhNfitRPllqX0RlalFrWkxUTixNS197clAwemo9P3pte3hndjVfX0M6OnRYbHtrR0FPNUgrNUlqeFBkbnJeSjowez5nLjovVl1kRUBQKTNSc2VOWFdWNXU4JDJPVW19dTRMSEkhLkZNLzRoRyEsd1dGVi9sVzx9eExjRkRbIXVgOChRMn1KUkIm''@;'; put 'put ''b3lMajYkOj4iV2hTbypRQnBmMHFHUT9OQDxPdVBZWTU6Nz0lQGxoOT0laDNuWH47XmszOVoqRzNzXTlPMltjJnJbb0gxLGFVUFpsZS9JIkR5VlclQGNMMj9MOS9AdDo+U3x2M0N+YCFpLzgzI0hJPEFbWV83KkJmLmp7bmpKcGBtPkNxVE0hPzVmZCJjXjNuTltXY2pWVn1GcCE4PS5HSCp4Mj5T''@;'; put 'put ''bjlgPWU3elovak1aVXl+QGJKXXA1JmJ2Y3BIJHU1W1E+XVdPPmJtU3koMD4zalowOEJFOl41YjMsZG8pTD8he3xMUTJyNCUkSDsrdUdgSCFNJVs2fWJ3UDlCd2hySDxOIyNURkZBbUByTDMrLisrRHJlUTc/anRJb2Q4Pkc1ZGVPKHcyV3RJfFA8MDNfP1Y+U1JefjdPZVFnfj1XWDdLZStfQH5J''@;'; put 'put ''cjhpYislSTA9V1kkJFouSypAKjslQDBtW1E1eXNASmdlOzlpVHVJdGliXSEsaDpULm8yO1BwcT8oM3lIZCgkfnV5N2M0bio4X1tveEVuciFzfCVoXUZHTXd1dndEa1E8PS9hIjVqJGo7MmNqZng8OGZIYlY0OihRfVR2WWRKQztUSz5DIW9bIUZ8PHBSTDVNZWpOKEBkMmVaZj15O15aYS49JTs3''@;'; put 'put ''KDUpQm5zfmpFeGUpS35HUWYudnc0Skw/W2Y1b1JObUwvTmBGQkNpb3ZyVXZwVFNwei9nMXh1XWNdSTQxenQwQE0mfS8weEZLJFJmNH5Re25MQEpuKW9SSnAuJkF0fCo4SUVacGZLSUhne14sSUQrM1k4eHkhXmB2Wn1qPl9RISFZSVkqTy92VWtOPGcxXWkhTkZucy41MTNta01FUy9rPC9DR2Q3''@;'; put 'put ''I1N4azZlNTtFazs+PzJ+I0xEPnE3JF0xTGNRM097YEFaenhGKWMjaTdTdiVXSihHQzghQHNGU0MwIlgpWSVVJkh2YWlqUFo4JWM8LGlreyQofV4sPFA0OUBiKiVicnxfPld0TU55USp2YyNJUFJiOUlMJSIqW2ZPbUJucHxINk9JejFHWXk5RmFkV0NKWk9iRmZTbnRYLyZNI294OTxIVjAyTD5n''@;'; put 'put ''ODtlQHlCaTtDZFNEY2hBN14oNyYoZVkwTzZDMT0iSmpfRyZyKlhZKl5uNCooSnZrJERGMGk7Uj58IVpEJmJlNXVAUVIwMHVYV1pZOFVaTzEyXUhJJnpzcWp8b0orK0NsOT5tODdFSz56ZnNoeUJsUlgjYXhQdzJ9OURgSEd6YjVDYmNWPSoyZTopR1d+fjdJU0lNVmJwRXghVFhNSTYzNFp+K1cl''@;'; put 'put ''QGpVa0JtMjskVkZXOm9qJGB9IUhMOzB4T11fWC4we1EwRDd9RVE5YWlhfGRTQWZ7Z3RneHt+dV9IcFNVM0lIL3hjViVmZUFXQ2BgcH04IktJU3NWanptMFlnTntVQ2QkPGcuZlc3fjRlVUpbZDZkfFAibHFwaGc3cD85IWZfWEF2cGNweVNRVmUral1vKDt0WXohUTBje0ZLOmBSdSRCc3l0RG1u''@;'; put 'put ''eVlEOy4uRnhMbjhkV2NfTWBvdnQ0WSxqX1luSVAyPExSPmhpQzdaOT1JUWFEJDpkWyxXYG1POF1iPUg8aEk0TCpjYkZ3LCgqaiE4T200QG1+KUhoTj8yXlhvVmNDOm82Xyg3Vy5ScnpTOWQuP217YHtGTFIvQy8kPUx4TWhodipEaUBYX2JfJGFVMyZVeygvWFNYdTwocDBlZXtQdDZUOUNTIlo2''@;'; put 'put ''bWN0ZV47L3dRS01OaHUmIyl8RWFKWk96aWZENGpYVGc/KX59SkhodSVeYnZGQVI/XXhNLHxfN0Y9ZH5COV99ZFVBQzZrTUdmTUZnLkN2YF5vLlRzNzQ3WDVzUFMlMEp2clhvRUEoNCw2MV5zblVGd2wjM1hFWGdWcEspUkhmQDs2UWRVI2UzZ2xjJissSiFbNmdVSiRFQGRVNCRDaTc8UDgvPUlp''@;'; put 'put ''eD17MVdtL2hQe1FYL01JWCteSHFraFYzd3w1XnFgMjBRbSFvS1RCOVV3VSt4I3lqbnV4MEc7QXNiVXRvQEd4UXBhRz16dGR6a1sofFFqOyMwXS92JmhmQz9NWDdlXXEzb08ifS9CVDhie1JlTmQpfWJoakF0QSIjVXBzflJIXWBrRipIYlJ7OVolOkRlJihrQH0/YjEvWUR8TFd9JU4jTF1HQHJm''@;'; put 'put ''bmhJcnpASXlmOXB6T0VpW088cXJ5dmpjZ3k6TkpOPHFwSEh9NTMwUTIha3FnNEdjfWJxcTB5cHNbfl5HZz0qK3ZObVgmWVJ+I0BRc3Z0cyg4O2suSVY1NFBZSzI5OCw9a2AhP1Z8VnpXP1hhOzM0fUAsWzNDZlN6TDFxYWsvNng9JUB8UCN6TjcuclVGVFE+O01rK3tLY2A/LCxPM3Z+ZmNoPW10''@;'; put 'put ''b0ZDPnI1XztWOUpWaH1TWXYkTDlfdVQmX1tKPip7WnpPbXpJdCslPFQ2aF4kS05mImskIk1kdFZzZEMuIjY0anU+KCN5XTlxRlZIOyJ2I3hhPGRbM2QpQDRMWmU7S0NDOn1hNGc+cywveT5pWEtaSy9DbHgsQ0BvJT86WTBwXnJuSyprImdDNTFVKzhzIVRAJHFPcFd3UTEoaFEuNDc4Uno8YGM8''@;'; put 'put ''cUVpMnsoVHFOTHk5O3x+JlZLeXFXMkQlMkVadz5aMyFgLFo4Yk9OIXY0QXYrdUY6UkAxQTZMVDowdjEub2MkZCNXQGskWGZGUH1LOXVgZkZeN2NoblVAKzdaZTZndUVvKS9OYjk3ZDFCOCEwMGYoW0kzQlYxRWRsKDtGPGk7VztDVzZePGNuc0lHaSRfS2AmXktIWWpNNmBzbWVTaF1tJDBLYTRI''@;'; put 'put ''PWh5flBxRHp5NGBnYmRTIlhJWGZKIjI9Plt0YWAsPUlIeklvUk4+RjRvPzNEQjxdaElMUXcubUk/Sk5ZQjV2PXhaZ1c7Ijs0OUZfPl9XWmh5a1Z4fVY6bz5pQ3lqQ3dPczVLK2AwPkNaJC5EWmRARDt4eWI9QmIxWXBqK1VZP0ZgUjB9TSUhM1NbUSx2VktSYW9ien0xKCU0JD1WZzBORC9LJmUo''@;'; put 'put ''cy54PEokXUFgW2FBP0giIUchbXsqdXE1RlNARmRKSzZMLFBkOklMNEdXai91UCVEKDlGTjRXWE4sUmY2NFE2MHo9Q1pGNnRnflREdGRqckB3PEh4OjRyfTZiWlhzY1NHbDVeJFVUL1FRfGprY1NHQEdHXmo7WGEoSTBnUXt+UCsyNERCNUFaUCp+fkMuZnpHUm0jUylmNT4+Vz4ufHtaR3I3KUpM''@;'; put 'put ''YXYjZkl9UzcxQD9DSkJTWkxKajkxNCR+I0R2KDZPOms7RjM4dUdvUnRnSVkrSGVfS091RiguJlZza3l+MElfemRFMD5kVUA7PVlsLk5aKXpSYzpMVXJdV19XU1RWQ2NUITROVT8wOHBHM2FERFR6aihhYWw4ZDpVWjZEa2NAKDIoNFRUPzc8OCw9aTNmP3Q9R2xMcmkzY0lXTW5HQmNBdWl+R0Ah''@;'; put 'put ''KCk/XWJsTVBlbn1GXXsuQV9NMSoxIjwwTFpiUj9eOl81PFZBdHpXOUsue0xkPSYzdGwkUHFkby5CWlV2Q1kxUFpfe3B6LkVTemNZOG1yVEQ2JnJZPXp0fmpRZT9FJmR9b0B0cWM3Zi9hZDNvL1dlWDlWQSx9a1opaVlZbEdvUF8hOjhbcXV3TT9obyZ7YChGIWlwV31dSkg7ajE9WmguMWAiIUgm''@;'; put 'put ''RlleWikkPl8pVXlkVlA/VGZtVE1tajFzNyJkd3kkMlBNPiJ9VFNOJWMlPlJEUHdQWV1PeF9mMEU+NEJTVVQ8SmolIn5kTnVqN2Q1YkFJSW4zQCF5O2JsZCl9QykxfmNVX1h5REBUTXdfX3J4YDxzKHhQS3AzYDlAOHVXP0dyQTh2P0phPUIkN3NCbWdyZSlbKXUqNDE+PXAzMEsmMTUlNHlLQHQp''@;'; put 'put ''SC40Yjx5azlMdn0mVSliZFhHU19uSHlTfkJFPWlMSCI+cDd8NyJ5LFhtWmk+ITx6LC5ycStlRTp5VFZsRjtvdW19PiRddUR7cSZAXWhFcFFrWDV3NVJKREZ8ZUY9RzVDeE5tISVSYSIsYkNoYUZnKmImeV9WTnhESG9gbiJqdy41Onk7TjlqQnp2QnFfdmE0bF1HKChRfVZ9NHdLKjY6RXtIME94''@;'; put 'put ''YkNPPkhEO2cxO3p8eWE9MCohWGZQSSlLPjtnRWYwRVFzaEd2UVJuIyZtI1pde19GVj9eTF9VYiNHIVlDSjRoaU1uUjRaR3VjclUwI1Y7QGhIQ0BMVDt7MSQvPHNFdW9pcl52ZzkrJGskQ1oqVUxgdk97c2FNZld2UHpjOH1lc0ZKd3xEPVEjNUV+Sl55bFRUdkJESEBBb09bdVp4d1lYdkpqX3xa''@;'; put 'put ''ckdOTyRPOXh3fUpTYkZdMmBXJFhuTGwjXmZ6Znp3R3RCV0QhOT9UU1RWR1V+NGldRCVvRSl7LlNuel0seyREKEZ+JWc5OXFjYWMpe1soMDU+MTdGSUJme2hANCpxbU9WI3FtTnJ6K0N8RHcieCh6JDV6bDVhSyY1ZmZ2UiQ8Okg9TX5vZTIxdHBgYTB6JnFYYz5QdzZjM2xxPCJ2dVpqdSh9bzFC''@;'; put 'put ''ej1mcTUqbERfV05WMGMuTXZIXz9hSVVkfmU5JXsxRUIjRDdYYkExY2psbjBeRCZLYjM5WHgvYTRHfS5PSD58MlpZXU5YO153JiE9RV8hKmIqQiMiKDIxXUJLKltBdW9xZTEyJiVhUEJAV05WTjIoaixAemFZQFZWbklnWlRydF0mS1tZZ0JkPFlfWjk4Q3YrIVgsKFE8UmBNPz4ybHs+a0NAbWwp''@;'; put 'put ''TFBHbEtkMkspPmB2eXk1TztgfDdCOUJ5T2RSanMsb2BKRXdwZTRwaygrRTl5RlhiXm4rLD8lK29uK1txa1ZSbVN6JS5vO3ltcE0qWSRvNl5wTGRFYjdBNWNwVElVXnl3YTVJRExqMXdEdi47ejpMVj92bHhFWkg4UStPRFFYYiReUmI+TVBJTmxXJjp+I0ZXQW1eP2U/cy9IR3p2SnhAKigqTnR5''@;'; put 'put ''bk15M0xEZGxyWE8+UT4hZ1F3K1ZAZiF4S0h1a1lgUW1Uem9aJWVqKmh+YmtWcXJ9MHA4aXB9ZDg7NSR0JUhkbW1EPCVGTHl6dE8rYXl+Ri95eWBPekhKL1BtZjs3UE1iajIjWCloRDxjTCEybHMpTEZdXVk/SD5Fd1BOVX5Pbn05c0BpWDZjN318SWV7Omw2XWs+RlMiWDBzRTdJPEBMVE86W1hY''@;'; put 'put ''RUJUUG9ZdkVzeEl0VncjcDI2KU0lW11vfmEzWV1oMGd4O010LiVmP0Becyh4STwsb14zPVVfamkscmZ6OGJ7SjFMckI+QmlIdSl5IjVjdjVKZlVkI1ZdKW1LUUFvZHxRS2s7N1pqSENiMCwsVHB6fngqS2AqIW8kd2hZUlsvcTxPTDdBISElbFppdjE+b3d8L3crd0FlW2FSZCVyIVg0SkkzVk5z''@;'; put 'put ''TXAybSZNKFI+KEU2eSZsNk86Uj1BaXdWcmZQdChkWUpgL31HPiN+cUcybDVhW3swKXFwckVaRC5sSWxbKzcvTVZ9NypjeDkpNEc7TzxhOTswOHQ7MU1STWBWMDs9aW06bDVLaERBJUJwdURGSFUyJUpwZ0hVRSVWcndYK30yYUNkfGo3cnU6dXE/MllIREUwZU4+SUVTZDdAPGNrRytjb1cxOURM''@;'; put 'put ''IysrQ3tFS01acSU4IW4hREtddjppNVVUNXpreWtDV3JQeWhoRn49JV1yK3dgJXhKZGtpI2NSe3Bgfn1nKVJfdU1ecDA5WyhJRC5MSDV4JDJ4RkNkZEIuVVouXzNNcVUofCp9Lk4mTWR8enJCcHxhZEVMYl1kQjl1QkwuKDltfH09W3J2bWBrV3d4XmBWUmwjOmNWLnBgNFNFOnJsdTRTei9RKmk/''@;'; put 'put ''ImxDOF5KQVUjV1EzIWtbWWgvPmFJQGAmQyRUQ0VZNkRvV0VdKm8xcC4/SmY5QnA5Q204JmhVcUhFUjZfXkhvenRpR0FKQFdgIUlbYjo5Jk5XbjwoVD1ab144YEFkaDR2Vm8/RXxKTltuaHJMW2ghbCFmNWVscjN6a2dAcnRjIiIzQU1gUnMiNzckankhZUN3TkQlOn1IW3R0cnRRYFB7bnpwMndg''@;'; put 'put ''OGF3OV1pMWNqRDJUVGw0MUMlOyk+UGtyRkspZVpbM3NxNS8yJERAL2Z9Jn5+Qk9AbDVSbGJbZEIvUy9iTDJIJkhidkJLUEhaIUsua3BkJHo7MGtAQmM7ImVfL15ke25RNGVFJn5Ybk1QKyRvNkk0JW4wMS9xdz9edk11aHZ3QGddQHBtPVh8QEJtJiJVfDs0Vz9lRj5sNXVCK2x4TF5pdUo6VnRY''@;'; put 'put ''bU4oXUtuOSYpeE5zc1BVYTx2fUVWO2xeYzE1dDROWTlFPkhlVW1vXVZTfWByJS9nTV8sPT17bndwYzZYQUc+fXtUQ2dpJF9ddWUjTUkrfHlIUXlMSGhbc11SPkphTFg7Wn0sTE5YTGQuW2VVJUhmM0I5KUd7YFZ5R1BxfVBRcGV5SiZVaFpjPEtoPW0qPEwsdGhQU2dgNzkiN3dWVXV8dm9mWCtW''@;'; put 'put ''cG5aXXdQSVUkWXs5R11paitMcHpRTHpPUEshe3dLXW0yLCksXz5EL0RvVis8WzcoY0VIT2xAcDl4YF9JcHJsRlYxfHVMdShBLk18NEVidUNMW3BTWHg9UEtjJWZ4diNTblQ2K2EkSFkvIkF1YnFQa11GUlpVVWxIREVxJkZIOFVPcmN9WX5XP0pqOSR2Qi9ZZDooWDM+PiZ1ZTdHJD9aNSlNdW59''@;'; put 'put ''VkVNYjYiKz9jV3IxMlFxbD44WiM5WWJFK1BvSmMzTTwvRSh+bXB6JURHRjY0On40PyE2R206M0wxZTp5WH0sQEBOcX5tb1BXIzQoQ3JIa3E8SVFTUGNpWV9USEtjK0Y2VT1NLlY8eSVUe1t6LyNed1IlOURqUm5xQlJlM3BMRWsxcVNuWWhAXUlia1tTa188RWlUTndFWlImTT5CIyk1cFJqZTA2''@;'; put 'put ''PFFFc18ubUhYJF9gYDFlUlh0JD90ekBPSiZSOjRqb1J0RVcpP3NQOmNweiVIdn5YYWdUT0laTWo/MGZyfGZKe3lqQDtsfF43JEpPNkt2cVZLOmwlN10rVSFbZX0zNGdiMkc5Tzl+JSRhdmF3TjcoZ3cjSXdMLyhkKTAxaHgmTH5AUU82JSI0Z1A/bklJez4/aUxVW1g2eU97Q2ZQLko6d2YuayRY''@;'; put 'put ''Kzd9XjpbKT1lKFhkNUksU2QvPHRZLlJXXSovRVguZypuR2A3Q3dgV3ZDOnhwRnNVMkJMTCtKUC95N1hZYyxneFBtUSsvdFVPSWRrbiUwPih2Lzs2QjtbUkc2NE0oMiV4V1siZzZtLHpeZyptXmhHRj8hdnx2cGQ9ZE5WOEEzW0NhTk9UdjtgQ2dFXXFbbC5bNUw7dkJaVCRLTDQ7aUhqe1c6KGsx''@;'; put 'put ''bHlmKmNZQ14mNU8iWkdpSDg2WkA5a0VtZWd6X3dLLkAjanQwbHxudio3WkdKe3tLN1MsbWEsSSV8R3U3WDw+YSphTzgkOGwkOCU8NjkmaUNHa1khVDlfKUJmPWJtL1t8VH1Tcylkci5LI3huW3taRWdNfk5+YmRgJi4pQWVaViE7UEA8U2l0fCh3ZTVoI2RkPUQ9c1FsRVt9WDtYZSxxdHdsZF4m''@;'; put 'put ''bzo3TC8hKCYzRVhqemw6SGM2Ri9IfkZZaUNtOXFQKkAvbltfTygkS1ImVGUzMkJJXT5SeFs4TV0lXm9LV2csWDQzYCt7UVolOCpnSkFLaClPVTY6YSUhW3pfdClne0paSjBKMCR2Sylqem9FcVZUUn4jcm5CYXliQixESD91SC9afFt0O2NVdzY3JEJsSjF5IiRMXz5NVmc+VHRHazckclJEekIx''@;'; put 'put ''TiI+d2NsVmpCIUQ+WVhSMCFVYUszcyteNEp8RDVMdEV5fiZqSCVUQ0hkal0yXUQiTH1SVUkpKEl2fGQiKDIpaW4qb2EwSW54JUFvJXo/PnJ5UiFfWjdPd3tfPVE/OTdFL01hSkRrKnpmUVtXOTgsInF2JlQ7TzAoTnA8Rj8xa3V+Wn1hYXxKLzVJWlI3LmxIOGA5fEZPT3JSI0xMfCYyRFVLNzRJ''@;'; put 'put ''Zmw5ZVB6NkJlTjkqRXo6dUd3XTZxZ0BYYiYqL3xDTC4rN0VqIy9RYEgsMl5ucENxQyFWRFIyXl9WJGA1eE0+dFYve1J3Ukc/fjw6aThgX0ZafTkwK29nISZdaDdsfCJsXyhEentwLjFZc1tpMU9qQHFsUXdwfDh8Im44eXxLYW5fMz95dnk0JTtgXy43TGNMW1IoRH5VVmJlV0J+JV4kflVCWU4x''@;'; put 'put ''O2RZdiQ5XmpyZFY0dEQ2VEpBdDlZMnxwS1BdQyYmSy5xQm1GbUcpcEhjTjAjRV4kTFV8Zzg0LCxldUxjJlU0JXBIYWZ2U0N8JHsoOmRRcDdKTmA8RmMyfHdyUUg/T1BUKzI0aVZnK3EwKyZxOXRGdnkrfStCRzY8V25rJGY0eWYhSHtiX3A7VUVTKUtIWURmbUt1dngyVUhhNHNZNzY8S1Q8RVFl''@;'; put 'put ''OWhBOnNlNTUyPHxASX5xRkxXUjYpPk5iXSxpNUs8cHEyPzdRZlJtKSF+SEgzai5gNkM/Jk40KD91LFZmTys5S3toNUU3RUxBZnhTPFYjbT8+M1lGYVJeK1lGRDFlV3FTSyZafGJKaHA0PSwuUFNkOGhFLmU7R29aU2ose3E+RjlfbE97XXxLOUlrIUszLmZXbmFAamU9I3BudVAvQ2szKi9PZnI5''@;'; put 'put ''X0IucldxWC8uOzw4em9tKkxqIyxOQW5yUjdbNGhFfEtXZlNmZTdXQmRFR1E+S2VPUlo7TytLdzV8bzpBJTwzOnpXeEVgY04xYHk5aGpncDRYOXpeVCtEQFZHUl0mRjhdRkVsLlROUmFxd3AkSl1jJnRRMUB+Pmg/IVZSPH5JbXdAR3dSMzEoJFkoYCtGJjNgXyUkInUhL28uRFlrQ2FNSmFCZz4i''@;'; put 'put ''QD5yPHR7VDZ6IW5aZjQkc3xZSF5CSGJQJE5nQEMrd2RkbTgjZGteJTFaLFd5XW5+a2ZnJEB9P3pma3pAYSRbal5zYWROXXU4SGxyfHtGOndldDY4YzhSVjs2W0d8bEl1T10vNzYiSmVMS0RaJT0+TTNEeX1LMm5rdDBsTzNAYDxAK1VYTjM8eSN7W3I9U3kyZTE7TnJne1E4bCt0QH1WaEk/TSpu''@;'; put 'put ''cVEoRCgieT1bPUQhXUVoPUFTQitKUCFqVSx1bjQ8RXYoIikzSkRKTEhzZG87QyIrR2ZQY0N7U1kuZU09QDRPfW0mclV3XlN6VUtSKjpPKihyJl99TDpGbH5odzZvfGZ0VFtOXndgWGc1dDVdNzx1e0N0eW5OJGksT30pa3gsPXRzaGBMMHR4TUBHRl9zNHc6PSlwN1hyTC54YCtENVJiczF2e0Al''@;'; put 'put ''Wz18akUrRlVjK3RfeU54TTBgSHIqbig5YHcyMko2UHd4dik4QiR0TyZtaTxRIlR9Sy9+fWchP0dRUEtdLkIrdVhjUHM/aDV1OXRCXTFQbygkWldAQ31DaD8pXTtKbDBhKVU/flUyeSZxWC85cyZkNjkrN059JG9PXk0jLDYjUTU+fCJsNisqaF5UeT8rPjsmfiRkIU5ZS1N5WEtvcV99aXBvMEdX''@;'; put 'put ''IlJEaihLdGFpJEFHYlEkZCNwU19pNFBuTWEhb0tickhIa0ojRVVnP2guZmd6d1l+b0wzO1FjTzpLPClbWl5xPkZESnV+ZH1nTjBMNHZpdklaKkpuRX5lMjcxaUVPLDduXXBJLCosLz5jSlpibzhBdUdAPTkpWkt4I1t7RDojY3hUb28lfFRLMG50Lz0ra3xacFpSSFVjbDlHSHZVZUtHPzpuJDAw''@;'; put 'put ''SE9BPEFeS2MuPnh1RG1ndFcpNSk0KV00bCQkKiM/Xjl3Q2t4cGY8P0xTQW1mKGlIOD1UYnNOQGJLITpXKlQ8UStuWWpobkU9OXZKIz9xaEs4RU9QcnRyaTNTMVcqSjZHSHNjMmAwbXFiLHpUWC89blAvZkJtNjZjUkZtTmV0dSlzJmNdWz9NWHlUWlA5VDUhKWpXZ21EVzEkdGQvKTx+LEBLNHho''@;'; put 'put ''WT9TLDU4XV1UViU2PTBhOz0oK0EiKFslP3UuW3VlNn1qakVJOytVYXFEVitHajhBWmxIOCsjIl5DXnc9Z2Z3WEhpTGRgWE5YUkxuJkNaXn54Im13dl1mS1s5OmpjMX1AViNUfDE6bFJFb0c5JTUzVGF6MEhUeEEkZHkkOyhUODFHeiVGfEV1NVszKktpNUZDVHtrOzlbU3cmTUUqdT5yZ1c/dWIs''@;'; put 'put ''RmZGbDF3dE5GaVghfXp2ZmhDOWQ+azZlLy85eFFrK0ZeNTZRbVk8KUczeS5fNEl5RlJSLnUwRzF8NUM2bTE9Vjh0MloobHE2YWUqJmorKmBbXmElbDx5bWtUK0pSd1Z5VT1ZX0t6WFlgPXkmP09rPHF0cSgrIVEmUSY3eXBaMGh5M1lwYEohK2tbJHteXWpJWntqNHlINDh9bTFDYS9tI2wydXsk''@;'; put 'put ''XzQ+eCp7ITNiYWw9ezd1dzd3OG91czZZVXthb2Z1bkMjWlg9d35VIyJHcWZYZSo+WClke3FQejIvQ3ZiJnZgfUgoQmYyTD1wLj0xfVlDNE9JfmloYHoyMmZiZltnLFF2K09bXyUxTEQqJUlOTCpsRytiUHZNPFp+P2lEMUBOMTo9UTlhNXlvIz9gKWFeQyFJVVA9V2xuQjclK1kma0F3Wk5DL0Zy''@;'; put 'put ''SThJJEVmN0I0d2JUayZROHM5JTMheUU7Y1hhYHguUDQ7MVJ5Knx0VF9xcHh0MHQuJkllcWUhM15YfEg/OkUjLjBoeSRMKVApRm9tLFR+LlFybmN8TVpRRzVvPy4wO3BQaSZYJn0oRH5TN1E4dVc5X25DQWMkc1l7TXd+T21uMjgkeDlKYCVoXzQrLll5OWsoY0ZtO3dmK1ReWUxWZz9AYG0rJSU9''@;'; put 'put ''MnIxNW9Tdzp0JVUxeFhqQWt6QnwuSitKOjg3bSRKOzJERzhtLE1JcipbUVpgI2x2UyY0VD94PmtyX1JOd0o6REtIezNUVC9jSD5OYnkudl90VFd9fHhoSVgjOE9jcnIuWmM0KCF2RWxFI2oxMXA5QTY/X2JnPz0hQkViTD8jTTc+R09ZfDF4ajtIN2VHbyklbz5wNmZTXkpRPSpLcT9GU1NZREs7''@;'; put 'put ''ey40dFh5UVNLTSR5c3wiWyR7SG5yJG5tXkBkLmAsZndId3J6MG45TyJyTzpeejY/NXlJci5DJXVkbyF4UGxOfCFHbzFseUkxLz1EVUxlQEQ1Zm5VXjozOUE4YnFERzFnS1FeQGtTdS55YUBBZjFkT0J7cVshKGdJMU9RT0JYRFRKJkRvLGR4eSpSPXZ+T2w2I0dmMXBbc3gyQFBNV2I9d2ZnYkdI''@;'; put 'put ''bEYvc111ZHlHWUlZMS55ZDRzTFgjNlk8aD1oai5QV0l+WztqKVhQc2pzJCFdVk94IyFmSXZiWWJFMVkhK0ZsSFo9e0Y3bzwiLzFTVnEhOXw1Mlc7PjUuJWFESClNMU1MPSgiXn00fXV6dEldNGdLZz82U2ZWVzE/YGU4VkJIPChZflMrTCZfWn5gNUZMLFJNNCVefWA9T3FVUWoldnA0JCpDVl5g''@;'; put 'put ''Ujx8anBuIUxQeyJZbWRjdT42LjA2bH4zLz14dkAvMHE3RGYubHxlPTpIPU82bVl1RGVJeTVefWZpW1VRW2Q6SWFwIjFAPFJCWC9nQnkhd3tRKyVNcis7KGFoNiVYZXNvbyhvYXh7dk59Vn1QN0s9eT96LzM8Wix7ITs3fiFvaEpYeSJRckpqLF9OOTwiYUl2MWhCNDxyIkdFNXUiRCp4Q3smK2gr''@;'; put 'put ''e114Zl9MT2dNKGpJQDRLJX1qdH0rODhAVU9aeEN9YyElaTVmXi9rXTVNfD0mYVhLK1smNlg8JjxaWE9HTXt9Xj1rYVBsb11wSmNqcFd5UntaeCNvO1B6dEl6MElkM0Q0QTw7bTV7ZjpqOiE9R3xvYHZGaVorLCFqKSJDLjhWfU5CKWVvLHdzXl1gRFFPXVkpPCU8Sj47Ul1SVXRvJDNXN3Y1Iihq''@;'; put 'put ''WTJIIXg3TjhrUEVtT0twYFY+XmY6QXIqPUt4fi5NVjpLZ2JAZy53V1FodEleIVVlaUF4Ok9MLnQkUXhGUlckL3dsJEBCaFtMUnlyPnlgQSYjSChRW3UmMSRYW01qOVZvVlQ1MVpXY2BOYltXWWQ2czdiWUBFTFVzSVNhQz57L34pKyt5bUY8cGlbT15CZyVtISE9KkRwIk45RFAxJCM4T0MsKjV0''@;'; put 'put ''bHcvMCNYKWtjciguZiVsaV9fS2Z+Jl1WL09KdGJSVUY4fF0xSyZbYjNLPXd4Y01NMi96JDcsSE9ESTdrPF92dFJpRHxkKHhrRi5RRExOdztiW1opfCI/fntGI09uVHFzfF82ZiNZfUxEKiNSdDBOTG1rZztmc0NXO14la11qV1gleiRVUElEU2gkKjFkP2dWPTdwL24idk1UaXZMezx9YHdmUVBf''@;'; put 'put ''Vi5bS0hda19tbkAlMDkyMDRlezklcldhMHhQZjxTKk42NTtVNDZEbEdlaix6fjlfbjA6dVM/ZSx4ai89SWReP3BYYT4sL3Q+NStnT31OO1JDT3loJlM2dFBJRCMvR08sfnU7WUA/JSxTYWRtITlpM2IlJEVAMWBKMktfLGlFYzlFVG1uPDE7U3VjNkVlS2RMOkImLGVYM0IuSUFFS2VrUktqbis1''@;'; put 'put ''OUx6UiQvbkxRPSMjaV8hYm5SZz12UWcrfGpROCM5TFo1b01GMTouXjdyS0J3Lik1U3tLSW0yRkd3JE1yKmhUNkp3PTFkWUVbRSUzfT4mT2ZKKG5od11vUGkyUDpEK2VsKFN0IX4uPkJFZjN7QU5sVyYpVnhyTThSYGYrPyk0b2B8O2J9VjBDa31RXytTWzZ1X1ZjKitVIVd6cjE+bUk2dF80WU5W''@;'; put 'put ''WiVvODRwXzdhMCp9P3deSV8ubER4NSpiTklvcShyJj8oMilLMCV7QUx1bV9MdkpaKyZrUFFkKU10Tl8+VltKVlBdcixNaiFYeTtDUkNIfTc/IWt1I1l2TW86KTNTaVFlX0hDaT5dK2pnUmZFMlJacFRdUCVDdG5EX0BeRy9HLihyMkkjbmw1MyRkIjouODg6Q3p6VG1WRkJgTVNoPj5QPURdInRg''@;'; put 'put ''Oi5TPCVePE0vbyZiOXlqeysvRVJIJTJxWGJ9U3YwXWp0YCw/PV44QkJzZTBaTyVXfVtnMFNCLk8jJmt7UW1UR01uOXBNOFRjcjB+IiI1PDUwYUYoI0MkTCgrdzs6V2NMWH0xYVNpOlpVKFA3bUowQHhJQ3l0NWpDbixAYnckRFNMeiEocGVUVnJHTSwhWjdbSGJffn1zYWY4V1M3YSIwLCZPMHp5''@;'; put 'put ''Mi8kUmh7aVgjaitmN3Y8UH5aLnQqeX5daCxBenlVN3g5TGwkKzQ4akZOc2EhQ05MIV9XbCk8cyojXk5hXStBN1JXI25sPDJ8ZmYiTys4MElKZHR4ZmRlVkVGQzBZa3k+Jj1KREVyRmt3NCFwTSRBMl1kMH1KSUh1PFVSV2lMVSZkVk43PEVNZUBneyszVExdZilmNiJYKiQyV3g2ViNxZyRIQ0gl''@;'; put 'put ''JjBkZm9MZXFjQUBSeUAmbXVGRSF8QXcuWEd7JHxwT0F7RzxZNHJZKUhkIjxALjI0Qk4xK0V6NyVBQ1tWXl9WIWZ3dnk6cihkaW82Tzw4ZCojTz9mXVM8K3g/PFZESDdlXU9CKkBvXXh6Vys0ZmNQR1Y4RCVMS1FaUjl+QkpeY3tiZTxpKVskb1AwJHpYSHd6cChGS1lmWmM1VHQ3Q2M+OEM9WjxN''@;'; put 'put ''UlRhS0F5X2Bab0FbUXxSY15CaFpuejJBckpnSV57QWtGW1JPdCtIOmc4UUJAOiNrMkcweGFkfU9+WlJfRUNNQjlVVjcpUk5eLyJgaiFJQTtrckc1a1pqelcvdnJPKDIyMHkwWldSP2lWajBYfGdZdyE5O3U0YShHUm5yWkc6Qm05c1ckUnJlN3t4XXFVL2BpP11nK2IhdjJzIkNyenhjdEJKdkYu''@;'; put 'put ''TF5+K3QqYEJKNUlzaTY7KFEsNHNSQk86R2V+KVVXI2hnbVVxLCtncGd4U3J4djZablV3elEyXzZmb2t1aXhdcXBifklzSEg5SV9QSmZSJFs7cnFOYlVgWHVCeXhXRXlEI1h0byx3ZGg/I09JSSgpMWFicGdwL3czWShGfU12OmAxQVQwPUF2aHQzPXVJLEQiRH50ZiFzWjJNbShycHoifiVVRndh''@;'; put 'put ''PUxVNyRSMUlVLkBEQlJMeV82VGwoRCQyUnR8ZyErYSRBKSRbYF00YH5Wc1d3NVowVDMoemhuN3g+YiIuODhuTl9OYTh3UlduJVdJb0xqK3JYNjgmSll4RSx1aVQ/Zzh0eSFUVnh+WWovU3ltKEMmJGckNihCbzQ3dStWOT9IXzlNWCRxcytFd343fkZ7b3F1aTpYck93L0Z8Y0paK3JsNUQzXlR+''@;'; put 'put ''TGh3TmU8ZSlpK2FhTXN8QlBxYU1EJWlRZWp3ckhJIkFqMiV4N0dbfSRMdTFmNEgxIm56dlcmdlVsSTNTP2RPdFNbOXRmXSsmQUpiTTYzYzBXWEhgPCVJT0pfY3w6IVpmcC9nfk1xaHJiVWE8MHJ5WmgvJCxkPz5QNWE7KT5lN1hINU0+LGFQblRqSUI9Y1hFSywhWkhUNywraFBGQVA4X0h7dzpd''@;'; put 'put ''fn1ZPldlSH5bXVl8QT1KZjlVRlgram5MYn1ea04oP1cvSVZNdXZSXktMaCF5fWlIaGp3alB1TnRhemp1Tz0uWGE4fnRidHZNWEVRIVlfUFUleEhNPSsheSxQeEVOdTxmbjtBNDc5LlVBck4vQnc4Q1tfWjJWLnNLeFMpQ31ndkVURDZ0WmclTiFZQ2djMX5hdVo4NVZCQ3hdI3M0dUN6ailVezFq''@;'; put 'put ''bjE3W15XXkZ5TEEpLlhtKXxrenkjYCl9ZjdrdlF7X1EyWWQudXNffnI6aXNYUHtefjVoP0hReER5QVl6SHBRX0o6VDM9RkljNm9aIURzaH4mVy47YkghSSMqcy5bXUp4ST4pPzRbPU1DLFc9TEdXZm8/S3peRVhfOVc9U2dlMTNhL1YsMkx8RC4hPTpgPGc9VFZCND1oQkM9NnRHfXRAP0hsdWpB''@;'; put 'put ''bmFvJEslZCZ7XkUrKnhlQVE1PFp1SDtCJVtPZmVJXnRPVUY1WklAdHhodWNmPyNzQzE+NzF3OS9tNktKbWVINHZLMzVNUWQrUVshXipYYFpAek1Db3I/JCwwcD0mJVEoVnlGdSs3Kzk4eTt8b1EzKF52ejk7VXUzVSRtUyMzNlhwSnAvSzJ9QEBsRXFCaVhGSjh8UUB3RE4qR0kxUzpoMUs9WHk5''@;'; put 'put ''YDEzLnp3MyM9eEUqbGxrUFhnPzwvdllKbHZaQDZIUHspUCh1fVkmOCJ9VEFnY2w8RmI1blgsYUJdMkdZWm82UEtkcFV6ZzUoJE9rWWRDNHc3cElUXXUjfGVkPj96UWB4WHV5fm9mandla3VuXz5CbjNrcUdhQT8sSTVafncxcnNkelM6aHBfKzd2cT5HST5eKT40eVBGWj89dXNJeCkzOXBVcHFE''@;'; put 'put ''dTdJT35oMEA5eUJ2WV83QnJ0T0VJU2k9bkBzUUNxKkE1JlNfK3lMbTZdYzpoejc+cjVlWV0lTCFyPV1TSShURlAoTiUiVmVWUSxQQFE3WTxfV1VxJnhmKS89eGc0Tk5HTiwlRyFFPy5lPC94PXpmZyZaemNUU3pnIjkxdzhhTmcqMUdtRnNMdW88OkllZnIhP1lUMjlAe10yX2FjN1EueSptYV8u''@;'; put 'put ''PD12Zi9ZeTtZZ1lsa2VMSWQ1bWcoSkw3PmJAfEU+akIqZjtRTWVmU2ZMLEJ3fjx9VUQ2aHFILj1pT1VfNz1+RWJ1IWVJc199KWxmKElodlklMD4yfkIqW2xFQS89Q1hCSXhTKEpHWyMsX2Y6aiI4Jk8/U3olNUkmRjVUO312JWxXJENJYF0jeUBGNih4ZDJfeVJ9IkpOTmdaIkhbaSQ0dEV3K3VS''@;'; put 'put ''KSk2Sk9iKEUvWGU3KW9nb314VVFRcitdeCpfUHlpSXFIZGk9cE1+NFl2SiF3K0ZiRVJ7eEo7O21wTFBSYHcyeFVpcWByXjgsZE0rPVN4UlQrNFk6YDY0JiEkXiNrT0x7U3dQYWooemIxUDAzN1RpXUh+aW5+QisqYUAvKSNzOWt+Y3JnNVJmclpZaFg7cnkmKCFEYkcoKW05IUA3Z3FifHNdajI6''@;'; put 'put ''XSMrNmdRZGJSeX1qUVtlYGl5UXdnZWFhfV5aSURFXTMvPUoibU0iSnpVSkxRb0NdSVR1LihRJkthWGY3enZhRi5Afnskc3dqO3QwanxTRT1DIWExZn1xQWFKX3pxP3VOeWgrODpkV2lKJDA9P2VDXkZ6WUddKmVAdFhtdCNxQ0lELiUkZXkyO248cnpTXnNZMlssRTwsU2xBJW0yO3Q1IS5QfUh6''@;'; put 'put ''aHNpVS5kMSY5WDhMNmsxUHI2MjF3bUYxUTB0SDUzQU9gRiNSfEBkJk5pMj87cnxIVj5IfC50WDprYSU2eUpdcylAVyN3ZlZLaGxneiJgOipITWdubCNYNUFHWDY6Uj4iMTw+STlsZUFAa2xwTThod2AlZlprJSlha15kfFBbWjhbblFTdkd+ZHNzKXxvMjVEdj1RKlFMcVEwS1syZi4pJFY5cWw3''@;'; put 'put ''fmVRdFNRO3JCY2ZePjpNbFBWN1FCaW09PGE1cCw3NF4rNFlZRHsrczMjPjBWLHhYOUkre0QzXWVOQUc+ck5qLnpPX2ZodHl1Jkc+fVo6JWUzODpbSnBNSGUsfF9Obnx8NFEoSnI2IVoka2RaQGRJPnRrWltDNTddMG9oT0I0OU0pbVVgeDdXJDNAQEwoQWorJHsmaFppJSZLbldVRkUqcm8wMlVR''@;'; put 'put ''cE1ycnRkUTo4N05Sdjx5eEI9eEVkTUZobE46cE4rSVVmI2lpS1RzOXJHZlBlP0ltTWNUT20wMz97fVZESCRnJEY/NjZzYF84Wy4yZyJrW1slJlFMZTs8PFZNcDMmQUlLNzI2UFE7Vi9pciUmMl9ldTRTNXwieUIsWXU3LmROIlJpWkwubnZmdHUhemF+VjBXZWk1YmtDa2dTaTk0dF5bO2NnKzxp''@;'; put 'put ''Zll6ZHR+MylbJjwuVDJLdTNOUnZ0Nm5RVXBZMzQkSyJZMT1oPG5fa2U8SzVwbD5fb1hGY1h1JGpMNkI3Kl0mYUxyMFErZjQ/THZgMnUvUXxjTG4rSXlGT11vQm1scVhIT2AuO1BbInB+O25FQH5ac35fV1goRnIqXzw7RnUpfktdcTIrNyVLUkhpIiIsTn59X0lqRFlgMCYmdSx8dl8mSzh6OHVj''@;'; put 'put ''OFs2UVNARnVAKipJWlMue2I2VDVYdFkvPVhZWG5zXzA5X2FNaUBVMW0wNFgrNnRiVzRBelcsblk7RmtgMmJUWyl1eDZYRU1APTJZMVo/cXsoZixYLD1mQ0A6Rk0wY05RfD5rcERHN1ZGcVd1WWgybkkmclFlSkZ5ZkdIRTczN30jVEZJbkcyfnxrPzw1K1dCWThBR0REfChDe0w7KHdFbj1DdEpe''@;'; put 'put ''WkMxeGlEbzxEQnMualllO3pKc3pOYC4/SDo/by5tWTo+aGlbeSs2MF4hNF8mXU5XQ1pJTktGSVpnXzwqRl1gZzEldGdDaSh2Z25LSXt1JXdddj9WeHkoYEJjKnBrI2FpRDw4ZUtAMXJoWyp2VzNsUno5KWJGWTNjO0JDKStXNj9ITldDSlJ4NHwmRU9ZdXVqfnIzIlloQD1sdWtUSHJyYT5ReEQ3''@;'; put 'put ''L0xxNjdeT11wbi5JYm4yJnJwLmIlemM2Xy8wfm83QHtGN2g/KFtYW2pnK219bCZ7JkxFZkAxaVljUG0hQ3VDMzRhTD9zOyNuZDFRV3ZiJWI5VnA6IytzVlM7e1RgSktHKkdWUWZoTT9CKzxNRnU4ZEA0L1lJZHElY2A2eT1RNUtsfTJCfDVkfkJVUHVBWUk6NDhJNlcxT25Ha2hbb0BNKUN0d11F''@;'; put 'put ''Mig1YX5GdyJLM2o3JX1NTTxxZDw1LCFWMWI2VyxgYEsoPDk0WyhONGh6dXEodEt1SGVge0YpeS8oUUI7Qi9bfCVnUz41aXlBMUlpcyxWJiglSXQsOD9dKU1lRW48bG53RjsvLl8jOXorSyJ2KUojKCN2aHQvbkIvJDg5TUdVSHMscDVFXzU0fCg5a05dPk11KnF2Nm9DKFBbZX0jUUp6WzldVCZX''@;'; put 'put ''MHE1UzAocz5dZ3RYX15TQDchR3NjW3lgLC9KaFtsRGZnT3gpTHpiaXFKQSEvRkgyJWQweUdHZ1AiNi8ydF9ERG07U1RZNSoxN01aMT5GRF9kZ0JuLGNCQ1NlRUI/eDpJR0w4PUQye3d6NiM9e01yc3BkbGAzY1YqOVk+bWBAajYqTjFAX0N6N1Y9VmR4RmJLSD98PGxXUkV9dkhHM2RJTlNNJjw7''@;'; put 'put ''TV59RVE6MmNUa3hfYlk9Jnc0PyZdRD5ZMjJVNWkmc3tRKHJ4SEk7LyxLNCV4OENeRzlxfTdpTSJHInIvUHciPXxbaERlRzVAQEY0MUVselI0LE54InI8Im1zWlgwIyJtJmF6elJ6IXJfU3YzZFV7M1shMTVVTTIwWUJHbzNZY35VY3hQcF5GPUIzeFlsQEJNbXFifF5VTVV7eExWSWQ3YU9Dc3t9''@;'; put 'put ''dT0oa1JRInRtcktsZW5bd05VIldbZEJURzBdMEB9PHY+d1ciQ043V0tuWl96OTgkRXU7MCFZMHBQQ2FrKn5jLENHSmNNeHplay5UWTl5YiV1NlleU09TakkoNmsje0FqVTdWL25WcilGODlbSVtFNGhUW2R3NkJ1MGNHQlBQL0QicXEvVCY5ej5TLEomJUZCcHR4JSNsd0I2NyRnJnF7RG0oPTVW''@;'; put 'put ''USpxXX03YW10UTohb00wSXd9Kz50Uz1HKFZ5OWhKclNIUF4ha21aR2Q/IyF7K01FanhYa3BFbTFVbHU+LFlbZilfYWs3JWU1eGIlZU8oaUNkPEd0TCY4S1BNZEJlNGlkfGp1LkpLe2ZeRCNXYkthUUEoSV0+KF46SXlpaEx0OSpaMkQoUyVEey9PJkQjJVozX2dtYjA8LyM2JERMb1h3Mm5qTXt5''@;'; put 'put ''WF9OIWJIaDM9NHAjKk14QiwjckltNkZXbWs8ZDF8ZVRsaEp9eHI3fSJ8Mn4ifF5rW1NWWEpENExici9tNj0sX01EalpqckFEN2ZuencibGdaWUlJZUcydio1QFheTiprZEtiVjglYi41fWp8NF19RExRbVhkSzRlNzJXfHxPT1R9OUVNOHAzJWdqITs9eUREI2BkQGYlLCpgUEUrISFyZEtbRUQ3''@;'; put 'put ''JVZVWmYjeEk4SmUqWnkhU01PZypxeH1oc0IoOS9XN0BiQ31wfl8yZngsclZVbCwwTTdCY2B8PGw2TSElfDxhb19vbHNoVyV4MWcoUHgkdT9BSUhnNWxeclFLdDNtMn5Adz5leXs3ZlVQJXZQWXppPyRFZmUhfTlwPSombDFZKD1UYiFNaGZbKE4ldlh7dColfXUqU1YvOjxdP2peRCFZN2gwUzcy''@;'; put 'put ''NXxKIS8qcjdZMGEucykme0RFfnw6QDlvX00rdyxtdURlfD1jWnI0NFFROEg2VlhiIk14dns5Pz5oakY1ZGdhQm0kKyV1VTV1eUZ6aWRySz0wbWIkWVBqMkBeSER7dDkuOW9HVHlHWk42VlYlYyRTQnBic1RrY1VNMENERHREb104Nj1VRVsxXn5rKmc/WWtCb3h5RmQ3P2dlJHJaRlpbNXRkWFVq''@;'; put 'put ''KjF1QFUhWTUuaThpXiIuO1pPUDJeaGtbdC81eU9QRFdNLixzaXdNZlNQMkt5M2FacGB0dGFUcitEOCNLS3l4UXtpfUJjWTZVdHZKP2ldaUM5YGMpNENZbHRVYjdSKEVqWDtVKERFOCJKblNnTyMqK25gKT18YH1UVjIwQV0+W19qWHdvU2Z4dDxvcDljSixlOzMrU0okemRtXXd6TjExXVBHWVdC''@;'; put 'put ''dSNxcTlpKTIjaiZLNUhPYVheNzF8LHIqfWN3aUdkTG48JSohImowN1JGK0JJWklgX2FSTFJMVi5WZSk/Ql06eGx0PnR8KStrcE8oLilMcXV5ZXAhX2YwVGIyNDk0MiQpL3B6PjpLLy98PUIqeUVDcEpyPzdBcyt2eXtvczF5SF4qOCJMekZtPDhHVndeTixObUkzQkNWMCElRHxtI3x6bnI9PlRp''@;'; put 'put ''TjdUU00uclgjUkxCfFZLKi5yc0lzYStlazckNCxQfjB5IStYUmVVMjRuP1UkSFlsXSlfbGYzeWMoWkkkPkZySS81aj17UiFuNThKVWR3byRCQWtTZF0iWi8ucCZLQF5DaVEyWXgvRmFJVHcuLHNGVkYjd2pSMlFBQGgzejhaVH1yNXdWdCRqVykkSWNOU2FFP1VpcmU/PlkhRGk3dU9FREFMc1BE''@;'; put 'put ''InszdkNMKjEoSD1Lakd4LzJpaUJoNFgjUzBnaCNlamBbe0hTKWJVV1l5cGMwXVFfU2lTNHJbLGIzWi5vQXZtZTtVXTwzP3QsbjhmekdeWCZXVUBzfEI9OCJ0ZzVKZSE0WDZuPyp2eSEweTckNnZkaH1eKUNVYE9+eWA8TSlNcywrdjlteEl2KGFFcj9ZbGhhYnBROTtyV1NvaWs1Q1hMaTxKKnZN''@;'; put 'put ''bCJ7aU5tQkZdKjFHUzRHYXFZPjdrP3Y4RDZuODB4OVdSXUB6PG85Knlxb2o2K0Bfd0NDeVchT21POF02O0UqZlteRkw/bDlHREZjZDYhbzNzWjBVZHEoSjxnVFBie29pW1NXY3wobj1bdzYvWEk8JWNXJGI4P248cHBNN0pbZjBdL1ZTJmAwX10jIkleM2JzRSwvM0MuIXZsfG58cWVTbVlyfU44''@;'; put 'put ''dUZDZUosJnteQClDPEk5KWdFfDJfYSh9SmhMSys4d1c9KCNnPChuRUM4SVpnU0dsZWVDU1FDKyNGRzkzYGg8azwvV1dYW3hCN3hWek9GPU56XTJLcHJabiRQeT5paUU4VDspejBTbm1oQSYjP0ErbisoOHYvQF5UQUs1aSohUEA4OkZyRmoqIXYkMn13cl44JnA5L3NlIjNYQm9sUkhDTGExXkdZ''@;'; put 'put ''ajVLLyRvaC90e05icn58JFthL3omVX1QNiFTamF4Tkh8NCNvSXZ2YGhSUmhpNkMsU3h4WlJPdis0aUJrI0wvMENbWFJ2ay9TZlZESD9EQ21oOkYiMDBFS04idjdrVkpPUm4rMkVhRi8uYFZBSl9DUlhAVmp+UWVheiI8K1heQzFDQW1KaT1CL0l0O0BoXXhUITdVZEtXSjh3YS9lYU5SalB2biUp''@;'; put 'put ''PzNpVkdxUFdQSnZHcU8uX3wvZDlnODIxMCE+aXFmXStUUWhpZXNlUzJZMXVENSRfX2BUYFtvNXhNeUNLJGZDTHJIVHFwX1hKOExCVXUxVzlYXnJHOWQ6ZWxGMHdLWntFcD19TF5NRU1sL2RwQFJeLnEsVTcwKHAxWTBEZDxpNklZcUZbRSk8YEpqJUk9aVEwJCk0dXpLLHxySHlGLCtON0xQMTQi''@;'; put 'put ''LyIkVi4iMkMlZHpBSklCMjRsZXBrSypMUCUwfFh5alolSjhLaSVwbioyeEg1fE98Q3N0a2NAQnFvPFJORCFkSz1WYCNSe1BfZHM6WGRvJmRFZl0zaTBjZkVzImEuNHM9Y313LE86ZW5SeDFSLnlKLnVbM3lEJWs8TG4vNzlHVF52Ny9tZWcqK2FoKkJyU3NiWWlaNGRQbTFlU3QvJFM+PEwqfXMw''@;'; put 'put ''N2dXPF5XPnt1cCtdRWY/JkAyOyomUU47W2VCSGA3KDlGQlJsKi5YLilDKS9uV2s7SCQ6OV93VzYpOCkhI3h+MHVHSHNQOVsxRzlAZmJmVVVJMVtNYFEyTHVARjVKUHdRR0NQIWtPSExVQl1gbCt3UXB0ViRZYVE1WG5lWyFJI2AkOzkhL092R1chNXRbVDFreldeRFoqWSZMREhIWzh4Y2dHWERS''@;'; put 'put ''dH15Nks7QlpNPyNKflBtayFMJHdHcHpqUENFZ0hPaUxYXnc5aUJ2S1lhZ2RbciZqIlRYXy85aUUhJWVAM1RATXNeXn05eHFBNXVhNmRlSDljVGZuek97Q2FEbU0ubTtiakheSDVmT0l4Yjo8QmJRXl9FSU5Dd1g3bE92OWlVaE5ebz03YH0kbmp+Z31dLlouRj1pTlJjRU92dmlBSUtET3ZnO1F3''@;'; put 'put ''MF4hPFlaI2Y8XjtOME9II1c+TSQqYGs3Onl4WFUsUGRnSFkzNFVpWkI2M2pCXXYmSUglOFReezpCRzdvKTZEOXlgKj1wMFdXSzYxUVI8dSVuTn53JW8rQU9sQ019NjFRNyM1UWlrXnVYRnF+UV4/ISVzIzsjJjFRU31PNSFkKGdhSn42em0lKT14SHo7LFYwQFtVT2NOJi95c2E6Tmx2KF45MCFH''@;'; put 'put ''RkU6XVh3cFg6NGE0WEUyMlF7TzJFfDBLPXFJXiMlWHNWVEkmanJ6N3gqPF0/SWdobUAwbyphQSZhR2xGKlN0S0o/KSVVOFBraHNWYEB7dSJSJXZuZG15WCtDVSNTQjpSU2o8OmF8Rm1icnRtLDReSXcjaTY/S005bGEhdTJYQF8kWXgmNVBATHlkK055P302MyxOe3BafllJcn1MKzw8eExhLi9d''@;'; put 'put ''U3YhUyg9enY9eDkvZyYxLzRpbDtyZ3VxNEdoTVZ5ZGdyZUQoenZBQzEoIi9bZ1sjNTx3dDszVDUhcXpCfT4vTmJHVlVBMFNpRj8lWkVaeDdHOiEvZm1kOUFwTj43aDxwIUtnQzN2dWwsT0thWUZ9I2E0WU42VWxGb31sRUtiP2lPelFHUikmdzE8KklJYmJJIzxxSXRKNUlURXl7ZnJsMUhefnde''@;'; put 'put ''WWBHXXoqVCleb21hWkAlRE1FK2hla2BhWXJqKzU2Llc2TDNdbGQpXVs/VEdMMHpxYXJ3V2xiK2tlRDgjMW18eEZJXmFGWCpkXkdla0tqb0hKbDo+PHM4dzY3VTRqPl81Zks/dTJkIW89Sip1cXN4XjlEYDhtRSF4ZXFCRXxCe103OU9INFZVWWhtVmBAIzNSSiVaQjsjNzlVJDc2Lnx1Z01aclpa''@;'; put 'put ''JEAuX1taPnw+U29abjpwbT1FQiF4LyVgPT4+OEwsZWUzKmVlOCF9T2IsPFtuQ2dEM01LenhDJWZNYWRhaS82ZmNxXm17bXxraXk4QD1hUUQwfDY8ZGlvMFM1Ji9Wcz0sKDsxTD4zLzgqKTs6IjhNTz12LDIjNDkhJlFzOmFlfXpmWV9LVFJ9bkp6L2F3Yj4vVTFWPSxlZWF2WzRwSlB5akk8M24w''@;'; put 'put ''MC8uOVd0QGU7T1dMbk8xLzQ2cyllbEdaLHFQfiwpWlo8Qm1YPmtCSiEhMVd8IihmIWY3dTl6fWpsN05NN3lUYVlkV0gyPXRLL0NzZT0+YGVGO155M2BmL2tBKHwxRGtxfktvYnZdInssNDlHWXkoRltKOVdeUWcwfGV0PXhBR2w8WS4kMzdlQDZEOyojJjtfaitnNFFibGlKdUgoY0lhOVQvXktr''@;'; put 'put ''Iy5ab2tUYVFiKWJ8dmpzPENSbFdTPTIqKiZBLkFrfiNLXmtHK0VBVSo4X3chNCxGckpjQ0FLTUY0OzBFTDxBail3blMhdT0kZkN2TTk0X2A9WDVMOTVSfUouUTFvb2E+S18wQ2ZPX3FsTyFZXXZNPy5XSHUlV0NmN1g0cUdrN2EkUDtZNWghbGhaK2FCbj8zIU85eDphbmBKSUtvZVZpZHpITGBR''@;'; put 'put ''OGpiIXdaWVNbVmR6L0EvIjlaNX1oVHk6YVN5VkdDd0leW3J3ISxrfVM+byRHPHV7TVRkUlRvb3AyQWl+MF9xIjRPeHVGLmZ0bHRHXVdnKS42fURaYyFPNWNiSWRLQ1JrMV9qNSJAXn1dc1FdQ28qJTFDaFosQHtlSyZQYGpnKHBJTylpWS85fE5DOiYuZ1Jtd1c9ZCpqOzx6cW9DYmNTXjhiJFc9''@;'; put 'put ''Z11+bmNUcjlyd2VgNT9fJDhucWdfdHhYSERGdUY8dUtIZGNZSyFAOG9QRk0rKTVbaS87LGNJdTh+a1VGYSV8d3VMNiMhTCRHQ3dQPjFKViV7MUZvbSRhKSN6eHVVR2lXRS5MeVsrTjR8TiJiezxoJUVwLjRCUVRpZVA7ISolLHw2LmRnYyo+STM/PkcrY3h4LywmPyZSNGdrP2pTajwiL0Q+RltX''@;'; put 'put ''OktwTjN4JUdsIVp0IzorLFI8TXc9L15OLDYjK3BubzdKUjo+c04oYHtAeUVvQj5mYUV2YCxCSl01KXBCJkExeV5KLCJ7XW15MWExVj1CW3MhLiwlMUIuOUlzT1l4UXpFbykzRiErK2NpOmhgP05IRXdGPFVuNDs5eD99fVtGfC5RKUx9ekRkKylebmh4Qi4qUik9ekoxUmJUXmw1UCgkPjJMWDMr''@;'; put 'put ''IntYKTxuJSlYY2QxdF1wNykrLCtzNHBLNjFqSStCI3F0ejshM09qWV9WPUxMKX1ZTG5lVmlkcEpgckA0Zy5WPW8kKy9WPWM6QndjfCRORmZjdmMpNDBgO3k1MGNHancjNnxUQnZeNy5DTEpXfjwjOG1MeHdBOWdsIkZGIy5LfHlzbTFmTzUwR1dtP3xucmYuPSwpeiMxaERHd1k+aDs8N05FX0sz''@;'; put 'put ''JFdRYnhfR2h6ez8rXnpfSExdPE5AYng6M1RKQy98R0NHPWI+Ol9pRU1sbE5NblNyVXQpKkhNYUdOK2Z2WEs1JlFndyQ3VmplMjFFcDB3bCNYZVI4YVBoUnp2T1V9UXcobT1yM2MoQDVWa2FRSCxTUk9GU2BZSlJiN2oiV3hROFdZMXU5a3Z1PWAlNVZOYkxZWVM8KiI9NUc6Q1gxJnZXL11OPmxq''@;'; put 'put ''WDJ7dH4zN2dVR1olU2lzdUMuUyE0SXdNUHE0eGtuPFp+MnlLKGdgeFlZWXVqLyRVc2t0dV1pWj8+R1olRCsiMWZNS25ybjVzLjU1WkMlYXhQR1BgSnpleUkkZE1zUWJqTmZbV0Y8JmAvZyoxeF1BRmVHfHslQGBtRSZnNVhmQ2ZndlE8KHo3L1cqYFAlQzlGeV1WWF1DN0BIZkI8NEl1Rmwxb3Ak''@;'; put 'put ''MT98IntQRW0sfCt6VF9PbVNpWXA1OGtiWUZ+JUBnNXVSUkk3ODE0Py59OUErYCpOSD1hRFQ/Xzk2RjNzU3VaYSxaXj44SDBjSS5ma3tsRVR9dHBKczd6Q0xuUipeR2Y8U3M9fFBdYGlmKEB6N1YhVUJzP2xwcl4+ZkBielBjcjMhNClBLzlvWlZMRGVud1hnIlRIYmgvRjw5LiREUG5MKF8zOGYk''@;'; put 'put ''VUJhbFkxdGlhKHpJWkt2SEdTUkklME5GOUQ8OiZgfStPIkY8IywueXkkdmYkdSFIVjZ3UEY/X218PjRSWDpnMkl4WlFgcmhQJlZfJFlVaGZJT2sxPGpYQlcpanU7MzJkbWllUyZgdmVEYk0yX1I/Sm0qZ3dIKzpuQyJqWHYxYFEobFY9dnl4TFNwP09+Kj8rQz9gNWB2ZEtGeiZRTUspZEouPys8''@;'; put 'put ''W0ViTltvQF5vZ0AjKDRZJno7Knt7TTl7dHdVQGE4dS5uNWFOU1czKEgkTyI3V09jXmhpJnBMblReVWpAYCltdWFrWiNPNFFDO3tlR1tvQGsjb1pSZGtaJERTUThmUC5UYGFJMS9HaTppY1MkMVR0JjcoVDJCSHlrI3dvJi89Y1ZEbFBfUDZnIzp7RzBiN1JVMFZZfSUhSiovc3ZETVl6cTdeJUQ6''@;'; put 'put ''ZixrMEp2TjgyTGF4dD9NNkhbblooWWdkfXlsWjJgNTJHTDE7ZFdoZCJ0K090YyRPJW5tPHhHMUhXWE85fChKJnhyZ3kxOEI3cXdOfVtYQyNpNjk5eExlUyY/fVkyKHNARlpaS093OjZCK21hXWMiNFJaZFh1U0VKQlAkWT17VjUyeikvPi9Pe1gmLGhCNjReSkY9ZndeIm1CWmVAQ3lYPEs2ZWIl''@;'; put 'put ''a011bUVyWjh2ImBednFIUylnRD1hKXUuNWcpNmUxdDJlJFtWQDBYWWBscTdlalZLZWZ2dVhlO0VpKzUyR3FLOG0kP3kxLncqejQvLytWQG4+PklPYWVQUFRDaUJyN1U9S1koWV5YWjhkOmV5PUtzYDFMO0g6Zlh8cXtCQXBHW3xbM05QPEpRdFMuemAwSHl5MWQxbislbGA2ekZ6UEB8Xm4+Ij5T''@;'; put 'put ''SVI5KT1JPCNXSj9aQ2pETnwvOyh3b31je2RNSyFQeG8mIT9QNjU6b099bSowRGU/aVpULzA3UztVbiJERTZKXz9DIjBtVHx7dmNsalV4SkBITVNRIjNXSCp8bC9NdzAsW1NvTj9nN2hOIXJnW3xYaHg3XSlLNlJzUkpXLC9ETWFYWTJCa1dfYlNZSXhbak00VHY9TT8+MVRAZExZRys6I0hrbEYr''@;'; put 'put ''cno1dngxdFcvZlclcldHJUI8VHU4cSZaJXdRYEE6Wy85eyFSM3FvWlIjQjBFWWZ5QiYjakVoaj9GYmZxRW5sW3lrLGpIK3c6MWYyJWQhT1lRWzJYeG4pL1VJZCFvR1tFaj1bYkwjdWFCeU1yJTpHRFIlRiNWd0lsSU14PS9HbVB3KStCUDJkcDAhQ2l9QWRXSnBXJTRHJEUwPldxaSl3Omhgd1ZH''@;'; put 'put ''fktLZ0NIQTxLfG1wS056Tz0qY2l4PE1QXkxmL09TY3F1QlhiT0M5WWBEMm12NlUuOzVEXiwlR3YkZmd0QSxfUEU/RmRaVmsrLkl4Umdvdm5aanJmYWk3RHFIQmZLUlY/SyEmfTUhM1Z0W31SLnhpN3d4SjxjVWdLbVBZIS9HaV5sJlsoXy9EPixxTTJnO2NdP0pzIUdhPHhgcXpPWWY+LiZmLjl5''@;'; put 'put ''UWlYNSojLDMvbGwrMUs6fT89b0M3InB2Iz02LnpDUUBGT2F9PW4lLFVkM1MrPyl8KUg/amRvJjxXfDxWMykrIXgxOztbRlUjOVRjezg4W1h0SUYuR11gajxYPV1yW09xSik5TUwoO3BDUTNCLmEvXV0pPV1TMz0uUX4sMUJGXXJbdT1yX1ltPEAhNkVAd08/QlkuPStYMjB5MVN+Lz1CWS55JTtt''@;'; put 'put ''WFpDen43ckg4PFUlNTVYODIvPm1FRk5TR15CfSI7QW99YEZHJmZqZip4b2hIWVVrQkgxViJqPG0kU2A/QGspJiJFIVN+XzJHSUV9bk5UST97Py9xa0p9bnAjeyxBa1dWeXdzN3phWWE/bDhnS1V6LCwve1M4N2I3SVo9VW41YlltOHtwM20wY3hdciNVOHU/XmV7RlRPcmwraDRoZi5JbDJIaDQo''@;'; put 'put ''TUYxOkAwZ3JgUk13bjk9UXlwMDJqXTwzVEhZKiUyZlNpVT13IT5tbXY3SjJNNCFQV3t8UDxCYGFPI2RFd3RwbV1qZEEye0VGamppU1U+MUc4dyg9U3FmdUo/d1lkVClHLnNYVClvYTBKTzN3UEAwV3Z3cnZQKnwyYzxOPGw/QENOXV5NKDpKP2ZVWlc3KldoRiVjTi42dSplJEQ1O0EqfGBlMXdL''@;'; put 'put ''Z3xRIU9KOH1EU0wucjI5X1ooMDYwKzZMaGd3XTh+JD8xRjdHTWMidDh6KS94TXYmKXdJRy4vN3ZaeU0/USZyc2N9TXEzakh0b15AZ2htZFNHOEZjZjBfe2RSL0J+OFFhbXkjOHRCd2hJfjtHfUdmSCNvW0NWKGdYPF4/NFROXWFtWD54PE88Xl5hN0gkY0leaUZge2NebXs4PEtJfFciPndyQEs9''@;'; put 'put ''aiZfWyUuSy9qcGNIfigwRHo6WWdPSHxyWTB5IUs5VFh5Ojo1PkxZbi40QjxKWkRgQENyU3ZFIWpPNGRVM1klazdZeEx5Qm43OTNOWnhLXj9gIUVSP3Nbb10qSUJYIW8lOHZhKUFdTX50YXU3cmE0X0U4N3NgJH5vcHMzPigxSzM+ajhqbElwR3VwNjU8YyxNaUoqOEtbQnNFcUhgOXwxKz0/YT46''@;'; put 'put ''VXVfYUFvZHFuRylZVDd5VzwrV0Joa1khSTsuP0poLlRsd3gpUipJMENQenosNl4/MlRgTUE1TVAxTzFAO1RnZmAjLClxby5oXUBCR1cqKEVCTFBMWCk3Oj5odzoyWHZHXVFoY01zX3peOSphSkZQRGlBUXJMSlJeNHgmaVUmQkhaOEh0RmNRMVlYKG5Bd0dSQEMka0FSU0ZENlI+ZlowWDBsaU5A''@;'; put 'put ''cGIqeFIlcWVJJG96SUE+TyRudzpgUm1aV0VHInRxSlBjRExMJkRNaGB8T1V9ZUdteVQpVDFDKixETTQkRUNiQ08jKSplfktEdz1COTxlP2tAb2RpUH4wKy5AUHFeKnVrfWlmP1VEdy88ZmhiX1BiYE5SLF4yaEVjJHlmQC9pWGpQNEx4cCVZOEo3VTZJYUV4ZTRdbH55TCYvMUhgcm83RkV4Zmxb''@;'; put 'put ''WEohVmBrRSNvXT5ueE1ic3t5S2Y3MD55TH1xbiZrKWU0MFVlNWVTUD0wTUxtUEpieDUhTEYxRkd4XSptTV97c1k6SU0qakYkdkwuYTIpMXxpR0dmdCtmW2pnPChnW2ZwVz5SdCpYWClxaG85eFpBKSEvbWpfRHt9KUYlRykhRzpZK3F8OWhfX2xrdU9gay5UM18raVFIV0ldfTM2ekhLQnB4Zi81''@;'; put 'put ''a0srNWtQRE1kOykpZXg4SXdzMVk1JVBwe0lqZDhBKThgM0xBeSY7JVlgVjJTb20lRyRKOU5xVGRETCssajdqJTheLntnRDg3aixmSGFUUnpwcGpAeW42aTlnPzM8eFFZNzh5Rmx+T21aTC5gWUxEbSJtdksmVmRWZFNvfC9UOHBqPzJaJXlEK1psRkh5JG5icVhuPUw6e28uUFckVkVRKSExSz9v''@;'; put 'put ''e1Q8MyZgejp3b0RmRTVVM0dVUkhnSEFvRSEhSF9qfHszRiEhRG9YLzEyV0MwakBDNExxdVJZZ3csQ2d8Wk84OSRZfjshdm01W1MlLEdeVixyNnxqIW9TLmJjJEZ5b2FLe0h3NV1WeG9iRW1uREZTdlt4fkZoT0NXKmRHeU82SWJ4RXJqSm5dZCtCfjlzYCtCYmlvb2ZkQzt3QDNxbywpUzYlTDl5''@;'; put 'put ''MVNGN29RLkozU2prOTpNM1VFK1VqajloJkoqTEQ+QiVEdzArTjdMczdlTVs7TjhZd2UwQHdvTV4qeG8xSmdpQ1RTdU1lbDptdipqQH5iJWYyaTdwYiVVbC5DbHVIMGlfPCJbTEV+Ym1qaV9VKHR6emJaaX1WLG5jJClEKyMqb3EzVk4xaXBPMUAxb28vLDEvfGdyLjxZWVIyZVRFUWI9ZW1PW1Na''@;'; put 'put ''bClaUEtOflhISWtTLFhYbktbWW5HW3NSZzI8Sz1TZWJmJiN3RltFc1c5NFRGPFhIMGk6YzN2cE0pamd4RGQ6TWtSW30ibF1ecnsvcV1zaU9pT3dHM01ZYTtyVVphd1hdaHd3IWRlSV5qeUxhQU5VYSlVXmBEMD5Pe3h5VCw2enBRYVtkVH1PNUBbKlNLdkU2bkcucW1sX1YwP3RiKTkiM09pOjtu''@;'; put 'put ''UF1FPEs4Vmtte2k6OyF7YDVnXmh3Z21TcDksfWokOkxZYXdqPmgjajIwW2pgYVkqcVpXRCp1cChSbDpuUEtOV2c0ZD1dRE1iWyNoJCV9ejhjLFhBOywxcDwvOXE7aWM5Vld3NlVYTDJuVDFaY1l3WzR+S0NFUldOOEU2fkteXW97P0o4fGw6ZXp9XSlUP0BXWjtnREVvd092PV1wRCNbR1B9cWol''@;'; put 'put ''Zlt1WS9QWyEkSl00LDFDYHVVK0tgNktLL3dIXzBjMnkkYTAqOnJvRH5rdk8kI2tjblNMLlZ2WV5CYGR0dXB1ZW15cjolV0FUOlFaekVGTEkiLGpYRXwwNG9jSC5YdVUreC9iY0ouNXVOKU9nUD5qaSx9NypGW3c2WWVDVmd5QVNsNnRiPyZZX35nbzlUbzhvSTFSODoifF1qbSFVRzQlYypzaWFC''@;'; put 'put ''JXZHMGxdeFcqbm1DMiYxPn4kcyk2YDM9WVY/SyFgQ1ZeaWRFOE96WEp4ITw6Sng8W3JkRS47TjslZSZkXl14XzpnRVEyRjl5e05bOktJSD5YT15UYVpyTmp2Z088WDAmWz8sOThaT3hib043OTdFUHlYMkQuTTN9U3pUPVNmLk4pY3s8NHprQ10hWDJgUD8rPHNgOVZzT255Mko8SzY3TDMuc3pi''@;'; put 'put ''TzRxb09ze0AhIWtJa0kvITw6WitCekZIUDwuaCFtMHsoN2dYQDRFWT06enh4amc8ZVJqTSl3WHIwLkcrVHheZHI3aUV1KnJ4TXtZcFR4XVZ5bzw5QmlXZ1ZZJTFWanlnNXAlJEZrfnx1YHReLnBna0NYdCUoL1A3eD5CfGBgXURoOGshfnE9Yzs5WTFjckN4TWdnfS5Icl9sQCpEQTxxbXBDTWU5''@;'; put 'put ''KF5KQ1s5RT1LWiw0e31PZHVzSzF3SFRRLl4iKVUpPW5Dc2ZJKFFqSEtYYlh9WSwjcH43R0Q3bD1GVyRCZCwlRXUubXIlQEFBRl4rUmE5U1NweVQ+IlpGT1hsWGU6dlRnJXNuaSopVE9iJi5GNkQ0dGBdcCl6cD5QbTF7ezVvaSE3PXZ2b3svVW92emlUb3BBPCNTUUR0dyw8UVAuVXE5OTAiZ1Fr''@;'; put 'put ''QDFBYnNnRjJoQE5zOnIqKENTZnkoMk44JWpVWDpqY3poUVguImIrd1VkcVQjOE5ENSx3YFZCSlUpa2RmWHJAeWhhUzhYVWohP01ZOXlUNiFoTD59L2c1LHEscnQhXXM3RjxZOVRzJlojZkwrUWclKEFqMVY2WklHP2FiblI+YXpNfTpnXmR+WFhLLytuVDJwQEloITpLTFtuLE95cSxJaz86ZCF+''@;'; put 'put ''fGB3PTM3KyF4Y15FRCl3SkYxWCRGNHhrNyJ5JEh+OWpLW2VGWGwqSkY5KmIvQ1BwbkYjSjt1bH5deUxHZURlciU/Mk9LMWoxTmdWOEFkZjhsP1s5Wk9PXUpIdk91VUhRS2RsL3o5S0lpYiJUWHNxMU41NTkxZTJ0YmE1WklHRSUjbD9DfSMhISh4WVozJSU+Q0lWcSF0RjZObCRlRXk7TSw4MkUk''@;'; put 'put ''P11fK343UlMqfWchQkd7bTBRbUQhLGgpNT1zQHR4MVkkbUIlRCFHTl4kaTgvPzpNNHBldUQ8Z3E1THl1Vz4+WmB0dXtERjJLUGg3WmVWRW9POGdvNVFqIyRkfXAhJkBbWDBqYVsjP1VLMjBpcnlHZWl9WzxEcT1aTXlIaUF7a2pEM0x9OilUUS5jOyhEUyMvW2llQFZwP2h3RyMwZyxHZ0soPipm''@;'; put 'put ''aTRLMik5amVWZVYzTHYzUWcsaGUza2t+Pmx0NVZXdSUwQiVMO0BEL0pNdTA6ZWEjRTs7KEFpTClBQWlSbzYzcTEzcjl0OUJoJUh4KHRoPml1ZWxpW0Y9JFEzOWp9VFpaXlR5WFh0Sit3eDRwUTsufjFKa2UpaWVhW2xKQndZRy45KkpVY15VdUQ7fWRJOW0uMVhlW2NFUENlT31YUiYoIyFuWjlC''@;'; put 'put ''dl80YG1CT0QoXjcyVlJgRjdKM01CISl1NC9NZHU9ZVAobUpgYkQlcXo/U0RWQ2xyXUU3aEx0aD5LYSIoWlEwSChpd2tgZlpMM10udyIoKSMhTzBQIU9OVW5ORURuaHspMVBPc2hVPjJLInxMKUMjIXRDKi55NVc+eChiR2hNUWVwInxMZj1JKF1LMF4hLDpaKGZDYW5MPldYcG1fTHQ7SHteVVRA''@;'; put 'put ''XntlVyFoVDVnPyhSRXAlan0yTUYsakZ0Y0F+VnF0SWlyWkVlSnJpWnhzKnMwenc7Yyk5VCsqfnRwMUU3VU4jZ2pAQ3NMVGx5PmFjRnU6RylZYU5gKXIvaWJoV3AhdkhxMll3JHhsN3kxSWVQOGIhPC4uQVo7bGt3RFtzeDl6SGhANHA4V1lLbTtna3xhRFQvSFJKYmxXIU08OU1FQDkwQkgyKncj''@;'; put 'put ''dXk4cGBOc3c4ZTx5aWg+WU4wLEcmSz5faG1YZXg1JCg4M1h6PENoREhwNDwpRmB+ZEIzPlM4VEp5Ln1JQ0A8KXEjbGdpOXFpVUs4bj9nbzkyUD1pbix4cWtfTTlLPz8qcTojKn0kKUloJm1SVyl8SVpiR2JZZjdlOFBOMjdOfkB0USptJWcwJHIqL0NFW1U9JSROTlFZVnxROzZVZnw7PFhXIyhA''@;'; put 'put ''ak0pc3d5ej1kSUsjMyM3V3RBL2pkV2hAfTF0cWBiZHV4TSk2byJRKWxHa1FKJXplIXc6alZnJFpKQXZJQUJgJDFaMXZIW2h7PnspamRuZXldb0FwR11CI0xMdH1lPDB4LEN8YGhUaFQlYHd7I0hZSG9fWztuaS8/PnJYR01QS1BIIVA/fS8wa1pSdkxdJG5KUVZHaWgvYUIxWjwpRjV+ciU1LEEk''@;'; put 'put ''b28vYyFRSlllNV9NWjxHNVAyclFiSWw9aSZRd2MpLlpaUnRjVEY0WmcpZG47WXZ9SUddVVtDYEBabjVVJEpoI1Uyc29JfjslJjt1OTdpKClWVkJhMVRCVXVPbW4wOzxoUGZndC5NNFlwSTpoYjdeZHAqKihuK2wvc05JNEcrUEUrVlEyWEVgcTd1RStwYz05bC9jTjw0IUxrS3FCamk2Q1pzVUss''@;'; put 'put ''c0VjLHwkdSpQPkM9dWg+fUA6LCohQ2A0TEFGeU15NXxiXnBhQilGQSlQRlU9e0ElI3RBPzxTOys7Uiw2e2R4OyVDPCthaHgrYVA7QzlaP3ssTHtqZiw5PkxnN099flJsIzw1X14mPzlJJH17aG1VU2RyTlosMil4cEZMbClIaUBHU2pNSXFPIW1SNmZJVm1vM2tURjFXNUIwJTBDdThzRWlEUjkw''@;'; put 'put ''MVRLWGtaKyxLfiFTfVFLVTAxOVM2eys7Rm03JEt3JG5zNlpacSxeP2NpVD19XWBLaHI9NVJ0cGFGU0p9NERXJSMkSmtmbzdlLllTbnxuNSg+WntWalNKRjFqfSk7RFclYUh+IWFme1p3ZXs+PzRdKU1eV3lTfChHMzk7c01VPDh7WD95aCMiJl5CIy94bD4rR0I3a2FFJSM4ZXFRP0k6cVM9Pitm''@;'; put 'put ''NUVzfHltKkxUV1oqSGVjWDdMbm15I0w6Q2BMO09mO1kvLlk8VjdaOnV3IVllVER9eHN5XyN1TUVINzlyaWI3XTE5WTxme1lhb0dSUVlWfUlnM3p+I19kQ1hUdFIzaUs6T2JOU1NkOCNzZVM6fXFXU3BPcUBja00lbG8xdCRqSFJaQnVYLz5rciVSSl5GU1lCUFUpZyVddk1QdUxRRF5DdHImQXJq''@;'; put 'put ''fUhDZVUjflFoJWYyVlJiPXF1THl7Nk9SeHJnWkhRSXo+XUsjU2xrMCh+PTEzZHlgPHooNSY9L2gxbi5ZYTErKEB6ZXhAajlTRj15ZU83RnBqTnd2PUMwRW1lLmpoKWpUJHokQl12S0JNdi5eITlWImtFPkJ1YkVtbU5hfDJQV0g4KUQxNF44S2BGYEJ+O2J2TkxPMD1ye1BzdHcyRWxBWUIpbEdq''@;'; put 'put ''e3RpZEIiNHlzUERzPzJROFVjUFRYcjtObV5Le1dnTG1rdVc2OnpGPih4R1ViUkFHQV52U31ES3BCdD8uYVNTRXQqWzswXkRoIjdTQGh0Y1FoakRsWG5aeU42KVhBdGNRaEp4OlBwbylFQH06QzxmREJhcTxTIUNPMnFJNUY5IzBZQj86b09BdUwvYVlMTmBgWCJBQG9GVjBLUUAwMEo9bF1icjdj''@;'; put 'put ''RSROUDlmUzllYW9+MS9mMXxaWDh3LE9IYyhHKTFnVCZeTmYseVoyW0Z3XVNsWmJYJHxPe1NvQipATD0kZFA7Kzd1IkE8ZVV1PGozYyRNPSpPVXppeXVfOVtUaFsvfDFacGgycVBVP1tvT2V4I0I3Omg0PFVTMTY8cyhhITg5Zj0jTkJiSFFJJT5uYkAwTEVCMS9saWkvYFIjdTRBO3RdIXJgPzdl''@;'; put 'put ''OnRIclBoZTNLelsqdkUzImc3R09ab107fmVAYT4jVk17dmIiTF5SOWB2YmplSVZqZDVLJDdRfjZJN3RsL2xValkzS1FDTThaVCgvRTVRW11pQEJRMzxIYHFITDw0Om9bb31dWCtpXXRaZnc0fEtGPSlUaXh5TzwqQUtMZDI2KiZ7dVc3QEZpdD9NY2pgeS9tYEp6JDx4JHNPOWdjSVY2R0wyKjls''@;'; put 'put ''TTtaciVgbDFbN2xZbE0wQHclJXl2L2JjO3FQZiQlODBXVzRAQiolbllQMEcsQzVfMj9iSmY4WTBmcHU3QjZfPyQqLipYKm1ZZmBlcGs6SUs/WTBAaVA7NWcqUDNTOzhDSiQ2OlI4OnZXK2JkTzMqbmBIcyM/VVIkN2tDWDF6NkVUOStDVjk6K1I6MEA/XVBFVyltPU5IYUUwaXZ6KTIxX2s6IlFq''@;'; put 'put ''cn48Mj14aFhvUT9zKjkuNypQeWUmNlUqUmJwd0BXSWRYPmF0WzopOCRQTWRTbm5pR0FROWs+UWNNelQiKVJ5Pzx3SHI0JWlWJDY0KENCXklNOktMTWExTCFpNHN8a09ocEdlejQ+dXk1MWdsZX1uRzxRKCY2IV0zSHddQU9nKm9ePisrclU5Lnd3JmdEaDZzUmtKa0k+OmI7OTg0UEErR3hgbmQh''@;'; put 'put ''Oy9+QCp2I1hLLjNDfCFOPFU/IWlQcU5FPF13UkNZOilpenBJZmxxaHQxI2JfMCNxfShxWVF0aDJPISg7RkIkL2tGKkRyMExPKywsQkFLe3ZNcl1RIkAyJFdlRlk/VDxXZTNgW3x0W2ldd3VGJilvUislL0ZxSF81PTAoXmt3I1B1Sm5PNmglIXUxS1J+akFSUnNiR2RzcGJOb3hBRSosYk1LInp2''@;'; put 'put ''P1gybWYyTGBUWGtLdTZzdEIjYFpAPXxtZWhkYDpsc3BiWjhHM2dlLHd6I3RoZ2NsUHhJaE1bVlY6T3ldPT5Wbnw4Y15GQnJqZGgqJGc8NCZXRSlnUmtJbjo7YSsycHRCKyIjKlghT0g/N2hHPClpPyRCPzttWjNJNHlaUV13OFY6Y3xnKmZIVUQyM3FvMFFROTNSVShHdXhbKUN+cGEhfCo9WiIq''@;'; put 'put ''aD52LzhJaj45MGp1d2J7UUwuXnE6dDxtOThxTzxjO3lTVSx7IkY+JVphVF4zXVhIMV1Bd1A7RTtKO3JdUUMvfT1JTFlZL1F2TnVAcCUySz86eTJ4JSVtS3l9UEczdld6MnYsO0VYejoodldoeGc4Y3dRUmJxY1VTMlVZeDpVQDAqSS54fGozWX5NW1hqJixJbXhHa2RXbHoyWjRxd181KF8mVHQ5''@;'; put 'put ''ZTY5YnxkcEslIlo1PXBVQU0rX1JXcm9+W1d3Z1tBTyQsU3o0Lys3WjpCT25lTyppa0I3NHlETiYqXjxgeHZ1UD5paEQlKjtzZV4ob141aVUuR0swNypEdkByX3wvdGhiKSs5Z0lHUmU3fFs9XjNdVkZ+VTRkO3lTX2BkY3AqNUVWfn55MFdXPnVHLGhsTD1vT2poRlZUZjJCVXBZLE13aDRLLjln''@;'; put 'put ''Rklnbl04fXxAdSVpLEV4Lj5ASUJsbEZRKTthd3JqXjRETGRtK0JKMlsjTEcsQyU4XzRUTXEmP1dqNmk+RCgiIXdffGMsSm1TZmdyajpAI3FGalQldXp5Jl03IzFKZUJUeSxCMGRsVkwyTCJGKS53RlZIZDVmfSlrIjNkQyYweUdoQ2A9MXBLKlR2aVNOMUFbKXRJakw1dHFSYyJYPDQ+cns/QW8y''@;'; put 'put ''RWY2clpecGdiLFhSSnQseVg8NDM9PS59OzhidmAyLyJ3N1hGR3xDVVddUnpjKn0mWlcrfWowZURZendiXVJKTV16Y2BSRzlbZkgsMVU5MU1wLzpTWyFLWGFbSi5YfWQ3MkAvVWR6bUpmfDFBPmcwTDVoNzRSU1J4YUNCbkdgWXtGXjdlLnpTdWxPM3QjLmBQZCoyaXokeSZoNkh8VT1IIUYrejsk''@;'; put 'put ''LHp6LiZpeFA/MEUobVNHXjcqRzh3bCsuYXIjJSVocXNOYmouI094NG4jI3ZqTlBjR1pXN30zVXZreEt7JGlgTGkmTT5NXVUlUj4pOjAhcTAmbUtnVSUjOn1hdGVMZ3xkezw4YVYkNnRHOT5rM21LZyV8V3BiVTtTRzk6OmguVCZsXVckTGR9cFlCQU5mRFN3PUBCPTBtOD0kOnhwSzxIOUl+fnRS''@;'; put 'put ''VWJRRktJNC82blNmJT49azw9YVYlNWFWUi9hKEdQentAWTNacz12RnMqMC8pXy9uV2JlXl0kVCNpY1ttOV5zVk1seDhrdHsyVzpVQXk3WjorOHs4bm41OnJFXzZ+PzooZ3BqaSg6PFh3VXJ4UnQjOGR0NlspPV49SG5nOTBGXS48YWQhSF1uN2UuWTA0eEBvI2BJInQmUlhvOU5sblZoTDMmVyh+''@;'; put 'put ''ejxuKEtLQHh8bmAsS0xmcj8xTS41cioqS0xkPXIqYDZSaEZPans2aFQ9Pkk/aUBURz9HMipSd2pMTUdnUW0qTTxPZjdMUExJU01rWXA5bjltUSIoUy5ecHtJZUxRYnFFWWE9emt6U0pLcGQoQW9+NWwyMiwuaipTZWE7fFRbYiRNLlpvUS42KyY5c29qNytKSltaZmJqRGZEbE11ejhpTy5qZ0VQ''@;'; put 'put ''SyZuaWtQaTRuPV5kTjFsSjFLK3s0YnRWeSJmbmxgMkUkKGo4W2NnK2k5VVk4KSVtO1trOmsySUZfMCM+TWZwQERxfWhCbC44NWpmNzpVL1tmcD9iVUNNQ1UhcEZWZDNlQy5jeFl5YE9iISZ8b2cmO0BaYS95OylQWTNZcHxTXk5LbFBYO3UxKVtWX1VzWVlPTUZvO186VlVZLlVXb1AqfGBqODVv''@;'; put 'put ''S1tBRks3NC5lJVI8bEs5R2tKc2guOzxGYVYyQyRuL35pSyNCLjttYVFGbi5TQmJ1bWxtOk1zPl0kUW5rV0s9eiJ8N3VxYiVHJl8pL3taUVg0XlNLR0VXVmZRfG4yeCoyOD16dixkLmxbJk0xT1gxXW4+NW8hdFpQTlFDKXRWTVlOc0dLR2w0cjRyfGZ5W3ByREwpUU1FTUBWYFRRRTBZV2svQnBW''@;'; put 'put ''RFFRJCRxV1FZczFFcCxbbEc1YUdvQV07cUR0JGQ+WEY6Rk1LLjhbQiFDdDglM1NgIWxMRXY1Yis+TksjWXY4NENmeUN2ODJPdjh2NUNPNkkhN1E3dW97NGBpbzdJZHxdVkMwXnA6TUgvXno9Xk5PIURreGBKImMudS91W3U/dUo2Vk5yRyopQzlGeEdvTzVLWVpZWXd0R25AbCM1ellPWWA5WXhv''@;'; put 'put ''Lm5qM1VvajsqSyZma3UjKmF3aj9DVXw5IU83bik2I2YwUCw1MTNVeGVsQGEmOF85WUo7e2MvIUZ3Y0AuKl56NjxtI1pubkNHczRRJWl3dUpEQyJyck9XeERsWk9mQykscTNiWyFTVm9ZVUpZNGEyajdhfC5JO1FOJUwofGFFSX51b3kjW1JQI2Y9NWhCfXk2MXIwakNbNj58M2B5V1owVHciKX42''@;'; put 'put ''JkpbZ1JPMCwqZD1EYFJNKFs3aE91b31PYjVoRkxPdUw1OitHQWVWSWdBZUMpU1drdXRXM3JUT30+YlRfaXB0VCh3O0JAKCxaY20vNVNpOTNtUXVFT1dKblY/Xk8yLCkxN0lqTEg6dTZvJTQhM2c5bzJQOENGbFcwc146eFFbWz0uclVUUEpAVFU5aHhueG4qcm5xTllDSFtlQjNJW3RrYy5KR182''@;'; put 'put ''Wj4mYENGKVIsJFUxRVJ7JFN+PCpSX0V3JC9qTTxtPWpUUno2R3ckL1ZHak0rOzM+aT5HfSRfd0dLQl9zRyZFNnMzMEZQeGI5YXdkJVJ2P2xsI0cqbmVFaGJvYyxTNThkeEhaVVJMUGZPSCFIQFRLV15keHpTYUJzK25bN0diSl1VUjdTM0d9YypucUtQMGBKO347I2ZmJXkzRjZ6UUN5SmdCInpg''@;'; put 'put ''SkA2az9KUlBAeSh0WXAvL0opWEx9K2Q5TTQ1RVtVUj4xO2MreCV3UGF9RXdGOX49c1Y1WiVtM2NRMUNBV2RkR0FDQnQ8PiZTRkwxbGN3fFAkQT1JdE0/I2wwRkVDUC99WCVgS0YxNEMyaShze2Z0KlNWK3JJbFt7TF9nRSJvUF5DfnA4QnkmUGVjMU09Lml4bGFrT2JYMGVLX19uZjxoejxVZWgy''@;'; put 'put ''TT8lLG5sZFIjXi86a3RBRkRtWGBsTzdWYGFVTnNsdUwsJUdhLyUzeVJgWCN4Jm06P2RIWVszelUwK2xyQjFNblVBZWZMZ2tgMnBua2AoaC88M3J2aDwubFpdWVVPbFtQKlZCXUV8eDlVNjwjOi4iY1lse0BgYCNpWywrW144fnFuNGJ7bnJrT1paQDw7RTc6YUlFYGk5X14rdXsoSFAzcDFTaVIl''@;'; put 'put ''XXRWNTVnPTNkWTc/WDFfS3FGVjJjXi89Jkhfbj58T1hxV2FeS002KTg5PzkxRTl9TCFvY2c1UWcsfSxsVWQkWnVPZzhbWm5vJEVwIlRWeV19ZjJvY2NWN3ZRTj0pZjJSeTZnQlV5b19KODc7b0pGZ2xzQzg3WjAhZmdPS0guWlpldyFwOmFpMy59LzZvLjxfNXFbRktKUlBLbHdmJWovRiFrYHtO''@;'; put 'put ''eHBLUW4kSDBZOV9IXSp4eGdDQmxBbFArZSo5cGxWS2clSH51dG8ienE2aG5TRHtqRS9mSys9Iz19X29vZDZFcEQoPjohYEJkaXw1OlBfXl1PcE8kemwkdiJWUlQ0NXA6aFlqZCRkaWJuWmtgN1MzMVlwTTN3eF1vUlZGO3QhQFZVJEApNmRZW3JdTlZlUW9AK1RlOXRQMnZ1VFdJfVtfSCJMX0Bg''@;'; put 'put ''UlBEdiJOWiVFPilueyw3eWAheCtGUCs9KUtfcGA1UDtjbjQqJmtIdFFKRU4uZUxZVEJVb1IlVW5QdkZKaXJ0RD0+XW84K0dWe0t9VyopNGdoLGVCUVY9OXRzYVsyQHsxNGg3NT1wLjo5fn0ibGE9PDhwUmlXSDZ0NTQzYmNdXzU1QjJoJjxAMVElcXBvRWAsPG0jaEwlLFFobmBRMmgmc3M8NEpp''@;'; put 'put ''ZENBU1klPyxBaz1eQzJCLmJ2JnN+fUVNfjxjenJ0fWdNOmJ2TjdCLkwsamNCYkgycSE5az15aHw5THBjI2dSMmZXdzFdcGpSWjNQO1pGOG5RLnQ1TmNIeUEkWlRHaVQuIT1yb2pbJlNNVDFIUVBPOERIPnpUYTxPYyw9eHZPbSUyT1h6SGFjT0koQkZgazxuIm5qW21dMG12IyN9P1tGTWF+P2tT''@;'; put 'put ''Z19MIlhIXT83d3c4RDNyOzc9cyolJjIpc0h0SV0yU1tyV2xZYHJhTC5UIXclU00hd2NsUm5eZjZoVEp0WWIkbjozWClaPHB5YlY9bCIsJU1JXk1RXmxgRmt3Oio8QmErcWJ7cnJYVWI2bU5+Pm9jZiU0YjY+QUxfLls1elElcWRVbiY8QC9wNyxsKDdUQ2UmZUMsQnxtLy5bPy5GcSkmTFlkM3dU''@;'; put 'put ''XVRGOk9kJHsqfCpYIlBfNlkyNF5LYUpdKmdmMkJPJnB9cSh8PVVMLl87Tk58UTw8cG95VWBSRlleOVZxVng7KTdUOHRnanxhMjFZQipoSCpYbjtVMyNscnR5SjYxKVM9RjlNVHYkK3BDWFlzfVtoISkrUi51JG9UezghL2YyJi4qNGxdKm1KS318dHNOKH5NXmxrPjpkc3BXPSZSeHN4aTF2fFsm''@;'; put 'put ''JSFYY1Q2I3RrRGxOYnZpUEM+VzRXMUVJI0wyeVMkTTg0VD4me3ZjJE0qTmR2MnVmIyZgJT8xVS4rJTQsMUAqfjl4VTs9WDZ3OktRM3d3Omg3NVNSc3xHfUhRdHElO0cmKzIocC8ve3pLfjlzJTQ6ZjJjN3tKZ2x8Kms/NCQmUDR6NHF8e0BteDFSOyJUfjxkLkBRZCtYNTEpW19GdzV0amk0OjEs''@;'; put 'put ''L0p2TSwpOT1POGlvTDMzMTUmTj95JCpgaWl7OD93UDpsUSZkQTN7LFssL1M5XiRQeDAhMUJ7WmhwPiM7X0ZCfj4sM1UoU0pyQTNTO3JhUzVzVTt6bW9yRkJxcltrOSY7P11ucFRwayleMVVpflAkQ317eWQ+LGJdOTp5WE01RjN5d09TM24iUTN3PSMmNnBgUk0wUE5rJlZHY2VZJFYhRU5mcHBo''@;'; put 'put ''ZVQ2JmIzVUUhMiwlaWJWb0cqTT1mNG1EfkxoU19BYEF8Lzp1fEp6bTpMMldXVi5Ha3phYHc7RzlGckpsJDZWKWMqbjApd0dXQlduJmJhJHU1fW9MM0g2TnY1W2BBJl8vWXxbKC42Z3lIYXlOK3ImZTx9N2BATnBsNylpbDtKR2IlWm5KOG5OQj1iW1NdYjc8VS9aVy93UFoucG9YVnJEdmxnaT1e''@;'; put 'put ''ZWtRSmZ2R0o6JDpIMyg6IX4qTkErTzohVWRJNjIoNkMhS2EqJShsNnBvT2dPYn1wRGVqZGd0cDNMZEhvK2p2LkhfbnAuZ1BWd0t8fTl6ZWA1Zkp9cCNrd1ldWlZuVC42VUN5NTFgS1RNWz9DSyFKVDosfmdHZTk3ZUsudXI9bGZONSJeLGIzaVQyQ0RiUno0eUovUDZIZTkpZmU5MTh2RC8wYntp''@;'; put 'put ''ZmNsOF4/UlYxYmpsdGpZfGhAZCJ0fWZEU2dmQUA8PlNkKT9EXTp4bS9kMiExe0k6QHdzbFlEO3lFR2xHZTc3YiROeiUmUkQqbDwvXSVCSDZ6I3BwamNrfCZeTzVtRHpUSk9gRC8qZUFMfT9mVl1gZCFgKyRQdVtdQFdacGJreUJ2YVhoRkt8JEw7L2ZyU0tLSTl0cTFsWyg3VClzcjU0N0deM2Jf''@;'; put 'put ''akZ+JSNQQzE+OnNMfj02b3Q5WnErdExROis/KikjVlszZ2dLb3VFVlFrcCN4I2ZWSC5iMzJ2WTJhZDlTdG9sOXt8ZVsyc1pvczlJcl9wWk9abyM8dFN9TncwLlRETlNvNWBXczM3STZMRSxDMGxoJnlqfDp8eTJ7bmR6Pkwvcj5FQDR+TmdCUGI+Qm5NanVzYFNaLHI+TzpsKUFkU3lgcll3Qyss''@;'; put 'put ''OXhuV316OSh9YEA4O3NMdzI/XU5sOCxXO1gjaX1MaitzYX1sQzA6MzBtfWJRblljc1R3TTRIKGlNLEA0bEgxTDM7L1c7L0omJW56P2V9ODk7OHt0ZCUraipwLyJiVyZoNjV2OTIuaXEqO3xTTzNTJV9YSk4+ezpGIXRVSUUmcCRkLmhnWGlYPnF0e25xfntBKCIqLHcmJSllT0Y+cjIob11oe0Ne''@;'; put 'put ''IVs7bEE7TnA5b18jLEArfHx7eFhrOXMrTz4lTXFTNjdjKVRVUk1IbSE5ZUpTNGFvdjN7RU1LMTZAKis6RnhjOVRRbT94Pyg1IWRaKn1bVGQ5TTNpRShpN3hpVV13TXpBJiU+eChbJC5ncTZDaHFqQlp7NytQQUdCJlF+WGB2VnhiTH5KbVJnQSxXemQvNXNnW2RIKjNQTk1UM2FGYWFRbV5GTzgk''@;'; put 'put ''IjdWXU5NWTZkakg6K0hSJHoia1dfZkw/eSF4WDgwLG5QXTFuL09DS2l8SkxhXmNRMztXOzZzSD1EdjZkbEVTRT1dKmYyQjJhbGJOPm9dO103UWJPYj5vbX1GanpgP01PZEpnXk9rJFMoOXpqem06YDhaPGBYZD5FNzU2K2dTMSN7IiFdcDdhQ3xNMyhsV1dwOVIuUWRUKSUsX1ZVeUMoIT1hY3sv''@;'; put 'put ''c298QE9YSllbI3lyTGc2K2pkR2IpcDE+akt+JSZ8Ji9kOSFOT0UzQjc8ejZrdWIyU3ZrdSsxTDNlUT9gU148a3FtKVFxSEEvR09GakE6amQrfHJIZSFkOiZiaGFHdzJtKlB9ZGdKKFZsKTw6RiEwYGwva1Iqey5bRDxwIiwlRC59Pz80K3hIcEEyZDBKWDZZN0p+biQ6ciVtdlckNW9VVDA8Knhh''@;'; put 'put ''WFNOZ2lZW2hwMjd1aj9AMC8qIUdyJGtsbSI8NXciOVM0K1MidzYmK3kyP2ZlQUBBPXsqaWglNkNOcX5QPTdQYD1RUUJiSSRqYm01M2dFRTc9UGB4eCg4Z3pwY0MwfmEqciQwIjNgQDIrRzJIKEdfZzpZSSFfUDUiTnheWUgvMTxwRkIvSGhPZkVEdEBubGY1KmtCfkw8UTxENUg+WEpqMCVMcG1k''@;'; put 'put ''Kmo1YWB0UWciXmpoYk5ieE5DTSphOFJ2ZVg/a2NMZzB7U0dNLFhqaDB5OkkuOzA5d2FPU0RaUmVMQFIudSNiV1UrNDJaVl9QS0d5bFEwZztYSkw4K184Nlo9Vl4oYlAuQF45dzclfG9bcnMlaUBhd1NNfVhKJVhYLGc/XXROI0pmVDgxdE52SGxmM3k5TDdTNSxtJGFldjJ1aS9aKixHbF5HTHVE''@;'; put 'put ''Qzt9fkpPQzRMUHZ6S3ZsOUp5XX4xMGpqajx9RExzVDw6Ozc0a2ZOVFd6QENSM0J1OztfQCk5cj5eKCZNSmk1TVhYRGtUYT9sU0IyQ1ovdFh0THVdQjYzeSprQCRHKT5SLCFgXSQydUAmQncpN3R8bT8vT0leTXZDQlV5YTYjaVc9Izx1JGY9Tl9IVWJ8JW9xRkVLekd7YHFsRFluMCx+d2o5ZT5m''@;'; put 'put ''SV4/ck9lKm45ZSJYRF4jPHNHIXBTIzE8Vk8qJnM6VFpsZDBvPTs4cWFVQ3UxfGxIQmB1UlRtVjUpR2R3c2k1dTY2R2tVS3FyRjYhQiskdHVvPSU0fUh0RjpyblcqQFhgL3JiREZ2cGR2K1syWjspYTNUTjBSXn5BPnxpZHFZWCMuQClxQ0U5S01KQmZLeDpoR2VkaE02R2V5bEE7XUpiIXVieWla''@;'; put 'put ''d0ZvPmNXZDwseFFJXio4UyUhNktMfE0ldiQjfjBeQFpaOCNDfTQ8SjAmMmpmQWF5WCJncWFiRW5hK2ZQJU1hR0svbUlHNy5+Yj9yXlIyKDF2SCxaa2Y9JjRrU3xoImgkMSFXcUNTb3NjQksrK21CXmVGWDN0YEpzc1F2RHVodURkNUQ8bkhyXlAlVndPdTQhV0FAeTAsKnkwZXdSaT1ZaE9nZk1h''@;'; put 'put ''LlRwN185RSN6Wk1fMENVSWFgdGAuI01RMmhHZW5Yc2I2VXxMOTExO29+fjs7T0NCR3hUPUE2RjJhaWdibWVwRkxDQTFELn4iaGQwSWNLOGBVVVM3QGE3LnVNInJXOncqY2trPyJoPVlaM242RiFjakFZNT5lPDBYcDd9K21pMXZYNTcxQ15fNGJobjFaZW1bbDZYZV1QcSEhMWd+I2sjSGgqO0BS''@;'; put 'put ''VVJPZyFlOGhkJk9RVV5AVjF+azJ4ZFh2Y1JtSjAsTXRgN31xLnRoS0h9R0g1XjlCTGRhUWhPQDkjZFZnRUh2cnBqUF11dCNtQEVmdnlkQ2hSc1hYb3FvWDx0dXl6RDpuWyk0dFVAPnF8LnVqYDZJRzx8a0BpcXA6OiFhby9xeTI/KyldIXAwXlBiRWsqaCkvZ1ExRHJjUUtkVk1RPHMxY0s2Ymlv''@;'; put 'put ''W15VUSYsQnMqYCI7d2leR25vYUhyYVI+T00xN0pOSzE7QCZ8b1ouWHFvbmgkZSo0IkxmNjJEent4RnN0Zk0ldjRVWy94byRhLF1meWMjYjFGZjkxPSZzSGNhMC4hYHNYN2FxbzNWSzA4WHNYZGNwKn1oazNMcmRCQFRrWGNjNjQ9VklebzcuPkpbRnd6IWtEZHglRXVbXy9eQ1E3V0o8X0FRZGx3''@;'; put 'put ''IUxoTjxQYzBpaCE8aCpkSTsuans5S2FzVSlkdSplIkB3ZkZnKnEpaGQqbmgzaSpmWzs9YDBUWEsxYFVEPFhmVC8/RXVISnlSJT1eSGVNRW9pZHo5VGspcXsye05QO0VqUVlYKEU/cyJZdGhWWHxVWXBYdUMlJmlpSmJ4YzopQCJTXW9MeVtCX2BGOHxZaiMpJUZGVigzUyNvQT9GXkdlOj80dClf''@;'; put 'put ''by5xZUlqRlcvWGNsJjlMM0ZGXjNrRTJNIihzJk84cjMhT0Y3Y2o8Ym9ZWnVJVzFINy8xfmNqQWZEajNIKTRWfXRTSnpeb2A4ZlMjP1A6PW8rU2lkLzZlPms7N3cvX0lNLkp7STJGaDBZVU9PXihwcE9oMCFwQG9iYmkjOGxMdVNZXnBrK3xZT0c4ZztXOEAoWyh9SXBNRFBKP044LHhKLiE7Xy52''@;'; put 'put ''YGZTRytwNn11NS5WNSVJeWdub1lXR2VyXmlZd211TSx4cFQraHVsQDFSTW9iPiVqTFJSZi4vTzdaVU9PUjkxY10kdjUzTV9VJl5AR0BWImBxIls7SUJmJWN2X00uSkt2OFJEdXc6TkJQKjYjXWBgfFFyKVI/fTBhKiRNdEgyOj9xOlI5MX1iUlpeP2pTMl5ZekpLbSVidnxxWWUkensreipVaThy''@;'; put 'put ''NT1WMENRRjhwPCtqfUZ3MCp1d0pxYHchQS82PGkkYiw2PzsuOWVtbDkjZlNde0QrJmk2ajddOTxAI3NsNmhvcWdLZ10vWTxnan4xbV8qYH1fLk1tRTEqSVh9RmplUGBoZjhOUnI1SyRbQEM4NU9dcnxxIi5DOU04dU08NERaTjh3Yy5KUmg3OEVJJiNEOCtXci4+bT8rb0l3TXAvMWhBJTBFIlB+''@;'; put 'put ''QiooNGUlOV5IRDs/YVNpUzVPQ1cjSyFMPW1FRClgYEllclJ8Z1V2ZFRaWiFYdlNST1UrTGFacm0mYSFeY0BUSTpBZm98S0tmWEohUjcpNE4hLDVHQkpsZXt9OyEzTDNyM0wzMVpQY21SIyp7YWQweSJLTT5oZyEwISNpaUJNYW15PHlmTnpHYXByUDt5LlE7WnJFd104ZHswSzN0UEFnQ2VgJERY''@;'; put 'put ''ZipfX35fPDdHeFNHaEg8YHNvVj5iPGdKPjtgSCwoRyZqaSZsfVB0ZVNkdlt3YEorT3liSzE2SVsvPUk2eDtSaEEveDt0MkVbaEt8WyN8QjRmbSZkc1h8WjBUeVR5VDE2Q0k2UTNTRzl9TzxmdU9vcil8UW0xdnQlUWhBWlIkPzd8fCxPZV1NMy5YVCVlLjJwNWJwN352JXNkRSJbTS5dSFRddiZR''@;'; put 'put ''TX1uW21ebGE6Tmw4NHZCfjMvYV9WSTF+Jkc6S2Q0bGFZSUQwLispUzZeZG02LEBpUj1AKjpGZGN4PVVgNzJmLmdJZyJLbDpTUjc3TDN0emNgcVVPfUVUVStONStNfjN7cmNRendKeilkK1I7MTtAMHd4N0Y3cnN9U0pkIjdOJUlrLzRVJSRrIWR7YHUxRDhnem4xbXojfjMlcj1JXm83LCpWKlFk''@;'; put 'put ''USxwNjNPTDFmRDxCKixdbilmfXlQdURWOm1OYTNPS0ooLHxEMUlkYUwxTnAyQmtFVCNxSmw9XWtXPVlhTEwjWFBBaVZERzlEW2gmcGswM3Z3VilXVX1sO3k/WmlOWWBMcDkweURzTlZ4RTBWMTNzeyY7em5wVGgpQGg7b1lhYSE/PngqdnMmdFdnUGVvRXBbbHFsUUEvT3NMbHUkNT0hJGc1W3t9''@;'; put 'put ''QDAoPV9+a3goeiFRLl0oUyIhPzJNZ0FnKjlHPjo7RVsyNVkxdE1GSj9aZlchQjJrZDk6NnUwX2JgOl9AWlJVbzNITEcmd2IjRyR1VkcoVWYySGxQUUp1PlMmW0B2ZzJFWzFLdjhYRGV+R0MqMH1MTkMiM3VGOS9CTzs7IVsudkdlcEpydW1+TWVCT35CdzRyIVRgIjJeaUVSdkgsPiRJPWlqalpl''@;'; put 'put ''W0w/ITokaXR0WG5gdzFsUmQhdV9ecVBOMzp5XUAsdUh4RElOTEM6SFZQb29ddzsxVFhnRzFIXUJ9Y0VpT3R1OHpIU01rTT40KWZxMXJSU3ZrL0w2KFtPdkhLdGBsend5W3Q4SHF3Zj5SNmZWTmEyST1MPjp8MnF3eXorcDRJfUA3PiNEWzBHOjc0LE9SVUFAPT9XOC54bj9LIW88TFtoN1p7ZWtg''@;'; put 'put ''IWxQLFRZSyR7YXBNOy8ueyxZKiEjMF1teSR7ZzI8WVY4JCNNW21xIzd8RSk3ZWhQd2toOl93MT4zeCZILCx1SnpKK2p4RGpKXTBPOWY6VSF6fFREYWZhYU8kYSJmfEdpSTF3S3p5KzQsK3Z+XWZwSV9OW0U1fHwsTyJtRUVTeFk2TzleLktNOCxdNFFuYFVGKGpCKWBzPzZVQE5sSStOdEcxd3Fm''@;'; put 'put ''PEJ4eTw2YSYzd2AzRl0yMFdXRVliR1ZVUVVgR28sY0hfXTR1QSN9eWhaRSNTJDBtbytrNUgoMzIpNmBvOUQ4LHM1fSVUNj1tSmY7Wjs8UyE3Yn1HfWRmJStrfTJvdT9aQmAlTVI9M1AwNGxlPT5sVz8jWVpmVTV2P206MGBxRjVTaDheWDUhVzgvVDtUJlJvRjhjcno/JFpdQFgrVDhySXNETjBV''@;'; put 'put ''OUpoTEtXPDkwMDopM3UrMixafns2bnVUITozQCQoMSFMW2dJSTMhU01hTzosMnhmOlVpMXtNQEtMZlhbVzNrLik/RjhWNWpqNj04ZkM1SWJnQmMscmlLKTVATVRlZ1FDXSkkdnlGITkhKE5aWFplRSZTKUYrKTNEM3JTRFYxSDAvNzRNUGJHflQ5eSlHSnxsP0AkZ3EqMVB6eng4ezlJUDVuQlYh''@;'; put 'put ''LEJRZGhhNHh1OHlsbHhsKmpTZ1NPNkZnbmI1dl5dXk5kSjVUOUxdeCwrIkxILlJfbDdWWTEoeWVCdUEpb2N3eSYwO0YkZWsjaGJART5tQU5qNVhEWllbLjAyW1l5al4waVtkYVZDQCNyUno4aEpsYm11SGc5fTEzJkoocG1jNXY1ZTwvVnBmYF9AP2piJDtkRkZqO0FHfCNbN2BASW9IUms5Mihf''@;'; put 'put ''UEk7M3UxZU1uPWtCM0hbcSYzXTppdzAkYHFvOCI0fjYyNUxpUnJfJFFiVE9pLEp4XldWcW90e3J0MU1kcld1WEBQalE2aGZ2P0IuPHdlZiopVzBQQ24vMVJ9PyZbLEcxYUhhOjkzelpXaUNaTD46WyZVb1J4UXpzWGNyOXRoZD9UY2AiVCpaRnlQan4qSkN0YF5JUTVIZmNDXXdCZzdYdS5UKDY7''@;'; put 'put ''bXYiVFVAdXZIUGJ1OnVhZVJ9VnFaRVdCMHx9UlgpaDE9WCFPMTVOUFMiaGRgJTAhbTNqZik/Njg2IyQqN2RKKlVJWHhGQ1A4ejU6LlZlbUJRZndCXiwhak9hfG9nSWZ7Ynk5a3d9anJVSWN4R3RjdkdNeXN3L3hkLlddPXApJGl3NmV1aj1UW0ptKzlfSSYxRz95K1BKJG04eSxhQERidnN7dVAm''@;'; put 'put ''IyhdT0pCRHgsfVEud1lhW0d3dTNka05nL2tYSlhjbHsoJkZRaldORClzUy8uImNWVX5iPEF6X1FjWnJFTWxFM3M+K2dGUWFIVlBNZ1M+cTBpWiY5MXwvOCk2N3l7QlYqWVZpVlBKenU3K2x4SDE0SWJxU195cnUoRmZLSkNgcTV1ayFbdkopWStFc0g2YSVxZ2J2bik0RT5UMmQ4WTFLJnc9a2B0''@;'; put 'put ''dHA9PT00Qml0aGVjT2F4e11ddEVfOTVxSU92R1tjbzBCRmZxfDEydTVCZEQ2RzVOQVFgdDFwUHwkW2pHbnBdVW1FUzJlTUgqRTNmW3hmazRrSDlENDRieVVRTTxIRWUzbXZRNSNrNmFhTkNvdiUrWWJpN2tfY1koOEcoK29wS05QNS5PcTg9YGFFUVJvTXA8M2E3UlgpKWI4aSlifCFJYl06SjND''@;'; put 'put ''SVRDRGw4MFM1XW9EWzNhQV1fcTB4e3YuaUN7KVl5TEksYkhqWD0sZm1pRDxCWS9IZXsjJTdJT2Y/YSpmRERrdXBIdiJdfHp4UUdtfEdHQzZKQTM7TkEjaGI4W1Alc0tsa0lDKGNud3EwRWQ3IWhNZU9bV05gck99dDkqSXc2UmAqSipSO2NQP2BYalpXPSksRnBmOyNYME5ZcyF4cSY4bXlJJGA8''@;'; put 'put ''ekYqajhWfnl8T2pLI1lfSX1MQnJ0REAvdVhMUjZCYiYxOTQvaUdUSVlhbiw1Q2QpLlpnJCE3OkpIfG9wel0zdjQlV0o3bSN5UjJ6UUNtcGIsbSIoby9LV1VVQ2J0byM3UyhvbFFWOVNQRWg1PSFJOVVrSHx9OGFZZSg1ck8mU0E2VWdXZGZvc3hPd3wudnl7YXlAVFkhU3ZRdzpLeD84eWpYeFhv''@;'; put 'put ''RnFCNkIsWkZnO2lNXzhCTU56JDtQcD1UekR6dm5wen51MzR4eT5NLzkvZG52bWcwcWxnNGM7W2hVOWM+YDlqIT1haSFbeVtvbDlrcHVyJi5OImJEYlFJY0VZZjtvUTM4WDtzPzglc3g5QzJXbVI0VWg3bU03dzI+eHRJOGYhLl5VQkJIYEkiPFA3Y0FjP2tgSjlCQ2g0RFQjPjJdUXp5ZnB4cURh''@;'; put 'put ''JUlnNVRefGNoO3RTVmYlQyZUMytWMWNyWGRCeCEqQ1h9cUImcXFTXX5GOiRCYlVyTk55b3Z9PyY6Nit8RThhcm5oVStYKFl5MDxecG88N3A0ZkAsaU5yOFhrYXBuIUwsR00+OntgRztoPUlhPDV8WHhvdyVeYkY1fD0wOzRITncqYXovcyZEO0hETC4wREVsNCVQOH58NGVSWjo/bVNJYzs0RzI/''@;'; put 'put ''KVYwW04zNVppdiY0dEhQTChMfUorZVI0RXl1KU5Ge2VkREAuJDtmaGU0N2lkY2MuPkRwTHU/UmdRdHgpNThTIztObGUyOyxAfCNIOm1TQm0kSW47XiZDYyRCIzZrUE4zdmB0NVU8XUZBKCR2KkF7ek19ZlZTOFU8WiF4fUM/NEchLC97RjM4eVV+TjlMRmt4UiYpSCk1amdWKE1acmpgOk1UO3V0''@;'; put 'put ''a24hZlhHVlVaN1VgRU0kQz9ddVE+XnlAcVUwJHQ4ZjlQdzszdiJ8dDEpbkZHZS90NCVla09Wcm90R1NaLjF2OD1IdEpOSUQod0FtKFYxL3lpRz46Sko9ZDFuUFQlUCYkU1J+ZztCY1hyfWYhUWBobWB7Vypda0YrTDI8WTtMISRddmgkZTwxN2h9bk5RXlkkLiVHUWQzU08mX1JKNn0iS2JWU1gh''@;'; put 'put ''SzFZPTcuOyR6LD9vUTNEZiE9Ilp4eGxIVmpWRUVNd0VkSkozeHU3bHEjYHkqc1VjeChkejJSaHE/dSVmRnl7Y01wa3BtYFVBTE88eV5CflY5LFtPN341ZllMTG5YfFp2UTlNciVlL0E6JiNINTM0W3o9N0FzZCFDZlomeipGWnV5MGY4TGhxT3pWOVplXl94V34uNk12UEssISFOPk5ocChPRDAs''@;'; put 'put ''TDpHYFNwODdKMyZ+dGR7cyU1KXdbcmlGPyVSNUxkenVMQEtkL00hZyhPYWszNGx6eWx7On1RTHRocSQ0WGN1IXJCMn1DQVElTCtLIXE1aG96SEdGaXc8KyFOTkdkfWg5VTE3aClwd1IvWkB7YCMsayFlMWdxY0Q1YGsxe3dqSC5paWcodyZ7a0lER2xLdkp6P21lX1tNNlVHO0xpKDJPRlY4VXld''@;'; put 'put ''NnhZLFlDKSQrKiNgUGRFPGMlW3chSXh6eH13az9xbChZUHosI2g4Tzg/W2IyYndyZ3ZiZCleKDRBa3tLNjxEdWwyYSV6aUVGa2dNQUEqaHtHQnRWRShNZWMieXMpPHYsLEd8KkJJSVRQW096dEtVKEZQdnB4bVJ+WEFBQUFBQUJ0JkYqaERscWkyK3ojbHZUSEpGQT0hOENLVzszZ1MqcHJ4QzhJ''@;'; put 'put ''SShkNThXdlB7eW40VHhiOVJGN3NqNUUrYE0pJCI/YnorXzhPYTVbJE0pR10yQnJvM3x8MXxmIl96YlVWWkNKIVg3PD9MPzd9OyVQTERybUpPNmsoaUVsNXA7IzAvNiNAVXM/eHh9QzVjQGs3Yj5FeWJmamVobXhOVlRsSTljbldxWkw5eFFVMGxOSSMmKCRodjgvbSZhLHMxKWUoSE90UnJtNFNh''@;'; put 'put ''eGJxPiZgP3YhNkh4dyZqc3ZUTmxnbylQcFQxWnVPO2hfNC8zfmg1fWxbcWIhUUApY09ncGxlNHgxKipYV3BiPGRZezBbQGpRQDw7QGMhMXh7TFl9YV5YQ0NrI3A0ViRwPEpSWHtVWXVWND5zeWUySWF8eGV5SD1KMF5YaHc8LjJRKiFpdlVMZzImfSZLcTY5KFkoamAzJWx5XSYyO3Izcm4lS0om''@;'; put 'put ''dUJKKU4mMF5+P1BYazAlP0E7WyNFL3xiMmJ9MixXN10hImpSIk1Hd0xiLHdfRTgkPCN5Z3M5cDY0fn1sSUVqL0d2ZnZhRUhjMiN3P0VSSU4kSUdRdz9DTyZnfmteTjQoPkNwJDpgZXtoWWUsKGchYmo+NHwhc1ltTzp+KTp+Q2s9I0BzJHVIYmpOZmFJWXdLN1FVeDp9U0kzKGh9XS5YMy9oKyQp''@;'; put 'put ''RVtiQDZPZlIzP0F0TWc3NkAjOmZ6Kk9MQXNKSjAiUV5iJXBgd2lRQHNuVCt1a2FrLGdyLFFdcVp5dmwmRTRROkI7cl8wey5KcGRnT3ooN1QzIWRKbDdXYmpjcnw+dCgxWTpHIVc2Un59blJNQWAlMkdCcnpkM1p8W3tBVD87VXI5LzVLbUYsSk9tdVIzIiYoTWs9MHhBbjc4YHYyTiV6PUhAKlsp''@;'; put 'put ''MGlQW189Q192dTNJWVJpPXw9OXk5WGJSPjR6MSl5IlY2R2xCemVlWzVHflpAVXgmRSojNlpGWU06I1hxKlg7OVk9X3xle0xiLEN5OH1VcUw3Zzsla2hEYXcqQEk3cSR6TnNub2E3ey8oQj5GNl1IO3A9eGxOdjhfJlZTMnk5e3M8JUpedF93alNUVX1QWjwsLGx+JFJtLm5MbkkwKXNOdX4mZm5h''@;'; put 'put ''Yy85ZElCODFbPXxNK0VRMHVzVlU/PmtCYW87NypIbX1lYS51a1l5Mk5HSyM8W09HWiEzUDRQNUtuTVIxY2kxWko9dSJqWDpKS2ZQaHsoJDddZzRlMmJvJTpxSFNiPF1aPGdjbDIzKGk4Pk9mNEI3Y2ptODpqSCYySyQ0dFQoanNjSnBRUDs/QSpaU25pUUxndysvenUkYjg2YThCaU5hSHRlLks+''@;'; put 'put ''KlhIIy9bbnE/W0RrX0xyPSI+WVJWVikhOzpsRypTM189fHxDRENPSCRNInBfRXlfbkBqPj99dSRyMT1wRWNdYSYyOn57SmJkd3QlMDUjU20oVGlRayQ1K2JLTDQ8XSxnOFtFM0dBTlFxbj1dWG9dVS4qVHZgJW1KcXt3QFRzKnRMZW4mRDtWTmlmKDteL3Z9Wyp8X29maEskOUd4ajg4dm1ybCgu''@;'; put 'put ''L1NZO1tPLyFwTl9aP2w+L29UPjU6JjYsSztzYltJfTgraG0kUEh7RXouc0t3TlssMG8yMFZpdmJ2c1cuTGk0KVY8NztiU2NYN2l3fnFULlZIdWlMXTV+O3g0IkYpdTxMVXBSNEM+W0BKIXRWITFMKDdzcWtMfng1dnA4N1pKeHlSantkMCpeWDpTTil+UTd7LkcrOXRpYz4lWyg7Vno/ezFNfU08''@;'; put 'put ''clA8TVpSWkI+K01bJSZmSV8+QHNEVilFIWYrOVV1QGkyYUQydkBXPiR4NkBgaGQsdHFCLFZAYDNRalcwL3lVPy99Q0ApMkN7aHFeSmRRQmUiR1RNNUMyUi44Ujs1RUo5fTZta0p3X1dYXSVgfXQrMyttOUNUYCF4MihgMyF2WX17XnZrcHAsLDFpQlVAPS8vQihjanl1UlFeJCNIO2VTKSJjTm81''@;'; put 'put ''QklAekQsclNwWVYzWGkjaFpSY2hjQCVQMCppNyhKNGZMT1o/Pm4hWWc5Mix8eHVaIX15WmI6aTtOSXh0UnlHUmUyKlt3fnV+QVZZcmZ5N3hMZEwlVHZSaTx2ZFhpJTFJdi5DNUBaYywsMUoxQD9XOHREYjI1S3dseFg2fk5sbCU7O2FDWkFFSyEodmp6VnFgb00kWXo9LFhAKytUKl8qcFRZLjBT''@;'; put 'put ''NnoxbDJneGMzOzx4QDdxTHtqQTYwO31Xe3lvLFQ9MWMsVTJJalFQLmYlbTJjOXEhI1taY1ljQ2Y5fSx+S2lHdHJ4OnBsIyN6KkFiN2k4cih5KXt7fl8hXjBleGdKb1hfWHdiNSldW1FAYXNkYFBpPj5nOVAxZlRle0w4XSRDOnRWb2B0IzhWfkpFOkBsck8/X2pNZjFnIyYrTEY8LlUiOntlSlgr''@;'; put 'put ''P2IvLEguXmFWXVFaOywhNGB4KiJQcjZWfT8+ciVGIztUd1JtR21yeUFZIjdofW98UlAkRSIuejF2RS9DLj1yXyxXbj1ETlssPlBoO0owQW5xS1I1I01uTzpjLDR6MTFYXjcsTHl3QlRhUWwzMTUwKG13ajpifCw/SjxMfW1xVkRZXW9FaU05a2pSeiZXVX1pVXlBOFUzMT4rTlM6NUJaYzJ2L0Z4''@;'; put 'put ''RCNhLDY8eT8/TCRnXTx6PC4hUEgzJGJ9IXk3OkYme1ZddlNNWng1Kyo9cyZHOFJQXT1td0p1NyIxVWx8LClFey4leFspJUBFRnJlclg4YzQ7WGpSdk5EJE5SYzp2c2MxdUdnanVUTnReL31HTSVsQH5QQjpdR155YHhranFiKEFnPGdFenw+e1NCQ0FDQCZXa2pRWVIlU1IhQ0tyPFI9PC5kcyRy''@;'; put 'put ''aWxGYm5HMHYrWVEmMSh8XlNRcjhJfURQfV5wTipjY1tHTz9dSXZPWy8+UChYaEEkbmhkbXNTaVRHRl43KlpWPyxQaT98Ty5eW0d4NzYuXj9YRDpMdHJrUWQiL0VbKnxzSzErTWM4TjZ1LCtARWAiekI/Y0JsUmZAYkcqUmNxX2xjR0ghNS5idDBVcSVvRjI6MmgySDZRRFZ7U2B3ZkhbLExbJHdK''@;'; put 'put ''dmdaInAxMStIP0BPS3k3fXhtcU57c2RXIntqQH43Sk9kYS87SiVnZ3FbKDhYZXIyOTx2cTg5Rz0rU29ObXBBOXEuLFo+PEBbUXh1OWoqOGpRQ3F6cHpXMkJ3MD1oUSFbfXtRSEdDJi8ycylhI2xVZFlRVU9DUSM6ejxMPzc7LEQwImJBRF01dzQ7X2BqPHp9blMwTHJMcXhpMnNdVUEibz54aFhb''@;'; put 'put ''WTIhKFNLdjFXRyhGempjOyI7UDleQ2Rua110bCM1Q29PNTt+U2NwaylFc0piMWApSFkzT2VJSyI+WSh8bmBSSiJpfVhfYjRnanFITTA8az0vZSlUT3E9dH0iZ298K1d2XUBmWDRNQi51eVJDTTcjVypDL05kYVZXQTRoVUpvMGFvVDZkQ0d3OUFoRlJzJTRnVVIzMWg4XXksdkhRZ0RdQitIcHRm''@;'; put 'put ''T0lZP0VDO3xVZFYiVElwez0lK1d0SWJGWz5DZ0suZS97dUBjK0smKTVvYV8xcyNIUiY9JF9gbWtyKmBeQElIIyNLS0ciYX1tbSRLMHYwQUI+QHxVdGxeJnlpcVQsJG5iPWRuQSFifFVscDM/OXQkIVFEQnh1XiMzRHVKbzYhKlMsPik5M211dCwyRjlVUVRLKG1jWFoqUnRVLzZkcEkoMy9LQllJ''@;'; put 'put ''TkZXJT9NZjpoI0hdMnhGVEQqVH1KWmJ8NiZ1d0M5WHNAXytDelZVdTZoUkJpUi9mQWAqPDRhXTlZb1hvK0RRTV99bX02dVIkKDtGT1BxMFNSLylraztMeW1bVHtlZncqUjQxQGdtVUsmelI7XW01XS9yVVtLMyp1JSlraHN0NmVPVFFsQVcwKXJ9aUIoL3NYTFdEQ20zS0dlXWhmL1RgVG1AQiV4''@;'; put 'put ''RXdUfF5eZTNSciI4Yjh7SE01UGtnQCQ2S0BENkVGKXNsZS9qfU5zJXFRUEZVfktnR1UyWzRuIVFKWnVPJXhfNXk2bFc0aiVKfC9oLHQjRS5uOUNiQW02ZDUkQHMrL30rUCpzK2svWlp2NllzX19YKSR4KVd6Zy5QTFtPYWlXQX0wNWU6XVRuQCVJNlE8ZjtTdEUyUFgrfX13LG9RbyR6WkcrKEk9''@;'; put 'put ''RzBjZG0/R1ozKEkyIX01fXQ0ajg8PnN5W2ZWcDQoVyFZTHlZP01uKV4/TX5hOz9VMDpXUC44VDpKWWZjJUVQQU1tIT12IzpaP1IlPiF9MnxRKnhOd2NLalRdUl0sb15ZcDc6Y2pOSUZlcyN4emNQKiJsSFZqV1I6Uz5jTU9EYCFPPHIoe2NHWTU3TCFMKyZ0PmJ2KTE9NXQoUXw7aV41TGk3aW5M''@;'; put 'put ''V1BpPlN4MT9gb0s6XTpRXytLUGZoLFJVTEkhSWYlXUM4VEtycD9qMm5eRmlkZ2BvNXk8Q09acUNCYl9zfXUxZTM0KVlfdz1vR2hpaT1NYSJJVG1oK040YWxfJl1rKCFQQlZlJXcwU2RQZiteQTwwKT4qI0x6am9nPjAxe0R5fEovN0ghKUp2WTh9QTxzLlVSaUR3Rjs/YXAmaTJSVWZYTEdzPUsj''@;'; put 'put ''P3htK0YxKy59JCFWOTdOOkJoeTNPLiN9W1VkXX13e198RnhXYkdaQnVjTVN6aX5bakVKJSlAS3V5TkxhenxITzJmaVZRVjV7IXBaNFk7VWBCaWpzMDg4fTV7fHhoZixBWExaeCpqdDtwZjM0bitCXls/Vj5tcU5DdTFfVCxTY1lHbGxLcEU7RUd3JjpdWFQhM01OVjJ2L3tLZyV9e3dlN1E1b0Y1''@;'; put 'put ''eTFwT19yZHU5Mks4LyxuODg0RHckSjQrVShFYm0wTFo2MVtAPWB5VCU2UVUuNyNEZSxDa0pDezNyYCFOfjdpNm8zYFBwa0ZXKm5ZM3FreDlPQVhMMEcqZik+bVlAcH5fSWFSUVpyPSI8Jn0/R0NYKXQ+TSFKcj1gJnU/IzxTakl0KHFsIy53R0Q6QUIucXJUdXVBRHtoM3tzX2defV5JUyE4fFhn''@;'; put 'put ''OGkxIz5JdSxvaj8mZDY1XyoxIjcsfXE5X0BJZTA5azxlKEhmV0ZSVW9DOWBqXXtoQzJPWk04PzV9O0BRNVc9K1VPYyRyZldlelczTWUkOzxmS01yWjlBaDxwYTJVRDt9eE8yZyZyI0skUnpvMGE0Sy5kZmxwMkNPdilzODdXRVtaQjc4KS4pZXhFPGI7bU5CLG1Zdj01WTxgYkB4Ij9CMG88ZW9y''@;'; put 'put ''al8+UV51az0icjt4dVdkTihiJXNyWCp9Wk5JLn5DanY8US59VlldfUkrXWhLLGlhVCV7WjBFcUglRmsvcCZZSklyIj9WPzxHd3x4em9+Ijs2SitdNHJQYjp2T3JsUDlZe2wvbTJTL1BeVlJRPHh9Vm5rcXw5RmZ9PXdVYmMzXU9aU3NbNkFdb2xMY3FkZ20/UUlEV2Q3fEZya2pdMncuRSUpdHdJ''@;'; put 'put ''ISRDUWBtLDVjN3heIXhqUmBuVEgyZX5mKE9AYjxYaTQvKE5yVlUue0ZUP0IrQD96eyxOblBQYShUYF9ETUcibHJrXz5QVVJKYHcva1EiUiNONmwmLEtERjZ4bmshX1RMNm9dZUd5Zj9GVWddbiEyLHdPVlkkfls7R20jM3d1YSpUJilTZWN3bm1GSW5QOWdDcV9zTz5JJlNrNXQhQCJTO3R4d15W''@;'; put 'put ''LyNfOmwrdHEyVFZNJCF1NGNWcG8mSGtbPm9IPU58altGQjh1MCJpaXdWV2BmR2laUyp3LjtkXmFCbStIdSgyWFc9bWAyZD1fazpQV1NudktBJFcpL3BpZDRWd1EwV2ZsJCZGITBldjhHfjx6PGJzU0VdSDhjMWtfT1lRPXtMWUB6IlY+cTZIcHEyOmMzRkE/YUNpOjV0MXRybG54QTgmTm8qNiYv''@;'; put 'put ''bXM4WipSQ2Qqb2NdPVA6TDlib2ZSNjhafTRANC5mfH1ScjplVT8qaU8uYXt3c3FsUHxiP2xVVVh4UllkKF40fnMmVENFUGUvSFk7dX57cVhnYVVNTkVkImFRbTxeaklBPHBMOS4scmgzaFBuZnh3JltEfitrQmNvI1E5Mkc7ZCMpMHV2fnhqYyxXX0U8aFI+SFVzQTZAZmd0Q1krJW47K2h0LjUp''@;'; put 'put ''W0FvYUUkcXY5a24vNUdYfF9xLmJFdyFfZXtXQD06Y15dVyM3cDBoJih0WHo7MSIsb3tlaElmaHReZmc5Kj9RIyI2LGY3SmQiMlk3eEssaixHRkZFLHRHNDduIyIiJkJKLnRENXNidG5XPT9bPWtnT10+OyxQSE46dz9ybmA7OTBxTlFyNTR4Wig1d2lTKVY6JmFtQE5ZZlljIjdWLHZ+UzZwOUty''@;'; put 'put ''LjM/Y3p7bkdEV1pjfDhEMmZnWmg1WlE5WyR4QTlPJkJEc2ohYGpJd11OeSR5MHFLLmNXWVlVMXYvVGE+OSM1KGhOYDc/NFhiS3YuVj58R09DLjxJTDpeWktWQyJYeyVaP2Q+UUZdZSpLSCRuQ1JmKFo0TXI/VHheN190eDo/O3I/djJ4S0YmcD9pMiRnJVQ4eGc9alVhP3tePC4pYSRJJjBee1JV''@;'; put 'put ''Ukl+fXVVX2VEPkNfPHgyVngpIkF7KXQ8KXxpJCI5RHA+eWA+bXt6WCw9YXx4WyUsK0pDUCFqUkZGNGxfY0JkQjMiXUVXPXs8LihYTTJROm9yfil6a0ksIkZ1e0spJHI2TEt8cyI2R0xDKDlTOUlvOFV2LHk5XlZ1KX5jb1UzMTlJcCMiQVNrfnV8PypjOFZVWWleOzc1cTVETHxQdnlYbyNlTmx+''@;'; put 'put ''Nntsdi9gLiVEfXwjTUY+bClrXjczTkJkO1Fje25bXUhERlVgVEldWXJpVWlSamxxTnZJOCRUVEhjM35gLGcyIjR0LzxTTDc/Unk0TyNCZWsiYHVkc1gsdmdBUTVCN1Q5Ri9yWjxdN0g8ZmtELFN0Q2U3TUk5ZHBYfUZPRHVpYylVX2dgT2BebUVfa3MwIl53MUc9IWEpd0dQPXl7XUxlXzordFRE''@;'; put 'put ''WmBXJSxAWER7QW8oW0gze10pK3QmO0d1fmIsPHhQVmN8OT43XiY9Qz9RPmpVI2k3NFtEV20reXIlOnY1TkRZfThnZFQrWl8vV3ZjLlhCJEpGPERpZiRoXVBRYzRCXio1eERzeS8mRDBlT1FdZWhrTUFCLF5tYSo4XUd8Z2B5YFhJYGZaekwieS9ESipXNn4kZkx2QEJafE9bXnRRWCxibVRbK29e''@;'; put 'put ''PSx3RHV8e2Z+XUAjTTA2I2BeWyM/Pn0iM0soNVc5T2RkV2d9M1ZIRX18RXV1UTM+QltXIj89NTVpQ3hnU3RbV2c5TmxCalA1PWw3UnZURDpBNip8dFomajE7bFNdY0pJblEsQ0ZnQ0M+KUw9Qz8zdHZIYmxCIkAxb058eFtdd0NIUV0jdXBFanh6Z3ZkMERwODEqJnEhRTdGSH4mbGU4Q05zPjRP''@;'; put 'put ''Tm9nP2xuU3JPUl5LYyFRfislYE9YWGVJXUU9e1tjWSp9Pj1HOW1fKXV2dEx0IWFsVTIoYkw0X0ljPlo5PGsvL1Q1em90ZjhbRkM5STdUYUZNbT9uRkx7eCFWJjxnJngjZSVNYX1vRl0oU2dHNmI+NlpNUjxJOllwUSpdaWdzRyg6Q2cxRGVKJVtLbCZKPEFPe2w0T2w1R19DQ1F9WWVvR1tQeDBD''@;'; put 'put ''R0hfI0cqJTZZMSoxflNrL1BacWVNZy8/Sl01ekdgNW9sKHpUSkkiMyZTfEheQkg4TzRlezVlKjdZeFUiI2tHNk5veURAd0UzMTZaRCwwRUZVVD5sYnpOJFYhWDdgS0B0cm04IjdaUTN5cHUxRj5LMC82PmQ0LmEmMkM3Yy5ifGIzZm4wVTgpVCxvXl57L0U5ND9rI1JWQksyOW1Tflt4QGFWMFRE''@;'; put 'put ''KH5LZlNfdlhfMXRpI1Z7NzZ7aDBVdVo+QEwlWzUhfSR7QiIrRmQmcTd6Ri9Xe1FoTXVHPVhuInBbe2FZeCRSQE83Oltue1FLUGt0S15kc1N+RV81O182Y35HTEAjTGkidmRPWl53e3Y9M0gjUHUsOSluLHIjMnNyV0R0RSY6bnA6JClSZ0hbYCJyejJNVDRIem8mJnNDYX11Z2FOYylGVF4lKyth''@;'; put 'put ''RVFhd0khXjo8elpXU3VCYUZOTG1+aHptT2hyTDtZMitOe1RtLyViKngqSFlXQT4jPShsQzUlRk1oZ3hMTTxmalR8a1J5IiRfSS91WmA0XnNTaFVDPjpwVElUYHpzZytAPS4oXUYjcTlGRSEyaEsrSkZPMjFkN1NGTVd8TS9WUzEvfFZNe35YU0RYKWkxaClUbTAkUXB1PnVSKWJOdkZ8PGl2VElZ''@;'; put 'put ''YWBANExhc3IsME5hXkBXPD1MNHRaMUJoVzBmOmxURUVNY2pGbV8wdHJVLz9BcG8heT46NjxNTlJqMU0mT1t5ZWcrR09AP2c1UmpgPTBvekJFbWNueHlNIW0ucFVbLkhUTD9DaSFNKkc0Z0QmPjB8cWNwI3ZPLHV8MTUsZzVUPWdwdTpAeVFlYiF1QTldM2dVRmEhRDBaVU5mXXZuJlgmWCJFU2NN''@;'; put 'put ''RklwdFo/TUh9YHJJQn1Id1c8ZjtzL1c7NHdUTjVAY317eUhPWERncl83eUciYDooSG9SeSgrQT1PP1B0OywrXlF3dlAjfGN0UUxaIilDa0o5SlgjbHJ7QFEpWnt6Xio2RzkvSTMqe212OXxzRyxpQ1MxYE9GWyQjaWJ3c2U7V2pCL0J5VXx1Kz55W1pTS3F4YFt6PTdUYjIuSEA8bVpQQF07UEIh''@;'; put 'put ''dVAwSmhSS0hzKEFwRGw5TF0yMzZHXlRhOG9HPjlucHEmJTMwYHhkPW1Wfkh2S0B7V0grRjYzYU1oLi5YfTJhViFGQVZldWhkYSZdK3tFQE5GXUU8PmBSdjtCJVNnS1o5MnlBT0g6NUw8Tjc8aS5MUUYoVkVvSUI6UVFFNWNTbTZpJDJVZUpnZy5TYEtubSNZPW9vVD8+biM4blouZ2Q4VTNPQ0ZS''@;'; put 'put ''cmlYWWNVUzojXn5sdTluSjo+Qy9RPWAkY19Md2ZuOS51Xk9kPkRZVmY3L18vbEtsQUhqSytzaG81ezVHTSphImpdbVpYP18vUjtdezJoX2ghbzk+VlApRml3JGZVUiw9JHdNImJUNUtfI3g1PytyNXl1a0NsckssWWUoKXQyLzc6MH0mTURqeH41OllkTyVRQkNbdDl0THdNVEwrYm0uWGApRCYl''@;'; put 'put ''LmN3ek4lQF1IOC90U1B7RyRDYXhuJChJSkxHWCpDc0trOWIrU0s9TkhDJGxBRmM3Nl93UlFVNkBZQD1mIWI8PiY5NGNzS2w8K0EocTg8cSlVZCRoc2JWVXVsdTF0V2x0elNgalZ5SF9TRik+STw0NGgxbzpLLlBQaE1veXNtTVpDVm5bX3x8QyhKSGBHeX5QcTBfXW9YQWdPUFNlPkdBemZsOVg6''@;'; put 'put ''WEovWSZEYXpJNz5mcnpYZTVVQWhffF54ZTluYHxIW0JVSGcyWHF9WTRrIXRYT3YmNy9RQUJOUTUuJiZMWjVJQCZwYCFKXSh0c2VjIk8iTXArd0N9bCU4RHdqO1hKW3VOSEd1Z2N2OSVAdCk9P0ZwK15wUC9iI00mflF7bVB0ZypDPDZrMGB5XXF+cWBBck8jI3w0LHtoLE4yVCVLVTFePi9ad2FR''@;'; put 'put ''bHVlaUhHUEJ4ekVEZDVib19qdnssVz8wbS45fmIzbUU+UHR2K0l4JEpKalRxUV9JXltCUikvPU1yK0socHs4YnshMTpoI3dpS0ZyWHFuNFllQzlLSmE6QCxpOCZMQCtBOWs1R1hOYy9jdXptOE1VdUouRSZzYCtXQF5yd3FsPGV0fSl3cnQ7I0tJIVl9TFk4b01NXlo6JWxPXTRuKGhhWFlleTBy''@;'; put 'put ''el4uRlYha11+fFNKPm1yMWIkdV5qNjFNVjxBV0ZbPG9wUj4wVWhLM1dXVTlzSDg1WnJTeWYoe2d+MDV5MElmdVt7e28kKHx1PzVgTWo/XUNnY0hZP0h0JCMvVkt0NUNSfFVpbjI8YEpnai5CZGRaQi9ib2loXUE5TDVvaGt7aTFDfHdUMWB7c1REKyZGPm9XYkQsdTd7fntCblM6eHI4KT1ERSlF''@;'; put 'put ''USMlaGk5eEJMK1NbNnlLdkl4bykuTER1MT9tZ0F5M29BO2g6MzQ1IT1GaUZLR31rTkxYMk0hV3YhY1hKdiE+emw3dmRTeCMuYD9VI0JealBxeVQ4RmVvLiM7V01SNVhZdnpQLHRqVmd7WmYuaXh3IXVFLjEra21veW8zLCkpelZxITUuZEo0cXJLaD93d1dqNTRhMzB7VW9FSDVPOSl8aEtTZkM9''@;'; put 'put ''UkVGfHlHO2lPMUhfUE5Len1ZKSl6SUteJj9McGxBJixCNHt3a3RffDVyeU49VkhAeURZcTVbSH5zWlM1OSw+YCovQ3slfnZ9WiI5cnhTLjhEcUwsPVorQDFSVEheaG5wNkRvIUUsXlBtV3A5XkpfUCpPQENiaComVDVuV040LHd4d1pzI3p0UHowWERnZmF1bCw1eCs3X0M1TU1Ucl4jI2pdS01o''@;'; put 'put ''fElwW0JycFgjSyFMfjg2b3tCPEowYjh3SE9lXkt4JkMlZUdVSnJNWyQrSWBifkAwJWFYQk9bSE0/YG5pL35CYXgpREdgNlUrbWdWOTpqOTsjSls2eDRMSGVtJTo9PVp5ayEoJHRbOlNHeFtIOmA+IUN3aU45d1pZRk07UX5wezJ8IlFVTmxRLkoqJkdkRXBvZEUibHltRFhURWFsIm94a1sqSGAx''@;'; put 'put ''ayxWa284KlMveWtzNztaezZMRmlHOUZFIUUqXzRhPHNSUUdHaEFBdzh9bWRteXxDdm4oL302T1pIal5kUDw0a1dBcnRSPVRNY2E2YEV6dTxjPjk8Ly5fa18zZEF4c05wI0Boc1hZNjsjZH0uUUV5Wzl4X1g5QkciZzlKd1ZaUkJKekpZVE1uNldwOCpMaDklXjYyLEYvZD9ZVmR+bEF6NU8jIV9v''@;'; put 'put ''OjlkOE1wblt7NEJAcFRxKmlAcnB9PGZlZWRFQl5zWm9eQXpBNE5oISVMYWMxUUA3ejR9M0ZCX2JxQ1glY3ZyNW4+S0R9IXcmKkp9NWlbTXB8JkM/NEQhIUE1VXd1d3AzRXxzVkdCYEtBU1d2NldbVzBKOUc2d1ZOLzAhPiYzRnBtMmBCTHlUU0JiJWxLeihlUGszJEBvelIxckxnfiM1Z3lXKT9P''@;'; put 'put ''UHxddyNiS18hKlRHUD54OWAkYTJ+c1B2Yjo2UkhdRzA3Okt0dXh3KDFAWkdSRC5yaSpMSk9vJHpULCxAX3ohJDpXNGZicGMqVCpGLEslaEQ0T3k9SnM0WER5VEI2UCVbQzx1azRbSF88RzNOYUdodEosXSMvMjlVKGJTcElwOVN5NUJAZUlySkY5U1R9azFSMy46PW5XOmB7cH1gYylvOWJYX00k''@;'; put 'put ''O2FAPkZOOCVSSDFmWnUid1tXUT53bHNJWUc3Rj4jJHpocTZpfSpOMj8uMF5WJGtTXlVpeV84JDdWV0cxZzdZQTl7SXNRbjphOiRMWCVKb2xJNip6XVNyaXd+RyREfmtMYnMjNXBMYGNVRi9AUzMrdk86MHBqMk5RKDNNeF9wTiVlUGZlWVtKQTo3QysjTV82XV8+O3ZHOCk/XU9WMG9bZnFJVmxg''@;'; put 'put ''MyV0XW4qMGNMMSRxJVR4bm1uNEdPLHB4O2hgMkosaH5jdjJDNzM8bTl7KS46JmBpdkQxV1o5Y2VVVXtPNGNSSmAvaWghS3I3PnVYTHkpRGsocHxXfkV9T2FJcm9YTDI1NSE1NHpOKH1ALzcqPHwkNStiMnVEWX1RZmFQYSR0JTZxXWwxbURrTzlSY2tfMExySTtgWFVDa2dgUm91U3YzLnBKQjEl''@;'; put 'put ''Zn0kZyEvKmQyQF8pZjRdV2YwZEpgZkNIe18+TGFDfFNWdkhWSEZxOilvJX05fUtbfT5wdTkpYFdecllrd3dfWmpoI3A5RjV5VmM6c2BLME84YX01MTlPK34odGI6IVdAWU8lPD5tQ18wfW86NmZTQXp4M2hAQm4oc3AiaTBqOyQvWlp4bSNESlRDISpqZD56WzAla3UuXkVgeSQwakxWLGcza25p''@;'; put 'put ''alBbUilmYVlrY19AIS4hI2V4KyYzKmNES0VVXm8vezFMJHBLM1Y2QTZwOjp8amQxNCg2JjFaJl5qSEBEdlJzX2lDRDhiVnd3VVN6emxER3J4MThjNUw1biF7WmdQKSY2O0E6N1UpNDQxY0VebExgfDJLVDk/cW1OQ1E6aGIzK3Q4UWw/Yj9Nb2BvT3F8N3g0Z3ImIlAiOk0+anYsL344dVRPTiws''@;'; put 'put ''Zl4jKixpTnpsNHJWL2M4KCYyR2RCbn5TOEsiNGtnfno3THE8a3leLDhKOCMoK0ZXZUhSMDA4O0ZRYXsrKFg2Wk1wcnBDPDl2QzdqWDw3eihYRypAMjVIbGZmO1BZVGJleChecjZFY1FzP0gwKiJ8TyJLQW1gSzNqXVh9MklpOl5vX1FWMjg+cz5sc2xKRGk4bW1rSyFAOXA7U15Ecnp6TyxdbCRd''@;'; put 'put ''VytHYzo/KFtxSTszXVZHXjhKNEd1fFhLUXc+L2w3LF00fHUrIyROSCFRaTJCMF1wN2J7X20mJkNZOntyajElaEplQ0h6In1eZ0NSe0opYy4pLFoxUClVYSZiMmxERkBeXXxxNnx7bm0jZU43SSJeUyh2ZGhQYm5gSi8udlVkTlcrezpINT4vSjVJRWR6XjZEP2MjNF1UU20zaHNyI35RLD9FImQx''@;'; put 'put ''aWRxWisxZVNwWXx8V2htcThYUkd0SHQ3dmVEdUYzZHF1M3JXLmdwTCVgSGs4b3l1ZyMlQFI1TDNFdzBvUy9AWG5fOjgyNGxxfH1DfDVQdHU7RzdnMmJCNWw/QjVKfl9LM1JVOlF0UG9oJSM0O2ZveG5PW2g9dnNrY19ldHhiTUNqZTJ4enRAfkxnOm47Yyg/SlcsZ1J4KVJbQT9CXW4oS2pPbn5B''@;'; put 'put ''eD9eUzM3bFV2WTgvbmVpYU50TSEoVHxxRVc7Pjs8Yz5dW1AsPGUsRnp5L2U1dUdaYDNvY2t+e0dveSNXcCVZW3tmM1QsVnZPPFZjYVl8VGthPzArVXBALFtoK2ksNEpWNn1lMmxiXmZTfV9RTXBsfjw9VnhRaHN6K05uX3pdb2tEUkVhIUJjbFF+YDVYKVVtejJFJmM2JjE2TCN3cG0wfW5wRjVq''@;'; put 'put ''dVEjLyReOVRvUGlWdHk6MUM7TkR0fjY2fUVyU0NTPyElSiZGIWhJbnh8Ml99bTw4elY3c2dFR1haOVdjWUdhRzJIYG9CeyY4Plt6VX5gXTx9Ll5FWn5vMlBLZkwxIVY3U2hGRDM+fTRLNjhvMlZOIX4uJTguWSN+Ky4jSzglPl1HL11ZdnpBZ1FAIS5NSj5+XW0mVy8lVUBFPlc3NEBOP0l4OlVQ''@;'; put 'put ''K1ZIKVhDSHpdWSFQNEZJITVIWX5dRVgqfUhXNUNMYD1KOiR7Z3xKX0d4QU9PUXFNc25gO3ZoTUtJOzU5fV87NVApXSVTZj1CZjIpanUhLHZRJW1eZ2Uxcy9mOmZ9Mzw/QCQsYCl1T0c4dSZqNiZVNndfWHIkQnlhI3Q5XnwvMk56Ik9HX3lHajkhejg4ZWEuLG4rVT4vKWFOU2FSLExwd1hnXSgs''@;'; put 'put ''SlZgeHN1PCsrcjtGJTQ+LG9JKVdhXz0mc0I0eUNvPytzZE9iVzlpaChrdUtxTSYiK3ZhOnlIbzs1QXNrby9jfV58RTIuZU8oRV9QY3VnaURCUEtbaUdoIjgxRyE9RVIzXSVrMWNyTnN0TldfclpBLEMqMX1JeSU/Tj9ETTlEcilXUCojPCZVVmpPWU9LbHV0LGYpWmRAL0NFYCFXZyF+VShqS008''@;'; put 'put ''YyFSVUROdDlONzpIeWQjJDBXTCpoUiQyYHgsc2Q4akwqLlpdNk05dV8ley9IfSlFMyxqcTErRShgX3BwJE9gQGEwTGlSTUllLDQvQDVyP2cwMUxgYiwmYVJqUkR9fVc8K3tTOz50Zj14WnA/Vnl7PVZbRmxMaWFMYndlTWRDPyM5QSl3MX1zJHcodFRYak05JkM2Vlh+NF4zOXFqWEh9PiU/Rm43''@;'; put 'put ''WStpQ15zdFRZclsmeUdzYnU0TkpndG9LOklzW3c9ZXB+dj1scTFvUC9FNjQ4ZEwxcG00YHhydCI4WV5oT0dDMnpnMy8jRzdwOER0SUZ1MFpDaWwwWUNbOCkjI0I7JSRJO09PaUEzdSJaamEyNG0sWDVtKT1eWWwobyw/QXVCS1FvRG9WM1UsczdEXSRuS3pCNUtvOGd2eHFQfHcrK1ZCIUtnNDlf''@;'; put 'put ''Y2NIVVI2WHQsPF1EKXheN1tLZCU1OGJ7JCk3R3dKakpXKzA2X0ZzNzo8RU1dUS49S0MqTVMlXkw+alRPJFFCZmV4L0cqaUlfZlNOOWpCL1k0MGBzKXIzdVozZHxtbVApYzpuNSp1dnhdSnRgRHM+WlFpInBlOnc4ZDl8NWd0eWkhazhkYTZVZnY3STAhZSNqbXt+S1JpPUleImV0TkFfNEpJLyZK''@;'; put 'put ''Vy8qa0Q6fVtUaF9Zamd2T190fnRhcXBebX00XTh+RXpBJjU8XVQjb2w0LHc7K05Fa3RqZik0TGZ5VzQudV1yIyRwJnwmaj5bNTtAKCNGS0NWbVlXbj89N15UI0Y4ezRNITVeMT1hPT8pPDpgQ1MmKmw5Q0tCQnA2TF4iZT1EK1s2W3ZCO01YOFBNMjVGYnNIKlAuOzl3OXYqbiNpKzV1bXx7dzIv''@;'; put 'put ''Wy5gRmswX3p7N0tuaDRjKkB+WmtkVnU9OTtve3RCKDh1Xyl6VTpaMVY2V2xHZ1JPPjY4TiVNI0BsVlFhZE9uQEMlKDVdIVpGKD9JQExSTGxBXTg1LkpxVE9DZ241PGFKOV1PQEAsMis3e3I/UkAkY30vezRPJHx7PFI/XnNnUyNjTWgkT28rQlBRITJfUm9VeFlLVSF5ZHJ2Y05FWUgjXkNBUUt+''@;'; put 'put ''L1lvQWt5dy40KCNiY2M9cVQoPkZ4YExPZU5TfltdMFRAZiJrMDhpTU97aXpIUTx3I11KLlN+Lmt9TFssOFliblM4bSRFbnk+K1FXaF5dan5eYEZMZTR1M0AjVWMifUpZJmJKPnEuPzpXcDpveEtrWWNZeXNtamtzQy42MVFCRUlhazxbdWsiRSYqKUpDc0Y7TnFvQH53OXksPHVGZHVbPDxPcXo0''@;'; put 'put ''PWJoQHJEMEIuWUc7RklRS0dTYFBqVlAhJE1ITFgsQUQpUUJCZW9VTTpnSW1VK1N8QDlpQnImWSN5IkZzNzAwQ2FeYFZhPVY7K1AhViVzPlM7RFFAfilyJSFhKCxbJj0reWRFMSoiUlE5SXJGSVAoNVskOVdLbV9xLjxIVSJGMCk1ZzBiUDl1emhqWkU0Ny4zVG1md2hpVktDX2YlITAyPj53Mk5y''@;'; put 'put ''MGYsZEw/ezIvc0NOWip3fVdHbWZ7QFloaDxNSD80JWYhcWNNMFRHdDZtfWApfil5VjdqVnxQb2tZbmImUmljL307O2gjfHMuOUMwdGkwWzNGOmUzOTVnQEJWOFc+LEgpOjsmRX5RIWB4U0U4cmZnOnIiaFNPVVE9QWBReFs1UzdZU3Q6b2xHU0ZEVmUpdilhK1lBQ1F6bityTjAsRE8zKFE2KV0y''@;'; put 'put ''JGsrLyIqb1lOfiheZz06WmB+WngpcWg4dCU6IkZ+eWJbJVtyWkA/ZlQsQyZDSGcpcjdySTpAej54dk1Sdl0sW1tPKkRVaSVAWSVgbEk8bkcvKFE9ODJBVDMsRzZydG1Say85JU9TZV9EQGg7K11TRkt7RHhUSlRqfnQ/SGZ2JEFNNnUmPktrVShpRUImP3ZidERDXThJWWUma3s2IT1QdnZSfU5n''@;'; put 'put ''KXtRW0tbaCZ+JG5pIWVbLFAxJXEiVy9HZy5UOmhaQVAiXkVaTWtkaTRkJXNQTTxYOUs3Rko4MVpyVGpHZCVrSC5keWE2enZ1b0l6OiFbbltjNjRgJm9Ba29tPzhsUUFhdD8sRF5QUklLekBYfSpacSJXbnI0WU99TFtLe0RyRERzQ3l9Mm4qSzhGQHpQKH1nKiwvXXpuPGEyTDRDTj1jLmZtdERW''@;'; put 'put ''JCtldW5MYUd6eGZMK1tnTGA/Ny8rPSloTFRUTyhmclY/YCtaWH4ubXp5OTpBYGs7V25eayQ4aC4pVUN+R1FJI1JFYCZvQipxM2E/ZV9feT1keylHTFdtQ2tGQGxvIV4hbTlwUHhrOSVnPDdwZzR3PngyWUh2T3V7U3RqPm0lfWNpKGwwVncwIkU1QWhSR1cpXz83V1JmUzkrV3NHMnNlOCVeOjY+''@;'; put 'put ''Wks6MVtDW3x6al5qKEw0RUdWbHMycU9USk8zPSglYkZ0ZF5EbEtMKzBxXyxxaGdkXzdkKCQ9YCE8NnJKKm1BLDFYSWROaHdnI0hVUDRjZ2E3QiIzcS5PcUxUZDNBXjhCQC5EN1IvL1JISXY7NitTcGB1MTtzYndMJFRvZyRTRVpOWjUoKG5aIXIjS3NVcFhRZWY6cSNsL1pGa35aUzFfcyNqM29I''@;'; put 'put ''cVEhYTxaSWN3Y2k7bChfOEM3VGBiWTVDVilJRiZJQkt8QUpwb01qaFRUZH1ORi9wN35tUnxvTVNEcS9WSD40aEE0ZzpxZUVpMSJQa2lrX1QpI2lGWiI/SX5pSj1+IzZjIysoeF9dJElkKTJJeldZMkJyODM3Jl1BRSFkV1ZtMlRpT30lVURkYDBWXUU0LChRNSZSLlhkMCJPP0I0I2tlditueSQx''@;'; put 'put ''ayVmalMudFJrITpGfWN0cUVAVj52UnBYbFFUPjBDJWxvP11kKCtsJiRTZUFUbUUicWNEfVkkY0ZfPj1WbzlgRV1mPnA/I3lZV104MGwmYjw4PkNOTno0NSY2OkozTzRdOz5KUGdedWNJeT04VjAwZkw3TiFuR2EyLG1bciR1TVssLlIiP1hRKHNZI14qeURmXjJQRFtGJDxhZGtXenFQSGdIWyQz''@;'; put 'put ''ellJe1gibyp+ai81KVZvZitKXXQ6LH1HfigmaSs8eUZAdE5oa1chbEksV1JicSpDQTF4cSg2dklrelYrQXdAY3Y/cm8rdjlkfnBUL1csVDpJeiwpREZYbHliMDp5PURybnE7O2QxXT5gZFohd21WWXF2XyRueEtaRklTMkUpKCR3VX57WXw5VmVPQmBRdV1rZWxAXU94ezRUb0lzSWk/I1Q5T247''@;'; put 'put ''W0h5fGY4KVUpIzUzSmVbdyZleEBZJlU3WStaUn4qY0ZuIUBmQ296Oy5wQ11HVTpDNUcuU1pGImR2PSZ4Xml0RUw+WytBWHleSiNpN2hoNTpKXVJNLjR4V1hUMl02NihTQFk4WihXO3ZrZndqZz9AS35hQTAqd2lUbjhmbzdESilOUCxONVIoO1Q0QWkuaVAhKDtNTz1zaixMd3BqamReK3gsPV5P''@;'; put 'put ''YSN5WzJbZ1hmaTA7TnF9ZSk5bkg0XTIjfXdtQXVeNlQmVldVaFB3dmEzc2w4TnQpXktTeVFSb3U1b1t4TUI5L2MzNCs8eTZ3T0ssPmxeWlg0ZGU4KX5lZE1yR3lXcilgLkl8fT09ZVgwcC4jY3FPSncsdUBQMSRRdjZONlBSQWNgMTAyZSN7b1ZYZSo1RSFqZ1FiJHR2N2dWdC87aHhuT0E2eHI7''@;'; put 'put ''e1cqJEBidGRqPyZbSFU6Qmc9dE1Xd0dbJEBrZFZVXiZocTcyLjQhbVllRUtBNHBgXWZ4MUg1TnQ1PC41SXxGbEhZN2BJcDJgeUsoWXFrM0NiQDM6RyY2UWFmL0ghWH4/b35uUjtRaCgoY2IqaCxPfjlOLl1gMElhJkU4cD9oYVJdMWJATSVhc2xjWHpRfipTeFl4T1o4LDZBPkZ8Y2EoPmQ7PTB5''@;'; put 'put ''bF8kOHpMI2ZKOGVfczk/aE1wIUo0L0taYGI2SV5ASzV7ImNtXXAha0owcFErTFIrWlo4di4uNEdPM3plISQ3aGliR1N9Nns3ak5zZyhZbWc2Pzt6eC55KUFAMlZnXU5ddENvL0xwMzFmMEZMZDEjWDkpandxdE8vZCk7O0trJV5pNSRBR0VDVCR5IzEjV1M/diNGMHFqOlN3THxOInIoayN6OT0q''@;'; put 'put ''OUMqeX5XazwrW1tHOlFiXXkhWkBsX3c2ckw0aH5paFlBITJyVXA0Rj83Tlp3RmBDPUJdW01bMz0sRio2e2VGNj8lRVVLSTJvJVtUPW1ZQ2liYTl8R2huMEY/eCxgXkhMQjovQ0ZzSVY3bnVSWk5aXSxvPUFteSRyU2EhNmN5empMOVdAd0JTLn0ydHgkQmIyK0wrUyNGMFcmdFJ3IiJTNnh3MGt6''@;'; put 'put ''RXd6bSo/LCU7dFYiPyg6OWBeTTU7RHl6I3c0Pi5+eWxJWWVZUmBrL1QxTS5lfGYweTBVT3VaZ35RLjAkTUJpSHJsYkVYQUh5LHBMWCpMfGAlekZKUz5oRk5WVWdIKm5GbkJ5Sl54Ul9IXlhQPHgvaC9SUGBwYWB1dzwyKlhlTWNFVWtwOWZtSlBmcUJGQiRJYmRXfkYxL2V8W35qdFlncnZ8YipU''@;'; put 'put ''XkVdVlk+LHRUWHxGLGU1YXVYZnhWfjl2dDN3XkFScDBpYyokXShkM09tN3c8OkBNVkBpcmk9bXs5fTN9P0U0dDM9K3FDL3VfU2AkcEgwPy8rITk4YyoiJiZ9RV4iKG12LHsyfDg5PntmVWwweiVYfCp5U2FPS2lTPitwN2gvPCg1P1l+OiFqTF5ZdCh5VUt4W0A1XiQwU2ZUVTwkUEp5OEVOazw0''@;'; put 'put ''QS9bZXU1aEZVe2pYMmNdUTRELF9eTGFpN3s6XUowRDB0UyxSPWJba1cleTpjWFg8YCV2aClLNF1AbDY+elUkTV05O0FaOHxPZDA0V3k8byRiMDVMLltVeEI7fExTKF09bTV9dEI4VWsjWU1LVndLaCRjcnN6N1Q7b05NNVpfZWwvJXR1WD5LN0RsXXFqdnAuYDx+bXVWRE8kdzREcW1qcClAVT9M''@;'; put 'put ''QW8/TndrJUllYHNlMykmYnw+eT1oTm95VDtfQiY5IW0paz9HRHooMT5dM000VDFDcXJZMjwhOiNwXWY0NnxXUXltTj1zWClwNFBiPngpPVlGNjNvd25sbCtVRnckRlAzNzUzT2lJfnwzTCVeTTdsOiwqZj8uVVVVUV9KYUhxPS9ecFRkZEpEeTpgRExHMCJobl5GPTdXY1NbN2IxZmE2fDIvYjAp''@;'; put 'put ''NXROJDhkc1ZLITlnJD9pUnRCPD9GKyUrITY4aUh0QyFtJiYkJWc3PGouUW5qVnJzOUQzVklYcDREejVuWCt0NmdqJH4/UF9DWGlMNzpwT0tXNn5efit6bnZiMFZ+bU49RzMuPlJ3QlMoU1FnaF9GYGxWeXI9Jj9ZKztrbzQlQis1L3JoPWFxODxhUCl1fVVJa2hsbFRyIXJrVy90OFFoJFJEYmQ5''@;'; put 'put ''TiMjdWxLQm5SIntCNDVzdz1ZQEdAIng9XXRHdDIicVM3U3E0VTdyaUxLREdiTEMvTEtMdXZhOEhxYXNobkhlazwsZlBOdXguJjhdQzg1Z2ZTM0pwQEZ5ek9OcjR2S0s4X29pMiRNKld8K3dmMHszKmYoOnRaOjxmKFMrJD8sMjAxeyxiXmsvKyhJWVJuMSZIMl1BKzdlTkQ8PX1NWzwxTnJraSw7''@;'; put 'put ''QCVyJV90fiNHOFtyWGY/TmBEV3VkMlZ6VzE7X1FeOTB6ZGlHJV5yeFJEcVY+LCxZSXJJNjVqMllXOlJnaixxIk4rd2BeL2UzWltuVGR3WTtMUllLUGhbbltNJWA3Mm86VUAmMWk8aFJ4IS5vJFMmRkNlUFM4ejs4XyFETH57PXosNHVSNlJGU0h3aXpsRnpUcENrajJtMnU+InBDZCt0OWRuP3cu''@;'; put 'put ''IWV1YHgrK0R0K2VDQlR3NzQpK0B0XlNJKktAYU0hKjQkKHlqUkpmZVJyKCslZWhCUl0zaDZvVEBkLHdqV01pQyo/QXV6X0MkbWR7TilwU1Z0Sl80L21WQH1eMXlgWHp+QjJJRXkpUzVzeD0yMm1KPG48S0p0SVRscmAqQXVydV4oK0A+OEt7LyYhNUVpaV1gWHhTQFladms5VGJRPWEocXsydz8r''@;'; put 'put ''SWRqZkNvYj9PRHNDKWg6KmByKXc0S01ma3c7SSl6KGQ7fEZHcmN5QGsydWJbaStqRnlnIlo3KWJ0P1YwYzkkPy4peW0ydColdSs0WFhWJnJbJUZBIWpNRS5mOnJfPCE9ViRBenE9aERHOH52V35NS0JnV0pDJGRPTVEpcnZ9MHlXIjVLUD1nbXIrQyw5dDZNWk1SJjIpNVJBO18lKixbbH5QVTpR''@;'; put 'put ''JThHfjd1L25aLyw5dHtERypLI3xdTFl2ayZSL3VePjpCblIwNUZfYHhvQiNkfkNdVVlmcDRea2RgYyVyLzlycnNtZ1F4eUJEJilQMHpqaFRTYnN8Zz58bHoyV3FwRig4SiIpfURYPCVEYCt0byYvSVUodS5kOTZbaDBXYFArQz5uTX1MTENJdDs8L3NWfjlQZD48Y1ZNUl9zZkBXVjJ3QFg+L0lV''@;'; put 'put ''YTJKensxRk9TZXxTXmAvRDV7N1skQiQpSTRxMVF1XmVmRXNTZzVtUXU/I2k5OUtkfjl1bFReWDdmWFp4bF5JYVgmWS5UQC99NzluWkpwa0tRN3w3Xyg8T015ezRwKUhNSV09XkZKdUldNzRZcERAOVhMPj9xIighT0t4ViVRaU86a2AxREwuLEsxOENPQ0c2N0pwPW4mdlkpJl9lcSV4Pk94RGQx''@;'; put 'put ''dDh1YSV1bX5oNjpRaSYwXT5uPCFJQSg7UV5tYGNIQXp6fWU8IWNBLHwvbygrcyYhWjQqZmF3M0paVmpDdFA/SzxFenAzVm5wUTVGSDc2UCpnaEpLenE9MV1vXWx9NmgpdyN9WWMyR1syZ0ZhdkE2dyljWk0wW1QjTSM/fE5VdFZaOFJQJEAodE4pVzlRbHdXU1F4cCFzdjlCKDI0OGZbYnUlMlE9''@;'; put 'put ''SmI5R1JsIy9ObmZiSyljLjtoWF9BM2QldUM3XyQzdChLYU9FJUMsWkAyMmYoUWBVLmJhSCk5P0k4a3ciXTtqKGdWMyZjVkRld2gzcVNKb31KLnh9TzpNdy5nXXcyIUUifnNTUlFwTCIjSntjZFVOSmlhS0VmR01MQnpydTIxTnA3e3gmJHhlVCpCeUpAWiU1JDUoTGYvYy86KSY6aFUpWlJhRixf''@;'; put 'put ''ZmV6clJfeUdpMUpZNU5SbTcuMT9LOTVMVUckP2Vic3x6SWs7bC9xW0xSS3RIR0tsJjpefSsqPmV9UyJJVmJxZXxERzI5Tl93NT1oNHxtNWBUNXd2LlJoKEs4RDRVLzxAQ2EpWSsre0xrejsmRHheS1BVOkk2QCxTNy8wZXs0cEJPP2Z8VVFlLzNedDgufnJuXlppRWBTYH14VlRmeVlpLDRqe0VL''@;'; put 'put ''JTpnY1llVzVmW14iQzVfcisrNV0+bypualNFPU9OKmBrPXltaTNPKlJqUmN0WipnbXJNciFDflhBZls6bTpmPGlGdW5hOnRANG8oa0ViNksiPXRecWBATV17dmxMJSQ+V0VJZGJxNCYmTFIxRWpwfUAjNSN3YjUyJk0pOXxQYEd0KGRPdz1XP3QjP2AyWTVDPGJaNzdoPXgwL2t9alp8cTZrMTJy''@;'; put 'put ''MURNfSF9XW9DMmlSYSh6d1k2K2skbSwhQ2RvUz9bKFhuKnZCQj1ZUUhdJl05UyUoSTpuLnEqbyRjO0hKeml6PFBYZUlEZ0ZeIjg+ZnRkPnEjNVpkd05ZfWcmWDMwX0JwYVlGRFZYcVddRT1FPS4kaitpRmhDKmFlQzRZPTd0MHhUQUdobVNuVT0obTQyPm19O1A2RnI+TSpYfWhNdGFRe0A0S3kl''@;'; put 'put ''elFaaUosXyo5RTpuYXR2JDNKTHArK3F+InptekE6TX5oPFFwWSg2ZVJIZDt+Ri4wSWlKQj5MNikrP3JCU15rM257Sn5HTWkmY1Z5YURHI2JMeWR6RmklSE5yTXF2SSE7RTpmIWgjPX1JYUJYeH5mPUQuUnxOayxhQDVEYU9SZ2dRMCM0SlpjcVgrLDtZeDwjUFVxI2lhZjBtSE4iS0g7JD9hOXZI''@;'; put 'put ''eEZ1c1A/eHl9NFFZKDVYMmM2Wk5RZHtjZGlXQmIiMUUiMytgNWU2WlFoYH0iYjxFLF0vNCRYX3VKXXpzQ3VTOE5aXVt+VjU/WmsxJjUmVXR4NlI4bDxEW3ZoMzpuPyJBM1s8NFZGaU4qOTk3JiUsJW4/V0szVyZnQSNuUn59PGgqRzVvTS4sL1dXbm5NVEhATi9OJm10dFVwMzg2TF1aKWQvLjVw''@;'; put 'put ''ZzhIZlNKa111QndIYjoyPUMhLmF+QkxGWSNSMTxDe2MzQ0l8dj9oImQiTEo4PEd9SFlyMml3dTVfJVg9YTx0VSNQWUBvUnZHK1toMj46dFlNRHI1QmMrOj47IndKazh3NWkvI1F5OVY4UV5CZC53VT9+X3l7e207VW1NfiE7XjN9XTReXkFjdkJYNiJ2JCZfYi5SQ3hLPXBNVSs9NXwyS1ZQQ2k6''@;'; put 'put ''Ql1PYkJbQmNxNCl5MClvU1hIJWs+VGAhI0ArJE5eUS5NMyxGKk9wNk5zUWkhfSszN0I0XnMlWEBrNkp8PmFwXiRIKCIqUDVRbUdLekpEajRhKDZreThhRiMxTlc4eVpqVXxdd3pxZyx3N2kzekNbIWRMYl13PE5OIW4sTmA7RWtUIkQqSlU3P1t1bG1tRzxkPSlaZDdQbkNMMzA/YmJ8Lz5JZWJi''@;'; put 'put ''P0o5X2ZUPzBdcyt9KGdET0lPeyRLS1l9KWsuRzNeXWZ9JkYzYVAybzBpYH58SGcsJSxFZlkkLlMuKzJqIjxhNXEkcU0sYzw7KEV8PVVpRU1jUEVzKzE5cDE4MWQzQWFCWTpidWB4UCYpP1d9ZnhKUXozN1NaZXozb0M/JF9Pc3NUUjhxQFpgUTg9UEdCXV9ySjIoLyhQeUZyS3BeO3R0WExKI0w3''@;'; put 'put ''SSZSLyxxKFFITXlfall0eENHKENeWE9fcWtXP0NLKUNmdD0+cEpBPXtTN1AvQlR6V2UwcnhrIiE7V2JxKGF8Nz1fIV1sXnx0dHFrWEpveUcxVyxiIVo1O3JxTjZAfjB8QEJtO25Mey4hPn1waFkpLEl9PTExU0lwIThJNllhN1dNZW8/K0o9TzRQUHE5UWZGaHdDcll6fXJnez56REEhVnFBa0M9''@;'; put 'put ''KkRQXXJUTnpkdyhpaVAlQVoxe1l6ZHBbb2cvRFZzcXYuVH1VeEkyfTF7Wm9QcCZURmtkfn42UjxUeTIraUVEI1RtO1h7X1VYM1owMWBWajNWXS88ZTEvPG1ZTyE7JENiYWl+YnU9KlFUa3R+VEtAU3YkKyg2MSgkYkUiW1ZIYjgzWTk5e3huLCYkeFU7NlBZQyR4Q3FtT2osKjJZUmBpN2o2XThP''@;'; put 'put ''REgqPEc7TTQrLH5afHImai9XPUFbSCZBQWUmOChJQ3ZebCRDIzc0U3tvPVAzLk16RlE0QUlfOXlnRE56SEYrcGUrVH1EeEouJjlZbX19V3RXO3dncix8XndRN2dNfGF3QHc7WTxyWiV8Z3cld3hvP1I3cS5aa3orfGM0ZmFTPGJzOVVCRXQ/M1ptZDRjP3RDb2lkWUxJdSVCSloiTFZrO2M7RzZW''@;'; put 'put ''UG4qMUhdUTpWUk9ALzAscXFtdCt8TlQkdUlaLHBEamgrbS9wIkd3cjA+dkQ4WXdMVD5jSVQ/dSJVaC8lfiY8ZnFVeTpVIiQ7VldzeWt4Lm1MPCQ8SVRuY1R2RlgpL1QjaCU1QnZ9Nz9tRDlBOldlKmYmb0JNdDE4Ky8wbmlkblB8WWlpJHRfbWg5ITdXUGlMZ1pOImw5L0gpdHxnPU8qXSVhN1JF''@;'; put 'put ''OWA8blhPT0VeITo5a3toZHQsW0VvbCNEPjw5JDVLVypVPnNfd1F5diJLOFo9Kkp8Kkome04sSTAmYiRzNyxfaHBsdjErc0BgeHY+cGVGP04iY3spLjRIPz1fMVEoKXJHeDduW1pfdGtvXn19QD1JaHp5RCtDeEs2JTl+WHBSdEg5dS5aVyhIUlM3Z3wkeHgzQlV3RXV7eWtfeElVRWglI2YwPnJD''@;'; put 'put ''aTooN2UzcjJzN2BpenheUWwqPnJWMSIiM29SPjNfIU0yQSNlXSFNV2Y/V2Y5UExeYFtCckksTSokbCpdN25LZ3p9bUc4diM8KGMjZjA2JC91VGk8YntkTGgxYkVAfk0hXyw3YTshY2wlYFd4JmVMI15wUndsdFZ2P0ZFLlBHWXRQaCZkWkhBMnBUN0pweUZ5QShvLEVqR2cpSUFNTFRFdUx+bTNW''@;'; put 'put ''OGZUVmtvZVsldSMqTDtqK3EwbnkjPEhJUm1fZDM2ND4kWkduREAiZ0g/a28iZS59anIsW0ljI3peOEd1Y0xNVkczUSRDKzFZK3gpMUhiYkBNSzAhVkJiTjUlLGAuWj5NSytrZ29CJlhxLDM/ekYpa3JvL1IvLnFmeXshN3o2SiE6PGFseE9sJS5meD41X2MwaEovbjJ1TyguSXg4PGQmeG16JVhD''@;'; put 'put ''IUpKL1g4S2diKmxoWUVpNWoibEY2fSplTHlqWVY9eihxRUw2RCEqUCVQc2VwcCk5RGtXI1B1XV9UWWYpaXFlRHpUSl1xYkZ5O3w7enw4cSlxfS88eEZ3KUw4YyxDQSFHZDhrWCp0Qk9DeUMhd1NKUWFJVWVXK09uaSNQVGwzaSZDe2FCN19we3xHSFJeaXk7fFIwT2d0eGhHQGp5d3x+IXVCWEtq''@;'; put 'put ''QTptZ3l7TzRaYG4jcVMiRDlIJXg5KjJuc0dVfURRVThvMiZLKEopaCUzJGNfOS5SQXBpSXYqQFdQNyZaTGtSTGNvOkMqdUJCVyZ2P2l6dj8/Jlp6UCQ9cjk8bkJUfUMpQ2pWTyY/Vz8mRkolNklWJDhsbCwzOnpEV2lZKF9aLiE0YSkmXzd1dzdtJV83enczSVtMJjtJd1Y4RXQmQUc2eUhhMUFG''@;'; put 'put ''fjM3JEhEZ1Q1LklLPHI8XmhxdlckQU0uLC9GcH0yVjpmVSEiP2F1MDRdL281eX5VMjoyVyNPTjh4V0ZYUXsyPzI5fUc4UWN6KjMpdjxWaDh1I0xRLCFrOWo/OHlgRkNXdWskUXloSSF5VC8ueV9DZURgYSk2IihTPyVPUU5XbDs6VmBATi5IL0VLbGwhcXRiMTNfXjkhe3FxLE5FVVQ7ZnNjOl5e''@;'; put 'put ''TDFNbHZPVExiQD1ObVN2VFtwdjwuVWI2Qm5Je1tNcSkxdCV2ZGMqezhedmtJX0A0IyVddXJGR3ghWmRVcF8kTHoqT1Aqa2FYOT5bciQ9Ni56TFVva04hb1kmUzdsUig5PGl2KG1eKzNAV0VwWzN1Tzd4ZWAjO2s6M01GJCVwQSQ3QywqMk88cUk2WnRRYHtCO3Zsd1trJEB2NVNIcW5pd195Zlpx''@;'; put 'put ''YE12O0FTdUM5Rm1veihxVlZoYWJxeiZCYXdJIXVAaFhEb2duVXlNTWh9O0N0YVlrS0k4Zkk/PVdAbk9zXT50ciQoZCV3VURHbyhjP087ZT4kQXg+YCNjfjBJMzdeVnZqKGVoX0BTUmNJYE5COT5fbSR4YVF7QGQyQlEmayp0TSxiOkkqMzpfK1hvXjJ1RDR2akJIYCh5RDJZYjN4ajw4NX49d19+''@;'; put 'put ''cjhlVlVPJEklN3k1QTczOEprOHhPJlBIelBUYFNXRDhIMjhAWE5jVj1bMW4lPTczYGB+NGp9RCs1fj5ffVtjPj0+Rix1ZGpkSDNVUnA0IUc5Z1Jtcn1WOjxieUVQSkx2SDJBfUJkP154aT9OeCM+VXpFQDs5ejEkLigqa2guMj94JXAhd2BgdElKMF18ZHY+XyZmUkZGNWtjVXdpTnlmdFV3Tkk/''@;'; put 'put ''WGApPjVbR3soN3JnRjsqTXhRVmZ4eiJKKE58bUJ6YixsVCFYWVhWZnR8bmlScjU/Xi5seXlgRCs5Rz1rUFdzLHo9V35dMzxIKWY9MkZCUG5UamtKak9TTjswbWopdz4mclU6TD9RbzJ0Q0I/cmRkeC49KnB5MG5+KiteO3tMelhIcmdqQDMiKV1FLCRldD9NMlpAMXB0UitsNE8qZENoPXc6SSZL''@;'; put 'put ''OWdJfFQ7d3lrMmllIyZ9fGdlZF9+KGIlN25+aDtHVG5rcVI7VWs9UmEwKWNLNDUwVV1QWCIpUllYO1tkV09BQE8vc1JMeWc/eWovYnRJRClHOS5TRmNqc3heIi5LU1ZgWCUlQm8mRE1yQ187O1EmR0ElNX0/bzhKK1V7YllucixvTSk2SEpbdkt9byY+YiFyJSwmamNZQjUuZFZMX2o/XnVhIWpV''@;'; put 'put ''Q2c8c1dZPGJxcWl1ekJiZz9eYSFbMWRjeWxPWVE/ZTB7ci53aixTOmohZi9iemApMTJpYC8lblAhQH00WFNEaGxCY1pGZ0wkTEB4UXpMIk9iYTpzXXViR3l3SDZYK3BLa3cpTHVhPGkzPkJWenp+e01kQTU9JU4iMFIlMVo2ZiQuNiQjIWVNJiJxS0hKcUIvYiooVT89TE4+fH07Kjd+V2V0Kip9''@;'; put 'put ''T0xibFAlY0xSPD9AN3tVY1giJEZ9QGB9OXdXKUFtdnBLXzdiKjs9K3gjLmw9dW1McGxjP0tGN1FtRURLMlciWmk7K1NPMlt+Xl0vJktrJDQ4PFZieSN1SDhsPnUyKF9sWCFldCxlP0wqMTFHaTZDTnJgJmtSPGhTQU49Xnohfj4rbUI8fTJIdFJVQXcmM21DQlQhYzRNcTNTSW1ja2hvUFJCaDhS''@;'; put 'put ''bTR7Iy5+Un5IOWFSMlgwcSE4UyJZMGpLbi9SelQ0PUg/SS4qcUxDOTVxVzYieXxrMTZBdl1SSV0/JDo8cU1kOVk+K056cGJ6NTF9WH17KnJoc09OTyp8US8pNjJVZ3VuYCtjWXZzRnNKK2JpdkZMd1pKYSsyXihEQUYpRFBlW1sqXl1kJURtaVJdX0RrVGp+JWhBKzU8REhbUHdbNEE1fmJ0XmlA''@;'; put 'put ''anV8QCFxOmF7SEQmMlgyRGY2LCsjQGVxSGU1IXFwWGQyPkwkdDpVMnR8VzozSE5AcEBXTlAxTV58UioqbUxkZzJgXXNQZTJUdHhGZWFpayRYaWY1cU9dMjtjWSt0dEE8T0dBQmxDImclQHJmRmU2ZSF4Nyp0fkdEez5HTSVnOXJsWHArWGVGbHROY29ZSjNOT1VRVilTZE1lRWBYMkdwWWB5N2JH''@;'; put 'put ''PU1aQmM+KFk/amxNQjY8NGk0XV0vNT1GT3x0dEI6TlpGLyFPN246ekhNJllNNTdMSmY1a2t+cUowKUhJME1+I0BSZD5YVGZ0WCUhUT5kdis7Sk17WURhMkd6SE1taXQzMy59ek1JajUpdkUybzcwdEskOEY4ZnBPcTBwQFJlUUx0NmwwdE9vJDdUZSJ8WjdGOSZYU3wvdXc1LEJoWzxjVDxNcE1i''@;'; put 'put ''aVUoWylLNE84eT9pLDQ4T3hrQ3ldNzcpIXJxVnRRPCoudkEiM3cpSCwse2doITNpQDZCX25aKTNGNlMoMiE8TDlCYkw6YjRWcHdAKj1yOEtVYipvTFUoa1VLdWZ4O10mTmR3eU5ib21DLndNcFpbYD5aU2ROWCprY1VnNHsoVSwraH1GMDg+dTklJiV5e0h0IWYpfVBbJWAmdkd4bXEhdCEhblZX''@;'; put 'put ''QGA1dnM9WCQ2OThNazo7Jjc3JHBwciF6bX5ReCx1MlZ9R35sSGc8ViRTRl9uMSZkI2U8NHpVSF15UFIyKkJgflEjXyxfKyliTTs0NWw4WG1wYjRXQ01KVmdmYSRsPVEmIkN5UDRdOGM2eSE+eHw0N1tvbiZVflc4Yyp4ME41Pn5HfDNYdlsoNjRORGN+bGNuRUwoL3pFLEBtW3VLQ1psQV5CXSR4''@;'; put 'put ''SExHOkwiOEl0cUAlbmJKLCUpPEppRkFDRXFdKnpYdC8/Kj9VdkpNNWtxbkFFUGZUMUJJKmhreFk0UUxERFpEclU/IlJZMXU7eyR2TCI+OGUpekBoZkU9eHZUaGIsckhPckBBXi8pOlhkLltXfTtNfU59TywrYllbVU8lI28sRSU4eWhdIiNkV0FjKT4uYyRefUlGaTFBbywuMCtJbFBeK1FdbXNf''@;'; put 'put ''fCRxIzxUKiFUNVpDP0QpXWE4Zk50NykrZi8wSH5NLGBqOClZbXoyP1R4Z2cxTCYia2VQWC86Q1ded1A9flVCWnlMTT9lJkZ1M01Kd2xNPGY1NGdLOFF6OyhtdW5dVk1eND5KI1huSWlSQTFRPHIkWmo2dzMvO3NmKCg0ZWRLQVcramglVn4seVtbcUVrOC8iQF8vNWpSVThFQEJPaEs5RytNNCV1''@;'; put 'put ''Y0QhUVRSb1tnZ0s/NUJ9LlZTW1Q6MXclJGxobihYTDRBLCxnWTw+MXdtYFhia1dMIXtAV2dnM1paekB+KCtXKTVqS3B8cHxUamdnYH49Inw7PC5+SSVzRShgIkxvSjJmYWlaJDtlSndCZ044WnMqflVVZFVoWHtGaWdEKyo/YE0/TXhJe3JsQWppfF1uJTwkblVedlB+cjcpZm0qIWZffDhOMT1f''@;'; put 'put ''YyVWW1tAaTVQcSVGfFEzYlhgVjlLRGdaRHh6Tlg3fWkpPWAsfFZyUkg0WUYpSng/TSEkPjhuODIxWS95Yzl9Pls3L2xgc21QI11sKjgkdyNWaSk2bXxoaCQjfX0kSFJDKVB8ZUdsQ1ZfM2dXdiY8aFBAPGJwSlRmRC4+I2x+UUcyS2I7fHRRbjh6S0crOzl1JnYrMSVvSktgTyRKbHxfVV4hNDN0''@;'; put 'put ''XnlAQjFxen1SO1s3fTJ7PnpfakxOaE8qOz04YlY0X0xdeCFQVWMifS9hXUpWRVcqXX1rfEphMXV4fnRLUFNYTFM+NysyZGpCTz5jfHxeaitmais3eFlDVCJNYXdmaVpdNUd9R3pWK3l0bzUlLG5dO09eL3hGfUtTO2ladVl1NU08XyNVbkY1Y2htaj44Sno7cnFoc3hnTEo1aUdzYExhbWo0ZkI4''@;'; put 'put ''ZFpOSlVoTiJraT9RSF1DPGFUVF1LfWA9LnJ4JT50Jm4uOEdIRktlZE1fL0o6fm4rSiU4c3heL3UmIjYxQ0QwOVZAMiN6IVRIbCttTXJyKmg6LDM2Llgqdiw4K044YmdoanhXKGErcylBfig4TTNgZyUvdV4+VCMmenJYfilNYUtMYUJ2dGNyPXdNX0owOF5YOUl6KVohbX5jbjFLVDhwTk4zYn51''@;'; put 'put ''MFk3Zig+Oj5uYlNFNSNCO25zbWlqb18vSDZ3ayZwUT9mUiRjaXYvZjtLVmxMfHY6dmZTOUhdeyR4VjppW2U+MEo9S0NjQFJSIm9YPkNQUzpdflE3UlNBPkcrQ2hndm4hezo/a1h+LCVILGdTM24sMTdiZjw+N2I1M0dfJXRXVFdHbTQ6YUgpLnlDMnFGbFE7WFs/MlttUWBVZ2JHNDhHWjVlLFNz''@;'; put 'put ''RGdTUWNiQ3YjYn1mTXBJbyY/UkZ8I1NKXkFVLE9xIWtwfEI1VDFkMFloP0RWXU9VdlNiSlosUl84YVFVTSo/e29ILkl4KHNpcSMvNSt+e2V0dXQuUUx8Q3s7eVB4dmlIMDFuK3FtNjY5fSx9YWY/PHBSM1NmRzokXS9mS2RDN2E7aGZdO1ZDYSQyeWEudzQvLzhsTlRLMXFHJjdWPGMjK1FsZ0dX''@;'; put 'put ''QG5UWmttXmJTIXN6ZFsiZih+eU9fPVk2MSZpJjxWWzl1R0ZrXT9ZWjpMVGRbVm9SS1p2V0twVX4yLiF1QD11UGR8O2NbcDNpckYkYGt3VDVZMFdSa3lLZ05LZ0w3dX1GO1t8QF1QU0ckfkcuUl5LUj9IWG1sTjY+cDp2PCZKeDdQXVcjPFpeZUx0OitFKE9zOXtHJjJ9WmBVNDFwWVkkbGQxaCRL''@;'; put 'put ''dCV4WTMlL1o2KU9tJFBbVk1DL0VqXVFqaSxsIyxrNSYyRzYsZGVMZ016UmQhPC5EbncmWj0zXUM2di9hdXo3RTFbX3E1R3smRi5VST0pSHlkPStdYXdtczglNjtCSUpTIyo5ZHI7LCMlL0dCeEM5ayhAYiFnL0NWfWVwNElCckUyOlo0OVMqb3IyVjFvRHd9QHd4XixuKj9udiYofDFiY0JxMj5b''@;'; put 'put ''QzlJaU5kK0dZW21qIjBoYl5FUVtSJU1FQSNub0YkdXVPXTxHR1BUTSpyRSxvZDZQNGMze0Z2aFo/LkBUPE9yITc6YXZdI14hMVU+JW5rUVR8OkBrdX4uMD9oRHh+X2p+VSN4eUhAVFpzJSN1U1g7azZ6VFZJPnJ9Y2dXOlZ4fFozKlRHcDJVV0g1Mz9+NEsqMFBnakJWYjBCLndOMChsW3drS2c7''@;'; put 'put ''blJfWD89NTAkIms+cTVNUSNDVztCN21iN2AyOzp5QSolV2dmXno3Ylo3enw1S21qQFd8eTUjZFRPdUlJcDVHbGVOQ0QxMCZwL2p9P0VCYSpWSSw2RF0rPlA4X1BJKGNnOU99T0drbSgjfShVXigzSUhaJHNwJVQmSlpAPmBYXyZrYl8iJE0rZ3hmVCZ7JC4rL1tbUThKbG9FQFVII3NzaT93RSUr''@;'; put 'put ''eXNNS2tCUX5pV0o+aVh4KWgxSStqITBhSDpJKnFZbytQMi5FZDo2aG8wN2s/IylsTmxaVyw1M35pJS52c1tlMnJGJV1mbEVbWTgoXj49VDdpTkBxNDVnRUo9TVswdy5DeVtxeEFpJTxtYF56RnxXNFVYQygkbVQjXkpiUFowMiVqRTB2cl9ubWc9VXsqKTxDSFQ0aFNeUlBeRnZreSp6KVg0VjJ2''@;'; put 'put ''Z20wcElDOUMjZ1ooUiN7dlg8RFFqT3BFSWRmM2wwLGJxdU4oOkc4bSNiU3xhSDQsdm1KL2dgczxsTEBkeipQbHcqXnVAJThscXJdJC4vZGlAfHUhXj1KQCZ2UWciQjtJXmlwfXk/ezdObEU7dF5SNXdFanFobDZJPjROJERBdCNCPjZgfClBbSpsL0AxdytoYGgkK1J9NV5gbEkyMDpaYU1lczlv''@;'; put 'put ''JW1ibiJbeXouRlkxRS9Ya2kkPH0yK3lNezArQTNHenlzOnlzUGk6bkRVVnJQZDRjPX1hcWJILlc1TH1gYGlAUiM6O2d2PDJ4dGRPZi5bYCxaaiJSRUVnWm0yNU1wYzs0Myh+MDZ6YEx5XU44ZzcoST50ISx2c1N7JlsmZztfTTRBYUZVVCxxQnxLUCpLe25UUW5MdUZMSyM8fDJFVXk3O3FJQ30z''@;'; put 'put ''UVcrYUwqazVjaUJwdjtpPHtEaThLPUhvNHNJRjBkJXwzSHdobHc3TCZqVlsofG49ZDJAdy92W04weHJdR0FhPHFlTW8oc003Qnh5OypvR3EuPzA6UjlJVU0uTGQ3Zzl5ZlRQWylXJSVmYmsxTlsyYkNWME0mMHpgQlImLjwvND05d3ZeUHxaMz87SmJjWEZxIi4zRT14KHQ+UmEpQG82aHcwPm1v''@;'; put 'put ''PmtWZW5aXmBPJSp+PTA3Qk1SbUQ6UTt2d31dOGtVTSU0ZXohUHh9LClQX10vIlV0QypwSDhQaVQiXzUsfSIuNCNrOnlJOWtEej9wZnZUU0dmZUBnMmhXdD5gOWtdIkkhImtMXTo1V0V3ODl6QSRxaHNSRjJZKDhEM3hPS2hCWWhMZ1VBRldpNXBxN2ZJNH16XihUdHhYS3BqejRBRnYzWCpyYmhd''@;'; put 'put ''fHl0Tm5ZMl9+OTVzV0JRRVdmLG4jQVo1TDxjWSROQjY8X3hIMjcoPWdlYDFQdGc6WDV5RExrblN+QGJtcHtObmw1d117cW1ILyM9UihqNVBueSRLY01LIiFMWlddJipgI0dRM09WYkZWMjp+bikycCZVRSwoT3dpdm9OWWpIKGZdfF4wa15PJnRNbU9pMns9S2wlPjpdMWFyRSVAU15qVkNTOiok''@;'; put 'put ''L0ZNQDgqV0Rmdms5bSF1aGdSbm1WNlg/O3J7OmFEb1pSR0hjK2wxRVd4MW5EXTVIKm1CQ1UjdFJmNHZ7TEdWWiMydGhfbTNVZFdVMmlHKitYcz8objFmIyFxI0k5WnBVdVBsWlVDOkoqSy98NWElVnU2QXxMOSFMJnV5VkQxNz07Zl56cFY/WngldzJ7ZDNIPXNbJj0oNlU4dEtMW2NXVmdBZVtY''@;'; put 'put ''Uyp4Kn46S11zZW4yPGJbaSY4PWckUnNufSkyTmojRl1WY3lzZmxUbmsjZ0NAU09mRVgmQVo2R3oqOT88YnU1XTxIelteJCNHJFRmMWduZztHUjlEeX0paCt0fkwsJiQsZX49P04wU1ZGUk1uRTZJei9jN25HYCQweGM5YWA9OXA0QlYiI2ooUk5pRjVjV0hMRz5ncUxBUDI4WXAybGRKRTdBZypX''@;'; put 'put ''RXNYIyx+VFlTOGg1VnEiejkyKkwhMTNzTXlIKnxdVXV5RTcuWzVzQVtBPmQ/aVB3aFI8OUUrKStLcn52RHNackQjUWIsXSM5ZyZ9NWx8YkxtMixsYDZXd0xNK3YrWSheOXA+eX5XUnY2QWt0Q2JETmw5als/fGlpajRAWj4/MVc/MndIWl4pPDlJa1YjIW5QM2FYNDNFdkpGSFVzKGI/a2dbdUpS''@;'; put 'put ''MEhoNkMrUk5hT2VKSilWK2hiVDd0ZmkhLn1LTStrJT93dUQ8d2FdLFNRcXBeKnpsZSQyX1YyJUI1bFZdU3MhWHF9NDdXUHVzcTtsOUtLMUViZ1hdOVF2JVVCQUpET3FBIzQwTH0hbzxIOFplW2IiQyR6NX56fDt9MUxAb21aVkdAej9Ofj11OjlOLFczKng/XXhGVl07fl53KVNwVCxUNyt3LzMh''@;'; put 'put ''ViZMY3s+ZkxDb3I3OTl5PlJGbD9re0coczE5S3AqKj1LanYyajRZOW4uPWg9OGteZTg+NjglcWBqd1ZrZUlCeGFLfU0kXV1hdVpRRHtOJTV6bm5SWEkhdVZNJnBJUThRcE4oXygzZkkmbjZMS21NY3oyY1BMKnxtR2oqen4oSk9eN1o2UiFdUEIlLCpJV2hZNjclL2I3eTk2S0diRENueSJrUy41''@;'; put 'put ''alRyU2J1ZDNsNkkmXUxdZikqUGs+R1daak1fTjJEVlpDb29NMWo8UEVHeSRTXig2Tl1DMDNfTkJfYjIqLihQPiM4InpTUSw+Xyk1bEJidG5gfFsydyROVUR6V113fDxkYzI9ZVAsfjorTXBDN1piKVphMHkyT3A5JmB5XTxaRWloVE8wUzw3e2x3RnV8THg/T0pfcHo8eTlCVzkrcUEpUShoJnRp''@;'; put 'put ''VFpXKURXYCEhaU1JYntiMWBxSEQ+cVo2OTgueGVgPWsmYjU5LzA6Lz9pcEcvXjp0YjF7RFNTYmsvPENsSEBYMiE7SWo6U3M2U2hhOWYqR153QCg5KDtRTS8/SDlLJiosNExMUmNtISxKNVtyezp2MDtqcU1ROm1aVyRVaHcmTCMhT0JuNj1yKEpEYng7eFJNPSs2bDJFPyooP0IudUZhVnVQJU55''@;'; put 'put ''RCI3UH1odS90Wk1WXWNvVSklczRMLFVra0NDW01uT3R3b3UoNXlEQ0wieys1QDlvaXtDMEpLcFtoaX5eREFVUUAqZihkXmQlLiU0Q0t7YTl3K25KMEo3V1k0L0BIWHAqWCkoOk5wQ0NbMFkqYGFKfTJoeH1lY0p8KyYjfWBBJjV0OVR1Umd6QFlVZiszXysjX1ErKkAlcTtrRyFePlp0I3x8YD1I''@;'; put 'put ''RV4zSWpYMTY9alprQzZ1RX0ocmAuL3lPXiw+JTsqV0d0cXJXczBvZ3p7dihHLkxYTWhgKldFXlFtP3pRcVdjLHAuJDhqWTEjIX5FUmIocjd9WH1fNkJyMyooREV0WHZaW2VsVj8oWW0veWhKTyYiaWBaNXoveTolNH5QUG01I1B+TkRhdToxW1FxXXsjPitRaWZyL0dpLFUmRDgpOjt8aV1STiIu''@;'; put 'put ''ZWp+e2V4Ijk5eyZePDY1OVhrL3hIP1tjL2dPTCxVL1guIXBsKn18L2xaY1l1RFp+b3EzK1s+WUApU2lJNHA3eit5fCl7T1BHRSVFTlFfWDI7YlFde0dIWy5DcC4yJSpVSXlyOjFreX5IezQ9XUlqQnRWc1FMOiF0amQoMV57WU9deSZWS204ZV51Vj0vczF6WlhzIzZCazU7K0M/d1AhUSFGa1Vd''@;'; put 'put ''M29rPno0LG1obE9NWDIrRiJDWEspIS96SU1hUW1jSU50M1A7XlF2UF8zPVhlPCkrd2NYbyQkWC92VTBjO3Nod1oxKHplbGJ5fntUWjhvQCtZOyNNPTFXe3ApPlsuQFgrci9AOyJGKGJAKzVeOnFnOWk8fmxSTyxfRndgc25lQU5GYEg5RmxwdT1TQi5MNCZHTEU6TkIwJHE2YCtoJjRAVnA9Wz1k''@;'; put 'put ''WygudVQ4eEkuej09bHJYSipkbjVlPWlSOntDVzUwVj1COF8qfT0xZj9CdlJSWWdSeiZ7cVkzcjVndyNQWTg1OEAqZiFtL3dUaXFnMEZyXj0xRkpPdDk8S0Q/PCVbK1A2RlBSWyE8P3tCaCRwQ2RgPnciSTJPdT09al4iXSEiKyovVDdwLD9wOE5GS3B2cHh2XXlnPGx3QGhSUzYyRCkwQVA/Ql5Y''@;'; put 'put ''TCRKWk41SmVSPUs7amU/LDkpSnNiUVh6MzJKNV1wIXtSXz5vQnZGOC9AT18+OX5Uam9oUi54aDgkMDlhL0tNNT9kLjs3WWtMP1BGVURtUn16Ykp3VjN+UTl0dj84ckFuTUMpOnd0SSJpWnBxOixlM3oqOVBZbixTWExaSkc4SncldjJoSVdTTkFvMzllL1cufVV4Py5CKF1hJV8waGVJQD1nW2Qk''@;'; put 'put ''NFg1Jl1RTVpRJmRqZExLVXJPcHxeVz9BJWtZeSpWeWdTZlEoMEJoMXlsIWxbMkVmVlQveSxuJngyQ2MxZmJ5ITxsL0IhREg9Ly4vOiRRKWdwLlltUGhmWnZSS199PF5KUkAjQUV5O0clNW4wYClML0ljV0w2LjJoTSl1alQuSk05RjRtVCQvZWdDdSV2VHNrIUFXVn5hNj1RXUt+bjFvMWIwWmNu''@;'; put 'put ''Lzt5dHsud2k6ZUNhJjtLK1V8PzJAVWttfjNnLzRAKE0hTTl3elhKfCxAdjo7SytNZHJUeGtlLk1LdWEkY3sqYW9bW0dVZGxTbjZGTn5GL2FRI04lak4xT0FATS4/XmhvUEVmYGl5IXQuJXt1W3JoOil1a3hvPE0pUC4vYkZYOmFFPDZKe3dbUSZAYiVLWFtHQFJKajE3NEJjUikqWyQ3RC5SR1hY''@;'; put 'put ''YiNRL1R8cDosMls3KEhhKDUqeEs5JEZUSF81UEc5QEguaktAPk54Ok1tI3AyZ0MhdyZtZ0NwImpZMjo+SE8jPG9oM0s2bVliWS4xSUtaaEBiSzRkcndPRzFrTkA6WmY+XXwsTjY7Kl8iZiFfMjp9Ti5FbyUuaFBLQyk3ZnUkVzhMK3RUUFQjbzNoXVtmI3VOZCQ4VkJAJXVQP2gjRzdZNHdpSDZq''@;'; put 'put ''MWUsc19ZSy4xeV9BaHVzZjpELixodnB9PWIuZUFGOUdfbWp6cSpDST5tXTA4XnR1Pm9+ZTVTQVI0ZzsjaExDdklAUWksaVJGQik5VVhsTzM6RTg2dUk/RC42QCR+Sz5DeERdUylGfUpaMU9RRFpjJmdURjx0X3B4P0JzRTYuM2pbOzJVVUppLkx6PVE/RFdQU2Y2XSReSiVTQEQ/a0g+I25gandG''@;'; put 'put ''N1ZVR1p2IVZjNSh0XWlqcTViWDVSb01JN0BfMDxLKkBseDlZWSxfSD9YLDg0UjFEb3p8UzNHeGxLLlJGUHRFfTR4fjkvKlRJLlBWeF0pOithZDllTl5iJVRgbVRmUmkrRylCTVVTMmVUV3w1NTtOcDdaWFpCTyU4PHtEaTtWX1NiYS8xPSZKTEBbREEhPFZQaTpbfEVGS09iN05eJklhODcjanIs''@;'; put 'put ''KiQrOWhnP1IjQmB7SWY1WSx1L0Y4SkxDbEgqemErYDtPaWtAXlF6XUhGY35NMTdtTTo/SFIvNngrKXNMbzR3TSp5NmlATHxJSE1oUlg1QX5BMTUsKCE1cSVgTGVvIV9Faipve2BuZSxze35+dFRxM2xkNjNeIU1lajRITyR9eyJhP197QlJ8KDpSJFpzV3BoO1IkeVFeQWZgVVNfQSl+dFokbEtO''@;'; put 'put ''LH1EOH0obnopU2I+eVdIQzN2QTFVVzkiMjRlIUdRKzk+Q2V3cEpQMDMkVyU7ND9Tb25KPH5Mc1ZVajVBJkFeeUhFUkI1NShmLjF6Rl1rR2YmLHRzOi5OZyQ0UEYlPEQrdkJFS1pTUytPdVtVYXBWQTwvblUhQUh6YTpEUjp8b3RKe2ovd0FnLHZxSXNEKE5tL21JYypmTz10eUxeJms2cCJRX0Ei''@;'; put 'put ''VnJCM3ZzYkghLjQqMSJWaj5dKFg9WmY3RztKWEVKOUI2dXVMa0ptQyFydHVTbTNjZ3luXm1SRiosSCxYSG5lNF1BL3A4TDBXXy8uXWI3PHBDa1F3QUpLdWRJU2o1K2k3NiVhaUpAcjFtUCVocj9RTCF2eVlSODpIIW4haSxAI2A+X0xWfk5bdjtVak90dkIxXWRnLlQ8SDR3ckdoQkldOSFxY2kj''@;'; put 'put ''OWQkYjhkOF9gJVFDbz46UUhqaWJ2bSpWZ31rbVk7NDNOUTA9TCh4bVZASCxVNVRjcE44bmgidkNXOU53YStgPlhBR0FnREJ2cGU4ImRSVkFtZ2o/UlFrcGFGPXRabnZsRFVZTyZfTW1uPVVlWSo2Sn5QNiIuVFJEIVNJY1U9dXp2SVZnKWVkbkp+OX5aVk4rZU1uNV4jQ3dge043Qnt4TXtFUisw''@;'; put 'put ''NWQ5aylrQylDclsyOH5RNmZDKXk7V01DYEQ8QDE3JmBSayh5cDVfbXVkbGBbNk8qTjx1dDxvMDh4S2RtJD8zanw3ayEhJVg/M3RIeGJxeXk6Iy5wODE8I1VWe0xTciZPZ05SSGdsaW8/KVFjWypmbS9WaUwhZ3tUdm1gWmZAQTNdaVBqJWY3ODJjXWFPPXEuWXIrYSx4S340PEM1KShMI0k3aGYu''@;'; put 'put ''RDJHQyEkP2NfKShDVklXKUE8Y05TLDtAOmVKTmdweVckbWdbR1ldaiVrdTciRyEzI05IaVNSImdAbGhfUGMjRndRNHkzPWp5UWIjZHhzM1UjLmdNJlp0bT0idVEuTUF1Xn4/fWMmVWg5OEhCNnlmZ1l5T0ovLHhLYnhtUj5FT049QGcyUiw2aThRMmN0YnM9M2JDfD9jfjF2LE5RQkohXUsvW0ZS''@;'; put 'put ''S1NgVmZUUzJ+XXRpJkR6bF9uZD02PHVhQzc4Zy85IzguW1FUPjFRJik6V2xzbzpnUi96ZUoqbHBLOzA0SmZhWTh0eDNRVXQmMytpb1dFTlp1MnwhUWowV3R3LzRNbi4wMEsjJElmQzJecmFaVngrIUZXXVJSJV13QFU/akUoNCQyVnYmY3dzJEViPDFMN2E1Imc+Kz10N1VDLy8+JlJkNUhhYElE''@;'; put 'put ''Ii4yTFNVVGh9NGRnZEs3Z0ppVTRYUkBQeXU9IVdYeVQ1M1NGYi86K1lqUGMseD9YRFU0JGM1O1dmY3Z+eFQsL3xTIU0kIUAhaHl5aD0/cFNzTipjJU5Re150RE8sT29wVEVSL1Y6Snp3Kl1lUkQsO34/ND9vNkR2Uit1WCgmKGdefk9oS3IsTiNvMXZsM0lJaGlQdCZIRkxXWltgeDhITW1ffE5R''@;'; put 'put ''IThEQ2xORjNAK2d0UjBVJl0rWzU+WlEsUTRzVn1CNnFaZTguN2RDO1ZMYn08eFRjSnE3QlJ1NnEiOUhsbWZ+U18oI3UuRiVlPSEqNUNQWVheOnR+TCYxaSFnZCVAO1ZJejRbZm9eVDlJXjtYeXU+cyJeIV5iW0JUfFlQMlkmSlAweFg/VU5kaGo0UVNBPXd8MiFJSFM1VXdsO013VClJJEBpK2BK''@;'; put 'put ''XTo8YENGSVg9MUN5c2haJnQ+eXBAMmQwXXxjOnhlZ1Rke0MvPj58fjFXTi93K29eVG5ML3wxIT9AeWJ6P2UxJHxuL3M5fEtSSiJCdVshI1BfTHA0SWg7QEw1MCRfZTZIQkllNFFWdVhTKmZFbixFWjZVIVkmWzU0Y1huSVJvTVhNMzhSUitKTnVvXStxQnkxXVhyNmZZKHsrNzEiRU5mSDw0eyFy''@;'; put 'put ''bDAiYEAzVHk0TFVDe0MufCRUQGhYMG9BcSVQKnVYYF1VckJJbi46I0V0clIkNVM8WGp+VmYpODMjbGdFSWtMczcle3k/bnRQdGN5Ln47fktDNz5SKCQxRHJYU2NNQDk1RCMvJC5leWMlL0tYbWwjcCJvPWtlPFIpdzVqUUUhL0xfS145KnQpbnt4JUxLVXFYLDRwQlsjfGdYZzhFbCMkLyJVYn5a''@;'; put 'put ''fmNOaW49djM3e2hWTzxZfDA7RF9zOEw5dzApNGU4Sl9pQjN9QjopJmJhYj41bEJlaXxFJFMrRDwpOSNoMnRbeWdRR1hwdzY3JHosOEdqKCohT11lY0lFeWFiUllaSkB3WEA0Pk14X0pdbkpqVTEsRUByPkVKVCojUj1iblJtI05UUmdLUWpRKD8pa1VJd2V8RGE2LyZtPVRPWmA7UlRYWDNnNGtx''@;'; put 'put ''MWlxfElUYz1PKnpKPSs/IkRUb11gfCR0cHgre3p2M0l0ekI+ITIiYkNBaXFmfXRDMjhpKCFGJSZVdXNvbXs5JVl5ZTdTTmhbWTJMZERYeGhXJkckRGFuS2ZnaCxESGRwSTZjTF14REJTOjIwOHtsYmJUKG1GcyU5OFNWJUA7eXdJUXdHdSsrZURaaUBLailWaGhwfXxvOX4jWSxuTHZzOFBSZTRG''@;'; put 'put ''TklEPFBhJDZpe3dAd0FwNEw+RlFUVl19cCoxTGJqTjVGIm13NipLeXkkcjtENU8jZm5DLj1FfHU9LmZ3YUNYIVI6e1ZyQW1ZPmBlPnZ2RjNENjZFRUJsNm8rNFFaYFNFSyNyWnd0XW49XW1ffVRCTEVwemo3JD1Man5GaUFPZyhdWHtNTF9DSF9CSWhmaWl5M3QjKkUmKCF0NF4+PlI+TlJvYnhU''@;'; put 'put ''TzFXRytbOHgqM1R8YntWS3lZNmQlZkQ5XmdUdmRbYkFyYDtdYU1aKkEyInF3PEtAdzBbK3lsfS90e29XT3QsOUp9NFRkajwvKUxlaE5re1VrWSMpfTshaV9EUEFqPG1KTF9nOFlOVHBrdWU6WkREOTs4V0lQL2p5X2NiVW1wYD5tKVdOJG1gX2ZGQCw8U0JDZl44a354WSFtRyg7ZGkrdlJjYGZr''@;'; put 'put ''Lkt8Om0lYm9lYVIpY3BLKzx1TCxBczI7YmNqd1FGPTUwUytmLiY0aXI+eko+cFIlbzYoNVNkfEB1TDRBSW5DUShIPDBmJUouPyVKL0lORWJkO3pGSWVOZDlvKW85UXxHZkwlbCssd3tJMj5WK2hhUmwycjFgTTRxJGJxc2M+X2hDMDBFeyQyTnckVWt2V11uNElxWiRVQ1Bte2xGaTptNikqPyhe''@;'; put 'put ''ZWdkSkJ2d3VzZG43Y0NKIilwY2huOHVMI3VSLns+MV9VTW9TX0d0K315TXxffHczUkhUdCg7QUQ+eWU/SWBpUFR0UGFlNXdRcGJLWGBYdFZobGA2PHdXWDVYPU0mJUQ9LFpwKV90bzRLcCJ9KCFke2ljWV5seyhGQyE4MkVZYTddRCQ5Z0kvQExkNH00JmdnYSw1VmRMMFB4RngkLzdvfFdnZTBq''@;'; put 'put ''VUpzWiR6Lmk5SGsvdT1SdHU+bltrZ2QkKFYwU3FVd28pMHUqO31zaXlKeShXJGM9LEslUDZNLDdtSiV8X1tYd1pbZ3tzPTBXRTNRWUVUNCR4eTFfRXB1NDVYXnwqK2JQPSFNcTshazF8I0NsRDo0T050NnNZLl0mWUJ3WzYxI3U+U29LQTtSJXRDRVZ2UyNGPS46VDh1bGMlfXN9fFN3RU9EX1oq''@;'; put 'put ''LGh1V34/TTs4NzUsWkQrPFgzQDF9Vll8YkxrTiUsRzExfWx+TV41d204WyJySCVgcn5KbU5rQXUsKihUTV5JKXFlQ253K0NbSChjRSZWcnJYKnlYXVY2SVF6PkwkK2BGKjN5TDssPiYhPng+R0plNHxLczg/WSkxc1RqKjVXPFljdnQoenw1IlhYRTZVdVZsNUZQb11zKC5IWX5MbWk8X0plPylr''@;'; put 'put ''KDhGU2pRaGc6Um1re2J9YT5GbzlwOTRsZiQxbDx2STlHayJnVjw6blE9dXgsRDgsIXFBVmo2I28vNixLVTYyKm9BQ1RBNSxGYXxDJGZIcmNlbHJnMGZZR3olOkZnb2NhK30mXWs0WyM5R1dkbGVfI1gzYG83X3JQdGlbSzhlYFo8SStfPEhxWjs7MT5VfF8+Z0QzST9SS0FPQWV+Lzx7bUs1RVFy''@;'; put 'put ''WHkwODZQWzd3WT8udWs1JTEyO0Q0UmUoej01OHI/enV4XWB1dXIobGZiWU40fFFFIVNGfDZeTmtHO1VoVk9rMi48L09bfj1UVXV9bCpdLD0pNGNHejh5Ok1bNDEiMTJzTH5BbDp8OUVmNFc9eG1VWGhkd1t8aWhjRkp8SHBYMzd8MDxRWG48RHVxR35NSTI/S2dCWjY2WD0wIVJWLzI7Smo8QSlf''@;'; put 'put ''anYzWlMlLGowaUdnMTV6RyprNk08YSowLCMhSE5eKVBPfjk8VmM2PVgjdUpVVV18Wld7ciJ1PVUsYTRDeEZ9WmNLeS9kQDspR256Q1pwa0dNfW5MKiY1RyYsals3SnNQYkBGbFhvbGhtW3Q7YXZJWyxOJlpmI0NIUml0RUhIRDk9TEVZK0dAUSUjQ2k6NTkkTHh0NCM2cTF4QkU7YS5daG8kXj8l''@;'; put 'put ''dURhYHFpekQod3ohMENXPkpEXT5YVDpXXSptWG1WUi9xQ05QWEw6XVpWRilIKihLcDkrUkIxWjpbeDw8e2lfeE5bMl1bR1MkYFVuY2pUOk11YXJLJWE0ZCYwe25hWVRdVXQ4R3F9LCJfa3JJZGhdZj1TfVoiWCI4dlh8MnJDX1EiMjZTRCldKHVDIllZKlZ3OS9gJCo7JXo2fXRsfTNFbEkhQE1C''@;'; put 'put ''JHpzfiQwfHJyTSxXSnhibWpZVm1qQldqYWpmJml3dz5JTGlQSz86REshZkJqSEFRN1ojZyFqZ1pGLDh4YTM9ZCZ2STY7UE9MVVBheE1afmc2PXVSZHJtOEhzS2BwZC5raWNYLmZWMnMvOSFReW5Cb19PcjFgJmdUdDt5PT95JVV4ZT1EPFZZem1UWnB8TXJZeVg6UmhBc1MzJn1wN1oyNSo6eUNj''@;'; put 'put ''WDhNVyRXRHUjY2JDIilhVVtuZjYzLFgpXyNeUn1aLDgmWmdHcCxJZGc7KyQkQCJSKGpZOlA6d2RxOFpuUnBpdjljKmIyN0FVSS5nWm46RTBLTjg9PzRWRkAoNHIyO0ZCeXBJT3FoP3tXMGtMVzl4e3R8Tz1NYCxMVTJsaUBUTm5bTmp5QGU0NStgRiRodyNNPkQyKE9QRTMiOlc6eTdfXlY9aSI2''@;'; put 'put ''Vis9SkV5dy9DIiRFMyUpa2AhVE0mQ2w8fGRoOnMkaz8+dH5ScXEjXUo/SnAhRjJ7SEYjUFg2Nk9bYmhtNytlSSRnPyZxP3BJNGZDcDNYL3FDVmlKSVl7b2kkR0BgNCZ9bjhEVGw1fi5uMnl7JXg4LntnPlt1ImozcWt+UTxGV3tudD1nMShtW3RFN0pIOTxkND5RKUk1eDJlTW5QfkZ3KkoiLF1H''@;'; put 'put ''W3ZpUi83WlBdKkRjdU88Rj5IK0I0V3khe0wiMkMmNmEsJHpQY2J3e3Z8QEciNy5aJXcmcWI1Q1klJi89Tn12LktvIW17Xzh3YlRRU3dIfHQwOGM2NmcrZGtvXWZgIzE4aFpGXU0kPWV3akp5Mis/Z3YsXzVFRS9vVk1bbnlRUn15OmgxSGw6YD58MT5NWzcscVJ8Yl1FaDBydCNDW1Fucyg/UH1O''@;'; put 'put ''NUV8bWNPKnhKY1lUdihwXXl+LmdBLy4yaWYpYitBZ0heY0wkVGpzIiR0dVBGcW59e31Jc1dTSjxWM3MkIyhDTHtlVl1lc1cmRXV+YFA7I1NfI0x0TSJsOVF5SWZLfEpdelBIVzR3YENdMUBKY1p5VGBmYXlJeVhFNk5EZytkXipPe25CbEBqcX1aYU5yekFqZlN1UC9dZzZXdW8oYlF3bjlATzYk''@;'; put 'put ''a1dzTEl1R3JMRTIlRUw+aEV4NTxeZHcmbFg0NyhMXlk1SlZaPiFJVlRZSShGUSRAJkllUTRCamNTUCMmUko6bGsyYHwqJVpJaT0/RkpRPmdsKGhFTDJhNXRBdVNvcmZ2LG42KXBfK1RqNEYzNiwuTjxsXVB6V2UoOys2VlclWCpFKClHNERhTVo3WDZ0RGR9QD9eYUR1QD13I2k8LyxtY0A3MUND''@;'; put 'put ''SHVLaFkqdzs1aSgrKzlST2xNPUZzSSNbYjtkZUczKExdZz5kRyIrb0BIKU1KfDxCbjA3PFtWcz9PU2ZZakNXdGBpdD5lYTEvSk9zaXUxLz4qST42RjU0JGNdLGIzeCImLnpSaFlXMU4+ZkNhZGtQRWgwZj5ucytNOzElJHxJT0M6VEg4Y1RRO09yTDUxOjBqKDs8JWlNKEBfZEAwUno6dkBHUnxg''@;'; put 'put ''LDw/cmdiem9CQiVMWWciT3NgRHJ1ZD4yZmo+R0dCQ1VuVmciayFgdz9BUU8yK0x5OzFyL19uOUJYNCpJKkJiZiFfIkVVPF8xbHZ1KzwmRmhJNUVbSkY2NmdieEZYbF8mTTgqOEwhfjsmLylsQTF1Kz5NODZARiMjfkZ7eEd3PigsaUhsL2llMkIqOj1jbE4vST5aak9vUDY4KiQ2dH48biIzLElH''@;'; put 'put ''UiRQZlVZalF3XytBeTF+NiJSQDduXk53QyUjTTlRL3x3JFttTU8vT2I2MHNHai9TKGFUXzozdEZxKVZnR301dnJUXUtMazx8Sy55PT5oSX1wTWNCMiM1JWAqO1dNfHJSPnd7YGJMTzpUcURmcC9hQzZYaVJpTDw7O1dkeV8+UEYzfkdXUjhXKX0vRn5tWShPUCkwTTM+ezA3fnhIXWNaTSpaeFVu''@;'; put 'put ''dVFkZWBHOnZSfHs2I1FOYV5CKlpyMW9yOjtGKDI4KlR6LiZoOXMiOnRxb0daYzdkanJ0bFt0R205K1RyNXVKQyREUzlNPiYxMER5c0FnM3lpfmdUU0sxXXlwZS5oOyRVZ3QmaWBMOk1NbXNAJX1FP21pU1kxOFoqPTA0b2poYVNSaWQ8PnpZQzdlRFhKNik4XWtsMEFpYUQ8UnJoe099P3IlbUJY''@;'; put 'put ''KUtTQz1iQ31+JTRnUXVZX18+NGBoOkNDaTs/dX1pIiZMNyoycGNNbVk3JnpgXWVXbylLR1NsbWUrOTIoXUx5R1VOeTQqNWNFN0x+fUpZYSY5eDFrTFBEQCNRPWs4XS9DfkB5SSQrQFZ8Xm0scTt0XypyNi5jez1pIW1lWSwyYFN2KVAoZSxwPFR5KkUlKENnLkZaMWV7cHVAdUZJOFttZG5hek1P''@;'; put 'put ''Zis/PWJKKXJkRzF2N09jVWYmSWYjPkJXVy8rVXxnISUyZEU/REB2SGFpNiV3MmN4RGpOMnNralMqJSkoeShFRldPYGg/P20jT3YpW3RSQ0N+Ll9SN1cmfFZ0VFdOeGROUDI5KjVmYzluQztSbCs9SlpnRjRIUEx7KDdGOi5RNkYvfSRHcVJRKTJHRUVxR0Bxdm4+MUJzUCkyJiZEXmNMKkZURjtU''@;'; put 'put ''QnFfekRFOjt9V11XIjYifjAhNEtpNGp5QDd9fHpbeClZXSF7OkxpV0VyX0E8JlNVYllAPkphRXtBKU43UER2RTpLV0x5Myo+UHZ8JmF2LG9NWlg/RiszJDA/Rld6STxSUFAvWnBQQ2A8LGJfW2UvUjhPdWdKXVdrfU1PdnAuK0RvQlk5NkhuOkN8LCRJQXxPYG0pR3s4UjcvIUBBR2FJdThWSk1C''@;'; put 'put ''QE1DaGc5PGhXOiVNRC5+OHxZW2VCIWQ5TntwVXQpfU5UZDcyPVFzQEpaUldySyZadHopRWpRYl9RSHt3ZiE2MDY7d0UvPnAhUipjejleaEU+bGh8d2g+Pl55MGR6NGBrMHpqKkFOb2Y6Ojk/SnhKWExNLiRINXFTSCJiJGBsa1EsJnImZTlAcnBgTEQ8NjIoa3x0LGI3fl04U3hnYGtmWTMzcj5s''@;'; put 'put ''NlBhJUhaVUFZX151K2NJe3w5eVB4InwvZzNfQUQ5XnVqMiprOTVlWzhebX5pO0FNN0hYT2FLbFIxfGFWcy86Kzh4bWEjISpES0ZVR0B6NnI0WjhhfTFGRWtuSTFrQVMyYjddbSlEJUpNX2lePVVGcTh1VjsvbWR8eXBwXlV3RihtJDUhMWEpLE5ebnJ1T0dnOCtYQ0YseGxmRUtJcmU0S0dZaUM+''@;'; put 'put ''eEIsNDd2N2JScmMrU01GdV44ZU9UXWZyYCpZYE4lQWZLdnNmKVdvRFEobi41eTlIWmtOMG1JZ0NAPXBeU2N4eEEkfVI8alomQnd3O15yXVZxKmx7UmE5KG9+PklVJXdtaDUsYHFzS0w1bDw7NWB2W1R4djhYTH1Db3cuc1pQOk5vUDU9T0YvWTNWSXUlem53XV4xJkhbbVpRR3duODdyNjkrMk5U''@;'; put 'put ''O3pqdmxFOiY7P3o8WVtDN3lYNXlwMlhFeCQ6dFJ5aVtNTHRQRF81PzU4N19RNXc9M0RYeXtVMSgwJHtYWDJoLlBVfip+PyMsR0ZqPTVLIWpMcjouPi59UCt+VjpoOHpqPF56QDJDaSNtfURROkJ0Oi5FTWAmKyVgOGUyRHdqfT5FRWFsR14jcVJpVzFZZjBlVTleWEh5dXtSXio0TXdVNWojLHtf''@;'; put 'put ''JnxUQE1iZjJ+blF7LkBvQTdeRUwmSjlzNjZ0LFpPMCFRTzAmOGg5RHUvPjtAR19MLn52OTc7YkswdVd2O0tmIyI9elkhL2M2e3BfLGZdTX1+Vz4zQmJAOj9qe3M8eVlQe34wSXEmWkF8T11hXXtVcUJjKTJIV1RnP1ZMKXlJWD5DTSRzSlppLmBsUzhvY1c0OF5tK2VUI0JWSC9+N05FVSZNSFp0''@;'; put 'put ''MXUmNEZ7aWNgZTJyO2IlKEtNMy9wSFtHKVhwZXlmOzgpZltCOWVJbkhiTiNeeHxsZSpgOzRDVGZtU2A5LD1LWGxaZzZReV09NllAMVpuRkR2MlVZTm0mOXA+NCosPXFaOipgeihoLDIhIk08Uzo7KU0kczszUyNfZChiSGFkc0I/Ky8xVkRYOkNfWW4sMXlBdVV3aig9P01Kc0JxPVp6akQ5aXFo''@;'; put 'put ''RiNdVkhCQ1pyViZUXzNzdDlNdCExWTFbbSNHWEF4dlRIXSlaQHIiSSNtO0RVUU5xQ28rMF8hMz1jY287Vi5bVTlTVmdZdm1NaGxGZE1keXYpRElWSG5iITg8fnJvYyZ1NFFuPEMkMDVsQDxaNy4iVlM2Qy43MixZXit5RHV0dWE9dE9heD59VERgR1pCMFROI1A1fGU/cCoxJHI0UXJlWH4pI0pv''@;'; put 'put ''NlAxOiU2KUUmaVFAPkVUO0tmJCJJeXQ+Ymh0WFJgMjBeKFhxY1spRHddJjV1OHovJG0+NDtSKWAlXmx2WFRQJT5fXj4rdlo9Jl9gTyhPQXBZXnM/PnAjTytKZEpGOSE7NlkyW3hNPCF+b1MuOWl5YUV+fT5baFNKbkVDNWFlaU9JRG9SSD1reTZGRkp8fGhAVXpAP2NMV1V6UzUmZlU1UGVuWDFb''@;'; put 'put ''KFZJJTRtcGImWjAhT1kzW04oRUg+fUBvYiJwUHt4fDZCU1ZGPVI/NzJlcjFXXzghOi89dDRvVXlZaWV3PjIlV2FbbGZpRU5hPzNRITdWfUo3eyw7SSE2Wm1jd0BiaH1HcD44OSYvK2UwWE8mJD83TT9HPG5fZTlFWTdZKysjPU8ubEt+UyZjYEZLbVYycFM5JVkhZzN7Q3FlQnE2LkA6IyhvPk5D''@;'; put 'put ''TypzcGI7Oy5jYSYicEspU3t0Pyp+aktwI1treG58fD0oXjgoV2duKV9pcFY/Q1FbczZreGFFOUxAVHh0XyNsSjo9K0JUWX5yIWxgZyp9eHFKWT10W3MyTEJ+IVE3e0N0JVpvTG05IUgwbEshS3FMYitvYzJTP0hQeVBEelI3T0lSUUE1Tj5qdkhwUmkuN24yaEUuUERzYk5AXX1MWVNNc3xCMjE9''@;'; put 'put ''OH1hRnx4R3x5N212eldtTndtYywoXXU+QUkzUH5gcUpUfGxjbW5fTFFQJWl3dzl2KWsiZWpLYUtNNipJW2NIRnU0eEQ7aCZwIW1eZGNEZmhGbC9DNTdYfEN0UHZWTC8zPEJxI09HNz9McHk2dnEkVSF4IV0+e2Y2bDRMXyRIIUhINUAhTkFTZ0VebDtYWShhbSVQYVpyNWBXTX1vbSlHM25qfHd+''@;'; put 'put ''eVs8X1EwW207W01raykpWWRmcCRaK1VveDxIbyx5bXUjfClfQihMeFVDNSJkentAUnl2SlBjcW4kfVVhKTVxLldqfVJob2RGUEE5M11DPy80OzR2K1ZIQ0BzX2A9ZnxXWUBHPGx1dDk6XmM/c3NUcTJATCpTRT9dZ2EwR2g+d30lYzZOP3JCRnIhVkg3by5zJjI7RigjOW8kJm5rLEZkckhnM3ku''@;'; put 'put ''PVVkczFocEBYYyU0NC53Q2Y6ZF9NY3JWW2k3ey8lO0duTX5YXSFKVFpeOS5EeyNyK0VCeT1mYUVVWVBAezRzdGxQRUlncCg0TG8qfUx1KSIzbXVjezR8UFJTdmtSX1RwO19vU3Zbckk4ZGc6Y0tpZE9MfHA6UXhZNWRYRTA7N09pKCYsW09rOG10dSFKSGopaUhCXnJmPE8+RVd4LCM0QztnQHko''@;'; put 'put ''ZVFiLyVKQmU/SFpOQSRObDpaZDopTWtRMC94UXNmKGM4UEclZX4sZWRGRkk5MU0vbVFBTV9FOEF3a18zR3BwMmJWTSF6dExeOl5KQW59fXZpUUVocEc3KnB5SzttVGxdJVQ8KTI3dHUsZloxP30scSNzIV1NWG5eUEJtKGNdWmQheCNmMyFrODtkOzRqKXFYN01RWVBlPzt0b14lancpNnVnU2NE''@;'; put 'put ''bH00X1tIRnciMUJocXlMeVV3Uil0ITRecVYmSU8lKi9LQkt9Zl5fL1NWPjhMYGpmb01bcXtUKjRlWmdCRngmeXxPOlFtXV4hTUBxNj4hPX0jZSFzIighdk8rdkBPZXMpLGpHTHl9RnhBIiFve0JId2VaQzdHfFJSLiVddG0yV25beXlIYX1Rd2shSlJwP0xfOk9QRClvPD5qeG90YXomW0JFeTln''@;'; put 'put ''SW90SXF2TlFlSVlyN1hhZStRQzAxOVJUaz4+Ljc0XXF7WTYpdCpuVSQjPCJvPklld3ZiaCxbIXJORT09KjloOXJ2NTVZOj5mKiRDYzFRd3hiOUs3aXFUcDlyVF1NOXA3R2ZlNSJza2JaQThwOCt5cy9yRSQpIVdbN3teOkplKSNpWEdhNl04dU4oN2EyYyJvanJWL0lkJDFNYXteSj1mek56V1tE''@;'; put 'put ''REJXOiFMK2wmaU0kTk4xR0xBeUR4cC51dmNdRHxEZ1E8dnV7cWI3cHhHY0lkLzg0MmpIajw/eTVxRXpvPSFwSzticH1SMS9AXjAiU1dCYS9lYnEobFt3cVY9Ok1mPkZCMGVjYFIkVFQhMXphPm86fWR+M2ojUFkrQFs/UiFqaTZIME90ZTZvZVZ4eU9ob3BsP1hLdFUyIk4pVyksNDhaSWsoUWda''@;'; put 'put ''Qy9jMHE3WlZQcEovfCZKV05OO2FXfGs1KH57VE9oN1NmRkZSTjlbMUFsdGM8QmhbMkR8IjQsJmpCVmJyPT1oNmRsQH40X1pOOSg4JioqVDZkQ3NWRWM0bDcoXkZVbSYlOTp4QElGW1Rybz9zSGU+VFUkZGtWXkNaI1loTG1+ZDdAJGMmSSE+TSUvVFFLd252SXF0cTM5X28yTjBgRG5dPXlTajV9''@;'; put 'put ''dlRBemB3NXZhO0FfL0NvfSVLcERrbEgheXI1NipMMjd5LkluYjxIXlN6X2MkLlIucH5IaF12VnZUNlhgT2x2RldzO0MsTz92KSVjNXdlR3cyaWRTJEZ+TzRWImtJRUU/VllkWTJbVllbOzJsQDdLUHZJKjxCam9qfl16WThJImpVWnBPRnZxJTYyKj1qVDByKE9rQiRdPSRLRjc9ekBCMHtPO3NW''@;'; put 'put ''bDx9XT18PGFGO1drV0haSX1bR3daeU44RWooYmRDbmBMPHd9Pk5yQHEhXTw4Kzk8bmlveWV9P3QhZ2QubDlUXWdXRiF4IWNEYTBMa2I0PykpSH53bCssRjpFJkx0d0I5N3BsWzZmMHUsZClLWXNHezVeRzxQbz5NK3NnbXouYGdnUk9QUmZHPUxWIyl4UHxYTV8+Ij82ekQrWF0zdGp8czp3dkxC''@;'; put 'put ''Kys8JS4kTmtZIz9dSCVdOWt1VSoiVitoTVglfnNUQzxJdUFpaDw7WDFuMWNfYENHQ0UoeTldKW1xMipxSVpbVVpuV1JoXVcwM35wSVM1OkguSn4jT00pNH4hJEt8ZmxEeXY9I0MyOTtQVGJTP05EZW9OYVhDNiJ2Rms0bGxMOn5feFQ1OjJTfTReTypAOS9PeWY+Z1BESHxGYWMqJX5DW1NWSDMq''@;'; put 'put ''Xil1fjNveChYRE19YSp2YDlTMDc2T3kwc0R9MURWcG99TCkqQXl7WzpZMUlsRUFAbC9WSlRWWVtlSitpaFptKHNdOzR+LEdidnx1Il5qL21GV2wjQzlGdDdweGs3UT5oa05QWUhRQys5V1JyLlVFNTx8OGxzQUNNNkAkXmY2K3Zwe2J5dX4sR0JbX1lpKi9HRTIhd289eXpYNkhiUV9zY0VjR2Bv''@;'; put 'put ''KHV9QTMxXnFzIm54fSUmdEBkaThXOVRgVlJjV2NxQVJ2RFV6PH5VMU1qc1tjWmlFfnZQbGsrcGBVMzVqSkZARjcxWit1ajVMdixqNSkqOFF6R1k1JCYhTkVAQH1xPT5zQGVZbyFlLmRfU0BtV1tse3IscXNseyUlRi5dYFomQV1edXxdWk98K2tnUXBDYFNdKkhLMmYuZEouSCtkUVFFYmw7NSty''@;'; put 'put ''OzljJTtGRyFjRWcyWVVuJTJvcmozPS58OzsxSDJ3REpoJFQmZGNjQ0dtdj5YWXZwOzMmfkdrOy46Zi58aFUsfSxqK19FNmM/PS9dLzU6SEZgdDRFJlE5Pz5dPzpXcUJpJEF5WiZKOSVZXWd3bVtbRnNsfl89JSE8czQuV1NTM3hDcV9oUyo2OXVxV01oUiwiI0pFb0kpdT1VR2EwVEM4Z0g2dXI2''@;'; put 'put ''Il1gJFRhKVtRcj1FXl59UTs1InRaMGBuYnImfT83RTlQSF5DZ1cpWi86eClPUT8pa0coNSZGPGR2Pn5Fby5CcjhXOXskMkxzWXo7WXBuKCl3InUwKmZ2XXA9cXI0TlVxfHBjaDo5PjM2JENJczh9LHdWW2RGI3UsTUo6YFJjPFpCPFsxKF0qKVAoOE5HUVpmO09ZM0VPb19fKDkoOm1ja1diYWhK''@;'; put 'put ''NHxDbExtTEJEKmMkOHw9L2NnTGgiTmNmJDYsKGtrPzAmYztEZzhhKzh1OnN6d2shZ3JAZEYmaCV9ck0/dDlRcXc3ZXF7L2JAYkZsXjcvdFFofkE9YitVS0A5eTsreyYqYkF1KCQ/WTc0TnM2PX1PVVVMZ3t3JSh4WF8qaClhPzluNSxZX25JTWFVSjNeWC5hKkRCZ05ZTG40cV9kVXNqaEImQUdw''@;'; put 'put ''cj9eVEJHOyhdQHBLPjR+aSVMbmdKbXNnczZ2Q2NuI3dGeVlEM3YmQWxvLi4mOj8ofndFJD14NlRIND9scTk5UVp9XXs4P2w3Ti5tWF0wO0lJVzBxLnU0XTIjNlQlMkY3XzNMOXR2XkR8KHh+bGo8UWw7fGlTUFdOVjx+RkpiOlApKW9rIllHUi88aEMzW1hfOm1zd08kLDJAMW1NYTldSlI7cXtR''@;'; put 'put ''ajVxZFEvKywvX1kzM3xWLCZlSXFVNTB5T1ZpKDZpVnZEMS8jZGBSRzdnemdyODBiandiMCozVClja1QoSkJwfHYrVmx5JD1oPmVUTWtwIWs6ajVFYnQwJjA7dCR8UFtMUiVnUGQsTVJZOj5KTnQ9YCphOHQxM3ptSHl9Y3Z4V2xHLj5edSRUSCFtLixiay8jQyspfm9iVElBNktIZTF+TFJVISxD''@;'; put 'put ''N1RTTUxQRlZ6eTV+Y34yaGErTTZ8Zzt3dyU2aX5uOE57UFV3JS4+aHkoJEB0L2RCRVJuSCl9WVZgLnJES2t5QC9RZXUzKFh9VCpxflhlST9pZithREopcm1pSHw+Q3BhOWR3b3dlTHRSeHsrWUZbbj5RQSlqbjNjSkpeTFFuQSt1Y35pImhORUFdKV90OGh+Y0tLNjVnUnQrcz9fOGVnIV48K2BG''@;'; put 'put ''VSVqIixybzJQQSNHSmB3PVt0KSYjRHYxJkRXVipsOzEuS1E/cVU5W1owZlckWD1Ca2E0PjYpdkEpRCEvPV1QZGMoYjV4UzVDKUJIQGdifntffjwjPHReVSVeYi83eiV4ZWcwbyIiKnZjLnlCKHpUR1N1ISY2VHlSbzt+eFVhZj0kL2Y5aHx1Qn4rTmgzN35zXTk2VW8va3RHUkNVVlR5RyQ2RTIm''@;'; put 'put ''Iz9neyg0MSFvMnZGdDIpW3FSPUc/RmpPPW5lRkw2PGs7OzZZLCY1ckohaixZPjRWcW90a3IoKV00Mk1uVS8kPzArY2Y9OUVAfEBfRjhCWXthZ1B3Mih4b2g/KjpMUzZ2bDw0Z1NtN31YLEcob3RaUX1jV25PYExWbShCIz1iNDJqIm9fVjd7IiNtaHh4ZnJKc2U0MHU3bFV6WHVnaCFnYWo4Ok17''@;'; put 'put ''Yj8vQlZDKXg/JjVIRllEdGY7TCJKUUN3QyRJSmJTQVtzNzdeLyk3dVhHYmpGUU5faiJWVzx3MnVBXVthWzxCXyl+IzMyOTF7eTFrLnQ/VDEpPmtDYUYmIkQiU1dqTHxXSClkPSJ5UTtTVCE4ayxyMVp+VXhxWWtAeT9KKU5vX0loUHVjam50XmhtTklvZTp3X0hOZXkyNz0xW0hBdWRofmYscGQ2''@;'; put 'put ''QFZFZn1DI2ApcjpZX2tMUUcpR3JGKjUpa3MsL2ohR2hkaWxLbUFbU2lEKV5+Nzw+d0EjNio3KiRVMl9TYkx4Q0UxOz1jNEB0KywoUEs5Q2wmRSY6eztYJXxwaHRHK2B+QGw0fXg+NmU6emQkMUAmWCk5JC46bCVmZHI6Jkgid0JUT11+SSNYZkBmM2VBSkdNOWE6R3BVOntvUDV9ZDxVfD5PW3pP''@;'; put 'put ''O3BfTlZFfFNSIUZLWk5sPmd3dUV+fk9KJSpJWkxUZ2ZlJVNyP0dQTE86aWRKSGNGLn1ZOG1WYl1Ga0cxRn17cCskJCRRMngiT1JuT2E+Y0FyMC9VZHNXfiFQIWNxS2gqa15+In5gWWhiUGIkTS5VZyRXN1dCZEtEOWw4YzFnP24mdWFTOHteLjt5cDciTlVwdTBfLEZDa1Fway9kVVImYzFJO3Jv''@;'; put 'put ''JVAvbTU/WmdjW1dZP05KK0NFPW02RXZHX1d1SzYsKiZBPm04RWFEXWg1VyZRMFQwRGRkWHxEblV7VGFyPVN6bmpQLyEidTFSWVs5RkFxYElJWlYpOFVDaE5YbkQrSm8sNngmQFFxX0o4NyV+K01qeGJeO1RSej9pUTwoaFo2TyNDMT12TGhaMFVSdk8idjxSNmhQI25mJGcqSjJPNykuWnFXP2Rh''@;'; put 'put ''S35XfjhsUVcpa1pNP2xpMHJHTEAhLmc0MGgmd3EiKlJGbTBAXUxtaSJHVEg0MGNbKjVLUE9kdWhWOSVCJnAvM0gze3liaWJKWnxUVyNbaTgqR0pgUyF2Tjxud104ODhAU0RvOWYsdVVrQ209PWl6bTFqSjNUbng3Ly9NeHBoRWNkRyEheFBwVl1nSkpUdSZbfGhCPCZRMER8Zm1qOil3TyFga0Jh''@;'; put 'put ''Tjl3OUs+K3ghfXlFRyheTkQoWUM8fERtfUZIXihNbTJkPzcwQmpLK0xCZ09KRzJrIWk3Xj40WllgLnxzYDUrXj9xSiZWPlNSP01JYnVNRDd3Vmd6Mig6TChEd0VSNSR9b2tjQEk3IzRPY25gK19xTC9YOldWRSt4dTRISHdUXi9NTS9CbSJeSlJRRXcpQnZHSnZBSjgpSjx5d3d9cnNSKllxLEl7''@;'; put 'put ''KFVqRDw0QVhIN3ZqPyF+Z0FZUlZxYEppWUkmZkd4Y1Q9bVsoK1pXXTRRZVB9UipXK3EjTF5YV10yZGdzMnVjOFlBNHNJXzA8LCl5WFchWDFUSHgxRDI0WDxjTFp4JCk9amNuKT1IYHRtTCxxdH4sUy82OS4wdFptOm9CezFtWDY+fXJBezlfPTElMz5RbCMyaVlZRH4kRUR1aDF6dlBZT3t3KUtM''@;'; put 'put ''UDoxRHMqaFFRSFhkaTg0L011fSN7UiUoJHZrbV04bC5iMWAwL293bSxxPX15MjE4fCVlOkdyPXcpPChlaEoqb1l5Mzc6XT9nUF4xLnM2O0BJNThOPHE/QmJrVTpNcExXTCk6b0ZSX0loaikwL1lkVW01SThiRG54SiwiNTdRfm9Ca3xicG55UkRBOnlvYHFrVWp3ZztnNF0/Si5COUY7ZT8mQHEi''@;'; put 'put ''M10+fFhLaHBzVSomM2xkdF0lLlQrMjYxIz1QRFFIYSFWQn0pUD9SfS5xZ29qa0tmPT5IelNjTntlcHdeZ3BZWz1fIWgqNzdAYXRdJmApNz91QSNyMVUyNGczQE1nRjpsLmIsYjR3JmVARlUsNlNVXXghPyFPRm9udmJRJE0+eDAqa1R1UTFDRz5hXWVZPjNXdFIldzxQMzlsfj0oNS8lKz1EISMh''@;'; put 'put ''fVopSl9JcTlQLldIVFAyZEZ6MXEvNl1lQDV6KjZ1SkBac2Uxc0pUfFVxSTM6Yl9PNHspOi4kLCZmZi9Ea0NjR3EzbHliPjJsdlgxYmQxeUg6bFFkIjlCLEE8PFgiR3ohZHtUTnV3YDN6OWI/W00pMjRWbW1Me3RRZlNsc3NOU0VNTXVySCg3O3l2YFl8TWl2QnRPcVMoR09tazJPc3VlQUcxa0VR''@;'; put 'put ''QHpweCQyelU1S0FDYE5dPkwhQ1pnZ0VaZ2tJIk1id288fndATF40dUo+fVNFWWN6PUpMfThRRVljbnhxeCorcFZiNEY8Intya1pDb314IU1CcjM8UCp4THpnUi4mcXwlQj4yKmJ1JihTW2J6VCRldXJ6cGxWbkNwdWs7d1IjJWwhMko+MSFwK3pwWStTXjpMOWsxRl8lPnlyVmh0cGRNMF1wSD59''@;'; put 'put ''VHJyLH0oSEp3I2Z8Rl1ILz8hZG5NVHdkZU1JJGdxa3ZaTX46RkcsWiFEW0tNZDNaakQ8Nn1oTF91JE5nfXZwTEF3W1NRdiQsVG5DIWhYYSFMNipfczokM3NxUjQ2b3RqQTE0YkUhKVZ3M00lMjU/aT9xYUV0cX0keTg9cShqJHEkY3R6VjowYyZlTTFhamFFai5vRDMrJDd7SVIwc1klMENORCho''@;'; put 'put ''W3xYJCw9I0pISHVHYWtAUzVZT2xzZ3xKMFQoZENtd2lAfjVATS8mKiZAeENOZFUuYzp9cU1aNWE2TnA2VzQ7MFRJN2liWFsmLnFSbXE2NEh6Q3Z9NH1iV08yOiI5XjU+KlAuQnYsd2cqT2JvTUNxUnVpKyxsKlpGektIZEZ1Und1fWdHR0VuUWNNNG9fT1hDPihPeVFSZGhsJE4rflNWe1tVbC90''@;'; put 'put ''LFpiVkl0bD9GR05IcEs4QGh2JFdYT3N1QCQpQmtYXTRJWFNAI3J4VzAvMX0qdHNVP215Uzs9RllwSmlNajhwdVYpPyolY2gqSFBPcG1pfWtKWzI5Mj0iSSJ3KillNmY7KGpMYXRrMVVmdz0xVDs4UCZIYiZBXz5jPkNOaDNrUjUrayM/UDpZLi9FQ2B7bFchTllBWzxqUndpdCVpb2pxbWpiPUw8''@;'; put 'put ''Z09QZjNvZVRlbm9iI0owN1EkOTp7L2Jwe2x2OF0pcSp4Wi8pfnReYmg/aXhNdCt7bXMvOSYjRkIqPVt3VGx8a1hlSWh6R1dfd24wJiJ9fVYvJj1lT084ME5APzkxMys+b0AoTkg1XnN6SVl2RkRPfndIQ2FxSXwpdixuUEhdRkEzR2cyR1dKb3xfXWVZTks0K09aKGRYVlF5NV94eiVJWSRAeDQr''@;'; put 'put ''QmZyazh0biskPUFeTkx9XmR3OClEeFtZTz5wSkxlMz1AJjtIXzpET11MLmlEXlAxInslO21tJXEmU0RGX2hMYGVJRVR6dUx0ZSExJlZGbmJ4Z1h4VnM5K2NKJj50QV1GSyMpLDFpSm5CVWpUfFF6JGomNEcqcTMwWCFaUXpXZkZ6cjF0PEZoWDRFdSlvWj8wcDBPS0d6QFBbSUM8KjRiXlVGKmdG''@;'; put 'put ''XkV0fXtlTThALFVwKyxRbll4K0x3SCZLPiVqZDQiZ25WaDx0MzdvfXQiJSVtSil1VX1qbTVWOEVuSillVVpmPUAqK2lrLlVPSyQoQ2BDeUFFanc3cGs4WFpEKXgseyFwe3NbVX15fVsjenFYTW5ZeEsjYEN8S05JP0VpQl5hOWAjPlNpSmp3aUMqVmc/IS5LYzZhWCxHKE49MkgiPTBXRDFJVF5V''@;'; put 'put ''UWQoWVE+KmovTlNrMDZBSlMxPnFgIU5mPmZ1SXRZNSFCYy9SJWtdITZRaWBSO0peMF1AaThfOWsyT3FNbnM5O1AzdTtxZnAmYEw/WWNbPGleenVXSVdeVWNbSGFdOCNxPTBVeDEzXm1adl8zbXtfVXJbOjd7ZEIzbHk1Y1VWPTBOYDlQTjJtJipaW0BPYjd4W1s+KSxKXk41SlQ9citnOXo4VXpV''@;'; put 'put ''LDJnamRvO0hxJEQ4YnMkP31nQzN0c1V9OVRzLiVlO0EsdXspNzc1c1BAKXQ4diMrd3R1XjV+NWFvSXx1W1pSPnFbNlQ3bUFdNWhMNm9ReHFFVl5UW2s2bUlPUmZxYyghbyNLezEpZEw8XXt0O3ttbCN7NXYrX0dlQEM3cHpwVy93LEAmVD1xdnkucTkqJHZQMEImQTBNQFpvdWgsJXUyQj1pS3BR''@;'; put 'put ''fmp9ZiJeSCYuWSNISDZpV3ttNGhdViwlUmhSKEA/XSF1RkhlPWdMTm57RSMrd1FsSXBaQVg9XWU6O0ojb3tGL0ZVN2lILnptfnZ8UUVOck5ZXTNkU2BDTz5ne1ZPUS94XmRRbUVuVC5aMkBnZ094U3tjdjkvYlZ9O0taSj9ScjwyRXQvbDU5ejdnKGpKI0NeJUZtOkFial9ARzs9UEN9cCk9WX1z''@;'; put 'put ''JF9JczYpJmQsdVBqR3clMDpCPl11TnVmeX5gXTNnI3k9dzx0KTEzSnMycFc3YWI2T2d2QnIsR205PTxIO11JIUxqaCs0VyxaayZudD9OSW5iUlY0YztnXWdnT19wZWsmXT9WKjBXL3N3MyY6QCJLQk8wZC99cko4MSZuTjZEOWhDKDJqYERCP0VGWSxtKCtPM2pAS2kiQkBEKEY9TFBEWjs9WGRP''@;'; put 'put ''ZDoqa2BVWWBQNkFjfSUvbSVvbns6WnkraF9FJkRPIVcpKi5UUkMoal4zJSIpcjNITlhjdXNIN1gwbUh7MEU6LkUpTDlRXlUhfER4XipSOzddTkB0c3wxM21PayR+VD84USZVOGhRSjVLbyNFWWkqVCxtJi9pVGtFSzl5OFU4U050KXE9cVNCTjdXfklvNW5uX0s1dlFHMihRanNFQ0IzX2VTMEhm''@;'; put 'put ''dm9MVkBqSm4pWVgrbX5fJGZxWm5ldmNMO0RILFNbNV5ZKXhqSnhYQDZRVDRFb2siK3Zfezl4eCg7YG5lc2BSP0IqK211dUBWSigqe3k4eXtSNEVudGR8UDIoRFFNK3lBMFI6T0dKdjhXL31kdnF8UC9RSWs1IyFaOTpmPUJpKk0zbVIsRD4xZTwpajp1UlJvbnxPYipMPDF8NUU8Xy87MUp5T01g''@;'; put 'put ''b0o1PzM6VkpNQiQhK1dXamhTa0sqRmBickg9dDZBezlvSV91LFd9UU4pIVJzSWFfMk5mTC94PkVIdlJ6Sml6bn5MTDBXWyZ1dUdjT2dbNms/V10mL09RPF5YfUBEdFBeWDFOOjJkMHxTUmA2PyttaDc7Tz98WHpHaWN+dGQ/VHIoRFFNN0BGdkQ3JiRdZGtzYyleQ1BpWHlQflRxa3NFeHhKX21E''@;'; put 'put ''Uk1gQHhuRD5wOmFoPEBncDBhdkd6a2hNKkAzRGlXRmJnXkhRbUVFP1RdWStrUllpT0p4PU4mNWJmbyMuPHZ6djNadjBYNCtTXzExd2hCM1FebHZhdHZZNSwmfH5FaFhKcGJJeGN5JFBeVD1uXnM3QlQ6RF9nKDNkdiZEXk58bjUpIm9aViZGKCJPOFYpfmglazBTXihUJCM6RkNTdWN3PXlaST1k''@;'; put 'put ''UU4iIX0lJiNseT42OipxeHhbSmozUXg2VXJPMi99YGZvNXslTGBCbV1DWllPeyRJRmN7I1BFTWtjZiIrdGMrNldrbGhXTzppeXZ2QDVDPz97WlY+a2NwVV1EbylCUjw3ZEp2RHs+UmpJPW9YeSs+JHVAckJ6TH5DNXQ3b0dRT007QD5McUNfIy8zWD9xR1g/O3Vdbk9vfVV3Oz59KVVGT1QhRiFR''@;'; put 'put ''Kzp1T3ohTipiN1VIUyI5LFcxTltnbnNbPU93NzNwU0NLPikuXWpiSEI3XV5bIkkuV3MranFTSkJGXUY6NyowWUBVSkJGVHkqVExvSUd8djsxbF5sakokLiFwdXV0OkZNYV1DNEx5dXxiWXhpOXRueGdkNCs2X0s4b3RURENEZmgxMWxpWXFDZllFd0J6e0VrZTVAdS53T1VNUXUmVEJdLHlFWF1D''@;'; put 'put ''V1tZYlNlQ2NvPH41S1g+YUpQbWRpKVlJLlViP3IrdzZMP3F1bytMb2Q+bFYsNH47Nl83O2V8R3hYUWdPU214b1o5Z2QoaiJtNDM7a1VmNy9AK04odHBCdGlwdU9XdSg7IjspPndKYF5WbEJdaFFPeUhPIXcrVURQeXcmKHR1MkNJTEk3YlZ6S3hjPk1tMFhEeFc+dDJdLkU3U2FsV1cyLlFEIUwz''@;'; put 'put ''SXQ/cDRxa1A3VmMrQnNEY3UkP2QieXJAKWBXOUxHVmk5VTMwdUNqU3FNWSNrNXJvdVIqV0ZGTyJCWERnWHd6VzN+bFpOP3kpIltCNlB7dVNMOl5EbkNrK31kZmhIRT4xfSFdQ1hSKiluQm8qZkhJckMoKzh0Nl8sR1l+NUE7QW1nISNKT1VCQjwoQ0YwPHEzJkQpXj9jRTE5Sm4zcD00aSopTGpi''@;'; put 'put ''bGlDPjMjUyo5XTNzKEZXKShdJVhLXSlVVEx0ImNKQSEzPXZ5YF1rL0ArWFdXI1l3WU9zVlB5WU93ejNTKjNla2sqSWR4Y0ROaG9JYU1ZfkA8LFE6c2xpMDFoSUJLYGZmVzkyaT1JU0VRSDxGR2BVO05eKTFGPDk+OF82KHJAcDpgTVlNfFY7P0Y3IyFFY3FTOFhZO0E+cjoyT0BeQmE+Y150LG9y''@;'; put 'put ''UDAzZSR2czlQTGlNc34la2FvJkNoe1ZoZn4lW3I2eWUzREokPzU0OD5EJU59bjJVIUhgNFNVUUp1c3RSUVJ4X0k3ZXRGJV9nOk1tZXZGRVlNb2xFVTdyXkZtRDpMPndRQ2diWTAyVlR4PjZaIWxubEwpLnNCQHtQX357ZCZ6KDRvfSh3Uit1cEczKm4sMDkma1EmY0w1ZlZzTmRnOmtCQU17R1Y1''@;'; put 'put ''bz0oWkdHOHF9MipzdlZRZnpBZzpjYCxJJmFWNUNBJCROVk1NY29KIUJLM0YwbnBMeyJpY21PeUBQeT57KW1ETkdeMzAzQCQ5Sm8uOSw/enhITzJjWEdKIWxlPHN1dTkzaj1LTEE/L1BQV1J0PVclRzssSSJnK3tHWilWWVRkYVM3QlZ6UWMrdURHaTQkQFhGRk18NnNINkI0UD5wSSQsdHM0YUFI''@;'; put 'put ''Q0tYUWZZT0YqJU0uYixmfk9hdzRfZSNCUVZGWlg1SGtaV1JsM3x6KVozXTVxek5wcXRCQUR9T0dYQjZaWj96NDQya3tCR1lHT3tFcmtJPD97clpvTzllUkolTnZQIihjL0xoOHVdTC5ORjVHYVBWKix0SjVBWkckZ1ZdUGtMSGQ/MlgmNXZDe3V6QExKcHY9ZGlHVEs9bF9aLnV8RCZORUhoXkds''@;'; put 'put ''e0Y/cFR0c2kzdWhGYG9sWENNZXNPY256ckRxKmt0Y3VANnRBaVFINl02YDB5TW1veGBmfD5bSk5BTVIvMS99eTFodWE0dEp8K3lrQWouUkVlMlN0UzY3bzhjNy4uTSh4eyNCTyU1eUxZb1ooVUIzYl4iSCY0eHd7dTkrNS5JMlhifGNIRHU+RnR2ZiQhV31feEdIVHZ2PWRhR2FHUC9lM2F1MVtZ''@;'; put 'put ''X0IxQl9EQj0vME1yNzBNZWlxTCJDb0RGcyxXajxsTV42ZylkRDJtYTN1cD5qYENVQGFSKkZQUjIoPkMkTSl7PmskZlF5MD8+azFAUDZnZnVeKSs8Rj0kRWYuPGtEPXZJTkVxXWBJOXg5aWIuNC9HOUY6QURPPzBkNlVYSTxPbFVYd0lEMEpoVFhbQ3JrY01nODZPZHB4P2h0YHA5Pmw6RWc7b2Bf''@;'; put 'put ''cVEuZzpacEdCdjlCe1h6bmdYcF94Ry9OX2d4e2heUyF+RyFMcWQuYkVYLiNYUiMqd09ia3gwb2pycz9uXn5mckU8JipVZmV1ayFidjF1YXheNWxxSzJAZzNkPTYhZDMkaFYxMnt1ImFzKTRwSDE5WS8oJWlOZW1SKCtAL3ZQVUw4cnZmPzEjXXJrZHo1eExWSlpmTyp1U3pCPmR3RzlAOk9DdDty''@;'; put 'put ''Pndqc3hXViJHc1l5RSNDbjw2L255aUY7ezQ8bUYoRkR+NllNZSJmRixtIz40W0dOaUdPeXElSUgobnZVWHFlQ0dPUUZlYHYrJSMjVWZvZXIpQU8hQ1RTZTBDPT1LKExdMjN0RGNzZHxbamhKVjQpZnd9YUYhb3lSVXJQJWg5RCtRcmI7bylMSjUrTndxQylhajguY0VsOkJ8QiZzNms/MmBWXXQ5''@;'; put 'put ''WEh2WjQ5TVdDXiEqXnpCa241LCVgU2hleGUuOT9TUXJ4KX1dPEZ6OWlLOGlvQGcwN181bHQpJGRIKHBKO1lgQHp8dUZPRChOVGpVb3B4IlY6cyRjYDBOKnM/Mk1UUiJ2dkpGSyYzOT0/PXw1QjhMOkhYKCE0THxYKWpJc0RLaHV1cSpLS0xNZDp4SENTNTxSeElWSHMxXSNbaUNhXXlhaXlpX0Vz''@;'; put 'put ''W3RPUD9GbnJzSDFLdSQpWE56Z31tKVJFZDJRfF15cClsTzEqMmFRe3xkclc+O2RSJSVbU01oQCFOejAkJXhlLl0lPThiaXxXUTtvVm1XYn4wMGwsc0N2JEFoR29rUl98ZXROdU07byZLZCxBLGFnLE4uYTFRfiVjMT49ZFVZcWxQfntyUHROdU15M1hxQTpkVXRPeXBiaT1bbUZydTdhe1pXakQk''@;'; put 'put ''dnc6bEpzLD0leFFPb2tkT3gxKDMjSm1yc1FMJWlVTlg8W21kPzN+W1p3clUjO3thNV4rXXI1VksyYUBaQ2JATCwvZ1BheDZEZTUoK2drQ1hlKlBhakl3YUA7MC5iYXFoO19Tb157LigoPFpXV3wvYFBuQiFMUmVxO2hmL2h1TFdwVj1xamBUQktNWkNxR3tFLF9SKSkpfGJJR2peOyU8Oz5DQjIi''@;'; put 'put ''WjRxKVUseGBmOlpdQzxQQEljZmhmIiIhLntrdntKTldKWXxHS1Q5Ly9SWl5DNTQ/Q18/cGh1MmU4XjtgaXtpTHpUZmtZUCpma2QwOjslcHtmfnVjXU0sPWdsJHZUd2c7Wl4vRThPQkY1UkpucXNIaTRsKUsibiZ8Tm01ZjVTMWJuayN+R09dP1puWjhAP1puWkpOMzpzaVpYPUAqeSVjY082S28p''@;'; put 'put ''RTE/V3lhXnlVQD9ZcjZnTE1gJT46LEFCbCtweXMsNSV5Yi5yajBHYXgsK2gmbll2UXVkQFI1dyw4bzhVTlg3KE9MUnYoO2lzOSUvaDBYcSZuXzgyXXpbMHVaIXw/UC5VK0ZldTBxTltJQ3kjSU05YkM+ZlU5O0RbWCU1Mn5nNE45MH1TcXgrOkNkTWFCKSRXUFUvTGAmIXEjZ1lWflQuTC9tblIr''@;'; put 'put ''aihwOCFWQEFeIU81JVNmWWBnZnV4XylXSU5YdUsicWB7eXVKPiksMT8kPnQ+MGQlXm1xLDB2UWhbSmhfODBfbTg+RihmeiEoTEk8cns6WSE1VSwqKFdnNyMwMGBVfjc2KzYudmlEcGpCdk1PZkdeVWlkLmNNXmIhVzhYWGl4Y1ZHbXNpcilhfi5TdmN9WG97OVNVSiwqbkRkPVJCSU9HU053WWpx''@;'; put 'put ''aktgbzFAcyVsIWwhYExmNjw1VkhxLzh3QGJrNmNjKDUsSlZ9MSokSTBERW5QS0w5d0piPkpEPmZUZiM7Q1o/bVU+MSYjQXchU0xOTil7UF89a0pDKSZqYS82REowX0lmSEo6WjJxWmx6b2R4blc8LlplUCM+SzZ+Mnx9M15helJxLCVqPyE5OUZVP2ZLX2dZaFJGVHZQfjxzJTw7bXJtWitvVWEh''@;'; put 'put ''cj5gMFBwKDpTYXFeOEZhN3Nlfml+bz9LcF41aVFvW2AwOldVeDtEWFA8e0Q5O2soSjssVlR5Njh4Ny9DWChMYCNNZF9kSDYpRVpNPnEuWD1fa1NGPihGeVtQeTdwbmBHeXo7LGUrcXFuYTNWV3ZNbChAX200LGFgWCFqVGhhMHYmej9TeSVoVHhgdzYuJUcrVk1KND88KCtdPFNFQ2E7cSU6aXo/''@;'; put 'put ''WCkvL04lfixSSlg/PHB7IVU0V2x3ei9qK0ZaY0xfNVYvdWVHPzgrIWk7cDNJd0U7bEZOMSohalIxbyZnZnUzSDAsPWZbJEFxdixIZ3VmfkllKl5IRl5Ye3wpXzwzJjM+MDs7bHcqM3ZtYGxqbjVKbn1mKnhJVnBwa2w1JUJRXU1ZVlNzW0UvRUdjdTRGM2QvTHlCc2l5XVRZX3Y7LGZ2a285My4p''@;'; put 'put ''JT1OcnBtcFd7aWxTR20xdTpNdUc5N2dfNU45alhtUWFbfCN2KXVNREx7YCgxJTA5WC83S1ssW2FgYCQmXzE/OTlXJXVKVyltenNxa2ErXTJzLmJIU1N5YkNmaHwkT1NDVlNbeHhjYEdxTzM8NlZmfkp7YF1QK1U8WW0lIztpbWU0R1kwZjZfcmc/JC9ZLDR3dF56InF8Q31aWG5uQns4YyNOPzk9''@;'; put 'put ''MiY7VTF5WT5hcHpCVV0rakBSckRfXS8sJU5HQ0NYNjZdKF5DMHQ0XXQ5QnVyMk42X1ZtOSxxcjU1Ryg2bGAvV1JGJCVDQ3Y4NWJNYXVPRk1KY1NeenBpOV9QcWYqeFF9fW1ib15PcjIwUXd0YkBVJjksL3gmbyM6YFNKWi9iQGJTRG4lamFUZytpLGlQOC5XTVk+TV9CemtRcmlxeXI4SVZePFN9''@;'; put 'put ''akxSUk1mXl5xRyoqIy8mPGhBZ2JFYDxDS1EmVmc3UChlcCxleEBjZFp2KiJRVVV2MzhHLFJAIXckZXJyJDV2Sy9+ZiJuUWZWUEwxKjYiMlVuPFQwN3VOYn5QeGhROyU+MWg3YnchLjdCQ2w0ekN8M2FSOyYmLDQqJDd7WCF8Y3BZIik4Znhrbil5YUJjKUNfXnM7cGI8KTNmRSNxQjsqTUo6Ykgx''@;'; put 'put ''X3BDZjkrXndPQEhpJT4rX1RfOE5yR01Kc05YXTNZPks4LC4qP1peYCJCUmZqKHs5ZHg7KTZfVCZtPUw0fH16ajsucU88S3x9eWlBXXd+PiZWVzFjQV1PWGhWX0M9ViJ+a3dgaT4oRXhrR2B7bUs1b29pdyt0VnJ5dHVVKW9fVjVTfG4veVVoaUUkRlJGUkZSVTVZYkZSRk14IVQ3KjkwJFpAdy52''@;'; put 'put ''RyFMKHlNcD5paWl8fU0pdEQ6dEQ3O0ljRndbQUZ2ayMlY05EL2U2JSh9XTdvL2YlUHpJdEQ6dEQ3O0ltSHNbQ2ZjfStyd0A5cy5fRzRZelBMJHIkN3xEKVEiRzNCRmM4UmdTRTR1akdXSCYqQ2F9L1Y+ajZLanZSNTpAIzgkMDJPblUrM3lwcVYoRChOQSRWfWV+dFFnUVd+Q2NDW0llJUNYRV5L''@;'; put 'put ''IVF3aVRMUjB6X2w1MVZ8UVo2KFJlVWVwcW9XJllKbmFxVClHYH0vdmZvTHNhcTVPQGBqMUVtQ2xLOkosM1tgK01JWXQ+dzovXVVjWzk9InguIUg2WTBFOjYqY3V+PEg6JkplVWZ8PF02eEVDNTR2LFgqbmNoSXAzQ3U7e19hQyxCPHY2RX11QHlyKDl2QGdwP15zXXNbZjMhWUtLOldsWl5xRiF1''@;'; put 'put ''NXlyV2J4MEo9bXA5PjIueSpQWVtrTDhbQ3FsW0NEXyYpZkYpUEdnRDY2bz4kUlpfN3ttNUpOfFEzYkAzPih6cmc9P2ZdVCwrOkVhdk85cShOdEQuTj06ZVVbZ2FvZFhOfGs+MSZmJkx+eEppcnk5NnNzO042ZllqKkV7W2JMSXk5e3VnVnpfRXNtNWdLdDNYOXtbWHkvQixWZDJYVGgvZ2JYd2Fn''@;'; put 'put ''V1F5LFM+I2h7cVI+NFAsW1F8K3R6U1VZSF40TzJoZVd1ZHJkdXUrYDdkUTZOZCx3YyV5U3JkezE7OjU3MXQvRlZYXUNNZC4mTXxqaC8mOzVJZFIoTHFeJnc5UF9uaSp2MHpaTk18aFtVMXdRbVJrNE00T1NYRSlAQ3NEWmhgPH13TX5QUl1mOXlQRFAqcEc9S1QlY2dmUF86UVJVTFhXMEVwaF9O''@;'; put 'put ''IT06NTdOZWhiZiVbOUFkeTBFWzVkaTBFWyxoP2V3QWAmSkxMXVkzbU44d0ZlckpiKWV4P3gsdEk2eFpjYERkQE9afTU5aHckajovNTY1c3haYmBEZDpRTllBaml5IWRJZzJKTiRRcXRqMUkqNzUsZHFaKmY8TDl6OHxbLHVzR208fFp+QyNdJWdeayQ4QXBzJUpmZFhPKWRIXSxzSzhgUG1lJWZV''@;'; put 'put ''Y1s4Z3twUE5XY3c5XVJdWWR9fUt3O1spRFZXI3A1I1cpcHlmWnlqO2FpTlIxYGFJOUZmTCVkRGRVNmh9QllsJTZFMHdLSiwwQmpPVUZeLForWnghLCEvWjRxYmxGdClmPFNUMWNnMTVJciowRyFAZGc1aDdoMWVpUDpoKmhqb3tvPzliZmwxLjNvaDp7Wk1pR3JHOXo2VX05OWZQP01bJHNbaT4y''@;'; put 'put ''ckV+dTNrIWBJNkQ8Q092RE9jdFUpcmZQUnQsbGo+I3ZILHdxOTBbXXEpPEdsPmIyNkRPJXU/L0hYVGN0N1BXZGlDSDtiTGpCOnZ1WFNsTUZ5SDFnT01OayZvOVNfbntbKXMhQ19uUV9mKWUvWUxxMTZIIUdZTlZEMEUkZntHWVY9RE1BRCguX3gmSVNzRXA3NyV3IzFFPGFvZiYreHx4aygsWTNG''@;'; put 'put ''Vl1IRG9aUzJZekk9a3AwM05tIiwuWyUzZnxOTkM/ZFEwaW9gQ0Z2MHJ7cV48QFtoXlEyOUM0LEMxcCwyWHtgSUBoQytkPlVJPVk2Ujoxd2w/MyE1dVBydXY+I2huVldLZUssLGYxdnxJJUEjT1o7fnJVK1FEKW0rZT1fYW1pUW5yKlpITVo6YzQ8QWZFRy9lZ2hDQHopJl55L0QrPTY3NzQ+T3M4''@;'; put 'put ''UkBSdz9FKFYjfjVZMFpyVl4/VlV2UllNJFd1XVNAajNSL1MkVjN3d3F1fGhRcnUzdSZxT3Fzbyg+djwyJks0SHpwME1rUiY+czNvQiFKY3MkPmdNWz9dX1NiazFsVGVdfGlMKGUjTHVxQ0JWOCp0NyYkaWpQMm42JjdVK118VysjMUBrU31aJUlEXkNQNHo1byFZJUkvOEQmXWZmTGRmNGd+LDBi''@;'; put 'put ''W10rY0NiJDA3cUN3Qk8xckU7QUBBUzFRSDYwZ2QwZ1RCaHppKFAlIVtmTXljQFhnWWdpZT8rZShkcEpSMkIxPGBEYURib2xxP2Uham1zZC9kVT8wWkVZQjFqPDB8djJ6Xm12OU8pXUMjNl9EInIoOkJ1cCEiUi5OMVZSfXwjMmZnb25WcFk3REEkU3ErdV5wMzE5a3JKfjo4NUkyWUVuIiFyIVc0''@;'; put 'put ''XlIuODU8JjtWLEZGVCpHT0dRY24lZTlwdWV4dSR9LkJsdD1KLjhxVDdZInxQeyxAdkx+Xyw9LGFvZzFHPDRpcUpdcEJpcUg4LHI8dCl6WHVye0NzZFM2Jk9VOEEzOT97PD1fdCllKVh5PENgXiRxSnomYyRxaypRO2xgJXhSITtMcnhzbSRxPyokLDdPKGk9Pz1SMF0iWm86ZjJnW2tvI1J9OmU2''@;'; put 'put ''c3A7LlloXWxrMnNSaiFtJCxwOzs0TUIleylrRCtgYSVoVU53JGU/eyI2JVNSYWImUDFgbSM1USgoL1l3YD8zeyZ4SWFIM1BXJi9Zd0A6bEpXNW1ycE05OmdPTiFveStndUBYaG4kQDo/KzYpXTRWczBWdyVWZ00xNzQpRTlAM2d4JSIrOXE7PSE3YEp7N3klZGN8Xl1dVSgzaCRxdjpeUmNxS2w3''@;'; put 'put ''dHJQW0ZFcz49dDw/U1kxfjp8V0IlcHdaJFpvczMrOV1OQT5EWXlVXnBaaC85JSVhaSRjWDMuPU96UEU4VU5PVzp6entbRWt+RmYzaihlPzBheUI/RWJ4fi8yeF1hYCNJPFQyWlZAKiJ6ckw2P2g/NUV7MTsoaFM/UjY3Ql17YjI0PWRlXjIvVHhjOnRKWmVne2FvPk1ifUh+QnJpODgxY2A4cVlK''@;'; put 'put ''MkJgNjZFZTtPYTNUcDVGVk92Lik+V08wLnV9Y11oUixsb0EhLmhsb2FIVWo/fUh6KiVjMWFwVl5LUnk8TjhXR11nW3U2ai5ZMyswVDUwd3c8T1cjLzpXVUw2fHF8JUk8R1U1bT1oVF8+SCFkIlVHWFQ3ZF5LZDt7RCxuU3U/VH1UJVBTeDVoQDwsJX1lJnw6bnksfmBzQUNxfjBOSyl3Lzp7LypS''@;'; put 'put ''c0lpY3xTaH0lL15SMTFmMCZna3s5NFNbN04zdWFsOmhTZi58dXB1Yyxsb0VpLG9IPmRgOCVNJl1gIj5oeDxbb2l+TnlgOjYqc1o9LkV5cEpZNjY8KlU6IWUoJiJVczxIPlIoW25nP0x6RG1gOkh+OytHck9AbUhlOS57Myo2RENlTnV0alM1VTptZnReNEhTOGR3YnUvMGZ3TGk3OyIsc2pwaDFY''@;'; put 'put ''MytOTX46fFY2JlB2UHpqMF9FJDdDRXkrQmNUKyM6dVsjNE1FITsoXzZRQ2ckMD05aSNNWEtpXzowTE0kX0pBPmhjRW44dGkxfiVUMSsyPiwyaGhTO0AxVGtvL090TixGW1A6SHskXXA6RGFWNm08N3FePSNDYlQ1ZD43ZT13dlRZbTFPX11qR0VuTjsiZ3wkRG4kcWRnRjtidUpsSD5DdS5uXmgk''@;'; put 'put ''Jlhze192Jks4ckp7YixSOkBMcGRuRDczPUdgOz02YiI2QWk4NFBlN0UlSDtlL0BFK1lqbjhrIW0mUjYwJH06SEtVcEdSISxOUl1edTYqZmt1JnBnJkswbU5QMVNWRmNydztPM1RGbHVATkVSazdxKHJBa2hTYCkvMTk5Y15VcjNVaGZacGsqPEZ8OE5+QXFEPntgbWBGY3F+YEtPMzR3VkYzc2c2''@;'; put 'put ''RyhFSm1gWzo4QExvaCZdfVNQO1ghdyUmQExsV11JaGdyZEU7Ti5fdFolT05GUmElVmBtSEdJclJAeyJYZGBbKFVUYW4/KXFET1t9NkdUNXk8Ni99V2E1P344SVVkNkpNXTd6UEYvcj08XmEsO3tndVFuUUk/bGxhUWFUcmdMe3tJVSU+MStLZDd0elNwTk8seUJnK2ljOzZtbmtNenN9OkNZOThz''@;'; put 'put ''XWR2OGU6Lzk1TDo6e3s2d1Z8blE8PkNYRUV4MiJZQFRXckxzOyJZezdVM0BbMkBQMXorSCU6d0x6P2dDO3ApU01aamcxJVJXZ19aQV0zYnVHU0M5RnZadVRzLHozT1NgQlJIbDVuaGJrLktrJlBAa05IfmhTN0UxO09nVnBQRW97M3hucFU3NFNZeXEkfCF+X15oYjlXcHQ6YDpdWGw6cVdiJUxt''@;'; put 'put ''JEExRXd5cHVlWldOUjBYczx0Y0Jib116ckkzcXk6NVhKND95b1JrNTcwTih3IiI9cFFMOFh+cWRCXlY/OClJNGhjXVJ6eXxFSnJ5Kl83P2t3STA0Pm09OGc4enpjZ3oqbmRiI3QjdkZuODRWP3ApJXdoblE8QStTblM7I1J8RFZ1Q25XXkh7NV5AZ2drJHUjRHIlbGRoSjhIYWxNTTBITnVWOmd3''@;'; put 'put ''UFklUSQ8KCFXSHBNdUJnez1+NylaRGI3aHdHT3Z5NTVecl1oWW4vUThCaioucEFxOUx0X0FMdFAvNDFFZld0PnVwQDBEeDFuITA/RUdhP3ovMi55Kn16WDZqPF4qRmk5XTtqXm5JI15daC52aHclWz17R1dyTl96LkVdKFNBLERkPyhIeGlRVEc8Z2lraCY9NCh6QylLfH1NUGJDUW1dXndDRnN6''@;'; put 'put ''ODlNTnAvQ3lRSGVAdltqaC50OCssal10MXx+TSNIO3pgTWRWdiE1Q2lpY1JqVXpTbFZqNjloaGgkJikrZXs3PnkrXWN8VX42aDdHKH5eX3VSInFpaXwmbiViclIyYUxpQ2UwMUhxaGUjdmZATT9FJUl5OmI2OFI+NVV8Y3dJTj1MNXUxYCFhLnJ3VT0mbUlteTkyPGhfK1ZtJmJmVnF7PyE9NV4k''@;'; put 'put ''KHUpZTxtKUw/eUBnU1A2LltxVmgvWClaS3c3X3c9KWdDRH5NMXlQNlFtYDpTaU5lcF9fJWdtRmR7PkspalF+XSpydzAjVCY4MT93YHE2SDttTjM0Pzk5VlRJaD1AeU9aYTA5UFJBZkI8JWpxNUJJaCxyfi5EZ0k1MzpbeH0wOl5gNFk2JEUyLk0qL01+NEdkMXo5PF9tPCpzPk5ha31fMzV6WS9z''@;'; put 'put ''LHZJMFc/Zy9dL3J0RyF3cFN6YmBGUjdgNW5reXNoQTZ8Nm5pLF1xdVlIWnp4Z3dqWD8wOXVHOE0sWGk3YEFge1JyYlVgbllHK3ZxY1N+SUw6ZVZaXnpbMytXR3s9aTx2aUtHQEVIPFdeOnBKP0NAcHdJNyhXKUY5S14rPXQrK25tNlQ+LkA5PkYyb09fP3hwVnVoL1s1Y1k9dnkvUW50ayN2WlA4''@;'; put 'put ''SWZMZjxTckg1NkQjR1Q5dUReTm8wOy9tRiU0X2xXO0FuRGRFTW98RnZrRnx6RzRXdHh0Sl1CdjZdTThmKWBKLllicGdNKiZjITE1QiRxQyxLSS4reVJsR1hrcVcrU0x8fTklTjRNez5DenJNc3pMOm1Sd2J6Nkt5KT1LYH4pUTYjRGlPVytXQCw9NVZXOFQ7fnEhcnNtPnk/W1t1RnJ1OEhMc1tQ''@;'; put 'put ''bkxbdDBMJVsod1FvU2R3SV5sTSohKWkwQE8rZF5sdy43JSFvUHFpay9xMTgrWEtXYDxvYFhsSypqcT1mQ2JZVEhidl9eKCJubX1+QlY9Qyh7JDE8VD0rM017KUA3PHAlZWxFOV9gPVcwOFVkWE4jWjw5Z1twSkksZ1czPW8+ciNhXlsjbVhXYkZdIkI8ITEsU159TVZDaE1yKVJ2MSkzbDUpMjxV''@;'; put 'put ''Ml5nLHx1anksO199YWN9fDB7UFNmInVwZ24lbyRDUClLfl1IcEQmLGliRUFla1BfTzpZTklBNFpbWyR5aUlVTlFaXVMlajRLPmJTS2hsck0lXV5DRlR3N29ofDllTFhRWSkvJW84N2VrXThaM3J7ezZJY3ZFej14M0gxOnEkZm1JbVBsYFQ8c3QjczcmaFR3OippSHgieH1vTG4lNUh7azl7I15h''@;'; put 'put ''MVR8UTQ5VUN0eih3TyVpakExRnNwRSZZX08iMFFeP1JPP25GN2oxUjxdPTBiamcxb2V8NTU0bD87IzppPT16ODNiQFMuKkZadFE6LHoyMHBBKDFgQnBweyJwJi89aXhiL2pNYV1OJiVfcXc8OnU4YF1WKEMmfCp6NCk8JWU+NSYpSj4/aFk3fjcjWWhTP3F1Ql9IVk9oXVd2OjYkWz9DSWl4dmc9''@;'; put 'put ''cS8wI2ZoIyRLZXg8S0dsQjJSPE1QTG4+eWd9SkVEazs8WF0vdHd3Iyk8QW5fYmNTYlcoMHhfSXR4JChNOkdVVig+OyhdQGZ8MHl1JjhMejZqYFJlOHZuUGBxcmdPTiFOK0ZsSClXfShLfmpfUi43Qy9wMnEzS1h3QF85N3Y7InIrflA5Q2J9VWpvO3UiJHBvXzpKXUkzKn5OdWohVyZGeCgzKiJT''@;'; put 'put ''XmJ6eyVSX2ZZMlkjMywqaVcwRntZUi89RWdsYSRWXTB4c2w8ZC4vRTdueCZIMn1eaHtRZSxaO3BEfjtIMyZrRFE4dTlOTTN1UWxCVntsRDVOPkR+VWM9bHMxfXQ2dENganFTL0cxbCRIMzFPZHAhV1BkKVVNNTgsQ2B4Rm9uIyJkX1AjTTdAI3pSQDh0aisjVTE2IzdVOkB7PipLaFE8JnRLTkR7''@;'; put 'put ''a20+WCRBSm1KZGhZYSkzd2NCUy5LYTNhO0QmYkdZamVGUlVyUCUhREkxdnoxVVg4YVVWMlg1ZkIzVHYmPW0mO1QzJkdHKUdjP0RWIyp1Jj8oPD0iO0BsemxiVil1YFtuYyRuTWtsam5UUytkTzRMTlFBc2FLS1EoW15eMVljM31URyhaXyhUfmRJRWE3YTxER1h7RkV6NV9gSDxiOSRHNUgiaE4h''@;'; put 'put ''JWVTMSEuSXpvLFROe01DPVAjJHkmSj8iSCY0NWIwVDVFKj9aRlgoMGQhdlljcHZ4SDdrQkRmWn0oLyouNXUsUUdgPGRDcStjYTB3dTtxWl9HPCU/Sjg+IyxLZzR1P2ohaCxvekBuTC5VNjRxazNFR2RiIkRHYCtWfjg+YCl7JWoubFlfKWZiJE5nM1lseSFANzouVUZ9OF0qOSwhSzAraT9SYjFU''@;'; put 'put ''Y2NPc1p2I2omYWZTZkRkUGhCJklTYmdjJktsIj55ey9ZcC4lSX1mQVNLVHZ1eiFXZjg1Jnx2cndsIjU/ISEkLiVuKiluczVBKUFxUyMqOFZRLjo4UjlRRENSYzxZVkNbR2NSZjxxfEBXOXApYVNOdC91Z1BwZTE9U2NLYn1NMjddK2lDbjp3PEAwU1p2TDJ5IV9JVl5PITt3PipFPkdfJXxeUXw5''@;'; put 'put ''Rm5mV28ucEZNQ2dpQW1HaD9EJTVTSFNtfW8hY0lmY1JtKEhhM2d7IzltVSo2YF5TS2dwNVBscGVYbl5ZZiRoc2Ike1ZJdWNHRFs7RkFDdTlyYElIbHhqQk0sLHdzOjhGNVtMNCRnRm4mPWdyazdYMlB2YHw9SCk1RW5uQENMQ3x1QDA/P2k+Jj5nWyQyKiJwbzs9MStdTnpZKCMmcTY2LD5nTmhw''@;'; put 'put ''OShjLzNQIUJ+dyE9bUtmMiZfUEFaRF5lWy5qP1pubG1HUWNjRUd6aktrd2ssVHlJdEh5dnw7NzczNXkrV3ZPSDYoajVPc2JIdjJ6e3pyeWwxJGh5OjV0PTd8RTAxb0cwX2VXJlFbMUl2YDBRejFERGQoO0VeMytwe3tNJFUrZk9bRihfLGkmSndJTS5HS0Q9QFhTOllbQEBAbSJOSlhxeiIxRDx7''@;'; put 'put ''PyE3dmw1dkg8UCMjODhzUzp3M059YXNlfkQ3KS94LDVEc1A1LCE6P1pBVEloezk9alc9X2ZCYndpaCoyTyVhdH4sS1Q8QyhqLmlbKTZ1YGZYM0VeXi5kWU1mT1MvZlR6RGRNRWxpbi89RkR+KUYiPDxPSHhlZyJZTyhNRUUwbnYoPmg4aVMlO1AzaWZTNCwjNE4kZnJ5X3dHcSlLTl9xcEU7PytE''@;'; put 'put ''WmJuS2libXNmXmh2I1NON2N7OlRfK1ZpSUFJL1lVcm1sJVpKLC5KZmpvWHZaeGFKfjBEKCgkdmB5YCFobVE/REImYV5oS29wNURse2heIVI+JEdLTCt0U1shdXtdNH4sRmBtPVZoNy5kWj1gdE4ufEl7IztVUUlNSCFNYGNEXUNUeUF4MWNuOHRaMXpwdjlIZi9yUGB4WylMO3AlRHt3TG5HWlR3''@;'; put 'put ''dlQ0djpTZ1MkfnYvOjQlbypmTFMrSHt8akpEOV16cVV5UEltRlBbSHg8a2xTelMkfFJbRD1TaV46eUtZKFNfUFYmNSJpRyh5fHxhWVZDNnIvWCprfVRkIXN6cGNEX2FNYVs+bDV6R1I0SzAsNGI6QHMlcCF5dHh0Kis8WXM/XUNMaXclR2YmQzI8Km81WEltVTZ+XmVpYEM2WFAlLnBiYFtCdU9A''@;'; put 'put ''IlYpXkNjTz1ENl4md1svfm5+TH5LPkclLlQreFsvMjJmNy88PWB9IiVaYlRoPEdnUihPQm8/fTZ0OWdCS3hhfkk8blZIKit8XiEyKCxBcUg+LkQyLiMsfShSNVRPfj9IL281PzBkOmFwIy5eQzlnRHM7NWw1aylQOWJZMHtudHt6K3xqZCxMN3VFWVlGb1ZQOn44I3ddVHMsJk9bP2pPa1lgMFVI''@;'; put 'put ''ezFjeHJldmVabH4wPHlKfGs+SHNDezFZO0NEUU00QTgycn0jaDo7IzI4b0RpZHxWZl5LTWNoO1U5bkNrVzlkVkBUYlV5WTI9TDlvdSpAKF1NVHYueytgNik9LzJiI2gua1JNPmRVK3B7b21VY1tpPiJyczU1bzgwb3siakEjSn5nTV58YntTcTxdIT0qPGEseGZ2d3E4ZnVYMVBfKWY5cmIqUkdl''@;'; put 'put ''Q21WUHE7OEdPWUAwSnN3PWRddWVwVmgvWnNtenNuTFA3OXlRXkV1eTliYGc8SCtKJE00XmJtUVtuMCxHR2EpIW88bSRjOz1TcCQlaWEqZ008TSg9SXtgfGVyRXtCQj8yTUshWjErPSJnckpYMlh3OmV7LzZ6YU4vWEA3MnpyLEsyOmVfSTB2bnRPIWVmdFVyRDx1ZWpgZHZaYE0sTXZaVzMhcXF7''@;'; put 'put ''eTJSVyEldWouUlp6OXRdcSprbkxVYypYO2tUV3c7OncxKXg5NFQhST9LUkNuPjsjeS4zajI5cWVlPj5lYTp9YnxeSUBKIXA/OlJ1NEE1YlM7ZjZ8Xn13JERuVSUsNlBlfSMrPXhQVlA7PHRndyZCVCpeUkY/fTopJmMibn16fjx7dTosNTlkcCM6L15nT0BeNnJwZDxEQ3ZdeElCMlIzWF15K3Z3''@;'; put 'put ''TF55WCREKHlPXURIQzlMfEBzQi9MOFsoIyxmYi9UU2skNlhuQlY3SzdRUT1CR3RIR01gbU1LPiIuOVo+XzhrRjtHKmosUyVMXiMxWWMhSz1DOzc7b144WHBqdSJyVzBTP0E0IiFuZnZQbEhebW9sRjspbHVBaXlUZmRmWSV1Y11ofj9nfEJgZmghTShCa0FZPDdBQStKKlJJPj5WJiIqXT0rbUc3''@;'; put 'put ''JW45OVhnTzlpO1ohKFRkR1gmIio2VHByOGEhKnlzaipvclNCYCVPUXI0JTszOXYoOz1+fSZ8OzZbIWA7RygwSV5KTFh8WHAqPEVlZzxpbVY1X2Bfb0t7Slc3elVHeUBwISxpaXEuOCxMUn1UTHRRVnZHc2JXe1JXQms8InVMdWJde0k0aVVLJnddaDU4UFtdMzRLSS5sP0hWUmQhY2dIQlUzUEh8''@;'; put 'put ''S3dGQEV4ODgxR0w3YzJEXyV4KGVEeE5VRSw7TXEzLmRVY1tpcWYmZEJRQVdUJnE+Pjhib0Y5T0JTLiVrbllCUmpLK2JVfUk4dFlBWkthPDNdaihHIlFNc0FBRlM0PmcsRmhEZ0hdXWsrK0AiQT9PbiVhMlU8OntAdyMyXkByNW8oQCQxJlRMZUFBcTpRbz9icHwpcXhPQTg4SnovI2MuZVMkWDg+''@;'; put 'put ''L1l7KmlCXjV0OGAmeyUzZlJWOTAubjtgcSF4bDw9R2VMckYvSUd3a05lLCNDWWkzYyVqVyJDZzhYMkZCektTMl5xXUJLQmhZW0djUmI0NXFlY1NjMzRKQ1o0XWYhV3lIdWwpOXUxRTJobjxzanxSNTFKY2teV2hxQj9nM2hvSXgpOkRLcmllOUBWeitEOVJaTUZYfUxHI0A/PDlkOUhhREhLNWo7''@;'; put 'put ''TzAoKn13MEkxZzt+aHAyX21JSEskKWo1P3FLLCxYV0VuRHMpVF5uQVV3JD88SG13PHs2e2tnbywydSQ8KDREVT94XWI+ZC5+XV9MZ19JZjkzeWY2I1VmLHVFYVlYVHdTRysxbnE5XWxUe1R9X0AhMm8lMjRVNEgyJG5qSmorJj9PaHYmVXk/VH0uS3RNJVhVQi5mdiFnOTsjclNSPjt8JF1kJTF3''@;'; put 'put ''SH1tYFZeeVRRZkE8X1I6KTUrWkVXdW5AVVd1OXdvOl51X0FWRlJfPVAodDh4OW5gVGhze3MkOVRjR2xkIko+Ok5eZXR3QSRGbG1iYU0hVlsjN3A7d21ZL3JjTFAuVTcmdVhXO21AcHBGUSt6eG9fJmNbSXx4eGJdaGY/ZTBgTFtMW3tsYjImaSEwQjJoS01hVGx+ITdwTlNQV3QpW15PZ3x3dF85''@;'; put 'put ''SG97PShtUWRKTHJhaDw7WXxmc2tiTSFmSCw+MitrfHBzNnJ2QjFCJSgvIlVyY3gqJVhGR2lkPnYrPF1ta0BJcDBLO0tOTWpqSWt7SzA+NiI7dT0zNEBta2Z+XXUjV3Q+Qm9BOz5jJnVRckwuTTNgWk4wTkFFe1c0NE1IIVc0VTB2XkFudSxOVGVQU0tpc1VkUUA1SiolV115VGw6XT4vbTV5fUVX''@;'; put 'put ''PDE6ZUt8RUsrQmpAKntGVXREM0w/NCk6ZS40QH5OQFkrenxSW2IsXipMRmFBW1lEXyprPDUrS2BidDxjKk5xL2wjZXF+NV1qYDAhW0FzXnphbzViXTQ7azs6QXAuUUd1XzBEeTlfOiZOOFdbc2psS3FPS1BUWTY4e109QSk5SUJWWTB4MGVubVg5MGUoMiVLPmR9eDp6dX41JUI+Qm93Kk9LYUg+''@;'; put 'put ''bShGcng1SENhUX4vVS9LajxSW2pKUUhNbkJseFo9R1VVRnlIc14hemU0VHNzKzExUERmQiZkez5sVyNaLj0oX15pa25RVyxZPCE8TGxbKzxQfEAmcCoycDdGWXtrWTAiViQvP11XVjhZWT0pcyF0VTtUT2BJfXpoYkBANVRNbiYvMCJdZ2twJDhxd0R3aUd9I05vb09MYTxRakdVOyxbV1FQeGJI''@;'; put 'put ''XWBsUE5dcyZ0aiohantFZ2EuP2J4JnRqYm9QflBXQklPVyk/XV1nUEF1KTtCJmwqNnZJeXErX0JCe2dVTmBaYj9nL31QaEJqcVVtRG8sRG5xZixOcWlyeDsqNEFRQEpuVyFMKksjSy5FcTQ3eTI6Kll5LkMzTHAoL0BmYVtgSmtxWm8/YUQhMkNEe0NaPF1RRnQ2eXE9QCE8eU45UEddNnBESjly''@;'; put 'put ''PD1oMSkyUyU4SEA2YExHMmpuIltPVWk3QnllMUxsfG0ueWYwTXEvdDg7LiI4Qnk9Mi9ddDhWcWhPMTtMSTpHMj5BVVVzRDwsSl5oSUhaTE9yc3w3RTkwX2RNd3RDOEp9TEJLPmI/XTxeZFF4bil3TFVDY3hsYGI4X1VIXWxzMkdEey5kUUh0Nl1kR09QNElVKS9UMlQiNjg9TmhgITdnX30zMjJC''@;'; put 'put ''Y0AvcT1uRUdQellbOjxJTSEyRFVHQDM7PzNKfl5EJFpyc3ZkdVBjZXtPRVlPIn5WR3IraVYlOShLVykuejs1ODg9SnolVSUzRU1VbmV0QVR9JT1Ad3EseXFIWWRubm1GdDtBKm02VUpRMTdkIzJZW0x+Z1owKXhkKEQsbk9LPmh2cXRGUnllRFtUfSY4WTwyREV6OS9xazdCeVlyT1JFKSw4Uj4m''@;'; put 'put ''TzA4I1lBfnljI1k+ciZNJndBMzFdYD1zKWcoYSksWHxRMDF3UHFJInR+VW1vXlB4KkhNN3JbOSpdcDhwPm86MjBZeXBgVjFFfkAuMklBcnFkMHlYMWRpSmlwOjFNL1QzQng1XntnVFtETEBjPyZfIztqZmpkbmhUUlRINCZuMHI9fTx7VmBYazd9cVpTIz5AKVdkXTRnNWNob3BFa0h8a19GInI+''@;'; put 'put ''R0UsYn1MJCRrRzl7I0Q4Pj1kITZCPCZ4bGc1b2xWSmxkYDskNCs1bzRNNUl+V2AkOlZxWk45QiUmSiQ3UHpQd3RDb2gkYFEpNjtxaFtjVW5eQ0dJO11qb3lCVXNvRDNENilaNmddYE5wfXkoN0BgRCMyQjJhRmRGfCUsQ0pQd0NKNHsiRjd6UTxzOCw4L3VxWD0mXjc3JklpVzNsXitjMmokKnZy''@;'; put 'put ''RVNxVCtSbVNbX0BwRnkjMVVRWFFrIzpZKFgkMVVUITg7PDJjbiR8bTp3dSV2cUhffGRRdDR5P1JFN3M0VEFgeEhUZz5NK0Y4ZlFJVCJAPldlI0xSOXpNaHJjKFpraF46UkZKJDcrMm5GYE9vdXxZS3AsPnksODcxVSR2VTFnXU00YU1ZQmAqMncrPXk4MmYqO0Z+PGIkdkk4S3M9JVdnY1J0O0hI''@;'; put 'put ''X0NrfmE8KlY6ZzUwbzJlWF9NbVJ4XTFBcnI5KlJeUGI3cns3QiNuKTdnZyFURHx6JH19Pn5afipYRm55SkFldmJpakFCPVs8d1Q5R0hVJShZeiJTO2xfMzFQI0pyaiYmcE9RLDU7XzhJODUyXTc8aWVBd11SLDYvIm0rU0Rkcys+WDo7e0MhSW53d1Q2X3lncGQzTnViTz5ve34uekk6YigocHN2''@;'; put 'put ''Qip2NDdJQ0VuPT05JT1FMyZLQTU1XkBhYXNPZ3Jte2Z0fGc4VTZuejthP0BIWyx6anJ4OypTJkUsJWVAXSZZPyk9UTE7bW50OTg1Sl5oRm9GKkp+RShXKzxvTyxpLiskXUUlaC53PWBGKCleS2ZyWTl1fm9jXyMpLCQia0pkQTA0NWcrcllCU0B1a148MGJgLEdDRGs9LnslZUIiKz84ciVOQH0j''@;'; put 'put ''cj9UJWpuVnM1YyhBcy91bmA2b08vRlN0fF4/UyNePnNwZHk2VTFDKnZdcj5PZWdWYiU9P1VXP3BPT3F9fj14YD5UQCRBQX5VdWlUQlM6K30lP2VlS3Jodyt+Uk4lV2VxVXYkI2JqSD1NOjVYMlghcl0rPGJJLCpdTGhMcDM6KnojSlomIUp7NyEjY0hUfEVtfUVTT1lyNGlQKjJmc2VncVlCRTll''@;'; put 'put ''Vk1XPXJlWS5bXml4QWMlU1g9O2RoZmlXV1Mha14leDc5aiZVMlVaPDthQ2d4ZT4hLzBMNldbQ1VCKkkhSTQmZzUxXyR5K05EOShfbSZfKlQ7ajJLOGtCbjpmdFVmcVJJcTVoNlRwOTA1SW5PPnNrSWFHbl02PiZ1L21xYjljOT5SSllHO0dheFlOa2cjUG5WZVNUZVA8YlhlTlBoYTs9QlF8a3Fi''@;'; put 'put ''QmVmLDMvKHpYNnI7fEJHI2tdeGlbJW0kZGVWOW1wPEc7VDgwXngiamZPaXh2SzFoJDJwezkoXnh1fCModWkrQyRiJEpgbSsvOns+K3ZZMGIvZW9naF5NezxZZ35MQ2RZSWhzM1QuOTN0LGJfVmcibiw2OXFSYnFyTjZsViJ1dlliPnJlWjAscTZRZlBZYDJ0dTlWczcmLzc0Kj1EXX16e0c8PFE8''@;'; put 'put ''ZUpbYiVaJTFUbDttQ0VIOlRNMmVWQj5rVWFEWGcoOzhTO1smPStHOSVjTmtnKSNkcDVhRGZVK0E+Rmc5JWNOcWtHQG8zR3BeIS9tImA3JjJdSmV1azR4QzBnM2kjYClIMll6Kl9lbFc0anBfZzhHJW80ITB9ZHxmRFNoTy97aVRdR2RWfUZbMCZoU1oia3NwWXYzPEc+eH1uVSUxT19oYCErdkFf''@;'; put 'put ''I3xaWiFWUmlfRU52RSsvN1t1ISp2WklMIyM+YHwqRnx4b142cURBaDZFR0lZVUdyTiZ5ISxNfFZ8NE4pbHhvaiMxQmt4YTdqPGYxUEhTPG5jJWoud0g7fDxeb1dXdUh1XyhCbzxzVUUxNjVRRUl+cShGZSkjOEs+NGUuWT03KHg8T3VYfUh9UFolO2NhWllAJj8yKWZWKjNIMUohQGFYRzo3Ykpk''@;'; put 'put ''bzRAVlhWSk1RTHIpRFk4bUNaeF1OQX1DXnlidiNRTip3czcjSko2aTJ9c0ZsXk4kZTYlcnoiSyV8MUtEZzwkWXl1cXYsMkYrUW9WQ01GV01gPF1mc1QsVTd5VTg3WCxCQCo0LDVeMTpnYHtuJHFORH01RHYkNHljZFtsOSkvN2Y3MSN+ZG43Sy8pcm9DUXlbSUdfby5+QmxDYltNKXlDcC9OaHxt''@;'; put 'put ''OHRCb0lkT3AkOUYsdytxIiVQNXtXY2V9OFE9UDgxbyw5PXxheW81JkZYbFFrNVVhcDA5ZFFYOG8zWFFFNV9pYzFZYThEIUV5dFgrVzpHWUUhOkMyfFB7ZGgwZClgJU8wQHU5WSM4W2JhbDN0RVBXVGE3ZGd8WWM4Zy5oWVFmZU1WR1RMVlssfWBEdT8vYDJvR0I/KFtYSS45Zy9Ddm5zRi43KCk3''@;'; put 'put ''WjYhRypDKj4+LEkhSlZFbWduMClONn0iTEZHQlJ2SkhLOXxkUUZSb2ZBUWFSRXNkdVFVWVo1MkJ1eXNFfTwjQExqcDM1b0hFXTxrU2BZb1BGKmtBQUFBd0FGQT5XTEM5RipNUmZeTFdwOiVuNHYoZ1pQYUYkfU9TSFV3dk8+aWdFQ3RsQkFBQUFBQUFBdihaSnYuYzBzfEBwRUZiOjs5REpSQ0J5''@;'; put 'put ''TWMyU11DIWt8JFtydk1OMXE8eXl1fj4mJGx3ejtWPiJmMnVCamAzdV5VKyEyaHFCUy9jPiU5IVJCdGlwa3VGJUAoYlZOLys3UiQ0QUJUbWdyTUwlOHlMUFsoV1o0ZlhQbD9kbDUmXVlbQzthIlt7XUkoWXdbM2o2KHBISjU8MVovbkhHei4xNFB6eiF9PXczVSZpYV41RTA2T11JK3M4L2l1Ok5o''@;'; put 'put ''ISo7eGpDfF84KlEuJFdUaSVLYFBMazRvSlMjX0guJiZsPzIlbk5YUj1iTyRnSSQqSkglVlJeMSNlJC9ZTX5SNnVzTlIwYDBGQkw5QldPT0dPTkoyZltiPlUzKUxrQCNMMGwudytXOXs+MnM8TjR8ekchdG52Plg0VSRsSFQ5SCFrelpESnIsOWx0aioscX4vaW0oLyVaNXxFZkJpcFZveSYrIS5+''@;'; put 'put ''ai9wM1dUY1BfMFpybj9HJG5WRTxIQ3RCWTRWTUFJRTx6dWgsZHxHei9jM1pkOn4rXWQoPnBOXSo7Vip9fXpmSjRmNFZvK3VxPmx9cXY8fDZuUFJ2S2kzMSVLOVl6L353Q3leeyEzP1FjW1pvek8iLDAwPVRFYiVAKjhfeyp6dmtpQUVUYV8oQkNnN3N0ckBIOVNNdVN1TnFzb1F0UTdxLihxQjBk''@;'; put 'put ''W2VrazR7O1klS2dfXj05bU0hWTJTX2F3MncueTpFdVszVF9HcWpAOmd3ZUs4QUM6Qm9uaCJUfEtudyhedC8pe1ZnNDcqe3UwV01DNzN+JmAlUXo0NGlQLiFPM08+LEtkZn4+UFZlTUpXdnlqSDlAKDMlamk3Z3R+bGhwMV5RUU86Oy5XYG5ecDB1aDg8OFEqdmNzKEdwTi42L1hxbS5mKldRVUl+''@;'; put 'put ''ZSp+aElad2Y/Nmw0NDdwMk0rITc0YEJ5V09UP1RtJC46e1Urc3N4WGBMPlFHd1tiLEJeX15RPV17L0ZLK1ZLdilQNCZsYyk+KjpiUyR3bV9jRlVsK3VMdTFDe2wsLkVIVUV2W1tsKlBQXnxbfkRYfWAhZDUpMmtbRWdvNmUwWVVDcixSWXgjVl5wbCtjYkdrVWhxJV5UamBZSEReLiguejpILD82''@;'; put 'put ''R1pSeFRqQ1lGLFREK0p2QzV2VWYuU1RkbDomOnZCTjk3UF9MdlJDU15oVWtfOiRqaHNdJXRCTFdveFFiUDROWjAwdHg8ODg/LEBTR01zaT51JWlQdmwhRHRVIVRgdjR1Yj5DMmskVHg6bWVwXjZVM2BeWDhhTlJGY35ac1ZfVyV+P2hCQTFNSzBMKm9vajQxVG1ORW5xNTZTYXhOUWxPM3srUTxZ''@;'; put 'put ''XShNfFI8PlkwcmJYSVdHU0E+NEZXWEorc2xdVlcpRHJme0csOixsWXdVMXFAW0RHSmVnQ0creXVfSnFkZXQsP08mQHN0UkNGUyx2KHduenpEYzRhQ3dkR0pMQiIrVjhdPVd2R2JZeWkrMHpBZ1FpWV9ITnpBNytJR3FbNk9UUHxIK05oPig4OTo0fkF2N0xNdSRuV31GSUx8LlghfnpxYltqa0t5''@;'; put 'put ''RUFXN1thU2omQUlFK1FSNDEsSF80Oyk8ZTMsQEBiOWhfey8uTlh0ZTxkSWV1Qz4qPCNsfkN7aDNtKG9FckBnalkqWlRkUjV3VzcuWUdNPiNEUXhhXj45aGY0QnF9XXYvYW5CcVAuNVlxcEdHTS5Oey5lM19dcElJWz94bTsuJmo0UT8/KXtpWyJkIVJNXXJ4cmdZeGo7K2xzZi82djtQNUxtZWs5''@;'; put 'put ''PTl9Ul1qYmhQSVczY1Z6U18peCZiUlAxOUUwUVV7N21vRH59NU8sJipQfWpoOC9xIlA0I2ljRUdpOCwjTFtHOVl4b35AaCNdUjY0YmxKRGY2USElcCgsfCUjOVR9QmdCby57XjtTYUZ1amcka2liaDJrWm5JMX0selZpOllpImZyPlBqTjleLGoqLzhJZ0N2PyFgbG0qb0I8bVlPeCJFWTU/TnZp''@;'; put 'put ''RW9US2pSfi5JTyt4JjtKLHo7enFgK007Jnh2a1V5RHRvdTE4bXg9ZDtpc3Q4YSNYXTlwL3o6PkJaaHYwLzJHZztWV0t5bWt2ZnksRSw5OmdNfTV7cVpGXX4oMUYuMkBqVEtiWGBCN30oP3U+UCFGYmBwO34/fmlEeCVjJjlmdFh+MG5ENXorXmhBS3ZRQnZ6KVBgOEp4I04yc2ZeMVhLYC5PKS9m''@;'; put 'put ''XUB1MGQ3dT4mWzFDUWcyYDFeb2xpWTJWS0R2N0dGKk9LL0lfIlo/OkVIRD8/ajBSU05ufSUveUtNcWUjWzZ8KyRjIXI4PmxrfXFxa0JqJldZdkVnPDt8dn1XLjg1VkRYQzpaRVhUZ2NYdiFNKTtbMl5ZPX1fWzk3LkBXT1tBQDBwK1F6MC9WbCRyOUFkRiY+NGdlOG9mUWIpakgiUT8kM0hoSzhC''@;'; put 'put ''K1hsfSgvOyFBOm5kVVViZylaTSxkW2s3RzgjaEQqVltaUn4yOyojP2wjdCVfUnNzI3JLRk5bIW5HMCsycj9dInJTNGdmVl8pJjhHNz0yZnMueHlFY24waTIrVElFaSRCdTN9dHV9WSZUNm1IdVE0fW05TiUqb2Mib2tQdyhRV2U1TnNNK210I3BIN2E5M2RyVDpNTXVqckI5XkpoZHc5SlhALF4o''@;'; put 'put ''OUJwMSwpXWp+eFRiKihlYms+LkR6Sml2Y19uQkxTTyl5Pig2eHhvc1FZWG9RfUtPK0MkfSpIKWdGbCpuOlR+WDxmcmQ+PSpaSzcwYGxUKmJfNl5kOVhTUGJgKT9yLDs2ODgsMH0zeGlfTGpHP2JZcVhUNERHL2h5aHl8LCMzdToqaS88KHtFYyVzdWxrIWJmRDYvLGlafjQwWmtBN3E7WC5zLC9y''@;'; put 'put ''WmlUS3N2elRjKHJedjxGWyE2JUgocnduPGZBfX1yKlJCdTgmZEJYcF9DSEJRU31Bfm9GVF9ebXVAVWl+QVdIenNTZXxROVtoWGdSQSxCbyw7bWxiZj1LdCguYDokbE4hVEErXTRqNCRqXTZNVVAhczZNXVZSLlNOPDxffihNRitnY28xLkF6eXI5PWVoYmh8YTNfPUZwP0pLfnciZCUpPCpraX1n''@;'; put 'put ''UGxgXkVGUkVMJnkwXjw4dl5AZmlvRVNjUm1yM1MhN0MvQFB1anprTms7fV44M2N3PS93d3RQQ2FxclYsSTVfRUIlKTRbcGw7ak9PV24obHhaOVtsR1IyPHNGZipVXlpKbio7RUheWnAzTyJnNDxWeXwmLi93LE5dbiV5QEp8cCM7KzE3WmxGb2A5ZTlgajk4PDxkZCQvLDFCbkVsXVdgVEp4UkYm''@;'; put 'put ''SCY3bz83Xk1sPUpSO2AlK1Q1fTEoKCRBO2t+bj8oVm5TMDB0Jl8oOChMZEJBIUFUQ10lZ0J8KExKfW9jL2YhNnEocVpwRS5NYS5sSE4kfGcqb1JvK2t0QElxPEhPfSVER2c7NUFAQmBkP1pCIyJhaXsieTc8SzdiV3QxYk8iVUBublJQQjc0aGpMZldSIk9xZmhFcSkrd0khd0Q5KV1EIX42K05y''@;'; put 'put ''eChjLk8hWUQ2MV1RS2wjLzE/ZjQ8Sm5GUWdCUFFiJUljN0QjJC42RHJVLyREKHgqRC4oV2AmMHhoTGZkVj1XR30oXnM3KVlZVGsuNnU2LH5vIWFAYzMlaClfNUBIJUowb2REelIuW2pHVEsmZCtwfjNEXkxsaiQvXTwxRixhOTFNWjBSbHoofVkrZzN9MWhhY1ZoLFVhKjsven4wR29BaC5+aHIq''@;'; put 'put ''cnt7VS5yVVJSZ2dBTWpVYF0kWFVka2M1PSs5UEVmaW5CZXtJXkpVX2lmZiZhT2NIPDUvJCpOcWtGOEcjSndjRkxpIytVfl4oMWRdTlsyI0VtNFNrUT0wS115KDs2Iz1Ian0lV2sxUWZdfSJYcltJViMueG5gZXNiZ2svQipLVkx3Mzd5Q1gvOmRhTDg/QGltTyVTVUpfcjxWYjJNYHQzVVFTQlEz''@;'; put 'put ''cFR1SytGLiFqX0slNGM0ckg4fl5fUCYmRTNJdSFGM3MqfT1LaEBlLFFnTjhTTjpXLD5dVixNSGpgI3toc0BtWTlrTjF0Q3RgWFlhcit1Und2X2g2MGFuREZddWhNKGYxcmNLUjB2On4jd2ZIZmRie2gyTT9TOilsfXh2UEZtZEsmRyQ6K0hsWW1RZUJQNk9LYks6Pm5gRz1bKGZeX0hLP2YpbHlx''@;'; put 'put ''UW5bTjBsZkwsI2I0dTo9d0MoN0xLYlhSNTVUZ2FDdWtTdH16X155MEpWPEUibExKfHpyJkMpWFh+aHg1RV5tWEM8W2tBZyx3ZTxbS1R0N24jaFU2YjQuMDhPaCJNXVFdYHcwYjBSbT9aK1d8YkZ7Ul49aGUhTj9fbUk5QE0vQ3ZQTlYlRElMSiomXl99SEZecjQxVX0wVj1obnVwVDRoWiF4ck9I''@;'; put 'put ''K3FOLiYpNGxZK2dpanUzV0JsKXFRTD4/UFFuflZ7QjQ6SS4qempOSGArZHhsLHgxKFRHdlk+PyUmaCxpWUZLPlAjZy9TS24oJGQkKzcpcjIyOHwrS2UvRWZTMlkjflIvJWt7W25xZmMkTl1nT2NsPVdOLixePTY+SlU7Y11+RGUkN2UxQXdnIjNnRXAvKSoxZlFyQGFlTlJffiooeCR5bDd4c2B4''@;'; put 'put ''KV13N0QmZS5MZXphLkw8WFtHNX5CJWNWQDB3XT4hfUcwbS8+XXNSaHw+NG1zKSZjJX5OYTtpUiY2WCZXdFNnMG03fiYyMEl3YC9wSkQoUUxCOjJORmtueCtUV05Fd2JMXUNNbFM7SVYvOjt6TG4oSyQ6fSlFbD1XUU1ybjVqVFVbWFl5MHZdZilpSCY8PyY7WUE2RXQsWyQ5XVgqQnUqemR2R09p''@;'; put 'put ''dSZAfWFATkgqdk59emVDNG5yOyhwdFk6eUFBMV1mNFFGbkVibGRGfnA7QUlEeng9aXBuWUU4e3N4bXxpUkRpTWZwTmpZU2QsVik8T3xoViVHK2JAO1EhME8rUU5RYjxLYk55Oip8RTpZQGo5L0pAd1RFVWh9ZXtxZWRBdSUjfEVCPWBJKDRuPEJyPk9OQ2FiWEdsXSpAWzJtLEVkP3QxQ3xVcmJQ''@;'; put 'put ''b3F0MWR7RntBLHNDZkAzaT4pLzMhUGdqd2ZwZXssIX4yVF89QX5CQVclblU+fTVoaHUjPVY+KTp5LjFjdnFGVDxKRlR7MnJ9UGcucUFiQzVLZUxGNGc8biU0Q31scWEzd0MjPHttejlEeyRRR1tvV0RaR1BGa2dbfHJCXXF7PUBfak1ldU00XyU8KkZVIn1tS08kdE9nJjQ7cWJhTXdvRFFyYl89''@;'; put 'put ''bXBkRzAuWUA3b2wyNnthUlZgfn5UODhWcmgpM044X0pqMnJtQmIwbV4xYC5ESH5KS3ZEcGhJQEtoV316IiVUbSJJaUMrNUwrbHlzdEpoJEpMUDYpcHw7UiF0KG96ODk7Mk80QGR9W3wxSmtpeWNaM1U6JElIYkRtMTcrVGFjJVVLJnxRdkRzaTtkbFM5SWg8IXhIeTxVeDFuWXVYa0JEITNOWl4s''@;'; put 'put ''WyxAVFd5I3hTPCs2fWhwQWJhI3VUZUM4TC40ITYmckY7KXlPcT1CXkIpV1cjb0BoU3RKaSk8VksyZkV2dEp8eV8sMGJRYXBrZUA9PGI/ODQqeVhhZWtJWkRFJV16SzVAbGZoVldKPjU9e197KXAoXlV4d2ZEeyxCV0A2KlN9Kl40Sj5CKisvPjZPRSkhcCVuanJSaEJsRD9wV0REX28+eDJTLHc8''@;'; put 'put ''Y3IveDN4Uz4uJF1GRSY4XyQ2ZStDfkBLLG1WNTB6Ij1ENlszWz96I3FGc2xXfTVzdFcoPDFvKjh0JXVXb1lVfD4uejVYXiJkPit6bUhWZ15FMHtsL10ibUMzWnJhKD1JKChKSylaajttXX5sQUdkVW82bCNhKXc1PmtVJEJyb0hFIzgjU2AidCxWPiI+RCFqJVJ5b2c0OiI+KWtAa2Y7R3NkZE05''@;'; put 'put ''O35jQTt2Wi82TEVQMk5YOUVKWE5rN1dYLEo8azoxVEY9XVg2JDdscEJXS0BbPm9FI1VafHFOdCk9N3YqcHd2aUFPIiw8QlFQajJwTTA7PHhran5JTzB4VWQmQ3ZGfS5BUE1nQXgxPFVse00xWFBRVSlMUk8/RTZjeHNuel5yRTklP09KPFJiInBDZjxKWSQjUlNhTVhgLmNUMCYhRTt2WGF0MSU0''@;'; put 'put ''fClMP35eM3ZvVm1EdUJsZ1V4dkQyQSs4TTlee0RlS3c6cXI3ekM7JGxoOWN+cjNhPXFLKCIyamNqMHlyfTNHZm5TfmR9aWRabXskKk1qMHRKIzlaLHdyTFImT18ieCtYN2o4d01LeHM1R0ldclt8TzZhfiovSHxNVXZYa0BrM2tJJTpjMiE+Qz9AcjRBJS41UF8/N3VxMURBdHZxenhVZXhuaDVP''@;'; put 'put ''O0ovKyRPKTd+Si9xJl08JjUwXkFnMC9xZi43T19oNE5vI34jPEhLLmt2YmFMJkgpIXRrPSRhTjFPKXdFQFgpT09qcGIyU0BUP2hUK25dbVZnPTB6c35+Ynt3aCp1Q0o5PWpQQ189NH1dTmdmem5RVjJRaWJ2RSQyS045TEUka1lJdXciNkV3enF5NWZIfV9JKmJbdio9KSVWNkhaa2t+QiZXbjkq''@;'; put 'put ''S3ZtSHgjIX1NZm8pbUV1UWlLTmNeK3NeaSx5TE06ckNBVnFTaGljUTshcUk4WHErXnhFRHdYMUllbTp9UHVOLG8lX3c5TCZhVFNmfWBOOGdVKUApazxLJDtHOEBGWzEuXUgwUUNJKjB0ckBXJTNqK0p8ZDY7WkcoSTZdcHpbaH1xNFQxYS5UWSlSaDoqN1JoRkNkWS8paEVjK30mb2Z4MUkjfVAi''@;'; put 'put ''QX0rKjR9YlorOWglSH0pLEdBc0dLZHFpYGVZb0tBVTIhYSoqJFQiSXNAUUhxQ0NxJWpeMyU4PEFxWStRVD42fnM0d006YVVkUnV+M2U0d1VFR2tCLHo/OmQ+WlYwLy4lUkRIJiV0b1UvOmx5d1ZAM29DZ2g4bjBTdWBtcmFCeE1VQnJKaEFnIj1zNmR3anVaI2tXW3NrRTxuankhWntlRWByRyJR''@;'; put 'put ''NH4xWypGZzRLNnJkVWN1MTR2eDJmSDdyNnUkU2xWe0QreSNvfmsxRn5RJmJyTSVnMk8hZEk5L30+L1RtbmA/TXRVNC5LXz9FOlEkMFtoIjpKZ1N6PU9TKSNFPndXL29OIU1+flE/USNXNGZgND1XXytnWjA9SSptR1AxK3Y7b0U6c1UxN1tDXUc4Zz43am5jcDg+Im4+ZFJPZSp3fkUqWmRTdGJL''@;'; put 'put ''ZX1dITFYNF85UHteXypRaWdUY19rInt+fWMrfENeZjF2TDx8SXdZI0xsTC8/VipLaWx1I0tZSnY6dnAqQz02OVFiWiZNJFVYWD4sU101KXFafkc1els0blg7ZGd9Lzs2JWx5ME0sb0owZ1lOe1VtVz9RezU0fTQsW1s+ZnckR01AMWtXTFhYYSs5ZityIWczTE88VDNFbWxjR09RbEZMI2JDL2FO''@;'; put 'put ''RTMhS3hsaT5iO1ZZNGJNLmkoPUklOUlBUS52RnIwVX5IN1U8TyJufSUlP35NSFd9YWspUCk3ZCJLX0FMS1RwKzF8YiU8MHZlbDxNL2Z5MCxlZjNAaE14TTUjIktEazNoPE5yPVNgcks/T1JSXXNfalFVUEJNLC4xOCRxTH5gOFUqXj5lSGRRZWRFZC9HS0Y5JD0waHh0NCZvc2xGXyk+TzZaRTly''@;'; put 'put ''bkhbV09yRn45cClRcWlRIX11O09MQ3VmKGN6bEhWeF9ZSjxGX25aLEZ0X2ZPWSIlSVFjM3A8T2goI25eUEhFSGF9Xk46QHJEQjBETn1bKip+Xi92UVI3SXosWj8xKS40e2clZ3VOdk9JcWtPWGMyREJiQi9COXE4eT8qMSVbdC5+Z30iJHohSmglek5bfTQ6P3JbeXg3d1Y9O3xybGM/RFJWbUcp''@;'; put 'put ''I3QjMX03RCZsZjxOTHUxNkZMUXB2OERkfC5lInZLQnBTQ1cwKkg8WTNLZnk9bF8/ZjYiJDQoWklyaiNZWzM5Nm18Wno+NS9fV0g9SzkyfixNc1R0PVZufSQ3K3N0Mn5pX3c+RFteOT5nZGxsWyVSPnk0SypzbUEwZ2JlOC90Om9aJXR1RlhbT1BCVG81MXtQUC5NSW0wWWE9KXVwdXFyPCUweklO''@;'; put 'put ''KnRoVGsiZX4vfXplcil+UD1Qcj1JNjw8Wzp8ekNGIyF8SjEyMUdmTjs3XjEoKnZrSUAsc0J9dUY8e2x7bjJ1aUdoJXhzYHtYNEFJPXhpU1ssckxmaF4wR004SjQvJi9MXi9jRiROI3ghcW5NITshRS9HRXZYOGA2L2pWJVFnMX46Vm1NQ2lLSko1eVMmWV1DWylLSXM0RiNpciV9W2EyR2s2ak1r''@;'; put 'put ''W2xmYjBoQHJiWDh3P30/Uz9OL2c0XjdUeGR2UitAKHB2ZyJrVzdbPCxOd0AmZklfMW9+ezs5MTN1d0ElLjVZPGpWQEgsOGtXJFZOI3hXayt0a111QjlTRFY5UyNBTF16KH5WVWtiPnI7bE9JRCFRYEF6PTY2MDg+eUZXRTsiYkM+aVF0TT9MNGptYyhyKTZdQk5AUnh7IztPIi47b1daKSVUPDJN''@;'; put 'put ''MDtGRkRWMzVoMTZSZTtCUl8zOzcjWHVpPl9EUkN1IS9GTEh7a1gsYEVEdyVjJWMzUzM8ZVlVa0wqblZPK3JrVFAvU0hIfSZyd3RtQzcwTE9bcmVpVHlxSTBaWzlHXnk7RGZlJFMiZnBDUntNV0dCfDo9M3p4N1ZrQ2NeayJCSV1aUiNSYEpCZGdZKlgqT0wickUlbDpoVztKKi53eHtDbyMmZjZX''@;'; put 'put ''b2xVe10lZmpFfDc6RU4zbyNWNm5vY3RkKiNzUG5kVHo0KnsrKGxnTVJxfFp5WElvNT8jaVRMIUtCc0NfZWRiLj9OYVtFYnoyckdFNnA0aWdmUmZkMXlpTygpMTNMP0Q3QXNHI0d1bkJpQk1VYSRpMjI/eVtmQmFbRlcuK2A+O086VClRbUtWWnJJRlZjZD8mWnNoPT4jI0tGISRQZXt4dmc9fjkl''@;'; put 'put ''N199XTEwdTBieWtbKH5oN3EudlhCPGhMSzZwWVR6TW1CfVliXVZJWm18ZFdAPyZxTkQ5NT5hMHg3Lmp3ZF1gNjlraENpOXVER1t2NGh0RUZHUFdqKnshWllRZCZpQUxdL190QkI7MDdsXXcoNyhrVWYocihsNmZoc2Y1OnlrRmVjSEZnO0dWMX5fNUxlUUA8fThzQVovNGBSNjB5bF1nRXJAbWNu''@;'; put 'put ''dEcqIWd4fFhVXy5TMVtMZFJIRzAvQHliKkk8XUpfK0l8JmpoV2pgeDs+OkxsZy5VZEV9VTZtXWhoTGA/d25kdEw8T2RXM1pVYW4xZH00TXtPVlNlOz1raTgibSNeYyVYXjIzNiR0Z0tDeixwdyxhVTAmW0V3NHl2I0MkMCNlJV1wPVAjOkBkeSFvbnp9Pz8lNDxmS2ozNFR2al1lL0BoUmczXUY2''@;'; put 'put ''PXIjX11MNjxAWGJbRyw/VzMlc0tnZVF3cCVbOkhyKChteDBlJVVgNHoyZVtYWWI7L1lPY3tsZ0lxQ18ubGxTPkpgIk5eUkEvXWJ6ZzthMHEzb3AxSTIjfGs8TUc+PSlpJCR5PS9RcW5JJm9fISUmTEh4T0NPUFsrWT1sKG1FRnpeeGclM28iJXA9eHl2JHlJJElNX2ZJTW15V083enxRP1RkJVNq''@;'; put 'put ''QFNqe2U9fEhnc0dZXm55UDd7eHo6SGkvLH1mU0I+XlFvam8sNlgoYFROcVlBRW86VXhhSzpxUS82WCpfUVA/T0k/OU5KJWRzcW11TiVxVkRfMk1AKUtsI2xaeFFnfU45X3s8RkYpYToiYTlYTzE2SWlZWkZnJXBHMyszO1AvIVcufFZhdXxfMkg6PEhRUFlndDVaQ3hTZFgoRGJ8XXZYWlErXXlB''@;'; put 'put ''fUVpIzJITT5AMkhjSVswSV9AL3xFVWRAJXpDfHpKfncuUCkmXXFxd1QzZHNPYXNwM0JAYiZ2ZCpfWH1HTCVmIjA6eSk3bStFbm9eNHFxbzlqSER7b147enssTV5lMShBKSNbdkAuI08rWEhtMmVOR2tMUSxlISZfblE6MGFPdD11dUV+TTVHS3dnN15KNF84U0pSTWlTb1JXPT8ueFkmYnxrU28l''@;'; put 'put ''SVFiMUpYXipvOUc+QkFUajBHJmEpTFdxcUkwSDM6Iz1zVDFqRG89QGd2JWNwQWtSXV1fXzZXdWRZJXJtalg7cEZ6eyFqLio4bGx1ez1eQGtvUkc/I1pBOj8mR1dVfEVnWVtRdzV6YFFtfGlXbmtAWjxCcCM8c1ghODZ0LyNlKU0hSVVpVDBIc3dyVWVzU3BTP307Uy5scF1pdUFocnpCVmlCdlhm''@;'; put 'put ''cDFSZFs4JVZwSzthXXI3QC4xQCtkK3hSPUwpNjtqbXtwUiZpKWAhYTB9I2teQVdhYlYrSTJTUkN2OWIwVnlPTzI1bHQ1KGA7ZW9ITE1fMyQlaVtBY10xRjJCeks7PkQ/UFt4c283c25qXnlRbz9JL1duRSolc11lbGRQbThEWlEhRUtfY3RQNFB0dGsjaDEqWlBvMmBDeGtCfjA9Wl5DSGVCeG1k''@;'; put 'put ''PEAjNW9INF9KXmxCQUR9XmFHZl13L3lVJmg4biJNfF1eMiRGYE4pa28hTExHcylOY1EpPn16QSh3V0lhOld3MyU0WlQ2RShvMltBYlJ0UXlBdzp1UmRTUC8vRkxmQntMPmpDdkxydDdNWVpjbkNBSXN8bilwZ18jKWc3O1lSalR7T29QY25DLHNSdi9Gc35oKXxaVilkZyQufSozUGk6NEFtOUVS''@;'; put 'put ''UVUmNFAyYyVhYD8/V0hkNVlaMXNabm9gZXgkWGNDWU9NXzwkc3NSdTduMiEyc3N8SX40fmJDRCZ4UF8wP2lkW0oidE06a090cExhNDYsdlU/bTA/TSNJWnxoUzVgMlppUyxTSHVERlBhMDZDTjA+KyZzUSxbaiYrKW9pTSNMTGE2XlFBZTpLRng1IkVkMVQ1XVNtJExiP09sQXQ0azxRJitSckd7''@;'; put 'put ''R1Vva0ZaOnlnMTYoMFpybCNKZ0xzei9KcWpAW0dONkxHdDQ3IktpVk44dSNSezBqIyo+NTt3L1lueUQqQDtZOiMvQ0xAe1gyIkR+WGFIXVB6KUxXay9XJXZJN0BOPk9JM1ErX29yZ1ViZV1IQyt6JjIwcHdocXtBNEVxJDRzZzFaUzMrR2Zod05NWk9IMl5+ZjExcXxLbzxFZSJHfSFIRCxOWXRr''@;'; put 'put ''UEF5YnlnX3x+QCxiazJYMnlxR01YYDZuUW5Veko5MEBvaTUiIUpJcGFwPkR2MlovaT5IRVJ3UntCczhOfDhlKm5hM10udj5GTC81PEg6KXN8KzlkRTNUPHJRLG5faTBFRjVjaERVP0BwT2lBUDVTMjA4SF4iUyZ3T31bI0pLNktPJFF5UVpVSkJyNTx5NHJlR1ZvOEIhXSwvJn5RZCQzNk9rUU4v''@;'; put 'put ''YGJlRU52NXA6TEF8eyZOUiRAWWw7N10+fHkjWGFrS3xhP1ZNeGVkMm42QnQjYG1YYlA9S2V4cF9vWjkyXks2Uj5GUWxiSV9pW28zcClDKWswQT1CL1R5Y2RdOENRPH01Pl98MSo2NUYhOnhTWkJYSytEWyIoc1s6SGFHSFEkTkEmTn5iUjIkWUJtQkE9YDVxRTsmJVVBXmFRS3lnaUJAYWJxUTEv''@;'; put 'put ''VXZRWiFCUUc3ZjBjT1QrP3FQfkpmWUNUaUV+VUljPnw7UTA+fjgqb0V9SElsKTdeXT5kNENPYiMhfG5rSGwjRWcoMlokJjxKU100ej01YllSNXUwfGNTeTBkRkQvdH45YjpvRittJioiJHMvfXQ9Xyk4OEo7dlU1XStQekchXitfXXJbVmVFc3omVEImNk58Jml6bk9vZjJZcS4mL1ZzRE9JLiZY''@;'; put 'put ''VTQ0RXlDVltPQjoueiVjdy5iXiZ2eUVeRWZBWCNxKnI3c0NeYDVEUE1jUCUrMDtEWWx6VHFVaU5rPTx9bzdyS0EhY0h7TTFgRl9KW3lOaTRyNVhALGkqYTguZzo4KDQjbWRdbjVMWkBiQEp0eVtxS2pkY0xOTFJvYzpRYTBgWT9zdnoyO05ySEJNVX1qd2l7Yj89aFtFWkBPRStCYVtMWkNubUIl''@;'; put 'put ''LnlESD8oU3c6RWg0Kk07QUdKVTdTeCN4YVl4dmJKSEVkWUVeRyJ3Rk0+dGo3M3RZI2V2MlEqfEkzZiUrVWgvXXVqYk8uSyklV2RucWV5cE4pQldBODkhckwzU1M9Milsdj4+L1dNSjlISSg8cEEjTkgsbzQkbU5AKXVZTFYuMEZzQyw5eFB9ZnFeSTB7NHNGOHBFMFFpMFA7PjtxWnxaQG83WSMk''@;'; put 'put ''eWJrSj4vYW0sblczeyYwRU55cEY0TF56Xy5CbD5sMDVbXlVgbDciQmZ7ISt6XixQL2cle0Z6SzJVWm9qP3R7Rnx1QChrUyZxMGtSSUIpOnRlVUp7bEZ4P1gyVXlqQF1LOUhqJUpLQmZtMy8wKTI6SFlIJmtkMD9nfUkvaFBgWEpnKGQyMWpsXnRyVUxyalJ3O2h9QSUwRSNIXk8idHA3fGkzfERj''@;'; put 'put ''Q3BDaUwoQTdnOy5IPkpHJlAoRUFPRVB5M2YpNnxkWnxdXi4+R1BRJS4rdys7QHpoQ2NEU1lpbjsmZS8yJE1Zb2JRJXUrNDoxV1cvRl1Rfko5KWNvS2YmIWBAdyJVZSslaE8wViQsemYmIWEpXSgmNi8hZmZ3WXxeTWo6KEIvUD5UNUQ9TDspTnY4aEFuL0JqJHJrOWwvTm5NZ0lwdTlNZktOKEM1''@;'; put 'put ''KiE7YjJPe2JheVpbVjJrM1hWRzA/M11zZE17XTBAZU1kTSRtOm4ueVk6Tn1IIW94YjUyJjpVVyI0WSkvd3VzMl9gTThASkBCXllrdVdMSl5oK20+b2h5cjxje2NVc09EQyooYUYvKzhHUWp2MitieSlRMXhfTjA+JW5vcFovKEBtIU93bzFjQyFydFIuM2ZsP3UvU3lYZGxuP0M4NGlgIkUkLHVC''@;'; put 'put ''V1RlZUUhNSs9TEkwJUc6ezI7dClLQDpFdzxOaEFmQ156Ki5sfnpELm1dTC5IeVRiWCUqPj0qX0lpJDAjPXh7ZStsJDNpP18+WGF3c2UmWFdIeyp+PlFUT1MsTEdtOGxhYDVROytpbT8mYnRafGc2NFUvNEhgQGpzRjFtWUtXImhENXA5UzxFWHpKOEk1N2ZSUnNMZj1OPnBaOW4pY29HWWU5WVU2''@;'; put 'put ''YngwWihHdHcpWSRVdF5pLFZ1X0E1LytmWGh3KU1hYjhuXWM7JEp4a1gufVhFc0J7dEEsKz1SJkIhRT5YcFtIcllMVFkjN3Bbdl95KU9QdmZHIV9hUkssW2NjP2ZSYE99aD1TNzo2PTVXWE57REJyZUI2S2B5eEtHbD5AQHVvaFc/Q3xGNTokcXNiS1ddODhwbVUjX25lO2ZXSEAjTjRPQl4oPU1y''@;'; put 'put ''Tipfc1UkSlEwOG1JMzwlRUByYG5te21QZGkiJkZFcyNobS5eMiZga2F5Wk9QTW5Ten47ViFyYnQzay9mMTY6SHIiQWFPcztFLk1aWi9SYCImRj1CP2sjS05TVlhNU0pme19yWmNqZHYmSU53Ri5FL2BRUkdlUTVNczw1TmltMSl5aDlLN0tgY0wsWE5GZUtgMExLP00mZ3N8NE5jQmpfRD1tJV0h''@;'; put 'put ''NT9dVG0rXV0qQnxTNURLcyR7XVlXaUZFQGxAalJ1LkxESk9HQnxGQSYiXX4lIyVgYEhGZnJEOiZPMj91RU51c3tMRHt0OWkoeFplZShXJnhfPSw3IzZeNEx6Nk04V0BWSCQ3JCFAPntlNkArPkRSTj97clUqNUNKKjxiOHtDamxsKn1AM0B3InokeGtmR3phLyZ7OHN9N1ZjZlshMmNSOzs3bEJ9''@;'; put 'put ''O1NUfklDN1dKUm5ucTA0SHc7LCQkUjp2aH16PFdYQHVGRiIkOEUvTnJSc015WH4/PjRIam0mdEJ5MnE7Rmdsdm83Q08pYnRBVUx+ZTA8IzlXPCp+TXVNclFpJGthZmRRaCZkKGpUVihTfFc2Zn1CPjQqQnAoM0RPSzdWR11RUGpYKXVVfEQwVVZ2dHVXN0dfKDRiQHs1WThnM111Qzs9Q1pkSFRt''@;'; put 'put ''VDxRLyJZbXpkV1l+bDZbKFR9TjtIfFUzKU9DTyhNMVdEeCxASEV5YHM0QjFFamIwJldGcHkzLmw6XiFdQE9OO1tZbGZGZH5ZYlIlMl9LYiFAXXIsYlNXZlkoRWNPSCNpWXhsfWNIUjYwQG9ZOnoyezE4LlZJMilTdW9wI2hrMk5+Q1NkOXBFVzZaIzJkMWQ5eUIxRHtCN0lTZGdXO3JyWlc0bW50''@;'; put 'put ''d3hZa3F9U0FwPGdARmxQVGl9d0gwWk9gfl0+NDFuQHMuLz1FYFt+PkU3TzQva2h9P11uLmBYRndPYmVuOjRSO0ZfeUVXcDo5ZSt7TCtLT0I5MmgqUnIrS0MqIkxZXks8JEojSCk9PD0pcXh1UXZ1WypBYTVZYlhPXX5FMzpAfnBLZzU/Vjk0XjtBcSg8On1HeSxSaSRwYksyPDJmIX4wKV8oKENa''@;'; put 'put ''I0tmWk00fERbVzVyMDh4ZFJZMDtERHV5I3BMcE13KTpTTSJVZiJwI204LkJXQkMrcldnQCwidVlYeyh+TCVEPHouJnlqXXt+aUI3fkZCZUhTRlslWV90R1ZqK0pqRzZ1InFPI1VLQTQjdy89SmNTcm8+SjMoXSkkWj15cm9ZR0hyTEFhbSI9Mm9aQEI4Wiw6R2dxS04yeiVPbnNBLiQyfTJoJShz''@;'; put 'put ''Ziw1Q2prdSp4QjtjTFc4W1FRViwkaXwoMmQkVEdUNzhZeiplKlJKNjBuQChzVkMxUDlFfU5AIkgxNUZ8PHZSQU1ISGkyLzFuS3ZEUCldb1ZnOE5TOSVhQkp2VDtbdnFJUEJic308aHh4TmBeNmRObzg6PVBiPWhDNEchbXlwPHFNW1FlIys3IyVRI2FHKV5gfDtHNHgwOTU0S3t6PDFbOnFZQD49''@;'; put 'put ''XkM2VEN7RS5NV21pUGM4KURrNCl5PmQ3ZGRsSFNHfnx5bE9yXW0qaGN3VFkhbkdFazR8NGR7OHs6dTNPa0w5Uz0jTjxpNFgwUFExUzJIQjoweT1me3BMXWZ1fCRmLFMoaU5vZEhgeypeV2piTSlZOD1sMkJrLHkrW2NZRHJ2JixYRDcqTkRyS0NKP007MX54WCp7YyZFaiVXNUNVRG1FejojeShK''@;'; put 'put ''SCsoaHNKW3tzTzlARDpwZ3wzWVZzZWVXdUNqUWE7SD8sWkM7SEoqNkN4fXw5PjpzajdTIjBaUV1ScWVINitdaHVRI2FQIlEuPXFDcmgyQ1d7dzp9IldzWTckbTd5aXVHIURkTlM8e14oN280Yk1PMkdeTFRSdF1FUC4zSVUyajRPRzw4SWtgJiNEenRvKXozO0EzWn5ofTY+NTlYbzRSZztaY1Br''@;'; put 'put ''fCFyR0ReJV1PTTR0ZFZWUSpLeHlHeEQpe3ssMEBbODF6PWJ1UU5LM31MbFglXl1GUCZRdT5fOFpRPlY6ZV9wPi5oa2dwTEMuYVdsVUtNKlE/ZUVCKGhMZHNJcTpRVEVxakQsTlg4PTh+RzpnJnp1SkA3N21HTDd4cWRvKUBpQ3xHcTIsO1ZWQX5kX0VVWERNeSxjNXxYcmheK0Z9JWxwSmB+PmYi''@;'; put 'put ''c2BfZGVDOiVfQGcoflZbS0guOVB1ZjdyN0JEIlFpajdMOzRbWDBFSWNzWEg6aFtQUG5MJEA/QjpQL3Zjdjt3aUc2XkkqJixXKlNoWkxVMSwzKm1CV2BiWX1icD1xPUdYQEMpdDd5WnM/WEJ6KkRuaHxJbkE+JGtBX1E4fGh4KkQxO0tJfjIuMWNMajA/ODR+dEloWzhDW0cjJX4sYT0hRHdRKn1o''@;'; put 'put ''UWM8SnxdMHo1PDtLZmFCJGpVUTFbUTE/VGBsSXh6IUZuQlBkMGAvekV0TFVZITlhN2lJMnlOQzRmXkghU1RNVkM7QjJxPyppeShlQjptLERxdkRTWXMuWWZXVjtWfj5Da2dNeDVIK0JKeDlpQ1Y3WiRWdEVgLiQmJHZxWytHIjd9SFZxZDpoVmIpfVRiSX0oLjVnS2pLOmJEZCZhKz19dGRuaWFk''@;'; put 'put ''JVhaYXxqeixMZ3B4UHxsPSp5Qix5WnplaU8rV3RIdDNpfjpQOlhzd0BOJDlxZkNAQWguMEg4RiQpb0labV8rI0hjUzArNlJGfC5FKEVzIyJpMyZbI0dOVWo9SGBdR2pMTzksXmFHPG00SD9oSnFkIkZ0ZzkkeH1UYWomam5SezdhekpeX25baG5DbCVMZFVgVkpabTdpUzouTFVfZTI2NnRhREsw''@;'; put 'put ''YmYjdlozPUlybndgI0VGaSNgWm9neV9uVXlZPyU1L25IdV5RO2IjUC4kJTNrK30/fC5kc1t7YX4xZy4+ZFtWSE5wdihiL0NLSSpGdnFqNlV3UEokSzlveD0xQzE0SHtPTmEpLHY4YyliaU97b1JXaiRHald2bkZbJnV2VDpxUTI8N3hLP2J6IURrcEcqOjI2WHlIRlhFaV9EZV45W0tpYkRfblNC''@;'; put 'put ''YCREMlksKXtPTiouKjooJl5BJC8rQyZVfVpMd2wpdUJMflpKIWFASi9KZCpIYk97Qmo2PUJkRkksY21UeHRkZT42Y2NtO3p5PXp1YEddU3phNHllIT5iYntsQTpoY3VsRjtfXy9GUHZxeH46aFNKTXRbWyUyZVhrJWIpb1ljW3dZfFN8JlY2bTJ1X0UjRiVgXip+OG5CLlQiOFBhVTQvdk09RU93''@;'; put 'put ''RCY2fj1fIU1PRi5rS0BQWmA9dGlUZT4rLEB0QnxYYXx2byQ7X0AqUWxRUHg2e1hIe1BeY1NyPV5YaWpTKkZ+UUkkaVguaTFnM2ttZm5CUCthREleeGkoQkFoKENTWzFPclRLUilVMWhKUUU8JishMzUlczJxfFE2ciVxI2k0KlJrRlt7TzE0YldwMWNAP2FQJXZPWnRmeUY2eGQkMTg8YT1KUExe''@;'; put 'put ''SkNUQywlJT5jS3Q0XyxrKV02SmQkcTppZUkoTFYuPlAmMmc3RnFRXyl0U25iS2pWbSQmfF5jS3c+UGtsQmQ0Jk8rYW8kJVUqbGkmQzwuYUdxMjEvMHZCezxrTEkzeyYyK1FVNEZoaE9DUE40OFElKHp+JGB0JER6fmtsTEBxaCEiN2cjcWBXQ1hxcEdePjt+SFZQX1AkOEsxcU5MajMvPilkN0df''@;'; put 'put ''YENsbCMvO31QaTkrMCpRQnpibVBNP3VRPDQ6SE4hPkp8cG4yZWN4TEIkel85QDxsI2l2Tkk5TCFCKSNTbkV4NkVgXUQ/az5YMzgydkVeRTAkYnc/YVRrWHklezB5YXBhKmNALCEvbzFjM0dGczp1dFZXNjZ4KXNSIyRpTmw5JFlTSCg7bihDMWk+WiRMNHgvemdDY25RVz5gW2dMaiQuK3lTLDlR''@;'; put 'put ''UW1VQmdhdz1uRSliOH0rQHdVfjFiUz9xWkZyKShlO2J1a0xVYT8/cXk/JiQrVHF8cFt5LF1+Zz57PWQ2YUhVdSolVkQ6WVdhZ25DZ11SY0NYSG5nS2xZZ2JWaHZlPnptWj1aOkVTNXo+eWx7azxjfSUiLnw1eURqeDZtPWVoJjNBd3xwZDVMdFtqOkAxKHdOYEZZXXNjTztvOiouQWpbVDE/S01v''@;'; put 'put ''Nkt3WVp6WiUrTD9KJG9PNjdOVS9nI01GQVUpWEhkKHx5MXFDQjAqOiMyODNAU2ZVX3NFYTJnK2UpJFErcSthKVM1My53Nn5ofF46MVRMTFB5QGBFLH5EKSE7TGhLW0x8ZWsuN1h1d185Y0NLdyNkTilQOSU2R0toUjdFVCU7R351Ql9RWHdhJGh4XldETklJJlhDODx7eFFdcF40PlMjeiQ6NDND''@;'; put 'put ''SykiSSRfcyVXTDd7V2RGZGhQXnRuUF1NWH5re25RQXZjPEJ3Sm8ucFokNW0yTVkwQCIjVCQ5QkQxdThmKjJSSXEjM3orJSMrMmpFfVN3ZFYpR11+e0ZeRWliOzYrSD5mLlhNPDhaO3BZYW9uWn1QcSE0YSNJbG1edjtKND9eY08kdHYlKlpAbWRkYE0yPjdfaURfRF4jRTkpe3l0NHlxPio5ejxj''@;'; put 'put ''cFosRWVkUklAbihydFAlZ09XfHNJPkFPMG98dX10Ml09S306al1jYih9X0x5PzxVJGF3SWE/NVszeyNJal5FRm58P0p4UWMhJS8jP3ZAelF3JXguIShWJj1zenxkTkU/PGBqPSF1MW1WfkFbdTF+V11vaV07VXxzNGVZX25iaHB3Un58NUU9JExXaDZgQjB+PkspZlE/alhzTktub3hafip5QTld''@;'; put 'put ''PD8jKzNpLkU1UkdfKGZ4Znt8YCE5Z3htVmcsKyVnYmFlXjBoblk3djBPL2Z7b2dRVCZXKU1JdDtuYypOOClUaU40UlVRLDF4bE8qLk4ybmRZTmBBKnt6RlNCNEYjUyZWKHNzQ1o4dEVLe3c5NVB4S3V5O1pfbVtJdVZkPS9RT0JdKzF4WGc6cHUsZG9LWiEoKWxXQ2Z9VSJKQ31RIWIpWmc4Ozdt''@;'; put 'put ''d2ZAaS97JntXOSRxcHYiT0c+QUBNYnwoTXJAXXNKL2k2Uk0uVXA7S2s7YENBPzY/QlIlWkdSY1krdXBWUl96X0U0dloyQEVUKkdbZl88WGwhdH5ISTspNTB0dTRaS0p2LDR4NFY+YmU/UlA1STRobUEybTpnNDg/RllNN1dfNGZOcypRVE9TNyw1aFUjRjhaYzBlYipNMDArVnRbVmN8QCpZbHt1''@;'; put 'put ''Z0FmQm4odEdYODMlMms7MCRObX5WV2F2JFB7am1LSFI6cTwhOHs4VDtWImsrKmgoYCw0XVBOcipLKTdJMnR9UzskYSNgO0hTMF05MyRwTWBDQj13NC5NQE1AJC5TMixHNk8iWT4/JkV2MixgWSMwMWFxVlBORzR0MDxlanY0Z0FvbkchPXNrT3hHOTJvXkt6fTIkQzEmOSU0b1t2eThjMF9vXTdF''@;'; put 'put ''RChzbj9vSTJHeHNzO3c1IT1WdSRBa0hMT1c/dUhOcUUvODRuKlk3W2dOKUhBSGJzSDZJaEw1Lj46c1E9QjdyfEhneWthYTAqN18+NEVuX05UKHNhVjJhNEkuV0w2TyQ6PlA1OT9PdGF2eF5PYzwsXUtPXmkzbVU0dmY+VHIlbjVSMFVFZVZbfU1kdm1rOnErTCR5JWEjeEVpKStHQkN2dXBANyxu''@;'; put 'put ''TzY4OmVKN2Z6M1l6RDQ3amN0a3dfaUtTd2BjO2guRnJVdSFoTWdOOFtbT3Z8ZCRkYz9SXTE7Yzd9XXJuW108Onljb2dFKE5DTzVSQFNqdjxhK35sWjswbE0pKWVLYmxOKy9wWChAJnQkIUZOJltTfjRka2VtPFBtfUshVSQqcGZwcjROdClgQ3o+RTJHOTtNQEd2ZUVbbTJVflJMKWA/ekd2P1Y9''@;'; put 'put ''QDx+Mig7WTcjMzM6YV5aJEgqOWppNGdwYFtpNWZtfmhrY25iQE0jQjszdGo8K2s9ZGMrREwkU0Z7T2s9c3JtaVU9YWRqNFpGVH07SkF9MkIiNGpXbGI7QnhCZVsyRW1BI0VKRWElYSQ+RVpgQ1pTUmQ/X1gsbTNOISoyOHBTP1Y3KkgjKmwrY1cqeEBfVW4yN3xDX1dVOUAyaGM0d3xOdEJuYElx''@;'; put 'put ''OWo+T2FBdjJze2AmSUxma3x6O1VYIjVeSXsxQipjTGl6NSU3KldKTlVDJD8zfilTYCNsbTw1W2VZKF5NXj4yVWMvMC9jYDVHWExmcl1ER0hgeyxaLnxmdyVBZlllMit+R2cpNHtzfUw/MjB9WndRRWhBREsiV2tbLG9lVn00MDtgXU84SkBOSm07RzBKU0ZbPGJsO3JfcjVeI1c+PlAzSmp7OXBG''@;'; put 'put ''bV0qO3NKKGl3XVdIL3I5eE1VKFNPaSo0TkguWDxjNDhiK0spPU9zTHp0ej9pJDVMcTluM3ZrazZXNC42cGx+KnJaPnlSWTBmaERANVV5Iy9QLjUzVUdoWHpxezVhYyo9OkA9d2k6Ul0+fFIjW28pPEBhYSVIPiMvJG5CMTR6Xmo3dixfQ1t1Z2sual1uRE4zZDx2OX54O3NwXSFedDJCNSwjcDZx''@;'; put 'put ''eT18YG1qbXV1KGlKPko9UVR6dHBeOH1Ven1aKzNqUCtWOSZQXU1yUTlqUzNQX2l1Yy5AcCMsZlpNLjptNHpBdy9Fa00oITdgYTI7ZV5gNU1gbFdETzB7Kmt1UD9ySFc0TEtZW1cvZkQ8YWBPfFdDSGZnNFRBSzBtaHZSczlCZDpOc1lScEVLL3EveXIvVzxoZWsqUHliVGU7anpAT1t6MzReWD8r''@;'; put 'put ''bChadWh+XlspQVhWNnpWQzsmb01gMWIwZGd8TVBNO3V8MCNsMW9nSUBOMEwhe1NjeEVmMVJbOF92d1VmLHksZi5IalAhb2JlV1Uicj5rPndhPlI7Z2EzJUxWKFpoYz9XMElUc0QzJWReeUkyX0FMc0x2fHY6c3AsMXQ/VGJifUY6XkdkOGMqU1VdIWUvRVpLaVtVRDohaCUvYXwqNm1EJnEsLjVz''@;'; put 'put ''TUBwWSV3dUA7UF9zdi9YcEkzNUNQSUhQVixaIypxJl40WXtJIzN9KWxJVkE5a2RUVVNUSH47WXZYViwvVWFJcSVOX1lsfUBoNGdUVVJqNW41YG5iJkV+MGdqVT0zekpGXXI8MFsidDhRQHxAXjFIVFlFbFY8Om1pN2ttfSk4bE5+VGBgV3h1bT4lIiQ3PFh8Jm4+aTxESTt9UGw9XytEMmhVcVUl''@;'; put 'put ''Ozw7TDsoS2MpPG1fbmRUOUkyZVpbL2M4JV1UQEVCS3lALDR2K1E9dEcrOVg+Vm06dl0rQyttbSRebXNtV0RFXTFzYGhQeTJSVCFVKVFrLjd2Tl9rdDZbKX0iZXdiaVFLWlNaOX5XcH16XnV5dDBsezEiezxSdig3ZCo3cVovL3BMYl1LRHQ/UnN1TXJZbCgsfDxpeEdGNFRLalhZMyV0YkhXIS5K''@;'; put 'put ''W0xjR29IfXF9Vkt8dTtJaUxkdCheQiRfcS5lRmladV44QShSWVpQMzsjPWIvcWRSSlJrSHpqfjtvdWhQUTslJXcuOG4vZi4+SF1CRlFBQXMpa1MyP24/X1hfPVddMjhqU1EvNU4pZjw5Q2xVeWNFY2kifTJmWFJ5KSRaNng7RCRzS0M2OmA1UnZtSzd9VktucEc9V0tSPGM8XWtnXTAsMnxDUy5D''@;'; put 'put ''byNnW353MlNWeHdOK2BCYXRKVThqJiQ6fHFvWVNjKTVSMmFvT1E6K1kyV2JkJVNkV0I2WXY/PjN+cUxCXnhLdyVKP0BUbkFpIT1SOWBhcEkkejVMUFslWDJQbH0oVFsmR3pqKlUwRl1wRVAmXkhVJFo4ZTBrNThdbX1ndmh3aVh5fD9dUU57NEAuXmlWVyYiZTpuMDJzPk03aV1QNyVaKjwoREJG''@;'; put 'put ''ViVSK2dtd1U0RXFVWEJ2KSFSaVJEdkpAalNrOUZtWSpCN3ByNSVhKkEpUCpQQHprQTQjOGJ+Y1RJLnN7XT4zaXZ1MUljfmMleS9aQnl3fEglLFVXPilYRX1ydDsxWCYwNmxjL3tZPGJZRnFrRHVaVjR4NU4qMldocjZ2KFIpPiZocnFkfHkkZH14V0w8UGEwYGJVL09RUT5IQFE/NEFUI3x2Rz94''@;'; put 'put ''VCxrMWNUVi8hQmt6VSZoYztFd3AwUCVRYzMwQlh8SnhPfklBTlhhLzk0MXpFVEpMPTJwI1VUZVsxUkNJd1Mwc1JIbE15Kko5IyEqSkJ5InF8R3xaI3k4V291SXA4NTYxQWhqUURWVHplc2t5dUlGJilRTndjLzpEKCN+XWV8KFczUV4hKEZve3JyOmBNMHh6WFdha1hHdV00Qy9oeVolRVtCcCYo''@;'; put 'put ''JEZRM1Evc1k5LChWZkBSO3IuSWNTfVpKd1ZURGtnbEU3Z3FmNWwmVWA2cz9HSD9AVyliZzQ5WSJOKkZiXihSTnhLekVmdUpNe0JhY3tRcjt4LEs9YUdZOEluQ2BxeT5YNyJGWj43YlBCIXVHVERDZDEyQlN2OTV4azxtYFRUflc6WDFMVzhSPmU4Lk95fEV2aCJsNj9aWVdDfDA9VlV0OXs5OXU6''@;'; put 'put ''cGl1SEtyUWYucElmRW9iTkkmNnthN3RYUXxEZ2VIWmtjXnw2Ymd4ejRJUl8xLEpmdDw4UGVYKzE8Ul5oWDVNKENUZW0wbTd1cnZqSiF6OCwiaXYmclkmL31eQyhudU4xYz8zPU8rY0xieV5XeVgpWShvR0dUVnZEPE1leFYmbix8Q31JWXpJWER+WyouQm5dSSkvO3E9dURhVDBCQWs8LlFGeXQ8''@;'; put 'put ''YiJdfXhiMSxreFEpQzQzOE8sflp9MDpLaTNUM3g2U2NCXmYzYm5QQFlfWilWIzo7KGdnekxKYDhgN3E6RS5fXjg2OyRSQjpSVjI7ZDVaWVJ7UmRvc1huYGRLMiRHZFcjdTEzfVMheG9PVDI4I1V7fDhpOHFaWnVXW2FoMT9gXVB3MkJnVklAaEBiTj1say9ubmAjRmNFeGwxVntRczM2bHI6dHpp''@;'; put 'put ''JUwjb0QvTyg0UElkbl1Obm81aH1oPzp+KGReLiM+Ynd+IWx+bT1CQ3Nsak57M19kMWExSVs3TldAOGl6RWFCSGVlQT54Ymkuc3JjfmVWbz4jcFg1PDRFRXZqfkBNXVpkODBPen1gbTJsMXoheixGOi5SKVQ/aGt1YkY5OSN6M2YjRF5yPXo/Iz0rS2BiYyo8M0VFPEZaKWNrXUsxfEZkeWdxJGBB''@;'; put 'put ''LmJfNy48NF5gJkokIW5ETG5deEFpOjcuT2ImTWo/cyQ9YHxFeT4obChZbkc1Xlk9Nj86T117bGNRMFdOYihBWGNVdngifXxKLlZxKFMuZURwS2tBfTpMK31pUiNXbDxrYV4oZW4mPGo8am8vdDgkKSFtS2dETjk7flJUKlNhQmswOjc7PzlFe3FCPyYxSnVmbzorQ2tyPldPQCF2QFooVFQwaXFh''@;'; put 'put ''WCorRz4mZlpzQntRY0xZUXFndURVcTVRZU9eKCo2MWcvRE15VyMufV4vVkBlOE57cHFeIn1Fbm82QGV6K2ZvSFpsViNBb2VdL3RFQ3dHWyg8N0NFfCZEM2lsdyhiVWRsYDhufGRQN1RBQSpbc3ZLWnlEYUhmJHN8M0k3LF1FWGU0emdyK1p7KHh8clkpWEIwSkN1XUYiP2FOZksvV0Q/R0xCN2Mu''@;'; put 'put ''RTx2cj9NUFplJSRwSVhqdERtTCM1cTFzdzlARmRVR3xSW09sWmovWl1dOy5zP0hpaUQiPGJLSTUufik6c31QeF1jRmg9Zmg9cls9ZHE3OlJNQTUoUDlhYiZ0algjMjtQMGFNRT0pSiosQmB8LltSM1pLdWlJWDFUXVRsbWxgaCssbCp+ODp6aClYcVFTVkMjV15iLChRJD8od0V+MHZuYl5wZntL''@;'; put 'put ''PzM3eDxvJCFaP19vTDhBU1Y6YmNXNk5ZaTdmMGxxJEJ0MWFsNWpgM15UMH1pZ0M/cmpbaUM3L1JrclhYdmF2bSR0U0NCLyQ8NkdyXyNiJkp+fTZoYmY/JEtnNzk9TF0oVGFhb2ZldWo8UkY5bWJAdDlaJVVzMGJPYEFnTzxPZV1lSUU7aDhOJnxRbUN1OywwWHw+N2MzKzdGInA/SShFfF5TVmoi''@;'; put 'put ''MjVuP2IsPU83I3YuK0IsWmp6SVk+dlFkXz02S1NYZktrTHdsZztKSE9ZOixHOENkPTVpUjpSLEkoTE0zXVpdaEVFPDQoQzBqaypIal05ZG1na0ErTkE1ODF5aEM/R3M9SXt2SjJxMWV8Jng8NlIvK0UiTXpVd3ZsRjdhNnZ+clgzNWQ5WXdaQWtrcGBbenlLIVdfcHZRTW9MNG9WaSNDekQ1XVZb''@;'; put 'put ''cXBUPlZxN1d7OFp0K04kNWgjT1RScktOKmozeUZ6OmlVXltkOyYzX1R8alo+TWx5WVVYVCYqN281YndRc3JYZEtLOmt6IV9JNl5DdzlxVlNycHRNN0JKamRvQENLSCJzXnN5fHRDOVJ6U1V6VWlHLG9wPyU9aS5xRkJKI1VrfGhyeFQyPzFYMWMyOnVVaXRuOHl3VVRMKixeOnJjR05IPSwpXlki''@;'; put 'put ''UXN4MHQoTjNrIX17KT0wYzIzKHphRGM0X29YaU9SKSt7OiRGeHwmKX03N3VLcFU2Z1pvKjo4Q1JTfSY4JjUoeDxGSX09VCNWYyhrb29XSXNBN2F1aHtvZE1OVkNOa0N4aTVwPixlYHooNCxdUTdrZkghYkZ7On0uO1FKPFFQblR1SCFnKkV0ZFVpPlVJTmZDOkd6ITMhTXhEW1QqQT88eGlFYnFa''@;'; put 'put ''OmRBU0hYQGRCJD4qem8reX5fWGZjOCs2WklWKCwvL1BQaShHYEZ6KUgpZUdeUVFrTCQydEYhTGVNdl5tOEFmQDVNeyM7PCJ2MTJXIkRgTHJeXWY2LjRIeyVFJX4vdW9FRiZPYnEvRE8+NU1BOiliMztMLyJ7T01efnQ2NmguZ2dJJXhTLEw6eWgiZXZIenRZJT1YK2FRXlFNUVNOeWQzVGtKJWhT''@;'; put 'put ''RDNSKU41K2NJXiRdXztsZ2JHdC5gIUs8SjZOaiQvYUJiKyU9S2ZTe24xQElhX2d3fF5RWkdrdyhXemlTQkpLNmpWJnJKbiI2PHhUUXAwKmJncXVyMXw9NzlAIj9LUz15RW91TTcrLkA2SXthQGl5eUMrdF9KbmE6YH4qTTUkdWVxYENlO1pFUnBFVXEmMjVLcC5NMm5UNiZxUGxvNn1IMHlrc2Z6''@;'; put 'put ''cVlgPmNnVTZlNVA7Y2lEaiVSNnQlTXIrPE9TJWM0T3lJRGlvVUV1X1Q/TCV+PjJFVCpLemtJXnQhR2Vpe0U7aX1DV0dLITV+LmdEKUBzQG9lb1gqI2gidndeYSYrNlNtIUpKPEZXRWhsQjxfW0wufTBgM30oa1lAL2VAJktgMnFwU2YkP19jdG8kNUcmK1d3cG56M04vQHlwUUdaOExWbzFFK0M3''@;'; put 'put ''eilpPDBIMTQ/VT0hWlFESHE+T11kNVFxLykkUnt4LCEzSU43bUNiLzZSIUZFRHYwPVksX2lQTmRzZFhJSUFpdTszXzUmdU0iQV5BUkczdCYpJEkkeWhCekciLmBNLC4xPkdadlJJNnpVbWRdJmtXLnxVdHl4OGRrNE58U0BmWlt0ajgsIVd7KVVZekNXNEIjZHZZcV94V2x5OTtfMlIjZ2Y4akMp''@;'; put 'put ''aFlafipHVklpO21lfX1sPV40PitGfSMzZlI2MGd5Mmc8Yi9FPjVEYilpQVEhUXk4PjpIWXYiO3w5Sk1QN2JYTVVYOXxqelchW0dbaSwhaG9KZyEuTyxpY31qNnlHPGNiI0ZvREo6UDZQNyFGPCosVHgzYmhGLHVHYXZ1eFpjTj81JXFKWzpwWShNYTYmOHxAe2xaW2B3VG1ZRFovbCleISsxbncu''@;'; put 'put ''WksyMzk0WkZtQXMzOzpwNG4yUSUrMT0oNWY9QyQ3KlBRXSExR1FMc29FKW5+REA2WSVAb2tyLDxRJCVTYXRxJktiOkxlYEZ+OV0yR2YlbmZLR1V6YjddMnFwLlteP01ON0pmXitLJSs0MCZKaWFbMUsiamgoPWluXX4uMHN1cG9PZy9lMiooNCwxX0Q9I1JRWEN+YFNaNztJb3hQU0I7MGtJOHBF''@;'; put 'put ''Xyx8RUBhO3h0Kyk7Yjtsay5EcEFtViNFREoxPmwsPDIkKXVgTm8oMzE6fX1zeUJ9Ny5qITJ5W3kpNE5IREJeM0pkKkxwejpvUyVAO1Q6UnFqeDB1VT4lbyskbEBPYXh5biQ6dHcobi4qR140Old7UjArRTxBUntVYEdoZDxwKl9HWiFsWFN2XykpKDgpKVBJeWVQJGM/ZnIjWDxhdk5hSTpbNXE9''@;'; put 'put ''Sk9de3cra2BgIUc2aTwxOjYxKVZDNT1+R3xEPjQ/P2ZSSypXVjdnXT9heTRNYFJyczZGdUZ2MktNRktXaGJARDRGRVtDVCEuKV5ePyRCMVgzQE9uRSNPPUhBNkFsJUpMRVV+V3I9UjF1YiRPZGhqQ2dsKyhzaFo7OlBPfjNXVXUkQ1Q2Zy9gUFsoWFNoTlImcXViKXJiLEB1Z0xrZCxDOiNBYEtj''@;'; put 'put ''Ziw/I19jOTcyKmdYKHR8PiReRkosOCJVVHsuLFBnLGE0Y3RGLzQ0WCQ5VVEoMEV7L0t4L0xnWWpxOnFdcS5gW0wjNVIyPUhafC92eFQ/UDBvZShtL0wlIkspUVhASGhYW3h9blZtZ2x9N0RhSWtCQCYrQl1JQkgwWjdNfFdQbUptNF9ART99NiojaG4+LDo5SyppMywoZlhuZD9iZCIqYzJXZlRq''@;'; put 'put ''RHREPE59RVo3JkpsOUBGcmhdfCg4ZDwudjNodGk7WE0xSWk/MG04NmVtZVJ4KF1TaCI2WH5xMTN+TFQlcTo3STF8UWx1RlkmWi9CPUpkJXt1eTVKLyQhVltUPTdXYUBYOWxCRCUpXXIrV01EfiM2PFk6Tmp1dkkrfFJfUjJ7W25+ZENuRyUud3wocyM3L1ZIZyFFfXYzal1rUkA8fGtDcWpfS1Yy''@;'; put 'put ''d1U2JEcuK0p3UX5DMmwrS2R6RWteemp1Y3F3MUpKPz83WXhueGtQM0pGX2FRe3liM2khJUd2QFcwVyYvLHU9SDB+PEZXPD5XVVl+S3R6bywweUtTJDUhdD85WUlfMiM1MiIvVi9nUiRrZFddY3o5Q3IkKkskfik5NzhFdFVuOnBzKEFvL0QlNnJQJXN8KVRCVzthc3VIKTwja0t1TSlLXzYqOGlP''@;'; put 'put ''ekBsYnl5WzUxOWpea35JT3RPIVFFUTdZPmE/JDxJZiw9Jk0lJX1OTzUjMjhCcWRCdjxQRXRBRntdY3VdTUNYb3A2OjplKy43VH56QjtAVVVqSl5fVE84bHhuOk8iRj55NUJXPndqQHoyVz1NLl5MajhnK0QlZHRiOzZqISp1TG5ZcW07XjlZZGhwfVJsYlZDLkRldT4ken07Q3VZWmtbbipjSzx9''@;'; put 'put ''fkdNOms+L2x2ZEBgOVdqQDB8IjJaODZkZTFqWmpFJkFZWU5dME1HUXEhPC5qdFNiNjZ6QkNTMzFfKHE+VChXXjhtckU2JU41U1FQaWcpd3dTSCo0VFFhcjY3WlFYbU11aSEmLm8kPGJ1IU4xWlVxYmQuMV5LWDJlYF1Te1RiUV1eVygsfFNvSH1Vcjg9LEFNczpaTlZwVjpUJXRZcndiW2dzZDw6''@;'; put 'put ''bV9hezx5WFdUJVJvYE5MJSFmSnQ1a20xekVjT3grdTRdK3V6Q3NXflNLYVQsSl5lNDVhZWM0TCVwPGJxPmROcHE6e1B1Y2Qic2N7fn5ONWJmQzZDa0JWfG8pJDI2Mmk3eE0qKXRBfW82KkdMeFhITSpTfS9CfVN0KS8uZHJxe3EoJUlsVFJ5VTZDX1FCTl48ej5FXWdlOXxjT0UpIWAoLnlESV5r''@;'; put 'put ''JV9IN19jVVdufHFpaWdwViJSLDZ5KkIoI2lWenxUcj16VjhMWmcwfU9yb2hxImVPL3Q7NnMidWBncGR9IU1JLlFPcGJLTHBXKWFRQ1p5flAhMUFRW2xsaUJkX1ZwOGM5X3YkJUhHYFh3Rzt5d3EuZUtBRUlMYW1aUXdkX1tSNGd1cSE1NkAzdSU+RmdyLnBIRVV6eEBGQ2g0IXhuSVBpaFlkP08i''@;'; put 'put ''XzVCP01ZJCRmbjtpbkUwQWpvKCtxOlpiQUVhTmxtTV5ScH1NYFciPE9UQ15Dai9iemVddEJvKTBUWH16c1FtVXh9ISIuMz5lNnZtWkE/bmVpNUkhRFAsezUuLiIrNTdlUCFDPmU8YW5PIUp7OjBRPSYvMFFyOGlWeD98eE9dcmg5Xn0zYG54Pl4rMHg0SjwzIU5JTHZVXjd1XjhEP1BoPjR6UVF5''@;'; put 'put ''QzMlOXhbQmhoUzhRQjpTRzVDIjJ4QlZEcDlpQy43Sl1vLHMhXXU+OyM6XzRNUztsN18sS0J2VTY3aWclLno5aExAPU56UHdENmh2OU9HM0lMcWNKZF1KYDN7M1ZKa2FRfGRFVVFnPk4wTnpvelJOUiFdQjA+dSx7XmJza258dzFIIyp3c1FBQTxtbyJ9YyFnIjNHKHw/IVVlW3p6Y099anBuY2Fg''@;'; put 'put ''ZHk9MlBCVGxiITxCUWJwUGEvV1BzRVFCMl97WmUvZDpNIilee1dVczZaQEoxQFU/LkUwZjBBRFVUUlovJFpmbE8jSmdBWHVWK3YjU0tXcmddY0AsS2Q4OHEuKnlgVSxzaUt3b2kzNCJoOz5XQDM8b35ldl41V14qdEFPYnhvPEQ3S2RNcV46RnM6T0pIZldvdCJScnMiOTc6XXE4QH4xWjorR2w3''@;'; put 'put ''LFtIT31sSlVzLyQ4RkBPYkE/Nkp5fWVGdmxVcWxCRX1tfDw9Tzc5YUZ9RXhyS2FpTnVnXUo6MXczcDx7bTQ5dFB2JFJJOEJ9bWBUbCgoZGw6V1l0PFJQIzw8SzthcS8kdjckaTwhcDRJdlBuRVVpb1ZeKGJUJFliNj13USJDRUtOZGMxRDR8P1tBZTMjKkthY1NVJVhoX2JObXhnd052X2FYRXth''@;'; put 'put ''NjFIITZPeF5HdW1PJnVqS3VNKmV3SWFhOE43RD4+QD9uKVBGXmkhP2wmdE0yQ1QmSHV1Mjk/dXJJLF8rTC8xeE5hJk1GJHt7M3k2My9zYUxBT2I0c0taajFkRlU8RG1DUVRwUHc8ZVBSa0NON2ZMdCtsU1tKSnMsfFB4RE1kNHMmKG4xYntWPHhnJks4OHtAZHR0WXNbeXxEMVlFUnlKNkJ4b0RD''@;'; put 'put ''c09IXVl9M1V4dEdSITkkPzZGUm8jXkNfVClbT2t8X1dtYWQhOE19eXsyb2pYT041MUI1Rl0kaDE5eUM5UHZvc3RqKzVnLHN6SXRLSUQhXjd6bjdnQTlzMTUvNEc6IylFTU9ROXs3aUdnVDQ6KERCQntdeiZyIztYL1d9cldHYzAwVjp4b3J6NT1VQEZ7WDo3USV8dkAvInRadUNaO2VXJFBtXjpB''@;'; put 'put ''cURFQDgpZ0pJSlAqKC9lQm5lWSNSK0B7JV5qI25ZMEtCM2ArO3RxOUM1T0JiXmxtNykmYHFrVCo6Ti9UdEs5RkVRcWdHUCl2Rm9CJW1vX0FdcyFXQHF0NC95SyZCRm0pOTZNdlNsZXpNSGxRSHxnMiYjR255MDBUVT9OWHUlU20sPnlbQ2RKNntvWVpfMm0reC9PWV0xdl1mQ29LM2Y1eFRlPX5X''@;'; put 'put ''MXU3eF4jUEBua1c6fjAsfH43OzpGQkFiUDx4WD1LamhgJWkzUU5JeH00OyZjMFJqKWNlbUp1d34zTGJUKFAsL0MyIVFheXtHPlFed0JKYiFePj1MIUprcio5L1dWeCJAIjptXVdQcnhQSnBCYlQsLDNSbU1FenpwfFg7a29eQEk2PylweVkvVUxkIz5+Z3ZRfUJwQDsuTGY7JXJzdS5PL3FofUx6''@;'; put 'put ''WyoreHRkXkxOQTYrXiJRZldCbSQzJVFDPU4wW1VpVU01JnFGazgoZ1koVDpKfUI2VEh2KmZTUGRoSTFLfEZSWW1KWStxZSJPO3B1SlokeVVmVS93TU5LOCs3eiJjSXYxVlpwSUcmeTBSP3QyTmZaYyQ0Vk5bL0MhbHVCdz48IU0/InJwRGkvX0xvT3tOaTpENE92R2p6biMxODdDO0lXM2BpQ2lZ''@;'; put 'put ''KWYibF9TNHImRnBZVW0meS57VUw5LDFDdH5DPih9Z2ckKX1HfHFjens8ITpAVDg7eSQrWmpFaCNBYF5iPl1BXTUibFBlP1txeCEwKG1+Y0U2Lm85MDFLZGtiI04zTTE1VzByZkRwayRQJEg7V3lvelNBPiQpXl9GUlJlPjxRM1hAfU10bTZDbVNiVnQuSCRqIzskbCpvPV85aj1XWGtTM0xocDss''@;'; put 'put ''P1N9ZCVRZXRsb2lfX2xRN0VNW0FlMz07eT9mNCxBOl1RdUcsZC5bYGcmdX5rYz1EKmFRZzUzY00yIWN3bFghXlI4Z256YFFDUXZJY31qWSFGSCx2V1Q4JldgNTBFUUp3QztIcjUyRyohc2MyXn5uNHs4OnpTZGZ5UTZtS0cxJU96YGYsc2xdW0wmI0BXMm1aeV4kbWh4S2twOEt+VSRmfEk5aS5o''@;'; put 'put ''WXFxLlVpPGdbLD5LfnA3VDBUSUcrRnZiYGhAMUY8KT5nXlFpOGY8bkd7Yi47T2I7YnEyfVUsRUpDbkxpPjJhSntDMi4zbVkmZF1pZEdoTn56NkwxZXZ2VktHSiF6Uk83UiMiNG9ecXpDQ0N6JjZISVddSTk4cDVTLzdEZyFdUF5uOyg+UHoqNGh0eTovXWAwYywrbnkmMWsxcH4xZ0w7a3wvKmQj''@;'; put 'put ''NVc1e3M1ekxDbGp2KjV2WlZfU0VbYkRDcyxAPkk+elE+O21RMUp+W1k1PnxJUjlKR3JyWHxOVWNUVmViXz5qcE1qaT8lcl9GRDNCU1UkOUdERjErVUxeKC5BT3NCQGdMZSMmLiU3WjY1ZTVqMy9UcF03Y0NENCM+M3YsbmsvWFRkRUVhdDwwR2RAOHtUanw4LHp5TU9PL3A7X0s5QjkzaHMrKGFj''@;'; put 'put ''aUR2UTJoNksydj9+IVo5Zk8pdF5KeGpaL0luRyFTWmM1WT0qfG1aK3N1JHB7MmRoZlg0dTJ8NTVITiF1OShnOyYxRTpXVk84TUZXSkk1Nk4zL2R5NjVeTSh4NjpLQmdMampSWS9wPFU1cjc2VylJYEU/RGVRSnxOSXRPMXFEbUc9aDx3NjUzTlE9aSsvaEJCcGkrflRVaUFWbD03TH40NXQ5VDxC''@;'; put 'put ''JWRASF9+TiFHUG9Lcz4waFllNFdsRGVYUzslPDxgQzBhOTpLLlFia0szOVl4V2hMLk1me2QzT0YrP3VTZHZqWTcrYjxdYVs/JnQqQVB7Kzx5XTRGcF9jSjNvRW40PSMoSXt2Z35JNERESmApJjN5cW1HJEdSe2tKRm0lMHhneXJCQDNjSjYiWmxSTTEraSNhSmZiVD5BQm4od0o6KCh8dG91aXl7''@;'; put 'put ''P24wYVJfPlZLRStNQi9kPWFBdDZyMFFKRHk1TnxOVC5yfUM+SkNNVm0qLEN9aCxsXyNzPz57X3hZVXFAWzpKPV5aIWhoPEJTYyxud0ovVnluSE8jY2tmQkFrW1ErM30lZio+T09lK3c2VVZGTzAhOz8jMlNDbn4lPT1ja0x+SV1ZOld7fD4mMSZaS0JNd2l7V2B2Ij1AYGthZ04iJi9PRF5HOUk5''@;'; put 'put ''cHVneiNlSyg7WWxpbklTRnRPMns5XmczazZpIiN0ZWhFVDBTODQ0LnskRyR1eF1BVEl+cXwlaDB8TjhJY0ZlUnZ5MGsjUzB3NS44LGluIzZALFF8fWtdJEEjNjZuKldaYyVCWjxlZnEiNHRMTEk7elMpQTdhfTNtdkooMClSLDJ+MEU/RE9zOiU9aCk7eUlUZTo6fWM2UVtZJUUpPEB8R3VuM1Rv''@;'; put 'put ''bChDZ1laS3EmaUwhMls2Ykw5ai5oPmM4KW5LQiN6YCE+Tyw5TiVqQk9+LDYqP1E5P3dmLFchckNze1tMKlgqamNRamBifi40ZFBpJjVRcFJLOGUuYCJCeEYhMCs0aiVOcWt9cmdaIjAvUnYhMlN7bUAvdjUzOl1GI0I9X101eHI6UEorUXJwb2liVlJEJjJxPT9RVnMmR3BdKHRYXXFTUnhmXj5U''@;'; put 'put ''cGZtMl59NX5iPzZ5SmcuZEBGZE0la2t0QUhARz84all1fFtRNyt3JkJMcWE7Sj5FP2l5fDcsPT9wKCM/a28oY04/JkVEMTRIaFRrXztyNmdgZGVFOHJ7PHRwJnglaHdbUy86ZnF1PztYcjdBZENdNTYlT1BPfnxBOWx0bGZxW1owLiR9L0o8VkovXmg2cz1WPTJCdyZIP2NCPmhrbiZ1LE13Tipw''@;'; put 'put ''P3p3VXRpYSlQVFpZaSxfZC4sMndfMXFhQ00ocjBUNzdjKztIPmo5aS5jPElGQXQ0KHg8LDxUZSYlMTJGN2I9RDd+RGBZTiYwVEZLNiRkcTd5NHNXI2BdLyZIelMwJjM3Y35hcUtnZXg6UmtTUSU+NnFQbWttQFJfQS83VjNkQklRWXhxbjksN1ZeKzdfKiRlODthWSU2N0p8ZyhIWk06dj55bTVR''@;'; put 'put ''IlVTMWwhWyMoM35OdUN0cClXfTd+aCFsflFaY0MvWW9FS0xFIUNCN3ozVW85U3o2K0IyQUV8NyIsUUBrTCsleVdWL1svRGtQLERZJGp2OiQiZnV1QSYzZmZUISYhdTJFTUt6YCo5bnt7dkB4QCM3bl9CfGFQe29kSmglQT9IKVAqV3hhdiNbQl9zV2wkOnYlSE1jVntuMXxpLk1EfTVgPTh5REw7''@;'; put 'put ''RG9pM3ozRDErMEZtT1tXVTlAW1hwNypOKHlmSV98TnNkPy90Vk1OVGpyPGRvLktUeSQ2TWJfWEc8dSloIXYsQzApYlh5PWd7MUlHYzF5fnVyM1NHYHB6L2VGM3d1bGc0TzN+b2xKL21TMFF5d15RdVs+Wl45fU4rM3lOKmw0XVBEPWwsc3dBWFguQ0dFK3NmVFpfYTpDIy91YUQ2QVtvIk9EY31m''@;'; put 'put ''czpET240OVokYHhlcjZreWdfRiF8NFBgL3hjdDQvb3pfPlJ7LlVCIWM4T2h2ZzdRLz5MSnpnLmhEdSZie3h6WnBpLjNkcFNJN1l6LHBBKjV4P3JESkx1UWNQR1tMPjxyOmljKT5oQj1UN0ZJLztKQWl1aTV0Wz16KDkkZTJKel1GL3UqSXp0LDt4ZGJ3SWBFelB7WUl7LFdpQDhxYnY6dCg5akdm''@;'; put 'put ''UFZTazhOYk5POFYrPHhUUV1UOHc9bGU3MltTVGpvKkFOVn1CWU0kX2R4MXlKVX1mPDtVTV44cl1HPWl8IVJCYm4qJDVLTGtLeDA0KGh8emM6Y1dpcWVZb2R7fGVacDpWJUVfVCJkMDpKLjE3e2sobEBmMzVqSDlbeDgmJTFoVE94LE8wUVgrIXV5TktLPyRdR202Oj1YMCVqWCt5YEBRbl5gdUQ4''@;'; put 'put ''ITkuNEhVbnt4QiNbazhpMntIS1hoNXtKZVtbYyk0cTtOfVtFTnlCdHFaT1hZdX41QkFAYE8reyx2TjpGVGtkQEUsUChxJilgNTJVYjlXVXh9Q14iQ2RQRnlJZkpCKmlnQkNXJSlSWlVgME9RNllleFRocTcjNjE7QmlrcGlqfkVkTjU9WU5dampvM1FNZUBscFtfbU1COm4sV2FCfnR2blNSKGY6''@;'; put 'put ''NmtXQ1E9SGREeXwjPzp3KUEiSmwsNSVpSTU3cD82X3RGdWxFNGgyZlR+M1M2L2t0My9uZCskUEBBN2o4Y1RiVXomZDd5RXY4eGNqR0xuO20lRVNDcjxOWDVgKWVUM353UUo5c1FneyNRd3VpW29WdCUhbjpaL0pGUDZybFlqRyhVXTpES3dfQX1sQDQkan5SUnZIQXE3Kz8+S19MbUdYeChUYztQ''@;'; put 'put ''dGFlMEQ6Ti5bKFp7VTJKYnd2djo2WSklO1kwMTFpZ2ZEen1LamN+OSxTMVA+Z3xHUyZ8WkJEcy80WjxkR2xsbk42cn5MK0lNemhzLmsqZkd0dCY0S2sjfEtnKHxdLFcocG8oSlFdbSZbVEUyZG4kOz5yeTdwY0J4Mnlmd1V2Ynd1bVtjW2BrTEYhWlN5akQlJm5sSF5uPDJMcklgPHZ0ZVhTIX5D''@;'; put 'put ''Q0tocS5XeFVgcCR1S01gL0pjdFIpW29rVjpuJVssIndZQyNyRiNmaChpPCQ9IkxNP3N3NDBEW1QhKCMoPDRJTV4pYkM/b0tedE02ezQ4Xko1UXtEKVMpd28qOSpxUjRqbml4bk5Bb1YzaHBua0hpfXFdRUpyVjI0WHYmOzB8azVbUjlAfCUpbFN1OTR2LnptO2k8LGIuMmt8Mn52OHJQNjBQJFMz''@;'; put 'put ''XWBaLHd4VDxWYmJmMjhJdWAoOyJBY0kyT1MsS1c0a1JFby9NPGJnImx7eFFRcyZrR1BHRjcvL0hxJSEjOW5QdWckXT0jTCNWezIxeGt2bVdzYEZNSXFnL3lYS2xucjkxPjQ1YzpKXlcuczMkJW1AUCNrX0hzfHt9W3NtNEBlTkVfRjJ9clJgVV4pKC4hMjpQJnpmRnZBY0J8NDM8W19YTzgwWG5a''@;'; put 'put ''Ml9meV9MVXRyQV0pUVYmaylWQjozSX1mZC93JEkvITdlSE1Jd1YjSVtzdiV1QFYqMnJLZCNJZCt2MkdZcmNfbk02K0k9PDcvVlVgRlA4ZWlfQCFSIj5gZEM2PGZ3Y356a2FeW3lnLC8qUW9VNUxnTXojZnQkN3JYQnhhaV9GNyhMb3drR3E0eCNqcFZgWGwhSH4jaWwuVE5oY0BsW2NrNWhxXXJ2''@;'; put 'put ''fiE3P2doJmIldGVeKitldz0rXSQ5cCJ4Tm82WDxFNmRTRHwlVl4kWVptKix9Rl9SOyp6RmJlMXVGc3pycWlLW2R+SHFZY2VLPSh9OVpNfHNRYFRDVD0vWDdSP2Z+P1tNfElNLk1DNDFEXk5WXz0xJG9xejVDdHtfdSZCOG9mdU9ffj9uezd6L2pja0lKOkhwd3JQb01CY14jN2E9Skx2JHJiNn43''@;'; put 'put ''N3E8JEJuX18ocnc1Jnw0WFdDNjEmLFJ3QSxBO0tkTiNrMEt5alZKLE4pLnEiYHhZWGowLCIiPn1nRV1FcV9eQ1AvUFVNb1EuWVM8NXNiZS9eJih5ISowUURYfUo7dVEvcCRnQlllOGZoNE9+M3R7YVckakh+VkxUbWlfUFttRygxXURoTHs+QGxqOiEuW15NZ3RbcltUNWFZZThLRV5kJmBbKDoy''@;'; put 'put ''RkA7W356JXZ4UDZqWDtdY3kwKyg/PHZnY3AxZDtxZ19xOXNgZG99SjF6ZTcpUDpxblFoP0B8TixxeWEuTT1MUntdLmsiPzdWe1QlOnlkOzFnQFVWaW0rcTo/e3ghWW4vYmJdaUsmOV1iNFhbUSxhRzBEZDBZPypuMlNAcj5IayJBdnhVSyppaHh6RFAsKDZeYTRmekppTUgpIW9wfiZ1Z0lmdVpv''@;'; put 'put ''Sk5YYXBqPi55WDA1WjRvQ2J6b2g0RXVCRH5zZHlsbDB3RHhxQnM4JkR6NTd9bGRjTUh4W1NCRWkrJnlpPVVudGM4TF81MUVWJm92RnR1OVEvITNENS5wJk5DK3xMNTEpUiosfi56VWp8P1I0X2BWcFpre2wyVmVdT0JIMHw/R0s+Ym92PEtZKmcqLE07aCtNV24vMU5tYHx+LHtlTi4iKldpYiV2''@;'; put 'put ''JGtPJFtlWHldQFo+QzYsWH5nfm9sRyFbTFAoOCZ4NTIzNDdrZVAxfXhiIWF4Z3R7LztuMiVUfl1ARjwmcW1wW150cCJeVXBXRnV2SlV6U1I8VnBWeSomXiZWUiwqOWN+aHkxImk7d3QqMztMfTF7YF5LOThDSFRKZU5CQEQ6Ql99WENaKXV2R1tWMCxVKnt4aV9gSypqKFhKeVNpYl4qeDpzaUpu''@;'; put 'put ''SjlxYGBwOlttZUhLdWk9M0NnVzpkYlhRSzBNL15GbHlkIUpKRFkmLkg3WCkiVTtQIWJBMTpoWWBRNTcxZk1zW2RINSxPR2VZODhjI08wZEtbT104IiJscHkmYWUib1peUismMkNPb3tSdk17Zll1ITgkKTVjRShCRCY8blY3JCp6WWVvUihZMDFLblMubzJoVGAjXW4mLkQuQ3B+b0pmS1FCT1gj''@;'; put 'put ''YzJ+dnR3SmlyZTJYVEw7eVRpemx9bVZNVS91cGhhPDxYPEdiKlZUITNJYDJZYG00cShkUixFWUM8dEhYITtlYEN2bDBsdEVBI2wsbmxUOy9MIk4jckI7JXNIezUqMX5FUmo/UXsmRmtbZGFOK3VHaC84YilNZztuMWk4dGlzc0YmKyVYLzlbeD9UTDEsKltJYzpOYlJsbjpMI1pMYV0/PCFsO1pE''@;'; put 'put ''VUhIZ3tRaE0+MDdKImVweypSOWQ9OXQySWddaWY+flkhMTVzXltJJjY9cDRlTF4qbz18Mn5AKmFQWC5KMClGbG4qKFgxa05sN2U/V09qK3AsKTFpNmZsfUVDP3RLUm1bTSZNcSpRdTtrWiRFIm56e2xFZmBxYGl9NSxBVUp1UUlUL0NPfTprT0pQPFUjSGYlKmY7Nltva3EmfGVOL1JyLD8qZ0xd''@;'; put 'put ''bXtwWTkoMHB9eFNOYFhVRUlwaXw4K1VEfGE6RT85NmhAaVhnX147Qj51OSpaJihkNnJEcU0mIlBfUUpGe2FSP2VGP1NRZyZwZCRmZSoyKXFdbk9SYUoyMHtHNklpJWBKJj91PSppY1RpYyswWGhYVEVEUDp1d1sjUVE1aCg/TlV4bUUjTGwxUGByZUk7X2lTPkkzZC93LiUodE1VamBuW1IkM2ZV''@;'; put 'put ''RzMwJmlxWlhvKEYqI0dxYnYvQTw6c2VhNGIwPWNle0kiVFp8eD4vcT9+aS9oKHd0bHgicEcuX20pb3ZKIVMxMDZqQl85KHN+bz4xT2tJbWxEdjVOb31RL3ZiYzcuKlVsbml1RilvYj8hRSM5aXVYTiM5JlJzVG1ObSxNKE4rKnkxOHRdTXFDZ2IlKUNxQ3crJWh4KiVpRTtHeiRCc0w5ckA7c0Av''@;'; put 'put ''S25KYEpyQWZ+QF5oajUjdSlmSGl0eURxMF4xb3NaZH1gcmE4JUluLj0xZTo2RzVJPH5KNiEofk5nKkg9M3ReXnl0VD8jMmgyUnR4bX5TYUlRKl9WUWpfMCNIIXtuLEBgVTZ0MEFOdGREI0xbX0I5JUVMTn1Ycy8wcmJbbkpIY35WcEpFWEg9b3slZ2ZMYys/VXhjQmdUa08+JHhjZlRjdmUmVGIq''@;'; put 'put ''USR4SGdAXzlST3F9KGguOD5WQFdAL0JzPGA4JEVQSzIqUi5IcCRvdl0sOzF8dDM9flV2fWJPQV0+UVs/YGNCNyF1NXQqZGZrJnImc1pWKU1fb0NAM3hDcE9jVkcuSndPN3lvcyxORnVfbGUvJEk9ZCluZCF5OTQqbWFpNX1DKUxFMWtpc05hfmppM30lbz9mN1lsJTMqRnRkKjNQWHFyYCYwN2Y/''@;'; put 'put ''KWtEOX5fb0hgOVFjOWU1ImJ0YTQ+eXtUdG5PRUVCZEc9cllwTiF+P0dJZilEPzcsXVdlcG89JkZCYkkiPVs9NTsrT2BSRVJBWWMsV3FDJDtpRkl5KmdgajtwKih2QSlrUElsSWM4YXM8ezEuSSJISEU3dnNZaztlajF0Kj0rMmFnSDslU08yOzsmOysjJGE5LFo5LFMsOEFNRmUuZD5eOX5lLnMr''@;'; put 'put ''KTlVUlA+Vm9HfmRFelFsNkBNc31qR3FpRzFpNHxPKWBefX05Nj8mb1FvOy9fd2QyL09JInNkNnFdLEtiJDk4dEMhcW0uYXBaY35LJUImM15uUyFZYXEoRStnVWMrRkEuPFVnQT5JIk4iZVZ0Im5dOlNFd24mbmsqO0dNSGJwPWg4OFosJjZlRyEle0p8RTBqe0xlQnZpaHA9WWolbj8hcyZHOl59''@;'; put 'put ''ITJFQSNpMHQ5LjErMUwkbUBgI285OXNSSFluZVMhIkNjWkx3dWohIjooVVRYRHpBanw4OW5JNX06KE8zdGBGN1g3fEpCXUwsWndkNVtTUHVWOjVCRX5hUzFvQmhwbGM5Ml5+bypRWWx7Yk0ubXV5cmF2SD1USX0wJUhHP2BsNE17RWFBbkROS0hQbjEyK24ubTtbMnlTPm9qYTY2UlNmZ0w6PSVz''@;'; put 'put ''aT9YXWo2eFBXT1U1T1QxeiUvZ0UjTilOInt1e1NNYFRFSEZeOElLPDlkKz4yXisrd2pjKCg3Sy97KyEhU1YhOnlqNDE4elgzZUtFRkN3P1VzW2pNb1U2NFVgQkNFbSR+Q2EueDFvWWl7XlklcVFuXWVFSTx8c2VyTEkhS1tVWUF1QCNEU2R7OV5lYUpXfWAmWmR2MUxEMSp7d1Z9UWg3Q28hKCxw''@;'; put 'put ''V29gcUwseD88aVlZVnpuWmF2WWhOaiteVW46RjtpVUdOQyZOKFJmSF5vWTFPSUd8RmEibmlRVndWRWNdSDZuYWprXmBVd1NabzhtJn5aJjNAZ2B1dys6VlRWVzxRNUNKTlB8SFdhM1dELmFqYD1FWDBKIShsMzpWdykvbFVeIylbJkklKCklZERXcylgS3c3IW1aeVdZKk5OTVJAdzNvTGoqPi44''@;'; put 'put ''VSl0fkBqXzNYNWpFX3FzJHNvQk8+eHZydGVpZXRUJFI8L3JRVjFyNFZnOjx+dShXZlVhJUwuJnxaKk5wPklnIV8lTGdKVWpkZTNGOGFidXdWT08lclFzM3pOe1Q9aHpfdCswaCQ3cERoVCFISHpQPCRBMyxBO15QbXxiJC9EckUrRz9ELEY7aX1tYnhgS3F5XWpwMi5qe2xDWlM1eUF+P15kcVsr''@;'; put 'put ''el1VMGtXL1hISHFnaSk2KlFRdyg6YX1aN0VgcjREalUlMjVeLnVRfE4+aS5JbXtCMktTYFhhQGJeemVYS049I11bVV8jTi8uUFdeSGhvZn0lTTtENXxman13NFtzJjlWVHdfezJ1XUlFYGcvKlBqLChzc3ZjTUlwbEo+QGFGRmEsVEt9Uk9+Z2dtdHpHRFNEOyNja2x4MWx6KSMwXnUwcEwvW2Vh''@;'; put 'put ''Z2JiSCohYC52UCFoeF1UTER8bSRwPlRlIjgwQ1pjZXZiPXssNS87XW1aej5HZF0pfFhaRlJ3N3N7T2sjOGlyd3dQZWN2YkloMFR+Onx1KWJAbGV6bTQhSUgvKDdkKCl8Ok8mVzZQJWRuP09NVDdbL3RjcnIlM0tbPSE+I0cyK0ZLYypwQnNnV0lEaDdoTipWS0RydGxDQ3g2Oyg7ay97RihhSDNB''@;'; put 'put ''QlE2NDFrR1Z4IWhXRF1QS2I7LnhYMyNmLExrL1NATCt7LEhxWTw4Kzw7cWRaR0Eoc3RSbz9IJlQyfHlEU2cvWV1zZkhqNjFPZF5nMn5nWUt0e2FzVS82fnkuQTxVQmM6TDEzYT54JDprcDNhNlFFUlJBNDE5Uy9uTl1hTCpKNThMJFI5Tnl5N3xxWU5kIWFbdDQjbFAlVE9rIjQ5ZDU7cFkxRXIl''@;'; put 'put ''XSp8N3BIMSxrfnhZQksuS3hQdG52KnNwYkVFSVQ1O1RIMl83SCF2d2g1YjBdZUdpakgxLCMjPzE3VUEoI0x9U101NnUwe2EkQGlxOSJ2NEckLHRgMj1LMSFNZUxKcFNOTj17YDpaW3hoZXB7cytPRE10PyghaUk7YSxZYzFBdFZtWXlIZGtzQnlYNlhPRkdKVmsqdztKRFQzSCVNY05mX1VYcGZy''@;'; put 'put ''YF55JXA4LiRmPEBrcmpiU19YJHhHSio0dVFgdGQzalY9THFAbU9SZEd0aD9fZ0gqWUo6UjRyIjJmJW4xMVdaZ3h8XzRUKmdRWjBAX0J7U3VObzVqSl5LUmIoMXFjI3E3dEZ3Om5YcVBXT35NbUUmb2FqejFYNmtLLjBxLDElJTMze2p5djh5M1FaKXQuR3RqMytuOjQiZ3RBaG5EKDAsaVFjTmwx''@;'; put 'put ''QWwsWTExPkArZGUhcE9CbnwxWjh0NipvWCJ6ISNiVEk+MSlgQCU9Wn4pSSVWYmlXe2MuakooV2I0MEVhOF9hLE4oMCp7Rllzal8yUzhDPlEmSX1jX15AXk5iRl1uQ08uJUxYPzVTSVEpe3hMNjswLGhZfGxwbENvUzZxPiVzTi45cyk9ey5iPCV2SFJqSmxmQmdTeSt8TnBmaTJpOkdHfGQmRzEo''@;'; put 'put ''LilJKGs2XiNgLkRJQD5uN1BLazxgZSNAQyg8SUpYVCJnYTNfSClAcDl6a1pRTD9wfD13d2hlNWsjVEI6UUxTaHBZJGNyXyw4LnxaJHc2bmNbbCFLNnI6cGdqTzQ/dEc2UmkhYittaSxQdEliU3lLI1hfRXk3ekEwWHM7cFZXbUFXY3t+VT5oYzN+Vi5mUyhEOEQmb04oJjNsZSNoSFd1VGhoZyoz''@;'; put 'put ''V0k1KjgwP3tgVmtwOUgqWHQobVQkQj0xMDY9YVpLfHhIYkNZbnRWbHxKdDZCfHM8OGRCc2JtSnBXRS5XdGd8NDJ+czomeDlnXlFWZ1R0QE1SSF9dIWtOI0xjKE0sPDlnd1MkZDsrUnFjKGddQzlGWCxXbW4/bjg2Z34hXlB7P0NoK2tJVVdKJClRPkZKcXRidEhMaElELksqQGE/Y2k4TlheRzVT''@;'; put 'put ''Q1hvYElQITVCPGJvJm9iejBqMUM6W2JRaGV8TXQsRW5dS0R2cSxyMU5mU3gwZWlSeW5abFJiczRSPW4uM25YYEpNNyI0bHtqaUs+Yn1Md0ApW2kqW15ZSCZRKntJOWQ7VlFZfmFLeUg6dWp2Yz9KLil2RU9+Mjx3TGVGTjFxYl1AYj9xckReSzNLJm1yYUU/ZH1ZNyxULDswfiRKOl89QV9OKlt7''@;'; put 'put ''KzBEPnxDNUxTOUc0Q2UlVFIocERdakYhQmtiPTFmVSYhTWtxMjErZit7eW9mMWh8fV5zaD4mUGd1KUg3eFRgV3RzMUxtN19FY1cvciNJX2FGYHciPmhBfXQ4aSx3M1s6cm16fDdkXixxJGkpYn10SUJtOSg6NXt2MnxOREJDXz1TRGwrd3x2Y0hNbWIpXiNscD1BLkRgPFdQaiNSU1VGPTBiYWFb''@;'; put 'put ''dEomMilfNGA7MnNDak4sdGRxOkt0RXROJDNVb21KRnV5djxGR3JQSVd+NGwmbUc+fTNuVUc/ezd4Kj8mRyIke01+cDFkc3RocGZsJUVzZkx4L2tQeXIoX3UuPjBKIzBReV0mdntkVzhyZkFhbEo9O3lwfj1rUi4+OyUlNnp4bVh7aVMmQmliO0lPYz9mOXJWLFdUVTBvdEV6MzdlKF9uK3J6TGFM''@;'; put 'put ''VDtbXWxXJDQzMC8rIykkczEzenVGMVdGekNHZSFaKjgjbikiMGpfWlIhTWMwRz03R2IuKFYsJC9pZ2NzPlFARjQ9W0JGXnskK0plOmdJKEo3ZVpvZE9PfSolLG9bdHxjUUZUblAvSUBvaE1ONlpWbFcwTiUlMnVgJSQ2MmRlWEZEL1IuQVVaNGlTZmNffmJFJTFBPWwpJTRQa2x3V0oiOU1CcC9L''@;'; put 'put ''JmJeQipuOWtmbUBwc3crRFNTWTVecU8rcVE2PHZQRStYTipFNURmblU8KDhdLF5GWEc3d3kjdFJHNCEjQkUuczxOTiEmKk5na00mJmFOKHBPNSZIKm8jL1RjbEJGTkJWWDl3e1NqREF1RExsO1hdfDBicm9KL3JyK1Q/Ujd6b1hSJDIsNEkoXWV5O0p7dmp3N1pIKyZeQSshMFR3NUFtYHVXdzdQ''@;'; put 'put ''dl1bTHB9UExMPWJyOjMpbSIlY3NneUNIKyttQy47dVBnJER9eVowdWhLYjgmIWJfY1FkI1RWdFFyJlZ5QThzKl5kdzsqNioqbWY0LjF2L2dgKXRgQ1E0LFhYRV9hUU9oU2wvMWZ5VDtdI2UvbEVrRyRDLHkpSSp7NDZ7cUZvKFBBbmsiNns+PCtOa25SXigxPjMva1YxU2VpOlhrRXExZSpDNkxQ''@;'; put 'put ''WXcobERMOD15Yn00STspZnQ6aCJCbUcyT3ZBbVJORCZwOkYpbUlEWTNoZypoJj9kP240aC5odElmfURyQ0k3NllCZCJxYFFHRyJLV3JrZl4kfiFnR0ImU1J4ZlFhXW53L0E8VndhUWkhV2l0WTBmT0szSngjOGZDTXZFQjp4N01bSzhZZjNhJHh1Snt7W35FdlZmN3RxQT9AJDBOVmJpdk1UfnJG''@;'; put 'put ''XXp4Nj4wVns4KEQufXVAcmpucm1ibE90dnM+YWw0NXYyU05DalFtUmRmYXdkZG5ifjwqcSR+IS5tbnMrWWN6XlEvXj9VRnhXLz1WdnVPP3RtaU9CaGNILHdoPThJXmJCdi94P3xxPX49T3R1YD5mTmdZPj5hX3czYWB3dGEueDhAZCk/V09yKExSKiNfJUV8ZkF6bT0sV0ReTG5COCk/fTNMeF9M''@;'; put 'put ''dllVazIib34rV1FCXi9wRjouJDo5TEMxfEVOOUx7UUIjXm5HcHhMc2MhKU1pZzVCYlBnRzU0diwseEVodlRfXmhINmZIUXY2ezRFN3FFcEx1cVo3cFk2WjJIXypVZkE1bU1zPTBvfStMU3QzWzpAKVMuKXVFZzwkd2M7KFBfVWxGWnh2Jl9fX0h0O1NIM18zXTZDUSheUnAkKSZ9OjB6dEF8Pzpy''@;'; put 'put ''JCpdfUQhIkg6Qik1UzZeLCJxUFV+eyExSXRJb0c0UyNaUXsoOTBpRX0zb0FGRSg1MDpCe2YlUFYrVnheLiEoLElWIVdkcD9+eWNLKmNnPi5Iam1+dUghLzJEX3IlKCRwIzBPJX5bVi54SXJdZ1g3ZS9mOl5aQ35pdmc9WS9QJkZFaHdDQypQOGtVYTtoPTE1e3lNRXAxVkVORFBUVEg/Pz1DflRX''@;'; put 'put ''Y3paUDV8KFhwKEtePzZ4c1Z8UkomVWlQdFtERFcuTVc7XWl9eH1ieiUudFFxV1Z3I2lWSz9HK0s3ZT92S2I3NzhmPVc4SzRgfEA7MWlNKiRNKGtVaWB6fl9FWDUuaGFXLns/ISxiRzooTVh4ZVsoTyJdRENCM2ZjIWgvQEBXWk5KN1lVMjxbWjIuQV1DLzZ0QDNkYTt1K3RKaTZ8UGcmdkh0Wiso''@;'; put 'put ''azBKTShQYUMuMXddOW80aEEkd34lMFkjZH1QJVFlcEo1X3FSRk9QcyFwVSt4Wjk2Pk41OyJqemhuM0RmQn19X0heMlVkPF9EcEoiQG93K2t1XUl5M3cjRyMlRHo8IWMhLHV6X2Q0ayYvJDFbN0RVfl5san59fCVZSHpXb29bZUNYeWVMdVJ6XWlbfTNrUyFpOmUzMnguRjlwMDtNQjxXLn5BRntO''@;'; put 'put ''cXhCZUVKcVNmIXc1V1dpeW9HcTImKk9CUFAoJjdwI31OMzQvT0tIRE18OVVdfGohanAmeyE1cHVCXSNue3t1TUF2RVsuaSNFLnBCQzA/UmgrcVtVa209a005OGNZMyFWbGdgW2pkWi5QIXxFfXlfVWhIKihYT1Yidj90X0Vnb19CIm9sWTkrTHtDa15vfX17MElnXWEiMjZCNlUrLCQpPyFHPmN5''@;'; put 'put ''MGVxRGlXTUdZRzQ3OFF7bFVIOykpXTcraV18PCJsPyhHXVQvNDdIV0B1S01lYCt5OHtwckYzJHwqOm86WzQ0WjA4bE1FcGxDLm8+eDZkRDI5VW8vbilgfUc5UyMjZmtvc2ZESiJnPkw0JU5CPj1WYlE9ejYxbFM1Ik1iekR1cVRTK3V7VFs5Jl46R2AxQj5odXxKdz5JS0p2ITdXcG1LVmhCWFQm''@;'; put 'put ''RmAiVHVjSVV0QHZTbWhQPVIrZV5bfHBye08wRzlld0puYjh6UEBwIjE1MnE+bjNHLFZ+MlluaDZROTJhV29aSHQieXdtPDQ9MjUhOjN4MXJEfERNbGhKQnklUVBeNlokOV9aIz9LLkt5fURWPlF0TWZsMihbSHZOcWgjejJxWDw9dTJ5VH5ra315dn08dF1Jek1tOXNmRTJ6XmJgTUsoTHchZCU9''@;'; put 'put ''LDUxTkZaTlZIUC5BIVcseE4ifllnSiZgZ34zLnVvSnNIfSppPD9oQk8/aylTKEVYRispNjNXRlImfUFTKihsQUB3fiJ3fjJiUTtSR2glInAlYUNudD5PalUjRz98Z1NrV2h8PFFvQ3hLMTJHaDckRlNaQl8odSwoZztObT4iYnp5X1pVKj98JjhqdC80YVBkQCteRnV3IkM4VDEpZCZzaSlbKndT''@;'; put 'put ''JXdQUy40QCsrTFhKJUYoXmcme1NVO1BqYzxrXlV6JFZUYVBtTzRBIXl8NzN2Nkt4Y3F7PkhAPklNRUZGRzdJbjZGTzlCbCk5IVdYL3E7WFsqUVA1cSlGX1M3UFclKDY5eGs4bn1CLGIkM3ZZb1JaKExlWXRBNm89P3VDKEVIWDZFTjpxJWE6d0trIjQ4ZjkhTEReTVEpPXNPRWlIbiVvfDk8dDtr''@;'; put 'put ''TllkVXZNXn1zRi5hfkcpNG9FPypPS10ldTs0STc4R3JzOTxGJjNOdz42SEdZa2RgSENiSjZ7b012TCFJQnFvZ3pWUFlFWlEiIX5QZDgvQFlWUCY5Wm1nMkp9XXpEe2o2clZ7VCxjRnU9SEdNe2VeWU05W3IoKVRaPTE0ciRUcnolbCFYS2lHJEc3IyMueXghPnR0WW01MkYmVzhVXXZ7fillfHt6''@;'; put 'put ''XkNoPzw8VHExMHIlR0pYXzBuSjNEK1A5e2prPSF4aHVbIklzWnR1Rkpne0V2fX0xcC9XT3pUUndUKClUJV1DTjNgSlRFWjRDQ0YsaXV4RHIyP0hzdzEmWyZZe2lEfiNdXzZsQWtIY14lflo9LH1IXkxCcV9mO3B6UyxNRUxzJSYjK0tfO310LzYjLmVyX2ZeRz5lXTZVR0ImZGZPe314SnI1PCR8''@;'; put 'put ''QSk2TDtdXSNhRVVxL1hNTy9WRSp5cH5tIV5zXyxIXz1iVEVyUWd0dkttMjU3TXBqY1o3VGgmaklGcHBucFpyYig/USFwP2FyW24oV0JyT0suQGV3eFQ3YjZrc1B3bkZaIVE7IyxqJX0iZlNFYkxzLn5PdSNxOSNpUTJBXUAsMyI3PlMvMnVVSmdjTTp9fk9HYVh7LkB4PCZLd1BPSmBgWn0kYCUm''@;'; put 'put ''cGZ5RTR3SjQuITd2Yi9LeDwqVVZyJkVkZS9IbylHJDsmREZfMiNoVHIvaCNTXVIkOEleOkpvPD5nKXBqJjZRNTxNQGFAZWUydUh7UlRpMyNlJmY7KmRoeGdFJTMuXVV3PnEzPiNka19daVQ0YitZRFIyaV8seztZOUxsZGEhYTFNN0hfOyEjP1Y0NTxtXzdZWEt5Tn5MRkxUWz9lV1FEWil4ekgl''@;'; put 'put ''QEdDZSVGMzhGYChMZ306W3BrN0gwKntPVyFlUWlZQkpNU3M0V1p5Sk5xbnp0MUB+fXY+d25AU0ovPWYyfSVgOnx2JV01dytwU0BmTEVLdzI6ZHpWRj99JEcjNmZiPENhe2FCfjh6fF09QFthNV5NOWp2dj1LMWFjSmtEREdqZD49Kik8flNRfjdCfWpyVk5FW0JFRVNxKXM7PFpgVC5ZRihALjZy''@;'; put 'put ''P1hPY0k8KGhoKG52UkouQGVPTz1QSUh8KGh5a1ZyKlM6JmlBR1phO2pzZCNwUTwuaSksU24zZlgsUXc3TSswT0RnUCMzPkd8IzcoflRmTGBZZlppb0ZkSGFCTnIjKnQ8I3RWXSU+NGl8aUBiTHkvUnE+MEhZbDlRW0E9ajlpLiRAYmRBfkc1cl50cFIoQmNtNzh2STwwWnlePVgjZlVQUj1pPWYk''@;'; put 'put ''eml1ZTxabXhTLihaRzA+O2dNRU5ybkowQXlIW14sekhQNyY+cklbJT0ia0Z3WmtSYmVyOlltfSVESn5BcCMvejsjImtPNVNPWnE7OCFHMFQyZDVSeWFGbj1+OFJ7LjJbYDV2NC5NQ0R9b1B0MlgzSFtIcW50XTpWO2AwK3h5QWZ2JUdhaEVUY2xAIXBGfFRtZjxMR2wkbiF9XippOWp5TkdiPVRa''@;'; put 'put ''dG9dRnpgcGwuJDZZdWl7cGkkVn1SL1pbcHFiQ2crVlZidDtvKEF6NjciNFFUKT5MJGYoUncyMCQzVHRyKWtpRkBse2NZRFdFOEY2aEBCXlI1fVpOdDxGIjg7OFJES1tmO2BqTEx6NUMud0daYGI+XlRHbW03a3FXfnV4d2FEeFcreUN8RyVNJmU8XXBVJkJEQml8fGY/Rnx2KkA2ZENAfkwuJXpu''@;'; put 'put ''UGwuVDVVWzFsJTNTKmR3ZndROVVwSE43Xi9eQEUqMVJpSj1wIWg+PURJKEx1cjUicyFpbGEiV2RaNmZlK1NJZHUjdmpwRkMxY3prZWl1a150SjdhVSlBbl1OZFMzYlAkP2JkfU5RXXljVWM2c05ENFFYRDw+cjEhe1k6OXckcHglS2FmSj89X25oLitWWyp0VXIoZispTzR7RTxBbjFOW1c5enFS''@;'; put 'put ''c2BqU041aTROJWNkMSskOn5scDQrIkRSeVk0VihnPnZ9NU02XjcrODowYzkrY0hwK3xydHt7JiZdVTIsYCxBNGglamwiaihdaF9AYkxtdWM6TDxzLyZzdkhgUThuJUVENWtjZ30uWGp4S2JKZiY9SUVCZWpERT99NHs/UkJKZXVrNV5NMDplfWpJMlV4Mlk3LFYxbyFtViN+YH4oKWFDXn5Ze1dC''@;'; put 'put ''K0B8anRFcmYvVjpiODFVflhTc3NrNig9cVE6aW5za1FMd2Q3VkwpKjdmPSN6RyM+dE9nOnJ+c3I2OChuYC46VSJTWSM9STNSaXpnMDROezBqdio+NUZdSzBPPkZNeW5tLiFfIXMoekQpd0lUYH4/QnBTT0x8MzJxdF8+MU1jNm43QEE3UHpoKExLVUxKKV43TFZXY3RDcltTWCFIRTBuKW1JQ1t1''@;'; put 'put ''MVRDRm1dcDd9YyNxeihsYHcsUlljbltTTSJtPVhnU0B6Wk5zVVkwUXJBSSo+SVhRaC58SkNmcE4jTGwiS0JSX25ocEo8OzlqQFEqPV06fEVNX3VhUTwsbUJZTixQLkJ9bWI+OHpJb0h1WDNsITV1KEZTP1J7PEV8Y04uU2BKKVZYZDlgQSQ8TitKU0ElQXhvZHE1L1VvJmdQSzZ9KSZOTUV8ZkJh''@;'; put 'put ''NmhOMHZnVWtLYiNeTFc5WzBNd1U5UT97YylRPlBTRy89PmpaQEpMcD02InFvLDxhV2ZxYCYwVDUxdiM9JGpFRWJdb0R8bzBTZjRXS293Q1MsTkJrK1MwZDVrR1t1dFtLNjl5JiljWX4/cEE4RWJsNTRQVVE8XiwsW2hlR0pLXUpsTHBIeF0+UGd9eWtXalN0aCNbeF1TO0h7UVJSP1BpRzdtLigu''@;'; put 'put ''b0U/P0k8MmcvS15UODxsPD8mT3h0LkNoUC9jbjdJIzd9YU57fiMvMj9MMExeWVFVMHgvQm9QbHhCSjV3YSJZcUlIdjRaaCEuYHJTXU0uXy97cGAsK3h8LnwrI3VRek8kN1lyX21+dD9JdHRJVD0/TS5bQDosbG9AXnFgQ3l4Q34qdzhmOGt+Vjt0JmdFOWwpaiQpY3p6REdhYGd6XSI8KkMhdSkz''@;'; put 'put ''dkchUSZrbEA4WTxXRXdEe08kXT5STV8kbXUhbThpPn1Sc1Aob212XW5XcFZweGNIU3EjQWxFYXJgfDxNRjhQe217ZFR8NUB1Q0hvY2xNaHE6KlJGcjgpcEVVLiRBXzxwZ10xKT9HLGM6VEltQGFbbGthRndEUGpYbXshKTomYCMoVEhpN31IVjA/IXBORSh6S2YiZ1tYL3JobmVCPCFKazF0VUli''@;'; put 'put ''KHViPWhLNVFQQGA6Z0xGeWZHbmdIVG5WSV5aRmdBXyN2I3ZFIy8wYW8oYiVgd1tEMCtlaXNXM3NxUCEmXWNuIUs4VHk+Lko4JnxfV00wV2M7QnBBL2FWTiplS3IwKmt7Uk5oRVZRTiFNVDVreWl6VVAzNjhXYy9CNmtvSSMiI25uczRBKmNhbnVOMip0flRsPkYuRmkmbXlaeTM3b2t1XkBlMTJ+''@;'; put 'put ''ZXZVQHQ2LHI3fHw0cURZS1Rhb2JiZnlGU3I5JjZWMCZ4fS9tQVg1eGp6fCFxUTpYQ19YdnFrWmVfWEJlKiQiKX55UGpjJlNfLzY3fn0zdjhbTlRNaSUlIUckOS98dyRLMnE1YWNmKGNTKXNGSnwob3tgSVMyVnNedkFpPW5wTj1AL1FfPm5lfWhlZHI3TGpQZm9STGFFYjZ0R3lETE4pbVlwNGdd''@;'; put 'put ''ZHhva0U2ajlCZkNoQy9QXyhqVUZpLjZfNnUpXTUoN1R7WH5TUzpUbiFoOXdNT2N4UDNSJk01LnZLUEtANSFNZTM5cXVpSEM3OFd1T3sjL09UZSwzQ1h5M1IwMn1Ce30/RSxiUFVpIWpbNWghM19tNC4rJUBuOCp0VklNMEVsTV84XXYzNGFTN25dclRmMDpLKGshN3QzfUo8S2dqamlTJmdlWTJk''@;'; put 'put ''IXlZaX48QyVqVkNkRDF9M1hpc0lBJDR1fnk5O1lmS1Z6cGldN0l3JS96b3U6Tz9FdElYJT4sKz93Kit2QndHYEt8d3tnfjxhQmlzV0dAJUI/cHBQRyhtdChHQlM0WE54dkhrVGg6KGtxNnRselosM094TlpXb1RGWz1gUi86QXY1azB0JmY0fjYxKnlNaXBNXkZNbjJ2eG46O0tAaS5ZYF1UNTxg''@;'; put 'put ''alpyIztpLFdgNH1PZncvbCNub1lQdTNvM0N7dlNGPiFeVnRkeVI4fSpza3xINTZbRTM8VFBIemYzPltOMSNseXFIc2tOQSwmQSsienRGKjRgQVpyQGhdeXpibyNtS2klcVRmRipXMk9kRHJEWUBudVBMLEVmYypKWyg7WGM7SW4sNV0qeXYxQXxnbVA8fW90QVdNSW0jOSs2IT1tSmNWP0JJdzl2''@;'; put 'put ''LmBuUnFqITw9YWlBRCw8JDJbb1RtenBHTUt9fUVKLj16NyU6Lzp+ekRrUm5lJC9PPixxaD1WM3Q/cztGI1s8YEJ6OkU1KzcsPWFdV0tiPHIySX5iL3MyTHYpND9HYjBfZCw3MzRvZjAzRDBeSGd7XV5qMkFjIml6U0U6NFlRNyJHcXFYOEpVRUNrJVBwVl9vKT9Zfj57UiMzbDpKaTdCMDFGNkth''@;'; put 'put ''LH0ldzxnK29ba0Q7PTBUXT8xOCRtO000Tk5RRXNAVT1tJUhjNitvOCJdRkdxTUFqUEJBSTJReiEmP0pBaDphYHglRFs7KixxcCk4R2dTVVJnUSpGdHh0NG9EaT5EKztyZFU+SExWSF0jXTF3MmRve2NESHdyYSx+NDBgTHpjcSpqdEIuMHsiIio2NyhjJSkiMVlaVE9OQHZ8UUo2ZigsTit1NXVh''@;'; put 'put ''SHZKJkR7YSpBajdwW1tlRkQuRStTTmI0NFtXb1Y0P1JKZkBjLGdCZV5hdS4mM0RMXixIOHYqUGNxTGIqNjRkNl5xalV9SUtkPzRiMnloczduPU9ELlsvVWNUNlM1Z2F1MU4iajxNKWgvOGNdSHg2RzApeSpfTjRzUGMrQDIxSlVdJm1VT3MyMVV+NE9MMVJMQjkhe3Q9VWpgcTkoRks0T2E4QE8q''@;'; put 'put ''fElpISluT2pTN2xkOn11MjckKU1DJWhiTDRIWWg5Mz0sInBscD5qdGU8ank+TnxRREIxSi55XTFCLz19UDd5On1xbHAkSU9ReHEvIWd0aEVCIjZDWGlsRjJ0PjtRIltTX0hkOXtoRSxvYDYvYDBXM2JAU2YsYzRJJi9ibXN+PkBjIU5ZeTdGJFNfNkgiJFJ+eXVWYCZiNjdgU1lSQm5eIkdtSktn''@;'; put 'put ''ISl5SE51WUlLYT1MRDNHczpaY1Y9SG4ofEBmdWZ+UHcmJTFoSkhvYTJRRnYyN2MvJUgkLEw7ZmhKTUw3eU4oOGNXTyxsR1FFZkRFcklDQVtWI3pXMWQhRy9qKD55b3tBQTI2LigjZig3L19UVl8xeVgjQTZtLm5xZEwqPSZROlBGYl1ZXUA7cnZFPSklLEpHbCorfWF2NSNobHIiP0BgS1NkTHlr''@;'; put 'put ''JmVSbSlVTVt1dHhfczpPMWdAenNIXn5qWSE0aUYwP2FBXWI8PHdCe2Ftd1k+TE5UMU8rWWpadTsuU2FdOmdQTXpqRSN8fHxvTHl7RCJvZiJaU2ohX046bEU0aXN2IXdKVUcwZmJDZj0xWSpwW2cuZjEiZUo6c3o0UlQ4JWVvJU9PL1I6WSZubC9PaHd7YzssNnYwLF9LOlZKUz9iTjMiQUZ5S28p''@;'; put 'put ''dCFgVkIqYzNgV0d0MXpzdXspPHJQSFlkS3A8TVsmPHlUKlZtV0Ekb0wydl9nfU57e3s4LkhYY31PV3l2OntMfC8oWT9HXU5kIzRjRjBkWF5qLjBsSHQmYSMuZEZ3WlRKeT5oQEk8fkM9RX1AKnZXfC9feGh+PXkvWHxDajhUVyVyOH5fTWRfUVssWD5ZMm1QYnBtQVJPVHRnYTZPTWVxeEpDNjxq''@;'; put 'put ''eTFkcChOeFd1PW82cl5FUUZ4aj87K0xWMSVpJmAscFJUIjZZUl06T1JhT3ZKT2pWdEQ9ZV0xUFNZOE5hU0BKdCI8Smxea2NISGt7OnVBQ2JFNTx7ViZzdE1VY2okU0k5JjpjV3lPQD52ViNRQTd8IlBVQ01XY1skNktNWnB+WGQ1N0dENmswLiRJV0BQSU0ubmtiKW43O19tcEhJSXI2YllYeDNt''@;'; put 'put ''RixfUkBzVjRpdC99UU4/RG5MQGtEK1AhJmE+c343MWlwPGlqYS9EUihIUlI6T0VkY0Q5MyhjNlgmTE5nKGZiWD12JDRaOyhpYC8hWltuYHFTMiplK3UiO3lfI1pUV1tSY2BTbXVXdTo5Q3ozVjkhW1RMPWhXW09WMlUqRXJgS0MibVV0T3AzWnFRYzhmP1l8fV83PUFGOlhUbjFCQFFXYmAvcFBN''@;'; put 'put ''PWpgP3RZOENbc3dHYnVzWmlkQk1lM1pCOWdKSCR2Nn48NTFobz8hMGFvVGQ1OEhjaWU2UCEmZTVfbnEsQkRNVUQ0elBzY0IkNH4pR2RvUmtnRT1tMU8/a1g7bFd7KnZhKVlVSTdMJjlOaj5LOW9MWm1BJncjd3dbcmM5cGB9dEhibUVqXUpRLysqKGdHUlFyLndPKnh0ZjIpcDszRkxyZnd2ZUoq''@;'; put 'put ''UyE6eG0wTG53eUlfQUZgeXV4YERNfnByI0I/fHlGKVs1SV8vbkpdQl9UKHR0fkslMHV6ImJoXix5I3ZpPzRsfjIkfGUkI2o+eV5pXmEvTW00QWtyKXI2dUhjcXUxZW1IMSZNIXVWV1VNTz02cT5aKV1od3BBMztYZDBMZzBXZSttSk8vRUcwcV4hanxuZD5bVDdVKC9ZRDpaa0xEQnI3ZWtKVChw''@;'; put 'put ''KD9lJSg1YXl2ZHdfITxCOiQ1fnMkOHYzYUNta1tuKjFSKnw2XTl2OnAwQ2VDQiRCYSwzXnFedjpWMzZydiMuMn5vR302OSJHXkZ8bn0yN35IMGc+JDkxbzU6QyNJJmJucU9RTENTZ3JNJi46WXJwMVlyLyxHVFE/dnQ7aTdgcllYMU10Sj0wcnxZOVUkaCx8ciZMQ2wkSiQsVyZXKGpCfChLfjJ0''@;'; put 'put ''fURWKiliQWBxNHUhOzF4OywsQktbIlVGOjBCNnBfVU1LbGc1UGZgK3Y6dGYsX1dsMT5hUSZlN2pmPSRwbEtFTE5JJmZybG9oZXp+WSQ5VUh+LndyXTt8P2hSWl9QfCYrMmkuUkJQOTJwPTYoQT5LNDpxbjxrUnM4d3ZTUkxuZl9jPEg9OzJPb2YmP0hHcSp6bik2a3dsPG9MNnMpMUQsIVMpYE9a''@;'; put 'put ''RXx0YnNYJWc+dVcuI0Fgd1RUJDIqTSMwUlFhYDxvfmQ+WWpqZm5mdWVoSVc1UUNkWFgjTSp1cC52WWJXOjE1XTkkPE1EK1JbfW0yfntaaXNlTXQva0tBYzx0K2cyJGcjcTVEa3tVM0ZHemtfeDkiVVkoZXhEJjdKRCxPfSlUaV90XSsmdDkjOiRLNXo6ZTxhOUliRE1ScndEekZkOjhHeCJwR2hw''@;'; put 'put ''aUFfaVhmSSNOUGB0OE5fXkdebyxMfmFnOy9qMV4zL3BJe2VeWXwqUm1qOUNmZn5CMDNFUDZDWWQ4X154WzFLaT1eKHtjezVhfWojZ2gka0IvT1o8JDhFUiFYRG5dJGlfM30+TjtPRm90N3JDb14jVmcsaF93bk5wQXR2USU4UW08cVhHbXw0bXVEUGA1Nzw9ZzY3IS8iVm1keVRqdGw0ako9Pnpf''@;'; put 'put ''NUhWP2p2QCRYUSRqRSRPNzQlZ2BuNk5PelY5dSt5VVprL1dwbClNVVhELntfJTVIZzZnP0dlMXl0bEJLKGJNa2tlfC5vdShdX0hyP1kpMWw6JXZ0YXVsYnVLZVBpVGlKbmpGLmhWOjE6YE59YX1XMGJEelBAUXRhU2c9QGx1ITN8OlJiW2Jmd0pHWVAkJUwiUVNlI2MyR2BLRlhOWDZGJDBKSDR4''@;'; put 'put ''XixSbnZiTnFmdjhve2EyQEl5fmBGRHJQVkNzM1VIRj4rQWtLJW0xPnRaV0pseSNnT3xuYWE9XTg2clI6Q01Lam9hJFdWSy9belZ2NXx+W05wJmddczNVZCFZcn5jcTc3L09POmBeYElbdXQiTU59X3Z2d3VSTFFReH13Q2MpW2xVM3g1YFFGRSxUeHx5a206SC9STHkjWH48PHRdZz5SOn19O30/''@;'; put 'put ''ZDlaM01FXlkwZzBlLyVkR30mUSZKJTI+MkJmNzgvWzwsVXtYLjQyVWgrTlUyLjUmTEVBT0JbamRAWyFnUnZbL2QzMGtjI3g7cFNjJlNFeUNkUEtYYkZAYlokX15hMUtTTVI+WFpYdns0bis5fmdMKF9NMlYyYjU4KCpdemtnTzA2KT5KcHMuKUttQTs0S2NtRFNrRjQkMkpvPCUvTEpbNTo6cU1R''@;'; put 'put ''JSpSZiJ4Y0c2bXc5KWZzbGpAXllLKX0/X2ROTkJWZ2RAUm1WaTdvRy5MS0dXLEAvSGxTUWEqc3JXL34rc0xkbnx2MF8hNW5ySyZPVko9RzIvUiU+enQ1RWwpXzojK2pdcUA6VEdmSlpkJWFgdExvalZ+TCh1MDYjODckc2RQTEB1KHJMJTA9X3FhZSFNY3tAdUJeXyIrTV5hampHWGt4TyYvIl43''@;'; put 'put ''V005ZWZsRCJIQHF+e25OZEJYfWd9eTZpKz9uWDgyLiohZyRYVFcqanpsM1cxKHNJZE53S0ZsSm5NKFp8aDIqRnMpc3EoXWoiPGB2QF1hOk1uO2ZhRmlRQFhXa0V4Q2w8Ok5odnBxanVVPWpDOEBPYD8kN1Jvd3pld3crZ1oiZG9RZVJzOm5tXU52dSUuNS9YX09RKkRtJm91MltkJF1oKUxEbEtl''@;'; put 'put ''RENqNzxZZzNgaSg1eFZZOHdffURAeE9WamxCSE5nMl9rPUZGI3QhZ2xjTXxLO001bWdgSU1rMXs1T189PEFOSGQhKywyKCQ2ZGpNJnB7MnZnWC9XaENoT21pKChYKE1yWFFCOVdrNCQkVVAmMldGRWt4SCJoREh2VT0sWE93OEJaKXZvRGs2b0hIYyQjWENARHpSIjUyezFkIzw1NTl0VkxpRzNU''@;'; put 'put ''R0BhYW03WDhIU0RSME45SS5YVGE3IlJZJFVDfVRQZ09xYmZKRUlGNn1XPXl9bFkiN2BKNDRQQUxSTnAydUNIRTUxRj5oX2RESyZiW2x1aX02dXg/KiRCTV93YSppOU5vczAmKVVhc3FWMzd1WHZ3L2VURitvT01BYGkpfUshcTtvdmh1T0A0az9uekczNHFNeHokMClmY21JMH59W1VbMy5Jbi8z''@;'; put 'put ''Vko8KWpLJGIlKzhRbih+QSp8a3Y1MF0vVG0xYHZte2YvMEFuRFQ/Oz08NVNoWG88PDZxUk1xQlQqNzlYanAjSV11RyV4fDQ/ZkVwa0RJPChgKVNtKERHVzsvckVPOyZNRjFyNEVOPSVIIUM2OGNYek8rPUczKjhZM31sNTx7JSEiOkkoPGBXfEkmYjAqaGdCNTRqXmc9NVdwL2pmdTg4c2J3fTQ/''@;'; put 'put ''Izh1LCRnNX53KUZZenBpaStUTWhmaS5tampzVEU4PikuTHApNnA+UUVEYlQ1MFh6RDJrRDh0VSxoOlBYemUiZ3VLYGVvMnVjVWpQO2gsaHg9Ji4ibj1DYm1hJkFCOnErM3tpc0ZATH0xeiE0MTN4UCVMe2gpdUo4KGMsNFpmSSpLKWwrfl0jQCNmI1swOnksJjFAOk1+TC9GfXQ5aHU2PEB6NCVo''@;'; put 'put ''XVZXVC9AMEVXeCNrUGN0a2ExVGZVVWJyb285UnEzS3wvNVU2aEZ+V2NtUF95Uip3OVM+NiUuKnRZckxjaHxIeWlPMnVqcGVQOjUrWGNtNmVLY3I/MUp1TSl1MypveF1OMylkKXp2VHFZKkdSVFcyZjppfix2Wit1SlNPMl9qNUVtTyxkJDJ4MXl6KHpfRnB1cnkiPX12VilmOyRPUkZHNEcmemVU''@;'; put 'put ''UXZFN18xIjV2Ij1CazNgZUAjVyxXcEZGaWVDSVhiMnlzTFNePyRnVjBgQ0s/NnI+bVFJMW0rKlI4WUpOM0plZERIJl0sWlJlUlU2bGR4N0ZkTDZnb3g3LjBSVDlUPWZzVTRCVWRPI0AmTiNwbkQ2L2huekVFMWYqfFZ3Wl1OZnhJNDo3eFc6e1JIZnkxJHNvTF8rOCw5NEdgPmd5a3xaRkdBJGUx''@;'; put 'put ''cXYqfTFgPERId2Q4KSxAIVRedSteME1zUHFsYE9pWH1BTEAhfFp0VkJuNkdkNy4qX3l9bDk9RCFUb19MMVVKSHhQSFZAVGtjNGdRY0U1TSlFWWZyJEU9JS84ZEQqbWw5bGBCJkZIYl9fdUthe3JwSz92Tl0lengvd351fiZOKWIrKWBwRXFhWylzeG8yZlVLS09HLFQhbipkWjwjOXY9UG40Mz1l''@;'; put 'put ''e3ZqU3IvQDJqfjhAWl41RV5FcX0jTmA9In1sIjk8WnVDSVdtZVN9WyptdDJFdEc2aSIoWCZ9Ljh1NFt5O2MmWDFVWHNsKXp3LyxIIXBUQEJrSW55WlN6NkMwMDZxS1V3dSpje2RYTyoyRG1HcFIhaDo2WH0uRkoldEdFb0JGYSZyV1FzZytzWGpgSkAzeDNGL1BHbj1vfDJjXlNJMz9sUWk8Nnxa''@;'; put 'put ''cF5fM2ZHNmlPb0hfcHV1WUBnPk02RH4sUHBIZjUsK3oxUzZTTmE/WSQ2aGUhUFJjISNbVVlQdCl8VWVbKlpyaSUzP2JkMjZfUVtuP0pCfUssU3l0LFY2JV5Gd1R8NndxJiNjaTZraUx6LkpeKDpdZTA3MyYiazMhQDBmOm8kLmxrI2trMGY9UVp0OVB6RVd2YUkyYGd4Lm11eSosSClEV1gjfmhR''@;'; put 'put ''Xll8SDxbKC5TNk1bTTBqPSErOiExZl56cWp3UiQ0KDhzQF5ZZ2suOz9yTlQ/WmdrLkFRNkRCUFA2YHBiKzcpOjQ0dzdadWMzYFJjMFBzdjxyR29TcmheZWFaOHFoVnMoUDMiKSwlJiQjfjBnOT4kNiQoQDFCaix5O0BQVCNfJEh2S3YxdjBtS2QiZzFQbT1AdGhWOk5wTHVROk4pSzteTDR9TV48''@;'; put 'put ''P3BGVWh9Rn18UTVjMTY1MFNbRH5aIWx1WmVCdUZQJVB0SVhNfF4iSkJPKWZ9YWd4S29+ajRPaTA7OmEzKU9MYilWY29aZGhNYUY+MjBpe3ohJVBwZWM1N1Q4WzU7QCVxZVhhZykwbjE7QFJdRzQ/OkclOCtLfVVAO1h8Lk13MkNIVjl2YUlXdlteLiFgPWI2TT5VR0pHcyRnXSomPTxiRno2fURU''@;'; put 'put ''PmpMQSYrMUtCUihtKmddRGtLUjVlTE95NFlQMGR2NTF6c1ZxYy9MWVZ0dHRwTzVKQDsmPiFESWM1SXMweWRlIWh+JTYuNmlCbWJGMEBOSF1yS1h4dSNSLGxOa2skTnlARzIuOFN7PiEvZmldN1hTRihhREhzaEZIc0dzciokSXlqKGthM1IsKSFSLkQ7VCowX0BDLkVDLHluTWZ1YWxZIj42dXk7''@;'; put 'put ''Q2ZUfTZ1OWcuNXhheDBObHo0Xi9EZ2lPVCVLYSk0X3JmZ1Z1TzliWV1vTk9lIXNjSVhCaEFxL3FfbyQzRyFAVz5yXjhWL1N4MkIvNztFTVRNZ0ZNWmBea2BReDI/I0NjTyw3LEJYUjRwInBmK1JnNGFae3BPaTxLdTsoPWdqKWo3IT55dTFhNWIpdExxWldNJEo7ViR8dCpZNWouJW1aJjxyIjk+''@;'; put 'put ''Q0YpJFhmXm4ubW01V0UxWiRvZkZqWUY7JSIlaWVQY3wyRENqUVJ5XUNIOVMwW2pFRlRvTEsxKzgrYCRZIVpAK09rIUVFI0p2XzxiRTxaJlU6OiRNaXBpaTlCZyhoRCVWPzokYV0yQTRMeXVUYWd9L0ZXKUlRdUBdK2JwVD5HJV5bK35SKSpDVlgkSXA+KEBTWUh9I1F2WywmS3wvPz4sa3ssY3t2''@;'; put 'put ''PnByUjFWQX04QGFWcXU/IW96bUYsMlYkUnNOTkFgQUplQ15TKTMzJF9iVj48RFhzJmViejE+RX5NeDpwdUY/d2ZOYFNfUWU0bEBBajg8NjB9VWk0NzMqajsmaztzeX4lTFFtQn5edFR4TmFILixwfGZMM2kmZT5bTm5DTnU5dllkdSJILylna3k5SUJCWFIhc1hvTTt9O2JBPk5IS2N9VTFKPWki''@;'; put 'put ''R3RRN1I1SUYqUS5PYktpQXB8UTloNSpMW2xxKz9kZU57aXhqSmpFSkgyMk9MIVVhKW5bTW1PZT5UdiVHSHIsYWBDLlJSOmFXdkpvYXpQenVSJkdieTkhakllTyNMPHhKYHskYD1kIz5URCh0Rnw1MGBmYiJnWD1IKXZFaXIya2IudUdeX2s+c05iaUVLSCQhfnlxRUd3cUVvKUdDRFNPWHlOVyk9''@;'; put 'put ''MERKYXt6MD1SQ2JpIi4qQmtDNGtfW3U+YSJxfXh8S3BnfEJ9bjpnWCk2WHdbLnZkN0dPaUlqd0BGPnkjIyhdezU8Q3tWKitJPixjaVJbKit+fCg9P207JlU6djV3QEgpKEhGVXd5WGpgMkw6NXZ0PGh4QF5RWUZ1RC9Sam9Pdj5LNGdFVk0iJkM3b0RZTT0oc05JPkk8dmJ3QFI/YiZJTXR4MEkl''@;'; put 'put ''UE92Ym1eXkFxdn0xMkFUfHB8SWh4cithLkd4LHIlSFU1XUxmR0lVIkQrQWohQj9dWz4jRV84c15vSk15KEJ1Q3YlW0d2JnRzbk5ZMjB+JSpqJW4vQ19aZHVAZ258fT5uTURZNj91Y25PI3t2VUIyQHJMTjU3bVloYkJxdXJrektCQm43N3crMC9OO3d7M3pDWiY9OSN9cD9fPHRYQGQrfF1BPmFl''@;'; put 'put ''Wyk3aSo9UVRGYUBsSlc8XiMwTDgjcXE6OktudzYqZjxzfEJ2V2pdXy9yWVlkekZnUW1sU3RlT09+UnxVQSFMUGRrdiJEaEdIYTojO1ZCMlN6fFpVJipKJUUrMlJEXkJnQUUqQ0IuVTR3bkBpUippYSouYSEuIVVhbEo9aVh5e3I5KUUwK0xyNExeOFExTEAqYmhhN2shPXhENjBgMEBpYEJbckIv''@;'; put 'put ''WEAwRkNNeDlqemRSWElFRUdyaDo9MVp6I3ZaVHR2LF1qZylde3xdalZlSTx9d1MzZVNxRmBaP0JlflVvQXdxdW0mckZBNDg6QWsuRz5OT2YkYHR7cDp5OStYUCpoR1dkaThqblspXzpZQVJiaW5baCtOT1FTN3hAY3NPSztdXiRCdT5IJkghfDpgNHtvSjxsRCVufUJ4SlQ/TEA2eEI/WTZMSUhg''@;'; put 'put ''OmNve0ouZVZIfW5ST3QsJTpmLkliXndDYEZINDhfbT1RNFs+SyRqRCVJbkUrZ2svWTYxSnw1T2ovak8/ZGt9dlYpKFBmMERkTixbMWxrTXh8bkhBWjhjQkE/NjA9bHlZfj5kOmlWc3Y/cnU0KVtoMyRlIVssc3glIV44QmZNdXleVzlVd0BrJUVfMDFUPXVxbTomJV1CYXh9JGBsNmM3cF0wSUx7''@;'; put 'put ''L3AqaFJKKENYW0tJYFBFei5iI1pDbDZkc0ZhNTZaUTB9YGA8PyNISlNvZC89QiRlY0ojYVNaZjcoRnUiSWs0JCxURVBFP2YuWXhlbURnMUNFbEIrYkliSTw+Oik8SzFUMF40UGdiJCZkRSYoOXV+by4uWzllaVd2dEYySXB1Yjd1WzddbVRmNTBhaWdPInAsUUZqWHkzajtkMGVPX103azBTLitV''@;'; put 'put ''MnlnQmkye1UyQ3NUcyh4MGNuJDM2ampZeDsrej1seyxpT2ZRZVpNW0NCWnRlK3xvR15VcV80ZTV4QGo0I0xATzhiUERbXkpsKyh2RThPU21fUTgwSDkuTmlLcCV3cCU9ZGp1by9xN2t7TUZxLypCW0lpLkZvaTNDJjdwOzQ2eE49XUNWViNKYnwxQ3pgKEoyVDUuXjc7eHNualV9SHZnXjNbKSFa''@;'; put 'put ''RTVeOTwyRVs2O3VJZ3BNOm4kXlIiSkZRb0A/XzlKMVhxL3c4dEU+Lk4oPDBYP31zUjF2U0V5Zzk7UUlYb2YjNVclaStAO05pLFp4VD9Pd20ifWxGSGxgKlVUPzQ+OSlzZ09ANThuUERISzFMQDhEKSl8JFh6bFhraDNKZUBTWWZtR3VgdDN0T28xSiNMS0swXz1oOFdlRUdIeylWRWtlI31OVj12''@;'; put 'put ''JEppIyopOnpOdjIpKHs5O3swXypCQC80QnkxQ3MoNiRANlFYKG51KUFvZWd3TyNkPXJeUGVeITlRVSNkXWZbSGJ4QG5dRj5SU316ez9MdlNvTVh5VWx5XSQ7eFs4RGs7TjU1bTkmQzJ7Ril1WGlkRXVNUVlYJlc2MjlVLGBIMCtzcTx8VH1nUyF8R2Zrb05yWTYhQCVjTFlgJjIwMkhNKjI4bTxV''@;'; put 'put ''bXRhdl16NyV8XTdRaFIyWXtpTjNkWEtFUVFGQjslaUlqLmc7Sjx4Y0sjUFFGVDFfKmtCIlkvVWQxaEN1ZzN2NSV6LmRHP1RqITQmRTghKV9pLk9USTZENSlxLF9JO211PlU5KGNxNTFIOWUoV2xSMmt5VDVrbEJkL2c0W2gpNG1lVlR0JUhrUi88T0tLVExjI3pDfCljXWp4PyImQ1lfWF9MOmko''@;'; put 'put ''fHI6UGN5R1R3dEVDU21CdW0lN2MhRyM5JEUwSzYuKVg3cyhSbV50TX0lbD47cjAsM3dRK28sP3RCTUlKZFFgKjVwQy9ZaS9ZI21fKy5kRE54KSokPDMwd3dZPFFvIUohMm5adG91SiMjVjh5Rl0zY34vRyQ7ZVpSInhXLEp9KHdJLHYqQklleGdkMWprXUhMXnhpUTBKe3BoZCY7ISEoajZ3NENQ''@;'; put 'put ''ZXVFfV8hJXZVWE9AenhMdzZvNGEyRCxSaEBeaWEuUjhQMkdwZjphcSVEfmlUREFfZ0BsOiU9cUpTcGVWeGhlKkZMVD9KbX1vTURKU09QKXBmOy4hMS9FIkB+WFt4Z0ZZRkwmQzltc3pPSDZrfSFHfmlnJlFzSlNqUV4xU0BuPWFjSlJAKz48PyJBMlU1U3BRT1EwaCQxXUwlN3ZVYiVnPClMW2hj''@;'; put 'put ''QXZVamVtYUpFdi5sNndlfE1nUyNsO2A8WTQxIzleaGVWRkFGc1l3PCR+ZUAjRnlQSDRSTUxkXlk1VklnKGVgaHBtSHwrYS9ALCtPQnc8VkExKUZBO3JIV01NX0JKU3ZhPDVVbEE1PWs+RlV5ZzYxa1VzLipJKV8kaVhiX3N7RCRvJSJSQFUsXmlLSC9aNCtgellBdVA9QUMpbi5pSnd6PWQ1e1Bo''@;'; put 'put ''NG5ZUFhubVh6aGU5VntVfCIqdEd0cSU5fGJeSSFpdkgxdERbTytkQjd6N3B4cFlNbmF3YCxPTlloQU9KOm46LHFLbHEqbyQqOSJLO0ZrVjhZN0g7ey5MeS4oTmJEXzk+LkhmSzFVbChuXnA9TDBYdGQlbD0oWkNTL2VSS2g5Q3J8JFghaU5zQUpEVGA+InZCMjlZQXc1IkgkQX1yd0s2d1dLTWBM''@;'; put 'put ''eDc1RkdQaCpoL0dTcHR+dkNEO0oqJXxCQip2dW9Idz9wMkBgRyFQTVRKdUprViNmbFl8SHhRbyZmNFIxa2VVWiJbaDQ6ImVFZDxrQmojSWYlQkRaKk1qOUZAKT9SLzM5WUJdWWdbaiNUJC8wTSVDfmc8NVNqcUd6WkQxdlNEWC9NeltteW0rX3VEKSxuTEZ4JT0kK3I1O0dGcXJgJTM3ZUl6VSZ7''@;'; put 'put ''Rz5fKD0iYFBhNTteM31jcHgyZkBaUlFqJCV9cEJXYHlJJSpDLz8kLlQ7JjVSL3NYKm1RSV1vXlZWdDNCUGZdOk0sZGBQe1lITURxfnI+UCJgJkJvYGVbZnhxSHhJI358TzF3PE1mKTdvRmxqOVNWS1FhWltfVyp0Z3VvWXE6bkxJT1FKdmBSe0VNdWM/bXdDViFKJGBpUntESz8xSDY1JXFYcVsr''@;'; put 'put ''TkR1ZmBha0oiUWNMRjZYVWAuMzN9K05DKlZWR1pqZVM0Xmcoa298K3xdWlFzfjEsUUlhUVY+I3MjQy5oLj9VSHNAYXNfYyx6TnE5TE5jW05mdDkiYCswcjZQR1o/enZrLE0kIjNZPl13cCMhLEQ+KWhxclAoeWlUNiJvR2wlRkhzNEd0aGZ3QGtQRm5yTmAqb1sxLDg7UnQ6cTFMYDtmRSh2S0B4''@;'; put 'put ''UiM1aSt1dUgqP10jcy9AMGFyZ0slXkxvez4vZGNWPSpLazFMPFFGdzh+V0goYSIwbn1VK0tqOEdeJjttTn5xcG9CTV5jdk51Q3hHczRjPGx0KHNbPC9XSWozdTJjJE1mR0IqJmBMaUBCLmtSVTZTbWBzd2w6LGxyL0p6RHd9QltpInY9MzRbWiZ4Q1dNWzNLN2pxSUYyPVMvRFVMRXNZOT1SYytu''@;'; put 'put ''V0kxSiolLHFeM3A9NWR5U2A+SHdjSyNLYH5yXVIyfTklTVBwI3Jlb2t9dXs+dk9GLkxxJGZGSldjZFtMd0xheDNEU3ROO14ve25NbEBtV09ZMlN3aDxxZ1F1bUxMfFtARkdwSVhNU3hAR2JeYDR6W0Q9VV1JTWdrZih5aiMpdjUkIn5uVTZre1J8UDlnZDNLUj5gfCo3bl9YP0smKDJ9LyZCZTZe''@;'; put 'put ''RS94LmgjJk13QWxFPD42TyN4Jj5PalRhZXMrMCM6OEdlKXBTfTZTPUtzS2pTKCI7VnM7TmI1bWdScm9mW2c5e1NuNC5aNCNqOUF3U20jLCEmSkojXjsuPDJnalhWPmpiWyssMjBMQGV4Yld2P0ZvXTBzfXREPEJHTjVecCEiRHoqTTYrT3N9OilQbi99Vks8P3tgfGt5VTtXaUJaX352a31Ea3I+''@;'; put 'put ''S2RyPjZiXjghQE13KnUrQnJOY21LT218fk9PRHJOWTZie1Z2eGdKSCgvJEhqKXVaZWp9XntkSHgiLyozTHlDNlkwWGhNcTtMWikxKVJuUjBDZEhdM2N6W0E7aCM3az5JTElVIm0rL3RxL2JdR3l0QDVFRUwhTW0rM3JAQSQ0MTo1bXpXQ1dGNm9HcEdVLlhpVz9nTUlVYHpGMjZhVz9Ca0ZtUCZT''@;'; put 'put ''Kj4/PilTa29qJVBYaz8hbmZdK3wzPFJQPWU4dlRscVpIWzFxSylNcFVyMnskRzxqQk1xV2BQaGI0SkduT3BZLCNqR0MrYXJBckckK2d9WmtELGozVlR0bXRFJFB8XTNYN18zTVI3emY9biRqMXl7V0VCPE89T31eJVtQSkhTd3dZayl0Z2VJTkdHT1BRRUdxM3xATUAzLGIwYVA+V3tLezBhamVo''@;'; put 'put ''QVF5RFB8MG12P2dta1JHbD89cj9jd0dyJHJ8VCUhQ21UOjxgUEtheHosZ3dIfG9iRSxOWDBnaXRQTm8kM2FjI31qOntVOnMmXlU7XmxnTU9uLlVYaWI+dlVOIyVjPWV4MyNXKiJXcikwLHdAZHF6WT99Q3BEPHh5ajlMPFpRZ2piIy5wQXJ+UX4vQ3dBME1eJHpUXz4lQU0vUUZ8RCNLfFUhNkpx''@;'; put 'put ''MzYseUM+L1FMYnRxfTNeOS8iOiJnREU5KV4yMXQ/TGAzTV9bL0FrJSx2OmozKGZhO0BjOzdLXkBjPWA4SyM4VVhsPmIiLFZDOzByMSxnUFVYeilMdUU+W21dVEpJeSlYb19MP0FZL2xuaCRhVGE9Xi9dOHthd2lEM2lGdm5UUVNlcjIhRTVLdCs7VTBJdyhkXkFgME1WeWY9QEM1TTwmL01JRUt1''@;'; put 'put ''fCRLXXBmeXV7WzcqYmIlJDVKPWBKKSRnUGVRUVNiSjswKW5kQUpSSHJ1RWkxKFh4ZSQ7UCVCTkhYZV15Mm5AO1h2JCt5O3spQk4sO1dDblFmYyssTWMsaitQZW9Cay9GU0QyblY+UV5DLm80azEvcXtmQUltfXk0W1s+QGNQRTZDPyJlVylXR3l1WCFPV2wqUXVmNWo0MWdUUHU+Zm81JE5nbi5Y''@;'; put 'put ''RkhbZ24pNWx0LiIuTlV9QmQ3KmU9QS53M01lOHoiJkR2L0ZoRDs/PGQkZUhNRVpTUGMpVXNmRzRfLFJXUWghJCpVc15XeEtNYU8hTy90Kyt1Ui9CZlFAX0V9fWYhW2lkdU4jPj8lT0VPM05eKV14XjZCTUByIjFSVGdacGZaenx9WUwyYkJuOjJlRyo9WilMSyFxOVVEQFglLDFaYDskW19APzZu''@;'; put 'put ''RUh5V3Z0NUtgSDZLITUwKjVXdERpL0ohbzRDIXp3MHtnTHIyT31mWnZ9QSgrKENiKUFuWVcpWjgxU1FzZUZ4cUwmUypNcFRATDBkNlhdblVxNUNzcTZzL2Y5bygvWCQ/VV15SC43azo1Xml7SEt7KFRLQHtWYXAwU29wfU5MU0kyRmB9eTZxL2V9alYrXikraVdBeFtkYHN6dikhdV58Nz9YNj5H''@;'; put 'put ''fVR+UCs6YnQ9OWhheXtqSDYxZX01UWVxNHx9X2dVRGJwW00wVSNvaThEemYlVT1Tc15nUndDKGU9KiFtOzUlZ0cvPSs6Z1hGOHZqSSlTNHxoJDYvXlFnLzh3PXY+eVVBLCZrZj1fNzE3eTxPRG0wUmJobk9AKTNwPEpCLihHbipUMFRKU1tGdlRDXmZwfXAibU4+LjtmYVh1aFEkeFlYZkcrIVtQ''@;'; put 'put ''fiFzPW0oKDV1fHlVeGByL1N+WTpRKnc+d3gma0cmOWRnVG9DPz1NRVRrNl0vMjhYXnZ6aV82NUtxcVlraFJZPiI7R3I5dGJhT010KkxsUCFBa2FDaj8uTjBuaiwvaUl9Y0ZqW3svKld2UTFAZUghdWhIdWM6a2BfZEwme1h4JVoke1BabkZwbF8mPiYqQmZoVlYuW0lTUTpkNDMvQiY/eWFXUSR3''@;'; put 'put ''b1FKVHhtUjowM15Ad2UqelBHJFhaUiRFTnVNKTZ2RXNGL24lNWpiPkxiaXdHN1k6QENuLE0/V2JWRC97ZztDMWdKUGhQdlolWmZYVG5oL1YwTEpmd2U4Vi9TUXsyY0JyPWY5V18pW3l0IlFZNypme3pIOSE4ZC9xMkNVZnkkRn5WLHBMSStVbG52KUgxKjN+O2FgaUE0QGZNfkssZ1lEXT1eQmha''@;'; put 'put ''Llp8VmltN3dLWkFMTCtWZDt6cV50eWx5S0RyTkghenchfXIoRV0uPT1XKz9ZUnphSSFFWUwqZm9uIyM8LztGfjg5KUlFRENJJWVSPk84QGU/JUFGW2BzO14hQmUqTT82aFBnYH07ciJFPmo0OXhSYHs6RHBRa0RpfiQ+P1dvbTd6WVpJelRMdiR4cnVCcDlPUyNGNlJ1W1UsaUhLMmJsV29pNS96''@;'; put 'put ''NWZqUWM9clgwcnRIQ3VEYm8iQnM/bUMmWSZfeTdhe1ZKZ0dZRypScUZzQ2trTmFKYUFWUmslY2I5Xn48TV9JdDwzd0JUQUduI2dXXltpMEYyQ10sRlIsZHkhT2J7aFFeYlFeQmxEXUUhcUJhUkcwcj9HQ3FCWEZjcWtCWjguNWskRFd0LDNlaHxgejNuNEVePGtdVlBzLzFQJnJGaGZlbkhxYjIp''@;'; put 'put ''clJadltlPTRHT01jSWNJRUN1RkwoRnc+dn1nbT9ZZk8/Yz5pbm1WSjJUTHZkIksxZHlkKiNTRWZhKW9Ie2FGVihnfFBrMCRQb185KEtpVFhPSltkR3tKb2o0VF8mZF9RNzEoK0JnTCh9Xn5XTiZPbTlKb3lqQnx0WHYuSUwmam1BdnB2T3xpY09ENSskWVlvcU8zKUdWbndSbXRlbz5aP3V3YWxV''@;'; put 'put ''cylwbGk7SEZOOmspNDdtKk4wKTkjd0lzdSFJeUBzezprK0xafD57PVEhLHhvdnp0ektKNSpNej1qayI+cndkaWddJF5vI0sybkopdVdVc3hDV2BFM3gpWFspU1sxKmJjSXNAKVQ1ZUtqQCpfe3EvTTJYT2JfLnQzV0BrMjclZktBWXVPfDoxe09Vc1Q4JEZKNmp9JGRRT2xhOjEzO1spaiZJcTF0''@;'; put 'put ''Ki9BPitDND8kKio6N2NfWkgpcnptKGcwSUU9dWNpdltoQEBrcTguXzd+LDFjc3dbRC88enFCQSMzITFrISt7Pl53MmU/bGNYJWhTJFVjREx3dU88Q3htaEwoc0IsWFpeP1U4SV1YVHk0ZnkhTj4hSTx1TnFSTzUpQi84aHBgLl4wfTJSbGVQbjBYLihENUU3eXpfa1tNO3RpI01OZ14mTD4vakte''@;'; put 'put ''Z1J3QG11ajxEWWpiWDVtUzh8cCJ7KlI8Ul40RGZLSD13L1g3djQ2KT1HSltbTEp3RCZ4MnhycShoR31HRWd2TT8sVjJZblddUSg8LmFWaGRJWjgxQzFvKktLSzF9ZHBDMTQhfllVc15mLmwuQEY+LmhwPyFCa3hebWZFfCgxLlBtdGgjfEdHZGBeNFJURWZITTRRIjBefGosejhRM340KS53TGI5''@;'; put 'put ''Yi9QXUxvSG9MNHAwTXNWTEIyRyVJRjRtJHhwYm5PamhFQTByMl55VyY1UClbUz11eT1uKEVvR2xQfi42ZC98LCRMKV53Qk5KalVheGF7NiY3Jmt4KC4sRVdlPFl6aEgmIXxAZ0Q+dzY1d3ZrMCUhdVB+OnkkTCleZkhJKXM0JF51di84RzRSUDN+eVdPaj40I0QsUU5Hb3xucW1TKG1NY249QWwl''@;'; put 'put ''SlR1eTBXU1E8VnR3OEwsT1Y0cGE0TGB2Yz5LczMhP0heejFlRllzP3dQLj1lKS48bkw+bmUzN2RrUVBzPHpYJCtnOHp6QW45WyI7eDI1Rkw7SmwsdHlNIyxee1ZMXnxyL2o+azsqUkRZNVlRTWt5Oy5CNDttKmdKT0dOJCltTUpOQ21CMWJga0chMTUpd2NSVU5LY2NNSEtOKmZZaik1WzYmMktn''@;'; put 'put ''ViUuOCIrQF04MmVWMSRsUiJQQG8yVDVbPnRyI3Vob0NxUUgrfVYpX0AyYzg0STtFbCQ3PEQ9Ild3IXFILkUzV0F9X1lmbXQleVdwb3YzNGtSMmwmOltPJkgzMmtjZytxd3dXX0lbP1Y9PUUreDRXZnclZGhMM3c9PXhOR1ZNeCQ8fEdHVjhzRGJfMVlKaXxWVTdLcTQ4ViVHcT1MSG8kMF8iKV17''@;'; put 'put ''SVIqTEo2a1UrM0s7ZzRmblQyQyZQRW45SltSXVZEUGg5QXlJPUUqRCU5WWhUbGB9MzEpRzZ8I2N4R04xXk9wIVZTTEExRUpXMXtNVS41SHYlPENWTzgqdEZTek1FTUQ5VThFOWo8cis6IkdWdXpMOCFgUi5ATmFYVmwla3hMVlNEI25pMXpIUU84TyoqVGVvRj9WUDczIVEhREYuNyVfbElwbFVH''@;'; put 'put ''fHJBYDBVa0Uub0plPXJIKWt1d0xCbkQwQ0xPTHR7S2orLnV6ODxHfDw4YF5AS0hvVzZ4Jj49KG1JITNHZ0J1Plc3Mk5DTjZ1b2UiSTo0NClaS2EwL3JlQT4rc1grLEV8ZyNVc3RROGsuaUllTUZ8clJVLj5FSEJnMHU9MGw/Wm5keyRlI3t3VmdtRyZnKmJeMVtgXkF1P3cxV1NPazVpfndXRVhk''@;'; put 'put ''cC93dW1NZH1VUHBCXT1gIzFrUlF+dUxEYTxpQW5KUE5DPlJUPVd4Ym9MZUFSWjYySD0pQjVqPCEyaU8jX0ohfGh7LEszN3hMZ1NUelZYTURxcz02c2ska0N+Z091JmNBLC8qcSxOXl5eU1dCc0M2NW4jSzpGak16TEtLJngzSEVrVSRPbDM6fks0O3pMU18ueFkkeTxTd0ZXMH0jNGt2Vi4xeEV4''@;'; put 'put ''N3VlXnVlX2Vbe3Jdan5wWSIldCo1OjpAa3ZwWkEmaGBKISVXR3BddUVYZy90eEdKTyNCUiskUlEzY2UjMHZTNDtqRXM5JUMiJEtsaUZBVj1lckxoRXlGMEhJLytodUZ+Q3FkNDV+cmxHaHVSayl3KjwiMGxuUHNoQWhrbzkuKXgsZHQ0aWUraTshTTVzK2w0JDNSbDJ1WXVSeil4LEBkM2FbUU9P''@;'; put 'put ''U0tXXVU7dGJlTzFNWlQmLFA5R31uRShFTiEpUXVkPz1ySmEidVcsP2xIZUVQSkk8OUpkQEkhayU0NTFdIVN3X1MlY2pOb3U5TiM6RmN+N0VXSDg0MGdedGlAanBSTUE5cHlQSXBKTEN8RkVZb1tnSkg9RCNYYD1AS2ZSUjFqJmxnTzYiIyNiXiVvJDxONTUhVyF+Slh6cC91OkNXSn14YykkMU9A''@;'; put 'put ''X0d6OD97fk1XdGxEWV9ANXRjLnNVSUlZTTdUV2V9ViYvTT5WNilgYiZAbCFgM2l3bTxAaEA4NGcxUEsqallhMHoheW9JOTE9RCZVaDRJeHlsWCEveTQiJm50V19ySVlfZmZffEE6Nlc0WENuakRgdGQ6KmNAd1M3a1MjNlYkMDAoeHtTeEVULz5NRCwqV0Bsa0UwPml4W0klZEtpJllOK0NiTWB8''@;'; put 'put ''azowa2ElWm0keCs4VmJrbF5RInxWOlV5TWJSKXxYVko/d3xwI2Y9bVJ7VWlLIk1hdGt7VnkqSHFlNjVUVSMqb1Eydm49M1E9WyZRKEpyen1BaGshJXQycjxSQn4xfmc6LEFyLEdYUyszN11dP3tnVDRfKV0qfXRmYW1gQTV+PHk1LnpENnpDLiUkN1dvOzg2T1NecGdrektaajJPZWhyRkg0Ziom''@;'; put 'put ''dF0jS11iQ3MxbSFyW0MvKVp1Y1ltdnFffFAobj90YFpdWnJzcj9uajlDTE8wYytDeEZgKWEqTF1raypfL2tvLypCP0NZfGxfaGlyeXFLQWF5bT90aCIveTVLejAhZ24mKFNvLEU3TkhsWVU6fTchIUdwUnImQD9kOnB1XVU0TU8yIjsjfEhsWDJvT2xXen5JJTBvVm1+UDd9ZyREXVIzTyY1TDAs''@;'; put 'put ''PSR2JlFHJnJXNnFnaGxnUyNxZ1M9ZjxmKXNVSD1NeUxaJnolcyxWVC5OXngmMGZqZUxPWXgrZzdiOylFTWpldE1ePGQmYS84PUFWQEJgJDkma3J7dHFndD09VFcxTXc5cCU/dUhuJWFibTNGPEM2SFdvelBSb2ZRU2k5RCZhSURkd2BdUXEjQmVVPFE/UDgjfGFXezVdZUtSLl90Nz1FRVFsUUs9''@;'; put 'put ''bXlTX3t6a3h0NFR9biE2LyF8RUpzfHJoQVhOaHBlNHthVzVpLyk6V1NoKXpDOzY0ZTN0SVkqN3tPZVpFdzFlOy9RRTNmPDY0MFZOdmwhSihKd1E0PiEwSVtpRFheMkBBZHo1PUt1LGVKOCZFZGdUVWo4YD90OSU7NEAzIy4hZ1tWKCQ7OEBDfitnfDBmfXkleFAiOk5wajFjMj42JDtScF1POzBJ''@;'; put 'put ''UDIyTjp2PlUiPjhtOkRkNWExXnE5LHBhV0Q+TWc9ZDJzXk81YSRdKXF8YGshM08ua3xpOmBMNnQsXyNOOWhbWDVTUnFKKDtNZ2whPy9eISRAOGp6Ny9KeDw7UiZMLGkwMGJkWmV0JSMwZiYwXnVlJCFsa2N4IWRxWjNYU1E5NDhMdTl7U1dgOEsrZ3Y8QDMpIWI/bXRGI0A8SFAvJCQ0W2hWO2pt''@;'; put 'put ''bChFb20hfVdTKiFqejo9M0h7VjtNZ0tdOzV+IT8vKWJRaEo3KFMuJld3ZD1sd1FEa1N3Z243RVJiOmx3dzRPdGpCbyNyL1V6QkUmMks+by9FUVM9RF07cyVrPnwvTzQjel4ubi90Nzw4XiUyVVQ3MjVHYCxBJk1VTWwzUyJeJiVxVUArM3ZLcEZaaENuVDJmezRsaSwvVCFoWHMyRFQpR3smPVYy''@;'; put 'put ''ZjVXOyhXNjheZ35IPklMOkt7MiRQV2hMI29HIl9ebSwwb0FDcVl9cWdxaE9lZjpJYj9OOntoXiZ8WXtlTn1MOjlrZUhAPChDQU1aKTtRamAqay5eI1VdKyN5PkMhRyhEaUpvezd7ak9jJkNkY29kQDNFXVYkQGU5b2sjZndzdyN2Qnw8JkYia3t7bzhWJURMJUAvLnxwU2AmKzBIWWVFPUtWWkoj''@;'; put 'put ''TCVIUEpIaylifUhjKzlRSUhzYUdYfTYpQktHXyY8Ll9hdWxlanNJVywxcVF6PmZ8d3dfSHxpQlZpS2BdNVA8enkueF5yIj1sQTRfan4uRm44P1g5a3skOlB4MSxKYHRpQlpwPkRLQXdrV2hkSTY1SENyZGtYITZpOk4qQFMlRmAlNFtIK0VfJm5ZcmkzL2x3d0Q1Xi8mVmJMNlU8Ql9BOFtPdTAz''@;'; put 'put ''Wyt9Ljo9V3tYe1RxZmVOSFgzLHFnO2BxcDEwW24vdygrS057eihjSyVsKj5NOzg/UFtVdWBuQ1owKy9HfDopZHlWTFB2ZWw4Tn1oclZYXSkmOV8yezNUYTc9VTVpZ1FdZVddJGdnfXVQe3s5RS45PSRqa1d7UzBsN3xjW2VqeDxVVzlLWFU8WC5ALHtLezQyaSojSDBrI2p5bEZ9VyhuIilMeypY''@;'; put 'put ''UGJ0THFzcj9mSGszYVNjTltPN2F2TCouIV1rXVdfVjAuRmBKPlVZMEV6OzI1fTNiXTY/fWdxYnp7Rl1aMWNtOU55ZFB5NWd1VV0zYiw5KUk1b0twdzYjMGhiM3prYz4wTE9XfDoxPV5jP2V0e0w3bW1qdEhIWWR1RVImaiV6ZWU/fEg+VXw1TEIoWF5tPCpNRkRDPiFwNSM3VlRGeUZYRlhGW2wo''@;'; put 'put ''V0JWXjNEV0smbl9BKSJ2QitQdldXKzpJcmVLb0ddMHgxfHlCfHk6dHk8RiJhbFE8W1pNSC9Bd1ImW091RHA2QCVrU0UxfW9KcSI3OTo8K01wQz5aMHhjOzJDVk1qXitXOlZoRH55MmxOSE1NJHQlZ0JbYmN7bz92anl2cUs+bD9UL2d8KVZrLj9AOkdTcU5ea2xXOmc3M306JnY6TFNeUFVhMz1n''@;'; put 'put ''WjN6eE0xeGJPKFQpWzNyNiJ2UnYsVlI8PFdqJlZPUjhGOH50KXE4eEZfT2UiJXFIdSs2VyNTbGY0ZzVAOl9HZFdweyVwenRbbWVXSWo4YnpnJWJkLEh0VWRLcTM6ZyJXSU8uazxEayMoaiY7OjZPWDclPGAmPUIkMX5FMEFeayxqbVVgI3s9VWRyR3xyLCt1d0ZxSlI8XnZGaGd2OSk9bDhjR3Bx''@;'; put 'put ''NCpSSXcrQ3tXeFNbcUY6YyYoSkclRmtFcllWc1VxP2ZeWFFeUUxhImNDQGBaXTFaPD9lIjd8KT8rITxnOkxyWzEyQCxgMkBZezYpO0NeeDx4V3lITmswbko5X0BLezksQnhET0M2Rmk0KiYxaX40LnJtNz49NlMhejA7KzEmTF8qYFtWYi9vWCQ/IWJ3UVhBPnJAZU9DX2huUWxeJWVGO2lUKCY3''@;'; put 'put ''JlN9amolbTRxIylWejRObGtNeyZ6NG1SIVlHJVBlbnU2Y09UZFdrTXFaUFF2fitJdWV1Wi88azEyN0d3InUje2cmWW04d08+YThaVClHP0Vgbz42UW5RbCU3PlN+cEImOUAralAhc1I9MWkiaD9dO3g1REAkdkl5d0ZhU2dDPmchMCo7cj9EL1J4WkFSfjBNT00pXktqTDNiSSZILF1tOkNiU3x2''@;'; put 'put ''ezl4dXp8NmRxazI9K1hQXTYvPysyTCYiay8ucFh0PVYrUGkrNTtyJGpGdFdzWzFhY3w5TzdBPyRtPD1+KUZFdCsqLzIxLixlaHFJX25GNixqfWFXWHZZWEYzYlFISFRON0V3ZXpvX3RrSnc5SFAkYHVYfD8raEAhWFN3Y1MjYG9APFVkKXhEdFQjMUsvbFQ0KiRJLiV6Um5FfF9qO3BmIUZkI18z''@;'; put 'put ''NH0iV0E8bXcuT19zSUluW1AvWnJNQW9qWSMjbUJpMEs8XS9IaEpIJlpJJi5QPmRYcWI/MTsuQ2I5a1lFdE8xRWBuZVhxYkhsQEl6dUZFOiolV0hYKl5gJF00Mz5FbklRMUVCXShMYVFSeFNScHBASFR2aD85RG0lXlVBNFEha2c9alpSMkx2Tn5aXjtSPFJEYC5GemVHZFU0ezo6Oj88ISVeaTNf''@;'; put 'put ''S1VyYjZoKCNWVFJ8Rj5AT0UkNkt2S0BmbShTRVowZ0dWXk8xVGtmO2RuQCwhI2JzQlErIXJeMDJnNTBSPjdgS2RmbzBmZW9TTjBLJGd7JCtpLGlHUCpIYihTZl88fmVySHxCci86ND5XbmcsMG9IbyRvSCFlTn1mdEZYJmQwcHBJKEBneG1SO3QwLFslSmdoc01hdk9dcDxTM20vOUlZSXl3PDw+''@;'; put 'put ''I2t7bmc0dTZrS1l2QDs3Ty9FbSU/Z2c1NUdgeSpeJjs3djZ6Ij5DNXFTd2FtWF8kbClhN1pgU08oLlFnZm0+JTpmMClhaWwzYy44fjdWeW9hWzphLldHUlc0L09oVWIpRF12Jnd6UVo2JVZ+bjpdUEw9cGF1ai56fE5gRUEsfnY9U1NGK2w1Yi5gMkBxd3QkZV5LZTdrSSEuRU85XlgjYGxPZTNa''@;'; put 'put ''YzksSlhtNWx5SHxlRypNPjZBV2tsM1ZeWyNeazpBPkxqKjI1XTdoTV1ybDtQK2BRYGF9QytkfVQmNzwlfVFPSz0mO1M2TWBsRTVGMD1yLHpVX0slZTNzV3NTUyR4OXtte01FL21sKlYkNT5WLE1ue3FTKzI3O3tCPyhJfTpnbkljWCRRWXQlRD9DL05Lfj9pMW57S3EzP2N5PiptZmg6ZmE3ODts''@;'; put 'put ''K3VKJmJLJGhMazUjJTAvKn4keV1ZVkZ4T2RLcW5XWFZXREYwRl5dZzFxQHUsWXI3S158VCxfQVN0R09MMTFPQ1dgcUZyP0NGc1I2OyNNfFZbOzNRJWs1WmpPMzNxcVlCYi9kZTwyWllYa2k+dnI2NztmVEE7e0dkIjc+dCZ8IjpSIXdxMWgrTXVjViY8I0JNZT56UXU9YFZQfHh2d3h3O3wzc1JK''@;'; put 'put ''IyQqcjNgMSJrLiovOE01OEllYzdeRmYhcGIjP29+NlQvby99VVZScypwR3lGfUhOSzplbGRbX3gza3NOfFZZWUArVFBIc31jd0poLHBrUjJXO0xyRDJARURPdnlsQksvUmR+eD83Zm9IaUdQZ01hKTg+Qk8qQHtLaHtSMDZwe3g0NS9eeHNtMSM7MHNtWkhmbSwvYXBKKGFjYyFWT1EhRT5+JVlT''@;'; put 'put ''SHBHKEpKQE0/YT0mODFealsrMmkpdzpUIlgwLEBOYnlMN3BeQWVgNHB7N10yT08xWS9zUmpbS05TR157NER0bklOR0VNcVRrVDVDdUUrdG83VFdRTldbOy49Rz0xKzVrWyR1MzAwTygxOSxMeT52TzlfO1Mian16Mn5PNmBTL31aWzQ+d1VyOWJYfUowJHZdflBKaCRuNlYhazlDbzU4MH1yN19t''@;'; put 'put ''TnBLKV5NMVdROjJ0eTlPQGtudW1SSi4kMStuKktrJnRUOHhjS3VnQFQxN2w3akYuezQ8dyNse2VAKEZPUkhPbHE4ezJXUypuR2FEWk9WL21nJm1RK1Npa3gwPHdxPFRiUkhPWzJzVEJVME9ScT9UO2c0Uz9UNmMyRj9kSHFaJXZlVXJzdm9+W0RbRSY7UDAlc2kqM2RtSXc+OV50SSY7V1B5fnQs''@;'; put 'put ''Rn1DYz5mYDtfJipvcFBxUFluUjIsOSlJYVtEI2JbV3s4UlpwS1kqaUslJVFWJFszSDd0OkFvMnhxL193e0YuOVJGXzdSRmBVbksxI3k0WkpOT11MXTBGLCUqP1liRypSWCNHTylsKUFMaEIjOVhIRV1kVEhOTHEzWGRSX1h7az50YWxaJkxaJW1lOGswPnhtMmw5V15fUENQRihRXThyVTVbZX09''@;'; put 'put ''bDxfVkYjc3lEQSMvOEw4LyM4Sjg6Zzo4bFlRMkRwazJoJDsqMz9XVElNQEI6QDoyOHhPU2Y8ZyFxL3AlP11sJG11Wl5rcDltOTYwQm4iVX5HWlBZLElKNzBgP2gwZGE1X2FfTSRYOiVqTmZ1LklpKm1jIUE4SmRFLGd9OVc9azFlOEJoOyZKQEljUUN9PSZeeTs2KlIrWFFKMSxQIzklbylwMn1J''@;'; put 'put ''UWNJNlVhYVRJIUQsU1RVcUk3WCNhXkR6cEpMVioycUtYcC88OyFEfkhLKT00bClwSlo3N1tPUVZ1bmhgJmVLeFJyakJBK1tNRmxRNmh8ZVYxeV8pYyw4VmZMPVReNCZdVSZuc1VdMXMuVyNuOXsvVzMjcnZncG9qXVIlX04lRChVc21aUywhMCtjaSx5JVs3Yi9TZlZmJmU8Z1lLKDJaZmw+OzZ1''@;'; put 'put ''VkdZeUFKY0xjLH1aclomUT99IVA1UjFqI0Rna2o2QkpjT2ZXSnVJL1t6WiwuPix6dFQlJkloOzY3TkRASShlUWJTNURsM2FMTyssKXpdOF56MFFLTktEb30hcCMheih2RV9HQzZKRDt2WSZEaXgjVWx8b1YvZTR9OFA1MWB9P2g7fWcrLCJ8dWtsVG5WZWpgKkNEY2M1Oz5idD0jZ2ZUPFdoQkZX''@;'; put 'put ''RW9gSzJ8Unp3UFFPe1d4d3VZLnU9eD9rQFgvajYpe15ueis4ZDc2Kkt8eDt8SCF6KEwzVy5AS1k6WU84YXpCSEdINk9EeDxVRUJLMVQuKnZ+JS9ifnBHcC5VZ1FKJDBeWTpNZ3lUVyNoUj8hLjRsaSs7QXc8SXs8ayFVUiY8Rj9ZdkUlQFFyeltCM35wdXBGSCJTPWpjbUh4eWZFYmoqRjZ4aGV9''@;'; put 'put ''KUd1KGdZP1cpR0cvajxMVl52MVtOXiQ6NShkPWZlTjN2ZFVBJUo0a29CJWFkMmZJfUZmamA3OkVvNSU3VChsYlRBZS9hentCODVIRSZWciFoWGQ3b0tUWl1POGgoQTpLTX5vLjpCKGpke2RDaEEhKUN4WDV6W0V8LD9FfCxMLloyJWtBPktXPEUyMSFuKH5bWCoxUnwsRm89VTVnR1Fhc2hEbyE2''@;'; put 'put ''OUhMOGNwYnBpfjB2NSQ5SH5TN0o7OD9fb2B0cVdwRiRxP2Q2aHJbT3FrbTlFd1hyYzl0UXVqUi5fZUsrfTc4VHZoN0o/UzMxczpEOHpWNDZ1MGFdNCY/YjR2dVVJOnQyKVFuOWU3YH1zPXE9UWR2IU57U150WkxrVXJuezxdVV5CfmNiI0UmOyw8bChEcjRqVXI6JSpzOUBTeT45KUlhW3MwMCR9''@;'; put 'put ''MF0wTjMicnAwU2NLX3g3OnxZYTYlVzdkNjU8QWkiZEgwLnJXO21qfFhaNC53cD5qfCwlLHddbmQ8TjdLSTR5JkYuTWYpb1ByNkNHOzZ7Snl1WjImRXZIJD88XUxAW2tUQ1d3OG5FUDREYCR3PS8yK1pSN0R2ayg6d21XJk9COXhzaDF7WSY9dlNESXoqPG92VUV3Mj5obGB8c0tAQjZgYSRac2Bv''@;'; put 'put ''TjY9bi5Gen15TyRlUFRPRU1xU3I7P09vL1d0Jj14Ij1oJEhIL1tfJnFPbiVPTWJlRmR7e1M9bk85P2BEPy9+QD4sSG5xOUc9eW1hJFZifH1RY3E0a1VleTpjNV47Mm45SypjTU1uTllwN2lHTDY1YlJiOj1zP0k0cVokOzQwWmJENDpxa2hsPGUueDFINCJHRmB6LGp1RXU0ISo6YXksJGg0TmI7''@;'; put 'put ''WVshNHcofGpkbmJ+NHwkSFlLcXQlZSF1JWVZK007Pn5oNkssfTpdX1VIblBgbyEvPV1CP09nbWI6MHUxdj1GcHJRMGNndFFVK3YvODwhMmY7X2J+WnYhJTJyPyVbSEtxN25QMXtMciRpMXVKXkchU3VhQyZZTGRvIkcpa2V3cF5KeHpDMn5ZfUVwL0FLMSNQb0ZWUjpnMEZ4T156clE/XkZkay5K''@;'; put 'put ''ME0vdCksIlFmPi9YNmpMKCk2MWRSYSI5SFA2LEpRRDhqKnoqYSwsaTNdb0t2aFEjZUNqeWVrcWQ5R2khXV9IYyElLnssOn1mY0QpKzY5MX5WcG0qJjBmTWsxWDhfKHFPb0tzXT0zQlsucFlRMnJBMlNQVVcvYiFDP15HXVY2Yk5LOk4jQmhYa353K2slZU88KHZkYFZeWXdnJnk4OzVfaSVsSFBZ''@;'; put 'put ''KTU7Kn15SnkseS40c1AqQTNyPiJGZTw8LF0wNywjPjNHaiFoaU9kIWhnaWlqRn5DV28wQCo1OiZQKlE1VVpkZFhhW3ZHYzNRTkBlXWxqKDBONnV5LjFHLzhHdyE1MGV6JkYwWkAjYDBkVDBTMEsvK2swZlBOKWkqJk1OYHRpdzJmOWZOT14kRU4uITttSjZZJWxPMTBWe18oUyxxY0lhcCpUcEV6''@;'; put 'put ''OCYkRExlZ21PQktCKEdmbThVYy5kLzg8fiowOTB5THBQVFsiUntULyY8anFLMllAckJqflQmWTlAJnE8U2QpVm9qTDhLY2k8Qjh6Vm9qNWFCc0ArdmQ7ey9qITdocl1SRTFkL05beThndFFdJkZteX1gQ2Y5Rz0zcFpvRm9FL1hEaXhdVXY9bFpsYi9sND50WHJycyx6LEFMU3RGYClkODR2SnJj''@;'; put 'put ''JmdvImg9OVk8eS5eWmRgT0tUNlJYQi5UNT9eUkdvUyFNPTlORigrM2N6dlZIcURmNHI0YmRTaSUvUCZlIi45SDZgcCFZWTV9W2w1X1ZhSWBLVW1udF0pTkgyWVJRO3pVWW1IcVdGeElVcTl2OSZRVSNacGF8L1cuKEs3KGVfU011ezRTa19rKG4zYHlFWW9jY25OVj1vVmZuMlV0ZHE/fFdBKFYr''@;'; put 'put ''R0xXN258KSNaNDVjPG53WyU9TyU3NkwoQk1+TCU5VD47VCNCUX5xOXIiRT4+PWtEJGcqfVFjMFA0dyJqKm5BZmRtdVRpS31yZz1zPiEvRTBgQ1dzT2pAcjY2fHJnTS8kUjZNJXlnWUlDdXlnelI8W2JnYTFDdntuWVQ1RF9nTTdLRV9AZyJeS1FqbEhPeCFIdEk/InAiLDklO3wjInYsdFkwMl9B''@;'; put 'put ''ZDEqeXhQR15AdmlWVkArOihjRXNtdlRDKClbR0lQaSVaOGlZMDZJeTE3eEA4LyVhWn1VKjg8JEpdM2VKKEt6cS9kNDRSd31TVTZrNXlERmdyMlNlTTB4eE9IRCJ5MSJDT3hSN1Y9eiZFbi5iKWxlfl9gUntRPHh4bSx8PTJwfk4xRjB1XlFoUGRnPWV7bWhgeWFGVnolQClIcW5xQ3tvJixlazk8''@;'; put 'put ''eTYzUVV4ZjE2dmRDUFtSayN9WmtgQEMmYnB1NFNoT15WN3dIVCZoaVspajhKV2hdaXxje0Y7QGAlYnwqfm5vaC4jPkUiVD5uaHkmYmVOeDRdPH0/c1JQUGRLQl8qZ3VyM21bKn4lP311ViYrMXhuOSY/MDFuJlkvb3tbajpYYk1JKDxNQ0ksTz1nbltkXkZxaX5FXis9WXwwWmZ3QHZGTnxNRmxq''@;'; put 'put ''UkNGK2lgMG1JLDx+WipRN0xJdn48Jj9QZHtgMltQVWx6S3VVMm1JJDsmayVVPVFfLlN9JCxYXVUlVFVoIWkxP2Z4cDRAX1ZFJSlCUG0vXkskYnxje1o8cXkkP08qLjVvdDpAMSxPMVc7YjFtSXliOSxPMVtPcVBlMW1JO04+OUlqIlUpUSxkMCY1JWRdVEZTeFNKPWclOSopfUJ1dlEhIyFROHFy''@;'; put 'put ''TiFfJk9yVndQVV0ofVZvST9mYkN5Q3Y5NVpDTmBKUHZfekVYM1FTZn1XP2M5SjpPV2tkW0kzfnBFSCl1cG4rS0lrVTMzI0ZCZnpxY25iZlRFd25CTkIhVzpYZi8jR3RBbXVUS2tFOUs2UjNyI2ojNThjPW9db2tfQkY1QjAvKWcvWkNHPGg6aFU5U0t9YX50NDF9TEhQPVBXdUBRM2RKdHE9a1VC''@;'; put 'put ''b2VNZUFHaHwiY3EyM25Cbk8/Ym40Rkt4dDlyZ154LnpITkJobH5vPkVVM3t5M2VHK08wVU8qMEhMfERAcSE/Nls9WlMhR3R6WCh0Lkw8aFpJeGQjTTBFaXk7V0xVW1c9RnM/LEw7V1dBKEFmRFQvVEBhXUMrRWZOTVNDZFJwQmh4Iih9WGRbQ0QvTj5iUHY1UEZSIilNN29JTlopM3dBcXUzMTRF''@;'; put 'put ''Mmo+WmxjMUhzInFiLz9OL1YpM2JMNWJIajRzdS9CUGl3MXkpKmQmTm9DdEAwd2lPOUVgeV9IN0lRamEifFE/djY0RzMvbjhIbGdJSXIpYD41IXhGeihLTzpvUip3XzVGU2VHdCNHSk4xV2ppMXd1R3svVzNTIXRKYkhxWHlYNnp1NHtYdkxBXlQzLFBVWHc/XjlbPnxlXUwoRih0aUNdWy4pVEZI''@;'; put 'put ''QmUiRUt7ND1DaEUlX1hbJVQuKXBoakQ8Yyxoe0FXSDBuRGdMSGc1eElrVWppRSxZZ1VIanRvbkk3cUNgYGgrdV12dmU0WWVSRn0+dG5OenBWYnQjVzskL046SCFHWGRnSk13PEJFIWM0a0hJRV1XL2FWKkg3cWlWQjcrbFU9Wj51fXliSWpjP2pUM0xEfEM4QTZJP0Q1NFd8IzF9QSQoWTQ9dl56''@;'; put 'put ''Zk1DQj8sLmJ+RnEiVGh2R0w3V1IyKGU0a044dHtRUFB6RGtSNC5YOCtvSXV9X3w5c2NyREVwX014MV9xLGIwXzppSkZyelM/RkFSUS5BOTE0YnxWOE1idEpCUnRtL0wmWDhNMlNDWlhseCZhU2FPLyNHP2h8alFDaCJldVRoIjhILylIaylvc2lDXUxNRkczMGs9QlRKaUMqQm4mdmwsTUNAQlpV''@;'; put 'put ''QWpxRixCTm10MzFeIzpoelhkYy5JWkIoaz9NYHldZXppJU1VTXRRYmhxJSNaJk1ea3szJDx3Qjt7OSVvJS84UHJjLHkiKFo1LFh3PTt9R1toYU1UPyNdVU8laFJoSXNSM2wqfSVmXmwoWkZyO29vP3JXPXhsNz48PD14XypKVFY7SjxgQkc+S0F3YHRLIUt5OkZwdzFGImNLV0Y+LjF2dnY5VjVt''@;'; put 'put ''e14jek1vLk14UTQxQEJ1NV9mNGdsWFMqcylRe1RpSXM3WCx1Wz52JWM8MSxfWygqT0NSUUFZIzAlOEg3WX5zcUImIkZocTcvYTUpVlBpUXtafjVXREltRDtrRElURWwhZ21QbXxHfHB9T09VUmheRnB1QlEiKSt1RitgZjB8SVIwKEtdUUAhSX1VPXQ6VXE+OWRzJXB7ZFpgcT5Yd2w8ZmpKKWws''@;'; put 'put ''YTFrNXlPcGE6RiVQQzp+eTUiSTtbNCs+TV5aSSpSIj1sUGJgNnIvPTRaYUM2eHQmRmhoNjw7Ik5MUkBybDgwJXxNQExqMUQ/ZytkUmIjR2lrdCFuZlkyYVVlZGA0T1gxSTZXIlgpNTd0fUd8ZFVqZVIsZlNEPyF6N20sVTY0dV0vQkRBRyx6bzhdai8pSmRASVU8cDJpIzhiW11URn1pUkhaV1ks''@;'; put 'put ''I0kuYWw2IloiPj5aSlVSRFR1MkNxY35AcVRfZT55SjwmY24mcl0seCFqVFFBVXZuWypYSkU7RVNdVWt2UCNaI2w7Nl9nSmJXT3ZfU3VTU090eHltaWJBbEwkcyMxKTBlaCRuRTZEV3ZVWGxaTDEvbzQzYkhmUiMqX3VOIm4qQyhRcl1VM0pRT3hlMFlbRXVYNFVaJCtNPlUiNXkzTWciNHxbQW5f''@;'; put 'put ''PzFiL1tQbEgwKGx2T3oyQG9VXkd+QURXa1U4XkBlOF5AV1E0MVFlYDRYdiQpcHZ9SDtifDlkQH5ARWIiK2R+fHo0ciRbfkAqSXEzLm4zM09hTGJTVCVSfTV2TE83Li96T0dZNl15a10uKF4rOmtOP2khUy9VcV5ZZW15LDJIVyJWKnl1TXIxVkliYjZbay45P1UxWSskbXlQSlh0M2JoR09sPnEh''@;'; put 'put ''eGgwa3p6YUR1QiZCdERweH1FeUdASTpOe2JKP1kyPyokZ3pHKi9VKFc/O1tXSVJjaU5FSS9SRz5Ib1pvSngkREooQTh1QUxpV1NQN3ZpWGMjayNtWXx2fVFKczQkZ1k4big8NEt0TFh2XSVeXz5vcFl8ZHZSPzdobi9rZyRpTDZVYXY6S2UyY1JieXJpbkt7QjhyMG1pVjBAQDJ1ZV19W1N5RlJO''@;'; put 'put ''QzZCODZ7WDRrU1RPTTIyai9GeW50UV0xcUNgJXxUPFkqK2ZndTpvanlqYm1OOFlTNX1XRT8iSz43dT1VRSVbVyZnOCRQSjBnYnpyelZtdENgMTtoXiosM08/d3tLPVV0L2NSQHU5V2V+eypKdTZVU0cpOG5CaE08YkRGZSNlRXspbGMlKHxMKGFuTE1tZ19qfk99KmE0LHk4S1RCdE9GdF0/eHIm''@;'; put 'put ''QmojUCx+XkAmY0BgXypzNX1DanNvaDYlN0ovYUpFR15QVWx6cTQucD48NWlhKX1JZ10rOGEiN0loRWxSY2V0d1hiXjNOSjpWdztoMHI/bHBvaEsveUo6LGRtUkZUNjUqKTJvUTxIbT91VDN2VloqUjtzOGp6WSpSTisrJWZmMX52Oj8qY0FAPFlgb0tfaU9nY0JNY2tGYVI9WVZMY3UlczUuRHEw''@;'; put 'put ''bCV+XjpvIWRbYTZQb3sjInIkKWkvRDJqWEJfZmEkNE5xdG8mcTVlK28pRlExc04+T3hKWE5FLjt8bkRdRXwhaUpPdy4sSD5dPmJ5fVU/TyRvREZaRnowNzAhSnhEekskO3VDWVZwZGdZWGNwPUUhSTxGKVdeYm1jTGtLVlNaYzEvPT5ZI01DPkJ6SiNxeiUqUGFHZiZWaXlfaU0rNyFTdUcxfkpi''@;'; put 'put ''QT5vcElnYTV1NGg5RyYuZ1o+dFAweVJndWshNkt9cjU+RmJ6fU98S11GfFBzS2xFNipyVnFmMitdWEBIMSQpI01RZVU1Iz1EX2wpSUY5PTxuaHB9Njx6T1MzeysiYGRgYCQzUkY5QUtqdmFUeHJaPEFufG17bV84JToudEUsRVNRX3tqciEyal51Onl8IW5ma2YwRyY4RmRrI3lHNnAsbT9JP3x4''@;'; put 'put ''d1F6XWNfLiVqMGpfZjIoalJIZmFFVkNiaT1SSGZhRWU0bEU2VDpGYSRKI2dEU3ksfn5VVkQ8fSp9QXFCJkI+Ql9BcUImdUpfUywsQW44ZWtgKlUiKE97b0x0elsqdUIpbmhqXkdSKV1uW3dHNCRYMi85fVZYP1Q6IiM+YnkobltmVVhgKSpFfE1fSSFKNSJgWiswU3Q8IlliKzBTdCp0KXFRVjR1''@;'; put 'put ''cUlwbGRsc2NCI2hlT09MdUlTKG1eSDhZXUNSIVZPUUBvSTZXIlI5cUZ6OSpQbXR4JCxAfls/Xj4hMENkJlksZiRVOTw/dFppPkxDbT42dCI7QU92fXZudjEpZ2lvUWYxNGcxUGZQbmNCX1A9PFZ8TTFGfXYxb3pCaWxnWGNQaUI8WjF1LzgjIUA9VjAwRG51b0B0Pnk3a0N9SGtbX0BYRSU0OVo+''@;'; put 'put ''Pn5rc25Ua2w+TT1pMVZnJCxoZz80ZDgob0oxZmVMTzFxW21AezcwYGhtLnRCW3YqOmBLeHFUKn4mem97Wm9IKT4iP2xQZC56Tiw6d2psNyNrS15IMGUlJTsyUG45dGVVdSZ3P10yZCteKC46XzdvV3EvdXRoWSpVRkc+MUp0S2VMVi5mQz8hbmZRKmIwU31Ybj5iZk5dJEV9eU1HeHloYnAze05J''@;'; put 'put ''ZVt9JmskWzBteyFDajpuOVYzPGd2aS56bVF3U0lqO0ZkWDExRmpaXnEjWj1OTXtXKS9zeUNxI3p2QEJdMklLR2poZ1F4bUBCPH1yYDhBXy9zQEMyISZuJFt5T2VHY19aUHN5Kkx7ZmhXLlloSDA2STplPnk6cC4jUCNoVFUxXWM0ZjNaVSkrY3cxMXQucVYyaXZ5NGQvWFtNNn1Wak9hfmshNFp8''@;'; put 'put ''fGZ2IlRiOiM2K2k5SXFrOUlXd2FsPDwuMS9VVW1iOWRyMEU7aiJ2NHRCSnF8OmtdVUkvW0dEeCMzd3R0cF44Vj5+JGZmOTtHbnNnaVFMNkNJYCFAJjVxLm0hKE1pUWNQODdUS2JjQ18hJXYqOzMuY0ZgLytYQ14uPUZpZlZQcml5I0YwaCZdbEV0L3pIQVBdTkJSL2k6d1dve1s9OkUofnJ1Jk03''@;'; put 'put ''IUVBI0N2L2cxbUlXPT01VFRRd0dFTHQsWndQNVc3fms9WUY0XkwuZF0wMCpHMGhAdntJdGNCdl15d1FgQXNPTzlxc1M1JEQjMiEqLCFBZWhHT1FkQTFrc3Y3ZDZ8JUt7V09nYyk0S2UvMF1QK0pIPmt8e1tLPHQjdz5DITU0VjFEI3c/XnwrPFpddXt4fmtfSCpLOzE3Y3tELHpEbmV+b2N4Ol9d''@;'; put 'put ''Yy96aFBdMW05Q1d7VnRaaGF8TSpOYUdEI3tMYlNQcyIvS0xKb2M0bDRUYWIpOno1QnhiUkBfVUEjSk9CI1cle2MiVzlAMi9AQnlQbjkiaFIme2NBUFhQTUV0UGQ0MlZOJV1hcSt+PlchOF1DYlhIT2FXIXcqXUEjTXElRUdaRENHfEg7ZmwlMXhLdS4iV007b0xDfUQxWm9PKFlTd1p4RF5pbTFa''@;'; put 'put ''VnlrLEQjYDE/NnNQZyV+SlA0bDNNZyNSflBOSStJQyFfY2VDYXYydWVtdTJAQG11QCJbIjxPJVFUejBuQ3U/dExJIkc1Tj9UQyludHp0QGZXcGhySkB5OlhiVDMvVmJTZCNpRkd5Szo5ZUpSNShOcHF8Wj1meEU1Y0xLTU81XSQobi51dmp6Qjg2QU5aRGJiaE9fQzg2fk1aN0IhWyRyZ3UwPSYz''@;'; put 'put ''Oi8iYFoyWk5ua3R6dGZZKE8iNkw9WGpddlFIVFQya2V2SU9sem5STT4xbF9uTUwzKkc2WngoPSJabkpxQktCJC89TlopdmpUbkxDSTsyc2FhR2pqOzUlPnZSL05ycmdhcV1VfEddKCNuMmtldnVNSlMrcm5jd0A4M3ZqZ01ePENGT2RDVmUxYnZbTzU3JUgmPzFIPytHVzl2QXldIVhSVjwkV0w7''@;'; put 'put ''MGZMQEFuPHImYmVteGA4WTYyV1kwL18pWW44RWhCUnc3JWtvVDFBT29vS0MpdnI/K3UrfFYseVg+OWtNMG03N3NdeERwZ2IzOURTSm46RXlNNlBvdDFJQERxV1FJYyV2Y2lIU0VaTU12NTs9fGoiLmE6RDIjQTZbdlp0V3ZEaS4mZVp7Q3IvJj59UzIqO2IxUn5BKVVmKTV8NW05JDEjaltgO317''@;'; put 'put ''PHZFWGQ5WE9VYzlYcHEqLnxzYypgfG9ZOWhyKnFWfTBdUGh6c2xdW0s/XVUkSDBCSUY5dWZARHxyMlRPXUwmQE9LfX5jO1l+VDtiSFQ7eFNKeG00Y21tXncwS2lOLEpPSG5gQnhrKzArMCM7U2xhWyFtekMrbEpwakBHKmdea20lVm5HW1drZDs8M1UhbnArO2E7el1jI303SS9XSEkmTVpHayk1''@;'; put 'put ''OFQqUlJOXUw5UXEvRnZpekt4V3FYYV01TixkU2FZZSxEdWJ+NEVsP35iLExKW0o4cjVlRkpTIUtfLGd6ckd7LHBLNGNaYHB1Lj1QQGN1P35QakNmKkVKW2MhOENBI2lRP04weloraVtdYFpwei9AT0c7NGxRZklwfUkzQlg+eilZVjZSVXMvcG04cmVKbF19PytbM0JwUVhsYzA2MUYqVjh6KC42''@;'; put 'put ''OThiL2F7bDolY1ksPUJNUG4oNSwxPVg6WSJZU3dqenRiZ0IjUiM1fUIvPFY7Im5CYkRiMFNjMl04Tk9eT0FVQUtATzEjeCMxVz1TIzVuVkJOW1ckKzxDWk8qMHAqJGlUN3RhfFhYc1pOVWFNXis9T3pVNjQkfFo0MVZQMjFNZXJHQnp7ND99emFTUVU8REdnV0hpdTRTPml1dTwpPDk3LmclcWRP''@;'; put 'put ''dlohN3h6bXVIQDJ+RV9OeEN+WSxNK10iQ3F6RDsmVClaR151PWxYKHt8P2JGczR5InxXVW5UeUpKPmV+KnlUMyNnaTlaZH55VmJlWzBaaXY5YEpIb1poOFZhaDhSNncrKmZhMVlTU1YxTEIoMD92NkxlUCJgW1peX2hdN0AlW0JETiFPY2BAUWE0QmokRitBdnhTQ15BbGM7e1c2MjAqe1JtTWh6''@;'; put 'put ''fkVfcXlXJGlIdHZGfltsO21bZTNheVU3P3hJXXpnPmRddFFVZl00L3Jue0FjRncvSUMuQnRCQUFBOF9FQURYckN9RSpNZWN5IjJpI10pQ0BBRHZiLEVhPU5SYlNAMk9xdWh4NkZBQUFBQUFBQUVBOTwhM0ZwSXJuRSYuWS9uO2RkeVgyTXczYj5JOyg1P21tYlhBUl9BYkglX2xGX1pGLG1FY1pf''@;'; put 'put ''O0lgSENHSUJIVyl8L1M8bFRueVBDbyM2cVc8K1c2Kl9dVkslMXZ+WjFSQkoiZ09Ce29yOEl5VDBpI05iKWZHRy4xMnZDIjpLN30sIUohcnBlLiw4JE8/fXo7RlJ7amghYlJTT09wfDklViV9SVh8dz8lWC50cGVoOEtFcGMkSC9gcUA3Jl0uc0ZHdyM/eSlWSFtNUSRbZWRpb21IbisqZ1hZPkoz''@;'; put 'put ''V3sxOWVQYVI9NzM/az9FSEpEPmd3eztXSFpFUiw7R1pwe3VhVCplVnBrfEppQl1PIkVHV3ppayl3NWohZ31LZCxteDhRNl9kWWY3UzN0VGR5ZnJ6O0okejA4NkZ3cCsyPGtYO3w3KmhmZ211eiFaNE9PRVdieTZ+cmYlfklMbjNXVjMuMzczNm55fkI5W1kzQDhENX5zckA9MnNGKWBMT0A+NS5C''@;'; put 'put ''LHFaOFNERkcwXmYjOkJMYzphJEY2XUxaQHl1TlBDb3Q7ZE8sWiVZLFFhPiJoTlMpPEptLjMpeCVxaGNmckImZjo+Q110MEJEJV5eTjYycnNgXm8pZDZJWHFqWCoqQUVVRWFTOjFdV1ovTH51dXFvMissOX1efjApMG85TntvRGJiazRXY2xYZ0xXX2p6QGJkPHM6K0tnKDxsbzdyLllpPTN7SHRj''@;'; put 'put ''KSU4Z19DTn5UWFtNMFlLeDM5fCZRdV0wWFtmc2ZIKkRqRUdDcSljRDskfkdKcEUkUSlnOUZrIV9eWndQLGJoRjx7PUZ2aUsiT3I3VHNSVHwqTkVrKnkzUjBqSjtCZyIucXo3dmlIXjpKemA6UFBlNy81ZHomNlN5U102M05tY3xRc28sKmxhPzFre2F8Kl1wOTdQPiE8LD4qJlkiSzZDaEA7RF5C''@;'; put 'put ''SlZ2PG5BPm9MU1s7TF5NTWZZc1QuanVsKk9tZUJqOnlxRWNfbigrNGJAJnE5bW9GRCx5L3tLdCtdPUBPekpjRWFsYnVjN1dFMExqXikyUHhzQi54W3pjanwuMTs5el5EWF55LyhZMjdFQyt7P1t8OnlidyI4UWQ+amg9cmJdJEhbRV9sVVBjPCJqVFVlMVJ6YGNuajt7W3x7P2t+SEBhcm0zeD0j''@;'; put 'put ''K0d7eENZMyI8XiUkVUVMLklCaF9TaD03TDcpKXhSa2RDaTk6akZ8c35EM0BMP2hhdzAvdkJ6MEd1MVVAJHArLndQLjVPLmozbk8we0k7eEEkVWJNcz0ueXBTeC8mOmEyMH5kN3dAKmhYTyVbfi4yYzdWZ2wkdV1YX0BaYyk9W29XNyQ2VERdXXw9NzohWUJ8OjJ6c3VqL2hsbT0mN0VhdGluQ3Us''@;'; put 'put ''OntTSldkN2guSi5dIS5dIX1BckBaSjxGRGJdRzd3P19oL34zPHk0JEA8YUl0PntCUUJCWzE1MnVveW97X1MrQnRfJkxCVDYoM3treUYzdWI2c1svaUFqaldCWmg+ITchNTo4V2xHYkd5YmQ1aW8xRShYeHo8aEl9N1ddL2Z5RVFodFYyKSF6O3NXOTx6YFYqKC84ZjhfQ2ZmeFMzYDs7cihrQzl0''@;'; put 'put ''QEspSF8rbWk2ZGhTKHlhMFddYmk9MlIxOStCcDYhSXg3N18rcFFifkwmT2MzYlN0bnFWRD5Fd3JdcDd4fVUyUWRDQmN1MEByJHlYPF9vYmkhfk5lNHQ5bDQuKmFFWzlmSUJLSFVTWkwrIShUYGM7NVVyWCk6dlB0OUtLZTt0TyFNSyE0bHU1XUJ6NmdyKF97N2NnIjp7cShVRFo3dXQqKTt6MC43''@;'; put 'put ''WU00OGojcVdmeEJ1KFc7ellxSXVWSzMqSFkkXWtiV2YxQH03InUpcHgpS3RickZpc1dXU1JFalM3dlBZcGAkdCI/K0JgcHBAJlIyb0N6YUBsMUt0R3wqUys4WHkvLGVRfiJYJkwoZmUyOipyS0VzKixoYmwmc0ZxezlNPE9mWHVTfF5uXkNSSUEhbX54YiU3RWQ1VE03VihWZkh0O2VkPi4xOlNq''@;'; put 'put ''ak15KHQqaztBUUBSQk1VY2E7Yi9VIyhUJVBhZXRkKWFQJWpdTjpDUXk6NCM6KzlHciNNWmJ8P0pQaUsjOmJHWnE4Jig9dmV8OGtYXnVSfXh1U1plV2M7YTkqIyk2YFsvY18lVUU+W0hBPlNHM1g5Jjp1RzRsW3YsTHtsMDwoMk9pQ05pOUtdRU9xckk6VG1rZjdkSWwxWm1NZjA5b3JvQXlPKExP''@;'; put 'put ''VnBIYkdhZW4maXl3LDp9JClKU0czPltzOXJwYDR9cncxfn5HUj0pSFg6Yl9TP3VgbnsvYXA6UUA2dHBLR0FVKTtheEdiMzdEOEtRdSE8a0p7NTIrJkE8ZD1sM1l6PT90QmcibEs/SnU1W2h9JnxpYjtpTUMvVH5+aGN6LmdNZmZdVUZqKkdub2N4b3tjfTptTVdMV0g/QnhMU3RiTVN4M1l0cDVl''@;'; put 'put ''fnQwPDBWUWR0PVFsLjRFOERqSXB1VzJ4NDw+Q2pOaGZ5P2RmM1p8e0MlO0xpMmxFczs7YSNaLlF3JU5wLiEqKEMhczY+eSUwdCh0V1h5UzJIUWNpU2BAP0RQcTRPK3VLIXZNW0QhSkpBPEM9bkUoSUV7TSEob3hxR2RDfkhZYilYYCJMayF3OGIwO2c+eV0heWp8RkdLRG5HSiR3S1lsOnUsdSwz''@;'; put 'put ''IWB8JUEwTmpePW0wTmlNZW0kOVBeWnkuZWl1VHRuYWxZPyRCQ2cwWDdoVCs/a2hiPyVYLjVaMF9VVjtAbzA5LlUySCtnOkttJVA4NjtnPmdvYlY0aGdoL1lWaihOR209JTg+K1U+eDFRWklreTk+RmVMMU59UWx2InJkeiMzOi48ZFZMTCtYR31LIUl5WnJ1NlBoZ2wyKkZ+ZnU8fWgsIytnd0U+''@;'; put 'put ''JEA6RWQ1cnI+RChQanJBOUc/KkV6MC8yNCNmVlhyT0xDLmNuIWZeTHg+JXMoTzU1ZmlaNXdufXIhK3JbSUshQyQ0T2hLXURkOjx0N3R6ISJfaio5MFk+Ljk9Yl1VWDFjfDwrUj00dlNFPnlKY01+dXYvTyJsZil1SmdLSjs1JF9ITXFHcGxVJUtQKkBNWE9gS20xVD1taUZ4OzVYVmN2XV0pTX5x''@;'; put 'put ''Sj8zdm1AYCQ8NExDd0h9MCwlK0ciPH1lQGM/XlhIKXpRKWl9MFBVMSEqejgyZENJNls5fi4jakpkMD5WP2Q1PEQjX0diQzQsOzBtfXxFREZaPilQPzJKVDw3WDE1Pz5oI19FbTgyfWlsfVBGVVBgWihgQkJQYnRXM3ltV1VWdzp8UUJOL1UqNmV7Jkd9Myk2U1BBTG1VZ1N2MlVleixuX3hEaF98''@;'; put 'put ''eCFgcH4mI15BW3RSZkIqOz4qTXE2UVhXSE91LGtbIkVjW2N0N2BOeUNSZ3c5NjA4Yk17LjlhXiEkQVVuQzFPLiskU0o1amMlOTwjMn4oR1gsMHkvK11nRUBvOGFfUDN2NH4hMkM+IjZfOUM7KUpWclNJPnR5S3tbO1tHXUtZfiNZJnF2S15dYlp1Z1g2KEYlUDZrZGUxXU0kVVpdYFlvIXFmNGYo''@;'; put 'put ''UjEmLkozRGZHNmIhdW1dVihmdigue3pNMmo8Q1I5fH4hRV9jazU2V1FMSltNRTkqRWdfYVhYPHJZS1IkVStHM1dCQihwSWVaKiVyb0NvJEV8QHZ+PDVtZT1OLHp3aE93QzR8al4yNUJfKiMwelF0MzNVMnosVFtJKildRCFQSUlsTil7diVJLDNKK2Eldj54SjlUeUthfDsxLkNdYVM0d3xVaXUm''@;'; put 'put ''YTB6eURicm5ualJ3akFaKUlRMG1gJkpielRFJX1ucEJJL0NDezxwL3NRKlVEfCNhN31tSGtTTEB5aWB7XXcvUGpyWE1iUDNHblhZeD4qQnQvfF9FTEJpUn5uMXQpKiY5Z0F8Ojk9MnpoT08hXkp7aVtmRz8/elh0SnZ1OkllaVJqPHsiQDpyO1IvVUtxZDptKzFnKSg+fH1SYmk8bHluNmFTaVN9''@;'; put 'put ''U2ZqfHpZK0dwW05KYSk9WiFofjp7YVU7VztAUC5DT3N5ZjpuIV49OGs1bXpGI0hGPksyKWtPVHRkcnR9ZSRvMmZaeFFVSTx6UEFFQjM5X3tWTD5icEd2KVBYQl4rVWUuanhhOk5KSjBzNG5xTFE2PDlXcC9NVk5Nemg6MVZJREtsdHpSfj9eSUhQPHxsR2doPltnTVJYKX0xWnxIcnt+RH1yYUtv''@;'; put 'put ''OzJAO0okRldEe2wiIz9kYCU9eTFaPmdZdzFiPWZffXBubSRXSWlmeFZlbVJgbHs7IkJIeG88NTJ7WzEsRHouXXpXISVnb3IzKEdMTE5qVHx6KERWcCxHM3NkS0V3bi9lTyQ0eHwrXjA6IjVZRzF0Qys5XTdHMWdNbStmTTVzeUx5YVNoaSE6WW9qZmhXMmFAbE83NVtIcGg1ei5FXzowb1BhKElw''@;'; put 'put ''e35qSHElZ2ZPUHQuR1o2YHFsdnBxaTNKb3RKdSNBKChyfHFQJDNFN3F6fS4yRjdwVGolTmU5W0k4I0hrYSMhbUcvfk9mfXc6NilVPz0vUG8rMUNnLnhiPGhoNSJfTm46UnZZWD97Szk6Q2JbWGFOMk4rOWhmZiNoYihBfCVYP0NMPlcmKFs8MyhRQn5kOFNONTY8UXRWTzNfZjg8PnleNktVZGF6''@;'; put 'put ''JGF1MzpjZUphKHMhTmpjKDNuY1N+d1FBWUpsX0pyU3tLLFs6M3BLRUUuZ05QUT8odkBlQV1sP2VnWDg2MmJOUl5SdHRjcGN0OShRbWBpU1J5WDBPSmRGZlsyd084eCJEdVsyNFBPW1QzfHI7bShtKzN9RGNTW3pebVRqT1NXdVdGXS5QNkwsL3ddQzYhOXlbSHJLY29QTUFNQyRfOmtJJSV8TF9R''@;'; put 'put ''eTBac0EzbzJ2S095aXMhP29mOGlqJV5yIXBdY1NNZEx7S0A0TiIzNE82VnhPVlV7OSQwRVpqUnlydzdNKG1ydGkyTDJkdEJdKUVianF1LjV6Tz9Ofkw1XXg/Nlk+Vk5qciZVY3t6WFhzR29vYV4ibDA3OlFLPjw3dDRpcz1nV1MxLyV5LHk+dSw8Uyh+PVR8PVgjWWs2SjJ5Xm84Jkxmb3BsI0px''@;'; put 'put ''SSJhT3V4Xl9bblp8fDViNV5XZF1AM0doPSZyMVRsNXZCekxMVzdLdjZxLyl4Sj9AcFBvbSg6I2BiImJjZHBzMm0ve113V3t4cWRQV1JyQnFFJWRlJGByI350SVlWNEVDZDg0SSh1RH1xbUVnbFVWKHZkNi5GWUt5bSkpeyo/c0klQWFeRnlKfW1sMWxSOlYvP28jRSZGKDVEd3lmNlo3fnIrNG9g''@;'; put 'put ''clMsXXhgZ3gqKUtvR19aZmlUcXAjUnFELGpOdWt2Vy46YFoqXk9KL0FeUFlxJXBCMCFWWTkkQU9xKl9pe19jN1kmRzJuLy46YTNTdlJKPXNiczhUN0JeQGt5KDdPPFpjVFs2QjAjRyk0WjFRTnhNUUclIV8rSD1mSVtdLFtqLGBPTTpbLHdIQD11UHshNytEYXQ5X1gsOTkyOUA4XlpwVF5fX24/''@;'; put 'put ''NmFDdmJDIWllX1I4RCYhPXxkaUo5Mm1pcypDWVVkXzVbVTVaZVc6QGcrUmc7IlBgOmZoblVLZmdkSkVMWlthKiooRyJ6Lj9DL3pLQUpHUzxhaDFuVF10PnU6RT48S2FWOjFfIi9iTV55ekY2V3o0P1Y4LHJ+VUxkMGBJUDQzL2ojdktjTlJUTkx6ZH11OXExQlpZbWNpfUc+WnBpMDlhYVVoSHBu''@;'; put 'put ''ejAoKjp3PDBLWHQ/Uy5KOWAsQUNvTkpmfDd+RUsyOGklLzgyMTRYcjdqdHMsJWxdd1FnI1RzNkFNaWE8RHhHWWtWSylKeDkhe2dtdVMoQmBedyx1dWwpXW1BclhbbCNdJnYwdWkzc2QyJk9fNW9aaENzMiN1dSJiKVJCYkZac0MyUDp4UzhMclQ7dnElaVshPCF1b1cudGUrYEBQPnVbP3xHNXY1''@;'; put 'put ''JT8mOE5sI3Y1Y3owKUtEPmJ2fUA4fDRYVGxRdSN4UEA8byJxPEUlYz4rLnVTcXxpYitLVyhkREYqbnFbXkRPLCxxSz9fW2N4WnNERVQufSFBNEk4fFBFVThoYnpoXlUvdXRuVnUlYVQ/cDNtWlkmMyN6RUxBVCYzZTx5Kz9LXl0rQ0t4ezpOeixhfl8kbDJ4NHszSWJTcn4zTTFXRnB1RGZyMipz''@;'; put 'put ''TkpVeGNTRDFwPytmJGI7L1kvPzZvei9pa19DQjpmKl9WOEdgejRbISpdP25eQEFRLzleLzJyX3RCekskMGo/ckNLaX4uaHV6MCw6TXo9WG9NbyQ4PkMiTH46UltfN0VJMDtqQjN4fllZL1cuRGguXWE0fF40RmVlSUdNZmMqI1ZbYXpEaWV5UmRKcXxjdz9jKnt6TjExTjlwc0JgXSFAQExaei4q''@;'; put 'put ''e25CfnR8I2p6Tzo1XkUhajc3Rlh5MltOP20qYUFofEI8QSJ3fVpWbU1BVWt9P0lgSGRjcjcvSClSWlQ2S1thX1A7VGFNc14ufC44IlJ0R09qcmopXTh0ejA5RENVW3hbdyNtWnEkXiZ2V11wOHp0c1t2Vi40MmkzWixQUjVsSkNjKDJsXWlXc2lTeShDL3xLTCowO3RuRzFKSklRNy9GQzhnfFIx''@;'; put 'put ''Xi5mW3B+Wnp2U1olKnFAY0FFcltYTHlSMy5RSClhelgyanAlWE1TRkFxTHAjaVZ9MygvIU5OTn0iKnI6Q1NTR3lILjB3PEVpNk9heVtBMCRsWiQuYDxQZ0FmZ3RaTClqaSJoSWBEPXVKcjYlfVIiK1o0XnM4UnJ+JHlGNHtMU3tBZSk0ek9SPnBqJFNHYCs1WyU6Z3w5X2g+QUNKdnE6YDAuLGo+''@;'; put 'put ''SV1WTXU0al1kfCk+OVJSSVBpeCo8Kn5dPUl4Qz88VTBHNHwxSU9CYS4rJH1abGVVSGBbcG5yI3lAJFh9LmxPSHklZV9YbCp8NjZnaipSaVEqQz0jaFowRGJGRWlxcitzdTNAZl8xaFY2YFU9SGw3V3lJIWZFZEkhTVY8My94RixiOFBET1JoblJufVs6bCw5PV0uW3xSdTpSPj1FbjFBeT5GOjVt''@;'; put 'put ''OGo1MkgoQ2gyZSpGanBuZFpAe2JgRU1xPU9rX0dFUGN4THRAaXA0RCFfYCpDLF1vdys2fCozKUdlKjZTbXRNOUE0WVdNUSpWOjxCSTZ3Mj4veFd0NCN3eG1eeWR1WjA4fmFSTUlHKXcqdWx3czE2aCl4OnMyeH4jMDRVYlJNN3dgaV0jc3oxNDRsLlhSXnVlITFXeVcxcFNTaS9de3E+dG4oIklh''@;'; put 'put ''cjxLcztPNSYvVix7NlhkRi5JSlN5ODxDZm5uJWJ7a31oJi5SYXlsSntXOUU4c0JqMUhEUzopZX1EM2Q1R2grOkJrL0JSNVtaaEtTdnJARE48KD9fOkRrfFY6djdfUXQ+W1NlOGpEQWJgOFhBXUd+OERde2okL2M/YjB1fkB4VW4hTWAyPiZpWiRrR3FrVGo2Un0rLltdWV9XWmRPayVWfSVDITR6''@;'; put 'put ''UmdYcldCUyo2QGl9LilKfV5aInYoM0tWbSE4VFs2REZBd01+SGtiUVl0az50MDtNbD8xTCw/fV4ufkVkS3N3NWFlS3w5OlF2OH0ya351Ijt6T0YxXyJBMU5ySj4uJiJqeC4kNz5uQW52SHFwQHdVbEVuM3BUJD57TktSInR+aHRvJFFQQSxnNTlxcn11Tl4/QUtzSSF7UWJ6cl5RRiI+fC9yWXMi''@;'; put 'put ''US81N1FMeDY/KVElaUxwYVN3QiMqUDs6NTFyWikqIWhRc2dhaFozLyxkYE9bQENBJmVOTywjTng0fEssOiZ9S25CY3NWSUl7fmghdV9BcChXfDUqS3osNSZ7JjkoSlF4VUFgUW55Tk4qbGl3bnswXlMyQG8oNjc9ZkhjWyQpZH49MmhJZmg5b2c3ZHJ3RWVaTGhuaDV6I2dpYUg+WjFZWjt2THhR''@;'; put 'put ''V3QwL3FadyZMVllEaWglMVIsNmVia15pbGI+VWRYLzVxeVVYb1krXzQ+OGExTz1ndkVPUnQ7Mm0mTUYqUERMUDtld3E3cm1MPyhaREV3WzxkZT9RV0VKYDxeSXIzYyxhQEtIZmtxYW83TXkqJVpaREdMdDBCfmxXRE1AbD9jIWkiTXdieT5RX3lObnR4QGFFYSp5UXguRD90byhMJCl8NjpVWW1M''@;'; put 'put ''Sj1MI01MZyQ8SyJCQkJ5WjtiIWw4YVRCVSpDJCUje2hPaFlPPyE6SDlLXl95WERJSkdldiNpWXhnaS8mdC4jc35gIn0kWUk7Pm5vRS5LSiRDdlEqXmclYzQoNkpGb05VKSthKlJaNyF0TXhPczErdX1dU1V7LG5OZytMRllLM3EjeTVBMnlqPVNxJHptM04lbTQ6N3puWDkjVzlMJFBRTU0vbDAm''@;'; put 'put ''WVMoL1d+fW9qYDd4Q20ubk9rT3wiQzcwfUJaOnxXWHlPazZ0VHhXS0wrenlDNHsrPW5dZDBRTz1wMTpFaiVPWTE2P11XelBfVTlxTktUMiRpaU48OCJROyEmK0ZweGB6ekRlMWh5Z1RtWylWIyp4b3JOVj5yVmBdZFZjYGtCW2wvNjBIfFtiUkwmeSx8K3UhcmVbJkFvaHUzNF9OYTY/RE46OVAh''@;'; put 'put ''XmptSkpHZXJHO2tqLkNYNmk6PkVJKEhRSVoxSChaMSRvfn56R3VhPkF0KkZFZjVScDhDJWBKbSIoK1RZMlo2PkV0JCxyVHxYVHlZYVpjZUYqWXQkdjZPYlM2TyRkenB6YnJ7ZUU+R0dKV3lDeXU4WUd+MVNyOVIqVTZXWlhfZ3FdbzJLLHo+b3d9NW0oIkxeU2VpUEd3ekBTa0NnJUtpfS5sTyt3''@;'; put 'put ''MXp6Sy9BJFl4K0hDKGlzZXhbXktEMzt8fDI4SyhiK2xaUXA5YGFGKHgiOnY5LCZEU1huPyZOXnspXyx7Q11wKDN3OEo8XWBVXVZtK0ZiVlJqOXo6clFEXmc7R1N1V2RxP2g8L0NBWm5hW2FdaVZOSio9PWJ0OEgiNH0pQSNYekdaNEp0bipuWCZLJXFDKmg5UF5XbXU1XXM5aHBKZX1UVTdtOzhn''@;'; put 'put ''Mk48L254dk91RiZRcWFTemhlI0dDWU5YQSphU0BELkdFd3lpdFIhP0o2JV8rbEFESzZjXWJBVD8lT1gpQXY8WTdLQV9OXitwdUY8XlF5YkZ7e2pIXjRLIWdLdSYpMi9nYlFJc3lOeixJRWRRUzxze3N1dUhGMkhLbFBJIkJlV1U/S0tncyN2W2klWlsuZGBuVWhUeXd+MU91dDVUdlpgZixIX1Qu''@;'; put 'put ''Rm11bkV3OzM+d352QDpGfWIjVHw4WjNsXXJ6REV5Wzt9UGFYLko4LmIsNEw0UWxlb35rWitbdDs+VDVmJXsqOVplIkUzREVJSVkvTWVlW2gleSNzbEJ8IS98YDswfFBeJGhrOUZCUmNIb2JlTFJaN3FlMWNoPUVOZ18sdVgwSioxeVs5bUUrOEJZOltFMT4vSEBSJntvSDhLQClwOlJNMlQsPk1s''@;'; put 'put ''aT1memdyOWp0LjFoLzwiOFJTOz98fWY/Q3FhIVY3SWdqY0Fka1g4NSlGXjtIYDMoUU0qPyR4a1lXT3QqPUlvUUolMUhpLGxtKGssNnJAOTc/M3hoTnltYS51eC89Kl4hb0dXey8+d0pmTkYqPkV4QD5EPz1NT3pfJCxNTip6NUVLQHZMeFRjIVAwNjw/bjhRWEVUTShdaTY/eUJhMGBzKzA2eChG''@;'; put 'put ''QTw1ZSN5NT4jTX5lOyVsaTVqUVlIfkc8UUxBdFBhNDZCVTxfXV1JdjBIOHkwKSh+dWkxSTR3QDZbPlRvRj1tfENDWDRaZ3puZkp+RzttViFWV2pIKjx8RFpPdzFBfEtwajd6NE1wRnRoT3ddOH19JSVXImAjclY8THw7dC9nQjM1TmA0d2xhSkJib25OfiRAcVo7MXs1WXIub3omW19GbG1Zcnk2''@;'; put 'put ''bDhDQ1pCKWJPe1ozTXp8Sz5kaHI+blB1VXEhbHB0Qj4qLE5dNnw5bWdhd3tJIiguRS5McH1vKC9UZktLZlB6RmgmQUBeNSU2P3s6QVorJlpZOHBBIy5rfHg+T3E2VmZNS2RWSGlZN0gwTmxFZzo5fWV1emVeP28vL0ZEcTRXPjElNXV2Xk1SXW1pVVFJc3pJWV9TVXI8JV5oRUEoYFAoUSZhYUFN''@;'; put 'put ''VyIoMUl1M2MsL0NTd3N1dWZFU1JEbiN9eENDVXNLfjxMSHVROkEodjtTMFJjKll3blspYmRrNEVgR0QmNHxaMGl5XTAjPF5BTmRFaWUuWW5kVHtATHtvfF9MKkNWMngrMEw4WT1iOUJTL1RlY3pxUHl0Rz9bcVs4QkgyOTwhcmpxKS5iQEM7InQ6Pml9WUkjaF98bENDUGprVWYlODZyKDFGc0xG''@;'; put 'put ''WW5eeG9+VXYhOS86eTkyXTVJaCRdQWJ1S3hOVF5SdH1dWVM+JlJUKVV1emcpbmpjIkxadncyKnZta3VdOC50filQdFBgL01UPUt9S3ZDQnUvaTs6Q31mWTpMVERKe30iSVViXn17MD1FPH53ZjhfXXFxdEgsRHpbaCkyNXExYXh9IXpvVHIlTDlvLEhXalQlNzZQN3Njcm4hWExgRDY0I09jaVd4''@;'; put 'put ''RjF6bS9fIkx7fkM0blNransyNX15TCFLIzkvaj5hSWBock04cXJoRCMjX3pxN21MXyhoTWgxPjdwc0phPGtQS2xRUEI6XW4vYWJYaiwxWCowSUg1WV8vak9QOV90VW46Oy54ODF+cSY9KWlpNGBbb283fnBFTTQpKSRnKTE9OUs+c2B6XWd1Xk1iaCYrVEZSTj8iWTs8In5eLlhmbFAiZiUlYFs4''@;'; put 'put ''SHxPXzxBK1FNZ0VUXi42ciZ2Vj5YKFhkZGxXayRuW3hXPCk1cy8kKipaPG4jSUtsQCN2cjR7aEwzLzFORH5CSHsicUpqNz5ZN0skXUIyW2YyMSl8eHcrW0JHfWVaIlBXUUZmSj9malRtYEhrRFR+KUdzeGhiOl59VlJuc0gwPCEjTlBbOSVeYnV5LjtHPSEsL3QyKnBgRzE7MnVnVXcuImRKdmFv''@;'; put 'put ''ZDAoS0l4NHFINCJ2RUB2dHRpN2RYWSpkImBQOnBwIVBJSTB3cSRDSUNIIkc2eWxuWjEma2Z4e0VscltgcmozMGV8LkdjdldTZVhKVywsRTd2KihtUDJyMV9faTRVMExXQFQpTHl5Mnk3bmtVPmFyZU5oVU5maDRRezhUMzNDU2Y4KDVFTy5EdUAxfmQmR3JRJkZScGcjPCg+UH5bPEx0NjpnUCpA''@;'; put 'put ''fixBUDMleDF4eXApa3xtN242RiFveSssbUlGWUVWVkJNMH1ZRWhIX2hpIVN6XUljP0o0S0pCellDSkRgeDJ4eDIxOWFmMWFQLypCS0YzTiZXWno3VDZyJX4+ekthN0RNVEZYTUtza2V3Z3tUUCk+ej1zV3JJfnhMN1RYakBGOzdAaS9TJUclcEA6SFVYUClSVkdCJnBlZDgiVH51bXg6RnxCNk1x''@;'; put 'put ''Yj9uNWo2fHUlTGt8QzB6QWF4enUhbEAva1pPanZ7cHJianN3Z1BmYmVaSiYkXyJVQDA+aFF1OWtZeSs5V31MR1hYQFl6MTBUPHhTQzhdOT89fH5rRHw4VztwZV5nJEpLVWo4dmZ5akhfd0lFPW9EajkwJE1oXmpkYE40dHlVIVM1WGpzcCg7MS9yNmltTHZXM1B7IzFoTjdafVBNJFRCImdFTG4r''@;'; put 'put ''ciwqdlJ8WFZOJjk9I0pWWGA8LmB2eT82ZHQyPU9iKGgwd0VtUG9seGVIOyg7OGhtMmYvaUI4dUZ2PnV5UUluJiltP3Fba2h4YUsuS0gzcnxlLmJLSmpiZH11MDhpd2R8NWg0TjxgKE1pXkhje1E5X0Aralt7SGVXIUVAbz0yKT15fCRSI0RtMDRmfmxjNUg/WFF4VlJfenUsJnAic0g7U2pud1tk''@;'; put 'put ''JFdefCMlVUpkIUpMMDBuT3teQEBGXnVsSiZTYlBdcHpAQ3VNOFFtaEZoUz5RP19sd1o3dG9WX2wsQy88YUcwVlh1LlRna3UqNTllZV9weWQ2Vm0/Z3tdbzAhOTBmVztvKDdFSWt4VzlhZnFlQFU4YUROWFo5cjN+USZNZzxHNnlLbU8qKEZwSUVmLl9WdD9mJSFPe1V9Mk9Ie2I+fFdzLzlKe2VQ''@;'; put 'put ''eiNARGQpZjMpOVBXfHVjIWx3USFlNlJCPVoqZn0lWGJGRCx1PUBacXpZSShSPkZSfWppTn5oYCxQPT5pSjImfjd0b1lqL3A2JUFkfS5WdClJX0kmSlk3L2d9MnUoVH5uI2Fnc3x8PU5VIWlvSEd3YHssX3pOTEF2VnJPLE93ay9OLi5xNCRrSV5udHQxb0wjWzpUIVJweWh3VFhyM34icyxoY0tL''@;'; put 'put ''ZzBFYD0sTFFKV0xyQ2dBUT94T0ZDNFR6fXJoZjtpUzRwVHorWXVgRGpaPTdAVzJFfGVvbkBCXU1UI0hPJVVNQ1h7VE53dXc8K19oUmtgXVNjRi4/aHVMTjJOeF9pXlAwKG9oaUZaN3hyLjkqdUc7eUJnaCE1L05tamNRVWVsVXlvWk5ONXY9WilBPm5tNW9YSFgoTlYiX2VMaEc2UyhVSGZyV1hI''@;'; put 'put ''PjdMVH1dVFk5RnBPQ1s+NF5sS21EakguP3lqIW5NSi5EWXQ2ImBsKHJmUCw9SDt3S1k9YWBhV0gwSEVEbVZgSk1JK2UzWS94ZEMmMCRuRHBGJEB0MHw+citLfWMsaUlKVWxSfmw+PER0M1t7Nm9KcDMyXmwkfDp+VUBtNXVJIyNHTFljaEQiZDwhazRBI1lOIzdnXTQpM3cpIVJxdE85c2A+Z3dh''@;'; put 'put ''cDBtVDU8RmZOY1Zab0RLUCVTJDZrRzQ6NUJ6QSZZdmQ0SGlyKVpFWnlWRz5vOStQXTNnPzteRlV7QHpDZTRhdTtTKFBVbyY2bik/U102RSlCJEVFakNQJF96RmZna19nZjo6TU53Rk9IKyR0amN8K18kbi49LC9qN0BMYVp4Pz57KHhjbWI0fjguWy94cEFZZnFKPS99T1dwfjdtLCZZWFN0Qktg''@;'; put 'put ''WmpuNTlgbVNnck5EZlRdYG1ZVn1peXowej0uIiZmOyxnPkglKjdoVzdsYE43aWtxXThKVyshR0oiX2Y4JDFQeTxdIz57VSRfUENDKF4oU1RZPHxYYlIyJDVXUiI5QmVZaDE8KXY2JiQkNHQiZEJbejZrL3pDPUVaL1tmXVIkOCIpL2lCZnBmMzZqaEN2Qn47MS5YYnptKz94NjV4L1k0dm1MMkI/''@;'; put 'put ''eiEzR3xfZjtmVmo9SGJIYnApQDM4Vj4hWnMwRWxxUTBrbU9JKjk2THA2W2IjU1lDbTg2ViVEd3BmQGVmLD91eyFDXyUuT0MpMjBfOSxaWio/LlI5WlgsJSQ1akMrM0s8TCJ1X1E8R2tWYzFAJk8qfkxEcTM3dTl0a21sQSZhYkw9TVY6SzZ9cEUqK2YzUDh8MWc2WFZLXi9sWHMoYHNSaiJtUTAr''@;'; put 'put ''fUczW049ZG1TY0h7fFlZaTd9OmQ2Ti9KXz18QG9EekFEa1dpMzx1ZWwqPVhmb0gsWzQ8dVMuOmZ+PzR9Km9XU3FKJS9oaXVRQWFvdVBNaFdAPlcsOXc0c3VTVXU4Uz9PPT9AP2xFSmVtVntpJXNJRCN9fnhjSiVYZmxNey9sVCIiKXVhSndrX2hOWUNwPFRAWTx3ZDZ4MksubXBjZ0xXZXg4aU1Q''@;'; put 'put ''VGQuQ3YjK1c+Y0ZxTXA6KVFWTWhVJDFzL0dIP1dKIytdfiozXkpXKmBYUkY8S0NSKnZSTE5tOns2PSkxOCJTej9aOU1iMUFXK01zTWAxTmtDfmpHNG4jOCl4e3szXSFRMXJHY2pEVjFZU29DfWxlS0RzN0J1SHdgLyg3PyM9ZkgmWWBucSxiW0Z5Tk0sdkplSyo5I3BHTjYlSkpKMkJ1fFNHYTZd''@;'; put 'put ''dFEkTVpRR1tnZFRNaXx7am4yVzxNUlUhaDNWa3F0dFpVVXw6eHYsP3dlR0BhcjVrXT8oYTpZVz1nMSF0Kn5HTG4sTF1TOltNLEMjdlBSXnlNY08ldSNua35gJHpRKGh+Q3UoJC91bD9uRGN5L3U3Vnt1cGBRVGh1WXpWfX1VNTVIYmR+Kl5SfCp9PVRkMXtRUUNOQT9CfXFRKzpeZWBsSzNSYWZ6''@;'; put 'put ''JCEhSFhQS3d+T3EmfVpSdiFrXUdBSCVNUzNYS2x5RjBtcTQ7MmR6L0QoPldPVUB2d3NhQyVSbS80cXVAaW1pXXJVeCRjO2N8Imc8bkNqW18+UW9JSEs5Y3duQlskdCs4ZS5sR35xfDRpJFNEJmp8KEB0PiY2dmheLl5aRUU9RDA8Rih0fT1zNVV5XjAvfipMMENFIzx+ZGJ2PHFwVnx6QUl3Rmhz''@;'; put 'put ''dSo0ZVQzajlNcTswS3FnWkFIcWR4WXo/RHJfKmJiLE1COkV4Y3JUXnA/V0F3JTQ/RWM1Zlprd0QoLGJvJXB2KF5SfHo4STlOXTgrQUg2UEYuXUQrLl0ob2J7aHFadGZ4M3kuLzghdUBGS2gibG9wfmZkU1M0JDddcTthPVpJfCF1ayw2LH0wNkQrezxvRF89NUwrakt3QVQlcyVhOm1SWEk1YCs/''@;'; put 'put ''N0RKRlJgdXhveTwqaEhsbXx2QDEpPWJWVj1pXmQmJUlQNF4sNnx4R1FtanBANiUkaWsrRyEsYzx0fSZ4cU99fUZqbzAjRWs1OzQ4ZiE5SVpoQWFiN1VWR0whOk5XSWwrRG0uOSY3fTNfUmVeTl56amRBN0RrWkNXUytSZUk2TlBLOTxfcDJPP2klc0pmfUc1b2l4KTpydjtMcVRtOjtJI1kpdFtC''@;'; put 'put ''dTgjQEJ6UGUwLDh2XSY6Ll97Qjl+THJOQihJWik8PUd8RCtEeGAqRjtlKVRTMGV+PGQscWpFendPJWxUVWA/R1dTOEx1fXxELzU3U3g0dUNYSDtESlA9fFR7bFprNS5LN3pKVkByM0JhKGBJV3sjbU8hWld1Zj51bEV7PzdCQ2lYIiYpZihAazdIUHdqJiE/Vlo1XXhfXTgyZGUyQCh0ZytGdT5T''@;'; put 'put ''KH0hXzhvRixtWjRDbWF8ZCZYMEs3cD9DUHhjUShjXkdiVU5ZRVoyRl96NUV3Ul1GTnk/TFltJjYyPj5GVDMrXygrJTVHSGg+ZnBtZFZQZk5dcmh0ezxmSmg+amdzPDIhUjFGO0U0eCNeclJ3bkZNYHFHfl5IbXpjdVR7Z2IqSDNSSGQ5SVc6TisoQSwxQ1Q4XVBwIUhaez09OzUvZT13ZldOQ2xa''@;'; put 'put ''bzh2N01ZSFcxQFZ1KWYsTjRzLGc3SnosU1M5QFF8OF0oYndWPzJDZkdhfSQiWnhafWAvK2QvNV5ILj88Vm1vRTckQF4zMjZlTFdQMChaUFowZm57UFA7W3k7cmdIJD0oLE1Ja2RVNSkpUlRlL3ttaGA0c355e1sqJWpeIWhFaTR8WCk9My55fSNney5+W29KP0g0IVlCdG5KeD8qaGkmMWwuNixi''@;'; put 'put ''I1ZGJXg5bEwhY34+TzN2TTFLSEx7QjszUSR1UUZUPmJbQkcsLFUuRjQvbT1zNk8pU18/diVZJGZpO0R7UG0vc3BAZXZDcEtbd0g8PGUxcldjOi8+OHo6Jn5CLiF9aURaLFJfPDNXMjs/PGwweFIuOntYPT54aTF+QHckSSluYSxGWVdtbF0sNSU7TGA/KGwrImYwbF0uOncyamtjd349fnZFSFph''@;'; put 'put ''TmJ8ej9HWzokOD93OjUqMGVFQSF8JDJORGJrMV5XN3x8LCI1e2VxeC9VaXJXQE0ofDVwSCM5Xz5wYV1weDk4cylDND1mRC5lcEhEWjpwbXkzXj1JR1NUUkJsMip8dFYrOERHVG4mIWIpY2I2ZXZtemV6d2J0aVVwTVdSajZHVT0rT0FDez11ZkJrfDJlTyh8WFo4XzY/ZXhFLEZ6eUEzTlJNTkw7''@;'; put 'put ''YmBuLnMuakohXlRHdlcjbS5VKW9tR2hVQENsbzQ9UUcmJT8jIW4saz98KjU+OWZaQjhQQWNCQkIvK2RTPDFINVJdSno0ZkRVTHhpUTg6eT0kNktgW0A4ZFYhcVpYQmZZeDVxSzI+RHxBc3JIIUZPMG9YRT8zPWFdXXZNL2lRRGB+KCZFZ3YjKGtxVURDcnJiO0hxQ1BXIjZlJlk1dHVVXnBRNU9B''@;'; put 'put ''IVE/PXR6RWVZJjwuM2JGNz4hdGMmfkkmUSY5TTJwTEhCa3MiNUd5W0N0UmBhJXNUSmRCZ1NQYihUNChaazM3Y1NYcmVhUlBBVF91fEk0NUhLYTJERDBOWzdsO0RSNnNvNj1ZbWlrZX1PZSQ1dlIuP2pCWVtZRWohfVVEN30jZlZkQG18TVZMNCksQGEvNEhuL2FnJlJaWnNKYD5sMHJdTnJmS0Bt''@;'; put 'put ''PjQ0N3tLZzZQSjp6NitTWENDNGw8KiJyUVpdNGZkR2pPLkJneyM7dG8xXSNHbFM9VDViUyRFJW13YEhPNC9NIURDfmQ6dTp6VTNNNXp8ZVhWWll3bXVRIn44UUxMZCg7aV1xSDMiK3lnazBSK01sT0B0ZVtqNUdZaGBzZFJXSkBHQyZYQmFSK2VhPWg4SVFPSzVPbU1iYEVlaShUPnNZNEA1T2xI''@;'; put 'put ''ZlNKYDVGNHRkJUteZnN9VCN2cnswSXJFOj06dDReRmlRKks/eCEkQWd6JjEkeHBySTgpMURkMVZQUWRTJSk1QmIqTSNFayVlZ0N8ZGdGeVU/IjxhVHc8Ll9zW2IpIUpRTCI2ZDV0XWteOE1KRFVqIztNRD1TWzVCXWohc2kuaTlyMygrKF5zVGlYd1hjWSkofiVoXygmO2ciKkV9OllLeHs+dkAq''@;'; put 'put ''OkV1bzhranhzaUA/VGIxSVk4Llh+bWV2KlRXamdITXp2aU0iWjpJWko+aHFEOlklcTVlU25Cc0NMNWF8WD9jL3gwdGFYZHBSZU9vQyU8cDA1cSNjZz88a19jOVRHXmVqSUwldkdRdjFfbzZfNlhlOnZpdHZEXzlbJGNaQnVSbD8lMUlLUjJARFtIUzJadE1lSk17XkklLER5XlIjbH4+dFN8ODI7''@;'; put 'put ''MSg4X2s6XT10UCIhMWlfUHQwfTMsVSp3MDMhVyx5Z2FjcU0xeGduWU9GaCVCXzQuW3pnK0haMXJ3Y30xZFhMXVQzUkpYKilBRkI6N19XTnB2V2BQTTNFIUlwRndyR1RvRDpKdSlUK3tXUHBUcWlxfkImL0crIVJJPnI5ZEdbcTtvbU56NVlfIldsRlpoUlc6WUpCZiEmMFteQjVmZkE6OipSKDBY''@;'; put 'put ''WkhiOlV8VCJVJWNwa2JwLmtbMHdLSTU/YW5mWiU1eDBmVGlublFfbGZ6Q1V2TiI+aVIuUH42dkY7KzhPKDxISnpaVTdjKUhvRTMiPzRXKl8yQyI4KUZFQjM/VH11dU1EfGAzZ2AvM2c2L25eJns9Kik8LiN3cUtseD09W1I9UFFzIjVfX2h8cjpJNU0hJCJ7WE9Ca0YscDtFMFdodi5OOTFrezs3''@;'; put 'put ''JW8mKlcqJWQyZGg8bGMyZG08bCQ9SSR4Y1AmTG1CUm0zVV9FUloveSx9LmY2M0ZRRGcuPjxmM0dZRUpPYC5Oeit2YktjKT91ejxzW2NsP1M7Y3c0a2dCTzdDUl5sKEZvXXFxQFQ1OzdpQCN2X1QjczJlZFRPelBxPGUoK2diNXZ8dGhNX04qW3wzfipkIjZ1bjY4b2xAXU08czJVYHpNIUY4RDpz''@;'; put 'put ''bVEhUzpvKH17c0NHTndUZHFkMSk0IVlZOF5ucChAXjdkbTskVzw0PV81YDJnVWQ6TUtYSyNzcFpLL3g5TWklOFldVTJIZFJpMlZBME06OSg8cmlQNyFtU21QcWkhZSlGPVdWRz1oZyFsKT1ONkMwYUN4YkN8TCU6WkdWe1tRUU5uRDpyZHtNWlVzfUp2JnE8cGBtOnAuRX1zVnM5Zkp2PWo+VjJl''@;'; put 'put ''JX1AbXZBb019X09pOTI9QCt9SnkwM2hJLjJOWD1JO1N3VWZ+NWtFY25eMyYkKStdMTxYKjtOdGJeIVM9QWouU3V0SmgoWEh3RFkhRTdffil6aDtzYSJEfXJVSCo8LCZbeVZdXnslIzd3N2NdR2NxKUk+MHwjU0psb017S0I2UCVYZyVPUSg7L193dFt1SXw5VUA9SlRPK3J5dTFUdT1QaEN0Kl19''@;'; put 'put ''X3JfNUNGPDpKVjhqX19Dai83RzZWXkx9PV5ra2MrVGk+Ilg1ZHMxI1ljTntDMT5Ze2NSPz5aazdYWWJVKVZkYWRmYH41UVUkc1JSY0MsSiEmV35MIWV5SFpTeXoiZH5VWn1MQEtLRGgwLCYvZ1RyUzQ1b0s6I3NZUU1OSlZAfGMmUFFhdmJeQ1okWC4yaiV2eEdzamMvKnJnMWFGRDdwN2FdSnBb''@;'; put 'put ''W0VVVG5ESTY/RTlvRVpMQU9RTDM0SCR0b2p6MXRAajtjeS92cWd3N3ByTmhxQUJjblJdYkd8a31qTWlDKXYsbztaLlYwPyYmdTBmT255eSl1VDZWLkcpSyk1WlpyanhzNmIxJE9pa0Jvam8sdVdAblYpTCk/XlhHel4wN1Y8RiExSDVfX1lJe2NUejlEUlNXUUNfK3JAfmghNmNgOXchL18qTFo+''@;'; put 'put ''ImRzXShCYUxmOC59TUZPO3ZWenJaeSJIKUNiOWA7KDdmPzZ9WGpbU20rKXxFSDd+dCtzfFhWQDxVUW5mdEhoYSprckNZa3Y8Z2FpLDt0JFI0dGZxOTtGdnxrXTE6RVkzRzxDWExmTHVCMVQofEl3VE8rRGozfDhWODR2bVNIWGIsPCMqeih3X1JKcmtNbkZMKlBUYjdVPCtNeklScys/UTVkYjxy''@;'; put 'put ''RSUlZXFweE5LQDM5UGRXRkVOX2VNWFNvPElZRUQvaTs4bEJmdWdBQ3teZHh8eDUqPjNGJW5LIXhoZER8SyFbNXV5ODh3Py54S0tfQzdnRip6OTJadEc6YT5xSThrUj8pUTlMZTp0SzpROiFdJnFATmtGRj1mL1V9U00/IjViWTNwNz9JNztFZntncHhKc35zIzYrSz9MQXx7dWglNGBYUyp5eyg0''@;'; put 'put ''eGpGISZ3VyVpO35nUTJ+blNbbDIlYz9eZ0MwZ35ob1lbKUN9OEUlOSZnKj9yYzpbfEhyKjJ6QFdJeSFkUF1KcXBWaDB6L0Vsb1ZLS0gocXY4YzA7L09OaXFORy5DRn4oQiUuIng1JF97RXB4YmUlNEpRTnUzZDZlYCh3JCRNPHFUTC4wQ2wmd2shUyNgMkgjMEpwZHpMQCE5MytrL0AwdShTej8+''@;'; put 'put ''VStMYk8qUnRIKjFFO2xCN0RZYldSPEc2U0FyQks/RSFlV2BtZ3g5IlIyUDFTcm1Ebm9DK0dtY1NNcHB0Q0NKUGFja3A5aGlNQTlVISFaQnEvcSFiR1dLNHo8QXFVR341KGpyRlI8dU8sYzdEQHk0PG1nRUMrQitwKjt3VEw0T2A7KUxOR3U8SFBWZnspNzUsI3FvQUs6fStoTD1MQncubnNMfWhT''@;'; put 'put ''VEliWFVWUStkL0ozfjcpSy5nPT8mcURQPV9WN1BYailURHM+XmI5WCYmM3J2PEBMOGx4cT8hUHIvJik6cT1wZjBMOCx4REhEbmN4M3BjW1BtOyZNdGFYQnV0MFhlaGQ5IT9EZlVLNk1CRXVneG5pT0A+TGE8NX1NREgxPVlTMygoI2R2VVVodFNzPHV5UHphT1ZWNiJxM3EsO2JzJiFzeWYuUCp0''@;'; put 'put ''elFDfHZRd11BV1hMUjJbb3l5R3c1MlsweD4lKUxxOV9ocmB8Py8hKkNxd0pObHpSMWUjaHxLdWFYRj0sZSRaZWQ0S0s5Vnh2eHlKUUNuUStZSTB3cT4pZk5HLFEoP3ZeSj02MXR7UzBoOmgpRmBdU182JFZPI0BmKzkrWiNAOGh8NTpsTSw5RVBHcEZvY0lwWyMpWF8xOX1OPSpLPXx7Z0NRYTg+''@;'; put 'put ''QSZ1dFokUUhMTiwhZ1g2dSVMQE4pL0xhQyskcTxuPjIlW0lGVldERnJlZ0s7MjhDKlloSVZvQEExVGJmQEl8XTskOlNmQj93Z0dHdWM5U2RJNzJUVVZWeFUwSkA9K0gzI0J6Y35dKFUoNk9ocy9va0VsQWhwXkhgdjt6MlNebVV9IXNgLmkyI1RRIkhyIURCbVcxInVtUihCeEYiYX10WjAzUDBE''@;'; put 'put ''cCRHRXFzdyRhW2NeRWM/d153TnZxWCViSU58XnAvI0NNJipoIiZFWjdJWn5FflgoeCU2Wkc7cXN3QlQie1RfaTVyYDFeL1shPyFTRz5abG48eGpVPzRrImA/b3l0JCptXjxuNkVaOWUvaDk/Y2VeKExfKzo/eDduJXdeZEQ1fTh4NFZENyldVylsXTBhIm1hTzdYQHBkdzx9ZDxsX3p2TXpyVmhb''@;'; put 'put ''NlZLOCtFUjxbViVXTChYRz08b0VZQ2gvKWE4MTVsUEMofTd8fnJsNTs+fCtKNFpARXQibngpIlBQbjwrYzh+O2FJZXwwdDNlXyhwOSNrVjI4Q3RzeTErOkRkY2hiWG1wOChoSig7RmljcVo9RUgyZXNgK005P3xeM3o+RVI2QF5YZCF2bmZZWlVvMXdXJXI6UTtJcmRoQTJGPkljLlA5eSE7dyMx''@;'; put 'put ''MCYoKklHKSo6Yj1MfUBdV2hdMVN8N2NeP3VyOz5WZVBYI291KFg3eD5DKGlhRkB3STsvdT9TLiYxfVJKRFI1NyomZV45Xz9ZXT8ke3VaWUcjZyxYMmcxN3hreTI7QWJLOzExcFNJdk5MKFdIWH5lOzZ9fHp7WC4udzU+ez47TS5PPkI8V34zQ0xmLHBrKj1TLyUqUUMzc2k3fD5xJmFnS3UiMkB9''@;'; put 'put ''bzNBP2dNbnt5L0hfYnlaPEl1R0BDM0hDXmZtRjs+cXJaRm9fR01ze18sN1FXVHxMdiRzO2NNMmhOYnV1Y1c3RSxkbmI3Py9pNUxxJD9TMSJIb2xqYiF8JGNGPztrOixWc3hAe2FIZSx4dWg5SnBbOGcxbl9LWDQlVXpWOCxpSmw/L3htPjtIKTVgX3V6Mm41MkAxSjE9TF8zVCw6Lks5bGJGRSRu''@;'; put 'put ''eT08bWxAMnooLCtVKW9qOVI7bSRHK1o1LmMsPllEJT1EW2J8RTd9RS85eFVxd0pNazdWZiQ+UG9iZCFEeT9Ee2lUMTN9ei94Y0lAMVIjJWJ9ckhvU2AwdTNxPlZIK35nfCNydDtSOShUeEkzcF8lPjNIXkFZM1dBT3tbRXg3S2twTjBwWGdXVE9yZi9bfXJAYU44c21tKipqbWw3NztjUkBVOWBB''@;'; put 'put ''W3lGU0k4Q2BGS3hydnNvfWNXanN5NlNySktockNlVD9BdGY+JDxZSV5XUU9MISlyWn5mOVg1YG9KOCRMYWJ6MlJIYXYvW1h9TyVCfHxEcjBUV1hZTGEvc2E9TSRQZjRaV2kvMmRVYSl5WS9RNDlaYn05Z2QjPmBseCNpYkYxcEBlQkQ5OlM8b015VUhuaW4jMnl9Z151TVlhU1ZteS5KXUc/YStP''@;'; put 'put ''dVd1WXdpaW17MFhuVSwrSj5WXm1iVClLVm5xVzVQWzoiN0tjJSZgSDoieFBgVSpaOVpdKmRvdylLMDJUI3JrPkBgMXV2ZDlkJGo6ZlVPVm0uQXcrfmopNiZIKThqX2x6W2RMNUFYd2VySzQpbFh8dSZ6bGcpbk9TPkp7b0Bze0dFeUxyJHwjQVIidnhweyo3TT1GYmNvY3hyKz04Vz1JMGpTMExR''@;'; put 'put ''em42ckQlbFdvPklQJFBYIzgxTns7YThMJG1GW1c8TG87OVI9OFUqWUojMEw/KkFwKSpJWGZhU2guPH4zO3xqTng1eE1UaDgmXT0hREw1KDwydyIxe0p+MURwVDVsY0gseiFNUzF3SVBHMERGWzBDY3t6Y3ROdERJbTIxfTBrJVpQfk94RFYuQlQ5OiwoLilKSEBJKWUlbnclZjdedXtVbjokT1lz''@;'; put 'put ''LlR5MkJBRmdBMyR0cHd8VzZHa1VebUFBd1JXT1NuZ0w0eGlbWEo0R1NLVV9VZlhGYFFGJWk+VUJMIWBnLFZ6LHAzTEVxJk9IcjZqIl5VKVJUYyRgMz5TZHN3a1Y/OUtqWz54c20ueVoqfnFuMFczMEBLW3wxanphZjZGJEQ/PEhEYF5OYEs5eUdiISI9SUN1Y05PamwlOjFneD9hbn05VSFhMnhw''@;'; put 'put ''UyRaUmFuTUshZW1BSih8e1pnYjEyWzJ0YztHIj80fXhpT0Nnc3p1LHdZR1g+aVErTT9fKGBKRF44d3A9e2d1PiQlQCVHOVhRIWA6WDVzIXxyRmhFUVlde1tjJGdXT1NtaT43ZyZkUmNQODQ+ZWdFMjVsbV4mSi4hZTZdOTA/c1ZQM1NNPV5RNUI2KSRlbF5uOWQzYntjKW9yQ3khNFUpfUFUKHdI''@;'; put 'put ''NDlyN0M1eW5oZ3loSltNam9tfEcwNHBkMVFoRjJgWS52MS5GazBhKnZFV34/XWBiV2J1V3BULjRRWHFEcXE9OFNaRmh8emMpPHdtfGBnY3tXOVh4RnI3S2haTTNwYkhGUnRSZVVlJHt4SkV7W2VrWlVQKzNiInd7SnhzbUhiUCJBOFg1NWs4T0ooUUpacE9gX0ZwJkY0bUtaXSQ1N1lsPyx4eGcj''@;'; put 'put ''c01XX3NwMSEqdHREcFRWN09ASj0ocz12XlYqemNaV2JhXjRre3IvWlRtfDFMV1ZuJCR5blpqQDU3Sk94P1MlO3tLbXNrWW1gM2IleU9baFUmZ2xCOEsyLmAyKzs8L141c3JyMkdNaGU5WG49UF9qVStRYEdgSVg2dytaNkt3PWNNbjRqbS8wRV9SXSl6OXJvcT1YMThMOkt6NGs0eDJYJDZgPHh9''@;'; put 'put ''OEB2OGJ2VSJsN1guSkBkKTBGekdtJnJSRypKZnUmPmIleDdXdUxfcEM6aGdJUlM9KGErNj8vYXcldCxJSDRzXiJ7fncxYGxOPVQlTWRROV4kfUUhZlAwTisybGRhaSEuXz5DNEBYLGE8VzxLdStJWzAxKj8ocj8uOyZsLGorZUsqMyZeZ29EQj5gOyhxZEsrdW9fQ0I/Xy9QL0Znb2RTOXp1eFRM''@;'; put 'put ''fHY2b2wuM1pbJUUsMUo8JCRFJVphIUJlVWJlLlpgJD93eT8uaEsjVypERDlLaUd3XTw9KjxTdi5jY0dsUE8pInlreVBvVSt8Qjlxdj5PfGF1VUZZQnkpMFVRaTh6KCRLMC9wKig/I0pDfiNxRjhjbFJTVGZwc3E0XkowLlRMIiZ7Pk9DRjs8WH5PbGdzSDE6c3xtNnt3alFHeCs/TGYqRXM6e3hx''@;'; put 'put ''PUZJLylJcj1weyVaaENjKWYyalF5ZGg2QW9iM05EVUwhZDU4U0cjVGVbLDRDZU5IRiRIZUM9WGBVd0E4JXU4YT0mMnM7fkRwbHFRViJIRGh4eE4yK09gaiVzOFpnLEV0ay41V2FRN0woSGVRU31rNX5eWiRCMTZSd1tmUypeMSo3SEJyfCFwcENoLyNkWlIoMVMxYmJGO1ZtazB3e01iL3V6LE5p''@;'; put 'put ''flo1Nno5QC5fdm5Hc0hTaXpdJXdVMHNgfDAjXWB5Ilk4eXhEZjFUen5qRXgrMyxrOiMqMiw7bD1HS314ZWh4UT9hTCN+PjtXISQ9VGYien50ekVNY0RNL3pIK1I+diNIeFRXYTwhV012Nmo2ZFclRTN3JGJvX0NQMHZEaGxCVXE4OENiXlgrSiV8KF5YeXRuclM4bXJdaj8iQElNZ3lqeGBhU09D''@;'; put 'put ''IXx3XmxBN2U3ajMsRlB8T2dXWHs2O3heVzN+IWsvVGFQMF5WJjhCeGVvbGFhejE/Tll4RCY3Lm1wPkguWD14T1V2b3w+VkFQRm06ImI2UnZaQX1vPnQwYklBWjpRYW4/SWlPeGZ9REE6MS43cz9NYH5ZZC5YcW1fXUE4PENkJjAmcklQaSpAVUNYIzdsZn48LGR6XnVIezQkczU/e19+Qm9RI3RF''@;'; put 'put ''MWAmdy9VeVRtZU4we1AmVmI+OH53PyNnUT5ASGkzRV1NK31iLER6TTpaVWx9Pm1TWUc5RUZmanp5dEFmISx+byRKJlZDMzJsZ0dhUVVbRll3U01MajxSKTRiXWtjJF1VKkdWRFgqVCpsJkY6NVs2XzgwfWEyVzFecS5RNSIpWiFzVWgjbHhFKEwyIU5tTCJnWzd0Xl8/KjBTK3FqbEw5cVNILCZ7''@;'; put 'put ''SFtXYnhJX3p4VWF2XnptPjB+YUBacWpEajl4IT5vSUBVK25JbV5OODJIdlhoeltePi5wUC8iL2spME4vRVp7ZVRXYERkXXJbfVZHQnNNPVIhO09CeS5AOVFVPkZtVGprbyE0XVVucz1fZ3gmUWd1L0BDeVQ3THZKJEh6QnxERV91VVZHNzxVUVt+anIpS0t8UHF1O0w4Z35kfG8jeyVSdGZaUVI+''@;'; put 'put ''InBFdzRGdSxBd2t1X3NZU3B1QihnQDAmOzElUih9PSsufVNSaz9zUiFlQUdhKFdQbTF2UWVaakIqW0FzaHBYWTBqYi4kNURyaFQ/LjU6JGE0PkFsfXd9VCxlKyFkeztNZy9oVl8+PWFPYEVLfF91LilzczEjNVJAYWAxYzZfZk06Zkk0NkRQNiNrU3pbRnVPZVBuYEhLMDJsVTd6RmM6RzYhdF0/''@;'; put 'put ''SU8sNWRSSk84N3YkNnlJQSJ2LHY3SzhIa2s/JkNfUHZUVCZqZmlyOE9OLEJkcHYpIkxyflRZaix1YTlOeEFySW1iJSlgc2tZcGd0IWRaO3UiIllmKm1jTFQvWFZoPVBrLzZMdDYiMjI4bl9aJSRjR3NDO3lxQHlRQjpJb2YmKlZzKipKcUwlZWFGbCt6W3Fib29jNl4/eH5NNSk6ZFJfSXQuXUYr''@;'; put 'put ''SWNTbjNHYVcqd3hGLGxaWjEsVyh2SUQuOklBRypJV0dhaz9FQGVfPzZ4NDlxbn1GP0tBT0NYITZYNzkvJTYkJXEmJmI3Lmpie3hOZCRpbHp8Kks7MzJXZiRlKVNvPzkhez8pfXdjSCUzXmBYMGdaLDc3Y0Rmb0NIM21lTzw4Km07P00+eC9zJX02Ll4xUFs8RzdWUFRycWA9Qk8iZV9LTVc8Wz97''@;'; put 'put ''K3U9cVpgYzNANFk7fnxwKEhKOW17djQiZTRKQXVnPzdyPitAdU99KUUxZy5wIzN3SDM+RkgrZz17Syg/ZEp3THcjQ21+NlB+O11RcCtZYjM2PjhmPjZCRTNxSHNyIWZmKGJRV0x2eTB9KkNTLzo5bGRzfj55JFImZDo3byIuLyFqNEJ2dj09TXdtQCteaEc3WDYxfVJpRSR8IjZtZ3pqMFBJTXN3''@;'; put 'put ''PD1Sd0BAIyRVUVREZCpYcklfMGI/RFswOiNteXUiKFo2cUdIaWFoaFVVMXQwbGM3TVMqQG93I2dOOUZJPTB4Xj8mIlpiN3k0STFEeiVaUGwmdWc1alI2dFM0fVZWYy5mQTk2R2ckb1skZUlzZDlCKCh2bGo+ZWllVFB+SiluS2dJSzIrX0ZfQXZKTD1tMFJrfmRuUHQqPXc1SDBddCk0YWlDN30p''@;'; put 'put ''PzFHOnhEJHRERld9ZnF8Sy46WlVRd0xtL1hRdmt+Qjh4eHJQZFRVRUpmXW1iP0R4fig4KCQ+KWYlNX58bnFoOFUpMFkkNkl4N25EXnRQV11ZaVBVLGowUShvPGAxSVlTUFUhN1VQeFRVKFhXV1skYF1GbTAjUTwhRXxldjtSM1N8eWluQ21IeTsrdENIQCkhU35CRzNKOEhsKjhPeyVSb1pSWUEi''@;'; put 'put ''ISg6OkUlZ1hVJnAmNSZubGV6KF1+K29CbT0leSIyMnove29yWGNqUnx4LyQ5IVVZIyswTDImaWdUaDZuWmk6OihpXXhSL1RfM3B5cGY9OjlYa0lGcklgdDFGfit3X2paJFtsdmdLUUlLJE0pXVZ4T1RdfCR4MjZrUWpzLipZLCVRX1hiWShCdjhCbCVKWSFOOTNrZlNUU1lGTCxULFtTUDNlSzBe''@;'; put 'put ''RU4xWS4sIWwoM2EwS218d3o5TjxmL1Q9a0o1RCZJIjRGOFQqfFV+JU5aTEQ3W0Z4VD5LbD1OaStASEI/TCNvaEUqUjJ3LGVyXz5rRn5uVm4qZ0lSbC9pKlJEPntLREdYbiokQEdoNXtlIm5WbWJwZEh5c2NiZ1hVZElKdEtzYDI9Wyp6KEYhfnU0L05qO1lYR0MoVVUsTmFNZkcua3c0MytEQmVD''@;'; put 'put ''VDNmOSlPSFNDUylkPm1eLGRQV1B4NGBfMCwxeFA4JTNBYFlNZV9ZMj08JThmOWIzeDlkMyt+eFokSH1YTGJJRzkjP3Jifl1RRz43Pz40bjUmQVk2QF16JlczI0h+Xmk3S1J3TjFEQlBLVCRFYkVGXSQxVCRzZjE9ImY3eltka25Kb0xEW2U7P1ltSCkqczpEVnxYcl5MKyZtSC9zRGlpRzUyXlgu''@;'; put 'put ''Oi8pVCUvJXpoYSY6aVsyUUhQOF4kWFN8ZW5IVV5+N05ZZWl4eilgNGsxZHFDZ1JRSTFIUm84N10oQmlubS41QVJZOSJzNiUvQF4+OihYalNzSiJoOWN6fE1ZaztFcyxGMVRIMkh4djc1N3JjPHlpNiIuPF8uLEU9NXtJSVRHRTU/U2VNanpUNVQ8bV8wa1E2WUdSWiQ7U25RS0lLYmgzIWh3PlVF''@;'; put 'put ''WUV2dj5sWmw6aSF5S3NhWGhZK1g3NSJqb00xbzZlNT5tX1FXMFNXQm04R3o5cHJWWWM7S11EfklkY31SSz83X0MvVWhZaVNiM1JXWz9raDFIZXVEXnpGYiIyeyw1e2FvSUEpXyNsbWFnP1AqeW9iUzsrZXl0KCw8X2pIaF9eVVFhMChKW0l+aXZARj1oOTg5ZXxta0d9PztvTiVDcGBzSlRTaFNJ''@;'; put 'put ''KF91R3YvMk8hUHR0WW9rXTJCTF9KL0RuWChjZF06NnFIciRnLlFmZmZfdSUhfjoqSiw1eDRJUlF6ZGpQdTkwNGNpUGRPQWVYJER3YE1IZWFdcVh1PT5pTF84dEx3MW9vdTRlamBWJipkRnYqSCUxRkV3Z2wlJUNMcGN1MFsuKUJRIUJ2PGg3TW9ROX5JTlhpVGpURlhfc0BAaTI5KSFvRkxDXUhk''@;'; put 'put ''X3xvOD5KR1hvVzBkfXdWcWlsQ1RjJkNVd0Q3fDZNbXxbdktaPHtxT2FFQkdCcz1qR0prUlFycVZ0ZzYqUkN3RlZfYShaeFE1bkdWe1o/YldoWW1bZ1BFPUlsQFEsdEswLFheP0JlQ1gmczxvKWUyQnUpcyhgMGdZQll3NVdZQmMmSmpuL2EqZ1dFKkA0XWZXaSRKTjZEL3RSQktYeF5aOWhgMnl+''@;'; put 'put ''VmE6TzAkRH1YOXpATk5Ye1VpRjRBeDNPbHhkYykscVlhcTolUiVbSUY7Nn1FV3thWDxGTj5IeX1pOXk9VUYya0xCfFt4KU1XTDFUcVldOjxxL0wqU0d0S2IuaEtUPkJNe1VmIyZrZiYvQDxjYTpvMzc7Iyp5Q0RzZVpod0ZSOCo0fVQlL3RIU0piLy5SYnBrNTlOTltndmhpOkRkXXUyPXE9ZW1o''@;'; put 'put ''WkQzeV11R0hDXUs4LFtYKD91LjA6KzpdYXMpKDdIUkA3SHxRb35xTnEoIkojZHR2NUQyO3YwMDJZUmgmL2h4SHkyT21+S1o9bjpfQFlGSyN+PTQjTDtjSCx9LCYmYm1kUyE+SC4lTTk1fDZpQFlicFN2STBRajUxNjFDMFZQVXdUPFowRkZFZyJYOmo6L01BeUMqLCJDZko1XTNMLj8iIVs1RCF1''@;'; put 'put ''cV9JQip4cm09I0ZiL0BXXU5PMGo4IzowQzNCXko5PT4/P2pjN1IoXXRKUHdGdn1CI2hfU2VqIz8mbk1HbXp+VmBZX3lZeTl2V05RVW5PbD1rPmRfX0M3ITdjWSo0dG9BKnhYS2k4OmZzNnl1ZVtsM0hfP0NwezUmaWo/JCpTUi43WFlVW1hyPXBPRFFtNHh8Uzc3RilBJj5oTDR2UGIrKjh+dEdB''@;'; put 'put ''filYODNgbWV4TjlRPSs1TjApU24wcVZ2IXIwJH5gSDdGTG5nKnFvJDJtdmA5SjAlYiZAS0JaZkg2UjdoY008ZjxHWUtwSlcsKWQ5PlhMZ18mNG5mS1hCYls6SV5pKE9oI0JXNWskc2RrWmFhcjcyTlFMaWxMMURDVHowYzZ5Pi5RTEJ7USh1YjVmLil4dElJUFNzcHh7Om84WVJ6I05geE9+YEIx''@;'; put 'put ''SyJyMylEWjpSamdqNj10Klh9Li99U3FkLCVKInk9SXd1TSozLnZgZj58PEtZdXJnKGR0MEd5T2pGckNDeG9FXWFyNXtSIkxOTnl0dHBFc2A6Oiw3K3w0QjhsVjRKPSFZZDtiVUhTMXU1ViU7RUs4RWhjQEw9YVlRMDp7cS80TFlvMXNnZHpibG9qOmREI1lrTWkuezJKJHpsOWU8WXE8IypML3Y+''@;'; put 'put ''JENXLyM0RHh+ODk/Q05NXmlmSTMqYyksIkdwPCZgQn1CS210fjNrOERaIWhSVz1FIU57e2AvNnJZeVtKYVJROStqdTpabE5BYUB+Il11T0BMTz5KXXFfcUFYJnFtcGllL3xgTD1fLEo2TUhNb1FpYiVrZnU1bVszcUhReGI/MTtzO2pSfmZdRWRUbiU5fVdUcjNUKHY6cGxTey9ebEhYUHcqdCsy''@;'; put 'put ''M190WjJPcntxWHZ+SyFnUE93VzhofkVXYm1tamltTShsWWs5RCV4eExmYXk1YyJNY0xFWllaNWh0RDApZWUiSERWMlQydUssT25ye34yWyNwOCxCJSRnPTY2KmQhNH04PE1AOHtHLkIqPDhfRTZPImYqZFJKTzN5Oj5nXjlTdVpgTTBIXkJVU1BEJjE8eEZ7Vmt0UT9CT1lbWFVWMG5jP1h4NnF6''@;'; put 'put ''KGxmaX5hP1t1RmZQSCZbdV14KFRsU2NSSz8oeihbPGM/b3h6d0VHaylqV2FgNXV2S2ZrMDt3Q3QpdThVVWlTaXBMXnozUH1dWmAuL0JOMXF+Jiw+WkcxT0twUUU8SUtWUyFGVGF3ak1OYlg8WGp0WFNVMkkkL0V0Pnx9WWYrI09CP11Qa2E9N2FDRS5jKj9yUUhXeTZ3QHJIS3p2QlE/IUFEMUBt''@;'; put 'put ''SGdmMDRmOiZ9KkFUPzgqWHduY0BAKFEqVlgoJjJEcXUwOmNneGFsI286aVk4dTpKP081PT8wOzJKMCx8SV55N2h0MTw4JmdZM1RVSlVNYkxnVk9JVDYvMEljXl19O1IkPVRmYDoxXnxmQUROfGJ3cD5zOlRFKWYvJmBNbSFuREVMMio7az9ZJDwhfTVvLlVGW04vRFU+I3g1MUU5a3AmcHp7MDRk''@;'; put 'put ''flAqYXV3NiZdNWVFME91TDZ1M2woTDdEcERDJkJKV3R5TGY5d2hTXVtMV1JhMG96VT1QODVgUC5aLzo1ck1ueWIiUW4rPlM/ZSRMQnVeeXwhe3VTRFhJLjkmPXFGb3BDJVliVHFwJlslVCs1Kl0iclJqK0s/YnRbJEhPNFdFOkowUSlKWlI4Vl1gVTolRWFnN3ErcV0+KlhLR1lSSy8xQ2J8Ni9W''@;'; put 'put ''ZEApaCtHVS5wU1N3PH5wSlZoNGpYfj9xOFFReFdvWUh0OkQqUXBOVyNQdGxgYk1dTTQ9UmdqIn5yLy5YbCZxW2wofihbSmMyMjlHLEI3UjNacnhmKWVuLigyKHNJfjlma0w6c1B9X3tfW3FdZ3BZQ20uTyFnYVlRO0drN01IKENROyhmMlF5bEhlI29zXT9AOWNLdlNoMT8uO2IxUmguVyJnWk5B''@;'; put 'put ''JXRSSUJGOntYa1lWbXpAR0Fpcz9fYXJxVGJIclJgOkBBMSgvZGFBWmwlWElGV3FjaSspcGJLK094PS9tOCZaKzNNQXJGUSM2ezt9e2pAIlZ8XXJZMzpZL3d6ZjBgQiFxZWssXihqTFglNnJ0UFVke3xlJH1bVCx3d0RjRVtvQnlDZX1TaHRDNSVBT35+SjtiSGo/Vj44PnxJZGk5Q3ZXNC4ud3Ri''@;'; put 'put ''ai51dGJvTEx9ZSQrYG9zLj5PM2d4b0heeHhnU1NJVkxFfHZ0Ym4qcWp9ezg/fTVwVldSNThhNHw+TmJvW3ZuMF5qLChvdixHZ3xNZXUvPlVKJVBJM00+Jm12c212Oj0/MiFyLjZKWnQlckRRdGVMSls2Q2RpLDIqQ2QsIVpTblNqI0RhRDQ/dzFiLk5OTDUufFdETWZQTWduYm9pRV46ZElXQW4+''@;'; put 'put ''X2YsQkBFKjI5PzcoKXJ6aFZRY09DQTY9ZUxGJm15Tk5GPUp8cXIlNyF7Y0h9Sm9qT2MsKlI6PmwhajdCZGxxczBtTylwVG9RNSR5RkJeSG9KQnhVWyhGa3Q5U0hUKDkjVkB6OEkhSXlsOTJJbzZGR2BVNVBpVi9QK3EkfUheaDk1QmpHNDZyPjNZLldvTi9gOms4Tnx2U0tWSz4mPnRNNDljJCRJ''@;'; put 'put ''JDNMNWNLPz43els8PCJYRkBvLyE9eE1vfW9Ld2E8RTVUUkFfI3ZGXjB5YTVXZHdBQH5yRn1va0x4dklQRn5MRGdUSj8za1Zmc1NWR0ZaJGMvSSYmSiVFbD9wbStVXkppclhSUGR4WV17ektgej1kaWxlc0JjV0ViMXR4Jjs1aCNhMX4yTWtOOTIhKmU2bC4mRmouQSssU2pAP2AsWG16IWROTCYq''@;'; put 'put ''fFt2NGRJQHt3Y2c+KEF4Mm1QaFI4ZyIjRGVaOFBWQGxSKilGIi4wNmFVdzF+Q0UqU0IwclFKZV13NDlOb3Z4cmxXS2BMaiJHNUE9NX5NQFo+dkckSkhAczViPnBSO3o8JSleRFZvQnNqa3g9SVVHKHhFUVR3e3d0QT1TX11xbSV3U1V1YlVLMHhAdXNaNF8zfHRGXXNSdiR1Z107N3sjWEBtd35j''@;'; put 'put ''YTJKbiQiJiFFck4pYXJqI0debExlVER5eEMsMXNyPzEmdGlmeHxrKEZTY3NpeEJJVXVlWG45XWpBKXtqR1h2O2dgbCl7VX5hfV9yOUYsQjEuJkJyWlZQLlN+Pztfc0crMTN6W1ZFJG5nSGV3YTN+MV5kLm9fZWVQIyUlZldLdnglRiZvek40bVlvPDZwVUd1S3ZjMVs4VEBfL3cvVWlvdEVIQ3Uu''@;'; put 'put ''cElqKWp+KGV8aClPfCEoQzlOOiNnR0VFMTRKJEo1I3ojVXVuOTBkTFJWekZoJHhRdC9pKHlZb1FKITtuMnNBLHV5PyIzP24yKlowJGMuWX46cSM0Uy5gQj4qMCFoYFI5WXdrXm0hbUcpYl8xezVNdTxTM3xFJWoxOWRTb1c1TSRab1BrRWdoW3E0XnVkc0chP3FhPWdTXWJePXFlM043TSFIcWo4''@;'; put 'put ''NCFJTFMmaGFsOGQjQHskKCg/NFVLKSVfQmM0bEQ4YTZVaVZAbHtZJEdsJUpXI2VsS3FjKk89MXxHWT18MiNjXktxc2NPRVdnPCRpQGY9Q1FeW0Q5cUl3ITMwbEZmJjRxU1MkPCw8PXFOR0pIT2IpfHxBZVZTKE1YNn4+NzE9M29WTD1rRSFfKTJidXxIYiwrS1pMY3Y+dll0a0BtPjVqZl1jfS9l''@;'; put 'put ''TXV9X3ZzJGtyN3BhISRyO0wyTT85bFR8amh+OU42S1MhK2h+TCRxTTd4X0h8QUFDOXFbWlEvYmlhUi5SI1AmP09VKygyeFVFQ3BvfGA6bkNHU1hKSkkqTXI7e1BhazZxPU1PZXdAWmZMNnB6UlheXSxAI014OmYoQSsyLzApWi8jWVUuYz9McGNqaEdrb2RfQUtyL2c1VUNTKCFnJUxuNX1VOjwm''@;'; put 'put ''VEJyPT0lKFEpezcsRUd1ayxZTWowNCghRmF1VWVbIj9oMTowLHUuT3x7YiFjcXlXTlF7OT9sfTk3JSgxZ3pfYzNebUpYKktba1csMyJXMCl0Sj1oYmR0TjoqIT1OaylmfW56VjgzVE5eMnZDdCFiSjdCezBYe2VbKX5nbC5DbGFHVXFlRE9XKVJnam9wcG46R0VXI2cvUUl6YF49JHYzQ0V1Llkq''@;'; put 'put ''dF4mXWZyUmNQOzBdJFgzOzg1T2AoNmdTT1ZaKXd9PXh7WUE9WUJvOTYkRSgzc2Z8Vjg9bFYqSEElPTAwMmgxcF4/Ll9mYFFlIl9GUFUvaEo3IVUhT3BJWHIhXip7dXgucCtfLz0xeSo6RiE2MyQ9RiYjZ0BXQkZmXyJNeDloL3o8ZyErQD1dPVY2OnxjcyppeGVkN11NMkZiJWF7ak4zYSZZQyQ7''@;'; put 'put ''S1R9VntSbF9ENF9hPl47S0NiUmFOR2UiPUN3eGZxP0l0IW1hfipXVXFYXz1veGoxM3x1X2JNO0U0YjVPLEZHYV4mRW52KmJOXixFVEYzNDMjZWxvWW9TIkYqOEtsOU14KEcsK2ojb1VyRTM3TCVuTzZJKV9hfnV6IlVkZ00qVkQ3eVBtYkhiX0RxQmEqbnI6VUd0ejclQ0BWYks/I0BnezEqSEJp''@;'; put 'put ''MUZUPyF3dH5aJkZIbkVGQjIzKEBQTHxOL29INDxDez8kREAocSxMPkQ2Sk0reUdhdEMvI3MyMFdAczkkeC8wVyk/bmhRJD4vIiZPTlcsT09HJHNWUSs1TC5CMEpJTTQzTHBjLzlQS3UiNnR4KT5pP0doIj9AUnd2d0kiUC5pQ1J8LzFrOllRKXglcFdGQ31JO21zRl45YlpqNTFCLE53YiQxXiFi''@;'; put 'put ''PUolfkFzKF12SWpXdiE+SGNMUHgra0cqaT04KG1POkQ4UVFrREwsTkhwfEpLIlI0bVJWY2JeQSx5dCFfS1dkbjs1ZCQ7IyR5WTNITUlZdSNabH49Y2E4YyMjeHRMRmI3bipnKTlDSkZxOlF0e1NpYzU9b198O0o5YUZ4QDtHU3dtaW0oUixFRyw0JTkze2c5e2JxWGV8WTI5aVUjSCxVSzsmbHJf''@;'; put 'put ''IShaVXk1M0NFdXJOelUuc2p4LzR4XlpQJFJ+UX02LGdzfk5uTDJSREpWIiJxUnBoQEImLmklSH1YO0xVPEk9Pj85KGE4eVMreUZseEUibmhFbVpSbCI1WncpUFN6aGlTej9+bTx0MldCL352KHl7cm8uK2NgW0FfKzNTKk0mVytQWFo3Y2VCSHIvRWw5Iz1QQX5lI0o9KCM6IitrKCIhJVU1VjBZ''@;'; put 'put ''ZGBvMmxAelYpYCVGKzg2QmQxTiFrW3MzKVVLL3FkUWVzW0twYVtkIUk6ZFd6VnB6VGI0bU5HST09OVA2b1IrVHlOfmJeaFZCSCpDQXpeVVBBfSw4eWlMeUZ+dU1vNzFxfXdQMHdRI3ZiajsreTcrT2BqbS95OzBFWS5JbVp6cmI9X1VlXnwuSjZsQDhrI2JZe3I7bEBqdiNGZy9sUkAhP2RUO2lQ''@;'; put 'put ''b018ISg7clZ5aDtadW0hci8vND1qTEJNdHVAI2NTaXVZaytxSipOV300S3pnXVBfSDRYN2ReU2NFeFF6ImFgMXtfaSs6UUZkdnF8RG4rfVguOD5mW3dJaz1QRVNAWWRMTyFZZlZCVX1ZfDBfU29yYHB3UllmYlgoa1RDUnBoIWpnNXV9RSVJW3dMcE83aFlXbjIlTmcsYyxnMTNvKjU0NVtDYDpW''@;'; put 'put ''VERDKWpjdTckLnFGc2BeUSxuVDxdckB2cCVqJEdCX3xJeFZiTDtMNChQTTshU0BpOyJMXzlCVVp6bUJoZTY7VDlEdCZNWXNpTUhnKk1CWW8/aV15dGs5dFtxXmF3Xj91RHBUcm03WW1zQyJ4MHBhbXM/RS9majoxZ3IuMF4kLyQuaktpKFU2e3EoU1RPIyNaLHo5PTJ7WWQ4N2Y/eTJTNnp6c3A7''@;'; put 'put ''NlVSZVBwMmVZZjgrPUpNXVkuMW46TGl4YDt6YzlBP0NlXl1aTyk7T05heEx+enZGVjFXVFU5XWtGfXwjK35TfnxwYnRDdFlHVFh6MElwey5nL1A5VkdmMltzVUROJW8sKFZOVHheNWNnfTxzPSwkcT8vcHkmb2IyY2phVSUvX2w3JC90P2x7SmtHTmN7RUV5M2lza0x3fSlvelBHRFt4OjwyRVhJ''@;'; put 'put ''ZDVNaVY8Xk9FTj1YQjkoMCR6X1daKU9QRGVZXilKMGVlOU0ud3JbS2pTeGBaNitsUThZK1FqajIycmVPPS98LEpSLzwsYzd6NCpCeCV+VCg0YV9UJCE0K0ByVEYmJEVsVVl4eHBsOmAoYSNdMSpmfi85PTM1d04qInRbVmtkSXYoeEc+QClwfm95Z3ZWU3FVcSM6ckozSj9vIj0uaE1aIUo5fi9K''@;'; put 'put ''VUdBZVAqOkMqWmdMVH44ey9KNU5GbTRrbWlRaSlFblQqWz5mOmMlOFB5TUMleWImLkosZiUvYH1VSkV6K0csekouXXpFKHcybHF9bmJoKlR0NEUuYktVV3NgfT0ldnUuOi4zS01JI29kNSxSRzxWfDxWTi4mJT4hcnslYkElNz5JS3VtPlorP1lSOFJZT2l7VTVnY0xUSWgrZkNrJnV5cVk4VGRw''@;'; put 'put ''TGF9bGdiYTJKYDApfCVSS282V3YmQT1EKzhTNkRse2IuJGciQERiSlJwezgpNGNLeWg/WHI0X2gvYDpeWjskXjNBa3RLQDI4c0Yldl0jYWNUWShYXllxdTVMIytnS3pDeV9LIVtNUiMzbiRCcntTYy40M1smezA/PzhUTWRZNTM1e3hlSEJkbHBbVXM6ZndvNElhcGpbdHQ+YzcwajVgLH5qK1Vz''@;'; put 'put ''ejFjOT1KKiI3IkA+MEw3WSYvRUFvbk9jemZpekpFZFIhJDVFSHVibzVEPTAuMWt7PzVIXmpTMTU1RkdFSUwyQFI9elpzTUFieSM0XmI2SFpbLGBBWUs5alVnY0RfJnJDO2JkWGZTNmU2PUdlMD0jVVlEZ0l2d2ptOm1LaS5YVGZQOzFVM2AjODdlUWZDWSFwcExKa1VRY1hDNmt7akd9IUhrXjs4''@;'; put 'put ''dEpPYnl2dXBHby5Sd3lXTm94SHo7bDU9eHUhQWpUTjgvPiM9amQsa01BcllVUWg5Z2kmcVlQJiNlY19VPXUkIlR5MHRoQikzKk5MOi9xOC52RXRVbk5eOGxidEEiLHJxc01xYmU+S1pwOEQ8cyQ3WW07TDgufU13OSMhbVY1VllDSVNBYkNjR2dmW0RUWVchUC5wT2ZTY0kwfkdDbSJ4fTVeJEdm''@;'; put 'put ''UUlVMGslZnhRND9jUiQ4OXY3cSIxMH49ISx1YSUjaGlzQyE+RCNfK2NaR3ZubzN1RTJARSg5Rmh1TyxlZ3N9U1kmXWMrISh7YTtaTEAlXVZLT096TFNrSllTXSVwIUFddzMmakJAV284WShkNTsiNU90VGslNENkbVRHMzNXQXQiK3hnWz82KThXME5fcXxwVzBmNlB2c1lpbyM8UTYwemQ2L3c9''@;'; put 'put ''Qi9pW3A9STtsUV9TajZUUTJXQiptRCVdU25oOmx8bUlxSiNJLlJ8L1AmXUovMyFbZyh9W0MlV3UoMHhkNDIlKE1ANWk4XWFBbX5PPVYoeiV6JChMJllqbEkzWEo4bitnPExFRkVXaFdjVXZRQSZNKXVSM20wOTpTUTwkfWtrNC9rIlg5W1F3W1dkLkleJFVuPXQsMUdTSEdxfm4oX3hTclVAfmVj''@;'; put 'put ''dUliJSFQNjRkZWBdcUx3JkYsVEpqTltjL2pSaVc9ajxmKXBocyFoMkFKMEVvYmRKKF5EVH5LVVFWKW5wIn5JcFNWM3xmVE9SfDxCNyxwe1hUZ15PRHd+cilUXStNPFo5T3M9aElQe0VTZ0c8ITJfWEpEe3pTOClaOnpiJm18KjF0cVdyWkp6Tz87Wk13TGE0bi81aks0Ujd0Q3ZzITVkRyhWW2ZY''@;'; put 'put ''UkNXIzUiTz8sdm9waURrdHk5OCIpWHhvcCxfPkhTS3U8cXp+WVYxVCY6LmNVe1swRlU6JH5YdyxaYTEuXnNBajxpKkpIcT83Y31FVnpiQ143eVEzakYlYyE7OXhvbGAsciY1ZW45NE1EM3ViRGc1WDNbRl9yPmtDfFo9Vlh9cz1dSHJ2KE9RQT40Yl5hKHwqWzxhfkFPW0FdISYxTDd1UEMsZkkz''@;'; put 'put ''LE8pUyxnczUudWU3JjY9X1JWYGYrSiJbTmMxZDB7SDhUSGVTR3BIVVVjKFAiOllZRWRDXmlGcCQ1KnlWMFpSXlE6Y3x2eENTWTZJRUhLeSZRUzdPfl1ST1hWaVhVPWYxTDF3T3JZTjlPJTB1L01+PyJ5NWJsKVtdTTxqUmlhall0KipZJFg2W3BtTEhDdy9TU29oNmdFbiJBY1V3cWdYdjdiQG5j''@;'; put 'put ''VnJlRGApZUhWYGp0THJPbyptbGpXQFFXYXg0bGolVWlTeXdoQjl4NEhMS1J5cyloMFtYMlpIZG5bdW0/WkdAbXBuOzJbXixdXyYqJDE9a35BIyoyQFRlRWZuY0Zrdj9FUyt3Y0Yxb0JOL0BLJWQocWN3TkE/ZWRKQ3xFam1WdCRaPDc7XlEoaDZTOjdmUWJJXm5AeDBNazRjfT1bT2V8RSpKW1Eh''@;'; put 'put ''YytxI2tNY3RPSn1uT04je2d6S1U3ZFZZc282JCQoLjUsPEgkQWA4Q1NzL2RxTjE3Q1NoLllpb0RMZypnZTVFMGtzSGRqN3d3WGJFOikvOHcpQV41PEpmQ2BkMUNffnZ8Szx8YSlRZDFKZzk2dFo8PyN2cTRCRFZSfSlZMkJdIyNvXWJ3XnE5LG9jWHBgN15xPnduczlsYVNSbjhXYjw0O3dzbVBm''@;'; put 'put ''YUE1O3tJciQxQS9HWit0O2BzVWg/WmlmKzlATlRJaClIY3Q9emIxPTgsV3RCS2cyeSgqcik/WGB6RFhnQV1YNkpKZlU9P1tlcW06R1lHV2JkRT1ROHlLMG14YkE3NCV8UE5VXXx8W2Qubn0xQj1LNXlFRyExfl1xKmc8RFRIaWNxPmppM1J2fSsuK0JTWjZyUUVePDw6MlI4b0RwPjZDQFptZ0V9''@;'; put 'put ''fl55bmxZdigqZ0I/bj8hKit4QGxAVE5jeiswKjFKKStNNGRMPV03LHpFa2wsZFssVDBWV0NWNl9CKSNsdEJaJCFWcVdHUEtfYVhaR0hHTHhMfXFsXiQkKzAwOylkdChKV3dzRGY1b18kPFJWeXBIRWN1N0I0b3FCa2RDLERid1pLdjZEUmRLYChoKj5bNDBFYWF4MCZpVUMxN21DN3hUOUJpYkpY''@;'; put 'put ''PksmdUAxayt4OjYpUUc7WGMqdzUoPXVQO1g6KCY9biJgI3BXYkZJJFI/OjxsXVFBSkw4aHw0I2RMSDpYa1RQcysxZk09LGkvJGA9dFM0TiFwaFJoRjBJPStUKzBHKHhBeCJabCMzZV96M2VGSSs+Q2FnMXgmLy55ODh8cUZ5U2pgRC4jL0wxaCpmKEFpO3NONEEuIVslaUMhe3cqKVM+Wj9+Q0R1''@;'; put 'put ''NCljMWAjZUFATVJPZklXJmhSWChsa1M+OUcwVD1LTytxJnxSMHZnTW1RczI4d3ZsOHl8M3V3JWh3YixzXXQhQGJ6T2hsZ1p+N1RfJUpEMm85I3xkeFhlcW5lJVpZRHlOOltTPCtIVlFSK1RVTix+S2YhSHxKQnlsYGl2PV4xamk1R1RRR2Q9eCJ4VkhAYVBbV28pSVR1RWZVd2U1UmpLRnRlY0hw''@;'; put 'put ''WDdzKkN3P1JYQW9TZEorYXhkNHtbUmAkb0N0KDVOPmwpSDRSR0UwcldaTyouWCFdKnJWNTpqdiZgPWhrNjgqOm9xLzBfQmwyX04lVEZyVWhIMCp2eilbWVQ9W0JwWCZOblN+UVNadj52Vz15bkJZMVVMX0chc1dyP3pmfkksam5KUmMoaz87IWQheUEuNyVVa0xxcFVZM2IjeS5eMU5EanI2ZWFx''@;'; put 'put ''V016cT8+UWl4ZGlMLmJJdkJaKWk4ckJrRX0uY0dnT2kmaEFtaERYa0hhLyVNXytwSVFMVFhyRUwudV1genIlI0VDenVjXSYrM2RCTnZUT0UiPH5NczxbdVIjQzE+Pn1JWFhre0NaLnRBczBJaERGZU4qfEZAWEhJeSxldlBPWWtKYnJ+KyZsLmRBPXlbO00kRi4waSJhXjpQe1htREtDKVJCZFNm''@;'; put 'put ''UEJRI3F9VEF1bnglbSEwdm5oTzs7KzAhc2RKcD9ZRXNvU2FkKllzLkZQXzBPLy97WUpNJWdEfiooV05lXiFiMHFvOjtRciNuRiIjXUt3NDYsQ3d2QlcrY1ojI11JbVc1RmM4V2pBRnpzeiYod2psQ2NtK0ZHSEtfI2VjeHkxbVguMXY7W0MyQURdaClxTyVQaXIqa3x8L2B+MGhiUzByQSI9T0pL''@;'; put 'put ''eE88MXp2JFl0VEZhKTJ4ZkxxbE43SmNGWm9yYys1Rkp6QERDRkh+YVQoV1lee3NIc1UiTkljWn4vSVNHfnhFMG8kVCpZTDAwOmtMW3FkbjwsVl53LypCRm9ZdUQ0JTRYY1Y1IWFjQC53UXBkPn5yXmcwRWd8RlNVdWA6LHVNZCRURmBJdjN4PFRsUylNRStNMStIS28oaTNLUn47Zl8rKjhUXX1w''@;'; put 'put ''bGtuaDluS20jeGxSWkU3KGk3eyQpOihaWilER2NIaW0lZmhfNnVJViw0OG1DJWw9RHZ6QmJrLnNFVGN0TzcvImVxbCVlLjAyO0BMRmx0W1lqJFU9aVZYUHY4eUJMWXVSOldsL0Q0MClxbEhdO31SMSRiWFJiKSlCQXJELzJDSnB5RixlJCE/e2dBdChmRX50SCFXJkd0RzhINX1NOlVMTHohNSR3''@;'; put 'put ''KXluWTYvUlZ3ezEoSmV2M0JzMF1ZMTEpa2pLcmVvfWx5Tn1IaDRgUCt7TkVsOUNWOmJDTkh4YjFbdkwrT1JUL1V4fmtgbCVRQmNOYGtyWzV6fm4heyFsSkpMTUwldmRUUSx2a05xWSMmZChrNzt4PGNlMjBgYzRtST1uRSFqfWkjSXw4RWFsMiZ2en5fSjtKKGQ1VlhKUUZGInllU3JAVUIwZG04''@;'; put 'put ''fkl7OnRJdS9BWTFvR0BWR3JESHJIIlFtZixCPDNySnciciQ1X1NFS0xlWFpSKiRLb2ptN3dEO0ZMe2hPN1pjfURnSmRYYXhgPHZkYlJSVjhEKlglclFweykhNjd9Rm5mQl5QO3MpXyprNFUwanxuYzZ+VkhTOEU9JDIoWjYuQDckKWJkbXErRTd2JVIyeWpyfjRQS0BDKUNpUkkyMz87OW84fDhI''@;'; put 'put ''OFk5WTQxa0FzVTY2WGd4LkghTk1kNj1gJDEiYUJ5IXl8d35WVzo8Jj16TnhvTnpJbHNZOyh2NXR8WFMpcmQ9L2tjP0JCIXBjcVIuK0FSYFskW2ZQWXZseT8jUGQjdTJrIk5DWzJWOV5RXn4xRSksLmN9IU4qeEFbKXZPPyw6P1hrfiREZEErYmZ2elR3KitGTihKcS8hdm8/aVg9NzFETU4lWV5e''@;'; put 'put ''fDFoJmNkeTNZXjIjeWgzRSxIPUlyQTplVkMlfT14I0ArbVZLdEpefjxBWUhPTyYldztuLjZsSHA3SW1Nbzp2Il9NcHhINGosOkRGSGcyNmRbWS9UdWRaXzRBeGhCOTQhMCJsYD81REhUcCwyVW1SVy5qLyVUTUpGRFo1Rm91ZWIlfXoiTU84STN9dG0yYTMuS2lySFluKk9idT9YWyssZzw9ISxX''@;'; put 'put ''aW5KcVUudEJpLiNbNkcoZWFaan0yZ1V1NDU1PUl2ISppcj1IM09OYEUwKnNCLC9uNEx7VjZLfXtfJCNvVEQ3b18xPz5Wb0tmRmEuRy9eOy9zdzo2YCMpcmxIUTo1P01yWk9DTjA5RjhSYkdEeCVuPTZ9Iy46RGF8emt6UkA/Y2RESWh+dWd3Mm82VDdScUIpWlUvS1Iva20lTyFPOHJUdEtaPVoq''@;'; put 'put ''YitUbWRAZ1d5d2IvPFlIbWw1TjdnYjUsU0osSXNscSpoRGNEQDo1MXVVbi5kUGF5OXJ9azQqV2xQeW02JTxKPnlDUCtOXnRhcSRFT3E9RCIzPXtZSlFFOHNxJWExUzRiWllSSUpqaDRIMiZNVk94T0Q2KEgpIiU4MkdZRm09YE8sc1N6O1V7KEJ3VlNzaEkoP0F8c0FGQz4xYiZFP29KMChFRXpd''@;'; put 'put ''VF1oaDsuKFdjTkY2MVU1eVkhNj8pZnhCPTtJVEh8VlAhOVdeeW9jInkzTHViZ20pTl8kRFVPRz5vbjkmSi9oYWhrI21YNGldIUQrMzR9dE0oWFpJL0RpLltYOEc8LnJGUnNrUCROWG4+Tk1uL091ZGJLXytaYlZjUjQiITU/Tmk5bjpzb1ZKLjIjJVJIM0pMUU98JCUqYEV2bDxSUypiKl4iRTJ7''@;'; put 'put ''VUNwZDsiQVBhbEFPblBXIVRpL3NLXWdhKXM+O1FgSyRNS2RVSGJyX2Y0dSlPcCVZb1Y6czckRG1NZVQrcDM1RGkuO2EpU3N9VElDM1syNW9Jei9KS1c5fig9XXx9VShmOVN9NDQwP1s1LzZKM0BRW3xDN18iNzhlOnRIQ20ybytnTz0qYitCZDkhIWI/blF1MF5Da3J4aGxDVjRTNmJpKmxnPnZb''@;'; put 'put ''cmokViFQZXdTQCpiM2ZDPCJTWDtOT0IhcUxoYlZ8YVs5UWlYNCVla3h6TTteam13Wm1RUVpUTFhvNWR5cj8sMFJ0azxRKSMzZV1TMmVbO2AsSzFgQjx6bihee0szQ2Y5aFoyMEY/YT5lUkV0aWsrQnhHcHB8JHNUa151RG9vRkRBbyFlRGFufmxbb2NMNDhAQnFCRVlRIWxtfkw9d0hhVDR8bGlB''@;'; put 'put ''PClmM1IjdzRlL0AhbCxmSXwmMG58OV4iL3Z8PSxDO0IuanZdKEZSWDpueiUhOCJoIz1NdlA8Wk5lcHAoNVo3N0JkZDtAYzR8VFMoWm1LPGkxKXQ8VThzMF4wdTdOZl9+eDEpP0J9PDVGfElKfSVfXnlRfkk4eD1ySjssJi8rRC4rVDtsai8kRmpScmJYdn5pWy5gdmZmS2hNd29gUnhfWyNDVTlt''@;'; put 'put ''LHlpZmwkI0QxOlM3SHpeaT5uW2pFVC5xTVc7LCxMVUVwWGVEWThefWlwO2VqUUhXTCtyQEJGNX43fVkwLH1vV2d4VV5Na3tXWipNajlveiVwUzw8O0V7YDRFfE1VbiNeKW9WZFZHdko+flJOYlE2bFFCT3x5T0BARTw5OCtaXiVaJHpwQnM/Q2oyY1JBUmUjZlVYa2k3YCFLMXlPelJdL2deeVF7''@;'; put 'put ''VUlPMWtRc1JbfU90LiJbaTcoNTdaLzhBRT13KGpJRDxhWGxGUSxJWkd4TyxTXSMuP0R3WWdjMVppZkwvZjslODowKzZWUjdjJWJufjwrV28mRT52PyxVfUZvUzkzeDglRnJJfD5aRTNje25IQkVvMHIyIz9uNDBgNlhHMjVyMWpWbHVfWCVsUm4qdClvM3ZFO3dtcj0mI0tPUmBLMj1GNUxjKmtS''@;'; put 'put ''NHhnMUJON2MpeVU8eF9rPUZXKDxDaE46RyRXeytDZmlMd29jU0tzMUZxUU9jVSoxN1g5U31ob1RebTo3dCNgcS9ZOGcrN1VAUzEqVWI5WWwuTSY0YEBeRm0qUFFnZXpabFMkTVo+fG9GXyV5fmZkZVUxYU4/aHJlNytsb15XU3dVT0Y9b0VzUlNAOUtAK3UpPz50IVRHJmZkYXAqb2E3eDZJVCZk''@;'; put 'put ''dlAiaD1aNXh5ei5aSzgsfVAwfl9hfGAhNy5yOypRPSppLDF0XW9JNmVSIjxraHpmaU59TVtaKlNgRntuKHVDeUtEYn1sKXJDdi5nREo7TkN2RmtpMiEodiEoWUU2ZFhIa3loR2UkPipwU1hqeElKQSlMYHglRkViSjFDX3Q0a2YrS2k8b1J0RiI9dzldTFImX2p0azJGfFd3dEdge2ZzNkNxJF55''@;'; put 'put ''JkNtYl8sPFVzWVNAQmddYkBXUV12ajNrbWwrQDE9RT1VSSE2WVZwQE9wd1ksciNqREZRe00rNyhNKzBnc2oiTUgpMkhbI2pfdkl2O1Bial9KS3EkeyU+OnlpZko2IVgvSEVyLz94K2F+fUVHJnxOfTk0IjoiJmspUXVfTV9GWilzSCFZOS5MVV4wcTpUWFNCeEw+Vld0bUI4Z0IqQiF4PCEkOGFo''@;'; put 'put ''YW1rellgSjskaEVqYVEoSi80dnd3ZyNqKUo6Pl1YY10yPV9VcVB+eVYxbFQxbHA/UUJRbUZ4WTx3aStVVUxXeS9kWlk6YlFDeTRLNnhEPGw9On02bkR9fVFTPkhzNF8qd08pNH5uI25VWk5uTHtyfkI/JDBzIWhWIXNSTVEuZi5Se0tiI01ab2BVPjg2OSoyVTMoQnQxLzliSTdEdXhAWjhSXU5Q''@;'; put 'put ''On19YC9XZ1UuTGQjT3szQHBNKkU9L0RXTUBEUyI2IVNUM1o8VHVBWEtVVHlkPCtYW2JxUHwmOm01OU4zLFVnQFIpdisweSReVzk3cHVYVi5bQHgxe3g0OjtIYXdWc2xOcltOR0M2KHIwd3I9Izc1YENPK09ZYVEwUm1iNTFod2V5Wn06Nl40XzUhe2AzOnpMcjFjVjZzeX53dXhCKF52LCY3MD9g''@;'; put 'put ''LmN6SDBXNn5FIWhnTHAvRSxZP3FXI0M7R1pDZlNpdGRsMl5sUSZNOmZFNnZIJFVEei9FWFgiUk8hWkdPd0R8PW9BQXs5fVZHMyx9OW0vaCwlMl0pSjNVRiRmc1hVRC9ZNTAxRl9DenhwWWI9dDNTfE06bWhHRFtBYiRuMjNec1FEM2IhfEA0Mmx3dHNDUStTSlZCNyksdWZyUjNjeSJae3pgMEsp''@;'; put 'put ''QTxEVDs1XVZRK3YkRU9yUHBGIk91dDE3Ym1KWD9DbFJTR1YpMSgkNSFdKk5QOSV5PkovMUAoO1JsRytdP30vbndTVyw3NEFRMFJpO3c1VFhLJkFRU1ZQW31KSz9lYXdya2JvTixWLHlvanwjSHE3WmhQMlhOaGF3ME9QMkdCMVh9ZlEqS2R0WHhjPEUvJEMuNCksc1YpQm14b2BzVlNSN1srellq''@;'; put 'put ''ZkxHJm8jeWF1N3haMWlBO1lyM2E0W0Z3XktkRm5Eam4wQngmb1ZvYHxtT1BWSSk5bjM5cXV2dUk6Jltqe2hsQ0h+JnJhTExyQDkrPV9AO1JAIjNFSHBMdnhWcXoldm91Mm0paztaVjExM1BHLkUpQ1pKKSZ5SU0qJiNvNElucDI5JXN2XVcoSUVmaFlmMD5xI3l2VWwmbHleaSZQQ0tAfTIqNUks''@;'; put 'put ''cU0icTJvXWZ5IS8ka3VFRFN0PT0hMVRVTGRCZXc6MHhYTmwlJVB8Rjd+eVZOWjBHfU5UMGYxfGNXMj9IfE18IyU7QT1oT2BERV1Dam9iWUVWRUxpMVFBd0BxUCh5eFtHOlJEOU06cklQJSQoYj4rLFBxcGNBfWNgNy9KUHlUK2d1I19SYHJHKj9WIk45RmBgbXglL1c/RkgoQWlkPDV+MTcjMUBG''@;'; put 'put ''dnc2OXBbInIzKl1BP3AiNmU5UmE+cGk4WiRvWFYvNzhMM0t9ZUAzUEoqKlM8L1t3X1h7XlF1ZTowWHk+X3V9P1BaJSpdVlJxSlZ4OHhEYV1+PSxBTVAzaCw8cG11TyleIyp+SWBCPk4oZndZfWhxMTopcHQrLldQNzttbk5jJClGPXpINztEOF1re34ubGxuSkQ9fHhHa11TNjpkUHliY2I6VUtI''@;'; put 'put ''YH5lcTg+cDJvKno1PmoicFlKNFpUfHU8YDE8bTQvN1g4ND8uSEghOTRqIj92UEclUStAampGSjVpPF8xbkI4Mn1VdzlScUxlU15MT282X2RgXllXZDskenJ+Vzp0Z0I6b01PTnVNPVdNQmZabGhQIU8xYzsoVmp2TGpnIVZKY0J0fj14ND9Yd04lc0dAR2JVWDQjbSNxaUlmeTo/RFU7VyolVFpZ''@;'; put 'put ''fFMmMUpMQyxIT3xISEB+MyIqVCJ4QFQoJjJjNVRVWD96IylPKSVeMGxxQzNVQzAjQzEsVSNZM2hIby96MDIkWVQ5KCtmZ2Ykfk5hW0ViSiljNUQyfDk/NjhwTWlzMzk5b0l1aTFHcGRWKml7UFdtMXNSO2JFe1Y1Qzthb3NHRkcoXyM8fCFCdDg4RGhsTDpCemFmS2s5PSVgXTxzV31WTz8mQHU/''@;'; put 'put ''LEBzNT9TMWFoXmhfeDcvKzNXPlNnNl0mSE9KbjJGM1UzNHVKLG9HWmBsdl4oRCxMRldGVHpPQTY1a3FqeU5yYV9qflsuXzkiM2Z7IzcsWlIlXmNPeHk7QEc9JFooIVhaREVgUCooLzZuQz85TVNWdGQ3eyw9ejdTVm1+Rm5ieUR+VzlESz52Q2lxSHIzIk0oODFnXV4pSndDK2VnUWhKUWJodlha''@;'; put 'put ''TmpLZEIqR0MyXSl0Y0UyWzNlej9IY1FqPitPO2JVfT9USm52XyxtPTVJTUVqRl5uJVpbSUlYMGVsUFYhcGo5OlBIMDBKWS4se0A8eVBObjE3cD44QFE/OFRAfHJ8aXswbGJ1czw4MUQzXVtbRFImbV1JMUA9bT1DU3NFcCl4eE8jNGIhYVdyVD03O3cmaiVXbz5FTUpdd1NoPFBaRStGWih9WnJw''@;'; put 'put ''cXIzcmA2NWxufnIxSTQzbTRKPkNlOm5RWXViOnxiK1R2V098Ni4/dWNhInN7blRhd3RSfjxGRis2XnFZJmEwQnVBQUN9YzR2dip1XyFdNyluTWtHO3hnLkdMM0ZDPT4/VFVWM2sjcF42ZXhlRT9+OVltIT1SXlJxL1klc2wlS2ZXUG9ATkY6I1VKTkBCd2U8JCY9WyJqLmY6QEtTKnVoOVlZT0Yy''@;'; put 'put ''JG4kbyRuODMlfkUkPSNeMEBDemxZTTB1RDQ+IyJJMS9lQ29qbmxBJjxPbi5JZHNbbEZ6PmNIbiEqcEdZOX5hb3VQOHArZTJ4UXhWM2N1WmZIMXUxJS9GakM4SERTXWp2RTh8WXdTPSlFZT97S1N9ZXJtUzNESlE5QGg6JXpbQDFsfmBTLHtIRH5ea3wmOyxZaUdLTk99VmlyYVosOCMxLmErX0Mr''@;'; put 'put ''JE42SjckO1JzNy5ZZk9AIzZ8fEU1aDJiYk03ZjwkUzh1NXBxQTxdJUgpK0lXS1FUZlBkcENOUjk3ZGRHbyxmMSFCK2whclclXjkpcWE2YC84OGBFSFhNTS4yQm0zczdxLkB4JnNpfSVyeTwufSo/alZNYlVAcilzIn5NJipSdTxGcjpCYyNra3ZqVUtVUCpIKjU9MV9sInxwfnhDZ0BNLH1uVWlr''@;'; put 'put ''IW5lWHAkcH41PGx8SyJqNnBeNXQ6PXc1TENXVjY1T2dXYVBCJHRDI1B9S3o9SVBeKTRxLGYiZSohZ0o7YWdablFVRVVLZDRXNjEwTEhLIUg3LnI6U1hmfXxHNTFtJCF0NnVNVXRQOCk4WmpSc0t0O0E9XWchYF93N0E8JCFZTyRPQGZJOnZ5azslWWFHLyleRnQ9cDxzZzN3M1FoN2B0YlhkY2F9''@;'; put 'put ''JSpfNFB+dCtVeT1nIkJRI1pTUzNMOUt3c005QzlndFA0bltfakk4NjQrY2ROe2ApdFlhdjRDY3pKbyZzJXVSWThGa1BlP1ZLUEUwcVZacV5zMiwlTnVIJUNlXVBJUHl4flgzSU5HdGpuSmooRlIvRm97OXB6cVBqOFlyMig7fjJ6VTJzbHo5e25eVGByPHVhQUNpLiFGcStGRGNKUFI9aH5OZ0sl''@;'; put 'put ''VnYvUSNmRCFiYn1UZyRgTmE7WCF0UU00KSNNVzhWbGRtUjI1TWRrMFNOYSs8MlQ8eiRqSmZPWjovezh2PGE8JVUuWXlOM2Q7YFcrIWN9dyJLV3xFUyl0JGFGODVna1VsKltEdmtAYDQpOVZIT1EmI0c9M1JNVk9Fc3tKPVU4SCU3U1NaKlZEVyElKSJGdVR5dD4vV0I/STFJJmZ7NU92WTpTbmV8''@;'; put 'put ''cndJNk1gaSp2ZEZKZiU6ST1RRzdTY0Z+KWJ0T3EuZy5BL2NKKEFnTSx9P1t5US5BcnJtMitsU28zJF1jczlsaixtRGlVZGImJXZ8MDlYJWVzcCteMTg4Q3dSbDdwPms/KGswMWtBbFpuPGBNMTVdVGMjblpvJlh2Kz48fGZ1eVVBTEokKVh6K2olVlM+ZCUleGBVRUVaPWk3YHVabiVaWDt1fiVq''@;'; put 'put ''VCtKIld9YSVoLE1+Wi5XdzxKailbX3ldWFpTOmNhbyslNUF0LntFVlUyYFd2ej8wYXB4MiF8JnJQJX40SEBzS3MsaVljfTd9XV5FKjJyQ3xLV2x7SD4zTGoiV1A1RDlgXmg+TT5tVEtOdUZrUHdHI01YOGBLPEIxJExYUVhQRTI2dVV1VmVMTVdQNzxDeS5abFshcGpyUXpjZlEiT1ZDVjwzZWFW''@;'; put 'put ''M1hKaV8jQHg2SVtGbyQ8VDZib0JkaCVGISN6bG40NHI/SV5dUldkUU9LJSZ8W3hnakJYdUtCOHl8WVk0cT5ERUd3Z0ZYKXw5XTlNPVNrISZ4U0R3Ky9mcW54VCZMbUVWNiQsL3gsV0VUfTluYV1lKkJbNEYsMzwoSUQsM21BSFQpVj9TcUAkRTYjfVUoenRRYW08dnVLUmZGQWFEWUcwNXpgOEhv''@;'; put 'put ''bX1NRXx1NltQZGo9JG8kMUY1KUc3SWhUU3l2SlZiKH1PYkxlLzJ3O092Um9DJDFdSyRVNT9Yaz0kMT5odHl2NmFPJj1APCQxKFJeQ3JnfCVgeWpQQUtoXzNuSkhbUWFRcnF3YjFtJWI7QWh7dWc1SldwUHp5UyY9Qj9Ce3JJXkhHc3x5bXViOWphRHxfYkQqTnNxcyo3WFF9MUxqN01pQ1J4azpu''@;'; put 'put ''e0hGdWZaS0UiMGs1Oy4+R30oaHF5cVskKUgyJUdVSHp5cUxhVyx4WzowczdnYmBxKiN2enleTV4yeTBDSXU9PSs0cTNANnAlY2d5fnM7b2FAUm8oTmd4dDNZPSNhYGlwPU1YUSRGVVIwXW5ZNnAmQjU7OD5ffkxHTzYpZFBKN2lnYmQvMjckVV5JRDROSGB2b244Pz5Gbl1XPXFRK3YhTjN7N207''@;'; put 'put ''emFYOGBZez5xQHBkNWJlcSk6YXo5akdsIytNalliK2lwMmB3Zy5re2t8Wk9xQlRGN10+WStnd0tQIyp+OHMvaEZxPG9ObXkpOUQ4OCtjc0x9W3RxMnRzLitSL2h7d006Si97b1JlLEtacVd0YGNdckJkTVVoO2wrO1lXNj9rd250byYsanY0ZzdBc115cjdCL2xPPFkkOld2KXVMUD5MRWNeOk1D''@;'; put 'put ''QEw9W2pNaSN9Qy9pTW9gajxCLDZ8bmB0QmtUdXVwWTx3YXpAMkYzelsycSRWSEpgImJJeXZiWjRHPWQ5SGcmR0ZOc21LZCYmPix9LllifDxvMTo9STAmL3FgLGMhSy5wcDEzVGtxYTQyNDJCO2d5WjtgVWcrOzsrMGpjT3FDKGdgeClbPiE9S1cidE1BMF5lPDhMNiRQamEzdkVfOC99N1VuPEgs''@;'; put 'put ''Q21WTkBqM3V8WDAzUGFwNGBEYytaXWwsRDBqWERzMm4lb2d0VkZYSl9zSGZ8aEc4aXhSL3wvempZR1BRdm1aQlomKjJPJWplPUtzI3xMZUV1TncrTmYpRiYibGhfKnwmSVZ6TTIwMWskV080XkhecXNfYHttaC9zZjolVls/WGRuT2hGMlhfbEZWNmBrWVc6akJbaUZgNUd7NTZPU256Pis8eXRx''@;'; put 'put ''YDd5ezJgck55eF89PyMmfnViN2BBbCQ9NF04bGp+ZyZPIlIyTnB9W3xWbX47YzUpTztlcE1vJVVfeC4vayFJfmBrRG5HcUFiODl+cFdyR3h8Zi5xVzFkdXhqbzV2VUpsb0UwWyl3WWg1JDYpM1E1VnRKJnRwZ1BvWzFFN2VNaGhkVCNVL153aWl0RmI1NUw4IytnSCxrP3NhT24kMHVRYWV1IVU9''@;'; put 'put ''UD4+SkdjYT5tIUVTc1BQKEA8PmVLW30zZjk4dGYmM1svMWtDPEohTEQ3Y1N9ak14QTJTcjoxP11Zelc9N100Kkwjb2hPXzwvNFFHNC9GXVhPdVswQFFpRytdcm1oa1ZtJXc9VU9kYWsvWmtQS2ZhOSVedHNjTmQmWD0xdFJ8alpmXTJAWzdXeFFWfkcvOXdFeGRXY0tfWzw6MF5ZTmpeKTZWSz8m''@;'; put 'put ''IzkpVCJsUGZyYjdnWTcrN1lFQX5MV0VvfDsxYXlGR0kvRF8ve3Z5bVM6dF1ENiQpX0M2d3RBNzIsIUFrOEA/T0NyelJ+R0o1NjJubW9ke1IhKXZlK14+R0x0UiZIZCJTNHdYWiI/OyoqeWl6YVFiVGNUUFJTemQpc3RsKGgqZFkjaW96Tnd5NUFxX14yQ2FTMWY8d289KSpUd29NY0QvKFc2P1M8''@;'; put 'put ''PUw9NiFCYCQiZGM8Kk9HTHkkcExmJmhBajB6O1ZxVl92PiRZWyo0MnRRSSpfQ2sxd0ZpV1BAYilFdikuOSIjViV8MT5nITJmTkspXWZVZFQiLzdhbzFSKXNvL21Pakg4PnxiKSs+e3F6SEV5M1BEV3pYckRkcklePSxEKj1heno7MVRAPnFjO24mQWgmNVRbI1cycyMkUi9dMXZGRCtLfj8xQDls''@;'; put 'put ''U302RD14O31vdS4uT0NRZSsjNTJ7R3wyRT49YD1HaVBeNmJ+PyN8YzZ3TWlSRmN0TiYrfjpgPTg7YSl3VWI6U0E7bjApc3MmNGlUQ0A3U3BKdVU/PXNpPS9JUCt3dj08dlNoP1c0aC5TJlNmVmBKfil4fiJeNCozTFB8cktPVTlhMksoQiJqfSt+YCt5RkR+TltiLCFGa2hhPkUqazpVO1BTOU8z''@;'; put 'put ''PkR1N0tNTGErSjQ4X1IrTE1iblpgU1BtRVN2ZitOKF9sTmwoVGVCdl5qfDNTLzUkWSMyfm9yNUxqOkdYU1JHNXFLPztJMng0PixPSn1hUllWI24vX0MxRnp8WF1rMThoa245Z1VKPlk3KlJ2bHk/fWwrbGUwS0ErIl5HTiNpLkwpLjoiJj9PV1B5e2JuL3gkOS8sYk9NZHlSfV9IWHNZKmxwZDl9''@;'; put 'put ''NTBaTV9ZSDZIJXJDLkJFa3g0KyNpMD5iTXw7fS5+UVFeIzZ+JjV+UGMpMXk9eD5GL0x+XVdOYUhIRGgwYTtzeHkoQDpJb0hZSj53OnByWG9AOGZhQTI3KWV9TU56UTd9PEJYNkdhWlImTUJyVDJPJU48Y1lmN1hKZjpfOCZKUFdfUStzUG5nV2Y5S3p6R3s3Q3VWXWUhUmVoTihaRERaNiozbkJE''@;'; put 'put ''USFONj9UUH4+XV04WU8qYyprYzo7VSFgS3skRkpgOCh+Q14lIVU9JmRVUmVfS00lTVY9c15RJlojYk1tOjVuW3huc1tgdTJFLHRAdX1kQkcsPyhrST1ran5tOittYFpjS3JPcy8pM1JCPn5UJio+N24vRjBOc1Mlemo7LGF5fTI9dT9zKkNER01IP0hkaCYqXiwhPDM0MH08Mm4sfXNbeG8kR0NG''@;'; put 'put ''QXV8Ljx9enpYU1dnRjdfUV4mZjcicHNleEZ+JExvLHBKekMyKWowbyFRWGloaEZIZ007NkFBLkM/JnA6Z2N6YkNlbzNNQXY+SihYT3BJcmtbTlcuPC8va1BVRFtJVGd3YUovbWYmLyVue3A2cWlLRn5uPDA3TyVSIlVSem5ZT01RISl6Jk54UGl0cXQ/RCpncTYvQ0JJRDVUTFNdaEBUR2EwTVgi''@;'; put 'put ''OT83RXticUZKVmVBZTM/a3xdczlRWV9KUz1PU2gzR2xiNTF6TnsqLEN7dHZbZSEkL2QvT2A9VilYX2lmbUdteVBdQiMkJVNASnprMHF7c1YuRCFVSn1nWDsrJSs5ai5kK2QzKXxVPEhXVXEwVzRvPXU7Rj85WSEjRHFRbStmPzkwUWpeZDwkUntdL1ErWlVtL04iXVFLZlQkIkQzeWo9W1k+PndS''@;'; put 'put ''bGhmNSVMR3AsKkVHXWxGSylwYDxySkdLXiZZTnIxTD8vey5tNyhZVmRHZSNdNGwvUStDSUI3QktCblp7bz5XR0VvW3YkWEs1YnRLRWB5UTk+QChvRWo5QTRoRzJ5SVRXPnU2Zio6bSVWeG5we1cxN1RtcGMpbVg4aH1eeW1NdStsYTJ8MSZaVU1YUVV4Uzd9anZ2ITxmaiFdeT1WRndMV3ZQSyta''@;'; put 'put ''YTo2YEZWRyREcj1nc1pia1JrbHh2SzVDdjtgR2FjcG5eNGt5REc1djtKMCN+WXkha0F7LHVAcFZ4YSEkNCtCIn56akEhZ2lxXjc0PHs4RG4ra2w4YyI+RVIlfTNLPWg3PHhzOXgsdjtVVXwqU3NuSXFuSnI5bFV3L092eWRtRSJ8NWszLih1VV95Izd8KjVKbXNGdX5AZyM1Vl9kXj51WHVxbCgr''@;'; put 'put ''MXpEM152WHUsL3NbbU45Nyp2Y0RvdUAhenRyPjB+aXd+JmY1d3sjQltCO3pRXW1PZTVZPFhUQjsuKlkyOjBlcnB8bTFnRSpXTngoJmpBXURQLkEqNnkpPXE4RCR5Yz8lNE1YTy5CfHM1aUlVfldZWXpkRVpgcSpmP3BLU3MvPmdFRHA2cHxVQ14oRVFUeyRxdlFBMjxvT05Ra3tQPThgV3YsSGoy''@;'; put 'put ''dyZuJH5PWE9nZjRkLEQjY0ZZOmR2OH5mZjcseG07OVJFQSQuNVkkJCFUVUE2W1F+U3VPRDxiMFIuQWFYaVpmeS4xVlNfQ0Zseyw/NitsVzV6XnMrejouVEYsN2lqXyRSKF9FfXFXQzgmVDI6U2Z0YllPS1EkVUo3WVUvK1t7VVZIWz95QWZxIXtBfDlmWHhoXj5ScmNbNUNFdTUqS0dUIz9hJHRw''@;'; put 'put ''Vzs6ZyFNTzNdXkBhMlROX000azN6aUkqNVY6e3AlczBqOjJNSipfRjdnNmYrTDczVCRGam5aX2hMaV4oLEtNI348K1kvNzRVflNAI3B8UUd3YCw0KUB1UF1LPF94ZnVQJD1MWGc3XiJ6d24rY15DQkYkdWx8S0Q+V1J8KWk+TjdUbG4mKm5EbylDaUdxUUt2NT1oMlZ8Tj48O2RFJmsyX1QoemZV''@;'; put 'put ''RytWZElpZ21MRlNNMCRNMTEuP1FMVWZnRU9OcjllSi5GUixkJVNgd1QibEdKJi52XjFoeEJlOCtXajdPZz9CUndFRyp9Q2pkeXBNTDchYnQ2fEVkMzU+Uk0iRSJufCk/QisheU42c2pQJmBNdnc3PVRbRGw+QkkmYSZqQV4mQ2Y4JUFKfT5SN2cxUSxWQjAiR0Eycm8hUS5PUEcpd0BwVXQ1Omoi''@;'; put 'put ''eVNnO2loa0c0LGBdSD4idCJiNXg7fSFhQnAvTDgxSissYHY3NTpYOm04QiJeUjB2bXtUN2FVLyhEXjYwN1Q/OFY6KHhvT3NeUiU/YzQ2Kjc1dzFAMHFBIXhoW1tyZyI0XkkqczdvNUJVMUttVCRTJFpvU2J3My5DbSZIIlpBRWVtbDtZR3lJX3MsZztVI2QsZj5ucWk7RT5obnxiN3JaKX0vOj03''@;'; put 'put ''TH11dERlNGNeRjlQSlBwRy9iM2lAPG0jeW02YWQxZShLdHphc0lhK08zcl1qR0wxTi49aFpqYzBMKVNze3oxIVlxPHMsPll9O2o/SlZjWmpGWDdnVn1EUGpvOlEhMTAkUjxbNSgwI1dGKltGcGhXfDQzYj5bKGhLdyxBem9SYC5AJkBxQz9INTQ6UWF2VyphdnEmVlZ4eHM+WTlCclBRfGhsMTxb''@;'; put 'put ''VXNfY3g3WU1JNnIpV2BdUGA/PkkvQjF1IUE3NDg/LzAqfHhHPn51SHp9KHR3XzNDRlhXLnB1c1VgUVJYPFJ+MShVPj0pZTM/KUMkOnojQ01vdXAkZF12M3ZyPnElezl3QzRfcjpPbjRtd30/ND1MQVpBbnNfTS43YDVqPUcsOUhTZllUfChqezQ1PGsheTQsUSRYY0JyNmBBQ0kjNCs5RHhEUSQ4''@;'; put 'put ''OCZgRW1KTXk6fVd8U09lJW5qJHFkO2B5TmhESnRpXUtUaD0vJnk5PjRZSktUaHkvc1F3T1ApS2BbfSl6JD1MRysvRkZ9Iml1L1tAfE1DMl9LTUEmNVNNelUlW3o1RHMhcShXU0k6MT1HbHczb2BnKWlVO2o0TmNCeHxARF4uMjtSMjVTcHVwPm4+W1FpYVRTWDNLWTArYTVtc1F3I3lDXXhlMXF5''@;'; put 'put ''YkRePUszWk4wUUluJGdtIVV4NUR3Y3xZUyFfIzJpVD5CdkxnNWBLQk92am5vWiRESGI4eX1ySkcmZTIuaFJOOT80P0BOOj5BeitDRzphREthImpGc3Z7clpyMUhZQy4mRVhrTj9CcS59Mng1TlU1PSopKjAidDFfaiw1YEBfXkpgbE95UlZGaT44X0lVb2JRKXNVWFYuYCphQSVkMXVAKS9iW2Q6''@;'; put 'put ''QlleNmgmUDszLkksPkdVZV98cUVeWXI+U2t7eGY0IV5DZDx5cjpeZEEkTm9TKVhwZ3ZHInhyKV1jNkc6RXpZUjhIblcpeWc6SGpiPjdlTG13MjlfTmkiTTNpZEZKW3l0P1c+Zkk6bUpmIXwkO2pTY3hadXpvSUt5KWc/P3BoMm5sSGNHY1N3Ozt5bW1vQG1aIU0+LDUhVFFhVEEzREtCfWBUPXAw''@;'; put 'put ''dFUlO1tvS0UxN08xeS9vYFZhM2lSLHIyRlFNeG1YSSRdT052fXpxREMxV2YuKTlLKjEzWFpGSntqb2ZILlhwdCRZZipHS1pWRVtEUCVuX0Bzd3I6SGVuP1goPCw+Mzx7QVBSVFt3YitiamBKayo0eFhTbzxheF1EW0Q7Nkw7dU9aVDNITDBCRHRUQDxzI25dTU5iRWtsQiRnPiZ2VzNHJW15P2A8''@;'; put 'put ''OzNhTE4+d1UqV0RzOGI5M0IwYXwlSkFCUHNwMTA0XXAwL058VFYqeyhSTkhpNDkzaHJLIiM8YFBnOHtGaXBTVj0zRSk6cU1aTjcyPCh8JTQlO0JzOS9DYik5UjVSXm88azBoO1tMeH0vS2g3XVJUNjRCV1RbQ1k1YlNKSz0uWXxrN2dHV149Q2Z0KUJGM3lCR15UM1pALjU1KCR8RkkmMnc7Nl1L''@;'; put 'put ''SyppUy9zUFJhR15iY0hHdmJheW1wM0pQNGJrck5ALHpXaDJrWm08W1hoaDQ/PGBSeFAvb0w9SDBiYFF5fXxJWiNDM0s7e2p7MENiW2AlfWhdJWpsWy5Gcm9wb1FkaUZKKFs6ZUh8a01RZTJvbEpLL1tvXTBuRT9AeyRJRWhDSkckYSYjZ1R2TFArQFBSV0Jje288Ni5pOGFbPTJVKnc3QmV8e3pr''@;'; put 'put ''bj9gbGQxN11xUU5nbS9lQ21qXzQhdXteeUhtY1pIKGRHfUxhSWtVMjBJKkR1JHdaPFowYVZUKGRiPTs7WThOVTlSLnReT1JgbzFQeS9KPCQsb1F4MEFKN0JgPUhwa1NSLEVEKThoVUw7TlsxeHt5bnYxNSksW0htTllPV3YwLHdvcGhCbzVzektxfWsmQHFlPT5sWTFDVDRdWD19al1VdjU7RyY5''@;'; put 'put ''JjFvVS58KVVveHl6ITQoUi4le2xRa2FybVZWRjBaflM6UT19bnBxeHNVRyFAL0RNUUhqS1JveFU/XThfYFNaOy9nSSpKbD5dczl7NU9uVTFTVz42UiRNdnc5ZWxCKWlKcylPTEhVNUQ6SEcoRzx3L01FWV03InJkUVtNNEdzMDBTZm9tazlmOkk7fT0iaX1ZJVBCNyJnZShXfjVsbUlSdj5wNm5r''@;'; put 'put ''Wm4+UERfTmFXSXJvP211S1h5NEVtNDsoR097Y10vZCQ4PEl7ImcsKHAkJXhPdW1WM0VuVzh3Qll9RmRaeXptQEtzSHAwUkxoYHpHZHBFKENPI0VZfUpQZnh5W1A5KDkxN09yKVUkZEgheTxOLlQrM2YrZTg7M1hTVVFVbztpRnRFJXEhelc/VEp2RSYzVmJFKy9oZV1Qb350Ij08NzJXTnhJRyxS''@;'; put 'put ''TU48WkM9UG95KEhQaS49NkYqXk5MOCpId0NnNjlEOF1SW1VnVlk3STNCN3xoVV1MSXYoKzE+XktYcGd1ZltkX3o3e0Qrd0dneHpHJVB3VnMrVCxtY1dEdEwoYHF1TU9MS1Mjdk1qRFo5TjFgLkpDSixET1I5WzMhb0cjNGVxMWR1azhwQWl0Xk9zYTN2cF46PGBTRldMU0ZlUkIhPkk5W2JrL0wv''@;'; put 'put ''S3BTam87XnIzYSV9Uns1Qjp0YFJgdy55KzBqXVhTWiQ0dj1pM1teMU4+dj9VYmQidENWVl1KUnIzOUQiN19wWlRvIV4kcyE2Uzc7ekpVIWxKU3BoS3J2fWQvVSNVaHg1YmBhT3Y4dzg/bHJYYDxibzgwXlc9e2wyKk06Sm99IzxEdDhvOEUhW2ZkYT5MJWBPOGcySDxiXWJST2F8bDdnMHx6bVB2''@;'; put 'put ''Tno1IV4qKDNxbSRrIWxIQmpqM2lJSW4yTlJKVSleaXhuTFtxLnI3NmhHMXQ2KzoiOExDWDVMVWhWZCRFR0MjIUZeZm1HfE1xWlR7T2FLMXZ4W2VsN2xCcCk7SVFrVVF1fGFKXXZaMHZETmFHRlomeXZDUGV4ZWwhNW53ZyU8MlFjUTA7TFlkYWViZCpBZzRtIy9JOjx6TVJhbG1JSz1LRUBCWW9C''@;'; put 'put ''RV1od2VXc1hUU3diOiR9N3ArTWRlIXwhd0dDZmVDcy9hcmgzeC85RnA7U0cqWj5UT2d0bW1oMDBMSyVVZ2BHNkI1TDdrLiNQTVZhYGZnRDBgJVV6cTFYWixWQDBnPC9EWWdNNlhYOH0+KlkhYk9dM1FqVGNQdEhaKztJbyY3MyU4KnpwTjhuYkBwdzxmRz5zNiVLOkRrOXxwJGlsJGVNS3l8YVFZ''@;'; put 'put ''K00kK1ZQaFZ1WkJQZU5JTVVobCoqPTZSNkNzWFElPXlLTjlATkV2K3cubWUzVkAscVthZE16aCFiT0lQYE1heWtZdSYsWjs7W15RYSt6VmIpWVdZUCshM1kqYkRDMWYhfDlJbjIhSW5dLys9I0kvWW48e2dASWZEXyMuRXxLQ0oqXWsrXmZTTU8sMVJPPks9IW0qZzc6YER4bXwqTzopemlRXlYq''@;'; put 'put ''amoxS014ZVBpc09Bbnk3SG5TaTYwayE1bjpxNlhDc0hdcUQlRV8xYytTWjNFJmBUPz9qZVJbKkBOIVM3ajhhJW8hTG0haER4U0U9S0UvTWsrSHFGXUojLFFxK2VWWFBtYD5xSTtoWDppR2Q7WXtdaFlvJj8ke1dgcnI9JTpzd1tfUEYpbGkrYzE/e1JXJCk8d0kubXxTMl55eWQja31jZzdVL0FZ''@;'; put 'put ''Zy9USjtkMFNVMjREL2BsaXkpazpNYWZmbi9idl5KJWtsNTUpNy8mQ0lEOEovRjBWVmRqTEpqfVBKJFtTYT01MDF8OVlsJjw7NmhoeU5GVT48eWp5eVQzOkk/NnN2UUJLQyEhOHwhaTBdYVElMW0mJkJvcUtDaz9adTljaHEzOSlkWmBhYz9LYiZudVF6PUNbZ0JjSlhOVzh5QzBUOldqekZGPnEv''@;'; put 'put ''fWAlIyhrc2VPRSVGSFpSfUFITUElRipifjJkK3ZNTWBUK20mKWF1YUZKLmlXeDVUMj8uQW1YOjRsU1FLTUIoS2t5TEh3fkF1RUV5KFBMS2ptMXIxdFVdIjFrdDtuc0BbWGRaS29QdEpuQHFMUkJHVVhaVl96ODFlRnpAc14rVWAmIjw1eHtPLlY+Vz5iUEBoO0daJE43ej8uYS5RPEMqWkpgK2U+''@;'; put 'put ''c3dQcmZtdlRsKHslfTc6P0xAPSljWTBEVjJJUjdSbj99eiopbjBGVjxAbnV2Vz0uNUQufTA8b109SVVlJjJJJVpqSSU3ZEkla1NtczA9T3RdS2o1WlFLbXNjcHM2SjMrP1ldUHRFb29nMFhfWl4uVEA9PDxNN0lSfjlJND5zNGBeJnh7MzF+ZW5Xdk9KXSJoK3YzYilTWS4za007SEIwZTAkV0V3''@;'; put 'put ''WUpDZEJjLn5ZUWE/T3x3XTZyZSVkbUVZZ3guIU8yN3dOKHVUTzI6dzRaKio0KVQkeXdFX0c3W1V2Kyk4RkFRdFImNmB4VUgqcFlvPUptbipmM082XUJnO11+WiI0UFUubWNWcVgwRGhTTW9nbilEQWBDZU1OX0p0VV9aPVQ6ZjN2cHA5NExQKS88LjIrdWMuT3YmMyhna3BXK1FJPCZQIUxkNzhg''@;'; put 'put ''TzRzLkJoczg8dGIseDR3MjY+XjY2Ul99dlVEbS5pK1JvUXRtb0V9YWwsKGprUmwhV0BPbGgmMSkhb2cxVDFXIXM5fnB5bixDIzEybldAR201ZDcveiZSU29FeT5pYXxJMzxENzw2JGdDPFBfK0B1O2N5R1Q/cGRRbVk5Nm0jKiJuVzF+P0R9filIamRHX3IyYkA0PUdXREw2OC9oYUZqS0I9OlZs''@;'; put 'put ''c1lWImx1OzpJIndMSCpwY2M0UXhKfD83Z3ltdVlGYVlFQGc8WzkmRCp3e10pd0QrL2Q6JW4yIWM8KlNiMjliQW0/SUt1IldsKF9KN1BCOXguYmZQXmFqW3l8MkQoV3JMWEtCeVM4RTZfQkVXXlJbWmJDMiJWJWV1SmxQQF1+cnUrOElKR30wRCQ7RzU8cTMyM08hYF0mZy9OanYqYnRQPjkiTiI6''@;'; put 'put ''YyUrIkhdRWZAbXFTVE0+ZzxbS3guITxfSGF2T0VJPUxiVHVQe2xybko3bn5UVjhyTlc2YSJOUT9GQzQ6cXM9ZmRKQlh0IlVgNXRvZiI7VE4qa3hMcGljPlohKHw/PV9kfENiam1xTVEvSWw3d3FhTXNCN1JGVnA0NCljfjovNEU7UmR7LyM5OXBMSW1qY0NzWFFbbT5UPVh2VmsvfXhyOls+PVFH''@;'; put 'put ''OFJPdzRPdU1iLywrJXRRamlvJVRvZ281YUpmWDhDaD8yRnI2IkFRYVF7Ij15KyJWMi9EJnU5RjE1P3UwZ0x2RGV4OV90VkFKK3RKOkVmRV91NkpCaWgkQ2lJfmsrIytFRk85Qyl9InBOXzxlTEVDJU9zKUJQPkdvX3NNVXEqL0YkWjEua1M2S0lCNUR0ZF0/KVo0S1ROeDh2QWJRSVpgT0NOcWRS''@;'; put 'put ''cyk3WUM9VXVQJmp6VX08RWA5KD1KVUpadVhiXng+IU4iO3JdRF9Hdm4ySnxJaj93IXtKaVFSNUM3Xi86Z2lbQGtxeT5YOEkwdFAiTz8qeC9BO29bSTZFZVYzcF5NWSkvfkJMJj4vQTtkT2FNY2hnOCxuNUIueTlEOWtuLkYhJSs9S0JtNXEzfHNVQHZFSFJvKGF1cHFpMTgyYEs4QTxKZjQmOmBa''@;'; put 'put ''LiRicCx7OURsKyg/JTZtKyg2QD8lSWUjamh9PzAsOVphR3dKaSE5Z1Q1LlpwQERvYDtPK3NAQD4+ejYwVi4waCFkYjEuWSY3RC8vK0taS1UlK1YwNDpSQ1dsK1h1ZTdXPilbQnEoYUFeTDw0LmJ9Qm1Xe292Kyl8Mj90MDtBOz4zW0RIZCRATnNYLmo1aXU7NEYrP01lXlR7ciRHSUVNXWAhWHwu''@;'; put 'put ''QSR0K3lSKXl6M2RAeTd0SixjNUpwZUFUMV5hQlIlMUMqcF9ufmxsMlV9KTtdOWxvNzt8b2YiUCYra0lwdVo9I0ZXKTxUSll5filqPjArQCN9U20rOyFYMEglUGR5bWxoJXFOMW1HaUk3OSwoUlhGSnZTQyFPW2M7bWQhaEZ1UDZGQjFZdE02XzpoTyE0K1dPPlR6Kk0hdDFEcj5OfjRNcFo3RzhF''@;'; put 'put ''OFNlO08qPVhnL1lnIVczXS9FTHppX1hEel1rYSlTd2tHc3YiPFtAL1k0eG1ZV1IxeFlWUyEmZztIL2ROSEl1KDR6ekw2KVBScEI8KFdqXTBUXWgsKTwmKnU4cjs4d3s3RzpjRmZGSlNhdGNNc1Z6aDBlfXdRb0hrfUtlTXMhL3UyO2Z3alF+Ok5lYVdzOVdbTk1ONmBHMFtLKXJTeUE6MkZreyg9''@;'; put 'put ''ajhbcH1vIlR8W0YoZUxAKT5AR2N0ajdafk5bUjkmMmN9VTpvMEtofW9HLyQ8L25hcmhCQzxdaCghWyg9W3l+aGd0TV0zUWBValFwS3V3O3toLF8zKiV9I0s/fWh+ZzxbTE0vTkQvWG5UeVRuP2BdayEwLDFBT2czQlpBT0goYSFzUUBCMDE1bUVQZFclQHkwTU5rQih+aixJUHwyODBOS3ZlKnI+''@;'; put 'put ''Uis3eyFGbFVjLkJYaSFqImhUWUMjaDVZfW0ubmR5JXkoejReTkJhXkNjUld5TWZuQllIfTliYHFlOSVnUVoud3tnRCJfLitoU3MpWT03ekJHQSEyIUBYdFIpNFljUzFmKHxPckcpNFZkXyhWUGUjZjtVQ056L2khMEJnLyV9NFhlXklzWWQ7KC8xKmlAbyhxcT1NbjI8ay83NElEQiMhYlIhdXhM''@;'; put 'put ''UEVYTS9HUGNwKj1GUGNFMGx3fUxARVZzUkxVRntIdXpsd11OWCk5SVh4XXtyTE5vXnddTkAiVylpQCxGSE5aNiRRI0pqd3tUIThleC5XZ3hlSk54PCFiUkB1MW4yZDNPbjIlMSNaI3okTGdmN0lfInNJNUk5P2FqM2lIRDp5Y0VUdyE4TSwyK15kaHhOel1aK0owdTNxYjQ5bF1BN1liSEtkVHYo''@;'; put 'put ''K3w1OkNsWD9gOWxiYDNrOFBLaG56VGJiOSZLNHcwZ2VaPFNVP1RkWCU/YjNOc2JXczxnJUdfOFtmUCl4YjNCdVE4V3h5KUh4OUteRiVAelBEQns5WlBVfHpZUn14YV0mYVU2PlNnZnpJX3QzazNPeHpBdltReyk2MFJ4YCo7P2FqWGlOeC5uUl5JLGdRPSNiP0FmPU1laEBJLEJRQ3d6ZW5jUTpN''@;'; put 'put ''IkQhZklFTXo5InZDK1M6NCU4WkVKPyFSSiFyZnpJVU0uUkIkWEl0Umt9dVpOWCYrLDsyMj9EMD13PUMkT143KiRPPChqTlMjdl5NTmdCPzFpdytsSV1bNkhteVApSld2b3pXUkohbCYzek45U0J6JGtzIjFLQmpqSWlkSmdjSmk4blVqOGo3SD9YOX0jOCVxZkVfTTp2KDFbS0RTcUVkJCQxa3ZI''@;'; put 'put ''dXloUjUqcEBSRlZfSWciTTNzMSVNO2ZHIUtVRE13VVhHL1U1Ln0uUWJSM2NeNGtkXnMvLkxqYHMuRENvRXtMP1Ipb15COHZBa1M9a3xAOFAzIU84ajwkLHV0aENANUlydXZqeytPWmRGRzBWazl7ZW5tRXdmKXApcSMpd1c7XylmOVVlJUUwbktZU3xaUSVQRU9jUXlXb3VNJV0uTjpVOjFRenF9''@;'; put 'put ''WEd1bDtYd294NXZNNUsiMSxxPVgyMWU0ZUVuPk08fUZCYlhrKSRldCZWazFJZi9gb3QoMUV+ZF4jYFYqI20+TjU+TyZXLm9EM1E5LGdbPT5geU5XLk5dMmJpZWlhIi9BMDU+QSxsOihubGJAO1g9YigxTnV7KWs2PUNDV0tVdnc3JjBoRDM0MCwpI2Y5X1JFQ0dNVzNHJntSVmI7Ui5WPl4xWVJu''@;'; put 'put ''OUp5ZUBfSTY4P0djKllpak9Xfl15PnF5NTpMWVVjUipmPFhlLjJiUlsoWEZVSj9AYjB7ZUVaV2kibkAxNVlbOGJHWUQsKy9teDh6T3ZwU3BRdXkmVzc4bls3O3h5OEZebFRmcUh0KzwqI1YmNEo7M31Ic2RYW3RmcHg1Okxqb0E2TDs4Sz5jYHJDa0dPRVo4UnFwTV9NVnQpc185WnJCZzI8Mlgh''@;'; put 'put ''QzY7YlYxe1lgfV15ZXF9eTtTN2AwM0x6RlVdKCszcStzdndWZFVHTTdZODMhWG8mcEZTJnpNJXl2MlVGdWVIRlFjV0B3RFMrXUl1UUMzQUQ3RmVHU3wqbm1gOnBUPz9qeT1wU3hZd0lGY3xRUVpJYFcpakomKzh6RCRFOUN0KyFEZDYmSCoiQGBrV0dFOCV+LmlgU3xobHVqdVtnKnAmaU4hd20r''@;'; put 'put ''LDY6SXdXPXs5OlM+bEc8SmZkYmljRSg6RW1GNUp3Q2RyT1chRzQ1VE5yfUldV2lxUF9YO0dGLl9dYT5NITtzd09QMnxkSzg6K0Q3STsjZjl2WztsRGF9bjE9WUgpXzY1MFs7Il9sX2NUeShHQCNKKSoxMzdFbzV4M1UrMEtfViowe2Q6OGZoKElCPFBTdTdBZihLKnUsKiZlK1RbIWZuLG5hRXs/''@;'; put 'put ''L2s9OkYvfk4ibTQmX0phMThCbHRfT1s5YFRrfH45Z29BMEAvVzRiciNIRUp1TnsldnFSPT9VTnJ5aS9zWzRCe3hiODsyP2c6NW15b0ViUTpFcCwpYHZbR1BLW0c3KmMpLmxTNkJgIjlqUEFAOlt+aEhvIVp0OXxnN3o7KFtuWXhzOSNZIX1dPmZmWUN0ekZfPXFqVjJffXZGOl4yPC4xaUdQQE04''@;'; put 'put ''ZnJQQUUmYFkzUTpWelAhU2IpdWpPdjtmKjdKRmYsU3lUdVM/RCZAP3lkS3hGWVR+YnEscjpTP3NMTFBhYVdheWRBKU5nV0t7JVNZKjBtMCVzXmpiKEMqdj9EKzYzTSVDdncjc2pkO1FdcT48diIrcSR8ZUFJVm4pNmJIbUR+NDN3JW5YbnhkO05NZURoU0R2RkBseDQrSE8pNjNAdmx1L2hsPmF7''@;'; put 'put ''dXxDZnF0Wn1XJFlELCNQX1RsKztfNX55XTBGNHZBPm9mImNSe1dnek1gZkVCUEJMKC9haiQsKC9WekhsfWVVbXRQQ2hGJUQuIT9udCZOZkpgQH1dYmh6K2QkUltHZTgmJnx2UElOU090LldFOjU7JWkqJXE/OGIkVC4jQ3BnO2JbN2dHKyh0OD5jXWtQP0VEZVtiPkxuLFUlSzV2Ly8kTkM0e187''@;'; put 'put ''cSxXPUB5Jk5wZnlILEVNQWJLczA0YGw2dTwkcFUufCh4KzxOUCZQb1gkYjlIe2V1fixqVDNoO1pzRTNnVGY3azZtdishW1R4RDpnX1NCOWk8NzA6UGU2Wi96Z2gkbSZ+SkF6ZHV9ZFQocypmflRDQSxYSWI2UUJrRlE4MnFnOGBfVE4lMkJKJDJiMUJmMnN9Zjo1XSw3LyxmL3hINlkwRTozREBS''@;'; put 'put ''VWEiRlUmci9QX0wqKSgrVS5hQ21aQn1MLi9xJUlKKyUvMDEpWFIrZmJ4dVBMJG8hY0VAVnIuRWVJc1lzOTAqXmBTXVk8MWxySj1sXlZNU0o6KXZQbihhMGJNKnE3TFtYenVxLiRSQltaZytWYW4jV0xwUUIqUXtZR3IqYE17fX4kcnl7Xz94fD4mUHdEMClgKCVwOnZUNEgrb1I3PldoRktHamhu''@;'; put 'put ''RzVMX1d9b28pZ1hANmBbQ3EpeVJyfkM5QntYUWUzSFJoVStiSS4jZCxsKkUlMXZLaTh2MiVTVnYrQyUhWXw4ZW85KjdGYDolVnAqeSEufURULD5iIXRfd0tFTSQzMHVlWEcqbG9HdVl1aCpiMD9EJVFfKHxCJmp2aF1PVWBvRi5CKj0ubVZnYGNJciYsWkFmTlcrTDleemEmXXsrbiFMPSsrZWBa''@;'; put 'put ''OTZwdWkpRHpNJWIldWVRJiVLcjE6MXpEK3hfe1lSaSlXY1NqO0tsL0J9dUZBYWxDclpFWmE/dFU+KmNEQ2JfOCVFY3FFcSp8MCxXT1labyppakZiOGswZE19dT13KTBLNCEme0hjQWc5ej1SblNGQiMwSVhhIyomRGclU21zQ2Beby9Udmc2O2hIJFtWQEIxLix0R2xCSF8/Wy5ifVFdVTdhZW1U''@;'; put 'put ''dy9VRmc+KT9tTnAkZXltdT5VNUtydlpQQig7YVQxNVR1PUh7TFpUNVhrQDBNPU1aVCtxS297XWM7fSgmO3g4UG8iczYienlzViJaOTZCNktyZFZoKjdsKzYwbEw+fEpSLltickR2cSpjMjl9OzBjSmVBcGJgbTQ6SVJNKU1YfGBYKHRPeiomVDNPVyw1MFRoKmlUSmQoQzpmP1dZJihPVUM3W3Mr''@;'; put 'put ''cSJhdTN2QGtYQE9PMGpkN2tSLmVPWnB4cTQ9XWo+ampHY3BaNClrRzs+bTwrW2FhV3dXPH1BR29nSDJIOz5UYH1tVXp3LzEwNTVnZ2R9aDI3MTlSSU0iL2UrNjNpXSMmQX1VXU9sNSZQYDk1OVNAS2NQcWJlPHA+UVh2R2dkZj9qTH5qRkQ9L2h8Y3xNaTBLTTBqJnFfRzZXL2Q/O18jNV8zOl1H''@;'; put 'put ''UmhecnlzM0NCfmdEbz4lVmxBbXh4YnpfNzI6XWEhfG44QGJJLH0pYkxPaDxYb2xmeGosb1B8d25QKW9QIyI7IXh7e2p2RkZIQDZzMHZ9Tk19IXFBRT4qeD9PWiFRPSgkIiJNVkRLWTJaSjNPMTY/TE9UUENNITt6XU86dWwzPTszWk4rUiRxOUtZKkc1Y0BvVG9QLD1nNElRREhGQ01ZPlslRmpq''@;'; put 'put ''T1JNXVNiPSFwYVgqQXJKdmlqbDxiVjsxaUdZajdRQE5ub3J1ckdRb3ArKkxaWTNbb1orK1FtNUYpdWVvSWAlSj4/b1RDaFEwX1tFMFJfRTZuLExvTik1fUd5bWIsRSV0PEYxPXsxaG9INmZIN3FSPiVZPTApNUJeYnFkRGReVjA5UFRFSDwxTWohQz5fLjdJOGo1JChiOm5zM1hvQTw8clZEW1Q9''@;'; put 'put ''MDFYUEZdMW56cWhBciY8VEdwKylva3kmJTRvPkdUVWwwMylqKHR2NEAiKzo7UTd7eTZeY29tWX5acjZmNzExR15iaSYsTlJdYmJqaWtzM11xfDgpLkxHIlJvdHM+UTBASTo5KS5dbi4wTkQrbFIsWTBmTzNHIUZKN0BJRHI5T1hLdmFuWjQkcyYxJmQ5WTlzUmlAI2ROSXxLXStURk5TY09pQExI''@;'; put 'put ''JDh3L3x5XzNnPzZwWDE9STY9Q0xacT08R3hJSG9dWVpNRCszcntTRlJkNEhRJVMxNHdbQl0jTV05TCtbTTdTZHBCXzFDcS51NDhzMkJ0fj1BdzA6Ll98bWFPQElZQGR0U2NHJTReOmF+SCM4Wk10JD8wVk09d2BMdz04V0xpbVpDY1ZJbnFoa28sU31ud2RXRTV3QERSSj5AQFtnTWkhRTJpdn52''@;'; put 'put ''NXY0LmFuZV91eUxIfnBmMm9iZil7KG5nMUgsflp9WkV4U2MmdjIxej1BOmQ0UnhCbD5XTUhIMyJLUihJTSN6QSUvT2BHfkxgPCo0SnhASSFoOHQ5fXVjZVlAPn1vb2FQMEtXQG1felR6S2FPO3o/KmhfMUoxL1ZAenRBakZrelIsS3RUdFhQXiQjKXEpPl15Im5lLD1Yal5TPkg9UHhHc1BpRG1M''@;'; put 'put ''IkAoZitSbkdoTSJ2YDlzN2N5WzFDR2hNN014ajwufU9bT1hPfUJHey9uUC9nOH07UjVjQDhKK1Jta3VQbj9gaCUmU2JPWW9EWE0jeiE5TkNFZzlANSgubU8wVjAmYj41eXosPTZIUkVbeHtweVBud1VhdFQyfn50TkcuNzhHNm9wdHtdbndSXV5kKDB9NSpLRWlAPlVqMyNpOkZ2e0ZpZlBWcy5a''@;'; put 'put ''SWtXRjguXnxYXUx0YldgVmcwSDVMJklWPGZvY0JdZmdiMyYjUnJVUUZfbmBYcnArTTcyNjN0YldgU0pATmlhW3EwO3syTnQ0NjMsOCZifDlZfSEsMThNenlBKmJudjplfDFnc2R7YXZiISkjdjdKUnVlRiM2OkRZKkc1TSQ2eSYodyJaTDd8dWN4QldQRX1tc0RWN0g7VHRJNURpL2xZQi5zR2Zm''@;'; put 'put ''KjNjPk5ubjptYGYmQjYiNT41QkM/XnhURmlhQjVvazo7LjI+YTFpYk1zMSZyQHRwbDREMVQ9UnlYciVeXV9DNUgsUz5sJEQ2Q05xM2osTFZqemVLUSVgKlQ1QlswJU9aeGpmKlR2ZjdkNEleZm80NU1AP2loIU0mME4leHlrWWhDR0c1UzE+PnM2LiU3dDtYYXlWNWRuMU0jeGlgKU1wcU04W1dO''@;'; put 'put ''WiFxcVk7Zl0wbE1XS1M6I3UpVFdATHlBJHhqM0IpZkNYRSxMViIoVndBMkdeZ3pnRStHSVIucm8zZVZeYFI3LjJDMDIoJTU8LjI9TmUhOWpyaCFMKFJNPEJbQmJNQW1eTGFPfDtWUEJWYzhIS3RLOzEiMXlBYzk8eVpyPUNkPHgyaWJpW1VlNi8uNTVxeCU4dF8xaCxlOE8wWG0vQD1NekJdNzcj''@;'; put 'put ''JilUPVVxRSRaa0s5O2h9dGE1fGVUIUV0W2Z+Zz1UQTxzR3FmYE1ldFdQZmNHb0klIV4xVlk/PWxmJW9XKjtkKjdfMiR6QmVaSUU9XS4sdT1MVzdHaGc+ZHAiZ0h4KSFLcks9U1A9b0xwcmdsU2dQeXR6eHFscDJsRilLODgwVlAiYSkpXmFeJUBzVktMe3lhKDByNXZUcDAsYz9gX3UxL1s0Rz42''@;'; put 'put ''MGQ6LkgoR2FnSV4iPihdX0wvVjJ7Nz9bdVFpRUd0b2wuZVtFR0NmQXlIRm9VU2hZVThnaFhIRlMvYEd7dTJEaFMiK11GOWZ3QDJJWU0iblJWMkMwKzQzN2lAUTI6P2VqcXpsbC49cTsxZmdFKEZBTllxWlEyO1B3d35oQ2YzaXA3eWwrSVcpRCZQTXdlV25aN2dEfWAicE14fTRBI3pgbXs+R09S''@;'; put 'put ''OSFzTVBRRV92dEpwNzVZajssfHgpST4/Xj4pWDA9Ij9wREdXK1owOk58KVBFWSk1XTZUR3wjSWZ7Xi59JTczaCVTImVgfmkiP2hQbyJYRSxBM3ZjKyFfVFBKallvTXYzJVN2UGBTSW91PW4lJnxxWzNsSzRZOHBFfmUvMlFxYyhJVURVbEkydyJYJFYwWSN7NEl8SyRQey4oPzFLZGosUV5TeGUy''@;'; put 'put ''TEQ4QkU8dj1yVGVgJl5CdntQeCJtInEqXmJsclErWTxAZXxYIkdbTHN7I0RpJiw3P3UvTX55WUded155SztmXUZ8OWF2Omp5diZ8KTBgU3EyOURwe2AuJkUmSzJzayxKaSYlcWtId2R5SzNtaCN0N3tmfDA7JjskcTtsI2oyQ3IsTnNseTt7UHwqU2dIVW1vcEhZdW5LNUVZMl1kYkd2fG0rXmp8''@;'; put 'put ''OHkwRCxUUEhGViNrS2BWZ1U5XndZWmRHWj9MWnI5SyYxZzleXmQ2JEkqd3ZNaCl7WGgiPSFJejU7QCw9TzB0LkZFUFpvelc/KC8qeTFvTWdPUjROaHZBUlskZm5FXi4rOz5edWJGcTVpckl4d2w2b0MpLGMxMl4leGdQXihUUEtLMSQ9RG0mVkgldCxkIlU4NW4pSkJORVpTbSRmZ3EjZkBnL2wy''@;'; put 'put ''bzlUM3FTOyowfGd6WUVEbmZ7I20sMzZUbXRtLDBSXyIqSz11UDdmJCZsSjM/MDo9O2xEfFMsNChRclghfFlRMXBLOU4wNUA1YF11e11DL3s8LDpSPFUxZixAPmwjJThzLmgsZ2VwWCVpfVBOJCwlMHFlNWVvMWdIM2NMQEJnWjdlXU50SyM2YXoqeTVjO3FabCQ/ZHRnZyUzX24vcT5qSmg6RXRQ''@;'; put 'put ''ISojNjVYfSE2NVN+KW1UY0A7dl1IP2ZCeklWTWBHP0pAO1ElPSh9alU7LE84X31eVWAvXmg4a2E2SHM+VGI/MC9ANSlyVDsvP2osQ2JMNTVUeTQ0bWBwaGJVJE8oO0JgNyxOP2VYdl51TTVdISJkLHJRQ3dVZ2AhRjVwWll6eipiXnlAQlJWYVhbV2pYQFFAczlPJGs1ZlprRTh2eUthaz47USMh''@;'; put 'put ''ZzM+OEZmb3ltUG5AXUx4OV9zPDhGZ1ZAOylebFBZRTk5Miw7fG5EfiFWfmpGbnt0P295JSM7Vjw6MnYvcCN2ZXFKRV87N2dYKCl3P1lxLGlbNFJyWzo2cDdYMj48WiYzXzx2bihjfm5UfHVyLHgwS0ckLCEzQ2VGKj1HWEIrOUt0N3hAWyNqezJjRltwZm9rX0VTXylzcUBBdEI4L3RFMTZYOj5p''@;'; put 'put ''XWp6I0k8cE9hZXhQTE5GaW5vU3gmL0lWVUVaMVZLOiVeS1U3Zmt0QmZ2bUlnL2Z5dUl5WT1vdUBWaGBnY0U2XjcsdEY1PDtJS1UhPS9OSE9JUDF7NzRNJjwxSCgqUVU6ail+Y0FXOGFvbXJVbyhWYC9qKD47Zzc9bl0hM2VOPzo+cS8lOXpzJCFBWHJka2hdRlNoSCxtWGZDPDQmV0s4cWw3X0pT''@;'; put 'put ''eGZfIlssbXNVKFVNRFpFLFlfdW9KSTwqfkIxeTApJSswdXk6PEoibTpCYVA+O0p1a101SE1PVWdjQGo8XW5IRVBXRC4uLDV8WXxROj96XVdzKj9wfT1NY29MRjhIUVRZT3VVTW5dV1FlcXk2dSRCPXFOcmR0XSZue1BjfDhEcCZfYGhge31pYl88dihSLEZIVTllX0d1ZkRmekJjT0JHKnN8OERE''@;'; put 'put ''aHwqPTk7SlZwSUtlMm5lRDEreGIuRzxYbVlgJXw/S3wjWCt5SWIrbShiKjVnVXcwRkZBUmtsL0FYcUhkNipCTS9teC9TUWMpJU9JUGEsPHokYXZZRjkicXJ9UV5fK31wJUNNSTYpUiJSUSNmMXJ+IS96IVZjV3Z6QTFlRjE8N1RkeG9jRiVGVG5zTWg+fUticXMjUSNPWFJpYDkiS2QsLE9zQmV4''@;'; put 'put ''fT0jM1BOV3Vxbyo/Z3JrJX1da0VlYnNjZjY+dXV4UUZZIm0/JVhSYkZYUXVLX2glKiRzQl9kQm1uTihdYTt9dnplN0pxfUlvaWxWLjR8c2IjJkZWPFBGMlJYb3Nbb1QhXS8lY2ska2c4RjFJU3RUdEZ6YTt2WnBFRCtRSSpleF5Mc1o8ODpSa2VdQzolWjtgZkAlSTpfRjg5YkBeTzdnZilVb3g4''@;'; put 'put ''QUxMey9wYnowfCpFYT1USXhUITo7QCFgN2lJeXUrbHxhfSY7fVE2Y2tbWlFtRU8oVHYrO0cxczw7ckRke3c/IWAxWTBvald3NkwuS2VjMF5ZZ0xvbmx8JTsodmpORWAwSS8velE/c157IXUmcUZSezl5PjE/RTZWcEs/K1VMPlJeamZDaCxsOiFbVXRXVll5ZnRLTEpMOXJPXTB8R1Z3UkVifUEp''@;'; put 'put ''LGQzczh6ckkiSXVkZz8mR29iR3JYWEdHV0ddR1VDZkBGNGJwVXVoeFh1TElgQlp8djN8OHY7MWFHZmkrdS9EdEtManJvV3pBZFMpYGpdZHxYKVBRVXo4bSg4dzR6e0RyaE0hIm06XkBLR3hKVlBfNkBsV0FpTUdWVEM7e2wqcVFpNEVLaWEwODxJYXltbHRJTmkwOjZlX3VNMDVRYz4/PmxQbEIm''@;'; put 'put ''Tk98VTYkNVlZY2VuRFdCQip2fEFbKW8mI0g0fUpoPTVXJiIrXS85dHxDel44IVNSd2k4UU83eVcmX090PVZbRVJWa3F3RFFtemR3V2w/YkEwdkJWPnR+eDMzZ2cqUV07Wz8sNVsmRTlZKW1gWjFXMlBEPiRafFVHaTVxYE0wQHImel1rZiVHanRQX2BwYUJNfHpSaik7RjVRLlJiKn48byRfNCsr''@;'; put 'put ''W0U4OmNSOV9nIlt3Slc5aWhbdEVVSmZZajZTVloqJWRPaj5ER24odyNITUs1SyZzTEZ6Q0dzOFpGTSpBe2E6VEddTV1ORHEjQm4rQWA3cCNCXWBgRz8mT3NtYjJ1TG52MzBXen1RYHZTdjNvT3orJDQyPypJTUg0bDtVIi95OmAmKHlTXWd7UWAlODxldjNwN3B5bX0yblYwVCUwTk90YXFmWXIl''@;'; put 'put ''WmV0OUh4Ny8jJmRHTnpqMUJyaEZrI2ZNUWBOWVNITDgoeT1bTj9nSEg+SEchLFs2V0ovRipiJmROaTpWVUtpWG8wX1dmNXR1b2QsSDkrSWRpTiYkJi43cEdZZGUoPUN5RytAT1NIYlBtTH5qbGJjIkBYPno8Pl0mdHYuQjtENk1ZTWx8XSYvRFJIYlBKIWFWcSZyeW84SFJhVl5ueThAXy9mTWlb''@;'; put 'put ''RlJIYlAiaEVHIlIsY0J6bmdidXNeW1pGIi8rWzYoeT1wVCZoKzEpV1lCLlRRT3giNEtSJChJM35aeEtfLjVuSU9DQnNfNVdGMCVUYFFFeU45cT5EYWJhdkpYR1lmVXpSOXxaeGpzPlZnZmd1Wj0rOmdUd2Rneml8W1QpfUwoSE11ZCZpSjUrMkJNOFZadS8rTW9NOVcrO1dsdCQ1UUtUKSUzRk5w''@;'; put 'put ''XktJYjY7QyJhZ0QoRixeKEtOMXVLKihjYilFTW0oViRuTWdoaiRBfExPMGN6bE1Ea3R5UXtXcj8wbUFVJEVHSFNtInhJazR8QXw3OkJPLFghWCtbUDdOekp1SUg4dkxgcyEmTVZEJjBUTEpIKyEidnA6Y2NHXztMWEYvWz0mK0JaLytNPmViYjh+Sz5DKk41dD41c1gzK3grQn5+RHQ6WFk4QCU7''@;'; put 'put ''Vm0qPSY8YVc4ZyI/WV1LZWx7QXdRU3E1JklpSyxBcn4pKixsJTtKRG0sIzBOTVJ5N29dbVZvWUlnTkRISygoWmZybzo8Pm40MGQqSjJrY3Y/fHlsaCJWIk1KbEZ3K0I+aCx3b1Z0X2xRdUtkRWlaIW0zcVUmIXY7XzVQKCgxaGgyfjp5PEQqN0BHNGFFZzwrI3MkXTclcXt3OXAlQ3QhI2JebHg4''@;'; put 'put ''YkY8aHcxKlVWXVc/SzZvXVQ6b314X0IkTTRKJTdnRWNwI35VeEVId1IqZktgW1I5NyN8bzdmNjU+cikySjhjRSI8ZGJIR2RUP05fPXMiWyE3dyhTbzx3N3ZSS1RWdilWdy59IXshSCY1JX1UezlPbU0zRiooNCtWR2lbQFVPSz9Taz9dZV0/dHUxaG8lQCtebzZ2c0twaDpsLkRtKSZhKlNseG9j''@;'; put 'put ''VU08Jn0lfHRuZkhqX21Oa3t1NXBLZTk7UDAzST4lfGM2QmBMRnlPdiZme2N9KiFNMCY7UWAlYkxzL2I3Y0YhWH0ueDR0TVBTVk99THlqPisrUWA6L1ZMTnc8XXZbclV5QGE0fH1MeVhERm90X3FOOnAmcjxfLisiRT52dFJZYXo5Ll9vOUdhbmh5dCRAV30wOEY9Yz8lbnN4JUAkUXV+aSFoRmNU''@;'; put 'put ''JVArZEVvanp1Pj99bFBPKHd5c1JZYXtLUU5rfDtfTFM9NH42PkN7NWJ3ZS5FRmNUciZjdnVqNi52P2Nqc0ZUIW5xIzwoQU44UStpTEddNDlpaCJoUCFyc0FQSE1KUHxPVnd+P2AuSiQzUXtAaFtvYSx2L2IieXB3JlY6eHhFWFVyQkZpJn53IVMkZDc9WUNGayN5ZXFoQVFOIyIjTV4uSzhAImRy''@;'; put 'put ''Rl9DNCEhRWFSXn0rdTNMMyl8Ymx+eyVfLE5NL1h+OD5UU3ZeI0M8bysiO0YvJGAye2FUJVEiXVI+SzRPIXhXPShfJksqXlZMaFFgUl1uLjphTzNbNk9SKDRxbGc+JjdLckJkcDkoSF97dEpbS3k+cSpPT3VDRjhZJj5jaEhaT35rJlcvTDZKbmZWdmA7MlI1Z1teWk5+L3R3TD44RXQ6WyklRHxn''@;'; put 'put ''Jlp9MiRiT0wqZSUscHJIfkx5U2lWc3x0WykoOUYqTGxNcShgUiw0c29UOzAmMm9bNEs/bW1mfCs4aU0hZ1U+WGY5OntOTl8vS3Fqd2w6bWYvZzReayxnYFUjVjlfWSJtUGRudGcpZmZTUUs9elhLVTd6bXR9Y0MqXyI3UC9AISIzaF1rOTVOb0RHQ3I3IW9zKntrdTJdYUxAbm5wZ3JxIXJjeThp''@;'; put 'put ''KGR4QHhhVS82bzo5JjgwWitAUH42Z0lYazcvXkBIdiYwQk84VWkvVl1hVGhpWU1Id1JlaCZbKjAvU2ouX0FUMntLVjwwYDJdUVlqeXA0dFJyYmlPZUNmUGVXVSwoen13KyxSYWUiaU5KIis9cSxKdHB1NCJ2NG9wYHZVfjBjVkVdLCF0SnV8NU4kRTlfTlt9cyZzajNzVzF+Q146M3I2YmY0KXVq''@;'; put 'put ''JjMjZEpySC4mRFkrUGteQzwxaCwwTXB2YkJyWHh4RXlnWHx5MHo8L2c3anQxKXtjb3JMfldzV1dLbDBFc1tqPGtCX3cieiY1ISJffmspRTRHLnNgRy8oNyE7K2AzWCRHdEtidT1OJlBbd10qZHJGRjV6Z0gpSX1NcT84UUx7UyRvXk1mQWpCTlhfYiYsWWNVU2Npd0I2W0slfT1WfE5tVmtybWhD''@;'; put 'put ''UD8lNSMsPDE2MSlXVSlISHNzUSNeI18/KTBtPzQ1V2BMW2g5emIkXSVXeU9Daz5OOSpVcy8lRSY3O2J6RkdWVD1gLnV9QnBhPXleRFEoSXZyclF5M3d5Tl8rW1dfV1ssRXVEdX1AYT8pX2dkPl0zRFVbbUlmazEsbFN5Ny8lRXF6IlEkO2ZoKGU7LntpcHRbMChHOVBIc0BdR2YwTEo+M2FvZjNx''@;'; put 'put ''L2VXUD9Gb2ZDOz16cWh9MHk1MFVCdTIqSX5PTDwpbzxWJjBtQiV7MSFWL1VMKzddaiw+UlF4TihTRWFeTF1hPjJkUD5jd3MvO1AjfV9QcEtAe2JaOFU+ISNMdSR9MCZJLGs8PCIuNSNqIyUrRXEhbmBtNF5AYjM4ZGdDZjFeLzwkLHcmb1NVXU9pdCR7LEhwKSE+ZEJ2dVVFZmcqZT0zJmN8bWRB''@;'; put 'put ''KVttZVEzPTsoVX0rZD4kN2JTPWA7bz9Sd21KVit4NihIPDl2cyM9TUYsK2ReVWxPd2AjSCRPXV9LM3ZbL3F8PCpjdEMsUzdjaCwhUzwpaiFjd2NbNTtMRCFAWzdMZmEmUHN2ZEJoVFVeOzBkVUJEViYoSzZ3RDpwOiMmLmAkc1tYeyVBelZOeDd1YyQ0M0d2X1J4UCVVJSVxYnlrOD1kN35YUCVA''@;'; put 'put ''OHg9Wjx4MnooTVJ4UiVUIU42RSVgcjgsdlVoOD5dIUVCMGlmTStnfV5PYXchSkl+bXlNd14/ZnxRJTE4VHhRODJxUmhfcGRkVj19alhoYjhrLDFnW20rNXQ6SmZOPWYhTHZBQ0NsS3JlJTQ+bT18IWYyd3NyKm0+bT8sPHZgSWxUWWV4MERdOzNpcWBZYEIkeyxQRzpeW21IR05hejRkclRMS20v''@;'; put 'put ''NW88I3dSfDtmZGYkQDZ8LHZCPD1PcSx1ZFYsZ2A7WTF7ZyYpUVQ6RH1lY1UsQXI4OEhQbjBjbyZQYDBNcGhiLj0hQ3MsSH18aHguSSFXZWFpYHRHKzxmZGYrdSlgYzFaK000bFJ+eVgxaVFAXW5Ye1EuTUohaCZsKmlHXkoid1tofnklSCpLe3B2e0xdNi9QTyM0KDB3Ol4pcX0pQFpEUVguKUI8''@;'; put 'put ''VlcpT2IrSU4kMFlaQjxqKEBCd1tAVlBVOk5FND59eVBHV1ElOmZYYiUxeGgsWjNuVH46SlM4Q25HSWRDUilXayx+QC9kKUBxTFNQU1BSMFk4Xz4wJkpqOTVfYHpUIUFyW0dqaStfNE9kTEcxZC82YjNUKF9BM1ZfPlVHOVRFYXJtaltAT2csLEs4d2pHO3F2cTtiJXpqYiw8dzUpLm02SiJKcUU1''@;'; put 'put ''MlU/ck91an46T1JNXlVgTlRhPEg5Y11jMy4rbCw4UDRwU21mNmpsdFZ8XWBnU3ZNQ0B4fDw8cm0hJHFFSEdCdWxqI0QhRjEqZCRoRX1LYFdrZ28zPXd+WlRdc3dUR314Yi9kcFtQIzJ5QEI/eE56KnNENX10SjI3dk5gcGg0dD9CMUJKM0EhUChGSksrYCUxX0oqY3dBR2whOCEzblA/RFJCe25N''@;'; put 'put ''VkY5S1tZfmNDLGF9MzhESyx0Rkh9VUw7KGxaRUtINk82PVJfbktxNHJeMT09JENGPWhoYXorS1kiNnUvOSMvXjI9M0Nvbzk6cDhqSSJ2JGFLJFNtWiEmJTM9U0dwbSE0NCojdWAlQXojfE1ufmdRWXdFZGczVj9Ue3xrOUN3OzRxLFhDV2tMbko0bXlfJW85ZV1YQE5LemhRK0R3SmFiOyVWYlAm''@;'; put 'put ''Ny8zI3hSMCM5RSlVNnkucGZkeXhpXWhQJXIpWHI2IVh3PGZ2UHc+OSZUNVIlITNuSjRMPCVvI1Q+by9ISEV5ZUd6aUR4RE4hTVZTUF5SPEp8cmZVVXdzdnlrQF5wO0k9WD5yaipNeGpPKTF5UFFlPVhkNn04WmE+WT0wMmdkdzNJNH4ifUskI0B4aVk3KntZKy52VFo/SDtycHk8TFtzOVdCTDwj''@;'; put 'put ''TCFgQlordEkvMi5EfV0rS2UkfjxScz8pczkhOSsrYXJ2I0pTfmBJYGJdbC42aUUlR1dEPV53UFl3Py9fU2t+dGwuVHJKU04hdmckQGcmM2gxezYpNn1STj1EQHlSVW1JP04xYVombzNHJUk/KSl6Z204aUxgMms4UlJ5I0E1N0B3PXhJUVZWTU45fk9KOD1ibTV6TWhfMy9LOD8vP2JDZmx6Yl5v''@;'; put 'put ''dns2JmF9ZSU8MlE8JTFeem1ETGNPIj05Knp9L2JTPCwwNkp8VmNNUH0zRDVpQ0dtayVaK301WU9AakJvYWZlS3hGPXNabENIeGJePFdRW1JFQixwQDQuNVgwenZUeEIwZntdPjt9NTE9alRAT2ArUjAubXtfVSgiVmtpMm86cVRfRCk/P1NuOl9JYGxFUHxpTSU6K2BYeGwuXSZSWTdUVGtFX2RQ''@;'; put 'put ''O2NwWmQqfjVXSGZjOWQ8WGEzPmdhMyh+diViOU5uW2E8XyYpYF8rP2BxIVthM24lbzlsWFphUmlAXlluYWFwJjdfJj4+JmxSV2gqSDlATXpQJWkzI1pfY1luUGVnV3UpMjBPM0tUMVA5Ym9yVkNbIl4vUGwkTCpHb2JEM30/Nk1FKz56USs5WCpqMFFTTiRdNU03JWdbOE1xb1U1SChgNyxjeCFb''@;'; put 'put ''VXt6MFUsfjAsRHV3e2lGTEVEL0NoYytlWzFRTiV2fFV6b3gpKi5gcjFWQ0NjPyQpfUJTbUlFNHEoMnk2YiFLaSgpSXdbb0ZEOF0/dlt6UjosQmNpfHNKaz8kfmBVMHs4LHNgdWJ2STBSIzcxe0lwQzY3QGVgM1t5RkZGQH4qKl0/QHxhRmdGTS9CIjZDRExycT5Ud19Ea11Ld1tVKHVeSFNLc21v''@;'; put 'put ''Sks5OzhSJDo1MjZieVZ8NExWd0AzaFhxU1ZJQXV7eUYhKCN0ZF9YU00xPn4mQyZzenlYU0hffTt3PUtMSkokSXdfUmV4MDdiS2hHX2orX2hGTGE+bl88bkFTQzxOT2ZIO3hHMnFkcElETGgmMzspVUpxLDlLRm9ddzlbMlZoQzNLeWU1L1g6Y1JQektETUNrSzhDR0JTekVTNkRGd0RrcTw4RzJU''@;'; put 'put ''U3RNbkdZZEI2fkJWTkE6X05MU0IybWViLCl1JUJQN0Zhaz8rcmspOGNXa0FTR0xCaS5RV2tKbkRtX2orX3o0djNlI1llfFJqcXRMSnElZ0VHWUZbTihVam1BYkdOYERCW01DeF40MW41b3ZeaiE0THtDc1NMY2VMJkZKVl4sZlsrJjJnOnp9cnliUVt7T3huc0g0P310Lnt1WmtoNG1JL0pZZklJ''@;'; put 'put ''Rj5sbmRzLlF4WGE1RmpdajA7VEk0fGM1O25vNHw3IV5gZFJIR1pgb01ZOktFYSlUVWNQP3lxSURddnx2V3VpPl1wOjlbaDhVJFFMaTNTOWJvc2ZAJS4vSDRxfXoxcWtvMU04OzBiVyZPalpUWmlZa3s3MmAoTDBKM1tDNUY9L0xmfW5tQUo4IiwwTVAsTT5ISlV4IWUuaXZEYmliUSFYdiJ0bmkk''@;'; put 'put ''Oz5DZVY+Unx6VHdLYGFScGhlO2IlSVg+QHpRM2hQay54I0dEV3kpMStNO3pjXWdHIj95Y29JcWh6TkgoZHEwZypoen5qN0txfXhBRkJZaVdAZHhiVmNJTV1PKmFNNV06NE17PX1vMH0kISpQYiR4Kkl0S1A4dkt5UmZsemw0RX1PP2kkKnhjIlBJYSVJPWkwcEsrTl48a10le28ie3tgU0lZYWxP''@;'; put 'put ''TE42NXV5dz5Me1JyUHV7fUFFJEhqZGNuVyE4MUUzNkxlWUl6ZFJNYUpZUCUzS2Y2RSt6UWBDfVdFQF5QOFBjIXJzXj1AYFl3TXNDMFp9YFZYcyJLKEUrdnMyNTFofGFROVt9W10kR31eVzhCRC9UazwsOCxbQ0NjLltxbUJYOVZpfWteRyhmIzQqSys8MkV6WmtZajF7fkRHdUFfPV1bcnwzRW5M''@;'; put 'put ''ZkRid0VXNjVMWjw9JkpLIXx7fF12JmtHV0lgYzMuUSwqbmAwIXxOZVtvYV93XXZofENPRF4xcV8uTXNnS34yTF18NEdXW1QsKiwsW3pdRXdbZnhRP0FPQ0I9ITIwRldVPHF4JjBAKnBNdzB1P0BtTVpBOSRKayQrSHA6XzN5fGh+bC5AQFMpJXx5fHY/MlRBSnNwSmlVPEQuXT4lWGEhUTF7elM9''@;'; put 'put ''SXB+JEEpVUlAMGFaUl0oSjsxX2IyTV9KMXkxaFZ7ZThOP3ZfOWIiWlBZR1k7ajRfRGZJbl1VM3QlTDIzfXF8b0pEW112SG88ZiFjJEYxcSkuJVU5KGk6LD0oYyYsXi86LyIzMyZyTXN2elApJStQcVZYZnd6aVlBYWEoTHV5Okg4dj9qYEpPT257MzVrPDI1aFJlb3F8fnZydW9pU2k1NCU/XSZK''@;'; put 'put ''ejRxZVRqIWxKOGN4aiFffjI3bENhTjAkOz4yWU92czZIWDomLy50KWdHOlpjeGxXNUYxRGQmKWUuKlNeWUl6cGxzM2hfJG5tfjhvbHEvUk9fQ1E0MU5gWl8pJWUuUmk0VlFLeVA0cEowQXp5bWQ1bGQuUE14d2h2XiolLF57el56XXtieXltdW85KzpFN1psJHRZXllpPnc/aUd1Qno8IltleFJv''@;'; put 'put ''PVRdJGpZPXUuXy9IWX1gJXhIYituU2dPekJFNXY1WnAkY3BTSkQ/a3ltVHoxVF9TRE1sd2dAJXVfZWlAYHpkUXd0TWlwVnhQLDBML2Fqd30wWVlhVFolWXtHekw5aSl3ZXVtRUg2MTEpVnp5V2ovNEtHZH1AI0pdeXc5TUE9QExxNSRTNkopOWpdQl9MWiJxNSlsLFdwUy5FJHssU1RvdUQ0PnNw''@;'; put 'put ''eVRbQlU+VHxROkc+fC5geEoiP1B4Y193VGdLcD9bW0xyXTk4SUtFaktFdig/VTMkZWY3azwuZCIpOjQ8XnRoUUovU3xMQzt8V1ReKltyTGwueGdsJEs8X15bSU0/TUlPOCpxMzU8WFo9bVo4JHo4WlFVb2YpN1MsVj9PJjlJaE0hfHZPWzVmYiUxPSpPNSFld1AifilLb1Z2WEkxRSZ1USNfOG5R''@;'; put 'put ''YWdSQkIxKDlBeG0lKjBQaHdPSW5tPipfQ1QuTmQ3cUw8O2FNOCY9MnhjbiFHMnNFKSVYYT9CTjg6TyZfTWZQaHtVI0tJczF3NG1lM0dkLm1IOC44LFJzTmsxMV1zNzQwPDUkY18md2kkMSt5X3JkTmVsTUB+RU9WXXh+PV0xVlRfSlFVTiw3LDMmQW57MSxzL0tzZjNAS3FWR11QMUBQVndkW3hV''@;'; put 'put ''MU8hSFdEPVkqYTVbS31OSikjPT1eVXVyPDd1TC5XSmNDUiwyJiQxbWZScCxbdGliQV5JbE83IjAuJUlgVTkseE97ZT4pXmtWM2YhMkM3U11FeTxseTEpYmQ3MjxVLjFhIk04ZC4xNTM1NCh8Xmw4RE0jRnlWTXc/ISRJfVs8OWFKdm1QK30haFJ0YiNPVHN8KiNvWX1xT0g2WTBEZCs8NnQsOmBM''@;'; put 'put ''WXUoNWZuMmhqPzNvSG11P0BoX1J8I2dIIzFURXhLRD96eiE/RX1ia3EqUlk4JHNgLD9XeT0kNXtUZGtwTU9WJEtyXzx7UUdmOCx3YThXN0w2MEd7ZTc/RHtMWXVxVSR2elEkKlJCSChNenRvaWNiaXkoXiVbQikxVjIwUHBNUFY7eXU3X0pWJW1MSGxDZmJ0dkpLbC5ZV2B4PlhLQ2ZKW2szP2hH''@;'; put 'put ''V1N5ZjJdWDQ/SWlbc2csOURUaDdxailpSVo7QkZFMnFVWXxIcChGKFV2Xi96fClDZkRiJUp5PnVsP2tabTtMXTNjQWdtezNRekhzIVkqYjwuUHlUdVgmQ04xc0ppZj5iaSJUV3xaUnBHKjI2YFtqaHNvaVE9OXBxRF5kSF5Mb0JpdEB8czl2e0RgOz4xZUZqdVl2KTU3b2B6IS95dCRCdTYpOHFk''@;'; put 'put ''QkYqNVlRRHRSOEh9QXl2KD4pVS5wPS52KF5YUmpxXkEkLiszcVl7JU18P0VeaWZiOWBeamV+UUdWblYzISVTNjQ4ZSNgT1Ikdkc2Smg0MmBMKlc9N25qVDZ7VkIocD0hVExyeiN8d0N0TXRpNVRea2pgejY2O3g9RWBITjY/SU5aVDdfZGpOWls9TVNzUT4qSmx6I253RmlrTS5PT19WX0F2Nnxv''@;'; put 'put ''RHZ6MU1KQENaSzxaaFV4ekNENmwjP2FgZlROIy5OZ31jXjE3QDRhP3ZAd31YSUxpT3M7TV15WG83LG45Qn15cF5YW3o6YntMeW9NVV5Sd1cpfj0kVSpTPTR1SkNgVDV8QytfIk5SJEpBTE1WPmc6TiVfXS8/KkhecE5SREdYWFFZPD5WRSRiKFk7NWVkfFUvVk9aU14pWHpwcjJDQERpbk18OThC''@;'; put 'put ''MV1KW3p2UW8jYVpUIjo8WEtVXno0Xj1TUUJ2fVNfM0UoWihFYlE5RVpUXyRGNlsieyUkYn46JSFTPUJRcVhdVWBmKiUwJmp7VkJ2QnBTPDNDPW9LLEspUUVwZyY9MzgmYmVJeFRaRWYxe3N7fCQuWjg7QnIjYXIzQSF1SV1sWktzVzc7VTlBe1J3b2BGbj5DTk5QWSJIKGd9ITksMEkuNjVDKEtf''@;'; put 'put ''X3NnO2hwZlo/LExuZEozN2VdWk8hO2FAcGZjOzJ6T3xmP2U3WnslKG55WSYjTmQ8RlAhQCRRTVNxQCRUYEtMKW5AKElEPzZqN2tfflBEZCQkUU0kJHB6aFNfSWdnNHw6RnJYNWxXUTJMczI0Km5jcExzMl5vQE98KSZwczFuZkAkWF0mRmEzR31PREZFQV42cmV4YnV9M1NpbzQjdjl2MT4lQ01C''@;'; put 'put ''UCRSUmF3bWomaVZNKFdYMSg3cE1CRFd2cEVHYClubUR4Ll0xTWx+K112aHRDSDJLbm4xdSkwcHg+M1BJYUVSTyJYXk5gakJ1fEk/NDQvKTdJNnRkVntsTHdhPzp3azpzVXM7NktfJl52VV0veG9SOl0xcVVqbmp1P3lEP2YmfTFIb1d6QEQ/Ri85YWUqVW1SXkNDMnJ4ZDdNO006L141MFZdIk96''@;'; put 'put ''VjR7TE8iRD0pbUYwLkpPTG1uZiIwRTU5OWxQc19wbzMlYVJGTyV8L10+bG9wbmkiNkZKcj1dJXNtTyEpTGhWbD1HPSZjcyJdbH1xaFZEJFUrMzEoKUxSekVOPXkveS9ER3Rfc1VOfUM7eT9DXiQ7TUdCNElMQH0lXmtNKjJoM2Z3akJDan1nQF0mZ1RgLipGVXVzYy50eDIxSmNDUzA+b3hJZFRP''@;'; put 'put ''KGVMZT41MDFsb3FgY3AzRCoyPyhtV1YlbWlrQDRTKCxuT1toVFIiVHhtInJ8SXB2Oko1dlQ6fCt+WD1YcUtjfFB4OkxlPWQpY1RvOERqRGlgWlBHKnBCZDQpfGtVTzQrQ05HMG0wVzh4PW8jI3huNTlQQ3szcCYlQ2VxOHUsfVhtP2ZfcTw1YiI9Qk80c0tRcH0ubWxMK14sPTsoaDdeZHlqJGom''@;'; put 'put ''aX0xInJ3VDVCOTspLEpmPGFiKT87OD8kOjR2VShHQ1d2entvIU46TUg6MypQXkFTRCNMWUkiUi5OVkYyXUksOHcyfCJGNVYpTyJGV1dbcSh3andkY1A3a3RlVnJgM046QiEifHRTWVMqOGhyc3FZVF5dJnRdanZ4WEJzLDJYX14mcHFgdlQyW0t5JVZaX05sT0g2LmUobTBIanE1N1s1RmQ7KkNF''@;'; put 'put ''OVd1T3spPmVyXUNER108I1slYm9WKlkuXkMzUVR5c01zVVE1T2ZJLD9CdGBKYEFAWiRtbDkvOjY+Z0hmWkh3M1l2Tjt4MHkpKSVhSSxpZWhqZUcsNVh0NSY7TTVARigpa2NTPEohViUlREFdWGUiPDE+QDUoZ1VfQGdMSjp1dCZkTV0yWXUkLFVwb0dWWHBkZypeJmxkI25vZCt9KWtsJiR5fFRB''@;'; put 'put ''TV03OEs+ZFdde0Y+ZG4/aXQvLzJLU3oxWnFjNERZYkhXQylyK1VHVnVTK2l2alo1TyMwJkwlSyomM1IjM3BIMHw0SFQkM3VlY3haNShgVzIoYFdKIlBiQXgxbW1QakZkSVVkNUk1SFUqendZOXszJE88YUhnLnVWM000bWJxdUVvRW4/cz82e3VBJFNITWp9JmdpLmM8Nml1PDl6KVVwfEpZXV1g''@;'; put 'put ''L3g+OkpQWk0ub3Q5RD56bj5SIXEmJTpTMW90LG9hPzpsVmskNmIoaSlRUHc/LEVme0dPPXxjVlBKVHYxPWhzNSx1Z2d0OGlxQmBXXy4xb2Rvd01IcjFQbVo9dF1aP3ZKc2lmPHFoYyxwbUs+aXlgUFVHczU7Y3VsJENbMUdZOyY/JFgmJEQzclUrdS4mU00qJncqXmlGNXlOXno/P2pWbTh0KEYr''@;'; put 'put ''PlVVam5EP2ciOnFpXTI3T0hkalN7LihMMkV8QltzP0BaUV91YCZuJERhNCE/azRtTD9oZTUiQCZEL2VIRCopPWRLQyp7eUNGP3szTXtLV197Ry9oXzBbeEZTPjgxfEBZXVd+QCxhQnhfaUZpYyNtQUFIdD5NL2xbYF9AJHRJajVQWHZmQSRKOyJVTDFhQEpIdG1wS2FfaFc0bUdzKXt5bHlgN1tm''@;'; put 'put ''Qk1YRndEODY9VlVVRkYiPXp2Vmc0TEBLRmlxb1QjIlkmMCMoK0FafEphMn1YREd5fmlxYDQjX2gsTD9oZ0JSKyRVMXJaZSh+eWRPQ3dbYDNXa09pYyshTnxRQzsuNCQ5UWdQSDQhaVkqNklPQjVSSV86NWhAfXsqVVJUZnh4bF4jfXU1aW5yc2omfFE0Rng2eXI9M2hSbz1+NkBWKHxzZ1Z3fTsq''@;'; put 'put ''fm99JEo2PUFOdHB1LkloXT99NkJTUC5rNX0zcH1GeDRHfC4hcntRPUh2ciQvRnxCW3tuTXI4ZWJxUkY+TXJ7ND0obk81ZX5MeXB0WGUwSzMxaUxgYkxTZjFkOC9vUDlLL0o5OmMpSyVuJl9nPjM1WFhQYjJqNDFUc3BgKF89SlA4OzdCP3YuOzMhcnFfRnJQLiZeTm14eHVkTFNUNWV0MjVwPihM''@;'; put 'put ''L19gakdhX098Kil9L2NMdVZzR3VqdXQuQFVTPkw0KU5wSSFLTFM0fkcyej5nbzUrfmJ0Ljkqcyl+KnldRi9faFszc3wpfXwuX2h2Xk5tWGsqbnl4Q0w/blBge240NX5Eei52c3h4dGQ0fmdvNVUuKk9GSXpIUj9+I3M5TFZTNWo0XmBSL21UOlZxdSEsVWQ5UXxdS29WKlZaNSM1X0ouVilJXyoz''@;'; put 'put ''KyVuOHZLXk9oVkxdREpxMjdDVjUwQCVMXXFlPV49dm5sd3Y0XkJBR0x0fU1OKVJqPVRuQHkjL3VsJm5+dTBnIlRiLlZRWnkzLHRdcWVRcVdWbTkmZCJqd3ZhSHF0OWNOKjYxUy5CN05vTiQyKkZCTFJiPzxIRjpXOHUxVH1rPlRZckNZOiNzZ1NUTEtLXkBtQUxAb1Z4fUdgVGVeTio5eD1uU2Iy''@;'; put 'put ''WDlhPGl4eDdBUDRIVG9FM2FAZWBhdyNpOUx3OUpQLlFlb3N5WnwuKyYzIiZCUyQ2YTNxMU5DbUh+UjMxLipIdTZQek1lUm45QF5gMDVveiFDI0I2cmwibzBOJG1DJGI1QGAzL0RKSDAyPXp6QU1fIXVQLzVyUyltfW5WVDErIU5gXUZeIyF0IVMmTVpiYTksRSFyPH1VcjY5MSxhLiZ3cHAoVUlb''@;'; put 'put ''JHFAQCRQd3dEXkZxSzAjajw/QWU8cylmUFFlW1RXd3txRURxRFR9aDk/W1dZQi5nMVRyd3QmWyYlTSVMaGVERS91OzYkd3ZVcTozL1VyeHVIZGdxeDU2Q3dRUGUqYWl1Uy88bTVEZl9ZTClCVnY7NjNjbHxRNVVYaDIvJCxAIUk5QXdbdyFPMEVLXn59WyEzXjIpIUErXW8lYy5zeSUjKjcjSC5d''@;'; put 'put ''IypFKHBlQm9aVC88VFpjdyQ/dGc5WSZwcWded2UzQHtoLGYjOyk0UCU3cWRMKDU7NChMXjduJEhCOiZpMilwKnEzeW11PkF+JT5mMHZHPFZTWz86Y04rXkg6X2ZuRX5nWUEmaXFqZEpRQWFeKFE9OkglOEhuTzE+VWwhb2k+P2dBYDI9NFYyKVFxWXI6SDUmS3xOZFZ7aylWcmYmS0hGXlJ7fihq''@;'; put 'put ''PmhZSTxSRH1bKD1jKWdLZHlvZCZRbXc3OFpdaDByYjVNZXdjRkpqdjtKRSZySiFlPl5HUzxkKV9nWiRMeVswTChkOCs7Im9pUXMlUmpCfVlaVHNjKkBuSisvWUR6TFo1VmlYNyhpMGUpfmxGPDs4I2ErUUkoKHpLPU5iYiREU09oJS5EKmAxRCVXRmRrYGErcil9aygsUEZDMmpBIXJ7fDF8NzIj''@;'; put 'put ''ITlIfFtuVH5PaF0kOC5yUXZnZzJtZyF6bExDM3REUmN8ejdRNi9sX3kyX2c3VTU9ezBsJmcxNF03eTBAbXpQdyYyRkxUTW9VQXc4R2p5Q21HN1EobGpSaXloK2MlYjB6P0VGZnk4YFYodSg2bGRkYkJwYWcidGlgRnZgcS5LMHJad1RuZE9yOj5OQmM+UTRONH5qYXxmazM7I11TXzZ2VXV9RWVB''@;'; put 'put ''MDR6elBHRiVqQ3NmMSxzLCYqR0wxNE49K1RJS0lUeFs8bjhKJiwhbHJ7Ym9nPTNSdClMcXVGbDEmMG1Ec3MkaDBkekFhYU9YNnAwYkp4cn5Mc043Y25TRjZJYmNIY3wzfHFobWFqTE4hSF12Y05hWytgMTBZYCElQzt3UzZGQzZ3V2hJLERwIio3M19KNzR+Jm8qUjxuZW81SzMzS1kmNDxeZ34r''@;'; put 'put ''NG41Ym8zTTQ4dyZAR1Zpa09aQUpoenFMQGxBbGk3SFArO1lnUGFdRj5GYmA5Z25IQDIvRnlRSUU/R0lmeFMoRj4pRXQ9fT1JOHkxKkc4PCwmWUVvSV44WWl4MyEkLDwvKVVARGhLXU9ObHlIMSRyLkxHXkU8SEZPcSo2YTl6b05oS3dwc2JIZigqYFpdM2pufCE0UTdjQmI+QGlSPkhEUzpOanIi''@;'; put 'put ''NVdpTlJ+Smp4PDx4bXNeTDQvOURofDZfNX09d3gjQC5dW3giLDwsLGVPaG9OLiV7W3pbfHlSdlclfTx7W31OXmdaWE1HN1kqKUx7bWQ4Kl4hSEp3WzlhOSk+W2Bdezd9KVpNTGY1MSleejliaSRMYTBGIVY3KDkjUTpjLGBLOEo+TCVtZEVMNU5VXj9kYyh3QyF8QjFHP25zK3gyTD05OCpRIWYx''@;'; put 'put ''S204RU4ldmFUfSElZV4sfj1SYDF7bG0vOGxtL2N8PVgxSkRJLltMO2I1QClQaEp4YkZRVDBJZD1nYUBeOWJ6Mj5jZCNNajxzXW5IYDVJPTZkUjJzQnBqMys7MWNPe20zd0MxOCE2cCI3Lig5ITZDKDtsViN9Ly4sNnR7ZUJIRUd0XSJ8Y2dGd05GJChNVytZbyo7IWFzVHMpJHJ7WU9iPExQVFYw''@;'; put 'put ''bSk9NkpjZUlMNjksPXtrKkgiRW89P19BeT1oNT07d2BDOykpcTApJlFoe0tRXmY8M2t9XmxFIVRVR0BxKkp2QUQ3KyFfXn1eLz5iWktnZUQxcXJ3LHp7YWsjZmFpTlIwST07UCN7P3NVQDg2NX0lWWZ3USJtQihHKmROMiQwJj5nMT4sWnY+KDBFbnVTRC5tIW9ddltXKjhVfmtsZ2RwbyM6aX49''@;'; put 'put ''TG5zJHVebWRkSEoxWjZZMUUxLE1tb2NvNHVSPlh4UEJtbzdiTDc/QE5gdjVndyRNeGNLX3RZfDVxTjZRcDciTDJRQzNQbkhQJjc3cE9oYXZNYEwxQEVIYU5obGQsNFFwMWVVJU5geGpoYE4wangye0pAbnJTeGpEcz14Pnc4WV5ZYUFxdHlWVndVKjJpaU94ckYjOXl2byVUOTBgeDR9KTtPO3lV''@;'; put 'put ''PDl9Q1UiaGFQeFV7NGBLOVdpYHs0InJKQFFEfEdbXTI/alhYNWY6SmRHQzgvUCZXT3kpdl91Y0h2PF9OUFpNZ2UwR2BIPzpxO2A1c0JVJHMsLjVFZlMrI05UYkRiYEZHRDxELiIqQFA5OVhYTVVRKHRmL3NMNlh2WFp2X3VUTz0odT4/TENdblhZTWZQbGROUmovRkREYV1oX1tVRHZPb2R4fSl4''@;'; put 'put ''QDcpcEFMQHsyZ2hKU0RhPnkkaU9JTT1xK1JDXSJDRTRCeTB9XS9MYl5mUD5tPFp3S19FejQxJHFIbSswZE9VUlpzM19RJm1kVUt6WVdaVl5FJiRqc3A0U249eHdaKHI2eDNCMHtySiFZK1krdyQxZ1UhMz03MGchVj1xQjx9Oy9WSUNJZF9RJXdYWk15M2wkJFtiQGo4PEA3SnskMG08SU1PcDoi''@;'; put 'put ''TUt2MEBFKnNxdnpbS0NJO1NZWXdEV2NtZXdYd3pbS1NJO1MyZW9GSE86QHpsNi9FaW1fTjNiO15Qek5oKWpWcCNmfWUsZnlCR3VIbE04ZmkvczpfK1FxLFNRJGltYEskYiN3IlsvNElAQldnIWUmWFR8RkRkdSQuS3Zha1liUUE5eixMZWk5X0heO3U8ISl0SXUsanJeOGsrO3NQcV95U1c6WjQ+''@;'; put 'put ''bksrfkhPSCRsTD8qdFEwUEc2RHJ6KkNRb2FVKzxZakN4R3FCIXwsbmU4KSJ5Ol4vLnElKyVNcWRWPSt7VVJ0OjJMYihXSlp9X29gKkNjWWomYSs6Ql9WYi88K2doYilwQ1UoPUJfTj51ISxZYE9admQxN35tNUR9UlYjSCVTNUhUNjkzYVBVIV0vfmlATVhfPUt4aH5KVn1vaywzKTNyYlVdcWta''@;'; put 'put ''eEwqelV4alBoZG9YU10uYnxyVWIqcjB9VThhczVNRTBeIld9WHlZajI2Y0lXaGIpeDBLSCxIdykvIi5aPjBhMWVlOmkrYmY4ISlvVShqOkVaQjZtUmUpKkohcX5KV1oucEw9N0dBKT9xYSxvJTFpKiRvQ29EVit1LjMzQTZAJTJSPSxEenZ6Lm1BXVJEMFhbdG5CSTBXVjVibztKW0U2blFbOy4m''@;'; put 'put ''THYyVnBxJDV3fkIqejR0T3h1VHJjdz09dSsyUCRANjgiN1glZnssPDlWZzp5bSlpNzxmeT4laDM/RUBdWEp6OXVpWCZqTGdDbk5NX2tuXjhfSC8zSzEvKDsmfnYhMSE5ZkYzdmUyMiMpTGE+Im18bjgoKFM0S0Z3IThQR3lycVU/T1AlLnQmMnY/Y0BCZ2xZbVMueDVJdXVeJS5TPiM7U2tPaV5K''@;'; put 'put ''ZGNKQTBiXlo9QUB+b0VTRCR+cjhHMkZEZlRQPzQ2K3BwQF8pPGhmMXZbaillPEh6T11rVig0UkgkJTdxZGwxYVQocWxiRDx+UDZSRGNiRWMreCl3WChQR1IjSFV6Q140LFEmdWN0bjB8RFYiQEt4clUlTXNxMHd6dDFkI1BBMD5ue3VTKUNEZ3RPWVNGaTl4JGxQLjc+Z1kwRGR1RU4mPkopNnl4''@;'; put 'put ''S0YpSHB+VCs0Xn0yRDgmRHNaYmtbO3Q2MjxBOHRdXkxld2l5LCpncWBRIUswNGBGV3VuJlEwcCF8MFQ6e1s+Tz5aSls7aUUhWCx4RV5pUGkvSGNvMVdkXkNTdEZWWk55RFE+WEx4XS8kUSMqXV04YTU5NzR+cCoyQDFsRzg+W053e3BxQTVHUDVETX0rW04/ci99NFYrR0leWT11Qz1WOFpUVHlX''@;'; put 'put ''bGZoaVROejtBdy84fC5tYkBmZHpAQGt+IylzSDpTYSlpIk9EfDZzV2F5ZHF0SlQrKTRpdC9SLm9+eVlWfTdea1RzKSFMbEgucE9fPWY6NU81UylzKSwoWUQoVV5VPmtCbXtvRzwsIU9+W1o3KytUeE87akx0VkAzdmh5KkpBYUNnSFltV1lHPUlTJklMNS4lX2cpM2s2WkBFMV88SFhzeUZjTk1t''@;'; put 'put ''IzV3LkFAL01UJmUvYUZ+R1Z1bGlxZ0lIdU9iTT5ZOFpOKj9bQWlIdzMiYCI2PEpsKDNtNy5zU3N4eyx7Vz55Xn1ybT8oNkthQEVvL15PRFtaRVVGfFo5cjQ4Wn1hIXRibz1ZIV1jUlJkMlVhVjwzbiUzelBXRiVqdFQ1eGB3cEtkQDxFQDVFM1RmUmc9diZtcjdbRTdkVGlQLyJdS0AiSkBURnF9''@;'; put 'put ''Mm5HSDVEPFZpPDlOdDBydlF7TyVgeVF2YlRXQDA5fHJVV0NbaGBKQFQmXjovKyZKcUl6dl1CRyI/NUA3KUszVnZYJDNVJko9M1BOd09ydiFiOFY3N09Id1tyVWhGeDp8b0gsLEVYSjIpQWFRXnFOYTFQZnE6OXhkMzN4dTBXPmBxKFssdVd9MFFMeF1VTltUUkk1KDB7cTY5fG1mQFBzR31qLCk2''@;'; put 'put ''ST0yfGJmNTVKclRTVEcwK3RVZVk7SUpBQFFpRHYoK3U4RlFPZ2NtITE1R0V0NlF0RHRkfEZRaWohWlIwKjY+eW1SQU1DQUFBQUFBQUFBJEFOSiJ7SnRmckdsNUh9TmBqQmk4e0phfjQ6YEwoJSRfSWRDSU5WRGRmX2VpVC5hR1oyMnB+d09zWDg3ZkNDbVdjTmtHYThSLzluRVhyZTQ+enQmJWwk''@;'; put 'put ''NmZbYi5YSzlpLmA3Z3h2YkhLVF8maVR5V1dgaVNbNG1TaVlDbWFtN2FOeX15P0hOMCY/eDQ7Z1dRZX5vXXN8a0pWbG03UWgqWmlaUz5TOStWcE18UFBaS1dsJFcxY2oiLGFSJiZPTSoyez9kNGJATHhgOltmSThCbXtEM3xVKzIhXU5KV2pWYWhCNjZgOXFsYyFNVVtrSE9YOSYzWWtAJHoiW2lH''@;'; put 'put ''OHFRPmU7azlyU1lyK0RZWT8vKTFEWmRVMj49UillIzN4VEM6PCgqZEVCaGlASj5bZj9feWtaMyY4Z1cqZV1yMV8kT2JmSy9AQjJGbUhia3doTWJ4NV9AMiNzTStocm1HcGBiI2ZjfjFWMm9hcSt2WHFXRVFmRF51SlNxcXdlUixzV3IyTDZmKEVxdEt7YSo6Knd4IyJ6OWRBWCJ2e3xATW9+ZWoi''@;'; put 'put ''X30+R1dvUStPd3U0azYlZDBjbCYzQEoob31PVXhve1s4ekd7Pk5mY2wrdltrWTJvVXtAUFdKeFU/cC9HMllCXzRYbU5mXVMicT04UUpHbTAxWUFtaGtpIz8hTCkhIk1wTDxAW206OEcze2I0Un1WY1k0OCtzKSNhJFN0QTpnLGleI19bT1FLNVRGezRzfE5baml6b3RBL00hTUJEZ10qZmU6Q283''@;'; put 'put ''fDxCcFE+PF59dHJGcWA2KkArcFE4fWtDO1E6PEt5LnBvXilLeSVzSmosImFYMTlYMSleQHdqMEt0U10lVylYZiFmUUBheXY5fS87dT5sXyEqR1skUEg1QlZ9IU5mckRILDBiLyRGU3hJXyxgNkVLclNhTitmRkp8Rjg1UG5yL2RCWylZLmM0VXdWckRUa3UiQiNuQl9ieGVHRDBQSGVvJnBdc1V+''@;'; put 'put ''U14re2RGRk0hRzIyangqKWJveEJqWlBEXnxsSyJdTGZBWFhYJF9rS018amxAI2kqK0E1QnB9PjNOPW0lejV1dnJkKTF3VCpuWWhPWSElMmluKVY3XWt8V3JXRSwhVkpIbjNJRD86aVh6eiRfMGtIM1Vtd3IqNktEZH4lWy4pcEY1XVkoR1UkdV19LjpPY1lhbDJ8TVYrTlcwPF4yMzh6cFBEWGo6''@;'; put 'put ''RSRLdSZMMEIlL281NkJhQix9MkEwZ2JxRT1je0BNMktaNEpHbHo8SyN2RD9RQ1BFK1ZrO1hzIT9wfSJ8JSRIaHgjeVliLF5xPi5gSUIiVDYjMGYuanVraU83RHZZMEVjbEBobU5yOFtUfndWeCNXc3dDPHsvXl9+eGs1e1BkeUo6M0VvNUtUZUlrbUF7TTRfPH1jTH08bnQpdlhrNlgyd1lbJWhu''@;'; put 'put ''NGRGWlJ9QyZfVkA0V0AqUlNJZFE+elsyWzBDM3xsSG5KW3Y9RW4/cixsSzFBa29XPEN9czgle3g+ZyR9KTtDaDJfeDFYbkNSaGVzdnNMR2JYdCZLIi9iaS5LIXlaL250ZyJrZTZDITFCYWh7RCI9cSMxVHtqe1lWSGI4K2k5UUB2ezs2YGFJXWJQQ250L3ZWRDV8ZythOUV7ODA+bEEqKlZWdkl4''@;'; put 'put ''XyxZWzt1K0xRW3dWdS8qd01SMEBfYFtCdjBAJkhvfVE/XUNuYHFsa2I3eE44PVcoNGNRXyIvdiNTcWkoU1M6JDkmSj8yUEM1P0BYPT5dSkNjemJ8bzsxS3NjWC9YeX4hJSNodHk0Jj9iK0E/V0dJfSFIOG5GXiwjKGNOZjB1N1JtSlYpQkdOajk7cEkmIyNUMVJ3K2dHa31Zc3VLfURLSFQ1QChZ''@;'; put 'put ''bk4lcSlzcmpnP3BpfU8pW1Eia15LQ3VPa0lmQTdFR15SYT94QVp+cTF5SD4qNFc7dmhtQGN9P2FTQW1OJSZQbUJmNFZwJk0sfm09KFs1bDFpTSpaa3ZSJkgqOEQ4NzJzaTFwbTlGSDwvLHVZZk5nI248VjlYcjtZI0p8UGdxRWsyfShzXUNNOUxWSyJsUE9JRm5ZUiUkSDYzLFVJbH1KLmUqJSxd''@;'; put 'put ''cyJ7ez5kZ1ovaEUsYWB4YUYpLHtCayFdTUVVZmptPHsxeGpdX3RCTFdGRDxQOnBYI3Q1MUtkN1sxX301Y3cwcmVIa2Y0NVleXUNiXnhMXzV9aDVGUzN9ZjNwU1ckelR8ciVNPi84STxJdFdmMXxmLlguaGYzeS51aV9SdHp7Lm9sRU8vOF9CQGImSWF4US4vWF4uQUpod0Q3Til0SWVTQ2JdMVp7''@;'; put 'put ''Uk1AKkpZT1kmO31wP3EkPFs/NH1nbSlsMl9zVElBPE5YcWo0TEN5aSJgIXlhKy9mU25MKFApaHJFfHIuKWdKUyh4SXdOIz1xeDtSYW1ZUC5jLlBfbDk2dzl8emhOaG9YPjVGNT94RCMjdFN2ZmF8OGVtWkczN2M4JjJfMz99Wn4/QDUzdHNNc2h9PkZxNTpwLHdYTSoiO1NeZ0d7NkZyMWxBP05g''@;'; put 'put ''NmppPkF1WlRmNG4/aDosRz9ULzRHaHFxTSNFPkNbWUdkXmEyYTtJc0UlNm8wKGA9d28pOEBOKGM4dnZ1PTFEPD0vWjY/U3R3NCZRQ1hwI0oiUXdXeXRUMmJhJTtKenIjQGp3W0tkOV5aI0AlWkJxXnxzcjh8dEVwJVg6QmI2cE9pKj9oRjtBOFp3fmxVT2s8fGVjRDM+PklOdyI6JVFnQG1oUCkr''@;'; put 'put ''VmN8ZFArYWAkcn1wNnp0Tmlnamx0dih8L0Q0b2EodFNERk0sUnlNQTVtREF9WF5IRjh2bmR4ZkRgK0BPLzhkPDtVQFh8MHRgSWVdOTlbflNgL3tbUG4iQTRlVFkyXUclL3NqM2k0Ul9WTGhXcUVHXXcjUFshZlRZR1MjciNiXXpuQUc2IURiekYqOnNWL1ZKckJKSH4sSCJGNzt+L3prOXNUbz8s''@;'; put 'put ''UT5+QSN2R21DUGZedUVWLi58PHJWazZnV00mRlU/ZiZ3fDspeXhKRGBvd30zRGRQQCNSWEokYSR+LG1aJEI5TitOaX5qSHM/cCIsPVNLTmk0MUx3W2EhMnYqUWFPTDhFXlZsaVg7UiZ8N3omMlltREUhMHJ+Y3wwdihObmlvKHA3VnlnOjJkcklucHRaRVFNPj5yRHcqKUZdMG03YmduP0wlNCZV''@;'; put 'put ''VnIrQVdDVSxLd2xjR3ErYW9BLy8jNHAjQ0xIcH4vRnBvZFRDe1pOPGpyOEZlbVNtKWRsOE1aWTAoUiFPMDVPIkF+OmpDSCtJVDVmP046O1Y1O2xPX35aQFYren5RKU93MVBWdllBVmAjbV8mUW9xckQuXTJxL1smQGB1PTJrdG5GWiYlNlFCRVJ+ZD0obVY3fk1sbD9Ncks6bXlWXU9QP0JuWzBt''@;'; put 'put ''Uj1hTkhtQHo+ITp6M0Mvfl8wJmZ8MnRBX0ByWy8+emN6I3FfPmN+e0pwY1g+SiJNYGg8U05hSEJ2UiQhMlQqMkhkSzxkdDFgTixgWU9DXyxmSklsXlA/ODBII1h5NkZ7ZCVqRV1MUWdQUUxTSGFFYlMqQFlRJEc+VkhTS2YuU1p3TExNKHQrMEIzb0h7azFtc34rOFRUPHYjQSwxRGxjRzgxWy9T''@;'; put 'put ''UDMqSjBXJjUvYkZTJkh+S2poJV9AWyJ6Ulk5YzU3UkREK0krU1UjUG8vfnwwUUxxc3UiTU5IR1VTJlp4R11qZl8jdTtre2FKbEhVIkRfM3VdVkArLyJHP3NSUi42M258dWI1NmdQWiN0NjJUdG8jZDArb3EvZihaa1hENG84Ry9ZdnNkL2BoUnVZbGIkQ1c9ZHVmKnQ+bE8rJUgmaGh4R15KWnBM''@;'; put 'put ''eExrc3wmMUEhcD14W2l8YSFkQWpSOT9leEpbX0VkNzR0Zm5uP3lEKXJLajVaLkJRdzpuOEd6bHVxR3Qpbz57Znc+KH0hNGgsfTFCIS58UHZkN0ROPG0uKWpHQmV2WHJyTl06aUFxYH52L1UvZ2Y5IXMzXlRYQnRXNkhIdGlQT2BzJiUkLnxhWiN9YE9NKnVoLF9qXWsxYS5fck1seTJ7WFo0O1Mu''@;'; put 'put ''I0YyKEAzK1JHNm5CVyZpPj4zNjksdytDTltMLktLPEcxZFdeX1Q7PXJWO2V5M2FobC8iUj8mRT48Q1BPISp8JE4icUJdVlAleDdFfGNJWEs9Onp5VncubDlJcyVrJUlvWEdocEhMMHl4cnl2O1NGQCpLNEo7czYjQE5OcF97czExIiVlUGtbek5oOkQvZC9lSzE3UFY/QlUmWlA/UHdLaGVTJFt8''@;'; put 'put ''KyxWYzRDfF9kYFZ2UTgpJWFTZSt+Syl8WD1wQnojd2dEJEB5KnJoQ21aSjhKSiF2XVF9aX5ydX5rZWpjIV0kZzZXY0VBNi99ND19Y0QqfSQrS28+L1YrQmt8UH0oTGRCbWk8PihYKjAkT1lzNWZCXlF9I1hoMjwufnJwQGdwYWhdQSRLa0psfUYke199IUdFJV1hKk4qcVVTZV01NHB3QFN7Vixe''@;'; put 'put ''JDI2RHcvZ2lEYE48bWRqKzdSfm1ERnVuYnNJZDFnSmlSIkdtMns+Ym9lP0s3KWlwOmpBeiY2PlRiYEFsaDhVWXI/KDpxZX10KStyWndXJUhHLl5GZUEoP0Ejak9PdSpebWdCR1FSbSshZTgzeVdVeVZPTmorJjNGNSNHVkpqZGFzZjBJVFRXWGpfYUJpM2tCImdwbHh3IW1bYzgkRTdKInpQL0ZS''@;'; put 'put ''KWc+R1ROLF48WEV2ODZGeUlPWWg6TngoVH1DSWpOOCRKZHt5NW5WXWNaQl1aT0E1Lj5LWVMuOmArZVh6KnlRS3RVW1p4Rlc+UTY0Z09GNV4pUDZjTWwzclF0fTJNJXR6V2c2KHosQ2ltIk1UUSI8dW9ILkJrRnl1Wm0yQz9dTUp1bTN4PkNNdzMiSC9pTSQ1Li94ZVUpXjMzaXl4ZiZCR0AwKFUi''@;'; put 'put ''eGUrVzshZnlnc1JaJHYmVTFaSCRgVGE4JXNLaWN4ZHd5O2ZOd2FUcGAvTWxrNWQ9e0hoWCFsd0tiUnFeJCt2K197QDVifVdCSFdDRWFySVFDPX1eX3QjYmhRN0k3OlR0QVR1SloxKkciS3YpJHJtInd1KEBXJFZNaWVUOCk6PChpfDpwaDgrZG5RcU5VWmYmdi9vRW5oe1ZXKSxKTG8oTWIjKkck''@;'; put 'put ''Z0RASSlsP3VyLjosMDQmeHtBZH57KFRzNlU+KFUpVW5EcG1rSCQrI3w/TypjfEhJJW9HYj1lODlhU30sUnpYPmZ2bVN+RHEuUEJbJk9pQ2FXRSs2Tmk+R1Z6Xkg5eiY6YjF7PX5MTlo+NlZWe0oqdEFDb2AsdXEqJVg3aT1uOVBKWFIzV0QpcmA6KVFfPVkoI0ZqRWxRXl9BcDxPIl9mRzslbkJ5''@;'; put 'put ''aElFb1d4TVRqbWQzRGUoJSl7ZiVIOjU3OlVVSmFdbUdNSzVPZXB9MFI5KmhLSGVjQ0Bqaj9yS2FMX0thdVBzMG88cT5aTzMuY3xZfkdMKjdKcj1mMURVMXB2fV81a0ROLDhZYHJvYntBdkdfSnBrWm5CaVhvQ0Q/YWxNIzkqT0B6VG5BVDYyLmhLIVtlU058Z04ySnZoUi9MJjI4Vz0wZWVpemg3''@;'; put 'put ''SiMwSjwxfmpiKmhtOTliSkI2OCpYXUk2NTo3fElPUXFrbGVAUm9RcHE8eHo1SlAoc0ImfWNpTX1rNShYYzxXZkgrR3xTMDc5NGFgczg7XjlgdUZITDdGIVBWYmY7dS9sV1cxREdDbUUiVVB8TT1kIXVLbVhvLlg/TlJFXlBwSzhAZDklU2ZEdmExOnYpYX5ydnZ1cHgyfE1gWkFAaG1nOiNSZzsm''@;'; put 'put ''YkNVdXtqPiwjeTZlY3wsK1EqbV9PKHREa2QpUUpeVyl1KSljL3hOYFkwekFzc0ZzUzJySzRWOH1UNyJeVDdOd2l5JFU/cl5fV0FGd0YuQClybzs+RkpdInJ4RmRbanBrazEuLFM8PkUkfSUzWnpLITQkVzxufm90ZTZAanNFQjFjfShBUGtiNkh1PmBkIixyc188a3JCP1Y1aC5oQ3cvP0VjUlok''@;'; put 'put ''aHhkM0BBNSoiV1ZSOFNlWj1NUF1iW05TRUVOU1NbWjFNXXRscFdZbTQsfTBJPGQ3KlpfQEtEI0RxYE9gU0tqUCF6WVQhL0A2KWBlOXBoejBCZjNpQDY5MVV5LkQiYTxmOVhUSGhUQUl+IiI3VCRzVksyeyJAWF1bNTxgRFFPR2EuWVc7fEkyTnszSSFdKnledUd4KSVMbF5jcntNM3YjfnoyLlAw''@;'; put 'put ''RjhPfkhQaiZvJFVwMmNUJkBNVFVfcFQ5XyJPLmdGUUw6JGI0UTlwTm9UTmlSc3JfPklzel1yXVd9KXFvdz0+IUNAYXZNaDZXJSVaJFg1MGNHW35nR2tVWEVUOXc1TWVXLklEJDp1KilxdnM7TW0xT09PSy89UXpvQ285SVJxeUMuKyt7ak9lTGFbK0EvdE5USSspV21AeSNuJVtTOE9vJlNiNGdt''@;'; put 'put ''UjckIkh9bzclMGBlajtwbm41Qlg5SW82Ki84elNDenpoT2hTSTNwU1I2ZnddfngyLkowX0F+I00oYStNPV1hOWBLUjE0JjZ9KTZwTXVlflMyTkhkIUA1azI3Qjs8Xl9RVzxGI0YvW3d9UWZxX35gbTM4MkQiQHwkSTZsdGRFY1pUUSJxND1nRU9tNlgxV1VGa0lYMHQqS3o4RkVMR0pIayl6ck4+''@;'; put 'put ''I2VoOjlQbG5nI0wjJlM7UyJvdFJCVzJPeUlYOFl2Yih5RF85JG01VDFNa0svaCsrPEk9WEh8T2J0SUdpTzs+JllwJFk7Sm03L0p5QUZyYFtRPnlTdiJHWV5EWEYwR2N0eFMqWXI/dCpScmF5aUomSE96P2dYYX42VzwxRV1vMUglYWYmUSlvTy97UDQjT2BLPjA6OD9EdVhsX2c0OG9wODpTQT03''@;'; put 'put ''YlloczZieFMlJHw6PCtBPnpTWzA4LDp7dzd9PHpYNFJASjREbT9yKU0qfGQoJGgrcVs7fnBDMVlVbyY6azI6YSQhfkE9JDRjRygxeWU3an1lJUhGQSxhKV1ncCsrInVvXUFKaVhaQFNnenY0QjY4dn11IWNIU0F4blVBW3lOI1svZS4qPj5gb2hwIkVGL3lLcmhAJn0/NG9kS1ojIShQOnViVCR0''@;'; put 'put ''NElYMEYqJSI7WmNYPjRsaUBzZyxtPCFuWWB1djZ4XSMrUkglWEIkL3FNY2NTWGdTS293bHRSYCsvTFd5TmJENnUheHdoRTd3Tm4+PVtlPHwuKyUiaWFaKCk+T1lHRVhQWStIOUdgdWtTKlVFe3Ihc2ErQ2R5Z0I3PFUjOFN+JnglSkRnOlRrSWp3Vi9sUyx+V3IzNypaNixmUjZBS2A0Nz57d011''@;'; put 'put ''TWVebnd4b2JOVko+U2pqT2JNOjp+cnJdRktefSsxYz1SOSx4Q3xBbSREQDx6Qz1SOk1AM04lbGBSLmRbSj4oNWpKZns1O3lxPzB6aG5gREY/X3shfSFxbFN7REdlRj5vbU9zeip2V0pIekAsaW4pOH1oP1QsSURDUklxc2wyLk9tXzswI3ZmMjt4KEA/cXFoXzBLRmtLLjYvYlBGZjd9PlI3d293''@;'; put 'put ''fGVzVVJrTH5xWnVKNVtHfjJ9RGsoWDY4MlRsT35fQHl1fFVSR3Ixczc9MHcwI3xldFdkUChIeUM2ZnFQLDBvK2RSY0FXYitdVipxaEA6JHZaeXRdQmlgPUZAUz1+M0p3c0ZhPChtZ30mVH5FbD9FS2xeL2MscnY4dDZTb1Z0M1BYIil7M0k4ezZ0WHY5QG9rbGlqMDNWXyVbSUdFPXd0eD9uU3x5''@;'; put 'put ''R2YuSnUkP1pbOV9fPG9GdFVPK2t3enlSVDRoUU1xY0syZEVVQW50XW81QGM+eU98ZUxJSy4la1tSLDBwM3kuViw1QGBMVz1TbiFZT256JGYwbiZecmhzWTl6dWZ+Kn0/V293P2JvZDVBc3cwO3J2OWhubVBXIWgiRTlydkpbO302eGJ9P2dxKj1tX2Z8JXlYMjE9YjQ6M0AyYlRja099MW8pJVdM''@;'; put 'put ''dWE9MW5+IX0+ezlnWSsyaXElJUQve1A4OWZHM0B0cGtbUSwrREsqQFhBTSFFTkRJdUh7dk1wU31NNVo3cH0vTWA/Z1dLX2NPUEF6al8/NDBuYElebDVuKlU3T3Y5ZytPdlhlOng2e3FWPVVSaS9edkh0Yk1sei9YKjNqJCVgMDBHVilST2h+djlTKzYqNiVZTnVIeX5CJFNXaCo9OX18Vl1nbmU+''@;'; put 'put ''NHVJeDRPIko1KElKWC87R2l0Mzd4fHtLNU5wPSgqX1kiV2ZgYn1DKjIrPCUvSClofi5KaTZvdTNpYSF7TGApdF1yM2dILCxlRnpqUXByTE1IW2w6OGFPfTQ4QWQ9dEhUSl1vQ351WXpVVD02JWA+L09XIyoyUlNGJWE5YSJvKzYsQC54ezB3LE1WKFNIcHdnPDQuIyRfNUpaWVJBS2BAakdRZ2V+''@;'; put 'put ''NkhxaX5ufWdZfjl5Jj1HL19tSEd3RVt+WyVvY0hzSmpLeUV8QyMjT1IjMHVXNCQ1eGZzO1ouMT4qMmV8I147TkljUypSdjNMQjB9JT5hPiRIKXI9MXVdJnciLngoM3pOZE48dFB1czAiX1ZpTSsqaHMhfHdFIWVqNHFud1Z0WlpwJldfUSVwJUh1OXI3c2gsLi5KPCRhXmU8clJaPnBWOmUjMz1j''@;'; put 'put ''PT88SyhvKi96NXtAVyNkOlsuMTpwT0w6a0hRTTI6eiN0JExeI0pOJGgzX1YmTm5bPnFCJGBHfko9MEw5XW5QdD5QbFBAZF5Wc2tqdjpeIlo5c1FdLHR5YCFCOkgpPHZ9TGEqUj8uRnAqLkxyQXQ5fTY2fk1Acz5KYVYsRD5AV212YGFZRi5jV3tDfTxvR0oiPURqbHlmJklaPmF6c30kIl5LVTE8''@;'; put 'put ''MHooSyp+bCNJbl5UeUo8RUAiSGNCc3cueEh4ZWZdXmduW2xEY0Q3Q1tXKkVWVy9QcGN8e3RBJk1AOj80aldlUWR4cWF5c0czQ25EYDw6XTpDcU5dfnI5OTZ0R0Y+X2YwT01vTyFebU1BKTV2bTw7RjwzWHY5RSQrRjwiTCI/eUZyQF0hJS5wZ3IpNmp2b2taUSw1P3xkdWFaWD4kV09DZHVNaUpy''@;'; put 'put ''Kl9LeFI/WnNlVTc2JSkuK3MqPml9WjM9XXM/QTFTQi47XyV9KyYwcDkwZWl2QFJ3UTorVldCOyNfQzpFL31rNk8sK0N2byg8XSw/NUcrfTs3aHRPX0RGdCREOXkxMTxAajhhODNGQThQaCU4Z0BeJSowVFh8M2VSTmJFSCpJOD8+W159RzVwYlUkelQ3fHttQn5WcktjakBgO04/U3xaT3tEO1ld''@;'; put 'put ''MyliZyJSTj4qMkhOdk10QklxKWRXWTF0NGJqVTQ9TUNGbyNXRkVxIV1tNDErdT9WaktISFhyVjBUe2AvYEt5eGVGdmV0R3Y7WzdjclVFPU5sJTY8Zy9jKmlCY2trdHByI0Z0VXp1a311a0dNSCElcndAcEBDIXklLlVGMH5qZTY9NEcsN2RtdmAuKyMsO3lMMDQiVk4vLF9pQW9DIltodSF+KGVV''@;'; put 'put ''Kzo+bj5gbWxxeF9bM2JMPzlAamVObVV1O1VhKUBed309LF9xUSRka3A0SSJ0KW40endxcS8yRj5LRmVBe2R6NmBQcjFRLk8qdEU1cmZaRFQvJipBP1NkQXFRXUA2UjQ1OFBDcS8sWVhKW2VhUl0zR2Y1e15hWmx8aH0od3t1OW0/ZGh+QlRHVVgxSS9UIXkyRUp9ZkZWWX4qNSU9elVmRys5SVcs''@;'; put 'put ''QHx5eDRNUCRNcD86JV9eOD9DRlI5KmdIUWg3IyxlQDBqNW57KUJhI3l7NE1wdGIqIlhGOyh7SV9gQFheLi5wb1cmUHpwezxRWH43KDAoRV5ldzQlIlRsd152UEF3KnUiVDFVNS5QZTU5UVhYQjJAN0N5cFlfeUJYPFNLXjJvNGNlTXRnVncsW2JIdlFheTckMiloImk0RXRQS0lDKnAqaEl5dkUo''@;'; put 'put ''XjFQUm9nXVdMRz89LnZ0SSVKTEwrLnpFZHhaK1t2cTJjSVsvWGNZTWBFWi4jZzlDcDszbVcxd3JWKCheTCV+TktDUiE8LyYyS0l4cmU1SEY1OjBISDN5eiJBWlg6dkhhYHo2NDFLJTksUkJ2X3RWLD8jWyRdPUwyem5kUk94OHhqUnwsTTMpQlhiM2A1TDllNC5gOlU4QGY/Rm9Pdjh2KWkxLlEr''@;'; put 'put ''PzpEN15rUFtpRl9dQlk1UmNGaD17bW5DWDBtW2xWUFs0KmlvRFlLVXZ2T0loWUJ1YnBvWmNobGJ3LGV0eUYoUG1KenxKMyxMVUEzTVR1PW97NnEoL3M9SHtPJkh7VmAhN29GME83O2pkQyxlckJPJmtoIyNUdUR2X3lVQDoyVnhVOCFjS1JFNDNOJUtIRmBFemZSaGdTdkk6Iz82dXdUWGt3ZjdB''@;'; put 'put ''by9BbCpYdi4hbGpncV5EMkQlPng6NEpQXTMkXXdlIVg/LlJzM10xaEo4d1gkY1BLYFJ8dlBJOmlPL2s5OjB0K3ZZI0xadF5VIzxqanVYdDU0JS8qI08+bjAmRzROL08pKT5mbSZ3ZkpqVyRSbktlZ0FtOkNPb3ImUExCcygoQVQ+eFt1YCU1ISViJGdKeHdKe01TfH0mY0hAL2F+ISs6P094bmNn''@;'; put 'put ''ZXQhdFQ9NE1IOyx4Vy5HdHVMW3FlVk84MUp+VGZnY2ZBfDQqbjdmNFhrYl5UTVd0OiY/Y0xsMkJNOz90JiNPRW5VLFJaej16YGAqRT5IKHdFNGN6fEAkUFBKbzNec198Q3skWTQ/SFNpR0VdI2VSWzdULFReciZ0TXV1VFo0S28qYERKMEslOCRYWCpgdlt6Sl94RyFGWWQ5VjtvRnZbWlphcCNU''@;'; put 'put ''S2NZSHo8UzgxUyF0Kl09TXwjL3JgNDhDITxMREcyQkRwMSt4UnRfNjwuN0VYJmo2W21LLHJgVmFCaTo/MzdXW3JRbChzSktyLDg6LGBNRzoxJGhLYV8hSTg4RlE1YVlDfl5MK0QreyVjQ2FiR1E4RzBpX1lvXjlHPH0iVH5QbzllcCl0dW18dS4wW1QobSVKLGZMdW90SFd0T2hSbjx6b0MyIWFI''@;'; put 'put ''R3N8InFSY3dEcC80WkJbN24xZjlNYXZUekxZeEoiKHU/ZjZgWlMjRWw+OTJoeVZoTyNYImI2UWFJWnlfM1JNNEI8Tk54NF9AKHxwPDxZPndrNCkrRjtxOGp7Pm9ZWCw7VFhhRyFDcCFVMko0JkExTFtpRCtGeX5vUXlwWT9deUVyUyw1flFgSllJLyRBVCpsOzdhcyFKO04sUF5uMi5bZHs3b2hs''@;'; put 'put ''KElWUE96Rlcsfk8jfGdmMT9bbnRuWGldZVhYTGFZamBCUWxYcEZQSXRlXVReYH5MJl48aHheVHw7S302cFc8KWtSSTxFZ2RFN1leWmhPXz4zY0pwODA7ai8jQEQ1YHB6VD89Vk0xYWFHT1spUzhKK196O257Jj1FPVBMJlIoKzdiKnF2a1VmKUJ+JHdCMEt5I0NaU0BbK0tHVV1gdFsvLHZrP0Au''@;'; put 'put ''XypjOHdadSYvdTFnPlJab0BNISxrXkMoOk5RIWIsZE9NYWZebDVRdHY0Kj8/LkoyKSh5cWIiYjEidlAkUSpkcU9xempUOEs1LGRrOy58bnQhZVNKVFVaTjA+Yll0b0NAT1pFVyVPOnAjJFo+RGpKSmcufjg3aVJqNVR+R0VGUFdrO01FayV1eV8vU0phPFFdRzx6STBxYCZSX0YhQElTWSEvUzU1''@;'; put 'put ''XyJUa0AvVlAhRlRpKUR6LmVDaipJZSN6WTUvNXs9S2VTLkZxPjFbUDAidjdAOE0vIkdwfFJ8Q2R3QFRCYXxLL2lLR0svVEZ4Z11FfTZ8bVUvdDFQXkpXfCN5Ll1zJEREciMqWTwrd2xUSF5IOWBNLCVndjRAYytBRmdDfX5uMWIjcCJNaCtNc2tZaDgrfC9PS25BOkt8XSlWfHlVfjomN0VyaylE''@;'; put 'put ''NkhNPnF5WEdSZC9NU3VyOU06dVZkOGVxZm47IWhxSjAzfmdfbVBYcnpjfGV9JjhtTj9kXjRkWmkqcXoqL0QoLzEvOTQsP352P2VvJnltPW9aVmRRaXorZ198RDZuSFo9fjtLPEkrLix3aSVHTVhzQD95MCtqYEssblg8L0BIYi9kI3gpJXFnNzZKJm9Md3E4dSxgOnRfMykwejJQWiMrOWVYMipk''@;'; put 'put ''ezJFb05GMzBQaHQocm9RfSp8PzArWSxjP1Y9aTFfRmdxWkU9X1NIYHtYUi5GO2hxPEY6JE87XkU/eVsvZFB0S2chWlk5SE9GUzhzVTw5Uzg4WjUsMipgN1ZxajdmTlchc3lKekVnb19PTktDZzYuYkVIWjI+T3t1WHt3eG5JIT5eX3k7bklzMmFLSGtdWCZ2PTgxV3F8WlJANzpgJFZuOXJPQWM7''@;'; put 'put ''I0FYaHAkIVteO3lBQC8uKGVxbkw1Kk5gcS9ZLygydFsxb30mNkwiPV9TWXRqQTk+LGFNQ0RsSWx3JEoiWXdYVk4vQVFKP2tgVCxPZmo+bTFOZVNZNTo4RzdNZiN+MEJqfVFHVT4jOSksdXgiTX5ZUFpTTm4heWw6ezosQEdsRSVfSUBIbDlIZD48RCEka3EpIz5xXVh7LlYlIzJGSyE0UGE3b3U7''@;'; put 'put ''an1SZWovdEwhdkdPYmBpXy5MaVNhQjpvMj1VWDd0b3I7W1hkUSYyZD5qMCRFInYkZTx1LkFafWxxYjE1V0xxQTpDP2B3UztDWG9INz8jW3lDWW1NWWtdeXY6ZXIpXjYkTDh0LF8sJTk5fSlnKkZLOnpFcyhiTFN7L11Sa2dSLytFQVd+X2x0eHdwfVVjTyl9cm5uLFZYLDYjZXZWMUduP31xbnFo''@;'; put 'put ''ZUdQJT9ASn4rPCM3YmhqRntBQ3Q/X0V6M0s8Jmw/TXA2b0RfZEFPaHBUOClPPlVTXzl8KClsUmRJO0JSPX5KckYqOExyMHUzbEJUOUhtOldNZGxGRl18PH4ySiU9Znhpel58W31iQ3BlNV8rUUMvS1pMe1tLSXUxLHB0b1heLzZxQXohTjBsO0NyTjtAezg6cVBCSi5AJE0rOTJMM3A7Qjxka2BS''@;'; put 'put ''bXhNYzl+cmc7PUdFWD9oYnJrOlRTVWFvZklaUSZLU112Wk1TNjFwW1lnNnZGIW1wRldMaWVVeDBIZTB2a2NQJTpjQUhPK05kUTpGSEJ+cV8+VSZbNFpvXj0kTkNYTlEheEYuUEU5LGtDJk9WWCMib0EiJW9wfCYjLG5rJCt8WkErYSV+NXFxJFM3bFpNIjFiaz16NDpsQTFAOWtQfmxDI1U7I2xq''@;'; put 'put ''JHNSdzVkaDM0Klk5T1ZTOXQ7Vi9VXTN2cD1DdCh6QmtWJUpWYTx7Kl5gdFsvLkNdbGtGRXBiNWV9SiwwMjJrLnV6flYpUDspa0pqSCVyXzNxTl81PltWZ1pmT2p6aT9kd2NeI0BnO1J0PHNNV09nfChKalFjcjwmRjB8Ny5eIi5HQkRvZ2NxZW1HLFdUdmBrNzE1KmZYPVRKPCNEMmFaTSx0QjNW''@;'; put 'put ''c1N+TmN5LmFVUVM3Tkt5aiM+OjFXJi8jO21lTGc1S3dMLz5dWiVbbT1MZGk/RzFGa2g5dGRvKnl5P3JaO2poQzIsR2RqMSRCKk5iNnF1OW52aWIxbVNpL0JNJUYuUWg6WDxkW1c0MDcwKmxTOTNHNDxINDFObX5OO31HeDszNzVaeFhkWzUyKWorKF17Tks/N0QoQSp3Ny5CO2VPWDdeeGtZeWF2''@;'; put 'put ''eGxSKyhWPls9LmlYK2BKQDwkL1cuLmBya0xuPzU6WHE+fT4vdUcxcXEiVkAhZCpbMGw3dVIxSzNbSTQ9KCZWOiQ+RSRAclI6cipAaldCfmJxSjcpUnxaOmh1OF8qUyNVQWBEdDxUUXVrPCJ8MFpjc2FYTUgyZHVkTChHcnFJJkYqLENNKTddTGZQRWlYKTxpeVMkQT1JYls1Y1E1SUNCWnBAO2Mk''@;'; put 'put ''SEQjLz5VS0BnYG9gNlJMY1V7U1N0NTd5Xi55U1s2ZjZJZ2F4Wit1XkdQSG42O3lrLENKLnR+TkplcE5WXyo/OGloO1taeCtjfkZvUFl1QWRqKDs0K0tGeGR5PWgxISN0SVg5S2lsN2k2PDdxTEw2blFBWU99PUY4YmJ1MEdJcEBfUFA7P2Jhc1R2IkdWXXo1Z289akcsaiVqVTQ6VEQlYjNCTUhS''@;'; put 'put ''KlBgYExAak8oPi5WXS9dP3w9Nz18VEhAOUhoa305RXZfQkYmZUh5cSZIYDM2K3xUOypsNE5YIzxDTD0jcSlzPTQuRUw4S14kaXgwWSZjYUV0dCR9JUEsUm9Ja0EkUl5beURdKXVFKTJtXnFoNyxsYVpfJU53TzpVUnhEV1NhPF1TIlolX0F0WEg2bl5hcDttamVyNmFWai9sfDxzb1hdQix5SiRQ''@;'; put 'put ''LFJde1IjRms2W1EoRlRZV2dGVEJ0dGJGa0whbDtpV0JaS35+bi9gODhmM1NhTX1iajlYITc8eDJSeStjQzolantkRGFYPmQqd3RQRyI8K31hYTpxWyRmOXNZN0FsITclKigxJD14PXpBdSZeIiRCLjNWW2B2SiwjKV9GI0IvXyMiZFt5aWJsN0g2YDRXOVQhbj5ga1Y0PF0yRCR0KDZkLGdCUD5B''@;'; put 'put ''OUg8TWRTaDpnbFtrLEJbcCZEd18mOHd0VTghOloiZTIle1d6MUNNWmxgVHxQblBNYDhHJF0mUzp0LE8qOjB6VE83KE5QcXFXS1FqZE5qQDZtY1UoZElAd0xNUT5ELi98Nl5Ocnh5Nnkoc14+PX5vS2V6Y0YxXXpaQ2hRSyVBIn1xPH5sYF1RZyJoUzdSb05ZSHlUWGl3IXx9cHl4cSUoZnZsJTI7''@;'; put 'put ''JTc+WjhneHV1b0JiImNRN2N4bCFQImYrPyF+dmo8d15zTldrZTZ1V1ZHQFNILENud2oqXVtIeHZ3dT5edF9SOEFOUXdROiIzNXlkX0Q4QGRgKTsxV2FMZitKNCwhb0g2NCVwWFFKMylGbzZTPWssY3ZOLCNafm1VYypFM19LVFBQZGttRmYlPysrNnZidFRRLzwkc05BYXIhbS4mZnhMN1tzbzBn''@;'; put 'put ''akYwQlNseEFyO2pKZnN7ZX0oYXpCKT9McDJGUl9nXj9TJjchNSEsTSMxYGt5OEVQJUtJez00TEpNWSE1O2B5PDEldCgvcC9mO0RKL0Y2fkwoSS8zKDN3e1thY3c3ezdoSFsyKm0+enhsbyRtNEghPEokJXpxZjIjKlhUR0R3XSt6dyEjNz94eyRZXjAqOjh2WnNBZXtZYU92ZSY1dj86fVNKVXdF''@;'; put 'put ''Vlo7d0lDeWgjNnxISCYsWyl0eiwkQzhZJC83ZkhbfnhkemJXR2ZlUjNfJHp6aHNJNykuKGVLR3EvXkRmc2xlWVtmTy9YR3FVSiVpTVEpPnJaKW18TUZlOStIb316PjJFInksRDw5WmR8PV0zbDNdfF90PjtJUGNUVUdWYiUrTHtuYkVuZE1DJWt0JmFeUmVvd0djdnpUM18yQk1XMl57R0ptRFBs''@;'; put 'put ''JkVPKksiRS9USVZyKHdCYEx7bWUwLm5fSEtiUW44YHhDMXUvezVpS0UmbilVTWAmJlB0P0IpRlB1JmYhLFl2NDVAfWpPfFk3Qi9FPVd4YS5hNmtWbXY3Rn5dSnZaZUxMVksuZG5VZ316YmdqOl5HQmE0ekpqc2NbeyVgSUBTeTM0c2hfS1o7VXp3UHp7XS9VW2FIT312VElUP2Q8XUFYaVVlLEN7''@;'; put 'put ''QUI7NGZ4VjllRjJ3S2ZlOEtrP3U4IWo1diNJcHp8LCJlSHtIb2p3YCQ8OmQ/WjlPQFsyYmNLZHdYRWp4Yno/XldWelpPLFg7MHBaLlhwTiJ9TClXKm0wXWVwdVJaKHNAND0xZkN0fSxkN2JHSn5vX1IkTmVGYVsoPW5nU0Ikd2VMdnkzS2ZyaGJ6aEw4IXpIJXtGSz9ocHRMJkhSPi88UFdadUl6''@;'; put 'put ''JjNHKDVwPWxAPkNsVSxOWTBCR1M5ZlV6V0JMQmokI3che2ZbcCZrISQrW1UmOnVIWDZsWFBqUktKW3Z8d0o0PERtS01Nck1jaDE6STcpPyRuVjA4VDFadE9WSlVfZ3RpPFpXbzQ3TzBEaGluSTBbOVovaS5JKy90ZzcveTQsXTJfbV8yX3tXI3NtNzdMXzQzU306LGxZdWckZG9yOVYpaUJwYG01''@;'; put 'put ''OG9OXXBqIjcrV3FALlFYKkxpXyZvYjsmTl1uL0JHPHt3bSt7cyVTZ0tBVE1LXTxWfUd9bEtQWVZ8KHVtX0ZHOWxiRGZqVz9BN3UqPWdWRks+IjszdEkyb29nRj87LiVDYVpSYjBuOGREfTQuRUMyTiNvUG17cyZZQTw4JTImOE02IyIyVWVpUXwyOkt5MC9WM11pWHc2NmN3RzxucSx7Zm51KGtm''@;'; put 'put ''O2dtRHRBdF9HUD1hV35GVDFual47WFFmQy9ZdVAsXTswaC9YUHBzInJnSThHIk92VHY3KiZHWXBnKTZ8fSkuXTMzYkZ4fTwuaWQjXn1aMFd0Sm4oW0lpbmwhPnRpZlhacXQvUCl1a1gsZ2UjRWY2NzFoemNSQ1BJI1Q1VztmfGNoVG9ubmFPVFlddCU2cUg0fVNvKURrL0BCTUtoR3pdMWhaYShv''@;'; put 'put ''cUE4bUFxVjhVUShvPixuPHV2LzEuPDpmVGspPzVxKEJ3d05OOzE3ay95enZEIWZNdTA6fDpoQUdGfSR1N3UmaEJ6ZVVuaHU7WiQ8aUJEeUo+TVd2I1A2ciY5M3dMWVNbTURfM1ZbVUIqM3pTUltkJlU6XVh7cHl7Smt7Ml48VmhsJHJCdjozQUc/L2BQfXB8IXA9Tz49ZHN8aC4+dE1sNTxEdiMy''@;'; put 'put ''TzFdJEx5e3x4Pl40UE1DQG1eNiI9VWMuNntebzJSR1J8Vypid1E9VVhQR15SMEFIMV05Vm11UDFKc3VoWnw1O0BVSSFpJlAwNlY+VEJORWZrSU0lejZ2fW0lPUZYMigyOzNSLyxLV11deyYjLCtLeDVUKz5hTXMlYXF6THpoXnR4QW04QTI1VSRWbGtafGx5YntxSFErOzc2RG9udWczNC9bYz1f''@;'; put 'put ''XSFDMklaZ3NQPyM4OnUkdVZiIVtpYVFwbCYua2FJfnRneTQlRGsmMnpWV3wmWFtPYjRzM0gqMzhaMHs+TCgsRllgSnJ9JXpiZCVSImFyVk1TYVJ+QC42YCV3e1o2KE5oSEY8JDkuNH1PJEFFJG1GZDcpPStbUXFMeCRmejE7MH5gJTlEZEtIJVJSa1ZDXiFnYElUX1RzcFRgMyhAVC9UdEg/ZSN3''@;'; put 'put ''OUAoVUkjMVpzeE1oR11nNlEqdWFHRW1wfl18JHFoeClVfTNQbjtqSXl6SCJYY2p5b3ptNk9AfURGX2tzQlZCMVFNNzZBeSU8aFBVdFN7LzB5QzRASX5YWDFkRjcpdmxpNGwjU1FWbGMsV31eX1pZRV97RGxtdjc+Q0Y3SHFZMC9mMndoXmBjRE1sRHRZNEh8TTNRMitDQnxFMDVtRld9fiZ0UURL''@;'; put 'put ''XXFgV21fa2A6ND1yL2RgWitdODd1LilAR1kvZD4mUVBIS2VYTyxqMUZMbk12eG1TSG1ZfnEpUGdJSl50dFgzPVJofU4qQj1Kak5pJCt2KGdbPjAvOkldJSZSZDR1UEspZWNyfnY0WSpLZkNPUCNeZn5HZS9OUWRQN09tI3RNRSFEaEU1T29wQUYqeUk+QGo9JEpAUyRmRkYyMHAxdz5rSTpxZ0pH''@;'; put 'put ''PkJvN2oqeWteJF1tTUJQeGczV3RfPXR+WXF7Qnc6dUh+QW5FKiRKfWxYS21EcnYzUTxGK3IiN2FCOkwoMGJGQmA2ciJJfH5IYT0rOH1jSEpQdmBhVUIyNEZlI0xJYThHOEIsbFkzeFpabzplQjhQSXYmSzklaSwkV2NiOipLPEdaLGlgNlFjLytdaHZIWWc7Ly84WHpRMHFPR3p5b05fWyZlPEBe''@;'; put 'put ''b05rRlAjbVoqTGt7Rnp4OGRlNF87QS89YzwyekpSZCY5SXBFbk8uRFpgcENod3tdbXQlUX5fcyR1NjtIZUAwb3omNUBRTTRZYXF8QmAmO182PksqVXBvQ3BaKi9kbDNhMjpfd1FmT1M+aDdjT2Iic2JgLyg6XXdeTUMmZTA6bEhgSE9RUSlfdiZiPWNJOyx0cFtCVDA5VHZqeng5cjFlc096KWRm''@;'; put 'put ''TWNhNkYrbkZQYFArZTd1cXs3NG1RLzxCXiJMW05xT3B4KGtMYk8jQ0lZWU1oQyZELE05W3YoIWVGanRHZzgwKXZQZVslVXY8Rys1cSlhLlkkIVtQX0NyUVZPaV9LeCZKTWQqUi9oMlApO2NQclBxbF1OczxbRm9iSEUxVXo/YFklT2gqOzV8WlRifXBtfklvR1Y+Y1FsYX50KD4oKTcuJkI6UnFZ''@;'; put 'put ''YDxBQ05TJi9NfGZ8Ll5qJTwzWk5YN2dxQyNiQiM2WmkzazEpY24zLCM7I1BRJlgkRilVNzNDLm8hP1JjRSkvdGc6N1dwVE4oUCx2R1soTy5SLnU0TUVVcU1WJGQsdzpkKDpHMWcjOkMybGJtMmBiYiN2aSpXU3BxM3sxaXdmMWoqbVF8P11IXyIpQXFyXmhMRmlYSWM8V2U6S3dAOT8qYXEqeDNj''@;'; put 'put ''eU5XbVNsdFBDZHR4O15lX1dZVCYoJWVbMl8mb1tzIWB5SFhxOClGN0NoZ0g2QlMmQ05YZltwYjpDP253XU8sQ2Y8ZlJfeVBvMSZsNVFiU1tFRG8hSEBoVyo2dlU3KjZdVDhZXjpEaihsUDBGRSFbbGQrTlZgP05HN0A/d1pmOmlWUlpsd2JjTXY1NGgjaVswKmgrJT1DVnBOUmhnbENNQ1I2OHd2''@;'; put 'put ''YTEySUw3M1AoSC80WHEybGEhK3ZtOCl2dGokSSNfdDtncmBbeCtfeXs9eyV8fFl5KDlgRkhUdFZEUWwvSDtBS1I3dWJvfnowM1M0I18+ZHRiJTFFOnssfj9dZk9KSSwxMkdQJDAlSnlrJTQ8Sj5bTnwjbWAraHx0TVp6TGEqKCNwUTU/Yys7YDUxO2cjTTBHWGs+NCM7W1R6fCh4KFtRVSF2aGBB''@;'; put 'put ''bV46aWpkdmhOez10I0BuPExxWn18YUQ9LDJGalZdLzwxeUcrU3xQemFqN0UxV2FHa3hoVkFgMjttTUgxcDp7X1QlfktKX2QrVElhcDJbQ09WfkRkPnhgRSl2Q3pNKSxsUk5XUjUhJGVBM3UjezhAVGJ1IkI8XUQqZlRIMXBdKmk9TG42Z1RyYjY1YUJUN1ZoQkZ0QGJlTzZyMHNDTDlBJkdWbi9O''@;'; put 'put ''Yj4jUl8/MiUuN2t8ViQjcHx5M1d4aTtKZFtPc0FacVIoaXBnMDNgcllyQ3QhK3I/dUxDQzlpMU1CPmVCSHE7cGZZaTo4NEg3ZiNmNFt9PixGZE0qZnNgWlA0PG98RzlfOj9vbnhqYD86OWJfcz1baHN2JTI1eldvZFl6P0ole1c2Ym4panREXyozdzM8b2xIOWI2O3Umd0BYWXQvN2ZHdyIhdVB2''@;'; put 'put ''cX1uSTJydj1eenprTCYue2BafTxNVUlXV3t5IzQwSSsmdWVYWWlhK2B5Z2c6Ql1GWzAvO1JYe1QrW2xobnlDbTZ+fEZmLi5LbjBlemorKyUsW1N6eEJyQjg/fEdGajR2KSFGTCgkbWpnLi9xTDl4Wn1UKzNUWzBBa1g7djhofTVTRi9LYjBPdz5jfjl0OCtJQ1R5S0xdMGZRfnx2W1dfZF11TH5V''@;'; put 'put ''WipCemg+SW1FMEFQfn5YPFZiRjBHc0dsSEVuOytpKlVHRGM5cClgVllkd01GVU16IWt2fGlPW0l7aGF7djEwZH1dZFZoKVF2a04odC8vVEZfb0BYfTA3W0V9diQiNHFYXllKdyxjX0ElWHYyKlR2L01JQ3tIYFlFQVk9Lmg8cWVqS05MQnojZEJCQElhV08odkxeLy83UlEmK0hKIkVVMCxQNyl1''@;'; put 'put ''OWh1Snl+NjJzaG0yMUNBN2dCK3hAeyhbPjBTLHRGbFJJRGI2SWVPPH44LDV1aWNnd3siPl4xVltjdHd0eU9fMG9kbT9JZ3FEYkh1Z1NgMzJUd09AYnBoSnBBN2JVaVU8djMvMEdneDJkKGlVZFpBX3VlbWBjaUNfa2A3dUhsKzdbRC5McGtCYFtmNlBQViFCLlhAKlNURnhpfHE5K19QQzZBMztX''@;'; put 'put ''PyxMQ2JrVmdyWTt1TjB+NlQpQiQ2akRQPXpuS0t6WyxUJiFRK1drKiU5YlRJMT1ZTVcpbSJASmVkZzZ8MUw/VHtvTVY2KlZpYUszdl1yUGNUTExrUmBaeyo7Vlg4VUs1fkVIZzp1TWIkW3A0SkQyUEsqLD59QXBAMk04PnRULnlGUW9tYjE2WEhANyF1KTQjOFhKMFsjOEVaQlE/cjRAQEhkLGIx''@;'; put 'put ''S3tqS1Jtam1KeSxqNkdDey4vKVFVYD5kfiopLndobTRtKUM5fDFMNH5mOXJoMzFXanZXUSs1Y1c3TmlpcyVTZUV0SjxwJHdBcFg0Z1RHX3VwVlVwUmxIPFZVLEhzbCpgcHo7T3tuWk5JUXQlP2BRTEt1SjBlZnx2WFA4ODQiNFVTSDBDdWd1RnIqMGY+Z3s1bTk7cU9iLjxRem9Vd2pYK0BANCU/''@;'; put 'put ''KHRLL3M2YSwkeSRke3tYTDZtIkNnIVVOWzkvRDg+W2dYSEh4UThUNDM3Oz5+VXReeUBsXlo2ZiIxLmp0R0ZXJDd9YChTIVJHJCVweHFPcSl4V0xiL1hoSi41YSNleVRfdzUmZDpbcCNhUHhZeEk5dmNHKG5lLHwsdT9CUX5yfSp2dH1MOis1ZGJDbEVPZiY4eyZXNHh6V31IRWA5LH45OHQ/VHpC''@;'; put 'put ''SXlrfHYlVUMlWSx4eTQ0PChePSJMfENsfFZxPiQqRkl1WHpoNXxJQ0czKWp3YFY/O1Q1VClbRk0yWUslR3tKSFE4WTF3OkZ0LG11WW0xPCVyV05RbTtLYG8+XzR5KkxMMVQhPVVxP3s4K3RPLmNQaGVPX1ckcDNFTnFMYypxTXAwWEd5LDtkUXl1SDlmQ0hIai4hOz92bmYhaV5fWWUjI3koYzZU''@;'; put 'put ''IjpkRG56ZXdLaEE4X1RISj1VTSt+PH5HPk9kbVFfekZ7Oz5+RVhydylpUyQlaHBRPmNhUUxtTGRxNUZ2PzIpTTEwe2B0JTRGQG4ifF5sQ2VvU1B2Jk0mc3IrcCVCTnV2WVUkQmRHb2FEcmxCO24ucG5fXkQzZ0lCcSg3RXw5WDpdK1QrKS90MDV8VWAoW1hoXjFUSHtUPFdKYEkkb0MrYD5QZXFw''@;'; put 'put ''Wz4paX1rSDo1VFNrU1FCajYiTmpTQlg2RF1kPF95UCt8b2tjYXgpbCw2LzlnU0lmWEklUyZwWjEmajI8RkFkdXR7OTJjOFFrXzMoTXRCKl5TSldscDF9bVl7Rz05Jj5JKnYzeVRiNV42KUkpQFpSMkVhV0tLan1UK1o6PT9gaVp9W2dGSylKdUJsdnN5WzlsPV94fHw4Njp3SC9GY3dIT2JqUV52''@;'; put 'put ''XTlONk0mdGxKRn47bEVZJSFwX2ozWiplJSVeeE1SKFVpcU0qVjElWkF4WTZnV3VsVE5sfFtDJlVWVE9dMURqYW5zYHohe0dhR005aVlWV201LkNHLHVKfCVhdHRSfl84IXhVRDohfSxLNXJiUXY8bzh6Nj8iPEU+PTZDQDNvc2s0XTUwaXg+a0l9Wz1GX3ZESTNrVT9tK0k6YVZoWHpLaUFMfUd9''@;'; put 'put ''dUBRT3VkbGEsQStOfTlffClBVWd4TzpLKTA2UGdMVitdJEdCRHF2Zi80bHNaZDE+aCJLfnx8aV9JJnE0IVVCLF87dDY1KDMpY3ZgYzw/PDJ8YkdYNH04eiF4JWUidD8rbXhUPnZ9MCxjWG9SWXI7cSh0MUBmN31RSE9IOXcuWSpQbm4yZ3J0PVZPRlJIR1peaCpOej1LJTs0NE4hPHc0a3cxa2Z1''@;'; put 'put ''cUkmfFNGL2c2VkshXz0lbTQ7dTQuJnI9dXc6bGJeK0MkRF86Ul5lRT4zLlJvOXptdFYxcG9ON3opRkBsbTlZfnZrOmskJFs8LkAweSJEaiVRRSVHOmg8OnlhUkUmNSZTOEU0JGhsJVpoV2U9QGxuU0o5PGlDa1s6QlFOd2dSIWByK21gTisofDtKaFU5LzldPz9XZWBYYXRFcDlGOFU8U0tWaHZQ''@;'; put 'put ''MUtpMSNmNGRqN0pFQ2tgSUJjYy9Lez9zVmlSflBXIj5QSS87W3dTTSlzWnhPIkx2e0c4a3oqPFZFTSJkMDhsQ05tWHYuZDdlaUE3Mnl+WltRZEVHXmFLQEc8WyFHM302aXQ2Qm1qS2FPRzVLXnxjM3x9P09eaHtEWWBMM0JrdFo2Kz86RmBnSls2U1lFckk+fWlnM1l5Rjw3RjxqK2BLb3dOTEA0''@;'; put 'put ''JCl2TSY2Qlhge3FzOFBsVFgmKDl+NU4jVCo1WWt0XmZmOjtIOitfQVAoMXhKXUJVO0BNekJ+aXhpTVkmZ1l3a19QbzFaQmxGPSFqSUZ1T0o3PUVHOGtJYGZML21dSklFJDxSL2c/WDksSWVlO3tjPEtaKDc3JTlUYVFUNj5JInBOITVgJlQkRk5tLiVCImAzSTNndGs9Oik+djReSnAvUGNZaSF1''@;'; put 'put ''KCoxWWx2T0w4IldSK28uOTFDWlVoTEwpQntwZUpnODYyT146amZoaFBzN0YjQldIRlZxfGk5fFp1QnAuSkFpVXNVaHw5bjZgV35AVFk2NjF2JiZDWl0qRiN6ck1FLiMmcF1wMFAzczN4eillRVhYSnVqS1lkYW5kYmEyL2x4JkF0TElRKVFCWS9CbzRHeWQ/K0pMY3R4TyQ7c1JFODYsVjlwRUZx''@;'; put 'put ''bjx9OnRHTEllWFM8NnhZbV5nUk1ASiZsWltbaiMxYixJRy47QmBrWkpYamM/Q1RBV3lnUmx0XiY7LmlSQkIiSHBeSjdoWkFmNlJpeUBpPGU4RyIjM15MI3w8K300ZG8lLkM8Ok0hMyVydjdmfFMrV09fS2VjNSE2PU5JIXZDMEdZQk45KVNYME9fUSo0KVleb2ZyOktGSlFeLjhJd198PmcuQ0la''@;'; put 'put ''TVEuMiMmYk0oT1sycz1tWi9YbjtNLFZvV2x5JTFQJS9bP21nVElDM11wIW14WFNyUlc1WDAsNitNO0RsViVAfWAxQkshKk1TfnY8UEduT0tfYVVQclRibj9WKiNAMXczZSNXQ0BPbXQjdWdJNkdgeVM2Q1M1SCx0Xjx4b3g2d0szSGZXfTolfT56ay9HRHJVamVfUUtZdFJHVUZFX2R0Vjk5dFF9''@;'; put 'put ''OTkkP2ZuY3heaEBKRDU/RFVoLn1KVjNpI0UreE5kIWlNZTI+fEZtRCl8dXNfUXA8TjUuQmhZSiRQMHAvTG4sNjh0SlBeL21AV0NEQFE3N0Z2Pz16d3F5djV3UioxZ3o3S0tbdVt+dCkrTnIrMHZVfVBdMVouWnYlS08iXUNEbXVeRnk1JGtWbnJQR3g7KUAxMyZGZkY0QjApMmo0RmZvd2VkJTo3''@;'; put 'put ''MTx3ZE9yfCosXiRwYj1QOFJGW1UwT3suL11mJilHT1AjSnVxRCQhLDZAeihFKk8vLnVaWjI8Y0JAMU4sYGg7NHxEeyVxMnRtMGk/d05yY0BuP0FsdlE0QnEofjYvUy5VPjpNXSZ+ZlRwbypjVWsmJCpQNnBoO0k3fVF3LmtVV0VwQzR+JGlPMyVYRmxHOGsrdyROKT1TaWlPQzA6dEN5O0tadUBS''@;'; put 'put ''X3BGcVVWP3M1UV02RFlQTzwsS1pBcFlMUXolRV9hUUBGVn1PTDdSLFR4YFNZKTsodllVbS49LGpMMjAlMExoQ3ZoW3VKVFF1ZWFgbiFTdTo/NDhsbSYyIXJ4dmZtL05yIVhieSUzdEooWEohZnd+cSF6Lk5lLH11QlNAfSlRVStTQn5oUi5KSXtTeCFzZEF2cnN0fmspS2E1dCQ6VXFALy5SdDMp''@;'; put 'put ''O1coN0cyeTtvYSZ9OSxuIlV6RHs/LDdWOGs+bHB2Wl05PW1Kei5ZSFBAdmt0fDZbOG1HRkJHejlvdUNvODNSXjZNIUgwJXZrd1FbMWNRXjs0cUpTWlNGKGF0I3hrdDtxZWFybXtrT15mNERIaWlzaHRtZzNjMlA9Ozg0OFojRWEhOGtZMFJCcldjOXd6Oll0W1dkZn5fR31ab2deRiJDZl0vbFJi''@;'; put 'put ''U1hJMn1rIXhrM3NhTWRleCgudWx8ISklKndFJCkwe1A6bFpiRUc/MSVZL2JYOiNiNSJYK2wrLklDIWF2P0J2Q1hEIjY+e0l3a30qXzE9X0NZelJjcj5yMXVwMSkjcklmakhUZFJAaE03dlMycEJje2w6KUpNT3pwZzhGVy9dSVFYdSZ7bTUlPG0vM01dR3EvR3dWfUU4ZzssYE9adkU0Vj5VYHRn''@;'; put 'put ''LGM4TDR0OlJgIUBbKDEyUUtkbmA2fWQ/bztqPyFiYEJIV0B0b1ROMUZjLjk7KitQWDwkPDBfVCl5P2lkPENbL0xuPTBMJH14cE1bR2Q9KEBOXUZgI1JufWswO2VZclUkUUBWMSEsaSImVU1VX2tDYUVkS2wvdV13ZiUvM3hMbm8lcmo4RVswLjZaUz8sWS59O1kiO2tsfFFVZVd6fEZvemwzN007''@;'; put 'put ''bitOYV9XZkVUOFFkWiVuJixqYiRHTVgwTE8sOjpjN3UobiRYc2dmQzI6Y0xVZCw0Lnk4IjV2TVhCaFBGcitDPnpfMmtzSVY1aFlYYFlwPEBzYzE1MGVNdFM+akk4KU9qfjBQSmtzaTVVcVFHWG54UFtnNCRrO2N3YWIhdCR4Xl9sZ0ZtfGRJV1h8YkhQZD4kMV9ddWYqVkBQYndqcjZ0RnEjRFg+''@;'; put 'put ''bElLLCMxQ2RBOVs0YyVtYEVhSFc+OyNCTnQ8RFhHZz5oODh5dDd+UTd6TmB8RXBNJG9JRGFiXVtgVjE5LGE5TyVVSkNVInpkPTFLPntTd3dNU0tGNTBWKUsjV3RPVTlPanNpZk04eTVFNHBVP3hbPHx7YDp3QDFIamdJezhvTDFCRUV0NjJYe15KSjBvY1o6Qm40MEpJREsrNiUzIX5BYV5nVT5x''@;'; put 'put ''e2ZEYXdyTzlob3khU0c5diZTUF0rPXx1bm1TPU1MPkJDbXdUMUlqQlIwfFIjcmZqT0xtUjxkciZhQkJiKWQsSEAyKUkzMXZYe05OdmxVK0BFMG8yYTx3TH5XfE9oWnh6aE1QaSJGOntCMkoqOGVaek5iVlQqe21Gd21XaURNWTZmOl94MFEhKXhvVyNgTll7UnkuNTJfMjkjMXpeSCR8U2R8amsm''@;'; put 'put ''byxjdWJ5Q3EpcTU9STVEKix6aGhOa3QrPkslJT1gRmAzKD17SD5DeWxqWGVwYmZsN2cjVXkhYjN+cjBbR0lkVFQ1WEIkPjpKLmFkdF08dTFxdkNwdStOfVlgXURzTDhIdCIhSkcwXnxBOnVqT3gzdXdPY2hhT19DO3AjVTxnV0JgIVpTS2RaJVNUdz9oS3tfQnFYSD0jPkI2JSowMGIxU2VhM1hD''@;'; put 'put ''QzokNisyN1NLT35EK0ddUGImRUFtc2lILnNRIXBFSy5iWkRmXyxsUioyUHk+OUcwTik5dUUjOCZ0UiJDQm1fa3JsdyptKXZ5WThYIXBoYGZrO3RBcD1vWV5SN11VRE44dyk1dXl0a2IoMlM/biNUKDAqOnxBOz5MalZAcjJ3V1RtQGQpayRWIWM3IyZMMSUiWj1aUVVVJXc1Ni5aWzZgMV9jPCZh''@;'; put 'put ''fmg0TT5DW2dsOE1hUVVAXWhAQEJyOl59WmhoTzh+VmJgc0hiLFY7dF9yVFc8W0hDWDZtV0l6PVV1emBsMVdATFpCUiFKcUhrdl1raTJCUDxSNTtSPUFLSVpqYE0mXUxNdmpCKmJJU0NReWlDRHwwTVdJaHhUdkZIOV9PejNaWGA8W2h6eiwmQV1BZCRjd2lHQVtqUC9RYD9eZmV3Qz04bGVgYDRj''@;'; put 'put ''aG56YHVhX2c8dE9YTnZAN085IygrSW1lXzIwSVZ+QGJpV158ME5YTktqMnRGdDEoYXV9S1ksTVZ6dTQ6aFY5I3txcjAsTlp9ZihAP0BGLH5WT01vL0hrbmFxX2hDT15EQn57cCguPGBHXXYjeC9EKS82ViwiZiJAOiZYKUo8JF5IJUciLD1aQHxuS0UsdXlFSnp1PjM8a0N3T2UkeF0rVUl7QDdh''@;'; put 'put ''c01uU1ZwT0FWY3dKODd7diRIWWBPRC8oKyxYI0wjb19uQTMuU2dpJXRPVHpDVzBlLzBpNEFdVjlnbEc8cz5TZjYzPTAqU1FuVUcrez40an58cEZ8OkBoYD05NDJZczR1L1gvLDloWUVIayElcmV7XVlkaiU6QXJ6U1NRVz5WP0poazJEMEZsOHxtUVZRdEJmXmAzQFFBPVR9K292PEFZIXxUajBj''@;'; put 'put ''Yk96eVNzbVcyP2l9Z0tGSVlARTkxRSlgaHdbYiFmOSpZWkxUNzQocTF8fTpwWH1yNkpyXzV3Knc2VGdCMDQ+fWJIPUk1Qkxidl4jKEUxV1YiXldFaUFiN0JTbDVGMisvdEljfGwvd1hHW1gzdltSLkAybi81WCtZK08jYTRuQH42b1pNWlZEc3trYDFBS1lfNFZELz8qby9EM0V9V3ZlfDlvTTRK''@;'; put 'put ''eiJuLEJuXWApU0h4WyxYM0ljRXhBKmEjWWhlbW1jQiNnSiY9WDNaZUA7OSRnLFksMiFAfD19bW4zcD9aPl4kKHE+cHF0RGNdOmVLNkx3aVtkWVRVSClUenBDbj96XUc3fUc1LC9WNEFeOXJfbkF4PmNlSzFHOVsuLilqMDIwbTpjWTEhYSpyQ1NtNjt2KTNVeHs7ekFOeSYvZnN2dixIMVRHcy9T''@;'; put 'put ''Qj0+fn15Um9AWzdBSXB0YXZ7UT1AJXRVMik+Ly9sLG1pQz9mTzZbViFUUStfSyIpcyR+QiNUanVZX1tHdyxTSj9jfGMlTkBbfi5ELkx2fm5UNjwoaTNiVztYVHVoKDtGb0UsISFuPz1waHZzblZZO2RmPS4iN3B4bXRWOzZqVmR9QG81I0VPO2pYYihubjlGS0RkMyZ1SVkoIWp2fDVUb3FWWlVb''@;'; put 'put ''UERbMis9L2lrZChHeEx9V2ddO2tGYFNtTVAwQGAqW2ApOUsxWjN1QFF1LlhbfmBUS31MdWdOV3E+KnV2WiwzNDs6Wis+d05aKHtkdHEjbXk6RExrYDxdTjh+UHFUW10xY09eOjs7cExyNygvNSVyLGlxUl9wTHJPfm1OPGJIclR3Nl4ofEQ3NXFpU3YlfDlYIUArOyt9VCwrQzhRSjMjfTE7UCZH''@;'; put 'put ''LHR7NT1FUj4qdVhla291YWF+LyY/NnUhN1shW0JQd2xpcmVtUi57Jk1GO2kwT0NJR1J4Iit1VyZ+YnlCYk9IUXVeYiFDWi5sYkMialZeLF1CaT47XXFhI3MjYCZzW0dkRkpWLGk7cE5CRzV9ZEg4Mzs4cWMpblQhQXVub0hJan5YaGlyNmxeTFRCLFo5c3Ivd1huekFTZDU+N1syN203Nng4WEJY''@;'; put 'put ''KVRKJjpfUiUoLkUqWmZDWmw2MzF7JmwvW1VXaSM/ZzlyQEx1UzcvVzhRWj5jNltvTihCUHhaaiR9WzNlcUJaRC41ek40eEspQmdjUWxbdGxVTl1JR3Y+M3J2PmVZWWApX0h9TG8qalB0RGR7ST90O1VJJHRrRHJ0JmdfOX1IVFJhRWFCVyhERFd7LnFCQjd7ITJFQz1BMH4+Ojo6O2o1NzpKRkJ7''@;'; put 'put ''dlMlZlYoQV9nfHdzUy9yZUB8WlAxU2IwN2IlMEpTR2lVLDJjIXViM3NOfUBlbjEqU1ZMZUxEcEZHd019VS5gVWxmZn5lZ18zPU9DZC44XU01WnYwMCx8Mj04KmdncH1OdmJZfiw0M0tXOkFlbVBqZE41TiYmcXlEKylwYjs5M2BMdktrNj88LFgkN2IsfSN5azxfJX1nImhNYiIkLz1sWDJvTWM6''@;'; put 'put ''RzFUcDVJQHg5blVmTVpbMS5+SSV0Tj5mMkczVyU6ZH1DSypwcnJyTylxUjEsKT5yM3suV3NOMntPTiwqVjJYUERnYEMrU3kwQG5yYHs+KSN4I1ZjWjJxPEIlNnR2Vk84RTNFR2ltPTswYi9OJE5nZTl1JUheLlIlMVtPP0A4dy51LDBubHN7c3kjb0h5O0JfQnJaYnduOXkre2J9b3JFSFBbPjN5''@;'; put 'put ''U2llN2IsKS4udWV3TmVwOV40LHs1OUdIQHd8PiR4YiRyUGdKQiopNnRdaT54ck9GdnhOPzU9Y1pneEhWbXpgMUVIYDxwWlddQEd9biFgViw5NFRLZ3h7ZWA6b191P3VmbjpyQjw1bH15VlhFIXozRHs2YyVfckZKO209bXpFWTNbZUQ6Sythei4se1IjUDJ3fXNAJCQ0byU1fjkhdjclTjxiNDtU''@;'; put 'put ''R3p9RTY6YCxER2E+djR8LiolXy9mOyp6cHZ2SGN2YXBhIUdWeE1eSEx7OF5ZRXVqJmlMOnd5fk5ebFpXZ2BAd2NISCl4dW5rIzxjbDNjMiFtcDVDXnkrSGNZIzdoPD9TRnMwQSZvQDhRbi4xXjBtOjVUTzQuK2VaQFtfUDVLTnVhUVk6eEp7ZX1eMVB+S2NvOXUlTUZpMUdXWUZ5Q2M4TWY+KF0s''@;'; put 'put ''VD5wblZlc0Y4MGcqWVFtLlFsS0BkWXdiK09tTF4xZEx0Tz9hcSFeb0BvKndlNX00VXpSckZ5TlU7d2N5ZVVFPFE0K28/TVldcnguQXhnVGo9O0x6IVg2UkImaih7VCw+UT1XRDB0UUMkUHJGMH15TEQxZ0EwPGdiQS8lYkAyWzEoKFFLI146OzZbOSQ+a0ZfdC5AaGgoRUpual1LTjcvKiNUY1pe''@;'; put 'put ''Um5oL3Qsc30lajdMO1FOSUhtX3gzJE1fQ0A+VSxddkhwLCt5d25GRnEsfEx3UDhwI3ozS0RPRVs7NHI5cGFhLk12Y0QreHxXNlI5WEooO2dEYHkzZmxHZT5LImxoLnJdeFpWflg8XyIwKGFTUn5LOVE1Om1NTDBlczVtXiZEcihJRVo+NDYrOSRbWCJHPUVgKVcrWEddUz9SYmt7a0NMdyR3X29y''@;'; put 'put ''ak4objB1VUVDN29be3FQblZNdGk7cF5qIVlpXSN8MVRxeTV8JGkya0R8dVdoNzZMK0I9aV8ocVo8PDQ6cF5hND9bVCNWdn5LOVJiOiNsa0VvTzBtP3daJUYzY1UlIXMjd3pvY319Qi9yWkBvIjJMWCJxQURQQHdNZlhRI3NKZ0NwfWZDTWR5Mz1DS1liQmdrU2h+a1NAaWwud1BxeTh2dCF0a3NK''@;'; put 'put ''VmByUlYrOHZxeU5NYzZRLyJuLGBLW3JnU3wqQjE5IlclYk0xQypxOiE3XlhwN00vdyQhSS9qPEs+Lk13UlQ+YmpNIk1Halsjcm5uP3UjKlYjWj1oR2hbTkw0cDpWLEglVTgmJn09JXtYNTM6RXQ9PVgxRndwVjpMTVRxdS9oKkdec1lLNXxSTG54V0l3NVdiaGd3ZTtiLkdyTzBiOz1YXi9Edmd6''@;'; put 'put ''W01JbW9+JmQzSTJyTkRjWitOZWtrbmNmNVZ8I1l+cjxhZV8pMzdvRzo/Uj5RNkc7RVMldlA3KmI3L2ZJKjdVeyNlSFJTdygxTys2Wk43JG0zfH0hOjsqV3YpNWJRJl9gVGRxIlkxblg1LkZhUlEzcT1LNWUzdVozZVBVc19PcjdrOXxRQEckT1pNeChZeTxlXzE9I1h6fiw8ZiFUImV9QzJKJjJf''@;'; put 'put ''KSkjfjQ5dmpWV0VvNEJ7Yi84e2tKRDdEfHo6Sn5HYDg2ImFPJVl0bmh5RWlLPUMsVFdre2FFNzBOJEtGUkIqWj1wUl8xWjlyLmY/dm9IP21fVCJsVnBvTTxaPlk3a2JbYUgySUBbQDxRZ3QpSEBLXTJ1W14yY2kjcX4hUyoremVOW10mTG4zc1IjViJ8RWkoe2pFa2EsOS42PTNYKjdtM0J0O2M2''@;'; put 'put ''a2NATyp8Kj5lfkYoTUtafDc7Ykx2UmRwaStHMU9QQjckW3BtbW1qY2BWflBPTWtEMEFucz91VUV2KmYxUmRMdTcoJk9kclFSKlJbZnczM2hveUU+fnJNTSo7WlNeR3A1ZmosVVEyXTo5N311WlEuPnhddS5QQys/cC8yamh+LjVzV2JKYyZoa2Z4JGZ1N1pLSkdCO3B3SkExdTJFRixRPEt2diZ4''@;'; put 'put ''YmYwP2JwflpVfEY0NnNZM1M+Pz8hQTRlRW9UZHVJfWMpZkw1On41dHVTZWpKeWRMZzNbWUxuSlZgSTFtM2YjQG8zTDxbP1RQU0ojZEhtM0EsIWUyOlZTNjdGelhWZ1dHZjthT1VfL1AiSzksbVROVkZbJDk/aHxXZGtFb3B0WihVNEw4eCx+ZjpZaW1SK3A+XXRCNTlVU29fRkk0SHhQM1ZdLyg1''@;'; put 'put ''S35JNnxGeGIiaiRUeCNYdX1MQCgqSiY0MF13dWRHdnZrcEJOckgoR2RnNVYpe3MiUDUxQkRHaHRsLzhjR3xlZ1AkPVo4NiRxVT0mdjdCKCxETjE3PyFhaWt8SU1XM2BfSDk4ZD1tNTZCWXJbd31VLmRWO2E4OT1nOlhuSE5iNzZ7TSt2T155SEtXUl4lcjpJOypteHdSK10/NUNbfmw+JGdhTSU8''@;'; put 'put ''R3EufkBgWVZOU2w+NU4+NWk0dyliOk80UGsmO1N9fX1KQzpxbFVtQGhzOz9JZTwqY0pKR1Zhb2FzSHQmYlA6ZVh4S3d2PENSSVhoTWdLMnhfPFZwN1BrVm45XyZLT1gsbE4xPF9YTV5hK30scDhNcGR6TSRWcjRPU1dEWU9VWUZFK1hTU2VbNUpERmsxYnpUTnB1VCMsfG8sZFQ1P3lMbzFgMTc5''@;'; put 'put ''SHZiWC8hdldrZTN2aENjVSRocXpKXiEkdjU+WyQhYHIrVClFQzBSVkhXIVowYVJ6S1coKHRpNnliTztnY25NaDlkMnpZTUVrK0JoYkZ+PG9DYUVRV2BabktrRl8yPD4rTT8oNnR3OFpRME1NP09QLG5xOXBVNSNzWFhkQnpHJjxWP2RHWFMwQytTTGBUV2BDVHtmY0hiImF2KyN+YCQ9K3t4SDxR''@;'; put 'put ''LzJaPH16QncxJVtRWj5WcTFrLmMvIVBOPExSdWNlUyhebkxpYj9WPWY0RjIzJVJgPnU6WUpaZUBaUVFAXXBHXl9INXhrfihudns3NFhfPGsyPT5Aa2k4K006aWouK2xVWV0zPHhaVzNCSk8uS0ZqOjh3IT0xIXBUa0Zmb3BrTSFCdkRuaFcpbCpJYSghNy9KUjJ4JD02Um5UUWJ4UiRpLilYJmtI''@;'; put 'put ''QHReIWt0LjE/UyNyJXFJNHJabGMiaEQxL2lMeHtrRyohUSJkTT5ubFtoXSRuOltTfW9QNT4sIlpXcjkjM1VxSnVVOTdkVSZNNEhDLjhqTjxFKzI3RTNmZT1gbChiUEJVLHsyOWFJS3coOEdaL2RnK1FBJispdSUjZD4yKmZNI3kiNy88byVqKzVmL3pkanwhMSxUaStDdFg0VytCZXN1MFJEeEVF''@;'; put 'put ''PklvU1tEZDxKWSgmbWRMPzdVdVVOJiQ8ZWpYOVlDOnx5RyhmYDtJXiw/aCVaKnM1ZC9AaW48UHQpamFSdD5HUHFRRm5VIWtKdTNHU111KnhsXl9nWVJwJHtCYnQoMkEpIzJnZ1kobUlEYVohTHFbJHYhIT0zdzJeMSNrYW43RXVXJE8+Y0k5WCM0fWUiOW4qS0p9MVRGPEs3bWF7cXB5LzNdVChI''@;'; put 'put ''YH4xRHF7PmBCLiUuPEBUO34zL2xpJEdMKG0vPHBPbFZlNEVGZDApQH40Oko2IUVoZDVbfDslK1o8RDJAIyMwN0F1YW9HSG17RDM9QVVVRUR+dFRGLmtSODM8RjdvYSowYjtnOz5xODRTMGtmLDBQKiQpeS8+aV5OI148JD5VK3UhSDNfekwqUzVsciRoPClrWU45ImRXcm1uTFZOKntvTVYjbVd0''@;'; put 'put ''MUBIclo5X1ZHMGcxWzJieVlLSWJsI1RwdkNHOT9tN1VlUSQ2SToselhKfkUjW2Q8dEUka1EqeyVRWml3Mi4/ZHd1Oi9MWEIwYHhnJFEpL0pVbURZV1d4WWNsazRxXWR5M2kxJjFbI0RKSml8VkdkO3wmak47dXdLfWU3YG1FO1U8PyMjXzwkOShsIyolXkl0XnlsJC53eTxQal48ZG5efko7WGE4''@;'; put 'put ''Ni8oSypTdEdYVF9FUHpBT2ZVOytBanEqNE0pdHwzTU1MOnw5fjk+KGMzdjEhdkNfO3R9NUpmODVGUDg/JmpuXmJKVTcjayV8dEUrdnI0SGkzc1ZCWCMxeCI5TDN5UT93Nz9IfFoocFpMMm02RjE5LF9ZYz9uY1hfUHYoVEpOdnFTWmBORyNsInxTTSRqcDdXa3NfZlJ7SFU8QiIzOixyVTM6Yioo''@;'; put 'put ''cnlMRi59ZlheTEBxNXNYOnA+VD1zZ1pHYldmanZkb3Z2WFgxZ1ZpRFF+WSp5Xmp5NTc6bUxJb35VJEN5R3Z0MkAzWkNJcFdoWUU6MzRAdF14YChwMjtXNH5UNFUpWC8qMytiPW44WVNHJX0qeSV0NWkvVDFYYV87Zy8zUFQmZmdKNXdEOWhqMUV9MU1wQiUvbXkyWHA/Q2cvI1Z4bXBkSGIiNFI1''@;'; put 'put ''amQsMDV3Vm9tI19fdz8pQVs4QVtQTWEjPX1JLk87fURwL3IpYCMsIn5aUngjMCUrbV1leUhDdCEvMz9qfGVhJTdzKUgxWERVcCtWX1ZXPndQRVRRSiQ3eVdOUUF1d1lTKEc9TTVmUU82XmdqSTlzU1t5OG14aUlhX0U9VVhBKktuUTk9WChjKV4zQXhHQERqdU9xPnxbfWdzKkAiUW1wNWEoPklx''@;'; put 'put ''Q3AobTYvfm1sYVdLPC5Yaj1mJiIjUmxMYXV3ZHZTRH0+b3RgeVZSZkM4SWtyQ1V5WlkkcGh4ezM/LmlHTWF6RX1fcHlaODpuS3IobkZvYltrSCR+O2whfG9oWVJ1dzR3WiwyTng+NX4wcH0reWdvMzA0aDZYVk5gdndiN2Yxbl9tZ1pxN1B3MmhOa0BVZ2pHJVY/JUxtRHpRW1FSSFQ1cFNyUjMq''@;'; put 'put ''ey52a3U8Jiw8OzZdNT57Z31UK10/TVk5fkNZYk9FbFdANyNXd1dRSjMmaSU5WkkxITV+UkV5dEM0ek41TnY7bHJBNGFKb2U7RUhCSUM8ajMhfmJxaFlyOD98aWFSL3AyZXBHQUxmbEkja2IyUUddfVV5RHRYNnI1TDpPckEiTFA+KDpeSWREKVtxNmhvdSE3JGhefEs6cWFobTVxc1FlLyYoZyU+''@;'; put 'put ''NkgxXzprRTk7a31VNV87Q3l0fF0wM0YjMWxoWUtXTHd3QXhuWn5sU0s0OCN6ZmgsWnROK3RRSDtWKGE8SiM6T0gzeEpUYExuRlUyS1ZBLkFIS3I6NnFZdiZDVno8W1FEKUR3dEd8ajRTfD1oYFMjPVIiJWtTPU5hMWNQaXR1OjhUaDt1Y2csJSExOT4haS5TPEZdR3VtVz9DO348PVNPWV1DaXNp''@;'; put 'put ''JHtdRTVXLnkqekRYYkkvOiMhcCRVPUptL3N9Rms2JVlRcn1GdGQmNyt5ZmkyZChpZnl5ZV5baV1sISM8X3w/OmFUfmJIenxANk5EM1heWVQ0bn56OGsrMXQzI1JSfHo3eGh5TDltUE4qTCM1WVM0bFZXVVIiQzZTMCtHcG9TSENUdmY1Yy87a2xaa2plaSphP3hkKTlPb3UrNnVnXlgwU3xyP0o+''@;'; put 'put ''RyUmTkMwaEZTQGw4fWp3YHF8PzhyMlhbUWZnW2xgejVhMiIySD9zYjxVdmwjMWBzM3I8PkpaTTNRIiYrIj9VQWpsQGc7cC9JPU80O2tSMzp4TU9LLkwsdClxdVJPN30jbCo2ZW8xcFY0VFcyMUR3c1pBRHIlbW4pQGw4UHwrTEVFTlEvUGRwPiw5SDlCT2ddJlV2VTAwQks8T24rdXNmKXN7anRv''@;'; put 'put ''bz5VciN7dnhXNl5YZE46RXhnbHs/I3NKI20vRE5ESE9gR2EkMilafSVkJnluKTxhO01IVXxSfkQlVz09TzNpVm4lXlhrUXQ0SD16K2J3NTt8YEhNNFZPfSIwSVNBWV9fSndUc3U1aS81ZCVHfXt+aiIzZE8yQz53VW5yfCVrREBbcj9KMTojOUtdUUkxRnY7PnQ6WDI4N0ZSX3J9PW9nRCROKkhm''@;'; put 'put ''MlouM2JjPDRMS0RXSDBAJH5eTWliVVFMM1M0KmJtTUVPSGZmODcjNzwkTS8uLC5pdDBwSmA/PW1eaz9IdFNVU1k2KiZmUHwlX1hoOTtKXkRDQE1vUnlnZEZ4a2NGV3FvUlR8XkNudWR+YUcpMjYzSn1NbHpnWkVIUCIvYmdbRERwfFkpe054bXovLD1DQEIrTFpxfTpWSyZ2Vj5SZWtMVnUyd0VE''@;'; put 'put ''OVZYcnkmYDFxSD4jQl5dPSNvTERiMnRuK0I8KGFWQEhUJG1WYzRKKnFhV0hlNlJjS2MzamlMTClgVlUyZmpePCQ9e1AwM2xNVzMvIS5Bc0w6S3lEaE8zLl5aaDI5Q1A3elBSR319T1pxdXhwTlBhUCo2ZXRpVyFoMkFkU3B3RTpzfktdTj1QL29JLlE1WXQ4fkF9PzlXRU9xQGNISSlHTmNrNTIl''@;'; put 'put ''UyhIZT51aCg5Mn1MTl9uKlo7KGhudmFFM0Yqd08hXms1T1BKdi90fEdKekttSXo0MU1YaiR4b3dbQHBlJS9jdGlRLG9dLEJgTz1SSGM1I0l4eUVnd3JZQUxsc3VxI3Eqail0UFBWSjRoZ0poUEkwcjBMT31xIjBIJW0jIXJSfU9EWnlWdlBVdXY3PmoxbT13S1BRJWY9VzNbNmhkKkVmWyhHYWpW''@;'; put 'put ''RElaWGdJYT9JPHVVWjByZnZDI0d7KFcvZE9MWGRmIzAwRjRpJGNeZDU5diUvV2VZWHBxRGFdUkoqbWZOW3tXdSJmZVhXPyJaSWprfWtQNWVaZHEjRz9ZYTJmYnhPZylhV3hKcTZNcFtaP1srRTJySTBuVGx9YjoqLjpZWDh2M2hib1BYMVpdTm8pdC41cDRSd192KWAkaDx8R0o5WlZwUUtjTVgp''@;'; put 'put ''VHMuZzwmJVVeYGc9d0MzPnh5KmJVPltyY0NWaUBhKit4IUg6MXJtd0clOX0xJlEpKzglTkgpV3AkREhRcGRMYCo2PzE5cCJuSnBQbXQifFRUJVElKFE6dS5TLnVBW0NSM35MU0t9NVprQSRlM2E7YFgxZXtAOSUxPjNEakQyS0hYOT0idzhEWTJtdDo1Y0gsaEBOZTQmVnRlMylhdWR7VXxHIyJq''@;'; put 'put ''bUJ+b3RHfC51LyxhTGxnXXJyalQjJEIhaGRVTFpfS0dZdDJFU1hvJnZ7SC8lK1pydU5eWkQmVjkzOz5qQWlfSX1bWiJAISMlYCF7Pj5NOH5QLDtORDZtdG04OU1UU3oxbzMoOUlkZ0x7XzxUaDJgUjcwdGJyQ1N9cDB3cE9aYk1XelIuWkxtOS5oYWk5Mn5xJFs2cTpvUFdTInkqIUByWkJ0cGpY''@;'; put 'put ''ajc7JFlMVG9OKW1LZSl8bXs6Wi9fW0doL0MuV20sU1Zua1AsRS51KkMpYkFIKTouPDB5WDRNUjZYcFlOYz1VKzVhJloudnAjLjImd05WWz09Pz5DYS5BUFQkZjJwK31LZmw5OnA/KVNWfD1QVEh8KWolNVU3Mj9EWGZ+KFsiNGRqZl1hP10uRjN3WnErZ0JuOGFhakg4d0s7SVtvLltyRisiUEk7''@;'; put 'put ''ZlNfMmohRjtaRWZSaU5yR0E3S3UwK05iWkxrNilNOG0mMipqWD4hSz1IcSNlL05kbkhmS34rWGJEITckLCF1K2c8JVtmYUkqdX1rSUZtJSNyQWdCLkk1WEBvaDhTbSRqIWN8NWR7YTR8Uj9uP1lnRVQuOngrYmo5eSpWOGczOD4/LjZsQmd+MV1mUzk3aEEkWVE1VElkKWIvTWd0fFcpNy5EWV8m''@;'; put 'put ''ODYrcypaSDcoYXlkWUNFbjdFOXlIQi9HcUpVZm9yPlBZTnBubCkhRyYuVy5zbHBiS1YvR2gueTlsMyk+Mm1JY1EpKkkwUlgxe31VQW04IzVxelpIaH4+e2JEd0YwUE0zLHVGQTFYJE91NkZbMX44eVRWbitKbXUudGlwXk57UnV6NDg2WDosO14hayxzaHZoYCNyWjR5ZEFtVkFKdWFIen43bCt4''@;'; put 'put ''QFFPdD13en4hO3VwSjxZXnFqdFQjIlpwZkwjIW5sUD1JV3RBR0Eqd3x3ZjpwbFNvcX55PlVQRiYoWS9UZz52NSZSJVJkM21eVzIlaVlVKFFKMFdQdW1DYzt2XmpDTX4vazgjTSJZKSk7ZH1tJlkmPyRISUlwPkZ2TnQwL30vL1dRU0IlTEpjbGR7QEFneHBfeXRCPWVXMEYueXJ5NDRjcEx4X0k1''@;'; put 'put ''PjdsOCpzc3EyWjB5N140Kyk8ZEZlWi9fPUdiaWhNPERoX2pBbndZM3Fpb10oYSVvY0lKOn1UNiV0OXhaWU99fE1uKFEqd3lfbWc2a2tQZFBpTi5eTyhqN2ZQMkJQQ01Jb0BLUzBAU3c+ak1Vc3xZPjdbVUk7PXJyLk9mWzIrWF93M1FOP2FEL0VmZzZHMjJ5Iyo5SWhHOFEmX1g7Ymd2K0ZNNTgz''@;'; put 'put ''VEltRF9Uai85JE1UKHhXQGJhUG4kS0BvbF8hQWM1eypyWGhLZGVjWjZ0YlFDKldNK1tocXV0QDAvNH1OMG93aj5NIzpqekNHOjBnM3p4PHo6ME5+WHFtMDRUITBVZjU1cixVPms6ciJudzsoZjI6eVh2emQ6Y2QuXUBuaGJjVjMhIiUzYlZDRER7XSpYZGtgbFdWTjBtWUNYb2tBPUFISk4+RHJO''@;'; put 'put ''QEA+TmFjKnFPbCVsZXh4UXhbTCUjdVZlTVdqemFhWU40dTY0KFVudGdWd3x2RSsoZzRCZ0paeGs0TEpdTVZbNiwoeWk5VnldPEQ9fktacDxxQmk1JDtEQXFDWSNIVD8wYz1CTFRYNVJySTlWWFdFeHJqdmVhSHJNRDIwZzxsayhLMjdxLyMzWFl4PiJaSExaQ3QvOyF6QSJ7P1dicXZ4TzpQKERN''@;'; put 'put ''YWFSQmYmfjQ6TFRVYTcvOCEkR0hoP1hQO1J7P1AhQVRfJi5MPnpfcCpZTml5KzRWJT9gUTlhPnU4b0k+OCQibH5YMk8hbXgrSH40I0JIZjZTRVY3XTh4ZzNNJVM6eVNCKV1eLihuQnF1ZWVNSz1MPz43X2cmJTs2JEBSPWJGKTY6WnNwaUtyKzJOR3pOUGZzM342Zm9QckIxWFRkS08qYVg1MXdQ''@;'; put 'put ''UEQpb3xZb0NaZit9PzxzSmZOeXdzTnJxeTVhMWQpOmJ+b15scF1FS1I1Om9CR2RFeihvYHNwUnZUKWB8PGBPVVQyNTguazhgOmtCal1QYXFrWmRQdmFsKC9UUk4rUlQ5MzJ2eXl8YnZ5KFVxWFIjVFRGTkYidG1+RXRpaCQvNFMqUTJKZFY3fi9geWYqaTZhP3JJYURCTTIrMz5+eUkhUEs8R2hY''@;'; put 'put ''Qis9SVAzRVMpW1teK3lTMCIwQklgOzcpUV0lIjJVInw0M0UqWjp0VTtnV2Z3VlhZZ1VKZHtdXUJvX0xVQGZsdmIlZUp4PVRFVTR0TVc5cmIkLnVUJnxjJGFZJFpHbTlnc1U7Wm5dTkcsJHNVJjY7S3VxOzdZZngudno4STZfSjNMe2ErKSFVXzw8ZVhEYUo2fEgxWE9uKlhSPi9oK0hIXkEwTFIi''@;'; put 'put ''JXs+Z2phSXYkPnRaZDJNRSFPcEtNe0J4OFc5OEZgVylZNy81ZUl9LiYqVW9OdER3UXV2XkNDXVcqPC4qc2dkI2FSKWNsNn04VVJqXjdUVjN7U3dNTyNlMD1jOHlATVh6RDxoX29pZWghSz4uLzc+YWtPQGFnMExPZ0BvaXVKNGx9Sy44dGVpKGJ4ejRjJX1GNTtZVCh0REM6Zz44ZlohWGFhcjpP''@;'; put 'put ''cUckT3pxb3B5W3dNMT8qPT9beVpSQnc1XyErPSZ2bXd8QGEkJkA3W2h8Z1JRTS9KZ0R9RjRCSEEvLCx4L1JLbSVUfj8xdGtJXWtrLDMuI306LCtiUFRzYHhqZD50X1gjfl99ZlokJTxXJlcrNV47VDFUeSs9XmAqJDwqISFQVlZ8amU0dWhtMHwvTnxIaVFEeGRJfWdSTWtYJmxLZ3lMcCUod1JW''@;'; put 'put ''QnFmQHhGTzVFfHcyMUwuWSFPVEEhL2VFcyZRRjJCW2ZvOG53Wy5YYTVyTmVjU0VFUTtPWXVRbERQP1IkMDFrKVciXl9LOXVybmhiSzImKipRUkkkK3smaGp1bmRYIm5dTGFvN289K3hJTXhvRWpmW1kjS0FAb0p9ajNSeHlYZjwydEJObzEwOEs+YllUMGhQKjdeP08sRXtjO1NOUklPJlRlRWpm''@;'; put 'put ''RSI+Sk1SViwmXkpmbHhJYmd8P0NeaWBXRG1kd2FrLDxlRyJVazxkRzw1SjAmSW1lIU1naj8/K3dpPT9XV1gzMCJXcHpZb25Lc0VPazgvbkJxOiRXV2pXPTF9VkRkIXF6OE46PyY4bSxLKS4jVldGLzxVP2QiaUUxfjN4RnU6K1ZfcyZwYjJde0MyeF96fmtJe3hsVC96MHk3U2AvUXFCfTs2czxn''@;'; put 'put ''QTtuIT5FUllFUTw1U1BtUihCbGpyPEJDaz55JDM6YmJudnI3e2FaIlI6ZzZOJTkoV2VvOWt1MT1pa1EyPkpOdl90fStOXyY3UHRFYWgrcGxFaXliZWF6QzRfZyxGLix4fGJaeHpxOm5XM2IhS0xmd0ZhbHIyRnFKRCUud3VLKUZhMV5PP0lNfCl1PD5OaVs6UDoubnEqJGVqbW8wIyx9JHR1N19Q''@;'; put 'put ''ISM7L3xHOWErcXpgVl8mLHFQO0piXjA3dnEzUihbeSJgQilRKWg/Z3Jkc342aClmdVdeLl5PbXdsdE16Pm1dYXJBMkddPD8sLmJnbFFOdEImSFBwc29tVGMhYn13OURIWV0rdjBRVTMvWTJIdy9NOX5uRmglb1sqPnNPX3B3cmE/P1U3M3VkUy4pVHk8R2Y7MTowPCVQOUY0aCxAKEQkWT5HMilo''@;'; put 'put ''WkppaC5+XmQrUmJbKi5mNCU4fUUzRnliSiRCfWF2WEE/OWQ8T254T2B7fH43cU5BeS96QjssS1o2UDBvWlZFT0JEbyloa19ZVXskUl4wZyVxTG5NJFZ4M2FJWC5HcSUsRlB6fVlrbG88bjBeZkw1bEU2aGxFWEBAK0kwN3VfYTw7MS9qKVh0fn5JbFROPlAuQldqYjFdOFhNeFZdMERlMCVxOlZj''@;'; put 'put ''dkZQSGQ2WCRxNHtPeiNQQFs5dnA3Kzs7IzI+ZkQ1bnIwRWpmMmQ8WCl2NWRNTVl5cG5tUi9QZGNMJn0wb2YkRWN1XmMqb0pAcVh6MHJKVilpMyFPY0Nvd3AjV2dSLiRTNmh9VmY7IVVkTE9fVEFwQlE7WlNuXWApO3N0Nz0jUmc4cSJ9Il8yfXg8UkdMVmI1MEghSkkpQ3JDK3RGQVY5YlReJFkm''@;'; put 'put ''TjJ9fW1Qb1d5VlBiIW4lZUYjcy9gP1EuMVpmWUswdV5rfVdfRSV1VX0/LkBUQnorOisvRUwibSRrelApZFJlfTlUREsyMUlEcERVYyZEfCIvQk5NOUVUQnlwNX1dYGAlNT0ieX18RGxUPH0rfi5XP0NfZmR1OypuMTBYIns4N3hMN2BSZmUyaGNfSnkmYmdWKlY+dUNDYig5bDQ1QX1hXmtdVCtX''@;'; put 'put ''aTUoKi8yeTgjIStfQDB3QnRaMmdaR0B5L0UiU1E1UGpSVHU+big5JWs5YkdJR3RbezUybGB5M11AJF5sanY2SWsrKW9AWGByaW03TmRqMGQzM3R0dlRYQllKXVZWdmYob3huOjAuJFQpcURSfGlReW1HIzZhcGRZL3g9U15YLl9lInFyWms0XzZ+JXQpUD9Xa19TNk09e1lkUTpkR0lYJUlDUkwz''@;'; put 'put ''dmpPZkRiYlklajNvWTpwdGtIcz8+aC8/MHJTOnRpTjRCYG1LfDdmRlVLST5NTUUkYkJJYyR8KEZfY14vMVgkTjsxUFg/Z0M+byF0dlVZK3xRYip7cEJeUXxpSHJ5SlkkQUU5Y1ljNiYzWXVaRDhgWFZhRztZcyhLMHR8UlNiYCpQImomb3s/N2V5ejA9UHFdeDViLDIuSmV7aThzVVoqWXZydGlz''@;'; put 'put ''eH1aZ3l8UkVqQClQL2ojSX5tQz9YU0ovIWszdTA0RVE6dkJDLDwiRFd9NHkvN3FeYVEieUJ1cFRxaG0yfVJwVElLLm19RVkrcXkuZlUyR0JAKlFHfHFjMjQjMD1CVTJVKFJ2OTtZd1VVdz1VcGtoWzZOMTQ+cEl2IWguRU4uWyhKR30jIlFLQm5VJXNNamw+YDB6XWVWeHpBYjUqK3RPNGdAMzZ2''@;'; put 'put ''W25fLEhJKjc5ZlsjelBCIzJPdj92WS4rMCJHMGduRGchXiErentPJUtaU29FI2ZdX1FCImNQcSxKdz1ZRGsyNGFveCoxL3FIXUA4QE5HR3gzUTxqK1RuMkxYWmtJNGNZclRZS0V3SSpfVDMpRUN4NDtpe3hvazVURll4QHBCOUVgbllJNDVvK2NIJSpHRFZ2WHMjZGhqQzkvRnV6SUtZcGJ+VyxM''@;'; put 'put ''c19AbWFIbEdqenFRa3FHel86RTB0Y2olU01XfHUhJiYzWGtSVyldNFdrLEo+NiJ6RmQpOmBoYVM/W2ZjZlBdMkxqZDZ0SitEcT07ek9wfHtIKnRDLmIwRFU6cygmUltOaHh2MmZnUiVUMXk1XmU7b1k4X3t9YCt1TnlafWVZe2lAZzdYfWklOXQ9NkB8W09LNj50JFlCcyVsOV8zcyVsZEB4LF1n''@;'; put 'put ''LDo8VFdqXm1XR1grTG15e0FHVThgWHwxUVQ+SEhPMmc8bj1tMHRsaFpudT9wTktJa0hFLzwpc0MpLj9GYEsve1dqdmw1dz05dUZPU3guVGlaXm5WRzpHJiRJRTVAQl9aNnQjUC94JkQpUlpnRGk9UW8xdS43dX03UGopOSsjdnRsajUhMHo2N0hNTjUpdjQpOix5RmdYMWpSbENoTGBVdjBoSTBt''@;'; put 'put ''TTxrWllLOW4za1o0IiVBWnEqYDAqNSxDMm19fSp+U28uPCR8Z3RVWVZ9WXx8ZVo0Ozcua25JRUguIzY2e3F6eGsldEpyI21WS1osKmolQndLa2tVWXw0cFF8NWZjR3BrNnZlMlpKK1FRbmJHVEhpZGMoIlBCN1JKJWJvVTFhdEtFNCt4PXZ2VXpJPzdBIkRCOyI5ZSkjSGRra2NSKmJERUEuXmQz''@;'; put 'put ''RTB5RWg3ayo7V0JuUl48QFQzNlU1Zj9vUTZJcDAkdF4zLDRbXWdPMDI0YCo9QV1vR2FqVClMJStPQUJsKCUmOG1+XlJXZVc3cCN2ZFRWXXxhYj9QeFhzPmVvMTNlIm4xcCVsaHpkakxefWJPI25VSiUuR3o1bDo3cCkmN1FGdHtEcF9zKi4mN3NgX0dOc2hgWWt0M353fmttVCpKSmtOdW98LkBR''@;'; put 'put ''QXIwQDlna2Ukaz09T0haI01NPncoUDFQTCRmZnhHKkR1LGw/VEs9fDl5LzhzMT57aHF2amJNW1pdNnwvMHtPdGpbMStjQHNga1p3ITs/NjhRWCMmY2RwNSl+Sz9lUVNQSGllKEd6aCVAN28ldF9AO0JvNnEyS2l5IlRaTC9uWUkiJWEvWUAwVj0qX3dAT3tLTGVkcCYhIWZ5cmg2WW1HQ0JNIVFX''@;'; put 'put ''JWhab2BIN0J8Kn1SST1qPyZlUTlkeDRGNW9ndn5UR2dwP1tHMiZfdFc5Jig5WWgyXzt7VXx0P0hLbzdBZylYL3JPeWNbYllMYXJ4dD8qfnN1JTx4P2BMWEBmMn4/WzIwQlV2Ol5rWCRoRilMPj8pemYqQkF1LkwvKG8vIW5gekViKFUiOjRlYnFQXlNsZiQiKWkubDwxcVtOPGhaMHxUTVNsQzNi''@;'; put 'put ''RXBUT0R7V01eWjB5NFhILm5Ia0ghU0VtQ1l0UVdvN3tgT1g5Kk8/Kjdfa0M7aVdxIl5jfER7dFpXKCU8Ij1xOkkmTEBgdlEpSSRlKj0+ZzpKRiVmIzM1VH5oLDM5PCZHU3kpczRZVUVxKTMhZWUmUGpuSzZRM1BkV2dLPENqZTRvUUE/LENmT3B0TS9XWmZPIkgoW2NCWFJDXk06JVM9Jlh2Xj9m''@;'; put 'put ''PGpOKmRuRihjdko0OjM/UDtpd2tTIS9kOiVIOHIzd2x7TGtlYnhIPWZjQmw8c1JbT0pWMWYsWD16MmBtUns2dWd7PHxfNHcsdCptK2ZMLHgybyNUfTg8XUohWT5DISQ1Zk5HUTNXcW97IXQmczAoOEppTWdgcFNhQUJ3Yzw2TXV6NEp7WG4uOFkzWEBnTUhXWXEiYlZIYHlpNGMxKSFPdWhFd3ZX''@;'; put 'put ''NTJLY3V1UGEjVC4xMW9RJl0lY3VxeXUpbjdjdWpzXjojP01mVH1fMF17WnspKUYoc0g+U2YpVUB5PU1NU04+V0dzSVg7Q01Tc3pxSSZ4LixaT0xOeVVdU1dFNyN6RTxhdDxEZXdyLCw8cnZacyxufXl9SDRVVyNtVVJTdXJuTHlxbVFmZSkoOHFQSzlSLkQiTHYqa3ZiQmolK30uZV0mQF1rZVc/''@;'; put 'put ''PXh2bG5rQTNFflB+Pm9TNWx2V0h8VTBwPCZRTSFlMkYmQ0JSZCJOK1NXdzAmK2dBZEQuSyJ+T1JyRG9Vem9OfFo2OCZOVjY9YCFxJStfJXBOe2MmTzBHXTJSOWNkZkxBQj80MDY3RCZOLG1HZiNicitHanB9bmZLekE4bEp4TTdRdS5Xaix7bUouMEp+dnFQZ3tVWyspJCY/JD5sfmhwPjxwaGU8''@;'; put 'put ''e2difSosfjdgV3hJYHFCaU1rQlkqSXRRI1VdajpJQlNUbn1sSUJqMzBfOiouWnhpZyg8clIyTVBfd3pLOjkrWj5XaTZKTC5tSXVCS3l0IUBDWTNlVEtaTS5yfHFDLyh5KWdFISttclJ8QUQ6NXhEUypnbUh8NFg8YjFrPFZ6ampBOkhkYVQmTCVEeSEyKDoweFBkTj48ZDxlYWBxR1IkSU84Qjk+''@;'; put 'put ''cHJFZz9tLzNJaldIdGU8SXdsQ309Y2F4Qih3fltyM2o6NnlCPkwqdHxeaSU1bFkzP3I+ajAiNHJdbUcifUJFNXpxT20zeG16TXtRaio7ZUd2bVNIQiIkcXI2fVhvQnxZO1k5eSJdUTVGRWw1PzF1d149IUFkU15aN1BDYFhsUG5nfDY3T31WYnxjLigwNSplKzxFTk9zQDdwKSg8UTM7Pip1SX46''@;'; put 'put ''RD1vRFltWGdZbTxEMVUwYiFhJC4/WHFvfUAmc0ZRXXJCb1p5I3M+e1RrNHlyLjA/bUBMdzg7MlJqKXhkQWojXzYuI2M2Ql83JDhENSJ9YGVmZ0svZCV1P21jbkZydlV3VEUxcGx+WEYhX3E2OXI0dT4xakVwKVJVOi5YUm47NFI/OUAzcjcyXnQwQmtfPiltNlIsSCMsOUQ7RjMvYCZlViY+dkQs''@;'; put 'put ''aW1qWlNUMillXTI7V0dQQk9MdXJSIzIiLiNbfFU2N2A2fVdKVSpKdn1ZKipraExZcUZCITd6LEpPMlhlRUliJU4sfGV0aUQ8dyJMMCFbdXIiMDA1dmVybEcoQiFGTTF2XjF5MW80fCxoMlg8YCM3cnJvcnVgPTlNd0JHK2IxbTBSJCg1Knh0XzlQP1hlUCR0OV5rYGRFO0VyXj5JaEg7Z1BPblJE''@;'; put 'put ''VTdyV2JkIWZnLEMpRkU0WT5pMmhfWk9CMll7TTdVLiVAKncyNSs7ViMuPmw2RTRTNWRvZGosTl8zfXdzJChme0k5PUUpXnZJUEIqRVt6NmssQGF7RWV0aiY2aWhTYFhyR1UuOUVbZjRwVEBgXkZscUw4KGZIMDxkIkN5Z2k9VUZtYEM0Ukk4NztzPnduaHVBMnZxVypEZ0lJendBd2c/eiV+dHMp''@;'; put 'put ''N0w3MjZTSFFFKHxPSXxGb0QrO15QX2pNKHNoJG5WQCgoLFhLUjcxTEJXdUBHam1wbkV9bjlmfD5pfXw2N0xuYjRENiNjO25PR1U7OlR5XzpqQ2I8NjYqKzV9YklgeDFVaypfSSZMcnl2N15HRXMpOlQ6bDEzajUpKXRUMylRM21nIVc2L2VTUXc1LH1KPCo5ciMjP29IbytYcitASltLZmwyOT9F''@;'; put 'put ''WFlfMERdMSxyfmg5c29OOHRGeTVVb11oRzpTem4weHZ4VltzKk4kIWYxQ1RgMmMqUSguNFJ7dUd3akQ1cXUjODx1ak9aQHpzJFgsVSkwWzFBLlpmfGJsKnBDWV0ubC48Zmc9fExSJnRROShgY1FkJV9OJX04OURYWk13QDMmfihTI3EseWxPc3RoNmc1SzY5QmN5VGQ5KjR9L0BSXzlnIUs4cDh5''@;'; put 'put ''I2dwM0VkbjdqaSsqfnVoXyQ4YHFPWjg/ajZ3Zy5QIW83ckJoVF4se3hSfiVKbil3QUsvK0pYeytleWVvK0FOYm5UT1hWPVVQV3JDaDV3NDskXSxlcHFNakIiUk9IbUcqQjxNPF4uXW47e2s4cH5mNFgzNUQiW25EX0whRzZDS1txdmUyQWs2Mks0YkAuPl1xcFtuKHQkX1UrcTU0bGVXXn5VRVpp''@;'; put 'put ''P3dmPVZZMCRzX3tzODBLZEg5LHUhNTw4I118PV0rNUlGJjomWTh7UXxCbEMrbTdtOkMvIl9EWFVJSldLZTM9X05GNUY5Ylg2OmZfbllaTl86Jihmd2dkVzJPci8ldDo+flFKL0pfJFRBKVdhLDRqZF40Jj82eW1NZlpKZyNsZGtrajp8Yz1uVVd9QUB6SV84e0lwTHoxVENlNT8hTGN2Mnt9RXdd''@;'; put 'put ''MnJkej9+ekAhUC5paXY8SntsQiRgQDV6ZG5zO0R9eyN7XUMza1lHZkMxcmpTOWoxJVdKLjFjRSJYOTdveEprU1BMT2BAej8lakByI2VGJGhVUT0iLkxUK3RZZXI/SkgpQzJBMz1wVyF3TDZ4NnR2fnEwTDdfeSF0flVbYzc+QklmTT5wSVtRTCFNfVYraTYqTXBiKy97aVtAO3wufFA+KmdMTlBp''@;'; put 'put ''RSJLZ0ElKkd0NUJ9cjFFMG1xMWxZMkMxPG11ZzVlKihXRWAwdjhSbXopZk5jQ2BoTUJAXiVjcCUoMD02b1JWYFJPb0lNdVsoLzJxMndVXlAyfDZ4Yyl2SD9oOnowLGFZM2p9XyxCcmJwSk8iYS9XeH41ekhUfWRNaVt7eW9xQHhwZ106YXxlVncrRUp+MVZYS0siYTU+dHM1Y1VZVHNRM3YvJTIq''@;'; put 'put ''ZCl7T3YsSCxJZm52LG97WG8kT1VFdV9eejxNSVZAOCJOWFdDcz0vMFUxYkw0Oz8jbyRuaTtBOXl5PDZmeFE8Ok5qSWRoPTxQa0osTyRYU2tYSlsiViZ7YSM7UzlMSVRqMjlgfCk1PkdQfj1gR2NBaE1MOjtwOz55cjs3JFUoNSkzO0lJWjdDQmk2Z3J6UmE+PSM7QXlFVkI1T1Y+S0x1emlCcVUr''@;'; put 'put ''VipXQn4xR1BObzl6PDQybVR9UztDQ2BAMEw+OkB6JXlHNlc7Ll0uPExkTiEpfWl1QlZXNGkkcnBsZ11zOTIxcWA5PzgpY0VmWl5aMiZOKVZBInV7cnUzYzdFNnIhLzokWU5UOE48PkVNRSl2RkdJIT1mLjQhNSVMfHhBMkl3NWxwTj9QeTleVms9azlvbm09bExQQGNAR0VGciRXTmNPMHcvSnk6''@;'; put 'put ''aUNLRlJrXSFhaCopOSEqU1ZbUDp4TFIiMWUjQkpBTHR0NjtuW1NNOylndkozblM1P1koSmJIUC5CLE5XbXtPI1s4ODErWilFNnRMWWRHaEdQLyx6VTE9Rz5Hdkl1eWA0XW9PKHs4Sks4dEs8NGFLYCEsJD1EQEZSbUJ8NCtYUUF8LDMqPmxgOWF0bjlDPWk4fDNsKFUhTCtqQ29LOFFxXXRUS05j''@;'; put 'put ''aUBhQD8rLyRoLj54cHhhc3JGcXxjSVIxIVJTPiJQI1s8L21tcEJoTWoqaFd+OTJhakNEY1JPSjE8dFdLIXVgb3g2czIoME1pRzIyZEpIR2NALDklek9MVFYqZjxuKFJzbnNFXUZSNFBkbzE5aXolPXhOPylmcywvZDZbJkg2ZXtfU1QoZ0RBcntodSs6Y0hwd2dPZStfKyt2dWJzVkVjUEx5WX4m''@;'; put 'put ''R1crRkV9T3dNLjB8aD5nfWBob1l6bXN1KHJaK28hMHVRNE4hTklQWDpbMFtKPUMuRUl7WSltN2hRdFpbQl5ieDFYXk5IVj0/b3Z0dUMlIX4wTSxUKzJ+fmsuWX1ZeV84MVVOfENANEdmUXh8TTNiQFk/N35gMjlpdiUqND8/a2hAaixORyZlcVlnYWYlWyk/PDxRYWVFKT9bdnZnS1pyS1FVLGBR''@;'; put 'put ''MVBwJGtQVD5gSmp0Uj5eZnlaaUdZRUF0LE42eE1bLjhQdVVmZ09UN1VOaUF5aTw+LyZsanVoQHdbYU5MY358JkVjblZ7TF5RcUxARn1FJHgwN3YhQSRRSCZAZl1RJHExen5RMHFZaEteRlMqakVyMjtDMmUvVTIpPGpFIS9kclN6Xk5iSjQsSHBVZHhoLz4rdlRdam5femJBOU13P1dEUGV0blYq''@;'; put 'put ''dShYVURfeXgrM11yW2RUVzhnZSlpOWdRLjVQOWFNPiNKSTdhcmM0TEBBeyJ0Li96fW45Qko7amxmQmwsNlFIWCVddl5ZS0pUPDtQe2R9Iy82TSNkNl9hXUprWW9PdVJ4aUk3c2YodnM9IkZreTgzXTNMaTxCcH1aSTNjSnh8VlZJNipVL1s1Nkk5eHdOe2VfYy5BWSJWSClXUXxCXSx9PElCeH4w''@;'; put 'put ''MXB5Il19dyZCc2hYTnk0ZTM3ZVFockNnNkdLJkYuS2U/fDclWisqcG9FPFB0b1lJTjJYPD08QnpKV2AxbC9iTFc0K3VBWD5NZElmOz9uMFpXR1l2Z151I3ZgP3dMNGhecyxheChWWjpYXVN3bCZdeT9EfUNxaCxkbHUuYS8vRmJadClpS3cuJEhEXntJXy5QPTM1WG5vZFRoRihLMTNKKWtUP1dI''@;'; put 'put ''SEsya2Fofm1GdGR2Vkk3PSR+SSg1UVt+dF1bR0AlMkNKLio2YFo+ZG9lOSxdYz5deHp9bSxvPj9wMz8rZyZMdFQuL349PVYhdzJ7b3JEalRiSzB5fmJMVSpHfWRiakRadjQ1S0xVXmJha0FlMGcickBWOWRQRyMrUEpENWRvYChbbz5EK3FLNHdLbFQpYU1KL2dmNUVzXVdIISNkWXkmJGJ7KUE6''@;'; put 'put ''OHNZRTo6dE9+K1hZZSg/T0dUKFVQfGplfGNRUXcpNW5deXVPdyFUYX14I0xnQ1FTNSFtbUAkTTIiRnJNcW8sVG0ka3RRO3dkc1NSdTBfamxdIWx1UlJlR3BIUmM5cjVhXzMpXjZkPW5vaT1WeFIkdlY4PUZga2Q+PWZyW11iNDtARGUrPD4vK3BkQC55VzNZX29lPDgwfExDfTlkdytbQlR8bUR7''@;'; put 'put ''QmM/e3tzUkhNUi5CTEhwJm1mSm4mRS4mR3okaXVyUHN0flsmeFp0eXY9WXMuWnhtalhvK3FiTE93c0NmdUlhPCh6antiWmNhTnAuSmc4JlZsIkNBNDs5NkdZNWYkLHh0ZiVaY0AlOiRYOCYkOWN8JTJaT01pUyVpK29ZeDMiNF5WYi8rcjRIenxzZmVRdWVtWFVFa31nM2V3ZGlDK0tCaStXeG1I''@;'; put 'put ''ZlJoZSImVDdTXW98NHBUIUI3V3U7Q3Y+V3ZmdHZAOlB9ZlRjeWgiVFdHRmpgXil5OFV5cW5aSlBfZW8oUXluNyQ2OyQrIT9lcm5OeU1VYCVeOTskYC9TKDdrZTpMfD9DIlJ0KSIzOmBodzxFWDh6Y3NfZT9FaShjcDljJVNbempFWXh5fDBMdSE4cDU+dHAzImNaVVllZjJwYjEqXTQqQilFNXNP''@;'; put 'put ''UilDX0xJTUhyP3dIZm16eXxTXj5zXkBQX0lhbXpaOzVtI250XzEkdWxYdVp6KHRmK3tJSThxX28zLkpYWyZFV3VlTXpfZ29HPEBFUTVqZUYsX2kjZ1h5KDY1MXQjaytCUzVrZCNqO1t2biEwVUMmUzBSVTQ1PDlgZ01sR3VaRHFjMik0OShbUT0zV0ZoK3RpdGZ+d35bcD93UGtTPTdIXV9PQlJX''@;'; put 'put ''RHchRlhEYX1tWnNUXX1PMTZ2Y2YhVCwsIWV8JTBoYFhJKil4YjdNbGhTRTh1Riw0IzhBOmlNO2JbV2xLPUBwNllyfV1KTVtNYjk4TjJlW3VCREFIVDxWYWhKfTcrenRXUHApaGRoLixUbWtETktyVSI6eCRKcWBNXWl1QGBbTzJ1TCx4REQxayZLTGMoPS5CRGRXVUxTLiVuVGZ4O1p7cDt9Sngh''@;'; put 'put ''WW0iNU5wRChZPj9oeE9YbzhMUjE3Tmc1ayNpInEheH5qWW9mJTdfdSJjcHlLPml0PVEqNXU9aXNkb19yO3lIQVI9SXNfdktHLnptIW5zbnlRWzdwNiN2R2BEdTNBQUZuZzNSaFBtbVNhR3csRFBsais7bCNjTklRL3QpZ3dBPVBALjB9cWpgJGpvIjNXLmJkejFQIyhCOT1Rem9CKGc5JC5ecDUu''@;'; put 'put ''W1V1KHx6ZW9AYksufSpPJGZxOSlRYSZkfXhEKyEuIzNPZ1p6VDhpIVZKX0k1KnUldzsyelRyLGxsRiMqb2daYmEuYjRpNUtDKCxfelF+Iy9eTUVfXVZXaDpsI3I/KzUuQT5fNSIqfFgwME11YDUlfDk+U1lqeE8kV3YxZkp9QywzdFB3bD0vfGM8Q0h8QDwjMHptVit5QVZPPlBzT0g2LEFPajNI''@;'; put 'put ''UVVCP2siVzNbUWBfL1A9P3kyQEF+YThBcFg4WT1ROkhVTkA8ImIzajR1cW83TC4uUTRES3x+bEVNWTZ3YjRtMTo7NyJFTXtddVZrbUhjTX1ZSTpGJkx+Q15eLGErMElteG04Vm1XVng9M3FGM20uKiVBRXBJWzMpYExNSFhIaDFpRT9jR311XV8hVyR9Y29gLnYsMWxFaW9uT09DcTVuMX4+PmAl''@;'; put 'put ''d1A9Z3Q/ZGxebmV+cXBLQkwoQj8lZn4+dlBxPzhZeWlHSHlkR2hCTCkwVCk8RUFFZXh1NHQuNFNjUmNxJCRrIy92NUZCYUpUNlcuRztpaVU5ezQqLyxkISshJDl6KGJDdDh4e2A5UmlGdzNpODQybylaSENRd0k2PToxeGhPb2RndEReYDJCJTAoVHkjaUJQKmxPUix0QiZbRHRZUHJgKVR0LzA+''@;'; put 'put ''KVk3NDpMaixuM1h7Kk4uSS45Sz5GaDR8ZV1rbWVsRzRjcEw8c086SUdFSC56ZVh1ZFNqMTU+NkksNEl3ODpCVFs7T0lFMUJ5OTVAbmlDQ00mfDZSM3dITW81MEtYPmUxQkRZOD4iJkNZcUNCIyNDfUZUNG9AOEwzdCVBSjxUQVV2IW87SC40cVYlamUhbW5Kd2B9RjE4OTkyVClQT1E8YVJlITch''@;'; put 'put ''P05wWlghNFs+dTBMMnUlQ0kleiVmUkA5KkFOc1dWQXojMGpKMSVDQGYhOjUmKF1ZbWlKMWlOe3tHVlBUTyV9KUQ9XkxAfHB6JWQzKDp2eX1SU1RBJiFac0h+JGVnYiF6T3NQIWV0QDlPRmxMQlk+aCx4UVorPE09WnxYMUs0aGZabjt0eTkzSX5PTWA/RD5ZfEpjWUUpWGJSe2JqaURJaG1qKG1v''@;'; put 'put ''RXtPXVlrZG5CWjFLOnhDTExyUEBFdDc+WHQ2eWpNQWVDdHhdWnciUFBDQltffTh3eWpTd1V+YUJRYzVHI11oU3RtR2JUNkp+UlA1N1FPRl1yJjtpWWBncm8yMFppVCN8Y3QiMWZXKUEuSz1wdFo0SHZLTSI8R057KlRzRWpxJShuaWxTTnckMG1kPlhrMz0xTWNeRVhtOFQkXTM+WEAmVU1udTF1''@;'; put 'put ''NFIpOlQhRyZFd0thRSkiT2ZCNzB2QUBMTEhWU2xsUyRwXkYuaSw8cjA9bmkyXTM+YWx4Kmk1czxaPzIpXShub01dSFlrS2I0OnMjaSpXZFF4MGlram0hLmU/RHI+fUVVeC58fnsye01iJWRzUj5HXipnaCU2OTc2L21VJiE1cjhQIVpOWlhvLixuXklVPU9EYzxoT09CVjFeTW0wQHlDLFh7MFkk''@;'; put 'put ''TSVbMUJTbF1VLnA0TnJ6NSFyRmZufl5QS25KSmA4ODFYNSx7bFA5ITJrM1NeajxGT2RMZGBiZytCYyssdTp4PX1yeilISExJLjcsR194aEo4ZlU0JEppWE5FXzZzTmdqSjxyRiRjYiV5MFFkfShWLjFlY1k+NGxqM0VSPjZ8RFsuNFkxYTlLXU1TVERtL1lDUCJ4aXVOck82PiUlfl9OSlZTSUdl''@;'; put 'put ''VXttKEphXSp6YCE7aT5ZK1RhMTI/P1FeZWVpSDRNIXYuZFU3aXQ7eVEyS3ZeN3VETWxHLlMmVHxMemhYTmUxeDMrayFeUHswMDF3OHs9YW1sJVJxaUxnKkM8eVJjPjhUdEYuNWhmQUNqdzEyQzN3ejVjYXA7eT5haHNpTHxwZVIuLzVuVllAQkQ3WzNXbkFFV3AmRUV9NTUrZCxTQEIxLkkmWDQ+''@;'; put 'put ''UXdbaXpHblJDfkc2NTZJcn1BciUpW05jLn4udmo4MDhiM0M/R2hWMn4hT3ReW0Z2cmBnVmBlNXEzI1lGPTR9KUNkfDoscG5CaTV2bn4oS1A3YGxPeUlgIkt7TXhtNHcsPmVJVVdGTE8pOD5gVl1weyZuISVRNCZ5JGB1QEs+TTdHYXxrbiN1Vl9ZLzlWcFtvS1FVTzBGWyE7PTo0WzxESCVNM1sv''@;'; put 'put ''dDQkN1ZUIWNPNV0sfDR8Y1pAfSp2TlhFQVUsRnYvbFZSa2d3WHFMSElTW3RzTWhgMUwxLzRUOStwa1gyNjA6KWVnISVBWUUlJnRzfkkyJmsrKi5QSEJOO0t+SjxffD5TNyRPVz9tVzx9UzUlPEp3TC5KbSRyVGdXbSRMO1coOF9xW25uZkRsLF12cmZKaXc1Wisua24pTDpWWUh4RDNba3YrLl8x''@;'; put 'put ''WEdkRixMaGg1K2V1Q2JZKFljZHhKbUddO29wQHo4MiZNeHo0ND4mez8sJj4mWH41QmBLP097RGZsQHY5P28vVWNPR2tWRCpwSXZwVEBKK10hYUV6aEk0TTRgam1UNEwwNlhdRzYibmJlaE5xUFAlajtbdUI0alUoRGFLW25Gd3N0cXBALGtqayZlISFZN0VJR0VxU0Y4W11UbUZ0VzlbWyEqbkA4''@;'; put 'put ''c2poOjVzVVcydllacEtMcTsiQFp8UkhPVHpHI3RYbV1RPT99QGRWPltxeFhFd3BtLih8cWs7IVdXNTQoUml9K0U9I1l8NmJtSzpKVSRlYk9HVmxHTlhnQnBXJnk5SElLVTF9fGNHTz9yL19vMkI4UiUrMyo/bn1ePmV2R35zcl5xMkksamYxTkdJYU8vL040RXA4WD9tSXcmfDVGaSQxXytsUD4r''@;'; put 'put ''ZElYTGhqeUZJKUJAWXgrfGtYd1hiLiM2RzsjR2J9PVkqNnljTyV5eGh0ajQ2d0hoQy9EeUgyVjJzW3tTd2BrL0UpIXtZW0JJL09dW2RjNVosUzxZSEJNPiFASjJ5JSVSTHo+KjomQFAydkYraFZYaEZ0XSR+RytZTDN3WUNqNWFCLHYkZC9kcnZpMGs7VktSU1UvJipNcDhPKjVWN1MuVitmckZ8''@;'; put 'put ''fSE2Ond2MytlQiRHSlQ6NyJJIlNPMlk5SDczZGhjOVcwZGV3PWgvcnRfSCs3bjFIYVk6YD9tP0J6RW4oI2xdS3Y2PExlZiQmRTxtXlcwQSR6aXBYd3NYREN1bmNZfk1Rc2VPLzpYW1tbckRkfH4jfEx2SjNAfD9QUjthXkJ4OzZxaV8pV1FGZnN9c1ZKRmxWdnJZVnJfKnVKUlk8IzdkbS5eMjUm''@;'; put 'put ''MkBRcFtEYElnMGVIVlgoUDA5TVUjbkVtMj16LE4+O1t2UDN1OHRHUTRpbTpRPntrWF1Ma2ZIJnBDKGhpKWd7Sy8uZiVyLHJIe2o/QXU9OSkrIjNxZXsre2R4K2RfOVp1T1UyKUJAeFB2P2AoeFddPDMpfil7ZGZWckpoeF5TLHMzM2owN0B2dHdaU25yS1Rba2Q8fkZgR11zR1Z6Zz1pLGp8bmZp''@;'; put 'put ''ODp6MmNRenc+RGlXLHA2K2ZPZDpyZyl+MUpiVlRoTzwqWk1Aa2lbRyR9NHR2eH4qbmB1Mm4+Tj1PYzU+VWt+RFBzLjFaXTNFQCN8K0BLKDxVUiVHbFpdbHN4PUppRmM7JiJuTjhZIl5IeG9jflBocDVXYjg9cDhCLDo+PkI3bTxodnp9PUQ9VCx3fmhDaU1ubXhvc0luYj9zfm85OXk7bUVyQW11''@;'; put 'put ''SEdxOnhAOSJOWUYiWlMxKVk+JTghU1pBSzgwUmkqYW5zZS5JKkFyMEJqMT9MSiwsQzR+aTJ2Sy4xRm0qcHJZcj9mUjpeTDE2d3IrcUhnfW8+LEglQT5rMCpWKlAkZkx9fm9ET1t6MyVgM2YkKTlMNFdRYzFoY016TmpZfS5NZkdKUzIySCZUPUs+fWN1L2tdNFM2YUV3di9VK0VmXXErXjR+ciNz''@;'; put 'put ''SGZIRUE9SlVnUUNWKEEidFVtaD9pcks/NV0vK11ddyNndy5GSTdBR0wsJWk0PkdvaSUzRk5bczFCPj8kXSZrW18oJCxvW1ooUHg7dDJudkQxOXVeUnkkKH1iZltKZnt1Ok16NkdIMDE4Nk5TO1U8LnVDb1FsKUU0JWA3UzhfPzNtNV8uKz9DJlE7KTg2OiJyLGRlbzdwMH4sWS5nS2koM1duKy57''@;'; put 'put ''aVh4bkhpQlhYTnV7ZTQrOmQ9SXtXT3FfWHV7PE5kW3NUaX1rZ0NdXSNCMjhET3VMaSJCKmgkYX1NX1QyRmJIeDgyO3JtQGFUIyxtJUAwLjIkOWRVQUc2aTJPQCR9Lm9RSH5BJlFjTUJKZUlbLz5kUF14bVJlO10+OShGeiNvLnQmb29KQi9nRj4jcV5XZWlEX1V7VyUhWD9LbS9PcC9OKT5UR30w''@;'; put 'put ''NVRhMGBRK0BTJChAUXg7KndCVihzQGYvJHYyTk5sa1FUekYjd3xFRkNvcTs0VFY3Tk18ZXxtR0xVJXtwZnViLykqWnQ5dWNqNWBVbWVxM205b0o/Uk55Nz42bzQqWlQzOkoxWjV7clJ7cH54ZGZeUXVyd2EsN2BDNk87Pj18LD5gJUdFPmpkLHNMflpOJDFZVlQ5bEd5aSghOUw9NlJKMXwwRmJ4''@;'; put 'put ''YD5kNDUxdD4yU1deMWpDeDRld1l2MTg5Wj4vfnQlfVA7YzAuPjJzQVRLa2RfPENPfFk+I2BJSC4xKSk5eXRSaTA7UFhwL0lbNTB0Ik03ZnZtQTd6KjIrYXwsalM3T2I3KF8mXWQ2Wm09K1ZyR3BYSHd7ZEo8XXVNaXFqT2ZDWFlAfjlTY1tqfksoNTQ5JUhfLFFseSVifDpDZDVPXyYpbzVBQGwx''@;'; put 'put ''VF12UWZ2P1tuMDtyNzNsWUFzaWMvTUQqKW1Vd3hKbkIpbDsuTD99fjc6bSF5Nzt8Jk89bD9gbHhSJmdHMHArP2JWKSJdcCNDYmY6bjdfXSZsPX54PjR3PUNPY2tvaHBCWlFKfjVyPjhGZ31tPzFQakNEQHlGSF9GVCk5aSZ5YmdpWy8yO3soQ2UpWVorMTJWQiZYZyl6OTNfVVR2eDJGYSMpKDJu''@;'; put 'put ''b1Y8JnhCWkp6RHZDZnUoTCk/bGlCVmI3JjFeMDBKe3k9W012OiQibH4qYWl7NH1Dd1ZlSylGbEJ7JHx4UzQjKXxzYi40a1krIzkleShaR3hXcnUwNHRFVGVwTmd0Q1d2KFN7aXooK083MEcsU189OyFjUDFaRSVrN25mSmdeMHpocGR0aSNEUXxAZ1dCVUh5a0Z6STgjSnRPYmF3RE9NamFGLFh9''@;'; put 'put ''JDlKM3pONC8qL1BjO1RCVWJiJEs7RU49TlciOiRqR3RzdHsoXTY3ZzNZVUg8PXVBaENJd3ZtYz0+ITU2bzxieF0zVUplL1tLaHtJZldnSndWXnNOYSEjVlpyOmY0TVduLGVKdkZFWH52d3d9VzJndntdejE3JSlZdilmcVdaKlIseXRMJTwsODgsVV1yNF8wX1gqXiQ6e3wwXlpvfjEzbWtXU1FC''@;'; put 'put ''W2o1dyg/dzJOayRneWJnRSx2bilOQEU0KXRZSkVCQT9UPT4kRnMvPzFOW0soO28/KXpfTUYvJFVoUDhtOVgrX2MvZUAxNiRDc1kwb18mSUNqLGg/UnZEZ1E/JXtDJTdOdWF6WGdYelM1b2MzNUQhWGY7OH5GMTBNYE8qOjohViU5bS57RiRnViZMR3JbLlJOOzd0VEJgczZVV25GXStWTSx7cF9h''@;'; put 'put ''Sj5TMG88N3thdWVnbDI3Q2VvQj5EWm5ATE1CfT93UGs+RDh2JlYhfSloSkg/dVBBZnZRVGhZXzF2Kzl8bUlzfUdrVy56MzdPbCUvITxkXjo8WDUqcyNANGxkJSFzRC5aSW1ZM3tSJFpXU3I2T1JnLGpdIiFWJTVQVylndDVfNUFPOkZbKyFxUFIhPXJTNjoubWg2TiRJfSspODFqR3JXd1hIflsj''@;'; put 'put ''L0o5QCtBYS9TRn5XV0RNM11URk4oUSEoYkB2SXxWUzsvdm9WX35YeitkRDw1WXZ2TWU+XilGLCVMVz81OTR9Ky4jYEs3WWB5UFt8XjZmMDBoMjVMZk0yW3d1ZjFIUWhdZmlkJDtRODU9YDVmZko0WzRIMXFjNHRuPjQxNVVuYGpufSFgeElOSXVLNyRBKyN0VTl2YTQxZUx0dyx7aU5wK2RwSC8z''@;'; put 'put ''QE8udGJDKjN0YVJsZl1Ee30lKi9BLjojJV0iOVN0YygqKDw4cDt5fEkxQGU4SXNCVU5Ed1FuSGBxN0B4SF4uXWBZbSs5TCV1UV9TJTpYckM6VDklWjQ3MilTcFZbZUcvOFU8ODxNd3tOI0lJLGVlUEQwZXlCaXFUfCtiJXtiZ3UvISxfZTVCejI9RlZlSHZPS35uYTpUNUQhfFNWSSpScjFjRzwh''@;'; put 'put ''ODpbQS84OVcifDM6dnlFcX4jens1YC5Bd2Z2MkYqVHpjSWpxfEpbWXV9Qlo8VGlrKywlbmd7bE1qIzpQZkAhO2VRZjQvOCE/YjJWZ0NyWGt1PlJdaj82eCZ9MGZVXnBTeFp6LHBWUEM7PnFMPTlDfkN6YiZgamU4S0RiPWg7RS5dZD9SZmoxe1B3SEhrVlNVekZnJmo/IW9XTXN3O3tCY2R9NX0j''@;'; put 'put ''NmRrKkJtczYhcUB9TGxQbyR2Q3UuLDN+QGwpcDlpXj40OmNmPDA8ejp4QipkVnJPcGR5Yyk1Mkd0N3x9OXdyPz1iPEVzWUhSWGU3RCF0WTRoJlpVO1hQaGA2ejtNOHpgOTREJko6MWw+azwhM21vWVMhVjIuPFtLeWAzOUh1dmQleDxCLHJ6OCIuWHtbOlVCKm8pJiQ5ejgjfEpwenJ8QzxQKFIk''@;'; put 'put ''Y2ZNcEw7YUdVO1ViOStmL1kzeEN1SU9MMjNaM2tNWVsuaSsiej8sZHhva1szM1g9ZkI+TFghMUM5WlFBKUEsbHFWQnw4LjBycVJgR2c1aHpRXUNBXndXX1lfYDM8Qjt6K2MyfVYwKlliSz18YlVIK0g+JVolVz9WMm5ZaXpyaG5DWmoha0FxXXVmbit1M3ApeyFZR1FVeEtsb2JPTmUsdG40e3lZ''@;'; put 'put ''cmRjMjZ9UGUmRSI3YEJmRSUwVD0wXnNGfGNbSGZIRGNPfTE9eDZ9a2BqWGZuSGZFTDlkMFpPbDgoXTJtNnFOWmY6fEhDOnE5YTpObCNnLGNmaCMmLDZfI1IuKWxfaWgyVzwyNipUdmQsd21ZJUN8UUxAXjZAU1lWYE8sTWkuM3swTUdjT1hAfGUzWFh3WDE1aChUTz19N2IzbUVlRG9sJlNvLnxe''@;'; put 'put ''MlQqYyRSMDE7Zz5nLkNbT0tmPih6M2BWJCluem5HPHxDITI4PWs7VEJTPS42ez0mOThvOFQ2bm9LNUNxPjRyOFRqOCNJUS9Uc2BKbFREbSJ3OE9YbmBHKzxoL109elNiYj9XKW4jaWl3TSUyMm4laXFVZSZ+M0pkZDpZfkJbNUJndnZAOk1JQExJM1BSbG1WcEgxU1s+bn5uOig8bjA8N1d8bjtU''@;'; put 'put ''c2JmNCppd0xJUkJbK3JUQDolKXB0YlFUfkw/QDM9L1txW1AlalFgWyplOCwmZ35XR2NBVmJVdWd7WzUvcm1fOF9AdT9aOykwdihdNDFFJWtmYFloYT9IMykhJXc8VCFuaD8kKWkqW1AsWjZWdFlxRDNIWTh+b3NUaH0/WFl7TzpvbHdEQWZmVmV2Ry4kdmA/Jko0V0REL1FaQ0NENStHfEwocnpg''@;'; put 'put ''RkNXPmZDYUVbNUVUZ29rJkB+VkV2aVNud2YyfHMxNyhmMFBeXz16L0gyLyJNQGBHX0AxLzh5W0EveVAwW0VzNy9jUnkwWWh6VUtwVV1icEdjWU9fLk10OnxzQDBQU1duYDg9IlhfZncmeXhXT0AlTiVmbHwrelQ7cmlAdGNMWzc6IUp3MHwvK21wdjhiZWgsMUNmTEY9dmI1IzdUby4pJGdMeztU''@;'; put 'put ''RG1CK3slZ2IpMkFLKjIhbl9aR0IyRndbVGVIRSgyZWtaUF4wQHxrUm82JXVXLFVzbT17VjtPR1VYeFE9Mm9HZG92Tl07MXFNVnZYNG97SSgkMn5qYT9mVnhjIU1tRyVHbnA+NlAxRE0vTUkrbmx+MWxOI3ZbfH47ZTNEPDpUfmtJVUlFUz0zenkwZUhpZWsjNm40SVhHMnF5VylNV11+O15sR3sx''@;'; put 'put ''Y0liRT5oLnhvblBYM2VgQDVXKmd6PF1OW253UTI0Slg8X1k7OyolTyM4ZVdOMEwvPTBtMHAuYyhJOy44JWNuZHB4YCNXT1hoR0U8UTt+YCF4RURyfVFralpufkgxc35LZl8hIzs5Zi99NTk7bUVlXnRJQiU6YyE9YDtVSnhrSSZYcnl5UE9DOjlGfWtZYndFVE8xZWY+M00sLlosK2kwLiFJTjI5''@;'; put 'put ''Ym1rXzh7YiQ6NV5VTD02aj5oYShndnQrYlRoZHM8dGJUZ0w0SG5Wcn0lSzs0P1hMTEhyMXFWbXUpbmkoN1c3JT5KeGAqUGYySVtoY2ouM11tZ1JbKVpCcEQ3Vy51bE1oL2VQeFRkPXxOS3FibTU0MEVNYnhNKy9pQyFLciteTzxIUEZSLixGVCU6TSt6TT1JclI/ZEoqVCN1dmpKey5oZHMvL0l0''@;'; put 'put ''KTk9SHV4Ry9VRURyMENkdXFtVltAeWUufDw2NCpZQVZCI1R0SS5TNWFvbSlPSUcxMX1RWkNnZ0VBN3ZFa0NpWyhnS3IuUV5SJk0iIT97fjlKZXloe3w3NTUuYiJoK1A9OnlFSjZIe0FkQW80Qyk3bmQpOX0pL2lgVkc3bSRaLmVOZ2BYKzhlcDBvI3VsckplS0pNNDx3MnlPMzF5aS55cnxfVnY9''@;'; put 'put ''NEoyS3hvR3RddkhNVyVKR3M8cXIzMWc1O08+ZT4+RmZfdUc+WjwkVV91OWBRPm5jQEZOIXw5VWY7VTwycHQydCouW29qc2xIfHBoaCREM3Z3bmtiVF49Wi9tY2xmODRHNz1DTTEvfktuLy5jKEkmXmUzQkg5YntWRCo7a3lvL2lSaEMhVmhYVGtSMG9TSVBtQiRwaTo7ajFlZGlHbkNjZD06eChj''@;'; put 'put ''Ny88UUswNVBsJl4+KFtqPzVJJExCaD1rYXVWTFhefE9YJitpT1VhbGk4Vk9qV0AyPXNxKC9aeTUyQ3IzbzQxUTxVc0E3aUtBTmwyOTdtTGV3IStnO01NVCh8QEN3JDFySzsxeXo2QHk2QkZYU2A/alpeSj1bfj9fQ013NEtzejdIYWA6QUoqcElGSn5YO1VkMn5tVWM7Yyk5cjVgUT5wd3NlQ2lE''@;'; put 'put ''cHNxJUkuPWcjNkQhb08qezBndHsqZCpXO1Q+MT5aZiY/N0BWZyolNTlSdHJ9XSs/Oi9tSzVoOks+Xnt7VzkubSpmelt2JjU6NVtdbyg8MHU2ZSIhaytlbmNBYzAmQD9DMkdKRTFWdHs8cT9nUXUwN0c6b2w5LDxsTDp0KVdWOT9QK0tyeHtsJHBjUmouUC8uPTddMHg9dmVEXTQ+REB1TzdXUC4p''@;'; put 'put ''enNhRGVGbCoqZzNwbkVTN3YqKms1MyF7cTVaWSImM0JVPjszKm9gS35yfWddemg2R2sjPW4oJnFYSGxvUGdjPDBmWDUmci8jR2Z+TTgvM182bkJmcztHc24hJWlHfilOT2AyZWt4T1JVUEUzNnA7cShoRFFEcW0qR2RQYlVdMFN9fnVQTWIxRmVFSXhPRz0jaCUsN3EsM1oyX1JyV2tWbFE4cV42''@;'; put 'put ''cVVdWyokS3ZBITYyY29jNzU1QDJwb3JASkh1PUl9T101e2xCNlkhNz1CQygoJSo5fG1jSzZhb0Nbem57QFliaWxNLl1QLz45Oj92ZCxvN21hVEgvZnkjKGxGMl9fNHU7NEljY0ZJQUdlaj1ZKmNuT1YsZCRhYUAuSVpFe3lIOGBTUz80fj1VYU8lZ3FqKylWa2NyaGtbekkxa0x9UFN7OXBsajNz''@;'; put 'put ''dDBiTyhaaWFARWtrQGZJW2M4YFFKcUVMNU9NMEhzWF1DVk1VM3ZyM18sXWAwcGV9XWpLJmBdKnUjSzhVcnR6RyVQO0N7W0BKcD86Izk3K15UOS5KZChxZ2FjfEc2VF42MGxSP1Y7VFJnfDAvMlZRZD8uSllWKitpcVE+Jkx3fjB3OV1beTJWXzR6OC44S2twTDMkNkxvW3lwPD95aX1EVlhNRVRo''@;'; put 'put ''bzkwYFFtODk4SWFFfnVJLzdbT242UWV8MXhwQExCZylkVWVycWtZMFdVOzpWN2MidCU0SzdSQlBtbjZoc1pNOzI4aiVWO0d8dzE0R0pFSlpfc2IwVSVXU2Q5X19KaSp8QSVuJDNJO0VeUTJJamsrdEJAb0pvMXw8PyEhOi93bFJqfm5HSWB+ZnVQWGxMXnhobmBiMSJmQm0laG4xazEvNjtVTjoz''@;'; put 'put ''PGcmW2wsLigoe1VSaDRJNzFxYFN1ZyVaPkE2cFJIPTFtKjNpSHs/aERHfWw6QGUmc14hYGB3UTNmdCZdUkV2ajpZKjlxOy5JM30hMSpqeGpLbj5iOW1tYlZKY3csXmx7RDldPFNqbV13PDU2OkZ6PGc3Lzx+VVNUJVZXQn1xNmU8N3g7LyE6Wz9MY0FXVmZkYiN8eHhMMDFISko2NmlIN0dhO1Rf''@;'; put 'put ''UjFqbXMmblomZ3gjZmUubTFAYmhaLGQrLGooclY7YSRyMS97Q306UjMxZ2hpLHpZdylhUGhgelI4eFZJdHVLbmJOUV0ibSNSKFkpfUdeNFJwfjtFdTFJcFNKUXZWald5ODZXK0hebDB9eTtHNDN0dEcqUkskaDN6Ykd+Rzd3RjU/XXUjfDRpKG1JZz0wQER9PH1YckJnUHNrSzV7bjxhamBMPiMz''@;'; put 'put ''WXI7NEE5RGYmIlY5K24pTSsvWXA8SGxqJEh0WypRQiNAblErWTApRnwlUU84PjpeKjhedkIxZCgmREJPU2p8cHcuP31AUl9+aCxOfmc0NkYqKiI2PSJublJXayQqTSN5dXw2PXxSKyNVNlZEPCZPfUtHVzl0R05NL20qZSkkckMoIlBlVjh4TlFKXV1JckNlZHUqaGRiYjlJJncxZ3gjODNsWHBW''@;'; put 'put ''aC9vSldjIikhVyp8KjBqLzM8LnleYHBaeUh9I1pIe2U1Ln43dC5dX1FHeEVEVj9wKkFHWDhbKzcoNmV1aWMmKyo2IyN6eDxZYWRhMVJEWEdBMl56YThobyxpcWQzL2B0bCwweiVEVH5yYlMjJU5KLH1gaWtiJlN5VHVXNSJmR1dFZ00hZixUTzFVX3khPXVHOmA3WypXX1k5cSIxO2pRLD9MIT1K''@;'; put 'put ''NkpjKiokWCw6MkVaUD9teSFeOiRtWkc9ZVRUJmBaeTdOSUZYdXp4bVQpZXo8NCFXYEl3fVdobX5lKCNsdXAuVVA/Z3dyayFAI3Q7MHl5JnR9UWYwJCM7ZWB5UE1xX0cmfFZZdE57bT4lPW5oJmg4NXprOGVFclNXOCl3RDY/M0JkNVZDfH19Sj5laXVFan1IR3dac1N2W31UelUmX0s+WFYxN21Z''@;'; put 'put ''WzU+OmhXITEvQllbUFcjfD9hPnFINlp3KjklSyIyejg1PCFWNFtQJSkydnVvJSwrIkQrdiQwQU59dCppVndhXSssKjM+cF07T0BUUmM3KCE8cGdsU15+Z3gjPEhKYUJnNiE4ViJsYlYwOWJte2N4eiIuJCxPJWJmJU9HbGZofElQRyN4IjwpbnJQO0IhITtsTUJMbExlQzsqNU1sZn15US8/Vzkk''@;'; put 'put ''WEhDa00jV3d4SUF7NVs2PEkrUTBbRklyLD94dHFUVCFZKTY7P19tfUAqI1N7P1Z0b2NIXyx8MXtaelUkRH5ALFYqKHJOe0AjNnkrOzpTLExvOVRld2gyTlN8cSEqKnNzMXo/MC8zLHlMUEZRbi4/PSFbJXJRbmx5N3daTkYsSHdreE1vK1tSQUBSelM9Jj9+PTR6IlRrX19ddihTeExdfV1FXVph''@;'; put 'put ''PD0+ZX4rPXQ6SjAhfUpzZG4jSEFCYSJNNkJCdC9pd1VnMDZ4QitHOVkkXjxFOzRhbXtgLHZdV1FGcTA/QCYkSn1fNyw7LDE+eWIxYnJ4WyQxaE0xPztwXXk0cCYsUjIpaFl0RUNUMWRDR1IsfSE8dyN9aHlMUiZxcVdUIW1tM1tiIVd5Z2k9eElFZGk2RzoxZm9GVmNZO2pIS1g6bm9BLF4jOEBw''@;'; put 'put ''ZjxYcVhhKTAoaGVeXXM9QTcpLlohImJrUFN4MT1uZm1mLEpZKlRpKHA5QlFgI3wiSlhFVW1xVl0yJSk0UkBPTXM6TWI7TzpxfXVRVW9qX1IlPiJ+bCMzcjYpaXB8cDVBXytSO2h9W2h2KURTfHUmJXM4ZGNfOmlBUD1Afm1NeHRtPmFkVn5aJil+NzViYWdFZWo+TiNJODBpIWhFZSVfUWg9Izxq''@;'; put 'put ''ajlpeDRyR2Z6aFZibVJ0bX11cylROjJxfCNWY3wqWWkuUkhDR1tnbT1Ib3I5ay5SKjh9I3NJQzwqKHJScDohRFc1YmxSJWZVNzpjVFd9X3k3TD0hal5HZUp6dFg8K3VzS1k/OjxEYGdTJSojZE4vKGNtIWt5ZzZSUWt3ODwwcTt3aEFffmA2JTwqa2VdbnNxSWM/W2l+fjsjKkwsdzleP31fPUVv''@;'; put 'put ''SEVQXjh+XitSTDl1XS9QM2hYRk42K0g/VilOPVFbYSJaTmV6OFI+JEgqXjM6V0lDZSN9NTtDPVNSLGxkOmphRSY/QDF2cXh8QFM9ZWM1WSIyOEk2LCx1KX1KJTFkMHRScS5RK0l+NmlfP2dWYm1Sen5LSUQqW1IiOEdjT2FlRjpwfVtMVyhlUD9uJnwjYENlRDFnckp5OTRPYGpBaDxpbzgvV094''@;'; put 'put ''QDk4dis0SkYockxoUyhPekFdN0k0K0lIJXxzPSQqanJ0PS4qYXhVMX0vZCk4VXh0TUJBcER1YCtgSjEhVkJ5TV9ycWQvZjtTQXFwYDVfXl82UW5OZUgiTUc7eSRZPHE0TCYkSjVdTT5FN2dxLk48ZjdKaFI1PDRfM3xURDtiZGVUKGFLIXE4YnorN2MmZmNtbytlPGgvRzZ8b29gdGcoWi9RIyw3''@;'; put 'put ''O3BvYE1BWUFGP0hdQj80YmJ8bUBweTFbYDE9PXo4TzJmI1IhKn0kTz1bUFpwbF06O0A+N2Vzcm09O2YvNyxASnpVT1I7NXVsXVU3OTQmdyo5VEI7TzJfcFRDOj1RI3dZTVEzSV1TJEtXbzZFPklIPHE3bkw+MG08ZFBlPjdXSHw3RU5QZUphRXE9SnB6Yk1HITZAR0RubmF5V2svYGQzSXpeWVM2''@;'; put 'put ''blEhS0ddMXdGbn4qIzZvb2l1dHRsJG9yNE1WK2laRyUkbXwuKyRBTjReWS5aJWRDJSskPVVaMkJEfWA4XjheODh4ZTNWdCsyPT9KWU5GKUsyWDBLISpNbylaWEpzKTdAbzNsJHkkIkBbZ3FUJWNbIyYlJlVqRlRQc01RYVBoJjl9Qyt3UV1gUGBZRDo8YW5oeX08dTdteGQ3P14ybV9XUXZIaXhK''@;'; put 'put ''SVA4LiQuJSQ5JFpHRDY6a0g4eU0xKWdMaCYpSno4R3Ake3U3MzN8KkpoMEtWSGR+bFNLdGkvYVdpfHlAS0w0MUd0VnBIaDVGbFY5MExTSFVkMVVzVVMxd3RVRD02V0tAeSM5PH00MCUrQC9UOXhsWF1Zfj09K1VUKlheU3RqIWhQc3RZNXklKlIrSXhbeiRTWik7Jn0iTj4xPVZaKys2RV5HUk5t''@;'; put 'put ''fXptZXpGdUh3I3w2Jk9zJi9XajMxeyMqTHkucm5mJVBBS0J5dXZ0KSldRHNjW2slXVQ3ZX4lMjAlOEFAQW90VkV7WVElZl9uT297SFhnKGJQZTszWHlLKWpAcXpGSHVoTi5fVHppUWFWQy9jXi5zKSorcWtpS156RkwqTXlPbmROdm1FQDVSWUZiOGJpQDROL1E0WlosXTtQMzJIWDJaOSFKY0tL''@;'; put 'put ''ekMrKC5ETWImIzJdJjYyPz9EXm84MzFrc3ZSeWc2VEdRSTxmaWU+Ml5JcnoxR1UjKnIsQ3k2ZTBMRHlaTTBOMTAuVml4UXp6OWw/c0swTU0oLDBSNiwwdXJwJCJna01tUjgxXXB1JSxVYUVgU3Y1QXM5bD1pLFhqR0s4fVpwJmNERztPSjReZyQyMlt8O04/ckpuQj50M1NfJUh6LkU6Zil7OHNV''@;'; put 'put ''RWZlOythUStKbzFsQiZOVUt3MnhNUUV8Q3FgNSZIfj5qcmg2M2R9MzlIcWtHaiZmOWN+N21ZWTB2JWJQUk5VVHk+ND05YzpZTTooJkRwcClKXXE4VSpmRz4rZ3EsaFBEfHZ6KCJVfHtmXXhsekdwLENyUiZsLGxnc1A7RFhQcWVmJDAxQXJwJDxoR0lidThvTlJJVDkoQSZreS9VU1IjOH50b2o5''@;'; put 'put ''YW89PDx1d1YuM0deYDRVeHRBQlNKOCVmRypyKmlgQUlQXTkofCw1RntHbThOaVE0e2hIPDkiW0FnKDQ4T0p2UDMvLDMmamZCKDRCM3piP0Boam84JUVIT3FCXSVqSjYoQCo9aDBHZVgzTyYlNWgren1wVGpYImduQ3VfeVVAMGlrdiFyWk14Oz1ob3laNiwsPENfUyVBc1F4ZzhLZ1QoYUtRP15t''@;'; put 'put ''WVkmSjV8U2ViT2diQHhZUjliR2Z+RU13aHBjTnplTiFKMTk1XnoiY2VMJHF7cDdheiMxeUVwMz04V2hgNi5iMSw1dyVrUiZNWU9iSkJyKlRFVy8yXSxDO09gOzA3ZFFFMVUicUlxPXkiOCQudklkZUk6Xz0wS0NAd0hue2ZdUERrW3gvTE45TjdhUVlkYiFjIlpfdTNaXnN8e3I3VjlNMCorJiNI''@;'; put 'put ''dmVaXntXbCp7YCxjUHpXPF1iPWBmXi5OaSZ7VGFhQCYuN1plSEduLi8vZipSLCkveXMsQnx4YypSQlp9U3A8JmI+bnlEUDBgLnU1eT9ZaXdTImx1X1JgVCtBcUImSGNtS105Zz0/eFQ2UWBaan47Xz41PCtHXy8rZ0U1MSlDemJgUUcjWnlneWFQTjMybUA/Q2tQKCVVaXo9XV1VdlVgfD9pQTgj''@;'; put 'put ''OjE1ZE9NKSVULzB0dE1LSihQOHR2ckFzKU1BX2k7eCo8eThWaWZDTUIycDBKVDEya1Y6I0tlSS9JOSxJRjo+LykvJTF+JiRIM1plSHl9PmByOipbM2QoZlcyS0VbdU5iT3Z5fjpiKm9TKT1TQjl7YzchJEZSb0x4V3VvOHIrWGFpWX5YcjF2dnwvZitzJCs4Yns3ZlUuM3AhWi9YNS9TemIxSDMi''@;'; put 'put ''SmZoISNSX0Y0SldfeHNVV1A5RCpKR2ViYkhkLllITlR6JTFPUTBNfkglaT99SCE1MUN0VDprWX01ND9fRSoxe09NRVllPyUxZDAzJWs1NlkjIi9RQUN3N3RbSlg3fEVkeEZrMzVYViFZd2hWJlFgfW1YYHIrOm5Sak9PSmxVRTskJTxGPStnWnR6S0xsfWgsa34+WHRUNW1sPzZDfjMsMSM+Z2k+''@;'; put 'put ''JDJCVzhZcys4YzZdKDMjdVlyPkJDWEVAIzJmX0lATCUjMlVWNStxbyJbNXYvVSFxMyRBXyRAI3F7cHlQRmw0Xld3PysiY0lxVX5aUmk8dyU9UTkqIV1RXnFTO0htazs9SVVXI2kyXm8uW0xLRFMpM0pJQ1g8QFBubVhYJHN6diRPPTBtVVZWOSY7SDpFTC90WTV2b1BLOjhzUEk8fntiekleeDhy''@;'; put 'put ''YVEjdy4iTWZ9S286KTooPz5ePmZmV0MoaWsrJnxEbS9KdEpDbiVLIj9CPlh5IzpfYGckeSsyfkZ2fHlNZEt1biV3LixsRyN2LkhicUNLSk8hNV9IV3pwJmI7KD5KbWU7ak5tTWlySDlVN2ROI0JEZUI3NDEzWUMsOT50WikuLFR+WD50T2puOElXfGtQYmlaTzcxUDxaVl84TCE8JXxrT3k4e1RZ''@;'; put 'put ''M3tBWDk2YU5pWU9oKTNIVlZpU3YvaV43S2c3Oz42dTw1QGJpdDRLKk0rZ0khI2p4PEtifWBmZmtRZnFQZXFwYWlLUXtSe08hbU1zOnxbP01kWGVVdjlaRms1cVJKWzc7WDkuM3BmN0JKTWF4JkdDVkxUZ2czaDZHIk4zR3pifkBfT20kaHhCJTskb2gwK3Z1SVBHdU0wdlEmWUUsdTJtaFhdezVg''@;'; put 'put ''WDx9e0lsPiJQVDVIZi4se1crVUsmPCZ3czFdVD4zRSEuPlVHQGElcHBDOFNsVjtIKmkmMTJuLjU0XWwmMG1sT3Uxb1NWdG02Y3dTWC49QXdTazhKR0gwSTdHaUlKMXR0Y1ZLNzh3UCkjRGxpWy5reSpyPVNYUy59dURlZzA7MCtUX0RvbHEmR15ZUlk6cmhTWyVjYXB3SipsbDpvOF19UlBdfUZU''@;'; put 'put ''RDJ4ITs3VFlUeXRLdWxzMjJELlBUYXw6VzhSbXwmSy55YFRtVWV6Z2hTZi51ejBpZ2xFZT00a1IvSCE/JnBheXVtaHhDW2w6PyEvWSIwZ11KRjBiMGB3W3cuTVtANlYoU2xBcVF1bSpQcXZYcGBvUEMrTCtBUC9haV5ibkVlKnxwc2FAPz1xWEF8VXBLRVBDOkw0KkF6b2tbWG85RVY0LyV7I3pg''@;'; put 'put ''WF9hQT1CSVBHVWAjWUZTWzc6Qi5BKjNyJjpFYnlPTWYxTjZibFg3RzcoeGZ1QmtiOnN1U2tRWjE2Yjpnb0NsMWEoJSYpJFNoZC9lO3hRSVIoTk1rL2ZMZy90aGUmWWkrYTVaQ3NBIVlqSC96bCk5d01VUSx4S1UwNmxZRjlbakB4dTA3cEdAfDhTTSFtVT1uUCFPTkVNTHU/RWB2VXU/OHRBKlN4''@;'; put 'put ''aHc7XSxwLFNQOXFfZC8jSCFhaXMid34/X195SWkscSUlY3RHP0tdciExUkMzQDgsVno+PEZRUDFvIzI/Ljo8RUEwKCUpYUxiKFY+O0l7SzNnMn5wRUMiXz8hJmhwSGI0OCFHQFpOQlQ9I1YiUzticUdUUC55JXNRRSF9b1lhTTxoLytpKT0zOXwwbXkxb3gsbFtTKzpidX1UTmBHanFnaStbeDJw''@;'; put 'put ''eGZSREp8KWlfP206UzYqcXh9JEZsQTc7O1FiM0UuI2c0I1d6L0IycjBWeWkmZ3pbWTQ2dlNjWTxASkswelNjK2EmS213Ry50NkgoNjtfe2tUJnZJYlFeN1hJflFFUjRHLCp3N2QyPG55dyE+RTRfRyU1M3IrUDBJbiZ+VWoiYVZTanxdJWohTTR9VnAmU313KUwvc0JFN006V2lDUl0wdGVLWVMz''@;'; put 'put ''JmdZVHtgI0kiN1lSOG1CTXN8S0IiI2VSa2srZjlePDtgS04/QklBQjBNUStiSUVqOzszWWs3Nn4pS0EvPG04O3N5fTJbRCRDM3MsJX5FTGgrcyYlU3lBSGdad2MuI2wlZUxGbEdgUCMmIkZgJWBgZkBuLEB5Tns9dGFBc3ZibVtuOVQvem9rTDBVLyNEKkZAPyVgMWdwI0tAeGNJdi8qK0shYmJ+''@;'; put 'put ''KFdtTU96blc4a151bWxzM1h+eT9VbCYvMztsUTMpN2g4MWJOMyk2fHw9XyQ+ZCojPSJFYDZBQHJmQWJiJlQrSDt+U1p8R1dIZ0A6fnhKNHssUzVTbDFoPmFCdEtCT3Zyb3N8Iip7TDdSYj8/VSVALzlyR1s5bCpEdG48fTpbbF56OjFqWS5vaXVsJUFqMHMrJVtofnIoaDo5ciwpbCllbnc0N3xl''@;'; put 'put ''IjtjdGJTYG5yZXN8PStbUnRgQVJKUHMxNjk+eHt4KjBpOSNKbko0dF90NiojNzVQIzdkRUhVZEJ2PXw5YU8pbWM5UjFRUHpNJC5gZilsbH1vYGUuNTtKeWhVLF0/a0VlZGtIVzhwIlYqcXBmSllJcTRTbn0uMklHbXxrLC8jYFhybS84dzVeVSpvM1Z0UUB8NSxpYlR7OztifTc9OGw7aUF7V1Vf''@;'; put 'put ''fGN1fnR0dXt3dlRrNGRVPzUlQ2BLcVVYaEc6bFghQD1tcytHezhQW0VtTGlkcXR7cmJgJGp1KndDO0dDfnJ9fXE+K297LF4wTVYoYyslalBQfkR8P3ZRZDhbOHlzbDdkU1kqd286VG5hcWJlNTFFJWtld0Y6LlM8Xit9cnIkcXs9TlsrcXB6WXFiTzBvPzZDO3VoY0QkM3hLRDh3fClTc35lOTl8''@;'; put 'put ''YyVlOWRYYlRSNiI9bmAmQT5BRU1lTjA5fSkwYF8kYEN1S2xKdjsqMVBoem9lI3BUbCk3XUI5bHBoK0wmZjF+fHp6RHk5OGg+KHpwI0soQWUhXixkdiRWciE5QT0kd2lgXn5ZdT1WOExKYFZyPEAyfW5RVlNJZFhzQnBWSjNofSx4VCR2d2NoXSYjfiY/JTw9d3cjRkVqfXhsSE1aMF5+ZT13dlM0''@;'; put 'put ''STJ8XWwwWkJCbVJ7X0s3fm18aSo9akJYbl9wWX41Vlk9REBgYmVMcCZWTE1nLkZJJmxeb3FsPTx2ITtveUhhUmp1azV3aWQ4I2hiKnlMWj4hOWxiYjprengwSngjaDdMNmdHbVJGfEcreThNeTY1MVsiVEpmTXJJZm9Id0k8dlF6dypwUl97TCgyVmBSKUpdSjRJMnxebE1abVI+PDNkUz4xJW0k''@;'; put 'put ''fXk2QDtMNUt+P1J3YSFOOGVtez5JfStpMGpMdDNYb2t+WkJeSEVII3xXVSZrVWIqTHp5OWlqN2F0TEp0WXJVZEArazo9MWZMSVl3RShuMWtreFBHcGdFXz52OHA5ITAhcXBrKkhHaVYhKkl3WCErM305cDImM3VmcCw8cSUlT1ZqejhbOy41ZXJUNUVCWXZPdiYyKH5lMHBfclUpVF8qYS9pNlEx''@;'; put 'put ''YDozPV9jYGNIbj4xS1pGJlEyPT5tW3AjS1pGOEEveXs9SGlhW3x0QXpzLkFJfnVsMDlEKEMmRzdaTThRfGFUKSUqblIsfS5ES1J6PytAc1R6WnxNOkdjWVB9Rz84K0BnckZgYjtqMEhVWmpbeywkXXpeOUJffjV8O0RWSUdNM0tHMEZndXxhbVJsW1FqUTBsIiF3Ym8xSmNqYXAhVS40aCY/JX1J''@;'; put 'put ''VWUkbVRYcE9qcFZZOTh7Y295M1E1M1FoaUljRiF3QngzYS5EcykvWHJCQy92bTpod2Isc2tSJmdRYEcoTXltPVJ5PHdETWZIdVoyPTsuWytmOCkuVTdGIVdTZnUiVlIoOHlZVnNhUHIySyEqKSk3Qj5WO3hjPzJROWNLP2IhPVEkPUJYdkAuUy9zdm07QztvOEVTdntxVi94L2xaNWRUamIyR1Yj''@;'; put 'put ''MDdwOmoyI2hvXjxtJWg+cX1TZy5dSTc/IlIzPmd5KiksP19YLEcueFBmaTxhOE5CMzUsOkpVbSVXaFAqUDprb1pvWzlWJl4xIyhGK15LZzcmcmVOLnQ4TF9hMiI7SUZuayVCdExIWj9YeHlhSy52ZyR3YzZCaFBBXmFJPk0yJkFOdnZtK1dPUV5vUF98MTUmTU5JPk00JitMZFgrSTlEMEdCL0df''@;'; put 'put ''JEYlR3l9UEJtUnUvOiQ3UzNRYzdTZTRYQzpYMX46aH05S2NyYTxvUl1zKyJKaE5zNUAkI0x0MCR+eTZaU0A4aWdaeWVyPUl9eGckI2NXbW8jISJyNEBkR3BXcHRQVGQvMzR1PSVRUTpdN1NnOSJsfi59UURAYz12TUxuOVR9QER6UE9uMmBWbmwxcTtgNyI7fl55P2tga0xVbjI1akJUQkpMYz4y''@;'; put 'put ''RHo/O1ExJFB3UGciP2JIYE1gZEwvPWliYGUwMT05UWdyMC47NmI1dnZAOjFLKlhzW3AmZz9zYy99cXt0W1twSG90L0Y4ZXAyJigwNVB4W3dNUXkpb3F9IjwjNmxIekxqVkE2PXAjQTIwZjl2KUkydjtdenBdUy53UFkkV2A/M0AlMiNRaHBeW1h4ckkkKk02MlEvT1o7S2g5bG9nPW11OypAfSRX''@;'; put 'put ''LnNgXVM5RkpVKCghZjpuSWE2LzZqbzc5TCg6bWA5c2U+Ul9gSSFKKlk8aT53eTl6VEg8SFpALjdsPVtERmc5XmIkL3NPeVUxaiRfNiY2ZVVVKCxsSzppdjp+dlslRUteZmlOaUddO2lRUlM8O2kjc3Y9XzcpMytKXSpxcXIzLntNJH0lLFQ8e3hrN2VsWm5iPWhGTCs2Oko6Sl9POmF4NEpDJGM3''@;'; put 'put ''WjAkNTliaE9nVGI6MWQ/blQyVG9MKk5CRDlGZkxmSEFEaC51bjM4R1pJQVQ/Q204a1FNUn0kQ1JNLDwvVyZvMXkkclVUUDN4JmM+P2dWXUF8JnE6QzByKk4pcEpgVH54RlBVYU48RTA4c357dXZPITY1W1ViJn08aSpiWk08RGkzcEdSRiMiXWdCPjc5aWh6PEo6bns5MHAjV3JKYX1DNFdQfjB5''@;'; put 'put ''WldUTmxFfiYpbSl0N0ZNK1JIem4kPUl9YEV9QGs/e146WlhybVIyYmEsJFhJfUFeUVpiK0MvPUNDY0YlTTJfUWtJc2AzIyIlS3IvOFdXVztWZ1FmQGBuOWp3USNrJng4SzttZCE2aGEoPFcoVkshOVU9PWc7IVI2eV5HKFczRjQhYldnMnNRIz9YSj99eXNeWGgmSWNGVmIvTUp9PnteLFkoJCtX''@;'; put 'put ''PFpjW2lrMXZ0Zy9lPSJzemVJKFRVbks2YTdbY151VT1GMzNQITwlcEU+SEw5KDNtWiNXL14uUG01UyN9JFsjZyh6Yi8zZ0FhYyUrczplaD5nQFNJSyMvMF5iMXl7OlRjYjJZPkA2bnwvJi46XmFJQF9ucHgpVGlEYFM6N0NOeXcxWFZGcFEpflQ8YlMrSmFhLD06STo5OmwkNFJEOW1RUyx1Llsq''@;'; put 'put ''amRWJjNqbSo0Ul8mJCY2XlQmVzh4W11mLl1DUUBkUColZV1PQVlYVFZ0Q0N5WTV1fHVRVzNQXyRjeElIKHZ8dVNRWyY4SS9FSDhnR0t5T0guQUlZLkwwYXtUP1tTTV8hZTFDO0FSTmcocng1JTFWbVRVRzlIal9bUnNkVXhvZUNqVWNgVDF+bT49cTwpTTc1N3IoamZ0Z2I/Z2tPfDpCWmVmTmF8''@;'; put 'put ''OEIzTV58JWJJIjIkST1paHhPNUF4ZzIhZUZeKiRaWUYsMkBaTyg7eU06UXFnL2JrWzl3OVI7cXRveCZUVTRwXTFpQjVnW2lnb2pEanRmc21MIVdodCYiJiJsJWJURF09Nl5aPFA6ZHg3L1srdGIxQmN2JVQ7N2UqZitaWjA8TVkqQVFpZUQvJkxzPEw5JUNhJUR2WDVBb0IuQGdBcTlCdVFrUUQ4''@;'; put 'put ''e3lKUShPdSkpZ0VlWzZ7VFYweFhHJS9MV0M4XWx4RT0+NCw8XTghbUU1bF1tYzJbOUB1aDFRISgoTGd0NUlRenBMJCovNmU1VnBKT0dNVnlwIy45MzBsKEBmVHZbZFo0N0JkWE9ZKXI8Il9QQnpjWFYodkUvVmdQfFZnMFRMNXBxSncyQD1EKiU3YShCOUhzQUk4bmZrN3t8SDVpYkBoMnJbZmMj''@;'; put 'put ''ZzdqVzomOGUzTCosKyFxd0goWUF9OiE/QHJ2dDJdYyR1YCo4aHhQRilwNm9PUzwmUXNVUjxVX3tFVXF8RHtAJl1KUT4mPmN+SXovU3pYT0BJQDg/Oj0/LnxONWd7SjtOUDhqJl0iTUMqR3ZkSmRePyhtfSMoM1laPGM4cFQsISthVihPUDlIKilrLi83QiR4R1VAMG98ejtEVyNFYHVwcUdTeSRp''@;'; put 'put ''NnUpWlAzPkEhSisoUy93V2dJdnYiPmVMMiFOKWFAU0Nva3NvaUcqLmlpMjBLayJtJFg3aUhzIiU6JWoybjxPbjBNcDs0OlNgXiZvcC83QiRiTUM6UmouMT0mT212aTM/Yi5YZVN7RE4xezJ0RmJYLz9oW1FrcyVSZG1FITpJQzBNN0xvL2tpamZebmMmTDpbLFleO2xSNGQ4dzh7QTskU25ae1VT''@;'; put 'put ''N3djYFBCd1tMLmIxX1FTIzp6cU5FfiJlPVtkbWVETmx6PWlub01JXnQ4JF92Nklsc3lMcFNCJGRpek9WMm9vWVFyMVttaFZDV1NmV1BRezQuSzpZOVJRd31mbXJWQFg/ekReMTxBVVYxbHUpeDlGRHlkW215UlNgO3MkPmwvTyN+eGQyRUBCSFkzbDthOToxRS9PZXhBTDFLeWQ7T3diRy44YXIs''@;'; put 'put ''IjwkYH1tbkNVfmp2cWZvR1VkSmg9VnxSMC49PUNvNUIhUm45YUNiIztHOil2YTomT0FFOWBNUCFQT2d6SThoWjo0RUtSRDBHKCtPTjFVR2N+Yix4bDAyIWpUL1c3IT5NYTkpRXJZMGI2QEppLiFEQkUkSjg2dSlXcV85PVIpMT17bCIkRng4MCE3X2tYR0p4QEA8WWVPIWBoOD0pTVUvNFkjdWF7''@;'; put 'put ''OFMsSHdwWzgxOWssNmd7VSZve0dmIzR0dXFoWjpwU2pGZTcmLih6VCRdViMvR15qM1U5eWlOOlF7eSomWU9COiY4Mmd9LntITmozMikvUnU/T0FfTml4TSw7VilqPHJkPlFZPmleZlFZdmBGYFgzVF9YZisxMTpQfShqKGMoKnx6eXV1UiJVIyp+XmAxI110LHs8XX48d349fW1FPFBhVGlTTWIy''@;'; put 'put ''L1VydV1WfikpLC4iczFfUm8/ZiEkbVBiPCg6VV5MInghNzE8M25keFpWRW9vPnkkWS8kZ3Y/P2ovTXE2QFR9Z2xfK2VJTURxRE5nW3ArVF04e0ZremsvW1M9UXRefEgsYExnNEpGSGhxQjNbc0YqfiRVSi4sTXZaJUpXczohezlPNExzYXZuYCRjXyRlWip+aXUwRlp9aFhGV0xGZEtlViN2R2Eo''@;'; put 'put ''JiVnL2szflBsdVNoL0JEMEwoTHk+KENJWnV5PGl7V35hTn5mOHcvPC9vWSZncyR7OWA2UEcwKiksRyEoSVIjKEhFTzZkc0plfTJKRWpTUFphNTAhZT9lcFZxaCFOLFgvOXlldX4oJk4wUjc6YD9eSzVBX2xCUWN1dXk1V0V6VzhVdk9wO2tHWWo2bF4kez9EVS9YKCtfazNfOWJvTGdzcj1Mc0Bx''@;'; put 'put ''TW5AQl58Ris1fTBIeDE/PntvW3wwKz18YUN2ejN3IjFPTXBMSj4rMD1HZTsjNEdhWCV9QDBxMmY9SkhZTDJLKGJ0KztvdFdqPjN8dTh2TXdkLmtOalVpVVFHdTswL09gXjdQczQiLG94Slo+VjojSSgkWUR0fjtDPDUoQyQwcmlWdj5CM08xaSE5OXp2dEIwTytQbXlRIVI4WT5Ne2I5WlNzcz8m''@;'; put 'put ''fk4/P0ZYUGEvTm9PVihyIllwclRJO000Wn1dLFdJTXJmRVd5Tnl1N1spYW1hKyguJnV3Tno/Z35kTW00JXghQkNTVkgsTiV1d1tMKXA/RlcpQU9bNXREZG94Z3YhKkl3WGFaTCJ1WUNFUzJ9ciYkUEdNInJNPVghYj1gQ3kkcGQhKDlpOlEpV0BpMzRSW2xuL2oxbywlakJAbmYsS0B9UzR3MT9p''@;'; put 'put ''NltdVGJPPCNSY3t6VFgmSFBgKXVzRV9xPEYqVXUvP008YjxYPFJuemUmO2A6Tl1xW1RlL1gpa3R5e35WbSVpKUt0RmBGMWZjUGU1Vk5PXntPbG5IQzUmPUt8KXVseHZHUis6TClxTTlzTi56S3xwQmVAVSk+QTJFPWRJS2kqb2RjaDhnZ3tfUzc7U2VUdzc3R0s7MTd1NTZpZHhwPD9jcyI8dDFR''@;'; put 'put ''XTxMWDBMRDhAcTprT3Qwb3RfcixLfEckLi8ma1pINl80bmE/L2k/V3ZreGkqIix9dT1nNDZXaTpXbjxgKGN3JSlTVlVCK3Y1WTVBQjR7dXVeIlc7UFNvPGUoK21Van01KChgPlVQI2NtfE9iPXFWYVQuJHI6byZFOUsvW0hpVUhSQCZ+dUs1YEtNQnxGVlg7TUkwMUk1NCk1KEBPaW4mMWlhTjdd''@;'; put 'put ''ZE5pPUFHVlgkLm5+WHA2LDx+KykwQnslPiVuTWpKd1JCO0VxKGI6XjFiNFdmI11GQTZFWjwmc31BcFVsWCRmInVVUyVvfm9KfTEmIldUejJkXS59SiwqPXlfWDNsJHwpPGNIaG5DXW8sWDFmbEw6fW5bS35hZz5jVn1YYjo0eis9O3JZeDZ0VXRpWXJ9ZSExa3M4WGlqM3ZZe0V9SFhpakFYe1F7''@;'; put 'put ''dWIkQU5fPXVHK0xRQip0JV9OdkVMSGgsQU8oP3NSVEMxam4ja1JtPmg/cTZmTkoyW3JiJWo3bls+bl5iMU92KmlsU2d5SXk/O3NNIzhlbDBTSXczayQ5X1RsQjA/cFYyfH1lTyEmaGZZXUNvNyJob2BwVyx1K2UlZ2gvek1DdyFNOTQ/Q3xCPEM6T3ZPdiY6dUx6QFpqYSxecVgoV2JAekliZyF1''@;'; put 'put ''PCQvaDg1KjBrRTBCR2tHbVBWeFRWQEdqWSpDdGlsOHImJDAodSQ3T2VwclRFSTdOfk41XzgzUSkqNCpPelFoJFBUTUw9IiJwdDJDe3xwMHBCJjw5WGxtdFowTV5KXk9UPlNiaUghYDlCX3h5MSk6U3B8YCV0dSJoNmw9RHRAKENhXzBfaSldQkdkKkQiX1Rffjw6STVEb200aWkyTWIqOls/QGh4''@;'; put 'put ''aW1FdkE4QEs/QGhCNjFScUNtdDd1dDglaExmUm07VVQoaF04IyYwJUQ1SHZeOyhefiJBIl5mZCkzI2V7ZTl1blg/ZGJiYilFYT1kZE5IKi8vaEk4eW5vL0NfKkw0diF0SlU3UnN0Vld8RDx7SF01YmJ4IW59WU1BJlFSe3c4T3pSSDxKS2c1WmMoNHwsQiMpUHNOSDZZMDJuRFlMP3xlTz9Adj0p''@;'; put 'put ''O0xAKkdESFUyU2tAejEoNWBrXylnKV5WRWEsWSZfXSJVX1JvU11WbGhabVddQ08/Ni9DISZqMG4lbkZhfTZCPWBuYjUmZEdrcGVVbSMqW0llcmx5cXE9LlgkbHF+NFJvQXxhfUtDTnp4UWA2OkpkP0hfY005X0RPfis3dll1bmN5SUJObFdddCZ0On5oLChXczBQSjtCeFlmMGo9fWVLN1RfVF8p''@;'; put 'put ''M0x8OWxRWmdrUVRIYSlGPWFkUlsqdWx3UHQ/P0NkIVF2IXZQZnMpL21lezx6dHEkVWYjdT52O35ASUhCbTZ1KkFAT11kSm4hPzQwLmZOayVQYV55MT1Pa0JDbWBXcWtwbEtKP2ZxMG1qOnNRLiQsKy9mKlMsQyt7KEk+b3VuUVRQZD8uS1A8Ql4xSkNUKW48aCl+aFthJjhPZEt3dWZ8M1FfRVNN''@;'; put 'put ''dHtuI1o5encscmlqdU1EZCF+b3wmOz9dOHpJPm82YFheRD9FQnpASWRlKkZabyY+b0p0QlQ/SVU/cGtkN2xYSGM6TWlUTDF9fFRMUlU+S35rYk49QlFnNWU2ZjpSeDp+Kk1XYjc0Y11HQ307ImV5e0JPW0hAIiM/W1k1NXFfJClVeT16TUFJQXFTSlNZVlJ0ZkxlS1lJdzhffnVXNnkyUSxRK2hf''@;'; put 'put ''Kl5hXjUpcG51T0Zecy5daX1ESzQzY3BjQ2B8YUV3OE8kYG0wW1lTbkN1fFNtZSxOZThXRVtdJWtAcTwjNyxRbWFXTVEzcngrPH5nUy9bPCkhVkhnOHIzZ1o3KmoqYDlzPW9bUGVqdTN1bW4wNUAzO29SX0pRcVsqI0wuSzh6NTddSDs0eT4kRDQ8fDRwa1RSSH0vcmpFYjk6dzF1RWNQYDMrPnpv''@;'; put 'put ''M0ZDUjp9VVcqNDtyfmJYbCFOOGBHPEx8OkcoSUVqWUZzJTxuKDVVb086PjdZc2VdQ0NISFlaaHg8UU9LX0xaQ1BYaGZxMDxgYHcjYnpwUXg7MkFpUnQyOnI6WGU1MmBkNz4zTGl1dkxgRE92eXAlXV5ZdztTI2lyMyl6KGBeNCk+IntyWXpmNDF8JFg3bS8vfEc5eyJTQFA3WTNCVVUkaSNIc0s2''@;'; put 'put ''bC9DZXxhfDhHW0JCPS9GNypVeUxrSytJJmtINHdYUHZoTyFfSH1wSytOXkFhb3hZVEhaZUxZRjdFaUhmTVdbbVRmdCZWOEBzLzxNLzs4citMSj50MXZMIUlaeE9HWlg7Szp8UlZgeT1aMmVMUHJvZyNOP2xGZUhsNCY1XyFITFVTMi9bWzMrdDYwQkxefWtxTDArVXBYLDdSNHoxMU9CTHp4UWBG''@;'; put 'put ''X2s9fHV1a3dPVDxobXh0SzhQK0RgSnhrSFc/QkxiXkxRUV9FIT1YbWtzZmpQRG9vciomM2J2RzAuYjBGPTM5bEpdejg0OTw8cF0lXSYleHw1L1VTUUU4T3lSSGYzKSZTWko3eDIpPVosRixVcnU5X0tAXT1RfT9fTDleVVgme0tVfkw6cW1nWXhPd197Rj11Z3JMZkQ9ejlhJnJFN1FKPDt5OV84''@;'; put 'put ''Iz9HNklsUGQkWlkhLzhPVWd0PG4kW181QyR9fXhafUJuaFB1YEg3QTxlVjE7TmUxMGUwamp6U0ZQTzYzZmFJNFtXeTRwJn5yNj5qInQ+NSJtNGYjUkImeSgvJWdLT0k7VEV5NXtYaDciN2Vob190KVB9fTlvJXAvL2EuXjkqfDF3LnlmIWZleThPR0hYYHVPIV1rblgwVDNxOn1HOns3TVFsezVa''@;'; put 'put ''MjQ4cVJnX3BMSyxBL0hORHE4Ml8wU2Nva01tUn4oMG0qLH0oOExSdUE6QFpfI3xWL1BVUzxEazBZaDtPLEExTnBAVm07OlRwOTF4aUR+Wz4qZCZxT1NCRTRDUiUuVk5JQiNxNm1vP31OWCE3aHVROmdydUlpUH1meDZ3WyZ8QmJnMShmN2FUXzo7KzZ2cm5vQHhuMUEjL21FL0pIXWZsR30jR2RT''@;'; put 'put ''SlBHXVdhfWAhZTJsXlFmYzdyMVVHaEYkcCRYK2BUSSVYOiVqITgmVn0kMFRGIVsvL1c1PzwiPkJZZlBhZSpyeHs3LFlNP29MQHI+JWU9QF42ckovVXlkQDs/XUI7Q0BpUXVGTCFhcXM/WiRzSDdZNkJCIWB2SmBVPkMufGVrZ1QiR0A2MUkvSEdFdSgseE0oLGdeZkZ2VjF+XjMxPTQ0bmRhcCk9''@;'; put 'put ''MG1aYHApdE97UkVmRzs1Sj42MSVAcWpsfTtCYnJ1MEltUUk6S1lWKU8la1hGY3BHXlZ0MEVad1kicXAlLzBrK0laZUpocTxmYm9GYXhiMUlDPHBGVyQpIWNoKDxjKmV9TVdAWCUrVk9UfXNUXTl2eU1SYW4vTXQ4V3x9ZVtrLlFCbXNFc2lxWlhpLCEiWHBnPmglUHdfdkxDPGNjSHN8b2pTJDd+''@;'; put 'put ''ZUpiUUAoRE04fDVEQWc7QnVzKTwlIyI4cFoiUGFvSjs1WVFTQStYWVJ1N14jeTtfeltXMjR0Rk1uOz5RUlo+WWYwfDhPKXxoSko2NiEuJXE0bypVTCl8Yjc3Xlk+SE5haU06OTYkTV0pLCtpMHl5SV5ReH1AMl0uS0haNWxUQ20vK2hbLj9qYkhzI2BsfCx1ekppTDlzbDJGc08lTGJBOGVIcmtG''@;'; put 'put ''KyFUKzUvcj9UIlYrNHFkUDZQWSFHbThDLm0vbkFsWk9kN3phTDNLdWhGNUAyQEdrIUpGdj4oOWkmTmY6TjlgQ1E7MHxVTDNULkg3YlVTXjAzWm9dQEQ4OFZaIjYpQH5IfE1qfSJTJjQxI2FkVHZPK2BjZzBobXZ4UlRwcyRzcS56NnJWOkw0bzkzQktyVjo7PGBnSmVkRnVNcypRT09rZD06e0xB''@;'; put 'put ''YXdOfFoiR00lPmksOjxnVzVFcktmPC4jWU0lfU1eWjJ9YGgzMlBCXTVFci5YRVtjO2lOSUl5UllGdVEvUSJONmRgQCxhSGZ+dEwvUl8je01LVy9fN1BgcVchNzYreiQhN3w1dGBNYE1AKDQua1o+Wi4zLkFXc2hkLG5UeXdgYHF4fSI2VUpeKSpKNVczNiZEek5oPnl6dnM4V1NPR2Vva3R1eXwx''@;'; put 'put ''TGI2O3V6UnR6ekZKIWJTUTFIRmwsblg5MXVmeXMubXtmTFpqKjl2M3RkUFooOUlOZEEpeShBYSlvKTp3X0A7XUZ2PWdsLGl2b3NDeUl7IUtCME41bmdBLmlVYi5UU1s5eDE5b3crJU1uejFkaypRaWdjJCVXKiVZVVdTU344WSNYTlhMNGMhVTtyJT1sdmQjdnQyUXVFXXdgKGBCOmtCXjFIZmlz''@;'; put 'put ''WCMqbV5BTTxtKlopSXJSXm9odlUzKipFWjBpPk81TDkqaG1FN2NtISVxcCNoaXshJWVoMWkzMj44X1Z7I2h8S2dLOyI7cXglU1R6eyhyfmxFLlhNR05SaGU/bEdyOSZsRGYmNDhOWXxqZXhINjImfEI4aCRKdEhTdlRlYjhyaGRPTD4zMXxxSkh3UjhLU3k0a292dls/dHYySWtuY0NQZDd9bU1A''@;'; put 'put ''RkQvTU0+VToxWiRNXmhFRz1CSCglXVJ3Tl88aDhZLzVRYyJdNlRZUV5OTUlhYF5LIldbMDF3JTx0MUcwdHtnJnE8PnRYIXRbYTN6WEFsfWhbSHk/YnlXIkowQyR4VXd7VSg0Y1RZOmhxcGJ5ZF5TKTY/TH1sXVBiMCg8Jjg5WGJ4OVBrMHAvTjIxW2csRHt1RHNXTVR9SUpPdWJEUHJaYDpvdixA''@;'; put 'put ''S2t9RnYkZiN9dSthcyNVRFMlcHtMeHEieW9Zbi98OXUiVVg2NnI7a0RyYng5UHV9Q0AwZXRNWXMsJWo7WFZbWTA/LyNHYmw1STE0VCljWUd2Z0ZXUCwwelkyckVtJFk5N3pPdTBhciZnUCEibT97IXttL0lxcyZ4eyQ6fFtYPTxzQE1mfktGZ34qMEFwMW4zdzg1QFBBKVNSOUR9OWh7TXx1JS5Q''@;'; put 'put ''VEwvO3wpJWI7Vjw3Yzh7VFBLVVNpWFFObHw2Y2k7NUdZPmxdZ3s0Y05SanE/Syx7enJYSSJvL00peW5mTyFseWFzbmBtaW85VUlyX0hTNjRAJVN+NTUiYHE0X2tvMm18L2pvLDxnQ355Yyg1TyYlNUx3WD44WztgVTEkUGdwcztVMVswJiU3am5RbjxtJndlMGwlZW9FdUhdXX17YyQ7bVFbMG0q''@;'; put 'put ''ek44amRlMmlHKzV8PHtbbnd4XmtaNmFYfm1tNVFieTxpXlBbLjN5RmxGaiE3Zk9jKTJRfkoqTXs8fEhGektLNXc/KFkmaUclTXpafUN8b3wpPmAzMHYjc2dRWVN+Rnk3T1MzclldV2BPWG5BVStkPV8hR1lESmJCfEA/JmVPJEJZMjxqYl4hIjB4Y2t7ZiVtNVkqVGkpUnZGQFhNOyM6bnFYPi5X''@;'; put 'put ''eVdjUExITyhfYk0pa2QoWVAxalZ3cT5xU1pZM1U3PkBBPz4wIl4kZXVIXzJ3ZU5lZyZ7biVQTSF7dVUoaGQkUEdkbGErPGhtWmdPXXhsdyFIcCtTWWZ4VVtmXT9uZiYlaDM9d3VGdCpLaV5zWV1oSENjQkx0M2lraz9dTSlVfDwiJTZjSGYoK0U6bTgsJTU5IVElXSFjcjlWUUpdbUl5I18wW24s''@;'; put 'put ''dDUvP1pNIS8vU19zKTchLyplJitAPEx3PEllIWpdPXx3UW8lZ1hwc2VpcTA4XTtUcFp1MF9IfFI4JTUlb2w+KFYjVUptZ0UkI2hgVisoQEA2dTEwP20/ZzA7K0d7OTg6ZyFvbzltPTpwczsyVlEjfjJeSUJQSmluY3Uva0AwWVk3fkFgQDp6WDJ0Mn4vZFU5d100fSNBZSZIW10lYCNLJDB0cnxQ''@;'; put 'put ''QzhwUGh8KVg4PG19QzRnQkB7dyNGVytvZW4kPWxxZEszQ0lQITkoX3EmbCVreyQ2JTF6ODVAIXBpckNwQzh0ZVh9NnVrTz8vci84OTsuXjxEeFMjNEcvOFNzc2QrZUlQRHwwZSVjKD9VVCQwbF5QdytlYCQyNFk1cyQob1YiOnBZWGRPXi5RbixoUiltP1Y7KzUvV0IkR19MZSFIcjE5US8qc2U+''@;'; put 'put ''Jmw7SyNxI1MocnsjXXpkJCFuditjYi8hL2pMQUF2KEtPQyJ3RF9KdFpIekd1ZitQUDg9PEI9SiIrQE88THFgPVo3MWxYJSpdeTx2SUFBQUFBbEJAUVowdip9OGJwP11eaSFdNX4pMExXT0BUTT18YjkpbXFQe2RBWUF4UmZNQUVnXzdEUk44Z3h7Rm9VYjJ9NX0lR28jOHlJXjd+SzVIJmhzRjNx''@;'; put 'put ''LkNpWVFbOG9JY2IlZixPQl8wOypVbEB7Tmc1Y2VWSExXMGssekZIV0x2bUk9dHNuZ09FUjZpP1BQMUplbnBPLjchLiIoWlNLUm8yIWZuLlhRZXpQJGF8OTpxUGdSQ0EwKzV7IUxBRDRoK3diaEhDUz9FKG12dCt2MVZXdFQyOih4akwjRH1pUXQ9SVtMeWRnQnMqSSRhbmIyXj9YVj1EbnUmTDZ1''@;'; put 'put ''UTxObTlJUF41JHpifUUiM2NbSH12N1pbZnh4Z0hySTVVYzJyakNuKX59fTJMSyZKTDBtMTRwUEteeU94PHtSVko4WVpSYmRdfSNUVSYmNXlST0k/P1guNmw7RHdvQVVUUmNwezFQPV9XWHZHSmE9T0dXLnVwfl5ALn0hJHF3ZGttIip7MVEpIVs/YEA0ZGNkW0h3I0p2TWkuVmVmSnpKWjFHSD1X''@;'; put 'put ''U1RXcjlrPCtLSHxfPyFYJWJpJDB3Sz9iKXhjRXgsb0dfbGwoa3cxKEtwQFRkMCx9dSNJS050KzBaRktJT0FnTDdULmtPZzl6UGozUjlLYX1YYTRVNlp4ND1FZX5EPiMsSFZRX1ROemZSL3I+KThKbE81e0JfXVpiSk1bSFMra2QzO1ZnJTJJb3FMRmY8a2osMjs1M19+XV0oQ1NXb0BpMGIkc3Aq''@;'; put 'put ''YGJxP0JDQ1FHcF9aJXAlSE85dHgpIWR9Y1QyT3tafUohPVAqKjBfNGtjeV1TVEokLmhaPW5JKyZBY1AobzZUTEtvSEZIVC5qNDNYWSMoTzQ9JXRrZk9DKS5IdTZDeUllI314eUlLNkg3LGNRRnlHRlI9VTdQPHlqR2hnIkdXcVM5QSptXiV4ejpHYmhRVy9MO1FvZ3xvfSU0MWJ+c11gN1ZrQmlw''@;'; put 'put ''dEJrUWRJeH1IQjY0LmNeKVhaN3krL2ppNmA8P3pHdFspNWRYNiF4OWI+T0dfM0I1P1BtNWd7TlA+elZjY343TlBkKWskXWw6ZEU3bV1pKDhtK3pOOT9de3F3PTJGemUlbyRaSDRZczxwfUoqJVJVL10kMXZvQDhaQ35oezczbUZvZF13S0ZrPEZebzBvNz5AdDRdREVDazZzcnVHJS9JYiNIMjQq''@;'; put 'put ''MHlkcl5JNDU+NllEMzlaW3Y6Zk5qKUYkVXFfTXVdbEt1Tz8hXlFtdztdQzg5Lmh4cykhZHppY15ONE4mbStKYXtWTDY2V0xgSGVUVVdoIVB0cUR0WVszfiVsbV9wb3U9TGBiYl5ZTj4qaGRJPztSfW8wWiR5aTFJQzVZRXYjI1hud2FAdyU1XnFdP2VLK1p7SDwvR0lwJC54eTRbPH46ckxuMFpK''@;'; put 'put ''ZWZpP14jVXUkS0BWanlAWF9xbVY6Pjx+c0IzKHc6eFgvKlgkJTpoYjlSc1tFKSFoTmVSZDJHWmlnZypQPlclWEpQJlBdWXxEckZ7dXxKeDNnRFJ1KndjVF5zS0pAK0AzKmB3TTR2I0ZSeE9Udm1uKUQyS299R1paU2ElJjw3W0B5PVVFYSVdPTM0LF5UaHk/a3JoSGcvZ34uUHgveC9lWX5NUyMr''@;'; put 'put ''SH5beVojRWJfXW5JMn5XLjY2bzVDXUNXVVRJbXNIeTBAOlhBLFZ6Kn5UbFtiTGlORCxsP09ld09II0AvV25rIy9iKWl8Zno2Zy8xUzlkMl9EfT5nOjQib0pqPFRCV292OjFgJD5uaFFOViJZfWF8cEZFTT1XLyl2fCtDT2N6WDAjMm5nInh4eEVlTE9Pfi5dKl87P2d3TndbemlNVVpXXmtscihr''@;'; put 'put ''cXpeekFaTXQrT0x4I0lLaCRTRHdEWUAkMEZyRTh1InBLMyl+b1l4eW56P35NZ2JISTJZJTRzZ3t5RkdadClCKSo4SFYzUF1HZ25bb0x5NW9iemUpVWtMRVtTcWxYe0dPWEhmeUM3OVVnYFIvP0p3QSl5ZzdZTnV2bzsoO0JLTFo0Y21UVmsvN0F+T3dnZWo2Q094QjZWW3YpbHQ8cl1ecE5ra11a''@;'; put 'put ''cSlYUjhCWyVaM2hbST1CeVlrcCxsWkQyfn15e3pJS3hZOXo1U3RxIXlJZUwrXWpwTHlRdStKM3FhVHc5TywjLEY6aTRwQ3ZJdSJPVkxIYi9DIkg+VnMudnxQPi9ZXkBAT3QuX0YvVSgoTVFlcls+WSZHPWg5dU0/T1dHWDkjbUFEa05HX0tYTHlZa3R6UVJBeGxGYmo4ZF1+LG4scVZbcSFEO1RV''@;'; put 'put ''VF5+U3ZJMnMhZG5ERERhN0BsNj4pbTglQi5lOCN4ZkZXIU9wUytQaTVmMToyMUk8MmR3Nkg1dDRXRVh4L0MuRVdHalYpbCN6Ik5aWDYzVGksLERRR0VNMVNIJDNDbDBCVWBMaFFqenBdcmpYZFs1amkxJjQzU34oPU8xeCo4YH5Gd0c7XTxlXUhLVVFLemk5ODJKVSlxaSl8RltfVGwxeSk/YjNH''@;'; put 'put ''eCtqMixhYC5NYitvMm41TGpERjJ6USR1Kl9hLD0vfjdYeWlMUCVHKm9YVXFXfD5CamhCOW55aWdAKD1OVng/ZD5ZKSVxezNgKigwYVNMSSZJKVlPVnZWeylMdltCIkllbncmTy4rKTUqKyV8NmYzfi5ZOCJqY1gyR3cuNytTUUR2TVo4d05jUGF9XSIoRUcoUU5RNEosMS5ycEJlJildaSs6Tzt9''@;'; put 'put ''RjZiUyhkVXBxQ3B8XlYhNlFNKV9SSzBJc0BSWiJANHNAeD9AUzduRkREcyhrYSl5ZTY2QCx3ZmNqZ0E4XTpDNjZsdTwqOWgyK2NrbzAoR2J4OXxCfjlzNCU1RSxpbDJPZVJFd31DMylVZE5BZEYvUUpeLiRCTmQ8a0Uoa3k7SWEmJFBRaj0iLzF+NVZBcmBJK1h3XSk/QDQ0SCQ5SzB6NXRyKC4s''@;'; put 'put ''dWx7ZDtvTiQpJDVBdltrRldAaXY2RUlPSVRZSyV9cltHKzxtO3E2PUMpPldPP1olRlNqV0YzQmltYUJRZ3YzaHFgWGZaRXciLEhXR19+VGZ2K3V2MWQoUkRvbERfX3hRMnZzdj9xeix3ezlySUJgbm9FNEEpayVXNDY3Xjp9MjJrVmBaKiV7d3hBNzQySGdmODxYb09KaExtczs5OCNLbnpbcXBL''@;'; put 'put ''YkBaLCshWDRvUV9kNSphNGoyfiR2amxiaEdESFZ7Jn4pYDl4QVZFPjZGXk5IKVM1UXc7YFRqOXZgYD52TCo7UWBlK2p0Vj91UlVzOjppRTI+MSwoaTFXTEdbO2BWZ1U8OUlWSkU3JWJhaTEjeiE4flBbX0AoLE9GRm1GUyZzTG0pUl5jaWk/OlZuXiNnZSsmZFBZUXV7TnVDNm1zVjJeM2B2PCsh''@;'; put 'put ''VXlxJGE1dzN0P15iKE9ocGteMTF6UE0lZllRP2VvNDspJX4iKkJEfjR3QCFuWyMuQGZpJVUoLGpSQy95TGtTU3ZHKy5YKlZRRz0rcE0pcFlNYmJkPkd2ayF8WjpkN24vQFR5R3JTdXg8N1BKT0xKMnVKKSg9d3dPPjBmIT9FeDN5OTNTeHl2VXlkLyMoSVF8VSZlakAqLmx6QVNQXVJoK0lzelVZ''@;'; put 'put ''em8qKl1hYGhfQ1s3biU6SyJBOmp3MGBkPVlIITg/OENvOm9deUNhUmd7SnwrX1ZLeEpFRmc0aW0kXk1UWlFbTSNJPXh+akNjOTI/SHNnXktSYTxTdjpCI35AYDEoS2xZfSI7QUl4WEFoSlhNdD9HM3N4TyQrTFpMQEJfVExUZ1ZSYlF5ZHN9MiI8M10+TE92OEJ9fGtLczBwdSkhLFNpIjkpSFVj''@;'; put 'put ''R3leVF9APVpta1RSdCJtJlJvRER3dmo9VT52On1xZHRJe3J6eT0uXzhXRDdacHRJbk4/Z2p4TGsiUDJLNj5dXjwzJWo2P2UsYmk/ZEwoc1FbNURgPm5mOUV0d1d5M0UlWnxzPXBpXT5MS21TY2JncSZJZXR6ekB2eWVqRCFlNX5WWHZ4YXc9Xzhlbjtsclg5a0BufHIlSkVXKHptSH1hOFt6RWJq''@;'; put 'put ''V1Y9WltgKClAWV9PUT0oW1IpSTteNGhGU0RhNlAyRllmTHsyN25+endYa2U7cmJoNzdAbnxFemk1d2U1WUR1MEcmIlM6PDc4YTMvY1t4L1h1P1dXT3k7LyNyWWR3IU1NMi88fl56LktCMjR2fXZLNW8+JC5sfTFzJUZpJnpiaFNMd1Q0IVp6ekl4VDFdV1AvM2F0NmwhYHRDR1N0dmREPCspT3lE''@;'; put 'put ''I1dYJCNbWEJCImJ9WylFXVIlb3xaeiprKUJhOl8iJn5CWXJKYWM8dikxQmc/WW9IMDtReGd7ODRgQW8lSD5lSGg0ayJJdEJlW2Y3aG1XeT9xJkMjWF4rZVNWWXlZTkUmO0siZTs+bHhWJFV5biw/YikjMzN2Ty9fPl4kbllURCIiWnBjU15sVV98Vj0xeENsYjVANEtkTztaKHJfKTFGLHpFKVk+''@;'; put 'put ''diNERlVQMjFoLztuaGEvS0tjIzkqQzFtekEjNGRoLHNWSnlZdHdITTRGYEo4Ty56X3dZbHtkU3lYIXxMKllBSm8oTzl+MmhaLDR6UEY/JipjPzovPFIuRVJmWjFwdUMyJCkpMWNYWDgjeyU6QlRZM2UhYDk7SyFAP2AlWS9KQ31Ca1pwPEYuPTghOWs9W099OlY1SnJZPklIMVdXbnBmQHI0Ijww''@;'; put 'put ''KEJhfEp9U11SU3dmVyZHSiQ1VnNpcWkxZExjPHJfRFJ3XV9Zak1NdzJ+eC54alVsRks3KSlyOy59VHxXcmxxdj0lUlpweUBUd1Z1IX5GTE9gSyRAeEdkKGtmPlQmQWFJOFJYbWFMPGRzOXNpWkdHK2ghQkpiNE5lUThHY3hGWHBEMTNzUSs6fEIzXyFjNzZUfixhXlR3bntAT110cnlMeWI3VkVC''@;'; put 'put ''c2ZaVl8pNH5obVYkZTtCZzFSP2VAOl8sZzRGaVtYUWpvb3h1dHsuXmshMiNSamdZSWhqK3NKTmp0dDFUNVQiYXJtIWw1KnsqV2ZtYCw+dG1iKEtALDR6ZDJUJDVFOzBDIkdddGIyRUw8cHJnO28lanFqaVRtVUYub3J8Rz9aMCVIcnx8fXRuI31MblVRcnpfR3k5bTpjWnpsbFEzV2h8cltCM29f''@;'; put 'put ''e2VIKVpPUFphZzNVZmlXd1hJN1g3QDYiQzJmLjRAVXVISzEhNVVWJlFDVGpOOF8rfVRhanlhbCFbNDZMN1cvR1dSL1N6RyNOYTh7c04zSj8vfFg8W3xCJUVWcW1PaS4/QypHTHBsWD9odiUyUTBlb1JlaEJCPkRzZHU4cFk8ayw7Qnw0X1Y0VCo+d1ZPdngpUjEoUz02Nkw7UV1+N0xSZ2VjWGB0''@;'; put 'put ''Xyw2VHYyZHhQME4vMWV9VSN9QTtVRDViQStySXFaTmMlSlpFcXE9UiEmPFk4fkRMLG95Xmhodkl4a3wmc2MsdUBWPV07Wy5ZVHdgcV5xMml6ditaYnY8VHsvY1VTQUJ0azBMKmBmT2t6ZG1KeHE0Rm9pKkhvQF8kPy4pZExGRFEzSypaeXtXRkFWczF7YnE2PTVzLnxyV3B0XW1uOGxqbHh1dz9w''@;'; put 'put ''I3N7RkRQfiJ3KV0zVig4NT5NZWI2KTVDel5rPzxjTWBRJFlTQ0deREM0eWJScH1OaT4rKlh2YGFyTmxTNyksMk95UENkRjQ3K2RtRVA/b3ZiQzNDJltQeHtzP2IuPStfSS83b3F6OUx0Rj5nTUU4ZD86SkpPKF1uaWU0fk1fYn1FdDQwdSQlWC9+d2YucVY6ZnZKXXFAJDdJcl54SHs4OUgjI2pw''@;'; put 'put ''VDskUiI4W3MmOiIyWisjPGVwPiovZUgvUjpmalp0IykoRm41Y1JEKWJATGh8OipSRHJkKEZ6Vl9pXUdGKE4xXTt0Mm1gQm42MmxLXUZLcXkpX1tkfFFeakVKMms9MS5RPjM2bmF6QWsqKUZAL3Z7Mm1pdnFgMy95Q1pWKH13VVJzUlYvImU3eCxXJUs9KkRpOXE9QENYZzl3cCgmMzpOP1tSa104''@;'; put 'put ''dWtaVGosPk4sRFkrSVdRW2tXYU1qZDJRSCt8R2UqdzdVPmRNYVB8SWVFNncvIlArVyZmQGU5P1hkQVRiY3lKOXpIJF1MaE4xRnY9Tio3fS5IVlFZNkVKJlM5L01genc2eSo2Kl1iO2krM19SWyVbdjZDNjxneCNMVWtzW3pLNGFobEV+XmUlcztranRQRz4mSXUoPEJHL2FpfnlfTzNiWEU4L1lF''@;'; put 'put ''UUxEQ3ZsQzhNcDZyY3l3PypNZCxFKXN6YkxPdS9FbDs7T0pbPGN0dzQ1LmR1OWR6Uy5aOVU3bTBzMHsrQ2xnWkFsJihPLksiPGBOT1kyYXhFZTIzV25VXXIqcU8iTTE9RzNEfj50RnxVP0BjKCEjOFBocFp4fnl3QndMcWRuby94aVBbKy9oOGJgJHFQUU84XTx8L0JsYiMqdlB3OildN3IsUSp+''@;'; put 'put ''N0c6WkNtLzxDe3RHUVhuTVFvLmxybCVzWG8mT0lXcUZNZ0tINypWTCxYSHBZMWlIXXl1VWhIUWxxQ0JAZCEqImBadk1qVWk1Il5rJWV4b3ZCWldnInhUcylAaWh5RW99TSlVcV0iczI4bEdJMj87Ml12RHFPUWNMKntzIiohbDU/SE40fWtsfiQ0eUtDYy5CQldaXnFTPEgkZSU/VmVDQmZnIn1r''@;'; put 'put ''Mk9mOGw+KHcmUVNFdmI8OzVtQShTakYpSHMzMmYvXmV1REJXJTd0VSpZKHMjeUVKWG48TExtSUtiOkFxK15wMG5sOnV2TF9rMWtBcXUpaCx3WnwjK1A7ZUx6TkdHNEVjNUJVVz1abTx6dzZaT3U2ViNUTEprVGQxPDs0V2QpMG94S0FBU2pUV1NiTlswbHxxUTU2ZjQ7Vmk7YCJDb0BNdnQiUmph''@;'; put 'put ''ajh+QWFHI1dgM04qMG5iTU90S3FeKytpJkI9O1Z3OzU3YTxfWjZKLHp2PTo8ZzlefFtvbUdjaWM8bCw6KSs5Zl1MZiZPMUszZ15vSDovdHovOTo4VUljJH0lIVkwS08uczRnaFU1LylAViU9I3A0Xj9pfCtnSHg+NldpVkQsRypyZl9aVThnWil0XXtUdD9Qe2pwYWp5Vz5ZUjtyZV9mWW5CNmBL''@;'; put 'put ''L2pQd2E/SHN2cnNKNzx6b0dYaXRpKjFfSDZSUk13ZF1iJH42Y1NsaHR2PV9DV3lUTkBGZHtIUitBQ2BMRWUxR3kra34uPUtuJjQ0MyVsVjA3anJPQUspUDRdPCk9I0E3ZisiYzNRSyomczosXk9MIn4wX2N2ZSZmUF1dQylmVkxlUXdQaU9xTEkpbT9Me2pHU2pdKTY3a10kUVlfNUlxamEpMiE8''@;'; put 'put ''TXsramh6Q0EwQUhRfEY8OGBZY2ArJiEmVEJqVWIhTWJ7I0RbSDE6ZU8iW2IqKmk2flR0eip7JkxhdnV5ODYuWFZGYldsREYhIV0kVU41NWx0Tyk/cDdTSFc4WW0vRnw8PipMQXJnflZHX3N4YSlpZio2Zz1oYDM1Tz1MZlMvY3pLJjhDKjhlU1o1eSpkXXA3WmRHOTp1PTVrI1Rebyw9bStoKHIx''@;'; put 'put ''JXdTSVMhLHxzMEguQjJ1JmlELCZ9XXMibXE2X0hDakZ6OnR5Um5iX2swQCFCRGZeMi5xXT9fSS49Y0IiTz4+VUBLKUY9Z2UvcmcuejJtZ0dPXkkqM1swV3JQTCQxTyMkcG1Mb3FDaEMkOVdofUNmTkUlZDs+U3slcih4RiU6XmQ1NTRKYH5PUi47LkF9filXI0heNzJUcmR5RGsvPTZZQDZYfT0q''@;'; put 'put ''dU1naj09R0ssZ1U+cUk8W2ByV2h2XktUMns8WU0sdEx2WVYsdzVuUDh7LDo2cmFRJHtlNC4zJDArdXdKRkZ+Y0hUb1ZEPGJaNl9dZSspT20xXXl1fEFLMTFzUH5Dcng6X0JsRzU3KztGP0lYKkRoMFdxTkBQTCR7NzNrJWgpT0crO090UVVKW218VHQ2XU1HcSZTbz4lYVdZLDdhUFJqejAiKXxC''@;'; put 'put ''XkQ4dzUjLDhrXyVqUEU0JjJ3Xy9fcz9GIndjSEJGWWM4fUw0N0xXaHdoc1B2L0V2bmtPdSNZNmpuOXBIdXlxMVI3RTlRd0FtTHt3Q2F7ZSpQSV1jdUQqd0h7azh9PlRFXUFKMCw6KiRhc2YySDA7SVJ6ZTxaYzg1VytVczZ7I3Z8RiVjVH4vPG8+ISpjV08mQEYkdUx3Xi9VT2IoJXZPUDNuK3cx''@;'; put 'put ''fks1KnJhMnFVYlswNUNTR3V8NDoxYXUiWVZ8dFdgZmtSVE08MFclPHdfUlRjPn1lRSVXKFlzQ09GaEFbT15NNitQSHEqR3FISCpGWklrTUhqK3J+ZGJqNl1HMlN7alI9bj9pbHVHJUxQLGgyeUp4aEIiMml6KnYiPyZMOWhQJTUxTkB7bUk8ajdBemVBZHdyaEcoSjZvTT8qbWgyQyFHZEJDXzti''@;'; put 'put ''K0wiRUR2Y0xpVC9hYEVPTFhMUT1SIXt9YVArXkhqLzRgQ1sxRk9RWmV5VTpUUjp4Y2MpfU97K0Z4d3ZQdG9XZWtFV28mcHlnRnIvOn1QLzJoSFJqdC5GTS56WTYwK3UyUm1aYFEuZzdhQG07LkRBM19FPTh5dTZFQWdQe2pMOCRgV05IfDJ8XlY/SkVbblplRFMwR2N3WVpTUUohMkVVblA4Tztl''@;'; put 'put ''aDE1fWAwPzJUWDV6ZFsmJkxyJD5TKlFESSgwNjlRV2A3OGgzVnA/a11qRCJ3MHAxXTtyczM7PVs9T0kzaSgybFh5alEpRDZ0SWJCLy5hXXxXNjk4XzQjP15LKTdxRHFfOV0mYWI8Uk07bWM7SSZpPVddOF5fajlnMzI5QnxoaGo7bCxPRy5Ze2I4ezNYVUtKT3Y3en04azIvcG5hOHFzY0ddMWAq''@;'; put 'put ''JmZLVGp2LDslQmhwX3EqW1FubjFbTyI8U3p8WDgub1l4XmFFV0MybWJ3TlYjSSIsendtbmlLe1pMKCt2PFJKZGJUbUAlemVqX2s6PFJaYVZBVWw1VHtAVyUpJT1OIUNfX2x6dn1SQ3VVTSRyTl11PT0qZ3BEWXdEUE9dPyVpUmlAQkZ5Z0NUNSFkUnc5YzksYHJ4XyEsLzx8aS4/YWFqQ3JQIlM0''@;'; put 'put ''Vm90LDoufFlAR1ZeX3V9fUJnQ05+czk9fXI2Ukp3X3ZuSD1oMTBLSzBAMDMyX31bdzVgQGI+NHFhcztUYCRQaV06RUQxOXRUPypBVDNEQDNIKmd5Snp+STldem8yKiJHezVtOklBM15zJDxHa1YuaSplb084c2o1YzNPRm4uLik/e1tUWT56by5DcT9jaWgxIXJNQCl3ODdgTV1KQVluUko6LEtC''@;'; put 'put ''d3lZOlNWck1qSjkkW3dEI3MufHgmWjxDYWQ+aHwpKi8vIjRCW3NaX0pGQjU5TzwmT2Q/ajdXMCo2dHBgeDlHanYkbzhsQHh1bU5HLCg2OE9taDxvNzhZQlo6fSZIO1tATzFaeSNIfEssKC9qamVGNFJiekY7dkpWVSYoQDtBQUZZbVgiYVBidW95YGcuJlthMSp3WCRaQTg4eWloPHF7dyJgQWs4''@;'; put 'put ''PDxDTTB4OyhtMT58WiZHRmM4dz89JEdERjFdXnNuT3p2bEwmUExqTGpsSzhwY1FxLkZffklrJHxgbH03VnIxZHRJI1FzIko4QnN9ZDl7PCVwQF51NVcrSzRlInNUaih9cyhKVEQjaUFKaUwsMS5QfmElfl1DOz9ATG8reVtmKntMYGFJO0s+WjNJUHFdOW97NFljMHpTP2hMUnBOQjtYLCMiU2Bi''@;'; put 'put ''MVRAVFJJS2tqc2g1KGZ6KW8heGszam1ifWNwKE0rZC4qa0wwO08zZzNqNzhSUTROUWpLRkBMOFQ5U0JUeFM3MCEmUH1tUWl1OSp3N3R1cVFOUzRXIlYlNH4wYyokfXFXLG0yRE8pOFM0R0JUN3BDRWQ8cj5oYm5aISZWIylESSNTUjw7cTZyMSJBdVluPFRofXxVenc9XWNjVWgmPTZ0cyQyckNq''@;'; put 'put ''IkU8Rz82TyEpeHxqS1Jsdi4xRU08dlNLSz1MZGY+bipuJCwlfHd2a0clXjomK2FiIm1oRGpOPHRGZ1NaWUB8ZzxHW3txUEFePVs0JS5xdmksUz51NU1vVlhtJUJhKU02MnFFYHh2czlCR1Y/eWw2LDsiZXg1PlU4dkVbfXpwdG5OdiM0OVQzcHNmdEdCL3A2W1Qie2ZNXiUwdEY0bS4hKE1JcWRZ''@;'; put 'put ''e2dGUSEzezdRLyUwX0U0TXVmJTBJWEVhUHpXd1s+aUhbRFM4V0V3cnR1XkVxSiYvNz8lIWZNSTchP00uRTkuZzVKUXFVNW0qVnFNeGZxeylaKG1eP2M2TlQ8JkdyVVJtJU18QDk6c3BzLnZIS01qUHZsIUQ+ai9hWmovcENhfE50RT0pU3NlSkhuJUQ9XWhtKnJwbnF2T0o3Xldea20+PncxeU5Q''@;'; put 'put ''MV1iYiNaeyRCVzlpNy9BKVtjdCl+RSRbcCprXTcqdD0ubWJOMiouTVtJdUJnY1l8fWtjVlVuNzZbWn57R3dxYWFAb0l4NTdXeHJeeHolVUZ4OEQ1OCo9VFBQdGJpVzp7SUBBK1lvZEojSkF4Ul5fL2MkVFFybUgsOGMpP005M30oXXx2VClBMzY+cWNdYGF9dGBqKiJ2d245KmtLdj9MQjY0OEc8''@;'; put 'put ''VDc5IVJrUXg5cHFUVHxGJTUlYyE5PTYzJXVyKkgjX3xySD05TE04NnJ+bW5ZPzU1anwqR157ZV8kTWwkbyt3ZVoyPWlgRElOQXgsKmdoJndiVWw6djd8VWIxdFhzZy9FM11rPiY0ail1ZkRMKS8yUU9mPzBIJHpOLFEvekRzV3E2Ojsmam1tVEcuU2lMQztzJVRjPSFjL3h6bzNIPTJKelJeREwm''@;'; put 'put ''OWVOektse28hUW99JCR8bXkpWlgleHBSelA+dDR3dSpPQ3p6WW9eaXAoM0lOVlAxTF9qfDdjeGhWb2hWdllhfiQ1PCRdV1p3K1E+aE5UIlhNdUVkSkdZR2p4LlcvVkg/YU1dZ30ifDU3QUNXMlhRXypab2Vocy8hWkRqVlBQI24ia1RhekkrbVoiXmBmKl9WelpsO2h4Vnl3UlpIITc9WmltQFJi''@;'; put 'put ''JEgiQUE1ez5aci5GW2RqVEA/VXd1RTE8Q0pZXWBdJVczKGtRXj9LQDw6ayJKWTE4PlNbfStkZ3M0SD5dKldeUko4YEghN0ZAYlFtVTo2a3ZvOyhiJDR5NkFPc10yc3Z2aXZpeUF6Yjk+XWRdLDckezl1JjQ7Vl9QW0g7fFdsPj1hLClnXThne0pIJmRgY151bGVwMCQ0X3E6e3hvLllEbToxR0Ah''@;'; put 'put ''dTlfbWU+cnEzNkZieE99TyUhU21dY1hFfEROVFpjXU5FcHoxLHI3eTVFVVBQQDd8QX1jYmZDaHc0U2o/OFRSfSFsR3NMfVpFYkl5TGszdzYqdD9lKUtLWnJuUWoiTUg6XWNSJm1QMitqTWEhV1JGVEYxaiIvTzB7TCVoOlpTWzUwemU+Ynt3WjNNTmBeeUcmeCE0Q3RIX1liLH1mUSgreDtILzZb''@;'; put 'put ''ZC5NYHtkcCJjPEUxPGo8RnUzMXY0XVBQfjdLU1JjW2F5dDV2THA8NDNLNjJub31HLjJMN2pEQmZuXTleW1ttQi9DZ2FXOkd0NzNASHZdbFBAZ310fSFMQ34lQFU2JCpkQ2crWWl6ayZ9U0BCKyRFNWJzJmVpY1o2ZkoyUyNSJDN8aTFIQmZhSDBfWmhtSiF4QilMVGImSEd7U1ZRJXRDakZ0VlpP''@;'; put 'put ''JGpIJnlba1AhYUxedilNbFIsSWRJeDRydFtIYCw1KkM/NkdvKGt5QGFUZz9xPnFqJHB2WmYjM0h8TGJiOkh2YSpvK0JuP3MuMDdEPiFgWG8vbXdJbENTdz9oRlRufkJ0LFAldSosQihGbTJmbmhMOiN+Q2h6NSg4WHwyITVHYyRbYlp0fGJHZkFAZFhhXnQ7P0Y3cTg0ezhGIVs/cU9XQ147KmRC''@;'; put 'put ''aUJYS2FMQGBAPUQ2fFhDIiMzcXdZY2h+YiE7KHpiOnExVDksO19jTElFLjhRZ3M7JEdWfnhHTDooa3goTDgqXT9JZiVeS0MsbiJrcXhJInpXQ3lJUEJxeUNqPn4yQzRVREdJZmpfKjpLJD49KSw/fG92dykhOCNSRz9uLEdqfGhBQz40T0pJVk97R0F5VX1Md1t9e1BJfmB8X0VaVUdsSEleN3JQ''@;'; put 'put ''K3ZmLHx1UntvRn1uZVtzXSkqTDA3ZXpaOGBzIkpPWD1SXkoyOHBZJTV9OUVsfFF2PTowfCReaExoSkVyS2goc2VlMHIlfEt0aCRZUzZYRmgra2UsbyUlSjF7L3ZdX1R5ZE0xQWVpYjkhRyxwbSg4YG1NZk4sMDRUL2R9X15idU5oUXFXdGJPNmB1czdxfnliNH1FPjVTR2w5VEhWTWN4MDFWTjls''@;'; put 'put ''MDspbihrSGxVPn0vaml0UCpXVzUmVkFDZnc8YUdEMXl8MVcvVyR0NFEvJm9AZ1E/RzBlXnJPa3Y4eWk7SEl0KWdbT187ODZve1BtSm9MKkApOlU2eUw3fShbJVFSeT06NnIxK31NRlh1MS9IR31hZD5hKy8qS2Bne0pYJiRNMmx8X2R5TTdSTjV5d3pDayo6alhYeEJkIlkwdlpWKDdEYXA2KCNX''@;'; put 'put ''aFE/ejNqaVBBNSVVJnQiIVZMa09XLCkpeGl0cl9hNHFqPyxkfjV6Xy9qUDdGQyopbl8jfkRwOGc+UiZiK2FDe0NwWmxHaipPQyMpdHY/OGIzITBgKjFuKGR0eHgiPF1wcXRmZXxhWFMmOEZVe2pZdVhPXmZdLjZjO0s6e1dRTGc3LjcjTVpOV3R9SStPdGtHam5ENHNOZTU+N2JQKkdKNj0zSjBN''@;'; put 'put ''Z30reHNlOGpVP0wufXdlVzYsNDw/KlpgQEBHXlg7R2pzXWBacCw6Z340Ok9lRChuSVNBWT9pMXxvb05JLG9COFdQSEg6dnRSbEl7LC9Ue1V+Vn51STc9WVZrYDQ/MkhRMy9tL0xnXWliTmNtcVdQUXd6aV8zVVA1LnIxaXJEJTBqOn5oK1pnXnY3NnUpKXdMIUJZV0NRTFleTGltRWckbGRPTHFg''@;'; put 'put ''XX4vMVZSZnt1MmhJX30mRjFoIW5HNS96JWdSQjFxQEFLeW5QeXlGVFJHdH0hLCV4K0xgLG9OZVBjM1RMTmMsKDFyNUc5KSooQXAlJVMqTjFLLDx9Jms5IiZSPENUdng5bSR6YyozN0JjVTxJZkM4PythZXR3KnhzeTAwUWVKOG0ofGRIIzY4KTo/bSh9Y0pIPC5lKmFqR1N8IT4zKDV4TFZLYT5Q''@;'; put 'put ''ZSw6VjxXbk9ZLlZmUzB5cldxeHRkN0dRa2t+TDA/ZkdvRzJ7ZlhnOHdDVF1iT3MvaUoxcWZaUW4yMmU6Y3dGV1I9WllubDtuQ1FmZVBsZCRrUzhYcnlyfUgzaClfQFVbYz1aXndhbkB6XV8wOGZxWFtHeW5AMy9+RHxYNl8hdmYzfkw5YiJlKixjeXtQKEJgSURZWSplZzNtP2dmVkI6Om8uLnI9''@;'; put 'put ''VnkqYy5vWWxrKz4hRSJ2bENxTighdlV1eFtdfDBgamNOTy9IXipXdWtLWkhdKmAxYHsuUFtCdGBwZEV6MClpUXxqTzl9QkFDTClUZGIvem5oOilrSmRdNlZaNi5aSmVTZUNUVEtJVGh2UGFRVHRbbGEwN0whO0IrVTpEOzoheWFVeCZMISpUSCo4eCY7dWxzP2s0O1lJVkExOEMhak51XzU8NGRZ''@;'; put 'put ''b3dkdHNlNzlGbEl+bm87bHRwXUsvTjw8K25dPG9KODhgO0hEZ1tscnFOfl0jcTBMfjN2dTVCbH1qTFQuKHZWeSghWnN9QExzJkdLdnxNMjxZLCZSSFAiS0Z8by48OzFGSkZZdXxJeTc2VFoqZV88MjRhV1d6SXlrdTQwQldkTWVXSDxsaCFDZC5jO0ZvQ24yPF0wLkJKfFpvMTpHRD9qSjxKfV1p''@;'; put 'put ''bHkjSTE6UXhkMCZdfjt3ZWk4JjlqX0NDTXlFblB3NyVxQSk8VTd4YE5QZG5wV35GRl9CazR8Sn1GL0psenoxTyZBdUdHP0pQVjZ5YkBSSFQ/K2p9O0tPVk5SP2VDRjtFSWomK29VOzx3VjNIQyNyUT8zUEpgPTolV2M0PGwiY2U1cmYuTVpMdzNXd35CbnN5Z29SOzFQKWJbQiZtLHEuajI5MnJn''@;'; put 'put ''dTcvQFVMNlJNPTM+dlN5fCElT0MhdF1KZGswM3QxTyt6UldFUD51PCJ2VDBjbD9hXm5GO0xhUSV4OV90P2w0MWVFRU58eUk0KjE2aiJAWkhmNWdaWlR4JmFmYkgkVVNZKklNIW8ifTF+QX11cUBZOmJBP35FdkkzbXZQTy4wYjpNJG5HN0ZmIWRjYTo2NGR0bkZ1cFR0MWA8UiNqfk4uKT9rPFY1''@;'; put 'put ''cil0XjxXNT8+MnZRSUVYW0ZbNGZtKT9ycDYkNUQ5OUNBX1ZGTmxScjM6cjNgZnNXR3A4TFt6bXlMdj1Ne0t5eCYjbVVUd1plSnU0UXM3T3srW040fFpAWDJ4bkJxPClGRWxjJTJTKFJVfjhxWV55eXVWK1k6NW80JHxyeyIuTGo2Inp3RjhmK2FnUkt3bCg1cD90dGNuYElPcyRHU2ZHXjQ7JSFg''@;'; put 'put ''TWBHUjV8dUBQW0ppSVFwLFozbUAwK31oZlJIMyE0SmptRDdqTlhda0I9Mj09RndXInF6KHNaYWtzey9FYjRedGdqcj15dnUzVyR6NDhdJl1mQ0A4ZTRDRWVWUClhSU4kTCNpVDRXMlVzdXsmW2ROK1RqXyVtY3FGM0l3MikkMnZuPUc8PjJAMD1eelQ8LGpKN0hebW1MIkZuPDlDOHAjLyUwMXV0''@;'; put 'put ''JE5qNGUqM1ZPIW0jNDs/b3B5P1c9OlElLGBfJFo6bX4kfmghXUxpI2ZjIW9xe2d7PyN5eH5Gb1M2dEMqRnxQdG4oRilrSiEpI1s+JiQ2YDohZThXQm9oUj9eKmE6SHplTFBKK01JIjM6NjZ8Q11ERUx8al1SPGQ2RT9iOCMyYkZFPG5SQEgsb3gzIjtCLDgpZHhnUn17KnFFKDFAZDYkUno1Rk06''@;'; put 'put ''dEV2a3RLdUhdbyMzQUFEaDlDSCtjb00vUX51OThONntPNWt0YTZaTURqJC54MCskITJGL1FUdVtvNk5LVTIyb008UDokUz5KKy9KMDAuSE4hK30oT1dJTUl1QGUoT1ojVXlnbWhBUSY3aSZeQm5VX0RIKjJ+JiZUKnc4ZHdiUyxgPGZCOWI3I0dVaD5AaWxLIS5rJlMlZGRdLl1VR2E0ej1aPUxI''@;'; put 'put ''Sk9jb1lmbG1nbFdCQHtac2FTUComS1V1QyMxaUJNKHJvZyg1RWpfdj5gJSZDQyJfOTc/VDcwcTpgQnZGcnRkQXxlR0tAeStXQE5nMDVeOnxuKlJ7K001Rkh9W2dMUkl2fHhtJUJvUixmJG5vNUphfmQweyhAbUxuWW5hOXkxPWxPUXkvQi5Cd1YxRVRlXTEjNlk9bTdOMG9ZImdoInhtUlJQWmAj''@;'; put 'put ''TXRlLFNITDpjaHMhMVgwUVtTMWNOa2YwN0VaVjg8b1J0I0ZiUT1BKnxDX2Q3ajkmWzZ4P15PIipsPGY3X106K1RtUWc4eXQ6aS5zaTtBMHhvSFJALERCK0dMQ2Rsfmw8YXZUeVtlMnN1U2daazZvUCw1NDR4aDtiInFZakA1Wi4rV14ucC8kUXEjKyk+eyV2S1lfYSNBRyttJlZZfG5FQzsqelBM''@;'; put 'put ''I0pkdiF8QTF5blFCSn0qdC5RTmQ9KVNSPC5jRkpURGc/byF7bTlYJCVySWQ5ajlvZHlyTDM7fVUoOVV4R3AzWmpwUCpyZVY/QiJQWWUveSE0JFo9ak9qTCNgNTxpNzFHUiJyWFhBc310bytLblApTyFeKzQ4Kylbdk5LeiswfTxjOSE6JFJGNVhgL1pbKkZkME1OUFAyfFRyVU5SbTVVM0JKc3Ax''@;'; put 'put ''VGBYJWRmZVJBYTdIUFhrT05eeHteM01rImxOOGM1SGxGW2Nbb0A4KjQ/cCZLeiZjPSg7eVJ3TGRec2hlYyRTQ3U0S1I1azFIdGl4N3s0LnwuJVJWT2YpVCFDOU0hQi8oWmY7fVgzWHEiKSlzUSI0azRHSDIqaD57eSZmenNmVSMoYXwkfiQpPnFaU1M5NXNsdlo5eXtbNyhTLmAkSVVLOjFEP2Ax''@;'; put 'put ''V2tdSGB+JjV2dUl+cFNve0lrMG5XPUtgTyZiJiUyNDcqOkp9YEBLXVhvODdxcWE4NDF9RF49JHkrTDRzKk9YQDpodm42a3UhZ3svdzIqOlp3LmMwNUtHZE1nPXJiV0M6LkZxZW52ZjMhIzxHL0FgMEJ3S3w/VCF7IWhJKzZJNEZAd1QlSVZSUDo+L0hHdWhiNTR0PDM2QiY6PzRGcGNwOywyIWRz''@;'; put 'put ''OlJLfTwwTF17TDVvWlUpJWdPKVpGZ0R0L0VsMCUxSGF6cWJoTmxpd0hJP0w8PzwvakJCMGFNNlk5OmtNPkp9L1kpPHYuIz0meCZFNEUpTX1bZC9zPWRJRF96TSM3ZVJSX1JKZk1pUjUzZXF9M2o9aC8lQmM/fWJmNUQpczRJdjkuQS5lbytCVjVGdFAxcTxLQiJiL2Qoe1dRMEpAXTUmNTYzalpk''@;'; put 'put ''T2d7O3NBIjpFKHw7amk9MER4Ljw/SXg0OllgREpgaEN2MmE3WGJxJUQjfVlVOT91Ll5tW307LERnaj9hYzBveEVYM3Z4Kl4xancuMDgoO05SSHVZbTZFJSJhKmM0RkxkQkYjcDxXQVEjXyUkbGo5cTN0NjtmdXE2bCsrclN3SXt5ZS9ocXRkaEo6WkRnKWQ1W04yV1J4Ok4sWzI+TER3UW1aPU8q''@;'; put 'put ''WDFhXXdGMG9PW2NFYUVqN1FrRFY5LGcqPkYkWmU7RllBfCllN19pTyhUXyVCfCtFI0khUCJZQkVKKzlNbyJhbTYrL01RVTp1U04sS3c0c1AkbEduIXVJfTg3SktyeytAcjJpK2t4K1UvYSZxOGR1QH1RLitVZztsa2MsK3htOEl+Nz5XUz18ZSRTY0RJcHskXURMVExdaDxxbk5RX0BlfH1jIWJe''@;'; put 'put ''cD96eVZILDQpZUY8I1dIQlYvN01pPnBId2poZW0sWTEoMjZ3YHpRfEpoI3tHJX1ySnRYV2JWS357MF1jXiFocHtfd3dKRGI9RVEmbUxENyF8XiZBTSFwaV5VW1ombXhiZ1hXb0hKSn5SYUVORk4vNXIpLEZeOGNzZDAmPX1MWGJJYiw6cV4xUVU2RT48VHNDYXZlNWZSOGFmWzx2aSYvYFM0cjB+''@;'; put 'put ''YXxzLmFJMVFIS11VLkw1cDFCVWtYXlZebzBII0lwUH5fNytpPDNpRD50cllSO15qU2M2PXBjTHc1I28wfCxdMjE/UC86ZVVIfCNJN0spRFh0YSZyO2M3ekYzOSY+byQwK3UybisuT1VGQUpIPzEucE95P3hqK1VaWU0qaChFMCpSOU0sN3w5KSheXktde0UxPC8qL2tabmRhTUl2I3U6W1sxTEVV''@;'; put 'put ''UkdoImwrT1s2R3pmJU9jLF48fEVpXWVmUCtrUnVgKi5QaU51N3Ilcj1OeGRATkNuTGt6OWdidF0oXShpKCpCLmsvcjxPczpPZnV5d3AvOnNebnlDdDJRdndvWzxJNndVP0tDZHwlQzRXTG95Ok8xIzY5VD8oJlRwUzljN0xdLH55QVdhX0taeltLZ0xZSSEuR3dnW0ZyTG5hQiJ1fTlOJTV9LHZ0''@;'; put 'put ''Vio1e2NkRyo7Z00uNG1CbTR5VFN3Pl5LI2d8T3BCeXBLY2cvblVDQ1p1W3UvaytQVyZqUjJmTTVDJFpKRk1HQiIsRT08P3p8Py54Q0c6dzxaJUV7cVZpbWIhMSg2aHt9LDY2eGhVPCV6IXUpZW9WWSF6JlNueCVKa1Y+ciojITEsKHdTKz94JjZzT2pHLGFndXdUNDZ0bkkxcl1qMjQ5QStAd0VR''@;'; put 'put ''REVxRS9bI3BOUk82RFRXb1RRaERoS3hvay50Wiw7MGBtMWR3P2BxUz13fSpKTTFKS3d9LGcieFAkNk5VQDxNTzlOP2lodWhQLktWfnVSLzBfOW9SL3Ilcn47K1IhR2JfPDpVfENtNTUvVGttdS5sQGIvOltmUGI8M2hlaHFudiguV2ZOW1tGYWhsYlJwPkRaS0Q4WW4rSSI/aUtReUg2WWI9N35z''@;'; put 'put ''Vj8jYHRaQG1+OysxRiloWXpjb29jYWJHbGglKV4ibHEyITJzKytpQ3NWV1s6TTNzYUsrMTwrMVNkI28qRVgpeHRia0AyPnhdMm5ZUF1hNjRBRTVzbUk4XVRkQUdJfH4+UW9RTyJYPzlMMGdDXjQuY0sqTkZSZXpLcmVIYj1zKUkwNTM4bkAwWiNyISslPUgqazo+RSlPbzUydnJvdVQjSVJzVVM3''@;'; put 'put ''Om12dlhuO0pyb2txfCVAdkdNYSNvI3pKakhUdDA0IWh3Wz8iSGNvSnwwLkRRJXk4RzIqNjpkSDsvdXFjLElUXmF6eHs5MjJfTGg5YHdoOkNmVj1oeU94KXowW1JSdmJrLl03SFVAU3RbaTliZ2x+Wn58Py9pT1ouLyxOdWdxSTopWz8rLkx5ViwhWTB9NmUjM1QsVVpwQ216NjFmZjlSKXZRYVtG''@;'; put 'put ''PlI0SnJ9VU5PY314UWk3TTFFTj8/Qkd1aipLWCYrVVB5SXI8emdGW3g4TGtsaTBVY2hqLnR7dUJrX19PIjk9a2lgRS8oQml9QHcpKTo/dHl0fExRYXBvcFM4OWoubGJWTzA1MkhoSiU2REFQS3skZzlWKTwuLylyd088aisjKj14fjF2SGluRlhOYXFtd2t7Mj5DaEE+LHdpaV1zdSgxRWVJVkh1''@;'; put 'put ''NjMmMT9iM1B+T3tCe204WjxkbkZHTU8kOzVSbjg7e0V0JVh3TXQ+RjBOMX5EcU5JIiYkcyxsJDhVYENab3UyNX5XUVgrNzhUb3Znd3szQD5hPkxwKHtWOUw6a3dmWVhJMig0fn4uJW1MMiMxZ2Zffi81OzxFc0giQ0RkRHk+XUleWjd1UHAsZXc5aHx9W2wsMCFmfVF0XXsoZ1NDdVYxajBZTkYq''@;'; put 'put ''dndEOnhrQjswblsxQXMsW2BBUyksSm4pQHYpKFVAIlUmMXtZNUhPWWkzc2EzO2xpQjI1XyIjL0hKcyNKbj9bRVBUT05qWEt5e15LWzdjSTkkWEteJkR2PkVOTUN5JTN7ailqPzdxSzd9SX5sbF5dXXh+Qlh4JXpEbHVCWUczaUdINmUveithfXc2c0RKY1FvcilVXylVUm1BNngvYXNLY3BSW1k8''@;'; put 'put ''Ymc8fF5mYEBlVzc7ZF15IWRTbHU4LjcwRihka0FvSSh5fFtVX0lYViQ8MXp7emQuUXZvdHl3MWVbMmxRO3JJNCZEOlFhUW5UVDc2InR6c0oxOXwmajRnZn1bYEZtTXl5OmhRakc+bTI6N2lFXTtePEcpdHBCZGYvbSJ1fnxMZDBobkZhRyRtPlpQeiwjSDk8MzQ3L3ovX2tYelM9ckwsbHZkRmFI''@;'; put 'put ''fkFzcyMkR20xeml1SjFwZmdMc1VJUS4oMGsjLGsydXhSfFhGLj1SOSt3PE5ZSSt3NEVCbyQ8JDR6TElOOFBeNTBtNzZVJng7UTJYXl1eY0BvKlQjZ15CLilifGhrQS89b3dQJX1gPSgpWUNHU3FqPn5rSlNIK0d+fS48UiM/WnZlIUtPRUZReHpxcDokOVJhPj8oL3k6OyUjezMlWXozLl91LzM1''@;'; put 'put ''Z01xVTE3QDUkZXh+Y2oyTmB7NV1JNj50RjNXLyY7czduYTw5QmslT1AlNX4ucVVgZl1aUEE6a0NhZXZkJCRrPl5SPVlkJExIYCFhTUgvL3RBVm4qKXU7KmssQ2lbWVpwOVJ0SCl4S1drJEoiQ3RVfSwyS2tlbW04PUVudyR2eH5zfmRuI20zMGVJWTo3UExgIU89aFt2dzEzPkJxWG9AbTt9Kyg5''@;'; put 'put ''Zmo2dyYob1tDV29TdEFTSXUuOGFiN2kyfUdUJUZibXYrMVswezc7Tj9IMT56YFZhXjNXQ1ZvN2xrNDlyJkgrVmEqaDFrbHhhNlt6eChuaCJDfV98VCtZNktAM0BYbUZfS2I4PkJCQFJYbll4cnAjOnBGU2c1X2JKLkVYSFdsbUE3cDRNd1hSTGg7PFJbKEZNVGs0dTpvXioxY0x2MF9kKXZPPCFs''@;'; put 'put ''dW9iK1JJRUFjZW00I1ZCKyRXIT53TCxgaC8laEJIRkRWS0g2aU1FYWx4TUNqc191T10lMSVtJWY0Iiw/RzFDe0lyXjllNVFvWH5VdSwuQnNhWzwmJDdzLCRBRklVRFlxYEkrXzxAX0ZOeixefWZlZShiL2JAen5nWlU/e1t4UlJaPz5mYV5oaHtdPmpWWWszOEtHNztYaUN5ZH5kYVVYNDhUWncw''@;'; put 'put ''TW94N3ZpbipDeV0hMVtWQjMoWUIrT2khd0E2VTsqaj57fVdfNUh8bFt7OGhMK2pPOzx5XSxVKHh3aE1yVVNnKFBEM05UNTp+UntOSDw3UVNJc0BNZWlwdEhuazE/Vj19VypJQn1CelYuL118aVRJaVpfIiouK0BUOk5Ub1ZxRnEiW24oTHprVjRqWUhnTVEvQ2w1WVp1RFRKXmV1VDwxVlNZRGZM''@;'; put 'put ''YmhMQWNhd1hWUVo9O1FRKjZaOTpUZTJ5RTJHVXIocUcpJjF6I1hqVC8leC4xWThvNjM+X1lXelZPVVZnZHZzTGdfazZYJVBrKG13fnkvPzF7ciUueXJnc09eWG9RPVMvZnk/IWtbW1NXIlBoMz1ldzR4VHQ1KGdQPko6PDF3L0hHVV1pYGNRVHgkRXpVdjRkISlBI1VeN1BdREpWeS9FOikse15H''@;'; put 'put ''KTJxIUtMLDpKa3FMQEZfTDZqSiQsNC9lX19GUDtXQG9pa2JGI0ozM2QrdDJbRWYqLGQjSmZCWHRVJWBeMUgmfHg1cUJIWzxYM0VoQTRxe0Q8Yyo+TitsTm5wZjFRbVkreygxPSpjKjJMO11uZlhHcWxddlEjQ149NzlxLiswdz4wa3Y/MktTaDsqPVlUKjsmfSl7IVl4R3lEa2tweT0sUmxsV0A6''@;'; put 'put ''eGlIenVMSFs/L2JOQU1EcFcleGlWbnk5KUU6UlRMWk8wZ3NgfF9jSzpIYjF4T1AlfVVmfDkpTD43PVhyNzVnaVtLN21NOHl4T3RULEQ5VnVQWk0kfF5uQjYjKFVubmU2NS80UWtkSzkka08mSDhWWFBmMEIlYy5kKk0hOmw3SUAvOTpzbnJPJU41X01aNnUxZG4zM1dOb3tMW3lddUhdIjpxLHte''@;'; put 'put ''ejMkTUg1LltUOCgveVUme2o7OUtBUXQ+I2ZRdmFManBzKzdEJiV+RVh1VEtNNWY1eXh1aDxJaS5VSVV5KDc8Ln04dGYsNFhVJTRsK0dKdGA0cWFLQV5gW1RBaEA1bE9UdE5xOnk5LC5sOUdYNCFEOzhHJmxoZUYjJWxLMDk5a1B+Uk96Mmh3QlV3KGNmPzxhfk9dNz9fNF8/ViIlT1IufG49RXF6''@;'; put 'put ''NFBkbVVSezd6cVh8NWUsRzBqMC9NMy5jOFUjWUArTFluQnpkVDslPGJDZSlGI2s1Ok5OWjxRd3c9VEloR3B8SUk/eC5QfVl0NU1bR0MxNWFYVCQjR3VZJFRgXzJJaG9ed30sbkwvbiYzVDFtP15gKkplXj9AXSZoRXNSZWslMiRiYWo7dFt1IzVganQwRExiMDBReSkiTTk2LC5jSjBQT0tYXiMq''@;'; put 'put ''SixmWEo/eCVTeyhoR3JhJDszZURvaElvQUcwXVpNPE1uP2Q4REwlITUjaERxKzpHOjd4XiZvI3NmO1NOIX1gRGVLRXMrO0M4Lkx0KlNAK1tpLFFpI2Z2NkhNfjAyJkBBY1tBaUMrTWJyUzI7K3B8dmQhJSptTG9xUkMsLkZuQzl0XlowPnRLUTYoZzs6fmVHbiZWZmg9d2BOMSVvUGdtbDJQKDM+''@;'; put 'put ''JWVDL3pnQGBjdCI8IUx5RWVaPitCRzRpYmpXOWJjU1FbPSpQNFchZmFBVFBGJkI/cyUsJismfE9tSTZSLmVveFh0bXQ9RX1CXXlpOyVLYWw2MT83ci5ZeFhHKztdQ3BQT15FYzJzbmNMMzczRUUyITVCYVFzTFRQaHVIMjs6Wz56VTB+RU9sJHBOLiJpYTZ8bHA8c0NAfGMhZXZBKTRxLFVQRCR6''@;'; put 'put ''elhiL1NabnYrQkBRPHZgLmMqXVs1OkNENHMkSXx7R2A1KjZQZVNjdUZdYi9iPTVEPD0zTXFCWThINmZMLlJBPCtBRjdocjB2Rmh0OUc+SyN+TWczXTdPOCgvLEJObGB0eTs4R1NXY1l6ZTYqd08wWFZAIVtsUWhRQUcrT3AkOlQ8ZDJ7OXM7akB0ODZmIyFsP2lOSURtemBMNSoidXhILkREb3I4''@;'; put 'put ''RW1jJkB6KiplaXxVcj1oR18uQ3JVPmFiIzNVRntZTERCZ3l4a1ZTIktuQz0ucDJ0MiZaYUptZW57MSN6ZlByV3g2ZWosbW9LPmYyWHQ7I3d2NzcsdTU6WEVmUl43dkdzM1tHTDR8R0BsP05CKUtDXzRmTS9gXWh7TjFjenhBc1l8JG5WNUcken4rOkxrbypdPSJ9VFFhbzZtTCVYVXRGOVR8UU8h''@;'; put 'put ''Zm0qIUNgdlt0c0JYYjxFeFtxfDBUP2FNdCMvbjNrbXlAeWt2ZldzPWNsNU9GOkpII11RUF1PVm08OCZlV15FOk1jfkA4d3dQYjElS1E1THU5RWhYM15SYnw5XjIid3pqUFd8cFZKYlgxbmA/TUAsWWsqKFt7dWZqTENfYndtY2UuejNtJiFKdGMhMnlVRV9+dEdxJFBObz9LLzF4K0s1N3wjIk4j''@;'; put 'put ''ZUpVXV1tIXhgKmhMWmZ8PEs8JCNyIU81YUk/dVghY2VFLlBvWk4/fF97dnJzRXtDfnZNTWtdb0E8N2x+Iy40M3cuVEFRK0JzdSxfSmszayUjMioyIWRdNz1RZUY5Y3FDa2grNGo0alMvWVpoREJ9PX4qQnVja3xGeHNqbjA9M1khP0ZLRHpgbWhVUURJYUhCSTx9bEB2TDJzS1hmYlt+ay9OemBC''@;'; put 'put ''Ol1ARDpPSElbPGElbUJPUklUM1NKZztuMGheeWZFSTpDbUBFfU9CbChYNzk/KEtpNCZCdGZidD5NZ346L3Z7RDE/RV1ESyEqSXZwX2krVnh4L1g6QWcufXN3Uj1AQ34yWmNtQlcwMEAyRnU5OF1hWlNhXzV5fFBmcDw5TXZ2OWduZXVLT01lb1F4LlJ8K2xOfThJdD1rLFhEVm5dc2p8QDxoSyxm''@;'; put 'put ''fUx2VXNzPXE3RkV0JjhtLG1jJSZ2JiJLJU9keWlAamdpT0laSnRFQ185Xl9tfnsxQFtbPDNtaF1edCtjdE49UHo3Ji9FRjVkLiZNbTNuU2g/fSFhdDImeiRpJSZGNlhWWHhuNS5WZDtTXkBOYTx6Nkg6bE1EN2tabnY4RWZ4JHtFfDBAfWx3UF1kI1padlF4Q3c2dE05djdMdzdFVE0+Z312PEkj''@;'; put 'put ''SXBGRHY3aiNOSy5vYlVCe1d8ZDUwemZqRDIsKXtbPGlEUSlEZGU7d0c9anl4Tn5ne2FQPkZtaCVsZX5TUW1Objltbk1md2l8PEFQN008eT1EcUlmT2dQQz94O01hIm1bLDQvNWU9XX14RyEpYkJEIS8iN1s3aWxAVlVKc1lSJEJQMFVjfFVvKVl+bjdINGVCfHxoeX00dzIpPTE6emtXWXhSKW5J''@;'; put 'put ''fT1LJWdsSUghRlBNViNkVS9UTGBDIzZaUSluLHdrdSYuOD54a0BXMUVKaHpZQF1IbV1kVSs2Qkh1WkdkN3pbVmJ+dnssRkEpdns5YUgkXVN9TS4iZCssYWFackRQcmhpUz8lJUx8ZDpDaTppXWIuJUBLLzl4RF50ez5xKUUmbFJVRkEval5AMywzIzN7OyRlbDYqYytyWGs9YkQxbkxpW2NLamY+''@;'; put 'put ''LFkweHI0MGNZfjFtXl9BTVFFUjs4UiY3fHFPISk5fEMvOjBvIVJnUzVfRm9kX3NmT19wbCYxO2ErbiY8TThdMzB9TmpRQXJhSmlfV2NjRWxHblVrL1Z8LCtEbkZ8KW9eZW9sRUMmbVhgVlJaTCFBJWk2RV97Q1g8Qn0zSztRUDlVUVB6KkdmeHh5LnJfdEBPUVtyPTtKR1tBfWFhKH4wKnhzV2gh''@;'; put 'put ''K31GZSkhNDBIPjRxa3whQF1+Y0cpWWZCOF5LWkd6VXF5Il8wVGU/I3pYdS90dTFtXUJEJmE8PEw9TkAxcENkUlE7UUA8eHRPeyFAZVssNyhgUX1PImdqNlcrVl11aDJkPj1LVm5BUjRpfFJ6c2hEaDM+X1JBOT5ZfC9LTTc4ITdlI3soSD46WG8venUuY0QyWlM1ZDBia31LNkdyP2VIRClnN01t''@;'; put 'put ''ZEZqSGFpcnNPTyNXZkZYZW9AeG4qWCtDaHRUVjMpemppPDZMQUFSdkx2UChHcyFiOD56Y24rJH1nKTwjJEBKT3FAPlNwOXxmc0s0cUdRfiw2UTNhLCkhNE5TLn4pOXVraSlpcHZWW1glZCQ8YEs4UG55VypRb3Y+YGEiVXs8fUxSNGgsXzg/WWpnazpEU3t7PUx0NikxXXcoOVBBZ1Z2LjplaTEo''@;'; put 'put ''SFZ2VSo4PmxYTXQsMmN9V0UsUVJuWE9hXjVsSmZGJl99LmdRSktfVDB8bX4wcmo8N1grOjMubHRMVjxESjwvI18pN3xLS2tRbk9NdnUvPypHNGp7TnFhIUovZTFEZFAkO3VYXlIwblU2LjIjZV9EJDA4ISMwQiUhN04saXRAPFJ7OmxUcissRj5BKyIodCp8em94ZUUlaj1hfTliSSZdVUo/VDZa''@;'; put 'put ''MkU3bGo7RihAb2xORF4ofislbDpeTGdiLl9WY2NVPy5jcGIheE4oPWEjVkNafDNiMz1jOFJaeW4sR1tqc1Z3ZmU8VWRZeW1iQkdUWEhTKmk0WyNpfWJxciYoeT1RamklfCUuRSpnSHE6d1pMQlMzcUxJdzd9YywoTlBXVEJkMzt7bDlyZGcveWQsRlJ+bkltV298fWZ5RDh5MHhKcCwscUd1ITNK''@;'; put 'put ''JU8+W3hVQl9GZXdRI0xwM09zdFdffXEwNSRhTks5WGQwQTxxbHxuN2NSVSpmaDlKfCwuTmZIQig2WnRZOVJ7Vk9ZfVMySGV2NXYjfTBgJTsld3RlZEQ8W2pdMnxkU0d2OzJQX352aC80WEV5dDxtQ3RqInc8d1ZLeVNiY081eVorYWVTc0ckZHpSM2g4Ok41UHZPM0BLREBPR0YxcXQhL3pXLiE6''@;'; put 'put ''bGRhIXdnPjd0SWtWbTFbbnkqXkcsOEw3NShfW1RMT21YTFJiTGQ/QlgrWFsvfE9oQkpsOkE8Q0tPcz8kbV15cn1PUSpIWUVfcWYoNXJTVENEPWcrZFZ6VFdacXYmJntlWVQ2YHF2fG5GWTF9TiEscCshen5MQzV2R0hZRkZdR2xUaXVlRk4hM0xGOCpyITgpU05rPC9uaXozMztuUnpobndvYEpe''@;'; put 'put ''KDZFZHIxXmcxTDc6d34wVmN2VC92ZD5NeFQ1Yy4oIy9JcjlyfWpzO3NPPWtfPjpOPk5+eiJiYmNmVW5FY0E9Z2NkQklQWmJNL2AsLjgzYCZKIW9raXB7fDVRT0crJUZrYSI7ZiYrSkg8UClfalBOWVVIOmJsNCRvWTtkKDZFMktkY15XS3RjKTxHbDlzN3ZFNEZ6RkpiaixyPXZ8UVs0NVM6bSE+''@;'; put 'put ''O2A6I2d8OHRFVyRDOFVPNHNTIyspOSZbOT1BIW81SGNFMWMlWi5tTmldVG8oIW87fGQvZTVhTDAsPGo/YTQ0VmxTZyMkUi9zSjMpNiwqZlRIOldmcCZNZD4xXkhpZS9vb141JVRZRmR+aXFOMyQrfiIlTmtJaVo8VypxTlZlPl1XYVM6bDU7aTNJYkV1RVhWX25FNjtiblUvW15nP21jOFNEflJ4''@;'; put 'put ''Vl4xU2tndmZvTSYmLFVxUi9VYHo/IVJpeE5MUmAjRV4/UVI5MjsscWw5YDYjM1tkPEtRO3h9U208QXsrRHRCW1ReST4/NWtuJCNOR1UsOz9QSix0I3hfRlRzfD58TzphbjF7dXtqUWpRY0MhV0QsXiV9aGIqaTZYOHs4QkVKdyhUJWxAITRtL192NCMoQWRsM01pJmhmZTtPJlFWKFM/ZU5pUVsx''@;'; put 'put ''VXpGUjNbJDM4cnxvRXJDI081OXZQWXRwNVJTaDZ9TUIqJlBadTQ1aX1xcSxFdWMwVntwNjJwP3xRIU0vejRkZVtJbCwkQkBmJXNFInFTd0heajN2dio4UCt5XilWcVlDWn1TNU1ydWlIRTBfcnI5S2lGW3N0S2BxUT56MSM/YCwxK0RwSU1sfHF3PGheMjZnNk5SbTU7cTIod2Avei5gZi8yMito''@;'; put 'put ''OyR5ZVksM3RiNUguakkrNmx6cFZdKFRHcWRgYmhBYzdTaXVNNkFjM1hmWHIpPkd+SDVoeDVgOmFbTVVrOiM3XXUqOFU3Pl15RylMV2s7c1hvRngwTkRRYS4raTVLbVY5JGVNS0h9UiRIZkxjanxITkM3dXQpYi8lajg3JD8vMEE5NS9BOSo7eVJCbWkpLl1bRUUjOCxwa2d1PkpXfSE3W1o8KFZ4''@;'; put 'put ''Qzxzb35GRzR8dXVGYT9Id05vOEZCVEB3TzQ5TXFDXmA1KGJrKT9UekczdiV7XU5nNGhvekZuTEMzZERJVEJ7cl5iXmBnWDIla31pUzV2OlE0Pk8uRGNQOVdbTjEhKyN+SFcpSH4jS2hJPVNxbjNPbSxGMl92a2RyZ3g/JjJ8N2hhNVU1cH0uMypqOHBjKUFwV3kxNk56Rns1Y3Yxc290R0RkdEVD''@;'; put 'put ''LDNZTk9EVXZfb3FrV286d1J6QUdhUyVtaG83bTlnVDI/MWRieTc2PjdmWnVeY0RoZEdXOWpAc1F1Il5QWWFSa2pIemcqdl91dThNc0MhJn49Pnl9byhZe1gma3pObS86bTRhOXJQK2AhOSRNIUZPd0JncSssKSlHYjJKKiVfeUteWmRCRThxbjZRIXRCO2w+S0tpbCV6RGpMS0s0Ui4uSXNTenF6''@;'; put 'put ''fWNbcC43emFKIVFPK15WKTNGJU8uXW1dImg8Wy84blhkYz5kLjApSlszMlcmRjdqUkslOEN9ZXlqdHtrK0lSal5yRzIrTVJIMkVlJX03fHF3WiYwWFJfWUdNWzJIZ18/RUd+cFZCZjFWdDNuVjFCQDZ8WyxgQjUmP3RXbU81SnJFRCptX15TQEJQOmE3PyZfdzZOSk1zX0ciIUpTIipgX18vY1tm''@;'; put 'put ''NGduYncuLj1CNX42dUdFVG1KYjF6RDFsTVJkcTkuK0khQT1yeTE7RE1WY0RkSmJNOF9kWFg9L1Jge0lKd3FtQzU3T0o8ZSslJUt8O2cue3NIcH5kTn5kcE5qSlZ+ZzJNXUl7cHl+UllAcD43I1V4eG5qSSpEZWQ4SlZfWTh4U11mKXF2ZisrPFs+KzdjWzRrN1d1Yn5xQj1JWW0mVm5LOys2Qlc1''@;'; put 'put ''b318M3VkWUExOlAkcmZgN1UraUhSYzVeVSJdMXNqbjx7UXIsS2lIYlEqWmlja11wMzw4Iz85STUiI1BXVkQqVDI/NltwOH4rV2R0XjVyaztyMjYxQmFGRTttSzQ3XW4ocEM0KDcqIiNQO2YpP0R3bWMzTkNPKlJOIjwiTk01PSNFYHtoKnlkIXNTYTlyJmMzQ0Rhe3QzQnV7RypfVlYwSmpqN3tZ''@;'; put 'put ''Ji5vV0gyRz5qLj1dcFhNVn5aTj1YSz9sbygoQk1JOStuNHVXfkZJMWx5NVNwbW1ELmJTUlE+flIsWSR5fkpfciYjZiFYZm59bkxQUF4jNSUzRWNBdTB0THFNOyxJQXA9KWNGJjFoQ19SbyEqME9YRDE0M2NlOk1iQ30laFUleXNReDBud2laUk1mK0pBRzw0flE/JmFHLCwpKSwhKDx4KU9NQGo9''@;'; put 'put ''cmlkcm97bmc5e2JgOWZLI0JddEFlRH1IYmgldV48X0tfPW9vNylEYmZCJHBYNGxrTHQySnBAR3FqL1ovMzhxNjl5bj0hM1pFL001QiFaaS9gRkhiRElebjlyVHUjLD4pIS5EclF1dUVONz0xa0wvSll5YGVNbH1kMFY/Z3tZMyM+TWxxRFBeNV1BIyVMaCFpUEReblooV0o0O2dneHA7Z293dzAx''@;'; put 'put ''JUZ8NSk/P1NMU35SKmRfW342fGw4VEIyaWIxTDMrcmM8JH5ESWZUaEIuLE51REkkTCV7OnhObVM6OH5nUGFQaFJvZ1NiPlNkKT5PRUBbTywuLDM8alR5QD5BV11MKUtZW0ZNRmUjemRuRjp6JmVkSkJRU1o4IT5HPW5SRE8scmlKQ3tGT31XTCFsRzNCYjc3ZWx3cTwlKCY8Rld+NVgvTCpaISRh''@;'; put 'put ''ZUNBS3khe0lYeHlATEpZaT1FM1cqQUtKM2o7dkpRPE1uVUEpM0AkQCllaS5UPkVZd1tmLjBvKEIzTXosPCU6ekElcEdYcGc+Y3hoQk42czMsek9XMjQhUGNtTlpVbyVacGNKRHliKXtKanVebHksdSNaXnNeUGEmR2FKQClSfGJEX2pRO3hnTUIkNV83T0BTZTFWeHpMdjRhR3R3NihNTFltUUJQ''@;'; put 'put ''PDZ5K25rdGx9XjUlJiouejAoL2Y8SGR6Zi51dGozWEkqaDY3TnoxXTNmK0RKRmVpN1V8U2svNEltJWxnLk54SGxDSGIoKXJBfm8lR0d2MF1sPj9bTkNbLmR5KXdoWkNRWj8kT25kfFhQKHxXcDlvRHhObG40d1JDJWl6fXYpfllCe2tffnRKPXJHRX5iWnd8Img/YStfSihCQUIwaCMuWi8pciVQ''@;'; put 'put ''T3wyaFFaJUE+c29FW0I+WCZSKjJidF57bFRpUHVZPU9II2FJOWBaRmkhaUVkOlJ3YX1PVFJZKWV1ImQxTnpzamlmVUhZPmd0e3FQcWVpXVEySDVST2tWcDk9O2xPZzg3R1MoNTxaOyQ3NmM3UX4mcmo2dSZHYmVYeUh2RW0uIkFgSmRsVGBtZkAwZl1QdUBhSXQidnR7M2RIRVtDZSojQUMoKmxg''@;'; put 'put ''NGtnRSR0ci97MV9FSkJvOmYlckVYb0kmQWk3T08oOCNbIWk9Ny85RTRBSD00ZWRjVV5yenhZZXdZfWsvJGd6U1cwbn1xKyJFTVsmJGhBRkl9VmlYRXNNIkF4akY4SFBQUkBxN0lWJjdrR0svbVk4MzR8O1JoKH4xfGpwUjNIM0BzMTJgI2pla3kkbTJCPnlTNXx5an5denRJdTpmUCEqdG4zcXZD''@;'; put 'put ''Tzt9V3d4fWhCPThfUzBnZmtDLFUoMkIuamNaOCJ7SFE9P0wrX3hodU9XczcxXSI8OG1FcG5ibDN7bUtrMURscGk4I21QdUNCO2kvNVh+eld2c0ZbbS5xKXk3VTZ8UipeOF5TSjBRSComJl9vRm0oLn19andQeT9+YnZGRHByNjpHaltHSmpyOjtHcippTWNzZTA2TUhPKDFSNU5eez4lYiFfKl5n''@;'; put 'put ''N1RrOXZ9UCU2dF5SbDc7MVk/MnM/O2l7KSEwdCRwZ3pfR0IzU0ZSWzR0PWBQUn4mNFpIaSI3MVM9QzVVYlQseVRiOk8pV1E0V1EyPSJuejFhc20+T1owJFJBR0NvITJpNFdMdU9GP1pzcj4uXmRPJD1+NTIoT1RTVURqJDlEY0huXWZZLzx0aFh8YktSR0QxdGljX0o7Zk8sNlZKMGdwa1REVChZ''@;'; put 'put ''RCZaQ31iUUNDNik6L2EufWB5OEV9bTx9Xl05LzlVSSR7WGM5RXNoN213aWciMXNjbSpAck5PPmhvZGhfP2d9UikqN1U1XnpKMHlpPTJNam15MHBDKUpwZXFIdn5UPVZ9JiV4V1EqLzVDZCl2QkBnIndAUE5TS2VSbnUqQjUyJkdzdUleLjR+ZiVvUSU/LGBLWTBtbjhnXlQyfUoyM0BrNHAwIz14''@;'; put 'put ''OHVIeCJNUHZvOlJrNkBxQmEuQERZdmZdV1h0dFJBNiY1YlFPZGheQmtYbEM2enw0VkZhMFpJc15aRHB3PDgqaENBVTk/UmdOI0k9OGxQI0AsZClPOTJHWkBySD05MDpvajFuRm5yLkVXNV0mQFB0Pk0pKT0iQWFESF1TJWozYlsyMG9WKTtROTBsN2FsPzV4MTEzJTNKIihjOH1ud1lwMmMmMiZP''@;'; put 'put ''I0hoekZgSFV7XTNCOmIzXiU6MUt2NTw1SmBkb2FAU3chTSlxSzA0Lj04I089Yls9U1dyaDBIY2ViTCokVTt6Z1p0XnJCd2NocGwvPCREVnkkSSM+JVNWRkB5MVNuVzM1dFQvWz1KMjd+e1VWKGJmdVRWc0xOLl5dbG87PFJRKGNNL2QsYCxtY0ZtMDsoNVU0Ym82MVg8IXx7VFd4RjBJbWJyJllt''@;'; put 'put ''VFdOdTBUZm9DY3lyYWchXjB+bnVwYiUvMXZWIXpJL19HeGcvOSlITlJ9bHh5VDx7UkdhJEE8cylbdC8mIiIxbmxZdWQjTElOMGg2K3NPb1JHc19EVW53biJGfiV1VFRYO2xSUnZeNHc/PmZVbWNuPC9Qc0spJWZWSlcxJVppP3NzVyVASHxdUUsoXU4mY2RtTEprVkFTTXtPLyVvK3tgTUM7Kis2''@;'; put 'put ''NWpTRyosSCFgMm9xQURiYV9OcGs5U05Dakp2ODo9R3lvWSp6e3p+Ljp5YVlUbEhUdEJjSXBZSHtqYFlWL1d6dHVnNmhdRWdLdWJeLDxZTjRwaWAhdS9zUHs9ZGNmWWZyW0N+VDR3Zz9fdEpfWnE1IzQzQkd9fC9+b0wvbUI5JSh5ITR5V25SYnxdVipdXTJqK0UsOUNnZVEqJW1FKlNPKEVhL2xw''@;'; put 'put ''OCYyb3FwT1M+bj1HN3ssa2NxTD8rQDR2Zy99fUN4ek9+I0UhL3EmNzJkQSwuUyQjMmd3bStIMkltK3VNXX07Uk5mOkF7OyFIZlNALj9QRFlQZiFHKmlKZjdLWUBdJVRqRUpHeSZ6MmFHaFVAdz9AdE5pU35uaS9GLj5AZzlfU2d2IyVybER3ci4hMmg4X092RjwhPTh7Uy44aHFhZHtpP1VzU2p0''@;'; put 'put ''RjxaKklNJjY1OVB+UVgpfno4PyVXOWNhU3NaUE44cGZXVXNFb1Y8QGA2UUJsNTVAZmNnVipfZ1NiJVZUQmkuYjU/bHdbcnQqY3ttOzFnNnBMNj47Y2FjYHwyLHRNOHVWTjtWIShSSCN5Y01yZT14WWt9KGdvIXxXZztAbjIvUT95enFaayM8XSluPV46NzdJRml4UXtiVUJDLykmKWs5fjZ5S2I8''@;'; put 'put ''PSx2LkxnWlhqS2UwW3xXIjleNmM6NnlHJn1KdSYqejJ8KHxkK2NhRT9yY2l0XVEhbEhIciVDVWtCX3tGfTNyJkgxVFJpfCRBYCI7bXFhJUZ2NVlmWHxIP08+LDYoRClUdU5JPSlrNFBMTi41R1JqdWVsJiFLa1pAfkN2THh0TnteRzJrQyFFLGBSKURaLHI0SDFhaVpXMm9VQ2QyREIxOS41OHtD''@;'; put 'put ''bkpoRmpPSDtTT0BOPXk8UGFgTG86b0dBcWk1WkNfPjBaKD9SMTlXOU5kOFpJYiE0RzAkQyRQIVRLeGVafChHYUouVTN7W0Q6Z300ek0ke096NXx3Ll1hTDwpUV9pLCoqMkk4N3JaZXdnb1B3JFBlSmwsRDpoaisySmN0VXApR3dNZUpmbEAzcF4xOjZ0THBYYE4qWzZUNCF5NT1TQDMseVAsaTkh''@;'; put 'put ''UkkwQFVPPyQ6ODU4SiNXblN2SCpNVFVKcGBgU0ddcHEqL2c/SVhHfD5tWFA/M3AvYiFNSXopVXt5bzs+cmk7SVQjan5YY3Z8QXArY1FmQ0NzZV9jVFopMDojRSs2L3x1e303el9TMH45KEl4S0M5U0QzLytSJCl4TmxDOi9kPD9kLGUzc3N8cUhhPjI9byk4PjReTS9HQlolK0YlJVhNZFsjUH1J''@;'; put 'put ''MSxuIT5qInxiXS5geEgsVjV5Y3M7KmdNKVgvazg2WzA2M3NvdE5rMFU3b1ImOFBpbm90aXouPnhhOUldXXFyV2kxcmk+JX54MGxYNTk5WStlTFFFaS82bUBNRVB1TXhvOV1vXjZtMXxdRE42SS5zPHYkJHciLmQmc2NNdE1Zfjw6c01DN1IlKUFMYWVdQUNmVWdJdHUqPSRCRVpWSEBQOCVNPExX''@;'; put 'put ''dU4+dWRzUTMqWDJ8THU9UDdFIz1CbEUhRnFhal82QG8qflNIayJ2WWcjPT4xKFl0bi8yPnUwSDhOcmluLCNqKTdrYTRVOCg7QWp0e24sKVNmQFo3TXtXZnVXSnFYdG5jNlpLKiRjKVU7T1BYN25LPlFabm0mekc0WG9kL3hxXmRdTiNQLCI8Qy4sUj5lYih3ekF0PGpfbn1EWShKSGJjb0JrXjVk''@;'; put 'put ''TF5IRVV3PF08eTBNe3A7TGpaZClHaTRAWkUyPXY1OGlBYTpJbFVTOlgpZWlJSm4uZzBhdCptMC5EYmxYfXU4MWhQI3A/SXkiTz5yNSJALyk9bGtsMDRhL2o7cGJkYm9FSEN0YVZEKjwkI0MqLDMqUjk1JDcqL0RAUy5CNV5dZnp3eD1YNnlQISRnYkJONlN6IkQjRWdkQCs4bV80SUtJZFtzbyom''@;'; put 'put ''UHA+WFoyXmc8THBUP2dzUS4/WyRsWEM7Zn1YdmdMfGojbXY6Pk40RWAlbX01Y2orY2AjMHR+IWFrcWwkL3F4eDg3TW5wV0xuO0tGPGhaXX1+QUBRLkZMdCVjfD1vUmB6Xlk4MGRHfW52TTlNOD9JLk01cFg2czF7ZjIzZnpMKihSWk1GITRrWHZ0eDg+Yk1GWHIiOmpwPFN9ISlaTTRRQk5jOGMx''@;'; put 'put ''THV1VVtKTTUqei58I3pmMndsPGwzUVFvSyErOCpDNXxaV2xFLjApOG56UE5LP3c6W195LClIPlAoTF5Kam9wO0BqLyV0UHhmJTt2WnBgPStaSEI+YCpkI0M+Iz4rVWd+U2hMfUx5P1IuUVhefSYuVGZdSkNRYEBaOmBELFNtXT9tSkAzMHMpRUA6JEI8SGZrSk4/KjFNYV81IjIyeTUoYjhjZm5v''@;'; put 'put ''fDxIQl18IyxtcTZsJUx7Ryoxcjd+KkFSIyFmPlAxZ1NrU0YqL2ZDdH1lNDc2aTo2bTw8VW5rMzFhfmNwZyJWIXdDTWImNm1Od3pEQiQ9U0pVblJsPHVqIUdqMWQ9Kz1lN0BuKStZeVk+MXxiQ3s/JG88bDN6UnV1R2pqaj92SXgxfHd3LGcrUTlZVkd8SllaclolcnlTYWN6ZSxxWT1EfSw8Ty83''@;'; put 'put ''LmB0TWIpbmM7KSZTImgic0NndjspKVFiU2BDY1JZQWB1LHd5dHBbKDw3dWA4XTpwRUJMNU0mMCkqRXwrSWBaRlJJP3lXbyp6NDNHamBhfiQ7aHJlKFYhSmZVdysxUkMwJEVbZzNuejdmdTYuQ0BaTXw9W2ZKX1NnUzklUEVbREQoWFMrYHh6eGFabk5raUJEc3p5enRoYzJaPDosRFpMc3BzLksr''@;'; put 'put ''elEmb3dNJUV0Oio9eks7R3ApR0N0e1o5VU4qYjNieH48UWlHUnJdUksmWndSTz5BdG47YTRBTCtLUHg9KUVXXiNsZkh6KUYid35DKzIoSWpDN3Z+fVppWT5LaWRRMlJ8KVMuSEM5fiJATWJlZ2p7RHF+dnp8ZiVpS15ZZ0ZgaylNTE17NmV7JG9JN0pld05FPnJrYEQ6eipXInNLW3NXRTYuZkUv''@;'; put 'put ''Sk1IS1VibjQqRil1YypeKl8xcnc9TildZFNuWEhtS3djSDBfdHs0KTVWIj45NCl8TjNNTmIzQTJVSzs9eUo4VDIhIlZlTC4rTUpic21MSWo8SUUxM3E/c35URGJDWTNfPTBDbzJGPW5WYX5GKHc6SyheLzE8bDVHVmxMSXY0WHg1I0NUUz1KaG51PURYOX4xPEJxTmh5aENNeHZmY3QvNTRxQCZ2''@;'; put 'put ''SSJwNmJdTVF7VTAvRiVyTC54bk13PlR8TlYmPHI6R1drZkZ0ZnsrbVVIbX5pMSk7bFtCdSZgYXtoJERnJFl0OjMmTFFyZmEkZ0FbQm9LfmVUO1RqWS9Udi5YZSFaJUZ2ZCwqSklWSkNQJlVtIjlbZnA6N3soIVE/L1QyODBgLmpUOWxvZDF6I214JXU7Nn1ZamxpKTF8ejl5a0YpajZhMWw1OUlJ''@;'; put 'put ''NG0peCs2YmYialB8MllKJURCM2I/aCNKKi8xRGYrQ3dCITgqXX5AWlp8cWpuUH1TMz1CIiU2UUMrTi5AU01JR1k3N2tScUIyP3BfdzhzMkhsQ2Z8czIpcC4/fDJnRk53WGBVb0M+ezA1KDJ5fT1CcTY7LDQ2MVsuZ3NdYW5PQkwoKkFlS3l3dTZxPiw+SF9xczd7JS5ZIlkzY1UpPjwue0s5R3Zn''@;'; put 'put ''Nktpb15pTl54PUZ8dCY5eXdHY1hmJWpTN1FnS2lUUywyTFYrcG9fL19uMHhAdD1jKTc9P1VKVG8qVng5S1ZNMV9LWl1zeXtpNHcmfmRnUmtQUWVqWXk8Mi44cFZRL2JXKy4pN1BWUnNtKiIhKWs1e0pKPStVVUw6Tn1STks5NzdwJC4/cU5pIjg/UjckUzcyeFhkUjIiTS9jI3hiSjM/Qy5iITk3''@;'; put 'put ''UXJaTzhUK0J9XTZRYj5iZS9DY3ZwSzh3QDQ+XlZeIWkzbFFpRz04PzM2RHxrNzdqeHQqd1BSbVFUKkleTEVtSWVvcjZxKndodysvNWQ4MkFKSiIhaW42WVs+c3ZTP29RSEQqZyw2cyZAO0QjQipGPChzQUZ1Kl8wVChkWztNX2F3eytZc3dPNlozeWVSQ3gwe0REdDZ1WU1UeTkwTUtWTUQ3XiNQ''@;'; put 'put ''OzpScytvI0w0Y2xpRVg5M2lfa1kjNSMmRylCKEVOMk98ZTc2fkdSV2tvRSJ+KTc+W1sham5sQjw4OUtNMV55NT1ebiNARlhoWGdebSxPZHVDWlBoTlZOdzYqe15hW21xZ3RhZVZaNjxUa1lRUU0uUmBBXV9RWCFYR3c9W2Y6WFllZDxBNGxbIzJzPztJeihzOF1XRyVnLmUiNlFHdS45cH4+JFp+''@;'; put 'put ''bFdFRWd4W007PVB1OlVMeSFARjUzNE1Xcjh9YlBmV3E9UGJZbn1ZKCJfRyRteDFROVpOdWZ3VktKTFE8fCo/Wl4/WEVDamk5ZDkzels+UllyMnAjK1J8P0YwMih2QT9vWyFZen12NCwrSCFJW10/ezRDQFleVkJFQjR8KXpYLDNgUyFOI111dn1ARjkhOzNKYTJkO0Zna3ZnUHRTOHhPMkxYI1My''@;'; put 'put ''blAvamUxV1omKVlzZVpjZlFdUG1kfGgrZ1NpTThJJShkaFokWVt5fkFwTmFnLEtMbFFhKWdFQURlP00sUzBlNTkjeV9bWnB8M3FJPDEkOFZmcDw8WW5iPzcjOGVeOHk8Li5sYXFjL2glMihXPyt1RmE3Ty99amxqVW84IWFTcUZseDwwREVydlBnNml1Rk9QUWpPOiIhTk1ibTQvRDB3Q0FkKnIr''@;'; put 'put ''S0EufFA3eyQ0PEYhND9pRj1mKFIySih5ZSMlc1V8VyxqYSJCSFE5TU1teTpCZVV6PEl9QW1jLFUuVVdULEkxRG1TcnohP1JpaEVfKms4MlR0QXl4d3t4aU98MkJDWjhuS0MsPXA5YHl2VDp5KHNmSCx1Z1ciZEJnLip1cWVZTGVPak8/VjNCQzNgPCV7IU9HRi4yfExtQUkhLmhhV29YWmdRJkli''@;'; put 'put ''fWRscXk9RHomKyR9KEF5cl5zOjNfNDNNRj07I0dITi90U25eZj97PXx3KC57YGoxSkxLYFF+ZygkIUdydjkydDFqN0dtUmBDUiFIb3M6byV0LnpzZCwobmo7JUBdPz8wSl4pNUM1Zlt7QntddTAqdio3Ry4mUlZsTz4pWUNsOHR5LmBZLHpkY2JJX2J5JUl0YXQ8Vm5OUzN7XlFEV35oL05zJEcr''@;'; put 'put ''IW07VT44UkdRSGJkUltsfTUuYS5SSksuWmNsJEI+RX5XWVllSlV1JER9WnN3ekV2cmFbY1s9c3Y4KWBhZTxvUlRLIyRMVH0xbFhzZlNQMjhsMmJqYlQ7QHN6dV8iIUtQYF5Nb341UCtNaHBONkUiQUw6aWd5bSMpZDR1OCVpOlc7SFZtTnouWi8vT0FHWytkSTB2JCghJU1xVjFuVU4jbyglKTpF''@;'; put 'put ''MEVKMWtgRiNLa0BUY3UrNFU7b0lLMUUlXiIrXlV1fVNpVWpQejxNTDpKVHZoNnVfOD4kdFVqaV4mZCVRZEZHQHxpMX50IjRyLkkzU1YpLlIpWVR6IXRvPnVAS1tffDk9K10yVykxaXJrZDYwO3woX1lAJGlTIVRxWyZMTGp9Kykrc0NlUzExSk5IYSlfNV9zIzY1RkJRTj4uXnVxdEI+Iip0PSlO''@;'; put 'put ''MTNbR1FKXnRhYDtHTW50YX1kYTkmQF1aY1s4bSVWWSwxPFJkeGBTblhCVDt8Nl1CMD5TPz4oVm5bYkl0NX1jWj05Ikx5cXBgUXtgPChwfUxOLnNWYk14Kmh0PjlNNTI5PDN8amw9ejNCQnlqRGAjfGVGdjd1ezpWS2RhTF9waUViUEp0IWwzU3UjeCtaQlAvalVGJlZlWCpKY087diVLY0NoXjZk''@;'; put 'put ''JV1VMGxaXUZNUSRSbFMweSpVW2UzTWFQKzBMLzlVVFd+TFtYOEYiQWk8SWlIbXZUIzI8XkByciNZXWwsNH04eDJ0OzQ+YGQpSFc5Yld3QmVPSCoqenRHJTpQOHhWdXI+YUskelVvMkskaiZ7Jj0pNUgmS0llZSM5cjRUPytJZEJIYm01OGBHTWF7KCMuXypiRyh2dVMiNkApX1t9ejFsc1R1O1o6''@;'; put 'put ''bXRoPUpDdSwpUFoqZioxfXQ/ZSYoenF4KlpgTDptW3N1bFU1QFEsYTNReGFpWixSUkJ1YyVabn5wTyExdEVgRylRNUJAWmp4aFA4TzUkJUBALHBPTiZ5UVkweXtOSHxQdGshJnpVRGRHZ2ZMdFg/SEZYM09aPmF6Xk4kcFlPP1Y2R2U3T2xuZXQydnp+L2pMLlEveFJCLkxmKX1HQGM7IyxiSjNB''@;'; put 'put ''ZTtufFczXV5EIn40YmhUWltFem8hczpFSzgpfXh1LileT0BiKXlLQnF9UHhCJSQ+NH5Dd3dXMFhEWDBtaEJdNGZxXzoxcVpyMGJkfEJUTCllV2ZFelJOTix5am1UXl8rUnhyUTRpLjpZJmAmS019V2pGPC5qSTxQLFFXeFMsNENvK0VPNFE+OywwLGdiKW5jdUBCIk1DcyJbLn02fDxkK1F5ZGdV''@;'; put 'put ''fU8wRjw6MWxLTkhGeV56KSZpQy4zYVg8UyV9Z2hLZFVmeFhpSDAsQFguMipzJHdzLk0pTTohaFddWXVrLG4xNk45L3pqTSRdRnFBcGNNa3dnQGYqfFA1JVVNfFBDXk00W3klQHV4Y2B9M1hNKj1gZCJyTyZFaWdvdVBpe1BZMUxoako1bD1qPzlGcEpDR1c6NF5vfXtASVhhPXQvIV4zdXFlMF5s''@;'; put 'put ''VnZweFMwUGkxflV0QGtZUnB8fWR0eH5SL1hvSTs1bTEkQ01CLylZM3d2UkRqSnorcV93VVIvQHgzNFU2VzhtbjYyS2hzIlYzYzRgZzkiXWtdcnp0eSVkcj1qNTozVFB8fkdOSy5SeT0oYlooQGNGbW4wJnlYWEBtMyFYcDYycz1SZSx1R0d5XWV0aFNiVntIamdGUEFzYXZeNiwzS1BEVDlXaURu''@;'; put 'put ''ZSZKYmM5NFBUbShYdCtBc3tZKUdKQWoudCt4Jj0jdkhmL1BMRWxqJj0jcilQKDo+UU8kR3hhc0NYMyZ4JStlJSU4OyFhLDZWc1AqaUdOeXhuUWlxfGJdMS5OWDp+OzdbdSJhYG0uOm1nLGdHWk5GcU05O3NGe3JJVilxKyJGOWUzTVJKamV8LGo1TVUyO2AuU1c6ODhAN2ZsWmwuNzNiR0I0JGVk''@;'; put 'put ''UUJmXjRUND4+JEp+dkhVKFFxIVQvNylZbVFAU3pdMixGY2cpTlQ2VXZGXlQrT1tzRnZMNHVwOmNOfnxQI0w5VWFdZTJhOFA6MmguIiY8YWtLdEg3dC5YLFNBOmxYbitkNmRQajcvITx2SDNVfEp7MCVCZlVbfXRoTmckQHVCeVEvKDR2IyFWVDt9Xns9eDsqTFleJTgwX1NaRGR+bUUyanpVbl1S''@;'; put 'put ''XlcxJUEjbFFMbkJiZEtrIyQoazJTUGBEPkQ4MG9vYT9HSTBIdz5FJDxIXztDWDRoSWcsTEtNPkptX1A6TiFYcmZBaDMxKGlTaTBQaT4mUlM/e3RPPE5laT5LXm0xTDhrRXR4d1RmIy9iJGBFMUpBcVhxZjdlJXhdekkhYlorT1Y7V0wmVTFSVkxMXStDSzUveiswNzZFend4Pms7P1JVQm5pIX5V''@;'; put 'put ''bm1xajt1cWQjKHEpQD1kd11MJmpsW1kxZCshTnFHdF5zUHJ8dklKbyJyWWpjbnkoNG1ZKDRVLGZ9VXksOUUpSH5JOkhAM203K3tRfWt9JVU8OWRHMzpVaitDfXAqZjNaO3xhZ1twdkZTOzQyOltXVk0/aHwpdmZ4N3o9MGkxKzArcS9mRFRkflRQYnMqfU0rYl9oKF98W25Ld2w4e15tVmZXQGRz''@;'; put 'put ''YldhK2oxUltSakhsV0MyIUUmV2pQOXBJeWx6ayhGNWpDRDYxM3FSclJYR3hsXiZvLkldbE0zSk06RCZtekZOeERlZ2hDcnx5XmwqKFNyaC95dXRFajEvNmFLIXtDcSg2eXZdcTBDQzhRSExMNnMlU1dXVmU2Z3N1LFFoPkJ9RDowKTlIJTtYQi9HS0lTd04pYEhiVSY6dSNTMn5iN2JQfW9uRytS''@;'; put 'put ''RXFsPDpNOnEhIVgrLzppM00uPDZ0enFoI2ZSSEJmTV95dGxvfWM0UFZAI1ZLT15vbkNmcXE3amxUaExVKndYMGxdfT58eE0pYFgwTWJTMj59dmd8TWFRInh7KVNyRz9CSlB4YnZjSSUoXk50YSxlR2UuYW5XSXRUQXZwODlnSmpoVjhgK2ojdzVPb0F1T2F8UTpjRVtpayojXyNeUGZVbnRFNk0p''@;'; put 'put ''RCRpW3V4I0VILi9AMmBsOkBlXVNxXl55QG4lKDIsIkd8b2c+M3EhYUx4Ojwoezd1SSNtYWhmXVgxMEYuKXNTXnxURD9YW1s9JnF3Xj5gNmgoOD5KRXUsLDFvTWNxan1aVVU9Kyk5dzlrZ1N4MEwqNTs/Y1FhPWB4RkhiUCJuRiNnaEJAYTdyOG5Ma2RWcjFSZUI2X3xZKEdXTVd9cThEdG5JPF9i''@;'; put 'put ''W0VbZSUlLCopJDBuXk0rfTRAOj1CJWNTZDh9ZC56UV4kdTZ9RzRFeGlFOmJNXiRTPiM5KEkqezszZW02Ik8uNk5HZWhZbW9DPFpSX29xNitlJWsmdDliJGU5cywvZWBSe2h5RTdabXtUMWAoSEYpOHZWXWQ3eGk6VXxCSltOTm4mLjp7SSZieU4oQm5odFJRTVlKOEN5RyYhUWJGL2tZdT14fkdf''@;'; put 'put ''cHZafj9CVzx1O1ZPdTVUeEdLZDcxQmlVQlRTPVcle25WfERXNEs1JEA9N3xVaz9pQUU+TGs+b3FLaXhwQFJZQ1RAPCY8TldbdGNPPEpQbkJvSVtwTXZWaiNwWyZiXTBEbGxSN0l3QmhtOExQTTl+WERvRmpWTjQrL3tfNnw6eXJhbHohPGZCUiFNa2BUdzZXMG5COn11Xl9yTVQoej9Ce3FpfCJB''@;'; put 'put ''dEQ8YkI5RGNeel1LblFNXktzST9XQTN7bHhneU9qNjt5O25ZfHRTIT5+aGA+VW8iYXNSdENHTWE7PzU0VTRxWkRNalR8RF06NXR2RDJAZktqVXFtUXo3PEIpTTt1cTN8OyYzMW5Te3doPVZ7K2UrUEI2VzRfMVJsUjRrdzdaVzZ5Onsufk0+LFFqTXgpUFN1WEopJG5uNiJeXkgxYFYlY2VmQCF9''@;'; put 'put ''ezVCOV1pZClrImZWPUpRPiVUSzckL2N9RGQ9fSZ5ek9pPFZFOiFMLytkbFU9RyZlW0MldG0jUyxbSl1hdD5bdENRTXlLX1YjdzJjczlDY18hNFEqPCwoRjRgWnFRZHVDMnE8NlE/XX5KIWdgUiJsQkQlIlVxck8pbGVKRDI7UXEhXVdmRDBlWjNkWFRjW2kvY2olZyZHdVYjZSFdUzRMbXBVTlRl''@;'; put 'put ''clBOWXFMTE16VX0kLzZGUl17VX1ZNDBLSGA9YkEkSEFRYyEzbU9NPCtoXSM3NVgvVHY+L0g8QD9iaU9iUGVuPXlHR3VBWjhKeShhcmhFXnErUXtQMmpqRixLbExubHM7LHddOXBid3hkeHl7KmtyYzgsejIiYmdkcmUsWmxIcy8xKVVYM35+Y301TUZCWz4xTl8jbGVtM2AwMz8xVWRuVG9NTnc1''@;'; put 'put ''W1lsXUFhMnlXR3oiQV9CcWA6OndzJEN5Nm1VakNCQ11DfGdtPHRRYDlJXzAsPz88R2BeYD0hfm9fKSlENkwzSXlfM3xJeyM2JTRBeUpTel9oYzBtZ1UzODpXInVIRT9uKn4uIVQzVTEiRj9vIWJzSHE6alEydkF3MTVwJVtbbEw2R3tdZ2ojam1zOXkpSmBzblAoXXAvZU1TZFJ0fmlEQERxMko5''@;'; put 'put ''VEB8cXx1YlUjWUpzWVcxeikyO0xKaTZjSnVldys2NTZwOWc8VW54RzUxR0NDNEk9WkBkXV81RiVLVWNxU0IkJl4pI3J6SCtuUz11OmJGJlc2MT5IbU50V1dQRThQXklXSWR2RThyWV5TI3slZ0hNW01dUSMpTUJlOVhoVS4xKElndEpNM2t0Xm82eVs5bFFgbXxrbys1KEo/PC9YY05PaFU3R1RO''@;'; put 'put ''YFl2aW4/eSxyfk1YSG1OXXNCcVsrW2Q4aVN9ZXJeZChAKyw0dUBAN3BLS2E9fDI5ZXR0KklMPSpVWzdtNTw2K1lTZ2woJWRMeH5qck9DLmQ4Vjx5THkxNUZAIn5WRlYuWDBMVipQKnQvLjpVfGRfQDhCZCtMSzgjamlDIStXcHAvTFIpRHlFIlF4Iz1ENjs8fjp6Z2NUeVduQ3RPYmREUypaOCgk''@;'; put 'put ''KTRndV4vOGN2a1BOUWw1LD46JVRNNktNVjVnYHNKLj9kPHxIQFYuW3gqNFZpXnwoTXNZbmo1eHlLcV5+RXp8NixFQ3FGZCpPLyV3Y0FtWkJTfkQzeHxxKkRWb0NTMyh2OEVlMUpvWk5zL2tSMUs3OXBqbiI5PlVPVSVtYUFdKU5nRFRpallJJUd9Rk08XVlENXQ7d3Ymd2JVRmphe3JhYmJkPCJk''@;'; put 'put ''I0smJDVRQFB0fmxOZDg2Mk5pczo1SzQkPWo5dn1eQ3cvJFR2IldNIjpHZSE6JD14VnFhSTEkVz4iY0pwLzpIP20jNkFITzsxUmI5dEJgWlhseCpBbjg/Z294WCN7T3AhNWg/YVQvQz1dbV5jfkx9JSlxcyFidH5hJDpgUlZGWl1seXRwQz1BL2IhNEIqUFZRNCF7QiYia35xQWBlaX4uODBGcnZm''@;'; put 'put ''JShtZzVDe3YsX1Y6RiteOX5jI2F5M1Z3N2x6N3w0c30rOisuWHFJU1EzXiRTSjY0bXxKeklyMDY6dFMvMUEiVXs3KVk7LFV4Kn5QMG5kS1BnXUQlT0tOU2hsOmo2ezMhOnxlKU1LXzFvUDUoP115LyxRcUc3QmlGcU0+N1U7cCxHWkh+PjtLODo8aXUoPUg7QDN4NCVxVzxxPmYxbS5ZRVhUa0xl''@;'; put 'put ''QWBOYGFQIXM8eEJTV2F0Y25UZ2FUOHNkZkArRSIoMHhOfmZtQExvSDgmOVhKbEcye0dJQSJ4JV9vVkxUKyxaNzReQGp5STEoSXg8ekFnOFNwLFl9cmkyPCtoUlsqPnYoYkZAZE04LiZeJGNuZlJJJlBlREldUzJGczQkdDpiIk5kcFoqRFFKVn4hfFQ9cXwsLFZEUGE9TlZ6I3FfcDM0QjVyU3dU''@;'; put 'put ''JDFRYHUhZmcoZGksSV9TQVNwQFpXYil0dWwlbiRDRXxLeihlP3s8ZCpja2VFPXd8RHlRW2hVVX5pVzJ7eGxYZ3Bva2M8Sjx1JCJLQFFBKyRwPT1yejhDdWo/L0svbCxXdjU5PntuR2FmbH5wdi9SRFFHWzU5YEkwPDhaKmAvamh2RTcrKjlEb0xnJjhASTBfL21gc29WQUBWZWFjLztqTS5AXm1P''@;'; put 'put ''XWwkUD5hYWdFenBIMmkiI1szaWAvU0M/MXE1dCpoZEFqQXdlIWRkKH1MMnosZiVLVFkjJkNRIzBXMnpdK2YjTWwzb01dckRncSY4VH10QEovWihBQnt2Ry90JjU9V25eejUqaV5XXVVhM3RQZHYkTDUwQDhDajZ9ZSl9bmM8Xl90LjNRbntiQSImbzBQTmlWKXlrUkx8Yl1KLjJ9LFRPMGVDdyVk''@;'; put 'put ''UDwsMFU9eGF9MWBgKWoqYnZzQlFDNz1QQVRIMXRXQHhda1VoO3lqeCRaVjlJKTpofWVbYV1AVGtNO2hIUn1jMHo+b21xS2cuV2VZLm0uPX1WWmMuTUw4WSE5W35ROUVNY0lPN0whQmxZQ0g1Yk9PJXRRK3BhPEVHJTBOa1R1Z0xhaHpoa2YmUmN6IzE2N35zVyJDOlNLSWJvOlFuTHBuTTNSaH0j''@;'; put 'put ''T199KD1SfWMzWHElfiJROlk0ZysmU1RENmY6WlYxOWtvcnU6YDZePTl0VkYqRVohOH4semN8d35XbXREa1Y3XSN6OEJUR1NMNylRKy91bzVgOSQ0JThnOFI/QWdTPjNTdG5bUl5KTUJRKS4pXVZjK0svbHdUZkNaYjdOSk9mJHBoWzlBSG1DdnZEKz5banIkWmxmZ0NbbWptZjhhc0MqdlZ+SExb''@;'; put 'put ''VUdmckJmfktdTSJNbCteeWM/JXhZOFpvb11wXkJdbl4uVEF8eD9ROF1LeCNkU0ZveTU7SiZOJXR1V2FzcTwjVTs4VnB6R0ElK21sV01AVzNEbGF9QntrNiY8ZFRmdy9uPnlqeWQyZUBGPVs3KmkzcHZXPGApTkhjTV8uNURxRyhZPjlMT3ozVighKD5pZl1gakdNZns4MDwxTVYzeUlgaDhKSjYv''@;'; put 'put ''Vls/MzFkUjlBLyE5QlFpOkJbd3BbWmkuNCE7W3tEfC5OMzd3QS4sbjc0ODZHdDpUfTg0eCkyc01hUl5MTTVnY2JwWy5sd14qZFFlPl9eY1FxMDBVWj09LFY0ZltdPSp4Lyo3MUkmalBJfEghQTlwKVI2OVlIJiQ3Q3taKFhMT0tNXkopbnZ9SixMTmRKLlk3QVJUbiN2MDBuTGhWdm9bWWpSS2Zb''@;'; put 'put ''VGdMamBtNl45Z30lIzFyOC5JKCs7PXM6T3Y8ez8zLltmcUJVTX00L0RgcDw1Z3x+b2ozcm1bazBtWkk3WkFpPk1yQlAqQ0leL0E/PVFsVkNETEMqd2BrO0ApMU9CdChwOkRSaz48QSR7ZExEXmAzan5qQ28sbz01OlNPREYqMz9xeVF7fH5XXUJZJDJ4dF4pNT9QWlFIcj9YLzAmcmJSd2JSJVMh''@;'; put 'put ''Zz5MRihGfkNvVlc2YUcuRGt6SWZMZzdnQUZMcTRUYl5Hd19xY3VwTUgoUFN3ZmE0ZyViNVBzYSNrbmlyMVk3YVtlYmwhWUQjOks/O0I0NzU/VHdKfGhJdi5WLEovMEpAV1VWL248IXxFI2ZYR2htNiolez9IV3EvUmN6S1hmb0BbYFhgNj9AO19KeG1bMUU3SytAIUN2SmNgcE07ZntARy4kVjsz''@;'; put 'put ''fnE/Jm50c1l8OkZrT25EWWxBWVAsTjdmQXMoQjkiNFp0bjcqd0A3MUMxQiVFZHZGT3BYIjU0elkrS1FiZHZMbnVmI0ZdJjxLOUkzJUVVbSZ7V0VRcHVCKTw+cDt0O25kcW1UeipbSjZEei40NWR3JDdAUz5GJUhmfHdkdG99RGZNSVBtWU57VXVaJTx5ZkJUI1ZCRWRMbDFSYEJdNEsuQTdyTnBp''@;'; put 'put ''O3xLZFJ9USQ2WmtEMHQ5WE1qOmpuYn1adU8oJU10QmlmNnRbQDVzYiQqQzxFayJ8OTMzSjkibWkqaCNRQDkkdD50dm98YDsjUUxNeTEzWGNlPztKWi8qZGR5RGl8Py59WUsmZX5MLHZ9S3xBTH0kYG0yIyVGIyhETCVsJHNod2heNEtsWzgyYzdsVSQ4JV10Zk0+SiFjLHVOZSNpfVFgb3tzZUtm''@;'; put 'put ''SyJVWzksR0tCYWxDJCZwZG5RXWhMMUN0KT8vXnEpK3Nlfj1aKmxkV2VTeEQsIWZpNlFfbl9ASiJ0XjIxZiRKYjE+P01nZURaX3EkSyl3T19YIUEuSyVvOnhTWnc9PXQoSyxiM1YkIU9dfGhLNkVzSzR0KiRTRUVPaVdOc3xyKThsKV5+NmR3R3Bve31vMDV2M0FZd347VUNLPzcrTCYiVzhzWnx1''@;'; put 'put ''TWl+UiNEeCFWZCRmQ0h8RU9LWUVaOGtIOW8wVGRmX0pFMHw1ZXgvMCFnOkZdP2tZJEc/UlpdO1N0Vl0sYnRMZkNpN1cqODRYQ20/bHJES0c4NyskfSQyJEMlOk9uXWs/cltDPXNxdzQhflhqcnFZOFBua0VPIWdLPT9fTTh+KW5kNW1uKWtuRiR3TiVzVH1gZ255UnlSUHJpUCp5WjVXaEBjSVc8''@;'; put 'put ''T2teQ3RfJiVOYVk2WncyKT5MfFZUeSs6VDU8MHJgXi53SiFORD9TVCtvc2tiQ25LZCxZR11OeDtwSHUvLmJSa3hEVW0ycylEb0NwfnlrSSt6L1JOQ2QoISFMLlUmWlMkamx1Y1BIWlt4R0dHUD5rciw5WGUmWDZMW3xTc0dVOC8xKS5hISo9KDNVYE00Y31pKF40ZnZMN1dJISU9dDRMLmEyOlU8''@;'; put 'put ''c2hrdThuViorLm1CNWc3IVlqaXh3I0klYClFVUdCY30/WjsmV2ZIKTFBc2spKWojKz1AZyM5czUzWlNqMl53V11ZeFAoQy8hOmgwTFFGZ01iSjEjZyk5JnhwIUhrNm9ETURzKkZ5ZWspZikrW0ZEdVE8WTJsKyZbOFoibD0sYUxNTDEkYC9VdTFOanVGL2ZaYFkpfER8LEg/dSo5W0ghOGZqKnIp''@;'; put 'put ''Pzo3ZVUzUkM2TEYsQFR4KDMja006WixWNVVXMUo2RzFMdSE7UXExdzkyVU9QbkhsYC4uZ1M+QyRJXUoxSnFxdE4sV3l+Ql8kaUB2Slk6REtjT0M1NFFAOlAuNl8pbXdVOXoiPClVeD85MTBVRDFoVj1wUnEqPVl5MyR5LEJjRiVxd1pidXBIfGVvZCJpOiRLRUM2TkJAU3A2MV97QkM2eT0qYFBR''@;'; put 'put ''alZpdCokMUxbQHdzcnJmVmtZc140SGY2bWZRdFdtcGphQDsocmIuZ0clPER4MXVQfHY+YEByYVNSUC8vRSlbXSoxI24/QDQ2a017YVBEZ1kyXUA4JDwmaixbT01IKEZvQXdtYFlVUCN+aF9XNn1+KEhSaDNHV04odnVTR2hffFpVNVN+I2dtZk9RdUlKfSRKcUNCNyNUelBeSWljPnlyIl5xfHd9''@;'; put 'put ''dzJLKXQvUVB4REclTHQqP2pVSnopVThZb11CN29tT1IhLz0jV35vNW0pL3p4KypbXytITyZTUE5JU25VZGQpTElSMCxzQjcuNWxDWmBVcT9FTTF9UDczV3p2UGd2P2NnfmZ+aVRIPmkvNk1hRyNeaj5ZRUhwOm5CMyVNUSVGNl0wSTErbkIhRm8pM1l2Y3ZiLm16KEBsNVJFRWtEUGFjRj9UU2BX''@;'; put 'put ''K01uK3Moc2NJJEVXVykwUXcvRSsmfH00dT9OcWNrZFQxPWI0OypJVSgzdC5gfWNwL1ZaUypiczpESFJAbkhvMjtpR0Y8Ym5xKEVLXkplLislL0VfZTgkQ2JhdzY+K0dwJStLRGd5OyQ/Rl00S2lLdXMpeVc5QlBhcyFidXYjTm1dTHR4JXA7Lm5Ic3oiPjYybCQseG1VNzVGTWhvITJvIVRXISFY''@;'; put 'put ''Qioufi4sJXoseEVfclhvcjs6IXpITkdNRFZIVWJbVSgsKGVkOjNTQjBVNUFAIVtgI3RsTj1QME0hN2d+SHlQX0NUM0NjWSFmP1ZIJFc3YkVLSG91dXNLS2EuYzpNR2JAKnJRNnhLcjRvUDxzVmQuLEZBUFhSPiwua0lYSkF9VntyWHhmM3VQI3dydH49NkRVbnNpei5LdG1sTVIweyosQkZ+PyNq''@;'; put 'put ''WEJ4UktDLFIpOnkwOns8bzRdcihzb3lsSyFpLjl4fCQ5anA5dV4+L0ZaKTNgMm4+b0NiYTxKIVQiV01JYkYhazAmW3MsaEpgOjdfYWYoWD5te1AkPmBSV2dNM1duSEE+bmApbG94aXQlQ3hGb0Z4UUIjVzJ8aSRGSVAiLn48T2RrRldqMCk3SSVYdVl+M3JiKy9FX0FpLFQ4bj8oVVFiR1VMWzF1''@;'; put 'put ''UzYrRWpQbiZzSXRWWH5ZKn1USyFXQzRKSXs0PDJhSmtmYk0vYHUiSmgobzxEaEw2RCNiIXZPa2tNaUsqcWp0RHVDKTN3WDF9aFZJIjJaX1U3N1IoVzwiSHQvXWN9el9TdDpuaiQuRn07SWxYT1U6az1+PGE5XVZTWmkiV1lBbjV3dHl+JEF1UzQzcFZWLHgkRSE6O1JzKm5CLz9HSmBEY2hCZHA8''@;'; put 'put ''eih8d35HKWlQJiorcElmYDlPSHk0aD9xIUZXaCo6Xk8vRDJ6eUVbeWllcHRkVz1Ib0kvd3B9a2UpMCEqYiU3ZUApXjdvYk9pQjhlSV9xLE11RXttKn1YVjhuaHVJZz8zO3AmUHk0L11qOENGYEFBUjNiUiI0dzBrZ31+ME5wXUohPVlHbHZUZF5PPT4oWztlM11UPiUjVS8iQFtNbTlwQXt1SWNE''@;'; put 'put ''KWpyNWdEcEV8JHp4UWBBLFJ+VkNdIV8kZD5pZjJfdWJZZ2dWdFtYUyI5T31fS15zMVZVMWU6MD5gd3sibF9aIkxzSXhOUW97NTdqWDBZWTxWNHUpam0oPGglMTh7XVt7WGg+ZEN1M2NPQz1gQWhxRXJWc2IvM3o9fiZ0PFZnVEFhYShbfD9TWSM8IU02LCpjYEFGd0tlakwyfEh7UkRlJnFSKSNG''@;'; put 'put ''Y29kPDszV1Z+ZXh4e1hpfjw8VTV9ZGVObnErViVfflVySWZTd2Z2aCpJJSpTQCswKCgzNCUua1VdTDx8PFdlWipRMTluQHgmVz19L1h9SnEhbUE6UlNMO3I+eDt5eHMkJEQ1MC9kYVNeUkUoKitnYCNUZENqazgib25YP3VZW2hlMGpwR21JUjppYkIvazkwTk51OWtrRztGZnNpaiM8OHJqWz9f''@;'; put 'put ''fi9xa0RfLFdATyhKc2dOckR+PygqWG56VmVLczB8c1prVStAMDQ0Kk15WXpIUEdaU21tJDFHSCxRLHJ3MW9MOn09bTYqNip4TFUsejRdVlFJXlZtL3UiTWMhT1FsXSUrRl56TEhOdDtOVSFTNzF2Qz5Bej1haH0pPHA3QTk1W01ZaUprQlUsPFFheXI4Wy5VcCovRikiU2Qpd3FvZWk9aVZiJnNQ''@;'; put 'put ''c1g8emdRIWYwOmlzayJ1Tm88WndkWywpWTYvXy5jK0ZgW1VwLDkxQl9LJW1reyJHOy44aVlnci9SWC51NzlXQktCJW8oT1NvImp2VTNaeWhrWnB6X0lseGA1NGl5ZSFxLGNYMzVHSnY0dzptTD4xVWghZU1iRz9TeThkKVRRbk8lWURmJmFBMSU6fkVuQn5xLEZmZTUoYjBudDxhUTxaXWFyQ2kj''@;'; put 'put ''TUk3K3dKfmVLcVRUeWpJamBFI2xmYSkiIT1ESiYoIlMyWnE+cj9GUnp6QSFpTTFhSXl9eGJLPnN3PV9abFVeQTBbW00sZXFLU0pMNDhVcnExNXArc1siY18+Ml8mPDw/NTw7O2N6PUA7QnQxLndycnx2KmVpQUpuUz1dclR4dSRpRmlQbns4dzoqLCJbVHVsbkdSS0NNOys/QlVDcmRPUSEmeVVI''@;'; put 'put ''cDQlXW5nT099NHs9cGpzczFDYy9kNjlyKj1pNVBCXkhpa1cleDdBMW1pfUpsWzg+KmhlWDprUFY0VHtTVHpuTS4sIypePyQ2QWxWKU4ocilsWjBPT2tHb05uWmxNMHM4XSVvSioqU2lPNFVifGleNzVWSnN4XmJ3cmF8SmNgSXRmNXN8UEdySDQ0d0IheXhpfXd9Qn1yLD5kZVM3bF13RlJ5d0Rv''@;'; put 'put ''bDkmWiVhV0U/UDIlYzJ4QzMvUWcuIiZ3cCxVZUFlcUFIaWQkcUEpVShrPjI4WS59KUE1OC4wYHFVLGxeODx1dnc/MEIrWD5UWF9kS2M0XipWdDJ5K2IjOzZRNkk5eX41PGJ2QkRzZWk0ODhoelcmOkFkKTI9e31bZVFmIVlqfE1yNmElcHluQVo1akc6U2NuV3gmTFhIU0RSdFUkRj92anpgTik4''@;'; put 'put ''ZWxmIWo2JmBmdm9zSUZYPTk7aExwIW9jVlBFMDhJZ1tvYjpfIUB0WE1WJHc4Y2sua21nWm9PMF4kQ2NVdVJzaE9fV1laW2dEO3c/RkMkdUpiZmNBKHI+MENRTGIoNiVgLjdWXSVRd1RecmUlcmxLI0tmNDpBOiZSfF9dXkNSbWo9KjdPPCFJa0U3bldfQXtRdDd5SjtwfUk6fEd0YHtiS045W3JY''@;'; put 'put ''QylCUSExL2IkUz53Mmw8MDZSOSk8TEVpZ0w5VTpEdCJMNzRQSXU+TTkpXmAybD9BLDxGMy9xLkVMcjVJYUxVYTtxZHZsNSxMYiszb1dKbGxkLFc3bT0/bVg6O31vfGRGbGE7RGdVT08sb2VGTU5fU2R+JXREdD1fbjNrKjRZS1s0Uy48LmovOnxeVlJzLE15Q30kN2t4K1p7QWQuRjNnUlR+OV5T''@;'; put 'put ''NChjNzA5P2kmYz1VSzBKTzI5clhMMWA2Nm59WzxmcCUjUCJUSmBXeighVCZGV2EvbCFbXTA5LFYiZStzW05deTlCPzBqUGcvT29vS25nNyhLTFdbK0VHKVtQTWd6Uip9fUQqdXUvY0lVUiU2RElVISVwUzgjfVZtXz5dMnwuSE9EQUlBcTJLMyEvTTIyR2lPX1NJcGZySnBkdXJTcypYdDI8RDBF''@;'; put 'put ''V04wUzFxWE94dyJoeUpRakR1UWd4VTZLblVzYWN8cjshPnpsTVdaInRTIXFNcGpJQUFvUkBAND9HIUssWj1+QnVNYmRSOj43QjBIS0cjPzA6b084d3A8amI6ek5JVVZPbFQ4Ln0kVTBoPnBZSFMpKSVFc0Y3LCtLXSpOQD0lWyg1eXFXPHUjYShIWjNmbndtQH1iNzROY0lPLEpIQ2haMy9TbV1q''@;'; put 'put ''S3Z0aUQmYH47RW1PRz1MaVdrMGlhOjl7fVk0YF5tazR7KDZ5MkZuJT81dS5vVFYyZl5QT3NSOFY6XVVPe24oel5IaXJfQGZFd0JoSFE6N0dYSCxZaVQ9SERCd342WEAqSio5PSpzbE08TTpCdjAkSXx4QT97fWxBPHYsKUEzIi9RbTAjI35yYEcvTDNaY31jZTduckFUKWNhZjA3TCJXbmpzT2hG''@;'; put 'put ''JCpHPltdJC40P1lZIzNZJjE3V3xFLjNNPzhXOSZdTmY8ND9wXVJ5eTYsSkx7cSRgaGxPRU5RNmM8K1JnZXY2SUVKJSU6JTxxTngkW1VJcUNRMkBsJU8+TVYie3FQSnB0SVtiYCFoLkV+YjRFRjcyKGppLFRSMyZOSjliZ2ozQjkuQUVIQC5OPWp1SGNsXkQsU25KUkZGTnQ2cnY7bXdUIyxKc0BH''@;'; put 'put ''PVQ7QzNlek9pfH1+QGYvWGAkWj9yfEc8fWJpb1VWeVBNSHR2anI1XXJJS3okKF1WOj9fPllOMVVIST5CIUVsZCMsU0xCaE1dcl9jdmAsQU0iQ0ErcixkJTxOU1hDOko0S3RPN0dMXXokYEkhZVh5VUUmPyRmVihTIngjc2A2VnRtNiRubVVXImd9fWs1UlIrencsVG9QXlg6Qjp+OnZsKjdGbVcv''@;'; put 'put ''IUlDbko5fktyPW8sfHMmSnVGYkJ8OCFdP2NnS3RYQGFxcElIKEVMZXJHfi99XT5qcyJbe0tOIkY1ak1Gd3ElcGErPFV0bz8yXTxfOypnSFpVWDdPSWoqYU1vSEEzMXAmZD55ODo0fnJxWn5MckE+a0pVQmEhflpeSVI6VDZtMSV5OEhNOHk7UlZSdHxqKEtYaS56YSRmOHl2RjolPTc/e3Fvbm84''@;'; put 'put ''RUQqbWxgRjUsfE5QTylic2ZTODpBKlZEcCxMWURibyNNbipUXl9TfDlpcz4xImErW0pydj9vb09tNSpGWS5MLH1xRjx6SSRUeEV5Y2NIVnNqbV9ze1pqZykyKjNsbzQ1bCpFc2IjZ2I3JVl+cV4oJiQ4akRHSGR2K1FQfGR6MFAhcilCeEIqQEJsSmpkencxKHh2WHY1Y1V3LmVFPnRtQ25QNmch''@;'; put 'put ''L142fjpzW1ZtKmVJJFZxYzY4eCxHITd3ZishPGZjeWBpdE1kOi9hfURxaz4mXls2K2RBYV8vI3xEXSFaRkh9UTIqJDZzYldkRDJAbHo6cShsfEk5a2Q2NTgxekdgUHo6MDV4cDBYZVNdYkZ4NEJGSShaYXF+YS8kWllUWktFb1ooN35rTkhQaCl6fi96WHNwcmxbR3VTMD9DbF4kViErZnI3ay8m''@;'; put 'put ''aWhsbEVAQSpFNUFgMlM5TCkzbml4QVtJTGUqUnolQCZKajw2Zm98KV5wVXVwP1NNcTRXKE49PXssXzo3U1BLUUU4e240cE99PjRFL3lrdzdtbVpkT1AieFhEeFhYTCprWWNnIyhHTzIpTXljLzQkVkEvbiR4M0hhMj05dGBhPTwmSTgyaFUhPmwrfStEIU8yOWMvNjE4XkNOUWlweU5kWyhPJnBf''@;'; put 'put ''OHxrP3s/U0BkYCRNR15xfThVIVAhN0RLcV91STpuPD4vUylNWVJBQUVWPWZPfnJxaGE+LE9YQkFjV11iUmpFP2ljQHRCd0JPcSsucilhdjFfUEgqZ1FzJSkqeTdyQ3B6eXMxQ0s5YlIqXU48NnpaeGUsdlozY2QoQmVmSD0hbFQ8NEBsVFZhV1FtbiQ4S3cmNGRDfnpFY3NncyRBMHYrTWwvcHtl''@;'; put 'put ''dlRielM9OSooRVdXYks8fkklanxTYjtuZ1ooUTFoVF92c2NFXmtqSjpjIks+QGhOUXplI1BJNm9VblhiP2d7aG12PnlycntyO05QaCNCTyI0ciIvLm9FS1ldO0cjOiQsc096cjFLejM0V2VwMUkuWiY2PVZBIVBMU3c0TUAue0tXO24re0xOUDB9PWt9OTBDP2VAYUNXWVd7QCl1IUAham5AaE5Q''@;'; put 'put ''XU5IOkRwPEBWJWc9TjNefVleYWxWMnsrVzdIMWt2dWdwfXZee3Q/Vm80Il55U0I6W241ai5tI0gxYzZ4Xn5YUHNNfUdkX1QqVUJIOz9DX25wdV1HNFMpPGtGZG9uWm9eeHIhL0wxQ1d0M2IoOlZ3XV9zOVddYSZVVVs0dkh0WFQybTxvdDgidilXfnQ2R34xa3VlclFHOllrIVdvWk1CP3R5cTxb''@;'; put 'put ''KGNUMHdfMjptKStVPVdQLnB3WGIpUHJ5T2luMC9xSG8uMmlxdigjUz88ZmUhQlpQQDQ/S1ZdNCQyPlJ6W2csbzdQckBzJmIjJCZmWDZkPkBbVFpOR1FeWmtUXW04MC8+R0tiaEEuT0pJNEI2PypSaWtUaU9JNUtITzB5SS8hOEoybGQjKk8qSSpRTWVmcEd0bTtCXnBUWyxrfC8kU3RqbCRsIkE7''@;'; put 'put ''SUA8aU9eYTR4JXpVVCgocVNCdHJ4LmU+U2U0TWYkPGwkb0YvWzc9ZG5kOFFmcnRnXW1ldGlSSSwuSEJAelE8JmlXfV9pZSooJTlCQTYqKDZ2X0AlWCZXJDBIOlJAVjZCRHolKHovaUY0ej9XN2lVOVFJS2VbU0RCfCxlU1QkK1N5Uz9EVGt8QFlNMlZqXjUvXjBGSzJ5KSgkcGNBPmY1JS4rei9U''@;'; put 'put ''aSE1O1hZLloye2s+am9OYWQwaGoiJkBDSyk+RVFzc0RLenNLXUQ8b3xAV2lmV34ydEkuYU4sTWtETnpePDMsSCF7QntwQGRPKE5GJjZ1fGUiOjxsZl5FW1IoTEkwfjR7NzY/clpIc0EyJjR8O1Iiakh4UypqKWcobmFPMztqWzxNZ1tFWFZBYkZLLnxdcjBVPjBFeS9ySEsufH1XbTd1NVQoQXlD''@;'; put 'put ''Lm5HKVJWbjZOXU4rfFBnN3BvOlFrV29yXkZ9ZUJRPFshKnh8U0ImTDRaJXNjKjhdVUpWKV8uIS9fPEY+VnFwPlI0YjBfSz9+KzgxRSlqZUZ3RyE5QH57Qm4jMGA7YF5BTTZtUSpnOWsuRlhENEp2LGVCPmNwLnA7Szl6O01SKGxDe3ImNWxXaXt7WyZaQ2MrMGtjKSZkUkFuQS9HOi80STRQIysy''@;'; put 'put ''YzJ1TClzNkVZXyhVS3hJMHpCVTR6PVhIQzpiME1TWWJ1PjpKaF5BbGNXZFVmPmxZQlJNOmMpUHoiZzYxNFIpM31XK25zOyozXkVNVmR0OVBxckRNZSE1Zk5DKjhvMixOLzYiJn5tOGVYfndqXnw2Z1ZkOSksYnovSC9CWitGcmYzMlNUeG19bD5YPXtbSFVtRVdqdzEzMCJ0LGYyUixne3BZUVFJ''@;'; put 'put ''SkZiM0ArL2hZPVduTVJFREBUe2dLd0NQL3NAYTJ1I1c2fl5nc3ovQ1phTkprPU5UPCQzTChfe0s4enhwMz9dNlA7WWF3JWZgZkxOekclVWdRXXNtdmRwTWwpOFZ5SlNDTH09S2xxZl9HIn1OKm88ZTw9YXJ4JW9rND5+fSEoMDpsJTdGMkklel15OX5PI0ovSCNpbjghYXhbOjQjKDosJXhOaEAw''@;'; put 'put ''bzFDcDFMP35TMmZXVWFjT19vQjIlNylKNylefEhINCg9dUdsMyZ1bCkvOTs6SVY8ZVFKNCpfK317MHdCIXJRTFkzJll+SEomQkVYKXE2ZFFKLDpTYSVnSTNrVE0vM3BAVF52YHEqRS4laj8hSmJoUmw9aj5CfGByZF5BcTMue2JBVmsxRi9ye0dRYjJ1TCJXXl1jQ3ZRd2tuUGljTixTYjhWfnpp''@;'; put 'put ''ZDt9MEphSEkwKSxMKVAzVE0we0NbX0ZTT1hJfSk0TUpzXUtwdU0hYn10QE5ELiM9a1tVTHNZQXszZnwyYD9JMXJhK1hQeVk7bWlFUn5kaV15fk5gPV5HajlZIW9mZ3Jad1tDfFN6UjAuRHkmOWRHfVM3LzhJZ31JUF5XOXM3M2NAZDYxQE4le0VnKkpHeyw2S1Y9a2phM3BEcl9zK25FTUZhYHx3''@;'; put 'put ''Q2whUWFqM08yPj9eU19AXzgmPkxCfD5fImFDNEJzKnp0ak56OUlCQzBJZExyTDJXZ0hodWBYc2ZRITE4P2JGLzc6R2kkWmwrLFtILENIQmN1dCtAJlJrdj5vfVEhZ1lgeSxkNntkQnklakZJRCVKZGFSbmlYI0xbPjxddzE6cj5MMVlGPjddUDNJMT5RQCk3aU9+a0QmIk8wLCxAZVkxNUFaPCIz''@;'; put 'put ''Pn5ZTjRyVTs1bTY2LCVtSmA6ZDdKVDxuT3MsdCtTY2IxfUZ7JiZ+a0s4Mm5PMCx0K1NjNkl7TFU8S3JEal1vOHdfVng/Q01+NEFaMT9zeU1QOEksNE8hQ3VHK1YwKUAvaT5gYUlQeGIrcD0lYCtVQVpiNjVqMTxndT41L25oKCt+OXZJclQ9U2ZHJW5qfVhMWTxsfitPZiImdVRmV3dgN1FkbU4u''@;'; put 'put ''aWxUbT1JTWAzWFBHXT1EaWAxWTIwVjNDLlZlZ1R5eT4rTEZMMGcyYlIrK3laJTo1SiY6TEpiY3kyMmlgZ0UvQCs/LmVgSHY0YlM1M1lfYmdyJTtfU2UoKSMxTDFeVVlMQ29tS1JIZmdDZVJIWHdFKyFvR0VZXzwlXnx2ZCNbfX4+aVZpc2tRJVJgVGFuS3dpKSQhMkczayQxUzMyJF1CMm5zRzRK''@;'; put 'put ''filAWjBaX3dxV25jcS9Ue3ZlOGRCfnJgOCImU0YiQHUkN2RvVVdkfnREQ2VJVUpgSGNRKnBNc3VJKElTYTg9O3osc015bXRqXmRfdjN3Q2cqSyEmI3A5I0Iic204UWkuenJnb256P089bn1wdj84cFtZPlZRaThFR1Q5dFBHUWk4JW5XYX02P1UkOmRyL2pjQnRmfjB+bVRmWVV4SU9HZE17VzdK''@;'; put 'put ''MVpxSXg9MTA8Qi5NSjcoalheWlVCSWhIQU1UPVZOSl5WUD5yS1QqM05pdj59eHJWOyZ8TklPUi4pTn5HKmBgK1QvcVhPZSwzO1BlL2dtTzd5Kk1COmQldXc7SW58fk5sPV14I3A5OURGfDh1XTExMz1QMUFrVSVRbGBrfGI5YCZ8OnlwZTFMOEpfKUtHMTxLI2RRPXZ1MiV0LDgqJGxXfi5HQ21i''@;'; put 'put ''NmI6aW9VWHdJZ1BFRG1lUkE4Z0RrKH5yRylSQmA0KU89O1JOIzZ5Xyp5cDEyZlNNKFRUTjBTUD86ZDZGR21oemI7YmgjdjVHPmdSdG02V05PRVBaT3ZifXg6WSk2I0cxc2Q8dkVfXTtsSzMiJj99PU50MyxOdypASDxvM0I1dzpwcUVgRFNpYGkyW3VmO2hVdzJkKyQ+UHxqVmpwTGh4WzB2WnRW''@;'; put 'put ''KWRebE9LdUMmfnNBI1B3QE87JSVUQmdNXWNCaT04OHRFWVtJUUdSVTNXdlF6a21aXTpHSTNXQDthM0IuKlA6flltbjRDOmd1dD9fVUdOLiprakpxRWdFeml7KEpxXl9JckQ0eG47LFBhKD1VcjtlK2ZUWDJfbzArfElfSWMkN202M2lwPDZldG59ZDVGcG03Mk92WHZPVSh3VjxePHZqT0tGISJE''@;'; put 'put ''bjFVaiR8USR0aCgvMlglIU53aX5tTWlEXnxwTjN6Xno6N3RlTHFLQ10pUG4uQWtjNF5TQDA+NSZCM1hjJSlLez5EZmkubEphRy5LVykod3xyIjZ8Tkwkc0Z7bHksLCpWKjROO0Uqa01qI2FbeUlCXzhtTEY5R09YI3grJW1kRy5JZ0hFUStwLy9SLj9SJkN5SCJ1RS5LNCx1YnxTMGk6R0NxMTJe''@;'; put 'put ''RH4/IXdvQzAyUFR3RU5QUSNgUlNwPHhicyxKM1QyZSNJT15ZI1pTR1VNKVJoKElbSiVRLmV+b2ssV05XVWQxYlZLXTR6e2NeYT5ZQCsqeXxVPX1IcS4ybX1kQj58U0lHRUhbPDNtfGlHPno1T00pUlVsWyxFOnpMVGI8bFBVRSRUUHAySjZ7WltIdmlwJEUuMU1WPiMjJk07JUI+L2VRNnhZcTko''@;'; put 'put ''ckFiU209PlBrU09gLklea3slOnNXUj1aOnw9IW1JWXN9P2V+NShfTypmd1kyb3BSWXx6bntabVI+OTlnbnZGIiZyJHp3b30yJkZZJFFHJkFwTTZSYkJrNzFdWnFTQl1YMyFQI1ApNC46dSV3QDokZ0BKXW1LczklZT1tPlkwUUljZiYmVnw4QiMidzd8PV45fmNyTS4lQGk8dnlGb0d4XitRTUZv''@;'; put 'put ''VDZFe1pZN3JNfilSbjhBK294cCtVKElzZ281PEZmPGd6cjY7LGJ4UDpQTVYvTClSWWkzMmB5P0lsalt9YFAxbylKOTwqOSJgU09fL2MkTz0hem0xP3l8SVpVaGVYa1NFWV94MmhOeW9UMltxM2VPOGllL1Aoe207Lj1yc2BrIV4yWEowfFM6ekY2OSRKKDdePGpuLk0+RFRtcXp0IiJEaHR4OSZ9''@;'; put 'put ''YTBUbH02JVE0Q019MUkxeUpEMmFAQUtYR3FBM20xWCxXYmJSflUqdns/P0BMKzFFSzExPGJ4byhYISJeNUkwYE1NRTE9YWl1Y1QvKXIkZ2hIZTl6OnZ8VypFSWFLJHlSXihdcjlfSmhzIk4zcWhHaF82QENEOHszPDVCY3pXOCE5JWw2IXtKdGFkUkZDdTAybm1fcDozPURecX45TXJ3c0AsaFpF''@;'; put 'put ''cURufkA2UihyVStOPnI2VFk4cDMzVDNiWyU7LllvYzsvaltZfTZdYk4uL1VeIVkpVi89NkwrKlM1fSRwQmg/O1NOUCx5Oz9GcG5sOzhjJSpBUDN3cjgjPnlsQnksfnpgPyliQFNPND9xZi9XMS5qU0xrW1dZQWFwTkNBYjdKVEt1NT05YX5dNzszWX58PTg8S3JFTXxbTztnLll7ckdlMkB+XTxy''@;'; put 'put ''YjohSXJfbFguLyNBWjYqKnspZ14vRldlOS9iYyFQWjJIakZ2fkkjSGlhIzFlI3VzTiJDNnsuZiJXIz5YbCRCMUZXJH50LGY0fVBuS2RmUm4yJjNoOFZmaDhda01HKF10PDlJO0glQzFdcE57RFNtYVorVzo4NmRCS3QoZWpQTGt2dVhyeGRyNDJsLy5+eEI5TXB4PzpJMVQoRFE0WnBOaF04JXhY''@;'; put 'put ''czl8QFldXypQZCQhQmNAUkBzZSxnPXV1MH1DO2dHJCtsRCs3Uns5cFVeejx7W2MwPUc5Zk9OfWs6ZEBZJUt0SyNkYGxZYSljfWJofll7WyRkUSR5LCEmSSEwa1cuT2RRTGRTKko3SiY/PjF5KWM9cyNdQl14JWhoQnB+UzB8UDhXYlFebWRjL107IWZrTXkkI3ZxRUYkT0hBRyZsXWtPd1lPQ00l''@;'; put 'put ''cVllQkhAaFUwTGBCPl1hTWlqezxLKTVkV3MmZCVWOFNPYHkxaG5Lbn11aiMsbisjfmpaUmg6YENWL2RraWF2RkhLWk92UD9TJCsmRFoxPExhflZhREkyfGt8YG9oYVtQYWM4fHo+fmZRTXhPIW59dkxeezMpbWQ/c04uYnVLNFgrWExMKEJIaWhLIU81VkR0WWIyIUkwOVlVWitfMF1CeV52PVUo''@;'; put 'put ''MmBpTT5lX3U5QEJZQVN7fFdYPj1fNXBLaD9Tanxqb2FdQzRMbzBYZCEvJiE+WVdqSlNeP3ZFKGwwVzY+eUheYnpzSC8vPWgjNTo2JGteR1tCVS5tRVZTMC9bKDZvPzhPcH09KX0/d3sxdXw6R3FRPEA2KmN8a01tQlE+RGRhVXBDOUVrQE5tXzA7RHNQOlspI3QjdHYkcEZOLjxmQ3pnMUk5WGw9''@;'; put 'put ''PjxsMV5Wb35oTyMyJlJwSlskQnoyZnIrKn5ZSXhETGd9ZFFpc0ckfCJhfWNufkdOPFV8TDRpRT1lKEMlJEFFa1RCSEM7dm84fiReWiVeeSZJaWopP0dEVHQ4fnZ8eyNabW5kK0Fjfit0OH1OVzBKOkYhfn1ObV98PGZTUC81I2E7WSNGRzddbj5BbWpQSHN1dUV4Y3cjZylPakkjezI/X3BQOTsx''@;'; put 'put ''Nl9RfjBWQSN5aTJ9eDxAV2Z+Y1ZvPD1lMlI0X3ZTS3xJeFNSQ1MoJk0yLFd7OS99NmtjYyxzVjNTfGZ0LldBbigpTjtqT3thOVlHRk92TypBayZjdzVIZSImJWV4aWhFSEVLbVkzfmJlMjJIOVtTUVJkbV4scmY9K1lRVUdtb2tGXVs1Rmd4b1IkUlk9PV8uWzV1c0J7PXgjQDAyY2FgZ3ZVXV51''@;'; put 'put ''OmFXNTw1PktmYHJLfmhwT1pdJFolZSZHNlFQQCFrYypCWVp+Ry9NQDIqSW9WQ2BCLmB6eCFVRnhHclppL2Q0LjRsZ2x5OjFwV3xyfldtZTBVN09TL2VnJVBpO0ZTKnE5REVXc2B+MClGdiVFRVl0TVhEQUwrMmlZfExzJTI4PTg2MmVTOWlnd1A+Ti4waFEsdzlqSHR2NTo/cXpAUmc2djhxS1U6''@;'; put 'put ''KVpdelh8eEJYNCU+M2hYPVRCalFRZEQ7U1d1OWRVPnM0cyhuMGV6b09SKV1hJTg5VFtwKFptLHBwekdxcXFJJnZydHdYamlffUdJPCRueFE8JitsRF5dNShoIyVjI001KEgjLn5tSCNMRWYkXVsycmB5V1dvYEx3dn12c259NUgiWn5tVT5wYVpYZSh9W3F1WHMkTmthbn5PUz5mKWdpb0Q0I11N''@;'; put 'put ''bkhmP2FhandrNEtVfDk7N2I1QW4oOXJ5OlZCNWxwOzNvLi8uOEt2QXJTeH53KWtrZUExcnMqIS9VWkVJfl5wNXJ7UGRRKCU8LHssZ3g/U1drZ2JDIVg7dj0pai4vX3trPnlyKD97d2thTH4uQkZ3emRjJEVEXWklbnNoVzZ1VjQueCNVNDUyNE9DYkJ0cHBUVTRSdm9wc0NoZHt8OFdPUX4rQFI6''@;'; put 'put ''OnNxfFcsc1QwPkBLWz5pW1JvIyZSPmZvPTpkcGVzUl8yPzk3OWI9OT5SVHF0Ml4uLn5gOzJLXj93WltpYElialZoRDpyVV9TRks+IWtwdWZbYU5oampNUjRjISZGL1V4d05ILmgmRHVQQV9EKV9FTjVDSjAscy96QSg6XUdsKSF2MiZEQVdlcTRAVDh3VHNKdTpjLntqYCZNVSQkaTBRdCpyKGNP''@;'; put 'put ''QW0xKDprfj42Tih+Z0E5S3JzOU4uLmZifEE4aDd6XTYzOzlKem4mblk9QSxdWzdtNzBlQ1NSSHI4aGMiSnQuRGg7NC9GQCg3bEFzVSUqSnY+bUYjITYhfHxTfWgza2ZOMFc1cSVkeF9gTmZ6TGtQaWRsaG58eCVOXUd3R2YucHhbIkk8Y0RHciQ5fU5Ua3IqXypdaDppPnhYSV97bzI4cWw+eT5j''@;'; put 'put ''OzUsbSwyNS5LbFtuTVdoMkteaFZVZjZjc2BlOU1yUzJkaXZlTE12LzwySDB9T3dPWWR8MC5uaTdpT1crUGRpWW5dfmgjMyVTJDpGZkQkMF54UE1TSGtmeCN8JEkzR0xXQH5lOl5eNjY/eyYpSy5TPnhfTCN6RU5qc0siXmh3VSwsIXN7cypZVUFSQSlQKlVCWVo+MGw8WnsubXdKT145YWJUe24k''@;'; put 'put ''OGE8Qjk+fkZwY0tNblYpc1RdV2xTQXh4dlBHaTRnR0VhS0goQiQpLmYqMnIldWI1e11QL1cvTTE0c0cyRHliYGNEVixwTi5qVi5ObE1pYmw8TyNJZCklcFBtQzlPYGZHblBRZlA1VmNFfD9KV1FZIjNhUUEqaj15Ny51NDtLUDx4RyomQ2I+NTp+VGg7cDYsKiwhZFRPVUphW3xIeFRJUEpmZGAi''@;'; put 'put ''IWV+ZFE3JXpaKHFEWW9yV0JaYiN9T1tQaEooMGZSO3hrZ3RHYXVMZyRiaU94aG4wUSpsKShoQWJpT3hoOXEhMS46TlBSaVROfig0Y3N3V2Z+S09RWGdDTFhnTntbMG8sJWo+UkQ0IV5+MzBCX0IlRnA/L308PmYmTSxPbygxU2U7L34vUFRgLEdeLk1lJHVGPiMud15gdFNEbU9PW3dgWzhsen4p''@;'; put 'put ''c343YTcuJkVtWy9seypLUyhTeltsUXJsTSxlXyYpKig7YGN6WiY6PzsleTx4fn1Uc1IhTFg6WkA5PGYyWGpPfjdqLDY3d28wX1J1RDY5cyY2JisyODh1eTEsN3JsWnEhQ1VPKEc3fEV7LGMxWGVAUkp1QkhvdF9OJU5+ISUsI3I5fjVdWDQ/bUh0fnN9ZWBefmh4SjpueD5teHUweEcrUzw0ZWEi''@;'; put 'put ''NCxUKWNqM1s4RmFyLlEqPF1fS1F4QiN4ZTswPyhjWUVLaiMkRnM2e05zIzpYUCxCPGZJZEB2P2dzSHAlSCRzQTpDQVh1V1YjR0FPQTxpPW5yO2wvKF9Zbj5uPDxaPXs7bC91fDJyODdtcElmMHwlOUlMJmVTKVJ2MXZpfChfZmlaZXA9XypKPF9UKEljSzkhJVFUOTl2ekA4SjM2cmM/KWFgd0Z+''@;'; put 'put ''VXFSalc9OVZnRDdfbUJRQCEyJGtMfFc0TzJSeip4M0lVKi96ezVyM106YEksMHIsZTsmI3p+cDEvL1V4PVtvemByNkY1e0d5Zip7OF5TSXlmMCRpdShMdVt4RUo6dytTZXh9WSo7ZVMwUHVDP2FzUDFEMSNhKSZWYzZoWH5Xa0JeQlNecnB1ZDxKK0VuLGpWS3o2antvI3ZhREBiUVV5c2g5eXxm''@;'; put 'put ''fW5rQHI7PWRSVH5YVn5NU09saDI8VSQ7WUJbTGw0UlFQSCJdaThmRCkvYm17dXI6OmtoZF5WNVl7Xkc0dEw+bSE3SStVeEled2oqZTFEKV0wRDVUL3twKH1OKyxvNn5nZmBkb1cuVW4mPk1vejAsJitqVWBodD4kdT8xc1p1Zm8rb30zXTNBOSY7JXNsN0JfOHtiXVZwSCpsTlcoLnZNbjBGVElF''@;'; put 'put ''RnpyJGZ2JGNpRUs3fFBzJTJGOVNrNWZBc1lrVjV+QHk2SSxJW0YrRi4rKjEjQGszMXllUyxpOj9UO0pxOy8/Lj97dDp8TW5INDp+emhCWk9qcDhHJkprTlFOKEJDQXwwJWJnOjxEWzZoQzt+JkQrLzhQM3Z9Zj07XjJ5KXYmaEViSXh4Lkp7MTpabz4sSDlIZmgyQ15vfixSLEplO2t+YW1MU0Vf''@;'; put 'put ''JSFZYTxNZzIqfjlwaFlUdkZvbF5OQEFaNnxYLnlCWl9IeDJOOV9VdGVxU256LyFyaWJIW2BHVTpNRCRxUUNddlVffiZUS3FXUkNhVVNzL1NgbkE1OXVSciVSPHt5NGlnZU95OihgUCY2TVY/QTpjI1ZTPGojWGIvUmNVOUg6NCUmW3E7OVVZKmU9KSk7PFJSSXQpOm1Ac3NCS1JtdmA2NTVeWUY3''@;'; put 'put ''WiJ9cyFrPV5zQl9dSGV6WVRLVU0wbk01TXRkPUJzIkZ9OU9bPWFYSE4jImREeDZAVWZ6IUI9TUthZk96QG94fGJiUjMqMG82WThrfm0/ITZQZ1toV2lWdk9WIUJ5PEZaWD8wMHJvITNGcGIjT0JTWV48an0xaldTKnI4LksySG4+UDAsWF1zfExtNFFxPXNNSm5nX2IlckF9Ums2KWppaClHYks8''@;'; put 'put ''Szw7PFFuWit9bXBucHsrL0d+fGZOMks8ejJSV3o8T3Rhe0pMZi8zOEYzcGBrezxASWRWfFUoOSxFaHRdLGM3VjljXzdEMD5GW2g5KDYrYnlDZFFTfmRVcC57JCw3X1N0b11jLldrWis9e1dpcSp+SVAuQHRmVElbQSk8QEZ9UUQ9QD4/cUJsYWpPM15QVlNuZngkSTx5aUZiSWZ4OHh3VDttaT9P''@;'; put 'put ''cCI+ailENzg3fDkxUXIvZCM1Ql9dQiI1Oz5gcUlhMUwuJUBsaVpdUXtbSkFXRGhaaDpTZC8sYyV7L2dGQnoqOiltSTYsSzRuO2BDOkgqUzxeKEZmY0coVX47amliWT5lbE5fbnBrYmBuOSlUJTlobDomQHIxZDdlbFBSQDAuYU5dK3pWOlh8a3hgTGBELElIPWB3PGY6fCVUfj9pdjc1N09kcig7''@;'; put 'put ''LjJoNUY6SDE+TltKY2ddLG1VVE9NT2w9PVledXhSJihRY11YRFJEWlp1Ki8zIzBJbF5Qc0ovWVUqMUR5e3JJWzQlU2hyLzUsLDE4ckB9Xnx5QDUsXXUwWThIYUlPMSN2TSFSIzg8LElXP3ZuIlpdflc6bVp4VUIlQ344QFZdVHphMUJLTl0zbllVSDJCcjIqfEowYnFrbWtHTiVoaG5eLjVEPis+''@;'; put 'put ''PDA1bWFwXShjI2hwMyNlaiVdJH5UQmtnNj5yPmslISh1SltdSmBqPDA8amQyKltNfW86UTpGN1kwWXomVENVTjNvLHlrJE80cE8ubjYvIVR+YyUkUk4zcnsmUCQpbFQ4YHc8Y1tIUVUvRFosKXdyTls8UU9YSXtITSk3YVouanNdNUQudzlsViQ0dmVOQlBNb2dpeF94Nn57WT5VTjc0TXgkUXgr''@;'; put 'put ''Z3ApJW1oP0NAO3xTZWV8UjUyYGZyM1IoJTw4fDd2KUAjJmt+TEAvcFF1KE9WNHB8Ij0/Z0Nfc1ttSUU7NFRIcnt3aztpY2pRIT9kfkBLcSw0InsmOiVNeVlSdGRKYXxFZHw6Zjg4OHU5MER5JHtHb2JYbWVwPyU7c1pSMVNwOiE9Mi8rKHZWZVpbM2orN3RgeUJRU1Vxejw+RXlea0kqeUZVUFdM''@;'; put 'put ''aihBQ0hUWWpyTCpkbUpPY084dylGNDJWemBKYExxe2VwXyFzRm5Na2guczFreXtPXkYpKWs0USxJOGNeZENyUTRbWDdjcUlNSjkyTDw0LnpIOSxSPlBQOEkvWHZSSGF6WD5oJWheUmY3fTpVWnVrbTFvTzFPSUd4KyV3M0lpTyNkcihNQE51fT0uL0JFVD9oNmZefj07c346dU46VWJKZ2EuVCVr''@;'; put 'put ''YFo8KTkpfW5uL1crUTRjSlNaN1Qhc3RiOkxFSn5MWnc4UmVTeU9JbzluQFQha1FZJSFFeVhvMTlQUV5tUGRbTTlyLDErbTMwaUZLO3Y+WmVoZlZ3SUxNXTw/NSlTOCM4TCo7IzdTUn0xKl9DMlEjc2xQJmEqQmtpQk08RXV0TGZMe28/c0JjRkQkW28qXkNwNis1JVBwOiFpLEBzUi5KfnM2RGtV''@;'; put 'put ''bCVxSTNGQFZKTyhuXlNwc1VmKkIuZzlXMT99eT5XX2hgW1RdX3tMayEwIWFfRF9SaEk6cTs0TD8hTERiV2ElclNHW31nSlpwcFo5Nit8Lm1+Y2QoKlZKVyQuTVdKfTV1Oj01amFGalRAcWprV3V6XStWOG9wJkBDS3E9WEI1Jm1ieSs5KWx6QHpKOEF5e01meDh2cnlKeU88Q15yTkg8O3I3XUIy''@;'; put 'put ''S15uIVlnUkJxY2FOJjw4fEhMby9YUCxzd3lvOUguPmc0NmcwJHtuLC9qRTdlWD1yYng2bzVmNG43NVcjMXNlXnguPnJpMWEpPFIyWVVtP191azUueWZ6XihQejdDfjE6QTZyODtmWnVYVX1dLjJXRXFudXJbcTBpaHhFJSg2IWpTfiJFRCo4RlZYOXI/K1A1VV9YNXFOaCtTVm84Slg8cClZb1Y5''@;'; put 'put ''MHVbKF1yUjUzN3xvVU0uWl9KbTNbQVpNQj4kfC5zd3w5ZSwlN0BfO0lnZXhOKS5fWnFVTUw+LFJWaWVdWSNrUzJINV5IIy48ZUx+Ull2ITVeQ2RNSzUrYWcySWg1I1cmTmBDU2MsKUlzNSUhL3Y6eSxSWWgwdnYwWEgqRTFLTiFrMCwydzRlOWpIJk1sd0AqUyImL3spR3hAbHF3PDdTdS9TVmNs''@;'; put 'put ''djVxXkZAMGNbWzhtUl1iQ0FmOlc9bF57MXcpPW5mczQkMmwuK3VpTzRAKW0lVX5WInlheG95ODhYUGtZZyp8dGxZN29GSEgmUE5tKSsqQnU8U103dCowUmEpZF83S2JKQyUuT28/JS90TTYwQlVgb2o3PFAkQkVCN24zJk14SFVaWDIrKypBLmFVV1cuaTlxaUt8QU1fNDM5WFJ4cyNaQnJMYlhk''@;'; put 'put ''JXx9RSxPfGpbYW1XelhvOWZeKHd5QC5wYm5EO1FGajc8JHhCNXR3cm5tWEFTWyFLNmRVVyQzdkp+TlJjRXwpM0xXeVhZSk8wUjxrUWNSfDF9RFMiJllWM1t0OkhpSnpNW1B8MmI7OENPRFBeaitbfSgvRjguJlpyaGt+WXJCWDxdTFJaKDZZcWh0XUdac30+KUhqOzh7dy4hY0leX3lRJWpeX3lR''@;'; put 'put ''Lz89SFoyN29Je3Y1JjE2KnBxRDROIWR6ZV40eHlLUV46anFQbkp3YitRdSp2YnNGR1cqR286VUJRdWE9Imk0VHYqa3Nnfjo0R3EhLmMkSERDJHAwaXxmMnJ+KF1gQ2Z3eEJGe3t0MTBjcDF2RGp9MlVRdTUuaXR1Y1pyd1F1dHNlaV9LajNvOVUxTzRUVWs6YkhufDE2TnBdZldiWVo0UERpRChQ''@;'; put 'put ''MSg2SWxDVXc6SzN9fWE3P1BOWTw/IzBySlovWU9INjp5QihHZG5HdGIvUjBGXUVkUDMvP2FjSEMie1VRIjhNcjQqQjxjTWE3YXFVVHlkai5kVlB3UWh7d14/dHVZVG5wc05qJVpoPl5NbnVjY1BoQnNXXnI+SU5ENHg+UH1jcGpNb3pLUWR7eisiIWlzRUlmNVJsWiNSL2RVIjNfMk1FUHlDLyti''@;'; put 'put ''VnkuSlQmLDQ2b1IsZk83Rm4hJmA6V3A+S084UWBXejBLUVcjSnNoYEJfMTxGbCFJQz1WYjpaaTs4aDlhdl9pbytbKzAjXWVsVl4icmpCWkB7cXUqUS4kN2BGWUplQ3FmaGBtIUpEO2pvKEtaVSlsey5GdVlaV19gdl1KSzk8TiElYkA8WFk4REZIcTV9VDIxOWhzSjpfYzJNeDArQXcxbUxBPHBp''@;'; put 'put ''Ult6IUlARFlfP2whL2soKmg+XWM0RWJtJWlfZU1hOWc9NEtTbCxYRFkzR3V1K0JSRW5HOH0sXzZDfHw+P11vWVc0NEtmZF55XUdXMkRTfWZuLnBxPz4/a1MvNi93KCx4ZVVRQWsuTXV4PU12UWNldlE6MFV9TXhpTjU+L18yUyZafjpxW1A0Mn0mUi9WPlE8a1hESWBeSzJZZzZPdEBMZStXaWRg''@;'; put 'put ''antOX3srIj83ezFBKDdSezdsTDg4T3RVS0I6cV1FeTNBTFNqZEhfVzUuej9vI2R6RVdVbkhaQldvMit1aUZNLyh6VlRqKyh6cjY+V0RLJWxkSDQ2eC9kX2xbZ0J0Vig3JjclOV1EPTZYV0pqX1B1IzsrNDI6S2ddPW1afFttYEsoL3p5aSNDJStyOW5WM3pGdHE8UHU9d316SHMmdV1+V0kudkJr''@;'; put 'put ''NGk2d3gmZ2EjemdqXzguSHp6QGkzSEpOb2smNisoKTh+ZFAwflUpKTJuT087UVMyW29XSm5KMmdAJD5HJHZFKGcuYDpXT34jMEBnWi9dfk5xVFVve0dMM09NVUBVLlJvI0hodUhqJTs6Mm1NQEpXSWxpcEtkRF9ZN2JULi9dbCVLbz8iX0lMSGAyczZLU2hkL0dvSUI7e3tvRmo3VT8mUTxkX3py''@;'; put 'put ''blYyTHchZTNoXnJ+TWhzVW1Me0xnXml1SHY5YEhgLig3dzcoOWZgciVLK21EVlVdWXleaFV6LE5TWChsOTVMTj9nKTd9OjA1IW9yPVIuWTNpM0U1ZDo5Vj8mSi80RmFnVT1HTGdQXV4yL0ErcCh4dkRPOUcpLFlPWSM5R2slZ2ZRdHk4WiV9RDltPDVue1pWSHs5K11wT354ZXw7cjkzSHN6IXc2''@;'; put 'put ''a2BqQmh7Tjg8NENnKXYxKnhyaUAmUFA5V0JoeDpwVj8oUFkoQjtYRTQoQ0s/NnJwRns0QGAmSz1YISgsZjAjb3tvTmVGOmFAOzJlfVJJWHs/MmpeUlN8aTNaO3hZWTJGcU56bHxZTXRJYUVyVWtDYS8wRXk0d1Q5QCtxaiVBPGxDYV9Vb0JeSXReKShCR2Vhcj1RRDQ/MCR9d2lgL1dwYj9VUWdd''@;'; put 'put ''MjYicDMrbE5oMEc9dyNzNnMjRncxXnNfRzFdfm5heSlYMyM1dEVuOjhBKkJjczJVNnBvQGY/cnklOnw0S2l1OkVvVSlDXTBbb09iSlFpfH08PjJiTF1NX2RQMH4+VD85SXg/bU9xY2d0WXRqPjhneDApYTlGPjBpRCNCX0FxZVhrPFs9YStVPEojU0pxWnA2fjVFPXchdmF9WEl4WERWUXU1c1Ff''@;'; put 'put ''UyEsdEw8MmM+WUFaeCFJPVYmN0F7MV1qV1ZZZXlSMWhZcz5OI0lbUH5jMkZddyVdTzZnP091bC96anp8eiN7TlE3fXU+VCM4bDU3InF6NWxhcmNnPn09K0MlP3x6I3tGUCYvOEZoXWpqRTNBU2tYKzZDVmo6UipdVzA/dzwxMGV2OzBSbD4pczU4fkB5RVFfekE6ajUwYmRyaDEvdyIrNUIiW05f''@;'; put 'put ''dzJEa0BUK3B3TiZfWEA7Q2J+Y3NgMkRaJl89KU9CTFZUTDtDT1VeRW5XS315ZDt9V0Bqd0hKXkUvJGZzaXojfVZqYmNofTp8fHM+ZGBHK300QzM/QjZrbzFtfitKJW4xMD9laUdfVSUrYUQoSTMqenwyKD96aGV3PCokYm19d2ZhTjEuY35+YTQzd1VTVkh7Yn1gSilSNU0+ITtFeipNe11fOHFY''@;'; put 'put ''NzV0c1IhJGB6cCV0KG9eS3VMfkt0Ji5hTzB+Qjt3NkolaV84I2J3YTk+aj8lJWVMfkBYM0NnWkx+eTUhb3pdI2g2On5QcyVjKz08TENoOVlsPlVhSFZ9X2RQKU0wLHNZNGN1dTUufjo6SVMyQHx+ZmxFSnMlbjE9PGJDaDlrJVV5JHlVfXQicVFENVV9OnZxUTJ3STJvQHtzSDdFYmVdXU9ve0di''@;'; put 'put ''aGtlMC5+YzRRU11bUkxJNyxpSDcuWmI5fWwlcHVlMH41VzR2NltSTHQ3fEorSnA+PjxkMENeUnZMO0tGeXVEZFpYd0l4QFcyJnJlXXBOaktYWX46ciUrOzZSfT4lO1B9Kl90QmlyfHIoZ2lJMWttS1lpMiQzQ15AWFdmMHh2UVA8XXtuNChxWHx+R04kXk1yVXkvcyJ+WGgiaE5UTCRIeEBNdGpg''@;'; put 'put ''M2hAbDNEdkVuQW9GZSxKIyFWMDhJPWl7aCMkc1Q3L0FkaXpAVSNWPEwpW0JqOUoqY0xKKSNpdDA+aVsiWT5tIm5KSSNBJiVFRUB5SjFFUS9kY3NVK09eM3x0cHokMiMpQGBHO2lAaDlgXjY6OEdAQ106MlZ4OS8heDA/NnF4PVJQYiolWiNKaSZkM1BDUTdfSjR8dyFFWFMweEtrbSVnMVtCO2NQ''@;'; put 'put ''ZWJSbWtfZXc5NnkxS09XdzltbURsNkwoNWNMLEBIJjVCW1JRXmI0PF5dT3FEaj5gSF8kfjxWXXVPQE5Ae355M24mJTMpYD98Jl9SK2N7PFZDZWkzbko9T1FxYSRfN2NIdXM0OWA2UkhwZzdvVXwmNyU3VWxbLF8vSD9GQ1RifmlBU05hQVNCMn1UeVRfMiVGMD4oSjVMZ0R2Wj10flFGayFNbVZX''@;'; put 'put ''eW5sPUNfNn4ldEtZUmN3fW9fNXRdPzEkVVNETEFQWyQ2TChyUXxaPXRUKm5zdyJIKXQ1Tj08ZXxpUlB2LzcwRVMuOi41d0lEfGlTZ1pReytkNU8rX25XOH1GYzdyTkBzO0gvfU4uTENvfDpPYS46SSN2L1p7QXNtamJLRSgqVXFHdmlhc2oxZG1saWtbc3VHIXA8S0tHRiNSQjJQc1tdOCNYZ315''@;'; put 'put ''VjQ2PmZWZXVjOyN2WVdvM1c3PCtCKCZ2TD0uUzozdGs+Z285eWtMSjhwJiU5am9QRjJfL252Sjk/XT9lRVlsKEIjPHgkeDpTPDVTbHZ4LGpNLy57djx7ZDk4KVZiVGdHTjN0O04rcE0zfHFeOVtYajFALnJxTHg2ekBITkdbQjFWMlJXbix6bzszV09gbUNiP1pGPyM0fXNEZG1nV0oqNDdDNGtX''@;'; put 'put ''PjZFYj1FSTgxNTNFfWouXnx8d2lfNFEvQ2Z+UkdNKVJqQ2tRU31+PyYjXSt8ZldMaUZPTXQjPHFeTV9hVmlbS0M6cFg3WCM+YUBCVml4U0tfYXlhPHZHTG8mbWRDaHpVd1p7bXJhNFF9KF1oKTBlUTlse31uRC41XXdHS1s6JVtyUXE+RjY5cTlYKEIvJGVaJFRZLm5fS1A5QC8zT2ZWajdxfClT''@;'; put 'put ''WWEpbFBhI0hpPzp5aSVkUTFgOH4rcGtHdk0xQ3p7KmNNMmElLjspUiZGKzQuOG9SR0Y0X0UlOE47WEdfZ0c7JkhbXWloeHdpcW59IWEjVE0wak4qUEduUDBifl4/amVefEVvYCkoOXxFeSJTcGc0M1M+fltAbiJtZHUmLCg5Q09CK3BMLHNuOXAiNG8sM1BdIn4xWTsoYm9zUUgyVGJSSGJzSkdW''@;'; put 'put ''Kl5zfD4zXk5Vb3Zwdzl7R0tzV1tXLF81aXJ3OUojRD9hLlM4X1EkInVubEtsM2BxJVdGMUtUMStEKTZ4PiRsTENIIkJCR3pebDp+PT9hMz5vVjtZbXlKLjEyclNuTn1oR0B1b0ZhKExoQjxSSiYwWVM+ZCt+IS89fDxydzZMcWFBfS5AOk9CfDtuZiVQQVtAUz8wZH1gKGZHWlEicTZuIzssUHFm''@;'; put 'put ''aklUKi98VldnLCN9eW52fX0lbUQ9VClAbkBMJHAmeEFCI0gocmNiS0l8ezRBVzx9WjhyNkwwcFdFbUYyL2RpN3RGNHwlYzRsUF1DTmA4NlBkMV50QlRoaCVLfl9KKGkjWnl8ZG1TdHEoX2h3byg8Ok1MdU03SjckK3gqe3Y4Sjx7citnay9gJERpUWg2VEJwRVNkN2IzViNjLlZOfmRwRkcwSV8s''@;'; put 'put ''JjFyVF8sJkt8I0JOPnlyVH4mNHIwYjRqYWJULDlYU0g4O0ZxdT50OVNWQyYyRjgybCM/fX0peEE5TFhjKGFzOXh+fXdGLjEmSWl9PlohcHROXjwobytPaGhEazdsJC9oOS5zYlgocDxPe1spYyVFLjlJfnNaTG5ralhLZ2w8Q0lFOW0rbCxrbnlvWE0kUXgzfUtzNDcrPyYjRU9UcDAxTVddbWVK''@;'; put 'put ''TWRaaEpSaGgrOXtsfCN9bF4wRnwzfilsbjV3NnpgVzFKfHIibT1WJjdGUnR8dDQ0bWA7bkQ2I0R+PyhKanRhQnA4KmFiQjt7R2xQPS5xIlgvR200USJBQ3lyWGRXdnBaK3ZtO1UvOTt4Tl55KGtdM3Q9RXt2JmllKTsxLD5CUiFrNSs5TXFOOi9nOW1vPSJCRi4/YXBzU3NQfGo/WSUvSk1pRUd3''@;'; put 'put ''fXRqXiN4YHZgZmNzfWs+SVosTzE3cWE1cSg+fS9mejtWRz5rej86PnE5T2giW11fbUcoaEtOV0NMZi5HQFExdzk1NmhCQ0NOIlI0XzslViN2YXZMT2Izb3tKKFpZfWRGSz5kKHNjR3suQDgmOihIbzdvVUhLPmQvYUFmI2Y2QGZvbGRBY2EjQjdQMWFzai4/OHkqaEJZI285SSN7WmU3Umt+cyFk''@;'; put 'put ''fHMhYFE7OWEqVjF9W2FVcCN+eVZWVVQrIXJGLl1wJGhuMCQ9Ri59PzkqRjckSCZ5bmBSJjtyQldBU25AP1k6eHpsb2ghI1VlWlYoLzRsUktPRjUzUktIOjdZTVQxYTVqU18qdnZbaCo9Kih6dnlSMXk3aDtvc0dKJXB8eDgkOjNqZCN4VX5KdkNQKzI6OkFWa2RyfkAzcGRCIiUsc1J3ZiJKTD5U''@;'; put 'put ''TF53W209UCxAJSoiK3smXyoiK3hbXUdbaGA3eyh9c1o9M1RsRW0vZSRQM0s4cnhCKFhuUEo3PDIvMDBlRDpiYXdrKl98djhKPGhWelNwOkJ7MzcocU1dcXVLO1NpNm10Un5ZZj12Kj8qcigqdil4TnxpLjgsNTpTKldTWkp4dUpbVTpoYGRoU2JNRElTXlBXLFUsOFNyY29YSWo5fHxTPWJLX1Y6''@;'; put 'put ''R1ExNmFrNSlNc240fl90RURlY1pDQDgoLyJkck9EY0Zybm5sfThsVW1gJkcmbipQVXMkdG19QkxCMmA8XmsqJCpsfVo6JlRFO08xd1JPbWdvUSReJT5hMkArN2ZLV24/LiR5dEVXNF86aCVtMEc9MlEmUFNTaXN9KkJiN0B7bWQ3P2E5Zyp6dEhfZiJZPSFEOkJxImkkNlJvRXlHXSElW2Q5Uy5W''@;'; put 'put ''TzpvbTNNVW9BWmBtdjhfVXVrY1BQVXJER0dJKz92YGpWcnZWPS4qektpcU41Ym86XkxYcUVmXVNPXXosfHFCQXw4OmorS1ZTU2YpSTw9Tys0THR5OlMvb10hbCJoMH07cGtkdCpXeGRQNGtiX1Eyc28/RmdfLDQqJCg+bDg0ZX1INn09Tml1YiReL0hHbWAidns+Yjg9YyxqPld+NEFbRVolSFNq''@;'; put 'put ''NyVjcHp9JWpba3M9PG5mX1ZudUlhcyJwaEhyeCRxcD9VWzREeDMmL0RzQjczLm4oUz11RUpIZ3lrRCJBZz58fF11TClUMTxCeld2UW0oKnVefnpdQXFOZUIyWmdvO2dDdyl5IXFmUHNTYEJwbn5zSF9EYUg1LyUsdkdON119Pl4+US8sOF58dEEmQj5eZUs+eXVAX2g0MT4ibUhnWThDWDk8KklJ''@;'; put 'put ''fVMjTiVwYkpbWn5WTXp9d187MndvUlplWTZ3eUA6LGlHbGEyPm1RYXR9K1AzVH4hajVGRWVoa2hlbGRCP2xsXWtjdXZWN1RGVmBJIis9fjlZO1Yze0tHM0w3PSRoeiI/fitWQ0Z7REd6K1RhVl9AX0JhYG0sZkQ1QHcjcWh+PWNZQzxqb3FRfj1sKjt7eDQmc2UkSSN0MktIYV9COy9PYWJhI2Nb''@;'; put 'put ''Il9beSR2dmFkUmJsRy5naDt1bFc5YTtgPj94RSldVDFJUGxnO1lnOGBnPUo1SElkW350SHxCVzllYSF+RVA8SUd0N2BJQ3xGayFRVnU4ISlyOTRxbCQyKlQ7eEY6R0RRfnV1TEtvPHpjKixZXjRPNXJkZmVkdV51dl9KOzJtOkc0RkpuQ3o5XmhhL3YsWEhkIj4yYDQvOVhlWD5Ucj1HKW5FWWh1''@;'; put 'put ''VGB5ald6fXtQdmo9alRCdGpteyV5SFcye3Jgaz4/KTE7WyE7Zy9dTnNmfVI0aTh9Xno2Pzp5XjtVWDFicy5EcVpwNi40a3p6ZU9idlNIcG8xQi5dZV1+N3tyNDR5WnlvcGM6ZGV3fXZCX0ZuK25SK1c4fmZCSk9PNm46KEBiI1BlOitGJms+VjYvRj53SU1fczZpP2VCOSZpTHNLZlhTZEZYak0v''@;'; put 'put ''fThbViUhKWooNEFzK35Zb3BXRDRwLEl4cHE5PDhneyFmOSN0KUomejJdU1R2SmhmbGMhIWVocntqNWl8cn5hKyYuZ01RczhXLzJZfnQ8ZzVoeD5abFtbU1BfT2h9YjJZXmsmUClqRWw4R09BfDZFLmAmd1RtIyIwYSNiL294TWZaTnZMaWo3KXZgdHkkT0o9ej9MWlUsQiZabFVzW2FOVlJZQiNr''@;'; put 'put ''K09SZWQxNl5xOG9kaT1gfV1kV0NEQmt+RGwrfl5lJG5mUl9ha29NJmNxckFTaTdtMTRXdXhpWlpSZjJXSD4wRnwlaUw2ajklZXB8UUtULF1IMU9TdHROL11pVFMha2poVU0lMjtTcjRnIW5LR2gkSDNQOmAzUUI6WD9venY4MnhwUkIlKiN7V1VNIWZtK09NL2RYJn4/IXZTMz9JS0wkcDxBcVtT''@;'; put 'put ''SUYzamxedDxJU0lkPCs5UFFqSkw4Q1VAUTNZXUJXdjpaSzZZNUhMJEVLZj1YQi97MldyaEdbdTw9TlhOMEtDMVNyNC9bWTttQkdic3FGMHxTJnFbN3pQaW50PCN2Q00yQX5xLzxUVmg7PDh2LF04SEErb3heK3E7KGpNKjNIREA7Un4yOG1YZiw4e3dTKF14cEBtenZAfnpvXT1Yc055Lmd2e1Z5''@;'; put 'put ''b2tyZ25EMXxvTSwyVWUpOGlMNno9SVBNR2Z0RytWbTB3N3ZAL151PyxxWURbRjVTJSlCWyRvPFllOUhvcE5PSVBrajhmKFA5cXpzRWYrPnY9MipvKSFpb2ZgNV1LPGNgQlR8WjFQTTBLRyFxTXd5VG0+YFFEQ0hOPUpPRyY/bWRpOyFBOS9gTDJbYFImL0kkZGxlVkR2PGd2N2p0ZlV0fU05YGde''@;'; put 'put ''LDh4fnhxa3lBS3RrQX1MaWc+aW49NGJXPWxyOUpIT344OEx8MnIlWCw7KGtzXzovLlN3c2kjI0U2aC92NTduQmdDSlIwXSoveXJCOG1hTzg9bU5iSiosazphaDk0KjNlPzNDUzw0dTFOTTUvbFZjNHo8QipydzdSeG96W256bjRATV1WS05NS3ZIWV9hd3dXeHNBa0FTUG9FZywofVcmVlM/X1k9''@;'; put 'put ''aiV3Vip0MW93bTpWXVhTWT4sM2JKQT98KTZ1aCR0KmN1O1NWfGdXYlk9dFppaXN6MVcoX1BzflZXRUo3IUAzI2cucCw4XiwvcDI/UEk+czJ3fn46aWouYzBESX5tYnhtV0Y0Rz1YQ1V0K3Q8WjVuXiVAakxBWF0rYl9JPWloeG87K3ZYYTpIWTBEenlpSCUqIkx+R1hUUFBHR0diM0cwO08qSDQ2''@;'; put 'put ''T2ElUyN1dFVWJFYzTSZBWTdiNmxpIiU3L05MbGxVZitvNFIsWSxObE45ezJBNl1IUyhsc0FsbjpjITZ2K3AlOWUjKVhMTElFaHhVcGRWTzNSaStRVjIqZURId01dODFCalosVFpGWkI1Qy9MQHwmTkBjJVo5dFltVnE/ZF9yJmRwN0hgO2MkYCk3MT8pNWpbITV1fW00bls2dHhMK0wmSiQuUUI1''@;'; put 'put ''VSNWSDRoTHpFeH5nSTlFXk5LfXh7LHwuKDUrc1ohRnQ6aXsvUVZfK09VL2JJc11LYi94Ik9xbF9lSmBKYEk1YXcuR2tzfkVnVStlYEVaLlY0eSpWNE12cDN0angjckclfXZ4Sy4xL1BIbWQqIUVhWndEYVYhPVNhIVBMfTQqS2NeUlopfnNWNGZiKyJ2NDlwT0g2InAsbVQzVDBGL2EmVyF4eWJR''@;'; put 'put ''NihvfiEoLih1YVY1ZSVoOExoKWk5aShzMkJZX0EmX28yRmV6YzRkPXcjbnBsMyIkTGJeZmxaeGBzfWI0WDg9aS9qbCV3bXszclU8OzI+W2ZdejY+YjpFQCxVSWA8Vno1d35qS3p8azMuXXpyXXUlYD18Ml4+NzJ1KHZGcl0pcipLTGhLKDQqX3Bwc1c5VFddeH1za0g1dHlNVH0uWyV4Ly44aHkh''@;'; put 'put ''d3JVVl0zajAhZSloXXc1N1ZQXjIyI2RhX3Z7a0d4YXNpS0gxOTldLl9HYyZMNmcmZmdkXmw9Y05ZKX47LiI3b1U5Yj9YYVgidVA7Y14wRGcvKUpYV294fWIhIzo2STJeJV5QSGpJSG10IUBodV58ayFUXz0qWXdhb2Z5K3A5YyFAY1o4NztsfFZGI3ljfHh3e2RoTV9TaVAhK0Q0Q1ZhUzhsd1lD''@;'; put 'put ''c31uNSl3djheb0VLWj08SiQrTCYhcFVxaXcjQXRqUVc9OnkwYiNXYjMxQmtXVEt7aXh8UFRNM3JBMUZdYUtiPHp5Plt4eylmfH00MWVgalM2MyVfaFtbKVBOJX5uVTdBYUZhJlU+fnFVXVtWOU12WihgdyFtVU9afUhZZnhjcEBiSVVDJlUyTG1MaFAvXz18I19QIyZBe353fUYvKyNEb3RKeUNH''@;'; put 'put ''SSJvb205InZDaFtmcTQiJCNKeShOSll0RHl8VnleLnEvMkxrcjJxVnQrejFaNklwR3ZjPmlVd3pfcFspVlZsOV8zPmw4PEtSLyRbVWRpT3g6TWM3YkJjODc5diY6THt0NVpUSzc9Y11COCNfZXM0en5+RV9fRThAdzM4Z2VTZihXTF1IZXUvMSE9bkt9RThzd01qcClrQXkheDcsQkhqI2lOb3kh''@;'; put 'put ''bGZIQnkhXjE4Uzc4cHpOW0hlRUhyP0hlJkYkS3YwR3pSK0B1Sl5IamBBXkY2UGxMYVl4UjlxQHttZHg/c2Z1L3xdT3llR10saTR5IntqeGNJQHNmOEguOXNsPUpPKzhAVHFpZXVAcnAsWiYiZGVERzFCLDFfVHB9JTd3cUNlbUFSY2hnYXkuRGAkaTN8Qi98Y19Zc0s6IUx5fEx7fXN6cl0pUjcp''@;'; put 'put ''fkhfPFZIVktgSmAlQSwlW2IyeXR8Y19wcDFgRCRUcX00WFpVYlp8Zk45cCNjSnhLVlAiZCo7NX0qUjBrXSEkQkpZQmNBIl4jVHM4JChKbTJ3Tn5PQ082U3kqb21xLDEoZTgmfjVxeT8uZ34rdmRneV8kYEhgPHFwZHRGeE8jYFBUJkVLIX5nSzVtcFdUbztzSGxIaXdVcCRmbl1PRWQ0KztHY290''@;'; put 'put ''aW9rS3hseF5fWzU0biZfT3k1fChabEU3WTdONH10U31GUzcjblZUL3FxSX5dV1MiWyN3UWJUNGJvLCxgdl1RaVB1Z31DPXd7O3xka35hN2Y3Vk1MMzh+YV1xPDNEMWJ8M1pic0ZkQ315QyU9K2c7bFkjKEhFbGU1YCYmOGQhUUIqOj5He3QxMXY4M3pJelFjP3Y3QFZjayx8SiFAJkY0RCgoRW5N''@;'; put 'put ''MCZMe1hJTTBqZnpYd145MDB5IiR5XWR0KkBKW0J7e1ksRTM4MEJjdEkuaHJIaGUrQ1Y/Y2FnUWAkKlciQlZQTFAwTzBVTmM0XnxPcyVUdF4kU3RYIipMe08qP1d3Yj8kIk0lT0EsbXkoTjFZOSxqfTRZTUhPVVpMLFRHcCVaKTkzWk40ZTV2YEp0KldGJT09ZGxWRkU7N21sc3pwSlJkUlszekFC''@;'; put 'put ''LndiQWoqKWpTZ3ZAeDNxMkBvRUJee2JlTVJnISxqQTs6ZzhDbkBKSWxUYil5aCtmQXhiMWROM1FCNDhedlZQaVF1KGxqUkdAIjJab0lheTF4LD4jOjZeZjx3fm8mWVAqOEYyP3FOMXIlYnkxQGxOUS9tM1soSXF1IkRsZHc0MVtxb1Q5VX0+enpjVTF6dXhSVyY1em5xfDJaQj18aU5lXVpsWUt1''@;'; put 'put ''Mz5iMmxwMFsuQH5yXXpRYGRAbykwclU+X1JCb0YrRWUrZjphfk9CcT1QVlRfNnVzfj43TW1xXyI0MltGWk9ib2tLLyIkRXJQZCgkQGpub0pbVEw0Qjw6dXIqY1hIVn1IQE8lT2AyZ3JhY0gmY0VKZWxfSCU3TVo/NisvJnlfKkxfY0owPyZjR19jSlElKXImZT18L1AjRzluaSRiQzd+SFhrJFRD''@;'; put 'put ''XXVEaik1VWRrTXI9X1dNVzdZODJ4cU0vN0hmLkw8RncyImkvWiZxX1c0M083SnhxTS9YelBrTF97TCJwTUt1NiJOWVMpRShEZVspYDNddVUjViYzITA7aElkbl1gNXdKMFFVKCltKks5KCNbanNnRnhwWTN4eXkjYXovTGlULGB3aSQiaXg9MW5PZ3tnbD5UPlUkOjoyZW9hXlhEOWtKMjdCNmJV''@;'; put 'put ''Yl0kKXI1Tkheb216TVAvQlZ3KTZecDw9V2xvSSVPOUZZTiMmJTpAQz4zUzYsWTpRc3k6QnVQJVhQdH40TXo0OzMsZkRoVHVtVUZVX1k5TV48Jk1FSjd4eWZvOlcpdzY1VW8sU1kvVlV8WUEzbSU/TXxafklCcT0/VlVFYFJjSj56eT1TODxQP1c8Vzd+TmJTPUpCMGgyMHF2OW1qYjI/eGZYK2Qr''@;'; put 'put ''JT40MFpTbkxaX2gqY181QEd+cWx2NSN8I2I3T2Zsb1l0N29mMkxmbm9LTXh9XlolKTh8USR6fVRZRytGK1s4ZDRVV2RTdXpkWVJnKXRgVjRqQ0J3OCY8VVdoMWpMTGxhTyEsUk49bjlQIWEsejxHTToyVGVfXzFtMz5lKmNfaVJtfVk9SSMuIkdSU2dlfXdAOG18KzBtdW1NfG8+TXxgW3J7YDUl''@;'; put 'put ''SixwezE8XTQxZWIpPksvT18kaHk1Z0pRZChvUFYjfkVMRUpjVX4pSit4eFMlKTYjR05tSU9lZVc3b2tEUXE1TmQyL0lBQUE4TUBAbkFVRVFPN24mImJYL1lNSWEyPHJESCpodU9mM2AqMyxFTkpvNUQlSWZNaUFBQUFBQUEkQSQkKW9OdHFQRGRzYTF+VEtpV1kpcnIzeEBxQkEydFReUiRjLFJo''@;'; put 'put ''cWNXR05Lbmd6bEFIN2FKYUVRX1dCcyVJSU9QeFpWfDMlYzlvWntPLkt6OzsrJUlHO2F4aDpTPTtuJkcyNlpoO0U1fjw1M1R6e1EwcS5VPEJrJkVOcTNYPDNQYVs6JWBtLmRgR1ApJmIqQj9rZCU1XzIld308W1JeVjNzWT9PPFQ5cTEvanp+SEQzOnk6IT80OU53c0U2ZEk7Kj86YjYpN3t0N1sl''@;'; put 'put ''OnF5UV1FVG8qXjdLcl0rdWxncl09d0Nqak9acmMpQ1NwcjAudFc8PTZ+ZFp6M0A8fSlgVUtsYSJ9dikmTWR0WEpESiIxQnksZmVFTVh4UTFTUjsvan4zKXVuI11yMnhwaH1zRS5Jai5IQ18ybk88dk1teCZUMmJ3RGhvKT1wTCZeJmQpb1diezg2UUtFOysxOUBxdyNCRDtbVj1OXWM2b1RKd0hK''@;'; put 'put ''RmROOkN4LmV1b2woI1NlbCROeV1FTFpKPiNMeUI9NG0hUnBdY3coOzRCR2Z8Lnp3NSt6fWYkXj9lMCV+X3RZRXRdMUNKSyw7QmI9aThLTU5aSj1gRldZYnojfDQkYDtPKjA9LEd+e15TRjkhdCEiXiUyUX40NkR9JSRQYio6REo+Tzo1SVoiOzchO3hzdVo0Qmk+QCFYeEI/IWh2bCUreSM5SkVb''@;'; put 'put ''eF8zTDA3aE98V140Lk0vbkQhekN8TikvTH1Ib2FXOS5hKGw7e0xSOCRALkZ9fCEvcUZkeiUlPHlAOFpwUi98dSFAYkU9UG1LPV9DcSNoZnNZPk1iV3tWM21CcEc9SE5LO2dLQTFFM2lLXUo7NE55dXcyb244YzZVO3ZbM3ckUUBMelUkVEtqX0kxYE0mLjUiPmsiZX5sMCVvY1swKG8jZmZ+Nk9i''@;'; put 'put ''YXFvQS8rJkxTOUJyZTM6LihDYmIsMkRCKypLVn09dEdldHFXRzBETG5bR0NBKCo2SyJnKVNbVU9GY1kwMXc4ekVvTjVDbGMpMWZnW2spL2hgMCQ/RHB0I2lMZyEiWjRXY044Sl9gWz1DXSFlO3dybXQrWncvQnFFQDRVM1szJWo9bnRRcWR4ejtpX3w6cCNiJn51R25XKlo5MDB5WF81LFcsRmNH''@;'; put 'put ''Z2BuQzMhITkoe0RsYjVqe2Ricj5heFksdWYoIn1UTXNLO0dCNlkqazRpYyJmVTFtWV5bXyR9USkzKik6XlMkXygzIyxgYDRAe04lWU9KbyIkKCt0L1I9cyM/SU02WT5vUEt7WFEpTUtgMTw5U240MT8oRTN1ZyI4eTwxa1BvRitBWjNLe1YhTTNdNiJocz07WVtiI3EqbGdVckJ2REREb085NDRR''@;'; put 'put ''S0ZFTUguJWozX3pFMTNAcGdHQThGSGVKRytuIU84KGxnR2FZI04uMHx+ZmV0OldVayV6T0soQS4pQkp3MF1BVz5sK3tfNjRaZSF6R3UxJDVYenM1VEMxLlEoVDFGPDJkLnoudDddYi5QV2dPWEAiOVp0I0Jebis4aT84aCklQEN+QTprZzBGb085JSZlKExjayxtWUVfXXBIYm0wdzpFUEYsZFhQ''@;'; put 'put ''NTB4RzJ3ek9senlWb3c0RmRATy5ZKjZ7QW5zYm1pWEA2Yl9dZExVdFYxXn5WOHh2JWxqNmc5aUh+S0NvSSV4LyZSS2ZNc0NuRT9iO3JvYSImanltVDs6MER5VTcibTRCSUxHPyg2b2VZMzshSmA4cVFZIlNDOnBJcTtOX19MVEFJQWord11OTkp4ZmVhVm9NWyFwU0shTz5zYUYwL1NPbCVTMj0+''@;'; put 'put ''JCFjI2V9Vi5bNWNASkNxL2Q0UkNqMkBfQURMQzR8QT1ZS1NESl9YUWFJcGU9cW5hcWBVZyQpN357WWpndjIpLnsrQl9EQGwsRl5LfilaQ3ojLiF0b20wYkgydEsxY0d6SzlifnFYXV88ZDh2OTtXZDk4W3w+Y046RkI1cG14eGRTemdUPFVLYmF2KkNEKVZyREJNMUt3NExDY0dnJC9jVGw/MVk2''@;'; put 'put ''RiVxQ0Z8UTNYMW5pXyVnPlp+d3FwRno4d1A5UUdBRzdNUUVabT8sL149SHU8dlJJPjZuKTJ9S35XYFs+MEMqYU5wbz5BazFvVDZEVyU/cyI1cF9mfXs/YVE0Y3VKejNXYEhAWGtsVkpQOzMlY0omX1E6NFpCKmNeZ0ZrInZod1B+LyU5NXVxVmp9WHI0S0JrfHVoaiVJNjRtQmhjKkZnUzBKKmI2''@;'; put 'put ''TjFAVUAvZmN2IkUiR1M7bTcmaFdlNV5HPk9nSSkzLFdhUmB7MW5wOChYQGBKUSh9dlZGTlpLeF9Ya2gubGw0KXYoS3F1K19uZi5TU3cjZCs6QCsqUHtlXUZSeTBaQCJQU3ArfmtnZ0RyZS90TmFDSXltfj9FIi9KPlVocWV1STBFZFZKVVUpMFtWcnRgcWp2TkExdFtIaV0qJDI2PztFVUVFT3xL''@;'; put 'put ''S0dzYGxWe0l7bUxSSV48TUl5WyNAWlJvPEE0VEQ7OmN6STNKcnQpYVBVN00oKFsiYktbW0hSXmojU2RjbFVKfjlmcExzI25LfkFxd2hDY016SH1rLDExNSNbSV5IO2V0IVN4W19zTzhLSW1tciE2ZGM+czVZO3JNMENyQU1lKF5NQnFbYCY1RF0/JC4lelh+UGZoXTxZcUJhQj0xRE0mQ2x+V303''@;'; put 'put ''MnI7SEVpTzAvKWUqJj9DJjFdS0l1bW4lUXFte1QueGk9UjdAd040ImcpYUdEUEJie2JXM2FKYTwjKGJ+Ukkwdkt6MDs6T2peSnRFRlVvWTZafWAoSHdYK05zZFoyMmhoQ31zYzYuYHlLVnZaaXlDSiFFMCQldll2cmg/WSUvJlkuc1NPeGR9fEJeX2ApYGVPVjteZXpxRGEmUmoiWk1nNGVCe35H''@;'; put 'put ''ZztCXmddWnJ8TSs7diZMZSZYOzQofVQsQlduTiV3VDYrP09fL1QjV3siRVtVX3NyU2oqKE5wdz5jbFs+ZVtKKjFiO25jRj1EaGMwPExPb2VxY3ZtMFdbVlshO3Q/fUdFQDc1TnRxMEFyVU5bJGcwPTJmNjR5Iyhsa1ZjK1NvTi9COVdwYSRtaDZXUmR1QCFpc1pPNjNfYiVwTnkqO3M5eylhQGR+''@;'; put 'put ''Z1JpZXs4YmtANiwhJEhKSilhazNHWFpNNztra245UUFbZ2F4aGUxUyRzMGJTbSVVODZyPT07M0RZcz5BWmQiOkU1MmQoMk9NO2hsbyUuVUByMUhMe0haT2hRQUJPdFoyfm84TDB9YDl3MTE4VU1kT2tTXUxIb1J3Oz5ORi9TJHcyMXc9VlEoPjMuI0B9L3IpRCV5QE1XYE9oejQqbG54TDZXKD1R''@;'; put 'put ''Jm5xOThrZzh+JndSaWpmRmopRiZDSmg+VjJLbmlOMSN2UnI5aXMqWGQ/JmBTbGwxaSN2OnFUUH4wfExJSzg+NytgM3Rxe31hZE1mSzUyeUYrLHwuRmdGYm9IZWhEVl9pW3tnREU0L3c8bTdUJlo/Ykl9UmNFR2dwTF05I2QsNnJ+XlNoI10jWEg6VzpOVkZQLF1CMTtlZ3R9fW5Ob1RgbWI8I2xe''@;'; put 'put ''eUJ0OSwpMzw2YXZzWGowPEt4NWxGSCZQVj8hMm8ubDwkfTg7LjFHTFQ9SyI3b1Z9UWJxJktvRF93OGwwbFtxdWZDQlEkaW1gNDYoK1YpV2xFRlFAOW1AIV8hMHJJaVRkc2M2flJ9RDczTSpBY3czS1dUREFeWmNKdixYblVDWEdAZ0x1MyUsPHNDem14a0l5Y2I5fm9MeG4ySEBSQk08ZVtYRmA7''@;'; put 'put ''Mls1UCsrW2VBc2Y8W31CZiVvdWkzOjchd21lNVVVJFVvcjJMKDEjXjNbRm1xL1suRSVjdUF0fCVtXnAsR319InhRKlNjZlo1d0c6SnNkYF03d3Muc0crPnw2a1AlJnNOPCRWeSx6SS9hayEjaGJLcVQ5NTM4ST9LSjlmIk8+ISp6U2o/OSo1eGUuQzZebW5JO01EQExmS3NZVH09Uih+ZCVUNkBR''@;'; put 'put ''VE0uSkY8Jiw3a3ZZeGRSRGwpKGkxb0JFWF4jSnh0aFVPSyROMjJCa2hXZ3g1NGROKVQ6e2M7IitFYW9ZZHBqeVdfMD02RjQ9JT5uSGslZU9lK2RlZHs6Qzg0d0IlfWM5X11ofmZQfUgkNTthRTsxXlsyeDEkMSw7eFd5YmZzXTBCV29zXUkvdVlKU0M/VHtpKTB3Y218JjdETCtnblNaJmMhUWo4''@;'; put 'put ''PXxFYkRRbHVzY34iKkl6dW0+ck5zQiJwVTBfRUdsOWAzZmJPRSt+UFlOSlJXVFs4eGBOa2Y+TDtbMG9JTnd0ZnwqPnY3VDdXOXY+WmphPVQ3Z3ZzN3BVUl5rXnZhKXAjSm9aW0prdjRfMFpafGBuPz81WiIxSC58eW1hTCE0SFM4JEZqQUsma05mfXVuQ3FaOzV7LFtyK09AJmM6OyJ8djlpPC95''@;'; put 'put ''WV47dy9qNDFQdV9LaWVHXnsrNFcuKytgQnYzUGB1RCVAcntJIzBQUCxFYFdrdDZhOixdX1NGK0V2ITxXLlFSIklDWHIscjZHQX1lWncmWlROQD1ha040UThJSlhWcFomfSkrWT1DVltqSUwmT2w3RD1OfXZpTUN3UHRIemRGSWdBUFZuc2FgeCVTa0RUfU5PO3d0JSxnNyU7JWlIVEk/KD1WdDlA''@;'; put 'put ''O3VHayQ/NEk0WS8lQjBnO0hjJT9pKFp1ZzZ0IXd8TFNrV3coNVhCQSJdLlN4R095dytuNlgwdzo6UE88cDtFX342KT4qMTM1SDNNd34kNFp9XWZAZ2BeV3ZPJkF2OHRub2YhbkU4Z11XP0JbbzxObWciRSF0aDdJdmQ5KnNOQH4yaFdDNkVnPz1SWG1FUUBnWTImZ0g9RSw1byZ0Nl1IUjpxNGxZ''@;'; put 'put ''Mmd4bS5MbkAmPilaW2pzXVlbRiFST1U1bW1WMzNpY2Y+aXpMS0YzPGVmdiY8WE09bTZyJiJCWlpCXjZabUdHeUA2OXN9c0srNG1iaGprU0tsPzE9alg6eWZuQlMpXi9KKiRlST9FKmk+I2o4c3hqZlAwZm5PUWFqNERNMDMkPE8xM0J8RTpMbCQ7Nj1TQCVwU1hwQXM8PHdOJGd1ZVcmam5ZQiM6''@;'; put 'put ''ZSYmV210fCFCJXxgfF5OMk4uS3lrW1NCTTkvX3xMSXsxPk5xZUR6XTd6RzE2cyMvU2IoK3hKYiN9W1BwKU52cVY3Qig5N1tqMWJbQjNmLks8N3l0PzVsTChPPUEzYEhyT08yI1VtV34sfERxT1MqNmZeX1lWbVc1Nz5uTlR3JClrP2F3cUVoY3JdUHU4RUNddEtsWGI8OEFXVCxQYDFQcEJLPENZ''@;'; put 'put ''PzsiLCJqPyUyRV5EOi9OI1RSbFd3Zy44P0hEXz5NIj00MVVqLGFFa2IuPmprU2hZV2x9NEFLI2RVO25DX2VsbjJIU3pTQ1szPWdaTzU5TUh5MCs+UWk3WkZSP191TXYuMmhASXghQlt3Z0d0PzB9Ym0kUEx+a3Jnd2clanp2VHo9Ym5iNFhZbVVbXTAjT1I4alYjeHRab1opJF1YbFcwZSZHfH08''@;'; put 'put ''KERBO1FLKGlpNmMxS11XJEQpITFJWjtELj9kZjRVS1FjYnloPXhtND1+cF1HaXIqckJOc0M8eDh6NHtEIVpTOUQ9VVVuQGNsRnNSK1NLYnZOeHwmZkc0RHYwcDBiVys/b3ApWCsuUncmbDxYYEZIJC5bU0JLfiksW3opeHMqKVVWMGJ+Ll8kPURMbiUzJCh3Om5uNEZTcFpYay4qLHVYU09uXzk3''@;'; put 'put ''IVN9PV8sUk8/VEUwbGxwUH1keCZlSUV0fkN9bF1RJFZ4NlkxW3d2fkM1U3JTRX46KmUyI2AlJGlxUHk8Pi5nKkFFeXVhNXR8bz1pfkhhJU5uczY0OlU5dkY5bHltTEFvWlcicHdidGpmKXA6ZFU8RFNWbn4+Uix1JmwzQk5OTj5QRnRrMV08VShdW1JNOmsrO15PS2B9bTwmfDZIenZNQ112QFFb''@;'; put 'put ''cEc4TEY2NGQ9bWxFaX48eSRdW2JoXTEjMXYqX1Y3SUMuK3J1LyhYYUlrO30wakd6PGo2ezFbLCE8YHZZSGRJNWo7VSFhNCtrbSNscFRCMlJXRmlSQHhqQDRAKGVvKU5RVUQkeEgzT1p0bT1pcXBTPlgjdCZAWTx8PlUqdjpNNU5sOWg9WkEydG5ybyJjYEtDSiowcz93JHFjcSwsVGJ8fXkoeVdU''@;'; put 'put ''MDN7fng1fm5XWnYpeG4rXVFPWW82NyVnKEp8MywiRWp5U18kQGZXSmYvVzpufDpgeFBCWmc/NH0hKldlT1c2el9MZUBiQm8xczJmTnQpNV1xeCVWP2kuUjV4Rz9tUnlNNz8jR1Q3SyFLd20mNShiVE1Jd3kvSSRCUSJPdWlwJndtOywoJS5PZm13RiIlW1tJdTJ5UDNgW0toUmtoIkl4eCYycTUl''@;'; put 'put ''VGNvbHEqdVQjLF1oKE9HbmhAPCRybmV+fkNhQV1lSD5xeWArQyVrUyghYT9bUFRgX0gqYVZyeC9GfVgqXy93THpzbTpGOUlBQXNpVzRiJmJaYzciZ3tUUkBwaXdDJkc4RmQ6eiE0Xl5lR1B1MD13dmkwQ3JpfjZHMDpNenJyRDxbeEwzPWF6QzkhRC5iKUxpNm49NGhER25fRWt3MVo2QDN6QyJl''@;'; put 'put ''by9yUDxrLGJadHJhZmt9cmcxcG9GayJ4ekhYdlN3aGkqbj5hKkZ8M0BfVzppKTojZXE3ZWtTb0dra2I8Z1tUc3lRK2FCdn07MywoPmFXVm1VdjMzaWwoV2hKYis3bDhjVmV8cGQvbTQ3ZkpQMkxFTkJLOCU5cGN5PiRtcCl7SFg8KHtINElpbFVoXllMWEFkdkdkTmRYRE9ecHM2R0hdRmJBd1Nm''@;'; put 'put ''dmovSEYifHM4Om1BOExneShfd2FBITdeWEkjfEVmT1ojMHwmKkNOKXNCbCpeQEtXO0IrLnheWkJmXS9Dd0lzPCY9OSJHRE9leWhvIWprZl5YTU97akNjOjQhKVkjWURGcXZfcF9kbG0jLlZHWWxjZnVCPmFzKzY9MmJiIVZBOTBVXm1+UDJaayEmPHlNSFAkSlc/OXxBSVA7Q1FFQHIpWk4jPnUm''@;'; put 'put ''OSYzYDFwdDdtOmgrP29xa3ImT1VYUGcwa2tRfkZ1VHt9NiUodlQ+YVpnPSpqdGV9WDJsPG5fOUNNcWN4JDJuTDt4OVRWaWVbdiIpMzJwPVNzLHYjNGJfOl9SUEQwbjRrQUtZNEpfaGYjaiMjMEd6VmZKVGpDYXomaFJKMH50UkBbUFk5e1l7SkJSSl5BWWtGQ00uSWZ3U2Y8MmUqJihSNmIvNSMl''@;'; put 'put ''PyEsdyVZc3N7XnomTHtwJTwjTkNIM1VsZ3NgYkRifnd+RykvJWp5RHAuU0Rreit4X0YyYiw/TjVbO1BaOj5ULlYkdndPbVU1I1tFO0pEWHRfKjVBPllhIVshQE9hdVApWS8yUTI5aDVOYjEpPyRNUGooQ1tucktwdWI2TiQ6TDJjVi92ZDRmJGY0ZW5ZbzNzaCoiPnEkZ1hvOHtOeFRVXWhkSTZl''@;'; put 'put ''Qk54NVA6eipwc1hbUCgycSJGb3UzbCosKWh1SHV3dyhhKEBBbT9yRzBLKG9jW1Y4JSMmPWN2RkBtInEySEFFU2s/WVAxKEtWXUNtQHVQelpIQjMobWlCQzV6bUU1d343Nz9FQnBFVzR9Q09+bUV0dERPO3t2RXVhPkM2OS9BeV1EdGFOKFJ3KDlecWskJEpqdEl4JmYrRXdJcipDVXliPSsjVmVF''@;'; put 'put ''VENTQVtIOVIiOjA4VWIjXUIxJlQldksoaVAmfUBCciV4Nk8xb11KTlloWGNVPTQ/M1NiLjVLOGE1M35dcSIkZ3RUZ35OIWtRdVBOSkYlS040JlJNLyZ6P3Z3NXBzL1QkSVJvOWxdVEE8PlAjRUFHX0osYnouZnoxX31bR3VLJit5U2FuMU86U0RyJipzJGwyX010aUd1QD5eS00zKDU2QXtNOkVa''@;'; put 'put ''VC98WW00czlpNUg+djVINFZQLiQ3eGtWV0szbkZhZTlZWjthRSpbSVBDQSFEKzs8RF0lI1o9Z0tBTkd5YlVBLHVWfHFuJTJLckd5e2o/T05EQlM9LEx+ent6cX1tYTx4eTEsOG9bOHNnSkJAXXg2eHYwIXpnejVLMjNWQ2c7TlgvaU1gZjQiPD46TipDInc/VWljWUdmUz1dajE0eSFMZWd+N1BD''@;'; put 'put ''Lmdma04vTFtJUTksVUQ/O3tIIiNeY3NjMEFuUXkxfVlOKj9lISJNJWl5PGw3NlRbezg+Nl93UiEqLGZ1SCZSSV5GMjIqQD1jWT44W0ArUGtVcXVJdnRgKytWKU9GKjJZXUpfZT8+KG9Rd108NnRtS0lASkg7Xn49WTVTakdZJEFibk1eVW9TclFpSDs+M1Y1MStbS2g+eEFlTS4yY0JCdnZpJUEi''@;'; put 'put ''fFM/cyNpPkpjSjZsb1hpNWA4NypITnZtYCQqaHVWV3RITSY7N05BOWM4LFN5RWhVQlo8O3RLSWgqcTVhWCN0K209eypPY15fTy5kVFBQL2AzMDYsOWw9QmFbWlVIUmdRYktxb2s3MylhKTx0enR9WlUmdHxNJFBsb0VoYEBbfWJEUno8aEQ2OFp6MEp6JHdPb19HRDQiMGNJUTYuNDFfe01rPztF''@;'; put 'put ''Y3x+TXhZcGluPWJeZXBYNWIpbGhncHl7K25hdkk/NjBBaGpRczprRFZMQ0QuTGR2JjkvIV47SiJIMCY2L0xGWUZOZEI6WD1JUU9NT28+ZmZLaC48YThZUVlnMldYPyxsNDEhK2koQDFoPF4wN3xFbStVIW4oY281a0NpYH4uPCklWSoyI20pbUZoY19wM1tSPUIjcCJ6Ql0jL2tCNiZsMT51Njhb''@;'; put 'put ''Lnp6Lj8rJFhkbiVXWTVWX080USghUER3aSpQREZLfFJpPCFzRTs8dkgsVSwlXkxSfkxOK2RfR24rVEokRCw0Zm9JclMiU0ZfSGhMZFJYdlA6Uz1KbHheMiNKTUMwZjJfIlBWYzZOMHY5dG0ldHtXNWE2dzZtPG8uMWZyPm5sbER0dmY4W3ReRHVZJUVdS0pqcWNyW1NqLks/P2lQRyt6ViUzdiZA''@;'; put 'put ''Yj5XTXEiY25kJkpvRC9lfFVYal9xamtubD5NKjJeQlFKNShXMWk0SldrMjRHaygoVSV7bU1TeSRuekpsPURxXlY9NltGZWNZejxFW343ZGUqKTczcGh5MWo8PCs4YE0wOndVLzQoM2FxXVJjeWtobGQhKC5VIVAwRkFdIUBlcVFZTVpzaVFsX0lzJUUsbT17ZVBSNFtIRUQoSnhkUnYqPHVoYl1u''@;'; put 'put ''ITlsXXs7cHs6M3BKZWtLQFZnMTRFWzNxXX5OPChdTT5GUGtNTHJkPT8wUCNRPkpjak12JCxmdVdoJE1IUHVzUClUO301WmR4Q3pOSHJrLlEjYXp8RiQ0TlBELHRqSnwqaGpEZHo+NExnRXZdaz9je15DfUgiWVgycmN8SHF2L3ooY3Z7bm5UVnhPT3AoenJDVDpyVyRSLl4oX3V+ezAmUjIjbF9R''@;'; put 'put ''YE1PU09AbSZGbDg0TCk0LFhsMVhIL3RudVhQL35le0xHLCp6Y2l7a2B1Tn0qIVVwJm0mZnlfI3sxWS9tMnp7WlNadksjRmB5a1B3dCFgdEpWaWU0UTRPSz5+fmIkK0hVSnx1emZpNlpRZElycCguMGkyWj8oYDwmSDtAflBYSkJlJVlEWCUqaElIMFNKez88WEtsd3V2NzY9Vkp8dy5uMncobH5Z''@;'; put 'put ''X29zOUFSUlYuTToyV2tpVkVIPSg6c0wlS0F2SWBmV2UoOTkzKy42fWswRF9YIyp1c1NOWk1QSDd3JC93VTRYT3U0ey9GXyZhQnZERFVLS1d6Y3NFeCE4O3dydV1Vcl8vdDR9SWlfYkRJPmhuNkovdV8jWSEoNS9tcnpHTlooKEEuWkhDW1NJQEtPUFpQXjt3c20kSWE0S19lOztMYF9HJXp1PXo1''@;'; put 'put ''V1tab0RbUyU/PXdPeDVdRkVyWFFBY3BkZ2o8UVRHVVk/PUQ0JToxSX5AYnVDSnE4KzhIW1ghNXFjYnNoYDIjKztAJmBVQ2MlUj54P2lqK2pEQGIrPUlKL1BBWUUxP2E8Pz5uIi5LPUhNe0JWKVFxJXAhKnRmLzxfaS8/LCE9fT9Pa2peQ2VOWVFnayZYOiU2aiNSZSFWej1eZDZSZz5zfVJVajRL''@;'; put 'put ''NFFZRSxvaW16W1JkUWopO2REclBydWR6bSVUSkNiUHtFNVhWRmRHS3h6V3ojbXxPSzhgJHE1KS9+UC98Wz9bJF5aISg3bWpaKWRJbGBYIzk5I0N9MCxTRDZyZC4uaTFjamtVT2wqI2Y1fT5yQ3ZMRSR3K3k6Lkt0NTd4Ky9KajcuLG5YXiYse31QQ1EsakRwezB8NnIhSjU2QEBOTl5DKEhgMyZi''@;'; put 'put ''Wj5Pe2w/K0g8K3dBbVRSZiN2Qyx2YnJ8ajpdVStSPU1oQnJCdil+ZVRkaDZzJVpFeHg7UmAkITx3QEQoZHAzcHtpR29ZMFMxbS5adTtdPHt1NH5mWml9YF5HX1ttM35OcyxEcVYpI3l+dmsmZVZKQm1sKCUzQ1ZYfTNZWmNeNE40TmcvNTBARElWa25uSHxoMlokc0hEUj00LGtBYixYeUNoKl9d''@;'; put 'put ''TEJmV3pUWDdaalEpVGt5Xlt1LzJoYGNMOThYYyt8VnZ2WXs9ZFB5OH5HcSxLQl1NOTQhQ350bGRUZGZVIn0kenswKT9TeVIrQjx6LkhAI3RKSmlmdD1bSCpFbCJBekxwYn1ZQz0ienR5YkYzTC9KZjhJQk4xLkc5MzwiSFl2cE1LMS9PbUlWSF8pXyg9dHM1QV1OVlRFZnFIfHkvPVUlJFJQZ2BA''@;'; put 'put ''c2NZIlQ/W2p2Qn19akBbNmkobGppNmJLbW8sS0J8OSIoRl02R1MueGo7Q19uMEdBYCZ+RENPcXdJSzgrQilMc1UuN2c+JEhFT1UuZUBxKmV7cy4iQTxlIzprfiVoTXMwSlUkLz1IfER+Y2l0bkslWGIjRDFydXVlbCF5NzdGY3ldcH53L0E4Xzg9ZE54czJEKnwwfGV8ZUdCaD4iZ3EzV1c+R2I8''@;'; put 'put ''Xm56b3YxU3U1KmRfPXx7eW1mQ2d5OEpIZURpOTw+UypAUFZlM1NdbllzcyR5MkVBcHljWUYvYE9gdnFZOnt3Wnp+N0lnKHokKjdfM2c8U0puVWJ7bTBYUnM3JD8vTzJfdW08cVtzLEFDImpVUWZLVUJRb2QsS2A1LjpKZUY8VFd4N3x9KkxuS3NdOTl1Nk1adjlsakokRGh+eUdoN113RSl+JnJi''@;'; put 'put ''VEN8SVJGWGplOV90aUBtaCV7cVN4WGF1SyI+ZkhUfUEsUHx0bl1ndEZJWEI0L2xEV0V0Q21MKX5EQGsvOTtWeVh6a3sueDxUSnh4bT1CVGhVMmo4Qk40SmlESE80NjkmQ1Q+NnQqcV1IOjNVLik/XVFHYFlHbWB3aiFjIyFxWEFhdW9nQUMqdGtTPVNkIXlsSjlyZnFDenNTM15lSTByZ2h1MGR2''@;'; put 'put ''V3gmVkBAMjJBYGMzW0c/YmpsfTMmfXQ/Yl9oNCYwWkkzPDhzWF87ZDBQSCZjQiFEQ0Z2OWwmPktTXWM/eTdjTWk3VXQ4NDhZKE4sWltOQ1o1O0h8TVQiSkRCWGA1fmBTLHguUUAvR31LS0koUSRfU2sramE0ODphdztpNTRzVCpOKnN3ZS8+eGUhO0hIIWBFfWhOYUU2UnMkJTt0R0U3YjNWL015''@;'; put 'put ''cU9RYD1OI2Z7ZW88ZTdCfHNNOmd8T0g5MnR5N3R0Tj53QlhBOnBDVTdWaW0lZCxtUFFxUm9EUH0+TmloYEA/WWVqSygmcDhZKSxyQXlEM2JgJktIVkp+JnF8RCRAYkgrKm9pMSlFM35CZ0lVKG85QlVKOmBhYVJMfEJsKE5oQFl2KS4rI0hUaUJvYzVHXTZXJDYxNXpxNkEiTSpJfVdFYEklN1VK''@;'; put 'put ''QWR2SiZzfHtSLmRNSissWjRLay95eTo3aSVJdSFALmRSL0lVMzJCUkppYnZsYDEpKzc/T2FAQ0RDVFY/ZEBEZk46O2ooWT4wXWokV3BdPzdmdlpTUEI2fkViKCQiKz1UV1hKXVgpRCl9REFDJmNkJEVTYV1kPytoZ0NiTHRoZFI/WGt3OnNoMzdJfSZ4MCZTZkpYUzYrZjlbZDxSSipkd0JuSDdz''@;'; put 'put ''Zj1KZEZTXi51Q0BGYF9vajdWQDFIWHZ1MEV9KCYmQ0E3VDFFZjUhS2k0eEVQK19dSCJMa01qYTpKJnV3YUdmMSkkbTRCVms7SjV3fFk6OGxfWElrWnd0bkFtfEtxTU0sSklHMWJkNmxgPVNYOFp8cnpwRlZGJTovNmczJlJ7RDtsUkx6X0M+RUt4fS9WOk5hTj9MM25tKiJSflB6T1VRR2FQKTUr''@;'; put 'put ''Zm0jNXYlUzJgT0VxdGF1Ilk+cyEuZk95a2VZNWt9fGo6MDVPLiMwbXpaIjRRRSk3LEVtR2chTkJYUEtMZEpJR0htMlt+WWVnPTVwaFMyeDQ0MWRiazdXP1lxUnRKZCk3U3VWeztpcF9GT05+MTVFOUopNDdxWDQxYltfRU55fGouezB2WXFYQHpIPUJVPiVSXyg0fjFQNzVPQXN+SldMdCpbe01B''@;'; put 'put ''LkZnQ0h1NVlFIU4lUmJebGx8RUhmd1dSQzs+W3d3THo9KElFK0M2QD5IQkhubSptUiJQTik/c2lwSFl1dW8xIl5TbEF3cWlwUTFDM1YyMkB0MTB4Q3hfXUxYTTZaZFtqRm9PeXQ/TiM3biErNHdPJXhkT09DeT9OZVN5JjgoOEZfPTQ2dnRZWE42a3Y4P1Ndb3IkOjNzc0I8SDE3Qi4hUndNZXtO''@;'; put 'put ''KTpuUjVER3UiQ0V6PEhAdVBsaD9tX2xdTWIhcz4rV1JwekA8SmR3T1U5OTdpdzc0fDh1aGswOjl3QU9ESSl+PjEkQX1aNXxGQWxBeHJESEwiL0UvJiYuLlBDSFQmfDR+c3VGQmJRQCl4PUJDSjlsSDxAODczSEtVS2REUDpfQEVhJi9FczdaLyVPWDZVZjpKWz9nYT1DR0NyZjl1KHNGPVN3Pyhr''@;'; put 'put ''fGlmQ3JQYklMYVcsRltvXlloe0ZUYnNTX0VneUojKX0zMSUxVnpETElJZHwhMlIoIUlvMmVxbnFiJjh5Ky9UNF5XWG1COUosMUVnfkR2VlVtZl1vaXlQcnx6JnwpaCR8SU5JWEVdSV5rR2FvaHN6Nk8lLkN9R0hRV218WHMvam0zWDhzP0NUa0h8I21IdXU6K2sjUD9LJDh9QklHWFZiaCtgPFJG''@;'; put 'put ''MV9vPnErZEdtLF48RGklalp0fnw0U0lROTcxUyEqfk5IT0tZZmpRamFAVH5kIThYaHZ9NWMvY2JaZjdhaDJjS2hGM2xvZllOcSJXc2ovMFpZN2laSkhZYGpCR2EzT31OOSVWLFdYTGQ2ODt7LDpfSnZLN1F2aXJZRms6S0lTNCo8O0A2Mj1BITR9Q3toI348MjBPbVplazxiSC5IaEkzPTBqcmVO''@;'; put 'put ''cztqVnxBMSh+OmdFIyZObzN2W0VdIzBjIyxmXiVILFBgbXBzUDhuc1ZQL1cmZX01KU03YzByeClnTUk1WUNTO0tHPj1FWFQiQFk1YmJCTnNibjhOVFVefCN9b14kcyM1Zz13ZVBUe3F3V0kpe3B2Xls2IzJqb2o0YCZXcWxgSWRTeyp2O30/Llg3LHBjL20yPGR2V3FNRHRMJmR5PH17KT19OU54''@;'; put 'put ''N1toNm1kQV5jYWRBezk9aCN+Vk55SDMoRCFlJXpyPSZxND1PVFAyeDx5cz4vOTpAX2ZJUl5TUmM2UGdtX0NeMiMhUjJiY3FgYFhUOnU2JV5GZ3VKI2UhT0g8OUBqK1o2ZWV2WjIjfDB+bmg3NUZ6Nk4uRXFyWmtKI1E3LF0zalQ9VSQrYlE8VltCVCNVVX4kVCx2ci9MLjhAL3VSZypnQlAveUc8''@;'; put 'put ''LnJMXn1SaC55X150bEtuPjFjZiI2RUhWRyV0T0dFTCMwPV9UP0UoPSo7Nno3LHNzVmBgTlpha3cze3h+ST1yNlsqNDxkdHtAdGt9OkJadyttJDwveEYwXSlrUHRGInVJJGN0X0UxV3Q+R3ZgKWwzT0ZFcmMmZmsxOncuKyFrQV0hVkxwTWs0MlN8fngren1meDw3JlQjUDtOUjt9KDpsa09NLnYw''@;'; put 'put ''NzRdeGl3ejAhaztrcE1mI0FuL093a0w8SVsvXitTJFY3Z3E/PEZwO1BzdyJUTDxKNGUqKXk0YmYjPH1teHF7PlssP2RxbFd6RypJSyJzIi59QmlPMi8icSojRkV6VSNaMmo/Sm99JitoP0VyJjJPM2xyOiN8VzBdQCJ6aE5rT3prbV8+cEprKjUyeyh3OXgrN1pqdnZ4SU1eWlpVPk0lVzBzREpT''@;'; put 'put ''Rn40d0k3S0Q6Mng5Y0hCK35kT2hTMXxfbXdFX2A/Tz5xL0tvP0dYeDtabFhNe2MwSlNwaWZ5PzRneTtRaWlEZXNpc3A9QlojND1jOkloSVAqQCkvXUsjS1liaG80JTdJaSxoTStFIVAhYF9MbVFRZFo+JHQyJkU7MmYyWyFBeSEzOEZ9Rlp5JFV8b188PUteP3Y8PCtUWCF4On5dTCVVKzB3YlZd''@;'; put 'put ''VEkwJVY5bGliYkpUemFrZj5qcFEsZDxbXjgoWlNYPFJTJE9QcTVoKXhGSnwqUUtYVnV3bk5STWNzOiNoe3U+bUdhIiZgczJJUCxjTyJzdmdwUT4uWX4hSD99fkk7WVgiISUjN0w2eSR3RmloYjcwVEV9WjBOJCM1aChwMEVuS1c8Niw7Kk5JYDx4OHxbPTJPV3leOVkvQjxdXyZlc3VoRnMmJH53''@;'; put 'put ''NVlke1g8PU17ej1dcDAxS3ZJcFc0WVhBSHpgZkp8QDRsejJWTFg6XmZrcDsvOkUkI1BJWEIjbnhAcDhyOSRNNWlAOH11SkB4b3l3cmpsaUYrRTl5ekp9NFc4Z0dZVntqXiZkZjdrX2dWVExwWnVkaTJuS2hMKTJBPmQ8OXkzeGxwK0wpcC5NPXBWTmw8VCZuJj9kVD1UK109Rlt1SyQ0bGlgM1tv''@;'; put 'put ''MnBUNTh5THZnT1k+aHphd2A3NjhaTSkrS0RSNCRIUmk7ZG4peyRTVVR4fX5pQFlrPW1JNDZ2RkN3bXQoXkRuYUY9X3l9I0V6MWt0M341PTtuQCZtKylxSm5MYngjeS9HQDFSVDRmZ2ZAPGB7Y1oxcSwpOnhpZWxMTVd4MnlmMTpSWmEvU2ZKQ3VxIS9XSn4selJYdn1aW3UicVE/Q21lUnNQVzYk''@;'; put 'put ''e1cyZmxvTUI4JUlzIXJpcHBtejA0MmwhbHs6anFmUEUjJFJ5TSg/bltzXUpbUVRrJH4oUHpvKjdrbT46R3k3Wm8rfj83XT5jPz53LF5kISJwUVl7cm8zd1M+QksmcDovIXckb1BFX0NfakBzYFJXQHY7e20zezkzfmUxdEhfXkcwIT0ifCppXjV1JHY9eyw3M21YIWdjamlJI11nVj1nem0saW0x''@;'; put 'put ''fVhwWXpaIjtpSGxrRCVzNSMjOGhFd3VLWHVwMnh0JUZIZFg2NEpXak55ejQlcTIkXzh+NilwKXpVOmJyTSwwWyklSEZyekRTVzRFPDNLMVlCRStkV0ZVNnBMcWZlaDZiXTAjfk47Und8WCUmN015UjxAaylPVGFsOSIxfCE0K146bkRJU2kkMGVwUkU5aiFNXmFEeWdZOnBFelp+XlVvTFJVNCFo''@;'; put 'put ''XTc7MyxWREF4emQ4MiROWTlNJnYzeCxHWk1iaGQxUlZkYiJJKHt5cShSZHhxbyNRZlJ6a2BvXVoySEp3MEdXPDt+e3MiV0VwXnQ2JVNMaEZII2NSe3g9dVhKMU9GLm0hTXI7KSMuWWYyR3wzVDdfT1kmVlBaSV9Fbl9bdlAhd2tJI31eZVJmcFsmbEt+fU9sUShtejhIXmNXO34/Oigpa0x5IVJ0''@;'; put 'put ''RVFAbWpdS3l+Q0kyTmoudDx1RENFJVY6W18hcTptZmlEN3w6OFs2OHBFej5nRUpNNyhKbUx6U304a00/eiV0VWY5N18hWUlvfkA/SXM9Vm9CP10hPXpISiRwTjllYjxgR2cpcyMzTzBCNVlVMnRMQDx1LmVnT3BmNFd8Tn5dZnh4MG1aXUZnZ20qUUVZUThJPzNCfFZrdDVuJi9oYUZ9eldQYi49''@;'; put 'put ''LmhGaWRyPi84MSQycTkiRnkhdzhnJUZnODNnMjd6Ty5BTC9tYFZZJTM7dEJBTWJgSGc3cjYmbmsuYF1UbkYldWo0bil9PVJZXmY3LCYiJHA/bnEjfkQ0alYxeltbS1UyOj5qIlRGSjVGQThhS3suUVtALGBlOXUmbiJTM2ZtTihDNXE3JHBPW1t8QzgsMSJsU2Eyd3xpc0hqI2l5MkJ2NDQmUDtX''@;'; put 'put ''PHh1cih3dUpwIVskUCMySnssfC86fnZUbnNbbmZ6XzhuP35Xc2ExXmciP3pqZ3YzMlFGOSIvOUxddkYuZTo2YmIyWz94RzNwVSYxKzk5elk1aG0xQHNEQHQmLGxbNlNmdndJXWFSZmolNXE3JDMrSH5zQm4yYEd3UFJDR1dBJHdVd3BaZVAqSGUhIk05a1VReT9tIl50emAsIVJEOW1LdUVSSDwq''@;'; put 'put ''MiVbPGE6ST5sXW1GelQ2cWBdMWwsJDA9PnFFNEpDNDlvQTlPeyxpQntEXypzIypaM1AvVE8pfSxzODdrJTYkOFAlUzojLyxSVk8hPnQyRFB1LHgiKnBGa1gxXTk6KlpxWEVJOlNQK151OzB6SyZhPWUxfkEuaXl0YTVUaCxNN01vMy5FdzRuUWQxdHplZVBeTWxBbzA7MF9gYEdMYkJ5KFMwMGI1''@;'; put 'put ''fUd3QCt3Xi9OQV00SmVDbGFqPWZ6RGl9V0JLUUx8I1pZeWYibDZyMGVzRSRIZEA3WUU+e0FrN1F8KDZQUHo2KWIpbW5HU09NbVFkZmN7Oz8+aEl9OyNKfkNiTnAsVUdYbjJJOXN2RkxzdlBganZPZEpwdHtyenFfa1dvUGBIN2lYNDF8OXdrb2RBZWRbTk8kXmlbTFRvTXRSQjBFNmlxX3UxOiFY''@;'; put 'put ''cmdsWVF9YCEpQyVrUVJqO2luXjc9MCN6RH5qTyYmdncxbF1oWENVfEgzVzs3TS9wRj5yUmJoTyl6Ki4yY3RyW2RKPE5IIUsvUlhFQ20pS0dIZ0tASSpQaUJLZUNhZH1zZUpLXnxqZk49WDg3YyU6NVZUWl5HZSxWZzNkSGYpWndCWSslKk1NaFA0OGBoKjdsRWxGOCQiW2QhXUZpY11UWGQrL190''@;'; put 'put ''IWddbjx5R01bWlAzPTkzPz0uelp2YlRzU3NvJXNYa1t6JWxea2lZdldVWHJkSlJXLyttUFlLVlt0ZWB0UyRTNGgzaXovUFA9XlVbdXtDTCohPiFEQUVuUyM1PFFGPVo3P3AuPzB7RzcxZzBgSG42YUpFdmxqV2NTSi5LMHNAdl1Keik+QVQmMUshWTtndFJrXkl6OihAczNHcT9kZDdtW3ZdLmJd''@;'; put 'put ''X1VQOSw3KzlZRWE6UCIkYEQmKltvVChWMiZPQVR4dWdPWTYhUVtvZD9hPHw1dlc2c0JnTVRYUDRWRFo6eFRnSjpgcjlRP0ppTEQ8eiN3cyhRRiQvWGB2U1I1eUZObWo/dzFkbE59NVheTEAlbE8hI3pMJW4jJDZbXSFJVCwkTXtqZkwvQmJRNT9vNTIuT0xJNyJYTDovPUw9T2hTVkp1QHJyeEp5''@;'; put 'put ''QD0kbSIhLjdfdkopUmVzS1dqLF50PlRTMCJhJjFaMStPRV5bO2g3JFMsOHZ4aXRdfj5xdSU0fHxdIUB9fmFtQi4sLHM7Lip1eC5CQyFlbTRMdFQoIkBoXypbZDJwfWZLPyp4NDxAJng2W115eWxkdilycTBEOUk1Ok9UXlVbd3smaT44czE2MnxdeFJBR0FgSiVNOy9dTjFASjB8IT1RalMhe2Eu''@;'; put 'put ''K1ErfklLfVQpPERtN18lNW8sWXV+eERkcndRezZ8Pn1dVm9ufD81Y0ZmZVoyezZjXl5tTzNrOC5IbjNSO2R3OlZzNiFCOHhfLHRYQUdUWnltKUdCdEt4dGtRNVZ6XT92U0U2NlIkfilWfmBGbCojcyxsezNUOFtHKUdgWGU6ME86Wi80NHxKUmNmRVNYJn4+bj5tKmc1R2N0RTE2WyIuNHM3RmU8''@;'; put 'put ''WjU+V0ZhK2NzVSNAS2hoNyp0I2tabmUxfk5ye3xraCZoYUE4fC9eSnd7S2pePFB+aip2UTA4eEgwXiQ+ZCwwdTdwRDk1NSslM2FpL1c9djZvZkU3Rjo/cG9LcUlOOl8hQkhiU2kmUn5oaGpLPkdUcl8mMCFrKkVjY2kyUnFfVVFvd0t0aThUVDNqfDBWYlFbeVpUTHN3e1AmWWd3KVIsP0o4dzBT''@;'; put 'put ''LHVQQUMkLjIwZ3xWWmNbSk8xQE4oJUZqLEB+UGNPOUp2IWpTfmU2ZyY2dElsfHxufFdhOS52YnJBOmNyXXJJaXlbeklCdWUqdHE7QWhkc2lpaCxwZHI5d1JCSSwlaDQvIyJMZDE0VD4zZzczY1EzQGpRPTMwO2l5T2Y5YVlva2xyTU8zJX5eN141ZzBvcDtPajdYd1ZOdHlscGtASyRoZFIlYnlI''@;'; put 'put ''MyhbN0I5LFgxL2F2ZkVNajpUVnVlNzdZZTFmaDdfZ21GdUskZzEkTFI4dmE1ZiJpdTY6JHJRaEw0a3lgRnB6dj9tdSpiW280Py4pMkohMV5KSDIrPyVSZT9eNTBwO0ppMiM7fX1UQmolZTQqfnpUWGdZfkVoIWQwLFspTGRvKX5sXV5VP2Y4P0A3OiRIRH0pLkc/UUNwX08ibV1qQTV4PHBheyh7''@;'; put 'put ''W01zMnBfakJmcTElOmVwdDRtdk03aDRUJXJ1OHUxbG58d3FzYiZnQmhITjVUOjlGfCZlUypjNVZHKk9Id2BDZUh6W1ZrZjFbMWxLZ3IlLyllMyheQjs8PzR8OkZfIyZDMlRDTjx8ODtHdVZrbjNxbDRoVSpVO3tpcz48aSQseThqYyR5cSQhazJgSklPTjF5fCIxY05TeFA/aU1GX2xQKSxubGBh''@;'; put 'put ''RFdVbEVlPmY1UysrQHZsKz0kZ3Q/cjBZbDpDYzEqOVI6Z09aYF1+MVBlVHo/Vn1MMT95Yzg5TjIlXkMidj1taDYuaThqWDBFeGtxOl1aVm5dcSlmYDBOL2wuQV4rQFkha3JfTCJCL1M9Ri44VilUXlJyVXZde0pmI315OXk+QEA0JmVSSGJEdyh6PXJxWCkxdi52Yl92dXdyNzVJY3QvNk43IX1H''@;'; put 'put ''NmJhZkQpLHRBKHpzQSFxQFRMUn1YcU03Yi9PcGMhQiUrT1J3Yl1Zc3RDfjZ2aS5YPEQ0RGZNU3tUKV1PM2FWV01kWkslQFQrdElda2p2eUlBQnZBdCVsWXxZMFdKams5TiZxR3NyMCszU3hBdSVfWHo9dDdnQzNBZGZjYFZqTkA/eys7MmlOJiErUntPQ1o8X31JWkIiU3Z5em5TQ1B0e0J9PUdL''@;'; put 'put ''SVRMLChGJGwzUDgpMDJyfj96RXExZlY3d29wOjxGO3xBQCR9Y1R3ej5ZSjd4V2dEQnN4NippfDFobX5Nfil2LDBgQEoqSVlddHU6RVIpOzB2YG9uQVJWTEE0eUVVbUlFLzhkTyVwPXt0dnMqTSE8cURzYXdyI3BGUHtDIzhfTX5wfXB2RGUxZCpiTmgqS1pbejomajt1MDtnem9mZ25kL108SmRx''@;'; put 'put ''b0UhTF9sKkRGYmVlTXlrR1o4MSkjJER8ViRiM3ErP3R5Sko9eFpwX0YlYkwmPkZ3KVlJdWMqKmRvMUViKlJ9P09WNiNrVD9YZz4lYj9IdC9AfkYxKjwrNjJpU1h8IyV7L35gKjo7Z31fM0ApZmspYCJVYSIzZW9hU2NaJVJ0JGlMdWVGPGRXY3NsNW86cXBLZlUrVjkhTV17ZE9bVWNeQFY2MHJT''@;'; put 'put ''OVZNbT1mYGpMdTJgbWdeaksoemwiajt3Mz8jb0QkaTtYNDNTbUZJI3ZTL0RmOzR3eDlsTlRuTFNIQHclfEZQKHdPT3AuQz5sbnZrbWFpMSgpXi5xOX0zPzRrczh4Z3I2RWc4NiRvK2gsfHkhLjBnW1VCNzYrPVdXa1ZBcXMwYnVkeER2PF4ucihWIkpoTXBwIjR5fGB6akcqR052M0BRIlR3Ml5m''@;'; put 'put ''ZHJ9Xnc7ZElNSyU4Lk9yRn0hXS8mPCtLPDJ5fXpiemt3YldTQEMoP3owMVNlKktdN0RyOTdBaE9EM3ZqfE9CUHNEP2EwQH1jdylKcX4yR0ZuNSl9bFMzd2YoQ3dfblo/c0NNKCp8fXNhL2ZiLl5qXlN3cjhSQSp9Piw9MVJRQSxsdWBQV0FwWFs7KWF1TUd2UXxPfTJxNyRUIUx7ZyV2UCluSU5l''@;'; put 'put ''NiNPZl0vfGNpSV8rVVE4KXRnKW4/MSJRI05sdiUsaUp2RDQrSzpLNjs7PihoUyx0djBndDV0cTlOc3N1MzckOkIxIzVhdDVdY0dvWFAvV3B2TTtWS3xjTitSJSRTMmphLz1iMmJQdDBjZ2FLQ2lFQzRmXWIjRTZMZTZYPUh6PjYhbTs9Z3dtLEU1Uy5pYzhGMmFPVlhNYE8wWjlraGR6YVp4TXJv''@;'; put 'put ''ZHxKZXlqNVNlXX07fUE0PElOPkdycTBSKWZlXTFPaGNSVjFCUyM8Ik08dkBiMERwNyxsR00xdT94fkxHZ1cpa3AsanRaeD5obnEqYlliXlJAVHI1fGBDQjdGeHReMk1ualZtIUNDeUhbNlc8bTt5eWg1Rj5JTnFZOWc2c1NEVXMiTC4mWXddIkdhcG9NT2s1Nl19ciMiVi48YCJ3I0RbOFhwWnU1''@;'; put 'put ''SmQ6dHRwV0dCaCMhJUwySjgobGZwMWwrdCZzbiJIclJIVXJJZ04uXnAhYzd8YmNHL1Y4NT1XMyo2bTZ2YXlCSV5sPjVLPi40ZnpvX0t6alR+LyZXeCJLQD9GTy9BVyssSS8rOjpJOWtGPjEoZERZWz56Qzd6UD1FIntzJnIvMC9XOVVTdjFVcXZOMylKZ3h4TW0zOmdmOk4iNkdRNGtKaEQ7SXt6''@;'; put 'put ''MXw6e3p5bWdaTkNfY2xCe0NuRVBhejFZSGQrUCskK1AsYTVjMnZZbSEkSStTbFt4ZXJCQDs+dCRyaCVKSUloS25VbHtfPkEkWE9XelZ+VnoibEciWCJzT3dXVDpeTFFSR3ZOd0NSeX12RyUrVHwwKSxtS2Z2TXg3e34mSXRmakp1flFOVEFjTERDYUdldz5SVChYLmpJXkkoaDN4aH0+V25pYXlp''@;'; put 'put ''S2YvMURtfSIpbnFYbEo5YGZzPX1vbX4rJEI5OlsmOSlhVClyJT4kJV17QSJga0QyNTNjRU5CaTFmYTlXO0A4KFQ5fD9qenJhSzZrelAwJTNeaFYlVUspSCREOkVoJkp+R3QvVmhxL0BvLnt7O2lAS3l6dls3JVprUjRQVixIJitBOV1xOzZfQ057JTMsJXdqZmljaUtuYEZaTVdSR3VJbF1DWSk8''@;'; put 'put ''KyQlfUJ3WkJ7R3pOUH0uaUlYdz13V0FKUzwlYXBoZFAxMXEwQmV8eTcoVWFeflhuVzY5WlI8VzxUd0h3dnYkd29iZCh+fS80fnN2cFYlOSp7Rml2d1RhJEplNntvQ1tYRSZXOG8yY1ExK1hMNT0meGBJLk1VYlt2TCN0Lnh+ey5rQSgvWXpnW2ZhRmF3U2xIZUVKPSspYktRIj87LnpSbyNSKnxn''@;'; put 'put ''dSVYVSw8UXx8a1Q2OUJGcU88fkphQmBRKk53ND5naWFlUngwI3p8ampTXShOSVJvQncqcDxtZ1FNfF5rOUooV1U6NTB7KytqfnN8V3IxSSMzcnRCNEIicDguYStRQShoa2RhRDo+RyRbNW5mXihManRGZl4rZ0hZNTRWdndfYFE2PkBVe31dIXBBPz0/Zkl2L1RAKGZjNEA5KTdNWTQ+RGZvS04z''@;'; put 'put ''RDRMS0ReLlcrTUVUVGNpOzo1TUptUT4qPzU/ZlpPM3d3TzFIdjxzOUp8XT1kTFg6Zypkfmd9fE8xVk4ua19uME1oSkxzRyVjUWs+Zi9ZUEZ6QV5wfVR+clAmaCJ8REkvWDV7KyJ6V0VxQSxYNjFYSEpuMyt+TjZwcVp7RlJ2bDA4dlJGI2hfaWUvKUdNaG9XdXpMaHw6dS5MJj4+UXtjTDJgUiYl''@;'; put 'put ''fV85VCR2VjJILyh+OldwZ3JQQF49SWRrI15MVHt0SDM7b3lWfVdbV15RJSZvK2Q4RlpySWxmbUp1I1leJC5OcilTemJmQ2YxJFczOXN5VDlkWE8/KFhjb1hHQUFjdUo7MENgcFJGYldYezRpQ0E5cEFGelV1dWF0X2J1RDNIUzNrRWcyT1ZWOzhLNX1YKVkoZiZxQ11zJHVJXkEyWEhiaDBYUX1l''@;'; put 'put ''JDRNayRUcnRnMmNjfm9mWmFAQjh3UCo1bURxOT5+NHg3ZHFLKyRTLnoseWFYTmtjTWtQcHpyOXJhJSYkYlkwVkV4aCYjRV5QY319NX0hUm9HZmtTeFRhSHssW2IpYV9peXx2ZURKKGErMWk5RFtpYlNrd0VQRWhWMHNDakFVK0AifF92eCNQZStRRWdUNGIhVCRlWDJ8RFVld0pqL3JHTntwOk04''@;'; put 'put ''PF1wdGckLGRbKF5AOFFMciNQZTxUcD8+K3w1fk1IN1RlWFldT3A2YG87P3sqLDw6eTZwL0M2MUptOzp4JVImVSlUSENLJm4kWWdzOXwlZmJtcTxvQWs7L3hQVC9bYzprbyhGemtrQigjWkg/ZSFEVXkofElzd2QvQk4uPEReWDJPJVQ4QlsifTl3JkkwME5qWj46anNoZSVkTm9NY2lWMDg9ZCV+''@;'; put 'put ''ZkxUekBdPGtLa3ZrTXhaRUsrYEMxWmJUciY5fTxEN3N4YFdQSHw3TmVvfF5pWWcmVS5KdU8wLCsvRyw+Klg3el87OmFVRCFbWyxyXXBXYTtFSXo+SEQkSispUEg1RltxMT9tOCpnSjgqczNidkRxa1NdRVJLIiUsYis4TyF4Pn0ualpiWVd1SFtJOShgZXpAOTJXSVsmPnxXZiFtVUtjZ3JJU0A8''@;'; put 'put ''dnZdfTlAc3k1SHJmfnQjKltLaTVkX1subSpdc1FIZSZnekd6ZUVnSkxtcjsrRzwsfXFPW01rdU1VVHZbR0ZiNCwpSHFTR0FzWndaKzl3cz40JW1Hc0RgV31xMUp8ZGM2Q2E4dF1LbUc9YztXUEBkYH59SVcvZExWNEh5U3lDUCRBPG5FPihUeV9gWV04W3FJfUU7OVhVI1l3XXhxdH0sfUF+PXN+''@;'; put 'put ''fjFhcT5gMyZJZHY9VH0mJXo5I2hSYXhQT0c4WGIiTy5wWld7YS9mVnVUVF0rJlRrI05wbzVqKFk9PXxQdXN7VkxMZyVfKCJAa2xRJDl4UD9mUEMuNC4xakJoWCNlNjFJWF1hTHgwJVl0TlNfZDNgTWRsMlNFbS5jMz8qXV4iMixyTzVGayRaSUxCVzJ0ZFYiU0J4M1gvel01ejo9aC87YGJsIz1I''@;'; put 'put ''VnxkeUB0bVtvdjgxMnE0YUQoVXRQXnF5TkteZDtIXSRAaT1oU2xtW181Y2Vwd2YuRHhQSHFuK3FpeywxN1U1bEJOVFZaP0dVUD8wZWZSX0w+eVJVNVV8YlB7YHJvOXo5Mzx3VVAvOE1lcXFfKjh8Lnc8aWt4QGs/KFlHUzluVmtdZjRvKkYkYnQrNyNqQ1V8IiZPRSMkQmh+UC46aExlSSU6a3l9''@;'; put 'put ''KV1bYWQiKjojcTw8b1p4QU5zYT9RPXVRO0ZvNFA1QkYwPT5sOVJeOnxYQGVMbXc+UiNXfXRHe2M4QSpnKCwrWkltVlAsLDQvSSxdPVNXQCRII2Jqe2RUY3NgIlZ1PHRaPTFhJHMyNi9aZDZHdyIpT1k0SDsjJEo0R2JTN01CcDQ7SHpTY11YbGdNPFhOVnJseSJxZT9BNkhhPkxdZGM0ZmVtfSVv''@;'; put 'put ''VUhVVnM7K2l3TDlPeG9kc2ZUNSo+Kk1Qa2V8fn1JdyhsaWA1W1dfQHZzRENqIzlUeCJ0TjBDPnVwSCt1LykwbSIsT2t0WVVCeEw4VGRkPGJPMSM2cld3dmBDNzxCZyhVc1JrVmB0fEJrRkVqS0cxZWkrQlJZLFljV3hFP1FXe21dPiM9QXFeLGV2SmlLTUclR2lSJSolZEBuM1ReQzJQaWEwcDU3''@;'; put 'put ''LmxNMXR0K1R9KkdUT208M2k0YXo4ZkojKSUsK29XUDpuan56eytGTyFaRVNMW1NbSmRfPD9WT10rTl1aWShiLnchfSpoIWJnakE7fWosUUl7bEs9KnxwLzYyQHkzPVM4fnAsYkhxdHs3SilvQTt6ajFKJitrQSomdFdXUHM6Nk9mRGozYGl+JCQ7VF0rbncrJHQvYlVQe1kkc1s8RWJ7N2MzR0h4''@;'; put 'put ''YF5aImZpOEVJK0J5PipVb1soPD59W2RNeUMrZ1hgSzx9dWBoeXIiL3o5SnxYNnM3TzhBZUtobTlAPlApaSpbKixiKThXRyMqNUlWSTtvZHVYOjluTWEjdlJObjZaMCpHPllQXVdtWDoqJWQwJiRdO0w5TmJjUywoLGRTVkE3PlNAQyh3W19xSjR8YCRwTkB3IUZPTGg6Pjsqc2pCMHEvXXxfPFAz''@;'; put 'put ''L0QmeGtQR0BhWmVnOS5aO1RITzNbY29mZjJfMUE7LFVaO2k1Ym9CZ3soemFsbVYzayw6S0JTKzgqTFEyWj1bezBaeWNMdXIhczc1ZCZoZ3YjIWNPYHpGOEciNkZ3JGF+KmB6UExXUVhxSTJ2UnM7Kz1NRUNkUXkwTVZefG1IKCV1bUBgPCU/K3t+UjI+Y0Rrbl8pX2U/SzdUYSE7QVU4c3lVfTY4''@;'; put 'put ''PkhIITx+ZGplQ3BIMC9uJSYzYX4mP2FYNXpXPEM0SyhxMTRyQCN4aVspODM2NUN7MiE/PDhNRmwyS25oO0pAJDVPYjhLe0EyLzRtST9xVSpQKUpeeWRmRCJdb2pWRHN9dXEvXiF7WCksb35bUDdZODp6Nn5QUDJYMlZsMUJscTVLYEllJXdATSFPN2h+PjlZb31nM2U4fW4mYT9sRDVYJSZHe30k''@;'; put 'put ''cFdMdGBhNWdEbH4rUlRMWDUhZ0toN3EiN1Yrdl1oO3VScTpaUCYvdn1wLzJ4bVNobGhuZCxBJXd+OWdnLEt0RiVXLyZwKS9BPFFPekAqRkZdej5KJGUka1Z5TVUkO0UlfHJHIX5LdFZRUDpTYXlZTyFmZ3dxInYrVnlzLm9MITwjNzJtQHkxfkk6Um16TjAvRGxFS1h4XVdRIm11R1FFMkNTdWpf''@;'; put 'put ''Smt3bnArUHY7ODd8Mkg6bUYwbkNwbiNjTis9IWA/WF4uRWhpXixnUCs2PW1ASkh2P1BkVCRvUkxnckgzNVJlPX1tcjE0Jn5NczBENW1afUBIcW1FaXwkMFdrb0k8TTlKNyMmMlR9NE99YH4zXnwyUS98ZH1HblB9XjtSV3s7PXNxMiNOQ2RXaHFySj5WZnNSZjtLVStXRWgvNGNYeFo1I2AkWkpb''@;'; put 'put ''c3tCR25NZXliXyFMNjd0LmErQDlYRl5xQ0pdb2c0TCoyMlhWO3QpIkN8InIuJDc7XkNPO2t2WEVKWDE2amt1K21Bem49b01jbSpqPGsrRixzPFEuLmJ8QWtGVjA2PGU5WVRXKm5FNVNwenEhe1UwYGMqMlBLZVJ7VT5rJD98VCFdOTpiXmgkJDNydyRqOFY5bEZjKjFoRyEvdzwyInhhQTN4MiFV''@;'; put 'put ''OSx+QiE4byVgakUrPlRvNz1pZm5+fUI+Zk9XPm9kdy84eV8iWW51IXRTXTBhYXFuSy40eEw6XSorQDhbUzxXXn14NCh7JEkxcyo4bVg3IT9gTDIzbzBQVkJ2NDl1cSpeZmteMChhWDgiQURuRjlpeHt4LEptITtqIldDJEp8JTB8MClnc0hyPCxzXmVMbUtRRCtdJntucDZPZS5QdVtUNChzWnY+''@;'; put 'put ''LDVwNXJxLzVRTGF7R3YlREYiR35aZUhhLGc+fStWNTo/VSZBZDpMX2kmKGRuPVcrZmlqZ0QsXkxdM05JJil5MWgsbmFxVDpiSys2QmVXfD1ZUGNqZ0dUYWlJO3NOQnY9biJkP008Ok1RQTRJcXpqVy5pNzpKJX1OWnZCKGVUWT5dZSReX1hwdkFBTzI7YGZCUGY+OmRPT3QrTmdZc09rMVl+JnFe''@;'; put 'put ''IToqVDEwaj4mLi8pcX4xN0ZvamNQWjNNS2pQcjxkU0BuS0lnZFB1ZzhIazBhRnw6WXB9OSpOYyojWnhjPDFiVk84fmNRciRUPWI+UiF+Vj0kfE9COkxSQzZOZDRwSEVVZXlqRUhQVm43KGR0eUFzSzR4ZlJvakIxJX04PVcmUi9KPyozIiF2emV9Mzt1SHwqOjA4STRgcllVdjhGb0ZjIms/OjtV''@;'; put 'put ''SH42QF9LZVdpKj0xYllKQn1FKjlCUSQsNlF7QFtvSCkkeXpxWk9FKGhgdnBye343YyJYRmYuQ0lnVXFmRnhAUHNbJXRpSUwmUkQ1PXolWnpnbjlkSXFoaEx5eCJhJkdWRUZLfENLTFo9TGZ6I0h+bUJkcmUsTEI2KWlfO3JHd3llNkBpaE9vTGVzcSNBSXc4bnNYO1YvMkk4akQiJm90d0I3e1o3''@;'; put 'put ''XmJHKlREPm5DKjZDWGVZVV01QFF4ZWZAdm0sKSR1MFY4S0ckI2oxKWQoLDxJRXg0Rl1iV1B6cTJKdWAhLD1XaCVLb1ViIUJKXn55UVgyU3NvQntAVHxvU3oyfUwvXjZ1bERmYFEsMXBGNitpckttfEtNY20jNVZ1SXh3fDY3OFlPeXFJJUI6ci5KWz0oNDwrIntIbyxEb0V8YUx6dC9faj93LDRN''@;'; put 'put ''aWx9IXJxWDssWjRsLEwkVz58Ql1hRWlrRHNXWD81cypFYlRLMTtyOTM7bz9tejxWbnR2SSFOazQ1LkVAPnclNmM9eTBQWEdlOENhSH4vc3d5fSVAITFTWDtZPlB7IiM6Z348VXFrTzlhdlRzdT1WbldDVV0yWnpTfTcwJmhtXltTfTc4Ql1lR2cleyNXPE46S05RLDU5d2BvU2c5YlVYc3NoaVF8''@;'; put 'put ''VmB+PzBuQyJeM3d3IXVqOlI8OzQ4JUMyP2lMdCI/cCRuQiheJD1CM2Erd0lIPEl6NDlOR0tld3YmMXJQU1BoYW48NUBAT1cpYHwqTl9RZC8lOVdsYmU6PUMzSUVlTT1BXSk1Tm90SD5QUCw2RWRiQHFrMXxDSnkpfipoJngqe0M7bGg0UXVrTnNTOHR6ZD86T1plXWwkRENEc04oemE7QEEvWWFN''@;'; put 'put ''OyJITTxVRFIvV3RiW10vSW0lZCwqMlAwKntHU0l+Y0ooMm0yXWZTP2k7eXd5UHNMTXghaUBtVDBpWjZQeXcpN2tlTl5wQnRJTD9DV0AlOEYuOEJPOUZubW1qLEpCTmJvVCtmQEFSNkxpYCoxaUZsLzpWQDxIbGFmYTMjaEJ6Kmxgd2dFLmFBT2VBP0Jsc1dDPlRecEFFP0ZEOiJlYnwkVkRfWkR1''@;'; put 'put ''YDZSSGlWOnkvNCN9QC9ta3N+MTxaL20uMzpUfURxejJva3lTRE1rOkRlIzRtNWw5ZEApYyZ2RHMjOG9GPTY5R0RXJjZDd1VqInZQeUJ1LDYuUCMyNndjcUAkOih6NVN7V2tPLCkjTCNwQCV7eWNMc2ZzKngyTktkPEpRRV1GO2YmKHxNLEhXVTUjYzQ7JFM4XUd+cGhKYzN9Q30+R2B3fFRyNyx4''@;'; put 'put ''dzx6W2labVN2dmcjQ1A6fj8lTj5HMFh+WEZuY1FoQTp0aEZncD94JCVMOTJDOyQiaChaX0BjSl9FTz0wUEJlTT9vU0R1dyZoYDFoMFlaPEgvfWgreUphTT5RXjBdImxaQzwoVEhARj9OVlRsMC5bSDVnNHw6b1orW1k+OWJ5SChzLH1uVjV7VHlne01BYzpzRTBjS1thdFtofjsmYCV3XnkoWElJ''@;'; put 'put ''KmhKRXJUZipuLiYuO3BoWmdlUTMyRnl4eWVqT10vSGF5K2VTczN8cms1UCF9ZHMvPlkkfUQ2Mz1XSzdLZEAvNXgrallebVlYNVR1Mix7aFRCQHQ2dz0mJVp0d1RsI3x0VUkzK2d4UixKJEB6cm5ifGFKPzhmM3xePT0lUFRMX0l4bWFGTVRrQUVIV31iYkZfWTFIcTFFbEomIXxvRWdWeSI8Viol''@;'; put 'put ''IUxpY2VyOUJxOCZ2KCRZI1AhOH5qVyZSOGdgV0MyQl8sa0I9IVZUUlFtNkdUYk0rN0htU3g1WSFxL3s7WnUuaEVUcmFkR2giSllBX0FAd3hKTnMrJiF8RiklSyxCLkIzOFA5Vk1+e3plUzZsYXl+JHZPMCRTLitSNTB0ZE8scn4yfC9YZTpAXiw5In1LOD1nIVYiVlJPaXhPYUpxdDh2P1ArTlMj''@;'; put 'put ''YjtDYGdZbTwlYmFhRkIyLmR6XTEoTm5dUGlfTyxbRVE2PTJJMyssdEhOcTwrM2Mvd2V3ZU90R1RTUksvT19XNWF+LHshaXkjTlBrcTdWakg7VVBCMztkdVs2ckYhLkNQQGw1IWB8eFdSJW5NVzxtRjdiW0ByRCtGNS9qTDhqdXImSnBtZHVBeitdeyhpKF8lP1ZIYCliQkQvTFJjX3lAP1tEYlEs''@;'; put 'put ''WGJwQG1meDYiIkwhV3dKck8jRmFVL0NpSDhrNzlhKzhKLmcrSH5wMkxTeV0zMEJkX09JLiYieWNzMkR2UVhmb2JhXTBCdFhtITpZRjBdUT9vdyZ1V3ozTG4jWH5mJE5TXV1NQ0tCKFZaK01OW0RqMzBtQilnYG5gWkgsVjNReyUudDZwQ2Z4XjdbdVM/ZWM2MzFtJF1uRSQsQ3daV2EpWH06dHRX''@;'; put 'put ''O0ojOyFnMTFCdyI3ZjxUOl8yQU8uXUBFT0Q2QTNwPCh9P2VCbWlGbzYuR08oMH5XanZ2YVt9L1ZNbE4vaFpQfDl0KzxnLl1yM2pOV1A+WEw1b2EjW0UqKGpIJDAlalNNViRhfUs0cTUmUjsqS2k7YUVPQUc9dFQ/ZU9CYmBVIUZQbFhrPl03LHg8Pmp2cUQsamhmbmZ0SWQoa2lVZGc4SXhscE1H''@;'; put 'put ''I2wvVWduSCtPQlMsOnNCa3l3Ql1NPUo3VSIpWjJKeTt0S1hDfF5bREIrV1BxSGR1aUk2dkwxd21iOW5FN2Qufl9OWnlobEBOZFs2UEwsckRrIzJadUN9ey9FKz1lVUNQc0Vqak5mQyk5YGUvdTd9NmRdfWgwUDFHd29NdVkoSVtVVEBfWSsiWG0mQHFMZ3FCWHgjVWA8VGApaTZZIkU1LjJqWjMy''@;'; put 'put ''OnV3S1V2Yl5QckRZbmdQRlc4RC4jbH1APDVsNVNMQnk8JjJVcTFRcHI+KE5jRzpGT1M0dkIuXiVUV3RhUCE/b3tyc0A6djREI35sVkEhWWlBIXZFWnQ1VGNxfiRaJk9ueWcjKH56UyV3NEtWUyMvKjlVUWlQPnBgQS9+d0Z8Sj9BODQhN1pqaWAzPDcqNVJGdXhOTFdMZUouZTdhMWY2TUI2aCEy''@;'; put 'put ''Jj94dXR4JUg5SllTdFNaQWBzIUNmXls+WmolW1g6O0ZmVXs7VUJnPVByYix2SEp+W2JAT3QvQFJgWH5FQkZ6RUkpKjpkWVFwZjQkPV9DZmspPUldM3VFM1hHPSRJcDl8cTxjQ2JvbyVMK0FeLDw/MEg8MyM0QSgiImNtcy8zWWtSVlYvKHheMTJjOCpMRChAVlRKdjNuY25eU2ROOFkiWEVFcD8r''@;'; put 'put ''PGN+WUAuS35GekVveUAjZUw8Z3ZrUyk9ZHFRLHFiJmgvb3gmYkQzd3xQOkdPaGopa2ZxIzUqTHNhcT5FaWN1OX4rKm1NZiIvY2V5JiRCYU5Sel1UTCkzSmpmRmM6Skp1IWViVl5PaTBNKUo0PkZVdUNwLyFhdThmVEkmdTlFb09LbD5sQmRzO18rSXt3a2BAP3F5aEtXT11Me1J8I1Z0PCUwdCQ/''@;'; put 'put ''fW8haSVffU5OeW4wJXZDb0xXRCokY1MoSVltKHc0fV11LDohZD8mJD9EbygzL0RCNHZTdTh1SVkjIyUrfDEudFA1IXJvV1dXR29GP01rbSxsRnJiPEVNJUI4eHx8S19rezVObDRqO1Q4QHYkeF1hT1g/Lyt7PWskOVZqMVlhciolZEVFbHN2L1tXJHBbUDEqKEZQPVA/RWB5LF9kZ2JddURMSXM4''@;'; put 'put ''fmhmWDxBRlVOdEZeOFRJSHtqPk5QOys4dzxiPlhVRj1YQW9IY1BlLio/JSl6S3NDYkw+RVJGZiY2OjgrSUpqcjEhfUlNPD52MHosRitTfH19UjU/O1FoSmNfeV1TfVo8NT4pfXd5RmNrKHV1PE9aKyFvQE51SzVkWFRsNExnTDZrJjVyUk57N356VHcxJT5lKGhhfnhzUSVdeGxCKHsvfU9tOiFx''@;'; put 'put ''PmVgInNaUWJyWCZKZWI0dnVqKkBhPCw9MTpHeVRxOEM1SG8yPkt5KTE6Yy44I2pUTC9YeSpBZ2g/fFtNWUlGLyFJS0BCM01CaEhdVT0vPnNoMFQmPWcicEYmZVV4X2xjMWBCM3kqVF1gJilKWW9fWG5MQlZ0ei9JOG0oNkZAc059Ok5LOCIxUUlFLGxAJUMwKX5HMDJ4XXMyK2JXeG1pYFRsRiZQ''@;'; put 'put ''d1RvYl88MnRwW25NIkwhdz8rWSwoNmQ7Vkh9QUU1V0w+LkwiaFN5bmg2QVJGZjoxbmc+QDY7KmlaWy9db1NOfDdYfHxsZH5eWlE+JSU5WD12TT44eHl3a287IyNNdWIjK1dLPSg2VD1WIyRIZ3Z5TF5ecHExVjdZcCl9aVlbcnZrbH0vPH5jWHN9KSlVcnElSDJNR2QyRzUxdUlzKTkmTTExbWdd''@;'; put 'put ''XVJAUjtkKGhYZE9rNF13ZXdrdzQ7bGV8bitiX28sL3EpfH5fUD09ZVNqOWtZQV1uQnV+MC9wM0t4Ok4yNChNKy41PT0wL15pZHl4eFVhRX56UD92X0NkYUVmOzVddnVqMjk8NU8+ITkySnBlP05Dc3NPSSZkcD5bL3tMW0ZQZGRaP0ZNOEYrfnw/fTMvPTVQKitSandzXUI4XzMmUWtUN15ueDoh''@;'; put 'put ''e1A3bWdCZ0QjRCw4amNxOHVmKDA/bTRHQl4zWCxFaTxscEk5WUhuPylVKFV3YSpEUzw6YS9ESCplXzxDQjBHPHRYLEZ4LkxOISlhI18+Y3BfT0llWjolWX43X11rKn5xYkVVWVp9fnQiMFJHQHo0WGtTVUxTQEIxPGZKaXlFa0k+OnU+dHZIbllxT0hMKy9xbix+KGBbKTVzbno6MGI3JU14L0ZY''@;'; put 'put ''eE1bMmEuTF8sd24qcV0uTmtTVkVmcFdPZFtPRT00TnpwSjNAMDdpUXdUQHJ0Lm96fiU0ZyxMMW8qdlhUa3ZWTFVBaiF0b2NsSCFCfkZUM3JeMUckZFc0Inc8JDlrcSRkTXV0VyVhX2pZZzFuPjFSZHtOWVQ7NVJmS19aIz5wSzhAQ3c0JmM4JjVMbHtGZ3E4bzx6MF97eFdZZHJtKDhecDpuJiRt''@;'; put 'put ''W3RqKCEhODRkSVdxPU1BIVtHR31PO1s5VVR3OjFlJE1ObVoqfiQ9S1VqdyxObml4L2x2L3JPOWZMfGVWZitRUHYiJkpGdCloQnghSk9ZfW9lV0x+bkhgTiQzPGM7aEBKa1dNUmFAKGhvZ3I7Tm5Va3J1S19VRTVydTg8VDhHYkRqfkhaWFhSWGhuMGtxZj8ueCNkQDxTXz5zVzR5QX0lcHE1R35Y''@;'; put 'put ''JH1GVHh1PktqRl4mZX5KN3V9eUxoa282Z29yZ1ZkJiY3bGxSJVJDPWRxailxbDtqNSNmfHdsYV5FXVI2I0xkJnpeZ1AlJHQvY3Y9YlNdal4haVdCKSEpSXkhXlljQntMb29FYV1SKGUzPWE+a25COXlHOjQuYXNLSXpdTDRAPlc6MTV6O3g7azMhNVcuZlImPVlQP00xP0hhKFB1THgxN3g5OVJk''@;'; put 'put ''NXNRPDE2c3l4OWN5VUhvUjlGUnx4OmBGZSYyMT9WamI/ODZPNHFLVWk2UWU0YWAxXSN8SiV3NH15XTx5TU1Hbk9iYTZuU2tDXiR5YzVeXjA/b1N2dz9Za3Bren0mYD82NGdEZm5jRTEyNURzNTgyUVR3eVlEbDZ3eU06aUg5SFtWWGZZLzYkZWl0T1sseHpoK08odSYjSzBSIWY+clI9OHxZbF5J''@;'; put 'put ''aWxfUGslaTdJU3ZSUGx+UnQ1TG9LJVlHOEhkQCtHZyYyVXhJd3dnTy8qZnEzYm5FKmQhWyluYD17R31sVE98eFRgbGlvM1A8Z2dtZVozKyFLOz8/YD5IMV59WSxhMFF4dSNSM1I3KWEpTHoqJEo/bn4zaSpjWWIhOiYmX2g8TDgzNTgvXk5zelJoYE40b0hdd25PVnVWbiltbXxxPSJHW2ZMJThT''@;'; put 'put ''a2FJdVhzfUk6RyhXZkY7dm17elkmVHYuUUpDM1Q2cCJGamMwYztwY3dYViR0YDtmZG5yIXRsIilwOGlCUm4qYnI7d2E5dyIiNGQhdnluPDpUS28sUjV5STtMMlBlVVlKRkdCc2gwblRvT10obUcwQCpXbSE6MCpkaTMjPEFgVkJtO11OLi51N1hlbHVoJTQxWytNWVN1eiE+dlhPfiU9QURxZE9D''@;'; put 'put ''PG5rUHVDRn5ibytVPnhhTWUleT1kZHpfK0JhUTwkKGtFaStBXnpXTkpSZ3R0IyNpNClqKVVfeUpEVHdxbGBpcCF6U1ptaVMmeVRRQzk0Qlcwe1s6TjsyZ2ZINTgpaHpuaXZGTTNbWzQhTG1UXjwqQkZ3V21fZXwkJCFWcW4zWTtuWGJCXkVOSEQobkAwWnslfVhGJWF0VWlLYixUZTF7eH5kOjNn''@;'; put 'put ''Y3xFKUciNVksPWhJMkJVQ0YlXnxbYSshZGM0MigjVjghay5wYVcjZX5aYV4oejJERU1hKnB0ZV1aQilzNWZuZj96JFpkZTpQUGNneTcoc3NxeURCR0QodHhWWEF8OiZ0YnY6WUBdZXk/QEpEZXczdH53RzwqLH4+P0RIQz1gclUmNXIjVE4zeiQjPlojOi9FYk1YPG02SzF0VEJUfUtbZDYqVFJ2''@;'; put 'put ''dzxOVSReJW52aCYkSlM6UGdqNHJ0Z3o3anNpP2BoZEdMQmZobCg3TTNdP00sfl18L2h7diNuL0x+Nz43enhiaVk1JjBBfEU3Slo6VT1ALitwQ2hgOkowTjZmX0RldVUvRylUUnB1VlNRUypla3c4MTZhNkJCJnlYYG15MHpeRno5YlcrUF9GVT8xaWE3L1QkOGo3fmUqRlJjTnI2KDF3VSQyTUhu''@;'; put 'put ''IkY9dDw/Zmh2VTI9YDVCPFs5alQlbz43SV9jSzw2NSFGd10sMmMreU1AYnp1bGBPcCYmSVE8Ll1+XVY+M15KP0pBLzlWbnY5fmdRdmFeIXo8WXdmTXZ0VGhMfjsxUCE6cUV5Y3ZWY00xdTZUODV7ZDVSKl1eR3V3Q05XXjxYKn4uZWx8dj4/QEoxfkZIfnc9KT9GR3UrRHMmNXdEfUkuIj5VSTY8''@;'; put 'put ''bSE0TjQ/YS5DYnU1b2hZQHRXXkE1JF5xfTBaYDphMTdqfSxtXnNkYThTY1QlUHcxP2ExbTJGZkRNJWE4QnVWYXg4OnRuRTglNFAwdjh1RGVtOm1xIWx6TXNJRTNfSkd+ciJBKyg4Wz9teyg5RHIlQGNUOEZDeDJ3RkQ6UmdwTHhFI0E8RHhoSV1GeXxeVC5ZN1tyUDddOVFEfShYaX5vVGRReldG''@;'; put 'put ''cUlaeDJIQiI4IyQ/UlFUen5lN3poT09hUF4iY2ptWV5wVDpvUUY2cE5iTWY5bnkhYVN1KUoscENRYGpyOi51Uzt2PUVJem9rQi48YndESXZbMDNIPSM0Xjs/aH1tZFpaTSN4MFFddFEuUWl5IlorI21SXXJCfVAzeWd7SG8qTXo2OUhuakZgVjd0LG5pd3pkRGs0YW4oU3p3S29ZQEAwT3NhPHR1''@;'; put 'put ''UjRjXUdgKD10JH57Q2JLfClJeFEzMG1PeUFIUkolSyI6XjlyQU19NFtucXRKeHZKTnBXZnV6Ql8wcEJSPDk0bjU8cT5EKDlDZTd4Inx5N1Q+QjsyM2F2KVJ5NDh+PF9+cHxEVnhieCVxenY7LyFrNSQzaHpZX3pkUDJVMUpVQyh4Y0d2YihbL0xTUXBbbzNDJDJva3YhTmpMXzlYY1k9SFRQM00+''@;'; put 'put ''S3RhT0xIaTFsbXE/Ml40akV+KyQ+L099SD9uXkFiTiQ9NTNNfllaa2gxJS9WeDQ4fVkhRmswWDhhZXJ2QkIsa2VIV3U/WEtSM3NjXTtCQXp7eGNaTU1hJElfLmZyZGxNXVNsI2k1YUBWYSR4O1cwK0YkY0B4ZnZrXVVZamR4QyJFYUFDQFVGOjFKK21veDF3WUx5TGteR1BffWNWbmxnN3R9bFpG''@;'; put 'put ''bT95Zj9LO1UoWEBXIXNXM3hCZmFNc0l4U2J8e3B7KipePTEvLlpQUTk5bll0aVZyUDAwdzNvIWosY3QyY181T301aToyeW9HRzhbKXoieGsjTHQ7fCJzPD1MKWFJQD5MZzE/LnYxVHxuQldpVjYkJj8qOGlRWHZbVVp8al40NGBxLk96X1dnWXZ4RUBMNXxKXzk5PUF+ez5sQzRCMT50WXZRMjxe''@;'; put 'put ''eHdyXixFai5rWjFDcXJdcVdDMElfZmo2cH5PfjdMYC4hQzgyUmR7Rz4kOWQ8X1JLPzhmcykxK1VIPVlBcH1+aCYkeiFhVDlMQkJMQXMxays2Z2IwQCY0M0t5Nn5YZ0okWGNDZzpuTi4oTTslI098RChDY1JeTko6XWBNWEZuVjwjfihCTlNJLmhQR2JLXVZvPVcwMmp4cEN3RTZfNDZXbjprPkpb''@;'; put 'put ''OzNBPGZfaXlgKEJDZmlfbEVWQEsuejYvLjBuaHhkPmpLflpYR3xKRGIoR19BOE5PT0JwbTNHQiNYVF0oQjp8ZF5wNTZHJDRxW1ldLjtvJXZbT1BkfDhKYCJBU2BLZFNeUWM6I2ZaVjNOY0hoT1tNNVAiKWIkR0dyQi9oNW58Lks8K3ptVk5mX0Z0aXd8VyUkblQjOj94MHgyZiZiayF3eTRwWGAx''@;'; put 'put ''LHAuOH5XS20zMWI5PmBBSVdRKHRmUWM/NCNdNCN7IipJVzREe2xQcGBeU3lRSm0pYHRhMERTaipQYz5IWXBQL3J3RUBLQittUkRjMih1M0N6IzNAbHpQbCklbFhVcjlRenBGOjxFX19qXmJ1Unl3VWtIXW1NbyIme0ZTUk4jamtYNy5QUkJTQmYuND5IQkhKLlo8SHdKI0o4flV3IiYvc3ElLnlL''@;'; put 'put ''NyMsTWFeWkZbfClRZS4+d0hCWSlPJnFCaiNtKkNFaGR7IzB0QG43PGRDKldQTi9PbipafFssXT9QeChrUlF+Z2c4K04hcFhnZj1oeEU9VE97ISttIzt6fVF8LCguMUtRL3Y3MiQmUW41ZihXW3JgN1ksNl5eR1tUO2IoMTJQPnxkY2tDODZ3eTcpPSMoRCZkY0BFTGtAPzFRaVttJFc+R3NaeDNW''@;'; put 'put ''fkZmYmZKKiZXVFJ3Jk1heFAlZ01oRmVEc2J+LFFnY0Y+NU5DcnxvZWx5YTtZVndCX1hTXXJeY0RIUFNuTlklJmg/MkxgbDdxdXB5ciNOa3gwODQmWjh3PSE7ISVCRiErSiRiMWglfDpMNEJOMCo/dS9YeVlPbyJiL18rIV1XcVpTQS5kK2Iyfi87KmEmOjs/S2lgTGB0MDM1OHxiayxOZ2hDKnNO''@;'; put 'put ''OUZVaz9ZKV4jby55c1ZQKnVvPWJVTVd4RT90Sm5Ca3Qyc0Y1d1lPdGgjTjh3MklMYzY0Rm1wd116TmhQZ3tlfSQ2WXJ7dTpBfiEvUH50e159cTNKcUB9dmwxci9GV1Y8XiFBT01SRmJBTTA1Pko9VntIZnVfUUNaPTIlVEtXeGpfdn5VOkE7ekxQbyYiMVshP31mLik8RnxBT0Zxdnd+WG42WWNz''@;'; put 'put ''TV4sR35KXm4oVjpbbEtCMXBRPXBSQjRlZENgNmBRb2hJPUJOW1FbUDAyLiVRSTZKTTxXb3ZDbz0jL31tYXNhTUA6akw0Si51L2orXT4qOXBNTVhiZy4jfnR4dWAkUkFYZHxWL0VXQlZHLFZMRDkleldFfUhMYz1UcS5udyg5WHVfNGEiQzEiIXQyflAvQEAzWyxtL0ljI3dNb3MoIzspLChUZXMz''@;'; put 'put ''UC9DOXQhLGo+OysqLHYib3ZyR0pwaFhVLkx3WUxfZnxCNDd1ZixYUipsSDxwVGd4WXt9UT1MeGYpfFUjTyglbC9tTUxkW2ckTSEpZ3ZnPGsjLn55X0d+Mi50WnVoNWJhTVBxVk8jOnZmRHp9NyZHQzhFJTx1dHgwdUAkNkI+WFovNlB3Vz5vSzRkYH4+aTtKO3tiQUJHdHd0c1VeRllVZ1VhK3tR''@;'; put 'put ''eX1XM3xEdyFgV1J2OX4jTntPSylVLmVTJU45KW4/QHNVRH1lIkdYQkA3Xk5bYkNgRXtvek1NZks5Oio9dW4je2tIRE5QJTF8a20mNEd1KExId30yRnNBYV1URG1YVn5XcWhfQyJRZjp9Iz5iM2JNQ19oNUtXfm1TZXlia10qQ2RafDt8KW8yXUNFLixQPnNTMCl9fSZ+Ql5HYSpfMm1BODZTZVd2''@;'; put 'put ''KlsrQnFhN2AzVXozaCUrWzFhRCxQSitQdSpHajB8fktMTUpsaVE+Qm15NEs6UjlKckRLdkMvc2pFQzE+M2pNajk+STFrdXA5aWBCfXFPWCJieX01TSxZcGxKOntZOHY3ZCx0M0dKUW0uTDQvOU5CaTklZGRqUCNYYXQzJXBacWN9NG1+fl1bRilMZCh9VC9EJnVGcCIzSkpAU2lvYSxfIjF6fTpD''@;'; put 'put ''JW9xe0Z5fE84QyhTb0N9N2B7bjtPI0xjYkkpd1BoU1tgZFBVaG90ZEghdTpRZzZ2Ny9HTlt6LiUlJkFIPVElZEN3TS55OWx5XjIhR30sc1lKO1BgTyQrIzhDdSgkMnY4Rko/eSIrWVAoLi8jJkp4K1pSRXxgbFhLL2ZPdD56Uk93MkZFc3NYODcsXSROLiRsZ11IeDB9ZVt1aGdCIzpYQHouUyx1''@;'; put 'put ''T0xJdiJpQ3lTPlRVY2hDXTpfKUFGUz8+NyhzfnlOb2cvTGw7fFFXelpadigxZ2p9JDYkYWIzaV96aUZ9SmZrajNdNSImKTROKFRyLkokNGlEKjMkYHRqd1A4U34iXTdyOm9aUTdZPHBFPiZJPVNKO2UqaDVwfXJkcDZKYyZLdjsxPjN2SlsmMGQuKEguV3lzbFhNIVFAampHM1p4XkklWkhZentl''@;'; put 'put ''ODxeViZZMDhDU1JQKihfNi45V3tFaixOfTpXXktOVCR6T2dDZXhjbmZvRzZbNkwpeXxjUnVxdEdaWGlSODlyZ2I+T09LMHBKM0BHUkt6Y2UpSWlFUl09WS97RVJGeUFHNGBiWTpkKztDamgkenpDUDQ7QWEjSz4qSUVsJixhTDlTQkpkKXNXcFAxSVJscklSRn0vPXcjPW1HLlkybHg3QH4hNTVT''@;'; put 'put ''O1M4QVFmZTI/YDZGdG5lZyFTVVtncz88M1E0ZCFwT0Z7O1N9clJ3WG9bRUExS2ljITdicTZra1drQClfRFsheTBhJShtSXNbNWx9MDtGcH1LVW5VXkB3aGptQFlYRTJ2KCRuQHhjNj8oMWwqMHNTIjBdciQmUV5ISkleQFFTXTlbUnZOR1V5PzU9TD4zZyRnJDVedEU9V0NzSC92X0UyL1IqJCYw''@;'; put 'put ''LG4zeDh+QlswQS8vaCpXSX1XKUp2W1trKmNIVH4vMSMsV0poY3Y/bldwWilPRTFAdzZyQig7VV1EZX55SGJAdEFWJUMwL2JIQGFsY1JmIzY6QCNsXmI4MjosWzs3Rnl3VFFafnhFLHtdQjg1SHgiKWUkY3QkNiEmMCNKXVckNXVxSDcwJnZ3Qj4+Tm9yRD1EXyZjVXIjJiFqUkFGUj18NmhPfXF1''@;'; put 'put ''VGZpRzIzdS5HTz1HZ3ZwKUBkS0xAVkNraUtrRTdrbFVVb0klfnRbNU8jQXcsZzJ0QzFjZ2BQY1N2KXd8Oj44Ik1oc1ZiWWJWaTw+JnZXbVFmRjlJRWlvXnBzdEFOWHoyblNpLFdkek03Ynd+Kz08UFZZQjtQXnBXRXxlRDh6NG17NTRVaiM3TGJEflZDJFk1Xz5VJFtONjprQlt+YFFFM0ImU2ly''@;'; put 'put ''JllwS208cWJnNjlnPWZyJkB1QXMqJH5xUjIjbXJ2X1RLZn5HN3o2PXRie1gzeztLZWZtdEA1NVlZPnpDQFksSikrPFNMQjd1Wyg9d11wYEZPI3gpVzoyaThzPHVfOCg4NStLX2lsUEhnWEljdyFAJnhxbW12NTJgPj1TMkJAPUwmVyZdKTRENDx5YyRad21UeEwmKWVedCR8Xnt+aGJtM1QwYGFb''@;'; put 'put ''aiptMUxSO0VmdllkKGNscz9CaWpBSWYlQF5nWnRoaDFPLExtVTAlOFswfXFIdmc8SHxEYTgwdCsrIW5eNTNZPyRxN3BtYnguanwjJihkKk5eJlVYYkdsNTR6SHpKZUpqZHNRWEU5W1pFLjtbWjpzRUUoflQwckVjS2Y2QGE5dXJaQGo9KTdtPzFRb3IjRlZ+TDdvcC4hQmFdbmJ7cjkje000OjUy''@;'; put 'put ''O1VfX31rLHw8WSV8ck5qR2UiWVM8Y0c0KCkvdFlpQT1CJHYwQEZBUzY4RTQwM0xha1ApUGg/ZFNTSTNYem5AWW5MJD5TZVVlY1dLJGw3bDdaUXoyJTNnYykyTCN0blgpdihHaC5EPlc/S2FUPTZ1Zip6Vl1MZl1MKGF2LE5UbFtZeHVmdyNXWHZRQVpzaCpXYU97LiNzeU9tIWVSdFN3TFRvX3l9''@;'; put 'put ''akxwJklFKE0yaUorZ1dRSiVgWl04Vj0sOGlQVy9XQXVeVExEXXROJS8mNm9FNDYiMUZpZ3xFJVBvNEpUM3cvK34hP3Z8MFVBVzkrc2cjfU9CNzJnPSh2L0FAV1RpQk5zN1o9O2d4TWluIzdmKlIvdSMrentfRX1WMmVTWUtAZl1GeiZ+eFJKcm9IUzZDMD4yTUgrND02WCJHYF8hQihPOHRiO1oq''@;'; put 'put ''PCZFISkweTZgcEFdakpNVDwkP1BoTyhyJXc0LlkkVkNqdj9+fn5gUzxKJUJUa0g5ejExNmV4ZjZXWzlTOj46Kzl8I0E4emImO1E8eUNDa0dRKGJtVFNKUHo5YUtEV2UmUH5wOUhodFZsO0N3ay55SkwkTypeVEJ0QyQrMU5Ld0hARTYqO1BeTF9eIVhfcyVlZFAoc0pURlFmbms6TTs4ajFwfCE4''@;'; put 'put ''MW83amA/ITpAflt4KyUyTnJNOFQ+NDU9JUY7VD9WQGVGPkw6VXBxYHc8fGI+alF+L0hLZnpQayFWaEg0Z1dmQWEyVT4oZiRSZnNyLlNtRCllQFBqTXdWaDx0SF0qbSh0Z1MvYnovfT1rfEJ1ZWomTn0idVNLUkxJR3FaJU5CZWI8VS5sYT08IWx9NF9vdD9McFMjJiNnIytmYTVjLEgqcU92NSJL''@;'; put 'put ''PHUmQj5JfihdImlqV1RqTVB0RUgucl59fEQyK2AvLnpfVjdLWllhQF0+SlY4OnlMOEIxX14sU28vKE5LP0dzTjovMCF1Q0UyaFZvZExrOip2L35HLmQqbE80YmE0NjksMzNaP3EzTENCQjA/Vlo1aSorTFJkMEYrezNFW2Vtfj1iNlMoS2loIiYwbCFvLylEW1IsMEsyfTBHUmJ2R3NNUyJJe2F1''@;'; put 'put ''dWtUQVleVTBEKmllOSomTi48ZU1SezcpU1suIXI9TV9eXl0qeURLc2NDZSIuW3Ale1M3RWskWFJiOS5CIiokQDpLMFpWMER+c1ZvXSMiVi4jViR7SFtFRURVZXRaYUtlImRXTHUjQ0Ahe09BdHNOY2gwejAjfERhLyoocEppIWRdUHBmaGRJKEU6KVlbS0VXaUNLaEtTMkZTfGxVK1RIY3o0WE1D''@;'; put 'put ''UkkqdEBvUEopfV11O3FFTzdITS4lMFhFXWZrNCxjXWQhTEx9Q2t5LF1OPz5fdGpDOmpRcDkxdi9yXVRVN05+I0FQfD9FQnIrKyopbW8/Tl57bG0vOnVnKHFSaT9PSiYxPlApSDdWSjpGeTwqWD1OcXloc0BURUBqMlI3VikzcH10ckZ+VD1vM3FJVyVTeEUjRyRPNFlUODtxUV9tOzc5eyt5cTMk''@;'; put 'put ''ZUAzbjAldEUkaiVXXz1aU3xLLGZtNSNofnQlVndIY2AuN0s6YXdRSD98Z25ePCNbJTlVYXY5PHQ1dUs6IURaZWR+NFh6RiN5UT47ZERyZysuK3B8dmNtPVJ1aU1YJmh4aGxwZ3gmYVZ4W18ja0hIRCkzZVlNNUJLcldGeXJOclEoISl3ZlpJZzRJYz5JKWYjfUpOSTFOITI+Ryozcn5VdH5haFZh''@;'; put 'put ''MldoJkFRMiRpdV5oan01LiwmKzAzcUlOSyoyaWwuWWJGYiZNe1UsYF5CbWhweEV4WE85WmU+Q3I3e3NfVkFUdDhwckBOPShuPjlSX1okLEtaMU8rIkJDOmA7S1tZNUteQkt2MEpOVHhNY3YyYDRyP2N2a0xhUEVYPDc8S2RzR1YjKj5YJT9OOj0xNlc0U3IkTUh9fEJzUERSNEF7XmhTMHpCR01e''@;'; put 'put ''P1hHc2hONkpzL0llKl5CZDAyd3FTYmdtVmsmYFdNYX03VFhofj55LHk1eldPPXtWQz01ZnJZZ3pRZnxfQkwpOzNoazx2Sm1sXVVbYjovXnxYfS9iWUkkeW06W0VbOlpLLHUzfURNeDpMMGRRbGAxJihKN2lJJCtBN31KTTlbPFVtISo3KCFDbD81LF12XntuTUAoJDRES3FPb2dPWGApY3BNcDxn''@;'; put 'put ''YjZkenp1O188eiEpdXwrVE5kJEVuOC41MTNUZ3dlKE9vaSkzanxec293Mks0L1hRQHdwQDVEI0A1KG9PMCVVNkZKRUhFRWB+Nn42L31RdnhZNlVERDxdNG49NU86QERmRkk7N2VaTnNDRD5xVXI2Wi45VDhYfURRcysmS3p5Ok0+KnlpQC5ncGg4SjQvNEBEMVZtPEJ6NTNIWnJ1fks8alJKJC5n''@;'; put 'put ''UzhhUn5DMGg4aUo6YSJYUl59QXcwJG1XUTw6QE8zL0xoVkplZV9oQX0qSCU/NyV1SFhYUD8wbyN8WGNEYnU0VFZMdUI0NGVaNDEjZTQySTNJUEUpUCtGOHhqTzdAO1J1M09vMll2JTJ1ZmVhb2QsI3t1Z1hMbTQ7VmBOUXhOLEdASmApWmRuWzVCUDdYR2ZFOyROZF8oOjluVz5rSEhmSCRxYk97''@;'; put 'put ''fnkvcltQPiRYSD5OVk11e2xodF1yb1BXImVmY3NtfCVRNUk0T3pqOWg4aTNUUnBiaDE2TyRPLEUvMD9gOERNXnkyeHYobzMqUns1SkY+N2UoOWgqU3giO3h+THBgWS8vUFIiTFooJVZRMVtbSy8jPXRJXkVpMzBqPztNXlFgRUhvM0lYcjxabWVzR05XU30vJHUiY0xgRis3PWUmQzp9Ym9gayR0''@;'; put 'put ''SUR6NTV2eWlZX1k4Y0J7a349SSh2PCZRUzNSZS9kNHBwKDVMVV9POkM4NHlPW3wmfT1FJmc5VDJNTDdjTXU9djMvJEFDR0pTdi5AUEI1XXYyai46JFpxQThTSFlQRVgmOlswYXJoMmg+MUhsUHVuSDhAYFpQdmUxRyxQez5YSVZDcjtUIzpCbGp+ZlJZLyNTNzJCdFR5W208O2w1P0s8Ryk+T0FT''@;'; put 'put ''bHwjezJjcSMlMX1ndUZ+Sn5RfDglUWNUSnNeM3UrLDU7eGhASFNud0YhX1FTUUk6WkBNWT95VD5COjRmPz4zbkArSHRyVXNOZSkjSzl6MDJnLzojQDBnX2Z0XXBdTHg/Y3hbWUdve2lYPkdfIjJ1K0BsSG1YNi80bSlpVnd8PmklVFsib1kjJCFTcEhuU0Y5byQ5TCgsfCQyUX1DYCNHWVlBWWZY''@;'; put 'put ''TklgV2l5KCV0QDlzZ2UhT1o5Myomc3Y6ZE5PeXRPWS46RnpEKThgMzR3KmFJc2pTZ2ZMJEJpUXFnVFN1clZfdG9dNj1dbkxWclpnVn5ZbilbI05tIytQazdKbSEjQGp+KGpydz8/e0NIYEV2NmtHQmpMcyNATVsibXF5UkM+fVElfHVPOjUrQVthLyNYYjJyXy4hTWVsJVtpI0JlRlB5cVJgSH4v''@;'; put 'put ''KkBuPiF3JmJ1L1spYV5KLDNva0tJR0NrNyFiQ1ojQCoyZCtzXWN6Oyw4aWVWWF07RTgqK1p7UylfdXgyW3Y1QyozXzk9aW4wfUgyfWh5N2JmQCRlSmx3XTg8Pz4yQEBBZExuaXl8XlckQ0p1XzFNYFJ8bzdQSj0oQFt4NXpwWDJVX2tFLHg4WUhgc3w5R2kmaVt4SXh5UGJKUm9IdlZqUUlOK2hC''@;'; put 'put ''MXU1Q3VkXlJVZkJdOygqR0NDOSx5QEdZfD1nP3M5KVl9THFdXzd7PV0sbi9EMlBoVCFIOV5xMnd5PTZQJGJ+Wix5QE4pUHFxMk1JLGY/LmxTWn5HXWwmbXZed25WKlQ0JSZ6b00vPzNJWWIwdVo1UzlqNSFXX29wWnR3OXtsJHZtKT0+cVpHM1N3PUZxeXtAYiFXJHhQfCJjO2hjPFI3Z2dKVlk4''@;'; put 'put ''amQhSHBoNV57N3NZSXd0dWN9dkY3Z2tYbEl4MGxRI2ZkSDVHLn1yeHBPbVlvc1VAOVBLOmJySE4kZ2gpcmshKjoyO2FLW3pnd2tMVShXS30qQWttPk1TPjg2IStoYnZAIzUpSjN8N01Ien4sNlNDWmg9JDpaN3pGViVEa2E9ZGRGJWJ8RzRLdy5kVUxveUxebVh5TH5HcHNURF9zKS9HdXtUNV1P''@;'; put 'put ''U2JVc2NXNSQzVShzdipiUW9VNDBqJDZFeigkUm0uWE1bYF4pQ1YpaHJ4Q05hTlQodEVlcHVNNyJee0Vhcnh7RWYmYiM5OEspZjU/YHUxTWNBL0NINz4jNVV3VEcjL3t5WUZYT1BZd1B2diFlW312KnNjal9pfX16Xz4rWlZEOiM1UkBoNyVDNyMlKTBwOyk8PkgzYiZQRTklRSVUTD1iWUN2alph''@;'; put 'put ''NjFpX3BpMnR7Ulo2bDV3TUpRSU52JHtHQ3ZbQF58L1glcihTb0M7cklIWE4mW3pPLl89eTlRSFIoJl5QNkE/UDE8Ni5SMktuUXx1LkYjJDBtY0BzaUZLbjs3Xy46dXMvd1FqN29xZCRjWSJMSWouIUkrI2ZDVX4wPWlQUm1wYSZya2xPQUNUTnJ8IU5xez9tS2olbkdueUx2b2QpUTFpKk9IMGt5''@;'; put 'put ''cyZwZlUkZXMjOjVHKX5xalBsOEU1Q3h7eG9uRmM5UHhSUXEiTUg1RjJ9cl8jY2w4UmsyKi5iWSsjU31TMy4pezVwbC49PHdZfD42dEVhW09aXTIwXixzMmYzMnxmL3d3djRvaT46dn1GIylqKTYjZV0oOl9IN1hRSH4sOjZXV3FWRGFPX3EjfWZ0KmsuQz1SOVVLfj5FWTpxOkxJdUFPemJddTYs''@;'; put 'put ''X3NGW3J7WGVhYSl1anw1JSwleHxla11qSz1FNTl2e09QViFLfHQ+KVtNSyteTnVFVWY/SUkyJE4rQTxCb09HU3AxZyFuN0xFWF1xRWNjaFhLRlt4WzdCaUgsLixjWCNUT2plJk5rW1NsTTwrLzlQbjNKe2lJOjxYcHdjVGhpTU0iRDJKLFFsNW0vQj09dClldj0/QC9dNVpuJDwhMl89XUgpO2Zg''@;'; put 'put ''NWM9OGd0aDQpcEcwWyw3Y0t1KXQpL01ARjpJJDF9eHIqd0AvRiJVNFdmLy87IjRWZVBDJSFPZUgyRH14NmplRGRwTn4qZkp6cE81eGVTYWxrUSk6bE5SR1lQRixCbXFpVyohLk46en5JbCpabl1bZXFQKExVLGU0Vkc6N3c8REdUNER3MEZUR1M0aV41cFUrUG5PNGlVIWNoKT8wbFpec1pYcV07''@;'; put 'put ''WSxXL3RKdF09UWtCVz4saGRtSVFaLiIyYEdAZVNNe1ZCKltmLzBYSGpgKH4va1A9O2BvOG9BYW1pRXswak53cW9RTE4lci96NHhyWXE3L059OG82W0tzcSVzYClTMXN5SzhgI35KUmFqKVtZWkZaOUJDKHJWZHJDI2AmZyo1SygpUGg7UldPVVZhJHhDVUtQJHc9RiFkJUkuYSEmYEkiOmE+IXA6''@;'; put 'put ''Xkw/bFo+bVc2KVY7c1I3diYseUNkfV80S2FZTGBFRX5SfTVXe0NgXUNuQnF1Rkc0TW08OFF1eyt4U2d0SkZDQmc6QmBNRG9KP0F2fmw6IVs+LHhlbnxmbWZtWWVwdEdGL3VCYkteJk8yIiJqWz5aXnQ3Iit9JkJ3MXtGWzw/I1ElO19hQzUxY1tqW0siangvYWFvSDBZYlN3fGFpQ3V5VHVKM0N1''@;'; put 'put ''eyg/fD9ZMi4/Zl9ufThDW19QcD9jbF9QQk42cUJ3dTIwJF04eyQoMG1Rcz54TWQxJk1kI0hRW1IvKkkhUSgzZkZJaHpJWkU8aCFFPSFSIkdXS2R9P0BibilPeVczUlhUdzY0LyhgUiZqVjA5JFMmZzswNkZdM1MpOEheZEAocXAkdyhWM3dPYXteNWYvMj1pMGl9Zks3ZT1gKDYpdm1KWFBvOlY8''@;'; put 'put ''bWJ5JUwmUSVJI1VbVnpPNjM8MDJrdEU1OG5IPWw/eixfMylQS2hxREBHanRIWnp4WF5ueXUlJEpmfFspO1g+OiMvanMmZC55dzFGRmxdRjRzNUNrUCtfIipnRSRJZmE8QGcyOFZsTDdWZ0pfXjo0bVBQSGlreFRdUHUmUSNNZll5Ky4pcDR2X343SjAvalZGK3pYMk5tUmsyOHd2KERQI1s7KlJo''@;'; put 'put ''KCNWUlIkR1tqX1s8PGw+QlpbLjIxVVo9bEomUnJyUWdaPntIPV9OYHYqSFJ0NVA3PjJCLjpfcXVuZH5nTFE9VGRnXkIxLFUxeGBxY2lZJGZJdXVVPG0mW3JAZSg5LEpSeXdVeT53QF5XYjkzPzh8SWZMV3hGQXh7ZjV9IntWZ2NrbnJ2Kyo3a3IrOWFHZnx+en4meyMoaThEOGoxbFFjYVh1QnRm''@;'; put 'put ''UkZSaGpaWFMsc2RZOFtJKV44Tlp7V183TlAzbHleSjFOY05zelNbTzY7JHhRIWxCRXNScmBWb2VIUUNtJE1bXlA0RWU8ZVc3d08uOVtzMnJxfUgpQFlDYUM+KUFyaUx4bCNvSCJUQmZSZ1lIOH1OVTVyfWJZKlBscDNVcWtjTHkxSX1DPGlSIzhwSE5tSE5PS2ZSWHMmZmohK2kwIm43JH48eSFu''@;'; put 'put ''cGFneEZ0TE5YOD1yQWRdaXMrcVl3bE1CYjE5SjY9Zm1gJjMsIUQwe0UzX2ckYU9dfEVqckNQVFBVbDtBNipjZH5kcWY0QEB7OVRiN2VbIzdYVEcpY0A8NmxIa002Lmk1WVBMV2JhO10oVWJ0XjZwZV4qJFB9dnUjOT4sRmw0XylMSmdtWTxFQG54PV5rd3krdlpIOjZGWHp7fl1TdG9iM0c2Oj9e''@;'; put 'put ''KHVjaExDfClvJjw9OFpJV2x2LlZSZ2U9YWEkV2ozWTRNW3h2Tlkib1VZc3MkcVRxN01hR0dEaCxuZDpCRT1Be3Q9PThudns5RCpiZmZAWG1SPSQjXUBpR18rSm5SKndwKUJMe1lHSl9ZSVgoS09aSzVqdkhoPERBSm4yVyY9WltIKS5sLjZHWTVtYW0pOns0MXRRLyZEbmVoe0tmTnZKSzhHYjBv''@;'; put 'put ''YkJgSFY3YD9UOGh+IiIiZXJ4JjNubCQsL0ptc21gaz58PmkpIVNde0Q2aVI+X3pvMF0oV0RNeClYP2ckRkgkb2RVe31gXjZXWypkREo9WS5XOlNgW0cydShDKVJIWGNFUTUxRTV7ZmVZLz4wJn5GSntfIXdxZSJbP2hPIUgmT2ZWXSxDKzo7JUEhTTZEaihpQUdZJn1SKHkzJTw4RmhCK3V1R3Bh''@;'; put 'put ''OXNqLHZvTzF8YXQ6WUo6NlZxWiozZUY2X3lIL3MqLzVye3ZGZzx0WEc2XXs1bFRDPk9SWFpUcTEsbWlCezEuZSxpS2F7KS9qMnZbXmFocWddPmpTOW8lWzA0Uj0hUyE4RG15PTZIdDhYZDZea340Z1B0fDBPKChGeDgiTD9paUR6VkM6MSg2eURvLnprM0Upc3wicVhmQkhpUTo4JnVOeUh0LzU1''@;'; put 'put ''MUJfPil1YDBLNnxMSF02Zy4jMiNHN1dSTjwyUUNoYyt2Klp7WktILzEkNF5jTStjbyN4JGZWJUlSamo6OSQyL3NDRFo0WkxgdHZAb01gLFldMCRvKU5weyt0O18ufnc8PmVQX3tpJD5tTzpEanB1VXIjcy5sbUlIT3I/RiJII1VOcXgrMy9OIitZPWUvKGJvQFQ8Q0RbamNfInZdQUdMRTV4QFNz''@;'; put 'put ''a15GfkNab2tVLHV9cXRLUHdeUEsmdGMqMHQpciZRL1p2alJERkczb3tOOX0kSTFbbCxKNmhbPTwzM3duSkJIMCRxWyR5RSVZN1dAYTQwS11VKkQyRTU3PmdZYz1AQXNSa0VMTDlyZXFyP21+PCFXOlJYZTolNVVAWj0uIV5AITYoISsscSxMNCxmXXdLUmtYSlZQI1cpdSFSfX0xY2R5ITBjJl9F''@;'; put 'put ''NDphWF8wVVpAaFo0PUNvczlgXnVQSndlO0AvZmxBWCVlJnJ4emFvYWdNWStXYEl0ayhAQ0l4dCxlb0hoZkx8R2kmX1g+KnZWPFVCRlpdWkNsemA6eUduRCZmRGYhRjZuazY1ZHJtXUhRaUQrOVtndS5IJSx9ZkZMUzM6YDwsbCZvY3FVO0smLFpMUGJvOkYxW21QX2BAOER+TXd5WGVjfSRROjJF''@;'; put 'put ''IThTOjoyTCZ0QD9bLENhYEs6Xzhwcnl3ZltLUGJzZ0R2VjV3bW1vXTcyNy9meUJbfkU6RndrU2ZEUEdDL1Btc3NObENnTmRmYyRdYDNpTGtzK2s/YztxT2ZCNShjejAuJD1+Ol1XU2A+MUouOiJoK0hqeH1yYkU3UUliJjI4clEoTCE3R0VdWnQpbSllWnYqVzVbRCsmbClzNj1vL3VsWjUiJFZo''@;'; put 'put ''LCtabURQaSpBQGpYL1F3I2tlQ1smZiJZbzc1c1BCUlBsZCpHU2NJMj1+XlFgSDZqRjRVTndrfGpfM2ViT0M5bEYoYD5mdE0xeCI1R2tjOiZZT3R7JH4pfig/K004bU5vczRmLDpfRUFkTEZ7anxSIzZuXkg0LiMjOiEpWGgwZEp5REwsPE1POiQ5WSo/TVNxfnBqYEhbY3o7eSZoVm9bIl5EMzRa''@;'; put 'put ''Zj1YbG8waSNMcV59UV5yTlg0OyQ9cVRZWV0sSFJqTl5EbTV+aElHbT9dbXokfi82a1JSQ3JKWk5HPXAqMFooX0B6VVI9TTdraXE6WkdNczNZPzoweGk/YVpwdD1PTjk0JG1HVmkiP0p6Km0rXzVQNGR7JiZFfDVgXmFaL0UyUHxwbU9wS1Z0ekUrYEokdXhqVEI8VDY4eWB7JCpTKkl3RiV7amR0''@;'; put 'put ''VVBdKyt2UzE5b3JDeX06WTN2dTBlKmJsUXt4NFVlSEJJUnE/YWE7b2gjUk9zLHRpR0NOPFkyJkN4OTQhaCxhTlBWSWI1RzEvbyk2PlZQeiVOYz9MOEJFYl50Okc7KCZELHpOZmk5LlQzanhsTD5mWU88LGZsJWZTMH41WVF6PWBLUWc3TjlKYHpfTG4hcD9DSk1iSXZtLlVIeXh3e351Wjt0O0Bn''@;'; put 'put ''ajA8InxNX3syei9CVlRhbFsxRGZpe21NfSxPLn5LL3IiUkRQPjFxRHZ8QmNRSm1hNz0waH5KRFBmblYzVXNnRi5RTX1SKTxMLjpKUlt0JUFAfiZ5JCt7JHI9TUcuIS5FUElUT1ZTS15ffHkwVSU2a0hSSls6YThKY3I+T1VoYmckVEhxeHFAaC4vKjs6RyVFO1taeT9bOSw7V1dQaEtHcXp1PmdK''@;'; put 'put ''cGtddHhaTlRyV1t+S1lOW3w/Yj1INWBZOl9xQVNDMUdNMEtUNVN4UiY6ZDliOTlnX3VlJV47RC5ILi5BYzp0VyFFYVUqOFRvYyk7NWdRR1JoTjkjaTQuTFssX15tLjNfQ2taLipXMl9hdTRYcjdjTyZmNUp6XjE6Sl0qP2B8bWwrLC5YMXppJFI7MVckRjddNkpge3ttZDduenJQczRlSzVke2VD''@;'; put 'put ''THl8SCN9SmteQmtbT3NnM1JebmEyIipjajFKaENxPT48bVRfT2BUdntESV1PdnRodE1dbDx9Vz9QSyUsQj1bV3hoKkBlW3dMRGhMVVdecE1qJnpePm9lMXkpNVpNO158bTlYQ2FAeDhuN1NoKkZuJmlmZnhmTmo+JjBGNy9waEcwa144ekg7XUAzS25zNz9CRFZbWVZfZDlldyJIRV0vc34kVE4p''@;'; put 'put ''ZShWOnE4bE14I3EmPFB+Ll9pMUY/aSo0JUhIbS5UfTJMI2pNRHpQYEtRP0lnZ1FLMFgzZXJ0R25UdktLcjJMaj5UU2t+QnIwTiR9VEhqQlEhXlIvOS4pRGFQbCNJem9bVW8zPkEyNUZ4azUmK0YjSXsoaGc/ST5MVmM1KCo3PkglS1ElX35aeypVU0lCMGRzQFZFMltlLFhPM1VnUVBCVDhNQXhw''@;'; put 'put ''OzteKilELyRvW1FsbUhwen56YTVHLCtWTyFdRW0zK1UjTkZuXzxNYVhFb31vQH5mfGNWJnd7O3pCKUkrWTNiRixINk9qMGJeNUBnYlo2K0hBUShTJDBJIU85Tl0rRkVEYjw+cEdbX0h0N3p3QnJ+NmNyV3luL2NIakFFI0UzRlZqe11mUys5K21wdD1gezdkKUYxI1l5W01QN3JFVDleay5HJU93''@;'; put 'put ''aXprYD9jdzBoV0pQQ3J1TTl6Yk58WmVQKDwpY10kMmZZbUtoPTZKSFhtYUUyRm1ORzU5emR6YnFJbiZGfXAub0I/Ln5yVWkpWmQ/MTZ0Z2dOSW5yKmM/clk0NntVJVJnYyYlcCMsNlBAfkJHJFNnX3JCIVFOJndVb21wPTU0TTNtQUZRPXtKNUNGe3BVMi8qRXx8d2xmcWhdPUdIZFtxWVZ+dFBf''@;'; put 'put ''WXdNLGI2MF1EOU9JKnV6Oyp8VSQ0bVMpRCslWGouZyxZfTRvO3Q1PHFOMy9jS3lUYndTMFY0SUVNN1IodSt4cjFyXypWPXBQTz5WWXRNLz01KSxeOTJgM2ppOj55by4kSWNtb0E0IzcyKDlpPiE9Xih2PHFFLzdiVXtdVFhfeF1XOFYvYnxqJl44elUsfF4xaSE9PlhqSEYjJG98P2FtSTtoIyhn''@;'; put 'put ''QGVJb1d7K3JqQFN4WCxAWTxBWzxDdCZuckt+ZyN1TCRle1c7QCVrJjwlfWpyaXcudSkqaEMqeHc/TH08RHFrTT1eQkAxPVFFdCN0NFVaZnR6PntBbHw4NVcqSE8lIWNgLFtzaz1WQVRvWz5qKV8pLz9rYT8/MGMrVFMsW2JvbW0jLmtfPT00JH1mKnpLKnRmRHEvJVZTdjFeS31DNSoqTX1RWndE''@;'; put 'put ''LFhhNClQWlc4U0NoQF58fV9DVVZCUWtiJXZxanpKcDhxdFVfaFBbZmwvR1BjSUxuZHVaeHBzVlVOMWN0NjwwZnYwVXFBUWFORWZ2dVEoMyR0aXdIaHBNSjtjPyJ3UkdiRHo/bkQ/e3BFVHd2QzsqYCROc3J8TGR5RzpsMFZ2W0kuc3AhalNEMWhKdzVwWHBneChsc3NicEk0bFRMdFpASXJ2SjEu''@;'; put 'put ''VEpHUSZDZm13bEZxKHRJSlpRV20uSyIpOT05UFc/ZEZbKmpRaT93NUklJD9IZHN0KyNzfUspVUY7aX09Y00rQmNOblQlNz9RdWxgNX5tIWAxUCReTEBONzchTiJhRWw+Z0ZEXz5QMmpMfSQ9cENiZjoyJGlSZ11GRyhFXWlhPl0wdGw0dk15T2ErYGhqY1RCa2FDPXxJfHRjYVhpWXlbUzBzIzI/''@;'; put 'put ''OkUjW2hmJjwsQmY+cG5kJV4+a1gheTxAOyo4KWdiX2RRSk4vQX1sW3xXbSJUPnBoJkJfPHNhLFJLTnU/YDduVis7Nys6NFg9MVgpTk0iZX5OQ003MmJ3X2wlLjdiQyJxVipsdyhjdF9HeVFsZkg1MEhVPH1XZjN3RitQWFciIms3QylCKV81NyYhLmorfkhTIUgwV1M5ZEJKJTcoMWh8fVt2Sj9r''@;'; put 'put ''eUwoeUhFJlJpPj4+PmVlbDglK0QoX2RUWFZNYmZERHFZOHZOKlM7UHAuc3RINXsyQDJwVlBbYj4sJShPfmpXSXZFQi80M2kjaSQiOGAwZ0dPXlhEeVhwKnJtakBtV3hqZj5nSWtzYEFrVEN9KnY2V1ViTGlGYnJ7KllTdk8mdDxgZj5rdl4hTiM3eDgmYXdBKmxeZHFDTFZXT3BlN2FDOTB1Ziou''@;'; put 'put ''aHAzLFt5eHVxcXcvRCpRamEqUm55a2RwIVhjcVRGZlVpZ3p3TWh8U1R7PGYyOz5IWFRIIkEqQGpZR0M4ODp0ODZRVyU3Wmc5WVlbRHlKN2IhWjFgPmdabUExYk1EYTQqJHtbTXdxbEA1Om96VDldMCgkYDFqV21NSypCOHwwQE9PUHZffX5xR3IuUS5MIyRWTUhPTGR2PHBCMVJ2NyFAWHoiMH1s''@;'; put 'put ''NXRrSztxUnZ6bVNkVFE1JSVRaz4zK1d6MFJ4dF1qPzYqe1VIcz0sKlhQR21JU05SSSswdjl5LDs/dVBee2NbenRkWUJ3Qj8wbGU9UU41fG53UWl5SS9NO1EjaFo9a2s2O3tQdFhCS2tQKHRLKUhJfDUjRTtvR04jMWNDfFRmdjtDd3Npd2xeJmw5Omc1ZyZXPSpzRDZHWztWTzs8YTEiRWF8ZFhi''@;'; put 'put ''LGdyNjdGISpzO1A+d0tVbERzYVQ8UGxnX0xaZmVWXWElUE9tdmNbWHQrS35JdiJEPVBOa2w1dltaa1koSCgle1A+azM+O0hkOCwmSWJRZF9hWk5QK2VnPU8kKEcrJCtDRCVLb1hmWilvUlErLHkqWkcsRjMvSjV6KEdrQX5gaEc+XlVONWhCLlYmXXZEQXRFamFuWGJ5Q0E9OEtUWWtgZH5gNVVr''@;'; put 'put ''N0tobTFRdzVvX1VvOmkiOFZqS2hCKl58VmE5XWM+IUJPaUlmM3h8WVoiRmkkT3l2OHZUTyRqMXx3fDohVihWW3IlX2E/NHgrOGJ+aT1xbStWJWReJCRbMCVQU3ZONmsjL000Uyg4TnZvKlY0fShhaWVONXhtRFBSRV8jKyFTUlF2VUNjO3oxQjV5S2owcS9yMGFhSV1LeWdJdDBbMXArVmpXK1hM''@;'; put 'put ''XnYsMlRDTjgxfnA6Q09wOislKl9JdTphSjk0YSZ7amFRK3woRnojR2g4WEhvbSV4RHxTZnJzQy56a1E7dFQyVkB+XjVdJVFxNDhRcF0iditmM3VMaFp9NktqRTNTeFgxZHlgRGlpL1lOaWwkcGE+dHJZJj5ZNDN0Kk0qalpvNTxacklrezIpUUd9bHB8cEJwdk1RNyR+KHtgI1lSYlNiRTpAflF2''@;'; put 'put ''cGBWVkpXe1tSRXQ1SWtPYiwsO2JrPkclYkM2cGF+YDkobkFtU1lTYEZ2bTI+TzB6Z1ouPEpbcmJoTHhCbzpZNEEsPF1JYzM7PjBWOU5YVDcqVlBrfl1jKT8hdFlZZ2JvLDdSXWxvbThEcllwRjBuUk8vOVNJX1JkcytVM3ZdYzR2KSh6bik1a2ldXz5xNVJaJn53PzY+VUp9aGsqRjA4e3lkJU5I''@;'; put 'put ''ZDd0MF9ta1pQXyg8W28me3dWcmZ5KmcpN0BWfDxbcHUvKS5gJixxYUk8VHgwXSkrVGNVPi4wTXgrW31VWFFscXkvRGQseT1CYV16Rjlqe0tiMllCXUl2XTN6TFg7TnpURmNrfF9lUXM5ZEpEMy9qV1FfJXVPOiZaV21JeHAvMFJfV2FRbyFCW2RUai5FVmY2fV4/ITBbTzwqQjdROjd2aTh7Smd2''@;'; put 'put ''fDAhdkFhRyFzTT98bnBOSHI1KyhiS0x0fGNbU2JLP3BBWCUkVDxyOEFILnM3P04hQChsJElWRVZhKyNaVEV9JiQmUCtibVQ9Izw8IzRLYiROL1Y+Mj1lJF5mJFBkemcuZGZPbig3a0cmYiU+fG1nT3hfNFFbdVEybF5KTiIpblNiZHg/ZyZ+OWFGS296Sk9mXVcsPyVKKSE6cS84ZD9rSnZ7S1kz''@;'; put 'put ''bHVjISJrM3tKQ3xXKXJ3eUtwLFp2aHptPUA9RH1GRnJAbWVEbkJWQyI4aHhEMF58U30+fXVHRWljcW9hOj5vSVIqRipvPEdORHBTZnxIdjF3Q2MuPF01QitDakRbMT08LGwyX0F+TUBKa2EvZHN5RztoUDEzZFs/JVMjY2BieG1SM3Z3bmVtTXNbYzV7V0dSIW5mUSRsOz5HZVk7cyF7K09mNTpw''@;'; put 'put ''LEEjOCZMI3UxLylzJnI8NFVTd3VUekVUfF8oYENSWiR+U1VYci89UkRRYWFGNEFVO0dofC4wL0JbXXU4K2YmZi44Sko2fVNeZGpTKkhTNj44aUZXaVZpWUpFQWVZIlJ+Qyo5bSpAOmJlSXpKY0RLRV5rV2tBYXJZYnlFc3BRQ3lIN3AyP3R4ajYvPyYiWkZdeGFxb0FpLFo1YWMyVEhZcU4xW0hj''@;'; put 'put ''bCpwLCZ7RGkkSCNIMDFjJFJdOyhlZixyLGpzYj81amxqTSZAXz1fKFhMKFh1aHBLdUREWnFHaHFJbW5qPj57OzwxTnxgNHFyP1A+SEV0MyYkIXhVY2NbOi9HOSgkIVUpb3xZVE0pfGUlTEF7WWxXODYqblR6MmV2TChPTVAqPlN8S09tR1duaGcrMWF7R3FlT1ImZFpTKShga3t6IV0jYSMpQltn''@;'; put 'put ''MTM6YHZMQzw9LzFlW1BoZnVxamJ1JC4hKGZAaE5DKFFGTVZ8SWo/Nl4jQyVOfUU6MC93M2BvfC8+XmFmdGN+dUF8YiZjR1MkL1pne3E7bHVYKUJZaHsqVCphW2xxPm9lIUIwI2V5MUJjbjkwUjxlJnJHZjZmRDUkU2pheGdtJl19TUlXaHFoPURjLH1YezwqPi84SzA6aTguZVB0dDt4X0M0QiMi''@;'; put 'put ''eSFUY3F5aX1rQDIqcXA2L2hVZmk9SWM7Ny9hbUJZSlhLNiYsPWVYXnI0RS9rXWR5TkEjPGV6UnRQWCVVcmlDJSs5bUAiX3d4WkFSTXdJVjZHTVcmeUEiXShKRlFTQip5bn0wUixKWH5tZjAlXXh7MHkicz9NYnI6Xk5RSDZ7YXZPZD0+cEw8bHV1RCsqNEtFN3NxaXU3QyIxVyt1SCZAQnR1SDpA''@;'; put 'put ''TCV1ZztKPCUwbX52dDMiamB5dD02JXptbys6OWdYLytJLktIVHxuYWpafnk7UUxrPyErdSpOMmB4MHFCNzlCV1RAYlh5RCw3eStnJChqcThVTzR3KTxyWEkuL1ovbXRvJEx6PS9RNTJ0RmR7U1hrS0BLdXFufV1GSiU3b1ooOkVRO1B7I0RYQyNvYSwpIjZ3XXAuXXtVMUVNLERqLGwiW2l6NE9+''@;'; put 'put ''WyF1XnJ3MnFtWGppdiErOWcpZnZWRHRNWkMvfGx1fkhnI3Z1PGQqMGF6RXJRVmVzWEM2R2RDZTM0W14uRWYyPzh9diouWnZdJXU6eG1LS3w2JSRaY1NvNTI+LntndSRsQFNnSmYsS3htYC9TJU4kQ3AodiM1JlM9Y3QxJFhLJTVVZSopdiFNQ2Zbdz9kRF8pXSJGSm9gPUdBeGUrYyQySDk9ejxW''@;'; put 'put ''RjJBQGpYcD5Sa1NBYzJbTC5ESlVgUDJudmowMi9BdTZWNzUlM1Zlb2B5UGZ6W2p7a35XPiJMRDs1NE91b0VBKXRQfnRLaDZDXShdcTBpZFBrRGY4NTRLU15AQ31NKyl2Nmk3XlNOJGBwZFMrcWNUSCEqKT1bdGI3ZXk4MkBIKV0iVl5ER25FJUB1YHJSOGJwYT1xYCRlUzw0OVlQej1hJG54KGtq''@;'; put 'put ''fk02N154ZCQ+W3Qua19jKnxbdHkrckZ3dmRHRjBKUnhkWEJwJV0hbytBTUtFVDIwYEZ3SU0sJWpYKjY0aml0RFpiZXIpc1F6JGwrM3VnU35PJU1iMEh7N1VyTFpUP0Zja1lIfjdiYyRMYlcqIkpRfUZGOFcvLHd9YnZRNUgyUXhrRGZoYzhnKnZPZUQ2fWY4N1dROTF3TzYhZHI+IzpkTH03NH43''@;'; put 'put ''czRXaS5YVjUkWXh0YWFhS0tHXnBUL25kS3xoaDZeZThNTFJobzluOzxfUVhLKFplbih+V0QmQWgwSktZbHFUXywmc1tLWWE3Mi88flR6T0FCcyljSS5PS1MvWy53Pi95eFFlfXAuZSVUL0ZKWCxvQmsyTVF2akZsLixxVmV0MSM3cCQ0a2R1a3hvcWFQSzBTeHBrcHdQOk1pezd1JGVKbzc7SF9T''@;'; put 'put ''QjMhPlVRRjcmaCF2ekVVUC9Lc0heO3diZW5MSU1rN3VMIkFjOT9QOU9mRzI8IkZJMmRNazFAWHg+W0whb2NER3c6czdCe0JYfip+Ty9bWSZXeGloRXZETlBJIWFNWGIqZlh7YW0wdyl5NzkseHB0akRKfkRdITNGWUZZSzdPKiZWS2lpbzAhY209RDxgbWs6OVssWl81JixzOWgqNWVUSlMibj51''@;'; put 'put ''T15BcTA1UTA1c0FLVj8sJmZGLlZmUkpXQi5bTGVuUyVBcS4pcmt0OHAjIyhnSFIvUVpVeEZSVT5ZQW5KMjIufFMiJDk3cG8mVGx7VnooXz1lVTZNNUByXm19UXNCMG07W3JnOXByODw5Xj5vcixnV3tQcEJmKF5mMF05aDhXXWZaKjkyK0c0P0lydWkyWzNRO2lKYio3QnxDejllcFVTK0lTbk5x''@;'; put 'put ''QElyOigwK3VdTUM5SjUsbW4/UF4xUl85KFN9TGxxSHB7QUdXZFgrfHQhajpzZzc6MyFuNmtZMF41aT5XI25mV2gvPmEyOXh8UHojUFErfFVxc0dRJm59MytjK0xKRFcjMltZW0Z1PEFoY2ovKTcvInI6d11xVz5+ZjBddUM5SzdvPz1pW0ooUUo3bUp3QjhTWSxxfVNaeH1IK3VBSzorSiRaPiFv''@;'; put 'put ''UjJyVVZqJG5RZ1tUSytPb3lpXWk+Oi49WCtialdTe0l9RlcmV1E0ZFQ9c1VNJFBlaHxXJkVRZ1M6N2JLIUVOKjZheGVtdnZqU0pjeDU2VjdMaGs6JFg5N0E1OXp6MFRRRktPM0VwKEtNKk1nejZJQ257cykpY1VOKXgkKj9pQHVTb3J8JmFKOHZ2ZGM8LEFfQ19hTWxVOmd6UTx8ImE5ZzIlKHJo''@;'; put 'put ''I1VPWGozI1BOZV18bn4kdkg3PF1fcTJgOTA4P29HWjdtYVM9emw0Zz8oclVnZCs7YiQrbEpxUzx3RSlpeDAveCEuLEMpanFgX3tLYVQ2PGt2eFZRVlN2U29Ke2xCaC92ZVJCcEV1KUZhLCtUL2BJLmlhYlI3ZXZxTWs2SGs9eShyQCZZW31SL0wzUlguOUxxcShydUBoQj9WPT9BV3whfWpqd20r''@;'; put 'put ''IzdbbWBSb118LDQxMkoxeG5AXStLMW1bPkdwSS9kRHdWeHhTYi5BTV4/e247ZGZbfF9XbWttVlJvXT5TfTouRTkqN3dIV0lxJHRfLH4zQkA1bGxvIXtgS080TENjZVl1TDw7OGMhUmUsezhVXU8kKGM3WV1yRkwrVCtyPkFSdH5+WkFPP19pSSlAaWZvcGF4MUc2V2pKX1dvQHxAVWptaWtXK1dh''@;'; put 'put ''Im1yL0lNSiJVNnxCVEZ0dzZVIzc4YWo1JHY0Pl5tMnFednQ6NCN6MnIwXl5KKHtneV9GIz1IMEJfIjllc2UzIVdpYmBSREV8X11ZMFAhXjQ+Ql9yfnBFPWpeSHRfezBEZD9tMWJ8L01iWE53OHZIXWpZKDBQIVEoQHE7IzBnLkRmKU94QD9dYk5UVSJOSDY4b2EuXklfY3JpNXZYPEdeSDgwJmRI''@;'; put 'put ''V1NhekM5eCliUC4yTEN0IUVnailTRzZmTXlUMCJzdlFobUFNPl43K2k6SjdCdz8pc1cyVmRNX0NvJXhDTT8wYHB2bkhoaEouNFtbZ0Q/TnIwSkxEPHB2WnBHV0h8WXF1ekE2WFt2THUxImZ4KiY9O35mOk4mOClyfC5HYDIqalcuYGl4JVEqXmBddUxZdU08aXlYTVghQj57KkEze2JbYD4lRms7''@;'; put 'put ''Zlt0MlMjK04/Tix1PWE1aGJHJmwpd0xmb0ImVCVEJTtsbTBhTVtyfjxOLEU7TGpHNkZHcXwkSU09ZHJOUjROQTooXntKITFGX341JmBKL2JvPyJScigvXTNDfD17K1Y0TnY6WXBAImUyP1RuVEU6XXx8VWchN3R3SzNqSnZ5akUsJWp2ZSpTLEcwSS8sbVJeaEFmK2RbQCt2W1V2VVoyPCUoSWc1''@;'; put 'put ''K141RnZmc2Nua3Z9bnRHe2JVKm96ZXR+c1RMdC5DM3lePGw7W1oqcz1xPXE9cSxjXj1kVDR4MV9KS1BreDssa0gqZyhqN2NbPVJGM0c1LHNgMWloaXdSel8sTVNbXyYzfnd0T05yOGl7TmJlVmBwKWE3MTNySFgqYlZ1IWh+e3gvXyNFNVBSUTMzIkdVYzsvaTlBJj5nfV1CfTtyP10vIn58Pkha''@;'; put 'put ''ZGE1OFNWPlF4alJJQ05Afj9KLDtoXkczY35WL2NARi8pIXtTPDhzUi9oeSxQTDd8R3F0V0YlZTBkPDNiXjdVTWMqc0U6QD9vS34lNHAhMztsNTtROF85KTVedFBCW3hlNHl5OTxOb2JHYi58IThqaiRwM1RyU2VmNEZGcl8jenlIRlUyQyNbWFM9YCVLd1hJO0BMVigkX1hhW3k8Z3RVcWhoTylv''@;'; put 'put ''PyhJU0pSe1RtUSg0dH5POiZAfmJINWA6fU8zRCFFT21ARmk4KyxRSDY1fiFHNlkwTW84eixsRl0wamN6OS40Q1s6e3d7L1clRlJAYGVPJWVWI25TaUk7XypINjQ2OlRUez1yRjleJjxwOTZkOzliRENnSjYiU0BdeSlfPU9YIyM2TDQ8R2okZm5lNDBBIyVqVDVRTyFpRipmNVFQQCFZITx7JnVX''@;'; put 'put ''dEdvbyg/QGFJaHhxZm5HeW9gSUZENExARSImTn5OMVVSPyxJZj0jPXJCJmMyX2h7bSVDKyxEbihDX1U1OU16b3FLRU12RyFiW11WOXVSTng6Mk00TGYjWyMoKEAmMDZUWmtBVlheQ2ZNaHh1R0NqIjg1NDQxNnYjKlQjblVbYmxqISV6alNgTGFQXyJadk9WcyVRYmNoOSY7P10/QlYsUjJ+eEZ6''@;'; put 'put ''ZWM2WVBPb2Z7MGdmRFZ8bk5WZkVmW3olRk9iZWc+MUVKP2Y+fUMxRzsuVGhZLEh9UHR8T2ZhOWkifWlXeC9MVi54QF9MUX4/Lk5UODcucXo1M1EzTi5pRG4+NnJFUmEpSERsPixFQnZePTMrSl4lPVZNfXM7SjJqc3huIW4sOUhxKiRJJDFEbUVYTUVFdXVMWnh6NCR2aEBOR3lybVJ9Ij83VWcy''@;'; put 'put ''OFUjKU9JT1goR0h2TUk7bnUwXzFIRzppakhDXmh4UUtYUE9QaVkwPl8vRjlmRXxlPEJOZlhJbDNbWH09YnNGM3N0ci9ZQjomaDAmMTE2YyVZVTR9VltdYzYjTVJ5Oz0uaWlrMXhVSXNFX3AuRCxwYHA8MyRDMHJDZ25WYn0majRmLzNPNndbYHJbI3IsTDhUO0wmUng0S3FbcllfOXE8InIzN0FH''@;'; put 'put ''LDkxK0tBaFM/YEQ0Q3BOaSs9eGEibGwxOFRSLEBka199ViF9OGBqL35VUjYsdDNoMmpnPzFkLHA9TzBAd0ZbZHl3V3F6OFdibDpyTEF1LDlpKH07cS91OF9CdUs5SHRfK09XZ1YpRnExfmplSkd+V1QjX35TOEJ3bDE0OXtoKG4+ditKOHhCcVJjUz5SbGw0IU4rQDRaRmRaVH1dJDNYPWk4XkBL''@;'; put 'put ''fHguZylNJElgfXh7M0dkfWszWTM6YHNaPU8vIjM2Sn5WdEdYbnZNWFZ0YyEzSURPRF5LaXVGISV1Y2U3NHRkQHhnUStgK0kuNzw/bDRGZVs7bFdKKjM0RVJiZ3xSTm52UnY8Yz1PKX13S2RAIThfLCZzW1pCfEAsXnxqRU1+VixIZF5rRWs5Mj9oRng6ZCsue25LdkNrUWZYImZrW2dQeUlpX0lk''@;'; put 'put ''SixUZiF4WjM4V2BtemBFX0kzcyxpUmlvaTtFKDorSXMoYFk8OSsoNjJ+SS5mW348b0E2fkRtRW1aOD1yK1ZTZXc0dVN6STZwSytYVigudTU3b2hbPT9ScnssQWtNens5LyEmVT9eRVtLbGU1KSU3eyV5OmlQbnpiZkx0aHZ9JlZzW2hoPGE1W00qaSV4Q1JLXTJAL2o8QWNRXT88fWxoK0JYTDNa''@;'; put 'put ''Smg5dDJGLDleJVVKbklvdTZpTkJxbD5jPTlvOkowQmNrYXU0TGF1U19pJWJrR1p5dS5sV3xrPik+JnIvRlMpMTJwL144ck1JMGxSYSlifE5uIzdHcmY5YVJ8WSJTNThAOmlmMzZ4SFdrc0khIW5ZO0M1NEM3cFZ2Qz5dUm1LO35vTX1pe0UuOnNnOENlXk0iSkszOW9CMyo3IUgrbWhgRm8oLHdk''@;'; put 'put ''UHA2IkFQRl9hXTIzOEBoZ2pERDNHQSoueiRHeVR5b2lZNU1fYl5aPSkmS3xlX2csRT1eZDFUIXVDeDVxTWdpK089eWAmMk8oIm1eV1NWQjJTZkJIWGM1Ij5FM0EuVTIhbTN0RDxDLjJ2RnY6alV5dkIsYXxLKyplR1Q5Ll5TWTkmfXBHXnBgKToyV347Mn4ySns1PmBTWH1Xfjg2Lkcvb3Q6dWxy''@;'; put 'put ''S0hnR31McnpgeHQ2XW0hNnBoa3lsV1RXPT5sWVdZTXNNIWokMjReflA0ekIuUnhYLyJ+JUIsdG1CdEs5IXZ0QSFIdk8/RkNbVSRIVCowdHxGUyldUG4jdlhwcStRJkttK3k6R2RCPTZYWXFRU2JWY1srJl1xNGR0Ml9ZUGNPcThbRD01fFkzckVLP2lUdnNlXyhqZTRQR2BgUVt9YiM0Sl95PFpw''@;'; put 'put ''fWFZeF5LUWxvP31yUC9oc31pK0AobDk1Z2txPChvfmlMdFNPbyk5JjUiPFcoajg8WUgkZ2JrejQzVzlbUz1hYyJLOVt9cTkuRn1dYFZ6cnxHSX1falgqQCEqTH04SVdmYF55LyhXSj9aa2t4bUk9aSNIL3FQQ0k9UiYzTztEPW80XV0mJDRWMVRfdSVyOSRXXjBSe0Y7RTBOT0dfSDZQXXRmRElO''@;'; put 'put ''SUowYFl4dGRwWE5IPTZeJjw1PVZ9XXpHMEJfZEhhPmMlLnVSWG50ZVVwXiU9WCs0Zj58cFFIbiV9cV5YTGpkQjYzIjopUVUzLDEmPEthXXxwMWxbRnBORltBYzA8KU9uOmRlX2tEWE53PnFqcWJzVCJOT2JGO0hqVWdEbFdPQFczIT1Kc0coODdwVnBec0UhdiVzUi8xJC8zVn0kKWkxcHduUlZZ''@;'; put 'put ''dHNZNGNXL1tKOFhXLERFJlREXUk3czkoIkl9OSRtcGFUL110SD1kfUZ9SU5OL3tmbWI7Y14lI105aWJjT14jVj8/RGM1ZnZAUC8hbFJgRFF8fjxzJX5JTk4vZjg6eGspVF5Se29RVDM2PCNvOEdTaW9xVFNTV1c+Tm0xO2VrfUY5ZGxrIURyTzFqX1khdmN0blZpP1N0VGs4dlR9UFk/JFQrY2xN''@;'; put 'put ''WG5xPmJDTmpjVlhzTiFfUmdaVi9wOE1wb0FxV2ssZzlMSmYvISE2fXZYREN7aCQkODJTdmdON3xxYzJaOlpbVF8qYjBGUFFveV8qdShOODdZU3ExeHNVfCx8XkNgMEZiW0V1KkVxcjdgSy9CNDNedG8uNj0pUX5CJHAuOk5fcFdzPCIwIXssUiFJYGZzOCxQOG8sSTtSIS52OFpBc1NNZlRkcDF+''@;'; put 'put ''aXxFfnNlI31RXUlSIWd1WlM4L0UiOSxKQ0NUZSgpSWZUIWwiM3l8Q3ldajM1PTR6U0hLQztIeEtwSyNfUkJEIkZ0SzwvMnJ+LHFPZW98QiU9aUkwUV1jUnQ+JFdDQiNbT30pUTJ1fSoycH40Mj5kJUA/bXN7M3E2QitZWnZNLjZdYExobDc+TDwiZ1laXSp0O2A0aWxzMnBNeEJFeGljL2xLJEpX''@;'; put 'put ''YG9wQmBKK19ZdX56SnQuMT5jOjM5dXYsb1NZdTtMVGdKPCgxRW1eZSIxLk5BQjRKWGFVRUlPYTVDN3xRUDNtLE9kZ0tycT9ISUNdfCxacFIzWT08VCRqcmZVbSEsLE0wLHhYRmNHL0J8blYxe0ZtaV8kRF1DZm1WLEdDIz1sQmUiZVRAdFpbdDJ0T2tzNCZGUjo0NGc5PW52Z0tueDpfcDlnd25s''@;'; put 'put ''ciplIixrTltacEMrakRIXnVURDx0TEVtfllObTpUOzl2NjhYLHxUW1A+Uko3cltGRlpTQnwsLlUvRkQ5JUNxdj59TVRrVWd0LExEP19RLnM/TigxJS5tWDkwNkJKRDU0KlMxVWB7QXNqPUI0cDl7Qjx9d0FCNHZCUFtfP1pGIkloKVhvKDM9UWF8IXk+LmFbcTA+N1UjN0x+b3IvbmZoQEB2ZjRU''@;'; put 'put ''U248QFghdmkyXiZRdlBHSmp4NDR2UD1UPnU0RVJCLHJ6PlYsKzwuOl8sJiVdKmNCTiQzeVAmX1VEKVtkTiQzKE1fND1Pd1Q1TzB9cVZlO1pIMi9GTWNyL3JSI0YzeCw+aVk2UEw8MWZGVm9hNmprblZJVSh8JXNENGomfVFWZTlBbHd9USgwVSMpQz1sLDh5ZCtjcFNCY05JOFJBUH5EdDF3cm5S''@;'; put 'put ''aXtCY0JzXUtBNHxyeVV5P2dAJUI5Z20sPS5ab0IxWjFBKmZ+My8oS0NvQkJSRyN2PkJIN1kvQH5WKDV0Qi5kOjQpfjFVOk8uPGwpcTFtI1pIOk1sbihdJT8mcEtQKHU/VGFuYktabyxdakA2TTdLX0g3cHh7d35qeVJ1JDVrcz5fLylXSFMyZHx4Vz9iVUljaW97VVlbYXteSlh2QlMzMExKQWx3''@;'; put 'put ''TVRSRjdmTUN5UGErKX10fiRESSpaflY4XktAS0BKfCVaZD1wOksyNHxiLzE0NnxjJGRTRSsxdjdVZ3BVQj9LSyYicDg5b0dBY2RXMz84YmNwa2NQKmA6USljdTVedmpRRkMlWkxPcS5Zfl1IRztzfmcwO2VCWmBsNGx5ckcqWk57TCp7Wj57dGVkMXIwPEtWNFg0YDYrcXUiV2tiJXV0IjwmYy9y''@;'; put 'put ''WzpCJjxOLCEwZFM0WyxacEhiSVVZbEZBWzU+N19gckF4NVUjXytwL0MjMSFxP3AvYSVMSTc3JF9CPnxhbl02Pkt8LmliZERgeD5zQSFwMlExNmQ8O1VvVGkrYWt2On1ENHtQdDp3IS9xZGw1akBPZ2ZiJWdCWDs4QVJ8LkR1WHVWRSIyKEA4ZUczOFZQfENWKmhUdXdERzFpWDZ5MCFfLjg3aVYu''@;'; put 'put ''Nl0oRnM9LEBLaXV6XyNTI1N+Y1IsT2swOkpRNCpjIVdiJFU5RiU9ZipuQDghRSZLe2VSfTNjW35uLnQwPmxAUSZJJEpBKlB7P2VuVnNEVVNMJEs+QjRYZCU2dCUzeERtZmg0QWRhe3s6XW1za2hVLCxCSEgqczUoWzVUTyRPVChrJGEvKVJ7cXU2ayVBOCloSyVrYm5+OUwySVJMPCtxIysrLkI4''@;'; put 'put ''QnJdX05RanM8WFhOZHM9KSZlIlZSc2pwQltmLiZ6VGhrKzgkcjpeUS9tOHhgZH5RVmVtWkc8L0tCWmRpVU80d3FRIlIrWC9uPlcrTWl7RVV1MG8+KzF5RD8vNX5RKj5+RkVNJlF9TWkrVixMPVtuJiRNZCpbLlpaTUJDfnkjTERbbkVjeiptfEY/Iy5aJnwiMzN9ZmBgXW5qT11FbW1pYS5nLzBf''@;'; put 'put ''YyVuXUt6YDxzNmhoXTkwezU/QSRELzAmUStQQ3x5I24sMUM0TCJHJkM4dUpeczwwVzlmRFBpU1VoS3ltV1JTKGA2I1QpfS8hP1J5TixEVl5uKyQvVEZfWXMjJXo0PmcxO0lbWml+WWF2Y3RML0MqLkM4W28oRE04RDxGYWNabilGW2Mkd2R3T2N+WnY0PzJzd087ZllwSUEpLDQ4JFlxSHMjSktN''@;'; put 'put ''ejF9SSRrIWs+Y2hadjE8aWt3fmhqTlBCamY+Y19NW3ZUTkQpX1tTRnY4RDNra0xFZFRaYEREMjMqYyRAJSFqVnVOP1FnKTMjalZ+TSUsW1tecmxXKD18K2VkWlBEe0dZVEw6Zi5QOSZldXU8aHw/TWdbTkd5c1laNVJsV3A+ZnZKRE5IVXo5Rk9+UlFdIWlPbGB1UHFsPFtqPUNCWz5HT0xuPiZi''@;'; put 'put ''KFd1PnU+eWBAOG0paUNDR0I2X2xmNEFba3p4bVJdWV1pcVJrdVE1a3dLL1A1dHtmcEBvaXkxXXdtPk9GPGgoU3c4N3dTd3tbQG4xOmN4Y0o7ISVnYzVoKF9YKHV2JSk4YXR+K15gJiFDKm9pUHs/QHgyS1lfcVpPdV54YWVAJGw+ZU0mQncoKyN0KXgrQU0ibk5ZPV59Z2ZYLC5rOzg3IlUjNHpP''@;'; put 'put ''JEUhWjcmU2NhPD1XRnxRWCE9aXg+X3ddP0o/eXRxOHU9KiRWZnhITFAxcUFDYHFkUXdoeTJGfltoeTkuX0NmfENjJkM0PTxNQT90ezdXTWRsSjl7K0lyfTtSRil2OGp2V044cHdPd3UraE5IP0NjMV1uUDVeTmFIfDRwe106Q2NHNHI5ImM8ZHd5IkxKOEY0aGhKZ1VzQShYakolSl0wL0h3OEVM''@;'; put 'put ''YEk9Z3RwaT5qT1J0UXY6Sn1gPUh5aXBOcC9Kc3BHeUsiWCFlNDouXTA2KikwN3N0Q0ZtYTsrQjp0K0daQjtXN2t7ZStUIXp1SlVzaTE1QzV3bk9wb2luPV4zVVYhWFtseSFmN34mWiZPaSg7dmIvIj91R2pKPCZKY1FvaFZIYlprMVdMfGVtYEdOaWwxfXZoUVpgcHBTKGtPOnR0MVorcWRSI2Mx''@;'; put 'put ''TnhqQHVtJHsxcyMiQ2EjdGY0b2x2L1VwKltnSmFxcEZVKXt8Q1c+TmAybzomI18+KVkifEpbeGNrYWFhQWMyMX1USF17SHEwQn4sLzpuVkkwNStuR1JBWUJzIyVXP0k2flk2I0JYXTwyOEFjV1BBVXxRTl1HM3hTOXt8WTYjcyt6cyh8dFJHR19Heyk3bV1QayFiNF4scSNvbEszSXMpemA8K3x6''@;'; put 'put ''YGc7NC5CfTZXfH1XfE8yfkt+RkI1PFh5VzVGXnZZXWZ9N31RLGMrUz55MHdEKVBXYDV9fSpwZkFuMn17UkFKKHBRKCJtYFdVVkFoW2l8MW8vXlM6PnssSzkkJUVqIW9NVWEhVClSPm97Tj4+Z2heZWtYfS4waTBPI3hlMF1zPEM0JC5zO158RyZVOzxHal43OHEzYHUze3QuW09ITlFkIypdQ24+''@;'; put 'put ''KG9mOXUzQHt7dXp2PCVZQndmbHk9XTZdYT1ZMFBHPCZge2pibzNPektjXTBwei5kMCRweFBHIVlMfDZVR1lHb0N6SnF8LmFwUUskPCtKWW8xaEZZI34jfSpnbjhBWiV+VUdGY3N4b2p9c01rRyYuZXYuKnVLIjllNCtUNT9eOEh+JWBKOiRmeFI9N09GW31ZMGZGNCNIPlVQPVFPKClJM2R7UyFe''@;'; put 'put ''QlQhfUNmQ019U2EsOXQ5cHskQFkpeHopcFMpe3lIaVR4QyE+VCxAVyQ+W1E9Q1kuQEd3eiw9PFl1VDFBPTF2XXVQOlFqYmxuOmxLfktxXkk0ZD53JDNtS28sOClqWUR+cCNfUih2Umx7NklUXl5VRCJrS31RZlRzbDI3Un5BXih1W1pqXnEjKiZ6N1IhfUtfLmUzT0ZNOVR3bDkjQXdEcntpT3x0''@;'; put 'put ''IiYsclpIXSJ4REdiQjwkb0o6fkhyfTJdSzJ4NmhWYjRub3VVfiohLFt1QzQ7OUxCX2kjZD1TZmZIXyY+VzxSaWlzTFtLRWdwJFB0ZTVSeiNIMkY3bitFfU9dcXNPZkY6SjQ8eyYxdzomI3YzW3FrJXghLCwjMHtfY3tWb00sQU85czFEeChsZXJdKzN9LF55d29WY29zO3FWYyFaOkZ2bGIuMFcu''@;'; put 'put ''aUVeKEtEZ09oP3dkLkZmT2cyJTI0djo1RytaOUYie3wsc2I+VUVtYUQ/cXNnZ3h3X3ouZSswMHRnS2ZbcntXODo2fFFbdG1RXUtySkt9WD88a1kjczM9e1pJXThkem5nUH5LWHhuQCs6IWwkZWx3K3hFMnFARlt3PCpYdHVUTjQlM3guKmNkSjpXU3k8YjNzSXFjVEhyK3JTcU9YRF92c0lydVJw''@;'; put 'put ''e1Z8ZTY9PjQ3dSU1JDdgQy9LNmBUTj5Qdl8oJkhzLj9AbHF2PTUkKzRCJCtsJEx+KHxFOGIkOzpOYyore0ImS3pKVU80MllQV2VRMXw8L2AoKGZbazpDK0swbHlfVk0xQklrZ0hZQWxJWzplcmV9cCt5e2x+QChObktGe0ZVTDBuWyNFYmVHJUZVLEA+LGs3N1BOTkgqPWljeXRrNTY1fl8jOSgh''@;'; put 'put ''aG9IIigwTVVidVpdVmlyTyxsWWJlM1ZFcyZdZkJZOkZNfmdFeFVzXTF4dkJCS3BFcEYrRnJqeEIuLlpzXX5zInEpRzpFPDNzNSQhdTAvZT82TTtGV1M1U3M+MF8jVTdUOFMsYXszVyxjZTwoWEwzM3YwVnMvVzhFVWYvSTJZZmo3WSMoeixYYmFfY05yOHtYITRoREdXYV1AWVA4JWF9bWUhZmor''@;'; put 'put ''bExnTWJIN3JHaUxDO1AwRXtofDIxQkB1YndiWUFYTl5PImE/N1J9fXFpTzZKQkxEMVdNVnBaNkZWcTFCOnRbY0ZSKkQ5UEZCckl+VF1BM0lGUDhrfEx8KktZeXRWcWwvfVcodG80THgzKFcqT3YqRHxCNkNkP249cUNoViRrc0xvUilhcSl7UjxFPCl2elFROUJoWHNMW0p1Rzd2KHMjPFNxYzhg''@;'; put 'put ''cS5YQWhuK2ZmcXRXRiFXMHVONVBybzQ3Qz92IlRsYSQ6eCgrTWVLbW0iZSo8KmNrM0NQeWciTTA/PE1bO0sqdi5lO2clZ0JwayVdLE90US4kZlpPQFF+TF9GY0UjWjZxMipbYDx+LH5GUXF+MjAwWT1tPnFJOV5ZYjZATFVKbTRPVC5xLHUuLHouMz5TOzg3X1U7dUo4cGhbRU0pI14/I3F0UyZg''@;'; put 'put ''L0c0cSFmSDFqKVZEViNmRlQscXZOYy59XTE2UnhRUTp2MSovNW0wPmUzTEpVaFcqU2UrUE45JnZNSGBgUD05Q14/WzZ4Tj17cE5eYFpsSFFEaEViMFhuW096WWojPjsjWD8jQDEyIksjdT19VWdge09LYFMqTSh7VyZ2XWckcE42QDBIRV9OY09uSkVeSWh1bXBwP1VLYGpCUyhbQEwiRUFuZUhJ''@;'; put 'put ''ezptV35YfCl1PVpMaWh6UUs3cFssQHRkL0UvUyVSO34lOyE5JUhwflRNOSMzL09xZXc8eHZgPyUzNkoseGxpOTZONS9tZjhgViVKP0BrOlppVy5kTVRVc2dmNG9ANXwrPEBQQ3llU3ZmZFkvakt5IlRtXVt0eSsveHFCLjJ3T0o7TzcreStQUDV4U0E1QCpsJGEqIUt5UjpRWiZAdXlRb04xQDpA''@;'; put 'put ''MmdRWjs4eURPTXo9XkZ1Vno0ZUFiUEs9O3oqLCR8L3s6TCtxb2ssODtkfShHcztmXlsrUnwvdzwpMmtEMzosPFVVSz1VZ3FqXjtRXVpUUmg6QHNtTWwvLEl9Sk94QS9WM1VROHl3PmF1V0pjbV0pazU4RUdFSDlJeUQ5UHtjPCp3QGN8Xl94PnlgNjIxaH55cFRRY3ouZGV2c3gwSlFmQTRnKUNn''@;'; put 'put ''eShLXTJfaGg4LzZmcGFbMF04Onk1UTZjbkh0UDohJUhbTmJaY1FLLDVgJkJMbDluWkI3c2B1WzQxNW1JZUpOOHgpZDFHQ0E3SlthMG04TGQmIkVNMVBrPTBzRiMreGBKQWR5Kkw9PztTMzEvNnJ5Mj1kL3JiPlRQVHg+Onx3WXoxeWY8QU03RnFHO3N3XWwzZSNPe3tMQC9qLylhYGxqZCwiIXV3''@;'; put 'put ''QkR8UTpgVU4rXzJvQiokOitQaSpraHhEYE5nLy5Oc3Nve0YrJW1HNG1uRWN0RX4/KnVtO2FoRy5LNylQT2BWY3hITVl4aHQ0JkgmPS84V29CNzJTQWRTemlYMHohY3k2VVVTSGdeMiRMUXo6QyNaa0NzT19acF9tT1BEQH0xKGs7ZngzfmI7bjlwNSx7V0VqVVc+dDx1ZSNwezthTS8xMl1mKlth''@;'; put 'put ''ZiFXMCQ5IldGSjhOVi9PbGZBSCxjfTd1dU5bbiZ9OWMrKH5iI11qYzJHVGt6dEMoXmB6LEd2OjBLLjR2OmpvZz9sXll1UD5pJTIrYVBpekVTdjE6Zn1vY1MwXilkb2p6YDheXmVYajdpSS5YVGJzb3YxdFB2ajZdYF9EfG4kbSx8ZjtmQixhND9Hb2h7UX4sPSVtZD9pVD9PcSYpUDovSWpBbiNk''@;'; put 'put ''cn5KSj01VHFEQCV7MXM1Vn1FMThkcH4pTF9xMXtTMS54Ljt0eE02YE1pRnFqVzg8aExWUi5CPmlJd2g7V1cqYmo0MXI3fUNCWjN2Pis/WEkiU2IzJUcoeFhfKTtYbzJmdEExcm1CQndyQ303N2Y9ayhaI1A7Ukg1Xl8xZE4wO1RNNls3LndeXykkakhjZjZ1dysiNEZsfFJaZFlNJUgqKnh2YEpG''@;'; put 'put ''TkFZRk5CKjF3WmRuUHR4OitwTF5KaCldSiQ8O1QvQnZTLzo+RD8rQDZifVdYKD00REgzTXloSD5dYlg2W0NFVFF1SSZJWjxaMVppVHw7cDs5YGh7RkhDKkw+RUddZjU8K0I3WT80V15JdU5UNmVlMndVanB4Skc6JTx3VmlrUStSfHFAdiRZZk8rMGpSWnp8YU0pXnRqJXxgPV9bYEdKaTtxVXIo''@;'; put 'put ''cDI4YnJxTHUseFA1Ojl9ZDRoNXRBZkdDWFY3e2RlY3w8O3UhM2ZiU0VUVDFBfnJ4V3J9eGYxVyF+R1tgZ1tvUGVfL2l6NEhNfXcwVUBGdTBqfSldR1ghPyFxdC9WYis5ekgkM0A8N0NFamdGZWtVKFQ1PSkhVj9eZyVpck9EeUlheDd2N2lxW2V0V2dhNCFORDErcD9rbyYyW2NUIV89SzQ0M1tn''@;'; put 'put ''Q1BgLCV1Xi9YaSYpYytCfXF2dldyeG5paTBwaGBeVHFJK1BvNVh9fTlVSjBDJUVSSDM5KWMpYyljKWNqUCVIPncvdTgleF5zPitQUl1obm5FbD4kc3V0TnBuOzppcG9MUkxSTFI1bkxSQmlhP1dpWD9jdzh7TEYmLiYjeCxENmpIaGNZNUJpPTsvMnhuVFo3W2JObXF1VW1jWmQuS2YlPWZRaj43''@;'; put 'put ''a0JGSW97PldYV0UyNCpyKD82U24wc3Z1QzFHSCQ0d347b2BzX2U+Zi5MOURkKVNEcT9NKyhbYFtXdTJrdzg4fCw0PUldLzJgSkYoVVgvRldoRSIobmA9VEsrLnlKN09jN0tBTz1bS2wuWStEJHZAOkh4YDJwUDQ2XlhLOGRYOV1oLFA4aFlYfXQ0R3IzSzp3NTdGemVjP18mSzo+NVBrUGpWQlAy''@;'; put 'put ''YVA/NzgpIyhLYj1CRkdeUkZzczZlXStXNUBCZDFAQnxIVy9nKj1XdVY2RV1JKTc6Sl9bPWE0NntnOy9kIVZnWUcoZG03ZDY6Zj0rI2x8L3xnQjdYKDtOTEVRLEZPWEk7ZDYsInwucUpONTFRKFdUOTQ8bkJkfVBfWzA0Z3lyQCQ0TyVAMU8vc1YsVGBGZlNvM0MzOXNMcWpWN24lYHJINFdEPnRC''@;'; put 'put ''InBBTDY1T0h1Pi5rMEtjfCFsL15dVjV2OkRuekkxY1F9JmUyYHRlYGA4KVprJTtCYVprKT1XVTNjQiNbJnRFMmc0QlBMRSV8QTQ4LD14Vi9XaUxWOVgwNCEvOHlEeWRTKkF4KjNkVH5fbCZVYm8uJkdbWU5BSU9VMGREI3UvW0o7TDU3UV5ialhtZTx8QmBqJFF5WT55YjR5TkspLnlAcXV0R3U0''@;'; put 'put ''UEpdRVJaaiN1Tk1WJjJhZU85amJqQTU4M0QsT0o7MTQrPFkkUzU3XmElZkxCb3RddktvM0w6Q0spRSFMdi4oIVs9UFhCbHRBIXVwZEo/IWZGQUY7ZEdRfiRoNV9hdjF9SiNgK1deUyMqOjZpNjErN0R1bXxGZ2daZS9fQkZ3QDJFUDVFVHRYXywoUCpSMUc1Z0UuS3tdQyxwKUdUXlFsdXQzW2du''@;'; put 'put ''azJvNGcsfl96Okp5ZWtpWEdAWGtQRj1RYER1ZkJSQjJSVFBtNytrbG80YnRhOSFGR1NzWExoJE9JMEsuXnJTK2FhM2skS0YsNlFYUz8wNHs/fCJ7M3t7OFMjOWV0T35WdGM3Q15PY0ZMOSpDUDgqIXFtQCFRUnI0aUxucEMwTHBSMW8kc101OXJDOGxVZSlJMFY8WVNjbkIsYUM2aDQiKyhyX2BA''@;'; put 'put ''bT5bWTNeWys9e1FhQEhUMGZfLD1+d3JiSlJ+dFNob2pWeFJeSHdqTlduaj1TVzUpVzx6ZWw4I2dVSl1sPFZsKUdzMTw6ajtVOGZlKnEzNmNlPSQkU2Y5WmdoMnt5UWJtbHFhezoyNiRTeGxiZDtJUUIwYCEpQ0xyN3hmNTUvQ3dPXXA9I3A0XlVaSH4lQm8uUCNdPzxBYG1GW0RiQlQyaUNoVkIz''@;'; put 'put ''NylZclAyPFMuUkNdfH4hbDRTbjRLPDBVc3RAcTJqWSMrXVBnKUlaZHpeWjVVLmNsVDJQMkJjMz1IeCIiP2xoO1kxZTZEfSJZdW97UDY4dTA7d3YxflZqYXRFR092OVR8MFRDVkpTaEMhTlBfKnowR0ttX3ojJSldKmVBJEV1SVJJO0AyM0Q8Ok9FRVhbdEV1Rlh0XS5uak5jYWZERGxKO3UjK2tB''@;'; put 'put ''XSkrQCtINUFiTipNfjBXSzYlR15QeF1hQDtke0Q6JTxiYSV2QWBvSm5QWCs9d2UxZEYoR1goZ2lVcz5KYDREJVBGNyh6azBOKFZ4ajNyNDJmSjdVd1J+dnske0ssSGJhMV47UlVQMU5OaColej1iLzJlInNiT19uekAuWChdMSRnUmNiLyMsX0EhYD9HZksvSFE9fTo9R000SGlsW0I7WkRee3A0''@;'; put 'put ''PG5seHtPSFAmT0YpaTN2dT0uYGImTzQ/YypIYiRIZSpWNTlLcmd0cVpxQGNGLCo5ITNYPkRLS1J7VG5YUz5yZkQsWmZQY2VbOmcuUElndjdXTSJPYSxkUzs5KUNZcSshL21ZWHVSazREeDo7InRITmNeeiZpdFR+N21SR1ljUiNJTklQQUxeSDJ4YmkwVWtCZFM8cWNGP1tQYDdeMCZqOHY8JjQ9''@;'; put 'put ''cV9WKSU3I2J6YUJeLiZPe3tXM3NCO2Rxa3tXVktFKGFGJklQQ1EsWSw/Z3xkI2gyaGZ3WkQlOFIuXjtjYE0/e15tWVIrWTJEczI6NSpaTH0wcENzVWBKUCZfUXYyfXh8eHx4fHhIaDQ3QjlaMT9qVnx5SVlKLjVdaWtIOjA6MDowWD9YUnN8OW9lSnZVe3Y5elVVfmlCY3lMT2UvZDtKOFQ9L15x''@;'; put 'put ''SjcyX0QhMGZdP3UyRU5INUdhfXUlI1d1fCk7dCp1VUIiRXBkL2QlQlB5RnJqSHBIeTBtSVd0aUBzIkl1MTpIcFd0dW84Z0I0LjpYeXtZTXAxQHR7M25NMmlNVlNySmMva1BeNTlDS3BFO2ZhcDM5Zzo5bGVLdEc4VSJybCsvI18zaDpQO0dVS0VdJXtVY3AkTE41XzhXI3FvNDxtMzZIPy85VWh5''@;'; put 'put ''O0Z3MVh6ZGlAMjBHdkJycHptc0cxfEUhSnA0eFZlZiNxOTR9dCJxV2BzTnR7NE4jS2FuemRhajFoI3FTMVFNayoiRSJYbyRxKU0sOlswfjRbT3RFa3RzXWpJN2c4eTo3YGpjb3RoYjAsSFJBT3p0T1pkYylzbnNIT3E0XTR7L1V4MnspfTVVc2wyNDp9TyVVP09KSDpsMTlDQ3A3MmVIMjRoZEI3''@;'; put 'put ''IWArdWxMOTQoPldyLEhlMGYwKSVvMFdyNDBXckJQTy9HSzErSFJ9XU5Ve19ENCUyem5oY21WYlt3RG9CYEkqZXNJbnZTbjJzWXQiTjB7WFt4ZGlTaHNifGNfXnFnZSNXZXRgfDxxVElLIVU1JFtST1Q/YjFVVSlaRWgkJEgoXypoW3h4MC4uWGVeOnZEPnRLU15HJkVMOyxbL2lVU0ZSdX5yZF83''@;'; put 'put ''ODxWJjNqe2JEUWw6WiRBXXwodGBGUlklNURNMDQ/Zy9oU1kmemwlLiZIKjtGV2AxMTJ2TktxRXFAOmBfKXlASGpOMiUzVyNnKzRxXik7TCIlamlga15FPV1lUyFsUXQoNFVnRzdCL0BiXi45ZkU+Z3QlLD47SStab2VKTWZsWC9gNyVPb3pwQ0VBak09RzZRNFoucSZUZCQ/W2FZMnZvXzdvLyw3''@;'; put 'put ''QndFK1VVVz5kNHRlMjs2U3YrW08/KV58MXJUZD50UnxpZVdzNjIoRktZJCt7VGltRCQ0W3J7TDZ0SFAmQiR7SyhzZyVQejhSPURlWFVLWixNX2dha0pfQkI4Rkk9aUdYe1RrZldgPDNqQFkkeWI4Nl1AbzBLZW98TTtKUm07bj9NXmRlKi5SKnlpMlZCV24kbnM3Mk1tW09BeXtaQ2JDKEc7ezZL''@;'; put 'put ''YSZaemtkTlgkKFNzbH5iXmA+P1tyL2pYVHEmR1E/VitqdWRneUJJUkMzcER3cixlNlcxUntndThZLHx8UCJ9MnEwbnZfSVV4YipTXnE4Wz50Unxrb0A8NVttZTt9S0FyXkozWGhvXX1KT0VUL34pd3JbODEuSXJ5aDsoSmg7Ok18TkxeRXFvViFHKDd0SW95ZmxZQDwqNyxWfn1xaUNpX0NQUX15''@;'; put 'put ''N2FhZ2VRWT1WMHcyd0RjJUdYM2k7MDAobGtEOFh5UDBfZnFaa3UlcypMd3dSaHxSTkR8SH1FbTtLQDs+STpPVDhKJG1zRl9AIyh6MV1pIVc9Z3U8cypIYnRzcVV+XWkocGlzPUh6L0cvamVmay4rdSQ/V1ZXUXY/IjRIJFdkNEAxdUkrcXEpWUA/MXVhODtQLDEsITJ5NC5XQ10sb2cyeVlvQGgz''@;'; put 'put ''S1N6YzcoS3hSdmN8R1B2e2o0MDVfdHhzQDF1TCpPVmlNNXw3NGUqYXlGRXZ8NzREelArLkApc0kwZVMrSTtrUUxDTkBEa3hwK1BMPFAiQmt4QiEyeXZ6fio+P35MO0kzK1pkNEBoJiokdSskWXFVIy8oS0UxZyFKYnMwOzBLMCtHTnJGbEw3OWtRKy8qP2sodCtJUFJTSX5xJGtweDZjUysuWURw''@;'; put 'put ''OFBqRXduaFE0QC80TVBhNTdLUUpjbypnK0lWZjxEcHEka3srK2RQK2FDemckentqKFQhdSRxKVlKYTpiOyopZDBIPmpoUitjc3EzaCsxflY+WC8pZCs+I05Ee1JZRUJ0by9iU2EyaFQidFNPQ1RuKVM7LmNnZDUqPXFaKyohRiZvb2RCYSUjdTBQNTg7Kmt5Q3gxZ2ZXRixxR01WbVElPzF1KCpV''@;'; put 'put ''Vm1RY2BhWGFKMUtVMU4lZFBaZnhTaElaZiZQUUwlZ2M/ZXk5RUQpdFB4UiYvZWwvWzF1USI2cWxsWnhkRzhLNj80N2NQN01vRWt6SGpgPyZ9ZS8xSXxxbGxYLE9EJUU+PzQ3fE9iWiVsSUlbYVdWUUw9OGJTSGo5WCV9ZS9GPzNLZ0pffDc0WzQyS1lKIj8xdTVYY3k1RUF+ZS9jeiZLWUpAPzF1''@;'; put 'put ''LjoyS1lKaWBhWEdqIkM2UHduZlduJX4iOEtZSmZgYVgyak8rY0M9fWUvV0p5IXEhU0lQcEF6MWczPnFjVmZKRTIlbWFtaklqdVhVUUp2ZVZGVClAPWFJalN1KHJdTmt4XWhoSVZgVTwieTdfUStqdjVfNllreD9hWkk/P24hWE9wNWE5eFJzIWFlYTwhXzRPTm1gb1pJWWB2OzEvdHEqbFp4IXEq''@;'; put 'put ''bGVhZVZAU15CTFJJam81diV5ISVjaitIans/LyRIaiFYRWZQKz5ZTjV5ISRxezNOYy9OOis5XWY1ITRpeTNhPWs9dlpmbWp1SnhpQVp2P1IoSVA4ekRtW1s3VWMhVUdzNEgkN2UjamFxcW1Zd2RHPjBDZ3khVUdgTlhvQWY7YDpEO2J8bFQqXipvbWF7WSRuLGN4X19fPGswWkNUP3wkUSteKm9t''@;'; put 'put ''YWFSIUs0am0qdXZhZlY2USl9IUFxbWF7ZSx1InUweiFnaVUodlJ5SGB3ckw5fXwqV0suJkgiPkQ4UDNYUDBIanVYaCNseC9pL2VVLEZKam9pczNvYzdLbSEvZyZ8T05tZ3grQCp9TSshSUN4JlAwWDVJYTxvcTR6W19qTjRpcHVQK0R2fDJPcUl0bj8xXl9mQzMlTi8kWHRAMzFeaiR2cTJtOSEj''@;'; put 'put ''ei9pN0lnVnNIKzs8bzAqNV99JH5aVkFhKi5AbHNXYnNnPHUsSVNmVW5HWEVuMk9reHQ2LmN2Z2wqQnFTPnJmd3cwLDx9cW9TeDVCN1Q7LDNtWyY7RVAoNVcqT20+Xn1QWV5wbG9SPS9gNChYb2xLMV5kJDp+L3xibmBRWjpMVS86RVZRRlssUjJ5VDxsNVlBRih8UUt4RCFgbzomZUJiKWEpc1cp''@;'; put 'put ''NjdraTVZInwrOj9FfElPRlNMNjxabVlVUHw+ZiYwI29CMnh4RjJGKjU8ZF9IImR+M1NMPFQvQ0p9P08zRGdZVVsmM1RGKzRfRylhSlZ8KUk5cDhAMm9CJjphY19INC5xcUE2fnlNekIqazZMO0g3aE1FaXViNDAqTFZ7OT92KU9rWk9jOFtHYnRDR3R7V3dEZUVjdThgYl4/JCRgUyFUKTZ2UGMm''@;'; put 'put ''IT8/Y24/IT44ciwlajtDZUtTeT1FQylBJUc8M2RfLmhbd1kyPGFDNmJNYS80S09dXit1YzJfXy9HWzA+MEFzLjI0aW56WV0mZCE/KislamlgdDg7RC5CLyl2Km4hdzhGZEhtKF0hKHFZKE5CNHRqV0RsdjJJOmgrQyNMZ2tSb0FeT15qVXgvalQqVi4kezVnYlc+L1B2IyZBMnNfcUk0U2t8Lkh8''@;'; put 'put ''dUlxJU1kMHtDM153UGlUPlk2MTdhMylsO217LjhvJShgVz88QWB+JnB0bHkoc1lfXSVSTitvRk8lPTYsIU0sVjxVK3kxRXpOKX04Z1VtYE90MzRscnErZHNDO3E+RGZbWTxIdUhGbiVyeHAwSUk7QE9LMSpgbENKQmlXb0YybCZNOm9YIWI4bmU0MT8zQzF7QUhkIWhlbiNsKmZSVERWZmt0L2A1''@;'; put 'put ''dno6fFI/eUtPZ2BxU3F1VV5yYnspdyJmKlhgVyloPlckLD9xcls9Z3xVIWo+PzA/KHZedXU1W3pnQjJ6eXc7eHBRcjUmMzNzTGhieChSaT5WRWZMOEdTQjJ1eC9VPlZoRXBOOlo/XyhdLnJyZl97Wl5XOnNDIlpCRnU4SmB9JnQ1ZHFfa2NtKnVHeDNxeXZScjpRNnJEaSVQem9XJF8hX0k9d3w9''@;'; put 'put ''QXFfQlBbXjF3NkouTmtWO0NbJjtoOEI+U1syb0FWXnwqMS4xdEU/Z3suSDJ7fXlsVkpLK1NHQnExPEkvJT82c1VSbDsyLntaQl1PSy8mfG8pITdVaWRfYDR6XjlsP0taLiFONjExfjMoaHxuQ0pJajFvPWpoW2NLUCNpe2lLaFAyb19CR1MkWCQ+bzBAT1tNcXpNZEtOSWRMNlVhRD5VYWJvVHlr''@;'; put 'put ''JDpaIVN7P0cxSz13bVJFZ21wXSsvUG5idyMuM2FwME56U0s0IUAjUlJxT0VLWl03LldMQUs2Zm9mbHZyciVddlJ1O09yfHJ3MjdvMilhaTUxPUxQcUFQMS4uTkUyY3J3eEVje1ZfO108MWJ7MFB2Y1l2Wl1Xbnp4TzJYXUMlXXJSVUJZI2ZGQCo0SjthU3dAYyo6PE12WnpaRHpFTWNYYC9EQCZ8''@;'; put 'put ''dCN7a01haH1SVGFlVk5BMVI4b2YqXTsmL14qdU5SIVg5SDB7WWxDTU0qUypvWE1lRi86IVN2XiFddWExbVJVVnpyY1FhZzt2NGNdRSxNSmtzVzxRc35pYSIwfHJsMl51JV8xPGYsNiQzPTZoMSZBcmVSezVpTTtzQTclUloyMCUmJV5fbHZgZCE6KU1VZStxJl1YcGUzZy5hcH0hbmZaLCNkUjo/''@;'; put 'put ''WFZJMCwmWk0zaU1NfkBLQWg0bi8pYzhtLCVqQCNVUDA9IXM1eiVQaTsjXSVqPyFILyJ0UVRyN01pVmdjXikoRj0uWEZZbmgvREN8az1rbD8vJVBWJnNtPyFUYmx8ITlseVprdUkkWC5pLkVAenlOUm1rVkZSMEhXKT1CNmZSXl0xaFI6UkU/UDEoXV1gM21uL2J2N1JSemxFbyNgayQ7MFloVWJX''@;'; put 'put ''fiVESStENnBOUzoxcEhafWlrKThRXyFgbk96T3kweUZBNCJXRj9qNC8/RzZrJEIyai4vcDNjN0tPYXd0aDNZMHApKS5ELEx+Ky4sOmRYT3d2JUUsMzAyOCM1PWhaUSNELm8hVFhgWX5RSFUpP3NedUVeL2olWTExQShgfSF5RmNaXl1nJT09e0VkZF9XaGxba2hOejlAYnE6OUpRSyU5Z2VIKyQr''@;'; put 'put ''SSQkWTJAVndbRV0kcHpiR3pLfDg9fiZyXml7LHYqTkFhUjNAOX45cjg+NmRVenNHS21yJUtCZV5fdD5fRmpNd0B5VGYuKyV4Q1ooOnJWdCFyeiZFWlswZUlabTpWPHhgMF1aX3lqc1RfV2w/cVhiRX0uc3s8ZkFJO3ZlLHd+eTYzN093US9EXl9aODd2UT1NOTs1SnxZQCsqTj5RSWZfWk0vNFUr''@;'; put 'put ''SHYvRkEmQk8/NVZldnNgfmZNKS4vZCNDLDklQ1k0bHZ+Z1tGOSRkMnQ/Oi49ekJZUDskUC9LXWVHa0NVMyQ5Y0YsTSVDZHByJk1AZiJ3fVQoc11NcUJIY3hITVksc2hZU25LPHo6cyQ1cixAOTJ2LkViezQ6OVNEcCZ1THVrPihpIWlodykyK05YVixhfmFyenpoXTJaTXhAO1U+P1hadDA3K3ds''@;'; put 'put ''OFBzWzpDY3omfVckckF7IVgqMyhfSHdDY2VET0V7WTQpTmVQXllVY1tlX0xabmpER0FjI3BML2FvRyY9dlNGdnJBW0Q7MihqZSxRfm19Vjx0VjdtWiloTF5aMFtya0F4RnhSbj87TlN9UzFXbHQ/YGU3U2BWPHhFKDRsSGBYZ0x7RWdZZmRvTDkyTmkqZG1Pak5XWmx4U15rTlJdJVk/IVlyezFb''@;'; put 'put ''U15Cc05XKnZLflNnVFpAfHEhZFVkITwsMS4uVC5OYT8vMnA7eDxGemNvKzhOP2M/emVjUiMqVThEQmlAT08wLl4+cktqcXcjXTBPQFF+blYobiF2LEd6ZUQ2MnB3L3U5bUFvZ2xCL2QuLzVZZWcjLD99OWImcF0+K2VpW0QmNXR7OlU+U2wiNExvOTdza3opV1QmekRDTUt2dHh2OWVJclFdRWRk''@;'; put 'put ''V2k1YV1JOERjT30sSCk6NjthdFAyeX0vNk96dWYwPGI8OFosM2ImJGBJMjdrMmheaD5QZX04XnUkcTU7LltFdCx7VCQ5Sz9ocUJuT2oiV29mYEMlZ3sjUmVtc21eXSwjZVpzZ2U1XWh9PWlrMHNYPnR1PnFdPmZaOWM5KCZTLEFlRn4zYW9nS3AxPX4rViQqV2IyOXpGYVY4P11UOjAkRSNHd0RA''@;'; put 'put ''cEk3OHREO0BpP3AuTXI1QzZPenx6NSE2OHBhXS4hV1k3aiM4eX12Zkw4RGMwSDcze1B1VDJRWUhDUDcmeW1nVmBJSjBbN2w5LCRhQn5eQXFCJmF6fSNRMzdvMi5kVTwoKEohPWZeNHt7WzshQntkQjRXZEI0V0QvRGQ2VXF6a1FaRTdvVEdvTGwpN05PZG5gJWd9NWwlcyRIOSg9WXVqWX55dEZm''@;'; put 'put ''ZT5nWzokODJ6ZUwqcF50cG4rJSY7Qy9gbi8pZFRFQ0BlM0NlVz4pW1NZeVlONXVbJVIlOCQuZUdeW2V5S10mRzlxO1cuP1dAbFYlInQ3X3w8NWlvKj58fGxhVUozNGZ8WWREQ31ZQ0VicjBONHxyPEp1STFOYV9gJnBnRWpGQGNnYiokW040VHU1cUJTQElLbW4+PDJ8V2JxQlNrPFt2eVE+Qkx1''@;'; put 'put ''RSwlNmh6M1R3NC98T0k7X0IvQjN1SXgqNFZgRGo/U1c1eCM8fiFIYkgrTntIY28ofHdEJHtXOGZ7QiJfVWZuV3RSPS4pKVRWNTZSQnAhfjNzW2FtKGA2a10uM0ovbyo7cl54fFIzcXtBPjE3T2hvOUI7NGhANlRlLjhSe1lAUy5wd0IuQWtBU3F1L0ZWWERmQDNoOWIuam9OT3t7e14yIjBzeU53''@;'; put 'put ''Omo0alhwckYwQU14Nyk8JE06ZVpzbTgzXVRiR050e3d6LHdCVTooaUQzNTFHQ2QiZGJYbjx9Z35rOEYubV1iXyIkcVs4Mj9Aak1tdjZ4bkNCbl1QcThUXjhQcyxWNXVvb098MX4lPTBkZX5qJU1lPytjX3JvVyw0c3dic0Zxc11gVH1GS1AuITtNOSkhUGd6RClDRUg9dGV8bDJBc1hfQjssNjtl''@;'; put 'put ''NDklO0QoWF5KXWJrV3p4NTg5TDV6ayIzNiFBfmo8Z0swVDE5Qio0Ri5bNH5hTG03SW1seixuYk1SKFA6NGAhXThwfD1ea3RFe045bDJCVTFlIS5lST1qV3g/WzxpNE9AJEc0NjB5Y1lRfS5YbmMhYmp+R148N3xGIWVZOyxJKUhaXig0N0RBczpvSjkqb0VkWilOM31GZmtEckd9InMyLyRgZWJn''@;'; put 'put ''cWRgMn48PS5iVDptS2BUMi9KczJkQX5gRVIqY0JEb0tDa0tPSVlkPDtBbD8vSl1mOUlGOk8vbTpASDQ/cTpSbWAmaHRZclh6OTBVMnM1LEt+QEVEW0BMc3AlMVRfQSxXRCtgMVlOYTorfiU3Rj1EVzY6NUBIQntXL3ptWiR3MW8kXjVAdGEwdnJ8LiNxNkdQaTM2eHxJZyMzfkAySFpoNC4pckVR''@;'; put 'put ''Ing0PmI+LkdeTUNhaSZudEAhaCpBX01zaDJdbkpyZWBCV1JVP097cEB9KVNlJSYyIilQZXdIVGJ6NmVfKXc3T0Jla3o4KlclPGwwUzJPWjZrV0lBVmVnVz1yZzQvWHxYYmtJTEI8ejpHZXs8T0B4e24mVld6fnI2QnIvTkI4Z2lgeTVoOkA5TC9XYmFIVFVPcyR1NSl1bGBRO0gjfENuS0ssTmtj''@;'; put 'put ''bD1PPy5xOHorRyYjZz1HRyJ1emtWQi9sYDdoOjtVcHE1MXg8LHFIUitGVkpDN2wmbX1RRmVSd35KQVphbHVgcE09LyZqODJCWVglPS51bVg+VFElKzUlLDF3NTZTPHZseXVSdHt5Wi5NVGdGTCZjWngvci8jPVciWS43XW96ZlNXcCVHSSQ0OEpdOUk4aFlFTWs/Jk1GV318QyhvW3dsODo5Zzl3''@;'; put 'put ''YlIzMXdxbiYmfW1SQjhpdFEoZyEyJHZEWVt5ZFRoJiQuR0VBJTE9WFZPMWtsMWk7Uks8WEY3WCN9OHcxWzdFTUIrTmQlLD5yJUksMU09L2A2NzBWb29fcDM2VSE6Z0BkfCwyX2pVOXZ1JFlQWGVrRj8+fVdyUD5ZVSIjYU93XmVdYl0xL1N8R11lYGE5byxfXXFkOUY3Tzc4c3dyLkBJOywsenk2''@;'; put 'put ''dGZOTi9YfWZ7dmchcyRATmtRa0J6YHApZTQ6PkdvYC9mKmt+MGkzcmgkWE1zeUpmfXgjd0Q1bUpYWi4ock07L2RGTiNvNXVQO01pKEZaaT0oX3lJd20kS1c2LkRJeTppfTt5YHAoT0I4JiJTKyl3PS8qcU8uRSY5fEVlIUZUcj8ueW0/dTM7VDhvXjZCdzMyal95eGsmRSl3QEZVYG9eU2U6M3s6''@;'; put 'put ''K3J3eUV2UiUpb09lNXwvfnpsQ01+VyJdKz0sU1soWEYkaC9XeixbelZqbl1XUillc3pSZ101dVN8b1J0an55ekFoYU1aJSsjZE5OL1h3d0NzOlhQUTIjMDdTVVlQa1J6XTdgJn5dWm91PFRqLEArWCkkKU85X0tLZElCZVU+Wk96ZXJBRT9xXnExVC5MSC5Jfj8hNzt0K2E4bWJMYWcuSUVvZHUy''@;'; put 'put ''SmA+TzpnTUFBU3FHS3diUSsiL3RtQHJNX1AmcUNsKmUleFRlV09jcXpiZG8iMHNzPiQ5KjdgfURqQ2I1IVg0Nm10aDQzSVtmZWBBXUsqbylsNCFzKUVaakcsdyVTUjloIWY4S0daZHtaZjI9WClvMlRPQmdrYCtIMlUmMz5XaWNxemczeVVBUSgxKXUxJjkvZWlXfig+cm8oVnt1fWhLVCsiXXBx''@;'; put 'put ''Vy9UeCVbUHtYbXoveUlxVjptN3ZWMEV+MUVyTkNUbHRWaU5yP3g0WGpHSzhdZUBRcGJ4SWRSTlRCOjM6ZThoZ2x1NXIkIS5hVy53cnk2MHFfZSp3YDt7KEU4ITh5SCZ5cWRlfTFrP2QodzpxUF1zM1t1MzozNnpGLn1IT0Y6YFY9Mix2fFZzaCF2VC9lfUZWT2xfTnAwbDp2SGJFdjhPN0J+WTBT''@;'; put 'put ''TVVpVGk7ISk2YXNfeCo3MipmfX40d1sjbmUmbFZpdVJxciU+Z3Z+cjVHSCNoKWR6S3liV1thMj5iMjhOKDRrRyJUVj1sLDgyXip3UW5RPmt5Q305MSk3QTYxJEpzIyYyPHhYbyg+XkdFYmd5MTtkJEtjNj0ubDgheDw/IXhoU3B0YkI3RCUjU1haW1lzVVVwMEtKejY/ZG47aV46cjNyY1hlNDtF''@;'; put 'put ''QS81cU8sfDp+Wmt2fnVMSjVAazA3Zi8pWjNfeks2eVhfN35PJXpRYUJrUERBQSxoSEhCdDtDXkpjYzg0R3VyQyFdfXVSIkNBUSY3ZFhqKmdUUm56bDZrRW5SUHZ1VylBdihKdHlOdih+OXNjemR9WE1sMWRNVDE0Mmh2KWhNaGwlY0RjekgpUkRFcnU+a0xSLiFpPktpSEwkS31xU1VuL2wufVRJ''@;'; put 'put ''aT5PJXlFRGl0JHw3W0hdUzN3UHl1MFJERHYqU29jd0Z3PEMzKHx5Yl5XY3VXZiMvdFtXeClRPmRoYDMqSiwuVGVBeUpXIn4vUjlEVFZuX0J9VDdWNn1ybDU/ez92O3Y9TEAzXkQjRlRjU3RKOnUycX50WlFYKilXI0VpRTZxYTx7c2VXdGNvVW5QSHlMfW5deG5PUUl4Wk1wOVVtciwybCVSYmgk''@;'; put 'put ''K0FlXlZMajFTKCs3Yiw/MUlPcDY2SFUzYCZyS2N3OHE1S14zVnJ4KFpZOClHOkk2OyY+XkRUeT92XUB6XTlFS0xvJUxxX3xSWENGcGF9dzJ9RHhPNDxJLjJgZHhlUmBIc3IvYHRXZyQrPUA3ayNkSSYkUUdLWFdXOm8jNGtRaSZyXnRiSFV+KUhWfHVnVCwzQHEzXTRZeDh6LkBdMVBCJkNKQz5+''@;'; put 'put ''QTZQb1RXcXhvTjdQI0ZNPT5aS0BjdEdbZD1Db04sV1hqJSs0RmRQeCNyPUlLLH4xTzoqTFR+KV0xRmp7aV1xX2NSQHUvPX5+SklVN2JqdHI/KV1+cXYsO2lqeldveiM2Rm1lQyVyP3xocWN8W1FgdH18KjFGbFJkU2NwM31CKHVsYnN7ejtydElGJEdjbzV7JTtoMmIlOmNnfjF+QFY6UWw0Z1gz''@;'; put 'put ''bkMkTEpoMUokKzoreC91WSpLOmZ3fmNFZm05VVg7fXQ9SHM0MXxXZCRgSk0idFhqUnkqNDxCU1JqYjgsQiM1RDxOMExuUks3aHphdm5kPz9FTWFKWk5gOzlGUzkoTy5gWVBeZls9TV5OR2JFTD1bKGtFaC5hJHswNGhNfC9gOF9GNVhuUTRZOFdDYHp7Tj9eIkYsMk1NXmVqTX1UUi9gWTx3VUV7''@;'; put 'put ''Iz5+eHV4c2RFNl17X3dwOU5vb3t4XUosMSxyc2ZnaE4yQ1ZyLiI1UT5UX341fWN3NVM5dz1QMWZaeDUvWzxUKClrYkxGZ20sKE09QWNzOGJrSVc8UHNbQWdSVTZEPldWYVlLQnVzWDR3I1ZhdXlZXjFuJGtBJDplUm9bPDI3azM2UTo9ViRxL25FdDY8UjMlellOJCR6TkA+cHdkVzs/PG5KYTJh''@;'; put 'put ''MFNpa0EiLi4weWY/JmQ7WjlUQ1pmQjQxO19sLDcjckNhLGRsRloyLks+TXo8KjBLT09Tfmd6QzpGL2hUI3l2dC8+U0dvJHxfeHlZQHVDdU5PfEAmdytGWjYvTWlWbjRFIShnWlY2W2xkWzYyKjwlXl4rRmwya0ckdHh0cFR9TC9lKUZ0RkVpb1d1dzBML0lKUkw1VGtBSEwyI2t4MEElbi9rXVU9''@;'; put 'put ''bGozZ19jY3JjLkZjREJRMTI2cGBjZnFmVklQT1UmJDpgbVJHQCFRb2dGa3VLVFM/ZV86OEwkJF47fmksXVBLVl56L3lOQ0o8WWh0a09ASVtgUTdTLEFYPjI8ZU9VWHVbfFNlIjZmcnBVIndfQDgmYTExdyteRyIqRWxoPmI4Nk1rJTxIYWBUTzp3Z051JkR+MT4pVFksdlpPOCh+QnEmdC83WTx3''@;'; put 'put ''LHx2M28mSn1ZTDpTZTo5OnczfFk3bk9LeTV2UzI5OCZuOkhLeylpViNrWW12bSQ9LEVTRlRCXWdMKX0rRFkobDBTeWlYUnZMYiloQCs3Y0hqNjlyNl5OUDEoPkx4Y0UuWHZ3YmV3LERlKnltb2R+SCo0XmVrJmZpSmZNUEVQT1I3Rm8zUisxcXpQP29QL19UVWJyajBISi4rU2NpZ1hQMjVzYXBU''@;'; put 'put ''KVY0YnBMZU1lbjJMV3ZuJkBpTG9DRlFWXT14b1o8NGxpT3lQNShNXiljKSRXYShsUmQmL0duPU1gOF1bUVFyNyY3Rj1VTiRVZHksdVR3K25CUy8hTCl5eDQ1P3RXcmJddkk0fmxHQDowXU1oUkRkTGJlWXcxVnpDVkdoSkxOXj57RHs7PTp7VXJFUSUpMnA2VUtWTVhuckIzYmlvanFeV0ZyLHc1''@;'; put 'put ''OlI/V0VFXXgmVVYmKF97Xkl6OVBrSi54OSFzM2BkO2JeWGV1W1N3YjhEK29WfChnPHNwe10pWHh4LD1HRyJ3O1VOZHwoLGIjRWx5I0g0dXo2dGpSXUBOeywocDwkVWxuaCQ4aXhZdmRkKSpseio7NE58Sy42TnkxKUx3MDg4MyZWVFYiZnY2KUxFTiZMeVVUXnN8W1NFYVs1XzhMaVs4TT9iYGw8''@;'; put 'put ''dyxIcyl8cz8seipmJENBKSNsKkxLWk1wJmNjMXlAcnpFVT5BKm0oV2omNC5ZWGs6bSsrZkRKR2hrMnNnTCkhRkZ5STx6eVgqeX1YU3puX0VycltacHx5fUZJPzRSTyhjJjRCeUAlaEFmMFVQe3tiTER9Lj9udjwjJEEkRFNCUCxmQjl4bSIpJHEhNSssUWl9VEBqak4zYGxwTEc2U3JxQ3VUWCZx''@;'; put 'put ''MWFFPHFdVFNYM0BBbmJILztXVSN0NWt2WjszNG5SO0IleGF4RTMwfVtWT0J6IXAodXF2bjRLWGZfVUZ2NixeaSF7YjEuXk5rbEVzOGo2QkJ4dDs0fDJLQSE3Tzo5ZGkpRzI8M0dYWVFoZS9HejhxUjQ1fHA5UChafWYkVShJcml5OV01Q31IIWRCKC9vcXZ+SmltW2R1Iio9Zl1AODIlPXBhcS5R''@;'; put 'put ''Z2Bnaj1hJS9WKHY9Qz91KCFnWl5+fEYlX21KXyt7eW8pR2U5ZHpscEx2diRiRmxkdD1db25wfX4zT01fNHJWcHZieiNnTWcvZ21SLD8rNnosUC9EcldQPE1rQyxPN0ErK3Z7Yz82MyM1bHxpIkQ5R3tqNHtIei5UPVVtenF2IWhKTCwiXSp1LFVSZXgzbkI6RWVdOHhiaUolcHJjRkhYazpKPDd2''@;'; put 'put ''Szc6OWt4ajBvMXw0SHMoZ11ZdmhbXkNmN08vMkpsbWFDbWkmZH53Q25MYU9de2pkRnNPKj9ybE98VX1ONmhFb1ZHR2N6Y15rb0ZWaC81YnE4a2h9JU1tYip0ZTpAVjA1KWwsaDdnbS4weGs0JEwmaHhPW0xGPHNmclZKTlMqbClPWks3PCpwW3BhX1RMS1BpYTxONihXeiFKKTNWPWNzPHB3KXRK''@;'; put 'put ''ZmEyNkRzQ0dwRFZlQjNQciMjJVUzWHtecXNuenBZd2kma0c8OCJseSJxKmV2Pz1JQnMud3h+SHBDKTFdZHFneFlGVj1JNUtySGwqTCpLPkFdSVJdOVRtUFlid2Y3RyR7QHVMOzZWb2dxUzdNMyhTQHNEVXlLRFpbRmdVPTVvOVlte15zSXxXekBzO3ZiXm1TIipGNEJRZzxMOFAyXSN+aylyUSV5''@;'; put 'put ''Ozl+VGZJbEYmMU9uTnwoNiJ4PTs1cHVLUnRRN192e0crX3R1RXRtaGtNSkxgb19FbW9nfHEuKnUlJWk6ZTZdOmYqJF9JRkQkaW8hI35UaUxPImdMQHs7P0RMKiFmKytTMEZ3aUFEInQwT2Y9RlQlcXZiWjxeWndHcS9maj9IQU1LaE59dltbVWBldncpOEg6eFREPXIlOWM9PnN6XnUlPTBfIzpZ''@;'; put 'put ''antIdndxSjRgZUxFdlMuOWJWJG05RTRgNjwuTGYmRF5HMzQyeml5VnNQQ2s2KFlDWnpIbUFNVztIbmVYc1NkUi4xX3JAZEBsSVMoN0Y9dHYxRX1zI3t5MCk6YXhVNXx1Tno1UUdpN1J5JHtdP2FvZ0lnMSxfK1JFQzJSOU1aPEZUMytYYzgjMD90fDoucX1PIzpYVk5tVz0pRSw+fGN7azVxcnc5''@;'; put 'put ''OFRJcTBBaDFRPlc9IzBrZU0jUHx5Mzs7fEM3MHlfPyI2M2x8MWRYRTI5eWtRYzlQSmlLVG9ub2c8ImBxdiFCW0dqbnZnLlF5OFRgPDh3ZmswOFc7KV9FdDEyMmxxalN8JS5gPlI9NG42SV9jeHFuL0l5RiJtZ3dUdGU6QzpUbGtDPjFybWted3RHXk09KFhsWVN0WDlYR21Db11DcjhgQiFhNTVv''@;'; put 'put ''TGUvfjxaOGBgO29UU3ZycF1yX3ohdlRFYEtfKyVQYiZ7OFQxNGZCaS9RaERxcz1HYHs0IThmaHJhZzpbejZ0Okg+R0pMdG1ge0RLR2JZJlBEb0dGKXFRQGgjbXArdjlrWzhTRFhtU206aFdidz0uMlJhJiEme1N2VSlmfEBMSkMuT2kyOC5kd3FgV0R1KkZ1ejEzSlRVPkNVKkw/U3VjaUhVbGJw''@;'; put 'put ''LFZ5Z3NxWzFIVlhbeF8oV3M1PmYwLk0pQXpXb2lZO204SypTfFcvKWlwMk8iY1E2RmlQMGJ5MHBDYjhWRStHcHdyWSh3NldIcHBSPjd5VGkuXVlXIkdjYzk+X3JRMTlpPWo5S2QjSFshczxpI2VAKGphWENZYUEyalImZ01WRlRwOFUvZz44U3l3MURiYG9yUE54UU42fXBMUTxWO10+Xkd2MCVS''@;'; put 'put ''cjxWfWBeMkBUZSgmLGJtMUl6ZSRoUy8oczZOZG4kOU9QX307ZyJ9a1g4WCZNbDkxRWxLQ2kyVVtdNFIhQzNOMF1UbCFVaHJ4UjhrbF99LEhyLkNlPU5ZSGskdSFyRnNuVzJZN3dVMC9OeTNVdCVqYyMiYFNOL2FidUlkZyl9KEt3QyJobWciK05mZFF4JkVoZURpSW1lOHlINEVII0Y2PTw5MHNY''@;'; put 'put ''bXsrbUsxP1FuVzJvL0BrKjA3Unw7I0dmSyh4aGZpSGtKN08+PWVdW0Q7L0psMTJXWyZGXTIhLn07JE9YN1U3dCNPMlo9T0xqc1dyS2V7PEM4aUQhITJLMiREcDtCdGt+ZW19TWVUPltgU0N8cUMmQCg1TDYvUXghJDohKzF1cU5+bDxDcGMkdStPVjpjWjlrXTZuWTduUlRONFtWXUYoWyw3dylV''@;'; put 'put ''XVBuKlVnNmpzVmIsS0A0Ym5BRklmL00jTVEpc3hWJTFnIUY2ZyR6aFA3OCJ7dWhoSlRXIllURH5JanQvYVdQRm1HZCYicXReQlUjJl9OfGNTS0coXitmcyVzRGoze1Fjaj02W2c8fVQoSTxjcSlEZml0Q142SlZaVShjK1FYMF1UdTcjRyw+d3NXY2MvUXlVTD5xP0JoJnYrIzlgRk9lSUU8SWVw''@;'; put 'put ''TlRmS2JIOiouU21mRSR+ITU4I15qOzUpcGJsRitiZ2hDMEVqcyttZkh4WHdffTIidWVMJDsicixfbXc7IlZXTn1yUkJtdCMpPUBUdygmfkRsP3R4e1V6O0VPa3ZPUGdpemlWIlZ1XUR3eipRTnM1ejg1Y1Voek9xVjZTTDVDPztKYTVqa2tvTigsM3B5eCUmTUR5PlleemAzRHxhLGxtV3VzKXw6''@;'; put 'put ''cn1sZDplaX02WUowWnQ5YTsze0kvKiRWS0dvZDMyZjZOYiZNeTFJVzc4JEA+KE9+QltwKHEldlY/fm8xLlBSalhZOWZQa2tDaHthPT5jSTQmYzomWUAyMFVqQkxbK202OjNLWE87OHFqQUYrRCU7PG1pSzs2b3dkckJONyFDK0xVYTk3NE5WbktOUlYhRSNHTzh0WGZhS2dnTTluaiZAZ243dW8y''@;'; put 'put ''OklGdD1NdFBsYmJVSChKJXQ4LHZPaysrWnU2VFFNUUIudUptOEV6Iy5wPygmbFRgTGVZUlRQS1NsREZNWz9LJmc3JWNnbG5ObEM7W2UxST1uS0gmbn4qQ3EifiRrUzNMXUM2InpqTk1DeyR6SS48WnZqZlUyPX1oeVRqRDZzPUoifjN6aEVqZ2ZBKXFNTDNbQEkoWTFeWjRHXWE7NmE9U1JOMENV''@;'; put 'put ''ek84MSJgTFk1aXBlKTl4PCg+ZWNySi5hM15LOjdSYngpWn06a0VRZzBsVSJMdio/JUA+P2R5T0lwaltkLnA5ZnlSOUheQXV5UDhoen1YJXdLW2AjI1MpeEwpaj9pbXo1KDxEKDJORSM0JkMyJCtJejxqUGMiS0goez1ZdHQxL31JdnJfOTpTZjBUSCgvTHR7eCg8KkppK2FDVjk7I3t9VUNIIXAh''@;'; put 'put ''bFZgWXZBMW8hRTBedkRfRl4/Y318QXRVamR2VE9jYnIzSSNxTG4qIj9VR0thLjlmUlAieWk4O0J1bGVYQmY5VWchfENYTFIrXWx5NGtEWChhTUhqKj14ZDIxdXJRR2AmMi9abHAvWkZeY0tlNl5mRz9aOUZGeGtYU04/PXdKVFFfcF5IYXV6IixNT19WSTZnal9YMVQ/anApNjpvWC54bzx+RDh2''@;'; put 'put ''d25pLCEkOixEKWxvZzp1V2dGWC5fYmI/bmZfW1oyN0Q9enNMaGJXXTIhW0x3UjpyPiN+PDokfGNUZis6SFBNPE49R0J1VnRicmhbVE1OT31bImskbm0pcyFvSFlRcj4xWFNxMTVpe0VKSikqWmhTdnZKLHQ1dEdOSXckRWJIejI5WlpIWU1DaDJuRF5aU2kjfU15QS5dREkkT1RiQkwjKXtRfW8v''@;'; put 'put ''VkdoL09tXjVWakZVK0V+T2J+T0JjdTp7fDQiIWJ0RVZUIS9KfTYiLm9edCIlSkhHJn1vPkssanluXmVJUmt0JXs2I11WWGFmNGFTOjpeQlFdKSJRQ1ErWF5IRWslKTFnc0cwOSspNXJJQCkpJCIvT2JFOjdhOHBpa2FpMkIpZnhhRWJudF1ocHFPRXE6YEVkXktfUFFqVSsifmVAZV0/eyFSQ3pR''@;'; put 'put ''O2czZDUsTHxjP3RqJklUQyxMTiZDYENtODEpInBSOl5KOjh2czhYQihHIzRYLj1PYDw6XitFUkgvXXQvUH5OY3VjVjcpJiw+ZVdSR21+PlFKSGdneE9mMzJ0e2VBZGZibF80dXQmW0ZMW2pLYF1LfDJlN302QWpDcWIvQ1hAcGJtVmZoP2lRYGxadmYsT1UwKU9Kbi5rRWZXZmtYamdLMV9WTHlq''@;'; put 'put ''QUlzS3tWTm9JZisqKm9EfmluW0NPM3tyY05xX11ELklnN2h4KGduW1d8NVAyUmpKIjoqOGpxbkJFUSxpKSVLU0EiNiR2Rm1AUWVidGlHM0AuTldyUVBtXmNwY31GNGU0PFYseDJiMEBPayJwZ1MoJS5FKSZTa31oSTRebTxZMEJ5dlJCZnsyVTVbZFRXd0E/JSFqZUJ3dl9HPjVQK3pOW0VHWEVz''@;'; put 'put ''VCFEfHRTMGVVZVZJNlRPRWVta1U8PTtdaCIkTkk5cCk8Ui5PQFlMYjc6KVskUXFQVy99ZWlWbE1XNVUwXUAqQEd1IWBYK3tMZjh6JWZQQ3NKenouZjcocStdSGcldUJaM25FR1NJKkNRIjJ6WUhWREhgPy92I11HOzVQNDBdentfY3BucWtUUStrZS9JRzcvODIpc3AjdF52XjlsKGRUS0hVLnB0''@;'; put 'put ''YkVeVERLZmo5bCNYTVVfKXJqKCRdYWRoZWZbTldieE0ifnpyUnh8WDN4USE4Omp4VXE4JmM6NW1oRT1DLGw9SyRIUER0P3pBZDREcSFSPk9afipYd285X0NhamNeaWBOa3hQen0mOX4lSl86STExNStNVTVPSFBaSnFbZV59akteaCJRWWB7UXBKdWx3Z0k6bWJrPEdWW0VEdEk9dkpwJnAsdDgl''@;'; put 'put ''V306NyExajppbF1NMH5sa1kwIU5IaWh3XjU/VT5gSDZYWHU/V3xfK19wODVJJCVWeD0yMmFhcEpkbDB6YjIudltqJSQ0OG1walkrSnlzUnkoQlp0XSFQWEl9ME18Vmo+Tl0zLGNncm0yVk14WzIxVzNpeVFkJS4vajVjNU1VKGRHa24vXUBrdTsjcig/Mi9ULGs4YCFKWmxdIWdBbD5mM01ZfFFQ''@;'; put 'put ''QyhzTSs+I1hhUntZOjorKENmMS5CZkRrdUcieHhKODxHZj5XKGQwU2VOO3tHUl4wd2FWd1F1RWk4dWA9YGh2NWFTKldKe1NxbSEydEw1aCx+PVt8aVhBL29MSXg4KXZtczpnVkdpLnc+dm1GcnB3XkxgfSNUKCF4e2RyJndYbFdpRXowMGFHR2RwQSJDMGZSXSxaRzV+e0V0ayVOM3VYU2h+eEwu''@;'; put 'put ''UF0hWH4xR2BhMVosQkRwRVhXYHYkfm17czQpM35aYmhFQG95d0x+VHdmdTlmJHNNODlCY3J6SHBtfXFvPCxDIkhVPjx0dU9lTDFTalpefjZGcF1qX0tOeUgoNkVAfX1MPn1URGt0JjBCJHxeR2NleUhXel5qT24xd2FPOCsuPW08Wjx0QX5ZUk01YXpIZVM4UUN4JEcoW09jOFBFTHFqb21ObXNQ''@;'; put 'put ''ZDtVe35UcSFJI2JQVVg9I3hRIW17Ilc7eGw8U0FeMTtqSUpNVTtUOV1beHAiUUJ1MCZOQ2hENTM3ITt+QX58Rm1BQVRxeH1qJmF7XnE/PGllOUsjVGRAWyR7fnoiU3Mmc04oJkE4RzVoZmppaSxOKmMhdDo9RHV5KG0vfE5ManpibnksJC9kUyVMXmc6YzZMTj5tbCssfFtycE81JU46KTdbYS4z''@;'; put 'put ''NCY2fXYsfERwVHpoOnhwMV5lTyl9cUQsWmUxdWZjfVd1fTo4bW5CdXQsbjM1IWgsOUZiYXhValFVfEVBcWNHMz1TOW9SbzpvZn13Q3g1Ty88XiRhQ1VyZiVmUiFBXzdfME1wO30kfnosbH1KSnxjUm1CcjBjTDgmOUpObldqSSR2Yy5kbD0iMXs4M0tWJU1sZlJWI2VRJURuMWVWfX5gTk0zVWBf''@;'; put 'put ''KyF2Qlo/dWt1IWQ3enBWRiFXSy40U0JxNUgqQiFKZDU5ME1DPjZHNU9lMSNCfXd5IVJ4UDM/fFh2ayZUN3JaTzw7RyR5UDIucDttWC5rbklOP2ByQ0ReOXJgTy83NEFeQzhoO2RmaUB8cUFeOmlvdCpRZXo4PGdaIlBTIUIxREA7dCVkZF0mdSZ3UV1XSF5ORDB2N3tGPjA2WFVicS4vK3lxbCti''@;'; put 'put ''d0I3ZT1VVDZeSE8pfnpqcDJoUGdeZjg5TmY0OzNCfVBzZi5ZUipMbWhASXhpb1pHdzBOVXAxRkVhNFd5a2VCMj5jNHooPT5QREVqdVs+QXREKlNDZlpeYUZwRTRkNDViN3BteTdYY24lcU9aaGkjO3Q2KCRCb1ExLCMpJCtnPExFZjxtNUpdQ11CNkljdVQiXWQ2bjIrPkl6eVY5YyNlOHkvP3Q+''@;'; put 'put ''bXUwLHpuYmhTfTUsLkBBU3p5WT4hUDFdaGNxZEgwQ2ZbPiN6LlFmIiVeRn0+WTtlUiwmWGF7dH5wVSVKNS55K3RmNXA/X10iQDozL0kvMzk4Olpeb2dnMkJ5TFN0ZmJETHtiX2lZOkFxUS8rPzVEdiQmOkVIUUwpPkdneilwamdNMHJ8bmBRV3FVcjRUdEF1S3RWc0BYOiNpc3puPTkubUF7TDs5''@;'; put 'put ''Nj00WVFBIiZ7S1RZQjBaVGw7SUF4UV4sKUJmfC95dDt5O0M8fUAheUJSTDRsdHgoSWh5XTA7L24lWjNlN2dNLFMjRTtXSlUyWzR+S0tqWUYrUjJYZlY5WT83Xjw8b1FqKS5dZnAjXXtoJiRiJTZRRElZMWZZaUhhNXdYJS46fFBUOEhZYltHekp8ZWR4SSk9YSlbUF8oLkp5Q2d2P3gqTDghOmdp''@;'; put 'put ''PDYiImtGZmx8MlErYG5gVlgpfnZnSXdSKnF2Mz9hXlFXY0BFR0J7MGhTVFBjR205KVo6a34pcz5CUjUoc0Budl8uIUtna0hua3lYfTZZaW9JL3NNXyxneyxgekM3fSVZYV48S0shOVMzW0gxd1AoUVtsSG44bGN9ZlhCcih0eCpnZ3ZdNTxxXjp5RyE0dmhiejNwdUNfQDpzYUZISUI9dD9NY3pz''@;'; put 'put ''MkE8eyUyZn41MV4oM1VESlRVRCNscD9TP1s2Nm96WmxDJHhrXyRLWSxOTnVqazNiKnNvOVVAIXhWd29IeCt3Q0dpcV1OfHdMfFh2YWhCKntvc31CZT1OOyVSTFEse30henVTezopOnZdOyJZMSFTU2cpa3tLUl5sWXtMdH5YY3JaKEUmTXlDY3hdYzpdTnRbV2NjUXghTExAMEgqNFZJKUowdVcs''@;'; put 'put ''WDlTX0NEREtXeCpVOiNCMEtEaHQmckd4UmhrO14uVjJUZn43RDEkbGBYPkZfL1FsW3t3biIpUDcmXkVdbTwuMFMvM35WaDVWNDhCPk0yal40enI/SGt5TixYNCEuSiIjTE9MUixbPm03RWBKKCQ1KSYjIWhla1tFOT9QIz9qUFNsXlU6T25UOGxSYjh+QDNFQ11eanxGaS42XW5KYUlJOTNiTk50''@;'; put 'put ''PDNeVUZVZF9ifnVSMXhSPiV4RW1oYV9KVVVxM3NWRV1hcmB7eUw5TmAuJU5pJW1iMWU5WElFKWk+MW9bUHBqKm9+dXF+JEBNdyFJLFVMUHR5LlE+MktSaHRkZ09zfjFEX1R0M1MvdjAjJTkvLyxoWWFNaVhjdVl5IiQ4I2lqbmdtWDcyb0xpbGtRWTIyJk1aXzBJSWlheSxlaCJ6Lm5GXVJGKnRO''@;'; put 'put ''P194bk0uWVgiOVp9OWtPLGhSbC5DME9OT3ViJShDanhzZHVzNl99UW9uezdPPGlwQ3BoM1grd290QjVgPmE3TWxDIUUmV3w3fnpncC8vXld8PCUmWChKQD5bV2pDJDp4eTUzeCY1PXEwXltQSlFuO0M+UisySClJM0AkOkFdQlFTM3Y8XjJUR1IxST1QSUhAWkAmVGIpcG1hdlglUWU1NUdiY0sv''@;'; put 'put ''IW1GKEVjZFZTR3lfeHdSUEQ3bypzSDxGaDQmaXxeWEUrUDZ3SlA9I3BaazAveVE6djp0bFBeSXNuYz4zUkVucDk3MXw/Tm99NEhnNVlJd3ZWOjUrSmhJOCthfmN1XTRBWltxYk1NVSl0PXNfaX1yMnxLfGpVP2MudUJFJD0qUUYkUkxsWTM4KExtW11yOC5pP3lxQjduZCkoeGxTdVkmN01OZ2gh''@;'; put 'put ''TXJ0fGlrQjUkV1VpMWN6ZntdbjhMbTBjXXlOUyx0ZWo+cDhQS1pfemE+I21JYTw9JTZEcHNOSD1vKCtWWnx1TVFJd1IpYUlvLmBQaWRFQ0Y2I3JYIS9eKF8qa35eflZGeGJ+Y1o5c0dsdyI+YGFeQmNpYiwqLDx1OX0vPC9CXmIsNkhUNCNGaFBeemVwW2xgSzF+KTJFfklCaVVhezI4ciVyQF44''@;'; put 'put ''PVs7OGN2NTBUJSR6TiFRVCRsZHZXZXtQJWEuS3dJKyslUmxeRlpedmcwK3g9SXlsd0FuYyV+W2dQeXtDJTE6flc1e2t6X2krNi5GUGo8blVfLk9TZVF0cn0leWVmfnI9MXB7NW51ND0/eSIvaVldbDB5cyRMbV9aWG0hSHt3cDUjVEwxbkRzeDw/Lmk9P3pgcH1vKmF0RUw/KnExdkRgWFgvK0Up''@;'; put 'put ''Vzc5e0dVWFdTX15yay81Wj9fNSZJfCYvUmVBKHdscnhxMy9VQ1UmOlpbMVJ1NzFOImJoJGR4fFJzTSw+eCVyeWx4eHE7Jmd6SiJVdmFRM1l8O28/I2dlPE94Ni9AM3RPWntTNyo8XTEvMVZPNGhkLmE9eDFzc1QkPXlfL0UzVSlXbEc9TlNMbEpXN3dgTyt9ZyQyeV1qfXhqZ0VrdThvOmAwNFRn''@;'; put 'put ''P24pVSohYjBoPiQzKTxYKHZgdHxuVHs8RXJFeUZjQjlwM2w0ejNSaldkN1tsa1deTCNCa1UzamVAR1FUO1ZxRmJ3O3g5K0JxcVhoW3ZmYi9uWzw0JlJBVF92KCsrL2M4MVkqUExuRkRCbElIa2ZeSSh1SW9tPyR7ISVtJj5mMGhhTUgrNVFNTVB2aGx3QWI6RjpwcyE1dChFIldgQ0c1YmhfUFt+''@;'; put 'put ''fTU/QiNFPTx0L3czNEc2REA/az1HZm1jS01gNDlYJk5rbT5GcWxCO1QsPXJHYSRYciNQV0lCXSEuZkhtWX4he31QUlNeR1RPUmg3X3leLnIlP2AjdlR7MFhvM09nejMxcz5FMF9VOXh4d3IvYSpPUVJMNnpNekskTX5SKVJlen1AOHBVMD9Tc25WYjM2LF1+UTFwfjdFVnFQOFIiRzt2ZzdlfSk7''@;'; put 'put ''cVA7USomOkxJJlIpYzBPbntYeTtsUlclRmFRdzV2WGhpVUBoLklqZm8/UEs6ZlJkcUA0RW1wcFprVEhPV2E9YklnPE08fTo5e0pzLlhuKSYjYFZRYldPOCp0X0UubE9MLEt5ayNyV21dbGIrXk90YzM2TStsbWNiUTA9eCZqQH1bYiFNIWBATyYpaCEkajlrWD9dKHheOnlCRWdqbEYrVV9DfVMo''@;'; put 'put ''JFA2SVIwT0hqYnBJS3NJRWksYFNtLmhgXlE2NmRMUFZSW0ZXW1k0WTp2a0JNNX5YJCl7O3xkfGZtNXc7dmw4QXU0fERwOTR2OjxQRjM6VSlAZ0xGKS5xXzkmKldwKH5xUXc1aCpKQEoyblAhIys6Qm1PKWc3V2Z0ZnMsZWY0P3NhaG91ViQ2a3xNeFErWVZpSkJLJltpVn1beHhueTRbOU81flhB''@;'; put 'put ''JVcxNSZULE1RYi9VNmNfJlB+I3dgQlhbcD5gXjBfVDZEMSx0S1l3YkVba3RDc29gVVR4Q01BSjtGdVVaSTA1ZWQ9bGQ1fWQkW0Y/OF82JTV+RUB3S0klRkE4Rj1Hc2h0Zi5meWdIfig0cTNRXT4kMmxNNU4xRFl6eEllMSw4ODwjbyVRLk5qYzJhb2pWcGVQY0guejRJRWxCV2VYQG5MNVtNWmJx''@;'; put 'put ''JUkuYHoxPHgjQEUwI3JhZXlfNm1kfjJId1NycH1KJkZAa1YraGtxTD9aZlNMPSV7NVQxR21nb0poYURHPWg/O1IjeipWWjQ3WnRhT2I8Q0sjVkksUXk3MV1EJkcxPVJKU0BuUj19bGhoTTIwIV8jJHdURmdGWmMlJi4kfUdKezhlUkRPJXpYQC5AXnZLMDY2ZG8/ZCxGTn01YEYkZk8zaTV3LmEk''@;'; put 'put ''PXRgY0okYHxtXjxZSSJYNEA5P3l1WSVqeXx0RnhReHQreXtNO2w3PyhZWVFoaW1eNm86R1hodytOaypPY1NJPyhralgydVJQIlVXOmNwPzdQMDl2OkI2UGMuS0lHSFpfPVNSeXpTRywmM3RAOWJlImN1b1QqXSlTZDVQMlc4YF1zSippLF00bE5FOVUlWyVxZWNKLmoiPF1pXVJiIVtCcSxOZDxF''@;'; put 'put ''Ikh6PCwmPTBXaztOKipIMTo6fEUoWFRvNCp8W2tiNGlvUTpaS0tKZEl1KHdyOihhdUI8RkxWVUc+e3U6VEt7cjEqWF45RikrIXhGR09ve1E7TV1DYl0uK1U/SVFNRFJpeiNqbj9oZSsxUyU2LyxVbDZYZDc9fCJbTzpyOSZHIUU0Qj1zIjRBMHdQRWY6JHdGZjxLJlF4SGNRTms6SSpPV2xhcUhy''@;'; put 'put ''Z1RPRix7KXY/VlZGOkRwOys3NjJZKzdBT2wqSkcyfGdfcTsuYWQhdFlbX2FEd1dCMnReSzhoQHhVb1t3RHQ+OFpzUihtXkohOnJzPnB3dXZ9ZSFKP2R+JF9KRiVvRnR8JE1RYDQyVjBFaFRIPSZWVSZVK1pWR3hQWVNxcDRLVkBLcnNtcUNkLz1fJCNoKWxZWVlWdUxHcztacEBAZnspSkgqSEJq''@;'; put 'put ''RWpIRkwmOjV4P31lSTZlezhOakVjdGJ1XUJvNUN1ITJRSSYxNShXXX4/Jm02SiFCIj5TSjVZeV1+VUUqRlt4N31tIy8sdU11ZGZkSWhTRkMjbGpDQUJxS2c+M34+MXBTXnRHQ1lDa3JNRFR5cV50ImpnaE5HQzJFZVEwIyZ6RGdFPHd1dDpCTFZeUF0lTjkqU1huKHBVdTVGP0w2M202e3BSTS9y''@;'; put 'put ''bmZtcE92RE9FLmtIO355MD1dPVZaMS9tVEBTQHR4SGFfXyRPPStwNCFONWl0STYxd3hpJXZbciJBPEs5c3V6InM+RVJpUSJnWylAck9EPnpiI0A3fS8ybWVqb3g2eDZ2KyYsOHNXTmVuaTRALDteJCM/IUl7VjxEYSpjTmhwN300TEl0UHs/JWdsYEU2Ml18aWlmS3NCaiQiSSFsR1pde25VfCI+''@;'; put 'put ''dj0sZGApYlV2dG0rQz55Tk9AVWFIOl0lbDkkbyxDNj9nLG5LP0RAP2MuXjx7TCJROU47NCt6XkdMUHJhWElVdSJnUylvYyp8ZjpWXVtfTy9BVCUzLy5DYXs3OSwpbVNYVU9uJkl7MXpoV3F1aGI6OFVsfFZTTTRpMHpjMTtVbyE4KElUTi5wSVQ5eU10eVdVMClGdzMrO1tXPEVudWRJVld1Vi9y''@;'; put 'put ''NUdgVXI6PjRLT0U3ZEY0fUUjUHB4JUxdUDoqQElTdSJMZmA4PGVSJlZ4VWpwOVAqSEg1XjgyK0JrZiN5QiQwbjtZQTU+czc5I09edzkzNGBSOXB2YigzP0ZdOVg9OGsyKHxKVTAianNYeHFuZElNQXBDNk1jSWpLJjVmLEhIO0ZxN3dPaFdaNzwlPTZfVnVkKzs7aWdbfnYjeV5KRjpzI0g5OmAk''@;'; put 'put ''Q3VybkZsQ3ExUCtWTVsjTVVDP1UkNVMyWmtNNCF1RSlKNC8sTEdMUi9SUEJNWjl2dUkhREg1c1gyNVcvOyRFbCNHRTtfczFDfW1VTXhMfHlmaWBKNz5IbVdmLFZWayZ7O2pATWNWPUJvPWBSKWY7K3hZKGtiOWtsNTNdWGQrOjk9TlAjSz95fVhAT1tLYmxHXyx7TF1waFt9Kl1NXVpyS3A+JWls''@;'; put 'put ''NFM1LE15cjBgI0NePnI6O1dfYyZWMnc4fm4zdykuP2tAMlgwT1VdLjNqPUMoPk1uTzA5VDFBY3MrQzshQk5HYVBkbHgqeTZtdUhXQSN9dH58aFQ/I0wlRlYhQHUwKXdgV1Vuck98VDMvOGNtUjF3SUBSbG1NIWs6YiIyX1RzWnd2QDlKUVhhUkJoWDIwKG1BaVUwVlBJd2o6JV9pcFpSKCRzN2BS''@;'; put 'put ''MlhdKiNjTSR2RjsufWgpMk5zR3p0Qm1lWzRLaWBbdVkzW156aU03MUM5W2NTLFF7UUd0cSElNDl8WDJWInN2Zl0zWyQ4ZU9+JTxAQVJZeFFzaWpAZjVkMCxRfkdXXUloKEA7VlpRIzEhZlcvIkNaUSxGa1QzLF9JRWZGVCQ/S2RiMWohb3xVa29ucX58UEh1NkNeK3l0NmpDP1lMR3Y/SUd0Kyop''@;'; put 'put ''US9IcS9gND5eeWpfOjhgSiJjZnVQOkM9V0ZMX0plZ35KU3NYQmshbElpaEBuNVZ2LDtTcldCcTYsdXBdYDxrZ2ooL2hHd3lGc3N3aVdlQHtNMC5jYSRLJCY9L2E7YV4rdnh0bXB0ai93YiRCaX55LDFROzJgRHEpTDpHVy97VHdpRlUweGsmZEEzem5mX0A5PmcsQCFFWU4rdiZRTVovS2ZAYjUi''@;'; put 'put ''cWZFZm5JL14rQ2ViaXhOOHBUQHNDWi5rbStNUDR3T0N7P0V0SFhNOmMhaSxnJFpRSThrZEhzTisxMD1ofGs6MXlpL09bNmUhRUh0L1lkTlRTVnMwZDd9UUJJUjlrYUclYFhuYmdEeWdEJVJieHdAbig3PldOUDkxfVR5c1Qwfip+TmxaUTM2citKYHA5dWpkLmllWlNlMkgzaiVKP1J+UFd0Q3lt''@;'; put 'put ''I2M3JEUldXkvI0BZK3NvR15UVShVW044bmkhIVtlZTNJVSQiMzlNeEJPZVZTNEk7ZXg7IzQifXw1PGxLOkxFZlE4K3JWNT5DOEBDVmYzLFM+Y2F8IXY3JTV2T3EzIXdjInVZc01YPkkzbHVNYSExP0hpUFk/KH1IbyVfKGE9TE1IZGQvK2ljeyldTiY/RzohQjpWKHgySj81TXNBZiUoS11+MnVH''@;'; put 'put ''Okc+fCZyKmtQY0toRSs+eCxDPHRnN2xmc1F3OUVldm1YS0JGVjxaXjxnRUYrKnZ7Y1NkIVg4MT9xYUFXKVpbKGlzW2VnJjQ3YGpuInc1ajhmaGVpciY2M1FKQmpYKDhVJkArW2UmemRlL3I+VnZPX3pqK3xERl9vOy5hcyMqYkdGI3xzS1o1PFttQHtJckFSQz1OQ1dKNnRjKTJyQW1OZHloWiRO''@;'; put 'put ''TUY0KnBOYkBQcURTd09fYjI3IzQsO15wUWZ2eWEuSVNEOm5PbisoW30jekl9Oi5IaC4pcihLLCoqJGN3UXpqTipSImE5SEA2RSNTSGs3ZyJSVUZDTXdxSWA8MkRgOXkkSGd7fS5eS3pBQio+emNTK30iNmUhd3g8PWBsX3A3clkpUjZXXSMwSi5Fd3NxfGpSX3YuYEh3Pip0NCouWnVTLFE0Lntd''@;'; put 'put ''IiNjL3A/dUdVNXRndkZfYiNMX0RdYTMjY0RCRnJAPDo4IWZQRURENn1wNyJKIWY8OUI5PVl4fVt+YiUkZSw2IVZbSyo+TWZUQHR0NER5KnkwaUBdMXdXbDQjai9bLl1mdH4+WU9paCxBfWolKDgpPjZGfXdTNFovI0xTOk9tKC9mI08mXzB4YUF9XXI/JFBJdlY3JUdLdzA9O196YXc7TFh+KDEv''@;'; put 'put ''ODdoUSNuci9CQ155MH1xc3lzKCImbCpYQSssailwTEBOenx2P0I3Uls2QSksOyIrKm9ye1ZATj57I0lkNGdxY2YiKFRsbi9PJWVdcEh5fUtYeEhqYz4kWTIlNEhqc3Fdckw+V2kwXlllVmA8anh9fS46WHA0NSl4c2JTN2U7QGFqY3pYczFoRUcie2B5fX0hKj9lSUp0bmJqTi8oXW1NJkF9PVhR''@;'; put 'put ''QDJRUjlDfnxXWGNJTTxPOyNLdEJDbTdmWWl+SFdPTFBMWncyeEQ1V1NYYyEsdnYseExDNW9pZE45ZFdPblQ5USQ1WzFdRWo0bzhQekB3XUxTYHdMZytrMDdoVV0mI145UXp+NS9nQDNqWlBDfilRSG4qPi9sMHpCTU1oSTQ4OnE6M19RUy4uPmVMO1ZWOExLbFtXfCxdfnJ7emlMQSFMMDdCVk1k''@;'; put 'put ''TGheblUxQVhxVEw6NmlESlciLlhhaERFeU5xWk58UXM1Ij5vVSZESzV4cjRAWVdTWFV3OTsmPH5NYzhofXBaO3l0M1N7XWY/IyErfFlMfCkwZ2wiKSRkTmsmNTE2LCNNRCs5cUR9WFJpM2t4fk82azY7ZzVicHFZQz1AKnQoPlV6PV5XeCVzYTRkSkszPFFmQC8pM09XSTN3Y1EmNkwrQjx5L3Z6''@;'; put 'put ''U2c6cWBjPDlwXz1DYFFgN1dUVE95eHlyIW1aaHlmPGBZT3x1bW0lXSVmMUVxUGhuTXRITGtZZnclKyFNNCRlfDpaM3pzPzB3SiplXkIqWm10dTltcjt0dyRFMCRFTmxQYjNFOFc3b2Nfe3pjYzdvRX5VLHE3UzlERmFic19FKWY7KHklYUZ1UGQpZT4lWClnUktlU1RjVTg5ZCp9M2UvO05nVytz''@;'; put 'put ''KEc6Ji5EXzBxPnsqVWJ6MDglJUNyIyRmKzA+InozP01bIm9OY3ZWL0ZCMTdQcXZTPm1sfHxKWHFWK1BzT1lfKSUwVjNNVSlLVFt5WUdyQ1FpbWxjKDA3UDFkbyMsIjhLYG9vRkxMRDxMWn13V3xsOTQ1eDxjXWovTSRJe2BIfVR2NmMkbHdgYWtlW2xHaExuX1UoZ1dnJDJLSjtSNX5XNn5jYyIh''@;'; put 'put ''T1NaaFV0T1F2Z2g2bH1RKzI4JD9BKllPZT0oSVVaUWAqWzF+OEU2UnN3b1gvZDdMfDcjOmZHcHM/U1RkZnZQNlNAdDRgXzExW3RETUlHVGVSdGclYFEwVlUxfHtGdlRVcnx2eTxOTkFePiNIPXIjVTguXylLbnspbT9AdzYjM2VuSl5nSmB1UFtzYFd5SzFAUklBWT5TXiMmViZ6fWlJPmdgP1pg''@;'; put 'put ''ZVh6SV80czEpZ3RNSjwrZGBiazRZUms+LGF9bW5VfF16W09mYSNRUXxvfi46WXV0aD55cHsiW2YkPkp0UHlsd2NGK1p8eDEmKX16YWRXKVFjXSlJIm0zKytFS3drYkZmPGNvUSZ4XXNHfWtWT2R2JFRLODZUVSZxam1TSVNOZ0IiJFIyNCtjN1tfWSo5X0YoXV80XXo/SSN4WTcscDBjP0U+eFYy''@;'; put 'put ''WVNLU3t4TWBCaXJAYil7K287Qn5hejI/a0hkSCJdVikrXz00NXdWclQmU2A+eFdTXzY4cUpgNHI+dkc0MnBCN2F3bEw2K1BpUXF7eCkqeXFkNixjUm13bVNQbTokPG0vfT53LztOZzhpaVo+bi9ZTyQqekRMVHR5YU1JdlosZW10X2pCUS9uV2dEbTEraGdQN3I2azBYX3FbNTFfMC9jSDEhNl4m''@;'; put 'put ''UDxuIWhrRC5tQmJ3dC9pfTlNfiFLbVNpLzd8MytEI3E2Qj4qe2Uic3VwQ2EoTV10K3kzbyZCUkw8eUozdmtSe2J1YmE3YmFIbFtqW3glMW15Wn5xdkBDNHp1I0ZeUWtwcUFxMCVWMHU0QzpCLGd3dFJadDB6fF9hck1paUMzWEBbfTs1azFCVDdHfHpALys9M2tYcnlxZDghMyRRSSk8eT8uaDcs''@;'; put 'put ''IWN5TFZmNjUuQDdwNXNfZS8jczheMVRWZHojcDIibTVMX1FIdypeYFAwJlRdUjoxZikvYCNwcS9beVMhNT8ud2h0Y1VBPHNsVFJiVG1pSkhtIzBzcGcuLzdFbE4pLyExfWdwJGUuTUI+bTRXNlozOHw+XylwK0ZfMSFociE3cj81P1V6JCp2cThPJjg+Tmk8Xn5mbXFtTE9vbXsjaylJZl99P3Jz''@;'; put 'put ''RzNpcVtmJlo+ZkR6KnBqYnZVSFtEe0JdPVdXIU9aLllYcCg3QlZ4cU5HQ0A+fmsoXVZ9JGd8KW13aD9fc155Iz87MXptSH1FVWRgbmhaL3JdTkhYKCw/RDVCVS8lSjdPRlpZNFJobyw+JjRPcj9+WkxnQmgzJlMzTFRMLlJlSUQ/ZSMyJih6IV0+ZEE6dzNmfE1oPHUvfnl3TkZVZ31PO0dJMlFK''@;'; put 'put ''YC5IcSQzbU9Qdm91XyNKRFEke0x+JiVZfTFZY3t6KW5NYzdqamRqK3gyYT9QU3dRdHVfOipqaCUwenw9dVYlfHxgSlJBey4pNGFEYFIhdyFSIXgybEtdUHw+JXs3N1JfUCtWQ0FuZGAjSy5LMlohUUBKfF9EPFh9PjZCMy55e0Y4NjxbNnVaQn5ub0BAUz5MNnkjMm5MKUU0SXldVDtUJSRXR2Jl''@;'; put 'put ''SiZkY1g3X29Bfn5Xbjpac1U2dTQ5cXRgUyJJXiEoYTlXYzgrVSwwZGZEXSs+OlhERG5Oaj88V0wwTUlsWi9Vd2NJV3QzQ1tffFk6e2t6K2YwSChnUndxRTZ+ay5JckhzZ3NDSndJfExhPmd1e2gyfERbKzpHfnwqZD5BVSNXbz4lPl5TQGNDUzY4cncoOmJ7K1N8flVGSE9JI0ciXzY+RkB2Sywj''@;'; put 'put ''Mj1hRG5Ua1UvSGZwTFhzblNnUlJVPkZJT2lbfmhaPy4uM0w8TGsjaV49LnxSdl0paWFXd0IiUUd8SGVdfDhbNV5IXnpdeU5SMWdKeCQkUDo+bmwmYHcrY0Q+JlArMUBCM3ZmWk4pXlFseGwqUnc1Z11fJHNlMW9kTyNPQ1hqX3ooS1Z2MkBsPHxBY31yV1NmaiMmSltUNWE5VFs8Qng+Tm8rb21U''@;'; put 'put ''U2ArWkJZMkEja2MzLktPY14kYmU6VXw7fS5MR3d4W0owJTleXSIqekNKbE5mOGhXZCh8NywkZm5ubkJuWT9tdDE2X1Q6K3VgLy9XckVLeVNBWXQmdClrbHEyJWBENnVlZWZxVGNYVndCUF4rSyx1YVNJfClXU24mIkRQUEF5PWxOL2gzPmRTSTc1V05wQmZOPUIuZm9Kb0ZrN1oyWS9yISROTF4p''@;'; put 'put ''P1hvU2QpUF1eZDEwdyNjJGx0OkJiakB5biUoc1k4SSN0RzRoSW0lQHljOy9kc2I1JCoqKUxdWiZMRyNUbyIvLDZrQD4hMXlGelF6Jnl2IWJtQCY6U1hfMCE+K0lKazo8bWplNitKKCoueUAuRlQ3NWEzTix8aH1GRjRzTmQuc013VkJFXzdbMHNHMnAwT151MEdAUjJQUDxuczssIXl2MCNNQXFN''@;'; put 'put ''PDRxLnlyVTdYQEZhVGV1Ri9sIWtyQnlZK2N0VWIjQ1ImPltrImduOVs/KmkkPkFXdEJedTY4SD91W2woPGZxRDI9XU5TamJzLF1XZUYuY3xFMG9wYXNZOXpXZT9NYFUiVGRManU5Y0dCRWFObG5qdHVzMFVNPFBLVzdIXjM3Lmg3UV17MGRwIThWeSpmbiVJPWFqcXJPNnohfVMoNkBVU1d7c2xt''@;'; put 'put ''fjFtNEZ4IzQkVmtmIVBvYVI3d2ckUWw7NHA8JFkldC5tVU5ANCFQemBoMl94RmZTYSU2MjMhbm1zKX4wIl1bSTpPZFRUL3JDbyErLHgsNUx0Nz8jRzNBeHd3ZFRrP1hIfkleamR9VD98RXhbMEkyOjN1WFVsQzBmJVFyNDklfHo8NSNxRHt6ajFoRyJlRWxxOmRddD9pRmA2O1ZEInFmU0BmSzN2''@;'; put 'put ''UXR0NzdtYFtDbmooLlc3KGc6JkdHbTZuIkQ5JFYsRU5QWjIoWVhhOSRXTz1bRDt2IiFzbGl6YVkjSTRPKXtpKlQ7IlQ0QDYwfTxBTXFgIyxhZV85dWxnKylMPFtoaTB4cTxDKDNWYTF6X35EeHdHLE9ifVc/dFRYJCFIUyFddUVtIiNNRSluWSo7KVMvNDg/X0IyVl1dLHtydGxvLmpgOzM/WU5a''@;'; put 'put ''T1VGbVMjdGVpIUNVS3lbWWcsPU9ucmhyRiV4VTxiZFFSaDtdd3IldkhfaVdRJTtUKW9ic3RLX2JTd0NPYTpvc3FwMDxWMW5ucShlVGA4MFpGRF9+LDRDWGovNHwzOyJzOytBXlY7JFs/Xmt0OEE2bUZyISRwfXo9Kz8pOTZiX2B+WyZXYXFKaH5heVc7fkIoYG5rIXwiL1c7P1tITSxqSX07aTpH''@;'; put 'put ''SFJvMzpZdDJNRGR1WklMISUxdFYyQ0pNSVJRNXshfXtrNHFqJV5bVz1FIjtvJn18Lmo8bHBsbm8yUmVKYHxxbF81R1VOcTs2bDhEe1Q5USFrW2ViV2srZ0ByU0gqVSU1MDxwPn01bjltZGhuaX5JLDxZXytWYzY4VlNxRmlHPW9MbC4hOHdPOTt4UEB0JnBTUUVgV0tOYShIRjllVGYrUzJfY0wv''@;'; put 'put ''TVU7ImB5Z1lFOklHUGNMeUVxNkNwdExmVjYiaSR9dCZLT2t9ZXA1V1JOeSh8bTh+eG1wIT1CfUV7ZDhiR3o7IjdtfHpzTjlNNkFQX0g1UUhFKF5ifS9mZCovOS9bVilnRk13RGQxK3pdVExrI3g0eHkzJiNvbyYiZntGUVhCRnNpc249R05nKF05VjlnZlZaQnxkekFzdEJDTHcvN3R+ZEBGXXBF''@;'; put 'put ''P0ldPD9scjhiZ3d5aitvVy9dNTNEKSxsblJKfDQlfkpCIXIqejxvNixbOGlFSChONiorbGdqQmhIdDlnOWdlKlRGfD1qUjt1WW4vfHw6anpAdH1ZMWJANDImY1dpWTAvK290MFhmbENsQG0vczlNbi9bd3RweyowdSQ3Qn1BX3hbNG9rUyQmMTIwMiN4bDtVKjIoeUwzLnVTYDZmdUJCLHpPNy96''@;'; put 'put ''MG88aFE6PnRlSzUxNywqSDJbJWRdIjs4ZDw8cGUhfGgpSTBHcVpjM2NYb2xqJHBsTzM7cTNUKnFjOXZQS04yfHp8K1k6UnE7OCFRRFNJdHowfCh+a25KfEBJOm5xMjpFNkFwI1lEJlJmRm5IR11WTSpMUCl5dz9YYW46QEdbdGgiZkUoX2MsJXJMVl1Oc2FEK312c1VQOCN0X3xoMyZDJmZLXWM9''@;'; put 'put ''X3dsRCE2VSwvQldvMCxqfnFCbXciazY0ZEYsfHd7QXJ5flE3K1kscVtWMW5STkErZjxjXXpubFRmUVZFMGQ6YW97ank+LHFsJSphQ3JDbjQkcVYjYW4pZ3IjO2xNUCx9JW8kaW5BV29Vcn1iQHFeeXN2STJZdV9bRUFbL1QuVkpLWT1aR1lLOFt6elR9IVRWIk5COG9Ab29ZW2RuXnBgfDVtRipb''@;'; put 'put ''dW5vbyRLI111dU9GN3QoU0ZoO2JqJkVjW1tNQ1t+JmdEJXxFay5XXnlfbTBAOmB6PSM8Zkh8Jiw3O29RYiNuPlghU01bIlV9Um4oNkJVa1JxL1t3VWBbT0NTZXQ5Ki91YSRGZm0sanxGYmlOXipfUnB2Sj16YmdhSmxDZ1F1TD9VZ2l8UWc3fUZ9TjZwISJFQW00LjFkaz9zajxGPD9jWUc2ZlVo''@;'; put 'put ''VUREZSpWVkRVJnJ5fT5XK2t8PnAvIXwsdSx0cTFQOGFMOl04e01qe29SX3RePlBzPGBZdF5mdSxpc3tzQF5bbVVrTXN8SkpWcSZaPXV9QEc3NEIvTjAjXUZhJj4+cF07bmdTST1uZyE/UUtRLHpQYCZZWyNYZkNyaTkuczNAOE5yfjdpIS92eXQhLGIxT3JiKj1RW00lWCQ1QlFHP3VhRylpQH1e''@;'; put 'put ''azwzISkrODFweFtDU0xlfmB3Q1F1RX5EXVRbeylWKH0jVGVCTVVvajpSW0MxRCZaRCJPRixFaF86bUVJYVJvWV9edjl4WFpVcSlyanw6TWcsI3kkOUciPnpbdi48MUFPRVRmdDxgb1ZvZWVkKzBmQjZXN2d8T1dzMTE/M3NPTkBCemlVNDZXOWlxQnB0IjpOaGVaPVIoWEMwZXJ8YVU8LGg5fTx+''@;'; put 'put ''VW5YYz5sfFcoIVheQEVNVFo4R2dlPWxOQjsiUHR0SGVmNDVlYG9geDs2IlszUj5kYU1HckhMTn1hNlM8cl9lRmxqWyZvYVE8d2VOJi9zTD9scWFpTzRrJFhWUX4sfWwpYyo4R0MjV1BrVkpwdCFCdE5ANHx8VHpVPyFqdUl0OHFDfFovJC5ZWmNndDo/aGkoal1BZD9XL1NbaUUwUyQzT0Uxcjdp''@;'; put 'put ''N0BwOl9HcTp1K1YjWlRONDYoI1JTfjNlL2F4a2pye2JIVFh4TjE4fWFZam5sc2c1UXwmMUV8JSFQNVg6fEg/cypFWHpXRyhLekR2Y21MaT92ViUwQGAwRGgxOlIuS2w0MWRQNSEodTthMldKQSladFc4I3ZUazlGU2dKTWtRQjdMZyFbVHQ2SSNOPEo1JnFzLH1zO19LSEJIcCtreURHV0J2fCph''@;'; put 'put ''dUQmel8zL2laUyU9dEtaRkM4a0g9eEJKKXl1VW5JLigkX0tzVzAiQGltTkp8OGFULjN9PWRIJkcxZEN2JWx8d00+I2gzTWxwcHNgSz9BUEs3ZHZjaDd5TiVjSzFlfnU1MShuPE9BV3Nsa241ZHhWVEUuMDNJWltIIl8wOjJiLzIySlQpQVRQSFBpdCFoNFg+PCElTUhFKD9rQGtxaFdGKSRMWDVY''@;'; put 'put ''LighQn47Zkx+ZUtteUYsJkV6bzEkZ0BgQjMudCRPNyJpTk5odlQ7MWZZbTIsIkBZUi5aTD1paG5KcUBKNllAWXZEPyI9fixHZWM8Tkt6RT5xN3YsW2gjUktffkxjRnZ4Wj1ZR11vYChYQmAqZm0zKzNaKVlYeU0kOD8/WGBGWHR5OnlAViZob1JvTnokekh4OCM9UVhIIiZbK14xPlBsOSV9Y0Zw''@;'; put 'put ''eFdCWzUlXXJbJlJ2SExdekI9IzkiOGdSbCtiOk91KWx4S1RddW88MFhdS3FkIl1hIzFXUGJWKz4/QGF9JlEzIVMxUjVFOGh+Y09VSUppUmwqXiZWOVt3Nl13cUIrK3VuRlV4RFtLcGtLNEg+JTR9REE6K08lKDNENVByamhzVGVET3FAViN8bWdjWWtjVXxCaXhmYmFLKy9pYlo4WXFHaFpRXT9E''@;'; put 'put ''NnwuM21CW0xgRTphaV1iOkU6di9APWBsSTAhPVQmOX5COE9aVkw+Nlcjdy92PlFJTjNfZTtPJTg6UmJuJDlXJXk6YHg1KEMyYGBPI1NbQkVgeHkmIU1vP0tWNXlbV11vPWswJCs/OXQkeHBKNDRlZmpFRjo9STIkUDBsP3Fxd2ZlRDkqMnlYaz0vKFFkPVE/cnxfRiwkZ3w9fTNQY31yLlRFPW55''@;'; put 'put ''NiUoVXNeUTcsMGFSTm53RCZKSThafGtXWzl+XlJ3M34/Yj9lJFFDSl9Lci4rZF1kdXV8OUgjdDorSXVId141Ll11RGZBWT88K3IlQlpQe15APWUzUF9tZ19kbG1eKWtla1lSUmZJQV9uRzdNSjV6K089NjpyW0hMakVzXj59OmRbViMvV2J9NHo0SyY0QWlYMT1Ia1Q9al5DVCwyPGokaz5DMk0w''@;'; put 'put ''WVc9I1UrY1MmW3w3WWh7QVdYVXlCQlVbZSoxeWtFMmhMT0UzTnY1O0JdIkFmbjQpOnw9KkBYTlQuTUByWzpYIkJDc0o6YU54cEp6c35lNikuWzY1JiQ5biklUHVZOWozSjJGbVhDY050TUVBe1F8RDhaKnhSPHlickVyITdWR0c5JGJWUzAwKmhhcEgyYjR8SEltc35qcEgiK3BPNXoxSXJMX09z''@;'; put 'put ''clhdMCVMbTVHO2cvUnZ7VTNueTpjbzN9QH5AWyVnOlU8Jm9mcVEyV2hhR1orZX03U1lzYH59RiZhIz1CSSNMVCFjVFhfPmovPnJxTClKRFBTfUlLV1k6fX1hRS5Odmo3KGYlOVpZYVpsRXE9biNrISkjWnFMNE1lQ057a0NjVSYsRHJqbkp6dUI7Y2YkLGhxZjxXP0MwS3pfRGtsfm8/bjpDPCFf''@;'; put 'put ''I1BqQ0dlKlNMcU59cyFEKEU8OlliNWFvYTojeTYmbXs5U3c7MUVoVCk9dU1Ed2dufDQlSjQvOylBdXUhSkB7QzN5OFleZ0QxfHRUeEdUZVB0ZHg/NUNVOUh6YikjW1JoPXBGflsxZV4yTjZ6OnM8N0NjYjtiKGhGZnxedkB8bWs/RlpKVjZFe0BvX3RuNiZ3W3g8ZysrWWg9aE1TOEtvR243ciUz''@;'; put 'put ''XnslPEd4bD0hYn1UbDJJdUBRX11lMkguTWtwanMoT3oiTlJOLkljSzBZPkV1QipDMD14d3BvP1Y7ZCtoIz80WXVeOz41LHBJN0hAeU4qN3c6YEZEe29aMWcoZD1xKXp8ZkJnM0JBUG15TnYicjgsPn5mbD5EcThOai97LF9HPz8uMFtGWmlaTnl3azI2P05qWVQ3fip3dDxDcHBvbjV4X0A4Zk5j''@;'; put 'put ''PXY3KjVZRU5DU3EvJEo1KU5ZLChoRzkxVyJ4OnFWIV8hYzZYOE9HMGdkJEdWNENZVWhZd2ppYikwW1dkaClZRUgkQyglWF5nW1koMUJIZ0ZmS1dsSWwqYXxOIXV3YCRIM3pufVMuY3VnIjlvTVFwOnFtbVRyRml1ayZ2UyUmY15CTTgjbSZxb1ZHUFFzdCRScihrR3c/NWojIzJsY3F5SHRSN316''@;'; put 'put ''fV85NlJNfjhCaSs2WTshflFnMFV7LnpGQDlQdl9IRTsmTGhFMTN2XVN4NHllbiMmeWFeM0BUP3BUXUhrNlJgW2sjOHxwSmVYY1IqeTZxN0dKQnVaQiR+R21bbFl8YHdEMmY+MGQ4PXJQcEJjcFk2V3IxWHV7WChvNlQ9YkRWbVNFVGVlYTt6InhmZFdNfm46JnUjNDpgeW5jdzxNY3ElRkNTKkQz''@;'; put 'put ''eyQkb2NqIyMkRkBPQyE1ODdGQmNwNilmLF4oQDR7b182MiVTKGJRe3pNPU8zbzU8X2QuRTs2Xys7aUxkR2dQVypGe11QbEFlbElMKHg2M08lNVIsQHJ9YnR5UE88UGc6IkkjcyZEYTxXVjg+bFMxK2s8WTc/Lz1zJThyIntvVHFgeEB9c3tpdDlKY2l6TzNTKWNJYGtaXj5BWjRLJGlnbCpnLGoo''@;'; put 'put ''JF8kNFo8U1s/X1I2ZG5ESFQ7QypaaEpsKHNTLiNXWTM5cUN2Pz1XKCxhKjs0LnJodk8lVXg1UFFEQHd1NW09UD9gQVoqK0MzUWljRj5UdFlIdHhFRTpYV05+I19dXntoUVNAVSUsXj8veGVkbkUvfFJLe21eeHJmaSIrWTUvV157UikhOGMsJFtaOXI3LmlkQTFxXXxublt2NilHc3IrNjFKSjly''@;'; put 'put ''LiFzfSpiR2dwTnhCd3tRMTtgPSUmIzE3IkU1Mm53TTNMXixZSX1bayY7Tml9b1F3JiFwRUk/fFhIKmdfdzh0TzoyczQjJDw6VHswUlZ6MDFdKUlvSHFfNl9+bmBjS29vLztFUFZMKmBdbXNQLHdWMk9pND1tYX5aRSNAezN3ZFgxOT4sL1hUZHlmZzhbTHFWYGs3JUtMeCpONG5eamgjLFFoOmFO''@;'; put 'put ''ZEshQFErQ047Li5CInhpOiJ6QztpMXF8YUpqdDE6UGJqaiNYIVhjJUdrUzY+QDo0ZklObiloV3UlXW8mbVtqZy8oPyJsX3cwcmw+Y2pXdDkseGExQD9ENl9ZV3ZRX19iOnMyRittS3h2ZDpiez5CJm42X2N0cXpYKDZlWjFWMSt+N2BmeG96fnBYeEJ7TEplejpJN3deWU11YiNMaD1SZDViK1Aq''@;'; put 'put ''Z1UqMDM9NDg7O04mNnp1LjkuL2BGLndJeU84WmlPcFckLCwqe25aYyRDMkVdTyxFVUApTWxaNClwPk8/cG5gVjlUZER8OG9CUWlRW3BwbjQyMlFlWlM7PnFeeG9hMmQ7cGhiL2EoT055ck91W0olZiUzLHYyRSRkQkVZcSk4dUkvYT9daW1hb0pmInhacGBIWHxtcDx3Wlp6XkpUTl5HfjY2Z2dR''@;'; put 'put ''ZFJ1LDNuSjM0Mno1bzZiSCpLRHldYk9Zaz5FIjJYMmIxXkBvPW9ASy5eenxfR0FGVzN4ZWFWR0RnXVtkQDZ7RXhiWWp+VixGSUZKfENrNWB5TUl5fm86TmM5cSxBZSUpdElWMlliXUs7c2RSQyQhNCQzKlI0Mk58YUVYWSlaN3lXTTVIRiJWP2NMMl1yTS48IU03SXk5UVRFY0BpfGdbamM8bndA''@;'; put 'put ''O0lPJD09VV1deUpIKnJ1bVJ4PHsvRGFbJE12YUp5VV5NUXF4Xmd1Jj8lQSl6NWdTXngiSFdjRHpmXSgrdG0+cFBSeSNpSzcyUzRmOlI0a3V8WXNmWnNLYEQhaXptX0VtYXdLJEdoUiM3RDspMCJZZGdwXnAqQlY9Ojh+cGo9ZzFiUEEwUl44TUNhYC4qSiQkN3dkUjdYOnA6T2A0QFNbOVdqKH1y''@;'; put 'put ''UG9hI0BQKkprZyYpW1hOaX08SXF1UkVgM3NxU0BZPEtyQlohPDkhXzdPQVlHcV1Oak8lP1hwKkVnX3koeW55b3t3QVg6RVt9YjdyPWVlOjQ4bi8hPiRgJm9GRkQoXTc0N0B6OSN4KVdNIzt3KT42d2p7RTRaN2VPbGh1Iiguc2VWQiJDY3pOZWIqZDFJfGdUR0BELnxeeXxnLkpWS1k5MyR9bEZ5''@;'; put 'put ''T2BOcmNgZk5kLGhROmRhUVM4Q29mQV8wXTNfWjZ7eW5GKixAWmJrPV1pVzZtdkl5RDtZXXBpYUFvUl82WXMoVSRqSWJFQFYhJGBoTnM9PmJVNXEsI1BJflJfYmNrfk5oU29fSChCd2lCWDYxelNjdVRkZDMzPGF8YjdrN3l3XUk2V3Vvdls0OkI1bjsxZCIvX3lkJlk2TiU+Rk1LNDJgaytFVlFn''@;'; put 'put ''Jn5AT3pMUnYxbSQ8Oy4hKzFiVG1YdyhTKW5PR3dOPFNMPmwlIyEjZzg/SCZnX25VVTlSXy9PRUQ5Y0t7biUxSDNrRChZO0xxJWkhQ3pLITB9S35XXVhUTk0xRkBdflk8RTU7V0osSioqUm5ZNUE2eltefmdWOkYuTnt8dn01UHl6WF8jTEVWZytScT5FfnpBcWkoeXl2NTF5RDx1c1lmQH5pdWEo''@;'; put 'put ''IWFJeD5FRXFseGtjfGIyL084O21nb3A+PmwwbjV6N1paeUEqbjE1ViFPezpoJjh1cnxQKUdRQjw8WVJdUmJaVFskKW5jNFk1TlNyT3dTaWpJMlAyfUBEeUEkayhJPWBQR2ZebGBldTkoP2hEQFI4ODM4QWVIc0s3dmd5UXBjM0B9fDNpLzE9KW1UZU9ZY0B9e0J8Lz9rKjFLKlUvXzBlfiRaQW10''@;'; put 'put ''d2VhbW1nYTFjUSVRTWg/NG1UIX0xaSElRX40PndkeSI2bWMmRkdaZ1pRRyZhUHBBLGwjLHJOKUpVby4uWDtwbDRdZyJaOiRNV0VPaFZrZnBmKkR9bSYlczAjSHsuYH0xZl9zWGNBXlMhYl9ZKyROS1N+UUtzaSFbcEY3K1dFcUM/KyMzK0doT2BEI3RvM1BESkBNQlB0cFpiYlpoKWE8ZVc9cD4z''@;'; put 'put ''ODxLKCs2NFB+WlA9MnRNVjBwYyw6N3MkUTdEZHosQWJbITpvVTQxe3khTmF2VVVRcjQ+VERwQmc3bEQ/fXxdaGEwUWluWG1tfltkP19FMmJXV2FfcSE6bCI2PiJPWWs1Vz8ie1Q9MHBdb21OSlp4X0MoYkdJOFEiWmZqTVR3UGRbfkFVUFdWVTovc2BTSXtAUk8sODU4W3pXfiM7Uzw2MSNsK1Q4''@;'; put 'put ''KXdaRT48V0ltOShEJVA2N2w1eDZQfVhJaDZDQWZiQDNoQDlrTCFqdCV3JDVUIm5ySm9uM2ReMGE7RkNrZj0obFZWL0pESTpnPC5mO3ozTnB+UEwiLiZrNF4wTHNSdSo3d0AqQi56fn51S04jKGMmOmRZbGBifFdSKlEqR1Nhcz95SCpDPitWXkAkY2l6YkI+WGNKRm9NQCgzbGBdXUpIIlQ9diF8''@;'; put 'put ''cSlxUWl4ZEIzVDI7eCpbNjdmPURDZ0d8T19IZlNbKz50XjZ1dVAmbHBZN05QSzpkaX5PdHQiVVFDW3dyeElSM3hnI0BgQyE4Z3Q4ZSQufH0yPjNaOXMkJEBrYyMzODxrRXBadmhmSjpnSCM2PH5pWXVUbzM8bz5ybGF5bytAeC9gKyxSZ1hHaWNINWs0U1IxVnZudkdCbGNXYjl5JWJ4Pzo0TXY9''@;'; put 'put ''N247XlEyJXx+ZXlIXVFRNGF7Il4jZkNkdDk7ey9vKUBbOUZEPSF3Ozg8K2s5e2hCYXtFS0Rne08kQ0YvU3FKY2tDOUFlYXA3MSZreVg2PV9eOiJGTX1hJDU6L0Zrd0RNLHNUflQzUl9FPiZ4OG9MXlh3ZU1rZUcmLm9ZS290Q3suOCwzJUt5UnluL0d8NWssN0FXezNsSTg0bkBGcj9IeTdvaDxJ''@;'; put 'put ''ezRGe2d2R1s4LlZSWHxsNyRxWT5PLjJVP29tNC56QTpgNiFGRTs/XnsmZGlFd1R+WlI+ayE+VXdEZ1NNZjBgYzBWMVdycT1QJCMiJVQ5e0NOOTJfUWsuRzVKR2dPS2F3fDBOOD1KQWRna1l3NzpxfkR4c1FMUlJMRTdlODlqcSYyXXUhIUtLJixpZThhO3goWGclOGQmTDhiV28rKXhURjJaUEI0''@;'; put 'put ''Tkk6ezomTWIkW1Z8InNvOU9pKCprYkpGfi55SURtOXVpcT52azwiKkcmMVE/flslX3B4VEc0QW9bbWE1TG5NRyFMdXk/enlEK2QyPG9jXyh7MEEidFJzMFpzUixmQWpsVU8oa0JhaXttLk1CV2lTL09GWmtuXUphcTd+JWx4JE06KnxMVjZPOUA6e04rQlJCMjdoTTcxajFHNk9fYzdMKkx+RTB1''@;'; put 'put ''RUlNPFhPTmg+enleeSFxJGEwK2tOQ3t0ZWxSZ3dCV2xjfiJKck5Zd28sbnErKlVCKnYvcnlXVlRHYXl1Yz5KIUMiRio2QDxmVjtzM0c3b3Y4fElYfnUoVlprY1MqclNuMikyQyQkeVNrOzEoZ0E7RmduNjhmWl90UmdAcFdheCh6RjV6LzRUV3Q7Ry98Nz9qL2lqPyRpOyNDeCF9d0kkb1lufW5A''@;'; put 'put ''bD91MiR6KiozeV5HW1oxfS42WjNmR19iTz0kWlopRWd2W25GaGZPXTZHMGdKdFYlX3VARF5icX5GP0pAQEB+c3xCdkheKCtmeitkU3d2bXhlMHdJMilRdmNJPC8zd34rNlBTUyU5Ync2PTJXdENtZ1JTNiwiJV9ibFVqZWZCOyg7K09zQEBJR1Zkc1IzLkoqc0oxQClPfSFwJTlHQFE9Wywxci8m''@;'; put 'put ''OmdjeWZkX0taSmkvVllkeGJ+fEB2NngkL117YSxrMVdEWkBrOHQvI2hNRTU9SzxqeFYoZjAzYUIrdFFJZ1taQHx6LDxDPyo3cl9FTjRLRTdOJUp8Qkt0eHA6Wnt8NS9nTTN2IzN7M3lOL0Q4RFBsOlc7V14mOkRAUEw1UkBRIkY3TVhxVVIiNjtkdTclQzp+UFZkWDVHTzU3UmhPO1J4eWBRfGZC''@;'; put 'put ''L1dmc3hILHljUj4yLkshIlR5YTVOQ3ZbPitve3kxPjBpdHA5bl5yMntoTjhQOSZqMzRvMzNWXTBfQF86Z2MzQ21kKWFNOz1HKn5QKF13UjR+ZWNMMSEmN1dbZDdtJWplVTIjRzZiYTZCS3skbnAkP11xIVh8fnchUzYpbyZQfnsvTDo1XyoxNlpiajE+dElVVGBaRk84bmJfIj1balpIX2J4YiU9''@;'; put 'put ''OC5aQHZiRl9lTGJRXmsibj5bIStbM3wpQzl7bmQkODxLW2wqIU1FO2RlKj5McUEzdikzaEJkKFRzWG56PEM9I3IiI08pMVI2KG5LIWZRViZMQiNHRjJIX3kqK0A5a2Z6I3h+OVFXUXhkY1JCaUJeQjImWChFfjtocVFaTElgPk0lYyNxO1opV2BDKnNYTGluL3RdNCQrNjRua04kRDtnfGVoTl8+''@;'; put 'put ''VU9CblpFZmRsOVtjTV8pfXVoSFhGR2JbSGw2I0FMYCJCfTsmJTI1Nzg4ZDVHNWU1Lllqe3g+SmMqYkQ5JXhHb0YqMD1eV3hkP3d6emAvVWcpTzIuaHpFOD8+ck5tKnZKemplaiVlRX0+KlRlfDBDXSl3O0FCTyM2KkdNZCI4LmNwSCMpfmV2VCgjTHQ7VHFvdCJzYjEoVys9N0RlY01UP207MmR1''@;'; put 'put ''RWFQTnpkPlhQe19QPTdOUnZhKCtVLG5xcXo8WDVdbEI4I3g4SE5UQ20zQCJBWkFTbm11eD19e0cufl5Waj1AbTUzfUZOVXxOYFNya1clRVBuRFduRl8sYC5RbCY1TShEQzlObXAlLCx0MWlJTmFiaTMuOX1aIndHXV9nP1tJIjg8a2goSlFyL0x5Lm5ASn1uMWkrakUjOHYxRHkjX2xUN2ZsI2kk''@;'; put 'put ''UywvaXZ4YnIvSVY/M1R4ZF0xeElYKzVTeGpLVk5GVGlmZTRvLFtfeCpBKERLWVpHQzxxNmw7NF4kMVNZNFdjX1hkZCgsM2NbfHMwe1hKJCU8KGMpT3J1WG9iYlZ6YUhPbnhgZXs1ZXxlTVpBU0goXUBIZD81VFUkZ3p8WCx7Kn0ueFQ0OEh4cCtRXllGX3UhcDV6VHM3MjthWX1oPkxVJDRad25p''@;'; put 'put ''KDphXTZhLFg9V1lHOFVjLlBHa1FsVVJ1YH1XOm9efmRoPTZ3RTwzKnNubU0qZzVYPiY5Jkh2JUkpVSVeKD4xXlZ5YyYuSnJ1ImV1XkMxUyZrIltWTGUkQS9ZUlV6WWVaUFc5bThWWzgiTGdDN1oxPD91WEd1fWMySzhjMF4uO15Lbml+M281cWFtYFNJYUw8YlNmaC47KCJ1N2NmbDtiKllZdGp0''@;'; put 'put ''UGFEJFhJP1taKFojPFYlIz8wSFYqWHwsLFU6c11ZInRzZnVfYXR5LCxVN3BHcjBucyUwU3JWZGd6WFpwN04ycG9AamQlamkqfWVSbnxkfTgmOExINCU1ZG9OfTNGSilJNWVTUE92bVpIR2tCVnZtdDlHaUl4QEJ3UCh9KXNWIVhtM2kxfCh7PGEqbCs/dWhlfjlxKkVpVShKZXxZL01XP10/Qy88''@;'; put 'put ''RWNJcEtuZDBTd3VTcVRmUDEkSkRHZSg8QFIrUUByb0AmU3ImTG5QXXxVcTkpVTk2SmcrMzpodHw6Nk5YeiU9bUtqXnpVSl42cyUkdnNsX1gyfkVOTU99UE12WVhlKnR7czAoNnhhMD9VZUtyZll5JS4/QyUrck16KDlwRkp1RStzZU9scUZ5TyMzOUk4THtGRUwhQ3glenAzdnJdX3hwLD8xcUcy''@;'; put 'put ''eCRFZUk4TlV6WENEPnZDZlcvcCkwXjFjSktQa1llPW8lOGIuSktqSVN1IykqPWMoZTdnUGJxMCs6ajREMHlwRDh8ZkNkPUxXbyE/KGY/fS5eKkJ6QG0+PE1AejpWeiNYTHxieGFGaEV1PUsqYysheXl0cEQ9JGU3cnZmO0Nde2g1QDJ2M1htIkRDU3krPkB8NjQ5fnE2M0FgQ1tbeGxiMlFsKEY+''@;'; put 'put ''I1ExNU00QjZ2fWJAJT5NLzQ3fGV0YFppIig2c1pFfGp0ViE1QntxTzM+KUcsZlIqSz5XKl1SRkF9dH59WGF3W2E9Lk1YRUwre14xakU5Om10RyRvNkhmNSNdYVFZcShrYilCPSFCQnUsWk1dSnc3OCJpVm5gdjJ2PF1dd2xTbTs/Qj9BaG1dTSllTmt8UVlebj5VbWI4UEFBVVI8dGl+Oy8sWyxQ''@;'; put 'put ''VD97SCY8a2RAL1srSFYsYTdGYnxdJldqJnNjeTw7KUMxX0cjQFg8VHdSI2ZGdiFCNzU7YnJ7QkpRXkZLRk5AfTJNa1NMaHU7Yk90SD9uRGleaWk8W112d2tHXzsmRmFyWikvXm1VcGEwYmtAc113P2liZU91RV1geT1vcDdZWDdFek17XzlKKCl7NF1wbyZgISljOGdkejglNSw9Mzo0byVrRkVn''@;'; put 'put ''dndhOzdTUjt5UkAhNXJjTmNlfT8mNklXRXI0Uld5TFFeS0w0SnN3ZTp1R1VqaS4xfCpiYUM7SShgUGF3KGpfcm8+a0ZNNFVCQT9eTigzNFFJXThdKGYyOChNSnJNS2dWWl4oNmdOO14zMkVuNmBSRTMpMHUuL1pbaUU1QjR8fTQ1NXxlV3lvJHJDcTA5IyZoZj06TVFTRGlXcy8xWylmSil0XiZ+''@;'; put 'put ''WGxLe0phPXQyRXxdb1pkdVkpKkU8NX00RTY2K0ZlNGgrUG9Ob0pHcTUqJnU0Nzs/LCl9b3k+fGQwaWllPXEvdjN9LFYlKGZjU1lROmozdyRedEklfnpUWFhONHsufWpoKzVYY2VoPWR1JDZMOH1UPXRTIVVQaWNfaC5hfXNFNDQ2JVtvaWtUYlB7YjUqJFBHWzRRaXdqSC9BeUV4SyNrT1clNVNA''@;'; put 'put ''ZEVRUVkoRHcmWk1XRiQ6NiQ0NTw8SnRQdW0mNzN8QzdoOmk1WmlVOytNO1AzQjcoOHpAK1NebC5EfSVXPltKM3lPTkUpcV4uZWZqSCFFMTp2SUBReldjKmAqYlhISXRpem16YWl7Tl40IjxSdCkqWX0ucGdSSis/ciVLKV4zSjpXKFBGUVlJaT5bcC87YDdMNHtqYXBfdE5tTktCdk1Ia3hybiJ8''@;'; put 'put ''eSoseHBBfjppa2BYOHJdfD56UDAhVERqUSV+QllLMyJpX2dre2ZufjokMUEyfCZlfn5XZEhhP2c1NU9HRSxNdW13eygwTnVZO1VUMDpsJkI7N1AmTW1Wb3V4TFFzQXUrNntkTz9gemBEP2s6a2VhfCtufSxhTHFtYyZfLHFKdmV4b2NLbHciQ10mS2Bsdj8yZDEyUmBUbTZvTnYvUHxvUHA7N081''@;'; put 'put ''X2pIOzk+YXA6NHxie2F9c3pYUShZVUJ+Mn1sYkBdYCx1PExtJFI/KlJlRj94blFhME43LmlAelgrMCwrRWpbUzRRO1V4VHVVPU1QLmJHSCRbb3tuMlhCOUBUQX1salkuI2oxfXJWe1h3L2l0Xk55Il9ScVI4K0Yqfl1bU3dCZG0qTDpqJGl9M0owXmNnIWhOU25aUDhPPWVCPCM4dzRZKXovK2Nk''@;'; put 'put ''NXk6Tzc9KGNVWWFGYFNnSSVpdSwqM1VlPTgvPE9pKnVIMlN5OUxVLikudVhLeztwbXZHPnV7UVp0KDFZPV1aVmg6dyxIK15WWV9aV2N7RWlvNERLTzkpYmNEZF9aNlFVLlNIbTlXSyhFVz9VQyJELls6Uz5CS0AuYzB2UzpDSm57NXFCMWVScz86QyU5RlRpIjtLfCQufVgvSml0dXNfKlU+SjpO''@;'; put 'put ''JUA4Nkl3JnYuNllLVXZbfXVPQUdVOE4xM2xtWncudFNRWXBbYjFQdDM5YlZtKlpxOzpoaGElOX1PMkAsaHYqQjw7JHY7T1BEOil6UEl+UihEY31qUkI9PSQyWE0xaVckU0Mlfi53YnB5aHBHJl5jcnZ+emQ5N3drOiFRRjhERHFFPT5DTDMwbzZDSFQxXnleQUxfPEd5VkZwbG53S2QySn1MOnl2''@;'; put 'put ''RHhjL2d+Y3pTKy9PMz51VTpqQS48SikobHw3dFI9ZiYucCN3OFQkSmJgb0BFPTxaQTN7dHdbQ198LGBlNShDK15lY3FpQXxZQm8vfTpjTzclNUVtYTtGRUs0QyQ+V31ZJFAsXy9JVlZPZCxUXzBPaUIwZlhCd2pVdllNODs5NmElJE5MVXg8WXJeLno5Uyxpc00hMzx9ej9hVTwqcGpPLmgkVUBa''@;'; put 'put ''YUdSS2JPfjNVKFspJVRWTEMqSHV1LGFSe3EsNEVALDF7aH57Ll9sJUVZZ01kej1sYF9oZ2AuTHg/KU9dX3dCV3R8ZChvMVZFYXZNcHwwRGNacHFZfjNiRnxzWkJeaWpiMVt1Il1wTytmYihlK3tpaTpDL2dQK3YsN35DRnNjV3BJN2wrWlZwWFV2YTNgPk5gIWwhOCFOPjd9akJxKH5+bSNRZStW''@;'; put 'put ''PjEzKjNpd3U2TTtxU3hacEldRHw+Vzc3S0h4NWAjK04zZ15FQmZWOzZVXVIlMitvTExdW1ZILzJrbEdCSSMkIyRYdUdPWzQiNTp4aTA/bz5PMTosK2JYSD4ybSE5PHhpYSZ8QVFUTlBgMmYlYnV7X3lfb3EjZjRPa2pXbWFULHFZOGdCSWkiPHA/eTpoIWxxQ3xxO1dOL1I+cjZVRj1Ae0o/diww''@;'; put 'put ''IVp9eGBFbldaa18iOVQkKGFoXnBkWmRTPUB0Q2pufWxfJXphR2s1VGIxTWFnNylZQ0R0c2NGTk11cDZxN2JpbUJtdTled31BKGpWR2A2RCU+UTZMLnQ8REkpMCxvIUVTU2JeXzF2fXl0cUs+XUxxeW9yPHRCbyk4JnA7KlQ1eXtqbklLdV1mRzAmNHd9bnEsU05xJCVGY0NTd1k/I35DVWh3Qm5E''@;'; put 'put ''NiU/TDtqSjF9bCgiZ10uPzViS1BndjRnYkBwb0NvQiR1PGdmO3U1PV5UNVByWSEiaVUkJWE7cytyczRbQjFCRnJLWipHUiNRVyt5YjsoKU8rd11eRE14TGYjXm5lVThTcnJhOFMmVEt1Um9FSFgxeChBLCk1fVhGZSNUI2x0NGd9XW5qJkBgeStrdmJGfSZyRzhZLExMRyZ9IlRkWDArQ2tgOTc6''@;'; put 'put ''bz5VRylrbGFyJmJqXnphbEVFdT51Myo6P1pWPFdFK2EvL1l6Kk9efTFtWzJSXzh5elh0TFJ4ZXVdOkhTazk8bDc9TWJKMitfVCUucHcwbEc9RWk0cEE0Kz9KMU9ebjxuZjBONHMqUSp1NFNGZTAxbjViQSlneTA6UFNbSUp5e1kmbXssNlA7ekpXPyxxbndtVCsmfWBIQVVHTFVWVW9KQ1smXWh5''@;'; put 'put ''KSJ2dzcrOHsxVUplMkpXOTV5UiI5e11XMSM7Wn06KmlVUXIiTiJyai5SR2Q2ZnhEIS9gTFNpdExKekUqd3BqXStRMGR8WzZDS3RHSnUsckN1VjtsJlc/aDU+OlY5c3dUWDIqTHI3XiE1WGNBMUt0Kl8yQ2YxTXskSWI2MT5IPUAmbCkuJVVtaDY+PnR8KkZwdkc+cS98I3JFXilOcWdLSDhzREQm''@;'; put 'put ''P1Q2Mz05UVo6TV17ImU5UjVdbnxDXV9zbk9jPiVsLnUpSEpiQzQkaU1IVEJjWlB8VVgmWThSUHI0YV5HND5vSnl5L3A3XmVQY2l7KmlvQUp9ZUtXUzNwX3ZyQ1pTOUJdMHFmXSQucTtkeWY7XSIuTS5YYzhlLEtzbEcwKjVsaC9IfmBiI1FGUj0rYF4+Sk97QDkjYi50SzBvOFk5U0xCTC4qVHVw''@;'; put 'put ''QSgoPmJmcTx6dSNGMHVpfi9HND55U2dLVihIKn5BKjssWCh0U3sre15WMjxfUSYyS3tTXkxgWHx0VUpZbn08a3hLOkQ7VCtacj56REBeWy5ZO1k2JnZyRUQvQnA9eH1NPF5eQT59QX13RUkmKnslR2U3c3BqNis8bz5OPGo9UXNqazwjNXthPjlwOXJJZSpBVGprUjQ2UEhKKVkwUSIsPUxpQ0lg''@;'; put 'put ''YmQ0LF8zbCo8cUZJcDBhdXU/TGYoSzE9bmEiRUlZa09nZWFpQWFUbUN1Q0dMQypDd00lMipbWDhbIWd8S0ZRdWF1Ul1aSEZpazVCR0Y6IUBAVWlQalpEb3QqMXh0NEBWVHsrZ34zMSswMzVAY2pXa3hjQWJGVF80cCpVbUhfWFMyPzV1OWdZdTp7Nyg3TyptRUhlWHprcT9lZk4saDt0PUhhZDtH''@;'; put 'put ''a1JtbzI+aDBpZzkzSGM6eyRgbiModzNDLntUaDshaUdwQFcjbnwyP08hVk0pbHo0KVl0U0Yva1F7Y2whTyZZOGBCdnxtOSRoM1JFNTkwTWFsOXx+V2pzXVB5MzwuYzRnRmltSXNDfl5DPzJhPVYsbjBTZiUmWmw4aEA/VUxZUF12SWpgKUo7ajA0VXxbQmVZXkshI008bzpIPWg4JEk5LiwjXiMv''@;'; put 'put ''PGIqVDM5TF42c2tMPmBIbyJRMFU5PlkzQUM9e1g1YEchVV02fjh2RklgWVM7Yk8pazN9cE9TckV9JlFeamdFR05ZcjhaUjRWekYzUE1sKDoscTthcllyWDl3Ois3W1M0MHM0UHNAPilodkN1TXghQlY7ang0e3VydyVrKlZ6RVNDWURGbFFVJlBiRis6KiFxMiQxfDldc1clLD9Tdi5+XytfOyxH''@;'; put 'put ''Wn4wZ2JJME1ZRnUxQTpWL1pxK3MsIztXX0RFaz5xeH1HIjJUKTtjMGR7fTlUfDNpaUJ5e2tLVHp0WCQmez9fInoldFRZK0R7byYjYmU4VVhSMGh+WlVaNlYpdXx5c2MzS2wwcXQ/K0lSZzhoYG5bKi8/O1UwfFhqOH10Rm17OSIkfDZNXiRZWDUkKyg1NythZlY5QWNaYy9xIWFJOVlASjUvJV1W''@;'; put 'put ''Vmx7PCFlVXdVZjwvOGxgRi8wJi96JEk4PiN3bnd+K1sjVHA2IldfST5mT2dFR3RSMTokNFtCSWJhOm17W3Z3KVMofWguNUM9dGU0WGRiWl0+TE5bWC5ebFtZJVZLKjM6dkMhNXtZNilJNyZ2RTVzbSpAKH5IODRCWEkhKlF+X21ZRH47SSpYZGc0ZGJGIis8YFovSTQlLyxnbnJ9SGgqb31TPGM9''@;'; put 'put ''Rn0+OUFiTnhudWtPSHd1Ly9WTkVMXiJuaT10MENheU5kWSV5KHcjKG41b19jdENhYjkyQnwwMi9qUDJ9XlRuQGprdWFVJG1eUGlbPTVlOCF7ME9tUSElK1Z5NG8heEFxP3ZDaUxzISFRcDhSZktZR1Rhem5gO2NCbV5sU25aeHhpcktrLiQ8TGlSZ0xRbTp0RGo0aiVkdW0+Qjg2KjQvKD1xeE9M''@;'; put 'put ''M2AoKUp1W114aG5PdDFNcXpgQ2JkRmo+QG47e0w4PUByIlJSVCJHVDdGPzJZMlBEJUwmeWxKQixZc2skZlhPUXleSX1xOmZDSF0rM0ohM2pEPXU+ZnNeWWgmW2xAVVtEOjQmNUc2aGpJLEZVUm84Vms9bztCVXZ9MnpeNFFmbnt1byI5UXU+Izh9Z2NWPmJ2KSwpSTFwcSlBOmFTJk19TX52Y2t4''@;'; put 'put ''L3oqe2tyZlUwe1o+VEpAflpZKXJTOkdoVHN8VyNqKixqc0ArSjRablR5YGV7OjNBZ010filQaVBIRUYpWCJlPHo6S3ZafVE5WSIhTEVmUVpVaC4pUD8/eztwY20+Zj9tbixBXVQoVllIeDI5YFhHbVlhRmRbITRSNS5UZzdodXNqVE5TbGE+Sy5qZi5vIWJ9KWUxXXEvSERZXzVmIX45T3tdVHl1''@;'; put 'put ''PipnO1RHYkBOUltZRiZPJkcxIXtPQWdTRyMqWWRrLH1iNWpEdW4xcXY4TUhYaCxHNlUjfSRxRzV9bDdlJERqUDMmWjYmT0pBKi9aTihKUi5gJj4kM3d2UWltZ3olfSlLPTZFfTgxIm1SYH4ibU9eZz4kNzkjWCZ3fSozWXcwU1VqUXt0Zjo8RU9PO2JYUEVdM2g6a1BQeU00KkIhIyFiI1VENEJ0''@;'; put 'put ''JTJ+PW8pZ1NhVl9uUDV2WUVPOmRFOHxwKUIoQ14hbWojUElvP2xlOFArZGw+dlh9eTpUbD5ZN0xobDJwNF9se09xQ1VQR11BMX1JY1Y+P01GJD1ULER0MmElbChvZTZsRilnPlUpVSpkey9WREYmI1hvK3szVkxQbzoranUzXXRAXnpIXmBVNj5eOyF8bWprKTxOcm1LInFCUFpeIWZMRSxGVDlD''@;'; put 'put ''YzVZZXx7QnpbSldpKlYoUixrdjNNUU1tXyRxYmF2RnJ4azMxQGtELEkqR341RWBpTStkcEZUUzxbZjxaSDVPUE5qZ3BsaGpBMi9iNGJjKjc8JXh0ZUxXLGJtKFA/OlA0c0dFO1dESDo1RSZxSEpzI1lFdDxfcCZHRzVkViwjLDNdTF1MZVlaKH48dHV3VzJfYX53UXBFYlZiO0NOMmFrNUpYTVRY''@;'; put 'put ''WyQ9I1BFd3gwTyxaQkVwMSx2JVBoODBxQEtbMER3W2pvfVZ+USgzd2kqND9OLzJIU3E9YzZhNEk9ZVghbk0sMHk4cSM8Vjo8I31eLms2U1k3c1RybmJvXTMzKG9ASk1HbyVzelFVVDpZKClCY0EzKE1PWy9gcVNvZU84bD9UcXRUPF4ia3NGaGp3O3gpQDc1fVQ4M3taL2tZbUwpclIoWylqUEFB''@;'; put 'put ''YllTR046XTgkeU9rKW9hLGMwKVcpS146aDdwdEs7ViNmblNuIUJEOjlAZ1NMbjdGKGomKFFNPFkwSzQkd0o0MCkyLF5TcDFGSkQjRX5LZ11GR2NrWlBRWix3KEM5V1NjYC40RWc2OXU2QSFLaEZiaTF0eG4rY1krQEY2UThIZHwhazNDeUcoME8/dntVKjg9bHomfFN3U29+JS5gMV46IiRmOEdp''@;'; put 'put ''dGRmNEVpN1doLjRUPFY1cCskWzhPd0g/YH5JOjdqXVo4JlY9VF97dE9wYnpLSVhPOU90dVk2YTIlSUN+WHRxTDFAXVkqXjBYel5hQStXUzNHI012I0hfP1d5dVEvc3ltRWIha0M4OUtLW35hYHN1PW85c0JwODxqL0JzdTRwLjp3NE9fa1lUXzApaSlEQDEwSk0uZ21HSUttOlRJXilbJnpSLERF''@;'; put 'put ''QH05bjB8SD1vKU5JOGM9NmVaPlJVKkI+fTs6UltART1jRzRFJl9gdz53Pi5RSExANmVGMz5MMWtobEpYS3AjU3k2bngvJCo1L1hGI0BYO3tyfHRfKGN6ZVMuc35uQGxuO3ZhSzghLG0lRT1eOlYhNFlDTmlMRF9pLC5BXXQ6YlBBPE54enhKTmN+K1Bde2NGTzBZeyFtPSVyUDVjdTp1fnkjWkcu''@;'; put 'put ''Ty5gYDx2QiVuKztmXVs2Vl1jW2JsSGk1PDBVTTVTa1c1bDwlbnNYXSNUTlg5QS5BUm1YPW0sMDBTR3cobix0SWBaN2RyaT57Xj5kL3olT2U+VSxPWjIqPnVXfWF6Kn5QcGRqMlNncHBDfSNXKmtXdj1nem9XVmBxcTlJMlhabFsqVl8/ZSVgZi9Wfip+PWNjWGtneSpLNHtlUkpvXmUscnQ5c3tJ''@;'; put 'put ''czBrZXxQNSpDZS83ZVRxXndHeCE2K1RJTXc7YVEoOSNXVDNjKnhFIXI0YkVMK0NSdGdQPjducjl5MFkuaFlec09gby5uOlJZIjxveVlgKk9BMSMwOXFMaDVJWi4rQVY3I0lpPVp8YkxZU3IwQl0vdFphImJbIUZrSGY8NW8/bDJ9YXxaZnhvMXt7UGVROjo3VyhdTT5za1JuN29kRDpzUENDeylV''@;'; put 'put ''MzBzZXJJKWx4Vm4jWmhPUCF7fEpWPSNde0NLOG1bY3pnbzFqfitvIkkwRDpuW150OG93NFdpfV54JHRWSHVMb3BeSCUoUHBPYCx1dVVQZWBaSk9NMUM5QFAofH5GTCxpUTs0VTY8LFZwZ3xlI0soVUVmQF5hNz51c3VnIU1LTy5lVHRyTltHS2Mjd1AyWnUoLyUzUCZ2Z1FaOHN3TW0ub30qIy5l''@;'; put 'put ''eGsiLG9YcCprJUt2bihIbSRLcTcuNyR+VUUxW3gpT0I+ZX4kKndeQGV3Yy9vJmNsZ2RuYjhQZC9RIi9aey9DRjJabCE5Rz8yYjpkVXQlbyt2RVVrVD1Te1FpVEcyL2FrfE97QDw6aCx6USp3eGE4Q1ZhbUcrWjNSTHFKYH5zQGwrY25fLnVnJCR1SlRUdGhXeS5BO05+RjFOdiM2ZVpMPn1xbiJI''@;'; put 'put ''P0doIXZ7bUVhfk4uaywkV3BtPGxsM3FVL0MjK1hYZGkkbGNXJlNvVkZ5e19kMXtNSCFAbXJaYCh5RURkQl9PSE9XZS5uaUw6ZCNzRGBQeG06LmFpUlRac19jVWdhaV93Xz1gUCFyP2M+anVuZGp0LzM1RGheSHAra1RSYTpUI04scC5yTStVSkp5SztaVXhYMnBMdXVUZ0pzTHhYeG8jSGxKRW9t''@;'; put 'put ''ST4wQ2hvXkljbWhpRmg4VCYwInB7aSRMfHc4QH5XKlBvL3tmPyQwVFA0fStCXTxRN3g6X191Ok9qYUk1bkMsLm0oOjR7QWclcUcoeCtiREQscHVybHhFIT9mSjN9Y1FwOzVoV2VVWCl6dW91cWZWbDBYKF9CdHBGdiUjZkpycnFKUUZrKjxmZlFMRWE0a3cwYGI0fT1xWWloXVQrbEt8N28xL2te''@;'; put 'put ''OE5jfTZNQisyVSJ5QXZlZD0vMHEucFNXPCMvOSo/InlEY1giQXFXL1l9RyYwS0dpJXM0NXFMTHIqbnQlTFpNPDFESGcqXnJYWUZ8TWk1S2tlY089bl0kNnJMOl02Xk4oWkJId2IkL1RZVzs5QmshI1dJbyEycXJEWiYhYH1JIWZQSkZXKDc4d0c2eFkrMWJFXXBpL2tDJmN3LDcocy8kc3MlZHV5''@;'; put 'put ''PHM3RT5tU0Rkc0tKeW1BdDBBcS4yJTE5InZtWERRZ09pPWdYJjRKPlNxcmxyMy4oeDpCWHsuaH4jLDxUKDhKIUo3elJ4KjBmY2VlaTJ0by5oRU1XJlAlSSk8WTcyVm52QHIoKGRRQ11PKXVUNEtqZGNGO0x3NWVjU1NoUk1PUVQiV2xEN2NnZU15TFI4ZWZQWjo6KWR+b1Vtfk07dDYuP2RHMll7''@;'; put 'put ''V1s8PkMoNWFOSyEhZVN7bzd5Nm84Z3NhaiFlLFhJXjNjTGQiemBJa3BnNCpOdnUscD5dWnFKRipjeDBRKFs3OldYaiVyPEB8NkojUl9jaSFTLHdUZ105OiU3XihJaGxdWFM4VHVSISl+cCY3IUVHZ2RiTCJxNVMiMyIjNmBRTVBVYi4+TnhAJTw0a0VxSl90PllMTWxxdiZEdmRhTyR0QCxRUzok''@;'; put 'put ''aXpGRnhVcyxWLDRxX1V4eiF8K0cjK3RFbExNPEhgUVVwfkVWMTRlTjZoZjVbaFhfeChdKkU0K1lFWjgqbGw3JmlNWV01YE1pQmFsb1F3blM1Qyx4X0Z2b1sxOG1sSnB7LChgcXU5fDVVS2RvPjZIeUVFekpAdXxLIWk/ZmJgR1lPPjZMV3o5cWhXPTQiLmZxZkhFT2R+enQvL1hnO1BAKmd8U0ZG''@;'; put 'put ''L2tKIkh2KV5JfWc2NDZyfmdLTCtYWEYpV0l3TlFpfUhVTzpDT01lZWxBa15KV3V7aWdDe3pdX3teeiNtYjlwQEYuQEljKChPWjQ6WztvQEk8al05eS4pQ10pIWRIX2JoLE97ZGQ+XllXd3JdVF8vRW5RfEdPWzk6UjMyL3huU3VjTnp7dCsqZUJkK14qaXlaeDJON0syKl40Mzt9L29xJSJbQ0J9''@;'; put 'put ''SF57e3BQTlhHJkZEe2M/aERuWFhzXyZVeHglI2FudXlCYVluNSFNQVN+Z1ZqISZENkNqWCp+aj1iOHVGUEVQSnooZGldfVI4cXYqbD9RVCIlR2pYP1JuUTxHQyRQaVdIbDJoRix+UmI6TGhtN0cyZUZoUy9aRD51d2Y8dGtNOjQuJnBGbkRvJWojJEx5K1VGP31ZQ3xTNTgoOXZWMU18RV94cEsm''@;'; put 'put ''eU5XbnZdfVdLZFhgTX1nckRufFlSTWIiVTNDaWd9TEYoQXNuRWg4Kno3YDMmc2VKdyttcFt2Uk4kM0R1RlheWyNzaW42Tnk9MSM3MTVzaTwhakpCQ1tWenFXUDhgbGkqRWkyQFY5KiNKe103SyVldUs1OWI5KSRkdCx3Jnd9fnwpZz92ZWV3RVIlLztHblE9NyIrbT1+e1RIVW0qWV1zIythNGJl''@;'; put 'put ''JXlJUFAscSFyfHUmP2woYTpWMWo4ISZXO0MrX19tbF1pQF9jdWFXJU07M1lLOz4xaHxQVWRoMVp8T0VXaFlWMyFXM2VrTlpefW9kW0Z2VjJ0OWVbOX5TUEZVSjMxUn1rQTw0PXZtRyx6OSMvVlImVSJhIiZxaT5LVCJ1MSZ0RVV4JnluMFIwaVt3czg8SDZCMD90VH1yZWZ+d1VmYS8/Q28jaHhM''@;'; put 'put ''dlVpQHFOYld8aD09RjxdK0MzLlFnQnU9UH1TM1JIPFgsSHQlRTQjbSsieUhpezFXP31DTEoqP2ovbHYoTit0UlJ6TkpWSyVBTmVSKnhXcGl3bmRROT1pTUVsYzF2dkhiMmtOY3V4S0F8LFpSPV4/TSJeaz1CUltyXypJUkQpV0c7bnJZR1U3dUBpNWtfS3U/V0IxKEdHZjpRXXhvNHJ8SjdwRW1n''@;'; put 'put ''fD4iNGxMfFQ0L1kpYHVFZis3cXQ+a304fmtgKHt3ajs0fll6PyQiJFI1PFpqe2lFNVpdRzJgdnQ6Ml5uUkx8PFlZc2IqQlpKcWwrMGgqc3dYOnxoSjY7OiUqPXNoSSN9WHpKMWppTlk8VndFP2RpVDJPJGB9X0VdXT9ifURHVGhlPUhfKEt9a3VyPXA8QVQrQnk7RigzX1c9IiRSfSQhV3Q5VHx6''@;'; put 'put ''M2ZAc3lhcz9xflhaRVlMJXQkTy5Fe0wwLn1ZWTAkJXN9JHUkSWp0KFNjWj1WK1o7NUg7Lkt9O2xnY2soK1J8RzQhMjVCWj9UWjhpXlI1MUt6NjYqKClSW30xYX1Pc25ZS1ZqeUN8b3o4SD8lYHV5Rz5PJjRtSFVHPH01Mj18Y0x0RF9XWlFLPDNjekhgUE1mNkVacjQhXUpEVmopVVNtZ1MmW1I+''@;'; put 'put ''RSgxazFKRGddXyNudWFHMjw+UTpeKEV5eWg0OE1xI2kjN1NgJjFXYCNPMSkzWllxOmRURUBdQzhKWD1iRS9QIktDJCZVbms0SzZ3OGhxe31uIUNlOmJiTVl6bUpSe109ZF1iYy5tPm17MytfO0FOKHxfPjJPdEFZOFJjfDJaXzBXZmw9SUc5XVkmOkteSWZHdEV0SlFuQUV3UXs1Pk1pRGtQYHJQ''@;'; put 'put ''YGhMTHdQOFBCM3JucXxmbkRlWSk0eGdEZWsxKERHOyoraD10NEdNKm8uUnc/fChTOzdaNnVGd3kuLGxDfDdnV15rKkFHO0piPXElR10oe25oIUdFMzYlV2xjRTRLc2JEQEw4QWZxRSQ1M2IuV3ZoT0lvWz1EQz5KOlZLK1h1S1B3altkV15kPDRRK3xwK0d3aF4wWGdwZy5oYWZDUVVdMkNkeV0x''@;'; put 'put ''MVsyak4kZzw/VUY1STM8W1NWUkMpNmxkImo+L2ZdUyFSRj8sem5CV006Nj5AaERoMkkvcDdyZndvXXx6MUJsbz99Qy5+eSI0c00jKitWcys8X34iK1I9fiRBMSt0P3NgcDZUUT45QFFIRm82Y0VtZXxEazc+MyxzJnF+QVRGckZKdVsqLm9QezpTTmY6U35KYU9MNXp5cEE4a18jfn1aZmghdkhH''@;'; put 'put ''XWd8Q30wfTZoU1pmNGMrbV9oaj0kWF1fdXtYVFQ5c1Y+d1JPQG1UXkQmUnlwJGlVLyV1cWYpfSQuN2MvVHQpeElxWjtlUWNRJHtRKVU0KFI7ejZvVDRoSiVGVFloJG1XZlIoZU4pRi5mdHIuQ0dAQm47LlBLPDNkTUA9P1t3Y31LXmlwdyZkKTdHOF1nXjZgVGJYTDE5IXFXX0YmWV14VngkfH1P''@;'; put 'put ''TWY2cSkrKHd9OkVxUDMvYi9sK0BPJXZJL3V2MUJ2VkA0LG9IN3h9VjhCODtMPnF9NiY+Om8yYE82ITx5I29qX2RQaCxEaF1gVFdkRCxyemE1fnpUOWI6fD9uPGFDd2FbJGlBNVt8O09XMCg4aENaWXwzXVlBYzorTnN7QF1HKTA9REQienRYNTAufDg1KXZYKGhqNTIoYXIiQTpwbWB8Xm4hZCpZ''@;'; put 'put ''OlR2P3g7a3tDbmlKLiRzOj1SWlp6KTRCKipTLFMrL1Bicl4wWSlFMTYzb0o+bjBQInI4VHZTOzVSUXkhTDk3WTQqZ3dDWDRJaUJmc19EbFYwR3FdPjFNUSUzX18oemkiUT4hWTtYRXAsQE4xKX5sPywuJVE4fj9WSlcrbm53KmEsLmJeQH5QQmImITxOZHc3IiJPb14qSnx4aEhUY0ZMW0dhYUM6''@;'; put 'put ''NCZ5MVZ0dn5WSCVCV0J+JSxiVFpYfkw0QEBeeXx2Jnl6eSIsQVsjQTE2QjRUVDlncjUhczV8cVJERjFRNStpYWg0U19kYzJfMWohK0BWaVRXLDJ8Ukt1R25KW3teTzg7KyZpV2MrN01OJSJiM3xmLC4jQi5VQkRUZWM1TmVYQFRDQltOc3BfOVs8TWFmeDZjKCo+eng6UHdBZEQqQDlJYyJuWWgj''@;'; put 'put ''IzI5LzxeWys4UH4wdy8yOXB5eD1hOl5VfHI+VElQK19SPHUoNkBXZHgmdWxAVT9kWG5uIit4W0oyeUk1JGwlOUxnbTJHV0IrSG03dUhjQ0RwNkxUMmhZbiksMzw6IVYvfUFyKEo8MCEpPEJZWE1bTU1HMWV+Q1U3Tj5oRWR4LFksOnZfUU0wazdkPF1BcGRxank3dE40VVEpSmdHcGhWdzhJJU9Y''@;'; put 'put ''eV8mOFRlJT06PCxmVXtPPX55dVJ+WDBvSiR1fDxea3s2IXEqLmtmTWFyOXlYdFZOIkV7dmxKI1speXt0ZVV9IVZ7S2RiaGsrdTZVeG91YUFJOF9FPTl8KkpvMzZHIzBQWVAxMTNIXmVZWDBFRTdTSyRtWzVoaU9mS1FXND8kaU4iOTpacDo0R1YyLFVDWD5kMXUhMmxOPDBhWUA9cEc+cFQsdUNq''@;'; put 'put ''LHtOT012RjcrUjU0UG4qVlMwRnB9YylIW1dJdzZ2PG8uVSVEM0BqRzhLOHFTIiw+PDUwSDY8Vj1PJUlyPWRHVWVMfStFJCttSElMbj5pOSNSait4aDR6ZH1Fd3twQG97fkBVYjVaV2FGdH1CQlpuYkUmKSZPUGJOTy5lS3tTSiM3OSF9OjREakBuNHt0RFJUeGE/ejZPeHpEWlV0eXpdPVBYfGlC''@;'; put 'put ''TW4qZ24kbiZvPm52L11BTChbOWNLYjBXU21yQXY+VCRhXnlUISRBPltpN3prLEwrQEhybT9GbiRdNilVe1JKLjZHMEdASF9kSyM7eF88MER0WSg+PDt5NCh9L3pWNixqPEg7SF9UfmV9fUhZeDkhdm0jNUY6RWNwPCRNYVg1JCFkfThSIUo5U1ZufVNET3dJWG1tU3BmWGclRyl9P0xXWVNwTmh6''@;'; put 'put ''PEUzfndIc3d7eS8pJUYhQypSYyhpTj1gTjY3W3JVdVFtN2o9bn1QM11AM3FGSWYjSFB1QUwhbTQoRFsjbzheSCNmMTBQPURyfDc/JThFdTkhdmlzbU0kciUielAyRVtiOWY7Oyl6bi4+VEkpZEViSUE4QGUkbUg8a0ZHXlRsbFRHMT1hTV11ZTgubEBkWD9RNzI3b2FsI0IyPCJQXV4yRiIsSmcl''@;'; put 'put ''aT1ne20vaW8rUFk0bENVSWNEKT8pPVlNTlQjaG9kWX5eRGYpVkhbO1NkZ317SU0+NlZFWkJ2UV19V157ZkIsTjN0LyN3eC83ZVUsZF0oYE9kdTskYTZ9LytCODF5LDcpb11xWW15XTwoTUtIPylIXmtMQn0yd0M4QWpUOzVvVVsjXmBiImtkKyplOEZWUHtZQj93K1Z6b2BuPFBfcH42O3VYVmdO''@;'; put 'put ''Xkp7Z3RSSSxELlhTOmthQ1ZfMSJ1TWc2MylzZE5sczs5VTU9fVRVKVN0OEhNKlssPD56UUlqbz52TnREJERZI1hJZ3Y7Ly4kWjV5OSpRe2JjektaWGhBciswcEMuMUtuQGN5OzRxZGFFJVs0SXV6Onxre0RaM11+UWJ7NktoUnJXSS8qUnJLV1ZYWnFDIywsdERueFMhX2c3fkcjSms0Yip8OWZs''@;'; put 'put ''cW9Ud09Acy9EYF5mPEY7O0sxUXsheUFPPCMxWGVYKztpZmAxS2dLOTIvcmUrLypYQUp4In1xbC4keis1dFVIdXNiPmt7dVVtOyJjW1p7MXJsVChQTV90Yl4mXXUkTm1AT3hLOlR2aHtwNGk9Rm9FMHA0OWZ0aUhnfnAqenpNfm1SZWJIQXVPblgzaCN2cnFjN313YmFDKFFLeWs4O24wMnsqeD1r''@;'; put 'put ''NkcmR0dML0k9bTYoKDFNY31jRloqQ2hDNyIlS3NrUURGYX5LbSx4Sl1IUGg2N1pNYz1lT3NhUHFoJkJIQng7OXg6an4idCU/L3Q3QT13QnM+QV0yI0w2XT1vakxEc1tiMFZRd013ailMdTxJeXE7MEUqYVt8MyRrKVIhXjM9d0NPRCV4OzJDbXosYUZ9RX1ddDpsMHlDNnY2IkF3RVk/KjglOWAk''@;'; put 'put ''NldUPyYkUTdITEghbkJsL2M6QVQ1cTUmMCx1cnp7ZUg1QSFvR0I6ViV+c254Vko5VCVONV03LFIubnMmaFJ2WkVNRUhLRzldWSpia1h0NyJqVHlLVW5IeCtjXys6aGkhNkdGR1phTmdKbT56LCZLfGEwP1o7QjN0ZmJJMCpfNGNdNH5WdFlBSmU7P1hOV0M1N0RscyIwfV1EPCQzLlY5WUg6fnIs''@;'; put 'put ''UihtfmE5bn5McDg8VTdASTJJUEBhQy9eOzM0MzBlWWAhLlY3cXNPOGRzSGgyKl02enR2RTRtWUpzQGZwOFdNZiZDUDB7Y3psaGRbbVkpNkBtIjZtcnY+XzJldy43dT92aHt0XiM6Y28wY30sTSE1SXghYWwzQCs1Wih3eHViOVVlKmtlRjJ+JlMxK2JaL1RLWigzNGZgU2ZMcn4/YkwxfV10Z1N8''@;'; put 'put ''YU9lcypga0lmK2Z8c3c7OjVSWjVKQkZEXkJzRC9oY3smMFZkRzchcnFyKUpZbV9Yd0csNz9DI15dZU9HNyFDM0RQKS5YWTNlbGNvW341QjNlIXJZXT1CJmJnUk97cXp9U0hzJX1tLntmaGBPfjQ7fF9HUyZrfmohIlJKeWJpcWg3dWFdQldfUWh2Jn04P1ZaQWpxaGppe2s6Jn1vN3NvRjFzSm1I''@;'; put 'put ''UiNiakwoazRPO2t9Ky5YfXklTztrKU95cl15TWApa3lOUzwzMWRMU0VRfHo4OHZeeCtPMH1TX0pCcmJUUjxuT101UEF6XkIwflUiSSZOdUBJP05rR0tNOih0RlJxa0dpX04qTHh7a1lzZXI/TkJUOzo7TXtSIzM+eVs1cEpMfCEkbkAwcXxHSTciVmBjIjhSVndMUDkhM2JLJDV3NjB1I3syOzol''@;'; put 'put ''KkkyOktNclBde0h3NXF+bihWQy9OYlQ6ZHttP0NpOH50PyhSRmRVN1QvbFd5VyVRWEZYbCJMdj1vRGs9JSx7MkQpYC5ebiU+WCo7OXhhVUM1eX4xSSZodUkmQWpiaWJifHcoQitRdnNZWyFlSllXWFVdV3A/TUJEZld8SjJIKERQPWBwLiZbKWRlYHJ1RUYlVyV2KEJ7dSZHWEN1YVk2Z0l7O3cp''@;'; put 'put ''LnsxMHE7e1ghblRnOXJlXl4lZjQvcyRnTW1bKT5XPFZTenJnRlA9bDI3SmYqJktoRiFDKGB+M3U2TXN1dzJ2QkhjKEJPPVgqb2NdT3xBLFZ5ezRoKVtlJXVyKUd1K3BfOzdyOE8iJWp7dHByJk0zdSpGe1UvVD9je2xFP2lHbEBJfiR0PVh+LCRCPlY0eF9EV1JPYnBFK2cuLG9ld0xfPzhlcFth''@;'; put 'put ''NUpvVWlZTXdsMXNwUEtbZEA4byYpZmA2TF4pKjIpPCZnST1jPXwrJUZSVCNicysmd255eGNKZkpoU3ZZbzhCN0EyczRiamdNQUooXkBsdCs8WV9jbS4vb3loRER7QWxmaFtvRWRZdUIsY1VdNHIvfT9+KzgldERFUDkpVC4mInYqdlRfak94VGpFey5KQWk/IXlWXyhtfHc4fmVAaFtOJX5CcF9p''@;'; put 'put ''NSg5cV1aI3RvKCp6NWcoXjA7WXNnRU06MV5JMys9bGw4aH51YT8kbGUyRiZXJE93KWNzVyo0aXpjO2FDTnRmTEpqcSlDMkxwdkxyai44JT9lPzdlJXVmW3hiekZlXUx9bix+Ui5Ediw2WV0mMWV3SXZvK246e1pCfFNAOlFlTX5ybz5vITlPblVdXnRwKVVqMz8ub1shcDAiUnpteFNPSDZuViVL''@;'; put 'put ''flUjPSNec31BY35JMC4vMX0zN295fWkkMjthQGVfWGlTQG1jLzZ1R3MzdTM4NGtWfjIxLyRVLHx+dWkkNFhmfTs8SyU4SShwMF0+NGk2LzVRXz8xcUZ2PmlHZ3xYTGJMRGF7fWJLW3AqNkoiKXNAXk5vVEc9dGVaNz8xTlJpZUdqanZSZEx0d1BPQEFHSEVWdWJ+RlQvYSspSSZgIzQ7Yn0+RiRt''@;'; put 'put ''K2RkUlBUNG1rQitmVTFCPjEhb0lNMGJCRzMya3NRKEd4PzFuW3tocSpNVjlYJWs+OnB5eDdCI25zRXVTbklbQ3lBeV5leSQ6PTBkJFUlUnVqV3dMLkxiPjFlWDIjKilJTi8mYFo9WC5lIVtdJENrLlt2PTAvNytrSDAvd3wuWjpvWnF7K2cvTURqTnNLdj9EOmgxVVdLMi92PWpeKUZ4Q1NUdFZF''@;'; put 'put ''YThgcF11QmcvVXJUfiZ6a0Ria0t4TUpsOVgpTnxAOFlnMmtgaXghUyx9NEtZT2woQ0Y3Pi98VmFGeylHWXFISWJGQkNBYEl9K2xvTUxSY30qbiprT3dkc3dKelUwdk00d1kkfDg6bngxM2IpRDhvOXMxaURlZCNrOVJEVH5gLipyY2RPWWFqRyVZYmp5Yyt5MFBWO0ovcFskcDJZVjMmY0JxT1RR''@;'; put 'put ''M2A9WF0vZmczU0V2UlhQbTF8cXQzW0REcDhwa3BCW2B7SE47Knw2YjZzM3Jjazh3TDdpZGdjIkhKWHs1Oko2Y2QsJGh7fF1TPHZheWBASkJoTXRPUD8iXz53Rlh8InQ1bE4kQDY8OHBlZl9vW31uSj1xciIvb1ssQ0g0e15qeTM1ITkpVmMoXipNM2pNWjZdPEp8c3I2fTdmbWU1W0w6e31xWVB9''@;'; put 'put ''TjtqeFAkZmssK2RfPUNvZTQ+e14+IzNsKjZAXUBVPjtbPD5nbzlXI0U5dDsjYE57UUx6THAkNWh7XktOYEJ3JTwldzUjcFssTD1AM007fm47JWo6QDN4fmBxanhtUnJMN29mfCU7NDo0KilbMS9WNTFEaFVvQikuPTliQGRfPnJ+PS5DWE8qOEJMfDVgYj0zYFk7bEVPUW8xTmdsfHxVRkY4cytf''@;'; put 'put ''Jl19KjsqLmZfMS5BcS8lLHM/Lk98Xjo6L2t0MH1UPH48QmBzS0kmOmxYa0Q9QXloQ2RzPChfPj9MTkxCb2FPcThSKDZ2OXYqdkN3eERKME0wNHd4RGB3eEQzOnxROzd1OFZSUXZeK0lTS0glXj45alheZSpjRktDSnFJU2hAfTNGcVJDWXlFfns6NzNJYVZDVEdLRyh1RSIueVhSJnAoJHdxWHhU''@;'; put 'put ''ZXJ7e3h5fVFNWTxbVj57JXMjO3ZoVTwlKVZjW01nO2RPe3Y+SjdHVypoL1Z0TXc4L0ZHOmw4OWI9cXM7Z3JbZm1ePDNvXWhVYGU4eD0peF1BcU1adzZOZTJtNXxiRFsvd2t8cWBxd34vJlpET35JR0M8WzdrPUtuVyFNbEhsUD11NzxuTDkmNyRwdiNiaG07X05MeHxNVHBtZSFhaE9BVi4jSzh+''@;'; put 'put ''cVBAOnc+U2E2Y1Y+ZTZ+SWFaVio3ZFE8ekg8cUdgbyteW11+Iz1we3coX0hzL1ZnZk9+YldhMkVHU1crJkVifSEzOkY/V3NOfVFVbUdjKTY5dDtIL3Q9PV5yPGYkQWI4dDhMZkpGdkl8RTk1XWU9OkZTYXJUaHZTcnBtd0hiKkBeR2hBXnd7Ij1iL0U+QUs4P3t7IT1tWm1ePWhyX3lYWlM6PWBP''@;'; put 'put ''RHE1b0NdYllKdjY9YUlsdS95REBZR3lgTmlrV19QQCs5TGBlWmRGYjZQMHk8NTIrUmBgYnlwb3FzRiZPcllIQHN5U2tZPiFPYSxRZntMUn1DZXpGPCwsZk5hRD4iPz8uWXkpe3VeS3hZIS85aWlqK0Nle3IyP1F7Wk9nVz1qXSNWVFtbPmZhO0Bna1dFSyhTOnBRWTNaMFhVMlA+OnA+SzJKK3pq''@;'; put 'put ''KG58bGIpST8lW1hYPj83OEMqP2ZqdWdDVyteeEZiTUhHKzlyS2FmZElkUGJWU0A6Y2ZmelRBLyJ9PjZuen5IRmtEfSFaTHMuMi93WEAhSFlOUjsrYi5XQ0g3IXg+RFVuVn4pZyVtaCZtLEp8YnE/P3ZafTVmWCFFdTpDfTQrb2F3bjEkYTUvX19kITp9eGksUGdlOGtKfGQ3MWduJHRFNEV5KEJR''@;'; put 'put ''Yz8jcmZAOWNVTSpEcjhmPl4pUjxDWXN6WGF6VlY+QEZsd1UqRDBoVFB7dXFVWSpJYlVRdlBLN09KcHAzJTcjKDBxWlhAd1NfW2x2YUIhKiMqP2dqdj1DVyptX1YrXnlbbHB6eVNITEssUVJLTVJSS3NSUkt4U2w3SU56b0x9Nz09cjxeXzslJWdfYCZPSXJoJEopOWI2MEhwWk5EVD0zUmZZW0xK''@;'; put 'put ''eSRaNz1PKDc4dEAwTUpLPDZOU3QqYDYwK2Nmd3JZRXt9RDIic1Y6M082LFk/dHJoTDh1L3BLcGwhdEtRKjJFOlp4UXBZbl9OZmY/WT4wLmV4XkYhYmcsRkBXVjIwQWAlKkt8fCo8MURnPTJgcUx9fSpPP15xPmYhNWZGMyskbTZEQiFbRDMkaiteJF18UGhnSXZpclhPS3M7bSxBKkZAOXMlSGR4''@;'; put 'put ''QWVHRWNkeT02dG1lYTlpLE5vRiR4eXhEbUR2aGpzbSpDYCM3WFtJQD9mMGBiOUtMNTtSLiY/bjwhSn5sd29iRWlOdFJYRyhlaXx9KS9zRD8yISttJDt8dnF4fjdFTn4ydFY4WC8lbGVDOEohMnF8YD1zZlQ7XnsiNmZBYW0wOSYsKjFAXn44RlV+N2g8PWVbYCZDO3owMUt9VX5fQS8oPSt4fH00''@;'; put 'put ''NHJ3Ry9DaStpNFNNdVlIYzEjbXIxc3hdaCtpVFJdfDN3cC5QK3VoKCQ5a1ZbVjVieSg5LjZDITNfOHh8fS9ReFQqSGtMb3QmSWUqbWlQQkYrKU4qZ115Uy5fZitgQHZ6SV1JSXwhY15nMzp9Kmc8NSQhUn45TXVRVWhMP01+d2t9QEtzfXhwfShOe2tffGhRQFlDfUxickZlQltvQmcoP3FvJk1u''@;'; put 'put ''LEpOQEQ1UXgkIyw0YT5MKWB9S059VXh0R354SXFxSkVvRFJYI1FuJmgmO2phd0orVlFDLD4mQT5WXz9qfFE6cT19bEBKL3JjKWJBMG13fntbfVRySVY9b299bCUqNkI+LG9sOzdpVWJHTkk6ZVUufnI+a3RWWztqQjN7M30zRy8seWc0QWolPmcxQE99JjQuaTFkVkI8MX1PSEY+TGZ9Lz0xLEtO''@;'; put 'put ''TURtYltrK3VSR09QcWlSNTtmWFhmYm56S2VjcD1LZFVuRWhfSnlNd2hfVXgzM0JoWF54b1QpfkhOeEZZVF81O21yaylEOnBDLEh+cmJDfTtMVGJFVGxwYihvZ21UKntQdT1KM3o2cTdjSCxmb2Ezfn14Mz1NS0lmVHg8YlNKZkA6XmYpZEh1Xi46PUxXLk4rRnF3dmldXkMraUlLJXMkYEp8MS5n''@;'; put 'put ''SlUzTnFZUyFDK25idWVwZ1skRHp1NWFJOmxTUVlqR1JuLFUxNE9zM0xRRD86W0JrXV5LQ2BDeldrQFE2MUh0K0EzYTdjMHc/WCoiWFAzcGxuaE10Wkc0XjgiQXVrZn1FVm1FKl9iaElfTGpZP2xJfTopanpSTzY4TTwmVmN9LlB6OUt5OX0oLE5DPD5GSkYjZ0ZQbzV1UHt1Qkc/UDN+PihUXVk5''@;'; put 'put ''WH1he3JvaS9hJGFBeWt9TEd9bkgscV5NYVtVZEg/NkJseDdhT01iIk4kW3l7SnhyZytpfjgzQyFQVXkpT317c3RqQFpeIkhSd2wuaSQzdiJtb0V6dGZGVHlzJl8lNGl8JSQ6dERoa10lTzNPIzIjVyRONihMPTQzYFc1KSVMb288Syx3d3FgZWFtWz8jMUxuVlY+dE5lWUh4QG4yeFosR0FXNnEw''@;'; put 'put ''SnJGOitKOUUpLC83fklzUWZRY3NHImtLVzdwTVk0O1crZnp0UEx3XS5dQTN4alchJUwsb1hDLE5efkFjdE9uSGVlTHwwRFgwWzUxRmB1PHdlM31VbWRKJTBCPF0+VyxSJjZjZylEOEg7a3p4PlV7dyR8PEFsZiRFW2cjOl1DIyU9KlFoREJiSS9kIj9wNURsdT1eNVY7VkJuN3pxJGFMWjV2NS9K''@;'; put 'put ''fWEpXkgzfHI7L0QrSCo1UWxNcWU3eV9UQ0FZaSVmYjFZVl9FZUxlRjhjbz4qQ28wQSY/ZURgYUFsI20+YjV8I3QjZy4menI/ckhdWWlGQmJCd0IoaDomNihvU3xKKz9aO2opTVB2Yj5wOk9tS3VxVmhrUmNKUClIV246UXdmWSNuWSgldk96SXAlU3RgQHNNckU/blJzSlZaelRqPyl7OUolfl1v''@;'; put 'put ''Y1I6Zi5afmVmRjxJQ09NTDd9JSRGJT81KHlYKiQsW01dYUlpPm91MixqWStfYWYyYmE9WF9PRV5ZLEpzTX5KKm0qYGFQMXsyVClNPVtmKH06LkFDLG8pS1s0XX1DaEJGJCw4fkVLLk9eKTFhLy81d2o9TUtrfTdaUEA7fllyOWxwRUppXiR2fDZRMH08TVFVd0wxRD9ObjE0eClUIWJIcTc7cSpu''@;'; put 'put ''Vjh0fDJKKyFINV08VjxdeCpgPjRpc0htTnRjVVEjXiovZlM4TFtgPTNhYXB6XXxuckQuMHclWXxPODNmdDtuNTtYOU5dJVFhQ1pZJll1TXVbd1dYVUJfNWZdejFLTl43O0NILyQoIUJqVDQ3SihWc08vXmskZW5yQHZwfWB3cHgzcVlGenNjVzkuQTlHRj1eKUZoejZjZ2plQm8lX0B3cHYsVmND''@;'; put 'put ''NC57Rk5hJE9OM1VYYEc9YFozK3RPbSx1dGM4cm9zNUlmR2QzR2YrN2srQ2MpPTAzRFg4cnB+K1t5X1REV3ciWS9GIXRuTFl8L2RRREBXdipnOzwsOm1POltXbDw0XT1aYmpUNGhYY0J6W31WJj0wM14xL3lFLkAsfjp3V1VneE1QU2owOFgrbUJPWkJ+Z01sIl1jd1NKK3N0NzJXS1kvNWlkXVIz''@;'; put 'put ''XnFOelRCY1EqRDhvMSg3fnhSQEBvWnFyQitfT2lFRUppYkw7Vnc+KXRaMlgrTW9ySWFhUlAyYktpTERVWG9kWzNuT2d0KklqOHJRVyksXk9ifnBLeHdHV353PHQ2KUIuWVhRV1ZkfVcjR0RxeiZodUNYVUVfZW0wPHptK2xnM0pNZ0spWCRVMnhzOC9maVQsXlIqJnh5TEhrbkpMKV5jeGAmbEFA''@;'; put 'put ''NT11SkFVfjNzQ2UvdnE9biJVc2loQ3JeN2tgRF9eTy9xPUxLcUVsYH1vYW89UikpR1VfSWIpbStrLG1HKjhCTF0hO31uUEcpNyEhV1RAQkhRQ2M3dFAuITtMOXQ3TF5zKWZ5MjNPWjVoK2hfQnp0OEE0aE5icixPbXUyL2gwaHh5PUc0OmlgXil8e2FwZUpObFdYOVFKYFtZaXpvWFZGcm1fUSpO''@;'; put 'put ''fCluSjU6YHZ1dChSP3Z9R10qWDhnZ0lPamJKa1pZVH1Ldj1ze2h6UjNZQyZgRVRPUkglIVQmc2NGQ0RVcW59dHczcm59ayw/ekRMUE5CVzoxWVMmOnpqUkNKaTc4N2NeO1RWTkYvaGI5TDxOIUJSODs2UCx2RFFoTlBCUCxvfF5afEp3SjczdHpuLnsvYzl0Jnt7a0ssRGlOOC4sbkRhVlFLT18z''@;'; put 'put ''Uj9YajBIaE07di81dDk9OGV0eV81UkJrTUJSWE1sUyNAcCteNTpIKkRzbCJ4S1phXktQJkxJRXdkdWAyfGw5VDUlP01pfFl7aXpxJmFOX15BWDt3VHRDUD8lZls3K2EqdD9XJVN1R0QmW3BPcDYzJlk8THMrXUZMSF5zcWpXPSlVQTYuYi5UczZnOS90UnlRK218aGllajpzSX1oV2EmQjR4fk9r''@;'; put 'put ''ZUdaQCFAX3NJXmZgWmc6T2FfOVF7TjQkJGkpKEU1OzFFIWVwK0M3PWNLXzN1NCxXfWpTMCMpQHFoY1pIUWR3KGF4enRgI0orNDJ4KTFGZH0kLihbKjlQMEhoITRPLlJiZTdqczZiLEpSMEhoITRPLlJiZTdqczZiLHkrcjszREYrKU5AMUtNYzFdMUwxSnlkZWh0QDE0T2NgQ2AsRCF5ZTAyNkBA''@;'; put 'put ''REAwSElBYEt2cHRgNHRvYDhBP0BQdW1gfG4qR3FyPWleUUpsQDsiLHJndW9temV9UyJ4VUpfLypDdn5YXn1teENGU3pIUHtVQlh1TWJab096VTxEZUBKVUJ1aC9fUiQ8TzAlYGchcU84aF01Rk5PQlJYbGkqX15MO1JlPWRKJk0vNm4jLzErbzlgYjldXkhANT9SKmZvRnw/XlUmdjBnOmBmZG1O''@;'; put 'put ''YX44OjpmM2w3XkBAL1dIXTduemFFUXpBdkQhYXhJJFd+KGI/JklHQk1rQld+eH5QNTdwOXdKRGZXLF42SGBHZXwveiVyWlU2WHQvL0Q0RllwNnlKT0l1NX5FR2VNX35uTkw3XXxrPz18V3U/cFMwakRgIj5ITHZ3Q1pWZTtkNHw4e2cmZjEmKVhzOnhqOzYlXV5nL2MiRFV7cld9Wjp0el02cng9''@;'; put 'put ''cXR6X05lPVg7filEfnQ1fmcxaU5de3l2ZXhGJS91R3pJLy96MitET0wxKHQsXlZHI0lRTVA0XU1EeiZaeWk9MGJEWU1xRGx0XVRTZH41YXczKFpSTVljV1JIbCk7YTxFcX01IiZ5cFdqMDVSMGE0R25pc24mYEpjIUcxYit1Uj8rYSw/PGguR1VteU5daC9UfCZ5RGBXKjNyUClmYUk/dm10a2Fx''@;'; put 'put ''fS56JT0jbShCVE1DTFFhaSk7OHI8K0gsJml5fUVfSlNVMChafEtWY1khUDNPUilQe01XPEIuQTpMbWc3KmBvfnpsUCRyOTR6LCIqT1BfV1hvQmA+Qz5jS0xYYlBEYE5fSitySExeQjNPSHooM3VxYXVfXzlQV0EmW1suX34rKV92IWMien14NGRFd1RjZE1XRy5bRHk7VStHWGJoXVd4QC5fflZM''@;'; put 'put ''ZVEsdmQlR0w4RzY4dGJfUGpfZnNBUipMSXkjWWJINnRAJilWdU92dV5Oci9MJjZQcElLSnN6YjR0Sn13ZC9ySVhSNlkoVlRpcCJRTHppNE8vLCpUQUlWTWVjRnxHeFhZaUV+Rlh3bDYkWUB7cFVuWi5ARjgxdHlFSE4oK25nMDBZc0woY1ZVQ09zcEJ1a2x4U2Y8Zn17WERRczV+bV12O2Fvaz4+''@;'; put 'put ''WHFkOj55eHtuV1FCSFRSYUs6Z1JrPioiWCYqTVJtTTR1NHM7TmdjMlljVyhHV0Y6YXszY0o9b2pNN3gkfnRoUV5JZCtiIT5JaF13QzxgR2lXZDAzb2U1VVgqeTMyfjMvRCFiTyxxbk5vS3wwdl5lYzBob2RhIjV4V1JwIz9Gd2gpMytnbk4qYChIJTxwRVl5PUomYjtsRSlyZV88bm09IjFvWTFU''@;'; put 'put ''fFAiUltgeWQjamNAPzlgcEROd354TyNDSVRdeCJLSk5XN1JYcy8xPXY4X3dMWWR4Z1U0aTRWcjNDM1V9WGlXYztGYFp1SWNTY3JTWEdnMTF+JmMvNnheLDZ2KiJ6K1RSdj1CTGUwLzZvZ2FjQT5dbDIrJUl9TF9+SX4yOE19W2tlYXE2cjhJX0Y0VWVGT05TXXRBZFAjNVVFfV1HLCUvSHZzUW96''@;'; put 'put ''clZkK3IlTyVLVys4O0dgdGlrb2BZKm9NKDlPRHxZeHBLP2ZBdW9yQnd1LEYrMUtmdmZnMEhfMTRPOWliZTFqMjhQLGdlbCpzNlAsUGYxMF0xTlB5ekczNSVKeXViaj5WUX49OylgN082bmJvVEpVWmZtQmYqTHdwVCs9O3JYVn0iam5DYDh3Ri9QK2hMeTZ1TFZ7I0krJkQ/TkMuYEV1ZUo3TTFE''@;'; put 'put ''YHV3P0NAYUZmdE93RFBUUkRhWEQ5NEkwP0R9R3h2fCplfSFXWFgyeSQ2JFMlTX42S1lzQjFjc0JCenxzcldbKUlBS29zQnxXXXNCRS5pbCtZaDB3P3xpaTNEM21HIjczYSlXL01NPFJkRVt6I2FaZE9BJS5YfC5vZXFSZDhbMXBfV1lAR3prYn5GPD9gdj8yRj5RKnIxTC4kXk5meWkkP2tvRW98''@;'; put 'put ''cEJXWD5iYjhNcX1ZQjtgUDMlVVVoPy4rI1NrLmAyU3Q3MHw/PkFNZ1lSXjgvK1RAP1R9UGZJdyE2YUc3byE1aUNwKV81VzZ4NGR4PGMrdU9wKTN8Ry5FZ3lRWXk1ViRabWkzJGBfLkhtUUZqOyJkdHg1fj1ERTZ8bkZ+SjZmWGo2dk9FZD8xITRTOlkwcjYhVUg2UzV+Kz97UikjblIoK3ZHTF89''@;'; put 'put ''bkhqVFY8S2BEVDU7Nj0wM18xOHdEPTN6ZFdLSG9OZipkUF1aLkBZWUNGUlQ/RyI9WEY3OjMmNT1VfD58b2lZIixefWRfYXdkfkBQM0FpbWU7XU9TdzR7dCliJjBYRX46eUg1XSVycFVkIVl4QXl3PTx8I2NgcHI/I25eI1EpaDpJYzAvW2tjISQkPHxvVV0zNmVuJUZLZDI7VjF9QkZNdXN3cG8z''@;'; put 'put ''QHRALndCd0ZFNW9YSjo/UnslblFhT1d9c3B5WFslaUpjTV1UNDRAa1hIQGtiUU0oZDY1RjJeI3s6NXdNeldwO3Z1XSQ2KjU9ImkrMWFUTVA0eU0mYm0reSU4TWVgUipBRH5FPGE8bHl8TGFgcFFzbkQkTjQ7XlVtTz59eD01P2h+MksqZ0tuYjkjTnFIe3ppLDQ5aFdFKGpFUUY6R1RvR1ZqL0Ml''@;'; put 'put ''MGZZRHN6V0RpdFhbIyMlP3tmUF9vcFdAXyN0O2Bmbkh5eitSQzY0NSUyNnlkVV09bHNANHIzUTQvW0FkNnp+TXVkSl5NTSkrSS9xTzNHYyFgVDNJRStVRDVxMW5pdzFjU1k+VllpWVVUSFRNfV19VjNpTjxxT2ovdXxLNk5Se3pVfT9OJEt1S0swPF1UNDElaUBNcTk0UCliWXQ1T1grYXc+OXVz''@;'; put 'put ''ZTJNJUI9ZVUoWUV5PUFkej1LUGQwVHg4TGhpUCh4RH5YWkZxejRvbU9xfW01XjQhflUqWD4kTTp6TG5TNjdAJCR6diNHVmRqMCJeSVNmVFNQfEp+VWhIaF1WNztuIz9yUSVPX2BdZDU3V0c4SEE7XTFAIjtoPEZOQntSWCZMSF5hfHUlRjQhVHYrNT1BYUBLY3hRcX1dL016QV5OcGIqejZuWClY''@;'; put 'put ''PElhWG4ra2Q7LCpXOXU4V0w2KVZha21JfGFVdjx5WTU/JEEyJFg5M1c1KVtlPFdGR1BJW0crezIhaCIxRiwwK0hTKHQ0c2hkaltec1toOXMjSUlNVHNJXShNOmIpUChFRTRpajs4PF1DVjFxVToobmF+XzVLMitYcHUwK2Q+enJVIXVEY0IsemdVdzNddiRMITd2bjEyI15dem1DK09QIT8+SWVd''@;'; put 'put ''dFJqS1F5QTtHIng3eHl3bjBLT3Y4cnxRT0MuNWEjMURTPXNTU3RhP1hmKiFNQVlsQHVUblBNWSZuNHwxcW9QfW1vKytCRXRwOVskYzRhXUt9QVE9MDB9bTZzd195QkhqanpGdXNUZG5kcEFuaElmZiEvOX5WWD47RClHUVg6c1skWnZCKkJmd095aVIme3JHJUdZITZPekhjQHgoQkZYZzppQ3or''@;'; put 'put ''RE9BenNoYjtkZiYyMz9dNDI8NlldezBucS8kNG8pd2w5IzwmKD0jR2JLS35VfEFXTklfV3I1aXlrMD8zQFdFY015XmQrRT0/KDQoeH5GaD9eNnZ0TWZHMDV+Jkg9SVVAKnptJnxMMHJgVF57Kit2OnV8QyFrPSlgNHdDYHsrNzJSPSY1N1BXfj0yR2ZQdDsjak0zc0FYSTIzey9HIi5efnszbSpx''@;'; put 'put ''amdnIiE2KW8rQW9qQF8rV3wsJXZZeF5FOFt8RDY5ZlF2dH5FZXAzOnxhdz4jQU88RHlZZzpxTllYajBgdnlNUnl6ZnZLcmE5dilSJj1EOnIwYCxQP31XKG54YCtNeT08K0tld3dRcUZlKWh3dk5PUVB0JUJZLDVwM0VZaiNFTkI4NyN2OXdvKyk5U152U2V8Z3BhNnojZXJQSWNiaUMyO0JNWCM5''@;'; put 'put ''QTh7YyhdKHowXXxdLjlAdHhKPWAwe2V6THptaVY4cEwrdz5fOC9MUi9CVU1ffi4zcSlMb0VsUD4leW84Ynp8Z3dsQHRnUkxgKHoveSU+SXxZe1ZlV29ldXNMWFhgR0VXXm9wZ0NVVn1SYm1CdysvPFk3U35LTjJhZk4zZV17T1B6Tzk+Nn1Ubi5gQlkrTzRUOXs3Vnt5KkYuMj5nIUx5QUMzbD99''@;'; put 'put ''K2VdfWFWbGF8XkJVY1RlK3VST1hhQ3NiZGZkYWkza1Q2ITZpRkNWNE88azdgdH4zIV53MUwyZjReOiJmNDJpey85NFJdUU50MFc+TTQ/NUc1Ul0uR3VPX359fjhJXXsuTmYrTDRHT31iOEh1ci5GWShbRkcia0B2TipdKHhjVWVUSE1DVGppU0NXXXh8P3xSb2YhVz5KeDJPTWBuPHVjflZYPk9d''@;'; put 'put ''aS9Ke0dEeSkzPGNSM1BoQ0ciTFJpJHVaZiRLQmZkYjQ7P2orbT9EWz8kdkxmUXNEV35FUVZ+bzglLk9mTmwyKzBLQmQrZEs2XWc1V1Zrc1B8ZnRBJVQrWFBEV35eZCx7NW8yaTAyW0IoJmt6S1N0czlNQzpUdHVzZkdde05kel91QlMsfShmTFBqXUhMQmVsYGUiKzh5WShTb1dMN3hifXBQd1k6''@;'; put 'put ''cyNhdXYzLH0/bGhwOVoiWyhsQH53NlpjRSQyJDY6WXFrOU1bcGNqOkhCWFdJUDIlfX5ScX1HKi5YXV5BeGB4TFtfX1JANmNlOSt8azF+cEtJfmdLJW5OVyNMSFd+K3QzeyhMVEBkX1N6aCFkfFo7I3dtVSlyWWZwQiUhfDN7aFVAS2NoaCQhQnBgPkV9K18meDx5cFciNXVzYjJ4PU4odnBmPDJ8''@;'; put 'put ''XlM9NHB3azFjekYyWzw6PncrPk4xaltUWTlkMl5rIUwlaWxHJFlxa3hnN2g4UHJLSk8kMj18U1A6T2hZSlN9QmxjZUVUPT9PK21+Oi9gJmhIRFkyM3lEXml7Y2EvInN9fi5UISJuN3ReME55ezR1dnFle2YpNUFLP0VvXihsYXB5eD9jOH5sfVIoKXk+b0xnfDhIek5IMXdRTXtOTkh4d2FZOkQy''@;'; put 'put ''fXx8Qnhba2ZKVjMle3JZPT8iNmA9V2w3dyxbaGJ9ZGI8R2BHbEw2MSE0NWR1OVU5O295eEhue3s5ZSghTW84dnc4cjhiNGtKcDdNJUJaJHAkdXQmOlpWUH16X1tTQldEQ1d+Um9yQEZ5RX1SbyslR2RwOiUoNHMmSSxYWUA1fV5lcUBLcXBQJnk2Uksve0plIUUkIlYwQGRVd1IxVTh5In5Odlt6''@;'; put 'put ''cEBdSC5IYkx4ISJuWjMkRmBTS3EpTzdfSW8xYGJ8SH5XVDdpPGxyfT9lcFBrdTRzNXEzMmhsfWI0UE5YTXtmSnxwRTM8Kiopa3cxRnEzYGJhZGEoR3o+WGF7PkNRaDdlXXtEdzJ2Ujd0WXNbcGJHR2UlLlteT3c0WTBEZHVVZmtINlkwRTpgZnZPSDZ2I0YoRzQ8VXRIWmlsfTYwV3MjfUg6KFJf''@;'; put 'put ''ODZoKWwuI2JtXWYpbH44JiVILnF2PDM9YHg9fjw8aDgzIWg4PS5pbCtsSWlCbGpbZ1RRWntzZCFYOkZfUFhoc3JeWzVVP0lGc3pxKHtrI29XI3h3e344KGVnJWZUbjgvQntaP056aHhjK20xZlt1cDk/eyFYeXw2ejV+dDZnVXRQODNFOGF0M3BRMCNAQ1hHd1luQDFuKCg3YXgsXmxHdjo0L1ZO''@;'; put 'put ''MXo+ejlFcXkleVJbSlE4WUFxRnJkfSUmUH5bfWUxVGU4QH5VLEh+V0VzJkYxfFc9TE13Pzp0dStBb2EoeWs0MSRSe1hsanddJkddUEtsfXRiJFghUnUzQkVzS31CLyl1dD9rKShFTXlDbTFiVH1pXzN1YyhVTipdTF9iW1REbF1YNEZlLHx3aTB8NUhQfnhPa148d11uNmNIV3t1Pi9YXUcwRzt7''@;'; put 'put ''MHgjV11ASStzTXk8N18jWHUoOTBTUjJjSE8lMFh8OF48TUw6Z303OGBjbHRGJCN9Kl5kPFdmc0JFKi9mWVQyMn45XVY1YV5HTF9gQGZTfVBhZXp0SlFFeDU5VyRVOT9oZldMVUR9XX05bkIlMFRkSnpSSHVoMk9FZjZRdnAiI3xbRUtkfC5QSk9TfkB5e0h9SmR8TlNVXihfNVp4SzxudlZVQ0hm''@;'; put 'put ''dmhpMlReNmZYLFFqYGUiT0Y8V14xfT4mUHE4PilyZl9nQFRkWH1WMFUzUENRRGxdVyhAZUUpfHFrTDchM3d2Y0AjQG53fkBrWDAvN1hfc2hJKHdJMHJMSDZFKXNNLEJKemJfTzE9WV5zKH0uamQqMW5ZLlY4RDdZM01kLzloMTFzaGdjQTsoLGl2IlEzbmtTW2NWakZrIXAiXWkoazdoZFRlNzhb''@;'; put 'put ''SiQzJnNpVF5uSSlDYGIsNnk5Q1MiRHBALitbI2Q+ZSIyL1Q2M1ElPi9tK1dmKjZifixtX35ifipuYTZzaW8rQT06WkBhY3IuN3w/Tn1VJUByeUgvUXFfKD56OShjJVFEZCp3eD17MyFRRGhiNW9aYFs/SGxyO3R0Sk4xQmpiQzBhIj1JQDgpTTw+PT5vci9VSEMjbHxiNzRPdn13NkMpSXxrN0Eh''@;'; put 'put ''VlRaNCslQ3VeLjQ1YXVsRixZcWA0ZiYzPy5ua101fXg7Q250eFppTmZEPiJsdipdSk1HVU5jLE85cCYlPmdyVTEhUVJfcSR+NUw2LmZAWXB3OVhDZyhAeTZ0YWA2JSI/OHBWX2pJJC9kZXN8YEM1aWAmY1pFeywuQ34sfj9XdlE0RmYyPSYzWzUkaVY5MnxHUH0/aDMkLmcuMnpbXjVLJH57Nlp6''@;'; put 'put ''VTElekVRVEIqP0ZGT08kX2xzclg/QldoVkpjQDZbbEw4QHlGeztofnY7IVU/Q3JifXszaUpEZEk8XmVyXWRCSDYrOnhPeXBVcC57TE5gQXQxW2R1XTxjOnU3d3lfZHdUaSswYzAhSypLTEhiPkFNV1UvKmEqek1Ea14kNk91a3xiRE02cmd7S0lJSzVBfkBWWmhZRXhlL0NgdkRFdEcrSHF0ZG4l''@;'; put 'put ''JUdVVlFicDoqPVh3Ok4iYmBwV1M1KF5VPEcwLzlnRXxBbj8lV1hRfG1pQSk3cmB4Q3ouT1hdYkJYW2RCJGZURDNTMlI9WkxeQ3Y8X05mQkFfWjJ2PnpkRCN7cmclcCpOZWUmdCZ5TFExcy9PY019Km5Qdm5mVVY6dH46R0Z6QUxNZUFDdHUufjJJXTU1fnhhcX0jaXo9al8lJEVJTEguSE8qQzFE''@;'; put 'put ''Vy5uN2gjaGc7JHJJaUNuQlBxdk9pZjc6X3l8Qm9adl01QD4lQ2xzM15id100bDoxTE5IMjsqaTwvak9Rcl41ZHxZXXpNdT8pJnVkb0ZZXW89YW5IcmdAej44fWZAR3MxOjNNYXpZe1pjdVZhPjJzY3hLI11JM0tGb31rREBbdSkvekM9NmIpViJ0NiQ1XyMuP05qUjl9bHI1bzYsSDQ7flN4eyU0''@;'; put 'put ''YHBmSjpQIzdXam9jWTEwWihOaV9mWTpNP0c6Pz0kNVAiOGtheit5aHd2YGthQFokSl9NKzsjY2BfYnArI0kxR29oUSNoJE92T1pCfDZsI3JeNGF1IUtFOH1nfjhAI25kUyRUPG1nTDhsaSZJdldERF0hb3cpPXMscCImbH44Rzl6TmdLU3JgVSFUPnFrPkE+XnEmXys5RlAuMkg0MXxPTDFEIXpB''@;'; put 'put ''SnV5K3RjVT0wWlhoOiROWVhoOkdMdC9tKFF0VCo1bylyaWAjIXE9MV5ePCI4Ql9BcX49NCVId1tMJGdNdXRben1eJFFgcCljJFZaZiVCY3p1QXphOyZIPFZSYCk5QlhwcXZ3JjVnUXdLVEQlOWc+UUoreldjb0YoZ3A2VkZSVndSTSRJZD89NyIwMHF9T0B4TzdfbClYSmZXTk5IIUI3OW80fFVl''@;'; put 'put ''fiZ7e05tL3ZCI0AsRjdLfHEqRShWLH5TIXJAZjljVWVUYTpbJls3fX0+ODU/NEZ7NDoyanhGSVRNfGNHQX1hQDZOTlc8STp9cnBxc0RAZ0VeTjY4bllNR3wmP2VPTGJhNkAhTkdtc0tffTt1YWkwZDNPJll8Q0tvKDd+Zy9ibC9wbzdbMFB1W1ssP00rTXtRRUg9PiJBJDddcUZWTVguXlNjI1pR''@;'; put 'put ''U0tPOkMwS3RzWFY6P2Z4e096KGBYIUdfTCozMD5pbj9gdkhOVlZYUEEsVURqOWtdcSY+eFpTK194YypNWE4wNCtVIn14OFBoZ3J2JVdkeDBIUytqVTd8PCZGSzE9JksrYlhWdVhLQSZTI0IjWEJLZnd7akAwKWFvbEZKKTdXfmwxYigoUHUxblYlPUIrXTcybUFsW0ZtUCUlVlAlJWxpOjFoQld+''@;'; put 'put ''RXBKYSghY3l0XV1eXXU8WDdea09YeFRbWjtiSmU8b2dNaDI9QjdiNmMldGlbd2o7KkZse3ZvLjldMyJWIz5wfmFpKnFkfG44aSQ6Y2FhKlg0Y2AsO291YlQ3SS9Ffmc5R254dk0rZEV8Ji5bKGJRNDleUngodSN6YG1VSGIhUGxqPT1FJkNZVDwzPSpmV1c5dX4lOmpMY1ZhQ3JLZTkiO0NHMn52''@;'; put 'put ''TlNGXn1kPFYhYU4yfjJJejtvMTE9NiV+Nkc3ZFVgOGZDdUBGYUx1UztDeElMcEImaC5GeG9rWCs1NF5VfDtMeXNzc29HWTJrP2ZyLEo+MSUiQ2YmdHNGcy48UWopJWJnYihtMylbM20oT1U2Rm0wWmRCL2ooVzY1NEFjM3tYczxHLlpQPjdNQyo5W21sREQkRFFmcz9RTXkiSjJHI3MlK252fHFj''@;'; put 'put ''Km4kfmE3S3dIODhDS04kUWJaL0xLTlNhd3l2W1ZuP1RaNj5ydz44Q0NuNW9DcjREYCszJGZiQkxKS18kQ3FLczB3VVE2M3B0RnluZ1ciYHJEbzYqO3UkdEJ6dyZhd1ZKUH0qKXZDZFlMfGlUNW91R2BRanFtO1h5TX5Ka2I4cC9aPE58LmNJIWFeNHJWX0R1VF96PmV8Wl8oaXYmLHc9JjkkXTpr''@;'; put 'put ''V1F7b29dN0h6SlEkPyE9fH4hMjB9cj1Te20qPls9cFJ3dXxDYGJEXk1fPkYrVU4pTVp1S30jKyNuWVIhd31FaH5lVyxKVV1laXZyPCM1U3dOeEF1RXliSnxyNF8kWz1mQGtKTVo1ZE06ZHZCZD1lW3JJL2soenVtKzNMcUI2d2VfIyRWM00yPXZ3PVcrUn0wPWU8VTBvcE9fSCZUaTJdKyNHSHQ3''@;'; put 'put ''Q0duJDI6KH1SYVohU3hmYjomKG0yX3E/TVo/eDw1Il5gayhWdDE7fG9OTjRlKWlbdUVReFhYSEApP0gvaSpmRz0/bj8wQF1VQ2AhT2F4Rnl1YiJkZ19vP3VxZzBvez46eDZKcnx0P14pdyQhSWBjejhaaDxTfH4qK15QOCtAYnVLamAjTjFRfVBgcnZJfjA0UUVPe3Zycmc4RC8rTEAuJlh5ZHhF''@;'; put 'put ''ZFJiWXM+ZXIqMTxGZFRpSkc0PUIoVHMxaFUqNlROc29GZDdfXjcleyVCdV9gQExXSlNmZ1ZGc20pbnBFKEZMK1tNQ3N9Km9DdylzNGJfU0Y3RTk6Zklae2o0O1s6Wyk9djNdaj09XzE9ViUkYGJrN3BFZT5TUjpHSlg5NE5oXW1xQmJWOndMenNLfmNhNkxBSi5tJD0qMCJhQ0RDRyxPXjk8OmxO''@;'; put 'put ''cjBZTF9wKD1SWUpWa2Z9VUBeRls/b3diW35XSm1YTCYqTih+cU58Rj9LMzBzbil6dGJmZ05QK1sxTCReSi90VXFwa2UwY2EqJm18VjE4Nj88b1YydHZWYVo+RHJbNj9ad3VsUUVIMzRXZTZCX3AoPTB2bkBgN2ZYPW8rVGBHKWJYVkh1XyQwZzdHPF9oJDBnekdVe2FvWGFvQFlwZ0siVTQ7RjZ1''@;'; put 'put ''cVVZLHVHO3c5fi86L1olWzpfTjRuY15fVU5dRWRTfUY0b3xfKy9vJTpYI0BvYVYpaV1fVUBmOVRTd0g6JFVPOWpNNlQ5Ny5GbiJuI3piNHNycWVJeEIjVzp+VDc/LiRfW1dWTCF6aTx6V00oVmFNJn1gcCYyYHB2I2N9aV9lN1ZOW1Q/UTFzLk4uMkZ6X096VGFYTEdBM10pZDNbcEtoOmdeTm1X''@;'; put 'put ''JV9+NyhkIzRSXWx7S05yO0k/KmJAXz98eGYwT30mN1YmJGhJVDhPOlNmP3EzbHAwQF0qNU81Ll5sPTNgQj5YMz4jVT5wd0l6Vn5JYnkyaE5wZDt+K09UKWFAQF1xdUVhcVlWIis9YUJ0P21deG4iMyIpcU59KjY/a05AYXZKUH5kXjx8XlFibWZkaGFpWl9qRUQxRS9jZDNOajI4JlM4OmxtIVNG''@;'; put 'put ''PVlUZmFvSFJNZVNPcnthRX5WWmJzQ3tPfENkOzl6KXpUM2lmMlRpNE90NH1PN2lpWmc5VzMvWGBUJXc8SENsLGtQNl86XVlDOWo+d3g7MGJlZyF4NTc4RlojYGJeQSZCOjQ8W0cuRXJoQFVKck0mTCYzKkRgcDY/LjIzdXYlSkNUYFdEaVJyJkJ3am91aERaIVhFZlheSHtRW24wLHJnUGRdeHh0''@;'; put 'put ''ZGteJlQoN3ZkX3tbdDB9Sl5BWCpNbzNZZEdeWEhRZTAiemFHQHVaOUMrKjY+JGVfSDFGRkEhUl55cmJeeXJBWFNAMXJwJmM0UClPPHVxI3cyZl5MbCp7byh3LllaR1h5d3lba15re01QcDRpcEk+dGBoPCYrbT1HbEJQKi9gUTdwYj5HW1hEeDpGXXtUdzssTm8zWVtXMFdPcFMqMStoXyxPOUBJ''@;'; put 'put ''UHxnc2d+VHU/JTdVWHt9PGFhTHQleT9IWzkhcDk7XTBzdjp8ZktmdCpkJTdAU1V+MjRAdnZPNV0xNVVvJW16XXY9Nl5AbWg5d1o1fHlrKl4kKFFxa2hsOnk/XyY6Ik1xbCluaXMoXnhbNH4xJWJYUD5zJWxHVCFOSCJ8bCk/NH5oOVBMNTlYez8rI0c7OWppIXMqQy5XK15rP2YiUSVZRXF+YD5l''@;'; put 'put ''ZkFISUclRWgkOSx+N0ArNjo7QU0qQS9icX1HKiU8d3poam5AJnprZWN1QV9WO1ZEciklR19ERSQwfl1LcX1OcVl7MDtXIXlkZm50MUN9Sj83c1I2YD5rSmVsUUh2IyhwJDlzZUFfNlVocWxZVjMxPT00RHVMeGpWQiJqKX4+Im5WOiorc3c4ZGg8OSY0WzIhelVwa3wuRy5bM0B8YX00dn1JWClq''@;'; put 'put ''TH1IJCxlbHAvU3x0RjJsaUFkbm5AUm93Q2JNSnl+TD1iVVNlMFt3Liw5fj5IQk1waTdQQWtvbWJ4NUphb1NYekY2NzpCelc8YnZ+TFZjZkt7fTZWanlecjAqKz5SSVlpa0B6OSFmU29dSVoqNk9RPTBER1lpWnpDTH5IPF1NVlQ5Ul1XPWRfaEg3dHU7VXtYQmNDdHZzOCNtdn1CdDAwQV9xJSpP''@;'; put 'put ''d2JNLFolUSwpYTk/UWMiaWthRipMWTc9TTZOS3pPfCgpKE1EKjEhR3whTXdDeiokcmZRWUI/UVlCP1J6ZWtXR1lUPCxxM2BhT3toPUxxdEgzQEJ8T3U6Rl03KXdIa3pQMCldMTViYj9weGhKQ153fmtqfS8yOCZSU0A3cGJ0eGdnZmNZeU5TPX18X1NscEpxUTN5KXo3OVAwejdlVTZhakM4KiFX''@;'; put 'put ''YV1zRVhyeHpLW3QzYzlQJCIvdyg5KFZobzJxW2VRNEZlX3RQaUAycjRDNltvMy5fZUp1cmNbdjtIOitrLHZ6IzR7ZTh1b3orbXNLUSlmL1JWLnovaz1IVk0/SFZpVDJbajxIUSxKYmRgdCkiUXdEKFpWMHJmKkJ+aHoxW2NfTSxhQ2RwT01NbSNyKVgyPkdwdEhSWjIrR3NHYEReVEVINXEjSkM6''@;'; put 'put ''LjAsdmFSNlksLEpMXSk0dShpLjBJd1BpNkksXzUhN3YvWj1IcEw/SH15Jlp8ITFCNHojUE0sRE41alFENE9mRik/bW52aSVJaGBPUytZelA9aVZWfilNU2kwN292b3pQUyw/N0gpeml9anM7TDg+MVhhKHc3TS4wU3pIK0kkU1dydzRHJm9BJS5WOjNgOW0+Y1pxRCM+cE8zc2k5VlouRFc/Miov''@;'; put 'put ''UzNNaEBIell7dyl3WTErTExwLGJvcl01T1VbLjRLJU98I0w7KyVfXmNOTnB7dFp3bmV0LHtFKiskang3SHNlNlRnZ01oU3M3Wl58b1s/XSxlLnosZl9KcEs3L2Y2Ul1ecV1hSjssJmtbcmU0SV57SSRbcExtJlBdb144LGZSWSZwIShKSiIwUCwySzQpWChBaDMpIUtPc2hMR2xvY0olUm08SDdt''@;'; put 'put ''NDU0flZ9T3A1bWZfUl97WTZHZngpMkorX0Y8PUs7cUxXWDMzIWJ6V3M3U1Y4N3NdYiM/b2JAMHlgOGF7aStpcSkldEc8XUxrSEtoM11rb2NiVn5UREReP35WRiRaKV1+cyspUVUreFk4MVEpYUI5O0BkbV8sc054cCtPXy9NXWZeLiMlfEw+ZX1lM1lAM0R9ZVFMTiVpSnpyXUR5LD44ImY+Pkw3''@;'; put 'put ''JXhTdWd+VEEzJW5JTEY9XVckITQ9NiV8bn5UOUk3eCZEWit2UCREUD1wdUhpL2kiSE1hMXJxUy44d3RwKCtIdTkzYnIwN1skaTopSzxmaU8heklhRWZzP1NtSyk1JTxbI0dAfW88ZXdgKFRPNFBWS0k0OkREVFk1LlE2JDRdIlp3XjBgMihVWFcoS1Jib0tjQmYye1lrVltLNl9eQiwjZGBFXltC''@;'; put 'put ''QUljelklWFN0NyVYe1k8flBdIUhyY2tudkh8L314dXc8eXo9JWdvOWleaVlbJGB5bF5fUypVVyNQUEx7Qmk9NmB9Xzh0WzY1KzosOENuJlN0IWBwKWRpWW58Szl5Q150czQuSjF2djJraCZlIylrWHBeIktVaTZqPUZ9bUFjcHgwUlhlJjMjLnw4YHI/bGV7OW9ldCFvdHomcF9HUTJLWjVxI3Nv''@;'; put 'put ''c05XZG0ycyJ2PyV5VSI/IUtGVTZlOTBuNzxYNT53MilaR1JnOTxpUzp+MX5JLytdfSMvT2JUTSNjaGxQTkRTKVlyY3xPcVJfQ0AsL049WSFfLy9LNnVTWCNRQl9QdXZ+Smp1ISosZVtSblplOS9SN0BpNWQvcngwIT1QYzJGe1k+RUl2VD51T1tdKTpAY2FdeHY8U117V2F0OlFCTG4ybilwN3N0''@;'; put 'put ''Zk9uSHZ5TS5gSUBYQFBQOF5qPUY4Ol8vWF8iSz5uOSlgUXZ0PTh3IkkxX2gmXUw7UDwpX1djTSZVZk4/IW9JWyZ3ODZCcGl3cG5qPkg0TDYkXn42dU50Nz1zPihBVmRSNUY7VE05anpKd2lVUktuTFlnMkolRkhmI1pMJGh0MCkkX0JDQ2hvSUo3MyxEL0ZFQT1OJEJpNkFhQiRrPyk/OTtFS0s9''@;'; put 'put ''ajtmT11sWnd4JjwmIVohIVtJOkQvRDZGU0dwN3JLKERKVz4+NE5rX3EldTUwPyMyb31qdmYmUmMqWnIyWzk7OlRZMCRITTl6Xkt0SUYqZUgjMXFPaylATyt7UntbTUUwOzJFTDAmQHF5ens4eWVALDtGRX09e3dKd1goRWRJJDJnRGA0ISpATDl6XjhgWCJWfCRfNCZ3Mjc2Tz9lejxAT0V5WzRA''@;'; put 'put ''R3ZQLllRfm1KOWJiUG9BdSNrYVpVZlpXT0FZaiI0TmlnNGo5aHlCeTB1PHxffTFlLnt1Zm8jcHlnV0NKQmsuWlgpJTkxcVtoKTJoIUBydVMzL2ghPDEkVG4qdmBKNCVpPj1VQCFsKmtUSnQ1cklhcVJtZTQ1YWZgaGZfZipZI0FDcC5IWDhESiZLSk9DeDZCX114QUhTSVc8aFpGRzpDL21oNHti''@;'; put 'put ''R0pMRGA9Tzh6cntaP1p1Pm1nenF4V2xPb2FOUEVpU0klb2lofEU/OkNLOSQ4dDtNVE1EdlF9cypUVFg0U0F+UDZuX2xESj5FWSEsNURgMFhYRGBJdDZGS3d3eUF2IyN4VGVoNzBffC8+WEwvVlZXQEozTDEpX31nW1hMeUttX0x5KFhAI0xIeHZMRTgmLGx8QypZNzBRXXdJNHtXYzFNaXR2JSEk''@;'; put 'put ''cCZVfXNAUyIhXjQ5Iz0kXUx5RFhzKlM4Qnc5OWswb2l4MjZjTGtvJXNlJVtgZi50IyN9W2BmP2laXShLam1mSz1FZS40XWBmfklNN304KWxGa2VQMEcuZ2F6dF5dUCJ9VF4+eEk6SE9naj5JYCNQWlhqZzw5K3MkSC5NPDZXNTBgLz0saDxoIUlVTmY4QDAlSTpbPHJUdy9JUys4LGdeSXM0Mmd9''@;'; put 'put ''ZmkxNElLeU1USGN0ZTpZYV42WGJwOUBiV0U7NEdIL2U7bThmYD07PGZlXWQscWolczhdZCxQa1MyPVl8OFdQV1A9TWYxLiMzZ0x1WDU+bFUlJk1YOG45WTdESnxQclYzMX1Id01xKkRCIThAOD56WENQZjFNbSpgI05reiJ6YEs5Wi9xWkRkREpKfV84cWp6aSY7QiNKa000dHg7elU7ZC4sbDN7''@;'; put 'put ''dWM5QD1nYV5PNHZaX1Npb3RlNHA+bClqT3AuI1hmdGVjOT5sKWpRcC4jMmd9Zn1QT3AuI3ZsWl16bGBJPmxFSj5sVTIsQ2okTVRbSz9pJSYhKTFtL3xPay5xWm1DVVhCSXQ7enhXeGZFO3k8QTBEVEtiSSQyZyFPaFNxXkg9aiRNVCxEbnpkaGRsO0NtVE5rXnxlLktVWlRHP01rVCRbWUZtKC9S''@;'; put 'put ''JDc2bmdiJWdUeW1RXXYyfCZJIzZGTy9VcU5bM1FxJmY1WTdPMTk5SUZjKmwsRkUvfDNzaDs0XU18X0VZbSpEUl4oMilZUX5DTzJyejtoXjNqUGt4MkxteFdCIUs9SHRBaVIraz9fSDt6L2AmeTk5MGw+PT8lNyJ1bWpBMkFfalQkNEhELmk8YVdPPTVJentUJG57VCR4WVUkUGVabU80SDlKL3Ik''@;'; put 'put ''Y2F9a2RhXWYhJitdZCwhbiM8ZmBAZiRMZmg1MGhwUjQ6ayplKk01MDYwUnMlND1LRCMxT2FePCUkLDJ8SDl3YyUhcWoxIjlYeGUsW1c9cW0uWj9mK0pOJEg5VF5RZkwqajV6bWZ5OlU/SilHRDlZUEA1O0dMOSU8VGs5cXBtOUx7Zn5JRE9+SFEvJCY/JUl2NiFePHQ7YzkxXiYjYXRhJG5qPyNN''@;'; put 'put ''TUh3UnIvQGUrfC81WD8hZTRQWj53Tmt3TXtxZztfK0AhSUQpZjAwLyMmUjpJRVRIYzhOYV5XPUwkPWthZjg5Z2g4JlJYOCZeJUNwODxFMjk5fDxESjhqO2Z7cXptSzs1RCU4JlpLeVE+WlRScn4qYiZDZ3ptaXtnQSgvWlRSclNtP2s/K2w1N3tOMi5IWDhVLkdnaCE2I04kdmxfL3k8aDtII2pl''@;'; put 'put ''MXk4UTkjOk0hIU9yXlgpbDJrfm0qTylsfm0yMHpERGxrMTgmYX1JVStjTCo1ekBIXTI1ZzxPcTVCMGo3XSVmZXZadTRWbVsjMCF2WigqYSRGWHkwIyYxbGUsPGtkbHc7fD0obFlITD1QSGhtVyQyWmVJPTxeSlM4WW5LKUQyN2p3Z0x1cX0oSkxCUl4yPV0jZHRQOUdkLFRudihpWmwhcHwzV15r''@;'; put 'put ''KFVUNHhpTUsoJVNwW2FFZEVPYDYwIyY5ZDohK1FGU0w5ekdNX2xmdDtVflh2OV5dUDJzRzg6cDhZOShrTHFJYSRkLH1rYztVfls1dzt3PnZkc2V5XjxMLzROaD07Wld+a1NzZmpVJWV9OTh5PnZkeDtVflNleE9FZ1Vmej0wb0xlUjcreTZqeDRgZjcwYHwhL1YwTTtDOmUhPDFJdmskbyFgZmpV''@;'; put 'put ''ZU1UfUk6aTxIc0VsfDg5NE57N1d3dm1DanR9clkvez5mO3YvRWsrfDBFNHQ9aGNjSXNmY1ZoLm57eyE5dmxPO2lNSkxRezlRcyZ9IWc7JSZgYD88WldkZ0lzdmN9OHdsYnsoIWdXP2kmfkJTRyhmYGU0eXM5Ul0oWGpzNGBmKztoIUB5Mnt3PlBQejIvWXc8SH1oZl9mbFNxakU7Ll1xajojPyU2''@;'; put 'put ''TmFeTF85fDh5ITl7Zl8rZnRsYj07biM4bXlNLkEkSEZkLkthLjlsYislZkgyciRuMGQlQ1tqRlREdz51b257dWNlVDIsK0FOdEI/JG1ZJSNkY0NRL35Xfms+K2w1KUgkTXk8VFA3JDVnaF1TPWQ5UntIU1J9eTwrU1N7SFNtSFluQCMlbF1mO3VoO1JYcVVWbkNoMjBTc0pnNmpuI3YuaCZpcHle''@;'; put 'put ''V1BaOHRZRiZRPnZkI3BGZGo1ZGg+PTYkT2tgPSpsSTdLI0F2XWpme04kOll8cT9DKWY/NDBHOiwsejFZRCgsezxdIzE8ZitPM11abWhLQ3B1Tng+WThIQ0Vnd0xhLG0uajUuSV57TVRdKDVUd3hhfXtwPHBkYGBeIW5ZLjwhKTJjRHU+I2QjTm44OUlybXhKI25OayZKSCM9RU87ajVvdiZjJGsl''@;'; put 'put ''K1BUVzhoIzxmXSMzdTlYaE8jMXBzZTpDTTNKZzs9N101eypRSVkuRCFPW1ZXL01hbENOPGZhLjlsMnFvO1JgIWNVLGtHZWgvTVsrLlkiSTJWZmolZiUrLiNYbSJKfiMjdTZNIkR0PkA0ZlBMYU5rLk9Xans/QmRbZj9lKllRfiVbXjhdKDt5KlltS3F4STcqKWhSXTpHTVleV1BtQmg1Mnx3eCx6''@;'; put 'put ''cns1MEArU313XjZgZC5XOD19XmZdI1FAKzhoZiNlSCMhKz4wIkJiZShaTSRfRmc8YlFhLDZMOHF0aUt+U2U2XjJqOEB8Q1JeaUpOJCJFWyskKXwhMnNKQi9mW3F6ZSNaN2pKKn5UaWV8OEBmbE8oc0gzTkt2Q2ZZN2BreiUyJCtvYmxPZlk3YHUob2I5K0I8QyJjRytoREFYWnlXTW1CdDpjRFk8''@;'; put 'put ''K21TWkd1eFhaeCJoO2ZydXhKI0p3RXNDMnEjbW9xeGxVWForfF9FcWhgL1YyNlpfW0ZaNjVKJX5Zb3pEVGw/LHgsRjc2QDUzOldNdWMrI2BbeXlBS2tQWUs9IygqdzpXRUk0ajBQKS5CRUVDKXYoRkV1dDBrbUJFRURgaDJ4VS4pPCFyXjhlOFFWS0x5MEUjeyNNNiFBdm1uU3VXW1ZXakRIK3Bs''@;'; put 'put ''ZT9TSzUwQCs5ZE55S1lpREdaKVpnUlNlMXkoaS9Ocyw+MXFsciUqQGUrSFBrdDpZPTRANU8xLFNTRGd2dHpbZi4jemxNO1c4QGZ+OHR6OStRPmpyNk5hXjkhenNXV3MqOVROazMiZmpDTUM/fHg7NX1FOjcqQDhxV1BIPXBsTEc9QGxmWS9nWF5xX2pSR0dTOVVLdCglZzdlYHNVdnUrXTxJRDkx''@;'; put 'put ''ekFZOCFfenhwfFhqbVsjfFpddylqUjVsM1pSdCYzYmRmSVo3bF96UFRIY2A8YVdfPUZQUjg3K2ghbmMhU3ErPSQ9a11NbSomKUhTYG1QXnNMYyo3WHBMX2YsNEA1IjBxbF5jYlopWkhTbTA1Uis4QDVESmMmKmwhTiJEYjNrJG1qeCJiclBlNHtPY1MxKVlPMmduQCNKI2duS35IU2VoeTxyJF9t''@;'; put 'put ''PU9ufU9re0wvNHlpOytWUF5Vd08uWmIuSSQ5bT8xfThFJWg7OndFNz5dV1BhUDc6ezglPDV7czptUz9mRFlvYDtSVEpGa2V6PGokLyYheWxgfDhQSG1hcHo9KCVmZUMwcjtSXnhNNzx5aGJaPCEwRzNqZzNqVEt3R01RXjhiIU07K3dNbFplOjRidjVvIXlzK11JVUJibyRPa2l7cF9nR3UvRzhN''@;'; put 'put ''N3d0KGlSRXlldSxnWVBLOVROa1UpNSR+dmVWb2U3andnU3BdaURuYi55dmYuN3hEIms6QW1eeE8ve2kueEtUaz9CRSldXzJ+aSJTckBXPiY9PUNJYlBYekVPVTlTc18pX3xjKjtnQVhDbkxOVENrKXpjYEQzXXZdK3ohWHU6c3dLQitdflY5b1JoM3pbeDdzUU5NKkZxSSU1c2UyaE90PUQ6V3sk''@;'; put 'put ''X0hIWzBSXUhYRmA2eH1wK05zQCE7VjExKnYqXyN9Lj1McXErNz0sKDg4RXZsRW4yXkl6KzZnLEtVSmNKO1gwKSpWPzZZK1RIXTMxfVJWP2NCPDlaJlRjdEcvbzE6YlRBVytDT0JlQipZKlhiPHhUSWk3YWw8VndKRXNrTj1iLCYzZjdKfWtgbGEmWkkyWE9JV24jXiFLVmpqUjZhKHFgXkMhfGhZ''@;'; put 'put ''UyxJK0VEdlhlVHF6QlphfV8ocSs9PClFb1JHXk5wYG93KGE6bkU2Zys7OklAenI0RWopQCY6aENXVGtdM2F2T0tTOVFtVmwkMGA/Ij89K3YvfFtaVjh2I2wyIj9zOFM0UyJ1Q0gzdGBpTz5nK2BXJlR8MzxFaVZwWmRvfV95VDdUMFNMbHdnM3hyRVcuNUVaSjxKTjF0YHxUfmJVZWM1VzV8eThq''@;'; put 'put ''RSJ7Ji9HXXJvOVF4fnJWajxeb3N0QixiIThhTl1YTltJcG5BdFsiQHFgamlbMkVGWXFuJDRLfUtrPWdnRGlSW3JuSHUwLD4qQit5dmJBJD12aDA5XVFfTylvKHEsPlFCNWV7M1FCc21HQ2YoZyhxZCNnOigwPD87ayQ4fUUiUkJ9aWlVTz5DS2UrOWduVn12NV91P2BBcmgzRUR2SkAvMWR5dnNO''@;'; put 'put ''b11Wc1JjVUNVXmVaPVF3Rnl1YkopQ2BvdyhTNmE1aTo/ekRWamArPXpzb0VvfUcuMnZoRDo9cSVHMWUmTW9TNFNKUFtUaiZSaHElPDFCNko0RylQOzcsYUNJeXViNzwzdTgsbHhVI2VranxsaGdFeEldJHR8c3F9NzRKPVNTOC5WL1M0PHtPS19QQ0Irb3tHdUFqVXJyWTh0QXteTHV8LlNkVDRv''@;'; put 'put ''RW99ezMvPzp7ey5MYTNTeVldVihhXjgyKGlNQTk1cjRkRU5TKHdbNFApYEBHeFhlYCxaezt0WCtMajR3YSUrLypKRDYxQExyRFdWMlAub1taUWsmXS5IaFVZS1s7KnA2JCpoM1R4QGp5OUBKKDVAbUxqYU0seXg3NFN+IyY1RzJdL2JmfFVWWWxnZVAvZVQmfURvWUZ6bWMxb3BXelZDO1ZXMy9u''@;'; put 'put ''Y3NxPn1zTyk1XU5tTHEoQyxEMylSIjVAJmREQzxfcEBiRExyaC8mZ0ooP11HMyspbzZiTG53PnpQQ2xANzosVkNGK0pPcnZFIjJ1eGQoSzo6YSxpbDQsL0omPUxdLlV+Mzc/US5yeTczYH40RUVMNWlQJnJzMTVqZ2ErdVpVWkl4NE1pLCE1eFlDc3xbMjQ3eW5AIz47MVdvc2NdezE2dUk0PHV3''@;'; put 'put ''N3Y7X0ZPcSl0IUY9NmdTP11IfiNecEM8X3ZOUyNlPC5KJWdxImFjVyJRWC4+fG0kW3ZFejMyMWk0bTouYlImeENhRFs0eF5geFBUSHNgclI0MTdFNj0iOXQxUC5SXXtWP3c0eW5QNVUmTTY4cC9KKmZ7MklbVGpWe3ZSdz4sTkN0QyF2VkVAaFdFVy4icHthJFdZaTFhajV5Kyg1VjF2ZzZ+S0td''@;'; put 'put ''Qk5iO1A2cWBNOmAseTtAKEc+TXNEKndzLnslP1twVCx5Vj8xbGZkJT8jI3xeU0lmNHpIQlRYQzVRMEErQzVpUm9Pdm45JWBSWjVVM214LlArVmM0QHxWeVsiR3pvYX5+cT5mVT15cHp7MSszIWlwbXJjPUZJOUNYeWN4KUhdOUUuaUFKbzlSeVlDRVIpYkAmO31yQVJZPGZZeDwpbHdfP3x2cyVZ''@;'; put 'put ''MStYYHk8ISFaUDhyJH5PfHMoMT4paDBiZTZINHpRSDkqT3csQnVINGpJLlouOz82d0huKSZxYDclfTxWNzhlcyhbK31DVFMqdSE4MjZpWGY/NFU1ZEF7KCE2SjI4MVJyZi5hR3dwR3h4WG4kR3VkMk5SSXIqK3BZWmV5U2JwTVtfNntlXnE7Zi5EcmddciFfW0pGK1cqMVFycylzOCwxS3ciV0FG''@;'; put 'put ''RSV6YHElQnIiZGZwOFRVTXBWcClSP1QsX3FeS05STWRnaSJ6KTh8fns7KysuIUlEL1ZBKjk3O3lQTSVjRjB+UEtlU3xuO3pnc3VmMElQcFU5K3x2TVJ0dzxtKGFud14jdD94WjBHdlhlV0VIRng4SUVZZWhTWSs8ZS9eYytJRmd5RSZMUDg7R2BwbVRFczF2JEIhW151cj8scmdJdVowZF1vYGUl''@;'; put 'put ''U3tEKVhKYmk2b1hleERoaWhhSUxkQ0heSGshVGpgcT9yOjsqeSxlREJjN211blNVelRzKGRHPVN5ayo1NG8mcU4qR0pncE1wUjYxJmwxbmBOYGtnJGF5W3RzT31QTTBEKn1YZmVpKGhgL31nSSQhRzYqSURsLmtJciZhKlMoJU0sfmh6WTolTVlXMypZekZkRSpAeSx8c3x9MVBNbyNTOkNPcz5z''@;'; put 'put ''eTUkLmN9ayxgUFomaGtPYT5mUzcveXksaU9AUkMsfXhaIiRuYEd+dW5kfHQmKjhdfmJZVWRsZT95QWlDN3RFdFJFaGRgUj5jWiI/OGgifDZ1ZDxyN0FOJEJWaltiPSsrS1dAa2IjT3YmcVY9SX5KQnkocUozOTtUMmZfK3Q0QXNVUyNgdEpPZWZGTnxxblYmM0ZHSmFtSU1YUzxFM2gqd3UpJjo0''@;'; put 'put ''SFVwQFhDRjIweDBKOEp6MFU3ZFR4YHZTfSRycVh9SnpaWCI/Xl1bckd1TnUuMUZlRjhhJVlzKFZyI1FoYU8yKSVsQF5PSE92UShpfkEre3VTaXMpRHBmTm0jNFJza28oNzN0OyZEXkBsflRmOjNvYDkkakQlOVp0Il51cGdncHlvR2Q7JFdTNTlvaVNpQUNBQUFmREtBbEJ8RWVMZWNlIX1BNmQr''@;'; put 'put ''JU9LKkJJSUYsck5hVV1Sd2YzMVZYJSphIklBQUFBQUNBJUFDIlg2KEEkJW0lLyozYVJySm8ydUhNeVgmJFZYVy5ma3xQdHREd0lKRUJBRHJGU2pIZ05hRTNCeXZZJG5iPHN2fk5qPFN9bXpxKEx1LFtWWClzJjpWTlQ9P0dzfk5JbWA+M151K3x5MFJpKjc+PSEveDM5U3xOT05MNDN7MiNbMkU5''@;'; put 'put ''YlBWJmYzZUBSV0UscmdnNCZnKXZmLCxFIV5lTWNoPz9KcV9jTWV3KkFyMHpuV0R1YlAuOm0yMCMsRX1BaGhRRldyYjdhNEszLylWQTViQjdrYXRpS2ZWMkJQVTpgPkgjKzdCM3lCIjZSXUBXJHhTbHhMNE9RaX1bOiN6ems6bWQ7X29kdWhOfXx9bHtSfn0odVtrOTo5a00iSDpVQl5MPiFKfFFa''@;'; put 'put ''Vnd0Kz42Z1B3YjVBI3FOe3N+L1F+YSNsQSpgP206fjYsUyhsRUkxTl9zVUUhdCFEZVQsZ25KVm4mWWVLIW9CcnIrSTg/RUZ8X18wSEluOTlTLilfP0grcTJIN1A3VCkvc2JMditiRH1TR0lrRE1VJHhsNDhhRDVuY1VhTUEhIi9QJiFzeE81InM6fnIsMGo9TnlMMldYY10zM2JnPGtzS1Z5TkN6''@;'; put 'put ''YjxrTXpXPlNxNG90Ozs2WjV6TVolPlNETiY8S1lZdXkqdyJAOV81OjUxd2hbazlwMjtqY2BrNkwhZEBQYVA1UWd1djxfKVM9bSEiI0woPHVEYlJGWEAyS0ZBcEo9JUwiX3c5TGUlYUh3WnZgNU0paGwyNUZyUT1QdV8zVFNfcWhWd2c5fCJpMnEwSVVzUEZYM0VqOzRGIi4hU0w2Ykk6e2JoJUcq''@;'; put 'put ''OG9IZjJ+c3dbQyxnRipOMkxfViYpW2RaKGome0wuRztTUkEsWzchemNmK21MV1R+PDhgN3NGTnEqVVZ1fTUhdW44ZGlHcnk4bHVzSWcoai8xMGxgbVBROmRaRjpUVVVFRHJ1ODpPSnBzJnswJG0yP3tPbjFPOXdYRUcvXigmRFtpYUwmWjBTO3pGdkwrOnE8dTBRcDddLnlHaUY2LnRxN0o2aTIj''@;'; put 'put ''LH5nQHFzIiQxLykifTx4b0I8Im9AdCFBRVA+Nis1YSQxJHQ4fWk5aEs3RDBUPmchREJbR31mKV85UTA3MVsvQ1BIQ2JfOXo0JDssQHN+LkZqQkNpUj4lbDYrdEwkTz56OVZ6IVNbTnZnNzpGPzV2bThuIl17c1N8b2B9THYkdms3XTEpSW9FRWFuWn5WJGd8SVJ3Ojx0fTlKREp3Q2pAQmpOPGwo''@;'; put 'put ''bj1EPCJTPGVHXiwwWjRgcitTYmRlUDUjR1JEOGldT0o4LnsvSU5ZLDsybWwpN1QmJiwwYitfUW58cUp3THF+XzlUX114WUFmV0l2Vk8xUjEhdj5ZYkBTdTxhL1ApSDV0MGNIP3w7VWVSclt1elU4PjZoVXg6KjtGTlE7USldUX58VVpXbk5HM3FnXSFNcEk1XyQlYiNaPjJSfkYvSEpuKGZrX2VN''@;'; put 'put ''PEV6JTIhO1BETz9ZVEhrOUkwdV1+akxsJlV5Mzs8YGIuITQ2QC4iPkNlUSV4KSUqV0wjVGkpb2UkWFcuSCVBV05RMG08cikwTzw6NzVfZnhSeiUuN1QqTjhkWz5gNDtyTWtHO313fDJiel9bNENtWXdaWH5DP2A3Uld8YSJSIn0zTyRGMFMsb0dgU1E/KnQ3VG9JQzhlSy5WRmR1OipvZF52ajUz''@;'; put 'put ''aHFVOHZXenpHZjc3T3tOMiMuZnArRkdMVi9sZzAjZVJXSWFnbmJxYE9SaS5pczYpSEBPbndqcDJiUk4vOUI6QSVdLEBEMk5xaEVVYkQ/SStCJmVyTmUoXTxqPHRQQlU/Tz1GaEZidEIyKEJia1Y8JjBFanluIjk1SExxWzBlX305L3ZtK055ISZDO3k0MU8pPT5zenY9TUc7OUwhJHRxe2F5cUh0''@;'; put 'put ''QUAkdDdNYGFaaXsqdiNhPW9BdilYTkVMIy5qJndDM2lkckFMXiZuPWlORUV3Mk0xKm5AeTdbbl08M0ttMnpUNHlMVnN1Smd2YEY2dyRUeE16U2J7QEVLRHVJb312YGZQPnJpKThJWWxfSUVgcng3YExWVzArJV5AQWh3Tnc1Y1Q+P3poPCw/bjB0NFFmOixCbjVUNCR8ekcwLls2U3QuV19yKi5q''@;'; put 'put ''QlhqVkk0O04jWiR9WEMoYF40eEcjM09xWW9VQ2B7SXYuU1t4JDhdfXguPVRZfUZ9JHVKMVNLW0J3X2FdKm1tLF5SSi5BIlBXbUtsekRYQ1sxIlY0U09wa2lxYXNNWiEmZlAuUkhdWC50dWcsNzshVXQvdXB8dlUlIU5iZFlPK3VOemcmcHtmPmt4bzZyalsjIndAcXNReDxzOVAle15xJE4kYm0/''@;'; put 'put ''ektqOiZ6cWZpVUxgTGN0TipkQ3ByXj54MHIqWHQ5WzdAbmRXVm9JWlFVJCUzLl5Ua3l7YEAxMUssX1JwTHYsSz91IVROYFh2MjdIO0xqJS87NlBXQ1pNInZFZW51ITo/TyxYcTpiL3NpNyk4X2IrM2hdekQwelskbyZYanMuMD40YGV4SHN8XSkjYn5NcykxX3dyXUtDKHArb2NfOyFsLDp6Y3B8''@;'; put 'put ''a3l7dzdJVDcsP35xZCwqOGxtSi46c1NBSz88QF9oWXNTaS92TUUvaDN5UyRxR1RDbWVANCVQUWIifD8kXW1qVlFOez17QjxBNWg5ZHRVR3FbbXssIzMpN11XRGp8WEg2WC9wRHd6W3VlV3dydjY9TV5eeHBmWWNLSmA+SiRrPV9CTCN5KnpNL1NxRntzSSNIWkU0I3s+a3RKci9GPz1qSkBCdFhk''@;'; put 'put ''IW9+RSJtWkkwRH5pUSZAMiFHcV8/JGsoTkRGKXIocFB6eGU+aipyUUQ2eGIwJFIxJUl8UVBSRU19RyRJR0E4Ll5CIjpzKj1oMXUwQ05oUVshIWgzOjlSUygzISUibDksTmlTdShALmVFeyNMLCFsbn1+QzgrZzpINWppTUYhIUhiaz1gKzBIXnc/Xm4lT1FrflM1VEByI181XzttdGErRzVqVHxP''@;'; put 'put ''fDVxTWxsTzB9NilYVmxHbFtrOSpDLkxfYiN+YDIkZ1BAJUt6SWhQRjV+OEFWTjYjODRRe0koTTg8USg/Xz9yckk2K3U/fkQzbVhQLnkoe2E1IiFbNEYzY31XeC9UbkZuO0g1ZDFXIUNIWEghOng6ZzVGKUlIMSEwayE+fUwmc3kuTDZOLGZ6JVNDZ05CQj09QjFSKUp4JVI1YDNqLlpTaCNubFdu''@;'; put 'put ''TEQ4TkFEJjlFeDJYYzNvXWlea2xmV2dmSDk0aXp2byRHZjtyblpdOlRbW09WZCZzVVY/R2h5c1hKbyN3cGxUOkAmV2N8ZkdXLHxOOVVQTVUuUWlpZHpAMlA3R0RQdUQzPyp7YWkvMywlT0JHbTN0STJiTCE6V0l6I1p+WVM+TXg9JDdUVFF6Qk5MWk1oUWZtO0VgSiRrMEl0cCFzME5RZ0FYaTE9''@;'; put 'put ''eVdTcVIufXRJS28+TG99PGM7dGN5eko9KD1EcDdPSz07UUFANUJrMG1DbWEoRnI1d2opQjs5NGZ+XXUmK3EwbyFGYiVpcF1fJEhfWWNyKkI+V15OPVVfQmkrX0A8K1p+dWdrMWVsLmZUUkZKYkF5MSkzNjtNSkBMTXYoTVN2ZFRHRlUxOWs8Y0VLPSJtVjUjKnVxb0dENiEweXJPNixvd2pRZzZI''@;'; put 'put ''bFBPfHpZKypXezpYX3U9dHxUOiYzUyxyJmEvODhjYVdrdjE1fG5Rb34qaTp+I10jIXs7dGJCeStYRHdbajkoZEc2MmQ4KFEwSHc0N0czfXJxPHY1KzN8fjw3RiNZa1spTjRDZSthWHtPM2gjIVBtdk4mTW4+Oi5aPmZMS3g5SEQwfDB4fDZST2RVYWwyX3RII3h2Q2R0PmwkfnpwfXNBYFFVSS4w''@;'; put 'put ''SUtIOTt1OG0vOVF0VjRZPUEwP3lmUzc7UmwjNHBMeCJNQzJtLCMzT1lsfEk0T2EqWXpgQjM6Oy8wWEtFezNjXjFxemhFV0J6M2RWQWBTOWlYbjR3MTdFZ203a1NEN2xTKnBDU0BFI0IqamxhTSsvKT0iSXN0Yn1lVDIvfHdQMiEjTyhIRVE9UnAmeXJ+Pn0+fGxnXlYwYzJzTHJhc0NoPTJxRkI8''@;'; put 'put ''Vk0iWltiRnxLMjFgS3wjU0t1TlkxP21JSXk+ODhWOjhtWExNeWQyZUUqcSleRytIdyF6SnhtVSlLY0IsaFooaCZxQEslcXhLSHUuJVVCKlgrJltmOT1NM04iRVJbTndpMD1GR2BoV2dMOzE+azc+T25LMVpGVnkhfCtMLGtObjxxZXZqals3dC48diV4XiZLIUFtfFIldHlAaXFiKDlaKT4xRnZi''@;'; put 'put ''ZXAoWWRgRl1udVk6MX1MeFohdH0+O0BvbHErKUdQS0tYK0V4Vz94bSgkY30oQHBlcSxyTFhmNTcpM1c5JlYiND4oNUw/N20wUSx7ZDQuYnFQNklNIWpZeEI7VUppNk5ZenRGfFI/aFF9LHteRDZtTVR1cGhlfCpAb09ual5JQG9vUVEqKEtkJGxea2tfPGN2akVpVGtoJT5peipHUn1ObktVRF1b''@;'; put 'put ''a3YzJENfZj1udi9OamAmXU0qYX4ibV5wTU5tIV10PWhWMVZzQno4VWcsRTN5UiokRXk+VnlEbllyKXI5b1tJUSNXIiZ0NShHc0guS3thdzskLFBZY1g7KHckayVBMENQK2RIPU5mI0YpaFRgQjgiVDMrZzpQVm45MntXInNId1hqPFEjJjhCdGJiOm9Iays2NlAuemwlemA+OzNaZUBDNjl8WS52''@;'; put 'put ''O20xPVFoQkFHaU1DSmxdSnhOMzVWQk9iYTpOITxGaSVEcWB5ODliOGBpdFF2d2NXK3lKV0xicWohSFpWZzV7OkwqVWlTJn02ZXJkSWRCRHMwJlpJT2FCSil5QCshanhNQFJsPFJwaVpbZWAhcVMxLkd9MEdfQ2pwPXM6YEo9PzhMZFpwaiprLyNNe0khdj58PnNCbTFWbWo/VEhMQlp6YFRDZ1pu''@;'; put 'put ''aX5EYTlWeTkjMjFaVihJNzN5VDAwQzlCfm1gMTg4QFVuNT9aVC9PUT9VYU12VlpyOig5JXtvKThqcD1KZSkxJkFDcEk1JFo0a0xTRyhuSldyOHZieC9sZk5QQEJtdk9EUW8mTXgoP1dJdVNHe3A0WmNNSTtJdzRwUCkuenpOK25lcnByaFRUSmF+K2UpaztDWjo8YkoqVTteaDBTS05BbmZCRFJ2''@;'; put 'put ''ci8sQ11BOFBsdVksOSxqNEVGZCNtMVhxRD5kLz5dQEdWPE86X0dCPTguXk8oOTJPLmI2bSkpLztoX1NNb0lPcjNdQVE9S2pZKEAzKDUzdVlhKlJ7aGI5K25tN3pKUWFRYCM5PjdCImNheUl1WSErWCUyIlhWUS8iUGhUPTtBVjAxUTlBYSNla35NTk9WUDBnK2VFOVQjOW9ZcHlVOGwyMnMzNSZx''@;'; put 'put ''TDBsZGE1V050NUw1O1V6JWlxTzk6ZiZAeSltJTNYZ0omST8qYC8uaix0ZGM5UC5pQH5xPXRyWVJTLFFWVUtaTnx0ezdmLkNldygrJi9OZkUsQztpYzwuMWYsSkRFMldQMHp4a2Mhblh1di41R2RSRHxxXXhKb302LFA9MCwzclFRengpRHpUOlZPSEZYP1ZvbHJ4O31AeEtbbUBjcH0vUm1qeEpG''@;'; put 'put ''LmokcXhQX1EiZDNWVCVmayh1VCpKMXhKc0xPRE1xL3JldnYxIU9AN1ViME8oYUdwYFBJTTkkK20qWzJOJmgzZmZCTDcvaixOWzE2ZW9mP3JaJTVte1o2Ji81UU4jNGowXTkxUW9pSHRXUlMzQE5wSmVqbE5qNzd9RVgkK1J4KiEoMzt1dWVULzxeeFEpNXlpdTVRKERnc0hDfFRnUShRfCtQcmxj''@;'; put 'put ''bER2cEcyLiI+KHRxNjVLd2JdRllKLyZ2dmxdfmR8RVJmdVN6bTAsKnQqXiRMbUwvRDN2NVE1aDIpbyFrdFk7dilyeFBebnQzYV92bk16b2QlPmRdT1czOVFqcmdgckVWI353eHBSMyE2PCgpbXpZQ2ZeXW9nOkM2dzoxRVhLXlFrXjUhM2hbWyUkWlJGbj9yNkRufDZlUENiX3FHfWV3aWcwUlBQ''@;'; put 'put ''Lz5YKiIrYVQlam8iUz5FfFdvV0l4N2BAOyk1KyFVciQ9RiZdYlh2Zmk3U3huVjJiKlkzbTJFdz9oTSFJfSFFK3gjOnlhWiUscn5aUmJZb0lOMz9sNFhlfSw5NzhHZl58UGYmazY5TG9PKi58Vj5ZTGUwSWFKeHolNVEyWUJZSU8lKn1meHMpR087UnkyfXBVKTYkIUxHU31OeWRnZF9SOT9ebWM/''@;'; put 'put ''b3BoPmJfS2FmP25CPj5lSUEzOmNJeChJazxAYmR7VllAMnZFeyExKGlSbzJrWWt1QExCMF47dGteT21vJlZLM2t2bS9nfXBiKCloJiZfNnFCbjwieUNUMWRYP2osbG88Q2pAeXk0Y0kzJntmVFldbFNoSjNyS1Y/WWJ9bEg3YmhfMHRDWnZAPiliaDpeMThZam5NbyE5UzZFSzlOPkIpRFAoW15W''@;'; put 'put ''PTBLcDk6fnEyWEhmYmlMUVZCaEg3NiUhbmNIY2NdVGN0U2Bqejg5dSxqakdOKWZGS0EwXyIpR0Q/YlJhbnc2X0s4OkA0Z19leXsyLGcrODheUG93bCNYfEFOS0szPj4xYCFaSlNfMDB1IkhAQkI4amxAR08lW1kvVyRPfGhzQ3FOLD87IjcucFo2ZGxPQUVPIlJmaCpONW9FJU90cyo6W1k+OFhf''@;'; put 'put ''UExITVZwZXxMSzdLPFdmYT83T0RSeEhLaVJrR09DPGYyRWdla318Syo3TWYyWUF0W0c7LjomRSZHPSVGQCV7WWkrWj8ic1tJczFQJnwiUjAhfl9yMDlvQF88WG9uWUtLOyZ+dFcuTDU1JDdobiw2XUk3RF8wcSJfUjc6fUReQlVgQ2V4ayhVVllbJFElNE4+Uk9kek57NG9vKCIoIWk/RWRKSkxR''@;'; put 'put ''VH5OJGxfZ2Q3OEt2dE8yUCQ2Z0oidmQ9NUxybGZ0cHFuMkw0R09ERlJNcUBOdyw5cigsel07NmJ4d3g1O3FhMmVKYil+VkJkYit1RmNhVT8zMz9rQHFvRHlXNHIjdCElakUxTTJzamB8RiR5JHEoanNPOW8qXVJWaGMvQW1SdzUsU1MjPU8lNSR2MzUqWiledWc9KCFYfC88SXJKKlhCeltvWioy''@;'; put 'put ''QXI2RVIoZnd6RmZRblt1LFNaKD4lYHV6LjhHa1csMEVlUEpYbVd4Tz5tOEJ5OH59O04jUGYjVSViTVhfNCFsVjFbek1ATHlMJEp4eE45bXwxIS87SHZMYHtVUy5Gc2lPXyVrcm8/SXlqVzF2RCsyZUB0VktfcDs4WSxdYGwsPj57QC4/XXV+dz8pM3osa0xHR2R9aiRJXUdBYkl6SEE4VzB1TUs3''@;'; put 'put ''ajl7LlJlX2hWblViaWczI0ozUExmXWZnVyRYVDtZcCt5YElWZURWTHA7V0B2N3xlfn1AYT1BMXNueUpJO1piZVlmZERfWEA7Rl0pelFpazJqOFFLY253KE9jNnBSJXBBKzZ9R2h4aEtOYl9VKU9GR0o9UEIxUz08Uk9KTmQvY0hWYikkWkU+USFGak42KDFwRSEyOjMiKD5VSEQ9W2Y3QCpjK11E''@;'; put 'put ''bV9sUmdzKWFCbFEuVyZhTCNZeFpXb3k5WWEleyh3U3hTPzU9STNwWTN2MksiU2RjLytAOEN4KXBLRWRNWTdGKGJ3R3VsOSZRQiRFcyJDfnlAJHZCfmh2QypTSkRPI2NdOXF5PyYkIy8+fU5Ic2hpVWVaS1MmeEsjMHd1KnRZXUB0VmZlOl9MOXddW0NQS3QyJGlsK3xeVXc3Qi5uLlsueU5yenpm''@;'; put 'put ''YWpHY0o0fCQ7dz92a0g/OyprZykvNE9aYTBgQH0hQl1zY0NycGRUJWQsW3hbalFoeUFjO1F8N3BXZyxQT2RIV1R+NUIlWH4xRiJWLFk9L2o0ImMwRk1GSH5mIWkwWTowQSpIPCp2PD9+aVhWQ0RTUmRaPTY6XylDZzl+aFh9ZktwT0okKEREaXM7K0lPI1BLfmVdSGNMWGJeMC4sJD0xfGBNNkVC''@;'; put 'put ''LkpDKWE7JDIxaD5EKnJxKTdtUXgqJT1sfGZ9THVTXSJGVUJ1bHM1YDI5bVV1P0JuMkU8bjAjZ314KHNyTSlZRHc4PEJdMGV1NGJhXlRJP2o+JHNkWzo4ITs3KkwkM2tFK21MPyE6Xzk4KDI7dGp7eVNKWHIwc0R4bTJRWVZSUTNLTT1GVEllMzkmSilDYVFnfGwyTytZVGMqQ2B5M2NeP2dxM25B''@;'; put 'put ''NWhqclpMUDU9VSZDfj16WT09dVkufGlRJVIsODAjY3MhNyNuRWphW34vMm98aHgoXiMlJnRaUzpIcm0wUFkvemowdTFbTUciNm5SSHpzP2FQL35EMF5xIWRTfGxJYy40X18qO0Q7I0hdW0VQbTE2V20zMjlVcWkxbEBxdllUI1pkKyEsQ1o8WUlOZXVqXS5TdGdbQGtsQGoqR1pGTDl5QjR4KkIi''@;'; put 'put ''M0tNTU9RLmlgbUxsL3F0PkFKTW0pdikyQzZvV0ooMD1vIVAlPFc+dFJGTy5rbT5DOXh1QCIkP0EkczpvVTtAVVBMaFFKYks1Zl5tNkhMTkNKUV0vbG5tVVVKVUlZRHBDMT5Kfn5rO3F2PF10Iz8iLHpfVUomXjY7byRMZWEmRzhNbWQ5ZHYoYjZGOFtsTWxuQ0MyYSo0ZTBvZWx9YnxPV15gdFRU''@;'; put 'put ''PEJFOldCVV1uejRWVnxUXjRpfWxwTC88fmQ9NypUZThkZ2c9TVZ3JGBrQ2lSUEo9fW96UlpEfnFjPF1iS217P2FMSFRkSWMsfHhieUdyMENmU3goSCRhOFNjQmxIZmwsSV92U0I5MF0zKEY5XVIqP1RIMTlUMSVmckF7X0g1a1Y7fio8SEQoKCtWQTRRWnJfTTddWjREZXdqaWd9LzI/My5BQnNT''@;'; put 'put ''R0ZLVSs1bUBKPzBQJFVPN0hdckhYQztjQXNFSE9tfFpXWG00WDxGdjpLTXtoI3dSbm8pR3NYNixFYEV4Ky9NNCFKcm4yKmgjR24rTnkyXltJOGchWUdPP0xmdi5qPGM9Qz5hUDElbF54RnwqTj87aisxVUMxezFpdHJRVn1bKVlvWmpAVzoufU40cnxmM3Eve2IheGBEcTkwWV4oWkRzSTQ6YG04''@;'; put 'put ''bVlMJVdHcHs2aXFOO2xpUT9kaEVFSztSQCUoMzUsRmFpJDJ0dEJTPDozVyZFV1pyVXZAdyM9Qy5vWWJ+PDhtRn40TUpUYGAwSTYwKzV1MWwzfGd+UG84aDlwSypuKFBucWhFbmhbZ2h2U2V4Nj1ZbjRCXVFHMiF6MVJteVlCckFVYGsybkguJEdVZzpwQ1B8Szx2fmRbT0wpX1RweXkubjowQihA''@;'; put 'put ''LlVfUm19elchT24xJiMuPXQjMiZ1eTRpfXVffT5GfiYmaiVhQ2oseFVNYDdgI3dOZV1QOmNRTDRaUj1vV21CaVpWNmJ3PDd1XnY7JjIhQkN2IVttLEA0d3VUbV08dFk4MmFmVlgwRm4vZCJ3Tj1ZNm9tOGoqOmBIR0x4M1UvKS4sRjJSMFc6VnNbO3NnfkVDITRHTldneExGK19sLFFFL1d9WmlV''@;'; put 'put ''N0leZy9WfGBkcUk+bTFPTUE2JVRmTSZqOVFpKV1ZTy4sdF0obFpGNmVxNHRAVD5AOCpvTFA0JCo+YWwmUnUlNC9Ua09pOyNxJW5Qdi5WNkYvMVhuSmNBUiJZIj9ONVQ6NiQzaVVjOFNZUl15JXV+aH5zQEU6TDwoeWgsR1B9ZnI1LEt8JWQ/VndCSkV7OFdPTy5FVDFQdFRuIUlDMUdJWDNQNGli''@;'; put 'put ''dDtgLztBP05FcyF6Tj94N0E4NzA+cjZkbE5lMnIxN0RKUWtVfCNZOSFeVUREWTxMX15eTV9fcEVOb3k6M1UuY1phWVdaaXR3MnB6dHsmdi4/NllVWlFkTyhPMndZSWQsX2dOfGU0LlFNZVUwLmk/X303QFQlaHhHbUc1al5mNjFAWFUjfTpzW1AkMChBKnVtRDZVckshPkNOfUJDT0ghdGpjfnlW''@;'; put 'put ''LCN+ZTFQaFowJD9sPWdwYH4rfU1rWCVDTGJjLk4+dD56PFt8WFQ0ej5aK29WaEN0S3JDXyooJDpLW2pwJiQ4JHRrdTF3QC9rMDtLRlJKfFc6O0spN3s6RCNWKG5DOlR+PDRxWTB+dklTMH4oWX1KSU0mI11QVix0L1ZDISY1QmgrSEoiZEQ+SmUhW19JZUw1OSlUciMxUUZwJl5aV1g1amNeQXpv''@;'; put 'put ''VlslQ3libkBZPSguKkxlfF5MXXIsT2JyVzhLeSNuImBVI0tAMSRwJDE0ay5McmJKa3tQNzcpTkUiPFRyZmExX2w8dThLKEJ1fitzXWVeX0AsbXEvYzBeLE9QZT1qJn5iZzpjcCtRcWs4KyI4YXYmU2kuQV10Qyw4RCVLaXdAUSRiam4jYkw4RFtWNFU/aH18fl9zLFAlMnQoYlFbRCVPS3dZQD1d''@;'; put 'put ''aHF2O1QzM1BFVV9oP19rVlszX2JJR1l0Qj1nVWBSdVhtcSx+cFsvYH1URjxEI0Z4SzZkfUNqailrandkamdSaiNkK1lHPSppNWp9OjxocyFxSSFSSXU4Z3V7YFlmaD9MfTpsZTZTcn1IdjJ1LkU0W21CenpudURdZG5dcWo+dG96fDNRSEo4e0BJZzZ0QCZhOzwwV14rUENhYEcyIiZJUjhtNixk''@;'; put 'put ''MXxyJWVwMkZAMVcqTHdyRDwwXjM8el1LTyg3YlFyNj81ZGIyV21gRyFNNWI/ck8lNWU8P09bUHFLTTpMKk5zczNWIys8fDFFLGFXUy9iKkN5Y3BaSGdyY3tpWHFkMCQhanYjT05BUjErRSE9YCV6KnJLViZMKjwjTFVedF09JnU3P2pufncjXVJNeGJoOnN8MnxnPzxxZXpVKlNfMGxtQlBQPnY0''@;'; put 'put ''RSR1YWRMPmsyN2tGa1lVXXdaWHFnPnRkUzJRPDRYWE8uLlZ+KnJsKn1pKjUydzpzVUY3OmI/bzR2Yy9qPno6UVMhU2NvWSZpQiVuQWx0QiYhfWtqfCpoLzBBRSUwXylXRiNFdFNNMDAob31DTjk8cjckO2tgSD5oT3ZRY2pbWmtFYGJUREpKR2RYN0xFWHQ+QnJeWypyIy8kUmp3eWE1dTgkX3cp''@;'; put 'put ''NzA3WDxMZDFCL2JIN2RiZF0kbGpySGJpViw0Yj1hb2VIPkVqUk4jLzUqfHA3PVBLdXV2Yj1rUWp0TixjZFhjWTdLW3VTdll6IlpuY0E/S1FfeFVbOzA4ZF9UZSpjaGU7JVQ4RUdPInBzOlZWL0dmTCFySDx9ZE9tQjV3KjdPeSVHRz42dDZLeFQ1TzBJe0M2QCxeXyYjK2NXQC4jSWNRcV4kL1tV''@;'; put 'put ''XkwhWlgweX5NakpHeCp8Qmd4fHgvR3d+Sl1ycHU9Qit8e3YpeExVLihiNVs8d3YoUWFjTWMydzZNX29MRnxJJTRibFI9I2tMcjhwUWhhKTtuOVo8VyVSNTE3LkZQX3pwbG4/VmhzQiFNUGxWZz01Wzt6eU1WY3lZT09JPF0/THozIj5CQlp1eDpOfj52Oz12R3lIc3EjaWVFak9uTU8wXWc5eDFj''@;'; put 'put ''UFhEKjt+TGN3QnZNLm1sQ1I2W1ZPTC8mWlY9VHQqVmNwY2RGJG5RJDk2Ljg/eGQkUmVyS0JlbnZjQGUpOF44ZHljImYlKmYkTjRSZX1Kck9wRFJqOSY9JUJ4W1B+TClJOjspVFAsNm99anl1YH0xKkN3bGlkZU82ZSNQVFBSXVdYczp0dFZqdnNQe3Qsckkxe3g8OipoT21dOjhUNE50IX5BfWZ8''@;'; put 'put ''KiFzZyE0N0NdNXBTQH0mN15qO192N25AYXkxYFBbenFGeHIicnJ8fT98cW46dUp6OilmNU9mWmwxKGVMe2lwPWE8ZG0hYltCYWYzeE9ZMWxSVzxdZnZXeEMlRnJAJm0jK3VwOWY0dzYvamhSViVdOzc1MTN1b0BbKDlkLFBSekRKbWgoWjosNTtfND8uTEVKW2Y4UW8rNEMuKEVGfmZLME1COiFr''@;'; put 'put ''KzpIeChDYH5vJVdlajh1e250JGdaVHw3Jlc7P15mQHtGfkJZYW0kTlFYb1M6Z155TnluNT1nMm16bW0oIyUzQmllXlhub3V5Zk1YRURdP2NUWnpdYlRUWT5IN0dRVFFKPzNneTQ1bDpxTTBBRVEsXldeKjAhRFJNVjdsI3VuMHwwXTxZe25DLlh+M2BBTShpcXRQR2xBKkBmMERlRl4iajFrJi8z''@;'; put 'put ''LjFabmh8cFNnPmZ6QUNNNnZlPCYxbDRzbWs8YSkqP0NZPnw/WHpTczYjOkE/S3M1MXgiZGN9KXQ8eDBGOXBbd0MxPz46KVtqUWtWdXNYUio2Y0REQk4keEBkPDQ1TlZfZ3QhKG5dfVR6T3pFZ3wqZysmOVhAamN+QkBKcCRaV09PUXdjRlIhNSM4Qk9lYCRhaFJ9TH1jPlR6clt0ejUwWUhHWUV7''@;'; put 'put ''Rl5kKy54VEkmYjx3LE1OcTJoMVUsR1lbRGFTUmdOSGQmPmtQTlhyI1A/eiw5SSE1NFUzfFlyLkl0aDBnXXUjcSlPQysvUFRra1Q2RCx2N1laISFPe1tiYXRvUGlUMmxCcE5YUS9uOj4/W2FgIVFBfGNuXkFJYX5qNSIpPH1qSmkvOWxiW2wrQ2F4JUthe2xvc144emFyTS5pOlR0NTxvfCM1Qkk1''@;'; put 'put ''NjFPU35XXkw1Nll4dXR3ayh2bmI9XjxEOD9XVmZQXmdDeltDPChHfDVFSHhYemsmVG49Xi80I0N7Pjk8JENYaWtgey5DTlFsblVNb2oxdzw9fn1tKFNocCZdSC4yRDRyOy4seTMvIWZgSClJOW15czB1NEhXQylrYWVhdW8yMno+O0Y0TVNpW3tHMHB8VmEsM2dlOEwhKSlEYCpEbXE3eHFWVzAx''@;'; put 'put ''RFRSezdOR3ooUUpxWVkzZ0VLJWJde0xBOnhySWArKmw+YUdUUzRgZ0JZXyVVTU04RHV1MGRVWFlrI1pjWzp5dHhvV3UzVVZEK3AxVjZkXjJmJUgjc3VZRClCeiZWOzBZQjo9bTBkZklPZkBBMDpfYTUwfWk+JG07c3VlRHtoVV46cllTKHl+cj10VUVqIXpPOi5YNjdYRUpWUTt0WmxTLEI3Lno3''@;'; put 'put ''RmF1UFk1QFN0Pj9fbD9pVCg0MGYwZmpMeVdHeD5EK11ieDgySSNmMS5WelooV1E/UCx6Ty4vVVM9cz8xMTpDRlFtUUAvOXVAdXFVSH5mUGpzKzpyRT90PFspTXNHWCYjT3pmKkpdfSN6KUMkPk5gWjBESklDWCZvNzNMe0hCUFIrVylqTFVoIV8+OUI+LG0/KzIyWltfImd3JXE5Njk7WDg0RClx''@;'; put 'put ''OFN9ZiZ9Kko+cCh0YF44QDAjfHU8N3dUSys8VUM6TzY3TGAwcT0lL0Z9Uy98WXg6cTRDNFM6UWZUM2xzQVhuUk9qQmBKR0dpM3xhVlk3Km47aj51NHh+e0hSZylaKzo+JCohYzw2IW4zPypUfFIhNjdoIitRYy99V0o6YTw0UGtDR2BlWmFdKXo0P003LG9XYDkwTzJ2dFN2bTFScjkkaVorO10k''@;'; put 'put ''NSM5KnZzeWxRVkNgLzE+JixiNHFjS0ZTRHJGaSpQfi9TKiNfUnVgNkdzcUNDXyJqaS4pPDsjOmxDfGQrKF41ZTdjRXA8QmFFfUBARnFBaTdDblR8X2RCanIqczdCcmJ7ZGtdVzcjcm13aHM8R15pcVMrSm0hQVd8S2tZQ0AkTmklPS9CfCg4Qi8jYUFPeWYxcVhDMnY0ZXFbIlRuSVpFY21TQi91''@;'; put 'put ''Mkw9XytuQVlhRmRLfkFPWWxaIVd6NV9dVG8/QSRAZkZkZ1l0Z24rK3U4WG9PQkY8cFZvP1QhWnxqVGk7LFU7a2R3ekJFMW09KUBZbX08eHxldSI5M2EsUDkvXWNvd2p+MlRVcUN2KyxLTF8xUHpYV31eYjxJXkNXWklvTWZmJTUxeEtoYCIjUnJNXns9Pz0zeFddSmt+PDs7aih1aSQmb1d8S1Au''@;'; put 'put ''cEptSHM6YEdufFVEZTZkV2BmNlticmd6R1A+d1VNcnV2TERSPG8kbWFoQGkobGJ7fWFgaHJEay48cTF1QjhSLlErMlI8WD53dn1wS3krTlZZOkh4RFlaImQ4PXlFXVNmL1pNX0Z6Pmt1Pnp8b2dyO3hydV5xOXdbLEIkdDA3KGFkOkNRXkRCTWtRNCF2SC94O0E8N3hgY2VvLyF9OHhVQHpQN2s6''@;'; put 'put ''PHZmJnFqbCkqSE1NKU9Jfjd+bmFUcVZCLGNqbSJ0PXg6WC4xPjB2N3cjR1FyaHJmU1NAJkNIdm1xZmBZWCplXjl0ZClYPmQ0QH5gNTt9RCFzdzFZbVNhIi8jeFo7YXlKajN2Kjord192WFleUnM9cnpmWzAzW0QqM0pePyJRQW0oNE9aVGtwRT5VPmcjKUxfbC5XKFc1eWBHcyVHdGgxVnVHZyJF''@;'; put 'put ''JlY2cHxZR3RkUyNoVikrTUBRPGhhLyl7aTxPYElLUiRrW3M4XkZicF10MjxrT3JROXBPR3ZhLz5vNj5Sa3BiNls5YjB2S1R3M2pCWn4hYWxPVTQyUEtKKFpieGtGSHRvJl1ncjoyS1dFPS9GcGtQPGk4TDRpUEdHekczRVIufDg3WDUhe3VKVFciaTdbYHUuIm0+OCJeO19ZWStpMShYSzswZywj''@;'; put 'put ''LDBlJWNGRHhCNERZIUAwblJ8cGkhYDFuPWI8bnEwN3B7US54UmVxLyteQHdGOClnWSlFOXBpZE9GJlVFLyZseUYqTzltaHdDJER8JG88N2JCMXBrQUJde3N8dy9wVlJAaj9mPXwhUnwwblVQL05daGReSHJzIXtePGU8WGdlJDtvWSkqSFZ9Sz5lR2tkM29wVGRBbDp0RF8mfmQsWDMkKStoVTVm''@;'; put 'put ''YEhpXl10dGE3IS9xbDYySHB0eH1yZVpEKW9WcjQzKmwxO11aRzs6Z0U/PWoufkB7dzA+QnRuYj9fd0hjOD9UUGxQTkhDMVAiTl5tX14mWjc3bVs+bXpiZVp7d2szZCQ8STMiITtyYyFCejZFInpgM05WY013OHxHRHAla1E1cCV8VEJTIU5oKy80bEZXQG1JfER4e1U8NmJZZno/RDJLJFZpIW8r''@;'; put 'put ''L3VKXlI2dlBCMllFQ0k5WlVlelNNbEZnfmpyeC90RXdtUUZfeGlJSyZzVnpXInhXIV8mZT0wSmUydjZQVj83OFoiVE9TdDpaNWpONzRONHd1SSV2YzRATiVPT11tWV1jPVI3T1J9bV93Ik8sX31LZmJGY0l5T0JVc2UqJllKXTp5W1g1dFZwREtPNT1ybWVed1FwansyKG1+am5Ze2oxTD9zVXIq''@;'; put 'put ''SnkuYDB6JXpBQDF3Rlo/ZktKNk9xbzp8MyZgZkBkXUMrJj5OSVZkOF91WyEyZ2Q6PjtfMD85fnZJfHR5InlYeDk8M2RJWl9tX0N0MyEqalAsIUJVfHhyN2NdW2pqQHpQWH5gVXAuSFMucFpxZkolLntgdnNHdSljQ2VWbTl2NF5wVy9gIXdRIkEvOFpwaD58Z1teYGVeM2dsU0omXndXUGxiSkMu''@;'; put 'put ''OnM1RUx8P3tRSF1CMyRgYTJge2g2Rl1zV2dYbHczOE1uInUxbDYvb3ZCKnVaeERNZDoifUFrOjBFNC4pcXA1N3pXczZmeF1Jb1Y6KiFSIm5mM3w7bUA8MUhUWHl6LnF0QGEpWXpKSkp3UyJPOV97P3cyZGh9OiRtOjpqKiRGRzVAKDYyK2c9bWB5TktWS3BTXnNdLE9UKFl1R2xucytJQ30hKiRF''@;'; put 'put ''QWZtQ084cl80ezQoMFhSb1F1ODd4fnUzfVYqdS5SflhDK201JWN9czsyKUR1QmU/PT90UkheMSklO2NiamB1LFIuK31fYTVLRDpwc3UwSXEqW1RfZFZvaWFhRWhwPFQub3hGU09kOkYsKEYmZGkldDJuWiowTyVWOVtvOyNPSnd6IVAzRFNnJW5YT2FaRWlbR0B3L1UiT2pXQU89WS9WVEJae0pF''@;'; put 'put ''UDxTb35gVHFhaTl8WjVEaHYqezA9amIlLDJbMyJVWFFZU1R9YDU6PzJDdVFEOFNWP3hdNiZYM3w4Lzk0eWMyUFkyQUAxRTAuTCQkTlB5YTlkUWRCL089SiZHbTY3WTE7bGtsPDJDNWRwSDNedyVQa3M0P2FPUCFYK3AxK0hRdixYKUIxMT8qeXhQOVhhYUQvZ1RlNmU5aFVLRkVBUSghcHVOdTVU''@;'; put 'put ''RTNmOzxJI2NyTSw+KCErd0RIWGBhYjp2clF6KWgoekJWXyUzPDh0VUdWYHtuUVE7dHhbL0xEI15kfTsjNiNnUVlIQnxbV0IxQF5xVnZ8e0h0X1RnTmxQRENefSpyKWheQioja09TKm1COF55O3RJa3E4RHxLSHcwdlVCZT9qTEVIamVeM0k/Ljw9cSYqd1ckYzJgM1IrY0YseHZMWm1aLGAhRTRj''@;'; put 'put ''JUQqbCJVMWxBTTRIJmAvZyJCXjMpLGNhZDczampKMU5OYTxgYXciRnxuXW1oTU1FMChee3RSL1A0bV42MjkkQGFqUDRBald2JUwiO2plOyNjSVBwfD9RaXduU1YvKlo+PHZsJDh3MHVMXkNTQ0VfXUVyZnd0UkxtJmFZcT1ETTI3TDYlUXRXSCQ7KmErTzhdbUgofmBtI3lDb1MyUH5AcT1Xeypl''@;'; put 'put ''ZCpDTV48V2g2UVdaN3xLUm41cXZKIj84OFhaaGhLe1o2Yik0TldTVVZITkg4bkQlMldwXikrYGk6NjQ8RmclSldtd2BMaElKKkpENXtIQGFDbF9VPDJXXi85NV48WSRxZ0skd0dGJjReLk9nMkU7TjYjTDY4JmYkailuVmQxSE08KmVwUWVUL0hAIkBoLEJrblJHXjpbI0pNT01zdFsqOlYuRmc3''@;'; put 'put ''UVBpQ1QyX19Iek9fbVo4eSE4fSlERlVxNUpbWnBCfkArQmQ8byQyTX47dVduSCM4MWFWTWAsYzZDfWckXy9VOkxBSkopbHNkO3J7MzReQj5yTCFtQ1lWcGU2Pz46M0suIj99VVEyS1toQiEjYCoxOCMreEt5MUUqSzB9RzdSOD90SEQhMlFXRjJPbH1nODB7X2NqUTxhX0BLfSIhYzF6OlFVOGg5''@;'; put 'put ''dSU/cW4uYSJOYGg6OyFoLEtHbXczKClxOElhfWlSZkwlRyk+OVchbEdVXmQ6Jld7U0xUOzlsTSxjImV5IiwmcXxsOnw0RXszdn1WNElAdn1jYzkjTkMwO2woL3c/aGQhPDB7Q1ttOXJ9JXtHRD0vQU8/aHp5TklxPkswNG08RiRFNTtNWD47e1A6X204RmAsQGQjaE8kd0dVZUQlcjBsSnNkfUx+''@;'; put 'put ''XmZtZjRHb2xGbSV4dHI0P2MhS34kL2phJHZPaiw8KDdfWylubCRGT3JmbW9UYipSQmg1U3Y9fFFHKV18JDQ4MXkiVylXemUxc1VuZSNTaUwpRVZ2LEw2UV82TFNxZCwjNzx5JVpWJHFWfGpuWF9xc1skKEk5UWNhNChJelF9OD5vbkNAfk5BM0JkWHI4NHU8YERtSClVTV5BcGI2LixMZEJvdDQo''@;'; put 'put ''NkIub2R9TildYi9JS1Rhdno3XyttOFg9SGBtNEcpWiQrPmJUZmdYVTVTNTQ6PkZQUlRSViVRLzRbYlI+YS9udVp9amF4TU9DUDVUXnhsKik8UDBdUmIqZCl1bHptMEdmNEdnXmVWLEheWDViLmZMWlkiQmFnc0c0bUkjLCxDWWU4MXAvVzBVW3pKXV8hc3JNVkBoMjQuVWU+ZSwzMEBhSjsjJjQp''@;'; put 'put ''JT1qaDZfelRIW15aMyNjW3RvV2QrSkxAXn17a1VbRnhTcG02ZH02bSVNWjB8PUwsIXBkSjpHX0QoVU1RRyNoKm1MRUkqWCwvJSxGeVNia3FZLl4jfkVeajMrdnA7VWFHO15+O3BRZmZzR0JjfUMreEZkSGk0bGU4YE5iZiJbbFtlISJaWUxLJTxoLjYwXihZX3FlbVM2fCVJJE5QenE/UywuOVR2''@;'; put 'put ''fkIrX0B4NWgyNV1iYnc5LltadHZqOChmdkFaZl89e1dGbGMpVm5+MiEwYyZnQ1JOYDAqTXh8dE4oIytEWDJxZUpzblpjZSVBRm1AfGYqeT9wUEdAellSRkZpaE0peTV3UyZqSjlkemQ3XiF5eCU4d3plRDVxVCQ/IWFfS3loaWFhfE4zNmgwQWVaNmleZEh9eCN8NDAqXld9OUxwa2Y7OjI6X0lX''@;'; put 'put ''eFRhI2kqKT9OOTVHfi5CZDlvJCkpSklNVGpgdjcvSXcwX3VxKTNYY2h6TyhjWjt6PUJ5fXhDNThBVCFUMjxXVnM9PSMqfSsobXJ0cDM/SkpdRU5+eW53bVt3b0Q9clA2W2hVKUBiJi58IzswM1NkP05SfDpEdSZ3QCxpYVA/Kn1YVFdfbjxkYzhdXSJfcGVaT01yV2VPYVJHWFlyeyheVl85OzYm''@;'; put 'put ''M0ZoaUVsd20jYFMsWng1XjUqPzlnPkdeZS9zXksjOGVYZ0M2azNndnxPMWx4fWxHWVQuXjlUam1ee0pecHtjeV13ayhBS0FqUFhnWz9hRXZ3bER0RkJJPFpoTlRRYWBWUkgzOlZMW1FfdC5keSlfZE1pPXNpU0R8b2ckKFp5PlMvUnUsNn5iTFpsen04UW1RY2YqXVFTJix6W3JwUD9pXU00T3BO''@;'; put 'put ''KFdxOz59dDxleHZ7KnZjVnhwZlA1YCJfTmg0YDw8T3p7MTZvKVF0NCM4TVtMZCoicDZ6W09bXzFLYXw/NXQ9SjNAJjNxPnRmfTJUeitodSlUKTUuLm5yeDNpaT5rQmolSFIhSGVYQz9TI2RSSEJLOURsW3w7PXwxRlh+JVtTL0lqfHFmfS4wLzRgfWxyaWE6blF6fCY1U0NGYXtfejcpZSQ4dTs0''@;'; put 'put ''VS9qVVFUPmdCWktxZixhQ2RdZGBbdSxAWFdnKm5dSFZ5W0dlKiFTe3ddM2k5ZG9Vb2gxWnhHezhyTW9zPmladjQ3azk1em0mdit7eHpXYnduM3AwaV4jQTV3MFVZMyh5Oz1JTWZeZixQMDhPS2FaRWBXa2RHaSloWF9gNSs+I2s4UzNNI3VkXXlqM1J1dipgTiJ6WGliXm45XVJER195NDAzYm5r''@;'; put 'put ''Qy9ZL3ExdUlpRWMvI0d6aTgoQnx+ejZTb29DZS9rfGhBdm9FRn1afHYyMDhhLz90V2E2cD4sJTs8WWhRNFZ1Q2MkOEd7IzB5ejQhNWx4djVCVyNnVnxFPX08ZHhpLyJFMFAxZE5sMWpuaExNMmo3Knp+QHciYn5Vd3cpNFFHdV1wcEFUTDlxdW1lKHt8WUddOysvRSR6JDFPZHBUR1RRb3M8LDdU''@;'; put 'put ''YUc6UnNQRW9zfXVVeWFrRVcmTDheMUJxKXtJKCxwUXA5eSNvP1hQYkNxLys0ciw+cEhpY3lbYjNwKShaYCNDPUt2NTBsKFkucXt6WmlIVEBRYVkkUldtRTk+WmZ1Oi51Rks6cyQpMD18SnQrcC85fTlER2Zmey9TWXxgMGg7RUB4QGY1JEopRk9MWmx8aCN6JVU4Il04QSpkIkUhT3J8Oy9pPXFm''@;'; put 'put ''KCNNN1IoTUZfZnJTJC5PTDR5XXN6KTIxRW1FRyhzRXNXW2Y8RTFBTDNbe3ZTNmAsWT1XVWFzbnl0Xj9tSmV+XWlIISRUTXxNWU95NlJNaXFlTjFzNDU3M0l8RV8iJDtDaDRdfnUsYTxJX2YhTGtELD1hLzsoLmNzc2UrWixofXh2ZztiPiUqaCFPWGE1K0lGbypRUV5KNUc9M1A0VUUhbi44IyRm''@;'; put 'put ''XnF3KU1OXSQ0Ul87MGp8cC50PEpWWzZ8LDwvPG0saDx3c2MmITorJng2e3lldj9HTm0xUkZlJXBvMS90V05qTmhEcDBDX0UkdHNtJmRsbWhNX1dVZn1rXnI4R0IiZUY7RzdbIkJ3R35sN2xpczN1Q0lZflZiIm9Id153TlZ2ZiQuQTh+MF9kLj45PklQdXg1KTUsMlpLYDMiOFBJbUhqemdGaWVq''@;'; put 'put ''WHU7OXklSW9WfjRFV1FzTW4rPEs8cFpbaChYbHlSJGAhTW5qRXZtTWAoKCRQOz1+aDdiQXtBQGlgaTJnR3RoOkJqKiYuTE53b0x9eFdKMERwNTJ0NSFBSykpfG9JeXYxRHRXVm5yNlpXUDdvcVBrRmcrSkZydkNrR2VMRDlMY3ksajJraDkzbjRCUiVrSGlVb1F+XVUjWXdQaFllezQzNmx6dW8h''@;'; put 'put ''WypkUUgyYXxnZ3pPYGNbaFpSPEt1citPOW9BOl87Wj0uI0pidnlHIVoyPWVPMEFJS0t+Y24jQFtPMEw7OUNSNzAlWixQO3kvcEx4I0wrdUhSa3B5KldJVWU0UkRAY3EqYyx6NlpDeylrNH4melp6KzIpL3ZnU0FnN148QWFTdDFRVH5sKDU/TEgpeVBvfmBAOiFBYSR8O2JTX1F6Iyo1TmNoemxx''@;'; put 'put ''O1QoajgmRWpyZ35XeWwycm9hIjt+UTtiKj5QbF8uaWAkZHlnUn1BdkAqNCosXmBeMHBiYFkueGtwaTtmRC4kSlJ9VyxeVS5gTGVLXSh9OzEsNmY3Vz1kRTJtcVE6ZCJJIzJgWmlBTjpqakRHN1U0d3NZPVtaUnlSWypSJT1jW1VHcTRoKkpsai9ldE9bTE1TblFBdDcpZVtSTkZHJE0kMVlCWFEw''@;'; put 'put ''VFtJWzZiXiF7TFgpWUNBelJlWGddNHB7SyxBe0dsMjdFdShNSU03Mn1UYDtxWnh+UDAzUSlSJjIocT4ydW0+NVc6SStMTnh8fWk/a0ZuJEA4a05hY3JhaSxMUGkpYDR4aDV+Pjg3IUlbY0NtIXgmTyE4XyVWSjgvTHBTUWMmcEJfWDVBZihXVDIvXUVSR0JFNGBAL3J1IXk3TX15JnNxWmkuVlhl''@;'; put 'put ''MmM2RlM5dmhbSSw/VCZrayE1Z1tkP3QkP3dDUTIhcyxVSG9mTll5R2pUZy8xP3AzeW1KK1RMO2pOK0N9YmAzaEIzYU1XdlNpcklmfVpNNGRXQmhYIURNaD94UGAsRzBpMSxHMDJaX2M5RmhBbiZVQyZ0OkY5ckg0UUtET3ZTcmRuOzE6WmY6e31panEhXy5qOGEzeDBZcUhMO153Xjk8PyheRCxo''@;'; put 'put ''SkM0Tj57dTNvXSM8W3x6Om0mfi92TEN7VGQ0Yyp9KWNpV0I5Ok1PTXglVnl8YEtEWiJwVGRpMjlZMDFGIz5FfE05SzJbezNQOC5FdkhYNjU/UDpTPHduT1E/YywkVXk9eXhWd0lXb3BpOTJjQUpGNlApZ1ouSykuSHhHM0JRVjEzTjYmZHR8UFJpZG10bFBuVEIoYUQ2dlZ6SjE5e3lYXT9mMyFf''@;'; put 'put ''TC51PmU+JndteGVMWWR8ZyVhMS5fM3NETylJWk1+a08mSEM0fWFwZjJIQjpfanNrTlpSNjdeZ1l1IV9DZT89Jj9lcCU+VX04bF1fUFU8dThTeiIxJTEjYmgyQVMjK1tvMlhecCZ0ZVZkODNYZmBINm5fKHxEMX43XU9MO1B5NmooSTdlKV1XVUJibn4iNyJTYXlsLyRTMzVhQSRqKkIkX1MpQy5t''@;'; put 'put ''KlhyYkxveT0rTkp7aTI2UGIiSEgzQlVPRWJlJXJjS1VCTE5aOjI8O01TNi5nQjdzNWNZOl1iWHowXzZXPW1YZmVyLHMiWXs2JDNobjpVRmRKTEBPV3RGIWd8cEIxbmZDNGJ6ME1IdmosLlAiQF1jL1hyaUxSP01uTl5UQ0R0PH4xMkkyeTw+QCpxXyg1KTh5dXF7aTd2QGwyd3BaYSkoSnNQR19D''@;'; put 'put ''Ol5QKEEocT5KejUxW1BIXiQ7RT4jKUlLWmlBRT8rcWFPNWVNQT5kRiRRfitFMnE7YkkoPVZhdjQudnl9WHRdLEczRlpZMC4wVXRZSThKNWRAUkc1R0h0O2MpImBVdG1pZ2t2KVRCOjpTfkBgYD5NZyk1TFAkcXJMentFbmB2M1FDe1pBVz0/KUpGWStga1R1XmVAKDFMXWhicndrbnEzeFYiYGhq''@;'; put 'put ''PT1UQGFDM3VHXnY9RXU4dzxsRlswTFUmQWVJU2FaSGVHP3I8Zno6cF5aJVp+aVFRUDZSInx8NHFhZSo5ciEydmRzcytDODhFblBULmBkNmxiNURncWwlYmckV0cqfn5IZXA4Y2J7X24mSy4mRTE/ckxveC9TOmNKYG8yfkVYQmpGQm5GdFtELClrLyw+JCl0UlQ+PWhPV2g8OFtDaylKVVRYKk1p''@;'; put 'put ''WX16aFQwc3JzbCQ1UzpxST5kSThkQil3XmZxZHRjeiQ7V3o2c205VntEUlBZRipUMEl6LkNCPmlgMHtCcUB8KXJPTmYuaSYxeEB5LmZITyNRZmRlInpUKXlgLEhXMzxFXV9ba0ZCY1N6QC9ISzlgbC5tKyY/SGl4dSo3UkdzOURTTl9UI29GaiFVTXtxY2t4Xm99RUAkdHpsbUdtQiVsSWplY2RK''@;'; put 'put ''UCp4Y3BVfH1hQiZxfWRKYG87eE5EcTs+WWlxPyVAT1AwPGRpIXFtPXU6aC58QCEwKGxzbSY9b0dbJE9OZzQiTnIiX3whUlNQckVkb0VNdWJMQ09Hdm1FMHEmUjBAN2NaN2tyeGU3cU5wQHVIN3BqfmBNZUw3SWI9WmMpcGwpdGUwSDRgKHUkPFQ4OlVGXXFjIS5jX1BPSnIwYiVDPyt1X3pfRDBX''@;'; put 'put ''X3hDMFszWWNsfDIyTVBEfnZTMXhmTTF3b29BN09NfHNWXktOO1d8TFo6IlVvUHRlRHBQN0dOcTZMd0B9O1lZRzdXemBNRz84Sld5IUhtRHpZX0dQfWVxYj43SWElZWBEZl0jWzpEL3w8WiRlPChkPFtHbGp5eGs0RUsxVU5tTUJ7PUE9bHw2SllmMiRwRjhDLm4rdzd8YCVYcHhpTTI+QG5uTDE7''@;'; put 'put ''W15sRV00OFB8b2p+WX1TOzRBX1VPfip8IXshO3g8KVJKQ15dOVdjT0dIJWRtazZdaDIkbns9dl1WW3wlcig/UWYqcWE7JHFLKjJidC9yWixdZ3RtQnVLfGQ7TyEyTkdTJjFAPmpfanU7Q3t1dkpCMzJtKltmaXxsSF15akwqP0VmfSlRR113Sz81QCtXQFEqJkg2aEVsJT4qTmBlYSJiWHhmcy9W''@;'; put 'put ''bCs6NUVeQEB8Ykh8eEdTVCZHLHV3ZmJ8QXJYNlZ1QCldWCZPTTlSJmIjUD40YjlFMWVHK1lpXiRMRndrd2RvajBhaSw+UzdMclFsW1t9Rl1CZmk7d1hkckNdOyleVX5bSllKSlFhd35hVV1GeGNIT1U+VVYhOCspKH5pZyFGdyx7azlIVzZhY3dJZ2l4N0xubytBdWNbbl0sUSE+ZE81TGdkPzB8''@;'; put 'put ''ZC5sZD0lWjZ8TjY7XSQkIy5LajJoaD9kaD4/KXwiPjlXTiRHay9PUSQ6ak5XYiEkWlJbZTxPPXkhRWJ3ekY3M3hVdkskNXtgQDZDI2Ftal0ubTc2NGxLdFMuJk0qJE93Z1lhL0Y6LnhteztDO2lrdExuRnpxTCxlW2s0OzV6UFhOUnlyM3YiJXM6O0dlSzpNKl5OJlt6ZVVKZk5YQmVKNTQzOHw7''@;'; put 'put ''N3ZyWyxuUHs6W05genpESUY+Yl86c3leTSF+PDVnSnN+Ii9UVlZ8MG5UUTdCdzk1fWZRPlREIkF3PUFoflQzTjQlTTZDI2BxYHFOPiZdVHRwcThVKTQoI3ckYyk6bnFDbytjUjFwSkE+aCVxKTM1bFdSa146dCFFX1RXOlVPZz9eaGRhUmoid2EqJm5NNytULG5GI0NybClAKSE3WSg1RGdjZmJJ''@;'; put 'put ''YEZSXkAjPV9SS1E3P0pYbF1RWDx3UiYrZ2V2cGMqbDN+aXs/KDgpV1pxR1N7fHQ/P2w+JTxkXSMzNV0kbVQmMHQwP2lvfnohdENdX0Z5OX48bFh2YHdgdVsjSyJWRFNXRGoqW11iWi9lTEtkIys9WllLKV5LfHhYfGhuVzhCP2U9cE5nSEMyTTpJSTsrfGh1UEZLRGtzOW1oVH5ZOXxldTM0cjo1''@;'; put 'put ''UC5FW1lhLz52N11XfFtOeDlLaWd0PiMyZz5KIXVabVZMalV8eDA2K056Yk51UlRxXyMhbmVacD0jbCJ7K2loNlgxdkptTWlLd1pGKT4ySSxfWTNwe1c/SEIjOzcuO09jKmAoKTEyeWFDaSh5c1FrUTFVUUg2YGhUK2NTWyx5L2pGMiZ9PWk0UU88QEVBe0Bvfm1MekQ9THpxfmFRJX1jNU5yWmVj''@;'; put 'put ''Rl0hJXNbNGc+UXZUVUFXUzJeRiNvJUtnY1ExUVVjen1XXTtDeyxRfUM8VHZgNEx0eTtrPEUxJCw2ZGhscTdtUXgmOFUvTCw5IztKXixERGhOb2M6XWBEXk9AM1gwSG1yWmtFME00R3c1RHxoNWF3I0FrW1lGSFtbJXJxb0h8RVFAMFp3flAmViwyKlFVTEpBajd4anZuPl91W2xwV2xsU2lmYi9v''@;'; put 'put ''VkhMZSU+NiFEOXNLLEVTKCFIJHxHNGowMUY9dFVONF9ka0d+UCViNm9ENVpjR3hbI1RqYGNCP2o2SWNYKFt8SGFRe3BGTShLM2JFUm8lc2w6ZU0sWm5zLD97R19acCVhMSpTfkxvSjwyIVlreSt4NkVhaHBYaSkvW3tnZWxgSzZAV2cjSko3ZU92ckgyYWI1KyMuLGBhWUlXSi5TY1JWbVpybl9w''@;'; put 'put ''TD5FZWAqKmxIVCo1SSFCZWJGLEYuW2BjPF9FSC9uKWhETzxncSRnWiN2MS5QcnRUPUxRKDhESn1nL1J9YXZmOSMiL2ladmdWVi5bbEBZIl5MKTJ2XkwlLmFwNE5zb08xLyJlRFFKYUQ0aFh0ajMiSU1STXRDc2MjSkYrTWhYViswdmR2UlVYQFgvaHhzSGVwfiw3MyJOOCFrUkhjZD8kYCF7M2w1''@;'; put 'put ''dVdhW3YhS3d+ZyUjaC9ISiovJVdmcnxrRElEY3wuJmoqLk08UHpUNnRJTkx2WjtDQkVVd3dGOHwxdypie0VneVBbSEJqI0M2Iy5bOTN1ZnNzTVI+UWxrQ3RBNkx6V10qRGpqeXlaUlZwVlJBKEBXOz0vJURMbCJTYX58TXx1IWlYOGZXS1MhM1szVjxpMH5oYlopelUsaVJSOChzWStFRVJ+I3Iz''@;'; put 'put ''RllBRVFfaFdzXm1lREFnalJAcmxWUUswbnxLRVU6PixzTjdCYFRjM3ZoZ2FWMFQ1JVY8ailSMlcsRV9VbSoiZzJVc0d4X1BaSWd1cnEmJXkxKkNicHxyNTxSMyR2UnZCP2IoIUpCP3YkNU9aWXZDam1vLnh6cDNwZlZ8eloyLk13PnxVbipPKHAxYFdGbD56MGZqKSxuZGhzZ0g8OTs3MkZ7K1kl''@;'; put 'put ''UzpiSjIzaTt6eHJHWiRlUjE2MSk9QTF5IypzO1MzOEk4bHh0WT92KGBnLFE+dF4yanFtWyRxdTV5YDZ+ZktzKj8rdXBKYmk5WHNxQHp8Ml4ibEoxe19gUTBhejRtbjN8QmVad10lUiRlcSNfQlErb1BmeDFNJS5ZezBlLERjPnBdR19lfVBuelJ2bWNBOTwheys7MUhyVlRRbD9QYiROTGcuV0Eu''@;'; put 'put ''PElZVUVveU5IR3dfWkElbyosZmZeOUZMbXRgNEp2NyFsIyhOb1tQV01jZG9dX2lfYmw8TmNvODV0NiNZVzY9Vjs6O0FiQDszbi4vTHkzS08ySkJTSyoqWEpxMzs8QyMrdi9uNVlxNlEyKj5HI0RGS2Y7JTpkKFtLJVUiYXthRTY/Zn1JYkZaVnYjfX4sMjgkWkRmUCZCbTNkRURNPUJJdTJnd3pv''@;'; put 'put ''WkRaWUxpRG9YelQ7IWRXcUp9X2MrJU9AXXpRXyFRKTVCRHFoTWorZyIxTWBIVTQzKWw8aTRIaFtfb0NpbHJ7e1grWFlQZ19qI1sueU9xO15leEx3cS5fYzIsNX12VytvVVlEYXlLfDgqYC9HMyhnQG9FezJOZWZlWWN5Tn14YnQ3Qls0Smx8WWNYSClCLzAoayR9aEQ2bGxRYExZbCE6RUBRKWQ1''@;'; put 'put ''dzAqVU52WCVZQ1Y+Nks3NXV8Q0lZL2t+RSEvPH1ASUM9LHBkQ1QoMXpRQjJTTkJjKXkhYmgmUzd2LzozOyNDQWhIU0xnWTllMHA1T0N+NS8ib2FDMykqY20pLyIlfEZQUDtjS3IjL0Z4bFVsLnYqMDB5aCojRSJ1fmVaXTRnIzdlTng1PHpFW3NKPEBaKHloNzAiZUtCRjc9Uj89fTVyWDouSlp1''@;'; put 'put ''NyFrbHVodXpNY1csQEJiMl1XaFFwVVU6ejN0UikwQUIsS1FdTDZDfjlNZDZ2IWpbISF3TDZvMiM5ayp6KSU8TiZAdEoxdDpjKEg/NnpsUl9WYU5QYk0iQmZvdFk5fW1EcUUuM1BIT258WHZwYihELlZObil4bWBNbHdpZyRSZWFVY1B3U0JaKTdZNS9rQ3x6Lzt9eUdCIkVDYndWdTlRWn07Mnde''@;'; put 'put ''byNlPVQ7YmhrdFM5XzRLfGBSNV0pMEdjLCF8NjBITWxjV24uYT5edVlAWlQ8ZVNzKk1zdmRlKloxKFtkQD1RUFh2YX50I0VMQEZeMWlsQ1h5USpqWiY6M2VgWFFjX1tDciYxIjpCd2kjSEc3YTtUN25VQEgiUDBofXg2OiZXcE83LklaalI0NTJxRHBeYCQ4I0peY3ombCZJcnRPdFI1VD0hdDlJ''@;'; put 'put ''cjozKDpuSn1EVGsrU3Y4M0lsWEB1aCJtLDIhbUJnY0BoWUYoUXxQXyZEQHsjOlplbzFTIURZcWIkOCF9LzFHYi5IPlZLJF45MnAiaDlhLiZsaG9fQy4xN097eHhxLyVaUHc4emd5Y2owRXpBQmQ1WHNwKjQqfXEkV0BuSWdIRH43dkd+RD1mWTh8MWo/dm5BeHxZSVJzWyptSkFkRFh4WjIjczdw''@;'; put 'put ''NFgib3U8dCVvZEpQSlAuX11beEtHaENFazNbbiYvNGt2VkUjYnBgJm9nL0hrQHBaTnwrRWchaUkjbTVseTx5U1VfZmduaFdgV0VHbmc3e1JGOiI1Nil3Z1IpJkVFVTpDb2gsTX0oQyYjbXl+JkIoaHZwRnBNST5eTnBxTE5qMlMhNE1KbUooajU6YH5lWzpdLExfanJoJU9SSTFJRzIxZGs1eUhY''@;'; put 'put ''eCYyVURtM2JiOzZ7WUB6WVp8L0J9PTRVZiZFSypFI3loYiF5ejpgJm1wLC5aTHEwJjVzQFZePj44ISpGczU9fV91Y3I6NyNXM1pKcHNed1k/eF8+LmA+Z3hyM2NOVV5XNUVRZj52VFJVNk5gJSYmMW9qPmc2X1prUGl4U2dJIWZoOSM1SV9DMytgb19lbGdpIzQwJjkhJmQ5Nng2VXV4VWxlJXtD''@;'; put 'put ''TVdUMkR+Q0JPdTlqKSkyQ0s/ME45ViV1bmh0Vi4vJTE5L2JlJGI4dTBMRl4wPnpsKlVVRWRHPTN8WWtAUiswRWAodD9WZ1c+JDMwdF4mQHs6WF5oVlAmKElTJk5NRzZ5QzR9L09vWzFFJHM0T09SIzRnekFrSCpmUT1dMH1eVVNhSFNpLjFWbnJ1P1N6OUx7S3cxalthbkBqYFsxaT4xNnY5eCs/''@;'; put 'put ''YTw0dkssKDFDVS8lIjRnTCJkPlRCcD5jSEdMPGY9Zj4scmRmQ3FDIUpsUUxEYlplQT5PalJ1Zj1WSUh2VDZqdmUpdnQ7Rn0sIWtxLHJ0VDljRy9hUmNZTz1GYVlOdkxvJW90akEvSCFHdkVoNTJiP1BBRy9YP1QxayNifjxTZ3NeNXZoKi9HX3YyUDd8P0xUQEVfMVA2X003P1tUZUJ8cmZdY2NN''@;'; put 'put ''OT1Dcz9hZl19SkJsZm1tL21rNGBIZ3M9U3U0IWd5QCRVSDEmY08mW31tNmd5WEgpP0RPWXE8KDM8WyRtRFFgUkp+UF5zbSRdS0FCa1MqLmQ7YjN6SDk2d2YySXJGRmpHNj5fNVJUJCpae2I5LiZzMGpTUypqJT5UJEJ4YVpaKk00a29HI3IoaClQYEdjfFE9QDZHXnZmY2U7a2l7I3xwV3V+MGpd''@;'; put 'put ''cnI7KWhiZiUoaWRlekZ7dVQmS097X0NWKFRjKWZ4TGNYVXFSY2ssUiImTjF7dWtTVDlzMkpNK2hbPko1Ki84P3hYTFhxeilrbkJeaT54VE4sV1VQbVpeMGB5XSlMUGsoJEFifHRzVF5KNk5INFt0NCF7fjV1dzc1In5sZzlgamZ0bUlGQi47KCFBRCohVSJscVc3cWckRWRdVE9wQTxOfUo2T0s4''@;'; put 'put ''fFBhVzlfcjM+JCNtUCVbeUgmUkI+QGM/d2A5a3BIKjtRdjskQUdDcU5MNGFBd1gkfl1DL1U4VltqdGlAS15jc3l8fCFTS3Q9Xzk2MXNhKls/PCxuVys2aTddKl1fUzJWe2xzZj02Mk0ieDNaTDFWSHFXbU1QKVV6aXhGaklYd0x1e1txY29uWEwkVUR0ZTlua1FSSiNwQz46OGhsSjRXfkF1XyhD''@;'; put 'put ''KWtHVn4rTFE8PHAuaUM+ZzptYEpydkw6YDxaIiFtbTtnIlZxeVEwUixCRz4lTyhkPnY6bGR1TEMsKyhBNG1EOGNUPi9nNGpubU9BcXJLLDo1UG1+QGtTZXtOc3VkLlhwd0JVMFh5Y3dyPVgmL0xWUXt2IThVOnIxXURYbH1fTys6KTxySzdReWUxcF9RPiVWPXgofUgpVjhvRnYodlA8MmFZIywm''@;'; put 'put ''Q198Z3Q2UThQPiRrZmxJO1RTTDlifXg0LDRBLiNbWX5mLHZPJCZ0RDpVbkcoYVc/X2U0SFkuRTx0X1UwfmR2XU4rN01PNXl4fFEhOHdzfnUlPjpMblNFZzBCWlkwOSozIzA9bW0uM3ZAaVg5KWd2UlJ+am9OU2UkSyVCSEJUY1ZYVm4uYnN8UzNpR1k2LDI/L2RhL1IrZFRVelY1ZHhhKDZVJFNk''@;'; put 'put ''SGZEVGZZeCUzQCJoY08oeUxgO3lQPWVDVmFjaCQjaj1kYzpNNmVjPXJpZVM5MThOWTxRdix2Z11ddkM6KkhCTU1oX2lIWG9bKld9R352fmh4dko2XTdXREV9SV8hUGg6eStsZixOfXdoVU5fK0NTYklvXWAjITljX1doKztxdSN1eG9lQys4bWhNfVAiKUheW14/Yl5sSDVqNz1kcXF6QHVXOjp6''@;'; put 'put ''alhwWzBORXYiSyhyJCNUMVk0cyt7IUR+ekpfJUZbN3wzTHJAZGg+RCpLOEchUVFOVm8vLkxrNDIjRUtgKHQqWG8jKiVMKyZZZjNGPCs3JkpfT05MfDwwNEd5UTxbcUgqSWBWOF9sP1d6XjBTME11cGU5fnkiOWVBJX5WbHhGRXYyOT9UMng0PD9kP0dvJTBaQD1MS0dqPEYsTloxbXxUUCksOWY2''@;'; put 'put ''dE1AJCRgeCpyOC4ofUNfQ0M0a1U/JnZlOjs1KUk0PXE0cEJGIXI7T3Q1WEVyRSl6MUp7R0h6Jjc/U0FsTWZZYTVQNSlWb1dXTSQmViF3IlgxXnE5WVVySjo1JD86RVhJKEJYLnFmeWZzMztOMj40fF5ENUNsYWFSPFpQVlIyY28wYjJOUyh8ZEF3QnU7W2c0W0xhMlZgKChsSUFNNHdQMU1JfnVI''@;'; put 'put ''aEpFeTh4QjNpe1pCYFp5THxPKzlhR1loK21Aakg9MFcqI3BKR0ErQUMkUnQ4bTpHdWclQ2omTGc2RmJiSHN2MkUjSEZMM0VUTzdoXnNgIioubm59WUM7Vzkrbmg7JkR9diluc1lQK111KGZgLzldUWhbOypLOlBqMWdwJDNqQnkoMkxxTFNTSjNyK116UWZ0dHZDaTJpSkwjfnRuaSxEJFZmfEdh''@;'; put 'put ''fF9nKV9PLFVUfFldNkl7d3R9LitpIzZCRVRCVE46KCxhZkpjSXIseC5yeWtfeX5feTg7Yy86O1BMWil3QUZmW0VfNys3YUVyWVlCSCNpcl4+O3wzRTY6Nk5FKyxqUXdhTyROWmEsKysyYEZiKi88TSJuUkA/Z1Z1P2tbOGtAPn5RJkAkNj1YZHYlPDg3dCErOzA/Yz56Tm4xeVI6YltEJTlORis/''@;'; put 'put ''eUAwO09yemYhK2Fid0owNHJnZ2lnJW9wVWl1UmZIaEc9Zl43SyM/Snx0XlNpfTx4N3FkMCR9Ny9TO1Y7LkpkWG5uOD1Dfl57MHZAd1h9KUtiRlR6ayQkfVgoIztncThtIVk7YU1KKzt1fjxUaDFQIiM+eih2ezo/fD9ISFNtTH0qLm4iemhrP1hKVThXbHw/QysxXzFaVUQxamx7IWlgNkVBejVZ''@;'; put 'put ''XmJpV2NsQkM6bmclKnR2JSZlRiM9KlFNezBPXXt7JjJDOExjRzkhbzNnYnJiSEN7W0IxQFBZWy5JYz1zS2dMOkI8dVohRl5+V0A5c3JgXWczYj52dSk0VTpeKypoW0ddKSg1ZV1pIjUmKFdZaiNiYClxOH5wWWM2eXhmZlk6YkdfL15kKlt4Yjs3MnAyTDxyfGFuJUAjdX1kWVImbmchN1I5SFs4''@;'; put 'put ''RGpVL0grcll4cFpjamQ1UFdFZVY3Xz1qZ29YV1tHRGd3T1NXYkVPZ25hfjN0d2s3KU1AbTdMMjdhfklNMzZ9b0pbRl4iSFp7KXNMXjE7cT9NLnpkeClfKFtJWVczRE1aMV4jIz9aPVVSSlVbIX5BUDE0eCMzamI8fWIjZzc3U31WP1B5MV5JPSksZG5qe3VXbSkoRyk8LjA2JCRNPjAuTnkoMyJt''@;'; put 'put ''PVdpUCxITTR3diYwe2RPblI4JkFaMW1HdTlZOWtxOiFAXko5TlZPYDhyPDo5I24wcjFdRTM2ZG88bzRwcmAqcmJDZHtHYUpPLjtMe0ZxZWQyLmNFZCZ+O1tjekx2RUEyW2hnKnkwOix8SG0+XXxheyU2MXZbaCpFNkp9P2lIaXFHT3ZBWD5jdmM3Z3ZbPkcmaC5vS0tdMmZdJTVFdXkkWj14VVZF''@;'; put 'put ''cE9lZUU6IjdiOTBKZGpfcz9oSXgqVn1eKG52VyllYER3IkN5QlFZIzV3WSUxJjwxOjR9QTVOT3F8VENyWEpUYlBxIk95NVAqIztEOyRFbiIzc35gZHpEbyUpJT45YlAsM21kRGx0VmRgUXFPcjNOMzAuaSVeWCs2NWUjWHEzdS9eY1B6YTxmVChhUzwxdjFDcSx1PGphKzlkWkQ9ZF9tRVpIfGBI''@;'; put 'put ''RmBvbzlCc2Z0bDsjYkMiOkIzcUlrdyR6TF1POEslWmZ6WndeI1dKT35ZTTUxJm9MdHNXI3c6UV9aKl8qK0MlTVtwOFNERnBfQU9FcEk5QipBQnw+YTNWJlsvJHRYO3xMKkxCeDZhUyUsdF52R10/eDJDdypPVyt9RTU+RmA5InZDK18qKn0ydzteWl91WzpmY3tiUSVSaH5QRmQxYE1HO0M3OjQr''@;'; put 'put ''M3NVNmVtWyg+THxSdlJYfU81SmZbSCRTbWpfX25ve2spN3x3Z1BsWjhTXm1DUy9JUHxhd2xiKyhzTGdiUT5JLDZ+MjJtKTZQOS95U1FZayNYfHJATU5PYCw/RWRFK0hPPHJHaVEmO2x2cGY4K30rQyp5MCF0aEZFKTQlUU1mREcrQD4sLGppZngrV2pMZ29sTFJ0ZEFAWGg0MUNjR0xYQGF9eEtQ''@;'; put 'put ''OTljYDptPTVuWyZrTzJXNS4wXXkkVVpqeFRkayNdKF1wUz9LMXxxUktIKD1LI2dPN0VUOXMrWFdubkdkMTlsdzw8aSZUcGImJHJSSyowalNxdTpFRFt9PCtvX002MTRJSyFPS0VNaUs+LyZaWGJ3bGN3LixtZmJHe2sxb0x4ImF7KFg2XzNZTTViPj0vQStPeTkwcFZSbXcvKEhjX1sqWjkoYXx2''@;'; put 'put ''RHc8eT91T2B2IitvKiRPJUYoVkpbZyhvLmBqeHc1OHl3alE0Om1CdyJuJHBJZVomVn5Be0daSHxqWWxBKmFpTU92NWFIP3Vfb1ZrMT5MXT83QFp4LkdFP3Jlb25FZCFWfG1nZGpzeVQwNX1dZ3xjNHd2MSRvLFs3ZUljRyJeVkhZWlNlSHo2TjM6dndzTnw0RTN0WiNgbl1DNTBXdUdxUHRuKGVl''@;'; put 'put ''UVlpNWBGNExbNC50YH59enlANEl6LzU0P1dxeW87PW5lWG5oWyFTJCo6bGpmbUAwbHNPMldXcGFMTl4vUE0rZU0sUyl6TFRPMEpkSytGMVlgLEdmMyJSTlc3WGt8JTNjLlMkRDNtTSk2X1RDZWNKTEBWVEN0eCRsSEBXdTJYQCV4SCxbc19dPm9sIlVgKHdZZjRiLigkKSIqejB1QEt1YHJ0RE1q''@;'; put 'put ''b20oRE1EfSp0TU0xZnVaNDE8YiEoWzg8VzwoaSlsa2BXL21vdHJAZyJUPj1DUylTXktlIXJPZTwufmYpdnUleWROMUk4bWZWNW5FP0dZTDtSanYmeDgzJEdUbjBCTn5IUj9pfjVXb1NrOj90TFNne1RKPTZxZCU2Iy8qbzpNVGF3ZlQrNig9dUhsN3hudy4+MlRWaXJpfWx5aFQ3RzNYZlhaVG5w''@;'; put 'put ''VntVSCxYamAqKXQ+OiV4XXY6elVKRzphbnZqIngsW1VTVyUqJXtGWExmelcvJDtzQncuU2ZPd3k4T3l4L1JONGFOWTRBPClzYnl4TVR2emojL3tERVpnMXR6RD1qWF4pUUl8JllrXlpUYSV9NiJXdlRyWUt4IzZjNDk2Tjd0bllGZUpNZnBUJUEpNTQ/d0Ivdlg/dGpeM3wsdXwqeWNYc0hJUkBs''@;'; put 'put ''OFlFaC5iY1JiM1R8e0ZjalI9dDlUOyZQNDkwej1PTipTfl9FdjQwOy9Ob2syaClTPUBMUj58fD4pR1IoVlhdczhzX0IuZE5gdWVSd2hmQGR4cX5XfDolJWhOYzxhdXImUXl+Mi96XT8+fVtrfm1eaE5kfmwuSW15VWwxenc0SjQ/cCZRNyopR18lelB2P0VXJEFpS0Q9ZCFVflVQTjdsJndxVF0r''@;'; put 'put ''LHJbPiljXlBYWm8zYFkmWiQ9Vnh9WF8kSDVRQlE2WC5mNCQuaGZiayY3bE9LMHBMJihXZC9aITYmKG9bIzNuRWBqYVlPbnY6QnJmanV1YW1mRHtCW150c2shNCZjYUxWaVAlKj8zIy5hNTliYUdsJVMsd1ckQj5gSWRlb31aPjtfPnZZQHg0X28hN1AlNnxmczBmNCFValZDU1Vofj9UKXwqYXQi''@;'; put 'put ''IWg5SF8qU1FdbSxOVXtQcD9KI30xZHJPLiFmR0FUcip9fk4uL3NrYjErb31QSmZDODZDRC8oREgpT1Y0Wls4ZiUkR15eaTZLek8rJmtQO0NWMGF8eWhjW0Q2PU1veHJdWl5+PzIraHEqbmV1N1E5cnBkdVhkOWN0Q1FtOT97KmFxajViJFlXWl5oWj10ZitRSShhZztOaXlsYltaL1d9bncqeUJ3''@;'; put 'put ''eD95N25MT0BlZGtuRW97YyZAVkVFbjhMK0cjWj15VWxhRFV1KUJ8NlVmY10sXUNZb1Z0WitQKF82JGhidTMsTW9ULz9KTixEXz1CdF1oKG0qSiFfcGlpY0Vra3lSeVVjKkpUSylwcXQ4UzBaMWtaKXVKRi98QFR0bExSbSFEZztxZUg6Mi9CW1V5aFU8JlUkMmY/PV1xWk0qYFJge25Ma3Q6b3w/''@;'; put 'put ''elRfSSRALDdFQDU1OWh4a2NeUn5qOyxJO1pfXiV0KEVXL3RtWG9INFJRSGY+Y35IdDtwPXp9JkJQfSYpWXlEXkcpJWhgUHdsbVo0b2tfMXMrTjdLJEZhaURnK3FyXSY2JilbKlVndUxYL1F3di8vZWhGRGVkSXJUTFhLcSopJDVuZCJvZFQrV3xsejkiOUN5ZmJ6dHBPMHQzV1c2P1BiK3xNVVk7''@;'; put 'put ''Wls+by4xQ3NjRipvNzxESzYsYCZ3aCVvMSpyKGRpVV1HKT4xeVVtS01aZT52XjVgUEZSaUY1KT5MekVbTF5uJjpaZHhbWHtde0pbeVBRX1Q+eFhKP15KLn1TI1ZLSUhnIUtrTihObD14ajliSVhxVy5EbnJoWiQkQGtJZHFOQFVmVm5pcXBORUMwL1cqdVhQU15Ldl5VLDBtMlt5VWArdUcrRyg8''@;'; put 'put ''PEBPaTROL1g9MU9vYSJMO2V1dWV+fn1rSkUybjNuNzRYYT9wMntbWj5Ja2pLImNtUlNtMGAuWFNzbVElVSNqNTMmIXRAdCs/Kn0rdm1CU2BBRi8iQVkxcmRfbWZ5fWg3cD95Xn5TLDJaJU1lLykraGNJUWw1b21AYlt1NXJKNWl4Y2ZBejFZV2pHYiNnOz5jUT1RPC8mRnUvVW1ESkEwNWsqa0Aj''@;'; put 'put ''Z20waH5IT0pjajJPZUlrYXAsKkpTPyk/eSlSYy4qOyRsSXhkUXp9LlsscSNHISxHfEV9TjZsNiszQlNpXzBaSGNDU2k/WGNsJSE6dzZhbGNpIiR4WlhCLiYpL2FAWS5WPV9GOD00RWlTRnZUNEREPSQ0YFouKExXQTxKR2xEQC4vd2xCPnguWVI0Uj1QI2NVYixwJlQoS0c0ck9deTRVQVghIj88''@;'; put 'put ''JWR+Ljl5RmUpbXE9RUN4aHo7eSV8bz9hMnhDMihnXlc8eG86cXcwUH1tPnBOIkBFbzRtImtzfl9lJiNLcjFJWU0pNEc0aGMzNCVvZ3QvaH1XdmdfNSpzOkAld3kmMlc5O2dBYSxHeEIqU2lrWGo8a0RgSWV4Lk9KMSM5IVNsIW9kanJDXWYoSWh6fnM0b3ZaR3gxKndYbnM9KCtnUmR6X1c9dmUo''@;'; put 'put ''KG9kRTUuJjA6JnRLTS5la1FNJm1qNFd9M2s5OEtjdXp+PU07QmFEJTBXPjN1Wzp9ZFJXZXRkJXZ3R09Me01VV3FjKVh+e3ZjdlQhJkp2QjhnWnEvQGtDZUx4OjFRPjlvdHFzOiJmU0wjeVZhMzl2dyZ0Oyt7fGBxITtUaUJpcCV5cGFSMX5lTVpHWF50TF9nQ201NEcqXldGbT9ePkksVH4vSngy''@;'; put 'put ''bHBqU3kwQnM0UCwzRl1KMDB7R2dtYUMlWFVDSmpCITl5USFIdE5EWjkoY0oyOktxdUJhbk4haiFNK2Qva25YQnlSb2BKfD59VHJaeTVpYGJJU2gxPzlFI1U6bVdXXUppdTl6WUllUzMkdzRNNip5RihdVDB5QyMiJFU/c1g8S2xMeHxeO3FdczRWIWN9T2R0X0glKks/Lj11Jk9YUVowdU4sUHdF''@;'; put 'put ''VnQsaXorLm42YEt6TDtrWklYe2pkYWg3NiFpSGAjX1o5XSF4Z3ZWOkRlaTFhKWR3Sz5FPSZFYUtENTNgb2pNI31BQF1UL2ZJTllOYG5dRU0ubT5VanRXUThOR35KMkYjNGsmZkdFfT5weX1obV12S0ZWWyRiM3lvZHd5NDMkPGhpY24wIzRQd0VEe0FjKVcuMERjMXVdSkZrVDpuWT8ua0hIRkFr''@;'; put 'put ''ei53S2wxLnlLWFBvenUzK3Ywd0NiUyFfQVJKTGtEeiN4Q2lXNXZQPUciOGtCQF1jYn1SOkJ0P3lmUmdaSXRMMnxTWCxYWkQuLD5eJT9wbXF9ZUhwIVpSLzI5Y15qX2U0fGR0M1Noc3drQkUrPGove1tZKEZwVEJqa3RHZGkoJjRBPyZpfj5vNk1MNU1mOC5sN1I9O2Q5JE4lJFc1WjJTPWdLMW8v''@;'; put 'put ''bC9NPHN9ZUdFbG9oJCpgUC4kSjFqUnszOkx2PmBmdFcjKGJRbT0+Jmo4dDYjbD4ydz5dKihhRHBbSzRvU2tjYkEsdkAyKyYyVypKViM6JTYwNyMuT2Y6Qk9vdiJLMn5YTDAuSiVlW0U+ZTZKLkk+bCtgMGt2LmpjU0IwbDY3UmFgQU1jKkJSXzVJdiFbMEtraXRGRG0veC9pd0FqKEZzNERXUlUl''@;'; put 'put ''JG4+b2N8RixlU0Y7dyoxQ0pBIiZrNjlddWBlOmEmMEVCXyo9YFFQU24kZnlmfEp6XVhSVHZtVV1KaCUhLm9UP0x4LmQ1IWRrRF5aX2FFQWQxMVdJQj40JVt0azFjKHtfcSJKJVN1clUmW01jSlksPkxsTWBfazldKVtLfD4lOXp+Pj9KVyxucmtXbmY3fT9EeCUkOk8jUUxRVHZSSSE1ViF9cUpM''@;'; put 'put ''ZjpbNF1gdnA/bi4kWiJKI2dROiM7OSU+YH0xL05zVSVQY15Ab0I0fFBHKkZLeyg6VFFTb3ZdWEAudHFMY1FWa0s1bnlXcUhYVjpxUEpyWXl9YTF+I2ldSF4paEw2SVh4K0c3bipCSy4lay9eY09Qa0orM0BwWX5NfiJ3JWZpZzErMyw+bytITCNvIz5KblhaXXhzd1J9PDNNTWQsNzdmQiVAaEoi''@;'; put 'put ''bUReNTEibDROSE8sKllRVmpiXlpNTT4mNEIrOTM1PShXXV48PXo6eW8+IztPQXNfOkQpcDFUX0hRTVJXIjR8LmJQLGZmYy5SfVkydnRlKGtOPG1VM2syRV8yYjNoQmVodmtTbjdNKlVZcj46UlVmJHM9bUJKM252KEUpeHshMGBAS21iUiFLVixEZ3tTL29IbzJqVEdvZCNbWGswck9mZzgkKCtz''@;'; put 'put ''RzR0WVR1K3B2MjdWPjNNRHJyQlk5dE1GOVEmJGBJfTE7OjdYNmQ0OG90PFJ9MmV7LCJuJUA4Sl9YeSVqOHM6TGwrVUR7IyxVWlsreEl6Slo6Wnc0cDwpeU56eyNMU1BaSCZjfEVdQip6ZW1jVTsoOj5hKVQkV3xsLnF7ISI3dU0qKHdweztNOyFweCtMZjheXnE7RWdRTClkJGgpcyZHKWAyVU9+''@;'; put 'put ''I1dLYG1qR28mclRONkN5cHAmOyhieUNyXT43czc6dj1Ab2xSMC4sZn51ITh+Rm4uPF9bZXhUc3siWjQrL2BYJXo0UE8mVnVTZU1nJXNjL3wiIUdmZVhJU0d5e1ZEdFVUUkEhU3Z+YTNkMWtfL1Q9cjF5ZlU8KVRCdF1WfCh6On5wbFNgI3A0d0pWeC5wSzJKNFZNZj44ajkjZEh8OSk7Xlg+WFE2''@;'; put 'put ''clJ8Q3p9Q0o4dHksdCw9MExyNGYrYTdCUEVSRTwiU3BKb0pJeFo6WzZMMkBuRDViaExZU3VdO2M8R11wW2I2PHR0ZX19dWhWYiZuYCkwO2pYZm4+QDpAUWVoTSxxZUJxKlV1JGNgNEgxRDh8ITpXLjNmRjl1K1Msdz0wPihuT0c1Ulp9dWleNHhnVk9hSk1DJSx3RFNIVEIqMG4jYDxBMSMpeGE8''@;'; put 'put ''cVtedzxIKGI0Um1JelZvbzN9SGAjPHJZdkFHI1V7Um9sZFU5Xil8aXgqRSNUL0xgSTZ6MmdWd2ZgN18yZWJ7YCsiU2FGTz1oTT1YbWQoS1NzVSpaNTBENmhYfj9hbnVOS3c8dFhveWlEJiVdUSNeQmZwd0YwYFQ0aGpgSWtSJj8kVTgreU9ue3cyO3A6MykuUV9WP0lfczJBTGM3VX4pSyg8RyVA''@;'; put 'put ''WFAuRD80e0tVWSZpdTdkYjYyTW1abHRpVFZpdj0pWHFqX2xSR0ppNihFOVo6cjosdyk8NjNwbD1ucUQ/NzRFRDJbdWR1ajtgb2VQR2QxTyo+bCp1KD1iT3FeeTt+LEU2eEUuPyRPWW9TWFtadEZkJWElRG1UTT9uX3hgOWIjLm9VIWx2TXQrUSVKVGJXNjp2P3x8VyNNTC9xP3V0eWd8YlFLYEpd''@;'; put 'put ''NSFCKjVqKXpjWnxTMVVbKF9bS0R3cyhQd1lHRH0/dWQpYDR0Xkt2dTwzRFAkZk9hRWJ7N3JjSE0oJWE5azpjLGhsWXsrYmR5bl5KfUdlKzQlXVdVSFdAMyxRRUhYI0YzPyRNbGRPfSNXM3FhNlckd0ZOTUZXMDRTMlZCIlM4QGgxO01MMSg/ISwqKFJBLDtHOnlNfiZeYWh2PCZoLnU8T0tGYVpZ''@;'; put 'put ''QUVpOV9pUUkyUnxGYjw2PkpuPE92Z1VVYUhddlI2YHlgdWpPdlslQFA0YEthe1J6eXQ/LzooaDI6emU3UVp2KWd3N0dXc25lKDd1Ki9jajZvUWguQnFVSTU0KSgmRSliRmpXOHkwKF0+SC48UE40QWYoMyp7dktkOGN7e1UzfDJwWnBXS1kvYHxQdVg1aCJmfCkqQ2BJdSVMSSZbYyhYLEg7Qjsy''@;'; put 'put ''eGw5c3ojbklEaik4N35GbCEmTUpDNUxNY0dBSGo2dEglOEokeVZ6a35mNExHPko2JHAsL05DaGhufUs+RTJNZ1k4bjFSXz1ILmBOaVlmKUtHbXhITi9dTV5ObXxUcXR0Uk5wamJ1PzxWdDczTWB2RXl2ekB0T206SDcrQUUjS3ljWG5iIzNUKCZDQj5bP2cwQWJkXz1dfl0lRU9bcTdBTzd+d3Fw''@;'; put 'put ''eGxacmZEbXRXW110TCs+RWIjbypoZlVkWnI9TClYb3JLRXlURW1TKktRdlg5fXZBJjpJfWdCM0ApcEZaZzJdcVFxW1AjbmIhfE4/WXtVe2poMypLPTM1YEgzMHVUUWpiPiQ+fXRAMmhQPTl8c0UxeilkQF5bY0ZuIyhJUmN2Zk1ge3trPCEoay5ESHZyeTwjX1RXNjs3VEMkcDRDT198TSM8NGtC''@;'; put 'put ''SD5DODFvaG1kIzQmWkVPZyNLaj9hUnwxb3QlamRvSXhpXnlkUiV0JGdsSzAkVDZTUV5YMjJxOSk5Lj1MU3ppRkFrKVpuNVckVHxDXk5OJXV+IVljNkV2QEI2SitIbXcpUkwmLlA0V1V0Jj4uJDI7Wmdkb2o1dEJKRjZFXTM0TW5JVX0pOzNOTH0qLjpXRXF7dH43RmJ7MSp6cSkhWkkxL2RZc3BS''@;'; put 'put ''fm85Znl9LFAiJiJtNn02UzFfQmJfIVRHUEBlQW4jKHkmSUNNJWRJZiRNa1A3e3xXMlMuTSwkQnJOOnQ+JGdyJVl+VUBQNCJRMyxvLldbKzZqZlEobk9tWEFUIlAzY0taOClVbn1KeEJrZVkpTEUhdzZMYncyMVklWXRzTiRbQWY4WzZhcFNELjFpaSo6SFdwdXIjKWt4WF5mISluY1p7O1VQJGFG''@;'; put 'put ''PTI/PX1wQGk2VUs2fTkvITMlcGAlInc3UTtXLjx6MV9paUZBPmlCbmlheHhYPzhBWUJpWzlVSltzOSxTcVA/fEJVcSFUdWd0KSswV3Z1aWY2c3c4aXxieCVDfWFCOT9hOyEzJVF6OXlXcXZufV06a2MwMUE5Rj1LSkV9LHRueTdhLDpPbDAhfSNiX2dFTzxUZU9UKWVRPUEjSlNRVEEuPTBzfCZ0''@;'; put 'put ''VTBLWUlZfFJJLGtjSmpAbDNwTToodVpSR0NUc0FEOnVmV3R9bjM+YWxWYFB5Qyh7TUdYK2VDfl1xSUYrc1J0RWFJRCNFYzxwQjxDPFtQKE55VlI2Q2s0PTwzNm9JZX1yLjosKzxmZSV2ZFlVZ3NgcCZkP2hzP25Rcip+NV4sVUdeKTZlRUIuc3VRYmZXdEtSZSQ2LHwvJjVyZSlQK2guPXk3OUNp''@;'; put 'put ''L2klPjt8WERlOzpiWWRFRFhrI04+MTpzZ05hd3M/ZGppJUVwRlJ4bEohc3JoP3tAU0thJSxANTRxeT98JldfRXp1a0gkT3t8fWxJeGsieDlhfDcyKSYxY1lNMDdrbGQ7ITskZmFCZ1tMIV5+ZGRfWlpWcjYrPy8kPSMqPkhfa1VRIzVQYzshSzo/Rl9kJiopMlJZKCQhZTAsY21bcj81JTR2T0JI''@;'; put 'put ''altyQFpYNm9oZFViRH4+cGJMJHR3SzRPUUw4Ty5lYz9UaThSUitPYW5OInltN31Xbi5sJWl+PGcycXJmMlkrOCI5c1FuRjlxfTdUZEljNER2N2dlY3d2OjFmYXFZMWg9eyxJQVhNWyJzdipCVVhSL19jNG5DLlk9WElLW0cyOE4vS14qTiNqbDxha0Bvc3FGIk9WcHl2R1Q/KztdWXU1alsuUD93''@;'; put 'put ''cjkzNmBMMGNdXzUjLHE/QUlnPCI5WWVqRTUoRUVCWCJXY1pYLkdWelJMWFBEQDslLDAhM0RbUmZDdWhmPl1gYSFkY2ZBPl9CdWhTVDc5QGBZNXtvdU02QiYoLnhMdz1nc3omfikweHhgOWtPYTU4cFhTO01qM25mKmt5ITxQZzBZKSVdRW44Lz1iKV5FNCI0YVQ/JigzYTZLJCpoPHFWNGQ8XlJB''@;'; put 'put ''cV9eYDF7JWp5RjI+eHJnIiZyVHIiL0Q0STcvPU5bTndhdjQzbEt2QEZkTjxuLGozeCg1Q2V3OzhnTUhWemtHW0MzPHQrM3h7emZLcCk0QWlpcWAoOHNGdEorIWNoZz5KJS5VXml4U2ZVej5tdC9gVVgwdC9ETFg0QCZqfDpgYjlZRm9xWSJnMHdfbSUxLnN+fkkqM1ZfTDJSW0V6Q30jekVnKzZs''@;'; put 'put ''b29vdFt2ZSxPJDdkMyhHI2M4K2c+W1JmSSViVEU9JGhgUixGRDh+KnZTX2pJUSVHKFVsWGUkN2V1Ql4yXXhEQzsueXdePG94RlhROiolLyt9QCZBOldPdU8jdEJiUFZgZj53ZXExLzpVWTUpYnc8L1JXN1pdMzJIaWVgNDV9XmBpbEtyTHNWXyFEeTEpcGJsKFZZYSVSe3J3ciFGN3dTZV50fl53''@;'; put 'put ''aCROcVomSmYiZS9HWXh1XzNJaS5pXnJYVDFOelUhWX5td096LkQ/NjB2NXUyVCV9KW1LYUw0aCt5dDJNemdqInVrb045YHYifHJSN1RKdUBUXkx6QCxvViFReCU7PFRlOG9MO0RDWFRrIUpUIjlVK0MhRzUpP1MlKHVnQCZ9V2RKKk8uSndfdUxZZEB3aFY3eGJOKWUiaiwsXjlEPywyKjwqTDha''@;'; put 'put ''KSZwJDdHY2pGK1B5ezhITHJLPytIR1VuVVZ4XXA7Syk+X3w6JiV2R0BVVGdxJkVZXXFZcjkiSkV8M1szMXBGeFBCW1ZLI31WJil8VHw8dV9MWUtNJSNeUnQ6TTB9NSl6KX0/eiNsJVdxc1RrIXF6L3xuKFpGMkhde1d+eVV+eCZofGJ2K0YiP0kmRyRGKkZqQkBRZjV8KTpBRTB3RjlRQTk/alty''@;'; put 'put ''K2N+RzksIih6NUtKRUoySFJIa0V5LGM3RSR6N2xbVng6Z0Jdcmg2Vk9ae0AxR00mZVt+dHRwP3hWTGc9Tnk1X09YKFFoV3RKR3J2MHx2RSgsJiU6czZ1fmA3Z3hgSTg7Z2N3Un5PVnYoSltIdChfNGlSc0heZlhPVmEqTDZJM3E8OzxyUmUvSFg+eComTUNXJnpWRHg4dm0zeT1MOiZxPjxdYHI8''@;'; put 'put ''e0UoSl93eXEvPDVfUjAhYj98aWpbcGByczMxPlo9STlwKGU5fT1eTmo3PkAxanF6SX0/Y0FqXjMlbm9QdS4lWT88Ujx0NHUyJWVyc3hiPyRLVGVIUVZoZTlqZlRAPWRGWXlxInZ7bUh1JmVzPnkrK2sxbUliI007MFIsQUoocmZ0Q01LWi82TV1tNTJbb1MpMmx4YlA0fmo8Xyt4N20lMkJhQ3s4''@;'; put 'put ''bjU9QENhYndjUj1ncURHLyhUblQhODZYJG5de0EvPHs1O3JDUFA5OHgzYFI9bVRNfW58KHomODA6WWdGTSpjb3Y2SCpXfVcobz8xcFR0RE5IMjRAWjQyMD5iR0hDL3U3XkZ7ImRUdk5MbFJLMGpEMGhjUlJESFZyKlJtWDpsTltZenV2SDZLZjt2XTNiMSg4Jihte25lVTA5MVBIVXldfjpoKkRT''@;'; put 'put ''RWR6Ijp4RTlnSF9nTlQ3ZlRTTywhY080Wn5pKCxyUndTKTlFJT94UncoX21+eWhacTtISDUoMSFUT3NZQ1h7WD58aVk6Pnh0QVdkT3dnezlkUHtjVyMmbENGVlREI0tXWDhaZXklT1p7akdyYiFsL0htUnc8QVV6WXNObkxpbUB3OXNPby9YQXFPQngrKjU0aTYwR3UhRi9OeD9kQ2g0bCNmMFpw''@;'; put 'put ''ezRkc1A0ZlVxOSZyITMsezQ8bU9+VnhzOUE2X3MqaH1CZGJzc09IejR1XlRERkwvaWwkfWNvaEsyOSxiWVNjKjpGRnVTTzUsPFB7Qz44d1M9RWNFUFo6aGVScHUyMyRLY0ZSQUM+KSQvV2wkTW9eIWd+PkZ7WU5melpfYURILjsqK0BubzxLOXlXJDZFMHhxRC5yKjI4TCxsZDxyNUlKKElTYDJ8''@;'; put 'put ''Y295Nz4hR01sKU1rJUFCJE4wcF1UZlBCTlY+THhLMGltSCVCbFVOcUFbM2xDKHchKVsuQkxlKSIjNDI7NDMhYUcjU194WCF9WklbZi59Tm4oXztqUWRiKkw8dEI5XnZ1Ll5kT0xpMk5VTFBudmhXYFhLNVd2VCR5Oy9vIlVtQztaK1JRWGtYdntQSl1bd3BjRmhhaCNmRUxOc3xjW1F3b3hBdUlN''@;'; put 'put ''I2lqSDxJPyU9WUUlc2oleFRocDZ9RzIkWll0P3cvXVNROmV1aTc8RjRQLHdkNX59YSRYVj8lQHclS2pJOip0Q1lHYHt4dltpPFhxIXUpInpwOSxsdyRqakVkMmddUFByL1YrfVlafTJQLGVkTXFoL0VlWSYxYzRzb3pwRX5xQURlcE9DOG06cipLTVkuLEArWVlSeV5ueU9pc15SJlN7bzljQ2w6''@;'; put 'put ''cmpYRD94e3RsV2B9MFhHOkNgaktHWUYhOG1ONHF9QkovQFg3X01WaUBjcE9ONE89KSo2aTcqIy5NdzxEW1khckMvMC5fU3poWStKVG4xcloiPk9ZbmZ+ZnFtWUhBNF9KU1Avfmk2PDkjJHI5clg/UmJ9ellnUklGO3RkJU17cWRLXXU7Q2diQ04sOld0eDtuZHd9REtReTh5dWt8bHZCYig4fVJM''@;'; put 'put ''TmMpXi99V2tGPHpXOEJ6c1ZbNjpCdH1DIUYzM1ZjY1lFU2gjRTx1IzI6I04rIVZEIn42fXkoZTtaaVBWSmYuWnxGR2xDeldxfThWWkcwW1ozWmBTdCgjWCRqVE9rM3UhNnMhQFB+cit+JDl0U1svY3tveUlpS3JCRVkzIjtVU01uTV8mI1ExLlZ+Q25FJndJXTt6OiRLYFYwRkAyWUcmOHRGRGV8''@;'; put 'put ''TE5NZmVHR1okPjtQNEJQYio5KCMqYTc+YiJYKCRiKUdSeUJQYXpTX0ksdENwezFMQj09NndVMmFAbzs6Nj9mKT1PYHNoZCNlKWV9XSN1VWVhaEZkTSlPeUdLOkw4ay9mOTBlPnVdMT1NI0BEazJZcCFBZjpGO1hzQkJkQFBbQn5QZiN9USZEK0B0QkYlV3F3bGRLX3N9YmZVNi5bPH54TXl1KXlu''@;'; put 'put ''bkFNSHc5I3dQaTlvYGV6WFIzaUBKZ2I6Q0RfIldnOk5AeGNKQzpgJSxSL1hYbmxoOUwkeG9LaU5dZzQsbmtJOkBEN0NIbUlVO09nUGIoX3pSRzJUeFBSQFRtJkQyWGRqKiR+Sj82Pkt6XnNhbjJBSkU3YzwrYkI7dyRObUFBaXosOXQ/Yy5uOjU7cSV9Xn0ucVIsfk1+Zlt3SitAcEpaaGQ7bGJN''@;'; put 'put ''U0wvKCZHaW08NFB4L0twbndDbUB3UUd0MlQlLDVyMlJ4KTNObWVwZzh5JWFtQGdZamZuRTU4JDM6Il5LPzcxYVRLSX5JRTVVZDJ4YDMhUHJ3ens2N0JHen0uTD45Olg/WmA1amRsLEcmUTk1blZeWWQvWkdbNndMKFV4NGlvIWpqbz82T1JqVjBbZVRBXXpPWTdtaFFqZW4xI09iZWpeZDQpOlNt''@;'; put 'put ''TjhbOXY4IzRWJkRfSE1MYUMjRWVZKzo2XVV0PEtFeDUxKlQhUUR4MFZ5Kyw1RSpeVVJaRkxyfTBOemdAWW8rWXFJSHh3ej1pRHUkTFU6LkVCdSw1MlhUcGFee3pMdUBseWIzUGV0KUtnc2x4fGNSdDNGQF4kMTp7emV4PyosaSQ1K2RmTEc5RHo+Mnl1eSslSSUmfTw3KS80KkpfJWh5X3xPWygl''@;'; put 'put ''aE1pN3BdWWw6Z3d2X1ExKFhfJGd5fiJpVVdRKWRCaHkkfVEyYSp6K0UsXlNtXWF0cT09I3U6OiRQXkR+Vn1ETG9mO15FOUhjZit2SWdzTUo0cVR9SVJoPkQzU0hVInxzQmVfKW5bP3RKZUIqPk4oXmROW3lISFdqSllsejd4VlRMZHg+fHFPSEklXkRnKzZTZkt7KWUya2lrVzBSR08jflZrN2l5''@;'; put 'put ''XTF9YD9JdndyUj8wdUIoYnZXY29zQ0VHLyR8dSxAW1c2O0IpRFF+d3YxYzUsUX4oU0VPdH5EfiR6MDF7Rm4zbTJkIWh+V1d6RT8laTBTanFHRGxwWF8lKDxAZytWSkt0a2tUY0UqN058fURGX1NzMTIoO1hjXSgjXWhEJTBKXW5MJWw7Lml0X10xWFordVJPTiZWJTJUZ25yNDV9SnxObyxOX0ZQ''@;'; put 'put ''Vjk8e01jWCMvVENPJklSYnoyLnlEMFk9QEwhKmdDS2kxW1hTJFJRP3hLRUgwbFVDXipjIXosPTdCQCZ2ZGxyLztTelREKDN6REZZUUF6OTNydVRbRX4sY0syRVhmNzJ+Uy5OUzBrSDcwU3ZwKi5bQHZXOW0+WT9pZXpGZDlHdGEkQ1FDRyZhOUhWfCN0NXMhUDFZKV9FNV5KX3QvJl5QTChLYTto''@;'; put 'put ''YSF0RGEmfWBUbkV4YzxdenR3b2RsdjMqcVl7TURtQW5jOT18cTVqNXRJNVMuNFdBNXVWYzlKZFFwaGBicnc5T25aITQvVjxaanpkPDYwemNTK2RsZEM7Km81RUksRy4+YyQ9YjZidTlqSTEkJGZpal9tTCpBUVYjJGd1bUBRcipoXXVNI0xfVzNhYXtdPi5fYyUqP0dNYzBAYU1yOn4wSE0hM3l0''@;'; put 'put ''cl9KLHVIP2dNczU2V15XblBXV1hrb1l0a051L0xxNX0iVWRfMzJWK3JdJSN5bipfVy9wRjVAQklMXkxIfFYzNnIje1k6fWdDM2FASlIlbitrSmB6KHRFW35zZGsrdE9UcjtIPHB0YCopRlVXVSU9X3ZGXlN1UT1AS1guaX1qbUY7QXUsMmExc19bd2ZVd1FuTHNbRHwmLnFDXVcvUm5nfTo/ZiVo''@;'; put 'put ''TkhFNm9UO0hsPyo3WW8lMitaeTZxQElSLFolNSxBIUdvaDF+PSpwZl4ufDBDckA3PisiI3deX3EvVXpJfEV2NzgwQDRTX112d2siKSxJKEw9diI7bFhRPD8rdXxMcCk/TXNiITJeJWIjJmMxNm9MNCw6cVdhIVgiRiVDfnN2KyVJVVdWIn4hamd+JD8xN2dpRkdHQmF5aTc/JFA1cURfNWNienJ7''@;'; put 'put ''VztkZDEqekA+JVlfZn4haiQmXX5Mfk9KPjZzZ186dHopZ1cqdU9WND12dGtZI18+UCo3b1l3QCV2YjRkRzVzMzFQbUMsTEw/Y2gwYHxfMSREMjdlTFRdTmhpeXpTVzBCRTs2PjlDdXNHYH1QeH4lI0kmIzdWYypwKSZ4eDNZMnliRTw/OXZZMTE2Zl5nR1hCNjdjJURiWFlLRVk5VixoU3FvUi5l''@;'; put 'put ''Xnw2V3x0am9jaXs0ZD9YfVNmQnhwT2M+L3Vnclgod3xAVVRZXTwiX2MyWSV+KG9FIVRSUSprNi9yaCE9Mj9vODB9ZzYpRWEzcmg2VG9YMWpebyFPTT9+NSgzb2hQMiFdeEFhTlNQaz91elRMZ252NHdNSWpyKWJ1dVtIT3o5e3Y9cEYxdnkmQkkxRTZQIlliKClGcF4jQU5NQmtbaklyUzRRW2Eq''@;'; put 'put ''YXExXnZ1VT9JaTRub1N9bmVRfD8oVEBDbH1UVlFtREpadU1nOTlremM5PFI3WXg9Q0l7IVZrXXZrNnJoJEUoaGIxOCI1fEtaLzBUWltyVGRJYi5tM0FFRmU6T0pyVH5JNHNFalFLKSlrKFJPP0sxaDIlUnxxLlJVSHZ7RHxPXiowLkVvRV49bWhffkhUV1FRaltkZ2EmcUBNaWNWNTdRWWJKeihZ''@;'; put 'put ''IXhXZFdFe2R7JD9jaHJ8OiVhbkV0ez1iUHtnZ089THI0VHlnNTU5fTtvNHsxcm1CfHNFej4uKmtOWHI3W2V9S3EmJEljXlc8TV04Kjx4WSFrbmhCRHZNKk4vNHlHcTJXJnJgRmFQMTZQN3Q9S28ofEFjZHpYUUsoKzU3IkhPZFBwPDo6MlIpI11ZS0k0N148UUAxOnJhXyg4IT00P25AUH5sXVJB''@;'; put 'put ''U31+fCY/KlNyYTNPJDI/Yj9GSXRrIUxEX314LFZFPDpOaFlqT3NIQjw0T05OLmBPcjFALFlFWmJQY2pjPGpUbj1oTUp4OnVvOEB6QHElIWNyKSpLVzF4OSxrKWRvVyEpfV8wOH05VylKbXpmUWJGOVgrVCt1OVAlQkNYe095dXZPPCJ8XlQ1Xz9Ca0w/aT1yPFtnbHRCYGgmPihFYkhda1crLz5t''@;'; put 'put ''b11WVTgkNUBxJlBBKW07QyElXXpGMnpjSDNFTk1FZXYxVD0qRHFofWBgOzNoUmB3NCtfdzAsMTpLTnlNKnU8djJWM0EufnJAImtTc2FWNSM7RU9EaCRFQG1wZSkvWS93KGd8Mk0hcHxmS1prcSEpNn5UZHsjMkN2fk5FaFZpZjNCeF4pZ0A7cWM1cFYlNVYzSklvQ3pxbk4xNEwhPC5WJCpCRkNu''@;'; put 'put ''fXh6O1Q8SDh8bjFTRix3VyR6JEgsLDhabD5OemBZWGk/c3BSbGEoKFs8VEssbypsLDhyVUYwO3chUGxRY1JtTGRDZmRxWkxBZXJgOzFARSxsV21lQnZzMCg+Olh0UkU9UjF9IjxWPjZZezpxaDtMcmNvNypnLlkmczlsKHpJYkMsbiN3ITcsfnJIKGs7Nit4bj40ZHFgSzs5V1YjVVgqLGQkQGZG''@;'; put 'put ''TG5ocFR5UzA5NltGa1omSmpCcSoieyRwTkskWFdAZUVUeSNnP1c4Zyg1LjhhXy8hVlRPPDxHfmVveTdoa3twQ1p8ayYrOV4pXTdFaipKLHNKWzkycjwuMUVzPHwvUkJteXxsRmw0VltbMnsqSytYckJoOVgsSlE9diFQbyRDfStUNDpdRUdffGxlW0ZXeTI0aWo8YHlwJkkleEpPO30mfGN1USZS''@;'; put 'put ''ajslIXopZiJRbTNGcUdvUEB6PHBwQ2RZMiEjfGMmcmtqPVdhfWc4W2Rse2hrZGAjeGRYUTtte0g+TDRbOVQpezhpOk1DVmV0e1oyOT0qYmxjIT13LmlheTRiSDg+VFBoNVsjUGpVfWFEJiV1Mix4RXghbk15ajRgLGxYUkdKIkFwTkx0dHtMeE9mMF0hY15bLGFMRDMyS2d6PHkrbi5vWFQ/ZDgm''@;'; put 'put ''TUsoamNDWWdYbEgoQ2ZSPn08T3h2O1RjclVOKjcjOFQoKiE5QDwzZXFNSFh4eDw6WTNsNUpdYzxLKlFzMSEiVVFHYHdDRipePHR2UTt3YTI8VjImRGp+eVJjPFNQYVQxfC9xR3pdSGVtJCo9M1Z9dGhkYWg7VFpEMHFuP247QiFHYWgpalVgbCUlREJfZCFrKDQ4Y0AlIzU0O3lLPFQkRUlmPUR0''@;'; put 'put ''dm9KYlFxPGdrKVJoITd7OChuLzVfOHNSXiR3cSMvX1ZxKF5NdCIhPXhmIzdCKVglIUZiIzBDelNbP015OzM/M0MySS9UVzMrVmxsLEd6cCR1Q3dNPVZvVXVTZjJ7dzwoenBtN24kQ208WTtKSlQ3YWlJZUMmeC8jTWt0V0YxIlRhZHMmWkUiZVVdNiMvOCk4SFlWejNDXXhuNGA2OV1gK1FISVtm''@;'; put 'put ''UmM0bkVLLjhWUHQoIVMmW3R7QTNPWipqNVNVT1lPK1d5dXtRaHt4Wix1MXFHbjdVZl8yYiVkd0pQJjhQIUNXUzwwTkdEVyQ7YVZqcko5PHx9R3wye3MyLCtjMDIrX3IqWEU1fERLWkI8Y0xmI2RyUU5TQl0qNHNtRkwmcV13a1k8R2NXKTY5dTpkJVIja24qJjJFeEtQc2NUfXVZVnhjfWpRMF88''@;'; put 'put ''QG1Pfk95REtrRGo6cnhSb0g2MkdELygudnl7SWxTKy92TW0zd0FzTUxAYTNJXmZDVDJ9NHY1cmUhbV0sOzhzNGooSWgxd2tJU2ZFUURNUlg0WURdcHtyT3tBeG0qXy8ldEJbXjgmQ1JScFAhYExQXjpSY3dlOEltbmVhbEZzSXtGYlRTd0h4VjkkP2F7MEpUZWpFPHQzd1RjdjxjI2F2M3pGa2Yj''@;'; put 'put ''b1Z+ci5uIXU0KFQiSG01dSJEQlc0fTJCRExOeUJ5LGFIR2RzeTFWdTZ4Ml1FcSF3a108Rjt5az1ZVFp3Y3w6Tl5bVVVUdUx9V21iJitIRFNmVzU5PWFWJHh7dztdaWBlQjpqZ35gUDYzfFsiVkIpZmJrKGlIIyh0N2cvdT5nKy98P3F0a2k1Uj0pTUJANmQyQnUzYUs8dmJISigkJmEzfHJFZCVM''@;'; put 'put ''fV9XST1AOkdfdjJhI0slPmA2P0wudkBHZU0rb0VhZ0IxIW9PKDRFU2VNOD52TEBFb151JXN+akx4XkVAeT4jNlpnbWFGVSVKWkglTW5yXzh1ckMxfF0rNzksZi5FdEtkYDokUGZkcVFgW1RsbzUvN3lpN3kiYWVlTUUxKWh1VyVUPnJzPEBNUTxkZ0pWcEcxcnMpJGpmZSRRSUQhVUZwZEpWYzpb''@;'; put 'put ''eH1fQiN2WHJvQlY1REs+MEIxXyQmcGxPNU45R2szOiR2PnthfDBzQ1VQeVVWRkhwW3o5eWRdMDJ+QTcvdUEwNypkZnVsZEYmXTFjXXRRXUAhXUxyeHYvVC5nKkNeUT1WL1AkWTRLRGFRSSJ8bDo4e259SjRwWC5+I35pO1AlVihRTlVYNHs8Y1tbb2BTWmFgdT5nR291R10uQExwK3o+aF4hNDdw''@;'; put 'put ''XSM5LlBlSk8+djgxZWNUZzBAOCJ3PyVTeEdaZXUxMyJIWVNlYHQkTGU5c0NnITJPLllBIjBheSJDMzJSTTlhNVI3bE5Jbl1+VVJDYXJqNjZRJE14REJjfiZhY0RWTUtYTCgkMno4b3ArMyoxZT1kMXR8a2I3VnpAV0x2IiRzcWFaOXIvUnMyUEAialpueWtqYF5nbjk6fjN9XnNKODVMR31oR140''@;'; put 'put ''KSg8SmlHIkZwMn5DIy8kTX59JkFbIyZSMGE8YFlIdWwwWTZtey9edEx2Nk8wQDk0V3hoJGprNWEzQH5bcmhxUiwjRHhJUXNdTnEoeFReX1Nhc3UsQTg2W2JgZj5dI3glLjdAdXBwZjkpRElyYzxCcGpDV0tkPSQ4RGgkbX4ydVVePyE1NnJaOnpmKmR+VG0hdzBdLmxqJXlDUkZCPTdMTkBWVV9u''@;'; put 'put ''ZlViVl1tJHZdRGg/eGIkYmVVPThtYF1rNjMpZiksXVZiV3BYYXhzcCRQPSRgRDl2JXRnRSkwWi5hTXJfa3tee3Q0MiVqSmQubDNAeWw7VEE7a3JyejBDTEYlfGxESnNgWzcjUTpiZDVAfVMlVEhkUGAvODYldG8yZ3RDIndhYzNDTEZMRkxGdVk5Onw3fjc2W0FnUERnOV9SUzU7V0tYaS8/aXxt''@;'; put 'put ''cV0rP1IjYFAsOTdgQVtvWnhZYHlSLF96SWVlX2JvMV04T1ksTGU/aTcsRz17Onc3Nj5FeitsWFp5bDo1KTlAbVp0bjNPb3Q0aUliSldSUUkleWY9VmppIWdaS3ZuJEwrVzpjMDgoUmRuQ3s/PS9lazNARzZ5Q1koa1t6bEhmQ3hOZHM7JCVXPV1HSzAvXThfL28zWnBsOCRAbnc+d1ElUzghYD1f''@;'; put 'put ''VShZe2cvfGtlSjZNNlMoSSQyb0g4Mz4ibjc+YDo1XkArZ1pIc3UsRjtOUjtrKFdpbypJWWE1NjBkWDA2JTBoQ1AyYTJecl0qZCVsI2JRPzwxdXRAelQ4YkpfSCVrZnFjfC4kJHk1UGV2NDlCQkBtTDlxWjJtMCxrYTIzYzVFYiQse2FgbTJZZTxHczF1Kmp7OGIkcmViOmM/RHB7T3IjT1UvIy9b''@;'; put 'put ''NyM5NW5NKSVqTz1XfjpyIj1sI0MoeGpxV3tsZ2FUaXBFKkNYTk9wVVFJKUBha3YhaExxXVdfd15SRkA8bUI4dEZAa3BfSVdwSjNsYE9gWDtiaWdiQWBMJGtwLjVsMUR4X1F7NWglXTxkdi43YFssYkNme2RpOFYsdT0wNn0qKV1Ge1ErNl9FSW9dYHlSPXEkRV09IV5JNT5IPX06P11yWVVpYDgm''@;'; put 'put ''TjY7N3A4O0p6ITJCO35qPlB9TzlAeWUxZ19UL2trNVVhWnExeExEMjdhUWZFZXYoOGgwQjhSciwueDwlJW1GV2FPN1J2fCJFXVtkMDd0P0JSNjozKzRnKGx4bC4hQCE0W1ljQjg8Vyt6PmNBZlprbDR4WXtTdzR9NTd0ZVEuZDg7RV1zPjEjdWt0NnVVczByZ2ZbXlo6UkU7fF00bUNMOjZbJFV1''@;'; put 'put ''QHpkJHE1Nk5CeVVLUTB6ej5sdTJ6PiJUdl5AbVB8OHx+ZDU4WzdhcFFbYHlRPSVkMykmSylES04uY2xvLlQjZFIlJGc6MFI6YDdTZHhlOyR1MHF9XTBSOmA3UmdgZFA/cTBNNkU4NV1bUXFSOntXZEhLTUZ7OEQrKiNZbSx7cGJ2YF9yNWwzQDhhJC5fZGt0ckNjZ2twRXAmWXFJWmVWOC83TmRk''@;'; put 'put ''JEw0c3kkRnk0bFAxZ3J0amRTQk1VXm1PbTYyUjprZTtXR0pFKCUqaVtabmIuQzg2JFokJWtUY2RqVDFZP2NuRzFoNEZQVG1VaUVzQWVyJGpyIVAyN25aOTRwKnc3Pjx9TyYjYH11PDBxInlASS9tem8/eWRYaGJaMz43amRjTj55JDR3T3QhciozYz1ncztMJFQ5eUc1akVkWGA3ZC83LjQ1akUo''@;'; put 'put ''Z1hHI3ZPdTd4Ykdkc0dEUCJ5fDs5NGpYXWQrdVtjSGUwWFcxb1lxT0ZmfGZFZ21hOTR3Tyx1P2ZWJjJjdCV2UFVhfmRkWCxkLzd9T25aUT8uOm4wSmUsdXlHalpEUVJtQWV1KjRjLyQ5YDA8X2ZUbU5gfE9ebmIxTyxlZEQ4c11lYyw6QWVlKS4jS1RudV54RWVPRmp6Wmt9ZGI2VGUqakpeNSQj''@;'; put 'put ''RkY8TCh3VWI6RGUkN3c8Xlg5I2VYW3c+NkZOZ2NANDZ1KkhgbXQwVyxkTFo3NkBvKSNLKU1KelEubTBxXSw8b2pJIVlwcDBwbHd8OHIiIUFQfWRaUGxMWjdVYU43YDdmUjFOSDBVPXUwWDgoKi40PV0+djxvfGJTfT1ZZjZ9SGFeNyE7RzJgLDxmTzcvZz94bG41bUNaJFQ7eDlubGtdOGJQYUYk''@;'; put 'put ''T206clhtQVpKOFQ1RTZNYXJlPnlpW2g1W3BAZn03e3JJWko4TFs2biRqMTlvbSU3aF4qI3lDRmVdNyxkMlZWODkyRCt4c29oTzEiJDJgWzhPUV4lNWVgU1R7RGwxbHQpQ2tpOD0leEwobHE+azdmSjZleyNNZ3lidTNfNkNXRk17dC96eTcuU0BMe3RsMmtvU2l8N1dfQjgqOUs4bThMJD96SjZS''@;'; put 'put ''RDE0ITZaaFU7ZTN6KVBgbDdRYVRlTykzWnZdOzNEOEs4R1hqezVVL01ySEU/RFcuRFsyc11UemBbeDlfcXVdbHZ0SDA+TzFNekwkbDtkaSM3ams/LnhIKEAlbzo6NWE4NH1fZ1lkOF8hTn15JipSfmR4NG97V1o6bD5gPEgkZTshQzEySkFCTHhYYCIlU1pjUCRlbHs7bmNQcUVJeDc1RHZNfTtu''@;'; put 'put ''aFVxN2ddOD8wOmlKUGlfJD9kTztjNyt1VDJQeS96bnlLSVAjaDdnbG55Q284fG5UMn1JXUZ2QWJ1SVZRdl1uMG1hImhfJHJKKGFHdjN7VFF0bFkwNVk7XShTWXtrMShTLmFOTGJpN1ZjKj1JPz01dlouOTdJcjk3QlJxZ0lyQTgyMCU4QGZDZHx4eTBqWGQ8d09xLGhKQXk9bkd4QmV3Iys4ciQx''@;'; put 'put ''d15vZE4iYnZ5XX1RXVdLVzl8WjJtNWg1XnJddlFkJFsmZVhtdkp+ZjlHWmN2cDRpSVV1dFhybH5AIjcxPWF5SkZNNjI7Jks2JSpEUnZTNyRkZEBmVVl7YyRZS1c5PU9xZ1NIMmFoLjtubm0sLnQkJUg4P1RgIT1dOHcqWjF7N1o4PjNedTJQO1VmQXpfQF8/RmBIaEdeKDprbFVBSWZbWm5heys0''@;'; put 'put ''dVFHazwhellfJEwzK05YSWE/N1tGbmQkZlZIc3slTUVwcTUhVWJ4bWB6K31QOUsoU3pDKU99NFR6SnRsSGZqR0IjaEV0fWBYcHE1IUZvLmpxaiJoXzhXRTJjJEQ9N2AqQD1dI2dranE3YVVmVz1sN204cSUiQVk6ISo8MChKS2dZLDhfP307JDMhamVAPytMXTUlZG0lTnhPMSwqXV82blB7X19J''@;'; put 'put ''d2Q2d3NiZGchQmNmQyQuTFZzO1csR1ZOZUdaSGFIS3w4bVZNNnhlfXgiN2dFXkVaJHUlNzJ1VTFKfWRBJUAhP3xrM2ZbQWBONm5ScEpRS0pxLlRzSGYlLlBgK2NnJHhlVHs/QTgjJVkrKyNLRShTPjo0NSg7IU9uM2hZWUlRTzNuSXZUOT88WCFdMUlicl4lTFJlJDRqWCx1aWszZSx1eERJSFFP''@;'; put 'put ''M25JUHxmYmVPZU9lbHBWUVV9fTxsZz0hKTRgdXlEbmchcDlbRTE5W2IkOVt5O1gvPWUiJnNpX3Y0SEBGR2Z+dGFzdF5bam5hXj88bDdfXi5gZ1ZKZzl3WDVWKXAxKSFnR3Z+X308LGFHdkAlJTklOVVfcWdgNT1aJHo+bix1IiYzMFcsSUdHZkdTUjJIKG9dJjs/XW5wJiU+Z285Jjs/XW5wJiU+''@;'; put 'put ''Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5w''@;'; put 'put ''JiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285JjtMZV9mbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbzkmOz5sYm89OXhVKnMmJT5nRlcqez9dPjB8''@;'; put 'put ''OlYjbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8w''@;'; put 'put ''bywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUCMwZywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hNjJD''@;'; put 'put ''QCZqPyFvPCE7XTAvVSNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RW5nPSElMjEwMz5XM3klIXZOVFBLLzcjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2''@;'; put 'put ''fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0pLc3ReVTltZjopc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25q''@;'; put 'put ''Pykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI242NkJ7X0o9VCRfXyM+VHt5Pzd7TnZaRHpFTUpZU3dpRypNdlpEekVNSllTd1Y5bjxoLmIsY181Liw9UlkxMnNHXWRQTnZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6ODBFTUpZU3dpRypNdlpEekVNSllTd2lH''@;'; put 'put ''Kk12WkR6RU1KWTRlU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUdwZypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1LKj9dPGw6bmcsfXUyWXAzUm10dThtdnU4bXh1OG1dQjByNlsyUCJXTlcpcH0hOyx7X18jbXxx''@;'; put 'put ''WyViNXghO0tNOzM/VWJpZzlXKnNxdF4zM3tHTm08JTtfMzNgcGtmfEdMTV1OWCptfHFzeGVZKmxxL2JzdztfMzN7RzY/U1ZdTlgqbHEvYnN3R3plW2EuN0lJOTVpRUlhQFNWXU5BV11OWCpscS9iIjIqMXV3ZzlWWUo9Yyx3WlJ4Qjt7VHlKYX1QeH5PUmZpISZpcSpddy5IMlBSZmkhJmlxKl13''@;'; put 'put ''JWUhb3Ahe180NWFiI281LlozWVgkUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZp''@;'; put 'put ''IVY1fS5AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyfHU2W3dbZmhpZXNmU0ojZ1F4V3J0Xl0vJG85UUJeXyMjSXJbZmgleCE7YjUyXyVRaiVlSW0jMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZ5bGcsPG1jZWlzfG9RXU8kTiM7NnQ0KmZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdq''@;'; put 'put ''UVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlOCwjaiUocD5gdyxgfG9LYHxYTmB8R1FgfFsjO2AkSClRTSF8ciNnTTklaiRQXkkjZ005c3t9PGxZOy57PT9oZzl6ZVlydF5D''@;'; put 'put ''OG1bfW1xW31tUVB7OFc7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZSVlIW9wIXtfNDVhYiRgSTN4VV9CZWAkZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSldPGwoZXU+JVBYbl1MWG5ITVhu''@;'; put 'put ''WE1YbldQdT5+Vy9pQEROfF8jS1AlZSEle19fIzVdXi5TfmtTIWc8OXV7fTx5SHJbMnNpSmc5XmVnOV5lbDIjeDc3JXdBeTdPV2lAREdmcykqSE0he3V3UFdpQERHZnMpKkhNIW45eT5tJHE8OlFuaW0xL1BlRH5VMzxFbzpjUE9SW1FrTk4mW2clK31Td2pyUCN7cDowYWJkIVtkW0RHZnMpKkhN''@;'; put 'put ''IXt1d1BXaUBER2ZzKSpITSF7dXdQV2lAREdmcylTfXxmIUg2JF9EZT19Q2U9QkRlPUZEZT0vRE58WC9TZn50YXN0XmIsWWVNIShydF5RfSZvTCszeCE7NVA1VilwXXVpJUZqZ3ZXbVhmfl99PGZ7OF1jOyFIZGVOZnppSyVBKyQhI2BQcnRecyk7YC84Z2MkNDpdNmBUYVQ/QGlhWz8hYWJoeWVY''@;'; put 'put ''bzl7TyouYTtJbGk4TnFRJmNnW203Z3o4UjpqazJtazlRK1daOTQhMkwkYzExJW9bQGlZM3JVTzNDMzFRVTM6JWtbIy5meTw0amtmeWVYKi4xMGVYfG9RXTdwUV15IV0uQWV1NHYlZjg6OEMvQCMoNFBnai8yXmQvSFFlLzFtZS9JOXQ0JDl8ciFqUk0pWGk4fS4qSE0hfHIjZ1cjJWopb2AuWzs8''@;'; put 'put ''bF1IV1Yqe3R0aSVxa0VeXyNUODUzaXJ1NGhrfTM2WzJmXWxbSU92TWRbUCRVVzlnWWQ4JGFAMSQ4OE81NmtwNi8wLi5sNCsiZlEsT2x+JHtDZyMjJXRQe0ldal1Ccmcyd1Y5QHcoWWh2IihMMWdUN0hzeD8xb2ZbUlZQKT8hYz0rTDE8ZlIjRGZbUnlFaiV0UFA5PGxnWztgZGdaVkNoSXI1NnVR''@;'; put 'put ''UzZaOEtnTWQsLlt6cHk7PXkja2QlQEU4ai91UXlMT2ZWJHY5UXprXkckdjl3fHg7IzA7Uks7djt7IzpoMH4vI15tUCRtOTJtQXBKODMmdGFCYGM+cFVKOWBde241ZTdqaSUoSilydF5pc2klKEpfP18jS0RyW31tSTw8bHQhY2U3anN8fTx0e3FbM35TSmc5JmhYcnRePkQobzp+I3ghOz5RPTQm''@;'; put 'put ''aGghJWopbz82JjkhO2JKfV99PE9CXy5vM2EpIWdVbD0qPGxYfX08TXZxW1RGJjghO0RSezM/VUgoIWdQKV4/XyNYRV8ubktXaUxQaDIrcEdpKyViU10oRSFTNk4uW2hDZjszP1V4bGglY3VIbUFrZ31YZU0hR3VDZjxLa3tfI2JFbWZpc3xdXyNjeDUzaXIsKGllRyQ0VltoZzluaVlydF5OOG1b''@;'; put 'put ''PEtyUnw4IjdyUyFWe2lfUmxedUprMXMpUUN7UVF6SG1fL1UhdDxbMUtsX0Q3SXR4bGljRl8xYyxUUi94VWZjRlIyXSpeP1NkVnk5VjZXUHY5NzQwPCxna0w8SihqJT07UDs8bChFMVYqezQrJm8hOTw/PGwpeDRWKnt5NG1bZmguaGc5fFN3e308bzUiKUdAJWM7LiMmSix5e1BSR2ZFKUAqPGw7''@;'; put 'put ''RWl3Y1R+ailJMUlhdntRfUlEa3lqRD1MU2A9Siw6KUosLjA7UkQyYkMxSURrb0tpfXlJVTw2TTNpVVB6SU46VlZ0eVs9ZDs/alMoclM7Lm9lQiMzWkFKMHN8ayFHbHl8WXUpO0pAJVIqTkIrKiU0b15CYHZ8L2RQP047d21qYj1yTmQzPSZNPDpbYUI4VStWN01qMncpLHFLLjFnamxpPCFPXkNM''@;'; put 'put ''KTFQbXBSd3k4UHNUMCFwY1g8VjdMbTU6RyRjbERnfitWVkkoKFJWNk4ueGhqPGVoQGldKilZelF8XyRrbmlvS30xV21EXiIobGhvSzslcyMoODosNSosOVZtc1RJL0AwTzQ5RWJXZ0pLKFlTT0RvcEZWc3tNRCI7MzF7bHtpZTVWX0U8Uip0PXMjR3VaeVM2JFBtU3dLQWB7RiI7ek16PnpLPC85''@;'; put 'put ''KnlqK1U0KzI2L1kkLnk2Z1NhVTNnayt9Nj1ZWyore0whdHF9bWp2KnB2Xl1iXzF5bFZsQ1NodnhfX191LnQ9dUorR3JJLnB3ODosLCo7Ump3Ti5mTEQ9e1JSUm54JWt8RFZ5PDRXbGNHeCNsbShlPXEqVkZMMVh2PDJ+aVRpRW9tTVZaVjczZTBkOklyWDc6d1VLKzlzXlZYPDdGJUAkP2czK08l''@;'; put 'put ''VT1BQ0V2Pk9bVllrNEpWUU4hViNSd0Y9T1tNT2tUSFRPKUdRRyNibTpsPCV4PEtNXyVtOXZZW2o4bWFyfnt8ajtASyhUZzkmZWBXZCJfTz02Z1NzR2YwZnxsR25UOiRYSTJsYFhUZWdxMDkvN0p5LCIhZWB9P2BebDFOPkF5eik4bzZtYi5ablE9UEZjPUw5ZyVPLnpKOCE3bVF8T25hKEpga3tL''@;'; put 'put ''amc+eXN5QlBuN1EpJTJoRmdzPm0kLGwoaVBnV3YyO1ZNTz1nLkhvYldwM2QkbVtiPDQ2Myk1Szg1IXxbJn5fWVtjWkJdVlpIdDtJfTxsRWB2ZnZoWnRaMCYhQDcsRT04YSRdJCZXPX0zTyxjKT9PfllROVhkcTgzUCRwRyN0bz5nSTkyRSt8QlB+LFZkVl5wYkY4UyNiamM3YzpiOGkkS1R4ZTFt''@;'; put 'put ''MHFiejZLaElkOXZ8SDpHVmpZZzYyTktkTTcpXXBOXmE7MTx3U0Q1bTcpeyYhR2Y8czQ0aD8/MG0kY2ViYnF3XzN1PTpnRzNgOVI8NWJUaDdPKClYKywhYThaM21gLzU+XSNETTFRaEU4MTs6SigkQEhVN1k8cVlrWFpAbSVeZjt6PmIlYj9qajk6bkN1bDw3anh4Slk1dFR+ZF1iIWgoKls9I2Ih''@;'; put 'put ''aExDWEVCbnBsSTx3bj0sJjY2TUMmPWNdeDFRLnJqfVdRUD1NLkEmMyFLRkNffGJYKyIsRXtFcUsoMW9LKFhfMG12OW5NKC5DQDA+QyU3JHxASnFLUE0oeyU3JHIrYV81NWlJNWhDaU9CVyxkVkJdJCs+ISQ+ZT1USmlFNXFiXzFucWpIZnR9V1V5Ym5sL0BBJVhzTShDQFhzbSwvbHttX0kkN08x''@;'; put 'put ''VV84bTEzZDp2fXc2LiVrW2Q2OXN4c3xpLmouNTFmUFYhN0ldcnpEflN3XnpdPENfPnwxb3FUUD0qQENRQnsqZEtYVmd2fV0wT1BOOEVkekN6QzkuOTJuWz8xWnJWbU8zUjoyaHQhY0BNKE5sQS56al5tUHw8ekVmenh2LExyYW40ZjAhRD4uOTckbF5OPXJbRiZhPy4uQD0qJk1OSCZHZVA/Znl9''@;'; put 'put ''JmZeZ213Lldfe0lXS0M+Vncpd3tobFJNJjtASFJZRSUsT2RuMWQ2TUAuIVteYmB+S3VUXiVOYH4/ZS50Pk0hJSFvcGYkL0l8Z2w3RXklU19UImQqcnQhLyFWbkkkOSE3bS5dRXk7bzE8SkBnLCUyQVY8eCtQNXFTI2NASjIuc1tLIjVuSVlUbyhJJHclQmpCLnI8eHx3IzNZKW1kOls9Nm5LXXNS''@;'; put 'put ''bzhfJmJRIX5dSkRyZGtYX0cmaVt7c3gpV3VxSiJqVlQoaDVhXiNyKDlqR2d8d184cCRANztsem1mO0FAVThhbzBkPG0uZDpCYyF3fDB5RmlHZipwNXhdaD03SCtPKF1+SnZCPmZgPnNUbXMscjg4fWw3dD1dMDMpVGcibkFbTyh9answUnF3O0gmYUdpPHZRRTNkTShreWVoRVN2ZDpAPUVoXUk1''@;'; put 'put ''bVNQUnEuVG1wdjokLHhKejQ0aF4jRU1bSywuWyZvclZtN3B4ZlU5UnFuMm49NlVdVWhlTSgzekE3KH1BIyp9fmE3LF5nSGA2MksoYmlPKS5seCwrXUx6clIuPFtJbyglQEZnIm5wMjZFaW5RVSk+I2IpSSU+R2d9ayJuO0BlVGIkdX45NkJ7ZVQ9OEQrTytEKFRnfHd4TiU+PlJzXWE+el1PUFQ6''@;'; put 'put ''SVZVbGltYiRzPkc9UWklLjsxLzhWbTV1ZDA2WGQ6eiUlYS9dSWx0Pm57RjFuZDdKK2lfc3IkTyxMLCRYRXloTSklZmdxM0orT3okaiV+VStmayQoRkA1LFIjO2ouIXtmXiNTPTRlfDA5NiFhVHN1LCUyJGovOTRNP3wubEd7bDFicTNgLmxDYCQlakdfITs2cShvM2IpPV1MOSZJdmwxMUEuJntp''@;'; put 'put ''XkdmI2AubEd6KjR+XS48KFU/fWdHXyE2SjJfcihlUXVYPS5gJi5sdyE3VChKTSVMNm48JlIvUDJ8NG14Z19teEdOXltqKl51PTB9V3N0JmFHOiRyUkJbQVI5Jj0wZ05AOXJZOClyVSE7UnY8LGxseWhoYHopbzNDcD5RSD80K25kVEV6PCpNciguIjNAYXNwYjpFZSUjYX5TcjF8bGEhP3x+TjBk''@;'; put 'put ''YjZVZVZtMyk7IlRDYyo1azFJWiQ3cXQsUT97Oi5nZjZWSH1Pfk4uRHNIVjF4N3Z2WCx0bklaYVtMVWBkcGwyMXRVfk5fSnZfRHltWkE/emciensxZSlNNFY9QTBpa3xtNyQhOVteckBnJTsrUD9GY0FdSCNyK1puQFphYWJiTHlOOmQpNGh6bEJkWG9aJF9iJXx1c25SQ09EK11WdSVNfFVDQVBO''@;'; put 'put ''Jjhha2ZgZCtlLl1LJExlYW5geVZnImtBLmJ3JDAjOXtdaV9uUDxyUU59TX1NfU19TX41YTB5JSVJQiM8ZUhoJjBRTmU2ZS8xRy9QaSxAPyNvMV1eSTFtXn1wYjNgXUpzQHF4clEhai9wOCE8elA9fkpMVWVnaFtxeGgkfjAiUj4lXTd+P3ddL2VSdlZtJmRSdjsua3JmLDdueyxBaUckPFIhfVkz''@;'; put 'put ''Nj5jLDduQVJFKG0zZik8ejBKSFI7e2pQbSxOaFVmUGQkUHRlYll2SXtkfF1dIV4yajE1JHFaWW1MJD9nS3EmSUloUnY3NltKOSRwJE9pcWhRP1RQflkhfFAjZT1EMzZ6N211VT0uWjhWe1J2XzU2cmYwJUBCb19pOjk2aj8pfDE4SjA7TG0yJD9tXzVVKHtgOmpWbmlebGBLcTRqRUkhZ1lwMyks''@;'; put 'put ''bTdtVz1OOzcyb2AzPnM+T316Mi97NCR+MFlWWCN4eyopbkY8eCJFMl4zdm12bj9AUzI7MV5DUihRQ2lyaCZ2c2BpaXYhM2ZuPWdUP0tmZHVnWyk8bCRfNE07allKL2FlXktdZkZbcXcqTFN8JXQubH5WakxAMH5WajtAdm0/c2hHYHJGVnFib08lcS9Kb35FMUtdVCMuTSs/fCpqcnM9SXkuSjsw''@;'; put 'put ''fSp8JkA9ZG5jPyE0YykiL2ZnZXE3Sk4kdypLXW1iPn04N3teejtnXUlReHg9MiN8bihbMDY7VmpkJG8oeHN8ODEkI2gjVlBoOXxGZzBAVShrfXJ+eF5vSlg9cn5DUU8jdXFyeF0hXjI8USx9dytzaEU4L3tPPSxrY01gXX5qR3NYbTVRZ05jJDd4ZURYc0pZJXxRPzErIWhbanFzXn0yXyE2Pn4x''@;'; put 'put ''LDFtVj1GezBhaHlkKWFRTTNoJFc6Xz9takhKK1FHcEpeJFIzU2sxd1Uoez4xcn5oMXdVM3NyNlhfbWpwRCVhWjNoKFc6ZVttanBEbTFgVn0jKlF8SyN1aF59L2lbVChKflkzQW9IPVJTZnAxMStwSGRuYGxvK3BQPUsyaWt0a3Zwd05FfWNRIjNsPHU9N3AqRCM5SDg1TzU2VllHLjgsQFoyMz06''@;'; put 'put ''aDtHcEJUeSQrcCZFI0lNMmVRcWp8WkdiJV1KOXJZdk5CcFR9TmdYU0Q2OnJWbURVI0wkRDxTIjp4X059TSlOMURhSyVZY15gMDlGb31KXlVxPCZNeTRtM0ZAeFNAe31hbHJ9NihtZDBGK114RSVYJnB4TUBlLjJtVn0xb357Uz1DbyI/aWNpbVFzNVFhVCN1PnJyQzFPOW0uXUF5QCV0VlE5LFUv''@;'; put 'put ''e2JuRn0uUCorXUd1fSp8YCs3PnFoUWl4eX0qMj4ofi5RUysmXmJpYVt9YV8rJmolVi8sTGpnLlN2cCRFTTUpZj9TdnUsSUxAWmclMWAkajdWSjNxRzdKbyFCWztANGJwUWJgOmozXyRVZj09PSFhMSE3andbYiQ7MDd1ME9jJXxxU0VdZnV9KX0xM1UoZlZJOXMsfCZLZVY6eEIzRV5tPU5vIUBa''@;'; put 'put ''dWw3LnJofDM6IylANDZxLE9sfF5tLC9sUTFNXSNvOjpNV2cmK2FSXTNQWSV1YT9ne3JuZiM9KXEvSmkjOzBuJGAvZHJuZl5QdCEvMERTLy53LlQ9WVdfRzVLcndVK19PW0tIOk89Ik8zKU96JUBhLDJtYHlCQEt1d15RVXVRJiU5MiQlNC5hP2AqSF1Bb25bNzQpQDxYSHVAJS5NIyxbemJpJCZ2''@;'; put 'put ''JXI8T1k3WmV5TmAyMFs9N24ucGtvUVtfUjNfeWU1UDVPLFlbam5gI3xzVW49T1U+fG1vRzFPJTJnfXguUDtAJi41LEpRQHxBfWE2PXE4LFtIcVZuLltkfkJ0WXU0UCo1cnNsQFVGeXo8MXxHZ3oyVzE0aHsrOTJ7MSMyeSVZRHMlKXpKIyhHSVNHZyJqRFE+Zk9UQFIuclIrIm5oOnN6PDI4L1Rb''@;'; put 'put ''XTt2XVp8XTB1eEg6clVZKDUkaTEzYCs9OH0wMkpdMFM8QGtJYSReI1EkTiRoKUhNeFFWbVQ5YjA4OypsPCtMWyIuYCtrfT8xWyZxTkJwNlREK2dkIz06MjxdMnE4YGV8dT1PM2VUJE5NajdURFNPKHRVbj1PfXhVLnI2YlUjVm58WkVoPERLSV9pP0xFKHY7MmdaaDVqYSxSd0Bldzs0ai9wRVBg''@;'; put 'put ''WzBaN24/Zz9dL2RuMyF4Ujg+ekdsRlFSO31IOz1KOUNJfDwidyViTGU0aCViJDdSYHFzRElDUFZbNixRPzBTQlJ9bmIkMF04JC4jdzB7fXlzbVQ9dVFTZV9gLDNtPGRRITYkSlFAWmViWl89TmJ7ZGciajpsc0Alb0dQSVhbZDRldTJsOzgvYCpAREBDJUovYT4+VXQoQHAiNTBlMUB6Vm1RXUkw''@;'; put 'put ''dFVFZmpHJDd+aSQ3JUBzIkdyUC9ZUHI8dERRfUdkZ1A2N2lzM2cpQmJeNiFrXURRSmVlOFI6YD81YSt1aixDWTRjaSptMD4wfVdNe2M0IkMpRClEVEBAYlg7NWhkby4jRH44bS5dZDNOI05oemx8YktgL2hiJktlUGU+eFI6P0FFM0g4OWZVN1I3X3VrZVMzKUJjZ3xnQHVHc3REfk5eM2xbS1FB''@;'; put 'put ''L1BlNC5Nck9jbmwxXWRiJCYmMloxYCZaOGFUUjpiMT5POHJ9R1lvOFRRJi44ZHxgTjQ0USw/N0U0KEJrbzdxWixMTlldNCg/WVM6fDcpeGk2KnVkM30qJmp8M1F1NWkxM11yXlZDOGhjbT00YnpsYm8iYkdybV9kKXpWcEl1OiszWlteeDd1Vm1AQldhaXZZLGc/Pz8mLkY7aHQvVn07V0BYX1V0''@;'; put 'put ''MGFZZWhANChTI3EySFYhfGBObGhVLn5jQlh8RVdwVmJbdUUoRnhhJXBkNyx1cmJ5aFVbUTU3bkVdUVlGaSFEL1FEPD5uTDBiI25XNnpRUlE5X3dqV10iaUB7I2luT2AyUEFwQ20wP2JRRHl1Q3Y5aW9sdFAlYCoqOXJlWlo0NHRabC5Gem9uP3g/WTl8ZWV7WTxbb15RLEB+QzRrXiMpKTlyQVtR''@;'; put 'put ''QEFTXSMkKihXW1I1dF1KVkhBd1ZhKHd6Ukw6JlFgbik3ckReSl4kLyoyKkVsdk5hQGFbZU1mSW9CUD45d3V1dypDfjhEail5KjxuY0IvenlrVjYwT0xIXXA5Q2hgUXNEM0J5fX0haCNeTVNeSDpuMnFQPHZpeldXfm5iTlZnaikuXjBvKyQqX1BTRTp9KSk0QiNzLGJIcjMjWz0kd1ReSXlqK2Y+''@;'; put 'put ''WX08VF9AVitVOy9pNToiTTk/XXtuKyIyPWdeYD1MZ1taTG9OWyk3Yz1HPUo+XU5KcVZVanMzLEVTZmRfIjRgVnxZWCNmR0Jydih5cUBLezo6SHUhcH01ZE5ufnVBVVhJYj86XzNfRjhEXVM5ZWBEczElY0ZNMDBmbzc+c2RRJlE9WSM+eTF0cTtoUEI2SFg8OVQ7Rl57MUhTPmV5USlJdjVXYTZW''@;'; put 'put ''QjNuUiJzcUxEMltjTm47PEJ1JllmT2tNMj8lK2UxMF1MXkh0cXdMLDd5YnYiVXR+dks0RlIvPSUzV3t4SGVCUTFmJHNRX0E0LiV5aFtlUEF6QWFtYE5afFdiSVVRPF9Ubzl+bWcmYS9DWnIwLDFFe3wmRmZXbF1QXnBgQ0RNVzwvUElnSiVfX2giYEB6U0tKUClMSVE5SnwkPkY+dEZtSjdnLDIo''@;'; put 'put ''Uih5ejhxYFt3RG16djZuVixXI3Qkd1V8QntkVkskPTNnTFcyKVp6OzxHNjZZKF5RPW99biw+fFdyJFV4MW9bWHZCM1EwQF8ycG5gKmdYMlddTlRLO3FMZns1RnEqYU5qfFFwdzxXI0NlNWpxTzNuRDc8T3dkQlFEc1ZSSnQpJGJlV0AxaHFXdVtOW25Id3xCIkhzZilRbUV4cUJmPUY+TGVEUjQs''@;'; put 'put ''Izdedls/TnJWfG9yInV7QD4jOlZPdUIybUpkbSZtRlYlbmMzfH0jMC5IT1F3REFSTlFFZComSE9CUSs4RFlxPDhLIlA4KjxNd3h0IjJBKnJbMUJ+TEBLRGo2ZX5ZLHJmK0kuOCp9JGdOWHo1TT1MJDNuJUcpd3RyOSFRMW9WV1tEaltIbyh2UUwpfCl3JS9RQjgzdlhTRVd6fWNzQjVNfktoRypg''@;'; put 'put ''XXxsQmJKeUFQK1BhPmUlcmRza0EvcCkodU11RHVPXzNoTiYrNTBiKiJ2UU81PltFdC5uZz9uelovKDEreGgsRnJYbnJLdFEoTHt8c31mW0dqRl0kOklbOU14Ijl4fWB4NXZpTklgTkEuYn5La143SkBYbz4vT15VanFGJSRwU0QsRnhSOyY5NzpOKT1vPmhTMyQqWUkzRUxCW0QpeytPRHtlVCNt''@;'; put 'put ''S0s0KzJ9cXc0TThiYz86UTlkWl5sN3opLjxWbWhZWFg/QFVtT01HU2tCNGtLaW8yakQ6PHRCJThXTz9rPUJJXT46R1NkPWVoal5CaWVHbiNXMCU2Qnc0QjIqLE1GSnRFaF9Ucig4L25yZWgzLDNENV8zZlJRI05wNVcjXSJKVj1hIXs3akxDMTJAUWxieyR5VF5DOj50bCpoIXooTjdtRUMkbXND''@;'; put 'put ''MSpOXThZbkR+d3wyR01XXSE6YSFVeD9IOEE3bDVzRlBZSW9ZXj57NWgrZEMhSSNBeyFaX0c1UldCWXxxX2A0NHwpcmdLQHp0W2t9Im1+YCskVnxfWVVTIkg3fUY9dzM+QUpfTFp6PElAdVMvRTlaM2IqKU1SY2NtMlouTTZkYWhgPjRITFpHLElPNEQ9Pz5GZTY7bjx9em0/aisiZV9eLHJ8MDJf''@;'; put 'put ''Uj9xcEZ5cCRLb3VvW3pwcDBHfEZEJTNESSpFRWY3cW1wbTFvW2VZW3FHPzNRNS5jPVQvT1cidixgKFsrJm4relZTbld6aUpYJl9aUjgmPHdybXZ3XyF2c1BDdW9WIzwmNG9Wdl9RWmRbTzlXRSNKUj9bKkBTUU9GL189JjMqQlp6dFdhMkxtNCFoJWpdaCU+dG9WdF9iSUQiITYicyxgeFs0OXJz''@;'; put 'put ''eHwldHw9MVJ2LiRLd1VRKTpvIz03dnZJNWlqMytUMi42cjRLR1NnRjY8d213fEEjflVsPUlfNX03XkcvKzNvVnJfYzFjW3VwYSN9amJ5dEoldWVLbVZgKyghQlFeLjo7IlVKXVUrMDJsVnQhd15vbStuIjwjcCM9dk5iVFltSCMjJXtFMCErYCpNWDxrZzRwaz5JXXwjR3RvWyY4WSwkT3ApJW9v''@;'; put 'put ''Sjg9I29hVFltb01tPFImWH57U0k0UkMoaGY7OHtKQk97LkJkaiIrcjU7KlkzWythTUxDPFIzKz5qeXN2U0ErYS4kWkZqQCxPJDB4KyRfMnhvaHViSmA8PGtMU35CLGBsWz5iOU1fVTFLO3FwRjoqNCFPb3xDeFsqLiYzPzpKbz5uW1ZbbmlkL285KCVLKklzTUlLTkBUIz5QMC4mM1YqO0N1NV4k''@;'; put 'put ''eCpnYkhNOz5nRlU+bjNHUnMhcm0qNERHRW9MNFdUMWBRUDpGbjJvVi58N2FMNGhTW3F3YG5rVVchaixgfUBLbntDInlKdyxNKXxORUw0fFFbcW9gb1tUVz9nLGAxKCVLP302bWAwVG1pYCF2VFcqZSxgOEA0OW1zbDd4W0BeS25tc0E2ekRdclkuVykqSFI/QWpUOVslW1dHLyJ6b1Y2fF1sSzRv''@;'; put 'put ''TltxVWBgNlNXM29bcUZNTHZVUVtuKEFpejJ8fXo9cWhHI14wbzBEKDo8RnFSM1tWPm9bbVpNKm4rRypWUWhYQGleTyheZ0ZjVzMucCZvV31gVj5VNFRNS253SCx8X04wW2l+SWp6WyR8R3xPNG1UbVd0bUtud0hyKHheUiVPLiZNWDw1TiFdWVs6ViQ4IyZnKXIhWWczPEt3SUMqTSVzOXpbcTtz''@;'; put 'put ''Iz1vViRzWXlbcWAuKnk2PGJnOX1hR0cvRT1WPi59ckRHL3w8VWgufSEiYSsmM0MzdUwrYDV5KUZQd3JnQ3UqKi9fRi8/PFVoMnNyLyxgR0A+YmpzKy5XQ3hKMDw5RnFBLEdiZjNwbER9azIhd2pbcWN9K0pJL0Z5b1Z2fHxHSS9AeG9WaTchWkIiVn5lMngqKV5PN2ErenV5W0FeaHlieFtxfF9v''@;'; put 'put ''W040bzlvVkx+Nm15W1V2eXN4Kk01fkN2SlshdltbcWNHQyNMVHpmNmhoPEZwe0BfS3EsSC9hO1Y+eHM6OCxgJn0xTXpbPSR6W2N8L2U7T31Gb10+YllXa1JzV1ZobSZ4fGAlRi9BeG9WRkR6W0d0UitKT31zTChsViUmN1JSI3I2b1JAeWovfGtpZCtIKDVlPjVeMGEzK1p7Ri9UZ2BhV218P1Ar''@;'; put 'put ''KlQ9bUd4OGBjJHYxKDwlPzNRWVdgTyxgeH5lNkYvendwJklSeks1IltBNH0kMEYvVHdwJmt8fEdKNEBGW3EpX012JUIzRSUjO3FGLzJ2b1ZofGE9STQ3RVtxOV8hdkwmWGNDekc3ajZLRUl9ZUJ6W1hdPy5lc1IzLGBJe0d8elEvTXZsRiM3K3hKeTt5WmQqISkwfCEwYiZrIjlWJmB5W0l8UitJ''@;'; put 'put ''L31+RX1bYWIwfUslYSRWWmJ6I312UDw4Tj5Tcip2ZlpGdyxqXzFFQWZ8fkN9JkgoaDl9SjZMYyF+Ql07Y2B+M18kTn1zY3w8WlJTaihUeDYyQF81MGZwZ0ZgLm9bO1tEMDVgUSRBRT10MHlNVF9fOz1EZ1U4byRrW0F9ZEcoaDh9fkM0RlpMIn5XMy9LZGBsdVJxW357YFtLfXM8aFt+SD9xe1Y1''@;'; put 'put ''YGVbfkc/Q0hzKFp8SFlBdEBJcVcqVFlWSzZsR097WUo4UlldRjMwcHguWEVOKChga15tMSp2VmN2d2RNI3Nlfm8vbkl7c3ZfKnV0KDZ9MzRHN3RwP1FkWyNDcUZbfn4+Z046cS5jR2hGfjZZbnhqPG5TL1liUiIsZ3RMOSl5SU5JfVZFO0lgISZpfS5OM2VFeHE1fHlZYTxfdXpGPyxNUTk6cXFC''@;'; put 'put ''bnR4YmNWZSlIJH46XmZ9SyM/UXxzUH5iPDBbX3N2fGwhdSg+fiJfflNzV21TQSIufil9Vn1nOSo+e3NzfGh7NV1ROSR9cT9hI3UodCg9flp7QGR0V11+S30sSTRGJH46P0VofXMofXx3NEYic1R8JkhXTF1+Pl81XUc3X3NufENIaW4jfncoMD9jWn0pP29idk0vPX44X25JNH1ZP3kzdCgrfi5g''@;'; put 'put ''XUJGfiZ1Z3hMX0dmJTU/bmtFRXYrQ0hYV0BCIk9EUmJYYyNhUiN7LGdJaEkrU0drdVUqfVtUbFRXVlA5UCtAbnozbzVEeGFrTjomVUlbI2Z8SStPdU52Uj9kbj89PD0pQkQlMy9MR3lFSjUyOmJwQlBMezFySzBVO14zWDFGV1RDLFsoQV9dd2xUTTc5MVt0cUZaZXJFaXR1KEB+TiNdXUdzIz1U''@;'; put 'put ''aDNnbSZNRztxcUo9cVZ9PX4jYHNwVGhePEp8ekJ5ci50dFc5fmVbcHA2bEozRVQ0MHorNWVTM21UPSldeDVyS25VMVc0WTlNVT1taXI2Ljwxej40ZXNtbVYodnNXV2lARD9jX289JDlneG1QPVdAITAlazRYZnhxRXx3eUptdiYvM3AoJTVbRW90KSVvfX5jdFl6XVQpaCs+fn5PM1hRNDx9Mnok''@;'; put 'put ''KlFqXyh+UVtFb2ElS3xrXlpzK35PW3s7bFYuUylocX5QLjg1e341T0B+dGBPalc0NH0kMTRGP3Ngc1RVdmdofkNIeCljYEV2WitQSUBLI2c6cV4+ZXNbfDJ0c35TT0xMV3xyKC9WfDR0WyV5c347X2NuNHJIVn4uJE5bfFBAaFd9M05XW3xMQEw0O1V1KChzSl56eVpyVzQ7MyROcltKIkB8MWly''@;'; put 'put ''c088P3N5e2tJNlZdWF8uLkYpYF4pe31VIShzR15HL1lyaG47M3NKclthdkB8Ymlzfkg8S0xocmpCc1t4Ont9TSFXKCV7Zm49M3UoQHxdXmRfPjMvJmArLzY5VipiZU1BTXlXaXU/b3tHSDRMN2FPbnp4JEg3YU9+eElMSlZLNiQ0ZXgpeHh0OipzeCJ2e0x0Pyt+LkZ2IkJyKkhfX0AoMGR9R0Mr''@;'; put 'put ''X3Ngfl5LTXtuSTZGU2FoKSJfPigwZC5HP3Q9c1VDSzZtQVd4ZndZTz5+L187KVlGPCghfklGcSJqbDNbKHJGbVMoIX5FbWJ2W34xQU9jcmEzTFMoS1ZLNl8oa3hLdm5JWj83S0EiZUFJN1ZOTnhnKHlLRzokV10/ZT9hdlpdWlNXXWF+N25wTGZHYSJVQ1d0QE92dSl9RzUwdnpGMzZFfmwiczpE''@;'; put 'put ''JlV0ZHpQRFNBS1Z7Six+RzdTfEZPZkcsbmIzWnhTYX5rLCoqQykxfT8/MWg4cGpuOW97cixlJHpESnxlZz5+eT9fWkk/bzF8MWBTYGx1Ln5HK3wqaWZzPVdbOXElMiRGXndvRFJta0RycmouR1lHRV1UIXFxN0VAekwzJkBISC5mSWI1NG5HdlQpcz88Oj9Qd11ldmNTYVJ7NSolUypLRzp1T19f''@;'; put 'put ''N3EjI3MjNU5LNjg/YF9UZXtkRkVTYUF+PT88WGx5Pi5iMigoV3ZrSismZGU5SHE4a11PJlhTWSN5VCZLb2drfitxL0oyM1RyJmwoMWNKTXc7Sm4+YnFtWmR9Vl47KyI1TiEhNDU5N30sW0ImRUIwVHZiU2EjKyFMOF40XSZvJXUsS0xydylPdlozTVhNLkc+cV99LC45Y3Qia08rc1U0cmQpIUg0''@;'; put 'put ''XSNCcj5CTHxyM0BvPmpTZ0REKW03LHZTcUF7YFtWLkF0Mn0+SVNfInt4RTp8UUU7MnV2YXNWeVhzcVRAcnIkUzlFcFJeRm9aM1s9WyM+NlY3LmxCLkFWPWpvSlBhJW8+I3htS2VfeXQ2X3E/Zmg2V3ZgekhpTX5dRV0xWUtaZWhNODtuW0gpZjZISTFLVl0xKyRiYCNjYHNOfGZxPFhtQnUzXWtJ''@;'; put 'put ''c0dnS3NwYEB4M1Q6P2dGZ0l7Imp1PUgmUnh0PXxbZDN9KkB6SDpSLGI/Ky5mfTpUUXNfRys1QVUyXn57cVpIeyppNmE1YTJtPzcxLHUkXztxLDVoRDhdITVhYFpeP31hOyEzIzFqN2F5WkBZcT43KX1hPlAsOU5lcSxTOE88ZVRnVD4qMT48Llh9LDxCfWNeX1NHb3NAMSMvSnZ9I3BoZiVPOjNP''@;'; put 'put ''KF83JkttLEpsR2lqMC97WHlQUVEmNFVUMmZWPCo9e2c2JWdbalA5OFg9VT8uL10maUwwI2BXe2RyV193bTA7cDg5PVErVjhZMS9scC9ob2B5QTo2QF49ZGdgbVpeemhCYCVlNFByczhwJl16bCsjMmdVK0VgN250NkMhOzBOODEsWzNWVntiTHhmSW0sdjF5ZGlZJChWY3NITHlPWjAxMUljdkxS''@;'; put 'put ''UH5SRlY6WWVBU311Ti51ISIxYkM/azNQYmprYTNFd153STs6KCpUSmJ9T1QmSSxFSzZjdG14aHl4N2Jjb1Q6SyR+PlRnZHQjS3xnIm1LZDdNaElsWiZUIls3aT1CKm83WzQuK05wKm5sX0N1b1IoVE1pbUJ+QXlXQ3l1aTRJLHljNCtPdXU0ND5XTkhRcF5uI2B3KTUuQXg/Ll53TXRKNzF0Ylok''@;'; put 'put ''TTpDVHRnUUBWVDdTR1N1alVpV1F0O34zQGg2fXM8fUwwQXQ/flhgbWJXNG1+PStxUHt+V351em5JOX5oQDV5ZUNGZGV6PVZLKlBJcnw3fjpeX3hxV1t+fH1FJTp2fHMpfjB+SH0wWz9RP35xfj99SWBaU0F0S05GZH45aEYwLm1XX2JFPChRNTNnNDJVUVFqfjdxS101Yz81SmIlM1lHZ0Z3P2xW''@;'; put 'put ''cTRqJDp2dShRLExjQSJ9fjt+JStkeXJVSzZzcj8/dEAqTkxVODdSSStPU0I3aVBYeHR8aD5xNXkqPmFFd09+ZVNxWDVPN21xIiJ7KGtfYyp5MUMiMl9KWTFXZSp9UmlzV3FedFs3bEJycXw+M0NHOjlGfl9oQShLRzpRY1d4OnY+WCk1U2FVdF5RUUtKWDRSMCl6V1V8Nj5jaDFXTWI/alcmeTFY''@;'; put 'put ''RENEI0dMaWlBSU0rYSFTcUZXUmpOMEFwRXFwXUN9PnVHKmhDNW5YOER3Xyx1YnFEdlAiYXlwNFk+aEkkfkxMJUZTWHYmRU41M1A0Vkk/fmp9Mkw0RiV+UEBic31zLH1oeWBlfX5Sfig8al9fc053aD5kMDh3fDF7flBkWFBsMCYuOElraDRxaGspS14+KVVxTH1JZiRRPUptbyFpalVsXUREbHEv''@;'; put 'put ''YF9dcmlVJkVgM0tKWSl+RXRbWSl+RX5Oe3M+XkRAWkx1d0Bzc0ZjXmc7STMqJXJfV3ZSMypbOWl8LlpWWGNvK0BePUtvVTIsXjF5dyk+ZSNsKWp9fFhlPX08TnFLKEdWUl8iWCI7RTFRUyxtWiY6Mmw6RnoiTXhkUEJ2dC47a1VNPmlMazBhQSFJaUhjQG4zPCZFfWpVWHR1VXFIcXE7X2swMi4r''@;'; put 'put ''STEhUTxtT0BTWWNJbSJTRSFLfHB2eV4xUSVxUW49e2h2d3FMUnhvfT4yVVh0Z2YuKkoyZEwuYno5LCZya0s2azokKjckSnFsXl9XcDAoUT9WMmRIZjFiKFpBIW5zaEtpelFfdzMqTWswQXk8STE+cmtLcS9hLkpdVGNNOUFKRDcoeldgYGB1emUxQi48RTFPIj9tI34ufXh5O2F5cnpXZTVOcV9b''@;'; put 'put ''cihyc0psJDkqUmBgTygifmghX354K3YwY317MkArd2I6PC8yO1VTYUxBangjUTN7Ky58M2hDUl9yR0A/dENHcEo8YzBdTXppZ3JOdU9SLk9dSjdSTVc0bjx7TihocFRfKllRITNPeXomdSwmSnFSXiJ+OjxKMnZqamtDfXlERHteT19fL34rUiR+fGtqTUg8RiF2XjUxSHBDbUFGTFIreHl4Mmlv''@;'; put 'put ''NklEPCFGbTosfmp0aTNJOjohWXlqWnJkLDZZTSF8dVdsK0dXZk06VlZ0KWR2TkxnfWEjOX5BY3g6SH40akljdntWezM+TFY4JFZCc1c9LkZPQX1gKVM0KGFRcVY1MkwxP1tDbXxEQTh9LE96Rj9jYyt6dlFkXz5qMF19eXpMNGdlcjg4fTJ6eGsyWzFlK31oYWdXY3hKL0xDNHkhLzBSel8jOFlX''@;'; put 'put ''dzt1akpgUm1iVyk/QzBffHssbXNgbkZjbVFDLD5AaWZAfWB3ZyhMVG4xdX5BWyVofE4mLHlAcjxgfXoyUCg4bjdUWDxLI1B+JF0zPlVvbi5VKWEjR34relAoR1lfO2MjKFV5QFFGb18ydlZ8RWo1fURvJn5QdG8odGlpX2w1XmslYFFaVnwkNVE0KU1nbld2bWIvfGhAaX4xY1BXQH05Mjx8JE52''@;'; put 'put ''fktYUFcpSXpGak0sdi5bPlRRP2AyM19CeXx9WEI2aF5obDFxN25vV3tGeWxbNSlbfUkiZn5QYyh+dnFgc3VJTS96W1J5bnxGQGIoPVQ6OVFwRjcpXnB5N3xwdTh9Pj1mbmo0TntzVzhbYVBpfTQoJT41ODdUQ0RNL1l7b0IlfVlHY3NwYzBGJl56RVVgUVp8fVVYUldnaiQ+KUc9MitgVHcqfUlF''@;'; put 'put ''SUxZY2ZuXUQ8Mj91emtmYDs4N31sP1IofUM6OVVkNzVLLyVLXmBddip9a3JnPTZ9Tl9RNDp1X2V6Ii9pcFs5Mnt8bTt8c0dRTS9eW1J5R35Dbz05NWU3NVMvJUt+YGwrMX45Ymc9Oz8uPSNzRUsjaF1wVHhCNDltL1tOMnd+UHM6OU4mKFUxfl00PTlqZzc1e3RvVnxbLkZ3fGdoIT5DOE57M353''@;'; put 'put ''Y2ooPUguUWtHZm5jRlc0eClaUy58eTVZKHVnXzslQGhLcGBpXjZ9LmNmfkw/Zyh3djltaH5WPUJhUSlLUF8+I0l1XztFQn5dPz1+UG59XXk6aEtUfXk1a3MwTEtMYUp4W1VILkMoeTltJH13LEdjNnxXREJ+cClXKGJIJD5Gelc0filaU3BfSishfWtpPTltbnNwTS5wU3lfIXZDflVYJHNMQWc9''@;'; put 'put ''b3t2c1Q0RHpfZXVCNCpwL2VUUT9NSlR8bGU4aDFXXjtlSnNwLF5RRjp8RmtmfjgrZVc5W1BReX5RXUVjTXRCYV5+LFo1aClZY19BXVpTXX47Sy85RU59XUN5KFVfezJ2X31ofWhfa0hsdSIrMjtuKDxeelVvfm1wOWh5Ly9pTV0pSmt8IzplXzBEKGgufSwpKH1wIVFXTFJKY0Rdc1Irc0M/N1Rk''@;'; put 'put ''LH5pXX1WfW9XQm1ML1k0KzdffTZfNz5aO1ojMF9aQzd+InVbWFRdZGUpfW8hZH5pY2MrcVNLdkRgIyRSKGoyRjcuPi9DKnxfdC9ROXlBIkdAc3glfCtMbXNhREA5Ll9eKTl9NmM6dkBaIyRvKW9GQmBvMSV+XyN0YHt+e3R5SUs2S3UhKitEbWZfZipTN1JEVWQsKzBdamxNbjxfSGMhPzhhKWJC''@;'; put 'put ''Mml3MTF+b3xNRihETzpXcGk4N3BsUWxRemVgOE4jOVhqV019c18pMDVGQm1UXn1jbTQ2UXBqQWV4Nyw3VUNINlljPmAiOmI2LCNeb1FncnRrWFJ2aFlzcDlnOklJaFdCLEs+ZVVmbmAvYy9teWV1Z2d8MWcvbTh0b29ESixQaWY0cCp1NXU5LnY1eUM2TkExeTshOj55K2h+RURedXN5OTV0fTdJ''@;'; put 'put ''cHFUSVB+WS9dLDdRR1ljeF9BJGx4QHlfSGF1dXRMXjhnPig2bldCOj9iZWU3OiV3PnkjeDdAU15lTDZ1I1VWSTdnQyQuRzowPjErc2hLUThnVnAkNTBkaE0iOnlKdzBLVCgjYXApOUJlLm18dCldI2J6U3RsMVlHWHY0eilnPzZuUyhWZ2pjNHJKSS96LjdOZG5Fb10qJCUlRGV9UH0qUz09TG40''@;'; put 'put ''ejQwZyx1Q1g4Wy5PdytoK3k1cSR6QGpjbkNxWFpRWl9DUSZRaUJiTWs/WS5Ge1lKNlUlT1c5TzFMYFNRYFhYYW5zbFVRSUVdYFsyZTpXXStIZTYvNmhlRlJ4THUrNGolWUVIdSFEJnBtbFgvMkBtcFMhJkkhZl95NVkiZFJ2bSxFXVpbVFpAIy5SdGxJIXg3eSYlQCljMzAxVUJkfTdGNlZQUmJ0''@;'; put 'put ''KXApb1h2eDd0XUExQGRESTlzSihhaF00WTwoUS5bPXEiYXUxPiovO3prOi90NkBsTGFoOXAuO11KOnxeMjdUcT4oLzZ5L14iVDgsPjEoUlBXQFJuRSZ3N2RrOylAfGRMOUJyN2tdTzJnfGQlSSN0UjVfOl9JbzovdGkyVWFZOV1SQTsjZXR9JHF1YXdwPioxPio2Rzp8JlY9dCxbJnZhOHRSNWQ6''@;'; put 'put ''ODxycUo5PUlVNyV5Pl85NmhMM2JwY0w2Yjk+KmNpJWJDUCVkZ1E9VTUpNGhGUDMsRGchX3Q2bVMrZEo4aDBGK0k0c3l3PnYhRDFRPU9fU2ExJENFPW05M1ptI1YlZHdEJjV8JVtSfmQqU2xML2syLygqR2UuZE9deWpZPCRUZUZuSCZbMlMrZFMubEwva1pEOTAkOGNMYzckZ0lPWCwjU2E4Kkho''@;'; put 'put ''UEBMOyF8NW40JWRDZV9TQVVvN18yIUVuMyxhIXRhKGQzMVFYOjElQjtzJnhIVWFPZVQ/VEY5dFM2TihbMCo2eXNUe3lRRzpuJTBVXSFdSkJlZyFmfHR9aEQ6M0pebFZRZlssb10yIWhKKiNYIVZmV0JfSlVhckhuSllLUTledyJkUnZAI2RWUnloTXo6RjNnRUBCKV1abGZdRCxOeF93KERATyEl''@;'; put 'put ''Pj11NCVMaUI1KTdkVTk1dHtfL08lT2dQJmQvNzh6NExUYyR5ITImajZoOUErUFNibXNuJF4xUT1JK1I9OTQkalBEITd1XVVlaXNNZCFbM2ZEfjxJYXVEdXNPfWMhZEUpejliKlpVdzRwKnEiPXdQeCI7Yk9dI103aDgxbmc4KTB8OXs4P2Y2ak1WbWVTSkVmYFE1ak44QjtbN0I4eF9PMkEhMXRC''@;'; put 'put ''OGtTRl59N1JiSGE1RSt4I2Foa3UwdDVndmNeXy84KVtoZyFhQmBTb0hnSX05Y2RFZF9oRDhETkBwRCs4P05IVTUlNW5KVlEqJSNIVDI4IXFnMVVAZ1s8Yj0walYkIl1XOFtKUmsialYkSzh2Iko4eDtBXk9FamNNKDs3d1g8V1UlQD1hbl8ke2kyY0VdSD1lLnwuRmQ1ODZVMk52bExibl1vSktA''@;'; put 'put ''MT1bZGpLa01peG5tbERfeEM4NiVgUWdrX0FWQFg7cDFFKmNkPE4+QlJKUmsyMVtZUypTJF1qX1J6Vn5WRTBJTCtzSXNQLzU6Ym4wbHUqYURLTjUlLkg1L1tNaEJtQkBJfDQvdnxwOHxASXw0MGEyRkJjJiJFczVRTDhjR2M3ckk7N3ZsRGlUYzVkJVovbWpaQCQuN2gyN3R+THBKJm1wbFp7dkQm''@;'; put 'put ''RnFSbyk6eGtIUixJUTd1PEVrKzk6JkAkbltRbmNkNmB2RmlYN0NYOFtBbUxQIjc5SUg9MSxKT0BjKiNtNHpuaittQlRsQGMxdGF1VXVqRkx6RmY+Yz1nWSw3PmdiWl9FSS8kNGpjUDd1QUBdWWtwSDouN0w7JlQxbTk6VkV1SWpyWDlySWZzWE4/RV5tcGxiY0R5S1A+M1RlRFchfV41cEpGPDsh''@;'; put 'put ''IXQuXXQ+e217T2k+Z2JdWkVQSGlFOWIkNSRbUChZQWVuNH5wQkkoSkE4I3h4UXl4LmQiQkgkUlM+M3sxOz1bZHM+ZnluW3xkTmlGS3leJUVKeVsyV19hby4jdj1uOT9VfmleYHRxbX17ZCF0elU+bXtPYntuMjFydV1ON3dtX0dBO1pjczsvb0gwVUt1XUdzP0tuVERQS1hebXdndXBtbGUlUGBs''@;'; put 'put ''JUpvP093THN4aTZgS1ZwfkV7XSZZOkV3OyQsbD1ld1BIMUkoRElhSUhzfCZKOW1ycDJOUjh+Vy5WT0hqT0hweE9AKDA2UnZ+U05MOFhYRUB1PHZsLyhIfUtPOCtSX0YpMWFWJlklIyIxYkNScldtOixtNFtlWjlnWW9ed3c+eGhNUjpRNUQra15sJUpdRiU+MmUwfk8xNDE9IixzIV9VMjY/bHtp''@;'; put 'put ''RV0wbTZoemw4JShEXWxfUWZoRz1KZTo9Q0lpQm0sP2dCb0NRQmt1fDdHJkVBQ3MsdyUzPk8hZ1dVX1ErNGFJUX08JC5kX147WCYvUmJ4YkIkWCtTVDVOfVJ2PnJtLHZ0fj8lQz0oUyNvUjxUW2RodC9dYm5GST9nVS5YYVNKNmNfaUd7NHJ4KUw7N25pTEJtTWYzQ3xbc31rZXopUzlqYUhDVklg''@;'; put 'put ''VXFTPSRra3w6XWZbaSMuLis9JSFLbmp7T1FGcWVFKUt1KV1iJShAMUBHOEZpSD9OUjFdSlFPI3BqfDcqU3g0LDVwanFdcWxGWDBeKGFON0FlbUxsMngwfFF3TCY/Qjt4M0g4VWF0YitkRlgxZ0w9UyN3T0MuW1NEO2xNYGM8KDlsVnhxMEUqY2QvWVNwQGFoTUpsXiNeeikiMnRUcEBhJGYzYFps''@;'; put 'put ''JSQ6Z3VsPChdZGRvKE86PTBmTH52dl9BbUxVN3lvJl0/ZUI4PFc6UX08NWE5N2pGcnojTHt0KiM5UH1Pckhoa0xyV3RpWCY1W0QiRyNbaFc7cmJ9eXl4cXl3UUVkZW5sYyRQPTE9MH0iMEVQcj5yWEI4KiNTOHhiZWBvJDUoKHMsNyp2QWUpRE59IkdCTDVVfFo7RXVbWns+N2kwWVZULHA3KERU''@;'; put 'put ''Syt5ZHlUYytwezVzcWtdYVRuPSp8a2VIOChAfWtsakQ7PyFRZTByQlIvQHclb1QkN3srbms9aSYjeUcmcFdwMGRiNnVzSjgmajQmZDxQbFVkMi5mW25ReU9SMWE/MztZSm9YMzpKUVpgL1ltZEVkODshQGtLJElnU1A9VmpmcUw2IWtBJXQhTSRLUWwsRWU4eFJsXVc2YXs6VnElPTBqOlIxZG1w''@;'; put 'put ''Oml5XSUlN2pjZVV8IUksMUA+NGJLZTo9RDFIZUFlK3VySFt2Ozl4NzMvW2o4Kkplc0hwTEM0aChlMFo6czB4THxRbWxUOF45O2c/JXlZVX5PPFY3WGEwOyxkd2NQaEg5TjpEM3hMcW5CSTxtYyQ2W0FnPzc2W0FndjNYYVBlSFtfXX5qbHYmSU99eEQ3ejUsR0tIcyZOZElzfFtFK2RBajJaUSF2''@;'; put 'put ''MHk4UmJZcUoxYCY/N3xRbmROSV1hQWxCOF9hMysza19RQmVuWmZiOTRdN2VpQGVQJTIpYylfNzZoRzg2dWNvIipebSk9WCMpemxdbUJiOSxLNjZxMiN0MC5TZ0NwWntvLlppZWYkbS82PCgvUTt7ZEI1QFljITE8a0kuYDUzZnR6M2QmXT8xfj9rcFBxMkNxc3JDOHBzO2gpU3pVOHMsWWQ5KVo4''@;'; put 'put ''b1gkZFtLcUhGeU9baXNJSHRIOmcvS0kzYShLZTRjYnFdOmdaTzdKN3JlPmBXe2BAYSxJe2clOkpjOXdYQTM8QDQ1KmZ1ZzkkYns6VFgrOmtrNTFQWXBqJGdRJXU3UXNqdTBebF9RUyVCUEE4IndRbnplOzYqaTJadl06JC43Nmh6bEdYb1gyU3xoWDdFOmNLVmUpbVg4SnJKSSojVFRVKEVFN183''@;'; put 'put ''ajtmYXUhQGpQV0V1SUp4b3FfSGszemFReS8uaCksKzZrWDwrcEA7eDw2alcjR3VMQyg2ck83X1V9LDc5P343cVtwMlNFWjY8JE5SOENjQz5FWHBUQGI9ZiNuZHM7IXF7fXUwKD0jUD1XTykxI3xmfjBuUjgkM15yVDwyKj0sUHw4cXY6eFl6eF8pOjNXT2hlYW9JblUlIm8rNUwrKilyfjVWTiYp''@;'; put 'put ''RnwpMWV3SFJQXWxzNE9uPncoK14sVVI0PWchbkNqUDN6dD9RVE0zVm5qUmpJTCQvPU1HUnBAPkIlQkAmbE8zQltjIz9obnRfRkY0JDkxdm82fCptZ00rX1ZkeCp7LykpOylvJDpvXz45aFtuMWU9QzR1Li4xfFpZN3JnQmJjNUtEUG1+bF87JjpaI3lpYV1GVShkSDRUby8zREBIWmBhSHZ8N0Jz''@;'; put 'put ''Qnh2KSkjPmYpLiZqTmp1NV9OYz85NEw8TDY1ckpVS1BDYkJjYnZ6PWVYaklNLENxSXdHK21nJD0kSzEpRUozXTFmITMrTTloPGkkTWJ8NU9WNjc+TStoXS5fTmBaU2c9M1FEamRIRD0zMUZnVnFTY31NR1M/b0RfVyYsJGJLIVFJb3xld1VtNU5FdC85T293S19wUUB0eixeYjA7X0RON3NpW0pG''@;'; put 'put ''eHclfVN1S1Z7Il5EMV9MfExifDVCfXFQajBIXVo5aU9wQmV1QWAiU00/PlhpQDNxR1osYGgxMGhhMXMmVS4vfUtgWV88aGJVeCFAfENEWXwuQ2lBRU1gQmooeHptLmVMOnUmVzB3bWIkPjoiPUpXdT1iWlopNntiWndeW21CLF8jd1p8U2NPN1NhVXdgfk5JY2dKOS5sK149MiV8S2N6I2A9Qypl''@;'; put 'put ''VGMoJE4idTx4JFF4OmI3RTUhWFpHL2hEO3ouV0I0LzppOn18T00/IU0/JGJdSDN4Y3tCM3JQZ0U2QkVsYGBhXXIxYShQeWF0Xz5zVWMhMjomY1pgJnpbRCF9c0E1aWkjei5qRTN9VD1JKiwxVlhtNllPKEk1ayVmRSV8V041Ljd8PUFraW1CNnVsX1JDSzdAM1dDMStOSl58LiJ1Y21Cfig+fSQy''@;'; put 'put ''NVR2MXlUK3k2ZVtYIjEmWFVDZUI2ZGdgUiI/ckg0YCVbRXVgU2Imcj8uIThxZCZQdEs8QUdwQ0tmYE14QnNGOkRmR2FhISZ+LldMcUArKHpCInMvM0xVemVvMEZUODorbyp3K0Qsdlk/dl5bZE1ofEEqeD0kcUFCc00oYSlNPHRvRUFzKVp1en5bJFdgfjtCKFp+WjNONDU1RXh4KXI3Lk5md01N''@;'; put 'put ''aGMralhhWzZkdUFhUzJgQ1J5cldEUyhSUkQsbUN4PXt6L3REelRYJnskeEModWpFUlNkS1cyeTZZZVRZVTkoeTYvKHZRXWB+TXBMKk0vRlN+bzU7OylibEJfbmRZZSlqLzFyNFlBR3FPKCUkNWY0VGokQFEkKE42UjwweXA+PyIlWSlJVXooNHJiMzFneiIlK2tNfT4iJU0iKnlpaXAhN08wPk5O''@;'; put 'put ''Kk5JciouNWkyXWhFNyxrMk9DN18sMiQoX11pRUJ0SWdfa0JRVz8zVU8/KCN4OUlKOUovIXhqUTd2MDx8YkZUNWtHQD0heHZXOVNWNWJdX3UyVWVhd2o9TUA9YXhKZmE0bVJCSW18Kk0qSVklUyY1djJkSVk0OUshNVUhNUI1Yk9WQCIldTdxRkFwMlE7TmBRWHRJPEtDPz4iJSxfOjRWKkI5d2F2''@;'; put 'put ''dC9UKWJJZF1dcCN9Mkc+e0Z2ZSxrYVokX0gxSWhkdTkrUFlmM3YsTHRiXkxWO1BCQH5Ve2s9RlR0XiZdbSMhbHhISkQ6eDk+fEl3XWhpbHZqWXB+VHVKU1U6eHteV0MuSERYPGFhS0FpS0tRVXxZUmhTIzNPI25XMHE3IUhYR3o5ZmE4JmpbTE9rRF8zWzc4PXB4IUdVWChIXV0pZXBUcUsqKE1k''@;'; put 'put ''bGJzYSlMUVRAPSp3WlE+dHBCQnZuM3cobGZQT3FwIkhtdHpWT09IJCR1aTlkL3Zzfnh7XnxIQSQ8RGJqaGVLd31mRGlLSUA9M3VlT1t6MExBZ0VAWEdidEIhMDlvcGxCZ3pOYyg3cGZRK31PcyxRKi47dFEqQm1AZEJBaVp7WUMyIUl6biZCfFZLLy5qRGhdVE5qRlRbVWReYF1vci4iZV5GaTc0''@;'; put 'put ''SjBXfGVOI31YbllyKUhQSz9pIzF2ZWx6dEptbSllcXxxUC9heSxXSmQ/OiZDanFTdWppRmgvWUx7XmQkV2ZwVU1pUExYXnYuKzNjY2M7aDk1Z0BCeE1hcmI9InN1ejkxSmtiIUQmQnE3NUdeaDNRO1JecCNIYTUhN3h3QXJOO25uTSoxdFN5VTVBWTRLZiNgS3YpQFdhREBvIkI+d0RCNV1mUCNM''@;'; put 'put ''NCxjQ1A3cV1hQU8mPjhxaVJEcDZuPVYzU1ZsTUYhREJuWUxPTlUwfERuMTRFY2g3ZzV+YGtTWkxHNW5lbCojMXU0UkY5NWN0VTVCMG5hOllJIVk4Y0VhNjIreER1KTQvKE9KLj8+T0NmWyZHYDFnejF6SWhHWzR6dGY6IUs7fURhL0xIRmZrbiNIS0I/REREL1hkXTJnMEh6Qj5IeEZuWSkoOlsk''@;'; put 'put ''Ln1WYjNhJnpLS1E4P1AmcyZxTFQsUH5VcGtgWEhUdWlnMz86W3ExXlF+RlQ4Oys6QjV8P0dpQzM5OEV0SjxDVnhrXSNOfEx6KG1Ma3JTSn5LUUUvLHgvQzhwdHpWOVpOP1kmLnV4V2lTJlpzPCpIKmNqWi5hKCZQcHtYSEJbUDg0dWclWzN2X3tIXi9rZjA5eFZBRjNpLnFaLGtLKjFEblk/WTUo''@;'; put 'put ''aHhVcS89KihoNGkrN0hXaH03fndocE5ZNTpJLHN8dDB4RWoxVTV3b3U4TjdLKzMmNzRHSFVFLGQvZW9rOiJTPy5odypFejJPUSw/cS9lb2sjdE5EUFhjM1k8RCFlK0xbTyY4UyI7Qnh9KUxnclgmIldAVXZvKzQvIklLVmc2NUJzcmdHNGNuXno2alA/UnBvOGxbNT89TFlBailbMnVZJj1QKU5e''@;'; put 'put ''dkUkbnB4NmJQQnQ9bGEmPVAjTX5XLCRbWlNbNCJFbFBIcFUjSHsxMjxhZ15kLlg4cVFWeyY3OjNjTl0lTnVTKDNmJWJ1OlcpbnNQLGVJa3BOYE1jaTglaiF8VUtKWU83X15gIToka1BuTG5UKzEoTTNYTDQ7M2NJKTRHdFlBZkhRJlcpM24/PFYjSGIyeEwoRm03PmxkI0o2OFl4MTA5IjpJQVtr''@;'; put 'put ''Ui5qXTNqV1dgbjhSQWBdb3hVfUEybV02K2N0TUBrTEM5aiNINkp3TEJaKG1CeEg8M3c+cCN3PnddRT1henltY0FnKUF8KzJaMnlzX2wjI1QyLzo1MipNIWM8S1ZndzlWa1BPVUhpTmg6Q1QkXXswRHRsRCp4W2M3XTlNUFIvUEoqbDd3X3hpNltoS2goSzZTJVdqIzdYQDMsWEZZej1MZCtlR3FJ''@;'; put 'put ''dSQqV21qXSFnaVcyNXxlMWBrUzFrYVNIMF1lMTRMemVtQVFsTTM5UUlhSz14JmQ9OjxEQEZiTV5pS2hvO09GQ2lPTUk8RDF4K1JHOyo7bj53a3krJFdlOS9DZykpeERidDVJa1U+d3JGcFpVQ2cjSWdbIW0qWUpOWDU5Kn4wRVVxQWciaGghTnAwRSwqTzdVNSYobUc1P3ohbFFdViVZMD09cUhh''@;'; put 'put ''c1B0WnhPPzwyRSVafkYlRl9KI0g5NGNYT1NBYDMlQ3o2SWUqTUNTcTF3Q3R9VzZkOGN+SzFva1RYWDt0alAhRSswdS5EYl1tdlVBd1skSlZLaGhRdzJlcFZSS2ciY2xUa0MjKkd7bCN6Nlcraz1pdTd0UURJIXlEQUFPJi51TVlncypSKmRUTXBCbiV4Kj1IalAzWiwpZ192emFCKU5WQWtVMWpL''@;'; put 'put ''aGAwUFRKOi4yLDd7SHpMJnRDQHFtPnc7QnBpfDA0T09wdXp1b2NpXldKcnxxPEhJK312TzkzYyNQbk9uSCkpfXB7U0lsM3ZfbUEscHExTG9dKHF1OV0xZ2dWQUUkIXV6YiMvciI6PiIlQVJEblFlM0s7d1NYLjVbdGwlejlvcD5Hfm57S1UkYHBXTihRU3FNaClKPU0oV2FMKzBDbz91YzA4OHIw''@;'; put 'put ''cHBLSH1Sdk9kN0JtY0RTcEBAJkR5XSIldihsVV9NbzBsOXZfdy5qWVdpUyZXSU5pNFZXRyU8TjNHKmgxVnQmR3BwNzByMU9GdHFCRVZ2eXVRN1VCVCY1dmhNazN4aVo4MzhSZEklIUpdX3QzUSp8QklUUjFWLjMrfG9pT2pHQD1ndkVZWXoiUXY7eSssdCpFQGQuOzcrW0gzYUBvUHB+IlZOOmAi''@;'; put 'put ''ZT4/IiVIWGA8QUNVa1ZpU3czJUtlQk0oJSlGZmwib1l2JTtAdklBQUsuIlAmNXYreW9MJXlUZ156Lk9uYGFTR2B0M3hlKEgrZEFEIiVWSD81dVlSJXBwRUpQJElZWEBwVEhBM0xaO3YsZnEqLl0mKnRyIVVLcDIoNDFENmxFU0ZoWGdIUjhgWGQ5ZCZQfGguSENDI0xPJnRUM3Fxa1BlcV1OVEFW''@;'; put 'put ''d09DRHpgQT42X31Xc0JMeT5FeUs5In03Iit4OXJ3ey9QaiVMTWNtVFB3XnRhUmUmWDFGekFJNUx3PFQxLz5GI3ZCOnl7XiJZMWlNJERhWyFuQmRYQVJCX2MmNXYzclIlIzU4KWcmWUVLRCNHdVJxcHhDX1NlfiVCaTwrMHxuckwrSHFJQD1OY0BZIU9FR0J4T08lODY1Vi9fXXhIN15JSDt1PDdW''@;'; put 'put ''S3UxO3ciaHAwcHAiWGxkZkx+NUdJUWZpSztPX3RacXU5I1dtdWBafjVKZiIpSFRDYTR1cHAwWlQ6YCRfI2dQfkw8V19FU0IqXyJnQD4sSllKeyRhUmNpMEdPNWQhXk1sa1tJLDdJejArdnJfUF5RNzFMbGx3JDE3Yl05NlN2Tk5oNmBgREU/T2MkQTdjcFZVI181P0FdXVk3JjB0MGZwLjlnNFtK''@;'; put 'put ''TFgoUyhXTyY+WW1sI01YUlROTmcvP1hyU25QLGNWKldUaUhaN1JXNnFuTX1zNkN9T0JENENORTwqSmxhaXclSzR3Yj55fFg1YVhFI0drZSo2dzM2VGZFI1B4bmhObD1yWXpSUGplOyojeS4rU25ZKDJ9Mz5DIUUwJSF0Vlg+dnxMNXhDKjMicW9PZFpNNUNsdz99QkBiaDFFe1svM19USCh6WStq''@;'; put 'put ''a201Zj1IL003SDUlVjY8MSRAVjl8bnRYbyRhOlYoeURaO3NjZ0VWdVNfLzVaPTBEWnwwTlpeJlovR0hUMEhbJFFIcnd6JE9HRjdzTS5uPiFbWURAJmRyOz8oNGtRUyRTbF4vcV8/MDFPZ0k9YzR8IVo7OUs/eillMF4mVWR8W1liN2NFaHl5N3JCQCQ1MzRAbXVWVkhFM3ZQPGVIIzZIOi83bVMi''@;'; put 'put ''KEJEbnRzeWBGQ30vN0lvQ0xxeiY6X2F0czJMfDwme18pXlFWXnhMYVBuKnIzLyRCWndad2Yhd0dyQDl2NHI5KUNEbWlVMHRoTntEKnBhWnd3S3hHSCZxJkw7dXc1OUNjK3JUMEJ2ZmNYMzNoO3JmQEczQ1dIVjd4ZG5hVzxrVUN0RGpdcyZFXU1iSl1MRUIscUYlNVYwdFAjeW9rPjo7Vjo+ZDZO''@;'; put 'put ''L04iQkoiR1g+NFZrJno+NHwxN3tqW2FXfXhbMUZCOndfOHpvKlgqdlRwTiw3IXg2ZzJoPTUwKFsudXlDMHR5Xy95Wnh7I185ITlWd18od3tZaXk4fTx9Znt3WGZbZWppKmVnSiZ4JGkhYjp2UzZ4R3RleCJYaWx9a1diN3olUDIxZyI1NUdWX2s+NSp6NVAzS3dWSHF8a05yKF1jYlExUHQrLkx8''@;'; put 'put ''QWxyfHZOQTNQdEZhUCk2dntdbGhhfHEpRGtZPjFHQjQ3MShaRFY/IiVkbXMzYHxPZHcpUUJIYlpTKGp8cHdNNytWMWg/YEQ3Nlh+U055JVFGcG5zbmFdP3ZJaH1CfkRrWVNwPnB8YytIUX5TL1FmMmByKDkqTTtkY3N0flZUem0hME9EYTp2U3IiP0NJVnpOK1pYKyZQX086emhXVH5ENzxuZWdI''@;'; put 'put ''Ym4vfUVgNzd3Si9vc3ZgQjIiTXtOWShIfiY2PnNYYTRbR1Q2fnVbS0RkR20+TnsqKntETDJHLyhyWkBESWYkOztKYmkzTXtMfUIyTEwqYHBrUSh8cnc/WHN3P3VIQU46QlJ8XSY/eS5hK3Ipb3VrcTc+NTV6L1BLQnolJks7NThdT1p9VjMlal1yJl9fNWM6UXs0P08vOj8vbkk8UXU+ZT1wPnBl''@;'; put 'put ''cVN1czEoTUhENzNOcFppWCtNX3h5RiY1ST9LSDEjcGJ4YSZbU1BPQnBGVDJzQDwlMXR3OjpRdnM/X294cXYhT0Qvc3NlfjZ9Qjw3ZzNvJTRTe0J7YUh7Y1A2dHpLUXY6TGteRmQ9KzNfYDU3UElKQ2lCcT5HVkRFd2tPMkhOM0NKQyQsKEsjX0piekQocmJjRDE+L2t7enRvbFMkaV0zNlU2RHpE''@;'; put 'put ''QkNufk40cml6I3Q7cjYuQXI/MlA7Q3pCcGJHanlgLyp5XTg1YWMzQUx8YkNkQWE9V208aGkrOGE8M1R0Vl5adE0pekV3PjpvT3t9Qk47ZWI5R0tsMT1jLnxMdW8iPkFkQ21Ya3lFcmtgMDFTM1N7TixSV1o2Mkw4RH5Ta0QucjVvdCY0WkUxZS4+TGJhbEMxRmMydStEciovYmhDNixdI3lGZW84''@;'; put 'put ''b2h+fWZbZTNqanl9X0tDKDFacU4+MXhaeHphZFR7QSlrWjRmQC4+Yz9aYF1ad3dORk5vaGA1KHp8Wm08IkgjZSN2c1Zwe3NNO2U4NkVRU1lDXWcoL3wwT2IyWiwrcmxYenlyc1c6NFVJQ2tdUG58cU59KXwlMlF0JncuUUhdfjVwTE16bUF1WzQ2czJTJHBrY2hLcmQpLjV5bTo9RSZYPnhffXt7''@;'; put 'put ''ZjpyaW07UTlydi8ydkBfdFlaVCJmJkNDbF01WTp8WFY4UHx8S0QoVGBKLjhKZj1USDl9PkBNWSRIWDJfcV0vS3pPKDJVcnlAY3FfbXZgTmY9fmAjNVpAfXg1aHohJjkxVl5aeU52NnhxIzdkKHYyKkxUMnltRj5hOi59PDo7TH5jKE5jNlhgMmZObUpqMTZufFJjcFQyPU96Nk1JTC99ViphZGNH''@;'; put 'put ''Tm5+cVd6e3chakQ+TG5DcmF6b2FgIzhHNFE6YFI1e3BmUlswL2kmQ3hWW1tbKXB8KEw3Ml1IKW9uNyY1NTIyMGYxc3U9RFdaW1ZTNlUwPmNPRWR2JjZ8WzdPVCE1NnMyZHZ+YGRoZlo9TSVNcEM7dVkwUWFAJjtaMjVoUyJaakYiLy9aTzFueD88YmA6OUJkWGQhNzlrbng2dXtNS2JCPyQ4RVFk''@;'; put 'put ''dlc+XmA/P2taJkhbN29PKD5ZfHgpRmU5bWk6QzR2SCk3dCV1VmpdaFlQZzZhe1teNS5dcVomWCVgNGg2a1QxVWdUeG1oNyY6W0BYRlU7P2h1fkxseXdBOXlwVlBsLzh0WlQpP3UxeUE6XXxvfDhGUmkyPmVXRWBVYnpWVWVlX25zb2BWImVeclhUcnR9fXZxZlU7eGtXKF5fU35jXixRSEdjX25z''@;'; put 'put ''SGBXM3l8XVpSTEJhZF9kU1MqRzNwakpiU2BJfjEiQ3MzeWRDeXlTMmVNTXosWHBqT2JSYCtuY1NGWSM4ZzA9L2BTb3pLZm9pNS5XYiZvcGg3WypjP01hWkJdPDU8LyUydlZsbllXVGw/NSVwQCk3OSNkMn1dS119YExFenwvWH5LKSJIXml0W0V7RTpOYS5bO0Uhd3BWUGxVcm40MXs7RTVRO2U+''@;'; put 'put ''L0FhMU9peGQxRGQxaGc0eGczWnN+WU97YHNbS2Y6V1N9clVSOjNUTGJ9UzYxKixjSiNCUyglfDcre2JkcSVMSzVfS3R8RltARns0NVFYfHk2QEZTWVUoMF8yeChrSmoyaHs5JEFLditHb3xBKzpIVGUhV0NqenI3P2FyTnklS0c2VjBgY0tsSFJkZzw2UmFSeHA+XjVxTCZCNjlMYnpOUF1mYWNL''@;'; put 'put ''JjBMbn4vJVooKSlKOj1zXSY5JTV+ejgicl9+QW9WaV1YKChzcVVlfileSktDLFR7ZSoxTjBaNihlakkmeU41Wmp7by8vYVdsYisxRm5sPGNAfDhYblo9XzRFSWJiPz06THI8czFgbEMqN1JzMGAwLCVTejczVTE2NWZYS2xdWG52PWlXe00zeD9YWTBtRiVbTHxeN3ZTR11wMiswTlBLQkFhNFRP''@;'; put 'put ''fHdTQTpfWkNOQ0IzaWE+TTphcltdOjE2QWA1OnpHWVpUQ2xJODpYRGhwMDZEPmNAPk5GI2Vibkh7JDVCeigvXW5wO0cvb3NHYDZEUzFLTkg2KTN5c3N+QjFYdEtlU0VgW2tadVtBRj50XzM/NUVANkREYHB3ZHMxYGRTWTNCcEUmXWJKcnJmKUJ0az8vNnN8KFZHLiEiTnxLPnJGekkySTJEWksk''@;'; put 'put ''dDdNbkhdS3JbXWBZSyRObD56JURqXSlRJjV3NjJLW2JEZFdkL1pxVGRjPlV1RGs5cUZDZDp8RlFtPT5eUEFDMFdIP2NgX3t0NSNmPXpGeVVdT1pIJTVwTEowbXEjQnNWTGEse3I3KVoiWjouaXM7enFRejJ4XihhdXpndSl2aHhvRigqSXFwanBqXzk9P2h1Ikk+amMzYU1eZXU3Xn1je1BFTSVF''@;'; put 'put ''aF5lWyZFYVgrKkdOak9XcV9xejVdIiJ+cV8+cEtoVSgzV3w5LmpFfk5PTGhXJHk3dCxJLlFvVDFZIi5wc3V9UmM5aXJYN1NybXB6UzNJYGI6bFN9XmZZKCFjZEJVO3U4Wk5sZGhUe3g3V3BlMFUoVn41OyFTSG94TitremwuYj4qPzQoKWAhY0ldVnxybT9fOXtwb2V1Wz9WUl0/bUxOb1omLDA2''@;'; put 'put ''fVozKUdUIlp5Nj58QlljcEJIfm96I0hscjJSMWBeUUZQOVZKPFZ2fFspR0x1czFoK1RSY3FmMi9kMWFoeXMlXyt2TkQ2eDY+KTVtfmBMJjVFYGRZY3AhYUo0Tzp+fHguJEwrQz1RRDp+fFspKmUwU3gjZTIwe2Q2X1drXUovMSZqe3Q7diM5KWVpJSx5NnF8NCxzWmt1dSlLclBdRnJuOmUzWFk6''@;'; put 'put ''ZXdWb3toN3MlLD1BclFkaDFzJnYyLkBKUnZ3YTp3fEUrJWl8b196JiolQ0FmXSgzJEgkLFFtOltWX1t3RGBPYmNxOnEmJVtJLCYjNFNSWk4mQ2AmImRPJC84MVthbyYsSjAzMT50dzEkTT43Vi9bKEM2dihgWD58SjgsR187M35gejtCMmlXfnpwVmMvfiF8JFRbVytxVj5fKVhPeilvS2pnQko+''@;'; put 'put ''YiYyX187ZzVhPEA6bTgsM0p7OjYkRiFhSyY8YzNlY2YrRFQ7UGVALlpxXSlxem5AaVgzSUtxdXtIUF02T0pJcX1WME1JPmxxWSl6NFZybml8YjFWV3I5cVgpMUNkTlcjKTN7YHs6LDB9ViRvektjcVdLPWBIO3xFOCt5fSgzeF9ONzBKcXBaRnBfalh9Vnx6eksrPiVZZWpmNjBUck9RcmY0Olgj''@;'; put 'put ''Ins2UG5EcilWZnIpVlFgU1oxT2xQMEtxcXF7cFgzSWNJXXEoLzQ1Ky57NnZWTmBPRihFV3lMWis+SColMixjfVZldUpWXV9scGZdaiIoayhgKTN6X3lASCpseWQ+c2d0RWRxSjdgKFFEQCZOT2s2L1hyWUAmTk8qKHI+KzVnZEhkVGxXMyk8QmxXMzRReE80I0lyP3omY3VVTl5SVCM1aCJRRStL''@;'; put 'put ''S3sxSHgmU11AWF1uQVdeb34+NkNDXWVCMktxJitUQ2xbSztIPlQpRCx9ME0wclJ9N3kmNUthOHhZaE5yYyw2UT5uRlZIT0lgaTorNWxkKSZaL2hlcWYwWFd4VF9kRVJfOmV+ekpWWV06dHs2Yjo2OTd2NmJhKzR4ZXVWMjlOU2JBQHJ3WXJ7fD9gKHVGZW84SkxpfGoqYEc8aj9lZ2Z2P3J3XyFG''@;'; put 'put ''Vi9ZPnR1I3RzeTpXV1psQDJDe1lWbzgpSzJTbjUveDMjRXtnTiVhbjE8UU9oMmtnZX4+NCRlSX4jYXkrckFYJUNbJnI0QlcrPStLS3syMDA2cDhXMEd9U21YP0RdaCJlMHcjZjJyKktiYmExPmpTUjhrZjJKYitSV158TmM+NUdyIltdNUo6WzJKP2VhcWY+dF1EXS9bMlszTy5yRU1Fb2hxX1ks''@;'; put 'put ''UXRGVihLMlNSOCg4QSlBckw4IUNCXTBycFZTXVI4K1QySlhhRjZAc0ZgYjRDe1F0akIrNndaQFsxV3gzaEZxcy9gYjRCcF1ZI0FiK1JXeHw3eWV2PmVyT0J7SjtoZXFmLCYrVCtWKXpZX29ieW5qUDA2K1NgRVByaTp2a3R4KVR5ZHUjNiJWXyJaUDNkT1Y/MFllNWJJREdtJiQ0OGB5QHouUDBz''@;'; put 'put ''M2RPW1U3Yzh7ZzFrKHlQa1JkSGkyKUBBclB9VyM+MDl4cDpraD1zSFlgdUBRVDojX3B5PDt4SS4mW3NpWDxabUUmU19EKElOeyQ5K3MkZC5pS08mU2B3RHtVe31OWUhQeGcodkk5ektPJlNrLDpJJUtiY2gpJUQocih9d3BsLz9jLmcodmlje0dMaXEqWkViNitIRzZvSENFKVdGZnhYUF15SXN8''@;'; put 'put ''c3wvSzcwP2NPQUROemRyTGkyX3VqeDpIWGM3XXRXUFMjJCZ7UnFObjRgakIoS0h0LkdVXmBfMD5ldkpJOCpIN3ljIUpSe2AvcjRTWSpnVyZPRUc3VlssdyF+UTxQfG10alU0T043InNwc3VMaCFxc1JLbVdLQnE4SXdxUDJNUnZicyxgQ3Z2czpQOWhER1F6b2N2aGVgalk+fXtGeXdbPitEYHxS''@;'; put 'put ''KThoQzUlLE9HeV9mKDtFJSxwYFpTRnNwKENnYnM9YDgqPn1wP25Xcz5sTyN+MGYyfXZbfFFVUW4zO2NaYFA4KE1+Ym85KWhPVyUxM3klenFQV3szd2Zza2NoV1tiaG47XSU6On02dFNXKUZHL1NkYlosXWJFMV8qQ2RzRig3Jmx3InhRamJaRy9XNzIoKm5xOC9fN2tRKG9Ha0IiQ1ZlS35Aai85''@;'; put 'put ''ISkzSX1gT3xkfiolJWhJN1tLNGdKe1t1JX1nMjRodHcjQW0pJkhIfWc1cnNpL2goJl50KDV9UDJuKF1RU0VkQCRkJX1JKVcoRmYyPnVQLDdiKE5HVTRkMztjO19fQj5zdVMmPjx5S1BTTCNFdixmIzF+Wyk5fnhHUSxkKDtzdmRlKm03LnwlaWpzcCkwUm5bJGRkV04qc1c1fVY6ZUVKfmFgSzRu''@;'; put 'put ''VVR2ZjclW01KeEZrTn04aVdhUTFyIiI7Yy8+WkMjfHY6TDQ/Q2NfNEJkK05bXjxNTHVuXko6JDomWTYlVmJzJmBXfG94UX5xbGdXQnkyeXM6WEk+dDB5O2NJfWcqKXNFd2ErMTNMOCN9ZGBMUDJ7SywrfjN6UHxfXlUvZn5WcFE0U2QoaDV9SX1xTC59WVdENzxDPihRSTkoY3BoflhMWSgrOFNY''@;'; put 'put ''anxKa3hGR0gxRj90Kk8yfll3eEZ7Q2BlVHw+WHJXL15BOSN8ajJQTFFRJmhARE9qPXRLUCRANUM9RiE6JkheXzAxVCgoRVRMYCJLUH4ob0Y4X1orZH4ocSJ+Nn5EP1JMX0RFaHcpfl15RiFDYnNbPkp5dF89T2p+WGNTTElIRWhmfEBCI306d1Y3ck9VKEBAKkFeZSk/P3dbfCk/VjQlZ3E4SjF4''@;'; put 'put ''S3EpeUg/YD5YPGhFXyU6JGhNTlB8JS4wUlR+fihjK0MiUnFPV1tFdCg6c0x7LmA4JFpMRVgkbDN+N3xqQlVba0ooczpTPT8ufiJbcjAufSlPPHNOTmJaU35NcGRzfUYhPlBKcThhfn5XUyh3PiZIQWBoXWxXKm9eP2EseFpRanR+Vk1gc3IuMn1qW0lGM19pSnE4QjF4S01dRDhBIm0hS1AjWyVD''@;'; put 'put ''MG5USzg1Oz8+REp+cnRkfn52dChDfW1IbChjcVojSmB5djp8en1AfkhzMn0xW346cWdlMmQraFciRTlZWXxSeyFzQFE1aCM6LElFQjpJMn1mWy4xIX0yYzFGZUlDVGg1a34vPW4obCxwXjtjK3NDPTJ5IncjZ2I5eD0xPlV8OkhWKE5IXiklPXZUKzQjPSx+bzJ5UWNfVTFPaihfR3xUTD1pKG0y''@;'; put 'put ''PjhSKzdbKkt5TygufHVYUHZlfXMidkpRfCQsMSFFfio3eUZjd2BuZF9aMk9qWil2cDJ9RFtFUm9zJD1VNDwiNV1lVy5LY19CMkBkaX4wIUZjfUhqRXh8VEUlLFtGTE5lX18xOlBKW2JfcX5xKl55WyY4V05NOVtXKH5pakJrWE0+TldtX0s3Uig1aTR5NnRPKCh8OkghSUtgKkMmc2lFKnZMYDpC''@;'; put 'put ''MVBRKFBnNHldeH1MYnNuYGpFaXNwQyE+b09zVzZ9byVpLGJJe3R3OzJ9LkBJRjVfQmU+flEvMn1QW31kKX1mNDBSRylIND59Zk0+fitgJCp9fipgKSo/fnlbN185PiZQZCtBazQkOnY5fnF8fn5XfHM9QiJXKHh0Zj8jUWd+VFJRXzheVXUoV3hrb3oocn1oISRuMlNYLktuRjErYm49ImErKFtG''@;'; put 'put ''Sn0yWzEvJFhEUnpDeVskX0g7aU9KVlJbV15CPDhBPylFRj98c1BjJFZ4QzhzPTM3byUuQThPfGtfYTwvZVpyWzZXdU1zZ3I4eyRfN0JaKDBpPz9CazwhUnpRXiMqcU0qbX4qfXZrdko8RGZPdFZFbVNeP0ZTYGAuZTglXiM9SUc4XzpbNW5IXlFGQkxoWUVaKE4sPT9eXS47MDl0PkJXdjpdO0hf''@;'; put 'put ''e1MrVndxcntJQHVbN1FZY1E5NkNWVj0hPz8/aD47TUpPOzdZejtUNiZKMXMiQip3Rzs6Mz03Wj8jfU43YnY+eU52RHdGRUJ0Z1pdT3tYS0MmV0dDJktzKUJpdjR2ZG5PcXFkcTdjWn5ZaS5icjhZe0FlWSxZKDF1Tkh5YzVMezQ9JmlBSzhva14yZnh2NDA6YE8yIiVRdytGZjg3cXE9cztUInNQ''@;'; put 'put ''O043L0Ijc3Zzc2EiO0p7RH1nI1t+Zz5NNFN5fXFQXXkjJjw3LzMhYSVYaih2ITYuMTxHeGpMbCpQTWlkOjdjSXJ6QHZjXiJJLDNjVUdHOUlrIyh9ZUQyZ1BBQXpYQUFBQT9iKUQ9KDVEIjx2SERHKl96SzZBdXtrPj1La2lTbkFEYEVLP1RLMiRKQV1DTTx1bUNBWj8yM0p8aG4waGU+Sj1tQXpY''@;'; put 'put ''MzRjQ1RBRUUwISp2VnRyLFhMRlJ9MGZEQUFwSGZHK25SUUF1VlF2RHNiOUJHT088YWVMITNKSTZXUmo/NlJ3KSEoXyRvST1IQU17cWl1P28/el1IXTBYW2IrRG1GeEFpe2gxW1BddldeZUVhX18ob31pMy53cFY8REB5UX5mTyFjWz5uPiRIXmRVS15kVV9eOVZoeT4zSXheM2IuZz9vYD8kKS4q''@;'; put 'put ''VndrcXZ+XTdfYXlBenlFKG9HUWAuNTQvQyFWZXJIRnJEYC5KUTZDYTRDMFlVR258ZVtuN18sUmhVXyFifF0yYH5IOGAwZGw7fiRqXVdQU3NXcXpDIn5AKGg1MyM1e1gic1tPPSoiLH5zd2xYYiJ+fSN6ZEs6RipJfVh5ZXgjZ0dSfStrdWo4LHVDciJtb2I9dmx1c1kpck1eNH5ZcW1AXWNnZit6''@;'; put 'put ''LCxNSmVpYjFuZXAmVDhpcWpZbG83KCowR0NbQm5uMEw7U0AxNnkzSUp1IW1DTmgqUndAVnlldDcxLnciOXIieEp0SSVNLkB0MU9TOzAiUHFjKV1eRkh6Xi8+bT19TVpOZDlhSy9WJncqPy9XNTpvY216VldBZ217MVpHfDM1dEkpT3tjeVl2RD9uZzREVzNnfnJfVUJMYyVTbT9xV2lYTzVDYDRh''@;'; put 'put ''MSY6c1FzUnxUdiMhbnZ0a117XzpPNk08VFI0eXkpclB0eC9sK3BTNHM8V3FWPE8wLDNAI30iR091U1ZvXzF+SGZPPH12YFZQTFV6SDNIbSFdWyJrSEN2bVcuUztoXWVHYX5KfmM8PC9NMklQO3VPUyNtL0QzWXhyNn1sS09BOXNLMWxzITsmRSwqKiNpIiZBVU9ZdSQ+UD1uSkcvRGcxcFlhPUdh''@;'; put 'put ''eWdzXVp+Kn1PVzRSKzJndEAoMWxEWFhRJHlgKHEqa2E9VD5Xej5BZztya0A2XSt3VzBJRkxMbDFUKjA5YE5lfUE2Xyw0KiVGS0omdXhxcVppKkRrWUU3SFMqd3NiWS9bby8uWFdMei8uO1NaLCRyfGZyYUdRREkmOCMraWtZfEddRnElUEQ7Q3EjSCp7N0gqQWQkZ2VVZ0E6JHBubnpzJUloRkdL''@;'; put 'put ''aXslREF4cSpQRHFRRGFLN308M1VCSilDQztPPzZdUWNyMD05PHQrOzd0VFMhWkI8WjdLNkZDdCphezlkVEJlOEJbYyh1cyYlPikudiZkRXJ1bF1TVkcyY2lsJEhITylXQnoxQlh8Pz5Hb0klVXdFYT1ZdGVFe1lVQVAxMEsyVTZWJHN7Y2w/d0xPdXpCUlsyLiVtKFtmYFRRIjNaTk1RUWs9UTdh''@;'; put 'put ''e3JbUWwlZ0JhWUw5RUF0c01SRCV5KCthYDJWMDxYR0NrWz81VHxheHZ6NkRfUXRkVjd1dyErWnEqaE97LzRYVmxwO0R3RS5BJVRmNDo/SlNNMHRUaHwyLDxeWStFJGBddy5naHArL318ZUIxNEZ6LyZWUWddZVRDT3w3WTZffSFsfihUWjcpQk8iI3YmYV1uQ10lezVdaXc0QiNqRHZ7T3J+JmYh''@;'; put 'put ''c2JgfnRiLikjQCo2OjQkdCojXk9KYC9FN3w+YHlJKl9yMFl8JjZBIn13Zyl8SCVQbzpiOkMwQlYiR2g1UTNwd0RnNS9tZFMyKlY8MixaZE4zRVtsX0MhSEheRVBdalA7MzxxcC9sMG4uVCYsKSUhdEcrW3xHVU10X3pjUU0+YnQ0UEFMW2pCcXtWa2tGWlU/a0ZzP3kxKUhBY2NuKGRaWXE+ZDo6''@;'; put 'put ''ITVdLHRUeHRpVFRnJmJ9cSooTl04fUw1eStzRFh8OiloTnhfTm9NY0pQenB+Z0VzUTQjN2pnQVcmKyh7eyRQN3Jdem9+dWFEQmJsW0J3bV8leXlpPURjQTdLVkopKSIjJV46V283T0UyeFBLajt5JlY8WV5oMnxPUzNYSUQlRkl6TT5leEhYSGhUWkJZKT1ZfGVKOTszPHw4LiV9VTdzQDpNPnlE''@;'; put 'put ''USV2RGN4ST1EQkJufCw6N3A7cCgsSndOPmshZS5gK0NJSVF6dkduNSFyPVBIZitbayM+R1t5byxmXS5dTjJ1PEJQYVlJbENjSl5BPVhWQjlzO0ldK3tYbTtwYTVBXSwkMGJBZzx4WTZLUH4lWTUqNGQkJjQlLD9uY0tdfkZ+K08zJjtKXWIyZk5PSysxZHRkVnhHTSxMXTBkQjcoKCpUX29edkgu''@;'; put 'put ''dCtLSnFDUm4pTnduW1FKS3kzeiZxOjdabT5jUztxJEkxaCIoK3FmWnNJIURVKU1TZTdNJixsVnJRWVA1WmE5P2lPO149bVpYQ11GPzUzRW8rKShzKmg0QH5PckNDTzJNdEZ4THIzOU1XWzRXPGBWc3J2QH1PP0J8VyE1NVoue3JGRDdxdVVyS1pQbCpBfCt5UnV2NH1TIShqPVNoOSY6PmAvJChl''@;'; put 'put ''RS9TOSgxSzwmNHtqPHpdfEFwVi5TOilONHNNe3FRNUVdfkZDXWAicHo2bl5CT0tCeCh9KFRWWysodG57IzBtVHIxNVhRMH00ZU9XMl8mK2hofmVGdkguX31+V1d1WXRCMjRoeS9CczhbLnssY2k9R0RuR1E9YUg5Z1c2aD1Obl5bQSY0MlguS08ob3cucCZxI34vcHVJRjBMWmhyMz9OMUMzMHFk''@;'; put 'put ''dXhxcSl5ezZAWmR+cXxyMXhhKkUsLzcrWXxYV2RneChSI1pHd18qKztyc0JUd31xc0k9OWlAaVA/K01XV0VUeD8yKHJTWCwvTHlWX2ksN3BuR3Q+MHhsNXpHdmlKdj4mbUx4NSw4dD5gRzM8KCsocnBpM3grd192JmRYfFJISGk1Xlk7OzwsWigoXSM5Iy5bSWk+OUNRRF9nPlF+WzlUeFdKeShW''@;'; put 'put ''WGkhc2NVMltLSU9dW15wOzI3cGdrbkEuYFhTR0hgb2taRDdjU1NkOWV0P2pvYlhzJW18VjRefStBOmg8JTNfbEkrT2Q9aWcpaypkU09+SjxEdU9lSkY2TGk8Mk5UcXVMWigoNmZ9Jik7c08vWCxCRU9eOjA1XzBNSE1IOWgwKFRfck90Sk1ILlFITjx7eSVeSSVnOUJvV0Y6Ml5HQE5eaE50fjJx''@;'; put 'put ''SFZKVHl3KWF9fTB6YV9+TWhtZkQ1aHNndloxa05XI0JdW2crdX5fe3QhSHZjXmkrdHNsdFdfVUdUSmtMInxSSXE+L1hpPlJAV1coUG1iWFhdNH1CQnxyWXUvaXMiXlIjcEdzX11bNHgqREp3TEtlL1VPdT5aWHJVX1N9KGJfJC43cEY1cD5ISG5TdVUiaHcpdj5eej1hJWk/fVFaZD19QzF4PXdu''@;'; put 'put ''YE4iQHJnbGJdPVA5LGBPUWBEPmlOb1E5LFVSRzpWTjlydVRxakIrUl1CWjxvOiVoKG1HZT1kRCl3Ri44QFhBVCg+UCFTZjJnLGBPV308ey5vZS4hQDNJandmK20oZ3V7b3c/WV9uMCQuMWJaP216IXxuVn00UVR6OnpVXihKW20+cjxGWlMjNV8wWjtyUEFSPH1eWFBrSXRKT1E3azN4MXZkfGVb''@;'; put 'put ''dT5AaDh7UXk1XyssPjE+ZXFKMipWKzZ1e28xIkU+WkJSI3QmIXN6PUx8UW17Tyw+SXBzI1tdb3xRdmNfeGMua0N7Jn0jVTwye29aWFRNSGBbVUI+aktIUk1xJGN5d1teOShVY15RVm52UjJKUmtMLGJNVT8ucH5HenBzMjNoOkNVX01VYjNja1AsYE9KYFpzd1ZWUzJAM0lud0xxRWRGWl0jaX4x''@;'; put 'put ''fFVfVXp0cFdnKT9sR21fMlY0TGdPRz8wJWAoKlpFd2J+K2FGWnJFdn1hajRySS9fOV5nalo6UVZ4OH5WeDN4ISk1c3MieDFvXm96WTFzRF1bayQ5aFJwbGI1eWNeayQuUWIjOV5leTN4eTxRV2tqTHxdNTYmWm1mV0hmSipGMkt5e295JU18XzltM11SNSo7TWBfKlkvWVczVWFTOjxgeDYsJjNJ''@;'; put 'put ''IVRdYVtydGFeb0VAP35MO2I4Ui43cC8+RDBFLld6JFl6QD9+e3RxPjJvaD5sYC9paVk0cm03cFVDb0FEVXgmK3QhQXdjXkJOdXMsPllffm5sU0ZQTz8sZ35yK2IrJnJZOH1vb2NTOjIhWyF1Vy58fGpCdHJ0cHg0TkxVdjoyTzVQSCs9KChQZj1KPjlYSlswKVVIYVZFdnpRVlhAaU5bSXsvM19s''@;'; put 'put ''QlkvZkNzUSpuNXIsPlZQdEJ1IyM3KHlBRlRiUX1VVHJVYzM3U2QqS20sO11Gd281e3FxVGQiUlBqWCksQVp2cjFRdjQ4KkVUTnRjeiJrRzlQWi5RKWEpVik7YmJxLnglbm9vTTUzVSxfdjpLcEM1cD59PTR2P3ZifiJLWTNkdEo0WXRYX3clMmE5dVVHRGh0MHg3SnJSbFokJTxXdXY9X1pQRGx0''@;'; put 'put ''JE0kRFtLZE15dWRjUXZdRXdXOkM+V35KMX02cnBGIUFDKFlYfFh0Qi57RyZlSiVjNzRXZCRyOC89UFg1M3xMNUdhTVl6bD15fmlVRXdBUS9jYCRYVmpUdndDWW5+TFhYMWQjeSxWT3U2a0oqdnpabUx8IXIodmA+ckNPUTlNMUJwTHVOXUVKdDpDSHJtXVhzQjdIfT92PXIoQUZ0NUZWTjckXlso''@;'; put 'put ''S1dsOnorSW58NEtRKU1WR2R2PksiNUYkQTppRyZuVSxYc0I0O1JdSkZxL1d4eSxES1l6O0l2USpCVnQsaHM+fj8pbTlOXSZrdko8KnhUfGMyW1p0Uzs+dmtEWzAuaV1xalR2cStzKW1EZ0F3VzRZZmJGKElYZFNOQlk3cVNJc0hFNm5LMXxGTnFsaj0wYkRXVU8oZFBmb0BQZm4mNC5PblhyPi5S''@;'; put 'put ''V2Q8dURCU31fRzpuKE4qX2VOJSFtYSg/fVo+TW96WypzUkZCO2hJZyNyU0RwTGd6dHxVR1lSZU06L3A+fVZ7cmpaTShLcFVdNUpNUkNueTw6RyImQitCQHV8Zj1oPkdJOkN0LyM6XUU5Rj1oTUY/UHo+Tz0wbVomW0svTDRSXVdgKD47VyRbIzliYn5SV09AKDxSWylWMzV+cSImbT5yYStmUFtl''@;'; put 'put ''dTkkQi5BaytRVChCKXRQfUFleH0qPko1dEIrUT0pRVIhX3xsaUBESDx9cn5dd2hBPTNCbS5WUVtudnV5LGtFXnk/e1dmcylaOyhyZSxnZTZVT3wpKXN2VEJRfGUoX1toP3VYLHVCVG1iO08yYywrR2o4WUYqJnkifFR4cHFaSWAuOjJBZmBCbSNDL2NCSyI1RjBrNV93SCY0Lk8mc2ZZLDU0d09z''@;'; put 'put ''JXV5MWZEXVFIbmMrbDRkPSIzX2hENXJHPkdKKCNBTnliSloqalVBKGlYTF4+Nk5jSWM9I01aKWIkY090IXMiaEdWJkMyJDBXMmg6bXMuYl9XS1NbMl8kLGszOHpwfmZOaVNGUChHOkxyellrRWQoLEcmR2FLeVV1dCgpPDoyQWYkLlV1KGh4ZGRne2MvWThbKzdMfCo0bnJjLzp2QkE0fCtnWVQ+''@;'; put 'put ''bUp2UT0sSypVdyhyPiJWaHd2N0JKdW9vOiNHbGJYJGs5Ylg0JHgpL3BhNF0mPzhRWj91V2kkTV0mWkNXS1pNPi9iTWtgPSREIW0zQUFUbkRdKWtCcExFKjZ3ND5VYW4sLzNDfjxpQD1HNHIoLmFjeyMoKztNUX1vU0ZQfE9qQGEzQygzJFdeWE55RlRKYHQ5VHdVRnBPZCRoKFRPUXpwPGluUVN+''@;'; put 'put ''eWk7JkBORFYhcG9eWktdciR0LENBJiZ7WXhQYyNaLmB5JSgjP21zfkQ3M31vS1FSWD1oV0QwIiswNUc4Llt7fSFoRCtUX0ldMXM4c1R4TEtwPjNJXVtKWFU0OihQNG4zY1QkfSMhWl9UUT9bW3ZWZVpYc2cuLmMlUUldXmwjbUlBOzR0UkZNXm1ZWldZT1VfdVlUSSRIS354NU5xcXJCXjQvekYi''@;'; put 'put ''a18iMyhqIk5+QkVKXS9OUE9ML0U/aklIdGNeVERpfi5fVl8reSxreno3P3lIUihmaUFeOlo8X2ZFOzM8QSt3bSsyXn5wXUwoQ1p5fnxDXVdBe0NwYzU+LFlUS2E1JT9Peil8JCI9aDwlZ1lsST8oUT1udWw1SkdONFpQWUUsJHV0KmVLeHtvZzpqKDczWUYpRjM8a2IlezY9M3hsYnZzSEo1VF0s''@;'; put 'put ''en1BM2t1KzVdMVBAQk90I20zPD4xaC5vVG5XdGxTU1kkX1ZhYHJJdGc8cndqPzNJQWhOfFJJciV9XmFuXzUmQio1ZFc6JHY3KnRVVXRGJTZ+RyUvKCslflM+Ml5hK0heamozaGRaTHFMTGFhW1o1fDVAUXxBNnI8I1JRTHRiO3xqSnhVW0x3P3x9dT46IixVXUx3P3RHVShzKk01Tk13P3lIdHwj''@;'; put 'put ''MSE8czkkfUl1Z0MuJk5QRlp4Q3Qoc0gsVnAvN3AoYDhaX3tgSVFHIWRzfmpRej5vUmFyXi5sdStKbTlVZixofiZBfkY2JkEjR2dsfkptPiZYbVVUbEMqYk0+YCZSNSg3cC9EMmhsQjUkJiR0L3Y3SFBLbU13fXJOeUBhblRTLDJeInsiXS9MbX5+W1VfbDVQSHAwOCkmR1V8VmJNUmkueitdfHF6''@;'; put 'put ''SipffnpEZE98YTcxSmldfEMwIVtRSVRHMFt2fFozeiFeZzVGMmhESDYkKG4pazBBdj9xSG5fVllZPTdBdj8zSWhVRkI6Mj5WYyU7R3E4VF06YlZUfHhYQn4iNjdMKmcseFJIe0V0flhvK3U+NEFOIV8odVBHQFlucHwkVFhydXMmY2w8aGlUXmlRXnl3fmB3Jm1iMnl1b3F+MT9aSEY1dX19fCs1''@;'; put 'put ''PihYe2FjSExPaG59cmV9K1BuVlUjbiklcVV6RGN+djZENUVyQENPQSEuJl9XZDA5azU/WTFRKGZrU25HKS85fXFQOVZ2JVpQNTdzOHxXX0k7cjZeN1JHLyZ2LGYuMnVsLmQ3ZG05P2liaU5YMFlFVztNKUU1Z0NDWkYpaTtqNTJLUE44KiwsbUwlTVpMZypWb2JeaWFkdl9qKHpZUTx3VV8oa11j''@;'; put 'put ''OnVKRm8xW0ZqTTA9PEguaDdSTCppTkEve25yRiwuOllkMDwsbnx2WXIuOyxvZFsoVng1KGVXcDMxX0E2T0k9a0ddKiZnRHE0fS8xaHReOGgmYTFqRUMqX3p3fXI6RHhqczZOYlRMR3U4bWZyKClWeDRsU0BJSmp2XnYoPTFoYHZlVEQ0UCxKQjM/ZzFHc1J5JHtfZT1+MFNUbkRVQEQkIjVSeDp1''@;'; put 'put ''NkFGXmZqIzU6b2FoOHh2Y2VgalJoJkNURCVJIkljJD18LislZyU0ck1nPitQOz8/SVNzbndrUWpERHpuVyxuYCpsPiFQZCF5dnt7UFFbPix2Ijklaj1SKGBedG5hU1M1Tm9gR1ZoQSNMVFBiKFVtNXczb1dSWVEzNSZzZUswVT9HTCErTkhiL3JqLklZZ2JOcGNue0tHJnRHbSFgPl0rVk9IYEdW''@;'; put 'put ''Rj9tU2dJP351V3RDfSo/TW0pPUMkQFNIP3xUQjRhLCUhLkVoaFsqQz1CcTR7KXp+ez9aX0dEPylHQDRscGA4I3FSQUAkKFdkW3kpOjdIQit8XnMlXnYxQCFKXShbKSRXKjA0fC5DeXI0Qil9KXoibEtgWCpNUzRlaUR6ajdDKUdYd15qNFMqTiJfM1M0dW56RUAsfj1yeEUjeXJNPVYySkJYdFNN''@;'; put 'put ''fTd4aGZ5TlAiPFFYUXF2TC8/c0k4M3kpNlZ1MU1zX2hsVn1kNiVTU01JLFBnTk0qY3JMWX09QGNfb25OMGV3bzY/OV1gLDh4KXttRiFJJiN6KClgfmtRQG4xMFd8cDNUMltaRkI4c2J4R1ZiTi9ZMkpsUGQ1RGk1Ql17NGxeJlNCKCZeNipzSipHTCozblVdRz9ge0R6PiUyd1tgemwxZzJnZHJL''@;'; put 'put ''QGg+L3g/VXhBfXgzczdgVWY1JXNvTHgzY31jPTp+VVZIJn1PUl84fnVYfDlWbmAxL0ddNzhtZUxKI3l6cHl2RHZqdlB8e2E3UHxkXjwzaSVtPj88e1JqNUBRVExGeU1aQWxTbnJ2MFJGWylWRlpwVSljInNNUCROOFNxIlcpPClKaTY+b1t4NzA2Qn50KUIoX0xfb1Y9PUpaI0R2QnF8O1JGIVdb''@;'; put 'put ''fVBDVV9RJTMlQ29+c0NLMH0weDB8Iz1tVDFtKXN0TEx8WVJWM216eU52d0BgbFlqNTR3ISlzczduWF84PDkmMVkrfl8kOV4rTlIjVzNpfHVqdj41V0NecUooX0xzbT5DP2xyM1klfSg0dT5OOko1b1V3RzFyT35vU1BCRTY9TUA5JHNVeEJzU053bCloOl0hblRYJS9GaT1zcmdeeFAyLldoK0h1''@;'; put 'put ''RWhPfV0pSnw0Ok1KKF8+OWY+YkF8bH4uPWViLCw4bEZ6fmR0WF89bTJvUVIzRiQ/MXlWRElSdUJUfDZIcD5yfW4kV1tIfVpuMGYhJmJ1Z3NTYjRUbG4hJmJlUih1bktxcW4hJk5NfnN6eyMwfE5iVzRea3hPKHxNZkdxfj8yWSo1fF9HUUFaTFBvNj48Tk9RdXVVdTw8IStxUHV8MzFCcmptbygw''@;'; put 'put ''MVVfSj1NSSRIPXwofVZfWSFEUT1xekBuSWx9TDVtJHgvWE9lVy8rWElmSkpPKVE7YFtdPSZBfH5tci41aWN8XkpjTihlYV8sb1U9TS9GSEMrYXw2TUA3V2FmQTM+YzttLlV5ez1sN35zLjc7czJycV46SHxyJC9rPnIiPn56JiNRQkwxZkI1P31PYHw1N1RRWXtKQ2kwLEBOZXxQTk0iVWFUaEZj''@;'; put 'put ''QTxpP095IVVxdSV+UzdlPTssUV9MJUk0ZlNMfGdaWHI9YTl9eEdTOX5pTUhJNUY7SSZdIlhJJjQuT3NZZiRrMHg3eWc1Kkc3a18sJj1rZlk6fU96OiZtVClaVkhffmFvMn1LRnguMXFNLDVpPnJzOSR7aCwhc3h1VV9SOnhnPTMzPlpFMHI+TVFuLHlNNCFFRyYpSy9jQnM+MldMY0A8ZDdaPk0+''@;'; put 'put ''eGhzR3M0JGpeTzlbUUEiK3M9K0NqSVRYfCNNWF9HOSUuI2QpPllwYXNyX0NfO0ZLY1V8Olo2ekBTbl5DSDFTeC5qOCtAJmUuSVg0bj9UNHdbTjt0KG0yfC47bTJvZH03JVRKTkJYWD1zcG1ifkMhS3wmfTZHbT5HUD51Pk47fDhqcT5GaUJtKUVBIltANCR+fXJvV18xLzF3bHIme0ZDXXJ8Y2te''@;'; put 'put ''JUU6X2RheyZtSDVVLlhlfnBdXSZ0IVoqNENsYDdJNipdRU92JHpVXzJWbD5jYHgrcD5rYFlyMEIwXyN3PyYkW05kMUpzc2VxVW4iNCVOOVZffihsc3o3JEIuNWoxajp9KFJVbkNvbkN1OVp0NCohPklkaVBGQD48bklRYHBNN0dWWERIUTQ5WUx8elU1XlN8ZkJISSxIeEJgLnx9LGlWX1csaz4r''@;'; put 'put ''X3UsfSZaeyUjeWZvO25JL195JU55UD10flJSWV85T1pWfEd3Kns3N3MwfVNfYThQcS9ZN3N5VDRgcTBdRXtOZXVfcDxfeGFeJkdacDpHL1JddzpnfC51LiZ1RkZpeFc1RDZmN14uSj51dktvSEc3NnM1dSw+NHVjREw0QlZOV3F6N21ZNCRhfCsoY0EkKEhOQmh8bFl2PitiOCZye2hhPSZZdkk8''@;'; put 'put ''KVllJVkqLnxKSDNmc1k0d24oNkJdRV5RS2siSl9zYFRVbi5GVWQhIkJeenljZmAyNCoqfHw9RTxtUCV9fTxOfEshRyZCS1FuZHdtV3Q9MlRgNVgyeUdfXylsIiYzJGltcVo/flBoOG08VTN7PHdhK3F9LCYvJmpASnlAfFlDNzR9T20qJH0rd1hfd0h9ayMpPn12aWVKQHJxK3R8W1smbTN0OG5n''@;'; put 'put ''RVp8K1JpejF8Km1NP2A5aDlFWVkuJCxrYS5MI0dNLFFHdE48K1JpbS4od10wWGt6dENPTz9WM2xuWW4xKFpSK1cjZy9Rc1IsISVnd0ByPmtvdyhCQk1dLlFOLihjYkZMQUYwdCVBWXI1aj93STx2IW19InxDR1ZNNVkuZEMhQGh5NyI2dWI4TzVhNCRZUX5qejomPmopS3JHOTgoMEtIW3B7PlBr''@;'; put 'put ''JiVJSShiQ34henQ+XWk9TEQjdUN9c3ZNOH5jeXErIUdjfF5Zc2dManp1U3FyTEtxZjl2elQlOVBzb1FXXWtRb3gqdlRNP3NRVEMmaUUscFpUcTVna2FVfV0rdyM6U3RDdCNVZHE0dyhUJkJ4dTR4d0FKLnojNFVROUx5QkQzYllqeXE8N1MsTTBEN2IvOjpXUjxqWG0rYFJzclQ2eSxPaX5pdF83''@;'; put 'put ''MEFvfj9TY1tCaW0sZC9EX0puMkFsT2NlUk1rMy5sV1s9KmdBZWJ8I00/JnhRbDN8cT44WFlbW1orUCkrYWJMaH5AU0gmSkY0Z0claGA5T3I+b1s6Kyxbdn5Rb28+YnQkVDBFY1M5fnhaNiRjXitWdUl1KHl1a1s1Z21gSlp+fUpTdD54ZH5kUU9gLjltQHtbVUZqMHB0VH1rJVhNUXVuY1FkTS9a''@;'; put 'put ''L1JtczFhe3JwRm11Z3N8PU5FWU5SKnE5fWp9dzExWjQqZXUvdjlzY0QwWnQ4SFQzQEd2PFhSYTpvPj1VRFQoTSVmP0BVUn1PWW9rIXVTWmB7VmAiaFp0VTpRbEcudXQlP3YuV01xLzF0MHxMbCJRZHJbWitQJTJhSEI3PllKTHwuVzxNV3Fyfl0qIypXK0xEOHZ6UXM4QDJEZCxSMUdWaig/U3I2''@;'; put 'put ''dVlPd0RlcyErLExgPW8+aEIjZGxqbGFwMH16XyVaRmdpOUNmP0hnciYuaFNWR3gxTmU6Wkx2YHU+Jl5OUX1RRU90T05ERytVWVAkd0E8Oi59VHo1dFZIYjRbL1kucDpUXn0vXSt9fVBvdGM/NWd4VGJDKCopNnlhdEFYO1FdSi9KMEI3SEA6YDBraEkpZWI2dUhVMENIe2FiND43bnAwbVBJYy97''@;'; put 'put ''KkV6b3dxdElobDNjMTMxZygxN3xUS2h6NnkwJWV4WnVtQEdmbXs6WnUjW1M0KSlSfT4oSURSeyFIXUhnLiRAYHpPfiRBaHBffnNWNk9lZ0RwaiVJKnE9TSMxS2AjSEJdMX1aSmE2K2ZHdiJmS10vNS9KZVNVLi5XazZIb0V0Q19EeVlNNGtXKURjRVkqQmVNRX1aa1puI25VTiUhKjZyYz8oUyMw''@;'; put 'put ''LipnNEcsfmUrV258fC8xNE9jRVc7SF4rUCUjfXdgdjhoSDUsVnUsKmcoPXZzVFVVbjYoWzE/WnlJPzkrSilqKEM2OGF0Xnd5YU1ETVlYOSxENn1UM3RaNCF2PXVBYGJUbyJlNGU/VnAzOF4jal9ufjFTdTorP2pdYUNrUHRJTj96cm04SFkqaWowUUsiViZsKjx4T2QmZ0EpZyh+NUQseGNmSjV8''@;'; put 'put ''RnpFLEZYYWA2aGg7ZTZVSm9eVHQ9WkNtcUB3X245S0dhQzlOOn0wfXhoMT82RDh8UVpnbnRgPTFUY1J+SmA7Jm92R20pa3UlQkg/Mmg6V0ZAXmJUPTlzNGg6OWMxalYzIXNIa1IwX0VMfFs8ZSQ5JGluKzYpYml8bUpuIzJCIVhhSjFhV2U5KDduKXZVRCJGaDVFSSxOV2F8W2hMbEVfTExAPCt5''@;'; put 'put ''O19FNjEzUEpte2FyJmZ0Iz51ZnJHJmZQW1h2Mmh8KCIrb24/R1ltTHE4eSlkVXFiZjtKLkQrIWNBVSg+dDVSU0MwTHd+WVVuPis1aWZDd1k5MnlAV0NCJWx5NmBEbXVbdnMpeUVyfDd1Y2ZqeDM0bUIpdyJUIlNyYEdWWnYqLnFxRy8mVGxiUW8uR0p6IXwhNTRyc0I6TzNMLyo8fTVSYW40bnFJ''@;'; put 'put ''P3VCdzNoalN9KjZZZDBlUiZ9WENGPkhGUWkoMWl8ZWo0cmRDWk8qQjhBTGNsMHYkRlJTaiNEeX1KQ18mSXRzO05jODx9cz4/eWZgbEtrQjplVCZfdCQ+LDZKdH52Zmp5dGYsPEtjdVhFc3FvJmk9b2ZNO1Z2dClrdnEsbVU/UzI6fTkwcl9BSEJsMGhUdnVqSFRPaXQ5ZT17diw1I3JeW2ZnJShT''@;'; put 'put ''RkohO0hiT0hVL11tQCxiKGteTmw+UldFcEpnYn5YNVlrYj9Eb0pKUXp3JThzOFFCbDVxRVFmIi8sREVHPkUuaU5+fDo1IiZ4NlIwQmxJNXw0PSpmSXFLJSElSkZ7UiIzPklpVGpyTiYoZVdNXixWRkFhK09UbDU7Y05bS0R7YXtkbkpkfDtAeyZGd0dSJHp3Pn5TVmFhemw3cEwhNHczKmpHT0Qi''@;'; put 'put ''els2cn0pInhbKDFJVyZJQiRZUnYwd31KfmlHLjdrNTE2bngjInpdZkRKN3c8QixdUHYqalt0enJgaioqMEllQmpYQ2VXfHVJeSJxMVQ/ZFB1V0xHZFpTPD9aSTM4ZWR+MyhdJGszI3w+STMrSGpAJitCaTRELFV8TEJOdFtRPX5GR1VzUkdZUmY1dkFGQjdCXiYyP35pfDZPXWp5QSEkaU5heGNW''@;'; put 'put ''bW5GYWF7KmAqcFNuK2B5Ym9KMmFiNnVqOTlCUUd6WGcreDApLz8yWVJqeW88K1JfYDNCbFRyRDNONFdsXURiJj8hNG1NaWc4IlZqbGJmWU4xRWFtQ0B9Ynt9aEFtNV9PYmVZVEMsaTsmQzN8JW9wRXZ9bH5YQ3hfKUVZUylUYFpMJkQ6Q3dJbUREVDJgQlVAN2BKNShUV3pfM1RkbTFFWGxlUCR0''@;'; put 'put ''Ti9mSXp5JVBreTl8dnVfJiJbOEY+TXJlcFBjW2N0QkRJUmJhZ345OyNRbUpWdHQ/Yj9kR118Pkl7aFVFSFtec18mRlYhWTdiYm16SCJzQzF2JGZ+RDFnUSo+JDh+Yy9KLl4lTVNyRjc9Y1c3OlNGVTtCPTk5bkhFWGVAa2EyZXo4TEt1Q0dzUmlkc1BWRWJEO0ohUDdHVXtwW0Axbl9ET2d0OmJz''@;'; put 'put ''KzV9aXouXmByekFgLHhBKj99c281b3cjeiwrKE42KSFafGFzcVg5QllMfFYvTkp5dVB0NGhfVkcyMXwmMHpaIzBSY2xXYkpDU3tHSD9IUjtMWV8lL2gkQzI9Im5vUH16QjBYRUdxYXFzcHRXbm1MKCI5dG4rbldYOzoyPk0hQlNvPCI0bHlzZ3RiVVF0dlVoNlR8W0VfNjdKNVtWKD99LFYqTSJt''@;'; put 'put ''OVApLn5TaWBnSElkM21lc0ZRaUJnO1EpcWxGQm9tTGFuaEtWKnpdKVZFLkRTVysyMCgrbGRFKEg7fD1EcHRvZXl5c35vITYkOjNnZnlNeGsmemhpTCQieGFTYkN0QXY2cXojKXhCVWhARyM+RWlwSWNDKEwqfnskO3VoOm4oIyw7NWAheklgPG5FTDE0KHA+Ly9FSEBBLiQ7UTglaDo4LCRUVDNB''@;'; put 'put ''fkNkWl9XWC5JcC9PSCQ+YFExTjRydi5ISDIvU3cxaGI5L0pAJDoiYzRWRTFyZDAxPmFCdCVXdlh+OkdibEI/I00zTmB4MHRyXkhhSyY0Pm5qeUZ+RnJWPk8jMn5UKGtSb2lhLHl7QnVhaCR1UDlpPlpmK0JUNikia1c6K2B+MlpsWjIrWTI/I3RAdSJubkc/YTNUV218Q0l3fkE/QGhCPCIxKHty''@;'; put 'put ''Ojs7L05pdHY0bEdAXXJbQmZ8dzhxc1p3KUhdM3JTOTRlU35GeztPeS5XNnkyTEZIOkwiYiEoJnlzOCFKNyh3Q0ZWKmY/UChGNzNvVllARG9ALnNiWl4rQ1ZYZiQqQk95TTc4IlhZOkAzTU91UUpeS0xbMUd+JlYiK1JYOml4IT5weHJNN0NJUmV4JH04UnU+ViFaeEhEcXVtVzVrRT57S0ZqdE9A''@;'; put 'put ''KT9Rc2BQS0BkTW1bfFVbWyZBWGx6JVptSyEkT3hQZ2ZDL1M6KyFodU5MaihsaW9aSkIlRUNYRHFnUndzZktMfHVoL2puMUtqTWNEUiFlKyJySC49LmVOVn41SnQzKUBCKml4XWBeRF5RZ0pANyl8V1NCM2QqYTBGSi98NHkzcVFocj15fGx4dyk/TUpJJFoxNntid3okNks6On1TZ09Vd29nYHlE''@;'; put 'put ''VS9tPkJwYUgrK01DXmVqQEwpQHdLdD5CVWA3d2gmJl02elBYJVpWdnNfWC57cipDTnIwIVQ5SWNjMSVuPVMka083dU5Ja1ZVbSFTUWc1WStSRDFFJHMyb1dbZTBaL3xhVG5JNSEmKUw4fTQpcD5kUCJiX09mLHtMXz9ifkBLaSE8SzpoJn5ZNVI5QGF1MGBRck5MJlojPkNkMix6IXw2TS83YXlh''@;'; put 'put ''KXBzezFNUypfSVBmeipEKmdRTHBDUlpzQE9nKUFePmxiUC5fW0M6PX04ITsmOFtuXWFscCxWT2V9NENwTHpVRUUpfEhBWyZtWFZOL0JHZjhzRWlXTzw+cnc5dnJHMCxvfnZ0V25WInhabUFlVns7YWFnWFVSKHhIeXE1fDhKYWRoOzooUEhMSE0heSxyaVQmdGsxLyo3MV1PWi5NPl1QZFkrYVFP''@;'; put 'put ''Uk99STlaW2pWLHFycmpJUTRVTkMiWVFHVmd4KnwvTiouOXlALCE7fWtUTk9SaV5Ybi54OEIlPXhYfD4qXSYsNilaIUMxcGwxZCNPcyJiOUkvViYvKX4+azZTVEEhTVskX0UrcGR3Uk0ubyE2XzlPQk8ofUdKVkU3Sy8lbUNueEN9QHcuanM5WlhuQFpEVHVCUiNYWUJbR3ZURD1NYSowczhMM1R9''@;'; put 'put ''UWhaZ0EqSGZuRl5odWdDV0VeRnR+W1dZX1AvdDFQL0V0S2N8MkpTVkV0UkRLdV8lYWwmcH1QSzB4WTwiPjkyXjpfKU4+c2V7eCJBa3RbTCsrcjlTK3lTMHlGSntFO0hTZ0x0WXg9SXVQUWRtQXVlSV95YU93ZUhgKCNQfihhMkolLixvX0RES01FZywqaEBGUj9KdXpuZ1tOOChtLipuO0goc34/''@;'; put 'put ''SktVWXB3e0lVbkkyPUIiaCZUOzlmbDlecUV2TkpPLjsxT3o/PS54YXFTNExaeD4vT1Q3cXBCIVdBejNPbSxfKCRyMXhQanZUKiheSmNnZyNdYSh9Il1nRiF8cyE7WkkrTGgkdC5zQmEyKE1Ga0BHY0FzRGhpTjovYSFseGksInx3S05pazZDRDlzM19bUzoiZWNuJVMpN01He2hVUmdzWVZCIX4q''@;'; put 'put ''ZFRua0FPV1ojeksifiRXJE5oJGxnX0x9fj5vbD4wM1FmajYifDk2anM+dSJGaFRMPklDLCRVRHxlajdhMkhJZEZkWDlrZkc3PG5bc3p5L31FZFM2MVh0QWJZfFFLSiFrcGwqQU5ddmh1ZCxQPkJ4eTQxXzVHfi9LYmRIeXNXWn1bSU9jSl9rRWk1JEtiREhqWDtUOlFhSCxCV0l3bH5beUxDdSYi''@;'; put 'put ''VEhyYDd3WHxBS2xpak5JPzI+RH1kPSRLU3lOTyV8Yi5JKD50flFpTn5+Pio/VlZ0NTFBb3k9JG9kNyZtUE5yK3VdYXowQUlSbFlifF9YUHZNd3M5XSM5SiZhKEwmcnRvcj4lbyJLaEJdMUYvOkU5emlgYCl+Y3UjfURHa0J8QVh5cn51ZldBYkhlLDcsTntoZXwxeEkoakMrUil6a3guUWJ3b0xH''@;'; put 'put ''T2pSV2U1eFV8ejU3ZkJaKmg2fSxBWE9EOixhPlkkNWxCSWxZX2UlbGEsZHM+T1RVNlZaKThFTGZBeU1FWlhEdTlyREdweXlSSiJJbHJERSVeOzAlRldBcEVDLipWSV0sbmo0KzVXNi4sI2I7Rih8WjRQPzFkQUNYLztYdHhefER6Q0NFOl8wQTVASVRJbmNtWGo6NVhNOy5EM3RZNEhQJUxMTzcs''@;'; put 'put ''TSguP0FGNEE8LzI+KmZjJTVJTik1Ri5MVE54S3ExcDBGdGM0dTIzX2hFZWssaG9JLmA5Q1tyfCkyTCZfb2ZFUlQ6RndFY3Z2OG1ETmg3MVVxNmksQ312MW0hbWFsfj1HXiYwajVYSClsS2V6KSl+Nld1bD88OD5+XlROfG1WIT85RGssP1FIP2xpLkBMUjs/ZH5iVVhfRDV+bEpEaWUhJGE9X34l''@;'; put 'put ''WlB+NGw4YDhQdGF+WTl0eCs5RSQhNmUydSMzXSlXRThIZFBrLjo+TyQ3cnAqNHJsR2teV0YsX3JFKnIvQ15RfX5PW0pfK3J9KkYmUztqOj9ASyo0YiM4XkhKUiZUWlFAQEh0VXVJUjRUJUlqTjJpTHdmZ0VBT3Q4fkwrOHsmLEBSSFt0U0wxSGFqJFs2RlJTajBFMH03ZTsmODVhUTh6RWlQTGZT''@;'; put 'put ''LFYrdGZELltrfGQ2eD4pTV0xNE8yR1c7PXRvRnU1ZUpHL2UoWzVMcXRTJmE5QiR2a2h9QFpHbXVQLFBQbHxqQ0AmVCRueiVaSklGNyZCOFpoQyxJbW56XT4xfE1LenBSUWBOaSkiVEBAbSY/fDNiISswNz5OaSR7LkNqfHFOfiY2YiREaGNGdmRtY3NGcVU5fHJnQjZHO3RFPD1+InBSZ2lOOHpn''@;'; put 'put ''ZkJbano4aVpecU5zejwmejYsaGs2aSIvOUdOd0UvcnZrRVRkZHhJYytHQXE1Uz9SUTd0MndtLixFWFgrYThfRnlAJk5ldTFmRGxueEZVRGQ9e0poTkRyXSkjQT0+UXhiWDFqc11RKDluOkoxOl5bPU01KTFPKl85JE4pK2ErP1EoNm4zVFhxe2FgTT92fWx7QH53cFYpaz1nK2VeXlclPmhocyFZ''@;'; put 'put ''anM2dTxNPi9uVCMucWZJT0ZsfStyLHpuPnt7JmI6T11sez8yP2h5JC9acnhtWlErTyJEc1tafHJCRzVMfkwkfE5TRWBIaUUpOz9udDouTSpJSSlXM1VsPmpLeCEkflUla3xYMUldSU9zfXRMZkddV1lgUGFNWU4wQSJjOm4+RU1KWUEieWo3cj5idUA4M0F0Z1Y2JCVaPzVEMkhrXnElL31tTERO''@;'; put 'put ''VjYlUTNjZng0Z0RKTHZXKjUvMSVtazNEI2JMI2o9JkJdWU84elttQ08oQVRrUkAyIT99KE0pJDs+dVhMdHtCa0UvfXM1KG55UkxTWjJ0bytaZFJYe3khWlFMfCl1dVc/V1pqIiNgdHVmMkgjTHx6SCVedlRwSn1tZ1s6djo0S3w0TnRRPXRNPD5lZWR9SEFgJil0aEwsT091MHNxUlZfVzZuMlRw''@;'; put 'put ''K315akIoUEM1LnQvQTNoXyNaVGtbWkppJFd+Kn5TUWBPTmRpRGEqOyVzL0RpeUw5aFleWSEyKGwwYjY4Zy5bRlspPkNpRiVaMm16LnEwJS8kUDYkKWdFNnclQjl1ajp7JlJvaVFqZyk+fUE1Z2dYKHArUixvKy81fXNqQU9laE5UeipnIlJHaCNmUTpuKShaV25NSiZ0YSkqeV87M1JNQnA+ajpg''@;'; put 'put ''RDVvNCEyeWhDLzA7X3ZhITRkMF5VK09jPzR9WCxyTUF7TFchTWBXI0BbWEtgb3BIKj1KfTdrfltRcT5LaWlaL0RHaVU0Q016cmE0MnhMIi9PODV9LlZHTU0oY1VRVH4uPzomLltfUXBEWlJdc3duZFpbTFs9cXFeSUYxOitPaT41V1VXX1V0d0pzIUFBWiM6dEVwei58MjdrOFNSVUIyeF9paFRx''@;'; put 'put ''UlpiMCFzdU1zLjFbSzNodCo0ZFNUfTFEXlpaYjZbOlFHVGNTQEF4QWB5ckJ6clBoZUdDR19DNXljSXQuSGxTLkJzJmI2YmxpRzNRZEMpdXIjWHxYLzpRKC5kVV9YekJBNE8sfDEyUnNGKyVZU3NlfllVanlkRGthMmAveHJdNDFHSG1mblJFPyl0VGpHYCkkcnVdVEBNZzlaRkgofSp9SlI6WXwo''@;'; put 'put ''TXJnUXNndChjNUFRRn1zQEpIPz4rWWpKdyFjOjtdMEQ/PmhxTE18bUgqM35xRH5jR1pjRE5mImV+dWUxJXB3Z21ATHxuLlYjKkBJekF+Pld6dF9yV3dYJXNWQnBzVD9NcWY8JGJtSCpAZkFhe0xxI19NMFZ6RDQ7Y3tAb0pPeW1TOEUlfDtAYCZrWFpSeERndCZ+I0JUbkFBUCk4PjRsWT9+ZXMl''@;'; put 'put ''eGR+TDU/XUAkeiRjZ0VmT3hpbHhmdmhKRUEuPCxoYEIzRS5hS1lpYG02MkF2RFFReWF0WllTSFJaSHZ2bHguTHN1dEJBQUFBQUFCdCxMTWZuTEJuQSpjP3J4Z3FUfGZDJkIiYFJLNnNjckQiTT4iWnpAUGRxcVRFYC5SUklSWy5NLFM0bS4jdDd2XnBkeiRkQGw1eFUrMXQ/XmVPU3FXeCgzXlFE''@;'; put 'put ''cXVaMCNKKUloXmIsYDxBPiReKU92VXgjSSNzTTQzNjJ+RS5qPzgzZiZrMUF4Wkk3SX5xZl1sKGp3KH0lZUV8Qz0vMDoxWH04I1tJWXBbbUAzKmUiLHd8PCsxeyIwWUcjX2BbLEpyUntXI0pqPXQkS08iPHMqIXNTJUVjXSV7QG5yMnw/bUhYJjh1flFyb21veGVqMFlOZXJOP3JfOlUwRz98WnVZ''@;'; put 'put ''R01xe24qOnkrWyljbjVoTjxAVy4wTzMrV2dOOGtVPl1hKnVBKGtVZUlYMktoeylrdk8+aCN0c1lMVDlea21tT3BxXWwmR3A8eWRdMipJSVM8Szl5NSQ1eHV8XTYrfjYvbVErSzg9Tjs0eG5AO3AlSm4od0wybCwuK24vM1Jffj1ZJndbdS9QQWBDfC5JXnlQensmdjd8SyFVISY6VUdaOX0oKFd2''@;'; put 'put ''YVZlcDIkZURMVXssUX1zc3FqTygsZ3dfUGZ4OyZPK0lCTjtQfD06MjNvZiUuRzxiP0YzPnNXZGdKZXQ6Q2pnIXRdbTpyfi5FVGxSYnAxLkF+Lih0JiMuXSpNeU9AZDVFY10sYnxaUlRzTip6MmRQV0JraX5JNlVzKHFuQUBLUjZ1dFlJcGtxWFRtVSNES3pdcUJsSj9YRVdYYy9gUUVNWG5KXVgq''@;'; put 'put ''dFRlXWVyLnVAKyY+cHwrRzJWSX5YQHx7SG13QnlJJDE8JDIsX3xtQGlFTXA2SD5WaXZZLDMwMUc4L0xvckY4O1ppPnNaVDkyZCo2Qm81XlRIIUZiIkZ3RlYlTEBrOEpvRTFNMWVKI01SdXtEMDteNmQ1SDludy99T09oNUE8bl82aWRdVVhpMylZJWhTakBQfiE0VSFGRGAjO11fLEZYVTs9fEA0''@;'; put 'put ''M354O3ZxKjs+ZSE7fHgpTm4qdTpybD1CcXhPanJHL25yQClrViZLPzBvOGMqLG5+fT1gNXFVaF55UEFGcixFVXhjPT1We3hzamJNbUYwN1lXemYmeG1yLiRKN1ApXj9WL2JTeyZrUlhLNG86ZDZeS1d+L10zdj0hOmUlTExrZWtQQUY5WyR4PmRTTUdZITYibldIMWU/akQ8b3NqcDo+MVs7YW17''@;'; put 'put ''V18hYTJePXYwUlF+d2pBKXNmL24jL2hDQU9QWVc4P21vTUBQUmdGWV9VaWI/ZGZVZDlzI0w/MCFJL1Q+WitMaj8rQlFSYVNLYzlmUX0mQjE0aEhiPCprfTMoM3k7ZTc9UyNCeWxCbGteLkJhS1VGZm1AVFoldGlben4zfG4uM2UySSs5WyM/fClVSlI4fnlGeER7SmVuNjQvZT4pJkJAW2J5Ul5k''@;'; put 'put ''W0xUZVcjUlp5JEcmUCwvWGhXUzl3VjRRPUl+XSNAfUkrRXVYWnBUQH5uRDpacUdlLnxpbF9qSWR5bzcjNj93dVFkQkUlIShke3N6bj1PUXxxQFJ3SFRQfnc1bmYpTjlhI1pbUXw6bUNtJHVMLmokcXpROTVzSkBXMyFAdn1CQVlpKDYyfEtlVm5RciJ7cHVDYHl9a0s9XmN+X100YzVdfjdPTDwy''@;'; put 'put ''OWJQYCtvUkBnIitYUW1bPW19PUs4ZmQoN3owOnR9VV52a0w9MXNwcEAsaFRAcFpVSCwlZ3xbVSxkRUUqTFFhez1HdyNLLFlgcWBPeXsyWGw9PysjYGFac1J5bTpSTGJRNGAqOl5iUGRmTVBkInJIP3N+WiYmPXBpbl9iNnFkRFhhTFFbbjsuYW58YFBjOHhUMGh2QkRORCUrYmE5VFVLO0ExdFtg''@;'; put 'put ''OH5iVSVkU2w0XWQ/c0t3c1ZZJC5ZTCZvSXRPWSl+MHh0Nzd8JlZ+fWhPJDpOfnVnJFJvfls1NjIlclsodVY3fj80SEs5NH1ySzQ4Zlk7OXZnSGcmb04hMXlDYGF8VDY2Kntmc2wzYlpofV1YRkMpWyM8XldGN05lK3EyVHJwUk9AfUQiZ3pdY3I/dDRpZjZkVlQ9MCY7JWUuUT5PfCh+KD5wV0xY''@;'; put 'put ''V0Rja21bTnU9XjZGOillU0AzWS9ua0RML3J4R3l4Q3ZoViQ5RTI/JlImcyt4LkhgQD0xVilCQ2s4MkdmXmJienwjWlE8e3o5aWw0QEJ1RFp3ajBEQzlCfXpVJDN9JHVqMylVJnwyTyR5Wz4kQU4lSzgmJXAkRzBKMUV4MVpZeXx+fUcjbkpyW1NKYjVzRClHPE5kOylNOEB6bFZXTEpXfCVaJmlx''@;'; put 'put ''eEJ1JntbNGZRMXNbSU1eIjBuMlJLN34uaXJCL08+WXc/LF40WDpHV0E1YGpCJkgoN3Y9eiQ/fW0jXT5aMlpwMlUucnQ9P1VETVNQVFdgI2pGJVZCM1FbNFY9SlpReUo/TUxDdHJ+VDZvY0NXXzw/RihHW31OU097ekRUXkx2RDxPWkM4dkolbVtAM2dELHY0MEZPK2p8Vm1dSi4+O0l0fE92PXR5''@;'; put 'put ''UVRQbl1UKUprekJHZy4kYSYoUVt+bl9YMipobTkyLD8qUU5UJVlOPHspak8+ZWNjbTJrfTs7amJ3fk5gQV9CIXpdRnJfcmFVc0tlczhDLlFhdFtHbnJld1hrW11QKXQ7blNBVmZ9JlRxaEAmTGFmOzdSPzxCQEk8c3RsQHlfaVYmRlBnKj1HbGBncC8jWWtXcHhuVXAscmJKfD5sazxybH5LIyFZ''@;'; put 'put ''O3BOKmRNTmJweyhCLHB9d043dzd7SkV1XkxuezRnOnkqM1ptX29qUXsjfm5AaFVsVmJ8MVE+Xm85W3hdJT1JX0cxPXwrSl0yOFgrZGRTaGh7XTcjZ3BIOWcxP2FWRTtFMmlydmtqM0soX35wW2oxaFQ1QFhmYD0zbWklIzZLNHx6fSVQT09Ue0V0JE11YWlILnNwR3d9OldKPjxgamF9N2V9JDsq''@;'; put 'put ''Y15eaWZnVmxsVEJRIlRTKkpdPlU4ayZEOXw1a3dzfWZ4NnpAUWx4cWsiIWE0YH5AKURLZS9UXVV9cnpXKD11cDAlYS5ZRjEsOmZDJk8/W1gxfT4oanZDZT8xKSopb0VESixsUG49djxsLHNmczVifnNJOnx0Z2lUVntaOTxed2ghYWg9N1FpNVRXbE9WOSk0YFNHflold3JyfUJ7amhNVSlkSXkl''@;'; put 'put ''PCE9Yz5xVE9+bE4oJj40UyE7VDwkeEUqbi9hQiI2ZmE8b3B9RWVmKVYmQGlSLFVDdD1dKDs2MD9Lai41YEskcjxfR3JKK1BWQGImQlA7OiMmWVNXLn59X3NwTVN6MmZwa1FDU190YGJFXVVTZClsbmhKTURMYD04e3xyaSNAUj1zP0JpezJwb0xwWGBYe1BBRjdkOD15dk4xT1VhP3kwQlppMiJz''@;'; put 'put ''I2RJRDB7aCNycUc0TDEzYHt4XSRQOlU/KCNXfigjZGZaI1tdQXlfLk1NJXMlQV5+THhfMnpzbFROemIyK2NsQCxZfmZ0TSJkRyMrL0xScyg0RUFWQzQsdlhhZnVFfSV1MmdhM0t9KlYlbjFCeHEuckNPdSxsaSErVGxLdnh8OX5HZnRxfTwlPlomQ0lQfS9UbnF0MHtOQT80bTtUPzUyPWJwVyhw''@;'; put 'put ''a2AkVnlSIXdQTFpZfj9UVzRHbzJjTzlkJU8oTF44TFZqaVpKNl1OXiRdQiE0UClSfDxZRHJEcWg2JnBxKixJMn4qUihbKFA9UztLOHtZemxnNX5bb1NvcXR4Y0lpaTJEMj05fEpXPm1aLE94PilvQy9HcjlUTTBFRT1XWT9UW0BsVEA9PiVibnFvJXlleVIrcU06eS5SQjAwMilFXTY/elJ3Tn0l''@;'; put 'put ''KDpOIT16QzoweUk1REB4SCRlSW90S0NPTTVVeWdmIiNHcTErYitbflNxYl8kZEVtLHxvMnxweyN2QSE3YSkzOm47XyoyUVpneFlfVVdienh8R2IhOCNebjN3MEZJfE1KY0ZjYV9mfSUzTihPITxeTUlfI1pmfU1qS2h+RCJnPDZwJj9ocXJbblBMRnk6fWNdcmgoZC9AeHJ0Z196U1B6PGw4cX1V''@;'; put 'put ''aFJLRCE/eXgkWz1kanhGSTNtIypeUztuemYhITMyRzswRS9RRjBSb24oU3I/RFRpc0h5L3c0dl1MS2N4Ml1wez4pXVhETDpbJUwsNlAxc0tLZEdQYHAyJkUhc3YwUSF5ZDpZXyR8ezpHUTQzbTgvUlZQWlA9N2g+OnJnV3dvekNDI0t4OF9USCU0cTYjPXF5b0JhK3IzODpuMzxXKU9qSnNeVmQ2''@;'; put 'put ''WWpPdFVsM0krVSgyKlUlfipYKnA1KXgxbFZmNyE8UzgwZU0rPmBJRCRURWlFMVc9bXZMSmN9dGsoemVmIS5dbT4jPlBYP2NEb3lrOEhaUipBMDxbU0lvaVUoQEE9UE5LXyI+RGFYPTlVWk9nXWZIW0RjeDZWWlkua1o5M0JYe0t+YFlyWWwhbT9JMldlUFF0fTZ5KmZaWUYxcCVwKigueHlyIVFR''@;'; put 'put ''SFhDOEFwdkFEdUtNL2U4N2JufVJ7JkJxbSpCSUVeVGN0eFJwL2I3Pmh+cTJEYjtVJUl8dn5AbHA4LEMjfDs/UClBdDh+OX5tTEJGbChBTDpdQSJ6Si9TKTBbIVR+MCJCe3NxUFI7MU08fElnNHs0JS5icHljUkw3dFN7bnBraTZSK1JuTF87Z098cX1ScUpLak1MdUsxfmFTdFthTEZCLlJXPjVa''@;'; put 'put ''SUJuOCh8M3R7bj1mZEU9LlFlTHx6JGspTkVJciY0aW5JZ1JII3VkQndEYl4vbltdV31WLD4xcXFmUmw0TTt5b3xyS0ZMZm1UYGJYbDFBRy8jaHpLbW8zNl5YMlpgPltRaGt6UkNxK2RrXSt7L2RCV29ZX01ZWk9UPChBJXgmdU9eOyR0dT1RJSlzcnlefU0vMUR6S0A7RHJ5dCw+PWp8Lz1nSFY5''@;'; put 'put ''NXYrQyp3OjwpNyZkTGBKQ3RvSFJZcnExW25DN1Foe1NNMm9uX0dgWVdgRUE4T35ac2VfRXlHaGJxaDdFQldFLn0uVmN+I15oM3xrTDpwNFk5SzA7aCQkaSU+OXtUdV8xZ3UmTkJFLD0kN0FBcUhCPGRiSzlUUTlLT1VUOH5WcWwzaih5R3dXa19QV3piaCpMJiVWZ0Q8VCs+JVcydWdZT103T3Jn''@;'; put 'put ''ck9BfSFse3JiP213cE1GUl1MOURbKEFEQnRUIT1Ab2F4MXk7c0smeVNVOj06emNDJSNTYlI2L2YvV1tWWzkhTEsrVFhieXBZP3lwKl1pay5wNUNZZSI7bTEkOHpNOyRrby5eQ0Y8c1NGM3NsUmEpUk8rfXlJSU4+aXkwV0xUdkYqK1IoRzV1JFlvUUA8OylLOHREb014OnwoYyhhSXhdJFFjNU1d''@;'; put 'put ''I1JeM2VCTkJZa2RTMj8jIVdkNyZCI159az9IQyRZc2tKOEVrdD1XIVNINFFATHdhcTlJUylKbWdsZzhxanhrR1Y7VVNgUCp1M3kzTmhSXW9wWixXQnc/WjROTUBpdnV3JFYwbHAjOHVxVEsoVFM/cmFbU3JePERJTyZyMntxZVEqSSI+NFk5VXJoKF9dbX47OTZ8fSh1QF5FInoxZV5idzo2VmMk''@;'; put 'put ''QiRMbWg8XVlydmtdJTpOdGdndipddztILE1eZGhSRnswRFZmV0tvIVtWNypTd00uXyZOcUYwS1EjKTJxQnMxS15dWi5pdnR7NiQse0lHQ0BJcl11QnteYChqTmR9W2orPiRKR2RSaDEkaXBQKz5hLDo4UU47L3RxcE1vOEBRenore1c4I3suK105Mnp+Jis7RDtkcTg/UVtdJHM5X2JKKDVjOzw3''@;'; put 'put ''cE0sbjhDaGE1fUBpWTtNTno+IShVX2toWyooMjFhN11wJEpxVHFYU1ttOntWTU9JI3tiY3lie29WKm5ULjc0QzMkRmtFYyVaQ29baihkUXFzN2dVKVFbTEpaM2pAeGZQI2hFciQ/OHltI3pRJGVCam1IRXU8LjZ3bSVIZS5ISVhUY1JwbWFNR19pJiozcyFXWF1ZQls6NWImdX4qSkhhM1IlKFIm''@;'; put 'put ''ck4ubk1aKzR9JFsyPStDcE9eL3orJVt6e2EhMH1HOSRgMVZgeXk4TVlGITk8dzo2ZU15fUp6YWReTTdxcSt1eGQiVSQ0bkpZXV9aVncxfkZMR1tMW2NOQnk6blMqPntuOiEhKUFLeCt8MTRxfCsjKFg+NDhIKDR1YlNyXzkuL24wNTVkcHZuXTNnNnYmWm1DRWxJTVF4cWolTi5CSEZzZTA7LHRI''@;'; put 'put ''PyFvITtnO1lNLykrVl59b0hsPiVgeEJvfCw0K18hMD5YJWJ0WEgsbC9EflV2SHlxPkApKEtnbCxsUzVoXXV5ODR8M3tNRC5Gam9qdmdbJSRZNDgvVUEybn49MF8yLER9X3Y6PmdzYEQ4UmU/WzMzI0pPU2ZNZHtHc0xUOGhMTU4rNmEjNnBaZzdJa1JfKVJscHNfI1R9PnI6Z3NsNGlfLEpIYUlU''@;'; put 'put ''ZUI3I2s4Y3NfRU4qeTZ0emhJS00zdCw9S1dJSDFKNm9jQjZlK1FqRXY1QTxUPlQxbXJuMXBfeHJPakVWL2UjOE8jdFErQG4iNV1dLyU+ciZuR0VTVWhnVVRVfU9nIyNbN3ZjeDYhI215KGdyMjFpSHcudFV7WW5IZXZpMDMiN1JwYUJwOTEmOj8qUlNvcno5SCxULGQ1K1khYGo7X1A7UjNdUGpa''@;'; put 'put ''YFt6YHQ1L1g+eEdgZGVXXjkwQCJCfVt8My47OUloU21JdiovfFNVNUg2Q2JANW4rMio0fks9IUJtOWslOVorSGp5cTREdzsoZmNUVmNtbzhXVmooczQqL2BZP2hvSz5NRkUrfCV0VjgpRit5RXJPYCRGIn1iWXQibigoQTNTcnE9dys/eU09UUtlSS9wUG06bywkW0U1bkc9cjRqfT5TTE1lVD19''@;'; put 'put ''bHFaeE9gMHxYTiR4WW1AZG9RVldjLy9vK1VoSCxobigjVzUjIzxrRz1eMn5zVWhlO18xd0tbPzQhSTBpUWZmbDclYzVQNmAjYEpDJkF5JlRecFVMa3RTWSxEWFUxbj92akt0UHcrIT5pW0V7TEhiKnQoKGFpPTBNYWgzUTAmez5rUVhpLj5vOyNtNSUlJHE1LjBBeW9+djYvNX1ycFJPND4zMXNB''@;'; put 'put ''JD1dQXVjYWtUM20xMihFUjZvVC5lUHJeO2pETU4vRWhZbl5IKzlDZkRBSXNaI3w1JT5fKzFRUytzTVJZTD0zd1o9Mm9mTGdFUSs0W0tnK0x2Wi5EXndxOlhEKHdmNDJ0UWc4MDVYaVhCN09pLCpafXAzflkrZDolY2cuOnU6KkBVIj1GYzBBSWpiSTpMdHJ7UkIkPSZtNF5vYVVRY2dLPmt+P1go''@;'; put 'put ''emNvPXpyYkZgSDFZODJ8JWtGcSRNY3E7XWd8TSU/eDRxNU9ULzNzLntNdT1fR3RoQGAlKUoyUiNMPmNqbnd3R3kkRyxUJmIzbENaYSlqU1M+SSNRJXJGSm5EcFglZjJzQSJZMjUsLl9VR292RH1jMGFfOzhOWF15UnM+Nll8SE18an5XbHAsamxzNzp5UjswfkhiMV0jW2s+VHY+aFp8Wz46R3VQ''@;'; put 'put ''PWI+Wzd4dy4pNSV2IW05fCooIVRFMEZjXTdeSz9PbDNUZURSJElqcyFoOGxyZVA+UVBWY009Mi8vIys+MGVybUBZeVo7Tm9mKUtgbCVob1l2OGlwaHhPJCg3dH4lXSpqbjNedGdMS1ghfExjUldVTDx7NVpRQTg7XjNbWHlTZmUkI2phK3BLLEMuV3JTPmM5N3oyei8xazozZmFKfSkvYCYlPkRn''@;'; put 'put ''KF9XWVhiVVdSKntJNy8lJllOT3AiRXJ+KmhjMyhXO3pwZz52MWJtZkBATTd3M1Uje301Li5xdXB+aVpvcSwwRD9lc1NBX3hZci57JWBUZyliczgmVT9pKiFbSUw+e0VyfGB0Ji8wTVdffFt7ezdmZ0VIQHd1VT9edWZCa2lSaz5PbHxSKz1zWShRP1h8RDEqZ2JbWHdSciEsOXQiTytPbS9TX0VD''@;'; put 'put ''cGkjUyhePld7RTtXWzdfKD58amgvciFjdm5gRF1AdiVyW15KMWMsNDRSXTE9TWFwfU1DXSghbT9wSl8uaX4leigpLDMmPlZtZC4oXTIqa3ZMb1BpRjEwK2FjNjA7dmhnYz4sOkhGOEIib3crT192JV1mfDZ2M3QmZGRjO2R2aDRkJF9raDZLUzpqKnBTM0hEVm1XdWNIbz8qIj4pW1N0VmcoNFdE''@;'; put 'put ''TnNlWnFqWDVqazllSiFwJUN5eS8yL09ZUVYxR0hpd2hdR2svenZTcTptKFt5Lig0ZlVyUyM2Mkt5JUhbaTYzczNlcnJJM2BwclFHcDl3KFpePFpSR3BPPVc6eVIsK0lFZzM7MW4qOVEsWGVzSnlLJmdNfiVDTTk4OjZ8JnRzfDQ4bSpkVmdeOE4mW1l6USpaX3dZTmQ9VFtbLFJKRjtJfEhkd3df''@;'; put 'put ''YD42RyFeMERrYSVJPUpEInZqP0Z7b1RkbihUOy5wRmx1LkNFfGMwfF5gKXVbYEgkfShiVkM3bFRkekRSPWk9LllnPnZnTC9BUy8xRTVKS212S2JqcDAkSTlmVmtec2VlS2QzR1IwRjB7Rl4iR0tHJmtaQW16ZHdxb1RqXUZqeSwwXnBCKFVJPT4/a0NbWjBhMihgfVs2NGpnQTNycDBjQzR+fHlT''@;'; put 'put ''cyEkLmchdjVgISYzaVFAVFt4dFp+cCRaVUhUT3dMbFJjZFVOOTpJQD9KX3V6SDVxUGkzUEFWSyxDXyR7MSwqMnNVTGRjajN4bihReSRTXWdMeGlLZ0s8ZmY6Nl85TEVlV3E5XztVLFt7X2wuWmY5PFpsR1pRflh8UTp6dSVkL248KCZLezNhWXlKSG9iK0lOOT80Rn1xTUNHP015P2BJQWtEJEts''@;'; put 'put ''e1QkUCFVLEFpPXBxdCZeMkhoRTVXWlVeNClEbmZsL3RgPjgjNV0mUyZrUHU8Y11yOT5YRUlBSHRHd1QyWnV+dSk1SHlCblQyXkNIdll2b3w2KzosbSMsOz1TPiMoWylgbVJGOFlGfk41JS9bPDtfRSVUdUN8JTFiVWVoMmRzenpDdSlCNm1hWU5CdmA1dyUkKHdIczEwTWAkKSkxPGoxXTQ8P2dx''@;'; put 'put ''VD1NWHY+WENoeVhAKDteeTxuS3c/TmshW0V8TFdCIXpDJn4vS044UktSYH0vaXJPWk9sUTx5PE1sSzwuUFh9TDRHOUAiKC5yVTFiRVFCejNZYU4rJCtZTVM8JGskP0hES2VRfipWcElLWCpGMDtEdU91dkdRUTMsUmRdVDIzWWM8Q187KD0ye2JFaT53IXQwJk9FZnpdTkJ+LzAveygoOjM5OklH''@;'; put 'put ''aCV5VTouSiklZzQ9KTpday42aUN8MnN1ZF17VThBbS9mfTVOZzs3Rn0kcXdoTHgwNGRycyszcmt7O2BySFVNeHR5YnpgcS97dGdnfXZAdzpvKSw8aSZxcEkyM0Y8IWlvOT88T0UzTU10QzVgYk1fQzEvU3JML005WnEvZ3NSaiY0RSpQdCx+Yj0lcTxhXXY1NzR9diMiWWNxcihxR1AkLHNxTGI+''@;'; put 'put ''ImZPdTtjSSNIWHI4d2d7cVd1dkZuSDB+cV5ZIyVEZFtmaCx3fil2b2ZZNkdLITptVHhCMlN5IXdjL29OUURGKS83dnssblgufjNvJV9YfFN2c1RkZU54JlJ+aFc8R1tFcl1ea2xXNXZvSkVPIVFyTXVqKGAyfW16aU08bkxUPH1mOEcoSHNNeS4keHtFekt1W2AuVUNsfHpTa3t8cyQqSUd4Rjlt''@;'; put 'put ''ZFtHNk1dayVbbSp4ZzA9JnY3Pk04NXVOcUdvfWlSfnYzYVBCKV1aVUx5MXJTanV7Yl1Ofl9RWDZnfmpXIyU+Imx9RUhyd3I1cXZyNTA6Ym5dOjBIKCI2YGwrd0csbDp7enBQfTwzOTwyUkdie2hWL24hez00OSUkLmQ9JFVgVGhJe3wrN1VIYS4lQTVeZGQlYm57OU83OFZmdU56VEZjUk4hNFZA''@;'; put 'put ''UjQ0eEcyZF1VMD9JYzxnKDYpdC58bk5LXjZDLE5uZjJYZS8/PFJWMn1yQzpNKVJNPkV3RWFCX1dgZWNrbk08b0JNUiZQdmRsYGQpM1hMOGZteTYhciJVWSk1OHxCXylRcGAmJCFlZix7RltDbzBwdSRab3ZKNkkrKlZ9c2wsKnhtQzkzQnUrOV43ZiMxJCteXiliN2pXTnwmSVNaTlRgfEtMZ0tj''@;'; put 'put ''OXksY1NiRldUJDorN2RaeGojNWUzZjIqQyhzYyhRdCxOMU0jay8kUDBjcSQjc2QyNn5qP0dmKExDRFJwPVRgI1dAPkVdcipETEQ7N1tHV2tNV2xLTG85U2lRW2llTnIue1crajw0b0UlYDIuIVI9M2hlR0kiTE9OZ346IihhcmlwVW81ZSI1Q2NRR1djaixWKjRpPUcmUnZ6RzVAKj5kYCpZM0pR''@;'; put 'put ''RD1VZCtFRHU8RCp7TjxySF8kQWQzWX1XZ00yXj5CY0RBbUtsY28sLElbMShNSGV3OklmSjpYTSVrejd7V2RWRTpzQFdwYn5RIS9ZJip0e2tBM0k8QCxRMWNgfUQmQz1mYENWZ0ZrdWBKZi8oVClbWlNGKTUrInsien5QeGxxRCtjR0xwa04vOmVzN3xZWGpuSmtMNHtJK2orP2hJPSZzb0ZHIVld''@;'; put 'put ''VCM3OWNbIyx1ZlFMZW5zJDZwdUlfQFJiR3E4JDRZVERveHh8IWIyU0BTNFsifTMwezg6Y01acn00eHRjdEhHYDJRN2dCfGNzSHdgRUs/azIxXUVmbWp9a2JXN3ksJWxrNHY1Ii5tVFRYNUtXPzN8RFAhOE0pW0UqXXt1PnN9KGw5I3g9PXNOUGZlbU9JZiw7YWQ8d0NwaSI3Tk1JK3Moey4vI3lP''@;'; put 'put ''QnxBZm5pVmxTWmt5NjxHTmBedEROSCxSIUhiXWhyd05HWExoIWREZzY2VUEoLkwvKEs4JEF1TFF+clg1YCF7N2pUKiN2KXA4dDE8PFJfLlhic2RpL1RlaHFlcVtOJmdOJWJ1elVGfTk6eipCPTJRTVthO0VkOUJZe2l7ZXZJOCFuWlNQfXlfaFJ2ISl2UWdbK1thJHRORCtKITp1P2hJV2s9VSls''@;'; put 'put ''QmtxPi9FZnN3YStGQEB6ZHVML0UkbTlDO0k6M0p7SEckM3d0ZTxwckBrOFNtbXxLbzg5a2MibTFmXjZdUXMlJkdnayN7ZC41JVI6aGB7KGA5NTJRJERRPy9iZjcxUD1gRyUvX0JeTEZhZjdbLHtQfCpJRy5GJTxtcHMiJiJ5M19yIV02TUJoIXBBX11DfVBfWCksRXpafm1RPyNsLmU0aVkmKnk2''@;'; put 'put ''aGhDJDhhRT1JdFAuPzsxNDdbaEFFTC41aHBLP0BTckQ3IXBIK2NlbDo9KCxoIV9ReXp4dl4sI317QnpAdG07bXNIMXRrPmpzTDN6KGNiIlNHPnBuZyZ+cW04SFZdSyVfYnVIa0xdKkRHLFNYNlVNVjtjRGBARnJsfWkxcC5EXUk+Q2ZvZDNuS0ZmQmVNMGVLdFVjKnt7QF8scF5QcHxpZ0pSV2As''@;'; put 'put ''dHtaJFtDKTBGMVpbeDVdNE14WyYvQzl5eU13Z1ppIlUrbDtPU2YxRGl4PFl5OyNkW1piRyEvTHVXelJ4MiJ8anJncywvcGouWmg8ZWlnLjAyYz9CO3RCWU5nXzRBNTlHcSNMcG88S0lFU2NXTztRdyE1S1FYYjBod3E8KHZ3QFYwPTNtKF05VHldMk0rZTw9aHU9QHJfMjVGNioiKkRWbkJjbCJD''@;'; put 'put ''ciVaP1lDakgzfWpDMTZ+TyguYEBPZkhZUWdFJkY8NipHMGZoaXt3bFcuZXhYdnVkLjx5SEtVLD03UzZjeWVkRFZHeGhLa2pVZiVPV3I4KFpzeDJaNiEvbCIkUjNPfHRTKy9dRiZUOkc7QUdZI3p6YXB5Km1wK25adlBrPDJnVj15aXpVN155KSxVO35JZk56QzVbe3htZSNzI0ZMaXU+cDN7QmtT''@;'; put 'put ''Q2lVbjNFLklpbjMpeV0xOVtJbiF+JnpDVXRXLHNYMVR2fD4oO3EmU1l5VzQ9KVUmJTlPYkV4ZSNyalpYdjB3M0xmXzkyPWBCN0NKX0FuVCRyeXpbRy9zQlpQfWApZXg9a0I+aHdfKTBHNnswZmAmQiJ2SGFfNDBvX2ZFeE1iQFdrMyNBYnU/LnFgYi91bTBvdHU8dS9kVn4jPTldbDxMUGBJTnAq''@;'; put 'put ''cy53Oj1afSs0QCJDTVlKUiN5QSt3JD90RFM+N1FgbkowbTxwT3pJQVtENFttRkQvNTt2dClGUmFhRkg/QmRuaWo5JU1UOSYyUyMrT01fREQzcXUpTT5DdC8hdTAjfj1ORz95aWdrLzNOWiJQUzo2UEZ1JU5sZFAvMEI2ZnNQdj5ARk9hJFBqdX5Ud3JbWE0pflp5bC9pIio2czchZ2hiYT0wOUs2''@;'; put 'put ''cD89enZwbkpnXWlEKXtwK1EiXmsrVjBZIUFrWiF2aCgzUD89Tit9el5hMEFHKFFUUVhmd0NGdyZiejNqKjo/XSF0I2lRc3dFMXJeaSlRbj92ZE9JclYieiF+aHR8ZlQrMV4yNlFJMHlrUX50VzYwTUgxb3NhOkZCWS5VeSlKayFEe1Mqa2ZDRz1eNllyVmc5fHpCRl1mRipFVj1QKU1fbTs0fnlD''@;'; put 'put ''bjI2NVhWYmA/SDt0NmpxUTR2MjQ8Sih3WDx6fl99Lz1wbkc7VmR2Q1pMaX1XMTlFTTx5IUwkVTwkaG4hVDJqUlZ6SzZTITYzcC5lQEVEaFMyYmQqUV15Kzh+XXpYUzQxJCQvfjUrYC5oWURvVnJyM1kzci9RW3RTN2EmS09PQ3JhVypsPEJeUiVLL0JhNDw7dzJEMlAqeHZwOVFLY0QzRlI/dGsq''@;'; put 'put ''OkJkPVtgLE5fPnF8VFlnJktrYmArPlh4O0Bodnp7O3EkSjkpN2RYdCpEak5vSUsjYVJYSm91WlhlTGJaLjspOyI8cm9tYTBuI0didVl5dFNraFF3cFBRRy88dSxsKmVhWUdHXT5tXWYqIzVJOHt4U3tvYSFkeE8vaUojZWV3clFUX2dAalJbb2MiMVlXOGZoSV9PcDFscnluUSpuZmBMWnZAUTtl''@;'; put 'put ''SW0iekNLcW1pNnpMX0QsZkZtbkZHe24sP3F5cGJ0bytEcVssWVFNN0dudHV6YTsxRShTdG47JCpqamt4WzVdZDhNLFdaRmpzQiFjTGxZRix1Rk1+L2soZzZ9fU04eWw/eEp5WG9tUiN0TVZzLlZmUCpxUyhdIXpgdV51I0BaTDUkNGl2NmBDRj8iaCxVWkV8UXtEVHJORVJrRTMzYGY8LCxFUz01''@;'; put 'put ''SSFAUDghITFtMTpUNiRlXUoqYEROKF5QJVY/fVArIlZ2dExYRkJLImVWNmUjNU5SZHMpKFBQazp4entLek5vPywvISRrUzBgODJmbEJRYCo3cW1KdGpRIlo9Okl5NH1yYj4pWHxlT3BnWmI/REUqckl1MyF3Jn0kTS5nblkyWF8/czwzfUA0QHtEd00jUSRlOElUUjRxOSpCK3BNc08lXzM2TWsm''@;'; put 'put ''MS87YVUlPDxJI3dhM2ReJmM8TlRVOV5nNkxHbmtaXS9wO0BVIURBO0R0ITE8ZV4zbSpmcTdWL0prVkJqa2NjTE4wXmt0a28oJmtWRXJ6VXZHS1k8MyNoMWElZ3Apa19hXmkiXnRwRXxOcmYuYV08RyRpQkY7PXZXXy5zLit6QEtFTFFqKF43Zm4sNGRMYH5uMGJvI05tMit7ZDA7V1NOXSNXYncv''@;'; put 'put ''TG9XZ3ovcn4sUkxKPTBhNzs1MDVQdV4sLzl4JX5IdUdabzljKk1jKzNXX1pvTVl2eDslSzdZb3RrRC5zeFU9ITRxWUtSRDFQWi85KE9xfm8wYywlMCl8alpLZG1NJXQjbHc3fFBOWnpRejUkbnJPc2QqRFY7ajNqcmFHNiR3QUA7O3U/LnwkLkY0LmhXZH09R3pzbjB9LnBRfWVeXTYrUygzekhL''@;'; put 'put ''NittJCpdS3B3Z0sxemErQDZuWEU8bzhCYlpHQnsqaHJCeiN6IitldC9yWV59TFVbZyE+MFc+YCp1NGR8cmtoTTRvITg2cU8lcytNcmc4KH1wVnQrJWQyPkhsTV9zPEBmZm9Ka20sUlVMM2BKMjBZY3NpMHNFVVN8ey9tVXtLS2VEI2B3bT5BO3RQY0RnK1lhImhyRlhXRHd4VHZzPitmP3xzVndQ''@;'; put 'put ''W0ZTc0hgQ3l1QkRvOlZ4UjhUZEYkSShtTyNbN1EmMzoxUmw3USJPe1k4L0padzxmK2RdKV4qd1pXeVZGV11UU0tKNzFSIjBjPUdHUH0rUjA2RVdTR2tDTnw8UUY4YzZxSnwkYHpadyxlTEs9T0l7PS9vSEkpaUkjJm8jY2xoOHQ4KGlHaHdlRlkjN0VBUiV7c0AhYmlJaSEmeGgqYjE3cFMhcW8+''@;'; put 'put ''XWtZfnJ4VChzfUJHeCZqIyMoeD9fIzlqd1JBcF1acnVAWHVPRj5sMnN3RXh6QTZDfkxjXT9dUyVgbjY3JlRdYyp6X2VCLCUwRF99UXM4RXVMXmY4KTRbWXhDWzR8eCplQyU8PD0lejJEVVNoZHs3NnB6VFJESmxyKWZufGBFYEp9eFF5OlIxd1lJRG5Ka0IqREh3fHg1SUs8Om9gSi8ueGdzY09v''@;'; put 'put ''a0RPJE8qJEw0fTtmZkREQHlwZndFWDp6SHBQbCxmLHtmYTVgal1lUnM+dDFMTDRfd31xT2R+I0MpKWEzb3NGYyUreUVDM3g+PGhnO0hINmhZbzZNRkoxNnYqQCl3bnU3WiNTJHNbWW59V1g2eypNfkZQPyt7cVJQW2ZzdDs+ektmaGNlRTZNQEhQXUZdJD1JdlNxJTwsZGdVcmAxYls2WXhXKztD''@;'; put 'put ''Zy48KyYwRllyZWpsJT0oJHdDYUNgcHhpJUw1akBlJVpaKklEP3JzU214flhtamxVaCk0USt1Qk40V3I+SS42IzgzNFgwNl4lYEdFRnU2ZSovRHVxYXckKUtAb0dNfT07ZHdVZVNAaj8xeDQjcXJxQkk3ckR6KmhCLzd7bDNbXXpoXSs4MS51VGFfYy9CWjBYIkA7Tk1dLmhMaWQxSEB8NCROKVts''@;'; put 'put ''QFYjJiE+S2h9UiNKfGFKPEA/LlF5Ljh6YGUvQVBZNCQkfH43cSk3TGFlSVdnVnh+K0FfeEspdy5ETXg2Zjc7OzlTJCp5YDFiIlpCMmtwYVg0Tzh5KFFrI2gxY1ZfTVtCO18jM3kwL1pNNXdicD9dI0svYj51cjZSNlJJL340OVghfXhhO202eXZGaF1SPiV4QWtjbUU3ISR5L1ZAeDJbVWg/TzVI''@;'; put 'put ''RXoxV1N7VWNjKzFTM0xgeEx8XiljP0FAKzQ4NF5mZThBam06T1prNyM8JTo4dUJEUj4+XXZ8bzoxPH1mMkxLIzZXe18saFh7QWVVdzhHS31BaGNnMU9HP0RZemo5V1Y5fmw7OCMvZXh8WXpEI3RobVA8WUgyOzNnO3Jsfl92PVE1XyFaYj51JjJISDtAZHtoPGZ9MDpEclhhRCp8ZXEjWzh3Mj4y''@;'; put 'put ''W1FVdXQmKVgjYHE4LmlgO1QqPSEpWlc+ZDZIO2R7VyNwTCV0UXdUYWozKWsxWShRJF1gTjloeHs/QVJ6YGtgbT5OU3Qhe0tWP1txaXZ0VltNP1Z8PE46Jl45OlcwdXhHXmkzQVEuRyltPHFvYT9BV2E0RFVkeWpZSnJaOExTRDxDOClyKnVkKzwka0BoRn5QZkQ7TDpPQ2xTaCR4cCo6Y3RJW1RI''@;'; put 'put ''VWd2dkJSKn4rdENTVEJDZGVzaWxnekhTaisoPWJ5Z3YkfG1fX01sZHMwIi9WWCRpU1ljN15yOzQiR1ksa3s5MTF9MUExW1EuQH0rUHZwcVZ5SX5qVWJhVXMwVUoiIVBKNUVrQz02fno1fT1NJFRqZ0Y7NzhuMEMiK3ZjfFlKIStVTCVXN3tqP24pUTRmVik/eHg1fV8vZy4/U0cpMTshdVtIODdM''@;'; put 'put ''YVJTOjdNbntnNkA/fmxiQ2d9N0MyaHZ7fDR7Snk/JCUkWktxJHxjQHJAW3olJUJRSCkpPWQ4aUh9V3UuaVs0IzFbXntgJEBJIVY2IyRMOEdTUSQ/RSlsNlFrKS9PSl47UnJEWmkraCMxJEB8QihdY1pyWCIraTpONTVkdmNBRTpAYytpTDk8MFpqflAhIyhtYCs9XnIsYlFUd2ovLlFlTU9WJn5A''@;'; put 'put ''RzZJdXBiQEwwTFhjZD5gUEpQejB8TCYkUnNzIzh2VDAhYWpvdU54JGBJclNAQmN8aFlzR0xjRVR2YjRuWXZxLzlydm8lJH1oUHNJTVgmUGtXfU1pOWlDIXhqQ1hqTGFJa11ldFsiQ00+MnhubCtuNn0hdkA5O3RiUjdJXmdgOiY1My8ofSFmNX5GKC9nLF0qS3lYViRLI2pTWHR4UXtPPilBVDJd''@;'; put 'put ''MXw0c2tRQmJJbkw7WCJxN0hidG9YdnkxUlckWnNMWWEkdnoiKk8uey98TDtkInksfjh0JFclfD0oOyVFVih6Omg9NjdXbHludkJgajRpb0M8PH4zKzYwI1BaNGB3S3Y1fS9XSVpqMnovKFBTSSJeRnZOX1ZrPjhWblQiR3xpKyxTVj9mbTpOa2tPYy40dCxgbyZpJjxnaCl+YjFXQkcvKVRRajJm''@;'; put 'put ''aywpMiJgZ19HdEIxRTxtKis2ZmxJeVl9NnQhV24yVWM/PGFpTXRhYk4zb29fNGY3WntvSiErOXt2bW5GWHU/SmUoUjQqcUIxQCY9aGclcnlDRDNMbVhwdXpZNCkjK3dKe34qXkd3N0xJTVtRQmlyYz4xLmchNn13Nyt7KEsyQmleP3dHTyg/IyxLKkpTNj5dcTdPZjhZcz5dNl5LbjBbJCtYQkVC''@;'; put 'put ''Vyl5RFlfPWtmTF9zVTN2fk4kem53djVrNDNzcXlAdkJuaTYsJihAL3VIVzIiK0U+WGJuMyVdIzFmKWZHJXs3Mm5pRVI7L1tje1R3S1Y+ZUx5MEh6MkV+cUpRJG1yJE1WKkBRVGw2W3U6Tl90eH0haEdqUiE9JktPIXlDLHo4KnlNY1B2bW9TY2g6LGZ2ZlJdUC9EOzEyV2xMfEZac2Y/YUpDNHNA''@;'; put 'put ''Y1FoRVJtbihyQzAuYUJhR1AmeSpRLihRVSYrYF5iS1U/SWtrJSQlZnpqZl5xbis8WyI1NU5CTTUmSmw5c01qO1p6KmYoK0NHSDZYcDRyUkpKdTBXQSw6TzxAVldkYjhaY3EsTkdiU204KkNyVnV4QFJka05pRGJ4PV96PE0+RS4paFchK09DQ1skeTQmbipwS1lzZHxKYTBIR2BXITp9b2R4UFZa''@;'; put 'put ''VX01NiIxNyMqMiwzX01vU1FCK1lOMnFlO18lcUNUdGg8fiZ1SSFAI3t4V048eHw9KUB+QHlnXSJ8UytzUWFJZDlENytaSks4Lm55fn5MbGVfI0kjOiF2TVAuez9PXU1McldSJnFFT2p4ckx2Q0RUUGtNLnxwM3svS259RWc/Z145USQjOUB6b3V9Y1VddER9fTt5eywwNXRKY3k9b2g3WSkwO3BB''@;'; put 'put ''ZSE7Jl4jMG5SNzR9SjtnanMsVU5eNF10fEN1cGNRbWBZU0ozJSkxdzQuPk99ZHwhV08rYGh9eTFDRFJ2fHoiKWBadC4vM2hSYHA8MENqLFdRfkIyQXlAKjtpUXU/KixsaytnKVpLPEk+Xys0Z08xJXJHc3VRQEMhK0tQakRpVVNBbkdqP1QiaFU7YnxaREhQaTJdOTooYWd6ZFQsVVohfDZpOGxA''@;'; put 'put ''MEhkRUJxWCtYQHd1SlZ1TmZeank7Nj06aVhpWWMvLywzKUlLTz57Rkt0dEdxSDMoRGRlK3pVdEw8c2pPMkIjN2c7USgoNyxsRFtdI31kUFNOZGE7ejwoVW0kNCxgMTUqeFdOfUs1NSpeLkM9Nig2UHV9LHYvRlNTYndzaW5fUT5lNTo3Ik5qLDNCQ0BMQDphW11AfkBQUC9EW3Vlcn1Xd2hgSWsy''@;'; put 'put ''Mn5WMHEiNTRaXyI3JVJdcjNERGgwTS47JnZzQHU8XVNCeSE4c3lbUnlKdUU7aDdaSUlHaT9oLDlfZ1FQPGo1dG00ZTJacGoqMlUqSC9wRmFUfmthKGFLISFKQyQuVkJGcT0jbFtxP3t7clMubV5pZDx7anl1JSZ+Nn5NUnpVMnVAIT5neCJqYUZ2PnVPUHxaWmNOeERPSEAqfiZTITVCcS97azBl''@;'; put 'put ''JXlANWhAYGd4ISl6MiZvJC9eTWApNShqLCNMJFUhaj4oXlB4R0NZNGw8dSlyNlZNQE43OXhdP2UweEw3Vi5qNnE6JXQ8SEt9V0M7VzZvQDV9W3RJWVFZIyFmKSovJCk7L0ZpK1NqM2JLQHZsMFYhal0wQn5bTTJgPEt3Z1BqeEBBX0BrVHVfKVp1VFFZIWJ1d2ZCZC46U2FqbH5QRkU2T3U9JH0h''@;'; put 'put ''cEpkL1k7UlpLdjtyczJkSDVSKUN7S1EwYH03anQmP3wvd1s5KV8rcHxSeVhzS2koST0zOE9jOTdiXjNMWllUdFovZl9bc2xXM29Be1pAT1hUM0dbe15mI3JFbD0zbyFXb29gcztfTF8uKn5IOnhydTl6R2xJbVo3XyNTY2c0UTBfM3EjTDxbdUVzWXBnUF4pPj5+RHlSP1A6aV89RXJ5aXlVPT9u''@;'; put 'put ''VUNWXXEiaGtQXmtUdiJ6NXU+bjZZanBhTiJQemBxaCVIQldRQ3JfeDZgPE15RUFwOGkwKjBRfjtoWWYrQCNgTClnamdjNixnbiQ0PlYoO1k4MUQ6KiNQTjY4WXFvLHkld1lROTB3ZShUR19DIk5eOVJIQnJMYzwzSVR4XXU4XjpGTHVLOSokTyEoNXpRZGlpPmxzdHFkLG1qan1qXSlwUDN5VFZz''@;'; put 'put ''ODM5LGt8WjAiVygvcDdOeyk/XVRjMjQmbFhbPUI2K1llIXdrNGk0fF80Q2lDdS5JZFJzVHVQL11VRF1xPipbImlXVX09e3k8ST9rN0FvUmJuNHYjbSs1ZUt2cyo/fD1SeTVqPnl3ZDYhTF44bkN4QTxXYG1oUHVpTFRYPGt3TGYxKC5aaVVxfTB+cFRpZStgeiNsUlNTXm9RW1FYWkl2K0Z2QFEi''@;'; put 'put ''cGgsZkYsVWZZIUd9R3coUS41UGtSZnNyIVQuWysvSCVsLz89aCspW0sweCpZKEY3cTIzc3ooKzFNKHg4Ki54cUxFajczRH46Wi4hPjllZEFQIWssPHkqez1HcihPamhhTDtzXTt4bnExIzA2LDR3SFVybGlkdXArU09zb3coK3JMIU4sZXFWb05mXXUwfVVvZTtELEpqTE46NTVibyVzbipxfElB''@;'; put 'put ''M28uY2hNRFB1VV5rMng4YkEwSWhgaV1nR1pbOlV7c19yNjJDd2Y/NlB5fD1dVFVndUxIOmFNbj1sR1M9JWBiJH1RQ3VmRjVSJCh1cSxbNlkiUF5PbjNWJHN4N1VFYmlIdEFFZnt4YTMyZUhIM2dIQGthYzNKKiwoNnl7fGJAIT5OUylrcSk/RSVMeUQyWmY/KUcjRlEuJkpjXUJMK3BTMn5sc2pp''@;'; put 'put ''WjRfUFh9QH46Ukk/cntwZ3IvSlRUNEd5JElWSjxSMTlvQSk/QmI4WHEzc2c1SHFUT2FlVGBEdFFATzpfUVcjRFA/JXpNRjFzKWBjdzRPaCgsfUR0YHFSQVU9YnZWfjNVVTQ8R2kuQF42UTgiZHZYUyVQN1dlVF1fMW5LUiJYVnArciFbXn0rUiU2bEdrJFdTP0kyfG1NOl1PckhaPUwrWld5ZCN4''@;'; put 'put ''PmgqdEVrc0lPLz48VmA+Q29gV1lXbF1UTSZKJnF7Y0VTQD9WMGh0UnQrRlVxYE4jfTY1ejp2MlsyUWVnbCJRMD4lUXxWaT1AOHFYYTFDOnZJSX09VX59d1lkVlVmR2FsOzMuRzRgTDxTeVY1XiQqT3FTX3Q8OHhAJSl+QDpFVkglUnUxZVZJayt4e1RHQzdFNl5aSFVhWT1DWGx3STd8OzFZfDsi''@;'; put 'put ''V14lbCJCRUZ+YiNweCM4eDs9cFA8V0RsQU40WSssLmZLPVh+MD5aU0lbJC9MWk5oeHtAO2tfTTBoXWUsdFtYYGkjP25aTktqd004Izp1TjRMW1AuRzcpOE9YISl3LEh3Ijl7O2FTXkEqOmBCXWdlUnIvT0VeTS5OfFJEfCklSjRlWHtDPSoyaHgzNFFGUWBFVV9WJk14aWgpUzdPek4+Yk1zV09q''@;'; put 'put ''cVllPFpCTHRiMmFdU2I1ckdKdnd5Wk9HUF03JlE4fllUJGw9K3t+K2IuVyZaZUkmPXsvITR8V082M08zcjY2aSlyaTZMWjRxN2QmfVlZVHo7dF8iMF8mQEpUNkxoclU1QktaQU5JbVpmST9WaVM1azYlUi92STElM2paRDg3VmBrQ045P19SZlk5YTIlfWgsI087V2c1UmVCakxhcUM0UXs/fFZY''@;'; put 'put ''TCVfZHg1b19WR018R0d1Iy81SmJRSi9uTSl2IW50MzxCLm0heCx8IUJlRFp2KjREMzx1Zil5eS9xMkUmbm95KHJaVXFhSlpUSVVacE5jfGghLF8hYig0M15EbDtYMnlQV15nanJvTzZLLCskZ2crZFZmJSNFc2xYX2g/O3NEXW1ecixpQ05TNFIlJmwhTUUmJX57OWRBd252UWIuKk5EM2hiWDc8''@;'; put 'put ''VktjbGRTZUM7ZFIsIl9CVWY7fGMkNXBOVWJAR0hganpbZTwybjBdLihIeFZBTDt5MltbXkgvX0FhWk8/SXNfdFc1Q3drc0JnMj0sKEEhT146TDtCLnlIPDBAOmloKmNfLkN0JSFTV3huYHVjXUwoU0NXUVo+YTkhQyQ/dCtXb21pTlI+PV9oZkl0OyVROjdka3dEKjY/T0Q9WU9haj57IihIX1ht''@;'; put 'put ''MkhZR3U2T3gyQT0oZG9rYmJRSVlufmxWcTdlMTdHdW1QWyx3dGh5VWEiaWZUZSVVXSl9a1hGfllwR0NOUWxgdVJAV2NDTnY/I2lDTk40ImdxVEZYPHpqQ0R0cSguQVRqQiFNendPI1h4eWhQYyIuZTVQQ1B9czJ6MXVPZWZTQm5ZRkQmLysqUkk1WWFxUksiQWNDOnBpeVcxKUdZNi49LEdYOVJq''@;'; put 'put ''aURAdF1WV1UsWlF4IU0vRXFULDFJIV4vfHgpWSpRZX02dl8mNDhxZmJJeiQuY2JuNVhiaVNDSF5QXlZdRFI+Z2ZMSlV1NDIwZDNhKVRFPkc8MnheQyJvWH0/UXEqZDVzO0RJUTRDWz84I11hPSJPYEslfCYsYTt8MWR9bytkVEBLWCk9aDokMXEyN0Jtd1tMWEY7UCU5Ky4+SDF4JVFeRSshNVJ6''@;'; put 'put ''S3F7RzZ5TDFVYmhQWmZ4YDl4OEtNP2E5PU5qMjg/UDY0PmViSk9OamdZci9yUT82KDgjMko6Il05d35AX3NPbnQsZ09ke2QiVz4sM3tNREBCWTgrLnEiR2EocnFCallISzt9bjV6Ji80OmhUPFlkQkJhTWMlRSxkUmJCKW8vMEdLL1Z6OXY5dk5sJSszPnUzT3pjYmlobmEzc2IybnxmRXs5JlA5''@;'; put 'put ''cjVhUCw4Xzd5WUopYmczWVtXcHVoQ2hbbm8+Z3RWPk8oO2MuQmA/aUY+WiQheTg/WTEmYT8kd2A1LiE6elMhYT5INnBjfk1KOl03ZVFhPE9iTVp+KV5IXjE4ciQiJUpVJnpgRzBRcjJKNVl2ZmgzJWpEPl5dYVNsIyN8QztQYjJvJnY+RnRSaSNIV2R2QiI8Izhmb2lQdFB6YD81OE9lT31wUmxl''@;'; put 'put ''LEEpc0tLckx6ciglVy4uKnQrOlEua0lpOVpuQ0IhbDBodnAlXSp8YGc0PCExKj9xTWBeaDZYMHs4fHFVVDtpbHtES3dTeX1Ccjh0d11TKj12USpSR1FHT2QrVjhIMVp9XVdIO0hndkQjSDxhQC9IJXhMak9ENDcmNm8pOUxjKiI9SkMxSmFOdElSOl5kYE5PZTpLbmtXcW5VRVRMNWpuLm9McVo7''@;'; put 'put ''WDpPLzk5I0kuRH5jImBtfGY1VHpDbGcxLkErUnR5eXRxUyYqM2hMUUN7JGs0W0N9VXRTQnVAR3NpQWIpRCkwOWxYWUdbTjQjVWwjSGZUdWRbTVEkbkh9WHo1bDlZMCshOztVJHM7TWJCR2UkVTZ+RlN1az9KMjkhI1sseDtoImBSPy9mUk1uK1JIeWkocWYrN3Z4NFFqVk96aj1MTX5CUzpdZTlm''@;'; put 'put ''WEphMllafis9KmtNZmJAVkl7eURndy5Mdi9aNEVUSmZ7eER7VzR2QFhyREZha11AfEtUVnsoWjxJOk0+MVhLXipbYWEhJSkrRSFQdnJ2TDFBJCRdVyNTVG0wZ1FtIlcibDlqXzpVU3x9Xj9gISlaVjMyYUlxPmJmd3pdXzVVZ2chZyMvcj1geyZOMVh3b2t6XSp2LnFOSzEhKFRBa0lDWl5nMTFx''@;'; put 'put ''ODwlZyJwbD19O1AuXVBLKVtJSTldM3ghQUNVXW1mPyRlSioqU0tWR1Moe09PJlU9Yl1AfVpUPGY9WXhFQHgvOC83YE18MU8kVVo6JHEmQGJpRkxefWoqS2d8U3tkVkF6OGZHTn1NNUJSZW1qQ2hYIzckQkNaa3w5US5PZ2AkQSpALiFsSjdldXMrVjNhdjwoL0BDZSMkS0JdJUJxSyMyJnlaI1pm''@;'; put 'put ''R0F3M2J7JTJEa3l9UEhOeHUmcCpKTWc3JEFlKE9zR1UxOFRLRmhwXihrVTp3bGNZVGcjQDNLfXN9ITF8YCx8dlFsKCYqaS56X1MyZ3ZVIjNbJWhJLDk9Y2BXY31xQypQX05zVTtQQHdxYVVtbExzdl4mJT1eMEwqJk9paEkkV3lYPGAjQ1tkRn4yazc+VWVDbjFNKVY9IS4vWjBzLDdRRkE2enop''@;'; put 'put ''QDpbbT5UR15BZEdtK0VlcGRbKHhsQis3L3dRS2o6XU59JmQsfkVabHN8cWMvVllBM0xqRFBQN21nSXcuUmRFS3VxPXJPOk94WmIyaUJJXSU5OTd3dDowLjRmWmBFdi9rUF9sTHYwYDwwXzFLYT0vb2NsZCpeTHJPcTMsazJ7Iz1bXWVMRTNwO3FJOjI/XjQ4PXcpaz04el99UmM+W3dvS0p9Vilr''@;'; put 'put ''Q1QvNEk7PDhSSVJtNkhzdTRnPVlqaURxWWdJRCNTWDI6ZkpaTGNhQ29lc3tDQWlHbC9dUm0mU2twIkx8W0FsMjY2UWhiITxda296Rz8uSDdCdm8sOnIkMm5TW0pONV1mRTpEIWpDPGN1ZHhCRmpjTlFyfFohYHMhTnxAYTd6OSkvNHpnN3U/U3NFWV1pMyJNeStoNjApPilKXyF6ZXhWbmQ/WXhR''@;'; put 'put ''U3lxJFN1Kz1eXVhSUGUkayxPdml5cz09WS9VOl9Wb2pQLk4uK15dVTpHIWIhJTFzaXxwQVR2UiN9OSYpNH5dRTE5UitoV1M+ZmdJJCw5NTt1flVIeXhCTzFoKFo1OzNNNlcmX2spdUZpOGtFT1pKbksyc1AzZS9fY3IkYVAkWXgyelczaTVuI2pqYHJReyQydGpBfmBJNzVKcTwzbjdXb3I2WXZW''@;'; put 'put ''ZSxiY2FSfDpUXTZJejx4JUU0fE0ya3NjN35yUVRIOSFfT0UyPC5kSCZXUng7PndfMH5MKlU+K086KX1hVy5RSTl3Pzp3bGVnPFhRTWRCU3BYaFBZQ2syc0x7a28wNG8ob3FfLi5bUG1aTGElPDQ/bCM0QDBMbF1kKVR8cWdEXmUpK0RDPU9IdGxja35RVzxyTWM6aXd4UlNiPnxyZz02OUJoWUA8''@;'; put 'put ''XWF6bWBCPngwZ0krWlpXR2FQSyRMbDNXRiY/Y2xBL1QkdSxTMXQqc0Q9Wz83RS9XLl1+QlZbWzJSUUcldDZCenxDTjExWz9aZF5Hel5iJEN3cCVHT3h6NDt0eWUkc21ZQ35Qb0ppI0dSbiJrWFBWVGpUenA9U2lTKVErRUpzI00iMSlbVGRSdSRnJDJWK2RxQHJvZTUjXyZpejElM1BKelM5eH5z''@;'; put 'put ''ckdsIz89OihaWE80dENjQUUrZjJCbDVIbG5kLjxxI2w5cXkrUCtjOVg9a3cxdDYpfGxRQlpvQmZfMiY3dGsrSyZbO2BqSTJJWk5wV0dFMllibXBqWEpOMF5eW01Vd1pIQzFPUkV1SDddZnglJTcse0hLYUtNSDBuRyZXKlMwSnpPdXg+Klg0QE8lSl0rQ30kUndrcD5sMzRFdVNIUHJISFR2X29t''@;'; put 'put ''ZFF4cT85Z1NkWDN+SzUubyNYOXJjKEZTZm5oTk8oSlA9b2BIRTh5Um9qXiRzP3Rye3VTd2s/UElRbik2MD1PO1MoQlFBJHtbUG48Z0txOW1KKS88SSwxY14yN0JsZl4lZFM6Pm9DNGZuckl8Y35NWlRkYGEsZy5Je3JXNnM1SHNTYkFvdDs2PHA3cSpUJDZjak8+TTwibDhOU0gqVnNUYFVdazdf''@;'; put 'put ''bXFjV1EsTzt9LCY3UGNSSitmMEA5Pk1jdHRsUWclancoPCR5QSZbNnZ3UkQpI3FuNDV4bnM8UmhbVVZLPExza3FydWo2aFMqOFFgcy89WWU7ImVMcUN1K0NUITRmJW9McigmLytsO0hiX3ZZXnptYmtFMTooXklAXmojUHIhTyk/aitWN0BAP2A8ezdLdmUjeyhOWW5vLD5vKSxEUChMSlpgIWN6''@;'; put 'put ''fV1JblUqXkxPflJtfVVCNWRhWV5AbkB+IWxbRGNyRFRlWyVtbHRhPmhRJHZnMyFlSzpnfWZyPll8bVtoTUZvfVRFaE1pdC4laEJSVD1MNSlqYno8K3VKIX5RPXYqZ3BRd2tKXXhtKEJJVyp0KCErb3NgcjReJDMjYX5dY0Y9VSllTCxeb2xwXXVEQ3o+ZFBmb1R5YkBAKVhRLlFRY0wsL0phT20i''@;'; put 'put ''JiQoU3dFb2srJXh9WjhINjUkYFE6IiV+SlR6bjVsZ3FmSz9IcDQ5XXc7OzcpJmNrOFptPXBxYDAxKnlIWjsoJmg6WWZrQm52MWpxXS59T0pkYyxrLm9lOltaI29kVDJ2K2tGfi4sSjFeO08qTz0/Tm4yUW17Vylfc29fdyZ3PmtCWjQmSlFNbHQsOzZEQiJ2QjFZOTosb29yKUBNWkZZOGFlJWNs''@;'; put 'put ''eixFcDAxYmRBPnNjMHNLWy91d1N0a1ZBSkkpXSgpdUVRWDlLWTh7UUZNITc3em8qQW58JXg2ZTJLeSZ3SWAyZiRxYWFhXWxCVjFVLiE9fDFKZzJ3RTk5c1lVd00sPnNKVCg+I3dfOyFBZDlQdkIucTYuPzUsR2VQbzBwXzpXNzlMMmQyNkVRJmglOyU6R1dhQC46Ry4lZ3tAU1s+PjVfd3RRcDdE''@;'; put 'put ''fG0uZS5hXS5+TWQzLD9HfHoxTyRJP0A2VVhEQDo7M0FPWTpQNzFbejkha2VnQ1ZAISl6VXA9S3xeRzx+QnNqQGEwMmtyej94R3tpcj17eWZNcEhVM1pQci9mJDUjNkMueiVHfllCKStdVHBjK2pDZG5WakMuVV4iITh8Y2RpLyNdXkhoPH5LNGJ0VFFeLkBHWSk0JmhOWkc1eVhVQjJ6cGhjSnlJ''@;'; put 'put ''LjB0K3wrPV5ofFtQN2dNNExaWW82SXI3JGZfJXZsdzt1YSolXl5+RVJENklzJlNYM2l9UWgwcl8pOUhURE5rYGtDKXdse1BUWHUlNCV+fTJxZGpFP1gla1UxWGZgYmV6YFpmUnNIKHczNmlFMWJxRisuQWZ5Xk9HKzJUJks8azM5WUJiV0FsPnhfb1J3P0p6P31MVHV4NyNqMkZtaElWU31MV1B5''@;'; put 'put ''LiZgMTNId0dxSXV4QlIqMHU4a1ZkYG1la2s1JkskcEVJcnB0O0s6Yzo+a1YrXStrbD1DU2JGYl14b087ZSJMMmdDOHErKCh9TzpEanwyTkEmKGRXS11OZHJ+V2ksZlgiSlhidVFVLnkxPC8vLFlpRzVUUC53KmNhS3FOXVV+UGcqSmw3Zz9Td2N8YkFMZlg6XkZVKWBKak1vRSozK3BsYDRhV3Rs''@;'; put 'put ''L1JMXkB0ekdZPWE3b3QrOSN5OFE8RmBOKHA/SikrJVF1LlA6KEk4cVVrd1V+T1V0aHJeYVJhYzE5bGMyPGYjP3hnfT4zQDxxLnw1OlZbcGBqSCwyezlkKX0jRyFGUT5yNEhWVX0xMEtoWTxAe3ZPQDEqOU5+fEtyJkVvNTp8Q2xPVyNDWHJgdix1c1ddTF5CTkokfS5SczY1N1RWdUNSOzEwZFlX''@;'; put 'put ''QCNSY0w/KSFQUUg2N3YvNj1qQy5GJHE4bzl4RU1mO3J0Ult9RnhtKkxERnFASFs3JXBTOCIvOkt2MCJeT1hfZUhdRjAubSJvUCpIPXBXI0pBYkJXR2tMR3BuJVo1eGk0Ll1sS3d1VCEiaklNNzBLM21AbSQpLG00KS5JW2FDV1tHJnJbc2FdeV9Bb2p6R09INlY+YUU5cyJMJmlBWH5ddnJBIkNf''@;'; put 'put ''MXs7MDkkSDJUbXBSQm1rWyFJeTJiQkExL0JvPUliTV03b05FIVdffWA3MXVkdH0ke0JeWSZEX293TlNaK3opNyFZe11sKjt2MEpRMjAvLnVCUj5qUDIiTz90SEtdbSo5Wj93T3lQRHUra3JzLHxrZyJoRV57UFpCPCo/N1hLeCtoUm16Rl03ezp0ayxxTEt1akQrRWc8WnhVOyFnbnNSSVFeTzZQ''@;'; put 'put ''W1RHTnhKY2A4az5GeiwqWSI+QipweCpOJiQyT2FFP2FaJD9uTnouNDZZfGouSElUak07VUAjeF8sdE1DPTFuLzw5RjxWcElxMGVnPiZRP186bWg4VnA2eGg9bmlNKTQ8azFlUzFxc1I5Ym0iUHBpckp9bGM/Nn57SHh6M19sYUdqeH5QfUJ3ZSpfZ1l6NSZXPz1dOyt4enZKKm1oeUFvUSpgYSor''@;'; put 'put ''cU8/U2BSPzIkV1VCPDBAUWhbTVZaODdMLl08RFEySXU2OnYhJUdUdCI3elY1fVNoXX0oTyw6aGdnQVNeKC8udXRYKzVeamU+MENgeDBKKWojQ143S20kbjdtZjd3W2RPTnshU0FZayZodXFSNFliYF90TXguXT1DRVVyYlY3QEA6Jj9WRSlublk2Jipzaylja3lvc3hjIXxaWltSOjc7ZV1hfHZj''@;'; put 'put ''VSUuUC8/fWpDaXJWQ2c1OkwjbmdHK19aU31NPmFnVSZ3ajVfQ111VzMwJDdYbyFfVFU5NjdIKVg4O3tDZFlgODQwem1+MXxGSiNdcGc6MUwweTcxPkYyYnRqdnZSUS87bTRKeVApZCppVldocjAmZSNEfU56YX5Paj1gQGd4YzNMSmVpTnhiWzBNP3s7WntxKUp4bTN9YEFmfFJmLiV6OFhZUEZe''@;'; put 'put ''Nl48TSF5RkhWVip3MypNPmRaJWNYeHp7RENlJVJLUnZna2E0bCpRR1NYZStxaVphKCguQy9sXnBKOnB0ek5sOjxpRGNgW2IyTkJiYzhYaU8jeUY3PHdjWGsubU1tIXpJfUk0Z28rMzA0eGU3WWwjR0crRTxIIjJGO0xgZjNaXXpgMyRRSzBSYjBnbjEiRUZNQ19XRHAlTGluQ3VAW3JRM3kpVEN0''@;'; put 'put ''Z31WejMpNj4xVUZhMWhEN3k5ZkFwOWxyTXlsYCNuRW4sPFpmSyRjREhSVi97S2IpR09qc1hvQllPXlE4ayhrI15IZUk1ei47SVRjYXUraH17Ui59Vz1sSlp3XUFvJVh2Q0p0YVd3I002YVhEZWllWz5TWTE/WjUxc1NYIyxxT0N6TUgiYXZ6SCoxRDJwUkp7TlRgRG5iNixtTS8iU0Z1e18mKyho''@;'; put 'put ''UHZJR3M5TCsidDRhPDdLdEJLeHBNTXUwfXVvNzpqWUVPLE9LSisxRF9SZTslTHpMNlVsazZtYj9RWjMzJXcyeXJlPD4wI2s6K3dZTlpvKjlBSzRkU2IodS5hU0pCZEtMKVRvcyhJYFh5R21gRG4uXnpdPTY/Pjp+eWRiRkBxfkdbYFMsYiJ7c0piSXkmJnJzWmBFd2cmVWlhTmY9ej80ZFdKQkBM''@;'; put 'put ''XW1HYGVXQnkibTokQUVuZVY3Jj14REJFImhxRCoxbk5BbXRyR1JWW2luNzpRfDo4ckgsX25ZYkdfY0dlWChgJEp6ZF1JNzw2LztERWI3WDJ3azQsV3hkYzdbWHJEMHhAMD08TiFhPE8pX242SlRFMWtLRzBMeylRUGltXldEYjNAYzgwbD8uVltBZ2s6MEU/Rn5deUlsPH5gazJ+dCwzYFhMOkpz''@;'; put 'put ''RTZjXWA1aFB5WUtNaGp6OnlhKnx7Kk9FeENWbTZXbHAjSHFvbG9aeGczQC9vUUdAbjdpYlVyXVJZYmwiaWV+bSxAPVUiPDt9e0ImaUhJMV41WFBfJj4pTEAwU34xJDhLNCFGNkpoZSxfUiMqWVQ2dlspK19fKXlGR15AfStyJUJXaixdfSM5TnQ0OCMkQDF6aiQ0OUVMQlFaY1o6QlIufTV7PURE''@;'; put 'put ''aWQoaH01ZFI7aSJXKW89ZksyV2ldcFJAaGM3UWpXe0RhW0g8WUhoNVEsZEdJZFQ+MkQxX0QuKU9BP1BDNUdyalMmZVVkd218YXNbQD5GLildQ0V0eCVaOiQzQXZ2MFVhXVFiKVpLbFFiYH5YNng1cSEqOUY5ezZNNihTXnx+bU87PDpYPXQkNXVgQFg9dCR+OWQkMiFbaDVtVDVKdHI2WUJ8PVgl''@;'; put 'put ''Mzo2Xlg9ezFbPHl3QjhZUEEsL3A1bWptSXB6bExRRFcyTnN0QGRTUX4+cjAxSnlQMzo5WztGQEMxdT1aSGp9WV8+Mm1IdmZFUUFXOzlbPEJ5SWA6MU9yfHgiUihKT1BMRndKaWF9M0VKNDRQXSk4XjEyPH1rcnEobFRQUTdedzEzfmJuNzxHQG89I301bFNMX0taIyksZiRpfClwVyg4ckYvJSMm''@;'; put 'put ''biRfdnc+c3JuRi99NjltJF8lImcob25GL0hOODVsfSkqKH5iVE9xcS54S25jd0o/OVZfUiJnfEFbUEw3SjwyfF1RPSF9IVg2PkJUZ18vVjg1I19yRXNzdSFzKDN+eypdc3xpZWdCPU9UaXxQayF+USEyeXUpYCE5cWJIOnYkfSg4cChbXy9DPn0pTEYoOH1he19fX2RseWR0M09GLzBDUldVQ3xv''@;'; put 'put ''eWQwOCRRQlJDI1B2QHt8fSRMVjNwPXYobGVLRCRCJEc0XjxhSyVjWjZLdnVQS3hETjI1eDNILkoxPDVZUTMxfn1CPj9lU1VYUFdqQHJdLih+Vz8hbHEoPHJ0bUVkfGBNTHk+bCYzekF7S3J3Tyl7VGtpVGNGLz0xZiUrR19rfjAzcFJEd0U3fWRNNF9LclJnPkhheFcycEhqKk80bkRZTGhNR0h2''@;'; put 'put ''ZCJ2ZygwWnFKNG4uVW9RTTwse3dKfF9HbjtCOX0rSzw/I1FXY0FESEwjeVcuTzRZcHgrNj8rdVs6NGhnX3ZpZllTQTZtdDBYc3B2XUxsI3hETjJ2WXloSVVUVG0vQXlYc191Z1Q5I1NjRi8wWSJIR1EyQjFFMmQueEBJJFFbdGU0STRPeFJefGtiImNUZ21nWSl1OU1UP3dgJEk8QklyPFA+S0BZ''@;'; put 'put ''MWQuXnoqT09DTyJvI3NTeis4MENpXVsqQFg8VnNFSHdHSEJIJkYjcyNjOnlJNmFDTmA3fXZGYUJAbmciR0hCSF5DI3NSR2BTaCtnWj5xfkx3bSFBPShAUUdYVD9HemNfMTV7ZWM/SWEoI1YrOGkwK2FDY3M4K2g1OyoiZCY/NGVRbXB5QVlTaHY/fmhIKU5EUnVJIVVOfTwhR151ZXNORDw/dF5L''@;'; put 'put ''b3xAb3c8YHc7RktMWW89fFdQV0kqQHQhKE12Y1JeZEUjb1t0Wi5ZJj0hPkcqPCJHTGpOQShoW21CMlJVSHR1ZXNKRD0/dVQpXW5LanJhRE03K3gvYW9PckcqNEk0WlhyfFZ5cDp1JiVOY1UxezE0dkQ+VmFBRDc4UCV9TCtjM1ZUbmgmSSIpW1UmWGd5MkpUfFZNb3g5Ij5heC5ObS48eTVAVkkl''@;'; put 'put ''dlRAY3J5ejZ7V2dtbD9DOEJMdU0uMFR8aEp0N05bUV1SKlImZj5zNEk0dz9xfFZ5aW9xeG14UXVpXV8uUkk+UDIwI1laSWdNfDF1b212ZWdJaGpDLHVZKnRpZ191Ykg2cCFZaV9FXjRIUWNSQmxMZnBYUFdPWnJ8MXlUVDRqUUBdPVVmVHl7WHBxWUcmNEk0JWAofWFaTXZHeHlnTkpJLmg/UnhR''@;'; put 'put ''L3oiUk94WyYlZyhtN2xAOns5dDBOaT8sN1twUDp2L050UWtKX2wkKVloNj95aWNGL1pHR317ZXhMO1l3NDVzM1U5KS5KSUgsYHFzQkBVQ1sveHdfX1BzI0sqMXFYQSFtZUhkST8qazkvKEoraCFyJEdOT0Q3MExbZ0lCeDc7ZjdTZC8wMm8hLnc4MXhEWWw1YW83PlYsNHcrRTx5b1txTndJSHc6''@;'; put 'put ''cXNnKEhVJngoWn4iN2Y/a0t3MEtXWWNjRWM/JWcoO0k7VSk0O3VgTFEkY0g1eilGQXZlcyZ3cnxhekghRE5bZFtjbEQqdTdGOkxhY0VjWkQjc15jdikwY3t0Il5bdFBeX25wQjYye3Vlc3NdcXxjPXxETXRuTklYYSYzI2tOaHE5bHdvQWAzJHhHJnlLVXpETUd9XmgoVSVAPkYqIT5NZEl0IXI0''@;'; put 'put ''X1hoMmY+aXFHRVRbOTdvUypsPmwsbkhCUD5FQ0dCdSxlTG5pZFNpYms0KkkxR0M4Tk9jIis1Sis8Lyh9cEdBMmYuemcoSlVLQm42LHpyVkM0K2xWTn4qMWRTaVNQV1IhJHI3RWpFdCM/Vng9OlRpKXZvQ3RwSGRTKkkxRSRGPGJhNEc9MiNFMmZHWk1XJU1ZWW5jZVNaTW1wQXVdKlgse3FhTlRN''@;'; put 'put ''cDs/VEs0ezFIJUw8e0lHNkN0IjVdKyE+KGJ5WF5feUJ3WkQxXStqKVFDS3s0ZFNpdE9XUjlqRn5tMCFYe3tZTTZ0e3paNz1FIl1HNjk0aFBYNmpKVG9IOjErSmRpWjY2O0ZpWnMpOGNVQ2FiZCw7UkZ7PjJiWShIRzx7Wl0pdHI9cEZ0VCI3OzJSVGYsTDBMXykhPjFsY3wlTj9CPUdOKilSaiY0''@;'; put 'put ''KVVhOn1xOExpSUxbKV82ZyklMUFRaWNAeFhSM1BsWkxNLkRnamp3aCtkRXFhUmwzfDs2RUVraSNHIy9adCRwUTVrKWhYcFRRcSJuWG8iVUA/VVhrOlI9KVplT352eUd6bF0mbWlOTjdYckpOKXVXbkxPTz1OM3wiOTFTPmg4d2whSSVbMG52YUF8REVeNE05KkRfYX1+THx6NCh1KjFTXiZyKltg''@;'; put 'put ''OkJpYyQuRE0pfXU5d3lsal1oYERySWcxbXNqUVM/V3VDdEtwXSshPmQma3gjRHlPfTVfSXVzY2MoZjhZLyQyJF8yZXkzT3dPd0pAb0xvVFBLIU55N1QoZSE6OitsSGBUbEVnbHV7W2kpWHNnaCRWWk43MkkkT3ViNXU5NTo+PHlEbCNveT8lZzc0aGZ7b0JkP2ZwWCpVSF17KCo7fHI/Slt5VVU0''@;'; put 'put ''amBxV3U3eTRkdWlzVkE4OGIyLzVxPiRmN3tld0w8P3tiS2dYV0RlQmcmNkgxNHFDa0ArR3h7PTZuIndFQU8sSHpxK1pCX2MsTShYOFlFZmY7e0ZCQT96MUNgYHs2InV2cEU6YHU8XW5aKjN4XjdibFJyVnJUXmhgSlZOYFpzQUxxKSJUZDl8flhaREg8WHIuNHNFQUBASTNJcTJ3d0BDRV5+NSlC''@;'; put 'put ''am1zRmwhPiNWdlZWZSZzRiFpMColKGJFVlh1bEFPPmJPS2p5fTlYUjlUJCNEXihGKS89aDYxZztDKD43Wk9vdXZwQF0uOXxXdXw9RXIveSIuOFFPKUVoaUB4P0Z2Ujx4OzNJTntiSzNWQnNncmJldGtsMkBtK3VhQEtuKmV5PT93SVtTWzFvSVlBZFk7MUw8IV1CZjdERV43OyU6IzkoYm0yeDdp''@;'; put 'put ''dX0rYDJLKSwuYEZddCohQlFJUHd4L3J6UE1kMkswR0NnWjlqUmROZmNUdkVZfGR8a0xUdkQlT1koIT4sOn5QZkczYn1eRnZeSUxTX0E7aGM2Qk8vMUVsP24uMGdNVEYoKDlFe1duI1ZCNmlRaEBXV1ddez9lflpXU2IpcCRdKTEzTjZfMyNtVnMjdlllTDBgbUIlfFhNdGA/JXRde2U1OSNHNUdH''@;'; put 'put ''bm0+R315Y1VrUVFeVUpTT2k0U2F8KHRZbVpFWnI/XW5QfnVhJXk5eE90dnBeL0tmc0h1dFJ6ZHUyTjpuWWpQbylnP3g5bW9eKzg0azVKXTRbYHZiSnhgPzpXYEZ6KT1JOEU1fD9COUA+Jn53bUFMS2U1V1RKejw3RylzfDJ8IURjRWJWOE1TaSFMOFRMdTZ5JXNIW3NUJX55Rmh0SEIwNGozT15q''@;'; put 'put ''fno1N0hmdGBUaVpZWlUsbHVyWDhuaFgqVVB3cnxWeXMwT1NrYDFmVmNLQkc8IU5dKm00ajM7TSl9S1pTQFhGNkBEMTFxd20kTHlKLjQyaHNYbmJKKkZtOVEjY3JqKTs4WSxHfWNCU1R2Xn5yYE80ZnxUeHd6QDk8dHdoTk87KXdoNyZycCw7K0RXfSldKzlaaEtQW117PyF1fjtHWns/WnxWNlgp''@;'; put 'put ''IX5zcDtANUNZfUc3VnEpYitmekZxYGRPekZGXzU0PX4zYTEvWkNKYEguIShuMXE0aW5pSV58b05bcEZiZFJfQmB6aHduaEh5aDZwXy5WPn52eWBlbDhCXmdNIl9mMEUvOiNHOF99KmBiLm9hRk5bfH5tSTkyQXBGWSRSdiIvNE98fUpuVFsmUk1jfFZWQ0o4OyEuKFRVfnw9Tjx6N3tXRUNPUEpv''@;'; put 'put ''Vix0fD1FdTV9LjMqbytQJTNGKWNzIW06Q3wjbDBWN30uWCFdOmchLH1lQkQ0UElkPGkhLH1nW3wzfjYxXlM8a35kPX4uImNxYDtULH0xQEc0JngmX3h0NShtYl5LaiUyTWNwfD14S3R9Yl5sVjM8OnNRM0BxKFk8cHw9LyZtX1UjVFdQJFNMSjBSYF1HSC5rRHJlNzZZKHpMalU7bU5rKzVAVkJ1''@;'; put 'put ''SW1JOVRCLGJqXmY4PmN3SGZHal88MDMuSmJ4ZmhaJWhoQ3AmRjR0JGNhSi98QD8ualNtOzE/MU9gdGMxOHBESHJlWnE2aE1odStSV0hRSyRVRjRdRmV5a1FsaVZ6X1lXRkJ0fVBlJTF8N0pSbyg9Q2lVcFcrajJqbHNUbHVbJSloKm5kbUBdM0xXVWhiSWA2OitsT3BQfS5rY3A4dyFeM2hNdmta''@;'; put 'put ''QF9WZCs4PllhMVdYd3VrWF1AZjJgP0BoW1hfKGJ5PEN+RkdofGAqKW1JOVdBRUVRPGxOI2c/eU5jJGY7fUJqQS83Nj5oUGwzfUJZSC9UfXYyNi9xQHlIelsvd2NrJWY7fWIjdTw5ZXw6fDdramlfazxia001OCExekZjbVRwJnhFXjk1MHB+K1Z1W2RVdlRkYSZzM25Zemc5REZ4ZGApZShHWStv''@;'; put 'put ''V2cwVyFven45YH4uKmlwJFEzXX48VypgKlY5UjMub1dxZ01BfXJQMTNkNmpLN29WdigvNi9ZeTwydCNoZ1ZkbT9XfD0mRXdzR290az0ka1YoRXdzMWN6JH4mYXpXOCI3OzkmVDVmUjNII3Y/QTQidlIkTWR2XXlIUiJEKnBVcD82Nz8hX0RBU0JIWjRzfi97RCRgUiNzNmhpVTVgOyxgUlJXOz9m''@;'; put 'put ''RFRXXjg6NzVVJmBSeURzTkQuamdwbltMTTN9Y0FZPS5dPC5WZXR8cEovMjtVJmA8aH1vOWdNfTJdX2dCOD8+eEtXfWFtUzd6Mm50Wl1afFpnR2l4ZT8iU3xKfCZgTm0pOG50ODVQLEZXP1khZDdlRy9PTWg8WFBxV2xFdVtYVXleNUh0KDYkYXYmVG9bZHw5V1NmdGxlVjNMWm1nLFslfTN2WnQw''@;'; put 'put ''cXw3KEArKz4xK3g6THxRO1pMfE9KaWpffjEzLkh4ISFpdSZoQyNWPi8sUGdTKXpbPTo/Lih6QTJmQFFkIn06bWB0cEpkPzYjdlJCL1ksKCNLJGh+Tlh7M2dwUW1lSWx8Q0RQNHBLeV5lSWx8d2xGL189IzMrTGZXakhgQDlDTnhXOEkjPTk6YmolJn1hLkUiJXNiTnRbfl94XjBtPn1ONnhbTVgq''@;'; put 'put ''cTgyJn5wdFk/cldSQyVkaypjOChVaFslMl1heGYpJlkjb0ArcGZFT30zJGJPRTpPNVVoMUVyZSk1VDRPNzVmcFNhLnZaXnNHMSlvR3VbJUV6OnNwP3NrViVrVndabShoL2NeZjhZLHMwYXBScW0rYmtncFJeMzo+OTBgeiRWeSx7Y11pX3UvPy5fPXsmMSU7Y2c8ezNFNVlHcClRdyhVa1dzWi9Y''@;'; put 'put ''fXVmR3Z3N2JHZGlVIkBbMUp1Z3NPMlJ3dy4qXl8mbXVmXyZZeU4vSExiYyZVSlNJflRjX1s3P11xLkREbysiek5JVlQ3ISplRCp6fClmPll9QDNFdihmNDd9IUBNXnhBS1ZyUEEvTEkwKTBuRWhpVmttYiE7LHtLOVgvdU54LnwhQCw6RHk6RUtZb2kua2ZlSWJIJn11V3RQS1M8LnIyK2d+bkdf''@;'; put 'put ''JnhPR20pb05oVyxkeGpNRzw9L2lQbDw3RTpVJldRR3JAXkpSQkFzTWR+RFI3N0R1WndpJUdwOGk7UGdBbUJ2UWl6M0tXS1JlckkwYW5rbE5Cdz8yVUZ6d1taQy5ZbF5IUTo/M3s1LyF9LF47WWt6V0NaKDpaZHc1alhERHp4a2BQfERZfHZhPW4/KyxPVVUxc3JqZlFBYzA+VW08bEE2ZXtmanZ3''@;'; put 'put ''N2prQ01bRTFjUzNra0lsVHB3TyF9a19dVm52VVh4bzRtSDBMR3o6JF0hUj45XiFlQGkwZG1xSlVMeXZOR1REfno1MjBoMThtbGNWTHQhTllXbjxwPUZUQnxIJUU6fSxnbFswOHlzYXp6QiNsc1B4dDZXKnZleltzYXo1U1NtXmJwTVEvKXkwMGYlXlVNaUc/ZFV7WGF0M05TL3tTYW5hWEYxYDk8''@;'; put 'put ''S3YrUWpgQX0iIXtWeT5JLzY4NHA0Old2ISJKRn4xeStTbkE2bD4iOldyZHVMY2pRfDwxY1AoPHlEcHg5TDhAPnZdeXplLiUpVjsxUUpfLEh0ZWp5TEAsW2VqT3lRd0FieSFxUjMuSH5ILFU6PEJ2Tkl+dlZge3lQRDcxVkVdITVDUnR+bDFYdXoiTjl7aCI3M2hHUylQYl9HVXNJdEIjbFEpZCp8''@;'; put 'put ''IzNWV0l1dH1zWjFCS3RiZiJRLFdfPmo8WGJpdSUuYGUzeXw1K2JKfj1gZURpfkcsYDh+ZCQ+fHJnMjI+NyJsXWR+SDZgfmEzZ0x3I15FTk5adSVhQ1gxRFc7QnxXclQuRzd9dTF8Kk85RWQ8PzlITm1MKn5ASnNXeyxYRCJJcl9zbGNPTTJgNTZ9aEp8P0pdQiJJfigjZngleEwhZHd4YHBPQi4i''@;'; put 'put ''YzJxJldXPDRMYj16dF9OfD49PDx3PC5ZWEA0SzNHUSppZk43MUNGJTQsYiR3ZStPT09nYCgxVm5wMyVJeSFFUkRGd3VeamxnTj5oekBNcj81WWV8Z3ZrSWQxaGF3YV1BcmNbdXhPQ2ckJmUqXmpYX0ZFYWVbPElAcTpTdV4mWSl4KU1WNm1YMnFtWTNxRz0rOiRhZ2MpR1N7JF5HVUVjWSJkZHVf''@;'; put 'put ''XXcmSWklWWFVTltMYEN3PVNtIjFPSD4qTGEqPWQ/NmlkeDY2PXR6eXkrdzNGZCZNenV+akhNX2J2L3JeQ1BqXk9VI0tPKV86MTxXSHIoWTZBRHUlWmE/RGdXSz5fYipeO0RyTEVoRnE9KTMxP1pOPW94UGRPKiVULyNCbmBIZS9fQ0FxIVZ9O3x1LHlSLF9ST3RhW3U5LGJLUj15IWV4N3VIb2tQ''@;'; put 'put ''MEFfdiopWUo/Y1J0ZSgrY2o8PC9uQSZ+UWhHMCMlQHhzaVBWOiNuOiNRO0lDKWleLjJOL1tYN1lTbHM3Z2V+VEdqUntbdVprOi8qa3dPbU9nY1EqQjVGcVpINlMwUEcvSXMkPngkYS9pfUlPTSs1ZytSV18oQlFCWUB+aV1bYF91MSIkR14hVkNZTiZUe247czNwPmROPm05L3c2emBVOjNiP30j''@;'; put 'put ''OHBlI3NWQjVQZyMvMy48dkAuUnMlcGtEeXNjb2I4LEMjanlFbXBuWUR8T0MkNGc+dV89d3l7I2VPKSQidDokWmc+Kl5FR0lnaFp6VkkraTBNQUF8KC8/VWNDRWhqdWA4ZitAVzs8KDp6UlE2ZCJ4WkhYImEkZVFpOFJLUyRQV3sjZWNmYjFDeyxHL15JJD9yR05QdGE5RUVrZCVmeC9hXnBOS0td''@;'; put 'put ''Vjt2PDVPeDohNHdjU2MjUnd4YE5wJG9XOUVBSH1ZeHx5dEpedFBBXSRyejJ2IU9AZ3VXUHQ9TFt7bDwvLzFafGlMUXYvLFRTIy9JdWRKQmlBVHsuOyNEcFhBITF5Zz5iZEZ2LzVGYE91I35gLk9MJlRjL29KJHZRTThDOkElNzI8Tmo+LDQ1RkI3P0xOaGp5aV9TOU8xeX5RTEU/Uy95VDkzcClJ''@;'; put 'put ''Y1JwJEJHTVRaUnhVVnJUTWR1WUtacEo9eXR8X2BCUksicXxYO2opeD9pRT1CUX1LTTo5TitEW04yX1BebC9bVWAoOlcsJTxJdDBdbXFTOFE8YHFNSy5hajlDV01ISzxJXkYibzxeMURoSF1ZXWpVfX1SfGF1ODBIQHhpUmx5dkIrX2hMaGpQbFI1W15uTik4OVI4SVZiVE5fJmJLQChZLm5eU1R+''@;'; put 'put ''ZWBuMHpWd1QjVWJUJSVJO3wje3w/Ii90cVgsXzFRMEE8aHhTTG1HKCtfI0BvNmtzLHl4SFNgKDYrNU9CV2hDVlsqbisvSjdlaCZ7MG4zeFhNUTMueFZqRUZOajdjJTlmeG58PV11Z1krT1JGaCsmfSQ5XUI1SE5zenliUzs/cGw9PWFyZjYoJkhfa1RbJDBaRlI/fW1qXjoqTU9dTXZLd3xleXI7''@;'; put 'put ''eTxRSHpmYkpVbzs1alI3d0lCME1yPFFILFEjdVokPzdZTkpsRnZlaX1tL1trKjM5UW1lbCZqV2A2Pn4yYSo/NylxXyVKRkxVLHQyczdjP0ghXUZmVCMhWyghKSlJRi8mYWFPLk9TIkJodUZ2bkdNSGFuSWFBTl4+TltQZ1UwOHc6RmZ7d3hiKWl5fD9uVGJCR1p1ajcrOFRBfmd3ZXlMNT9FZkwl''@;'; put 'put ''eDleMj5peCJjfl5oMzV+OUM0YGhKOT5SMFk1REZaNCpiZGQ5cktLWigoSV12NzJUYX0hQzdYN05mKjxeVVB0I2dCJl5tUHYjR0NST35HQENSdV5uQiM8YkVGfEFrSX1MK1l6NjtkPlMkfjZOaHU8aV5PTFczPUpOUHg+LktfOFQiOy8yfUpZMSh1dk9WTnFrQHw3XlJRfDNFNnRKezNVKDs/R2N0''@;'; put 'put ''MGM2Png9ZSkyV2VCRD1lV2k2PFg2fVZqYTA3aTtyMSpeSnp7WmcuP3dLIk53PGFGY2ozc2xLL01XNlkoU0R9a3JUTC5MVHFqdF9HZVooJStKdElRfGZobSt8QkQ/UkxdMyQhNDEoYFc2KlNSPFdnckdkLyYsSzxCMCt1XUg5ZHQiTVZINz5jJjRJT0AvPWU8XmNGTWJ8XXNwR3clYylUUT1MZ1o+''@;'; put 'put ''eT92aWRzbGBSbGRjPD9BbXthJT0yJFJUKTZkYTlxNk1DXVI+YiFUdUx0anA0NldWQChMSGJtQyV+UDFVSi4ub2N6MzxRdiFyYix8YyV+Y2wwVGpeVmZ1a01dQTYoPDIqU3lCL05hS2c8NntmLFVVOFRDdixCKlhqe3diTUYsNWBraG5aUGNQREdZLz4xND9GWnUwd3M2LGpucW9bVztyPkZ3WnVa''@;'; put 'put ''MHNCJjxQSFhASCJ4IXFINVZabzdEXyJZSiFDSF9jOG54KGg0Wk44PjZ+QlkoOkIpRCsrNSU8b2UyPiYlQkFNKWxNUm1tV0tUVCpGPlM1OVFzKjFYTV1weDZEPVpmX2QpbGMrT2tFcUA2QVk+eH4ielJQPCNdKDY0RlZMbzppZzoxcjlQQj9pfjl0aEBuP0YjVTlYfEEsQEVFbVJgamIuSzEhYklv''@;'; put 'put ''NTFybWtQKmRlZj5QPmZNTW9rekB7Ilo2SixiPltmTCl2fVFER3paWm5kWFQiVng+eVpgQ05Kdzg2MnNFZEN4aWt1KlJ6QFRhcSE/SHtmMD00O2IiQTN4S1d8aUJNZ0lhbjpBUEE9LzZHZStbWDZ4dm9eKGdkKmJhN3xHOU52YkpocFpBdlAoTlU7YSVMbzRNemQrdUk8d3thSCZyRj8/K0greG0r''@;'; put 'put ''Xlh7RWJ2czh3OXNnMUw7MSs3RlU2aTFZYUljKG48fWtZZG0kOGp9TCF2Yl1leyMwVCNJYUpYQkZlRl50XTQ5NVVzNnpwJHQlNElpel5DYGk8X0d1ZiQuPF9OelgzQkV2Li50Qk9sOW1iS1YwYUEma2ZlNkdoNzBPYm5XdiNHUU9SPTQrfTJ8QFdwSn4rQFRkXkRfW1lMby92Q1d0PmshXmNFcjdR''@;'; put 'put ''NypCaUA6N1lVViJFfnlNWXR5dXxFY009IyYhaEU2TGU9OTh8UFpqO2FkZlhNcVAyeWZzLGNyVm54Oy9PUEBHNTxEPTJDY35JZ18hVil4dC94RDIocWEqO1JDK1g+Km54SXw1bXYrdFdHcEpBQW1wOyNgdVJRLiFQK2hzcixGeHFMe2JtViZbInxJd2VIT0h8RVZqOnxSYGhUKEJhQ3VCL00/K3Nk''@;'; put 'put ''e2o8QFpOe14hQWIiW1NsaVRAVSljQ115WDxqXjo3YDZfOkV7UGBZITtMXkp3UStsYWpETj5aaCxPTGphdGl8fF4wZjNTV1VfOnZKfjJMJX5pNyIraTgwPFg/PW5TNyNEM25fVE03UDske1ZxJWJgej9dPl9qUi5Bb3Vba3Z3R15ucjBzV1tPR0t2RSohPztubG46dj8pND8ubltUN3JVUUdfVkJq''@;'; put 'put ''fGtycD06flRuJVZgbCtEbnFfSnxFUjlyQ2M9MCE9JGVocWsiNjh+P0o9JmxoYFNhR0ldOXsvJGw9RSw/OVBFVUlodT1deF89Z340dTtqe0t+KnM+RVhmZTtBQjpIUWpZZkBgbW48Z2hfLFMzYWhfUXBGfjB2bklGU0Q3WjAlfTAyVCpeemgybmpxbzwsJFNgYUcpIUQoSnZRYko+X3c0Skk6THpR''@;'; put 'put ''RHRFKiJCQVJ5SFZgNX1dPkwqUDRlcmYlPTlvRFUlKyw7QGZgTVV+PmB+LygmOS53I1lqNCljXkw8R1E9VkBFeHMqfUZLdigpcD5IaHVwdXJVM0poMFFuWCw0NlZTUTRhJiZXNHhrbXp1Xiw0Jiw4cF1nSGh3eSxpLElCI0k0Y29jIVgvc0VeeTVJeSJaSTB+cz0pXipuLmA6bClIZ1ImSjZhJWhY''@;'; put 'put ''d0deLFVnPlNFOnZjKjNlIU0mRWF2SSp1Pylfa19Vfn14UFc3QTZtRnVqKW0/IW49JE5WRyxJXVU/OF9ifHxtY3VBSERSYnFQRiQsSXssVGs5KDJpQiI4KyhbPm5ueVZVMV00LzpTcExfbzhgN3hdbW47PXtwdDM+ekMoelQvOm9fVXRwR0BkVztUe0hzWig4OnZzLlheZSFyOkJvdCVdcF9WcTcu''@;'; put 'put ''dzg5XUZyUittODY4NDl7TjE1Vz5jc1VrajFqWzkuYUdYZnZfVlczOzN9WXxuOTJlSEx4Rk9taWU8ITZJYGE/MS5Gd0N7IWoxOCU3alFQPm5KKSY4eiMlel9QXTg3alFQJkw2IkVIekhRamFsUVBtZk5BJWVDOHJgO2EiYXM+YTM0aXU8bTZhUmlwTWxPVyRCYF8jTUVtUzI9SlZOckI8aC5JQSk3''@;'; put 'put ''ak1QJiIiV0FaPzsqaEo4aGV7dHs1aWFOVFpBNzxhZSFzdSw+Tn09WzdLPXQkOzxeJWtqaW1LYkNhfm1CIjtVJXUoeVBEfGhBU3JZQEkheT9hMmkuRkxSYXxiMWgmUjtHOUBuMyJwSXR0SU9pUyNCaDRAUHlXVkI8aEtDTHQyITIwTE9ua3BURGtMfThhd2BCYiZScWpGYk4yTFRqe29qQzRxTm5r''@;'; put 'put ''Ry4wMllkXWIydUgudyhoTCxKPClKdHspU0FoZ3RuKUxZSX4sPWpbcyNdN2Q4aXZCJVNNYmFqZ1FUZkQ4XmhVRXRsV2NrSmQsRWlmRV5ydThjKn5+MTJFIWZHNjYxRStZS0UmRFc8XkJYNiJsWjtHNjpDQkJlbX4+NyE5Y1BheSxFMzBAUGJ9Y052ZjRlMHFjbl18OiwzOGlXT3hWQilLMnJQfmx+''@;'; put 'put ''RCpESmVJOEJlSVB7KWtZRURNTVg8JmFxbD9oOmYpRFtiUWE3T3hiJDNJalZBW2JddHJkYCJjJW00OHN8ZHMzc3A2OGt2WzolYldTZHNLZztifHxjJiloP35SeDZ9QU0hKk9MM19EdzBJR2JnKUxNbzI2YUk0NGRKUXJ9UU57dG9WLlU/b1RKejhqKSVLfT5ldjhJdDJjfDhYfUdXcnVufn43fnNG''@;'; put 'put ''IX08NGp3TldSPzdFUGFXU0xdbkxAWztoRWNuVWx8b256XlpKfnFYYks+ZSkoO1dHUlMhWHR+MlFmbnheaDpmfls/ez9oPSFUX35SUGZudF5+VF4/TEd9TEhCT29pdXdMdCppI313fnZCKWZLPDRCTVUpaSNgWW4jU3l9eSV7NVRRPEN7Pnpmfn06OVQle253QF0iVEQ3KkIpczRCVUxuMHpHfnMy''@;'; put 'put ''P29GQH40MXUofilCIlk9Xn1FeDM+QG4xcjwwW0svWyVDPHxISSN+QiJ0e3xvOVhjajRQTmdTby8/XkZxJig0UkY7ei5XPSZHUWhxNGtrdDg5V3hfclRXKyVSVTNUWzYrMFcycyV2ITtJKWZIUTJWL3h8ZHM3eStRSH5VOGN6bUxLVU4qaU8mSTh4JiphJiEkV0UxODJjZlFvJG5eR3dyJXZ9TGgl''@;'; put 'put ''Olp2RlJkR0RxU3dhLzQ0UiVqQyQsNkpQTm99NEFjPDZEPEFZOyhQTmcxaSRGSDxEelAlW041e2VzOW4/VTMlOyVnIVQkeFNPWyhAZyFSQUpbRSZQP09YOi5OZkNvSyMwOzI+MW1ub3E7R2JER052TnhpPFJ7aldRKXZIZGwuciExaiN2LCVAbWJJckBSaDR3e2ppXk1NfjkoZVJecGxXe30vYXRQ''@;'; put 'put ''I3RMY018PEkzdyFqdF1PO3UzJWB5Vik0SSE2a0BLKzAzPTA1QlU4UGF4SENtVGBYbT5SR2o+Y3E3LEVXfjdmZ21ERiRhNDo6SEx+OTY4QzUpY0w4TzZUXy9leCt4Kzo8eDU0YlpPVDFAYDdBci9CUlQ6PUZJTHJyKVEsVX5KZ2o1Vjk8MiVpJHhFaWVkTW1RNkpsMiVxXmdLSWp4UW08WTBqVnVC''@;'; put 'put ''R0c1Z2NqW3ZXejQzOFYuXnk5NUlNJUpuWUs3PV5UJlZdVktMeE9LTyUlMjojMCZSOmB1QDhzakdaaT9dJmtiekkrRSFBbD45UVl+YyhdKytwc15eWlF8TkNqK0BhSCt5aVc0Z1gzUipGakI6MmBvOG1IVjB+QDpxazRdISJaOCZsTSpsWEo/N2d8XVIuSF5ib117Nzdaelp7NShSNG41dyteUE45''@;'; put 'put ''ZShaIXNpeDR3QFFpPXd4dFFILn5gQVBtTTpoRHU8PH5SXyVQKXdsIi89eWVfVmQ6dUk/XT16Pk9hcUpSUTh8e0k1dzUoZm1CJnwlWEhJWXhaekB8TEQ4PHh9XjleSX1aTyNNb0g0ejs/QEdKJXRLK1BleFAlPmM5NGMhK21fRSolJjclbTFhTSVnKzcxdUNIVFs9ZWFdMFhYaCZZMEdNVkh4SlZ8''@;'; put 'put ''MjI/KUIyaHM5cDc+Pz15UzU7aVRkdXdgdnU9PyxKUkdsLkByKChtJDNvTGJmRkY2QVZVIThkMHFiJXBydWY/JEJ7WkAjUiEzaDZOWzRtZk5eV15xQjBSO0NLQE9pXl5wR1NmeVFBdDljWGNSW1VaMVBUSWRlUGZNPVRuKmo2b1J3dktPWE5KVWV6ZW8+V2NLWD0rKSl1TT9tQDlzdVdkN2I5Tils''@;'; put 'put ''dEBJdFBHISZadW9ea04iImMzTHspPCJMekQkY30sTitNOCpoQyRnZUIqUn5LNnp1Unl6RXApRS56SytkRTRVTj0ib1ptQ1ZRflgyeHB7UjdLUU1CUSMhQXh3ejguXm00QmBrQXtWOl41SWtwRy9WcDheYVppJU1TRyh7Mz0mN2U5USZsYj9jZWFoKlJebUZFQkI4MkhlWyQ2cGlPSDd7bGppTWBI''@;'; put 'put ''NFF8ZjFkMCF+bDosTzl8NnUwbGNsMnNNMUxrQE8zZT5FKyoqT2ksT3twO15HKSR0PHZPOVFbKWZhIkc2S29NKUlCaSllPk1tKzRHITJYdTtFbj9bMTpBNE85SltBKSovQjZCYHs0PEYzNXBLLCt1eEMpc2F5YCk4LFJpRHZpUWA9fmFBcVpBcGNwfVEyREN1XVVoamBEK0VYJmlycFo4fjE3Lk95''@;'; put 'put ''TTMmSU9DX2M5eTU4eTIoKDpFXkwsLGlDWTZZcilmXTBvMmVAYmF6ODIqSUBjSzBqRjY4PEw3VWYjJFovWGpdOkZpXXtYXjtEbWpYMHArNiQicHR1Q31PLDJrdz5oSlAkWFNvR0A1RV1YTE5ycllCRkBxS2B5V1NvL19SUCx2UzE3X1ExSFg2citHaE9Ke1d4WmVCV2JSeFZOQW4ye3BzL2g4fihm''@;'; put 'put ''PG9zKUVEKUw+TENqZUB+OTI1QXhlOjdIZkpMakAvSSN5QCU8OUg8T296ZWpdRz1FdiF+ZyFSW0FvZXJDan48WTVGanYrOlVZeGAiTC8jcz0iR0YpZyFsT0dKWGhzdyM7W1FULlpIajdZfS5yX3sxOHFJS3NXJU09dFViPzZNQi5ZI2RWPXpyWm4iYFo2Kys1YittLjN1SkJxMCkrZ0VRVmkkRzxU''@;'; put 'put ''MDckTE5vNnBKdGAua0xEIiIxeTgyTzcqPDxfeExsbCNDZ1p7aEhvMG9Cc3pLPXlhWVNeO1BHaHk8VDA2Z2RSazA+Y08vKERdWXtGVW1KYVU+eylIWzQmW3ViZUVQUlNWeVdTVS88aypfbkozZyJvQm53Xk0pKyx3SGo/TE5mcEsqenlvbSZma0J6Yz9GKntpfjtTKCIlNEtacktzUEYkPi9TZTBL''@;'; put 'put ''UjIpRndtWyZ1ZEB0PlcqPS5KPVpzQ1d6MF4hIX4rIkpvejlWSm5YTExETypHQDdiWkVCbV9TM3tFcDFRTD5gWUZMInA0V3QlVisuVFA1UHEyfEd5Tj0mKzdIcjY3TndES1V+bT0xa3ZZWXZIbVkvN1V8NVkwWnRUWm5QTiZNejpkb3Z9KE52WDUyeyoqMXNaRlBKaFlaK15JLnZXWyU/bSRKLF1H''@;'; put 'put ''S3A7Sn0+SllZZCtxTXxtcEVXKV1jVGUyPm1MSTJecCo2flBpbDFVOT8kYkJGS3RwL0RKSlV5emowdl5rJklaLyxRak9rfDN1eHRqOVpQTnVNUTJJS0JuIkVTRT5nIjRae0FLPSFmVmMhVjw6fGAwMyE9bGRvWWNVYSNyR1MvXjxmJks2WntOTCQ1STFuUmtkPTxkNEtib3N6amxaSiFjfW1TejN2''@;'; put 'put ''P1pRfXs6O2dndGQ1VU9Qaz46eFNBZmVPfEtiaEtYRXpgajdjNm9JJUA+WTlGZDspJEwsS2RofDNZek5xcThbW319KUtJdzcmOVJlUFNKOHgjIy5KIzdsLFE/OVFabl1NMjwzdWZrdnpkanhpQnI4US9eZzIzT2JoKVgwRnMlNntlaFY9RVl6NVNBfHttWUhQanpzXiJ4djZCSjU4KGR8am0vbGsy''@;'; put 'put ''dWRoPjpRcDtieSZNeWM2T2MhQ1khNFo3YDwxajcjNVo9MVdqbWZYez16dkExNSh1NTp6X0VMbU1NV1IpSnhfRnJWVWNodHU+ZyRudWM0PSM6YyU7RmlsLzVCWER5clIyRWtpV3pBX3RGQExdY3M3TTFqQWBIeDx7YC9YPVE1b2JgMnBudm5ZQz5Yamg6ci5rd0JwZkJGLz5jdCU/a2VrS1FMbT1O''@;'; put 'put ''YSlBQz5hZl8vMHozJkFKO1QkfH1TPUR6ZDxmSXwpLnpQVFMqTkxMPz5FfGowckNkPWo1M0hYYW1DLFV5ZiEpXlF4fmkwV0V3d2l1fSlFPDN4XVdfO09RdWsvbCwpcFMzfXddcU9KVGs6R2FieDdqJEFERSNOckZ+aU1fPCRJbUh5aUJHaTRNdUFUOjI/bTNJandYW3g/YkxbSV9KPDI2Vm97WkVU''@;'; put 'put ''M1FzUVlpN3VNcX1pTVchPWBPbzkjVzc4bGIqdnZUa2Umb3QoYGQ8Y3hjIkxObTJKUyZjT09MSzVkL3xKKk9mXzhDbkkwXyppTVJKUl87SzxsVlpmX1UyS0YkUFRCLHA1biFrcUUwcyhjJTw2Ml1KTGpseSRaUTR9dk5xNHhHbX5icWtNZ34mNVhnOTBzIm5aSjM3fUM+PX16WkxgdD0pdVRTY2ck''@;'; put 'put ''blpQQnRxI3g5dE5+Vnk3RDp3cU5bJE4rdU43WEl7VnlHQjJIO1Q9bCZiUyhhKVk3PHBrd0tOdkByXW9LV2lvZmg9XlV2OVIkPigwLGgzJEw9Y3k4PHA8SUZ0QCRgZzc2akF8bWB3ZW46SGY1XmFwemxyMzFNLnt2NHNJYENGTHRQaipoUiF1TmlDWjQyfWxrUVJAcC5lRzF7WHVNcDxEKCxJendE''@;'; put 'put ''WjFIQyQsNixXQFJLbjdzOkcyVk1Ea19VeVRRNitiRkkoXms2YWxPKk5MI35ZWXgibVRDY35xYTZtRyUmJmszc1ByX0p7YHl2WC5SbURpPj59KHRBS3I9Pkw/e3IpV3ROOipMLDhNaSEvJlhaLCZKdm98KikyUTshSmgqOkpWbn4/OiQ/dlNrXlFrfVZCcH1XQCxuYHR6dTolZ3Zzcy90VHx6TSFI''@;'; put 'put ''K1E/bjVkbzpPXSF5OUI4PiZkR1JuUj9PcWsweHNFKnddc1BvcU5hRjJofSVFWT4hdVd9fDZabWlRR0AkRjBRWGd0NllbdFF8fWFGNEd4d0cqaWJOOE0+dGVfRTssdmZJKWskJj1CJDZgWFF8I1ZAPlI3flpLJF1NNXc0Uk9+O3BUNzIsV1hzPDtSe1c+WFtzUT08VUZ9eWxSZzwiNG92JmZnK0U1''@;'; put 'put ''Wkw5bmpGMmxGIUkiRTc+L3I0Nzk8TmM1Sk1IbGFfPFBRVVAkRlhRWTwsVShNa2ZiO2ZnPjxXcVVRP09FVXdhWkN3O24uOW9RYlRNOkclb3VsIkUlfjttVyQ6QDZLeUxHRGVaLncmfGMlPndOOFF3d1FGfD5XRjUiYDNvL1k/bzdIelFiMVtsJHs+QFVbSDlvZlB2RVB+KyJBXUssY24udHcuIzFS''@;'; put 'put ''bSlCWlJ3JVhwQjc+O0RhUyJ6flY4eTZqfTl1clN7N2dRRFk8WnFzelhQWVBAUTpTOFR1cnpYOUxHdzlSZDduenYqT3s3Z3dPS09kI1kyfFBPKXxSO3ZkbjwrZ0V8b28iWzFVYDJlN3g4VFNme0lhWUJkMiFTZlg+S2Uwc1U9UElhTSxmJld2MSZMMStsfjxeOFNdQiIiM01mRSpfQkFdYW4uKkBI''@;'; put 'put ''ZEppXWooej41WUxefCY+JVVyR2tIfkkzK1p4VUNYRHQvQnFNdFJoSVk9QzEsUkoheSxOMD5vdjYlVWRKWSEhZDAseVtDPyhCcTA1VE5gfGF1V1N6NHR2a1lmX0JYKnhgZ1hpOVJRITY6a0xQe0FoRD81dVB0VFhrOlJaI0khe0JxOU1XSlJgMFNKO3F5RFNxYEJxaWpqWDpZX3UvO3VhdjFTRmIo''@;'; put 'put ''TTldQG4paExjakspeS5zJkZ+WDEoWDJNPyRnTzx4SXVvVXskQnF5dkk3PXQlWC8lKzVzfD5XNn0pZTdQQTVrUjlYKkxnYyVMMDZEXzQhd21VIV05N1R2b30rbTp7YiJJK3R7NHFPJWpaTyQwSzddM2FlP1QpM1dHPml7ZE1nVUQxcnxod1VaMWI6JSpgYkViLmM2PiM4NlNub3ViKXkmTjdweEw9''@;'; put 'put ''dF0zRER+KEQ0X0Q1KUNOL1coRmRzdXovLDNET2M3UEFGbng6U3Q2XTNDRyFSI0ckaWtmaUVOLyY8aV8hUlR5fWcxRW9qR0pyej9faV9BcjVBVHF5QTIrLyxGUipbP3NZYEpNS3g2ZylhPjQudSlRcyssVm5XL1NUcX40Z1VQWFNXdVlhX11Wa3UxUyE1PVI8KEZSYmxYfFBhbF4uOD8vdzB6Q0k1''@;'; put 'put ''TCwpP2xiKVApX01QcGx6Z18vVXpJIkwoTlVwSFZTPy5tQDZBdz41Z1FeZjBdRlFjXkxpZCtwd01LUVp0OFQ3ZV5iVSo9dCQrJGAlSnIhUWolNnV5OTFQTTo+UUBWXVpMMXRoPWdkVm4zIUtWfTA3Q2w2Tzhne2YwQCF2Q1JYJWw/P081Li9SVyN9MWo8P2ozP0oleVIrYWM2PG5dZjBaUy90X1Uk''@;'; put 'put ''Yy8zWChkWGdkJTZjJGFQSjVLfSFdKjBiNmMhSSY1YnpNKERbTWs0KENrbHk4ekNgeWhuKk9tZjRoeFhVfGczZ3clNjZ9KlkhVH4+bWxETzB0R3QyOzdTKUdsMWxMUyhmT2d8WEt9P21ENUVoNk0qYm5ZXXs7d2s6PGRkQT9FcDQ2cU58KEpdfVFaIzZnJD4xYGdkaW5pd2tfZlVUSHdkOzRQKHc1''@;'; put 'put ''KXIzUX1sdVVVekxMXztTMFp8UTNadz9nIWhjYDozUUV5M2Nse106czttfj5pdmAqe3pjfGc/YipBMWZ2c0pXY3tdcE19bGx+MHkiIyNzeyp0MjxmMWhdaiV9aVJRKHN1bHxAZXkmJUhoS2JoMEFdZV9PJH5vSW9oKS88P3FUZHZpLGM/UFUvRyhVdV9QVVh4WC5WSnBQKHNbenF8MTQsSzdjXlFa''@;'; put 'put ''NW5nNFkja3A9LEJiLDl9OUdURn48ZSlWTF9DYm4mdWV4QlA0fnFEV0c+aU5Kal8uRTlYW35iMnhQfX5WYFBCW3xoNiJLNC4hVD1TfnMpN2FQeDNHJXU0a2RALz5gL0d4TF98YUJfOy9gLn46OW18an06OXdbP1k9OWl8MGA6OXNbN3Q1fjNvV1c1fWthKXJCKSJub2hxbiw7QV5fNj9aZHN5SmVr''@;'; put 'put ''fWxpJW00XX56SWB0aSxYeGhLL04vOSpse11ydEpSTzZQKEsjPF9oOFYvaDg9QjFMNH1tLlAqUjp+aGJudUo/JkY3JHVISWFje10/fH5fXjskYE09OjkydjlEY3NkcTpfcVs4Xzl9Nl9eXypAcy5lfFRlYF88a3dBMXJbMDxrJDVjXXk1VS5xcXdBfV17d1FrNj9YVSg+WDZeLFIwPVZ3RXQoZ2Bl''@;'; put 'put ''Q184KSxeRSR7Y3A+ZHYzNntrUkQmJGE/O0RzIzJtL2l0fSY5ezs4KTVRQDFSYjA6R058bTNSa3hyIUZxQ2t+Nmp4OlkoZVMpYkl9azshb3UvcWpFbnMiJiw7bXNPPjt9fVhwN0RWbi58fWh5a0ozdWljXVhGIVImdFdMfF4/ImcuOT91R3xzT0lgIU98KDBJSXlya1JROkklYzQifnE0JHRwMUNh''@;'; put 'put ''ejxLMyJET1NfX3I8Ln1kZEhGN285ayVUflNsKD59YSg6OWRxfF1ZT1EoXmkpcnNUc3BefVltfV0ufE07XjtEU2tfbFNgKj9ZNGhILnRtVih8MXQyZihKP1diVigrSShxN30zeEwqRzc9KXZkMFkmI0BRY19aQStWLFUrejpfKDJLOn1HUHx4Qm9oM3dkYEgsRT9MazZJKFVVJiZFNFF3RDRoKyxN''@;'; put 'put ''flUoZjEpJW5zZFFNZFp8Q0pgPylsOjkoQEAqM2hpLHRte2QyPiMvZDs1fWg4XjsvUltjfV03fDMiQ3VJMVMxPztdIm5bNVpkc3Q2ej8hWDY9bzNtXXVCMWg/LyRyPWJSOVcqZSlUd1RrfVhFfiUwZE9qfDlPVmxiYEtYSDYkXnhVMWh4RDFGPDJPdDFlPG9NdH5+bU58NCI+O0YxT2ZzZ3dvKFg/''@;'; put 'put ''eEc/O09AbzF+fSRdPn4pLDwyYF9xekVWWi81Uyl8MUBMNC8pJDkifGBtTmR3fHJ7MDVDKn4wMGpoNjhgakQuaW5uRzs6OSJ9dHthWzEsNVMlPztMcDolPXZRZ3I7a0MmSio7QGhzM1psOmI/Xz8xaEo+RiRXKGFAWlNNfko6OlE5NH1sQF4vQjs8NX50bj1+YURlUUhTL3x6KyhoRV47MGkoSSh6''@;'; put 'put ''cmJ9Tz9yfng8LlFoTXw0Vj9Ddnx8bmVLYmMpbypsSnNKbXNETyIjO31oYn1dLyYrPmhpJElXcmxzYyhBPSNoLFF1X1FSX0ciZmxzfCZXcmUoY3shYjxdWn4zWjZNZXZdQ0cpKClMRGwvJHIhTlJqSzFedEZ1IWh7XWhmPV1ZbF0qWEhQfD5IPyZWeikla3NYJlh9ZCh8PUxBY348UyY5fntkOmtE''@;'; put 'put ''fV0jeW5oeCs0VmZmMWh2QWRINXZHSF47XTdofmxkIV9yUUtIbm88Zy5HZj13dngkIz9Ybys+PTJ0fVUxOUBKY09nSGBHYmh0bm9BVHN7bD5XLmZmNGBHYiIoVSVsSiJmaVNPcW0jJjk0KGhLTGIyPmBJKHJlTnp6RXoiPl1mXUlXcjA/dF5AbCZaZHN1Kl9fVXAvN2ZjMSk6IzphSWM1UUdwJTci''@;'; put 'put ''KEsjNUp3ZHx+Um1Oe2hzeG5yKDVbYy9eRFAoInQpcmklc0prc1VMIiMsfShWfGx4fEhxVUE8MiVzJjlGQEExPDlEQEAqWE8uUSxkQCZdRWd8LzA5Ki9LUCg7eGAobCFOUn4jSDc2fWthUCpYJCVea2VqPzAsbGUqTHJDY185SXtANz0hVHB1YzlUNSYlS2YzVnJDLzlbTV54SEskTHpLP1ZVWWc/''@;'; put 'put ''fXQ6RyklaXNhSiFUOChiOCRjY1EqPk9TTS8zSG9HND8hVCtadHlAek0vTFRGZjYxXyJRZD0wPztYIzxsSnZnLG5RZD5KMm5SNH1SLGheJX04WEh2K2JAeklka08lPCh2LlsxKVI2WX02d1EqQTEyaCQqKEVTKFR4QFFrX3hPakdBPTNLZkk7SmF4Jjl1WGZzekA4Y3ZOfVMofWxQI0JKQ3tTfiNl''@;'; put 'put ''JDZZKX44KHYhUX56MDV+YlVkUyJzfFdNNnx+aGJXND5bKzFkP0RjOEkrNyt+S3A4fWB+LFk/YS5+PzpdfkVyYnR6azQ+XVh5QiV9U0hCPTcsdFd9LF4pfTlRUEIiUzhzfisoOGdNLD1+M1cvYHIrems3K11YM0BKViJzNUZzNz5+O1N7fk9yZTx9fU87QjM0fiZEO35KNnFbKjEhfWFISiFjc21q''@;'; put 'put ''X18lY147O18jKV87Ol9VMS85MD8vSzJoRSohYEB7OzhqbmRzOXV0fFJyS3UrKVd3aUwqOCk1PVAqQlMqYk5EUHtKbT5iOzUqY25GUFtBdCtBPFE/VlB8PiYoQTleKmhDaCRYfWZzbUZBdSJmNE5ycCN9TUt8bGtfciRfOyNfIV5aNHR8KWxQTFtNJjlzcCF9YWA6Oyl4UFdKS1YvTHMhfipEQ2BM''@;'; put 'put ''a31+eStDfkNJW1hUXVJ5QXRwRk8pbn11SVlsLEcsPH5lZHN2aylyd3RKL3lwbzFyPzk8LilfYThYdzFANHo/OnZhfH5ANUMzTDZDcH1gMDlzIjshPmxCOCRBe1Z1Vn56VWBzUSNWZTN+fHomNHhLeXtvbFpXSVteRUR8b2wvfiJPfXNiMXBpWWA7KV99QWBdN1Q0c2FUKX19aEFUVzxveUZyW0VS''@;'; put 'put ''Wnw0am1OPygmfFtqUDJQKDoybHxQNTJoIlFVQTV8KUp3c3VZTENGPlk1KHZGUiFfKVZ4d2lOTFJ7aXFBT3FaaU5QLnojS0w7UCg6UiZ3ZH5maU5FUTliUk0yMShjWiRCUTlQUmJCNWs2fTZVZEI+dDFlP0MkU2haZlpUNm0iNFBXNlp8c3pYVVt7dDJsJjI+Q0ciMjJOYm5OZmBLUmg1bHtIXWVr''@;'; put 'put ''eEYpYSJbVTRXeF8xJmN3bkNdcyJwVnZdUGJua09pfl1JRy4oWzVIdkVtPjkoNGA5eH5DP2ldfmBHNjgiQEU4UXRiTVMxPExPRTNZaChwZD50Yk1JenFLVlo/QjUpckFQfExIeDJTdGw5R09qbDI+a3RsfHUsXTt7QDl9N1pLKi5kZX4rN3Rfbk1xeDojdWp+R0Q/P1koeGJtNn0zWlIqeDpWIWh3''@;'; put 'put ''P2FkZDAxQXQ8W2R+PGh8ZlIzM3AhbHdyfk9jc2FqMT9TWFV8ZCRdKixYWzFkPyU4ZlIuUUdJPlZJMHt+I1Nkc2ExcnxARDY+bH00MW5oLlFVISY5PVlhbCo+fEhrSWJjIXNLPUliLD5KcWx4ezthKFgxd2YyPlpHQm5eX2QwZXZsPiRiYF97NXYvWWlgM31UZ3xvM2hjJXIsTntOaiU1YDJVL18p''@;'; put 'put ''amVzWHtTalRMei9+X1NObSZxfFNqZXNPJDlpUUVoRDZmX3ZZSDpfQHJldjs4UFBYSEguPiV9R0diRykvQE4qQlMhRVtxWFclKnZvWEpDMHdHcUoxZT5jZmh0ZCN1QjYuVSEqSksoTixhYStnRGpVZmVVdzk/fHdjfCtaYHRqMENtPFFgd3VfeXoleDMsL3QvNTB3aDZ0JWtHTypZZGpeXk8wZDhf''@;'; put 'put ''PXk6SSVhZngrN1ljJXUqdW5YM0QwTn4+fktDZFUuWHxXWjM1T0QxPzxaYEMlLiI+Ij5aS3hjY2d4b187eF8ramRzWnp7VEp6UTRdYz0/U141UFVONzVnKTpmXVFuMTl8N2o+Pz0rX18vOCVoRlY1YzdUeEVgdz4mMFlpKTJiblJNMj8xcnxGQylVKVBWXzh9cmpKUCNzdUVUVFBXWX5rOSsldUdu''@;'; put 'put ''LjF3cjxTLCZ1dkBURnJrYDMxTSxVUVo8QFh8YTk7Pyt8OH1bNTRFNHxxfCw8NmNgbGliWC5tbkA5SERmc0R4THtzQjtFZ3V+Pm4kWHhYLkloaDZKaS82Yk9qK3glMDx1b3ZsbnZeZzdTU2IkaTQwd2ZiVjFIaT04Ol1sITxRd1syJC5sPURIPiRQSklSMmsrd2tVVDgxWjg4UjsyZD9SVDgubTtm''@;'; put 'put ''KEZnOyVJfiQyJElYWWgrLiNCfTkiSXo5YmIjNXJeZzhvNG5ecHUvKm1KcTtVY0FZYFNbYXMoTEYwfDlpUlJpTUdoQmNBSypqcEQqV2k2dlpxVGRTY2xyRTxwcWtJWVB3QVJDMndwa0xGalZoZ3JVVFNQIiRPSSVTMTE7STRrQX1BTjdlXk9qTkdeVzUocFZFSipVcmkjeTNDPUl1UmMxaCJ8PE4v''@;'; put 'put ''OWp7bk0vOWA+V1QxaHBdblE+R1Y1KFVhKD9gL0sxaDldRyhIL3NBfjpjc1J6Il9RKjh9aDVsd2J7K0Robl5xdHtJfjlgMXVvfiViaDZnfSgyZWdSY05dbzFUe3Z+P2dsUGZzS345YWZzQ1tsITtxSFNte3ZvVzR7JEguQ313alNXYzF4Om4/K3p1c3RIRy9+NTtjUGA1T1hXO0ROMiJgfXQofWZY''@;'; put 'put ''ekYqME4yfWArNzR9d1VTNF9XTjI+fWt0Z1czMEc3V3tAWiM+cnROMjt9VXZSV189dWosPit6fX4jUllTNHxoYTR9Om1mZ1UsRGskc0lsLHpePipHIUpHYj8oTlNfWHJ+KF9qd2BOfiMuOFglOkh3azN4JX14MT8uOzRPV3grdHxSck0val4iQlg0JTRhQ2IzUCJ0ejdua08wRGMqRVVWQGwvO2Fy''@;'; put 'put ''T31fNFF2RHpQR1UuTUxIOFk6N1RGbUFxaUFKWy4mTnhMZGxYWCRXSEhjN2ZIOnUmazglPkZAdEVSV2I7d2suOHRZSTlKKCgwOmZyNEBXdC8ldyE+ezR0czZkRlo4V0djXjdbZXRVWmZffiFEUH02MUV7cURDW3ZRRyJANWI8dWRmNEVHWEdwayE0KjlaJHQyQnJPZzVbd046VUllSSRLW1UiOERN''@;'; put 'put ''ZDAuRGA9WiE1dC9rdV9eX1tBOSpmQF1EcGE5NCxxKGQwRH4rPz8jVm9mLEhRTj8vMzYya3VRWnFfKEsvUW95c1BlKTdidCI5dUVaMn5LMihWeFVBUT4lYW16L14lJFt6dDswNHViUWdUP1t4fG1IIiZLKitYK3pedFlxMntbJWVkKmB4aXQuNkJGMzx8eFo5fVJ8NmJYQXJ3ZGZoNXoiNiJCUFFA''@;'; put 'put ''fiIzY1pbdGtiTl9ZL1syRUhPaD5HMEdmPn1DcGgzPiRoPEFtVE9LLnhBeDpYcFQwfGo8XWFEaGlsJiIkMmRQaDBqLD5QS2Rvb1VVYn5NJCU5KEM6fmE3Xnpfb3JzRlFmMEY/cz04KFpLMXMxSCZ5I2p8TyNxVEg2Z0lvO2Bnci4meTRHdC9baFF1JVJZWFdxZnF3eXFHODs2Szgvc1p3dWVeTSE5''@;'; put 'put ''OVFseF0kJTZgXiNmNSRiZDome2x4dypuYjF7ZH5PdFd5P1ttJSpOXWMkUCl5NjApc282dSxoYXskO1VkJG8rZ01mI19Fezh1XkFGe2YjTX0kaFB2XjdQUXBjJEYhJEE8Km1RW2J6Uz5OYFAuaUouQnFebTREOnsjfGRYLm5UY1EzSi4vYCw5Rn5Xby9KaWJQfiUhK2k6WXs0bXpdUTN0eUxFeiQp''@;'; put 'put ''WlYkPzRJX1EsRD41Zlg5RUJ1WFN6OygqXXZjMVpCM0Y5X0g1NDY+R1dZdiw2X2l0ZmU7aDg/NHd7VXEzMEVrNHZWbnk7Km5NSnFvNU9qJnkuS19ebD47OXE8Jm1CZnklSj1XKmZPWXxaOmR6aG54ZE9LcmtGaDNwM19QRFlVXzBJaVNdezYzb2c1cnlBM1h8VjcoXXpMS0tMUHNzeixfTF95S2lf''@;'; put 'put ''KG12PVM7PGtLKUw+YXQkVC5gImdCVXlIeVt6fXxTP3B+a118QmpBPFdpNzxJZzd1bnMyPHJdKE0uXjo+TXJKOF88dng3XzZRaUVFIzVxIilqWCF1U0dNMkYweEc1X2FNI04zSkMxIUMhKFN4Vi5BWHNRcD9uK3hRc285YW5fLDhZeV9neXs5Q01LQlVJe3U1PSJJP31DTUJ0KSsscnt+Xzg8IlN5''@;'; put 'put ''Q2xuRVBWSXxkdnQqbWY6Sko3Kn5gUHlDJUVhfEJTL1ZQKHllWSV2fEU0dllqYTlsLHVxVXBKUy5rSXhhOnNIOUMqdFVRdG9URk4zR1grdi8yZ0wuKzZuW28sb1hUeiRfP15tZmxgQy49bXgyaEg8byVRfjFvTipjZSVdKi9NcDFaOVR1V1c2KXtwOEtVdzx3TWRbO3IrKkw1SSQzKkZ4PVc9TipW''@;'; put 'put ''LD1dZiI6PFljNC9pOEVEWEhaOm5ETXQlPH09Rl0pN15ENFZHPzJsYDRZQGBgP0tNelpHMDU6TkRDWiVEOTkpVUpbXU4hfTdGLi9aPzAqZmtvenI0Q1JJK3p1VCFmTz40YiswM0tUQEwhQFpIX2YhT3pQYjFNTV5BY0YmOlFLbH4jNXxXPGhMbSxbTXl3IXA3MjRwbm5RJlV4RzdDaFk4ZjJtdiNk''@;'; put 'put ''cHRCRTFOWlNCQy5MeUpSNFVrQDVMOD90NSU7fShse3AwXStUdHB7PExBWCFjNVs0TFNjQkpAL355RUQpdE9rUDZnL3pgPjVMQnFCe0VzT1kwPEBGM3xIMHZ7ZHBSJXBaPUgqX1NaLE50RFZZOnoid10yKWxsJF8rNFFtdHVsSjdUIypQPG1uSXU/VnFyWWxoKjdmdkwvYTZGbyh7KyZ7Ly8zYT5i''@;'; put 'put ''MkZuSGA9MUBXY2JgX3c8dXJGVWZMLEF6dGVRPjhOX0Q8cCI3YE40LGVBTWVlO3xgMnJbRlhscyViYEx0VnJmWHN5cDZGbz1CcjMiKnBediY/Y09FN0VpYlRNRF99JWpwaS5eey9nKzdwd2hePVAwMEcsTmpzKUZmMiFrSltQJSQ5TXt2Py9IZnl5PGEhTW51fFhmKz0xKVt1ajJaOiFqaClaJmd7''@;'; put 'put ''cyZRTERFdGB2TE9OT34vZCllaHQjc2hOMy9hRjZ7dlcpfVFHS31tUnJFMDtoLyRHb3loNDNMO21iW1IxY2AxfmIzVF16TDo1Wkt1WSV+YmxWcCp6Wj9NRGJJPExXMDxtMEYsR3pXMj9zcEgldlI+KHEyPHUvWnZ7VHdSYVMwNSRVTSZBeiIwbXUuY0ByNUB9UHMzUl9CRSZucF1taVs3YyQrcnla''@;'; put 'put ''c1gyd2lpO3xHU1RzckZ8Mjk9QGpSW1pjVTY8MX5GL0FCMzNiPmMkNE9Rdy90T3E9YHZ7Iy4yOT5QYXhXZVdXeDFmOjE3NFI6R3hWdFN6WHsjdDUoMChjQjg1MEMieThFPyVyJWl0KXliIlRDSWNuNCVwSX56elJxQSE/fXMsXykpem9lKH1PTD4sJHteald3THU+WWp1PFhVeVo0fCMzW11PJnxv''@;'; put 'put ''eWJCPjgkYTk3NCVeWmBEdjxycDJmSVdOImlTX2s2VmNjNTYwYTRLaEhqMDc/K0YlU1kieEw4Mz4jaSg4RWpkaVEuazFyJU1uP2tXa0tKZE4qJi9HLDFXYDpXNjN8ZTFLe181WHZWLmlXbTc6TGBLNjVUQSgpI2F4Z1pOT35LM0UlR21BI1p7OGZLfW1LQDpEd19nLDpDR2llaWZZTGRVMilRYWI+''@;'; put 'put ''XTEuZWchK3pqMVk0YTNCZjNneDY8Z0Y5PUNkQCpjb2shIXRrajYmVT0mOD5FYj1rLixsKDA8cClLYUBnYzU0VVAoQiZxd1h6dXFpQml4TVdGOEhhTSUxJH5OW2l2ZywvIVg0XkB7ZSloN0xoKXlBZG1jTmhobCM8OCshZVQha140WiVkSE1GPTRQamtZXThlND9KU0Y5T21zPmg3IUNLKmEsQ1k9''@;'; put 'put ''UDJaI3Y/YjckN2JgK0IqZDBgaDZbbkZuLzgxeWl8LzgyZkRMUXl0aFlZVCRNZEVEKn4sXT5iZmRCZyNoOTR8PmpMVEJZTzg1MVV9Nmp6YXF1WD1aMjQwX11VQ0FIXVtDITQwSUZicGVRYVhydy9JI0xNcjI5WyJ7Nz1tUmhjeSxkIjNBSSU5PSRIMyYoTHVXOSxtc2RkPkNafXJ8SWwuZlhCalAj''@;'; put 'put ''Iz00Sm42QX5YKUc1aCVBS01QT2l4QlhzM1hOQzVRdFR0LyxDZHNkTGtxfCQ5QUxrYStrR3d5T2MqLy9sN1prJS8wP0pdWkR5fkVjbVs1bkl+MDE6U31TZFh5L1Q+I19KanZ+PSw5NCg7aXh4JCQlQlpIMzdAVTE3c09sSjZ2KSIyXyVXbEhke2FmSF9qVWYyPyNSKEZtNklhZ3gwckBYPUBxKDd4''@;'; put 'put ''OGljS2c3MzxKbzN1UnEpL3VsQzYxfXVFcV5STTkkdXZFOTVwJTs7YGQwYjY4UH0oUy9EWHdVcml8aCRlVSZbWT81RjNMKVsvSz8wYzh6QGRUb1ZzQXtPNWhtaz44Ny4wSn5sIn5ra3NBaWcqSWM7R2pPQ2NdVUhyRCVCeFZdfFprOTQ6blRjQDgodiMoWSZBVWo5UmlgRCREcmJsbyNKZjRsejVb''@;'; put 'put ''IjpWcVJYfHUsKGp1REUxWC9LVHcvVmdpY1dxSDE0fmBFYzFYT0hFSGI7Q3o9OjEraFpjLmtZZ1hNI29fdSUscXheIUkkbW5JVHI2QEpkTDV2UEJ0RnI6KTx5NktuSSlAMUp1MzZAa1pCdDFNeWduUz1lcH4jdjE+SVF7T0R7NW9TZ3ViIzQ9Ukl5OlgrU0VxUWdJfnY4PiM+MzlLImojfHo0UVYk''@;'; put 'put ''KzRYdVtjMUxkVU51MWZSYnE4Z0ddXyQiVE5fTTdyS3JHX35yPUwxUEUyP31pPSp0MyNjXWtqaElSa3xgNiptT2EvST4oQEA+cHhkQSVrIV5wdSlnUXd7dnIpX05xO3V6W0MvVSxySUcvUE02Y3xkcy5mZTQwJm1yNjhLUl5fN11FZlBCenozUXhaeT15R19hWiQmWjl3QUlgOyNQfmcyZTFqZzMj''@;'; put 'put ''I2tGP1szViNZay91YyomWSMvSChUdnokJVA5WlBzYTVddjl3dTU7U0JASj01SWlmV1FYSTBVQScpKSksTkF8fChOQT1CeHQoe3dhc21CaW5hcnk6RnRlLGxvY2F0ZUZpbGU6dm9pZCAwfSkpLE5BfWZ1bmN0aW9uIFl4dChjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lv''@;'; put 'put ''bj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRo''@;'; put 'put ''fSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gR3h0KGMpe3JldHVybiBjLm1hcChZeHQpfXZhciByN2U9Y2xhc3MgSXd7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4gWnh0KCkudGhlbihsPT5uZXcgSXcobCkpfXN0YXRp''@;'; put 'put ''YyB1bmxvYWQoKXshZnVuY3Rpb24gV3h0KCl7TkEmJihOQT12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9t''@;'; put 'put ''b2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiAkeHQoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4uLkd4dChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxl''@;'; put 'put ''KGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goSSl7TT1JLm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2''@;'; put 'put ''fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIsST0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2''@;'; put 'put ''LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goRyl7ST1HLm1lc3NhZ2V9ST1oLmxhc3RFcnJvcigpfHxJfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoSSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoSSk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpN''@;'; put 'put ''fX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRfb3V0LHY9aC50cmVkX2Vycn1jYXRjaChJKXtNPUkubWVzc2FnZX1N''@;'; put 'put ''PWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAsZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlz''@;'; put 'put ''Ll9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChJKXtNPUkubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJy''@;'; put 'put ''b3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQp''@;'; put 'put ''fXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdv''@;'; put 'put ''cmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIEZOKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIE02KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gaTdlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9Rk4oYykpLnRh''@;'; put 'put ''Zz0icGF0aCI7dmFyIGg9Rk4oZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBJPWQucG9pbnRzLnNwbGl0KCIgIiksRz1JLm1hcChmdW5jdGlvbihPbil7''@;'; put 'put ''dmFyIHpyPU9uLnNwbGl0KCIsIik7cmV0dXJuW3pyWzBdLXYuY3gsenJbMV0tdi5jeV19KSxpZT1HW0cubGVuZ3RoLTFdWzBdLHVlPUdbRy5sZW5ndGgtMV1bMV0seWU9MDt5ZTxHLmxlbmd0aDt5ZSsrLGllPUVlLHVlPWplKXt2YXIgcWU9KEVlPUdbeWVdWzBdKS1pZTtpZigwIT0ocnQ9KGpl''@;'; put 'put ''PUdbeWVdWzFdKS11ZSkmJjA8PShwdD1pZS11ZSpxZS9ydCkmJnB0PDEvMCYmKGllPD1wdCYmcHQ8PUVlfHxFZTw9cHQmJnB0PD1pZSkpYnJlYWt9dmFyIGR0PVtbdi5jeCtwdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0oZHQ9KGR0PWR0LmNvbmNhdChJLnNsaWNlKHllKSkpLmNvbmNhdChJLnNs''@;'; put 'put ''aWNlKDAseWUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9Rk4oYykpLnRhZz0icGF0aCIsaD1GTihkPWMuYXR0cmlidXRlcyk7dmFyIGQsRWUsamUscHQsSnQ9ZC5jeCx2bj1kLmN5LENuPWQucngsdG49ZC5y''@;'; put 'put ''eTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgTW49bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikscnQ9KHFlPU1uWzBdLXYuY3gsTW5bMV0tdi5jeSksbXI9TWF0''@;'; put 'put ''aC5zcXJ0KE1hdGgucG93KHFlLDIpK01hdGgucG93KHJ0LDIpKSxHbj1xZS9tcixhaT0tcnQvbXJ9ZWxzZSBHbj0xLGFpPTA7aC5kPSJNICIrSnQrIiAiK3ZuKyIgbSAiKyhFZT1DbipHbikrIiwiKyhqZT0tdG4qYWkpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrKHFlPShwdD1DbiotR24p''@;'; put 'put ''LUVlKSsiLCIrKHJ0PS10biotYWktamUpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrLXFlKyIsIistcnQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIFh4dCgpe3RyeXtyN2UubG9h''@;'; put 'put ''ZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1j''@;'; put 'put ''YXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwo''@;'; put 'put ''Yz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLEh0ZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksSHRlLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEp''@;'; put 'put ''eyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBIdGUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBv''@;'; put 'put ''c3RNZXNzYWdlKGMpfWZ1bmN0aW9uIGVFdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0''@;'; put 'put ''aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdl''@;'; put 'put ''ZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEk9e30sRz10aGlzLl9kaWN0aW9uYXJ5fHx7fSxpZT17fSx1ZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gcHQoR24sYWk9MCxfaSl7KGZ1bmN0aW9uIHllKEduLGFpKXt2YXIg''@;'; put 'put ''X2k9R24udGFnO2lmKCJpbmRleCI9PWEpR24ua2V5PWFpO2Vsc2UgaWYoIiMiIT1faVswXSlpZigiaWQiPT1hKUduLmtleT1Hbi5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIE9uPUduLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oenIpe3JldHVybiJ0aXRsZSI9PXpyLnRh''@;'; put 'put ''Z30pO09uJiYoR24ua2V5PU9uLmNoaWxkcmVuLmxlbmd0aD4wP09uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PUduLmtleSYmKGgmJigiZWxsaXBzZSI9PV9pfHwicG9seWdvbiI9PV9pKSYmKF9pPSJwYXRoIiksR24ua2V5PV9pKyItIithaSl9KShHbixhaSksZnVuY3Rpb24gRWUoR24s''@;'; put 'put ''YWkpe0duLmlkPShhaT9haS5pZCsiLiI6IiIpK0duLmtleX0oR24sX2kpO3ZhciB6cj1HW0duLmlkXTsoZnVuY3Rpb24gamUoR24pe0lbR24uaWRdPUdufSkoR24pLGZ1bmN0aW9uIHFlKEduLGFpKXtoJiZHbi5pZCBpbiBHJiYoInBvbHlnb24iPT1haS50YWd8fCJlbGxpcHNlIj09YWkudGFn''@;'; put 'put ''fHwicGF0aCI9PWFpLnRhZykmJihhaS50YWchPUduLnRhZ3x8InBvbHlnb24iPT1Hbi50YWcpJiYoInBhdGgiIT1haS50YWcmJihHbi5hbHRlcm5hdGl2ZU9sZD1pN2UoYWksR24pKSwicGF0aCIhPUduLnRhZyYmKEduLmFsdGVybmF0aXZlTmV3PWk3ZShHbixhaSkpKX0oR24senIpLGZ1bmN0''@;'; put 'put ''aW9uIHJ0KEduLGFpKXtpZihkJiZhaSYmKCJwYXRoIj09YWkudGFnfHxHbi5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1Hbi5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgX2k9KEduLmFsdGVybmF0aXZlTmV3fHxHbikuYXR0cmlidXRlcy5kO2lmKEduLmFsdGVybmF0aXZlT2xkKXZhciBPbj1r''@;'; put 'put ''dGUoR24uYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgT249a3RlKGFpKTsoR24uYWx0ZXJuYXRpdmVPbGR8fChHbi5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiB2eHQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNl''@;'; put 'put ''dEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxJPVswXTtsZXQgRz0wO2NvbnN0IGllPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoRys9aWUpPDE7KUkucHVzaChHKTtyZXR1cm4gSS5wdXNoKDEpLEkubWFwKGZ1bmN0aW9uKHllKXtjb25zdCBFZT1oLmdldFBvaW50QXRM''@;'; put 'put ''ZW5ndGgoeWUqdiksamU9Zi5nZXRQb2ludEF0TGVuZ3RoKHllKk0pO3JldHVybltbRWUueCxFZS55XSxbamUueCxqZS55XV19KX0oT24sX2ksZix2KX19KEduLHpyKTt2YXIgSm49e307R24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihJcil7dmFyICRyPUlyLnRhZzsoImVsbGlwc2UiPT0k''@;'; put 'put ''cnx8InBvbHlnb24iPT0kcikmJigkcj0icGF0aCIpLG51bGw9PUpuWyRyXSYmKEpuWyRyXT0wKSxwdChJcixKblskcl0rKyxHbil9KX1mdW5jdGlvbiB2bihHbil7KGZ1bmN0aW9uIGR0KEduKXtpZihNJiZHbi5wYXJlbnQmJiJub2RlIj09R24ucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0''@;'; put 'put ''aXRsZSI9PUduLnRhZyl7aWYoR24uY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE9uPUduLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBPbj0iIjtpZVtPbl09R24ucGFyZW50fX0pKEduKSxmdW5jdGlvbiBKdChHbil7dmFyIF9pPUduLnRhZztpZihNJiYhR1tHbi5pZF0mJkduLnBhcmVudCYmUThlKEdu''@;'; put 'put ''KSYmKCJwYXRoIj09X2l8fCJwb2x5Z29uIj09X2kpKXtpZigicG9seWdvbiI9PV9pKXt2YXIgenI9R24ucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oSHIpe3JldHVybiJwYXRoIj09SHIudGFnfSk7enImJihHbi50b3RhbExlbmd0aD16ci50b3RhbExlbmd0aCl9dmFyIEpuPWZ1bmN0''@;'; put 'put ''aW9uIF94dChjKXtyZXR1cm4gZnVuY3Rpb24gYnh0KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KEduKSxJ''@;'; put 'put ''cj1Kbi5jaGlsZHJlblswXSwkcj1Jci50ZXh0LnNwbGl0KCItPiIpOzIhPSRyLmxlbmd0aCYmKCRyPUlyLnRleHQuc3BsaXQoIi0tIikpO3ZhciB3aT0kclswXSxlYT1pZVt3aV07aWYoT2JqZWN0Lmhhc093bih1ZSx3aSkpe3ZhciBmYT11ZVt3aV07aWYoKE50PWVhLmNoaWxkcmVuLmZpbmRJ''@;'; put 'put ''bmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTApe3ZhciB2dD1lYS5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLHFyKXtyZXR1cm4iYSI9PUhyLnRhZ30pO2VhPWVhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF19KE50PWZhLmNo''@;'; put 'put ''aWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixxcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTAmJih2dD1mYS5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKHFyLG9uKXtyZXR1cm4iYSI9PXFyLnRhZ30pLGZhPWZhLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF0p''@;'; put 'put ''O2Zvcih2YXIgSHQ9ZWEuY2hpbGRyZW4sTnQ9MDtOdDxIdC5sZW5ndGg7TnQrKylpZigicG9seWdvbiI9PUh0W050XS50YWd8fCJlbGxpcHNlIj09SHRbTnRdLnRhZ3x8InBhdGgiPT1IdFtOdF0udGFnfHwidGV4dCI9PUh0W050XS50YWcpe3ZhciBIbj1IdFtOdF07YnJlYWt9dmFyIHRyPWZh''@;'; put 'put ''LmNoaWxkcmVuO2ZvcihOdD0wO050PHRyLmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09dHJbTnRdLnRhZ3x8ImVsbGlwc2UiPT10cltOdF0udGFnfHwicGF0aCI9PXRyW050XS50YWd8fCJ0ZXh0Ij09dHJbTnRdLnRhZyl7dmFyIGFyPXRyW050XTticmVha31Hbi5vZmZzZXQ9YXImJkhuP3t4''@;'; put 'put ''OmFyLmNlbnRlci54LUhuLmNlbnRlci54LHk6YXIuY2VudGVyLnktSG4uY2VudGVyLnl9Ont4OjAseTowfX19fShHbiksR24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihhaSl7dm4oYWkpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgQ249d3MoZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLE1uPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTtDbi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTW4uZG9jdW1lbnRFbGVtZW50fSk7dmFyIEdyPW52KENu''@;'; put 'put ''LnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxwdChHciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksdm4oR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRo''@;'; put 'put ''aXMpLHRoaXMuX2RhdGE9R3IsdGhpcy5fZGljdGlvbmFyeT1JLHRoaXMuX25vZGVEaWN0aW9uYXJ5PWllLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKEduLGFpLF9pKXt2YXIgT249bnYoR24pO3JldHVybiBwdChPbixhaSxfaSksdm4oT24pLE9ufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rp''@;'; put 'put ''c3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBITihjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50''@;'; put 'put ''aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgYTdlLHhFdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/''@;'; put 'put ''KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBOdGUoYyl7aWYoIShsPXhFdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgVnRlKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxb''@;'; put 'put ''NF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIFZ0ZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1j''@;'; put 'put ''LmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53''@;'; put 'put ''aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiBvN2UoYyxsKXt2YXIgYT1I''@;'; put 'put ''TihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIp''@;'; put 'put ''fU50ZS5wcm90b3R5cGU9VnRlLnByb3RvdHlwZSxWdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgo''@;'; put 'put ''MSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgczdlPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhl''@;'; put 'put ''ZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gd0V0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxs''@;'; put 'put ''KT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5vN2UoMTAwKmMsbCkscjpvN2UsczpmdW5jdGlvbiBURXQoYyxsKXt2YXIgYT1ITihjLGwpO2lm''@;'; put 'put ''KCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0oYTdlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBBcnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikr''@;'; put 'put ''Ii4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrSE4oYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBsN2Uo''@;'; put 'put ''Yyl7cmV0dXJuIGN9dmFyIE5OLGFmLGM3ZT1BcnJheS5wcm90b3R5cGUubWFwLHU3ZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gREV0KGMpe05OPWZ1bmN0aW9uIEFFdChjKXt2YXIgbD12''@;'; put 'put ''b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9sN2U6ZnVuY3Rpb24gU0V0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxJPTA7aD4wJiZNPjAmJihJK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtSSkpLGYu''@;'; put 'put ''cHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEkrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShjN2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpj''@;'; put 'put ''LmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP2w3ZTpmdW5jdGlvbiBNRXQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBs''@;'; put 'put ''LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShjN2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsST12b2lkIDA9PT1j''@;'; put 'put ''Lm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBHKHVlKXt2YXIgeWU9KHVlPU50ZSh1ZSkpLmZpbGwsRWU9dWUuYWxpZ24samU9dWUuc2lnbixxZT11ZS5zeW1ib2wscnQ9dWUuemVybyxwdD11ZS53aWR0aCxkdD11ZS5jb21tYSxKdD11ZS5wcmVjaXNpb24sdm49dWUudHJpbSxDbj11ZS50''@;'; put 'put ''eXBlOyJuIj09PUNuPyhkdD0hMCxDbj0iZyIpOnM3ZVtDbl18fCh2b2lkIDA9PT1KdCYmKEp0PTEyKSx2bj0hMCxDbj0iZyIpLChydHx8IjAiPT09eWUmJiI9Ij09PUVlKSYmKHJ0PSEwLHllPSIwIixFZT0iPSIpO3ZhciB0bj0iJCI9PT1xZT9hOiIjIj09PXFlJiYvW2JveFhdLy50ZXN0KENu''@;'; put 'put ''KT8iMCIrQ24udG9Mb3dlckNhc2UoKToiIixNbj0iJCI9PT1xZT9kOi9bJXBdLy50ZXN0KENuKT92OiIiLENyPXM3ZVtDbl0sR3I9L1tkZWZncHJzJV0vLnRlc3QoQ24pO2Z1bmN0aW9uIG1yKEduKXt2YXIgT24senIsSm4sYWk9dG4sX2k9TW47aWYoImMiPT09Q24pX2k9Q3IoR24pK19pLEdu''@;'; put 'put ''PSIiO2Vsc2V7dmFyIElyPShHbj0rR24pPDB8fDEvR248MDtpZihHbj1pc05hTihHbik/STpDcihNYXRoLmFicyhHbiksSnQpLHZuJiYoR249ZnVuY3Rpb24gRUV0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTti''@;'; put 'put ''cmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShHbikpLElyJiYwPT0rR24mJiIrIiE9PWplJiYoSXI9ITEpLGFpPShJcj8iKCI9PT1qZT9q''@;'; put 'put ''ZTpNOiItIj09PWplfHwiKCI9PT1qZT8iIjpqZSkrYWksX2k9KCJzIj09PUNuP3U3ZVs4K2E3ZS8zXToiIikrX2krKElyJiYiKCI9PT1qZT8iKSI6IiIpLEdyKWZvcihPbj0tMSx6cj1Hbi5sZW5ndGg7KytPbjx6cjspaWYoNDg+KEpuPUduLmNoYXJDb2RlQXQoT24pKXx8Sm4+NTcpe19pPSg0''@;'; put 'put ''Nj09PUpuP2grR24uc2xpY2UoT24rMSk6R24uc2xpY2UoT24pKStfaSxHbj1Hbi5zbGljZSgwLE9uKTticmVha319ZHQmJiFydCYmKEduPWwoR24sMS8wKSk7dmFyICRyPWFpLmxlbmd0aCtHbi5sZW5ndGgrX2kubGVuZ3RoLHdpPSRyPHB0P25ldyBBcnJheShwdC0kcisxKS5qb2luKHllKToi''@;'; put 'put ''Ijtzd2l0Y2goZHQmJnJ0JiYoR249bCh3aStHbix3aS5sZW5ndGg/cHQtX2kubGVuZ3RoOjEvMCksd2k9IiIpLEVlKXtjYXNlIjwiOkduPWFpK0duK19pK3dpO2JyZWFrO2Nhc2UiPSI6R249YWkrd2krR24rX2k7YnJlYWs7Y2FzZSJeIjpHbj13aS5zbGljZSgwLCRyPXdpLmxlbmd0aD4+MSkr''@;'; put 'put ''YWkrR24rX2krd2kuc2xpY2UoJHIpO2JyZWFrO2RlZmF1bHQ6R249d2krYWkrR24rX2l9cmV0dXJuIGYoR24pfXJldHVybiBKdD12b2lkIDA9PT1KdD82Oi9bZ3Byc10vLnRlc3QoQ24pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsSnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEp0KSksbXIu''@;'; put 'put ''dG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdWUrIiJ9LG1yfXJldHVybntmb3JtYXQ6Ryxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gaWUodWUseWUpe3ZhciBFZT1HKCgodWU9TnRlKHVlKSkudHlwZT0iZiIsdWUpKSxqZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5j''@;'; put 'put ''dGlvbiBDRXQoYyl7cmV0dXJuKGM9SE4oTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0oeWUpLzMpKSkscWU9TWF0aC5wb3coMTAsLWplKSxydD11N2VbOCtqZS8zXTtyZXR1cm4gZnVuY3Rpb24ocHQpe3JldHVybiBFZShxZSpwdCkrcnR9fX19KGMpLGFmPU5OLmZvcm1hdH0oe3Rob3VzYW5kczoi''@;'; put 'put ''LCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgQnRlPU1hdGguUEksanRlPTIqQnRlLGl2PTFlLTYsTEV0PWp0ZS1pdjtmdW5jdGlvbiBkN2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStj''@;'; put 'put ''W2xdfWNsYXNzIHp0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9kN2U6ZnVuY3Rpb24gT0V0KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gZDdlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19''@;'; put 'put ''fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxp''@;'; put 'put ''bmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7''@;'; put 'put ''dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9''@;'; put 'put ''dGhpcy5feDEsTT10aGlzLl95MSxJPWQtbCxHPWgtYSxpZT12LWwsdWU9TS1hLHllPWllKmllK3VlKnVlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZih5ZT5pdilpZihNYXRoLmFicyh1ZSpJLUcqaWUpPml2JiZm''@;'; put 'put ''KXtsZXQgRWU9ZC12LGplPWgtTSxxZT1JKkkrRypHLHJ0PUVlKkVlK2plKmplLHB0PU1hdGguc3FydChxZSksZHQ9TWF0aC5zcXJ0KHllKSxKdD1mKk1hdGgudGFuKChCdGUtTWF0aC5hY29zKChxZSt5ZS1ydCkvKDIqcHQqZHQpKSkvMiksdm49SnQvZHQsQ249SnQvcHQ7TWF0aC5hYnModm4t''@;'; put 'put ''MSk+aXYmJnRoaXMuX2FwcGVuZGBMJHtsK3ZuKmllfSwke2Erdm4qdWV9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKHVlKkVlPmllKmplKX0sJHt0aGlzLl94MT1sK0NuKkl9LCR7dGhpcy5feTE9YStDbipHfWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0''@;'; put 'put ''aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEk9ZCpNYXRoLnNpbihoKSxHPWwrTSxpZT1hK0ksdWU9MV52LHllPXY/aC1mOmYt''@;'; put 'put ''aDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke0d9LCR7aWV9YDooTWF0aC5hYnModGhpcy5feDEtRyk+aXZ8fE1hdGguYWJzKHRoaXMuX3kxLWllKT5pdikmJnRoaXMuX2FwcGVuZGBMJHtHfSwke2llfWAsZCYmKHllPDAmJih5ZT15ZSVqdGUranRlKSx5ZT5MRXQ/dGhpcy5fYXBw''@;'; put 'put ''ZW5kYEEke2R9LCR7ZH0sMCwxLCR7dWV9LCR7bC1NfSwke2EtSX1BJHtkfSwke2R9LDAsMSwke3VlfSwke3RoaXMuX3gxPUd9LCR7dGhpcy5feTE9aWV9YDp5ZT5pdiYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoeWU+PUJ0ZSl9LCR7dWV9LCR7dGhpcy5feDE9bCtkKk1hdGguY29z''@;'; put 'put ''KGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rp''@;'; put 'put ''b24gaDdlKCl7cmV0dXJuIG5ldyB6dGV9ZnVuY3Rpb24gUEV0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gZjdlKGMsbCxhLGQsaCxmLHYpe3ZhciBJPW52KHY3ZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbSV0pLE9B''@;'; put 'put ''LmNhbGwoYy5ub2RlKCksSSkscDdlKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIHA3ZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsdWU9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSx5ZT1kLWwsRWU9aC1hLGplPU1hdGguc3FydCh5ZSp5ZStFZSpFZSk7''@;'; put 'put ''aWYoMD09amUpdmFyIHFlPTEscnQ9MDtlbHNlIHFlPXllL2plLHJ0PUVlL2plO2lmKGQ9bCsoamUtTS0xMC0uMSkqcWUsaD1hKyhqZS1NLTEwLS4xKSpydCxmLlVSTHx8Zi50b29sdGlwKXZhciBwdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0''@;'; put 'put ''YVByb3BhZ2F0aW9uKCJhIiksZHQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PXB0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIGR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PWMuc2VsZWN0''@;'; put 'put ''V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciB2bj1oN2UoKTt2bi5tb3ZlVG8obCxhKSx2bi5saW5lVG8oZCxoKSxkdC5hdHRyKCJkIix2biksZD1sKyhqZS1NLTEwKSpxZSxoPWErKGplLU0tMTApKnJ0O2Zvcih2YXIgQ249MDtDbjx1ZS5sZW5ndGg7Q24rKyl1ZVtDbl09''@;'; put 'put ''UEV0KCh0bj11ZVtDbl0pWzBdLHRuWzFdLHFlLHJ0KTtmb3IoQ249MDtDbjx1ZS5sZW5ndGg7Q24rKyl1ZVtDbl09W2QrKHRuPXVlW0NuXSlbMF0saCt0blsxXV07dmFyIE1uPVtdO2ZvcihDbj0wO0NuPHVlLmxlbmd0aDtDbisrKXt2YXIgdG47TW4ucHVzaCgodG49dWVbQ25dKS5qb2luKCIs''@;'; put 'put ''IikpfXZhciBDcj1Nbi5qb2luKCIgIik7cmV0dXJuIEp0LmF0dHIoInBvaW50cyIsQ3IpLHRoaXN9ZnVuY3Rpb24gZzdlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiBt''@;'; put 'put ''N2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOndzKG51bGwpfWZ1bmN0aW9uIHY3ZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRT''@;'; put 'put ''eW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24geTdlKGMsbCxhLGQsaCxmKXt2YXIgTT1udihDN2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxPQS5jYWxsKGMubm9kZSgpLE0pLGI3ZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9u''@;'; put 'put ''IGI3ZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5''@;'; put 'put ''bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBJPXYubm9kZSgpLmdldEJCb3goKTtJLmN4PUkueCtJLndpZHRoLzIsSS5jeT1JLnkrSS5oZWlnaHQvMn1lbHNlIDAhPU0uc2l6ZSgpJiYoST17eDorTS5hdHRyKCJ4Iiks''@;'; put 'put ''eTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihHLGllKXt2YXIgdWU9d3ModGhpcyk7aWYodWUuYXR0cigiY3giKSl1ZS5hdHRyKCJjeCIsTTYobCkpLmF0dHIoImN5IixNNihhKSk7''@;'; put 'put ''ZWxzZSBpZih1ZS5hdHRyKCJwb2ludHMiKSl7dmFyIHllPXVlLmF0dHIoInBvaW50cyIpLnRyaW0oKTt1ZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIEt4dChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJu''@;'; put 'put ''IGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW002KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxNNigrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oeWUsbC1JLmN4LGEtSS5jeSkpfWVsc2V7dmFyIEVl''@;'; put 'put ''PXVlLmF0dHIoImQiKTt1ZS5hdHRyKCJkIixmdW5jdGlvbiBxeHQoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXty''@;'; put 'put ''ZXR1cm5bTTYoK2wrICt2LnNwbGl0KCIsIilbMF0pLE02KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0sSSl7cmV0dXJuIHYuY29uY2F0KE0sZltJXSl9LFtdKS5qb2luKCIi''@;'; put 'put ''KX0oRWUsbC1JLmN4LGEtSS5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLE02KCtNLmF0dHIoIngiKStsLUkuY3gpKS5hdHRyKCJ5IixNNigrTS5hdHRyKCJ5IikrYS1JLmN5KSksdGhpc31mdW5jdGlvbiBfN2UoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBj''@;'; put 'put ''PXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiB3N2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOndzKG51bGwpfWZ1bmN0aW9uIEM3ZShjLGwpe3ZhciBhPSIi''@;'; put 'put ''O2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0''@;'; put 'put ''cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIHdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFZOKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5''@;'; put 'put ''cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToi''@;'; put 'put ''c2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIFpFdCgp''@;'; put 'put ''e1ZOKHNlbGYpfWZ1bmN0aW9uIFdFdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtWTihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIFV0ZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJk''@;'; put 'put ''b3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5z''@;'; put 'put ''bGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIg''@;'; put 'put ''dj1jdGUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PXdzKHRoaXMpLmF0dHIoInR5cGUiKXx8d3ModGhpcykuYXR0cigic3JjIikmJndzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6''@;'; put 'put ''ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5f''@;'; put 'put ''dml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0''@;'; put 'put ''IEc9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKFZOLnRvU3RyaW5nKCkrIigiK1dFdC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoRyksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9y''@;'; put 'put ''dCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBNPW5ldyBCbG9iKFtWTi50b1N0cmluZygpKyIo''@;'; put 'put ''IitaRXQudG9TdHJpbmcoKSsiKSgpIl0pLEk9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoSSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0''@;'; put 'put ''aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIHI3ZS5sb2FkKCkudGhlbigoRz0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1HLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMu''@;'; put 'put ''X2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5p''@;'; put 'put ''dEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRy''@;'; put 'put ''YW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXV0ZSguLi50aGlzLl9ldmVudFR5cGVzKSxYeHQuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBCTihjLGwpe3JldHVybiB3cyhjKS5ncmFwaHZpeihsKX1o''@;'; put 'put ''N2UucHJvdG90eXBlPXp0ZS5wcm90b3R5cGUsVXRlLnByb3RvdHlwZT1CTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlV0ZSxlbmdpbmU6ZnVuY3Rpb24gdUV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIGRFdChjLGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gaEV0KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUm''@;'; put 'put ''Jm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gZkV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1''@;'; put 'put ''bmN0aW9uIHBFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gZ0V0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVx''@;'; put 'put ''dWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBtRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIHZFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdy''@;'; put 'put ''b3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIHlFdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gdXh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZp''@;'; put 'put ''b3I/WDhlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gZHh0KGMpe3ZhciBsPXRoaXMu''@;'; put 'put ''X3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBweHQoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9y''@;'; put 'put ''fHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIGd4dCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gaHh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRl''@;'; put 'put ''bnQ6ZnVuY3Rpb24gZnh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gd3h0KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMu''@;'; put 'put ''X2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT95TihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249TXRlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLGU3ZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6ZTdlLmNhbGwodGhp''@;'; put 'put ''cyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIEp4dChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpSHRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlz''@;'; put 'put ''LmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24gUXh0KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5n''@;'; put 'put ''aW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMs''@;'; put 'put ''aCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6ZUV0LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5f''@;'; put 'put ''YWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIHl4dCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gdEV0KGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIo''@;'; put 'put ''bCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIG5FdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1NdGUoYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIHJFdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rp''@;'; put 'put ''b24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIFVNdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9''@;'; put 'put ''PT1sKXJldHVybiBuZXcgdTQoW1tjXV0sek10LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIGlFdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5r''@;'; put 'put ''ZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gYUV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIG9FdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpm''@;'; put 'put ''dW5jdGlvbiBzRXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gbEV0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gY0V0KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246''@;'; put 'put ''ZnVuY3Rpb24gYkV0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBfRXQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gSUV0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2''@;'; put 'put ''ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChJPT5JLmxlbmd0aCkpO2ZvcihsZXQgST0wO0k8ZC5sZW5ndGg7SSsrKXtsZXQgRz1kW0ldO2FbR109W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihHKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIGllPURhdGUubm93KCksdWU9YVtHXS5sZW5n''@;'; put 'put ''dGg7YVtHXS5wdXNoKGllKTt2YXIgeWU9IiI7aWYoeWUrPSJFdmVudCAiLHllKz1hZigiID4yIikoSSkrIiAiLHllKz1HKyIgIi5yZXBlYXQoaC1HLmxlbmd0aCkseWUrPWFmKCIgPjUiKShpZS1sKSsiICIsImluaXRFbmQiIT1HJiYoeWUrPWFmKCIgPjUiKShpZS1hLnN0YXJ0W3VlXSkpLCJk''@;'; put 'put ''YXRhUHJvY2Vzc0VuZCI9PUcmJih5ZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2FmKCIgPjUiKShpZS1hLmxheW91dEVuZFt1ZV0pKSwicmVuZGVyRW5kIj09RyYmZi5fdHJhbnNpdGlvbiYmKHllKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrYWYoIiA+NSIpKGYuX3RyYW5z''@;'; put 'put ''aXRpb24uZGVsYXkoKS0oaWUtYS5yZW5kZXJTdGFydFt1ZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PUcpe3ZhciBFZT1pZS1hLnJlbmRlclN0YXJ0W3VlXTt5ZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAg''@;'; put 'put ''ICAgICAiK2FmKCIgPjUiKShpZS1hLnJlbmRlclN0YXJ0W3VlXSkseWUrPSIgZXhwZWN0ZWQgIithZigiID41IikodikseWUrPSIgZGlmZiAiK2FmKCIgPjUiKShFZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PUcpe3ZhciBqZT1pZS1hLnRyYW5zaXRpb25TdGFydFt1ZV07eWUrPSIgdHJhbnNp''@;'; put 'put ''dGlvbiBkdXJhdGlvbiAgICAgIithZigiID41IikoamUpLHllKz0iIGV4cGVjdGVkICIrYWYoIiA+NSIpKE0pLHllKz0iIGRpZmYgIithZigiID41IikoamUtTSl9Y29uc29sZS5sb2coeWUpLGw9aWV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIFJFdCgpe3JldHVybiBk''@;'; put 'put ''ZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBGRXQoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxl''@;'; put 'put ''LmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PXdzKG51bGwpO2Vsc2V7dmFyIEc9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSx1ZT1udih2N2UuY2FsbCh0aGlzLGgpKTt2PUcuYXBwZW5k''@;'; put 'put ''KCJnIikuZGF0YShbdWVdKSxPQS5jYWxsKHYubm9kZSgpLHVlKSxmN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIEhFdChj''@;'; put 'put ''LGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25F''@;'; put 'put ''ZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp''@;'; put 'put ''b24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fGY3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIE5FdChjLGwsYT17''@;'; put 'put ''fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLHA3ZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gVkV0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJv''@;'; put 'put ''cGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxJPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEkpLER0ZShsLEkpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpnN2UscmVtb3Zl''@;'; put 'put ''RHJhd25FZGdlOmc3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246bTdlLGRyYXduRWRnZVNlbGVjdGlvbjptN2UsZHJhd05vZGU6ZnVuY3Rpb24gQkV0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9''@;'; put 'put ''d3MobnVsbCk7ZWxzZXt2YXIgST10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLGllPW52KEM3ZS5jYWxsKHRoaXMsYSxkKSk7Zj1JLmFwcGVuZCgiZyIpLmRhdGEoW2llXSksT0EuY2Fs''@;'; put 'put ''bChmLm5vZGUoKSxpZSkseTdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gakV0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2Ry''@;'; put 'put ''YXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5f''@;'; put 'put ''ZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2Vs''@;'; put 'put ''ZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8eTdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiB6RXQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUp''@;'; put 'put ''dGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHxiN2UoZCxjLGwsaCksdGhp''@;'; put 'put ''c30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIFVFdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgp''@;'; put 'put ''KXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0''@;'; put 'put ''aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRp''@;'; put 'put ''b24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIGllPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRo''@;'; put 'put ''b3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksdWU9aWUuZGF0dW0oKSx5ZT10aGlzLl9leHRyYWN0RGF0YShsLHVlLmNoaWxkcmVuLmxlbmd0aCxpZS5kYXR1bSgpKTtyZXR1cm4gdWUuY2hpbGRyZW4ucHVzaCh5ZSksRHRlKGwseWUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURy''@;'; put 'put ''YXduTm9kZTpfN2UscmVtb3ZlRHJhd25Ob2RlOl83ZSxkcmF3bk5vZGVTZWxlY3Rpb246dzdlLGRyYXduTm9kZVNlbGVjdGlvbjp3N2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIEN4dCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxxOS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVu''@;'; put 'put ''Y3Rpb24gWUV0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLHlOKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IFV0ZSh0aGlzLGMpLGx9LHE5LnByb3RvdHlwZS5z''@;'; put 'put ''ZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIEdFdChjKXtyZXR1cm4gd3ModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgJEV0PWIoOTgwODMpO2Z1bmN0aW9uIEtFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1m''@;'; put 'put ''dW5jdGlvbiBxRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0''@;'; put 'put ''aW9uIFhFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gs''@;'; put 'put ''aCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsS0V0LDEsMCwiY2xyLWljb24iLDI3KSg1LHFFdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEpFdChjLGwpezEmYyYmR3QoMCwiY2xy''@;'; put 'put ''LWljb24iLDI5KX1mdW5jdGlvbiBRRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2Vh''@;'; put 'put ''cmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBlVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGdpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''Q3QoTGUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxKRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUsUUV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoMikuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01v''@;'; put 'put ''ZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB0VHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gblR0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksTGUoKTtjb25zdCBoPWhhKDMpLGY9TGUoKS4kaW1wbGljaXQsdj1MZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNP''@;'; put 'put ''TE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiByVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxo''@;'; put 'put ''ZSgpLGd0KDQsdFR0LDEsMCwiY2xyLWljb24iLDI3KSg1LG5UdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCkuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVu''@;'; put 'put ''Z3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBpVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9''@;'; put 'put ''TGUoKS4kaW1wbGljaXQsdj1MZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDQxKSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoNCk7ZmUoKSxUcigiY29sdW1uLWFjdGl2ZSIs''@;'; put 'put ''ZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxEcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIGFUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxp''@;'; put 'put ''Y2l0LHY9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVk''@;'; put 'put ''PWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPUxlKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVSSSxoLGYpKX0pLEd0KDIsImNsci1pY29uIiwzOCksT2UoMyksaGUo''@;'; put 'put ''KSxndCg0LHJUdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsaVR0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9h''@;'; put 'put ''ZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSx4ZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLERyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gb1R0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdCx2PUxlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxnaSgiY2xyRXhw''@;'; put 'put ''YW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0''@;'; put 'put ''LGY9TGUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksR3QoMiwiY2xyLWljb24iLDM0KSxPZSgzKSxoZSgpLGd0KDQsZVR0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxhVHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUo''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLERyKCIgIixhLkxJQlJBUllOQU1FLCIg''@;'; put 'put ''IiksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXMpLGZlKCkseGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gc1R0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxvVHQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5n''@;'; put 'put ''SWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBsVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBjVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNv''@;'; put 'put ''biIsNDUpLGRlKDIsInAiLDQ2KSxPZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVUdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKCksRHIoIiAiLGEuY3VycmVudExp''@;'; put 'put ''bmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gZFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSx1VHQsMiwx''@;'; put 'put ''LCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gaFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLE9lKDEpLGRlKDIsImEi''@;'; put 'put ''LDU2KSxPZSgzKSxoZSgpLE9lKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLERyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCkseGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLHdyKGEubGlu''@;'; put 'put ''ZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLERyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gZlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5kb3dubG9hZFBORygpKX0pLE9lKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gcFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChM''@;'; put 'put ''ZSg0KS5kb3dubG9hZENTVigpKX0pLE9lKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gZ1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMp''@;'; put 'put ''LmRvd25sb2FkU1ZHKCkpfSksT2UoMiwiU1ZHIiksaGUoKSxndCgzLGZUdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMykuZG93bmxvYWREb3QoKSl9KSxPZSg1LCJEb3QiKSxoZSgpLGd0KDYscFR0LDIsMCwi''@;'; put 'put ''ZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMykseGUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLGZlKDMpLHhlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gbVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgzKTtyZXR1cm4gbWkoZi5yZWZyZXNo''@;'; put 'put ''Q2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxPZSgzLCJSZWZyZXNoIENhY2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLHBpKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoMikubGltaXREb3REZXB0aD0hMCl9KSxPZSgyLCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoNSwiaW5w''@;'; put 'put ''dXQiLDYxKSxkZSg2LCJsYWJlbCIpLE9lKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/''@;'; put 'put ''aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIsNjEpLGRlKDEwLCJsYWJlbCIpLE9lKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxPZSgxNCwiIERvd25s''@;'; put 'put ''b2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYsZ1R0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpLGd0KDE3LG1UdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNSkseGUoImNoZWNrZWQiLCFh''@;'; put 'put ''LmZvcndhcmRMaW5lYWdlKSxmZSg0KSx4ZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCkseGUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSx4ZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiB5VHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksT2Uo''@;'; put 'put ''MSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gYlR0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gX1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksZ3QoMixiVHQsMSwwLCJzcGFuIiw3NiksaGUoKSxHdCgzLCJkaXYiLDc3KSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoMikseGUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiB3VHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxndCgyLHlUdCwyLDAsInNwYW4iLDcxKSgzLF9UdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPUxlKDIpO1RyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMikseGUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBDVHQoYyxsKXtpZigxJmMmJihzaSgwKSxndCgxLGRUdCwyLDEsImRpdiIsNDcpLGRlKDIsImRp''@;'; put 'put ''diIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LGhUdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0KDYsdlR0LDE4LDQsImRpdiIsNTEpLGhlKCksZ3QoNyx3VHQsNCw0LCJkaXYiLDUyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLCFhLmdy''@;'; put 'put ''YXBoQ29udGFpbmVyKSxmZSg0KSx4ZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLHhlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gU1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7''@;'; put 'put ''ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxPZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIE1UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1t''@;'; put 'put ''ZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLE9lKDIsIlNWRyIpLGhlKCksZ3QoMyxTVHQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7d3QoYSk7Y29uc3QgaD1MZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLE9lKDUsIiBEb3QgIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpO2ZlKDMpLHhlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19''@;'; put 'put ''Y29uc3QgeFR0PWIoOTc1ODYpO2xldCBqTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEksRyl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2ZW50U2Vy''@;'; put 'put ''dmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1JLHRoaXMuaGVscGVyU2VydmljZT1HLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmlu''@;'; put 'put ''Zz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0i''@;'; put 'put ''Iix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90''@;'; put 'put ''RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxh''@;'; put 'put ''Z310YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKHYsTSxJLEc9ITEpe00uY29sdW1ucz8oTS5leHBhbmRlZD0hTS5leHBhbmRlZCwhMD09PU0uZXhwYW5kZWQmJihmLnRhYmxlPXYsR3x8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooTS5l''@;'; put 'put ''eHBhbmRlZD0hTS5leHBhbmRlZCxNLmxvYWRpbmdDb2x1bW5zPSEwLGYudGFibGU9dixmLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPU0uTElCTkFNRSsiLiIrTS5UQUJMRU5BTUUseWllbGQgZi5zZWxlY3RUYWJsZSh2LE0pLEd8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxm''@;'; put 'put ''LmNvbGxhcHNlVHJlZUl0ZW1zKEkudGFibGVzLE0pfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3t0YWJsZXVyaTphfV19O3lpZWxk''@;'; put 'put ''IGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGFjb2xzIixmKS50aGVuKHY9PntoLmNvbHVtbnNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5jb2x1bW5zTGlzdCxkLmV4''@;'; put 'put ''cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2godj0+diksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJh''@;'; put 'put ''cmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQs''@;'; put 'put ''aCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2QuaW5Gb3JlZ3JvdW5kPSEwLGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQu''@;'; put 'put ''bG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVtcyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1zZWxlY3RMaWJyYXJ5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlz''@;'; put 'put ''dD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRh''@;'; put 'put ''Ymxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1oLnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9''@;'; put 'put ''aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTts''@;'; put 'put ''ZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxLbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50''@;'; put 'put ''YWJsZXNMaXN0LEtuLmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxLbi5saW5lYWdlLmxpYj10aGlzLmxpYixLbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsS24ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0''@;'; put 'put ''PUtuLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PUtuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUtuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9S24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4''@;'; put 'put ''RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249''@;'; put 'put ''InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgi''@;'; put 'put ''Zmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9u''@;'; put 'put ''LnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtLbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoS24ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxv''@;'; put 'put ''YWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbih2PT57YS5saWJyYXJ5TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyeUxpc3QpLGEu''@;'; put 'put ''bGlicmFyeUxpc3QmJmEubGlicmFyeUxpc3QubGVuZ3RoPjAmJihhLmxpYj1hLmxpYnJhcnlMaXN0WzBdLkxJQlJBUllJRCksYS5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxhLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSxhLnJvdXRl''@;'; put 'put ''LnBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSkpfSkoKX1vblJvdXRlQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBh''@;'; put 'put ''cmFtcy5jb2x1cmksZD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5kaXJlY3Rpb24saD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZWlkLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5tYXhfZGVwdGg7YSYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldB''@;'; put 'put ''UkQiPT09ZCx0aGlzLmNvbHVtbj1hLHRoaXMuZ2VuZXJhdGVHcmFwaChhLGQsZikpLCF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpJiZoJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMudGFibGU9aCx0aGlzLmdlbmVyYXRlR3JhcGhUYWJsZUxl''@;'; put 'put ''dmVsKGgsZCxmKSl9LHRoaXMuZGVib3VuY2VUaW1lKX1uZ0FmdGVyQ29udGVudEluaXQoKXt9ZGlyZWN0aW9uVGV4dCgpe3JldHVybiB0aGlzLmZvcndhcmRMaW5lYWdlPyJGT1JXQVJEIjoiUkVWRVJTRSJ9b25HZW5lcmF0ZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10''@;'; put 'put ''aGlzLmNvbHVtbj90aGlzLmNvbHVtbi5zdWJzdHJpbmcodGhpcy5jb2x1bW4uaW5kZXhPZigiXFwiKSsxKTpudWxsO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvY29sdW1uLyIrZCsiLyIrYSl9b25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpe2xldCBhPXRoaXMu''@;'; put 'put ''ZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy50YWJsZS5pbmNsdWRlcygiXFwiKT90aGlzLnRhYmxlLnNwbGl0KCJcXCIpWzFdOnRoaXMudGFibGU7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS8iK2QrIi8iK2EpfWdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGEsZCxoKXt2''@;'; put 'put ''YXIgZj10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCB2PXtTQVNDb250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoKSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYodi5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxm''@;'; put 'put ''LmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKE0sSSk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBHPVEoZnVuY3Rpb24qKGllKXtpZihp''@;'; put 'put ''ZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlh''@;'; put 'put ''Z3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBpZSlyZXR1cm4gZi52aXpJ''@;'; put 'put ''bnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1pZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK2llLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgdWU9aWUuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLmZpbmFsZmluYWwseWU9IiI7Zm9yKGxldCBFZT0wO0VlPHVlLmxlbmd0aDtFZSsrKXllKz11bmVzY2FwZSh1ZVtFZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPWllLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRWU9Zi5saWJyYXJ5TGlzdC5maW5k''@;'; put 'put ''KGplPT5pZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhqZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKEVlKXtsZXQgamU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKGplPUVl''@;'; put 'put ''LnRhYmxlcy5maW5kKHFlPT5xZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGllLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLGplKSl7aWYoZi50YWJsZT1qZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBxZT1mLnRhYmxlLnJlcGxhY2Uo''@;'; put 'put ''IlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQgcnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3FlfSddYCk7cnQmJnJ0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soamUuVEFCTEVVUkksamUsRWUsdm9pZCAwIT09ZCl9RWUmJihFZS5leHBhbmRl''@;'; put 'put ''ZD0hMCksamUmJihqZS5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9eWV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9aWUuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlLmlkbG9va3VwLGllLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9aWUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbihpZSl7cmV0dXJuIEcuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goRz0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBB''@;'; put 'put ''dmFpbGFibGV9Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxv''@;'; put 'put ''YWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBM''@;'; put 'put ''aW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5w''@;'; put 'put ''ZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigidGl0bGUiKS5pbm5lckhUTUwsdj1hLmZpbmQoST0+SS5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIi''@;'; put 'put ''KSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixJPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7Y29sdXJpOmF8fGYuY29sdW1uLGRp''@;'; put 'put ''cmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGgoKSIsImNvbHVyaSBp''@;'; put 'put ''cyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQ''@;'; put 'put ''cm9taXNlKChNLEkpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIEc9UShmdW5jdGlvbiooaWUpe2lmKGllLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVj''@;'; put 'put ''a0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1''@;'; put 'put ''cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIGllLmFkYXB0ZXJSZXNwb25zZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRH''@;'; put 'put ''cmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1pZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK2llLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1uTmFtZT1pZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9''@;'; put 'put ''aWUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwO2xldCB1ZT1pZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcyx5ZT0iIjtmb3IobGV0IEVlPTA7RWU8dWUubGVuZ3RoO0VlKyspeWUrPXVuZXNjYXBlKHVlW0VlXS5TVFJJTkcpKyJcbiI7aWYoZi52aXpJbnB1dD15ZXx8ImRpZ3JhcGggRyB7Tm8g''@;'; put 'put ''TGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5mbGF0ZGF0YT1pZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IGplLEVlPWYubGlicmFyeUxp''@;'; put 'put ''c3QuZmluZChxZT0+aWUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMocWU/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO0VlJiYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKGplPUVl''@;'; put 'put ''LnRhYmxlcy5maW5kKHFlPT5xZS5UQUJMRVVSST09PWllLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQlVSSSksamUmJmYudGFibGVPbkNsaWNrKGplLlRBQkxFVVJJLGplLEVlLCEwKS50aGVuKCgpPT57bGV0IHFlPWplLlRBQkxFVVJJO2lmKHFlKXtjb25zdCBydD1xZS5yZXBsYWNlKCJc''@;'; put 'put ''XCIsIlxcXFwiKTtsZXQgcHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3J0fSddYCk7c2V0VGltZW91dCgoKT0+e3B0JiYoZi5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0IixFZSkscHQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLEVlJiYoRWUuZXhwYW5k''@;'; put 'put ''ZWQ9ITApLGplJiYoamUuZXhwYW5kZWQ9ITApKX1pZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWllLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxNKCl9KTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oaWUpe3JldHVybiBHLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKEc9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJMKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1M''@;'; put 'put ''U2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChoKX1nZXRTVkdCbG9iKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyYXBoIiksZD1uZXcgWE1MU2Vy''@;'; put 'put ''aWFsaXplcjtyZXR1cm4gbmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pfWRvd25sb2FkU1ZHKCl7aWYoQk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjAp''@;'; put 'put ''d2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0U1ZHQmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgic3ZnIikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldFNWR1VSTCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1l''@;'; put 'put ''KCJzdmciKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1kb3dubG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7Qk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLCRFdC5zYXZlU3ZnQXNQbmco''@;'; put 'put ''ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0oaWUsdWUpPT5udWxsPT09dWU/IiI6dWUsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChp''@;'; put 'put ''ZT0+aC5tYXAodWU9PkpTT04uc3RyaW5naWZ5KGllW3VlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxJPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSk7aWYo''@;'; put 'put ''bmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoSSx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBHPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKEkpO00uaHJlZj1HLE0uZG93bmxv''@;'; put 'put ''YWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxNLmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoRyksTS5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNy''@;'; put 'put ''ZWF0ZU9iamVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRv''@;'; put 'put ''ci5tc1NhdmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVu''@;'; put 'put ''dC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdy''@;'; put 'put ''YXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntCTigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVu''@;'; put 'put ''ZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj14VHQoKS5mb3Jt''@;'; put 'put ''YXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxpc3QuZmluZChJPT5JLkxJQlJBUllJRD09dGhpcy5saWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYm''@;'; put 'put ''dGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoST0+SS5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVt''@;'; put 'put ''bnNMaXN0LmZpbmQoST0+SS5DT0xVUkk9PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''KEdlKHUxKSxHZShCcyksR2UoQ3UpLEdlKExzKSxHZShmaCksR2UodmMpLEdlKFNkKSxHZShTdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZh''@;'; put 'put ''cnM6MTEsY29uc3RzOltbIm1heERlcHRoRG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxl''@;'; put 'put ''Il0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1''@;'; put 'put ''ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRu''@;'; put 'put ''LXNtIiwiYnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBw''@;'; put 'put ''U3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIs''@;'; put 'put ''InRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xp''@;'; put 'put ''Y2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2si''@;'; put 'put ''LCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdN''@;'; put 'put ''b2RlbCJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxb''@;'; put 'put ''InNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1''@;'; put 'put ''bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxp''@;'; put 'put ''Z24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRl''@;'; put 'put ''ciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVy''@;'; put 'put ''IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rpb24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIs''@;'; put 'put ''InJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVy''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNr''@;'; put 'put ''Ym94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxu''@;'; put 'put ''KCk7ZGUoMCwiYXBwLXNpZGViYXIiLDQpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUiKSxndCgyLFhFdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsc1R0LDIsMSwibmctY29u''@;'; put 'put ''dGFpbmVyIiw2KSxoZSgpLGd0KDQsbFR0LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxndCg3LGNUdCw0LDAsImRpdiIsMTApKDgsQ1R0LDgsNCwibmctY29udGFpbmVyIiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLE9lKDEx''@;'; put 'put ''LCJMaW1pdCBEZXB0aCIpLGhlKCksZGUoMTIsImRpdiIsMTQpKDEzLCJwIiksT2UoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxHdCgxNywiaW5w''@;'; put 'put ''dXQiLDE3LDApLGhlKCksZGUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTgpLE9lKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCksZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGYpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxPZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT1oYSgxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSks''@;'; put 'put ''Q3QoaC5saW1pdERvdERlcHRoPSExKX0pLE9lKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksT2UoMjgsIldhcm5pbmciKSxoZSgpLGRlKDI5LCJkaXYiLDE0KSgzMCwicCIpLE9lKDMxKSxoZSgpKCksZGUoMzIsImRpdiIsMTUp''@;'; put 'put ''KDMzLCJkaXYiLDE5KSgzNCwicCIpLE9lKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSks''@;'; put 'put ''T2UoMzcsIiBSZW5kZXIgIiksaGUoKSgpLGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLE9lKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxkZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLE9lKDQzLCIgRG93bmxv''@;'; put 'put ''YWQgIiksR3QoNDQsImNsci1pY29uIiwyMiksaGUoKSxndCg0NSxNVHQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxPZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLEd0KDQ5LCJp''@;'; put 'put ''bnB1dCIsMTcsMSksZGUoNTEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWhhKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSl9KSxPZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSkoNTQs''@;'; put 'put ''InAiKSxPZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLE9lKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYoZmUo''@;'; put 'put ''MikseGUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSx4ZSgibmdJZiIsIWguY29sdW1uJiYhaC50YWJsZSksZmUoKSx4ZSgibmdJZiIsaC5jb2x1bW58fGgudGFibGUp''@;'; put 'put ''LGZlKCkseGUoImNsck1vZGFsT3BlbiIsaC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSx4ZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxEcigiIFRoZSBnZW5lcmF0ZWQg''@;'; put 'put ''ZG90IGZpbGUgaGFzICIsaC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgxMSkseGUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVuY2ll''@;'; put 'put ''czpbbnMseWEsYzEscWwsTWQsbmwsJHMsRWgsUGQsZmcsSGwsb3UsS3UsajAsTDIsZHMsakwsSWQsU2gsWjEsc2csZzcsbTcsVmIsaTQscjRdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRVR0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBUVHQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJvcHRpb24iLDE0KSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Zk0oInZhbHVlIixhKSxmZSgpLERyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEFUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiBrVHQoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLEN0KGgubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIERUdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCksQ3Qo''@;'; put 'put ''aCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxBVHQsMSwwLCJjbHItaWNvbiIsMTgpKDUsa1R0LDEsMCwiY2xyLWljb24iLDE5KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWhhKDMpLGQ9TGUoKTtm''@;'; put 'put ''ZSgyKSxwaSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwy''@;'; put 'put ''MyksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0KSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUo''@;'; put 'put ''KS4kaW1wbGljaXQ7cmV0dXJuIG1pKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0LGY9TGUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsQ3QoZi5tZXRh''@;'; put 'put ''RGF0YU9uQ2xpY2soZi5tZXRhRGF0YUlkLGgpKX0pLEd0KDIsImNsci1pY29uIiwyNSksT2UoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxl''@;'; put 'put ''cyksZmUoMyksRHIoIiAiLGEuSUQsIiAiKX19ZnVuY3Rpb24gUlR0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxJVHQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIExUdChj''@;'; put 'put ''LGwpezEmYyYmKGRlKDAsImRpdiIsMjYpLEd0KDEsImNsci1pY29uIiwyNyksZGUoMiwicCIsMjgpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEgdHlwZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIE9UdChjLGwpezEmYyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLGhl''@;'; put 'put ''KCkpfWZ1bmN0aW9uIFBUdChjLGwpezEmYyYmKGRlKDAsImg0IiksT2UoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIiksaGUoKSl9ZnVuY3Rpb24gRlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxPVHQsMiwwLCJoNCIsMzEpKDIsUFR0LDIsMCwiaDQiLDMxKSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5tZXRhdHlwZXNMb2FkaW5nKX19ZnVuY3Rpb24gSFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSkoMSwic3BhbiIsMzApLE9lKDIsIiBMb2FkaW5nLi4uICIp''@;'; put 'put ''LGhlKCksZ3QoMyxGVHQsMywyLCJkaXYiLDMxKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgzKSx4ZSgibmdJZiIsYS5sb2FkaW5nKX19ZnVuY3Rpb24gTlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwzOCkoMSwiaW5wdXQiLDM5LDEpLGdpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKDIpO3JldHVybiBtaShmLm1ldGFPYmplY3RTZWFyY2gsaCl8fChmLm1ldGFPYmplY3RTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLm1ldGFPYmplY3RPbkZpbHRlcigp''@;'; put 'put ''KX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSxwaSgibmdNb2RlbCIsYS5tZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24gVlR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIEJUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlv''@;'; put 'put ''biBqVHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O2ZlKCksRHIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIHpUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJk''@;'; put 'put ''aXYiKSxndCgzLFZUdCwxLDAsImNsci1pY29uIiw1MSkoNCxCVHQsMSwwLCJjbHItaWNvbiIsNTIpLE9lKDUpLGhlKCksZ3QoNixqVHQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVh''@;'; put 'put ''ZGVyIiwhYS5jb3VudCksZmUoMikseGUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLHhlKCJuZ0lmIixhLmNvdW50KSxmZSgpLERyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLHhlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIFVUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0Nyks''@;'; put 'put ''Z3QoMSx6VHQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksZWwoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoNik7eGUoImNsckxhenkiLCEwKSxmZSgpLHhlKCJjbHJSZWN1cnNpdmVGb3JPZiIsRGMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEu''@;'; put 'put ''Z2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBaVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxndCgxLFVUdCwzLDUsImNsci10cmVlIiw0NiksaGUoKSksMiZjKXtjb25zdCBhPUxlKDUpO2ZlKCkseGUoIm5nSWYiLGEuc2hvd0FjYyl9fWZ1bmN0aW9uIFdUdChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1hY2NvcmRpb24tcGFuZWwiLDQyKSxGdCgiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCkuJGltcGxpY2l0LHY9TGUoMyk7cmV0dXJuIEN0KGg/di5wYW5lbENoYW5nZSho''@;'; put 'put ''LGYpOiIiKX0pLGRlKDEsImNsci1hY2NvcmRpb24tdGl0bGUiKSxHdCgyLCJjbHItaWNvbiIsNDMpLE9lKDMpLGRlKDQsInAiLDQ0KSxPZSg1KSxoZSgpKCksZ3QoNixaVHQsMiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQ1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNp''@;'; put 'put ''dDtmZSgzKSxEcigiICIsYS5OQU1FLCIgIiksZmUoMiksd3IoYS5JRCl9fWZ1bmN0aW9uIFlUdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsV1R0LDcsMiwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5o''@;'; put 'put ''aWRkZW4pfX1mdW5jdGlvbiBHVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSgxLCJjbHItYWNjb3JkaW9uIiksZ3QoMixZVHQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlz''@;'; put 'put ''dCl9fWZ1bmN0aW9uICRUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBLVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gcVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgpLERyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBYVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3QoMywkVHQsMSwwLCJjbHItaWNvbiIsNTEpKDQsS1R0LDEsMCwiY2xyLWljb24iLDUyKSxPZSg1KSxoZSgp''@;'; put 'put ''LGd0KDYscVR0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSxUcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLGZlKDIpLHhlKCJuZ0lmIiwhYS5jb3VudCksZmUoKSx4ZSgibmdJZiIsYS5jb3VudCksZmUo''@;'; put 'put ''KSxEcigiICIsYS5kaXNwbGF5LCIgIiksZmUoKSx4ZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBKVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEsWFR0LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLGVsKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPUxl''@;'; put 'put ''KDQpO3hlKCJjbHJMYXp5IiwhMCksZmUoKSx4ZSgiY2xyUmVjdXJzaXZlRm9yT2YiLERjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gUVR0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwiZGl2Iiw1NSksR3QoMiwi''@;'; put 'put ''Y2xyLWljb24iLDQzKSxkZSgzLCJkaXYiLDU2KSg0LCJwIiw1NyksT2UoNSksaGUoKSxkZSg2LCJwIiw1OCksT2UoNyksaGUoKSgpKCksZ3QoOCxKVHQsMyw1LCJjbHItdHJlZSIsNDYpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDMpO2ZlKDUpLERyKCIgIixhLk5BTUUs''@;'; put 'put ''IiAiKSxmZSgyKSxEcigiICIsYS5JRCwiICIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0FjYyl9fWZ1bmN0aW9uIGVBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApLGd0KDEsUVR0LDksMywibmctY29udGFpbmVyIiw3KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibmdG''@;'; put 'put ''b3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiB0QXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxPZSgyKSxoZSgpLGRlKDMsImNsci1kZy1jZWxsIiksT2UoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLE9lKDYpLGhlKCko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuVFlQRSksZmUoMiksd3IoYS5OQU1FKSxmZSgyKSx3cihhLlZBTFVFKX19ZnVuY3Rpb24gbkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiw1OSkoMSwiY2xyLWRnLWNvbHVtbiIpLE9lKDIsIiBUWVBFICIp''@;'; put 'put ''LEd0KDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiksT2UoNSwiIE5BTUUgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iKSxPZSg4LCIgVkFMVUUgIiksR3QoOSwiY2xyLWRnLXN0''@;'; put 'put ''cmluZy1maWx0ZXIiLDYwKSxoZSgpLGd0KDEwLHRBdCw3LDMsImNsci1kZy1yb3ciLDYxKSxkZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5hdGlvbiIsNjIsMikoMTQsImNsci1kZy1wYWdlLXNpemUiLDYzKSxPZSgxNSwiQXR0cmlidXRlcyBwZXIgcGFnZSIpLGhlKCks''@;'; put 'put ''T2UoMTYpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9aGEoMTMpLGQ9TGUoMik7ZmUoMykseGUoImNsckRnU3RyaW5nRmlsdGVyIixkLnR5cGVGaWx0ZXIpLGZlKDMpLHhlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5uYW1lRmlsdGVyKSxmZSgzKSx4ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudmFs''@;'; put 'put ''dWVGaWx0ZXIpLGZlKCkseGUoImNsckRnSXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksZmUoMikseGUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSx4ZSgiY2xyUGFnZVNpemVPcHRpb25zIixHcyg5LEVUdCkpLGZlKDIpLFZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFz''@;'; put 'put ''dEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gckF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMikoMSwiZGl2IiwzMyksZ3QoMixOVHQsMywxLCJkaXYiLDM0KSxHdCgzLCJiciIpLGd0KDQsR1R0LDMsMSwiZGl2IiwzNSkoNSxlQXQsMiwx''@;'; put 'put ''LCJkaXYiLDM1KSxoZSgpLGRlKDYsImRpdiIsMzYpKDcsImgzIiksT2UoOCksaGUoKSxndCg5LG5BdCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSgyKSx4ZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLGZlKDIp''@;'; put 'put ''LHhlKCJuZ0lmIiwhYS5vYmplY3RWaWV3KSxmZSgpLHhlKCJuZ0lmIixhLm9iamVjdFZpZXcpLGZlKDMpLHdyKGEuYXNzb09iamVjdFNlbGVjdGVkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dUYWJsZSl9fWxldCBadGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhp''@;'; put 'put ''cy5ldmVudFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnJvdXRlPU0sdGhpcy5tZXRhRGF0YVNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0QXNz''@;'; put 'put ''b2NpYXRpb25zPVtdLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YURhdGFJZD0iIix0aGlzLmxvYWRpbmc9ITAsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSEwLHRoaXMubWV0YU9iamVjdFNpemU9MjAwLHRoaXMu''@;'; put 'put ''YXNzb1R5cGVTZWxlY3RlZD0iIix0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIix0aGlzLnJlcG9zaXRvcnk9IiIsdGhpcy5vYmplY3RSb3V0ZT0hMSx0aGlzLnNob3dEYXRhPSExLHRoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmdldENoaWxkcmVuPUk9PkkuY291bnQ/Zm8oSS5kZXRhaWxzKTp0''@;'; put 'put ''aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTpJLkFTU09DVVJJfV19KS50aGVuKGllPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1pZS5hZGFwdGVyUmVzcG9uc2UuYXR0''@;'; put 'put ''cmlidXRlcyx0aGlzLmFzc29PYmplY3RTZWxlY3RlZD1JLk5BTUU7bGV0IHVlPXRoaXMucm91dGVyLnVybDtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5vYmplY3RSb3V0ZT91ZS5zbGljZSgwLHVlLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK0kuQVNT''@;'; put 'put ''T0NVUkkuc2xpY2UoMStJLkFTU09DVVJJLmluZGV4T2YoIlxcIikpOnVlKyIvb2JqZWN0LyIrSS5BU1NPQ1VSSS5zbGljZSgxK0kuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSkpLHRoaXMuZ2V0QXNzb3NpYXRpb25zQ291bnQoaWUuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyl9KSx0aGlz''@;'; put 'put ''LmRlYm91bmNlPSExfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbWV0YWRhdGEiLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIpJiYodGhpcy5vYmplY3RSb3V0ZT0hMCx0aGlzLm9iamVjdFZpZXc9ITApLHRoaXMu''@;'; put 'put ''cGFnZVNpemU9NSxLbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QmJktuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMmJiF0aGlzLm9iamVjdFJvdXRlPyh0aGlzLm1ldGFEYXRhTGlzdD1Lbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3QsdGhpcy5yZXBvc2l0b3JpZXM9S24ubWV0YWRhdGEubWV0YVJl''@;'; put 'put ''cG9zaXRvcmllcyx0aGlzLnJlcG9zaXRvcnk9S24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITEsdGhpcy5tZXRhRGF0YVNlYXJjaD1Lbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaCk6KHRoaXMuc2FzU2VydmljZS5y''@;'; put 'put ''ZXF1ZXN0KCJtZXRhbmF2L21ldGF0eXBlcyIsbnVsbCkudGhlbihhPT57dGhpcy5tZXRhRGF0YUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudHlwZXMsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9hZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9''@;'; put 'put ''ITF9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5w''@;'; put 'put ''dXNoKGEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUpLCJGb3VuZGF0aW9uIj09PWEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbMF0uTkFN''@;'; put 'put ''RSxLbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDts''@;'; put 'put ''ZXQgaD0iIixmPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2Jq''@;'; put 'put ''ZWN0T25DbGljayh0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVl''@;'; put 'put ''SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEi''@;'; put 'put ''KSx0aGlzLnNob3dEYXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNl''@;'; put 'put ''bGVjdG1ldGFPYmplY3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19''@;'; put 'put ''KS50aGVuKHY9PntoLm1ldGFPYmplY3RMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1ldGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVkPWEsaC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5z''@;'; put 'put ''aG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFP''@;'; put 'put ''YmplY3RBc3NvY2lhdGlvbnM9di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zLGgucm9vdCQ9Zm8oaC5nZXRBc3Nvc2lhdGlvbnNDb3VudCh2LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IE09di5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UuYXR0cmlidXRlcy5maW5kKEc9PiJOYW1lIj09PUcuTkFNRSkuVkFMVUU7aC5hc3NvT2JqZWN0U2VsZWN0ZWQ9TSxkLk5BTUU9TTtsZXQgST1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RSb3V0ZT9JLnNsaWNlKDAsSS5sYXN0SW5kZXhPZigib2JqZWN0''@;'; put 'put ''IikpKyJvYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKTpJKyIvb2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxz''@;'; put 'put ''KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''LmF0dHJpYnV0ZXMsaC5zaG93VGFibGU9ITB9KX0pKCl9Z2V0QXNzb3NpYXRpb25zQ291bnQoYSl7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGYgb2YgYSl7ZC5oYXMoZi5BU1NPQyl8fGQuc2V0KGYuQVNTT0Mse2NvdW50OjAsZGV0YWlsczpbXX0pO2xldCB2PWQuZ2V0KGYuQVNTT0MpO3YuY291''@;'; put 'put ''bnQrKyx2LmRldGFpbHMucHVzaCh7QVNTT0NVUkk6Zi5BU1NPQ1VSSSxOQU1FOmYuTkFNRSxkaXNwbGF5OmYuTkFNRSxVUkk6Zi5BU1NPQ1VSSS5zbGljZShmLkFTU09DVVJJLmluZGV4T2YoIjoiKSsxKX0pfWxldCBoPVtdO3JldHVybiBkLmZvckVhY2goZnVuY3Rpb24oZix2KXtoLnB1c2go''@;'; put 'put ''e0FTU09DOnYsY291bnQ6Zi5jb3VudCxkZXRhaWxzOmYuZGV0YWlscyxkaXNwbGF5OnYrIiAoICIrZi5jb3VudCsiICkifSl9KSxofXNldFR5cGVBc3Nvc2lhdGlvbnMoYSl7bGV0IGQ9W107Zm9yKGxldCBoIG9mIHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucyloLkFTU09DPT09YSYmZC5w''@;'; put 'put ''dXNoKGgpO3JldHVybiB0aGlzLmFzc29zaWF0aW9uTmFtZXM9ZCxkfWFzc29zaWF0aW9uTmFtZU9uQ2xpY2soYSl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNlbGVjdEFzc29zaWF0aW9u''@;'; put 'put ''c0RldGFpbHMoYSl9bWV0YUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5tZXRhRGF0YVNlYXJjaCwiSUQiKSxLbi5tZXRhZGF0YS5tZXRhRGF0YVNlYXJjaD10aGlzLm1ldGFEYXRhU2VhcmNofW1ldGFPYmpl''@;'; put 'put ''Y3RPbkZpbHRlcigpe3RoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5oZWxwZXJTZXJ2aWNlLm1ldGFPYmplY3RPbkZpbHRlcih0aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdFNlYXJjaCwiTkFNRSIpLHRoaXMuZ2V0TWV0YU9iamVjdEF0dHJpYnV0ZXModGhpcy5t''@;'; put 'put ''ZXRhT2JqZWN0U2l6ZSksS24ubWV0YWRhdGEubWV0YU9iamVjdFNlYXJjaD10aGlzLm1ldGFPYmplY3RTZWFyY2h9Z2V0TWV0YU9iamVjdEF0dHJpYnV0ZXMoYSl7aWYodm9pZCAwIT09dGhpcy5tZXRhT2JqZWN0TGlzdCYmdGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg+YSl7bGV0IGQ9MCxo''@;'; put 'put ''PS0xO2ZvcihsZXQgZj0wO2Y8dGhpcy5tZXRhT2JqZWN0TGlzdC5sZW5ndGg7ZisrKWlmKCh2b2lkIDA9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbnx8ITE9PT10aGlzLm1ldGFPYmplY3RMaXN0W2ZdLmhpZGRlbikmJmQrKyxkPT09YSl7aD1mO2JyZWFrfXRoaXMubWV0YU9iamVj''@;'; put 'put ''dFNob3dMaXN0PS0xIT09aD90aGlzLm1ldGFPYmplY3RMaXN0LnNsaWNlKDAsaCk6dGhpcy5tZXRhT2JqZWN0TGlzdH1lbHNlIHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3R9cGFuZWxDaGFuZ2UoYSxkKXt0aGlzLmRlYm91bmNlfHwodGhpcy5tZXRhT2JqZWN0''@;'; put 'put ''T25DbGljayhkLklELGQpLHRoaXMuZGVib3VuY2U9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuZGVib3VuY2U9ITF9LDYwMCkpfXVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpe0tuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKEJzKSxHZShTdSksR2UoZmgpLEdlKExzKSxHZShDdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250''@;'; put 'put ''YWluZXIiXSxkZWNsczoxNyx2YXJzOjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFy''@;'; put 'put ''ZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFy''@;'; put 'put ''Y2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIs''@;'; put 'put ''Im5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xy''@;'; put 'put ''RXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxb''@;'; put 'put ''InNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQs''@;'; put 'put ''Im5nSWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRh''@;'; put 'put ''dGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEs''@;'; put 'put ''Im9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZlRm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFj''@;'; put 'put ''ay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxvYXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIs''@;'; put 'put ''IndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNp''@;'; put 'put ''emVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxPZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IiksaGUoKSxkZSg1LCJzZWxlY3QiLDQpLGdpKCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gbWkoaC5yZXBvc2l0b3J5LHYpfHwoaC5yZXBvc2l0b3J5PXYpLHZ9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksZ3QoNixUVHQsMiwyLCJvcHRpb24iLDUpLGhlKCko''@;'; put 'put ''KSgpLGRlKDcsImNsci10cmVlIiksZ3QoOCxEVHQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LFJUdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpLGRlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLE9lKDEzKSxoZSgpLGd0KDE0LExUdCw0LDAsImRpdiIsMTEpKDE1''@;'; put 'put ''LEhUdCw0LDEsImRpdiIsMTIpKDE2LHJBdCwxMCw1LCJkaXYiLDEzKSxoZSgpKCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLnJlcG9zaXRvcnkpLGZlKCkseGUoIm5nRm9yT2YiLGgucmVwb3NpdG9yaWVzKSxmZSgyKSx4ZSgibmdJZiIsaC5tZXRhRGF0YUxpc3QpLGZlKCkseGUoIm5n''@;'; put 'put ''Rm9yT2YiLGgubWV0YURhdGFMaXN0KSxmZSg0KSx3cihoLmFzc29UeXBlU2VsZWN0ZWQpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRpbmcmJiFoLm1ldGFPYmplY3RMaXN0KSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGguc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''Oltucyx5YSxBMixrMixxbCxUMixubCwkcyxBbSxRZixSNyxjTyxKYixYeCx1TyxFbSxIZGUsU3AsTDcsdF8sVG0sazcseG0sRDcsZEcsRWgsUGQsWmRlLEhsLGowLEIxZSxkcyxaMSxFNywkYixFMWUsRkwsQTFlLFQxZSxrMWUsRFksaTQscjQsRU1dLGVuY2Fwc3VsYXRpb246Mn0pfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaUF0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGFBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixDdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBvQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYucm9sZVNlYXJjaCxoKXx8KGYucm9sZVNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LGlBdCwxLDAsImNsci1pY29uIiwxMCkoNSxhQXQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLnJvbGVT''@;'; put 'put ''ZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gc0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChh''@;'; put 'put ''KTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnJvbGVPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLE9lKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1wbGljaXQsZD1MZSgpO1RyKCJhY3RpdmUiLGEuUk9MRVVSST09''@;'; put 'put ''PWQucm9sZVVyaSksZmUoMyksRHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxzQXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9''@;'; put 'put ''fWZ1bmN0aW9uIGNBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxPZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHVBdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gZEF0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLE9lKDIpLGhlKCksZGUoMywidGQiLDMwKSxPZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksT2UoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLE9lKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5r''@;'; put 'put ''IiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuVVJJTUVNKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksd3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gaEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFi''@;'; put 'put ''bGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCkoKSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiksT2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwz''@;'; put 'put ''MCkoMTMsImIiKSxPZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYsZEF0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgxNikseGUoIm5nRm9yT2YiLGEucm9sZU1lbWJlcnMpfX1mdW5jdGlvbiBmQXQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJoNSIpLE9lKDEsIk5vIEdyb3VwcyBQcmVzZW50ICEiKSxoZSgpKX1mdW5jdGlvbiBwQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLE9lKDQpLGhlKCksZGUoNSwidGQiLDMwKSxPZSg2KSxoZSgpLGRlKDcsInRk''@;'; put 'put ''IiwzMCksT2UoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJTUVNKSxmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUo''@;'; put 'put ''Miksd3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gZ0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI4KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDI5KSg0LCJiIiksT2UoNSwiTkFNRSIpLGhlKCkoKSxkZSg2LCJ0ZCIsMjkpKDcsImIiKSxPZSg4LCJFTUFJTCIpLGhlKCko''@;'; put 'put ''KSxkZSg5LCJ0ZCIsMjkpKDEwLCJiIiksT2UoMTEsIkNSRUFURUQiKSxoZSgpKCksZGUoMTIsInRkIiwzMCkoMTMsImIiKSxPZSgxNCwiVVBEQVRFRCIpLGhlKCkoKSgpKCksZGUoMTUsInRib2R5IiksZ3QoMTYscEF0LDksNSwidHIiLDMxKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtm''@;'; put 'put ''ZSgxNikseGUoIm5nRm9yT2YiLGEucm9sZUdyb3Vwcyl9fWZ1bmN0aW9uIG1BdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInRhYmxlIiwyMikoNCwidGJvZHkiKSg1LCJ0ciIpKDYsInRkIiwyMykoNywicCIsMjQpKDgsImIiKSxPZSg5KSxo''@;'; put 'put ''ZSgpKCkoKSgpLGRlKDEwLCJ0ciIpKDExLCJ0ZCIsMjMpKDEyLCJpIiksT2UoMTMpLGhlKCkoKSgpKCkoKSgpKCksZGUoMTQsImRpdiIsMjApKDE1LCJkaXYiLDIxKSgxNiwiZGl2IiwyNSkoMTcsImRpdiIpKDE4LCJoMyIpLE9lKDE5KSxoZSgpLGd0KDIwLHVBdCwyLDAsImg1Iiw2KSxkZSgy''@;'; put 'put ''MSwiZGl2IiwyNiksZ3QoMjIsaEF0LDE3LDEsInRhYmxlIiwyNyksaGUoKSgpLEd0KDIzLCJociIpLGRlKDI0LCJkaXYiKSgyNSwiaDMiKSxPZSgyNiksaGUoKSxndCgyNyxmQXQsMiwwLCJoNSIsNiksZGUoMjgsImRpdiIsMjYpLGd0KDI5LGdBdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxH''@;'; put 'put ''dCgzMCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUoKTtmZSg5KSx3cihhLnJvbGVOYW1lKSxmZSg0KSx3cihhLnJvbGVEZXNjKSxmZSg2KSxEcigiTUVNQkVSUyAoIixhLnJvbGVNZW1iZXJzQ291bnQsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQp''@;'; put 'put ''LGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnJvbGVNZW1iZXJzQ291bnQpLGZlKDQpLERyKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEucm9sZUdyb3Vwc0NvdW50KX19bGV0IFM3''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xl''@;'; put 'put ''TmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSExfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hv''@;'; put 'put ''dC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNl''@;'; put 'put ''YXJjaD1Lbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PUtuLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWEu''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLnJvbGVzLEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xldCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlz''@;'; put 'put ''LmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1i''@;'; put 'put ''ZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhp''@;'; put 'put ''cy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Lbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Lbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJl''@;'; put 'put ''cXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLEtuLnVzZXJuYXYucm9sZUxpc3Q9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy5wYXJhbVByZXNlbnQmJnZvaWQgMCE9PXRoaXMucm9sZXMpe2xl''@;'; put 'put ''dCBkPXRoaXMuZmluZFJvbGUodGhpcy5yb2xlcyx0aGlzLnBhcmFtVVJJKTshMSE9PWQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGY9Pnt0''@;'; put 'put ''aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRo''@;'; put 'put ''aXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxLbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlv''@;'; put 'put ''bi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9s''@;'; put 'put ''ZSIse2l3YW50Olt7cm9sZWlkOmEuUk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhp''@;'; put 'put ''cy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xF''@;'; put 'put ''REVTQ30pfWZpbmRSb2xlKGEsZCl7bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEJzKSxHZShTdSksR2UoTHMpLEdlKGZoKSxHZShDdSkpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNs''@;'; put 'put ''YXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFw''@;'; put 'put ''cFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsi''@;'; put 'put ''c2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJd''@;'; put 'put ''LFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRh''@;'; put 'put ''dGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxp''@;'; put 'put ''bmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxndCgyLG9BdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsbEF0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LGNBdCwzLDAs''@;'; put 'put ''ImRpdiIsNSkoNixtQXQsMzEsOCwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsaC5yb2xlcyksZmUoKSx4ZSgibmdGb3JPZiIsaC5yb2xlcyksZmUoMikseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5yb2xlTWVtYmVycyYmIWgubG9hZGluZykpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W25zLHlhLGMxLHFsLG5sLCRzLEVoLFBkLEhsLFoxLGk0LHI0XSxzdHlsZXM6WyI6Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9OjpuZy1kZWVwIGJvZHlb''@;'; put 'put ''Y2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''OWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6''@;'; put 'put ''MTAwJX0ucm9sZS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6M3B4fS5yb2xlLWRhdGF7bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhIGgzLC5yb2xlLWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRh''@;'; put 'put ''aW5lcntvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksdkF0PSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEs''@;'; put 'put ''ImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx5QXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29u''@;'; put 'put ''dGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W3JnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGJBdChjLGwpezEmYyYmR3QoMCwiY2xy''@;'; put 'put ''LWljb24iLDEyKX1mdW5jdGlvbiBfQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIsQ3QoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSksaGUo''@;'; put 'put ''KX19ZnVuY3Rpb24gd0F0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpO3JldHVybiBtaShmLnVzZXJTZWFyY2gs''@;'; put 'put ''aCl8fChmLnVzZXJTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxiQXQsMSwwLCJjbHItaWNvbiIsMTApKDUsX0F0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWhhKDMpLGQ9TGUoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC51c2VyU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIENBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl''@;'; put 'put ''KDAsImNsci10cmVlLW5vZGUiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS51c2VyT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKCkuJGltcGxpY2l0LGQ9TGUoKTtUcigiYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSxmZSgzKSxEcigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIFNBdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsQ0F0LDQsMywiY2xyLXRy''@;'; put 'put ''ZWUtbm9kZSIsMTQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBNQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksT2UoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB4QXQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihzaSgwKSxkZSgxLCJ0ciIpKDIsInRkIiwyNyksT2UoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLGRlKDQsImIiKSxPZSg1KSxoZSgpKCkoKSxkZSg2LCJ0ciIpKDcsInRkIiwyNyksT2UoOCwiIE1ldGFkYXRhIFVwZGF0ZWQ6ICIpLGRlKDksImIiKSxPZSgxMCksaGUo''@;'; put 'put ''KSgpKCksbGkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDUpLHdyKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSxmZSg1KSx3cihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIEVBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRh''@;'; put 'put ''YmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxPZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLE9lKDEzKSxoZSgpKCkoKSgpLGd0KDE0LHhBdCwxMSwyLCJuZy1jb250YWluZXIiLDYp''@;'; put 'put ''LGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSg4KSx3cihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLHdyKGEudXNlckluZm8uRElTUExBWU5BTUUpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19ZnVuY3Rpb24gVEF0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE9lKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3KSxPZSgxMSwiIFVzZXIgSUQ6ICIpLGRlKDEyLCJiIiksT2Uo''@;'; put 'put ''MTMpLGhlKCkoKSgpLGRlKDE0LCJ0ciIpKDE1LCJ0ZCIsMjcpLE9lKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksZGUoMTcsImIiKSxPZSgxOCksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDgpLHdyKGEudXNlckluZm8uTkFNRSksZmUoNSksd3IoYS51c2VySW5m''@;'; put 'put ''by5VUkkpLGZlKDUpLHdyKGEudXNlckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBBQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLE9lKDEsIk5vIEVtYWlscyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24ga0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLE9lKDIpLGhlKCks''@;'; put 'put ''ZGUoMywidGQiLDMxKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSx3cihhLkVNQUlMKSxmZSgyKSx3cihhLlRZUEUpfX1mdW5jdGlvbiBEQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQs''@;'; put 'put ''ImIiKSxPZSg1LCJFTUFJTCIpLGhlKCkoKSxkZSg2LCJ0ZCIsMzEpKDcsImIiKSxPZSg4LCJUWVBFIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLGtBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgxMCkseGUoIm5nRm9yT2YiLGEudXNlckVtYWls''@;'; put 'put ''cyl9fWZ1bmN0aW9uIElBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLEFBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LERBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLERyKCJFTUFJ''@;'; put 'put ''TFMgKCIsYS51c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBSQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gTEF0KGMsbCl7MSZj''@;'; put 'put ''JiYoZGUoMCwiaDUiKSxPZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIE9BdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwzMyksT2UoMSksaGUoKSksMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMv''@;'; put 'put ''IithLlVSSSksZmUoKSxEcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gUEF0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidGQiLDMzKSxPZSgyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtmZSgpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5h''@;'; put 'put ''di9ncm91cHMvIisoYS5HUk9VUFVSSXx8YS5VUkkpKSxmZSgpLERyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBGQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLGd0KDEsT0F0LDIsMiwidGQiLDMyKSgyLFBBdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPUxlKDMpO2ZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIEhBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJv''@;'; put 'put ''ZHkiKSxndCgyLEZBdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSx4ZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gTkF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIFZBdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8g''@;'; put 'put ''Um9sZXMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEJBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDM0KSxPZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPUxlKDQpO2ZlKCkseGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5n''@;'; put 'put ''ZXRSb2xlVVJJKGEuUk9MRVVSSSkpLGZlKCksRHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gakF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGd0KDIsQkF0LDMsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDMpO2ZlKDIpLHhlKCJu''@;'; put 'put ''Z0Zvck9mIixhLnVzZXJSb2xlcyl9fWZ1bmN0aW9uIHpBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksT2UoMiksaGUoKSxndCgzLFZBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LGpBdCwzLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUo''@;'; put 'put ''Mik7ZmUoMiksRHIoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rpb24gVUF0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9u''@;'; put 'put ''IFpBdChjLGwpezEmYyYmKGRlKDAsImg1IiksT2UoMSwiTm8gTG9naW5zIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBXQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksT2UoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGlt''@;'; put 'put ''cGxpY2l0O2ZlKDIpLHdyKGEuRE9NQUlOKSxmZSgyKSx3cihhLlVTRVJJRCl9fWZ1bmN0aW9uIFlBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLE9lKDUsIkRPTUFJTiIpLGhlKCkoKSxkZSg2LCJ0ZCIpKDcsImIi''@;'; put 'put ''KSxPZSg4LCJVU0VSIElEIiksaGUoKSgpKCkoKSxkZSg5LCJ0Ym9keSIpLGd0KDEwLFdBdCw1LDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgxMCkseGUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1bmN0aW9uIEdBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIp''@;'; put 'put ''KDEsImgzIiksT2UoMiksaGUoKSxndCgzLFpBdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI0KSxndCg1LFlBdCwxMSwxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLERyKCJMT0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLDA9PWEudXNlckxvZ2luc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiAkQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEVBdCwxNSwzLCJkaXYiLDIwKSgyLFRBdCwxOSwzLCJkaXYiLDIwKSxkZSgzLCJkaXYiLDIx''@;'; put 'put ''KSg0LCJkaXYiLDIyKSg1LCJkaXYiLDIzKSxndCg2LElBdCw2LDMsImRpdiIsNikoNyxSQXQsMSwwLCJociIsNiksZGUoOCwiZGl2IikoOSwiaDMiKSxPZSgxMCksaGUoKSxndCgxMSxMQXQsMiwwLCJoNSIsNiksZGUoMTIsImRpdiIsMjQpLGd0KDEzLEhBdCwzLDEsInRhYmxlIiwyNSksaGUo''@;'; put 'put ''KSgpLGd0KDE0LE5BdCwxLDAsImhyIiw2KSgxNSx6QXQsNiwzLCJkaXYiLDYpKDE2LFVBdCwxLDAsImhyIiw2KSgxNyxHQXQsNiwzLCJkaXYiLDYpLEd0KDE4LCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksZmUoNCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzOSksZmUoMyksRHIoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09''@;'; put 'put ''YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkp''@;'; put 'put ''fX1sZXQgTTdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0''@;'; put 'put ''aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBtaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPUIwLlksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRT''@;'; put 'put ''ZXJ2ZXJUeXBlKCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmll''@;'; put 'put ''dy91c2VybmF2L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2Vu''@;'; put 'put ''dCl0aGlzLnVzZXJzPUtuLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUtuLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUtuLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybCsiL2lkZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURF''@;'; put 'put ''UjpmLnByb3ZpZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxLbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UudXNlcnMsS24udXNlcm5hdi51c2VyTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS51c2Vyc30pKToodGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51c2VybmF2LnVzZXJTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50KWlmKHRoaXMubG9h''@;'; put 'put ''ZGluZz0hMCx0aGlzLmlzVml5YSl7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2ErIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNh''@;'; put 'put ''dGlvbi9qc29uIn19KS50aGVuKGQ9PmQudGV4dCgpKS50aGVuKGQ9PntsZXQgaD1KU09OLnBhcnNlKGQpO3RoaXMudXNlckRhdGE9aCx0aGlzLmxvYWRpbmc9ITE7bGV0IGY9aC5pdGVtcy5tYXAodj0+KHtHUk9VUE5BTUU6di5uYW1lLFVSSTp2LmlkfSkpO3RoaXMudXNlckdyb3Vwcz1mLHRo''@;'; put 'put ''aXMudXNlckdyb3Vwc0NvdW50PWYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEpKX0pfWVsc2V7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYv''@;'; put 'put ''dXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YX1dfSkudGhlbihoPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQjAuWS5TYXM5OnRoaXMudXNlckluZm89aC5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhp''@;'; put 'put ''cy51c2VyTG9naW5zPWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQjAuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJ''@;'; put 'put ''PT09YSk7ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Zi5JRCxOQU1FOmYuTkFNRSxESVNQTEFZTkFNRTpmLk5BTUV9fX10aGlzLnVzZXJEYXRhPWguYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1oLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVzZXJzLHRoaXMudXNlclNlYXJjaCwiTkFNRSIpLEtuLnVzZXJu''@;'; put 'put ''YXYudXNlclNlYXJjaD10aGlzLnVzZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5j''@;'; put 'put ''b2RlVVJJKGEuVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9u''@;'; put 'put ''L2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy51c2VyRGF0YT1mLHRoaXMubG9hZGluZz0hMTtsZXQgdj1mLml0ZW1zLm1hcChNPT4oe0dST1VQTkFNRTpNLm5hbWUsVVJJOk0uaWR9KSk7dGhpcy51c2VyR3JvdXBzPXYsdGhpcy51''@;'; put 'put ''c2VyR3JvdXBzQ291bnQ9di5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKE09Pk0uVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmEuVVJJfV19KS50''@;'; put 'put ''aGVuKGY9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCMC5ZLlNhczk6dGhpcy51c2VySW5mbz1mLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1mLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9''@;'; put 'put ''Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRo''@;'; put 'put ''aXMudXNlckxvZ2luc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJlYWs7Y2FzZSBCMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hLlVSSSk7ZWxzZXtjb25zdCB2PWYuYWRhcHRlclJlc3BvbnNl''@;'; put 'put ''Lmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6di5JRCxOQU1FOnYuTkFNRSxESVNQTEFZTkFNRTp2Lk5BTUV9fX10aGlzLnVzZXJEYXRhPWYuYWRhcHRlclJlc3BvbnNlLHRoaXMudXNlckdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5h''@;'; put 'put ''ZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoU3UpLEdlKEJzKSxHZShD''@;'; put 'put ''dSksR2UoZmgpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJz''@;'; put 'put ''aWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1z''@;'; put 'put ''ZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwi''@;'; put 'put ''c2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2lu''@;'; put 'put ''dGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUt''@;'; put 'put ''Y29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5r''@;'; put 'put ''QWN0aXZlIiwiYWN0aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGVi''@;'; put 'put ''YXIiLDEpKDEsImNsci10cmVlIiksZ3QoMix3QXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFNBdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxNQXQsMywwLCJkaXYiLDUpKDYsJEF0LDE5LDExLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLHhl''@;'; put 'put ''KCJuZ0lmIixoLnVzZXJzKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnVzZXJzKSxmZSgyKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbnMseWEsYzEscGIscWwsbmwsJHMsRWgsUGQsSGwsWjEsaTQscjRd''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgS0F0PWM9Plsic2VnbWVudCIsY10scUF0PShjLGwpPT4oeyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gWEF0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIEpB''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNwYW4iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS5vblZhbHVlQ2xpY2soaCkpfSksT2UoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS4kaW1w''@;'; put 'put ''bGljaXQ7ZmUoKSx3cihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gUUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEZ0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChM''@;'; put 'put ''ZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdCxkPUxlKCk7ZmUoKSx4ZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50''@;'; put 'put ''RGVwdGgrMSl9fWZ1bmN0aW9uIGVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoTGUoKS50b2dnbGUoaCkpfSksZ3QoMixYQXQs''@;'; put 'put ''MSwwLCJkaXYiLDQpLGRlKDMsInNwYW4iLDUpLE9lKDQpLGhlKCksZGUoNSwic3BhbiIsNiksT2UoNiwiOiAiKSxoZSgpLGd0KDcsSkF0LDIsMSwic3BhbiIsNyksaGUoKSxndCg4LFFBdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTt4''@;'; put 'put ''ZSgibmdDbGFzcyIsc3AoNixLQXQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCkseGUoIm5nQ2xhc3MiLGxwKDgscUF0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLHhlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksZmUoMiksd3IoYS5rZXkpLGZlKDMpLHhlKCJu''@;'; put 'put ''Z0lmIiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCB0a3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50''@;'; put 'put ''RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMu''@;'; put 'put ''anNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7''@;'; put 'put ''cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZh''@;'; put 'put ''bHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2go''@;'; put 'put ''dHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7''@;'; put 'put ''aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1''@;'; put 'put ''ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2Yg''@;'; put 'put ''RGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmco''@;'; put 'put ''MCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxJO3Jl''@;'; put 'put ''dHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRy''@;'; put 'put ''ZWY6TX06KGQuc2V0KGYsdiksQXJyYXkuaXNBcnJheShmKT8oST1bXSxmLmZvckVhY2goZnVuY3Rpb24oRyxpZSl7SVtpZV09aChHLHYrIlsiK2llKyJdIil9KSk6KEk9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihHKXtJW0ddPWgoZltHXSx2KyJbIitKU09OLnN0cmluZ2lm''@;'; put 'put ''eShHKSsiXSIpfSkpLEkpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFu''@;'; put 'put ''ZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5n''@;'; put 'put ''Q2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNs''@;'; put 'put ''aWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERl''@;'; put 'put ''cHRoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksZ3QoMSxla3QsOSwxMSwic2VjdGlvbiIsMSksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3d1LG5zLHlhLGNdLHN0eWxlczpbJ0BjaGFy''@;'; put 'put ''c2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292''@;'; put 'put ''ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21l''@;'; put 'put ''bnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2Nv''@;'; put 'put ''bG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFp''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQt''@;'; put 'put ''bWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdt''@;'; put 'put ''ZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNv''@;'; put 'put ''bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2Jq''@;'; put 'put ''ZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29s''@;'; put 'put ''b3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4g''@;'; put 'put ''LnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu''@;'; put 'put ''dC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29u''@;'; put 'put ''LXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1q''@;'; put 'put ''c29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5l''@;'; put 'put ''eHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNv''@;'; put 'put ''bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksbmt0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W1JhXX0pLGN9KSgpLHJrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxp''@;'; put 'put ''dCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpLGlrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyNCksT2UoMSksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0O2ZNKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxEcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gb2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxndCgxLGFrdCwyLDIsIm9wdGlvbiIsMjMpLGVsKDIsImtleXZhbHVlIiksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9TGUoKTt4ZSgibGFiZWwiLGEua2V5KSxmZSgpLHhlKCJuZ0Zvck9mIixEYygyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gc2t0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjUpLE9lKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFy''@;'; put 'put ''dCAiKSxoZSgpKX1mdW5jdGlvbiBsa3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gY2t0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHVrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMyksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYi''@;'; put 'put ''LDI4KSgyLCJpbnB1dCIsMjksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExl''@;'; put 'put ''KCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsY2t0LDEsMCwiY2xyLWljb24iLDMwKSg1LHVrdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLHhlKCJu''@;'; put 'put ''Z0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gaGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRp''@;'; put 'put ''bXBsaWNpdCx2PUxlKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgpLiRpbXBsaWNpdDtyZXR1cm4gbWkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5k''@;'; put 'put ''ZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkubGlua09uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxPZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPUxlKCku''@;'; put 'put ''JGltcGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLFV1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gZmt0KGMsbCl7aWYoMSZjJiYoc2koMCksZ3QoMSxoa3Qs''@;'; put 'put ''NCw0LCJjbHItdHJlZS1ub2RlIiwzNCksbGkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHBrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBna3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk''@;'; put 'put ''ZSgwLCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBta3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LHBrdCwxLDAsImNsci1pY29uIiwzMCkoNSxna3QsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9aGEoMyksZD1MZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixk''@;'; put 'put ''Lml0ZW1zU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIG1p''@;'; put 'put ''KGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLml0ZW1PbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksT2UoMyksaGUo''@;'; put 'put ''KSgpfWlmKDImYyl7Y29uc3QgYT1MZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxEcigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIHlrdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKHNpKDApLGd0KDEsdmt0LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBia3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gX2t0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImpzb24iLExlKDMpLmVuZHBvaW50SnNv''@;'; put 'put ''bikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gd2t0KGMsbCl7aWYoMSZjJiYoc2koMCksT2UoMSksZWwoMiwicHJldHR5anNvbiIpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSgzKTtmZSgpLERyKCJcbiAgICAgICAgICAgICIsRGMoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9''@;'; put 'put ''fWZ1bmN0aW9uIENrdChjLGwpe2lmKDEmYyYmKHNpKDApLE9lKDEsIlxuICAgICAgICAgICIpLGd0KDIsX2t0LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksT2UoMywiXG4gICAgICAgICAgIiksZ3QoNCx3a3QsMywzLCJuZy1jb250YWluZXIiLDIxKSxPZSg1LCJcbiAgICAgICAgIiksbGko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDIpLHhlKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gU2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7c2koMCksZGUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLE9lKDMsIiBHRVQgIiks''@;'; put 'put ''ZGUoNCwicCIsNDIpLGVsKDUsImxpbmtpbnplIiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLmNv''@;'; put 'put ''cHlCcmVhZGNydW1zKCkpfSksR3QoNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLE9lKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlucHV0Iiw0NCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSxPZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1''@;'; put 'put ''dCIsNDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPUxlKCk7cmV0dXJuIG1pKGYuZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KExlKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRlKDE5LCJwcmUiLDQ3KSxPZSgyMCwiICAgICAgICAiKSxndCgyMSxDa3QsNiwyLCJuZy1jb250YWluZXIiLDIxKSxPZSgyMiwiXG4gICAgICAiKSxoZSgpLGxp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPUxlKCk7ZmUoNCkseGUoImlubmVySFRNTCIsRGMoNSw3LGEuZW5kcG9pbnQudXJsKSxWNCksZmUoOCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCkscGkoIm5nTW9k''@;'; put 'put ''ZWwiLGEuZW5kcG9pbnQubGltaXQpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSx4ZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLHhlKCJuZ0lmIixhLmVuZHBvaW50SnNv''@;'; put 'put ''bil9fWxldCBNa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0i''@;'; put 'put ''Iix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1Nl''@;'; put 'put ''YXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IG1oLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0''@;'; put 'put ''QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEtuLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0''@;'; put 'put ''T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksS24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYp''@;'; put 'put ''fWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pT''@;'; put 'put ''T04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0tuLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhp''@;'; put 'put ''cy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxl''@;'; put 'put ''Y3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVz''@;'; put 'put ''dCI7YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwo''@;'; put 'put ''bnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3Jj''@;'; put 'put ''RWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2Fk''@;'; put 'put ''VXJsKGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmln''@;'; put 'put ''YXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9''@;'; put 'put ''IitkOiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlu''@;'; put 'put ''a3M9ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxp''@;'; put 'put ''bWl0fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlh''@;'; put 'put ''dGlvbiYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFN1KSxHZShU''@;'; put 'put ''VyksR2UoQnMpLEdlKHZjKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJl''@;'; put 'put ''ZUlucHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJhcGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJu''@;'; put 'put ''Z0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0''@;'; put 'put ''aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5r''@;'; put 'put ''IiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsz''@;'; put 'put ''LCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1l''@;'; put 'put ''IiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGlt''@;'; put 'put ''ZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRl''@;'; put 'put ''ciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0s''@;'; put 'put ''WzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1M''@;'; put 'put ''Il0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJi''@;'; put 'put ''dG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJdLFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tl''@;'; put 'put ''ZCIsImpzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksT2UoNCwiQVBJIENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMyks''@;'; put 'put ''Z2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBtaShoLmNvbGxlY3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxndCg2LG9rdCwzLDQsIm9wdGdyb3VwIiw0''@;'; put 'put ''KSxlbCg3LCJrZXl2YWx1ZSIpLGhlKCkoKSgpLGd0KDgsc2t0LDIsMCwicCIsNSksZGUoOSwiZGl2Iiw2KSxndCgxMCxsa3QsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxndCgxMixka3QsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyxma3QsMiwxLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDkpLGhlKCksZGUoMTQsImNsci10cmVlIiksZ3QoMTUsbWt0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYseWt0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJj''@;'; put 'put ''bHItdG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDE1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIG1pKGgucmF3SnNvbix2KXx8KGgucmF3SnNvbj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxPZSgyNSwi''@;'; put 'put ''UkFXIEpzb24iKSxoZSgpKCkoKSxkZSgyNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxHdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksT2UoMjksIiBBUEkgRXhwbG9yZXIgIiksZ3QoMzAsYmt0LDEsMCwi''@;'; put 'put ''Y2xyLXNwaW5uZXIiLDE5KSxoZSgpKCksR3QoMzEsImhyIiwyMCksZ3QoMzIsU2t0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSkscGkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSx4ZSgibmdGb3JPZiIsRGMoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUo''@;'; put 'put ''MikseGUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmVuZHBv''@;'; put 'put ''aW50TGlua3MpLGZlKDIpLHhlKCJuZ0lmIixoLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLGZlKCkseGUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNykscGkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNykseGUoIm5nSWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSx4ZSgibmdJ''@;'; put 'put ''ZiIsaC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbbnMseWEsQTIsazIscWwsdkwsTWQsVDIsbmwsJHMsRWgsUGQsSGwsajAsZHMsSWQsQmIsU2gsWjEsR0wsRTcsJGIsUmQsaTQscjQsdGt0LHdSLHJrdCxpa3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgeGt0PW5ldyBNdCgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IEVrdD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IFduLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0''@;'; put 'put ''aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97''@;'; put 'put ''Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlz''@;'; put 'put ''LndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0''@;'; put 'put ''ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVj''@;'; put 'put ''dFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5k''@;'; put 'put ''ZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBU''@;'; put 'put ''ZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNv''@;'; put 'put ''bmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhp''@;'; put 'put ''cy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xl''@;'; put 'put ''YXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlw''@;'; put 'put ''eCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25l''@;'; put 'put ''LnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFdhKSx4cih2cykseHIoeGt0LDgpKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxUa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRo''@;'; put 'put ''aXMuY2JPblN1Y2Nlc3M9bmV3IEtyLHRoaXMuY2JPbkVycm9yPW5ldyBLcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRs''@;'; put 'put ''ZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29u''@;'; put 'put ''dGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9z''@;'; put 'put ''dC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtp''@;'; put 'put ''c1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYm''@;'; put 'put ''dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFdhKSxHZShKaSksR2UoRW8pLEdlKEVrdCkpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W05uLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNz''@;'; put 'put ''TXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxBa3Q9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUmFdfSksY30pKCk7dmFyIGtrdD1iKDI1MDAxKTtsZXQgRGt0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChh''@;'; put 'put ''KTphO3JldHVybigwLGtrdC5DKShmLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IElrdD1b''@;'; put 'put ''InF1ZXJ5RmlsdGVyIl0sUmt0PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBMa3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDU0KSxHdCgxLCJjbHItc3Bpbm5lciIsNTUpLGhlKCkpfWZ1bmN0aW9uIE9rdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBQa3QoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEZrdChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNTgsMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKTtyZXR1cm4gbWkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJj''@;'; put 'put ''aD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoTGUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsT2t0LDEsMCwiY2xyLWljb24iLDU5KSg1LFBrdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxk''@;'; put 'put ''PUxlKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBO''@;'; put 'put ''a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoMyksZj1MZSgyKS4kaW1wbGljaXQsdj1MZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJl''@;'; put 'put ''ZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIFZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNjcsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0''@;'; put 'put ''IGY9TGUoMikuJGltcGxpY2l0O3JldHVybiBtaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9TGUoMikuJGltcGxpY2l0O3JldHVybiBDdChMZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMi''@;'; put 'put ''KSl9KSxoZSgpLGd0KDQsSGt0LDEsMCwiY2xyLWljb24iLDU5KSg1LE5rdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1oYSgzKSxkPUxlKDIpLiRpbXBsaWNpdDtmZSgyKSx4ZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLHBpKCJuZ01vZGVsIixkLnNl''@;'; put 'put ''YXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gamt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzUp''@;'; put 'put ''fWZ1bmN0aW9uIHprdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPUxlKCkubmdWYXIsZj1MZSgpLiRpbXBsaWNpdCx2PUxlKDIpLiRpbXBsaWNpdCxNPUxlKCk7cmV0dXJuIEN0KGg/IiI6TS5v''@;'; put 'put ''blRhYmxlQ2xpY2soZix2KSl9KSxzaSgxLDcxKSxndCgyLEJrdCwxLDAsImNsci1pY29uIiw3MikoMyxqa3QsMSwwLCJjbHItaWNvbiIsNzMpLGxpKCksT2UoNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoKS5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0LGg9TGUoMikuJGltcGxpY2l0LGY9TGUo''@;'; put 'put ''KTtUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgp''@;'; put 'put ''LERyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFVrdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSgxLCJzcGFuIiksT2UoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiks''@;'; put 'put ''aGUoKSgpKX1mdW5jdGlvbiBaa3QoYyxsKXsxJmMmJihzaSgwKSxndCgxLFVrdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc2KSxsaSgpKX1mdW5jdGlvbiBXa3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcCIpLGd0KDEsemt0LDUsOCwiYnV0dG9uIiw2OSkoMixaa3QsMiww''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDQyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPUxlKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGQubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEpfX1mdW5jdGlvbiBZa3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksZ3QoMSxX''@;'; put 'put ''a3QsMywyLCJjbHItdG9vbHRpcCIsNjgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9TGUoMyk7ZmUoKSx4ZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIEdrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp''@;'; put 'put ''O2RlKDAsImNsci10cmVlLW5vZGUiLDY0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9TGUoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KExlKCkudHJlZU5vZGVDbGlja2VkKGgsZikpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBm''@;'; put 'put ''PUxlKCkuJGltcGxpY2l0O3JldHVybiBtaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDY1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1MZSgpLiRpbXBsaWNpdCxmPUxlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChm''@;'; put 'put ''LmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsNjYpLE9lKDMpLGhlKCksZ3QoNCxWa3QsNiw0LCJjbHItdHJlZS1ub2RlIiw3KSg1LFlrdCwyLDEsImNsci10cmVlLW5vZGUiLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPUxlKCkuJGltcGxpY2l0O1Ry''@;'; put 'put ''KCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxEcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEudGFibGVzKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uICRrdChjLGwpe2lmKDEmYyYmKHNpKDApLGd0KDEsR2t0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjMpLGxpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVu''@;'; put 'put ''Y3Rpb24gS2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gcWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSkoMiwiZGl2Iiw4MikoMywiZGl2Iiw4''@;'; put 'put ''MykoNCwiYnV0dG9uIiw4NCksR3QoNSwiY2xyLWljb24iLDg1KSxoZSgpLGRlKDYsImgzIiw0NyksT2UoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2IiwxNSkoOSwicCIpLE9lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDI2KSgx''@;'; put 'put ''MiwiYnV0dG9uIiw4NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksT2UoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFhrdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw4Nyl9ZnVuY3Rpb24gSmt0KGMsbCl7MSZj''@;'; put 'put ''JiZHdCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gUWt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw4OCkoMSwic3BhbiIsODkpLE9lKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywiZGl2Iiw5MCkoNCwicCIsOTEpLE9lKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaGUoKSgp''@;'; put 'put ''KCkpfWZ1bmN0aW9uIGVEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxMZSgpO2NvbnN0IGg9aGEoNSk7cmV0dXJuIEN0KExlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIHREdChj''@;'; put 'put ''LGwpezEmYyYmKGRlKDAsInNwYW4iLDExNiksT2UoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gbkR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTE3KX1mdW5jdGlvbiByRHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMTgpLE9lKDEpLGhlKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1MZSgzKTtmZSgpLERyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gaUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIwKSxPZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''TGUoNCk7ZmUoKSxEcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gYUR0KGMsbCl7MSZjJiYoc2koMCksZ3QoMSxpRHQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTkpLGxpKCkpfWZ1bmN0aW9uIG9EdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxPZSgxKSxlbCgyLCJ0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRvciIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgpLEtJKCIgKCIsejgoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoicm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVu''@;'; put 'put ''Z3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBzRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxndCgxLG9EdCwzLDcsInNwYW4iLDQyKSxkZSgyLCJjbHItaWNvbiIsMTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDMpLnJlbG9h''@;'; put 'put ''ZFRhYmxlRGF0YSgpKX0pLGhlKCksbGkoKX1pZigyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gbER0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoTGUoNSkuZWRpdFRhYmxlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzMyksZGUoMiwic3BhbiIpLE9lKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIGNEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHd0KGEpLEN0KExlKDUpLmdvVG9MaW5lYWdlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNCksZGUoMiwic3BhbiIpLE9lKDMsIkxpbmVhZ2UiKSxoZSgpKCl9fWZ1bmN0aW9uIHVEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51Iiwx''@;'; put 'put ''MjYpKDEsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLm5ld1ZpZXdib3goKSl9KSxHdCgyLCJjbHItaWNvbiIsMTI4KSxkZSgzLCJzcGFuIiksT2UoNCwiVmlld2JveGVzIiksaGUoKSgpLGd0KDUsbER0LDQsMCwiZGl2IiwxMjkpKDYsY0R0''@;'; put 'put ''LDQsMCwiZGl2IiwxMjkpLGRlKDcsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDQpLm9wZW5RYigpKX0pLEd0KDgsImNsci1pY29uIiwxMzApLGRlKDksInNwYW4iKSxPZSgxMCwiRmlsdGVyIiksaGUoKSgpLGRlKDExLCJkaXYiLDEyNyksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksR3QoMTIsImNsci1pY29uIiwxMzEpLGRlKDEzLCJzcGFuIiksT2UoMTQsIkRvd25sb2FkIiksaGUoKSgpLGRlKDE1LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChMZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxHdCgxNiwiY2xyLWljb24iLDEzMiksZGUoMTcsInNwYW4iKSxPZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1MZSg0KTtmZSg1KSx4ZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIGREdChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93biIsMTIyKSgxLCJidXR0b24iLDEyMyksR3QoMiwiY2xyLWljb24iLDEyNCksT2UoMywiIG9wdGlvbnMgIiksaGUoKSxndCg0LHVEdCwxOSwyLCJjbHItZHJvcGRvd24tbWVu''@;'; put 'put ''dSIsMTI1KSxoZSgpKSwyJmMmJnhlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIGhEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTM1KSgxLCJzcGFuIiksT2UoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLE9lKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9TGUo''@;'; put 'put ''Myk7ZmUoNCksd3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBmRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDk4KSgxLCJzZWN0aW9uIiw5OSkoMiwiZm9ybSIsMTAwKSgzLCJkaXYiLDEwMSkoNCwiaW5wdXQiLDEwMiw0KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9u''@;'; put 'put ''KCl7d3QoYSk7Y29uc3QgaD1oYSg1KTtyZXR1cm4gQ3QoTGUoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxndCg2LGVEdCwxLDAsImNsci1pY29uIiwxMDMpKDcsdER0LDIsMCwic3BhbiIsMTA0KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciIpKDEwLCJpbnB1dCIsMTA1KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1MZSgyKTtyZXR1cm4gbWkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxPZSgxMiwiTnVt''@;'; put 'put ''ZXJpYyIpLGhlKCkoKSgpKCkoKSxkZSgxMywiZGl2IiwxMDYpKDE0LCJwIiwxMDcpKDE1LCJjbHItdG9vbHRpcCIsMTA4KSgxNiwiY2xyLWljb24iLDEwOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDE3LG5E''@;'; put 'put ''dCwxLDAsImNsci1pY29uIiwxMTApKDE4LHJEdCwyLDEsInNwYW4iLDExMSkoMTksYUR0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSxndCgyMCxzRHQsMywxLCJuZy1jb250YWluZXIiLDQyKSxoZSgpKCksZGUoMjEsImRpdiIsMTEyKSxndCgyMixkRHQsNSwxLCJjbHItZHJvcGRvd24i''@;'; put 'put ''LDExMyksaGUoKSxndCgyMyxoRHQsNSwxLCJkaXYiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9TGUoMik7ZmUoNCkseGUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGZlKDIpLHhlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLnNl''@;'; put 'put ''YXJjaExvYWRpbmcpLGZlKDMpLHBpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLHhlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5n''@;'; put 'put ''dGg+MCksZmUoKSx4ZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMikseGUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCkseGUoIm5nSWYiLCIx''@;'; put 'put ''PTEiIT09YS5xdWVyeVRleHQmJiFHcygxMCxSa3QpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBwRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzNiksR3QoMSwiaW1nIiwxMzcpLGRlKDIsImgzIiwxMzgpLE9lKDMsIiBQbGVhc2Ugc2VsZWN0IGEg''@;'; put 'put ''bGlicmFyeSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGdEdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDU1KX1mdW5jdGlvbiBtRHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NSksR3QoMSwiaW1nIiwxNDYpLGRlKDIsInAiLDEzOCksT2UoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAi''@;'; put 'put ''KSxoZSgpKCkpfWZ1bmN0aW9uIHZEdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInAiLDE0OSksT2UoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwiY2xyLWljb24iLDE1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChMZSg0''@;'; put 'put ''KS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSxPZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIHlEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIGJEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxPZSg0KSxoZSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBfRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxP''@;'; put 'put ''ZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIHdEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiTElCU0laRToiKSxoZSgpLGRlKDMs''@;'; put 'put ''InRkIiwxNTIpLE9lKDQpLGVsKDUsImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9EYyg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIENEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiko''@;'; put 'put ''MSwidGQiLDE1MSksT2UoMiwiT1dORVJTOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIFNEdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInRyIikoMSwidGQiLDE1MSksT2UoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxPZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSg1KTtmZSg0KSxEcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBNRHQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24geER0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxPZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBFRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLE9lKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPUxlKDUpO2ZlKDQpLERyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NO''@;'; put 'put ''VDoiIiwiICIpfX1mdW5jdGlvbiBURHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLE9lKDIsIkNBVEFMT0dfQ05UOiIpLGhlKCksZGUoMywidGQiLDE1MiksT2UoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9TGUoNSk7ZmUoNCksRHIoIiAiLGEubGliaW5mb1swXT9hLmxp''@;'; put 'put ''YmluZm9bMF0uQ0FUQUxPR19DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gQUR0KGMsbCl7aWYoMSZjJiYoc2koMCksZGUoMSwidGFibGUiKSxndCgyLHlEdCw1LDEsInRyIiw0MikoMyxiRHQsNSwxLCJ0ciIsNDIpKDQsX0R0LDUsMSwidHIiLDQyKSg1LHdEdCw2LDMsInRyIiw0MikoNixDRHQsNSwx''@;'; put 'put ''LCJ0ciIsNDIpKDcsU0R0LDUsMSwidHIiLDQyKSg4LE1EdCw1LDEsInRyIiw0MikoOSx4RHQsNSwxLCJ0ciIsNDIpKDEwLEVEdCw1LDEsInRyIiw0MikoMTEsVER0LDUsMSwidHIiLDQyKSxoZSgpLGxpKCkpLDImYyl7Y29uc3QgYT1MZSg0KTtmZSgyKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmlu''@;'; put 'put ''Zm9bMF0uRU5HSU5FKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGli''@;'; put 'put ''aW5mb1swXS5PV05FUlMpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGli''@;'; put 'put ''aW5mb1swXS5UQUJMRV9DTlQpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQpfX1mdW5jdGlvbiBrRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0NyksZ3QoMSx2RHQsNCwwLCJwIiwxNDgpKDIsQUR0LDEyLDEwLCJuZy1jb250YWluZXIiLDQyKSxo''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9TGUoMyk7ZmUoKSx4ZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBERHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtzaSgwKSxkZSgxLCJkaXYiLDEzOSksR3QoMiwic2Vj''@;'; put 'put ''dGlvbiIsOTkpLGRlKDMsImRpdiIsMTQwKSg0LCJwIiw5MSksT2UoNSksaGUoKSxkZSg2LCJjbHItaWNvbiIsMTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KExlKDIpLnJlbG9hZExpYkluZm8oKSl9KSxoZSgpKCksR3QoNywiZGl2IiwxMTIpLGhlKCksZGUoOCwi''@;'; put 'put ''ZGl2IiwxNDEpLGd0KDksZ0R0LDEsMCwiY2xyLXNwaW5uZXIiLDE0MiksaGUoKSxndCgxMCxtRHQsNCwwLCJkaXYiLDE0MykoMTEsa0R0LDMsMiwiZGl2IiwxNDQpLGxpKCl9aWYoMiZjKXtjb25zdCBhPUxlKDIpO2ZlKDUpLERyKCIgIixhLmxpYiwiICIpLGZlKDQpLHhlKCJuZ0lmIixudWxs''@;'; put 'put ''PT09YS5saWJpbmZvKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKX19ZnVuY3Rpb24gSUR0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE1NiksT2UoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uIFJEdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTYpLE9lKDEsIiBObyBkYXRhIGZvdW5kIGR1ZSB0byBzYXMgcmVxdWVzdCBlcnJvciAiKSxoZSgpKX1mdW5jdGlvbiBMRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1MyksR3QoMSwiY2xyLWljb24iLDE1NCks''@;'; put 'put ''Z3QoMixJRHQsMiwwLCJoMyIsMTU1KSgzLFJEdCwyLDAsImgzIiwxNTUpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgyKSx4ZSgibmdJZiIsYS5ub0RhdGEpLGZlKCkseGUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gT0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiwx''@;'; put 'put ''NTcpLEd0KDEsImhvdC10YWJsZSIsMTU4KSxoZSgpKSwyJmMpe2NvbnN0IGE9TGUoMik7ZmUoKSx4ZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUu''@;'; put 'put ''Y29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoImNvcHlQYXN0ZSIsYS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsYS5ob3RUYWJsZS5jb250ZXh0TWVudSkoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixhLmhvdFRhYmxlLmRyb3Bkb3duTWVu''@;'; put 'put ''dSkoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWtlcikoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImFmdGVyR2V0Q29sSGVhZGVy''@;'; put 'put ''IixhLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyKSgicm93SGVhZGVycyIsYS5ob3RUYWJsZS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJyb3dIZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhv''@;'; put 'put ''dFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBQRHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNTkpLE9lKDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1MZSgyKTtmZSgpLERyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gRkR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MiksZ3QoMSxmRHQsMjQsMTEsImRpdiIsOTMpKDIscER0LDQsMCwiZGl2Iiw5NCkoMyxERHQsMTIsNCwibmctY29udGFpbmVyIiw0MikoNCxMRHQs''@;'; put 'put ''NCwyLCJkaXYiLDk1KSg1LE9EdCwyLDE5LCJkaXYiLDk2KSxkZSg2LCJkaXYiKSxndCg3LFBEdCwzLDEsInAiLDk3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1MZSgpO2ZlKCkseGUoIm5nSWYiLGEudGFibGUpLGZlKCkseGUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJy''@;'; put 'put ''fHxhLm5vRGF0YSkpLGZlKCkseGUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJsZSYmYS5saWIpLGZlKCkseGUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksZmUoKSx4ZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUp''@;'; put 'put ''LGZlKDIpLHhlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgek49KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxJLEcsaWUsdWUpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlPUksdGhpcy5oZWxwZXJTZXJ2aWNlPUcsdGhpcy5sb2NhdGlvbj1pZSx0aGlzLmNkZj11ZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0i''@;'; put 'put ''Iix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVs''@;'; put 'put ''bCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMu''@;'; put 'put ''bm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBt''@;'; put 'put ''aC5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMubnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVy''@;'; put 'put ''c2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtYXhSb3dzOnRo''@;'; put 'put ''aXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJzOnllPT4iICIsYWZ0ZXJHZXRDb2xIZWFkZXI6KHllLEVlLGplKT0+e0VlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtU''@;'; put 'put ''YWJsZUhlYWRlckNsYXNzKX0scm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRl''@;'; put 'put ''cnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooeWUsRWUsamUs''@;'; put 'put ''cWUscnQscHQpPT57Y29uc3QgZHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBKdCx2bj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgQ249dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSx0bj1Dbj9DblswXVsxXTotMSxNbj10''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AodG4pO0p0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW01uXSxKdCYmKHZuPWBMQUJFTDogJHtKdD8ubGFiZWx9PGJyPlRZUEU6ICR7SnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtKdD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7SnQ/LmZvcm1hdH1gKX1y''@;'; put 'put ''ZXR1cm4gZHQuaW5uZXJIVE1MPXZuLGR0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IFltLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2''@;'; put 'put ''aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9u''@;'; put 'put ''XSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmli''@;'; put 'put ''ZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNo''@;'; put 'put ''VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gUShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLHY9cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsdikudGhlbihNPT57TS5zYXNwYXJhbXN8fE0udmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9u''@;'; put 'put ''c3x8W10sZC5zZXREU05vdGUoKSxkLm51bWJlck9mUm93cz1NLnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PU0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPU0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVu''@;'; put 'put ''Z3RoP2Qubm9EYXRhPSEwOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZp''@;'; put 'put ''ZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9UShmdW5jdGlvbioo''@;'; put 'put ''aCl7YS5saWJpbmZvPWgubGliaW5mbyxLbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNh''@;'; put 'put ''c2UoKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBJLGY9IiZ0''@;'; put 'put ''eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsTT0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7ST10eXBlb2YgdGhpcy5yb3V0''@;'; put 'put ''ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K00rIiZmaWx0ZXI9IitJKSx0aGlz''@;'; put 'put ''Lm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBNPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitNKyIvP19wcm9ncmFtPSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw''@;'; put 'put ''ZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTthPUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5p''@;'; put 'put ''bmNsdWRlcyhkKX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRo''@;'; put 'put ''aXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEm''@;'; put 'put ''dHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''InRleHRhcmVhIik7YS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUubGVmdD0iMCIsYS5zdHlsZS50b3A9IjAiLGEuc3R5bGUub3BhY2l0eT0iMCIsYS52YWx1ZT10aGlzLndlYlF1ZXJ5VGV4dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuZm9jdXMoKSxhLnNlbGVjdCgp''@;'; put 'put ''LGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVj''@;'; put 'put ''a0V4cGFuZChhKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEw''@;'; put 'put ''LHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGli''@;'; put 'put ''cmFyaWVzLGQpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0hIWh8''@;'; put 'put ''fCFkLmV4cGFuZGVkOnlpZWxkIGYuc2VsZWN0VGFibGUoYSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IHY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJj''@;'; put 'put ''aElucHV0XSIsdiksdiYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZl''@;'; put 'put ''In0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGli''@;'; put 'put ''cmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gUShmdW5j''@;'; put 'put ''dGlvbiooKXtoLmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/S24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Lbi52aWV3ZXIudGFi''@;'; put 'put ''bGVzLGYubGliaW5mbz1Lbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgTT12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihJKXty''@;'; put 'put ''ZXR1cm4gSS5NRU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10sZi50YWJsZXM9TSxoJiYoaC50YWJsZXM9TSxoLmxpYmluZm89Zi5saWJpbmZvKSxLbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLEtuLnZpZXdlci50YWJsZXM9Zi50''@;'; put 'put ''YWJsZXMsS24udmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEtuLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFi''@;'; put 'put ''bGVEaXNhYmxlPSEwLEtuLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rp''@;'; put 'put ''b25EaXNhYmxlPSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsS24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2Jh''@;'; put 'put ''bHNGaWx0ZXIoKXtLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEtuLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsS24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sS24udmlld2VyLmZp''@;'; put 'put ''bHRlci52YWxzPVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5''@;'; put 'put ''RmlsdGVyKHRoaXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1''@;'; put 'put ''IiYmdHlwZW9mIGQudGFibGU+InUiKXtsZXQgTT1bXTtpZihNPWQubGliRGF0YXNldC5zcGxpdCgiLiIpLEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKEk9PntkLmxpYnJh''@;'; put 'put ''cmllcz1JLnNhc2xpYnN9KS5jYXRjaChJPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKEkpfSksZC5saWI9TVswXSxLbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IEk9ZC5saWJyYXJpZXMuZmluZChHPT5HLkxJQlJBUllSRUYudG9Mb3dlckNh''@;'; put 'put ''c2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oRz0+e2QudGFibGVzPUcubXB0YWJsZXMubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuTUVNTkFNRX0pLEkudGFibGVzPWQudGFibGVzLEtuLnZpZXdlci5s''@;'; put 'put ''aWJyYXJpZXM9ZC5saWJyYXJpZXMsS24udmlld2VyLnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKEc9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoRyl9KX1kLnRhYmxlPU1bMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1l''@;'; put 'put ''bHNlIEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKE09PntkLmxpYnJhcmllcz1NLnNhc2xpYnN9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksdHlw''@;'; put 'put ''ZW9mIGQudGFibGU8InUiJiYoS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9S24udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKE09PntkLnRhYmxlcz1NLm1wdGFibGVzLm1hcChmdW5jdGlvbihJKXtyZXR1cm4gSS5NRU1O''@;'; put 'put ''QU1FfSl9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pLGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5s''@;'; put 'put ''aWJUYWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oTT0+e2lmKE0ucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmMD09PUtuLnZpZXdlci5maWx0ZXIuY2xhdXNl''@;'; put 'put ''cy5sZW5ndGgmJihLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTS5xdWVyeSksS24udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNs''@;'; put 'put ''YXVzZSgidmlld2VyIixNLmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1NLmNvbHMsemVlKGQuZmlsdGVyQ29scyxbXSxNLiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMu''@;'; put 'put ''c3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCB5ZT1NLnNhc3BhcmFtc1swXS5UQUJMRVVSSTt5ZSYmeWUubGVuZ3RoPjAmJihkLnRhYmxldXJpPXllKX1kLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxk''@;'; put 'put ''LmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IEk9W10sRz1bXTtmb3IobGV0IHllIGluIE0udmlld2RhdGFbMF0peWUmJkcucHVzaCh5ZSk7Zm9yKGxldCB5ZT0w''@;'; put 'put ''O3llPEcubGVuZ3RoO3llKyspSS5wdXNoKHtkYXRhOkdbeWVdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPUcsZC5ob3RUYWJsZS5jb2x1bW5zPUksZC5ob3RUYWJsZS5jZWxscz1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19LGQudGFibGVGbGFnPSExO2xldCB1ZT1bXTt1ZT1oLnNw''@;'; put 'put ''bGl0KCIuIiksZC5saWI9dWVbMF0sZC50YWJsZT11ZVsxXSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD8oZC5ub0RhdGE9ITAsZC50YWJsZUZsYWc9ITApOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSksZC5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNl''@;'; put 'put ''LmVycm9yKE0pLGQuYWJvcnRBY3RpdmU9ITAsZC5ub0RhdGFSZXFFcnI9ITB9KSksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZoJiZkLnJvdXRlci5uYXZpZ2F0ZSgwIT09YT9bIi92aWV3L2RhdGEvIitoKyIvIithXTpbIi92aWV3L2RhdGEvIitoXSx7cXVlcnlQYXJhbXNIYW5k''@;'; put 'put ''bGluZzoicHJlc2VydmUifSk7bGV0IGY9ZC50YWJsZSx2PWQubGlicmFyaWVzLmZpbmQoTT0+TS5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt2PyhLbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoZC5saWJyYXJpZXM9S24udmlld2VyLmxpYnJh''@;'; put 'put ''cmllcyxkLmxpYnJhcmllc1NlYXJjaD1Lbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoKSxkLmxpYnJhcnlPbkNsaWNrKGQubGliLHYsITApKTpkLmxpYmluZm89W10sZC50YWJsZT1mfHxkLnRhYmxlLGQubGlicmFyaWVzJiZkLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhkLmxpYnJh''@;'; put 'put ''cmllcyksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZkLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxkLmxvYWRpbmdUYWJsZVZpZXc9ITEsIWQubm9EYXRhJiYhZC5ub0RhdGFSZXFFcnImJmgmJmQuc2V0dXBIb3QoKSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0''@;'; put 'put ''VGltZW91dCgoKT0+e2xldCBNPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO00mJihNLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsST0+e3NldFRpbWVvdXQoKCk9PntsZXQgRz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8''@;'; put 'put ''dm9pZCAwO0cmJkcuY2xpY2soKX0sMTAwKX0pLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEwKX0sMmUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2Fz''@;'; put 'put ''U3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xh''@;'; put 'put ''dXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKEtuLnZpZXdlci5maWx0ZXIuY2xhdXNl''@;'; put 'put ''cz1bXSxLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PVtdLEtuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0''@;'; put 'put ''aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50cztkPU0uZmlsdGVyKGZ1bmN0aW9uKEkpe3JldHVybiBudWxsPT09SS52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tj''@;'; put 'put ''b25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2NvbnN0IEk9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChHPT57SS5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmRlZXBDbG9uZShHKSl9KSxJLmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEkpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBh''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5VGV4dD1NLnJlc3VsdFswXS5GSUxURVJfVEVYVDtsZXQgST1NLnJlc3VsdFswXS5GSUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrSV0se3F1ZXJ5''@;'; put 'put ''UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLGEudmlld0RhdGEoSSksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksYS5zdWJtaXRMb2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2Uo''@;'; put 'put ''KX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXNldERTTm90ZSgpe2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxkPXRoaXMu''@;'; put 'put ''ZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVNDIj09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERFU0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1zZXR1cEhv''@;'; put 'put ''dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5sb2FkaW5nVGFibGVWaWV3JiZ0aGlzLmxpYkRhdGFzZXQmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2Uu''@;'; put 'put ''dXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihhLGQpe3JldHVybiBhPjUwMD81MDA6YX0sYWZ0ZXJHZXRDb2xIZWFkZXI6KGEsZCk9Pntjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChhKTtoJiZ0aGlz''@;'; put 'put ''LmhlYWRlclBrcy5pbmRleE9mKGgpPi0xJiZkLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLGQuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3Jl''@;'; put 'put ''dHVybiBRKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hv''@;'; put 'put ''dC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9''@;'; put 'put ''ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBRKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsS24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUtuLnZpZXdl''@;'; put 'put ''ci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJjaCxhLmxpYj1Lbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5s''@;'; put 'put ''aWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxLbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEtuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFy''@;'; put 'put ''aWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5n''@;'; put 'put ''QWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFEoZnVuY3Rpb24qKCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYoYS50YWJsZUZsYWc9ITApLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxh''@;'; put 'put ''LmNsYXVzZXM9ZC5vYmosYS5saWJkcz1kLmxpYmRzfSksdHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5sb2FkV2l0aFBhcmFtZXRlcnMoKTphLmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKShHZSh1MSksR2Uoa2gpLEdlKEJzKSxHZShMcyksR2UoQ3UpLEdlKHZjKSxHZShTZCksR2UoU3UpLEdlKGZoKSxHZShFcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXtpZigxJmQmJnFhKElrdCw1KSwyJmQpe2xldCBmO0NpKGY9U2koKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OTUsdmFyczozMCxjb25zdHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hM''@;'; put 'put ''aWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9k''@;'; put 'put ''ZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFy''@;'; put 'put ''aWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwi''@;'; put 'put ''Y2xyLWNvbC1tZC02Il0sWzEsImRvd25sb2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidmFsdWUiLCJDU1YiXSxbInZhbHVlIiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUiLCJTQVNfRERMIl0sWyJ2YWx1ZSIs''@;'; put 'put ''IlRTUUxfRERMIl0sWyJ2YWx1ZSIsIkVYQ0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImlkIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHItY29sLW1kLTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMi''@;'; put 'put ''XSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNh''@;'; put 'put ''cmQtYmxvY2siLCJ3ZWItcXVlcnktd3JhcHBlciIsIndvcmQtYnJlYWstYWxsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLDMsImZvY3VzIiwidmFsdWUiXSxbMSwiY2FyZC1m''@;'; put 'put ''b290ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIiwibmd4Q2xpcGJvYXJkIl0sWyJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENs''@;'; put 'put ''b3NhYmxlIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJidG4tc20iLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4t''@;'; put 'put ''c20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIG5vLWJvcmRlcnMgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsNCwibmdJZiJdLFszLCJvcGVuQ2hhbmdlIiwicm93''@;'; put 'put ''Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEiLCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3Jh''@;'; put 'put ''cHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5n''@;'; put 'put ''SWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJpZCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtbGluayIsMywiZGMt''@;'; put 'put ''bG9ja2VkLWNvbnRyb2wiLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUi''@;'; put 'put ''LDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJ3''@;'; put 'put ''LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1o''@;'; put 'put ''ZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNs''@;'; put 'put ''YXNzIiwiaGVhZGVyLXJvdyBjbHItcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xhc3MiLCJjbHItZmxleC0xIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50''@;'; put 'put ''ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJmb3JtLWJsb2NrIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94Iiwi''@;'; put 'put ''Y2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsImNsci1m''@;'; put 'put ''bGV4LWNvbHVtbiIsImQtZmxleCIsImNsci1mbGV4LXNtLXJvdyIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFi''@;'; put 'put ''ZWwiLCJWaWV3IGRhdGFzZXQgbWV0YSBpbmZvIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyBtci01Iiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bHJUb29sdGlwVHJpZ2dlciIsIiIsNCwibmdJZiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wtbWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIsIm1yLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xy''@;'; put 'put ''U2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xp''@;'; put 'put ''Y2siXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lkZSJdLFsic2hhcGUiLCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxb''@;'; put 'put ''ImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJzaGFwZSIsImRvd25sb2Fk''@;'; put 'put ''Il0sWyJzaGFwZSIsImRvd25sb2FkLWNsb3VkIl0sWyJzaGFwZSIsInBlbmNpbCJdLFsic2hhcGUiLCJzd2l0Y2giXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5''@;'; put 'put ''NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LWxpYnJhcnktcG5nIiwiYWx0Iiwic2VsZWN0IGEgbGlicmFyeSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsx''@;'; put 'put ''LCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwibXQtMTUiLCJtYi0xNSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJj''@;'; put 'put ''bHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXIt''@;'; put 'put ''ZXZlbnRzLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsxLCJsaWJpbmZv''@;'; put 'put ''IiwibS0wIiwiY2xyLXJvdyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0w''@;'; put 'put ''IiwiZm9udC1ib2xkIl0sWzEsImNhcmQtYmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3Jh''@;'; put 'put ''eSJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFk''@;'; put 'put ''ZXJzIiwiY29sdW1ucyIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJyb3dIZWFkZXJzIiwi''@;'; put 'put ''cm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDUpLEZ0KCJzY3JvbGxlZFRvQm90dG9t''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZ3QoMSxMa3QsMiwwLCJkaXYiLDYpLGRlKDIsImNsci10cmVlIiksZ3QoMyxGa3QsNiwzLCJjbHItdHJlZS1ub2RlIiw3KSg0LCRrdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSxndCg1LEtr''@;'; put 'put ''dCwzLDAsImRpdiIsOSksaGUoKSxkZSg2LCJkaXYiLDEwKSxndCg3LHFrdCwxNCwwLCJkaXYiLDExKSg4LFhrdCwxLDAsImRpdiIsMTIpLGRlKDksImNsci1tb2RhbCIsMTMpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLm9wZW5Eb3dubG9h''@;'; put 'put ''ZCxNKXx8KGgub3BlbkRvd25sb2FkPU0pLEN0KE0pfSksZGUoMTAsImgzIiwxNCksT2UoMTEsIkRvd25sb2FkIiksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTcpKDE1LCJsYWJlbCIpLE9lKDE2LCJQbGVhc2UgY2hvb3NlIGRv''@;'; put 'put ''d25sb2FkIGZvcm1hdCIpLGhlKCksZGUoMTcsInNlbGVjdCIsMTgpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5kb3dubG9hZEZvcm1hdCxNKXx8KGguZG93bmxvYWRGb3JtYXQ9TSksQ3QoTSl9KSxkZSgxOCwib3B0aW9uIiwxOSksT2UoMTksIkNT''@;'; put 'put ''ViIpLGhlKCksZGUoMjAsIm9wdGlvbiIsMjApLE9lKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUpIiksaGUoKSxkZSgyMiwib3B0aW9uIiwyMSksT2UoMjMsIkRETCAoUEdTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI0LCJvcHRpb24iLDIyKSxPZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSxo''@;'; put 'put ''ZSgpLGRlKDI2LCJvcHRpb24iLDIzKSxPZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyOCwib3B0aW9uIiwyNCksT2UoMjksIkV4Y2VsICgueGxzeCkiKSxoZSgpLGRlKDMwLCJvcHRpb24iLDI1KSxPZSgzMSwiTWFya2Rvd24gKC5tZCkiKSxoZSgpKCkoKSgpKCksZGUoMzIs''@;'; put 'put ''ImRpdiIsMjYpKDMzLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub3BlbkRvd25sb2FkPSExKX0pLE9lKDM0LCIgQ2FuY2VsICIpLGhlKCksZGUoMzUsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3Qo''@;'; put 'put ''aC5kb3dubG9hZEZvcm1hdC5pbmNsdWRlcygiRERMIik/aC5kb3dubG9hZERETCgpOmguZG93bmxvYWREYXRhKCkpfSksT2UoMzYsIiBPayAiKSxoZSgpKCkoKSxkZSgzNywiY2xyLW1vZGFsIiwxMyksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1p''@;'; put 'put ''KGgud2ViUXVlcnksTSl8fChoLndlYlF1ZXJ5PU0pLEN0KE0pfSksZGUoMzgsImgzIiwxNCksT2UoMzksIiBXZWIgUXVlcnkgVVJMICIpLGhlKCksZGUoNDAsImRpdiIsMjkpKDQxLCJkaXYiLDMwKSg0MiwiZGl2IiwzMSkoNDMsImRpdiIsMzIpKDQ0LCJkaXYiLDMzKSg0NSwic3BhbiIpLE9l''@;'; put 'put ''KDQ2LCJDb3B5IHRoZSBiZWxvdyBpbnRvIHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLGhlKCksZGUoNDcsImRpdiIsMzQpKDQ4LCJkaXYiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITAsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxH''@;'; put 'put ''dCg0OSwiaW5wdXQiLDM2KSxkZSg1MCwibGFiZWwiKSxPZSg1MSwiVEFCIiksaGUoKSgpLGRlKDUyLCJkaXYiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITEsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg1MywiaW5wdXQiLDM2KSxkZSg1''@;'; put 'put ''NCwibGFiZWwiKSxPZSg1NSwiQ1NWIiksaGUoKSgpKCkoKSxkZSg1NiwiZGl2IiwzNykoNTcsInRleHRhcmVhIiwzOCwwKSxGdCgiZm9jdXMiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2xpQ29tbWFuZEZvY3VzKE0pKX0pLE9lKDU5LCIgICAgICAgICAgICAgICIpLGhlKCko''@;'; put 'put ''KSxkZSg2MCwiZGl2IiwzOSkoNjEsImJ1dHRvbiIsNDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb3B5VG9DbGlwKCkpfSksT2UoNjIsIiBjb3B5IHRvIGNsaXBib2FyZCAiKSxoZSgpKCkoKSgpKCkoKSxkZSg2MywiZGl2IiwyNikoNjQsImJ1dHRvbiIsMjcp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC53ZWJRdWVyeT0hMSl9KSxPZSg2NSwiIGNsb3NlICIpLGhlKCkoKSgpLGRlKDY2LCJjbHItbW9kYWwiLDQxKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksbWkoaC5maWx0ZXIs''@;'; put 'put ''TSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDY3LCJoMyIsMTQpLE9lKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxkZSg2OSwic3BhbiIpLE9lKDcwKSxoZSgpKCksZGUoNzEsImRpdiIsMTUpLGd0KDcyLEprdCwyLDAsImFwcC1xdWVyeSIsNDIpLGhlKCksZGUoNzMsImRpdiIsMjYpKDc0''@;'; put 'put ''LCJidXR0b24iLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxPZSg3NSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDc2LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsdGVyPSEx''@;'; put 'put ''LEN0KGgucmVtb3ZlUXVlcnkoKSl9KSxPZSg3NywiIENhbmNlbCAiKSxoZSgpLGRlKDc4LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2VuZENsYXVzZSgpKX0pLE9lKDc5LCIgT2sgIiksaGUoKSgpKCksZGUoODAsImNsci1tb2RhbCIsNDYp''@;'; put 'put ''LGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDgxLCJoMyIsNDcpLE9lKDgyLCJFcnJvciIpLGhlKCksZGUoODMsImRpdiIsMTUpKDg0LCJwIiksT2UoODUpLGhlKCkoKSxk''@;'; put 'put ''ZSg4NiwiZGl2IiwyNikoODcsImJ1dHRvbiIsNDgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxPZSg4OCwiIENhbmNlbCAiKSxoZSgpLGRlKDg5LCJidXR0b24iLDQ5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0''@;'; put 'put ''KGgucXVlcnlFcnI9ITEpfSksT2UoOTAsIiBPayAiKSxoZSgpKCkoKSxndCg5MSxRa3QsNiwwLCJkaXYiLDUwKSg5MixGRHQsOCw2LCJkaXYiLDUxKSxoZSgpLGRlKDkzLCJhcHAtZGF0YXNldC1pbmZvIiw1MiksZ2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxtaSho''@;'; put 'put ''LmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDk0LCJhcHAtdmlld2JveGVzIiw1MyksZ2koInZpZXdib3hN''@;'; put 'put ''b2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLG1pKGgudmlld2JveE9wZW4sTSl8fChoLnZpZXdib3hPcGVuPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9aGEoNTgpO2ZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGgu''@;'; put 'put ''bGlicmFyaWVzKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmxpYnJhcmllcyksZmUoKSx4ZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkseGUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixo''@;'; put 'put ''Lm9wZW5Eb3dubG9hZCkseGUoImNsck1vZGFsU2l6ZSIsIm1kIiksZmUoOCkscGkoIm5nTW9kZWwiLGguZG93bmxvYWRGb3JtYXQpLGZlKDE4KSx4ZSgiaWQiLGgudGFibGVUaXRsZSksZmUoMikscGkoImNsck1vZGFsT3BlbiIsaC53ZWJRdWVyeSkseGUoImNsck1vZGFsU2l6ZSIsImxnIiks''@;'; put 'put ''ZmUoMTIpLHhlKCJjaGVja2VkIixoLndlYlF1ZXJ5VGFiKSxmZSg0KSx4ZSgiY2hlY2tlZCIsIWgud2ViUXVlcnlUYWIpLGZlKDQpLHhlKCJ2YWx1ZSIsaC53ZWJRdWVyeVRleHQpLGZlKDQpLHhlKCJuZ3hDbGlwYm9hcmQiLGYpLGZlKDUpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4''@;'; put 'put ''ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLERyKCIgIixoLmxpYlRhYiwiICIpLGZlKDIpLHhlKCJuZ0lmIixoLmZpbHRlciksZmUoNikseGUoImNsckxvYWRpbmciLGguc3VibWl0TG9hZGluZyksZmUoMikscGkoImNsck1vZGFsT3BlbiIsaC5x''@;'; put 'put ''dWVyeUVyciksZmUoNSksd3IoaC5xdWVyeUVyck1lc3NhZ2UpLGZlKDYpLHhlKCJuZ0lmIixoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCkscGkoIm9wZW4iLGguZGF0YXNldEluZm8pLHhlKCJkc21ldGEiLGguZHNtZXRhKSgidmVy''@;'; put 'put ''c2lvbnMiLGgudmVyc2lvbnMpLGZlKCkscGkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W0k2ZSxucyx5YSxTMixjcCxUa3QsbDcsQTIsazIscWwsTWQsVDIsbmwsbzcsJHMsYnAsRWgsUGQsZmcsSGwsb3UsS3UsajAsTDIsUDIsZHMsUTFlLElkLEJiLFNo''@;'; put 'put ''LFoxLEU3LCRiLFFMLHNnLGc3LG03LFZiLHY3LGI3LHk3LFJkLERfLGk0LE82ZSxwTyxYZWUsU3cscjQsRjZlLERrdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBIRHQ9W3twYXRoOiIiLGNvbXBvbmVudDp5QXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoi''@;'; put 'put ''ZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6ek59LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDp6Tn0se3BhdGg6''@;'; put 'put ''ImxpbmVhZ2UiLGNvbXBvbmVudDpqTn0se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OmpOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJl''@;'; put 'put ''Y3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OmpOfSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDpNa3R9LHtwYXRoOiJtZXRhZGF0YSIsY29tcG9uZW50Olp0ZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQiLGNvbXBvbmVudDpadGV9LHtwYXRoOiJtZXRhZGF0''@;'; put 'put ''YS9vYmplY3QvOm9iamVjdElELzpvYmplY3ROYW1lIixjb21wb25lbnQ6WnRlfSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50OnZBdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpNN2V9LHtw''@;'; put 'put ''YXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6TTdlfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6dDhlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNvbXBvbmVudDp0OGV9LHtwYXRoOiJyb2xlcyIsY29tcG9uZW50OlM3ZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDpTN2V9XX1dfV07''@;'; put 'put ''bGV0IE5EdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbemMuZm9yQ2hpbGQoSER0KSx6Y119''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpLFZEdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTjZlLFJhLE5E''@;'; put 'put ''dCxBa3QsUmMsejAsbzkuZm9yUm9vdCgpLEc5LEN3LE1BLFFlZSxuZl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGpEdD16Yy5mb3JSb290KFt7cGF0aDoiIixyZWRpcmVjdFRvOiJob21lIixwYXRoTWF0Y2g6ImZ1bGwifSx7cGF0aDoidmlldyIsbG9hZENoaWxkcmVuOigpPT5WRHR9LHtwYXRo''@;'; put 'put ''OiJyZXZpZXciLGNvbXBvbmVudDpCX3QsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6IiIsbG9hZENoaWxkcmVuOigpPT5WX3R9XX0se3BhdGg6ImxpY2Vuc2luZyIsbG9hZENoaWxkcmVuOigpPT5pYnR9LHtwYXRoOiJo''@;'; put 'put ''b21lIixsb2FkQ2hpbGRyZW46KCk9PmJ5dH0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT5jOXR9LHtwYXRoOiJzdGFnZSIsbG9hZENoaWxkcmVuOigpPT5xX3R9LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+Y3d0fSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46''@;'; put 'put ''KCk9PmxxZX0se3BhdGg6IioqIixjb21wb25lbnQ6aiRlfV0se3VzZUhhc2g6ITB9KTtsZXQgekR0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjLGJvb3RzdHJh''@;'; put 'put ''cDpbWFllXX0pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOltvTCxraCx0dGUsJFJdLGltcG9ydHM6W0IkZSxUb2UsUmMsSU9lLG9BZSxqRHQsQ3csejAsRzksTUEsbmYsbmt0XX0pfX1yZXR1cm4gY30pKCk7a0NlKCkuYm9vdHN0cmFwTW9kdWxlKHpEdCl9LDM3MzQ6KG1v''@;'; put 'put ''ZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9Pnt2YXIgX2FzeW5jVG9HZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXygyOTI5MykuZGVmYXVsdCxfd3JhcEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNDI5NTgpLmRlZmF1bHQs''@;'; put 'put ''X2F3YWl0QXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg1MzM0NCkuZGVmYXVsdCxfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZT1fX3dlYnBhY2tfcmVxdWlyZV9fKDkzNTEzKS5kZWZhdWx0LF9hc3luY0l0ZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oODI4ODEpLmRlZmF1bHQs''@;'; put 'put ''YjtzZWxmLGI9KCk9PigoKT0+e3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXszMDYyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODc2NCkuQnVmZmVyO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkNzdkZvcm1hdHRlclN0cmVhbT12''@;'; put 'put ''b2lkIDA7Y29uc3QgXz1iKDI4MzApLHA9Yig5OTQ3KTtKLkNzdkZvcm1hdHRlclN0cmVhbT1jbGFzcyBOIGV4dGVuZHMgXy5UcmFuc2Zvcm17Y29uc3RydWN0b3IoRil7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTpGLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5m''@;'; put 'put ''b3JtYXR0ZXJPcHRpb25zPUYsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IHAuUm93Rm9ybWF0dGVyKEYpLHRoaXMuaGFzV3JpdHRlbkJPTT0hRi53cml0ZUJPTX10cmFuc2Zvcm0oRil7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1GLHRoaXN9X3RyYW5zZm9ybShGLEgsUil7''@;'; put 'put ''bGV0IGo9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChGLChQLEwpPT5QPyhqPSEwLFIoUCkpOihMJiZMLmZvckVhY2goWT0+e3RoaXMu''@;'; put 'put ''cHVzaChELmZyb20oWSwidXRmOCIpKX0pLGo9ITAsUigpKSl9Y2F0Y2goUCl7aWYoail0aHJvdyBQO1IoUCl9fV9mbHVzaChGKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2goKEgsUik9Pkg/RihIKTooUiYmUi5mb3JFYWNoKGo9Pnt0aGlzLnB1c2goRC5mcm9tKGosInV0ZjgiKSl9KSxGKCkp''@;'; put 'put ''KX19fSw2NzYzOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Gb3JtYXR0ZXJPcHRpb25zPXZvaWQgMCxKLkZvcm1hdHRlck9wdGlvbnM9Y2xhc3MgYntjb25zdHJ1Y3RvcihfPXt9KXt2YXIgcDt0aGlzLm9i''@;'; put 'put ''amVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMucm93RGVsaW1pdGVyPSJcbiIsdGhpcy5xdW90ZT0nIicsdGhpcy5lc2NhcGU9dGhpcy5xdW90ZSx0aGlzLnF1b3RlQ29sdW1ucz0hMSx0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyx0aGlzLmhlYWRlcnM9bnVs''@;'; put 'put ''bCx0aGlzLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXI9ITEsdGhpcy53cml0ZUJPTT0hMSx0aGlzLkJPTT0iXHVmZWZmIix0aGlzLmFsd2F5c1dyaXRlSGVhZGVycz0hMSxPYmplY3QuYXNzaWduKHRoaXMsX3x8e30pLHR5cGVvZiBfPy5xdW90ZUhlYWRlcnM+InUiJiYodGhpcy5xdW90ZUhlYWRl''@;'; put 'put ''cnM9dGhpcy5xdW90ZUNvbHVtbnMpLCEwPT09Xz8ucXVvdGU/dGhpcy5xdW90ZT0nIic6ITE9PT1fPy5xdW90ZSYmKHRoaXMucXVvdGU9IiIpLCJzdHJpbmciIT10eXBlb2YgXz8uZXNjYXBlJiYodGhpcy5lc2NhcGU9dGhpcy5xdW90ZSksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9ISF0aGlz''@;'; put 'put ''LmhlYWRlcnMmJihudWxsPT09KHA9Xy53cml0ZUhlYWRlcnMpfHx2b2lkIDA9PT1wfHxwKSx0aGlzLmhlYWRlcnM9QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnMpP3RoaXMuaGVhZGVyczpudWxsLHRoaXMuZXNjYXBlZFF1b3RlPWAke3RoaXMuZXNjYXBlfSR7dGhpcy5xdW90ZX1gfX19LDUx''@;'; put 'put ''ODY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LEouRmllbGRGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IF89RChiKDgwOTQpKSxwPUQoYig5NzIyKSksTj1EKGIoMTY1OCkpO0ouRmllbGRGb3JtYXR0ZXI9Y2xhc3Mgd3tjb25zdHJ1Y3RvcihIKXt0aGlzLl9oZWFkZXJzPW51bGwsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPUgsbnVsbCE9PUguaGVh''@;'; put 'put ''ZGVycyYmKHRoaXMuaGVhZGVycz1ILmhlYWRlcnMpLHRoaXMuUkVQTEFDRV9SRUdFWFA9bmV3IFJlZ0V4cChILnF1b3RlLCJnIik7Y29uc3QgUj1gWyR7SC5kZWxpbWl0ZXJ9JHtOLmRlZmF1bHQoSC5yb3dEZWxpbWl0ZXIpfXxccnxcbl1gO3RoaXMuRVNDQVBFX1JFR0VYUD1uZXcgUmVnRXhw''@;'; put 'put ''KFIpfXNldCBoZWFkZXJzKEgpe3RoaXMuX2hlYWRlcnM9SH1zaG91bGRRdW90ZShILFIpe2NvbnN0IGo9Uj90aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVIZWFkZXJzOnRoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUNvbHVtbnM7cmV0dXJuIF8uZGVmYXVsdChqKT9qOkFycmF5LmlzQXJy''@;'; put 'put ''YXkoaik/altIXTpudWxsIT09dGhpcy5faGVhZGVycyYmalt0aGlzLl9oZWFkZXJzW0hdXX1mb3JtYXQoSCxSLGope2NvbnN0IFA9YCR7cC5kZWZhdWx0KEgpPyIiOkh9YC5yZXBsYWNlKC9cMC9nLCIiKSx7Zm9ybWF0dGVyT3B0aW9uczpMfT10aGlzO3JldHVybiIiIT09TC5xdW90ZSYmLTEh''@;'; put 'put ''PT1QLmluZGV4T2YoTC5xdW90ZSk/dGhpcy5xdW90ZUZpZWxkKFAucmVwbGFjZSh0aGlzLlJFUExBQ0VfUkVHRVhQLEwuZXNjYXBlZFF1b3RlKSk6LTEhPT1QLnNlYXJjaCh0aGlzLkVTQ0FQRV9SRUdFWFApfHx0aGlzLnNob3VsZFF1b3RlKFIsaik/dGhpcy5xdW90ZUZpZWxkKFApOlB9cXVv''@;'; put 'put ''dGVGaWVsZChIKXtjb25zdHtxdW90ZTpSfT10aGlzLmZvcm1hdHRlck9wdGlvbnM7cmV0dXJuYCR7Un0ke0h9JHtSfWB9fX0sNzE4MTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSCl7cmV0dXJuIEgmJkgu''@;'; put 'put ''X19lc01vZHVsZT9IOntkZWZhdWx0Okh9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Sb3dGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IF89RChiKDg0MjMpKSxwPUQoYigyMzA3KSksTj1iKDUxODYpLHc9Yig0NjkyKTtjbGFzcyBGe2NvbnN0cnVj''@;'; put 'put ''dG9yKFIpe3RoaXMucm93Q291bnQ9MCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9Uix0aGlzLmZpZWxkRm9ybWF0dGVyPW5ldyBOLkZpZWxkRm9ybWF0dGVyKFIpLHRoaXMuaGVhZGVycz1SLmhlYWRlcnMsdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9Ui5zaG91bGRXcml0ZUhlYWRlcnMsdGhpcy5o''@;'; put 'put ''YXNXcml0dGVuSGVhZGVycz0hMSxudWxsIT09dGhpcy5oZWFkZXJzJiYodGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXRoaXMuaGVhZGVycyksUi50cmFuc2Zvcm0mJih0aGlzLnJvd1RyYW5zZm9ybT1SLnRyYW5zZm9ybSl9c3RhdGljIGlzUm93SGFzaEFycmF5KFIpe3JldHVybiEhQXJy''@;'; put 'put ''YXkuaXNBcnJheShSKSYmQXJyYXkuaXNBcnJheShSWzBdKSYmMj09PVJbMF0ubGVuZ3RofXN0YXRpYyBpc1Jvd0FycmF5KFIpe3JldHVybiBBcnJheS5pc0FycmF5KFIpJiYhdGhpcy5pc1Jvd0hhc2hBcnJheShSKX1zdGF0aWMgZ2F0aGVySGVhZGVycyhSKXtyZXR1cm4gRi5pc1Jvd0hhc2hB''@;'; put 'put ''cnJheShSKT9SLm1hcChqPT5qWzBdKTpBcnJheS5pc0FycmF5KFIpP1I6T2JqZWN0LmtleXMoUil9c3RhdGljIGNyZWF0ZVRyYW5zZm9ybShSKXtyZXR1cm4gdy5pc1N5bmNUcmFuc2Zvcm0oUik/KGosUCk9PntsZXQgTD1udWxsO3RyeXtMPVIoail9Y2F0Y2goWSl7cmV0dXJuIFAoWSl9cmV0''@;'; put 'put ''dXJuIFAobnVsbCxMKX06KGosUCk9PntSKGosUCl9fXNldCByb3dUcmFuc2Zvcm0oUil7aWYoIV8uZGVmYXVsdChSKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNmb3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPUYuY3JlYXRlVHJhbnNmb3JtKFIp''@;'; put 'put ''fWZvcm1hdChSLGope3RoaXMuY2FsbFRyYW5zZm9ybWVyKFIsKFAsTCk9PntpZihQKXJldHVybiBqKFApO2lmKCFSKXJldHVybiBqKG51bGwpO2NvbnN0IFk9W107aWYoTCl7Y29uc3R7c2hvdWxkRm9ybWF0Q29sdW1uczpCLGhlYWRlcnM6V309dGhpcy5jaGVja0hlYWRlcnMoTCk7aWYodGhp''@;'; put 'put ''cy5zaG91bGRXcml0ZUhlYWRlcnMmJlcmJiF0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzJiYoWS5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyhXLCEwKSksdGhpcy5oYXNXcml0dGVuSGVhZGVycz0hMCksQil7Y29uc3QgWj10aGlzLmdhdGhlckNvbHVtbnMoTCk7WS5wdXNoKHRoaXMuZm9ybWF0Q29s''@;'; put 'put ''dW1ucyhaLCExKSl9fXJldHVybiBqKG51bGwsWSl9KX1maW5pc2goUil7Y29uc3Qgaj1bXTtpZih0aGlzLmZvcm1hdHRlck9wdGlvbnMuYWx3YXlzV3JpdGVIZWFkZXJzJiYwPT09dGhpcy5yb3dDb3VudCl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm4gUihuZXcgRXJyb3IoImBhbHdheXNXcml0''@;'; put 'put ''ZUhlYWRlcnNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBidXQgYGhlYWRlcnNgIG9wdGlvbiBub3QgcHJvdmlkZWQuIikpO2oucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModGhpcy5oZWFkZXJzLCEwKSl9cmV0dXJuIHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5pbmNsdWRlRW5kUm93RGVsaW1pdGVy''@;'; put 'put ''JiZqLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlciksUihudWxsLGopfWNoZWNrSGVhZGVycyhSKXtpZih0aGlzLmhlYWRlcnMpcmV0dXJue3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczp0aGlzLmhlYWRlcnN9O2NvbnN0IGo9Ri5nYXRoZXJIZWFkZXJzKFIp''@;'; put 'put ''O3JldHVybiB0aGlzLmhlYWRlcnM9aix0aGlzLmZpZWxkRm9ybWF0dGVyLmhlYWRlcnM9aix0aGlzLnNob3VsZFdyaXRlSGVhZGVycz97c2hvdWxkRm9ybWF0Q29sdW1uczohcC5kZWZhdWx0KGosUiksaGVhZGVyczpqfTp7c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOm51bGx9fWdh''@;'; put 'put ''dGhlckNvbHVtbnMoUil7aWYobnVsbD09PXRoaXMuaGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoIkhlYWRlcnMgaXMgY3VycmVudGx5IG51bGwiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShSKT9GLmlzUm93SGFzaEFycmF5KFIpP3RoaXMuaGVhZGVycy5tYXAoKGosUCk9Pntjb25zdCBMPVJbUF07''@;'; put 'put ''cmV0dXJuIEw/TFsxXToiIn0pOkYuaXNSb3dBcnJheShSKSYmIXRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzP1I6dGhpcy5oZWFkZXJzLm1hcCgoaixQKT0+UltQXSk6dGhpcy5oZWFkZXJzLm1hcChqPT5SW2pdKX1jYWxsVHJhbnNmb3JtZXIoUixqKXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3Jt''@;'; put 'put ''P3RoaXMuX3Jvd1RyYW5zZm9ybShSLGopOmoobnVsbCxSKX1mb3JtYXRDb2x1bW5zKFIsail7Y29uc3QgUD1SLm1hcCgoWSxCKT0+dGhpcy5maWVsZEZvcm1hdHRlci5mb3JtYXQoWSxCLGopKS5qb2luKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5kZWxpbWl0ZXIpLHtyb3dDb3VudDpMfT10aGlz''@;'; put 'put ''O3JldHVybiB0aGlzLnJvd0NvdW50Kz0xLEw/W3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIsUF0uam9pbigiIik6UH19Si5Sb3dGb3JtYXR0ZXI9Rn0sOTk0NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksSi5GaWVsZEZvcm1hdHRlcj1KLlJvd0Zvcm1hdHRlcj12b2lkIDA7dmFyIEQ9Yig3MTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiUm93Rm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5Sb3dGb3JtYXR0ZXJ9fSk7dmFyIF89Yig1''@;'; put 'put ''MTg2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiRmllbGRGb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLkZpZWxkRm9ybWF0dGVyfX0pfSw3MjAxOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoODc2NCkuQnVmZmVyLF89dGhp''@;'; put 'put ''cyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEIsVyxaLHEpe3ZvaWQgMD09PXEmJihxPVopLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLHEse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFdbWl19fSl9OmZ1bmN0aW9uKEIsVyxaLHEp''@;'; put 'put ''e3ZvaWQgMD09PXEmJihxPVopLEJbcV09V1taXX0pLHA9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEIsVyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOld9KX06ZnVuY3Rpb24oQixX''@;'; put 'put ''KXtCLmRlZmF1bHQ9V30pLE49dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEIpe2lmKEImJkIuX19lc01vZHVsZSlyZXR1cm4gQjt2YXIgVz17fTtpZihudWxsIT1CKWZvcih2YXIgWiBpbiBCKSJkZWZhdWx0IiE9PVomJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChCLFopJiZfKFcsQixaKTtyZXR1cm4gcChXLEIpLFd9LHc9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEIsVyl7Zm9yKHZhciBaIGluIEIpImRlZmF1bHQiIT09WiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChXLFopJiZfKFcsQixaKX07T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoud3JpdGVUb1BhdGg9Si53cml0ZVRvU3RyaW5nPUoud3JpdGVUb0J1ZmZlcj1KLndyaXRlVG9TdHJlYW09Si53cml0ZT1KLmZvcm1hdD1KLkZvcm1hdHRlck9wdGlvbnM9Si5Dc3ZGb3JtYXR0ZXJTdHJlYW09''@;'; put 'put ''dm9pZCAwO2NvbnN0IEY9Yig5NTM5KSxIPWIoMjgzMCksUj1OKGIoODY0NikpLGo9Yig2NzYzKSxQPWIoMzA2Mik7dyhiKDQ2OTIpLEopO3ZhciBMPWIoMzA2Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIkNzdkZvcm1hdHRlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEwuQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pO3ZhciBZPWIoNjc2Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIkZvcm1hdHRlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZLkZvcm1hdHRlck9wdGlvbnN9fSksSi5mb3JtYXQ9Qj0+bmV3''@;'; put 'put ''IFAuQ3N2Rm9ybWF0dGVyU3RyZWFtKG5ldyBqLkZvcm1hdHRlck9wdGlvbnMoQikpLEoud3JpdGU9KEIsVyk9Pntjb25zdCBaPUouZm9ybWF0KFcpLHE9Ri5wcm9taXNpZnkoKFEsWCk9PntaLndyaXRlKFEsdm9pZCAwLFgpfSk7cmV0dXJuIEIucmVkdWNlKChRLFgpPT5RLnRoZW4oKCk9PnEo''@;'; put 'put ''WCkpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5aLmVuZCgpKS5jYXRjaChRPT57Wi5lbWl0KCJlcnJvciIsUSl9KSxafSxKLndyaXRlVG9TdHJlYW09KEIsVyxaKT0+Si53cml0ZShXLFopLnBpcGUoQiksSi53cml0ZVRvQnVmZmVyPShCLFc9e30pPT57Y29uc3QgWj1bXSxxPW5ldyBI''@;'; put 'put ''LldyaXRhYmxlKHt3cml0ZShRLFgsdGUpe1oucHVzaChRKSx0ZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoUSxYKT0+e3Eub24oImVycm9yIixYKS5vbigiZmluaXNoIiwoKT0+UShELmNvbmNhdChaKSkpLEoud3JpdGUoQixXKS5waXBlKHEpfSl9LEoud3JpdGVUb1N0cmluZz0oQixXKT0+''@;'; put 'put ''Si53cml0ZVRvQnVmZmVyKEIsVykudGhlbihaPT5aLnRvU3RyaW5nKCkpLEoud3JpdGVUb1BhdGg9KEIsVyxaKT0+e2NvbnN0IHE9Ui5jcmVhdGVXcml0ZVN0cmVhbShCLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gSi53cml0ZShXLFopLnBpcGUocSl9fSw0NjkyOihjZSxKKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLEouaXNTeW5jVHJhbnNmb3JtPWI9PjE9PT1iLmxlbmd0aH0sMjY1NjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0''@;'; put 'put ''aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUil7cmV0dXJuIFImJlIuX19lc01vZHVsZT9SOntkZWZhdWx0OlJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kZWNvZGVUb2tlbj1KLmhhc1Rva2VuRXhwaXJlZD1KLmlzUmVmcmVzaFRv''@;'; put 'put ''a2VuRXhwaXJpbmc9Si5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO2NvbnN0IF89RChiKDYyNDUpKTtmdW5jdGlvbiBGKFIsail7cmV0dXJuKDAsXy5kZWZhdWx0KShSKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD1qfUouaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9u''@;'; put 'put ''IHAoUixqPTM2MDApe3JldHVybiFSfHxGKFIsail9LEouaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1mdW5jdGlvbiBOKFIsaj0zMCl7cmV0dXJuIVJ8fEYoUixqKX0sSi5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24gdyhSKXtyZXR1cm4hUnx8RihSLDApfSxKLmRlY29kZVRva2VuPWZ1bmN0aW9u''@;'; put 'put ''IEgoUil7bGV0IGo7dHJ5e2o9KDAsXy5kZWZhdWx0KShSKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIGp9fSw2Nzk5OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwo''@;'; put 'put ''T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxGLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pfTpmdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KSxwW0ZdPU5b''@;'; put 'put ''d119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLE4pe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTix3KSYmRChOLHAsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxfKGIoMjY1NiksSil9LDMyNTk6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnByZWZpeE1lc3NhZ2U9dm9pZCAwLEoucHJlZml4TWVzc2FnZT0oRCxfKT0+e2lmKCJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgRClpZihELmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpRC5tZXNzYWdlPV8rRC5tZXNzYWdlO2Vsc2V7aWYoIUQuaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEQpLHttZXNzYWdlOl99KTtpZigib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIEQuYm9keSYmKEQubWVzc2FnZT1ELmJvZHkubWVzc2FnZT9fK0QuYm9keS5tZXNzYWdlOl8pLCJzdHJpbmciPT10eXBlb2YgRC5ib2R5KXtsZXQgcDt0cnl7cD1KU09OLnBhcnNlKEQuYm9keSl9Y2F0Y2h7cmV0dXJuIEQubWVzc2FnZT1fLER9cmV0dXJuIHAubWVzc2FnZT1wLm1lc3Nh''@;'; put 'put ''Z2U/XytwLm1lc3NhZ2U6XyxELmJvZHk9cCxEfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIEQmJihEPV8rRCksRH19LDk3Nzg6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsTix3''@;'; put 'put ''LEYpe3ZvaWQgMD09PUYmJihGPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5bd119fSl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0''@;'; put 'put ''YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigzMjU5KSxKKSxf''@;'; put 'put ''KGIoMTA2NCksSil9LDEwNjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCBEPWIoMzkwMCk7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9y''@;'; put 'put ''KE49W10pe2xldCB3PShOPVsuLi5uZXcgU2V0KE4pXSkubGVuZ3RoP04uam9pbigiLCAiKS50cmltKCk6W0QuU2VydmVyVHlwZS5TYXNWaXlhLEQuU2VydmVyVHlwZS5TYXM5LEQuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dz13LnJlcGxhY2UoLyxccyhbXixdKikkLywi''@;'; put 'put ''IGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24kezEhPT1OLmxlbmd0aD8icyI6IiJ9ICR7MSE9PU4ubGVuZ3RoPyJhcmUiOiJpcyJ9ICR7d31gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5w''@;'; put 'put ''cm90b3R5cGUpfX1KLlNlcnZlclR5cGVFcnJvcj1ffSwzOTA2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihSLGosUCxMKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbihCLFcpe2Z1bmN0aW9uIFoo''@;'; put 'put ''WCl7dHJ5e1EoTC5uZXh0KFgpKX1jYXRjaCh0ZSl7Vyh0ZSl9fWZ1bmN0aW9uIHEoWCl7dHJ5e1EoTC50aHJvdyhYKSl9Y2F0Y2godGUpe1codGUpfX1mdW5jdGlvbiBRKFgpe1guZG9uZT9CKFgudmFsdWUpOmZ1bmN0aW9uIFkoQil7cmV0dXJuIEIgaW5zdGFuY2VvZiBQP0I6bmV3IFAoZnVu''@;'; put 'put ''Y3Rpb24oVyl7VyhCKX0pfShYLnZhbHVlKS50aGVuKFoscSl9USgoTD1MLmFwcGx5KFIsanx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnVwZGF0ZUNzdj1KLmNyZWF0ZUNzdj1KLnJlYWRDc3Y9dm9pZCAwO2NvbnN0''@;'; put 'put ''IF89YigxNTU5KSxwPWIoNzIwMSk7Si5yZWFkQ3N2PVI9PkQodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoUikpLnNwbGl0KCJcbiIpLmZpbHRlcihQPT5QLmxlbmd0aCkubWFwKFA9PlAuc3BsaXQoIiwiKSl9KSxKLmNyZWF0ZUNz''@;'; put 'put ''dj0oUixqLFApPT5EKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9eWllbGQoMCxwLndyaXRlVG9TdHJpbmcpKGose2hlYWRlcnM6UH0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShSLEwpfSksSi51cGRhdGVDc3Y9KFIsaixQLEwpPT5EKHZvaWQgMCx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9eWllbGQgSChSLGosUCxMKTtpZihMKXtjb25zdCBCPTA9PT1ZLmxlbmd0aD8xOlkubGVuZ3RoLFc9UC5maW5kSW5kZXgoWj0+Wj09PUwpO1c+LTE/ai5zcGxpY2UoVywwLEIpOihQLnNwbGljZSgwLDAsTCksai5zcGxpY2UoMCwwLEIpKX1ZLnB1c2go''@;'; put 'put ''aikseWllbGQoMCxKLmNyZWF0ZUNzdikoUixZLFApfSk7Y29uc3QgSD0oUixqLFAsTCk9PkQodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoai5sZW5ndGghPT1QLmxlbmd0aCl7aWYoai5sZW5ndGg+UC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90''@;'; put 'put ''IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIUx8fGoubGVuZ3RoKzEhPT1QLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKEwmJlAuaW5jbHVk''@;'; put 'put ''ZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgWT15aWVsZCgwLEoucmVhZENzdikoUikuY2F0Y2goVz0+W10pLEI9WVswXTtpZihCKXtpZihQLmxlbmd0aD5CLmxlbmd0aCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihQLmxlbmd0aDxCLmxlbmd0aCl7aWYoIUx8fFAubGVuZ3RoKzEhPT1CLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92''@;'; put 'put ''aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBXPUIuZmluZEluZGV4KHE9PnE9PT1MKSxaPVsuLi5QXTtpZighKFc+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBj''@;'; put 'put ''b2x1bW5zIik7aWYoWi5zcGxpY2UoVywwLEwpLEpTT04uc3RyaW5naWZ5KFApIT09SlNPTi5zdHJpbmdpZnkoWikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KFApIT09SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoQikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihMJiYhUC5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBkYXRhIil9fXJldHVy''@;'; put 'put ''biBZfSl9LDE1NTk6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSxuZSl7dm9pZCAwPT09bmUmJihuZT1hZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sbmUse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUsbmUpe3ZvaWQgMD09PW5lJiYobmU9YWUpLG1bbmVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obSxBKXtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSkscD10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBBPXt9O2lmKG51bGwh''@;'; put 'put ''PW0pZm9yKHZhciBhZSBpbiBtKSJkZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxhZSkmJkQoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LE49dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxhZSxuZSl7cmV0dXJuIG5ldyhhZXx8''@;'; put 'put ''KGFlPVByb21pc2UpKShmdW5jdGlvbih3ZSxVZSl7ZnVuY3Rpb24gUWUodmUpe3RyeXtNZShuZS5uZXh0KHZlKSl9Y2F0Y2goWGUpe1VlKFhlKX19ZnVuY3Rpb24gb3QodmUpe3RyeXtNZShuZS50aHJvdyh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0aW9uIE1lKHZlKXt2ZS5kb25lP3dl''@;'; put 'put ''KHZlLnZhbHVlKTpmdW5jdGlvbiBsZSh3ZSl7cmV0dXJuIHdlIGluc3RhbmNlb2YgYWU/d2U6bmV3IGFlKGZ1bmN0aW9uKFVlKXtVZSh3ZSl9KX0odmUudmFsdWUpLnRoZW4oUWUsb3QpfU1lKChuZT1uZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRoaXMuX19pbXBvcnRE''@;'; put 'put ''ZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmdldExpbmVFbmRpbmc9Si5pc1Rlc3RGaWxlPUoudGVzdEZpbGVSZWdFeHA9Si5jcmVhdGVSZWFk''@;'; put 'put ''U3RyZWFtPUouY3JlYXRlV3JpdGVTdHJlYW09Si5nZXRSZWFsUGF0aD1KLmJhc2U2NEVuY29kZUZpbGU9Si5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Si5wYXRoU2VwRXNjYXBlZD1KLmNvcHk9Si5tb3ZlRmlsZT1KLmdldFJlbGF0aXZlUGF0aD1KLnVuaWZ5RmlsZVBhdGg9Si5kZWxldGVGb2xk''@;'; put 'put ''ZXI9Si5kZWxldGVGaWxlPUouY3JlYXRlRmlsZT1KLmNyZWF0ZUZvbGRlcj1KLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1KLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Si5saXN0U2FzRmlsZXNJbkZvbGRlcj1KLmxpc3RJbmlGaWxlc0luRm9sZGVyPUoubGlzdEZpbGVzSW5Gb2xk''@;'; put 'put ''ZXI9Si5yZWFkRmlsZUJpbmFyeT1KLnJlYWRGaWxlPUouaXNGb2xkZXI9Si5mb2xkZXJFeGlzdHM9Si5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBGPXcoYig1Njc0KSksSD13KGIoMjUyMCkpLFI9Yig2MjY2KSxqPXAoYigyOTc1KSksUD1iKDM5MDApO2Z1bmN0aW9uIFkobSl7cmV0dXJuIE4o''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sRi5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFoobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBxKG0pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gRi5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4o''@;'; put 'put ''QT0+QS5maWx0ZXIoYWU9PiFhZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1bmN0aW9uIHJlKG0sQT0hMCxhZT1bXSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmls''@;'; put 'put ''ZVR5cGVzOiEwfSkudGhlbihuZT0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmbmUuZmlsdGVyKHdlPT53ZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCB3ZT1bXTtyZXR1cm4geWllbGQoMCxSLmFzeW5jRm9yRWFjaCkobmUuZmlsdGVyKFVlPT5VZS5pc0RpcmVj''@;'; put 'put ''dG9yeSgpKSxVZT0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUWU9VWUubmFtZTtpZighYWUuaW5jbHVkZXMoUWUpKXtjb25zdCBvdD1ILmRlZmF1bHQuam9pbihtLFFlKTt3ZT1bLi4ud2UsLi4uKHlpZWxkIHJlKG90LEEsYWUpKS5tYXAoTWU9PkguZGVmYXVsdC5q''@;'; put 'put ''b2luKFFlLE1lKSldfX0pKSxbLi4ubmUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi53ZV19cmV0dXJuIG5lLm1hcChsZT0+bGUubmFtZSl9KSl9KX1mdW5jdGlvbiBvZShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIFNlKG0sQT1ILmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgbmU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgbGU9T2JqZWN0LmtleXMobmUpLmZpbmQod2U9Pm5lW3dlXT09PUEpO2lm''@;'; put 'put ''KGxlKXtjb25zdCB3ZT1uZVtPYmplY3Qua2V5cyhuZSkuZmluZChVZT0+VWUhPT1sZSldO3JldHVybiBsZT1uZVtsZV0sbS5zcGxpdCh3ZSkuam9pbihsZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9Si5maWxlRXhpc3RzPWZ1bmN0aW9uIEwobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sRi5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxKLmZvbGRlckV4aXN0cz1ZLEouaXNGb2xkZXI9ZnVuY3Rpb24gQihtKXtyZXR1cm4gTih0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxKLnJlYWRGaWxlPWZ1bmN0aW9uIFcobSxBPSJ1dGY4Iil7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxKLnJlYWRGaWxlQmluYXJ5PVosSi5saXN0RmlsZXNJbkZvbGRlcj1xLEoubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gUShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7cmV0dXJuKHlpZWxkIHEobSkpLmZpbHRlcihBPT5BLmVuZHNXaXRoKCIuaW5pIikpfSl9LEoubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gWChtLEE9ITEsYWU9W10pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgcmUo''@;'; put 'put ''bSxBLGFlKSkuZmlsdGVyKHdlPT53ZS5lbmRzV2l0aCgiLnNhcyIpKX0pfSxKLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9ZnVuY3Rpb24gdGUobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRo''@;'; put 'put ''RmlsZVR5cGVzOiEwfSkudGhlbihBPT5BLmZpbHRlcihhZT0+YWUuaXNEaXJlY3RvcnkoKSkubWFwKGFlPT5hZS5uYW1lKSl9KX0sSi5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9cmUsSi5jcmVhdGVGb2xkZXI9b2UsSi5jcmVhdGVGaWxlPWZ1bmN0aW9uIGdlKG0sQSxhZSl7cmV0''@;'; put 'put ''dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKChtPVNlKG0pKS5zcGxpdChILmRlZmF1bHQuc2VwKS5sZW5ndGg+MSl7bGV0IG5lPW0uc3BsaXQoSC5kZWZhdWx0LnNlcCk7bmUucG9wKCk7Y29uc3QgbGU9bmUuam9pbihILmRlZmF1bHQuc2VwKTsoeWllbGQgWShsZSkp''@;'; put 'put ''fHwoeWllbGQgb2UobGUpKX1yZXR1cm4gRi5kZWZhdWx0LnByb21pc2VzLndyaXRlRmlsZShtLEEsYWUpfSl9LEouZGVsZXRlRmlsZT1mdW5jdGlvbiBfZShtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5yZW1vdmUobSl9KX0sSi5k''@;'; put 'put ''ZWxldGVGb2xkZXI9ZnVuY3Rpb24gVGUobSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQucm0obSx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9KX0sSi51bmlmeUZpbGVQYXRoPVNlLEouZ2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uIHpl''@;'; put 'put ''KG0sQSl7Y29uc3QgYWU9bS5zcGxpdChILmRlZmF1bHQuc2VwKSxuZT1BLnNwbGl0KEguZGVmYXVsdC5zZXApO2xldCBsZT1bXSx3ZT1bXTthZS5mb3JFYWNoKCh2ZSxYZSk9Pnt2b2lkIDAhPT1uZVtYZV0mJmFlW1hlXT09PW5lW1hlXT9sZS5wdXNoKHZlKTp2ZSYmd2UucHVzaCh2ZSl9KTtj''@;'; put 'put ''b25zdCBVZT1sZS5qb2luKEguZGVmYXVsdC5zZXApLFFlPW5ldyBSZWdFeHAoYF4ke0guZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfWApLG90PW5ldyBSZWdFeHAoYCR7SC5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9JGApO3JldHVybih3ZS5sZW5ndGg/YC4u''@;'; put 'put ''JHtILmRlZmF1bHQuc2VwfWAucmVwZWF0KHdlLmxlbmd0aCk6YC4ke0guZGVmYXVsdC5zZXB9YCkrQS5yZXBsYWNlKFVlLCIiKS5yZXBsYWNlKFFlLCIiKS5yZXBsYWNlKG90LCIiKX0sSi5tb3ZlRmlsZT1mdW5jdGlvbiB6KG0sQSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiBGLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKG0sQSl9KX0sSi5jb3B5PWZ1bmN0aW9uIGcobSxBKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIEYuZGVmYXVsdC5jb3B5KG0sQSl9KX0sSi5wYXRoU2VwRXNjYXBlZD1ILmRlZmF1''@;'; put 'put ''bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxKLmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5jdGlvbiB5KG0pe3JldHVybiBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gWihtKS50aGVuKEE9PntsZXQgYWU9SC5kZWZhdWx0LmV4dG5hbWUobSkuc3Vic3RyKDEp''@;'; put 'put ''fHwicG5nIjtyZXR1cm4ic3ZnIj09PWFlJiYoYWU9InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK2FlKyI7YmFzZTY0LCIrQS50b1N0cmluZygiYmFzZTY0Iil9KX0pfSxKLmJhc2U2NEVuY29kZUZpbGU9ZnVuY3Rpb24geChtKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIEYuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShtLHtlbmNvZGluZzoiYmFzZTY0In0pfSl9LEouZ2V0UmVhbFBhdGg9ZnVuY3Rpb24gQyhtKXtyZXR1cm4gRi5kZWZhdWx0LnJlYWxwYXRoU3luYyhtKX0sSi5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbiBUKG0pe3JldHVy''@;'; put 'put ''biBOKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgai5maWxlRXhpc3RzKG0pKXx8KHlpZWxkIGouY3JlYXRlRmlsZShtLCIiKSksRi5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKG0se2ZsYWdzOiJhIn0pfSl9LEouY3JlYXRlUmVhZFN0cmVhbT1tPT5OKHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBGLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShtKX0pLEoudGVzdEZpbGVSZWdFeHA9L1wudGVzdFwuKFxkK1wuKT9zYXMkL2ksSi5pc1Rlc3RGaWxlPW09PkoudGVzdEZpbGVSZWdFeHAudGVzdChtKSxKLmdldExpbmVFbmRp''@;'; put 'put ''bmc9bT0+bmV3IFJlZ0V4cChQLkxpbmVFbmRpbmdzLkNSTEYpLnRlc3QobSk/UC5MaW5lRW5kaW5ncy5DUkxGOlAuTGluZUVuZGluZ3MuTEZ9LDU2MjY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0QWJzb2x1dGVQYXRoPXZvaWQgMDtjb25zdCBfPUQoYigyNTIwKSkscD1EKGIoNzQzNSkpO0ouZ2V0QWJzb2x1dGVQYXRoPSh3LEYp''@;'; put 'put ''PT5fLmRlZmF1bHQuaXNBYnNvbHV0ZSh3KXx8L15+Ly5leGVjKHcpP18uZGVmYXVsdC5ub3JtYWxpemUody5yZXBsYWNlKC9efi8scC5kZWZhdWx0LmhvbWVkaXIoKSkpOl8uZGVmYXVsdC5qb2luKEYsdyl9LDI5NzU6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYm''@;'; put 'put ''dGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsRixILFIpe3ZvaWQgMD09PVImJihSPUgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LFIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEZbSF19fSl9OmZ1bmN0aW9uKHcsRixILFIpe3Zv''@;'; put 'put ''aWQgMD09PVImJihSPUgpLHdbUl09RltIXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsRil7Zm9yKHZhciBIIGluIHcpImRlZmF1bHQiIT09SCYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGLEgpJiZEKEYsdyxIKX07T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoucmVhZENzdj1KLmNyZWF0ZUNzdj1KLnVwZGF0ZUNzdj1KLmdldExpbmVFbmRpbmc9Si50ZXN0RmlsZVJlZ0V4cD1KLmlzVGVzdEZpbGU9Si5nZXRSZWFsUGF0aD1KLmJhc2U2NEVuY29kZUZpbGU9Si5iYXNlNjRFbmNvZGVJ''@;'; put 'put ''bWFnZUZpbGU9Si5jb3B5PUoucGF0aFNlcEVzY2FwZWQ9Si5tb3ZlRmlsZT1KLnVuaWZ5RmlsZVBhdGg9Si5nZXRSZWxhdGl2ZVBhdGg9Si5kZWxldGVGb2xkZXI9Si5kZWxldGVGaWxlPUouY3JlYXRlV3JpdGVTdHJlYW09Si5jcmVhdGVSZWFkU3RyZWFtPUouY3JlYXRlRm9sZGVyPUouY3Jl''@;'; put 'put ''YXRlRmlsZT1KLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1KLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Si5saXN0U2FzRmlsZXNJbkZvbGRlcj1KLmxpc3RJbmlGaWxlc0luRm9sZGVyPUoubGlzdEZpbGVzSW5Gb2xkZXI9Si5yZWFkRmlsZUJpbmFyeT1KLnJlYWRGaWxlPUouaXNG''@;'; put 'put ''b2xkZXI9Si5mb2xkZXJFeGlzdHM9Si5maWxlRXhpc3RzPXZvaWQgMDt2YXIgcD1iKDE1NTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJmaWxlRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShKLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiaXNGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzRm9sZGVyfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShKLCJyZWFkRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAucmVhZEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInJlYWRGaWxlQmluYXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5yZWFk''@;'; put 'put ''RmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdEZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIs''@;'; put 'put ''e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdEluaUZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImxpc3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0U2FzRmlsZXNJbkZv''@;'; put 'put ''bGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibGlzdEZpbGVzQW5kU3ViRm9s''@;'; put 'put ''ZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImNyZWF0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNy''@;'; put 'put ''ZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImNyZWF0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5jcmVhdGVSZWFkU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjcmVhdGVXcml0ZVN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KEosImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImRlbGV0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVsZXRlRm9sZGVyfX0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZXRSZWxhdGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldFJlbGF0aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHAudW5pZnlGaWxlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwibW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLm1vdmVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJwYXRoU2VwRXNjYXBlZCIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAucGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImNvcHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImJhc2U2NEVuY29k''@;'; put 'put ''ZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJiYXNlNjRFbmNvZGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5iYXNlNjRF''@;'; put 'put ''bmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZXRSZWFsUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBwLmlzVGVzdEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInRlc3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC50ZXN0RmlsZVJlZ0V4cH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZ2V0TGluZUVuZGlu''@;'; put 'put ''ZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0TGluZUVuZGluZ319KTt2YXIgTj1iKDM5MDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1cGRhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnVwZGF0ZUNzdn19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoSiwiY3JlYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTi5jcmVhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosInJlYWRDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnJlYWRDc3Z9''@;'; put 'put ''fSksXyhiKDU2MjYpLEopfSwyNzc3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm5ld0xpbmU9Si5jYXBpdGFsaXplRmlyc3RDaGFyPUouc2FuaXRpemVTcGVjaWFsQ2hhcnM9Si5wYWRXaXRoTnVtYmVy''@;'; put 'put ''PXZvaWQgMDt2YXIgRD1iKDUzMDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJwYWRXaXRoTnVtYmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5wYWRXaXRoTnVtYmVyfX0pO3ZhciBfPWIoOTI3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosInNhbml0aXpl''@;'; put 'put ''U3BlY2lhbENoYXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zYW5pdGl6ZVNwZWNpYWxDaGFyc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiY2FwaXRhbGl6ZUZpcnN0Q2hhciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uY2Fw''@;'; put 'put ''aXRhbGl6ZUZpcnN0Q2hhcn19KTt2YXIgcD1iKDE2MjgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJuZXdMaW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5uZXdMaW5lfX0pfSw1MzA2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5wYWRXaXRoTnVtYmVyPXZvaWQgMCxKLnBhZFdpdGhOdW1iZXI9KEQsXz0wKT0+RD45P0Q6YCR7X30ke0R9YH0sMTYyODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLm5ld0xpbmU9dm9pZCAwLEoubmV3TGluZT0oKT0+IndpbjMyIj09PUQucGxhdGZvcm0/IlxcclxcbiI6IlxcbiJ9LDkyNzU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxKLmNhcGl0YWxpemVGaXJzdENoYXI9Si5zYW5pdGl6ZVNwZWNpYWxDaGFycz12b2lkIDAsSi5zYW5pdGl6ZVNwZWNpYWxDaGFycz1fPT5fLnJlcGxhY2UoL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9Pjxd''@;'; put 'put ''L2csIiIpLEouY2FwaXRhbGl6ZUZpcnN0Q2hhcj1fPT5fLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK18uc2xpY2UoMSl9LDY0Njc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEgpe3JldHVybiBIJiZILl9f''@;'; put 'put ''ZXNNb2R1bGU/SDp7ZGVmYXVsdDpIfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNTcGVjaWFsTWlzc2luZz1KLmNob2ljZVZhbGlkYXRvcj1KLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1KLnVybFZhbGlkYXRvcj12b2lkIDA7Y29uc3QgXz1E''@;'; put 'put ''KGIoNDgxKSk7Si51cmxWYWxpZGF0b3I9KEgsUik9PiEhXy5kZWZhdWx0LmlzSHR0cFVyaShIKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShIKXx8IiI9PT1IfHxSLEouY29uZmlybWF0aW9uVmFsaWRhdG9yPUg9PiEwPT09SHx8ITE9PT1ILEouY2hvaWNlVmFsaWRhdG9yPShILFIsaik9Pkg+''@;'; put 'put ''MCYmSDw9Unx8aixKLmlzU3BlY2lhbE1pc3Npbmc9SD0+KCJzdHJpbmciIT10eXBlb2YgSHx8IUguaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChIKX0sNzc1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0ZVRpbWVzdGFtcD1KLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9Si5jb252ZXJ0U2Vjb25kc1RvSG1zPXZvaWQgMDt2YXIgRD1iKDEzMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJjb252ZXJ0U2Vjb25kc1Rv''@;'; put 'put ''SG1zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5jb252ZXJ0U2Vjb25kc1RvSG1zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ0aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC50aW1lc3Rh''@;'; put 'put ''bXBUb1lZWVlNTURESEhNTVNTfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJnZW5lcmF0ZVRpbWVzdGFtcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuZ2VuZXJhdGVUaW1lc3RhbXB9fSl9LDEzMDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouY29udmVydFNlY29uZHNUb0htcz1KLmdlbmVyYXRlVGltZXN0YW1wPUoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7Y29uc3QgRD1iKDI3NzcpO0oudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz0odz1E''@;'; put 'put ''YXRlLm5vdygpKT0+e2NvbnN0IEY9bmV3IERhdGUodyk7cmV0dXJuW0YuZ2V0RnVsbFllYXIoKSwoMCxELnBhZFdpdGhOdW1iZXIpKEYuZ2V0TW9udGgoKSsxKSwoMCxELnBhZFdpdGhOdW1iZXIpKEYuZ2V0RGF0ZSgpKV0uam9pbigiLyIpKyIgIitbKDAsRC5wYWRXaXRoTnVtYmVyKShGLmdl''@;'; put 'put ''dEhvdXJzKCkpLCgwLEQucGFkV2l0aE51bWJlcikoRi5nZXRNaW51dGVzKCkpLCgwLEQucGFkV2l0aE51bWJlcikoRi5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iil9LEouZ2VuZXJhdGVUaW1lc3RhbXA9KHc9IiIsRik9Pntjb25zdCBIPW5ldyBEYXRlO2xldCBSPVtILmdldFVUQ0Z1bGxZZWFy''@;'; put 'put ''KCksSC5nZXRVVENNb250aCgpKzEsSC5nZXRVVENEYXRlKCksSC5nZXRVVENIb3VycygpLEguZ2V0VVRDTWludXRlcygpLEguZ2V0VVRDU2Vjb25kcygpXTtyZXR1cm4gUj1SLm1hcChqPT4oMCxELnBhZFdpdGhOdW1iZXIpKGopKSxGJiZ3JiZGPFIubGVuZ3RoJiZGPj0wJiZSLnNwbGljZShG''@;'; put 'put ''LDAsdyksUj1SLmpvaW4oRj8iIjp3KSxSfSxKLmNvbnZlcnRTZWNvbmRzVG9IbXM9dz0+e2lmKCF3KXJldHVybiIwIHNlY29uZCI7Y29uc3QgRj1NYXRoLmZsb29yKHcvNjApLEg9TWF0aC5mbG9vcihGLzYwKSxSPUYlNjAsaj13JTYwO2xldCBQPSIiO3JldHVybiBIPjAmJihQPUgrIiBob3Vy''@;'; put 'put ''IisoSD4xPyJzIjoiIikpLFI+MCYmKFArPWAke1A/IiwgIjoiIn0ke1J9IG1pbnV0ZSR7Uj4xPyJzIjoiIn1gKSxqPjAmJihQKz1gJHtQPyIsICI6IiJ9JHtqfSBzZWNvbmQke2o+MT8icyI6IiJ9YCksUH19LDgyMzk6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkNvbmZpZ1R5cGVzPXZvaWQgMCwoRD1KLkNvbmZpZ1R5cGVzfHwoSi5Db25maWdUeXBlcz17fSkpLkJ1aWxkPSJidWlsZENvbmZpZyIsRC5TZXJ2aWNlPSJzZXJ2aWNlQ29uZmlnIixELkpvYj0iam9iQ29uZmlnIixELlRlc3Q9''@;'; put 'put ''InRlc3RDb25maWciLEQuRG9jPSJkb2NDb25maWciLEQuRGVwbG95PSJkZXBsb3lDb25maWciLEQuU3RyZWFtPSJzdHJlYW1Db25maWciLEQuQXV0aD0iYXV0aENvbmZpZyJ9LDI0Mjc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sMTg5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM2OTI6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s''@;'; put 'put ''NDcyOTooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIEQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouTGluZUVuZGluZ3M9dm9pZCAwLChEPUouTGluZUVuZGluZ3N8fChKLkxpbmVFbmRpbmdzPXt9KSkuQ1JMRj0iXHJcbiIsRC5MRj0iXG4ifSw2''@;'; put 'put ''OTM5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5NZW1iZXJUeXBlPXZvaWQgMCwoRD1KLk1lbWJlclR5cGV8fChKLk1lbWJlclR5cGU9e30pKS5zZXJ2aWNlPSJzZXJ2aWNlIixELmZpbGU9ImZp''@;'; put 'put ''bGUiLEQuZm9sZGVyPSJmb2xkZXIifSwzMzI3OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDUxNjU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KX0sMzkwMDpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsRix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTlt3XX19KX06ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dykscFtGXT1OW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocCxOKXtmb3IodmFyIHcgaW4gcCkiZGVmYXVsdCIhPT13JiYhT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sdykmJkQoTixwLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyhiKDgyMzkpLEopLF8oYigyNDI3KSxKKSxfKGIoMTg5KSxKKSxfKGIoMzY5MiksSiksXyhiKDY5MzkpLEopLF8oYigz''@;'; put 'put ''MzI3KSxKKSxfKGIoNTE2NSksSiksXyhiKDQwNjkpLEopLF8oYig4OTMyKSxKKSxfKGIoNCksSiksXyhiKDIwMTUpLEopLF8oYig4NTE1KSxKKSxfKGIoNTMxMyksSiksXyhiKDg5NzkpLEopLF8oYig0NzI5KSxKKX0sNDA2OTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNNYWNyb1ZhcnM9dm9pZCAwLEouaXNNYWNyb1ZhcnM9RD0+RCYmIm9iamVjdCI9PXR5cGVvZiBELm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoRC5tYWNyb1ZhcnMpfSw4OTMyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlNBU0pzRmlsZVR5cGU9dm9pZCAwLChEPUouU0FTSnNGaWxlVHlw''@;'; put 'put ''ZXx8KEouU0FTSnNGaWxlVHlwZT17fSkpLnNlcnZpY2U9IlNlcnZpY2UiLEQuam9iPSJKb2IiLEQudGVzdD0iVGVzdCIsRC5maWxlPSJGaWxlIn0sMjAxNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1''@;'; put 'put ''OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TZXJ2ZXJUeXBlPXZvaWQgMCwoRD1KLlNlcnZlclR5cGV8fChKLlNlcnZlclR5cGU9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixELlNhczk9IlNBUzki''@;'; put 'put ''LEQuU2FzanM9IlNBU0pTIn0sNTMxMzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4OTc5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KSxKLlRhcmdldD12b2lkIDA7Y29uc3QgRD1iKDgyMzkpLF89Yig4NTE1KSxwPWIoNjc4MSk7Si5UYXJnZXQ9Y2xhc3MgTntjb25zdHJ1Y3RvcihGLEg9e30pe3RoaXMuX3NlcnZlclR5cGU9Xy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsdGhpcy5nZXRDb25maWc9KFIsaik9Pk9iamVjdC5h''@;'; put 'put ''c3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLl9jb25maWdbUl18fHt9KSxqW1JdKTt0cnl7aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldDogSW5wdXQgSlNPTiBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTt0aGlzLl9jb25maWc9SCx0aGlzLl9uYW1lPSgwLHAudmFsaWRh''@;'; put 'put ''dGVUYXJnZXROYW1lKShGLm5hbWUpLHRoaXMuX3NlcnZlclVybD0oMCxwLnZhbGlkYXRlU2VydmVyVXJsKShGLnNlcnZlclVybCksdGhpcy5fc2VydmVyVHlwZT0oMCxwLnZhbGlkYXRlU2VydmVyVHlwZSkoRi5zZXJ2ZXJUeXBlKSx0aGlzLl9odHRwc0FnZW50T3B0aW9ucz0oMCxwLnZhbGlk''@;'; put 'put ''YXRlSHR0cHNBZ2VudE9wdGlvbnMpKEYuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuX2FwcExvYz0oMCxwLnZhbGlkYXRlQXBwTG9jKShGLmFwcExvYyksdGhpcy5fY29udGV4dE5hbWU9KDAscC52YWxpZGF0ZUNvbnRleHROYW1lKShGLmNvbnRleHROYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRo''@;'; put 'put ''aXMuX3NlcnZlck5hbWU9KDAscC52YWxpZGF0ZVNlcnZlck5hbWUpKEYuc2VydmVyTmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zeW5jRm9sZGVyPSgwLHAudmFsaWRhdGVTeW5jRm9sZGVyKShGLnN5bmNGb2xkZXIpLHRoaXMuX3JlcG9zaXRvcnlOYW1lPSgwLHAudmFsaWRhdGVSZXBv''@;'; put 'put ''c2l0b3J5TmFtZSkoRi5yZXBvc2l0b3J5TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSxGLmRvY0NvbmZpZyYmKHRoaXMuX2RvY0NvbmZpZz0oMCxwLnZhbGlkYXRlRG9jQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkRvYyxGKSkpLEYuYXV0aENvbmZpZyYmKHRoaXMuX2F1dGhD''@;'; put 'put ''b25maWc9KDAscC52YWxpZGF0ZUF1dGhDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEQuQ29uZmlnVHlwZXMuQXV0aCxGKSkpLEYuYXV0aENvbmZpZ1NhczkmJih0aGlzLl9hdXRoQ29uZmlnU2FzOT0oMCxwLnZhbGlkYXRlQXV0aENvbmZpZ1NhczkpKEYuYXV0aENvbmZpZ1NhczkpKSxGLmJ1aWxk''@;'; put 'put ''Q29uZmlnJiYodGhpcy5fYnVpbGRDb25maWc9KDAscC52YWxpZGF0ZUJ1aWxkQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkJ1aWxkLEYpLHRoaXMuX25hbWUpKSx0aGlzLl9kZXBsb3lDb25maWc9KDAscC52YWxpZGF0ZURlcGxveUNvbmZpZykoRi5kZXBsb3lDb25maWc/''@;'; put 'put ''dGhpcy5nZXRDb25maWcoRC5Db25maWdUeXBlcy5EZXBsb3ksRik6e2RlcGxveVNlcnZpY2VQYWNrOiEwLGRlcGxveVNjcmlwdHM6W119KSxGLnNlcnZpY2VDb25maWcmJih0aGlzLl9zZXJ2aWNlQ29uZmlnPSgwLHAudmFsaWRhdGVTZXJ2aWNlQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNv''@;'; put 'put ''bmZpZ1R5cGVzLlNlcnZpY2UsRikpKSxGLmpvYkNvbmZpZyYmKHRoaXMuX2pvYkNvbmZpZz0oMCxwLnZhbGlkYXRlSm9iQ29uZmlnKSh0aGlzLmdldENvbmZpZyhELkNvbmZpZ1R5cGVzLkpvYixGKSkpLEYuc3RyZWFtQ29uZmlnJiYodGhpcy5fc3RyZWFtQ29uZmlnPSgwLHAudmFsaWRhdGVT''@;'; put 'put ''dHJlYW1Db25maWcpKHRoaXMuZ2V0Q29uZmlnKEQuQ29uZmlnVHlwZXMuU3RyZWFtLEYpKSksRi50ZXN0Q29uZmlnJiYodGhpcy5fdGVzdENvbmZpZz0oMCxwLnZhbGlkYXRlVGVzdENvbmZpZykodGhpcy5nZXRDb25maWcoRC5Db25maWdUeXBlcy5UZXN0LEYpKSksRi5tYWNyb0ZvbGRlcnMm''@;'; put 'put ''JkYubWFjcm9Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX21hY3JvRm9sZGVycz1GLm1hY3JvRm9sZGVycyksRi5wcm9ncmFtRm9sZGVycyYmRi5wcm9ncmFtRm9sZGVycy5sZW5ndGgmJih0aGlzLl9wcm9ncmFtRm9sZGVycz1GLnByb2dyYW1Gb2xkZXJzKSxGLmJpbmFyeUZvbGRlcnMmJkYuYmlu''@;'; put 'put ''YXJ5Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9iaW5hcnlGb2xkZXJzPUYuYmluYXJ5Rm9sZGVycyksRi5zeW5jRGlyZWN0b3JpZXMmJkYuc3luY0RpcmVjdG9yaWVzLmxlbmd0aCYmKHRoaXMuX3N5bmNEaXJlY3Rvcmllcz0oMCxwLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzKShGLnN5bmNEaXJl''@;'; put 'put ''Y3RvcmllcykpLEYuc2FzanNCdWlsZEZvbGRlciYmKHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXI9KDAscC52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXIpKEYuc2FzanNCdWlsZEZvbGRlcikpLEYuc2FzanNSZXN1bHRzRm9sZGVyJiYodGhpcy5fc2FzanNSZXN1bHRzRm9sZGVyPSgwLHAudmFsaWRh''@;'; put 'put ''dGVTYXNqc1Jlc3VsdHNGb2xkZXIpKEYuc2FzanNSZXN1bHRzRm9sZGVyKSl9Y2F0Y2goUil7dGhyb3cgbmV3IEVycm9yKGBFcnJvciBwYXJzaW5nIHRhcmdldDogJHtSLm1lc3NhZ2V9YCl9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9Z2V0IHNlcnZlclVybCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9zZXJ2ZXJVcmx9Z2V0IHNlcnZlclR5cGUoKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX1nZXQgaHR0cHNBZ2VudE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5faHR0cHNBZ2VudE9wdGlvbnN9Z2V0IGFwcExvYygpe3JldHVybiB0aGlzLl9hcHBMb2N9Z2V0IGRvY0NvbmZpZygpe3JldHVybiB0''@;'; put 'put ''aGlzLl9kb2NDb25maWd9Z2V0IGF1dGhDb25maWcoKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ31nZXQgYXV0aENvbmZpZ1NhczkoKXtyZXR1cm4gdGhpcy5fYXV0aENvbmZpZ1Nhczl9Z2V0IGJ1aWxkQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2J1aWxkQ29uZmlnfWdldCBkZXBsb3lDb25maWco''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZGVwbG95Q29uZmlnfWdldCBzZXJ2aWNlQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3NlcnZpY2VDb25maWd9Z2V0IGpvYkNvbmZpZygpe3JldHVybiB0aGlzLl9qb2JDb25maWd9Z2V0IHN0cmVhbUNvbmZpZygpe3JldHVybiB0aGlzLl9zdHJlYW1Db25maWd9Z2V0IG1h''@;'; put 'put ''Y3JvRm9sZGVycygpe3JldHVybiB0aGlzLl9tYWNyb0ZvbGRlcnN9Z2V0IHByb2dyYW1Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xkZXJzfWdldCBiaW5hcnlGb2xkZXJzKCl7cmV0dXJuIHRoaXMuX2JpbmFyeUZvbGRlcnN9Z2V0IGNvbnRleHROYW1lKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NvbnRleHROYW1lfWdldCBzZXJ2ZXJOYW1lKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9Z2V0IHJlcG9zaXRvcnlOYW1lKCl7cmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlOYW1lfWdldCB0ZXN0Q29uZmlnKCl7cmV0dXJuIHRoaXMuX3Rlc3RDb25maWd9Z2V0IHN5bmNGb2xkZXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fc3luY0ZvbGRlcn1nZXQgc3luY0RpcmVjdG9yaWVzKCl7cmV0dXJuIHRoaXMuX3N5bmNEaXJlY3Rvcmllc31nZXQgc2FzanNCdWlsZEZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc0J1aWxkRm9sZGVyfWdldCBzYXNqc1Jlc3VsdHNGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2Fz''@;'; put 'put ''anNSZXN1bHRzRm9sZGVyfXRvSnNvbihGPSEwKXt2YXIgSCxSLGo7Y29uc3QgUD17bmFtZTp0aGlzLm5hbWUsc2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHNlcnZlclR5cGU6dGhpcy5zZXJ2ZXJUeXBlLGh0dHBzQWdlbnRPcHRpb25zOnRoaXMuaHR0cHNBZ2VudE9wdGlvbnMsYXBwTG9jOnRo''@;'; put 'put ''aXMuYXBwTG9jLGRvY0NvbmZpZzp0aGlzLmRvY0NvbmZpZyxkZXBsb3lDb25maWc6dGhpcy5kZXBsb3lDb25maWd9O3JldHVybiEobnVsbD09PShIPXRoaXMubWFjcm9Gb2xkZXJzKXx8dm9pZCAwPT09SCkmJkgubGVuZ3RoJiYoUC5tYWNyb0ZvbGRlcnM9dGhpcy5tYWNyb0ZvbGRlcnMpLCEo''@;'; put 'put ''bnVsbD09PShSPXRoaXMucHJvZ3JhbUZvbGRlcnMpfHx2b2lkIDA9PT1SKSYmUi5sZW5ndGgmJihQLnByb2dyYW1Gb2xkZXJzPXRoaXMucHJvZ3JhbUZvbGRlcnMpLCEobnVsbD09PShqPXRoaXMuYmluYXJ5Rm9sZGVycyl8fHZvaWQgMD09PWopJiZqLmxlbmd0aCYmKFAuYmluYXJ5Rm9sZGVy''@;'; put 'put ''cz10aGlzLmJpbmFyeUZvbGRlcnMpLHRoaXMuYXV0aENvbmZpZyYmKFAuYXV0aENvbmZpZz10aGlzLmF1dGhDb25maWcpLHRoaXMuYXV0aENvbmZpZ1NhczkmJihQLmF1dGhDb25maWdTYXM5PXRoaXMuYXV0aENvbmZpZ1NhczkpLHRoaXMuc2FzanNCdWlsZEZvbGRlcj9QLnNhc2pzQnVpbGRG''@;'; put 'put ''b2xkZXI9dGhpcy5zYXNqc0J1aWxkRm9sZGVyOkYmJihQLnNhc2pzQnVpbGRGb2xkZXI9cC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUiksdGhpcy5zYXNqc1Jlc3VsdHNGb2xkZXI/UC5zYXNqc1Jlc3VsdHNGb2xkZXI9dGhpcy5zYXNqc1Jlc3VsdHNGb2xkZXI6RiYmKFAuc2FzanNSZXN1''@;'; put 'put ''bHRzRm9sZGVyPXAuREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUiksdGhpcy5zeW5jRGlyZWN0b3JpZXM/UC5zeW5jRGlyZWN0b3JpZXM9dGhpcy5zeW5jRGlyZWN0b3JpZXM6RiYmKFAuc3luY0RpcmVjdG9yaWVzPVtdKSx0aGlzLmJ1aWxkQ29uZmlnP1AuYnVpbGRDb25maWc9dGhpcy5i''@;'; put 'put ''dWlsZENvbmZpZzpGJiYoUC5idWlsZENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsYnVpbGRPdXRwdXRGaWxlTmFtZTpgJHt0aGlzLm5hbWV9LnNhc2AsbWFjcm9WYXJzOnt9fSksdGhpcy5qb2JDb25maWc/UC5qb2JDb25maWc9dGhpcy5qb2JDb25maWc6RiYmKFAuam9i''@;'; put 'put ''Q29uZmlnPXtqb2JGb2xkZXJzOltdLGluaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc2VydmljZUNvbmZpZz9QLnNlcnZpY2VDb25maWc9dGhpcy5zZXJ2aWNlQ29uZmlnOkYmJihQLnNlcnZpY2VDb25maWc9e3NlcnZpY2VGb2xkZXJzOltdLGluaXRQ''@;'; put 'put ''cm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fX0pLHRoaXMuc3RyZWFtQ29uZmlnP1Auc3RyZWFtQ29uZmlnPXRoaXMuc3RyZWFtQ29uZmlnOkYmJihQLnN0cmVhbUNvbmZpZz17c3RyZWFtV2ViRm9sZGVyOiIiLHN0cmVhbVdlYjohMSx3ZWJTb3VyY2VQYXRoOiIiLHN0cmVh''@;'; put 'put ''bVNlcnZpY2VOYW1lOiIiLGFzc2V0UGF0aHM6W119KSx0aGlzLnRlc3RDb25maWc/UC50ZXN0Q29uZmlnPXRoaXMudGVzdENvbmZpZzpGJiYoUC50ZXN0Q29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e30sdGVzdFNldFVwOiIiLHRlc3RUZWFyRG93bjoi''@;'; put 'put ''In0pLHRoaXMuc2VydmVyVHlwZT09PV8uU2VydmVyVHlwZS5TYXNWaXlhP1AuY29udGV4dE5hbWU9dGhpcy5jb250ZXh0TmFtZTp0aGlzLnNlcnZlclR5cGU9PT1fLlNlcnZlclR5cGUuU2FzOSYmKFAuc2VydmVyTmFtZT10aGlzLnNlcnZlck5hbWUsUC5yZXBvc2l0b3J5TmFtZT10aGlzLnJl''@;'; put 'put ''cG9zaXRvcnlOYW1lKSxQfX19LDY3ODE6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGcpe3JldHVybiBnJiZnLl9fZXNNb2R1bGU/Zzp7ZGVmYXVsdDpnfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoudmFsaWRhdGVTYXNqc1Jlc3VsdHNGb2xkZXI9Si52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9Si52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1KLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9Si52YWxpZGF0ZVN5bmNGb2xkZXI9Si52YWxpZGF0ZVNlcnZl''@;'; put 'put ''ck5hbWU9Si52YWxpZGF0ZUNvbnRleHROYW1lPUoudmFsaWRhdGVTdHJlYW1Db25maWc9Si52YWxpZGF0ZURlcGxveUNvbmZpZz1KLnZhbGlkYXRlSm9iQ29uZmlnPUoudmFsaWRhdGVUZXN0Q29uZmlnPUoudmFsaWRhdGVTZXJ2aWNlQ29uZmlnPUoudmFsaWRhdGVCdWlsZENvbmZpZz1KLnZh''@;'; put 'put ''bGlkYXRlQXV0aENvbmZpZ1Nhczk9Si52YWxpZGF0ZUF1dGhDb25maWc9Si52YWxpZGF0ZURvY0NvbmZpZz1KLnZhbGlkYXRlQXBwTG9jPUoudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1KLnZhbGlkYXRlU2VydmVyVXJsPUoudmFsaWRhdGVUYXJnZXROYW1lPUoudmFsaWRhdGVTZXJ2ZXJU''@;'; put 'put ''eXBlPUouREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj1KLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPXZvaWQgMDtjb25zdCBfPUQoYig0ODEpKSxwPWIoMzkwMCk7Si5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj0ic2FzanNidWlsZCIsSi5ERUZBVUxUX1NBU0pTX1JFU1VMVFNf''@;'; put 'put ''Rk9MREVSPSJzYXNqc3Jlc3VsdHMiLEoudmFsaWRhdGVTZXJ2ZXJUeXBlPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoZyE9PXAuU2VydmVyVHlwZS5TYXM5JiZnIT09''@;'; put 'put ''cC5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmchPT1wLlNlcnZlclR5cGUuU2FzanMpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlcnZlciB0eXBlOiBTdXBwb3J0ZWQgdmFsdWVzIGZvciAgXGBzZXJ2ZXJUeXBlXGAgYXJlICR7cC5TZXJ2ZXJUeXBlLlNhc1ZpeWF9LCAke3AuU2VydmVyVHlwZS5T''@;'; put 'put ''YXM5fSBhbmQgJHtwLlNlcnZlclR5cGUuU2FzanN9LmApO3JldHVybiBnfSxKLnZhbGlkYXRlVGFyZ2V0TmFtZT1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihnLnRy''@;'; put 'put ''aW0oKS5pbmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNlcy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KGcpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVg''@;'; put 'put ''IGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTtyZXR1cm4gZ30sSi52YWxpZGF0ZVNlcnZlclVybD1nPT57aWYobnVsbD09ZyYmKGc9IiIpLCIiIT09ZyYmIV8uZGVmYXVsdC5pc0h0dHBVcmkoZykmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShn''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIFVSTDogYHNlcnZlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIik7cmV0dXJuIGd9LEoudmFsaWRh''@;'; put 'put ''dGVIdHRwc0FnZW50T3B0aW9ucz1nPT57aWYoZyl7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGFuIG9iamVjdCBvZiBgSHR0cHNBZ2VudE9wdGlvbnNg''@;'; put 'put ''Iik7aWYobnVsbD09Zy5hbGxvd0luc2VjdXJlUmVxdWVzdHMpZy5hbGxvd0luc2VjdXJlUmVxdWVzdHM9ITE7ZWxzZSBpZigiYm9vbGVhbiIhPXR5cGVvZiBnLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9ucy5h''@;'; put 'put ''bGxvd0luc2VjdXJlUmVxdWVzdHNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYSBib29sZWFuIik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBnLmNhUGF0aCYmKGcuY2FQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBnLmtleVBhdGgmJihnLmtleVBhdGg9dm9pZCAwKSwic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGcuY2VydFBhdGgmJihnLmNlcnRQYXRoPXZvaWQgMCksZ319LEoudmFsaWRhdGVBcHBMb2M9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYo''@;'; put 'put ''IWcuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBhIGAvYC4iKTtyZXR1cm4gZ30sSi52YWxpZGF0ZURvY0NvbmZpZz1nPT57aWYoZ3x8KGc9e30pLCJib29sZWFuIiE9dHlwZW9mIGcuZGlzcGxh''@;'; put 'put ''eU1hY3JvQ29yZSYmKGcuZGlzcGxheU1hY3JvQ29yZT12b2lkIDApLCJib29sZWFuIiE9dHlwZW9mIGcuZW5hYmxlTGluZWFnZSYmKGcuZW5hYmxlTGluZWFnZT12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgZy5vdXREaXJlY3RvcnkmJihnLm91dERpcmVjdG9yeT12b2lkIDApLCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgZy5kYXRhQ29udHJvbGxlclVybCl7aWYoIiIhPT1nLmRhdGFDb250cm9sbGVyVXJsJiYhXy5kZWZhdWx0LmlzSHR0cFVyaShnLmRhdGFDb250cm9sbGVyVXJsKSYmIV8uZGVmYXVsdC5pc0h0dHBzVXJpKGcuZGF0YUNvbnRyb2xsZXJVcmwpKXRocm93IG5ldyBFcnJvcigiSW52''@;'; put 'put ''YWxpZCBEYXRhIENvbnRyb2xsZXIgVXJsOiBgZGF0YUNvbnRyb2xsZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpfWVsc2UgZy5kYXRhQ29udHJvbGxlclVy''@;'; put 'put ''bD12b2lkIDA7cmV0dXJuIGd9LEoudmFsaWRhdGVBdXRoQ29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnfSxKLnZhbGlkYXRlQXV0aENvbmZpZ1Nhczk9Zz0+e2lm''@;'; put 'put ''KCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWcudXNlck5hbWV8fCFnLnBhc3N3b3JkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNl''@;'; put 'put ''ck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4gZ30sSi52YWxpZGF0ZUJ1aWxkQ29uZmlnPShnLHkpPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJu''@;'; put 'put ''IGcuYnVpbGRPdXRwdXRGaWxlTmFtZXx8KGcuYnVpbGRPdXRwdXRGaWxlTmFtZT1gJHt5fS5zYXNgKSxnLmluaXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcudGVybVByb2dyYW09IiIpLGcubWFjcm9WYXJzfHwoZy5tYWNyb1ZhcnM9e30pLGd9LEoudmFs''@;'; put 'put ''aWRhdGVTZXJ2aWNlQ29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmljZSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmluaXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcu''@;'; put 'put ''dGVybVByb2dyYW09IiIpLGcuc2VydmljZUZvbGRlcnN8fChnLnNlcnZpY2VGb2xkZXJzPVtdKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnfSxKLnZhbGlkYXRlVGVzdENvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRlc3QgY29uZmlnOiBKU09OIGNh''@;'; put 'put ''bm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5pbml0UHJvZ3JhbXx8KGcuaW5pdFByb2dyYW09IiIpLGcudGVybVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnLnRlc3RTZXRVcHx8KGcudGVzdFNldFVwPSIiKSxn''@;'; put 'put ''LnRlc3RUZWFyRG93bnx8KGcudGVzdFRlYXJEb3duPSIiKSxnfSxKLnZhbGlkYXRlSm9iQ29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgam9iIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuaW5pdFByb2dyYW18fChn''@;'; put 'put ''LmluaXRQcm9ncmFtPSIiKSxnLnRlcm1Qcm9ncmFtfHwoZy50ZXJtUHJvZ3JhbT0iIiksZy5qb2JGb2xkZXJzfHwoZy5qb2JGb2xkZXJzPVtdKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJzPXt9KSxnfSxKLnZhbGlkYXRlRGVwbG95Q29uZmlnPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkludmFsaWQgZGVwbG95IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuZGVwbG95U2VydmljZVBhY2s9ISFnLmRlcGxveVNlcnZpY2VQYWNrLGcuZGVwbG95U2NyaXB0c3x8KGcuZGVwbG95U2NyaXB0cz1bXSksZ30sSi52YWxpZGF0ZVN0cmVh''@;'; put 'put ''bUNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCEwIT09Zy5zdHJlYW1XZWImJiExIT09Zy5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBj''@;'; put 'put ''b25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKGcuc3RyZWFtV2ViJiYhZy5zdHJlYW1XZWJGb2xkZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVs''@;'; put 'put ''bCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKGcuc3RyZWFtV2ViJiYhZy53ZWJTb3VyY2VQYXRoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgd2ViU291cmNlUGF0aGAgc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggdG8geW91ciBm''@;'; put 'put ''cm9udGVuZCBhcHBsaWNhdGlvbiBlZyBidWlsZCwgZGlzdCwgb3Igc3JjLiIpO3JldHVybiBnLnN0cmVhbUxvZ28mJiJzdHJpbmciIT10eXBlb2YgZy5zdHJlYW1Mb2dvJiYoZy5zdHJlYW1Mb2dvPXZvaWQgMCksZy5hc3NldFBhdGhzfHwoZy5hc3NldFBhdGhzPVtdKSxnLnN0cmVhbVNlcnZp''@;'; put 'put ''Y2VOYW1lfHwoZy5zdHJlYW1TZXJ2aWNlTmFtZT0iY2xpY2ttZSIpLGd9LEoudmFsaWRhdGVDb250ZXh0TmFtZT0oZyx5KT0+eSE9PXAuU2VydmVyVHlwZS5TYXNWaXlhfHxnP2c6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsSi52YWxpZGF0ZVNlcnZlck5hbWU9KGcseSk9''@;'; put 'put ''PnkhPT1wLlNlcnZlclR5cGUuU2FzOXx8Zz9nOiJTQVNBcHAiLEoudmFsaWRhdGVTeW5jRm9sZGVyPWc9PntpZigic3RyaW5nIj09dHlwZW9mIGcmJmcpcmV0dXJuIGd9LEoudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT0oZyx5KT0+eSE9PXAuU2VydmVyVHlwZS5TYXM5fHxnP2c6IkZvdW5kYXRp''@;'; put 'put ''b24iLEoudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3JpZXMgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5mb3JFYWNoKHk9PntpZigheS5sb2NhbHx8IXkucmVt''@;'; put 'put ''b3RlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3J5IGNvbmZpZzogdmFsdWVzIG9mIHByb3BlcnR5ICdsb2NhbCcgYW5kICdyZW1vdGUgY2FuIG5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQiKX0pLGd9LEoudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPWc9PntpZigic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7dHlwZW9mIGd9KSBpcyBwcm92aWRlZCBmb3IgcHJvcGVydHkgJ3Nhc2pzQnVpbGRGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBnfHxKLkRFRkFVTFRf''@;'; put 'put ''U0FTSlNfQlVJTERfRk9MREVSfSxKLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPWc9PntpZigic3RyaW5nIiE9dHlwZW9mIGcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2YgdmFsdWUgKCR7dHlwZW9mIGd9KSBpcyBwcm92aWRlZCBmb3IgcHJvcGVydHkgJ3Nhc2pzUmVzdWx0''@;'; put 'put ''c0ZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIGd8fEouREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUn19LDI5Mjc6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVm''@;'; put 'put ''YXVsdHx8ZnVuY3Rpb24oSCl7cmV0dXJuIEgmJkguX19lc01vZHVsZT9IOntkZWZhdWx0Okh9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kZWNvZGVGcm9tQmFzZTY0PUouZW5jb2RlVG9CYXNlNjQ9dm9pZCAwO2NvbnN0IHA9XyhiKDU4MzUp''@;'; put 'put ''KSxOPSJ7c2FzanNfZW5jb2RlZH0iO0ouZW5jb2RlVG9CYXNlNjQ9SD0+e2NvbnN0IFI9cC5kZWZhdWx0LnJhbmRvbUJ5dGVzKDEwMCkudG9TdHJpbmcoImhleCIpLGo9RC5mcm9tKFIrSCkudG9TdHJpbmcoImJhc2U2NCIpO3JldHVybiBOK2p9LEouZGVjb2RlRnJvbUJhc2U2ND1IPT5ILnN0''@;'; put 'put ''YXJ0c1dpdGgoTik/KEg9SC5yZXBsYWNlKC9ee3Nhc2pzX2VuY29kZWR9LywiIiksRC5mcm9tKEgsImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIwMCkpOkh9LDU4MTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLEouYnl0ZXNUb1NpemU9dm9pZCAwLEouYnl0ZXNUb1NpemU9KEQsXz0xLHA9MTA5OTUxMTYyNzc3Nik9PntpZigwPT09RClyZXR1cm4iMCBCIjtEPUQ+cD9wOkQ7Y29uc3QgRj1fPDA/MDpfLEg9TWF0aC5mbG9vcihNYXRoLmxvZyhEKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKEQv''@;'; put 'put ''TWF0aC5wb3coMTAyNCxIKSkudG9GaXhlZChGKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtIXX19LDg2NTM6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmNodW5rPXZvaWQgMCxKLmNodW5rPWZ1''@;'; put 'put ''bmN0aW9uIGIoRCxfPTIyMCl7cmV0dXJuIEQubGVuZ3RoPD1fP1tEXTooRC5tYXRjaChuZXcgUmVnRXhwKCIuezEsIitfKyJ9IiwiZyIpKXx8W10pLmZpbHRlcihwPT4hIXApfX0sNjQ1NzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLEouZGlmZj12b2lkIDAsSi5kaWZmPWZ1bmN0aW9uIGIoRCxfKXtyZXR1cm5bLi4uRC5maWx0ZXIodz0+Im9iamVjdCI9PXR5cGVvZiB3PyFKU09OLnN0cmluZ2lmeShfKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh3KSk6IV8uaW5jbHVkZXModykpLC4uLl8uZmlsdGVy''@;'; put 'put ''KHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoRCkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFELmluY2x1ZGVzKHcpKV19fSwxNTI5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''Si5nZXRFeGVjdXRvclBhdGg9dm9pZCAwO2NvbnN0IGI9e1NBU1ZJWUE6Ii9TQVNKb2JFeGVjdXRpb24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIn07Si5nZXRFeGVjdXRvclBhdGg9Xz0+Xz8oXz1fLnRvVXBwZXJDYXNlKCksYltfXXx8IiIpOiIifSwzMzE2OihjZSxKLGIpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmdldFRyZWVFeGFtcGxlPUouaXNGaWxlVHJlZT12b2lkIDA7Y29uc3QgRD1iKDM5MDApO0ouaXNGaWxlVHJlZT1IPT5IJiZILm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoSC5tZW1iZXJz''@;'; put 'put ''KSYmMD09PUgubWVtYmVycy5maWx0ZXIoUj0+IXAoUikmJiFOKFIpJiYhdyhSKSkubGVuZ3RoO2NvbnN0IHA9SD0+SCYmInN0cmluZyI9PXR5cGVvZiBILm5hbWUmJkgudHlwZT09PUQuTWVtYmVyVHlwZS5zZXJ2aWNlJiYic3RyaW5nIj09dHlwZW9mIEguY29kZSxOPUg9PkgmJiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgSC5uYW1lJiZILnR5cGU9PT1ELk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5cGVvZiBILmNvZGUsdz1IPT5IJiYic3RyaW5nIj09dHlwZW9mIEgubmFtZSYmSC50eXBlPT09RC5NZW1iZXJUeXBlLmZvbGRlciYmSC5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEgubWVtYmVy''@;'; put 'put ''cykmJjA9PT1ILm1lbWJlcnMuZmlsdGVyKFI9PiFwKFIpJiYhTihSKSYmIXcoUikpLmxlbmd0aDtKLmdldFRyZWVFeGFtcGxlPSgpPT4oe21lbWJlcnM6W3tuYW1lOiJqb2JzIix0eXBlOkQuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6ImV4dHJhY3QiLHR5cGU6RC5NZW1iZXJU''@;'; put 'put ''eXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToibWFrZWRhdGExIix0eXBlOkQuTWVtYmVyVHlwZS5zZXJ2aWNlLGNvZGU6IiVwdXQgSGVsbG8gV29ybGQhOyJ9XX1dfV19KX0sNjI2NjpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGlu''@;'; put 'put ''Z3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oUCxMLFksQil7dm9pZCAwPT09QiYmKEI9WSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFAsQix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTFtZXX19KX06ZnVuY3Rpb24oUCxMLFksQil7dm9pZCAwPT09QiYmKEI9WSksUFtC''@;'; put 'put ''XT1MW1ldfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oUCxMKXtmb3IodmFyIFkgaW4gUCkiZGVmYXVsdCIhPT1ZJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsWSkmJkQoTCxQLFkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksSi5jaHVuaz1KLmRpZmY9Si5ieXRlc1RvU2l6ZT1KLmdldEV4ZWN1dG9yUGF0aD1KLmRlY29kZUZyb21CYXNlNjQ9Si5lbmNvZGVUb0Jhc2U2ND1KLnVybE9yaWdpbj1KLmdlbmVyYXRlUGF0aEZvclNhcz1KLmdldE1hY3Jvc1BhdGg9Si5lc2NhcGVXaW5TbGFz''@;'; put 'put ''aGVzPUouaXNMaW51eD1KLmlzV2luZG93cz1KLnVuaXFBcnJheT1KLmFzeW5jRm9yRWFjaD1KLnV1aWR2ND12b2lkIDA7dmFyIHA9YigxMTMxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwidXVpZHY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC51dWlkdjR9fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KEosImFzeW5jRm9yRWFjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuYXN5bmNGb3JFYWNofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1bmlxQXJyYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBwLnVuaXFBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiaXNXaW5kb3dzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc1dpbmRvd3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImlzTGludXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBwLmlzTGludXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImVzY2FwZVdpblNsYXNoZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmVzY2FwZVdpblNsYXNoZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImdldE1hY3Jvc1BhdGgi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldE1hY3Jvc1BhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImdlbmVyYXRlUGF0aEZvclNhcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2VuZXJhdGVQYXRoRm9yU2FzfX0pLF8o''@;'; put 'put ''YigzMzE2KSxKKTt2YXIgTj1iKDk2NTIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJ1cmxPcmlnaW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOLnVybE9yaWdpbn19KTt2YXIgdz1iKDI5MjcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJlbmNvZGVUb0Jhc2U2''@;'; put 'put ''NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZW5jb2RlVG9CYXNlNjR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEosImRlY29kZUZyb21CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmRlY29kZUZyb21CYXNlNjR9fSk7dmFy''@;'; put 'put ''IEY9YigxNTI5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZ2V0RXhlY3V0b3JQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRi5nZXRFeGVjdXRvclBhdGh9fSk7dmFyIEg9Yig1ODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJieXRlc1RvU2l6ZSIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEguYnl0ZXNUb1NpemV9fSk7dmFyIFI9Yig2NDU3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiZGlmZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZGlmZn19KTt2YXIgaj1iKDg2NTMpO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShKLCJjaHVuayIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGouY2h1bmt9fSl9LDk2NTI6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnVybE9yaWdpbj12b2lk''@;'; put 'put ''IDAsSi51cmxPcmlnaW49RD0+e2lmKCIiPT09RClyZXR1cm4gRDtsZXQgXzt0cnl7Xz1uZXcgVVJMKEQpLm9yaWdpbn1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiBffX0sMTEzMTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDQxNTUp''@;'; put 'put ''LHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWixxLFEpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLHJlKXtmdW5jdGlvbiBvZShUZSl7dHJ5e19lKFEubmV4dChUZSkpfWNhdGNoKFNlKXtyZShTZSl9fWZ1bmN0aW9uIGdlKFRlKXt0cnl7X2UoUS50''@;'; put 'put ''aHJvdyhUZSkpfWNhdGNoKFNlKXtyZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3RlKFRlLnZhbHVlKTpmdW5jdGlvbiBYKHRlKXtyZXR1cm4gdGUgaW5zdGFuY2VvZiBxP3RlOm5ldyBxKGZ1bmN0aW9uKHJlKXtyZSh0ZSl9KX0oVGUudmFsdWUpLnRoZW4ob2UsZ2UpfV9lKChRPVEu''@;'; put 'put ''YXBwbHkoVyxafHxbXSkpLm5leHQoKSl9KX0sTj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVyl7cmV0dXJuIFcmJlcuX19lc01vZHVsZT9XOntkZWZhdWx0Old9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0''@;'; put 'put ''ZVBhdGhGb3JTYXM9Si5nZXRNYWNyb3NQYXRoPUouZXNjYXBlV2luU2xhc2hlcz1KLmlzTGludXg9Si5pc1dpbmRvd3M9Si51bmlxQXJyYXk9Si51dWlkdjQ9Si5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9TihiKDI1MjApKTtKLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBGKFcsWil7cmV0''@;'; put 'put ''dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgcT0wO3E8Vy5sZW5ndGg7cSsrKXlpZWxkIFooV1txXSxxLFcpfSl9LEoudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csVz0+e2NvbnN0IFo9''@;'; put 'put ''MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVc/WjozJlp8OCkudG9TdHJpbmcoMTYpfSksSi51bmlxQXJyYXk9Vz0+QXJyYXkuZnJvbShuZXcgU2V0KFcpKSxKLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sSi5pc0xpbnV4PSgpPT4ibGludXgiPT09Xy5wbGF0Zm9y''@;'; put 'put ''bSxKLmVzY2FwZVdpblNsYXNoZXM9Vz0+KDAsSi5pc1dpbmRvd3MpKCk/Vy5yZXBsYWNlKC9cXC9nLCJcXFxcIik6VyxKLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxKLmdlbmVyYXRlUGF0aEZvclNhcz1XPT5XLnJlcGxhY2UoL1xcL2csIi8i''@;'; put 'put ''KX0sOTgwOTooY2UsSixiKT0+e3ZhciBEPUo7RC5iaWdudW09Yig0NTkwKSxELmRlZmluZT1iKDI1MDApLmRlZmluZSxELmJhc2U9YigxOTc5KSxELmNvbnN0YW50cz1iKDY4MjYpLEQuZGVjb2RlcnM9Yig4MzA3KSxELmVuY29kZXJzPWIoNjU3OSl9LDI1MDA6KGNlLEosYik9Pnt2YXIgRD1i''@;'; put 'put ''KDk4MDkpLF89Yig1NzE3KTtmdW5jdGlvbiBOKHcsRil7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PUYsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fUouZGVmaW5lPWZ1bmN0aW9uKEYsSCl7cmV0dXJuIG5ldyBOKEYsSCl9LE4ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlv''@;'; put 'put ''bihGKXt2YXIgSDt0cnl7SD1iKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7SD1mdW5jdGlvbihqKXt0aGlzLl9pbml0TmFtZWQoail9fXJldHVybiBfKEgsRiks''@;'; put 'put ''SC5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihqKXtGLmNhbGwodGhpcyxqKX0sbmV3IEgodGhpcyl9LE4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEY9Rnx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tG''@;'; put 'put ''XT10aGlzLl9jcmVhdGVOYW1lZChELmRlY29kZXJzW0ZdKSksdGhpcy5kZWNvZGVyc1tGXX0sTi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihIKS5kZWNvZGUoRixSKX0sTi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oRil7''@;'; put 'put ''cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoRj1GfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW0ZdPXRoaXMuX2NyZWF0ZU5hbWVkKEQuZW5jb2RlcnNbRl0pKSx0aGlzLmVuY29kZXJzW0ZdfSxOLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRixILFIpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9nZXRFbmNvZGVyKEgpLmVuY29kZShGLFIpfX0sNjYyNTooY2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDE5NzkpLlJlcG9ydGVyLHA9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gTihGLEgpe18uY2FsbCh0aGlzLEgpLHAuaXNCdWZmZXIoRik/KHRoaXMuYmFzZT1GLHRoaXMub2Zmc2V0''@;'; put 'put ''PTAsdGhpcy5sZW5ndGg9Ri5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KEYsSCl7aWYoQXJyYXkuaXNBcnJheShGKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9Ri5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3fHwoUj1uZXcg''@;'; put 'put ''dyhSLEgpKSx0aGlzLmxlbmd0aCs9Ui5sZW5ndGgsUn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIEYpe2lmKCEoMDw9RiYmRjw9MjU1KSlyZXR1cm4gSC5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9Rix0aGlzLmxlbmd0aD0xfWVsc2Ug''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiBGKXRoaXMudmFsdWU9Rix0aGlzLmxlbmd0aD1wLmJ5dGVMZW5ndGgoRik7ZWxzZXtpZighcC5pc0J1ZmZlcihGKSlyZXR1cm4gSC5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgRik7dGhpcy52YWx1ZT1GLHRoaXMubGVuZ3RoPUYubGVuZ3Ro''@;'; put 'put ''fX1EKE4sXyksSi5DPU4sTi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sTi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihIKXt2YXIgUj1uZXcgTih0aGlzLmJhc2UpO3Jl''@;'; put 'put ''dHVybiBSLm9mZnNldD1ILm9mZnNldCxSLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1ILm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxILnJlcG9ydGVyKSxSfSxOLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhp''@;'; put 'put ''cy5sZW5ndGh9LE4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihIKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEh8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sTi5wcm90b3R5''@;'; put 'put ''cGUuc2tpcD1mdW5jdGlvbihILFIpe2lmKCEodGhpcy5vZmZzZXQrSDw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgaj1uZXcgTih0aGlzLmJhc2UpO3JldHVybiBqLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3Rh''@;'; put 'put ''dGUsai5vZmZzZXQ9dGhpcy5vZmZzZXQsai5sZW5ndGg9dGhpcy5vZmZzZXQrSCx0aGlzLm9mZnNldCs9SCxqfSxOLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShIP0gub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sSi5SPXcsdy5wcm90''@;'; put 'put ''b3R5cGUuam9pbj1mdW5jdGlvbihILFIpe3JldHVybiBIfHwoSD1uZXcgcCh0aGlzLmxlbmd0aCkpLFJ8fChSPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKGope2ouam9pbihILFIpLFIrPWoubGVuZ3Ro''@;'; put 'put ''fSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9IW1JdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0gud3JpdGUodGhpcy52YWx1ZSxSKTpwLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoSCxSKSxSKz10aGlzLmxlbmd0aCkpLEh9fSwx''@;'; put 'put ''OTc5OihjZSxKLGIpPT57dmFyIEQ9SjtELlJlcG9ydGVyPWIoODQ2NSkuYixELkRlY29kZXJCdWZmZXI9Yig2NjI1KS5DLEQuRW5jb2RlckJ1ZmZlcj1iKDY2MjUpLlIsRC5Ob2RlPWIoMTk0OSl9LDE5NDk6KGNlLEosYik9Pnt2YXIgRD1iKDE5NzkpLlJlcG9ydGVyLF89YigxOTc5KS5FbmNv''@;'; put 'put ''ZGVyQnVmZmVyLHA9YigxOTc5KS5EZWNvZGVyQnVmZmVyLE49Yig5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJz''@;'; put 'put ''dHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sRj1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNp''@;'; put 'put ''dCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIoUCxMKXt2YXIgWT17fTt0aGlzLl9iYXNlU3RhdGU9WSxZLmVuYz1QLFkucGFyZW50PUx8fG51bGwsWS5jaGlsZHJlbj1udWxsLFkudGFnPW51bGwsWS5hcmdzPW51bGwsWS5yZXZlcnNlQXJn''@;'; put 'put ''cz1udWxsLFkuY2hvaWNlPW51bGwsWS5vcHRpb25hbD0hMSxZLmFueT0hMSxZLm9iaj0hMSxZLnVzZT1udWxsLFkudXNlRGVjb2Rlcj1udWxsLFkua2V5PW51bGwsWS5kZWZhdWx0PW51bGwsWS5leHBsaWNpdD1udWxsLFkuaW1wbGljaXQ9bnVsbCxZLmNvbnRhaW5zPW51bGwsWS5wYXJlbnR8''@;'; put 'put ''fChZLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciBqPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZh''@;'; put 'put ''dWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGUsWT17fTtqLmZvckVhY2goZnVuY3Rpb24oVyl7WVtXXT1MW1ddfSk7dmFyIEI9bmV3IHRoaXMuY29uc3RydWN0b3IoWS5wYXJlbnQp''@;'; put 'put ''O3JldHVybiBCLl9iYXNlU3RhdGU9WSxCfSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZTtGLmZvckVhY2goZnVuY3Rpb24oWSl7dGhpc1tZXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxk''@;'; put 'put ''cmVuLnB1c2goVyksV1tZXS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO04obnVsbD09PVkucGFyZW50KSxMLmNhbGwodGhpcyksWS5jaGlsZHJlbj1ZLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlv''@;'; put 'put ''bihCKXtyZXR1cm4gQi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLE4uZXF1YWwoWS5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX2Jhc2VTdGF0''@;'; put 'put ''ZSxCPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7TD1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PUIubGVuZ3RoJiYoTihudWxsPT09WS5j''@;'; put 'put ''aGlsZHJlbiksWS5jaGlsZHJlbj1CLEIuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09TC5sZW5ndGgmJihOKG51bGw9PT1ZLmFyZ3MpLFkuYXJncz1MLFkucmV2ZXJzZUFyZ3M9TC5tYXAoZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBXfHxXLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBaPXt9O3JldHVybiBPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksWltXW3FdXT1xfSksWn0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29k''@;'; put 'put ''ZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIs''@;'; put 'put ''Il9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oUCl7Ui5wcm90b3R5cGVbUF09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoUCsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKFApe1IucHJvdG90eXBlW1BdPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlLEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTihudWxsPT09WS50YWcpLFkudGFnPVAsdGhpcy5fdXNlQXJncyhCKSx0aGlzfX0pLFIucHJvdG90eXBlLnVz''@;'; put 'put ''ZT1mdW5jdGlvbihMKXtOKEwpO3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gTihudWxsPT09WS51c2UpLFkudXNlPUwsdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LFIucHJvdG90eXBlLmRl''@;'; put 'put ''Zj1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkuZGVmYXVsdCksWS5kZWZhdWx0PUwsWS5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09''@;'; put 'put ''PVkuZXhwbGljaXQmJm51bGw9PT1ZLmltcGxpY2l0KSxZLmV4cGxpY2l0PUwsdGhpc30sUi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmV4cGxpY2l0JiZudWxsPT09WS5pbXBsaWNpdCksWS5pbXBsaWNpdD1M''@;'; put 'put ''LHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxZPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1ZLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhZKSx0aGlzfSxSLnByb3RvdHlwZS5rZXk9''@;'; put 'put ''ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmtleSksWS5rZXk9TCx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7''@;'; put 'put ''dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBOKG51bGw9PT1ZLmNob2ljZSksWS5jaG9pY2U9TCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKEwpLm1hcChmdW5jdGlvbihCKXtyZXR1cm4gTFtCXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihMKXt2YXIgWT10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkudXNlKSxZLmNvbnRhaW5zPUwsdGhpc30sUi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Qi5wYXJlbnQpcmV0dXJuIEwud3JhcFJlc3VsdChCLmNoaWxkcmVuWzBd''@;'; put 'put ''Ll9kZWNvZGUoTCxZKSk7dmFyIHRlLFc9Qi5kZWZhdWx0LFo9ITAscT1udWxsO2lmKG51bGwhPT1CLmtleSYmKHE9TC5lbnRlcktleShCLmtleSkpLEIub3B0aW9uYWwpe3ZhciBRPW51bGw7aWYobnVsbCE9PUIuZXhwbGljaXQ/UT1CLmV4cGxpY2l0Om51bGwhPT1CLmltcGxpY2l0P1E9Qi5p''@;'; put 'put ''bXBsaWNpdDpudWxsIT09Qi50YWcmJihRPUIudGFnKSxudWxsIT09UXx8Qi5hbnkpe2lmKFo9dGhpcy5fcGVla1RhZyhMLFEsQi5hbnkpLEwuaXNFcnJvcihaKSlyZXR1cm4gWn1lbHNle3ZhciBYPUwuc2F2ZSgpO3RyeXtudWxsPT09Qi5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhCLnRh''@;'; put 'put ''ZyxMLFkpOnRoaXMuX2RlY29kZUNob2ljZShMLFkpLFo9ITB9Y2F0Y2h7Wj0hMX1MLnJlc3RvcmUoWCl9fWlmKEIub2JqJiZaJiYodGU9TC5lbnRlck9iamVjdCgpKSxaKXtpZihudWxsIT09Qi5leHBsaWNpdCl7dmFyIHJlPXRoaXMuX2RlY29kZVRhZyhMLEIuZXhwbGljaXQpO2lmKEwuaXNF''@;'; put 'put ''cnJvcihyZSkpcmV0dXJuIHJlO0w9cmV9dmFyIG9lPUwub2Zmc2V0O2lmKG51bGw9PT1CLnVzZSYmbnVsbD09PUIuY2hvaWNlKXtCLmFueSYmKFg9TC5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09Qi5pbXBsaWNpdD9CLmltcGxpY2l0OkIudGFnLEIuYW55KTtpZihM''@;'; put 'put ''LmlzRXJyb3IoZ2UpKXJldHVybiBnZTtCLmFueT9XPUwucmF3KFgpOkw9Z2V9aWYoWSYmWS50cmFjayYmbnVsbCE9PUIudGFnJiZZLnRyYWNrKEwucGF0aCgpLG9lLEwubGVuZ3RoLCJ0YWdnZWQiKSxZJiZZLnRyYWNrJiZudWxsIT09Qi50YWcmJlkudHJhY2soTC5wYXRoKCksTC5vZmZzZXQs''@;'; put 'put ''TC5sZW5ndGgsImNvbnRlbnQiKSxCLmFueXx8KFc9bnVsbD09PUIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoQi50YWcsTCxZKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxZKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFCLmFueSYmbnVsbD09PUIuY2hvaWNlJiZudWxsIT09Qi5jaGls''@;'; put 'put ''ZHJlbiYmQi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsWSl9KSxCLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1CLnRhZ3x8ImJpdHN0ciI9PT1CLnRhZykpe3ZhciBfZT1uZXcgcChXKTtXPXRoaXMuX2dldFVzZShCLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUu''@;'; put 'put ''b2JqKS5fZGVjb2RlKF9lLFkpfX1yZXR1cm4gQi5vYmomJlomJihXPUwubGVhdmVPYmplY3QodGUpKSxudWxsPT09Qi5rZXl8fG51bGw9PT1XJiYhMCE9PVo/bnVsbCE9PXEmJkwuZXhpdEtleShxKTpMLmxlYXZlS2V5KHEsQi5rZXksVyksV30sUi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9''@;'; put 'put ''ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJzZXQiPT09TD9udWxsOiJzZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KFksTCxXLmFyZ3NbMF0sQik6L3N0ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKFksTCxC''@;'; put 'put ''KToib2JqaWQiPT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKFksVy5hcmdzWzBdLFcuYXJnc1sxXSxCKToib2JqaWQiPT09TD90aGlzLl9kZWNvZGVPYmppZChZLG51bGwsbnVsbCxCKToiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoWSxMLEIpOiJu''@;'; put 'put ''dWxsXyI9PT1MP3RoaXMuX2RlY29kZU51bGwoWSxCKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJvb2woWSxCKToib2JqRGVzYyI9PT1MP3RoaXMuX2RlY29kZVN0cihZLEwsQik6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2RlY29kZUludChZLFcuYXJncyYmVy5hcmdzWzBdLEIpOm51''@;'; put 'put ''bGwhPT1XLnVzZT90aGlzLl9nZXRVc2UoVy51c2UsWS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoWSxCKTpZLmVycm9yKCJ1bmtub3duIHRhZzogIitMKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQi51c2VEZWNv''@;'; put 'put ''ZGVyPXRoaXMuX3VzZShMLFkpLE4obnVsbD09PUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksQi51c2VEZWNvZGVyPUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLEIuaW1wbGljaXQhPT1CLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKEIudXNlRGVj''@;'; put 'put ''b2Rlcj1CLnVzZURlY29kZXIuY2xvbmUoKSxCLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1CLmltcGxpY2l0KSxCLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxZKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsVz1udWxsLFo9ITE7cmV0dXJu''@;'; put 'put ''IE9iamVjdC5rZXlzKEIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBRPUwuc2F2ZSgpLFg9Qi5jaG9pY2VbcV07dHJ5e3ZhciB0ZT1YLl9kZWNvZGUoTCxZKTtpZihMLmlzRXJyb3IodGUpKXJldHVybiExO1c9e3R5cGU6cSx2YWx1ZTp0ZX0sWj0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0''@;'; put 'put ''b3JlKFEpLCExfXJldHVybiEwfSx0aGlzKSxaP1c6TC5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LFIucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgXyhMLHRoaXMucmVwb3J0ZXIpfSxSLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9u''@;'; put 'put ''KEwsWSxCKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdHx8Vy5kZWZhdWx0IT09TCl7dmFyIFo9dGhpcy5fZW5jb2RlVmFsdWUoTCxZLEIpO2lmKHZvaWQgMCE9PVomJiF0aGlzLl9za2lwRGVmYXVsdChaLFksQikpcmV0dXJuIFp9fSxSLnByb3RvdHlwZS5fZW5j''@;'; put 'put ''b2RlVmFsdWU9ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5wYXJlbnQpcmV0dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLFl8fG5ldyBEKTt2YXIgWD1udWxsO2lmKHRoaXMucmVwb3J0ZXI9WSxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtpZihu''@;'; put 'put ''dWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcuZGVmYXVsdH12YXIgWj1udWxsLHE9ITE7aWYoVy5hbnkpWD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpWD10aGlzLl9lbmNvZGVDaG9pY2UoTCxZKTtlbHNlIGlmKFcuY29udGFpbnMpWj10aGlzLl9nZXRV''@;'; put 'put ''c2UoVy5jb250YWlucyxCKS5fZW5jb2RlKEwsWSkscT0hMDtlbHNlIGlmKFcuY2hpbGRyZW4pWj1XLmNoaWxkcmVuLm1hcChmdW5jdGlvbihvZSl7aWYoIm51bGxfIj09PW9lLl9iYXNlU3RhdGUudGFnKXJldHVybiBvZS5fZW5jb2RlKG51bGwsWSxMKTtpZihudWxsPT09b2UuX2Jhc2VTdGF0''@;'; put 'put ''ZS5rZXkpcmV0dXJuIFkuZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIGdlPVkuZW50ZXJLZXkob2UuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gWS5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7''@;'; put 'put ''dmFyIF9lPW9lLl9lbmNvZGUoTFtvZS5fYmFzZVN0YXRlLmtleV0sWSxMKTtyZXR1cm4gWS5sZWF2ZUtleShnZSksX2V9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihvZSl7cmV0dXJuIG9lfSksWj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFopO2Vsc2UgaWYoInNlcW9mIj09PVcudGFnfHwi''@;'; put 'put ''c2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8fDEhPT1XLmFyZ3MubGVuZ3RoKXJldHVybiBZLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBZLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7''@;'; put 'put ''dmFyIFE9dGhpcy5jbG9uZSgpO1EuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFo9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKG9lLFkpfSxRKSl9ZWxzZSBu''@;'; put 'put ''dWxsIT09Vy51c2U/WD10aGlzLl9nZXRVc2UoVy51c2UsQikuX2VuY29kZShMLFkpOihaPXRoaXMuX2VuY29kZVByaW1pdGl2ZShXLnRhZyxMKSxxPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIHRlPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcscmU9bnVs''@;'; put 'put ''bD09PVcuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT10ZT9udWxsPT09Vy51c2UmJlkuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKFg9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHRlLHEscmUsWikpfXJldHVy''@;'; put 'put ''biBudWxsIT09Vy5leHBsaWNpdCYmKFg9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFcuZXhwbGljaXQsITEsImNvbnRleHQiLFgpKSxYfSxSLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsWSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlLFc9Qi5jaG9pY2VbTC50eXBlXTtyZXR1cm4g''@;'; put 'put ''V3x8TighMSxMLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhCLmNob2ljZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxZKX0sUi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3Ry''@;'; put 'put ''JC8udGVzdChMKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFksTCk7aWYoIm9iamlkIj09PUwmJkIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWSxCLnJldmVyc2VBcmdzWzBdLEIuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFksbnVsbCxu''@;'; put 'put ''dWxsKTtpZigiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKFksTCk7aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChZLEIuYXJncyYm''@;'; put 'put ''Qi5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChZKTtpZigib2JqRGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWSxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sUi5wcm90b3R5cGUuX2lzTnVtc3Ry''@;'; put 'put ''PWZ1bmN0aW9uKEwpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoTCl9LFIucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NDY1OihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KTtmdW5jdGlv''@;'; put 'put ''biBfKE4pe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpOfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIHAoTix3KXt0aGlzLnBhdGg9Tix0aGlzLnJldGhyb3codyl9Si5iPV8sXy5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0''@;'; put 'put ''YW5jZW9mIHB9LF8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0sXy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgRj10aGlzLl9yZXBvcnRlclN0YXRlO0Yu''@;'; put 'put ''b2JqPXcub2JqLEYucGF0aD1GLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSxfLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LF8ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIEY9dGhpcy5fcmVw''@;'; put 'put ''b3J0ZXJTdGF0ZTtGLnBhdGg9Ri5wYXRoLnNsaWNlKDAsdy0xKX0sXy5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxGLEgpe3ZhciBSPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1SLm9iaiYmKFIub2JqW0ZdPUgpfSxfLnByb3RvdHlwZS5wYXRoPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LF8ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxGPXcub2JqO3JldHVybiB3Lm9iaj17fSxGfSxfLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1m''@;'; put 'put ''dW5jdGlvbih3KXt2YXIgRj10aGlzLl9yZXBvcnRlclN0YXRlLEg9Ri5vYmo7cmV0dXJuIEYub2JqPXcsSH0sXy5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIEYsSD10aGlzLl9yZXBvcnRlclN0YXRlLFI9dyBpbnN0YW5jZW9mIHA7aWYoRj1SP3c6bmV3IHAoSC5wYXRoLm1hcChm''@;'; put 'put ''dW5jdGlvbihqKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoaikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFILm9wdGlvbnMucGFydGlhbCl0aHJvdyBGO3JldHVybiBSfHxILmVycm9ycy5wdXNoKEYpLEZ9LF8ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24o''@;'; put 'put ''dyl7dmFyIEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gRi5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpGLmVycm9yc306d30sRChwLEVycm9yKSxwLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13''@;'; put 'put ''KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHApLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChGKXt0aGlzLnN0YWNrPUYuc3RhY2t9''@;'; put 'put ''cmV0dXJuIHRoaXN9fSwxNjA6KGNlLEosYik9Pnt2YXIgRD1iKDY4MjYpO0oudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxKLnRhZ0NsYXNzQnlOYW1lPUQuX3JldmVyc2UoSi50YWdDbGFzcyksSi50YWc9ezA6ImVuZCIs''@;'; put 'put ''MToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6''@;'; put 'put ''Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9''@;'; put 'put ''LEoudGFnQnlOYW1lPUQuX3JldmVyc2UoSi50YWcpfSw2ODI2OihjZSxKLGIpPT57dmFyIEQ9SjtELl9yZXZlcnNlPWZ1bmN0aW9uKHApe3ZhciBOPXt9O3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksTltwW3ddXT13fSksTn0sRC5k''@;'; put 'put ''ZXI9YigxNjApfSwxNjcxOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoOTgwOSkscD1fLmJhc2UsTj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBGKFApe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1QLm5hbWUsdGhpcy5lbnRpdHk9UCx0aGlzLnRyZWU9bmV3IEgs''@;'; put 'put ''dGhpcy50cmVlLl9pbml0KFAuYm9keSl9ZnVuY3Rpb24gSChQKXtwLk5vZGUuY2FsbCh0aGlzLCJkZXIiLFApfWZ1bmN0aW9uIFIoUCxMKXt2YXIgWT1QLnJlYWRVSW50OChMKTtpZihQLmlzRXJyb3IoWSkpcmV0dXJuIFk7dmFyIEI9dy50YWdDbGFzc1tZPj42XSxXPSEoMzImWSk7aWYoMzEm''@;'; put 'put ''flkpWSY9MzE7ZWxzZXt2YXIgWj1ZO2ZvcihZPTA7ISgxMjgmflopOyl7aWYoWj1QLnJlYWRVSW50OChMKSxQLmlzRXJyb3IoWikpcmV0dXJuIFo7WTw8PTcsWXw9MTI3Jlp9fXJldHVybntjbHM6QixwcmltaXRpdmU6Vyx0YWc6WSx0YWdTdHI6dy50YWdbWV19fWZ1bmN0aW9uIGooUCxMLFkp''@;'; put 'put ''e3ZhciBCPVAucmVhZFVJbnQ4KFkpO2lmKFAuaXNFcnJvcihCKSlyZXR1cm4gQjtpZighTCYmMTI4PT09QilyZXR1cm4gbnVsbDtpZighKDEyOCZCKSlyZXR1cm4gQjt2YXIgVz0xMjcmQjtpZihXPjQpcmV0dXJuIFAuZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtCPTA7Zm9y''@;'; put 'put ''KHZhciBaPTA7WjxXO1orKyl7Qjw8PTg7dmFyIHE9UC5yZWFkVUludDgoWSk7aWYoUC5pc0Vycm9yKHEpKXJldHVybiBxO0J8PXF9cmV0dXJuIEJ9Y2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLFkpe3JldHVybiBMIGluc3RhbmNlb2YgcC5EZWNvZGVyQnVmZmVy''@;'; put 'put ''fHwoTD1uZXcgcC5EZWNvZGVyQnVmZmVyKEwsWSkpLHRoaXMudHJlZS5fZGVjb2RlKEwsWSl9LEQoSCxwLk5vZGUpLEgucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsWSxCKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxaPVIoTCwnRmFpbGVkIHRvIHBlZWsg''@;'; put 'put ''dGFnOiAiJytZKyciJyk7cmV0dXJuIEwuaXNFcnJvcihaKT9aOihMLnJlc3RvcmUoVyksWi50YWc9PT1ZfHxaLnRhZ1N0cj09PVl8fFoudGFnU3RyKyJvZiI9PT1ZfHxCKX0sSC5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLFksQil7dmFyIFc9UihMLCdGYWlsZWQgdG8gZGVjb2Rl''@;'; put 'put ''IHRhZyBvZiAiJytZKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBaPWooTCxXLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrWSsnIicpO2lmKEwuaXNFcnJvcihaKSlyZXR1cm4gWjtpZighQiYmVy50YWchPT1ZJiZXLnRhZ1N0ciE9PVkmJlcudGFnU3Ry''@;'; put 'put ''KyJvZiIhPT1ZKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytZKyciJyk7aWYoVy5wcmltaXRpdmV8fG51bGwhPT1aKXJldHVybiBMLnNraXAoWiwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1krJyInKTt2YXIgcT1MLnNhdmUoKSxRPXRoaXMuX3NraXBVbnRp''@;'; put 'put ''bEVuZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBMLmlzRXJyb3IoUSk/UTooWj1MLm9mZnNldC1xLm9mZnNldCxMLnJlc3RvcmUocSksTC5za2lwKFosJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytZKyciJykp''@;'; put 'put ''fSxILnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsWSl7Zm9yKDs7KXt2YXIgQj1SKEwsWSk7aWYoTC5pc0Vycm9yKEIpKXJldHVybiBCO3ZhciBaLFc9aihMLEIucHJpbWl0aXZlLFkpO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihaPUIucHJpbWl0aXZlfHxudWxsIT09''@;'; put 'put ''Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsWSksTC5pc0Vycm9yKFopKXJldHVybiBaO2lmKCJlbmQiPT09Qi50YWdTdHIpYnJlYWt9fSxILnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLFksQixXKXtmb3IodmFyIFo9W107IUwuaXNFbXB0eSgpOyl7dmFyIHE9dGhp''@;'; put 'put ''cy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IocSkpcmV0dXJuIHE7dmFyIFE9Qi5kZWNvZGUoTCwiZGVyIixXKTtpZihMLmlzRXJyb3IoUSkmJnEpYnJlYWs7Wi5wdXNoKFEpfXJldHVybiBafSxILnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsWSl7aWYoImJpdHN0ciI9''@;'; put 'put ''PT1ZKXt2YXIgQj1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoQik/Qjp7dW51c2VkOkIsZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PVkpe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0''@;'; put 'put ''ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFo9IiIscT0wO3E8Vy5sZW5ndGgvMjtxKyspWis9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gWn1pZigibnVtc3RyIj09PVkpe3ZhciBRPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2lzTnVtc3RyKFEpP1E6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1ZKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PVkpcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PVkp''@;'; put 'put ''e3ZhciBYPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoWCk/WDpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KFkpP0wucmF3KCkudG9TdHJp''@;'; put 'put ''bmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitZKyIgdW5zdXBwb3J0ZWQiKX0sSC5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsWSxCKXtmb3IodmFyIFcsWj1bXSxxPTA7IUwuaXNFbXB0eSgpOyl7dmFyIFE9TC5yZWFkVUludDgoKTtxPDw9NyxxfD0x''@;'; put 'put ''MjcmUSwxMjgmUXx8KFoucHVzaChxKSxxPTApfWlmKDEyOCZRJiZaLnB1c2gocSksVz1CP1o6W1pbMF0vNDB8MCxaWzBdJTQwXS5jb25jYXQoWi5zbGljZSgxKSksWSl7dmFyIHJlPVlbVy5qb2luKCIgIildO3ZvaWQgMD09PXJlJiYocmU9WVtXLmpvaW4oIi4iKV0pLHZvaWQgMCE9PXJlJiYo''@;'; put 'put ''Vz1yZSl9cmV0dXJuIFd9LEgucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsWSl7dmFyIEI9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PVkpdmFyIFc9MHxCLnNsaWNlKDAsNCksWj0wfEIuc2xpY2UoNCw2KSxxPTB8Qi5zbGljZSg2LDgpLFE9MHxCLnNsaWNlKDgs''@;'; put 'put ''MTApLFg9MHxCLnNsaWNlKDEwLDEyKSx0ZT0wfEIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09WSlyZXR1cm4gTC5lcnJvcigiRGVjb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO1c9MHxCLnNsaWNlKDAsMiksWj0wfEIuc2xpY2UoMiw0KSxxPTB8Qi5z''@;'; put 'put ''bGljZSg0LDYpLFE9MHxCLnNsaWNlKDYsOCksWD0wfEIuc2xpY2UoOCwxMCksdGU9MHxCLnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFotMSxxLFEsWCx0ZSwwKX0sSC5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTCl7cmV0dXJuIG51''@;'; put 'put ''bGx9LEgucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBZPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOjAhPT1ZfSxILnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEwsWSl7dmFyIEI9TC5yYXcoKSxXPW5ldyBOKEIpO3JldHVybiBZJiYoVz1Z''@;'; put 'put ''W1cudG9TdHJpbmcoMTApXXx8VyksV30sSC5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihMLFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKFkpKSxMLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzooY2UsSixiKT0+e3ZhciBEPUo7RC5kZXI9YigxNjcxKSxELnBlbT1i''@;'; put 'put ''KDk2MzEpfSw5NjMxOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoODc2NCkuQnVmZmVyLHA9YigxNjcxKTtmdW5jdGlvbiBOKHcpe3AuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUQoTixwKSxjZS5leHBvcnRzPU4sTi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEYsSCl7Zm9y''@;'; put 'put ''KHZhciBSPUYudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxqPUgubGFiZWwudG9VcHBlckNhc2UoKSxQPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLFk9LTEsQj0wO0I8Ui5sZW5ndGg7QisrKXt2YXIgVz1SW0JdLm1hdGNoKFApO2lmKG51bGwhPT1XJiZXWzJd''@;'; put 'put ''PT09ail7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7WT1CO2JyZWFrfWlmKCJCRUdJTiIhPT1XWzFdKWJyZWFrO0w9Qn19aWYoLTE9PT1MfHwtMT09PVkpdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK2opO3ZhciBaPVIuc2xpY2UoTCsxLFkp''@;'; put 'put ''LmpvaW4oIiIpO1oucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhaLCJiYXNlNjQiKTtyZXR1cm4gcC5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEgpfX0sNjk4NDooY2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDg3NjQpLkJ1ZmZlcixwPWIoOTgw''@;'; put 'put ''OSksTj1wLmJhc2Usdz1wLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gRihQKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9UC5uYW1lLHRoaXMuZW50aXR5PVAsdGhpcy50cmVlPW5ldyBILHRoaXMudHJlZS5faW5pdChQLmJvZHkpfWZ1bmN0aW9uIEgoUCl7Ti5Ob2RlLmNhbGwodGhpcywiZGVy''@;'; put 'put ''IixQKX1mdW5jdGlvbiBSKFApe3JldHVybiBQPDEwPyIwIitQOlB9Y2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLFkpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLFkpLmpvaW4oKX0sRChILE4uTm9kZSksSC5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1m''@;'; put 'put ''dW5jdGlvbihMLFksQixXKXt2YXIgWCxaPWZ1bmN0aW9uIGooUCxMLFksQil7dmFyIFc7aWYoInNlcW9mIj09PVA/UD0ic2VxIjoic2V0b2YiPT09UCYmKFA9InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KFApKVc9dy50YWdCeU5hbWVbUF07ZWxzZXtpZigibnVtYmVyIiE9dHlw''@;'; put 'put ''ZW9mIFB8fCgwfFApIT09UClyZXR1cm4gQi5lcnJvcigiVW5rbm93biB0YWc6ICIrUCk7Vz1QfXJldHVybiBXPj0zMT9CLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW1l8fCJ1bml2ZXJzYWwiXTw8''@;'; put 'put ''Nil9KEwsWSxCLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oWD1uZXcgXygyKSlbMF09WixYWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsV10pO2Zvcih2YXIgcT0xLFE9Vy5sZW5ndGg7UT49MjU2O1E+Pj04KXErKzsoWD1uZXcgXygyK3Ep''@;'; put 'put ''KVswXT1aLFhbMV09MTI4fHEsUT0xK3E7Zm9yKHZhciB0ZT1XLmxlbmd0aDt0ZT4wO1EtLSx0ZT4+PTgpWFtRXT0yNTUmdGU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsV10pfSxILnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsWSl7aWYoImJpdHN0ciI9PT1Z''@;'; put 'put ''KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09WSl7Zm9yKHZhciBCPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylCLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQil9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0''@;'; put 'put ''cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09WT90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxv''@;'; put 'put ''d2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChZKXx8Im9i''@;'; put 'put ''akRlc2MiPT09WT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1bnN1cHBvcnRlZCIpfSxILnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxZLEIpe2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgTCl7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBt''@;'; put 'put ''YXAiKTtMPVlbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlz''@;'; put 'put ''LnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFCKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5z''@;'; put 'put ''cGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFo9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgcT1MW1ddO2ZvcihaKys7cT49MTI4O3E+Pj03KVorK312YXIgUT1uZXcgXyhaKSxYPVEubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoUVtYLS1dPTEyNyYocT1M''@;'; put 'put ''W1ddKTsocT4+PTcpPjA7KVFbWC0tXT0xMjh8MTI3JnE7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoUSl9LEgucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsWSl7dmFyIEIsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVh''@;'; put 'put ''cigpKSxSKFcuZ2V0VVRDTW9udGgoKSsxKSxSKFcuZ2V0VVRDRGF0ZSgpKSxSKFcuZ2V0VVRDSG91cnMoKSksUihXLmdldFVUQ01pbnV0ZXMoKSksUihXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVhcigpJTEwMCksUihXLmdl''@;'; put 'put ''dFVUQ01vbnRoKCkrMSksUihXLmdldFVUQ0RhdGUoKSksUihXLmdldFVUQ0hvdXJzKCkpLFIoVy5nZXRVVENNaW51dGVzKCkpLFIoVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVk''@;'; put 'put ''IHlldCIpLHRoaXMuX2VuY29kZVN0cihCLCJvY3RzdHIiKX0sSC5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEgucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxZKXtpZigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IEwpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIVkuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAi''@;'; put 'put ''K0pTT04uc3RyaW5naWZ5KEwpKTtMPVlbTF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYhXy5pc0J1ZmZlcihMKSl7dmFyIEI9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JkJbMF0mJkIudW5zaGlmdCgwKSxMPW5ldyBfKEIpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1M''@;'; put 'put ''Lmxlbmd0aCYmVysrO3ZhciBxPW5ldyBfKFcpO3JldHVybiBMLmNvcHkocSksMD09PUwubGVuZ3RoJiYocVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9j''@;'; put 'put ''cmVhdGVFbmNvZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBaPUw7Wj49MjU2O1o+Pj04KVcrKztmb3IoWj0ocT1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1o+PTA7Wi0tKXFbWl09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZxWzBdJiZxLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2Rl''@;'; put 'put ''ckJ1ZmZlcihuZXcgXyhxKSl9LEgucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxILnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoWSkp''@;'; put 'put ''LEwuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEgucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihMLFksQil7dmFyIFosVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgcT1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXIm''@;'; put 'put ''JihXLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5kZWZhdWx0LFksQikuam9pbigpKSxxLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFo9MDtaPHEubGVuZ3RoO1orKylpZihxW1pdIT09Vy5kZWZhdWx0QnVmZmVyW1pdKXJldHVybiExO3Jl''@;'; put 'put ''dHVybiEwfX0sNjU3OTooY2UsSixiKT0+e3ZhciBEPUo7RC5kZXI9Yig2OTg0KSxELnBlbT1iKDI4ODMpfSwyODgzOihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoNjk4NCk7ZnVuY3Rpb24gcChOKXtfLmNhbGwodGhpcyxOKSx0aGlzLmVuYz0icGVtIn1EKHAsXyksY2UuZXhwb3J0cz1w''@;'; put 'put ''LHAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih3LEYpe2Zvcih2YXIgUj1fLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSxqPVsiLS0tLS1CRUdJTiAiK0YubGFiZWwrIi0tLS0tIl0sUD0wO1A8Ui5sZW5ndGg7UCs9NjQpai5wdXNoKFIuc2xpY2Uo''@;'; put 'put ''UCxQKzY0KSk7cmV0dXJuIGoucHVzaCgiLS0tLS1FTkQgIitGLmxhYmVsKyItLS0tLSIpLGouam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0''@;'; put 'put ''aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4g''@;'; put 'put ''ejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0Qu''@;'; put 'put ''ZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1''@;'; put 'put ''cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgs''@;'; put 'put ''eSksVj1nO1Y8VDtWKyspe3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1UtNDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29u''@;'; put 'put ''c3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBD''@;'; put 'put ''PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRo''@;'; put 'put ''aXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMu''@;'; put 'put ''d29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0''@;'; put 'put ''aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWls''@;'; put 'put ''KGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShW''@;'; put 'put ''PWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tD''@;'; put 'put ''XXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9Uihn''@;'; put 'put ''LHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4''@;'; put 'put ''NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlD''@;'; put 'put ''Kys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYtVSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7''@;'; put 'put ''aWYoMCE9PVUpe3ZhciBhZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1m''@;'; put 'put ''dW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90''@;'; put 'put ''b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90''@;'; put 'put ''eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAw''@;'; put 'put ''IiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3Nzcy''@;'; put 'put ''MTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYy''@;'; put 'put ''NjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4''@;'; put 'put ''PXoubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2''@;'; put 'put ''MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEpO2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29yZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8''@;'; put 'put ''QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxl''@;'; put 'put ''bmd0aDtWKyspe3ZhciBVPXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0pLHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9''@;'; put 'put ''PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5l''@;'; put 'put ''Z2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJu''@;'; put 'put ''IDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMu''@;'; put 'put ''d29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIg''@;'; put 'put ''dGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5p''@;'; put 'put ''dXNocm4oOCksVVttXT1FO2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRo''@;'; put 'put ''LmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9''@;'; put 'put ''LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsr''@;'; put 'put ''LHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlz''@;'; put 'put ''LmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0''@;'; put 'put ''bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0w''@;'; put 'put ''O3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpn''@;'; put 'put ''LmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n''@;'; put 'put ''dGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9y''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRo''@;'; put 'put ''aXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xv''@;'; put 'put ''bmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0Nd''@;'; put 'put ''PTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlz''@;'; put 'put ''LndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5n''@;'; put 'put ''dGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNbVl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4g''@;'; put 'put ''MCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRo''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5f''@;'; put 'put ''bm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0''@;'; put 'put ''aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgwfFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYm''@;'; put 'put ''VTxDLmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0''@;'; put 'put ''aC5tYXgodGhpcy5sZW5ndGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15''@;'; put 'put ''LndvcmRzLFY9eC53b3JkcyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5''@;'; put 'put ''MSZGZSxJZT1GZT4+PjEzLEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0wfENbN10seXQ9ODE5MSZsbixTdD1sbj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQs''@;'; put 'put ''dXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJu''@;'; put 'put ''Pj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEz''@;'; put 'put ''O3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oVSsoRT1NYXRoLmltdWwobmUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0KSkrTWF0aC5pbXVsKGxlLFJ0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyht''@;'; put 'put ''Pj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpO3ZhciBFaT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmlt''@;'; put 'put ''dWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDA7dmFyIHZyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG09KG09bStNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxobil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEJlLFJ0KSxtPShtPU1hdGguaW11bChCZSxQdCkp''@;'; put 'put ''K01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoVWUsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwO3ZhciBXbj0oVSsoRT1FK01hdGguaW11bChuZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwobGUsV3QpfDApKTw8MTMpfDA7VT0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwobGUsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoQmUsUXQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChCZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciAkaT0oVSsoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwobGUsc3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxSdCksbT0obT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsUnQpfDAsQT1NYXRoLmltdWwoa2UsUHQp''@;'; put 'put ''LEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChCZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDA7dmFyIGVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxUdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2UsUXQpfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoQmUsV3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChCZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwobGUsaHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoU3QsUnQpfDAsQT1NYXRoLmltdWwoU3QsUHQp''@;'; put 'put ''LEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChEZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChrZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoQmUsc3QpfDAsbT0obT1tK01hdGguaW11bChCZSxVdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoVWUseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwO3ZhciBWaT0oVSsoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwobGUscm4pfDApKTw8MTMpfDA7VT0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwobGUsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKFN0LFF0KXwwLEE9QStNYXRoLmltdWwoU3Qsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKERlLFd0KXwwLG09KG09bStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChCZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2''@;'; put 'put ''ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDA7dmFyIE5pPShVKyhFPUUrTWF0aC5pbXVsKG5lLHVuKXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG09KG09bStNYXRoLmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSx1bil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFJ0KSxtPShtPU1hdGguaW11bChOZSxQdCkp''@;'; put 'put ''K01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoeXQsZnQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChE''@;'; put 'put ''ZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLFV0KXwwKStNYXRoLmltdWwoa2Usc3QpfDAsQT1BK01hdGguaW11bChrZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoQmUsaHQpfDAsbT0obT1tK01hdGguaW11bChCZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHVuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChRZSx1bil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBEYT0oVSsoRT1FK01hdGguaW11bChuZSxYdCl8MCl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwobGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxRdCksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmlt''@;'; put 'put ''dWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0''@;'; put 'put ''LEF0KXwwKStNYXRoLmltdWwoU3QsV3QpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChEZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKEJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsdW4pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLHVuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwodmUsZm4pfDA7dmFyIExyPShVKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYp''@;'; put 'put ''fDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGhuKSxtPShtPU1hdGguaW11bChOZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDAsRT1FK01hdGguaW11bChEZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHh0KXwwKStNYXRoLmltdWwoa2UsaHQpfDAsQT1BK01hdGguaW11bChrZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoQmUsdW4pfDAsbT0obT1tK01hdGguaW11bChCZSxmbil8MCkrTWF0aC5pbXVsKEFlLHVuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFdpPShVKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KE5lLFd0KSxtPShtPU1hdGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSmUseHQpfDAsRT1FK01hdGguaW11bChEZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11''@;'; put 'put ''bChJZSx1bil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oVSsoRT1FK01hdGguaW11bChCZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEJlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyht''@;'; put 'put ''Pj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxzdCksbT0obT1NYXRoLmltdWwoTmUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoU3QsaHQpfDAsQT1BK01hdGguaW11bChTdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsdW4pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKGtlLHVuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIFFuPShVKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KE5lLFdlKSxtPShtPU1hdGguaW11bChOZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwobnQsdW4pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLHVuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSmUsZm4pfDA7dmFyIGxhPShVKyhFPUUrTWF0aC5pbXVsKERlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYp''@;'; put 'put ''fDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChTdCx1bil8MCxBPUErTWF0aC5pbXVsKFN0LGZuKXwwO3ZhciBiYT0oVSsoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxybiksbT0obT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmlt''@;'; put 'put ''dWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsdW4pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLHVuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShVKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChTdCxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChTdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHVuKSxtPShtPU1hdGguaW11bChOZSxmbikp''@;'; put 'put ''K01hdGguaW11bCh1dCx1bil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShVKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCgkZSxlbil8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oVSsoRT1NYXRoLmltdWwoTmUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsZW4pKSso''@;'; put 'put ''bT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsVlswXT11YSxWWzFdPUVpLFZbMl09dnIsVlszXT1XbixWWzRdPSRpLFZbNV09ZWksVls2XT1RcixWWzddPVZpLFZbOF09TmksVls5XT1EYSxWWzEwXT1McixWWzExXT1XaSxWWzEyXT1wYSxWWzEzXT1RbixWWzE0XT1sYSxWWzE1''@;'; put 'put ''XT1iYSxWWzE2XT1MYSxWWzE3XT1GYSxWWzE4XT10aSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBYKS5tdWxwKHosZyx5KX1mdW5jdGlvbiBYKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpDPDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVn''@;'; put 'put ''YXRpdmVeei5uZWdhdGl2ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsx''@;'; put 'put ''KTttPD1FO20rKyl7dmFyIGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9NjcxMDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1W''@;'; put 'put ''LFY9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6USh0aGlzLGcseSkseH0sWC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9''@;'; put 'put ''MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxYLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sWC5w''@;'; put 'put ''cm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1UrKylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxYLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBV''@;'; put 'put ''PTE7VTxUO1U8PD0xKWZvcih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLFFlPUNbYWUrd2VdLG90PXhbYWUrd2Ur''@;'; put 'put ''VV0sTWU9Q1thZSt3ZStVXSx2ZT1uZSpvdC1sZSpNZTtNZT1uZSpNZStsZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPVFlK01lLHhbYWUrd2UrVV09VWUtb3QsQ1thZSt3ZStVXT1RZS1NZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LFgucHJv''@;'; put 'put ''dG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxYLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBD''@;'; put 'put ''PTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxYLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1h''@;'; put 'put ''dGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxYLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhb''@;'; put 'put ''MipWXT04MTkxJihUKz0wfGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LFgucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3gr''@;'; put 'put ''Kyl5W3hdPTA7cmV0dXJuIHl9LFgucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcg''@;'; put 'put ''QXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxsZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5z''@;'; put 'put ''Zm9ybShVLFYsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdh''@;'; put 'put ''dGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUsVixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1u''@;'; put 'put ''ZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2''@;'; put 'put ''NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAh''@;'; put 'put ''PT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3IEFycmF5KHouYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ld''@;'; put 'put ''PSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5''@;'; put 'put ''Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYo''@;'; put 'put ''MCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+PjI2LXl9ViYmKHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9''@;'; put 'put ''dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxVPTY3''@;'; put 'put ''MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9Vn1pZigwIT09VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09VixtPTA7bTx0aGlz''@;'; put 'put ''Lmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1tt''@;'; put 'put ''XT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0''@;'; put 'put ''dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjty''@;'; put 'put ''ZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''ZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRz''@;'; put 'put ''W3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''dGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixVPTA7Zm9yKFQ9''@;'; put 'put ''MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspVT0oVj0oMHx0''@;'; put 'put ''aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53b3Jkc1tUXT02''@;'; put 'put ''NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoVikpJiYoVD1U''@;'; put 'put ''LnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7''@;'; put 'put ''QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSso''@;'; put 'put ''MHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49''@;'; put 'put ''MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlz''@;'; put 'put ''LmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0''@;'; put 'put ''aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFY9''@;'; put 'put ''dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfTox''@;'; put 'put ''PT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29y''@;'; put 'put ''ZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9k''@;'; put 'put ''fSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5k''@;'; put 'put ''aXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9k''@;'; put 'put ''bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3Io''@;'; put 'put ''dmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj1u''@;'; put 'put ''ZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2Oysr''@;'; put 'put ''YWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2OysrbGUsd2U8''@;'; put 'put ''PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09kZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHguaXN1Yih5KSxW''@;'; put 'put ''LmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1v''@;'; put 'put ''ZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmVTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7VS0tID4wOylD''@;'; put 'put ''LmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIo''@;'; put 'put ''eCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXku''@;'; put 'put ''aXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5k''@;'; put 'put ''bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRo''@;'; put 'put ''aXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRzW1ZdPVUmPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0aGlzLmxlbmd0''@;'; put 'put ''aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJu''@;'; put 'put ''IDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBD''@;'; put 'put ''PTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlz''@;'; put 'put ''LmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0s''@;'; put 'put ''dy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJv''@;'; put 'put ''bVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5y''@;'; put 'put ''ZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRo''@;'; put 'put ''aXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''aWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0''@;'; put 'put ''aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''LnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''TXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMp''@;'; put 'put ''LHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMu''@;'; put 'put ''cmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHJlKHosZyl7dGhpcy5uYW1lPXosdGhpcy5w''@;'; put 'put ''PW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBvZSgpe3JlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtyZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7cmUu''@;'; put 'put ''Y2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe3JlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIgZz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRoaXMucHJpbWU9''@;'; put 'put ''bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmlt''@;'; put 'put ''b2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52''@;'; put 'put ''KX1yZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30scmUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRt''@;'; put 'put ''cCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lk''@;'; put 'put ''IDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LHJlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxyZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKG9lLHJlKSxvZS5wcm90b3R5''@;'; put 'put ''cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIg''@;'; put 'put ''Vj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+MjIsVj1VfWcud29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcubGVuZ3RoPjEw''@;'; put 'put ''PzEwOjl9LG9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5''@;'; put 'put ''Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LE4oZ2UscmUpLE4oX2UscmUpLE4oVGUscmUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5j''@;'; put 'put ''dGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcp''@;'; put 'put ''e2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IG9lO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7''@;'; put 'put ''eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3Vi''@;'; put 'put ''KGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1''@;'; put 'put ''bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5j''@;'; put 'put ''bXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hs''@;'; put 'put ''PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rp''@;'; put 'put ''b24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZv''@;'; put 'put ''cih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQodGhpcyksVT1WLnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJp''@;'; put 'put ''dExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksbGU9VDswIT09''@;'; put 'put ''bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxVZT0wOzAhPT13ZS5jbXAoVik7VWUrKyl3ZT13ZS5yZWRTcXIoKTtwKFVlPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4obGUtVWUtMSkpO2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSks''@;'; put 'put ''bGU9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0''@;'; put 'put ''aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKysp''@;'; put 'put ''Q1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtWIT09Q1sw''@;'; put 'put ''XSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0yNn1yZXR1cm4gVn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVt''@;'; put 'put ''b2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2UpLHplLnByb3Rv''@;'; put 'put ''dHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx6ZS5wcm90''@;'; put 'put ''b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu''@;'; put 'put ''bSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihn''@;'; put 'put ''LmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlm''@;'; put 'put ''dCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11''@;'; put 'put ''bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw5MjgyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpO2Z1bmN0aW9uIHAoSGUpe3JldHVybihwPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1cm4gdHlwZW9mIERlfTpmdW5jdGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVv''@;'; put 'put ''ZiBEZX0pKEhlKX1mdW5jdGlvbiBOKEhlLERlKXtmb3IodmFyIGtlPTA7a2U8RGUubGVuZ3RoO2tlKyspe3ZhciBfdD1EZVtrZV07X3QuZW51bWVyYWJsZT1fdC5lbnVtZXJhYmxlfHwhMSxfdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF90JiYoX3Qud3JpdGFibGU9ITApLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShIZSxGKF90LmtleSksX3QpfX1mdW5jdGlvbiB3KEhlLERlLGtlKXtyZXR1cm4gRGUmJk4oSGUucHJvdG90eXBlLERlKSxrZSYmTihIZSxrZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEhlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLEhlfWZ1bmN0aW9uIEYoSGUp''@;'; put 'put ''e3ZhciBEZT1mdW5jdGlvbiBIKEhlLERlKXtpZigib2JqZWN0IiE9PXAoSGUpfHxudWxsPT09SGUpcmV0dXJuIEhlO3ZhciBrZT1IZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWtlKXt2YXIgX3Q9a2UuY2FsbChIZSxEZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PXAoX3Qp''@;'; put 'put ''KXJldHVybiBfdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PURlP1N0cmluZzpOdW1iZXIpKEhlKX0oSGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cChEZSk/RGU6U3RyaW5n''@;'; put 'put ''KERlKX12YXIgemUseixQPWIoMjEzNikuY29kZXMsTD1QLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsWT1QLkVSUl9JTlZBTElEX0FSR19UWVBFLEI9UC5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsVz1QLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxaPVAuRVJSX01JU1NJTkdfQVJHUyxxPWIoNTk2''@;'; put 'put ''MSksWD1iKDk1MzkpLmluc3BlY3QsdGU9Yig5NTM5KS50eXBlcyxyZT10ZS5pc1Byb21pc2Usb2U9dGUuaXNSZWdFeHAsZ2U9Yig4MTYyKSgpLF9lPWIoNTYyNCkoKSxUZT1iKDE5MjQpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtmdW5jdGlvbiBDKCl7dmFyIEhlPWIoOTE1OCk7emU9SGUu''@;'; put 'put ''aXNEZWVwRXF1YWwsej1IZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRT0hMSxtPWNlLmV4cG9ydHM9d2UsQT17fTtmdW5jdGlvbiBhZShIZSl7dGhyb3cgSGUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP0hlLm1lc3NhZ2U6bmV3IHEoSGUpfWZ1bmN0aW9uIGxlKEhlLERlLGtlLF90KXtpZigh''@;'; put 'put ''a2Upe3ZhciBudD0hMTtpZigwPT09RGUpbnQ9ITAsX3Q9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKF90IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgX3Q7dmFyIEplPW5ldyBxKHthY3R1YWw6a2UsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpfdCxvcGVy''@;'; put 'put ''YXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpIZX0pO3Rocm93IEplLmdlbmVyYXRlZE1lc3NhZ2U9bnQsSmV9fWZ1bmN0aW9uIHdlKCl7Zm9yKHZhciBIZT1hcmd1bWVudHMubGVuZ3RoLERlPW5ldyBBcnJheShIZSksa2U9MDtrZTxIZTtrZSsrKURlW2tlXT1hcmd1bWVudHNba2VdO2xlLmFwcGx5''@;'; put 'put ''KHZvaWQgMCxbd2UsRGUubGVuZ3RoXS5jb25jYXQoRGUpKX1tLmZhaWw9ZnVuY3Rpb24gbmUoSGUsRGUsa2UsX3QsbnQpe3ZhciBsbixKZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1KZT9sbj0iRmFpbGVkIjoxPT09SmU/KGtlPUhlLEhlPXZvaWQgMCk6KCExPT09RSYmKEU9ITAsKEQuZW1p''@;'; put 'put ''dFdhcm5pbmc/RC5lbWl0V2FybmluZzpfLndhcm4uYmluZChfKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRl''@;'; put 'put ''cHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PUplJiYoX3Q9IiE9IikpLGtlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cga2U7dmFyIFN0PXthY3R1YWw6SGUsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6dm9pZCAwPT09X3Q/ImZhaWwiOl90LHN0YWNrU3RhcnRGbjpudHx8bmV9O3ZvaWQg''@;'; put 'put ''MCE9PWtlJiYoU3QubWVzc2FnZT1rZSk7dmFyIER0PW5ldyBxKFN0KTt0aHJvdyBsbiYmKER0Lm1lc3NhZ2U9bG4sRHQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksRHR9LG0uQXNzZXJ0aW9uRXJyb3I9cSxtLm9rPXdlLG0uZXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTtEZSE9a2UmJmFlKHthY3R1YWw6RGUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpIZX0pfSxtLm5vdEVxdWFsPWZ1bmN0aW9uIEhlKERlLGtlLF90KXtpZihhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPDIpdGhyb3cgbmV3IFooImFjdHVhbCIsImV4cGVjdGVkIik7RGU9PWtlJiZhZSh7YWN0dWFsOkRlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46SGV9KX0sbS5kZWVwRXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYmQygpLHplKERlLGtlKXx8YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0pfSxtLm5vdERlZXBFcXVhbD1m''@;'; put 'put ''dW5jdGlvbiBIZShEZSxrZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBaKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PXplJiZDKCksemUoRGUsa2UpJiZhZSh7YWN0dWFsOkRlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdERlZXBFcXVhbCIs''@;'; put 'put ''c3RhY2tTdGFydEZuOkhlfSl9LG0uZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIEhlKERlLGtlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFooImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09emUmJkMoKSx6KERlLGtlKXx8YWUoe2FjdHVhbDpEZSxleHBlY3RlZDpr''@;'; put 'put ''ZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0pfSxtLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBVZShIZSxEZSxrZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBaKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09''@;'; put 'put ''PXplJiZDKCkseihIZSxEZSkmJmFlKHthY3R1YWw6SGUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTprZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VWV9KX0sbS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBIZShEZSxrZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRo''@;'; put 'put ''cm93IG5ldyBaKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKERlLGtlKXx8YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOkhlfSl9LG0ubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe2lmKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWigiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShEZSxrZSkmJmFlKHthY3R1YWw6RGUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpIZX0pfTt2YXIgUWU9dyhmdW5jdGlvbiBIZShE''@;'; put 'put ''ZSxrZSxfdCl7dmFyIG50PXRoaXM7KGZ1bmN0aW9uIFIoSGUsRGUpe2lmKCEoSGUgaW5zdGFuY2VvZiBEZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLEhlKSxrZS5mb3JFYWNoKGZ1bmN0aW9uKEplKXtKZSBpbiBEZSYm''@;'; put 'put ''KG50W0plXT12b2lkIDAhPT1fdCYmInN0cmluZyI9PXR5cGVvZiBfdFtKZV0mJm9lKERlW0plXSkmJlRlKERlW0plXSxfdFtKZV0pP190W0plXTpEZVtKZV0pfSl9KTtmdW5jdGlvbiBNZShIZSxEZSxrZSxfdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIERlKXtpZihvZShEZSkpcmV0dXJuIFRl''@;'; put 'put ''KERlLEhlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgWSgiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSxEZSk7aWYoIm9iamVjdCIhPT1wKEhlKXx8bnVsbD09PUhlKXt2YXIgbnQ9bmV3IHEoe2FjdHVhbDpIZSxleHBlY3RlZDpEZSxtZXNzYWdlOmtlLG9wZXJh''@;'; put 'put ''dG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IG50Lm9wZXJhdG9yPV90Lm5hbWUsbnR9dmFyIEplPU9iamVjdC5rZXlzKERlKTtpZihEZSBpbnN0YW5jZW9mIEVycm9yKUplLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09SmUubGVuZ3RoKXRo''@;'; put 'put ''cm93IG5ldyBCKCJlcnJvciIsRGUsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PXplJiZDKCksSmUuZm9yRWFjaChmdW5jdGlvbihsbil7InN0cmluZyI9PXR5cGVvZiBIZVtsbl0mJm9lKERlW2xuXSkmJlRlKERlW2xuXSxIZVtsbl0pfHxmdW5jdGlvbiBv''@;'; put 'put ''dChIZSxEZSxrZSxfdCxudCxKZSl7aWYoIShrZSBpbiBIZSl8fCF6KEhlW2tlXSxEZVtrZV0pKXtpZighX3Qpe3ZhciBsbj1uZXcgUWUoSGUsbnQpLHl0PW5ldyBRZShEZSxudCxIZSksU3Q9bmV3IHEoe2FjdHVhbDpsbixleHBlY3RlZDp5dCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixz''@;'; put 'put ''dGFja1N0YXJ0Rm46SmV9KTt0aHJvdyBTdC5hY3R1YWw9SGUsU3QuZXhwZWN0ZWQ9RGUsU3Qub3BlcmF0b3I9SmUubmFtZSxTdH1hZSh7YWN0dWFsOkhlLGV4cGVjdGVkOkRlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6SmUubmFtZSxzdGFja1N0YXJ0Rm46SmV9KX19KEhlLERlLGxuLGtlLEplLF90''@;'; put 'put ''KX0pLCEwfXJldHVybiB2b2lkIDAhPT1EZS5wcm90b3R5cGUmJkhlIGluc3RhbmNlb2YgRGV8fCFFcnJvci5pc1Byb3RvdHlwZU9mKERlKSYmITA9PT1EZS5jYWxsKHt9LEhlKX1mdW5jdGlvbiB2ZShIZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEhlKXRocm93IG5ldyBZKCJmbiIsIkZ1bmN0''@;'; put 'put ''aW9uIixIZSk7dHJ5e0hlKCl9Y2F0Y2goRGUpe3JldHVybiBEZX1yZXR1cm4gQX1mdW5jdGlvbiBYZShIZSl7cmV0dXJuIHJlKEhlKXx8bnVsbCE9PUhlJiYib2JqZWN0Ij09PXAoSGUpJiYiZnVuY3Rpb24iPT10eXBlb2YgSGUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEhlLmNhdGNofWZ1''@;'; put 'put ''bmN0aW9uIEJlKEhlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBEZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgSGUpe2lmKCFYZShEZT1IZSgpKSl0aHJvdyBuZXcgVygiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIsRGUpfWVsc2V7aWYoIVhl''@;'; put 'put ''KEhlKSl0aHJvdyBuZXcgWSgicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLEhlKTtEZT1IZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBEZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQX0pLmNhdGNoKGZ1bmN0aW9uKGtlKXtyZXR1''@;'; put 'put ''cm4ga2V9KX0pfWZ1bmN0aW9uIEFlKEhlLERlLGtlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIGtlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgWSgiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLGtlKTtpZigib2JqZWN0Ij09PXAoRGUp''@;'; put 'put ''JiZudWxsIT09RGUpe2lmKERlLm1lc3NhZ2U9PT1rZSl0aHJvdyBuZXcgTCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChEZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZihEZT09PWtlKXRocm93IG5ldyBMKCJl''@;'; put 'put ''cnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChEZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO190PWtlLGtlPXZvaWQgMH1lbHNlIGlmKG51bGwhPWtlJiYib2JqZWN0IiE9PXAoa2UpJiYiZnVuY3Rpb24iIT10eXBlb2Yga2UpdGhyb3cgbmV3IFkoImVycm9y''@;'; put 'put ''IixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxrZSk7aWYoRGU9PT1BKXt2YXIgbnQ9IiI7a2UmJmtlLm5hbWUmJihudCs9IiAoIi5jb25jYXQoa2UubmFtZSwiKSIpKSxudCs9X3Q/IjogIi5jb25jYXQoX3QpOiIuIixhZSh7YWN0dWFsOnZvaWQgMCxleHBlY3RlZDpr''@;'; put 'put ''ZSxvcGVyYXRvcjpIZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09SGUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KG50KSxzdGFja1N0YXJ0Rm46SGV9KX1pZihrZSYmIU1lKERlLGtlLF90LEhlKSl0aHJvdyBEZX1mdW5j''@;'; put 'put ''dGlvbiBGZShIZSxEZSxrZSxfdCl7aWYoRGUhPT1BKXtpZigic3RyaW5nIj09dHlwZW9mIGtlJiYoX3Q9a2Usa2U9dm9pZCAwKSwha2V8fE1lKERlLGtlKSl7dmFyIG50PV90PyI6ICIuY29uY2F0KF90KToiLiI7YWUoe2FjdHVhbDpEZSxleHBlY3RlZDprZSxvcGVyYXRvcjpIZS5uYW1lLG1l''@;'; put 'put ''c3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1IZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoRGUmJkRlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46SGV9KX10aHJv''@;'; put 'put ''dyBEZX19ZnVuY3Rpb24gUmUoSGUsRGUsa2UsX3QsbnQpe2lmKCFvZShEZSkpdGhyb3cgbmV3IFkoInJlZ2V4cCIsIlJlZ0V4cCIsRGUpO3ZhciBKZT0ibWF0Y2giPT09bnQ7aWYoInN0cmluZyIhPXR5cGVvZiBIZXx8VGUoRGUsSGUpIT09SmUpe2lmKGtlIGluc3RhbmNlb2YgRXJyb3IpdGhy''@;'; put 'put ''b3cga2U7dmFyIGxuPSFrZTtrZT1rZXx8KCJzdHJpbmciIT10eXBlb2YgSGU/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KHAoSGUpLCIgKCIpLmNvbmNhdChYKEhlKSwiKSIpOihKZT8iVGhlIGlucHV0IGRp''@;'; put 'put ''ZCBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiOiJUaGUgaW5wdXQgd2FzIGV4cGVjdGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChYKERlKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KFgoSGUpLCJcbiIpKTt2YXIgeXQ9bmV3IHEo''@;'; put 'put ''e2FjdHVhbDpIZSxleHBlY3RlZDpEZSxtZXNzYWdlOmtlLG9wZXJhdG9yOm50LHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IHl0LmdlbmVyYXRlZE1lc3NhZ2U9bG4seXR9fWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBIZT1hcmd1bWVudHMubGVuZ3RoLERlPW5ldyBBcnJheShIZSksa2U9MDtrZTxI''@;'; put 'put ''ZTtrZSsrKURlW2tlXT1hcmd1bWVudHNba2VdO2xlLmFwcGx5KHZvaWQgMCxbSWUsRGUubGVuZ3RoXS5jb25jYXQoRGUpKX1tLnRocm93cz1mdW5jdGlvbiBIZShEZSl7Zm9yKHZhciBrZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShrZT4xP2tlLTE6MCksbnQ9MTtudDxrZTtudCsr''@;'; put 'put ''KV90W250LTFdPWFyZ3VtZW50c1tudF07QWUuYXBwbHkodm9pZCAwLFtIZSx2ZShEZSldLmNvbmNhdChfdCkpfSxtLnJlamVjdHM9ZnVuY3Rpb24gSGUoRGUpe2Zvcih2YXIga2U9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoa2U+MT9rZS0xOjApLG50PTE7bnQ8a2U7bnQrKylfdFtu''@;'; put 'put ''dC0xXT1hcmd1bWVudHNbbnRdO3JldHVybiBCZShEZSkudGhlbihmdW5jdGlvbihKZSl7cmV0dXJuIEFlLmFwcGx5KHZvaWQgMCxbSGUsSmVdLmNvbmNhdChfdCkpfSl9LG0uZG9lc05vdFRocm93PWZ1bmN0aW9uIEhlKERlKXtmb3IodmFyIGtlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFy''@;'; put 'put ''cmF5KGtlPjE/a2UtMTowKSxudD0xO250PGtlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtGZS5hcHBseSh2b2lkIDAsW0hlLHZlKERlKV0uY29uY2F0KF90KSl9LG0uZG9lc05vdFJlamVjdD1mdW5jdGlvbiBIZShEZSl7Zm9yKHZhciBrZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBB''@;'; put 'put ''cnJheShrZT4xP2tlLTE6MCksbnQ9MTtudDxrZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIEJlKERlKS50aGVuKGZ1bmN0aW9uKEplKXtyZXR1cm4gRmUuYXBwbHkodm9pZCAwLFtIZSxKZV0uY29uY2F0KF90KSl9KX0sbS5pZkVycm9yPWZ1bmN0aW9uIEhlKERlKXtpZihu''@;'; put 'put ''dWxsIT1EZSl7dmFyIGtlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1wKERlKSYmInN0cmluZyI9PXR5cGVvZiBEZS5tZXNzYWdlP2tlKz0wPT09RGUubWVzc2FnZS5sZW5ndGgmJkRlLmNvbnN0cnVjdG9yP0RlLmNvbnN0cnVjdG9yLm5hbWU6RGUubWVz''@;'; put 'put ''c2FnZTprZSs9WChEZSk7dmFyIF90PW5ldyBxKHthY3R1YWw6RGUsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTprZSxzdGFja1N0YXJ0Rm46SGV9KSxudD1EZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIG50KXt2YXIgSmU9bnQuc3BsaXQoIlxuIik7SmUuc2hp''@;'; put 'put ''ZnQoKTtmb3IodmFyIGxuPV90LnN0YWNrLnNwbGl0KCJcbiIpLHl0PTA7eXQ8SmUubGVuZ3RoO3l0Kyspe3ZhciBTdD1sbi5pbmRleE9mKEplW3l0XSk7aWYoLTEhPT1TdCl7bG49bG4uc2xpY2UoMCxTdCk7YnJlYWt9fV90LnN0YWNrPSIiLmNvbmNhdChsbi5qb2luKCJcbiIpLCJcbiIpLmNv''@;'; put 'put ''bmNhdChKZS5qb2luKCJcbiIpKX10aHJvdyBfdH19LG0ubWF0Y2g9ZnVuY3Rpb24gSGUoRGUsa2UsX3Qpe1JlKERlLGtlLF90LEhlLCJtYXRjaCIpfSxtLmRvZXNOb3RNYXRjaD1mdW5jdGlvbiBIZShEZSxrZSxfdCl7UmUoRGUsa2UsX3QsSGUsImRvZXNOb3RNYXRjaCIpfSxtLnN0cmljdD1n''@;'; put 'put ''ZShJZSxtLHtlcXVhbDptLnN0cmljdEVxdWFsLGRlZXBFcXVhbDptLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDptLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDptLm5vdERlZXBTdHJpY3RFcXVhbH0pLG0uc3RyaWN0LnN0cmljdD1tLnN0cmljdH0sNTk2MTooY2UsSixiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2Z1bmN0aW9uIF8oQSxhZSl7dmFyIG5lPU9iamVjdC5rZXlzKEEpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBsZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEEpO2FlJiYobGU9bGUuZmlsdGVyKGZ1bmN0aW9uKHdlKXty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHdlKS5lbnVtZXJhYmxlfSkpLG5lLnB1c2guYXBwbHkobmUsbGUpfXJldHVybiBuZX1mdW5jdGlvbiBwKEEpe2Zvcih2YXIgYWU9MTthZTxhcmd1bWVudHMubGVuZ3RoO2FlKyspe3ZhciBuZT1udWxsIT1hcmd1bWVudHNb''@;'; put 'put ''YWVdP2FyZ3VtZW50c1thZV06e307YWUlMj9fKE9iamVjdChuZSksITApLmZvckVhY2goZnVuY3Rpb24obGUpe04oQSxsZSxuZVtsZV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9ycyhuZSkpOl8oT2JqZWN0KG5lKSkuZm9yRWFjaChmdW5jdGlvbihsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsbGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZSxsZSkpfSl9cmV0dXJuIEF9ZnVuY3Rpb24gTihBLGFlLG5lKXtyZXR1cm4oYWU9UihhZSkpaW4g''@;'; put 'put ''QT9PYmplY3QuZGVmaW5lUHJvcGVydHkoQSxhZSx7dmFsdWU6bmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW2FlXT1uZSxBfWZ1bmN0aW9uIEYoQSxhZSl7Zm9yKHZhciBuZT0wO25lPGFlLmxlbmd0aDtuZSsrKXt2YXIgbGU9YWVbbmVdO2xlLmVudW1l''@;'; put 'put ''cmFibGU9bGUuZW51bWVyYWJsZXx8ITEsbGUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBsZSYmKGxlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxSKGxlLmtleSksbGUpfX1mdW5jdGlvbiBSKEEpe3ZhciBhZT1mdW5jdGlvbiBqKEEsYWUpe2lmKCJvYmplY3QiIT09''@;'; put 'put ''cmUoQSl8fG51bGw9PT1BKXJldHVybiBBO3ZhciBuZT1BW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09bmUpe3ZhciBsZT1uZS5jYWxsKEEsYWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1yZShsZSkpcmV0dXJuIGxlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09YWU/U3RyaW5nOk51bWJlcikoQSl9KEEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09cmUoYWUpP2FlOlN0cmluZyhhZSl9ZnVuY3Rpb24gWShBLGFlKXtpZihhZSYmKCJvYmplY3QiPT09cmUo''@;'; put 'put ''YWUpfHwiZnVuY3Rpb24iPT10eXBlb2YgYWUpKXJldHVybiBhZTtpZih2b2lkIDAhPT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBCKEEpfWZ1bmN0aW9uIEIoQSl7aWYodm9p''@;'; put 'put ''ZCAwPT09QSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBBfWZ1bmN0aW9uIFcoQSl7dmFyIGFlPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0''@;'; put 'put ''dXJuIFc9ZnVuY3Rpb24obGUpe2lmKG51bGw9PT1sZXx8IWZ1bmN0aW9uIFEoQSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEEpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0obGUpKXJldHVybiBsZTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbGUpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih0eXBlb2YgYWU8InUiKXtpZihhZS5oYXMobGUpKXJldHVybiBhZS5nZXQobGUpO2FlLnNldChsZSx3ZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gWihsZSxhcmd1bWVudHMsdGUodGhp''@;'; put 'put ''cykuY29uc3RydWN0b3IpfXJldHVybiB3ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp3ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxYKHdlLGxlKX0sVyhBKX1mdW5jdGlvbiBaKEEsYWUsbmUp''@;'; put 'put ''e3JldHVybihaPXEoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5kKCk6ZnVuY3Rpb24od2UsVWUsUWUpe3ZhciBvdD1bbnVsbF07b3QucHVzaC5hcHBseShvdCxVZSk7dmFyIHZlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHdlLG90KSk7cmV0dXJuIFFlJiZYKHZlLFFlLnByb3RvdHlwZSksdmV9''@;'; put 'put ''KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xl''@;'; put 'put ''YW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBYKEEsYWUpe3JldHVybihYPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgp''@;'; put 'put ''OmZ1bmN0aW9uKGxlLHdlKXtyZXR1cm4gbGUuX19wcm90b19fPXdlLGxlfSkoQSxhZSl9ZnVuY3Rpb24gdGUoQSl7cmV0dXJuKHRlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUuX19wcm90b19ffHxPYmpl''@;'; put 'put ''Y3QuZ2V0UHJvdG90eXBlT2YobmUpfSkoQSl9ZnVuY3Rpb24gcmUoQSl7cmV0dXJuKHJlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGFlKXtyZXR1cm4gdHlwZW9mIGFlfTpmdW5jdGlvbihhZSl7cmV0dXJuIGFl''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYWUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBhZX0pKEEpfXZhciBnZT1iKDk1MzkpLmluc3BlY3QsVGU9YigyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5j''@;'; put 'put ''dGlvbiBTZShBLGFlLG5lKXtyZXR1cm4odm9pZCAwPT09bmV8fG5lPkEubGVuZ3RoKSYmKG5lPUEubGVuZ3RoKSxBLnN1YnN0cmluZyhuZS1hZS5sZW5ndGgsbmUpPT09YWV9dmFyIHo9IiIsZz0iIix5PSIiLHg9IiIsQz17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUg''@;'; put 'put ''c3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVj''@;'; put 'put ''dGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0''@;'; put 'put ''RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFs''@;'; put 'put ''IiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBWKEEpe3Zh''@;'; put 'put ''ciBhZT1PYmplY3Qua2V5cyhBKSxuZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihBKSk7cmV0dXJuIGFlLmZvckVhY2goZnVuY3Rpb24obGUpe25lW2xlXT1BW2xlXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSwibWVzc2FnZSIse3ZhbHVlOkEubWVzc2FnZX0pLG5l''@;'; put 'put ''fWZ1bmN0aW9uIFUoQSl7cmV0dXJuIGdlKEEse2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBtPWZ1bmN0aW9u''@;'; put 'put ''KEEsYWUpeyFmdW5jdGlvbiBQKEEsYWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhZSYmbnVsbCE9PWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhZSYm''@;'; put 'put ''YWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYWUmJlgoQSxhZSl9KGxlLEEpO3ZhciBuZT1mdW5jdGlvbiBMKEEpe3ZhciBhZT1x''@;'; put 'put ''KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHdlLGxlPXRlKEEpO2lmKGFlKXt2YXIgVWU9dGUodGhpcykuY29uc3RydWN0b3I7d2U9UmVmbGVjdC5jb25zdHJ1Y3QobGUsYXJndW1lbnRzLFVlKX1lbHNlIHdlPWxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gWSh0aGlzLHdlKX19KGxl''@;'; put 'put ''KTtmdW5jdGlvbiBsZSh3ZSl7dmFyIFVlO2lmKGZ1bmN0aW9uIHcoQSxhZSl7aWYoIShBIGluc3RhbmNlb2YgYWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGxlKSwib2JqZWN0IiE9PXJlKHdlKXx8bnVsbD09PXdlKXRo''@;'; put 'put ''cm93IG5ldyBUZSgib3B0aW9ucyIsIk9iamVjdCIsd2UpO3ZhciBRZT13ZS5tZXNzYWdlLG90PXdlLm9wZXJhdG9yLE1lPXdlLnN0YWNrU3RhcnRGbix2ZT13ZS5hY3R1YWwsWGU9d2UuZXhwZWN0ZWQsQmU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0w''@;'; put 'put ''LG51bGwhPVFlKVVlPW5lLmNhbGwodGhpcyxTdHJpbmcoUWUpKTtlbHNlIGlmKEQuc3RkZXJyJiZELnN0ZGVyci5pc1RUWSYmKEQuc3RkZXJyJiZELnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09RC5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyh6PSJceDFiWzM0bSIsZz0iXHgxYlszMm0iLHg9''@;'; put 'put ''Ilx4MWJbMzltIix5PSJceDFiWzMxbSIpOih6PSIiLGc9IiIseD0iIix5PSIiKSksIm9iamVjdCI9PT1yZSh2ZSkmJm51bGwhPT12ZSYmIm9iamVjdCI9PT1yZShYZSkmJm51bGwhPT1YZSYmInN0YWNrImluIHZlJiZ2ZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4gWGUmJlhlIGluc3Rh''@;'; put 'put ''bmNlb2YgRXJyb3ImJih2ZT1WKHZlKSxYZT1WKFhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1vdHx8InN0cmljdEVxdWFsIj09PW90KVVlPW5lLmNhbGwodGhpcyxmdW5jdGlvbiBFKEEsYWUsbmUpe3ZhciBsZT0iIix3ZT0iIixVZT0wLFFlPSIiLG90PSExLE1lPVUoQSksdmU9TWUuc3BsaXQo''@;'; put 'put ''IlxuIiksWGU9VShhZSkuc3BsaXQoIlxuIiksQmU9MCxBZT0iIjtpZigic3RyaWN0RXF1YWwiPT09bmUmJiJvYmplY3QiPT09cmUoQSkmJiJvYmplY3QiPT09cmUoYWUpJiZudWxsIT09QSYmbnVsbCE9PWFlJiYobmU9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PXZlLmxlbmd0aCYmMT09PVhl''@;'; put 'put ''Lmxlbmd0aCYmdmVbMF0hPT1YZVswXSl7dmFyIEZlPXZlWzBdLmxlbmd0aCtYZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09cmUoQSkmJm51bGwhPT1BfHwib2JqZWN0Ij09PXJlKGFlKSYmbnVsbCE9PWFlfHwwPT09QSYmMD09PWFlKSlyZXR1cm4iIi5jb25jYXQoQ1tu''@;'; put 'put ''ZV0sIlxuXG4iKSsiIi5jb25jYXQodmVbMF0sIiAhPT0gIikuY29uY2F0KFhlWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PW5lJiZGZTwoRC5zdGRlcnImJkQuc3RkZXJyLmlzVFRZP0Quc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO3ZlWzBdW0JlXT09PVhlWzBdW0Jl''@;'; put 'put ''XTspQmUrKztCZT4yJiYoQWU9IlxuICAiLmNvbmNhdChmdW5jdGlvbiB6ZShBLGFlKXtpZihhZT1NYXRoLmZsb29yKGFlKSwwPT1BLmxlbmd0aHx8MD09YWUpcmV0dXJuIiI7dmFyIG5lPUEubGVuZ3RoKmFlO2ZvcihhZT1NYXRoLmZsb29yKE1hdGgubG9nKGFlKS9NYXRoLmxvZygyKSk7YWU7''@;'; put 'put ''KUErPUEsYWUtLTtyZXR1cm4gQStBLnN1YnN0cmluZygwLG5lLUEubGVuZ3RoKX0oIiAiLEJlKSwiXiIpLEJlPTApfX1mb3IodmFyIEllPXZlW3ZlLmxlbmd0aC0xXSxIZT1YZVtYZS5sZW5ndGgtMV07SWU9PT1IZSYmKEJlKys8Mj9RZT0iXG4gICIuY29uY2F0KEllKS5jb25jYXQoUWUpOmxl''@;'; put 'put ''PUllLHZlLnBvcCgpLFhlLnBvcCgpLDAhPT12ZS5sZW5ndGgmJjAhPT1YZS5sZW5ndGgpOylJZT12ZVt2ZS5sZW5ndGgtMV0sSGU9WGVbWGUubGVuZ3RoLTFdO3ZhciBEZT1NYXRoLm1heCh2ZS5sZW5ndGgsWGUubGVuZ3RoKTtpZigwPT09RGUpe3ZhciBrZT1NZS5zcGxpdCgiXG4iKTtpZihr''@;'; put 'put ''ZS5sZW5ndGg+MzApZm9yKGtlWzI2XT0iIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpO2tlLmxlbmd0aD4yNzspa2UucG9wKCk7cmV0dXJuIiIuY29uY2F0KEMubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KGtlLmpvaW4oIlxuIiksIlxuIil9QmU+MyYmKFFlPSJcbiIuY29uY2F0KHos''@;'; put 'put ''Ii4uLiIpLmNvbmNhdCh4KS5jb25jYXQoUWUpLG90PSEwKSwiIiE9PWxlJiYoUWU9IlxuICAiLmNvbmNhdChsZSkuY29uY2F0KFFlKSxsZT0iIik7dmFyIF90PTAsbnQ9Q1tuZV0rIlxuIi5jb25jYXQoZywiKyBhY3R1YWwiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh5LCItIGV4cGVjdGVkIiku''@;'; put 'put ''Y29uY2F0KHgpLEplPSIgIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgsIiBMaW5lcyBza2lwcGVkIik7Zm9yKEJlPTA7QmU8RGU7QmUrKyl7dmFyIGxuPUJlLVVlO2lmKHZlLmxlbmd0aDxCZSsxKWxuPjEmJkJlPjImJihsbj40Pyh3ZSs9IlxuIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgp''@;'; put 'put ''LG90PSEwKTpsbj4zJiYod2UrPSJcbiAgIi5jb25jYXQoWGVbQmUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KFhlW0JlLTFdKSxfdCsrKSxVZT1CZSxsZSs9IlxuIi5jb25jYXQoeSwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KFhlW0JlXSksX3QrKztlbHNlIGlmKFhlLmxlbmd0aDxC''@;'; put 'put ''ZSsxKWxuPjEmJkJlPjImJihsbj40Pyh3ZSs9IlxuIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpLG90PSEwKTpsbj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbQmUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW0JlLTFdKSxfdCsrKSxVZT1CZSx3ZSs9IlxuIi5jb25jYXQoZywi''@;'; put 'put ''KyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHZlW0JlXSksX3QrKztlbHNle3ZhciB5dD1YZVtCZV0sU3Q9dmVbQmVdLER0PVN0IT09eXQmJighU2UoU3QsIiwiKXx8U3Quc2xpY2UoMCwtMSkhPT15dCk7RHQmJlNlKHl0LCIsIikmJnl0LnNsaWNlKDAsLTEpPT09U3QmJihEdD0hMSxTdCs9Iiwi''@;'; put 'put ''KSxEdD8obG4+MSYmQmU+MiYmKGxuPjQ/KHdlKz0iXG4iLmNvbmNhdCh6LCIuLi4iKS5jb25jYXQoeCksb3Q9ITApOmxuPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVtCZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbQmUtMV0pLF90KyspLFVlPUJlLHdlKz0iXG4iLmNvbmNhdChn''@;'; put 'put ''LCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoU3QpLGxlKz0iXG4iLmNvbmNhdCh5LCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeXQpLF90Kz0yKTood2UrPWxlLGxlPSIiLCgxPT09bG58fDA9PT1CZSkmJih3ZSs9IlxuICAiLmNvbmNhdChTdCksX3QrKykpfWlmKF90PjIwJiZCZTxEZS0y''@;'; put 'put ''KXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KEplLCJcbiIpLmNvbmNhdCh3ZSwiXG4iKS5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChsZSwiXG4iKSsiIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpfXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KG90P0plOiIiLCJcbiIp''@;'; put 'put ''LmNvbmNhdCh3ZSkuY29uY2F0KGxlKS5jb25jYXQoUWUpLmNvbmNhdChBZSl9KHZlLFhlLG90KSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PW90fHwibm90U3RyaWN0RXF1YWwiPT09b3Qpe3ZhciBBZT1DW290XSxGZT1VKHZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1''@;'; put 'put ''YWwiPT09b3QmJiJvYmplY3QiPT09cmUodmUpJiZudWxsIT09dmUmJihBZT1DLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxGZS5sZW5ndGg+MzApZm9yKEZlWzI2XT0iIi5jb25jYXQoeiwiLi4uIikuY29uY2F0KHgpO0ZlLmxlbmd0aD4yNzspRmUucG9wKCk7VWU9bmUuY2FsbCh0aGlzLDE9PT1G''@;'; put 'put ''ZS5sZW5ndGg/IiIuY29uY2F0KEFlLCIgIikuY29uY2F0KEZlWzBdKToiIi5jb25jYXQoQWUsIlxuXG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgUmU9VSh2ZSksSWU9IiIsSGU9Q1tvdF07Im5vdERlZXBFcXVhbCI9PT1vdHx8Im5vdEVxdWFsIj09PW90PyhSZT0i''@;'; put 'put ''Ii5jb25jYXQoQ1tvdF0sIlxuXG4iKS5jb25jYXQoUmUpKS5sZW5ndGg+MTAyNCYmKFJlPSIiLmNvbmNhdChSZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KEllPSIiLmNvbmNhdChVKFhlKSksUmUubGVuZ3RoPjUxMiYmKFJlPSIiLmNvbmNhdChSZS5zbGljZSgwLDUwOSksIi4uLiIpKSxJZS5s''@;'; put 'put ''ZW5ndGg+NTEyJiYoSWU9IiIuY29uY2F0KEllLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09b3R8fCJlcXVhbCI9PT1vdD9SZT0iIi5jb25jYXQoSGUsIlxuXG4iKS5jb25jYXQoUmUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6SWU9IiAiLmNvbmNhdChvdCwiICIpLmNvbmNh''@;'; put 'put ''dChJZSkpLFVlPW5lLmNhbGwodGhpcywiIi5jb25jYXQoUmUpLmNvbmNhdChJZSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9QmUsVWUuZ2VuZXJhdGVkTWVzc2FnZT0hUWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEIoVWUpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtF''@;'; put 'put ''UlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxVZS5jb2RlPSJFUlJfQVNTRVJUSU9OIixVZS5hY3R1YWw9dmUsVWUuZXhwZWN0ZWQ9WGUsVWUub3BlcmF0b3I9b3QsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVT''@;'; put 'put ''dGFja1RyYWNlKEIoVWUpLE1lKSxVZS5uYW1lPSJBc3NlcnRpb25FcnJvciIsWShVZSl9cmV0dXJuIGZ1bmN0aW9uIEgoQSxhZSxuZSl7YWUmJkYoQS5wcm90b3R5cGUsYWUpLG5lJiZGKEEsbmUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShs''@;'; put 'put ''ZSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6YWUsdmFsdWU6ZnVuY3Rpb24oVWUsUWUpe3JldHVybiBnZSh0aGlzLHAocCh7''@;'; put 'put ''fSxRZSkse30se2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSksbGV9KFcoRXJyb3IpLGdlLmN1c3RvbSk7Y2UuZXhwb3J0cz1tfSwyMTM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoZ2Upe3JldHVybihEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKF9lKXtyZXR1cm4gdHlwZW9mIF9lfTpmdW5jdGlvbihfZSl7cmV0dXJuIF9lJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZfZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmX2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wi''@;'; put 'put ''OnR5cGVvZiBfZX0pKGdlKX1mdW5jdGlvbiBfKGdlLF9lKXtmb3IodmFyIFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspe3ZhciBTZT1fZVtUZV07U2UuZW51bWVyYWJsZT1TZS5lbnVtZXJhYmxlfHwhMSxTZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFNlJiYoU2Uud3JpdGFibGU9ITApLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShnZSxOKFNlLmtleSksU2UpfX1mdW5jdGlvbiBOKGdlKXt2YXIgX2U9ZnVuY3Rpb24gdyhnZSxfZSl7aWYoIm9iamVjdCIhPT1EKGdlKXx8bnVsbD09PWdlKXJldHVybiBnZTt2YXIgVGU9Z2VbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1UZSl7''@;'; put 'put ''dmFyIFNlPVRlLmNhbGwoZ2UsX2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1EKFNlKSlyZXR1cm4gU2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1fZT9TdHJpbmc6TnVtYmVy''@;'; put 'put ''KShnZSl9KGdlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PUQoX2UpP19lOlN0cmluZyhfZSl9ZnVuY3Rpb24gUihnZSxfZSl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oU2UsemUpe3JldHVybiBTZS5fX3By''@;'; put 'put ''b3RvX189emUsU2V9KShnZSxfZSl9ZnVuY3Rpb24gQihnZSl7cmV0dXJuKEI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oVGUpe3JldHVybiBUZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihUZSl9KShnZSl9dmFy''@;'; put 'put ''IFoscSxXPXt9O2Z1bmN0aW9uIFEoZ2UsX2UsVGUpe1RlfHwoVGU9RXJyb3IpO3ZhciB6ZT1mdW5jdGlvbih6KXshZnVuY3Rpb24gSChnZSxfZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lJiZudWxsIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVp''@;'; put 'put ''dGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtnZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfZSYmX2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6Z2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSwicHJvdG90eXBlIix7''@;'; put 'put ''d3JpdGFibGU6ITF9KSxfZSYmUihnZSxfZSl9KHkseik7dmFyIGc9ZnVuY3Rpb24gaihnZSl7dmFyIF9lPWZ1bmN0aW9uIFkoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHplLFNlPUIoZ2UpO2lm''@;'; put 'put ''KF9lKXt2YXIgej1CKHRoaXMpLmNvbnN0cnVjdG9yO3plPVJlZmxlY3QuY29uc3RydWN0KFNlLGFyZ3VtZW50cyx6KX1lbHNlIHplPVNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gUChnZSxfZSl7aWYoX2UmJigib2JqZWN0Ij09PUQoX2UpfHwiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgX2UpKXJldHVybiBfZTtpZih2b2lkIDAhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBMKGdlKXtpZih2b2lkIDA9PT1nZSl0aHJvdyBuZXcgUmVm''@;'; put 'put ''ZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBnZX0oZ2UpfSh0aGlzLHplKX19KHkpO2Z1bmN0aW9uIHkoeCxDLFQpe3ZhciBWO3JldHVybiBmdW5jdGlvbiBGKGdlLF9lKXtpZighKGdlIGluc3Rh''@;'; put 'put ''bmNlb2YgX2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHkpLFY9Zy5jYWxsKHRoaXMsZnVuY3Rpb24gU2UoeixnLHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgX2U/X2U6X2UoeixnLHkpfSh4LEMsVCkpLFYuY29kZT1n''@;'; put 'put ''ZSxWfXJldHVybiBmdW5jdGlvbiBwKGdlLF9lLFRlKXtyZXR1cm4gX2UmJl8oZ2UucHJvdG90eXBlLF9lKSxUZSYmXyhnZSxUZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGdlfSh5KX0oVGUpO1dbZ2VdPXplfWZ1bmN0aW9uIFgoZ2UsX2Up''@;'; put 'put ''e2lmKEFycmF5LmlzQXJyYXkoZ2UpKXt2YXIgVGU9Z2UubGVuZ3RoO3JldHVybiBnZT1nZS5tYXAoZnVuY3Rpb24oU2Upe3JldHVybiBTdHJpbmcoU2UpfSksVGU+Mj8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlLnNsaWNlKDAsVGUtMSkuam9pbigiLCAiKSwiLCBvciAiKStn''@;'; put 'put ''ZVtUZS0xXToyPT09VGU/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChnZVswXSwiIG9yICIpLmNvbmNhdChnZVsxXSk6Im9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQoU3RyaW5nKGdlKSl9USgiRVJSX0FN''@;'; put 'put ''QklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksUSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKGdlLF9lLFRlKXt2YXIgU2UsemU7aWYodm9pZCAwPT09WiYmKFo9Yig5MjgyKSksWigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGdlLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgX2UmJmZ1bmN0aW9uIHRlKGdlLF9lLFRlKXtyZXR1cm4gZ2Uuc3Vic3RyKCFUZXx8VGU8MD8wOitUZSxfZS5sZW5ndGgpPT09X2V9KF9lLCJub3QgIik/KFNlPSJtdXN0IG5vdCBiZSIsX2U9X2UucmVwbGFj''@;'; put 'put ''ZSgvXm5vdCAvLCIiKSk6U2U9Im11c3QgYmUiLGZ1bmN0aW9uIHJlKGdlLF9lLFRlKXtyZXR1cm4odm9pZCAwPT09VGV8fFRlPmdlLmxlbmd0aCkmJihUZT1nZS5sZW5ndGgpLGdlLnN1YnN0cmluZyhUZS1fZS5sZW5ndGgsVGUpPT09X2V9KGdlLCIgYXJndW1lbnQiKSl6ZT0iVGhlICIuY29u''@;'; put 'put ''Y2F0KGdlLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KFgoX2UsInR5cGUiKSk7ZWxzZXt2YXIgej1mdW5jdGlvbiBvZShnZSxfZSxUZSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBUZSYmKFRlPTApLCEoVGUrX2UubGVuZ3RoPmdlLmxlbmd0aCkmJi0xIT09Z2UuaW5kZXhPZihfZSxUZSl9''@;'; put 'put ''KGdlLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO3plPSdUaGUgIicuY29uY2F0KGdlLCciICcpLmNvbmNhdCh6LCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KFgoX2UsInR5cGUiKSl9cmV0dXJuIHplKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoRChUZSkpfSxUeXBlRXJyb3IpLFEo''@;'; put 'put ''IkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24oZ2UsX2Upe3ZhciBUZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXEmJihxPWIoOTUzOSkpO3ZhciBTZT1xLmluc3BlY3QoX2UpO3JldHVy''@;'; put 'put ''biBTZS5sZW5ndGg+MTI4JiYoU2U9IiIuY29uY2F0KFNlLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KGdlLCInICIpLmNvbmNhdChUZSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoU2UpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksUSgiRVJSX0lOVkFMSURfUkVU''@;'; put 'put ''VVJOX1ZBTFVFIixmdW5jdGlvbihnZSxfZSxUZSl7dmFyIFNlO3JldHVybiBTZT1UZSYmVGUuY29uc3RydWN0b3ImJlRlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KFRlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KEQoVGUpKSwiRXhwZWN0ZWQgIi5j''@;'; put 'put ''b25jYXQoZ2UsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KF9lLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KFNlLCIuIil9LFR5cGVFcnJvciksUSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIGdlPWFyZ3VtZW50cy5sZW5ndGgsX2U9''@;'; put 'put ''bmV3IEFycmF5KGdlKSxUZT0wO1RlPGdlO1RlKyspX2VbVGVdPWFyZ3VtZW50c1tUZV07dm9pZCAwPT09WiYmKFo9Yig5MjgyKSksWihfZS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgU2U9IlRoZSAiLHplPV9lLmxlbmd0aDtzd2l0Y2go''@;'; put 'put ''X2U9X2UubWFwKGZ1bmN0aW9uKHope3JldHVybiciJy5jb25jYXQoeiwnIicpfSksemUpe2Nhc2UgMTpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFuZCAiKS5jb25jYXQoX2VbMV0sIiBhcmd1bWVudHMiKTticmVh''@;'; put 'put ''aztkZWZhdWx0OlNlKz1fZS5zbGljZSgwLHplLTEpLmpvaW4oIiwgIiksU2UrPSIsIGFuZCAiLmNvbmNhdChfZVt6ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChTZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksY2UuZXhwb3J0cy5jb2Rlcz1XfSw5MTU4Oihj''@;'; put 'put ''ZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoRHQsaXQpe3JldHVybiBmdW5jdGlvbiBGKER0KXtpZihBcnJheS5pc0FycmF5KER0KSlyZXR1cm4gRHR9KER0KXx8ZnVuY3Rpb24gdyhEdCxpdCl7dmFyICRlPW51bGw9PUR0P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkR0W1N5bWJv''@;'; put 'put ''bC5pdGVyYXRvcl18fER0WyJAQGl0ZXJhdG9yIl07aWYobnVsbCE9JGUpe3ZhciB0dCxOZSx1dCxxdCxSdD1bXSxQdD0hMCxjaT0hMTt0cnl7aWYodXQ9KCRlPSRlLmNhbGwoRHQpKS5uZXh0LDA9PT1pdCl7aWYoT2JqZWN0KCRlKSE9PSRlKXJldHVybjtQdD0hMX1lbHNlIGZvcig7IShQdD0o''@;'; put 'put ''dHQ9dXQuY2FsbCgkZSkpLmRvbmUpJiYoUnQucHVzaCh0dC52YWx1ZSksUnQubGVuZ3RoIT09aXQpO1B0PSEwKTt9Y2F0Y2goUXQpe2NpPSEwLE5lPVF0fWZpbmFsbHl7dHJ5e2lmKCFQdCYmbnVsbCE9JGUucmV0dXJuJiYocXQ9JGUucmV0dXJuKCksT2JqZWN0KHF0KSE9PXF0KSlyZXR1cm59''@;'; put 'put ''ZmluYWxseXtpZihjaSl0aHJvdyBOZX19cmV0dXJuIFJ0fX0oRHQsaXQpfHxmdW5jdGlvbiBwKER0LGl0KXtpZihEdCl7aWYoInN0cmluZyI9PXR5cGVvZiBEdClyZXR1cm4gTihEdCxpdCk7dmFyICRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEdCkuc2xpY2UoOCwtMSk7aWYo''@;'; put 'put ''Ik9iamVjdCI9PT0kZSYmRHQuY29uc3RydWN0b3ImJigkZT1EdC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PSRlfHwiU2V0Ij09PSRlKXJldHVybiBBcnJheS5mcm9tKER0KTtpZigiQXJndW1lbnRzIj09PSRlfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8u''@;'; put 'put ''dGVzdCgkZSkpcmV0dXJuIE4oRHQsaXQpfX0oRHQsaXQpfHxmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0''@;'; put 'put ''cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBOKER0LGl0KXsobnVsbD09aXR8fGl0PkR0Lmxlbmd0aCkmJihpdD1EdC5sZW5ndGgpO2Zvcih2YXIgJGU9MCx0dD1uZXcgQXJyYXkoaXQpOyRlPGl0OyRlKyspdHRbJGVdPUR0WyRlXTtyZXR1''@;'; put 'put ''cm4gdHR9ZnVuY3Rpb24gSChEdCl7cmV0dXJuKEg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oaXQpe3JldHVybiB0eXBlb2YgaXR9OmZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wmJml0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZpdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGl0fSkoRHQpfXZhciBSPXZvaWQgMCE9PS9hL2cuZmxhZ3Msaj1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtyZXR1''@;'; put 'put ''cm4gJGUucHVzaCh0dCl9KSwkZX0sUD1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gJGUucHVzaChbTmUsdHRdKX0pLCRlfSxMPU9iamVjdC5pcz9PYmplY3QuaXM6Yig2MDkpLFk9T2JqZWN0LmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LEI9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpiKDM2MCk7ZnVuY3Rpb24gVyhEdCl7cmV0dXJuIER0LmNhbGwuYmluZChEdCl9dmFyIFo9VyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5KSxxPVcoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSksUT1XKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLFg9Yig5NTM5KS50eXBlcyx0ZT1YLmlzQW55QXJyYXlCdWZmZXIscmU9WC5pc0FycmF5QnVmZmVyVmlldyxvZT1YLmlzRGF0ZSxnZT1YLmlzTWFwLF9l''@;'; put 'put ''PVguaXNSZWdFeHAsVGU9WC5pc1NldCxTZT1YLmlzTmF0aXZlRXJyb3IsemU9WC5pc0JveGVkUHJpbWl0aXZlLHo9WC5pc051bWJlck9iamVjdCxnPVguaXNTdHJpbmdPYmplY3QseT1YLmlzQm9vbGVhbk9iamVjdCx4PVguaXNCaWdJbnRPYmplY3QsQz1YLmlzU3ltYm9sT2JqZWN0LFQ9WC5p''@;'; put 'put ''c0Zsb2F0MzJBcnJheSxWPVguaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gVShEdCl7aWYoMD09PUR0Lmxlbmd0aHx8RHQubGVuZ3RoPjEwKXJldHVybiEwO2Zvcih2YXIgaXQ9MDtpdDxEdC5sZW5ndGg7aXQrKyl7dmFyICRlPUR0LmNoYXJDb2RlQXQoaXQpO2lmKCRlPDQ4fHwkZT41NylyZXR1''@;'; put 'put ''cm4hMH1yZXR1cm4gMTA9PT1EdC5sZW5ndGgmJkR0Pj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBFKER0KXtyZXR1cm4gT2JqZWN0LmtleXMoRHQpLmZpbHRlcihVKS5jb25jYXQoWShEdCkuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZChEdCkpKX1m''@;'; put 'put ''dW5jdGlvbiBtKER0LGl0KXtpZihEdD09PWl0KXJldHVybiAwO2Zvcih2YXIgJGU9RHQubGVuZ3RoLHR0PWl0Lmxlbmd0aCxOZT0wLHV0PU1hdGgubWluKCRlLHR0KTtOZTx1dDsrK05lKWlmKER0W05lXSE9PWl0W05lXSl7JGU9RHRbTmVdLHR0PWl0W05lXTticmVha31yZXR1cm4gJGU8dHQ/''@;'; put 'put ''LTE6dHQ8JGU/MTowfXZhciBsZT0wLHdlPTEsVWU9MixRZT0zO2Z1bmN0aW9uIEFlKER0LGl0LCRlLHR0KXtpZihEdD09PWl0KXJldHVybiAwIT09RHR8fCEkZXx8TChEdCxpdCk7aWYoJGUpe2lmKCJvYmplY3QiIT09SChEdCkpcmV0dXJuIm51bWJlciI9PXR5cGVvZiBEdCYmQihEdCkmJkIo''@;'; put 'put ''aXQpO2lmKCJvYmplY3QiIT09SChpdCl8fG51bGw9PT1EdHx8bnVsbD09PWl0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoRHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGl0KSlyZXR1cm4hMX1lbHNle2lmKG51bGw9PT1EdHx8Im9iamVjdCIhPT1IKER0KSlyZXR1cm4obnVsbD09PWl0fHwi''@;'; put 'put ''b2JqZWN0IiE9PUgoaXQpKSYmRHQ9PWl0O2lmKG51bGw9PT1pdHx8Im9iamVjdCIhPT1IKGl0KSlyZXR1cm4hMX12YXIgTmU9UShEdCk7aWYoTmUhPT1RKGl0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KER0KSl7aWYoRHQubGVuZ3RoIT09aXQubGVuZ3RoKXJldHVybiExO3ZhciBxdD1F''@;'; put 'put ''KER0KSxSdD1FKGl0KTtyZXR1cm4gcXQubGVuZ3RoPT09UnQubGVuZ3RoJiZSZShEdCxpdCwkZSx0dCx3ZSxxdCl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1OZSYmKCFnZShEdCkmJmdlKGl0KXx8IVRlKER0KSYmVGUoaXQpKSlyZXR1cm4hMTtpZihvZShEdCkpe2lmKCFvZShpdCl8fERhdGUu''@;'; put 'put ''cHJvdG90eXBlLmdldFRpbWUuY2FsbChEdCkhPT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoaXQpKXJldHVybiExfWVsc2UgaWYoX2UoRHQpKXtpZighX2UoaXQpfHwhZnVuY3Rpb24gb3QoRHQsaXQpe3JldHVybiBSP0R0LnNvdXJjZT09PWl0LnNvdXJjZSYmRHQuZmxhZ3M9PT1pdC5m''@;'; put 'put ''bGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoU2UoRHQpfHxEdCBpbnN0YW5jZW9mIEVycm9yKXtpZihEdC5tZXNzYWdlIT09aXQubWVzc2FnZXx8RHQubmFt''@;'; put 'put ''ZSE9PWl0Lm5hbWUpcmV0dXJuITF9ZWxzZXtpZihyZShEdCkpe2lmKCRlfHwhVChEdCkmJiFWKER0KSl7aWYoIWZ1bmN0aW9uIHZlKER0LGl0KXtyZXR1cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0LmJ1ZmZlcixEdC5ieXRlT2Zmc2V0''@;'; put 'put ''LER0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFycmF5KGl0LmJ1ZmZlcixpdC5ieXRlT2Zmc2V0LGl0LmJ5dGVMZW5ndGgpKX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uIE1lKER0LGl0KXtpZihEdC5ieXRlTGVuZ3RoIT09aXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFy''@;'; put 'put ''ICRlPTA7JGU8RHQuYnl0ZUxlbmd0aDskZSsrKWlmKER0WyRlXSE9PWl0WyRlXSlyZXR1cm4hMTtyZXR1cm4hMH0oRHQsaXQpKXJldHVybiExO3ZhciBQdD1FKER0KSxjaT1FKGl0KTtyZXR1cm4gUHQubGVuZ3RoPT09Y2kubGVuZ3RoJiZSZShEdCxpdCwkZSx0dCxsZSxQdCl9aWYoVGUoRHQp''@;'; put 'put ''KXJldHVybiEoIVRlKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZSZShEdCxpdCwkZSx0dCxVZSk7aWYoZ2UoRHQpKXJldHVybiEoIWdlKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZSZShEdCxpdCwkZSx0dCxRZSk7aWYodGUoRHQpKXtpZighZnVuY3Rpb24gWGUoRHQsaXQpe3JldHVybiBE''@;'; put 'put ''dC5ieXRlTGVuZ3RoPT09aXQuYnl0ZUxlbmd0aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoRHQpLG5ldyBVaW50OEFycmF5KGl0KSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKHplKER0KSYmIWZ1bmN0aW9uIEJlKER0LGl0KXtyZXR1cm4geihEdCk/eihpdCkmJkwoTnVtYmVyLnByb3RvdHlw''@;'; put 'put ''ZS52YWx1ZU9mLmNhbGwoRHQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KSk6ZyhEdCk/ZyhpdCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTp5KER0KT95KGl0KSYmQm9vbGVhbi5wcm90b3R5''@;'; put 'put ''cGUudmFsdWVPZi5jYWxsKER0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6eChEdCk/eChpdCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTpDKGl0KSYmU3ltYm9sLnByb3RvdHlwZS52''@;'; put 'put ''YWx1ZU9mLmNhbGwoRHQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpfShEdCxpdCkpcmV0dXJuITF9cmV0dXJuIFJlKER0LGl0LCRlLHR0LGxlKX1mdW5jdGlvbiBGZShEdCxpdCl7cmV0dXJuIGl0LmZpbHRlcihmdW5jdGlvbigkZSl7cmV0dXJuIHEoRHQsJGUpfSl9ZnVu''@;'; put 'put ''Y3Rpb24gUmUoRHQsaXQsJGUsdHQsTmUsdXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1PYmplY3Qua2V5cyhEdCk7dmFyIHF0PU9iamVjdC5rZXlzKGl0KTtpZih1dC5sZW5ndGghPT1xdC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBSdD0wO1J0PHV0Lmxlbmd0aDtSdCsrKWlmKCFa''@;'; put 'put ''KGl0LHV0W1J0XSkpcmV0dXJuITE7aWYoJGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUHQ9WShEdCk7aWYoMCE9PVB0Lmxlbmd0aCl7dmFyIGNpPTA7Zm9yKFJ0PTA7UnQ8UHQubGVuZ3RoO1J0Kyspe3ZhciBRdD1QdFtSdF07aWYocShEdCxRdCkpe2lmKCFxKGl0LFF0KSlyZXR1cm4h''@;'; put 'put ''MTt1dC5wdXNoKFF0KSxjaSsrfWVsc2UgaWYocShpdCxRdCkpcmV0dXJuITF9dmFyIHNuPVkoaXQpO2lmKFB0Lmxlbmd0aCE9PXNuLmxlbmd0aCYmRmUoaXQsc24pLmxlbmd0aCE9PWNpKXJldHVybiExfWVsc2V7dmFyIFJpPVkoaXQpO2lmKDAhPT1SaS5sZW5ndGgmJjAhPT1GZShpdCxSaSku''@;'; put 'put ''bGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQubGVuZ3RoJiYoTmU9PT1sZXx8TmU9PT13ZSYmMD09PUR0Lmxlbmd0aHx8MD09PUR0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXR0KXR0PXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIGhuPXR0LnZh''@;'; put 'put ''bDEuZ2V0KER0KTtpZih2b2lkIDAhPT1obil7dmFyIGZ0PXR0LnZhbDIuZ2V0KGl0KTtpZih2b2lkIDAhPT1mdClyZXR1cm4gaG49PT1mdH10dC5wb3NpdGlvbisrfXR0LnZhbDEuc2V0KER0LHR0LnBvc2l0aW9uKSx0dC52YWwyLnNldChpdCx0dC5wb3NpdGlvbik7dmFyIE9yPWZ1bmN0aW9u''@;'; put 'put ''IGxuKER0LGl0LCRlLHR0LE5lLHV0KXt2YXIgcXQ9MDtpZih1dD09PVVlKXtpZighZnVuY3Rpb24gX3QoRHQsaXQsJGUsdHQpe2Zvcih2YXIgTmU9bnVsbCx1dD1qKER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9dXRbcXRdO2lmKCJvYmplY3QiPT09SChSdCkmJm51bGwhPT1S''@;'; put 'put ''dCludWxsPT09TmUmJihOZT1uZXcgU2V0KSxOZS5hZGQoUnQpO2Vsc2UgaWYoIWl0LmhhcyhSdCkpe2lmKCRlfHwhRGUoRHQsaXQsUnQpKXJldHVybiExO251bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChSdCl9fWlmKG51bGwhPT1OZSl7Zm9yKHZhciBQdD1qKGl0KSxjaT0wO2NpPFB0''@;'; put 'put ''Lmxlbmd0aDtjaSsrKXt2YXIgUXQ9UHRbY2ldO2lmKCJvYmplY3QiPT09SChRdCkmJm51bGwhPT1RdCl7aWYoIUllKE5lLFF0LCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEkZSYmIUR0LmhhcyhRdCkmJiFJZShOZSxRdCwkZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1OZS5zaXplfXJldHVy''@;'; put 'put ''biEwfShEdCxpdCwkZSxOZSkpcmV0dXJuITF9ZWxzZSBpZih1dD09PVFlKXtpZighZnVuY3Rpb24gSmUoRHQsaXQsJGUsdHQpe2Zvcih2YXIgTmU9bnVsbCx1dD1QKER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9RCh1dFtxdF0sMiksUHQ9UnRbMF0sY2k9UnRbMV07aWYoIm9i''@;'; put 'put ''amVjdCI9PT1IKFB0KSYmbnVsbCE9PVB0KW51bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChQdCk7ZWxzZXt2YXIgUXQ9aXQuZ2V0KFB0KTtpZih2b2lkIDA9PT1RdCYmIWl0LmhhcyhQdCl8fCFBZShjaSxRdCwkZSx0dCkpe2lmKCRlfHwha2UoRHQsaXQsUHQsY2ksdHQpKXJldHVybiEx''@;'; put 'put ''O251bGw9PT1OZSYmKE5lPW5ldyBTZXQpLE5lLmFkZChQdCl9fX1pZihudWxsIT09TmUpe2Zvcih2YXIgc249UChpdCksUmk9MDtSaTxzbi5sZW5ndGg7UmkrKyl7dmFyIGhuPUQoc25bUmldLDIpLGZ0PWhuWzBdLE9yPWhuWzFdO2lmKCJvYmplY3QiPT09SChmdCkmJm51bGwhPT1mdCl7aWYo''@;'; put 'put ''IW50KE5lLER0LGZ0LE9yLCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEoJGV8fER0LmhhcyhmdCkmJkFlKER0LmdldChmdCksT3IsITEsdHQpfHxudChOZSxEdCxmdCxPciwhMSx0dCkpKXJldHVybiExfXJldHVybiAwPT09TmUuc2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsTmUpKXJldHVybiEx''@;'; put 'put ''fWVsc2UgaWYodXQ9PT13ZSlmb3IoO3F0PER0Lmxlbmd0aDtxdCsrKXtpZighWihEdCxxdCkpe2lmKFooaXQscXQpKXJldHVybiExO2Zvcih2YXIgUnQ9T2JqZWN0LmtleXMoRHQpO3F0PFJ0Lmxlbmd0aDtxdCsrKXt2YXIgUHQ9UnRbcXRdO2lmKCFaKGl0LFB0KXx8IUFlKER0W1B0XSxpdFtQ''@;'; put 'put ''dF0sJGUsTmUpKXJldHVybiExfXJldHVybiBSdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhpdCkubGVuZ3RofWlmKCFaKGl0LHF0KXx8IUFlKER0W3F0XSxpdFtxdF0sJGUsTmUpKXJldHVybiExfWZvcihxdD0wO3F0PHR0Lmxlbmd0aDtxdCsrKXt2YXIgY2k9dHRbcXRdO2lmKCFBZShEdFtjaV0s''@;'; put 'put ''aXRbY2ldLCRlLE5lKSlyZXR1cm4hMX1yZXR1cm4hMH0oRHQsaXQsJGUsdXQsdHQsTmUpO3JldHVybiB0dC52YWwxLmRlbGV0ZShEdCksdHQudmFsMi5kZWxldGUoaXQpLE9yfWZ1bmN0aW9uIEllKER0LGl0LCRlLHR0KXtmb3IodmFyIE5lPWooRHQpLHV0PTA7dXQ8TmUubGVuZ3RoO3V0Kysp''@;'; put 'put ''e3ZhciBxdD1OZVt1dF07aWYoQWUoaXQscXQsJGUsdHQpKXJldHVybiBEdC5kZWxldGUocXQpLCEwfXJldHVybiExfWZ1bmN0aW9uIEhlKER0KXtzd2l0Y2goSChEdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4h''@;'; put 'put ''MTtjYXNlInN0cmluZyI6RHQ9K0R0O2Nhc2UibnVtYmVyIjppZihCKER0KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBEZShEdCxpdCwkZSl7dmFyIHR0PUhlKCRlKTtyZXR1cm4gdHQ/PyhpdC5oYXModHQpJiYhRHQuaGFzKHR0KSl9ZnVuY3Rpb24ga2UoRHQsaXQsJGUsdHQsTmUpe3Zh''@;'; put 'put ''ciB1dD1IZSgkZSk7aWYobnVsbCE9dXQpcmV0dXJuIHV0O3ZhciBxdD1pdC5nZXQodXQpO3JldHVybiEodm9pZCAwPT09cXQmJiFpdC5oYXModXQpfHwhQWUodHQscXQsITEsTmUpKSYmIUR0Lmhhcyh1dCkmJkFlKHR0LHF0LCExLE5lKX1mdW5jdGlvbiBudChEdCxpdCwkZSx0dCxOZSx1dCl7''@;'; put 'put ''Zm9yKHZhciBxdD1qKER0KSxSdD0wO1J0PHF0Lmxlbmd0aDtSdCsrKXt2YXIgUHQ9cXRbUnRdO2lmKEFlKCRlLFB0LE5lLHV0KSYmQWUodHQsaXQuZ2V0KFB0KSxOZSx1dCkpcmV0dXJuIER0LmRlbGV0ZShQdCksITB9cmV0dXJuITF9Y2UuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24g''@;'; put 'put ''eXQoRHQsaXQpe3JldHVybiBBZShEdCxpdCwhMSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uIFN0KER0LGl0KXtyZXR1cm4gQWUoRHQsaXQsITApfX19LDgyMjQ6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxKLndyYXBwZXI9ZnVuY3Rpb24gYihEKXtyZXR1cm4gRH19LDk3NDI6KGNlLEopPT57InVzZSBzdHJpY3QiO0ouYnl0ZUxlbmd0aD1mdW5jdGlvbiBIKEIpe3ZhciBXPUYoQikscT1XWzFdO3JldHVybiAzKihXWzBdK3EpLzQtcX0sSi50b0J5dGVBcnJheT1mdW5jdGlvbiBqKEIpe3ZhciBX''@;'; put 'put ''LG9lLFo9RihCKSxxPVpbMF0sUT1aWzFdLFg9bmV3IF8oZnVuY3Rpb24gUihCLFcsWil7cmV0dXJuIDMqKFcrWikvNC1afSgwLHEsUSkpLHRlPTAscmU9UT4wP3EtNDpxO2ZvcihvZT0wO29lPHJlO29lKz00KVc9RFtCLmNoYXJDb2RlQXQob2UpXTw8MTh8RFtCLmNoYXJDb2RlQXQob2UrMSld''@;'; put 'put ''PDwxMnxEW0IuY2hhckNvZGVBdChvZSsyKV08PDZ8RFtCLmNoYXJDb2RlQXQob2UrMyldLFhbdGUrK109Vz4+MTYmMjU1LFhbdGUrK109Vz4+OCYyNTUsWFt0ZSsrXT0yNTUmVztyZXR1cm4gMj09PVEmJihXPURbQi5jaGFyQ29kZUF0KG9lKV08PDJ8RFtCLmNoYXJDb2RlQXQob2UrMSldPj40''@;'; put 'put ''LFhbdGUrK109MjU1JlcpLDE9PT1RJiYoVz1EW0IuY2hhckNvZGVBdChvZSldPDwxMHxEW0IuY2hhckNvZGVBdChvZSsxKV08PDR8RFtCLmNoYXJDb2RlQXQob2UrMildPj4yLFhbdGUrK109Vz4+OCYyNTUsWFt0ZSsrXT0yNTUmVyksWH0sSi5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIFkoQil7''@;'; put 'put ''Zm9yKHZhciBXLFo9Qi5sZW5ndGgscT1aJTMsUT1bXSxYPTE2MzgzLHRlPTAscmU9Wi1xO3RlPHJlO3RlKz1YKVEucHVzaChMKEIsdGUsdGUrWD5yZT9yZTp0ZStYKSk7cmV0dXJuIDE9PT1xP1EucHVzaChiWyhXPUJbWi0xXSk+PjJdK2JbVzw8NCY2M10rIj09Iik6Mj09PXEmJlEucHVzaChi''@;'; put 'put ''WyhXPShCW1otMl08PDgpK0JbWi0xXSk+PjEwXStiW1c+PjQmNjNdK2JbVzw8MiY2M10rIj0iKSxRLmpvaW4oIiIpfTtmb3IodmFyIGI9W10sRD1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LHA9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hp''@;'; put 'put ''amtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLE49MDtOPDY0OysrTiliW05dPXBbTl0sRFtwLmNoYXJDb2RlQXQoTildPU47ZnVuY3Rpb24gRihCKXt2YXIgVz1CLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11''@;'; put 'put ''bHRpcGxlIG9mIDQiKTt2YXIgWj1CLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PVomJihaPVcpLFtaLFo9PT1XPzA6NC1aJTRdfWZ1bmN0aW9uIFAoQil7cmV0dXJuIGJbQj4+MTgmNjNdK2JbQj4+MTImNjNdK2JbQj4+NiY2M10rYls2MyZCXX1mdW5jdGlvbiBMKEIsVyxaKXtmb3IodmFyIFE9''@;'; put 'put ''W10sWD1XO1g8WjtYKz0zKVEucHVzaChQKChCW1hdPDwxNiYxNjcxMTY4MCkrKEJbWCsxXTw8OCY2NTI4MCkrKDI1NSZCW1grMl0pKSk7cmV0dXJuIFEuam9pbigiIil9RFs0NV09NjIsRFs5NV09NjN9LDM1NTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7''@;'; put 'put ''ZnVuY3Rpb24gcCh4LEMpe2lmKCF4KXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeCxDKXt4LnN1cGVyXz1DO3ZhciBUPWZ1bmN0aW9uKCl7fTtULnByb3RvdHlwZT1DLnByb3RvdHlwZSx4LnByb3RvdHlwZT1uZXcgVCx4LnByb3RvdHlwZS5jb25z''@;'; put 'put ''dHJ1Y3Rvcj14fWZ1bmN0aW9uIHcoeCxDLFQpe2lmKHcuaXNCTih4KSlyZXR1cm4geDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eCYmKCgibGUiPT09Q3x8ImJlIj09PUMpJiYoVD1DLEM9MTApLHRoaXMuX2luaXQo''@;'; put 'put ''eHx8MCxDfHwxMCxUfHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjAxKS5CdWZmZXJ9''@;'; put 'put ''Y2F0Y2h7fWZ1bmN0aW9uIEgoeCxDKXt2YXIgVD14LmNoYXJDb2RlQXQoQyk7cmV0dXJuIFQ+PTQ4JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIHAoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gUih4LEMsVCl7dmFy''@;'; put 'put ''IFY9SCh4LFQpO3JldHVybiBULTE+PUMmJihWfD1IKHgsVC0xKTw8NCksVn1mdW5jdGlvbiBqKHgsQyxULFYpe2Zvcih2YXIgVT0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O1UqPVYsRT1hZT49NDk/YWUtNDkrMTA6''@;'; put 'put ''YWU+PTE3P2FlLTE3KzEwOmFlLHAoYWU+PTAmJkU8ViwiSW52YWxpZCBjaGFyYWN0ZXIiKSxVKz1FfXJldHVybiBVfWZ1bmN0aW9uIFAoeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gQyBpbnN0YW5jZW9mIHd8fG51bGwhPT1DJiYib2JqZWN0Ij09dHlwZW9mIEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0s''@;'; put 'put ''dy5taW49ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk8MD9DOlR9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsVCxWKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULFYpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KEMsVCxWKTsiaGV4Ij09PVQmJihUPTE2KSxwKFQ9PT0oMHxUKSYmVD49MiYmVDw9MzYpO3ZhciBVPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihVKyssdGhpcy5uZWdhdGl2ZT0xKSxVPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3Bh''@;'; put 'put ''cnNlSGV4KEMsVSxWKToodGhpcy5fcGFyc2VCYXNlKEMsVCxVKSwibGUiPT09ViYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsVikpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULFYpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0''@;'; put 'put ''Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDXSx0aGlzLmxlbmd0aD0xKTpDPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZD''@;'; put 'put ''LEMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULFYpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxWKXtpZihwKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3Ro''@;'; put 'put ''PD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPTA7dmFyIEUs''@;'; put 'put ''bSxBPTA7aWYoImJlIj09PVYpZm9yKFU9Qy5sZW5ndGgtMSxFPTA7VT49MDtVLT0zKXRoaXMud29yZHNbRV18PShtPUNbVV18Q1tVLTFdPDw4fENbVS0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7''@;'; put 'put ''ZWxzZSBpZigibGUiPT09Vilmb3IoVT0wLEU9MDtVPEMubGVuZ3RoO1UrPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tVXXxDW1UrMV08PDh8Q1tVKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKEMsVCxWKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndv''@;'; put 'put ''cmRzW1VdPTA7dmFyIEEsRT0wLG09MDtpZigiYmUiPT09Vilmb3IoVT1DLmxlbmd0aC0xO1U+PVQ7VS09MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihVPShDLmxlbmd0''@;'; put 'put ''aC1UKSUyPT0wP1QrMTpUO1U8Qy5sZW5ndGg7VSs9MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMs''@;'; put 'put ''VCxWKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgVT0wLEU9MTtFPD02NzEwODg2MztFKj1UKVUrKztVLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtVixBPW0lVSxhZT1NYXRoLm1pbihtLG0tQSkrVixuZT0wLGxlPVY7bGU8YWU7bGUrPVUpbmU9aihDLGxlLGxl''@;'; put 'put ''K1UsVCksdGhpcy5pbXVsbihFKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKG5lPWooQyxsZSxDLmxlbmd0aCxUKSxsZT0wO2xlPEE7bGUrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlz''@;'; put 'put ''LndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndv''@;'; put 'put ''cmRzW1RdPXRoaXMud29yZHNbVF07Qy5sZW5ndGg9dGhpcy5sZW5ndGgsQy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtQKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHco''@;'; put 'put ''bnVsbCk7cmV0dXJuIHRoaXMuY29weShDKSxDfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVu''@;'; put 'put ''Z3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBl''@;'; put 'put ''Lmluc3BlY3Q9TDtmdW5jdGlvbiBMKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIFk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sQj1b''@;'; put 'put ''MCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5''@;'; put 'put ''NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUs''@;'; put 'put ''Mjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFEoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBWPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9VixWPVYtMXwwO3ZhciBVPTB8eC53b3Jk''@;'; put 'put ''c1swXSxFPTB8Qy53b3Jkc1swXSxtPVUqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxWO25lKyspe2Zvcih2YXIgbGU9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxRZT1NYXRoLm1heCgwLG5l''@;'; put 'put ''LXgubGVuZ3RoKzEpO1FlPD1VZTtRZSsrKWxlKz0obT0oVT0wfHgud29yZHNbbmUtUWV8MF0pKihFPTB8Qy53b3Jkc1tRZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1tuZV09MHx3ZSxhZT0wfGxlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0''@;'; put 'put ''aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgVjtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtWPSIiO2Zvcih2YXIgVT0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2''@;'; put 'put ''Nzc3MjE1JihBPDxVfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtVSYxNjc3NzIxNSwoVSs9Mik+PTI2JiYoVS09MjYsbS0tKSxWPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9ZWzYtYWUubGVuZ3RoXSthZStWOmFlK1Z9Zm9yKDAhPT1FJiYoVj1FLnRvU3RyaW5nKDE2KStWKTtWLmxlbmd0''@;'; put 'put ''aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFY9Ii0iK1YpLFZ9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPUJbQ10sbGU9V1tDXTtWPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFVl''@;'; put 'put ''PXdlLm1vZHJuKGxlKS50b1N0cmluZyhDKTtWPSh3ZT13ZS5pZGl2bihsZSkpLmlzWmVybygpP1VlK1Y6WVtuZS1VZS5sZW5ndGhdK1VlK1Z9Zm9yKHRoaXMuaXNaZXJvKCkmJihWPSIwIitWKTtWLmxlbmd0aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFY9Ii0i''@;'; put 'put ''K1YpLFZ9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''MT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''SlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxGJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShGLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9B''@;'; put 'put ''cnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULFYpe3RoaXMuX3N0cmlwKCk7dmFyIFU9dGhpcy5ieXRlTGVuZ3RoKCksRT1WfHxNYXRoLm1heCgxLFUpO3AoVTw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIp''@;'; put 'put ''LHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0sVSks''@;'; put 'put ''bX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIFY9MCxVPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxVO0NbVisrXT0yNTUmQSxWPEMubGVuZ3RoJiYoQ1tWKytdPUE+PjgmMjU1KSxWPEMubGVuZ3Ro''@;'; put 'put ''JiYoQ1tWKytdPUE+PjE2JjI1NSksNj09PW0/KFY8Qy5sZW5ndGgmJihDW1YrK109QT4+MjQmMjU1KSxVPTAsbT0wKTooVT1BPj4+MjQsbSs9Mil9aWYoVjxDLmxlbmd0aClmb3IoQ1tWKytdPVU7VjxDLmxlbmd0aDspQ1tWKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7Zm9yKHZhciBWPUMubGVuZ3RoLTEsVT0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18VTtDW1YtLV09MjU1JkEsVj49MCYmKENbVi0tXT1BPj44JjI1NSksVj49MCYmKENbVi0tXT1BPj4xNiYyNTUpLDY9PT1tPyhWPj0wJiYoQ1tW''@;'; put 'put ''LS1dPUE+PjI0JjI1NSksVT0wLG09MCk6KFU9QT4+PjI0LG0rPTIpfWlmKFY+PTApZm9yKENbVi0tXT1VO1Y+PTA7KUNbVi0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBU''@;'; put 'put ''PUMsVj0wO3JldHVybiBUPj00MDk2JiYoVis9MTMsVD4+Pj0xMyksVD49NjQmJihWKz03LFQ+Pj49NyksVD49OCYmKFYrPTQsVD4+Pj00KSxUPj0yJiYoVis9MixUPj4+PTIpLFYrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1D''@;'; put 'put ''LFY9MDtyZXR1cm4gODE5MSZUfHwoVis9MTMsVD4+Pj0xMyksMTI3JlR8fChWKz03LFQ+Pj49NyksMTUmVHx8KFYrPTQsVD4+Pj00KSwzJlR8fChWKz0yLFQ+Pj49MiksMSZUfHxWKyssVn0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFY9dGhpcy5femVyb0Jp''@;'; put 'put ''dHModGhpcy53b3Jkc1tUXSk7aWYoQys9ViwyNiE9PVYpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49''@;'; put 'put ''MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJu''@;'; put 'put ''IHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''b3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10''@;'; put 'put ''aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBWPTA7VjxULmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT10aGlzLndvcmRzW1ZdJkMud29yZHNbVl07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7''@;'; put 'put ''cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51''@;'; put 'put ''YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxWO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhUPXRoaXMsVj1DKTooVD1D''@;'; put 'put ''LFY9dGhpcyk7Zm9yKHZhciBVPTA7VTxWLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1ULndvcmRzW1VdXlYud29yZHNbVV07aWYodGhpcyE9PVQpZm9yKDtVPFQubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPVQud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMp''@;'; put 'put ''OkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihDKXtwKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksVj1DJTI2O3RoaXMuX2V4cGFuZChUKSxWPjAmJlQtLTtmb3IodmFyIFU9MDtVPFQ7VSsrKXRoaXMud29yZHNbVV09NjcxMDg4NjMmfnRoaXMud29yZHNbVV07cmV0dXJuIFY+MCYmKHRoaXMud29yZHNbVV09fnRoaXMu''@;'; put 'put ''d29yZHNbVV0mNjcxMDg4NjM+PjI2LVYpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVj1D''@;'; put 'put ''LzI2fDAsVT1DJTI2O3JldHVybiB0aGlzLl9leHBhbmQoVisxKSx0aGlzLndvcmRzW1ZdPVQ/dGhpcy53b3Jkc1tWXXwxPDxVOnRoaXMud29yZHNbVl0mfigxPDxVKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULFYsVTtpZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyks''@;'; put 'put ''Qy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFY9dGhpcyxVPUMpOihWPUMsVT10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxVLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxWLndvcmRzW21dKSsoMHxVLndvcmRzW21dKStFKSxF''@;'; put 'put ''PVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPFYubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfFYud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPVYubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlm''@;'; put 'put ''KFYhPT10aGlzKWZvcig7bTxWLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1WLndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5z''@;'; put 'put ''dWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFUsRSxWPXRoaXMuY21wKEMpO2lmKDA9PT1WKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztWPjA/KFU9dGhpcyxFPUMpOihVPUMsRT10aGlzKTtm''@;'; put 'put ''b3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxVLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8VS5sZW5ndGg7QSsrKW09KFQ9KDB8VS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09''@;'; put 'put ''NjcxMDg4NjMmVDtpZigwPT09bSYmQTxVLmxlbmd0aCYmVSE9PXRoaXMpZm9yKDtBPFUubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPVUud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLFUhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgWD1mdW5jdGlvbihDLFQsVil7dmFyIGFlLG5lLGxlLFU9Qy53b3JkcyxFPVQud29yZHMsbT1WLndvcmRzLEE9MCx3ZT0wfFVbMF0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEz''@;'; put 'put ''LG90PTB8VVsxXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxVWzJdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfFVbM10sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLEhlPTB8VVs0XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxVWzVdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0w''@;'; put 'put ''fFVbNl0seXQ9ODE5MSZsbixTdD1sbj4+PjEzLER0PTB8VVs3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxVWzhdLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFVbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8RVswXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxFWzFd''@;'; put 'put ''LGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfEVbMl0sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8RVszXSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxFWzRdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfEVbNV0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8RVs2XSxybj04''@;'; put 'put ''MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxFWzddLHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLHVhPTB8RVs5XSxFaT04MTkxJnVhLHZyPXVhPj4+MTM7Vi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9MTk7dmFyIFdu''@;'; put 'put ''PShBKyhhZT1NYXRoLmltdWwoVWUsUXQpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoUWUsUXQpfDApKTw8MTMpfDA7QT0oKGxlPU1hdGguaW11bChRZSxzbikpKyhuZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVs''@;'; put 'put ''KE1lLFF0KSxuZT0obmU9TWF0aC5pbXVsKE1lLHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLGxlPU1hdGguaW11bCh2ZSxzbik7dmFyICRpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGhu''@;'; put 'put ''KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZnQpfDApKyhuZT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEJlLFF0KSxuZT0obmU9TWF0aC5pbXVsKEJlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLGxlPU1hdGguaW11bChBZSxzbiks''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKE1lLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxsZT1sZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChVZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsQXQpfDApKyhuZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJlLFF0KSxuZT0obmU9TWF0aC5pbXVsKFJlLHNuKSkrTWF0aC5pbXVsKEll''@;'; put 'put ''LFF0KXwwLGxlPU1hdGguaW11bChJZSxzbiksYWU9YWUrTWF0aC5pbXVsKEJlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsZnQpfDApK01hdGguaW11bChBZSxobil8MCxsZT1sZStNYXRoLmltdWwoQWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLFd0KXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxsZT1sZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsc3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwKSk8PDEzKXww''@;'; put 'put ''O0E9KChsZT1sZStNYXRoLmltdWwoUWUsVXQpfDApKyhuZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKERlLFF0KSxuZT0obmU9TWF0aC5pbXVsKERlLHNuKSkrTWF0aC5pbXVsKGtlLFF0KXwwLGxlPU1hdGguaW11bChrZSxzbiksYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKFJlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxsZT1sZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxsZT1s''@;'; put 'put ''ZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxsZT1sZStNYXRoLmltdWwodmUsVXQpfDA7dmFyIFZpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV2UpfDApfDApKygoODE5''@;'; put 'put ''MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsVHQpfDApKyhuZT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LFF0KSxuZT0obmU9TWF0aC5pbXVs''@;'; put 'put ''KG50LHNuKSkrTWF0aC5pbXVsKEplLFF0KXwwLGxlPU1hdGguaW11bChKZSxzbiksYWU9YWUrTWF0aC5pbXVsKERlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxobil8MCxsZT1sZStNYXRoLmltdWwoa2UsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKFJl''@;'; put 'put ''LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxsZT1sZStNYXRo''@;'; put 'put ''LmltdWwoQWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxsZT1sZStNYXRoLmltdWwodmUsVHQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaHQpfDApfDApKygoODE5MSYobmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUseHQpfDApKyhuZT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LFF0KSxuZT0obmU9TWF0aC5pbXVsKHl0LHNu''@;'; put 'put ''KSkrTWF0aC5pbXVsKFN0LFF0KXwwLGxlPU1hdGguaW11bChTdCxzbiksYWU9YWUrTWF0aC5pbXVsKG50LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxobil8MCxsZT1sZStNYXRoLmltdWwoSmUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFd0KXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxsZT1sZStNYXRoLmltdWwo''@;'; put 'put ''SWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoQWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUseHQpfDApK01h''@;'; put 'put ''dGguaW11bCh2ZSxodCl8MCxsZT1sZStNYXRoLmltdWwodmUseHQpfDA7dmFyIERhPShBKyhhZT1hZStNYXRoLmltdWwoVWUscm4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmlt''@;'; put 'put ''dWwoUWUsenQpfDApKyhuZT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGl0LFF0KSxuZT0obmU9TWF0aC5pbXVsKGl0LHNuKSkrTWF0aC5pbXVsKCRlLFF0KXwwLGxlPU1hdGguaW11bCgkZSxzbiksYWU9YWUrTWF0aC5pbXVsKHl0LGhuKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChTdCxobil8MCxsZT1sZStNYXRoLmltdWwoU3QsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsQXQp''@;'; put 'put ''fDAsYWU9YWUrTWF0aC5pbXVsKERlLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsVXQpfDApK01hdGguaW11bChrZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11''@;'; put 'put ''bChJZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoSWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxsZT1sZStNYXRoLmltdWwoQWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLHJuKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxsZT1sZStNYXRoLmltdWwodmUsenQpfDA7dmFyIExyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsdW4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFFlLHVuKXww''@;'; put 'put ''KSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZm4pfDApKyhuZT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE5lLFF0KSxuZT0obmU9TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLGxlPU1hdGguaW11bCh1dCxzbiksYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKGl0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxsZT1sZStNYXRoLmltdWwoJGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChTdCxX''@;'; put 'put ''dCl8MCxsZT1sZStNYXRoLmltdWwoU3QsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFdlKXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoRGUsVHQpfDApK01hdGguaW11bChrZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoa2UsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxsZT1sZStNYXRoLmltdWwoSWUseHQpfDAsYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKEJlLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxsZT1sZStNYXRoLmltdWwoQWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1''@;'; put 'put ''bil8MCxsZT1sZStNYXRoLmltdWwodmUsZm4pfDA7dmFyIFdpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZW4pfDAp''@;'; put 'put ''KyhuZT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFF0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLGxlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKE5lLGhuKXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwoTmUsZnQpfDApK01hdGguaW11bCh1dCxobil8MCxsZT1sZStNYXRoLmltdWwodXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoJGUsQXQpfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKHl0LHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxsZT1sZStNYXRoLmltdWwoU3QsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxs''@;'; put 'put ''ZT1sZStNYXRoLmltdWwoSmUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUseHQpfDApK01hdGguaW11bChrZSxodCl8MCxsZT1sZStNYXRoLmltdWwoa2UseHQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLHJuKXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxsZT1sZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxsZT1sZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxsZT1sZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIHBhPShBKyhhZT1hZStNYXRoLmltdWwoVWUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx2cil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsdnIpfDApKyhuZT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGhuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LGZ0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLGxl''@;'; put 'put ''PU1hdGguaW11bChQdCxmdCksYWU9YWUrTWF0aC5pbXVsKE5lLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsQXQpfDApK01hdGguaW11bCh1dCxXdCl8MCxsZT1sZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQs''@;'; put 'put ''VXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoJGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxsZT1sZStNYXRoLmltdWwoU3QsVHQpfDAsYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KG50LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxsZT1sZStNYXRoLmltdWwoSmUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxybil8MCxsZT1sZStN''@;'; put 'put ''YXRoLmltdWwoa2UsenQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSx1bil8MCxsZT1sZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKEJlLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUs''@;'; put 'put ''ZW4pfDApK01hdGguaW11bChBZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIFFuPShBKyhhZT1hZStNYXRoLmltdWwoTWUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChNZSx2cil8MCkrTWF0aC5pbXVsKHZlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1s''@;'; put 'put ''ZStNYXRoLmltdWwodmUsdnIpfDApKyhuZT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFd0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFd0KXwwLGxlPU1hdGguaW11bChQdCxBdCksYWU9YWUrTWF0aC5pbXVsKE5lLHN0''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsVXQpfDApK01hdGguaW11bCh1dCxzdCl8MCxsZT1sZStNYXRoLmltdWwodXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxsZT1sZStNYXRoLmlt''@;'; put 'put ''dWwoJGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChTdCxodCl8MCxsZT1sZStNYXRoLmltdWwoU3QseHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsenQpfDAp''@;'; put 'put ''K01hdGguaW11bChKZSxybil8MCxsZT1sZStNYXRoLmltdWwoSmUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxsZT1sZStNYXRoLmltdWwoa2UsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFh0''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxhPShBKyhhZT1hZStNYXRoLmltdWwoQmUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSx2cil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoQWUsdnIpfDApKyhuZT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHN0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LFV0KSkrTWF0aC5pbXVsKFB0LHN0KXwwLGxlPU1hdGguaW11bChQ''@;'; put 'put ''dCxVdCksYWU9YWUrTWF0aC5pbXVsKE5lLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsVHQpfDApK01hdGguaW11bCh1dCxXZSl8MCxsZT1sZStNYXRoLmltdWwodXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQseHQpfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxodCl8MCxsZT1sZStNYXRoLmltdWwoJGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxsZT1sZStNYXRoLmltdWwoU3QsenQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHVuKXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSx1bil8MCxsZT1sZStNYXRoLmltdWwoSmUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKERlLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoa2Us''@;'; put 'put ''ZW4pfDA7dmFyIGJhPShBKyhhZT1hZStNYXRoLmltdWwoUmUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChSZSx2cil8MCkrTWF0aC5pbXVsKEllLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoSWUsdnIpfDApKyhuZT4+PjEzKXwwKSsoYmE+Pj4yNil8''@;'; put 'put ''MCxiYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFdlKSxuZT0obmU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLGxlPU1hdGguaW11bChQdCxUdCksYWU9YWUrTWF0aC5pbXVsKE5lLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUseHQpfDApK01hdGguaW11bCh1''@;'; put 'put ''dCxodCl8MCxsZT1sZStNYXRoLmltdWwodXQseHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxsZT1sZStNYXRoLmltdWwoJGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHVuKXwwLG5lPShuZT1u''@;'; put 'put ''ZStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChTdCx1bil8MCxsZT1sZStNYXRoLmltdWwoU3QsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsZW4pfDA7''@;'; put 'put ''dmFyIExhPShBKyhhZT1hZStNYXRoLmltdWwoRGUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChEZSx2cil8MCkrTWF0aC5pbXVsKGtlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoa2UsdnIpfDApKyhuZT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9''@;'; put 'put ''NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGh0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLGxlPU1hdGguaW11bChQdCx4dCksYWU9YWUrTWF0aC5pbXVsKE5lLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsenQpfDApK01hdGguaW11bCh1dCxybil8''@;'; put 'put ''MCxsZT1sZStNYXRoLmltdWwodXQsenQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxsZT1sZStNYXRoLmltdWwoJGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFh0KXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoeXQsZW4pfDApK01hdGguaW11bChTdCxYdCl8MCxsZT1sZStNYXRoLmltdWwoU3QsZW4pfDA7dmFyIEZhPShBKyhhZT1hZStNYXRoLmltdWwobnQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChudCx2cil8MCkrTWF0aC5pbXVsKEplLEVpKXwwKSk8PDEzKXww''@;'; put 'put ''O0E9KChsZT1sZStNYXRoLmltdWwoSmUsdnIpfDApKyhuZT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHJuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LHp0KSkrTWF0aC5pbXVsKFB0LHJuKXwwLGxlPU1hdGguaW11bChQdCx6dCksYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKE5lLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZm4pfDApK01hdGguaW11bCh1dCx1bil8MCxsZT1sZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCxsZT1s''@;'; put 'put ''ZStNYXRoLmltdWwoJGUsZW4pfDA7dmFyIHRpPShBKyhhZT1hZStNYXRoLmltdWwoeXQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh5dCx2cil8MCkrTWF0aC5pbXVsKFN0LEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoU3QsdnIpfDApKyhuZT4+PjEz''@;'; put 'put ''KXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHVuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LGZuKSkrTWF0aC5pbXVsKFB0LHVuKXwwLGxlPU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKE5lLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZW4p''@;'; put 'put ''fDApK01hdGguaW11bCh1dCxYdCl8MCxsZT1sZStNYXRoLmltdWwodXQsZW4pfDA7dmFyIGdvPShBKyhhZT1hZStNYXRoLmltdWwoaXQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChpdCx2cil8MCkrTWF0aC5pbXVsKCRlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStN''@;'; put 'put ''YXRoLmltdWwoJGUsdnIpfDApKyhuZT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFh0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLGxlPU1hdGguaW11bChQdCxlbik7dmFyIE5zPShBKyhhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwoTmUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChOZSx2cil8MCkrTWF0aC5pbXVsKHV0LEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwodXQsdnIpfDApKyhuZT4+PjEzKXwwKSsoTnM+Pj4yNil8MCxOcyY9NjcxMDg4NjM7dmFyIHlsPShBKyhhZT1N''@;'; put 'put ''YXRoLmltdWwoUnQsRWkpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoUnQsdnIpKStNYXRoLmltdWwoUHQsRWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChsZT1NYXRoLmltdWwoUHQsdnIpKSsobmU+Pj4xMyl8MCkrKHlsPj4+MjYpfDAseWwmPTY3MTA4ODYzLG1bMF09V24sbVsxXT0k''@;'; put 'put ''aSxtWzJdPWVpLG1bM109UXIsbVs0XT1WaSxtWzVdPU5pLG1bNl09RGEsbVs3XT1McixtWzhdPVdpLG1bOV09cGEsbVsxMF09UW4sbVsxMV09bGEsbVsxMl09YmEsbVsxM109TGEsbVsxNF09RmEsbVsxNV09dGksbVsxNl09Z28sbVsxN109TnMsbVsxOF09eWwsMCE9PUEmJihtWzE5XT1BLFYu''@;'; put 'put ''bGVuZ3RoKyspLFZ9O2Z1bmN0aW9uIHRlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIFY9MCxVPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPVU7VT0wO2Zvcih2YXIgQT02NzEwODg2MyZWLGFl''@;'; put 'put ''PU1hdGgubWluKEUsQy5sZW5ndGgtMSksbmU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO25lPD1hZTtuZSsrKXt2YXIgUWU9KDB8eC53b3Jkc1tFLW5lXSkqKDB8Qy53b3Jkc1tuZV0pLG90PTY3MTA4ODYzJlFlO0E9NjcxMDg4NjMmKG90PW90K0F8MCksVSs9KG09KG09bSsoUWUvNjcxMDg4''@;'; put 'put ''NjR8MCl8MCkrKG90Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLFY9bSxtPVV9cmV0dXJuIDAhPT1WP1Qud29yZHNbRV09VjpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gcmUoeCxDLFQpe3JldHVybiB0ZSh4LEMsVCl9ZnVuY3Rpb24gb2UoeCxDKXt0aGlz''@;'; put 'put ''Lng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChYPVEpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIFU9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/WCh0aGlzLEMsVCk6VTw2Mz9RKHRoaXMsQyxUKTpVPDEwMjQ/''@;'; put 'put ''dGUodGhpcyxDLFQpOnJlKHRoaXMsQyxUKX0sb2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxWPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxVPTA7VTxDO1UrKylUW1VdPXRoaXMucmV2QmluKFUsVixDKTtyZXR1cm4gVH0sb2UucHJv''@;'; put 'put ''dG90eXBlLnJldkJpbj1mdW5jdGlvbihDLFQsVil7aWYoMD09PUN8fEM9PT1WLTEpcmV0dXJuIEM7Zm9yKHZhciBVPTAsRT0wO0U8VDtFKyspVXw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBVfSxvZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsVixVLEUsbSl7Zm9yKHZhciBB''@;'; put 'put ''PTA7QTxtO0ErKylVW0FdPVRbQ1tBXV0sRVtBXT1WW0NbQV1dfSxvZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEMsVCxWLFUsRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsVixVLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsbmU9TWF0aC5jb3MoMipNYXRo''@;'; put 'put ''LlBJL2FlKSxsZT1NYXRoLnNpbigyKk1hdGguUEkvYWUpLHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZhciBVZT1uZSxRZT1sZSxvdD0wO290PEE7b3QrKyl7dmFyIE1lPVZbd2Urb3RdLHZlPVVbd2Urb3RdLFhlPVZbd2Urb3QrQV0sQmU9VVt3ZStvdCtBXSxBZT1VZSpYZS1RZSpCZTtCZT1VZSpC''@;'; put 'put ''ZStRZSpYZSxWW3dlK290XT1NZSsoWGU9QWUpLFVbd2Urb3RdPXZlK0JlLFZbd2Urb3QrQV09TWUtWGUsVVt3ZStvdCtBXT12ZS1CZSxvdCE9PWFlJiYoQWU9bmUqVWUtbGUqUWUsUWU9bmUqUWUrbGUqVWUsVWU9QWUpfX0sb2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7''@;'; put 'put ''dmFyIFY9MXxNYXRoLm1heChULEMpLFU9MSZWLEU9MDtmb3IoVj1WLzJ8MDtWO1Y+Pj49MSlFKys7cmV0dXJuIDE8PEUrMStVfSxvZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxWKXtpZighKFY8PTEpKWZvcih2YXIgVT0wO1U8Vi8yO1UrKyl7dmFyIEU9Q1tVXTtDW1VdPUNb''@;'; put 'put ''Vi1VLTFdLENbVi1VLTFdPUUsRT1UW1VdLFRbVV09LVRbVi1VLTFdLFRbVi1VLTFdPS1FfX0sb2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgVj0wLFU9MDtVPFQvMjtVKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqVSsxXS9UKStNYXRoLnJvdW5k''@;'; put 'put ''KENbMipVXS9UKStWO0NbVV09NjcxMDg4NjMmRSxWPUU8NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9cmV0dXJuIEN9LG9lLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxWLFUpe2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKVZbMiptXT04MTkxJihFKz0wfENbbV0pLFZbMiptKzFd''@;'; put 'put ''PTgxOTEmKEU+Pj49MTMpLEU+Pj49MTM7Zm9yKG09MipUO208VTsrK20pVlttXT0wO3AoMD09PUUpLHAoISgtODE5MiZFKSl9LG9lLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksVj0wO1Y8QztWKyspVFtWXT0wO3JldHVybiBUfSxvZS5wcm90b3R5''@;'; put 'put ''cGUubXVscD1mdW5jdGlvbihDLFQsVil7dmFyIFU9Mip0aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3RoLFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChVKSxtPXRoaXMuc3R1YihVKSxBPW5ldyBBcnJheShVKSxhZT1uZXcgQXJyYXkoVSksbmU9bmV3IEFycmF5KFUpLGxlPW5ldyBBcnJheShVKSx3''@;'; put 'put ''ZT1uZXcgQXJyYXkoVSksVWU9bmV3IEFycmF5KFUpLFFlPVYud29yZHM7UWUubGVuZ3RoPVUsdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxVKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxsZSxVKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsbmUsVSxFKSx0aGlz''@;'; put 'put ''LnRyYW5zZm9ybShsZSxtLHdlLFVlLFUsRSk7Zm9yKHZhciBvdD0wO290PFU7b3QrKyl7dmFyIE1lPWFlW290XSp3ZVtvdF0tbmVbb3RdKlVlW290XTtuZVtvdF09YWVbb3RdKlVlW290XStuZVtvdF0qd2Vbb3RdLGFlW290XT1NZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsbmUsVSksdGhp''@;'; put 'put ''cy50cmFuc2Zvcm0oYWUsbmUsUWUsbSxVLEUpLHRoaXMuY29uanVnYXRlKFFlLG0sVSksdGhpcy5ub3JtYWxpemUxM2IoUWUsVSksVi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsVi5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0''@;'; put 'put ''aGlzLmxlbmd0aCtDLmxlbmd0aCkscmUodGhpcyxDLFQpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgQykscChDPDY3MTA4ODY0KTtmb3IodmFyIFY9MCxVPTA7VTx0aGlzLmxlbmd0aDtVKyspe3ZhciBFPSgwfHRoaXMud29yZHNbVV0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJlYpO1Y+Pj0yNixWKz1FLzY3MTA4ODY0fDAsVis9bT4+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMm''@;'; put 'put ''bX1yZXR1cm4gMCE9PVYmJih0aGlzLndvcmRzW1VdPVYsdGhpcy5sZW5ndGgrKyksVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIHEoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxUPTA7VDxDLmxl''@;'; put 'put ''bmd0aDtUKyspQ1tUXT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9PT1ULmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBWPXRoaXMsVT0wO1U8VC5sZW5ndGgmJjA9PT1UW1VdO1UrKyxWPVYuc3FyKCkpO2lmKCsrVTxULmxlbmd0aClmb3IodmFyIEU9''@;'; put 'put ''Vi5zcXIoKTtVPFQubGVuZ3RoO1UrKyxFPUUuc3FyKCkpMCE9PVRbVV0mJihWPVYubXVsKEUpKTtyZXR1cm4gVn0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsVj0oQy1UKS8yNixVPTY3MTA4ODYzPj4+MjYt''@;'; put 'put ''VDw8MjYtVDtpZigwIT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdJlU7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3RoKyspfWlmKDAh''@;'; put 'put ''PT1WKXtmb3IoRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStWXT10aGlzLndvcmRzW0VdO2ZvcihFPTA7RTxWO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPVZ9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKEMpe3Jl''@;'; put 'put ''dHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKEMsVCxWKXt2YXIgVTtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksVT1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUpLzI2LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSxBPTY3MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1WO2lmKFUtPW0sVT1NYXRoLm1heCgwLFUpLGFlKXtmb3IodmFyIG5lPTA7bmU8bTtuZSsrKWFlLndvcmRzW25lXT10aGlzLndvcmRzW25lXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5tKWZvcih0aGlz''@;'; put 'put ''Lmxlbmd0aC09bSxuZT0wO25lPHRoaXMubGVuZ3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBsZT0wO2ZvcihuZT10aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PWxlfHxuZT49VSk7bmUtLSl7dmFy''@;'; put 'put ''IHdlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53b3Jkc1tuZV09bGU8PDI2LUV8d2U+Pj5FLGxlPXdlJkF9cmV0dXJuIGFlJiYwIT09bGUmJihhZS53b3Jkc1thZS5sZW5ndGgrK109bGUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihDLFQsVil7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKEMsVCxWKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlwZS51c2hsbj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihDKX0sdy5w''@;'; put 'put ''cm90b3R5cGUudGVzdG49ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsVj0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1WfHwhKHRoaXMud29yZHNbVl0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7cCgibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsVj0oQy1UKS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVY/dGhpczooMCE9PVQmJlYrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihW''@;'; put 'put ''LHRoaXMubGVuZ3RoKSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''YWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCksQzwwP3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0aGlzLndvcmRz''@;'; put 'put ''WzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7VDx0aGlzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0LFQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEpLHRoaXN9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKEMpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8NjcxMDg4NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsrKXRoaXMud29y''@;'; put 'put ''ZHNbVF0rPTY3MTA4ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXN1Ym4oQyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oQyxULFYpe3Zh''@;'; put 'put ''ciBFO3RoaXMuX2V4cGFuZChDLmxlbmd0aCtWKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3RoO0UrKyl7bT0oMHx0aGlzLndvcmRzW0UrVl0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0Ur''@;'; put 'put ''Vl09NjcxMDg4NjMmbX1mb3IoO0U8dGhpcy5sZW5ndGgtVjtFKyspQT0obT0oMHx0aGlzLndvcmRzW0UrVl0pK0EpPj4yNix0aGlzLndvcmRzW0UrVl09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IocCgtMT09PUEpLEE9MCxFPTA7RTx0aGlzLmxlbmd0aDtF''@;'; put 'put ''KyspQT0obT0tKDB8dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMmbTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIFYsVT10aGlzLmNsb25lKCksRT1DLG09MHxFLndv''@;'; put 'put ''cmRzW0UubGVuZ3RoLTFdOzAhPShWPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4oViksVS5pdXNobG4oViksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciBuZSxhZT1VLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyhuZT1uZXcgdyhudWxsKSkubGVuZ3RoPWFl''@;'; put 'put ''KzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBsZT0wO2xlPG5lLmxlbmd0aDtsZSsrKW5lLndvcmRzW2xlXT0wfXZhciB3ZT1VLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PXdlLm5lZ2F0aXZlJiYoVT13ZSxuZSYmKG5lLndvcmRzW2FlXT0xKSk7Zm9y''@;'; put 'put ''KHZhciBVZT1hZS0xO1VlPj0wO1VlLS0pe3ZhciBRZT02NzEwODg2NCooMHxVLndvcmRzW0UubGVuZ3RoK1VlXSkrKDB8VS53b3Jkc1tFLmxlbmd0aCtVZS0xXSk7Zm9yKFFlPU1hdGgubWluKFFlL218MCw2NzEwODg2MyksVS5faXNobG5zdWJtdWwoRSxRZSxVZSk7MCE9PVUubmVnYXRpdmU7''@;'; put 'put ''KVFlLS0sVS5uZWdhdGl2ZT0wLFUuX2lzaGxuc3VibXVsKEUsMSxVZSksVS5pc1plcm8oKXx8KFUubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbVWVdPVFlKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLFUuX3N0cmlwKCksImRpdiIhPT1UJiYwIT09ViYmVS5pdXNocm4oVikse2RpdjpuZXx8''@;'; put 'put ''bnVsbCxtb2Q6VX19LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsVil7cmV0dXJuIHAoIUMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1v''@;'; put 'put ''ZChDLFQpLCJtb2QiIT09VCYmKFU9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksViYmMCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpVLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMubmVnKCksVCks''@;'; put 'put ''Im1vZCIhPT1UJiYoVT1tLmRpdi5uZWcoKSkse2RpdjpVLG1vZDptLm1vZH0pOnRoaXMubmVnYXRpdmUmQy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksViYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihDKSkse2Rpdjpt''@;'; put 'put ''LmRpdixtb2Q6RX0pOkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9kOm5ldyB3KHRo''@;'; put 'put ''aXMubW9kcm4oQy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgVSxFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywi''@;'; put 'put ''ZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1m''@;'; put 'put ''dW5jdGlvbihDKXt2YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4gVC5kaXY7dmFyIFY9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2QsVT1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPVYuY21wKFUpO3JldHVybiBtPDB8fDE9PT1FJiYw''@;'; put 'put ''PT09bT9ULmRpdjowIT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscChDPD02NzEwODg2Myk7Zm9yKHZhciBWPSgxPDwyNiklQyxVPTAsRT10aGlzLmxlbmd0aC0x''@;'; put 'put ''O0U+PTA7RS0tKVU9KFYqVSsoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tVTpVfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAoQzw9NjcxMDg4''@;'; put 'put ''NjMpO2Zvcih2YXIgVj0wLFU9dGhpcy5sZW5ndGgtMTtVPj0wO1UtLSl7dmFyIEU9KDB8dGhpcy53b3Jkc1tVXSkrNjcxMDg4NjQqVjt0aGlzLndvcmRzW1VdPUUvQ3wwLFY9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUuZGl2bj1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsVj1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2''@;'; put 'put ''YXIgVT1uZXcgdygxKSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNFdmVuKCkmJlYuaXNFdmVuKCk7KVQuaXVzaHJuKDEpLFYuaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciBuZT1WLmNsb25lKCksbGU9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9yKHZhciB3ZT0w''@;'; put 'put ''LFVlPTE7IShULndvcmRzWzBdJlVlKSYmd2U8MjY7Kyt3ZSxVZTw8PTEpO2lmKHdlPjApZm9yKFQuaXVzaHJuKHdlKTt3ZS0tID4wOykoVS5pc09kZCgpfHxFLmlzT2RkKCkpJiYoVS5pYWRkKG5lKSxFLmlzdWIobGUpKSxVLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFyIFFlPTAsb3Q9''@;'; put 'put ''MTshKFYud29yZHNbMF0mb3QpJiZRZTwyNjsrK1FlLG90PDw9MSk7aWYoUWU+MClmb3IoVi5pdXNocm4oUWUpO1FlLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQobmUpLEEuaXN1YihsZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKFYpPj0wPyhULmlzdWIo''@;'; put 'put ''ViksVS5pc3ViKG0pLEUuaXN1YihBKSk6KFYuaXN1YihUKSxtLmlzdWIoVSksQS5pc3ViKEUpKX1yZXR1cm57YTptLGI6QSxnY2Q6Vi5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciB3ZSxUPXRo''@;'; put 'put ''aXMsVj1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgVT1uZXcgdygxKSxFPW5ldyB3KDApLG09Vi5jbG9uZSgpO1QuY21wbigxKT4wJiZWLmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYmQTwyNjsrK0Es''@;'; put 'put ''YWU8PD0xKTtpZihBPjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspVS5pc09kZCgpJiZVLmlhZGQobSksVS5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLGxlPTE7IShWLndvcmRzWzBdJmxlKSYmbmU8MjY7KytuZSxsZTw8PTEpO2lmKG5lPjApZm9yKFYuaXVzaHJuKG5lKTtuZS0tID4wOylFLmlz''@;'; put 'put ''T2RkKCkmJkUuaWFkZChtKSxFLml1c2hybigxKTtULmNtcChWKT49MD8oVC5pc3ViKFYpLFUuaXN1YihFKSk6KFYuaXN1YihUKSxFLmlzdWIoVSkpfXJldHVybih3ZT0wPT09VC5jbXBuKDEpP1U6RSkuY21wbigwKTwwJiZ3ZS5pYWRkKEMpLHdlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBUPXRoaXMuY2xvbmUoKSxWPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsVi5uZWdhdGl2ZT0wO2Zvcih2YXIgVT0wO1QuaXNFdmVuKCkmJlYuaXNFdmVuKCk7VSsrKVQu''@;'; put 'put ''aXVzaHJuKDEpLFYuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigxKTtmb3IoO1YuaXNFdmVuKCk7KVYuaXVzaHJuKDEpO3ZhciBFPVQuY21wKFYpO2lmKEU8MCl7dmFyIG09VDtUPVYsVj1tfWVsc2UgaWYoMD09PUV8fDA9PT1WLmNtcG4oMSkpYnJlYWs7VC5p''@;'; put 'put ''c3ViKFYpfXJldHVybiBWLml1c2hsbihVKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LFY9KEMtVCkvMjYsVT0x''@;'; put 'put ''PDxUO2lmKHRoaXMubGVuZ3RoPD1WKXJldHVybiB0aGlzLl9leHBhbmQoVisxKSx0aGlzLndvcmRzW1ZdfD1VLHRoaXM7Zm9yKHZhciBFPVUsbT1WOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jkc1ttXT1BJj02''@;'; put 'put ''NzEwODg2M31yZXR1cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oQyl7dmFy''@;'; put 'put ''IFYsVD1DPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlWPTE7ZWxzZXtUJiYoQz0tQykscChDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIg''@;'; put 'put ''VT0wfHRoaXMud29yZHNbMF07Vj1VPT09Qz8wOlU8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1WOlZ9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjAhPT1DLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMubGVuZ3RoKXJl''@;'; put 'put ''dHVybi0xO2Zvcih2YXIgVD0wLFY9dGhpcy5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIFU9MHx0aGlzLndvcmRzW1ZdLEU9MHxDLndvcmRzW1ZdO2lmKFUhPT1FKXtVPEU/VD0tMTpVPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMpe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAo''@;'; put 'put ''Qyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPD0wfSx3''@;'; put 'put ''LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcucmVkPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiBuZXcgZyhDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMi''@;'; put 'put ''KSxDLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VS''@;'; put 'put ''ZWQoQyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRo''@;'; put 'put ''aXMsQyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5y''@;'; put 'put ''ZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTIodGhpcyxDKSx0aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQuaW11bCh0aGlz''@;'; put 'put ''LEMpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCYmIUMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgZ2U9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxs''@;'; put 'put ''LHAyNTUxOTpudWxsfTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gVGUo''@;'; put 'put ''KXtfZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIFNlKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB6ZSgpe19lLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24geigpe19lLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gZyh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgcCh4Lmd0bigxKSwibW9kdWx1''@;'; put 'put ''cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHkoeCl7Zy5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMu''@;'; put 'put ''cj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWlu''@;'; put 'put ''di51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBlLmlyZWR1Y2U9''@;'; put 'put ''ZnVuY3Rpb24oQyl7dmFyIFYsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksVj0oVD0oVD10aGlzLmltdWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoVj50aGlzLm4pO3ZhciBVPVY8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAwPT09VT8oVC53''@;'; put 'put ''b3Jkc1swXT0wLFQubGVuZ3RoPTEpOlU+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlwP1Quc3RyaXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIEMuaW11bCh0aGlzLmspfSxOKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIFY9NDE5NDMwMyxVPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPFU7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1VLEMubGVuZ3Ro''@;'; put 'put ''PD05KXJldHVybiBDLndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzldO2ZvcihULndvcmRzW1QubGVuZ3RoKytdPW0mVixFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZWKTw8NHxtPj4+MjIsbT1BfUMud29y''@;'; put 'put ''ZHNbRS0xMF09bT4+Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtW''@;'; put 'put ''Kyspe3ZhciBVPTB8Qy53b3Jkc1tWXTtDLndvcmRzW1ZdPTY3MTA4ODYzJihUKz05NzcqVSksVD02NCpVKyhULzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0pLEN9LE4oU2Us''@;'; put 'put ''X2UpLE4oemUsX2UpLE4oeixfZSksei5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXt2YXIgVT0xOSooMHxDLndvcmRzW1ZdKStULEU9NjcxMDg4NjMmVTtVPj4+PTI2LEMud29yZHNbVl09RSxUPVV9cmV0dXJuIDAhPT1UJiYoQy53''@;'; put 'put ''b3Jkc1tDLmxlbmd0aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihnZVtDXSlyZXR1cm4gZ2VbQ107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgU2U7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IHplO2Vsc2V7aWYoInAyNTUx''@;'; put 'put ''OSIhPT1DKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IHp9cmV0dXJuIGdlW0NdPVQsVH0sZy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKEMucmVkLCJyZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKEMsVCl7cCghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KFAoQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxnLnByb3RvdHlwZS5uZWc9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5hZGQoVCk7cmV0dXJuIFYuY21wKHRoaXMubSk+PTAmJlYuaXN1Yih0''@;'; put 'put ''aGlzLm0pLFYuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBWPUMuaWFkZChUKTtyZXR1cm4gVi5jbXAodGhpcy5tKT49MCYmVi5pc3ViKHRoaXMubSksVn0sZy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKEMsVCl7''@;'; put 'put ''dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBWPUMuc3ViKFQpO3JldHVybiBWLmNtcG4oMCk8MCYmVi5pYWRkKHRoaXMubSksVi5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5pc3ViKFQpO3JldHVybiBWLmNt''@;'; put 'put ''cG4oMCk8MCYmVi5pYWRkKHRoaXMubSksVn0sZy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlz''@;'; put 'put ''Lmltb2QoQy5pbXVsKFQpKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxnLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxnLnByb3RvdHlw''@;'; put 'put ''ZS5zcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LGcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihwKFQlMj09MSksMz09PVQpe3ZhciBWPXRoaXMubS5hZGQobmV3IHco''@;'; put 'put ''MSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coQyxWKX1mb3IodmFyIFU9dGhpcy5tLnN1Ym4oMSksRT0wOyFVLmlzWmVybygpJiYwPT09VS5hbmRsbigxKTspRSsrLFUuaXVzaHJuKDEpO3AoIVUuaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5yZWROZWcoKSxh''@;'; put 'put ''ZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbmU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihuZT1uZXcgdygyKm5lKm5lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobmUsYWUpLmNtcChBKTspbmUucmVkSUFkZChBKTtmb3IodmFyIGxlPXRoaXMucG93KG5lLFUpLHdlPXRoaXMucG93KEMs''@;'; put 'put ''VS5hZGRuKDEpLml1c2hybigxKSksVWU9dGhpcy5wb3coQyxVKSxRZT1FOzAhPT1VZS5jbXAobSk7KXtmb3IodmFyIG90PVVlLE1lPTA7MCE9PW90LmNtcChtKTtNZSsrKW90PW90LnJlZFNxcigpO3AoTWU8UWUpO3ZhciB2ZT10aGlzLnBvdyhsZSxuZXcgdygxKS5pdXNobG4oUWUtTWUtMSkp''@;'; put 'put ''O3dlPXdlLnJlZE11bCh2ZSksbGU9dmUucmVkU3FyKCksVWU9VWUucmVkTXVsKGxlKSxRZT1NZX1yZXR1cm4gd2V9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0aGlzLmltb2Qo''@;'; put 'put ''VCkucmVkTmVnKCkpOnRoaXMuaW1vZChUKX0sZy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7aWYoVC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBVPW5ldyBBcnJheSgxNik7VVswXT1uZXcgdygx''@;'; put 'put ''KS50b1JlZCh0aGlzKSxVWzFdPUM7Zm9yKHZhciBFPTI7RTxVLmxlbmd0aDtFKyspVVtFXT10aGlzLm11bChVW0UtMV0sQyk7dmFyIG09VVswXSxBPTAsYWU9MCxuZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtmb3IodmFyIGxl''@;'; put 'put ''PVQud29yZHNbRV0sd2U9bmUtMTt3ZT49MDt3ZS0tKXt2YXIgVWU9bGU+PndlJjE7bSE9PVVbMF0mJihtPXRoaXMuc3FyKG0pKSwwIT09VWV8fDAhPT1BPyhBPDw9MSxBfD1VZSwoND09KythZXx8MD09PUUmJjA9PT13ZSkmJihtPXRoaXMubXVsKG0sVVtBXSksYWU9MCxBPTApKTphZT0wfW5l''@;'; put 'put ''PTI2fXJldHVybiBtfSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51bW9kKHRoaXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQucmVkPW51bGws''@;'; put 'put ''VH0sdy5tb250PWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgeShDKX0sTih5LGcpLHkucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD10aGlz''@;'; put 'put ''Lmltb2QoQy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0seS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIFY9Qy5pbXVsKFQpLFU9Vi5tYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1WLmlzdWIoVSkuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgVj1DLm11bChUKSxVPVYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRo''@;'; put 'put ''aXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9Vi5pc3ViKFUpLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sOTkzMTooY2UsSixiKT0+e3ZhciBEO2Z1bmN0aW9uIF8oTil7dGhpcy5yYW5kPU59aWYoY2UuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4gRHx8KEQ9bmV3IF8obnVsbCkpLEQuZ2VuZXJhdGUodyl9LGNlLmV4cG9ydHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtpZih0aGlzLnJhbmQu''@;'; put 'put ''Z2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIEY9bmV3IFVpbnQ4QXJyYXkodyksSD0wO0g8Ri5sZW5ndGg7SCsrKUZbSF09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gRn0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0''@;'; put 'put ''by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIEY9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhGKSxGfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3Rv''@;'; put 'put ''dHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgRj1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoRiksRn06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90''@;'; put 'put ''IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIHA9Yig5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgcC5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gcC5yYW5kb21CeXRlcyh3''@;'; put 'put ''KX19Y2F0Y2h7fX0sNDQ5NzooY2UsSixiKT0+e3ZhciBEPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8oUil7RC5pc0J1ZmZlcihSKXx8KFI9RC5mcm9tKFIpKTtmb3IodmFyIGo9Ui5sZW5ndGgvNHwwLFA9bmV3IEFycmF5KGopLEw9MDtMPGo7TCsrKVBbTF09Ui5yZWFkVUludDMyQkUoNCpM''@;'; put 'put ''KTtyZXR1cm4gUH1mdW5jdGlvbiBwKFIpe2Zvcig7MDxSLmxlbmd0aDtSKyspUlswXT0wfWZ1bmN0aW9uIE4oUixqLFAsTCxZKXtmb3IodmFyIG9lLGdlLF9lLFRlLEI9UFswXSxXPVBbMV0sWj1QWzJdLHE9UFszXSxRPVJbMF1ealswXSxYPVJbMV1ealsxXSx0ZT1SWzJdXmpbMl0scmU9Ulsz''@;'; put 'put ''XV5qWzNdLFNlPTQsemU9MTt6ZTxZO3plKyspb2U9QltRPj4+MjRdXldbWD4+PjE2JjI1NV1eWlt0ZT4+PjgmMjU1XV5xWzI1NSZyZV1ealtTZSsrXSxnZT1CW1g+Pj4yNF1eV1t0ZT4+PjE2JjI1NV1eWltyZT4+PjgmMjU1XV5xWzI1NSZRXV5qW1NlKytdLF9lPUJbdGU+Pj4yNF1eV1tyZT4+''@;'; put 'put ''PjE2JjI1NV1eWltRPj4+OCYyNTVdXnFbMjU1JlhdXmpbU2UrK10sVGU9QltyZT4+PjI0XV5XW1E+Pj4xNiYyNTVdXlpbWD4+PjgmMjU1XV5xWzI1NSZ0ZV1ealtTZSsrXSxRPW9lLFg9Z2UsdGU9X2UscmU9VGU7cmV0dXJuIG9lPShMW1E+Pj4yNF08PDI0fExbWD4+PjE2JjI1NV08PDE2fExb''@;'; put 'put ''dGU+Pj44JjI1NV08PDh8TFsyNTUmcmVdKV5qW1NlKytdLGdlPShMW1g+Pj4yNF08PDI0fExbdGU+Pj4xNiYyNTVdPDwxNnxMW3JlPj4+OCYyNTVdPDw4fExbMjU1JlFdKV5qW1NlKytdLF9lPShMW3RlPj4+MjRdPDwyNHxMW3JlPj4+MTYmMjU1XTw8MTZ8TFtRPj4+OCYyNTVdPDw4fExbMjU1''@;'; put 'put ''JlhdKV5qW1NlKytdLFRlPShMW3JlPj4+MjRdPDwyNHxMW1E+Pj4xNiYyNTVdPDwxNnxMW1g+Pj44JjI1NV08PDh8TFsyNTUmdGVdKV5qW1NlKytdLFtvZT4+Pj0wLGdlPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sRj1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgUj1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKVJbal09ajwxMjg/ajw8MTpqPDwxXjI4Mztmb3IodmFyIFA9W10sTD1bXSxZPVtbXSxbXSxbXSxbXV0sQj1bW10sW10sW10sW11dLFc9MCxaPTAscT0wO3E8MjU2OysrcSl7dmFyIFE9Wl5aPDwxXlo8PDJeWjw8M15a''@;'; put 'put ''PDw0O1BbV109UT1RPj4+OF4yNTUmUV45OSxMW1FdPVc7dmFyIFg9UltXXSx0ZT1SW1hdLHJlPVJbdGVdLG9lPTI1NypSW1FdXjE2ODQzMDA4KlE7WVswXVtXXT1vZTw8MjR8b2U+Pj44LFlbMV1bV109b2U8PDE2fG9lPj4+MTYsWVsyXVtXXT1vZTw8OHxvZT4+PjI0LFlbM11bV109b2UsQlsw''@;'; put 'put ''XVtRXT0ob2U9MTY4NDMwMDkqcmVeNjU1MzcqdGVeMjU3KlheMTY4NDMwMDgqVyk8PDI0fG9lPj4+OCxCWzFdW1FdPW9lPDwxNnxvZT4+PjE2LEJbMl1bUV09b2U8PDh8b2U+Pj4yNCxCWzNdW1FdPW9lLDA9PT1XP1c9Wj0xOihXPVheUltSW1JbcmVeWF1dXSxaXj1SW1JbWl1dKX1yZXR1cm57''@;'; put 'put ''U0JPWDpQLElOVl9TQk9YOkwsU1VCX01JWDpZLElOVl9TVUJfTUlYOkJ9fSgpO2Z1bmN0aW9uIEgoUil7dGhpcy5fa2V5PV8oUiksdGhpcy5fcmVzZXQoKX1ILmJsb2NrU2l6ZT0xNixILmtleVNpemU9MzIsSC5wcm90b3R5cGUuYmxvY2tTaXplPUguYmxvY2tTaXplLEgucHJvdG90eXBlLmtl''@;'; put 'put ''eVNpemU9SC5rZXlTaXplLEgucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgUj10aGlzLl9rZXksaj1SLmxlbmd0aCxQPWorNixMPTQqKFArMSksWT1bXSxCPTA7QjxqO0IrKylZW0JdPVJbQl07Zm9yKEI9ajtCPEw7QisrKXt2YXIgVz1ZW0ItMV07QiVqPT0wPyhXPUYuU0JP''@;'; put 'put ''WFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fEYuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8Ri5TQk9YW1c+Pj44JjI1NV08PDh8Ri5TQk9YWzI1NSZXXSxXXj13W0IvanwwXTw8MjQpOmo+NiYmQiVqPT00JiYoVz1GLlNCT1hbVz4+PjI0XTw8MjR8Ri5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxGLlNC''@;'; put 'put ''T1hbVz4+PjgmMjU1XTw8OHxGLlNCT1hbMjU1JlddKSxZW0JdPVlbQi1qXV5XfWZvcih2YXIgWj1bXSxxPTA7cTxMO3ErKyl7dmFyIFE9TC1xLFg9WVtRLShxJTQ/MDo0KV07WltxXT1xPDR8fFE8PTQ/WDpGLklOVl9TVUJfTUlYWzBdW0YuU0JPWFtYPj4+MjRdXV5GLklOVl9TVUJfTUlYWzFd''@;'; put 'put ''W0YuU0JPWFtYPj4+MTYmMjU1XV1eRi5JTlZfU1VCX01JWFsyXVtGLlNCT1hbWD4+PjgmMjU1XV1eRi5JTlZfU1VCX01JWFszXVtGLlNCT1hbMjU1JlhdXX10aGlzLl9uUm91bmRzPVAsdGhpcy5fa2V5U2NoZWR1bGU9WSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1afSxILnByb3RvdHlwZS5lbmNy''@;'; put 'put ''eXB0QmxvY2tSYXc9ZnVuY3Rpb24oUil7cmV0dXJuIE4oUj1fKFIpLHRoaXMuX2tleVNjaGVkdWxlLEYuU1VCX01JWCxGLlNCT1gsdGhpcy5fblJvdW5kcyl9LEgucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgaj10aGlzLmVuY3J5cHRCbG9ja1JhdyhSKSxQPUQuYWxs''@;'; put 'put ''b2NVbnNhZmUoMTYpO3JldHVybiBQLndyaXRlVUludDMyQkUoalswXSwwKSxQLndyaXRlVUludDMyQkUoalsxXSw0KSxQLndyaXRlVUludDMyQkUoalsyXSw4KSxQLndyaXRlVUludDMyQkUoalszXSwxMiksUH0sSC5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKFIpe3ZhciBqPShS''@;'; put 'put ''PV8oUikpWzFdO1JbMV09UlszXSxSWzNdPWo7dmFyIFA9TihSLHRoaXMuX2ludktleVNjaGVkdWxlLEYuSU5WX1NVQl9NSVgsRi5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUQuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUoUFswXSwwKSxMLndyaXRlVUludDMyQkUo''@;'; put 'put ''UFszXSw0KSxMLndyaXRlVUludDMyQkUoUFsyXSw4KSxMLndyaXRlVUludDMyQkUoUFsxXSwxMiksTH0sSC5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtwKHRoaXMuX2tleVNjaGVkdWxlKSxwKHRoaXMuX2ludktleVNjaGVkdWxlKSxwKHRoaXMuX2tleSl9LGNlLmV4cG9ydHMuQUVTPUh9''@;'; put 'put ''LDQ4NDg6KGNlLEosYik9Pnt2YXIgRD1iKDQ0OTcpLF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcpLE49Yig1NzE3KSx3PWIoMzI4OCksRj1iKDcyOTUpLEg9Yig2ODUpO2Z1bmN0aW9uIFAoTCxZLEIsVyl7cC5jYWxsKHRoaXMpO3ZhciBaPV8uYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3''@;'; put 'put ''IEQuQUVTKFkpO3ZhciBxPXRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soWik7dGhpcy5fZ2hhc2g9bmV3IHcocSksQj1mdW5jdGlvbiBqKEwsWSxCKXtpZigxMj09PVkubGVuZ3RoKXJldHVybiBMLl9maW5JRD1fLmNvbmNhdChbWSxfLmZyb20oWzAsMCwwLDFdKV0pLF8uY29uY2F0KFtZLF8u''@;'; put 'put ''ZnJvbShbMCwwLDAsMl0pXSk7dmFyIFc9bmV3IHcoQiksWj1ZLmxlbmd0aCxxPVolMTY7Vy51cGRhdGUoWSkscSYmVy51cGRhdGUoXy5hbGxvYyhxPTE2LXEsMCkpLFcudXBkYXRlKF8uYWxsb2MoOCwwKSk7dmFyIFE9OCpaLFg9Xy5hbGxvYyg4KTtYLndyaXRlVUludEJFKFEsMCw4KSxXLnVw''@;'; put 'put ''ZGF0ZShYKSxMLl9maW5JRD1XLnN0YXRlO3ZhciB0ZT1fLmZyb20oTC5fZmluSUQpO3JldHVybiBIKHRlKSx0ZX0odGhpcyxCLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKEIpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9k''@;'; put 'put ''ZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfU4oUCxwKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBZPTE2LXRoaXMu''@;'; put 'put ''X2FsZW4lMTY7WTwxNiYmKFk9Xy5hbGxvYyhZLDApLHRoaXMuX2doYXNoLnVwZGF0ZShZKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBCPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOkIpLHRoaXMuX2xlbis9TC5sZW5n''@;'; put 'put ''dGgsQn0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1GKHRoaXMuX2doYXNoLmZpbmFsKDgq''@;'; put 'put ''dGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTCxZKXt2YXIgQj0wO0wubGVuZ3RoIT09WS5sZW5ndGgmJkIrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsWS5sZW5n''@;'; put 'put ''dGgpLFo9MDtaPFc7KytaKUIrPUxbWl1eWVtaXTtyZXR1cm4gQn0oTCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sUC5w''@;'; put 'put ''cm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30s''@;'; put 'put ''UC5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihZKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1ZfSxQLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24o''@;'; put 'put ''WSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKFkpLHRoaXMuX2FsZW4rPVkubGVuZ3RofSxjZS5leHBvcnRzPVB9LDQ2OTY6KGNlLEosYik9Pnt2YXIgRD1iKDE0''@;'; put 'put ''OTQpLF89Yig2MTkzKSxwPWIoNDk0Nik7Si5jcmVhdGVDaXBoZXI9Si5DaXBoZXI9RC5jcmVhdGVDaXBoZXIsSi5jcmVhdGVDaXBoZXJpdj1KLkNpcGhlcml2PUQuY3JlYXRlQ2lwaGVyaXYsSi5jcmVhdGVEZWNpcGhlcj1KLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsSi5jcmVhdGVEZWNp''@;'; put 'put ''cGhlcml2PUouRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsSi5saXN0Q2lwaGVycz1KLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhwKX19LDYxOTM6KGNlLEosYik9Pnt2YXIgRD1iKDQ4NDgpLF89Yig5NTA5KS5CdWZmZXIscD1iKDQ1KSxOPWIoNTk2''@;'; put 'put ''OSksdz1iKDEwMjcpLEY9Yig0NDk3KSxIPWIoMzA0OCk7ZnVuY3Rpb24gaihXLFoscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBQLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgRi5BRVMoWiksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMu''@;'; put 'put ''X2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFAoKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gWShXLFoscSl7dmFyIFE9cFtXLnRvTG93ZXJDYXNlKCldO2lmKCFRKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgcSYmKHE9Xy5mcm9tKHEpKSwiR0NNIiE9PVEubW9kZSYmcS5sZW5ndGghPT1RLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWiYmKFo9Xy5mcm9tKFopKSxaLmxlbmd0aCE9PVEua2V5LzgpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09US50eXBlP25ldyBOKFEubW9kdWxlLFoscSwhMCk6ImF1dGgiPT09US50eXBlP25ldyBEKFEubW9kdWxlLFoscSwhMCk6bmV3IGooUS5tb2R1bGUsWixxKX1iKDU3MTcpKGosdyks''@;'; put 'put ''ai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBaLHEsUT1bXTtaPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXE9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWiksUS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChRKX0s''@;'; put 'put ''ai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gTChXKXt2YXIgWj1XWzE1XTtpZihaPDF8fFo+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7''@;'; put 'put ''Zm9yKHZhciBxPS0xOysrcTxaOylpZihXW3ErKDE2LVopXSE9PVopdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1aKXJldHVybiBXLnNsaWNlKDAsMTYtWil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFcpKTtpZihXKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''ZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LGoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9Xy5jb25jYXQoW3RoaXMu''@;'; put 'put ''Y2FjaGUsV10pfSxQLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVyl7dmFyIFo7aWYoVyl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFp9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0''@;'; put 'put ''aD49MTYpcmV0dXJuIFo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFo7cmV0dXJuIG51bGx9LFAucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEouY3JlYXRlRGVj''@;'; put 'put ''aXBoZXI9ZnVuY3Rpb24gQihXLFope3ZhciBxPXBbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgUT1IKFosITEscS5rZXkscS5pdik7cmV0dXJuIFkoVyxRLmtleSxRLml2KX0sSi5jcmVhdGVEZWNpcGhlcml2PVl9''@;'; put 'put ''LDE0OTQ6KGNlLEosYik9Pnt2YXIgRD1iKDQ1KSxfPWIoNDg0OCkscD1iKDk1MDkpLkJ1ZmZlcixOPWIoNTk2OSksdz1iKDEwMjcpLEY9Yig0NDk3KSxIPWIoMzA0OCk7ZnVuY3Rpb24gaihXLFoscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBMLHRoaXMuX2NpcGhlcj1uZXcgRi5B''@;'; put 'put ''RVMoWiksdGhpcy5fcHJldj1wLmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWIoNTcxNykoaix3KSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFoscSxRPVtdO1o9dGhpcy5fY2FjaGUuZ2V0KCk7KXE9''@;'; put 'put ''dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWiksUS5wdXNoKHEpO3JldHVybiBwLmNvbmNhdChRKX07dmFyIFA9cC5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgpe3RoaXMuY2FjaGU9cC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBZKFcsWixxKXt2YXIgUT1EW1cudG9Mb3dlckNhc2UoKV07aWYo''@;'; put 'put ''IVEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBaJiYoWj1wLmZyb20oWikpLFoubGVuZ3RoIT09US5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitaLmxlbmd0aCk7aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBxJiYocT1wLmZyb20ocSkpLCJHQ00iIT09US5tb2RlJiZxLmxlbmd0aCE9PVEuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1RLnR5cGU/bmV3IE4oUS5tb2R1bGUsWixxKToiYXV0aCI9PT1RLnR5''@;'; put 'put ''cGU/bmV3IF8oUS5tb2R1bGUsWixxKTpuZXcgaihRLm1vZHVsZSxaLHEpfWoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lw''@;'; put 'put ''aGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoUCkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sai5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRk''@;'; put 'put ''aW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1wLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVy''@;'; put 'put ''biB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFo9cC5hbGxvY1Vuc2FmZShXKSxxPS0xOysrcTxXOylaLndyaXRlVUludDgoVyxxKTtyZXR1cm4g''@;'; put 'put ''cC5jb25jYXQoW3RoaXMuY2FjaGUsWl0pfSxKLmNyZWF0ZUNpcGhlcml2PVksSi5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gQihXLFope3ZhciBxPURbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgUT1IKFosITEscS5r''@;'; put 'put ''ZXkscS5pdik7cmV0dXJuIFkoVyxRLmtleSxRLml2KX19LDMyODg6KGNlLEosYik9Pnt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPUQuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gTihGKXt2YXIgSD1ELmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gSC53cml0ZVVJbnQzMkJFKEZbMF0+Pj4wLDApLEgud3Jp''@;'; put 'put ''dGVVSW50MzJCRShGWzFdPj4+MCw0KSxILndyaXRlVUludDMyQkUoRlsyXT4+PjAsOCksSC53cml0ZVVJbnQzMkJFKEZbM10+Pj4wLDEyKSxIfWZ1bmN0aW9uIHcoRil7dGhpcy5oPUYsdGhpcy5zdGF0ZT1ELmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9RC5hbGxvY1Vuc2FmZSgwKX13LnByb3Rv''@;'; put 'put ''dHlwZS5naGFzaD1mdW5jdGlvbihGKXtmb3IodmFyIEg9LTE7KytIPEYubGVuZ3RoOyl0aGlzLnN0YXRlW0hdXj1GW0hdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgUixQLEY9ZnVuY3Rpb24gcChGKXtyZXR1cm5bRi5yZWFkVUlu''@;'; put 'put ''dDMyQkUoMCksRi5yZWFkVUludDMyQkUoNCksRi5yZWFkVUludDMyQkUoOCksRi5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxIPVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihIWzBdXj1GWzBdLEhbMV1ePUZbMV0sSFsy''@;'; put 'put ''XV49RlsyXSxIWzNdXj1GWzNdKSxQPSEhKDEmRlszXSksUj0zO1I+MDtSLS0pRltSXT1GW1JdPj4+MXwoMSZGW1ItMV0pPDwzMTtGWzBdPUZbMF0+Pj4xLFAmJihGWzBdPS01MjAwOTM2OTZeRlswXSl9dGhpcy5zdGF0ZT1OKEgpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRil7dGhp''@;'; put 'put ''cy5jYWNoZT1ELmNvbmNhdChbdGhpcy5jYWNoZSxGXSk7Zm9yKHZhciBIO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspSD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChIKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24o''@;'; put 'put ''RixIKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goRC5jb25jYXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKE4oWzAsRiwwLEhdKSksdGhpcy5zdGF0ZX0sY2UuZXhwb3J0cz13fSw2ODU6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uIEooYil7Zm9yKHZhciBf''@;'; put 'put ''LEQ9Yi5sZW5ndGg7RC0tOyl7aWYoMjU1IT09KF89Yi5yZWFkVUludDgoRCkpKXtfKyssYi53cml0ZVVJbnQ4KF8sRCk7YnJlYWt9Yi53cml0ZVVJbnQ4KDAsRCl9fX0sNTI5MjooY2UsSixiKT0+e3ZhciBEPWIoNzI5NSk7Si5lbmNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49RChwLF8uX3By''@;'; put 'put ''ZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soTiksXy5fcHJldn0sSi5kZWNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49Xy5fcHJldjtfLl9wcmV2PXA7dmFyIHc9Xy5fY2lwaGVyLmRlY3J5cHRCbG9jayhwKTtyZXR1cm4gRCh3LE4pfX0sNjMxMTooY2UsSixiKT0+''@;'; put 'put ''e3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89Yig3Mjk1KTtmdW5jdGlvbiBwKE4sdyxGKXt2YXIgSD13Lmxlbmd0aCxSPV8odyxOLl9jYWNoZSk7cmV0dXJuIE4uX2NhY2hlPU4uX2NhY2hlLnNsaWNlKEgpLE4uX3ByZXY9RC5jb25jYXQoW04uX3ByZXYsRj93OlJdKSxSfUouZW5jcnlwdD1mdW5j''@;'; put 'put ''dGlvbihOLHcsRil7Zm9yKHZhciBSLEg9RC5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1OLl9jYWNoZS5sZW5ndGgmJihOLl9jYWNoZT1OLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpLE4uX3ByZXY9RC5hbGxvY1Vuc2FmZSgwKSksIShOLl9jYWNoZS5sZW5ndGg8PXcu''@;'; put 'put ''bGVuZ3RoKSl7SD1ELmNvbmNhdChbSCxwKE4sdyxGKV0pO2JyZWFrfUg9RC5jb25jYXQoW0gscChOLHcuc2xpY2UoMCxSPU4uX2NhY2hlLmxlbmd0aCksRildKSx3PXcuc2xpY2UoUil9cmV0dXJuIEh9fSwxNTEwOihjZSxKLGIpPT57dmFyIEQ9Yig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhO''@;'; put 'put ''LHcsRil7Zm9yKHZhciBMLFksUj0tMSxQPTA7KytSPDg7KVArPSgxMjgmKFk9Ti5fY2lwaGVyLmVuY3J5cHRCbG9jayhOLl9wcmV2KVswXV4oTD13JjE8PDctUj8xMjg6MCkpKT4+UiU4LE4uX3ByZXY9cChOLl9wcmV2LEY/TDpZKTtyZXR1cm4gUH1mdW5jdGlvbiBwKE4sdyl7dmFyIEY9Ti5s''@;'; put 'put ''ZW5ndGgsSD0tMSxSPUQuYWxsb2NVbnNhZmUoTi5sZW5ndGgpO2ZvcihOPUQuY29uY2F0KFtOLEQuZnJvbShbd10pXSk7KytIPEY7KVJbSF09TltIXTw8MXxOW0grMV0+Pjc7cmV0dXJuIFJ9Si5lbmNyeXB0PWZ1bmN0aW9uKE4sdyxGKXtmb3IodmFyIEg9dy5sZW5ndGgsUj1ELmFsbG9jVW5z''@;'; put 'put ''YWZlKEgpLGo9LTE7KytqPEg7KVJbal09XyhOLHdbal0sRik7cmV0dXJuIFJ9fSwxOTY0OihjZSxKLGIpPT57dmFyIEQ9Yig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gXyhwLE4sdyl7dmFyIEg9cC5fY2lwaGVyLmVuY3J5cHRCbG9jayhwLl9wcmV2KVswXV5OO3JldHVybiBwLl9wcmV2PUQuY29u''@;'; put 'put ''Y2F0KFtwLl9wcmV2LnNsaWNlKDEpLEQuZnJvbShbdz9OOkhdKV0pLEh9Si5lbmNyeXB0PWZ1bmN0aW9uKHAsTix3KXtmb3IodmFyIEY9Ti5sZW5ndGgsSD1ELmFsbG9jVW5zYWZlKEYpLFI9LTE7KytSPEY7KUhbUl09XyhwLE5bUl0sdyk7cmV0dXJuIEh9fSw2MDA5OihjZSxKLGIpPT57dmFy''@;'; put 'put ''IEQ9Yig3Mjk1KSxfPWIoOTUwOSkuQnVmZmVyLHA9Yig2ODUpO2Z1bmN0aW9uIE4oRil7dmFyIEg9Ri5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhGLl9wcmV2KTtyZXR1cm4gcChGLl9wcmV2KSxIfUouZW5jcnlwdD1mdW5jdGlvbihGLEgpe3ZhciBSPU1hdGguY2VpbChILmxlbmd0aC8xNiks''@;'; put 'put ''aj1GLl9jYWNoZS5sZW5ndGg7Ri5fY2FjaGU9Xy5jb25jYXQoW0YuX2NhY2hlLF8uYWxsb2NVbnNhZmUoMTYqUildKTtmb3IodmFyIFA9MDtQPFI7UCsrKXt2YXIgTD1OKEYpLFk9aisxNipQO0YuX2NhY2hlLndyaXRlVUludDMyQkUoTFswXSxZKzApLEYuX2NhY2hlLndyaXRlVUludDMyQkUo''@;'; put 'put ''TFsxXSxZKzQpLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxZKzgpLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxZKzEyKX12YXIgQj1GLl9jYWNoZS5zbGljZSgwLEgubGVuZ3RoKTtyZXR1cm4gRi5fY2FjaGU9Ri5fY2FjaGUuc2xpY2UoSC5sZW5ndGgpLEQoSCxCKX19LDEwODQ6''@;'; put 'put ''KGNlLEopPT57Si5lbmNyeXB0PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuX2NpcGhlci5lbmNyeXB0QmxvY2soRCl9LEouZGVjcnlwdD1mdW5jdGlvbihiLEQpe3JldHVybiBiLl9jaXBoZXIuZGVjcnlwdEJsb2NrKEQpfX0sNDU6KGNlLEosYik9Pnt2YXIgRD17RUNCOmIoMTA4NCksQ0JDOmIo''@;'; put 'put ''NTI5MiksQ0ZCOmIoNjMxMSksQ0ZCODpiKDE5NjQpLENGQjE6YigxNTEwKSxPRkI6Yig4ODYxKSxDVFI6Yig2MDA5KSxHQ006Yig2MDA5KX0sXz1iKDQ5NDYpO2Zvcih2YXIgcCBpbiBfKV9bcF0ubW9kdWxlPURbX1twXS5tb2RlXTtjZS5leHBvcnRzPV99LDg4NjE6KGNlLEosYik9Pnt2YXIg''@;'; put 'put ''RD1iKDg3NjQpLkJ1ZmZlcixfPWIoNzI5NSk7ZnVuY3Rpb24gcChOKXtyZXR1cm4gTi5fcHJldj1OLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpLE4uX3ByZXZ9Si5lbmNyeXB0PWZ1bmN0aW9uKE4sdyl7Zm9yKDtOLl9jYWNoZS5sZW5ndGg8dy5sZW5ndGg7KU4uX2NhY2hlPUQuY29u''@;'; put 'put ''Y2F0KFtOLl9jYWNoZSxwKE4pXSk7dmFyIEY9Ti5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIE4uX2NhY2hlPU4uX2NhY2hlLnNsaWNlKHcubGVuZ3RoKSxfKHcsRil9fSw1OTY5OihjZSxKLGIpPT57dmFyIEQ9Yig0NDk3KSxfPWIoOTUwOSkuQnVmZmVyLHA9YigxMDI3KTtmdW5j''@;'; put 'put ''dGlvbiB3KEYsSCxSLGope3AuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEQuQUVTKEgpLHRoaXMuX3ByZXY9Xy5mcm9tKFIpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PWosdGhpcy5fbW9kZT1G''@;'; put 'put ''fWIoNTcxNykodyxwKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxGLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sY2UuZXhwb3J0cz13fSwzNjE0''@;'; put 'put ''OihjZSxKLGIpPT57dmFyIEQ9Yig3NjY3KSxfPWIoNDY5NikscD1iKDQ1KSxOPWIoOTcxNSksdz1iKDMwNDgpO2Z1bmN0aW9uIFIoTCxZLEIpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLHBbTF0pcmV0dXJuIF8uY3JlYXRlQ2lwaGVyaXYoTCxZLEIpO2lmKE5bTF0pcmV0dXJuIG5ldyBEKHtrZXk6''@;'; put 'put ''WSxpdjpCLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIGooTCxZLEIpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLHBbTF0pcmV0dXJuIF8uY3JlYXRlRGVjaXBoZXJpdihMLFksQik7aWYoTltMXSlyZXR1cm4gbmV3IEQoe2tleTpZLGl2''@;'; put 'put ''OkIsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1KLmNyZWF0ZUNpcGhlcj1KLkNpcGhlcj1mdW5jdGlvbiBGKEwsWSl7dmFyIEIsVztpZihMPUwudG9Mb3dlckNhc2UoKSxwW0xdKUI9cFtMXS5rZXksVz1wW0xdLml2O2Vsc2V7''@;'; put 'put ''aWYoIU5bTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Qj04Kk5bTF0ua2V5LFc9TltMXS5pdn12YXIgWj13KFksITEsQixXKTtyZXR1cm4gUihMLFoua2V5LFouaXYpfSxKLmNyZWF0ZUNpcGhlcml2PUouQ2lwaGVyaXY9UixKLmNyZWF0ZURlY2lwaGVyPUou''@;'; put 'put ''RGVjaXBoZXI9ZnVuY3Rpb24gSChMLFkpe3ZhciBCLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCkscFtMXSlCPXBbTF0ua2V5LFc9cFtMXS5pdjtlbHNle2lmKCFOW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO0I9OCpOW0xdLmtleSxXPU5bTF0uaXZ9dmFyIFo9''@;'; put 'put ''dyhZLCExLEIsVyk7cmV0dXJuIGooTCxaLmtleSxaLml2KX0sSi5jcmVhdGVEZWNpcGhlcml2PUouRGVjaXBoZXJpdj1qLEoubGlzdENpcGhlcnM9Si5nZXRDaXBoZXJzPWZ1bmN0aW9uIFAoKXtyZXR1cm4gT2JqZWN0LmtleXMoTikuY29uY2F0KF8uZ2V0Q2lwaGVycygpKX19LDc2Njc6KGNl''@;'; put 'put ''LEosYik9Pnt2YXIgRD1iKDEwMjcpLF89Yig1MjUxKSxwPWIoNTcxNyksTj1iKDk1MDkpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShfLkVERSksImRlcy1lZGUzIjpfLkVERSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVk''@;'; put 'put ''ZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5ERVN9O2Z1bmN0aW9uIEYoSCl7RC5jYWxsKHRoaXMpO3ZhciBQLFI9SC5tb2RlLnRvTG93ZXJDYXNlKCksaj13W1JdO1A9SC5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9SC5r''@;'; put 'put ''ZXk7Ti5pc0J1ZmZlcihMKXx8KEw9Ti5mcm9tKEwpKSwoImRlcy1lZGUiPT09Unx8ImRlcy1lZGUtY2JjIj09PVIpJiYoTD1OLmNvbmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIFk9SC5pdjtOLmlzQnVmZmVyKFkpfHwoWT1OLmZyb20oWSkpLHRoaXMuX2Rlcz1qLmNyZWF0ZSh7a2V5Okws''@;'; put 'put ''aXY6WSx0eXBlOlB9KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLGNlLmV4cG9ydHM9RixwKEYsRCksRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihIKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoSCkpfSxGLnByb3RvdHlwZS5fZmluYWw9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KGNlLEopPT57SlsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxKWyJkZXMtY2JjIl09Si5kZXM9e2tleTo4LGl2Ojh9LEpbImRlcy1lZGUzLWNiYyJdPUouZGVzMz17a2V5OjI0LGl2Ojh9LEpbImRlcy1l''@;'; put 'put ''ZGUzIl09e2tleToyNCxpdjowfSxKWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sSlsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNTUwKSxfPWIoMTc5OCkscD1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBOKEgpe3Zh''@;'; put 'put ''ciBqLFI9SC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tqPW5ldyBEKF8oUikpfXdoaWxlKGouY21wKEgubW9kdWx1cyk+PTB8fCFqLnVtb2QoSC5wcmltZTEpfHwhai51bW9kKEgucHJpbWUyKSk7cmV0dXJuIGp9ZnVuY3Rpb24gRihILFIpe3ZhciBqPWZ1bmN0aW9uIHcoSCl7dmFyIFI9TihI''@;'; put 'put ''KTtyZXR1cm57YmxpbmRlcjpSLnRvUmVkKEQubW9udChILm1vZHVsdXMpKS5yZWRQb3cobmV3IEQoSC5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ui5pbnZtKEgubW9kdWx1cyl9fShSKSxQPVIubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgRChIKS5tdWwoai5ibGlu''@;'; put 'put ''ZGVyKS51bW9kKFIubW9kdWx1cyksWT1MLnRvUmVkKEQubW9udChSLnByaW1lMSkpLEI9TC50b1JlZChELm1vbnQoUi5wcmltZTIpKSxXPVIuY29lZmZpY2llbnQsWj1SLnByaW1lMSxxPVIucHJpbWUyLFE9WS5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxYPUIucmVkUG93KFIuZXhw''@;'; put 'put ''b25lbnQyKS5mcm9tUmVkKCksdGU9US5pc3ViKFgpLmltdWwoVykudW1vZChaKS5pbXVsKHEpO3JldHVybiBYLmlhZGQodGUpLmltdWwoai51bmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKS50b0FycmF5TGlrZShwLCJiZSIsUCl9Ri5nZXRyPU4sY2UuZXhwb3J0cz1GfSw2MDQyOihjZSxKLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Yig1MjA3KX0sNDc0MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoMzQ4MikscD1iKDM4NzIpLE49Yig1NzE3KSx3PWIoMjk1NyksRj1iKDc3NTMpLEg9Yig1MjA3KTtmdW5jdGlvbiBSKFkpe3AuV3Jp''@;'; put 'put ''dGFibGUuY2FsbCh0aGlzKTt2YXIgQj1IW1ldO2lmKCFCKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPUIuaGFzaCx0aGlzLl9oYXNoPV8oQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24g''@;'; put 'put ''aihZKXtwLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIEI9SFtZXTtpZighQil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPV8oQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24gUChZKXtyZXR1cm4g''@;'; put 'put ''bmV3IFIoWSl9ZnVuY3Rpb24gTChZKXtyZXR1cm4gbmV3IGooWSl9T2JqZWN0LmtleXMoSCkuZm9yRWFjaChmdW5jdGlvbihZKXtIW1ldLmlkPUQuZnJvbShIW1ldLmlkLCJoZXgiKSxIW1kudG9Mb3dlckNhc2UoKV09SFtZXX0pLE4oUixwLldyaXRhYmxlKSxSLnByb3RvdHlwZS5fd3JpdGU9''@;'; put 'put ''ZnVuY3Rpb24oQixXLFope3RoaXMuX2hhc2gudXBkYXRlKEIpLFooKX0sUi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgQj9ELmZyb20oQixXKTpCKSx0aGlzfSxSLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9u''@;'; put 'put ''KEIsVyl7dGhpcy5lbmQoKTt2YXIgWj10aGlzLl9oYXNoLmRpZ2VzdCgpLHE9dyhaLEIsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gVz9xLnRvU3RyaW5nKFcpOnF9LE4oaixwLldyaXRhYmxlKSxqLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oQixX''@;'; put 'put ''LFope3RoaXMuX2hhc2gudXBkYXRlKEIpLFooKX0sai5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIsVyl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2YgQj9ELmZyb20oQixXKTpCKSx0aGlzfSxqLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQixXLFope3Zh''@;'; put 'put ''ciBxPSJzdHJpbmciPT10eXBlb2YgVz9ELmZyb20oVyxaKTpXO3RoaXMuZW5kKCk7dmFyIFE9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gRihxLFEsQix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxjZS5leHBvcnRzPXtTaWduOlAsVmVyaWZ5OkwsY3JlYXRlU2lnbjpQLGNyZWF0ZVZl''@;'; put 'put ''cmlmeTpMfX0sMjk1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoODM1NSkscD1iKDM2NjMpLE49Yig2OTQ4KS5lYyx3PWIoMzU1MCksRj1iKDk4MCksSD1iKDEzMDgpO2Z1bmN0aW9uIEIoWCx0ZSxyZSxvZSl7aWYoKFg9RC5mcm9tKFgudG9BcnJh''@;'; put 'put ''eSgpKSkubGVuZ3RoPHRlLmJ5dGVMZW5ndGgoKSl7dmFyIGdlPUQuYWxsb2ModGUuYnl0ZUxlbmd0aCgpLVgubGVuZ3RoKTtYPUQuY29uY2F0KFtnZSxYXSl9dmFyIF9lPXJlLmxlbmd0aCxUZT1mdW5jdGlvbiBaKFgsdGUpe1g9KFg9VyhYLHRlKSkubW9kKHRlKTt2YXIgcmU9RC5mcm9tKFgu''@;'; put 'put ''dG9BcnJheSgpKTtpZihyZS5sZW5ndGg8dGUuYnl0ZUxlbmd0aCgpKXt2YXIgb2U9RC5hbGxvYyh0ZS5ieXRlTGVuZ3RoKCktcmUubGVuZ3RoKTtyZT1ELmNvbmNhdChbb2UscmVdKX1yZXR1cm4gcmV9KHJlLHRlKSxTZT1ELmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciB6ZT1ELmFsbG9jKF9l''@;'; put 'put ''KTtyZXR1cm4gemU9XyhvZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFswXSkpLnVwZGF0ZShYKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNlPV8ob2UsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6emU9XyhvZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFsxXSkpLnVwZGF0''@;'; put 'put ''ZShYKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhvZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVyhYLHRlKXt2YXIgcmU9bmV3IHcoWCksb2U9KFgubGVuZ3RoPDwzKS10ZS5iaXRMZW5ndGgoKTtyZXR1cm4gb2U+MCYmcmUuaXNocm4ob2UpLHJlfWZ1bmN0aW9uIHEo''@;'; put 'put ''WCx0ZSxyZSl7dmFyIG9lLGdlO2Rve2ZvcihvZT1ELmFsbG9jKDApOzgqb2UubGVuZ3RoPFguYml0TGVuZ3RoKCk7KXRlLnY9XyhyZSx0ZS5rKS51cGRhdGUodGUudikuZGlnZXN0KCksb2U9RC5jb25jYXQoW29lLHRlLnZdKTtnZT1XKG9lLFgpLHRlLms9XyhyZSx0ZS5rKS51cGRhdGUodGUu''@;'; put 'put ''dikudXBkYXRlKEQuZnJvbShbMF0pKS5kaWdlc3QoKSx0ZS52PV8ocmUsdGUuaykudXBkYXRlKHRlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09Z2UuY21wKFgpKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gUShYLHRlLHJlLG9lKXtyZXR1cm4gWC50b1JlZCh3Lm1vbnQocmUpKS5yZWRQb3codGUpLmZy''@;'; put 'put ''b21SZWQoKS5tb2Qob2UpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gaihYLHRlLHJlLG9lLGdlKXt2YXIgX2U9Rih0ZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gUChYLHRlKXt2YXIgcmU9SFt0ZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFyZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIit0ZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcgTihyZSkua2V5RnJvbVByaXZhdGUodGUucHJpdmF0ZUtleSkuc2lnbihYKTtyZXR1cm4g''@;'; put 'put ''RC5mcm9tKF9lLnRvREVSKCkpfShYLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwoWCx0ZSxyZSl7Zm9yKHZhciB6ZSxvZT10ZS5wYXJhbXMucHJpdl9rZXksZ2U9''@;'; put 'put ''dGUucGFyYW1zLnAsX2U9dGUucGFyYW1zLnEsVGU9dGUucGFyYW1zLmcsU2U9bmV3IHcoMCksej1XKFgsX2UpLm1vZChfZSksZz0hMSx5PUIob2UsX2UsWCxyZSk7ITE9PT1nOylTZT1RKFRlLHplPXEoX2UseSxyZSksZ2UsX2UpLDA9PT0oZz16ZS5pbnZtKF9lKS5pbXVsKHouYWRkKG9lLm11''@;'; put 'put ''bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYoZz0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIFkoWCx0ZSl7WD1YLnRvQXJyYXkoKSx0ZT10ZS50b0FycmF5KCksMTI4JlhbMF0mJihYPVswXS5jb25jYXQoWCkpLDEyOCZ0ZVswXSYmKHRlPVswXS5jb25jYXQodGUpKTt2YXIgb2U9''@;'; put 'put ''WzQ4LFgubGVuZ3RoK3RlLmxlbmd0aCs0LDIsWC5sZW5ndGhdO3JldHVybiBvZT1vZS5jb25jYXQoWCxbMix0ZS5sZW5ndGhdLHRlKSxELmZyb20ob2UpfShTZSxnKX0oWCxfZSxyZSl9aWYoInJzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZh''@;'; put 'put ''dGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT10ZS5wYWRkaW5nJiYxIT09dGUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7WD1ELmNvbmNhdChbZ2UsWF0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9''@;'; put 'put ''WzAsMV07WC5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgemU9LTE7Kyt6ZTxYLmxlbmd0aDspU2UucHVzaChYW3plXSk7cmV0dXJuIHAoU2UsX2UpfSxjZS5leHBvcnRzLmdldEtleT1CLGNlLmV4cG9ydHMubWFrZUtleT1xfSw3NzUzOihj''@;'; put 'put ''ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89YigzNTUwKSxwPWIoNjk0OCkuZWMsTj1iKDk4MCksdz1iKDEzMDgpO2Z1bmN0aW9uIGooUCxMKXtpZihQLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKFAuY21wKEwpPj0wKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEYoUCxMLFksQixXKXt2YXIgWj1OKFkpO2lmKCJlYyI9PT1aLnR5cGUpe2lmKCJlY2RzYSIhPT1CJiYiZWNkc2EvcnNhIiE9PUIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gSChQLEwsWSl7dmFyIEI9d1tZLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrWS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgcChCKS52ZXJpZnkoTCxQ''@;'; put 'put ''LFkuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oUCxMLFopfWlmKCJkc2EiPT09Wi50eXBlKXtpZigiZHNhIiE9PUIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUihQLEwsWSl7dmFyIEI9WS5kYXRhLnAsVz1ZLmRhdGEucSxa''@;'; put 'put ''PVkuZGF0YS5nLHE9WS5kYXRhLnB1Yl9rZXksUT1OLnNpZ25hdHVyZS5kZWNvZGUoUCwiZGVyIiksWD1RLnMsdGU9US5yO2ooWCxXKSxqKHRlLFcpO3ZhciByZT1fLm1vbnQoQiksb2U9WC5pbnZtKFcpO3JldHVybiAwPT09Wi50b1JlZChyZSkucmVkUG93KG5ldyBfKEwpLm11bChvZSkubW9k''@;'; put 'put ''KFcpKS5mcm9tUmVkKCkubXVsKHEudG9SZWQocmUpLnJlZFBvdyh0ZS5tdWwob2UpLm1vZChXKSkuZnJvbVJlZCgpKS5tb2QoQikubW9kKFcpLmNtcCh0ZSl9KFAsTCxaKX1pZigicnNhIiE9PUImJiJlY2RzYS9yc2EiIT09Qil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlw''@;'; put 'put ''ZSIpO0w9RC5jb25jYXQoW1csTF0pO2Zvcih2YXIgcT1aLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFE9WzFdLFg9MDtMLmxlbmd0aCtRLmxlbmd0aCsyPHE7KVEucHVzaCgyNTUpLFgrPTE7US5wdXNoKDApO2Zvcih2YXIgdGU9LTE7Kyt0ZTxMLmxlbmd0aDspUS5wdXNoKExbdGVdKTtRPUQuZnJv''@;'; put 'put ''bShRKTt2YXIgcmU9Xy5tb250KFoubW9kdWx1cyk7UD0oUD1uZXcgXyhQKS50b1JlZChyZSkpLnJlZFBvdyhuZXcgXyhaLnB1YmxpY0V4cG9uZW50KSksUD1ELmZyb20oUC5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgb2U9WDw4PzE6MDtmb3IocT1NYXRoLm1pbihQLmxlbmd0aCxRLmxlbmd0''@;'; put 'put ''aCksUC5sZW5ndGghPT1RLmxlbmd0aCYmKG9lPTEpLHRlPS0xOysrdGU8cTspb2V8PVBbdGVdXlFbdGVdO3JldHVybiAwPT09b2V9fSw0MzkwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oWSl7dmFyIEI9W107Zm9yKHZhciBX''@;'; put 'put ''IGluIFkpQi5wdXNoKFcpO3JldHVybiBCfTtjZS5leHBvcnRzPWo7dmFyIHA9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtwLmluaGVyaXRzPWIoNTcxNyk7dmFyIE49Yig0OTYwKSx3PWIoMjAxMCk7cC5pbmhlcml0cyhqLE4pO2Zvcih2YXIgRj1fKHcucHJvdG90eXBlKSxIPTA7SDxGLmxlbmd0''@;'; put 'put ''aDtIKyspe3ZhciBSPUZbSF07ai5wcm90b3R5cGVbUl18fChqLnByb3RvdHlwZVtSXT13LnByb3RvdHlwZVtSXSl9ZnVuY3Rpb24gaihZKXtpZighKHRoaXMgaW5zdGFuY2VvZiBqKSlyZXR1cm4gbmV3IGooWSk7Ti5jYWxsKHRoaXMsWSksdy5jYWxsKHRoaXMsWSksWSYmITE9PT1ZLnJlYWRh''@;'; put 'put ''YmxlJiYodGhpcy5yZWFkYWJsZT0hMSksWSYmITE9PT1ZLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFkmJiExPT09WS5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsUCl9ZnVuY3Rpb24gUCgp''@;'; put 'put ''e3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8RC5uZXh0VGljayhMLHRoaXMpfWZ1bmN0aW9uIEwoWSl7WS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihZKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9WSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1ZKX19KSxqLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihZLEIpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEQubmV4dFRpY2soQixZKX19LDEyOTQ6KGNlLEosYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7Y2UuZXhwb3J0cz1wO3ZhciBEPWIoMzkxMiksXz1PYmplY3QuY3JlYXRlKGIoNjQ5NykpO2Z1bmN0aW9uIHAoTil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKE4pO0QuY2FsbCh0aGlzLE4pfV8uaW5oZXJpdHM9Yig1NzE3KSxfLmluaGVyaXRzKHAsRCkscC5w''@;'; put 'put ''cm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihOLHcsRil7RihudWxsLE4pfX0sNDk2MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig4MjEyKTtjZS5leHBvcnRzPW9lO3ZhciBOLHA9Yig1ODI2KTtvZS5SZWFkYWJsZVN0YXRlPXJlLGIoNzE4Nyk7dmFyIEY9''@;'; put 'put ''ZnVuY3Rpb24odmUsWGUpe3JldHVybiB2ZS5saXN0ZW5lcnMoWGUpLmxlbmd0aH0sSD1iKDk4MTkpLFI9YigxNTcyKS5CdWZmZXIsaj0odHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rp''@;'; put 'put ''b24oKXt9LFk9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtZLmluaGVyaXRzPWIoNTcxNyk7dmFyIEI9Yig2MzUzKSxXPXZvaWQgMDtXPUImJkIuZGVidWdsb2c/Qi5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBRLFo9YigyMjY3KSxxPWIoNTk5Nyk7WS5pbmhlcml0cyhvZSxI''@;'; put 'put ''KTt2YXIgWD1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiByZSh2ZSxYZSl7dmFyIEJlPVhlIGluc3RhbmNlb2YoTj1OfHxiKDQzOTApKTt0aGlzLm9iamVjdE1vZGU9ISEodmU9dmV8fHt9KS5vYmplY3RNb2RlLEJlJiYodGhpcy5vYmplY3RN''@;'; put 'put ''b2RlPXRoaXMub2JqZWN0TW9kZXx8ISF2ZS5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciBBZT12ZS5oaWdoV2F0ZXJNYXJrLEZlPXZlLnJlYWRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9QWV8fDA9PT1BZT9BZTpCZSYmKEZlfHwwPT09RmUpP0ZlOnRoaXMub2JqZWN0TW9k''@;'; put 'put ''ZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuYnVmZmVyPW5ldyBaLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5l''@;'; put 'put ''bmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1''@;'; put 'put ''bHRFbmNvZGluZz12ZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCx2ZS5lbmNvZGluZyYmKFF8fChRPWIoMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBRKHZl''@;'; put 'put ''LmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXZlLmVuY29kaW5nKX1mdW5jdGlvbiBvZSh2ZSl7aWYoTj1OfHxiKDQzOTApLCEodGhpcyBpbnN0YW5jZW9mIG9lKSlyZXR1cm4gbmV3IG9lKHZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyByZSh2ZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHZl''@;'; put 'put ''JiYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnJlYWQmJih0aGlzLl9yZWFkPXZlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT12ZS5kZXN0cm95KSksSC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGdlKHZlLFhlLEJlLEFlLEZlKXt2YXIgSWUsUmU9dmUu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGU7cmV0dXJuIG51bGw9PT1YZT8oUmUucmVhZGluZz0hMSxmdW5jdGlvbiB5KHZlLFhlKXtpZighWGUuZW5kZWQpe2lmKFhlLmRlY29kZXIpe3ZhciBCZT1YZS5kZWNvZGVyLmVuZCgpO0JlJiZCZS5sZW5ndGgmJihYZS5idWZmZXIucHVzaChCZSksWGUubGVuZ3RoKz1Y''@;'; put 'put ''ZS5vYmplY3RNb2RlPzE6QmUubGVuZ3RoKX1YZS5lbmRlZD0hMCx4KHZlKX19KHZlLFJlKSk6KEZlfHwoSWU9ZnVuY3Rpb24gVGUodmUsWGUpe3ZhciBCZTtyZXR1cm4hZnVuY3Rpb24gTCh2ZSl7cmV0dXJuIFIuaXNCdWZmZXIodmUpfHx2ZSBpbnN0YW5jZW9mIGp9KFhlKSYmInN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiBYZSYmdm9pZCAwIT09WGUmJiF2ZS5vYmplY3RNb2RlJiYoQmU9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxCZX0oUmUsWGUpKSxJZT92ZS5lbWl0KCJlcnJvciIsSWUpOlJlLm9iamVjdE1vZGV8fFhlJiZYZS5sZW5ndGg+MD8oInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBYZSYmIVJlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihYZSkhPT1SLnByb3RvdHlwZSYmKFhlPWZ1bmN0aW9uIFAodmUpe3JldHVybiBSLmZyb20odmUpfShYZSkpLEFlP1JlLmVuZEVtaXR0ZWQ/dmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3Ry''@;'; put 'put ''ZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6X2UodmUsUmUsWGUsITApOlJlLmVuZGVkP3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihSZS5yZWFkaW5nPSExLFJlLmRlY29kZXImJiFCZT8oWGU9UmUuZGVjb2Rlci53cml0ZShY''@;'; put 'put ''ZSksUmUub2JqZWN0TW9kZXx8MCE9PVhlLmxlbmd0aD9fZSh2ZSxSZSxYZSwhMSk6VCh2ZSxSZSkpOl9lKHZlLFJlLFhlLCExKSkpOkFlfHwoUmUucmVhZGluZz0hMSkpLGZ1bmN0aW9uIFNlKHZlKXtyZXR1cm4hdmUuZW5kZWQmJih2ZS5uZWVkUmVhZGFibGV8fHZlLmxlbmd0aDx2ZS5oaWdo''@;'; put 'put ''V2F0ZXJNYXJrfHwwPT09dmUubGVuZ3RoKX0oUmUpfWZ1bmN0aW9uIF9lKHZlLFhlLEJlLEFlKXtYZS5mbG93aW5nJiYwPT09WGUubGVuZ3RoJiYhWGUuc3luYz8odmUuZW1pdCgiZGF0YSIsQmUpLHZlLnJlYWQoMCkpOihYZS5sZW5ndGgrPVhlLm9iamVjdE1vZGU/MTpCZS5sZW5ndGgsQWU/''@;'; put 'put ''WGUuYnVmZmVyLnVuc2hpZnQoQmUpOlhlLmJ1ZmZlci5wdXNoKEJlKSxYZS5uZWVkUmVhZGFibGUmJngodmUpKSxUKHZlLFhlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkob2UucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih2ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPXZlKX19KSxvZS5wcm90b3R5cGUuZGVzdHJveT1xLmRlc3Ryb3ksb2UucHJvdG90eXBlLl91bmRl''@;'; put 'put ''c3Ryb3k9cS51bmRlc3Ryb3ksb2UucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHZlLFhlKXt0aGlzLnB1c2gobnVsbCksWGUodmUpfSxvZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih2ZSxYZSl7dmFyIEFlLEJlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEJlLm9iamVjdE1vZGU/''@;'; put 'put ''QWU9ITA6InN0cmluZyI9PXR5cGVvZiB2ZSYmKChYZT1YZXx8QmUuZGVmYXVsdEVuY29kaW5nKSE9PUJlLmVuY29kaW5nJiYodmU9Ui5mcm9tKHZlLFhlKSxYZT0iIiksQWU9ITApLGdlKHRoaXMsdmUsWGUsITEsQWUpfSxvZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih2ZSl7cmV0dXJu''@;'; put 'put ''IGdlKHRoaXMsdmUsbnVsbCwhMCwhMSl9LG9lLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxvZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe3JldHVybiBRfHwoUT1iKDIyMjEpLnMpLHRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgUSh2ZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz12ZSx0aGlzfTtmdW5jdGlvbiBnKHZlLFhlKXtyZXR1cm4gdmU8PTB8fDA9PT1YZS5sZW5ndGgmJlhlLmVuZGVkPzA6WGUub2JqZWN0TW9kZT8xOnZlIT12ZT9YZS5mbG93aW5nJiZY''@;'; put 'put ''ZS5sZW5ndGg/WGUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6WGUubGVuZ3RoOih2ZT5YZS5oaWdoV2F0ZXJNYXJrJiYoWGUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiB6KHZlKXtyZXR1cm4gdmU+PTgzODg2MDg/dmU9ODM4ODYwODoodmUtLSx2ZXw9dmU+Pj4xLHZlfD12ZT4+PjIsdmV8PXZl''@;'; put 'put ''Pj4+NCx2ZXw9dmU+Pj44LHZlfD12ZT4+PjE2LHZlKyspLHZlfSh2ZSkpLHZlPD1YZS5sZW5ndGg/dmU6WGUuZW5kZWQ/WGUubGVuZ3RoOihYZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIHgodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtYZS5uZWVkUmVhZGFibGU9ITEsWGUu''@;'; put 'put ''ZW1pdHRlZFJlYWRhYmxlfHwoVygiZW1pdFJlYWRhYmxlIixYZS5mbG93aW5nKSxYZS5lbWl0dGVkUmVhZGFibGU9ITAsWGUuc3luYz9fLm5leHRUaWNrKEMsdmUpOkModmUpKX1mdW5jdGlvbiBDKHZlKXtXKCJlbWl0IHJlYWRhYmxlIiksdmUuZW1pdCgicmVhZGFibGUiKSxhZSh2ZSl9ZnVu''@;'; put 'put ''Y3Rpb24gVCh2ZSxYZSl7WGUucmVhZGluZ01vcmV8fChYZS5yZWFkaW5nTW9yZT0hMCxfLm5leHRUaWNrKFYsdmUsWGUpKX1mdW5jdGlvbiBWKHZlLFhlKXtmb3IodmFyIEJlPVhlLmxlbmd0aDshWGUucmVhZGluZyYmIVhlLmZsb3dpbmcmJiFYZS5lbmRlZCYmWGUubGVuZ3RoPFhlLmhpZ2hX''@;'; put 'put ''YXRlck1hcmsmJihXKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHZlLnJlYWQoMCksQmUhPT1YZS5sZW5ndGgpOylCZT1YZS5sZW5ndGg7WGUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gRSh2ZSl7VygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdmUucmVhZCgwKX1mdW5jdGlvbiBBKHZl''@;'; put 'put ''LFhlKXtYZS5yZWFkaW5nfHwoVygicmVzdW1lIHJlYWQgMCIpLHZlLnJlYWQoMCkpLFhlLnJlc3VtZVNjaGVkdWxlZD0hMSxYZS5hd2FpdERyYWluPTAsdmUuZW1pdCgicmVzdW1lIiksYWUodmUpLFhlLmZsb3dpbmcmJiFYZS5yZWFkaW5nJiZ2ZS5yZWFkKDApfWZ1bmN0aW9uIGFlKHZlKXt2''@;'; put 'put ''YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7Zm9yKFcoImZsb3ciLFhlLmZsb3dpbmcpO1hlLmZsb3dpbmcmJm51bGwhPT12ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gbmUodmUsWGUpe3JldHVybiAwPT09WGUubGVuZ3RoP251bGw6KFhlLm9iamVjdE1vZGU/QmU9WGUuYnVmZmVyLnNoaWZ0KCk6IXZl''@;'; put 'put ''fHx2ZT49WGUubGVuZ3RoPyhCZT1YZS5kZWNvZGVyP1hlLmJ1ZmZlci5qb2luKCIiKToxPT09WGUuYnVmZmVyLmxlbmd0aD9YZS5idWZmZXIuaGVhZC5kYXRhOlhlLmJ1ZmZlci5jb25jYXQoWGUubGVuZ3RoKSxYZS5idWZmZXIuY2xlYXIoKSk6QmU9ZnVuY3Rpb24gbGUodmUsWGUsQmUpe3Zh''@;'; put 'put ''ciBBZTtyZXR1cm4gdmU8WGUuaGVhZC5kYXRhLmxlbmd0aD8oQWU9WGUuaGVhZC5kYXRhLnNsaWNlKDAsdmUpLFhlLmhlYWQuZGF0YT1YZS5oZWFkLmRhdGEuc2xpY2UodmUpKTpBZT12ZT09PVhlLmhlYWQuZGF0YS5sZW5ndGg/WGUuc2hpZnQoKTpCZT9mdW5jdGlvbiB3ZSh2ZSxYZSl7dmFy''@;'; put 'put ''IEJlPVhlLmhlYWQsQWU9MSxGZT1CZS5kYXRhO2Zvcih2ZS09RmUubGVuZ3RoO0JlPUJlLm5leHQ7KXt2YXIgUmU9QmUuZGF0YSxJZT12ZT5SZS5sZW5ndGg/UmUubGVuZ3RoOnZlO2lmKEZlKz1JZT09PVJlLmxlbmd0aD9SZTpSZS5zbGljZSgwLHZlKSwwPT0odmUtPUllKSl7SWU9PT1SZS5s''@;'; put 'put ''ZW5ndGg/KCsrQWUsWGUuaGVhZD1CZS5uZXh0P0JlLm5leHQ6WGUudGFpbD1udWxsKTooWGUuaGVhZD1CZSxCZS5kYXRhPVJlLnNsaWNlKEllKSk7YnJlYWt9KytBZX1yZXR1cm4gWGUubGVuZ3RoLT1BZSxGZX0odmUsWGUpOmZ1bmN0aW9uIFVlKHZlLFhlKXt2YXIgQmU9Ui5hbGxvY1Vuc2Fm''@;'; put 'put ''ZSh2ZSksQWU9WGUuaGVhZCxGZT0xO2ZvcihBZS5kYXRhLmNvcHkoQmUpLHZlLT1BZS5kYXRhLmxlbmd0aDtBZT1BZS5uZXh0Oyl7dmFyIFJlPUFlLmRhdGEsSWU9dmU+UmUubGVuZ3RoP1JlLmxlbmd0aDp2ZTtpZihSZS5jb3B5KEJlLEJlLmxlbmd0aC12ZSwwLEllKSwwPT0odmUtPUllKSl7''@;'; put 'put ''SWU9PT1SZS5sZW5ndGg/KCsrRmUsWGUuaGVhZD1BZS5uZXh0P0FlLm5leHQ6WGUudGFpbD1udWxsKTooWGUuaGVhZD1BZSxBZS5kYXRhPVJlLnNsaWNlKEllKSk7YnJlYWt9KytGZX1yZXR1cm4gWGUubGVuZ3RoLT1GZSxCZX0odmUsWGUpLEFlfSh2ZSxYZS5idWZmZXIsWGUuZGVjb2Rlciks''@;'; put 'put ''QmUpO3ZhciBCZX1mdW5jdGlvbiBRZSh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO2lmKFhlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7WGUuZW5kRW1pdHRlZHx8KFhlLmVuZGVkPSEwLF8ubmV4dFRp''@;'; put 'put ''Y2sob3QsWGUsdmUpKX1mdW5jdGlvbiBvdCh2ZSxYZSl7IXZlLmVuZEVtaXR0ZWQmJjA9PT12ZS5sZW5ndGgmJih2ZS5lbmRFbWl0dGVkPSEwLFhlLnJlYWRhYmxlPSExLFhlLmVtaXQoImVuZCIpKX1mdW5jdGlvbiBNZSh2ZSxYZSl7Zm9yKHZhciBCZT0wLEFlPXZlLmxlbmd0aDtCZTxBZTtC''@;'; put 'put ''ZSsrKWlmKHZlW0JlXT09PVhlKXJldHVybiBCZTtyZXR1cm4tMX1vZS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih2ZSl7VygicmVhZCIsdmUpLHZlPXBhcnNlSW50KHZlLDEwKTt2YXIgWGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxCZT12ZTtpZigwIT09dmUmJihYZS5lbWl0dGVkUmVhZGFibGU9''@;'; put 'put ''ITEpLDA9PT12ZSYmWGUubmVlZFJlYWRhYmxlJiYoWGUubGVuZ3RoPj1YZS5oaWdoV2F0ZXJNYXJrfHxYZS5lbmRlZCkpcmV0dXJuIFcoInJlYWQ6IGVtaXRSZWFkYWJsZSIsWGUubGVuZ3RoLFhlLmVuZGVkKSwwPT09WGUubGVuZ3RoJiZYZS5lbmRlZD9RZSh0aGlzKTp4KHRoaXMpLG51bGw7''@;'; put 'put ''aWYoMD09PSh2ZT1nKHZlLFhlKSkmJlhlLmVuZGVkKXJldHVybiAwPT09WGUubGVuZ3RoJiZRZSh0aGlzKSxudWxsO3ZhciBGZSxBZT1YZS5uZWVkUmVhZGFibGU7cmV0dXJuIFcoIm5lZWQgcmVhZGFibGUiLEFlKSwoMD09PVhlLmxlbmd0aHx8WGUubGVuZ3RoLXZlPFhlLmhpZ2hXYXRlck1h''@;'; put 'put ''cmspJiZXKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsQWU9ITApLFhlLmVuZGVkfHxYZS5yZWFkaW5nP1coInJlYWRpbmcgb3IgZW5kZWQiLEFlPSExKTpBZSYmKFcoImRvIHJlYWQiKSxYZS5yZWFkaW5nPSEwLFhlLnN5bmM9ITAsMD09PVhlLmxlbmd0aCYmKFhlLm5lZWRSZWFkYWJs''@;'; put 'put ''ZT0hMCksdGhpcy5fcmVhZChYZS5oaWdoV2F0ZXJNYXJrKSxYZS5zeW5jPSExLFhlLnJlYWRpbmd8fCh2ZT1nKEJlLFhlKSkpLG51bGw9PT0oRmU9dmU+MD9uZSh2ZSxYZSk6bnVsbCk/KFhlLm5lZWRSZWFkYWJsZT0hMCx2ZT0wKTpYZS5sZW5ndGgtPXZlLDA9PT1YZS5sZW5ndGgmJihYZS5l''@;'; put 'put ''bmRlZHx8KFhlLm5lZWRSZWFkYWJsZT0hMCksQmUhPT12ZSYmWGUuZW5kZWQmJlFlKHRoaXMpKSxudWxsIT09RmUmJnRoaXMuZW1pdCgiZGF0YSIsRmUpLEZlfSxvZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odmUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBu''@;'; put 'put ''b3QgaW1wbGVtZW50ZWQiKSl9LG9lLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKHZlLFhlKXt2YXIgQmU9dGhpcyxBZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChBZS5waXBlc0NvdW50KXtjYXNlIDA6QWUucGlwZXM9dmU7YnJlYWs7Y2FzZSAxOkFlLnBpcGVzPVtBZS5waXBlcyx2ZV07''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDpBZS5waXBlcy5wdXNoKHZlKX1BZS5waXBlc0NvdW50Kz0xLFcoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsQWUucGlwZXNDb3VudCxYZSk7dmFyIFJlPVhlJiYhMT09PVhlLmVuZHx8dmU9PT1ELnN0ZG91dHx8dmU9PT1ELnN0ZGVycj9EdDpIZTtmdW5jdGlvbiBIZSgp''@;'; put 'put ''e1coIm9uZW5kIiksdmUuZW5kKCl9QWUuZW5kRW1pdHRlZD9fLm5leHRUaWNrKFJlKTpCZS5vbmNlKCJlbmQiLFJlKSx2ZS5vbigidW5waXBlIixmdW5jdGlvbiBJZShpdCwkZSl7Vygib251bnBpcGUiKSxpdD09PUJlJiYkZSYmITE9PT0kZS5oYXNVbnBpcGVkJiYoJGUuaGFzVW5waXBlZD0h''@;'; put 'put ''MCxmdW5jdGlvbiBfdCgpe1coImNsZWFudXAiKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixTdCksdmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixEZSksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixsbiksdmUucmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIoInVucGlwZSIsSWUpLEJlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEhlKSxCZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixEdCksQmUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEplKSxrZT0hMCxBZS5hd2FpdERyYWluJiYoIXZlLl93cml0YWJsZVN0YXRlfHx2ZS5fd3JpdGFibGVTdGF0ZS5uZWVk''@;'; put 'put ''RHJhaW4pJiZEZSgpfSgpKX0pO3ZhciBEZT1mdW5jdGlvbiBVKHZlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7VygicGlwZU9uRHJhaW4iLFhlLmF3YWl0RHJhaW4pLFhlLmF3YWl0RHJhaW4mJlhlLmF3YWl0RHJhaW4tLSwwPT09WGUuYXdhaXREcmFpbiYm''@;'; put 'put ''Rih2ZSwiZGF0YSIpJiYoWGUuZmxvd2luZz0hMCxhZSh2ZSkpfX0oQmUpO3ZlLm9uKCJkcmFpbiIsRGUpO3ZhciBrZT0hMSxudD0hMTtmdW5jdGlvbiBKZShpdCl7Vygib25kYXRhIiksbnQ9ITEsITE9PT12ZS53cml0ZShpdCkmJiFudCYmKCgxPT09QWUucGlwZXNDb3VudCYmQWUucGlwZXM9''@;'; put 'put ''PT12ZXx8QWUucGlwZXNDb3VudD4xJiYtMSE9PU1lKEFlLnBpcGVzLHZlKSkmJiFrZSYmKFcoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsQWUuYXdhaXREcmFpbiksQWUuYXdhaXREcmFpbisrLG50PSEwKSxCZS5wYXVzZSgpKX1mdW5jdGlvbiBsbihpdCl7Vygib25lcnJvciIsaXQp''@;'; put 'put ''LER0KCksdmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixsbiksMD09PUYodmUsImVycm9yIikmJnZlLmVtaXQoImVycm9yIixpdCl9ZnVuY3Rpb24geXQoKXt2ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixTdCksRHQoKX1mdW5jdGlvbiBTdCgpe1coIm9uZmluaXNoIiksdmUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImNsb3NlIix5dCksRHQoKX1mdW5jdGlvbiBEdCgpe1coInVucGlwZSIpLEJlLnVucGlwZSh2ZSl9cmV0dXJuIEJlLm9uKCJkYXRhIixKZSksZnVuY3Rpb24gdGUodmUsWGUsQmUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHZlLnByZXBl''@;'; put 'put ''bmRMaXN0ZW5lcihYZSxCZSk7dmUuX2V2ZW50cyYmdmUuX2V2ZW50c1tYZV0/cCh2ZS5fZXZlbnRzW1hlXSk/dmUuX2V2ZW50c1tYZV0udW5zaGlmdChCZSk6dmUuX2V2ZW50c1tYZV09W0JlLHZlLl9ldmVudHNbWGVdXTp2ZS5vbihYZSxCZSl9KHZlLCJlcnJvciIsbG4pLHZlLm9uY2UoImNs''@;'; put 'put ''b3NlIix5dCksdmUub25jZSgiZmluaXNoIixTdCksdmUuZW1pdCgicGlwZSIsQmUpLEFlLmZsb3dpbmd8fChXKCJwaXBlIHJlc3VtZSIpLEJlLnJlc3VtZSgpKSx2ZX0sb2UucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih2ZSl7dmFyIFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsQmU9e2hhc1Vu''@;'; put 'put ''cGlwZWQ6ITF9O2lmKDA9PT1YZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1YZS5waXBlc0NvdW50KXJldHVybiB2ZSYmdmUhPT1YZS5waXBlc3x8KHZlfHwodmU9WGUucGlwZXMpLFhlLnBpcGVzPW51bGwsWGUucGlwZXNDb3VudD0wLFhlLmZsb3dpbmc9ITEsdmUmJnZlLmVtaXQo''@;'; put 'put ''InVucGlwZSIsdGhpcyxCZSkpLHRoaXM7aWYoIXZlKXt2YXIgQWU9WGUucGlwZXMsRmU9WGUucGlwZXNDb3VudDtYZS5waXBlcz1udWxsLFhlLnBpcGVzQ291bnQ9MCxYZS5mbG93aW5nPSExO2Zvcih2YXIgUmU9MDtSZTxGZTtSZSsrKUFlW1JlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1Vu''@;'; put 'put ''cGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgSWU9TWUoWGUucGlwZXMsdmUpO3JldHVybi0xPT09SWV8fChYZS5waXBlcy5zcGxpY2UoSWUsMSksWGUucGlwZXNDb3VudC09MSwxPT09WGUucGlwZXNDb3VudCYmKFhlLnBpcGVzPVhlLnBpcGVzWzBdKSx2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMs''@;'; put 'put ''QmUpKSx0aGlzfSxvZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9b2UucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHZlLFhlKXt2YXIgQmU9SC5wcm90b3R5cGUub24uY2FsbCh0aGlzLHZlLFhlKTtpZigiZGF0YSI9PT12ZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1''@;'; put 'put ''bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9PT12ZSl7dmFyIEFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7IUFlLmVuZEVtaXR0ZWQmJiFBZS5yZWFkYWJsZUxpc3RlbmluZyYmKEFlLnJlYWRhYmxlTGlzdGVuaW5nPUFlLm5lZWRSZWFkYWJsZT0hMCxBZS5lbWl0dGVkUmVhZGFibGU9ITEsQWUucmVh''@;'; put 'put ''ZGluZz9BZS5sZW5ndGgmJngodGhpcyk6Xy5uZXh0VGljayhFLHRoaXMpKX1yZXR1cm4gQmV9LG9lLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdmUuZmxvd2luZ3x8KFcoInJlc3VtZSIpLHZlLmZsb3dpbmc9ITAsZnVuY3Rp''@;'; put 'put ''b24gbSh2ZSxYZSl7WGUucmVzdW1lU2NoZWR1bGVkfHwoWGUucmVzdW1lU2NoZWR1bGVkPSEwLF8ubmV4dFRpY2soQSx2ZSxYZSkpfSh0aGlzLHZlKSksdGhpc30sb2UucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFcoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFcoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30sb2UucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odmUpe3ZhciBYZT10aGlz''@;'; put 'put ''LEJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsQWU9ITE7Zm9yKHZhciBGZSBpbiB2ZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKFcoIndyYXBwZWQgZW5kIiksQmUuZGVjb2RlciYmIUJlLmVuZGVkKXt2YXIgSWU9QmUuZGVjb2Rlci5lbmQoKTtJZSYmSWUubGVuZ3RoJiZYZS5wdXNoKEllKX1YZS5w''@;'; put 'put ''dXNoKG51bGwpfSksdmUub24oImRhdGEiLGZ1bmN0aW9uKEllKXtXKCJ3cmFwcGVkIGRhdGEiKSxCZS5kZWNvZGVyJiYoSWU9QmUuZGVjb2Rlci53cml0ZShJZSkpLEJlLm9iamVjdE1vZGUmJm51bGw9PUllfHwhKEJlLm9iamVjdE1vZGV8fEllJiZJZS5sZW5ndGgpfHxYZS5wdXNoKEllKXx8''@;'; put 'put ''KEFlPSEwLHZlLnBhdXNlKCkpfSksdmUpdm9pZCAwPT09dGhpc1tGZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB2ZVtGZV0mJih0aGlzW0ZlXT1mdW5jdGlvbihJZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZlW0llXS5hcHBseSh2ZSxhcmd1bWVudHMpfX0oRmUpKTtmb3IodmFyIFJlPTA7''@;'; put 'put ''UmU8WC5sZW5ndGg7UmUrKyl2ZS5vbihYW1JlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFhbUmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oSWUpe1coIndyYXBwZWQgX3JlYWQiLEllKSxBZSYmKEFlPSExLHZlLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KG9l''@;'; put 'put ''LnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLG9lLl9mcm9tTGlzdD1uZX0sMzkxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRz''@;'; put 'put ''PU47dmFyIEQ9Yig0MzkwKSxfPU9iamVjdC5jcmVhdGUoYig2NDk3KSk7ZnVuY3Rpb24gcChILFIpe3ZhciBqPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2oudHJhbnNmb3JtaW5nPSExO3ZhciBQPWoud3JpdGVjYjtpZighUClyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0''@;'; put 'put ''ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ai53cml0ZWNodW5rPW51bGwsai53cml0ZWNiPW51bGwsbnVsbCE9UiYmdGhpcy5wdXNoKFIpLFAoSCk7dmFyIEw9dGhpcy5fcmVhZGFibGVTdGF0ZTtMLnJlYWRpbmc9ITEsKEwubmVlZFJlYWRhYmxlfHxMLmxlbmd0aDxMLmhp''@;'; put 'put ''Z2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTihIKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4oSCk7RC5jYWxsKHRoaXMsSCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnAuYmluZCh0aGlzKSxuZWVk''@;'; put 'put ''VHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEgmJigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''SC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09SC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBILmZsdXNoJiYodGhpcy5fZmx1c2g9SC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBIPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMu''@;'; put 'put ''X2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFIsail7RihILFIsail9KTpGKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBGKEgsUixqKXtpZihSKXJldHVybiBILmVtaXQoImVycm9yIixSKTtpZihudWxsIT1qJiZILnB1c2goaiksSC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihILl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEgucHVz''@;'; put 'put ''aChudWxsKX1fLmluaGVyaXRzPWIoNTcxNyksXy5pbmhlcml0cyhOLEQpLE4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxELnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxILFIpfSxOLnByb3RvdHlwZS5f''@;'; put 'put ''dHJhbnNmb3JtPWZ1bmN0aW9uKEgsUixqKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEgsUixqKXt2YXIgUD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihQLndyaXRlY2I9aixQLndyaXRlY2h1''@;'; put 'put ''bms9SCxQLndyaXRlZW5jb2Rpbmc9UiwhUC50cmFuc2Zvcm1pbmcpe3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFAubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LE4ucHJvdG90''@;'; put 'put ''eXBlLl9yZWFkPWZ1bmN0aW9uKEgpe3ZhciBSPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1SLndyaXRlY2h1bmsmJlIud3JpdGVjYiYmIVIudHJhbnNmb3JtaW5nPyhSLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oUi53cml0ZWNodW5rLFIud3JpdGVlbmNvZGluZyxSLmFm''@;'; put 'put ''dGVyVHJhbnNmb3JtKSk6Ui5uZWVkVHJhbnNmb3JtPSEwfSxOLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihILFIpe3ZhciBqPXRoaXM7RC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEgsZnVuY3Rpb24oUCl7UihQKSxqLmVtaXQoImNsb3NlIil9KX19LDIwMTA6KGNlLEosYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoODIxMik7ZnVuY3Rpb24gTihtKXt2YXIgQT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBFKG0sQSxhZSl7dmFyIG5lPW0uZW50cnk7Zm9yKG0uZW50cnk9''@;'; put 'put ''bnVsbDtuZTspe3ZhciBsZT1uZS5jYWxsYmFjaztBLnBlbmRpbmdjYi0tLGxlKGFlKSxuZT1uZS5uZXh0fUEuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9bX0oQSxtKX19Y2UuZXhwb3J0cz1YO3ZhciBGLHc9IUQuYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihELnZlcnNpb24u''@;'; put 'put ''c2xpY2UoMCw1KSk+LTE/c2V0SW1tZWRpYXRlOl8ubmV4dFRpY2s7WC5Xcml0YWJsZVN0YXRlPXE7dmFyIEg9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtILmluaGVyaXRzPWIoNTcxNyk7dmFyIFEsUj17ZGVwcmVjYXRlOmIoNDkyNyl9LGo9Yig5ODE5KSxQPWIoMTU3MikuQnVmZmVyLEw9KHR5''@;'; put 'put ''cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxXPWIoNTk5Nyk7ZnVuY3Rpb24gWigpe31mdW5jdGlvbiBxKG0sQSl7Rj1GfHxiKDQzOTApO3ZhciBhZT1BIGluc3RhbmNlb2Yg''@;'; put 'put ''Rjt0aGlzLm9iamVjdE1vZGU9ISEobT1tfHx7fSkub2JqZWN0TW9kZSxhZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhbS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBuZT1tLmhpZ2hXYXRlck1hcmssbGU9bS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0''@;'; put 'put ''ZXJNYXJrPW5lfHwwPT09bmU/bmU6YWUmJihsZXx8MD09PWxlKT9sZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5n''@;'; put 'put ''PSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PW0uZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9bS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3Jp''@;'; put 'put ''dGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKFFlKXshZnVuY3Rpb24gemUobSxBKXt2YXIgYWU9bS5fd3JpdGFibGVTdGF0ZSxuZT1hZS5zeW5jLGxlPWFlLndyaXRlY2I7aWYoZnVuY3Rpb24g''@;'; put 'put ''U2UobSl7bS53cml0aW5nPSExLG0ud3JpdGVjYj1udWxsLG0ubGVuZ3RoLT1tLndyaXRlbGVuLG0ud3JpdGVsZW49MH0oYWUpLEEpIWZ1bmN0aW9uIFRlKG0sQSxhZSxuZSxsZSl7LS1BLnBlbmRpbmdjYixhZT8oXy5uZXh0VGljayhsZSxuZSksXy5uZXh0VGljayhWLG0sQSksbS5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsbmUpKToobGUobmUpLG0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1pdCgiZXJyb3IiLG5lKSxWKG0sQSkpfShtLGFlLG5lLEEsbGUpO2Vsc2V7dmFyIHdlPXgoYWUpOyF3ZSYmIWFlLmNvcmtlZCYmIWFl''@;'; put 'put ''LmJ1ZmZlclByb2Nlc3NpbmcmJmFlLmJ1ZmZlcmVkUmVxdWVzdCYmeShtLGFlKSxuZT93KHosbSxhZSx3ZSxsZSk6eihtLGFlLHdlLGxlKX19KEEsUWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBOKHRoaXMpfWZ1bmN0aW9uIFgobSl7aWYoRj1GfHxiKDQzOTAp''@;'; put 'put ''LCEoUS5jYWxsKFgsdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IFgobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgcShtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLGouY2FsbCh0aGlz''@;'; put 'put ''KX1mdW5jdGlvbiBfZShtLEEsYWUsbmUsbGUsd2UsVWUpe0Eud3JpdGVsZW49bmUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KGxlLEEub253cml0ZSk6bS5fd3JpdGUobGUsd2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24geihtLEEsYWUs''@;'; put 'put ''bmUpe2FlfHxmdW5jdGlvbiBnKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSxuZSgpLFYobSxBKX1mdW5jdGlvbiB5KG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBhZT1BLmJ1''@;'; put 'put ''ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJmFlJiZhZS5uZXh0KXt2YXIgbGU9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHdlPUEuY29ya2VkUmVxdWVzdHNGcmVlO3dlLmVudHJ5PWFlO2Zvcih2YXIgVWU9MCxRZT0hMDthZTspbGVbVWVdPWFlLGFlLmlzQnVmfHwoUWU9''@;'; put 'put ''ITEpLGFlPWFlLm5leHQsVWUrPTE7bGUuYWxsQnVmZmVycz1RZSxfZShtLEEsITAsQS5sZW5ndGgsbGUsIiIsd2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHdlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPXdlLm5leHQsd2UubmV4dD1udWxs''@;'; put 'put ''KTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgTihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2FlOyl7dmFyIG90PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTpvdC5sZW5ndGgsb3QsYWUuZW5jb2RpbmcsYWUuY2FsbGJhY2spLGFlPWFlLm5leHQs''@;'; put 'put ''QS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5sZW5n''@;'; put 'put ''dGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIp''@;'; put 'put ''LFYobSxBKX0pfWZ1bmN0aW9uIFYobSxBKXt2YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAsXy5uZXh0''@;'; put 'put ''VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1ILmluaGVyaXRzKFgsaikscS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpSLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhRPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24obSl7cmV0dXJu''@;'; put 'put ''ISFRLmNhbGwodGhpcyxtKXx8dGhpcz09PVgmJm0mJm0uX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBxfX0pKTpRPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30sWC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fu''@;'; put 'put ''bm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sWC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLGFlKXt2YXIgbmU9dGhpcy5fd3JpdGFibGVTdGF0ZSxsZT0hMSx3ZT0hbmUub2JqZWN0TW9kZSYmZnVuY3Rpb24gQihtKXtyZXR1cm4gUC5pc0J1ZmZlcihtKXx8bSBpbnN0YW5jZW9mIEx9''@;'; put 'put ''KG0pO3JldHVybiB3ZSYmIVAuaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIFkobSl7cmV0dXJuIFAuZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLHdlP0E9ImJ1ZmZlciI6QXx8KEE9bmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''YWUmJihhZT1aKSxuZS5lbmRlZD9mdW5jdGlvbiB0ZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTood2V8fGZ1bmN0aW9uIHJlKG0sQSxhZSxuZSl7dmFyIGxlPSEwLHdlPSExO3Jl''@;'; put 'put ''dHVybiBudWxsPT09YWU/d2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKHdlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIg''@;'; put 'put ''Y2h1bmsiKSksd2UmJihtLmVtaXQoImVycm9yIix3ZSksXy5uZXh0VGljayhuZSx3ZSksbGU9ITEpLGxlfSh0aGlzLG5lLG0sYWUpKSYmKG5lLnBlbmRpbmdjYisrLGxlPWZ1bmN0aW9uIGdlKG0sQSxhZSxuZSxsZSx3ZSl7aWYoIWFlKXt2YXIgVWU9ZnVuY3Rpb24gb2UobSxBLGFlKXtyZXR1''@;'; put 'put ''cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1QLmZyb20oQSxhZSkpLEF9KEEsbmUsbGUpO25lIT09VWUmJihhZT0hMCxsZT0iYnVmZmVyIixuZT1VZSl9dmFyIFFlPUEub2JqZWN0TW9kZT8xOm5lLmxlbmd0aDtBLmxlbmd0aCs9''@;'; put 'put ''UWU7dmFyIG90PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihvdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgTWU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bmUsZW5jb2Rpbmc6bGUsaXNCdWY6YWUsY2Fs''@;'; put 'put ''bGJhY2s6d2UsbmV4dDpudWxsfSxNZT9NZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxRZSxuZSxsZSx3ZSk7cmV0dXJuIG90fSh0aGlzLG5l''@;'; put 'put ''LHdlLG0sQSxhZSkpLGxlfSxYLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sWC5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3JpdGluZyYm''@;'; put 'put ''IW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmeSh0aGlzLG0pKX0sWC5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIs''@;'; put 'put ''InV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVy''@;'; put 'put ''TWFya319KSxYLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sWC5wcm90b3R5cGUuX3dyaXRldj1udWxsLFgucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUpe3ZhciBuZT10aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSxuZS5jb3JrZWQmJihuZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuZS5lbmRpbmd8fGZ1''@;'; put 'put ''bmN0aW9uIFUobSxBLGFlKXtBLmVuZGluZz0hMCxWKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyxuZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwiZGVz''@;'; put 'put ''dHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPW0pfX0p''@;'; put 'put ''LFgucHJvdG90eXBlLmRlc3Ryb3k9Vy5kZXN0cm95LFgucHJvdG90eXBlLl91bmRlc3Ryb3k9Vy51bmRlc3Ryb3ksWC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoMTU3MikuQnVm''@;'; put 'put ''ZmVyLHA9Yig2NDE5KTtmdW5jdGlvbiBOKHcsRixIKXt3LmNvcHkoRixIKX1jZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBEKHcsRil7aWYoISh3IGluc3RhbmNlb2YgRikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1''@;'; put 'put ''bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oSCl7dmFyIFI9e2RhdGE6SCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Ujp0aGlzLmhlYWQ9''@;'; put 'put ''Uix0aGlzLnRhaWw9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEgpe3ZhciBSPXtkYXRhOkgsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1SKSx0aGlzLmhlYWQ9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlm''@;'; put 'put ''dD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEg9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxIfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihIKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPXRoaXMuaGVhZCxqPSIiK1IuZGF0YTtSPVIubmV4dDspais9SCtSLmRhdGE7cmV0dXJuIGp9LHcucHJv''@;'; put 'put ''dG90eXBlLmNvbmNhdD1mdW5jdGlvbihIKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBSPV8uYWxsb2NVbnNhZmUoSD4+PjApLGo9dGhpcy5oZWFkLFA9MDtqOylOKGouZGF0YSxSLFApLFArPWouZGF0YS5sZW5ndGgsaj1qLm5leHQ7cmV0dXJuIFJ9LHd9''@;'; put 'put ''KCkscCYmcC5pbnNwZWN0JiZwLmluc3BlY3QuY3VzdG9tJiYoY2UuZXhwb3J0cy5wcm90b3R5cGVbcC5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1wLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sNTk5''@;'; put 'put ''NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDgyMTIpO2Z1bmN0aW9uIE4odyxGKXt3LmVtaXQoImVycm9yIixGKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxGKXt2YXIgSD10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KEY/Rih3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVk''@;'; put 'put ''PSEwLEQubmV4dFRpY2soTix0aGlzLHcpKTpELm5leHRUaWNrKE4sdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEw''@;'; put 'put ''KSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oUCl7IUYmJlA/SC5fd3JpdGFibGVTdGF0ZT9ILl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEguX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQubmV4dFRpY2soTixILFApKTpELm5leHRUaWNrKE4sSCxQKTpGJiZG''@;'; put 'put ''KFApfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBwKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxl''@;'; put 'put ''ZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KGNlLEosYik9PntjZS5leHBvcnRzPWIoNzE4NykuRXZlbnRFbWl0dGVyfSwxNTcy''@;'; put 'put ''OihjZSxKLGIpPT57dmFyIEQ9Yig4NzY0KSxfPUQuQnVmZmVyO2Z1bmN0aW9uIHAodyxGKXtmb3IodmFyIEggaW4gdylGW0hdPXdbSF19ZnVuY3Rpb24gTih3LEYsSCl7cmV0dXJuIF8odyxGLEgpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2Uu''@;'; put 'put ''ZXhwb3J0cz1EOihwKEQsSiksSi5CdWZmZXI9TikscChfLE4pLE4uZnJvbT1mdW5jdGlvbih3LEYsSCl7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxGLEgpfSxOLmFsbG9jPWZ1bmN0''@;'; put 'put ''aW9uKHcsRixIKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PUY/InN0cmluZyI9PXR5cGVvZiBIP1IuZmlsbChGLEgpOlIuZmlsbChGKTpSLmZpbGwoMCksUn0s''@;'; put 'put ''Ti5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxOLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBELlNsb3dCdWZmZXIodyl9fSwzODcyOihjZSxKLGIpPT57KEo9Y2UuZXhwb3J0cz1iKDQ5NjApKS5TdHJlYW09SixKLlJlYWRhYmxlPUosSi5Xcml0YWJsZT1iKDIwMTApLEouRHVwbGV4PWIoNDM5''@;'; put 'put ''MCksSi5UcmFuc2Zvcm09YigzOTEyKSxKLlBhc3NUaHJvdWdoPWIoMTI5NCl9LDIyMjE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMzY0KS5CdWZmZXIsXz1ELmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKFgpe3N3aXRjaCgoWD0iIitYKSYmWC50b0xvd2VyQ2FzZSgpKXtjYXNlImhl''@;'; put 'put ''eCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHco''@;'; put 'put ''WCl7dmFyIHRlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIE4oWCl7dmFyIHRlPWZ1bmN0aW9uIHAoWCl7aWYoIVgpcmV0dXJuInV0ZjgiO2Zvcih2YXIgdGU7Oylzd2l0Y2goWCl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0y''@;'; put 'put ''IjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIFg7ZGVmYXVsdDppZih0ZSlyZXR1cm47WD0oIiIrWCkudG9M''@;'; put 'put ''b3dlckNhc2UoKSx0ZT0hMH19KFgpO2lmKCJzdHJpbmciIT10eXBlb2YgdGUmJihELmlzRW5jb2Rpbmc9PT1ffHwhXyhYKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1gpO3JldHVybiB0ZXx8WH0oWCksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRl''@;'; put 'put ''eHQ9WSx0aGlzLmVuZD1CLHRlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PWosdGU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9Wix0ZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPVEpfXRoaXMubGFz''@;'; put 'put ''dE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9RC5hbGxvY1Vuc2FmZSh0ZSl9ZnVuY3Rpb24gRihYKXtyZXR1cm4gWDw9MTI3PzA6WD4+NT09Nj8yOlg+PjQ9PTE0PzM6WD4+Mz09MzA/NDpYPj42PT0yPy0xOi0yfWZ1bmN0aW9uIGooWCl7dmFyIHRlPXRoaXMubGFzdFRv''@;'; put 'put ''dGFsLXRoaXMubGFzdE5lZWQscmU9ZnVuY3Rpb24gUihYLHRlLHJlKXtpZigxMjghPSgxOTImdGVbMF0pKXJldHVybiBYLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoWC5sYXN0TmVlZD4xJiZ0ZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnRlWzFdKSlyZXR1cm4gWC5sYXN0TmVlZD0xLCJcdWZm''@;'; put 'put ''ZmQiO2lmKFgubGFzdE5lZWQ+MiYmdGUubGVuZ3RoPjImJjEyOCE9KDE5MiZ0ZVsyXSkpcmV0dXJuIFgubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsWCk7cmV0dXJuIHZvaWQgMCE9PXJlP3JlOnRoaXMubGFzdE5lZWQ8PVgubGVuZ3RoPyhYLmNvcHkodGhpcy5sYXN0Q2hhcix0ZSwwLHRo''@;'; put 'put ''aXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KFguY29weSh0aGlzLmxhc3RDaGFyLHRlLDAsWC5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09WC5sZW5ndGgpKX1mdW5jdGlvbiBZKFgsdGUpe2lmKChYLmxlbmd0''@;'; put 'put ''aC10ZSklMj09MCl7dmFyIHJlPVgudG9TdHJpbmcoInV0ZjE2bGUiLHRlKTtpZihyZSl7dmFyIG9lPXJlLmNoYXJDb2RlQXQocmUubGVuZ3RoLTEpO2lmKG9lPj01NTI5NiYmb2U8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBd''@;'; put 'put ''PVhbWC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1YW1gubGVuZ3RoLTFdLHJlLnNsaWNlKDAsLTEpfXJldHVybiByZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1YW1gubGVuZ3RoLTFdLFgudG9TdHJpbmcoInV0ZjE2bGUiLHRl''@;'; put 'put ''LFgubGVuZ3RoLTEpfWZ1bmN0aW9uIEIoWCl7dmFyIHRlPVgmJlgubGVuZ3RoP3RoaXMud3JpdGUoWCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTp0ZX1mdW5jdGlvbiBX''@;'; put 'put ''KFgsdGUpe3ZhciByZT0oWC5sZW5ndGgtdGUpJTM7cmV0dXJuIDA9PT1yZT9YLnRvU3RyaW5nKCJiYXNlNjQiLHRlKToodGhpcy5sYXN0TmVlZD0zLXJlLHRoaXMubGFzdFRvdGFsPTMsMT09PXJlP3RoaXMubGFzdENoYXJbMF09WFtYLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1YW1gu''@;'; put 'put ''bGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09WFtYLmxlbmd0aC0xXSksWC50b1N0cmluZygiYmFzZTY0Iix0ZSxYLmxlbmd0aC1yZSkpfWZ1bmN0aW9uIFooWCl7dmFyIHRlPVgmJlgubGVuZ3RoP3RoaXMud3JpdGUoWCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrdGhpcy5sYXN0Q2hh''@;'; put 'put ''ci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6dGV9ZnVuY3Rpb24gcShYKXtyZXR1cm4gWC50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBRKFgpe3JldHVybiBYJiZYLmxlbmd0aD90aGlzLndyaXRlKFgpOiIifUoucz13LHcucHJvdG90eXBlLndyaXRlPWZ1''@;'; put 'put ''bmN0aW9uKFgpe2lmKDA9PT1YLmxlbmd0aClyZXR1cm4iIjt2YXIgdGUscmU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KHRlPXRoaXMuZmlsbExhc3QoWCkpKXJldHVybiIiO3JlPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgcmU9MDtyZXR1cm4gcmU8WC5sZW5n''@;'; put 'put ''dGg/dGU/dGUrdGhpcy50ZXh0KFgscmUpOnRoaXMudGV4dChYLHJlKTp0ZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBMKFgpe3ZhciB0ZT1YJiZYLmxlbmd0aD90aGlzLndyaXRlKFgpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3RlKyJcdWZmZmQiOnRlfSx3LnByb3RvdHlwZS50''@;'; put 'put ''ZXh0PWZ1bmN0aW9uIFAoWCx0ZSl7dmFyIHJlPWZ1bmN0aW9uIEgoWCx0ZSxyZSl7dmFyIG9lPXRlLmxlbmd0aC0xO2lmKG9lPHJlKXJldHVybiAwO3ZhciBnZT1GKHRlW29lXSk7cmV0dXJuIGdlPj0wPyhnZT4wJiYoWC5sYXN0TmVlZD1nZS0xKSxnZSk6LS1vZTxyZXx8LTI9PT1nZT8wOihn''@;'; put 'put ''ZT1GKHRlW29lXSkpPj0wPyhnZT4wJiYoWC5sYXN0TmVlZD1nZS0yKSxnZSk6LS1vZTxyZXx8LTI9PT1nZT8wOihnZT1GKHRlW29lXSkpPj0wPyhnZT4wJiYoMj09PWdlP2dlPTA6WC5sYXN0TmVlZD1nZS0zKSxnZSk6MH0odGhpcyxYLHRlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gWC50''@;'; put 'put ''b1N0cmluZygidXRmOCIsdGUpO3RoaXMubGFzdFRvdGFsPXJlO3ZhciBvZT1YLmxlbmd0aC0ocmUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIFguY29weSh0aGlzLmxhc3RDaGFyLDAsb2UpLFgudG9TdHJpbmcoInV0ZjgiLHRlLG9lKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oWCl7''@;'; put 'put ''aWYodGhpcy5sYXN0TmVlZDw9WC5sZW5ndGgpcmV0dXJuIFguY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7WC5jb3B5KHRo''@;'; put 'put ''aXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLFgubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1YLmxlbmd0aH19LDMzNjQ6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLF89RC5CdWZmZXI7ZnVuY3Rpb24gcCh3LEYpe2Zvcih2YXIgSCBpbiB3KUZbSF09d1tIXX1mdW5j''@;'; put 'put ''dGlvbiBOKHcsRixIKXtyZXR1cm4gXyh3LEYsSCl9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUQ6KHAoRCxKKSxKLkJ1ZmZlcj1OKSxwKF8sTiksTi5mcm9tPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIj09dHlwZW9mIHcp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LEYsSCl9LE4uYWxsb2M9ZnVuY3Rpb24odyxGLEgpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7''@;'; put 'put ''dmFyIFI9Xyh3KTtyZXR1cm4gdm9pZCAwIT09Rj8ic3RyaW5nIj09dHlwZW9mIEg/Ui5maWxsKEYsSCk6Ui5maWxsKEYpOlIuZmlsbCgwKSxSfSxOLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0''@;'; put 'put ''IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LE4uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEQuU2xvd0J1ZmZlcih3KX19LDcyOTU6KGNlLEos''@;'; put 'put ''Yik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3PU1hdGgubWluKHAubGVuZ3RoLE4ubGVuZ3RoKSxGPW5ldyBEKHcpLEg9MDtIPHc7KytIKUZbSF09cFtIXV5OW0hdO3JldHVybiBGfX0sODc2NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgRD1iKDUxMDgpO2NvbnN0IF89Yig5NzQyKSxwPWIoNjQ1KSxOPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtKLkJ1ZmZlcj1SLEouU2xvd0J1''@;'; put 'put ''ZmZlcj1mdW5jdGlvbiB0ZSgkZSl7cmV0dXJuKyRlIT0kZSYmKCRlPTApLFIuYWxsb2MoKyRlKX0sSi5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCB3PTIxNDc0ODM2NDc7ZnVuY3Rpb24gSCgkZSl7aWYoJGU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlz''@;'; put 'put ''IGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCB0dD1uZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxSLnByb3RvdHlwZSksdHR9ZnVuY3Rpb24gUigkZSx0dCxOZSl7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl7aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiB0dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gWSgkZSl9cmV0dXJuIGooJGUsdHQsTmUpfWZ1bmN0aW9uIGooJGUsdHQsTmUpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgJGUpcmV0dXJuIGZ1bmN0aW9uIEIoJGUsdHQpe2lmKCgic3RyaW5nIiE9dHlwZW9mIHR0fHwiIj09PXR0KSYmKHR0PSJ1dGY4IiksIVIuaXNFbmNvZGluZyh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0dCk7Y29uc3QgTmU9MHxyZSgkZSx0dCk7''@;'; put 'put ''bGV0IHV0PUgoTmUpO2NvbnN0IHF0PXV0LndyaXRlKCRlLHR0KTtyZXR1cm4gcXQhPT1OZSYmKHV0PXV0LnNsaWNlKDAscXQpKSx1dH0oJGUsdHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldygkZSkpcmV0dXJuIGZ1bmN0aW9uIFooJGUpe2lmKGxuKCRlLFVpbnQ4QXJyYXkpKXtjb25zdCB0dD1u''@;'; put 'put ''ZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIHEodHQuYnVmZmVyLHR0LmJ5dGVPZmZzZXQsdHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFcoJGUpfSgkZSk7aWYobnVsbD09JGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBC''@;'; put 'put ''dWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpO2lmKGxuKCRlLEFycmF5QnVmZmVyKXx8JGUmJmxuKCRlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihsbigk''@;'; put 'put ''ZSxTaGFyZWRBcnJheUJ1ZmZlcil8fCRlJiZsbigkZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcSgkZSx0dCxOZSk7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51''@;'; put 'put ''bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCB1dD0kZS52YWx1ZU9mJiYkZS52YWx1ZU9mKCk7aWYobnVsbCE9dXQmJnV0IT09JGUpcmV0dXJuIFIuZnJvbSh1dCx0dCxOZSk7Y29uc3QgcXQ9ZnVuY3Rpb24gUSgkZSl7aWYoUi5pc0J1ZmZlcigkZSkpe2NvbnN0IHR0PTB8WCgk''@;'; put 'put ''ZS5sZW5ndGgpLE5lPUgodHQpO3JldHVybiAwPT09TmUubGVuZ3RofHwkZS5jb3B5KE5lLDAsMCx0dCksTmV9cmV0dXJuIHZvaWQgMCE9PSRlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mICRlLmxlbmd0aHx8eXQoJGUubGVuZ3RoKT9IKDApOlcoJGUpOiJCdWZmZXIiPT09JGUudHlwZSYmQXJy''@;'; put 'put ''YXkuaXNBcnJheSgkZS5kYXRhKT9XKCRlLmRhdGEpOnZvaWQgMH0oJGUpO2lmKHF0KXJldHVybiBxdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgJGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gUi5mcm9tKCRl''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LE5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQg''@;'; put 'put ''dHlwZSAiK3R5cGVvZiAkZSl9ZnVuY3Rpb24gUCgkZSl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyskZSsn''@;'; put 'put ''IiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gWSgkZSl7cmV0dXJuIFAoJGUpLEgoJGU8MD8wOjB8WCgkZSkpfWZ1bmN0aW9uIFcoJGUpe2NvbnN0IHR0PSRlLmxlbmd0aDwwPzA6MHxYKCRlLmxlbmd0aCksTmU9SCh0dCk7Zm9yKGxldCB1dD0wO3V0PHR0O3V0Kz0x''@;'; put 'put ''KU5lW3V0XT0yNTUmJGVbdXRdO3JldHVybiBOZX1mdW5jdGlvbiBxKCRlLHR0LE5lKXtpZih0dDwwfHwkZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZigkZS5ieXRlTGVuZ3RoPHR0KyhOZXx8MCkp''@;'; put 'put ''dGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PU5lP25ldyBVaW50OEFycmF5KCRlKTp2b2lkIDA9PT1OZT9uZXcgVWludDhBcnJheSgkZSx0dCk6bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoJGUsdHQsTmUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih1dCxSLnByb3RvdHlwZSksdXR9ZnVuY3Rpb24gWCgkZSl7aWYoJGU+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3cudG9T''@;'; put 'put ''dHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHwkZX1mdW5jdGlvbiByZSgkZSx0dCl7aWYoUi5pc0J1ZmZlcigkZSkpcmV0dXJuICRlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJGUpfHxsbigkZSxBcnJheUJ1ZmZlcikpcmV0dXJuICRlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgJGUpO2NvbnN0IE5lPSRlLmxlbmd0aCx1dD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF1dCYmMD09PU5lKXJldHVybiAwO2xldCBxdD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBOZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEZSgkZSku''@;'; put 'put ''bGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipOZTtjYXNlImhleCI6cmV0dXJuIE5lPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG50KCRlKS5sZW5ndGg7ZGVmYXVsdDppZihxdClyZXR1cm4gdXQ/LTE6RGUoJGUpLmxl''@;'; put 'put ''bmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCkscXQ9ITB9fWZ1bmN0aW9uIG9lKCRlLHR0LE5lKXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PU5lfHxOZT50aGlzLmxlbmd0aCkmJihOZT10aGlzLmxlbmd0aCks''@;'; put 'put ''TmU8PTApfHwoTmU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoJGV8fCgkZT0idXRmOCIpOzspc3dpdGNoKCRlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxOZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LE5lKTtjYXNlImFzY2lpIjpyZXR1cm4g''@;'; put 'put ''VSh0aGlzLHR0LE5lKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsTmUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LE5lKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhpcyx0dCxO''@;'; put 'put ''ZSk7ZGVmYXVsdDppZih1dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiKyRlKTskZT0oJGUrIiIpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIGdlKCRlLHR0LE5lKXtjb25zdCB1dD0kZVt0dF07JGVbdHRdPSRlW05lXSwkZVtOZV09dXR9ZnVuY3Rpb24g''@;'; put 'put ''X2UoJGUsdHQsTmUsdXQscXQpe2lmKDA9PT0kZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBOZT8odXQ9TmUsTmU9MCk6TmU+MjE0NzQ4MzY0Nz9OZT0yMTQ3NDgzNjQ3Ok5lPC0yMTQ3NDgzNjQ4JiYoTmU9LTIxNDc0ODM2NDgpLHl0KE5lPStOZSkmJihOZT1xdD8wOiRl''@;'; put 'put ''Lmxlbmd0aC0xKSxOZTwwJiYoTmU9JGUubGVuZ3RoK05lKSxOZT49JGUubGVuZ3RoKXtpZihxdClyZXR1cm4tMTtOZT0kZS5sZW5ndGgtMX1lbHNlIGlmKE5lPDApe2lmKCFxdClyZXR1cm4tMTtOZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1SLmZyb20odHQsdXQpKSxSLmlzQnVm''@;'; put 'put ''ZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZSgkZSx0dCxOZSx1dCxxdCk7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRl''@;'; put 'put ''eE9mLmNhbGwoJGUsdHQsTmUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoJGUsdHQsTmUpOlRlKCRlLFt0dF0sTmUsdXQscXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRlKCRlLHR0''@;'; put 'put ''LE5lLHV0LHF0KXtsZXQgc24sUnQ9MSxQdD0kZS5sZW5ndGgsY2k9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmluZyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZsZSI9PT11dCkpe2lmKCRlLmxlbmd0''@;'; put 'put ''aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtSdD0yLFB0Lz0yLGNpLz0yLE5lLz0yfWZ1bmN0aW9uIFF0KFJpLGhuKXtyZXR1cm4gMT09PVJ0P1JpW2huXTpSaS5yZWFkVUludDE2QkUoaG4qUnQpfWlmKHF0KXtsZXQgUmk9LTE7Zm9yKHNuPU5lO3NuPFB0O3NuKyspaWYoUXQoJGUsc24pPT09''@;'; put 'put ''UXQodHQsLTE9PT1SaT8wOnNuLVJpKSl7aWYoLTE9PT1SaSYmKFJpPXNuKSxzbi1SaSsxPT09Y2kpcmV0dXJuIFJpKlJ0fWVsc2UtMSE9PVJpJiYoc24tPXNuLVJpKSxSaT0tMX1lbHNlIGZvcihOZStjaT5QdCYmKE5lPVB0LWNpKSxzbj1OZTtzbj49MDtzbi0tKXtsZXQgUmk9ITA7Zm9yKGxl''@;'; put 'put ''dCBobj0wO2huPGNpO2huKyspaWYoUXQoJGUsc24raG4pIT09UXQodHQsaG4pKXtSaT0hMTticmVha31pZihSaSlyZXR1cm4gc259cmV0dXJuLTF9ZnVuY3Rpb24gU2UoJGUsdHQsTmUsdXQpe05lPU51bWJlcihOZSl8fDA7Y29uc3QgcXQ9JGUubGVuZ3RoLU5lO3V0Pyh1dD1OdW1iZXIodXQp''@;'; put 'put ''KT5xdCYmKHV0PXF0KTp1dD1xdDtjb25zdCBSdD10dC5sZW5ndGg7bGV0IFB0O2Zvcih1dD5SdC8yJiYodXQ9UnQvMiksUHQ9MDtQdDx1dDsrK1B0KXtjb25zdCBjaT1wYXJzZUludCh0dC5zdWJzdHIoMipQdCwyKSwxNik7aWYoeXQoY2kpKXJldHVybiBQdDskZVtOZStQdF09Y2l9cmV0dXJu''@;'; put 'put ''IFB0fWZ1bmN0aW9uIHplKCRlLHR0LE5lLHV0KXtyZXR1cm4gSmUoRGUodHQsJGUubGVuZ3RoLU5lKSwkZSxOZSx1dCl9ZnVuY3Rpb24geigkZSx0dCxOZSx1dCl7cmV0dXJuIEplKGZ1bmN0aW9uIGtlKCRlKXtjb25zdCB0dD1bXTtmb3IobGV0IE5lPTA7TmU8JGUubGVuZ3RoOysrTmUpdHQu''@;'; put 'put ''cHVzaCgyNTUmJGUuY2hhckNvZGVBdChOZSkpO3JldHVybiB0dH0odHQpLCRlLE5lLHV0KX1mdW5jdGlvbiBnKCRlLHR0LE5lLHV0KXtyZXR1cm4gSmUobnQodHQpLCRlLE5lLHV0KX1mdW5jdGlvbiB5KCRlLHR0LE5lLHV0KXtyZXR1cm4gSmUoZnVuY3Rpb24gX3QoJGUsdHQpe2xldCBOZSx1''@;'; put 'put ''dCxxdDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8JGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytQdClOZT0kZS5jaGFyQ29kZUF0KFB0KSx1dD1OZT4+OCxxdD1OZSUyNTYsUnQucHVzaChxdCksUnQucHVzaCh1dCk7cmV0dXJuIFJ0fSh0dCwkZS5sZW5ndGgtTmUpLCRlLE5lLHV0KX1m''@;'; put 'put ''dW5jdGlvbiB4KCRlLHR0LE5lKXtyZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmTmU9PT0kZS5sZW5ndGg/JGU6JGUuc2xpY2UodHQsTmUpKX1mdW5jdGlvbiBDKCRlLHR0LE5lKXtOZT1NYXRoLm1pbigkZS5sZW5ndGgsTmUpO2NvbnN0IHV0PVtdO2xldCBxdD10dDtmb3IoO3F0PE5l''@;'; put 'put ''Oyl7Y29uc3QgUnQ9JGVbcXRdO2xldCBQdD1udWxsLGNpPVJ0PjIzOT80OlJ0PjIyMz8zOlJ0PjE5MT8yOjE7aWYocXQrY2k8PU5lKXtsZXQgUXQsc24sUmksaG47c3dpdGNoKGNpKXtjYXNlIDE6UnQ8MTI4JiYoUHQ9UnQpO2JyZWFrO2Nhc2UgMjpRdD0kZVtxdCsxXSwxMjg9PSgxOTImUXQp''@;'; put 'put ''JiYoaG49KDMxJlJ0KTw8Nnw2MyZRdCxobj4xMjcmJihQdD1obikpO2JyZWFrO2Nhc2UgMzpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSwxMjg9PSgxOTImUXQpJiYxMjg9PSgxOTImc24pJiYoaG49KDE1JlJ0KTw8MTJ8KDYzJlF0KTw8Nnw2MyZzbixobj4yMDQ3JiYoaG48NTUyOTZ8fGhuPjU3''@;'; put 'put ''MzQzKSYmKFB0PWhuKSk7YnJlYWs7Y2FzZSA0OlF0PSRlW3F0KzFdLHNuPSRlW3F0KzJdLFJpPSRlW3F0KzNdLDEyOD09KDE5MiZRdCkmJjEyOD09KDE5MiZzbikmJjEyOD09KDE5MiZSaSkmJihobj0oMTUmUnQpPDwxOHwoNjMmUXQpPDwxMnwoNjMmc24pPDw2fDYzJlJpLGhuPjY1NTM1JiZo''@;'; put 'put ''bjwxMTE0MTEyJiYoUHQ9aG4pKX19bnVsbD09PVB0PyhQdD02NTUzMyxjaT0xKTpQdD42NTUzNSYmKFB0LT02NTUzNix1dC5wdXNoKFB0Pj4+MTAmMTAyM3w1NTI5NiksUHQ9NTYzMjB8MTAyMyZQdCksdXQucHVzaChQdCkscXQrPWNpfXJldHVybiBmdW5jdGlvbiBWKCRlKXtjb25zdCB0dD0k''@;'; put 'put ''ZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlKTtsZXQgTmU9IiIsdXQ9MDtmb3IoO3V0PHR0OylOZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsJGUuc2xpY2UodXQsdXQrPVQpKTtyZXR1cm4gTmV9KHV0KX1KLmtN''@;'; put 'put ''YXhMZW5ndGg9dywhKFIuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBGKCl7dHJ5e2NvbnN0ICRlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxP''@;'; put 'put ''YmplY3Quc2V0UHJvdG90eXBlT2YoJGUsdHQpLDQyPT09JGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEQ8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgRC5lcnJvciYmRC5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0''@;'; put 'put ''IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksUi5w''@;'; put 'put ''b29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbigkZSx0dCxOZSl7cmV0dXJuIGooJGUsdHQsTmUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9ZnVuY3Rp''@;'; put 'put ''b24oJGUsdHQsTmUpe3JldHVybiBmdW5jdGlvbiBMKCRlLHR0LE5lKXtyZXR1cm4gUCgkZSksJGU8PTA/SCgkZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBOZT9IKCRlKS5maWxsKHR0LE5lKTpIKCRlKS5maWxsKHR0KTpIKCRlKX0oJGUsdHQsTmUpfSxSLmFsbG9jVW5zYWZlPWZ1''@;'; put 'put ''bmN0aW9uKCRlKXtyZXR1cm4gWSgkZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKCRlKXtyZXR1cm4gWSgkZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1mdW5jdGlv''@;'; put 'put ''bih0dCxOZSl7aWYobG4odHQsVWludDhBcnJheSkmJih0dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSxsbihOZSxVaW50OEFycmF5KSYmKE5lPVIuZnJvbShOZSxOZS5vZmZzZXQsTmUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKHR0KXx8IVIuaXNCdWZmZXIoTmUpKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09TmUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxxdD1OZS5sZW5ndGg7Zm9yKGxldCBSdD0wLFB0PU1hdGgubWlu''@;'; put 'put ''KHV0LHF0KTtSdDxQdDsrK1J0KWlmKHR0W1J0XSE9PU5lW1J0XSl7dXQ9dHRbUnRdLHF0PU5lW1J0XTticmVha31yZXR1cm4gdXQ8cXQ/LTE6cXQ8dXQ/MTowfSxSLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNl''@;'; put 'put ''InV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9ZnVuY3Rp''@;'; put 'put ''b24odHQsTmUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtsZXQgdXQ7aWYodm9pZCAwPT09TmUpZm9yKE5lPTAs''@;'; put 'put ''dXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dClOZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBxdD1SLmFsbG9jVW5zYWZlKE5lKTtsZXQgUnQ9MDtmb3IodXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFB0PXR0W3V0XTtpZihsbihQdCxVaW50OEFycmF5KSlSdCtQdC5sZW5ndGg+cXQubGVuZ3RoPyhS''@;'; put 'put ''LmlzQnVmZmVyKFB0KXx8KFB0PVIuZnJvbShQdCkpLFB0LmNvcHkocXQsUnQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxdCxQdCxSdCk7ZWxzZXtpZighUi5pc0J1ZmZlcihQdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkg''@;'; put 'put ''b2YgQnVmZmVycycpO1B0LmNvcHkocXQsUnQpfVJ0Kz1QdC5sZW5ndGh9cmV0dXJuIHF0fSxSLmJ5dGVMZW5ndGg9cmUsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBOZT0wO05lPHR0O05lKz0yKWdlKHRoaXMsTmUsTmUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lm''@;'; put 'put ''KHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBOZT0wO05lPHR0O05lKz00KWdlKHRoaXMsTmUsTmUrMyksZ2UodGhpcyxOZSsxLE5lKzIpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS5zd2Fw''@;'; put 'put ''NjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgTmU9MDtOZTx0dDtOZSs9OClnZSh0aGlzLE5lLE5lKzcpLGdlKHRoaXMsTmUr''@;'; put 'put ''MSxOZSs2KSxnZSh0aGlzLE5lKzIsTmUrNSksZ2UodGhpcyxOZSszLE5lKzQpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09PWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOm9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09''@;'; put 'put ''dHR8fDA9PT1SLmNvbXBhcmUodGhpcyx0dCl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgTmU9Si5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLE5lKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgp''@;'; put 'put ''LHRoaXMubGVuZ3RoPk5lJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxOJiYoUi5wcm90b3R5cGVbTl09Ui5wcm90b3R5cGUuaW5zcGVjdCksUi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxOZSx1dCxxdCxSdCl7aWYobG4odHQsVWludDhBcnJheSkmJih0dD1SLmZy''@;'; put 'put ''b20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQpO2lmKHZv''@;'; put 'put ''aWQgMD09PU5lJiYoTmU9MCksdm9pZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09cXQmJihxdD0wKSx2b2lkIDA9PT1SdCYmKFJ0PXRoaXMubGVuZ3RoKSxOZTwwfHx1dD50dC5sZW5ndGh8fHF0PDB8fFJ0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJv''@;'; put 'put ''dXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihxdD49UnQmJk5lPj11dClyZXR1cm4gMDtpZihxdD49UnQpcmV0dXJuLTE7aWYoTmU+PXV0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUHQ9KFJ0Pj4+PTApLShxdD4+Pj0wKSxjaT0odXQ+Pj49MCktKE5lPj4+PTApO2NvbnN0IFF0''@;'; put 'put ''PU1hdGgubWluKFB0LGNpKSxzbj10aGlzLnNsaWNlKHF0LFJ0KSxSaT10dC5zbGljZShOZSx1dCk7Zm9yKGxldCBobj0wO2huPFF0OysraG4paWYoc25baG5dIT09UmlbaG5dKXtQdD1zbltobl0sY2k9UmlbaG5dO2JyZWFrfXJldHVybiBQdDxjaT8tMTpjaTxQdD8xOjB9LFIucHJvdG90eXBl''@;'; put 'put ''LmluY2x1ZGVzPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxOZSx1dCl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBfZSh0aGlzLHR0LE5lLHV0LCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24o''@;'; put 'put ''dHQsTmUsdXQpe3JldHVybiBfZSh0aGlzLHR0LE5lLHV0LCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsTmUsdXQscXQpe2lmKHZvaWQgMD09PU5lKXF0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxOZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQmJiJzdHJpbmciPT10eXBlb2YgTmUp''@;'; put 'put ''cXQ9TmUsdXQ9dGhpcy5sZW5ndGgsTmU9MDtlbHNle2lmKCFpc0Zpbml0ZShOZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO05lPj4+PTAsaXNGaW5pdGUodXQpPyh1dD4+''@;'; put 'put ''Pj0wLHZvaWQgMD09PXF0JiYocXQ9InV0ZjgiKSk6KHF0PXV0LHV0PXZvaWQgMCl9Y29uc3QgUnQ9dGhpcy5sZW5ndGgtTmU7aWYoKHZvaWQgMD09PXV0fHx1dD5SdCkmJih1dD1SdCksdHQubGVuZ3RoPjAmJih1dDwwfHxOZTwwKXx8TmU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cXR8fChxdD0idXRmOCIpO2xldCBQdD0hMTtmb3IoOzspc3dpdGNoKHF0KXtjYXNlImhleCI6cmV0dXJuIFNlKHRoaXMsdHQsTmUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHplKHRoaXMsdHQs''@;'; put 'put ''TmUsdXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHoodGhpcyx0dCxOZSx1dCk7Y2FzZSJiYXNlNjQiOnJldHVybiBnKHRoaXMsdHQsTmUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4g''@;'; put 'put ''eSh0aGlzLHR0LE5lLHV0KTtkZWZhdWx0OmlmKFB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO3F0PSgiIitxdCkudG9Mb3dlckNhc2UoKSxQdD0hMH19LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6''@;'; put 'put ''QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIFUoJGUsdHQsTmUpe2xldCB1dD0iIjtOZT1NYXRoLm1pbigkZS5sZW5ndGgsTmUpO2ZvcihsZXQgcXQ9dHQ7cXQ8TmU7KytxdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZSgxMjcmJGVbcXRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gRSgkZSx0dCxOZSl7bGV0IHV0PSIiO05lPU1hdGgubWluKCRlLmxlbmd0aCxOZSk7Zm9yKGxldCBxdD10dDtxdDxOZTsrK3F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRlW3F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIG0oJGUsdHQs''@;'; put 'put ''TmUpe2NvbnN0IHV0PSRlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghTmV8fE5lPDB8fE5lPnV0KSYmKE5lPXV0KTtsZXQgcXQ9IiI7Zm9yKGxldCBSdD10dDtSdDxOZTsrK1J0KXF0Kz1TdFskZVtSdF1dO3JldHVybiBxdH1mdW5jdGlvbiBBKCRlLHR0LE5lKXtjb25zdCB1dD0kZS5z''@;'; put 'put ''bGljZSh0dCxOZSk7bGV0IHF0PSIiO2ZvcihsZXQgUnQ9MDtSdDx1dC5sZW5ndGgtMTtSdCs9MilxdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtSdF0rMjU2KnV0W1J0KzFdKTtyZXR1cm4gcXR9ZnVuY3Rpb24gYWUoJGUsdHQsTmUpe2lmKCRlJTEhPTB8fCRlPDApdGhyb3cgbmV3IFJhbmdl''@;'; put 'put ''RXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKCRlK3R0Pk5lKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoJGUsdHQsTmUsdXQscXQsUnQpe2lmKCFSLmlzQnVmZmVyKCRlKSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+cXR8fHR0PFJ0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihOZSt1dD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGxlKCRlLHR0LE5lLHV0LHF0KXtBZSh0dCx1dCxxdCwkZSxOZSw3KTtsZXQgUnQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7JGVbTmUrK109UnQsUnQ+Pj04LCRlW05lKytdPVJ0LFJ0Pj49OCwkZVtOZSsrXT1SdCxSdD4+''@;'; put 'put ''PTgsJGVbTmUrK109UnQ7bGV0IFB0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiAkZVtOZSsrXT1QdCxQdD4+PTgsJGVbTmUrK109UHQsUHQ+Pj04LCRlW05lKytdPVB0LFB0Pj49OCwkZVtOZSsrXT1QdCxOZX1mdW5jdGlvbiB3ZSgkZSx0dCxOZSx1''@;'; put 'put ''dCxxdCl7QWUodHQsdXQscXQsJGUsTmUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW05lKzddPVJ0LFJ0Pj49OCwkZVtOZSs2XT1SdCxSdD4+PTgsJGVbTmUrNV09UnQsUnQ+Pj04LCRlW05lKzRdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmln''@;'; put 'put ''SW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gJGVbTmUrM109UHQsUHQ+Pj04LCRlW05lKzJdPVB0LFB0Pj49OCwkZVtOZSsxXT1QdCxQdD4+PTgsJGVbTmVdPVB0LE5lKzh9ZnVuY3Rpb24gVWUoJGUsdHQsTmUsdXQscXQsUnQpe2lmKE5lK3V0PiRlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJv''@;'; put 'put ''cigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoTmU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUWUoJGUsdHQsTmUsdXQscXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCxxdHx8VWUoJGUsMCxOZSw0KSxwLndyaXRlKCRlLHR0LE5lLHV0LDIz''@;'; put 'put ''LDQpLE5lKzR9ZnVuY3Rpb24gb3QoJGUsdHQsTmUsdXQscXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCxxdHx8VWUoJGUsMCxOZSw4KSxwLndyaXRlKCRlLHR0LE5lLHV0LDUyLDgpLE5lKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsTmUpe2NvbnN0IHV0PXRoaXMubGVuZ3RoOyh0''@;'; put 'put ''dD1+fnR0KTwwPyh0dCs9dXQpPDAmJih0dD0wKTp0dD51dCYmKHR0PXV0KSwoTmU9dm9pZCAwPT09TmU/dXQ6fn5OZSk8MD8oTmUrPXV0KTwwJiYoTmU9MCk6TmU+dXQmJihOZT11dCksTmU8dHQmJihOZT10dCk7Y29uc3QgcXQ9dGhpcy5zdWJhcnJheSh0dCxOZSk7cmV0dXJuIE9iamVjdC5z''@;'; put 'put ''ZXRQcm90b3R5cGVPZihxdCxSLnByb3RvdHlwZSkscXR9LFIucHJvdG90eXBlLnJlYWRVaW50TEU9Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxOZSx1dCl7dHQ+Pj49MCxOZT4+Pj0wLHV0fHxhZSh0dCxOZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9''@;'; put 'put ''MDtmb3IoOysrUHQ8TmUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBxdH0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LE5lLHV0KXt0dD4+Pj0wLE5lPj4+PTAsdXR8fGFlKHR0LE5lLHRoaXMubGVuZ3RoKTts''@;'; put 'put ''ZXQgcXQ9dGhpc1t0dCstLU5lXSxSdD0xO2Zvcig7TmU+MCYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCstLU5lXSpSdDtyZXR1cm4gcXR9LFIucHJvdG90eXBlLnJlYWRVaW50OD1SLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCwx''@;'; put 'put ''LHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LFIucHJvdG90eXBl''@;'; put 'put ''LnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ui5wcm90b3R5cGUucmVhZFVJbnQz''@;'; put 'put ''MkxFPWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5yZWFkVUlu''@;'; put 'put ''dDMyQkU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sUi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0''@;'; put 'put ''KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBOZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1OZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD1OZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0qMioqMjQs''@;'; put 'put ''UnQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3JldHVybiBCaWdJbnQocXQpKyhCaWdJbnQoUnQpPDxCaWdJbnQoMzIpKX0pLFIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7''@;'; put 'put ''Y29uc3QgTmU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09TmV8fHZvaWQgMD09PXV0KSYmUmUodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9TmUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLFJ0PXRoaXNbKyt0dF0qMioqMjQrNjU1''@;'; put 'put ''MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KFJ0KX0pLFIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxOZSx1dCl7dHQ+Pj49MCxOZT4+Pj0wLHV0fHxhZSh0dCxOZSx0aGlzLmxlbmd0aCk7bGV0IHF0''@;'; put 'put ''PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8TmUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBSdCo9MTI4LHF0Pj1SdCYmKHF0LT1NYXRoLnBvdygyLDgqTmUpKSxxdH0sUi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LE5lLHV0KXt0dD4+Pj0wLE5l''@;'; put 'put ''Pj4+PTAsdXR8fGFlKHR0LE5lLHRoaXMubGVuZ3RoKTtsZXQgcXQ9TmUsUnQ9MSxQdD10aGlzW3R0Ky0tcXRdO2Zvcig7cXQ+MCYmKFJ0Kj0yNTYpOylQdCs9dGhpc1t0dCstLXF0XSpSdDtyZXR1cm4gUnQqPTEyOCxQdD49UnQmJihQdC09TWF0aC5wb3coMiw4Kk5lKSksUHR9LFIucHJvdG90''@;'; put 'put ''eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LE5lKXt0dD4+Pj0wLE5lfHxh''@;'; put 'put ''ZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxOZSl7dHQ+Pj49MCxOZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7Y29uc3Qg''@;'; put 'put ''dXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRo''@;'; put 'put ''aXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQrM119LFIu''@;'; put 'put ''cHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBOZT10aGlzW3R0XSx1dD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1OZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbdHQr''@;'; put 'put ''NF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChOZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksUi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQp''@;'; put 'put ''e0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IE5lPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PU5lfHx2b2lkIDA9PT11dCkmJlJlKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PShOZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XTty''@;'; put 'put ''ZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dCl9KSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhp''@;'; put 'put ''cy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxOZSl7cmV0dXJuIHR0Pj4+PTAsTmV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9''@;'; put 'put ''ZnVuY3Rpb24odHQsTmUpe3JldHVybiB0dD4+Pj0wLE5lfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxwLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LE5lKXtyZXR1cm4gdHQ+Pj49MCxOZXx8YWUodHQsOCx0aGlzLmxlbmd0aCkscC5y''@;'; put 'put ''ZWFkKHRoaXMsdHQsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LE5lLHV0LHF0KXt0dD0rdHQsTmU+Pj49MCx1dD4+Pj0wLHF0fHxuZSh0aGlzLHR0LE5lLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTtsZXQgUnQ9''@;'; put 'put ''MSxQdD0wO2Zvcih0aGlzW05lXT0yNTUmdHQ7KytQdDx1dCYmKFJ0Kj0yNTYpOyl0aGlzW05lK1B0XT10dC9SdCYyNTU7cmV0dXJuIE5lK3V0fSxSLnByb3RvdHlwZS53cml0ZVVpbnRCRT1SLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxOZSx1dCxxdCl7dHQ9K3R0LE5lPj4+''@;'; put 'put ''PTAsdXQ+Pj49MCxxdHx8bmUodGhpcyx0dCxOZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PXV0LTEsUHQ9MTtmb3IodGhpc1tOZStSdF09MjU1JnR0Oy0tUnQ+PTAmJihQdCo9MjU2KTspdGhpc1tOZStSdF09dHQvUHQmMjU1O3JldHVybiBOZSt1dH0sUi5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsMSwyNTUsMCksdGhpc1tOZV09MjU1JnR0LE5lKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MTZMRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LE5lLDIsNjU1MzUsMCksdGhpc1tOZV09MjU1JnR0LHRoaXNbTmUrMV09dHQ+Pj44LE5lKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50''@;'; put 'put ''MTZCRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LE5lLDIsNjU1MzUsMCksdGhpc1tOZV09dHQ+Pj44LHRoaXNbTmUrMV09MjU1JnR0LE5lKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVVSW50MzJM''@;'; put 'put ''RT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LE5lLDQsNDI5NDk2NzI5NSwwKSx0aGlzW05lKzNdPXR0Pj4+MjQsdGhpc1tOZSsyXT10dD4+PjE2LHRoaXNbTmUrMV09dHQ+Pj44LHRoaXNbTmVdPTI1NSZ0dCxOZSs0fSxSLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCx1dHx8bmUodGhpcyx0dCxOZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tOZV09dHQ+Pj4yNCx0aGlzW05lKzFdPXR0Pj4+MTYsdGhpc1tOZSsyXT10''@;'; put 'put ''dD4+PjgsdGhpc1tOZSszXT0yNTUmdHQsTmUrNH0sUi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCxOZT0wKXtyZXR1cm4gbGUodGhpcyx0dCxOZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ1VJ''@;'; put 'put ''bnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LE5lPTApe3JldHVybiB3ZSh0aGlzLHR0LE5lLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsTmUsdXQscXQpe2lmKHR0PSt0dCxOZT4+Pj0wLCFxdCl7Y29uc3Qg''@;'; put 'put ''UXQ9TWF0aC5wb3coMiw4KnV0LTEpO25lKHRoaXMsdHQsTmUsdXQsUXQtMSwtUXQpfWxldCBSdD0wLFB0PTEsY2k9MDtmb3IodGhpc1tOZV09MjU1JnR0OysrUnQ8dXQmJihQdCo9MjU2KTspdHQ8MCYmMD09PWNpJiYwIT09dGhpc1tOZStSdC0xXSYmKGNpPTEpLHRoaXNbTmUrUnRdPSh0dC9Q''@;'; put 'put ''dHwwKS1jaSYyNTU7cmV0dXJuIE5lK3V0fSxSLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LE5lLHV0LHF0KXtpZih0dD0rdHQsTmU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTtuZSh0aGlzLHR0LE5lLHV0LFF0LTEsLVF0KX1sZXQgUnQ9dXQtMSxQdD0x''@;'; put 'put ''LGNpPTA7Zm9yKHRoaXNbTmUrUnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1jaSYmMCE9PXRoaXNbTmUrUnQrMV0mJihjaT0xKSx0aGlzW05lK1J0XT0odHQvUHR8MCktY2kmMjU1O3JldHVybiBOZSt1dH0sUi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHR0''@;'; put 'put ''LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW05lXT0yNTUmdHQsTmUrMX0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+''@;'; put 'put ''PTAsdXR8fG5lKHRoaXMsdHQsTmUsMiwzMjc2NywtMzI3NjgpLHRoaXNbTmVdPTI1NSZ0dCx0aGlzW05lKzFdPXR0Pj4+OCxOZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiB0dD0rdHQsTmU+Pj49MCx1dHx8bmUodGhpcyx0dCxOZSwyLDMy''@;'; put 'put ''NzY3LC0zMjc2OCksdGhpc1tOZV09dHQ+Pj44LHRoaXNbTmUrMV09MjU1JnR0LE5lKzJ9LFIucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJuIHR0PSt0dCxOZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LE5lLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhp''@;'; put 'put ''c1tOZV09MjU1JnR0LHRoaXNbTmUrMV09dHQ+Pj44LHRoaXNbTmUrMl09dHQ+Pj4xNix0aGlzW05lKzNdPXR0Pj4+MjQsTmUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LE5lLHV0KXtyZXR1cm4gdHQ9K3R0LE5lPj4+PTAsdXR8fG5lKHRoaXMsdHQsTmUsNCwyMTQ3''@;'; put 'put ''NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW05lXT10dD4+PjI0LHRoaXNbTmUrMV09dHQ+Pj4xNix0aGlzW05lKzJdPXR0Pj4+OCx0aGlzW05lKzNdPTI1NSZ0dCxOZSs0fSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9RHQoZnVuY3Rpb24o''@;'; put 'put ''dHQsTmU9MCl7cmV0dXJuIGxlKHRoaXMsdHQsTmUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQsTmU9MCl7cmV0dXJuIHdlKHRoaXMsdHQsTmUsLUJp''@;'; put 'put ''Z0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBRZSh0aGlzLHR0LE5lLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9u''@;'; put 'put ''KHR0LE5lLHV0KXtyZXR1cm4gUWUodGhpcyx0dCxOZSwhMSx1dCl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsTmUsdXQpe3JldHVybiBvdCh0aGlzLHR0LE5lLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxOZSx1dCl7cmV0dXJu''@;'; put 'put ''IG90KHRoaXMsdHQsTmUsITEsdXQpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LE5lLHV0LHF0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0wKSwhcXQmJjAhPT1xdCYmKHF0PXRo''@;'; put 'put ''aXMubGVuZ3RoKSxOZT49dHQubGVuZ3RoJiYoTmU9dHQubGVuZ3RoKSxOZXx8KE5lPTApLHF0PjAmJnF0PHV0JiYocXQ9dXQpLHF0PT09dXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihOZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBv''@;'; put 'put ''dXQgb2YgYm91bmRzIik7aWYodXQ8MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihxdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3F0PnRoaXMubGVuZ3RoJiYocXQ9dGhpcy5s''@;'; put 'put ''ZW5ndGgpLHR0Lmxlbmd0aC1OZTxxdC11dCYmKHF0PXR0Lmxlbmd0aC1OZSt1dCk7Y29uc3QgUnQ9cXQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKE5lLHV0LHF0KTpVaW50OEFy''@;'; put 'put ''cmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KHV0LHF0KSxOZSksUnR9LFIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsTmUsdXQscXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgTmU/KHF0PU5lLE5lPTAsdXQ9dGhpcy5sZW5n''@;'; put 'put ''dGgpOiJzdHJpbmciPT10eXBlb2YgdXQmJihxdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09cXQmJiJzdHJpbmciIT10eXBlb2YgcXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgcXQmJiFSLmlzRW5jb2Rp''@;'; put 'put ''bmcocXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFB0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXF0JiZQdDwxMjh8fCJsYXRpbjEiPT09cXQpJiYodHQ9UHQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiB0''@;'; put 'put ''dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoTmU8MHx8dGhpcy5sZW5ndGg8TmV8fHRoaXMubGVuZ3RoPHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9TmUpcmV0dXJuIHRoaXM7bGV0IFJ0O2lmKE5l''@;'; put 'put ''Pj4+PTAsdXQ9dm9pZCAwPT09dXQ/dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoUnQ9TmU7UnQ8dXQ7KytSdCl0aGlzW1J0XT10dDtlbHNle2NvbnN0IFB0PVIuaXNCdWZmZXIodHQpP3R0OlIuZnJvbSh0dCxxdCksY2k9UHQubGVuZ3RoO2lm''@;'; put 'put ''KDA9PT1jaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihSdD0wO1J0PHV0LU5lOysrUnQpdGhpc1tSdCtOZV09UHRbUnQlY2ldfXJldHVybiB0aGlzfTtjb25zdCBNZT17fTtmdW5jdGlvbiB2ZSgk''@;'; put 'put ''ZSx0dCxOZSl7TWVbJGVdPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1g''@;'; put 'put ''JHt0aGlzLm5hbWV9IFskeyRlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gJGV9c2V0IGNvZGUocXQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cXQsd3JpdGFibGU6ITB9KX10b1N0''@;'; put 'put ''cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7JGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIFhlKCRlKXtsZXQgdHQ9IiIsTmU9JGUubGVuZ3RoO2NvbnN0IHV0PSItIj09PSRlWzBdPzE6MDtmb3IoO05lPj11dCs0O05lLT0zKXR0PWBfJHskZS5zbGljZShOZS0zLE5lKX0k''@;'; put 'put ''e3R0fWA7cmV0dXJuYCR7JGUuc2xpY2UoMCxOZSl9JHt0dH1gfWZ1bmN0aW9uIEFlKCRlLHR0LE5lLHV0LHF0LFJ0KXtpZigkZT5OZXx8JGU8dHQpe2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBjaTt0aHJvdyBjaT1SdD4zPzA9PT10dHx8dHQ9PT1CaWdJbnQoMCk/''@;'; put 'put ''YD49IDAke1B0fSBhbmQgPCAyJHtQdH0gKiogJHs4KihSdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9ICoqICR7OCooUnQrMSktMX0ke1B0fSkgYW5kIDwgMiAqKiAkezgqKFJ0KzEpLTF9JHtQdH1gOmA+PSAke3R0fSR7UHR9IGFuZCA8PSAke05lfSR7UHR9YCxuZXcgTWUuRVJSX09VVF9PRl9S''@;'; put 'put ''QU5HRSgidmFsdWUiLGNpLCRlKX0hZnVuY3Rpb24gQmUoJGUsdHQsTmUpe0ZlKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09JGVbdHRdfHx2b2lkIDA9PT0kZVt0dCtOZV0pJiZSZSh0dCwkZS5sZW5ndGgtKE5lKzEpKX0odXQscXQsUnQpfWZ1bmN0aW9uIEZlKCRlLHR0KXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mICRlKXRocm93IG5ldyBNZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIiwkZSl9ZnVuY3Rpb24gUmUoJGUsdHQsTmUpe3Rocm93IE1hdGguZmxvb3IoJGUpIT09JGU/KEZlKCRlLE5lKSxuZXcgTWUuRVJSX09VVF9PRl9SQU5HRShOZXx8Im9mZnNldCIsImFuIGludGVn''@;'; put 'put ''ZXIiLCRlKSk6dHQ8MD9uZXcgTWUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBNZS5FUlJfT1VUX09GX1JBTkdFKE5lfHwib2Zmc2V0IixgPj0gJHtOZT8xOjB9IGFuZCA8PSAke3R0fWAsJGUpfXZlKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKCRlKXtyZXR1cm4g''@;'; put 'put ''JGU/YCR7JGV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx2ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKCRlLHR0KXtyZXR1cm5gVGhlICIkeyRlfSIgYXJn''@;'; put 'put ''dW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHZlKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbigkZSx0dCxOZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7JGV9IiBpcyBvdXQgb2YgcmFuZ2UuYCxxdD1OZTty''@;'; put 'put ''ZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihOZSkmJk1hdGguYWJzKE5lKT40Mjk0OTY3Mjk2P3F0PVhlKFN0cmluZyhOZSkpOiJiaWdpbnQiPT10eXBlb2YgTmUmJihxdD1TdHJpbmcoTmUpLChOZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fE5lPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihx''@;'; put 'put ''dD1YZShxdCkpLHF0Kz0ibiIpLHV0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7cXR9YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgSWU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBEZSgkZSx0dCl7bGV0IE5lO3R0PXR0fHwxLzA7Y29uc3QgdXQ9JGUubGVuZ3RoO2xldCBx''@;'; put 'put ''dD1udWxsO2NvbnN0IFJ0PVtdO2ZvcihsZXQgUHQ9MDtQdDx1dDsrK1B0KXtpZihOZT0kZS5jaGFyQ29kZUF0KFB0KSxOZT41NTI5NSYmTmU8NTczNDQpe2lmKCFxdCl7aWYoTmU+NTYzMTkpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFB0KzE9PT11dCl7''@;'; put 'put ''KHR0LT0zKT4tMSYmUnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cXQ9TmU7Y29udGludWV9aWYoTmU8NTYzMjApeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpLHF0PU5lO2NvbnRpbnVlfU5lPTY1NTM2KyhxdC01NTI5Njw8MTB8TmUtNTYzMjApfWVsc2UgcXQmJih0dC09''@;'; put 'put ''Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2lmKHF0PW51bGwsTmU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7UnQucHVzaChOZSl9ZWxzZSBpZihOZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7UnQucHVzaChOZT4+NnwxOTIsNjMmTmV8MTI4KX1lbHNlIGlmKE5lPDY1NTM2KXtpZigo''@;'; put 'put ''dHQtPTMpPDApYnJlYWs7UnQucHVzaChOZT4+MTJ8MjI0LE5lPj42JjYzfDEyOCw2MyZOZXwxMjgpfWVsc2V7aWYoIShOZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztSdC5wdXNoKE5lPj4xOHwyNDAsTmU+PjEyJjYz''@;'; put 'put ''fDEyOCxOZT4+NiY2M3wxMjgsNjMmTmV8MTI4KX19cmV0dXJuIFJ0fWZ1bmN0aW9uIG50KCRlKXtyZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBIZSgkZSl7aWYoKCRlPSgkZT0kZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShJZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zv''@;'; put 'put ''cig7JGUubGVuZ3RoJTQhPTA7KSRlKz0iPSI7cmV0dXJuICRlfSgkZSkpfWZ1bmN0aW9uIEplKCRlLHR0LE5lLHV0KXtsZXQgcXQ7Zm9yKHF0PTA7cXQ8dXQmJiEocXQrTmU+PXR0Lmxlbmd0aHx8cXQ+PSRlLmxlbmd0aCk7KytxdCl0dFtxdCtOZV09JGVbcXRdO3JldHVybiBxdH1mdW5jdGlv''@;'; put 'put ''biBsbigkZSx0dCl7cmV0dXJuICRlIGluc3RhbmNlb2YgdHR8fG51bGwhPSRlJiZudWxsIT0kZS5jb25zdHJ1Y3RvciYmbnVsbCE9JGUuY29uc3RydWN0b3IubmFtZSYmJGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24geXQoJGUpe3JldHVybiAkZSE9JGV9Y29uc3QgU3Q9''@;'; put 'put ''ZnVuY3Rpb24oKXtjb25zdCAkZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBOZT0wO05lPDE2OysrTmUpe2NvbnN0IHV0PTE2Kk5lO2ZvcihsZXQgcXQ9MDtxdDwxNjsrK3F0KXR0W3V0K3F0XT0kZVtOZV0rJGVbcXRdfXJldHVybiB0dH0oKTtmdW5jdGlv''@;'; put 'put ''biBEdCgkZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP2l0OiRlfWZ1bmN0aW9uIGl0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg2MTIpLF89YigxNzY4KSxwPWIoODkyOCksTj1iKDk3''@;'; put 'put ''NzApO2NlLmV4cG9ydHM9Tnx8RC5jYWxsKHAsXyl9LDMxOTI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NjEyKSxfPWIoMTc2OCkscD1iKDUxMTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcChELF8sYXJndW1lbnRzKX19LDE3Njg6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODYxMiksXz1iKDQ0NTMpLHA9Yig4OTI4KSxOPWIoNTEx''@;'; put 'put ''Nik7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtpZihGLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgRlswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBOKEQscCxGKX19LDk3NzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBlb2YgUmVm''@;'; put 'put ''bGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMTApLF89Yig1NTU5KSxwPV8oRCgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGKXt2YXIgSD1EKHcsISFGKTtyZXR1''@;'; put 'put ''cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oSCk6SH19LDU1NTk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NzcxKSxfPWIoNDQyOSkscD1iKDMxOSksTj1iKDMxOTIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIEg9cChhcmd1bWVu''@;'; put 'put ''dHMpLFI9Ri5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEQoSCwxKyhSPjA/UjowKSwhMCl9LF8/XyhjZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOk59KTpjZS5leHBvcnRzLmFwcGx5PU59LDczNzk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMTApLF89Yigz''@;'; put 'put ''MTkpLHA9XyhbRCgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGKXt2YXIgSD1EKHcsISFGKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSCYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0hdKTpIfX0sMTAyNzooY2UsSixiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPWIoMjgzMCkuVHJhbnNmb3JtLHA9YigyNTUzKS5zO2Z1bmN0aW9uIHcoail7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiBqLHRoaXMuaGFzaE1vZGU/dGhpc1tqXT10aGlzLl9maW5hbE9yRGlnZXN0OnRo''@;'; put 'put ''aXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1iKDU3MTcpKHcsXyk7dmFyIEY9dHlwZW9mIFVpbnQ4QXJyYXk8InUi''@;'; put 'put ''LEg9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihELnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEQuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGosUCxMKXt2''@;'; put 'put ''YXIgWT1mdW5jdGlvbiBSKGosUCl7aWYoaiBpbnN0YW5jZW9mIEQpcmV0dXJuIGo7aWYoInN0cmluZyI9PXR5cGVvZiBqKXJldHVybiBELmZyb20oaixQKTtpZihIJiZBcnJheUJ1ZmZlci5pc1ZpZXcoaikpe2lmKDA9PT1qLmJ5dGVMZW5ndGgpcmV0dXJuIEQuYWxsb2MoMCk7dmFyIEw9RC5m''@;'; put 'put ''cm9tKGouYnVmZmVyLGouYnl0ZU9mZnNldCxqLmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PWouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihGJiZqIGluc3RhbmNlb2YgVWludDhBcnJheXx8RC5pc0J1ZmZlcihqKSYmai5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGouY29u''@;'; put 'put ''c3RydWN0b3IuaXNCdWZmZXImJmouY29uc3RydWN0b3IuaXNCdWZmZXIoaikpcmV0dXJuIEQuZnJvbShqKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBv''@;'; put 'put ''ciBEYXRhVmlldy4nKX0oaixQKSxCPXRoaXMuX3VwZGF0ZShZKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoQj10aGlzLl90b1N0cmluZyhCLEwpKSxCKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oaixQLEwpe3ZhciBZO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0''@;'; put 'put ''ZShqKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKGopKX1jYXRjaChCKXtZPUJ9ZmluYWxseXtMKFkpfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGope3ZhciBQO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe1A9TH1qKFApfSx3LnByb3RvdHlwZS5fZmluYWxP''@;'; put 'put ''ckRpZ2VzdD1mdW5jdGlvbihqKXt2YXIgUD10aGlzLl9fZmluYWwoKXx8RC5hbGxvYygwKTtyZXR1cm4gaiYmKFA9dGhpcy5fdG9TdHJpbmcoUCxqLCEwKSksUH0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKGosUCxMKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1u''@;'; put 'put ''ZXcgcChQKSx0aGlzLl9lbmNvZGluZz1QKSx0aGlzLl9lbmNvZGluZyE9PVApdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgWT10aGlzLl9kZWNvZGVyLndyaXRlKGopO3JldHVybiBMJiYoWSs9dGhpcy5fZGVjb2Rlci5lbmQoKSksWX0sY2UuZXhw''@;'; put 'put ''b3J0cz13fSw1MTA4OihjZSxKLGIpPT57dmFyIEQ9Yig5NTM5KSxfPWIoOTI4Mik7ZnVuY3Rpb24gcCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LE49QXJyYXkucHJvdG90eXBlLnNsaWNlLEY9e307dz10eXBlb2YgYi5nPCJ1IiYmYi5nLmNvbnNvbGU/Yi5nLmNvbnNvbGU6''@;'; put 'put ''dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgSD1bW2Z1bmN0aW9uIFkoKXt9LCJsb2ciXSxbZnVuY3Rpb24gQigpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gVygpe3cubG9nLmFwcGx5KHcsYXJn''@;'; put 'put ''dW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gWigpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBxKG9lKXtGW29lXT1wKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIFEob2Upe3ZhciBnZT1GW29lXTtpZighZ2UpdGhyb3cgbmV3IEVycm9yKCJObyBzdWNoIGxh''@;'; put 'put ''YmVsOiAiK29lKTtkZWxldGUgRltvZV07dmFyIF9lPXAoKS1nZTt3LmxvZyhvZSsiOiAiK19lKyJtcyIpfSwidGltZUVuZCJdLFtmdW5jdGlvbiBYKCl7dmFyIG9lPW5ldyBFcnJvcjtvZS5uYW1lPSJUcmFjZSIsb2UubWVzc2FnZT1ELmZvcm1hdC5hcHBseShudWxsLGFyZ3VtZW50cyksdy5l''@;'; put 'put ''cnJvcihvZS5zdGFjayl9LCJ0cmFjZSJdLFtmdW5jdGlvbiB0ZShvZSl7dy5sb2coRC5pbnNwZWN0KG9lKSsiXG4iKX0sImRpciJdLFtmdW5jdGlvbiByZShvZSl7aWYoIW9lKXt2YXIgZ2U9Ti5jYWxsKGFyZ3VtZW50cywxKTtfLm9rKCExLEQuZm9ybWF0LmFwcGx5KG51bGwsZ2UpKX19LCJh''@;'; put 'put ''c3NlcnQiXV0sUj0wO1I8SC5sZW5ndGg7UisrKXt2YXIgaj1IW1JdLEw9alsxXTt3W0xdfHwod1tMXT1qWzBdKX1jZS5leHBvcnRzPXd9LDY0OTc6KGNlLEosYik9Pnt2YXIgRD1iKDg3NjQpLkJ1ZmZlcjtmdW5jdGlvbiBxKFEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwoUSl9Si5pc0FycmF5PWZ1bmN0aW9uIF8oUSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShRKToiW29iamVjdCBBcnJheV0iPT09cShRKX0sSi5pc0Jvb2xlYW49ZnVuY3Rpb24gcChRKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBRfSxKLmlzTnVsbD1mdW5jdGlvbiBO''@;'; put 'put ''KFEpe3JldHVybiBudWxsPT09UX0sSi5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiB3KFEpe3JldHVybiBudWxsPT1RfSxKLmlzTnVtYmVyPWZ1bmN0aW9uIEYoUSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBRfSxKLmlzU3RyaW5nPWZ1bmN0aW9uIEgoUSl7cmV0dXJuInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBRfSxKLmlzU3ltYm9sPWZ1bmN0aW9uIFIoUSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBRfSxKLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIGooUSl7cmV0dXJuIHZvaWQgMD09PVF9LEouaXNSZWdFeHA9ZnVuY3Rpb24gUChRKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PXEoUSl9LEou''@;'; put 'put ''aXNPYmplY3Q9ZnVuY3Rpb24gTChRKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIFEmJm51bGwhPT1RfSxKLmlzRGF0ZT1mdW5jdGlvbiBZKFEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PXEoUSl9LEouaXNFcnJvcj1mdW5jdGlvbiBCKFEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1xKFEp''@;'; put 'put ''fHxRIGluc3RhbmNlb2YgRXJyb3J9LEouaXNGdW5jdGlvbj1mdW5jdGlvbiBXKFEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBRfSxKLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFooUSl7cmV0dXJuIG51bGw9PT1RfHwiYm9vbGVhbiI9PXR5cGVvZiBRfHwibnVtYmVyIj09dHlwZW9mIFF8fCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUXx8InN5bWJvbCI9PXR5cGVvZiBRfHx0eXBlb2YgUT4idSJ9LEouaXNCdWZmZXI9RC5pc0J1ZmZlcn0sNjM5MzooY2UsSixiKT0+e3ZhciBEPWIoODc2NCkuQnVmZmVyLF89Yig2OTQ4KSxwPWIoNjQyNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4gbmV3''@;'; put 'put ''IHcoUil9O3ZhciBOPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVu''@;'; put 'put ''Z3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIHcoSCl7dGhpcy5jdXJ2ZVR5cGU9TltIXSx0aGlzLmN1''@;'; put 'put ''cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkh9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gRihILFIsail7QXJyYXkuaXNBcnJheShIKXx8KEg9SC50b0FycmF5KCkpO3ZhciBQPW5ldyBEKEgpO2lmKGom''@;'; put 'put ''JlAubGVuZ3RoPGope3ZhciBMPW5ldyBEKGotUC5sZW5ndGgpO0wuZmlsbCgwKSxQPUQuY29uY2F0KFtMLFBdKX1yZXR1cm4gUj9QLnRvU3RyaW5nKFIpOlB9Ti5wMjI0PU4uc2VjcDIyNHIxLE4ucDI1Nj1OLnNlY3AyNTZyMT1OLnByaW1lMjU2djEsTi5wMTkyPU4uc2VjcDE5MnIxPU4ucHJp''@;'; put 'put ''bWUxOTJ2MSxOLnAzODQ9Ti5zZWNwMzg0cjEsTi5wNTIxPU4uc2VjcDUyMXIxLHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihILFIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoSCxSKX0sdy5wcm90b3R5cGUuY29t''@;'; put 'put ''cHV0ZVNlY3JldD1mdW5jdGlvbihILFIsail7cmV0dXJuIFI9Unx8InV0ZjgiLEQuaXNCdWZmZXIoSCl8fChIPW5ldyBEKEgsUikpLEYodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEgpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksaix0aGlzLmN1cnZl''@;'; put 'put ''VHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEgsUil7dmFyIGo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09PVImJihqWzBdPWpbai5sZW5ndGgtMV0lMj83OjYpLEYoaixIKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihIKXtyZXR1cm4gRih0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEgpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUj1SfHwidXRmOCIsRC5pc0J1ZmZlcihIKXx8KEg9bmV3IEQoSCxSKSksdGhpcy5rZXlz''@;'; put 'put ''Ll9pbXBvcnRQdWJsaWMoSCksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihILFIpe1I9Unx8InV0ZjgiLEQuaXNCdWZmZXIoSCl8fChIPW5ldyBEKEgsUikpO3ZhciBqPW5ldyBwKEgpO3JldHVybiBqPWoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZl''@;'; put 'put ''LmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoaiksdGhpc319LDY0MjY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0''@;'; put 'put ''aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3''@;'; put 'put ''LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95''@;'; put 'put ''LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgoeix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHktMSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2''@;'; put 'put ''YXIgVT16LmNoYXJDb2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcrMTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXpl''@;'; put 'put ''PT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9T''@;'; put 'put ''dHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgp''@;'; put 'put ''KSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZn''@;'; put 'put ''LGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlz''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxn''@;'; put 'put ''W0MtMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysy''@;'; put 'put ''XTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVu''@;'; put 'put ''Z3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29y''@;'; put 'put ''ZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4''@;'; put 'put ''LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zv''@;'; put 'put ''cih2YXIgVj1nLmxlbmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9''@;'; put 'put ''MTtmb3IobT1qKGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRz''@;'; put 'put ''WzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2''@;'; put 'put ''MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgx''@;'; put 'put ''Mzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0''@;'; put 'put ''aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0sVj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbiht''@;'; put 'put ''LGcubGVuZ3RoLTEpLGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0oVj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxnLndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3ku''@;'; put 'put ''d29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10''@;'; put 'put ''aGlzLndvcmRzW1ZdLEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsVi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5n''@;'; put 'put ''KDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1pl''@;'; put 'put ''cm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJv''@;'; put 'put ''dG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcs''@;'; put 'put ''eSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5n''@;'; put 'put ''dGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtm''@;'; put 'put ''b3IoO208VDttKyspVVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVy''@;'; put 'put ''b0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIseT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5i''@;'; put 'put ''aXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBn''@;'; put 'put ''PTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4o''@;'; put 'put ''ZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0''@;'; put 'put ''aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5p''@;'; put 'put ''YW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''eSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29y''@;'; put 'put ''ZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53''@;'; put 'put ''b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRk''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2''@;'; put 'put ''MyYoeT0oMHx4LndvcmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29y''@;'; put 'put ''ZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14LndvcmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBd''@;'; put 'put ''PTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxULmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9''@;'; put 'put ''KHk9KDB8Qy53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtVPEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3Ro''@;'; put 'put ''LFUpLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMs''@;'; put 'put ''VT0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsUWU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxCZT04MTkxJlhlLEFlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxI''@;'; put 'put ''ZT0wfENbNV0sRGU9ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90Pj4+MTMsbG49MHxDWzddLHl0PTgxOTEmbG4sU3Q9bG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxU''@;'; put 'put ''WzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxX''@;'; put 'put ''ZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSx1bj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVn''@;'; put 'put ''YXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KFUrKEU9TWF0aC5pbXVsKG5lLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxQdCkpK01hdGguaW11bChsZSxSdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRoLmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4y''@;'; put 'put ''Nil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KTt2YXIgRWk9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxz''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB2cj0oVSsoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG5lLGZ0KXwwKStNYXRoLmltdWwobGUsaG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChCZSxSdCksbT0obT1NYXRoLmltdWwoQmUsUHQpKStNYXRoLmltdWwoQWUsUnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgV249KFUrKEU9RStNYXRoLmltdWwobmUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFd0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0''@;'; put 'put ''KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKEJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoQmUs''@;'; put 'put ''c24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MDt2YXIgJGk9KFUrKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxVdCl8MCkrTWF0aC5pbXVsKGxlLHN0KXwwKSk8PDEz''@;'; put 'put ''KXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsUnQpLG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLFJ0KXwwLEE9TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJl''@;'; put 'put ''LFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoQmUsaG4pfDAsbT0obT1tK01hdGguaW11bChCZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFFlLFV0KXwwO3ZhciBlaT0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVHQpfDApKyhtPj4+MTMpfDApKyhl''@;'; put 'put ''aT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsUXQpfDAsbT0obT1tK01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LFF0KXwwLEE9QStNYXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoQmUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRoLmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx4dCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEz''@;'; put 'put ''KXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKFN0LFJ0KXwwLEE9TWF0aC5pbXVsKFN0LFB0KSxFPUUrTWF0aC5pbXVsKG50''@;'; put 'put ''LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmltdWwoRGUsaG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MDt2YXIgVmk9KFUrKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLHJuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0''@;'; put 'put ''KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQs''@;'; put 'put ''c24pfDApK01hdGguaW11bChTdCxRdCl8MCxBPUErTWF0aC5pbXVsKFN0LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxXdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV3QpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoQmUsV2UpfDAsbT0obT1tK01hdGguaW11bChCZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSx1bil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKG5lLGZuKXwwKStNYXRoLmltdWwobGUsdW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxSdCksbT0obT1NYXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsUnQp''@;'; put 'put ''fDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwLEU9RStNYXRoLmltdWwoRGUsc3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChEZSxVdCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KEJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUs''@;'; put 'put ''enQpfDAsRT1FK01hdGguaW11bChVZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoUWUsdW4pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgRGE9KFUrKEU9RStNYXRoLmltdWwobmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxl''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKGxlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUXQpLG09KG09TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFN0LFd0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MCxFPUUrTWF0aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''RGUsVHQpfDApK01hdGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChCZSxybil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHVuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1bil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3Zh''@;'; put 'put ''ciBMcj0oVSsoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChOZSxobiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''QXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01hdGguaW11bChEZSx4dCl8MCkrTWF0aC5pbXVsKGtlLGh0KXwwLEE9QStNYXRoLmltdWwoa2UseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBXaT0oVSsoRT1FK01hdGguaW11bChNZSxY''@;'; put 'put ''dCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXdCksbT0obT1NYXRo''@;'; put 'put ''LmltdWwoTmUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoU3QsV2UpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoRGUscm4pfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bChSZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsdW4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChJZSxmbil8MDt2YXIgcGE9KFUrKEU9RStNYXRoLmltdWwoQmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChCZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4y''@;'; put 'put ''Nil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsc3QpLG09KG09TWF0aC5pbXVsKE5lLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKFN0LGh0KXwwLEE9QStNYXRoLmltdWwoU3QseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLHVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxBPUErTWF0aC5pbXVsKGtlLGZuKXwwO3ZhciBRbj0oVSsoRT1FK01hdGguaW11bChSZSxY''@;'; put 'put ''dCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRo''@;'; put 'put ''LmltdWwoTmUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LHVuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSx1bil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3Zh''@;'; put 'put ''ciBsYT0oVSsoRT1FK01hdGguaW11bChEZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoa2UsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChOZSxodCksbT0obT1NYXRoLmltdWwoTmUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''enQpfDAsRT1FK01hdGguaW11bCh5dCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoU3QsdW4pfDAsQT1BK01hdGguaW11bChTdCxmbil8MDt2YXIgYmE9KFUrKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxl''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUscm4pLG09KG09TWF0aC5pbXVsKE5lLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oVSsoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LGVuKXwwKStNYXRoLmltdWwoU3QsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoU3QsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSx1biksbT0obT1NYXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsdW4p''@;'; put 'put ''fDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oVSsoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhG''@;'; put 'put ''YT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KFUrKEU9TWF0aC5pbXVsKE5lLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChOZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+''@;'; put 'put ''MjYpfDAsdGkmPTY3MTA4ODYzLFZbMF09dWEsVlsxXT1FaSxWWzJdPXZyLFZbM109V24sVls0XT0kaSxWWzVdPWVpLFZbNl09UXIsVls3XT1WaSxWWzhdPU5pLFZbOV09RGEsVlsxMF09THIsVlsxMV09V2ksVlsxMl09cGEsVlsxM109UW4sVlsxNF09bGEsVlsxNV09YmEsVlsxNl09TGEsVlsx''@;'; put 'put ''N109RmEsVlsxOF09dGksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEoeixnLHkpe3JldHVybihuZXcgWCkubXVscCh6LGcseSl9ZnVuY3Rpb24gWCh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rp''@;'; put 'put ''b24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcseSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcSh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUs''@;'; put 'put ''eS5sZW5ndGg9ei5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBs''@;'; put 'put ''ZT0oMHx6LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14''@;'; put 'put ''P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkpLHh9LFgucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRo''@;'; put 'put ''aXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sWC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LFgucHJvdG90eXBlLnBlcm11dGU9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRbVV09eFtnW1VdXX0sWC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHkseCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3Io''@;'; put 'put ''dmFyIEU9VTw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBVZT14W2FlK3dlXSxRZT1DW2FlK3dlXSxvdD14W2FlK3dlK1VdLE1lPUNbYWUrd2UrVV0s''@;'; put 'put ''dmU9bmUqb3QtbGUqTWU7TWU9bmUqTWUrbGUqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1RZStNZSx4W2FlK3dlK1VdPVVlLW90LENbYWUrd2UrVV09UWUtTWUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpuZSxuZT12ZSl9fSxYLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sWC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFy''@;'; put 'put ''IFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sWC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFd''@;'; put 'put ''L3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sWC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxn''@;'; put 'put ''W1ZdKSx4WzIqVisxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhbVl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxYLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5''@;'; put 'put ''fSxYLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFy''@;'; put 'put ''cmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2VdO21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShFLG0sbGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxpemUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RoKSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIg''@;'; put 'put ''eT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNb''@;'; put 'put ''eF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZhciBnPW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBd''@;'; put 'put ''JjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5z''@;'; put 'put ''cXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2Zv''@;'; put 'put ''cihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLVU8PHl8VixWPVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49''@;'; put 'put ''MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhp''@;'; put 'put ''cy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+''@;'; put 'put ''PlQ8PFQsRT14O2lmKEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMu''@;'; put 'put ''d29yZHNbbV09dGhpcy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQs''@;'; put 'put ''QT1hZSZVfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIg''@;'; put 'put ''eT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142''@;'; put 'put ''NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCks''@;'; put 'put ''ZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09''@;'; put 'put ''PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEw''@;'; put 'put ''ODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0''@;'; put 'put ''aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKysp''@;'; put 'put ''e1Y9KDB8dGhpcy53b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStV''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PVUpLFU9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4g''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hs''@;'; put 'put ''bih4KSxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9''@;'; put 'put ''dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0''@;'; put 'put ''aCtuZS0xXSk7Zm9yKGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxsZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25l''@;'; put 'put ''XT1sZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5l''@;'; put 'put ''dyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7''@;'; put 'put ''ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9k''@;'; put 'put ''KGcubmVnKCkseSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYi''@;'; put 'put ''PT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dv''@;'; put 'put ''cmREaXYoZyx5KTt2YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1v''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9k''@;'; put 'put ''LmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVybiBWPDB8fDE9PT1UJiYwPT09Vj95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChn''@;'; put 'put ''PD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxl''@;'; put 'put ''bmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygx''@;'; put 'put ''KSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+''@;'; put 'put ''MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3Io''@;'; put 'put ''eC5pdXNocm4obGUpO2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSksVS5pc3ViKEEpKSxWLml1c2hybigxKSxVLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihU''@;'; put 'put ''KSl9cmV0dXJue2E6VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zv''@;'; put 'put ''cih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgVT0wLEU9MTshKHkud29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQo''@;'; put 'put ''ViksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHgu''@;'; put 'put ''aXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygp''@;'; put 'put ''O3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3gu''@;'; put 'put ''aXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgseD1WfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRo''@;'; put 'put ''aXM7Zm9yKHZhciBUPUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlzLndvcmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhpcy53b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90''@;'; put 'put ''b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5''@;'; put 'put ''KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6''@;'; put 'put ''eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0s''@;'; put 'put ''VD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRo''@;'; put 'put ''aXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90''@;'; put 'put ''b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQ''@;'; put 'put ''b3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiByZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlz''@;'; put 'put ''Lm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gb2UoKXtyZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7cmUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe3JlLmNhbGwodGhpcywicDE5MiIs''@;'; put 'put ''ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtyZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1''@;'; put 'put ''bmN0aW9uIFNlKHope2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKHouZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUo''@;'; put 'put ''eil7U2UuY2FsbCh0aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSks''@;'; put 'put ''dGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cmUucHJvdG90eXBlLl90''@;'; put 'put ''bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHJlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5p''@;'; put 'put ''bXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0''@;'; put 'put ''cmlwKCk6eS5fc3RyaXAoKSx5fSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0scmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihvZSxyZSksb2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3Io''@;'; put 'put ''eS53b3Jkc1t5Lmxlbmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KFUmeCk8PDR8Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxvZS5wcm90b3R5''@;'; put 'put ''cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQyso''@;'; put 'put ''eS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxOKGdlLHJlKSxOKF9lLHJlKSxOKFRlLHJlKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5''@;'; put 'put ''PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4g''@;'; put 'put ''dGVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyBvZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0''@;'; put 'put ''ZVtnXT15LHl9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0''@;'; put 'put ''aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMu''@;'; put 'put ''X3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQo''@;'; put 'put ''dGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNx''@;'; put 'put ''cnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1''@;'; put 'put ''Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEpLnRvUmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1u''@;'; put 'put ''ZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElBZGQoVSk7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2''@;'; put 'put ''YXIgd2U9bmUsVWU9MDswIT09d2UuY21wKFYpO1VlKyspd2U9d2UucmVkU3FyKCk7cChVZTxsZSk7dmFyIFFlPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKGxlLVVlLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVVlfXJldHVybiBhZX0s''@;'; put 'put ''U2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tU''@;'; put 'put ''LTFdLGcpO3ZhciBWPUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYp''@;'; put 'put ''KSwwIT09bmV8fDAhPT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9dGhpcy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6RT0wfW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJu''@;'; put 'put ''IHk9PT1nP3kuY2xvbmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rp''@;'; put 'put ''b24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1''@;'; put 'put ''c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1pl''@;'; put 'put ''cm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5j''@;'; put 'put ''bXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sMzQ4MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU3MTcpLF89YigyMzE4KSxwPWIoOTc4NSksTj1iKDkwNzIpLHc9YigxMDI3KTtmdW5jdGlvbiBGKEgpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUh9''@;'; put 'put ''RChGLHcpLEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSCl7dGhpcy5faGFzaC51cGRhdGUoSCl9LEYucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxjZS5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiJtZDUiPT09KFI9Ui50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PVJ8fCJyaXBlbWQxNjAiPT09Uj9uZXcgcDpuZXcgRihOKFIpKX19LDgwMjg6KGNlLEosYik9Pnt2YXIgRD1iKDIzMTgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBEKS51cGRhdGUoXykuZGlnZXN0KCl9fSw4MzU1OihjZSxK''@;'; put 'put ''LGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTcxNyksXz1iKDEwMzEpLHA9YigxMDI3KSxOPWIoOTUwOSkuQnVmZmVyLHc9Yig4MDI4KSxGPWIoOTc4NSksSD1iKDkwNzIpLFI9Ti5hbGxvYygxMjgpO2Z1bmN0aW9uIGooUCxMKXtwLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBMJiYoTD1OLmZyb20oTCkpO3ZhciBZPSJzaGE1MTIiPT09UHx8InNoYTM4NCI9PT1QPzEyODo2NDt0aGlzLl9hbGc9UCx0aGlzLl9rZXk9TCxMLmxlbmd0aD5ZP0w9KCJybWQxNjAiPT09UD9uZXcgRjpIKFApKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8WSYmKEw9Ti5jb25j''@;'; put 'put ''YXQoW0wsUl0sWSkpO2Zvcih2YXIgVz10aGlzLl9pcGFkPU4uYWxsb2NVbnNhZmUoWSksWj10aGlzLl9vcGFkPU4uYWxsb2NVbnNhZmUoWSkscT0wO3E8WTtxKyspV1txXT01NF5MW3FdLFpbcV09OTJeTFtxXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09UD9uZXcgRjpIKFApLHRoaXMuX2hhc2gu''@;'; put 'put ''dXBkYXRlKFcpfUQoaixwKSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3RoaXMuX2hhc2gudXBkYXRlKFApfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgRjpIKHRo''@;'; put 'put ''aXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoUCkuZGlnZXN0KCl9LGNlLmV4cG9ydHM9ZnVuY3Rpb24oTCxZKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgaigicm1kMTYwIixZKToibWQ1Ij09PUw/bmV3IF8odyxZ''@;'; put 'put ''KTpuZXcgaihMLFkpfX0sMTAzMTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU3MTcpLF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcpLE49Xy5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gRihILFIpe3AuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIFImJihS''@;'; put 'put ''PV8uZnJvbShSKSksdGhpcy5fYWxnPUgsdGhpcy5fa2V5PVIsUi5sZW5ndGg+dz9SPUgoUik6Ui5sZW5ndGg8dyYmKFI9Xy5jb25jYXQoW1IsTl0sdykpO2Zvcih2YXIgaj10aGlzLl9pcGFkPV8uYWxsb2NVbnNhZmUodyksUD10aGlzLl9vcGFkPV8uYWxsb2NVbnNhZmUodyksTD0wO0w8dztM''@;'; put 'put ''KyspaltMXT01NF5SW0xdLFBbTF09OTJeUltMXTt0aGlzLl9oYXNoPVtqXX1EKEYscCksRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihIKXt0aGlzLl9oYXNoLnB1c2goSCl9LEYucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBIPXRoaXMuX2FsZyhfLmNvbmNhdCh0aGlzLl9o''@;'; put 'put ''YXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhfLmNvbmNhdChbdGhpcy5fb3BhZCxIXSkpfSxjZS5leHBvcnRzPUZ9LDU4MzU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Si5yYW5kb21CeXRlcz1KLnJuZz1KLnBzZXVkb1JhbmRvbUJ5dGVzPUoucHJuZz1iKDE3OTgpLEouY3JlYXRlSGFzaD1KLkhh''@;'; put 'put ''c2g9YigzNDgyKSxKLmNyZWF0ZUhtYWM9Si5IbWFjPWIoODM1NSk7dmFyIEQ9Yig2MDQyKSxfPU9iamVjdC5rZXlzKEQpLHA9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KF8pO0ouZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHB9O3ZhciBOPWIoNTYzMik7Si5wYmtkZjI9Ti5wYmtkZjIsSi5wYmtkZjJTeW5jPU4ucGJrZGYyU3luYzt2YXIgdz1iKDM2MTQpO0ouQ2lwaGVyPXcuQ2lwaGVyLEouY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLEouQ2lwaGVyaXY9dy5DaXBoZXJpdixKLmNyZWF0ZUNpcGhl''@;'; put 'put ''cml2PXcuY3JlYXRlQ2lwaGVyaXYsSi5EZWNpcGhlcj13LkRlY2lwaGVyLEouY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixKLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LEouY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsSi5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVy''@;'; put 'put ''cyxKLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIEY9YigyNjA3KTtKLkRpZmZpZUhlbGxtYW5Hcm91cD1GLkRpZmZpZUhlbGxtYW5Hcm91cCxKLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1GLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxKLmdldERpZmZpZUhlbGxtYW49Ri5nZXRE''@;'; put 'put ''aWZmaWVIZWxsbWFuLEouY3JlYXRlRGlmZmllSGVsbG1hbj1GLmNyZWF0ZURpZmZpZUhlbGxtYW4sSi5EaWZmaWVIZWxsbWFuPUYuRGlmZmllSGVsbG1hbjt2YXIgSD1iKDQ3NDMpO0ouY3JlYXRlU2lnbj1ILmNyZWF0ZVNpZ24sSi5TaWduPUguU2lnbixKLmNyZWF0ZVZlcmlmeT1ILmNyZWF0''@;'; put 'put ''ZVZlcmlmeSxKLlZlcmlmeT1ILlZlcmlmeSxKLmNyZWF0ZUVDREg9Yig2MzkzKTt2YXIgUj1iKDc5MDApO0oucHVibGljRW5jcnlwdD1SLnB1YmxpY0VuY3J5cHQsSi5wcml2YXRlRW5jcnlwdD1SLnByaXZhdGVFbmNyeXB0LEoucHVibGljRGVjcnlwdD1SLnB1YmxpY0RlY3J5cHQsSi5wcml2''@;'; put 'put ''YXRlRGVjcnlwdD1SLnByaXZhdGVEZWNyeXB0O3ZhciBqPWIoNzk2Myk7Si5yYW5kb21GaWxsPWoucmFuZG9tRmlsbCxKLnJhbmRvbUZpbGxTeW5jPWoucmFuZG9tRmlsbFN5bmMsSi5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNy''@;'; put 'put ''ZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxKLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9U''@;'; put 'put ''X1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFf''@;'; put 'put ''T0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDIyOTY6KGNlLEosYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEQ9Yig0NDI5KSxfPWIoMzQ2NCkscD1iKDQ0NTMpLE49Yig3Mjk2KTtjZS5leHBvcnRzPWZ1bmN0aW9uKEYsSCxSKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGJiYiZnVuY3Rpb24iIT10eXBlb2YgRil0aHJvdyBuZXcgcCgiYG9iamAgbXVzdCBiZSBhbiBvYmpl''@;'; put 'put ''Y3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEgmJiJzeW1ib2wiIT10eXBlb2YgSCl0aHJvdyBuZXcgcCgiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1l''@;'; put 'put ''bnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBwKCJgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0mJm51bGwhPT1hcmd1''@;'; put 'put ''bWVudHNbNF0pdGhyb3cgbmV3IHAoImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0pdGhyb3cgbmV3IHAo''@;'; put 'put ''ImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBwKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xl''@;'; put 'put ''YW4iKTt2YXIgaj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGwsUD1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTD1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsWT1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSxCPSEh''@;'; put 'put ''TiYmTihGLEgpO2lmKEQpRChGLEgse2NvbmZpZ3VyYWJsZTpudWxsPT09TCYmQj9CLmNvbmZpZ3VyYWJsZTohTCxlbnVtZXJhYmxlOm51bGw9PT1qJiZCP0IuZW51bWVyYWJsZTohaix2YWx1ZTpSLHdyaXRhYmxlOm51bGw9PT1QJiZCP0Iud3JpdGFibGU6IVB9KTtlbHNle2lmKCFZJiYoanx8''@;'; put 'put ''UHx8TCkpdGhyb3cgbmV3IF8oIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7RltIXT1SfX19LDQyODk6KGNlLEosYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEQ9YigyMjE1KSxfPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxwPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTj1BcnJheS5wcm90b3R5cGUuY29uY2F0LHc9YigyMjk2KSxIPWIoMTA0NCkoKSxSPWZ1bmN0aW9uKFAs''@;'; put 'put ''TCxZLEIpe2lmKEwgaW4gUClpZighMD09PUIpe2lmKFBbTF09PT1ZKXJldHVybn1lbHNlIGlmKCFmdW5jdGlvbihQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUCYmIltvYmplY3QgRnVuY3Rpb25dIj09PXAuY2FsbChQKX0oQil8fCFCKCkpcmV0dXJuO0g/dyhQLEwsWSwhMCk6dyhQLEws''@;'; put 'put ''WSl9LGo9ZnVuY3Rpb24oUCxMKXt2YXIgWT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LEI9RChMKTtfJiYoQj1OLmNhbGwoQixPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEwpKSk7Zm9yKHZhciBXPTA7VzxCLmxlbmd0aDtXKz0xKVIoUCxCW1ddLExbQltXXV0sWVtC''@;'; put 'put ''W1ddXSl9O2ouc3VwcG9ydHNEZXNjcmlwdG9ycz0hIUgsY2UuZXhwb3J0cz1qfSw1MjUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO0oudXRpbHM9YigxMjc4KSxKLkNpcGhlcj1iKDU3NTYpLEouREVTPWIoNzc4KSxKLkNCQz1iKDkwNTEpLEouRURFPWIoNjUxKX0sOTA1MTooY2UsSixiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk3NDYpLF89Yig1NzE3KSxwPXt9O2Z1bmN0aW9uIE4oRil7RC5lcXVhbChGLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgSD0wO0g8dGhpcy5pdi5sZW5ndGg7SCsrKXRoaXMuaXZbSF09RltI''@;'; put 'put ''XX1KLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoRil7ZnVuY3Rpb24gSChMKXtGLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9XyhILEYpO2Zvcih2YXIgUj1PYmplY3Qua2V5cyhwKSxqPTA7ajxSLmxlbmd0aDtqKyspe3ZhciBQPVJbal07SC5wcm90b3R5cGVbUF09cFtQXX1yZXR1cm4g''@;'; put 'put ''SC5jcmVhdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBIKFkpfSxIfSxwLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEg9bmV3IE4odGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1IfSxwLl91cGRhdGU9ZnVuY3Rpb24oSCxSLGosUCl7dmFyIFk9dGhpcy5jb25zdHJ1Y3Rvci5zdXBl''@;'; put 'put ''cl8ucHJvdG90eXBlLEI9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylCW1ddXj1IW1IrV107Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsQiwwLGosUCksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJb''@;'; put 'put ''V109altQK1ddfWVsc2V7Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsSCxSLGosUCksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKWpbUCtXXV49QltXXTtmb3IoVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJbV109SFtSK1ddfX19LDU3NTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9''@;'; put 'put ''Yig5NzQ2KTtmdW5jdGlvbiBfKHApe3RoaXMub3B0aW9ucz1wLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSEx''@;'; put 'put ''IT09cC5wYWRkaW5nfWNlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE4pe3JldHVybiAwPT09Ti5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoTik6dGhpcy5fdXBk''@;'; put 'put ''YXRlRW5jcnlwdChOKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihOLHcpe2Zvcih2YXIgRj1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsTi5sZW5ndGgtdyksSD0wO0g8RjtIKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrSF09Tlt3K0hdO3Jl''@;'; put 'put ''dHVybiB0aGlzLmJ1ZmZlck9mZis9RixGfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oTix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsTix3KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1m''@;'; put 'put ''dW5jdGlvbihOKXt2YXIgdz0wLEY9MCxSPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK04ubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKE4sdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZl''@;'; put 'put ''ci5sZW5ndGgmJihGKz10aGlzLl9mbHVzaEJ1ZmZlcihSLEYpKSk7Zm9yKHZhciBqPU4ubGVuZ3RoLShOLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PGo7dys9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKE4sdyxSLEYpLEYrPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxOLmxlbmd0aDt3''@;'; put 'put ''KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Tlt3XTtyZXR1cm4gUn0sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oTil7Zm9yKHZhciB3PTAsRj0wLEg9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitOLmxlbmd0aCkvdGhpcy5ibG9j''@;'; put 'put ''a1NpemUpLTEsUj1uZXcgQXJyYXkoSCp0aGlzLmJsb2NrU2l6ZSk7SD4wO0gtLSl3Kz10aGlzLl9idWZmZXIoTix3KSxGKz10aGlzLl9mbHVzaEJ1ZmZlcihSLEYpO3JldHVybiB3Kz10aGlzLl9idWZmZXIoTix3KSxSfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihOKXt2YXIgdyxGO3Jl''@;'; put 'put ''dHVybiBOJiYodz10aGlzLnVwZGF0ZShOKSksRj0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNhdChGKTpGfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKE4sdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3''@;'; put 'put ''PE4ubGVuZ3RoOylOW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBOPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3Vw''@;'; put 'put ''ZGF0ZSh0aGlzLmJ1ZmZlciwwLE4sMCksTn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKE4pe3JldHVybiBOfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7RC5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRl''@;'; put 'put ''Y3J5cHQiKTt2YXIgTj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihOLDApLHRoaXMuX3VucGFkKE4pfX0sNzc4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTc0NiksXz1iKDU3MTcpLHA9YigxMjc4KSxOPWIoNTc1Nik7ZnVuY3Rp''@;'; put 'put ''b24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBGKFIpe04uY2FsbCh0aGlzLFIpO3ZhciBqPW5ldyB3O3RoaXMuX2Rlc1N0YXRlPWosdGhpcy5kZXJpdmVLZXlzKGosUi5rZXkpfV8oRixOKSxjZS5leHBvcnRzPUYsRi5jcmVhdGU9ZnVuY3Rpb24o''@;'; put 'put ''ail7cmV0dXJuIG5ldyBGKGopfTt2YXIgSD1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07Ri5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihqLFApe2oua2V5cz1uZXcgQXJyYXkoMzIpLEQuZXF1YWwoUC5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxl''@;'; put 'put ''bmd0aCIpO3ZhciBMPXAucmVhZFVJbnQzMkJFKFAsMCksWT1wLnJlYWRVSW50MzJCRShQLDQpO3AucGMxKEwsWSxqLnRtcCwwKSxMPWoudG1wWzBdLFk9ai50bXBbMV07Zm9yKHZhciBCPTA7QjxqLmtleXMubGVuZ3RoO0IrPTIpe3ZhciBXPUhbQj4+PjFdO0w9cC5yMjhzaGwoTCxXKSxZPXAu''@;'; put 'put ''cjI4c2hsKFksVykscC5wYzIoTCxZLGoua2V5cyxCKX19LEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oaixQLEwsWSl7dmFyIEI9dGhpcy5fZGVzU3RhdGUsVz1wLnJlYWRVSW50MzJCRShqLFApLFo9cC5yZWFkVUludDMyQkUoaixQKzQpO3AuaXAoVyxaLEIudG1wLDApLFc9Qi50bXBb''@;'; put 'put ''MF0sWj1CLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChCLFcsWixCLnRtcCwwKTp0aGlzLl9kZWNyeXB0KEIsVyxaLEIudG1wLDApLFo9Qi50bXBbMV0scC53cml0ZVVJbnQzMkJFKEwsVz1CLnRtcFswXSxZKSxwLndyaXRlVUludDMyQkUoTCxaLFkrNCl9LEYu''@;'; put 'put ''cHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oaixQKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEw9ai5sZW5ndGgtUCxZPVA7WTxqLmxlbmd0aDtZKyspaltZXT1MO3JldHVybiEwfSxGLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oail7aWYoITE9PT10aGlzLnBhZGRp''@;'; put 'put ''bmcpcmV0dXJuIGo7Zm9yKHZhciBQPWpbai5sZW5ndGgtMV0sTD1qLmxlbmd0aC1QO0w8ai5sZW5ndGg7TCsrKUQuZXF1YWwoaltMXSxQKTtyZXR1cm4gai5zbGljZSgwLGoubGVuZ3RoLVApfSxGLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihqLFAsTCxZLEIpe2Zvcih2YXIgVz1QLFo9''@;'; put 'put ''TCxxPTA7cTxqLmtleXMubGVuZ3RoO3ErPTIpe3ZhciBRPWoua2V5c1txXSxYPWoua2V5c1txKzFdO3AuZXhwYW5kKFosai50bXAsMCk7dmFyIHRlPXAuc3Vic3RpdHV0ZShRXj1qLnRtcFswXSxYXj1qLnRtcFsxXSksb2U9WjtaPShXXnAucGVybXV0ZSh0ZSkpPj4+MCxXPW9lfXAucmlwKFos''@;'; put 'put ''VyxZLEIpfSxGLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihqLFAsTCxZLEIpe2Zvcih2YXIgVz1MLFo9UCxxPWoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBRPWoua2V5c1txXSxYPWoua2V5c1txKzFdO3AuZXhwYW5kKFcsai50bXAsMCk7dmFyIHRlPXAuc3Vic3RpdHV0ZShR''@;'; put 'put ''Xj1qLnRtcFswXSxYXj1qLnRtcFsxXSksb2U9VztXPShaXnAucGVybXV0ZSh0ZSkpPj4+MCxaPW9lfXAucmlwKFcsWixZLEIpfX0sNjUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTc0NiksXz1iKDU3MTcpLHA9Yig1NzU2KSxOPWIoNzc4KTtmdW5jdGlvbiB3KEgsUil7RC5l''@;'; put 'put ''cXVhbChSLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGo9Ui5zbGljZSgwLDgpLFA9Ui5zbGljZSg4LDE2KSxMPVIuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1IP1tOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omp9KSxOLmNyZWF0ZSh7dHlw''@;'; put 'put ''ZToiZGVjcnlwdCIsa2V5OlB9KSxOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W04uY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLE4uY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6UH0pLE4uY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6an0pXX1mdW5jdGlvbiBG''@;'; put 'put ''KEgpe3AuY2FsbCh0aGlzLEgpO3ZhciBSPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1SfV8oRixwKSxjZS5leHBvcnRzPUYsRi5jcmVhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBGKFIpfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIs''@;'; put 'put ''aixQLEwpe3ZhciBZPXRoaXMuX2VkZVN0YXRlO1kuY2lwaGVyc1swXS5fdXBkYXRlKFIsaixQLEwpLFkuY2lwaGVyc1sxXS5fdXBkYXRlKFAsTCxQLEwpLFkuY2lwaGVyc1syXS5fdXBkYXRlKFAsTCxQLEwpfSxGLnByb3RvdHlwZS5fcGFkPU4ucHJvdG90eXBlLl9wYWQsRi5wcm90b3R5cGUu''@;'; put 'put ''X3VucGFkPU4ucHJvdG90eXBlLl91bnBhZH0sMTI3ODooY2UsSik9PnsidXNlIHN0cmljdCI7Si5yZWFkVUludDMyQkU9ZnVuY3Rpb24oTix3KXtyZXR1cm4oTlswK3ddPDwyNHxOWzErd108PDE2fE5bMit3XTw8OHxOWzMrd10pPj4+MH0sSi53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKE4sdyxG''@;'; put 'put ''KXtOWzArRl09dz4+PjI0LE5bMStGXT13Pj4+MTYmMjU1LE5bMitGXT13Pj4+OCYyNTUsTlszK0ZdPTI1NSZ3fSxKLmlwPWZ1bmN0aW9uKE4sdyxGLEgpe2Zvcih2YXIgUj0wLGo9MCxQPTY7UD49MDtQLT0yKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PXc+Pj5MK1AmMTtmb3Io''@;'; put 'put ''TD0wO0w8PTI0O0wrPTgpUjw8PTEsUnw9Tj4+PkwrUCYxfWZvcihQPTY7UD49MDtQLT0yKXtmb3IoTD0xO0w8PTI1O0wrPTgpajw8PTEsanw9dz4+PkwrUCYxO2ZvcihMPTE7TDw9MjU7TCs9OClqPDw9MSxqfD1OPj4+TCtQJjF9RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5yaXA9ZnVu''@;'; put 'put ''Y3Rpb24oTix3LEYsSCl7Zm9yKHZhciBSPTAsaj0wLFA9MDtQPDQ7UCsrKWZvcih2YXIgTD0yNDtMPj0wO0wtPTgpUjw8PTEsUnw9dz4+PkwrUCYxLFI8PD0xLFJ8PU4+Pj5MK1AmMTtmb3IoUD00O1A8ODtQKyspZm9yKEw9MjQ7TD49MDtMLT04KWo8PD0xLGp8PXc+Pj5MK1AmMSxqPDw9MSxq''@;'; put 'put ''fD1OPj4+TCtQJjE7RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5wYzE9ZnVuY3Rpb24oTix3LEYsSCl7Zm9yKHZhciBSPTAsaj0wLFA9NztQPj01O1AtLSl7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClSPDw9MSxSfD13Pj5MK1AmMTtmb3IoTD0wO0w8PTI0O0wrPTgpUjw8PTEsUnw9Tj4+''@;'; put 'put ''TCtQJjF9Zm9yKEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PXc+PkwrUCYxO2ZvcihQPTE7UDw9MztQKyspe2ZvcihMPTA7TDw9MjQ7TCs9OClqPDw9MSxqfD13Pj5MK1AmMTtmb3IoTD0wO0w8PTI0O0wrPTgpajw8PTEsanw9Tj4+TCtQJjF9Zm9yKEw9MDtMPD0yNDtMKz04KWo8PD0xLGp8PU4+''@;'; put 'put ''PkwrUCYxO0ZbSCswXT1SPj4+MCxGW0grMV09aj4+PjB9LEoucjI4c2hsPWZ1bmN0aW9uKE4sdyl7cmV0dXJuIE48PHcmMjY4NDM1NDU1fE4+Pj4yOC13fTt2YXIgYj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQs''@;'; put 'put ''MjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtKLnBjMj1mdW5jdGlvbihOLHcsRixIKXtmb3IodmFyIFI9MCxqPTAsUD1iLmxlbmd0aD4+PjEsTD0wO0w8UDtMKyspUjw8PTEsUnw9Tj4+PmJbTF0mMTtmb3IoTD1QO0w8Yi5sZW5ndGg7''@;'; put 'put ''TCsrKWo8PD0xLGp8PXc+Pj5iW0xdJjE7RltIKzBdPVI+Pj4wLEZbSCsxXT1qPj4+MH0sSi5leHBhbmQ9ZnVuY3Rpb24oTix3LEYpe3ZhciBIPTAsUj0wO0g9KDEmTik8PDV8Tj4+PjI3O2Zvcih2YXIgaj0yMztqPj0xNTtqLT00KUg8PD02LEh8PU4+Pj5qJjYzO2ZvcihqPTExO2o+PTM7ai09''@;'; put 'put ''NClSfD1OPj4+aiY2MyxSPDw9NjtSfD0oMzEmTik8PDF8Tj4+PjMxLHdbRiswXT1IPj4+MCx3W0YrMV09Uj4+PjB9O3ZhciBEPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgs''@;'; put 'put ''OCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwx''@;'; put 'put ''NSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQs''@;'; put 'put ''MSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0''@;'; put 'put ''LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQs''@;'; put 'put ''MCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEz''@;'; put 'put ''LDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQs''@;'; put 'put ''OCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO0ouc3Vic3RpdHV0ZT1mdW5jdGlvbihOLHcpe2Zv''@;'; put 'put ''cih2YXIgRj0wLEg9MDtIPDQ7SCsrKUY8PD00LEZ8PURbNjQqSCsoTj4+PjE4LTYqSCY2MyldO2ZvcihIPTA7SDw0O0grKylGPDw9NCxGfD1EWzI1Nis2NCpIKyh3Pj4+MTgtNipIJjYzKV07cmV0dXJuIEY+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywx''@;'; put 'put ''NCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107Si5wZXJtdXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgdz0wLEY9MDtGPF8ubGVuZ3RoO0YrKyl3PDw9MSx3fD1OPj4+X1tGXSYxO3JldHVybiB3Pj4+MH0sSi5wYWRTcGxpdD1mdW5jdGlvbihOLHcsRil7''@;'; put 'put ''Zm9yKHZhciBIPU4udG9TdHJpbmcoMik7SC5sZW5ndGg8dzspSD0iMCIrSDtmb3IodmFyIFI9W10saj0wO2o8dztqKz1GKVIucHVzaChILnNsaWNlKGosaitGKSk7cmV0dXJuIFIuam9pbigiICIpfX0sMjYwNzooY2UsSixiKT0+e3ZhciBEPWIoODc2NCkuQnVmZmVyLF89YigzNTkwKSxwPWIo''@;'; put 'put ''OTc5OSksTj1iKDc0MjYpLEY9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtKLkRpZmZpZUhlbGxtYW5Hcm91cD1KLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1KLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gdyhSKXt2YXIgaj1uZXcgRChwW1JdLnByaW1lLCJoZXgiKSxQPW5ldyBE''@;'; put 'put ''KHBbUl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IE4oaixQKX0sSi5jcmVhdGVEaWZmaWVIZWxsbWFuPUouRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBIKFIsaixQLEwpe3JldHVybiBELmlzQnVmZmVyKGopfHx2b2lkIDA9PT1GW2pdP0goUiwiYmluYXJ5IixqLFApOihqPWp8fCJiaW5hcnkiLEw9''@;'; put 'put ''THx8ImJpbmFyeSIsUD1QfHxuZXcgRChbMl0pLEQuaXNCdWZmZXIoUCl8fChQPW5ldyBEKFAsTCkpLCJudW1iZXIiPT10eXBlb2YgUj9uZXcgTihfKFIsUCksUCwhMCk6KEQuaXNCdWZmZXIoUil8fChSPW5ldyBEKFIsaikpLG5ldyBOKFIsUCwhMCkpKX19LDc0MjY6KGNlLEosYik9Pnt2YXIg''@;'; put 'put ''RD1iKDg3NjQpLkJ1ZmZlcixfPWIoMzYyMCksTj1uZXcoYigzMDQ3KSksdz1uZXcgXygyNCksRj1uZXcgXygxMSksSD1uZXcgXygxMCksUj1uZXcgXygzKSxqPW5ldyBfKDcpLFA9YigzNTkwKSxMPWIoMTc5OCk7ZnVuY3Rpb24gWShYLHRlKXtyZXR1cm4gdGU9dGV8fCJ1dGY4IixELmlzQnVm''@;'; put 'put ''ZmVyKFgpfHwoWD1uZXcgRChYLHRlKSksdGhpcy5fcHViPW5ldyBfKFgpLHRoaXN9ZnVuY3Rpb24gQihYLHRlKXtyZXR1cm4gdGU9dGV8fCJ1dGY4IixELmlzQnVmZmVyKFgpfHwoWD1uZXcgRChYLHRlKSksdGhpcy5fcHJpdj1uZXcgXyhYKSx0aGlzfWNlLmV4cG9ydHM9cTt2YXIgVz17fTtm''@;'; put 'put ''dW5jdGlvbiBxKFgsdGUscmUpe3RoaXMuc2V0R2VuZXJhdG9yKHRlKSx0aGlzLl9fcHJpbWU9bmV3IF8oWCksdGhpcy5fcHJpbWU9Xy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49WC5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmlt''@;'; put 'put ''ZUNvZGU9dm9pZCAwLHJlPyh0aGlzLnNldFB1YmxpY0tleT1ZLHRoaXMuc2V0UHJpdmF0ZUtleT1CKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBRKFgsdGUpe3ZhciByZT1uZXcgRChYLnRvQXJyYXkoKSk7cmV0dXJuIHRlP3JlLnRvU3RyaW5nKHRlKTpyZX1PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkocS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBaKFgsdGUpe3ZhciByZT10ZS50b1N0cmluZygiaGV4Iiksb2U9''@;'; put 'put ''W3JlLFgudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYob2UgaW4gVylyZXR1cm4gV1tvZV07dmFyIF9lLGdlPTA7aWYoWC5pc0V2ZW4oKXx8IVAuc2ltcGxlU2lldmV8fCFQLmZlcm1hdFRlc3QoWCl8fCFOLnRlc3QoWCkpcmV0dXJuIGdlKz0xLFdbb2VdPWdlKz0iMDIiPT09cmV8fCIwNSI9''@;'; put 'put ''PT1yZT84OjQsZ2U7c3dpdGNoKE4udGVzdChYLnNocm4oMSkpfHwoZ2UrPTIpLHJlKXtjYXNlIjAyIjpYLm1vZCh3KS5jbXAoRikmJihnZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KF9lPVgubW9kKEgpKS5jbXAoUikmJl9lLmNtcChqKSYmKGdlKz04KTticmVhaztkZWZhdWx0OmdlKz00fXJldHVy''@;'; put 'put ''biBXW29lXT1nZSxnZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSkscS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBfKEwodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRo''@;'; put 'put ''aXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxxLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFgpe3ZhciB0ZT0oWD0oWD1uZXcgXyhYKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3co''@;'; put 'put ''dGhpcy5fcHJpdikuZnJvbVJlZCgpLHJlPW5ldyBEKHRlLnRvQXJyYXkoKSksb2U9dGhpcy5nZXRQcmltZSgpO2lmKHJlLmxlbmd0aDxvZS5sZW5ndGgpe3ZhciBnZT1uZXcgRChvZS5sZW5ndGgtcmUubGVuZ3RoKTtnZS5maWxsKDApLHJlPUQuY29uY2F0KFtnZSxyZV0pfXJldHVybiByZX0s''@;'; put 'put ''cS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHRlKXtyZXR1cm4gUSh0aGlzLl9wdWIsdGUpfSxxLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHRlKXtyZXR1cm4gUSh0aGlzLl9wcml2LHRlKX0scS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oWCl7cmV0dXJu''@;'; put 'put ''IFEodGhpcy5fX3ByaW1lLFgpfSxxLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oWCl7cmV0dXJuIFEodGhpcy5fZ2VuLFgpfSxxLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oWCx0ZSl7cmV0dXJuIHRlPXRlfHwidXRmOCIsRC5pc0J1ZmZlcihYKXx8KFg9bmV3IEQo''@;'; put 'put ''WCx0ZSkpLHRoaXMuX19nZW49WCx0aGlzLl9nZW49bmV3IF8oWCksdGhpc319LDM1OTA6KGNlLEosYik9Pnt2YXIgRD1iKDE3OTgpO2NlLmV4cG9ydHM9b2Usb2Uuc2ltcGxlU2lldmU9dGUsb2UuZmVybWF0VGVzdD1yZTt2YXIgXz1iKDM2MjApLHA9bmV3IF8oMjQpLHc9bmV3KGIoMzA0Nykp''@;'; put 'put ''LEY9bmV3IF8oMSksSD1uZXcgXygyKSxSPW5ldyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxuZXcgXygxMCkpLFk9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3IF8oMTEpKSxaPW5ldyBfKDQpLFE9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiB0ZShnZSl7Zm9yKHZhciBfZT1mdW5jdGlv''@;'; put 'put ''biBYKCl7aWYobnVsbCE9PVEpcmV0dXJuIFE7dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciB6ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksej0wO3o8VGUmJl9lW3pdPD16ZSYmU2UlX2Vbel0hPTA7eisrKTtUZSE9PXomJl9l''@;'; put 'put ''W3pdPD16ZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4gUT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1nZS5tb2RuKF9lW1RlXSkpcmV0dXJuIDA9PT1nZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gcmUoZ2Upe3ZhciBfZT1fLm1vbnQoZ2UpO3JldHVybiAw''@;'; put 'put ''PT09SC50b1JlZChfZSkucmVkUG93KGdlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIG9lKGdlLF9lKXtpZihnZTwxNilyZXR1cm4gbmV3IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxTZTs7KXtmb3IoVGU9''@;'; put 'put ''bmV3IF8oRChNYXRoLmNlaWwoZ2UvOCkpKTtUZS5iaXRMZW5ndGgoKT5nZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoRiksVGUudGVzdG4oMSl8fFRlLmlhZGQoSCksX2UuY21wKEgpKXtpZighX2UuY21wKFIpKWZvcig7VGUubW9kKEwpLmNtcChZKTspVGUuaWFkZCha''@;'; put 'put ''KX1lbHNlIGZvcig7VGUubW9kKHApLmNtcChXKTspVGUuaWFkZChaKTtpZih0ZShTZT1UZS5zaHJuKDEpKSYmdGUoVGUpJiZyZShTZSkmJnJlKFRlKSYmdy50ZXN0KFNlKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzYyMDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihELF8peyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtmdW5jdGlvbiBwKHosZyl7aWYoIXopdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gTih6LGcpe3ouc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLHoucHJvdG90eXBlPW5ldyB5LHoucHJvdG90''@;'; put 'put ''eXBlLmNvbnN0cnVjdG9yPXp9ZnVuY3Rpb24gdyh6LGcseSl7aWYody5pc0JOKHopKXJldHVybiB6O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT16JiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhp''@;'; put 'put ''cy5faW5pdCh6fHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgRjsib2JqZWN0Ij09dHlwZW9mIEQ/RC5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtGPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc3NDgp''@;'; put 'put ''LkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8''@;'; put 'put ''NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgseSksVj1nO1Y8VDtWKyspe3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1UtNDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVu''@;'; put 'put ''Y3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5''@;'; put 'put ''KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcs''@;'; put 'put ''Qyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndv''@;'; put 'put ''cmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4''@;'; put 'put ''NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVy''@;'; put 'put ''biB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYo''@;'; put 'put ''ImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigi''@;'; put 'put ''bGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2''@;'; put 'put ''YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/''@;'; put 'put ''eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53''@;'; put 'put ''b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYtVSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCks''@;'; put 'put ''dGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PVUpe3ZhciBhZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndv''@;'; put 'put ''cmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRo''@;'; put 'put ''aXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxl''@;'; put 'put ''bmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24o''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46''@;'; put 'put ''ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQx''@;'; put 'put ''Mzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZd''@;'; put 'put ''O2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4PXoubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3''@;'; put 'put ''MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEpO2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29y''@;'; put 'put ''ZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09''@;'; put 'put ''PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0p''@;'; put 'put ''LHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8''@;'; put 'put ''PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1m''@;'; put 'put ''b3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwi''@;'; put 'put ''TnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVy''@;'; put 'put ''biBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5i''@;'; put 'put ''eXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlz''@;'; put 'put ''LmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVttXT1FO2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5p''@;'; put 'put ''dXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYo''@;'; put 'put ''eCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9''@;'; put 'put ''Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3Ro''@;'; put 'put ''LTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBn''@;'; put 'put ''fSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5j''@;'; put 'put ''bG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5w''@;'; put 'put ''cm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlz''@;'; put 'put ''Lmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0''@;'; put 'put ''aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQo''@;'; put 'put ''Zyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0Nd''@;'; put 'put ''PXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhp''@;'; put 'put ''cy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0''@;'; put 'put ''aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hd''@;'; put 'put ''PXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5p''@;'; put 'put ''c3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10''@;'; put 'put ''aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09Njcx''@;'; put 'put ''MDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNb''@;'; put 'put ''Vl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZl''@;'; put 'put ''KXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxU''@;'; put 'put ''LHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgw''@;'; put 'put ''fFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYmVTxDLmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5s''@;'; put 'put ''ZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLFY9eC53b3JkcyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZl''@;'; put 'put ''PW90Pj4+MTMsWGU9MHxDWzNdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0wfENbN10seXQ9ODE5MSZsbixTdD1sbj4+''@;'; put 'put ''PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxP''@;'; put 'put ''cj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxU''@;'; put 'put ''WzhdLHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oVSsoRT1NYXRoLmltdWwobmUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0''@;'; put 'put ''KSkrTWF0aC5pbXVsKGxlLFJ0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''UWUsUHQpO3ZhciBFaT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsc24pfDA7dmFyIHZyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxobil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYp''@;'; put 'put ''fDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEJlLFJ0KSxtPShtPU1hdGguaW11bChCZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwO3ZhciBXbj0oVSsoRT1FK01hdGguaW11bChuZSxXdCl8MCl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwobGUsV3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmlt''@;'; put 'put ''dWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoQmUsUXQpfDAsbT0obT1tK01hdGguaW11bChCZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1l''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciAkaT0oVSsoRT1FK01hdGguaW11''@;'; put 'put ''bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwobGUsc3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxSdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsUnQpfDAsQT1NYXRoLmltdWwoa2UsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChC''@;'; put 'put ''ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDA7dmFyIGVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNuKXwwKStNYXRoLmltdWwoa2UsUXQpfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJ''@;'; put 'put ''ZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoQmUsV3QpfDAsbT0obT1tK01hdGguaW11bChCZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1l''@;'; put 'put ''LFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11''@;'; put 'put ''bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHh0KXwwKStNYXRoLmltdWwobGUsaHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0o''@;'; put 'put ''bT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoU3QsUnQpfDAsQT1NYXRoLmltdWwoU3QsUHQpLEU9RStNYXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChE''@;'; put 'put ''ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoQmUsc3QpfDAsbT0obT1tK01hdGguaW11bChCZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwO3ZhciBWaT0oVSsoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwobGUscm4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmlt''@;'; put 'put ''dWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKFN0LFF0KXwwLEE9QStNYXRoLmltdWwoU3Qsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0aC5pbXVsKERlLFd0KXwwLG09KG09bStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1FK01hdGguaW11bChCZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsenQpfDA7dmFyIE5pPShVKyhFPUUrTWF0aC5pbXVsKG5lLHVuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSx1bil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYp''@;'; put 'put ''fDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFJ0KSxtPShtPU1hdGguaW11bChOZSxQdCkpK01hdGguaW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChEZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLFV0KXwwKStNYXRoLmltdWwoa2Usc3QpfDAsQT1BK01hdGguaW11bChrZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoQmUsaHQpfDAsbT0obT1tK01hdGguaW11bChCZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHVuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChRZSx1bil8MCxBPUErTWF0aC5pbXVsKFFl''@;'; put 'put ''LGZuKXwwO3ZhciBEYT0oVSsoRT1FK01hdGguaW11bChuZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwobGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChOZSxRdCksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoU3QsV3QpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11''@;'; put 'put ''bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAsbT0obT1tK01hdGguaW11bChEZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsdW4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLHVuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7dmFyIExyPShVKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkp''@;'; put 'put ''PDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGhuKSxtPShtPU1hdGguaW11bChOZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11''@;'; put 'put ''bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0''@;'; put 'put ''LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDAsRT1FK01hdGguaW11bChEZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHh0KXwwKStNYXRoLmltdWwoa2UsaHQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChrZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoQmUsdW4pfDAsbT0obT1tK01hdGguaW11bChCZSxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLHVuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFdpPShVKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2''@;'; put 'put ''ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFd0KSxtPShtPU1hdGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDAsRT1FK01hdGguaW11bChEZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSx6dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSx1bil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oVSsoRT1FK01hdGguaW11bChCZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEJlLGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxzdCksbT0obT1NYXRoLmltdWwoTmUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''dXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoU3QsaHQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChTdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsdW4pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGtlLHVuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIFFuPShVKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJ''@;'; put 'put ''ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFdlKSxtPShtPU1hdGguaW11bChOZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwobnQsdW4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLHVuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIGxhPShVKyhFPUUrTWF0aC5pbXVsKERlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCkp''@;'; put 'put ''PDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11''@;'; put 'put ''bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChTdCx1bil8MCxBPUErTWF0aC5pbXVsKFN0''@;'; put 'put ''LGZuKXwwO3ZhciBiYT0oVSsoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChOZSxybiksbT0obT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsdW4pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLHVuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoJGUsZm4pfDA7dmFyIExhPShVKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChTdCxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChTdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYp''@;'; put 'put ''fDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHVuKSxtPShtPU1hdGguaW11bChOZSxmbikpK01hdGguaW11bCh1dCx1bil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShVKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4p''@;'; put 'put ''fDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oVSsoRT1NYXRoLmltdWwoTmUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLGVuKSkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsVlswXT11YSxWWzFdPUVpLFZbMl09dnIsVlszXT1XbixWWzRdPSRpLFZbNV09ZWksVls2XT1RcixWWzddPVZpLFZbOF09Tmks''@;'; put 'put ''Vls5XT1EYSxWWzEwXT1McixWWzExXT1XaSxWWzEyXT1wYSxWWzEzXT1RbixWWzE0XT1sYSxWWzE1XT1iYSxWWzE2XT1MYSxWWzE3XT1GYSxWWzE4XT10aSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBYKS5tdWxwKHosZyx5KX1m''@;'; put 'put ''dW5jdGlvbiBYKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpD''@;'; put 'put ''PDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEw''@;'; put 'put ''ODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9NjcxMDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEw''@;'; put 'put ''ODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1WLFY9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6USh0aGlzLGcseSkseH0sWC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihn''@;'; put 'put ''KXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxYLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zv''@;'; put 'put ''cih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sWC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1UrKylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxYLnByb3RvdHlwZS50cmFuc2Zvcm09''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBVPTE7VTxUO1U8PD0xKWZvcih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9''@;'; put 'put ''QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLFFlPUNbYWUrd2VdLG90PXhbYWUrd2UrVV0sTWU9Q1thZSt3ZStVXSx2ZT1uZSpvdC1sZSpNZTtNZT1uZSpNZStsZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPVFlK01lLHhbYWUrd2UrVV09VWUtb3QsQ1thZSt3ZStV''@;'; put 'put ''XT1RZS1NZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LFgucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxY''@;'; put 'put ''LnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxYLnByb3RvdHlwZS5ub3JtYWxpemUx''@;'; put 'put ''M2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxYLnByb3RvdHlw''@;'; put 'put ''ZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhbMipWXT04MTkxJihUKz0wfGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LFgucHJv''@;'; put 'put ''dG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LFgucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VS''@;'; put 'put ''QlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxsZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVu''@;'; put 'put ''Z3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShVLFYsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3''@;'; put 'put ''ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUsVixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVe''@;'; put 'put ''eS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90''@;'; put 'put ''b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9''@;'; put 'put ''Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3''@;'; put 'put ''IEFycmF5KHouYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09''@;'; put 'put ''eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYm''@;'; put 'put ''Zz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+''@;'; put 'put ''PjI2LXl9ViYmKHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXkl''@;'; put 'put ''MjYpLzI2OjA7dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxVPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9''@;'; put 'put ''Vn1pZigwIT09VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09VixtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49''@;'; put 'put ''MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5n''@;'; put 'put ''dGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rp''@;'; put 'put ''b24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxl''@;'; put 'put ''bmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWct''@;'; put 'put ''KDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIg''@;'; put 'put ''eT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgs''@;'; put 'put ''eSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTww''@;'; put 'put ''O3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rp''@;'; put 'put ''b24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixVPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlz''@;'; put 'put ''LndvcmRzW1QreF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspVT0oVj0oMHx0aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMu''@;'; put 'put ''bGVuZ3RoO1QrKylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxW''@;'; put 'put ''PTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoVikpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0''@;'; put 'put ''aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1F''@;'; put 'put ''LTE7bmU+PTA7bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5l''@;'; put 'put ''Z2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkm''@;'; put 'put ''JihDPVYuZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5k''@;'; put 'put ''aXYubmVnKCkpLHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxl''@;'; put 'put ''bmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1sw''@;'; put 'put ''XSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJv''@;'; put 'put ''dG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRo''@;'; put 'put ''aXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRp''@;'; put 'put ''di5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3Jl''@;'; put 'put ''dHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0''@;'; put 'put ''aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj1uZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsh''@;'; put 'put ''eS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVz''@;'; put 'put ''aHJuKDEpO2Zvcih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2OysrbGUsd2U8PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09kZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEp''@;'; put 'put ''O3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHguaXN1Yih5KSxWLmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5p''@;'; put 'put ''c1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jk''@;'; put 'put ''c1swXSZFKSYmVTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7VS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0g''@;'; put 'put ''PjA7KVQuaXNPZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1m''@;'; put 'put ''dW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4o''@;'; put 'put ''KTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSli''@;'; put 'put ''cmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlz''@;'; put 'put ''T2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15''@;'; put 'put ''KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRz''@;'; put 'put ''W1ZdPVUmPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlv''@;'; put 'put ''bihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmln''@;'; put 'put ''Iik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxl''@;'; put 'put ''bmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihn''@;'; put 'put ''KTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJl''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZy''@;'; put 'put ''b20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlz''@;'; put 'put ''Ll9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''cCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5p''@;'; put 'put ''bXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRT''@;'; put 'put ''cXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk''@;'; put 'put ''Lm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxw''@;'; put 'put ''MTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHJlKHosZyl7dGhpcy5uYW1lPXosdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5j''@;'; put 'put ''dGlvbiBvZSgpe3JlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtyZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7cmUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe3JlLmNhbGwodGhpcywiMjU1MTki''@;'; put 'put ''LCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIgZz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4o''@;'; put 'put ''MSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hp''@;'; put 'put ''ZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1yZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30scmUucHJvdG90''@;'; put 'put ''eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVy''@;'; put 'put ''biAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LHJlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxyZS5wcm90b3R5cGUuaW11''@;'; put 'put ''bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKG9lLHJlKSxvZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0''@;'; put 'put ''aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgVj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+''@;'; put 'put ''MjIsVj1VfWcud29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcubGVuZ3RoPjEwPzEwOjl9LG9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7''@;'; put 'put ''eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3Ro''@;'; put 'put ''LS0pLGd9LE4oZ2UscmUpLE4oX2UscmUpLE4oVGUscmUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1''@;'; put 'put ''cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IG9lO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7''@;'; put 'put ''ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVz''@;'; put 'put ''IikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVk''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49''@;'; put 'put ''MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIo''@;'; put 'put ''eSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNs''@;'; put 'put ''b25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFy''@;'; put 'put ''IHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQo''@;'; put 'put ''dGhpcyksVT1WLnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10''@;'; put 'put ''aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksbGU9VDswIT09bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxVZT0wOzAhPT13ZS5jbXAoVik7VWUrKyl3ZT13ZS5yZWRTcXIoKTtwKFVlPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4o''@;'; put 'put ''bGUtVWUtMSkpO2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksbGU9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1sw''@;'; put 'put ''XT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2''@;'; put 'put ''YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtWIT09Q1swXSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0y''@;'; put 'put ''Nn1yZXR1cm4gVn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGws''@;'; put 'put ''eX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5''@;'; put 'put ''PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNr''@;'; put 'put ''bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5t''@;'; put 'put ''KSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90''@;'; put 'put ''eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw2NTA0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBwLEQ9YigzMTkpLF89Yig3Mjk2KTt0cnl7''@;'; put 'put ''cD1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGV9Y2F0Y2goSCl7aWYoIUh8fCJvYmplY3QiIT10eXBlb2YgSHx8ISgiY29kZSJpbiBIKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09SC5jb2RlKXRocm93IEh9dmFyIE49ISFwJiZfJiZfKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIp''@;'; put 'put ''LHc9T2JqZWN0LEY9dy5nZXRQcm90b3R5cGVPZjtjZS5leHBvcnRzPU4mJiJmdW5jdGlvbiI9PXR5cGVvZiBOLmdldD9EKFtOLmdldF0pOiJmdW5jdGlvbiI9PXR5cGVvZiBGJiZmdW5jdGlvbihSKXtyZXR1cm4gRihudWxsPT1SP1I6dyhSKSl9fSw2OTQ4OihjZSxKLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBEPUo7RC52ZXJzaW9uPWIoODU5NykuaTgsRC51dGlscz1iKDk1MyksRC5yYW5kPWIoOTkzMSksRC5jdXJ2ZT1iKDgyNTQpLEQuY3VydmVzPWIoNTQyNyksRC5lYz1iKDc5NTQpLEQuZWRkc2E9Yig1OTgwKX0sNDkxODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3''@;'; put 'put ''ODUpLF89Yig5NTMpLHA9Xy5nZXROQUYsTj1fLmdldEpTRix3PV8uYXNzZXJ0O2Z1bmN0aW9uIEYoUixqKXt0aGlzLnR5cGU9Uix0aGlzLnA9bmV3IEQoai5wLDE2KSx0aGlzLnJlZD1qLnByaW1lP0QucmVkKGoucHJpbWUpOkQubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgRCgwKS50b1Jl''@;'; put 'put ''ZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IEQoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBEKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ai5uJiZuZXcgRChqLm4sMTYpLHRoaXMuZz1qLmcmJnRoaXMucG9pbnRGcm9tSlNPTihqLmcsai5nUmVkKSx0aGlzLl93bmFmVDE9bmV3''@;'; put 'put ''IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIFA9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7''@;'; put 'put ''IVB8fFAuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gSChSLGope3RoaXMuY3VydmU9Uix0aGlzLnR5cGU9aix0aGlzLnByZWNvbXB1dGVkPW51bGx9Y2UuZXhwb3J0cz1G''@;'; put 'put ''LEYucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rp''@;'; put 'put ''b24oaixQKXt3KGoucHJlY29tcHV0ZWQpO3ZhciBMPWouX2dldERvdWJsZXMoKSxZPXAoUCwxLHRoaXMuX2JpdExlbmd0aCksQj0oMTw8TC5zdGVwKzEpLShMLnN0ZXAlMj09MD8yOjEpO0IvPTM7dmFyIFoscSxXPVtdO2ZvcihaPTA7WjxZLmxlbmd0aDtaKz1MLnN0ZXApe3E9MDtmb3IodmFy''@;'; put 'put ''IFE9WitMLnN0ZXAtMTtRPj1aO1EtLSlxPShxPDwxKStZW1FdO1cucHVzaChxKX1mb3IodmFyIFg9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHRlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxyZT1CO3JlPjA7cmUtLSl7Zm9yKFo9MDtaPFcubGVuZ3RoO1orKykocT1XW1pdKT09''@;'; put 'put ''PXJlP3RlPXRlLm1peGVkQWRkKEwucG9pbnRzW1pdKTpxPT09LXJlJiYodGU9dGUubWl4ZWRBZGQoTC5wb2ludHNbWl0ubmVnKCkpKTtYPVguYWRkKHRlKX1yZXR1cm4gWC50b1AoKX0sRi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oaixQKXtmb3IodmFyIEw9NCxZPWouX2dldE5BRlBv''@;'; put 'put ''aW50cyhMKSxCPVkucG9pbnRzLFc9cChQLEw9WS53bmQsdGhpcy5fYml0TGVuZ3RoKSxaPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPVcubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgUT0wO3E+PTAmJjA9PT1XW3FdO3EtLSlRKys7aWYocT49MCYmUSsrLFo9Wi5kYmxwKFEpLHE8''@;'; put 'put ''MClicmVhazt2YXIgWD1XW3FdO3coMCE9PVgpLFo9ImFmZmluZSI9PT1qLnR5cGU/Wi5taXhlZEFkZChYPjA/QltYLTE+PjFdOkJbLVgtMT4+MV0ubmVnKCkpOlouYWRkKFg+MD9CW1gtMT4+MV06QlstWC0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1qLnR5cGU/Wi50b1AoKTpafSxG''@;'; put 'put ''LnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihqLFAsTCxZLEIpe3ZhciBYLHRlLHJlLFc9dGhpcy5fd25hZlQxLFo9dGhpcy5fd25hZlQyLHE9dGhpcy5fd25hZlQzLFE9MDtmb3IoWD0wO1g8WTtYKyspe3ZhciBvZT0ocmU9UFtYXSkuX2dldE5BRlBvaW50cyhqKTtXW1hdPW9lLndu''@;'; put 'put ''ZCxaW1hdPW9lLnBvaW50c31mb3IoWD1ZLTE7WD49MTtYLT0yKXt2YXIgZ2U9WC0xLF9lPVg7aWYoMT09PVdbZ2VdJiYxPT09V1tfZV0pe3ZhciBUZT1bUFtnZV0sbnVsbCxudWxsLFBbX2VdXTswPT09UFtnZV0ueS5jbXAoUFtfZV0ueSk/KFRlWzFdPVBbZ2VdLmFkZChQW19lXSksVGVbMl09''@;'; put 'put ''UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtfZV0ubmVnKCkpKTowPT09UFtnZV0ueS5jbXAoUFtfZV0ueS5yZWROZWcoKSk/KFRlWzFdPVBbZ2VdLnRvSigpLm1peGVkQWRkKFBbX2VdKSxUZVsyXT1QW2dlXS5hZGQoUFtfZV0ubmVnKCkpKTooVGVbMV09UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtf''@;'; put 'put ''ZV0pLFRlWzJdPVBbZ2VdLnRvSigpLm1peGVkQWRkKFBbX2VdLm5lZygpKSk7dmFyIFNlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLHplPU4oTFtnZV0sTFtfZV0pO2ZvcihRPU1hdGgubWF4KHplWzBdLmxlbmd0aCxRKSxxW2dlXT1uZXcgQXJyYXkoUSkscVtfZV09bmV3IEFycmF5KFEpLHRl''@;'; put 'put ''PTA7dGU8UTt0ZSsrKXFbZ2VdW3RlXT1TZVszKigxKygwfHplWzBdW3RlXSkpKygxKygwfHplWzFdW3RlXSkpXSxxW19lXVt0ZV09MCxaW2dlXT1UZX1lbHNlIHFbZ2VdPXAoTFtnZV0sV1tnZV0sdGhpcy5fYml0TGVuZ3RoKSxxW19lXT1wKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCks''@;'; put 'put ''UT1NYXRoLm1heChxW2dlXS5sZW5ndGgsUSksUT1NYXRoLm1heChxW19lXS5sZW5ndGgsUSl9dmFyIHk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHg9dGhpcy5fd25hZlQ0O2ZvcihYPVE7WD49MDtYLS0pe2Zvcih2YXIgQz0wO1g+PTA7KXt2YXIgVD0hMDtmb3IodGU9MDt0ZTxZO3Rl''@;'; put 'put ''KyspeFt0ZV09MHxxW3RlXVtYXSwwIT09eFt0ZV0mJihUPSExKTtpZighVClicmVhaztDKyssWC0tfWlmKFg+PTAmJkMrKyx5PXkuZGJscChDKSxYPDApYnJlYWs7Zm9yKHRlPTA7dGU8WTt0ZSsrKXt2YXIgVj14W3RlXTswIT09ViYmKFY+MD9yZT1aW3RlXVtWLTE+PjFdOlY8MCYmKHJlPVpb''@;'; put 'put ''dGVdWy1WLTE+PjFdLm5lZygpKSx5PSJhZmZpbmUiPT09cmUudHlwZT95Lm1peGVkQWRkKHJlKTp5LmFkZChyZSkpfX1mb3IoWD0wO1g8WTtYKyspWltYXT1udWxsO3JldHVybiBCP3k6eS50b1AoKX0sRi5CYXNlUG9pbnQ9SCxILnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigiTm90IGltcGxlbWVudGVkIil9LEgucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LEYucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGosUCl7aj1fLnRvQXJyYXkoaixQKTt2YXIgTD10aGlzLnAuYnl0ZUxl''@;'; put 'put ''bmd0aCgpO2lmKCg0PT09alswXXx8Nj09PWpbMF18fDc9PT1qWzBdKSYmai5sZW5ndGgtMT09MipMKXJldHVybiA2PT09alswXT93KGpbai5sZW5ndGgtMV0lMj09MCk6Nz09PWpbMF0mJncoaltqLmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KGouc2xpY2UoMSwxK0wpLGouc2xpY2UoMStM''@;'; put 'put ''LDErMipMKSk7aWYoKDI9PT1qWzBdfHwzPT09alswXSkmJmoubGVuZ3RoLTE9PT1MKXJldHVybiB0aGlzLnBvaW50RnJvbVgoai5zbGljZSgxLDErTCksMz09PWpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sSC5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3Nl''@;'; put 'put ''ZD1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5lbmNvZGUoaiwhMCl9LEgucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oail7dmFyIFA9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixQKTtyZXR1cm4gaj9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/''@;'; put 'put ''MjozXS5jb25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixQKSl9LEgucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihqLFApe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoUCksail9LEgucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oail7aWYo''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgUD17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIFAubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxQLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LGopLFAuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5w''@;'; put 'put ''cmVjb21wdXRlZD1QLHRoaXN9LEgucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKGope2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBQPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIVAmJlAucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKChqLmJpdExlbmd0''@;'; put 'put ''aCgpKzEpL1Auc3RlcCl9LEgucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKGosUCl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBMPVt0aGlzXSxZPXRoaXMsQj0wO0I8UDtC''@;'; put 'put ''Kz1qKXtmb3IodmFyIFc9MDtXPGo7VysrKVk9WS5kYmwoKTtMLnB1c2goWSl9cmV0dXJue3N0ZXA6aixwb2ludHM6TH19LEgucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oail7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQubmFmO2Zvcih2YXIgUD1bdGhpc10sTD0oMTw8aiktMSxZPTE9PT1MP251bGw6dGhpcy5kYmwoKSxCPTE7QjxMO0IrKylQW0JdPVBbQi0xXS5hZGQoWSk7cmV0dXJue3duZDpqLHBvaW50czpQfX0sSC5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0s''@;'; put 'put ''SC5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihqKXtmb3IodmFyIFA9dGhpcyxMPTA7TDxqO0wrKylQPVAuZGJsKCk7cmV0dXJuIFB9fSwxMTM4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLE49Yig0OTE4KSx3PUQuYXNzZXJ0O2Z1bmN0''@;'; put 'put ''aW9uIEYoUil7dGhpcy50d2lzdGVkPTEhPSgwfFIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxSLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxOLmNhbGwodGhpcywiZWR3YXJkcyIsUiksdGhpcy5hPW5ldyBfKFIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9''@;'; put 'put ''dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oUi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKFIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3Rl''@;'; put 'put ''ZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFIuYyl9ZnVuY3Rpb24gSChSLGosUCxMLFkpe04uQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PWomJm51bGw9PT1QJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVy''@;'; put 'put ''byx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKGosMTYpLHRoaXMueT1uZXcgXyhQLDE2KSx0aGlzLno9TD9uZXcgXyhMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9''@;'; put 'put ''WSYmbmV3IF8oWSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSks''@;'; put 'put ''dGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwo''@;'; put 'put ''dGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cChGLE4pLGNlLmV4cG9ydHM9RixGLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5tT25lQT9qLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoail9LEYucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9u''@;'; put 'put ''KGope3JldHVybiB0aGlzLm9uZUM/ajp0aGlzLmMucmVkTXVsKGopfSxGLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oaixQLEwsWSl7cmV0dXJuIHRoaXMucG9pbnQoaixQLEwsWSl9LEYucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oaixQKXsoaj1uZXcgXyhqLDE2KSkucmVkfHwo''@;'; put 'put ''aj1qLnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ai5yZWRTcXIoKSxZPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTCkpLEI9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPVkucmVkTXVsKEIucmVkSW52bSgpKSxaPVcucmVkU3FydCgpO2lm''@;'; put 'put ''KDAhPT1aLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1aLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihQJiYhcXx8IVAmJnEpJiYoWj1aLnJlZE5lZygpKSx0aGlzLnBvaW50KGosWil9LEYucHJvdG90eXBl''@;'; put 'put ''LnBvaW50RnJvbVk9ZnVuY3Rpb24oaixQKXsoaj1uZXcgXyhqLDE2KSkucmVkfHwoaj1qLnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ai5yZWRTcXIoKSxZPUwucmVkU3ViKHRoaXMuYzIpLEI9TC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1ZLnJlZE11''@;'; put 'put ''bChCLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKFApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGopfXZhciBaPVcucmVkU3FydCgpO2lmKDAhPT1aLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56''@;'; put 'put ''ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWi5mcm9tUmVkKCkuaXNPZGQoKSE9PVAmJihaPVoucmVkTmVnKCkpLHRoaXMucG9pbnQoWixqKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oail7aWYoai5pc0luZmluaXR5KCkpcmV0dXJuITA7ai5u''@;'; put 'put ''b3JtYWxpemUoKTt2YXIgUD1qLngucmVkU3FyKCksTD1qLnkucmVkU3FyKCksWT1QLnJlZE11bCh0aGlzLmEpLnJlZEFkZChMKSxCPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKFApLnJlZE11bChMKSkpO3JldHVybiAwPT09WS5jbXAoQil9LHAoSCxOLkJh''@;'; put 'put ''c2VQb2ludCksRi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihqKXtyZXR1cm4gSC5mcm9tSlNPTih0aGlzLGopfSxGLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihqLFAsTCxZKXtyZXR1cm4gbmV3IEgodGhpcyxqLFAsTCxZKX0sSC5mcm9tSlNPTj1mdW5jdGlvbihqLFApe3Jl''@;'; put 'put ''dHVybiBuZXcgSChqLFBbMF0sUFsxXSxQWzJdKX0sSC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3Ro''@;'; put 'put ''aXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxILnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMu''@;'; put 'put ''ek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEgucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgaj10aGlzLngucmVkU3FyKCksUD10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1MLnJlZElBZGQoTCk7dmFyIFk9dGhpcy5jdXJ2ZS5fbXVsQShq''@;'; put 'put ''KSxCPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGopLnJlZElTdWIoUCksVz1ZLnJlZEFkZChQKSxaPVcucmVkU3ViKEwpLHE9WS5yZWRTdWIoUCksUT1CLnJlZE11bChaKSxYPVcucmVkTXVsKHEpLHRlPUIucmVkTXVsKHEpLHJlPVoucmVkTXVsKFcpO3JldHVybiB0''@;'; put 'put ''aGlzLmN1cnZlLnBvaW50KFEsWCxyZSx0ZSl9LEgucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIFksQixXLFoscSxRLGo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLFA9dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3Rl''@;'; put 'put ''ZCl7dmFyIFg9KFo9dGhpcy5jdXJ2ZS5fbXVsQShQKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oWT1qLnJlZFN1YihQKS5yZWRTdWIoTCkucmVkTXVsKFgucmVkU3ViKHRoaXMuY3VydmUudHdvKSksQj1YLnJlZE11bChaLnJlZFN1YihMKSksVz1YLnJlZFNxcigpLnJlZFN1YihYKS5yZWRTdWIo''@;'; put 'put ''WCkpOihxPXRoaXMuei5yZWRTcXIoKSxRPVgucmVkU3ViKHEpLnJlZElTdWIocSksWT1qLnJlZFN1YihQKS5yZWRJU3ViKEwpLnJlZE11bChRKSxCPVgucmVkTXVsKFoucmVkU3ViKEwpKSxXPVgucmVkTXVsKFEpKX1lbHNlIFo9UC5yZWRBZGQoTCkscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMu''@;'; put 'put ''eikucmVkU3FyKCksUT1aLnJlZFN1YihxKS5yZWRTdWIocSksWT10aGlzLmN1cnZlLl9tdWxDKGoucmVkSVN1YihaKSkucmVkTXVsKFEpLEI9dGhpcy5jdXJ2ZS5fbXVsQyhaKS5yZWRNdWwoUC5yZWRJU3ViKEwpKSxXPVoucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksQixX''@;'; put 'put ''KX0sSC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEgucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oail7dmFyIFA9dGhpcy55LnJlZFN1Yih0''@;'; put 'put ''aGlzLngpLnJlZE11bChqLnkucmVkU3ViKGoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bChqLnkucmVkQWRkKGoueCkpLFk9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoai50KSxCPXRoaXMuei5yZWRNdWwoai56LnJlZEFkZChqLnopKSxXPUwucmVkU3Vi''@;'; put 'put ''KFApLFo9Qi5yZWRTdWIoWSkscT1CLnJlZEFkZChZKSxRPUwucmVkQWRkKFApLFg9Vy5yZWRNdWwoWiksdGU9cS5yZWRNdWwoUSkscmU9Vy5yZWRNdWwoUSksb2U9Wi5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWCx0ZSxvZSxyZSl9LEgucHJvdG90eXBlLl9wcm9qQWRkPWZ1''@;'; put 'put ''bmN0aW9uKGope3ZhciB0ZSxyZSxQPXRoaXMuei5yZWRNdWwoai56KSxMPVAucmVkU3FyKCksWT10aGlzLngucmVkTXVsKGoueCksQj10aGlzLnkucmVkTXVsKGoueSksVz10aGlzLmN1cnZlLmQucmVkTXVsKFkpLnJlZE11bChCKSxaPUwucmVkU3ViKFcpLHE9TC5yZWRBZGQoVyksUT10aGlz''@;'; put 'put ''LngucmVkQWRkKHRoaXMueSkucmVkTXVsKGoueC5yZWRBZGQoai55KSkucmVkSVN1YihZKS5yZWRJU3ViKEIpLFg9UC5yZWRNdWwoWikucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHRlPVAucmVkTXVsKHEpLnJlZE11bChCLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKFkp''@;'; put 'put ''KSkscmU9Wi5yZWRNdWwocSkpOih0ZT1QLnJlZE11bChxKS5yZWRNdWwoQi5yZWRTdWIoWSkpLHJlPXRoaXMuY3VydmUuX211bEMoWikucmVkTXVsKHEpKSx0aGlzLmN1cnZlLnBvaW50KFgsdGUscmUpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuaXNJbmZpbml0''@;'; put 'put ''eSgpP2o6ai5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChqKTp0aGlzLl9wcm9qQWRkKGopfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoaik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxq''@;'; put 'put ''KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsail9LEgucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihqLFAsTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxQXSxbaixMXSwyLCExKX0sSC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihqLFAsTCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxQXSxbaixMXSwyLCEwKX0sSC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBqPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKGopLHRoaXMueT10''@;'; put 'put ''aGlzLnkucmVkTXVsKGopLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKGopKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnks''@;'; put 'put ''dGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sSC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEgucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJv''@;'; put 'put ''bVJlZCgpfSxILnByb3RvdHlwZS5lcT1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcz09PWp8fDA9PT10aGlzLmdldFgoKS5jbXAoai5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKGouZ2V0WSgpKX0sSC5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGope3ZhciBQPWoudG9SZWQodGhpcy5j''@;'; put 'put ''dXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKFApKXJldHVybiEwO2Zvcih2YXIgTD1qLmNsb25lKCksWT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoTC5pYWRkKHRoaXMuY3VydmUubiksTC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4h''@;'; put 'put ''MTtpZihQLnJlZElBZGQoWSksMD09PXRoaXMueC5jbXAoUCkpcmV0dXJuITB9fSxILnByb3RvdHlwZS50b1A9SC5wcm90b3R5cGUubm9ybWFsaXplLEgucHJvdG90eXBlLm1peGVkQWRkPUgucHJvdG90eXBlLmFkZH0sODI1NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1KO0QuYmFz''@;'; put 'put ''ZT1iKDQ5MTgpLEQuc2hvcnQ9Yig2NjczKSxELm1vbnQ9YigyODgxKSxELmVkd2FyZHM9YigxMTM4KX0sMjg4MTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3ODUpLF89Yig1NzE3KSxwPWIoNDkxOCksTj1iKDk1Myk7ZnVuY3Rpb24gdyhIKXtwLmNhbGwodGhpcywibW9udCIs''@;'; put 'put ''SCksdGhpcy5hPW5ldyBEKEguYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgRChILmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBEKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEQoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRo''@;'; put 'put ''aXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBGKEgsUixqKXtwLkJhc2VQb2ludC5jYWxsKHRoaXMsSCwicHJvamVjdGl2ZSIpLG51bGw9PT1SJiZudWxsPT09aj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlz''@;'; put 'put ''Lng9bmV3IEQoUiwxNiksdGhpcy56PW5ldyBEKGosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9Xyh3LHApLGNlLmV4cG9ydHM9dyx3LnByb3RvdHlw''@;'; put 'put ''ZS52YWxpZGF0ZT1mdW5jdGlvbihSKXt2YXIgaj1SLm5vcm1hbGl6ZSgpLngsUD1qLnJlZFNxcigpLEw9UC5yZWRNdWwoaikucmVkQWRkKFAucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChqKTtyZXR1cm4gMD09PUwucmVkU3FydCgpLnJlZFNxcigpLmNtcChMKX0sXyhGLHAuQmFzZVBvaW50KSx3''@;'; put 'put ''LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihSLGope3JldHVybiB0aGlzLnBvaW50KE4udG9BcnJheShSLGopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihSLGope3JldHVybiBuZXcgRih0aGlzLFIsail9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24o''@;'; put 'put ''Uil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxSKX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LEYuZnJvbUpT''@;'; put 'put ''T049ZnVuY3Rpb24oUixqKXtyZXR1cm4gbmV3IEYoUixqWzBdLGpbMV18fFIub25lKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9T''@;'; put 'put ''dHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIGo9dGhpcy54LnJlZEFkZCh0''@;'; put 'put ''aGlzLnopLnJlZFNxcigpLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLFk9ai5yZWRTdWIoTCksQj1qLnJlZE11bChMKSxXPVkucmVkTXVsKEwucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChZKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsVyl9LEYucHJvdG90eXBl''@;'; put 'put ''LmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LEYucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oUixqKXt2YXIgUD10aGlzLngucmVkQWRkKHRoaXMueiksTD10aGlzLngucmVkU3ViKHRoaXMueiksWT1SLngucmVk''@;'; put 'put ''QWRkKFIueiksVz1SLngucmVkU3ViKFIueikucmVkTXVsKFApLFo9WS5yZWRNdWwoTCkscT1qLnoucmVkTXVsKFcucmVkQWRkKFopLnJlZFNxcigpKSxRPWoueC5yZWRNdWwoVy5yZWRJU3ViKFopLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLFEpfSxGLnByb3RvdHlwZS5t''@;'; put 'put ''dWw9ZnVuY3Rpb24oUil7Zm9yKHZhciBqPVIuY2xvbmUoKSxQPXRoaXMsTD10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksQj1bXTswIT09ai5jbXBuKDApO2ouaXVzaHJuKDEpKUIucHVzaChqLmFuZGxuKDEpKTtmb3IodmFyIFc9Qi5sZW5ndGgtMTtXPj0wO1ctLSkwPT09QltXXT8oUD1Q''@;'; put 'put ''LmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPVAuZGlmZkFkZChMLHRoaXMpLFA9UC5kYmwoKSk7cmV0dXJuIEx9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LEYucHJvdG90eXBl''@;'; put 'put ''Lmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihSKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChSLmdldFgoKSl9LEYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOihjZSxKLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLE49Yig0OTE4KSx3PUQuYXNzZXJ0O2Z1bmN0aW9uIEYoail7Ti5jYWxsKHRoaXMsInNob3J0IixqKSx0aGlzLmE9bmV3IF8oai5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKGouYiwxNiku''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9y''@;'; put 'put ''cGhpc20oaiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gSChqLFAsTCxZKXtOLkJhc2VQb2ludC5jYWxsKHRoaXMsaiwiYWZmaW5lIiksbnVsbD09PVAmJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVs''@;'; put 'put ''bCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhQLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksWSYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2''@;'; put 'put ''ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBSKGosUCxMLFkpe04uQmFzZVBvaW50LmNhbGwodGhpcyxqLCJqYWNvYmlhbiIpLG51bGw9PT1QJiZudWxsPT09TCYmbnVsbD09PVk/KHRoaXMueD10''@;'; put 'put ''aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDApKToodGhpcy54PW5ldyBfKFAsMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oWSwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhp''@;'; put 'put ''cy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1wKEYsTiksY2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLl9n''@;'; put 'put ''ZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oUCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsWTtpZihQLmJldGEpTD1uZXcgXyhQLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBCPXRoaXMuX2dldEVuZG9Sb290cyh0aGlz''@;'; put 'put ''LnApO0w9KEw9QlswXS5jbXAoQlsxXSk8MD9CWzBdOkJbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihQLmxhbWJkYSlZPW5ldyBfKFAubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11''@;'; put 'put ''bChMKSk/WT1XWzBdOncoMD09PXRoaXMuZy5tdWwoWT1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpZLGJhc2lzOlAuYmFzaXM/UC5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9''@;'; put 'put ''fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKFkpfX19LEYucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oUCl7dmFyIEw9UD09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoUCksWT1uZXcgXygyKS50b1JlZChMKS5yZWRJbnZtKCksQj1ZLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCku''@;'; put 'put ''cmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChZKTtyZXR1cm5bQi5yZWRBZGQoVykuZnJvbVJlZCgpLEIucmVkU3ViKFcpLmZyb21SZWQoKV19LEYucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oUCl7Zm9yKHZhciBYLHRlLHJlLG9lLGdlLF9lLFRlLHplLHosTD10aGlzLm4udXNo''@;'; put 'put ''cm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLFk9UCxCPXRoaXMubi5jbG9uZSgpLFc9bmV3IF8oMSksWj1uZXcgXygwKSxxPW5ldyBfKDApLFE9bmV3IF8oMSksU2U9MDswIT09WS5jbXBuKDApOyl7dmFyIGc9Qi5kaXYoWSk7emU9Qi5zdWIoZy5tdWwoWSkpLHo9cS5zdWIo''@;'; put 'put ''Zy5tdWwoVykpO3ZhciB5PVEuc3ViKGcubXVsKFopKTtpZighcmUmJnplLmNtcChMKTwwKVg9VGUubmVnKCksdGU9VyxyZT16ZS5uZWcoKSxvZT16O2Vsc2UgaWYocmUmJjI9PSsrU2UpYnJlYWs7VGU9emUsQj1ZLFk9emUscT1XLFc9eixRPVosWj15fWdlPXplLm5lZygpLF9lPXo7dmFyIHg9''@;'; put 'put ''cmUuc3FyKCkuYWRkKG9lLnNxcigpKTtyZXR1cm4gZ2Uuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihnZT1YLF9lPXRlKSxyZS5uZWdhdGl2ZSYmKHJlPXJlLm5lZygpLG9lPW9lLm5lZygpKSxnZS5uZWdhdGl2ZSYmKGdlPWdlLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6cmUsYjpv''@;'; put 'put ''ZX0se2E6Z2UsYjpfZX1dfSxGLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKFApe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxZPUxbMF0sQj1MWzFdLFc9Qi5iLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLFo9WS5iLm5lZygpLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoWS5h''@;'; put 'put ''KSxRPVoubXVsKEIuYSksWD1XLm11bChZLmIpLHRlPVoubXVsKEIuYik7cmV0dXJue2sxOlAuc3ViKHEpLnN1YihRKSxrMjpYLmFkZCh0ZSkubmVnKCl9fSxGLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFAsTCl7KFA9bmV3IF8oUCwxNikpLnJlZHx8KFA9UC50b1JlZCh0aGlzLnJl''@;'; put 'put ''ZCkpO3ZhciBZPVAucmVkU3FyKCkucmVkTXVsKFApLnJlZElBZGQoUC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLEI9WS5yZWRTcXJ0KCk7aWYoMCE9PUIucmVkU3FyKCkucmVkU3ViKFkpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3Zh''@;'; put 'put ''ciBXPUIuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihCPUIucmVkTmVnKCkpLHRoaXMucG9pbnQoUCxCKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUCl7aWYoUC5pbmYpcmV0dXJuITA7dmFyIEw9UC54LFk9UC55LEI9dGhpcy5hLnJlZE11bChMKSxX''@;'; put 'put ''PUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoQikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09WS5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LEYucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihQLEwsWSl7Zm9yKHZhciBCPXRoaXMuX2VuZG9XbmFmVDEsVz10''@;'; put 'put ''aGlzLl9lbmRvV25hZlQyLFo9MDtaPFAubGVuZ3RoO1orKyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KExbWl0pLFE9UFtaXSxYPVEuX2dldEJldGEoKTtxLmsxLm5lZ2F0aXZlJiYocS5rMS5pbmVnKCksUT1RLm5lZyghMCkpLHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxYPVgubmVnKCEw''@;'; put 'put ''KSksQlsyKlpdPVEsQlsyKlorMV09WCxXWzIqWl09cS5rMSxXWzIqWisxXT1xLmsyfWZvcih2YXIgdGU9dGhpcy5fd25hZk11bEFkZCgxLEIsVywyKlosWSkscmU9MDtyZTwyKlo7cmUrKylCW3JlXT1udWxsLFdbcmVdPW51bGw7cmV0dXJuIHRlfSxwKEgsTi5CYXNlUG9pbnQpLEYucHJvdG90''@;'; put 'put ''eXBlLnBvaW50PWZ1bmN0aW9uKFAsTCxZKXtyZXR1cm4gbmV3IEgodGhpcyxQLEwsWSl9LEYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oUCxMKXtyZXR1cm4gSC5mcm9tSlNPTih0aGlzLFAsTCl9LEgucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2''@;'; put 'put ''ZS5lbmRvKXt2YXIgUD10aGlzLnByZWNvbXB1dGVkO2lmKFAmJlAuYmV0YSlyZXR1cm4gUC5iZXRhO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihQKXt2YXIgWT10aGlzLmN1cnZlLEI9ZnVuY3Rpb24oVyl7cmV0''@;'; put 'put ''dXJuIFkucG9pbnQoVy54LnJlZE11bChZLmVuZG8uYmV0YSksVy55KX07UC5iZXRhPUwsTC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpQLm5hZiYme3duZDpQLm5hZi53bmQscG9pbnRzOlAubmFmLnBvaW50cy5tYXAoQil9LGRvdWJsZXM6UC5kb3VibGVzJiZ7c3RlcDpQLmRvdWJsZXMu''@;'; put 'put ''c3RlcCxwb2ludHM6UC5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4gTH19LEgucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91''@;'; put 'put ''YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29t''@;'; put 'put ''cHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEguZnJvbUpTT049ZnVuY3Rpb24oUCxMLFkpeyJzdHJpbmciPT10eXBlb2YgTCYmKEw9SlNPTi5wYXJzZShMKSk7dmFyIEI9UC5wb2ludChMWzBdLExbMV0sWSk7aWYoIUxbMl0pcmV0dXJuIEI7ZnVuY3Rpb24g''@;'; put 'put ''VyhxKXtyZXR1cm4gUC5wb2ludChxWzBdLHFbMV0sWSl9dmFyIFo9TFsyXTtyZXR1cm4gQi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6Wi5kb3VibGVzJiZ7c3RlcDpaLmRvdWJsZXMuc3RlcCxwb2ludHM6W0JdLmNvbmNhdChaLmRvdWJsZXMucG9pbnRzLm1hcChXKSl9LG5hZjpa''@;'; put 'put ''Lm5hZiYme3duZDpaLm5hZi53bmQscG9pbnRzOltCXS5jb25jYXQoWi5uYWYucG9pbnRzLm1hcChXKSl9fSxCfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54''@;'; put 'put ''LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEgucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihQKXtpZih0aGlzLmluZilyZXR1''@;'; put 'put ''cm4gUDtpZihQLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKFApKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoUCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChQLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGws''@;'; put 'put ''bnVsbCk7dmFyIEw9dGhpcy55LnJlZFN1YihQLnkpOzAhPT1MLmNtcG4oMCkmJihMPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoUC54KS5yZWRJbnZtKCkpKTt2YXIgWT1MLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKFAueCksQj1MLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5y''@;'; put 'put ''ZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxCKX0sSC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFA9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1QLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQo''@;'; put 'put ''bnVsbCxudWxsKTt2YXIgTD10aGlzLmN1cnZlLmEsWT10aGlzLngucmVkU3FyKCksQj1QLnJlZEludm0oKSxXPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChMKS5yZWRNdWwoQiksWj1XLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxxPVcucmVkTXVsKHRo''@;'; put 'put ''aXMueC5yZWRTdWIoWikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChaLHEpfSxILnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEgucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQo''@;'; put 'put ''KX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFApe3JldHVybiBQPW5ldyBfKFAsMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhQKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFApOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11''@;'; put 'put ''bEFkZChbdGhpc10sW1BdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsUCl9LEgucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihQLEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEIsVyk6dGhpcy5j''@;'; put 'put ''dXJ2ZS5fd25hZk11bEFkZCgxLEIsVywyKX0sSC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihQLEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEIsVywhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFk''@;'; put 'put ''ZCgxLEIsVywyLCEwKX0sSC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXM9PT1QfHx0aGlzLmluZj09PVAuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFAueCkmJjA9PT10aGlzLnkuY21wKFAueSkpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oUCl7aWYodGhp''@;'; put 'put ''cy5pbmYpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihQJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgWT10aGlzLnByZWNvbXB1dGVkLEI9ZnVuY3Rpb24oVyl7cmV0dXJuIFcubmVnKCl9O0wucHJlY29tcHV0ZWQ9e25hZjpZLm5h''@;'; put 'put ''ZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAoQil9LGRvdWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6WS5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4gTH0sSC5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0scChSLE4uQmFzZVBvaW50KSxGLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oUCxMLFkpe3JldHVybiBuZXcgUih0aGlzLFAsTCxZ''@;'; put 'put ''KX0sUi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgUD10aGlzLnoucmVkSW52bSgpLEw9UC5yZWRTcXIoKSxZPXRoaXMueC5yZWRNdWwoTCksQj10aGlzLnkucmVkTXVsKEwpLnJlZE11''@;'; put 'put ''bChQKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLEIpfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUCl7aWYodGhpcy5pc0luZmluaXR5''@;'; put 'put ''KCkpcmV0dXJuIFA7aWYoUC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9UC56LnJlZFNxcigpLFk9dGhpcy56LnJlZFNxcigpLEI9dGhpcy54LnJlZE11bChMKSxXPVAueC5yZWRNdWwoWSksWj10aGlzLnkucmVkTXVsKEwucmVkTXVsKFAueikpLHE9UC55LnJlZE11bChZLnJlZE11''@;'; put 'put ''bCh0aGlzLnopKSxRPUIucmVkU3ViKFcpLFg9Wi5yZWRTdWIocSk7aWYoMD09PVEuY21wbigwKSlyZXR1cm4gMCE9PVguY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdGU9US5yZWRTcXIoKSxyZT10ZS5yZWRNdWwoUSksb2U9Qi5yZWRN''@;'; put 'put ''dWwodGUpLGdlPVgucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihvZSkucmVkSVN1YihvZSksX2U9WC5yZWRNdWwob2UucmVkSVN1YihnZSkpLnJlZElTdWIoWi5yZWRNdWwocmUpKSxUZT10aGlzLnoucmVkTXVsKFAueikucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChn''@;'; put 'put ''ZSxfZSxUZSl9LFIucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKFApe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBQLnRvSigpO2lmKFAuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxZPXRoaXMueCxCPVAueC5yZWRNdWwoTCksVz10aGlzLnks''@;'; put 'put ''Wj1QLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLHE9WS5yZWRTdWIoQiksUT1XLnJlZFN1YihaKTtpZigwPT09cS5jbXBuKDApKXJldHVybiAwIT09US5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBYPXEucmVkU3FyKCksdGU9WC5y''@;'; put 'put ''ZWRNdWwocSkscmU9WS5yZWRNdWwoWCksb2U9US5yZWRTcXIoKS5yZWRJQWRkKHRlKS5yZWRJU3ViKHJlKS5yZWRJU3ViKHJlKSxnZT1RLnJlZE11bChyZS5yZWRJU3ViKG9lKSkucmVkSVN1YihXLnJlZE11bCh0ZSkpLF9lPXRoaXMuei5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBv''@;'; put 'put ''aW50KG9lLGdlLF9lKX0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihQKXtpZigwPT09UClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighUClyZXR1cm4gdGhpcy5kYmwoKTt2YXIgTDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVl''@;'; put 'put ''QSl7dmFyIFk9dGhpcztmb3IoTD0wO0w8UDtMKyspWT1ZLmRibCgpO3JldHVybiBZfXZhciBCPXRoaXMuY3VydmUuYSxXPXRoaXMuY3VydmUudGludixaPXRoaXMueCxxPXRoaXMueSxRPXRoaXMueixYPVEucmVkU3FyKCkucmVkU3FyKCksdGU9cS5yZWRBZGQocSk7Zm9yKEw9MDtMPFA7TCsr''@;'; put 'put ''KXt2YXIgcmU9Wi5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxnZT1vZS5yZWRTcXIoKSxfZT1yZS5yZWRBZGQocmUpLnJlZElBZGQocmUpLnJlZElBZGQoQi5yZWRNdWwoWCkpLFRlPVoucmVkTXVsKG9lKSxTZT1fZS5yZWRTcXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLHplPVRlLnJlZElT''@;'; put 'put ''dWIoU2UpLHo9X2UucmVkTXVsKHplKTt6PXoucmVkSUFkZCh6KS5yZWRJU3ViKGdlKTt2YXIgZz10ZS5yZWRNdWwoUSk7TCsxPFAmJihYPVgucmVkTXVsKGdlKSksWj1TZSxRPWcsdGU9en1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWix0ZS5yZWRNdWwoVyksUSl9LFIucHJvdG90eXBlLmRi''@;'; put 'put ''bD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LFIucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFAsTCxZ''@;'; put 'put ''O2lmKHRoaXMuek9uZSl7dmFyIEI9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFo9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFopO3E9cS5yZWRJQWRkKHEpO3ZhciBRPUIucmVkQWRkKEIpLnJlZElBZGQoQiksWD1R''@;'; put 'put ''LnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKSx0ZT1aLnJlZElBZGQoWik7dGU9KHRlPXRlLnJlZElBZGQodGUpKS5yZWRJQWRkKHRlKSxQPVgsTD1RLnJlZE11bChxLnJlZElTdWIoWCkpLnJlZElTdWIodGUpLFk9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHJlPXRoaXMu''@;'; put 'put ''eC5yZWRTcXIoKSxvZT10aGlzLnkucmVkU3FyKCksZ2U9b2UucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChvZSkucmVkU3FyKCkucmVkSVN1YihyZSkucmVkSVN1YihnZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPXJlLnJlZEFkZChyZSkucmVkSUFkZChyZSksU2U9VGUucmVkU3FyKCks''@;'; put 'put ''emU9Z2UucmVkSUFkZChnZSk7emU9KHplPXplLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxQPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoUCkpLnJlZElTdWIoemUpLFk9KFk9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKFkpfXJldHVy''@;'; put 'put ''biB0aGlzLmN1cnZlLmpwb2ludChQLEwsWSl9LFIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBQLEwsWTtpZih0aGlzLnpPbmUpe3ZhciBCPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxaPVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigp''@;'; put 'put ''LnJlZElTdWIoQikucmVkSVN1YihaKTtxPXEucmVkSUFkZChxKTt2YXIgUT1CLnJlZEFkZChCKS5yZWRJQWRkKEIpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxYPVEucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO1A9WDt2YXIgdGU9Wi5yZWRJQWRkKFopO3RlPSh0ZT10ZS5yZWRJQWRk''@;'; put 'put ''KHRlKSkucmVkSUFkZCh0ZSksTD1RLnJlZE11bChxLnJlZElTdWIoWCkpLnJlZElTdWIodGUpLFk9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHJlPXRoaXMuei5yZWRTcXIoKSxvZT10aGlzLnkucmVkU3FyKCksZ2U9dGhpcy54LnJlZE11bChvZSksX2U9dGhpcy54LnJlZFN1Yihy''@;'; put 'put ''ZSkucmVkTXVsKHRoaXMueC5yZWRBZGQocmUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1nZS5yZWRJQWRkKGdlKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7UD1fZS5yZWRTcXIoKS5yZWRJU3ViKFNlKSxZPXRoaXMueS5yZWRBZGQodGhpcy56KS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKG9lKS5yZWRJU3ViKHJlKTt2YXIgemU9b2UucmVkU3FyKCk7emU9KHplPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIoUCkpLnJlZElTdWIoemUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2lu''@;'; put 'put ''dChQLEwsWSl9LFIucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmN1cnZlLmEsTD10aGlzLngsWT10aGlzLnksQj10aGlzLnosVz1CLnJlZFNxcigpLnJlZFNxcigpLFo9TC5yZWRTcXIoKSxxPVkucmVkU3FyKCksUT1aLnJlZEFkZChaKS5yZWRJQWRkKFopLnJlZElBZGQo''@;'; put 'put ''UC5yZWRNdWwoVykpLFg9TC5yZWRBZGQoTCksdGU9KFg9WC5yZWRJQWRkKFgpKS5yZWRNdWwocSkscmU9US5yZWRTcXIoKS5yZWRJU3ViKHRlLnJlZEFkZCh0ZSkpLG9lPXRlLnJlZElTdWIocmUpLGdlPXEucmVkU3FyKCk7Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkp''@;'; put 'put ''LnJlZElBZGQoZ2UpO3ZhciBfZT1RLnJlZE11bChvZSkucmVkSVN1YihnZSksVGU9WS5yZWRBZGQoWSkucmVkTXVsKEIpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChyZSxfZSxUZSl9LFIucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhp''@;'; put 'put ''cy5kYmwoKS5hZGQodGhpcyk7dmFyIFA9dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLFk9dGhpcy56LnJlZFNxcigpLEI9TC5yZWRTcXIoKSxXPVAucmVkQWRkKFApLnJlZElBZGQoUCksWj1XLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKFAp''@;'; put 'put ''LnJlZElTdWIoQiksUT0ocT0ocT0ocT1xLnJlZElBZGQocSkpLnJlZEFkZChxKS5yZWRJQWRkKHEpKS5yZWRJU3ViKFopKS5yZWRTcXIoKSxYPUIucmVkSUFkZChCKTtYPShYPShYPVgucmVkSUFkZChYKSkucmVkSUFkZChYKSkucmVkSUFkZChYKTt2YXIgdGU9Vy5yZWRJQWRkKHEpLnJlZFNx''@;'; put 'put ''cigpLnJlZElTdWIoWikucmVkSVN1YihRKS5yZWRJU3ViKFgpLHJlPUwucmVkTXVsKHRlKTtyZT0ocmU9cmUucmVkSUFkZChyZSkpLnJlZElBZGQocmUpO3ZhciBvZT10aGlzLngucmVkTXVsKFEpLnJlZElTdWIocmUpO29lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSk7dmFyIGdl''@;'; put 'put ''PXRoaXMueS5yZWRNdWwodGUucmVkTXVsKFgucmVkSVN1Yih0ZSkpLnJlZElTdWIocS5yZWRNdWwoUSkpKTtnZT0oZ2U9KGdlPWdlLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSk7dmFyIF9lPXRoaXMuei5yZWRBZGQocSkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3Vi''@;'; put 'put ''KFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChvZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihQLEwpe3JldHVybiBQPW5ldyBfKFAsTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLFApfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihQKXtpZigiYWZmaW5lIj09PVAudHlw''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5lcShQLnRvSigpKTtpZih0aGlzPT09UClyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksWT1QLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoWSkucmVkSVN1YihQLngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBCPUwucmVkTXVsKHRo''@;'; put 'put ''aXMueiksVz1ZLnJlZE11bChQLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKFAueS5yZWRNdWwoQikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihQKXt2YXIgTD10aGlzLnoucmVkU3FyKCksWT1QLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRN''@;'; put 'put ''dWwoTCk7aWYoMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITA7Zm9yKHZhciBCPVAuY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoQi5pYWRkKHRoaXMuY3VydmUubiksQi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVyksMD09PXRo''@;'; put 'put ''aXMueC5jbXAoWSkpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygx''@;'; put 'put ''NiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBSLEQ9SixfPWIoMzcxNSkscD1iKDgyNTQpLHc9Yig5''@;'; put 'put ''NTMpLmFzc2VydDtmdW5jdGlvbiBGKGope3RoaXMuY3VydmU9InNob3J0Ij09PWoudHlwZT9uZXcgcC5zaG9ydChqKToiZWR3YXJkcyI9PT1qLnR5cGU/bmV3IHAuZWR3YXJkcyhqKTpuZXcgcC5tb250KGopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhh''@;'; put 'put ''c2g9ai5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gSChqLFApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShELGose2NvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBGKFApO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoRCxqLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1ELlByZXNldEN1cnZlPUYsSCgicDE5MiIse3R5cGU6InNob3J0Iixw''@;'; put 'put ''cmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0''@;'; put 'put ''OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5''@;'; put 'put ''MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksSCgicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIg''@;'; put 'put ''ZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0''@;'; put 'put ''NGQ1ODE5OSA4NTAwN2UzNCJdfSksSCgicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAw''@;'; put 'put ''MDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFk''@;'; put 'put ''IGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYg''@;'; put 'put ''MmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEgoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUz''@;'; put 'put ''ZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0''@;'; put 'put ''OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2''@;'; put 'put ''MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxIKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFh''@;'; put 'put ''MCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2Qg''@;'; put 'put ''OWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAy''@;'; put 'put ''YzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksSCgiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6''@;'; put 'put ''IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8u''@;'; put 'put ''c2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEgoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUy''@;'; put 'put ''YjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZk''@;'; put 'put ''M2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e1I9YigxMDM3KX1jYXRjaHtSPXZvaWQgMH1IKCJzZWNw''@;'; put 'put ''MjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFl''@;'; put 'put ''ZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVh''@;'; put 'put ''MTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZk''@;'; put 'put ''MjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4''@;'; put 'put ''ZmZiMTBkNGI4IixSXX0pfSw3OTU0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc4NSksXz1iKDIxNTYpLHA9Yig5NTMpLE49Yig1NDI3KSx3PWIoOTkzMSksRj1wLmFzc2VydCxIPWIoMTI1MSksUj1iKDYxMSk7ZnVuY3Rpb24gaihQKXtpZighKHRoaXMgaW5zdGFuY2VvZiBq''@;'; put 'put ''KSlyZXR1cm4gbmV3IGooUCk7InN0cmluZyI9PXR5cGVvZiBQJiYoRihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTixQKSwiVW5rbm93biBjdXJ2ZSAiK1ApLFA9TltQXSksUCBpbnN0YW5jZW9mIE4uUHJlc2V0Q3VydmUmJihQPXtjdXJ2ZTpQfSksdGhpcy5jdXJ2ZT1Q''@;'; put 'put ''LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9UC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFAuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9UC5oYXNofHxQLmN1cnZlLmhh''@;'; put 'put ''c2h9Y2UuZXhwb3J0cz1qLGoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBIKHRoaXMsTCl9LGoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEwsWSl7cmV0dXJuIEguZnJvbVByaXZhdGUodGhpcyxMLFkpfSxqLnByb3RvdHlwZS5rZXlGcm9tUHVi''@;'; put 'put ''bGljPWZ1bmN0aW9uKEwsWSl7cmV0dXJuIEguZnJvbVB1YmxpYyh0aGlzLEwsWSl9LGoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTCl7THx8KEw9e30pO2Zvcih2YXIgWT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpMLnBlcnNFbmN8fCJ1dGY4Iixl''@;'; put 'put ''bnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwuZW50cm9weSYmTC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLEI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIobmV3IEQoMikpOzspe3ZhciBa''@;'; put 'put ''PW5ldyBEKFkuZ2VuZXJhdGUoQikpO2lmKCEoWi5jbXAoVyk+MCkpcmV0dXJuIFouaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShaKX19LGoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihMLFksQil7dmFyIFc7aWYoRC5pc0JOKEwpfHwibnVtYmVyIj09dHlwZW9mIEwpVz0o''@;'; put 'put ''TD1uZXcgRChMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9TC5sZW5ndGgsTD1uZXcgRChMLDE2KTtlbHNle3ZhciBaPUwudG9TdHJpbmcoKTtXPVoubGVuZ3RoKzE+Pj4xLEw9bmV3IEQoWiwxNil9Im51bWJlciIhPXR5cGVvZiBCJiYoQj04KlcpO3Zh''@;'; put 'put ''ciBxPUItdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihMPUwudXNocm4ocSkpLCFZJiZMLmNtcCh0aGlzLm4pPj0wP0wuc3ViKHRoaXMubik6TH0sai5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihMLFksQixXKXtpZigib2JqZWN0Ij09dHlwZW9mIEImJihXPUIsQj1udWxsKSxXfHwo''@;'; put 'put ''Vz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFELmlzQk4oTCkpe0YoIm9iamVjdCI9PXR5cGVvZiBMJiZMJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3Ig''@;'; put 'put ''YSBCTiBpbnN0YW5jZSIpLEYoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWj0wO1o8TC5sZW5ndGg7WisrKUYoKDI1NSZMW1pdKT09PUxbWl0pfVk9dGhpcy5rZXlGcm9tUHJpdmF0ZShZLEIpLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1zZ0JpdExlbmd0aCksRighTC5p''@;'; put 'put ''c05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxRPVkuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixxKSxYPUwudG9BcnJheSgiYmUiLHEpO0YobmV3IEQoWCkuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9y''@;'; put 'put ''KHZhciB0ZT1uZXcgXyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpRLG5vbmNlOlgscGVyczpXLnBlcnMscGVyc0VuYzpXLnBlcnNFbmN8fCJ1dGY4In0pLHJlPXRoaXMubi5zdWIobmV3IEQoMSkpLG9lPTA7O29lKyspe3ZhciBnZT1XLms/Vy5rKG9lKTpuZXcgRCh0ZS5nZW5lcmF0ZSh0aGlz''@;'; put 'put ''Lm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoZ2U9dGhpcy5fdHJ1bmNhdGVUb04oZ2UsITApKS5jbXBuKDEpPD0wfHxnZS5jbXAocmUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwoZ2UpO2lmKCFfZS5pc0luZmluaXR5KCkpe3ZhciBUZT1fZS5nZXRYKCksU2U9VGUudW1vZCh0aGlzLm4pO2lmKDAh''@;'; put 'put ''PT1TZS5jbXBuKDApKXt2YXIgemU9Z2UuaW52bSh0aGlzLm4pLm11bChTZS5tdWwoWS5nZXRQcml2YXRlKCkpLmlhZGQoTCkpO2lmKDAhPT0oemU9emUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgej0oX2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChTZSk/MjowKTtyZXR1''@;'; put 'put ''cm4gVy5jYW5vbmljYWwmJnplLmNtcCh0aGlzLm5oKT4wJiYoemU9dGhpcy5uLnN1Yih6ZSksel49MSksbmV3IFIoe3I6U2Usczp6ZSxyZWNvdmVyeVBhcmFtOnp9KX19fX19fSxqLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTCxZLEIsVyxaKXtafHwoWj17fSksTD10aGlzLl90cnVuY2F0''@;'; put 'put ''ZVRvTihMLCExLFoubXNnQml0TGVuZ3RoKSxCPXRoaXMua2V5RnJvbVB1YmxpYyhCLFcpO3ZhciBxPShZPW5ldyBSKFksImhleCIpKS5yLFE9WS5zO2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4pPj0wfHxRLmNtcG4oMSk8MHx8US5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgb2Us''@;'; put 'put ''WD1RLmludm0odGhpcy5uKSx0ZT1YLm11bChMKS51bW9kKHRoaXMubikscmU9WC5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShvZT10aGlzLmcuam11bEFkZCh0ZSxCLmdldFB1YmxpYygpLHJlKSkuaXNJbmZpbml0eSgpJiZvZS5lcVhUb1Ao''@;'; put 'put ''cSk6IShvZT10aGlzLmcubXVsQWRkKHRlLEIuZ2V0UHVibGljKCkscmUpKS5pc0luZmluaXR5KCkmJjA9PT1vZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChxKX0sai5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihQLEwsWSxCKXtGKCgzJlkpPT09WSwiVGhlIHJlY292ZXJ5IHBh''@;'; put 'put ''cmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IFIoTCxCKTt2YXIgVz10aGlzLm4sWj1uZXcgRChQKSxxPUwucixRPUwucyxYPTEmWSx0ZT1ZPj4xO2lmKHEuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZ0ZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0''@;'; put 'put ''byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3E9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHRlP3EuYWRkKHRoaXMuY3VydmUubik6cSxYKTt2YXIgcmU9TC5yLmludm0oVyksb2U9Vy5zdWIoWikubXVsKHJlKS51bW9kKFcpLGdlPVEubXVsKHJlKS51bW9kKFcpO3JldHVybiB0aGlzLmcu''@;'; put 'put ''bXVsQWRkKG9lLHEsZ2UpfSxqLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFAsTCxZLEIpe2lmKG51bGwhPT0oTD1uZXcgUihMLEIpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBMLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBXPTA7Vzw0O1crKyl7dmFyIFo7dHJ5e1o9dGhp''@;'; put 'put ''cy5yZWNvdmVyUHViS2V5KFAsTCxXKX1jYXRjaHtjb250aW51ZX1pZihaLmVxKFkpKXJldHVybiBXfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwxMjUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc4NSkscD1iKDk1''@;'; put 'put ''MykuYXNzZXJ0O2Z1bmN0aW9uIE4odyxGKXt0aGlzLmVjPXcsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxGLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoRi5wcml2LEYucHJpdkVuYyksRi5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhGLnB1YixGLnB1YkVuYyl9Y2UuZXhwb3J0cz1O''@;'; put 'put ''LE4uZnJvbVB1YmxpYz1mdW5jdGlvbihGLEgsUil7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3IE4oRix7cHViOkgscHViRW5jOlJ9KX0sTi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihGLEgsUil7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3IE4oRix7cHJpdjpILHByaXZFbmM6Un0pfSxO''@;'; put 'put ''LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBGPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIEYuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpGLnZhbGlkYXRlKCk/Ri5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/''@;'; put 'put ''e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxOLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRixIKXtyZXR1cm4ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIEYmJihIPUYsRj1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksSD90aGlzLnB1Yi5lbmNvZGUoSCxGKTp0aGlzLnB1Yn0sTi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihGKXtyZXR1cm4iaGV4Ij09PUY/dGhpcy5wcml2LnRv''@;'; put 'put ''U3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sTi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oRixIKXt0aGlzLnByaXY9bmV3IEQoRixIfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LE4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rp''@;'; put 'put ''b24oRixIKXtpZihGLnh8fEYueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/cChGLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJnAoRi54JiZGLnksIk5lZWQgYm90''@;'; put 'put ''aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoRi54LEYueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoRixIKX0sTi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKEYpe3JldHVybiBGLnZhbGlkYXRlKCl8fHAoRi52''@;'; put 'put ''YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLEYubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxOLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5lYy5zaWduKEYsdGhpcyxILFIpfSxOLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixILFIp''@;'; put 'put ''e3JldHVybiB0aGlzLmVjLnZlcmlmeShGLEgsdGhpcyx2b2lkIDAsUil9LE4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNw''@;'; put 'put ''ZWN0KCkpKyIgPiJ9fSw2MTE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNzg1KSxfPWIoOTUzKSxwPV8uYXNzZXJ0O2Z1bmN0aW9uIE4oaixQKXtpZihqIGluc3RhbmNlb2YgTilyZXR1cm4gajt0aGlzLl9pbXBvcnRERVIoaixQKXx8KHAoai5yJiZqLnMsIlNpZ25hdHVyZSB3''@;'; put 'put ''aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgRChqLnIsMTYpLHRoaXMucz1uZXcgRChqLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1qLnJlY292ZXJ5UGFyYW0/bnVsbDpqLnJlY292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gRihqLFAp''@;'; put 'put ''e3ZhciBMPWpbUC5wbGFjZSsrXTtpZighKDEyOCZMKSlyZXR1cm4gTDt2YXIgWT0xNSZMO2lmKDA9PT1ZfHxZPjR8fDA9PT1qW1AucGxhY2VdKXJldHVybiExO2Zvcih2YXIgQj0wLFc9MCxaPVAucGxhY2U7VzxZO1crKyxaKyspQjw8PTgsQnw9altaXSxCPj4+PTA7cmV0dXJuIShCPD0xMjcp''@;'; put 'put ''JiYoUC5wbGFjZT1aLEIpfWZ1bmN0aW9uIEgoail7Zm9yKHZhciBQPTAsTD1qLmxlbmd0aC0xOyFqW1BdJiYhKDEyOCZqW1ArMV0pJiZQPEw7KVArKztyZXR1cm4gMD09PVA/ajpqLnNsaWNlKFApfWZ1bmN0aW9uIFIoaixQKXtpZihQPDEyOClqLnB1c2goUCk7ZWxzZXt2YXIgTD0xKyhNYXRo''@;'; put 'put ''LmxvZyhQKS9NYXRoLkxOMj4+PjMpO2ZvcihqLnB1c2goMTI4fEwpOy0tTDspai5wdXNoKFA+Pj4oTDw8MykmMjU1KTtqLnB1c2goUCl9fWNlLmV4cG9ydHM9TixOLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKFAsTCl7UD1fLnRvQXJyYXkoUCxMKTt2YXIgWT1uZXcgdztpZig0OCE9''@;'; put 'put ''PVBbWS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgQj1GKFAsWSk7aWYoITE9PT1CfHxCK1kucGxhY2UhPT1QLmxlbmd0aHx8MiE9PVBbWS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVz1GKFAsWSk7aWYoITE9PT1XfHwxMjgmUFtZLnBsYWNlXSlyZXR1cm4hMTt2YXIgWj1QLnNsaWNlKFkucGxhY2Us''@;'; put 'put ''VytZLnBsYWNlKTtpZihZLnBsYWNlKz1XLDIhPT1QW1kucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9RihQLFkpO2lmKCExPT09cXx8UC5sZW5ndGghPT1xK1kucGxhY2V8fDEyOCZQW1kucGxhY2VdKXJldHVybiExO3ZhciBRPVAuc2xpY2UoWS5wbGFjZSxxK1kucGxhY2UpO2lmKDA9PT1aWzBd''@;'; put 'put ''KXtpZighKDEyOCZaWzFdKSlyZXR1cm4hMTtaPVouc2xpY2UoMSl9aWYoMD09PVFbMF0pe2lmKCEoMTI4JlFbMV0pKXJldHVybiExO1E9US5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBEKFopLHRoaXMucz1uZXcgRChRKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sTi5wcm90b3R5''@;'; put 'put ''cGUudG9ERVI9ZnVuY3Rpb24oUCl7dmFyIEw9dGhpcy5yLnRvQXJyYXkoKSxZPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZMWzBdJiYoTD1bMF0uY29uY2F0KEwpKSwxMjgmWVswXSYmKFk9WzBdLmNvbmNhdChZKSksTD1IKEwpLFk9SChZKTshKFlbMF18fDEyOCZZWzFdKTspWT1ZLnNsaWNl''@;'; put 'put ''KDEpO3ZhciBCPVsyXTtSKEIsTC5sZW5ndGgpLChCPUIuY29uY2F0KEwpKS5wdXNoKDIpLFIoQixZLmxlbmd0aCk7dmFyIFc9Qi5jb25jYXQoWSksWj1bNDhdO3JldHVybiBSKFosVy5sZW5ndGgpLFo9Wi5jb25jYXQoVyksXy5lbmNvZGUoWixQKX19LDU5ODA6KGNlLEosYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEQ9YigzNzE1KSxfPWIoNTQyNykscD1iKDk1MyksTj1wLmFzc2VydCx3PXAucGFyc2VCeXRlcyxGPWIoOTA4NyksSD1iKDM2MjIpO2Z1bmN0aW9uIFIoail7aWYoTigiZWQyNTUxOSI9PT1qLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3Rh''@;'; put 'put ''bmNlb2YgUikpcmV0dXJuIG5ldyBSKGopO3RoaXMuY3VydmU9aj1fW2pdLmN1cnZlLHRoaXMuZz1qLmcsdGhpcy5nLnByZWNvbXB1dGUoai5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1qLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwo''@;'; put 'put ''ai5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1ELnNoYTUxMn1jZS5leHBvcnRzPVIsUi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihQLEwpe1A9dyhQKTt2YXIgWT10aGlzLmtleUZyb21TZWNyZXQoTCksQj10aGlzLmhhc2hJbnQoWS5tZXNzYWdlUHJlZml4KCksUCksVz10aGlzLmcubXVs''@;'; put 'put ''KEIpLFo9dGhpcy5lbmNvZGVQb2ludChXKSxxPXRoaXMuaGFzaEludChaLFkucHViQnl0ZXMoKSxQKS5tdWwoWS5wcml2KCkpLFE9Qi5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOlEsUmVuY29kZWQ6Wn0pfSxSLnByb3RvdHlwZS52''@;'; put 'put ''ZXJpZnk9ZnVuY3Rpb24oUCxMLFkpe2lmKFA9dyhQKSwoTD10aGlzLm1ha2VTaWduYXR1cmUoTCkpLlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1cm4hMTt2YXIgQj10aGlzLmtleUZyb21QdWJsaWMoWSksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgpLEIu''@;'; put 'put ''cHViQnl0ZXMoKSxQKSxaPXRoaXMuZy5tdWwoTC5TKCkpO3JldHVybiBMLlIoKS5hZGQoQi5wdWIoKS5tdWwoVykpLmVxKFopfSxSLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBQPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKVAudXBkYXRlKGFy''@;'; put 'put ''Z3VtZW50c1tMXSk7cmV0dXJuIHAuaW50RnJvbUxFKFAuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sUi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihQKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMsUCl9LFIucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24o''@;'; put 'put ''UCl7cmV0dXJuIEYuZnJvbVNlY3JldCh0aGlzLFApfSxSLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKFApe3JldHVybiBQIGluc3RhbmNlb2YgSD9QOm5ldyBIKHRoaXMsUCl9LFIucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKFApe3ZhciBMPVAuZ2V0WSgpLnRvQXJy''@;'; put 'put ''YXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1QLmdldFgoKS5pc09kZCgpPzEyODowLEx9LFIucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFApe3ZhciBMPShQPXAucGFyc2VCeXRlcyhQKSkubGVuZ3RoLTEsWT1QLnNs''@;'; put 'put ''aWNlKDAsTCkuY29uY2F0KC0xMjkmUFtMXSksQj0hISgxMjgmUFtMXSksVz1wLmludEZyb21MRShZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsQil9LFIucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihQKXtyZXR1cm4gUC50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xl''@;'; put 'put ''bmd0aCl9LFIucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihQKXtyZXR1cm4gcC5pbnRGcm9tTEUoUCl9LFIucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBEPWIoOTUzKSxfPUQuYXNzZXJ0LHA9RC5wYXJzZUJ5dGVzLE49RC5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KEYsSCl7dGhpcy5lZGRzYT1GLHRoaXMuX3NlY3JldD1wKEguc2VjcmV0KSxGLmlzUG9pbnQoSC5wdWIpP3RoaXMuX3B1Yj1ILnB1Yjp0aGlzLl9wdWJCeXRlcz1wKEgucHVi''@;'; put 'put ''KX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhILHtwdWI6Un0pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhILHtzZWNyZXQ6Un0pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxOKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksTih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQo''@;'; put 'put ''dGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksTih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcy5lZGRzYSxSPXRoaXMuaGFzaCgpLGo9SC5lbmNvZGluZ0xlbmd0aC0xLFA9Ui5zbGljZSgwLEguZW5jb2RpbmdMZW5ndGgpO3JldHVybiBQ''@;'; put 'put ''WzBdJj0yNDgsUFtqXSY9MTI3LFBbal18PTY0LFB9KSxOKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSksTih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNy''@;'; put 'put ''ZXQoKSkuZGlnZXN0KCl9KSxOKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2Fu''@;'; put 'put ''IG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEgsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihILFIpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShILFIsdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQs''@;'; put 'put ''IktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxELmVuY29kZSh0aGlzLnNlY3JldCgpLEgpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oSCl7cmV0dXJuIEQuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxIKX0sY2UuZXhwb3J0cz13fSwzNjIyOihjZSxKLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBEPWIoMzc4NSksXz1iKDk1MykscD1fLmFzc2VydCxOPV8uY2FjaGVkUHJvcGVydHksdz1fLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gRihILFIpe3RoaXMuZWRkc2E9SCwib2JqZWN0IiE9dHlwZW9mIFImJihSPXcoUikpLEFycmF5LmlzQXJyYXkoUikmJihwKFIubGVuZ3RoPT09MipILmVu''@;'; put 'put ''Y29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLFI9e1I6Ui5zbGljZSgwLEguZW5jb2RpbmdMZW5ndGgpLFM6Ui5zbGljZShILmVuY29kaW5nTGVuZ3RoKX0pLHAoUi5SJiZSLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEguaXNQb2ludChSLlIpJiYodGhp''@;'; put 'put ''cy5fUj1SLlIpLFIuUyBpbnN0YW5jZW9mIEQmJih0aGlzLl9TPVIuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShSLlIpP1IuUjpSLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5TKT9SLlM6Ui5TZW5jb2RlZH1OKEYsIlMiLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxOKEYsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLE4oRiwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQo''@;'; put 'put ''dGhpcy5SKCkpfSksTihGLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksRi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LEYucHJvdG90''@;'; put 'put ''eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIF8uZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxjZS5leHBvcnRzPUZ9LDEwMzc6Y2U9PntjZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIz''@;'; put 'put ''ZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1''@;'; put 'put ''ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVm''@;'; put 'put ''OTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYy''@;'; put 'put ''MDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1''@;'; put 'put ''ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYx''@;'; put 'put ''MjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJj''@;'; put 'put ''ZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUz''@;'; put 'put ''NWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgw''@;'; put 'put ''OTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZl''@;'; put 'put ''MDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNh''@;'; put 'put ''ZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4''@;'; put 'put ''ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJm''@;'; put 'put ''NWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsi''@;'; put 'put ''ODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEz''@;'; put 'put ''YjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4''@;'; put 'put ''ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4''@;'; put 'put ''ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIy''@;'; put 'put ''NzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdh''@;'; put 'put ''ZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2Ri''@;'; put 'put ''MmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJj''@;'; put 'put ''OTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJi''@;'; put 'put ''YmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3''@;'; put 'put ''ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4''@;'; put 'put ''YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1''@;'; put 'put ''ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBh''@;'; put 'put ''MzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2Zl''@;'; put 'put ''OTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsi''@;'; put 'put ''OGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4''@;'; put 'put ''ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2Rl''@;'; put 'put ''NmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIx''@;'; put 'put ''ZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2''@;'; put 'put ''NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3''@;'; put 'put ''NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4''@;'; put 'put ''YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBh''@;'; put 'put ''NmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAw''@;'; put 'put ''ODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5''@;'; put 'put ''MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2''@;'; put 'put ''MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4Nzgw''@;'; put 'put ''ZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJi''@;'; put 'put ''MDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4''@;'; put 'put ''ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0''@;'; put 'put ''NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2Ix''@;'; put 'put ''MjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2''@;'; put 'put ''N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdm''@;'; put 'put ''M2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNk''@;'; put 'put ''YTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0''@;'; put 'put ''MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJk''@;'; put 'put ''MzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4''@;'; put 'put ''ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBj''@;'; put 'put ''YTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYz''@;'; put 'put ''M2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0''@;'; put 'put ''Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJm''@;'; put 'put ''NzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNi''@;'; put 'put ''MzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMz''@;'; put 'put ''N2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRj''@;'; put 'put ''YTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYw''@;'; put 'put ''YzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgw''@;'; put 'put ''YmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJh''@;'; put 'put ''YjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRl''@;'; put 'put ''ZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2''@;'; put 'put ''ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0Zjkz''@;'; put 'put ''ZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlk''@;'; put 'put ''YzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0''@;'; put 'put ''YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBm''@;'; put 'put ''M2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2''@;'; put 'put ''YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEw''@;'; put 'put ''ODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3''@;'; put 'put ''YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhh''@;'; put 'put ''MTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFh''@;'; put 'put ''MDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2''@;'; put 'put ''YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRh''@;'; put 'put ''N2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThl''@;'; put 'put ''ZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5''@;'; put 'put ''ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMw''@;'; put 'put ''N2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJi''@;'; put 'put ''N2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0''@;'; put 'put ''OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlk''@;'; put 'put ''NjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdh''@;'; put 'put ''Njk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZi''@;'; put 'put ''NDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1''@;'; put 'put ''NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcx''@;'; put 'put ''NDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJj''@;'; put 'put ''Zjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZl''@;'; put 'put ''ZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3''@;'; put 'put ''NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFh''@;'; put 'put ''OTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5''@;'; put 'put ''M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVk''@;'; put 'put ''ZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0''@;'; put 'put ''MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2Uy''@;'; put 'put ''YzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3''@;'; put 'put ''NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFk''@;'; put 'put ''ZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNl''@;'; put 'put ''YmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUy''@;'; put 'put ''MmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVm''@;'; put 'put ''Njk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJk''@;'; put 'put ''YmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0''@;'; put 'put ''NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUw''@;'; put 'put ''MzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFi''@;'; put 'put ''MzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNl''@;'; put 'put ''Njc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2''@;'; put 'put ''MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRk''@;'; put 'put ''Nzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRi''@;'; put 'put ''NCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJm''@;'; put 'put ''NTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJh''@;'; put 'put ''ZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4''@;'; put 'put ''MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJh''@;'; put 'put ''MzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4''@;'; put 'put ''MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3''@;'; put 'put ''ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0''@;'; put 'put ''IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4''@;'; put 'put ''ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIy''@;'; put 'put ''YTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2''@;'; put 'put ''ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkx''@;'; put 'put ''OWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4''@;'; put 'put ''YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgx''@;'; put 'put ''ODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsi''@;'; put 'put ''NTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhk''@;'; put 'put ''YTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2Uw''@;'; put 'put ''MTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFl''@;'; put 'put ''MDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZi''@;'; put 'put ''YjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZi''@;'; put 'put ''YzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAy''@;'; put 'put ''NjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5''@;'; put 'put ''Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1''@;'; put 'put ''NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYw''@;'; put 'put ''NjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0''@;'; put 'put ''ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZj''@;'; put 'put ''ZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBm''@;'; put 'put ''NzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdk''@;'; put 'put ''YjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsi''@;'; put 'put ''NmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFm''@;'; put 'put ''MmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIx''@;'; put 'put ''ZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2''@;'; put 'put ''MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNl''@;'; put 'put ''NTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4''@;'; put 'put ''YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2''@;'; put 'put ''OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwi''@;'; put 'put ''YzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4''@;'; put 'put ''NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3''@;'; put 'put ''YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5''@;'; put 'put ''NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3''@;'; put 'put ''NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5''@;'; put 'put ''ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJi''@;'; put 'put ''ODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2''@;'; put 'put ''NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNi''@;'; put 'put ''MjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNj''@;'; put 'put ''ZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNk''@;'; put 'put ''NDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5''@;'; put 'put ''MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0''@;'; put 'put ''OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVj''@;'; put 'put ''ZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJi''@;'; put 'put ''ZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlh''@;'; put 'put ''ZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBl''@;'; put 'put ''MGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMz''@;'; put 'put ''NzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTcz''@;'; put 'put ''MjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1''@;'; put 'put ''MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2Nj''@;'; put 'put ''NTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19''@;'; put 'put ''fSw5NTM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9SixfPWIoMzc4NSkscD1iKDk3NDYpLE49Yig0NTA0KTtELmFzc2VydD1wLEQudG9BcnJheT1OLnRvQXJyYXksRC56ZXJvMj1OLnplcm8yLEQudG9IZXg9Ti50b0hleCxELmVuY29kZT1OLmVuY29kZSxELmdldE5BRj1mdW5jdGlv''@;'; put 'put ''biB3KFAsTCxZKXt2YXIgVyxCPW5ldyBBcnJheShNYXRoLm1heChQLmJpdExlbmd0aCgpLFkpKzEpO2ZvcihXPTA7VzxCLmxlbmd0aDtXKz0xKUJbV109MDt2YXIgWj0xPDxMKzEscT1QLmNsb25lKCk7Zm9yKFc9MDtXPEIubGVuZ3RoO1crKyl7dmFyIFEsWD1xLmFuZGxuKFotMSk7cS5pc09k''@;'; put 'put ''ZCgpP3EuaXN1Ym4oUT1YPihaPj4xKS0xPyhaPj4xKS1YOlgpOlE9MCxCW1ddPVEscS5pdXNocm4oMSl9cmV0dXJuIEJ9LEQuZ2V0SlNGPWZ1bmN0aW9uIEYoUCxMKXt2YXIgWT1bW10sW11dO1A9UC5jbG9uZSgpLEw9TC5jbG9uZSgpO2Zvcih2YXIgWixCPTAsVz0wO1AuY21wbigtQik+MHx8''@;'; put 'put ''TC5jbXBuKC1XKT4wOyl7dmFyIFgsdGUscT1QLmFuZGxuKDMpK0ImMyxRPUwuYW5kbG4oMykrVyYzOzM9PT1xJiYocT0tMSksMz09PVEmJihRPS0xKSxYPTEmcT8zIT0oWj1QLmFuZGxuKDcpK0ImNykmJjUhPT1afHwyIT09UT9xOi1xOjAsWVswXS5wdXNoKFgpLHRlPTEmUT8zIT0oWj1MLmFu''@;'; put 'put ''ZGxuKDcpK1cmNykmJjUhPT1afHwyIT09cT9ROi1ROjAsWVsxXS5wdXNoKHRlKSwyKkI9PT1YKzEmJihCPTEtQiksMipXPT09dGUrMSYmKFc9MS1XKSxQLml1c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gWX0sRC5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBIKFAsTCxZKXt2YXIgQj0iXyIr''@;'; put 'put ''TDtQLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW0JdP3RoaXNbQl06dGhpc1tCXT1ZLmNhbGwodGhpcyl9fSxELnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihQKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFA/RC50b0FycmF5KFAsImhleCIpOlB9LEQuaW50RnJv''@;'; put 'put ''bUxFPWZ1bmN0aW9uIGooUCl7cmV0dXJuIG5ldyBfKFAsImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlv''@;'; put 'put ''biBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmplY3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9dzpfLkJOPXcsdy5C''@;'; put 'put ''Tj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBIKHosZyl7dmFyIHk9ei5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01''@;'; put 'put ''NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1IKHoseSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFy''@;'; put 'put ''IFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEwOlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09''@;'; put 'put ''PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3Ry''@;'; put 'put ''aW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxn''@;'; put 'put ''LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tD''@;'; put 'put ''LTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08''@;'; put 'put ''PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0''@;'; put 'put ''aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBVLFQ9MCxWPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRz''@;'; put 'put ''W1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0''@;'; put 'put ''aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3Io''@;'; put 'put ''dmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxFO0ErPUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7''@;'; put 'put ''Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1sw''@;'; put 'put ''XSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3''@;'; put 'put ''Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3''@;'; put 'put ''NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8''@;'; put 'put ''MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLFY9QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmVjtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxn''@;'; put 'put ''Lmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9KFY9KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jkc1tsZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJlY7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95Lndv''@;'; put 'put ''cmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhp''@;'; put 'put ''cy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSkseD0wIT09VHx8ViE9PXRoaXMubGVuZ3RoLTE/UFs2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygx''@;'; put 'put ''NikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJv''@;'; put 'put ''KCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''Jih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3Rv''@;'; put 'put ''dHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIEY8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEYsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkp''@;'; put 'put ''e3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3Ro''@;'; put 'put ''IikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihWKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9y''@;'; put 'put ''KDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW1QtbS0xXT1FfXJldHVybiBVfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9C''@;'; put 'put ''aXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4gODE5MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+Pj00KSwzJnl8fCh4Kz0yLHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0''@;'; put 'put ''TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0w''@;'; put 'put ''LHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcp''@;'; put 'put ''LmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhp''@;'; put 'put ''cy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFu''@;'; put 'put ''ZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHks''@;'; put 'put ''eDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRz''@;'; put 'put ''W0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29y''@;'; put 'put ''ZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcs''@;'; put 'put ''eSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMm''@;'; put 'put ''KHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmVjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tWXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8VC5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5''@;'; put 'put ''PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09PVYmJlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1DLndvcmRzW1VdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxV''@;'; put 'put ''KSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9''@;'; put 'put ''MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLFFlPXdlPj4+MTMsb3Q9MHxDWzJdLE1lPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10sQmU9ODE5MSZYZSxBZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9''@;'; put 'put ''MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1fdD4+PjEzLGxuPTB8Q1s3XSx5dD04MTkxJmxuLFN0PWxuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFsw''@;'; put 'put ''XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9''@;'; put 'put ''ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sdW49ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0''@;'; put 'put ''aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShVKyhFPU1hdGguaW11bChuZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQpKStNYXRoLmltdWwobGUsUnQpfDApKTw8MTMpfDA7VT0oKEE9TWF0aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYp''@;'; put 'put ''fDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCk7dmFyIEVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24p''@;'; put 'put ''fDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MDt2YXIgdnI9KFUrKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGhuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQmUsUnQpLG09KG09TWF0aC5pbXVsKEJlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIFduPShVKyhFPUUrTWF0aC5pbXVsKG5lLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChsZSxXdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxBdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChCZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDA7dmFyICRpPShVKyhFPUUrTWF0aC5pbXVsKG5lLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVXQpfDApK01hdGguaW11bChsZSxzdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtVPSgoQT1BK01hdGguaW11bChsZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLFJ0KSxtPShtPU1hdGguaW11bChEZSxQdCkpK01hdGguaW11bChrZSxSdCl8MCxBPU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKEJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxVdCl8MDt2YXIgZWk9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+''@;'; put 'put ''Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KSxFPUUrTWF0aC5pbXVsKERlLFF0KXwwLG09KG09bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxR''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChCZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUseHQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8''@;'; put 'put ''MDtVPSgoQT1BK01hdGguaW11bChsZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChTdCxSdCl8MCxBPU1hdGguaW11bChTdCxQdCksRT1FK01hdGguaW11bChudCxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERlLGhuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChCZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDA7dmFyIFZpPShVKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChsZSxybil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoU3QsUXQpfDAsQT1BK01hdGguaW11bChTdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsV3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChEZSxBdCl8MCkrTWF0aC5pbXVsKGtlLFd0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKEJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoQmUsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MDt2YXIgTmk9KFUrKEU9RStNYXRoLmltdWwobmUsdW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLHVuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUnQpLG09KG09TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLHN0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoRGUsVXQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChC''@;'; put 'put ''ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsdW4pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFFlLHVuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIERhPShVKyhFPUUrTWF0aC5pbXVsKG5lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChsZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFF0KSxtPShtPU1hdGguaW11bChOZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChT''@;'; put 'put ''dCxXdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDAsRT1FK01hdGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoQmUscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChNZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsdW4pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIg''@;'; put 'put ''THI9KFUrKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoTmUsaG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLEE9QStNYXRoLmltdWwoU3QsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxUdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStNYXRoLmltdWwoRGUseHQpfDApK01hdGguaW11bChrZSxodCl8MCxBPUErTWF0aC5pbXVsKGtlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChCZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZuKXwwKStNYXRoLmltdWwoQWUsdW4pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgV2k9KFUrKEU9RStNYXRoLmltdWwoTWUsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV3QpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFdlKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKERlLHJuKXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsdW4pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLHVuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsZm4pfDA7dmFyIHBhPShVKyhFPUUrTWF0aC5pbXVsKEJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQmUsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYp''@;'; put 'put ''fDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHN0KSxtPShtPU1hdGguaW11bChOZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChTdCxodCl8MCxBPUErTWF0aC5pbXVsKFN0LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01hdGguaW11bChEZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoa2UsdW4pfDAsQT1BK01hdGguaW11bChrZSxmbil8MDt2YXIgUW49KFUrKEU9RStNYXRoLmltdWwoUmUsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKE5lLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChudCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoSmUsdW4pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIg''@;'; put 'put ''bGE9KFUrKEU9RStNYXRoLmltdWwoRGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChEZSxlbil8MCkrTWF0aC5pbXVsKGtlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGtlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeXQsdW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKFN0LHVuKXwwLEE9QStNYXRoLmltdWwoU3QsZm4pfDA7dmFyIGJhPShVKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHJuKSxtPShtPU1hdGguaW11bChOZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsdW4pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KFUrKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh5dCxlbil8MCkrTWF0aC5pbXVsKFN0LFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFN0LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsdW4pLG09KG09TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LHVuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KFUrKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+''@;'; put 'put ''Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShVKyhFPU1hdGguaW11bChOZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoTmUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIFU9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2''@;'; put 'put ''KXwwLHRpJj02NzEwODg2MyxWWzBdPXVhLFZbMV09RWksVlsyXT12cixWWzNdPVduLFZbNF09JGksVls1XT1laSxWWzZdPVFyLFZbN109VmksVls4XT1OaSxWWzldPURhLFZbMTBdPUxyLFZbMTFdPVdpLFZbMTJdPXBhLFZbMTNdPVFuLFZbMTRdPWxhLFZbMTVdPWJhLFZbMTZdPUxhLFZbMTdd''@;'; put 'put ''PUZhLFZbMThdPXRpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBRKHosZyx5KXtyZXR1cm4obmV3IFgpLm11bHAoeixnLHkpfWZ1bmN0aW9uIFgoeixnKXt0aGlzLng9eix0aGlzLnk9Z31NYXRoLmltdWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHku''@;'; put 'put ''bGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9''@;'; put 'put ''KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4ODYzJih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LFYmPTY3MTA4ODYzfXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95''@;'; put 'put ''LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5KSx4fSxYLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlz''@;'; put 'put ''LnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LFgucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxYLnByb3RvdHlwZS5wZXJtdXRlPWZ1''@;'; put 'put ''bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxUW1VdPXhbZ1tVXV19LFgucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsVil7dGhpcy5wZXJtdXRlKFYsZyx5LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZh''@;'; put 'put ''ciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1BLHdlPTA7d2U8VTt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sUWU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStVXSxNZT1DW2FlK3dlK1VdLHZl''@;'; put 'put ''PW5lKm90LWxlKk1lO01lPW5lKk1lK2xlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09UWUrTWUseFthZSt3ZStVXT1VZS1vdCxDW2FlK3dlK1VdPVFlLU1lLHdlIT09RSYmKHZlPW0qbmUtQSpsZSxsZT1tKmxlK0EqbmUsbmU9dmUpfX0sWC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9''@;'; put 'put ''ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LFgucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBU''@;'; put 'put ''PWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LFgucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95''@;'; put 'put ''KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LFgucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tW''@;'; put 'put ''XSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4W1ZdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sWC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0s''@;'; put 'put ''WC5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxWPXRoaXMuc3R1YihDKSxVPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJh''@;'; put 'put ''eShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsVSxDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0''@;'; put 'put ''aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dlXT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFu''@;'; put 'put ''c2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFsaXplMTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9''@;'; put 'put ''MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hd''@;'; put 'put ''PXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYx''@;'; put 'put ''PDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3Fy''@;'; put 'put ''KCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3Io''@;'; put 'put ''VD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7''@;'; put 'put ''VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMu''@;'; put 'put ''aXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5U''@;'; put 'put ''PDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9yKHRoaXMubGVuZ3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndv''@;'; put 'put ''cmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9''@;'; put 'put ''YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9''@;'; put 'put ''ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcx''@;'; put 'put ''MDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8''@;'; put 'put ''MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10''@;'; put 'put ''aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4''@;'; put 'put ''NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhp''@;'; put 'put ''cy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtW''@;'; put 'put ''PSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+''@;'; put 'put ''PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNbVF0pK1UpPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4o''@;'; put 'put ''eCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZh''@;'; put 'put ''ciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgr''@;'; put 'put ''bmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsbGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09''@;'; put 'put ''bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcg''@;'; put 'put ''dygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2Rp''@;'; put 'put ''djpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChn''@;'; put 'put ''Lm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09''@;'; put 'put ''PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3Jk''@;'; put 'put ''RGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5p''@;'; put 'put ''c3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1cm4gVjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9''@;'; put 'put ''NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5n''@;'; put 'put ''dGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSks''@;'; put 'put ''RT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjAp''@;'; put 'put ''Zm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHgu''@;'; put 'put ''aXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0pLFUuaXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoViksVC5pc3ViKFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkp''@;'; put 'put ''fXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3Io''@;'; put 'put ''dmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4wKWZvcih5Lml1c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYp''@;'; put 'put ''LEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4Lmlz''@;'; put 'put ''dWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2''@;'; put 'put ''YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4Lmlz''@;'; put 'put ''RXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14LHg9Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlz''@;'; put 'put ''O2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhpcy53b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSly''@;'; put 'put ''ZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9''@;'; put 'put ''LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9''@;'; put 'put ''MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlz''@;'; put 'put ''LnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90''@;'; put 'put ''eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93''@;'; put 'put ''KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gcmUoeixnKXt0aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5u''@;'; put 'put ''PXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIG9lKCl7cmUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe3JlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtyZS5jYWxsKHRoaXMsInAxOTIiLCJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7cmUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5j''@;'; put 'put ''dGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHop''@;'; put 'put ''e1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRo''@;'; put 'put ''aXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXJlLnByb3RvdHlwZS5fdG1w''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxyZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11''@;'; put 'put ''bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJp''@;'; put 'put ''cCgpOnkuX3N0cmlwKCkseX0scmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LE4ob2UscmUpLG9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihn''@;'; put 'put ''LHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHku''@;'; put 'put ''d29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcubGVuZ3RoLT0wPT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sb2UucHJvdG90eXBl''@;'; put 'put ''LmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkv''@;'; put 'put ''NjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxyZSksTihfZSxyZSksTihUZSxyZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0w''@;'; put 'put ''LHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRl''@;'; put 'put ''W2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgb2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVb''@;'; put 'put ''Z109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMp''@;'; put 'put ''fSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92''@;'; put 'put ''ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRo''@;'; put 'put ''aXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlz''@;'; put 'put ''Ll92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0''@;'; put 'put ''PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJu''@;'; put 'put ''KDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3''@;'; put 'put ''IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJQWRkKFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFy''@;'; put 'put ''IHdlPW5lLFVlPTA7MCE9PXdlLmNtcChWKTtVZSsrKXdlPXdlLnJlZFNxcigpO3AoVWU8bGUpO3ZhciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1VZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFlLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxsZT1VZX1yZXR1cm4gYWV9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVy''@;'; put 'put ''bygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0x''@;'; put 'put ''XSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSks''@;'; put 'put ''MCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihWPXRoaXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5''@;'; put 'put ''PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyB6ZShnKX0sTih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNo''@;'; put 'put ''cm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21w''@;'; put 'put ''KHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDQ0Mjk6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEo9T2JqZWN0LmRlZmluZVByb3BlcnR5fHwhMTtpZihKKXRyeXtKKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe0o9ITF9Y2UuZXhwb3J0cz1KfSwzOTgxOmNlPT57InVzZSBzdHJpY3QiO2Nl''@;'; put 'put ''LmV4cG9ydHM9RXZhbEVycm9yfSwxNjQ4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RXJyb3J9LDQ3MjY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1SYW5nZUVycm9yfSw2NzEyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDM0NjQ6Y2U9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDQ1MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVR5cGVFcnJvcn0sMzkxNTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVVSSUVycm9yfSw4ODkyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2Jq''@;'; put 'put ''ZWN0fSw3MTg3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBOLEQ9Yig1MTA4KSxfPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwscD1fJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5hcHBseT9fLmFwcGx5OmZ1bmN0aW9uKF9lLFRlLFNlKXtyZXR1cm4gRnVuY3Rpb24u''@;'; put 'put ''cHJvdG90eXBlLmFwcGx5LmNhbGwoX2UsVGUsU2UpfTtOPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLm93bktleXM/Xy5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkuY29uY2F0KE9i''@;'; put 'put ''amVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX2UpKX06ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSl9O3ZhciBGPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oX2Upe3JldHVybiBfZSE9X2V9O2Z1bmN0aW9uIEgoKXtILmluaXQuY2FsbCh0aGlzKX1j''@;'; put 'put ''ZS5leHBvcnRzPUgsY2UuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHRlKGdlLF9lKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKGcpe2dlLnJlbW92ZUxpc3RlbmVyKF9lLHopLFNlKGcpfWZ1bmN0aW9uIHooKXsiZnVuY3Rpb24iPT10eXBlb2YgZ2UucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXImJmdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsemUpLFRlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9b2UoZ2UsX2Useix7b25jZTohMH0pLCJlcnJvciIhPT1fZSYmZnVuY3Rpb24gcmUoZ2UsX2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBnZS5vbiYmb2UoZ2UsImVy''@;'; put 'put ''cm9yIixfZSxUZSl9KGdlLHplLHtvbmNlOiEwfSl9KX0sSC5FdmVudEVtaXR0ZXI9SCxILnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxILnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxILnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgUj0xMDtmdW5jdGlvbiBqKGdlKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgZ2UpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGdlKX1mdW5jdGlvbiBQKGdlKXtyZXR1cm4gdm9pZCAwPT09Z2UuX21heExpc3RlbmVy''@;'; put 'put ''cz9ILmRlZmF1bHRNYXhMaXN0ZW5lcnM6Z2UuX21heExpc3RlbmVyc31mdW5jdGlvbiBMKGdlLF9lLFRlLFNlKXt2YXIgemUseixnO2lmKGooVGUpLHZvaWQgMD09PSh6PWdlLl9ldmVudHMpPyh6PWdlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxnZS5fZXZlbnRzQ291bnQ9MCk6KHZv''@;'; put 'put ''aWQgMCE9PXoubmV3TGlzdGVuZXImJihnZS5lbWl0KCJuZXdMaXN0ZW5lciIsX2UsVGUubGlzdGVuZXI/VGUubGlzdGVuZXI6VGUpLHo9Z2UuX2V2ZW50cyksZz16W19lXSksdm9pZCAwPT09ZylnPXpbX2VdPVRlLCsrZ2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGc/Zz16W19lXT1TZT9bVGUsZ106W2csVGVdOlNlP2cudW5zaGlmdChUZSk6Zy5wdXNoKFRlKSwoemU9UChnZSkpPjAmJmcubGVuZ3RoPnplJiYhZy53YXJuZWQpe2cud2FybmVkPSEwO3ZhciB5PW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVk''@;'; put 'put ''LiAiK2cubGVuZ3RoKyIgIitTdHJpbmcoX2UpKyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO3kubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIix5LmVtaXR0ZXI9Z2UseS50eXBlPV9lLHkuY291bnQ9''@;'; put 'put ''Zy5sZW5ndGgsZnVuY3Rpb24gdyhnZSl7RCYmRC53YXJuJiZELndhcm4oZ2UpfSh5KX1yZXR1cm4gZ2V9ZnVuY3Rpb24gWSgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gQihnZSxfZSxUZSl7dmFyIFNlPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpnZSx0eXBlOl9lLGxpc3Rl''@;'; put 'put ''bmVyOlRlfSx6ZT1ZLmJpbmQoU2UpO3JldHVybiB6ZS5saXN0ZW5lcj1UZSxTZS53cmFwRm49emUsemV9ZnVuY3Rpb24gVyhnZSxfZSxUZSl7dmFyIFNlPWdlLl9ldmVudHM7aWYodm9pZCAwPT09U2UpcmV0dXJuW107dmFyIHplPVNlW19lXTtyZXR1cm4gdm9pZCAwPT09emU/W106ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHplP1RlP1t6ZS5saXN0ZW5lcnx8emVdOlt6ZV06VGU/ZnVuY3Rpb24gWChnZSl7Zm9yKHZhciBfZT1uZXcgQXJyYXkoZ2UubGVuZ3RoKSxUZT0wO1RlPF9lLmxlbmd0aDsrK1RlKV9lW1RlXT1nZVtUZV0ubGlzdGVuZXJ8fGdlW1RlXTtyZXR1cm4gX2V9KHplKTpxKHpl''@;'; put 'put ''LHplLmxlbmd0aCl9ZnVuY3Rpb24gWihnZSl7dmFyIF9lPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lW2dlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVGUpcmV0dXJuIDE7aWYodm9pZCAwIT09VGUpcmV0dXJuIFRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBxKGdl''@;'; put 'put ''LF9lKXtmb3IodmFyIFRlPW5ldyBBcnJheShfZSksU2U9MDtTZTxfZTsrK1NlKVRlW1NlXT1nZVtTZV07cmV0dXJuIFRlfWZ1bmN0aW9uIG9lKGdlLF9lLFRlLFNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZ2Uub24pU2Uub25jZT9nZS5vbmNlKF9lLFRlKTpnZS5vbihfZSxUZSk7ZWxzZXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT10eXBlb2YgZ2UuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZ2UpO2dlLmFkZEV2ZW50TGlzdGVuZXIoX2Us''@;'; put 'put ''ZnVuY3Rpb24gemUoeil7U2Uub25jZSYmZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihfZSx6ZSksVGUoeil9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEgsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSfSxzZXQ6ZnVuY3Rpb24oZ2Up''@;'; put 'put ''e2lmKCJudW1iZXIiIT10eXBlb2YgZ2V8fGdlPDB8fEYoZ2UpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZ2UrIi4iKTtS''@;'; put 'put ''PWdlfX0pLEguaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21h''@;'; put 'put ''eExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sSC5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtpZigibnVtYmVyIiE9dHlwZW9mIF9lfHxfZTwwfHxGKF9lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2Yg''@;'; put 'put ''cmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK19lKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1fZSx0aGlzfSxILnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gUCh0aGlzKX0sSC5wcm90b3R5cGUuZW1p''@;'; put 'put ''dD1mdW5jdGlvbihfZSl7Zm9yKHZhciBUZT1bXSxTZT0xO1NlPGFyZ3VtZW50cy5sZW5ndGg7U2UrKylUZS5wdXNoKGFyZ3VtZW50c1tTZV0pO3ZhciB6ZT0iZXJyb3IiPT09X2Usej10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09eil6ZT16ZSYmdm9pZCAwPT09ei5lcnJvcjtlbHNlIGlmKCF6''@;'; put 'put ''ZSlyZXR1cm4hMTtpZih6ZSl7dmFyIGc7aWYoVGUubGVuZ3RoPjAmJihnPVRlWzBdKSxnIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgZzt2YXIgeT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhnPyIgKCIrZy5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHkuY29udGV4dD1nLHl9dmFyIHg9''@;'; put 'put ''eltfZV07aWYodm9pZCAwPT09eClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgeClwKHgsdGhpcyxUZSk7ZWxzZXt2YXIgQz14Lmxlbmd0aCxUPXEoeCxDKTtmb3IoU2U9MDtTZTxDOysrU2UpcChUW1NlXSx0aGlzLFRlKX1yZXR1cm4hMH0sSC5wcm90b3R5cGUub249SC5wcm90b3R5''@;'; put 'put ''cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITEpfSxILnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITApfSxILnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4g''@;'; put 'put ''aihUZSksdGhpcy5vbihfZSxCKHRoaXMsX2UsVGUpKSx0aGlzfSxILnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4gaihUZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoX2UsQih0aGlzLF9lLFRlKSksdGhpc30sSC5wcm90b3R5cGUub2ZmPUgucHJv''@;'; put 'put ''dG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXt2YXIgU2UsemUseixnLHk7aWYoaihUZSksdm9pZCAwPT09KHplPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KFNlPXplW19lXSkpcmV0dXJuIHRoaXM7aWYoU2U9PT1UZXx8U2UubGlzdGVuZXI9PT1U''@;'; put 'put ''ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgemVbX2VdLHplLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxTZS5saXN0ZW5lcnx8VGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBTZSl7Zm9yKHo9LTEsZz1TZS5sZW5ndGgtMTtnPj0wO2ctLSlpZihTZVtnXT09PVRlfHxTZVtnXS5saXN0ZW5lcj09PVRlKXt5PVNlW2ddLmxpc3RlbmVyLHo9ZzticmVha31pZih6PDApcmV0dXJuIHRoaXM7MD09PXo/U2Uuc2hpZnQoKTpmdW5jdGlvbiBRKGdlLF9lKXtmb3IoO19lKzE8''@;'; put 'put ''Z2UubGVuZ3RoO19lKyspZ2VbX2VdPWdlW19lKzFdO2dlLnBvcCgpfShTZSx6KSwxPT09U2UubGVuZ3RoJiYoemVbX2VdPVNlWzBdKSx2b2lkIDAhPT16ZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UseXx8VGUpfXJldHVybiB0aGlzfSxILnByb3RvdHlw''@;'; put 'put ''ZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxTZSx6ZTtpZih2b2lkIDA9PT0oU2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1TZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PVNlW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIFNlW19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGcsej1P''@;'; put 'put ''YmplY3Qua2V5cyhTZSk7Zm9yKHplPTA7emU8ei5sZW5ndGg7Kyt6ZSkicmVtb3ZlTGlzdGVuZXIiIT09KGc9elt6ZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhnKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVj''@;'; put 'put ''dC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1TZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUpZm9yKHplPVRlLmxlbmd0aC0xO3plPj0wO3plLS0pdGhpcy5yZW1vdmVMaXN0''@;'; put 'put ''ZW5lcihfZSxUZVt6ZV0pO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITApfSxILnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITEpfSxILmxpc3RlbmVyQ291bnQ9ZnVu''@;'; put 'put ''Y3Rpb24oZ2UsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBnZS5saXN0ZW5lckNvdW50P2dlLmxpc3RlbmVyQ291bnQoX2UpOlouY2FsbChnZSxfZSl9LEgucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WixILnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2V2ZW50c0NvdW50PjA/Tih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooY2UsSixiKT0+e3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89YigyMzE4KTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTix3LEYsSCl7aWYoRC5pc0J1ZmZlcihOKXx8KE49RC5mcm9tKE4sImJpbmFyeSIpKSx3JiYoRC5pc0J1''@;'; put 'put ''ZmZlcih3KXx8KHc9RC5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBSPUYvOCxqPUQuYWxsb2MoUiksUD1ELmFsbG9jKEh8fDApLEw9RC5hbGxvYygw''@;'; put 'put ''KTtSPjB8fEg+MDspe3ZhciBZPW5ldyBfO1kudXBkYXRlKEwpLFkudXBkYXRlKE4pLHcmJlkudXBkYXRlKHcpLEw9WS5kaWdlc3QoKTt2YXIgQj0wO2lmKFI+MCl7dmFyIFc9ai5sZW5ndGgtUjtCPU1hdGgubWluKFIsTC5sZW5ndGgpLEwuY29weShqLFcsMCxCKSxSLT1CfWlmKEI8TC5sZW5n''@;'; put 'put ''dGgmJkg+MCl7dmFyIFo9UC5sZW5ndGgtSCxxPU1hdGgubWluKEgsTC5sZW5ndGgtQik7TC5jb3B5KFAsWixCLEIrcSksSC09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OmosaXY6UH19fSw0MDI5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTMyMCksXz1PYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKGosUCxMKXtpZighRChQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgWTthcmd1bWVudHMubGVuZ3RoPj0zJiYoWT1M''@;'; put 'put ''KSxmdW5jdGlvbiBIKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoUil9KGopP2Z1bmN0aW9uKGosUCxMKXtmb3IodmFyIFk9MCxCPWoubGVuZ3RoO1k8QjtZKyspcC5jYWxsKGosWSkmJihudWxsPT1MP1AoaltZXSxZLGopOlAuY2FsbChMLGpbWV0sWSxqKSl9KGosUCxZKToi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGo/ZnVuY3Rpb24oaixQLEwpe2Zvcih2YXIgWT0wLEI9ai5sZW5ndGg7WTxCO1krKyludWxsPT1MP1Aoai5jaGFyQXQoWSksWSxqKTpQLmNhbGwoTCxqLmNoYXJBdChZKSxZLGopfShqLFAsWSk6ZnVuY3Rpb24oaixQLEwpe2Zvcih2YXIgWSBpbiBqKXAuY2FsbChq''@;'; put 'put ''LFkpJiYobnVsbD09TD9QKGpbWV0sWSxqKTpQLmNhbGwoTCxqW1ldLFksaikpfShqLFAsWSl9fSw2MjMwOmNlPT57Y2UuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDM4NzM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9''@;'; put 'put ''Yig0MTU1KTtjb25zdCBfPWIoNzcpLHA9YigyNTIwKSxOPWIoMTM4MSkubWtkaXJzU3luYyx3PWIoMzE4KS51dGltZXNNaWxsaXNTeW5jLEY9YigyNzMzKTtmdW5jdGlvbiBSKF9lLFRlLFNlLHplKXtjb25zdCBnPSh6ZS5kZXJlZmVyZW5jZT9fLnN0YXRTeW5jOl8ubHN0YXRTeW5jKShUZSk7''@;'; put 'put ''aWYoZy5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBRKF9lLFRlLFNlLHplLHope3JldHVybiBUZT90ZShTZSx6ZSx6KTpmdW5jdGlvbiBYKF9lLFRlLFNlLHplKXtyZXR1cm4gXy5ta2RpclN5bmMoU2UpLHRlKFRlLFNlLHplKSxaKFNlLF9lKX0oX2UubW9kZSxTZSx6ZSx6KX0oZyxf''@;'; put 'put ''ZSxUZSxTZSx6ZSk7aWYoZy5pc0ZpbGUoKXx8Zy5pc0NoYXJhY3RlckRldmljZSgpfHxnLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24gaihfZSxUZSxTZSx6ZSx6KXtyZXR1cm4gVGU/ZnVuY3Rpb24gUChfZSxUZSxTZSx6ZSl7aWYoemUub3ZlcndyaXRlKXJldHVybiBfLnVubGlu''@;'; put 'put ''a1N5bmMoU2UpLEwoX2UsVGUsU2UsemUpO2lmKHplLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke1NlfScgYWxyZWFkeSBleGlzdHNgKX0oX2UsU2UsemUseik6TChfZSxTZSx6ZSx6KX0oZyxfZSxUZSxTZSx6ZSk7aWYoZy5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBvZShfZSxUZSxTZSx6ZSl7bGV0IHo9Xy5yZWFkbGlua1N5bmMoVGUpO2lmKHplLmRlcmVmZXJlbmNlJiYoej1wLnJlc29sdmUoRC5jd2QoKSx6KSksX2Upe2xldCBnO3RyeXtnPV8ucmVhZGxpbmtTeW5jKFNlKX1jYXRjaCh5KXtpZigiRUlOVkFMIj09PXkuY29kZXx8IlVOS05PV04iPT09''@;'; put 'put ''eS5jb2RlKXJldHVybiBfLnN5bWxpbmtTeW5jKHosU2UpO3Rocm93IHl9aWYoemUuZGVyZWZlcmVuY2UmJihnPXAucmVzb2x2ZShELmN3ZCgpLGcpKSxGLmlzU3JjU3ViZGlyKHosZykpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHt6fScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRz''@;'; put 'put ''ZWxmLCAnJHtnfScuYCk7aWYoRi5pc1NyY1N1YmRpcihnLHopKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtnfScgd2l0aCAnJHt6fScuYCk7cmV0dXJuIGZ1bmN0aW9uIGdlKF9lLFRlKXtyZXR1cm4gXy51bmxpbmtTeW5jKFRlKSxfLnN5bWxpbmtTeW5jKF9lLFRlKX0o''@;'; put 'put ''eixTZSl9cmV0dXJuIF8uc3ltbGlua1N5bmMoeixTZSl9KF9lLFRlLFNlLHplKTt0aHJvdyBnLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke1RlfWApOmcuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtUZX1g''@;'; put 'put ''KTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtUZX1gKX1mdW5jdGlvbiBMKF9lLFRlLFNlLHplKXtyZXR1cm4gXy5jb3B5RmlsZVN5bmMoVGUsU2UpLHplLnByZXNlcnZlVGltZXN0YW1wcyYmZnVuY3Rpb24gWShfZSxUZSxTZSl7KGZ1bmN0aW9uIEIoX2Upe3JldHVybiEoMTI4Jl9lKX0p''@;'; put 'put ''KF9lKSYmZnVuY3Rpb24gVyhfZSxUZSl7WihfZSwxMjh8VGUpfShTZSxfZSksZnVuY3Rpb24gcShfZSxUZSl7Y29uc3QgU2U9Xy5zdGF0U3luYyhfZSk7dyhUZSxTZS5hdGltZSxTZS5tdGltZSl9KFRlLFNlKX0oX2UubW9kZSxUZSxTZSksWihTZSxfZS5tb2RlKX1mdW5jdGlvbiBaKF9lLFRl''@;'; put 'put ''KXtyZXR1cm4gXy5jaG1vZFN5bmMoX2UsVGUpfWZ1bmN0aW9uIHRlKF9lLFRlLFNlKXtjb25zdCB6ZT1fLm9wZW5kaXJTeW5jKF9lKTt0cnl7bGV0IHo7Zm9yKDtudWxsIT09KHo9emUucmVhZFN5bmMoKSk7KXJlKHoubmFtZSxfZSxUZSxTZSl9ZmluYWxseXt6ZS5jbG9zZVN5bmMoKX19ZnVu''@;'; put 'put ''Y3Rpb24gcmUoX2UsVGUsU2UsemUpe2NvbnN0IHo9cC5qb2luKFRlLF9lKSxnPXAuam9pbihTZSxfZSk7aWYoemUuZmlsdGVyJiYhemUuZmlsdGVyKHosZykpcmV0dXJuO2NvbnN0e2Rlc3RTdGF0Onl9PUYuY2hlY2tQYXRoc1N5bmMoeixnLCJjb3B5Iix6ZSk7cmV0dXJuIFIoeSx6LGcsemUp''@;'; put 'put ''fWNlLmV4cG9ydHM9ZnVuY3Rpb24gSChfZSxUZSxTZSl7ImZ1bmN0aW9uIj09dHlwZW9mIFNlJiYoU2U9e2ZpbHRlcjpTZX0pLChTZT1TZXx8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiBTZSl8fCEhU2UuY2xvYmJlcixTZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiBTZT8hIVNlLm92ZXJ3''@;'; put 'put ''cml0ZTpTZS5jbG9iYmVyLFNlLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09RC5hcmNoJiZELmVtaXRXYXJuaW5nKCJVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cblx0c2VlIGh0dHBzOi8vZ2l0aHVi''@;'; put 'put ''LmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAyIik7Y29uc3R7c3JjU3RhdDp6ZSxkZXN0U3RhdDp6fT1GLmNoZWNrUGF0aHNTeW5jKF9lLFRlLCJjb3B5IixTZSk7aWYoRi5jaGVja1BhcmVudFBhdGhzU3luYyhf''@;'; put 'put ''ZSx6ZSxUZSwiY29weSIpLFNlLmZpbHRlciYmIVNlLmZpbHRlcihfZSxUZSkpcmV0dXJuO2NvbnN0IGc9cC5kaXJuYW1lKFRlKTtyZXR1cm4gXy5leGlzdHNTeW5jKGcpfHxOKGcpLFIoeixfZSxUZSxTZSl9fSw3MTg5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSk7Y29u''@;'; put 'put ''c3QgXz1iKDc3NDkpLHA9YigyNTIwKSx7bWtkaXJzOk59PWIoMTM4MSkse3BhdGhFeGlzdHM6d309Yig5MjU3KSx7dXRpbWVzTWlsbGlzOkZ9PWIoMzE4KSxIPWIoMjczMyk7ZnVuY3Rpb24gaigpe3JldHVybihqPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZT17fSl7ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHplJiYoemU9e2ZpbHRlcjp6ZX0pLHplLmNsb2JiZXI9ISgiY2xvYmJlciJpbiB6ZSl8fCEhemUuY2xvYmJlcix6ZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiB6ZT8hIXplLm92ZXJ3cml0ZTp6ZS5jbG9iYmVyLHplLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIi''@;'; put 'put ''PT09RC5hcmNoJiZELmVtaXRXYXJuaW5nKCJVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cblx0c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5Iiwi''@;'; put 'put ''V2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAxIik7Y29uc3R7c3JjU3RhdDp6LGRlc3RTdGF0Omd9PXlpZWxkIEguY2hlY2tQYXRocyhUZSxTZSwiY29weSIsemUpO2lmKHlpZWxkIEguY2hlY2tQYXJlbnRQYXRocyhUZSx6LFNlLCJjb3B5IiksISh5aWVsZCBQKFRlLFNlLHplKSkpcmV0dXJu''@;'; put 'put ''O2NvbnN0IHg9cC5kaXJuYW1lKFNlKTsoeWllbGQgdyh4KSl8fCh5aWVsZCBOKHgpKSx5aWVsZCBZKGcsVGUsU2UsemUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBQKFRlLFNlLHplKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTCgpe3JldHVy''@;'; put 'put ''bihMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSl7cmV0dXJuIXplLmZpbHRlcnx8emUuZmlsdGVyKFRlLFNlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWShUZSxTZSx6ZSx6KXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24g''@;'; put 'put ''Qigpe3JldHVybiBCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSx6KXtjb25zdCB5PXlpZWxkKHouZGVyZWZlcmVuY2U/Xy5zdGF0Ol8ubHN0YXQpKFNlKTtpZih5LmlzRGlyZWN0b3J5KCkpcmV0dXJuIGZ1bmN0aW9uIHJlKFRlLFNlLHplLHosZyl7cmV0dXJuIG9lLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX0oeSxUZSxTZSx6ZSx6KTtpZih5LmlzRmlsZSgpfHx5LmlzQ2hhcmFjdGVyRGV2aWNlKCl8fHkuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiBXKFRlLFNlLHplLHosZyl7cmV0dXJuIFouYXBwbHkodGhpcyxhcmd1bWVudHMpfSh5LFRlLFNlLHpl''@;'; put 'put ''LHopO2lmKHkuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gZ2UoVGUsU2UsemUseil7cmV0dXJuIF9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oVGUsU2UsemUseik7dGhyb3cgeS5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtTZX1g''@;'; put 'put ''KTp5LmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7U2V9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7U2V9YCl9KSxCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBaKCl7cmV0dXJuKFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24q''@;'; put 'put ''KFRlLFNlLHplLHosZyl7aWYoIVNlKXJldHVybiBxKFRlLHplLHosZyk7aWYoZy5vdmVyd3JpdGUpcmV0dXJuIHlpZWxkIF8udW5saW5rKHopLHEoVGUsemUseixnKTtpZihnLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke3p9JyBhbHJlYWR5IGV4aXN0c2ApfSkpLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX1mdW5jdGlvbiBxKFRlLFNlLHplLHope3JldHVybiBRLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBRKCl7cmV0dXJuKFE9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplLHope2lmKHlpZWxkIF8uY29weUZpbGUoU2UsemUpLHoucHJlc2Vy''@;'; put 'put ''dmVUaW1lc3RhbXBzKXsoZnVuY3Rpb24gWChUZSl7cmV0dXJuISgxMjgmVGUpfSkoVGUubW9kZSkmJih5aWVsZCBmdW5jdGlvbiB0ZShUZSxTZSl7cmV0dXJuIF8uY2htb2QoVGUsMTI4fFNlKX0oemUsVGUubW9kZSkpO2NvbnN0IGc9eWllbGQgXy5zdGF0KFNlKTt5aWVsZCBGKHplLGcuYXRp''@;'; put 'put ''bWUsZy5tdGltZSl9cmV0dXJuIF8uY2htb2QoemUsVGUubW9kZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG9lKCl7cmV0dXJuKG9lPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSx6LGcpe1NlfHwoeWllbGQgXy5ta2Rpcih6KSk7Y29uc3QgeT1bXTt2''@;'; put 'put ''YXIgVCx4PSExLEM9ITE7dHJ5e2Zvcih2YXIgVSxWPV9hc3luY0l0ZXJhdG9yKHlpZWxkIF8ub3BlbmRpcih6ZSkpO3g9IShVPXlpZWxkIFYubmV4dCgpKS5kb25lO3g9ITEpe2NvbnN0IEU9VS52YWx1ZTt7Y29uc3QgbT1wLmpvaW4oemUsRS5uYW1lKSxBPXAuam9pbih6LEUubmFtZSk7eS5w''@;'; put 'put ''dXNoKFAobSxBLGcpLnRoZW4oYWU9PntpZihhZSlyZXR1cm4gSC5jaGVja1BhdGhzKG0sQSwiY29weSIsZykudGhlbigoe2Rlc3RTdGF0Om5lfSk9PlkobmUsbSxBLGcpKX0pKX19fWNhdGNoKEUpe0M9ITAsVD1FfWZpbmFsbHl7dHJ5e3gmJm51bGwhPVYucmV0dXJuJiYoeWllbGQgVi5yZXR1''@;'; put 'put ''cm4oKSl9ZmluYWxseXtpZihDKXRocm93IFR9fXlpZWxkIFByb21pc2UuYWxsKHkpLFNlfHwoeWllbGQgXy5jaG1vZCh6LFRlLm1vZGUpKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gX2UoKXtyZXR1cm4oX2U9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHpl''@;'; put 'put ''LHope2xldCBnPXlpZWxkIF8ucmVhZGxpbmsoU2UpO2lmKHouZGVyZWZlcmVuY2UmJihnPXAucmVzb2x2ZShELmN3ZCgpLGcpKSwhVGUpcmV0dXJuIF8uc3ltbGluayhnLHplKTtsZXQgeT1udWxsO3RyeXt5PXlpZWxkIF8ucmVhZGxpbmsoemUpfWNhdGNoKHgpe2lmKCJFSU5WQUwiPT09eC5j''@;'; put 'put ''b2RlfHwiVU5LTk9XTiI9PT14LmNvZGUpcmV0dXJuIF8uc3ltbGluayhnLHplKTt0aHJvdyB4fWlmKHouZGVyZWZlcmVuY2UmJih5PXAucmVzb2x2ZShELmN3ZCgpLHkpKSxILmlzU3JjU3ViZGlyKGcseSkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtnfScgdG8gYSBzdWJkaXJl''@;'; put 'put ''Y3Rvcnkgb2YgaXRzZWxmLCAnJHt5fScuYCk7aWYoSC5pc1NyY1N1YmRpcih5LGcpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHt5fScgd2l0aCAnJHtnfScuYCk7cmV0dXJuIHlpZWxkIF8udW5saW5rKHplKSxfLnN5bWxpbmsoZyx6ZSl9KSkuYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gUihUZSxTZSl7cmV0dXJuIGouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sNjQ2NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODk4MSkuZnJvbVByb21pc2U7Y2UuZXhwb3J0cz17Y29weTpEKGIoNzE4OSkpLGNvcHlTeW5jOmIo''@;'; put 'put ''Mzg3Myl9fSw1NTkwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoNzc0OSkscD1iKDI1MjApLE49YigxMzgxKSx3PWIoNDU0MiksRj1EKGZ1bmN0aW9uKCl7dmFyIFI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFApe2xldCBMO3Ry''@;'; put 'put ''eXtMPXlpZWxkIF8ucmVhZGRpcihQKX1jYXRjaHtyZXR1cm4gTi5ta2RpcnMoUCl9cmV0dXJuIFByb21pc2UuYWxsKEwubWFwKFk9PncucmVtb3ZlKHAuam9pbihQLFkpKSkpfSk7cmV0dXJuIGZ1bmN0aW9uIGooUCl7cmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSk7ZnVuY3Rp''@;'; put 'put ''b24gSChSKXtsZXQgajt0cnl7aj1fLnJlYWRkaXJTeW5jKFIpfWNhdGNoe3JldHVybiBOLm1rZGlyc1N5bmMoUil9ai5mb3JFYWNoKFA9PntQPXAuam9pbihSLFApLHcucmVtb3ZlU3luYyhQKX0pfWNlLmV4cG9ydHM9e2VtcHR5RGlyU3luYzpILGVtcHR5ZGlyU3luYzpILGVtcHR5RGlyOkYs''@;'; put 'put ''ZW1wdHlkaXI6Rn19LDY1MzA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlLF89YigyNTIwKSxwPWIoNzc0OSksTj1iKDEzODEpO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUil7bGV0IGo7dHJ5e2o9''@;'; put 'put ''eWllbGQgcC5zdGF0KFIpfWNhdGNoe31pZihqJiZqLmlzRmlsZSgpKXJldHVybjtjb25zdCBQPV8uZGlybmFtZShSKTtsZXQgTD1udWxsO3RyeXtMPXlpZWxkIHAuc3RhdChQKX1jYXRjaChZKXtpZigiRU5PRU5UIj09PVkuY29kZSlyZXR1cm4geWllbGQgTi5ta2RpcnMoUCksdm9pZCh5aWVs''@;'; put 'put ''ZCBwLndyaXRlRmlsZShSLCIiKSk7dGhyb3cgWX1MLmlzRGlyZWN0b3J5KCk/eWllbGQgcC53cml0ZUZpbGUoUiwiIik6eWllbGQgcC5yZWFkZGlyKFApfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXtjcmVhdGVGaWxlOkQoZnVuY3Rpb24gdyhSKXtyZXR1cm4gRi5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVGaWxlU3luYzpmdW5jdGlvbiBIKFIpe2xldCBqO3RyeXtqPXAuc3RhdFN5bmMoUil9Y2F0Y2h7fWlmKGomJmouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IFA9Xy5kaXJuYW1lKFIpO3RyeXtwLnN0YXRTeW5jKFApLmlzRGlyZWN0b3J5KCl8fHAucmVh''@;'; put 'put ''ZGRpclN5bmMoUCl9Y2F0Y2goTCl7aWYoIUx8fCJFTk9FTlQiIT09TC5jb2RlKXRocm93IEw7Ti5ta2RpcnNTeW5jKFApfXAud3JpdGVGaWxlU3luYyhSLCIiKX19fSwxNzIwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e2NyZWF0ZUZpbGU6RCxjcmVhdGVGaWxlU3luYzpffT1iKDY1''@;'; put 'put ''MzApLHtjcmVhdGVMaW5rOnAsY3JlYXRlTGlua1N5bmM6Tn09Yig0MTQ3KSx7Y3JlYXRlU3ltbGluazp3LGNyZWF0ZVN5bWxpbmtTeW5jOkZ9PWIoMzYzNSk7Y2UuZXhwb3J0cz17Y3JlYXRlRmlsZTpELGNyZWF0ZUZpbGVTeW5jOl8sZW5zdXJlRmlsZTpELGVuc3VyZUZpbGVTeW5jOl8sY3Jl''@;'; put 'put ''YXRlTGluazpwLGNyZWF0ZUxpbmtTeW5jOk4sZW5zdXJlTGluazpwLGVuc3VyZUxpbmtTeW5jOk4sY3JlYXRlU3ltbGluazp3LGNyZWF0ZVN5bWxpbmtTeW5jOkYsZW5zdXJlU3ltbGluazp3LGVuc3VyZVN5bWxpbmtTeW5jOkZ9fSw0MTQ3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0''@;'; put 'put ''IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoMjUyMCkscD1iKDc3NDkpLE49YigxMzgxKSx7cGF0aEV4aXN0czp3fT1iKDkyNTcpLHthcmVJZGVudGljYWw6Rn09YigyNzMzKTtmdW5jdGlvbiBSKCl7cmV0dXJuKFI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFAsTCl7bGV0IFksQjt0''@;'; put 'put ''cnl7WT15aWVsZCBwLmxzdGF0KEwpfWNhdGNoe310cnl7Qj15aWVsZCBwLmxzdGF0KFApfWNhdGNoKHEpe3Rocm93IHEubWVzc2FnZT1xLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIikscX1pZihZJiZGKEIsWSkpcmV0dXJuO2NvbnN0IFc9Xy5kaXJuYW1lKEwpOyh5aWVs''@;'; put 'put ''ZCB3KFcpKXx8KHlpZWxkIE4ubWtkaXJzKFcpKSx5aWVsZCBwLmxpbmsoUCxMKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17Y3JlYXRlTGluazpEKGZ1bmN0aW9uIEgoUCxMKXtyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVMaW5rU3luYzpmdW5j''@;'; put 'put ''dGlvbiBqKFAsTCl7bGV0IFk7dHJ5e1k9cC5sc3RhdFN5bmMoTCl9Y2F0Y2h7fXRyeXtjb25zdCBaPXAubHN0YXRTeW5jKFApO2lmKFkmJkYoWixZKSlyZXR1cm59Y2F0Y2goWil7dGhyb3cgWi5tZXNzYWdlPVoubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxafWNvbnN0''@;'; put 'put ''IEI9Xy5kaXJuYW1lKEwpO3JldHVybiBwLmV4aXN0c1N5bmMoQil8fE4ubWtkaXJzU3luYyhCKSxwLmxpbmtTeW5jKFAsTCl9fX0sNjA3MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoMjUyMCksXz1iKDc3NDkpLHtwYXRoRXhpc3RzOnB9PWIoOTI1NyksTj1iKDg5ODEpLmZy''@;'; put 'put ''b21Qcm9taXNlO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUixqKXtpZihELmlzQWJzb2x1dGUoUikpe3RyeXt5aWVsZCBfLmxzdGF0KFIpfWNhdGNoKEIpe3Rocm93IEIubWVzc2FnZT1CLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVT''@;'; put 'put ''eW1saW5rIiksQn1yZXR1cm57dG9Dd2Q6Uix0b0RzdDpSfX1jb25zdCBQPUQuZGlybmFtZShqKSxMPUQuam9pbihQLFIpO2lmKHlpZWxkIHAoTCkpcmV0dXJue3RvQ3dkOkwsdG9Ec3Q6Un07dHJ5e3lpZWxkIF8ubHN0YXQoUil9Y2F0Y2goQil7dGhyb3cgQi5tZXNzYWdlPUIubWVzc2FnZS5y''@;'; put 'put ''ZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxCfXJldHVybnt0b0N3ZDpSLHRvRHN0OkQucmVsYXRpdmUoUCxSKX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e3N5bWxpbmtQYXRoczpOKGZ1bmN0aW9uIHcoUixqKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9KSxzeW1saW5rUGF0aHNTeW5jOmZ1bmN0aW9uIEgoUixqKXtpZihELmlzQWJzb2x1dGUoUikpe2lmKCFfLmV4aXN0c1N5bmMoUikpdGhyb3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6Un19Y29uc3QgUD1E''@;'; put 'put ''LmRpcm5hbWUoaiksTD1ELmpvaW4oUCxSKTtpZihfLmV4aXN0c1N5bmMoTCkpcmV0dXJue3RvQ3dkOkwsdG9Ec3Q6Un07aWYoIV8uZXhpc3RzU3luYyhSKSl0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Uix0b0RzdDpELnJl''@;'; put 'put ''bGF0aXZlKFAsUil9fX19LDkyNTk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDc3NDkpLF89Yig4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEYsSCl7aWYoSClyZXR1cm4gSDtsZXQgUjt0cnl7Uj15''@;'; put 'put ''aWVsZCBELmxzdGF0KEYpfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gUiYmUi5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17c3ltbGlua1R5cGU6XyhmdW5jdGlvbiBwKEYsSCl7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfSksc3ltbGlua1R5cGVTeW5jOmZ1bmN0aW9uIHcoRixIKXtpZihIKXJldHVybiBIO2xldCBSO3RyeXtSPUQubHN0YXRTeW5jKEYpfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gUiYmUi5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSwzNjM1OihjZSxKLGIpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO2NvbnN0IEQ9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoMjUyMCkscD1iKDc3NDkpLHtta2RpcnM6Tixta2RpcnNTeW5jOnd9PWIoMTM4MSkse3N5bWxpbmtQYXRoczpGLHN5bWxpbmtQYXRoc1N5bmM6SH09Yig2MDcyKSx7c3ltbGlua1R5cGU6UixzeW1saW5rVHlwZVN5bmM6an09''@;'; put 'put ''Yig5MjU5KSx7cGF0aEV4aXN0czpQfT1iKDkyNTcpLHthcmVJZGVudGljYWw6TH09YigyNzMzKTtmdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFoscSxRKXtsZXQgWDt0cnl7WD15aWVsZCBwLmxzdGF0KHEpfWNhdGNoe31pZihYJiZYLmlzU3ltYm9s''@;'; put 'put ''aWNMaW5rKCkpe2NvbnN0W2dlLF9lXT15aWVsZCBQcm9taXNlLmFsbChbcC5zdGF0KFopLHAuc3RhdChxKV0pO2lmKEwoZ2UsX2UpKXJldHVybn1jb25zdCB0ZT15aWVsZCBGKFoscSk7Wj10ZS50b0RzdDtjb25zdCByZT15aWVsZCBSKHRlLnRvQ3dkLFEpLG9lPV8uZGlybmFtZShxKTtyZXR1''@;'; put 'put ''cm4oeWllbGQgUChvZSkpfHwoeWllbGQgTihvZSkpLHAuc3ltbGluayhaLHEscmUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXtjcmVhdGVTeW1saW5rOkQoZnVuY3Rpb24gWShaLHEsUSl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlU3ltbGlu''@;'; put 'put ''a1N5bmM6ZnVuY3Rpb24gVyhaLHEsUSl7bGV0IFg7dHJ5e1g9cC5sc3RhdFN5bmMocSl9Y2F0Y2h7fWlmKFgmJlguaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgZ2U9cC5zdGF0U3luYyhaKSxfZT1wLnN0YXRTeW5jKHEpO2lmKEwoZ2UsX2UpKXJldHVybn1jb25zdCB0ZT1IKFoscSk7Wj10ZS50''@;'; put 'put ''b0RzdCxRPWoodGUudG9Dd2QsUSk7Y29uc3QgcmU9Xy5kaXJuYW1lKHEpO3JldHVybiBwLmV4aXN0c1N5bmMocmUpfHx3KHJlKSxwLnN5bWxpbmtTeW5jKFoscSxRKX19fSw3NzQ5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSk7Y29uc3QgXz1iKDg5ODEpLmZyb21DYWxs''@;'; put 'put ''YmFjayxwPWIoNzcpLE49WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJjcCIsImZjaG1vZCIsImZjaG93biIsImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxj''@;'; put 'put ''aG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0''@;'; put 'put ''ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcih3PT4iZnVuY3Rpb24iPT10eXBlb2YgcFt3XSk7T2JqZWN0LmFzc2lnbihKLHApLE4uZm9yRWFjaCh3PT57Slt3XT1fKHBbd10pfSksSi5leGlzdHM9ZnVuY3Rpb24odyxGKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Rj9wLmV4aXN0cyh3LEYpOm5ldyBQcm9taXNlKEg9PnAuZXhpc3RzKHcsSCkpfSxKLnJlYWQ9ZnVuY3Rpb24odyxGLEgsUixqLFApe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQP3AucmVhZCh3LEYsSCxSLGosUCk6bmV3IFByb21pc2UoKEwsWSk9PntwLnJlYWQodyxGLEgsUixqLChCLFcs''@;'; put 'put ''Wik9PntpZihCKXJldHVybiBZKEIpO0woe2J5dGVzUmVhZDpXLGJ1ZmZlcjpafSl9KX0pfSxKLndyaXRlPWZ1bmN0aW9uKHcsRiwuLi5IKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSFtILmxlbmd0aC0xXT9wLndyaXRlKHcsRiwuLi5IKTpuZXcgUHJvbWlzZSgoUixqKT0+e3Aud3JpdGUo''@;'; put 'put ''dyxGLC4uLkgsKFAsTCxZKT0+e2lmKFApcmV0dXJuIGooUCk7Uih7Ynl0ZXNXcml0dGVuOkwsYnVmZmVyOll9KX0pfSl9LEoucmVhZHY9ZnVuY3Rpb24odyxGLC4uLkgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBIW0gubGVuZ3RoLTFdP3AucmVhZHYodyxGLC4uLkgpOm5ldyBQcm9taXNl''@;'; put 'put ''KChSLGopPT57cC5yZWFkdih3LEYsLi4uSCwoUCxMLFkpPT57aWYoUClyZXR1cm4gaihQKTtSKHtieXRlc1JlYWQ6TCxidWZmZXJzOll9KX0pfSl9LEoud3JpdGV2PWZ1bmN0aW9uKHcsRiwuLi5IKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSFtILmxlbmd0aC0xXT9wLndyaXRldih3LEYs''@;'; put 'put ''Li4uSCk6bmV3IFByb21pc2UoKFIsaik9PntwLndyaXRldih3LEYsLi4uSCwoUCxMLFkpPT57aWYoUClyZXR1cm4gaihQKTtSKHtieXRlc1dyaXR0ZW46TCxidWZmZXJzOll9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBwLnJlYWxwYXRoLm5hdGl2ZT9KLnJlYWxwYXRoLm5hdGl2ZT1fKHAu''@;'; put 'put ''cmVhbHBhdGgubmF0aXZlKTpELmVtaXRXYXJuaW5nKCJmcy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVkPyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4''@;'; put 'put ''cG9ydHM9ey4uLmIoNzc0OSksLi4uYig2NDY0KSwuLi5iKDU1OTApLC4uLmIoMTcyMCksLi4uYig2NTczKSwuLi5iKDEzODEpLC4uLmIoNTMwKSwuLi5iKDQ2NzApLC4uLmIoOTI1NyksLi4uYig0NTQyKX19LDY1NzM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZy''@;'; put 'put ''b21Qcm9taXNlLF89Yig3MTgzKTtfLm91dHB1dEpzb249RChiKDM1MDgpKSxfLm91dHB1dEpzb25TeW5jPWIoOTU3OCksXy5vdXRwdXRKU09OPV8ub3V0cHV0SnNvbixfLm91dHB1dEpTT05TeW5jPV8ub3V0cHV0SnNvblN5bmMsXy53cml0ZUpTT049Xy53cml0ZUpzb24sXy53cml0ZUpTT05T''@;'; put 'put ''eW5jPV8ud3JpdGVKc29uU3luYyxfLnJlYWRKU09OPV8ucmVhZEpzb24sXy5yZWFkSlNPTlN5bmM9Xy5yZWFkSnNvblN5bmMsY2UuZXhwb3J0cz1ffSw3MTgzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig2ODEzKTtjZS5leHBvcnRzPXtyZWFkSnNvbjpELnJlYWRGaWxlLHJl''@;'; put 'put ''YWRKc29uU3luYzpELnJlYWRGaWxlU3luYyx3cml0ZUpzb246RC53cml0ZUZpbGUsd3JpdGVKc29uU3luYzpELndyaXRlRmlsZVN5bmN9fSw5NTc4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpEfT1iKDY3ODApLHtvdXRwdXRGaWxlU3luYzpffT1iKDQ2NzApO2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24gcChOLHcsRil7Y29uc3QgSD1EKHcsRik7XyhOLEgsRil9fSwzNTA4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpEfT1iKDY3ODApLHtvdXRwdXRGaWxlOl99PWIoNDY3MCk7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2Vu''@;'; put 'put ''ZXJhdG9yKGZ1bmN0aW9uKih3LEYsSD17fSl7Y29uc3QgUj1EKEYsSCk7eWllbGQgXyh3LFIsSCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gcCh3LEYpe3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KGNlLEosYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOl8sbWFrZURpclN5bmM6cH09Yig4MjMzKSxOPUQoXyk7Y2UuZXhwb3J0cz17bWtkaXJzOk4sbWtkaXJzU3luYzpwLG1rZGlycDpOLG1rZGlycFN5bmM6cCxlbnN1cmVEaXI6TixlbnN1cmVEaXJTeW5jOnB9fSw4MjMz''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig3NzQ5KSx7Y2hlY2tQYXRoOl99PWIoMzQ2OCkscD1OPT4ibnVtYmVyIj09dHlwZW9mIE4/Tjp7bW9kZTo1MTEsLi4uTn0ubW9kZTtjZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgTj1fYXN5bmNUb0dlbmVyYXRvcihm''@;'; put 'put ''dW5jdGlvbioodyxGKXtyZXR1cm4gXyh3KSxELm1rZGlyKHcse21vZGU6cChGKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbih3LEYpe3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksY2UuZXhwb3J0cy5tYWtlRGlyU3luYz0oTix3KT0+KF8oTiksRC5ta2RpclN5''@;'; put 'put ''bmMoTix7bW9kZTpwKHcpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2NvbnN0IF89YigyNTIwKTtjZS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihOKXtpZigid2luMzIiPT09RC5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVz''@;'; put 'put ''dChOLnJlcGxhY2UoXy5wYXJzZShOKS5yb290LCIiKSkpe2NvbnN0IEY9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtOfWApO3Rocm93IEYuY29kZT0iRUlOVkFMIixGfX19LDUzMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODk4MSku''@;'; put 'put ''ZnJvbVByb21pc2U7Y2UuZXhwb3J0cz17bW92ZTpEKGIoNDM2KSksbW92ZVN5bmM6YigzNzM2KX19LDM3MzY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDc3KSxfPWIoMjUyMCkscD1iKDY0NjQpLmNvcHlTeW5jLE49Yig0NTQyKS5yZW1vdmVTeW5jLHc9YigxMzgxKS5ta2Rp''@;'; put 'put ''cnBTeW5jLEY9YigyNzMzKTtmdW5jdGlvbiBQKFksQixXKXt0cnl7RC5yZW5hbWVTeW5jKFksQil9Y2F0Y2goWil7aWYoIkVYREVWIiE9PVouY29kZSl0aHJvdyBaO3JldHVybiBmdW5jdGlvbiBMKFksQixXKXtyZXR1cm4gcChZLEIse292ZXJ3cml0ZTpXLGVycm9yT25FeGlzdDohMCxwcmVz''@;'; put 'put ''ZXJ2ZVRpbWVzdGFtcHM6ITB9KSxOKFkpfShZLEIsVyl9fWNlLmV4cG9ydHM9ZnVuY3Rpb24gSChZLEIsVyl7Y29uc3QgWj0oVz1XfHx7fSkub3ZlcndyaXRlfHxXLmNsb2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6UT0hMX09Ri5jaGVja1BhdGhzU3luYyhZLEIsIm1vdmUi''@;'; put 'put ''LFcpO3JldHVybiBGLmNoZWNrUGFyZW50UGF0aHNTeW5jKFkscSxCLCJtb3ZlIiksZnVuY3Rpb24gUihZKXtjb25zdCBCPV8uZGlybmFtZShZKTtyZXR1cm4gXy5wYXJzZShCKS5yb290PT09Qn0oQil8fHcoXy5kaXJuYW1lKEIpKSxmdW5jdGlvbiBqKFksQixXLFope2lmKFopcmV0dXJuIFAo''@;'; put 'put ''WSxCLFcpO2lmKFcpcmV0dXJuIE4oQiksUChZLEIsVyk7aWYoRC5leGlzdHNTeW5jKEIpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gUChZLEIsVyl9KFksQixaLFEpfX0sNDM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig3NzQ5KSxf''@;'; put 'put ''PWIoMjUyMCkse2NvcHk6cH09Yig2NDY0KSx7cmVtb3ZlOk59PWIoNDU0Mikse21rZGlycDp3fT1iKDEzODEpLHtwYXRoRXhpc3RzOkZ9PWIoOTI1NyksSD1iKDI3MzMpO2Z1bmN0aW9uIGooKXtyZXR1cm4gaj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxaLHE9e30pe2NvbnN0IFE9''@;'; put 'put ''cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITEse3NyY1N0YXQ6WCxpc0NoYW5naW5nQ2FzZTp0ZT0hMX09eWllbGQgSC5jaGVja1BhdGhzKFcsWiwibW92ZSIscSk7eWllbGQgSC5jaGVja1BhcmVudFBhdGhzKFcsWCxaLCJtb3ZlIik7Y29uc3QgcmU9Xy5kaXJuYW1lKFopO3JldHVybiBfLnBh''@;'; put 'put ''cnNlKHJlKS5yb290IT09cmUmJih5aWVsZCB3KHJlKSksZnVuY3Rpb24gUChXLFoscSxRKXtyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFcsWixRLHRlKX0pLGouYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gTD1fYXN5bmNUb0dlbmVyYXRvcihmdW5j''@;'; put 'put ''dGlvbiooVyxaLHEsUSl7aWYoIVEpaWYocSl5aWVsZCBOKFopO2Vsc2UgaWYoeWllbGQgRihaKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7dHJ5e3lpZWxkIEQucmVuYW1lKFcsWil9Y2F0Y2goWCl7aWYoIkVYREVWIiE9PVguY29kZSl0aHJvdyBYO3lpZWxkIGZ1''@;'; put 'put ''bmN0aW9uIFkoVyxaLHEpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oVyxaLHEpfX0pLEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxaLHEpe3JldHVybiB5aWVsZCBwKFcsWix7b3Zlcndy''@;'; put 'put ''aXRlOnEsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLE4oVyl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gUihXLFope3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDQ2NzA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y29uc3QgRD1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KSxwPWIoMjUyMCksTj1iKDEzODEpLHc9Yig5MjU3KS5wYXRoRXhpc3RzO2Z1bmN0aW9uIEgoKXtyZXR1cm4oSD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooaixQLEw9InV0Zi04Iil7Y29uc3QgWT1wLmRpcm5hbWUoaik7''@;'; put 'put ''cmV0dXJuKHlpZWxkIHcoWSkpfHwoeWllbGQgTi5ta2RpcnMoWSkpLF8ud3JpdGVGaWxlKGosUCxMKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17b3V0cHV0RmlsZTpEKGZ1bmN0aW9uIEYoaixQKXtyZXR1cm4gSC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxvdXRwdXRG''@;'; put 'put ''aWxlU3luYzpmdW5jdGlvbiBSKGosLi4uUCl7Y29uc3QgTD1wLmRpcm5hbWUoaik7Xy5leGlzdHNTeW5jKEwpfHxOLm1rZGlyc1N5bmMoTCksXy53cml0ZUZpbGVTeW5jKGosLi4uUCl9fX0sOTI1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoODk4MSkuZnJvbVByb21pc2Us''@;'; put 'put ''Xz1iKDc3NDkpO2NlLmV4cG9ydHM9e3BhdGhFeGlzdHM6RChmdW5jdGlvbiBwKE4pe3JldHVybiBfLmFjY2VzcyhOKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOl8uZXhpc3RzU3luY319LDQ1NDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1i''@;'; put 'put ''KDc3KSxfPWIoODk4MSkuZnJvbUNhbGxiYWNrO2NlLmV4cG9ydHM9e3JlbW92ZTpfKGZ1bmN0aW9uIHAodyxGKXtELnJtKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sRil9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uIE4odyl7RC5ybVN5bmModyx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9fX0s''@;'; put 'put ''MjczMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoNzc0OSksXz1iKDI1MjApLHA9Yig4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBIKCl7cmV0dXJuKEg9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFoscSxRLFgpe2NvbnN0e3NyY1N0YXQ6dGUsZGVzdFN0YXQ6cmV9''@;'; put 'put ''PXlpZWxkIGZ1bmN0aW9uIE4oWixxLFEpe2NvbnN0IFg9US5kZXJlZmVyZW5jZT90ZT0+RC5zdGF0KHRlLHtiaWdpbnQ6ITB9KTp0ZT0+RC5sc3RhdCh0ZSx7YmlnaW50OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFtYKFopLFgocSkuY2F0Y2godGU9PntpZigiRU5PRU5UIj09PXRlLmNvZGUp''@;'; put 'put ''cmV0dXJuIG51bGw7dGhyb3cgdGV9KV0pLnRoZW4oKFt0ZSxyZV0pPT4oe3NyY1N0YXQ6dGUsZGVzdFN0YXQ6cmV9KSl9KFoscSxYKTtpZihyZSl7aWYoWSh0ZSxyZSkpe2NvbnN0IG9lPV8uYmFzZW5hbWUoWiksZ2U9Xy5iYXNlbmFtZShxKTtpZigibW92ZSI9PT1RJiZvZSE9PWdlJiZvZS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpPT09Z2UudG9Mb3dlckNhc2UoKSlyZXR1cm57c3JjU3RhdDp0ZSxkZXN0U3RhdDpyZSxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpfWlmKHRlLmlzRGlyZWN0b3J5KCkm''@;'; put 'put ''JiFyZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke3F9JyB3aXRoIGRpcmVjdG9yeSAnJHtafScuYCk7aWYoIXRlLmlzRGlyZWN0b3J5KCkmJnJlLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3Zl''@;'; put 'put ''cndyaXRlIGRpcmVjdG9yeSAnJHtxfScgd2l0aCBub24tZGlyZWN0b3J5ICcke1p9Jy5gKX1pZih0ZS5pc0RpcmVjdG9yeSgpJiZCKFoscSkpdGhyb3cgbmV3IEVycm9yKFcoWixxLFEpKTtyZXR1cm57c3JjU3RhdDp0ZSxkZXN0U3RhdDpyZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1''@;'; put 'put ''bmN0aW9uIGooWixxLFEsWCl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFAoKXtyZXR1cm4oUD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWixxLFEsWCl7Y29uc3QgdGU9Xy5yZXNvbHZlKF8uZGlybmFtZShaKSkscmU9Xy5yZXNvbHZlKF8uZGlybmFtZShR''@;'; put 'put ''KSk7aWYocmU9PT10ZXx8cmU9PT1fLnBhcnNlKHJlKS5yb290KXJldHVybjtsZXQgb2U7dHJ5e29lPXlpZWxkIEQuc3RhdChyZSx7YmlnaW50OiEwfSl9Y2F0Y2goZ2Upe2lmKCJFTk9FTlQiPT09Z2UuY29kZSlyZXR1cm47dGhyb3cgZ2V9aWYoWShxLG9lKSl0aHJvdyBuZXcgRXJyb3IoVyha''@;'; put 'put ''LFEsWCkpO3JldHVybiBqKFoscSxyZSxYKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWShaLHEpe3JldHVybiBxLmlubyYmcS5kZXYmJnEuaW5vPT09Wi5pbm8mJnEuZGV2PT09Wi5kZXZ9ZnVuY3Rpb24gQihaLHEpe2NvbnN0IFE9Xy5yZXNvbHZlKFopLnNwbGl0KF8uc2Vw''@;'; put 'put ''KS5maWx0ZXIodGU9PnRlKSxYPV8ucmVzb2x2ZShxKS5zcGxpdChfLnNlcCkuZmlsdGVyKHRlPT50ZSk7cmV0dXJuIFEuZXZlcnkoKHRlLHJlKT0+WFtyZV09PT10ZSl9ZnVuY3Rpb24gVyhaLHEsUSl7cmV0dXJuYENhbm5vdCAke1F9ICcke1p9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNl''@;'; put 'put ''bGYsICcke3F9Jy5gfWNlLmV4cG9ydHM9e2NoZWNrUGF0aHM6cChmdW5jdGlvbiBGKFoscSxRLFgpe3JldHVybiBILmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIFIoWixxLFEsWCl7Y29uc3R7c3JjU3RhdDp0ZSxkZXN0U3RhdDpyZX09ZnVuY3Rpb24g''@;'; put 'put ''dyhaLHEsUSl7bGV0IFg7Y29uc3QgdGU9US5kZXJlZmVyZW5jZT9vZT0+RC5zdGF0U3luYyhvZSx7YmlnaW50OiEwfSk6b2U9PkQubHN0YXRTeW5jKG9lLHtiaWdpbnQ6ITB9KSxyZT10ZShaKTt0cnl7WD10ZShxKX1jYXRjaChvZSl7aWYoIkVOT0VOVCI9PT1vZS5jb2RlKXJldHVybntzcmNT''@;'; put 'put ''dGF0OnJlLGRlc3RTdGF0Om51bGx9O3Rocm93IG9lfXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0Olh9fShaLHEsWCk7aWYocmUpe2lmKFkodGUscmUpKXtjb25zdCBvZT1fLmJhc2VuYW1lKFopLGdlPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09USYmb2UhPT1nZSYmb2UudG9Mb3dlckNh''@;'; put 'put ''c2UoKT09PWdlLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6dGUsZGVzdFN0YXQ6cmUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZih0ZS5pc0RpcmVjdG9yeSgpJiYhcmUuaXNE''@;'; put 'put ''aXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtxfScgd2l0aCBkaXJlY3RvcnkgJyR7Wn0nLmApO2lmKCF0ZS5pc0RpcmVjdG9yeSgpJiZyZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBk''@;'; put 'put ''aXJlY3RvcnkgJyR7cX0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtafScuYCl9aWYodGUuaXNEaXJlY3RvcnkoKSYmQihaLHEpKXRocm93IG5ldyBFcnJvcihXKFoscSxRKSk7cmV0dXJue3NyY1N0YXQ6dGUsZGVzdFN0YXQ6cmV9fSxjaGVja1BhcmVudFBhdGhzOnAoaiksY2hlY2tQYXJlbnRQ''@;'; put 'put ''YXRoc1N5bmM6ZnVuY3Rpb24gTChaLHEsUSxYKXtjb25zdCB0ZT1fLnJlc29sdmUoXy5kaXJuYW1lKFopKSxyZT1fLnJlc29sdmUoXy5kaXJuYW1lKFEpKTtpZihyZT09PXRlfHxyZT09PV8ucGFyc2UocmUpLnJvb3QpcmV0dXJuO2xldCBvZTt0cnl7b2U9RC5zdGF0U3luYyhyZSx7YmlnaW50''@;'; put 'put ''OiEwfSl9Y2F0Y2goZ2Upe2lmKCJFTk9FTlQiPT09Z2UuY29kZSlyZXR1cm47dGhyb3cgZ2V9aWYoWShxLG9lKSl0aHJvdyBuZXcgRXJyb3IoVyhaLFEsWCkpO3JldHVybiBMKFoscSxyZSxYKX0saXNTcmNTdWJkaXI6QixhcmVJZGVudGljYWw6WX19LDMxODooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijtjb25zdCBEPWIoNzc0OSksXz1iKDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooRixILFIpe2NvbnN0IGo9eWllbGQgRC5vcGVuKEYsInIrIik7bGV0IFA9bnVsbDt0cnl7eWllbGQgRC5mdXRpbWVzKGosSCxS''@;'; put 'put ''KX1maW5hbGx5e3RyeXt5aWVsZCBELmNsb3NlKGopfWNhdGNoKEwpe1A9TH19aWYoUCl0aHJvdyBQfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXt1dGltZXNNaWxsaXM6XyhmdW5jdGlvbiBwKEYsSCxSKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx1dGlt''@;'; put 'put ''ZXNNaWxsaXNTeW5jOmZ1bmN0aW9uIHcoRixILFIpe2NvbnN0IGo9RC5vcGVuU3luYyhGLCJyKyIpO3JldHVybiBELmZ1dGltZXNTeW5jKGosSCxSKSxELmNsb3NlU3luYyhqKX19fSw3NjQ4OmNlPT57InVzZSBzdHJpY3QiO3ZhciBiPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRD1NYXRo''@;'; put 'put ''Lm1heCxwPWZ1bmN0aW9uKEgsUil7Zm9yKHZhciBqPVtdLFA9MDtQPEgubGVuZ3RoO1ArPTEpaltQXT1IW1BdO2Zvcih2YXIgTD0wO0w8Ui5sZW5ndGg7TCs9MSlqW0wrSC5sZW5ndGhdPVJbTF07cmV0dXJuIGp9O2NlLmV4cG9ydHM9ZnVuY3Rpb24oSCl7dmFyIFI9dGhpcztpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgUnx8IltvYmplY3QgRnVuY3Rpb25dIiE9PWIuYXBwbHkoUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK1IpO2Zvcih2YXIgUCxqPWZ1bmN0aW9uKEgsUil7Zm9yKHZhciBqPVtdLFA9MSxM''@;'; put 'put ''PTA7UDxILmxlbmd0aDtQKz0xLEwrPTEpaltMXT1IW1BdO3JldHVybiBqfShhcmd1bWVudHMpLFk9RCgwLFIubGVuZ3RoLWoubGVuZ3RoKSxCPVtdLFc9MDtXPFk7VysrKUJbV109IiQiK1c7aWYoUD1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKEYsSCl7''@;'; put 'put ''Zm9yKHZhciBSPSIiLGo9MDtqPEYubGVuZ3RoO2orPTEpUis9RltqXSxqKzE8Ri5sZW5ndGgmJihSKz0iLCIpO3JldHVybiBSfShCKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBQKXt2YXIgcT1SLmFw''@;'; put 'put ''cGx5KHRoaXMscChqLGFyZ3VtZW50cykpO3JldHVybiBPYmplY3QocSk9PT1xP3E6dGhpc31yZXR1cm4gUi5hcHBseShILHAoaixhcmd1bWVudHMpKX0pLFIucHJvdG90eXBlKXt2YXIgWj1mdW5jdGlvbigpe307Wi5wcm90b3R5cGU9Ui5wcm90b3R5cGUsUC5wcm90b3R5cGU9bmV3IFosWi5w''@;'; put 'put ''cm90b3R5cGU9bnVsbH1yZXR1cm4gUH19LDg2MTI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NjQ4KTtjZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxEfSwyMTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQsXz1iKDg4OTIpLHA9YigxNjQ4KSxOPWIo''@;'; put 'put ''Mzk4MSksdz1iKDQ3MjYpLEY9Yig2NzEyKSxIPWIoMzQ2NCksUj1iKDQ0NTMpLGo9YigzOTE1KSxQPWIoOTczOCksTD1iKDYzMjkpLFk9YigyMjY0KSxCPWIoNTczMCksVz1iKDcwNyksWj1iKDM4NjIpLHE9Yig5NTUwKSxRPUZ1bmN0aW9uLFg9ZnVuY3Rpb24odmUpe3RyeXtyZXR1cm4gUSgn''@;'; put 'put ''InVzZSBzdHJpY3QiOyByZXR1cm4gKCcrdmUrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSx0ZT1iKDcyOTYpLHJlPWIoNDQyOSksb2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgUn0sZ2U9dGU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG9lfWNhdGNoe3RyeXtyZXR1cm4gdGUoYXJndW1lbnRz''@;'; put 'put ''LCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIG9lfX19KCk6b2UsX2U9YigxNDA1KSgpLFRlPWIoMTYxOCksU2U9Yig4ODk5KSx6ZT1iKDQ0Myksej1iKDE3NjgpLGc9Yig4OTI4KSx5PXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/RDpUZShVaW50OEFycmF5KSxDPXtfX3Byb3Rv''@;'; put 'put ''X186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9EOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9EOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUi''@;'; put 'put ''Ol9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkQsIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpELCIlQXN5bmNGdW5jdGlvbiUiOnksIiVBc3luY0dlbmVyYXRvciUiOnksIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5''@;'; put 'put ''cGUlIjp5LCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9EOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9EOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/RDpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0''@;'; put 'put ''eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0Q6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9EOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQl''@;'; put 'put ''IjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOnAsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOk4sIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5''@;'; put 'put ''PiJ1Ij9EOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0Q6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/RDpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBG''@;'; put 'put ''aW5hbGl6YXRpb25SZWdpc3RyeT4idSI/RDpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6USwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+InUiP0Q6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5''@;'; put 'put ''PiJ1Ij9EOkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP0Q6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoVGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSk6''@;'; put 'put ''RCwiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjpELCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/RDpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA+InUifHwhX2V8fCFUZT9EOlRlKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlTWF0aCUiOk1h''@;'; put 'put ''dGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpfLCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiOnRlLCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlzZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij9EOlByb21pc2UsIiVQ''@;'; put 'put ''cm94eSUiOnR5cGVvZiBQcm94eT4idSI/RDpQcm94eSwiJVJhbmdlRXJyb3IlIjp3LCIlUmVmZXJlbmNlRXJyb3IlIjpGLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij9EOlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2YgU2V0PiJ1Ij9EOlNldCwiJVNldEl0''@;'; put 'put ''ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldD4idSJ8fCFfZXx8IVRlP0Q6VGUoKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSI/RDpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmlu''@;'; put 'put ''ZywiJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKCIiW1N5bWJvbC5pdGVyYXRvcl0oKSk6RCwiJVN5bWJvbCUiOl9lP1N5bWJvbDpELCIlU3ludGF4RXJyb3IlIjpILCIlVGhyb3dUeXBlRXJyb3IlIjpnZSwiJVR5cGVkQXJyYXklIjp4LCIlVHlwZUVycm9yJSI6UiwiJVVp''@;'; put 'put ''bnQ4QXJyYXklIjp0eXBlb2YgVWludDhBcnJheT4idSI/RDpVaW50OEFycmF5LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP0Q6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJheSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/RDpVaW50MTZB''@;'; put 'put ''cnJheSwiJVVpbnQzMkFycmF5JSI6dHlwZW9mIFVpbnQzMkFycmF5PiJ1Ij9EOlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjpqLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij9EOldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP0Q6V2Vha1JlZiwiJVdlYWtTZXQl''@;'; put 'put ''Ijp0eXBlb2YgV2Vha1NldD4idSI/RDpXZWFrU2V0LCIlRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlIjpnLCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSI6eiwiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiOnJlLCIlT2JqZWN0LmdldFByb3RvdHlwZU9mJSI6U2UsIiVNYXRoLmFicyUiOlAs''@;'; put 'put ''IiVNYXRoLmZsb29yJSI6TCwiJU1hdGgubWF4JSI6WSwiJU1hdGgubWluJSI6QiwiJU1hdGgucG93JSI6VywiJU1hdGgucm91bmQlIjpaLCIlTWF0aC5zaWduJSI6cSwiJVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YlIjp6ZX07aWYoVGUpdHJ5e251bGwuZXJyb3J9Y2F0Y2godmUpe3ZhciBUPVRl''@;'; put 'put ''KFRlKHZlKSk7Q1siJUVycm9yLnByb3RvdHlwZSUiXT1UfXZhciBWPWZ1bmN0aW9uIHZlKFhlKXt2YXIgQmU7aWYoIiVBc3luY0Z1bmN0aW9uJSI9PT1YZSlCZT1YKCJhc3luYyBmdW5jdGlvbiAoKSB7fSIpO2Vsc2UgaWYoIiVHZW5lcmF0b3JGdW5jdGlvbiUiPT09WGUpQmU9WCgiZnVuY3Rp''@;'; put 'put ''b24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIj09PVhlKUJlPVgoImFzeW5jIGZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvciUiPT09WGUpe3ZhciBBZT12ZSgiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIik7QWUmJihCZT1BZS5w''@;'; put 'put ''cm90b3R5cGUpfWVsc2UgaWYoIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI9PT1YZSl7dmFyIEZlPXZlKCIlQXN5bmNHZW5lcmF0b3IlIik7RmUmJlRlJiYoQmU9VGUoRmUucHJvdG90eXBlKSl9cmV0dXJuIENbWGVdPUJlLEJlfSxVPXtfX3Byb3RvX186bnVsbCwiJUFycmF5QnVmZmVyUHJv''@;'; put 'put ''dG90eXBlJSI6WyJBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJdLCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJheSIs''@;'; put 'put ''InByb3RvdHlwZSIsImZvckVhY2giXSwiJUFycmF5UHJvdG9fa2V5cyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVuY3Rp''@;'; put 'put ''b24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVhblBy''@;'; put 'put ''b3RvdHlwZSUiOlsiQm9vbGVhbiIsInByb3RvdHlwZSJdLCIlRGF0YVZpZXdQcm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3RvdHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwiJUV2''@;'; put 'put ''YWxFcnJvclByb3RvdHlwZSUiOlsiRXZhbEVycm9yIiwicHJvdG90eXBlIl0sIiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0aW9u''@;'; put 'put ''UHJvdG90eXBlJSI6WyJGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFycmF5''@;'; put 'put ''UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDE2QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIsInBh''@;'; put 'put ''cnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6WyJKU09OIiwic3RyaW5naWZ5Il0sIiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVjdFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVPYmpQcm90b190b1N0cmluZyUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUlIjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVByb21p''@;'; put 'put ''c2VQcm90b190aGVuJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIiwidGhlbiJdLCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jlc29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0sIiVS''@;'; put 'put ''YW5nZUVycm9yUHJvdG90eXBlJSI6WyJSYW5nZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVnRXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5cGUl''@;'; put 'put ''IjpbIlNldCIsInByb3RvdHlwZSJdLCIlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIlU3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVN5bnRheEVycm9yUHJvdG90eXBlJSI6WyJTeW50YXhFcnJvciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBlJSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVVp''@;'; put 'put ''bnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIl0s''@;'; put 'put ''IiVVaW50MzJBcnJheVByb3RvdHlwZSUiOlsiVWludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIsInByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlwZSUi''@;'; put 'put ''OlsiV2Vha1NldCIsInByb3RvdHlwZSJdfSxFPWIoODYxMiksbT1iKDg4MjQpLEE9RS5jYWxsKGcsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksYWU9RS5jYWxsKHosQXJyYXkucHJvdG90eXBlLnNwbGljZSksbmU9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxsZT1FLmNhbGwo''@;'; put 'put ''ZyxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSx3ZT1FLmNhbGwoZyxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLFVlPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2cs''@;'; put 'put ''UWU9L1xcKFxcKT8vZyxNZT1mdW5jdGlvbihYZSxCZSl7dmFyIEZlLEFlPVhlO2lmKG0oVSxBZSkmJihBZT0iJSIrKEZlPVVbQWVdKVswXSsiJSIpLG0oQyxBZSkpe3ZhciBSZT1DW0FlXTtpZihSZT09PXkmJihSZT1WKEFlKSksdHlwZW9mIFJlPiJ1IiYmIUJlKXRocm93IG5ldyBSKCJpbnRy''@;'; put 'put ''aW5zaWMgIitYZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpGZSxuYW1lOkFlLHZhbHVlOlJlfX10aHJvdyBuZXcgSCgiaW50cmluc2ljICIrWGUrIiBkb2VzIG5vdCBleGlzdCEiKX07Y2UuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihYZSxCZSl7aWYoInN0cmluZyIhPXR5cGVvZiBYZXx8MD09PVhlLmxlbmd0aCl0aHJvdyBuZXcgUigiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIEJlKXRocm93IG5ldyBSKCci''@;'; put 'put ''YWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT13ZSgvXiU/W14lXSolPyQvLFhlKSl0aHJvdyBuZXcgSCgiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMg''@;'; put 'put ''bmFtZSIpO3ZhciBBZT1mdW5jdGlvbihYZSl7dmFyIEJlPWxlKFhlLDAsMSksQWU9bGUoWGUsLTEpO2lmKCIlIj09PUJlJiYiJSIhPT1BZSl0aHJvdyBuZXcgSCgiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PUFlJiYiJSIhPT1CZSl0''@;'; put 'put ''aHJvdyBuZXcgSCgiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBGZT1bXTtyZXR1cm4gbmUoWGUsVWUsZnVuY3Rpb24oUmUsSWUsSGUsRGUpe0ZlW0ZlLmxlbmd0aF09SGU/bmUoRGUsUWUsIiQxIik6SWV8fFJlfSksRmV9KFhlKSxGZT1BZS5s''@;'; put 'put ''ZW5ndGg+MD9BZVswXToiIixSZT1NZSgiJSIrRmUrIiUiLEJlKSxJZT1SZS5uYW1lLEhlPVJlLnZhbHVlLERlPSExLGtlPVJlLmFsaWFzO2tlJiYoRmU9a2VbMF0sYWUoQWUsQShbMCwxXSxrZSkpKTtmb3IodmFyIF90PTEsbnQ9ITA7X3Q8QWUubGVuZ3RoO190Kz0xKXt2YXIgSmU9QWVbX3Rd''@;'; put 'put ''LGxuPWxlKEplLDAsMSkseXQ9bGUoSmUsLTEpO2lmKCgnIic9PT1sbnx8IiciPT09bG58fCJgIj09PWxufHwnIic9PT15dHx8IiciPT09eXR8fCJgIj09PXl0KSYmbG4hPT15dCl0aHJvdyBuZXcgSCgicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3Rl''@;'; put 'put ''cyIpO2lmKCgiY29uc3RydWN0b3IiPT09SmV8fCFudCkmJihEZT0hMCksbShDLEllPSIlIisoRmUrPSIuIitKZSkrIiUiKSlIZT1DW0llXTtlbHNlIGlmKG51bGwhPUhlKXtpZighKEplIGluIEhlKSl7aWYoIUJlKXRocm93IG5ldyBSKCJiYXNlIGludHJpbnNpYyBmb3IgIitYZSsiIGV4aXN0''@;'; put 'put ''cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZih0ZSYmX3QrMT49QWUubGVuZ3RoKXt2YXIgU3Q9dGUoSGUsSmUpO0hlPShudD0hIVN0KSYmImdldCJpbiBTdCYmISgib3JpZ2luYWxWYWx1ZSJpbiBTdC5nZXQpP1N0LmdldDpIZVtKZV19ZWxzZSBudD1t''@;'; put 'put ''KEhlLEplKSxIZT1IZVtKZV07bnQmJiFEZSYmKENbSWVdPUhlKX19cmV0dXJuIEhlfX0sODg5OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg4OTIpO2NlLmV4cG9ydHM9RC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sNDQzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9dHlw''@;'; put 'put ''ZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0LmdldFByb3RvdHlwZU9mfHxudWxsfSwxNjE4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDQzKSxfPWIoODg5OSkscD1iKDY1MDQpO2NlLmV4cG9ydHM9RD9mdW5jdGlvbih3KXtyZXR1cm4gRCh3KX06Xz9mdW5jdGlvbih3KXtpZigh''@;'; put 'put ''d3x8Im9iamVjdCIhPXR5cGVvZiB3JiYiZnVuY3Rpb24iIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJnZXRQcm90bzogbm90IGFuIG9iamVjdCIpO3JldHVybiBfKHcpfTpwP2Z1bmN0aW9uKHcpe3JldHVybiBwKHcpfTpudWxsfSw2OTA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhw''@;'; put 'put ''b3J0cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfSw3Mjk2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjkwKTtpZihEKXRyeXtEKFtdLCJsZW5ndGgiKX1jYXRjaHtEPW51bGx9Y2UuZXhwb3J0cz1EfSw2NDU4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gYihEKXtpZihudWxsPT09RHx8Im9iamVjdCIhPXR5cGVvZiBEKXJldHVybiBEO2lmKEQgaW5zdGFuY2VvZiBPYmplY3QpdmFyIF89e19fcHJvdG9fXzpKKEQpfTtlbHNlIF89T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRCku''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihwKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxwLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRCxwKSl9KSxffTt2YXIgSj1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEQpe3JldHVybiBELl9fcHJvdG9fX319LDc3OihjZSxKLGIpPT57''@;'; put 'put ''dmFyIFIsaixEPWIoNDE1NSksXz1iKDUxMDgpLHA9Yig1NDQzKSxOPWIoMjE2MSksdz1iKDg1MjApLEY9Yig2NDU4KSxIPWIoOTUzOSk7ZnVuY3Rpb24gTCh0ZSxyZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRlLFIse2dldDpmdW5jdGlvbigpe3JldHVybiByZX19KX0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj8oUj1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5xdWV1ZSIpLGo9U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucHJldmlvdXMiKSk6KFI9Il9fX2dyYWNlZnVsLWZzLnF1ZXVlIixqPSJfX19ncmFjZWZ1bC1mcy5wcmV2''@;'; put 'put ''aW91cyIpO3ZhciBxLFk9ZnVuY3Rpb24gUCgpe307ZnVuY3Rpb24gVyh0ZSl7Tih0ZSksdGUuZ3JhY2VmdWxpZnk9Vyx0ZS5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uIGxlKG90LE1lKXtyZXR1cm4gbmV3IHRlLlJlYWRTdHJlYW0ob3QsTWUpfSx0ZS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5j''@;'; put 'put ''dGlvbiB3ZShvdCxNZSl7cmV0dXJuIG5ldyB0ZS5Xcml0ZVN0cmVhbShvdCxNZSl9O3ZhciByZT10ZS5yZWFkRmlsZTt0ZS5yZWFkRmlsZT1mdW5jdGlvbiBvZShvdCxNZSx2ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE1lJiYodmU9TWUsTWU9bnVsbCksZnVuY3Rpb24gWGUoQmUsQWUs''@;'; put 'put ''RmUsUmUpe3JldHVybiByZShCZSxBZSxmdW5jdGlvbihJZSl7IUllfHwiRU1GSUxFIiE9PUllLmNvZGUmJiJFTkZJTEUiIT09SWUuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgRmUmJkZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpaKFtYZSxbQmUsQWUsRmVdLEllLFJlfHxEYXRlLm5vdygpLERh''@;'; put 'put ''dGUubm93KCldKX0pfShvdCxNZSx2ZSl9O3ZhciBnZT10ZS53cml0ZUZpbGU7dGUud3JpdGVGaWxlPWZ1bmN0aW9uIF9lKG90LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiBCZShBZSxGZSxSZSxJZSxIZSl7cmV0dXJuIGdl''@;'; put 'put ''KEFlLEZlLFJlLGZ1bmN0aW9uKERlKXshRGV8fCJFTUZJTEUiIT09RGUuY29kZSYmIkVORklMRSIhPT1EZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlooW0JlLFtBZSxGZSxSZSxJZV0sRGUsSGV8fERhdGUubm93KCksRGF0ZS5ub3coKV0p''@;'; put 'put ''fSl9KG90LE1lLHZlLFhlKX07dmFyIFRlPXRlLmFwcGVuZEZpbGU7VGUmJih0ZS5hcHBlbmRGaWxlPWZ1bmN0aW9uIFNlKG90LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxmdW5jdGlvbiBCZShBZSxGZSxSZSxJZSxIZSl7cmV0dXJuIFRl''@;'; put 'put ''KEFlLEZlLFJlLGZ1bmN0aW9uKERlKXshRGV8fCJFTUZJTEUiIT09RGUuY29kZSYmIkVORklMRSIhPT1EZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlooW0JlLFtBZSxGZSxSZSxJZV0sRGUsSGV8fERhdGUubm93KCksRGF0ZS5ub3coKV0p''@;'; put 'put ''fSl9KG90LE1lLHZlLFhlKX0pO3ZhciB6ZT10ZS5jb3B5RmlsZTt6ZSYmKHRlLmNvcHlGaWxlPWZ1bmN0aW9uIHoob3QsTWUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPTApLGZ1bmN0aW9uIEJlKEFlLEZlLFJlLEllLEhlKXtyZXR1cm4gemUoQWUsRmUs''@;'; put 'put ''UmUsZnVuY3Rpb24oRGUpeyFEZXx8IkVNRklMRSIhPT1EZS5jb2RlJiYiRU5GSUxFIiE9PURlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WihbQmUsW0FlLEZlLFJlLEllXSxEZSxIZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3Qs''@;'; put 'put ''TWUsdmUsWGUpfSk7dmFyIGc9dGUucmVhZGRpcjt0ZS5yZWFkZGlyPWZ1bmN0aW9uIHgob3QsTWUsdmUpeyJmdW5jdGlvbiI9PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpO3ZhciBYZT15LnRlc3QoRC52ZXJzaW9uKT9mdW5jdGlvbihGZSxSZSxJZSxIZSl7cmV0dXJuIGcoRmUsQmUoRmUs''@;'; put 'put ''UmUsSWUsSGUpKX06ZnVuY3Rpb24oRmUsUmUsSWUsSGUpe3JldHVybiBnKEZlLFJlLEJlKEZlLFJlLEllLEhlKSl9O3JldHVybiBYZShvdCxNZSx2ZSk7ZnVuY3Rpb24gQmUoQWUsRmUsUmUsSWUpe3JldHVybiBmdW5jdGlvbihIZSxEZSl7IUhlfHwiRU1GSUxFIiE9PUhlLmNvZGUmJiJFTkZJ''@;'; put 'put ''TEUiIT09SGUuY29kZT8oRGUmJkRlLnNvcnQmJkRlLnNvcnQoKSwiZnVuY3Rpb24iPT10eXBlb2YgUmUmJlJlLmNhbGwodGhpcyxIZSxEZSkpOlooW1hlLFtBZSxGZSxSZV0sSGUsSWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfX19O3ZhciB5PS9edlswLTVdXC4vO2lmKCJ2MC44Ij09PUQu''@;'; put 'put ''dmVyc2lvbi5zdWJzdHIoMCw0KSl7dmFyIEM9dyh0ZSk7bT1DLlJlYWRTdHJlYW0sYWU9Qy5Xcml0ZVN0cmVhbX12YXIgVD10ZS5SZWFkU3RyZWFtO1QmJihtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFQucHJvdG90eXBlKSxtLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIEEoKXt2YXIgb3Q9''@;'; put 'put ''dGhpcztRZShvdC5wYXRoLG90LmZsYWdzLG90Lm1vZGUsZnVuY3Rpb24oTWUsdmUpe01lPyhvdC5hdXRvQ2xvc2UmJm90LmRlc3Ryb3koKSxvdC5lbWl0KCJlcnJvciIsTWUpKToob3QuZmQ9dmUsb3QuZW1pdCgib3BlbiIsdmUpLG90LnJlYWQoKSl9KX0pO3ZhciBWPXRlLldyaXRlU3RyZWFt''@;'; put 'put ''O1YmJihhZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShWLnByb3RvdHlwZSksYWUucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gbmUoKXt2YXIgb3Q9dGhpcztRZShvdC5wYXRoLG90LmZsYWdzLG90Lm1vZGUsZnVuY3Rpb24oTWUsdmUpe01lPyhvdC5kZXN0cm95KCksb3QuZW1pdCgiZXJyb3Ii''@;'; put 'put ''LE1lKSk6KG90LmZkPXZlLG90LmVtaXQoIm9wZW4iLHZlKSl9KX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwiUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBtfSxzZXQ6ZnVuY3Rpb24ob3Qpe209b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KHRlLCJXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBhZX0sc2V0OmZ1bmN0aW9uKG90KXthZT1vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgVT1tO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwiRmlsZVJlYWRTdHJlYW0i''@;'; put 'put ''LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVX0sc2V0OmZ1bmN0aW9uKG90KXtVPW90fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBFPWFlO2Z1bmN0aW9uIG0ob3QsTWUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8oVC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6''@;'; put 'put ''bS5hcHBseShPYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxhcmd1bWVudHMpfWZ1bmN0aW9uIGFlKG90LE1lKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGFlPyhWLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTphZS5hcHBseShPYmplY3QuY3JlYXRlKGFlLnByb3RvdHlwZSksYXJndW1l''@;'; put 'put ''bnRzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodGUsIkZpbGVXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBFfSxzZXQ6ZnVuY3Rpb24ob3Qpe0U9b3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIFVlPXRlLm9wZW47ZnVuY3Rpb24gUWUob3QsTWUsdmUs''@;'; put 'put ''WGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIEJlKEFlLEZlLFJlLEllLEhlKXtyZXR1cm4gVWUoQWUsRmUsUmUsZnVuY3Rpb24oRGUsa2UpeyFEZXx8IkVNRklMRSIhPT1EZS5jb2RlJiYiRU5GSUxFIiE9PURlLmNvZGU/ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WihbQmUsW0FlLEZlLFJlLEllXSxEZSxIZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0ob3QsTWUsdmUsWGUpfXJldHVybiB0ZS5vcGVuPVFlLHRlfWZ1bmN0aW9uIFoodGUpe1koIkVOUVVFVUUiLHRlWzBdLm5hbWUs''@;'; put 'put ''dGVbMV0pLHBbUl0ucHVzaCh0ZSksWCgpfWZ1bmN0aW9uIFEoKXtmb3IodmFyIHRlPURhdGUubm93KCkscmU9MDtyZTxwW1JdLmxlbmd0aDsrK3JlKXBbUl1bcmVdLmxlbmd0aD4yJiYocFtSXVtyZV1bM109dGUscFtSXVtyZV1bNF09dGUpO1goKX1mdW5jdGlvbiBYKCl7aWYoY2xlYXJUaW1l''@;'; put 'put ''b3V0KHEpLHE9dm9pZCAwLDAhPT1wW1JdLmxlbmd0aCl7dmFyIHRlPXBbUl0uc2hpZnQoKSxyZT10ZVswXSxvZT10ZVsxXSxnZT10ZVsyXSxfZT10ZVszXSxUZT10ZVs0XTtpZih2b2lkIDA9PT1fZSlZKCJSRVRSWSIscmUubmFtZSxvZSkscmUuYXBwbHkobnVsbCxvZSk7ZWxzZSBpZihEYXRl''@;'; put 'put ''Lm5vdygpLV9lPj02ZTQpe1koIlRJTUVPVVQiLHJlLm5hbWUsb2UpO3ZhciBTZT1vZS5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgU2UmJlNlLmNhbGwobnVsbCxnZSl9ZWxzZXt2YXIgemU9RGF0ZS5ub3coKS1UZSx6PU1hdGgubWF4KFRlLV9lLDEpO3plPj1NYXRoLm1pbigxLjIqeiwxMDAp''@;'; put 'put ''PyhZKCJSRVRSWSIscmUubmFtZSxvZSkscmUuYXBwbHkobnVsbCxvZS5jb25jYXQoW19lXSkpKTpwW1JdLnB1c2godGUpfXZvaWQgMD09PXEmJihxPXNldFRpbWVvdXQoWCwwKSl9fUguZGVidWdsb2c/WT1ILmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChELmVudi5OT0RFX0RF''@;'; put 'put ''QlVHfHwiIikmJihZPWZ1bmN0aW9uKCl7dmFyIHRlPUguZm9ybWF0LmFwcGx5KEgsYXJndW1lbnRzKTt0ZT0iR0ZTNDogIit0ZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIpLF8uZXJyb3IodGUpfSkscFtSXXx8KEwocCxiLmdbUl18fFtdKSxwLmNsb3NlPWZ1bmN0aW9uKHRlKXtmdW5j''@;'; put 'put ''dGlvbiByZShvZSxnZSl7cmV0dXJuIHRlLmNhbGwocCxvZSxmdW5jdGlvbihfZSl7X2V8fFEoKSwiZnVuY3Rpb24iPT10eXBlb2YgZ2UmJmdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsaix7dmFsdWU6dGV9KSxyZX0ocC5jbG9zZSks''@;'; put 'put ''cC5jbG9zZVN5bmM9ZnVuY3Rpb24odGUpe2Z1bmN0aW9uIHJlKG9lKXt0ZS5hcHBseShwLGFyZ3VtZW50cyksUSgpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsaix7dmFsdWU6dGV9KSxyZX0ocC5jbG9zZVN5bmMpLC9cYmdmczRcYi9pLnRlc3QoRC5lbnYuTk9ERV9ERUJVR3x8''@;'; put 'put ''IiIpJiZELm9uKCJleGl0IixmdW5jdGlvbigpe1kocFtSXSksYig5MjgyKS5lcXVhbChwW1JdLmxlbmd0aCwwKX0pKSxiLmdbUl18fEwoYi5nLHBbUl0pLGNlLmV4cG9ydHM9VyhGKHApKSxELmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCYmIXAuX19wYXRjaGVkJiYoY2UuZXhw''@;'; put 'put ''b3J0cz1XKHApLHAuX19wYXRjaGVkPSEwKX0sODUyMDooY2UsSixiKT0+e3ZhciBEPWIoNDE1NSksXz1iKDI4MzApLlN0cmVhbTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTil7cmV0dXJue1JlYWRTdHJlYW06ZnVuY3Rpb24gdyhILFIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHcpKXJldHVybiBu''@;'; put 'put ''ZXcgdyhILFIpO18uY2FsbCh0aGlzKTt2YXIgaj10aGlzO3RoaXMucGF0aD1ILHRoaXMuZmQ9bnVsbCx0aGlzLnJlYWRhYmxlPSEwLHRoaXMucGF1c2VkPSExLHRoaXMuZmxhZ3M9InIiLHRoaXMubW9kZT00MzgsdGhpcy5idWZmZXJTaXplPTY1NTM2LFI9Unx8e307Zm9yKHZhciBQPU9iamVj''@;'; put 'put ''dC5rZXlzKFIpLEw9MCxZPVAubGVuZ3RoO0w8WTtMKyspe3ZhciBCPVBbTF07dGhpc1tCXT1SW0JdfWlmKHRoaXMuZW5jb2RpbmcmJnRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyksdm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93''@;'; put 'put ''IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHZvaWQgMD09PXRoaXMuZW5kKXRoaXMuZW5kPTEvMDtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5lbmQpdGhyb3cgVHlwZUVycm9yKCJlbmQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ+dGhpcy5l''@;'; put 'put ''bmQpdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlIDw9IGVuZCIpO3RoaXMucG9zPXRoaXMuc3RhcnR9bnVsbD09PXRoaXMuZmQ/Ti5vcGVuKHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSxmdW5jdGlvbihXLFope2lmKFcpcmV0dXJuIGouZW1pdCgiZXJyb3IiLFcpLHZvaWQo''@;'; put 'put ''ai5yZWFkYWJsZT0hMSk7ai5mZD1aLGouZW1pdCgib3BlbiIsWiksai5fcmVhZCgpfSk6RC5uZXh0VGljayhmdW5jdGlvbigpe2ouX3JlYWQoKX0pfSxXcml0ZVN0cmVhbTpmdW5jdGlvbiBGKEgsUil7aWYoISh0aGlzIGluc3RhbmNlb2YgRikpcmV0dXJuIG5ldyBGKEgsUik7Xy5jYWxsKHRo''@;'; put 'put ''aXMpLHRoaXMucGF0aD1ILHRoaXMuZmQ9bnVsbCx0aGlzLndyaXRhYmxlPSEwLHRoaXMuZmxhZ3M9InciLHRoaXMuZW5jb2Rpbmc9ImJpbmFyeSIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ5dGVzV3JpdHRlbj0wLFI9Unx8e307Zm9yKHZhciBqPU9iamVjdC5rZXlzKFIpLFA9MCxMPWoubGVuZ3Ro''@;'; put 'put ''O1A8TDtQKyspe3ZhciBZPWpbUF07dGhpc1tZXT1SW1ldfWlmKHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PDApdGhyb3cgbmV3IEVycm9yKCJz''@;'; put 'put ''dGFydCBtdXN0IGJlID49IHplcm8iKTt0aGlzLnBvcz10aGlzLnN0YXJ0fXRoaXMuYnVzeT0hMSx0aGlzLl9xdWV1ZT1bXSxudWxsPT09dGhpcy5mZCYmKHRoaXMuX29wZW49Ti5vcGVuLHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sdGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2Rl''@;'; put 'put ''LHZvaWQgMF0pLHRoaXMuZmx1c2goKSl9fX19LDIxNjE6KGNlLEosYik9Pnt2YXIgRD1iKDQxNTUpLF89YigzMjA4KSxwPUQuY3dkLE49bnVsbCx3PUQuZW52LkdSQUNFRlVMX0ZTX1BMQVRGT1JNfHxELnBsYXRmb3JtO0QuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIE58fChOPXAuY2FsbChEKSks''@;'; put 'put ''Tn07dHJ5e0QuY3dkKCl9Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBELmNoZGlyKXt2YXIgRj1ELmNoZGlyO0QuY2hkaXI9ZnVuY3Rpb24oUil7Tj1udWxsLEYuY2FsbChELFIpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihELmNoZGlyLEYpfWNl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24gSChSKXtmdW5jdGlvbiBMKFgpe3JldHVybiBYJiZmdW5jdGlvbih0ZSxyZSxvZSl7cmV0dXJuIFguY2FsbChSLHRlLHJlLGZ1bmN0aW9uKGdlKXtRKGdlKSYmKGdlPW51bGwpLG9lJiZvZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gWShYKXty''@;'; put 'put ''ZXR1cm4gWCYmZnVuY3Rpb24odGUscmUpe3RyeXtyZXR1cm4gWC5jYWxsKFIsdGUscmUpfWNhdGNoKG9lKXtpZighUShvZSkpdGhyb3cgb2V9fX1mdW5jdGlvbiBCKFgpe3JldHVybiBYJiZmdW5jdGlvbih0ZSxyZSxvZSxnZSl7cmV0dXJuIFguY2FsbChSLHRlLHJlLG9lLGZ1bmN0aW9uKF9l''@;'; put 'put ''KXtRKF9lKSYmKF9lPW51bGwpLGdlJiZnZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gVyhYKXtyZXR1cm4gWCYmZnVuY3Rpb24odGUscmUsb2Upe3RyeXtyZXR1cm4gWC5jYWxsKFIsdGUscmUsb2UpfWNhdGNoKGdlKXtpZighUShnZSkpdGhyb3cgZ2V9fX1mdW5jdGlvbiBa''@;'; put 'put ''KFgpe3JldHVybiBYJiZmdW5jdGlvbih0ZSxyZSxvZSl7ZnVuY3Rpb24gZ2UoX2UsVGUpe1RlJiYoVGUudWlkPDAmJihUZS51aWQrPTQyOTQ5NjcyOTYpLFRlLmdpZDwwJiYoVGUuZ2lkKz00Mjk0OTY3Mjk2KSksb2UmJm9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgcmUmJihvZT1yZSxyZT1udWxsKSxyZT9YLmNhbGwoUix0ZSxyZSxnZSk6WC5jYWxsKFIsdGUsZ2UpfX1mdW5jdGlvbiBxKFgpe3JldHVybiBYJiZmdW5jdGlvbih0ZSxyZSl7dmFyIG9lPXJlP1guY2FsbChSLHRlLHJlKTpYLmNhbGwoUix0ZSk7cmV0dXJuIG9lJiYob2UudWlk''@;'; put 'put ''PDAmJihvZS51aWQrPTQyOTQ5NjcyOTYpLG9lLmdpZDwwJiYob2UuZ2lkKz00Mjk0OTY3Mjk2KSksb2V9fWZ1bmN0aW9uIFEoWCl7cmV0dXJuIVh8fCJFTk9TWVMiPT09WC5jb2RlfHwhKEQuZ2V0dWlkJiYwPT09RC5nZXR1aWQoKXx8IkVJTlZBTCIhPT1YLmNvZGUmJiJFUEVSTSIhPT1YLmNv''@;'; put 'put ''ZGUpfV8uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZELnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24gaihYKXtYLmxjaG1vZD1mdW5jdGlvbih0ZSxyZSxvZSl7WC5vcGVuKHRlLF8uT19XUk9OTFl8Xy5PX1NZTUxJTksscmUsZnVuY3Rpb24o''@;'; put 'put ''Z2UsX2Upe2dlP29lJiZvZShnZSk6WC5mY2htb2QoX2UscmUsZnVuY3Rpb24oVGUpe1guY2xvc2UoX2UsZnVuY3Rpb24oU2Upe29lJiZvZShUZXx8U2UpfSl9KX0pfSxYLmxjaG1vZFN5bmM9ZnVuY3Rpb24odGUscmUpe3ZhciBfZSxvZT1YLm9wZW5TeW5jKHRlLF8uT19XUk9OTFl8Xy5PX1NZ''@;'; put 'put ''TUxJTksscmUpLGdlPSEwO3RyeXtfZT1YLmZjaG1vZFN5bmMob2UscmUpLGdlPSExfWZpbmFsbHl7aWYoZ2UpdHJ5e1guY2xvc2VTeW5jKG9lKX1jYXRjaHt9ZWxzZSBYLmNsb3NlU3luYyhvZSl9cmV0dXJuIF9lfX0oUiksUi5sdXRpbWVzfHxmdW5jdGlvbiBQKFgpe18uaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIk9fU1lNTElOSyIpJiZYLmZ1dGltZXM/KFgubHV0aW1lcz1mdW5jdGlvbih0ZSxyZSxvZSxnZSl7WC5vcGVuKHRlLF8uT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRlKXtfZT9nZSYmZ2UoX2UpOlguZnV0aW1lcyhUZSxyZSxvZSxmdW5jdGlvbihTZSl7WC5jbG9zZShUZSxmdW5jdGlvbih6''@;'; put 'put ''ZSl7Z2UmJmdlKFNlfHx6ZSl9KX0pfSl9LFgubHV0aW1lc1N5bmM9ZnVuY3Rpb24odGUscmUsb2Upe3ZhciBfZSxnZT1YLm9wZW5TeW5jKHRlLF8uT19TWU1MSU5LKSxUZT0hMDt0cnl7X2U9WC5mdXRpbWVzU3luYyhnZSxyZSxvZSksVGU9ITF9ZmluYWxseXtpZihUZSl0cnl7WC5jbG9zZVN5''@;'; put 'put ''bmMoZ2UpfWNhdGNoe31lbHNlIFguY2xvc2VTeW5jKGdlKX1yZXR1cm4gX2V9KTpYLmZ1dGltZXMmJihYLmx1dGltZXM9ZnVuY3Rpb24odGUscmUsb2UsZ2Upe2dlJiZELm5leHRUaWNrKGdlKX0sWC5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShSKSxSLmNob3duPUIoUi5jaG93biksUi5m''@;'; put 'put ''Y2hvd249QihSLmZjaG93biksUi5sY2hvd249QihSLmxjaG93biksUi5jaG1vZD1MKFIuY2htb2QpLFIuZmNobW9kPUwoUi5mY2htb2QpLFIubGNobW9kPUwoUi5sY2htb2QpLFIuY2hvd25TeW5jPVcoUi5jaG93blN5bmMpLFIuZmNob3duU3luYz1XKFIuZmNob3duU3luYyksUi5sY2hvd25T''@;'; put 'put ''eW5jPVcoUi5sY2hvd25TeW5jKSxSLmNobW9kU3luYz1ZKFIuY2htb2RTeW5jKSxSLmZjaG1vZFN5bmM9WShSLmZjaG1vZFN5bmMpLFIubGNobW9kU3luYz1ZKFIubGNobW9kU3luYyksUi5zdGF0PVooUi5zdGF0KSxSLmZzdGF0PVooUi5mc3RhdCksUi5sc3RhdD1aKFIubHN0YXQpLFIuc3Rh''@;'; put 'put ''dFN5bmM9cShSLnN0YXRTeW5jKSxSLmZzdGF0U3luYz1xKFIuZnN0YXRTeW5jKSxSLmxzdGF0U3luYz1xKFIubHN0YXRTeW5jKSxSLmNobW9kJiYhUi5sY2htb2QmJihSLmxjaG1vZD1mdW5jdGlvbihYLHRlLHJlKXtyZSYmRC5uZXh0VGljayhyZSl9LFIubGNobW9kU3luYz1mdW5jdGlvbigp''@;'; put 'put ''e30pLFIuY2hvd24mJiFSLmxjaG93biYmKFIubGNob3duPWZ1bmN0aW9uKFgsdGUscmUsb2Upe29lJiZELm5leHRUaWNrKG9lKX0sUi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PXcmJihSLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgUi5yZW5hbWU/Ui5yZW5hbWU6ZnVu''@;'; put 'put ''Y3Rpb24oWCl7ZnVuY3Rpb24gdGUocmUsb2UsZ2Upe3ZhciBfZT1EYXRlLm5vdygpLFRlPTA7WChyZSxvZSxmdW5jdGlvbiBTZSh6ZSl7aWYoemUmJigiRUFDQ0VTIj09PXplLmNvZGV8fCJFUEVSTSI9PT16ZS5jb2RlfHwiRUJVU1kiPT09emUuY29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJl''@;'; put 'put ''dHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ui5zdGF0KG9lLGZ1bmN0aW9uKHosZyl7eiYmIkVOT0VOVCI9PT16LmNvZGU/WChyZSxvZSxTZSk6Z2UoemUpfSl9LFRlKSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO2dlJiZnZSh6ZSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZP''@;'; put 'put ''YmplY3Quc2V0UHJvdG90eXBlT2YodGUsWCksdGV9KFIucmVuYW1lKSksUi5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBSLnJlYWQ/Ui5yZWFkOmZ1bmN0aW9uKFgpe2Z1bmN0aW9uIHRlKHJlLG9lLGdlLF9lLFRlLFNlKXt2YXIgemU7aWYoU2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTZSl7dmFy''@;'; put 'put ''IHo9MDt6ZT1mdW5jdGlvbihnLHkseCl7aWYoZyYmIkVBR0FJTiI9PT1nLmNvZGUmJno8MTApcmV0dXJuIHorKyxYLmNhbGwoUixyZSxvZSxnZSxfZSxUZSx6ZSk7U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gWC5jYWxsKFIscmUsb2UsZ2UsX2UsVGUsemUpfXJldHVybiBPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZih0ZSxYKSx0ZX0oUi5yZWFkKSxSLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBSLnJlYWRTeW5jP1IucmVhZFN5bmM6ZnVuY3Rpb24oWCl7cmV0dXJuIGZ1bmN0aW9uKHRlLHJlLG9lLGdlLF9lKXtmb3IodmFyIFRl''@;'; put 'put ''PTA7Oyl0cnl7cmV0dXJuIFguY2FsbChSLHRlLHJlLG9lLGdlLF9lKX1jYXRjaChTZSl7aWYoIkVBR0FJTiI9PT1TZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10aHJvdyBTZX19fShSLnJlYWRTeW5jKX19LDEwNDQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NDI5KSxf''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuISFEfTtfLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09RChbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LGNlLmV4cG9ydHM9X30sMTQwNTooY2Us''@;'; put 'put ''SixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89Yig1NDE5KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgRCgiZm9vIikm''@;'; put 'put ''JiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNTQxOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0''@;'; put 'put ''dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIGI9e30sRD1TeW1ib2woInRlc3QiKSxfPU9iamVjdChEKTtpZigic3RyaW5nIj09dHlwZW9mIER8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEQp''@;'; put 'put ''fHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSlyZXR1cm4hMTtmb3IodmFyIE4gaW4gYltEXT00MixiKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKGIpLmxlbmd0aHx8ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikubGVuZ3RoKXJldHVybiExO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYik7aWYoMSE9PXcubGVuZ3RofHx3WzBdIT09RHx8IU9iamVjdC5w''@;'; put 'put ''cm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLEQpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsRCk7aWYoNDIhPT1GLnZhbHVlfHwh''@;'; put 'put ''MCE9PUYuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1NDE5KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEQoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5OihjZSxKLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBEPWIoOTUwOSkuQnVmZmVyLF89YigyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gTihSKXtfLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9RC5hbGxvY1Vuc2FmZShSKSx0aGlzLl9ibG9ja1NpemU9Uix0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5f''@;'; put 'put ''ZmluYWxpemVkPSExfWIoNTcxNykoTixfKSxOLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIsaixQKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLGopfWNhdGNoKFkpe0w9WX1QKEwpfSxOLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIGo9bnVsbDt0cnl7dGhp''@;'; put 'put ''cy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKFApe2o9UH1SKGopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsRj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEQucHJvdG90eXBlIGluc3RhbmNlb2YgVWlu''@;'; put 'put ''dDhBcnJheXx8RC5UWVBFRF9BUlJBWV9TVVBQT1JUKTtOLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUixqKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0aW9uIEgoUixqKXtpZihSIGluc3RhbmNlb2YgRClyZXR1''@;'; put 'put ''cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEQuZnJvbShSLGopO2lmKEYmJkFycmF5QnVmZmVyLmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gRC5hbGxvYygwKTt2YXIgUD1ELmZyb20oUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYo''@;'; put 'put ''UC5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBQfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxELmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihS''@;'; put 'put ''KSlyZXR1cm4gRC5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShSLGopO2Zvcih2YXIgUD10aGlzLl9ibG9jayxM''@;'; put 'put ''PTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBZPXRoaXMuX2Jsb2NrT2Zmc2V0O1k8dGhpcy5fYmxvY2tTaXplOylQW1krK109UltMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtMPFIubGVuZ3RoOylQ''@;'; put 'put ''W3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTCsrXTtmb3IodmFyIEI9MCxXPTgqUi5sZW5ndGg7Vz4wOysrQil0aGlzLl9sZW5ndGhbQl0rPVcsKFc9dGhpcy5fbGVuZ3RoW0JdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtCXS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sTi5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIp''@;'; put 'put ''O3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgaj10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoaj1qLnRvU3RyaW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBQPTA7UDw0OysrUCl0aGlzLl9sZW5ndGhbUF09MDtyZXR1cm4gan0sTi5wcm90''@;'; put 'put ''b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sY2UuZXhwb3J0cz1OfSwzNzE1OihjZSxKLGIpPT57dmFyIEQ9SjtELnV0aWxzPWIoNjQzNiksRC5jb21tb249Yig1NzcyKSxELnNoYT1iKDkwNDEpLEQucmlwZW1k''@;'; put 'put ''PWIoMjk0OSksRC5obWFjPWIoMjM0NCksRC5zaGExPUQuc2hhLnNoYTEsRC5zaGEyNTY9RC5zaGEuc2hhMjU2LEQuc2hhMjI0PUQuc2hhLnNoYTIyNCxELnNoYTM4ND1ELnNoYS5zaGEzODQsRC5zaGE1MTI9RC5zaGEuc2hhNTEyLEQucmlwZW1kMTYwPUQucmlwZW1kLnJpcGVtZDE2MH0sNTc3''@;'; put 'put ''MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0MzYpLF89Yig5NzQ2KTtmdW5jdGlvbiBwKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25z''@;'; put 'put ''dHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVs''@;'; put 'put ''dGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1KLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LEYpe2lmKHc9RC50b0FycmF5KHcsRiksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVu''@;'; put 'put ''Z3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEg9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUgsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51''@;'; put 'put ''bGwpLHc9RC5qb2luMzIodywwLHcubGVuZ3RoLUgsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5sZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsRj10aGlzLl9kZWx0YTgsSD1GLSh3K3RoaXMucGFkTGVuZ3RoKSVGLFI9bmV3''@;'; put 'put ''IEFycmF5KEgrdGhpcy5wYWRMZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgaj0xO2o8SDtqKyspUltqXT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgUD04O1A8dGhpcy5wYWRMZW5ndGg7UCsrKVJbaisrXT0wO1JbaisrXT0wLFJbaisrXT0wLFJbaisrXT0wLFJbaisr''@;'; put 'put ''XT0wLFJbaisrXT13Pj4+MjQmMjU1LFJbaisrXT13Pj4+MTYmMjU1LFJbaisrXT13Pj4+OCYyNTUsUltqKytdPTI1NSZ3fWVsc2UgZm9yKFJbaisrXT0yNTUmdyxSW2orK109dz4+PjgmMjU1LFJbaisrXT13Pj4+MTYmMjU1LFJbaisrXT13Pj4+MjQmMjU1LFJbaisrXT0wLFJbaisrXT0wLFJb''@;'; put 'put ''aisrXT0wLFJbaisrXT0wLFA9ODtQPHRoaXMucGFkTGVuZ3RoO1ArKylSW2orK109MDtyZXR1cm4gUn19LDIzNDQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIoOTc0Nik7ZnVuY3Rpb24gcChOLHcsRil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5l''@;'; put 'put ''dyBwKE4sdyxGKTt0aGlzLkhhc2g9Tix0aGlzLmJsb2NrU2l6ZT1OLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1OLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoRC50b0FycmF5KHcsRikpfWNlLmV4cG9ydHM9cCxwLnByb3RvdHlwZS5faW5p''@;'; put 'put ''dD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgRj13Lmxlbmd0aDtGPHRoaXMuYmxvY2tTaXplO0YrKyl3LnB1c2goMCk7Zm9yKEY9MDtG''@;'; put 'put ''PHcubGVuZ3RoO0YrKyl3W0ZdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLEY9MDtGPHcubGVuZ3RoO0YrKyl3W0ZdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxGKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxGKSx0aGlzfSxwLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgRD1iKDY0MzYpLF89Yig1NzcyKSxwPUQucm90bDMyLE49RC5zdW0zMix3PUQuc3VtMzJfMyxGPUQuc3VtMzJfNCxIPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIFIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFI7SC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0''@;'; put 'put ''MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIGoocSxRLFgsdGUpe3JldHVybiBxPD0xNT9RXlhedGU6cTw9MzE/USZYfH5RJnRlOnE8PTQ3PyhRfH5YKV50ZTpxPD02Mz9RJnRlfFgmfnRlOlFeKFh8fnRlKX1m''@;'; put 'put ''dW5jdGlvbiBMKHEpe3JldHVybiBxPD0xNT8xMzUyODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9RC5pbmhlcml0cyhSLEgpLEoucmlwZW1kMTYwPVIsUi5ibG9ja1NpemU9NTEyLFIub3V0U2l6ZT0xNjAsUi5obWFjU3RyZW5ndGg9''@;'; put 'put ''MTkyLFIucGFkTGVuZ3RoPTY0LFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUSxYKXtmb3IodmFyIHRlPXRoaXMuaFswXSxyZT10aGlzLmhbMV0sb2U9dGhpcy5oWzJdLGdlPXRoaXMuaFszXSxfZT10aGlzLmhbNF0sVGU9dGUsU2U9cmUsemU9b2Usej1nZSxnPV9lLHk9MDt5PDgwO3kr''@;'; put 'put ''Kyl7dmFyIHg9TihwKEYodGUsaih5LHJlLG9lLGdlKSxRW1lbeV0rWF0sKHE9eSk8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksV1t5XSksX2UpO3RlPV9lLF9lPWdlLGdlPXAob2UsMTApLG9lPXJlLHJlPXgseD1O''@;'; put 'put ''KHAoRihUZSxqKDc5LXksU2UsemUseiksUVtCW3ldK1hdLEwoeSkpLFpbeV0pLGcpLFRlPWcsZz16LHo9cCh6ZSwxMCksemU9U2UsU2U9eH12YXIgcTt4PXcodGhpcy5oWzFdLG9lLHopLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxnZSxnKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRo''@;'; put 'put ''aXMuaFszXT13KHRoaXMuaFs0XSx0ZSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLHJlLHplKSx0aGlzLmhbMF09eH0sUi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihRKXtyZXR1cm4iaGV4Ij09PVE/RC50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6RC5zcGxpdDMyKHRoaXMuaCwibGl0''@;'; put 'put ''dGxlIil9O3ZhciBZPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwy''@;'; put 'put ''LDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEs''@;'; put 'put ''MywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQs''@;'; put 'put ''OSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4''@;'; put 'put ''LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KGNlLEosYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7Si5zaGExPWIoNDc2MSksSi5zaGEyMjQ9Yig3OTkpLEouc2hhMjU2PWIoOTM0NCksSi5zaGEzODQ9Yig3NzIpLEouc2hhNTEyPWIoNTkwMCl9LDQ3NjE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDM2KSxfPWIoNTc3MikscD1iKDcwMzgpLE49RC5yb3Rs''@;'; put 'put ''MzIsdz1ELnN1bTMyLEY9RC5zdW0zMl81LEg9cC5mdF8xLFI9Xy5CbG9ja0hhc2gsaj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gUCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUDtSLmNhbGwodGhpcyksdGhpcy5o''@;'; put 'put ''PVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9RC5pbmhlcml0cyhQLFIpLGNlLmV4cG9ydHM9UCxQLmJsb2NrU2l6ZT01MTIsUC5vdXRTaXplPTE2MCxQLmhtYWNTdHJlbmd0aD04MCxQLnBhZExlbmd0''@;'; put 'put ''aD02NCxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFksQil7Zm9yKHZhciBXPXRoaXMuVyxaPTA7WjwxNjtaKyspV1taXT1ZW0IrWl07Zm9yKDtaPFcubGVuZ3RoO1orKylXW1pdPU4oV1taLTNdXldbWi04XV5XW1otMTRdXldbWi0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLFE9dGhpcy5o''@;'; put 'put ''WzFdLFg9dGhpcy5oWzJdLHRlPXRoaXMuaFszXSxyZT10aGlzLmhbNF07Zm9yKFo9MDtaPFcubGVuZ3RoO1orKyl7dmFyIG9lPX5+KFovMjApLGdlPUYoTihxLDUpLEgob2UsUSxYLHRlKSxyZSxXW1pdLGpbb2VdKTtyZT10ZSx0ZT1YLFg9TihRLDMwKSxRPXEscT1nZX10aGlzLmhbMF09dyh0''@;'; put 'put ''aGlzLmhbMF0scSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLFEpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxYKSx0aGlzLmhbM109dyh0aGlzLmhbM10sdGUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxyZSl9LFAucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oWSl7cmV0dXJuImhleCI9PT1ZP0Qu''@;'; put 'put ''dG9IZXgzMih0aGlzLmgsImJpZyIpOkQuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjQzNiksXz1iKDkzNDQpO2Z1bmN0aW9uIHAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHA7Xy5jYWxsKHRoaXMpLHRo''@;'; put 'put ''aXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19RC5pbmhlcml0cyhwLF8pLGNlLmV4cG9ydHM9cCxwLmJsb2NrU2l6ZT01MTIscC5vdXRTaXplPTIyNCxwLmhtYWNTdHJlbmd0''@;'; put 'put ''aD0xOTIscC5wYWRMZW5ndGg9NjQscC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/RC50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpELnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTM0NDooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgRD1iKDY0MzYpLF89Yig1NzcyKSxwPWIoNzAzOCksTj1iKDk3NDYpLHc9RC5zdW0zMixGPUQuc3VtMzJfNCxIPUQuc3VtMzJfNSxSPXAuY2gzMixqPXAubWFqMzIsUD1wLnMwXzI1NixMPXAuczFfMjU2LFk9cC5nMF8yNTYsQj1wLmcxXzI1NixXPV8uQmxvY2tIYXNoLFo9WzEx''@;'; put 'put ''MTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgy''@;'; put 'put ''MjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5''@;'; put 'put ''MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0''@;'; put 'put ''MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0''@;'; put 'put ''MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1''@;'; put 'put ''Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVosdGhpcy5XPW5ldyBBcnJheSg2NCl9RC5pbmhlcml0cyhxLFcpLGNlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1NixxLmhtYWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1m''@;'; put 'put ''dW5jdGlvbihYLHRlKXtmb3IodmFyIHJlPXRoaXMuVyxvZT0wO29lPDE2O29lKyspcmVbb2VdPVhbdGUrb2VdO2Zvcig7b2U8cmUubGVuZ3RoO29lKyspcmVbb2VdPUYoQihyZVtvZS0yXSkscmVbb2UtN10sWShyZVtvZS0xNV0pLHJlW29lLTE2XSk7dmFyIGdlPXRoaXMuaFswXSxfZT10aGlz''@;'; put 'put ''LmhbMV0sVGU9dGhpcy5oWzJdLFNlPXRoaXMuaFszXSx6ZT10aGlzLmhbNF0sej10aGlzLmhbNV0sZz10aGlzLmhbNl0seT10aGlzLmhbN107Zm9yKE4odGhpcy5rLmxlbmd0aD09PXJlLmxlbmd0aCksb2U9MDtvZTxyZS5sZW5ndGg7b2UrKyl7dmFyIHg9SCh5LEwoemUpLFIoemUseixnKSx0''@;'; put 'put ''aGlzLmtbb2VdLHJlW29lXSksQz13KFAoZ2UpLGooZ2UsX2UsVGUpKTt5PWcsZz16LHo9emUsemU9dyhTZSx4KSxTZT1UZSxUZT1fZSxfZT1nZSxnZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBdLGdlKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsy''@;'; put 'put ''XSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0semUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSx6KSx0aGlzLmhbNl09dyh0aGlzLmhbNl0sZyksdGhpcy5oWzddPXcodGhpcy5oWzddLHkpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFgp''@;'; put 'put ''e3JldHVybiJoZXgiPT09WD9ELnRvSGV4MzIodGhpcy5oLCJiaWciKTpELnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0MzYpLF89Yig1OTAwKTtmdW5jdGlvbiBwKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5l''@;'; put 'put ''dyBwO18uY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUs''@;'; put 'put ''MTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUQuaW5oZXJpdHMocCxfKSxjZS5leHBvcnRzPXAscC5ibG9ja1NpemU9MTAyNCxwLm91dFNpemU9Mzg0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD0xMjgscC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4iaGV4Ij09PXc/RC50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjQzNiksXz1iKDU3NzIpLHA9Yig5NzQ2KSxOPUQucm90cjY0X2hpLHc9''@;'; put 'put ''RC5yb3RyNjRfbG8sRj1ELnNocjY0X2hpLEg9RC5zaHI2NF9sbyxSPUQuc3VtNjQsaj1ELnN1bTY0X2hpLFA9RC5zdW02NF9sbyxMPUQuc3VtNjRfNF9oaSxZPUQuc3VtNjRfNF9sbyxCPUQuc3VtNjRfNV9oaSxXPUQuc3VtNjRfNV9sbyxaPV8uQmxvY2tIYXNoLHE9WzExMTYzNTI0MDgsMzYw''@;'; put 'put ''OTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQz''@;'; put 'put ''ODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2''@;'; put 'put ''OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIx''@;'; put 'put ''OTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgy''@;'; put 'put ''NDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkx''@;'; put 'put ''NDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5''@;'; put 'put ''LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAw''@;'; put 'put ''MjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAy''@;'; put 'put ''NDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEs''@;'; put 'put ''MjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1''@;'; put 'put ''OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBRKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUSkpcmV0dXJuIG5ldyBRO1ouY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIy''@;'; put 'put ''Mjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1xLHRoaXMuVz1uZXcgQXJyYXko''@;'; put 'put ''MTYwKX1mdW5jdGlvbiBYKHgsQyxULFYsVSl7dmFyIEU9eCZUXn54JlU7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gdGUoeCxDLFQsVixVLEUpe3ZhciBtPUMmVl5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIHJlKHgsQyxULFYsVSl7''@;'; put 'put ''dmFyIEU9eCZUXngmVV5UJlU7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gb2UoeCxDLFQsVixVLEUpe3ZhciBtPUMmVl5DJkVeViZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIGdlKHgsQyl7dmFyIEU9Tih4LEMsMjgpXk4oQyx4LDIpXk4o''@;'; put 'put ''Qyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFyIEU9Tih4LEMsMTQpXk4oeCxDLDE4KV5OKEMs''@;'; put 'put ''eCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gemUoeCxDKXt2YXIgRT1OKHgsQywxKV5OKHgsQyw4KV5GKHgsQyw3''@;'; put 'put ''KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB6KHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleSCh4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gZyh4LEMpe3ZhciBFPU4oeCxDLDE5KV5OKEMseCwyOSleRih4LEMsNik7cmV0''@;'; put 'put ''dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24geSh4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleSCh4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9RC5pbmhlcml0cyhRLFopLGNlLmV4cG9ydHM9USxRLmJsb2NrU2l6ZT0xMDI0LFEub3V0U2l6ZT01''@;'; put 'put ''MTIsUS5obWFjU3RyZW5ndGg9MTkyLFEucGFkTGVuZ3RoPTEyOCxRLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBWPXRoaXMuVyxVPTA7VTwzMjtVKyspVltVXT1DW1QrVV07Zm9yKDtVPFYubGVuZ3RoO1UrPTIpe3ZhciBFPWcoVltVLTRdLFZbVS0zXSks''@;'; put 'put ''bT15KFZbVS00XSxWW1UtM10pLEE9VltVLTE0XSxhZT1WW1UtMTNdLG5lPXplKFZbVS0zMF0sVltVLTI5XSksbGU9eihWW1UtMzBdLFZbVS0yOV0pLHdlPVZbVS0zMl0sVWU9VltVLTMxXTtWW1VdPUwoRSxtLEEsYWUsbmUsbGUsd2UsVWUpLFZbVSsxXT1ZKEUsbSxBLGFlLG5lLGxlLHdlLFVl''@;'; put 'put ''KX19LFEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQyxUKXt0aGlzLl9wcmVwYXJlQmxvY2soQyxUKTt2YXIgVj10aGlzLlcsVT10aGlzLmhbMF0sRT10aGlzLmhbMV0sbT10aGlzLmhbMl0sQT10aGlzLmhbM10sYWU9dGhpcy5oWzRdLG5lPXRoaXMuaFs1XSxsZT10aGlzLmhbNl0sd2U9''@;'; put 'put ''dGhpcy5oWzddLFVlPXRoaXMuaFs4XSxRZT10aGlzLmhbOV0sb3Q9dGhpcy5oWzEwXSxNZT10aGlzLmhbMTFdLHZlPXRoaXMuaFsxMl0sWGU9dGhpcy5oWzEzXSxCZT10aGlzLmhbMTRdLEFlPXRoaXMuaFsxNV07cCh0aGlzLmsubGVuZ3RoPT09Vi5sZW5ndGgpO2Zvcih2YXIgRmU9MDtGZTxW''@;'; put 'put ''Lmxlbmd0aDtGZSs9Mil7dmFyIFJlPUJlLEllPUFlLEhlPVRlKFVlLFFlKSxEZT1TZShVZSxRZSksa2U9WChVZSwwLG90LDAsdmUpLF90PXRlKDAsUWUsMCxNZSwwLFhlKSxudD10aGlzLmtbRmVdLEplPXRoaXMua1tGZSsxXSxsbj1WW0ZlXSx5dD1WW0ZlKzFdLFN0PUIoUmUsSWUsSGUsRGUs''@;'; put 'put ''a2UsX3QsbnQsSmUsbG4seXQpLER0PVcoUmUsSWUsSGUsRGUsa2UsX3QsbnQsSmUsbG4seXQpO1JlPWdlKFUsRSksSWU9X2UoVSxFKSxIZT1yZShVLDAsbSwwLGFlKSxEZT1vZSgwLEUsMCxBLDAsbmUpO3ZhciBpdD1qKFJlLEllLEhlLERlKSwkZT1QKFJlLEllLEhlLERlKTtCZT12ZSxBZT1Y''@;'; put 'put ''ZSx2ZT1vdCxYZT1NZSxvdD1VZSxNZT1RZSxVZT1qKGxlLHdlLFN0LER0KSxRZT1QKHdlLHdlLFN0LER0KSxsZT1hZSx3ZT1uZSxhZT1tLG5lPUEsbT1VLEE9RSxVPWooU3QsRHQsaXQsJGUpLEU9UChTdCxEdCxpdCwkZSl9Uih0aGlzLmgsMCxVLEUpLFIodGhpcy5oLDIsbSxBKSxSKHRoaXMu''@;'; put 'put ''aCw0LGFlLG5lKSxSKHRoaXMuaCw2LGxlLHdlKSxSKHRoaXMuaCw4LFVlLFFlKSxSKHRoaXMuaCwxMCxvdCxNZSksUih0aGlzLmgsMTIsdmUsWGUpLFIodGhpcy5oLDE0LEJlLEFlKX0sUS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1cm4iaGV4Ij09PUM/RC50b0hleDMyKHRo''@;'; put 'put ''aXMuaCwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoNjQzNikucm90cjMyO2Z1bmN0aW9uIE4oTCxZLEIpe3JldHVybiBMJllefkwmQn1mdW5jdGlvbiB3KEwsWSxCKXtyZXR1cm4gTCZZXkwmQl5ZJkJ9ZnVuY3Rp''@;'; put 'put ''b24gRihMLFksQil7cmV0dXJuIExeWV5CfUouZnRfMT1mdW5jdGlvbiBwKEwsWSxCLFcpe3JldHVybiAwPT09TD9OKFksQixXKToxPT09THx8Mz09PUw/RihZLEIsVyk6Mj09PUw/dyhZLEIsVyk6dm9pZCAwfSxKLmNoMzI9TixKLm1hajMyPXcsSi5wMzI9RixKLnMwXzI1Nj1mdW5jdGlvbiBI''@;'; put 'put ''KEwpe3JldHVybiBfKEwsMileXyhMLDEzKV5fKEwsMjIpfSxKLnMxXzI1Nj1mdW5jdGlvbiBSKEwpe3JldHVybiBfKEwsNileXyhMLDExKV5fKEwsMjUpfSxKLmcwXzI1Nj1mdW5jdGlvbiBqKEwpe3JldHVybiBfKEwsNyleXyhMLDE4KV5MPj4+M30sSi5nMV8yNTY9ZnVuY3Rpb24gUChMKXty''@;'; put 'put ''ZXR1cm4gXyhMLDE3KV5fKEwsMTkpXkw+Pj4xMH19LDY0MzY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NzQ2KSxfPWIoNTcxNyk7ZnVuY3Rpb24gcCh5LHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZ5LmNoYXJDb2RlQXQoeCkpfHx4PDB8fHgrMT49eS5sZW5ndGgpJiY1NjMy''@;'; put 'put ''MD09KDY0NTEyJnkuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBGKHkpe3JldHVybih5Pj4+MjR8eT4+PjgmNjUyODB8eTw8OCYxNjcxMTY4MHwoMjU1JnkpPDwyNCk+Pj4wfWZ1bmN0aW9uIFIoeSl7cmV0dXJuIDE9PT15Lmxlbmd0aD8iMCIreTp5fWZ1bmN0aW9uIGooeSl7cmV0dXJuIDc9''@;'; put 'put ''PT15Lmxlbmd0aD8iMCIreTo2PT09eS5sZW5ndGg/IjAwIit5OjU9PT15Lmxlbmd0aD8iMDAwIit5OjQ9PT15Lmxlbmd0aD8iMDAwMCIreTozPT09eS5sZW5ndGg/IjAwMDAwIit5OjI9PT15Lmxlbmd0aD8iMDAwMDAwIit5OjE9PT15Lmxlbmd0aD8iMDAwMDAwMCIreTp5fUouaW5oZXJpdHM9''@;'; put 'put ''XyxKLnRvQXJyYXk9ZnVuY3Rpb24gTih5LHgpe2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIHkuc2xpY2UoKTtpZigheSlyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIj09dHlwZW9mIHkpaWYoeCl7aWYoImhleCI9PT14KWZvcigoeT15LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIp''@;'; put 'put ''KS5sZW5ndGglMiE9MCYmKHk9IjAiK3kpLFY9MDtWPHkubGVuZ3RoO1YrPTIpQy5wdXNoKHBhcnNlSW50KHlbVl0reVtWKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFQ9MCxWPTA7Vjx5Lmxlbmd0aDtWKyspe3ZhciBVPXkuY2hhckNvZGVBdChWKTtVPDEyOD9DW1QrK109VTpVPDIwNDg/KENbVCsr''@;'; put 'put ''XT1VPj42fDE5MixDW1QrK109NjMmVXwxMjgpOnAoeSxWKT8oVT02NTUzNisoKDEwMjMmVSk8PDEwKSsoMTAyMyZ5LmNoYXJDb2RlQXQoKytWKSksQ1tUKytdPVU+PjE4fDI0MCxDW1QrK109VT4+MTImNjN8MTI4LENbVCsrXT1VPj42JjYzfDEyOCxDW1QrK109NjMmVXwxMjgpOihDW1QrK109''@;'; put 'put ''VT4+MTJ8MjI0LENbVCsrXT1VPj42JjYzfDEyOCxDW1QrK109NjMmVXwxMjgpfWVsc2UgZm9yKFY9MDtWPHkubGVuZ3RoO1YrKylDW1ZdPTB8eVtWXTtyZXR1cm4gQ30sSi50b0hleD1mdW5jdGlvbiB3KHkpe2Zvcih2YXIgeD0iIixDPTA7Qzx5Lmxlbmd0aDtDKyspeCs9Uih5W0NdLnRvU3Ry''@;'; put 'put ''aW5nKDE2KSk7cmV0dXJuIHh9LEouaHRvbmw9RixKLnRvSGV4MzI9ZnVuY3Rpb24gSCh5LHgpe2Zvcih2YXIgQz0iIixUPTA7VDx5Lmxlbmd0aDtUKyspe3ZhciBWPXlbVF07ImxpdHRsZSI9PT14JiYoVj1GKFYpKSxDKz1qKFYudG9TdHJpbmcoMTYpKX1yZXR1cm4gQ30sSi56ZXJvMj1SLEou''@;'; put 'put ''emVybzg9aixKLmpvaW4zMj1mdW5jdGlvbiBQKHkseCxDLFQpe3ZhciBWPUMteDtEKFYlND09MCk7Zm9yKHZhciBVPW5ldyBBcnJheShWLzQpLEU9MCxtPXg7RTxVLmxlbmd0aDtFKyssbSs9NClVW0VdPSgiYmlnIj09PVQ/eVttXTw8MjR8eVttKzFdPDwxNnx5W20rMl08PDh8eVttKzNdOnlb''@;'; put 'put ''bSszXTw8MjR8eVttKzJdPDwxNnx5W20rMV08PDh8eVttXSk+Pj4wO3JldHVybiBVfSxKLnNwbGl0MzI9ZnVuY3Rpb24gTCh5LHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoNCp5Lmxlbmd0aCksVD0wLFY9MDtUPHkubGVuZ3RoO1QrKyxWKz00KXt2YXIgVT15W1RdOyJiaWciPT09eD8oQ1tWXT1V''@;'; put 'put ''Pj4+MjQsQ1tWKzFdPVU+Pj4xNiYyNTUsQ1tWKzJdPVU+Pj44JjI1NSxDW1YrM109MjU1JlUpOihDW1YrM109VT4+PjI0LENbVisyXT1VPj4+MTYmMjU1LENbVisxXT1VPj4+OCYyNTUsQ1tWXT0yNTUmVSl9cmV0dXJuIEN9LEoucm90cjMyPWZ1bmN0aW9uIFkoeSx4KXtyZXR1cm4geT4+Pnh8''@;'; put 'put ''eTw8MzIteH0sSi5yb3RsMzI9ZnVuY3Rpb24gQih5LHgpe3JldHVybiB5PDx4fHk+Pj4zMi14fSxKLnN1bTMyPWZ1bmN0aW9uIFcoeSx4KXtyZXR1cm4geSt4Pj4+MH0sSi5zdW0zMl8zPWZ1bmN0aW9uIFooeSx4LEMpe3JldHVybiB5K3grQz4+PjB9LEouc3VtMzJfND1mdW5jdGlvbiBxKHks''@;'; put 'put ''eCxDLFQpe3JldHVybiB5K3grQytUPj4+MH0sSi5zdW0zMl81PWZ1bmN0aW9uIFEoeSx4LEMsVCxWKXtyZXR1cm4geSt4K0MrVCtWPj4+MH0sSi5zdW02ND1mdW5jdGlvbiBYKHkseCxDLFQpe3ZhciBFPVQreVt4KzFdPj4+MDt5W3hdPShFPFQ/MTowKStDK3lbeF0+Pj4wLHlbeCsxXT1FfSxK''@;'; put 'put ''LnN1bTY0X2hpPWZ1bmN0aW9uIHRlKHkseCxDLFQpe3JldHVybih4K1Q+Pj4wPHg/MTowKSt5K0M+Pj4wfSxKLnN1bTY0X2xvPWZ1bmN0aW9uIHJlKHkseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxKLnN1bTY0XzRfaGk9ZnVuY3Rpb24gb2UoeSx4LEMsVCxWLFUsRSxtKXt2YXIgQT0wLGFlPXg7''@;'; put 'put ''cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAsQSs9KGFlPWFlK1U+Pj4wKTxVPzE6MCx5K0MrVitFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LEouc3VtNjRfNF9sbz1mdW5jdGlvbiBnZSh5LHgsQyxULFYsVSxFLG0pe3JldHVybiB4K1QrVSttPj4+MH0sSi5zdW02NF81X2hp''@;'; put 'put ''PWZ1bmN0aW9uIF9lKHkseCxDLFQsVixVLEUsbSxBLGFlKXt2YXIgbmU9MCxsZT14O3JldHVybiBuZSs9KGxlPWxlK1Q+Pj4wKTx4PzE6MCxuZSs9KGxlPWxlK1U+Pj4wKTxVPzE6MCxuZSs9KGxlPWxlK20+Pj4wKTxtPzE6MCx5K0MrVitFK0ErKG5lKz0obGU9bGUrYWU+Pj4wKTxhZT8xOjAp''@;'; put 'put ''Pj4+MH0sSi5zdW02NF81X2xvPWZ1bmN0aW9uIFRlKHkseCxDLFQsVixVLEUsbSxBLGFlKXtyZXR1cm4geCtUK1UrbSthZT4+PjB9LEoucm90cjY0X2hpPWZ1bmN0aW9uIFNlKHkseCxDKXtyZXR1cm4oeDw8MzItQ3x5Pj4+Qyk+Pj4wfSxKLnJvdHI2NF9sbz1mdW5jdGlvbiB6ZSh5LHgsQyl7''@;'; put 'put ''cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH0sSi5zaHI2NF9oaT1mdW5jdGlvbiB6KHkseCxDKXtyZXR1cm4geT4+PkN9LEouc2hyNjRfbG89ZnVuY3Rpb24gZyh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9RnVu''@;'; put 'put ''Y3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9Yig4NjEyKTtjZS5leHBvcnRzPXAuY2FsbChELF8pfSwyMTU2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzcxNSksXz1iKDQ1MDQpLHA9Yig5NzQ2KTtmdW5jdGlvbiBOKHcp''@;'; put 'put ''e2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0''@;'; put 'put ''cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgRj1fLnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEg9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLFI9Xy50''@;'; put 'put ''b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgiKTtwKEYubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KEYsSCxSKX1jZS5leHBvcnRzPU4sTi5wcm90b3R5cGUu''@;'; put 'put ''X2luaXQ9ZnVuY3Rpb24oRixILFIpe3ZhciBqPUYuY29uY2F0KEgpLmNvbmNhdChSKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBQPTA7UDx0aGlzLlYubGVuZ3RoO1ArKyl0aGlzLktbUF09MCx0aGlzLlZb''@;'; put 'put ''UF09MTt0aGlzLl91cGRhdGUoaiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LE4ucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBELmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oRil7dmFyIEg9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO0YmJihIPUgudXBkYXRlKEYpKSx0aGlzLks9SC5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEYmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0''@;'; put 'put ''aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShGKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sTi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKEYsSCxSLGopeyJzdHJpbmciIT10eXBlb2YgSCYmKGo9UixSPUgsSD1udWxsKSxGPV8udG9B''@;'; put 'put ''cnJheShGLEgpLFI9Xy50b0FycmF5KFIsaikscChGLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKEYuY29uY2F0KFJ8fFtdKSksdGhpcy5fcmVzZWVkPTF9LE4u''@;'; put 'put ''cHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKEYsSCxSLGope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBIJiYoaj1SLFI9SCxIPW51bGwpLFImJihSPV8udG9BcnJheShS''@;'; put 'put ''LGp8fCJoZXgiKSx0aGlzLl91cGRhdGUoUikpO2Zvcih2YXIgUD1bXTtQLmxlbmd0aDxGOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFA9UC5jb25jYXQodGhpcy5WKTt2YXIgTD1QLnNsaWNlKDAsRik7cmV0dXJuIHRoaXMuX3VwZGF0ZShSKSx0aGlzLl9y''@;'; put 'put ''ZXNlZWQrKyxfLmVuY29kZShMLEgpfX0sNjQ1OihjZSxKKT0+e0oucmVhZD1mdW5jdGlvbihiLEQsXyxwLE4pe3ZhciB3LEYsSD04Kk4tcC0xLFI9KDE8PEgpLTEsaj1SPj4xLFA9LTcsTD1fP04tMTowLFk9Xz8tMToxLEI9YltEK0xdO2ZvcihMKz1ZLHc9QiYoMTw8LVApLTEsQj4+PS1QLFAr''@;'; put 'put ''PUg7UD4wO3c9MjU2KncrYltEK0xdLEwrPVksUC09OCk7Zm9yKEY9dyYoMTw8LVApLTEsdz4+PS1QLFArPXA7UD4wO0Y9MjU2KkYrYltEK0xdLEwrPVksUC09OCk7aWYoMD09PXcpdz0xLWo7ZWxzZXtpZih3PT09UilyZXR1cm4gRj9OYU46MS8wKihCPy0xOjEpO0YrPU1hdGgucG93KDIscCks''@;'; put 'put ''dy09an1yZXR1cm4oQj8tMToxKSpGKk1hdGgucG93KDIsdy1wKX0sSi53cml0ZT1mdW5jdGlvbihiLEQsXyxwLE4sdyl7dmFyIEYsSCxSLGo9OCp3LU4tMSxQPSgxPDxqKS0xLEw9UD4+MSxZPTIzPT09Tj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsQj1wPzA6dy0xLFc9cD8x''@;'; put 'put ''Oi0xLFo9RDwwfHwwPT09RCYmMS9EPDA/MTowO2ZvcihEPU1hdGguYWJzKEQpLGlzTmFOKEQpfHxEPT09MS8wPyhIPWlzTmFOKEQpPzE6MCxGPVApOihGPU1hdGguZmxvb3IoTWF0aC5sb2coRCkvTWF0aC5MTjIpLEQqKFI9TWF0aC5wb3coMiwtRikpPDEmJihGLS0sUio9MiksKEQrPUYrTD49''@;'; put 'put ''MT9ZL1I6WSpNYXRoLnBvdygyLDEtTCkpKlI+PTImJihGKyssUi89MiksRitMPj1QPyhIPTAsRj1QKTpGK0w+PTE/KEg9KEQqUi0xKSpNYXRoLnBvdygyLE4pLEYrPUwpOihIPUQqTWF0aC5wb3coMixMLTEpKk1hdGgucG93KDIsTiksRj0wKSk7Tj49ODtiW18rQl09MjU1JkgsQis9VyxILz0y''@;'; put 'put ''NTYsTi09OCk7Zm9yKEY9Rjw8TnxILGorPU47aj4wO2JbXytCXT0yNTUmRixCKz1XLEYvPTI1NixqLT04KTtiW18rQi1XXXw9MTI4Klp9fSw1NzE3OmNlPT57Y2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihiLEQpe0QmJihiLnN1cGVyXz1ELGIu''@;'; put 'put ''cHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oYixEKXtpZihEKXtiLnN1cGVyXz1EO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlw''@;'; put 'put ''ZT1ELnByb3RvdHlwZSxiLnByb3RvdHlwZT1uZXcgXyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX19LDI1ODQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDEwKSgpLHA9Yig3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLE49ZnVuY3Rpb24oUil7cmV0dXJu''@;'; put 'put ''IShEJiZSJiYib2JqZWN0Ij09dHlwZW9mIFImJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBSKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1wKFIpfSx3PWZ1bmN0aW9uKFIpe3JldHVybiEhTihSKXx8bnVsbCE9PVImJiJvYmplY3QiPT10eXBlb2YgUiYmImxlbmd0aCJpbiBSJiYibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIFIubGVuZ3RoJiZSLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PXAoUikmJiJjYWxsZWUiaW4gUiYmIltvYmplY3QgRnVuY3Rpb25dIj09PXAoUi5jYWxsZWUpfSxGPWZ1bmN0aW9uKCl7cmV0dXJuIE4oYXJndW1lbnRzKX0oKTtOLmlzTGVnYWN5QXJndW1lbnRzPXcsY2Uu''@;'; put 'put ''ZXhwb3J0cz1GP046d30sNTMyMDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRCxfLEo9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGI9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7RD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSxiKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsRCl9Y2F0Y2goUSl7USE9PV8mJihiPW51bGwpfWVs''@;'; put 'put ''c2UgYj1udWxsO3ZhciBwPS9eXHMqY2xhc3NcYi8sTj1mdW5jdGlvbihYKXt0cnl7dmFyIHRlPUouY2FsbChYKTtyZXR1cm4gcC50ZXN0KHRlKX1jYXRjaHtyZXR1cm4hMX19LHc9ZnVuY3Rpb24oWCl7dHJ5e3JldHVybiFOKFgpJiYoSi5jYWxsKFgpLCEwKX1jYXRjaHtyZXR1cm4hMX19LEY9''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxCPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLFc9ISgwIGluWyxdKSxaPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBxPWRvY3VtZW50LmFsbDtGLmNh''@;'; put 'put ''bGwocSk9PT1GLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFo9ZnVuY3Rpb24oWCl7aWYoKFd8fCFYKSYmKHR5cGVvZiBYPiJ1Inx8Im9iamVjdCI9PXR5cGVvZiBYKSl0cnl7dmFyIHRlPUYuY2FsbChYKTtyZXR1cm4oIltvYmplY3QgSFRNTEFsbENvbGxlY3Rpb25dIj09PXRlfHwiW29iamVjdCBI''@;'; put 'put ''VE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09dGV8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT10ZXx8IltvYmplY3QgT2JqZWN0XSI9PT10ZSkmJm51bGw9PVgoIiIpfWNhdGNoe31yZXR1cm4hMX0pfWNlLmV4cG9ydHM9Yj9mdW5jdGlvbihYKXtpZihaKFgpKXJldHVybiEwO2lmKCFY''@;'; put 'put ''fHwiZnVuY3Rpb24iIT10eXBlb2YgWCYmIm9iamVjdCIhPXR5cGVvZiBYKXJldHVybiExO3RyeXtiKFgsbnVsbCxEKX1jYXRjaCh0ZSl7aWYodGUhPT1fKXJldHVybiExfXJldHVybiFOKFgpJiZ3KFgpfTpmdW5jdGlvbihYKXtpZihaKFgpKXJldHVybiEwO2lmKCFYfHwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgWCYmIm9iamVjdCIhPXR5cGVvZiBYKXJldHVybiExO2lmKEIpcmV0dXJuIHcoWCk7aWYoTihYKSlyZXR1cm4hMTt2YXIgdGU9Ri5jYWxsKFgpO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXRlJiYiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09dGUmJiEvXlxbb2Jq''@;'; put 'put ''ZWN0IEhUTUwvLnRlc3QodGUpKSYmdyhYKX19LDg2NjI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIGosRD1iKDczNzkpLHA9Yig5MjQ2KSgvXlxzKig/OmZ1bmN0aW9uKT9cKi8pLE49Yig2NDEwKSgpLHc9YigxNjE4KSxGPUQoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxIPUQo''@;'; put 'put ''IkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEwpcmV0dXJuITE7aWYocChIKEwpKSlyZXR1cm4hMDtpZighTilyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT09RihMKTtpZighdylyZXR1''@;'; put 'put ''cm4hMTtpZih0eXBlb2Ygaj4idSIpe3ZhciBCPWZ1bmN0aW9uKCl7aWYoIU4pcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO2o9ISFCJiZ3KEIpfXJldHVybiB3KEwpPT09an19LDg2MTE6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1mdW5jdGlvbihiKXtyZXR1cm4gYiE9Yn19LDM2MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU1NTkpLF89Yig0Mjg5KSxwPWIoODYxMSksTj1iKDk0MTUpLHc9YigzMTk0KSxGPUQoTigpLE51bWJlcik7XyhGLHtnZXRQb2x5ZmlsbDpOLGltcGxlbWVudGF0''@;'; put 'put ''aW9uOnAsc2hpbTp3fSksY2UuZXhwb3J0cz1GfSw5NDE1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODYxMSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVtYmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFO''@;'; put 'put ''OkR9fSwzMTk0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDI4OSksXz1iKDk0MTUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgTj1fKCk7cmV0dXJuIEQoTnVtYmVyLHtpc05hTjpOfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09Tn19KSxOfX0s''@;'; put 'put ''ODQyMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdyxEPWIoNzM3OSksXz1iKDY0MTApKCkscD1iKDg4MjQpLE49Yig3Mjk2KTtpZihfKXt2YXIgRj1EKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxIPXt9LFI9ZnVuY3Rpb24oKXt0aHJvdyBIfSxqPXt0b1N0cmluZzpSLHZhbHVlT2Y6''@;'; put 'put ''Un07InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJihqW1N5bWJvbC50b1ByaW1pdGl2ZV09Uiksdz1mdW5jdGlvbihCKXtpZighQnx8Im9iamVjdCIhPXR5cGVvZiBCKXJldHVybiExO3ZhciBXPU4oQiwibGFzdEluZGV4Iik7aWYoIVd8fCFwKFcsInZhbHVlIikpcmV0dXJu''@;'; put 'put ''ITE7dHJ5e0YoQixqKX1jYXRjaChxKXtyZXR1cm4gcT09PUh9fX1lbHNle3ZhciBQPUQoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTt3PWZ1bmN0aW9uKEIpe3JldHVybiEoIUJ8fCJvYmplY3QiIT10eXBlb2YgQiYmImZ1bmN0aW9uIiE9dHlwZW9mIEIpJiYiW29iamVjdCBSZWdFeHBd''@;'; put 'put ''Ij09PVAoQil9fWNlLmV4cG9ydHM9d30sNTY5MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0MzApO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuISFEKHApfX0sNTgyNjpjZT0+e3ZhciBKPXt9LnRvU3RyaW5nO2NlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIltvYmplY3QgQXJyYXldIj09Si5jYWxsKGIpfX0sNjgxMzooY2UsSixiKT0+e2xldCBEO3RyeXtEPWIoNzcpfWNhdGNoe0Q9Yig0MTI5KX1jb25zdCBfPWIoODk4MSkse3N0cmluZ2lmeTpwLHN0cmlwQm9tOk59PWIoNjc4MCk7ZnVuY3Rpb24gRigpe3JldHVybihGPV9h''@;'; put 'put ''c3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFo9e30peyJzdHJpbmciPT10eXBlb2YgWiYmKFo9e2VuY29kaW5nOlp9KTtjb25zdCBxPVouZnN8fEQsUT0hKCJ0aHJvd3MiaW4gWil8fFoudGhyb3dzO2xldCB0ZSxYPXlpZWxkIF8uZnJvbUNhbGxiYWNrKHEucmVhZEZpbGUpKFcsWik7WD1O''@;'; put 'put ''KFgpO3RyeXt0ZT1KU09OLnBhcnNlKFgsWj9aLnJldml2ZXI6bnVsbCl9Y2F0Y2gocmUpe2lmKFEpdGhyb3cgcmUubWVzc2FnZT1gJHtXfTogJHtyZS5tZXNzYWdlfWAscmU7cmV0dXJuIG51bGx9cmV0dXJuIHRlfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCBIPV8uZnJvbVByb21p''@;'; put 'put ''c2UoZnVuY3Rpb24gdyhXKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWixxPXt9KXtjb25zdCBRPXEuZnN8fEQsWD1wKFoscSk7eWllbGQgXy5mcm9tQ2FsbGJhY2soUS53cml0ZUZp''@;'; put 'put ''bGUpKFcsWCxxKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgTD1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIGooVyxaKXtyZXR1cm4gUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtjZS5leHBvcnRzPXtyZWFkRmlsZTpILHJlYWRGaWxlU3luYzpmdW5jdGlvbiBSKFcsWj17fSl7InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBaJiYoWj17ZW5jb2Rpbmc6Wn0pO2NvbnN0IHE9Wi5mc3x8RCxRPSEoInRocm93cyJpbiBaKXx8Wi50aHJvd3M7dHJ5e2xldCBYPXEucmVhZEZpbGVTeW5jKFcsWik7cmV0dXJuIFg9TihYKSxKU09OLnBhcnNlKFgsWi5yZXZpdmVyKX1jYXRjaChYKXtpZihRKXRocm93''@;'; put 'put ''IFgubWVzc2FnZT1gJHtXfTogJHtYLm1lc3NhZ2V9YCxYO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOkwsd3JpdGVGaWxlU3luYzpmdW5jdGlvbiBZKFcsWixxPXt9KXtjb25zdCBRPXEuZnN8fEQsWD1wKFoscSk7cmV0dXJuIFEud3JpdGVGaWxlU3luYyhXLFgscSl9fX0sNjc4MDooY2UsSixi''@;'; put 'put ''KT0+e3ZhciBEPWIoODc2NCkuQnVmZmVyO2NlLmV4cG9ydHM9e3N0cmluZ2lmeTpmdW5jdGlvbiBfKE4se0VPTDp3PSJcbiIsZmluYWxFT0w6Rj0hMCxyZXBsYWNlcjpIPW51bGwsc3BhY2VzOlJ9PXt9KXtjb25zdCBqPUY/dzoiIjtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoTixILFIpLnJlcGxh''@;'; put 'put ''Y2UoL1xuL2csdykran0sc3RyaXBCb206ZnVuY3Rpb24gcChOKXtyZXR1cm4gRC5pc0J1ZmZlcihOKSYmKE49Ti50b1N0cmluZygidXRmOCIpKSxOLnJlcGxhY2UoL15cdUZFRkYvLCIiKX19fSw2MjQ1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoSCl7dGhpcy5tZXNzYWdl''@;'; put 'put ''PUh9Yi5yKEopLGIuZChKLHtJbnZhbGlkVG9rZW5FcnJvcjooKT0+TixkZWZhdWx0OigpPT5GfSksKEQucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZENoYXJhY3RlckVycm9yIjt2YXIgXz10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmF0b2ImJndpbmRvdy5hdG9iLmJpbmQo''@;'; put 'put ''d2luZG93KXx8ZnVuY3Rpb24oSCl7dmFyIFI9U3RyaW5nKEgpLnJlcGxhY2UoLz0rJC8sIiIpO2lmKFIubGVuZ3RoJTQ9PTEpdGhyb3cgbmV3IEQoIidhdG9iJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7Zm9yKHZhciBqLFAs''@;'; put 'put ''TD0wLFk9MCxCPSIiO1A9Ui5jaGFyQXQoWSsrKTt+UCYmKGo9TCU0PzY0KmorUDpQLEwrKyU0KT9CKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZqPj4oLTIqTCY2KSk6MClQPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsv''@;'; put 'put ''PSIuaW5kZXhPZihQKTtyZXR1cm4gQn07ZnVuY3Rpb24gTihIKXt0aGlzLm1lc3NhZ2U9SH0oTi5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkVG9rZW5FcnJvciI7Y29uc3QgRj1mdW5jdGlvbiB3KEgsUil7aWYoInN0cmluZyIhPXR5cGVvZiBIKXRocm93IG5ldyBOKCJJbnZh''@;'; put 'put ''bGlkIHRva2VuIHNwZWNpZmllZCIpO3ZhciBqPSEwPT09KFI9Unx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKGZ1bmN0aW9uIHAoSCl7dmFyIFI9SC5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2goUi5sZW5ndGglNCl7Y2FzZSAwOmJyZWFr''@;'; put 'put ''O2Nhc2UgMjpSKz0iPT0iO2JyZWFrO2Nhc2UgMzpSKz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChfKFIpLnJlcGxhY2UoLyguKS9nLGZ1bmN0aW9uKFAsTCl7dmFyIFk9TC5jaGFyQ29kZUF0''@;'; put 'put ''KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBZLmxlbmd0aDwyJiYoWT0iMCIrWSksIiUiK1l9KSl9Y2F0Y2h7cmV0dXJuIF8oUil9fShILnNwbGl0KCIuIilbal0pKX1jYXRjaChQKXt0aHJvdyBuZXcgTigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrUC5tZXNzYWdl''@;'; put 'put ''KX19fSwxNjU4OihjZSxKLGIpPT57dmFyIHA9L1tcXF4kLiorPygpW1xde318XS9nLE49UmVnRXhwKHAuc291cmNlKSxGPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSD0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5nJiZiLmcuT2JqZWN0''@;'; put 'put ''PT09T2JqZWN0JiZiLmd8fEZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksaj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFA9SC5TeW1ib2wsTD1QP1AucHJvdG90eXBlOnZvaWQgMCxZPUw/TC50b1N0cmluZzp2b2lkIDA7Y2UuZXhwb3J0cz1mdW5jdGlvbiBRKFgpe3JldHVybihYPWZ1''@;'; put 'put ''bmN0aW9uIHEoWCl7cmV0dXJuIG51bGw9PVg/IiI6ZnVuY3Rpb24gQihYKXtpZigic3RyaW5nIj09dHlwZW9mIFgpcmV0dXJuIFg7aWYoZnVuY3Rpb24gWihYKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFh8fGZ1bmN0aW9uIFcoWCl7cmV0dXJuISFYJiYib2JqZWN0Ij09dHlwZW9mIFh9KFgp''@;'; put 'put ''JiYiW29iamVjdCBTeW1ib2xdIj09ai5jYWxsKFgpfShYKSlyZXR1cm4gWT9ZLmNhbGwoWCk6IiI7dmFyIHRlPVgrIiI7cmV0dXJuIjAiPT10ZSYmMS9YPT0tMS8wPyItMCI6dGV9KFgpfShYKSkmJk4udGVzdChYKT9YLnJlcGxhY2UocCwiXFwkJiIpOlh9fSw4MDk0OmNlPT57dmFyIEQ9T2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS50b1N0cmluZztjZS5leHBvcnRzPWZ1bmN0aW9uIF8oTil7cmV0dXJuITA9PT1OfHwhMT09PU58fGZ1bmN0aW9uIHAoTil7cmV0dXJuISFOJiYib2JqZWN0Ij09dHlwZW9mIE59KE4pJiYiW29iamVjdCBCb29sZWFuXSI9PUQuY2FsbChOKX19LDIzMDc6KGNlLEosYik9''@;'; put 'put ''PntjZT1iLm5tZChjZSk7dmFyIF89Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHA9MSxOPTIsdz05MDA3MTk5MjU0NzQwOTkxLEY9IltvYmplY3QgQXJndW1lbnRzXSIsSD0iW29iamVjdCBBcnJheV0iLFI9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLGo9IltvYmplY3QgQm9vbGVhbl0i''@;'; put 'put ''LFA9IltvYmplY3QgRGF0ZV0iLEw9IltvYmplY3QgRXJyb3JdIixZPSJbb2JqZWN0IEZ1bmN0aW9uXSIsQj0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFc9IltvYmplY3QgTWFwXSIsWj0iW29iamVjdCBOdW1iZXJdIixxPSJbb2JqZWN0IE51bGxdIixRPSJbb2JqZWN0IE9iamVjdF0i''@;'; put 'put ''LFg9IltvYmplY3QgUHJvbWlzZV0iLHRlPSJbb2JqZWN0IFByb3h5XSIscmU9IltvYmplY3QgUmVnRXhwXSIsb2U9IltvYmplY3QgU2V0XSIsZ2U9IltvYmplY3QgU3RyaW5nXSIsVGU9IltvYmplY3QgVW5kZWZpbmVkXSIsU2U9IltvYmplY3QgV2Vha01hcF0iLHplPSJbb2JqZWN0IEFycmF5''@;'; put 'put ''QnVmZmVyXSIsej0iW29iamVjdCBEYXRhVmlld10iLGFlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLG5lPS9eKD86MHxbMS05XVxkKikkLyxsZT17fTtsZVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bGVbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWxlWyJbb2JqZWN0IEludDhB''@;'; put 'put ''cnJheV0iXT1sZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPWxlWyJbb2JqZWN0IEludDMyQXJyYXldIl09bGVbIltvYmplY3QgVWludDhBcnJheV0iXT1sZVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1sZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1sZVsiW29iamVjdCBVaW50MzJB''@;'; put 'put ''cnJheV0iXT0hMCxsZVtGXT1sZVtIXT1sZVt6ZV09bGVbal09bGVbel09bGVbUF09bGVbTF09bGVbWV09bGVbV109bGVbWl09bGVbUV09bGVbcmVdPWxlW29lXT1sZVtnZV09bGVbU2VdPSExO3ZhciB3ZT0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5nJiZiLmcuT2JqZWN0PT09T2JqZWN0JiZi''@;'; put 'put ''LmcsVWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixRZT13ZXx8VWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksb3Q9SiYmIUoubm9kZVR5cGUmJkosTWU9b3QmJmNlJiYhY2Uubm9kZVR5cGUmJmNlLHZlPU1lJiZNZS5leHBvcnRz''@;'; put 'put ''PT09b3QsWGU9dmUmJndlLnByb2Nlc3MsQmU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFhlJiZYZS5iaW5kaW5nJiZYZS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxBZT1CZSYmQmUuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEllKEFuLGFuKXtmb3IodmFyIHZpPS0xLEFyPW51bGw9PUFuPzA6''@;'; put 'put ''QW4ubGVuZ3RoOysrdmk8QXI7KWlmKGFuKEFuW3ZpXSx2aSxBbikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24ga2UoQW4sYW4pe3JldHVybiBBbi5oYXMoYW4pfWZ1bmN0aW9uIG50KEFuKXt2YXIgYW49LTEsdmk9QXJyYXkoQW4uc2l6ZSk7cmV0dXJuIEFuLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''QXIsUG8pe3ZpWysrYW5dPVtQbyxBcl19KSx2aX1mdW5jdGlvbiBsbihBbil7dmFyIGFuPS0xLHZpPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1bmN0aW9uKEFyKXt2aVsrK2FuXT1Bcn0pLHZpfXZhciBBbix5dD1BcnJheS5wcm90b3R5cGUsRHQ9T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZSxpdD1RZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sJGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLHR0PUR0Lmhhc093blByb3BlcnR5LE5lPShBbj0vW14uXSskLy5leGVjKGl0JiZpdC5rZXlzJiZpdC5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrQW46IiIsdXQ9''@;'; put 'put ''RHQudG9TdHJpbmcscXQ9UmVnRXhwKCJeIiskZS5jYWxsKHR0KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxSdD12ZT9RZS5C''@;'; put 'put ''dWZmZXI6dm9pZCAwLFB0PVFlLlN5bWJvbCxjaT1RZS5VaW50OEFycmF5LFF0PUR0LnByb3BlcnR5SXNFbnVtZXJhYmxlLHNuPXl0LnNwbGljZSxSaT1QdD9QdC50b1N0cmluZ1RhZzp2b2lkIDAsaG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxmdD1SdD9SdC5pc0J1ZmZlcjp2b2lk''@;'; put 'put ''IDAsT3I9ZnVuY3Rpb24gSmUoQW4sYW4pe3JldHVybiBmdW5jdGlvbih2aSl7cmV0dXJuIEFuKGFuKHZpKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLFd0PVloKFFlLCJEYXRhVmlldyIpLEF0PVloKFFlLCJNYXAiKSxSbj1ZaChRZSwiUHJvbWlzZSIpLHN0PVloKFFlLCJTZXQiKSxVdD1ZaChR''@;'; put 'put ''ZSwiV2Vha01hcCIpLHJpPVloKE9iamVjdCwiY3JlYXRlIiksV2U9T2woV3QpLFR0PU9sKEF0KSxucj1PbChSbiksaHQ9T2woc3QpLHh0PU9sKFV0KSxqbj1QdD9QdC5wcm90b3R5cGU6dm9pZCAwLHJuPWpuP2puLnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIHp0KEFuKXt2YXIgYW49LTEsdmk9''@;'; put 'put ''bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZpOyl7dmFyIEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIGVuKEFuKXt2YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZpOyl7dmFy''@;'; put 'put ''IEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIGVpKEFuKXt2YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2FuPHZpOyl7dmFyIEFyPUFuW2FuXTt0aGlzLnNldChBclswXSxBclsxXSl9fWZ1bmN0aW9uIFdpKEFuKXt2''@;'; put 'put ''YXIgYW49LTEsdmk9bnVsbD09QW4/MDpBbi5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IGVpOysrYW48dmk7KXRoaXMuYWRkKEFuW2FuXSl9ZnVuY3Rpb24gbGEoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fPW5ldyBlbihBbik7dGhpcy5zaXplPWFuLnNpemV9ZnVuY3Rpb24geWwoQW4s''@;'; put 'put ''YW4pe2Zvcih2YXIgdmk9QW4ubGVuZ3RoO3ZpLS07KWlmKHVmKEFuW3ZpXVswXSxhbikpcmV0dXJuIHZpO3JldHVybi0xfWZ1bmN0aW9uIExjKEFuKXtyZXR1cm4gbnVsbD09QW4/dm9pZCAwPT09QW4/VGU6cTpSaSYmUmkgaW4gT2JqZWN0KEFuKT9mdW5jdGlvbiBjZihBbil7dmFyIGFuPXR0''@;'; put 'put ''LmNhbGwoQW4sUmkpLHZpPUFuW1JpXTt0cnl7QW5bUmldPXZvaWQgMDt2YXIgQXI9ITB9Y2F0Y2h7fXZhciBQbz11dC5jYWxsKEFuKTtyZXR1cm4gQXImJihhbj9BbltSaV09dmk6ZGVsZXRlIEFuW1JpXSksUG99KEFuKTpmdW5jdGlvbiByNShBbil7cmV0dXJuIHV0LmNhbGwoQW4pfShBbil9''@;'; put 'put ''ZnVuY3Rpb24gRDAoQW4pe3JldHVybiBOYShBbikmJkxjKEFuKT09Rn1mdW5jdGlvbiBpcihBbixhbix2aSxBcixQbyl7cmV0dXJuIEFuPT09YW58fChudWxsPT1Bbnx8bnVsbD09YW58fCFOYShBbikmJiFOYShhbik/QW4hPUFuJiZhbiE9YW46ZnVuY3Rpb24geGEoQW4sYW4sdmksQXIsUG8s''@;'; put 'put ''ZW8pe3ZhciBvbD1kZihBbiksem89ZGYoYW4pLFZzPW9sP0g6WWkoQW4pLFNzPXpvP0g6WWkoYW4pLGpsPShWcz1Wcz09Rj9ROlZzKT09USxIbz0oU3M9U3M9PUY/UTpTcyk9PVEsa289VnM9PVNzO2lmKGtvJiZoZihBbikpe2lmKCFoZihhbikpcmV0dXJuITE7b2w9ITAsamw9ITF9aWYoa28m''@;'; put 'put ''JiFqbClyZXR1cm4gZW98fChlbz1uZXcgbGEpLG9sfHxEMyhBbik/eTAoQW4sYW4sdmksQXIsUG8sZW8pOmZ1bmN0aW9uIEhhKEFuLGFuLHZpLEFyLFBvLGVvLG9sKXtzd2l0Y2godmkpe2Nhc2UgejppZihBbi5ieXRlTGVuZ3RoIT1hbi5ieXRlTGVuZ3RofHxBbi5ieXRlT2Zmc2V0IT1hbi5i''@;'; put 'put ''eXRlT2Zmc2V0KXJldHVybiExO0FuPUFuLmJ1ZmZlcixhbj1hbi5idWZmZXI7Y2FzZSB6ZTpyZXR1cm4hKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fCFlbyhuZXcgY2koQW4pLG5ldyBjaShhbikpKTtjYXNlIGo6Y2FzZSBQOmNhc2UgWjpyZXR1cm4gdWYoK0FuLCthbik7Y2FzZSBM''@;'; put 'put ''OnJldHVybiBBbi5uYW1lPT1hbi5uYW1lJiZBbi5tZXNzYWdlPT1hbi5tZXNzYWdlO2Nhc2UgcmU6Y2FzZSBnZTpyZXR1cm4gQW49PWFuKyIiO2Nhc2UgVzp2YXIgem89bnQ7Y2FzZSBvZTppZih6b3x8KHpvPWxuKSxBbi5zaXplIT1hbi5zaXplJiYhKEFyJnApKXJldHVybiExO3ZhciBTcz1v''@;'; put 'put ''bC5nZXQoQW4pO2lmKFNzKXJldHVybiBTcz09YW47QXJ8PU4sb2wuc2V0KEFuLGFuKTt2YXIgamw9eTAoem8oQW4pLHpvKGFuKSxBcixQbyxlbyxvbCk7cmV0dXJuIG9sLmRlbGV0ZShBbiksamw7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKHJuKXJldHVybiBybi5jYWxsKEFuKT09cm4uY2Fs''@;'; put 'put ''bChhbil9cmV0dXJuITF9KEFuLGFuLFZzLHZpLEFyLFBvLGVvKTtpZighKHZpJnApKXt2YXIgTXQ9amwmJnR0LmNhbGwoQW4sIl9fd3JhcHBlZF9fIiksQnQ9SG8mJnR0LmNhbGwoYW4sIl9fd3JhcHBlZF9fIik7aWYoTXR8fEJ0KXt2YXIgX249TXQ/QW4udmFsdWUoKTpBbixtbj1CdD9hbi52''@;'; put 'put ''YWx1ZSgpOmFuO3JldHVybiBlb3x8KGVvPW5ldyBsYSksUG8oX24sbW4sdmksQXIsZW8pfX1yZXR1cm4hIWtvJiYoZW98fChlbz1uZXcgbGEpLGZ1bmN0aW9uIEx1KEFuLGFuLHZpLEFyLFBvLGVvKXt2YXIgb2w9dmkmcCx6bz1QcihBbiksVnM9em8ubGVuZ3RoO2lmKFZzIT1QcihhbikubGVu''@;'; put 'put ''Z3RoJiYhb2wpcmV0dXJuITE7Zm9yKHZhciBIbz1WcztIby0tOyl7dmFyIGtvPXpvW0hvXTtpZighKG9sP2tvIGluIGFuOnR0LmNhbGwoYW4sa28pKSlyZXR1cm4hMX12YXIgTXQ9ZW8uZ2V0KEFuKTtpZihNdCYmZW8uZ2V0KGFuKSlyZXR1cm4gTXQ9PWFuO3ZhciBCdD0hMDtlby5zZXQoQW4s''@;'; put 'put ''YW4pLGVvLnNldChhbixBbik7Zm9yKHZhciBfbj1vbDsrK0hvPFZzOyl7dmFyIG1uPUFuW2tvPXpvW0hvXV0sSW49YW5ba29dO2lmKEFyKXZhciB5bj1vbD9BcihJbixtbixrbyxhbixBbixlbyk6QXIobW4sSW4sa28sQW4sYW4sZW8pO2lmKCEodm9pZCAwPT09eW4/bW49PT1Jbnx8UG8obW4s''@;'; put 'put ''SW4sdmksQXIsZW8pOnluKSl7QnQ9ITE7YnJlYWt9X258fChfbj0iY29uc3RydWN0b3IiPT1rbyl9aWYoQnQmJiFfbil7dmFyIHVyPUFuLmNvbnN0cnVjdG9yLHlpPWFuLmNvbnN0cnVjdG9yO3VyIT15aSYmImNvbnN0cnVjdG9yImluIEFuJiYiY29uc3RydWN0b3IiaW4gYW4mJiEoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHVyJiZ1ciBpbnN0YW5jZW9mIHVyJiYiZnVuY3Rpb24iPT10eXBlb2YgeWkmJnlpIGluc3RhbmNlb2YgeWkpJiYoQnQ9ITEpfXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksQnR9KEFuLGFuLHZpLEFyLFBvLGVvKSl9KEFuLGFuLHZpLEFyLGlyLFBvKSl9''@;'; put 'put ''ZnVuY3Rpb24geTAoQW4sYW4sdmksQXIsUG8sZW8pe3ZhciBvbD12aSZwLHpvPUFuLmxlbmd0aCxWcz1hbi5sZW5ndGg7aWYoem8hPVZzJiYhKG9sJiZWcz56bykpcmV0dXJuITE7dmFyIFNzPWVvLmdldChBbik7aWYoU3MmJmVvLmdldChhbikpcmV0dXJuIFNzPT1hbjt2YXIgamw9LTEsSG89''@;'; put 'put ''ITAsa289dmkmTj9uZXcgV2k6dm9pZCAwO2Zvcihlby5zZXQoQW4sYW4pLGVvLnNldChhbixBbik7KytqbDx6bzspe3ZhciBNdD1BbltqbF0sQnQ9YW5bamxdO2lmKEFyKXZhciBfbj1vbD9BcihCdCxNdCxqbCxhbixBbixlbyk6QXIoTXQsQnQsamwsQW4sYW4sZW8pO2lmKHZvaWQgMCE9PV9u''@;'; put 'put ''KXtpZihfbiljb250aW51ZTtIbz0hMTticmVha31pZihrbyl7aWYoIUllKGFuLGZ1bmN0aW9uKG1uLEluKXtpZigha2Uoa28sSW4pJiYoTXQ9PT1tbnx8UG8oTXQsbW4sdmksQXIsZW8pKSlyZXR1cm4ga28ucHVzaChJbil9KSl7SG89ITE7YnJlYWt9fWVsc2UgaWYoTXQhPT1CdCYmIVBvKE10''@;'; put 'put ''LEJ0LHZpLEFyLGVvKSl7SG89ITE7YnJlYWt9fXJldHVybiBlby5kZWxldGUoQW4pLGVvLmRlbGV0ZShhbiksSG99ZnVuY3Rpb24gUHIoQW4pe3JldHVybiBmdW5jdGlvbiBwdShBbixhbix2aSl7dmFyIEFyPWFuKEFuKTtyZXR1cm4gZGYoQW4pP0FyOmZ1bmN0aW9uIFJlKEFuLGFuKXtmb3Io''@;'; put 'put ''dmFyIHZpPS0xLEFyPWFuLmxlbmd0aCxQbz1Bbi5sZW5ndGg7Kyt2aTxBcjspQW5bUG8rdmldPWFuW3ZpXTtyZXR1cm4gQW59KEFyLHZpKEFuKSl9KEFuLCRoLENzKX1mdW5jdGlvbiBvZChBbixhbil7dmFyIHZpPUFuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBRYyhBbil7dmFyIGFuPXR5''@;'; put 'put ''cGVvZiBBbjtyZXR1cm4ic3RyaW5nIj09YW58fCJudW1iZXIiPT1hbnx8InN5bWJvbCI9PWFufHwiYm9vbGVhbiI9PWFuPyJfX3Byb3RvX18iIT09QW46bnVsbD09PUFufShhbik/dmlbInN0cmluZyI9PXR5cGVvZiBhbj8ic3RyaW5nIjoiaGFzaCJdOnZpLm1hcH1mdW5jdGlvbiBZaChBbixh''@;'; put 'put ''bil7dmFyIHZpPWZ1bmN0aW9uIF90KEFuLGFuKXtyZXR1cm4gQW4/Llthbl19KEFuLGFuKTtyZXR1cm4gZnVuY3Rpb24gdWkoQW4pe3JldHVybiEoIU9jKEFuKXx8ZnVuY3Rpb24gbjUoQW4pe3JldHVybiEhTmUmJk5lIGluIEFufShBbikpJiYoZmYoQW4pP3F0OmFlKS50ZXN0KE9sKEFuKSl9''@;'; put 'put ''KHZpKT92aTp2b2lkIDB9enQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGhpKCl7dGhpcy5fX2RhdGFfXz1yaT9yaShudWxsKTp7fSx0aGlzLnNpemU9MH0senQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB1bihBbil7dmFyIGFuPXRoaXMuaGFzKEFuKSYmZGVsZXRlIHRoaXMuX19kYXRh''@;'; put 'put ''X19bQW5dO3JldHVybiB0aGlzLnNpemUtPWFuPzE6MCxhbn0senQucHJvdG90eXBlLmdldD1mdW5jdGlvbiBmbihBbil7dmFyIGFuPXRoaXMuX19kYXRhX187aWYocmkpe3ZhciB2aT1hbltBbl07cmV0dXJuIHZpPT09Xz92b2lkIDA6dml9cmV0dXJuIHR0LmNhbGwoYW4sQW4pP2FuW0FuXTp2''@;'; put 'put ''b2lkIDB9LHp0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fO3JldHVybiByaT92b2lkIDAhPT1hbltBbl06dHQuY2FsbChhbixBbil9LHp0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWHQoQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fO3JldHVy''@;'; put 'put ''biB0aGlzLnNpemUrPXRoaXMuaGFzKEFuKT8wOjEsdmlbQW5dPXJpJiZ2b2lkIDA9PT1hbj9fOmFuLHRoaXN9LGVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiB1YSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LGVuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gRWkoQW4pe3Zh''@;'; put 'put ''ciBhbj10aGlzLl9fZGF0YV9fLHZpPXlsKGFuLEFuKTtyZXR1cm4hKHZpPDB8fCh2aT09YW4ubGVuZ3RoLTE/YW4ucG9wKCk6c24uY2FsbChhbix2aSwxKSwtLXRoaXMuc2l6ZSwwKSl9LGVuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gdnIoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLHZpPXls''@;'; put 'put ''KGFuLEFuKTtyZXR1cm4gdmk8MD92b2lkIDA6YW5bdmldWzFdfSxlbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFduKEFuKXtyZXR1cm4geWwodGhpcy5fX2RhdGFfXyxBbik+LTF9LGVuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gJGkoQW4sYW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fLEFyPXls''@;'; put 'put ''KHZpLEFuKTtyZXR1cm4gQXI8MD8oKyt0aGlzLnNpemUsdmkucHVzaChbQW4sYW5dKSk6dmlbQXJdWzFdPWFuLHRoaXN9LGVpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBRcigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IHp0LG1hcDpuZXcoQXR8fGVuKSxzdHJpbmc6''@;'; put 'put ''bmV3IHp0fX0sZWkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBWaShBbil7dmFyIGFuPW9kKHRoaXMsQW4pLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSxlaS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIE5pKEFuKXtyZXR1cm4gb2QodGhpcyxBbikuZ2V0KEFuKX0s''@;'; put 'put ''ZWkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBEYShBbil7cmV0dXJuIG9kKHRoaXMsQW4pLmhhcyhBbil9LGVpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTHIoQW4sYW4pe3ZhciB2aT1vZCh0aGlzLEFuKSxBcj12aS5zaXplO3JldHVybiB2aS5zZXQoQW4sYW4pLHRoaXMuc2l6ZSs9dmkuc2l6''@;'; put 'put ''ZT09QXI/MDoxLHRoaXN9LFdpLnByb3RvdHlwZS5hZGQ9V2kucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gcGEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChBbixfKSx0aGlzfSxXaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFFuKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoQW4p''@;'; put 'put ''fSxsYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gYmEoKXt0aGlzLl9fZGF0YV9fPW5ldyBlbix0aGlzLnNpemU9MH0sbGEucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBMYShBbil7dmFyIGFuPXRoaXMuX19kYXRhX18sdmk9YW4uZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXplPWFuLnNp''@;'; put 'put ''emUsdml9LGxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gRmEoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChBbil9LGxhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gdGkoQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhBbil9LGxhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gZ28oQW4s''@;'; put 'put ''YW4pe3ZhciB2aT10aGlzLl9fZGF0YV9fO2lmKHZpIGluc3RhbmNlb2YgZW4pe3ZhciBBcj12aS5fX2RhdGFfXztpZighQXR8fEFyLmxlbmd0aDwxOTkpcmV0dXJuIEFyLnB1c2goW0FuLGFuXSksdGhpcy5zaXplPSsrdmkuc2l6ZSx0aGlzO3ZpPXRoaXMuX19kYXRhX189bmV3IGVpKEFyKX1y''@;'; put 'put ''ZXR1cm4gdmkuc2V0KEFuLGFuKSx0aGlzLnNpemU9dmkuc2l6ZSx0aGlzfTt2YXIgQ3M9aG4/ZnVuY3Rpb24oQW4pe3JldHVybiBudWxsPT1Bbj9bXTooQW49T2JqZWN0KEFuKSxmdW5jdGlvbiBGZShBbixhbil7Zm9yKHZhciB2aT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aCxQbz0wLGVv''@;'; put 'put ''PVtdOysrdmk8QXI7KXt2YXIgb2w9QW5bdmldO2FuKG9sLHZpLEFuKSYmKGVvW1BvKytdPW9sKX1yZXR1cm4gZW99KGhuKEFuKSxmdW5jdGlvbihhbil7cmV0dXJuIFF0LmNhbGwoQW4sYW4pfSkpfTpmdW5jdGlvbiBLaCgpe3JldHVybltdfSxZaT1MYztmdW5jdGlvbiBibChBbixhbil7cmV0''@;'; put 'put ''dXJuISEoYW49YW4/P3cpJiYoIm51bWJlciI9PXR5cGVvZiBBbnx8bmUudGVzdChBbikpJiZBbj4tMSYmQW4lMT09MCYmQW48YW59ZnVuY3Rpb24gT2woQW4pe2lmKG51bGwhPUFuKXt0cnl7cmV0dXJuICRlLmNhbGwoQW4pfWNhdGNoe310cnl7cmV0dXJuIEFuKyIifWNhdGNoe319cmV0dXJu''@;'; put 'put ''IiJ9ZnVuY3Rpb24gdWYoQW4sYW4pe3JldHVybiBBbj09PWFufHxBbiE9QW4mJmFuIT1hbn0oV3QmJllpKG5ldyBXdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9enx8QXQmJllpKG5ldyBBdCkhPVd8fFJuJiZZaShSbi5yZXNvbHZlKCkpIT1YfHxzdCYmWWkobmV3IHN0KSE9b2V8fFV0JiZZaShu''@;'; put 'put ''ZXcgVXQpIT1TZSkmJihZaT1mdW5jdGlvbihBbil7dmFyIGFuPUxjKEFuKSx2aT1hbj09UT9Bbi5jb25zdHJ1Y3Rvcjp2b2lkIDAsQXI9dmk/T2wodmkpOiIiO2lmKEFyKXN3aXRjaChBcil7Y2FzZSBXZTpyZXR1cm4gejtjYXNlIFR0OnJldHVybiBXO2Nhc2UgbnI6cmV0dXJuIFg7Y2FzZSBo''@;'; put 'put ''dDpyZXR1cm4gb2U7Y2FzZSB4dDpyZXR1cm4gU2V9cmV0dXJuIGFufSk7dmFyIHNkPUQwKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/RDA6ZnVuY3Rpb24oQW4pe3JldHVybiBOYShBbikmJnR0LmNhbGwoQW4sImNhbGxlZSIpJiYhUXQuY2FsbChBbiwiY2FsbGVlIil9LGRmPUFy''@;'; put 'put ''cmF5LmlzQXJyYXksaGY9ZnR8fGZ1bmN0aW9uIHFoKCl7cmV0dXJuITF9O2Z1bmN0aW9uIGZmKEFuKXtpZighT2MoQW4pKXJldHVybiExO3ZhciBhbj1MYyhBbik7cmV0dXJuIGFuPT1ZfHxhbj09Qnx8YW49PVJ8fGFuPT10ZX1mdW5jdGlvbiBHaChBbil7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBBbiYmQW4+LTEmJkFuJTE9PTAmJkFuPD13fWZ1bmN0aW9uIE9jKEFuKXt2YXIgYW49dHlwZW9mIEFuO3JldHVybiBudWxsIT1BbiYmKCJvYmplY3QiPT1hbnx8ImZ1bmN0aW9uIj09YW4pfWZ1bmN0aW9uIE5hKEFuKXtyZXR1cm4gbnVsbCE9QW4mJiJvYmplY3QiPT10eXBlb2YgQW59dmFy''@;'; put 'put ''IEQzPUFlP2Z1bmN0aW9uIERlKEFuKXtyZXR1cm4gZnVuY3Rpb24oYW4pe3JldHVybiBBbihhbil9fShBZSk6ZnVuY3Rpb24gVnQoQW4pe3JldHVybiBOYShBbikmJkdoKEFuLmxlbmd0aCkmJiEhbGVbTGMoQW4pXX07ZnVuY3Rpb24gJGgoQW4pe3JldHVybiBmdW5jdGlvbiBrMShBbil7cmV0''@;'; put 'put ''dXJuIG51bGwhPUFuJiZHaChBbi5sZW5ndGgpJiYhZmYoQW4pfShBbik/ZnVuY3Rpb24gTnMoQW4sYW4pe3ZhciB2aT1kZihBbiksQXI9IXZpJiZzZChBbiksUG89IXZpJiYhQXImJmhmKEFuKSxlbz0hdmkmJiFBciYmIVBvJiZEMyhBbiksb2w9dml8fEFyfHxQb3x8ZW8sem89b2w/ZnVuY3Rp''@;'; put 'put ''b24gSGUoQW4sYW4pe2Zvcih2YXIgdmk9LTEsQXI9QXJyYXkoQW4pOysrdmk8QW47KUFyW3ZpXT1hbih2aSk7cmV0dXJuIEFyfShBbi5sZW5ndGgsU3RyaW5nKTpbXSxWcz16by5sZW5ndGg7Zm9yKHZhciBTcyBpbiBBbikoYW58fHR0LmNhbGwoQW4sU3MpKSYmKCFvbHx8ISgibGVuZ3RoIj09''@;'; put 'put ''U3N8fFBvJiYoIm9mZnNldCI9PVNzfHwicGFyZW50Ij09U3MpfHxlbyYmKCJidWZmZXIiPT1Tc3x8ImJ5dGVMZW5ndGgiPT1Tc3x8ImJ5dGVPZmZzZXQiPT1Tcyl8fGJsKFNzLFZzKSkpJiZ6by5wdXNoKFNzKTtyZXR1cm4gem99KEFuKTpmdW5jdGlvbiBKcihBbil7aWYoIWZ1bmN0aW9uIGIw''@;'; put 'put ''KEFuKXt2YXIgYW49QW4mJkFuLmNvbnN0cnVjdG9yO3JldHVybiBBbj09PSgiZnVuY3Rpb24iPT10eXBlb2YgYW4mJmFuLnByb3RvdHlwZXx8RHQpfShBbikpcmV0dXJuIE9yKEFuKTt2YXIgYW49W107Zm9yKHZhciB2aSBpbiBPYmplY3QoQW4pKXR0LmNhbGwoQW4sdmkpJiYiY29uc3RydWN0''@;'; put 'put ''b3IiIT12aSYmYW4ucHVzaCh2aSk7cmV0dXJuIGFufShBbil9Y2UuZXhwb3J0cz1mdW5jdGlvbiBlaChBbixhbil7cmV0dXJuIGlyKEFuLGFuKX19LDg0MjM6KGNlLEosYik9Pnt2YXIgUj0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGo9''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBiLmcmJmIuZyYmYi5nLk9iamVjdD09PU9iamVjdCYmYi5nfHxSfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLFA9T2JqZWN0LnByb3RvdHlwZSxMPVAuaGFzT3duUHJvcGVydHksWT1QLnRvU3RyaW5nLEI9ai5TeW1ib2wsVz1CP0IudG9TdHJpbmdUYWc6dm9p''@;'; put 'put ''ZCAwO2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChyZSl7aWYoIWZ1bmN0aW9uIHRlKHJlKXt2YXIgb2U9dHlwZW9mIHJlO3JldHVybiBudWxsIT1yZSYmKCJvYmplY3QiPT1vZXx8ImZ1bmN0aW9uIj09b2UpfShyZSkpcmV0dXJuITE7dmFyIG9lPWZ1bmN0aW9uIFoocmUpe3JldHVybiBudWxsPT1y''@;'; put 'put ''ZT92b2lkIDA9PT1yZT8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6VyYmVyBpbiBPYmplY3QocmUpP2Z1bmN0aW9uIHEocmUpe3ZhciBvZT1MLmNhbGwocmUsVyksZ2U9cmVbV107dHJ5e3JlW1ddPXZvaWQgMDt2YXIgX2U9ITB9Y2F0Y2h7fXZhciBUZT1ZLmNhbGwocmUp''@;'; put 'put ''O3JldHVybiBfZSYmKG9lP3JlW1ddPWdlOmRlbGV0ZSByZVtXXSksVGV9KHJlKTpmdW5jdGlvbiBRKHJlKXtyZXR1cm4gWS5jYWxsKHJlKX0ocmUpfShyZSk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09b2V8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PW9lfHwiW29iamVjdCBB''@;'; put 'put ''c3luY0Z1bmN0aW9uXSI9PW9lfHwiW29iamVjdCBQcm94eV0iPT1vZX19LDk3MjI6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uIEooYil7cmV0dXJuIG51bGw9PWJ9fSw5NzM4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5hYnN9LDYzMjk6Y2U9PnsidXNlIHN0cmljdCI7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1NYXRoLmZsb29yfSwzNjc4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihiKXtyZXR1cm4gYiE9Yn19LDIyNjQ6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLm1heH0sNTczMDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5l''@;'; put 'put ''eHBvcnRzPU1hdGgubWlufSw3MDc6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLnBvd30sMzg2MjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucm91bmR9LDk1NTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNjc4KTtjZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBEKHApfHwwPT09cD9wOnA8MD8tMToxfX0sMjMxODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU3MTcpLF89YigzMzQ5KSxwPWIoOTUwOSkuQnVmZmVyLE49bmV3IEFycmF5KDE2KTtmdW5jdGlvbiB3KCl7Xy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTcz''@;'; put 'put ''MjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIEYoTCxZKXtyZXR1cm4gTDw8WXxMPj4+MzItWX1mdW5jdGlvbiBIKEwsWSxCLFcsWixxLFEpe3JldHVybiBGKEwrKFkmQnx+WSZXKStaK3F8MCxRKStZfDB9ZnVu''@;'; put 'put ''Y3Rpb24gUihMLFksQixXLFoscSxRKXtyZXR1cm4gRihMKyhZJld8QiZ+VykrWitxfDAsUSkrWXwwfWZ1bmN0aW9uIGooTCxZLEIsVyxaLHEsUSl7cmV0dXJuIEYoTCsoWV5CXlcpK1orcXwwLFEpK1l8MH1mdW5jdGlvbiBQKEwsWSxCLFcsWixxLFEpe3JldHVybiBGKEwrKEJeKFl8flcpKSta''@;'; put 'put ''K3F8MCxRKStZfDB9RCh3LF8pLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEw9TixZPTA7WTwxNjsrK1kpTFtZXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KlkpO3ZhciBCPXRoaXMuX2EsVz10aGlzLl9iLFo9dGhpcy5fYyxxPXRoaXMuX2Q7Qj1IKEIsVyxaLHEs''@;'; put 'put ''TFswXSwzNjE0MDkwMzYwLDcpLHE9SChxLEIsVyxaLExbMV0sMzkwNTQwMjcxMCwxMiksWj1IKFoscSxCLFcsTFsyXSw2MDYxMDU4MTksMTcpLFc9SChXLFoscSxCLExbM10sMzI1MDQ0MTk2NiwyMiksQj1IKEIsVyxaLHEsTFs0XSw0MTE4NTQ4Mzk5LDcpLHE9SChxLEIsVyxaLExbNV0sMTIw''@;'; put 'put ''MDA4MDQyNiwxMiksWj1IKFoscSxCLFcsTFs2XSwyODIxNzM1OTU1LDE3KSxXPUgoVyxaLHEsQixMWzddLDQyNDkyNjEzMTMsMjIpLEI9SChCLFcsWixxLExbOF0sMTc3MDAzNTQxNiw3KSxxPUgocSxCLFcsWixMWzldLDIzMzY1NTI4NzksMTIpLFo9SChaLHEsQixXLExbMTBdLDQyOTQ5MjUy''@;'; put 'put ''MzMsMTcpLFc9SChXLFoscSxCLExbMTFdLDIzMDQ1NjMxMzQsMjIpLEI9SChCLFcsWixxLExbMTJdLDE4MDQ2MDM2ODIsNykscT1IKHEsQixXLFosTFsxM10sNDI1NDYyNjE5NSwxMiksWj1IKFoscSxCLFcsTFsxNF0sMjc5Mjk2NTAwNiwxNyksQj1SKEIsVz1IKFcsWixxLEIsTFsxNV0sMTIz''@;'; put 'put ''NjUzNTMyOSwyMiksWixxLExbMV0sNDEyOTE3MDc4Niw1KSxxPVIocSxCLFcsWixMWzZdLDMyMjU0NjU2NjQsOSksWj1SKFoscSxCLFcsTFsxMV0sNjQzNzE3NzEzLDE0KSxXPVIoVyxaLHEsQixMWzBdLDM5MjEwNjk5OTQsMjApLEI9UihCLFcsWixxLExbNV0sMzU5MzQwODYwNSw1KSxxPVIo''@;'; put 'put ''cSxCLFcsWixMWzEwXSwzODAxNjA4Myw5KSxaPVIoWixxLEIsVyxMWzE1XSwzNjM0NDg4OTYxLDE0KSxXPVIoVyxaLHEsQixMWzRdLDM4ODk0Mjk0NDgsMjApLEI9UihCLFcsWixxLExbOV0sNTY4NDQ2NDM4LDUpLHE9UihxLEIsVyxaLExbMTRdLDMyNzUxNjM2MDYsOSksWj1SKFoscSxCLFcs''@;'; put 'put ''TFszXSw0MTA3NjAzMzM1LDE0KSxXPVIoVyxaLHEsQixMWzhdLDExNjM1MzE1MDEsMjApLEI9UihCLFcsWixxLExbMTNdLDI4NTAyODU4MjksNSkscT1SKHEsQixXLFosTFsyXSw0MjQzNTYzNTEyLDkpLFo9UihaLHEsQixXLExbN10sMTczNTMyODQ3MywxNCksQj1qKEIsVz1SKFcsWixxLEIs''@;'; put 'put ''TFsxMl0sMjM2ODM1OTU2MiwyMCksWixxLExbNV0sNDI5NDU4ODczOCw0KSxxPWoocSxCLFcsWixMWzhdLDIyNzIzOTI4MzMsMTEpLFo9aihaLHEsQixXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9aihXLFoscSxCLExbMTRdLDQyNTk2NTc3NDAsMjMpLEI9aihCLFcsWixxLExbMV0sMjc2Mzk3''@;'; put 'put ''NTIzNiw0KSxxPWoocSxCLFcsWixMWzRdLDEyNzI4OTMzNTMsMTEpLFo9aihaLHEsQixXLExbN10sNDEzOTQ2OTY2NCwxNiksVz1qKFcsWixxLEIsTFsxMF0sMzIwMDIzNjY1NiwyMyksQj1qKEIsVyxaLHEsTFsxM10sNjgxMjc5MTc0LDQpLHE9aihxLEIsVyxaLExbMF0sMzkzNjQzMDA3NCwx''@;'; put 'put ''MSksWj1qKFoscSxCLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPWooVyxaLHEsQixMWzZdLDc2MDI5MTg5LDIzKSxCPWooQixXLFoscSxMWzldLDM2NTQ2MDI4MDksNCkscT1qKHEsQixXLFosTFsxMl0sMzg3MzE1MTQ2MSwxMSksWj1qKFoscSxCLFcsTFsxNV0sNTMwNzQyNTIwLDE2KSxCPVAo''@;'; put 'put ''QixXPWooVyxaLHEsQixMWzJdLDMyOTk2Mjg2NDUsMjMpLFoscSxMWzBdLDQwOTYzMzY0NTIsNikscT1QKHEsQixXLFosTFs3XSwxMTI2ODkxNDE1LDEwKSxaPVAoWixxLEIsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPVAoVyxaLHEsQixMWzVdLDQyMzc1MzMyNDEsMjEpLEI9UChCLFcsWixx''@;'; put 'put ''LExbMTJdLDE3MDA0ODU1NzEsNikscT1QKHEsQixXLFosTFszXSwyMzk5OTgwNjkwLDEwKSxaPVAoWixxLEIsVyxMWzEwXSw0MjkzOTE1NzczLDE1KSxXPVAoVyxaLHEsQixMWzFdLDIyNDAwNDQ0OTcsMjEpLEI9UChCLFcsWixxLExbOF0sMTg3MzMxMzM1OSw2KSxxPVAocSxCLFcsWixMWzE1''@;'; put 'put ''XSw0MjY0MzU1NTUyLDEwKSxaPVAoWixxLEIsVyxMWzZdLDI3MzQ3Njg5MTYsMTUpLFc9UChXLFoscSxCLExbMTNdLDEzMDkxNTE2NDksMjEpLEI9UChCLFcsWixxLExbNF0sNDE0OTQ0NDIyNiw2KSxxPVAocSxCLFcsWixMWzExXSwzMTc0NzU2OTE3LDEwKSxaPVAoWixxLEIsVyxMWzJdLDcx''@;'; put 'put ''ODc4NzI1OSwxNSksVz1QKFcsWixxLEIsTFs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErQnwwLHRoaXMuX2I9dGhpcy5fYitXfDAsdGhpcy5fYz10aGlzLl9jK1p8MCx0aGlzLl9kPXRoaXMuX2QrcXwwfSx3LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxv''@;'; put 'put ''Y2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQs''@;'; put 'put ''NTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9cC5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVJbnQzMkxFKHRoaXMuX2Es''@;'; put 'put ''MCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEx9LGNlLmV4cG9ydHM9d30sMzA0NzooY2UsSixiKT0+e3ZhciBEPWIoNjI0MCksXz1iKDk5MzEpO2Z1bmN0aW9uIHAoTil7dGhpcy5yYW5kPU58''@;'; put 'put ''fG5ldyBfLlJhbmR9Y2UuZXhwb3J0cz1wLHAuY3JlYXRlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgcCh3KX0scC5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbih3KXt2YXIgRj13LmJpdExlbmd0aCgpLEg9TWF0aC5jZWlsKEYvOCk7ZG97dmFyIFI9bmV3IEQodGhpcy5yYW5kLmdlbmVy''@;'; put 'put ''YXRlKEgpKX13aGlsZShSLmNtcCh3KT49MCk7cmV0dXJuIFJ9LHAucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxGKXt2YXIgSD1GLnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEgpKX0scC5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih3LEYsSCl7dmFyIFI9dy5i''@;'; put 'put ''aXRMZW5ndGgoKSxqPUQubW9udCh3KSxQPW5ldyBEKDEpLnRvUmVkKGopO0Z8fChGPU1hdGgubWF4KDEsUi80OHwwKSk7Zm9yKHZhciBMPXcuc3VibigxKSxZPTA7IUwudGVzdG4oWSk7WSsrKTtmb3IodmFyIEI9dy5zaHJuKFkpLFc9TC50b1JlZChqKTtGPjA7Ri0tKXt2YXIgcT10aGlzLl9y''@;'; put 'put ''YW5kcmFuZ2UobmV3IEQoMiksTCk7SCYmSChxKTt2YXIgUT1xLnRvUmVkKGopLnJlZFBvdyhCKTtpZigwIT09US5jbXAoUCkmJjAhPT1RLmNtcChXKSl7Zm9yKHZhciBYPTE7WDxZO1grKyl7aWYoMD09PShRPVEucmVkU3FyKCkpLmNtcChQKSlyZXR1cm4hMTtpZigwPT09US5jbXAoVykpYnJl''@;'; put 'put ''YWt9aWYoWD09PVkpcmV0dXJuITF9fXJldHVybiEwfSxwLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsRil7dmFyIEg9dy5iaXRMZW5ndGgoKSxSPUQubW9udCh3KSxqPW5ldyBEKDEpLnRvUmVkKFIpO0Z8fChGPU1hdGgubWF4KDEsSC80OHwwKSk7Zm9yKHZhciBQPXcuc3Vibigx''@;'; put 'put ''KSxMPTA7IVAudGVzdG4oTCk7TCsrKTtmb3IodmFyIFk9dy5zaHJuKEwpLEI9UC50b1JlZChSKTtGPjA7Ri0tKXt2YXIgVz10aGlzLl9yYW5kcmFuZ2UobmV3IEQoMiksUCksWj13LmdjZChXKTtpZigwIT09Wi5jbXBuKDEpKXJldHVybiBaO3ZhciBxPVcudG9SZWQoUikucmVkUG93KFkpO2lm''@;'; put 'put ''KDAhPT1xLmNtcChqKSYmMCE9PXEuY21wKEIpKXtmb3IodmFyIFE9MTtRPEw7USsrKXtpZigwPT09KHE9cS5yZWRTcXIoKSkuY21wKGopKXJldHVybiBxLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtpZigwPT09cS5jbXAoQikpYnJlYWt9aWYoUT09PUwpcmV0dXJuKHE9cS5yZWRTcXIoKSku''@;'; put 'put ''ZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6''@;'; put 'put ''LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1u''@;'; put 'put ''dWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3Jk''@;'; put 'put ''U2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5''@;'; put 'put ''PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgoeix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHktMSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2YXIgVT16LmNoYXJD''@;'; put 'put ''b2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcrMTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6''@;'; put 'put ''ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBs''@;'; put 'put ''YWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQm''@;'; put 'put ''NjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBB''@;'; put 'put ''cnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8''@;'; put 'put ''VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxVJjY3''@;'; put 'put ''MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRo''@;'; put 'put ''aXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4''@;'; put 'put ''ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNb''@;'; put 'put ''Vis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgVj1nLmxl''@;'; put 'put ''bmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9MTtmb3IobT1qKGcs''@;'; put 'put ''QSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9''@;'; put 'put ''bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhp''@;'; put 'put ''cy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3''@;'; put 'put ''LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3''@;'; put 'put ''LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3Ro''@;'; put 'put ''PXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0sVj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEp''@;'; put 'put ''LGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0oVj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxnLndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxF''@;'; put 'put ''OnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10aGlzLndvcmRzW1Zd''@;'; put 'put ''LEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsVi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxl''@;'; put 'put ''bmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBu''@;'; put 'put ''ZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gp''@;'; put 'put ''LHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09''@;'; put 'put ''PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNP''@;'; put 'put ''Tj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwi''@;'; put 'put ''UmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtmb3IoO208VDttKysp''@;'; put 'put ''VVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzIt''@;'; put 'put ''TWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rp''@;'; put 'put ''b24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIseT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhp''@;'; put 'put ''cy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSku''@;'; put 'put ''aW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ld''@;'; put 'put ''PXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVu''@;'; put 'put ''Z3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1''@;'; put 'put ''cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBn''@;'; put 'put ''Lm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4Lndv''@;'; put 'put ''cmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14LndvcmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/''@;'; put 'put ''KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxULmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jk''@;'; put 'put ''c1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtVPEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFUpLEMhPT10aGlz''@;'; put 'put ''JiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMsVT0wLGFlPTB8Q1sw''@;'; put 'put ''XSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsUWU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxCZT04MTkxJlhlLEFlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxIZT0wfENbNV0sRGU9''@;'; put 'put ''ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90Pj4+MTMsbG49MHxDWzddLHl0PTgxOTEmbG4sU3Q9bG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEm''@;'; put 'put ''cXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0''@;'; put 'put ''PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSx1bj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdh''@;'; put 'put ''dGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KFUrKEU9TWF0aC5pbXVsKG5lLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxQdCkpK01hdGguaW11bChsZSxSdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRoLmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KTt2YXIgRWk9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB2cj0oVSsoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZ0KXww''@;'; put 'put ''KStNYXRoLmltdWwobGUsaG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChCZSxSdCksbT0obT1NYXRoLmltdWwoQmUsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwoQWUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgV249KFUrKEU9RStNYXRoLmltdWwobmUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFd0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKEJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoQmUsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MDt2YXIgJGk9KFUrKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxVdCl8MCkrTWF0aC5pbXVsKGxlLHN0KXwwKSk8PDEzKXwwO1U9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGxlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsUnQpLG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLFJ0KXwwLEE9TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoQmUsaG4pfDAsbT0obT1tK01hdGguaW11bChCZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLFV0KXwwO3ZhciBlaT0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVp''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsUXQpfDAsbT0obT1tK01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoQmUsQXQpfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRoLmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx4dCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEzKXwwO1U9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGxlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKFN0LFJ0KXwwLEE9TWF0aC5pbXVsKFN0LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmltdWwoRGUsaG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEFlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''aHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MDt2YXIgVmk9KFUrKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLHJuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCxRdCl8MCxBPUErTWF0aC5pbXVsKFN0LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxXdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV3QpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoQmUs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChCZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSx1bil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwobGUsdW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxSdCksbT0obT1NYXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoU3Qs''@;'; put 'put ''aG4pfDAsQT1BK01hdGguaW11bChTdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwLEU9RStNYXRoLmltdWwoRGUsc3QpfDAsbT0obT1tK01hdGguaW11bChEZSxV''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEJlLGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoUWUsdW4pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgRGE9KFUrKEU9RStNYXRoLmltdWwobmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKGxlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUXQpLG09KG09TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNu''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKFN0LFd0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MCxFPUUrTWF0aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwoRGUsVHQpfDApK01h''@;'; put 'put ''dGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChCZSxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHVuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1bil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oVSsoRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChO''@;'; put 'put ''ZSxobiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEplLFR0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01hdGguaW11bChEZSx4dCl8MCkrTWF0aC5pbXVsKGtlLGh0KXwwLEE9QStNYXRoLmltdWwoa2UseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBXaT0oVSsoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXdCksbT0obT1NYXRoLmltdWwoTmUsQXQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoU3QsV2UpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''RGUscm4pfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bChSZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsdW4pfDAsQT1BK01hdGguaW11bChJZSxm''@;'; put 'put ''bil8MDt2YXIgcGE9KFUrKEU9RStNYXRoLmltdWwoQmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChCZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwoTmUsc3QpLG09KG09TWF0aC5pbXVsKE5lLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKFN0LGh0KXwwLEE9QStNYXRoLmltdWwoU3QseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''SmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLHVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxBPUErTWF0aC5pbXVsKGtlLGZuKXwwO3ZhciBRbj0oVSsoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRoLmltdWwoTmUsVHQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LHVuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSx1bil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBsYT0oVSsoRT1F''@;'; put 'put ''K01hdGguaW11bChEZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoa2UsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChO''@;'; put 'put ''ZSxodCksbT0obT1NYXRoLmltdWwoTmUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bCh5dCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoU3QsdW4pfDAsQT1BK01hdGguaW11bChTdCxmbil8MDt2YXIgYmE9KFUrKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUscm4pLG09KG09TWF0aC5pbXVsKE5lLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oVSsoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXww''@;'; put 'put ''KStNYXRoLmltdWwoU3QsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoU3QsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSx1biksbT0obT1NYXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsdW4pfDAsQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsZm4pO3ZhciBGYT0oVSsoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZh''@;'; put 'put ''Jj02NzEwODg2Mzt2YXIgdGk9KFUrKEU9TWF0aC5pbXVsKE5lLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChOZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3''@;'; put 'put ''MTA4ODYzLFZbMF09dWEsVlsxXT1FaSxWWzJdPXZyLFZbM109V24sVls0XT0kaSxWWzVdPWVpLFZbNl09UXIsVls3XT1WaSxWWzhdPU5pLFZbOV09RGEsVlsxMF09THIsVlsxMV09V2ksVlsxMl09cGEsVlsxM109UW4sVlsxNF09bGEsVlsxNV09YmEsVlsxNl09TGEsVlsxN109RmEsVlsxOF09''@;'; put 'put ''dGksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEoeixnLHkpe3JldHVybihuZXcgWCkubXVscCh6LGcseSl9ZnVuY3Rpb24gWCh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIg''@;'; put 'put ''eCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcseSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcSh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUseS5sZW5ndGg9ei5s''@;'; put 'put ''ZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBsZT0oMHx6LndvcmRz''@;'; put 'put ''W1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09''@;'; put 'put ''eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkpLHh9LFgucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMs''@;'; put 'put ''eCxnKTtyZXR1cm4geX0sWC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LFgucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5''@;'; put 'put ''LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRbVV09eFtnW1VdXX0sWC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHkseCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3IodmFyIEU9VTw8MSxt''@;'; put 'put ''PU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBVZT14W2FlK3dlXSxRZT1DW2FlK3dlXSxvdD14W2FlK3dlK1VdLE1lPUNbYWUrd2UrVV0sdmU9bmUqb3QtbGUq''@;'; put 'put ''TWU7TWU9bmUqTWUrbGUqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1RZStNZSx4W2FlK3dlK1VdPVVlLW90LENbYWUrd2UrVV09UWUtTWUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpuZSxuZT12ZSl9fSxYLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihn''@;'; put 'put ''LHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sWC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0Nd''@;'; put 'put ''PWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sWC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91''@;'; put 'put ''bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sWC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxnW1ZdKSx4WzIqVisx''@;'; put 'put ''XT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhbVl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxYLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxYLnByb3RvdHlw''@;'; put 'put ''ZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5l''@;'; put 'put ''dyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQpLHRoaXMudHJhbnNm''@;'; put 'put ''b3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2VdO21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0s''@;'; put 'put ''bGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxpemUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3''@;'; put 'put ''IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3Ro''@;'; put 'put ''KSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRo''@;'; put 'put ''aXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxl''@;'; put 'put ''bmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlt''@;'; put 'put ''dWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZhciBnPW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31y''@;'; put 'put ''ZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtD''@;'; put 'put ''XSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2ZvcihUPTA7VDx0aGlz''@;'; put 'put ''Lmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLVU8PHl8VixWPVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lm''@;'; put 'put ''KEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhp''@;'; put 'put ''cy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZVfXJldHVy''@;'; put 'put ''biBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlz''@;'; put 'put ''Lml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGct''@;'; put 'put ''eSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImlt''@;'; put 'put ''YXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8''@;'; put 'put ''PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1''@;'; put 'put ''Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJl''@;'; put 'put ''dHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBd''@;'; put 'put ''PS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe1Y9KDB8dGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStVKT4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PVUpLFU9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxWPTB8VC53''@;'; put 'put ''b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xv''@;'; put 'put ''bmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9y''@;'; put 'put ''KGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxsZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1sZSl9cmV0dXJu''@;'; put 'put ''IG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpu''@;'; put 'put ''ZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9''@;'; put 'put ''KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSks''@;'; put 'put ''ImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2''@;'; put 'put ''YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5t''@;'; put 'put ''b2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVybiBWPDB8fDE9PT1UJiYwPT09Vj95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7''@;'; put 'put ''Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7''@;'; put 'put ''eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygxKSxFPTA7eS5pc0V2''@;'; put 'put ''ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNo''@;'; put 'put ''cm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3IoeC5pdXNocm4obGUp''@;'; put 'put ''O2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSksVS5pc3ViKEEpKSxWLml1c2hybigxKSxVLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihUKSl9cmV0dXJue2E6''@;'; put 'put ''VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcg''@;'; put 'put ''dygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgVT0wLEU9MTshKHkud29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoViksQy5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlz''@;'; put 'put ''dWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMu''@;'; put 'put ''Y2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXgu''@;'; put 'put ''aXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgseD1WfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEu''@;'; put 'put ''dW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndv''@;'; put 'put ''cmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBU''@;'; put 'put ''PUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlzLndvcmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhpcy53b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJv''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lm''@;'; put 'put ''KHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5''@;'; put 'put ''cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNb''@;'; put 'put ''eF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJl''@;'; put 'put ''YWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VS''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''U3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''TXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRo''@;'; put 'put ''aXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVt''@;'; put 'put ''KSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiByZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJp''@;'; put 'put ''dExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gb2UoKXtyZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7cmUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe3JlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtyZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKHop''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKHouZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoeil7U2UuY2FsbCh0''@;'; put 'put ''aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRo''@;'; put 'put ''aXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cmUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHJlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFk''@;'; put 'put ''ZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3Ry''@;'; put 'put ''aXAoKSx5fSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0scmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihvZSxyZSksb2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZh''@;'; put 'put ''ciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxl''@;'; put 'put ''bmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KFUmeCk8PDR8Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxvZS5wcm90b3R5cGUuaW11bEs9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHww''@;'; put 'put ''KX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxOKGdlLHJlKSxOKF9lLHJlKSxOKFRlLHJlKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4gdGVbZ107dmFyIHk7''@;'; put 'put ''aWYoImsyNTYiPT09Zyl5PW5ldyBvZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0ZVtnXT15LHl9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCgh''@;'; put 'put ''KGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90''@;'; put 'put ''aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3Rv''@;'; put 'put ''dHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5''@;'; put 'put ''KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''Zyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFD''@;'; put 'put ''LmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEpLnRvUmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSku''@;'; put 'put ''dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElBZGQoVSk7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2YXIgd2U9bmUsVWU9''@;'; put 'put ''MDswIT09d2UuY21wKFYpO1VlKyspd2U9d2UucmVkU3FyKCk7cChVZTxsZSk7dmFyIFFlPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKGxlLVVlLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBW''@;'; put 'put ''PUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYpKSwwIT09bmV8fDAh''@;'; put 'put ''PT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9dGhpcy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6RT0wfW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xv''@;'; put 'put ''bmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihn''@;'; put 'put ''LmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNo''@;'; put 'put ''aWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''bmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49''@;'; put 'put ''MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19''@;'; put 'put ''KGNlPWIubm1kKGNlKSx0aGlzKX0sOTc0NjpjZT0+e2Z1bmN0aW9uIEooYixEKXtpZighYil0aHJvdyBuZXcgRXJyb3IoRHx8IkFzc2VydGlvbiBmYWlsZWQiKX1jZS5leHBvcnRzPUosSi5lcXVhbD1mdW5jdGlvbihELF8scCl7aWYoRCE9Xyl0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlv''@;'; put 'put ''biBmYWlsZWQ6ICIrRCsiICE9ICIrXyl9fSw0NTA0OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYj1KO2Z1bmN0aW9uIF8oTil7cmV0dXJuIDE9PT1OLmxlbmd0aD8iMCIrTjpOfWZ1bmN0aW9uIHAoTil7Zm9yKHZhciB3PSIiLEY9MDtGPE4ubGVuZ3RoO0YrKyl3Kz1fKE5bRl0udG9TdHJp''@;'; put 'put ''bmcoMTYpKTtyZXR1cm4gd31iLnRvQXJyYXk9ZnVuY3Rpb24gRChOLHcpe2lmKEFycmF5LmlzQXJyYXkoTikpcmV0dXJuIE4uc2xpY2UoKTtpZighTilyZXR1cm5bXTt2YXIgRj1bXTtpZigic3RyaW5nIiE9dHlwZW9mIE4pe2Zvcih2YXIgSD0wO0g8Ti5sZW5ndGg7SCsrKUZbSF09MHxOW0hd''@;'; put 'put ''O3JldHVybiBGfWlmKCJoZXgiPT09dylmb3IoKE49Ti5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihOPSIwIitOKSxIPTA7SDxOLmxlbmd0aDtIKz0yKUYucHVzaChwYXJzZUludChOW0hdK05bSCsxXSwxNikpO2Vsc2UgZm9yKEg9MDtIPE4ubGVuZ3RoO0grKyl7''@;'; put 'put ''dmFyIFI9Ti5jaGFyQ29kZUF0KEgpLGo9Uj4+OCxQPTI1NSZSO2o/Ri5wdXNoKGosUCk6Ri5wdXNoKFApfXJldHVybiBGfSxiLnplcm8yPV8sYi50b0hleD1wLGIuZW5jb2RlPWZ1bmN0aW9uKHcsRil7cmV0dXJuImhleCI9PT1GP3Aodyk6d319LDQyNDQ6Y2U9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEo9ZnVuY3Rpb24oYil7cmV0dXJuIGIhPWJ9O2NlLmV4cG9ydHM9ZnVuY3Rpb24oRCxfKXtyZXR1cm4gMD09PUQmJjA9PT1fPzEvRD09MS9fOiEhKEQ9PT1ffHxKKEQpJiZKKF8pKX19LDYwOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQyODkpLF89Yig1NTU5KSxwPWIoNDI0''@;'; put 'put ''NCksTj1iKDU2MjQpLHc9YigyMjgxKSxGPV8oTigpLE9iamVjdCk7RChGLHtnZXRQb2x5ZmlsbDpOLGltcGxlbWVudGF0aW9uOnAsc2hpbTp3fSksY2UuZXhwb3J0cz1GfSw1NjI0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDI0NCk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOkR9fSwyMjgxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTYyNCksXz1iKDQyODkpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgTj1EKCk7cmV0dXJuIF8oT2JqZWN0LHtpczpOfSx7aXM6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gT2JqZWN0LmlzIT09Tn19KSxOfX0sODk4NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtpZighT2JqZWN0LmtleXMpe3ZhciBfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLE49YigxNDE0KSx3PU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsRj0hdy5jYWxsKHt0b1N0cmluZzpudWxsfSwidG9TdHJpbmciKSxIPXcuY2FsbChmdW5jdGlvbigpe30sInByb3RvdHlwZSIpLFI9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5''@;'; put 'put ''IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSxqPWZ1bmN0aW9uKEIpe3ZhciBXPUIuY29uc3RydWN0b3I7cmV0dXJuIFcmJlcucHJvdG90eXBlPT09Qn0sUD17JGFwcGxpY2F0aW9uQ2FjaGU6ITAsJGNvbnNvbGU6ITAsJGV4dGVybmFsOiEw''@;'; put 'put ''LCRmcmFtZTohMCwkZnJhbWVFbGVtZW50OiEwLCRmcmFtZXM6ITAsJGlubmVySGVpZ2h0OiEwLCRpbm5lcldpZHRoOiEwLCRvbm1vemZ1bGxzY3JlZW5jaGFuZ2U6ITAsJG9ubW96ZnVsbHNjcmVlbmVycm9yOiEwLCRvdXRlckhlaWdodDohMCwkb3V0ZXJXaWR0aDohMCwkcGFnZVhPZmZzZXQ6''@;'; put 'put ''ITAsJHBhZ2VZT2Zmc2V0OiEwLCRwYXJlbnQ6ITAsJHNjcm9sbExlZnQ6ITAsJHNjcm9sbFRvcDohMCwkc2Nyb2xsWDohMCwkc2Nyb2xsWTohMCwkc2VsZjohMCwkd2Via2l0SW5kZXhlZERCOiEwLCR3ZWJraXRTdG9yYWdlSW5mbzohMCwkd2luZG93OiEwfSxMPWZ1bmN0aW9uKCl7aWYodHlw''@;'; put 'put ''ZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7Zm9yKHZhciBCIGluIHdpbmRvdyl0cnl7aWYoIVBbIiQiK0JdJiZfLmNhbGwod2luZG93LEIpJiZudWxsIT09d2luZG93W0JdJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvd1tCXSl0cnl7aih3aW5kb3dbQl0pfWNhdGNoe3JldHVybiEwfX1jYXRjaHty''@;'; put 'put ''ZXR1cm4hMH1yZXR1cm4hMX0oKTtEPWZ1bmN0aW9uKFcpe3ZhciBaPW51bGwhPT1XJiYib2JqZWN0Ij09dHlwZW9mIFcscT0iW29iamVjdCBGdW5jdGlvbl0iPT09cC5jYWxsKFcpLFE9TihXKSxYPVomJiJbb2JqZWN0IFN0cmluZ10iPT09cC5jYWxsKFcpLHRlPVtdO2lmKCFaJiYhcSYmIVEp''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciByZT1IJiZxO2lmKFgmJlcubGVuZ3RoPjAmJiFfLmNhbGwoVywwKSlmb3IodmFyIG9lPTA7b2U8Vy5sZW5ndGg7KytvZSl0ZS5wdXNoKFN0cmluZyhvZSkpO2lmKFEmJlcubGVuZ3Ro''@;'; put 'put ''PjApZm9yKHZhciBnZT0wO2dlPFcubGVuZ3RoOysrZ2UpdGUucHVzaChTdHJpbmcoZ2UpKTtlbHNlIGZvcih2YXIgX2UgaW4gVykoIXJlfHwicHJvdG90eXBlIiE9PV9lKSYmXy5jYWxsKFcsX2UpJiZ0ZS5wdXNoKFN0cmluZyhfZSkpO2lmKEYpZm9yKHZhciBUZT1mdW5jdGlvbihCKXtpZih0''@;'; put 'put ''eXBlb2Ygd2luZG93PiJ1Inx8IUwpcmV0dXJuIGooQik7dHJ5e3JldHVybiBqKEIpfWNhdGNoe3JldHVybiExfX0oVyksU2U9MDtTZTxSLmxlbmd0aDsrK1NlKSghVGV8fCJjb25zdHJ1Y3RvciIhPT1SW1NlXSkmJl8uY2FsbChXLFJbU2VdKSYmdGUucHVzaChSW1NlXSk7cmV0dXJuIHRlfX1j''@;'; put 'put ''ZS5leHBvcnRzPUR9LDIyMTU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLF89YigxNDE0KSxwPU9iamVjdC5rZXlzLE49cD9mdW5jdGlvbihIKXtyZXR1cm4gcChIKX06Yig4OTg3KSx3PU9iamVjdC5rZXlzO04uc2hpbT1mdW5jdGlvbigpe2lm''@;'; put 'put ''KE9iamVjdC5rZXlzKXt2YXIgSD1mdW5jdGlvbigpe3ZhciBSPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIFImJlIubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0oMSwyKTtIfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oail7cmV0dXJuIF8oaik/dyhELmNhbGwoaikpOncoail9KX1l''@;'; put 'put ''bHNlIE9iamVjdC5rZXlzPU47cmV0dXJuIE9iamVjdC5rZXlzfHxOfSxjZS5leHBvcnRzPU59LDE0MTQ6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjZS5leHBvcnRzPWZ1bmN0aW9uKEQpe3ZhciBfPUouY2FsbChEKSxwPSJbb2JqZWN0IEFyZ3Vt''@;'; put 'put ''ZW50c10iPT09XztyZXR1cm4gcHx8KHA9IltvYmplY3QgQXJyYXldIiE9PV8mJm51bGwhPT1EJiYib2JqZWN0Ij09dHlwZW9mIEQmJiJudW1iZXIiPT10eXBlb2YgRC5sZW5ndGgmJkQubGVuZ3RoPj0wJiYiW29iamVjdCBGdW5jdGlvbl0iPT09Si5jYWxsKEQuY2FsbGVlKSkscH19LDI4Mzc6''@;'; put 'put ''KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMjE1KSxfPWIoNTQxOSkoKSxwPWIoNzM3OSksTj1iKDg4OTIpLHc9cCgiQXJyYXkucHJvdG90eXBlLnB1c2giKSxGPXAoIk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUiKSxIPV8/Ti5nZXRPd25Qcm9wZXJ0eVN5''@;'; put 'put ''bWJvbHM6bnVsbDtjZS5leHBvcnRzPWZ1bmN0aW9uKGosUCl7aWYobnVsbD09ail0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt2YXIgTD1OKGopO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBMO2Zvcih2YXIgWT0xO1k8YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aDsrK1kpe3ZhciBCPU4oYXJndW1lbnRzW1ldKSxXPUQoQiksWj1fJiYoTi5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN8fEgpO2lmKFopZm9yKHZhciBxPVooQiksUT0wO1E8cS5sZW5ndGg7KytRKXt2YXIgWD1xW1FdO0YoQixYKSYmdyhXLFgpfWZvcih2YXIgdGU9MDt0ZTxXLmxlbmd0aDsr''@;'; put 'put ''K3RlKXt2YXIgcmU9V1t0ZV07RihCLHJlKSYmKExbcmVdPUJbcmVdKX19cmV0dXJuIEx9fSw4MTYyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNyk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNz''@;'; put 'put ''aWduKXJldHVybiExO2Zvcih2YXIgTj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Ti5zcGxpdCgiIiksRj17fSxIPTA7SDx3Lmxlbmd0aDsrK0gpRlt3W0hdXT13W0hdO3ZhciBSPU9iamVjdC5hc3NpZ24oe30sRiksaj0iIjtmb3IodmFyIFAgaW4gUilqKz1QO3JldHVybiBOIT09an0oKXx8''@;'; put 'put ''ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgTj1PYmplY3QucHJldmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKE4sInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09TlsxXX1yZXR1cm4hMX0oKT9E''@;'; put 'put ''Ok9iamVjdC5hc3NpZ259fSw3NDM1OihjZSxKKT0+e0ouZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LEouaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0sSi5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''W119LEoudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LEouZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxKLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LEouY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxKLnR5cGU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LEoucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sSi5uZXR3b3JrSW50ZXJmYWNlcz1KLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LEou''@;'; put 'put ''YXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sSi5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sSi50bXBkaXI9Si50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LEouRU9MPSJcbiIsSi5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgx''@;'; put 'put ''ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk4MDkpO0ouY2VydGlmaWNhdGU9YigxOTM0KTt2YXIgXz1ELmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIiku''@;'; put 'put ''aW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBv''@;'; put 'put ''bmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtKLlJTQVByaXZhdGVLZXk9Xzt2YXIgcD1ELmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4''@;'; put 'put ''cG9uZW50IikuaW50KCkpfSk7Si5SU0FQdWJsaWNLZXk9cDt2YXIgTj1ELmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0''@;'; put 'put ''aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUQuZGVmaW5lKCJTdWJqZWN0UHVibGlj''@;'; put 'put ''S2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKE4pLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7Si5QdWJsaWNLZXk9dzt2YXIgRj1ELmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKE4pLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0ouUHJpdmF0ZUtleT1GO3ZhciBIPUQuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMu''@;'; put 'put ''a2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMu''@;'; put 'put ''a2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0ouRW5jcnlwdGVkUHJpdmF0ZUtleT1IO3ZhciBSPUQuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0''@;'; put 'put ''aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtKLkRTQVByaXZhdGVLZXk9UixKLkRTQXBhcmFtPUQuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgp''@;'; put 'put ''fSk7dmFyIGo9RC5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLFA9RC5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRo''@;'; put 'put ''aXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShqKSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtKLkVDUHJpdmF0ZUtleT1QLEouc2lnbmF0''@;'; put 'put ''dXJlPUQuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTgwOSksXz1ELmRlZmluZSgiVGltZSIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSkscD1ELmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFs''@;'; put 'put ''dWUiKS5hbnkoKSl9KSxOPUQuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9w''@;'; put 'put ''dGlvbmFsKCkpfSksdz1ELmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShOKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLEY9RC5kZWZpbmUoIlJlbGF0aXZlRGlz''@;'; put 'put ''dGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihwKX0pLEg9RC5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoRil9KSxSPUQuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShIKX0pfSks''@;'; put 'put ''aj1ELmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksUD1ELmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5''@;'; put 'put ''KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxMPUQuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4''@;'; put 'put ''cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoTiksdGhpcy5rZXkoImlzc3VlciIpLnVzZShSKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoaiksdGhpcy5rZXkoInN1YmplY3QiKS51c2Uo''@;'; put 'put ''UiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhp''@;'; put 'put ''cy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihQKS5vcHRpb25hbCgpKX0pLFk9RC5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNpZ25hdHVyZUFs''@;'; put 'put ''Z29yaXRobSIpLnVzZShOKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtjZS5leHBvcnRzPVl9LDc2MzE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIp''@;'; put 'put ''fCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20scD0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxy''@;'; put 'put ''Ky89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxOPWIoMzA0OCksdz1iKDQ2OTYpLEY9Yig5NTA5KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihILFIpe3ZhciBMLGo9SC50b1N0cmluZygpLFA9ai5tYXRjaChEKTtpZihQKXt2YXIgQj0iYWVzIitQWzFdLFc9Ri5mcm9tKFBbMl0sImhleCIp''@;'; put 'put ''LFo9Ri5mcm9tKFBbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxxPU4oUixXLnNsaWNlKDAsOCkscGFyc2VJbnQoUFsxXSwxMCkpLmtleSxRPVtdLFg9dy5jcmVhdGVEZWNpcGhlcml2KEIscSxXKTtRLnB1c2goWC51cGRhdGUoWikpLFEucHVzaChYLmZpbmFsKCkpLEw9Ri5j''@;'; put 'put ''b25jYXQoUSl9ZWxzZXt2YXIgWT1qLm1hdGNoKHApO0w9Ri5mcm9tKFlbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOmoubWF0Y2goXylbMV0sZGF0YTpMfX19LDk4MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MTgpLF89YigyNTYyKSxw''@;'; put 'put ''PWIoNzYzMSksTj1iKDQ2OTYpLHc9Yig1NjMyKSxGPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIFIoail7dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBqJiYhRi5pc0J1ZmZlcihqKSYmKFA9ai5wYXNzcGhyYXNlLGo9ai5rZXkpLCJzdHJpbmciPT10eXBlb2YgaiYmKGo9Ri5mcm9tKGopKTt2YXIg''@;'; put 'put ''VyxaLEw9cChqLFApLFk9TC50YWcsQj1MLmRhdGE7c3dpdGNoKFkpe2Nhc2UiQ0VSVElGSUNBVEUiOlo9RC5jZXJ0aWZpY2F0ZS5kZWNvZGUoQiwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goWnx8KFo9RC5QdWJsaWNL''@;'; put 'put ''ZXkuZGVjb2RlKEIsImRlciIpKSxXPVouYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBELlJTQVB1YmxpY0tleS5kZWNvZGUoWi5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEi''@;'; put 'put ''OnJldHVybiBaLnN1YmplY3RQcml2YXRlS2V5PVouc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6Wn07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFouYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PUQuRFNBcGFyYW0uZGVjb2RlKFouc3ViamVjdFB1YmxpY0tleS5kYXRh''@;'; put 'put ''LCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlouYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOkI9ZnVuY3Rpb24gSChqLFApe3ZhciBMPWouYWxnb3JpdGhtLmRlY3J5cHQua2Rl''@;'; put 'put ''LmtkZXBhcmFtcy5zYWx0LFk9cGFyc2VJbnQoai5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLEI9X1tqLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVz1qLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixaPWou''@;'; put 'put ''c3ViamVjdFByaXZhdGVLZXkscT1wYXJzZUludChCLnNwbGl0KCItIilbMV0sMTApLzgsUT13LnBia2RmMlN5bmMoUCxMLFkscSwic2hhMSIpLFg9Ti5jcmVhdGVEZWNpcGhlcml2KEIsUSxXKSx0ZT1bXTtyZXR1cm4gdGUucHVzaChYLnVwZGF0ZShaKSksdGUucHVzaChYLmZpbmFsKCkpLEYu''@;'; put 'put ''Y29uY2F0KHRlKX0oQj1ELkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpLFApO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPShaPUQuUHJpdmF0ZUtleS5kZWNvZGUoQiwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5''@;'; put 'put ''LjEuMS4xIjpyZXR1cm4gRC5SU0FQcml2YXRlS2V5LmRlY29kZShaLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6Wi5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpELkVDUHJpdmF0ZUtleS5kZWNvZGUoWi5zdWJqZWN0UHJp''@;'; put 'put ''dmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFouYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1ELkRTQXBhcmFtLmRlY29kZShaLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6Wi5hbGdvcml0aG0ucGFy''@;'; put 'put ''YW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gRC5SU0FQdWJsaWNLZXkuZGVjb2RlKEIsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gRC5SU0FQcml2YXRlS2V5LmRlY29kZShCLCJk''@;'; put 'put ''ZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkQuRFNBUHJpdmF0ZUtleS5kZWNvZGUoQiwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooQj1ELkVDUHJpdmF0ZUtleS5kZWNvZGUoQiwiZGVyIikpLnBhcmFtZXRlcnMu''@;'; put 'put ''dmFsdWUscHJpdmF0ZUtleTpCLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrWSl9fVIuc2lnbmF0dXJlPUQuc2lnbmF0dXJlLGNlLmV4cG9ydHM9Un0sMTcyNTpjZT0+e2NlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5j''@;'; put 'put ''cmVhdGU/ZnVuY3Rpb24oYixEKXtiLnN1cGVyXz1ELGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihiLEQpe2Iuc3VwZXJfPUQ7dmFy''@;'; put 'put ''IF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUQucHJvdG90eXBlLGIucHJvdG90eXBlPW5ldyBfLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fSwyOTc0OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiKXtyZXR1cm4gYiYmIm9iamVjdCI9PXR5cGVvZiBiJiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYi5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgYi5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5yZWFkVUludDh9fSw4MDU5OihjZSxKLGIpPT57dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD0vJVtzZGolXS9nO0ouZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCFvZShFKSl7Zm9yKHZhciBt''@;'; put 'put ''PVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChGKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1BPTE7Zm9yKHZhciBhZT1hcmd1bWVudHMsbmU9YWUubGVuZ3RoLGxlPVN0cmluZyhFKS5yZXBsYWNlKHAsZnVuY3Rpb24oVWUpe2lmKCIlJSI9PT1VZSlyZXR1''@;'; put 'put ''cm4iJSI7aWYoQT49bmUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhhZVtBKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGFlW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWVbQSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxh''@;'; put 'put ''cl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLHdlPWFlW0FdO0E8bmU7d2U9YWVbKytBXSlYKHdlKXx8IVNlKHdlKT9sZSs9IiAiK3dlOmxlKz0iICIrRih3ZSk7cmV0dXJuIGxlfSxKLmRlcHJlY2F0ZT1mdW5jdGlvbihFLG0pe2lmKF9lKGIuZy5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gSi5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09RC5ub0RlcHJlY2F0aW9uKXJldHVybiBFO3ZhciBBPSExO3JldHVybiBmdW5jdGlvbiBhZSgpe2lmKCFBKXtpZihELnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0pO0QudHJhY2VE''@;'; put 'put ''ZXByZWNhdGlvbj9fLnRyYWNlKG0pOl8uZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdyxOPXt9O2Z1bmN0aW9uIEYoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHlsaXplOlJ9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5kZXB0aD1hcmd1''@;'; put 'put ''bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLFEobSk/QS5zaG93SGlkZGVuPW06bSYmSi5fZXh0ZW5kKEEsbSksX2UoQS5zaG93SGlkZGVuKSYmKEEuc2hvd0hpZGRlbj0hMSksX2UoQS5kZXB0aCkmJihBLmRlcHRoPTIpLF9lKEEuY29sb3Jz''@;'; put 'put ''KSYmKEEuY29sb3JzPSExKSxfZShBLmN1c3RvbUluc3BlY3QpJiYoQS5jdXN0b21JbnNwZWN0PSEwKSxBLmNvbG9ycyYmKEEuc3R5bGl6ZT1IKSxQKEEsRSxBLmRlcHRoKX1mdW5jdGlvbiBIKEUsbSl7dmFyIEE9Ri5zdHlsZXNbbV07cmV0dXJuIEE/Ilx4MWJbIitGLmNvbG9yc1tBXVswXSsi''@;'; put 'put ''bSIrRSsiXHgxYlsiK0YuY29sb3JzW0FdWzFdKyJtIjpFfWZ1bmN0aW9uIFIoRSxtKXtyZXR1cm4gRX1mdW5jdGlvbiBQKEUsbSxBKXtpZihFLmN1c3RvbUluc3BlY3QmJm0mJmcobS5pbnNwZWN0KSYmbS5pbnNwZWN0IT09Si5pbnNwZWN0JiYoIW0uY29uc3RydWN0b3J8fG0uY29uc3RydWN0''@;'; put 'put ''b3IucHJvdG90eXBlIT09bSkpe3ZhciBhZT1tLmluc3BlY3QoQSxFKTtyZXR1cm4gb2UoYWUpfHwoYWU9UChFLGFlLEEpKSxhZX12YXIgbmU9ZnVuY3Rpb24gTChFLG0pe2lmKF9lKG0pKXJldHVybiBFLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKG9lKG0pKXt2YXIgQT0i''@;'; put 'put ''JyIrSlNPTi5zdHJpbmdpZnkobSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gRS5zdHlsaXplKEEsInN0cmluZyIpfXJldHVybiByZShtKT9FLnN0eWxpemUoIiIrbSwibnVtYmVyIik6UShtKT9FLnN0eWxp''@;'; put 'put ''emUoIiIrbSwiYm9vbGVhbiIpOlgobSk/RS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oRSxtKTtpZihuZSlyZXR1cm4gbmU7dmFyIGxlPU9iamVjdC5rZXlzKG0pLHdlPWZ1bmN0aW9uIGooRSl7dmFyIG09e307cmV0dXJuIEUuZm9yRWFjaChmdW5jdGlvbihBLGFlKXttW0FdPSEw''@;'; put 'put ''fSksbX0obGUpO2lmKEUuc2hvd0hpZGRlbiYmKGxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG0pKSx6KG0pJiYobGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxsZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gWShtKTtpZigwPT09bGUubGVuZ3RoKXtpZihnKG0pKXJl''@;'; put 'put ''dHVybiBFLnN0eWxpemUoIltGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoVGUobSkpcmV0dXJuIEUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksInJlZ2V4cCIpO2lmKHplKG0pKXJldHVybiBFLnN0eWxpemUoRGF0''@;'; put 'put ''ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwiZGF0ZSIpO2lmKHoobSkpcmV0dXJuIFkobSl9dmFyIFhlLFFlPSIiLG90PSExLE1lPVsieyIsIn0iXTtyZXR1cm4gcShtKSYmKG90PSEwLE1lPVsiWyIsIl0iXSksZyhtKSYmKFFlPSIgW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1l''@;'; put 'put ''OiIiKSsiXSIpLFRlKG0pJiYoUWU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSksemUobSkmJihRZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChtKSkseihtKSYmKFFlPSIgIitZKG0pKSwwIT09bGUubGVuZ3RofHxvdCYmMCE9bS5sZW5ndGg/QTww''@;'; put 'put ''P1RlKG0pP0Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksInJlZ2V4cCIpOkUuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KEUuc2Vlbi5wdXNoKG0pLFhlPW90P2Z1bmN0aW9uIEIoRSxtLEEsYWUsbmUpe2Zvcih2YXIgbGU9W10sd2U9MCxVZT1tLmxl''@;'; put 'put ''bmd0aDt3ZTxVZTsrK3dlKVUobSxTdHJpbmcod2UpKT9sZS5wdXNoKFcoRSxtLEEsYWUsU3RyaW5nKHdlKSwhMCkpOmxlLnB1c2goIiIpO3JldHVybiBuZS5mb3JFYWNoKGZ1bmN0aW9uKFFlKXtRZS5tYXRjaCgvXlxkKyQvKXx8bGUucHVzaChXKEUsbSxBLGFlLFFlLCEwKSl9KSxsZX0oRSxt''@;'; put 'put ''LEEsd2UsbGUpOmxlLm1hcChmdW5jdGlvbihCZSl7cmV0dXJuIFcoRSxtLEEsd2UsQmUsb3QpfSksRS5zZWVuLnBvcCgpLGZ1bmN0aW9uIFooRSxtLEEpe3ZhciBuZT1FLnJlZHVjZShmdW5jdGlvbihsZSx3ZSl7cmV0dXJuIHdlLmluZGV4T2YoIlxuIiksbGUrd2UucmVwbGFjZSgvXHUwMDFi''@;'; put 'put ''XFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiBuZT42MD9BWzBdKygiIj09PW0/IiI6bSsiXG4gIikrIiAiK0Uuam9pbigiLFxuICAiKSsiICIrQVsxXTpBWzBdK20rIiAiK0Uuam9pbigiLCAiKSsiICIrQVsxXX0oWGUsUWUsTWUpKTpNZVswXStRZStNZVsxXX1mdW5jdGlvbiBZ''@;'; put 'put ''KEUpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChFKSsiXSJ9ZnVuY3Rpb24gVyhFLG0sQSxhZSxuZSxsZSl7dmFyIHdlLFVlLFFlO2lmKChRZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sbmUpfHx7dmFsdWU6bVtuZV19KS5nZXQ/VWU9RS5zdHls''@;'; put 'put ''aXplKFFlLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6UWUuc2V0JiYoVWU9RS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksVShhZSxuZSl8fCh3ZT0iWyIrbmUrIl0iKSxVZXx8KEUuc2Vlbi5pbmRleE9mKFFlLnZhbHVlKTwwPyhVZT1YKEEpP1Ao''@;'; put 'put ''RSxRZS52YWx1ZSxudWxsKTpQKEUsUWUudmFsdWUsQS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKFVlPWxlP1VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihvdCl7cmV0dXJuIiAgIitvdH0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrVWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKG90''@;'; put 'put ''KXtyZXR1cm4iICAgIitvdH0pLmpvaW4oIlxuIikpOlVlPUUuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksX2Uod2UpKXtpZihsZSYmbmUubWF0Y2goL15cZCskLykpcmV0dXJuIFVlOyh3ZT1KU09OLnN0cmluZ2lmeSgiIituZSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1a''@;'; put 'put ''XzAtOV0qKSIkLyk/KHdlPXdlLnN1YnN0cigxLHdlLmxlbmd0aC0yKSx3ZT1FLnN0eWxpemUod2UsIm5hbWUiKSk6KHdlPXdlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSx3ZT1FLnN0eWxpemUod2UsInN0cmluZyIpKX1y''@;'; put 'put ''ZXR1cm4gd2UrIjogIitVZX1mdW5jdGlvbiBxKEUpe3JldHVybiBBcnJheS5pc0FycmF5KEUpfWZ1bmN0aW9uIFEoRSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgRX1mdW5jdGlvbiBYKEUpe3JldHVybiBudWxsPT09RX1mdW5jdGlvbiByZShFKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEV9''@;'; put 'put ''ZnVuY3Rpb24gb2UoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1FfWZ1bmN0aW9uIFRlKEUpe3JldHVybiBTZShFKSYmIltvYmplY3QgUmVnRXhwXSI9PT14KEUpfWZ1bmN0aW9uIFNlKEUpe3JldHVybiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''RSYmbnVsbCE9PUV9ZnVuY3Rpb24gemUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9uIHooRSl7cmV0dXJuIFNlKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgoRSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gZyhFKXtyZXR1cm4iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVuY3Rpb24gQyhFKXtyZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6RS50b1N0cmluZygxMCl9Si5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtpZihfZSh3KSYmKHc9''@;'; put 'put ''RC5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFOW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxiIiwiaSIpLnRlc3Qodykpe3ZhciBtPUQucGlkO05bRV09ZnVuY3Rpb24oKXt2YXIgQT1KLmZvcm1hdC5hcHBseShKLGFyZ3VtZW50cyk7Xy5lcnJvcigiJXMgJWQ6''@;'; put 'put ''ICVzIixFLG0sQSl9fWVsc2UgTltFXT1mdW5jdGlvbigpe307cmV0dXJuIE5bRV19LEouaW5zcGVjdD1GLEYuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMw''@;'; put 'put ''LDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxGLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5Iixu''@;'; put 'put ''dWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LEouaXNBcnJheT1xLEouaXNCb29sZWFuPVEsSi5pc051bGw9WCxKLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIHRlKEUpe3JldHVybiBudWxsPT1FfSxKLmlzTnVtYmVyPXJlLEouaXNTdHJp''@;'; put 'put ''bmc9b2UsSi5pc1N5bWJvbD1mdW5jdGlvbiBnZShFKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEV9LEouaXNVbmRlZmluZWQ9X2UsSi5pc1JlZ0V4cD1UZSxKLmlzT2JqZWN0PVNlLEouaXNEYXRlPXplLEouaXNFcnJvcj16LEouaXNGdW5jdGlvbj1nLEouaXNQcmltaXRpdmU9ZnVuY3Rpb24g''@;'; put 'put ''eShFKXtyZXR1cm4gbnVsbD09PUV8fCJib29sZWFuIj09dHlwZW9mIEV8fCJudW1iZXIiPT10eXBlb2YgRXx8InN0cmluZyI9PXR5cGVvZiBFfHwic3ltYm9sIj09dHlwZW9mIEV8fHR5cGVvZiBFPiJ1In0sSi5pc0J1ZmZlcj1iKDI5NzQpO3ZhciBUPVsiSmFuIiwiRmViIiwiTWFyIiwiQXBy''@;'; put 'put ''IiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gVShFLG0pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxtKX1KLmxvZz1mdW5jdGlvbigpe18ubG9nKCIlcyAtICVzIixmdW5jdGlvbiBWKCl7dmFy''@;'; put 'put ''IEU9bmV3IERhdGUsbT1bQyhFLmdldEhvdXJzKCkpLEMoRS5nZXRNaW51dGVzKCkpLEMoRS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW0UuZ2V0RGF0ZSgpLFRbRS5nZXRNb250aCgpXSxtXS5qb2luKCIgIil9KCksSi5mb3JtYXQuYXBwbHkoSixhcmd1bWVudHMpKX0sSi5pbmhl''@;'; put 'put ''cml0cz1iKDE3MjUpLEouX2V4dGVuZD1mdW5jdGlvbihFLG0pe2lmKCFtfHwhU2UobSkpcmV0dXJuIEU7Zm9yKHZhciBBPU9iamVjdC5rZXlzKG0pLGFlPUEubGVuZ3RoO2FlLS07KUVbQVthZV1dPW1bQVthZV1dO3JldHVybiBFfX0sMjUyMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''RD1iKDQxNTUpLF89IndpbjMyIj09PUQucGxhdGZvcm0scD1iKDgwNTkpO2Z1bmN0aW9uIE4oWixxKXtmb3IodmFyIFE9W10sWD0wO1g8Wi5sZW5ndGg7WCsrKXt2YXIgdGU9WltYXTshdGV8fCIuIj09PXRlfHwoIi4uIj09PXRlP1EubGVuZ3RoJiYiLi4iIT09UVtRLmxlbmd0aC0xXT9RLnBv''@;'; put 'put ''cCgpOnEmJlEucHVzaCgiLi4iKTpRLnB1c2godGUpKX1yZXR1cm4gUX1mdW5jdGlvbiB3KFope2Zvcih2YXIgcT1aLmxlbmd0aC0xLFE9MDtRPD1xJiYhWltRXTtRKyspO2Zvcih2YXIgWD1xO1g+PTAmJiFaW1hdO1gtLSk7cmV0dXJuIDA9PT1RJiZYPT09cT9aOlE+WD9bXTpaLnNsaWNlKFEs''@;'; put 'put ''WCsxKX12YXIgRj0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxIPS9eKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxSPXt9O2Z1bmN0aW9uIGooWil7''@;'; put 'put ''dmFyIHE9Ri5leGVjKFopLFE9KHFbMV18fCIiKSsocVsyXXx8IiIpLHRlPUguZXhlYyhxWzNdfHwiIik7cmV0dXJuW1EsdGVbMV0sdGVbMl0sdGVbM11dfWZ1bmN0aW9uIFAoWil7dmFyIHE9Ri5leGVjKFopLFE9cVsxXXx8IiIsWD0hIVEmJiI6IiE9PVFbMV07cmV0dXJue2RldmljZTpRLGlz''@;'; put 'put ''VW5jOlgsaXNBYnNvbHV0ZTpYfHwhIXFbMl0sdGFpbDpxWzNdfX1mdW5jdGlvbiBMKFope3JldHVybiJcXFxcIitaLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgvW1xcXC9dKy9nLCJcXCIpfVIucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWj0iIixxPSIiLFE9ITEsWD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLTE7WD49LTE7WC0tKXt2YXIgdGU7aWYoWD49MD90ZT1hcmd1bWVudHNbWF06Wj8oISh0ZT1ELmVudlsiPSIrWl0pfHx0ZS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpIT09Wi50b0xvd2VyQ2FzZSgpKyJcXCIpJiYodGU9WisiXFwiKTp0ZT1ELmN3ZCgpLCFwLmlzU3Ry''@;'; put 'put ''aW5nKHRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKHRlKXt2YXIgcmU9UCh0ZSksb2U9cmUuZGV2aWNlLGdlPXJlLmlzVW5jLF9lPXJlLmlzQWJzb2x1dGUsVGU9cmUudGFpbDtpZigoIW9lfHwhWnx8b2UudG9M''@;'; put 'put ''b3dlckNhc2UoKT09PVoudG9Mb3dlckNhc2UoKSkmJihafHwoWj1vZSksUXx8KHE9VGUrIlxcIitxLFE9X2UpLFomJlEpKWJyZWFrfX1yZXR1cm4gZ2UmJihaPUwoWikpLForKFE/IlxcIjoiIikrKHE9TihxLnNwbGl0KC9bXFxcL10rLyksIVEpLmpvaW4oIlxcIikpfHwiLiJ9LFIubm9ybWFs''@;'; put 'put ''aXplPWZ1bmN0aW9uKFope3ZhciBxPVAoWiksUT1xLmRldmljZSxYPXEuaXNVbmMsdGU9cS5pc0Fic29sdXRlLHJlPXEudGFpbCxvZT0vW1xcXC9dJC8udGVzdChyZSk7cmV0dXJuIShyZT1OKHJlLnNwbGl0KC9bXFxcL10rLyksIXRlKS5qb2luKCJcXCIpKSYmIXRlJiYocmU9Ii4iKSxyZSYm''@;'; put 'put ''b2UmJihyZSs9IlxcIiksWCYmKFE9TChRKSksUSsodGU/IlxcIjoiIikrcmV9LFIuaXNBYnNvbHV0ZT1mdW5jdGlvbihaKXtyZXR1cm4gUChaKS5pc0Fic29sdXRlfSxSLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIFo9W10scT0wO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBRPWFyZ3Vt''@;'; put 'put ''ZW50c1txXTtpZighcC5pc1N0cmluZyhRKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO1EmJloucHVzaChRKX12YXIgWD1aLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFpbMF0pfHwoWD1YLnJl''@;'; put 'put ''cGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksUi5ub3JtYWxpemUoWCl9LFIucmVsYXRpdmU9ZnVuY3Rpb24oWixxKXtaPVIucmVzb2x2ZShaKSxxPVIucmVzb2x2ZShxKTtmb3IodmFyIFE9Wi50b0xvd2VyQ2FzZSgpLFg9cS50b0xvd2VyQ2FzZSgpLHRlPXcocS5zcGxpdCgiXFwiKSkscmU9''@;'; put 'put ''dyhRLnNwbGl0KCJcXCIpKSxvZT13KFguc3BsaXQoIlxcIikpLGdlPU1hdGgubWluKHJlLmxlbmd0aCxvZS5sZW5ndGgpLF9lPWdlLFRlPTA7VGU8Z2U7VGUrKylpZihyZVtUZV0hPT1vZVtUZV0pe19lPVRlO2JyZWFrfWlmKDA9PV9lKXJldHVybiBxO3ZhciBTZT1bXTtmb3IoVGU9X2U7VGU8''@;'; put 'put ''cmUubGVuZ3RoO1RlKyspU2UucHVzaCgiLi4iKTtyZXR1cm4oU2U9U2UuY29uY2F0KHRlLnNsaWNlKF9lKSkpLmpvaW4oIlxcIil9LFIuX21ha2VMb25nPWZ1bmN0aW9uKFope2lmKCFwLmlzU3RyaW5nKFopKXJldHVybiBaO2lmKCFaKXJldHVybiIiO3ZhciBxPVIucmVzb2x2ZShaKTtyZXR1''@;'; put 'put ''cm4vXlthLXpBLVpdXDpcXC8udGVzdChxKT8iXFxcXD9cXCIrcTovXlxcXFxbXj8uXS8udGVzdChxKT8iXFxcXD9cXFVOQ1xcIitxLnN1YnN0cmluZygyKTpafSxSLmRpcm5hbWU9ZnVuY3Rpb24oWil7dmFyIHE9aihaKSxRPXFbMF0sWD1xWzFdO3JldHVybiBRfHxYPyhYJiYoWD1YLnN1YnN0''@;'; put 'put ''cigwLFgubGVuZ3RoLTEpKSxRK1gpOiIuIn0sUi5iYXNlbmFtZT1mdW5jdGlvbihaLHEpe3ZhciBRPWooWilbMl07cmV0dXJuIHEmJlEuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihRPVEuc3Vic3RyKDAsUS5sZW5ndGgtcS5sZW5ndGgpKSxRfSxSLmV4dG5hbWU9ZnVuY3Rpb24oWil7cmV0''@;'; put 'put ''dXJuIGooWilbM119LFIuZm9ybWF0PWZ1bmN0aW9uKFope2lmKCFwLmlzT2JqZWN0KFopKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBaKTtpZighcC5pc1N0cmluZyhaLnJvb3R8fCIiKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIFoucm9vdCk7dmFyIFE9Wi5kaXIsWD1aLmJhc2V8fCIiO3JldHVybiBRP1FbUS5sZW5ndGgtMV09PT1SLnNlcD9RK1g6UStSLnNlcCtYOlh9LFIucGFyc2U9''@;'; put 'put ''ZnVuY3Rpb24oWil7aWYoIXAuaXNTdHJpbmcoWikpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgWik7dmFyIHE9aihaKTtpZighcXx8NCE9PXEubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFs''@;'; put 'put ''aWQgcGF0aCAnIitaKyInIik7cmV0dXJue3Jvb3Q6cVswXSxkaXI6cVswXStxWzFdLnNsaWNlKDAsLTEpLGJhc2U6cVsyXSxleHQ6cVszXSxuYW1lOnFbMl0uc2xpY2UoMCxxWzJdLmxlbmd0aC1xWzNdLmxlbmd0aCl9fSxSLnNlcD0iXFwiLFIuZGVsaW1pdGVyPSI7Ijt2YXIgWT0vXihcLz98''@;'; put 'put ''KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8sQj17fTtmdW5jdGlvbiBXKFope3JldHVybiBZLmV4ZWMoWikuc2xpY2UoMSl9Qi5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBaPSIiLHE9ITEsUT1hcmd1bWVudHMubGVuZ3RoLTE7UT49''@;'; put 'put ''LTEmJiFxO1EtLSl7dmFyIFg9UT49MD9hcmd1bWVudHNbUV06RC5jd2QoKTtpZighcC5pc1N0cmluZyhYKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO1gmJihaPVgrIi8iK1oscT0iLyI9PT1YWzBdKX1yZXR1cm4ocT8i''@;'; put 'put ''LyI6IiIpKyhaPU4oWi5zcGxpdCgiLyIpLCFxKS5qb2luKCIvIikpfHwiLiJ9LEIubm9ybWFsaXplPWZ1bmN0aW9uKFope3ZhciBxPUIuaXNBYnNvbHV0ZShaKSxRPVomJiIvIj09PVpbWi5sZW5ndGgtMV07cmV0dXJuIShaPU4oWi5zcGxpdCgiLyIpLCFxKS5qb2luKCIvIikpJiYhcSYmKFo9''@;'; put 'put ''Ii4iKSxaJiZRJiYoWis9Ii8iKSwocT8iLyI6IiIpK1p9LEIuaXNBYnNvbHV0ZT1mdW5jdGlvbihaKXtyZXR1cm4iLyI9PT1aLmNoYXJBdCgwKX0sQi5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBaPSIiLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgUT1hcmd1bWVudHNbcV07aWYo''@;'; put 'put ''IXAuaXNTdHJpbmcoUSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtRJiYoWis9Wj8iLyIrUTpRKX1yZXR1cm4gQi5ub3JtYWxpemUoWil9LEIucmVsYXRpdmU9ZnVuY3Rpb24oWixxKXtaPUIucmVzb2x2ZShaKS5zdWJzdHIo''@;'; put 'put ''MSkscT1CLnJlc29sdmUocSkuc3Vic3RyKDEpO2Zvcih2YXIgUT13KFouc3BsaXQoIi8iKSksWD13KHEuc3BsaXQoIi8iKSksdGU9TWF0aC5taW4oUS5sZW5ndGgsWC5sZW5ndGgpLHJlPXRlLG9lPTA7b2U8dGU7b2UrKylpZihRW29lXSE9PVhbb2VdKXtyZT1vZTticmVha312YXIgZ2U9W107''@;'; put 'put ''Zm9yKG9lPXJlO29lPFEubGVuZ3RoO29lKyspZ2UucHVzaCgiLi4iKTtyZXR1cm4oZ2U9Z2UuY29uY2F0KFguc2xpY2UocmUpKSkuam9pbigiLyIpfSxCLl9tYWtlTG9uZz1mdW5jdGlvbihaKXtyZXR1cm4gWn0sQi5kaXJuYW1lPWZ1bmN0aW9uKFope3ZhciBxPVcoWiksUT1xWzBdLFg9cVsx''@;'; put 'put ''XTtyZXR1cm4gUXx8WD8oWCYmKFg9WC5zdWJzdHIoMCxYLmxlbmd0aC0xKSksUStYKToiLiJ9LEIuYmFzZW5hbWU9ZnVuY3Rpb24oWixxKXt2YXIgUT1XKFopWzJdO3JldHVybiBxJiZRLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoUT1RLnN1YnN0cigwLFEubGVuZ3RoLXEubGVuZ3RoKSks''@;'; put 'put ''UX0sQi5leHRuYW1lPWZ1bmN0aW9uKFope3JldHVybiBXKFopWzNdfSxCLmZvcm1hdD1mdW5jdGlvbihaKXtpZighcC5pc09iamVjdChaKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWik7aWYoIXAu''@;'; put 'put ''aXNTdHJpbmcoWi5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBaLnJvb3QpO3JldHVybihaLmRpcj9aLmRpcitCLnNlcDoiIikrKFouYmFzZXx8IiIpfSxCLnBhcnNlPWZ1''@;'; put 'put ''bmN0aW9uKFope2lmKCFwLmlzU3RyaW5nKFopKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFopO3ZhciBxPVcoWik7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlk''@;'; put 'put ''IHBhdGggJyIrWisiJyIpO3JldHVybiBxWzFdPXFbMV18fCIiLHFbMl09cVsyXXx8IiIscVszXT1xWzNdfHwiIix7cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19''@;'; put 'put ''LEIuc2VwPSIvIixCLmRlbGltaXRlcj0iOiIsY2UuZXhwb3J0cz1fP1I6QixjZS5leHBvcnRzLnBvc2l4PUIsY2UuZXhwb3J0cy53aW4zMj1SfSw1NjMyOihjZSxKLGIpPT57Si5wYmtkZjI9Yig4NjM4KSxKLnBia2RmMlN5bmM9YigxMjU3KX0sODYzODooY2UsSixiKT0+e3ZhciBGLEwsRD1i''@;'; put 'put ''KDk1MDkpLkJ1ZmZlcixfPWIoNzM1NykscD1iKDIzNjgpLE49YigxMjU3KSx3PWIoNzc3NyksSD1iLmcuY3J5cHRvJiZiLmcuY3J5cHRvLnN1YnRsZSxSPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2''@;'; put 'put ''IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxqPVtdO2Z1bmN0aW9uIFkoKXtyZXR1cm4gTHx8KEw9Yi5nLnByb2Nlc3MmJmIuZy5wcm9jZXNzLm5leHRUaWNrP2IuZy5wcm9jZXNzLm5leHRUaWNrOmIu''@;'; put 'put ''Zy5xdWV1ZU1pY3JvdGFzaz9iLmcucXVldWVNaWNyb3Rhc2s6Yi5nLnNldEltbWVkaWF0ZT9iLmcuc2V0SW1tZWRpYXRlOmIuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBCKFoscSxRLFgsdGUpe3JldHVybiBILmltcG9ydEtleSgicmF3IixaLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJp''@;'; put 'put ''dHMiXSkudGhlbihmdW5jdGlvbihyZSl7cmV0dXJuIEguZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnEsaXRlcmF0aW9uczpRLGhhc2g6e25hbWU6dGV9fSxyZSxYPDwzKX0pLnRoZW4oZnVuY3Rpb24ocmUpe3JldHVybiBELmZyb20ocmUpfSl9Y2UuZXhwb3J0cz1mdW5jdGlvbiha''@;'; put 'put ''LHEsUSxYLHRlLHJlKXsiZnVuY3Rpb24iPT10eXBlb2YgdGUmJihyZT10ZSx0ZT12b2lkIDApO3ZhciBvZT1SWyh0ZT10ZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihvZSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZy5Qcm9taXNlKXtpZihfKFEsWCksWj13KFoscCwiUGFzc3dvcmQiKSxx''@;'; put 'put ''PXcocSxwLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIHJlKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFcoWixxKXtaLnRoZW4oZnVuY3Rpb24oUSl7WSgpKGZ1bmN0aW9uKCl7cShudWxsLFEpfSl9LGZ1bmN0aW9uKFEpe1ko''@;'; put 'put ''KShmdW5jdGlvbigpe3EoUSl9KX0pfShmdW5jdGlvbiBQKFope2lmKGIuZy5wcm9jZXNzJiYhYi5nLnByb2Nlc3MuYnJvd3Nlcnx8IUh8fCFILmltcG9ydEtleXx8IUguZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1qW1pdKXJldHVybiBqW1pdO3Zh''@;'; put 'put ''ciBxPUIoRj1GfHxELmFsbG9jKDgpLEYsMTAsMTI4LFopLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4galtaXT1xLHF9KG9lKS50aGVuKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U/QihaLHEsUSxYLG9lKTpOKFoscSxRLFgsdGUp''@;'; put 'put ''fSkscmUpfWVsc2UgWSgpKGZ1bmN0aW9uKCl7dmFyIGdlO3RyeXtnZT1OKFoscSxRLFgsdGUpfWNhdGNoKF9lKXtyZXR1cm4gcmUoX2UpfXJlKG51bGwsZ2UpfSl9fSwyMzY4OihjZSxKLGIpPT57dmFyIF8sRD1iKDQxNTUpO189Yi5nLnByb2Nlc3MmJmIuZy5wcm9jZXNzLmJyb3dzZXI/InV0''@;'; put 'put ''Zi04IjpiLmcucHJvY2VzcyYmYi5nLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChELnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLGNlLmV4cG9ydHM9X30sNzM1NzpjZT0+e3ZhciBKPU1hdGgucG93KDIsMzApLTE7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihiLEQpe2lmKCJudW1iZXIiIT10eXBlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKGI8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10eXBlb2YgRCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKEQ8MHx8RD5KfHxEIT1EKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwxMjU3OihjZSxKLGIpPT57dmFyIEQ9Yig4MDI4KSxfPWIoOTc4NSkscD1iKDkwNzIpLE49Yig5NTA5KS5CdWZmZXIsdz1i''@;'; put 'put ''KDczNTcpLEY9YigyMzY4KSxIPWIoNzc3NyksUj1OLmFsbG9jKDEyOCksaj17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIFAoQixXLFope3ZhciBxPWZ1bmN0aW9uIEwoQil7cmV0''@;'; put 'put ''dXJuInJtZDE2MCI9PT1CfHwicmlwZW1kMTYwIj09PUI/ZnVuY3Rpb24gWihxKXtyZXR1cm4obmV3IF8pLnVwZGF0ZShxKS5kaWdlc3QoKX06Im1kNSI9PT1CP0Q6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gcChCKS51cGRhdGUocSkuZGlnZXN0KCl9fShCKSxRPSJzaGE1MTIiPT09Qnx8InNoYTM4''@;'; put 'put ''NCI9PT1CPzEyODo2NDtXLmxlbmd0aD5RP1c9cShXKTpXLmxlbmd0aDxRJiYoVz1OLmNvbmNhdChbVyxSXSxRKSk7Zm9yKHZhciBYPU4uYWxsb2NVbnNhZmUoUStqW0JdKSx0ZT1OLmFsbG9jVW5zYWZlKFEraltCXSkscmU9MDtyZTxRO3JlKyspWFtyZV09NTReV1tyZV0sdGVbcmVdPTkyXldb''@;'; put 'put ''cmVdO3ZhciBvZT1OLmFsbG9jVW5zYWZlKFErWis0KTtYLmNvcHkob2UsMCwwLFEpLHRoaXMuaXBhZDE9b2UsdGhpcy5pcGFkMj1YLHRoaXMub3BhZD10ZSx0aGlzLmFsZz1CLHRoaXMuYmxvY2tzaXplPVEsdGhpcy5oYXNoPXEsdGhpcy5zaXplPWpbQl19UC5wcm90b3R5cGUucnVuPWZ1bmN0''@;'; put 'put ''aW9uKEIsVyl7cmV0dXJuIEIuY29weShXLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVykuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIFkoQixXLFoscSxRKXt3KFoscSk7dmFyIFg9bmV3IFAoUT1RfHwi''@;'; put 'put ''c2hhMSIsQj1IKEIsRiwiUGFzc3dvcmQiKSwoVz1IKFcsRiwiU2FsdCIpKS5sZW5ndGgpLHRlPU4uYWxsb2NVbnNhZmUocSkscmU9Ti5hbGxvY1Vuc2FmZShXLmxlbmd0aCs0KTtXLmNvcHkocmUsMCwwLFcubGVuZ3RoKTtmb3IodmFyIG9lPTAsZ2U9altRXSxfZT1NYXRoLmNlaWwocS9nZSks''@;'; put 'put ''VGU9MTtUZTw9X2U7VGUrKyl7cmUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1YLnJ1bihyZSxYLmlwYWQxKSx6ZT1TZSx6PTE7ejxaO3orKyl7emU9WC5ydW4oemUsWC5pcGFkMik7Zm9yKHZhciBnPTA7ZzxnZTtnKyspU2VbZ11ePXplW2ddfVNlLmNvcHkodGUsb2Up''@;'; put 'put ''LG9lKz1nZX1yZXR1cm4gdGV9fSw3Nzc3OihjZSxKLGIpPT57dmFyIEQ9Yig5NTA5KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsTil7aWYoRC5pc0J1ZmZlcihfKSlyZXR1cm4gXztpZigic3RyaW5nIj09dHlwZW9mIF8pcmV0dXJuIEQuZnJvbShfLHApO2lmKEFycmF5QnVmZmVy''@;'; put 'put ''LmlzVmlldyhfKSlyZXR1cm4gRC5mcm9tKF8uYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKE4rIiBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw5OTA4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9WyJGbG9hdDE2QXJy''@;'; put 'put ''YXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXki''@;'; put 'put ''XX0sODIxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2NlLmV4cG9ydHM9dHlwZW9mIEQ+InUifHwhRC52ZXJzaW9ufHwwPT09RC52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09RC52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09RC52ZXJzaW9uLmluZGV4T2Yo''@;'; put 'put ''InYxLjguIik/e25leHRUaWNrOmZ1bmN0aW9uIF8ocCxOLHcsRil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHApdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgUixqLEg9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goSCl7Y2Fz''@;'; put 'put ''ZSAwOmNhc2UgMTpyZXR1cm4gRC5uZXh0VGljayhwKTtjYXNlIDI6cmV0dXJuIEQubmV4dFRpY2soZnVuY3Rpb24oKXtwLmNhbGwobnVsbCxOKX0pO2Nhc2UgMzpyZXR1cm4gRC5uZXh0VGljayhmdW5jdGlvbigpe3AuY2FsbChudWxsLE4sdyl9KTtjYXNlIDQ6cmV0dXJuIEQubmV4dFRpY2so''@;'; put 'put ''ZnVuY3Rpb24oKXtwLmNhbGwobnVsbCxOLHcsRil9KTtkZWZhdWx0OmZvcihSPW5ldyBBcnJheShILTEpLGo9MDtqPFIubGVuZ3RoOylSW2orK109YXJndW1lbnRzW2pdO3JldHVybiBELm5leHRUaWNrKGZ1bmN0aW9uKCl7cC5hcHBseShudWxsLFIpfSl9fX06RH0sNDE1NTpjZT0+e3ZhciBi''@;'; put 'put ''LEQsSj1jZS5leHBvcnRzPXt9O2Z1bmN0aW9uIF8oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBwKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBOKFcpe2lm''@;'; put 'put ''KGI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KFcsMCk7aWYoKGI9PT1ffHwhYikmJnNldFRpbWVvdXQpcmV0dXJuIGI9c2V0VGltZW91dCxzZXRUaW1lb3V0KFcsMCk7dHJ5e3JldHVybiBiKFcsMCl9Y2F0Y2h7dHJ5e3JldHVybiBiLmNhbGwobnVsbCxXLDApfWNhdGNoe3JldHVy''@;'; put 'put ''biBiLmNhbGwodGhpcyxXLDApfX19IWZ1bmN0aW9uKCl7dHJ5e2I9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpffWNhdGNoe2I9X310cnl7RD0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpwfWNhdGNoe0Q9cH19KCk7dmFyIFIs''@;'; put 'put ''Rj1bXSxIPSExLGo9LTE7ZnVuY3Rpb24gUCgpeyFIfHwhUnx8KEg9ITEsUi5sZW5ndGg/Rj1SLmNvbmNhdChGKTpqPS0xLEYubGVuZ3RoJiZMKCkpfWZ1bmN0aW9uIEwoKXtpZighSCl7dmFyIFc9TihQKTtIPSEwO2Zvcih2YXIgWj1GLmxlbmd0aDtaOyl7Zm9yKFI9RixGPVtdOysrajxaOylS''@;'; put 'put ''JiZSW2pdLnJ1bigpO2o9LTEsWj1GLmxlbmd0aH1SPW51bGwsSD0hMSxmdW5jdGlvbiB3KFcpe2lmKEQ9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChXKTtpZigoRD09PXB8fCFEKSYmY2xlYXJUaW1lb3V0KXJldHVybiBEPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoVyk7''@;'; put 'put ''dHJ5e3JldHVybiBEKFcpfWNhdGNoe3RyeXtyZXR1cm4gRC5jYWxsKG51bGwsVyl9Y2F0Y2h7cmV0dXJuIEQuY2FsbCh0aGlzLFcpfX19KFcpfX1mdW5jdGlvbiBZKFcsWil7dGhpcy5mdW49Vyx0aGlzLmFycmF5PVp9ZnVuY3Rpb24gQigpe31KLm5leHRUaWNrPWZ1bmN0aW9uKFcpe3ZhciBa''@;'; put 'put ''PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKVpbcS0xXT1hcmd1bWVudHNbcV07Ri5wdXNoKG5ldyBZKFcsWikpLDE9PT1GLmxlbmd0aCYmIUgmJk4oTCl9LFkucHJvdG90eXBlLnJ1''@;'; put 'put ''bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LEoudGl0bGU9ImJyb3dzZXIiLEouYnJvd3Nlcj0hMCxKLmVudj17fSxKLmFyZ3Y9W10sSi52ZXJzaW9uPSIiLEoudmVyc2lvbnM9e30sSi5vbj1CLEouYWRkTGlzdGVuZXI9QixKLm9uY2U9QixKLm9mZj1CLEou''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXI9QixKLnJlbW92ZUFsbExpc3RlbmVycz1CLEouZW1pdD1CLEoucHJlcGVuZExpc3RlbmVyPUIsSi5wcmVwZW5kT25jZUxpc3RlbmVyPUIsSi5saXN0ZW5lcnM9ZnVuY3Rpb24oVyl7cmV0dXJuW119LEouYmluZGluZz1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LEouY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxKLmNoZGlyPWZ1bmN0aW9uKFcpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LEoudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19''@;'; put 'put ''LDc5MDA6KGNlLEosYik9PntKLnB1YmxpY0VuY3J5cHQ9Yig2NTU5KSxKLnByaXZhdGVEZWNyeXB0PWIoNjEzOCksSi5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihfLHApe3JldHVybiBKLnB1YmxpY0VuY3J5cHQoXyxwLCEwKX0sSi5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8scCl7cmV0dXJu''@;'; put 'put ''IEoucHJpdmF0ZURlY3J5cHQoXyxwLCEwKX19LDkxOTk6KGNlLEosYik9Pnt2YXIgRD1iKDM0ODIpLF89Yig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gcChOKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoTiwwKSx3fWNlLmV4cG9ydHM9ZnVuY3Rpb24oTix3''@;'; put 'put ''KXtmb3IodmFyIFIsRj1fLmFsbG9jKDApLEg9MDtGLmxlbmd0aDx3OylSPXAoSCsrKSxGPV8uY29uY2F0KFtGLEQoInNoYTEiKS51cGRhdGUoTikudXBkYXRlKFIpLmRpZ2VzdCgpXSk7cmV0dXJuIEYuc2xpY2UoMCx3KX19LDIxNDQ6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnBy''@;'; put 'put ''b3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTAp''@;'; put 'put ''LHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig3''@;'; put 'put ''MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgoeix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHkt''@;'; put 'put ''MSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2YXIgVT16LmNoYXJDb2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcrMTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWlu''@;'; put 'put ''PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRB''@;'; put 'put ''cnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhl''@;'; put 'put ''eChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhp''@;'; put 'put ''cy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3''@;'; put 'put ''MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MCly''@;'; put 'put ''ZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0w''@;'; put 'put ''O2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2Ug''@;'; put 'put ''aWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0Nd''@;'; put 'put ''PTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUy''@;'; put 'put ''PT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3Ro''@;'; put 'put ''aXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgVj1nLmxlbmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxu''@;'; put 'put ''KFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9MTtmb3IobT1qKGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhp''@;'; put 'put ''cy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0''@;'; put 'put ''aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhp''@;'; put 'put ''cy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1T''@;'; put 'put ''aWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoi''@;'; put 'put ''PEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2''@;'; put 'put ''LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2''@;'; put 'put ''MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0sVj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1sw''@;'; put 'put ''XT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0oVj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxn''@;'; put 'put ''LndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEs''@;'; put 'put ''MTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10aGlzLndvcmRzW1ZdLEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYs''@;'; put 'put ''Vi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0y''@;'; put 'put ''JiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25l''@;'; put 'put ''K3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAo''@;'; put 'put ''ITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXty''@;'; put 'put ''ZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRo''@;'; put 'put ''aXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9''@;'; put 'put ''dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtmb3IoO208VDttKyspVVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUp''@;'; put 'put ''LEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02''@;'; put 'put ''NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8''@;'; put 'put ''KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIseT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxl''@;'; put 'put ''bmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1''@;'; put 'put ''cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRo''@;'; put 'put ''aXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9''@;'; put 'put ''LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7''@;'; put 'put ''dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5s''@;'; put 'put ''ZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1''@;'; put 'put ''YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jk''@;'; put 'put ''c1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCgh''@;'; put 'put ''KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWcl''@;'; put 'put ''MjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jk''@;'; put 'put ''c1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRo''@;'; put 'put ''aXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1Zd''@;'; put 'put ''PTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14Lndv''@;'; put 'put ''cmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdh''@;'; put 'put ''dGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFy''@;'; put 'put ''IEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxULmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1Vd''@;'; put 'put ''KS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtV''@;'; put 'put ''PEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFUpLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMsVT0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsUWU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZv''@;'; put 'put ''dCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxCZT04MTkxJlhlLEFlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxIZT0wfENbNV0sRGU9ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90Pj4+MTMsbG49MHxDWzddLHl0PTgxOTEmbG4sU3Q9''@;'; put 'put ''bG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+''@;'; put 'put ''MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhp''@;'; put 'put ''PTB8VFs4XSx1bj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KFUrKEU9TWF0aC5pbXVsKG5lLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChu''@;'; put 'put ''ZSxQdCkpK01hdGguaW11bChsZSxSdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRoLmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKFFlLFB0KTt2YXIgRWk9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxF''@;'; put 'put ''aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB2cj0oVSsoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwobGUsaG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+''@;'; put 'put ''PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChCZSxSdCksbT0obT1NYXRoLmltdWwoQmUsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgV249KFUrKEU9RStNYXRoLmltdWwobmUsV3QpfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFd0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0''@;'; put 'put ''aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKEJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoQmUsc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MDt2YXIgJGk9KFUrKEU9RStNYXRo''@;'; put 'put ''LmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxVdCl8MCkrTWF0aC5pbXVsKGxlLHN0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsUnQp''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLFJ0KXwwLEE9TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoQmUsaG4pfDAsbT0obT1tK01hdGguaW11bChCZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2''@;'; put 'put ''ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwO3ZhciBlaT0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsUXQpfDAsbT0obT1tK01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwLEE9QStNYXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoQmUsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRo''@;'; put 'put ''LmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx4dCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQp''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKFN0LFJ0KXwwLEE9TWF0aC5pbXVsKFN0LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoRGUsaG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJ''@;'; put 'put ''ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MDt2YXIgVmk9KFUrKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLHJuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChTdCxRdCl8MCxBPUErTWF0aC5pbXVsKFN0LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV3QpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoQmUsV2UpfDAsbT0obT1tK01hdGguaW11bChCZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSx1bil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZuKXwwKStNYXRoLmltdWwobGUsdW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+''@;'; put 'put ''PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxSdCksbT0obT1NYXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwLEU9RStNYXRoLmltdWwoRGUsc3QpfDAsbT0obT1tK01hdGguaW11bChEZSxVdCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoUWUsdW4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChRZSxmbil8MDt2YXIgRGE9KFUrKEU9RStNYXRoLmltdWwobmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGxlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxE''@;'; put 'put ''YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUXQpLG09KG09TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKFN0LFd0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MCxFPUUrTWF0aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwoRGUsVHQpfDApK01hdGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChCZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1l''@;'; put 'put ''LHVuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1bil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oVSsoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoUWUsWHQp''@;'; put 'put ''fDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxobiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChTdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01hdGguaW11bChEZSx4dCl8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGh0KXwwLEE9QStNYXRoLmltdWwoa2UseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoQmUs''@;'; put 'put ''Zm4pfDApK01hdGguaW11bChBZSx1bil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBXaT0oVSsoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXdCksbT0obT1NYXRoLmltdWwoTmUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoU3QsV2UpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwLEU9RStNYXRoLmltdWwoRGUscm4pfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChSZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsdW4pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KFUrKEU9RStNYXRoLmltdWwoQmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChCZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsc3QpLG09KG09TWF0aC5pbXVsKE5lLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LGh0KXwwLEE9QStNYXRoLmltdWwoU3QseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLHVuKXwwLG09KG09bStNYXRoLmltdWwoRGUs''@;'; put 'put ''Zm4pfDApK01hdGguaW11bChrZSx1bil8MCxBPUErTWF0aC5pbXVsKGtlLGZuKXwwO3ZhciBRbj0oVSsoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRoLmltdWwoTmUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50''@;'; put 'put ''LHVuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSx1bil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBsYT0oVSsoRT1FK01hdGguaW11bChEZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoa2UsWHQp''@;'; put 'put ''fDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxodCksbT0obT1NYXRoLmltdWwoTmUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoU3QsdW4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChTdCxmbil8MDt2YXIgYmE9KFUrKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxi''@;'; put 'put ''YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUscm4pLG09KG09TWF0aC5pbXVsKE5lLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oVSsoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoU3QsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoU3QsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+''@;'; put 'put ''PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSx1biksbT0obT1NYXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsdW4pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oVSsoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KFUrKEU9TWF0aC5pbXVsKE5lLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChOZSxlbikp''@;'; put 'put ''K01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLFZbMF09dWEsVlsxXT1FaSxWWzJdPXZyLFZbM109V24sVls0XT0kaSxWWzVdPWVpLFZbNl09UXIsVls3XT1WaSxWWzhd''@;'; put 'put ''PU5pLFZbOV09RGEsVlsxMF09THIsVlsxMV09V2ksVlsxMl09cGEsVlsxM109UW4sVlsxNF09bGEsVlsxNV09YmEsVlsxNl09TGEsVlsxN109RmEsVlsxOF09dGksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEoeixnLHkpe3JldHVybihuZXcgWCkubXVscCh6LGcs''@;'; put 'put ''eSl9ZnVuY3Rpb24gWCh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcs''@;'; put 'put ''eSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcSh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUseS5sZW5ndGg9ei5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9''@;'; put 'put ''NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBsZT0oMHx6LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUv''@;'; put 'put ''NjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkpLHh9LFgucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rp''@;'; put 'put ''b24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sWC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4g''@;'; put 'put ''Zztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LFgucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRbVV09eFtnW1VdXX0sWC5wcm90b3R5cGUudHJhbnNm''@;'; put 'put ''b3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHkseCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3IodmFyIEU9VTw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1t''@;'; put 'put ''LGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBVZT14W2FlK3dlXSxRZT1DW2FlK3dlXSxvdD14W2FlK3dlK1VdLE1lPUNbYWUrd2UrVV0sdmU9bmUqb3QtbGUqTWU7TWU9bmUqTWUrbGUqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1RZStNZSx4W2FlK3dlK1VdPVVlLW90LENbYWUr''@;'; put 'put ''d2UrVV09UWUtTWUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpuZSxuZT12ZSl9fSxYLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzEr''@;'; put 'put ''Q30sWC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sWC5wcm90b3R5cGUubm9ybWFs''@;'; put 'put ''aXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sWC5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxnW1ZdKSx4WzIqVisxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhbVl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxY''@;'; put 'put ''LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxYLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5t''@;'; put 'put ''YWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3Jkcyxn''@;'; put 'put ''Lmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2Vd''@;'; put 'put ''O21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sbGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxpemUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0''@;'; put 'put ''aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2''@;'; put 'put ''LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZhciBn''@;'; put 'put ''PW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYm''@;'; put 'put ''MD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLVU8PHl8VixW''@;'; put 'put ''PVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8o''@;'; put 'put ''eS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVu''@;'; put 'put ''Z3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0x''@;'; put 'put ''O20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZVfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tu''@;'; put 'put ''KGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1sw''@;'; put 'put ''XT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3Io''@;'; put 'put ''dmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVu''@;'; put 'put ''Z3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4o''@;'; put 'put ''ZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNb''@;'; put 'put ''eV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1''@;'; put 'put ''bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe1Y9KDB8dGhpcy53b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCks''@;'; put 'put ''dGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStVKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PVUpLFU9MCxUPTA7VDx0''@;'; put 'put ''aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxU''@;'; put 'put ''PWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5s''@;'; put 'put ''ZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIg''@;'; put 'put ''bmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxsZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxlLS0s''@;'; put 'put ''Qy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1sZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0s''@;'; put 'put ''dy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIh''@;'; put 'put ''PT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihD''@;'; put 'put ''PVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpUfSk6''@;'; put 'put ''Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29y''@;'; put 'put ''ZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3''@;'; put 'put ''LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''eT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVybiBWPDB8fDE9PT1UJiYwPT09Vj95LmRpdjowIT09''@;'; put 'put ''eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSkl''@;'; put 'put ''ZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5u''@;'; put 'put ''ZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25l''@;'; put 'put ''KCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxU''@;'; put 'put ''Lml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3IoeC5pdXNocm4obGUpO2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSksVS5pc3ViKEEpKSxWLml1c2hybigxKSxVLml1c2hy''@;'; put 'put ''bigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihUKSl9cmV0dXJue2E6VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAo''@;'; put 'put ''IWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgVT0wLEU9MTshKHku''@;'; put 'put ''d29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoViksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7''@;'; put 'put ''bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5n''@;'; put 'put ''Y2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNF''@;'; put 'put ''dmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgseD1WfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4o''@;'; put 'put ''MSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9''@;'; put 'put ''KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlzLndvcmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9v''@;'; put 'put ''IGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8''@;'; put 'put ''Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNt''@;'; put 'put ''cG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0s''@;'; put 'put ''dy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZl''@;'; put 'put ''cnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Iiks''@;'; put 'put ''dGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5y''@;'; put 'put ''ZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNx''@;'; put 'put ''cj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz''@;'; put 'put ''LnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0Om51''@;'; put 'put ''bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiByZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9''@;'; put 'put ''ZnVuY3Rpb24gb2UoKXtyZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7cmUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe3JlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtyZS5jYWxsKHRoaXMsIjI1''@;'; put 'put ''NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKHope2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKHou''@;'; put 'put ''Z3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoeil7U2UuY2FsbCh0aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlz''@;'; put 'put ''LnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRo''@;'; put 'put ''aXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cmUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHJlLnBy''@;'; put 'put ''b3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTty''@;'; put 'put ''ZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0scmUucHJvdG90eXBl''@;'; put 'put ''LmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihvZSxyZSksb2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5s''@;'; put 'put ''ZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KFUmeCk8PDR8''@;'; put 'put ''Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxvZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAs''@;'; put 'put ''eD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxl''@;'; put 'put ''bmd0aC0tKSxnfSxOKGdlLHJlKSxOKF9lLHJlKSxOKFRlLHJlKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9''@;'; put 'put ''cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4gdGVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyBvZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3''@;'; put 'put ''IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0ZVtnXT15LHl9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0''@;'; put 'put ''aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15''@;'; put 'put ''LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJv''@;'; put 'put ''dG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMu''@;'; put 'put ''bSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5z''@;'; put 'put ''dWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5p''@;'; put 'put ''c3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcs''@;'; put 'put ''Zy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkp''@;'; put 'put ''e3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEpLnRv''@;'; put 'put ''UmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElBZGQoVSk7Zm9yKHZhciBBPXRoaXMucG93KG0sQyks''@;'; put 'put ''YWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2YXIgd2U9bmUsVWU9MDswIT09d2UuY21wKFYpO1VlKyspd2U9d2UucmVkU3FyKCk7cChVZTxsZSk7dmFyIFFlPXRoaXMucG93KEEsbmV3IHcoMSkuaXVz''@;'; put 'put ''aGxuKGxlLVVlLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYp''@;'; put 'put ''O0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBWPUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtm''@;'; put 'put ''b3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYpKSwwIT09bmV8fDAhPT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9dGhpcy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6RT0w''@;'; put 'put ''fW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1u''@;'; put 'put ''dWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgu''@;'; put 'put ''bWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRo''@;'; put 'put ''aXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52''@;'; put 'put ''KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnBy''@;'; put 'put ''b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNjEzODooY2UsSixiKT0+e3ZhciBEPWIoOTgwKSxfPWIoOTE5OSkscD1iKDc4NTkpLE49Yigy''@;'; put 'put ''MTQ0KSx3PWIoMzY2MyksRj1iKDM0ODIpLEg9Yig0ODE4KSxSPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oQixXLFope3ZhciBxO3E9Qi5wYWRkaW5nP0IucGFkZGluZzpaPzE6NDt2YXIgdGUsUT1EKEIpLFg9US5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5Y''@;'; put 'put ''fHxuZXcgTihXKS5jbXAoUS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt0ZT1aP0gobmV3IE4oVyksUSk6dyhXLFEpO3ZhciByZT1SLmFsbG9jKFgtdGUubGVuZ3RoKTtpZih0ZT1SLmNvbmNhdChbcmUsdGVdLFgpLDQ9PT1xKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBqKFksQil7dmFyIFc9WS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxaPUYoInNoYTEiKS51cGRhdGUoUi5hbGxvYygwKSkuZGlnZXN0KCkscT1aLmxlbmd0aDtpZigwIT09QlswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgUT1CLnNsaWNlKDEscSsxKSxYPUIuc2xp''@;'; put 'put ''Y2UocSsxKSx0ZT1wKFEsXyhYLHEpKSxyZT1wKFgsXyh0ZSxXLXEtMSkpO2lmKGZ1bmN0aW9uIEwoWSxCKXtZPVIuZnJvbShZKSxCPVIuZnJvbShCKTt2YXIgVz0wLFo9WS5sZW5ndGg7WS5sZW5ndGghPT1CLmxlbmd0aCYmKFcrKyxaPU1hdGgubWluKFkubGVuZ3RoLEIubGVuZ3RoKSk7Zm9y''@;'; put 'put ''KHZhciBxPS0xOysrcTxaOylXKz1ZW3FdXkJbcV07cmV0dXJuIFd9KFoscmUuc2xpY2UoMCxxKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBvZT1xOzA9PT1yZVtvZV07KW9lKys7aWYoMSE9PXJlW29lKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlv''@;'; put 'put ''biBlcnJvciIpO3JldHVybiByZS5zbGljZShvZSl9KFEsdGUpO2lmKDE9PT1xKXJldHVybiBmdW5jdGlvbiBQKFksQixXKXtmb3IodmFyIFo9Qi5zbGljZSgwLDIpLHE9MixRPTA7MCE9PUJbcSsrXTspaWYocT49Qi5sZW5ndGgpe1ErKzticmVha312YXIgWD1CLnNsaWNlKDIscS0xKTtpZigo''@;'; put 'put ''IjAwMDIiIT09Wi50b1N0cmluZygiaGV4IikmJiFXfHwiMDAwMSIhPT1aLnRvU3RyaW5nKCJoZXgiKSYmVykmJlErKyxYLmxlbmd0aDw4JiZRKyssUSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gQi5zbGljZShxKX0oMCx0ZSxaKTtpZigzPT09cSlyZXR1cm4g''@;'; put 'put ''dGU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDY1NTk6KGNlLEosYik9Pnt2YXIgRD1iKDk4MCksXz1iKDE3OTgpLHA9YigzNDgyKSxOPWIoOTE5OSksdz1iKDc4NTkpLEY9YigyMTQ0KSxIPWIoNDgxOCksUj1iKDM2NjMpLGo9Yig5NTA5KS5CdWZmZXI7Y2UuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihXLFoscSl7dmFyIFE7UT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciB0ZSxYPUQoVyk7aWYoND09PVEpdGU9ZnVuY3Rpb24gUChCLFcpe3ZhciBaPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCkscT1XLmxlbmd0aCxRPXAoInNoYTEiKS51cGRhdGUoai5hbGxvYygwKSku''@;'; put 'put ''ZGlnZXN0KCksWD1RLmxlbmd0aCx0ZT0yKlg7aWYocT5aLXRlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIHJlPWouYWxsb2MoWi1xLXRlLTIpLG9lPVotWC0xLGdlPV8oWCksX2U9dyhqLmNvbmNhdChbUSxyZSxqLmFsbG9jKDEsMSksV10sb2UpLE4oZ2Usb2Up''@;'; put 'put ''KSxUZT13KGdlLE4oX2UsWCkpO3JldHVybiBuZXcgRihqLmNvbmNhdChbai5hbGxvYygxKSxUZSxfZV0sWikpfShYLFopO2Vsc2UgaWYoMT09PVEpdGU9ZnVuY3Rpb24gTChCLFcsWil7dmFyIFgscT1XLmxlbmd0aCxRPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5RLTExKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBYPVo/ai5hbGxvYyhRLXEtMywyNTUpOmZ1bmN0aW9uIFkoQil7Zm9yKHZhciBYLFc9ai5hbGxvY1Vuc2FmZShCKSxaPTAscT1fKDIqQiksUT0wO1o8QjspUT09PXEubGVuZ3RoJiYocT1fKDIqQiksUT0wKSwoWD1xW1ErK10pJiYo''@;'; put 'put ''V1taKytdPVgpO3JldHVybiBXfShRLXEtMyksbmV3IEYoai5jb25jYXQoW2ouZnJvbShbMCxaPzE6Ml0pLFgsai5hbGxvYygxKSxXXSxRKSl9KFgsWixxKTtlbHNle2lmKDMhPT1RKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHRlPW5ldyBGKFopKS5jbXAoWC5tb2R1''@;'; put 'put ''bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9SKHRlLFgpOkgodGUsWCl9fSw0ODE4OihjZSxKLGIpPT57dmFyIEQ9YigyMTQ0KSxfPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChOLHcpe3JldHVybiBfLmZy''@;'; put 'put ''b20oTi50b1JlZChELm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBEKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBfPWIubGVuZ3RoLHA9LTE7KytwPF87KWJbcF1ePURbcF07cmV0''@;'; put 'put ''dXJuIGJ9fSwzNjg5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2IucihKKSxiLmQoSix7ZGVjb2RlOigpPT5TZSxkZWZhdWx0OigpPT54LGVuY29kZTooKT0+emUsdG9BU0NJSTooKT0+Zyx0b1VuaWNvZGU6KCk9PnosdWNzMmRlY29kZTooKT0+cmUsdWNzMmVuY29kZTooKT0+b2V9KTtjb25z''@;'; put 'put ''dCBEPTIxNDc0ODM2NDcsXz0zNixQPS9eeG4tLS8sTD0vW15cMC1ceDdGXS8sWT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csQj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+''@;'; put 'put ''PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sWj1NYXRoLmZsb29yLHE9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBRKEMpe3Rocm93IG5ldyBSYW5nZUVycm9yKEJbQ10pfWZ1bmN0aW9uIHRlKEMsVCl7Y29uc3Qg''@;'; put 'put ''Vj1DLnNwbGl0KCJAIik7bGV0IFU9IiI7Vi5sZW5ndGg+MSYmKFU9VlswXSsiQCIsQz1WWzFdKTtjb25zdCBtPWZ1bmN0aW9uIFgoQyxUKXtjb25zdCBWPVtdO2xldCBVPUMubGVuZ3RoO2Zvcig7VS0tOylWW1VdPVQoQ1tVXSk7cmV0dXJuIFZ9KChDPUMucmVwbGFjZShZLCIuIikpLnNwbGl0''@;'; put 'put ''KCIuIiksVCkuam9pbigiLiIpO3JldHVybiBVK219ZnVuY3Rpb24gcmUoQyl7Y29uc3QgVD1bXTtsZXQgVj0wO2NvbnN0IFU9Qy5sZW5ndGg7Zm9yKDtWPFU7KXtjb25zdCBFPUMuY2hhckNvZGVBdChWKyspO2lmKEU+PTU1Mjk2JiZFPD01NjMxOSYmVjxVKXtjb25zdCBtPUMuY2hhckNvZGVB''@;'; put 'put ''dChWKyspOzU2MzIwPT0oNjQ1MTImbSk/VC5wdXNoKCgoMTAyMyZFKTw8MTApKygxMDIzJm0pKzY1NTM2KTooVC5wdXNoKEUpLFYtLSl9ZWxzZSBULnB1c2goRSl9cmV0dXJuIFR9Y29uc3Qgb2U9Qz0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uQyksZ2U9ZnVuY3Rpb24oQyl7cmV0dXJuIEM+''@;'; put 'put ''PTQ4JiZDPDU4P0MtNDgrMjY6Qz49NjUmJkM8OTE/Qy02NTpDPj05NyYmQzwxMjM/Qy05NzpffSxfZT1mdW5jdGlvbihDLFQpe3JldHVybiBDKzIyKzc1KihDPDI2KS0oKDAhPVQpPDw1KX0sVGU9ZnVuY3Rpb24oQyxULFYpe2xldCBVPTA7Zm9yKEM9Vj9aKEMvNzAwKTpDPj4xLEMrPVooQy9U''@;'; put 'put ''KTtDPjQ1NTtVKz1fKUM9WihDLzM1KTtyZXR1cm4gWihVKzM2KkMvKEMrMzgpKX0sU2U9ZnVuY3Rpb24oQyl7Y29uc3QgVD1bXSxWPUMubGVuZ3RoO2xldCBVPTAsRT0xMjgsbT03MixBPUMubGFzdEluZGV4T2YoIi0iKTtBPDAmJihBPTApO2ZvcihsZXQgYWU9MDthZTxBOysrYWUpQy5jaGFy''@;'; put 'put ''Q29kZUF0KGFlKT49MTI4JiZRKCJub3QtYmFzaWMiKSxULnB1c2goQy5jaGFyQ29kZUF0KGFlKSk7Zm9yKGxldCBhZT1BPjA/QSsxOjA7YWU8Vjspe2NvbnN0IG5lPVU7Zm9yKGxldCB3ZT0xLFVlPV87O1VlKz1fKXthZT49ViYmUSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IFFlPWdlKEMuY2hh''@;'; put 'put ''ckNvZGVBdChhZSsrKSk7UWU+PV8mJlEoImludmFsaWQtaW5wdXQiKSxRZT5aKChELVUpL3dlKSYmUSgib3ZlcmZsb3ciKSxVKz1RZSp3ZTtjb25zdCBvdD1VZTw9bT8xOlVlPj1tKzI2PzI2OlVlLW07aWYoUWU8b3QpYnJlYWs7Y29uc3QgTWU9Xy1vdDt3ZT5aKEQvTWUpJiZRKCJvdmVyZmxv''@;'; put 'put ''dyIpLHdlKj1NZX1jb25zdCBsZT1ULmxlbmd0aCsxO209VGUoVS1uZSxsZSwwPT1uZSksWihVL2xlKT5ELUUmJlEoIm92ZXJmbG93IiksRSs9WihVL2xlKSxVJT1sZSxULnNwbGljZShVKyssMCxFKX1yZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uVCl9LHplPWZ1bmN0aW9uKEMpe2Nv''@;'; put 'put ''bnN0IFQ9W10sVj0oQz1yZShDKSkubGVuZ3RoO2xldCBVPTEyOCxFPTAsbT03Mjtmb3IoY29uc3QgbmUgb2YgQyluZTwxMjgmJlQucHVzaChxKG5lKSk7Y29uc3QgQT1ULmxlbmd0aDtsZXQgYWU9QTtmb3IoQSYmVC5wdXNoKCItIik7YWU8Vjspe2xldCBuZT1EO2Zvcihjb25zdCB3ZSBvZiBD''@;'; put 'put ''KXdlPj1VJiZ3ZTxuZSYmKG5lPXdlKTtjb25zdCBsZT1hZSsxO25lLVU+WigoRC1FKS9sZSkmJlEoIm92ZXJmbG93IiksRSs9KG5lLVUpKmxlLFU9bmU7Zm9yKGNvbnN0IHdlIG9mIEMpaWYod2U8VSYmKytFPkQmJlEoIm92ZXJmbG93Iiksd2U9PT1VKXtsZXQgVWU9RTtmb3IobGV0IFFlPV87''@;'; put 'put ''O1FlKz1fKXtjb25zdCBvdD1RZTw9bT8xOlFlPj1tKzI2PzI2OlFlLW07aWYoVWU8b3QpYnJlYWs7Y29uc3QgTWU9VWUtb3QsdmU9Xy1vdDtULnB1c2gocShfZShvdCtNZSV2ZSwwKSkpLFVlPVooTWUvdmUpfVQucHVzaChxKF9lKFVlLDApKSksbT1UZShFLGxlLGFlPT09QSksRT0wLCsrYWV9''@;'; put 'put ''KytFLCsrVX1yZXR1cm4gVC5qb2luKCIiKX0sej1mdW5jdGlvbihDKXtyZXR1cm4gdGUoQyxmdW5jdGlvbihUKXtyZXR1cm4gUC50ZXN0KFQpP1NlKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxnPWZ1bmN0aW9uKEMpe3JldHVybiB0ZShDLGZ1bmN0aW9uKFQpe3JldHVybiBMLnRl''@;'; put 'put ''c3QoVCk/InhuLS0iK3plKFQpOlR9KX0seD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTpyZSxlbmNvZGU6b2V9LGRlY29kZTpTZSxlbmNvZGU6emUsdG9BU0NJSTpnLHRvVW5pY29kZTp6fX0sNzEyOTooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfKEYpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KEYucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChGKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChGKX1jYXRjaHtyZXR1cm4gbnVsbH19''@;'; put 'put ''Si5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhGLEgpe0g9SHx8IiI7dmFyIGosUCxSPVtdO2ZvcihQIGluInN0cmluZyIhPXR5cGVvZiBIJiYoSD0iPyIpLEYpaWYoYi5jYWxsKEYsUCkpe2lmKCEoaj1GW1BdKSYmKG51bGw9PWp8fGlzTmFOKGopKSYmKGo9IiIpLFA9cChQKSxqPXAoaiksbnVsbD09''@;'; put 'put ''PVB8fG51bGw9PT1qKWNvbnRpbnVlO1IucHVzaChQKyI9IitqKX1yZXR1cm4gUi5sZW5ndGg/SCtSLmpvaW4oIiYiKToiIn0sSi5wYXJzZT1mdW5jdGlvbiBOKEYpe2Zvcih2YXIgaixIPS8oW149PyMmXSspPT8oW14mXSopL2csUj17fTtqPUguZXhlYyhGKTspe3ZhciBQPV8oalsxXSksTD1f''@;'; put 'put ''KGpbMl0pO251bGw9PT1QfHxudWxsPT09THx8UCBpbiBSfHwoUltQXT1MKX1yZXR1cm4gUn19LDE3OTg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPTY1NTM2LHc9Yig5NTA5KS5CdWZmZXIsRj1iLmcuY3J5cHRvfHxiLmcubXNDcnlwdG87Y2UuZXhwb3J0cz1GJiZG''@;'; put 'put ''LmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBIKFIsail7aWYoUj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIFA9dy5hbGxvY1Vuc2FmZShSKTtpZihSPjApaWYoUj5fKWZvcih2YXIgTD0wO0w8UjtMKz1fKUYu''@;'; put 'put ''Z2V0UmFuZG9tVmFsdWVzKFAuc2xpY2UoTCxMK18pKTtlbHNlIEYuZ2V0UmFuZG9tVmFsdWVzKFApO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqP0QubmV4dFRpY2soZnVuY3Rpb24oKXtqKG51bGwsUCl9KTpQfTpmdW5jdGlvbiBOKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9t''@;'; put 'put ''IG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO2Z1bmN0aW9uIF8oKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgcD1iKDk1MDkpLE49YigxNzk4KSx3PXAuQnVmZmVyLEY9cC5rTWF4TGVu''@;'; put 'put ''Z3RoLEg9Yi5nLmNyeXB0b3x8Yi5nLm1zQ3J5cHRvLFI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBqKFcsWil7aWYoIm51bWJlciIhPXR5cGVvZiBXfHxXIT1XKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5SfHxXPDApdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihXPkZ8fFc+Wil0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFAoVyxaLHEpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11''@;'; put 'put ''c3QgYmUgYSBudW1iZXIiKTtpZihXPlJ8fFc8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihXK1o+cXx8Vz5GKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gWShXLFoscSxRKXtpZihELmJyb3dzZXIpe3Zh''@;'; put 'put ''ciB0ZT1uZXcgVWludDhBcnJheShXLmJ1ZmZlcixaLHEpO3JldHVybiBILmdldFJhbmRvbVZhbHVlcyh0ZSksUT92b2lkIEQubmV4dFRpY2soZnVuY3Rpb24oKXtRKG51bGwsVyl9KTpXfWlmKCFRKXJldHVybiBOKHEpLmNvcHkoVyxaKSxXO04ocSxmdW5jdGlvbihvZSxnZSl7aWYob2UpcmV0''@;'; put 'put ''dXJuIFEob2UpO2dlLmNvcHkoVyxaKSxRKG51bGwsVyl9KX1IJiZILmdldFJhbmRvbVZhbHVlc3x8IUQuYnJvd3Nlcj8oSi5yYW5kb21GaWxsPWZ1bmN0aW9uIEwoVyxaLHEsUSl7aWYoISh3LmlzQnVmZmVyKFcpfHxXIGluc3RhbmNlb2YgYi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBaKVE9WixaPTAscT1XLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBxKVE9cSxxPVcubGVuZ3RoLVo7ZWxzZSBpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgUSl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiBqKFosVy5sZW5ndGgpLFAocSxaLFcubGVuZ3RoKSxZKFcsWixxLFEpfSxKLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIEIoVyxaLHEpe2lmKHR5cGVvZiBaPiJ1IiYm''@;'; put 'put ''KFo9MCksISh3LmlzQnVmZmVyKFcpfHxXIGluc3RhbmNlb2YgYi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBqKFosVy5sZW5ndGgpLHZvaWQgMD09PXEmJihxPVcubGVuZ3Ro''@;'; put 'put ''LVopLFAocSxaLFcubGVuZ3RoKSxZKFcsWixxKX0pOihKLnJhbmRvbUZpbGw9XyxKLnJhbmRvbUZpbGxTeW5jPV8pfSw0MjgxOmNlPT57InVzZSBzdHJpY3QiO3ZhciBiPXt9O2Z1bmN0aW9uIEQoRixILFIpe1J8fChSPUVycm9yKTt2YXIgUD1mdW5jdGlvbihMKXtmdW5jdGlvbiBZKEIsVyxa''@;'; put 'put ''KXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24gaihMLFksQil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBIP0g6SChMLFksQil9KEIsVyxaKSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIEooRixIKXtGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEgucHJvdG90eXBlKSxGLnByb3RvdHlwZS5j''@;'; put 'put ''b25zdHJ1Y3Rvcj1GLEYuX19wcm90b19fPUh9KFksTCksWX0oUik7UC5wcm90b3R5cGUubmFtZT1SLm5hbWUsUC5wcm90b3R5cGUuY29kZT1GLGJbRl09UH1mdW5jdGlvbiBfKEYsSCl7aWYoQXJyYXkuaXNBcnJheShGKSl7dmFyIFI9Ri5sZW5ndGg7cmV0dXJuIEY9Ri5tYXAoZnVuY3Rpb24o''@;'; put 'put ''ail7cmV0dXJuIFN0cmluZyhqKX0pLFI+Mj8ib25lIG9mICIuY29uY2F0KEgsIiAiKS5jb25jYXQoRi5zbGljZSgwLFItMSkuam9pbigiLCAiKSwiLCBvciAiKStGW1ItMV06Mj09PVI/Im9uZSBvZiAiLmNvbmNhdChILCIgIikuY29uY2F0KEZbMF0sIiBvciAiKS5jb25jYXQoRlsxXSk6Im9m''@;'; put 'put ''ICIuY29uY2F0KEgsIiAiKS5jb25jYXQoRlswXSl9cmV0dXJuIm9mICIuY29uY2F0KEgsIiAiKS5jb25jYXQoU3RyaW5nKEYpKX1EKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKEYsSCl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytIKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytG''@;'; put 'put ''KyciJ30sVHlwZUVycm9yKSxEKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oRixILFIpe3ZhciBqLFA7aWYoInN0cmluZyI9PXR5cGVvZiBIJiZmdW5jdGlvbiBwKEYsSCxSKXtyZXR1cm4gRi5zdWJzdHIoIVJ8fFI8MD8wOitSLEgubGVuZ3RoKT09PUh9KEgsIm5vdCAiKT8oaj0i''@;'; put 'put ''bXVzdCBub3QgYmUiLEg9SC5yZXBsYWNlKC9ebm90IC8sIiIpKTpqPSJtdXN0IGJlIixmdW5jdGlvbiBOKEYsSCxSKXtyZXR1cm4odm9pZCAwPT09Unx8Uj5GLmxlbmd0aCkmJihSPUYubGVuZ3RoKSxGLnN1YnN0cmluZyhSLUgubGVuZ3RoLFIpPT09SH0oRiwiIGFyZ3VtZW50IikpUD0iVGhl''@;'; put 'put ''ICIuY29uY2F0KEYsIiAiKS5jb25jYXQoaiwiICIpLmNvbmNhdChfKEgsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KEYsSCxSKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIFImJihSPTApLCEoUitILmxlbmd0aD5GLmxlbmd0aCkmJi0xIT09Ri5pbmRleE9mKEgsUil9KEYsIi4iKT8i''@;'; put 'put ''cHJvcGVydHkiOiJhcmd1bWVudCI7UD0nVGhlICInLmNvbmNhdChGLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KGosIiAiKS5jb25jYXQoXyhILCJ0eXBlIikpfXJldHVybiBQKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIFIpfSxUeXBlRXJyb3IpLEQoIkVSUl9TVFJFQU1f''@;'; put 'put ''UFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEQoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihGKXtyZXR1cm4iVGhlICIrRisiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksRCgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQ''@;'; put 'put ''cmVtYXR1cmUgY2xvc2UiKSxEKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oRil7cmV0dXJuIkNhbm5vdCBjYWxsICIrRisiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksRCgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRp''@;'; put 'put ''bWVzIiksRCgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxEKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEQoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVz''@;'; put 'put ''IHRvIHN0cmVhbSIsVHlwZUVycm9yKSxEKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oRil7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrRn0sVHlwZUVycm9yKSxEKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBl''@;'; put 'put ''bmQgZXZlbnQiKSxjZS5leHBvcnRzLnE9Yn0sNjc1MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEwpe3ZhciBZPVtdO2Zvcih2YXIgQiBpbiBMKVkucHVzaChCKTtyZXR1cm4gWX07Y2UuZXhwb3J0cz1SO3ZhciBwPWIoOTQ4''@;'; put 'put ''MSksTj1iKDQyMjkpO2IoNTcxNykoUixwKTtmb3IodmFyIHc9XyhOLnByb3RvdHlwZSksRj0wO0Y8dy5sZW5ndGg7RisrKXt2YXIgSD13W0ZdO1IucHJvdG90eXBlW0hdfHwoUi5wcm90b3R5cGVbSF09Ti5wcm90b3R5cGVbSF0pfWZ1bmN0aW9uIFIoTCl7aWYoISh0aGlzIGluc3RhbmNlb2Yg''@;'; put 'put ''UikpcmV0dXJuIG5ldyBSKEwpO3AuY2FsbCh0aGlzLEwpLE4uY2FsbCh0aGlzLEwpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxMJiYoITE9PT1MLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1MLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1MLmFsbG93SGFsZk9w''@;'; put 'put ''ZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLGopKSl9ZnVuY3Rpb24gaigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEQubmV4dFRpY2soUCx0aGlzKX1mdW5jdGlvbiBQKEwpe0wuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJ3''@;'; put 'put ''cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oWSl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUu''@;'; put 'put ''ZGVzdHJveWVkPVksdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9WSl9fSl9LDI3MjU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1fO3ZhciBEPWIoNDYwNSk7ZnVuY3Rpb24gXyhwKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF8ocCk7RC5jYWxs''@;'; put 'put ''KHRoaXMscCl9Yig1NzE3KShfLEQpLF8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24ocCxOLHcpe3cobnVsbCxwKX19LDk0ODE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIF8sRD1iKDQxNTUpO2NlLmV4cG9ydHM9ZyxnLlJlYWRhYmxlU3RhdGU9eixiKDcxODcpO3ZhciBMLE49''@;'; put 'put ''ZnVuY3Rpb24oUmUsSWUpe3JldHVybiBSZS5saXN0ZW5lcnMoSWUpLmxlbmd0aH0sdz1iKDI1MDMpLEY9Yig4NzY0KS5CdWZmZXIsSD0odHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rp''@;'; put 'put ''b24oKXt9LFA9Yig0NjE2KTtMPVAmJlAuZGVidWdsb2c/UC5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBvZSxnZSxfZSxZPWIoNzMyNyksQj1iKDExOTUpLFo9YigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLHE9Yig0MjgxKS5xLFE9cS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxY''@;'; put 'put ''PXEuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRix0ZT1xLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHJlPXEuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtiKDU3MTcpKGcsdyk7dmFyIFRlPUIuZXJyb3JPckRlc3Ryb3ksU2U9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJv''@;'; put 'put ''eSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24geihGZSxSZSxJZSl7Xz1ffHxiKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIEllJiYoSWU9UmUgaW5zdGFuY2VvZiBfKSx0aGlzLm9iamVjdE1vZGU9ISEoRmU9RmV8fHt9KS5vYmplY3RNb2RlLEllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMu''@;'; put 'put ''b2JqZWN0TW9kZXx8ISFGZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1aKHRoaXMsRmUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsSWUpLHRoaXMuYnVmZmVyPW5ldyBZLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMu''@;'; put 'put ''Zmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxl''@;'; put 'put ''ZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PUZlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhRmUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERy''@;'; put 'put ''YWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsRmUuZW5jb2RpbmcmJihvZXx8KG9lPWIoMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyBvZShGZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1GZS5lbmNvZGluZyl9ZnVuY3Rpb24g''@;'; put 'put ''ZyhGZSl7aWYoXz1ffHxiKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgeihGZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBfKSx0aGlzLnJlYWRhYmxlPSEwLEZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlYWQmJih0''@;'; put 'put ''aGlzLl9yZWFkPUZlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1GZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHkoRmUsUmUsSWUsSGUsRGUpe0woInJlYWRhYmxlQWRkQ2h1bmsiLFJlKTt2YXIgX3Qsa2U9RmUuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGU7aWYobnVsbD09PVJlKWtlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShGZSxSZSl7aWYoTCgib25Fb2ZDaHVuayIpLCFSZS5lbmRlZCl7aWYoUmUuZGVjb2Rlcil7dmFyIEllPVJlLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmKFJlLmJ1ZmZlci5wdXNoKEllKSxSZS5sZW5ndGgr''@;'; put 'put ''PVJlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgpfVJlLmVuZGVkPSEwLFJlLnN5bmM/bShGZSk6KFJlLm5lZWRSZWFkYWJsZT0hMSxSZS5lbWl0dGVkUmVhZGFibGV8fChSZS5lbWl0dGVkUmVhZGFibGU9ITAsQShGZSkpKX19KEZlLGtlKTtlbHNlIGlmKERlfHwoX3Q9ZnVuY3Rpb24gQyhGZSxS''@;'; put 'put ''ZSl7dmFyIEllO3JldHVybiFmdW5jdGlvbiBqKEZlKXtyZXR1cm4gRi5pc0J1ZmZlcihGZSl8fEZlIGluc3RhbmNlb2YgSH0oUmUpJiYic3RyaW5nIiE9dHlwZW9mIFJlJiZ2b2lkIDAhPT1SZSYmIUZlLm9iamVjdE1vZGUmJihJZT1uZXcgUSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwi''@;'; put 'put ''VWludDhBcnJheSJdLFJlKSksSWV9KGtlLFJlKSksX3QpVGUoRmUsX3QpO2Vsc2UgaWYoa2Uub2JqZWN0TW9kZXx8UmUmJlJlLmxlbmd0aD4wKWlmKCJzdHJpbmciIT10eXBlb2YgUmUmJiFrZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmUpIT09Ri5wcm90b3R5cGUmJihS''@;'; put 'put ''ZT1mdW5jdGlvbiBSKEZlKXtyZXR1cm4gRi5mcm9tKEZlKX0oUmUpKSxIZSlrZS5lbmRFbWl0dGVkP1RlKEZlLG5ldyByZSk6eChGZSxrZSxSZSwhMCk7ZWxzZSBpZihrZS5lbmRlZClUZShGZSxuZXcgWCk7ZWxzZXtpZihrZS5kZXN0cm95ZWQpcmV0dXJuITE7a2UucmVhZGluZz0hMSxrZS5k''@;'; put 'put ''ZWNvZGVyJiYhSWU/KFJlPWtlLmRlY29kZXIud3JpdGUoUmUpLGtlLm9iamVjdE1vZGV8fDAhPT1SZS5sZW5ndGg/eChGZSxrZSxSZSwhMSk6YWUoRmUsa2UpKTp4KEZlLGtlLFJlLCExKX1lbHNlIEhlfHwoa2UucmVhZGluZz0hMSxhZShGZSxrZSkpO3JldHVybiFrZS5lbmRlZCYmKGtlLmxl''@;'; put 'put ''bmd0aDxrZS5oaWdoV2F0ZXJNYXJrfHwwPT09a2UubGVuZ3RoKX1mdW5jdGlvbiB4KEZlLFJlLEllLEhlKXtSZS5mbG93aW5nJiYwPT09UmUubGVuZ3RoJiYhUmUuc3luYz8oUmUuYXdhaXREcmFpbj0wLEZlLmVtaXQoImRhdGEiLEllKSk6KFJlLmxlbmd0aCs9UmUub2JqZWN0TW9kZT8xOkll''@;'; put 'put ''Lmxlbmd0aCxIZT9SZS5idWZmZXIudW5zaGlmdChJZSk6UmUuYnVmZmVyLnB1c2goSWUpLFJlLm5lZWRSZWFkYWJsZSYmbShGZSkpLGFlKEZlLFJlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZy5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oUmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1SZSl9fSksZy5wcm90b3R5cGUuZGVzdHJveT1CLmRl''@;'; put 'put ''c3Ryb3ksZy5wcm90b3R5cGUuX3VuZGVzdHJveT1CLnVuZGVzdHJveSxnLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihGZSxSZSl7UmUoRmUpfSxnLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEZlLFJlKXt2YXIgSGUsSWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gSWUub2JqZWN0''@;'; put 'put ''TW9kZT9IZT0hMDoic3RyaW5nIj09dHlwZW9mIEZlJiYoKFJlPVJlfHxJZS5kZWZhdWx0RW5jb2RpbmcpIT09SWUuZW5jb2RpbmcmJihGZT1GLmZyb20oRmUsUmUpLFJlPSIiKSxIZT0hMCkseSh0aGlzLEZlLFJlLCExLEhlKX0sZy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihGZSl7cmV0''@;'; put 'put ''dXJuIHkodGhpcyxGZSxudWxsLCEwLCExKX0sZy5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sZy5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oRmUpe29lfHwob2U9YigyNTUzKS5zKTt2YXIgUmU9bmV3''@;'; put 'put ''IG9lKEZlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9UmUsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBJZT10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLEhlPSIiO251bGwhPT1JZTsp''@;'; put 'put ''SGUrPVJlLndyaXRlKEllLmRhdGEpLEllPUllLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1IZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChIZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9SGUubGVuZ3RoLHRoaXN9O3Zh''@;'; put 'put ''ciBUPTEwNzM3NDE4MjQ7ZnVuY3Rpb24gVShGZSxSZSl7cmV0dXJuIEZlPD0wfHwwPT09UmUubGVuZ3RoJiZSZS5lbmRlZD8wOlJlLm9iamVjdE1vZGU/MTpGZSE9RmU/UmUuZmxvd2luZyYmUmUubGVuZ3RoP1JlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOlJlLmxlbmd0aDooRmU+UmUuaGln''@;'; put 'put ''aFdhdGVyTWFyayYmKFJlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gVihGZSl7cmV0dXJuIEZlPj1UP0ZlPVQ6KEZlLS0sRmV8PUZlPj4+MSxGZXw9RmU+Pj4yLEZlfD1GZT4+PjQsRmV8PUZlPj4+OCxGZXw9RmU+Pj4xNixGZSsrKSxGZX0oRmUpKSxGZTw9UmUubGVuZ3RoP0ZlOlJlLmVuZGVk''@;'; put 'put ''P1JlLmxlbmd0aDooUmUubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBtKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW1pdFJlYWRhYmxlIixSZS5uZWVkUmVhZGFibGUsUmUuZW1pdHRlZFJlYWRhYmxlKSxSZS5uZWVkUmVhZGFibGU9ITEsUmUuZW1pdHRlZFJlYWRhYmxl''@;'; put 'put ''fHwoTCgiZW1pdFJlYWRhYmxlIixSZS5mbG93aW5nKSxSZS5lbWl0dGVkUmVhZGFibGU9ITAsRC5uZXh0VGljayhBLEZlKSl9ZnVuY3Rpb24gQShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFkYWJsZV8iLFJlLmRlc3Ryb3llZCxSZS5sZW5ndGgsUmUuZW5kZWQpLCFS''@;'; put 'put ''ZS5kZXN0cm95ZWQmJihSZS5sZW5ndGh8fFJlLmVuZGVkKSYmKEZlLmVtaXQoInJlYWRhYmxlIiksUmUuZW1pdHRlZFJlYWRhYmxlPSExKSxSZS5uZWVkUmVhZGFibGU9IVJlLmZsb3dpbmcmJiFSZS5lbmRlZCYmUmUubGVuZ3RoPD1SZS5oaWdoV2F0ZXJNYXJrLE1lKEZlKX1mdW5jdGlvbiBh''@;'; put 'put ''ZShGZSxSZSl7UmUucmVhZGluZ01vcmV8fChSZS5yZWFkaW5nTW9yZT0hMCxELm5leHRUaWNrKG5lLEZlLFJlKSl9ZnVuY3Rpb24gbmUoRmUsUmUpe2Zvcig7IVJlLnJlYWRpbmcmJiFSZS5lbmRlZCYmKFJlLmxlbmd0aDxSZS5oaWdoV2F0ZXJNYXJrfHxSZS5mbG93aW5nJiYwPT09UmUubGVu''@;'; put 'put ''Z3RoKTspe3ZhciBJZT1SZS5sZW5ndGg7aWYoTCgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxGZS5yZWFkKDApLEllPT09UmUubGVuZ3RoKWJyZWFrfVJlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHdlKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7UmUucmVhZGFibGVMaXN0ZW5pbmc9''@;'; put 'put ''RmUubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLFJlLnJlc3VtZVNjaGVkdWxlZCYmIVJlLnBhdXNlZD9SZS5mbG93aW5nPSEwOkZlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZGZS5yZXN1bWUoKX1mdW5jdGlvbiBVZShGZSl7TCgicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksRmUu''@;'; put 'put ''cmVhZCgwKX1mdW5jdGlvbiBvdChGZSxSZSl7TCgicmVzdW1lIixSZS5yZWFkaW5nKSxSZS5yZWFkaW5nfHxGZS5yZWFkKDApLFJlLnJlc3VtZVNjaGVkdWxlZD0hMSxGZS5lbWl0KCJyZXN1bWUiKSxNZShGZSksUmUuZmxvd2luZyYmIVJlLnJlYWRpbmcmJkZlLnJlYWQoMCl9ZnVuY3Rpb24g''@;'; put 'put ''TWUoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtmb3IoTCgiZmxvdyIsUmUuZmxvd2luZyk7UmUuZmxvd2luZyYmbnVsbCE9PUZlLnJlYWQoKTspO31mdW5jdGlvbiB2ZShGZSxSZSl7cmV0dXJuIDA9PT1SZS5sZW5ndGg/bnVsbDooUmUub2JqZWN0TW9kZT9JZT1SZS5idWZmZXIuc2hp''@;'; put 'put ''ZnQoKTohRmV8fEZlPj1SZS5sZW5ndGg/KEllPVJlLmRlY29kZXI/UmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1SZS5idWZmZXIubGVuZ3RoP1JlLmJ1ZmZlci5maXJzdCgpOlJlLmJ1ZmZlci5jb25jYXQoUmUubGVuZ3RoKSxSZS5idWZmZXIuY2xlYXIoKSk6SWU9UmUuYnVmZmVyLmNvbnN1bWUo''@;'; put 'put ''RmUsUmUuZGVjb2RlciksSWUpO3ZhciBJZX1mdW5jdGlvbiBYZShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVuZFJlYWRhYmxlIixSZS5lbmRFbWl0dGVkKSxSZS5lbmRFbWl0dGVkfHwoUmUuZW5kZWQ9ITAsRC5uZXh0VGljayhCZSxSZSxGZSkpfWZ1bmN0aW9uIEJlKEZlLFJl''@;'; put 'put ''KXtpZihMKCJlbmRSZWFkYWJsZU5UIixGZS5lbmRFbWl0dGVkLEZlLmxlbmd0aCksIUZlLmVuZEVtaXR0ZWQmJjA9PT1GZS5sZW5ndGgmJihGZS5lbmRFbWl0dGVkPSEwLFJlLnJlYWRhYmxlPSExLFJlLmVtaXQoImVuZCIpLEZlLmF1dG9EZXN0cm95KSl7dmFyIEllPVJlLl93cml0YWJsZVN0''@;'; put 'put ''YXRlOyghSWV8fEllLmF1dG9EZXN0cm95JiZJZS5maW5pc2hlZCkmJlJlLmRlc3Ryb3koKX19ZnVuY3Rpb24gQWUoRmUsUmUpe2Zvcih2YXIgSWU9MCxIZT1GZS5sZW5ndGg7SWU8SGU7SWUrKylpZihGZVtJZV09PT1SZSlyZXR1cm4gSWU7cmV0dXJuLTF9Zy5wcm90b3R5cGUucmVhZD1mdW5j''@;'; put 'put ''dGlvbihGZSl7TCgicmVhZCIsRmUpLEZlPXBhcnNlSW50KEZlLDEwKTt2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT1GZTtpZigwIT09RmUmJihSZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1GZSYmUmUubmVlZFJlYWRhYmxlJiYoKDAhPT1SZS5oaWdoV2F0ZXJNYXJrP1JlLmxlbmd0''@;'; put 'put ''aD49UmUuaGlnaFdhdGVyTWFyazpSZS5sZW5ndGg+MCl8fFJlLmVuZGVkKSlyZXR1cm4gTCgicmVhZDogZW1pdFJlYWRhYmxlIixSZS5sZW5ndGgsUmUuZW5kZWQpLDA9PT1SZS5sZW5ndGgmJlJlLmVuZGVkP1hlKHRoaXMpOm0odGhpcyksbnVsbDtpZigwPT09KEZlPVUoRmUsUmUpKSYmUmUu''@;'; put 'put ''ZW5kZWQpcmV0dXJuIDA9PT1SZS5sZW5ndGgmJlhlKHRoaXMpLG51bGw7dmFyIERlLEhlPVJlLm5lZWRSZWFkYWJsZTtyZXR1cm4gTCgibmVlZCByZWFkYWJsZSIsSGUpLCgwPT09UmUubGVuZ3RofHxSZS5sZW5ndGgtRmU8UmUuaGlnaFdhdGVyTWFyaykmJkwoImxlbmd0aCBsZXNzIHRoYW4g''@;'; put 'put ''d2F0ZXJtYXJrIixIZT0hMCksUmUuZW5kZWR8fFJlLnJlYWRpbmc/TCgicmVhZGluZyBvciBlbmRlZCIsSGU9ITEpOkhlJiYoTCgiZG8gcmVhZCIpLFJlLnJlYWRpbmc9ITAsUmUuc3luYz0hMCwwPT09UmUubGVuZ3RoJiYoUmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFJlLmhpZ2hX''@;'; put 'put ''YXRlck1hcmspLFJlLnN5bmM9ITEsUmUucmVhZGluZ3x8KEZlPVUoSWUsUmUpKSksbnVsbD09PShEZT1GZT4wP3ZlKEZlLFJlKTpudWxsKT8oUmUubmVlZFJlYWRhYmxlPVJlLmxlbmd0aDw9UmUuaGlnaFdhdGVyTWFyayxGZT0wKTooUmUubGVuZ3RoLT1GZSxSZS5hd2FpdERyYWluPTApLDA9''@;'; put 'put ''PT1SZS5sZW5ndGgmJihSZS5lbmRlZHx8KFJlLm5lZWRSZWFkYWJsZT0hMCksSWUhPT1GZSYmUmUuZW5kZWQmJlhlKHRoaXMpKSxudWxsIT09RGUmJnRoaXMuZW1pdCgiZGF0YSIsRGUpLERlfSxnLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGZSl7VGUodGhpcyxuZXcgdGUoIl9yZWFkKCki''@;'; put 'put ''KSl9LGcucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oRmUsUmUpe3ZhciBJZT10aGlzLEhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKEhlLnBpcGVzQ291bnQpe2Nhc2UgMDpIZS5waXBlcz1GZTticmVhaztjYXNlIDE6SGUucGlwZXM9W0hlLnBpcGVzLEZlXTticmVhaztkZWZhdWx0Okhl''@;'; put 'put ''LnBpcGVzLnB1c2goRmUpfUhlLnBpcGVzQ291bnQrPTEsTCgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixIZS5waXBlc0NvdW50LFJlKTt2YXIga2U9UmUmJiExPT09UmUuZW5kfHxGZT09PUQuc3Rkb3V0fHxGZT09PUQuc3RkZXJyP3R0Om50O2Z1bmN0aW9uIG50KCl7TCgib25lbmQiKSxGZS5l''@;'; put 'put ''bmQoKX1IZS5lbmRFbWl0dGVkP0QubmV4dFRpY2soa2UpOkllLm9uY2UoImVuZCIsa2UpLEZlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIF90KE5lLHV0KXtMKCJvbnVucGlwZSIpLE5lPT09SWUmJnV0JiYhMT09PXV0Lmhhc1VucGlwZWQmJih1dC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIHl0KCl7''@;'; put 'put ''TCgiY2xlYW51cCIpLEZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaXQpLEZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCRlKSxGZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLEplKSxGZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLER0KSxGZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixfdCks''@;'; put 'put ''SWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsbnQpLEllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHR0KSxJZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsU3QpLGxuPSEwLEhlLmF3YWl0RHJhaW4mJighRmUuX3dyaXRhYmxlU3RhdGV8fEZlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJkplKCl9KCkp''@;'; put 'put ''fSk7dmFyIEplPWZ1bmN0aW9uIGxlKEZlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgSWU9RmUuX3JlYWRhYmxlU3RhdGU7TCgicGlwZU9uRHJhaW4iLEllLmF3YWl0RHJhaW4pLEllLmF3YWl0RHJhaW4mJkllLmF3YWl0RHJhaW4tLSwwPT09SWUuYXdhaXREcmFpbiYmTihGZSwiZGF0YSIpJiYo''@;'; put 'put ''SWUuZmxvd2luZz0hMCxNZShGZSkpfX0oSWUpO0ZlLm9uKCJkcmFpbiIsSmUpO3ZhciBsbj0hMTtmdW5jdGlvbiBTdChOZSl7TCgib25kYXRhIik7dmFyIHV0PUZlLndyaXRlKE5lKTtMKCJkZXN0LndyaXRlIix1dCksITE9PT11dCYmKCgxPT09SGUucGlwZXNDb3VudCYmSGUucGlwZXM9PT1G''@;'; put 'put ''ZXx8SGUucGlwZXNDb3VudD4xJiYtMSE9PUFlKEhlLnBpcGVzLEZlKSkmJiFsbiYmKEwoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsSGUuYXdhaXREcmFpbiksSGUuYXdhaXREcmFpbisrKSxJZS5wYXVzZSgpKX1mdW5jdGlvbiBEdChOZSl7TCgib25lcnJvciIsTmUpLHR0KCksRmUu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImVycm9yIixEdCksMD09PU4oRmUsImVycm9yIikmJlRlKEZlLE5lKX1mdW5jdGlvbiBpdCgpe0ZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCRlKSx0dCgpfWZ1bmN0aW9uICRlKCl7TCgib25maW5pc2giKSxGZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGl0KSx0''@;'; put 'put ''dCgpfWZ1bmN0aW9uIHR0KCl7TCgidW5waXBlIiksSWUudW5waXBlKEZlKX1yZXR1cm4gSWUub24oImRhdGEiLFN0KSxmdW5jdGlvbiB6ZShGZSxSZSxJZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gRmUucHJlcGVuZExpc3RlbmVyKFJlLEllKTtG''@;'; put 'put ''ZS5fZXZlbnRzJiZGZS5fZXZlbnRzW1JlXT9BcnJheS5pc0FycmF5KEZlLl9ldmVudHNbUmVdKT9GZS5fZXZlbnRzW1JlXS51bnNoaWZ0KEllKTpGZS5fZXZlbnRzW1JlXT1bSWUsRmUuX2V2ZW50c1tSZV1dOkZlLm9uKFJlLEllKX0oRmUsImVycm9yIixEdCksRmUub25jZSgiY2xvc2UiLGl0''@;'; put 'put ''KSxGZS5vbmNlKCJmaW5pc2giLCRlKSxGZS5lbWl0KCJwaXBlIixJZSksSGUuZmxvd2luZ3x8KEwoInBpcGUgcmVzdW1lIiksSWUucmVzdW1lKCkpLEZlfSxnLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oRmUpe3ZhciBSZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPXtoYXNVbnBpcGVkOiEx''@;'; put 'put ''fTtpZigwPT09UmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09UmUucGlwZXNDb3VudClyZXR1cm4gRmUmJkZlIT09UmUucGlwZXN8fChGZXx8KEZlPVJlLnBpcGVzKSxSZS5waXBlcz1udWxsLFJlLnBpcGVzQ291bnQ9MCxSZS5mbG93aW5nPSExLEZlJiZGZS5lbWl0KCJ1bnBpcGUi''@;'; put 'put ''LHRoaXMsSWUpKSx0aGlzO2lmKCFGZSl7dmFyIEhlPVJlLnBpcGVzLERlPVJlLnBpcGVzQ291bnQ7UmUucGlwZXM9bnVsbCxSZS5waXBlc0NvdW50PTAsUmUuZmxvd2luZz0hMTtmb3IodmFyIGtlPTA7a2U8RGU7a2UrKylIZVtrZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiEx''@;'; put 'put ''fSk7cmV0dXJuIHRoaXN9dmFyIF90PUFlKFJlLnBpcGVzLEZlKTtyZXR1cm4tMT09PV90fHwoUmUucGlwZXMuc3BsaWNlKF90LDEpLFJlLnBpcGVzQ291bnQtPTEsMT09PVJlLnBpcGVzQ291bnQmJihSZS5waXBlcz1SZS5waXBlc1swXSksRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhp''@;'; put 'put ''c30sZy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Zy5wcm90b3R5cGUub249ZnVuY3Rpb24oRmUsUmUpe3ZhciBJZT13LnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsRmUsUmUpLEhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09RmU/KEhlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMu''@;'; put 'put ''bGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09SGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PUZlJiYhSGUuZW5kRW1pdHRlZCYmIUhlLnJlYWRhYmxlTGlzdGVuaW5nJiYoSGUucmVhZGFibGVMaXN0ZW5pbmc9SGUubmVlZFJlYWRhYmxlPSEwLEhlLmZsb3dp''@;'; put 'put ''bmc9ITEsSGUuZW1pdHRlZFJlYWRhYmxlPSExLEwoIm9uIHJlYWRhYmxlIixIZS5sZW5ndGgsSGUucmVhZGluZyksSGUubGVuZ3RoP20odGhpcyk6SGUucmVhZGluZ3x8RC5uZXh0VGljayhVZSx0aGlzKSksSWV9LGcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEZlLFJlKXt2''@;'; put 'put ''YXIgSWU9dy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLEZlLFJlKTtyZXR1cm4icmVhZGFibGUiPT09RmUmJkQubmV4dFRpY2sod2UsdGhpcyksSWV9LGcucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihGZSl7dmFyIFJlPXcucHJvdG90eXBlLnJlbW92''@;'; put 'put ''ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1GZXx8dm9pZCAwPT09RmUpJiZELm5leHRUaWNrKHdlLHRoaXMpLFJlfSxnLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgRmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gRmUu''@;'; put 'put ''Zmxvd2luZ3x8KEwoInJlc3VtZSIpLEZlLmZsb3dpbmc9IUZlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFFlKEZlLFJlKXtSZS5yZXN1bWVTY2hlZHVsZWR8fChSZS5yZXN1bWVTY2hlZHVsZWQ9ITAsRC5uZXh0VGljayhvdCxGZSxSZSkpfSh0aGlzLEZlKSksRmUucGF1c2VkPSExLHRo''@;'; put 'put ''aXN9LGcucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEwoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEwoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93''@;'; put 'put ''aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sZy5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihGZSl7dmFyIFJlPXRoaXMsSWU9dGhpcy5fcmVhZGFibGVTdGF0ZSxIZT0hMTtmb3IodmFyIERlIGluIEZlLm9uKCJlbmQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7aWYoTCgid3JhcHBlZCBlbmQiKSxJZS5kZWNvZGVyJiYhSWUuZW5kZWQpe3ZhciBfdD1JZS5kZWNvZGVyLmVuZCgpO190JiZfdC5sZW5ndGgmJlJlLnB1c2goX3QpfVJlLnB1c2gobnVsbCl9KSxGZS5vbigiZGF0YSIsZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgZGF0YSIpLEllLmRl''@;'; put 'put ''Y29kZXImJihfdD1JZS5kZWNvZGVyLndyaXRlKF90KSksSWUub2JqZWN0TW9kZSYmbnVsbD09X3R8fCEoSWUub2JqZWN0TW9kZXx8X3QmJl90Lmxlbmd0aCl8fFJlLnB1c2goX3QpfHwoSGU9ITAsRmUucGF1c2UoKSl9KSxGZSl2b2lkIDA9PT10aGlzW0RlXSYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEZlW0RlXSYmKHRoaXNbRGVdPWZ1bmN0aW9uKG50KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRmVbbnRdLmFwcGx5KEZlLGFyZ3VtZW50cyl9fShEZSkpO2Zvcih2YXIga2U9MDtrZTxTZS5sZW5ndGg7a2UrKylGZS5vbihTZVtrZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxTZVtrZV0pKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihfdCl7TCgid3JhcHBlZCBfcmVhZCIsX3QpLEhlJiYoSGU9ITEsRmUucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZy5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWdlJiYoZ2U9Yig1ODUwKSksZ2UodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZy5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZy5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcu''@;'; put 'put ''cHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihSZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1SZSl9''@;'; put 'put ''fSksZy5fZnJvbUxpc3Q9dmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihn''@;'; put 'put ''LmZyb209ZnVuY3Rpb24oRmUsUmUpe3JldHVybiB2b2lkIDA9PT1fZSYmKF9lPWIoNTE2NykpLF9lKGcsRmUsUmUpfSl9LDQ2MDU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1SO3ZhciBEPWIoNDI4MSkucSxfPUQuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQscD1ELkVS''@;'; put 'put ''Ul9NVUxUSVBMRV9DQUxMQkFDSyxOPUQuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUQuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLEY9Yig2NzUzKTtmdW5jdGlvbiBIKEwsWSl7dmFyIEI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7Qi50cmFuc2Zvcm1pbmc9ITE7dmFy''@;'; put 'put ''IFc9Qi53cml0ZWNiO2lmKG51bGw9PT1XKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgcCk7Qi53cml0ZWNodW5rPW51bGwsQi53cml0ZWNiPW51bGwsbnVsbCE9WSYmdGhpcy5wdXNoKFkpLFcoTCk7dmFyIFo9dGhpcy5fcmVhZGFibGVTdGF0ZTtaLnJlYWRpbmc9ITEsKFoubmVlZFJl''@;'; put 'put ''YWRhYmxlfHxaLmxlbmd0aDxaLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFouaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gUihMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoTCk7Ri5jYWxsKHRoaXMsTCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNm''@;'; put 'put ''b3JtOkguYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEwm''@;'; put 'put ''JigiZnVuY3Rpb24iPT10eXBlb2YgTC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09TC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBMLmZsdXNoJiYodGhpcy5fZmx1c2g9TC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsail9ZnVuY3Rpb24gaigpe3ZhciBMPXRoaXM7ImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9QKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihZLEIpe1AoTCxZLEIpfSl9ZnVuY3Rpb24gUChMLFksQil7aWYoWSlyZXR1cm4gTC5lbWl0KCJlcnJvciIsWSk7aWYo''@;'; put 'put ''bnVsbCE9QiYmTC5wdXNoKEIpLEwuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKEwuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgTjtyZXR1cm4gTC5wdXNoKG51bGwpfWIoNTcxNykoUixGKSxSLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEwsWSl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsRi5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsTCxZKX0sUi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihMLFksQil7QihuZXcgXygiX3RyYW5zZm9ybSgpIikpfSxSLnByb3RvdHlwZS5fd3JpdGU9ZnVu''@;'; put 'put ''Y3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKFcud3JpdGVjYj1CLFcud3JpdGVjaHVuaz1MLFcud3JpdGVlbmNvZGluZz1ZLCFXLnRyYW5zZm9ybWluZyl7dmFyIFo9dGhpcy5fcmVhZGFibGVTdGF0ZTsoVy5uZWVkVHJhbnNmb3JtfHxaLm5lZWRSZWFkYWJsZXx8''@;'; put 'put ''Wi5sZW5ndGg8Wi5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChaLmhpZ2hXYXRlck1hcmspfX0sUi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PVkud3JpdGVjaHVua3x8WS50cmFuc2Zvcm1pbmc/WS5uZWVkVHJhbnNmb3Jt''@;'; put 'put ''PSEwOihZLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oWS53cml0ZWNodW5rLFkud3JpdGVlbmNvZGluZyxZLmFmdGVyVHJhbnNmb3JtKSl9LFIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEwsWSl7Ri5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEwsZnVuY3Rpb24o''@;'; put 'put ''Qil7WShCKX0pfX0sNDIyOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTixEPWIoNDE1NSk7ZnVuY3Rpb24gcChNZSl7dmFyIHZlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIG90KE1lLHZlLFhlKXt2YXIg''@;'; put 'put ''QmU9TWUuZW50cnk7Zm9yKE1lLmVudHJ5PW51bGw7QmU7KXt2YXIgQWU9QmUuY2FsbGJhY2s7dmUucGVuZGluZ2NiLS0sQWUoWGUpLEJlPUJlLm5leHR9dmUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9TWV9KHZlLE1lKX19Y2UuZXhwb3J0cz16LHouV3JpdGFibGVTdGF0ZT1TZTt2YXIgemUs''@;'; put 'put ''dz17ZGVwcmVjYXRlOmIoNDkyNyl9LEY9YigyNTAzKSxIPWIoODc2NCkuQnVmZmVyLFI9KHR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxMPWIoMTE5NSksQj1iKDI0NTcp''@;'; put 'put ''LmdldEhpZ2hXYXRlck1hcmssVz1iKDQyODEpLnEsWj1XLkVSUl9JTlZBTElEX0FSR19UWVBFLHE9Vy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxRPVcuRVJSX01VTFRJUExFX0NBTExCQUNLLFg9Vy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHRlPVcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQs''@;'; put 'put ''cmU9Vy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLG9lPVcuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsZ2U9Vy5FUlJfVU5LTk9XTl9FTkNPRElORyxfZT1MLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFRlKCl7fWZ1bmN0aW9uIFNlKE1lLHZlLFhlKXtOPU58fGIoNjc1MyksImJvb2xlYW4i''@;'; put 'put ''IT10eXBlb2YgWGUmJihYZT12ZSBpbnN0YW5jZW9mIE4pLHRoaXMub2JqZWN0TW9kZT0hIShNZT1NZXx8e30pLm9iamVjdE1vZGUsWGUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIU1lLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPUIodGhpcyxN''@;'; put 'put ''ZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixYZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1NZS5kZWNv''@;'; put 'put ''ZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1NZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKEFl''@;'; put 'put ''KXshZnVuY3Rpb24gRShNZSx2ZSl7dmFyIFhlPU1lLl93cml0YWJsZVN0YXRlLEJlPVhlLnN5bmMsQWU9WGUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgQWUpdGhyb3cgbmV3IFE7aWYoZnVuY3Rpb24gVShNZSl7TWUud3JpdGluZz0hMSxNZS53cml0ZWNiPW51bGwsTWUubGVuZ3Ro''@;'; put 'put ''LT1NZS53cml0ZWxlbixNZS53cml0ZWxlbj0wfShYZSksdmUpIWZ1bmN0aW9uIFYoTWUsdmUsWGUsQmUsQWUpey0tdmUucGVuZGluZ2NiLFhlPyhELm5leHRUaWNrKEFlLEJlKSxELm5leHRUaWNrKFVlLE1lLHZlKSxNZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoTWUsQmUp''@;'; put 'put ''KTooQWUoQmUpLE1lLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZShNZSxCZSksVWUoTWUsdmUpKX0oTWUsWGUsQmUsdmUsQWUpO2Vsc2V7dmFyIEZlPW5lKFhlKXx8TWUuZGVzdHJveWVkOyFGZSYmIVhlLmNvcmtlZCYmIVhlLmJ1ZmZlclByb2Nlc3NpbmcmJlhlLmJ1ZmZlcmVk''@;'; put 'put ''UmVxdWVzdCYmYWUoTWUsWGUpLEJlP0QubmV4dFRpY2sobSxNZSxYZSxGZSxBZSk6bShNZSxYZSxGZSxBZSl9fSh2ZSxBZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRo''@;'; put 'put ''aXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PU1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhTWUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVx''@;'; put 'put ''dWVzdHNGcmVlPW5ldyBwKHRoaXMpfWZ1bmN0aW9uIHooTWUpe3ZhciB2ZT10aGlzIGluc3RhbmNlb2YoTj1OfHxiKDY3NTMpKTtpZighdmUmJiF6ZS5jYWxsKHosdGhpcykpcmV0dXJuIG5ldyB6KE1lKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBTZShNZSx0aGlzLHZlKSx0aGlzLndyaXRh''@;'; put 'put ''YmxlPSEwLE1lJiYoImZ1bmN0aW9uIj09dHlwZW9mIE1lLndyaXRlJiYodGhpcy5fd3JpdGU9TWUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBNZS53cml0ZXYmJih0aGlzLl93cml0ZXY9TWUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgTWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9''@;'; put 'put ''TWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIE1lLmZpbmFsJiYodGhpcy5fZmluYWw9TWUuZmluYWwpKSxGLmNhbGwodGhpcyl9ZnVuY3Rpb24gVChNZSx2ZSxYZSxCZSxBZSxGZSxSZSl7dmUud3JpdGVsZW49QmUsdmUud3JpdGVjYj1SZSx2ZS53cml0aW5nPSEwLHZlLnN5bmM9ITAs''@;'; put 'put ''dmUuZGVzdHJveWVkP3ZlLm9ud3JpdGUobmV3IHRlKCJ3cml0ZSIpKTpYZT9NZS5fd3JpdGV2KEFlLHZlLm9ud3JpdGUpOk1lLl93cml0ZShBZSxGZSx2ZS5vbndyaXRlKSx2ZS5zeW5jPSExfWZ1bmN0aW9uIG0oTWUsdmUsWGUsQmUpe1hlfHxmdW5jdGlvbiBBKE1lLHZlKXswPT09dmUubGVu''@;'; put 'put ''Z3RoJiZ2ZS5uZWVkRHJhaW4mJih2ZS5uZWVkRHJhaW49ITEsTWUuZW1pdCgiZHJhaW4iKSl9KE1lLHZlKSx2ZS5wZW5kaW5nY2ItLSxCZSgpLFVlKE1lLHZlKX1mdW5jdGlvbiBhZShNZSx2ZSl7dmUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgWGU9dmUuYnVmZmVyZWRSZXF1ZXN0O2lmKE1l''@;'; put 'put ''Ll93cml0ZXYmJlhlJiZYZS5uZXh0KXt2YXIgQWU9bmV3IEFycmF5KHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxGZT12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RmUuZW50cnk9WGU7Zm9yKHZhciBSZT0wLEllPSEwO1hlOylBZVtSZV09WGUsWGUuaXNCdWZ8fChJZT0hMSksWGU9WGUubmV4dCxS''@;'; put 'put ''ZSs9MTtBZS5hbGxCdWZmZXJzPUllLFQoTWUsdmUsITAsdmUubGVuZ3RoLEFlLCIiLEZlLmZpbmlzaCksdmUucGVuZGluZ2NiKyssdmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLEZlLm5leHQ/KHZlLmNvcmtlZFJlcXVlc3RzRnJlZT1GZS5uZXh0LEZlLm5leHQ9bnVsbCk6dmUuY29ya2Vk''@;'; put 'put ''UmVxdWVzdHNGcmVlPW5ldyBwKHZlKSx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtYZTspe3ZhciBIZT1YZS5jaHVuaztpZihUKE1lLHZlLCExLHZlLm9iamVjdE1vZGU/MTpIZS5sZW5ndGgsSGUsWGUuZW5jb2RpbmcsWGUuY2FsbGJhY2spLFhlPVhlLm5leHQsdmUuYnVm''@;'; put 'put ''ZmVyZWRSZXF1ZXN0Q291bnQtLSx2ZS53cml0aW5nKWJyZWFrfW51bGw9PT1YZSYmKHZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dmUuYnVmZmVyZWRSZXF1ZXN0PVhlLHZlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gbmUoTWUpe3JldHVybiBNZS5lbmRpbmcmJjA9PT1NZS5s''@;'; put 'put ''ZW5ndGgmJm51bGw9PT1NZS5idWZmZXJlZFJlcXVlc3QmJiFNZS5maW5pc2hlZCYmIU1lLndyaXRpbmd9ZnVuY3Rpb24gbGUoTWUsdmUpe01lLl9maW5hbChmdW5jdGlvbihYZSl7dmUucGVuZGluZ2NiLS0sWGUmJl9lKE1lLFhlKSx2ZS5wcmVmaW5pc2hlZD0hMCxNZS5lbWl0KCJwcmVmaW5p''@;'; put 'put ''c2giKSxVZShNZSx2ZSl9KX1mdW5jdGlvbiBVZShNZSx2ZSl7dmFyIFhlPW5lKHZlKTtpZihYZSYmKGZ1bmN0aW9uIHdlKE1lLHZlKXshdmUucHJlZmluaXNoZWQmJiF2ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiBNZS5fZmluYWx8fHZlLmRlc3Ryb3llZD8odmUucHJlZmlu''@;'; put 'put ''aXNoZWQ9ITAsTWUuZW1pdCgicHJlZmluaXNoIikpOih2ZS5wZW5kaW5nY2IrKyx2ZS5maW5hbENhbGxlZD0hMCxELm5leHRUaWNrKGxlLE1lLHZlKSkpfShNZSx2ZSksMD09PXZlLnBlbmRpbmdjYiYmKHZlLmZpbmlzaGVkPSEwLE1lLmVtaXQoImZpbmlzaCIpLHZlLmF1dG9EZXN0cm95KSkp''@;'; put 'put ''e3ZhciBCZT1NZS5fcmVhZGFibGVTdGF0ZTsoIUJlfHxCZS5hdXRvRGVzdHJveSYmQmUuZW5kRW1pdHRlZCkmJk1lLmRlc3Ryb3koKX1yZXR1cm4gWGV9Yig1NzE3KSh6LEYpLFNlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHZlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0''@;'; put 'put ''LFhlPVtdO3ZlOylYZS5wdXNoKHZlKSx2ZT12ZS5uZXh0O3JldHVybiBYZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rp''@;'; put 'put ''b24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHplPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odmUpe3JldHVybiEhemUuY2FsbCh0aGlzLHZlKXx8''@;'; put 'put ''dGhpcz09PXomJnZlJiZ2ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFNlfX0pKTp6ZT1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlIGluc3RhbmNlb2YgdGhpc30sei5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe19lKHRoaXMsbmV3IFgpfSx6LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihN''@;'; put 'put ''ZSx2ZSxYZSl7dmFyIEJlPXRoaXMuX3dyaXRhYmxlU3RhdGUsQWU9ITEsRmU9IUJlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFAoTWUpe3JldHVybiBILmlzQnVmZmVyKE1lKXx8TWUgaW5zdGFuY2VvZiBSfShNZSk7cmV0dXJuIEZlJiYhSC5pc0J1ZmZlcihNZSkmJihNZT1mdW5jdGlvbiBqKE1l''@;'; put 'put ''KXtyZXR1cm4gSC5mcm9tKE1lKX0oTWUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxGZT92ZT0iYnVmZmVyIjp2ZXx8KHZlPUJlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIFhlJiYoWGU9VGUpLEJlLmVuZGluZz9mdW5jdGlvbiBnKE1lLHZl''@;'; put 'put ''KXt2YXIgWGU9bmV3IG9lO19lKE1lLFhlKSxELm5leHRUaWNrKHZlLFhlKX0odGhpcyxYZSk6KEZlfHxmdW5jdGlvbiB5KE1lLHZlLFhlLEJlKXt2YXIgQWU7cmV0dXJuIG51bGw9PT1YZT9BZT1uZXcgcmU6InN0cmluZyIhPXR5cGVvZiBYZSYmIXZlLm9iamVjdE1vZGUmJihBZT1uZXcgWigi''@;'; put 'put ''Y2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sWGUpKSwhQWV8fChfZShNZSxBZSksRC5uZXh0VGljayhCZSxBZSksITEpfSh0aGlzLEJlLE1lLFhlKSkmJihCZS5wZW5kaW5nY2IrKyxBZT1mdW5jdGlvbiBDKE1lLHZlLFhlLEJlLEFlLEZlKXtpZighWGUpe3ZhciBSZT1mdW5jdGlvbiB4KE1l''@;'; put 'put ''LHZlLFhlKXtyZXR1cm4hTWUub2JqZWN0TW9kZSYmITEhPT1NZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9SC5mcm9tKHZlLFhlKSksdmV9KHZlLEJlLEFlKTtCZSE9PVJlJiYoWGU9ITAsQWU9ImJ1ZmZlciIsQmU9UmUpfXZhciBJZT12ZS5vYmplY3RNb2RlPzE6''@;'; put 'put ''QmUubGVuZ3RoO3ZlLmxlbmd0aCs9SWU7dmFyIEhlPXZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrO2lmKEhlfHwodmUubmVlZERyYWluPSEwKSx2ZS53cml0aW5nfHx2ZS5jb3JrZWQpe3ZhciBEZT12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3ZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5r''@;'; put 'put ''OkJlLGVuY29kaW5nOkFlLGlzQnVmOlhlLGNhbGxiYWNrOkZlLG5leHQ6bnVsbH0sRGU/RGUubmV4dD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnZlLmJ1ZmZlcmVkUmVxdWVzdD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgVChNZSx2ZSwh''@;'; put 'put ''MSxJZSxCZSxBZSxGZSk7cmV0dXJuIEhlfSh0aGlzLEJlLEZlLE1lLHZlLFhlKSksQWV9LHoucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSx6LnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgTWU9dGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZTtNZS5jb3JrZWQmJihNZS5jb3JrZWQtLSwhTWUud3JpdGluZyYmIU1lLmNvcmtlZCYmIU1lLmJ1ZmZlclByb2Nlc3NpbmcmJk1lLmJ1ZmZlcmVkUmVxdWVzdCYmYWUodGhpcyxNZSkpfSx6LnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgdmUmJih2ZT12ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh2ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93''@;'; put 'put ''IG5ldyBnZSh2ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXZlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0''@;'; put 'put ''ZXJNYXJrfX0pLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihNZSx2ZSxYZSl7WGUobmV3IHEoIl93cml0ZSgpIikpfSx6LnByb3RvdHlwZS5fd3JpdGV2PW51bGwsei5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKE1lLHZlLFhlKXt2YXIgQmU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgTWU/KFhlPU1lLE1lPW51bGwsdmU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksbnVsbCE9TWUmJnRoaXMud3JpdGUoTWUsdmUpLEJlLmNvcmtlZCYmKEJlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLEJlLmVuZGluZ3x8ZnVu''@;'; put 'put ''Y3Rpb24gUWUoTWUsdmUsWGUpe3ZlLmVuZGluZz0hMCxVZShNZSx2ZSksWGUmJih2ZS5maW5pc2hlZD9ELm5leHRUaWNrKFhlKTpNZS5vbmNlKCJmaW5pc2giLFhlKSksdmUuZW5kZWQ9ITAsTWUud3JpdGFibGU9ITF9KHRoaXMsQmUsWGUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6''@;'; put 'put ''LnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksei5wcm90b3R5cGUuZGVz''@;'; put 'put ''dHJveT1MLmRlc3Ryb3ksei5wcm90b3R5cGUuX3VuZGVzdHJveT1MLnVuZGVzdHJveSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihNZSx2ZSl7dmUoTWUpfX0sNTg1MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxEPWIoNDE1NSk7ZnVuY3Rpb24gcChvZSxnZSxfZSl7cmV0''@;'; put 'put ''dXJuIGdlPWZ1bmN0aW9uIE4ob2Upe3ZhciBnZT1mdW5jdGlvbiB3KG9lLGdlKXtpZigib2JqZWN0IiE9dHlwZW9mIG9lfHxudWxsPT09b2UpcmV0dXJuIG9lO3ZhciBfZT1vZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2UuY2FsbChvZSxnZXx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWdlP1N0cmluZzpOdW1iZXIpKG9lKX0ob2UsInN0cmluZyIpO3JldHVy''@;'; put 'put ''biJzeW1ib2wiPT10eXBlb2YgZ2U/Z2U6U3RyaW5nKGdlKX0oZ2UpLGdlIGluIG9lP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvZSxnZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpvZVtnZV09X2Usb2V9dmFyIEY9Yig4NjEwKSxIPVN5bWJv''@;'; put 'put ''bCgibGFzdFJlc29sdmUiKSxSPVN5bWJvbCgibGFzdFJlamVjdCIpLGo9U3ltYm9sKCJlcnJvciIpLFA9U3ltYm9sKCJlbmRlZCIpLEw9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLFk9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksQj1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFcob2UsZ2Upe3Jl''@;'; put 'put ''dHVybnt2YWx1ZTpvZSxkb25lOmdlfX1mdW5jdGlvbiBaKG9lKXt2YXIgZ2U9b2VbSF07aWYobnVsbCE9PWdlKXt2YXIgX2U9b2VbQl0ucmVhZCgpO251bGwhPT1fZSYmKG9lW0xdPW51bGwsb2VbSF09bnVsbCxvZVtSXT1udWxsLGdlKFcoX2UsITEpKSl9fWZ1bmN0aW9uIHEob2Upe0QubmV4''@;'; put 'put ''dFRpY2soWixvZSl9dmFyIFg9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksdGU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChwKF89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tCXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLF9lPXRoaXNbal07aWYobnVsbCE9PV9l''@;'; put 'put ''KXJldHVybiBQcm9taXNlLnJlamVjdChfZSk7aWYodGhpc1tQXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcodm9pZCAwLCEwKSk7aWYodGhpc1tCXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHosZyl7RC5uZXh0VGljayhmdW5jdGlvbigpe2dlW2pdP2coZ2Vbal0p''@;'; put 'put ''OnooVyh2b2lkIDAsITApKX0pfSk7dmFyIFNlLFRlPXRoaXNbTF07aWYoVGUpU2U9bmV3IFByb21pc2UoZnVuY3Rpb24gUShvZSxnZSl7cmV0dXJuIGZ1bmN0aW9uKF9lLFRlKXtvZS50aGVuKGZ1bmN0aW9uKCl7Z2VbUF0/X2UoVyh2b2lkIDAsITApKTpnZVtZXShfZSxUZSl9LFRlKX19KFRl''@;'; put 'put ''LHRoaXMpKTtlbHNle3ZhciB6ZT10aGlzW0JdLnJlYWQoKTtpZihudWxsIT09emUpcmV0dXJuIFByb21pc2UucmVzb2x2ZShXKHplLCExKSk7U2U9bmV3IFByb21pc2UodGhpc1tZXSl9cmV0dXJuIHRoaXNbTF09U2UsU2V9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzfSkscChfLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGdlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9lLFRlKXtnZVtCXS5kZXN0cm95KG51bGwsZnVuY3Rpb24oU2Upe1NlP1RlKFNlKTpfZShXKHZvaWQgMCwhMCkpfSl9KX0pLF8pLFgpO2NlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oZ2Upe3ZhciBfZSxUZT1PYmplY3QuY3JlYXRlKHRlLChwKF9lPXt9LEIse3ZhbHVlOmdlLHdyaXRhYmxlOiEwfSkscChfZSxILHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSkscChfZSxSLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSkscChfZSxqLHt2YWx1ZTpudWxsLHdyaXRhYmxl''@;'; put 'put ''OiEwfSkscChfZSxQLHt2YWx1ZTpnZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSkscChfZSxZLHt2YWx1ZTpmdW5jdGlvbih6ZSx6KXt2YXIgZz1UZVtCXS5yZWFkKCk7Zz8oVGVbTF09bnVsbCxUZVtIXT1udWxsLFRlW1JdPW51bGwsemUoVyhnLCExKSkpOihUZVtI''@;'; put 'put ''XT16ZSxUZVtSXT16KX0sd3JpdGFibGU6ITB9KSxfZSkpO3JldHVybiBUZVtMXT1udWxsLEYoZ2UsZnVuY3Rpb24oU2Upe2lmKFNlJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09U2UuY29kZSl7dmFyIHplPVRlW1JdO3JldHVybiBudWxsIT09emUmJihUZVtMXT1udWxsLFRlW0hd''@;'; put 'put ''PW51bGwsVGVbUl09bnVsbCx6ZShTZSkpLHZvaWQoVGVbal09U2UpfXZhciB6PVRlW0hdO251bGwhPT16JiYoVGVbTF09bnVsbCxUZVtIXT1udWxsLFRlW1JdPW51bGwseihXKHZvaWQgMCwhMCkpKSxUZVtQXT0hMH0pLGdlLm9uKCJyZWFkYWJsZSIscS5iaW5kKG51bGwsVGUpKSxUZX19LDcz''@;'; put 'put ''Mjc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRChaLHEpe3ZhciBRPU9iamVjdC5rZXlzKFopO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBYPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWik7cSYmKFg9WC5maWx0ZXIoZnVuY3Rpb24odGUpe3Jl''@;'; put 'put ''dHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFosdGUpLmVudW1lcmFibGV9KSksUS5wdXNoLmFwcGx5KFEsWCl9cmV0dXJuIFF9ZnVuY3Rpb24gXyhaKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgUT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1l''@;'; put 'put ''bnRzW3FdOnt9O3ElMj9EKE9iamVjdChRKSwhMCkuZm9yRWFjaChmdW5jdGlvbihYKXtwKFosWCxRW1hdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFosT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoUSkpOkQoT2Jq''@;'; put 'put ''ZWN0KFEpKS5mb3JFYWNoKGZ1bmN0aW9uKFgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLFgsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihRLFgpKX0pfXJldHVybiBafWZ1bmN0aW9uIHAoWixxLFEpe3JldHVybihxPUgocSkpaW4gWj9PYmplY3QuZGVmaW5lUHJvcGVydHkoWixx''@;'; put 'put ''LHt2YWx1ZTpRLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WltxXT1RLFp9ZnVuY3Rpb24gdyhaLHEpe2Zvcih2YXIgUT0wO1E8cS5sZW5ndGg7USsrKXt2YXIgWD1xW1FdO1guZW51bWVyYWJsZT1YLmVudW1lcmFibGV8fCExLFguY29uZmlndXJhYmxlPSEw''@;'; put 'put ''LCJ2YWx1ZSJpbiBYJiYoWC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFosSChYLmtleSksWCl9fWZ1bmN0aW9uIEgoWil7dmFyIHE9ZnVuY3Rpb24gUihaLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgWnx8bnVsbD09PVopcmV0dXJuIFo7dmFyIFE9WltTeW1ib2wudG9Qcmlt''@;'; put 'put ''aXRpdmVdO2lmKHZvaWQgMCE9PVEpe3ZhciBYPVEuY2FsbChaLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBYKXJldHVybiBYO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmci''@;'; put 'put ''PT09cT9TdHJpbmc6TnVtYmVyKShaKX0oWiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBQPWIoODc2NCkuQnVmZmVyLFk9YigyMzYxKS5pbnNwZWN0LEI9WSYmWS5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBXKFoscSxRKXtQLnByb3RvdHlw''@;'; put 'put ''ZS5jb3B5LmNhbGwoWixxLFEpfWNlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBaKCl7KGZ1bmN0aW9uIE4oWixxKXtpZighKFogaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWiksdGhpcy5o''@;'; put 'put ''ZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gRihaLHEsUSl7cSYmdyhaLnByb3RvdHlwZSxxKSxRJiZ3KFosUSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFosInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFosW3trZXk6InB1c2giLHZhbHVl''@;'; put 'put ''OmZ1bmN0aW9uKFEpe3ZhciBYPXtkYXRhOlEsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PVg6dGhpcy5oZWFkPVgsdGhpcy50YWlsPVgsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKFEpe3ZhciBYPXtkYXRhOlEsbmV4dDp0aGlz''@;'; put 'put ''LmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1YKSx0aGlzLmhlYWQ9WCwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgUT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxl''@;'; put 'put ''bmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLFF9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihRKXtpZigwPT09dGhp''@;'; put 'put ''cy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBYPXRoaXMuaGVhZCx0ZT0iIitYLmRhdGE7WD1YLm5leHQ7KXRlKz1RK1guZGF0YTtyZXR1cm4gdGV9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKFEpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gUC5hbGxvYygwKTtmb3IodmFyIFg9''@;'; put 'put ''UC5hbGxvY1Vuc2FmZShRPj4+MCksdGU9dGhpcy5oZWFkLHJlPTA7dGU7KVcodGUuZGF0YSxYLHJlKSxyZSs9dGUuZGF0YS5sZW5ndGgsdGU9dGUubmV4dDtyZXR1cm4gWH19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKFEsWCl7dmFyIHRlO3JldHVybiBRPHRoaXMuaGVhZC5kYXRh''@;'; put 'put ''Lmxlbmd0aD8odGU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxRKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShRKSk6dGU9UT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6WD90aGlzLl9nZXRTdHJpbmcoUSk6dGhpcy5fZ2V0QnVmZmVyKFEpLHRlfX0s''@;'; put 'put ''e2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oUSl7dmFyIFg9dGhpcy5oZWFkLHRlPTEscmU9WC5kYXRhO2ZvcihRLT1yZS5sZW5ndGg7WD1YLm5leHQ7KXt2YXIgb2U9WC5kYXRhLGdl''@;'; put 'put ''PVE+b2UubGVuZ3RoP29lLmxlbmd0aDpRO2lmKHJlKz1nZT09PW9lLmxlbmd0aD9vZTpvZS5zbGljZSgwLFEpLDA9PShRLT1nZSkpe2dlPT09b2UubGVuZ3RoPygrK3RlLHRoaXMuaGVhZD1YLm5leHQ/WC5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPVgsWC5kYXRhPW9lLnNsaWNl''@;'; put 'put ''KGdlKSk7YnJlYWt9Kyt0ZX1yZXR1cm4gdGhpcy5sZW5ndGgtPXRlLHJlfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oUSl7dmFyIFg9UC5hbGxvY1Vuc2FmZShRKSx0ZT10aGlzLmhlYWQscmU9MTtmb3IodGUuZGF0YS5jb3B5KFgpLFEtPXRlLmRhdGEubGVuZ3RoO3RlPXRl''@;'; put 'put ''Lm5leHQ7KXt2YXIgb2U9dGUuZGF0YSxnZT1RPm9lLmxlbmd0aD9vZS5sZW5ndGg6UTtpZihvZS5jb3B5KFgsWC5sZW5ndGgtUSwwLGdlKSwwPT0oUS09Z2UpKXtnZT09PW9lLmxlbmd0aD8oKytyZSx0aGlzLmhlYWQ9dGUubmV4dD90ZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFk''@;'; put 'put ''PXRlLHRlLmRhdGE9b2Uuc2xpY2UoZ2UpKTticmVha30rK3JlfXJldHVybiB0aGlzLmxlbmd0aC09cmUsWH19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbihRLFgpe3JldHVybiBZKHRoaXMsXyhfKHt9LFgpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFp9KCl9LDExOTU6KGNl''@;'; put 'put ''LEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KTtmdW5jdGlvbiBwKFIsail7RihSLGopLE4oUil9ZnVuY3Rpb24gTihSKXtSLl93cml0YWJsZVN0YXRlJiYhUi5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fFIuX3JlYWRhYmxlU3RhdGUmJiFSLl9yZWFkYWJsZVN0YXRlLmVtaXRD''@;'; put 'put ''bG9zZXx8Ui5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIEYoUixqKXtSLmVtaXQoImVycm9yIixqKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8oUixqKXt2YXIgUD10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KGo/aihSKTpSJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQubmV4dFRpY2soRix0''@;'; put 'put ''aGlzLFIpKTpELm5leHRUaWNrKEYsdGhpcyxSKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KFJ8''@;'; put 'put ''fG51bGwsZnVuY3Rpb24oQil7IWomJkI/UC5fd3JpdGFibGVTdGF0ZT9QLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9ELm5leHRUaWNrKE4sUCk6KFAuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQubmV4dFRpY2socCxQLEIpKTpELm5leHRUaWNrKHAsUCxCKTpqPyhELm5l''@;'; put 'put ''eHRUaWNrKE4sUCksaihCKSk6RC5uZXh0VGljayhOLFApfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEs''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBI''@;'; put 'put ''KFIsail7dmFyIFA9Ui5fcmVhZGFibGVTdGF0ZSxMPVIuX3dyaXRhYmxlU3RhdGU7UCYmUC5hdXRvRGVzdHJveXx8TCYmTC5hdXRvRGVzdHJveT9SLmRlc3Ryb3koaik6Ui5lbWl0KCJlcnJvciIsail9fX0sODYxMDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQyODEpLnEuRVJS''@;'; put 'put ''X1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcCgpe31jZS5leHBvcnRzPWZ1bmN0aW9uIHcoRixILFIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBIKXJldHVybiB3KEYsbnVsbCxIKTtIfHwoSD17fSksUj1mdW5jdGlvbiBfKEYpe3ZhciBIPSExO3JldHVybiBmdW5jdGlvbigpe2lm''@;'; put 'put ''KCFIKXtIPSEwO2Zvcih2YXIgUj1hcmd1bWVudHMubGVuZ3RoLGo9bmV3IEFycmF5KFIpLFA9MDtQPFI7UCsrKWpbUF09YXJndW1lbnRzW1BdO0YuYXBwbHkodGhpcyxqKX19fShSfHxwKTt2YXIgaj1ILnJlYWRhYmxlfHwhMSE9PUgucmVhZGFibGUmJkYucmVhZGFibGUsUD1ILndyaXRhYmxl''@;'; put 'put ''fHwhMSE9PUgud3JpdGFibGUmJkYud3JpdGFibGUsTD1mdW5jdGlvbigpe0Yud3JpdGFibGV8fEIoKX0sWT1GLl93cml0YWJsZVN0YXRlJiZGLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLEI9ZnVuY3Rpb24oKXtQPSExLFk9ITAsanx8Ui5jYWxsKEYpfSxXPUYuX3JlYWRhYmxlU3RhdGUmJkYu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxaPWZ1bmN0aW9uKCl7aj0hMSxXPSEwLFB8fFIuY2FsbChGKX0scT1mdW5jdGlvbihyZSl7Ui5jYWxsKEYscmUpfSxRPWZ1bmN0aW9uKCl7dmFyIHJlO3JldHVybiBqJiYhVz8oKCFGLl9yZWFkYWJsZVN0YXRlfHwhRi5fcmVhZGFibGVTdGF0ZS5l''@;'; put 'put ''bmRlZCkmJihyZT1uZXcgRCksUi5jYWxsKEYscmUpKTpQJiYhWT8oKCFGLl93cml0YWJsZVN0YXRlfHwhRi5fd3JpdGFibGVTdGF0ZS5lbmRlZCkmJihyZT1uZXcgRCksUi5jYWxsKEYscmUpKTp2b2lkIDB9LFg9ZnVuY3Rpb24oKXtGLnJlcS5vbigiZmluaXNoIixCKX07cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIE4oRil7cmV0dXJuIEYuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgRi5hYm9ydH0oRik/KEYub24oImNvbXBsZXRlIixCKSxGLm9uKCJhYm9ydCIsUSksRi5yZXE/WCgpOkYub24oInJlcXVlc3QiLFgpKTpQJiYhRi5fd3JpdGFibGVTdGF0ZSYmKEYub24oImVuZCIsTCksRi5v''@;'; put 'put ''bigiY2xvc2UiLEwpKSxGLm9uKCJlbmQiLFopLEYub24oImZpbmlzaCIsQiksITEhPT1ILmVycm9yJiZGLm9uKCJlcnJvciIscSksRi5vbigiY2xvc2UiLFEpLGZ1bmN0aW9uKCl7Ri5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLEIpLEYucmVtb3ZlTGlzdGVuZXIoImFib3J0IixRKSxGLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixYKSxGLnJlcSYmRi5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsQiksRi5yZW1vdmVMaXN0ZW5lcigiZW5kIixMKSxGLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksRi5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixCKSxGLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlbmQiLFopLEYucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxKSxGLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsUSl9fX0sNTE2NzpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIp''@;'; put 'put ''fX0sOTk0NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRCxwPWIoNDI4MSkucSxOPXAuRVJSX01JU1NJTkdfQVJHUyx3PXAuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gRihCKXtpZihCKXRocm93IEJ9ZnVuY3Rpb24gaihCKXtCKCl9ZnVuY3Rpb24gUChCLFcpe3JldHVybiBC''@;'; put 'put ''LnBpcGUoVyl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBZKCl7Zm9yKHZhciBCPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoQiksWj0wO1o8QjtaKyspV1taXT1hcmd1bWVudHNbWl07dmFyIHE9ZnVuY3Rpb24gTChCKXtyZXR1cm4gQi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBCW0Iu''@;'; put 'put ''bGVuZ3RoLTFdP0IucG9wKCk6Rn0oVyk7aWYoQXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSksVy5sZW5ndGg8Mil0aHJvdyBuZXcgTigic3RyZWFtcyIpO3ZhciBRLFg9Vy5tYXAoZnVuY3Rpb24odGUscmUpe3ZhciBvZT1yZTxXLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBSKEIsVyxa''@;'; put 'put ''LHEpe3E9ZnVuY3Rpb24gXyhCKXt2YXIgVz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtXfHwoVz0hMCxCLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KHEpO3ZhciBRPSExO0Iub24oImNsb3NlIixmdW5jdGlvbigpe1E9ITB9KSx2b2lkIDA9PT1EJiYoRD1iKDg2MTApKSxEKEIse3JlYWRhYmxl''@;'; put 'put ''Olcsd3JpdGFibGU6Wn0sZnVuY3Rpb24odGUpe2lmKHRlKXJldHVybiBxKHRlKTtRPSEwLHEoKX0pO3ZhciBYPSExO3JldHVybiBmdW5jdGlvbih0ZSl7aWYoIVEmJiFYKXtpZihYPSEwLGZ1bmN0aW9uIEgoQil7cmV0dXJuIEIuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5hYm9y''@;'; put 'put ''dH0oQikpcmV0dXJuIEIuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95KXJldHVybiBCLmRlc3Ryb3koKTtxKHRlfHxuZXcgdygicGlwZSIpKX19fSh0ZSxvZSxyZT4wLGZ1bmN0aW9uKF9lKXtRfHwoUT1fZSksX2UmJlguZm9yRWFjaChqKSwhb2UmJihYLmZvckVhY2go''@;'; put 'put ''aikscShRKSl9KX0pO3JldHVybiBXLnJlZHVjZShQKX19LDI0NTc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MjgxKS5xLkVSUl9JTlZBTElEX09QVF9WQUxVRTtjZS5leHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIHAoTix3LEYsSCl7dmFyIFI9ZnVuY3Rpb24g''@;'; put 'put ''XyhOLHcsRil7cmV0dXJuIG51bGwhPU4uaGlnaFdhdGVyTWFyaz9OLmhpZ2hXYXRlck1hcms6dz9OW0ZdOm51bGx9KHcsSCxGKTtpZihudWxsIT1SKXtpZighaXNGaW5pdGUoUil8fE1hdGguZmxvb3IoUikhPT1SfHxSPDApdGhyb3cgbmV3IEQoSD9GOiJoaWdoV2F0ZXJNYXJrIixSKTtyZXR1''@;'; put 'put ''cm4gTWF0aC5mbG9vcihSKX1yZXR1cm4gTi5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDI1MDM6KGNlLEosYik9PntjZS5leHBvcnRzPWIoNzE4NykuRXZlbnRFbWl0dGVyfSw3NDE4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oYixEKXtpZihEPUQuc3BsaXQoIjoiKVsw''@;'; put 'put ''XSwhKGI9K2IpKXJldHVybiExO3N3aXRjaChEKXtjYXNlImh0dHAiOmNhc2Uid3MiOnJldHVybiA4MCE9PWI7Y2FzZSJodHRwcyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMhPT1iO2Nhc2UiZnRwIjpyZXR1cm4gMjEhPT1iO2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT1iO2Nhc2UiZmlsZSI6cmV0''@;'; put 'put ''dXJuITF9cmV0dXJuIDAhPT1ifX0sOTc4NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg3NjQpLkJ1ZmZlcixfPWIoNTcxNykscD1iKDMzNDkpLE49bmV3IEFycmF5KDE2KSx3PVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUs''@;'; put 'put ''MywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEY9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUs''@;'; put 'put ''OCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0s''@;'; put 'put ''SD1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDks''@;'; put 'put ''MTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sUj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUs''@;'; put 'put ''NSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0saj1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxQPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwy''@;'; put 'put ''MDUzOTk0MjE3LDBdO2Z1bmN0aW9uIEwoKXtwLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIFkoWCx0ZSl7cmV0dXJuIFg8PHRl''@;'; put 'put ''fFg+Pj4zMi10ZX1mdW5jdGlvbiBCKFgsdGUscmUsb2UsZ2UsX2UsVGUsU2Upe3JldHVybiBZKFgrKHRlXnJlXm9lKStfZStUZXwwLFNlKStnZXwwfWZ1bmN0aW9uIFcoWCx0ZSxyZSxvZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkoWCsodGUmcmV8fnRlJm9lKStfZStUZXwwLFNlKStnZXwwfWZ1''@;'; put 'put ''bmN0aW9uIFooWCx0ZSxyZSxvZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkoWCsoKHRlfH5yZSleb2UpK19lK1RlfDAsU2UpK2dlfDB9ZnVuY3Rpb24gcShYLHRlLHJlLG9lLGdlLF9lLFRlLFNlKXtyZXR1cm4gWShYKyh0ZSZvZXxyZSZ+b2UpK19lK1RlfDAsU2UpK2dlfDB9ZnVuY3Rpb24gUShY''@;'; put 'put ''LHRlLHJlLG9lLGdlLF9lLFRlLFNlKXtyZXR1cm4gWShYKyh0ZV4ocmV8fm9lKSkrX2UrVGV8MCxTZSkrZ2V8MH1fKEwscCksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgWD1OLHRlPTA7dGU8MTY7Kyt0ZSlYW3RlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnRl''@;'; put 'put ''KTtmb3IodmFyIHJlPTB8dGhpcy5fYSxvZT0wfHRoaXMuX2IsZ2U9MHx0aGlzLl9jLF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0aGlzLl9hLHplPTB8dGhpcy5fYix6PTB8dGhpcy5fYyxnPTB8dGhpcy5fZCx5PTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/''@;'; put 'put ''KEM9QihyZSxvZSxnZSxfZSxUZSxYW3dbeF1dLGpbMF0sSFt4XSksVD1RKFNlLHplLHosZyx5LFhbRlt4XV0sUFswXSxSW3hdKSk6eDwzMj8oQz1XKHJlLG9lLGdlLF9lLFRlLFhbd1t4XV0salsxXSxIW3hdKSxUPXEoU2UsemUseixnLHksWFtGW3hdXSxQWzFdLFJbeF0pKTp4PDQ4PyhDPVoo''@;'; put 'put ''cmUsb2UsZ2UsX2UsVGUsWFt3W3hdXSxqWzJdLEhbeF0pLFQ9WihTZSx6ZSx6LGcseSxYW0ZbeF1dLFBbMl0sUlt4XSkpOng8NjQ/KEM9cShyZSxvZSxnZSxfZSxUZSxYW3dbeF1dLGpbM10sSFt4XSksVD1XKFNlLHplLHosZyx5LFhbRlt4XV0sUFszXSxSW3hdKSk6KEM9UShyZSxvZSxnZSxf''@;'; put 'put ''ZSxUZSxYW3dbeF1dLGpbNF0sSFt4XSksVD1CKFNlLHplLHosZyx5LFhbRlt4XV0sUFs0XSxSW3hdKSkscmU9VGUsVGU9X2UsX2U9WShnZSwxMCksZ2U9b2Usb2U9QyxTZT15LHk9ZyxnPVkoeiwxMCksej16ZSx6ZT1UfXZhciBWPXRoaXMuX2IrZ2UrZ3wwO3RoaXMuX2I9dGhpcy5fYytfZSt5''@;'; put 'put ''fDAsdGhpcy5fYz10aGlzLl9kK1RlK1NlfDAsdGhpcy5fZD10aGlzLl9lK3JlK3plfDAsdGhpcy5fZT10aGlzLl9hK29lK3p8MCx0aGlzLl9hPVZ9LEwucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tP''@;'; put 'put ''ZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5n''@;'; put 'put ''dGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgWD1ELmFsbG9jP0QuYWxsb2MoMjApOm5ldyBEKDIwKTtyZXR1cm4gWC53cml0ZUludDMyTEUodGhpcy5fYSwwKSxYLndyaXRlSW50MzJMRSh0aGlzLl9iLDQp''@;'; put 'put ''LFgud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksWC53cml0ZUludDMyTEUodGhpcy5fZCwxMiksWC53cml0ZUludDMyTEUodGhpcy5fZSwxNiksWH0sY2UuZXhwb3J0cz1MfSw5NTA5OihjZSxKLGIpPT57dmFyIEQ9Yig4NzY0KSxfPUQuQnVmZmVyO2Z1bmN0aW9uIHAodyxGKXtmb3IodmFyIEgg''@;'; put 'put ''aW4gdylGW0hdPXdbSF19ZnVuY3Rpb24gTih3LEYsSCl7cmV0dXJuIF8odyxGLEgpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2UuZXhwb3J0cz1EOihwKEQsSiksSi5CdWZmZXI9TiksTi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfLnByb3Rv''@;'; put 'put ''dHlwZSkscChfLE4pLE4uZnJvbT1mdW5jdGlvbih3LEYsSCl7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxGLEgpfSxOLmFsbG9jPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PUY/InN0cmluZyI9PXR5cGVvZiBIP1IuZmlsbChGLEgpOlIuZmlsbChGKTpSLmZpbGwoMCksUn0sTi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3''@;'; put 'put ''KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxOLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBELlNsb3dCdWZmZXIodyl9fSw5MjQ2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzM3OSksXz1iKDg0MjApLHA9RCgiUmVnRXhwLnByb3RvdHlwZS5leGVjIiksTj1iKDQ0NTMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRil7aWYo''@;'; put 'put ''IV8oRikpdGhyb3cgbmV3IE4oImByZWdleGAgbXVzdCBiZSBhIFJlZ0V4cCIpO3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gbnVsbCE9PXAoRixSKX19fSw3NzcxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjEwKSxfPWIoMjI5NikscD1iKDEwNDQpKCksTj1iKDcyOTYpLHc9''@;'; put 'put ''Yig0NDUzKSxGPUQoIiVNYXRoLmZsb29yJSIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUixqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUil0aHJvdyBuZXcgdygiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10eXBlb2Yganx8ajwwfHxqPjQyOTQ5NjcyOTV8fEYoaikhPT1q''@;'; put 'put ''KXRocm93IG5ldyB3KCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIiKTt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjImJiEhYXJndW1lbnRzWzJdLEw9ITAsWT0hMDtpZigibGVuZ3RoImluIFImJk4pe3ZhciBCPU4oUiwibGVuZ3RoIik7QiYmIUIuY29uZmlndXJh''@;'; put 'put ''YmxlJiYoTD0hMSksQiYmIUIud3JpdGFibGUmJihZPSExKX1yZXR1cm4oTHx8WXx8IVApJiYocD9fKFIsImxlbmd0aCIsaiwhMCwhMCk6XyhSLCJsZW5ndGgiLGopKSxSfX0sNDE4OTooY2UsSixiKT0+e3ZhciBEPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIF8ocCxOKXt0aGlzLl9ibG9jaz1E''@;'; put 'put ''LmFsbG9jKHApLHRoaXMuX2ZpbmFsU2l6ZT1OLHRoaXMuX2Jsb2NrU2l6ZT1wLHRoaXMuX2xlbj0wfV8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihwLE4peyJzdHJpbmciPT10eXBlb2YgcCYmKHA9RC5mcm9tKHAsTj1OfHwidXRmOCIpKTtmb3IodmFyIHc9dGhpcy5fYmxvY2ssRj10aGlz''@;'; put 'put ''Ll9ibG9ja1NpemUsSD1wLmxlbmd0aCxSPXRoaXMuX2xlbixqPTA7ajxIOyl7Zm9yKHZhciBQPVIlRixMPU1hdGgubWluKEgtaixGLVApLFk9MDtZPEw7WSsrKXdbUCtZXT1wW2orWV07ais9TCwoUis9TCklRj09MCYmdGhpcy5fdXBkYXRlKHcpfXJldHVybiB0aGlzLl9sZW4rPUgsdGhpc30s''@;'; put 'put ''Xy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHApe3ZhciBOPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbTl09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxOKzEpLE4+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2su''@;'; put 'put ''ZmlsbCgwKSk7dmFyIHc9OCp0aGlzLl9sZW47aWYodzw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKHcsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIEY9KDQyOTQ5NjcyOTUmdyk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKHctRikvNDI5NDk2NzI5Nix0''@;'; put 'put ''aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShGLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBSPXRoaXMuX2hhc2goKTtyZXR1cm4gcD9SLnRvU3RyaW5nKHApOlJ9LF8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''KXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxjZS5leHBvcnRzPV99LDkwNzI6KGNlLEosYik9Pnt2YXIgRD1jZS5leHBvcnRzPWZ1bmN0aW9uKHApe3A9cC50b0xvd2VyQ2FzZSgpO3ZhciBOPURbcF07aWYoIU4pdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKHArIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IE59O0Quc2hhPWIoNDQ0OCksRC5zaGExPWIoODMzNiksRC5zaGEyMjQ9Yig4NDMyKSxELnNoYTI1Nj1iKDc0OTkpLEQuc2hhMzg0PWIoMTY4NiksRC5zaGE1MTI9Yig3ODE2''@;'; put 'put ''KX0sNDQ0ODooY2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDQxODkpLHA9Yig5NTA5KS5CdWZmZXIsTj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBGKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2Fs''@;'; put 'put ''bCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBIKFApe3JldHVybiBQPDw1fFA+Pj4yN31mdW5jdGlvbiBSKFApe3JldHVybiBQPDwzMHxQPj4+Mn1mdW5jdGlvbiBqKFAsTCxZLEIpe3JldHVybiAwPT09UD9MJll8fkwmQjoyPT09UD9MJll8TCZCfFkmQjpMXlleQn1EKEYsXyksRi5wcm90b3R5cGUu''@;'; put 'put ''aW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXtmb3IodmFyIEw9''@;'; put 'put ''dGhpcy5fdyxZPTB8dGhpcy5fYSxCPTB8dGhpcy5fYixXPTB8dGhpcy5fYyxaPTB8dGhpcy5fZCxxPTB8dGhpcy5fZSxRPTA7UTwxNjsrK1EpTFtRXT1QLnJlYWRJbnQzMkJFKDQqUSk7Zm9yKDtRPDgwOysrUSlMW1FdPUxbUS0zXV5MW1EtOF1eTFtRLTE0XV5MW1EtMTZdO2Zvcih2YXIgWD0w''@;'; put 'put ''O1g8ODA7KytYKXt2YXIgdGU9fn4oWC8yMCkscmU9SChZKStqKHRlLEIsVyxaKStxK0xbWF0rTlt0ZV18MDtxPVosWj1XLFc9UihCKSxCPVksWT1yZX10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9Qit0aGlzLl9ifDAsdGhpcy5fYz1XK3RoaXMuX2N8MCx0aGlzLl9kPVordGhpcy5fZHww''@;'; put 'put ''LHRoaXMuX2U9cSt0aGlzLl9lfDB9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFA9cC5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFAud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxQLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksUC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgp''@;'; put 'put ''LFAud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksUC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxQfSxjZS5leHBvcnRzPUZ9LDgzMzY6KGNlLEosYik9Pnt2YXIgRD1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUwOSkuQnVmZmVyLE49WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAw''@;'; put 'put ''NzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gSChMKXtyZXR1cm4gTDw8MXxMPj4+MzF9ZnVuY3Rpb24gUihMKXtyZXR1cm4gTDw8NXxMPj4+Mjd9ZnVuY3Rpb24gaihM''@;'; put 'put ''KXtyZXR1cm4gTDw8MzB8TD4+PjJ9ZnVuY3Rpb24gUChMLFksQixXKXtyZXR1cm4gMD09PUw/WSZCfH5ZJlc6Mj09PUw/WSZCfFkmV3xCJlc6WV5CXld9RChGLF8pLEYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQx''@;'; put 'put ''Nyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBZPXRoaXMuX3csQj0wfHRoaXMuX2EsVz0wfHRoaXMuX2IsWj0wfHRoaXMuX2MscT0wfHRoaXMuX2QsUT0w''@;'; put 'put ''fHRoaXMuX2UsWD0wO1g8MTY7KytYKVlbWF09TC5yZWFkSW50MzJCRSg0KlgpO2Zvcig7WDw4MDsrK1gpWVtYXT1IKFlbWC0zXV5ZW1gtOF1eWVtYLTE0XV5ZW1gtMTZdKTtmb3IodmFyIHRlPTA7dGU8ODA7Kyt0ZSl7dmFyIHJlPX5+KHRlLzIwKSxvZT1SKEIpK1AocmUsVyxaLHEpK1ErWVt0''@;'; put 'put ''ZV0rTltyZV18MDtRPXEscT1aLFo9aihXKSxXPUIsQj1vZX10aGlzLl9hPUIrdGhpcy5fYXwwLHRoaXMuX2I9Vyt0aGlzLl9ifDAsdGhpcy5fYz1aK3RoaXMuX2N8MCx0aGlzLl9kPXErdGhpcy5fZHwwLHRoaXMuX2U9USt0aGlzLl9lfDB9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIEw9cC5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTC53cml0ZUludDMyQkUoMHx0aGlz''@;'; put 'put ''Ll9lLDE2KSxMfSxjZS5leHBvcnRzPUZ9LDg0MzI6KGNlLEosYik9Pnt2YXIgRD1iKDU3MTcpLF89Yig3NDk5KSxwPWIoNDE4OSksTj1iKDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxwLmNhbGwodGhpcyw2NCw1Nil9RChG''@;'; put 'put ''LF8pLEYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3''@;'; put 'put ''NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sRi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1OLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gSC53cml0ZUludDMyQkUodGhpcy5fYSwwKSxILndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2Ms''@;'; put 'put ''OCksSC53cml0ZUludDMyQkUodGhpcy5fZCwxMiksSC53cml0ZUludDMyQkUodGhpcy5fZSwxNiksSC53cml0ZUludDMyQkUodGhpcy5fZiwyMCksSC53cml0ZUludDMyQkUodGhpcy5fZywyNCksSH0sY2UuZXhwb3J0cz1GfSw3NDk5OihjZSxKLGIpPT57dmFyIEQ9Yig1NzE3KSxfPWIoNDE4''@;'; put 'put ''OSkscD1iKDk1MDkpLkJ1ZmZlcixOPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIx''@;'; put 'put ''NjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1''@;'; put 'put ''NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3''@;'; put 'put ''MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYx''@;'; put 'put ''ODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBGKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBIKEIsVyxaKXtyZXR1cm4gWl5CJihXXlopfWZ1bmN0aW9u''@;'; put 'put ''IFIoQixXLFope3JldHVybiBCJld8WiYoQnxXKX1mdW5jdGlvbiBqKEIpe3JldHVybihCPj4+MnxCPDwzMCleKEI+Pj4xM3xCPDwxOSleKEI+Pj4yMnxCPDwxMCl9ZnVuY3Rpb24gUChCKXtyZXR1cm4oQj4+PjZ8Qjw8MjYpXihCPj4+MTF8Qjw8MjEpXihCPj4+MjV8Qjw8Nyl9ZnVuY3Rpb24g''@;'; put 'put ''TChCKXtyZXR1cm4oQj4+Pjd8Qjw8MjUpXihCPj4+MTh8Qjw8MTQpXkI+Pj4zfWZ1bmN0aW9uIFkoQil7cmV0dXJuKEI+Pj4xN3xCPDwxNSleKEI+Pj4xOXxCPDwxMyleQj4+PjEwfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0''@;'; put 'put ''aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KEIpe2Zvcih2YXIgVz10aGlzLl93LFo9MHx0aGlzLl9hLHE9MHx0aGlzLl9iLFE9MHx0aGlzLl9jLFg9MHx0aGlzLl9kLHRlPTB8dGhpcy5fZSxyZT0wfHRoaXMuX2Ysb2U9MHx0aGlzLl9nLGdlPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpV1tfZV09Qi5yZWFkSW50MzJCRSg0Kl9lKTtm''@;'; put 'put ''b3IoO19lPDY0OysrX2UpV1tfZV09WShXW19lLTJdKStXW19lLTddK0woV1tfZS0xNV0pK1dbX2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3ZhciBTZT1nZStQKHRlKStIKHRlLHJlLG9lKStOW1RlXStXW1RlXXwwLHplPWooWikrUihaLHEsUSl8MDtnZT1vZSxvZT1yZSxyZT10''@;'; put 'put ''ZSx0ZT1YK1NlfDAsWD1RLFE9cSxxPVosWj1TZSt6ZXwwfXRoaXMuX2E9Wit0aGlzLl9hfDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9jPVErdGhpcy5fY3wwLHRoaXMuX2Q9WCt0aGlzLl9kfDAsdGhpcy5fZT10ZSt0aGlzLl9lfDAsdGhpcy5fZj1yZSt0aGlzLl9mfDAsdGhpcy5fZz1v''@;'; put 'put ''ZSt0aGlzLl9nfDAsdGhpcy5faD1nZSt0aGlzLl9ofDB9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEI9cC5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIEIud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksQi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxCLndyaXRlSW50MzJCRSh0aGlz''@;'; put 'put ''Ll9jLDgpLEIud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEIud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEIud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEIud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEIud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLEJ9LGNlLmV4cG9ydHM9Rn0sMTY4Njoo''@;'; put 'put ''Y2UsSixiKT0+e3ZhciBEPWIoNTcxNyksXz1iKDc4MTYpLHA9Yig0MTg5KSxOPWIoOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxwLmNhbGwodGhpcywxMjgsMTEyKX1EKEYsXyksRi5wcm90b3R5cGUuaW5pdD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2''@;'; put 'put ''MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRo''@;'; put 'put ''aXN9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEg9Ti5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gUihqLFAsTCl7SC53cml0ZUludDMyQkUoaixMKSxILndyaXRlSW50MzJCRShQLEwrNCl9cmV0dXJuIFIodGhpcy5fYWgsdGhpcy5fYWwsMCksUih0aGlzLl9iaCx0aGlzLl9i''@;'; put 'put ''bCw4KSxSKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxSKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxSKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxSKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxIfSxjZS5leHBvcnRzPUZ9LDc4MTY6KGNlLEosYik9Pnt2YXIgRD1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUw''@;'; put 'put ''OSkuQnVmZmVyLE49WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1Nzks''@;'; put 'put ''Mjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMz''@;'; put 'put ''ODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2''@;'; put 'put ''OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkw''@;'; put 'put ''MSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAx''@;'; put 'put ''NDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAz''@;'; put 'put ''NTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywx''@;'; put 'put ''MzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5''@;'; put 'put ''MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0''@;'; put 'put ''MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEy''@;'; put 'put ''ODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIEYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rp''@;'; put 'put ''b24gSChxLFEsWCl7cmV0dXJuIFhecSYoUV5YKX1mdW5jdGlvbiBSKHEsUSxYKXtyZXR1cm4gcSZRfFgmKHF8USl9ZnVuY3Rpb24gaihxLFEpe3JldHVybihxPj4+Mjh8UTw8NCleKFE+Pj4yfHE8PDMwKV4oUT4+Pjd8cTw8MjUpfWZ1bmN0aW9uIFAocSxRKXtyZXR1cm4ocT4+PjE0fFE8PDE4''@;'; put 'put ''KV4ocT4+PjE4fFE8PDE0KV4oUT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIEwocSxRKXtyZXR1cm4ocT4+PjF8UTw8MzEpXihxPj4+OHxRPDwyNClecT4+Pjd9ZnVuY3Rpb24gWShxLFEpe3JldHVybihxPj4+MXxRPDwzMSleKHE+Pj44fFE8PDI0KV4ocT4+Pjd8UTw8MjUpfWZ1bmN0aW9uIEIocSxR''@;'; put 'put ''KXtyZXR1cm4ocT4+PjE5fFE8PDEzKV4oUT4+PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFcocSxRKXtyZXR1cm4ocT4+PjE5fFE8PDEzKV4oUT4+PjI5fHE8PDMpXihxPj4+NnxRPDwyNil9ZnVuY3Rpb24gWihxLFEpe3JldHVybiBxPj4+MDxRPj4+MD8xOjB9RChGLF8pLEYucHJvdG90eXBl''@;'; put 'put ''LmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRo''@;'; put 'put ''aXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hs''@;'; put 'put ''PTMyNzAzMzIwOSx0aGlzfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgUT10aGlzLl93LFg9MHx0aGlzLl9haCx0ZT0wfHRoaXMuX2JoLHJlPTB8dGhpcy5fY2gsb2U9MHx0aGlzLl9kaCxnZT0wfHRoaXMuX2VoLF9lPTB8dGhpcy5fZmgsVGU9MHx0aGlzLl9naCxT''@;'; put 'put ''ZT0wfHRoaXMuX2hoLHplPTB8dGhpcy5fYWwsej0wfHRoaXMuX2JsLGc9MHx0aGlzLl9jbCx5PTB8dGhpcy5fZGwseD0wfHRoaXMuX2VsLEM9MHx0aGlzLl9mbCxUPTB8dGhpcy5fZ2wsVj0wfHRoaXMuX2hsLFU9MDtVPDMyO1UrPTIpUVtVXT1xLnJlYWRJbnQzMkJFKDQqVSksUVtVKzFdPXEu''@;'; put 'put ''cmVhZEludDMyQkUoNCpVKzQpO2Zvcig7VTwxNjA7VSs9Mil7dmFyIEU9UVtVLTMwXSxtPVFbVS0zMCsxXSxBPUwoRSxtKSxhZT1ZKG0sRSksbmU9QihFPVFbVS00XSxtPVFbVS00KzFdKSxsZT1XKG0sRSksUWU9UVtVLTMyXSxvdD1RW1UtMzIrMV0sTWU9YWUrUVtVLTE0KzFdfDAsdmU9QStR''@;'; put 'put ''W1UtMTRdK1ooTWUsYWUpfDA7dmU9KHZlPXZlK25lK1ooTWU9TWUrbGV8MCxsZSl8MCkrUWUrWihNZT1NZStvdHwwLG90KXwwLFFbVV09dmUsUVtVKzFdPU1lfWZvcih2YXIgWGU9MDtYZTwxNjA7WGUrPTIpe3ZlPVFbWGVdLE1lPVFbWGUrMV07dmFyIEJlPVIoWCx0ZSxyZSksQWU9Uih6ZSx6''@;'; put 'put ''LGcpLEZlPWooWCx6ZSksUmU9aih6ZSxYKSxJZT1QKGdlLHgpLEhlPVAoeCxnZSksRGU9TltYZV0sa2U9TltYZSsxXSxfdD1IKGdlLF9lLFRlKSxudD1IKHgsQyxUKSxKZT1WK0hlfDAsbG49U2UrSWUrWihKZSxWKXwwO2xuPShsbj0obG49bG4rX3QrWihKZT1KZStudHwwLG50KXwwKStEZSta''@;'; put 'put ''KEplPUplK2tlfDAsa2UpfDApK3ZlK1ooSmU9SmUrTWV8MCxNZSl8MDt2YXIgeXQ9UmUrQWV8MCxTdD1GZStCZStaKHl0LFJlKXwwO1NlPVRlLFY9VCxUZT1fZSxUPUMsX2U9Z2UsQz14LGdlPW9lK2xuK1ooeD15K0plfDAseSl8MCxvZT1yZSx5PWcscmU9dGUsZz16LHRlPVgsej16ZSxYPWxu''@;'; put 'put ''K1N0K1ooemU9SmUreXR8MCxKZSl8MH10aGlzLl9hbD10aGlzLl9hbCt6ZXwwLHRoaXMuX2JsPXRoaXMuX2JsK3p8MCx0aGlzLl9jbD10aGlzLl9jbCtnfDAsdGhpcy5fZGw9dGhpcy5fZGwreXwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9''@;'; put 'put ''dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK1Z8MCx0aGlzLl9haD10aGlzLl9haCtYK1oodGhpcy5fYWwsemUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrdGUrWih0aGlzLl9ibCx6KXwwLHRoaXMuX2NoPXRoaXMuX2NoK3JlK1oodGhpcy5fY2wsZyl8MCx0aGlzLl9kaD10aGlzLl9kaCtv''@;'; put 'put ''ZStaKHRoaXMuX2RsLHkpfDAsdGhpcy5fZWg9dGhpcy5fZWgrZ2UrWih0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1oodGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStaKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrU2UrWih0aGlzLl9obCxWKXww''@;'; put 'put ''fSxGLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPXAuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIFEoWCx0ZSxyZSl7cS53cml0ZUludDMyQkUoWCxyZSkscS53cml0ZUludDMyQkUodGUscmUrNCl9cmV0dXJuIFEodGhpcy5fYWgsdGhpcy5fYWwsMCksUSh0aGlzLl9iaCx0aGlz''@;'; put 'put ''Ll9ibCw4KSxRKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxRKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxRKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxRKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxRKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxRKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSxjZS5leHBvcnRz''@;'; put 'put ''PUZ9LDI4MzA6KGNlLEosYik9PntjZS5leHBvcnRzPXA7dmFyIEQ9Yig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gcCgpe0QuY2FsbCh0aGlzKX1iKDU3MTcpKHAsRCkscC5SZWFkYWJsZT1iKDk0ODEpLHAuV3JpdGFibGU9Yig0MjI5KSxwLkR1cGxleD1iKDY3NTMpLHAuVHJhbnNmb3Jt''@;'; put 'put ''PWIoNDYwNSkscC5QYXNzVGhyb3VnaD1iKDI3MjUpLHAuZmluaXNoZWQ9Yig4NjEwKSxwLnBpcGVsaW5lPWIoOTk0NikscC5TdHJlYW09cCxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKE4sdyl7dmFyIEY9dGhpcztmdW5jdGlvbiBIKFcpe04ud3JpdGFibGUmJiExPT09Ti53cml0ZShXKSYm''@;'; put 'put ''Ri5wYXVzZSYmRi5wYXVzZSgpfWZ1bmN0aW9uIFIoKXtGLnJlYWRhYmxlJiZGLnJlc3VtZSYmRi5yZXN1bWUoKX1GLm9uKCJkYXRhIixIKSxOLm9uKCJkcmFpbiIsUiksIU4uX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihGLm9uKCJlbmQiLFApLEYub24oImNsb3NlIixMKSk7dmFyIGo9''@;'; put 'put ''ITE7ZnVuY3Rpb24gUCgpe2p8fChqPSEwLE4uZW5kKCkpfWZ1bmN0aW9uIEwoKXtqfHwoaj0hMCwiZnVuY3Rpb24iPT10eXBlb2YgTi5kZXN0cm95JiZOLmRlc3Ryb3koKSl9ZnVuY3Rpb24gWShXKXtpZihCKCksMD09PUQubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVu''@;'; put 'put ''Y3Rpb24gQigpe0YucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEgpLE4ucmVtb3ZlTGlzdGVuZXIoImRyYWluIixSKSxGLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFApLEYucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxGLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWSksTi5yZW1vdmVMaXN0ZW5lcigi''@;'; put 'put ''ZXJyb3IiLFkpLEYucmVtb3ZlTGlzdGVuZXIoImVuZCIsQiksRi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEIpLE4ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixCKX1yZXR1cm4gRi5vbigiZXJyb3IiLFkpLE4ub24oImVycm9yIixZKSxGLm9uKCJlbmQiLEIpLEYub24oImNsb3NlIixCKSxOLm9u''@;'; put 'put ''KCJjbG9zZSIsQiksTi5lbWl0KCJwaXBlIixGKSxOfX0sMjU1MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk1MDkpLkJ1ZmZlcixfPUQuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oWCl7c3dpdGNoKChYPSIiK1gpJiZYLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0Zjgi''@;'; put 'put ''OmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhYKXt2YXIgdGU7c3dp''@;'; put 'put ''dGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gTihYKXt2YXIgdGU9ZnVuY3Rpb24gcChYKXtpZighWClyZXR1cm4idXRmOCI7Zm9yKHZhciB0ZTs7KXN3aXRjaChYKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZs''@;'; put 'put ''ZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gWDtkZWZhdWx0OmlmKHRlKXJldHVybjtYPSgiIitYKS50b0xvd2VyQ2FzZSgpLHRl''@;'; put 'put ''PSEwfX0oWCk7aWYoInN0cmluZyIhPXR5cGVvZiB0ZSYmKEQuaXNFbmNvZGluZz09PV98fCFfKFgpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrWCk7cmV0dXJuIHRlfHxYfShYKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1ZLHRoaXMuZW5k''@;'; put 'put ''PUIsdGU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9aix0ZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vyx0aGlzLmVuZD1aLHRlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9USl9dGhpcy5sYXN0TmVlZD0wLHRoaXMu''@;'; put 'put ''bGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1ELmFsbG9jVW5zYWZlKHRlKX1mdW5jdGlvbiBGKFgpe3JldHVybiBYPD0xMjc/MDpYPj41PT02PzI6WD4+ND09MTQ/MzpYPj4zPT0zMD80Olg+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gaihYKXt2YXIgdGU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0''@;'; put 'put ''TmVlZCxyZT1mdW5jdGlvbiBSKFgsdGUscmUpe2lmKDEyOCE9KDE5MiZ0ZVswXSkpcmV0dXJuIFgubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihYLmxhc3ROZWVkPjEmJnRlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImdGVbMV0pKXJldHVybiBYLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoWC5sYXN0''@;'; put 'put ''TmVlZD4yJiZ0ZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnRlWzJdKSlyZXR1cm4gWC5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxYKTtyZXR1cm4gdm9pZCAwIT09cmU/cmU6dGhpcy5sYXN0TmVlZDw9WC5sZW5ndGg/KFguY29weSh0aGlzLmxhc3RDaGFyLHRlLDAsdGhpcy5sYXN0TmVlZCks''@;'; put 'put ''dGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooWC5jb3B5KHRoaXMubGFzdENoYXIsdGUsMCxYLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1YLmxlbmd0aCkpfWZ1bmN0aW9uIFkoWCx0ZSl7aWYoKFgubGVuZ3RoLXRlKSUyPT0wKXt2''@;'; put 'put ''YXIgcmU9WC50b1N0cmluZygidXRmMTZsZSIsdGUpO2lmKHJlKXt2YXIgb2U9cmUuY2hhckNvZGVBdChyZS5sZW5ndGgtMSk7aWYob2U+PTU1Mjk2JiZvZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09WFtYLmxlbmd0aC0y''@;'; put 'put ''XSx0aGlzLmxhc3RDaGFyWzFdPVhbWC5sZW5ndGgtMV0scmUuc2xpY2UoMCwtMSl9cmV0dXJuIHJlfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPVhbWC5sZW5ndGgtMV0sWC50b1N0cmluZygidXRmMTZsZSIsdGUsWC5sZW5ndGgtMSl9''@;'; put 'put ''ZnVuY3Rpb24gQihYKXt2YXIgdGU9WCYmWC5sZW5ndGg/dGhpcy53cml0ZShYKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOnRlfWZ1bmN0aW9uIFcoWCx0ZSl7dmFyIHJl''@;'; put 'put ''PShYLmxlbmd0aC10ZSklMztyZXR1cm4gMD09PXJlP1gudG9TdHJpbmcoImJhc2U2NCIsdGUpOih0aGlzLmxhc3ROZWVkPTMtcmUsdGhpcy5sYXN0VG90YWw9MywxPT09cmU/dGhpcy5sYXN0Q2hhclswXT1YW1gubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPVhbWC5sZW5ndGgtMl0sdGhp''@;'; put 'put ''cy5sYXN0Q2hhclsxXT1YW1gubGVuZ3RoLTFdKSxYLnRvU3RyaW5nKCJiYXNlNjQiLHRlLFgubGVuZ3RoLXJlKSl9ZnVuY3Rpb24gWihYKXt2YXIgdGU9WCYmWC5sZW5ndGg/dGhpcy53cml0ZShYKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJi''@;'; put 'put ''YXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTp0ZX1mdW5jdGlvbiBxKFgpe3JldHVybiBYLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFEoWCl7cmV0dXJuIFgmJlgubGVuZ3RoP3RoaXMud3JpdGUoWCk6IiJ9Si5zPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWCl7aWYo''@;'; put 'put ''MD09PVgubGVuZ3RoKXJldHVybiIiO3ZhciB0ZSxyZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odGU9dGhpcy5maWxsTGFzdChYKSkpcmV0dXJuIiI7cmU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSByZT0wO3JldHVybiByZTxYLmxlbmd0aD90ZT90ZSt0aGlz''@;'; put 'put ''LnRleHQoWCxyZSk6dGhpcy50ZXh0KFgscmUpOnRlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoWCl7dmFyIHRlPVgmJlgubGVuZ3RoP3RoaXMud3JpdGUoWCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dGUrIlx1ZmZmZCI6dGV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24g''@;'; put 'put ''UChYLHRlKXt2YXIgcmU9ZnVuY3Rpb24gSChYLHRlLHJlKXt2YXIgb2U9dGUubGVuZ3RoLTE7aWYob2U8cmUpcmV0dXJuIDA7dmFyIGdlPUYodGVbb2VdKTtyZXR1cm4gZ2U+PTA/KGdlPjAmJihYLmxhc3ROZWVkPWdlLTEpLGdlKTotLW9lPHJlfHwtMj09PWdlPzA6KGdlPUYodGVbb2VdKSk+''@;'; put 'put ''PTA/KGdlPjAmJihYLmxhc3ROZWVkPWdlLTIpLGdlKTotLW9lPHJlfHwtMj09PWdlPzA6KGdlPUYodGVbb2VdKSk+PTA/KGdlPjAmJigyPT09Z2U/Z2U9MDpYLmxhc3ROZWVkPWdlLTMpLGdlKTowfSh0aGlzLFgsdGUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBYLnRvU3RyaW5nKCJ1dGY4''@;'; put 'put ''Iix0ZSk7dGhpcy5sYXN0VG90YWw9cmU7dmFyIG9lPVgubGVuZ3RoLShyZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gWC5jb3B5KHRoaXMubGFzdENoYXIsMCxvZSksWC50b1N0cmluZygidXRmOCIsdGUsb2UpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihYKXtpZih0aGlzLmxhc3RO''@;'; put 'put ''ZWVkPD1YLmxlbmd0aClyZXR1cm4gWC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtYLmNvcHkodGhpcy5sYXN0Q2hhcix0''@;'; put 'put ''aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsWC5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPVgubGVuZ3RofX0sNzg1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBEPWIoMzY4OSksXz1iKDQ1NjQpLHA9Yig3NTIpLE49YigyMjI0KS55LHc9Yig1NzYxKS5tLEY9Yig4OTcxKS5V''@;'; put 'put ''LEg9Yig3NjUyKSxSPWIoNDU2KSx7ZnJvbUNhbGxiYWNrOmp9PWIoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6UH09YigxMjY5KSxMPS9eW1x4MjFceDIzLVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLFk9L1tceDAwLVx4MUZdLyxCPVsiXG4iLCJcciIsIlwwIl0s''@;'; put 'put ''Vz0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxaPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHE9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LFE9MjE0NzQ4MzY0N2Uz''@;'; put 'put ''LHRlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiByZShCZSl7SC52YWxpZGF0ZShILmlzTm9uRW1wdHlTdHJpbmcoQmUpLEJlKTtjb25zdCBBZT1TdHJp''@;'; put 'put ''bmcoQmUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09QWV8fCJsYXgiPT09QWV8fCJzdHJpY3QiPT09QWU/QWU6bnVsbH1jb25zdCBvZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksZ2U9Lyg/''@;'; put 'put ''Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAt''@;'; put 'put ''NV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVb''@;'; put 'put ''MC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAt''@;'; put 'put ''NF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRc''@;'; put 'put ''ZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxk''@;'; put 'put ''fFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318''@;'; put 'put ''KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDop''@;'; put 'put ''KSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxk''@;'; put 'put ''fDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxc''@;'; put 'put ''XGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFc''@;'; put 'put ''XGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVsw''@;'; put 'put ''LTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxc''@;'; put 'put ''XGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFc''@;'; put 'put ''XGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxc''@;'; put 'put ''ZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxhY2Uo''@;'; put 'put ''L1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhwKGBeJHtfZX0kYCk7ZnVuY3Rpb24gU2UoQmUsQWUsRmUsUmUpe2xldCBJZT0wO2Zvcig7SWU8QmUubGVuZ3RoOyl7Y29uc3QgSGU9QmUuY2hhckNvZGVBdChJZSk7aWYoSGU8PTQ3fHxIZT49NTgpYnJlYWs7SWUrK31yZXR1cm4gSWU8QWV8''@;'; put 'put ''fEllPkZlfHwhUmUmJkllIT1CZS5sZW5ndGg/bnVsbDpwYXJzZUludChCZS5zdWJzdHIoMCxJZSksMTApfWZ1bmN0aW9uIHplKEJlKXtjb25zdCBBZT1CZS5zcGxpdCgiOiIpLEZlPVswLDAsMF07aWYoMyE9PUFlLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IFJlPTA7UmU8MztSZSsrKXtj''@;'; put 'put ''b25zdCBIZT1TZShBZVtSZV0sMSwyLDI9PVJlKTtpZihudWxsPT09SGUpcmV0dXJuIG51bGw7RmVbUmVdPUhlfXJldHVybiBGZX1mdW5jdGlvbiB6KEJlKXtCZT1TdHJpbmcoQmUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3QgQWU9cVtCZV07cmV0dXJuIEFlPj0wP0FlOm51bGx9''@;'; put 'put ''ZnVuY3Rpb24gZyhCZSl7aWYoIUJlKXJldHVybjtjb25zdCBBZT1CZS5zcGxpdChaKTtpZighQWUpcmV0dXJuO2xldCBGZT1udWxsLFJlPW51bGwsSWU9bnVsbCxIZT1udWxsLERlPW51bGwsa2U9bnVsbDtmb3IobGV0IF90PTA7X3Q8QWUubGVuZ3RoO190Kyspe2NvbnN0IG50PUFlW190XS50''@;'; put 'put ''cmltKCk7aWYoIW50Lmxlbmd0aCljb250aW51ZTtsZXQgSmU7bnVsbD09PUllJiYoSmU9emUobnQpLEplKT8oRmU9SmVbMF0sUmU9SmVbMV0sSWU9SmVbMl0pOm51bGwhPT1IZXx8KEplPVNlKG50LDEsMiwhMCksbnVsbD09PUplKT9udWxsIT09RGV8fChKZT16KG50KSxudWxsPT09SmUpP251''@;'; put 'put ''bGw9PT1rZSYmKEplPVNlKG50LDIsNCwhMCksbnVsbCE9PUplJiYoa2U9SmUsa2U+PTcwJiZrZTw9OTk/a2UrPTE5MDA6a2U+PTAmJmtlPD02OSYmKGtlKz0yZTMpKSk6RGU9SmU6SGU9SmV9cmV0dXJuIG51bGw9PT1IZXx8bnVsbD09PURlfHxudWxsPT09a2V8fG51bGw9PT1JZXx8SGU8MXx8''@;'; put 'put ''SGU+MzF8fGtlPDE2MDF8fEZlPjIzfHxSZT41OXx8SWU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKGtlLERlLEhlLEZlLFJlLEllKSl9ZnVuY3Rpb24geShCZSl7cmV0dXJuIEgudmFsaWRhdGUoSC5pc0RhdGUoQmUpLEJlKSxCZS50b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoQmUpe3Jl''@;'; put 'put ''dHVybiBudWxsPT1CZT9udWxsOihCZT1CZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdChCZSkmJihCZT1CZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxEJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChCZSkmJihCZT1ELnRvQVNDSUkoQmUpKSxCZS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKX1mdW5jdGlvbiBDKEJlLEFlLEZlKXtpZihudWxsPT1CZXx8bnVsbD09QWUpcmV0dXJuIG51bGw7aWYoITEhPT1GZSYmKEJlPXgoQmUpLEFlPXgoQWUpKSxCZT09QWUpcmV0dXJuITA7Y29uc3QgUmU9QmUubGFzdEluZGV4T2YoQWUpO3JldHVybiEoUmU8PTB8fEJlLmxlbmd0aCE9''@;'; put 'put ''PUFlLmxlbmd0aCtSZXx8Ii4iIT09QmUuc3Vic3RyKFJlLTEsMSl8fGdlLnRlc3QoQmUpKX1mdW5jdGlvbiBUKEJlKXtpZighQmV8fCIvIiE9PUJlLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT1CZSlyZXR1cm4gQmU7Y29uc3QgQWU9QmUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4g''@;'; put 'put ''MD09PUFlPyIvIjpCZS5zbGljZSgwLEFlKX1mdW5jdGlvbiBFKEJlLEFlKXtpZigoIUFlfHwib2JqZWN0IiE9dHlwZW9mIEFlKSYmKEFlPXt9KSxILmlzRW1wdHlTdHJpbmcoQmUpfHwhSC5pc1N0cmluZyhCZSkpcmV0dXJuIG51bGw7Y29uc3QgRmU9KEJlPUJlLnRyaW0oKSkuaW5kZXhPZigi''@;'; put 'put ''OyIpLEllPWZ1bmN0aW9uIFUoQmUsQWUpe0JlPWZ1bmN0aW9uIFYoQmUpe2lmKEguaXNFbXB0eVN0cmluZyhCZSkpcmV0dXJuIEJlO2ZvcihsZXQgQWU9MDtBZTxCLmxlbmd0aDtBZSsrKXtjb25zdCBGZT1CZS5pbmRleE9mKEJbQWVdKTstMSE9PUZlJiYoQmU9QmUuc3Vic3RyKDAsRmUpKX1y''@;'; put 'put ''ZXR1cm4gQmV9KEJlKSxILnZhbGlkYXRlKEguaXNTdHJpbmcoQmUpLEJlKTtsZXQgUmUsSWUsRmU9QmUuaW5kZXhPZigiPSIpO2lmKEFlKTA9PT1GZSYmKEZlPShCZT1CZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihGZTw9MClyZXR1cm47aWYoRmU8PTA/KFJlPSIiLEllPUJl''@;'; put 'put ''LnRyaW0oKSk6KFJlPUJlLnN1YnN0cigwLEZlKS50cmltKCksSWU9QmUuc3Vic3RyKEZlKzEpLnRyaW0oKSksWS50ZXN0KFJlKXx8WS50ZXN0KEllKSlyZXR1cm47Y29uc3QgSGU9bmV3IG90O3JldHVybiBIZS5rZXk9UmUsSGUudmFsdWU9SWUsSGV9KC0xPT09RmU/QmU6QmUuc3Vic3RyKDAs''@;'; put 'put ''RmUpLCEhQWUubG9vc2UpO2lmKCFJZSlyZXR1cm47aWYoLTE9PT1GZSlyZXR1cm4gSWU7Y29uc3QgSGU9QmUuc2xpY2UoRmUrMSkudHJpbSgpO2lmKDA9PT1IZS5sZW5ndGgpcmV0dXJuIEllO2NvbnN0IERlPUhlLnNwbGl0KCI7Iik7Zm9yKDtEZS5sZW5ndGg7KXtjb25zdCBrZT1EZS5zaGlm''@;'; put 'put ''dCgpLnRyaW0oKTtpZigwPT09a2UubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF90PWtlLmluZGV4T2YoIj0iKTtsZXQgbnQsSmU7c3dpdGNoKC0xPT09X3Q/KG50PWtlLEplPW51bGwpOihudD1rZS5zdWJzdHIoMCxfdCksSmU9a2Uuc3Vic3RyKF90KzEpKSxudD1udC50cmltKCkudG9Mb3dlckNh''@;'; put 'put ''c2UoKSxKZSYmKEplPUplLnRyaW0oKSksbnQpe2Nhc2UiZXhwaXJlcyI6aWYoSmUpe2NvbnN0IHl0PWcoSmUpO3l0JiYoSWUuZXhwaXJlcz15dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihKZSYmL14tP1swLTldKyQvLnRlc3QoSmUpKXtjb25zdCB5dD1wYXJzZUludChKZSwxMCk7SWUuc2V0''@;'; put 'put ''TWF4QWdlKHl0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoSmUpe2NvbnN0IHl0PUplLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTt5dCYmKEllLmRvbWFpbj15dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOkllLnBhdGg9SmUmJiIvIj09PUplWzBdP0plOm51bGw7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJzZWN1cmUiOkllLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpJZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goSmU/SmUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOkllLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpJZS5z''@;'; put 'put ''YW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOkllLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OkllLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OkllLmV4dGVuc2lvbnM9SWUuZXh0ZW5zaW9uc3x8W10sSWUuZXh0ZW5zaW9ucy5wdXNoKGtlKX19cmV0dXJuIEllfWZ1''@;'; put 'put ''bmN0aW9uIGFlKEJlKXtsZXQgQWU7dHJ5e0FlPUpTT04ucGFyc2UoQmUpfWNhdGNoKEZlKXtyZXR1cm4gRmV9cmV0dXJuIEFlfWZ1bmN0aW9uIG5lKEJlKXtpZighQmV8fEguaXNFbXB0eVN0cmluZyhCZSkpcmV0dXJuIG51bGw7bGV0IEFlO2lmKCJzdHJpbmciPT10eXBlb2YgQmUpe2lmKEFl''@;'; put 'put ''PWFlKEJlKSxBZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2UgQWU9QmU7Y29uc3QgRmU9bmV3IG90O2ZvcihsZXQgUmU9MDtSZTxvdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtSZSsrKXtjb25zdCBJZT1vdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW1JlXTt2b2lk''@;'; put 'put ''IDA9PT1BZVtJZV18fEFlW0llXT09PVFlW0llXXx8KEZlW0llXT0iZXhwaXJlcyI9PT1JZXx8ImNyZWF0aW9uIj09PUllfHwibGFzdEFjY2Vzc2VkIj09PUllP251bGw9PT1BZVtJZV0/bnVsbDoiSW5maW5pdHkiPT1BZVtJZV0/IkluZmluaXR5IjpuZXcgRGF0ZShBZVtJZV0pOkFlW0llXSl9''@;'; put 'put ''cmV0dXJuIEZlfWZ1bmN0aW9uIGxlKEJlLEFlKXtILnZhbGlkYXRlKEguaXNPYmplY3QoQmUpLEJlKSxILnZhbGlkYXRlKEguaXNPYmplY3QoQWUpLEFlKTtsZXQgRmU9MDtyZXR1cm4gRmU9KEFlLnBhdGg/QWUucGF0aC5sZW5ndGg6MCktKEJlLnBhdGg/QmUucGF0aC5sZW5ndGg6MCksMCE9''@;'; put 'put ''PUZlfHwoRmU9KEJlLmNyZWF0aW9uP0JlLmNyZWF0aW9uLmdldFRpbWUoKTpRKS0oQWUuY3JlYXRpb24/QWUuY3JlYXRpb24uZ2V0VGltZSgpOlEpLDAhPT1GZXx8KEZlPUJlLmNyZWF0aW9uSW5kZXgtQWUuY3JlYXRpb25JbmRleCkpLEZlfWZ1bmN0aW9uIFVlKEJlKXtpZihCZSBpbnN0YW5j''@;'; put 'put ''ZW9mIE9iamVjdClyZXR1cm4gQmU7dHJ5e0JlPWRlY29kZVVSSShCZSl9Y2F0Y2h7fXJldHVybiBfKEJlKX1jb25zdCBRZT17a2V5OiIiLHZhbHVlOiIiLGV4cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4''@;'; put 'put ''dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZvaWQgMH07Y2xhc3Mgb3R7Y29uc3RydWN0b3IoQWU9e30pe2NvbnN0IEZlPVAoKTtGZSYmKHRoaXNbRmVdPXRoaXMuaW5zcGVjdCks''@;'; put 'put ''T2JqZWN0LmFzc2lnbih0aGlzLFFlLEFlKSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KytvdC5jb29r''@;'; put 'put ''aWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBBZT1EYXRlLm5vdygpLEZlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsUmU9dGhpcy5jcmVhdGlvbj9BZS10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixJZT10aGlzLmxhc3RBY2Nlc3NlZD9BZS10aGlz''@;'; put 'put ''Lmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke0ZlfTsgYUFnZT0ke0llfTsgY0FnZT0ke1JlfSJgfXRvSlNPTigpe2NvbnN0IEFlPXt9O2Zvcihjb25zdCBGZSBvZiBvdC5zZXJpYWxpemFibGVQcm9w''@;'; put 'put ''ZXJ0aWVzKXRoaXNbRmVdIT09UWVbRmVdJiYoImV4cGlyZXMiPT09RmV8fCJjcmVhdGlvbiI9PT1GZXx8Imxhc3RBY2Nlc3NlZCI9PT1GZT9BZVtGZV09bnVsbD09PXRoaXNbRmVdP251bGw6IkluZmluaXR5Ij09dGhpc1tGZV0/IkluZmluaXR5Ijp0aGlzW0ZlXS50b0lTT1N0cmluZygpOiJt''@;'; put 'put ''YXhBZ2UiPT09RmU/bnVsbCE9PXRoaXNbRmVdJiYoQWVbRmVdPXRoaXNbRmVdPT0xLzB8fHRoaXNbRmVdPT0tMS8wP3RoaXNbRmVdLnRvU3RyaW5nKCk6dGhpc1tGZV0pOnRoaXNbRmVdIT09UWVbRmVdJiYoQWVbRmVdPXRoaXNbRmVdKSk7cmV0dXJuIEFlfWNsb25lKCl7cmV0dXJuIG5lKHRo''@;'; put 'put ''aXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIUwudGVzdCh0aGlzLnZhbHVlKXx8dGhpcy5leHBpcmVzIT0xLzAmJiEodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZSkmJiFnKHRoaXMuZXhwaXJlcyl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5w''@;'; put 'put ''YXRoJiYhVy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgQWU9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShBZSYmKEFlLm1hdGNoKC9cLiQvKXx8bnVsbD09cC5nZXRQdWJsaWNTdWZmaXgoQWUpKSl9c2V0RXhwaXJlcyhBZSl7dGhpcy5leHBpcmVzPUFlIGluc3RhbmNlb2YgRGF0ZT9B''@;'; put 'put ''ZTpnKEFlKXx8IkluZmluaXR5In1zZXRNYXhBZ2UoQWUpe3RoaXMubWF4QWdlPUFlPT09MS8wfHxBZT09PS0xLzA/QWUudG9TdHJpbmcoKTpBZX1jb29raWVTdHJpbmcoKXtsZXQgQWU9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09QWUmJihBZT0iIiksIiI9PT10aGlzLmtleT9BZTpgJHt0aGlz''@;'; put 'put ''LmtleX09JHtBZX1gfXRvU3RyaW5nKCl7bGV0IEFlPXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP0FlKz1gOyBFeHBpcmVzPSR7eSh0aGlzLmV4cGlyZXMpfWA6QWUrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGly''@;'; put 'put ''ZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihBZSs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYhdGhpcy5ob3N0T25seSYmKEFlKz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihBZSs9YDsgUGF0aD0ke3Ro''@;'; put 'put ''aXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKEFlKz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYoQWUrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYmIm5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgRmU9b3Quc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpXTtBZSs9YDsgU2FtZVNpdGU9JHtGZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JFYWNoKEZlPT57QWUrPWA7ICR7RmV9YH0pLEFlfVRUTChBZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdl''@;'; put 'put ''PD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBGZT10aGlzLmV4cGlyZXM7cmV0dXJuIEZlIT0xLzA/KEZlIGluc3RhbmNlb2YgRGF0ZXx8KEZlPWcoRmUpfHwxLzApLEZlPT0xLzA/MS8wOkZlLmdldFRpbWUoKS0oQWV8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShBZSl7aWYobnVsbCE9''@;'; put 'put ''dGhpcy5tYXhBZ2Upe2NvbnN0IFJlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihBZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUpLmdldFRpbWUoKStSZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5''@;'; put 'put ''RGF0ZShBZSl7Y29uc3QgRmU9dGhpcy5leHBpcnlUaW1lKEFlKTtyZXR1cm4gRmU9PTEvMD9uZXcgRGF0ZShRKTpGZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShGZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmlj''@;'; put 'put ''YWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24gTWUoQmUpe2lmKG51bGwhPUJlKXtjb25zdCBBZT1CZS50b0xvd2VyQ2FzZSgpO3N3aXRj''@;'; put 'put ''aChBZSl7Y2FzZSBvZS5TVFJJQ1Q6Y2FzZSBvZS5TSUxFTlQ6Y2FzZSBvZS5ESVNBQkxFRDpyZXR1cm4gQWV9fXJldHVybiBvZS5TSUxFTlR9b3QuY29va2llc0NyZWF0ZWQ9MCxvdC5wYXJzZT1FLG90LmZyb21KU09OPW5lLG90LnNlcmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0LmtleXMo''@;'; put 'put ''UWUpLG90LnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0sb3Quc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHZle2NvbnN0cnVjdG9yKEFlLEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczohMH0peyJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IEZlJiYoRmU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOkZlfSksSC52YWxpZGF0ZShILmlzT2JqZWN0KEZlKSxGZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1GZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0hIUZlLmxvb3NlTW9kZSx0aGlzLmFsbG93U3Bl''@;'; put 'put ''Y2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBGZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fEZlLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPUFlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PU1lKEZlLnByZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5bmM9WGUo''@;'; put 'put ''ImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9WGUoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1YZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1YZSgiZ2V0Q29va2llU3RyaW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJpbmdzU3lu''@;'; put 'put ''Yz1YZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9WGUoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9WGUoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1YZSgic2VyaWFsaXplIil9c2V0Q29va2llKEFlLEZlLFJl''@;'; put 'put ''LEllKXtsZXQgSGU7aWYoSC52YWxpZGF0ZShILmlzTm9uRW1wdHlTdHJpbmcoRmUpLEllLFJlKSxILmlzRnVuY3Rpb24oRmUpKXJldHVybihJZT1GZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBEZT1VZShGZSk7aWYoSC5pc0Z1bmN0aW9uKFJlKSYmKEllPVJl''@;'; put 'put ''LFJlPXt9KSxILnZhbGlkYXRlKEguaXNGdW5jdGlvbihJZSksSWUpLCFILmlzTm9uRW1wdHlTdHJpbmcoQWUpJiYhSC5pc09iamVjdChBZSkmJkFlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1BZS5sZW5ndGgpcmV0dXJuIEllKG51bGwpO2NvbnN0IGtlPXgoRGUuaG9zdG5hbWUpLF90PVJlLmxv''@;'; put 'put ''b3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgbnQ9bnVsbDtpZihSZS5zYW1lU2l0ZUNvbnRleHQmJihudD1yZShSZS5zYW1lU2l0ZUNvbnRleHQpLCFudCkpcmV0dXJuIEllKG5ldyBFcnJvcih0ZSkpO2lmKCJzdHJpbmciPT10eXBlb2YgQWV8fEFlIGluc3RhbmNlb2YgU3RyaW5nKXtp''@;'; put 'put ''ZighKEFlPW90LnBhcnNlKEFlLHtsb29zZTpfdH0pKSlyZXR1cm4gSGU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpIZSl9ZWxzZSBpZighKEFlIGluc3RhbmNlb2Ygb3QpKXJldHVybiBIZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3Vt''@;'; put 'put ''ZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOkhlKTtjb25zdCBKZT1SZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJkFlLmRvbWFpbiYmbnVsbD09cC5nZXRQdWJsaWNT''@;'; put 'put ''dWZmaXgoQWUuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6UmUuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3QoQWUuZG9tYWluKSlyZXR1cm4gSGU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8g''@;'; put 'put ''YSBwdWJsaWMgc3VmZml4IiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpIZSk7aWYoQWUuZG9tYWluKXtpZighQyhrZSxBZS5jZG9tYWluKCksITEpKXJldHVybiBIZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtBZS5jZG9tYWluKCl9IFJl''@;'; put 'put ''cXVlc3Q6JHtrZX1gKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOkhlKTtudWxsPT1BZS5ob3N0T25seSYmKEFlLmhvc3RPbmx5PSExKX1lbHNlIEFlLmhvc3RPbmx5PSEwLEFlLmRvbWFpbj1rZTtpZigoIUFlLnBhdGh8fCIvIiE9PUFlLnBhdGhbMF0pJiYoQWUucGF0aD1UKERlLnBhdGhuYW1l''@;'; put 'put ''KSxBZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PVJlLmh0dHAmJkFlLmh0dHBPbmx5KXJldHVybiBIZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6SGUpO2lmKCJub25lIiE9PUFlLnNhbWVT''@;'; put 'put ''aXRlJiZ2b2lkIDAhPT1BZS5zYW1lU2l0ZSYmbnQmJiJub25lIj09PW50KXJldHVybiBIZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpIZSk7Y29uc3QgbG49dGhpcy5wcmVm''@;'; put 'put ''aXhTZWN1cml0eT09PW9lLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09b2UuRElTQUJMRUQpe2xldCAkZSxpdD0hMTtpZihmdW5jdGlvbiBtKEJlKXtyZXR1cm4gSC52YWxpZGF0ZShILmlzT2JqZWN0KEJlKSxCZSksIUJlLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8QmUu''@;'; put 'put ''c2VjdXJlfShBZSk/ZnVuY3Rpb24gQShCZSl7cmV0dXJuIEgudmFsaWRhdGUoSC5pc09iamVjdChCZSkpLCFCZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxCZS5zZWN1cmUmJkJlLmhvc3RPbmx5JiZudWxsIT1CZS5wYXRoJiYiLyI9PT1CZS5wYXRofShBZSl8fChpdD0hMCwkZT0iQ29v''@;'; put 'put ''a2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihpdD0hMCwkZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIp''@;'; put 'put ''LGl0KXJldHVybiBJZShSZS5pZ25vcmVFcnJvcnx8bG4/bnVsbDpuZXcgRXJyb3IoJGUpKX1jb25zdCBTdD10aGlzLnN0b3JlO1N0LnVwZGF0ZUNvb2tpZXx8KFN0LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCwkZSx0dCl7dGhpcy5wdXRDb29raWUoJGUsdHQpfSksU3QuZmluZENvb2tpZShB''@;'; put 'put ''ZS5kb21haW4sQWUucGF0aCxBZS5rZXksZnVuY3Rpb24gRHQoaXQsJGUpe2lmKGl0KXJldHVybiBJZShpdCk7Y29uc3QgdHQ9ZnVuY3Rpb24oTmUpe2lmKE5lKXJldHVybiBJZShOZSk7SWUobnVsbCxBZSl9O2lmKCRlKXtpZighMT09PVJlLmh0dHAmJiRlLmh0dHBPbmx5KXJldHVybiBpdD1u''@;'; put 'put ''ZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOml0KTtBZS5jcmVhdGlvbj0kZS5jcmVhdGlvbixBZS5jcmVhdGlvbkluZGV4PSRlLmNyZWF0aW9uSW5kZXgsQWUubGFzdEFjY2Vzc2VkPUpl''@;'; put 'put ''LFN0LnVwZGF0ZUNvb2tpZSgkZSxBZSx0dCl9ZWxzZSBBZS5jcmVhdGlvbj1BZS5sYXN0QWNjZXNzZWQ9SmUsU3QucHV0Q29va2llKEFlLHR0KX0pfWdldENvb2tpZXMoQWUsRmUsUmUpe0gudmFsaWRhdGUoSC5pc05vbkVtcHR5U3RyaW5nKEFlKSxSZSxBZSk7Y29uc3QgSWU9VWUoQWUpO0gu''@;'; put 'put ''aXNGdW5jdGlvbihGZSkmJihSZT1GZSxGZT17fSksSC52YWxpZGF0ZShILmlzT2JqZWN0KEZlKSxSZSxGZSksSC52YWxpZGF0ZShILmlzRnVuY3Rpb24oUmUpLFJlKTtjb25zdCBIZT14KEllLmhvc3RuYW1lKSxEZT1JZS5wYXRobmFtZXx8Ii8iO2xldCBrZT1GZS5zZWN1cmU7bnVsbD09a2Um''@;'; put 'put ''JkllLnByb3RvY29sJiYoImh0dHBzOiI9PUllLnByb3RvY29sfHwid3NzOiI9PUllLnByb3RvY29sKSYmKGtlPSEwKTtsZXQgX3Q9MDtpZihGZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IGl0PXJlKEZlLnNhbWVTaXRlQ29udGV4dCk7aWYoX3Q9b3Quc2FtZVNpdGVMZXZlbFtpdF0sIV90KXJl''@;'; put 'put ''dHVybiBSZShuZXcgRXJyb3IodGUpKX1sZXQgbnQ9RmUuaHR0cDtudWxsPT1udCYmKG50PSEwKTtjb25zdCBKZT1GZS5ub3d8fERhdGUubm93KCksbG49ITEhPT1GZS5leHBpcmUseXQ9ISFGZS5hbGxQYXRocyxTdD10aGlzLnN0b3JlO2Z1bmN0aW9uIER0KGl0KXtpZihpdC5ob3N0T25seSl7''@;'; put 'put ''aWYoaXQuZG9tYWluIT1IZSlyZXR1cm4hMX1lbHNlIGlmKCFDKEhlLGl0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISgheXQmJiFGKERlLGl0LnBhdGgpfHxpdC5zZWN1cmUmJiFrZXx8aXQuaHR0cE9ubHkmJiFudHx8X3QmJm90LnNhbWVTaXRlTGV2ZWxbaXQuc2FtZVNpdGV8fCJub25l''@;'; put 'put ''Il0+X3R8fGxuJiZpdC5leHBpcnlUaW1lKCk8PUplJiYoU3QucmVtb3ZlQ29va2llKGl0LmRvbWFpbixpdC5wYXRoLGl0LmtleSwoKT0+e30pLDEpKX1TdC5maW5kQ29va2llcyhIZSx5dD9udWxsOkRlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChpdCwkZSk9PntpZihpdClyZXR1cm4g''@;'; put 'put ''UmUoaXQpOyRlPSRlLmZpbHRlcihEdCksITEhPT1GZS5zb3J0JiYoJGU9JGUuc29ydChsZSkpO2NvbnN0IHR0PW5ldyBEYXRlO2Zvcihjb25zdCBOZSBvZiAkZSlOZS5sYXN0QWNjZXNzZWQ9dHQ7UmUobnVsbCwkZSl9KX1nZXRDb29raWVTdHJpbmcoLi4uQWUpe2NvbnN0IEZlPUFlLnBvcCgp''@;'; put 'put ''O0gudmFsaWRhdGUoSC5pc0Z1bmN0aW9uKEZlKSxGZSksQWUucHVzaChmdW5jdGlvbihJZSxIZSl7SWU/RmUoSWUpOkZlKG51bGwsSGUuc29ydChsZSkubWFwKERlPT5EZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxBZSl9Z2V0U2V0''@;'; put 'put ''Q29va2llU3RyaW5ncyguLi5BZSl7Y29uc3QgRmU9QWUucG9wKCk7SC52YWxpZGF0ZShILmlzRnVuY3Rpb24oRmUpLEZlKSxBZS5wdXNoKGZ1bmN0aW9uKEllLEhlKXtJZT9GZShJZSk6RmUobnVsbCxIZS5tYXAoRGU9PkRlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0''@;'; put 'put ''aGlzLEFlKX1zZXJpYWxpemUoQWUpe0gudmFsaWRhdGUoSC5pc0Z1bmN0aW9uKEFlKSxBZSk7bGV0IEZlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtILmlzT2JqZWN0KEZlKSYmKEZlPW51bGwpO2NvbnN0IFJlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtSfWAsc3RvcmVUeXBlOkZl''@;'; put 'put ''LHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpNZSh0aGlzLnBy''@;'; put 'put ''ZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBBZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fu''@;'; put 'put ''bm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChJZSxIZSk9PkllP0FlKEllKTooUmUuY29va2llcz1IZS5tYXAoRGU9PihkZWxldGUoRGU9RGUgaW5zdGFuY2VvZiBvdD9EZS50b0pTT04oKTpEZSkuY3JlYXRpb25JbmRleCxEZSkpLEFlKG51bGwsUmUpKSl9''@;'; put 'put ''dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKEFlLEZlKXtsZXQgUmU9QWUuY29va2llcztpZighUmV8fCFBcnJheS5pc0FycmF5KFJlKSlyZXR1cm4gRmUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtS''@;'; put 'put ''ZT1SZS5zbGljZSgpO2NvbnN0IEllPUhlPT57aWYoSGUpcmV0dXJuIEZlKEhlKTtpZighUmUubGVuZ3RoKXJldHVybiBGZShIZSx0aGlzKTtsZXQgRGU7dHJ5e0RlPW5lKFJlLnNoaWZ0KCkpfWNhdGNoKGtlKXtyZXR1cm4gRmUoa2UpfWlmKG51bGw9PT1EZSlyZXR1cm4gSWUobnVsbCk7dGhp''@;'; put 'put ''cy5zdG9yZS5wdXRDb29raWUoRGUsSWUpfTtJZSgpfWNsb25lKEFlLEZlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEZlPUFlLEFlPW51bGwpLHRoaXMuc2VyaWFsaXplKChSZSxJZSk9PntpZihSZSlyZXR1cm4gRmUoUmUpO3ZlLmRlc2VyaWFsaXplKEllLEFlLEZlKX0pfWNsb25lU3luYyhB''@;'; put 'put ''ZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFBZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4i''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKEFlKX1yZW1vdmVBbGxDb29raWVzKEFlKXtILnZhbGlkYXRlKEguaXNGdW5jdGlvbihBZSksQWUpO2NvbnN0IEZlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlbW92ZUFsbENvb2tpZXMmJkZlLnJlbW92ZUFsbENvb2tpZXMh''@;'; put 'put ''PT1OLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBGZS5yZW1vdmVBbGxDb29raWVzKEFlKTtGZS5nZXRBbGxDb29raWVzKChSZSxJZSk9PntpZihSZSlyZXR1cm4gQWUoUmUpO2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuIEFlKG51bGwpO2xldCBIZT0wO2NvbnN0IERlPVtdO2Z1''@;'; put 'put ''bmN0aW9uIGtlKF90KXtpZihfdCYmRGUucHVzaChfdCksSGUrKyxIZT09PUllLmxlbmd0aClyZXR1cm4gQWUoRGUubGVuZ3RoP0RlWzBdOm51bGwpfUllLmZvckVhY2goX3Q9PntGZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBhdGgsX3Qua2V5LGtlKX0pfSl9c3RhdGljIGRlc2VyaWFs''@;'; put 'put ''aXplKEFlLEZlLFJlKXtsZXQgSWU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihSZT1GZSxGZT1udWxsKSxILnZhbGlkYXRlKEguaXNGdW5jdGlvbihSZSksUmUpLCJzdHJpbmciPT10eXBlb2YgQWUpe2lmKEllPWFlKEFlKSxJZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBSZShJZSl9ZWxz''@;'; put 'put ''ZSBJZT1BZTtjb25zdCBIZT1uZXcgdmUoRmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkllLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpJZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkllLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpJ''@;'; put 'put ''ZS5wcmVmaXhTZWN1cml0eX0pO0hlLl9pbXBvcnRDb29raWVzKEllLERlPT57aWYoRGUpcmV0dXJuIFJlKERlKTtSZShudWxsLEhlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoQWUsRmUpe2NvbnN0IFJlPSJzdHJpbmciPT10eXBlb2YgQWU/SlNPTi5wYXJzZShBZSk6QWUsSWU9bmV3IHZl''@;'; put 'put ''KEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpSZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6UmUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIUllLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFz''@;'; put 'put ''eW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBJZS5faW1wb3J0Q29va2llc1N5bmMoUmUpLEllfX1mdW5jdGlvbiBYZShCZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkFlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3lu''@;'; put 'put ''Y2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgRmUsUmU7aWYodGhpc1tCZV0oLi4uQWUsKEllLEhlKT0+e0ZlPUllLFJlPUhlfSksRmUpdGhyb3cgRmU7cmV0dXJuIFJlfX12ZS5mcm9tSlNPTj12ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25l''@;'; put 'put ''IiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChCZT0+e3ZlLnByb3RvdHlwZVtCZV09aih2ZS5wcm90b3R5cGVbQmVdKX0pLHZlLmRlc2VyaWFsaXpl''@;'; put 'put ''PWoodmUuZGVzZXJpYWxpemUpLEoudmVyc2lvbj1SLEouQ29va2llSmFyPXZlLEouQ29va2llPW90LEouU3RvcmU9TixKLk1lbW9yeUNvb2tpZVN0b3JlPXcsSi5wYXJzZURhdGU9ZyxKLmZvcm1hdERhdGU9eSxKLnBhcnNlPUUsSi5mcm9tSlNPTj1uZSxKLmRvbWFpbk1hdGNoPUMsSi5kZWZh''@;'; put 'put ''dWx0UGF0aD1ULEoucGF0aE1hdGNoPUYsSi5nZXRQdWJsaWNTdWZmaXg9cC5nZXRQdWJsaWNTdWZmaXgsSi5jb29raWVDb21wYXJlPWxlLEoucGVybXV0ZURvbWFpbj1iKDczMjQpLnBlcm11dGVEb21haW4sSi5wZXJtdXRlUGF0aD1mdW5jdGlvbiB3ZShCZSl7aWYoSC52YWxpZGF0ZShILmlz''@;'; put 'put ''U3RyaW5nKEJlKSksIi8iPT09QmUpcmV0dXJuWyIvIl07Y29uc3QgQWU9W0JlXTtmb3IoO0JlLmxlbmd0aD4xOyl7Y29uc3QgRmU9QmUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09RmUpYnJlYWs7QmU9QmUuc3Vic3RyKDAsRmUpLEFlLnB1c2goQmUpfXJldHVybiBBZS5wdXNoKCIvIiksQWV9''@;'; put 'put ''LEouY2Fub25pY2FsRG9tYWluPXgsSi5QcmVmaXhTZWN1cml0eUVudW09b2UsSi5QYXJhbWV0ZXJFcnJvcj1ILlBhcmFtZXRlckVycm9yfSw1NzYxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazpffT1iKDcwNDEpLHA9YigyMjI0KS55LE49Yig3MzI0KS5wZXJt''@;'; put 'put ''dXRlRG9tYWluLHc9Yig4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOkYsZ2V0VXRpbEluc3BlY3Q6SH09YigxMjY5KTtjbGFzcyBSIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpO2Nv''@;'; put 'put ''bnN0IEI9RigpO0ImJih0aGlzW0JdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtIKGopKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKEIsVyxaLHEpe3JldHVybiBxKG51bGwsdGhpcy5pZHhbQl0mJnRoaXMuaWR4W0JdW1ddP3RoaXMuaWR4W0JdW1ddW1pd''@;'; put 'put ''fHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoQixXLFoscSl7Y29uc3QgUT1bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgWiYmKHE9WixaPSEwKSwhQilyZXR1cm4gcShudWxsLFtdKTtsZXQgWDtYPVc/ZnVuY3Rpb24oZ2Upe09iamVjdC5rZXlzKGdlKS5mb3JFYWNoKF9lPT57aWYodyhXLF9l''@;'; put 'put ''KSl7Y29uc3QgVGU9Z2VbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSlRLnB1c2goVGVbU2VdKX19KX06ZnVuY3Rpb24oZ2Upe2Zvcihjb25zdCBfZSBpbiBnZSl7Y29uc3QgVGU9Z2VbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSlRLnB1c2goVGVbU2VdKX19O2NvbnN0IHRlPU4oQixaKXx8W0JdLHJl''@;'; put 'put ''PXRoaXMuaWR4O3RlLmZvckVhY2gob2U9Pntjb25zdCBnZT1yZVtvZV07Z2UmJlgoZ2UpfSkscShudWxsLFEpfXB1dENvb2tpZShCLFcpe3RoaXMuaWR4W0IuZG9tYWluXXx8KHRoaXMuaWR4W0IuZG9tYWluXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtCLmRvbWFpbl1bQi5wYXRo''@;'; put 'put ''XXx8KHRoaXMuaWR4W0IuZG9tYWluXVtCLnBhdGhdPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W0IuZG9tYWluXVtCLnBhdGhdW0Iua2V5XT1CLFcobnVsbCl9dXBkYXRlQ29va2llKEIsVyxaKXt0aGlzLnB1dENvb2tpZShXLFopfXJlbW92ZUNvb2tpZShCLFcsWixxKXt0aGlzLmlk''@;'; put 'put ''eFtCXSYmdGhpcy5pZHhbQl1bV10mJnRoaXMuaWR4W0JdW1ddW1pdJiZkZWxldGUgdGhpcy5pZHhbQl1bV11bWl0scShudWxsKX1yZW1vdmVDb29raWVzKEIsVyxaKXtyZXR1cm4gdGhpcy5pZHhbQl0mJihXP2RlbGV0ZSB0aGlzLmlkeFtCXVtXXTpkZWxldGUgdGhpcy5pZHhbQl0pLFoobnVs''@;'; put 'put ''bCl9cmVtb3ZlQWxsQ29va2llcyhCKXtyZXR1cm4gdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKSxCKG51bGwpfWdldEFsbENvb2tpZXMoQil7Y29uc3QgVz1bXSxaPXRoaXMuaWR4O09iamVjdC5rZXlzKFopLmZvckVhY2goUT0+e09iamVjdC5rZXlzKFpbUV0pLmZvckVhY2godGU9PntP''@;'; put 'put ''YmplY3Qua2V5cyhaW1FdW3RlXSkuZm9yRWFjaChvZT0+e251bGwhPT1vZSYmVy5wdXNoKFpbUV1bdGVdW29lXSl9KX0pfSksVy5zb3J0KChRLFgpPT4oUS5jcmVhdGlvbkluZGV4fHwwKS0oWC5jcmVhdGlvbkluZGV4fHwwKSksQihudWxsLFcpfX1mdW5jdGlvbiBqKFkpe2NvbnN0IEI9T2Jq''@;'; put 'put ''ZWN0LmtleXMoWSk7aWYoMD09PUIubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge30iO2xldCBXPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjtyZXR1cm4gT2JqZWN0LmtleXMoWSkuZm9yRWFjaCgoWixxKT0+e1crPWZ1bmN0aW9uIFAoWSxCKXtsZXQgWj1g''@;'; put 'put ''ICAnJHtZfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhCKS5mb3JFYWNoKChxLFEsWCk9PntaKz1mdW5jdGlvbiBMKFksQil7Y29uc3QgVz0iICAgICI7bGV0IFo9YCR7V30nJHtZfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3Jl''@;'; put 'put ''dHVybiBPYmplY3Qua2V5cyhCKS5mb3JFYWNoKChxLFEsWCk9PntaKz1gICAgICAgJHtxfTogJHtCW3FdLmluc3BlY3QoKX1gLFE8WC5sZW5ndGgtMSYmKForPSIsIiksWis9IlxuIn0pLForPWAke1d9fWAsWn0ocSxCW3FdKSxRPFgubGVuZ3RoLTEmJihaKz0iLCIpLForPSJcbiJ9KSxaKz0i''@;'; put 'put ''ICB9IixafShaLFlbWl0pLHE8Qi5sZW5ndGgtMSYmKFcrPSIsIiksVys9IlxuIn0pLFcrPSJ9IixXfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJn''@;'; put 'put ''ZXRBbGxDb29raWVzIl0uZm9yRWFjaChZPT57Ui5wcm90b3R5cGVbWV09XyhSLnByb3RvdHlwZVtZXSl9KSxKLm09Un0sODk3MTooY2UsSik9PnsidXNlIHN0cmljdCI7Si5VPWZ1bmN0aW9uIGIoRCxfKXtyZXR1cm4gXz09PUR8fDA9PT1ELmluZGV4T2YoXykmJigiLyI9PT1fLnN1YnN0cigt''@;'; put 'put ''MSl8fCIvIj09PUQuc3Vic3RyKF8ubGVuZ3RoLDEpKX19LDczMjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y29uc3QgRD1iKDc1Mik7Si5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uIF8ocCxOKXtjb25zdCB3PUQuZ2V0UHVibGljU3VmZml4KHAse2FsbG93U3BlY2lhbFVzZURvbWFpbjpOfSk7''@;'; put 'put ''aWYoIXcpcmV0dXJuIG51bGw7aWYodz09cClyZXR1cm5bcF07Ii4iPT1wLnNsaWNlKC0xKSYmKHA9cC5zbGljZSgwLC0xKSk7Y29uc3QgSD1wLnNsaWNlKDAsLSh3Lmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5yZXZlcnNlKCk7bGV0IFI9dztjb25zdCBqPVtSXTtmb3IoO0gubGVuZ3RoOylSPWAk''@;'; put 'put ''e0guc2hpZnQoKX0uJHtSfWAsai5wdXNoKFIpO3JldHVybiBqfX0sNzUyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEQ9Yig4NTY2KSxfPVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxwPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO0ouZ2V0''@;'; put 'put ''UHVibGljU3VmZml4PWZ1bmN0aW9uIE4odyxGPXt9KXtjb25zdCBIPXcuc3BsaXQoIi4iKSxSPUhbSC5sZW5ndGgtMV0sUD0hIUYuaWdub3JlRXJyb3I7aWYoRi5hbGxvd1NwZWNpYWxVc2VEb21haW4mJl8uaW5jbHVkZXMoUikpe2lmKEgubGVuZ3RoPjEpcmV0dXJuYCR7SFtILmxlbmd0aC0y''@;'; put 'put ''XX0uJHtSfWA7aWYocC5pbmNsdWRlcyhSKSlyZXR1cm5gJHtSfWB9aWYoIVAmJl8uaW5jbHVkZXMoUikpdGhyb3cgbmV3IEVycm9yKGBDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZmaXggIiR7Un0iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9tYWluLiBUbyBhbGxv''@;'; put 'put ''dyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1YmxpY1N1ZmZpeGVzOiBmYWxzZX0uYCk7cmV0dXJuIEQuZ2V0KHcpfX0sMjIyNDooY2UsSik9PnsidXNlIHN0cmljdCI7Si55PWNsYXNzIGJ7Y29uc3RydWN0''@;'; put 'put ''b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoXyxwLE4sdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKF8scCxOLHcpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9''@;'; put 'put ''cHV0Q29va2llKF8scCl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKF8scCxOKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoXyxwLE4sdyl7dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyhfLHAsTil7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVBbGxDb29r''@;'; put 'put ''aWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoXyl7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSwxMjY5OihjZSxKLGIpPT57ZnVuY3Rpb24gRCgpe3Ry''@;'; put 'put ''eXtyZXR1cm4gYig5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gXygpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfUouZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24odyxGPXt9KXtjb25zdCBSPShGLnJlcXVpcmVVdGlsfHxEKSgpO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihQLEwsWSl7cmV0dXJuIFI/Ui5pbnNwZWN0KFAsTCxZKTp3KFApfX0sSi5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKHc9e30pe3JldHVybih3Lmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fF8pKCl8fGZ1bmN0aW9uIHAoTil7Y29uc3QgRj0oTi5yZXF1aXJl''@;'; put 'put ''VXRpbHx8RCkoKTtyZXR1cm4gRj9GLmluc3BlY3QuY3VzdG9tOm51bGx9KHcpfX0sNzY1MjooY2UsSik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUH1mdW5jdGlvbiBOKFApe3JldHVybiJzdHJpbmciPT10eXBlb2YgUHx8UCBpbnN0YW5j''@;'; put 'put ''ZW9mIFN0cmluZ31mdW5jdGlvbiB3KFApe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChQKX1jbGFzcyBqIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uTCl7c3VwZXIoLi4uTCl9fUouUGFyYW1ldGVyRXJyb3I9aixKLmlzRnVuY3Rpb249YixKLmlzTm9uRW1w''@;'; put 'put ''dHlTdHJpbmc9ZnVuY3Rpb24gRChQKXtyZXR1cm4gTihQKSYmIiIhPT1QfSxKLmlzRGF0ZT1mdW5jdGlvbiBfKFApe3JldHVybiBmdW5jdGlvbiBGKFAsTCl7dHJ5e3JldHVybiBQIGluc3RhbmNlb2YgTH1jYXRjaHtyZXR1cm4hMX19KFAsRGF0ZSkmJmZ1bmN0aW9uIEgoUCl7cmV0dXJuIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBQJiZQJTE9PTB9KFAuZ2V0VGltZSgpKX0sSi5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uIHAoUCl7cmV0dXJuIiI9PT1QfHxQIGluc3RhbmNlb2YgU3RyaW5nJiYiIj09PVAudG9TdHJpbmcoKX0sSi5pc1N0cmluZz1OLEouaXNPYmplY3Q9dyxKLnZhbGlkYXRlPWZ1bmN0''@;'; put 'put ''aW9uIFIoUCxMLFkpe2lmKGIoTCl8fChZPUwsTD1udWxsKSx3KFkpfHwoWT17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhUCl7aWYoIUwpdGhyb3cgbmV3IGooWSk7TChuZXcgaihZKSl9fX0sNDU2OmNlPT57Y2UuZXhwb3J0cz0iNC4xLjMifSw3MDQxOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtK''@;'; put 'put ''LmZyb21DYWxsYmFjaz1mdW5jdGlvbihiKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoRCxfKT0+e2FyZ3VtZW50c1thcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoXT0ocCxOKT0+e2lmKHApcmV0dXJuIF8ocCk7RChOKX0sYXJndW1lbnRzLmxlbmd0aCsrLGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6Yi5uYW1lfSl9LEouZnJvbVByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IEQ9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEQpcmV0dXJuIGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLS0sYi5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbihfPT5EKG51bGwsXyksRCl9LCJuYW1lIix7dmFsdWU6Yi5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsRixI''@;'; put 'put ''LFIpe3JldHVybiBuZXcoSHx8KEg9UHJvbWlzZSkpKGZ1bmN0aW9uKFAsTCl7ZnVuY3Rpb24gWShaKXt0cnl7VyhSLm5leHQoWikpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIEIoWil7dHJ5e1coUi50aHJvdyhaKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhaKXtaLmRvbmU/UChaLnZh''@;'; put 'put ''bHVlKTpmdW5jdGlvbiBqKFApe3JldHVybiBQIGluc3RhbmNlb2YgSD9QOm5ldyBIKGZ1bmN0aW9uKEwpe0woUCl9KX0oWi52YWx1ZSkudGhlbihZLEIpfVcoKFI9Ui5hcHBseSh3LEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksSi5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgXz1iKDU5MjgpLHA9Yig5Nzc4KTtKLkNvbnRleHRNYW5hZ2VyPWNsYXNzIE57Z2V0IGdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldCBnZXREZWZhdWx0TGF1''@;'; put 'put ''bmNoZXJDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfWNvbnN0cnVjdG9yKEYsSCl7dGhpcy5zZXJ2ZXJVcmw9Rix0aGlzLnJlcXVlc3RDbGllbnQ9SCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUg''@;'; put 'put ''Y29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRl''@;'; put 'put ''IGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2Vy''@;'; put 'put ''dmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIs''@;'; put 'put ''IlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLEYmJigwLF8uaXNVcmwpKEYpfWdldENvbXB1dGVDb250ZXh0cyhGKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Okh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5n''@;'; put 'put ''ZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLEYpLmNhdGNoKGo9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoaiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pO3JldHVybihIJiZILml0ZW1zP0guaXRlbXM6W10p''@;'; put 'put ''Lm1hcChqPT4oe2NyZWF0ZWRCeTpqLmNyZWF0ZWRCeSxpZDpqLmlkLG5hbWU6ai5uYW1lLHZlcnNpb246ai52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKEYpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6''@;'; put 'put ''SH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDBgLEYpLmNhdGNoKGo9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoaiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9''@;'; put 'put ''KTtyZXR1cm4oSCYmSC5pdGVtcz9ILml0ZW1zOltdKS5tYXAoaj0+KHtjcmVhdGVkQnk6ai5jcmVhdGVkQnksaWQ6ai5pZCxuYW1lOmoubmFtZSx2ZXJzaW9uOmoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoRixILFIsaixQLEwpe3JldHVybiBEKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoRiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEYsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLGBDb21wdXRlIGNvbnRleHQgJyR7Rn0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlz''@;'; put 'put ''LmdldENvbXB1dGVDb250ZXh0cyhQKSkuZmluZChRPT5RLm5hbWU9PT1GKSl0aHJvdyBuZXcgRXJyb3IoYENvbXB1dGUgY29udGV4dCAnJHtGfScgYWxyZWFkeSBleGlzdHMuYCk7aWYoSCYmIXRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoSCkmJiEoeWllbGQgdGhpcy5n''@;'; put 'put ''ZXRMYXVuY2hlckNvbnRleHRzKFApKS5maW5kKFg9PlgubmFtZT09PUgpKXtjb25zdCBYPWBUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgJHtIfWAscmU9eWllbGQgdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQoSCxYLCJkaXJlY3QiLFApLmNhdGNoKG9lPT57dGhyb3cgbmV3IEVycm9yKGBF''@;'; put 'put ''cnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAke29lfWApfSk7aWYoIXJlfHwhcmUubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuIik7SD1yZS5uYW1lfWxldCBXPXtyZXVzZVNlcnZlclByb2Nlc3NlczohMH07''@;'; put 'put ''UiYmKFc9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFcpLHtydW5TZXJ2ZXJBczpSfSkpO2NvbnN0IFo9e25hbWU6RixsYXVuY2hDb250ZXh0Ontjb250ZXh0TmFtZTpIfHwiIn0sYXR0cmlidXRlczpXfTtMJiZMLmxlbmd0aD9aLmF1dGhvcml6ZWRVc2Vycz1MOlouYXV0aG9yaXpl''@;'; put 'put ''QWxsQXV0aGVudGljYXRlZFVzZXJzPSEwLGomJihaLmVudmlyb25tZW50PXthdXRvRXhlY0xpbmVzOmp9KTtjb25zdHtyZXN1bHQ6cX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHNgLFosUCkuY2F0Y2goUT0+e3Rocm93''@;'; put 'put ''KDAscC5wcmVmaXhNZXNzYWdlKShRLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIHF9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoRixILFI9ImRpcmVjdCIsail7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFGKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChGLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7Rn0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldExhdW5jaGVy''@;'; put 'put ''Q29udGV4dHMoaikpLmZpbmQoVz0+Vy5uYW1lPT09RikpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke0Z9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBZPXtuYW1lOkYsZGVzY3JpcHRpb246SCxsYXVuY2hUeXBlOlJ9LHtyZXN1bHQ6Qn09eWllbGQgdGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxZLGopLmNhdGNoKFc9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoVywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1cm4gQn0pfWVkaXRDb21wdXRlQ29udGV4''@;'; put 'put ''dChGLEgsUil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBqO3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShGKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoRix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBj''@;'; put 'put ''b250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxqPXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoRixSKSxqfHwoaj15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChILmlkLFIpKTtjb25zdHtyZXN1bHQ6UCxldGFnOkx9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHtqLmlkfWAsUikuY2F0Y2goWT0+e3Rocm93IFkmJjQwND09PVkuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7Rn0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuYCk6WX0pO3JldHVybiB5aWVs''@;'; put 'put ''ZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke1AuaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxQKSxIKSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sUC5hdHRyaWJ1dGVzKSxILmF0''@;'; put 'put ''dHJpYnV0ZXMpfSksUix7IklmLU1hdGNoIjpMfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShGLEgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0v''@;'; put 'put ''Y29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7Rn0iKWAsSCkuY2F0Y2goaj0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKShqLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFSfHwhUi5pdGVtc3x8IVIuaXRlbXMubGVuZ3Ro''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7Rn0nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gUi5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChGLEgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtj''@;'; put 'put ''b25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke0Z9YCxIKS5jYXRjaChqPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKGosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5''@;'; put 'put ''IGlkLiAiKX0pO3JldHVybiBSfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKEYsSCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpSfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRl''@;'; put 'put ''eHRzP2xpbWl0PTEwMDAwYCxIPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKEI9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoQiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLGo9Ui5pdGVtc3x8W10sUD1bXSxMPWoubWFwKEI9Pntjb25zdCBXPVsiJXB1dCAmPXN5''@;'; put 'put ''c3VzZXJpZDsiXTtyZXR1cm4oKT0+RihgdGVzdC0ke0IubmFtZX1gLFcsQi5uYW1lLEgsbnVsbCwhMSwhMCwhMCkuY2F0Y2goWj0+Wil9KTtsZXQgWT1bXTtmb3IoY29uc3QgQiBvZiBMKVkucHVzaCh5aWVsZCBCKCkpO3JldHVybiBZLmZvckVhY2goKEIsVyk9PntpZihCJiZCLmxvZyl0cnl7''@;'; put 'put ''bGV0IHE9IiI7Y29uc3QgUT1CLmxvZy5zcGxpdCgiXG4iKS5maW5kKFg9Plguc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpKTtRJiYocT1RLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxQLnB1c2goe2NyZWF0ZWRCeTpqW1ddLmNyZWF0ZWRCeSxpZDpqW1ddLmlkLG5hbWU6altXXS5uYW1lLHZl''@;'; put 'put ''cnNpb246altXXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpxfX0pKX1jYXRjaChaKXt0aHJvdyBafX0pLFB9KX1kZWxldGVDb21wdXRlQ29udGV4dChGLEgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoRiks''@;'; put 'put ''dGhpcy5pc0RlZmF1bHRDb250ZXh0KEYsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IGo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShGLEgpO3JldHVy''@;'; put 'put ''biB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ai5pZH1gLEgpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShGKXtpZighRil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1''@;'; put 'put ''bHRDb250ZXh0KEYsSD10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsUj0iIixqPSExKXtpZihILmluY2x1ZGVzKEYpKXRocm93IG5ldyBFcnJvcihgJHtSfSR7aj8iXG5EZWZhdWx0IGNvbnRleHRzOiIrSC5tYXAoKFAsTCk9PmBcbiR7TCsxfS4gJHtQfWApOiIifWApfX19LDgzMDY6ZnVu''@;'; put 'put ''Y3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosUCxMLFkpe3JldHVybiBuZXcoTHx8KEw9UHJvbWlzZSkpKGZ1bmN0aW9uKFcsWil7ZnVuY3Rpb24gcSh0ZSl7dHJ5e1goWS5uZXh0KHRlKSl9Y2F0Y2gocmUpe1oocmUpfX1m''@;'; put 'put ''dW5jdGlvbiBRKHRlKXt0cnl7WChZLnRocm93KHRlKSl9Y2F0Y2gocmUpe1oocmUpfX1mdW5jdGlvbiBYKHRlKXt0ZS5kb25lP1codGUudmFsdWUpOmZ1bmN0aW9uIEIoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWil7WihXKX0pfSh0ZS52YWx1ZSkudGhlbihx''@;'; put 'put ''LFEpfVgoKFk9WS5hcHBseShqLFB8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihqKXtyZXR1cm4gaiYmai5fX2VzTW9kdWxlP2o6e2RlZmF1bHQ6an19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxKLlNBUzlBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHA9Yig3NzU3KSxOPV8oYig2MjMwKSksdz1iKDc5NSksRj1iKDU5MjgpO0ouU0FTOUFwaUNsaWVudD1jbGFzcyBIe2NvbnN0cnVjdG9yKFAsTCxZKXt0aGlzLnNlcnZlclVybD1QLHRoaXMuam9ic1BhdGg9TCxQJiYoMCxGLmlzVXJsKShQ''@;'; put 'put ''KSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IHcuU2FzOVJlcXVlc3RDbGllbnQoUCxZKX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX1zZXRDb25maWcoUCl7UCYmKHRoaXMuc2VydmVyVXJsPVApfWV4ZWN1dGVTY3JpcHQoUCxMLFkpe3JldHVybiBEKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQubG9naW4oTCxZLHRoaXMuam9ic1BhdGgpO2NvbnN0IFc9UihbLi4uUCwiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0uam9pbigi''@;'; put 'put ''XG4iKSksWj1gL1VzZXIgRm9sZGVycy8ke0x9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgLHE9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrVy5nZXRCb3VuZGFyeSgpLFg9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpxLCJD''@;'; put 'put ''b250ZW50LUxlbmd0aCI6Vy5nZXRMZW5ndGhTeW5jKCksQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LHRlPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK1orIiZfZGVidWc9bG9nIn1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0ZSxXLHZvaWQgMCxxLFgp''@;'; put 'put ''KS5yZXN1bHR9KX19O2NvbnN0IFI9aj0+e2NvbnN0IFA9bmV3IE4uZGVmYXVsdCxMPWBzYXNqcy1leGVjdXRlLXNhczktJHsoMCxwLmdlbmVyYXRlVGltZXN0YW1wKSgiIil9LnNhc2A7cmV0dXJuIFAuYXBwZW5kKEwsaix7ZmlsZW5hbWU6TCxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxQ''@;'; put 'put ''fX0sOTgyMTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih0ZSxyZSxvZSxnZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gemUo''@;'; put 'put ''eSl7dHJ5e2coZ2UubmV4dCh5KSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHooeSl7dHJ5e2coZ2UudGhyb3coeSkpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBnKHkpe3kuZG9uZT9UZSh5LnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2Ygb2U/VGU6bmV3''@;'; put 'put ''IG9lKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oeS52YWx1ZSkudGhlbih6ZSx6KX1nKChnZT1nZS5hcHBseSh0ZSxyZXx8W10pKS5uZXh0KCkpfSl9LE49dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUmJnRlLl9fZXNNb2R1bGU/dGU6e2RlZmF1bHQ6''@;'; put 'put ''dGV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TQVNWaXlhQXBpQ2xpZW50PXZvaWQgMDtjb25zdCB3PWIoNTkyOCksRj1OKGIoNjIzMCkpLEg9YigxMzk1KSxSPWIoNjkwMyksaj1iKDY3MiksUD1iKDkwOTcpLEw9Yig5Nzc4KSxZPWIoMTM0''@;'; put 'put ''MyksQj1iKDcwNCksVz1iKDY0OTYpLFo9YigxNjIyKSxxPWIoMzU2OSksUT1iKDM2Nik7Si5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIFh7Y29uc3RydWN0b3IocmUsb2UsZ2UsX2Upe3RoaXMuc2VydmVyVXJsPXJlLHRoaXMucm9vdEZvbGRlck5hbWU9b2UsdGhpcy5jb250ZXh0TmFtZT1nZSx0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgUi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgai5Db250ZXh0TWFu''@;'; put 'put ''YWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAscmUmJigwLHcuaXNVcmwpKHJlKX1hcHBlbmRSZXF1ZXN0KHJlLG9lLGdlKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxvZSxnZSl9Z2V0IGRlYnVnKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhyZSl7dGhpcy5fZGVidWc9cmUsdGhpcy5zZXNzaW9uTWFuYWdlciYmKHRoaXMuc2Vzc2lvbk1hbmFnZXIuZGVidWc9cmUpfWdldEpvYnNJbkZvbGRlcihyZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG9l''@;'; put 'put ''PSgwLHcuaXNSZWxhdGl2ZVBhdGgpKHJlKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke3JlfWA6cmU7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChvZSl8fCh5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKG9lKSksdGhpcy5mb2xkZXJNYXAuZ2V0KG9lKX0pfWdldENvbmZpZygpe3Jl''@;'; put 'put ''dHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKHJlLG9lKXtyZSYmKHRoaXMuc2VydmVyVXJsPXJlKSxvZSYmKHRoaXMucm9vdEZvbGRlck5hbWU9b2UpfWdldENvbXB1dGVDb250ZXh0cyhyZSl7cmV0dXJu''@;'; put 'put ''IHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhyZSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RGVmYXVsdENvbXB1dGVD''@;'; put 'put ''b250ZXh0c31nZXRMYXVuY2hlckNvbnRleHRzKHJlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250ZXh0cyhyZSl9KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMocmUpe3JldHVybiBw''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBvZT10aGlzLmV4ZWN1dGVTY3JpcHQuYmluZCh0aGlzKTtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRFeGVjdXRhYmxlQ29udGV4dHMob2UscmUpfSl9Y3JlYXRlU2Vzc2lvbihyZSxvZSl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpfZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLG9lKSxUZT1fZS5pdGVtcyYmX2UuaXRlbXMubGVuZ3RoP19lLml0ZW1zLmZpbmQoemU9PnplLm5h''@;'; put 'put ''bWU9PT1yZSk6bnVsbDtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRpb24gY29udGV4dCAke3JlfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgL2NvbXB1dGUvY29udGV4dHMvJHtUZS5pZH0vc2Vzc2lvbnNgLHt9LG9l''@;'; put 'put ''KTtyZXR1cm4gU2V9KX1jcmVhdGVDb21wdXRlQ29udGV4dChyZSxvZSxnZSxfZSxUZSxTZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KHJlLG9lLGdlLF9lLFRlLFNl''@;'; put 'put ''KX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChyZSxvZSxnZT0iZGlyZWN0IixfZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChyZSxvZSxnZSxfZSl9KX1lZGl0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHQocmUsb2UsZ2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNvbnRleHQocmUsb2UsZ2UpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQocmUsb2Upe3JldHVybiBwKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChyZSxvZSl9KX1leGVjdXRlU2NyaXB0KHJlLG9lLGdlLF9lLFRlPW51bGwsU2U9ITEsemU9ITEsej0hMCxnLHk9ITEseCl7cmV0dXJuIHAodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFouZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxyZSxvZSxnZSxfZSxUZSxTZSx6ZSx6LGcseSx4KX0pfWdldEZpbGVDb250ZW50''@;'; put 'put ''KHJlLG9lLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9eWllbGQgdGhpcy5nZXRGaWxlVXJpKHJlLG9lLGdlKS5jYXRjaChUZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShUZSxgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6''@;'; put 'put ''ICR7b2V9IGluIGZvbGRlcjogJHtyZX0uIGApfSk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtfZX0vY29udGVudGAsZ2UpLnRoZW4oVGU9PlRlLnJlc3VsdCl9KX11cGRhdGVGaWxlQ29udGVudChyZSxvZSxnZSxfZSl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0RmlsZVVyaShyZSxvZSxfZSkuY2F0Y2goej0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh6LGBFcnJvciB3aGlsZSBnZXR0aW5nIGZpbGUgVVJJIGZvcjogJHtvZX0gaW4gZm9sZGVyOiAke3Jl''@;'; put 'put ''fS4gYCl9KSx7cmVzdWx0OlNlLGV0YWc6emV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX1gLF9lKTtpZighU2V8fCF6ZSl0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtvZX0gZG9lcyBub3QgaGF2ZSBhbiBFVGFnLCBvciByZXF1ZXN0IGZhaWxl''@;'; put 'put ''ZC5gKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9jb250ZW50YCxnZSxfZSx7IklmLU1hdGNoIjp6ZSwiQ29udGVudC1UeXBlIjpTZS5jb250ZW50VHlwZX0pLnRoZW4oej0+ei5yZXN1bHQpfSl9Z2V0Rm9sZGVyKHJlLG9lKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke3JlfWAsb2UpLnRoZW4oZ2U9PmdlLnJlc3VsdCl9KX1jcmVhdGVGaWxlKHJlLG9lLGdlLF9lLFRlKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIWdlJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTshX2UmJmdlJiYoX2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoZ2UsVGUpKTtjb25z''@;'; put 'put ''dCBTZT17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOmBmaWxlbmFtZT0iJHtyZX0iO2B9LHplPW5ldyBGLmRlZmF1bHQ7cmV0dXJuIHplLmFwcGVuZCgiZmlsZSIsb2UscmUpLCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9z''@;'; put 'put ''dChgL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0ke19lfSZ0eXBlRGVmTmFtZT1maWxlI3Jhd1VwbG9hZGAsemUsVGUsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIremUuX2JvdW5kYXJ5LFNlKSkucmVzdWx0fSl9Y3JlYXRlRm9sZGVyKHJlLG9lLGdlLF9lLFRlKXtyZXR1''@;'; put 'put ''cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgU2U9RC5sb2dnZXJ8fF87aWYoIW9lJiYhZ2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtpZighZ2UmJm9lKWlmKGdlPXlpZWxkIHRoaXMuZ2V0''@;'; put 'put ''Rm9sZGVyVXJpKG9lLF9lKSl7aWYoVGUpe2NvbnN0IHo9b2UrIi8iK3JlOyh5aWVsZCB0aGlzLmdldEZvbGRlclVyaSh6LF9lKSkmJih5aWVsZCB0aGlzLmRlbGV0ZUZvbGRlcihvZSsiLyIrcmUsX2UpKX19ZWxzZXtTZS5pbmZvKGBQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyR7b2V9JyBpcyBu''@;'; put 'put ''b3QgcHJlc2VudC5gKTtjb25zdCB6PW9lLnN1YnN0cmluZygwLG9lLmxhc3RJbmRleE9mKCIvIikpLGc9YCR7b2Uuc3BsaXQoIi8iKS5wb3AoKX1gO2lmKCIiPT09eil0aHJvdyBuZXcgSC5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcihvZSx0aGlzLnNlcnZlclVybCxfZSk7U2UuaW5mbyhgQ3Jl''@;'; put 'put ''YXRpbmcgcGFyZW50IGZvbGRlcjpcbicke2d9JyBpbiAnJHt6fSdgKTtjb25zdCB5PXlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKGcseix2b2lkIDAsX2UpO1NlLmluZm8oYFBhcmVudCBmb2xkZXIgJyR7Z30nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLmApLGdlPWAvZm9sZGVycy9m''@;'; put 'put ''b2xkZXJzLyR7eS5pZH1gfWNvbnN0e3Jlc3VsdDp6ZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSR7Z2V9YCx7bmFtZTpyZSx0eXBlOiJmb2xkZXIifSxfZSkuY2F0Y2goej0+e2NvbnN0e21lc3NhZ2U6ZyxyZXNwb25z''@;'; put 'put ''ZTp5fT16O2lmKGcmJnkmJnkuZGF0YSYmeS5kYXRhLm1lc3NhZ2Upe2NvbnN0e3N0YXR1czp4fT15LHttZXNzYWdlOkN9PXkuZGF0YSxUPVtnLENdLm1hcChVPT4vXC4kLy50ZXN0KFUpP1U6YCR7VX0uYCk7dGhyb3chVGUmJjQwOT09PXgmJlQucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBz''@;'; put 'put ''ZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksVC5qb2luKCIgIil9dGhyb3cgen0pO3JldHVybiB5aWVsZCB0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGAke29lfS8ke3JlfWAsX2UpLHplfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihyZSxvZSxnZSxfZSxUZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFnZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIV9lJiZnZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGdlLFRlKSkseWllbGQgdGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkRlZmluaXRpb25zL2RlZmluaXRpb25zP3BhcmVudEZvbGRlclVyaT0ke19lfWAse25hbWU6cmUscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0VmFsdWU6''@;'; put 'put ''ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6b2V9LFRlKX0pfWdldEF1dGhDb2RlKHJlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgb2U9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU0xvZ29uL29hdXRoL2F1dGhvcml6ZT9jbGllbnRfaWQ9JHtyZX0m''@;'; put 'put ''cmVzcG9uc2VfdHlwZT1jb2RlYDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChvZSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKF9lPT5fZS5yZXN1bHQpLnRoZW4oX2U9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBUZT0iIjtpZigoMCxQLmlzQXV0''@;'; put 'put ''aG9yaXplRm9ybVJlcXVpcmVkKShfZSkpe2NvbnN0IHplPSh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKF9lKSkuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gei5pbm5lckhUTUw9''@;'; put 'put ''emUsVGU9ei5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCxUZX17Y29uc3QgU2U9X2Uuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0semU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHplLmlubmVySFRNTD1TZSx6ZSYmKFRl''@;'; put 'put ''PXplLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxUZX19KSkuY2F0Y2goKCk9Pm51bGwpfSl9Z2V0QWNjZXNzVG9rZW4ocmUsb2UsZ2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxxLmdldEFjY2Vzc1Rva2VuRm9yVml5''@;'; put 'put ''YSkodGhpcy5yZXF1ZXN0Q2xpZW50LHJlLG9lLGdlKX0pfXJlZnJlc2hUb2tlbnMocmUsb2UsZ2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxRLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQscmUsb2UsZ2UpfSl9ZGVs''@;'; put 'put ''ZXRlQ2xpZW50KHJlLG9lKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9dGhpcy5zZXJ2ZXJVcmwrYC9vYXV0aC9jbGllbnRzLyR7cmV9YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShnZSxvZSkpLnJlc3VsdH0pfWV4ZWN1''@;'; put 'put ''dGVDb21wdXRlSm9iKHJlLG9lLGdlLF9lLFRlLFNlPSEwLHplPSExLHosZz0hMSx5KXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHg9KFRlfHx7fSkuYWNjZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjp4fT15aWVsZCgwLEIuZ2V0VG9rZW5zKSh0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShyZSkmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZSIpO2NvbnN0IEM9''@;'; put 'put ''cmUuc3BsaXQoIi8iKSxUPUMucG9wKCksVj1DLmpvaW4oIi8iKSxVPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKHJlKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke1Z9YDpWO3lpZWxkIHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoVSx4KS5jYXRjaChuZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdl''@;'; put 'put ''KShuZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pO2NvbnN0IEU9dGhpcy5mb2xkZXJNYXAuZ2V0KFUpO2lmKCFFKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtVfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nYCk7Y29uc3QgbT1F''@;'; put 'put ''Py5maW5kKG5lPT5uZS5uYW1lPT09VCk7aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtsZXQgQT1tPy5jb2RlO2lmKCFBKXtjb25zdCBuZT1tPy5saW5rcy5maW5kKHdlPT4iZ2V0UmVzb3VyY2UiPT09d2UucmVsKTtpZighbmUpdGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''Ukkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtjb25zdHtyZXN1bHQ6bGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtuZS5ocmVmfWAseCkuY2F0Y2god2U9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkod2UsIkVycm9yIHdo''@;'; put 'put ''aWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSk7QT1sZS5jb2RlLG0uY29kZT1BfUF8fChBPSIiKTtjb25zdCBhZT1BLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5zcGxpdCgiXG4iKTtyZXR1cm4geWllbGQgdGhpcy5leGVjdXRlU2NyaXB0KHJlLGFlLG9lLFRlLF9lLGdlLHplLFNlLHos''@;'; put 'put ''Zyx5KX0pfWV4ZWN1dGVKb2IocmUsb2UsZ2UsX2UsVGUpe3ZhciBTZSx6ZSx6O3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgZz0oVGV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOmd9PXlpZWxkKDAsQi5nZXRUb2tlbnMpKHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKHJlKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO2NvbnN0IHk9cmUu''@;'; put 'put ''c3BsaXQoIi8iKSx4PXkucG9wKCksQz15LmpvaW4oIi8iKSxUPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKHJlKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke0N9YDpDO3lpZWxkIHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoVCxnKTtjb25zdCBWPXRoaXMuZm9sZGVyTWFwLmdldChUKTtpZighVil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7VH0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtjb25zdCBVPVY/LmZpbmQoQWU9PkFlLm5hbWU9PT14KTtsZXQgRT1bXTtpZihfZSYmT2JqZWN0LmtleXMoX2UpLmxlbmd0aCYmKEU9eWllbGQgdGhpcy51cGxv''@;'; put 'put ''YWRUYWJsZXMoX2UsZykpLCFVKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7Y29uc3QgbT1udWxsPT09KFNlPVU/LmxpbmtzLmZpbmQoQWU9PiJnZXRSZXNvdXJjZSI9PT1BZS5yZWwpKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLmhyZWYse3Jlc3VsdDpBfT15aWVsZCB0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7bX1gLGcpLGFlPXtfY29udGV4dE5hbWU6b2UsX3Byb2dyYW06YCR7VH0vJHt4fWAsX3dlYmluX2ZpbGVfY291bnQ6RS5sZW5ndGgsX09NSVRKU09OTElTVElORzohMCxfT01JVEpTT05MT0c6ITAsX29taXRTZXNzaW9u''@;'; put 'put ''UmVzdWx0czohMSxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH07Z2UmJihhZS5fT01JVFRFWFRMT0c9ImZhbHNlIixhZS5fb21pdFNlc3Npb25SZXN1bHRzPSJmYWxzZSIsYWUuX0RFQlVHPTEzMSksRS5mb3JFYWNoKChBZSxGZSk9PnthZVtgX3dlYmluX2ZpbGV1cmkke0Zl''@;'; put 'put ''KzF9YF09YC9maWxlcy9maWxlcy8ke0FlLmZpbGUuaWR9YCxhZVtgX3dlYmluX25hbWUke0ZlKzF9YF09QWUudGFibGVOYW1lfSk7Y29uc3QgbmU9e25hbWU6YGV4ZWMtJHt4fWAsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGpvYkRlZmluaXRpb246QSxhcmd1bWVudHM6YWV9LHty''@;'; put 'put ''ZXN1bHQ6bGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JFeGVjdXRpb24vam9icz9fYWN0aW9uPXdhaXRgLG5lLGcpLHdlPXlpZWxkIHRoaXMucG9sbEpvYlN0YXRlKGxlLFRlKS5jYXRjaChBZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdl''@;'; put 'put ''KShBZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pLHtyZXN1bHQ6VWV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzLyR7bGUuaWR9YCxnKTtsZXQgUWUsb3Q7Y29uc3QgTWU9VWUucmVzdWx0c1si''@;'; put 'put ''X3dlYm91dC5qc29uIl0sdmU9VWUubGlua3MuZmluZChBZT0+ImxvZyI9PT1BZS5yZWwpO2lmKE1lJiYoUWU9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke01lfS9jb250ZW50YCxnLCJ0ZXh0L3BsYWluIikpLGdlJiZ2ZSYmKG90PXlpZWxkIHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt2ZS5ocmVmfS9jb250ZW50YCxnKS50aGVuKEFlPT5BZS5yZXN1bHQuaXRlbXMubWFwKEZlPT5GZS5saW5lKS5qb2luKCJcbiIpKSksImZhaWxlZCI9PT13ZSl0aHJvdyBuZXcgSC5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09''@;'; put 'put ''KHplPVVlLmVycm9yKXx8dm9pZCAwPT09emU/dm9pZCAwOnplLmVycm9yQ29kZSxudWxsPT09KHo9VWUuZXJyb3IpfHx2b2lkIDA9PT16P3ZvaWQgMDp6Lm1lc3NhZ2Usb3QpO2NvbnN0IFhlPXtyZXN1bHQ6UWU/LnJlc3VsdCxsb2c6b3R9LHtlcnJvcjpCZX09VWU7cmV0dXJuIEJlJiYoWGUu''@;'; put 'put ''ZXJyb3I9QmUpLFhlfSl9cG9wdWxhdGVGb2xkZXJNYXAocmUsb2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShyZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtyZX1gOnJlO2lmKHRoaXMuZm9sZGVyTWFw''@;'; put 'put ''LmdldChnZSkpcmV0dXJuO2NvbnN0IF9lPSIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9IitnZSx7cmVzdWx0OlRlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke19lfWAsb2UpLmNhdGNoKHo9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0''@;'; put 'put ''dGluZyBmb2xkZXIuICIpfSk7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgVGhlIHBhdGggJHtnZX0gZG9lcyBub3QgZXhpc3Qgb24gJHt0aGlzLnNlcnZlclVybH1gKTtjb25zdHtyZXN1bHQ6U2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvJHtUZS5p''@;'; put 'put ''ZH0vbWVtYmVycz9saW1pdD0ke1RlLm1lbWJlckNvdW50PDUwMD81MDA6VGUubWVtYmVyQ291bnR9YCxvZSkuY2F0Y2goej0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIG1lbWJlcnMuICIpfSk7dGhpcy5mb2xkZXJNYXAuc2V0KGdlLFNlLml0ZW1z''@;'; put 'put ''KX0pfXBvbGxKb2JTdGF0ZShyZSxvZSxnZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkucG9sbEpvYlN0YXRlKSh0aGlzLnJlcXVlc3RDbGllbnQscmUsdGhpcy5kZWJ1ZyxvZSxnZSl9KX11cGxvYWRUYWJsZXMocmUsb2Upe3JldHVybiBwKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxXLnVwbG9hZFRhYmxlcykodGhpcy5yZXF1ZXN0Q2xpZW50LHJlLG9lKX0pfWdldEZvbGRlckRldGFpbHMocmUsb2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT0oMCx3LmlzVXJp''@;'; put 'put ''KShyZSk/cmU6YC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke3JlfWAse3Jlc3VsdDpfZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke2dlfWAsb2UpLmNhdGNoKFRlPT57aWYoVGUgaW5zdGFuY2VvZiBILkNlcnRpZmljYXRlRXJyb3IpdGhy''@;'; put 'put ''b3cgVGU7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lmKF9lKXJldHVybiBfZX0pfWdldEZvbGRlclVyaShyZSxvZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGdlPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhyZSxvZSk7aWYoZ2UpcmV0dXJuYC9m''@;'; put 'put ''b2xkZXJzL2ZvbGRlcnMvJHtnZS5pZH1gfSl9Z2V0RmlsZVVyaShyZSxvZSxnZSl7dmFyIF9lO3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVsZCB0aGlzLmxpc3RGb2xkZXIocmUsZ2UsMWUzLHtyZXR1cm5EZXRhaWxzOiEwfSkuY2F0Y2goemU9''@;'; put 'put ''Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoemUsYEVycm9yIHdoaWxlIGxpc3RpbmcgZm9sZGVyOiAke3JlfS4gYCl9KTtpZighVGV8fCFUZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBObyBtZW1iZXJzIGZvdW5kIGluIGZvbGRlcjogJHtyZX1gKTtjb25zdCBTZT1udWxsPT09KF9lPVRl''@;'; put 'put ''LmZpbmQoemU9PnplLm5hbWU9PT1vZSkpfHx2b2lkIDA9PT1fZT92b2lkIDA6X2UudXJpO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtvZX0gbm90IGZvdW5kIGluIGZvbGRlcjogJHtyZX1gKTtyZXR1cm4gU2V9KX1nZXRSZWN5Y2xlQmluVXJpKHJlKXtyZXR1cm4gcCh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OmdlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvQG15UmVjeWNsZUJpbmAscmUpLmNhdGNoKF9lPT57aWYoX2UgaW5zdGFuY2VvZiBILkNlcnRpZmljYXRl''@;'; put 'put ''RXJyb3IpdGhyb3cgX2U7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lmKGdlKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7Z2UuaWR9YH0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKHJlLG9lKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRo''@;'; put 'put ''aXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUocmUsb2UpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKHJlLG9lKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHRCeUlkKHJlLG9lKX0pfWxpc3RGb2xkZXIocmUsb2UsZ2U9MjAsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT0oMCx3LmlzVXJpKShyZSk/cmU6eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkocmUsb2UpLHtyZXN1bHQ6U2V9PXlpZWxkIHRo''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vbWVtYmVycz9saW1pdD0ke2dlfWAsb2UpO2xldCB6ZT1bXTtyZXR1cm4gU2UmJlNlLml0ZW1zJiYoemU9X2U/LnJldHVybkRldGFpbHM/U2UuaXRlbXM6U2UuaXRlbXMubWFwKHo9PnoubmFtZSkpLHplfSl9bW92''@;'; put 'put ''ZUZvbGRlcihyZSxvZSxnZSxfZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPXJlLnNwbGl0KCIvIikucG9wKCk7aWYoeWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKG9lLF9lKSlnZT1UZTtlbHNle2xldCB4PW9lLnNwbGl0KCIvIik7eC5zcGxp''@;'; put 'put ''Y2UoeC5sZW5ndGgtMSwxKSxvZT14LmpvaW4oIi8iKX1jb25zdCB6ZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShyZSxfZSksej15aWVsZCB0aGlzLmdldEZvbGRlclVyaShvZSxfZSk7aWYoIXplKXJldHVybjtjb25zdCBnPXplPy5zcGxpdCgiLyIpLnBvcCgpLHtyZXN1bHQ6eX09eWllbGQg''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LnBhdGNoKGAke3RoaXMuc2VydmVyVXJsfSR7emV9YCx7aWQ6ZyxuYW1lOmdlLHBhcmVudEZvbGRlclVyaTp6fSxfZSkuY2F0Y2goeD0+e3Rocm93IHguY29kZSYmIkVOT1RGT1VORCI9PT14LmNvZGU/e2JvZHk6e21lc3NhZ2U6YEZvbGRlciAnJHtyZS5zcGxp''@;'; put 'put ''dCgiLyIpLnBvcCgpfScgd2FzIG5vdCBmb3VuZC5gfX06eH0pO3JldHVybiB5fHx2b2lkIDB9KX1kZWxldGVGb2xkZXIocmUsb2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT15aWVsZCB0aGlzLmdldFJlY3ljbGVCaW5Vcmkob2UpLF9lPXJlLnNw''@;'; put 'put ''bGl0KCIvIikucG9wKCl8fCIiLFRlPW5ldyBEYXRlLHplPV9lKyIgIitUZS50b0xvY2FsZURhdGVTdHJpbmcoKSsiICIrVGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7cmV0dXJuIHlpZWxkIHRoaXMubW92ZUZvbGRlcihyZSxnZSx6ZSxvZSl9KX19fSw1OTU2OmZ1bmN0aW9uKGNlLEosYil7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFoscSxRKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbih0ZSxyZSl7ZnVuY3Rpb24gb2UoVGUpe3RyeXtfZShRLm5leHQoVGUpKX1jYXRjaChTZSl7cmUoU2UpfX1mdW5jdGlvbiBnZShU''@;'; put 'put ''ZSl7dHJ5e19lKFEudGhyb3coVGUpKX1jYXRjaChTZSl7cmUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT90ZShUZS52YWx1ZSk6ZnVuY3Rpb24gWCh0ZSl7cmV0dXJuIHRlIGluc3RhbmNlb2YgcT90ZTpuZXcgcShmdW5jdGlvbihyZSl7cmUodGUpfSl9KFRlLnZhbHVlKS50aGVuKG9l''@;'; put 'put ''LGdlKX1fZSgoUT1RLmFwcGx5KFcsWnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBfPWIoNTkyOCkscD1iKDEyMzApLE49Yig5ODIxKSx3PWIoODMwNiksRj1iKDM0NjcpLEg9YigxNTI3KSxSPWIoMzkwMCks''@;'; put 'put ''aj1iKDQ1ODgpLFA9YigzNjAyKSxMPWIoODIxNyksWT17c2VydmVyVXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0cC9leGVjdXRlIixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJsaWMvc2VlZGFw''@;'; put 'put ''cCIsc2VydmVyVHlwZTpSLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206cC5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fTtKLmRlZmF1bHQ9Y2xh''@;'; put 'put ''c3MgQntjb25zdHJ1Y3RvcihaKXt0aGlzLnNhc2pzQ29uZmlnPW5ldyBwLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9hZGVy''@;'; put 'put ''PW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNh''@;'; put 'put ''czlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgcSxRLFgsdGUscmU7eWllbGQgbnVsbD09PShxPXRoaXMud2ViSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1xP3ZvaWQgMDpxLnJlc2VuZFdh''@;'; put 'put ''aXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oUT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PVE/dm9pZCAwOlEucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShYPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1YP3ZvaWQgMDpYLnJlc2Vu''@;'; put 'put ''ZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0odGU9dGhpcy5maWxlVXBsb2FkZXIpfHx2b2lkIDA9PT10ZT92b2lkIDA6dGUucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShyZT10aGlzLnNhc2pzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1yZT92b2lkIDA6cmUu''@;'; put 'put ''cmVzZW5kV2FpdGluZ1JlcXVlc3RzKCl9KSx0aGlzLnNldFZlcmJvc2VNb2RlPXE9Pnt2YXIgUTtudWxsPT09KFE9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09UXx8US5zZXRWZXJib3NlTW9kZShxKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24o''@;'; put 'put ''e30sWSksWiksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1nZXRDc3JmVG9rZW4oWj0iZ2VuZXJhbCIpe3ZhciBxO3JldHVybiBudWxsPT09KHE9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5nZXRDc3JmVG9rZW4oWil9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNv''@;'; put 'put ''ZGU6WixmaWxlTmFtZTpxLGNvbnRleHROYW1lOlEscnVuVGltZTpYLGF1dGhDb25maWc6dGUsYXV0aENvbmZpZ1Nhczk6cmUsZGVidWc6b2V9KXt2YXIgZ2UsX2U7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1''@;'; put 'put ''dGVTY3JpcHQiLFtSLlNlcnZlclR5cGUuU2FzOSxSLlNlcnZlclR5cGUuU2FzanMsUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSl7aWYoIXJlKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9yIHNhczkg''@;'; put 'put ''aXMgbm90IHByb3ZpZGVkIik7cmV0dXJuIHlpZWxkIG51bGw9PT0oZ2U9dGhpcy5zYXM5QXBpQ2xpZW50KXx8dm9pZCAwPT09Z2U/dm9pZCAwOmdlLmV4ZWN1dGVTY3JpcHQoWixyZS51c2VyTmFtZSxyZS5wYXNzd29yZCl9aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2''@;'; put 'put ''ZXJUeXBlLlNhc2pzKXJldHVybiB5aWVsZCBudWxsPT09KF9lPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1fZT92b2lkIDA6X2UuZXhlY3V0ZVNjcmlwdChaLmpvaW4oIlxuIiksWCx0ZSk7aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWEpe2lmKCEoUT1RfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFxKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm4geWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQocSxaLFEsdGUsbnVsbCxvZXx8dGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zy5kZWJ1Zyl9fSl9ZXhlY3V0ZUpvYihaLHEsUSl7dmFyIFg7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbUi5TZXJ2ZXJUeXBlLlNhc2pzXSkseWllbGQgbnVsbD09PShYPXRoaXMu''@;'; put 'put ''c2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1YP3ZvaWQgMDpYLmV4ZWN1dGVKb2IoWixxLFEpfSl9Z2V0Q29tcHV0ZUNvbnRleHRzKFope3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRl''@;'; put 'put ''eHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRzKFopfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhaKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RT''@;'; put 'put ''dXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKFopfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk''@;'; put 'put ''KCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhaKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhaKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFoscSxRLFgs''@;'; put 'put ''dGUscmUpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRl''@;'; put 'put ''Q29udGV4dChaLHEsUSxYLHRlLHJlKX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChaLHEsUSxYKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW1IuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChaLHEsUSxYKX0pfWVkaXRDb21wdXRlQ29udGV4dChaLHEsUSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk''@;'; put 'put ''KCJlZGl0Q29tcHV0ZUNvbnRleHQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5lZGl0Q29tcHV0ZUNvbnRleHQoWixxLFEpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoWixxKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoWixxKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFoscSl7''@;'; put 'put ''cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0''@;'; put 'put ''QnlOYW1lKFoscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoWixxKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQg''@;'; put 'put ''dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChaLHEpfSl9Y3JlYXRlU2Vzc2lvbihaLHEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1IuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oWixxKX0pfWNyZWF0ZUZvbGRlcihaLHEsUSxYLHRlLHJlKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRlP3lpZWxkIHRlLmNyZWF0ZUZvbGRlciha''@;'; put 'put ''LHEsUSxYLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRm9sZGVyKFoscSxRLFgscmUpfSl9Y3JlYXRlRmlsZShaLHEsUSxYLHRlLHJlKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHJlP3lpZWxkIHJlLmNyZWF0ZUZpbGUoWixx''@;'; put 'put ''LFEsWCx0ZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZpbGUoWixxLFEsWCx0ZSl9KX1nZXRGaWxlQ29udGVudChaLHEsUSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRGaWxlQ29u''@;'; put 'put ''dGVudCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZpbGVDb250ZW50KFoscSxRKX0pfXVwZGF0ZUZpbGVDb250ZW50KFoscSxRLFgpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01l''@;'; put 'put ''dGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChaLHEsUSxYKX0pfWdldEZvbGRlcihaLHEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKFoscSl9KX1kZWxldGVGb2xkZXIoWixxKXt2YXIgUTtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUZvbGRlciIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShRPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVE/dm9pZCAwOlEuZGVsZXRlRm9sZGVyKFoscSl9KX1s''@;'; put 'put ''aXN0Rm9sZGVyKFoscSxRLFg9ITEpe3ZhciB0ZTtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0odGU9dGhpcy5zYXNWaXlh''@;'; put 'put ''QXBpQ2xpZW50KXx8dm9pZCAwPT09dGU/dm9pZCAwOnRlLmxpc3RGb2xkZXIoWixxLFEse3JldHVybkRldGFpbHM6WH0pfSl9bW92ZUZvbGRlcihaLHEsUSxYKXt2YXIgdGU7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9y''@;'; put 'put ''dGVkKCJtb3ZlRm9sZGVyIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KHRlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS5tb3ZlRm9sZGVyKFoscSxRLFgpfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihaLHEsUSxYLHRlLHJlKXtyZXR1''@;'; put 'put ''cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHJlP3lpZWxkIHJlLmNyZWF0ZUpvYkRlZmluaXRpb24oWixxLFEsWCx0ZSk6eWllbGQgdGhp''@;'; put 'put ''cy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUpvYkRlZmluaXRpb24oWixxLFEsWCx0ZSl9KX1nZXRBdXRoQ29kZShaKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbUi5TZXJ2ZXJUeXBl''@;'; put 'put ''LlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QXV0aENvZGUoWil9KX1nZXRBY2Nlc3NUb2tlbihaLHEsUSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tlbiIs''@;'; put 'put ''W1IuU2VydmVyVHlwZS5TYXNWaXlhLFIuU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKFosUSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50''@;'; put 'put ''LmdldEFjY2Vzc1Rva2VuKFoscSxRKX0pfXJlZnJlc2hUb2tlbnMoWixxLFEpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgicmVmcmVzaFRva2VucyIsW1IuU2VydmVyVHlwZS5TYXNWaXlhLFIuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoUSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoWixxLFEpfSl9ZGVsZXRlQ2xpZW50''@;'; put 'put ''KFoscSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoWixxKX0pfWdl''@;'; put 'put ''dFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9Z2V0VXNlck5hbWUoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhaKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmpl''@;'; put 'put ''Y3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksWiksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX0pfXNldERlYnVnU3RhdGUoWil7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1aLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5k''@;'; put 'put ''ZWJ1Zz1aKX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihaLHEsUSxYPXt9KXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYo''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PXAuTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIVp8fCFxKXRocm93IG5ldyBFcnJvcigiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgbG9naW4gbWVjaGFuaXNtLiIp''@;'; put 'put ''O3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKFoscSl9aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBhdmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm4gdGhpcy5hdXRo''@;'; put 'put ''TWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oWCl9KX1sb2dPdXQoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX11cGxvYWRGaWxlKFoscSxRLFg9e30sdGUpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtYPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2ln''@;'; put 'put ''bih7fSx0aGlzLnNhc2pzQ29uZmlnKSxYKTtjb25zdCByZT17ZmlsZXM6cSxwYXJhbXM6UX07cmV0dXJuIHlpZWxkIHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoWixyZSxYLHRlKX0pfXJlcXVlc3QoWixxLFE9e30sWCx0ZSxyZT1bXSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe1E9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLFEpO2NvbnN0IG9lPSgwLF8udmFsaWRhdGVJbnB1dCkocSk7cmV0dXJuIG9lLnN0YXR1cz9RLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNqc0pv''@;'; put 'put ''YkV4ZWN1dG9yLmV4ZWN1dGUoWixxLFEsWCx0ZSxyZSk6US5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwhPVEudXNlQ29tcHV0ZUFwaT9RLnVzZUNvbXB1dGVBcGk/eWllbGQgdGhpcy5jb21wdXRlSm9iRXhlY3V0b3IuZXhlY3V0ZShaLHEsUSxYLHRlKTooUS5jb250''@;'; put 'put ''ZXh0TmFtZXx8KFE9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFEpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWixxLFEsWCx0ZSxyZSkpOlEuc2VydmVyVHlwZT09PVIu''@;'; put 'put ''U2VydmVyVHlwZS5TYXM5JiZRLnVzZXJuYW1lJiZRLnBhc3N3b3JkP3lpZWxkIHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWixxLFEpOnlpZWxkIHRoaXMud2ViSm9iRXhlY3V0b3IuZXhlY3V0ZShaLHEsUSxYLHRlLHJlKTpQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNl''@;'; put 'put ''KG9lLm1zZykpfSl9ZGVwbG95U2VydmljZVBhY2soWixxLFEsWCx0ZT0hMSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKTtsZXQgcmU9bnVsbDtp''@;'; put 'put ''ZihRfHxxKVF8fChRPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxxfHwocT10aGlzLnNhc2pzQ29uZmlnLmFwcExvYyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWE/KHJlPW5ldyBOLlNBU1ZpeWFBcGlDbGllbnQoUSxxLHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSxyZS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSYmKHJlPW5ldyB3LlNBUzlBcGlDbGllbnQoUSx0aGlzLmpvYnNQYXRoLHRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKTtlbHNle2xldCBnZT1udWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhP2dlPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9''@;'; put 'put ''PT1SLlNlcnZlclR5cGUuU2FzOSYmKGdlPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksUT1nZS5zZXJ2ZXJVcmwscT1nZS5yb290Rm9sZGVyTmFtZX1aLm1lbWJlcnNbMF0ubWVtYmVycyYmWi5tZW1iZXJzWzBdLm1lbWJlcnMuc29ydChnZT0+ImZvbGRlciI9PT1nZS50eXBlPy0x''@;'; put 'put ''OjEpO2NvbnN0IG9lPVoubWVtYmVyczt5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhxLG9lLFgscmUsdGUpfSl9c3RhcnRDb21wdXRlSm9iKFoscSxRPXt9LFgsdGUscmUsb2U9ITEsZ2UsX2Upe3ZhciBUZSxTZSx6ZSx6O3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtpZihRPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxRKSx0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLCFRLmNvbnRleHROYW1lKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Q29udGV4dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7cmV0dXJuIF9lPyhudWxsPT09KFRlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVRlfHxUZS5zZXRWZXJib3NlTW9kZShf''@;'; put 'put ''ZSksbnVsbD09PShTZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1TZXx8U2UuZW5hYmxlVmVyYm9zZU1vZGUoKSk6ITE9PT1fZSYmKG51bGw9PT0oemU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09emV8fHplLmRpc2FibGVWZXJib3NlTW9kZSgpKSxudWxsPT09KHo9dGhp''@;'; put 'put ''cy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09ej92b2lkIDA6ei5leGVjdXRlQ29tcHV0ZUpvYihaLFEuY29udGV4dE5hbWUsUS5kZWJ1ZyxxLFgsISF0ZSwhMSxyZSxvZSxnZSl9KX1mZXRjaExvZ0ZpbGVDb250ZW50KFoscSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFoscSkudGhlbihRPT57aWYoIVEpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBwLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5''@;'; put 'put ''e3JldHVybiBKU09OLnN0cmluZ2lmeShRLnJlc3VsdCl9Y2F0Y2goWCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBwLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gVGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixYKSl9fSl9KX1nZXRTYXNSZXF1ZXN0cygpe3Jl''@;'; put 'put ''dHVyblsuLi50aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKV0uc29ydChfLmNvbXBhcmVUaW1lc3RhbXBzKX1jbGVhclNhc1JlcXVlc3RzKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX1zZXR1cENvbmZpZ3VyYXRpb24oKXtpZih2b2lkIDA9PT10aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXtsZXQgWj1gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdG5hbWV9YDtsb2NhdGlvbi5wb3J0JiYoWj1gJHtafToke2xvY2F0aW9uLnBvcnR9''@;'; put 'put ''YCksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9Wn1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJs''@;'; put 'put ''LnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcz9QLlNhc2pzUmVxdWVzdENsaWVudDpqLlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxp''@;'; put 'put ''bWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgSC5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJs''@;'; put 'put ''LHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IE4uU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgdy5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09''@;'; put 'put ''PVIuU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBGLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgTC5GaWxlVXBsb2FkZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2''@;'; put 'put ''ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLndlYkpvYkV4ZWN1dG9yPW5ldyBMLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0''@;'; put 'put ''aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1uZXcgTC5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlz''@;'; put 'put ''LnNhczlKb2JFeGVjdXRvcj1uZXcgTC5TYXM5Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpLHRo''@;'; put 'put ''aXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW5ldyBMLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3IEwuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmws''@;'; put 'put ''dGhpcy5zYXNWaXlhQXBpQ2xpZW50KX1jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoWixxLFEsWCx0ZSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkKDAsXy5hc3luY0ZvckVhY2gpKHEscmU9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3N3''@;'; put 'put ''aXRjaChyZS50eXBlKXtjYXNlImZvbGRlciI6eWllbGQgdGhpcy5jcmVhdGVGb2xkZXIocmUubmFtZSxaLHZvaWQgMCxRLFgsdGUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKHJlLm5hbWUscmUuY29kZSxaLHZvaWQgMCxRLFgpO2JyZWFrO2Nhc2Uic2VydmljZSI6''@;'; put 'put ''eWllbGQgdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKHJlLm5hbWUscmUuY29kZSxaLHZvaWQgMCxRLFgpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmlkZW50aWZpZWQgbWVtYmVyICcke3JlLm5hbWV9JyBwcm92aWRlZC5gKX0iZm9sZGVyIj09PXJlLnR5cGUmJnJlLm1lbWJl''@;'; put 'put ''cnMmJnJlLm1lbWJlcnMubGVuZ3RoJiYoeWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoYCR7Wn0vJHtyZS5uYW1lfWAscmUubWVtYmVycyxRLFgsdGUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFoscSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IXEuaW5j''@;'; put 'put ''bHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtafScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtxLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoWixxKXt2YXIgUTtudWxsPT09KFE9dGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50KXx8dm9pZCAwPT09UXx8US5lbmFibGVWZXJib3NlTW9kZShaLHEpfWRpc2FibGVWZXJib3NlTW9kZSgpe3ZhciBaO251bGw9PT0oWj10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1afHxaLmRpc2FibGVWZXJib3NlTW9kZSgpfX19LDM0Njc6ZnVuY3Rpb24oY2UsSixiKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsTCxZLEIpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFoscSl7ZnVuY3Rpb24gUShyZSl7dHJ5e3RlKEIubmV4dChyZSkpfWNhdGNoKG9lKXtxKG9lKX19ZnVuY3Rpb24gWChyZSl7''@;'; put 'put ''dHJ5e3RlKEIudGhyb3cocmUpKX1jYXRjaChvZSl7cShvZSl9fWZ1bmN0aW9uIHRlKHJlKXtyZS5kb25lP1oocmUudmFsdWUpOmZ1bmN0aW9uIFcoWil7cmV0dXJuIFogaW5zdGFuY2VvZiBZP1o6bmV3IFkoZnVuY3Rpb24ocSl7cShaKX0pfShyZS52YWx1ZSkudGhlbihRLFgpfXRlKChCPUIu''@;'; put 'put ''YXBwbHkoUCxMfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUCl7cmV0dXJuIFAmJlAuX19lc01vZHVsZT9QOntkZWZhdWx0OlB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TQVNqc0Fw''@;'; put 'put ''aUNsaWVudD12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLE49YigzOTAwKSx3PWIoOTc3OCksRj1iKDU3KSxIPWIoMjQ5KSxSPWIoNzA0KTtKLlNBU2pzQXBpQ2xpZW50PWNsYXNzIGp7Y29uc3RydWN0b3IoTCl7dGhpcy5yZXF1ZXN0Q2xpZW50PUx9Z2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0''@;'; put 'put ''KEwpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihMKXtjb25zdHthY2Nlc3NfdG9rZW46WX09eWllbGQoMCxSLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsTi5TZXJ2ZXJUeXBlLlNhc2pzKTtyZXR1cm4gWX19KX1kZXBsb3koTCxZLEIpe3JldHVy''@;'; put 'put ''biBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEIpO0wuYXBwTG9jPUwuYXBwTG9jfHxZO2NvbnN0e3Jlc3VsdDpafT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUv''@;'; put 'put ''ZGVwbG95IixMLFcsdm9pZCAwLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoWil9KX1kZXBsb3laaXBGaWxlKEwsWSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVJl''@;'; put 'put ''YWRTdHJlYW06Qn09YigyOTc1KSxXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFkpLFo9eWllbGQgQihMKSxxPW5ldyBwLmRlZmF1bHQ7cS5hcHBlbmQoImZpbGUiLFopO2NvbnN0IFE9YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7cS5nZXRCb3VuZGFyeSgp''@;'; put 'put ''fWAse3Jlc3VsdDpYfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95L3VwbG9hZCIscSxXLFEse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShYKX0pfWV4ZWN1dGVKb2Io''@;'; put 'put ''TCxZLEIpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPUI/Qi5hY2Nlc3NfdG9rZW46dm9pZCAwO2xldCBaO1o9TC5fcHJvZ3JhbS5zdGFydHNXaXRoKCIvIik/TC5fcHJvZ3JhbTpgJHtZfS8ke0wuX3Byb2dyYW19YDtjb25zdCBxPXlpZWxkIHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHtfZGVidWc6MTMxfSxMKSx7X3Byb2dyYW06Wn0pLFcpO3JldHVybntyZXN1bHQ6cS5yZXN1bHQsbG9nOnEubG9nfX0pfWV4ZWN1dGVTY3JpcHQoTCxZPSJzYXMiLEIp''@;'; put 'put ''e3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEIpLFo9e2xvZzoiIn07cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1dGUiLHtjb2Rl''@;'; put 'put ''OkwscnVuVGltZTpZfSxXKS50aGVuKHE9Pntjb25zdHtsb2c6USxwcmludE91dHB1dDpYLHJlc3VsdDp0ZX09cTtaLmxvZz1RLFgmJihaLnByaW50T3V0cHV0PVgpLHRlJiYoWi53ZWJvdXQ9dGUpfSkuY2F0Y2gocT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSBz''@;'; put 'put ''ZW5kaW5nIFBPU1QgcmVxdWVzdCB0byBleGVjdXRlIGNvZGUuICIpfSksWn0pfWdldEFjY2Vzc1Rva2VuKEwsWSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLEYuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsWSl9''@;'; put 'put ''KX1yZWZyZXNoVG9rZW5zKEwpe3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxILnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwpfSl9fX0sNjkwMzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQx''@;'; put 'put ''NTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEwsWSxCKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihaLHEpe2Z1bmN0aW9uIFEocmUpe3RyeXt0ZShCLm5leHQocmUpKX1jYXRjaChvZSl7cShvZSl9fWZ1bmN0aW9uIFgocmUpe3Ry''@;'; put 'put ''eXt0ZShCLnRocm93KHJlKSl9Y2F0Y2gob2Upe3Eob2UpfX1mdW5jdGlvbiB0ZShyZSl7cmUuZG9uZT9aKHJlLnZhbHVlKTpmdW5jdGlvbiBXKFope3JldHVybiBaIGluc3RhbmNlb2YgWT9aOm5ldyBZKGZ1bmN0aW9uKHEpe3EoWil9KX0ocmUudmFsdWUpLnRoZW4oUSxYKX10ZSgoQj1CLmFw''@;'; put 'put ''cGx5KFAsTHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlNlc3Npb25NYW5hZ2VyPXZvaWQgMDtjb25zdCBOPWIoMTIzMCksdz1iKDEzOTUpLEY9Yig1OTI4KSxIPWIoOTc3OCk7Si5TZXNzaW9uTWFuYWdlcj1jbGFz''@;'; put 'put ''cyBqe2NvbnN0cnVjdG9yKEwsWSxCKXt0aGlzLnNlcnZlclVybD1MLHRoaXMuY29udGV4dE5hbWU9WSx0aGlzLnJlcXVlc3RDbGllbnQ9Qix0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxp''@;'; put 'put ''bmsuICIsdGhpcy5zZXNzaW9ucz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6Ti5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sTCYmKDAsRi5pc1Vy''@;'; put 'put ''bCkoTCl9Z2V0IGRlYnVnKCl7cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhMKXt0aGlzLl9kZWJ1Zz1MfWlzU2Vzc2lvblZhbGlkKEwpe2lmKCFMKXJldHVybiExO2NvbnN0IFk9KChuZXcgRGF0ZSkuZ2V0VGltZSgpLW5ldyBEYXRlKEwuY3JlYXRpb25UaW1lU3RhbXApLmdldFRpbWUo''@;'; put 'put ''KSkvMWUzO3JldHVybiEoIUwuYXR0cmlidXRlc3x8WT49TC5hdHRyaWJ1dGVzLnNlc3Npb25JbmFjdGl2ZVRpbWVvdXQpfXJlbW92ZVNlc3Npb25Gcm9tUG9vbChMKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKFk9PlkuaWQhPT1MLmlkKX1yZW1vdmVFeHBpcmVkU2Vzc2lv''@;'; put 'put ''bnMoKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEw9PnRoaXMuaXNTZXNzaW9uVmFsaWQoTCkpfXRocm93RXJyb3JzKEwsWSl7dGhyb3cgWT8oMCxILnByZWZpeE1lc3NhZ2UpKG5ldyBFcnJvcihMLmpvaW4oIi4gIikpLFkpOm5ldyBFcnJvcihMLm1hcChCPT5CLm1lc3Nh''@;'; put 'put ''Z2U/Qi5tZXNzYWdlOkIpLmpvaW4oIi4gIikpfWdldFNlc3Npb24oTCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9W107bGV0IEI9ITE7Y29uc3QgVz0oKT0+e1kubGVuZ3RoJiYhQiYmKEI9ITAsdGhpcy50aHJvd0Vycm9ycyhZKSl9O2lmKHRoaXMu''@;'; put 'put ''cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGgpe2NvbnN0IFo9dGhpcy5zZXNzaW9uc1swXTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woWiksdGhpcy5jcmVhdGVTZXNzaW9ucyhMKS5jYXRjaChxPT57WS5wdXNoKHEpfSksdGhpcy5jcmVhdGVB''@;'; put 'put ''bmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChxPT57WS5wdXNoKHEpfSksVygpLFp9e3RoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2gocT0+e1kucHVzaChxKX0pLHlpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2gocT0+e1kucHVzaChxKX0pLHRoaXMucmVtb3Zl''@;'; put 'put ''RXhwaXJlZFNlc3Npb25zKCk7Y29uc3QgWj10aGlzLnNlc3Npb25zLnBvcCgpO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChaKSxXKCksWn19KX1nZXRFcnJvck1lc3NhZ2UoTCxZLEIpe3JldHVybmAke0J9IHJlcXVlc3QgdG8gJHtZfSBmYWlsZWQgd2l0aCBzdGF0dXMgY29k''@;'; put 'put ''ZSAke0wucmVzcG9uc2Uuc3RhdHVzfHwidW5rbm93biJ9LiBgK0wucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn1jbGVhclNlc3Npb24oTCxZKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgQj1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtMfWA7cmV0dXJuIHlp''@;'; put 'put ''ZWxkIHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoQixZKS50aGVuKCgpPT57dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihXPT5XLmlkIT09TCl9KS5jYXRjaChXPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsQiwiREVMRVRFIiks''@;'; put 'put ''IkVycm9yIHdoaWxlIGRlbGV0aW5nIHNlc3Npb24uICIpfSl9KX1jcmVhdGVTZXNzaW9ucyhMKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1bXTt0aGlzLnNlc3Npb25zLmxlbmd0aHx8KHlpZWxkKDAsRi5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgx''@;'; put 'put ''KSwoKT0+cCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChCPT57WS5wdXNoKEIpfSl9KSkpLFkubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKFksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIp''@;'; put 'put ''fSl9d2FpdEZvckN1cnJlbnRDb250ZXh0KCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShMPT57Y29uc3QgWT1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuY3VycmVudENvbnRleHQmJih0aGlzLnNldHRpbmdDb250ZXh0PSExLGNsZWFy''@;'; put 'put ''SW50ZXJ2YWwoWSksTCgpKX0sMTAwKX0pfSl9Y3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuY3VycmVudENvbnRleHR8fCh0aGlzLnNldHRpbmdDb250ZXh0P3lpZWxkIHRoaXMud2FpdEZvckN1cnJlbnRDb250''@;'; put 'put ''ZXh0KCk6eWllbGQgdGhpcy5zZXRDdXJyZW50Q29udGV4dChMKSk7Y29uc3QgWT1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3RoaXMuY3VycmVudENvbnRleHQuaWR9L3Nlc3Npb25zYCx7cmVzdWx0OkIsZXRhZzpXfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9z''@;'; put 'put ''dChZLHt9LEwpLmNhdGNoKHE9Pnt0aHJvdygwLEgucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UocSxZLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSk7Qi5ldGFnPVc7Y29uc3QgWj1CLmxpbmtzLmZpbmQocT0+InN0YXRlIj09PXEucmVsKTtp''@;'; put 'put ''ZighWil0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtyZXR1cm4gQi5zdGF0ZVVybD1aLmhyZWYseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihCLFcsTCksdGhpcy5zZXNzaW9ucy5wdXNoKEIpLEJ9KX1zZXRDdXJyZW50Q29udGV4dChMKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuY3VycmVudENvbnRleHQpe2NvbnN0IFk9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgO3RoaXMuc2V0dGluZ0NvbnRleHQ9ITA7Y29uc3R7cmVzdWx0OkJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5n''@;'; put 'put ''ZXQoWSxMKS5jYXRjaChxPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHEsWSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KSxaPShCJiZCLml0ZW1zJiZCLml0ZW1zLmxlbmd0aD9CLml0ZW1zOltdKS5maW5k''@;'; put 'put ''KHE9PnEubmFtZT09PXRoaXMuY29udGV4dE5hbWUpO2lmKCFaKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7dGhpcy5jb250ZXh0TmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAke3RoaXMuc2VydmVyVXJsfS5gKTt0aGlzLmN1cnJlbnRDb250ZXh0PVosUHJvbWlz''@;'; put 'put ''ZS5yZXNvbHZlKCl9fSl9d2FpdEZvclNlc3Npb24oTCxZLEIpe3ZhciBXO3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7c3RhdGU6Wn09TDtjb25zdHtzdGF0ZVVybDpxfT1MLFE9RC5sb2dnZXJ8fF87aWYoWj09PU4uU2Vzc2lvblN0YXRlLlBlbmRpbmd8fFo9''@;'; put 'put ''PT1OLlNlc3Npb25TdGF0ZS5SdW5uaW5nfHxaPT09Ti5TZXNzaW9uU3RhdGUuTm9TdGF0ZSl7aWYocSl7dGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoUS5pbmZvKGBQb2xsaW5nOiAke3RoaXMuc2VydmVyVXJsK3F9YCksdGhpcy5wcmludGVkU2Vzc2lv''@;'; put 'put ''blN0YXRlLnByaW50ZWQ9ITApO2NvbnN0IFg9YCR7dGhpcy5zZXJ2ZXJVcmx9JHtxfT93YWl0PTMwYCx7cmVzdWx0OnRlLHJlc3BvbnNlU3RhdHVzOnJlfT15aWVsZCB0aGlzLmdldFNlc3Npb25TdGF0ZShYLFksQikuY2F0Y2gob2U9Pnt0aHJvdygwLEgucHJlZml4TWVzc2FnZSkob2UsIkVy''@;'; put 'put ''cm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSk7aWYoWj10ZS50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09WiYmKFEuaW5mbyhgQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlzICcke1p9J2ApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0''@;'; put 'put ''ZS5zdGF0ZT1aLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSwhWil7Y29uc3Qgb2U9bmV3IHcuTm9TZXNzaW9uU3RhdGVFcnJvcihyZSx0aGlzLnNlcnZlclVybCtxLG51bGw9PT0oVz1MLmxpbmtzLmZpbmQoZ2U9PiJsb2ciPT09Z2UucmVsKSl8fHZvaWQgMD09PVc/dm9p''@;'; put 'put ''ZCAwOlcuaHJlZik7cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQoZ2U9PmdlLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09b2Uuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChvZSksUS5pbmZvKG9lLm1lc3NhZ2UpKSx5aWVsZCB0aGlzLndhaXRGb3JT''@;'; put 'put ''ZXNzaW9uKEwsWSxCKX1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWn10aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcn1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWn0pfWdldFNlc3Npb25TdGF0ZShMLFksQil7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEwsQiwidGV4dC9wbGFpbiIseyJJZi1Ob25lLU1hdGNoIjpZfSkudGhlbihXPT4oe3Jlc3VsdDpXLnJlc3VsdCxyZXNwb25zZVN0YXR1czpXLnN0YXR1c30pKS5jYXRjaChXPT57dGhyb3coMCxILnByZWZpeE1lc3Nh''@;'; put 'put ''Z2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsTCwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZS4gIil9KX0pfWdldFZhcmlhYmxlKEwsWSxCKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZlclVybH0v''@;'; put 'put ''Y29tcHV0ZS9zZXNzaW9ucy8ke0x9L3ZhcmlhYmxlcy8ke1l9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChXLEIpLmNhdGNoKFo9Pnt0aHJvdygwLEgucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWixXLCJHRVQiKSxgRXJyb3Igd2hpbGUgZmV0Y2hp''@;'; put 'put ''bmcgc2Vzc2lvbiB2YXJpYWJsZSAnJHtZfScuIGApfSl9KX19fSwxNjIyOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsVyxaLHEpe3JldHVybiBuZXcoWnx8KFo9UHJvbWlzZSkp''@;'; put 'put ''KGZ1bmN0aW9uKFgsdGUpe2Z1bmN0aW9uIHJlKF9lKXt0cnl7Z2UocS5uZXh0KF9lKSl9Y2F0Y2goVGUpe3RlKFRlKX19ZnVuY3Rpb24gb2UoX2Upe3RyeXtnZShxLnRocm93KF9lKSl9Y2F0Y2goVGUpe3RlKFRlKX19ZnVuY3Rpb24gZ2UoX2Upe19lLmRvbmU/WChfZS52YWx1ZSk6ZnVuY3Rp''@;'; put 'put ''b24gUShYKXtyZXR1cm4gWCBpbnN0YW5jZW9mIFo/WDpuZXcgWihmdW5jdGlvbih0ZSl7dGUoWCl9KX0oX2UudmFsdWUpLnRoZW4ocmUsb2UpfWdlKChxPXEuYXBwbHkoQixXfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LEouZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7Y29uc3QgTj1iKDc3NTcpLHc9Yig5Nzc4KSxGPWIoMzYwNyksSD1iKDcwNCksUj1iKDU5MjgpLGo9Yig3MTQpLFA9YigxMzQzKSxMPWIoNjQ5Nik7Si5leGVjdXRlT25Db21wdXRlQXBpPWZ1bmN0aW9uIFkoQixXLFoscSxRLFgsdGUscmU9''@;'; put 'put ''bnVsbCxvZT0hMSxnZT0hMSxfZT0hMCxUZSxTZT0hMSx6ZSl7dmFyIHosZztyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHk9KHRlfHx7fSkuYWNjZXNzX3Rva2VuO3RlJiYoe2FjY2Vzc190b2tlbjp5fT15aWVsZCgwLEguZ2V0VG9rZW5zKShCLHRlKSk7Y29u''@;'; put 'put ''c3QgeD1ELmxvZ2dlcnx8Xzt0cnl7bGV0IEM7Y29uc3QgVD15aWVsZCBXLmdldFNlc3Npb24oeSkuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KTtpZihDPVQuaWQsU2Upe2NvbnN0e3Jlc3VsdDpNZX09eWll''@;'; put 'put ''bGQgVy5nZXRWYXJpYWJsZShDLCJTWVNKT0JJRCIseSkuY2F0Y2godmU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KTtpZihNZSYmTWUudmFsdWUpe2NvbnN0IHZlPVo/cS5zcGxpdChaKS5qb2luKCIiKS5y''@;'; put 'put ''ZXBsYWNlKC9eXC8vLCIiKTpxOyhELmxvZ2dlcnx8XykuaW5mbyhgVHJpZ2dlcmluZyAnJHt2ZX0nIHdpdGggUElEICR7TWUudmFsdWV9IGF0ICR7KDAsTi50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpfWApfX1sZXQgVjtWPSgwLFIuaXNSZWxhdGl2ZVBhdGgpKHEpP2BleGVjLSR7cS5p''@;'; put 'put ''bmNsdWRlcygiLyIpP3Euc3BsaXQoIi8iKVsxXTpxfWA6cS5zcGxpdCgiLyIpLnBvcCgpO2xldCBVPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsUi5pc1JlbGF0aXZlUGF0aCkocSk/WisiLyIrcTpxfTt6ZSYmKFU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFUpLHpl''@;'; put 'put ''KSksb2UmJihVPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxVKSx7X0RFQlVHOjEzMX0pKTtsZXQgRT1bXTtyZSYmKEpTT04uc3RyaW5naWZ5KHJlKS5pbmNsdWRlcygiOyIpPyhFPXlpZWxkKDAsTC51cGxvYWRUYWJsZXMpKEIscmUseSkuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJl''@;'; put 'put ''Zml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSksVS5fd2ViaW5fZmlsZV9jb3VudD1FLmxlbmd0aCxFLmZvckVhY2goKE1lLHZlKT0+e1VbYF93ZWJpbl9maWxldXJpJHt2ZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHtNZS5maWxlLmlkfWAsVVtgX3dlYmlu''@;'; put 'put ''X25hbWUke3ZlKzF9YF09TWUudGFibGVOYW1lfSkpOlU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFUpLCgwLGouZm9ybWF0RGF0YUZvclJlcXVlc3QpKHJlKSkpO2NvbnN0IG09e25hbWU6Vnx8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pz''@;'; put 'put ''Iixjb2RlOlEsdmFyaWFibGVzOlUsdmVyc2lvbjoyfSx7cmVzdWx0OkF9PXlpZWxkIEIucG9zdChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzYCxtLHkpLmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBwb3N0aW5nIGpvYi4gIil9KTtpZigh''@;'; put 'put ''X2UpcmV0dXJuIFQ7b2UmJih4LmluZm8oYEpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICcke1Z9Jy5gKSx4LmluZm8oYFlvdSBjYW4gbW9uaXRvciB0aGUgam9iIHByb2dyZXNzIGF0ICcke0IuZ2V0QmFzZVVybCgpfSR7QS5saW5rcy5maW5kKE1lPT4ic3RhdGUiPT09TWUucmVsKS5ocmVm''@;'; put 'put ''fScuYCkpO2NvbnN0IG5lPXlpZWxkKDAsUC5wb2xsSm9iU3RhdGUpKEIsQSxvZSx0ZSxUZSx7c2Vzc2lvbjpULHNlc3Npb25NYW5hZ2VyOld9KS5jYXRjaChNZT0+cCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2NvbnN0IEJlPW51bGw9PT0odmU9TWU/LnJlc3Bv''@;'; put 'put ''bnNlKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmRhdGEsQWU9L2Vycj1bMC05XSosLy5leGVjKEJlKTtpZigiNTExMyI9PT0obnVsbD09PShYZT1BZT8uWzBdKXx8dm9pZCAwPT09WGU/dm9pZCAwOlhlLnNsaWNlKDQsLTEpKSl7Y29uc3QgSWU9QS5saW5rcy5maW5kKEhlPT4idXAiPT09SGUu''@;'; put 'put ''cmVsKS5ocmVmKyIvbG9nIjtNZS5sb2c9eWllbGQoMCxSLmZldGNoTG9nQnlDaHVua3MpKEIseSxJZSwxZTYpfXRocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pKTt0ZSYmKHthY2Nlc3NfdG9rZW46eX09eWllbGQoMCxILmdl''@;'; put 'put ''dFRva2VucykoQix0ZSkpO2NvbnN0e3Jlc3VsdDpsZX09eWllbGQgQi5nZXQoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9icy8ke0EuaWR9YCx5KS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IHdlLFVl''@;'; put 'put ''PSIiO2NvbnN0IFFlPWxlLmxpbmtzLmZpbmQoTWU9PiJsb2ciPT09TWUucmVsKTtpZihvZSYmUWUpe2NvbnN0IE1lPWAke1FlLmhyZWZ9L2NvbnRlbnRgLHZlPW51bGwhPT0oZz1udWxsPT09KHo9bGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PXo/dm9pZCAwOnoubGluZUNvdW50KSYmdm9p''@;'; put 'put ''ZCAwIT09Zz9nOjFlNjtVZT15aWVsZCgwLFIuZmV0Y2hMb2dCeUNodW5rcykoQix5LE1lLHZlKX1pZihuZT09PVAuSm9iU3RhdGUuRmFpbGVkfHxuZT09PVAuSm9iU3RhdGUuRXJyb3IpdGhyb3cgbmV3IEYuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yKGxlLFVlKTtpZighZ2UpcmV0dXJue2pv''@;'; put 'put ''YjpsZSxsb2c6VWV9O2NvbnN0IG90PWAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2ZpbGVyZWZzL193ZWJvdXQvY29udGVudGA7cmV0dXJuIHdlPXlpZWxkIEIuZ2V0KG90LHksInRleHQvcGxhaW4iKS5jYXRjaChNZT0+cCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhl''@;'; put 'put ''O2lmKE1lIGluc3RhbmNlb2YgRi5Ob3RGb3VuZEVycm9yJiZRZSl7Y29uc3QgQmU9YCR7UWUuaHJlZn0vY29udGVudGAsQWU9bnVsbCE9PShYZT1udWxsPT09KHZlPWxlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUubGluZUNvdW50KSYmdm9pZCAwIT09WGU/WGU6MWU2''@;'; put 'put ''O3JldHVybiBVZT15aWVsZCgwLFIuZmV0Y2hMb2dCeUNodW5rcykoQix5LEJlLEFlKSxQcm9taXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6VWV9KX1yZXR1cm57cmVzdWx0OkpTT04uc3RyaW5naWZ5KE1lKX19KSkseWllbGQgVy5jbGVhclNlc3Npb24oQyx5KS5jYXRjaChNZT0+e3Rocm93''@;'; put 'put ''KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4gIil9KSx7cmVzdWx0OndlPy5yZXN1bHQsbG9nOlVlfX1jYXRjaChDKXtpZig0MDQ9PT1DLnN0YXR1cylyZXR1cm4gWShCLFcsWixxLFEsWCx0ZSxyZSxvZSwhMSwhMCk7dGhyb3coMCx3LnByZWZp''@;'; put 'put ''eE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpfX0pfX0sNzQ1ODpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsSCxSLGope3JldHVybiBuZXcoUnx8KFI9UHJvbWlz''@;'; put 'put ''ZSkpKGZ1bmN0aW9uKEwsWSl7ZnVuY3Rpb24gQihxKXt0cnl7WihqLm5leHQocSkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1ooai50aHJvdyhxKSl9Y2F0Y2goUSl7WShRKX19ZnVuY3Rpb24gWihxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBQKEwpe3JldHVybiBM''@;'; put 'put ''IGluc3RhbmNlb2YgUj9MOm5ldyBSKGZ1bmN0aW9uKFkpe1koTCl9KX0ocS52YWx1ZSkudGhlbihCLFcpfVooKGo9ai5hcHBseShGLEh8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRGaWxlU3RyZWFtPXZvaWQg''@;'; put 'put ''MDtjb25zdCBwPWIoMjk3NSksTj1iKDc3NTcpO0ouZ2V0RmlsZVN0cmVhbT0oRixIKT0+Xyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVXcml0ZVN0cmVhbTpSfT1iKDI5NzUpLGo9SHx8RC5jd2QoKTtpZih5aWVsZCgwLHAuaXNGb2xkZXIpKGopKXtjb25z''@;'; put 'put ''dCBMPWAke0YubmFtZXx8ImpvYiJ9LSR7KDAsTi5nZW5lcmF0ZVRpbWVzdGFtcCkoKX0ubG9nYCxCPWIoMjUyMCkuam9pbihIfHxELmN3ZCgpLEwpO3JldHVybiB5aWVsZCBSKEIpfXJldHVybiB5aWVsZCBSKGopfSl9LDEzNDM6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9''@;'; put 'put ''Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxaLHEsUSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUscmUpe2Z1bmN0aW9uIG9lKFRlKXt0cnl7X2UoUS5uZXh0KFRlKSl9Y2F0Y2goU2Upe3JlKFNlKX19ZnVuY3Rpb24g''@;'; put 'put ''Z2UoVGUpe3RyeXtfZShRLnRocm93KFRlKSl9Y2F0Y2goU2Upe3JlKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/dGUoVGUudmFsdWUpOmZ1bmN0aW9uIFgodGUpe3JldHVybiB0ZSBpbnN0YW5jZW9mIHE/dGU6bmV3IHEoZnVuY3Rpb24ocmUpe3JlKHRlKX0pfShUZS52YWx1ZSkudGhl''@;'; put 'put ''bihvZSxnZSl9X2UoKFE9US5hcHBseShXLFp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kb1BvbGw9Si5wb2xsSm9iU3RhdGU9Si5Kb2JTdGF0ZT12b2lkIDA7Y29uc3QgTj1iKDcwNCksdz1iKDEzOTUpLEY9Yigx''@;'; put 'put ''MjMwKSxIPWIoNTkyOCk7dmFyIFIsVzsoVz1SPUouSm9iU3RhdGV8fChKLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFcuUnVubmluZz0icnVubmluZyIsVy5QZW5kaW5nPSJwZW5kaW5nIixXLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsVy5Ob1N0YXRlPSIiLFcuRmFp''@;'; put 'put ''bGVkPSJmYWlsZWQiLFcuRXJyb3I9ImVycm9yIixKLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbiBqKFcsWixxLFEsWCx0ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHJlPUQubG9nZ2VyfHxfLG9lPVg/LnN0cmVhbUxvZ3x8ITEsZ2U9W3ttYXhQb2xsQ291''@;'; put 'put ''bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xsQ291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHttYXhQb2xsQ291bnQ6MzQwMCxwb2xsSW50ZXJ2YWw6NmU0fV07bGV0IF9lO2lmKHZvaWQgMCE9PVgpe19lPVtYXTts''@;'; put 'put ''ZXR7cG9sbFN0cmF0ZWd5Onh9PVg7dm9pZCAwIT09eD8oQih4KSx4PXguc29ydCgoQyxUKT0+Qy5tYXhQb2xsQ291bnQtVC5tYXhQb2xsQ291bnQpLF9lPVsuLi5fZSwuLi54XSk6X2U9Wy4uLl9lLC4uLmdlXX1lbHNlIF9lPWdlO2xldCBUZT1fZS5zcGxpY2UoMCwxKVswXTtYPU9iamVjdC5h''@;'; put 'put ''c3NpZ24oT2JqZWN0LmFzc2lnbih7fSxUZSksWHx8e30pO2NvbnN0IFNlPVoubGlua3MuZmluZCh4PT4ic3RhdGUiPT09eC5yZWwpO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7bGV0IGcsemU9eWllbGQgUChXLFosUi5Ob1N0YXRlLHEs''@;'; put 'put ''USkuY2F0Y2goeD0+KHJlLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke1NlLmhyZWZ9LiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLHgpLFIuVW5hdmFpbGFibGUpKSx6PTA7aWYoemU9PT1SLkNvbXBsZXRlZClyZXR1cm4gUHJvbWlz''@;'; put 'put ''ZS5yZXNvbHZlKHplKTtpZihvZSYmKDAsSC5pc05vZGUpKCkpe2NvbnN0e2dldEZpbGVTdHJlYW06eH09Yig3NDU4KTtnPXlpZWxkIHgoWixYLmxvZ0ZvbGRlclBhdGgpfWxldCB5PXlpZWxkKDAsSi5kb1BvbGwpKFcsWix6ZSxxLHosWCxRLG9lLGcsdGUpO2lmKHplPXkuc3RhdGUsej15LnBv''@;'; put 'put ''bGxDb3VudCwhTCh6ZSl8fHo+PVgubWF4UG9sbENvdW50JiYhX2UubGVuZ3RoKXJldHVybiB6ZTtmb3IoO19lLmxlbmd0aCYmTCh6ZSk7KVRlPV9lLnNwbGljZSgwLDEpWzBdLFgmJihUZS5sb2dGb2xkZXJQYXRoPVgubG9nRm9sZGVyUGF0aCkseT15aWVsZCgwLEouZG9Qb2xsKShXLFosemUs''@;'; put 'put ''cSx6LFRlLFEsb2UsZyx0ZSksemU9eS5zdGF0ZSx6PXkucG9sbENvdW50O3JldHVybiBnJiZnLmVuZCgpLHplfSl9O2NvbnN0IFA9KFcsWixxLFEsWCk9PnAodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgdGU9Wi5saW5rcy5maW5kKHJlPT4ic3RhdGUiPT09cmUucmVs''@;'; put 'put ''KTtpZihMKHEpKXtsZXQgcmU7WCYmKHJlPXlpZWxkKDAsTi5nZXRUb2tlbnMpKFcsWCkpO2NvbnN0e3Jlc3VsdDpvZX09eWllbGQgVy5nZXQoYCR7dGUuaHJlZn0/X2FjdGlvbj13YWl0JndhaXQ9MzAwYCxyZT8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSxRKS5jYXRjaChnZT0+e3Ro''@;'; put 'put ''cm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFouaWQsZ2UpfSk7cmV0dXJuIG9lLnRyaW0oKX1yZXR1cm4gcX0pLEw9Vz0+Vz09PVIuUnVubmluZ3x8Vz09PVIuTm9TdGF0ZXx8Vz09PVIuUGVuZGluZ3x8Vz09PVIuVW5hdmFpbGFibGU7Si5kb1BvbGw9KFcsWixxLFEsWCx0ZSxyZSxvZSxn''@;'; put 'put ''ZSxfZSk9PnAodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFRlLFNlO2NvbnN0e21heFBvbGxDb3VudDp6ZSxwb2xsSW50ZXJ2YWw6en09dGUsZz1ELmxvZ2dlcnx8Xyx5PVoubGlua3MuZmluZChFPT4ic3RhdGUiPT09RS5yZWwpO2xldCBDPTAsVD1xLFY9Ui5Ob1N0YXRl''@;'; put 'put ''LFU9MDtmb3IoO0woVCkmJlg8PXplOyl7aWYoX2UmJlgmJlglMTA9PTAmJnJlKXtjb25zdHtzZXNzaW9uOm0sc2Vzc2lvbk1hbmFnZXI6QX09X2Use3N0YXRlVXJsOmFlLGV0YWc6bmUsaWQ6bGV9PW0se2FjY2Vzc190b2tlbjp3ZX09cmUse2lkOlVlfT1aLHtyZXN1bHQ6UWUscmVzcG9uc2VT''@;'; put 'put ''dGF0dXM6b3R9PXlpZWxkIEEuZ2V0U2Vzc2lvblN0YXRlKGFlLG5lLHdlKS5jYXRjaCh2ZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLHZlKX0pLE1lPXZlPT5bRi5TZXNzaW9uU3RhdGUuUnVubmluZyxGLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyh2ZSk7aWYoIU1l''@;'; put 'put ''KFFlKXx8MjAwIT09b3Qpe0EuY2xlYXJTZXNzaW9uKGxlLHdlKTtjb25zdCB2ZT1NZShRZSk/YFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICR7b3R9LmA6YFNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5p''@;'; put 'put ''bmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnJHtRZX0nYDt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihVZSxuZXcgRXJyb3IodmUpKX19VD15aWVsZCBQKFcsWixULFEscmUpLmNhdGNoKG09PntpZihDKyssWD49emV8fEM+PTUpdGhyb3cgbTtyZXR1cm4gZy5lcnJvcihg''@;'; put 'put ''RXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHt5LmhyZWZ9LiBSZXN1bWluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLG0pLFIuVW5hdmFpbGFibGV9KSxYKys7Y29uc3QgRT1aLmxpbmtzLmZpbmQobT0+InNlbGYiPT09bS5yZWwpLmhyZWY7aWYob2Upe2NvbnN0''@;'; put 'put ''e3Jlc3VsdDptfT15aWVsZCBXLmdldChFLHJlPy5hY2Nlc3NfdG9rZW4pLEE9bnVsbCE9PShTZT1udWxsPT09KFRlPW0ubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVRlP3ZvaWQgMDpUZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1TZT9TZToxZTYse3NhdmVMb2c6YWV9PSgwLEguaXNOb2RlKSgp''@;'; put 'put ''P2IoMjA4MCk6e3NhdmVMb2c6bnVsbH07YWUmJih5aWVsZCBhZShaLFcsVSxBLGdlLHJlPy5hY2Nlc3NfdG9rZW4pKSxVKz1BfVEmJlYhPT1UJiYoZy5pbmZvKGBQb2xsaW5nOiAke1cuZ2V0QmFzZVVybCgpK0V9L3N0YXRlYCksZy5pbmZvKGBDdXJyZW50IGpvYiBzdGF0ZTogJHtUfWApLFY9''@;'; put 'put ''VCksVCE9PVIuVW5hdmFpbGFibGUmJkM+MCYmKEM9MCksVCE9PVIuQ29tcGxldGVkJiYoeWllbGQoMCxILmRlbGF5KSh6KSl9cmV0dXJue3N0YXRlOlQscG9sbENvdW50Olh9fSk7Y29uc3QgQj1XPT57Y29uc3QgWj0ocSxRKT0+e3Rocm93IG5ldyBFcnJvcihgUG9sbCBzdHJhdGVnaWVzIGFy''@;'; put 'put ''ZSBub3QgdmFsaWQuJHtxP2AgJHtxfWA6IiJ9JHtRP2AgSW52YWxpZCBwb2xsIHN0cmF0ZWd5OiBcbiR7SlNPTi5zdHJpbmdpZnkoUSxudWxsLDIpfWA6IiJ9YCl9O1cuZm9yRWFjaCgocSxRKT0+e2NvbnN0e21heFBvbGxDb3VudDpYLHBvbGxJbnRlcnZhbDp0ZX09cTtYPDE/WigiJ21heFBv''@;'; put 'put ''bGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSk6MCE9PVE/WDw9V1tRLTFdLm1heFBvbGxDb3VudCYmWigiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAnbWF4UG9sbENvdW50JyBpbiBwcmV2aW91cyBwb2xsIHN0cmF0ZWd5LiIscSk6dGU8MSYmWigi''@;'; put 'put ''J3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSl9KX19LDIwODA6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxSLGosUCl7cmV0dXJuIG5ldyhqfHwo''@;'; put 'put ''aj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxCKXtmdW5jdGlvbiBXKFEpe3RyeXtxKFAubmV4dChRKSl9Y2F0Y2goWCl7QihYKX19ZnVuY3Rpb24gWihRKXt0cnl7cShQLnRocm93KFEpKX1jYXRjaChYKXtCKFgpfX1mdW5jdGlvbiBxKFEpe1EuZG9uZT9ZKFEudmFsdWUpOmZ1bmN0aW9uIEwoWSl7''@;'; put 'put ''cmV0dXJuIFkgaW5zdGFuY2VvZiBqP1k6bmV3IGooZnVuY3Rpb24oQil7QihZKX0pfShRLnZhbHVlKS50aGVuKFcsWil9cSgoUD1QLmFwcGx5KEgsUnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnNhdmVMb2c9dm9p''@;'; put 'put ''ZCAwO2NvbnN0IE49Yig1OTI4KSx3PWIoNjEzMSk7Si5zYXZlTG9nPWZ1bmN0aW9uIEYoSCxSLGosUCxMLFkpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighWSl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0guaWR9IGNhbm5vdCBiZSBmZXRjaGVk''@;'; put 'put ''IHdpdGhvdXQgYSB2YWxpZCBhY2Nlc3MgdG9rZW4uYCk7aWYoIUwpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtILmlkfSBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLmApO2NvbnN0IEI9RC5sb2dnZXJ8fF8sVz1ILmxpbmtzLmZpbmQocT0+''@;'; put 'put ''ImxvZyI9PT1xLnJlbCk7aWYoIVcpdGhyb3cgbmV3IEVycm9yKGBMb2cgVVJMIGZvciBqb2IgJHtILmlkfSB3YXMgbm90IGZvdW5kLmApO2NvbnN0IFo9eWllbGQoMCxOLmZldGNoTG9nKShSLFksYCR7Vy5ocmVmfS9jb250ZW50YCxqLFApO0IuaW5mbyhgV3JpdGluZyBsb2dzIHRvICR7TC5w''@;'; put 'put ''YXRofWApLHlpZWxkKDAsdy53cml0ZVN0cmVhbSkoTCxafHwiIil9KX19LDY0OTY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsRixILFIpe3JldHVybiBuZXcoSHx8KEg9UHJvbWlzZSkpKGZ1bmN0aW9uKFAsTCl7''@;'; put 'put ''ZnVuY3Rpb24gWShaKXt0cnl7VyhSLm5leHQoWikpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIEIoWil7dHJ5e1coUi50aHJvdyhaKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhaKXtaLmRvbmU/UChaLnZhbHVlKTpmdW5jdGlvbiBqKFApe3JldHVybiBQIGluc3RhbmNlb2YgSD9QOm5l''@;'; put 'put ''dyBIKGZ1bmN0aW9uKEwpe0woUCl9KX0oWi52YWx1ZSkudGhlbihZLEIpfVcoKFI9Ui5hcHBseSh3LEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IF89Yig5Nzc4KSxw''@;'; put 'put ''PWIoMjQwMik7Si51cGxvYWRUYWJsZXM9ZnVuY3Rpb24gTih3LEYsSCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9W107Zm9yKGNvbnN0IGogaW4gRil7Y29uc3QgUD0oMCxwLmNvbnZlcnRUb0NTVikoRixqKTtpZigiRVJST1I6IExBUkdFIFNUUklO''@;'; put 'put ''RyBMRU5HVEgiPT09UCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgTD15aWVsZCB3LnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLFAsSCkuY2F0Y2goWT0+e3Ro''@;'; put 'put ''cm93KDAsXy5wcmVmaXhNZXNzYWdlKShZLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KTtSLnB1c2goe3RhYmxlTmFtZTpqLGZpbGU6TC5yZXN1bHR9KX1yZXR1cm4gUn0pfX0sNjEzMTpmdW5jdGlvbihjZSxKKXsidXNlIHN0cmljdCI7dmFyIGI9dGhpcyYmdGhpcy5fX2F3YWl0''@;'; put 'put ''ZXJ8fGZ1bmN0aW9uKF8scCxOLHcpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKEgsUil7ZnVuY3Rpb24gaihZKXt0cnl7TCh3Lm5leHQoWSkpfWNhdGNoKEIpe1IoQil9fWZ1bmN0aW9uIFAoWSl7dHJ5e0wody50aHJvdyhZKSl9Y2F0Y2goQil7UihCKX19ZnVuY3Rpb24g''@;'; put 'put ''TChZKXtZLmRvbmU/SChZLnZhbHVlKTpmdW5jdGlvbiBGKEgpe3JldHVybiBIIGluc3RhbmNlb2YgTj9IOm5ldyBOKGZ1bmN0aW9uKFIpe1IoSCl9KX0oWS52YWx1ZSkudGhlbihqLFApfUwoKHc9dy5hcHBseShfLHB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi53cml0ZVN0cmVhbT12b2lkIDAsSi53cml0ZVN0cmVhbT0oXyxwKT0+Yih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKE4sdyk9PntfLndyaXRlKHArIlxuIixGPT57Rj93KEYpOk4oITApfSl9KX0p''@;'; put 'put ''fSwyODUxOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNTEwOCksXz1iKDQxNTUpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWixxLFEpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLHJlKXtmdW5jdGlvbiBvZShUZSl7dHJ5''@;'; put 'put ''e19lKFEubmV4dChUZSkpfWNhdGNoKFNlKXtyZShTZSl9fWZ1bmN0aW9uIGdlKFRlKXt0cnl7X2UoUS50aHJvdyhUZSkpfWNhdGNoKFNlKXtyZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3RlKFRlLnZhbHVlKTpmdW5jdGlvbiBYKHRlKXtyZXR1cm4gdGUgaW5zdGFuY2VvZiBxP3Rl''@;'; put 'put ''Om5ldyBxKGZ1bmN0aW9uKHJlKXtyZSh0ZSl9KX0oVGUudmFsdWUpLnRoZW4ob2UsZ2UpfV9lKChRPVEuYXBwbHkoVyxafHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQXV0aE1hbmFnZXI9dm9pZCAwO2NvbnN0IE49''@;'; put 'put ''YigzOTAwKSx3PWIoMTM5NSksRj1iKDU5MjgpLEg9YigxMTcwKSxSPWIoNTQxOCksaj1iKDQ1ODIpLFA9Yig2NTQ3KSxMPWIoMTUyNyk7Si5BdXRoTWFuYWdlcj1jbGFzcyBZe2NvbnN0cnVjdG9yKFoscSxRLFgpe3RoaXMuc2VydmVyVXJsPVosdGhpcy5zZXJ2ZXJUeXBlPXEsdGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50PVEsdGhpcy5sb2dpbkNhbGxiYWNrPVgsdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT10ZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTi5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHRlPy5pZDtjYXNlIE4uU2VydmVyVHlwZS5TYXM5OnJldHVybiIiO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiB0ZT8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gRC5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RV''@;'; put 'put ''c2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPXRlPT57c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBOLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gdGU/Lm5hbWU7Y2FzZSBOLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxILmV4dHJhY3RVc2Vy''@;'; put 'put ''TG9uZ05hbWVTYXM5KSh0ZSk7Y2FzZSBOLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIHRlPy5kaXNwbGF5TmFtZTtkZWZhdWx0OnJldHVybiBELmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPXRl''@;'; put 'put ''PT57bGV0IHJlPXRlWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1yZVswXSl7cmU9cmUuc3Vic3RyKDEpO2NvbnN0IG9lPXRoaXMuc2VydmVyVXJsP2Ake3RoaXMuc2VydmVyVXJsfS8ke3JlfWA6YCR7cmV9YDt0aGlzLmxvZ2luVXJsPXRoaXMuc2VydmVyVHlwZT09PU4uU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhP29lOm9lLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpfX0sdGhpcy5sb2dpblVybD0iL1NBU0xvZ29uL2xvZ2luIix0aGlzLmxvZ291dFVybD10aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzOT8iL1NBU0xvZ29uL2xv''@;'; put 'put ''Z291dD8iOnRoaXMuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXNWaXlhPyIvU0FTTG9nb24vbG9nb3V0LmRvPyI6Ii9TQVNMb2dvbi9sb2dvdXQiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPXRoaXMuc2VydmVyVXJsK3RoaXMucmVkaXJlY3RlZExvZ2luVXJsfXJlZGlyZWN0ZWRMb2dJ''@;'; put 'put ''bih7b25Mb2dnZWRPdXQ6Wn0pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOnEsdXNlck5hbWU6USx1c2VyTG9uZ05hbWU6WH09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7aWYocSlyZXR1cm4oXy5sb2dnZXJ8fEQpLmxvZygibG9n''@;'; put 'put ''aW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6USx1c2VyTG9uZ05hbWU6WH07Y29uc3QgdGU9eWllbGQoMCxSLm9wZW5XZWJQYWdlKSh0aGlzLnJl''@;'; put 'put ''ZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sWik7aWYoIXRlKXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn07Y29uc3R7aXNMb2dnZWRJbjpyZX09dGhpcy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWE/eWllbGQoMCxQLnZlcmlmeVNhc1ZpeWFMb2dpbikodGUpOnlpZWxkKDAsai52ZXJpZnlTYXM5TG9naW4pKHRlKTtpZih0ZS5jbG9zZSgpLHJlKXt0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7''@;'; put 'put ''Y29uc3R7dXNlck5hbWU6b2UsdXNlckxvbmdOYW1lOmdlfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtyZXR1cm4geWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6b2UsdXNlckxvbmdOYW1lOmdlfX1yZXR1cm57aXNMb2dnZWRJbjohMSx1c2Vy''@;'; put 'put ''TmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9fSl9bG9nSW4oWixxKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUT17X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOloscGFzc3dvcmQ6cX07dGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0i''@;'; put 'put ''IjtsZXR7aXNMb2dnZWRJbjpYLGxvZ2luRm9ybTp0ZSx1c2VyTG9uZ05hbWU6cmV9PXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7aWYoWClyZXR1cm4oXy5sb2dnZXJ8fEQpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIiks''@;'; put 'put ''eWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1RLnVzZXJuYW1lLHRoaXMudXNlckxvbmdOYW1lPXJlLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfTtsZXQgb2U9eWllbGQgdGhpcy5zZW5k''@;'; put 'put ''TG9naW5SZXF1ZXN0KHRlLFEpLGdlPSgwLEwuaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50KSh0aGlzLnNlcnZlclR5cGUsb2UpO2lmKCFnZSl7aWYoQihvZSkpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKG9lKTtvZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVlc3QoVGUs''@;'; put 'put ''USl9Y29uc3QgX2U9eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtnZT1fZS5pc0xvZ2dlZEluLHRoaXMudXNlckxvbmdOYW1lPV9lLnVzZXJMb25nTmFtZX1yZXR1cm4gZ2UmJih0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3Vy''@;'; put 'put ''aXR5Q2hlY2soKSksdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1RLnVzZXJuYW1lKSx7aXNMb2dnZWRJbjpnZSx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX19KX1wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpe3JldHVybiBw''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBaPWAke3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzL2pfc3ByaW5nX2Nhc19zZWN1cml0eV9jaGVja2A7eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9JHtafWAs''@;'; put 'put ''dm9pZCAwKS5jYXRjaChxPT57aWYoIShxIGluc3RhbmNlb2Ygdy5Ob3RGb3VuZEVycm9yKSl0aHJvdyBxfSl9KX1zZW5kTG9naW5SZXF1ZXN0KFoscSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXNq''@;'; put 'put ''cyl7Y29uc3R7dXNlcm5hbWU6dGUscGFzc3dvcmQ6cmV9PXEse3Jlc3VsdDpvZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx7dXNlcm5hbWU6dGUscGFzc3dvcmQ6cmV9LHZvaWQgMCk7cmV0dXJuIG9lfWZvcihjb25zdCB0ZSBpbiBaKXFbdGVdPVpbdGVd''@;'; put 'put ''O2NvbnN0IFE9KDAsRi5zZXJpYWxpemUpKHEpLHtyZXN1bHQ6WH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxRLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoi''@;'; put 'put ''Ki8qIn0pO3JldHVybiBYfSl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46Wix1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTpRfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtsZXQgWD1udWxsO3JldHVybiBa''@;'; put 'put ''fHwoeWllbGQgdGhpcy5sb2dPdXQoKSxYPXlpZWxkIHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCkpLFByb21pc2UucmVzb2x2ZSh7aXNMb2dnZWRJbjpaLHVzZXJOYW1lOnEsdXNlckxvbmdOYW1lOlEsbG9naW5Gb3JtOlh9KX0pfWdldE5ld0xvZ2luRm9ybSgpe3JldHVybiBwKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzanMpcmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi8iLHZvaWQgMCkudGhlbigoe3Jlc3VsdDpxfSk9Pnt2YXIgUTtjb25zdCBYPW51bGw9PT0oUT0vPHNjcmlwdD5kb2N1bWVudC5j''@;'; put 'put ''b29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocSkpfHx2b2lkIDA9PT1RP3ZvaWQgMDpRWzFdO1gmJihkb2N1bWVudC5jb29raWU9WCl9KTtjb25zdHtyZXN1bHQ6Wn09eWllbGQgdGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpO3JldHVybiB5aWVsZCB0aGlzLmdldExvZ2luRm9ybShaKX0pfWZldGNoVXNlck5hbWUoKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWj10aGlzLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzVml5YT9gJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgOnRoaXMuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXM5P2Ake3Ro''@;'; put 'put ''aXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzYDpgJHt0aGlzLnNlcnZlclVybH0vU0FTanNBcGkvc2Vzc2lvbmAse3Jlc3VsdDpxfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFosdm9pZCAwLCJ0ZXh0L3BsYWluIikuY2F0Y2goWD0+KHtyZXN1bHQ6ImF1dGhFcnIifSkpLFE9''@;'; put 'put ''ImF1dGhFcnIiIT09cTtyZXR1cm4gUT97aXNMb2dnZWRJbjpRLHVzZXJOYW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKHEpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUocSl9Oih5aWVsZCB0aGlzLmxvZ091dCgpLHtpc0xvZ2dlZEluOlEsdXNlck5hbWU6IiIsdXNlckxv''@;'; put 'put ''bmdOYW1lOiIifSl9KX1nZXRMb2dpbkZvcm0oWil7Y29uc3QgUT0vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhaKSxYPXt9O2lmKFEmJlEubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKFEpO2NvbnN0IHRlPShaPVoucmVwbGFjZSgvPGlucHV0L2csIlxu''@;'; put 'put ''PGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO3RlJiZ0ZS5mb3JFYWNoKHJlPT57Y29uc3Qgb2U9cmUubWF0Y2goL25hbWU9IihbXiJdKikiXHN2YWx1ZT0iKFteIl0qKS8pO29lJiZvZS5sZW5ndGgmJihYW29lWzFdXT1vZVsyXSl9KX1yZXR1cm4gT2JqZWN0Lmtl''@;'; put 'put ''eXMoWCkubGVuZ3RoP1g6bnVsbH1sb2dPdXQoKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5jbGVhckNzcmZUb2tlbnMoKSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9nb3V0VXJsLHZvaWQgMCkudGhlbigo''@;'; put 'put ''KT0+ITApfSl9fTtjb25zdCBCPVc9Pi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3QoVyl9LDU3OmZ1bmN0aW9uKGNlLEosYil7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLEgsUixqKXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihMLFkpe2Z1bmN0aW9uIEIocSl7dHJ5e1ooai5uZXh0KHEpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBXKHEpe3RyeXtaKGoudGhy''@;'; put 'put ''b3cocSkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFoocSl7cS5kb25lP0wocS52YWx1ZSk6ZnVuY3Rpb24gUChMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIFI/TDpuZXcgUihmdW5jdGlvbihZKXtZKEwpfSl9KHEudmFsdWUpLnRoZW4oQixXKX1aKChqPWouYXBwbHkoRixIfHxbXSkpLm5leHQo''@;'; put 'put ''KSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7Y29uc3QgXz1iKDk3NzgpLHA9Yig5MDE3KSxOPWIoMzkwMCk7Si5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0aW9uIHcoRixILFIp''@;'; put 'put ''e3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBqPSIvU0FTanNBcGkvYXV0aC90b2tlbiIsUD17Y2xpZW50SWQ6SCxjb2RlOlJ9O3JldHVybiB5aWVsZCBGLnBvc3QoaixQLHZvaWQgMCkudGhlbihMPT57Y29uc3QgWT1MLnJlc3VsdDtyZXR1cm57YWNjZXNz''@;'; put 'put ''X3Rva2VuOlkuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpZLnJlZnJlc2hUb2tlbn19KS5jYXRjaChMPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEwsKDAscC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9y''@;'; put 'put ''U2FzanMiLE4uU2VydmVyVHlwZS5TYXNqcyxqLFAsSCkpfSl9KX19LDM1Njk6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUixqLFAsTCl7cmV0dXJuIG5ldyhQfHwoUD1Qcm9taXNlKSko''@;'; put 'put ''ZnVuY3Rpb24oQixXKXtmdW5jdGlvbiBaKFgpe3RyeXtRKEwubmV4dChYKSl9Y2F0Y2godGUpe1codGUpfX1mdW5jdGlvbiBxKFgpe3RyeXtRKEwudGhyb3coWCkpfWNhdGNoKHRlKXtXKHRlKX19ZnVuY3Rpb24gUShYKXtYLmRvbmU/QihYLnZhbHVlKTpmdW5jdGlvbiBZKEIpe3JldHVybiBC''@;'; put 'put ''IGluc3RhbmNlb2YgUD9COm5ldyBQKGZ1bmN0aW9uKFcpe1coQil9KX0oWC52YWx1ZSkudGhlbihaLHEpfVEoKEw9TC5hcHBseShSLGp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRBY2Nlc3NUb2tlbkZvclZp''@;'; put 'put ''eWE9dm9pZCAwO2NvbnN0IHA9YigzOTAwKSxOPWIoOTc3OCksdz1iKDEzOTUpLEY9Yig5MDE3KTtKLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbiBIKFIsaixQLEwpe3JldHVybiBfKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgWTtZPXR5cGVvZiBEPiJ1Ij9idG9h''@;'; put 'put ''KGorIjoiK1ApOkQuZnJvbShqKyI6IitQKS50b1N0cmluZygiYmFzZTY0Iik7Y29uc3QgQj0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixXPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK1ksQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sWj1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBl''@;'; put 'put ''OiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6TH0pLHE9bmV3IFVSTFNlYXJjaFBhcmFtcyhaKTtyZXR1cm4geWllbGQgUi5wb3N0KEIscSx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsVykudGhlbihYPT5YLnJlc3VsdCkuY2F0Y2goWD0+e3Rocm93IFggaW5z''@;'; put 'put ''dGFuY2VvZiB3LkNlcnRpZmljYXRlRXJyb3I/WDooMCxOLnByZWZpeE1lc3NhZ2UpKFgsKDAsRi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yVml5YSIscC5TZXJ2ZXJUeXBlLlNhc1ZpeWEsQixaLFcsaixQKSl9''@;'; put 'put ''KX0pfX0sOTAxNzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPUouZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9dm9pZCAwO2NvbnN0IEQ9''@;'; put 'put ''YigzOTAwKSxwPUY9PmBSZXNwb25zZSBmcm9tICR7KEY9PkY9PT1ELlNlcnZlclR5cGUuU2FzVml5YT8iVml5YSI6IlNhc2pzIikoRil9IGlzIGJlbG93LmA7Si5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD0oRixILFIsaixQLEwsWSxCKT0+e2NvbnN0IFc9cT0+SlNPTi5zdHJpbmdpZnko''@;'; put 'put ''cSxudWxsLDIpLFo9W2BFcnJvciB3aGlsZSAke0Z9IGZyb20gJHtqfWAsYFRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgJHtIfSBmdW5jdGlvbi5gXTtyZXR1cm4gUCYmKFoucHVzaCgiUGF5bG9hZDoiKSxaLnB1c2goVyhQKSkpLEwmJihaLnB1c2goIkhlYWRlcnM6IiksWi5wdXNoKFco''@;'; put 'put ''TCkpKSxZJiZaLnB1c2goYENsaWVudElkOiAke1l9YCksQiYmWi5wdXNoKGBDbGllbnRTZWNyZXQ6ICR7Qn1gKSxaLnB1c2goIiIpLFoucHVzaChgJHtwKFIpfWApLFoucHVzaCgiIiksWi5qb2luKCJcbiIpfSxKLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9KEYsSCk9PkYu''@;'; put 'put ''c3BsaXQoYCR7cChIKX1cbmApLnBvcCgpfSw3MDQ6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixQLEwsWSl7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVyxa''@;'; put 'put ''KXtmdW5jdGlvbiBxKHRlKXt0cnl7WChZLm5leHQodGUpKX1jYXRjaChyZSl7WihyZSl9fWZ1bmN0aW9uIFEodGUpe3RyeXtYKFkudGhyb3codGUpKX1jYXRjaChyZSl7WihyZSl9fWZ1bmN0aW9uIFgodGUpe3RlLmRvbmU/Vyh0ZS52YWx1ZSk6ZnVuY3Rpb24gQihXKXtyZXR1cm4gVyBpbnN0''@;'; put 'put ''YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihaKXtaKFcpfSl9KHRlLnZhbHVlKS50aGVuKHEsUSl9WCgoWT1ZLmFwcGx5KGosUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmdldFRva2Vucz12b2lkIDA7Y29uc3Qg''@;'; put 'put ''Tj1iKDY3OTkpLHc9YigzOTAwKSxGPWIoMzY2KSxIPWIoMjQ5KTtKLmdldFRva2Vucz1mdW5jdGlvbiBSKGosUCxMPXcuU2VydmVyVHlwZS5TYXNWaXlhKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1ELmxvZ2dlcnx8XztsZXR7YWNjZXNzX3Rva2Vu''@;'; put 'put ''OkIscmVmcmVzaF90b2tlbjpXLGNsaWVudDpaLHNlY3JldDpxfT1QO2lmKCgwLE4uaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShCKXx8KDAsTi5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKShXKSl7aWYoKDAsTi5oYXNUb2tlbkV4cGlyZWQpKFcpKXtjb25zdCBYPSJVbmFibGUgdG8gb2J0YWluIG5l''@;'; put 'put ''dyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iO3Rocm93IFkuZXJyb3IoWCksbmV3IEVycm9yKFgpfVkuaW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLCh7YWNjZXNzX3Rva2VuOkIscmVmcmVzaF90b2tlbjpXfT1MPT09''@;'; put 'put ''dy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQoMCxGLnJlZnJlc2hUb2tlbnNGb3JWaXlhKShqLFoscSxXKTp5aWVsZCgwLEgucmVmcmVzaFRva2Vuc0ZvclNhc2pzKShqLFcpKX1yZXR1cm57YWNjZXNzX3Rva2VuOkIscmVmcmVzaF90b2tlbjpXLGNsaWVudDpaLHNlY3JldDpxfX0pfX0sMTUy''@;'; put 'put ''NzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyk7dmFyIEg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOLHcpOyghSHx8''@;'; put 'put ''KCJnZXQiaW4gSD8hTi5fX2VzTW9kdWxlOkgud3JpdGFibGV8fEguY29uZmlndXJhYmxlKSkmJihIPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYsSCl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihG''@;'; put 'put ''PXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEos''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigyODUxKSxKKSxfKGIoOTA5NyksSiksXyhiKDkxNjYpLEopLF8oYig2NjQzKSxKKX0sOTA5NzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouaXNBdXRob3Jp''@;'; put 'put ''emVGb3JtUmVxdWlyZWQ9dm9pZCAwLEouaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9RD0+Lzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoRCl9LDkxNjY6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShK''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsSi5pc0xvZ0luUmVxdWlyZWQ9RD0+Lzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4qPi9nbS50ZXN0KEQpfSw2NjQzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD1KLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPUoubG9naW5TdWNjZXNzSGVhZGVycz1KLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PXZvaWQgMDtjb25zdCBE''@;'; put 'put ''PWIoMzkwMCksXz1iKDU5MjgpLHA9IllvdSBoYXZlIHNpZ25lZCBpbi4iO0ouZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9ImRlZmF1bHQiLEoubG9naW5TdWNjZXNzSGVhZGVycz17ZXM6IllhIHNlIGhhIGluaWNpYWRvIGxhIHNlc2lceGYzbi4iLHRoOiJcdTBlMDRcdTBlMzhcdTBlMTNcdTBl''@;'; put 'put ''MjVcdTBlMDdcdTBlMGFcdTBlMzdcdTBlNDhcdTBlMmRcdTBlNDBcdTBlMDJcdTBlNDlcdTBlMzJcdTBlNDNcdTBlMGFcdTBlNDlcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLGphOiJcdTMwYjVcdTMwYTRcdTMwZjNcdTMwYTRcdTMwZjNcdTMwNTdcdTMwN2VcdTMwNTdcdTMwNWZcdTMwMDIi''@;'; put 'put ''LG5iOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLHNsOiJQcmlqYXZpbGkgc3RlIHNlLiIsYXI6Ilx1MDY0NFx1MDY0Mlx1MDYyZiBcdTA2NDJcdTA2NDVcdTA2MmEgIixzazoiUHJpaGxceGUxc2lsaSBzdGUgc2EuIix6aF9ISzoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1MTY1XHUzMDAyIix6''@;'; put 'put ''aF9DTjoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1ZjU1XHUzMDAyIixpdDoiTCd1dGVudGUgc2kgXHhlOCBjb25uZXNzby4iLHN2OiJEdSBoYXIgbG9nZ2F0IGluLiIsaGU6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLG5sOiJVIGhlYnQgemljaCBhYW5nZW1lbGQuIixwbDoiWm9z''@;'; put 'put ''dGFcdTAxNDJlXHUwMTViIHphbG9nb3dhbnkuIixrbzoiXHViODVjXHVhZGY4XHVjNzc4XHVkNTg4XHVjMmI1XHViMmM4XHViMmU0LiIsemhfVFc6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsdHI6Ik90dXJ1bSBhXHhlN3RcdTAxMzFuXHUwMTMxei4iLGl3OiJcdTA1ZTBcdTA1''@;'; put 'put ''ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixmcjoiVm91cyBceGVhdGVzIGNvbm5lY3RceGU5LiIsdWs6Ilx1MDQxMlx1MDQzOCBcdTA0MzJcdTA0MzJcdTA0NTZcdTA0MzlcdTA0NDhcdTA0M2JcdTA0MzggXHUwNDMyIFx1MDQzZVx1MDQzMVx1MDQzYlx1MDQ1Nlx1MDQzYVx1MDQzZVx1MDQzMlx1''@;'; put 'put ''MDQzOFx1MDQzOSBcdTA0MzdcdTA0MzBcdTA0M2ZcdTA0MzhcdTA0NDEuIixwdF9CUjoiVm9jXHhlYSBzZSBjb25lY3RvdS4iLG5vOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLGNzOiJKc3RlIHBcdTAxNTlpaGxceGUxXHUwMTYxZW5pLiIsZmk6Ik9sZXQga2lyamF1dHVudXQgc2lzXHhl''@;'; put 'put ''NFx4ZTRuLiIscnU6Ilx1MDQxMlx1MDQ0YiBcdTA0MzJcdTA0NGJcdTA0M2ZcdTA0M2VcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2JcdTA0MzggXHUwNDMyXHUwNDQ1XHUwNDNlXHUwNDM0IFx1MDQzMiBcdTA0NDFcdTA0MzhcdTA0NDFcdTA0NDJcdTA0MzVcdTA0M2NcdTA0NDMuIixlbDoiXHUw''@;'; put 'put ''Mzg4XHUwM2M3XHUwM2I1XHUwM2M0XHUwM2I1IFx1MDNjM1x1MDNjNVx1MDNiZFx1MDNiNFx1MDNiNVx1MDNiOFx1MDNiNVx1MDNhZi4iLGhyOiJQcmlqYXZpbGkgc3RlIHNlLiIsZGE6IkR1IGVyIGxvZ2dldCBwXHhlNS4iLGRlOiJTaWUgc2luZCBqZXR6dCBhbmdlbWVsZGV0LiIsc2g6IlBy''@;'; put 'put ''aWphdmxqZW5pIHN0ZS4iLHB0OiJJbmljaW91IHNlc3NceGUzby4iLGh1OiJCZWplbGVudGtlemV0dC4iLHNyOiJQcmlqYXZsamVuaSBzdGUuIixlbjpwLFtKLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTpwfSxKLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPSgpPT57bGV0IEY9Si5s''@;'; put 'put ''b2dpblN1Y2Nlc3NIZWFkZXJzW0ouZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXldO2NvbnN0IEg9KDAsXy5nZXRVc2VyTGFuZ3VhZ2UpKCk7aWYoSCl7bGV0IFI9Si5sb2dpblN1Y2Nlc3NIZWFkZXJzW0hdO2lmKFIpRj1SO2Vsc2V7Y29uc3QgUD1PYmplY3Qua2V5cyhKLmxvZ2luU3VjY2Vzc0hl''@;'; put 'put ''YWRlcnMpLmZpbmQoTD0+bmV3IFJlZ0V4cChMLCJpIikudGVzdChIKSk7UCYmKEY9Si5sb2dpblN1Y2Nlc3NIZWFkZXJzW1BdKX19cmV0dXJuIEZ9LEouaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PShGLEgpPT5GPT09RC5TZXJ2ZXJUeXBlLlNhc2pzP0g/LmxvZ2dlZEluOm5ldyBSZWdF''@;'; put 'put ''eHAoKDAsSi5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSwiZ20iKS50ZXN0KEgpfSw1NDE4OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LEYsSCxSKXtyZXR1cm4gbmV3KEh8fChIPVByb21pc2UpKShm''@;'; put 'put ''dW5jdGlvbihQLEwpe2Z1bmN0aW9uIFkoWil7dHJ5e1coUi5uZXh0KFopKX1jYXRjaChxKXtMKHEpfX1mdW5jdGlvbiBCKFope3RyeXtXKFIudGhyb3coWikpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIFcoWil7Wi5kb25lP1AoWi52YWx1ZSk6ZnVuY3Rpb24gaihQKXtyZXR1cm4gUCBpbnN0''@;'; put 'put ''YW5jZW9mIEg/UDpuZXcgSChmdW5jdGlvbihMKXtMKFApfSl9KFoudmFsdWUpLnRoZW4oWSxCKX1XKChSPVIuYXBwbHkodyxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoub3BlbldlYlBhZ2U9dm9pZCAwO2NvbnN0''@;'; put 'put ''IF89YigxMjEwKSxwPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07Si5vcGVuV2ViUGFnZT1mdW5jdGlvbiBOKHcsRj0iIixIPXAsUil7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3dpZHRoOmosaGVpZ2h0OlB9PUgsTD1zY3JlZW4ud2lkdGgvMi1qLzIsWT1z''@;'; put 'put ''Y3JlZW4uaGVpZ2h0LzItUC8yO3JldHVybiB3aW5kb3cub3Blbih3LEYsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke2p9LGhlaWdodD0ke1B9LGxlZnQ9JHtMfSx0b3A9JHtZfWApfHwoKHlpZWxkKFI/P18ub3BlbkxvZ2luUHJvbXB0KSgpKT93aW5kb3cub3Blbih3''@;'; put 'put ''LEYsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke2p9LGhlaWdodD0ke1B9LGxlZnQ9JHtMfSx0b3A9JHtZfWApOm51bGwpfSl9fSwyNDk6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsSCxS''@;'; put 'put ''LGope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsWSl7ZnVuY3Rpb24gQihxKXt0cnl7WihqLm5leHQocSkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1ooai50aHJvdyhxKSl9Y2F0Y2goUSl7WShRKX19ZnVuY3Rpb24gWihxKXtxLmRvbmU/TChxLnZh''@;'; put 'put ''bHVlKTpmdW5jdGlvbiBQKEwpe3JldHVybiBMIGluc3RhbmNlb2YgUj9MOm5ldyBSKGZ1bmN0aW9uKFkpe1koTCl9KX0ocS52YWx1ZSkudGhlbihCLFcpfVooKGo9ai5hcHBseShGLEh8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksSi5yZWZyZXNoVG9rZW5zRm9yU2FzanM9dm9pZCAwO2NvbnN0IF89Yig5Nzc4KSxwPWIoOTAxNyksTj1iKDM5MDApO0oucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1bmN0aW9uIHcoRixIKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgUj0iL1NB''@;'; put 'put ''U2pzQXBpL2F1dGgvcmVmcmVzaCIsaj17QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrSH07cmV0dXJuIHlpZWxkIEYucG9zdChSLHZvaWQgMCx2b2lkIDAsdm9pZCAwLGopLnRoZW4oTD0+e2NvbnN0IFk9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpZLmFjY2Vzc1Rva2VuLHJlZnJlc2hf''@;'; put 'put ''dG9rZW46WS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAsXy5wcmVmaXhNZXNzYWdlKShMLCgwLHAuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsTi5TZXJ2ZXJUeXBlLlNhc2pzLFIpKX0pfSl9''@;'; put 'put ''fSwzNjY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxMLFksQil7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oWixxKXtmdW5jdGlvbiBRKHJlKXt0cnl7dGUoQi5u''@;'; put 'put ''ZXh0KHJlKSl9Y2F0Y2gob2Upe3Eob2UpfX1mdW5jdGlvbiBYKHJlKXt0cnl7dGUoQi50aHJvdyhyZSkpfWNhdGNoKG9lKXtxKG9lKX19ZnVuY3Rpb24gdGUocmUpe3JlLmRvbmU/WihyZS52YWx1ZSk6ZnVuY3Rpb24gVyhaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIFk/WjpuZXcgWShmdW5jdGlv''@;'; put 'put ''bihxKXtxKFopfSl9KHJlLnZhbHVlKS50aGVuKFEsWCl9dGUoKEI9Qi5hcHBseShQLEx8fFtdKSkubmV4dCgpKX0pfSxwPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDtjb25zdCBOPWIoMzkwMCksdz1iKDk3NzgpLEY9cChiKDYyMzApKSxIPWIoNTkyOCksUj1iKDkwMTcpO0oucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24gaihQLEwsWSxCKXty''@;'; put 'put ''ZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoISgwLEguaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNlZCBieSBOb2RlLiIpO2NvbnN0IFc9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIs''@;'; put 'put ''cT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIisodHlwZW9mIEQ+InUiP2J0b2EoTCsiOiIrWSk6RC5mcm9tKEwrIjoiK1kpLnRvU3RyaW5nKCJiYXNlNjQiKSl9LFE9bmV3IEYuZGVmYXVsdDtyZXR1cm4gUS5hcHBlbmQoImdyYW50X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksUS5hcHBlbmQoInJl''@;'; put 'put ''ZnJlc2hfdG9rZW4iLEIpLHlpZWxkIFAucG9zdChXLFEsdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK1EuX2JvdW5kYXJ5LHEpLnRoZW4odGU9PnRlLnJlc3VsdCkuY2F0Y2godGU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkodGUsKDAsUi5nZXRUb2tlblJlcXVl''@;'; put 'put ''c3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLE4uU2VydmVyVHlwZS5TYXNWaXlhLFcsUSxxLEwsWSkpfSl9KX19LDQ1ODI6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0''@;'; put 'put ''aW9uKHcsRixILFIpe3JldHVybiBuZXcoSHx8KEg9UHJvbWlzZSkpKGZ1bmN0aW9uKFAsTCl7ZnVuY3Rpb24gWShaKXt0cnl7VyhSLm5leHQoWikpfWNhdGNoKHEpe0wocSl9fWZ1bmN0aW9uIEIoWil7dHJ5e1coUi50aHJvdyhaKSl9Y2F0Y2gocSl7TChxKX19ZnVuY3Rpb24gVyhaKXtaLmRv''@;'; put 'put ''bmU/UChaLnZhbHVlKTpmdW5jdGlvbiBqKFApe3JldHVybiBQIGluc3RhbmNlb2YgSD9QOm5ldyBIKGZ1bmN0aW9uKEwpe0woUCl9KX0oWi52YWx1ZSkudGhlbihZLEIpfVcoKFI9Ui5hcHBseSh3LEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksSi52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IF89Yig1OTI4KSxwPWIoMTUyNyk7Si52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24gTih3KXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEY9ITEsSD1uZXcgRGF0ZSxSPTA7ZG97''@;'; put 'put ''aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLHcuY2xvc2VkKWJyZWFrO0Y9dy53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmdy53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoKDAscC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlciko''@;'; put 'put ''KSksUj0oKG5ldyBEYXRlKS52YWx1ZU9mKCktSC52YWx1ZU9mKCkpLzFlM313aGlsZSghRiYmUjwzMDApO3JldHVybntpc0xvZ2dlZEluOkZ9fSl9fSw2NTQ3OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLEgsUixq''@;'; put 'put ''KXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihMLFkpe2Z1bmN0aW9uIEIocSl7dHJ5e1ooai5uZXh0KHEpKX1jYXRjaChRKXtZKFEpfX1mdW5jdGlvbiBXKHEpe3RyeXtaKGoudGhyb3cocSkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFoocSl7cS5kb25lP0wocS52YWx1''@;'; put 'put ''ZSk6ZnVuY3Rpb24gUChMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIFI/TDpuZXcgUihmdW5jdGlvbihZKXtZKEwpfSl9KHEudmFsdWUpLnRoZW4oQixXKX1aKChqPWouYXBwbHkoRixIfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLEouaXNMb2dnZWRJblNBU1ZJWUE9Si52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO2NvbnN0IF89Yig1OTI4KSxwPWIoMTUyNyk7Si52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24gTihGKXt2YXIgSCxSO3JldHVybiBEKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQg''@;'; put 'put ''aj0hMSxQPW5ldyBEYXRlLEw9MDtkb3tpZih5aWVsZCgwLF8uZGVsYXkpKDFlMyksRi5jbG9zZWQpYnJlYWs7aj0oMCxKLmlzTG9nZ2VkSW5TQVNWSVlBKSgpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLVAudmFsdWVPZigpKS8xZTN9d2hpbGUoIWomJkw8MzAwKTtsZXQgWT0hMTtQPW5ldyBE''@;'; put 'put ''YXRlO2Rve2lmKHlpZWxkKDAsXy5kZWxheSkoMWUzKSxGLmNsb3NlZClicmVhaztZPUYud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KFI9bnVsbD09PShIPUYud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1IP3ZvaWQgMDpILmlubmVy''@;'; put 'put ''VGV4dCl8fHZvaWQgMD09PVI/dm9pZCAwOlIuaW5jbHVkZXMoKDAscC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSkpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLVAudmFsdWVPZigpKS8xZTN9d2hpbGUoIVkmJkw8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpqJiZZfX0pfSxKLmlz''@;'; put 'put ''TG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfSw0MDM3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxKLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEQ9YigyNDAyKSxfPWIoNTkyOCk7Si5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPShOLHcpPT57Zm9yKGNvbnN0IEYgaW4gdyl7aWYoIUFycmF5LmlzQXJyYXkod1tGXSkpY29udGludWU7Y29uc3QgSD1GLFI9''@;'; put 'put ''KDAsRC5jb252ZXJ0VG9DU1YpKHcsRik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVIpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLF8uaXNOb2RlKSgpKU4uYXBw''@;'; put 'put ''ZW5kKEgsUix7ZmlsZW5hbWU6YCR7SH0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7Y29uc3Qgaj1uZXcgQmxvYihbUl0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtOLmFwcGVuZChILGosYCR7SH0uY3N2YCl9fXJldHVybiBOfX0sMjE3MDooY2UsSixiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgRD1iKDI0MDIpLF89Yig0Nzk5KTtKLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPShOLHcpPT57Y29uc3QgRj1b''@;'; put 'put ''XSxIPXt9O2xldCBSPTA7Zm9yKGNvbnN0IGogaW4gdyl7UisrLCgwLEQuaXNGb3JtYXRzVGFibGUpKGopfHxGLnB1c2goaik7Y29uc3QgUD0oMCxELmNvbnZlcnRUb0NTVikodyxqKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09UCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXgg''@;'; put 'put ''bGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7UC5sZW5ndGg+MTZlMz8oMCxfLnNwbGl0Q2h1bmtzKShQKS5tYXAoWT0+e04uYXBwZW5kKGBzYXNqcyR7Un1kYXRhYCxZKX0pOkhbYHNhc2pzJHtSfWRhdGFgXT1QfXJldHVybiBILnNhc2pz''@;'; put 'put ''X3RhYmxlcz1GLmpvaW4oIiAiKSx7Zm9ybURhdGE6TixyZXF1ZXN0UGFyYW1zOkh9fX0sMzYwNzpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxGLEgsUil7dm9pZCAwPT09UiYm''@;'; put 'put ''KFI9SCk7dmFyIGo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihGLEgpOyghanx8KCJnZXQiaW4gaj8hRi5fX2VzTW9kdWxlOmoud3JpdGFibGV8fGouY29uZmlndXJhYmxlKSkmJihqPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBGW0hdfX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eSh3LFIsail9OmZ1bmN0aW9uKHcsRixILFIpe3ZvaWQgMD09PVImJihSPUgpLHdbUl09RltIXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsRil7Zm9yKHZhciBIIGluIHcpImRlZmF1bHQiIT09SCYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChGLEgpJiZEKEYsdyxIKX0scD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3Qg''@;'; put 'put ''Tj1wKGIoNTk1NikpO18oYigxMjMwKSxKKSxfKGIoMTM5NSksSiksXyhiKDk4MjEpLEopLF8oYig4MzA2KSxKKSxfKGIoMzQ2NyksSiksXyhiKDM2MDIpLEopLEouZGVmYXVsdD1OLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsSCxSLGope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsWSl7ZnVuY3Rpb24gQihxKXt0cnl7WihqLm5leHQocSkpfWNhdGNoKFEpe1koUSl9fWZ1bmN0aW9uIFcocSl7dHJ5e1ooai50aHJvdyhxKSl9Y2F0Y2goUSl7WShRKX19ZnVu''@;'; put 'put ''Y3Rpb24gWihxKXtxLmRvbmU/TChxLnZhbHVlKTpmdW5jdGlvbiBQKEwpe3JldHVybiBMIGluc3RhbmNlb2YgUj9MOm5ldyBSKGZ1bmN0aW9uKFkpe1koTCl9KX0ocS52YWx1ZSkudGhlbihCLFcpfVooKGo9ai5hcHBseShGLEh8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89YigzOTAwKSxwPWIoMTM5NSksTj1iKDYxMTgpO0ouQ29tcHV0ZUpvYkV4ZWN1dG9yPWNsYXNzIHcgZXh0ZW5kcyBOLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihILFIp''@;'; put 'put ''e3N1cGVyKEgsXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1SfWV4ZWN1dGUoSCxSLGosUCxMKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1QfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKHEsUSk9Pnt2YXIgWDtudWxsPT09KFg9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09WHx8WC5leGVjdXRlQ29tcHV0ZUpvYihILGouY29udGV4dE5hbWUsai5kZWJ1ZyxSLEwsITAsITApLnRoZW4odGU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdCh0''@;'; put 'put ''ZSxILGouZGVidWcpLHEodGUucmVzdWx0KX0pLmNhdGNoKHRlPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0ZSBpbnN0YW5jZW9mIHAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QodGUsSCxqLmRlYnVnKSxR''@;'; put 'put ''KG5ldyBwLkVycm9yUmVzcG9uc2UodGU/Lm1lc3NhZ2UsdGUpKSksdGUgaW5zdGFuY2VvZiBwLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEgsUixqLFApLnRoZW4ocmU9PntxKHJlKX0scmU9PntRKHJlKX0pKSx5aWVsZCBZ''@;'; put 'put ''KCkpOlEobmV3IHAuRXJyb3JSZXNwb25zZSh0ZT8ubWVzc2FnZSx0ZSkpfSkpfSl9KX19fSwzNDkxOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihILFIsaixQKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5j''@;'; put 'put ''dGlvbihZLEIpe2Z1bmN0aW9uIFcoUSl7dHJ5e3EoUC5uZXh0KFEpKX1jYXRjaChYKXtCKFgpfX1mdW5jdGlvbiBaKFEpe3RyeXtxKFAudGhyb3coUSkpfWNhdGNoKFgpe0IoWCl9fWZ1bmN0aW9uIHEoUSl7US5kb25lP1koUS52YWx1ZSk6ZnVuY3Rpb24gTChZKXtyZXR1cm4gWSBpbnN0YW5j''@;'; put 'put ''ZW9mIGo/WTpuZXcgaihmdW5jdGlvbihCKXtCKFkpfSl9KFEudmFsdWUpLnRoZW4oVyxaKX1xKChQPVAuYXBwbHkoSCxSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouRmlsZVVwbG9hZGVyPXZvaWQgMDtjb25zdCBf''@;'; put 'put ''PWIoNTkyOCkscD1iKDEzOTUpLE49YigzOTAwKSx3PWIoNjExOCk7Si5GaWxlVXBsb2FkZXI9Y2xhc3MgRiBleHRlbmRzIHcuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKFIsaixQLEwpe3N1cGVyKFIsaiksdGhpcy5qb2JzUGF0aD1QLHRoaXMucmVxdWVzdENsaWVudD1MfWV4ZWN1dGUo''@;'; put 'put ''UixqLFAsTCl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOlkscGFyYW1zOkJ9PWosVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighWT8ubGVuZ3RoKXRocm93IG5ldyBwLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9uZSBmaWxlIG11''@;'; put 'put ''c3QgYmUgcHJvdmlkZWQuIik7aWYoIVJ8fCIiPT09Uil0aHJvdyBuZXcgcC5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgWj0iIjtmb3IobGV0IGdlIGluIEIpQi5oYXNPd25Qcm9wZXJ0eShnZSkmJihaKz1gJiR7Z2V9PSR7QltnZV19YCk7Y29uc3QgcT1Q''@;'; put 'put ''LmFwcExvYz9QLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK1IucmVwbGFjZSgvXlwvLywiIik6UixRPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3F9JHtafWAsWD1uZXcgRm9ybURhdGE7Zm9yKGxldCBnZSBvZiBZKVguYXBwZW5kKCJmaWxlIixnZS5maWxlLGdlLmZpbGVO''@;'; put 'put ''YW1lKTtjb25zdCB0ZT10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIik7dGUmJlguYXBwZW5kKCJfY3NyZiIsdGUudmFsdWUpLFAuZGVidWcmJlguYXBwZW5kKCJfZGVidWciLCIxMzEiKSxQLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzVml5YSYmUC5jb250ZXh0''@;'; put 'put ''TmFtZSYmWC5hcHBlbmQoIl9jb250ZXh0bmFtZSIsUC5jb250ZXh0TmFtZSk7Y29uc3QgcmU9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9O3JldHVybiBuZXcgUHJvbWlzZSgoZ2UsX2UpPT57dGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LnBvc3QoUSxYLHZvaWQgMCwiYXBwbGljYXRpb24vanNvbiIscmUpLnRoZW4oVGU9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLFIsUC5kZWJ1Zyk7bGV0IFNlPVRlLnJlc3VsdDtpZihQLmRlYnVnKXN3''@;'; put 'put ''aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6U2U9eWllbGQoMCxfLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKFRlLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsUC5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhczk6U2U9InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5wYXJzZVdlYm91dFJlc3BvbnNlKShUZS5yZXN1bHQsUSk6VGUucmVzdWx0O2JyZWFrO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc2pzOlNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRl''@;'; put 'put ''LnJlc3VsdH1lbHNlIFNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8uZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdDtnZShTZSl9KSkuY2F0Y2goVGU9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1RlIGluc3RhbmNlb2YgcC5Kb2JFeGVjdXRpb25F''@;'; put 'put ''cnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLFIsUC5kZWJ1ZyksX2UobmV3IHAuRXJyb3JSZXNwb25zZShUZT8ubWVzc2FnZSxUZSkpKSxUZSBpbnN0YW5jZW9mIHAuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlz''@;'; put 'put ''LmV4ZWN1dGUoUixqLFAsTCkudGhlbihTZT0+e2dlKFNlKX0sU2U9PntfZShTZSl9KSkseWllbGQgVygpKTpfZShuZXcgcC5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxlZC4iLFRlKSl9KSl9KX0pfX19LDQ0NDY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEgsUixqLFApe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKFksQil7ZnVuY3Rpb24gVyhRKXt0cnl7cShQLm5leHQoUSkpfWNhdGNoKFgpe0IoWCl9fWZ1bmN0aW9uIFooUSl7dHJ5e3EoUC50aHJvdyhRKSl9''@;'; put 'put ''Y2F0Y2goWCl7QihYKX19ZnVuY3Rpb24gcShRKXtRLmRvbmU/WShRLnZhbHVlKTpmdW5jdGlvbiBMKFkpe3JldHVybiBZIGluc3RhbmNlb2Ygaj9ZOm5ldyBqKGZ1bmN0aW9uKEIpe0IoWSl9KX0oUS52YWx1ZSkudGhlbihXLFopfXEoKFA9UC5hcHBseShILFJ8fFtdKSkubmV4dCgpKX0pfTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5KZXNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz1iKDM5MDApLHA9YigxMzk1KSxOPWIoNjExOCksdz1iKDU5MjgpO0ouSmVzSm9iRXhlY3V0b3I9Y2xhc3MgRiBleHRlbmRzIE4uQmFzZUpvYkV4ZWN1''@;'; put 'put ''dG9ye2NvbnN0cnVjdG9yKFIsail7c3VwZXIoUixfLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PWp9ZXhlY3V0ZShSLGosUCxMLFksQj1bXSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9THx8KCgpPT5Qcm9taXNlLnJl''@;'; put 'put ''c29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChxLFEpPT57dmFyIFg7bnVsbD09PShYPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVh8fFguZXhlY3V0ZUpvYihSLFAuY29udGV4dE5hbWUsUC5kZWJ1ZyxqLFkpLnRoZW4odGU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBw''@;'; put 'put ''ZW5kUmVxdWVzdCh0ZSxSLFAuZGVidWcpO2NvbnN0IHJlPSgwLHcuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHRlLEIpO3EocmUpfSkuY2F0Y2godGU9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RlIGluc3RhbmNlb2YgcC5Kb2JFeGVjdXRpb25FcnJvciYmKHRo''@;'; put 'put ''aXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHRlLFIsUC5kZWJ1ZyksUShuZXcgcC5FcnJvclJlc3BvbnNlKHRlPy5tZXNzYWdlLHRlKSkpLHRlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0''@;'; put 'put ''ZShSLGosUCxMLFksQikudGhlbihyZT0+e3EocmUpfSxyZT0+e1EocmUpfSkpLHlpZWxkIFcoKSk6UShuZXcgcC5FcnJvclJlc3BvbnNlKHRlPy5tZXNzYWdlLHRlKSl9KSl9KX0pfX19LDYxMTg6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0''@;'; put 'put ''ZXJ8fGZ1bmN0aW9uKE4sdyxGLEgpe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKGosUCl7ZnVuY3Rpb24gTChXKXt0cnl7QihILm5leHQoVykpfWNhdGNoKFope1AoWil9fWZ1bmN0aW9uIFkoVyl7dHJ5e0IoSC50aHJvdyhXKSl9Y2F0Y2goWil7UChaKX19ZnVuY3Rpb24g''@;'; put 'put ''QihXKXtXLmRvbmU/aihXLnZhbHVlKTpmdW5jdGlvbiBSKGope3JldHVybiBqIGluc3RhbmNlb2YgRj9qOm5ldyBGKGZ1bmN0aW9uKFApe1Aoail9KX0oVy52YWx1ZSkudGhlbihMLFkpfUIoKEg9SC5hcHBseShOLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89Yig1OTI4KTtKLkJhc2VKb2JFeGVjdXRvcj1jbGFzcyBwe2NvbnN0cnVjdG9yKHcsRil7dGhpcy5zZXJ2ZXJVcmw9dyx0aGlzLnNlcnZlclR5cGU9Rix0aGlzLndhaXRpbmdSZXF1ZXN0cz1b''@;'; put 'put ''XSx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkodGhpcy53YWl0aW5nUmVxdWVzdHMsSD0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgSCgpfSkpLHRoaXMu''@;'; put 'put ''d2FpdGluZ1JlcXVlc3RzPVtdfSl9YXBwZW5kV2FpdGluZ1JlcXVlc3Qodyl7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaCh3KX1nZXRSZXF1ZXN0UGFyYW1zKHcpe2NvbnN0IEY9e307cmV0dXJuIHcuZGVidWcmJihGLl9vbWl0dGV4dGxvZz0iZmFsc2UiLEYuX29taXRTZXNzaW9uUmVzdWx0''@;'; put 'put ''cz0iZmFsc2UiLEYuX2RlYnVnPTEzMSksRn19fSwyNjkzOmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEwsWSxCKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihaLHEpe2Z1bmN0aW9uIFEocmUp''@;'; put 'put ''e3RyeXt0ZShCLm5leHQocmUpKX1jYXRjaChvZSl7cShvZSl9fWZ1bmN0aW9uIFgocmUpe3RyeXt0ZShCLnRocm93KHJlKSl9Y2F0Y2gob2Upe3Eob2UpfX1mdW5jdGlvbiB0ZShyZSl7cmUuZG9uZT9aKHJlLnZhbHVlKTpmdW5jdGlvbiBXKFope3JldHVybiBaIGluc3RhbmNlb2YgWT9aOm5l''@;'; put 'put ''dyBZKGZ1bmN0aW9uKHEpe3EoWil9KX0ocmUudmFsdWUpLnRoZW4oUSxYKX10ZSgoQj1CLmFwcGx5KFAsTHx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFApe3JldHVybiBQJiZQLl9fZXNNb2R1bGU/UDp7ZGVmYXVsdDpQfX07T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU2FzOUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBwPV8oYig2MjMwKSksTj1iKDEzOTUpLHc9Yig1OTI4KSxGPWIoNjExOCksSD1iKDc5NSk7Si5TYXM5Sm9iRXhlY3V0b3I9Y2xhc3MgUiBleHRlbmRzIEYuQmFz''@;'; put 'put ''ZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEwsWSxCLFcsWil7c3VwZXIoTCxZKSx0aGlzLmpvYnNQYXRoPUIsdGhpcy5yZXF1ZXN0Q2xpZW50PVcsdGhpcy5zYXM5UmVxdWVzdENsaWVudD1uZXcgSC5TYXM5UmVxdWVzdENsaWVudChMLFopfWV4ZWN1dGUoTCxZLEIpe3JldHVybiBEKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKEwpJiZCLmFwcExvYz9CLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0wucmVwbGFjZSgvXlwvLywiIik6TDtsZXQgWj1gJHtCLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9PyR7Il9wcm9n''@;'; put 'put ''cmFtPSIrV31gO1o9YCR7Wn0ke0IudXNlcm5hbWUmJkIucGFzc3dvcmQ/IiZfdXNlcm5hbWU9IitCLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrQi5wYXNzd29yZDoiIn1gLFo9YCR7Wn0ke0IuZGVidWc/IiZfZGVidWc9MTMxIjoiIn1gO2xldCBxPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRS''@;'; put 'put ''ZXF1ZXN0UGFyYW1zKEIpKSxRPW5ldyBwLmRlZmF1bHQ7aWYoWSl0cnl7UT1qKFEsWSl9Y2F0Y2gocmUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgTi5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSl9ZWxzZSBZPSIiO2Zvcihjb25zdCByZSBpbiBxKXEuaGFzT3duUHJvcGVydHko''@;'; put 'put ''cmUpJiZRLmFwcGVuZChyZSxxW3JlXSk7eWllbGQgdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihCLnVzZXJuYW1lLEIucGFzc3dvcmQsdGhpcy5qb2JzUGF0aCk7Y29uc3QgWD1ZJiZPYmplY3Qua2V5cyhZKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrUS5f''@;'; put 'put ''Ym91bmRhcnk6InRleHQvcGxhaW4iO3JldHVybiBuZXcgUHJvbWlzZSgocmUsb2UpPT50aGlzLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoWixRLHZvaWQgMCxYLHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKGdlPT57dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVu''@;'; put 'put ''ZFJlcXVlc3QoZ2UsTCxCLmRlYnVnKSxyZShnZSl9KS5jYXRjaChnZT0+e2xldCBfZT1nZTtnZS5yZXN1bHQmJiIiIT09Z2UucmVzdWx0P19lPWdlLnJlc3VsdDpnZS5tZXNzYWdlJiYoX2U9Z2UubWVzc2FnZSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoX2UsTCxCLmRlYnVn''@;'; put 'put ''KSxvZShuZXcgTi5FcnJvclJlc3BvbnNlKGdlPy5tZXNzYWdlLGdlKSl9KSl9KX1nZXRSZXF1ZXN0UGFyYW1zKEwpe2NvbnN0IFk9e307cmV0dXJuIEwuZGVidWcmJihZLl9kZWJ1Zz0xMzEpLFl9fTtjb25zdCBqPShQLEwpPT57Zm9yKGNvbnN0IFkgaW4gTCl7Y29uc3QgQj1ZLFc9KDAsdy5j''@;'; put 'put ''b252ZXJ0VG9DU1YpKEwsWSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVcpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO1AuYXBwZW5kKEIsVyx7ZmlsZW5hbWU6YCR7Qn0u''@;'; put 'put ''Y3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBQfX0sMTA2NTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxZLEIsVyl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24o''@;'; put 'put ''cSxRKXtmdW5jdGlvbiBYKG9lKXt0cnl7cmUoVy5uZXh0KG9lKSl9Y2F0Y2goZ2Upe1EoZ2UpfX1mdW5jdGlvbiB0ZShvZSl7dHJ5e3JlKFcudGhyb3cob2UpKX1jYXRjaChnZSl7UShnZSl9fWZ1bmN0aW9uIHJlKG9lKXtvZS5kb25lP3Eob2UudmFsdWUpOmZ1bmN0aW9uIFoocSl7cmV0dXJu''@;'; put 'put ''IHEgaW5zdGFuY2VvZiBCP3E6bmV3IEIoZnVuY3Rpb24oUSl7UShxKX0pfShvZS52YWx1ZSkudGhlbihYLHRlKX1yZSgoVz1XLmFwcGx5KEwsWXx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/''@;'; put 'put ''TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouU2FzanNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLE49YigzOTAwKSx3PWIoMTM5NSksRj1iKDQwMzcpLEg9Yig1OTI4KSxSPWIoNTkyOCksaj1iKDYx''@;'; put 'put ''MTgpO0ouU2FzanNKb2JFeGVjdXRvcj1jbGFzcyBQIGV4dGVuZHMgai5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoWSxCLFcpe3N1cGVyKFksTi5TZXJ2ZXJUeXBlLlNhc2pzKSx0aGlzLmpvYnNQYXRoPUIsdGhpcy5yZXF1ZXN0Q2xpZW50PVd9ZXhlY3V0ZShZLEIsVyxaLHEsUT1bXSl7''@;'; put 'put ''cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFg9Wix0ZT0oMCxSLmlzUmVsYXRpdmVQYXRoKShZKSYmVy5hcHBMb2M/Vy5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStZLnJlcGxhY2UoL15cLy8sIiIpOlk7bGV0IHJlPWAke1cuc2VydmVyVXJsfSR7dGhp''@;'; put 'put ''cy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrdGV9YCxvZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhXKSksZ2U9KDAsSC5nZXRGb3JtRGF0YSkoKTtpZihCKXRyeXtnZT0oMCxGLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKGdlLEIpfWNhdGNoKFNlKXtyZXR1cm4g''@;'; put 'put ''UHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShTZT8ubWVzc2FnZSxTZSkpfWZvcihjb25zdCBTZSBpbiBvZSlvZS5oYXNPd25Qcm9wZXJ0eShTZSkmJmdlLmFwcGVuZChTZSxvZVtTZV0pO2NvbnN0IF9lPWdlIGluc3RhbmNlb2YgcC5kZWZhdWx0JiZ0eXBlb2YgRm9ybURhdGE+''@;'; put 'put ''InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2dlLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNlKChTZSx6ZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChyZSxnZSxxPy5hY2Nlc3NfdG9r''@;'; put 'put ''ZW4sX2UpLnRoZW4oej0+RCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoT2JqZWN0LmVudHJpZXMoei5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyB3LkpvYkV4ZWN1dGlvbkVycm9yKDAsYE5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICR7dGV9LiAgUGxlYXNlIGNo''@;'; put 'put ''ZWNrIHRoZSBTQVMgbG9nIGZvciBtb3JlIGluZm8uYCx6LmxvZyk7Y29uc3R7cmVzdWx0Omd9PXo7ZyYmInN0cmluZyI9PXR5cGVvZiBnJiZnLnRyaW0oKSYmKHoucmVzdWx0PSgwLFIuZ2V0VmFsaWRKc29uKShnKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoeixZLFcuZGVi''@;'; put 'put ''dWcpO2NvbnN0IHk9KDAsUi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoeixRKTtTZSh5KX0pKS5jYXRjaCh6PT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt6IGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRS''@;'; put 'put ''ZXF1ZXN0KHosWSxXLmRlYnVnKSx6ZShuZXcgdy5FcnJvclJlc3BvbnNlKHo/Lm1lc3NhZ2UseikpKSx6IGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFp8fHplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52''@;'; put 'put ''IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIix6KSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKFksQixXLFoscSxRKS50aGVuKGc9PntTZShnKX0sZz0+e3plKGcpfSkpLFgmJih5aWVsZCBYKCkpKTp6ZShuZXcgdy5FcnJvclJlc3BvbnNl''@;'; put 'put ''KHo/Lm1lc3NhZ2UseikpfSkpfSl9KX19fSw2MDg0OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLFksQixXKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihxLFEpe2Z1bmN0aW9uIFgob2Upe3Ry''@;'; put 'put ''eXtyZShXLm5leHQob2UpKX1jYXRjaChnZSl7UShnZSl9fWZ1bmN0aW9uIHRlKG9lKXt0cnl7cmUoVy50aHJvdyhvZSkpfWNhdGNoKGdlKXtRKGdlKX19ZnVuY3Rpb24gcmUob2Upe29lLmRvbmU/cShvZS52YWx1ZSk6ZnVuY3Rpb24gWihxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIEI/cTpuZXcg''@;'; put 'put ''QihmdW5jdGlvbihRKXtRKHEpfSl9KG9lLnZhbHVlKS50aGVuKFgsdGUpfXJlKChXPVcuYXBwbHkoTCxZfHxbXSkpLm5leHQoKSl9KX0sXz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5XZWJKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLE49YigzOTAwKSx3PWIoMTM5NSksRj1iKDQwMzcpLEg9YigyMTcwKSxSPWIoNTkyOCksaj1iKDYxMTgpO0ouV2ViSm9iRXhlY3V0b3I9Y2xh''@;'; put 'put ''c3MgUCBleHRlbmRzIGouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKFksQixXLFoscSl7c3VwZXIoWSxCKSx0aGlzLmpvYnNQYXRoPVcsdGhpcy5yZXF1ZXN0Q2xpZW50PVosdGhpcy5zYXNWaXlhQXBpQ2xpZW50PXF9ZXhlY3V0ZShZLEIsVyxaLHEsUT1bXSl7cmV0dXJuIEQodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFg9Wix0ZT0oMCxSLmlzUmVsYXRpdmVQYXRoKShZKSYmVy5hcHBMb2M/Vy5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStZLnJlcGxhY2UoL15cLy8sIiIpOlk7bGV0IHJlPWAke1cuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0vPyR7''@;'; put 'put ''Il9wcm9ncmFtPSIrdGV9YDtpZihXLnNlcnZlclR5cGU9PT1OLlNlcnZlclR5cGUuU2FzVml5YSl7bGV0IFNlO3RyeXtTZT15aWVsZCB0aGlzLmdldEpvYlVyaShZKX1jYXRjaCh6ZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh6LGcpPT5EKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt6''@;'; put 'put ''ZSBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoWSxCLFcsWixxLFEpLnRoZW4oeT0+e3ooeSl9LHk9PntnKHkpfSkpLFgmJih5aWVsZCBYKCkpKTpnKG5ldyB3LkVycm9yUmVzcG9uc2UoemU/Lm1lc3Nh''@;'; put 'put ''Z2UsemUpKX0pKX1yZSs9U2UubGVuZ3RoPjA/IiZfam9iPSIrU2U6IiIsU2UubGVuZ3RoPjAmJihyZSs9IiZfam9iPSIrU2UscmU9cmUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxyZSs9Vy5jb250ZXh0TmFtZSYmIS9ccy8udGVzdChXLmNvbnRleHROYW1lKT9gJl9jb250''@;'; put 'put ''ZXh0bmFtZT0ke1cuY29udGV4dE5hbWV9YDoiIn1sZXQgb2U9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLGdlPSgwLFIuZ2V0Rm9ybURhdGEpKCk7aWYoQil7Y29uc3QgU2U9SlNPTi5zdHJpbmdpZnkoQik7aWYoVy5zZXJ2ZXJUeXBlPT09Ti5TZXJ2ZXJUeXBl''@;'; put 'put ''LlNhczl8fFNlLmxlbmd0aD41ZTV8fFNlLmluY2x1ZGVzKCI7IikpdHJ5e2dlPSgwLEYuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoZ2UsQil9Y2F0Y2goemUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKHplPy5tZXNzYWdlLHplKSl9ZWxzZSB0cnl7Y29uc3R7''@;'; put 'put ''Zm9ybURhdGE6emUscmVxdWVzdFBhcmFtczp6fT0oMCxILmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShnZSxCKTtnZT16ZSxvZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sb2UpLHopfWNhdGNoKHplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZSh6''@;'; put 'put ''ZT8ubWVzc2FnZSx6ZSkpfX1mb3IoY29uc3QgU2UgaW4gb2Upb2UuaGFzT3duUHJvcGVydHkoU2UpJiZnZS5hcHBlbmQoU2Usb2VbU2VdKTtjb25zdCBfZT1nZSBpbnN0YW5jZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9''@;'; put 'put ''JHtnZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsemUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QocmUsZ2UscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKHo9PkQodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHosWSxXLmRlYnVnKTtsZXQgZz16LnJlc3VsdDtpZihXLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6Zz15aWVsZCgwLFIucGFyc2VTYXNWaXlhRGVidWdS''@;'; put 'put ''ZXNwb25zZSkoei5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2VydmVyVXJsKTticmVhaztjYXNlIE4uU2VydmVyVHlwZS5TYXM5Omc9InN0cmluZyI9PXR5cGVvZiB6LnJlc3VsdD8oMCxSLnBhcnNlV2Vib3V0UmVzcG9uc2UpKHoucmVzdWx0LHJlKTp6LnJlc3VsdH1jb25zdCB5''@;'; put 'put ''PSgwLFIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHtyZXN1bHQ6Zyxsb2c6ei5sb2d9LFEpO1NlKHkpfSkpLmNhdGNoKHo9PkQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ogaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50''@;'; put 'put ''LmFwcGVuZFJlcXVlc3QoeixZLFcuZGVidWcpLHplKG5ldyB3LkVycm9yUmVzcG9uc2Uoej8ubWVzc2FnZSx6KSkpLHogaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oWnx8emUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBz''@;'; put 'put ''dXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLHopKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoWSxCLFcsWixxLFEpLnRoZW4oZz0+e1NlKGcpfSxnPT57emUoZyl9KSksWCYmKHlpZWxkIFgoKSkpOnplKG5ldyB3LkVycm9y''@;'; put 'put ''UmVzcG9uc2Uoej8ubWVzc2FnZSx6KSl9KSl9KX0pfWdldEpvYlVyaShZKXtyZXR1cm4gRCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIXRoaXMuc2FzVml5YUFwaUNsaWVudClyZXR1cm4iIjtsZXQgVyxaLEI9IiI7aWYoKDAsUi5pc1JlbGF0aXZlUGF0aCkoWSkpe2NvbnN0''@;'; put 'put ''IFE9WS5zcGxpdCgiLyIpO1c9US5sZW5ndGg+MT9RWzBdOiIiLFo9US5sZW5ndGg+MT9RWzFdOiIifWVsc2V7Y29uc3QgUT1ZLnNwbGl0KCIvIik7Wj1RLnBvcCgpfHwiIixXPVEuam9pbigiLyIpfWlmKCFaKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5k''@;'; put 'put ''ZWZpbmVkLiIpO2NvbnN0IHE9eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihXKTtpZihxKXtjb25zdCBRPXEuZmluZChYPT5YLm5hbWU9PT1aJiYiam9iRGVmaW5pdGlvbiI9PT1YLmNvbnRlbnRUeXBlKTtRJiYoQj1RLnVyaSl9cmV0dXJuIEJ9KX19fSw4MjE3''@;'; put 'put ''OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihwLE4sdyxGKXt2b2lkIDA9PT1GJiYoRj13KTt2YXIgSD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE4sdyk7KCFIfHwo''@;'; put 'put ''ImdldCJpbiBIPyFOLl9fZXNNb2R1bGU6SC53cml0YWJsZXx8SC5jb25maWd1cmFibGUpKSYmKEg9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5bd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsRixIKX06ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9''@;'; put 'put ''dykscFtGXT1OW3ddfSksXz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocCxOKXtmb3IodmFyIHcgaW4gcCkiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sdykmJkQoTixwLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyhiKDE1NzApLEopLF8oYigzNDkxKSxKKSxfKGIoNDQ0NiksSiksXyhiKDYxMTgpLEopLF8oYigyNjkzKSxKKSxfKGIoNjA4NCksSiksXyhiKDEwNjUpLEopfSw0NTg4OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSks''@;'; put 'put ''Xz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHRlLHJlLG9lLGdlKXt2b2lkIDA9PT1nZSYmKGdlPW9lKTt2YXIgX2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyZSxvZSk7KCFfZXx8KCJnZXQiaW4gX2U/IXJl''@;'; put 'put ''Ll9fZXNNb2R1bGU6X2Uud3JpdGFibGV8fF9lLmNvbmZpZ3VyYWJsZSkpJiYoX2U9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJlW29lXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsZ2UsX2UpfTpmdW5jdGlvbih0ZSxyZSxvZSxnZSl7dm9pZCAwPT09Z2UmJihn''@;'; put 'put ''ZT1vZSksdGVbZ2VdPXJlW29lXX0pLE49dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHRlLHJlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnJlfSl9OmZ1bmN0aW9uKHRlLHJlKXt0''@;'; put 'put ''ZS5kZWZhdWx0PXJlfSksdz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24odGUpe2lmKHRlJiZ0ZS5fX2VzTW9kdWxlKXJldHVybiB0ZTt2YXIgcmU9e307aWYobnVsbCE9dGUpZm9yKHZhciBvZSBpbiB0ZSkiZGVmYXVsdCIhPT1vZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKHRlLG9lKSYmcChyZSx0ZSxvZSk7cmV0dXJuIE4ocmUsdGUpLHJlfSxGPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih0ZSxyZSxvZSxnZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gemUoeSl7dHJ5e2co''@;'; put 'put ''Z2UubmV4dCh5KSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHooeSl7dHJ5e2coZ2UudGhyb3coeSkpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBnKHkpe3kuZG9uZT9UZSh5LnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2Ygb2U/VGU6bmV3IG9lKGZ1bmN0''@;'; put 'put ''aW9uKFNlKXtTZShUZSl9KX0oeS52YWx1ZSkudGhlbih6ZSx6KX1nKChnZT1nZS5hcHBseSh0ZSxyZXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnRocm93SWZFcnJvcj1KLlJlcXVlc3RDbGllbnQ9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IEg9dyhiKDgzNzMpKSxSPWIoMTUyNyksaj1iKDEzOTUpLFA9YigyODEzKSxMPWIoOTc3OCksWT1iKDk1MjYpLEI9Yig1OTI4KSxXPWIoMTAwNSksWj1iKDk1MzkpO0ouUmVxdWVzdENsaWVudD1jbGFzcyBxe2NvbnN0cnVjdG9yKHJlLG9lLGdlLF9lKXt0aGlzLmJhc2VVcmw9cmUsdGhp''@;'; put 'put ''cy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz0oKT0+dGhpcy5yZXF1ZXN0cyx0aGlzLmNsZWFyUmVxdWVzdHM9KCk9Pnt0aGlzLnJlcXVl''@;'; put 'put ''c3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1UZT0+Rih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFNlPW51bGw7Y29uc3QgemU9e30sej1UZS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2cuaW5u''@;'; put 'put ''ZXJIVE1MPXo7Y29uc3QgeT1nLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIik7U2U9eT90aGlzLmJhc2VVcmwreS5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGw7Y29uc3QgeD15Py5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpO2Zvcihjb25zdCBWIG9mIHgp''@;'; put 'put ''InVzZXJfb2F1dGhfYXBwcm92YWwiPT09Vi5uYW1lJiYoVi52YWx1ZT0idHJ1ZSIpLHplW1YubmFtZV09Vi52YWx1ZTtjb25zdCBDPU9iamVjdC5rZXlzKHplKS5maW5kKFY9PlY/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKSk7QyYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPXplW0Nd''@;'; put 'put ''LHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZXx8IngtY3NyZi10b2tlbiIpO2NvbnN0IFQ9bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBWIGluIHplKXplLmhhc093blByb3BlcnR5KFYpJiZULmFwcGVuZChWLHplW1ZdKTtpZighU2UpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiB5aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChTZSxULHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihW''@;'; put 'put ''PT5WLmRhdGEpLmNhdGNoKFY9PnsoRC5sb2dnZXJ8fF8pLmVycm9yKFYpfSl9KSx0aGlzLnByZXR0aWZ5U3RyaW5nPVRlPT4oMCxaLmluc3BlY3QpKFRlLHtjb2xvcnM6ImJsZWFjaGVkIiE9PXRoaXMudmVyYm9zZU1vZGV9KSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PVRlPT57aWYoIVRl''@;'; put 'put ''KXJldHVybiIiO2xldCBTZTtpZigic3RyaW5nIj09dHlwZW9mIFRlKXRyeXtTZT1KU09OLnBhcnNlKFRlKX1jYXRjaHtTZT1UZX1lbHNlIFNlPVRlO2NvbnN0IHplPXRoaXMucHJldHRpZnlTdHJpbmcoU2UpLnNwbGl0KCJcbiIpO3JldHVybiB6ZS5sZW5ndGg+NTEmJih6ZS5zcGxpY2UoNTAp''@;'; put 'put ''LHplLnB1c2goIi4uLiIpKSx6ZS5qb2luKCJcbiIpfSx0aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2U9VGU9Pnt2YXIgU2UsemUseixnO2NvbnN0e3N0YXR1czp5LGNvbmZpZzp4LHJlcXVlc3Q6QyxkYXRhOlR9PVRlLFY9bnVsbCE9PShTZT1DPy5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6Ik5v''@;'; put 'put ''dCBwcm92aWRlZFxuIixVPW51bGwhPT0oej1udWxsPT09KHplPUM/LnJlcyl8fHZvaWQgMD09PXplP3ZvaWQgMDp6ZS5yYXdIZWFkZXJzKSYmdm9pZCAwIT09ej96OlsiTm90IHByb3ZpZGVkIl0sRT10aGlzLmZvcm1hdEhlYWRlcnMoVSksbT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KFQp''@;'; put 'put ''O3JldHVybiBudWxsPT09KGc9RC5sb2dnZXIpfHx2b2lkIDA9PT1nfHxnLmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtWfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh4LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmlu''@;'; put 'put ''Zyh5KX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHtFfSR7bT9gXG5cbiR7bX1gOiIifVxuYCksVGV9LHRoaXMuaGFuZGxlQXhpb3NFcnJvcj1UZT0+e3ZhciBTZSx6ZSx6LGcseSx4O2NvbnN0IEM9Ik5vdCBwcm92aWRlZCIse3Jlc3BvbnNlOlQscmVxdWVzdDpWLGNv''@;'; put 'put ''bmZpZzpVfT1UZTtsZXQgRT17X2hlYWRlcjpgJHtDfVxuYCxyZXM6e3Jhd0hlYWRlcnM6W0NdfX07ViYmKEU9e19oZWFkZXI6bnVsbCE9PSh6PW51bGwhPT0oU2U9Vi5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6bnVsbD09PSh6ZT1WLl9jdXJyZW50UmVxdWVzdCl8fHZvaWQgMD09PXplP3Zv''@;'; put 'put ''aWQgMDp6ZS5faGVhZGVyKSYmdm9pZCAwIT09ej96OkMscmVzOntyYXdIZWFkZXJzOm51bGwhPT0oeT1udWxsPT09KGc9Vi5yZXMpfHx2b2lkIDA9PT1nP3ZvaWQgMDpnLnJhd0hlYWRlcnMpJiZ2b2lkIDAhPT15P3k6W0NdfX0pO2xldCBtPVR8fHtzdGF0dXM6QyxyZXF1ZXN0OkUsY29uZmln''@;'; put 'put ''OlV8fHtkYXRhOkMsaGVhZGVyczp7fX0sZGF0YTpDfTtjb25zdHtzdGF0dXM6QSxyZXF1ZXN0OmFlLGRhdGE6bmV9PW0se19oZWFkZXI6bGUscmVzOndlfT1hZSxVZT10aGlzLmZvcm1hdEhlYWRlcnMod2UucmF3SGVhZGVycyksUWU9dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShuZSk7cmV0''@;'; put 'put ''dXJuIG51bGw9PT0oeD1ELmxvZ2dlcil8fHZvaWQgMD09PXh8fHguaW5mbyhgSFRUUCBSZXF1ZXN0IChmaXJzdCA1MCBsaW5lcyk6XG4ke2xlfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShVPy5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmco''@;'; put 'put ''QSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7VWV9JHtRZT9gXG5cbiR7UWV9YDoiIn1cbmApLFRlfSx0aGlzLmZvcm1hdEhlYWRlcnM9VGU9PlRlLnJlZHVjZSgoU2UsemUseik9PlNlKyh6JTI9PTA/YCR7MD09PXo/IiI6IlxuIn0ke3plfWA6YDogJHt6ZX1gKSwi''@;'; put 'put ''IiksdGhpcy5zZXRWZXJib3NlTW9kZT1UZT0+e3RoaXMudmVyYm9zZU1vZGU9VGUsdGhpcy52ZXJib3NlTW9kZT90aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCk6dGhpcy5kaXNhYmxlVmVyYm9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT0oVGU9dGhpcy5oYW5kbGVBeGlvc1Jlc3Bv''@;'; put 'put ''bnNlLFNlPXRoaXMuaGFuZGxlQXhpb3NFcnJvcik9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvcj10aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShUZSxTZSl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPSgpPT57dGhpcy5odHRwSW50ZXJjZXB0b3ImJnRoaXMuaHR0cENs''@;'; put 'put ''aWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QodGhpcy5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdldEhlYWRlcnM9KFRlLFNlKT0+e2NvbnN0IHplPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09U2UmJih6ZVsiQ29udGVudC1UeXBlIl09U2Up''@;'; put 'put ''LHplLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1TZT8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsVGUmJih6ZS5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtUZX1gKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSYmKHplW3RoaXMuY3NyZlRva2Vu''@;'; put 'put ''LmhlYWRlck5hbWVdPXRoaXMuY3NyZlRva2VuLnZhbHVlKSx6ZX0sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VBbmRTZXRD''@;'; put 'put ''c3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuY3NyZlRva2VuPVNlKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1UZT0+e3ZhciBTZTtjb25zdCB6ZT1udWxsPT09KFNlPVRlLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PVNl''@;'; put 'put ''P3ZvaWQgMDpTZS50b0xvd2VyQ2FzZSgpO2lmKHplKXJldHVybntoZWFkZXJOYW1lOnplLHZhbHVlOlRlLmhlYWRlcnNbemVdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9KFRlLFNlLHplPSExKT0+Rih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgej1UZS5yZXNwb25zZTtp''@;'; put 'put ''ZihUZSBpbnN0YW5jZW9mIGouQXV0aG9yaXplRXJyb3Ipe2NvbnN0IGc9eWllbGQgdGhpcy5odHRwQ2xpZW50LmdldChUZS5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goeT0+''@;'; put 'put ''e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1VcmwuICIpfSk7cmV0dXJuKDAsUi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoZz8uZGF0YSkmJih5aWVsZCB0aGlzLmF1dGhvcml6ZShnLmRhdGEpLmNhdGNoKHk9Pnt0aHJvdygw''@;'; put 'put ''LEwucHJlZml4TWVzc2FnZSkoeSwiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KSkseWllbGQgU2UoKS5jYXRjaCh5PT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHksIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KX1pZihU''@;'; put 'put ''ZSBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCksVGU7aWYoVGUgaW5zdGFuY2VvZiBXLkludmFsaWRTQVNqc0NzcmZFcnJvcilyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhYU1JGVG9rZW46ITB9KS50''@;'; put 'put ''aGVuKGc9Pnt2YXIgeTtjb25zdCB4PW51bGw9PT0oeT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMoZy5kYXRhKSl8fHZvaWQgMD09PXk/dm9pZCAwOnlb''@;'; put 'put ''MV07eCYmKGRvY3VtZW50LmNvb2tpZT14KX0pLmNhdGNoKGc9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pLHlpZWxkIFNlKCkuY2F0Y2goZz0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShnLCJFcnJvciB3aGls''@;'; put 'put ''ZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7aWYoNDAzPT09ej8uc3RhdHVzfHw0NDk9PT16Py5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4oeiksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUpcmV0dXJu''@;'; put 'put ''IHlpZWxkIFNlKCkuY2F0Y2goZz0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShnLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7dGhyb3cgVGV9aWYoNDA0PT09ej8uc3RhdHVzKXRocm93IG5ldyBqLk5vdEZvdW5kRXJyb3Ioei5jb25maWcu''@;'; put 'put ''dXJsKTtpZig1MDIhPT16Py5zdGF0dXMpdGhyb3cgVGUuaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSI9PT1UZS5jb2RlP25ldyBqLkNlcnRpZmljYXRlRXJyb3IoVGUubWVzc2FnZSk6VGUubWVzc2FnZT9UZTooMCxMLnByZWZpeE1lc3NhZ2UpKFRlLCJF''@;'; put 'put ''cnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIik7aWYoemUpdGhyb3cgbmV3IGouSW50ZXJuYWxTZXJ2ZXJFcnJvcn0pLHRoaXMuY3JlYXRlSHR0cENsaWVudChyZSxvZSksZ2UmJih0aGlzLnJlcXVlc3RzTGltaXQ9Z2UpLF9lJiYodGhpcy5zZXRWZXJib3NlTW9kZShfZSksdGhpcy5lbmFi''@;'; put 'put ''bGVWZXJib3NlTW9kZSgpKX1zZXRDb25maWcocmUsb2Upe3RoaXMuY3JlYXRlSHR0cENsaWVudChyZSxvZSl9c2F2ZUxvY2FsU3RvcmFnZVRva2VuKHJlLG9lKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLHJlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2Vu''@;'; put 'put ''IixvZSl9Z2V0Q3NyZlRva2VuKHJlPSJnZW5lcmFsIil7cmV0dXJuImZpbGUiPT09cmU/dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufWNsZWFyQ3NyZlRva2Vucygpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRD''@;'; put 'put ''c3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fWNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfWdldEJhc2VVcmwoKXtyZXR1cm4gdGhpcy5o''@;'; put 'put ''dHRwQ2xpZW50LmRlZmF1bHRzLmJhc2VVUkx8fCIifWFwcGVuZFJlcXVlc3QocmUsb2UsZ2Upe2xldCBfZT0iIixUZT0iIixTZT1udWxsO2dlJiYocmU/LmxvZz8oX2U9KDAsQi5wYXJzZVNvdXJjZUNvZGUpKHJlLmxvZyksVGU9KDAsQi5wYXJzZUdlbmVyYXRlZENvZGUpKHJlLmxvZyksU2U9''@;'; put 'put ''cmU/LnJlc3VsdD9yZS5yZXN1bHQuV09SSzpyZS5sb2cpOnJlPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIHJlLnJlc3VsdCYmKF9lPSgwLEIucGFyc2VTb3VyY2VDb2RlKShyZS5yZXN1bHQpLFRlPSgwLEIucGFyc2VHZW5lcmF0ZWRDb2RlKShyZS5yZXN1bHQpKSxTZT1yZS5yZXN1bHQu''@;'; put 'put ''V09SSykpO2NvbnN0IHplPSJzdHJpbmciPT10eXBlb2YgcmU/LnJlc3VsdD9yZT8ucmVzdWx0OkpTT04uc3RyaW5naWZ5KHJlPy5yZXN1bHQsbnVsbCwyKTt0aGlzLnJlcXVlc3RzLnB1c2goe2xvZ0ZpbGU6cmU/LmxvZ3x8emV8fHJlLHNlcnZpY2VMaW5rOm9lLHRpbWVzdGFtcDpuZXcgRGF0''@;'; put 'put ''ZSxzb3VyY2VDb2RlOl9lLGdlbmVyYXRlZENvZGU6VGUsU0FTV09SSzpTZX0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxpY2UoMCwxKX1nZXQocmUsb2UsZ2U9ImFwcGxpY2F0aW9uL2pzb24iLF9lPXt9LFRlPSExKXtyZXR1cm4g''@;'; put 'put ''Rih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgemU9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhvZSxnZSkpLF9lKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Z2U/InRleHQiOiJqc29uIix3aXRoWFNSRlRv''@;'; put 'put ''a2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1nZSYmKHplLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChyZSx6ZSkudGhlbih6PT4oKDAsSi50aHJvd0lmRXJyb3IpKHopLHRoaXMucGFyc2VSZXNwb25zZSh6KSkpLmNhdGNoKHo9PkYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKHosKCk9PnRoaXMuZ2V0KHJlLG9lLGdlLF9lKS5jYXRjaChnPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIp''@;'; put 'put ''fSksVGUpfSkpfSl9cG9zdChyZSxvZSxnZSxfZT0iYXBwbGljYXRpb24vanNvbiIsVGU9e30sU2U9e30pe3JldHVybiBGKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB6ZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKGdlLF9lKSks''@;'; put 'put ''VGUpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChyZSxvZSxPYmplY3QuYXNzaWduKHtoZWFkZXJzOnplLHdpdGhYU1JGVG9rZW46ITB9LFNlKSkudGhlbih6PT4oKDAsSi50aHJvd0lmRXJyb3IpKHopLHRoaXMucGFyc2VSZXNwb25zZSh6KSkpLmNhdGNoKHo9PkYodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKHosKCk9PnRoaXMucG9zdChyZSxvZSxnZSxfZSxUZSkpfSkpfSl9cHV0KHJlLG9lLGdlLF9lPXt9KXtyZXR1cm4gRih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9T2JqZWN0LmFz''@;'; put 'put ''c2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhnZSwiYXBwbGljYXRpb24vanNvbiIpKSxfZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQocmUsb2Use2hlYWRlcnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oU2U9PigoMCxKLnRocm93SWZFcnJvcikoU2UpLHRo''@;'; put 'put ''aXMucGFyc2VSZXNwb25zZShTZSkpKS5jYXRjaChTZT0+Rih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoU2UsKCk9PnRoaXMucHV0KHJlLG9lLGdlLF9lKSl9KSl9KX1kZWxldGUocmUsb2Upe3JldHVybiBGKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT10aGlzLmdldEhlYWRlcnMob2UsImFwcGxpY2F0aW9uL2pzb24iKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZShyZSx7aGVhZGVyczpnZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihfZT0+KCgwLEoudGhyb3dJZkVycm9yKShfZSks''@;'; put 'put ''dGhpcy5wYXJzZVJlc3BvbnNlKF9lKSkpLmNhdGNoKF9lPT5GKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihfZSwoKT0+dGhpcy5kZWxldGUocmUsb2UpKX0pKX0pfXBhdGNoKHJlLG9lPXt9LGdlKXtyZXR1cm4gRih0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9dGhpcy5nZXRIZWFkZXJzKGdlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaChyZSxvZSx7aGVhZGVyczpfZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihUZT0+KCgwLEoudGhyb3dJZkVycm9y''@;'; put 'put ''KShUZSksdGhpcy5wYXJzZVJlc3BvbnNlKFRlKSkpLmNhdGNoKFRlPT5GKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihUZSwoKT0+dGhpcy5wYXRjaChyZSxvZSxnZSkpfSkpfSl9dXBsb2FkRmlsZShyZSxvZSxnZSl7dmFyIF9l''@;'; put 'put ''O3JldHVybiBGKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT10aGlzLmdldEhlYWRlcnMoZ2UsImFwcGxpY2F0aW9uL2pzb24iKTtudWxsIT09KF9lPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbikmJnZvaWQgMCE9PV9lJiZfZS52YWx1ZSYmKFRlW3RoaXMuZmlsZVVw''@;'; put 'put ''bG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpO3RyeXtjb25zdCBTZT15aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChyZSxvZSx7aGVhZGVyczpUZSx0cmFuc2Zvcm1SZXF1ZXN0OnplPT56ZX0pO3JldHVybntyZXN1bHQ6U2UuZGF0YSxl''@;'; put 'put ''dGFnOlNlLmhlYWRlcnMuZXRhZ319Y2F0Y2goU2Upe2NvbnN0IHplPVNlLnJlc3BvbnNlO2lmKDQwMz09PXplPy5zdGF0dXN8fDQ0OT09PXplPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKHplKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJu''@;'; put 'put ''IHRoaXMudXBsb2FkRmlsZShyZSxvZSxnZSk7dGhyb3cgU2V9dGhyb3cgU2V9fSl9cGFyc2VSZXNwb25zZShyZSl7Y29uc3Qgb2U9cmU/LmhlYWRlcnM/cmUuaGVhZGVycy5ldGFnOiIiO2xldCBnZSxfZT0hMTt0cnl7Z2U9InN0cmluZyI9PXR5cGVvZiByZS5kYXRhP0pTT04ucGFyc2UocmUu''@;'; put 'put ''ZGF0YSk6cmUuZGF0YX1jYXRjaHt0cnl7Z2U9SlNPTi5wYXJzZSgoMCxQLnBhcnNlV2Vib3V0UmVzcG9uc2UpKHJlLmRhdGEpKX1jYXRjaHtnZT1yZS5kYXRhfV9lPSEwfWxldCBUZT17cmVzdWx0OmdlLGV0YWc6b2Usc3RhdHVzOnJlLnN0YXR1c307cmV0dXJuIF9lJiYoVGUubG9nPXJlLmRh''@;'; put 'put ''dGEpLFRlfWNyZWF0ZUh0dHBDbGllbnQocmUsb2Upe2NvbnN0IGdlPW9lP25ldyBILkFnZW50KG9lKTp2b2lkIDA7dGhpcy5odHRwQ2xpZW50PSgwLEIuY3JlYXRlQXhpb3NJbnN0YW5jZSkocmUsZ2UpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1fZT0+X2U+PTIw''@;'; put 'put ''MCYmX2U8PTQwMX19LEoudGhyb3dJZkVycm9yPXRlPT57dmFyIHJlLG9lLGdlLF9lLFRlLFNlLHplO3N3aXRjaCh0ZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgdGUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09dGUuZGF0YS5lcnJvcil0aHJvdyBuZXcgai5Mb2dpblJl''@;'; put 'put ''cXVpcmVkRXJyb3IodGUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiB0ZS5kYXRhJiYiaW52YWxpZCBjc3JmIHRva2VuISI9PT10ZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IFcuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiB0ZS5kYXRhP25ldyBqLkxvZ2luUmVxdWlyZWRFcnJvcih0ZS5kYXRhKTpuZXcgai5Mb2dpblJlcXVpcmVkRXJyb3J9aWYobnVsbCE9PShvZT1udWxsPT09KHJlPXRlLmRhdGEpfHx2b2lkIDA9PT1yZT92b2lkIDA6cmUuZW50aXR5SUQpJiZ2b2lkIDAhPT1vZSYmb2UuaW5jbHVkZXMoImxv''@;'; put 'put ''Z2luIikpdGhyb3cgbmV3IGouTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2YgdGUuZGF0YSYmKDAsUi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkodGUuZGF0YSkpdGhyb3cgbmV3IGouQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLHRlLnJlcXVl''@;'; put 'put ''c3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgdGUuZGF0YSYmKDAsUi5pc0xvZ0luUmVxdWlyZWQpKHRlLmRhdGEpJiYobnVsbD09PShfZT1udWxsPT09KGdlPXRlLmNvbmZpZyl8fHZvaWQgMD09PWdlP3ZvaWQgMDpnZS51cmwpfHx2b2lkIDA9PT1fZXx8IV9lLmluY2x1ZGVz''@;'; put 'put ''KCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IGouTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0oVGU9dGUuZGF0YSkmJnZvaWQgMCE9PVRlJiZUZS5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IGouQXV0aG9yaXplRXJyb3IodGUuZGF0YS5tZXNzYWdlLHRlLnJlcXVlc3QucmVzcG9u''@;'; put 'put ''c2VVUkwpO2lmKG51bGwhPT0oemU9bnVsbD09PShTZT10ZS5jb25maWcpfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UudXJsKSYmdm9pZCAwIT09emUmJnplLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgWS5TQVM5QXV0aEVycm9yO2NvbnN0IHo9WCh0ZS5kYXRhKTtpZih6KXRo''@;'; put 'put ''cm93IHp9O2NvbnN0IFg9dGU9PntpZighdGUpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IHJlPUpTT04ucGFyc2UodGU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKHJlLmVycm9yQ29kZSYmcmUubWVzc2FnZSlyZXR1cm4gbmV3IGouSm9iRXhlY3V0aW9uRXJyb3IocmUuZXJyb3JDb2RlLHJl''@;'; put 'put ''Lm1lc3NhZ2UsdGU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNoe310cnl7aWYodGU/LmluY2x1ZGVzKCd7ImVycm9yQ29kZScpKXtjb25zdCBvZT10ZS5zcGxpdCgneyJlcnJvckNvZGUnKTtpZihvZS5sZW5ndGg+MSl7Y29uc3QgZ2U9J3siZXJyb3JDb2RlJytvZVsxXS5zcGxpdCgn''@;'; put 'put ''In0nKVswXSsnIn0nLF9lPUpTT04ucGFyc2UoZ2UucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5ldyBqLkpvYkV4ZWN1dGlvbkVycm9yKF9lLmVycm9yQ29kZSxfZS5tZXNzYWdlLHRlPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fX1jYXRjaHt9dHJ5e2lmKHRlPy5tYXRjaCgv''@;'; put 'put ''c3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpe2NvbnN0IG9lPXRlLnNwbGl0KC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKTtpZihvZS5sZW5ndGg+MSl7Y29uc3QgZ2U9b2VbMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sX2U9Z2UuZW5kc1dpdGgoInJ1bm5l''@;'; put 'put ''ciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZvciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAk''@;'; put 'put ''e2dlfWA7cmV0dXJuIG5ldyBqLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxfZSwiIil9fX1jYXRjaHt9dHJ5e2lmKCF0ZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZ0ZT8ubWF0Y2goL1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZ0ZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQg''@;'; put 'put ''d2l0aCBlcnJvcnMuL2kpKXtjb25zdCBvZT10ZS5zcGxpdCgiPGgyPlNBUyBMb2c8L2gyPiIpO2lmKG9lLmxlbmd0aD4xKXtjb25zdCBnZT1vZVsxXS5zcGxpdCgiPHByZT4iKVsxXS5zcGxpdCgiPC9wcmU+IilbMF07cmV0dXJuIG5ldyBqLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCwiVGhpcyBy''@;'; put 'put ''ZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLGdlKX19fWNhdGNoe31yZXR1cm4gbnVsbH19LDc5NTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTCxZLEIsVyl7dm9pZCAw''@;'; put 'put ''PT09VyYmKFc9Qik7dmFyIFo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZLEIpOyghWnx8KCJnZXQiaW4gWj8hWS5fX2VzTW9kdWxlOloud3JpdGFibGV8fFouY29uZmlndXJhYmxlKSkmJihaPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZW0JdfX0pLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShMLFcsWil9OmZ1bmN0aW9uKEwsWSxCLFcpe3ZvaWQgMD09PVcmJihXPUIpLExbV109WVtCXX0pLF89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsWSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwsImRl''@;'; put 'put ''ZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOll9KX06ZnVuY3Rpb24oTCxZKXtMLmRlZmF1bHQ9WX0pLHA9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEwpe2lmKEwmJkwuX19lc01vZHVsZSlyZXR1cm4gTDt2YXIgWT17fTtpZihudWxsIT1MKWZvcih2YXIgQiBpbiBMKSJk''@;'; put 'put ''ZWZhdWx0IiE9PUImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLEIpJiZEKFksTCxCKTtyZXR1cm4gXyhZLEwpLFl9LE49dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsWSxCLFcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsUSl7''@;'; put 'put ''ZnVuY3Rpb24gWChvZSl7dHJ5e3JlKFcubmV4dChvZSkpfWNhdGNoKGdlKXtRKGdlKX19ZnVuY3Rpb24gdGUob2Upe3RyeXtyZShXLnRocm93KG9lKSl9Y2F0Y2goZ2Upe1EoZ2UpfX1mdW5jdGlvbiByZShvZSl7b2UuZG9uZT9xKG9lLnZhbHVlKTpmdW5jdGlvbiBaKHEpe3JldHVybiBxIGlu''@;'; put 'put ''c3RhbmNlb2YgQj9xOm5ldyBCKGZ1bmN0aW9uKFEpe1EocSl9KX0ob2UudmFsdWUpLnRoZW4oWCx0ZSl9cmUoKFc9Vy5hcHBseShMLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TYXM5UmVxdWVzdENsaWVudD12''@;'; put 'put ''b2lkIDA7Y29uc3Qgdz1iKDgyMjQpLEY9cChiKDc4NTcpKSxIPWIoOTc3OCksUj1iKDQ1ODgpLGo9YigxMzk1KTtKLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIFAgZXh0ZW5kcyBSLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoWSxCKXtzdXBlcihZLEIpLHRoaXMuaHR0cENsaWVudC5kZWZh''@;'; put 'put ''dWx0cy5tYXhSZWRpcmVjdHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9Vz0+Vz49MjAwJiZXPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgRi5Db29raWVKYXIp''@;'; put 'put ''fWxvZ2luKFksQixXKXtyZXR1cm4gTih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWj1gL1VzZXIgRm9sZGVycy8ke1l9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFy''@;'; put 'put ''LnJlbW92ZUFsbENvb2tpZXMoKSx5aWVsZCB0aGlzLmdldChgJHtXfT9fcHJvZ3JhbT0ke1p9Jl91c2VybmFtZT0ke1l9Jl9wYXNzd29yZD0ke0J9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoWSxCLFc9ImFwcGxpY2F0aW9uL2pzb24iLFo9e30scT0hMSl7cmV0dXJuIE4odGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFg9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhCLFcpKSxaKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Vz8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVy''@;'; put 'put ''biJ0ZXh0L3BsYWluIj09PVcmJihYLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChZLFgpLnRoZW4odGU9PjMwMj09PXRlLnN0YXR1cz90aGlzLmdldCh0ZS5oZWFkZXJzLmxvY2F0aW9uLEIsVyk6KCgwLFIudGhyb3dJZkVycm9yKSh0ZSksdGhpcy5wYXJz''@;'; put 'put ''ZVJlc3BvbnNlKHRlKSkpLmNhdGNoKHRlPT5OKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0ZSBpbnN0YW5jZW9mIGouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgdGU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IodGUsKCk9PnRoaXMuZ2V0KFksQixXLFopLmNhdGNo''@;'; put 'put ''KHJlPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHJlLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHEpLmNhdGNoKHJlPT57dGhyb3coMCxILnByZWZpeE1lc3NhZ2UpKHJlLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0pKX0p''@;'; put 'put ''fXBvc3QoWSxCLFcsWj0iYXBwbGljYXRpb24vanNvbiIscT17fSl7cmV0dXJuIE4odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFE9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhXLFopKSxxKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50''@;'; put 'put ''LnBvc3QoWSxCLHtoZWFkZXJzOlEsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oWD0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIDMwMj09PVguc3RhdHVzP3lpZWxkIHRoaXMuZ2V0KFguaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsWixxKTooKDAsUi50aHJvd0lmRXJy''@;'; put 'put ''b3IpKFgpLHRoaXMucGFyc2VSZXNwb25zZShYKSl9KSkuY2F0Y2goWD0+Tih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoWCwoKT0+dGhpcy5wb3N0KFksQixXLFoscSkpfSkpfSl9fX0sMzYwMjooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TQVNKU19MT0dTX1NFUEFSQVRPUj1KLlNhc2pzUmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3QgRD1iKDQ1ODgpO0ouU2FzanNSZXF1ZXN0Q2xpZW50PWNsYXNzIF8gZXh0ZW5kcyBELlJlcXVl''@;'; put 'put ''c3RDbGllbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0SGVhZGVycz0oTix3KT0+e3ZhciBGO2NvbnN0IEg9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT13JiYoSFsiQ29udGVudC1UeXBlIl09dyksSC5BY2NlcHQ9ImFw''@;'; put 'put ''cGxpY2F0aW9uL2pzb24iPT09dz93OiIqLyoiLCFOJiZ0eXBlb2Ygd2luZG93PCJ1IiYmKE49bnVsbCE9PShGPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2Nlc3NUb2tlbiIpKSYmdm9pZCAwIT09Rj9GOnZvaWQgMCksTiYmKEguQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7Tn1gKSxIfX1wYXJz''@;'; put 'put ''ZVJlc3BvbnNlKE4pe2NvbnN0IHc9Tj8uaGVhZGVycz9OLmhlYWRlcnMuZXRhZzoiIjtsZXQgSCxSLGosRj17fTt0cnl7Rj0ic3RyaW5nIj09dHlwZW9mIE4uZGF0YT9KU09OLnBhcnNlKE4uZGF0YSk6Ti5kYXRhfWNhdGNoe2lmKE4uZGF0YS5pbmNsdWRlcyhKLlNBU0pTX0xPR1NfU0VQQVJB''@;'; put 'put ''VE9SKSl7Y29uc3R7ZGF0YTpZfT1OLEI9WS5zcGxpdChKLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTtIPUIuc3BsaWNlKDAsMSlbMF0sdm9pZCAwIT09SCYmKEY9SCk7Y29uc3QgVz1CLnNwbGljZSgwLEIubGVuZ3RoLTEpLFo9bmV3IFJlZ0V4cChgJHtKLlNBU0pTX0xPR1NfU0VQQVJBVE9SfSRg''@;'; put 'put ''KSxxPUJbMF07cSYmKFoudGVzdChZKT9XLmxlbmd0aD4xJiZXLnB1c2gocSk6aj1xKSxSPVcuam9pbihKLlNBU0pTX0xPR1NfU0VQQVJBVE9SKX1lbHNlIEY9Ti5kYXRhfWNvbnN0IFA9e3Jlc3VsdDpGLGxvZzpSfHwiIixldGFnOncsc3RhdHVzOk4uc3RhdHVzfTtyZXR1cm4gaiYmKFAucHJp''@;'; put 'put ''bnRPdXRwdXQ9aiksUH19LEouU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSl9LDQ2NjY6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjE3NzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2''@;'; put 'put ''OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ5NzU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMjE1OihjZSxKKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3ODI6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDE2ODooY2UsSik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM4NDA6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzE1MzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxNDI4OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''SiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBELF87T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouTG9naW5NZWNoYW5pc209Si5TQVNqc0NvbmZpZz12b2lkIDAsSi5TQVNqc0NvbmZpZz1j''@;'; put 'put ''bGFzcyBie2NvbnN0cnVjdG9yKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIsdGhpcy5wYXRoU0FTOT0iIix0aGlzLnBhdGhTQVNWaXlhPSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1udWxsLHRoaXMuZGVidWc9ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMu''@;'; put 'put ''Y29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1ELkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0PTEwfX0sKF89RD1KLkxvZ2luTWVjaGFuaXNtfHwoSi5Mb2dpbk1lY2hhbmlzbT17fSkpLkRlZmF1bHQ9IkRlZmF1bHQiLF8u''@;'; put 'put ''UmVkaXJlY3RlZD0iUmVkaXJlY3RlZCJ9LDYwMzg6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLlNlc3Npb25TdGF0ZT12b2lkIDAsKEQ9Si5TZXNzaW9uU3RhdGV8fChKLlNlc3Npb25TdGF0ZT17''@;'; put 'put ''fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixELlJ1bm5pbmc9InJ1bm5pbmciLEQuUGVuZGluZz0icGVuZGluZyIsRC5JZGxlPSJpZGxlIixELlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsRC5Ob1N0YXRlPSIiLEQuRmFpbGVkPSJmYWlsZWQiLEQuRXJyb3I9ImVycm9yIn0sOTQ5MzooY2Us''@;'; put 'put ''Sik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDEyNDooY2UsSik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouQXV0aG9yaXplRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKF8pLHRoaXMubWVzc2FnZT1fLHRoaXMuY29uZmlybVVybD1wLHRoaXMu''@;'; put 'put ''bmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5BdXRob3JpemVFcnJvcj1ifSw5NDY1OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5DZXJ0''@;'; put 'put ''aWZpY2F0ZUVycm9yPXZvaWQgMDtjbGFzcyBEIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IocCl7c3VwZXIoYCR7cH1cblBsZWFzZSB2aXNpdCB0aGUgbGluayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSBodHRwczovL2dpdGh1Yi5jb20vc2FzanMv''@;'; put 'put ''Y2xpL2lzc3Vlcy8xMTgxI2lzc3VlY29tbWVudC0xMDkwNjM4NTg0XG5gKSx0aGlzLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLEQucHJvdG90eXBlKX19Si5DZXJ0aWZpY2F0ZUVycm9yPUR9LDUyNjc6KGNlLEopPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8scCl7c3VwZXIoIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpLHRoaXMuam9i''@;'; put 'put ''PV8sdGhpcy5sb2c9cCx0aGlzLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj1ifSw5MjMyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5FcnJvclJlc3BvbnNlPXZvaWQgMCxKLkVycm9yUmVzcG9uc2U9Y2xhc3MgYntjb25zdHJ1Y3RvcihfLHAsTil7bGV0IHc9cDtpZigib2JqZWN0IiE9dHlwZW9mIHApdHJ5e3c9SlNPTi5wYXJzZShwKX1jYXRjaHtOPXAsdz0iIn10''@;'; put 'put ''aGlzLmVycm9yPXttZXNzYWdlOl8sZGV0YWlsczp3LHJhdzpOfX19fSw1MTA5OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJy''@;'; put 'put ''b3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IEludGVybmFsIHNlcnZlciBlcnJvci4iKSx0aGlzLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5JbnRlcm5hbFNlcnZlckVycm9yPWJ9LDU1MTg6KGNlLEop''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogaW52YWxpZCBKc29uIHN0cmluZyIpLHRo''@;'; put 'put ''aXMubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLkludmFsaWRKc29uRXJyb3I9Yn0sMTAwNTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LEouSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQXV0aCBlcnJvcjogSW52YWxpZCBDU1JGIHRva2VuISIpLHRoaXMubmFtZT0iSW52YWxpZFNBU2pzQ3NyZkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dGhpcyxiLnByb3RvdHlwZSl9fUouSW52YWxpZFNBU2pzQ3NyZkVycm9yPWJ9LDg1MzE6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMg''@;'; put 'put ''RXJyb3J7Y29uc3RydWN0b3IoXyxwLE4pe3N1cGVyKGBFcnJvciBDb2RlICR7X306ICR7cH1gKSx0aGlzLmVycm9yQ29kZT1fLHRoaXMuZXJyb3JNZXNzYWdlPXAsdGhpcy5yZXN1bHQ9Tix0aGlzLm5hbWU9IkpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxi''@;'; put 'put ''LnByb3RvdHlwZSl9fUouSm9iRXhlY3V0aW9uRXJyb3I9Yn0sOTA3OTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25z''@;'; put 'put ''dHJ1Y3RvcihfLHApe3N1cGVyKGBFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICR7X306ICR7cC5tZXNzYWdlfHxwfWApLHRoaXMub3JpZ2luYWxFcnJvcj1wLHRoaXMubmFtZT0iSm9iU3RhdGVQb2xsRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJv''@;'; put 'put ''dG90eXBlKX19Si5Kb2JTdGF0ZVBvbGxFcnJvcj1ifSwzMDk2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtzdXBlcigiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKSx0aGlzLm5hbWU9Ikpzb25QYXJzZUFycmF5RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5Kc29uUGFyc2VBcnJheUVycm9yPWJ9LDY3NDM6KGNlLEopPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBBdXRoIGVycm9yOiAke18/SlNPTi5zdHJpbmdpZnko''@;'; put 'put ''XyxudWxsLDIpOiJZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gYWNjZXNzIHRoaXMgcmVzb3VyY2UifWApLHRoaXMubmFtZT0iTG9naW5SZXF1aXJlZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fUouTG9naW5SZXF1aXJlZEVycm9yPWJ9LDc4NjQ6KGNl''@;'; put 'put ''LEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHAsTil7c3VwZXIoYENvdWxkIG5vdCBnZXQgc2Vzc2lv''@;'; put 'put ''biBzdGF0ZS4gU2VydmVyIHJlc3BvbmRlZCB3aXRoICR7X30gd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAke3B9YCksdGhpcy5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1fLHRoaXMuc2Vzc2lvblN0YXRlVXJsPXAsdGhpcy5sb2dVcmw9Tix0aGlzLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0''@;'; put 'put ''LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLk5vU2Vzc2lvblN0YXRlRXJyb3I9Yn0sOTU3NzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouTm90Rm91bmRFcnJvcj12b2lkIDA7Y2xhc3Mg''@;'; put 'put ''YiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogUmVzb3VyY2UgYXQgJHtffSB3YXMgbm90IGZvdW5kYCksdGhpcy51cmw9Xyx0aGlzLm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19Si5Ob3RGb3Vu''@;'; put 'put ''ZEVycm9yPWJ9LDkyNzk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO2NvbnN0IEQ9Yig2Nzk5KTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3Ry''@;'; put 'put ''dWN0b3IoTix3LEYpe2xldCBIPWBSb290IGZvbGRlciAke059IHdhcyBub3QgZm91bmQuXG5QbGVhc2UgY2hlY2sgJHt3fS9TQVNEcml2ZS5cbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbmA7aWYoRil7bGV0IGo9KDAs''@;'; put 'put ''RC5kZWNvZGVUb2tlbikoRikuc2NvcGU7aj1qLm1hcChQPT4iKiAiK1ApLEgrPSJZb3VyIGFjY2VzcyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNjb3BlczpcbiIrai5qb2luKCJcbiIpfXN1cGVyKEgpLHRoaXMubmFtZT0iUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5z''@;'; put 'put ''ZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19Si5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1ffSw5NTI2OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5TQVM5QXV0aEVycm9yPXZvaWQgMDtjbGFz''@;'; put 'put ''cyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIiksdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIs''@;'; put 'put ''T2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1KLlNBUzlBdXRoRXJyb3I9Yn0sODg3NTooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7''@;'; put 'put ''Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICR7X31gKSx0aGlzLnVybD1fLHRoaXMubmFtZT0iV2Vib3V0UmVzcG9uc2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5w''@;'; put 'put ''cm90b3R5cGUpfX1KLldlYm91dFJlc3BvbnNlRXJyb3I9Yn0sMTM5NTpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyk7dmFyIEg9T2Jq''@;'; put 'put ''ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOLHcpOyghSHx8KCJnZXQiaW4gSD8hTi5fX2VzTW9kdWxlOkgud3JpdGFibGV8fEguY29uZmlndXJhYmxlKSkmJihIPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShw''@;'; put 'put ''LEYsSCl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChO''@;'; put 'put ''LHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigxMjQpLEopLF8oYig5NDY1KSxKKSxfKGIoNTI2NyksSiksXyhiKDkyMzIpLEopLF8oYig1MTA5KSxKKSxfKGIoNTUxOCksSiksXyhiKDg1MzEpLEopLF8oYig5MDc5KSxK''@;'; put 'put ''KSxfKGIoMzA5NiksSiksXyhiKDY3NDMpLEopLF8oYig3ODY0KSxKKSxfKGIoOTU3NyksSiksXyhiKDkyNzkpLEopLF8oYig4ODc1KSxKKX0sMTIzMDpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/''@;'; put 'put ''ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyk7dmFyIEg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOLHcpOyghSHx8KCJnZXQiaW4gSD8hTi5fX2VzTW9kdWxlOkgud3JpdGFibGV8fEguY29uZmlndXJhYmxlKSkmJihIPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBOW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYsSCl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQi''@;'; put 'put ''IT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcpJiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYig0NzApLEopLF8oYig0NjY2KSxKKSxfKGIoNDk3NSksSiksXyhiKDU3NjYpLEopLF8oYigy''@;'; put 'put ''MTUpLEopLF8oYig0NzgyKSxKKSxfKGIoNDE2OCksSiksXyhiKDg1MTYpLEopLF8oYigzODQwKSxKKSxfKGIoNTg0MSksSiksXyhiKDE0MjgpLEopLF8oYig2MDM4KSxKKSxfKGIoOTQ5MyksSiksXyhiKDMxNTMpLEopLF8oYig4NjUwKSxKKSxfKGIoNjE3NyksSiksXyhiKDEzOTUpLEopfSwz''@;'; put 'put ''MzAyOmZ1bmN0aW9uKGNlLEopeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxwLE4sdyl7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxSKXtmdW5jdGlvbiBqKFkpe3RyeXtMKHcubmV4dChZKSl9Y2F0Y2goQil7UihCKX19''@;'; put 'put ''ZnVuY3Rpb24gUChZKXt0cnl7TCh3LnRocm93KFkpKX1jYXRjaChCKXtSKEIpfX1mdW5jdGlvbiBMKFkpe1kuZG9uZT9IKFkudmFsdWUpOmZ1bmN0aW9uIEYoSCl7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3IE4oZnVuY3Rpb24oUil7UihIKX0pfShZLnZhbHVlKS50aGVuKGosUCl9TCgo''@;'; put 'put ''dz13LmFwcGx5KF8scHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPXZvaWQgMCxKLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPWZ1bmN0aW9uIEQoXyxw''@;'; put 'put ''KXtyZXR1cm4gYih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IE49e307aWYocD8ubGVuZ3RoKXtjb25zdCB3PXAucmVkdWNlKChGLEgpPT4oRltIXT1fW0hdLEYpLHt9KTtOPU9iamVjdC5hc3NpZ24oe3Jlc3VsdDpfLnJlc3VsdH0sdyl9ZWxzZSBOPV8ucmVzdWx0O3JldHVy''@;'; put 'put ''biBOfSl9fSw3OTIyOmZ1bmN0aW9uKGNlLEopeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxwLE4sdyl7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oSCxSKXtmdW5jdGlvbiBqKFkpe3RyeXtMKHcubmV4dChZKSl9Y2F0Y2go''@;'; put 'put ''Qil7UihCKX19ZnVuY3Rpb24gUChZKXt0cnl7TCh3LnRocm93KFkpKX1jYXRjaChCKXtSKEIpfX1mdW5jdGlvbiBMKFkpe1kuZG9uZT9IKFkudmFsdWUpOmZ1bmN0aW9uIEYoSCl7cmV0dXJuIEggaW5zdGFuY2VvZiBOP0g6bmV3IE4oZnVuY3Rpb24oUil7UihIKX0pfShZLnZhbHVlKS50aGVu''@;'; put 'put ''KGosUCl9TCgodz13LmFwcGx5KF8scHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmFzeW5jRm9yRWFjaD12b2lkIDAsSi5hc3luY0ZvckVhY2g9ZnVuY3Rpb24gRChfLHApe3JldHVybiBiKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtmb3IobGV0IE49MDtOPF8ubGVuZ3RoO04rKyl5aWVsZCBwKF9bTl0sTixfKX0pfX0sMzc5MzooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouY29tcGFyZVRpbWVzdGFtcHM9dm9p''@;'; put 'put ''ZCAwLEouY29tcGFyZVRpbWVzdGFtcHM9KEQsXyk9Pl8udGltZXN0YW1wLmdldFRpbWUoKS1ELnRpbWVzdGFtcC5nZXRUaW1lKCl9LDI0MDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksSi5pc0Zvcm1hdHNUYWJsZT1KLmNvbnZlcnRUb0NTVj12b2lkIDA7Y29uc3QgXz1iKDY0NjcpLHA9Yig5Nzc4KTtKLmNvbnZlcnRUb0NTVj0oSCxSKT0+e3ZhciBqO2lmKCFIW1JdKXtjb25zdCBRPSgwLHAucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZl''@;'; put 'put ''cnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9PXR5cGVvZiBRP25ldyBFcnJvcihRKTpRfWNvbnN0IFA9SFtSXTtpZighQXJyYXkuaXNBcnJheShQKSlyZXR1cm4iIjtsZXQgQixMPW51bGw9PT0oaj1IW2AkJHtSfWBdKXx8dm9p''@;'; put 'put ''ZCAwPT09aj92b2lkIDA6ai5mb3JtYXRzLFk9W10sVz0hMTtMJiYoWT1PYmplY3Qua2V5cyhMKS5tYXAoUT0+YCR7UX06JHtMW1FdfWApKTtjb25zdCBaPU9iamVjdC5rZXlzKFBbMF0pO3JldHVybiBaLmZvckVhY2goUT0+e2lmKCFMfHwhT2JqZWN0LmtleXMoTCkuaW5jbHVkZXMoUSkpe2xl''@;'; put 'put ''dCBYPSExLHRlPSExO2lmKFAuZm9yRWFjaChyZT0+e251bGw9PT1yZVtRXXx8Im51bWJlciI9PXR5cGVvZiByZVtRXT9YPSEwOiJzdHJpbmciPT10eXBlb2YgcmVbUV0mJigwLF8uaXNTcGVjaWFsTWlzc2luZykocmVbUV0pJiYodGU9ITApfSksWCYmdGUpWS5wdXNoKGAke1F9OmJlc3QuYCks''@;'; put 'put ''THx8KEw9e30pLExbUV09ImJlc3QuIjtlbHNle2xldCByZT1udWxsLG9lPSExLGdlPS0xO2NvbnN0IF9lPVAubWFwKChUZSxTZSk9PntpZihUZVtRXXx8IiI9PT1UZVtRXSl7bGV0IHplO3JldHVybiByZT9vZXx8KG9lPSgiIj09PVRlW1FdfHwic3RyaW5nIj09dHlwZW9mIFRlW1FdPyJjaGFy''@;'; put 'put ''cyI6Im51bWJlciIpIT09cmUsZ2U9b2U/U2UrMTotMSk6cmU9IiI9PT1UZVtRXXx8InN0cmluZyI9PXR5cGVvZiBUZVtRXT8iY2hhcnMiOiJudW1iZXIiLCJzdHJpbmciPT10eXBlb2YgVGVbUV0mJih6ZT1GKFRlW1FdKSksemV9fSkuc29ydCgoVGUsU2UpPT5TZS1UZSlbMF07X2UmJl9lPjMy''@;'; put 'put ''NzY1JiYoVz0hMCksb2UmJkQuZXJyb3IoYFJvdyAoJHtnZX0pLCBDb2x1bW4gKCR7UX0pIGhhcyBtaXhlZCB0eXBlczogRVJST1JgKSxZLnB1c2goYCR7UX06JHsiY2hhcnMiPT09cmU/IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PXJlPyIxIjoiYmVzdCIpfS5gKX19fSksTCYmKFk9WS5z''@;'; put 'put ''b3J0KChRLFgpPT5aLmluZGV4T2YoUS5yZXBsYWNlKC86LiovLCIiKSktWi5pbmRleE9mKFgucmVwbGFjZSgvOi4qLywiIikpKSksVz8iRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiOihCPVAubWFwKFE9Pk9iamVjdC5rZXlzKFEpLm1hcCgodGUscmUpPT57bGV0IG9lO2NvbnN0IGdlPVFb''@;'; put 'put ''dGVdO2lmKCJudW1iZXIiPT10eXBlb2YgZ2UpcmV0dXJuIGdlO2lmKG9lPW51bGw9PT1nZT8iIjpnZSxMJiYiYmVzdC4iPT09TFt0ZV0pe2lmKG9lJiYhKDAsXy5pc1NwZWNpYWxNaXNzaW5nKShvZSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4gb25seSBi''@;'; put 'put ''ZSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAnQScgdG8gJ1onLCAnXycsICcuW2Etel0nLCAnLl8nIik7cmV0dXJuYCR7b2UuaW5jbHVkZXMoIi4iKT8iIjoiLiJ9JHtvZS50b0xvd2VyQ2FzZSgpfWB9cmV0dXJuIG9lPW9lLnJlcGxhY2UoLyIvZywnIiInKSxvZT1gIiR7b2V9ImAsb2Uuc3Vi''@;'; put 'put ''c3RyaW5nKDEsb2UubGVuZ3RoLTEpLnNlYXJjaCgvKFx0fFxufFxyfCx8XCd8XCIpL2dtKTwwJiYob2U9b2Uuc3Vic3RyaW5nKDEsb2UubGVuZ3RoLTEpKSxvZT1vZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpLCIiPT09b2UmJllbcmVdLmluY2x1ZGVzKCJiZXN0IikmJihvZT0iLiIpLG9lfSku''@;'; put 'put ''am9pbigiLCIpKSxZLmpvaW4oIiwiKS5yZXBsYWNlKC8sL2csIiAiKSsiXHJcbiIrQi5qb2luKCJcclxuIikpfSxKLmlzRm9ybWF0c1RhYmxlPUg9Pi9eXCQuKi8udGVzdChIKTtjb25zdCBGPUg9PntsZXQgUj1ILmxlbmd0aDtmb3IobGV0IGo9SC5sZW5ndGgtMTtqPj0wO2otLSl7Y29uc3Qg''@;'; put 'put ''UD1ILmNoYXJDb2RlQXQoaik7UD4xMjcmJlA8PTIwNDc/UisrOlA+MjA0NyYmUDw9NjU1MzUmJihSKz0yKSxQPj01NjMyMCYmUDw9NTczNDMmJmotLX1yZXR1cm4gUn19LDYxMTY6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8''@;'; put 'put ''fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouY3JlYXRlQXhpb3NJbnN0YW5jZT12b2lkIDA7Y29uc3QgXz1EKGIoNzIxOCkpO0ouY3JlYXRlQXhpb3NJbnN0''@;'; put 'put ''YW5jZT0oTix3KT0+Xy5kZWZhdWx0LmNyZWF0ZSh7YmFzZVVSTDpOLGh0dHBzQWdlbnQ6d30pfSw5ODI1OihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5kZWxheT12b2lkIDAsSi5kZWxheT1EPT5uZXcgUHJv''@;'; put 'put ''bWlzZShfPT5zZXRUaW1lb3V0KF8sRCkpfSw5OTA6ZnVuY3Rpb24oY2UsSixiKXsidXNlIHN0cmljdCI7dmFyIEQ9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSCxSLGosUCl7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxC''@;'; put 'put ''KXtmdW5jdGlvbiBXKFEpe3RyeXtxKFAubmV4dChRKSl9Y2F0Y2goWCl7QihYKX19ZnVuY3Rpb24gWihRKXt0cnl7cShQLnRocm93KFEpKX1jYXRjaChYKXtCKFgpfX1mdW5jdGlvbiBxKFEpe1EuZG9uZT9ZKFEudmFsdWUpOmZ1bmN0aW9uIEwoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBqP1k6''@;'; put 'put ''bmV3IGooZnVuY3Rpb24oQil7QihZKX0pfShRLnZhbHVlKS50aGVuKFcsWil9cSgoUD1QLmFwcGx5KEgsUnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmZldGNoTG9nPUouZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7''@;'; put 'put ''Y29uc3QgTj1iKDk3NzgpO0ouZmV0Y2hMb2dCeUNodW5rcz0oSCxSLGosUCk9PnAodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKDAsSi5mZXRjaExvZykoSCxSLGosMCxQKX0pLEouZmV0Y2hMb2c9KEgsUixqLFAsTCk9PnAodm9pZCAwLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1ELmxvZ2dlcnx8XztsZXQgQj0iIjtjb25zdCBXPUw8MWU0P0w6MWU0O2Rve1kuaW5mbyhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7UCsxfSB0byAke1ArV30gb2YgJHtMfS5gKTtjb25zdCBaPXlpZWxkIEguZ2V0KGAke2p9P3N0YXJ0PSR7''@;'; put 'put ''UH0mbGltaXQ9JHtXfWAsUikudGhlbihRPT5RLnJlc3VsdCkuY2F0Y2goUT0+e3Rocm93KDAsTi5wcmVmaXhNZXNzYWdlKShRLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KTtpZigwPT09Wi5pdGVtcy5sZW5ndGgpYnJlYWs7Qis9Wi5pdGVtcy5tYXAoUT0+US5saW5lKS5qb2luKCJc''@;'; put 'put ''biIpLFArPVd9d2hpbGUoUDxMKTtyZXR1cm4gQn0pfSw3MTQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO2NvbnN0IEQ9YigyNDAyKSxfPWIoNDc5OSk7''@;'; put 'put ''Si5mb3JtYXREYXRhRm9yUmVxdWVzdD1OPT57Y29uc3Qgdz1bXTtsZXQgRj0wO2NvbnN0IEg9e307Zm9yKGNvbnN0IFIgaW4gTil7aWYoKDAsRC5pc0Zvcm1hdHNUYWJsZSkoUikmJk9iamVjdC5rZXlzKE4pLmluY2x1ZGVzKFIucmVwbGFjZSgvXlwkLywiIikpKWNvbnRpbnVlO0YrKywoMCxE''@;'; put 'put ''LmlzRm9ybWF0c1RhYmxlKShSKXx8dy5wdXNoKFIpO2NvbnN0IGo9KDAsRC5jb252ZXJ0VG9DU1YpKE4sUik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWopdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2''@;'; put 'put ''NSBjaGFyYWN0ZXJzLiIpO2lmKGoubGVuZ3RoPjE2ZTMpe2NvbnN0IFA9KDAsXy5zcGxpdENodW5rcykoaik7SFtgc2FzanMke0Z9ZGF0YTBgXT1QLmxlbmd0aCxQLmZvckVhY2goKEwsWSk9PntIW2BzYXNqcyR7Rn1kYXRhJHtZKzF9YF09TH0pfWVsc2UgSFtgc2FzanMke0Z9ZGF0YWBdPWp9''@;'; put 'put ''cmV0dXJuIEguc2FzanNfdGFibGVzPXcuam9pbigiICIpLEh9fSw4NDU4OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmdldEZvcm1EYXRhPXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1EKGIoNjIzMCkpO0ouZ2V0Rm9ybURhdGE9KCk9PigwLF8uaXNOb2RlKSgpP25ldyBwLmRlZmF1bHQ6bmV3IEZvcm1EYXRhfSwzMjYwOihjZSxKKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLEouZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFn''@;'; put 'put ''ZX0sMTg4NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5nZXRWYWxpZEpzb249dm9pZCAwO2NvbnN0IEQ9YigxMzk1KTtKLmdldFZhbGlkSnNvbj1wPT57dHJ5e2lmKG51bGw9PXApdGhyb3cgbmV3IEQu''@;'; put 'put ''SW52YWxpZEpzb25FcnJvcjtpZihBcnJheS5pc0FycmF5KHApKXRocm93IG5ldyBELkpzb25QYXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBwP3A6IiI9PT1wP3t9OkpTT04ucGFyc2UocCl9Y2F0Y2goTil7dGhyb3cgTiBpbnN0YW5jZW9mIEQuSnNvblBhcnNlQXJyYXlF''@;'; put 'put ''cnJvcj9OOm5ldyBELkludmFsaWRKc29uRXJyb3J9fX0sNTkyODpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxOLHcsRil7dm9pZCAwPT09RiYmKEY9dyk7dmFyIEg9T2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOLHcpOyghSHx8KCJnZXQiaW4gSD8hTi5fX2VzTW9kdWxlOkgud3JpdGFibGV8fEguY29uZmlndXJhYmxlKSkmJihIPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLEYs''@;'; put 'put ''SCl9OmZ1bmN0aW9uKHAsTix3LEYpe3ZvaWQgMD09PUYmJihGPXcpLHBbRl09Tlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsTil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLHcp''@;'; put 'put ''JiZEKE4scCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigzMzAyKSxKKSxfKGIoNzkyMiksSiksXyhiKDM3OTMpLEopLF8oYigyNDAyKSxKKSxfKGIoNjExNiksSiksXyhiKDk4MjUpLEopLF8oYig5OTApLEopLF8oYigxODg0KSxKKSxf''@;'; put 'put ''KGIoNDI0MyksSiksXyhiKDI1NyksSiksXyhiKDIpLEopLF8oYigyNjE1KSxKKSxfKGIoMjkyMCksSiksXyhiKDI0MjIpLEopLF8oYigzMSksSiksXyhiKDY1MTUpLEopLF8oYig2NDE2KSxKKSxfKGIoMjgxMyksSiksXyhiKDk4OTYpLEopLF8oYig0Nzk5KSxKKSxfKGIoNDUxNiksSiksXyhi''@;'; put 'put ''KDg0NTgpLEopLF8oYigzMjYwKSxKKX0sNDI0MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzTm9kZT12b2lkIDAsSi5pc05vZGU9KCk9PnR5cGVvZiBEPCJ1IiYmbnVsbCE9''@;'; put 'put ''RC52ZXJzaW9ucyYmbnVsbCE9RC52ZXJzaW9ucy5ub2RlfSwyNTc6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxKLmlzUmVsYXRpdmVQYXRoPUQ9PiEhRCYmIUQuc3Rh''@;'; put 'put ''cnRzV2l0aCgiLyIpfSwyOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc1VyaT12b2lkIDAsSi5pc1VyaT1EPT4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KEQpfSwyNjE1OihjZSxKKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc1VybD12b2lkIDAsSi5pc1VybD1EPT57Y29uc3QgXz1bImh0dHA6IiwiaHR0cHM6Il07dHJ5e2NvbnN0IHA9bmV3IFVSTChEKTtpZighXy5pbmNsdWRlcyhwLnByb3RvY29sKSlyZXR1''@;'; put 'put ''cm4hMX1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24oY2UsSil7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihILFIsaixQKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihZLEIpe2Z1bmN0aW9uIFcoUSl7''@;'; put 'put ''dHJ5e3EoUC5uZXh0KFEpKX1jYXRjaChYKXtCKFgpfX1mdW5jdGlvbiBaKFEpe3RyeXtxKFAudGhyb3coUSkpfWNhdGNoKFgpe0IoWCl9fWZ1bmN0aW9uIHEoUSl7US5kb25lP1koUS52YWx1ZSk6ZnVuY3Rpb24gTChZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIGo/WTpuZXcgaihmdW5jdGlvbihC''@;'; put 'put ''KXtCKFkpfSl9KFEudmFsdWUpLnRoZW4oVyxaKX1xKChQPVAuYXBwbHkoSCxSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgRD1mdW5jdGlvbihIKXtyZXR1cm4gSC5z''@;'; put 'put ''dHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsSC5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixILmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEh9KER8fHt9KTtjb25zdCBfPSJzYXNqcy1hZGFwdGVyIixwPXtwb3BVcDpgJHtffXBvcFVwYCxwb3BVcEJHOmAk''@;'; put 'put ''e199cG9wVXBCR2B9O0oub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShIPT5iKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtSLmlkPUQuc3R5bGVzLFIuaW5uZXJUZXh0PUY7Y29uc3Qgaj1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtqLmlkPUQub3ZlcmxheSxqLmNsYXNzTGlzdC5hZGQocC5wb3BVcEJHKTtjb25zdCBQPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1AuaWQ9RC5kaWFsb2csUC5jbGFzc0xpc3QuYWRkKHAucG9wVXApO2NvbnN0IEw9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiaDEiKTtMLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsUC5hcHBlbmRDaGlsZChMKTtjb25zdCBZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO0IuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxv''@;'; put 'put ''Z2luLCBjbGljayBPSyB0byBsb2dpbi4iLFkuYXBwZW5kQ2hpbGQoQiksUC5hcHBlbmRDaGlsZChZKTtjb25zdCBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1cuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksVy5pbm5lclRleHQ9IkNhbmNlbCIsVy5vbmNsaWNrPSgpPT57dygp''@;'; put 'put ''LEgoITEpfSxQLmFwcGVuZENoaWxkKFcpO2NvbnN0IFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Wi5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksWi5pbm5lclRleHQ9Ik9rIixaLm9uY2xpY2s9KCk9Pnt3KCksSCghMCl9LFAuYXBwZW5kQ2hpbGQoWiksZG9jdW1lbnQuYm9k''@;'; put 'put ''eS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChQKX0pKTtjb25zdCB3PSgpPT57T2JqZWN0LnZhbHVlcyhEKS5mb3JFYWNoKEg9Pnt2YXIgUjtj''@;'; put 'put ''b25zdCBqPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEgpO251bGw9PT0oUj1qPy5wYXJlbnROb2RlKXx8dm9pZCAwPT09Unx8Ui5yZW1vdmVDaGlsZChqKX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxGPWBcbi4ke3AucG9wVXBCR30gLFxuLiR7cC5wb3BVcH0ge1xu''@;'; put 'put ''ICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke3AucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4''@;'; put 'put ''ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBv''@;'; put 'put ''dmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRl''@;'; put 'put ''KC01MCUsIC01MCUpO1xufVxuLiR7cC5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQw''@;'; put 'put ''cHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtc''@;'; put 'put ''biAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4ke3AucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQt''@;'; put 'put ''Ym94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9u''@;'; put 'put ''ZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke3AucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6''@;'; put 'put ''aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7cC5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0''@;'; put 'put ''OiBsZWZ0O1xufVxuLiR7cC5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtwLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3Jk''@;'; put 'put ''ZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFj''@;'; put 'put ''a2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7cC5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtwLnBvcFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAw''@;'; put 'put ''O1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7''@;'; put 'put ''XG59XG5gfSwyOTIwOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5uZWVkc1JldHJ5PXZvaWQgMCxKLm5lZWRzUmV0cnk9RD0+ISFEJiYoRC5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkQuaW5jbHVk''@;'; put 'put ''ZXMoIl9jc3JmIikmJkQuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxELmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmRC5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxELmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmRC5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2Vz''@;'; put 'put ''cywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX0sMjQyMjooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxKLnBhcnNlR2VuZXJhdGVkQ29kZT1EPT5ELnNwbGl0''@;'; put 'put ''KCJcbiIpLmZpbHRlcih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnBhcnNlU2FzVml5''@;'; put 'put ''YUxvZz12b2lkIDAsSi5wYXJzZVNhc1ZpeWFMb2c9cD0+e2xldCBOO3RyeXtOPXAuaXRlbXM/cC5pdGVtcy5tYXAodz0+dy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KHApfWNhdGNoKHcpe0QuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBs''@;'; put 'put ''b2cgcmVzcG9uc2UiLHcpLE49cH1yZXR1cm4gTn19LDY1MTU6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnBhcnNlU291cmNlQ29kZT12b2lkIDAsSi5wYXJzZVNvdXJjZUNvZGU9RD0+RC5zcGxpdCgiXG4i''@;'; put 'put ''KS5maWx0ZXIoTj0+Ti50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKGNlLEosYil7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLHcsRixIKXtyZXR1cm4g''@;'; put 'put ''bmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihqLFApe2Z1bmN0aW9uIEwoVyl7dHJ5e0IoSC5uZXh0KFcpKX1jYXRjaChaKXtQKFopfX1mdW5jdGlvbiBZKFcpe3RyeXtCKEgudGhyb3coVykpfWNhdGNoKFope1AoWil9fWZ1bmN0aW9uIEIoVyl7Vy5kb25lP2ooVy52YWx1ZSk6ZnVuY3Rp''@;'; put 'put ''b24gUihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIEY/ajpuZXcgRihmdW5jdGlvbihQKXtQKGopfSl9KFcudmFsdWUpLnRoZW4oTCxZKX1CKChIPUguYXBwbHkoTix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEoucGFy''@;'; put 'put ''c2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpO0oucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oTix3LEYpPT5EKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEg9Ti5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVp''@;'; put 'put ''Z2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sUj1IP0guc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIVIpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KEYrUix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGo9PigwLF8uZ2V0VmFsaWRKc29uKShqLnJlc3VsdCkpfSl9LDI4MTM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1MTA4KTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBfPWIoMTM5NSk7Si5wYXJzZVdlYm91dFJlc3BvbnNlPShOLHcpPT57bGV0IEY9IiI7aWYoTi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e0Y9''@;'; put 'put ''Ti5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChIKXtpZih3KXRocm93IG5ldyBfLldlYm91dFJlc3BvbnNlRXJyb3Iodyk7Rj0iIixELmVycm9yKEgpfXJldHVybiBGfX0sMTE3MDooY2UsSik9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IGI9WyJMb2cgT2ZmIl07Si5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1fPT57Y29uc3QgTj1fPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xl''@;'; put 'put ''dCB3PU4/LlswXS5zcGxpdCgiOiIpWzFdLnRyaW0oKSxGPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oYi5tYXAoSD0+e2NvbnN0IFI9dz8uaW5kZXhPZihIKXx8LTE7Uj4tMSYmKEY9UitILmxlbmd0aCl9KSx3LnNsaWNlKEYsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjooY2UsSik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEosIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEouc2VyaWFsaXplPXZvaWQgMCxKLnNlcmlhbGl6ZT1EPT57Y29uc3QgXz1bXTtmb3IoY29uc3QgcCBpbiBEKWlmKEQuaGFzT3duUHJvcGVydHkocCkpaWYoRFtwXWluc3RhbmNl''@;'; put 'put ''b2YgQXJyYXkpZm9yKGxldCBOPTAsdz1EW3BdLmxlbmd0aDtOPHc7TisrKV8ucHVzaChlbmNvZGVVUklDb21wb25lbnQocCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChEW3BdW05dKSk7ZWxzZSBfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApKyI9IitlbmNvZGVVUklDb21wb25lbnQoRFtw''@;'; put 'put ''XSkpO3JldHVybiBfLmpvaW4oIiYiKX19LDQ3OTk6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxKLnNwbGl0Q2h1bmtzPXZvaWQgMCxKLnNwbGl0Q2h1bmtzPUQ9Pntjb25zdCBwPU1hdGguY2VpbChELmxlbmd0''@;'; put 'put ''aC8xNmUzKSxOPW5ldyBBcnJheShwKTtmb3IobGV0IHc9MCxGPTA7dzxwOysrdyxGKz0xNmUzKU5bd109RC5zdWJzdHIoRiwxNmUzKTtyZXR1cm4gTn19LDQ1MTY6KGNlLEopPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxK''@;'; put 'put ''LnZhbGlkYXRlSW5wdXQ9Si5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1KLk1PUkVfSU5GTz12b2lkIDAsSi5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsSi5JTlZBTElEX1RBQkxFX1NUUlVDVFVS''@;'; put 'put ''RT1gUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7Si5NT1JFX0lORk99YCxKLnZhbGlkYXRlSW5wdXQ9Xz0+e2lmKG51bGw9PT1fKXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PUQoXykpcmV0dXJue3N0YXR1czohMSxtc2c6''@;'; put 'put ''Si5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Y29uc3QgcD1OPT5OLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhfKS5pbmNsdWRlcyhOLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgTiBpbiBfKXtpZighTi5tYXRjaCgvXlthLXpBLVpfXS8pJiYhcChOKSlyZXR1cm57c3RhdHVz''@;'; put 'put ''OiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFOLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIXAoTikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVt''@;'; put 'put ''ZXJpYy4ifTtpZihOLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09RChfW05dKSYmIXAoTikpcmV0dXJue3N0YXR1czohMSxtc2c6Si5JTlZBTElEX1RBQkxF''@;'; put 'put ''X1NUUlVDVFVSRX07aWYoQXJyYXkuaXNBcnJheShfW05dKSlmb3IoY29uc3QgdyBvZiBfW05dKXtpZigib2JqZWN0IiE9PUQodykpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Tn0gY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7Si5NT1JFX0lORk99YH07e2NvbnN0IEY9T2Jq''@;'; put 'put ''ZWN0LmtleXModyk7Zm9yKGNvbnN0IEggb2YgRilpZih2b2lkIDA9PT13W0hdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke059IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtIfS5gfX19fXJldHVybntzdGF0dXM6ITAs''@;'; put 'put ''bXNnOiIifX07Y29uc3QgRD1fPT5BcnJheS5pc0FycmF5KF8pPyJBcnJheSI6dHlwZW9mIF99LDg5ODE6KGNlLEopPT57InVzZSBzdHJpY3QiO0ouZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uRCl7aWYoImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIERbRC5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChfLHApPT57RC5wdXNoKChOLHcpPT5udWxsIT1OP3AoTik6Xyh3KSksYi5hcHBseSh0aGlzLEQpfSk7Yi5hcHBseSh0aGlzLEQpfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfSxKLmZyb21Qcm9taXNlPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uRCl7Y29uc3QgXz1EW0QubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfKXJldHVybiBiLmFwcGx5KHRoaXMsRCk7RC5wb3AoKSxiLmFwcGx5KHRoaXMsRCkudGhlbihwPT5fKG51bGwscCksXyl9LCJu''@;'; put 'put ''YW1lIix7dmFsdWU6Yi5uYW1lfSl9fSw0NTY0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzQxOCksXz1iKDcxMjkpLHA9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxOPS9bXG5cclx0''@;'; put 'put ''XS9nLHc9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxGPS86XGQrJC8sSD0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxSPS9eW2EtekEtWl06LztmdW5jdGlvbiBqKHRlKXtyZXR1cm4odGV8fCIiKS50b1N0cmluZygpLnJlcGxhY2Uo''@;'; put 'put ''cCwiIil9dmFyIFA9W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKHJlLG9lKXtyZXR1cm4gQihvZS5wcm90b2NvbCk/cmUucmVwbGFjZSgvXFwvZywiLyIpOnJlfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihc''@;'; put 'put ''ZCopJC8sInBvcnQiLHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLEw9e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlvbiBZKHRlKXt2YXIgcmU7cmU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2''@;'; put 'put ''YXIgVGUsZ2U9e30sX2U9dHlwZW9mKHRlPXRlfHxyZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT10ZS5wcm90b2NvbClnZT1uZXcgcSh1bmVzY2FwZSh0ZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1fZSlmb3IoVGUgaW4gZ2U9bmV3IHEodGUse30pLEwpZGVsZXRlIGdl''@;'; put 'put ''W1RlXTtlbHNlIGlmKCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiB0ZSlUZSBpbiBMfHwoZ2VbVGVdPXRlW1RlXSk7dm9pZCAwPT09Z2Uuc2xhc2hlcyYmKGdlLnNsYXNoZXM9dy50ZXN0KHRlLmhyZWYpKX1yZXR1cm4gZ2V9ZnVuY3Rpb24gQih0ZSl7cmV0dXJuImZpbGU6Ij09PXRlfHwiZnRw''@;'; put 'put ''OiI9PT10ZXx8Imh0dHA6Ij09PXRlfHwiaHR0cHM6Ij09PXRlfHwid3M6Ij09PXRlfHwid3NzOiI9PT10ZX1mdW5jdGlvbiBXKHRlLHJlKXt0ZT0odGU9aih0ZSkpLnJlcGxhY2UoTiwiIikscmU9cmV8fHt9O3ZhciB6ZSxvZT1ILmV4ZWModGUpLGdlPW9lWzFdP29lWzFdLnRvTG93ZXJDYXNl''@;'; put 'put ''KCk6IiIsX2U9ISFvZVsyXSxUZT0hIW9lWzNdLFNlPTA7cmV0dXJuIF9lP1RlPyh6ZT1vZVsyXStvZVszXStvZVs0XSxTZT1vZVsyXS5sZW5ndGgrb2VbM10ubGVuZ3RoKTooemU9b2VbMl0rb2VbNF0sU2U9b2VbMl0ubGVuZ3RoKTpUZT8oemU9b2VbM10rb2VbNF0sU2U9b2VbM10ubGVuZ3Ro''@;'; put 'put ''KTp6ZT1vZVs0XSwiZmlsZToiPT09Z2U/U2U+PTImJih6ZT16ZS5zbGljZSgyKSk6QihnZSk/emU9b2VbNF06Z2U/X2UmJih6ZT16ZS5zbGljZSgyKSk6U2U+PTImJkIocmUucHJvdG9jb2wpJiYoemU9b2VbNF0pLHtwcm90b2NvbDpnZSxzbGFzaGVzOl9lfHxCKGdlKSxzbGFzaGVzQ291bnQ6''@;'; put 'put ''U2UscmVzdDp6ZX19ZnVuY3Rpb24gcSh0ZSxyZSxvZSl7aWYodGU9KHRlPWoodGUpKS5yZXBsYWNlKE4sIiIpLCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcSh0ZSxyZSxvZSk7dmFyIGdlLF9lLFRlLFNlLHplLHosZz1QLnNsaWNlKCkseT10eXBlb2YgcmUseD10aGlzLEM9MDtm''@;'; put 'put ''b3IoIm9iamVjdCIhPT15JiYic3RyaW5nIiE9PXkmJihvZT1yZSxyZT1udWxsKSxvZSYmImZ1bmN0aW9uIiE9dHlwZW9mIG9lJiYob2U9Xy5wYXJzZSksZ2U9IShfZT1XKHRlfHwiIixyZT1ZKHJlKSkpLnByb3RvY29sJiYhX2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8Z2UmJnJl''@;'; put 'put ''LnNsYXNoZXMseC5wcm90b2NvbD1fZS5wcm90b2NvbHx8cmUucHJvdG9jb2x8fCIiLHRlPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fFIudGVzdCh0ZSkpfHwhX2Uuc2xhc2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8''@;'; put 'put ''IUIoeC5wcm90b2NvbCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxnLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9mKFNlPWdbQ10pPyh6PVNlWzFdLChUZT1TZVswXSkhPVRlP3hbel09dGU6InN0cmluZyI9PXR5cGVvZiBUZT9+KHplPSJAIj09PVRlP3RlLmxhc3RJbmRl''@;'; put 'put ''eE9mKFRlKTp0ZS5pbmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIFNlWzJdPyh4W3pdPXRlLnNsaWNlKDAsemUpLHRlPXRlLnNsaWNlKHplK1NlWzJdKSk6KHhbel09dGUuc2xpY2UoemUpLHRlPXRlLnNsaWNlKDAsemUpKSk6KHplPVRlLmV4ZWModGUpKSYmKHhbel09emVbMV0sdGU9''@;'; put 'put ''dGUuc2xpY2UoMCx6ZS5pbmRleCkpLHhbel09eFt6XXx8Z2UmJlNlWzNdJiZyZVt6XXx8IiIsU2VbNF0mJih4W3pdPXhbel0udG9Mb3dlckNhc2UoKSkpOnRlPVNlKHRlLHgpO29lJiYoeC5xdWVyeT1vZSh4LnF1ZXJ5KSksZ2UmJnJlLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0''@;'; put 'put ''KDApJiYoIiIhPT14LnBhdGhuYW1lfHwiIiE9PXJlLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gWih0ZSxyZSl7aWYoIiI9PT10ZSlyZXR1cm4gcmU7Zm9yKHZhciBvZT0ocmV8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQodGUuc3BsaXQoIi8iKSksZ2U9b2Uu''@;'; put 'put ''bGVuZ3RoLF9lPW9lW2dlLTFdLFRlPSExLFNlPTA7Z2UtLTspIi4iPT09b2VbZ2VdP29lLnNwbGljZShnZSwxKToiLi4iPT09b2VbZ2VdPyhvZS5zcGxpY2UoZ2UsMSksU2UrKyk6U2UmJigwPT09Z2UmJihUZT0hMCksb2Uuc3BsaWNlKGdlLDEpLFNlLS0pO3JldHVybiBUZSYmb2UudW5zaGlm''@;'; put 'put ''dCgiIiksKCIuIj09PV9lfHwiLi4iPT09X2UpJiZvZS5wdXNoKCIiKSxvZS5qb2luKCIvIil9KHgucGF0aG5hbWUscmUucGF0aG5hbWUpKSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmQih4LnByb3RvY29sKSYmKHgucGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEQoeC5wb3J0LHgucHJv''@;'; put 'put ''dG9jb2wpfHwoeC5ob3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofih6ZT14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCx6ZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZSh6ZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5wYXNzd29yZCkpKTp4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25l''@;'; put 'put ''bnQoeC5hdXRoKSkseC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0iZmlsZToiIT09eC5wcm90b2NvbCYmQih4LnByb3RvY29sKSYmeC5ob3N0P3gucHJvdG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3Ry''@;'; put 'put ''aW5nKCl9cS5wcm90b3R5cGU9e3NldDpmdW5jdGlvbiBRKHRlLHJlLG9lKXt2YXIgZ2U9dGhpcztzd2l0Y2godGUpe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgcmUmJnJlLmxlbmd0aCYmKHJlPShvZXx8Xy5wYXJzZSkocmUpKSxnZVt0ZV09cmU7YnJlYWs7Y2FzZSJwb3J0IjpnZVt0''@;'; put 'put ''ZV09cmUsRChyZSxnZS5wcm90b2NvbCk/cmUmJihnZS5ob3N0PWdlLmhvc3RuYW1lKyI6IityZSk6KGdlLmhvc3Q9Z2UuaG9zdG5hbWUsZ2VbdGVdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjpnZVt0ZV09cmUsZ2UucG9ydCYmKHJlKz0iOiIrZ2UucG9ydCksZ2UuaG9zdD1yZTticmVhaztj''@;'; put 'put ''YXNlImhvc3QiOmdlW3RlXT1yZSxGLnRlc3QocmUpPyhyZT1yZS5zcGxpdCgiOiIpLGdlLnBvcnQ9cmUucG9wKCksZ2UuaG9zdG5hbWU9cmUuam9pbigiOiIpKTooZ2UuaG9zdG5hbWU9cmUsZ2UucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6Z2UucHJvdG9jb2w9cmUudG9Mb3dlckNh''@;'; put 'put ''c2UoKSxnZS5zbGFzaGVzPSFvZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKHJlKXt2YXIgX2U9InBhdGhuYW1lIj09PXRlPyIvIjoiIyI7Z2VbdGVdPXJlLmNoYXJBdCgwKSE9PV9lP19lK3JlOnJlfWVsc2UgZ2VbdGVdPXJlO2JyZWFrO2Nhc2UidXNlcm5hbWUiOmNhc2Ui''@;'; put 'put ''cGFzc3dvcmQiOmdlW3RlXT1lbmNvZGVVUklDb21wb25lbnQocmUpO2JyZWFrO2Nhc2UiYXV0aCI6dmFyIFRlPXJlLmluZGV4T2YoIjoiKTt+VGU/KGdlLnVzZXJuYW1lPXJlLnNsaWNlKDAsVGUpLGdlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoZ2Uu''@;'; put 'put ''dXNlcm5hbWUpKSxnZS5wYXNzd29yZD1yZS5zbGljZShUZSsxKSxnZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGdlLnBhc3N3b3JkKSkpOmdlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQocmUpKX1mb3IodmFy''@;'; put 'put ''IFNlPTA7U2U8UC5sZW5ndGg7U2UrKyl7dmFyIHplPVBbU2VdO3plWzRdJiYoZ2VbemVbMV1dPWdlW3plWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gZ2UuYXV0aD1nZS5wYXNzd29yZD9nZS51c2VybmFtZSsiOiIrZ2UucGFzc3dvcmQ6Z2UudXNlcm5hbWUsZ2Uub3JpZ2luPSJmaWxlOiIh''@;'; put 'put ''PT1nZS5wcm90b2NvbCYmQihnZS5wcm90b2NvbCkmJmdlLmhvc3Q/Z2UucHJvdG9jb2wrIi8vIitnZS5ob3N0OiJudWxsIixnZS5ocmVmPWdlLnRvU3RyaW5nKCksZ2V9LHRvU3RyaW5nOmZ1bmN0aW9uIFgodGUpeyghdGV8fCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSkmJih0ZT1fLnN0cmluZ2lm''@;'; put 'put ''eSk7dmFyIHJlLG9lPXRoaXMsZ2U9b2UuaG9zdCxfZT1vZS5wcm90b2NvbDtfZSYmIjoiIT09X2UuY2hhckF0KF9lLmxlbmd0aC0xKSYmKF9lKz0iOiIpO3ZhciBUZT1fZSsob2UucHJvdG9jb2wmJm9lLnNsYXNoZXN8fEIob2UucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiBvZS51c2VybmFt''@;'; put 'put ''ZT8oVGUrPW9lLnVzZXJuYW1lLG9lLnBhc3N3b3JkJiYoVGUrPSI6IitvZS5wYXNzd29yZCksVGUrPSJAIik6b2UucGFzc3dvcmQ/KFRlKz0iOiIrb2UucGFzc3dvcmQsVGUrPSJAIik6ImZpbGU6IiE9PW9lLnByb3RvY29sJiZCKG9lLnByb3RvY29sKSYmIWdlJiYiLyIhPT1vZS5wYXRobmFt''@;'; put 'put ''ZSYmKFRlKz0iQCIpLCgiOiI9PT1nZVtnZS5sZW5ndGgtMV18fEYudGVzdChvZS5ob3N0bmFtZSkmJiFvZS5wb3J0KSYmKGdlKz0iOiIpLFRlKz1nZStvZS5wYXRobmFtZSwocmU9Im9iamVjdCI9PXR5cGVvZiBvZS5xdWVyeT90ZShvZS5xdWVyeSk6b2UucXVlcnkpJiYoVGUrPSI/IiE9PXJl''@;'; put 'put ''LmNoYXJBdCgwKT8iPyIrcmU6cmUpLG9lLmhhc2gmJihUZSs9b2UuaGFzaCksVGV9fSxxLmV4dHJhY3RQcm90b2NvbD1XLHEubG9jYXRpb249WSxxLnRyaW1MZWZ0PWoscS5xcz1fLGNlLmV4cG9ydHM9cX0sNDkyNzooY2UsSixiKT0+e3ZhciBEPWIoNTEwOCk7ZnVuY3Rpb24gcChOKXt0cnl7''@;'; put 'put ''aWYoIWIuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIHc9Yi5nLmxvY2FsU3RvcmFnZVtOXTtyZXR1cm4gbnVsbCE9dyYmInRydWUiPT09U3RyaW5nKHcpLnRvTG93ZXJDYXNlKCl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBfKE4sdyl7aWYocCgibm9EZXByZWNhdGlv''@;'; put 'put ''biIpKXJldHVybiBOO3ZhciBGPSExO3JldHVybiBmdW5jdGlvbiBIKCl7aWYoIUYpe2lmKHAoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Iodyk7cCgidHJhY2VEZXByZWNhdGlvbiIpP0QudHJhY2Uodyk6RC53YXJuKHcpLEY9ITB9cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfX19LDM4NDpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuIGImJiJvYmplY3QiPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIGIuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIGIucmVhZFVJbnQ4fX0sNTk1NToo''@;'; put 'put ''Y2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI1ODQpLF89Yig4NjYyKSxwPWIoNjQzMCksTj1iKDU2OTIpO2Z1bmN0aW9uIHcoa2Upe3JldHVybiBrZS5jYWxsLmJpbmQoa2UpfXZhciBGPXR5cGVvZiBCaWdJbnQ8InUiLEg9dHlwZW9mIFN5bWJvbDwidSIsUj13KE9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUudG9TdHJpbmcpLGo9dyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLFA9dyhTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLEw9dyhCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihGKXZhciBZPXcoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihIKXZhciBCPXcoU3ltYm9s''@;'; put 'put ''LnByb3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBXKGtlLF90KXtpZigib2JqZWN0IiE9dHlwZW9mIGtlKXJldHVybiExO3RyeXtyZXR1cm4gX3Qoa2UpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBnKGtlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PVIoa2UpfWZ1bmN0aW9uIHgoa2Up''@;'; put 'put ''e3JldHVybiJbb2JqZWN0IFNldF0iPT09UihrZSl9ZnVuY3Rpb24gVChrZSl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09UihrZSl9ZnVuY3Rpb24gVShrZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09UihrZSl9ZnVuY3Rpb24gbShrZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZm''@;'; put 'put ''ZXJdIj09PVIoa2UpfWZ1bmN0aW9uIEEoa2Upe3JldHVybiEodHlwZW9mIEFycmF5QnVmZmVyPiJ1IikmJihtLndvcmtpbmc/bShrZSk6a2UgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gYWUoa2Upe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1SKGtlKX1mdW5jdGlvbiBu''@;'; put 'put ''ZShrZSl7cmV0dXJuISh0eXBlb2YgRGF0YVZpZXc+InUiKSYmKGFlLndvcmtpbmc/YWUoa2UpOmtlIGluc3RhbmNlb2YgRGF0YVZpZXcpfUouaXNBcmd1bWVudHNPYmplY3Q9RCxKLmlzR2VuZXJhdG9yRnVuY3Rpb249XyxKLmlzVHlwZWRBcnJheT1OLEouaXNQcm9taXNlPWZ1bmN0aW9uIFoo''@;'; put 'put ''a2Upe3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJmtlIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PWtlJiYib2JqZWN0Ij09dHlwZW9mIGtlJiYiZnVuY3Rpb24iPT10eXBlb2Yga2UudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIGtlLmNhdGNofSxKLmlzQXJyYXlCdWZmZXJWaWV3PWZ1''@;'; put 'put ''bmN0aW9uIHEoa2Upe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KGtlKTpOKGtlKXx8bmUoa2UpfSxKLmlzVWludDhBcnJheT1mdW5jdGlvbiBRKGtlKXtyZXR1cm4iVWludDhBcnJheSI9PT1wKGtlKX0sSi5pc1Vp''@;'; put 'put ''bnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uIFgoa2Upe3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT1wKGtlKX0sSi5pc1VpbnQxNkFycmF5PWZ1bmN0aW9uIHRlKGtlKXtyZXR1cm4iVWludDE2QXJyYXkiPT09cChrZSl9LEouaXNVaW50MzJBcnJheT1mdW5jdGlvbiByZShrZSl7cmV0dXJu''@;'; put 'put ''IlVpbnQzMkFycmF5Ij09PXAoa2UpfSxKLmlzSW50OEFycmF5PWZ1bmN0aW9uIG9lKGtlKXtyZXR1cm4iSW50OEFycmF5Ij09PXAoa2UpfSxKLmlzSW50MTZBcnJheT1mdW5jdGlvbiBnZShrZSl7cmV0dXJuIkludDE2QXJyYXkiPT09cChrZSl9LEouaXNJbnQzMkFycmF5PWZ1bmN0aW9uIF9l''@;'; put 'put ''KGtlKXtyZXR1cm4iSW50MzJBcnJheSI9PT1wKGtlKX0sSi5pc0Zsb2F0MzJBcnJheT1mdW5jdGlvbiBUZShrZSl7cmV0dXJuIkZsb2F0MzJBcnJheSI9PT1wKGtlKX0sSi5pc0Zsb2F0NjRBcnJheT1mdW5jdGlvbiBTZShrZSl7cmV0dXJuIkZsb2F0NjRBcnJheSI9PT1wKGtlKX0sSi5pc0Jp''@;'; put 'put ''Z0ludDY0QXJyYXk9ZnVuY3Rpb24gemUoa2Upe3JldHVybiJCaWdJbnQ2NEFycmF5Ij09PXAoa2UpfSxKLmlzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24geihrZSl7cmV0dXJuIkJpZ1VpbnQ2NEFycmF5Ij09PXAoa2UpfSxnLndvcmtpbmc9dHlwZW9mIE1hcDwidSImJmcobmV3IE1hcCksSi5p''@;'; put 'put ''c01hcD1mdW5jdGlvbiB5KGtlKXtyZXR1cm4hKHR5cGVvZiBNYXA+InUiKSYmKGcud29ya2luZz9nKGtlKTprZSBpbnN0YW5jZW9mIE1hcCl9LHgud29ya2luZz10eXBlb2YgU2V0PCJ1IiYmeChuZXcgU2V0KSxKLmlzU2V0PWZ1bmN0aW9uIEMoa2Upe3JldHVybiEodHlwZW9mIFNldD4idSIp''@;'; put 'put ''JiYoeC53b3JraW5nP3goa2UpOmtlIGluc3RhbmNlb2YgU2V0KX0sVC53b3JraW5nPXR5cGVvZiBXZWFrTWFwPCJ1IiYmVChuZXcgV2Vha01hcCksSi5pc1dlYWtNYXA9ZnVuY3Rpb24gVihrZSl7cmV0dXJuISh0eXBlb2YgV2Vha01hcD4idSIpJiYoVC53b3JraW5nP1Qoa2UpOmtlIGluc3Rh''@;'; put 'put ''bmNlb2YgV2Vha01hcCl9LFUud29ya2luZz10eXBlb2YgV2Vha1NldDwidSImJlUobmV3IFdlYWtTZXQpLEouaXNXZWFrU2V0PWZ1bmN0aW9uIEUoa2Upe3JldHVybiBVKGtlKX0sbS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJm0obmV3IEFycmF5QnVmZmVyKSxKLmlzQXJyYXlC''@;'; put 'put ''dWZmZXI9QSxhZS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBEYXRhVmlldzwidSImJmFlKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSksMCwxKSksSi5pc0RhdGFWaWV3PW5lO3ZhciBsZT10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFy''@;'; put 'put ''cmF5QnVmZmVyOnZvaWQgMDtmdW5jdGlvbiB3ZShrZSl7cmV0dXJuIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdIj09PVIoa2UpfWZ1bmN0aW9uIFVlKGtlKXtyZXR1cm4hKHR5cGVvZiBsZT4idSIpJiYodHlwZW9mIHdlLndvcmtpbmc+InUiJiYod2Uud29ya2luZz13ZShuZXcgbGUpKSx3''@;'; put 'put ''ZS53b3JraW5nP3dlKGtlKTprZSBpbnN0YW5jZW9mIGxlKX1mdW5jdGlvbiBCZShrZSl7cmV0dXJuIFcoa2Usail9ZnVuY3Rpb24gQWUoa2Upe3JldHVybiBXKGtlLFApfWZ1bmN0aW9uIEZlKGtlKXtyZXR1cm4gVyhrZSxMKX1mdW5jdGlvbiBSZShrZSl7cmV0dXJuIEYmJlcoa2UsWSl9ZnVu''@;'; put 'put ''Y3Rpb24gSWUoa2Upe3JldHVybiBIJiZXKGtlLEIpfUouaXNTaGFyZWRBcnJheUJ1ZmZlcj1VZSxKLmlzQXN5bmNGdW5jdGlvbj1mdW5jdGlvbiBRZShrZSl7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09UihrZSl9LEouaXNNYXBJdGVyYXRvcj1mdW5jdGlvbiBvdChrZSl7cmV0''@;'; put 'put ''dXJuIltvYmplY3QgTWFwIEl0ZXJhdG9yXSI9PT1SKGtlKX0sSi5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uIE1lKGtlKXtyZXR1cm4iW29iamVjdCBTZXQgSXRlcmF0b3JdIj09PVIoa2UpfSxKLmlzR2VuZXJhdG9yT2JqZWN0PWZ1bmN0aW9uIHZlKGtlKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0''@;'; put 'put ''b3JdIj09PVIoa2UpfSxKLmlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZT1mdW5jdGlvbiBYZShrZSl7cmV0dXJuIltvYmplY3QgV2ViQXNzZW1ibHkuTW9kdWxlXSI9PT1SKGtlKX0sSi5pc051bWJlck9iamVjdD1CZSxKLmlzU3RyaW5nT2JqZWN0PUFlLEouaXNCb29sZWFuT2JqZWN0PUZl''@;'; put 'put ''LEouaXNCaWdJbnRPYmplY3Q9UmUsSi5pc1N5bWJvbE9iamVjdD1JZSxKLmlzQm94ZWRQcmltaXRpdmU9ZnVuY3Rpb24gSGUoa2Upe3JldHVybiBCZShrZSl8fEFlKGtlKXx8RmUoa2UpfHxSZShrZSl8fEllKGtlKX0sSi5pc0FueUFycmF5QnVmZmVyPWZ1bmN0aW9uIERlKGtlKXtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiYoQShrZSl8fFVlKGtlKSl9LFsiaXNQcm94eSIsImlzRXh0ZXJuYWwiLCJpc01vZHVsZU5hbWVzcGFjZU9iamVjdCJdLmZvckVhY2goZnVuY3Rpb24oa2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eShKLGtlLHtlbnVtZXJhYmxlOiExLHZhbHVlOmZ1bmN0''@;'; put 'put ''aW9uKCl7dGhyb3cgbmV3IEVycm9yKGtlKyIgaXMgbm90IHN1cHBvcnRlZCBpbiB1c2VybGFuZCIpfX0pfSl9LDk1Mzk6KGNlLEosYik9Pnt2YXIgRD1iKDQxNTUpLF89Yig1MTA4KSxwPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbih3ZSl7Zm9yKHZhciBVZT1P''@;'; put 'put ''YmplY3Qua2V5cyh3ZSksUWU9e30sb3Q9MDtvdDxVZS5sZW5ndGg7b3QrKylRZVtVZVtvdF1dPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2UsVWVbb3RdKTtyZXR1cm4gUWV9LE49LyVbc2RqJV0vZztKLmZvcm1hdD1mdW5jdGlvbihsZSl7aWYoIV9lKGxlKSl7Zm9yKHZhciB3''@;'; put 'put ''ZT1bXSxVZT0wO1VlPGFyZ3VtZW50cy5sZW5ndGg7VWUrKyl3ZS5wdXNoKFIoYXJndW1lbnRzW1VlXSkpO3JldHVybiB3ZS5qb2luKCIgIil9VWU9MTtmb3IodmFyIFFlPWFyZ3VtZW50cyxvdD1RZS5sZW5ndGgsTWU9U3RyaW5nKGxlKS5yZXBsYWNlKE4sZnVuY3Rpb24oWGUpe2lmKCIlJSI9''@;'; put 'put ''PT1YZSlyZXR1cm4iJSI7aWYoVWU+PW90KXJldHVybiBYZTtzd2l0Y2goWGUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoUWVbVWUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoUWVbVWUrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoUWVbVWUrK10pfWNhdGNoe3Jl''@;'; put 'put ''dHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBYZX19KSx2ZT1RZVtVZV07VWU8b3Q7dmU9UWVbKytVZV0pcmUodmUpfHwheih2ZSk/TWUrPSIgIit2ZTpNZSs9IiAiK1IodmUpO3JldHVybiBNZX0sSi5kZXByZWNhdGU9ZnVuY3Rpb24obGUsd2Upe2lmKHR5cGVvZiBEPCJ1IiYmITA9''@;'; put 'put ''PT1ELm5vRGVwcmVjYXRpb24pcmV0dXJuIGxlO2lmKHR5cGVvZiBEPiJ1IilyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSi5kZXByZWNhdGUobGUsd2UpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIFVlPSExO3JldHVybiBmdW5jdGlvbiBRZSgpe2lmKCFVZSl7aWYoRC50aHJvd0RlcHJl''@;'; put 'put ''Y2F0aW9uKXRocm93IG5ldyBFcnJvcih3ZSk7RC50cmFjZURlcHJlY2F0aW9uP18udHJhY2Uod2UpOl8uZXJyb3Iod2UpLFVlPSEwfXJldHVybiBsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdz17fSxGPS9eJC87aWYoRC5lbnYuTk9ERV9ERUJVRyl7dmFyIEg9RC5lbnYuTk9ERV9E''@;'; put 'put ''RUJVRztIPUgucmVwbGFjZSgvW3xcXHt9KClbXF1eJCs/Ll0vZywiXFwkJiIpLnJlcGxhY2UoL1wqL2csIi4qIikucmVwbGFjZSgvLC9nLCIkfF4iKS50b1VwcGVyQ2FzZSgpLEY9bmV3IFJlZ0V4cCgiXiIrSCsiJCIsImkiKX1mdW5jdGlvbiBSKGxlLHdlKXt2YXIgVWU9e3NlZW46W10sc3R5''@;'; put 'put ''bGl6ZTpQfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKFVlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKFVlLmNvbG9ycz1hcmd1bWVudHNbM10pLHRlKHdlKT9VZS5zaG93SGlkZGVuPXdlOndlJiZKLl9leHRlbmQoVWUsd2UpLFNlKFVlLnNob3dIaWRk''@;'; put 'put ''ZW4pJiYoVWUuc2hvd0hpZGRlbj0hMSksU2UoVWUuZGVwdGgpJiYoVWUuZGVwdGg9MiksU2UoVWUuY29sb3JzKSYmKFVlLmNvbG9ycz0hMSksU2UoVWUuY3VzdG9tSW5zcGVjdCkmJihVZS5jdXN0b21JbnNwZWN0PSEwKSxVZS5jb2xvcnMmJihVZS5zdHlsaXplPWopLFkoVWUsbGUsVWUuZGVw''@;'; put 'put ''dGgpfWZ1bmN0aW9uIGoobGUsd2Upe3ZhciBVZT1SLnN0eWxlc1t3ZV07cmV0dXJuIFVlPyJceDFiWyIrUi5jb2xvcnNbVWVdWzBdKyJtIitsZSsiXHgxYlsiK1IuY29sb3JzW1VlXVsxXSsibSI6bGV9ZnVuY3Rpb24gUChsZSx3ZSl7cmV0dXJuIGxlfWZ1bmN0aW9uIFkobGUsd2UsVWUpe2lm''@;'; put 'put ''KGxlLmN1c3RvbUluc3BlY3QmJndlJiZ4KHdlLmluc3BlY3QpJiZ3ZS5pbnNwZWN0IT09Si5pbnNwZWN0JiYoIXdlLmNvbnN0cnVjdG9yfHx3ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT13ZSkpe3ZhciBRZT13ZS5pbnNwZWN0KFVlLGxlKTtyZXR1cm4gX2UoUWUpfHwoUWU9WShsZSxRZSxV''@;'; put 'put ''ZSkpLFFlfXZhciBvdD1mdW5jdGlvbiBCKGxlLHdlKXtpZihTZSh3ZSkpcmV0dXJuIGxlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKF9lKHdlKSl7dmFyIFVlPSInIitKU09OLnN0cmluZ2lmeSh3ZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCci''@;'; put 'put ''KS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gbGUuc3R5bGl6ZShVZSwic3RyaW5nIil9cmV0dXJuIGdlKHdlKT9sZS5zdHlsaXplKCIiK3dlLCJudW1iZXIiKTp0ZSh3ZSk/bGUuc3R5bGl6ZSgiIit3ZSwiYm9vbGVhbiIpOnJlKHdlKT9sZS5zdHlsaXplKCJudWxsIiwibnVsbCIp''@;'; put 'put ''OnZvaWQgMH0obGUsd2UpO2lmKG90KXJldHVybiBvdDt2YXIgTWU9T2JqZWN0LmtleXMod2UpLHZlPWZ1bmN0aW9uIEwobGUpe3ZhciB3ZT17fTtyZXR1cm4gbGUuZm9yRWFjaChmdW5jdGlvbihVZSxRZSl7d2VbVWVdPSEwfSksd2V9KE1lKTtpZihsZS5zaG93SGlkZGVuJiYoTWU9T2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5TmFtZXMod2UpKSx5KHdlKSYmKE1lLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8TWUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIFcod2UpO2lmKDA9PT1NZS5sZW5ndGgpe2lmKHgod2UpKXJldHVybiBsZS5zdHlsaXplKCJbRnVuY3Rpb24iKyh3ZS5u''@;'; put 'put ''YW1lPyI6ICIrd2UubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoemUod2UpKXJldHVybiBsZS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksInJlZ2V4cCIpO2lmKGcod2UpKXJldHVybiBsZS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo''@;'; put 'put ''d2UpLCJkYXRlIik7aWYoeSh3ZSkpcmV0dXJuIFcod2UpfXZhciBJZSxCZT0iIixBZT0hMSxGZT1bInsiLCJ9Il07cmV0dXJuIFgod2UpJiYoQWU9ITAsRmU9WyJbIiwiXSJdKSx4KHdlKSYmKEJlPSIgW0Z1bmN0aW9uIisod2UubmFtZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiksemUod2UpJiYo''@;'; put 'put ''QmU9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSkpLGcod2UpJiYoQmU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwod2UpKSx5KHdlKSYmKEJlPSIgIitXKHdlKSksMCE9PU1lLmxlbmd0aHx8QWUmJjAhPXdlLmxlbmd0aD9VZTwwP3plKHdlKT9sZS5z''@;'; put 'put ''dHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksInJlZ2V4cCIpOmxlLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihsZS5zZWVuLnB1c2god2UpLEllPUFlP2Z1bmN0aW9uIFoobGUsd2UsVWUsUWUsb3Qpe2Zvcih2YXIgTWU9W10sdmU9MCxYZT13ZS5sZW5n''@;'; put 'put ''dGg7dmU8WGU7Kyt2ZSltKHdlLFN0cmluZyh2ZSkpP01lLnB1c2gocShsZSx3ZSxVZSxRZSxTdHJpbmcodmUpLCEwKSk6TWUucHVzaCgiIik7cmV0dXJuIG90LmZvckVhY2goZnVuY3Rpb24oQmUpe0JlLm1hdGNoKC9eXGQrJC8pfHxNZS5wdXNoKHEobGUsd2UsVWUsUWUsQmUsITApKX0pLE1l''@;'; put 'put ''fShsZSx3ZSxVZSx2ZSxNZSk6TWUubWFwKGZ1bmN0aW9uKEhlKXtyZXR1cm4gcShsZSx3ZSxVZSx2ZSxIZSxBZSl9KSxsZS5zZWVuLnBvcCgpLGZ1bmN0aW9uIFEobGUsd2UsVWUpe3ZhciBvdD1sZS5yZWR1Y2UoZnVuY3Rpb24oTWUsdmUpe3JldHVybiB2ZS5pbmRleE9mKCJcbiIpLE1lK3Zl''@;'; put 'put ''LnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gb3Q+NjA/VWVbMF0rKCIiPT09d2U/IiI6d2UrIlxuICIpKyIgIitsZS5qb2luKCIsXG4gICIpKyIgIitVZVsxXTpVZVswXSt3ZSsiICIrbGUuam9pbigiLCAiKSsiICIrVWVbMV19KEllLEJlLEZlKSk6''@;'; put 'put ''RmVbMF0rQmUrRmVbMV19ZnVuY3Rpb24gVyhsZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxlKSsiXSJ9ZnVuY3Rpb24gcShsZSx3ZSxVZSxRZSxvdCxNZSl7dmFyIHZlLFhlLEJlO2lmKChCZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLG90''@;'; put 'put ''KXx8e3ZhbHVlOndlW290XX0pLmdldD9YZT1sZS5zdHlsaXplKEJlLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6QmUuc2V0JiYoWGU9bGUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLG0oUWUsb3QpfHwodmU9IlsiK290KyJdIiksWGV8fChsZS5z''@;'; put 'put ''ZWVuLmluZGV4T2YoQmUudmFsdWUpPDA/KFhlPXJlKFVlKT9ZKGxlLEJlLnZhbHVlLG51bGwpOlkobGUsQmUudmFsdWUsVWUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihYZT1NZT9YZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oQWUpe3JldHVybiIgICIrQWV9KS5qb2luKCJcbiIpLnNsaWNl''@;'; put 'put ''KDIpOiJcbiIrWGUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKEFlKXtyZXR1cm4iICAgIitBZX0pLmpvaW4oIlxuIikpOlhlPWxlLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLFNlKHZlKSl7aWYoTWUmJm90Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBYZTsodmU9SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoIiIrb3QpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh2ZT12ZS5zbGljZSgxLC0xKSx2ZT1sZS5zdHlsaXplKHZlLCJuYW1lIikpOih2ZT12ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCIn''@;'; put 'put ''IiksdmU9bGUuc3R5bGl6ZSh2ZSwic3RyaW5nIikpfXJldHVybiB2ZSsiOiAiK1hlfWZ1bmN0aW9uIFgobGUpe3JldHVybiBBcnJheS5pc0FycmF5KGxlKX1mdW5jdGlvbiB0ZShsZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgbGV9ZnVuY3Rpb24gcmUobGUpe3JldHVybiBudWxsPT09bGV9''@;'; put 'put ''ZnVuY3Rpb24gZ2UobGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgbGV9ZnVuY3Rpb24gX2UobGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbGV9ZnVuY3Rpb24gU2UobGUpe3JldHVybiB2b2lkIDA9PT1sZX1mdW5jdGlvbiB6ZShsZSl7cmV0dXJuIHoobGUpJiYiW29iamVjdCBSZWdFeHBd''@;'; put 'put ''Ij09PVQobGUpfWZ1bmN0aW9uIHoobGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbGUmJm51bGwhPT1sZX1mdW5jdGlvbiBnKGxlKXtyZXR1cm4geihsZSkmJiJbb2JqZWN0IERhdGVdIj09PVQobGUpfWZ1bmN0aW9uIHkobGUpe3JldHVybiB6KGxlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1U''@;'; put 'put ''KGxlKXx8bGUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGxlfWZ1bmN0aW9uIFQobGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobGUpfWZ1bmN0aW9uIFYobGUpe3JldHVybiBsZTwxMD8iMCIrbGUudG9T''@;'; put 'put ''dHJpbmcoMTApOmxlLnRvU3RyaW5nKDEwKX1KLmRlYnVnbG9nPWZ1bmN0aW9uKGxlKXtpZihsZT1sZS50b1VwcGVyQ2FzZSgpLCF3W2xlXSlpZihGLnRlc3QobGUpKXt2YXIgd2U9RC5waWQ7d1tsZV09ZnVuY3Rpb24oKXt2YXIgVWU9Si5mb3JtYXQuYXBwbHkoSixhcmd1bWVudHMpO18uZXJy''@;'; put 'put ''b3IoIiVzICVkOiAlcyIsbGUsd2UsVWUpfX1lbHNlIHdbbGVdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tsZV19LEouaW5zcGVjdD1SLFIuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5''@;'; put 'put ''MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxSLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5k''@;'; put 'put ''ZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LEoudHlwZXM9Yig1OTU1KSxKLmlzQXJyYXk9WCxKLmlzQm9vbGVhbj10ZSxKLmlzTnVsbD1yZSxKLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIG9lKGxlKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09bGV9LEouaXNOdW1iZXI9Z2UsSi5pc1N0cmluZz1fZSxKLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKGxlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGxlfSxKLmlzVW5kZWZpbmVkPVNlLEouaXNSZWdFeHA9emUsSi50eXBlcy5pc1JlZ0V4cD16ZSxKLmlzT2JqZWN0PXosSi5pc0Rh''@;'; put 'put ''dGU9ZyxKLnR5cGVzLmlzRGF0ZT1nLEouaXNFcnJvcj15LEoudHlwZXMuaXNOYXRpdmVFcnJvcj15LEouaXNGdW5jdGlvbj14LEouaXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhsZSl7cmV0dXJuIG51bGw9PT1sZXx8ImJvb2xlYW4iPT10eXBlb2YgbGV8fCJudW1iZXIiPT10eXBlb2YgbGV8fCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbGV8fCJzeW1ib2wiPT10eXBlb2YgbGV8fHR5cGVvZiBsZT4idSJ9LEouaXNCdWZmZXI9YigzODQpO3ZhciBVPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShs''@;'; put 'put ''ZSx3ZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsZSx3ZSl9Si5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3ZhciBsZT1uZXcgRGF0ZSx3ZT1bVihsZS5nZXRIb3VycygpKSxWKGxlLmdldE1pbnV0ZXMoKSksVihsZS5n''@;'; put 'put ''ZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW2xlLmdldERhdGUoKSxVW2xlLmdldE1vbnRoKCldLHdlXS5qb2luKCIgIil9KCksSi5mb3JtYXQuYXBwbHkoSixhcmd1bWVudHMpKX0sSi5pbmhlcml0cz1iKDU3MTcpLEouX2V4dGVuZD1mdW5jdGlvbihsZSx3ZSl7aWYoIXdlfHwheih3''@;'; put 'put ''ZSkpcmV0dXJuIGxlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMod2UpLFFlPVVlLmxlbmd0aDtRZS0tOylsZVtVZVtRZV1dPXdlW1VlW1FlXV07cmV0dXJuIGxlfTt2YXIgQT10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBh''@;'; put 'put ''ZShsZSx3ZSl7aWYoIWxlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtVZS5yZWFzb249bGUsbGU9VWV9cmV0dXJuIHdlKGxlKX1KLnByb21pc2lmeT1mdW5jdGlvbih3ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHdlKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJndlW0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKFVlPXdlW0FdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3Rv''@;'; put 'put ''bSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBRZSxvdCxNZT1uZXcg''@;'; put 'put ''UHJvbWlzZShmdW5jdGlvbihCZSxBZSl7UWU9QmUsb3Q9QWV9KSx2ZT1bXSxYZT0wO1hlPGFyZ3VtZW50cy5sZW5ndGg7WGUrKyl2ZS5wdXNoKGFyZ3VtZW50c1tYZV0pO3ZlLnB1c2goZnVuY3Rpb24oQmUsQWUpe0JlP290KEJlKTpRZShBZSl9KTt0cnl7d2UuYXBwbHkodGhpcyx2ZSl9Y2F0''@;'; put 'put ''Y2goQmUpe290KEJlKX1yZXR1cm4gTWV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVZSxwKHdlKSl9LEoucHJvbWlzaWZ5LmN1c3RvbT1BLEouY2FsbGJhY2tpZnk9ZnVuY3Rpb24gbmUobGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJl''@;'; put 'put ''IG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiB3ZSgpe2Zvcih2YXIgVWU9W10sUWU9MDtRZTxhcmd1bWVudHMubGVuZ3RoO1FlKyspVWUucHVzaChhcmd1bWVudHNbUWVdKTt2YXIgb3Q9VWUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG90KXRocm93IG5ldyBUeXBlRXJyb3IoIlRo''@;'; put 'put ''ZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBNZT10aGlzLHZlPWZ1bmN0aW9uKCl7cmV0dXJuIG90LmFwcGx5KE1lLGFyZ3VtZW50cyl9O2xlLmFwcGx5KHRoaXMsVWUpLnRoZW4oZnVuY3Rpb24oWGUpe0QubmV4dFRpY2sodmUuYmluZChudWxsLG51bGws''@;'; put 'put ''WGUpKX0sZnVuY3Rpb24oWGUpe0QubmV4dFRpY2soYWUuYmluZChudWxsLFhlLHZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHdlLE9iamVjdC5nZXRQcm90b3R5cGVPZihsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdlLHAobGUpKSx3ZX19LDQ4MTooY2UsSixiKT0+''@;'; put 'put ''eyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5leHBvcnRzLmlzX3VyaT1wLEQuZXhwb3J0cy5pc19odHRwX3VyaT1OLEQuZXhwb3J0cy5pc19odHRwc191cmk9dyxELmV4cG9ydHMuaXNfd2ViX3VyaT1GLEQuZXhwb3J0cy5pc1VyaT1wLEQuZXhwb3J0cy5pc0h0dHBVcmk9TixELmV4cG9y''@;'; put 'put ''dHMuaXNIdHRwc1VyaT13LEQuZXhwb3J0cy5pc1dlYlVyaT1GO3ZhciBfPWZ1bmN0aW9uKEgpe3JldHVybiBILm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBwKEgpe2lmKEgmJiEv''@;'; put 'put ''W15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoSCkmJiEvJVteMC05YS1mXS9pLnRlc3QoSCkmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChIKSl7dmFyIFIsUCxMLFksQixqPSIiLFc9IiI7aWYoUD0oUj1fKEgp''@;'; put 'put ''KVsyXSxMPVJbM10sWT1SWzRdLEI9Uls1XSwoaj1SWzFdKSYmai5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihQJiZQLmxlbmd0aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtc''@;'; put 'put ''LVwuXSokLy50ZXN0KGoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPWorIjoiLFAmJlAubGVuZ3RoJiYoVys9Ii8vIitQKSxXKz1MLFkmJlkubGVuZ3RoJiYoVys9Ij8iK1kpLEImJkIubGVuZ3RoJiYoVys9IiMiK0IpLFd9fX1mdW5jdGlvbiBOKEgsUil7aWYocChIKSl7dmFyIGosWSxXLFos''@;'; put 'put ''UD0iIixMPSIiLEI9IiIscT0iIjtpZihMPShqPV8oSCkpWzJdLFk9alszXSxXPWpbNF0sWj1qWzVdLFA9alsxXSl7aWYoUil7aWYoImh0dHBzIiE9UC50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9UC50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykk''@;'; put 'put ''Ly50ZXN0KEwpJiYoQj1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLHErPVArIjoiLHErPSIvLyIrTCxCJiYocSs9QikscSs9WSxXJiZXLmxlbmd0aCYmKHErPSI/IitXKSxaJiZaLmxlbmd0aCYmKHErPSIjIitaKSxxfX19ZnVuY3Rpb24gdyhIKXtyZXR1''@;'; put 'put ''cm4gTihILCEwKX1mdW5jdGlvbiBGKEgpe3JldHVybiBOKEgpfHx3KEgpfX0oY2U9Yi5ubWQoY2UpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbihjZSxKKXtpZihjZS5pbmRleE9mKXJldHVybiBjZS5pbmRleE9mKEopO2Zv''@;'; put 'put ''cih2YXIgYj0wO2I8Y2UubGVuZ3RoO2IrKylpZihjZVtiXT09PUopcmV0dXJuIGI7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKGNlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXMoY2UpO3ZhciBKPVtdO2Zvcih2YXIgYiBpbiBjZSlKLnB1c2goYik7cmV0dXJuIEp9''@;'; put 'put ''LGZvckVhY2g9ZnVuY3Rpb24oY2UsSil7aWYoY2UuZm9yRWFjaClyZXR1cm4gY2UuZm9yRWFjaChKKTtmb3IodmFyIGI9MDtiPGNlLmxlbmd0aDtiKyspSihjZVtiXSxiLGNlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7''@;'; put 'put ''fSksZnVuY3Rpb24oY2UsSixiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsSix7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6Yn0pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24oSixiLEQpe0pbYl09RH19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xl''@;'; put 'put ''YW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIs''@;'; put 'put ''IlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0''@;'; put 'put ''aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihKKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KEopO3RoaXMuY29kZT1KfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4''@;'; put 'put ''dD1mdW5jdGlvbihjZSl7aWYoIShjZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBKPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO0ouc3R5bGV8fChKLnN0eWxlPXt9KSxKLnN0eWxlLmRp''@;'; put 'put ''c3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoSik7dmFyIGI9Si5jb250ZW50V2luZG93LEQ9Yi5ldmFsLF89Yi5leGVjU2NyaXB0OyFEJiZfJiYoXy5jYWxsKGIsIm51bGwiKSxEPWIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24odyl7Ylt3XT1j''@;'; put 'put ''ZVt3XX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXtjZVt3XSYmKGJbd109Y2Vbd10pfSk7dmFyIHA9T2JqZWN0X2tleXMoYiksTj1ELmNhbGwoYix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGIpLGZ1bmN0aW9uKHcpeyh3IGluIGNlfHwtMT09PWluZGV4T2Yo''@;'; put 'put ''cCx3KSkmJihjZVt3XT1iW3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIGNlfHxkZWZpbmVQcm9wKGNlLHcsYlt3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEopLE59LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKGNlKXt2YXIgSj1TY3JpcHQuY3JlYXRlQ29udGV4dChjZSksYj10aGlzLnJ1bkluQ29udGV4dChKKTtyZXR1cm4gY2UmJmZvckVhY2goT2JqZWN0X2tleXMoSiksZnVuY3Rpb24oRCl7''@;'; put 'put ''Y2VbRF09SltEXX0pLGJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24oY2Upe2V4cG9ydHNbY2VdPVNjcmlwdFtjZV09ZnVuY3Rpb24oSil7dmFyIGI9U2NyaXB0KEopO3JldHVybiBiW2NlXS5hcHBseShiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEp''@;'; put 'put ''KX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbihjZSl7cmV0dXJuIGNlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oY2Upe3JldHVybiBleHBvcnRzLlNjcmlwdChjZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29u''@;'; put 'put ''dGV4dD1mdW5jdGlvbihjZSl7dmFyIEo9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24oYil7SltiXT1jZVtiXX0pLEp9fSw2NDMwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDAyOSksXz1iKDMw''@;'; put 'put ''ODMpLHA9Yig1NTU5KSxOPWIoNzM3OSksdz1iKDcyOTYpLEY9TigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEg9Yig2NDEwKSgpLFI9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2IuZzpnbG9iYWxUaGlzLGo9XygpLFA9TigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEw9T2JqZWN0Lmdl''@;'; put 'put ''dFByb3RvdHlwZU9mLFk9TigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oUSxYKXtmb3IodmFyIHRlPTA7dGU8US5sZW5ndGg7dGUrPTEpaWYoUVt0ZV09PT1YKXJldHVybiB0ZTtyZXR1cm4tMX0sQj17X19wcm90b19fOm51bGx9O0QoaixIJiZ3JiZMP2Z1bmN0aW9u''@;'; put 'put ''KHEpe3ZhciBRPW5ldyBSW3FdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBRKXt2YXIgWD1MKFEpLHRlPXcoWCxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCF0ZSl7dmFyIHJlPUwoWCk7dGU9dyhyZSxTeW1ib2wudG9TdHJpbmdUYWcpfUJbIiQiK3FdPXAodGUuZ2V0KX19OmZ1bmN0aW9uKHEp''@;'; put 'put ''e3ZhciBRPW5ldyBSW3FdLFg9US5zbGljZXx8US5zZXQ7WCYmKEJbIiQiK3FdPXAoWCkpfSksY2UuZXhwb3J0cz1mdW5jdGlvbihRKXtpZighUXx8Im9iamVjdCIhPXR5cGVvZiBRKXJldHVybiExO2lmKCFIKXt2YXIgWD1QKEYoUSksOCwtMSk7cmV0dXJuIFkoaixYKT4tMT9YOiJPYmplY3Qi''@;'; put 'put ''PT09WCYmZnVuY3Rpb24oUSl7dmFyIFg9ITE7cmV0dXJuIEQoQixmdW5jdGlvbih0ZSxyZSl7aWYoIVgpdHJ5e3RlKFEpLFg9UChyZSwxKX1jYXRjaHt9fSksWH0oUSl9cmV0dXJuIHc/ZnVuY3Rpb24oUSl7dmFyIFg9ITE7cmV0dXJuIEQoQixmdW5jdGlvbih0ZSxyZSl7aWYoIVgpdHJ5eyIk''@;'; put 'put ''Iit0ZShRKT09PXJlJiYoWD1QKHJlLDEpKX1jYXRjaHt9fSksWH0oUSk6bnVsbH19LDg2NDY6KCk9Pnt9LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sNjQxOTooKT0+e30sNjM1MzooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2ODooKT0+e30sNTQ0MzooKT0+''@;'; put 'put ''e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sODM3MzooKT0+e30sMzA4MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDk5MDgpLF89dHlwZW9mIGdsb2JhbFRoaXM+InUiP2IuZzpnbG9iYWxUaGlzO2NlLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24oKXtmb3IodmFyIE49W10sdz0wO3c8RC5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiBfW0Rbd11dJiYoTltOLmxlbmd0aF09RFt3XSk7cmV0dXJuIE59fSw3MjE4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDE1NSksXz1iKDg3NjQpLkJ1ZmZlcixw''@;'; put 'put ''PWIoNTEwOCk7ZnVuY3Rpb24gTihNdCxCdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE10LmFwcGx5KEJ0LGFyZ3VtZW50cyl9fWNvbnN0e3RvU3RyaW5nOnd9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOkZ9PU9iamVjdCxIPShNdD0+QnQ9Pntjb25zdCBfbj13LmNhbGwo''@;'; put 'put ''QnQpO3JldHVybiBNdFtfbl18fChNdFtfbl09X24uc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxSPU10PT4oTXQ9TXQudG9Mb3dlckNhc2UoKSxCdD0+SChCdCk9PT1NdCksaj1NdD0+QnQ9PnR5cGVvZiBCdD09PU10LHtpc0FycmF5OlB9PUFycmF5''@;'; put 'put ''LEw9aigidW5kZWZpbmVkIiksQj1SKCJBcnJheUJ1ZmZlciIpLFo9aigic3RyaW5nIikscT1qKCJmdW5jdGlvbiIpLFE9aigibnVtYmVyIiksWD1NdD0+bnVsbCE9PU10JiYib2JqZWN0Ij09dHlwZW9mIE10LHJlPU10PT57aWYoIm9iamVjdCIhPT1IKE10KSlyZXR1cm4hMTtjb25zdCBCdD1G''@;'; put 'put ''KE10KTtyZXR1cm4hKG51bGwhPT1CdCYmQnQhPT1PYmplY3QucHJvdG90eXBlJiZudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKEJ0KXx8U3ltYm9sLnRvU3RyaW5nVGFnIGluIE10fHxTeW1ib2wuaXRlcmF0b3IgaW4gTXQpfSxvZT1SKCJEYXRlIiksZ2U9UigiRmlsZSIpLF9lPVIoIkJs''@;'; put 'put ''b2IiKSxUZT1SKCJGaWxlTGlzdCIpLHo9UigiVVJMU2VhcmNoUGFyYW1zIiksW2cseSx4LENdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFIpO2Z1bmN0aW9uIFYoTXQsQnQse2FsbE93bktleXM6X249ITF9PXt9KXtpZihudWxsPT09TXR8''@;'; put 'put ''fHR5cGVvZiBNdD4idSIpcmV0dXJuO2xldCBtbixJbjtpZigib2JqZWN0IiE9dHlwZW9mIE10JiYoTXQ9W010XSksUChNdCkpZm9yKG1uPTAsSW49TXQubGVuZ3RoO21uPEluO21uKyspQnQuY2FsbChudWxsLE10W21uXSxtbixNdCk7ZWxzZXtjb25zdCB5bj1fbj9PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyhNdCk6T2JqZWN0LmtleXMoTXQpLHVyPXluLmxlbmd0aDtsZXQgeWk7Zm9yKG1uPTA7bW48dXI7bW4rKyl5aT15blttbl0sQnQuY2FsbChudWxsLE10W3lpXSx5aSxNdCl9fWZ1bmN0aW9uIFUoTXQsQnQpe0J0PUJ0LnRvTG93ZXJDYXNlKCk7Y29uc3QgX249T2JqZWN0Lmtl''@;'; put 'put ''eXMoTXQpO2xldCBJbixtbj1fbi5sZW5ndGg7Zm9yKDttbi0tID4wOylpZihJbj1fblttbl0sQnQ9PT1Jbi50b0xvd2VyQ2FzZSgpKXJldHVybiBJbjtyZXR1cm4gbnVsbH1jb25zdCBFPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiP3dpbmRvdzpiLmcsbT1NdD0+IUwoTXQpJiZNdCE9PUUsb3Q9KE10PT5CdD0+TXQmJkJ0IGluc3RhbmNlb2YgTXQpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmRihVaW50OEFycmF5KSksWGU9UigiSFRNTEZvcm1FbGVtZW50IiksQWU9KCh7aGFzT3duUHJvcGVydHk6TXR9''@;'; put 'put ''KT0+KEJ0LF9uKT0+TXQuY2FsbChCdCxfbikpKE9iamVjdC5wcm90b3R5cGUpLEZlPVIoIlJlZ0V4cCIpLFJlPShNdCxCdCk9Pntjb25zdCBfbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhNdCksbW49e307VihfbiwoSW4seW4pPT57bGV0IHVyOyExIT09KHVyPUJ0KEluLHlu''@;'; put 'put ''LE10KSkmJihtblt5bl09dXJ8fEluKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE10LG1uKX0sSmU9UigiQXN5bmNGdW5jdGlvbiIpLHl0PShNdD0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlLEJ0PXEoRS5wb3N0TWVzc2FnZSksTXQ/c2V0SW1tZWRpYXRlOkJ0Pyhfbj1gYXhp''@;'; put 'put ''b3NAJHtNYXRoLnJhbmRvbSgpfWAsbW49W10sRS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpJbixkYXRhOnlufSk9PntJbj09PUUmJnluPT09X24mJm1uLmxlbmd0aCYmbW4uc2hpZnQoKSgpfSwhMSksSW49Pnttbi5wdXNoKEluKSxFLnBvc3RNZXNzYWdlKF9uLCIqIil9''@;'; put 'put ''KTpfbj0+c2V0VGltZW91dChfbikpLFN0PXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZChFKTp0eXBlb2YgRDwidSImJkQubmV4dFRpY2t8fHl0O3ZhciBNdCxCdCxfbixtbixEdD17aXNBcnJheTpQLGlzQXJyYXlCdWZmZXI6Qixpc0J1ZmZlcjpmdW5jdGlv''@;'; put 'put ''biBZKE10KXtyZXR1cm4gbnVsbCE9PU10JiYhTChNdCkmJm51bGwhPT1NdC5jb25zdHJ1Y3RvciYmIUwoTXQuY29uc3RydWN0b3IpJiZxKE10LmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmTXQuY29uc3RydWN0b3IuaXNCdWZmZXIoTXQpfSxpc0Zvcm1EYXRhOk10PT57bGV0IEJ0O3JldHVybiBN''@;'; put 'put ''dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3JtRGF0YSYmTXQgaW5zdGFuY2VvZiBGb3JtRGF0YXx8cShNdC5hcHBlbmQpJiYoImZvcm1kYXRhIj09PShCdD1IKE10KSl8fCJvYmplY3QiPT09QnQmJnEoTXQudG9TdHJpbmcpJiYiW29iamVjdCBGb3JtRGF0YV0iPT09TXQudG9TdHJpbmcoKSkp''@;'; put 'put ''fSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbiBXKE10KXtsZXQgQnQ7cmV0dXJuIEJ0PXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoTXQpOk10JiZNdC5idWZmZXImJkIoTXQuYnVmZmVyKSxCdH0saXNTdHJpbmc6Wixpc051''@;'; put 'put ''bWJlcjpRLGlzQm9vbGVhbjpNdD0+ITA9PT1NdHx8ITE9PT1NdCxpc09iamVjdDpYLGlzUGxhaW5PYmplY3Q6cmUsaXNSZWFkYWJsZVN0cmVhbTpnLGlzUmVxdWVzdDp5LGlzUmVzcG9uc2U6eCxpc0hlYWRlcnM6Qyxpc1VuZGVmaW5lZDpMLGlzRGF0ZTpvZSxpc0ZpbGU6Z2UsaXNCbG9iOl9l''@;'; put 'put ''LGlzUmVnRXhwOkZlLGlzRnVuY3Rpb246cSxpc1N0cmVhbTpNdD0+WChNdCkmJnEoTXQucGlwZSksaXNVUkxTZWFyY2hQYXJhbXM6eixpc1R5cGVkQXJyYXk6b3QsaXNGaWxlTGlzdDpUZSxmb3JFYWNoOlYsbWVyZ2U6ZnVuY3Rpb24gQSgpe2NvbnN0e2Nhc2VsZXNzOk10fT1tKHRoaXMpJiZ0''@;'; put 'put ''aGlzfHx7fSxCdD17fSxfbj0obW4sSW4pPT57Y29uc3QgeW49TXQmJlUoQnQsSW4pfHxJbjtCdFt5bl09cmUoQnRbeW5dKSYmcmUobW4pP0EoQnRbeW5dLG1uKTpyZShtbik/QSh7fSxtbik6UChtbik/bW4uc2xpY2UoKTptbn07Zm9yKGxldCBtbj0wLEluPWFyZ3VtZW50cy5sZW5ndGg7bW48''@;'; put 'put ''SW47bW4rKylhcmd1bWVudHNbbW5dJiZWKGFyZ3VtZW50c1ttbl0sX24pO3JldHVybiBCdH0sZXh0ZW5kOihNdCxCdCxfbix7YWxsT3duS2V5czptbn09e30pPT4oVihCdCwoSW4seW4pPT57TXRbeW5dPV9uJiZxKEluKT9OKEluLF9uKTpJbn0se2FsbE93bktleXM6bW59KSxNdCksdHJpbTpN''@;'; put 'put ''dD0+TXQudHJpbT9NdC50cmltKCk6TXQucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOk10PT4oNjUyNzk9PT1NdC5jaGFyQ29kZUF0KDApJiYoTXQ9TXQuc2xpY2UoMSkpLE10KSxpbmhlcml0czooTXQsQnQsX24sbW4pPT57TXQucHJv''@;'; put 'put ''dG90eXBlPU9iamVjdC5jcmVhdGUoQnQucHJvdG90eXBlLG1uKSxNdC5wcm90b3R5cGUuY29uc3RydWN0b3I9TXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KE10LCJzdXBlciIse3ZhbHVlOkJ0LnByb3RvdHlwZX0pLF9uJiZPYmplY3QuYXNzaWduKE10LnByb3RvdHlwZSxfbil9LHRvRmxhdE9i''@;'; put 'put ''amVjdDooTXQsQnQsX24sbW4pPT57bGV0IEluLHluLHVyO2NvbnN0IHlpPXt9O2lmKEJ0PUJ0fHx7fSxudWxsPT1NdClyZXR1cm4gQnQ7ZG97Zm9yKEluPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE10KSx5bj1Jbi5sZW5ndGg7eW4tLSA+MDspdXI9SW5beW5dLCghbW58fG1uKHVyLE10''@;'; put 'put ''LEJ0KSkmJiF5aVt1cl0mJihCdFt1cl09TXRbdXJdLHlpW3VyXT0hMCk7TXQ9ITEhPT1fbiYmRihNdCl9d2hpbGUoTXQmJighX258fF9uKE10LEJ0KSkmJk10IT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEJ0fSxraW5kT2Y6SCxraW5kT2ZUZXN0OlIsZW5kc1dpdGg6KE10LEJ0LF9uKT0+''@;'; put 'put ''e010PVN0cmluZyhNdCksKHZvaWQgMD09PV9ufHxfbj5NdC5sZW5ndGgpJiYoX249TXQubGVuZ3RoKTtjb25zdCBtbj1NdC5pbmRleE9mKEJ0LF9uLT1CdC5sZW5ndGgpO3JldHVybi0xIT09bW4mJm1uPT09X259LHRvQXJyYXk6TXQ9PntpZighTXQpcmV0dXJuIG51bGw7aWYoUChNdCkpcmV0''@;'; put 'put ''dXJuIE10O2xldCBCdD1NdC5sZW5ndGg7aWYoIVEoQnQpKXJldHVybiBudWxsO2NvbnN0IF9uPW5ldyBBcnJheShCdCk7Zm9yKDtCdC0tID4wOylfbltCdF09TXRbQnRdO3JldHVybiBfbn0sZm9yRWFjaEVudHJ5OihNdCxCdCk9Pntjb25zdCBtbj0oTXQmJk10W1N5bWJvbC5pdGVyYXRvcl0p''@;'; put 'put ''LmNhbGwoTXQpO2xldCBJbjtmb3IoOyhJbj1tbi5uZXh0KCkpJiYhSW4uZG9uZTspe2NvbnN0IHluPUluLnZhbHVlO0J0LmNhbGwoTXQseW5bMF0seW5bMV0pfX0sbWF0Y2hBbGw6KE10LEJ0KT0+e2xldCBfbjtjb25zdCBtbj1bXTtmb3IoO251bGwhPT0oX249TXQuZXhlYyhCdCkpOyltbi5w''@;'; put 'put ''dXNoKF9uKTtyZXR1cm4gbW59LGlzSFRNTEZvcm06WGUsaGFzT3duUHJvcGVydHk6QWUsaGFzT3duUHJvcDpBZSxyZWR1Y2VEZXNjcmlwdG9yczpSZSxmcmVlemVNZXRob2RzOk10PT57UmUoTXQsKEJ0LF9uKT0+e2lmKHEoTXQpJiYtMSE9PVsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVl''@;'; put 'put ''Il0uaW5kZXhPZihfbikpcmV0dXJuITE7aWYocShNdFtfbl0pKXtpZihCdC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBCdClyZXR1cm4gdm9pZChCdC53cml0YWJsZT0hMSk7QnQuc2V0fHwoQnQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0''@;'; put 'put ''aG9kICciK19uKyInIil9KX19KX0sdG9PYmplY3RTZXQ6KE10LEJ0KT0+e2NvbnN0IF9uPXt9LG1uPUluPT57SW4uZm9yRWFjaCh5bj0+e19uW3luXT0hMH0pfTtyZXR1cm4gUChNdCk/bW4oTXQpOm1uKFN0cmluZyhNdCkuc3BsaXQoQnQpKSxfbn0sdG9DYW1lbENhc2U6TXQ9Pk10LnRvTG93''@;'; put 'put ''ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihfbixtbixJbil7cmV0dXJuIG1uLnRvVXBwZXJDYXNlKCkrSW59KSxub29wOigpPT57fSx0b0Zpbml0ZU51bWJlcjooTXQsQnQpPT5udWxsIT1NdCYmTnVtYmVyLmlzRmluaXRlKE10PStNdCk/TXQ6QnQs''@;'; put 'put ''ZmluZEtleTpVLGdsb2JhbDpFLGlzQ29udGV4dERlZmluZWQ6bSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uIF90KE10KXtyZXR1cm4hIShNdCYmcShNdC5hcHBlbmQpJiYiRm9ybURhdGEiPT09TXRbU3ltYm9sLnRvU3RyaW5nVGFnXSYmTXRbU3ltYm9sLml0ZXJhdG9yXSl9LHRvSlNP''@;'; put 'put ''Tk9iamVjdDpNdD0+e2NvbnN0IEJ0PW5ldyBBcnJheSgxMCksX249KG1uLEluKT0+e2lmKFgobW4pKXtpZihCdC5pbmRleE9mKG1uKT49MClyZXR1cm47aWYoISgidG9KU09OImluIG1uKSl7QnRbSW5dPW1uO2NvbnN0IHluPVAobW4pP1tdOnt9O3JldHVybiBWKG1uLCh1cix5aSk9Pntjb25z''@;'; put 'put ''dCBGcj1fbih1cixJbisxKTshTChGcikmJih5blt5aV09RnIpfSksQnRbSW5dPXZvaWQgMCx5bn19cmV0dXJuIG1ufTtyZXR1cm4gX24oTXQsMCl9LGlzQXN5bmNGbjpKZSxpc1RoZW5hYmxlOk10PT5NdCYmKFgoTXQpfHxxKE10KSkmJnEoTXQudGhlbikmJnEoTXQuY2F0Y2gpLHNldEltbWVk''@;'; put 'put ''aWF0ZTp5dCxhc2FwOlN0fTtmdW5jdGlvbiBpdChNdCxCdCxfbixtbixJbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2ssdGhp''@;'; put 'put ''cy5tZXNzYWdlPU10LHRoaXMubmFtZT0iQXhpb3NFcnJvciIsQnQmJih0aGlzLmNvZGU9QnQpLF9uJiYodGhpcy5jb25maWc9X24pLG1uJiYodGhpcy5yZXF1ZXN0PW1uKSxJbiYmKHRoaXMucmVzcG9uc2U9SW4sdGhpcy5zdGF0dXM9SW4uc3RhdHVzP0luLnN0YXR1czpudWxsKX1EdC5pbmhl''@;'; put 'put ''cml0cyhpdCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxp''@;'; put 'put ''bmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkR0LnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19KTtjb25zdCAkZT1pdC5wcm90b3R5cGUsdHQ9e307ZnVuY3Rp''@;'; put 'put ''b24gdXQoTXQpe3JldHVybiBEdC5pc1BsYWluT2JqZWN0KE10KXx8RHQuaXNBcnJheShNdCl9ZnVuY3Rpb24gcXQoTXQpe3JldHVybiBEdC5lbmRzV2l0aChNdCwiW10iKT9NdC5zbGljZSgwLC0yKTpNdH1mdW5jdGlvbiBSdChNdCxCdCxfbil7cmV0dXJuIE10P010LmNvbmNhdChCdCkubWFw''@;'; put 'put ''KGZ1bmN0aW9uKEluLHluKXtyZXR1cm4gSW49cXQoSW4pLCFfbiYmeW4/IlsiK0luKyJdIjpJbn0pLmpvaW4oX24/Ii4iOiIiKTpCdH1bIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9G''@;'; put 'put ''Ul9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKE10PT57dHRbTXRdPXt2YWx1ZTpNdH19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydGllcyhpdCx0dCksT2JqZWN0LmRlZmluZVByb3BlcnR5KCRlLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLGl0LmZyb209KE10LEJ0LF9uLG1uLEluLHluKT0+e2NvbnN0IHVyPU9iamVjdC5jcmVhdGUoJGUpO3JldHVybiBEdC50b0ZsYXRPYmplY3QoTXQsdXIs''@;'; put 'put ''ZnVuY3Rpb24oRnIpe3JldHVybiBGciE9PUVycm9yLnByb3RvdHlwZX0seWk9PiJpc0F4aW9zRXJyb3IiIT09eWkpLGl0LmNhbGwodXIsTXQubWVzc2FnZSxCdCxfbixtbixJbiksdXIuY2F1c2U9TXQsdXIubmFtZT1NdC5uYW1lLHluJiZPYmplY3QuYXNzaWduKHVyLHluKSx1cn07Y29uc3Qg''@;'; put 'put ''Y2k9RHQudG9GbGF0T2JqZWN0KER0LHt9LG51bGwsZnVuY3Rpb24oQnQpe3JldHVybi9eaXNbQS1aXS8udGVzdChCdCl9KTtmdW5jdGlvbiBRdChNdCxCdCxfbil7aWYoIUR0LmlzT2JqZWN0KE10KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtCdD1C''@;'; put 'put ''dHx8bmV3IEZvcm1EYXRhO2NvbnN0IG1uPShfbj1EdC50b0ZsYXRPYmplY3QoX24se21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihfbyxqaSl7cmV0dXJuIUR0LmlzVW5kZWZpbmVkKGppW19vXSl9KSkubWV0YVRva2VucyxJbj1fbi52aXNpdG9yfHxvYSx5''@;'; put 'put ''bj1fbi5kb3RzLHVyPV9uLmluZGV4ZXMsRnI9KF9uLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oQnQpO2lmKCFEdC5pc0Z1bmN0aW9uKEluKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0''@;'; put 'put ''aW9uIHRhKHRvKXtpZihudWxsPT09dG8pcmV0dXJuIiI7aWYoRHQuaXNEYXRlKHRvKSlyZXR1cm4gdG8udG9JU09TdHJpbmcoKTtpZighRnImJkR0LmlzQmxvYih0bykpdGhyb3cgbmV3IGl0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBE''@;'; put 'put ''dC5pc0FycmF5QnVmZmVyKHRvKXx8RHQuaXNUeXBlZEFycmF5KHRvKT9GciYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW3RvXSk6Xy5mcm9tKHRvKTp0b31mdW5jdGlvbiBvYSh0byxfbyxqaSl7bGV0IFBjPXRvO2lmKHRvJiYhamkmJiJvYmplY3QiPT10eXBlb2YgdG8paWYo''@;'; put 'put ''RHQuZW5kc1dpdGgoX28sInt9IikpX289bW4/X286X28uc2xpY2UoMCwtMiksdG89SlNPTi5zdHJpbmdpZnkodG8pO2Vsc2UgaWYoRHQuaXNBcnJheSh0bykmJmZ1bmN0aW9uIFB0KE10KXtyZXR1cm4gRHQuaXNBcnJheShNdCkmJiFNdC5zb21lKHV0KX0odG8pfHwoRHQuaXNGaWxlTGlzdCh0''@;'; put 'put ''byl8fER0LmVuZHNXaXRoKF9vLCJbXSIpKSYmKFBjPUR0LnRvQXJyYXkodG8pKSlyZXR1cm4gX289cXQoX28pLFBjLmZvckVhY2goZnVuY3Rpb24oQ2EsVGEpeyFEdC5pc1VuZGVmaW5lZChDYSkmJm51bGwhPT1DYSYmQnQuYXBwZW5kKCEwPT09dXI/UnQoW19vXSxUYSx5bik6bnVsbD09PXVy''@;'; put 'put ''P19vOl9vKyJbXSIsdGEoQ2EpKX0pLCExO3JldHVybiEhdXQodG8pfHwoQnQuYXBwZW5kKFJ0KGppLF9vLHluKSx0YSh0bykpLCExKX1jb25zdCBWYT1bXSwkbz1PYmplY3QuYXNzaWduKGNpLHtkZWZhdWx0VmlzaXRvcjpvYSxjb252ZXJ0VmFsdWU6dGEsaXNWaXNpdGFibGU6dXR9KTtpZigh''@;'; put 'put ''RHQuaXNPYmplY3QoTXQpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gWGwodG8sX28pe2lmKCFEdC5pc1VuZGVmaW5lZCh0bykpe2lmKC0xIT09VmEuaW5kZXhPZih0bykpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5j''@;'; put 'put ''ZSBkZXRlY3RlZCBpbiAiK19vLmpvaW4oIi4iKSk7VmEucHVzaCh0byksRHQuZm9yRWFjaCh0byxmdW5jdGlvbihQYyx6bCl7ITA9PT0oIShEdC5pc1VuZGVmaW5lZChQYyl8fG51bGw9PT1QYykmJkluLmNhbGwoQnQsUGMsRHQuaXNTdHJpbmcoemwpP3psLnRyaW0oKTp6bCxfbywkbykpJiZY''@;'; put 'put ''bChQYyxfbz9fby5jb25jYXQoemwpOlt6bF0pfSksVmEucG9wKCl9fShNdCksQnR9ZnVuY3Rpb24gc24oTXQpe2NvbnN0IEJ0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29t''@;'; put 'put ''cG9uZW50KE10KS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihtbil7cmV0dXJuIEJ0W21uXX0pfWZ1bmN0aW9uIFJpKE10LEJ0KXt0aGlzLl9wYWlycz1bXSxNdCYmUXQoTXQsdGhpcyxCdCl9Y29uc3QgaG49UmkucHJvdG90eXBlO2Z1bmN0aW9uIGZ0KE10KXtyZXR1cm4g''@;'; put 'put ''ZW5jb2RlVVJJQ29tcG9uZW50KE10KS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gT3IoTXQsQnQs''@;'; put 'put ''X24pe2lmKCFCdClyZXR1cm4gTXQ7Y29uc3QgbW49X24mJl9uLmVuY29kZXx8ZnQ7RHQuaXNGdW5jdGlvbihfbikmJihfbj17c2VyaWFsaXplOl9ufSk7Y29uc3QgSW49X24mJl9uLnNlcmlhbGl6ZTtsZXQgeW47aWYoeW49SW4/SW4oQnQsX24pOkR0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KT9C''@;'; put 'put ''dC50b1N0cmluZygpOm5ldyBSaShCdCxfbikudG9TdHJpbmcobW4pLHluKXtjb25zdCB1cj1NdC5pbmRleE9mKCIjIik7LTEhPT11ciYmKE10PU10LnNsaWNlKDAsdXIpKSxNdCs9KC0xPT09TXQuaW5kZXhPZigiPyIpPyI/IjoiJiIpK3lufXJldHVybiBNdH1obi5hcHBlbmQ9ZnVuY3Rpb24o''@;'; put 'put ''QnQsX24pe3RoaXMuX3BhaXJzLnB1c2goW0J0LF9uXSl9LGhuLnRvU3RyaW5nPWZ1bmN0aW9uKEJ0KXtjb25zdCBfbj1CdD9mdW5jdGlvbihtbil7cmV0dXJuIEJ0LmNhbGwodGhpcyxtbixzbil9OnNuO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oSW4pe3JldHVybiBfbihJblsw''@;'; put 'put ''XSkrIj0iK19uKEluWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEF0PWNsYXNzIFd0e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoQnQsX24sbW4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpCdCxyZWplY3RlZDpfbixzeW5jaHJvbm91czohIW1uJiZt''@;'; put 'put ''bi5zeW5jaHJvbm91cyxydW5XaGVuOm1uP21uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoQnQpe3RoaXMuaGFuZGxlcnNbQnRdJiYodGhpcy5oYW5kbGVyc1tCdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9y''@;'; put 'put ''RWFjaChCdCl7RHQuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG1uKXtudWxsIT09bW4mJkJ0KG1uKX0pfX0sUm49e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LFdlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7''@;'; put 'put ''VVJMU2VhcmNoUGFyYW1zOnR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpSaSxGb3JtRGF0YTp0eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGwsQmxvYjp0eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJm''@;'; put 'put ''aWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07Y29uc3QgVHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsbnI9Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvcnx8dm9pZCAwLGh0PVR0JiYoIW5yfHxbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0''@;'; put 'put ''IiwiTlMiXS5pbmRleE9mKG5yLnByb2R1Y3QpPDApLHh0PXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyxqbj1UdCYmd2luZG93LmxvY2F0aW9uLmhyZWZ8''@;'; put 'put ''fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgenQ9ey4uLk9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6VHQsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52Onh0LGhhc1N0YW5kYXJkQnJvd3NlckVudjpodCxuYXZpZ2F0b3I6bnIsb3JpZ2luOmpufSksLi4u''@;'; put 'put ''V2V9O2Z1bmN0aW9uIElpKE10KXtmdW5jdGlvbiBCdChfbixtbixJbix5bil7bGV0IHVyPV9uW3luKytdO2lmKCJfX3Byb3RvX18iPT09dXIpcmV0dXJuITA7Y29uc3QgeWk9TnVtYmVyLmlzRmluaXRlKCt1ciksRnI9eW4+PV9uLmxlbmd0aDtyZXR1cm4gdXI9IXVyJiZEdC5pc0FycmF5KElu''@;'; put 'put ''KT9Jbi5sZW5ndGg6dXIsRnI/KEluW3VyXT1EdC5oYXNPd25Qcm9wKEluLHVyKT9bSW5bdXJdLG1uXTptbiwheWkpOigoIUluW3VyXXx8IUR0LmlzT2JqZWN0KEluW3VyXSkpJiYoSW5bdXJdPVtdKSxCdChfbixtbixJblt1cl0seW4pJiZEdC5pc0FycmF5KEluW3VyXSkmJihJblt1cl09ZnVu''@;'; put 'put ''Y3Rpb24gZm4oTXQpe2NvbnN0IEJ0PXt9LF9uPU9iamVjdC5rZXlzKE10KTtsZXQgbW47Y29uc3QgSW49X24ubGVuZ3RoO2xldCB5bjtmb3IobW49MDttbjxJbjttbisrKXluPV9uW21uXSxCdFt5bl09TXRbeW5dO3JldHVybiBCdH0oSW5bdXJdKSksIXlpKX1pZihEdC5pc0Zvcm1EYXRhKE10''@;'; put 'put ''KSYmRHQuaXNGdW5jdGlvbihNdC5lbnRyaWVzKSl7Y29uc3QgX249e307cmV0dXJuIER0LmZvckVhY2hFbnRyeShNdCwobW4sSW4pPT57QnQoZnVuY3Rpb24gdW4oTXQpe3JldHVybiBEdC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csTXQpLm1hcChCdD0+IltdIj09PUJ0WzBdPyIiOkJ0WzFd''@;'; put 'put ''fHxCdFswXSl9KG1uKSxJbixfbiwwKX0pLF9ufXJldHVybiBudWxsfWNvbnN0IGVuPXt0cmFuc2l0aW9uYWw6Um4sYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEJ0LF9uKXtjb25zdCBtbj1fbi5nZXRDb250ZW50VHlwZSgpfHwiIixJ''@;'; put 'put ''bj1tbi5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEseW49RHQuaXNPYmplY3QoQnQpO2lmKHluJiZEdC5pc0hUTUxGb3JtKEJ0KSYmKEJ0PW5ldyBGb3JtRGF0YShCdCkpLER0LmlzRm9ybURhdGEoQnQpKXJldHVybiBJbj9KU09OLnN0cmluZ2lmeShJaShCdCkpOkJ0O2lmKER0Lmlz''@;'; put 'put ''QXJyYXlCdWZmZXIoQnQpfHxEdC5pc0J1ZmZlcihCdCl8fER0LmlzU3RyZWFtKEJ0KXx8RHQuaXNGaWxlKEJ0KXx8RHQuaXNCbG9iKEJ0KXx8RHQuaXNSZWFkYWJsZVN0cmVhbShCdCkpcmV0dXJuIEJ0O2lmKER0LmlzQXJyYXlCdWZmZXJWaWV3KEJ0KSlyZXR1cm4gQnQuYnVmZmVyO2lmKER0''@;'; put 'put ''LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSlyZXR1cm4gX24uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQnQudG9TdHJpbmcoKTtsZXQgeWk7aWYoeW4pe2lmKG1uLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZv''@;'; put 'put ''cm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbiBoaShNdCxCdCl7cmV0dXJuIFF0KE10LG5ldyB6dC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKF9uLG1uLEluLHluKXtyZXR1cm4genQuaXNOb2RlJiZEdC5pc0J1ZmZlcihf''@;'; put 'put ''bik/KHRoaXMuYXBwZW5kKG1uLF9uLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOnluLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJ0KSl9KEJ0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHlpPUR0LmlzRmlsZUxpc3QoQnQpKXx8bW4uaW5kZXhP''@;'; put 'put ''ZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtjb25zdCBGcj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFF0KHlpP3siZmlsZXNbXSI6QnR9OkJ0LEZyJiZuZXcgRnIsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiB5bnx8SW4/KF9uLnNldENvbnRlbnRUeXBlKCJh''@;'; put 'put ''cHBsaWNhdGlvbi9qc29uIiwhMSksZnVuY3Rpb24gWHQoTXQsQnQsX24pe2lmKER0LmlzU3RyaW5nKE10KSl0cnl7cmV0dXJuKEJ0fHxKU09OLnBhcnNlKShNdCksRHQudHJpbShNdCl9Y2F0Y2gobW4pe2lmKCJTeW50YXhFcnJvciIhPT1tbi5uYW1lKXRocm93IG1ufXJldHVybihfbnx8SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkpKE10KX0oQnQpKTpCdH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihCdCl7Y29uc3QgX249dGhpcy50cmFuc2l0aW9uYWx8fGVuLnRyYW5zaXRpb25hbCxtbj1fbiYmX24uZm9yY2VkSlNPTlBhcnNpbmcsSW49Impzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYo''@;'; put 'put ''RHQuaXNSZXNwb25zZShCdCl8fER0LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihCdCYmRHQuaXNTdHJpbmcoQnQpJiYobW4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8SW4pKXtjb25zdCB1cj0hKF9uJiZfbi5zaWxlbnRKU09OUGFyc2luZykmJkluO3RyeXtyZXR1cm4gSlNPTi5w''@;'; put 'put ''YXJzZShCdCl9Y2F0Y2goeWkpe2lmKHVyKXRocm93IlN5bnRheEVycm9yIj09PXlpLm5hbWU/aXQuZnJvbSh5aSxpdC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTp5aX19cmV0dXJuIEJ0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4''@;'; put 'put ''c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp6dC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6enQuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihCdCl7cmV0dXJuIEJ0Pj0yMDAm''@;'; put 'put ''JkJ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0R0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sTXQ9Pntlbi5oZWFkZXJz''@;'; put 'put ''W010XT17fX0pO3ZhciB1YT1lbjtjb25zdCBFaT1EdC50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQt''@;'; put 'put ''c2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxXbj1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uICRpKE10KXtyZXR1cm4gTXQmJlN0cmlu''@;'; put 'put ''ZyhNdCkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZWkoTXQpe3JldHVybiExPT09TXR8fG51bGw9PU10P010OkR0LmlzQXJyYXkoTXQpP010Lm1hcChlaSk6U3RyaW5nKE10KX1mdW5jdGlvbiBOaShNdCxCdCxfbixtbixJbil7aWYoRHQuaXNGdW5jdGlvbihtbikpcmV0dXJuIG1u''@;'; put 'put ''LmNhbGwodGhpcyxCdCxfbik7aWYoSW4mJihCdD1fbiksRHQuaXNTdHJpbmcoQnQpKXtpZihEdC5pc1N0cmluZyhtbikpcmV0dXJuLTEhPT1CdC5pbmRleE9mKG1uKTtpZihEdC5pc1JlZ0V4cChtbikpcmV0dXJuIG1uLnRlc3QoQnQpfX1jbGFzcyBXaXtjb25zdHJ1Y3RvcihCdCl7QnQmJnRo''@;'; put 'put ''aXMuc2V0KEJ0KX1zZXQoQnQsX24sbW4pe2NvbnN0IEluPXRoaXM7ZnVuY3Rpb24geW4oeWksRnIsdGEpe2NvbnN0IG9hPSRpKEZyKTtpZighb2EpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2NvbnN0IFZhPUR0LmZpbmRLZXkoSW4s''@;'; put 'put ''b2EpOyghVmF8fHZvaWQgMD09PUluW1ZhXXx8ITA9PT10YXx8dm9pZCAwPT09dGEmJiExIT09SW5bVmFdKSYmKEluW1ZhfHxGcl09ZWkoeWkpKX1jb25zdCB1cj0oeWksRnIpPT5EdC5mb3JFYWNoKHlpLCh0YSxvYSk9PnluKHRhLG9hLEZyKSk7aWYoRHQuaXNQbGFpbk9iamVjdChCdCl8fEJ0''@;'; put 'put ''IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil1cihCdCxfbik7ZWxzZSBpZihEdC5pc1N0cmluZyhCdCkmJihCdD1CdC50cmltKCkpJiYhKE10PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KE10LnRyaW0oKSkpKEJ0KSl1cigoTXQ9Pntjb25zdCBCdD17fTtsZXQg''@;'; put 'put ''X24sbW4sSW47cmV0dXJuIE10JiZNdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHVyKXtJbj11ci5pbmRleE9mKCI6IiksX249dXIuc3Vic3RyaW5nKDAsSW4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLG1uPXVyLnN1YnN0cmluZyhJbisxKS50cmltKCksISghX258fEJ0W19uXSYmRWlb''@;'; put 'put ''X25dKSYmKCJzZXQtY29va2llIj09PV9uP0J0W19uXT9CdFtfbl0ucHVzaChtbik6QnRbX25dPVttbl06QnRbX25dPUJ0W19uXT9CdFtfbl0rIiwgIittbjptbil9KSxCdH0pKEJ0KSxfbik7ZWxzZSBpZihEdC5pc0hlYWRlcnMoQnQpKWZvcihjb25zdFt5aSxGcl1vZiBCdC5lbnRyaWVzKCkp''@;'; put 'put ''eW4oRnIseWksbW4pO2Vsc2UgbnVsbCE9QnQmJnluKF9uLEJ0LG1uKTtyZXR1cm4gdGhpc31nZXQoQnQsX24pe2lmKEJ0PSRpKEJ0KSl7Y29uc3QgbW49RHQuZmluZEtleSh0aGlzLEJ0KTtpZihtbil7Y29uc3QgSW49dGhpc1ttbl07aWYoIV9uKXJldHVybiBJbjtpZighMD09PV9uKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBRcihNdCl7Y29uc3QgQnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxfbj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCBtbjtmb3IoO21uPV9uLmV4ZWMoTXQpOylCdFttblsxXV09bW5bMl07cmV0dXJuIEJ0fShJbik7aWYoRHQuaXNGdW5jdGlvbihfbikp''@;'; put 'put ''cmV0dXJuIF9uLmNhbGwodGhpcyxJbixtbik7aWYoRHQuaXNSZWdFeHAoX24pKXJldHVybiBfbi5leGVjKEluKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEJ0LF9uKXtpZihCdD0kaShCdCkpe2NvbnN0IG1uPUR0''@;'; put 'put ''LmZpbmRLZXkodGhpcyxCdCk7cmV0dXJuISghbW58fHZvaWQgMD09PXRoaXNbbW5dfHxfbiYmIU5pKDAsdGhpc1ttbl0sbW4sX24pKX1yZXR1cm4hMX1kZWxldGUoQnQsX24pe2NvbnN0IG1uPXRoaXM7bGV0IEluPSExO2Z1bmN0aW9uIHluKHVyKXtpZih1cj0kaSh1cikpe2NvbnN0IHlpPUR0''@;'; put 'put ''LmZpbmRLZXkobW4sdXIpO3lpJiYoIV9ufHxOaSgwLG1uW3lpXSx5aSxfbikpJiYoZGVsZXRlIG1uW3lpXSxJbj0hMCl9fXJldHVybiBEdC5pc0FycmF5KEJ0KT9CdC5mb3JFYWNoKHluKTp5bihCdCksSW59Y2xlYXIoQnQpe2NvbnN0IF9uPU9iamVjdC5rZXlzKHRoaXMpO2xldCBtbj1fbi5s''@;'; put 'put ''ZW5ndGgsSW49ITE7Zm9yKDttbi0tOyl7Y29uc3QgeW49X25bbW5dOyghQnR8fE5pKDAsdGhpc1t5bl0seW4sQnQsITApKSYmKGRlbGV0ZSB0aGlzW3luXSxJbj0hMCl9cmV0dXJuIElufW5vcm1hbGl6ZShCdCl7Y29uc3QgX249dGhpcyxtbj17fTtyZXR1cm4gRHQuZm9yRWFjaCh0aGlzLChJ''@;'; put 'put ''bix5bik9Pntjb25zdCB1cj1EdC5maW5kS2V5KG1uLHluKTtpZih1cilyZXR1cm4gX25bdXJdPWVpKEluKSx2b2lkIGRlbGV0ZSBfblt5bl07Y29uc3QgeWk9QnQ/ZnVuY3Rpb24gRGEoTXQpe3JldHVybiBNdC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9n''@;'; put 'put ''LChCdCxfbixtbik9Pl9uLnRvVXBwZXJDYXNlKCkrbW4pfSh5bik6U3RyaW5nKHluKS50cmltKCk7eWkhPT15biYmZGVsZXRlIF9uW3luXSxfblt5aV09ZWkoSW4pLG1uW3lpXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkJ0KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5C''@;'; put 'put ''dCl9dG9KU09OKEJ0KXtjb25zdCBfbj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEdC5mb3JFYWNoKHRoaXMsKG1uLEluKT0+e251bGwhPW1uJiYhMSE9PW1uJiYoX25bSW5dPUJ0JiZEdC5pc0FycmF5KG1uKT9tbi5qb2luKCIsICIpOm1uKX0pLF9ufVtTeW1ib2wuaXRlcmF0b3JdKCl7''@;'; put 'put ''cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtCdCxfbl0pPT5CdCsiOiAiK19uKS5qb2luKCJcbiIpfWdldFtTeW1ib2wudG9TdHJpbmdUYWdd''@;'; put 'put ''KCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oQnQpe3JldHVybiBCdCBpbnN0YW5jZW9mIHRoaXM/QnQ6bmV3IHRoaXMoQnQpfXN0YXRpYyBjb25jYXQoQnQsLi4uX24pe2NvbnN0IG1uPW5ldyB0aGlzKEJ0KTtyZXR1cm4gX24uZm9yRWFjaChJbj0+bW4uc2V0KEluKSksbW59''@;'; put 'put ''c3RhdGljIGFjY2Vzc29yKEJ0KXtjb25zdCBtbj0odGhpc1tXbl09dGhpc1tXbl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxJbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiB5bih1cil7Y29uc3QgeWk9JGkodXIpO21uW3lpXXx8KGZ1bmN0aW9uIExyKE10LEJ0KXtjb25zdCBfbj1EdC50''@;'; put 'put ''b0NhbWVsQ2FzZSgiICIrQnQpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChtbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShNdCxtbitfbix7dmFsdWU6ZnVuY3Rpb24oSW4seW4sdXIpe3JldHVybiB0aGlzW21uXS5jYWxsKHRoaXMsQnQsSW4seW4sdXIpfSxjb25maWd1cmFibGU6ITB9''@;'; put 'put ''KX0pfShJbix1ciksbW5beWldPSEwKX1yZXR1cm4gRHQuaXNBcnJheShCdCk/QnQuZm9yRWFjaCh5bik6eW4oQnQpLHRoaXN9fVdpLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9y''@;'; put 'put ''aXphdGlvbiJdKSxEdC5yZWR1Y2VEZXNjcmlwdG9ycyhXaS5wcm90b3R5cGUsKHt2YWx1ZTpNdH0sQnQpPT57bGV0IF9uPUJ0WzBdLnRvVXBwZXJDYXNlKCkrQnQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+TXQsc2V0KG1uKXt0aGlzW19uXT1tbn19fSksRHQuZnJlZXplTWV0aG9kcyhXaSk7''@;'; put 'put ''dmFyIHBhPVdpO2Z1bmN0aW9uIFFuKE10LEJ0KXtjb25zdCBfbj10aGlzfHx1YSxtbj1CdHx8X24sSW49cGEuZnJvbShtbi5oZWFkZXJzKTtsZXQgeW49bW4uZGF0YTtyZXR1cm4gRHQuZm9yRWFjaChNdCxmdW5jdGlvbih5aSl7eW49eWkuY2FsbChfbix5bixJbi5ub3JtYWxpemUoKSxCdD9C''@;'; put 'put ''dC5zdGF0dXM6dm9pZCAwKX0pLEluLm5vcm1hbGl6ZSgpLHlufWZ1bmN0aW9uIGxhKE10KXtyZXR1cm4hKCFNdHx8IU10Ll9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGJhKE10LEJ0LF9uKXtpdC5jYWxsKHRoaXMsTXQ/PyJjYW5jZWxlZCIsaXQuRVJSX0NBTkNFTEVELEJ0LF9uKSx0aGlzLm5hbWU9''@;'; put 'put ''IkNhbmNlbGVkRXJyb3IifWZ1bmN0aW9uIExhKE10LEJ0LF9uKXtjb25zdCBtbj1fbi5jb25maWcudmFsaWRhdGVTdGF0dXM7X24uc3RhdHVzJiZtbiYmIW1uKF9uLnN0YXR1cyk/QnQobmV3IGl0KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrX24uc3RhdHVzLFtpdC5FUlJf''@;'; put 'put ''QkFEX1JFUVVFU1QsaXQuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihfbi5zdGF0dXMvMTAwKS00XSxfbi5jb25maWcsX24ucmVxdWVzdCxfbikpOk10KF9uKX1EdC5pbmhlcml0cyhiYSxpdCx7X19DQU5DRUxfXzohMH0pO2NvbnN0IE5zPShNdCxCdCxfbj0zKT0+e2xldCBtbj0wO2Nv''@;'; put 'put ''bnN0IEluPWZ1bmN0aW9uIHRpKE10LEJ0KXtNdD1NdHx8MTA7Y29uc3QgX249bmV3IEFycmF5KE10KSxtbj1uZXcgQXJyYXkoTXQpO2xldCB1cixJbj0wLHluPTA7cmV0dXJuIEJ0PXZvaWQgMCE9PUJ0P0J0OjFlMyxmdW5jdGlvbihGcil7Y29uc3QgdGE9RGF0ZS5ub3coKSxvYT1tblt5bl07''@;'; put 'put ''dXJ8fCh1cj10YSksX25bSW5dPUZyLG1uW0luXT10YTtsZXQgVmE9eW4sJG89MDtmb3IoO1ZhIT09SW47KSRvKz1fbltWYSsrXSxWYSU9TXQ7aWYoSW49KEluKzEpJU10LEluPT09eW4mJih5bj0oeW4rMSklTXQpLHRhLXVyPEJ0KXJldHVybjtjb25zdCBYbD1vYSYmdGEtb2E7cmV0dXJuIFhs''@;'; put 'put ''P01hdGgucm91bmQoMWUzKiRvL1hsKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBnbyhNdCxCdCl7bGV0IEluLHluLF9uPTAsbW49MWUzL0J0O2NvbnN0IHVyPSh0YSxvYT1EYXRlLm5vdygpKT0+e19uPW9hLEluPW51bGwseW4mJihjbGVhclRpbWVvdXQoeW4pLHluPW51bGwp''@;'; put 'put ''LE10LmFwcGx5KG51bGwsdGEpfTtyZXR1cm5bKC4uLnRhKT0+e2NvbnN0IG9hPURhdGUubm93KCksVmE9b2EtX247VmE+PW1uP3VyKHRhLG9hKTooSW49dGEseW58fCh5bj1zZXRUaW1lb3V0KCgpPT57eW49bnVsbCx1cihJbil9LG1uLVZhKSkpfSwoKT0+SW4mJnVyKEluKV19KHluPT57Y29u''@;'; put 'put ''c3QgdXI9eW4ubG9hZGVkLHlpPXluLmxlbmd0aENvbXB1dGFibGU/eW4udG90YWw6dm9pZCAwLEZyPXVyLW1uLHRhPUluKEZyKTttbj11cixNdCh7bG9hZGVkOnVyLHRvdGFsOnlpLHByb2dyZXNzOnlpP3VyL3lpOnZvaWQgMCxieXRlczpGcixyYXRlOnRhfHx2b2lkIDAsZXN0aW1hdGVkOnRh''@;'; put 'put ''JiZ5aSYmdXI8PXlpPyh5aS11cikvdGE6dm9pZCAwLGV2ZW50OnluLGxlbmd0aENvbXB1dGFibGU6bnVsbCE9eWksW0J0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfSl9LF9uKX0seWw9KE10LEJ0KT0+e2NvbnN0IF9uPW51bGwhPU10O3JldHVyblttbj0+QnRbMF0oe2xlbmd0aENvbXB1dGFi''@;'; put 'put ''bGU6X24sdG90YWw6TXQsbG9hZGVkOm1ufSksQnRbMV1dfSxwdT1NdD0+KC4uLkJ0KT0+RHQuYXNhcCgoKT0+TXQoLi4uQnQpKTt2YXIgTGM9enQuaGFzU3RhbmRhcmRCcm93c2VyRW52PygoTXQsQnQpPT5fbj0+KF9uPW5ldyBVUkwoX24senQub3JpZ2luKSxNdC5wcm90b2NvbD09PV9uLnBy''@;'; put 'put ''b3RvY29sJiZNdC5ob3N0PT09X24uaG9zdCYmKEJ0fHxNdC5wb3J0PT09X24ucG9ydCkpKShuZXcgVVJMKHp0Lm9yaWdpbiksenQubmF2aWdhdG9yJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHp0Lm5hdmlnYXRvci51c2VyQWdlbnQpKTooKT0+ITAsRDA9enQuaGFzU3RhbmRhcmRCcm93c2Vy''@;'; put 'put ''RW52P3t3cml0ZShNdCxCdCxfbixtbixJbix5bil7Y29uc3QgdXI9W010KyI9IitlbmNvZGVVUklDb21wb25lbnQoQnQpXTtEdC5pc051bWJlcihfbikmJnVyLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShfbikudG9HTVRTdHJpbmcoKSksRHQuaXNTdHJpbmcobW4pJiZ1ci5wdXNoKCJwYXRo''@;'; put 'put ''PSIrbW4pLER0LmlzU3RyaW5nKEluKSYmdXIucHVzaCgiZG9tYWluPSIrSW4pLCEwPT09eW4mJnVyLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11ci5qb2luKCI7ICIpfSxyZWFkKE10KXtjb25zdCBCdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyop''@;'; put 'put ''KCIrTXQrIik9KFteO10qKSIpKTtyZXR1cm4gQnQ/ZGVjb2RlVVJJQ29tcG9uZW50KEJ0WzNdKTpudWxsfSxyZW1vdmUoTXQpe3RoaXMud3JpdGUoTXQsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQ6KCk9Pm51bGwscmVtb3ZlKCl7fX07ZnVuY3Rpb24gdWkoTXQsQnQs''@;'; put 'put ''X24pe2xldCBtbj0hZnVuY3Rpb24gaXIoTXQpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoTXQpfShCdCk7cmV0dXJuIE10JiZtbnx8MD09X24/ZnVuY3Rpb24geGEoTXQsQnQpe3JldHVybiBCdD9NdC5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrQnQucmVwbGFj''@;'; put 'put ''ZSgvXlwvKy8sIiIpOk10fShNdCxCdCk6QnR9Y29uc3QgVnQ9TXQ9Pk10IGluc3RhbmNlb2YgcGE/ey4uLk10fTpNdDtmdW5jdGlvbiBKcihNdCxCdCl7QnQ9QnR8fHt9O2NvbnN0IF9uPXt9O2Z1bmN0aW9uIG1uKHRhLG9hLFZhLCRvKXtyZXR1cm4gRHQuaXNQbGFpbk9iamVjdCh0YSkmJkR0''@;'; put 'put ''LmlzUGxhaW5PYmplY3Qob2EpP0R0Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOiRvfSx0YSxvYSk6RHQuaXNQbGFpbk9iamVjdChvYSk/RHQubWVyZ2Uoe30sb2EpOkR0LmlzQXJyYXkob2EpP29hLnNsaWNlKCk6b2F9ZnVuY3Rpb24gSW4odGEsb2EsVmEsJG8pe3JldHVybiBEdC5pc1VuZGVmaW5l''@;'; put 'put ''ZChvYSk/RHQuaXNVbmRlZmluZWQodGEpP3ZvaWQgMDptbih2b2lkIDAsdGEsMCwkbyk6bW4odGEsb2EsMCwkbyl9ZnVuY3Rpb24geW4odGEsb2Epe2lmKCFEdC5pc1VuZGVmaW5lZChvYSkpcmV0dXJuIG1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24gdXIodGEsb2Epe3JldHVybiBEdC5pc1VuZGVm''@;'; put 'put ''aW5lZChvYSk/RHQuaXNVbmRlZmluZWQodGEpP3ZvaWQgMDptbih2b2lkIDAsdGEpOm1uKHZvaWQgMCxvYSl9ZnVuY3Rpb24geWkodGEsb2EsVmEpe3JldHVybiBWYSBpbiBCdD9tbih0YSxvYSk6VmEgaW4gTXQ/bW4odm9pZCAwLHRhKTp2b2lkIDB9Y29uc3QgRnI9e3VybDp5bixtZXRob2Q6''@;'; put 'put ''eW4sZGF0YTp5bixiYXNlVVJMOnVyLHRyYW5zZm9ybVJlcXVlc3Q6dXIsdHJhbnNmb3JtUmVzcG9uc2U6dXIscGFyYW1zU2VyaWFsaXplcjp1cix0aW1lb3V0OnVyLHRpbWVvdXRNZXNzYWdlOnVyLHdpdGhDcmVkZW50aWFsczp1cix3aXRoWFNSRlRva2VuOnVyLGFkYXB0ZXI6dXIscmVzcG9u''@;'; put 'put ''c2VUeXBlOnVyLHhzcmZDb29raWVOYW1lOnVyLHhzcmZIZWFkZXJOYW1lOnVyLG9uVXBsb2FkUHJvZ3Jlc3M6dXIsb25Eb3dubG9hZFByb2dyZXNzOnVyLGRlY29tcHJlc3M6dXIsbWF4Q29udGVudExlbmd0aDp1cixtYXhCb2R5TGVuZ3RoOnVyLGJlZm9yZVJlZGlyZWN0OnVyLHRyYW5zcG9y''@;'; put 'put ''dDp1cixodHRwQWdlbnQ6dXIsaHR0cHNBZ2VudDp1cixjYW5jZWxUb2tlbjp1cixzb2NrZXRQYXRoOnVyLHJlc3BvbnNlRW5jb2Rpbmc6dXIsdmFsaWRhdGVTdGF0dXM6eWksaGVhZGVyczoodGEsb2EsVmEpPT5JbihWdCh0YSksVnQob2EpLDAsITApfTtyZXR1cm4gRHQuZm9yRWFjaChPYmpl''@;'; put 'put ''Y3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LE10LEJ0KSksZnVuY3Rpb24ob2Epe2NvbnN0IFZhPUZyW29hXXx8SW4sJG89VmEoTXRbb2FdLEJ0W29hXSxvYSk7RHQuaXNVbmRlZmluZWQoJG8pJiZWYSE9PXlpfHwoX25bb2FdPSRvKX0pLF9ufXZhciB5MD1NdD0+e2NvbnN0IEJ0PUpyKHt9LE10''@;'; put 'put ''KTtsZXQgRnIse2RhdGE6X24sd2l0aFhTUkZUb2tlbjptbix4c3JmSGVhZGVyTmFtZTpJbix4c3JmQ29va2llTmFtZTp5bixoZWFkZXJzOnVyLGF1dGg6eWl9PUJ0O2lmKEJ0LmhlYWRlcnM9dXI9cGEuZnJvbSh1ciksQnQudXJsPU9yKHVpKEJ0LmJhc2VVUkwsQnQudXJsKSxNdC5wYXJhbXMs''@;'; put 'put ''TXQucGFyYW1zU2VyaWFsaXplcikseWkmJnVyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoeWkudXNlcm5hbWV8fCIiKSsiOiIrKHlpLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh5aS5wYXNzd29yZCkpOiIiKSkpLER0LmlzRm9ybURhdGEoX24pKWlm''@;'; put 'put ''KHp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8enQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXVyLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZighMSE9PShGcj11ci5nZXRDb250ZW50VHlwZSgpKSl7Y29uc3RbdGEsLi4ub2FdPUZyP0ZyLnNwbGl0KCI7IikubWFwKFZh''@;'; put 'put ''PT5WYS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTt1ci5zZXRDb250ZW50VHlwZShbdGF8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5vYV0uam9pbigiOyAiKSl9aWYoenQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobW4mJkR0LmlzRnVuY3Rpb24obW4pJiYobW49bW4oQnQpKSxtbnx8''@;'; put 'put ''ITEhPT1tbiYmTGMoQnQudXJsKSkpe2NvbnN0IHRhPUluJiZ5biYmRDAucmVhZCh5bik7dGEmJnVyLnNldChJbix0YSl9cmV0dXJuIEJ0fSxMdT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiJiZmdW5jdGlvbihNdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9uLG1uKXtjb25zdCBJ''@;'; put 'put ''bj15MChNdCk7bGV0IHluPUluLmRhdGE7Y29uc3QgdXI9cGEuZnJvbShJbi5oZWFkZXJzKS5ub3JtYWxpemUoKTtsZXQgb2EsVmEsJG8sWGwsdG8se3Jlc3BvbnNlVHlwZTp5aSxvblVwbG9hZFByb2dyZXNzOkZyLG9uRG93bmxvYWRQcm9ncmVzczp0YX09SW47ZnVuY3Rpb24gX28oKXtYbCYm''@;'; put 'put ''WGwoKSx0byYmdG8oKSxJbi5jYW5jZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmSW4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixvYSl9bGV0IGppPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5jdGlvbiBQYygpe2lmKCFqaSlyZXR1''@;'; put 'put ''cm47Y29uc3QgQ2E9cGEuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGppJiZqaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7TGEoZnVuY3Rpb24oJDApe19uKCQwKSxfbygpfSxmdW5jdGlvbigkMCl7bW4oJDApLF9vKCl9LHtkYXRhOnlpJiYidGV4dCIhPT15aSYmImpzb24iIT09''@;'; put 'put ''eWk/amkucmVzcG9uc2U6amkucmVzcG9uc2VUZXh0LHN0YXR1czpqaS5zdGF0dXMsc3RhdHVzVGV4dDpqaS5zdGF0dXNUZXh0LGhlYWRlcnM6Q2EsY29uZmlnOk10LHJlcXVlc3Q6aml9KSxqaT1udWxsfWppLm9wZW4oSW4ubWV0aG9kLnRvVXBwZXJDYXNlKCksSW4udXJsLCEwKSxqaS50aW1l''@;'; put 'put ''b3V0PUluLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBqaT9qaS5vbmxvYWRlbmQ9UGM6amkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWppfHw0IT09amkucmVhZHlTdGF0ZXx8MD09PWppLnN0YXR1cyYmKCFqaS5yZXNwb25zZVVSTHx8MCE9PWppLnJlc3BvbnNlVVJMLmluZGV4T2Yo''@;'; put 'put ''ImZpbGU6IikpfHxzZXRUaW1lb3V0KFBjKX0samkub25hYm9ydD1mdW5jdGlvbigpe2ppJiYobW4obmV3IGl0KCJSZXF1ZXN0IGFib3J0ZWQiLGl0LkVDT05OQUJPUlRFRCxNdCxqaSkpLGppPW51bGwpfSxqaS5vbmVycm9yPWZ1bmN0aW9uKCl7bW4obmV3IGl0KCJOZXR3b3JrIEVycm9yIixp''@;'; put 'put ''dC5FUlJfTkVUV09SSyxNdCxqaSkpLGppPW51bGx9LGppLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBUYT1Jbi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrSW4udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtJbi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoVGE9SW4udGlt''@;'; put 'put ''ZW91dEVycm9yTWVzc2FnZSksbW4obmV3IGl0KFRhLChJbi50cmFuc2l0aW9uYWx8fFJuKS5jbGFyaWZ5VGltZW91dEVycm9yP2l0LkVUSU1FRE9VVDppdC5FQ09OTkFCT1JURUQsTXQsamkpKSxqaT1udWxsfSx2b2lkIDA9PT15biYmdXIuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVl''@;'; put 'put ''c3RIZWFkZXIiaW4gamkmJkR0LmZvckVhY2godXIudG9KU09OKCksZnVuY3Rpb24oVGEsWGgpe2ppLnNldFJlcXVlc3RIZWFkZXIoWGgsVGEpfSksRHQuaXNVbmRlZmluZWQoSW4ud2l0aENyZWRlbnRpYWxzKXx8KGppLndpdGhDcmVkZW50aWFscz0hIUluLndpdGhDcmVkZW50aWFscykseWkm''@;'; put 'put ''JiJqc29uIiE9PXlpJiYoamkucmVzcG9uc2VUeXBlPUluLnJlc3BvbnNlVHlwZSksdGEmJihbJG8sdG9dPU5zKHRhLCEwKSxqaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsJG8pKSxGciYmamkudXBsb2FkJiYoW1ZhLFhsXT1OcyhGciksamkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''InByb2dyZXNzIixWYSksamkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLFhsKSksKEluLmNhbmNlbFRva2VufHxJbi5zaWduYWwpJiYob2E9Q2E9PntqaSYmKG1uKCFDYXx8Q2EudHlwZT9uZXcgYmEobnVsbCxNdCxqaSk6Q2EpLGppLmFib3J0KCksamk9bnVsbCl9LEluLmNh''@;'; put 'put ''bmNlbFRva2VuJiZJbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob2EpLEluLnNpZ25hbCYmKEluLnNpZ25hbC5hYm9ydGVkP29hKCk6SW4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixvYSkpKTtjb25zdCB6bD1mdW5jdGlvbiBGYShNdCl7Y29uc3QgQnQ9L14oWy0rXHddezEsMjV9''@;'; put 'put ''KSg6P1wvXC98OikvLmV4ZWMoTXQpO3JldHVybiBCdCYmQnRbMV18fCIifShJbi51cmwpO3psJiYtMT09PXp0LnByb3RvY29scy5pbmRleE9mKHpsKT9tbihuZXcgaXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIremwrIjoiLGl0LkVSUl9CQURfUkVRVUVTVCxNdCkpOmppLnNlbmQoeW58fG51''@;'; put 'put ''bGwpfSl9LG9kPShNdCxCdCk9Pntjb25zdHtsZW5ndGg6X259PU10PU10P010LmZpbHRlcihCb29sZWFuKTpbXTtpZihCdHx8X24pe2xldCBJbixtbj1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IHluPWZ1bmN0aW9uKHRhKXtpZighSW4pe0luPSEwLHlpKCk7Y29uc3Qgb2E9dGEgaW5zdGFu''@;'; put 'put ''Y2VvZiBFcnJvcj90YTp0aGlzLnJlYXNvbjttbi5hYm9ydChvYSBpbnN0YW5jZW9mIGl0P29hOm5ldyBiYShvYSBpbnN0YW5jZW9mIEVycm9yP29hLm1lc3NhZ2U6b2EpKX19O2xldCB1cj1CdCYmc2V0VGltZW91dCgoKT0+e3VyPW51bGwseW4obmV3IGl0KGB0aW1lb3V0ICR7QnR9IG9mIG1z''@;'; put 'put ''IGV4Y2VlZGVkYCxpdC5FVElNRURPVVQpKX0sQnQpO2NvbnN0IHlpPSgpPT57TXQmJih1ciYmY2xlYXJUaW1lb3V0KHVyKSx1cj1udWxsLE10LmZvckVhY2godGE9Pnt0YS51bnN1YnNjcmliZT90YS51bnN1YnNjcmliZSh5bik6dGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHluKX0p''@;'; put 'put ''LE10PW51bGwpfTtNdC5mb3JFYWNoKHRhPT50YS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIseW4pKTtjb25zdHtzaWduYWw6RnJ9PW1uO3JldHVybiBGci51bnN1YnNjcmliZT0oKT0+RHQuYXNhcCh5aSksRnJ9fTtjb25zdCBZaD1mdW5jdGlvbiooTXQsQnQpe2xldCBfbj1NdC5ieXRlTGVu''@;'; put 'put ''Z3RoO2lmKCFCdHx8X248QnQpcmV0dXJuIHZvaWQoeWllbGQgTXQpO2xldCBJbixtbj0wO2Zvcig7bW48X247KUluPW1uK0J0LHlpZWxkIE10LnNsaWNlKG1uLEluKSxtbj1Jbn0sY2Y9ZnVuY3Rpb24oKXt2YXIgTXQ9X3dyYXBBc3luY0dlbmVyYXRvcihmdW5jdGlvbiooQnQsX24pe3ZhciB5''@;'; put 'put ''bixtbj0hMSxJbj0hMTt0cnl7Zm9yKHZhciB5aSx1cj1fYXN5bmNJdGVyYXRvcihDcyhCdCkpO21uPSEoeWk9eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIubmV4dCgpKSkuZG9uZTttbj0hMSl7Y29uc3QgRnI9eWkudmFsdWU7eWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2Fz''@;'; put 'put ''eW5jSXRlcmF0b3IoWWgoRnIsX24pKSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKEZyKXtJbj0hMCx5bj1Gcn1maW5hbGx5e3RyeXttbiYmbnVsbCE9dXIucmV0dXJuJiYoeWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIucmV0dXJuKCkpKX1maW5hbGx5e2lmKEluKXRocm93IHlu''@;'; put 'put ''fX19KTtyZXR1cm4gZnVuY3Rpb24oX24sbW4pe3JldHVybiBNdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLENzPWZ1bmN0aW9uKCl7dmFyIE10PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtpZihCdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pcmV0dXJuIHZvaWQoeWllbGQq''@;'; put 'put ''X2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoQnQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgX249QnQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTptbix2YWx1ZTpJbn09eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoX24ucmVhZCgpKTtp''@;'; put 'put ''ZihtbilicmVhazt5aWVsZCBJbn19ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihfbi5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gTXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxZaT0oTXQsQnQsX24sbW4pPT57Y29uc3QgSW49Y2YoTXQsQnQp''@;'; put 'put ''O2xldCB1cix5bj0wLHlpPUZyPT57dXJ8fCh1cj0hMCxtbiYmbW4oRnIpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDpGcj0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e2NvbnN0e2RvbmU6dGEsdmFsdWU6b2F9PXlpZWxkIEluLm5leHQoKTtpZih0YSlyZXR1''@;'; put 'put ''cm4geWkoKSx2b2lkIEZyLmNsb3NlKCk7aWYoX24pe2xldCAkbz15bis9b2EuYnl0ZUxlbmd0aDtfbigkbyl9RnIuZW5xdWV1ZShuZXcgVWludDhBcnJheShvYSkpfWNhdGNoKHRhKXt0aHJvdyB5aSh0YSksdGF9fSkoKSxjYW5jZWw6RnI9Pih5aShGciksSW4ucmV0dXJuKCkpfSx7aGlnaFdh''@;'; put 'put ''dGVyTWFyazoyfSl9LGJsPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSxRYz1ibCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtLG41PWJsJiYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFRleHRFbmNvZGVyPyhNdD0+QnQ9Pk10LmVuY29kZShCdCkpKG5ldyBUZXh0RW5jb2Rlcik6ZnVuY3Rpb24oKXt2YXIgTXQ9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IFJlc3BvbnNlKEJ0KS5hcnJheUJ1ZmZlcigpKX0p''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbihCdCl7cmV0dXJuIE10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGIwPShNdCwuLi5CdCk9Pnt0cnl7cmV0dXJuISFNdCguLi5CdCl9Y2F0Y2h7cmV0dXJuITF9fSxyNT1RYyYmYjAoKCk9PntsZXQgTXQ9ITE7Y29uc3QgQnQ9bmV3IFJlcXVlc3QoenQub3Jp''@;'; put 'put ''Z2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gTXQ9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gTXQmJiFCdH0pLHVmPVFjJiZiMCgoKT0+RHQuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVz''@;'; put 'put ''cG9uc2UoIiIpLmJvZHkpKSxzZD17c3RyZWFtOnVmJiYoTXQ9Pk10LmJvZHkpfTtibCYmKE10PT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKEJ0PT57IXNkW0J0XSYmKHNkW0J0XT1EdC5pc0Z1bmN0aW9uKE10W0J0XSk/X249Pl9u''@;'; put 'put ''W0J0XSgpOihfbixtbik9Pnt0aHJvdyBuZXcgaXQoYFJlc3BvbnNlIHR5cGUgJyR7QnR9JyBpcyBub3Qgc3VwcG9ydGVkYCxpdC5FUlJfTk9UX1NVUFBPUlQsbW4pfSl9KX0pKG5ldyBSZXNwb25zZSk7Y29uc3QgZGY9ZnVuY3Rpb24oKXt2YXIgTXQ9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rp''@;'; put 'put ''b24qKEJ0KXtyZXR1cm4gbnVsbD09QnQ/MDpEdC5pc0Jsb2IoQnQpP0J0LnNpemU6RHQuaXNTcGVjQ29tcGxpYW50Rm9ybShCdCk/KHlpZWxkIG5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7bWV0aG9kOiJQT1NUIixib2R5OkJ0fSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDpEdC5pc0FycmF5''@;'; put 'put ''QnVmZmVyVmlldyhCdCl8fER0LmlzQXJyYXlCdWZmZXIoQnQpP0J0LmJ5dGVMZW5ndGg6KER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSYmKEJ0Kz0iIiksRHQuaXNTdHJpbmcoQnQpPyh5aWVsZCBuNShCdCkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0pO3JldHVybiBmdW5jdGlvbihfbil7cmV0dXJu''@;'; put 'put ''IE10LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksazE9ZnVuY3Rpb24oKXt2YXIgTXQ9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXtyZXR1cm4gRHQudG9GaW5pdGVOdW1iZXIoQnQuZ2V0Q29udGVudExlbmd0aCgpKT8/ZGYoX24pfSk7cmV0dXJuIGZ1bmN0aW9uKF9uLG1u''@;'; put 'put ''KXtyZXR1cm4gTXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTt2YXIgaGY9YmwmJmZ1bmN0aW9uKCl7dmFyIE10PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7bGV0e3VybDpfbixtZXRob2Q6bW4sZGF0YTpJbixzaWduYWw6eW4sY2FuY2VsVG9rZW46dXIsdGltZW91dDp5aSxv''@;'; put 'put ''bkRvd25sb2FkUHJvZ3Jlc3M6RnIsb25VcGxvYWRQcm9ncmVzczp0YSxyZXNwb25zZVR5cGU6b2EsaGVhZGVyczpWYSx3aXRoQ3JlZGVudGlhbHM6JG89InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6WGx9PXkwKEJ0KTtvYT1vYT8ob2ErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldCBf''@;'; put 'put ''byx0bz1vZChbeW4sdXImJnVyLnRvQWJvcnRTaWduYWwoKV0seWkpO2NvbnN0IGppPXRvJiZ0by51bnN1YnNjcmliZSYmKCgpPT57dG8udW5zdWJzY3JpYmUoKX0pO2xldCBQYzt0cnl7aWYodGEmJnI1JiYiZ2V0IiE9PW1uJiYiaGVhZCIhPT1tbiYmMCE9PShQYz15aWVsZCBrMShWYSxJbikp''@;'; put 'put ''KXtsZXQgJDAsRzA9bmV3IFJlcXVlc3QoX24se21ldGhvZDoiUE9TVCIsYm9keTpJbixkdXBsZXg6ImhhbGYifSk7aWYoRHQuaXNGb3JtRGF0YShJbikmJigkMD1HMC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZWYS5zZXRDb250ZW50VHlwZSgkMCksRzAuYm9keSl7Y29uc3RbTm8s''@;'; put 'put ''cWldPXlsKFBjLE5zKHB1KHRhKSkpO0luPVlpKEcwLmJvZHksNjU1MzYsTm8scWkpfX1EdC5pc1N0cmluZygkbyl8fCgkbz0kbz8iaW5jbHVkZSI6Im9taXQiKTtjb25zdCB6bD0iY3JlZGVudGlhbHMiaW4gUmVxdWVzdC5wcm90b3R5cGU7X289bmV3IFJlcXVlc3QoX24sey4uLlhsLHNpZ25h''@;'; put 'put ''bDp0byxtZXRob2Q6bW4udG9VcHBlckNhc2UoKSxoZWFkZXJzOlZhLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SW4sZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczp6bD8kbzp2b2lkIDB9KTtsZXQgQ2E9eWllbGQgZmV0Y2goX28pO2NvbnN0IFRhPXVmJiYoInN0cmVhbSI9PT1vYXx8InJl''@;'; put 'put ''c3BvbnNlIj09PW9hKTtpZih1ZiYmKEZyfHxUYSYmamkpKXtjb25zdCBHMD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChNcz0+e0cwW01zXT1DYVtNc119KTtjb25zdCAkMD1EdC50b0Zpbml0ZU51bWJlcihDYS5oZWFkZXJzLmdldCgiY29udGVudC1sZW5n''@;'; put 'put ''dGgiKSksW05vLHFpXT1GciYmeWwoJDAsTnMocHUoRnIpLCEwKSl8fFtdO0NhPW5ldyBSZXNwb25zZShZaShDYS5ib2R5LDY1NTM2LE5vLCgpPT57cWkmJnFpKCksamkmJmppKCl9KSxHMCl9b2E9b2F8fCJ0ZXh0IjtsZXQgWGg9eWllbGQgc2RbRHQuZmluZEtleShzZCxvYSl8fCJ0ZXh0Il0o''@;'; put 'put ''Q2EsQnQpO3JldHVybiFUYSYmamkmJmppKCkseWllbGQgbmV3IFByb21pc2UoKEcwLCQwKT0+e0xhKEcwLCQwLHtkYXRhOlhoLGhlYWRlcnM6cGEuZnJvbShDYS5oZWFkZXJzKSxzdGF0dXM6Q2Euc3RhdHVzLHN0YXR1c1RleHQ6Q2Euc3RhdHVzVGV4dCxjb25maWc6QnQscmVxdWVzdDpfb30p''@;'; put 'put ''fSl9Y2F0Y2goemwpe3Rocm93IGppJiZqaSgpLHpsJiYiVHlwZUVycm9yIj09PXpsLm5hbWUmJi9mZXRjaC9pLnRlc3QoemwubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaXQoIk5ldHdvcmsgRXJyb3IiLGl0LkVSUl9ORVRXT1JLLEJ0LF9vKSx7Y2F1c2U6emwuY2F1c2V8fHpsfSk6aXQu''@;'; put 'put ''ZnJvbSh6bCx6bCYmemwuY29kZSxCdCxfbyl9fSk7cmV0dXJuIGZ1bmN0aW9uKEJ0KXtyZXR1cm4gTXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtjb25zdCBlaD17aHR0cDpudWxsLHhocjpMdSxmZXRjaDpoZn07RHQuZm9yRWFjaChlaCwoTXQsQnQpPT57aWYoTXQpe3RyeXtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoTXQsIm5hbWUiLHt2YWx1ZTpCdH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoTXQsImFkYXB0ZXJOYW1lIix7dmFsdWU6QnR9KX19KTtjb25zdCBmZj1NdD0+YC0gJHtNdH1gLEdoPU10PT5EdC5pc0Z1bmN0aW9uKE10KXx8bnVsbD09PU10fHwhMT09PU10''@;'; put 'put ''O3ZhciBPY19nZXRBZGFwdGVyPU10PT57TXQ9RHQuaXNBcnJheShNdCk/TXQ6W010XTtjb25zdHtsZW5ndGg6QnR9PU10O2xldCBfbixtbjtjb25zdCBJbj17fTtmb3IobGV0IHluPTA7eW48QnQ7eW4rKyl7bGV0IHVyO2lmKF9uPU10W3luXSxtbj1fbiwhR2goX24pJiYobW49ZWhbKHVyPVN0''@;'; put 'put ''cmluZyhfbikpLnRvTG93ZXJDYXNlKCldLHZvaWQgMD09PW1uKSl0aHJvdyBuZXcgaXQoYFVua25vd24gYWRhcHRlciAnJHt1cn0nYCk7aWYobW4pYnJlYWs7SW5bdXJ8fCIjIit5bl09bW59aWYoIW1uKXtjb25zdCB5bj1PYmplY3QuZW50cmllcyhJbikubWFwKChbeWksRnJdKT0+YGFkYXB0''@;'; put 'put ''ZXIgJHt5aX0gYCsoITE9PT1Gcj8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKTt0aHJvdyBuZXcgaXQoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIisoQnQ/''@;'; put 'put ''eW4ubGVuZ3RoPjE/InNpbmNlIDpcbiIreW4ubWFwKGZmKS5qb2luKCJcbiIpOiIgIitmZih5blswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIiksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBtbn07ZnVuY3Rpb24gTmEoTXQpe2lmKE10LmNhbmNlbFRva2VuJiZNdC5jYW5jZWxUb2tl''@;'; put 'put ''bi50aHJvd0lmUmVxdWVzdGVkKCksTXQuc2lnbmFsJiZNdC5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYmEobnVsbCxNdCl9ZnVuY3Rpb24gRDMoTXQpe3JldHVybiBOYShNdCksTXQuaGVhZGVycz1wYS5mcm9tKE10LmhlYWRlcnMpLE10LmRhdGE9UW4uY2FsbChNdCxNdC50cmFuc2Zvcm1S''@;'; put 'put ''ZXF1ZXN0KSwtMSE9PVsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihNdC5tZXRob2QpJiZNdC5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxPY19nZXRBZGFwdGVyKE10LmFkYXB0ZXJ8fHVhLmFkYXB0ZXIpKE10KS50''@;'; put 'put ''aGVuKGZ1bmN0aW9uKG1uKXtyZXR1cm4gTmEoTXQpLG1uLmRhdGE9UW4uY2FsbChNdCxNdC50cmFuc2Zvcm1SZXNwb25zZSxtbiksbW4uaGVhZGVycz1wYS5mcm9tKG1uLmhlYWRlcnMpLG1ufSxmdW5jdGlvbihtbil7cmV0dXJuIGxhKG1uKXx8KE5hKE10KSxtbiYmbW4ucmVzcG9uc2UmJiht''@;'; put 'put ''bi5yZXNwb25zZS5kYXRhPVFuLmNhbGwoTXQsTXQudHJhbnNmb3JtUmVzcG9uc2UsbW4ucmVzcG9uc2UpLG1uLnJlc3BvbnNlLmhlYWRlcnM9cGEuZnJvbShtbi5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KG1uKX0pfWNvbnN0IEtoPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIs''@;'; put 'put ''Im51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoTXQsQnQpPT57S2hbTXRdPWZ1bmN0aW9uKG1uKXtyZXR1cm4gdHlwZW9mIG1uPT09TXR8fCJhIisoQnQ8MT8ibiAiOiIgIikrTXR9fSk7Y29uc3QgcWg9e307S2gudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKEJ0''@;'; put 'put ''LF9uLG1uKXtmdW5jdGlvbiBJbih5bix1cil7cmV0dXJuIltBeGlvcyB2MS44LjJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIreW4rIiciK3VyKyhtbj8iLiAiK21uOiIiKX1yZXR1cm4oeW4sdXIseWkpPT57aWYoITE9PT1CdCl0aHJvdyBuZXcgaXQoSW4odXIsIiBoYXMgYmVlbiByZW1vdmVk''@;'; put 'put ''IisoX24/IiBpbiAiK19uOiIiKSksaXQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBfbiYmIXFoW3VyXSYmKHFoW3VyXT0hMCxwLndhcm4oSW4odXIsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK19uKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFC''@;'; put 'put ''dHx8QnQoeW4sdXIseWkpfX0sS2guc3BlbGxpbmc9ZnVuY3Rpb24oQnQpe3JldHVybihfbixtbik9PihwLndhcm4oYCR7bW59IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7QnR9YCksITApfTt2YXIgYW49e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24gQW4oTXQsQnQsX24pe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgTXQpdGhyb3cgbmV3IGl0KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgbW49T2JqZWN0LmtleXMoTXQpO2xldCBJbj1tbi5sZW5ndGg7Zm9yKDtJbi0tID4wOyl7Y29uc3QgeW49bW5bSW5dLHVyPUJ0W3luXTtp''@;'; put 'put ''Zih1cil7Y29uc3QgeWk9TXRbeW5dLEZyPXZvaWQgMD09PXlpfHx1cih5aSx5bixNdCk7aWYoITAhPT1Gcil0aHJvdyBuZXcgaXQoIm9wdGlvbiAiK3luKyIgbXVzdCBiZSAiK0ZyLGl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09X24pdGhyb3cgbmV3IGl0KCJVbmtub3du''@;'; put 'put ''IG9wdGlvbiAiK3luLGl0LkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6S2h9O2NvbnN0IHZpPWFuLnZhbGlkYXRvcnM7Y2xhc3MgQXJ7Y29uc3RydWN0b3IoQnQpe3RoaXMuZGVmYXVsdHM9QnQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEF0LHJlc3BvbnNlOm5ldyBBdH19''@;'; put 'put ''cmVxdWVzdChCdCxfbil7dmFyIG1uPXRoaXM7cmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgbW4uX3JlcXVlc3QoQnQsX24pfWNhdGNoKEluKXtpZihJbiBpbnN0YW5jZW9mIEVycm9yKXtsZXQgeW49e307RXJyb3IuY2FwdHVyZVN0YWNrVHJh''@;'; put 'put ''Y2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoeW4pOnluPW5ldyBFcnJvcjtjb25zdCB1cj15bi5zdGFjaz95bi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtJbi5zdGFjaz91ciYmIVN0cmluZyhJbi5zdGFjaykuZW5kc1dpdGgodXIucmVwbGFjZSgvXi4rXG4uK1xuLywiIikp''@;'; put 'put ''JiYoSW4uc3RhY2srPSJcbiIrdXIpOkluLnN0YWNrPXVyfWNhdGNoe319dGhyb3cgSW59fSkoKX1fcmVxdWVzdChCdCxfbil7InN0cmluZyI9PXR5cGVvZiBCdD8oX249X258fHt9KS51cmw9QnQ6X249QnR8fHt9LF9uPUpyKHRoaXMuZGVmYXVsdHMsX24pO2NvbnN0e3RyYW5zaXRpb25hbDpt''@;'; put 'put ''bixwYXJhbXNTZXJpYWxpemVyOkluLGhlYWRlcnM6eW59PV9uO3ZvaWQgMCE9PW1uJiZhbi5hc3NlcnRPcHRpb25zKG1uLHtzaWxlbnRKU09OUGFyc2luZzp2aS50cmFuc2l0aW9uYWwodmkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pLGNs''@;'; put 'put ''YXJpZnlUaW1lb3V0RXJyb3I6dmkudHJhbnNpdGlvbmFsKHZpLmJvb2xlYW4pfSwhMSksbnVsbCE9SW4mJihEdC5pc0Z1bmN0aW9uKEluKT9fbi5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6SW59OmFuLmFzc2VydE9wdGlvbnMoSW4se2VuY29kZTp2aS5mdW5jdGlvbixzZXJpYWxpemU6''@;'; put 'put ''dmkuZnVuY3Rpb259LCEwKSksdm9pZCAwIT09X24uYWxsb3dBYnNvbHV0ZVVybHN8fChfbi5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzKSxhbi5hc3NlcnRPcHRpb25zKF9u''@;'; put 'put ''LHtiYXNlVXJsOnZpLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjp2aS5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksX24ubWV0aG9kPShfbi5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgdXI9eW4mJkR0Lm1lcmdl''@;'; put 'put ''KHluLmNvbW1vbix5bltfbi5tZXRob2RdKTt5biYmRHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSx0bz0+e2RlbGV0ZSB5blt0b119KSxfbi5oZWFkZXJzPXBhLmNvbmNhdCh1cix5bik7Y29uc3QgeWk9W107bGV0IEZyPSEw''@;'; put 'put ''O3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihfbyl7ImZ1bmN0aW9uIj09dHlwZW9mIF9vLnJ1bldoZW4mJiExPT09X28ucnVuV2hlbihfbil8fChGcj1GciYmX28uc3luY2hyb25vdXMseWkudW5zaGlmdChfby5mdWxmaWxsZWQsX28ucmVqZWN0ZWQpKX0pO2Nv''@;'; put 'put ''bnN0IHRhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oX28pe3RhLnB1c2goX28uZnVsZmlsbGVkLF9vLnJlamVjdGVkKX0pO2xldCBvYSwkbyxWYT0wO2lmKCFGcil7Y29uc3QgdG89W0QzLmJpbmQodGhpcyksdm9pZCAwXTtmb3IodG8udW5zaGlmdC5h''@;'; put 'put ''cHBseSh0byx5aSksdG8ucHVzaC5hcHBseSh0byx0YSksJG89dG8ubGVuZ3RoLG9hPVByb21pc2UucmVzb2x2ZShfbik7VmE8JG87KW9hPW9hLnRoZW4odG9bVmErK10sdG9bVmErK10pO3JldHVybiBvYX0kbz15aS5sZW5ndGg7bGV0IFhsPV9uO2ZvcihWYT0wO1ZhPCRvOyl7Y29uc3QgdG89''@;'; put 'put ''eWlbVmErK10sX289eWlbVmErK107dHJ5e1hsPXRvKFhsKX1jYXRjaChqaSl7X28uY2FsbCh0aGlzLGppKTticmVha319dHJ5e29hPUQzLmNhbGwodGhpcyxYbCl9Y2F0Y2godG8pe3JldHVybiBQcm9taXNlLnJlamVjdCh0byl9Zm9yKFZhPTAsJG89dGEubGVuZ3RoO1ZhPCRvOylvYT1vYS50''@;'; put 'put ''aGVuKHRhW1ZhKytdLHRhW1ZhKytdKTtyZXR1cm4gb2F9Z2V0VXJpKEJ0KXtyZXR1cm4gT3IodWkoKEJ0PUpyKHRoaXMuZGVmYXVsdHMsQnQpKS5iYXNlVVJMLEJ0LnVybCxCdC5hbGxvd0Fic29sdXRlVXJscyksQnQucGFyYW1zLEJ0LnBhcmFtc1NlcmlhbGl6ZXIpfX1EdC5mb3JFYWNoKFsi''@;'; put 'put ''ZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihCdCl7QXIucHJvdG90eXBlW0J0XT1mdW5jdGlvbihfbixtbil7cmV0dXJuIHRoaXMucmVxdWVzdChKcihtbnx8e30se21ldGhvZDpCdCx1cmw6X24sZGF0YToobW58fHt9KS5kYXRhfSkpfX0pLER0LmZvckVhY2goWyJw''@;'; put 'put ''b3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihCdCl7ZnVuY3Rpb24gX24obW4pe3JldHVybiBmdW5jdGlvbih5bix1cix5aSl7cmV0dXJuIHRoaXMucmVxdWVzdChKcih5aXx8e30se21ldGhvZDpCdCxoZWFkZXJzOm1uP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9''@;'; put 'put ''Ont9LHVybDp5bixkYXRhOnVyfSkpfX1Bci5wcm90b3R5cGVbQnRdPV9uKCksQXIucHJvdG90eXBlW0J0KyJGb3JtIl09X24oITApfSk7dmFyIFBvPUFyO2NsYXNzIGVve2NvbnN0cnVjdG9yKEJ0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQnQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0''@;'; put 'put ''b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBfbjt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oeW4pe19uPXlufSk7Y29uc3QgbW49dGhpczt0aGlzLnByb21pc2UudGhlbihJbj0+e2lmKCFtbi5fbGlzdGVuZXJzKXJldHVybjtsZXQgeW49bW4uX2xpc3RlbmVycy5sZW5n''@;'; put 'put ''dGg7Zm9yKDt5bi0tID4wOyltbi5fbGlzdGVuZXJzW3luXShJbik7bW4uX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49SW49PntsZXQgeW47Y29uc3QgdXI9bmV3IFByb21pc2UoeWk9Pnttbi5zdWJzY3JpYmUoeWkpLHluPXlpfSkudGhlbihJbik7cmV0dXJuIHVyLmNhbmNl''@;'; put 'put ''bD1mdW5jdGlvbigpe21uLnVuc3Vic2NyaWJlKHluKX0sdXJ9LEJ0KGZ1bmN0aW9uKHluLHVyLHlpKXttbi5yZWFzb258fChtbi5yZWFzb249bmV3IGJhKHluLHVyLHlpKSxfbihtbi5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNv''@;'; put 'put ''bn1zdWJzY3JpYmUoQnQpe3RoaXMucmVhc29uP0J0KHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goQnQpOnRoaXMuX2xpc3RlbmVycz1bQnRdfXVuc3Vic2NyaWJlKEJ0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtjb25zdCBfbj10aGlzLl9s''@;'; put 'put ''aXN0ZW5lcnMuaW5kZXhPZihCdCk7LTEhPT1fbiYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShfbiwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QgQnQ9bmV3IEFib3J0Q29udHJvbGxlcixfbj1tbj0+e0J0LmFib3J0KG1uKX07cmV0dXJuIHRoaXMuc3Vic2NyaWJlKF9uKSxCdC5zaWduYWwudW5z''@;'; put 'put ''dWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoX24pLEJ0LnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IEJ0O3JldHVybnt0b2tlbjpuZXcgZW8oZnVuY3Rpb24oSW4pe0J0PUlufSksY2FuY2VsOkJ0fX19dmFyIG9sPWVvO2NvbnN0IFNzPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJv''@;'; put 'put ''dG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1''@;'; put 'put ''czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBl''@;'; put 'put ''cm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk''@;'; put 'put ''OjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFi''@;'; put 'put ''bGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRp''@;'; put 'put ''b25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVu''@;'; put 'put ''YXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9u''@;'; put 'put ''UmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhTcykuZm9yRWFjaCgoW010LEJ0XSk9PntTc1tCdF09TXR9KTt2YXIgamw9U3M7Y29uc3Qga289ZnVuY3Rpb24gSG8oTXQpe2NvbnN0IEJ0PW5ldyBQbyhNdCksX249TihQby5wcm90b3R5cGUucmVxdWVzdCxCdCk7cmV0dXJuIER0LmV4dGVu''@;'; put 'put ''ZChfbixQby5wcm90b3R5cGUsQnQse2FsbE93bktleXM6ITB9KSxEdC5leHRlbmQoX24sQnQsbnVsbCx7YWxsT3duS2V5czohMH0pLF9uLmNyZWF0ZT1mdW5jdGlvbihJbil7cmV0dXJuIEhvKEpyKE10LEluKSl9LF9ufSh1YSk7a28uQXhpb3M9UG8sa28uQ2FuY2VsZWRFcnJvcj1iYSxrby5D''@;'; put 'put ''YW5jZWxUb2tlbj1vbCxrby5pc0NhbmNlbD1sYSxrby5WRVJTSU9OPSIxLjguMiIsa28udG9Gb3JtRGF0YT1RdCxrby5BeGlvc0Vycm9yPWl0LGtvLkNhbmNlbD1rby5DYW5jZWxlZEVycm9yLGtvLmFsbD1mdW5jdGlvbihCdCl7cmV0dXJuIFByb21pc2UuYWxsKEJ0KX0sa28uc3ByZWFkPWZ1''@;'; put 'put ''bmN0aW9uIHpvKE10KXtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBNdC5hcHBseShudWxsLF9uKX19LGtvLmlzQXhpb3NFcnJvcj1mdW5jdGlvbiBWcyhNdCl7cmV0dXJuIER0LmlzT2JqZWN0KE10KSYmITA9PT1NdC5pc0F4aW9zRXJyb3J9LGtvLm1lcmdlQ29uZmlnPUpyLGtvLkF4aW9z''@;'; put 'put ''SGVhZGVycz1wYSxrby5mb3JtVG9KU09OPU10PT5JaShEdC5pc0hUTUxGb3JtKE10KT9uZXcgRm9ybURhdGEoTXQpOk10KSxrby5nZXRBZGFwdGVyPU9jX2dldEFkYXB0ZXIsa28uSHR0cFN0YXR1c0NvZGU9amwsa28uZGVmYXVsdD1rbyxjZS5leHBvcnRzPWtvfSw4NTY2OihjZSxKKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgRCxfO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEose19fZXNNb2R1bGU6e3ZhbHVlOiEwfSxbU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6Ik1vZHVsZSJ9fSk7Y29uc3Qgdz1mdW5jdGlvbiBiKFope3JldHVybiBaJiZaLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChaLCJkZWZhdWx0Iik/Wi5kZWZhdWx0Olp9KGZ1bmN0aW9uIHAoKXtpZihfKXJldHVybiBEO189MTtjb25zdCBaPTIxNDc0ODM2NDcscT0zNixUZT0vXnhuLS0vLFNlPS9bXlwwLVx4N0ZdLyx6ZT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2cs''@;'; put 'put ''ej17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0seT1NYXRoLmZs''@;'; put 'put ''b29yLHg9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBDKHdlKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcih6W3dlXSl9ZnVuY3Rpb24gVih3ZSxVZSl7Y29uc3QgUWU9d2Uuc3BsaXQoIkAiKTtsZXQgb3Q9IiI7UWUubGVuZ3RoPjEmJihvdD1RZVswXSsiQCIsd2U9UWVbMV0pO2NvbnN0IHZl''@;'; put 'put ''PWZ1bmN0aW9uIFQod2UsVWUpe2NvbnN0IFFlPVtdO2xldCBvdD13ZS5sZW5ndGg7Zm9yKDtvdC0tOylRZVtvdF09VWUod2Vbb3RdKTtyZXR1cm4gUWV9KCh3ZT13ZS5yZXBsYWNlKHplLCIuIikpLnNwbGl0KCIuIiksVWUpLmpvaW4oIi4iKTtyZXR1cm4gb3QrdmV9ZnVuY3Rpb24gVSh3ZSl7''@;'; put 'put ''Y29uc3QgVWU9W107bGV0IFFlPTA7Y29uc3Qgb3Q9d2UubGVuZ3RoO2Zvcig7UWU8b3Q7KXtjb25zdCBNZT13ZS5jaGFyQ29kZUF0KFFlKyspO2lmKE1lPj01NTI5NiYmTWU8PTU2MzE5JiZRZTxvdCl7Y29uc3QgdmU9d2UuY2hhckNvZGVBdChRZSsrKTs1NjMyMD09KDY0NTEyJnZlKT9VZS5w''@;'; put 'put ''dXNoKCgoMTAyMyZNZSk8PDEwKSsoMTAyMyZ2ZSkrNjU1MzYpOihVZS5wdXNoKE1lKSxRZS0tKX1lbHNlIFVlLnB1c2goTWUpfXJldHVybiBVZX1jb25zdCBtPWZ1bmN0aW9uKHdlKXtyZXR1cm4gd2U+PTQ4JiZ3ZTw1OD93ZS00OCsyNjp3ZT49NjUmJndlPDkxP3dlLTY1OndlPj05NyYmd2U8''@;'; put 'put ''MTIzP3dlLTk3OnF9LEE9ZnVuY3Rpb24od2UsVWUpe3JldHVybiB3ZSsyMis3NSood2U8MjYpLSgoMCE9VWUpPDw1KX0sYWU9ZnVuY3Rpb24od2UsVWUsUWUpe2xldCBvdD0wO2Zvcih3ZT1RZT95KHdlLzcwMCk6d2U+PjEsd2UrPXkod2UvVWUpO3dlPjQ1NTtvdCs9cSl3ZT15KHdlLzM1KTty''@;'; put 'put ''ZXR1cm4geShvdCszNip3ZS8od2UrMzgpKX0sbmU9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLFFlPXdlLmxlbmd0aDtsZXQgb3Q9MCxNZT0xMjgsdmU9NzIsWGU9d2UubGFzdEluZGV4T2YoIi0iKTtYZTwwJiYoWGU9MCk7Zm9yKGxldCBCZT0wO0JlPFhlOysrQmUpd2UuY2hhckNvZGVBdChC''@;'; put 'put ''ZSk+PTEyOCYmQygibm90LWJhc2ljIiksVWUucHVzaCh3ZS5jaGFyQ29kZUF0KEJlKSk7Zm9yKGxldCBCZT1YZT4wP1hlKzE6MDtCZTxRZTspe2NvbnN0IEFlPW90O2ZvcihsZXQgUmU9MSxJZT1xOztJZSs9cSl7QmU+PVFlJiZDKCJpbnZhbGlkLWlucHV0Iik7Y29uc3QgSGU9bSh3ZS5jaGFy''@;'; put 'put ''Q29kZUF0KEJlKyspKTtIZT49cSYmQygiaW52YWxpZC1pbnB1dCIpLEhlPnkoKFotb3QpL1JlKSYmQygib3ZlcmZsb3ciKSxvdCs9SGUqUmU7Y29uc3QgRGU9SWU8PXZlPzE6SWU+PXZlKzI2PzI2OkllLXZlO2lmKEhlPERlKWJyZWFrO2NvbnN0IGtlPXEtRGU7UmU+eShaL2tlKSYmQygib3Zl''@;'; put 'put ''cmZsb3ciKSxSZSo9a2V9Y29uc3QgRmU9VWUubGVuZ3RoKzE7dmU9YWUob3QtQWUsRmUsMD09QWUpLHkob3QvRmUpPlotTWUmJkMoIm92ZXJmbG93IiksTWUrPXkob3QvRmUpLG90JT1GZSxVZS5zcGxpY2Uob3QrKywwLE1lKX1yZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uVWUpfSxs''@;'; put 'put ''ZT1mdW5jdGlvbih3ZSl7Y29uc3QgVWU9W10sUWU9KHdlPVUod2UpKS5sZW5ndGg7bGV0IG90PTEyOCxNZT0wLHZlPTcyO2Zvcihjb25zdCBBZSBvZiB3ZSlBZTwxMjgmJlVlLnB1c2goeChBZSkpO2NvbnN0IFhlPVVlLmxlbmd0aDtsZXQgQmU9WGU7Zm9yKFhlJiZVZS5wdXNoKCItIik7QmU8''@;'; put 'put ''UWU7KXtsZXQgQWU9Wjtmb3IoY29uc3QgUmUgb2Ygd2UpUmU+PW90JiZSZTxBZSYmKEFlPVJlKTtjb25zdCBGZT1CZSsxO0FlLW90PnkoKFotTWUpL0ZlKSYmQygib3ZlcmZsb3ciKSxNZSs9KEFlLW90KSpGZSxvdD1BZTtmb3IoY29uc3QgUmUgb2Ygd2UpaWYoUmU8b3QmJisrTWU+WiYmQygi''@;'; put 'put ''b3ZlcmZsb3ciKSxSZT09PW90KXtsZXQgSWU9TWU7Zm9yKGxldCBIZT1xOztIZSs9cSl7Y29uc3QgRGU9SGU8PXZlPzE6SGU+PXZlKzI2PzI2OkhlLXZlO2lmKEllPERlKWJyZWFrO2NvbnN0IGtlPUllLURlLF90PXEtRGU7VWUucHVzaCh4KEEoRGUra2UlX3QsMCkpKSxJZT15KGtlL190KX1V''@;'; put 'put ''ZS5wdXNoKHgoQShJZSwwKSkpLHZlPWFlKE1lLEZlLEJlPT09WGUpLE1lPTAsKytCZX0rK01lLCsrb3R9cmV0dXJuIFVlLmpvaW4oIiIpfTtyZXR1cm4gRD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTpVLGVuY29kZTp3ZT0+U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ud2UpfSxkZWNv''@;'; put 'put ''ZGU6bmUsZW5jb2RlOmxlLHRvQVNDSUk6ZnVuY3Rpb24od2Upe3JldHVybiBWKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gU2UudGVzdChVZSk/InhuLS0iK2xlKFVlKTpVZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24od2Upe3JldHVybiBWKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gVGUudGVzdChV''@;'; put 'put ''ZSk/bmUoVWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VWV9KX19fSgpKSxIPVsiYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3YuYWMiLCJtaWwuYWMiLCJuZXQuYWMiLCJvcmcuYWMiLCJhZCIsImFlIiwiYWMuYWUiLCJjby5hZSIsImdvdi5hZSIsIm1pbC5hZSIsIm5ldC5hZSIsIm9yZy5h''@;'; put 'put ''ZSIsInNjaC5hZSIsImFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJvZHJvbWUuYWVybyIsImFnZW50cy5h''@;'; put 'put ''ZXJvIiwiYWlyLXN1cnZlaWxsYW5jZS5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYWlyY3JhZnQuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFsbG9vbmluZy5hZXJvIiwiYnJva2Vy''@;'; put 'put ''LmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJlbmNlLmFlcm8iLCJjb25zdWx0YW50''@;'; put 'put ''LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5naW5lZXIuYWVybyIsImVudGVydGFp''@;'; put 'put ''bm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnJlaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVudC5hZXJvIiwiZ3JvdW5kaGFuZGxp''@;'; put 'put ''bmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFnYXppbmUuYWVybyIsIm1haW50ZW5h''@;'; put 'put ''bmNlLmFlcm8iLCJtYXJrZXRwbGFjZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIsIm1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8iLCJwYXNzZW5nZXItYXNzb2NpYXRpb24uYWVybyIsInBp''@;'; put 'put ''bG90LmFlcm8iLCJwcmVzcy5hZXJvIiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwicmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8iLCJzY2llbnRpc3QuYWVybyIsInNlcnZpY2VzLmFlcm8i''@;'; put 'put ''LCJzaG93LmFlcm8iLCJza3lkaXZpbmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8iLCJ0YXhpLmFlcm8iLCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAuYWVybyIsIndvcmtzLmFlcm8iLCJh''@;'; put 'put ''ZiIsImNvbS5hZiIsImVkdS5hZiIsImdvdi5hZiIsIm5ldC5hZiIsIm9yZy5hZiIsImFnIiwiY28uYWciLCJjb20uYWciLCJuZXQuYWciLCJub20uYWciLCJvcmcuYWciLCJhaSIsImNvbS5haSIsIm5ldC5haSIsIm9mZi5haSIsIm9yZy5haSIsImFsIiwiY29tLmFsIiwiZWR1LmFsIiwiZ292''@;'; put 'put ''LmFsIiwibWlsLmFsIiwibmV0LmFsIiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQuYW0iLCJvcmcuYW0iLCJhbyIsImNvLmFvIiwiZWQuYW8iLCJlZHUuYW8iLCJnb3YuYW8iLCJndi5hbyIsIml0LmFvIiwib2cuYW8iLCJvcmcuYW8iLCJwYi5hbyIs''@;'; put 'put ''ImFxIiwiYXIiLCJiZXQuYXIiLCJjb20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFyIiwiYXJwYSIsImUxNjQuYXJwYSIs''@;'; put 'put ''ImhvbWUuYXJwYSIsImluLWFkZHIuYXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJzdGguYWMuYXQiLCJjby5hdCIsImd2LmF0Iiwib3IuYXQiLCJhdSIsImFzbi5hdSIsImNvbS5hdSIs''@;'; put 'put ''ImVkdS5hdSIsImdvdi5hdSIsImlkLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIsImNhdGhvbGljLmVkdS5hdSIsIm5z''@;'; put 'put ''dy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3YuYXUiLCJzY2hvb2xzLm5zdy5lZHUu''@;'; put 'put ''YXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJiaXouYXoiLCJjb20uYXoiLCJlZHUuYXoiLCJnb3YuYXoiLCJpbmZvLmF6IiwiaW50LmF6IiwibWlsLmF6IiwibmFtZS5heiIsIm5ldC5heiIsIm9yZy5heiIsInBwLmF6IiwicHJvLmF6IiwiYmEiLCJjb20uYmEiLCJlZHUuYmEiLCJnb3Yu''@;'; put 'put ''YmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5iZSIsImJmIiwiZ292LmJmIiwiYmci''@;'; put 'put ''LCIwLmJnIiwiMS5iZyIsIjIuYmciLCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYS5iZyIsImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsuYmciLCJsLmJnIiwibS5iZyIsIm4u''@;'; put 'put ''YmciLCJvLmJnIiwicC5iZyIsInEuYmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5iZyIsInouYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsImdvdi5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImJpIiwiY28uYmkiLCJjb20uYmkiLCJlZHUu''@;'; put 'put ''YmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYWZyaWNhLmJqIiwiYWdyby5iaiIsImFyY2hpdGVjdGVzLmJqIiwiYXNzdXIuYmoiLCJhdm9jYXRzLmJqIiwiY28uYmoiLCJjb20uYmoiLCJlY28uYmoiLCJlY29uby5iaiIsImVkdS5iaiIsImluZm8uYmoiLCJsb2lzaXJzLmJqIiwi''@;'; put 'put ''bW9uZXkuYmoiLCJuZXQuYmoiLCJvcmcuYmoiLCJvdGUuYmoiLCJyZXN0YXVyYW50LmJqIiwicmVzdG8uYmoiLCJ0b3VyaXNtLmJqIiwidW5pdi5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0LmJtIiwib3JnLmJtIiwiYm4iLCJjb20uYm4iLCJlZHUuYm4iLCJnb3Yu''@;'; put 'put ''Ym4iLCJuZXQuYm4iLCJvcmcuYm4iLCJibyIsImNvbS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm1pbC5ibyIsIm5ldC5ibyIsIm9yZy5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJhZ3JvLmJvIiwiYXJ0ZS5ibyIsImJsb2cuYm8iLCJib2xpdmlhLmJvIiwi''@;'; put 'put ''Y2llbmNpYS5ibyIsImNvb3BlcmF0aXZhLmJvIiwiZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlhLmJvIiwiaW5mby5ibyIsIm1lZGljaW5hLmJvIiwibW92aW1pZW50by5i''@;'; put 'put ''byIsIm11c2ljYS5ibyIsIm5hdHVyYWwuYm8iLCJub21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicHVlYmxvLmJvIiwicmV2aXN0YS5ibyIsInNhbHVkLmJvIiwidGVjbm9sb2dpYS5i''@;'; put 'put ''byIsInRrc2F0LmJvIiwidHJhbnNwb3J0ZS5ibyIsIndpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJhcGFyZWNpZGEuYnIiLCJhcHAuYnIiLCJhcnEuYnIiLCJhcnQuYnIiLCJh''@;'; put 'put ''dG8uYnIiLCJiLmJyIiwiYmFydWVyaS5iciIsImJlbGVtLmJyIiwiYmV0LmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5iciIsImNhbXBpbmFzLmJyIiwiY2F4aWFzLmJyIiwiY2lt''@;'; put 'put ''LmJyIiwiY25nLmJyIiwiY250LmJyIiwiY29tLmJyIiwiY29udGFnZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYuYnIiLCJlY24uYnIiLCJlY28uYnIiLCJlZHUuYnIiLCJl''@;'; put 'put ''bXAuYnIiLCJlbmYuYnIiLCJlbmcuYnIiLCJlc3AuYnIiLCJldGMuYnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIiLCJmb3ouYnIiLCJmc3QuYnIiLCJnMTIuYnIiLCJnZW8u''@;'; put 'put ''YnIiLCJnZ2YuYnIiLCJnb2lhbmlhLmJyIiwiZ292LmJyIiwiYWMuZ292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwiZ28uZ292LmJyIiwibWEuZ292LmJyIiwibWcuZ292LmJy''@;'; put 'put ''IiwibXMuZ292LmJyIiwibXQuZ292LmJyIiwicGEuZ292LmJyIiwicGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJyIiwicnMuZ292LmJyIiwic2MuZ292LmJyIiwic2UuZ292''@;'; put 'put ''LmJyIiwic3AuZ292LmJyIiwidG8uZ292LmJyIiwiZ3J1LmJyIiwiaW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcuYnIiLCJsZWlsYW8uYnIiLCJsZWwuYnIiLCJsb2cuYnIi''@;'; put 'put ''LCJsb25kcmluYS5iciIsIm1hY2FwYS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIsIm1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0ZXJvaS5iciIsIioubm9tLmJyIiwi''@;'; put 'put ''bm90LmJyIiwibnRyLmJyIiwib2RvLmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2NvLmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJyZWMuYnIiLCJyZWNpZmUuYnIiLCJy''@;'; put 'put ''ZXAuYnIiLCJyaWJlaXJhby5iciIsInJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3ByZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5iciIsInNlZy5iciIsInNqYy5iciIs''@;'; put 'put ''InNsZy5iciIsInNsei5iciIsInNvcm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIsInRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXguYnIiLCJ2bG9nLmJyIiwid2lraS5i''@;'; put 'put ''ciIsInpsZy5iciIsImJzIiwiY29tLmJzIiwiZWR1LmJzIiwiZ292LmJzIiwibmV0LmJzIiwib3JnLmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIsImdvdi5ieSIsIm1pbC5ieSIsImNv''@;'; put 'put ''bS5ieSIsIm9mLmJ5IiwiYnoiLCJjby5ieiIsImNvbS5ieiIsImVkdS5ieiIsImdvdi5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51LmNhIiwib24uY2EiLCJwZS5jYSIs''@;'; put 'put ''InFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwiYWMuY2kiLCJhXHhlOXJvcG9ydC5jaSIsImFzc28uY2kiLCJjby5jaSIsImNvbS5jaSIsImVkLmNpIiwiZWR1LmNpIiwiZ28uY2kiLCJnb3V2LmNpIiwi''@;'; put 'put ''aW50LmNpIiwibmV0LmNpIiwib3IuY2kiLCJvcmcuY2kiLCIqLmNrIiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwiY24iLCJhYy5jbiIsImNvbS5jbiIsImVkdS5jbiIsImdv''@;'; put 'put ''di5jbiIsIm1pbC5jbiIsIm5ldC5jbiIsIm9yZy5jbiIsIlx1NTE2Y1x1NTNmOC5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5jbiIsImd4LmNuIiwiZ3ouY24iLCJoYS5jbiIsImhiLmNu''@;'; put 'put ''IiwiaGUuY24iLCJoaS5jbiIsImhrLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibW8uY24iLCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNuIiwidGouY24iLCJ0dy5jbiIsInhq''@;'; put 'put ''LmNuIiwieHouY24iLCJ5bi5jbiIsInpqLmNuIiwiY28iLCJjb20uY28iLCJlZHUuY28iLCJnb3YuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5jciIsImdvLmNyIiwib3IuY3IiLCJz''@;'; put 'put ''YS5jciIsImN1IiwiY29tLmN1IiwiZWR1LmN1IiwiZ29iLmN1IiwiaW5mLmN1IiwibmF0LmN1IiwibmV0LmN1Iiwib3JnLmN1IiwiY3YiLCJjb20uY3YiLCJlZHUuY3YiLCJpZC5jdiIsImludC5jdiIsIm5ldC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJwdWJsLmN2IiwiY3ciLCJjb20uY3ci''@;'; put 'put ''LCJlZHUuY3ciLCJuZXQuY3ciLCJvcmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJwcm8uY3kiLCJ0bS5jeSIsImN6Iiwi''@;'; put 'put ''ZGUiLCJkaiIsImRrIiwiZG0iLCJjby5kbSIsImNvbS5kbSIsImVkdS5kbSIsImdvdi5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3JnLmRvIiwic2xkLmRvIiwid2ViLmRv''@;'; put 'put ''IiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6IiwibmV0LmR6Iiwib3JnLmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImVkdS5lYyIsImZpbi5lYyIsImdvYi5lYyIsImdvdi5lYyIsImluZm8uZWMiLCJrMTIuZWMi''@;'; put 'put ''LCJtZWQuZWMiLCJtaWwuZWMiLCJuZXQuZWMiLCJvcmcuZWMiLCJwcm8uZWMiLCJlZHUiLCJlZSIsImFpcC5lZSIsImNvbS5lZSIsImVkdS5lZSIsImZpZS5lZSIsImdvdi5lZSIsImxpYi5lZSIsIm1lZC5lZSIsIm9yZy5lZSIsInByaS5lZSIsInJpaWsuZWUiLCJlZyIsImFjLmVnIiwiY29t''@;'; put 'put ''LmVnIiwiZWR1LmVnIiwiZXVuLmVnIiwiZ292LmVnIiwiaW5mby5lZyIsIm1lLmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIsIm9yZy5lZyIsInNjaS5lZyIsInNwb3J0LmVnIiwidHYuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJlZHUuZXMiLCJnb2IuZXMiLCJub20uZXMiLCJv''@;'; put 'put ''cmcuZXMiLCJldCIsImJpei5ldCIsImNvbS5ldCIsImVkdS5ldCIsImdvdi5ldCIsImluZm8uZXQiLCJuYW1lLmV0IiwibmV0LmV0Iiwib3JnLmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5maiIsImluZm8uZmoiLCJtaWwuZmoi''@;'; put 'put ''LCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImZtIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwidG0uZnIiLCJhdm91ZXMuZnIiLCJj''@;'; put 'put ''Y2kuZnIiLCJncmV0YS5mciIsImh1aXNzaWVyLWp1c3RpY2UuZnIiLCJnYSIsImdiIiwiZ2QiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm5ldC5nZSIsIm9yZy5nZSIsInB2dC5nZSIsInNjaG9vbC5nZSIsImdmIiwiZ2ciLCJjby5nZyIsIm5l''@;'; put 'put ''dC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwibWlsLmdoIiwib3JnLmdoIiwiZ2kiLCJjb20uZ2kiLCJlZHUuZ2kiLCJnb3YuZ2kiLCJsdGQuZ2kiLCJtb2QuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmdsIiwiZWR1LmdsIiwibmV0LmdsIiwi''@;'; put 'put ''b3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwibmV0LmduIiwib3JnLmduIiwiZ292IiwiZ3AiLCJhc3NvLmdwIiwiY29tLmdwIiwiZWR1LmdwIiwibW9iaS5ncCIsIm5ldC5ncCIsIm9yZy5ncCIsImdxIiwiZ3IiLCJjb20uZ3IiLCJlZHUuZ3Ii''@;'; put 'put ''LCJnb3YuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1IiwiaW5mby5ndSIsIm5ldC5ndSIsIm9y''@;'; put 'put ''Zy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU0ZTJhXHU0ZWJhLmhrIiwiXHU1MDBiXHU0''@;'; put 'put ''ZWJhLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiXHU3ZGIyXHU3ZDYxLmhrIiwiXHU3ZGIyXHU3ZWRj''@;'; put 'put ''LmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsImdvYi5obiIsIm1pbC5obiIsIm5ldC5obiIsIm9yZy5obiIsImhyIiwiY29tLmhyIiwiZnJvbS5ociIs''@;'; put 'put ''Iml6LmhyIiwibmFtZS5ociIsImh0IiwiYWR1bHQuaHQiLCJhcnQuaHQiLCJhc3NvLmh0IiwiY29tLmh0IiwiY29vcC5odCIsImVkdS5odCIsImZpcm0uaHQiLCJnb3V2Lmh0IiwiaW5mby5odCIsIm1lZC5odCIsIm5ldC5odCIsIm9yZy5odCIsInBlcnNvLmh0IiwicG9sLmh0IiwicHJvLmh0''@;'; put 'put ''IiwicmVsLmh0Iiwic2hvcC5odCIsImh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJjby5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUiLCJob3RlbC5odSIsImluZm8uaHUi''@;'; put 'put ''LCJpbmdhdGxhbi5odSIsImpvZ2Fzei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJvcmcuaHUiLCJwcml2Lmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInNwb3J0Lmh1Iiwic3VsaS5odSIsInN6ZXguaHUiLCJ0bS5odSIsInRv''@;'; put 'put ''enNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIsImllIiwiZ292LmllIiwiaWwiLCJh''@;'; put 'put ''Yy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsIlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkMFx1MDVlN1x1MDVkM1x1MDVkZVx1MDVkOVx1MDVkNC5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBc''@;'; put 'put ''dTA1ZGMiLCJcdTA1ZDlcdTA1ZTlcdTA1ZDVcdTA1ZDEuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWU2XHUwNWQ0XHUwNWRjLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkZVx1MDVkZVx1MDVlOVx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1''@;'; put 'put ''ZDBcdTA1ZGMiLCJpbSIsImFjLmltIiwiY28uaW0iLCJsdGQuY28uaW0iLCJwbGMuY28uaW0iLCJjb20uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJ0dC5pbSIsInR2LmltIiwiaW4iLCI1Zy5pbiIsIjZnLmluIiwiYWMuaW4iLCJhaS5pbiIsImFtLmluIiwiYmloYXIuaW4iLCJiaXouaW4iLCJi''@;'; put 'put ''dXNpbmVzcy5pbiIsImNhLmluIiwiY24uaW4iLCJjby5pbiIsImNvbS5pbiIsImNvb3AuaW4iLCJjcy5pbiIsImRlbGhpLmluIiwiZHIuaW4iLCJlZHUuaW4iLCJlci5pbiIsImZpcm0uaW4iLCJnZW4uaW4iLCJnb3YuaW4iLCJndWphcmF0LmluIiwiaW5kLmluIiwiaW5mby5pbiIsImludC5p''@;'; put 'put ''biIsImludGVybmV0LmluIiwiaW8uaW4iLCJtZS5pbiIsIm1pbC5pbiIsIm5ldC5pbiIsIm5pYy5pbiIsIm9yZy5pbiIsInBnLmluIiwicG9zdC5pbiIsInByby5pbiIsInJlcy5pbiIsInRyYXZlbC5pbiIsInR2LmluIiwidWsuaW4iLCJ1cC5pbiIsInVzLmluIiwiaW5mbyIsImludCIsImV1''@;'; put 'put ''LmludCIsImlvIiwiY28uaW8iLCJjb20uaW8iLCJlZHUuaW8iLCJnb3YuaW8iLCJtaWwuaW8iLCJuZXQuaW8iLCJub20uaW8iLCJvcmcuaW8iLCJpcSIsImNvbS5pcSIsImVkdS5pcSIsImdvdi5pcSIsIm1pbC5pcSIsIm5ldC5pcSIsIm9yZy5pcSIsImlyIiwiYWMuaXIiLCJjby5pciIsImdv''@;'; put 'put ''di5pciIsImlkLmlyIiwibmV0LmlyIiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiaXMiLCJpdCIsImVkdS5pdCIsImdvdi5pdCIsImFici5pdCIsImFicnV6em8uaXQiLCJh''@;'; put 'put ''b3N0YS12YWxsZXkuaXQiLCJhb3N0YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEuaXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWlsaWFyb21hZ25hLml0IiwiZW1yLml0IiwiZnJpdWxpLXYtZ2l1''@;'; put 'put ''bGlhLml0IiwiZnJpdWxpLXZlLWdpdWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1bGl2LWdpdWxpYS5pdCIsImZyaXVsaXZlLWdpdWxpYS5pdCIs''@;'; put 'put ''ImZyaXVsaXZlZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0IiwibGlndXJpYS5pdCIsImxvbS5pdCIsImxvbWJhcmRpYS5pdCIs''@;'; put 'put ''ImxvbWJhcmR5Lml0IiwibHVjYW5pYS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5pdCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJzYXIuaXQiLCJzYXJkZWduYS5pdCIsInNhcmRpbmlhLml0Iiwi''@;'; put 'put ''c2ljLml0Iiwic2ljaWxpYS5pdCIsInNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRvc2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVu''@;'; put 'put ''dGluLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2UuaXQiLCJ0cmVudGluby1zLXRpcm9s''@;'; put 'put ''Lml0IiwidHJlbnRpbm8tc3Rpcm9sLml0IiwidHJlbnRpbm8tc3VkLXRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluby1zdWVk''@;'; put 'put ''dGlyb2wuaXQiLCJ0cmVudGlub2EtYWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRyZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9zdGlyb2wuaXQiLCJ0cmVudGlub3N1ZC10aXJvbC5pdCIsInRy''@;'; put 'put ''ZW50aW5vc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQtdGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkLXRpcm9sLml0Iiwi''@;'; put 'put ''dHJlbnRpbnN1ZHRpcm9sLml0IiwidHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1kLWFvc3RhLml0IiwidmFsLWRhb3N0YS5pdCIsInZhbGQtYW9z''@;'; put 'put ''dGEuaXQiLCJ2YWxkYW9zdGEuaXQiLCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEuaXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2YWxsZWUtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtYW9zdGUuaXQi''@;'; put 'put ''LCJ2YWxsZWUtZC1hb3N0ZS5pdCIsInZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9zdGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIsInZkYS5pdCIsInZlbi5pdCIsInZlbmV0by5pdCIsImFnLml0''@;'; put 'put ''IiwiYWdyaWdlbnRvLml0IiwiYWwuaXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2UuaXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10cmFuaS1iYXJsZXR0YS5pdCIsImFuZHJpYWJhcmxldHRhdHJh''@;'; put 'put ''bmkuaXQiLCJhbmRyaWF0cmFuaWJhcmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFvc3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIsImFzY29saXBpY2Vuby5pdCIsImFzdGkuaXQiLCJhdC5pdCIs''@;'; put 'put ''ImF2Lml0IiwiYXZlbGxpbm8uaXQiLCJiYS5pdCIsImJhbHNhbi5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJhbHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYXJpLml0IiwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0IiwiYmFybGV0dGF0cmFuaWFuZHJp''@;'; put 'put ''YS5pdCIsImJlbGx1bm8uaXQiLCJiZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQiLCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLml0IiwiYm9semFuby1hbHRvYWRpZ2UuaXQiLCJib3plbi5pdCIsImJvemVu''@;'; put 'put ''LXN1ZHRpcm9sLml0IiwiYm96ZW4tc1x4ZmNkdGlyb2wuaXQiLCJib3plbi1zdWVkdGlyb2wuaXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4uaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQiLCJidWxzYW4tc1x4ZmNkdGlyb2wuaXQi''@;'; put 'put ''LCJidWxzYW4tc3VlZHRpcm9sLml0IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0IiwiY2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIsImNhcmJvbmlhLWlnbGVzaWFzLml0IiwiY2FyYm9uaWFpZ2xl''@;'; put 'put ''c2lhcy5pdCIsImNhcnJhcmEtbWFzc2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRhLml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEtZm9ybFx4ZWMuaXQiLCJjZXNlbmFmb3JsaS5pdCIsImNlc2Vu''@;'; put 'put ''YWZvcmxceGVjLml0IiwiY2guaXQiLCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24uaXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0IiwiY3QuaXQiLCJjdW5lby5pdCIsImN6Lml0IiwiZGVsbC1v''@;'; put 'put ''Z2xpYXN0cmEuaXQiLCJkZWxsb2dsaWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMuaXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2UuaXQiLCJmbS5pdCIsImZvZ2dpYS5pdCIsImZvcmxpLWNlc2Vu''@;'; put 'put ''YS5pdCIsImZvcmxceGVjLWNlc2VuYS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNjZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdvcml6aWEuaXQiLCJnci5pdCIsImdyb3NzZXRvLml0IiwiaWds''@;'; put 'put ''ZXNpYXMtY2FyYm9uaWEuaXQiLCJpZ2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBlcmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEuaXQiLCJsYXRpbmEuaXQiLCJsYy5pdCIsImxlLml0IiwibGVj''@;'; put 'put ''Y2UuaXQiLCJsZWNjby5pdCIsImxpLml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5pdCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQiLCJtYXNzYWNhcnJhcmEuaXQiLCJtYXRlcmEuaXQiLCJtYi5p''@;'; put 'put ''dCIsIm1jLml0IiwibWUuaXQiLCJtZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFuby5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5pdCIsIm1vbnphLml0IiwibW9uemEtYnJpYW56YS5pdCIsIm1v''@;'; put 'put ''bnphLWUtZGVsbGEtYnJpYW56YS5pdCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFuemEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGkuaXQiLCJuby5pdCIsIm5vdmFyYS5pdCIsIm51Lml0IiwibnVv''@;'; put 'put ''cm8uaXQiLCJvZy5pdCIsIm9nbGlhc3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlhdGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBhbGVybW8uaXQiLCJwYXJtYS5pdCIsInBhdmlhLml0IiwicGMu''@;'; put 'put ''aXQiLCJwZC5pdCIsInBlLml0IiwicGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJwZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3RvaWEuaXQiLCJwbi5pdCIsInBvLml0IiwicG9yZGVub25lLml0''@;'; put 'put ''IiwicG90ZW56YS5pdCIsInByLml0IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYuaXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJyaWEuaXQiLCJyZWdnaW8tZW1pbGlhLml0IiwicmVnZ2lvY2Fs''@;'; put 'put ''YWJyaWEuaXQiLCJyZWdnaW9lbWlsaWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQiLCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0Iiwic2FsZXJuby5pdCIsInNhc3NhcmkuaXQiLCJzYXZvbmEu''@;'; put 'put ''aXQiLCJzaS5pdCIsInNpZW5hLml0Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8uaXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN1ZWR0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQiLCJ0YXJhbnRvLml0IiwidGUuaXQiLCJ0ZW1waW8tb2xiaWEu''@;'; put 'put ''aXQiLCJ0ZW1waW9vbGJpYS5pdCIsInRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0YS1hbmRyaWEuaXQiLCJ0cmFuaWFuZHJpYWJhcmxldHRhLml0''@;'; put 'put ''IiwidHJhbmliYXJsZXR0YWFuZHJpYS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJpbm8tcGVzYXJvLml0IiwidXJiaW5vcGVzYXJvLml0IiwidmEu''@;'; put 'put ''aXQiLCJ2YXJlc2UuaXQiLCJ2Yi5pdCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0IiwidmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5pdCIsInZpYm92YWxlbnRpYS5pdCIsInZpY2VuemEuaXQiLCJ2''@;'; put 'put ''aXRlcmJvLml0IiwidnIuaXQiLCJ2cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmplIiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiYWdyaS5qbyIsImFpLmpvIiwiY29tLmpvIiwiZWR1LmpvIiwiZW5nLmpvIiwiZm0uam8iLCJnb3Yuam8iLCJtaWwuam8iLCJuZXQuam8i''@;'; put 'put ''LCJvcmcuam8iLCJwZXIuam8iLCJwaGQuam8iLCJzY2guam8iLCJ0di5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIsImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtpdGEuanAiLCJhb21vcmkuanAiLCJj''@;'; put 'put ''aGliYS5qcCIsImVoaW1lLmpwIiwiZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8uanAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5qcCIsIml3YXRlLmpwIiwia2FnYXdh''@;'; put 'put ''LmpwIiwia2Fnb3NoaW1hLmpwIiwia2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIsIm5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5paWdhdGEuanAiLCJvaXRhLmpwIiwi''@;'; put 'put ''b2theWFtYS5qcCIsIm9raW5hd2EuanAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdpLmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3JpLmpwIiwidG95YW1hLmpwIiwid2Fr''@;'; put 'put ''YXlhbWEuanAiLCJ5YW1hZ2F0YS5qcCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1My5qcCIsIlx1NTM0M1x1ODQ0OS5q''@;'; put 'put ''cCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3MS5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NTkyN1x1NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQwZS5qcCIsIlx1NWJjY1x1NWM3MS5qcCIsIlx1NWM3MVx1NTNl''@;'; put 'put ''My5qcCIsIlx1NWM3MVx1NWY2Mi5qcCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNhOVx1NjI0Yi5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5qcCIsIlx1NWZiM1x1NWNmNi5qcCIsIlx1NjExYlx1NWE5Yi5q''@;'; put 'put ''cCIsIlx1NjExYlx1NzdlNS5qcCIsIlx1NjViMFx1NmY1Zi5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1NzdmM1x1NWRkZC5qcCIsIlx1Nzk1ZVx1NTk0OFx1NWRk''@;'; put 'put ''ZC5qcCIsIlx1Nzk4Zlx1NGU5NS5qcCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlhYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFjZS5qcCIsIlx1OTc1Mlx1NjhlZS5q''@;'; put 'put ''cCIsIlx1OTc1OVx1NWNhMS5qcCIsIlx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3YXNha2kuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIioua2l0YWt5dXNodS5qcCIsIiFjaXR5LmtpdGFr''@;'; put 'put ''eXVzaHUuanAiLCIqLmtvYmUuanAiLCIhY2l0eS5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIhY2l0eS5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIhY2l0eS5zZW5kYWkuanAiLCIqLnlva29oYW1hLmpwIiwiIWNpdHkueW9rb2hh''@;'; put 'put ''bWEuanAiLCJhaXNhaS5haWNoaS5qcCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpwIiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwiaGFuZGEuYWljaGkuanAiLCJoYXp1''@;'; put 'put ''LmFpY2hpLmpwIiwiaGVraW5hbi5haWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWljaGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNoaS5qcCIsImthbmllLmFpY2hpLmpw''@;'; put 'put ''Iiwia2FyaXlhLmFpY2hpLmpwIiwia2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5qcCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJtaXlvc2hpLmFpY2hpLmpwIiwibmlz''@;'; put 'put ''aGlvLmFpY2hpLmpwIiwibmlzc2hpbi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hpa2F0c3UuYWljaGkuanAiLCJzaGlu''@;'; put 'put ''c2hpcm8uYWljaGkuanAiLCJzaGl0YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hpLmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwidG9rb25hbWUuYWljaGkuanAiLCJ0''@;'; put 'put ''b3lvYWtlLmFpY2hpLmpwIiwidG95b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5haWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRhLmpwIiwiZGFpc2VuLmFraXRhLmpw''@;'; put 'put ''IiwiZnVqaXNhdG8uYWtpdGEuanAiLCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAiLCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlrYXdhLmFraXRhLmpwIiwia2FtaWtv''@;'; put 'put ''YW5pLmFraXRhLmpwIiwia2FtaW9rYS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRhLmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAiLCJtaXRhbmUuYWtpdGEuanAiLCJt''@;'; put 'put ''b3JpeW9zaGkuYWtpdGEuanAiLCJuaWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIsInNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5dXJpaG9uam8uYWtpdGEuanAiLCJh''@;'; put 'put ''b21vcmkuYW9tb3JpLmpwIiwiZ29ub2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJvc2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwia3Vyb2lzaGkuYW9tb3JpLmpwIiwi''@;'; put 'put ''bWlzYXdhLmFvbW9yaS5qcCIsIm11dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5hb21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hlLmFvbW9yaS5qcCIsInNoaWNoaW5v''@;'; put 'put ''aGUuYW9tb3JpLmpwIiwic2hpbmdvLmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3JpLmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIsImNob25hbi5jaGliYS5qcCIsImNo''@;'; put 'put ''b3NlaS5jaGliYS5qcCIsImNob3NoaS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJhLmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGliYS5qcCIsImljaGlub21peWEuY2hp''@;'; put 'put ''YmEuanAiLCJpbnphaS5jaGliYS5qcCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRvcmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0c3UuY2hpYmEuanAiLCJraXNhcmF6''@;'; put 'put ''dS5jaGliYS5qcCIsImtvemFraS5jaGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIsIm1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAiLCJtb2JhcmEuY2hpYmEuanAiLCJt''@;'; put 'put ''dXRzdXphd2EuY2hpYmEuanAiLCJuYWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5jaGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWlnYXdhLmNoaWJhLmpwIiwib25qdWt1''@;'; put 'put ''LmNoaWJhLmpwIiwib3Rha2kuY2hpYmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJzaGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2RlZ2F1cmEuY2hpYmEuanAiLCJzb3Nh''@;'; put 'put ''LmNoaWJhLmpwIiwidGFrby5jaGliYS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIsInVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAiLCJ5YWNoaXlvLmNoaWJhLmpwIiwi''@;'; put 'put ''eW9rYWljaGliYS5jaGliYS5qcCIsInlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwiaWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlvLmVoaW1lLmpwIiwia2FtaWppbWEu''@;'; put 'put ''ZWhpbWUuanAiLCJraWhva3UuZWhpbWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpwIiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpwIiwib3p1LmVoaW1lLmpwIiwic2Fp''@;'; put 'put ''am8uZWhpbWUuanAiLCJzZWl5by5laGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1d2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIsImVjaGl6ZW4uZnVrdWkuanAiLCJl''@;'; put 'put ''aWhlaWppLmZ1a3VpLmpwIiwiZnVrdWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5qcCIsIm9uby5mdWt1aS5qcCIsInNh''@;'; put 'put ''YmFlLmZ1a3VpLmpwIiwic2FrYWkuZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5qcCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2EuanAiLCJjaGlrdWhvLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJjaGlrdWpvLmZ1a3Vva2EuanAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2thLmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vva2EuanAiLCJoaWdhc2hpLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJoaXJva2F3YS5mdWt1b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9rYS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vva2EuanAiLCJrYXdhcmEuZnVrdW9r''@;'; put 'put ''YS5qcCIsImtlaXNlbi5mdWt1b2thLmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwibWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIsIm1peWFtYS5mdWt1b2thLmpwIiwi''@;'; put 'put ''bWl5YXdha2EuZnVrdW9rYS5qcCIsIm1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpwIiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpwIiwib2dvcmkuZnVrdW9rYS5qcCIs''@;'; put 'put ''Im9rYWdha2kuZnVrdW9rYS5qcCIsIm9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vva2EuanAiLCJzYXNhZ3VyaS5mdWt1''@;'; put 'put ''b2thLmpwIiwic2hpbmd1LmZ1a3Vva2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9rYS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1a3Vva2EuanAiLCJ0YWthdGEuZnVr''@;'; put 'put ''dW9rYS5qcCIsInRvaG8uZnVrdW9rYS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwidXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5YW1lLmZ1a3Vva2EuanAiLCJ5YW5h''@;'; put 'put ''Z2F3YS5mdWt1b2thLmpwIiwieXVrdWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwiYmFuZGFpLmZ1a3VzaGltYS5qcCIs''@;'; put 'put ''ImRhdGUuZnVrdXNoaW1hLmpwIiwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNoaW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEuZnVrdXNoaW1hLmpwIiwiaGlyb25v''@;'; put 'put ''LmZ1a3VzaGltYS5qcCIsImlpdGF0ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5qcCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hpLmZ1a3VzaGltYS5qcCIsImthbmV5''@;'; put 'put ''YW1hLmZ1a3VzaGltYS5qcCIsImthd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5pbWkuZnVrdXNoaW1hLmpwIiwibWlo''@;'; put 'put ''YXJ1LmZ1a3VzaGltYS5qcCIsIm1pc2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNoaW1hLmpwIiwib21vdGVnby5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJvbm8uZnVrdXNoaW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwic29tYS5mdWt1c2hpbWEuanAiLCJz''@;'; put 'put ''dWthZ2F3YS5mdWt1c2hpbWEuanAiLCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3VzaGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8uZnVrdXNoaW1hLmpwIiwieWFtYXRz''@;'; put 'put ''dXJpLmZ1a3VzaGltYS5qcCIsInlhbmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1am8uZ2lmdS5qcCIsImhhc2hpbWEu''@;'; put 'put ''Z2lmdS5qcCIsImhpY2hpc28uZ2lmdS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJrYWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImthc2FoYXJhLmdpZnUuanAiLCJrYXNh''@;'; put 'put ''bWF0c3UuZ2lmdS5qcCIsImthd2F1ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1penVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0c3VnYXdhLmdpZnUuanAiLCJvZ2Fr''@;'; put 'put ''aS5naWZ1LmpwIiwic2FrYWhvZ2kuZ2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2kuZ2lmdS5qcCIsInRvbWlrYS5naWZ1''@;'; put 'put ''LmpwIiwid2Fub3VjaGkuZ2lmdS5qcCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3VubWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRzdW1hLmd1bm1hLmpwIiwiaXNlc2Fr''@;'; put 'put ''aS5ndW5tYS5qcCIsIml0YWt1cmEuZ3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwia2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFlYmFzaGkuZ3VubWEuanAiLCJtZWl3''@;'; put 'put ''YS5ndW5tYS5qcCIsIm1pZG9yaS5ndW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5tYS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5qcCIsIm9yYS5ndW5tYS5qcCIsIm90''@;'; put 'put ''YS5ndW5tYS5qcCIsInNoaWJ1a2F3YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEuanAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1hLmpwIiwidGF0ZWJheWFzaGkuZ3Vu''@;'; put 'put ''bWEuanAiLCJ0b21pb2thLmd1bm1hLmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1hLmpwIiwiZXRhamltYS5oaXJvc2hp''@;'; put 'put ''bWEuanAiLCJmdWNodS5oaXJvc2hpbWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dlbi5oaXJvc2hpbWEuanAiLCJrYWl0''@;'; put 'put ''YS5oaXJvc2hpbWEuanAiLCJrdWkuaGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9zaGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJvbm9taWNoaS5oaXJvc2hpbWEuanAi''@;'; put 'put ''LCJvc2FraWthbWlqaW1hLmhpcm9zaGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hvYmFyYS5oaXJvc2hpbWEuanAiLCJ0''@;'; put 'put ''YWtlaGFyYS5oaXJvc2hpbWEuanAiLCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8uanAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhva2thaWRvLmpwIiwiYXNoaWJldHN1''@;'; put 'put ''Lmhva2thaWRvLmpwIiwiYXNob3JvLmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhva2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3JvLmhva2thaWRvLmpwIiwiYmlyYXRv''@;'; put 'put ''cmkuaG9ra2FpZG8uanAiLCJjaGlwcHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwiZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpwIiwiZXJpbW8uaG9ra2FpZG8uanAi''@;'; put 'put ''LCJlc2FuLmhva2thaWRvLmpwIiwiZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8uanAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2trYWlkby5qcCIsImhha29kYXRlLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiaGFtYXRvbmJldHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhva2thaWRvLmpwIiwiaG9rdXRvLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiaG9uYmV0c3UuaG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1ha2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpwIiwiaXdhbWl6YXdhLmhva2thaWRv''@;'; put 'put ''LmpwIiwiaXdhbmFpLmhva2thaWRvLmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlkby5qcCIsImtheWFiZS5ob2trYWlk''@;'; put 'put ''by5qcCIsImtlbWJ1Y2hpLmhva2thaWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJraXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5qcCIsImtvc2hpbWl6dS5ob2trYWlk''@;'; put 'put ''by5qcCIsImt1bm5lcHB1Lmhva2thaWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwibWFzaGlrZS5ob2trYWlkby5qcCIs''@;'; put 'put ''Im1hdHN1bWFlLmhva2thaWRvLmpwIiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5ob2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9yYW4uaG9ra2FpZG8uanAiLCJuYWll''@;'; put 'put ''Lmhva2thaWRvLmpwIiwibmFrYWdhd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlkby5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9ra2FpZG8uanAiLCJuZW11cm8uaG9r''@;'; put 'put ''a2FpZG8uanAiLCJuaWlrYXBwdS5ob2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwibnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5qcCIsIm9iaXJhLmhva2thaWRvLmpw''@;'; put 'put ''Iiwib2tldG8uaG9ra2FpZG8uanAiLCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIsIm90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8uanAiLCJvem9yYS5ob2trYWlkby5q''@;'; put 'put ''cCIsInBpcHB1Lmhva2thaWRvLmpwIiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2FpZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9tYS5ob2trYWlkby5qcCIsInNhcnVm''@;'; put 'put ''dXRzdS5ob2trYWlkby5qcCIsInNoYWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpwIiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2FpZG8uanAiLCJzaGltYW1ha2kuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJzaGltaXp1Lmhva2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAiLCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2thaWRvLmpwIiwic2hpcml1Y2hpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwic29iZXRzdS5ob2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwidGVzaGlrYWdhLmhva2thaWRvLmpw''@;'; put 'put ''IiwidG9iZXRzdS5ob2trYWlkby5qcCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5qcCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2thaWRvLmpwIiwidG95b3VyYS5ob2tr''@;'; put 'put ''YWlkby5qcCIsInRzdWJldHN1Lmhva2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUuaG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3YWtrYW5haS5ob2trYWlkby5qcCIs''@;'; put 'put ''Indhc3NhbXUuaG9ra2FpZG8uanAiLCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5b2dvLmpwIiwiYXNhZ28uaHlvZ28u''@;'; put 'put ''anAiLCJhc2hpeWEuaHlvZ28uanAiLCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5oeW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5oeW9nby5qcCIsIml0YW1pLmh5b2dv''@;'; put 'put ''LmpwIiwia2Frb2dhd2EuaHlvZ28uanAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdhbmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1pYXdhamkuaHlvZ28uanAiLCJuaXNo''@;'; put 'put ''aW5vbWl5YS5oeW9nby5qcCIsIm5pc2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28uanAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwic2hpbm9uc2VuLmh5b2dvLmpwIiwi''@;'; put 'put ''c2hpc28uaHlvZ28uanAiLCJzdW1vdG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dvLmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAiLCJ0YXRzdW5vLmh5b2dvLmpwIiwi''@;'; put 'put ''dG95b29rYS5oeW9nby5qcCIsInlhYnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwiYXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJjaGlrdXNlaS5pYmFyYWtpLmpwIiwi''@;'; put 'put ''ZGFpZ28uaWJhcmFraS5qcCIsImZ1amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFyYWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFraS5pYmFyYWtpLmpwIiwiaW5hLmli''@;'; put 'put ''YXJha2kuanAiLCJpbmFzaGlraS5pYmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5qcCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtpLmpwIiwia2FzdW1pZ2F1cmEuaWJh''@;'; put 'put ''cmFraS5qcCIsImtvZ2EuaWJhcmFraS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFtZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJvZ2F3YS5pYmFyYWtpLmpwIiwib21p''@;'; put 'put ''dGFtYS5pYmFyYWtpLmpwIiwicnl1Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAiLCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJhcmFraS5qcCIsInNvd2EuaWJhcmFr''@;'; put 'put ''aS5qcCIsInN1aWZ1LmliYXJha2kuanAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFraS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtpLmpwIiwidHN1Y2hpdXJhLmliYXJh''@;'; put 'put ''a2kuanAiLCJ0c3VrdWJhLmliYXJha2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFyYWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJha2kuanAiLCJhbmFtaXp1LmlzaGlr''@;'; put 'put ''YXdhLmpwIiwiaGFrdWkuaXNoaWthd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlrYXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1LmlzaGlrYXdhLmpwIiwibmFrYW5v''@;'; put 'put ''dG8uaXNoaWthd2EuanAiLCJuYW5hby5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5pc2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRhLmlzaGlrYXdhLmpwIiwidHN1cnVn''@;'; put 'put ''aS5pc2hpa2F3YS5qcCIsInVjaGluYWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtpLml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25vLml3YXRlLmpwIiwiaWNoaW5vaGUu''@;'; put 'put ''aXdhdGUuanAiLCJpY2hpbm9zZWtpLml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpwIiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUuanAiLCJrYXdhaS5pd2F0ZS5qcCIs''@;'; put 'put ''ImtpdGFrYW1pLml3YXRlLmpwIiwia3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdhdGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRlLmpwIiwibm9kYS5pd2F0ZS5qcCIs''@;'; put 'put ''Im9mdW5hdG8uaXdhdGUuanAiLCJvc2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vpc2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hhdGEuaXdhdGUuanAiLCJ0b25vLml3''@;'; put 'put ''YXRlLmpwIiwieWFoYWJhLml3YXRlLmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdhLmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdhLmpwIiwibWFydWdhbWUua2FnYXdh''@;'; put 'put ''LmpwIiwibWl0b3lvLmthZ2F3YS5qcCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAiLCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5qcCIsInV0YXp1LmthZ2F3YS5qcCIs''@;'; put 'put ''InplbnRzdWppLmthZ2F3YS5qcCIsImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJpc2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIsImthZ29zaGltYS5rYWdvc2hpbWEu''@;'; put 'put ''anAiLCJrYW5veWEua2Fnb3NoaW1hLmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAiLCJtaW5hbWl0YW5lLmthZ29zaGlt''@;'; put 'put ''YS5qcCIsIm5ha2F0YW5lLmthZ29zaGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAiLCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hpbWEuanAiLCJhaWthd2Eua2FuYWdh''@;'; put 'put ''d2EuanAiLCJhdHN1Z2kua2FuYWdhd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2FuYWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUua2FuYWdhd2EuanAiLCJoaXJhdHN1''@;'; put 'put ''a2Eua2FuYWdhd2EuanAiLCJpc2VoYXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIsIm1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5rYW5hZ2F3YS5qcCIsIm1pdXJhLmth''@;'; put 'put ''bmFnYXdhLmpwIiwibmFrYWkua2FuYWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdhd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWthd2Eua2FuYWdhd2EuanAiLCJ0c3Vr''@;'; put 'put ''dWkua2FuYWdhd2EuanAiLCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAiLCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAiLCJha2kua29jaGkuanAiLCJnZWlz''@;'; put 'put ''ZWkua29jaGkuanAiLCJoaWRha2Eua29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwia2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1paGFyYS5rb2NoaS5qcCIsIm1vdG95''@;'; put 'put ''YW1hLmtvY2hpLmpwIiwibXVyb3RvLmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hpLmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGkuanAiLCJva2F3YS5rb2NoaS5qcCIs''@;'; put 'put ''Im90b3lvLmtvY2hpLmpwIiwib3RzdWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIsInRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIsInRzdW5vLmtvY2hpLmpwIiwidW1h''@;'; put 'put ''amkua29jaGkuanAiLCJ5YXN1ZGEua29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3RvLmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFtb3RvLmpwIiwia2FtaWFtYWt1c2Eu''@;'; put 'put ''a3VtYW1vdG8uanAiLCJraWt1Y2hpLmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWluYW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90by5qcCIsIm5hZ2FzdS5rdW1hbW90''@;'; put 'put ''by5qcCIsIm5pc2hpaGFyYS5rdW1hbW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1vdG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8uanAiLCJ5YW1hZ2Eua3VtYW1vdG8u''@;'; put 'put ''anAiLCJ5YW1hdG8ua3VtYW1vdG8uanAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwiam95by5reW90by5qcCIsImthbWVv''@;'; put 'put ''a2Eua3lvdG8uanAiLCJrYW1vLmt5b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lvdGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJtYWl6dXJ1Lmt5b3RvLmpwIiwibWlu''@;'; put 'put ''YW1pLmt5b3RvLmpwIiwibWluYW1peWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lvLmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtpLmt5b3RvLmpwIiwic2FreW8ua3lv''@;'; put 'put ''dG8uanAiLCJzZWlrYS5reW90by5qcCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGluYS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1pZS5qcCIsImluYWJlLm1pZS5qcCIs''@;'; put 'put ''ImlzZS5taWUuanAiLCJrYW1leWFtYS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWllLmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJtYXRzdXNha2EubWllLmpwIiwibWVp''@;'; put 'put ''d2EubWllLmpwIiwibWloYW1hLm1pZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUuanAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlraS5taWUuanAiLCJ0YWtpLm1pZS5q''@;'; put 'put ''cCIsInRhbWFraS5taWUuanAiLCJ0b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNoaS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hpbWF0c3VzaGltYS5taXlhZ2kuanAi''@;'; put 'put ''LCJpc2hpbm9tYWtpLm1peWFnaS5qcCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFydW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAiLCJtaW5hbWlzYW5yaWt1Lm1peWFn''@;'; put 'put ''aS5qcCIsIm1pc2F0by5taXlhZ2kuanAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25hZ2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1Lm1peWFnaS5qcCIsInNlbWluZS5t''@;'; put 'put ''aXlhZ2kuanAiLCJzaGliYXRhLm1peWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lzaGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdhLm1peWFnaS5qcCIsInRvbWUubWl5''@;'; put 'put ''YWdpLmpwIiwidG9taXlhLm1peWFnaS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29rYXNlLm1peWF6YWtpLmpwIiwiaHl1''@;'; put 'put ''Z2EubWl5YXpha2kuanAiLCJrYWRvZ2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAiLCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXpha2kuanAiLCJrb2JheWFzaGkubWl5''@;'; put 'put ''YXpha2kuanAiLCJrdW5pdG9taS5taXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2kuanAiLCJuaWNoaW5hbi5taXlhemFr''@;'; put 'put ''aS5qcCIsIm5pc2hpbWVyYS5taXlhemFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1peWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWthbmFiZS5taXlhemFraS5qcCIsInRh''@;'; put 'put ''a2F6YWtpLm1peWF6YWtpLmpwIiwidHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdhbm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fuby5qcCIsImNoaWt1aG9rdS5uYWdh''@;'; put 'put ''bm8uanAiLCJjaGlrdW1hLm5hZ2Fuby5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJheWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEubmFnYW5vLmpwIiwiaWl5YW1hLm5h''@;'; put 'put ''Z2Fuby5qcCIsImlpenVuYS5uYWdhbm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwia2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJraXNvZnVrdXNoaW1hLm5hZ2Fuby5q''@;'; put 'put ''cCIsImtpdGFhaWtpLm5hZ2Fuby5qcCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5qcCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5vLmpwIiwibWluYW1pbWFraS5uYWdh''@;'; put 'put ''bm8uanAiLCJtaW5hbWltaW5vd2EubmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fuby5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5vLmpwIiwibmFnaXNvLm5hZ2Fuby5q''@;'; put 'put ''cCIsIm5ha2FnYXdhLm5hZ2Fuby5qcCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJva2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21pLm5hZ2Fuby5qcCIsIm9va3V3YS5u''@;'; put 'put ''YWdhbm8uanAiLCJvb3NoaWthLm5hZ2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJzYWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGltb3N1d2EubmFnYW5vLmpwIiwic2hp''@;'; put 'put ''bmFub21hY2hpLm5hZ2Fuby5qcCIsInNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9yaS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRlc2hpbmEubmFnYW5vLmpwIiwidGF0''@;'; put 'put ''c3Vuby5uYWdhbm8uanAiLCJ0b2dha3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5qcCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFnYW5vLmpwIiwieWFzYWthLm5hZ2Fu''@;'; put 'put ''by5qcCIsInlhc3Vva2EubmFnYW5vLmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5qcCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5qcCIsImlzYWhheWEubmFnYXNha2ku''@;'; put 'put ''anAiLCJrYXdhdGFuYS5uYWdhc2FraS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEubmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRvLm5hZ2FzYWtpLmpwIiwic2Fpa2Fp''@;'; put 'put ''Lm5hZ2FzYWtpLmpwIiwic2FzZWJvLm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAiLCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNha2kuanAiLCJ1bnplbi5uYWdhc2Fr''@;'; put 'put ''aS5qcCIsImFuZG8ubmFyYS5qcCIsImdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5hcmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2kubmFyYS5qcCIsImthc2hpYmEubmFy''@;'; put 'put ''YS5qcCIsImthc2hpaGFyYS5uYXJhLmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29yeW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUubmFyYS5qcCIsIm1peWFrZS5uYXJh''@;'; put 'put ''LmpwIiwibmFyYS5uYXJhLmpwIiwibm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNhbmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1va2l0YXlhbWEubmFyYS5qcCIsInNo''@;'; put 'put ''aW5qby5uYXJhLmpwIiwic29uaS5uYXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5YW1hdG90YWthZGEubmFyYS5qcCIs''@;'; put 'put ''InlhbWF6b2UubmFyYS5qcCIsInlvc2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWlnYXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3UubmlpZ2F0YS5qcCIsImthbW8ubmlp''@;'; put 'put ''Z2F0YS5qcCIsImthcml3YS5uaWlnYXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVpa2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJteW9rby5uaWlnYXRhLmpwIiwibmFn''@;'; put 'put ''YW9rYS5uaWlnYXRhLmpwIiwibmlpZ2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0YS5qcCIsInNla2lrYXdhLm5paWdh''@;'; put 'put ''dGEuanAiLCJzaGliYXRhLm5paWdhdGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWlnYXRhLmpwIiwidW9udW1hLm5paWdh''@;'; put 'put ''dGEuanAiLCJ5YWhpa28ubmlpZ2F0YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVuZ290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlqaS5vaXRhLmpwIiwiaGltZXNoaW1h''@;'; put 'put ''Lm9pdGEuanAiLCJoaXRhLm9pdGEuanAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0YWtldGEub2l0YS5qcCIsInRzdWt1''@;'; put 'put ''bWkub2l0YS5qcCIsInVzYS5vaXRhLmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVuLm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImliYXJhLm9rYXlhbWEuanAiLCJrYWdh''@;'; put 'put ''bWluby5va2F5YW1hLmpwIiwia2FzYW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwibWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIsIm5hZ2kub2theWFtYS5qcCIsIm5p''@;'; put 'put ''aW1pLm9rYXlhbWEuanAiLCJuaXNoaWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAiLCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIsInNvamEub2theWFtYS5qcCIsInRh''@;'; put 'put ''a2FoYXNoaS5va2F5YW1hLmpwIiwidGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5pLm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5vemEub2tpbmF3YS5qcCIsImd1c2hp''@;'; put 'put ''a2FtaS5va2luYXdhLmpwIiwiaGFlYmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdha2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJpdG9tYW4ub2tpbmF3YS5qcCIsIml6''@;'; put 'put ''ZW5hLm9raW5hd2EuanAiLCJrYWRlbmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwia3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2EuanAiLCJtaW5hbWlkYWl0by5va2lu''@;'; put 'put ''YXdhLmpwIiwibW90b2J1Lm9raW5hd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2EuanAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5hd2EuanAiLCJvZ2ltaS5va2luYXdh''@;'; put 'put ''LmpwIiwib2tpbmF3YS5va2luYXdhLmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpwIiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9raW5hd2EuanAiLCJ0b25ha2kub2tp''@;'; put 'put ''bmF3YS5qcCIsInVyYXNvZS5va2luYXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdhLmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2luYXdhLmpwIiwiYWJlbm8ub3Nha2Eu''@;'; put 'put ''anAiLCJjaGloYXlhYWthc2FrYS5vc2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwiaGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpwIiwiaGlnYXNoaXN1bWl5b3NoaS5v''@;'; put 'put ''c2FrYS5qcCIsImhpZ2FzaGl5b2RvZ2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2EuanAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nha2EuanAiLCJrYWRvbWEub3Nha2Eu''@;'; put 'put ''anAiLCJrYWl6dWthLm9zYWthLmpwIiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwia2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1bWF0b3JpLm9zYWthLmpwIiwibWF0''@;'; put 'put ''c3ViYXJhLm9zYWthLmpwIiwibWluYXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2FrYS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIsIm9zYWthc2F5YW1hLm9zYWthLmpw''@;'; put 'put ''Iiwic2FrYWkub3Nha2EuanAiLCJzYXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5vc2FrYS5qcCIsInRhaXNoaS5vc2Fr''@;'; put 'put ''YS5qcCIsInRhamlyaS5vc2FrYS5qcCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2EuanAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJhcmlha2Uuc2FnYS5qcCIsImFyaXRh''@;'; put 'put ''LnNhZ2EuanAiLCJmdWt1ZG9taS5zYWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWluZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5zYWdhLmpwIiwia2FzaGltYS5zYWdh''@;'; put 'put ''LmpwIiwia2l0YWdhdGEuc2FnYS5qcCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJpdGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2EuanAiLCJvdWNoaS5zYWdhLmpwIiwi''@;'; put 'put ''c2FnYS5zYWdhLmpwIiwic2hpcm9pc2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJha2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNoaWNoaWJ1LnNhaXRhbWEuanAiLCJm''@;'; put 'put ''dWppbWkuc2FpdGFtYS5qcCIsImZ1amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRhLnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0b3lhbWEuc2FpdGFtYS5qcCIsImhp''@;'; put 'put ''ZGFrYS5zYWl0YW1hLmpwIiwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRhbWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2FpdGFtYS5qcCIsImthbWlpenVtaS5z''@;'; put 'put ''YWl0YW1hLmpwIiwia2FtaWthd2Euc2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwia2F6by5zYWl0YW1hLmpwIiwia2l0''@;'; put 'put ''YW1vdG8uc2FpdGFtYS5qcCIsImtvc2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1hdHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpwIiwibWlzYXRvLnNhaXRhbWEuanAi''@;'; put 'put ''LCJtaXlhc2hpcm8uc2FpdGFtYS5qcCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFtYS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1hLmpwIiwib2dhd2Euc2FpdGFtYS5q''@;'; put 'put ''cCIsIm9nb3NlLnNhaXRhbWEuanAiLCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlva2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwic2FrYWRvLnNhaXRhbWEuanAiLCJz''@;'; put 'put ''YXR0ZS5zYWl0YW1hLmpwIiwic2F5YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5zYWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Euc2FpdGFtYS5qcCIsInRva29yb3ph''@;'; put 'put ''d2Euc2FpdGFtYS5qcCIsInRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tvemUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlpLnNhaXRhbWEuanAiLCJ5b3NoaWRh''@;'; put 'put ''LnNhaXRhbWEuanAiLCJ5b3NoaWthd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hpZ2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpwIiwia29uYW4uc2hpZ2EuanAiLCJr''@;'; put 'put ''b3NlaS5zaGlnYS5qcCIsImtvdG8uc2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2EuanAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGlnYS5qcCIsIm9taWhhY2hpbWFuLnNo''@;'; put 'put ''aWdhLmpwIiwib3RzdS5zaGlnYS5qcCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3JhaGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFzdS5zaGlnYS5qcCIsImFrYWdpLnNo''@;'; put 'put ''aW1hbmUuanAiLCJhbWEuc2hpbWFuZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1hbmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1hbmUuanAiLCJrYWtpbm9raS5zaGlt''@;'; put 'put ''YW5lLmpwIiwibWFzdWRhLnNoaW1hbmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1hbmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVtby5zaGltYW5lLmpwIiwic2hpbWFu''@;'; put 'put ''ZS5zaGltYW5lLmpwIiwidGFtYXl1LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hpbWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hpenVva2EuanAiLCJhdGFtaS5zaGl6''@;'; put 'put ''dW9rYS5qcCIsImZ1amkuc2hpenVva2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJvaS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJoYWliYXJhLnNoaXp1b2thLmpwIiwi''@;'; put 'put ''aGFtYW1hdHN1LnNoaXp1b2thLmpwIiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwiaXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVva2EuanAiLCJrYW5uYW1pLnNoaXp1''@;'; put 'put ''b2thLmpwIiwia2F3YW5laG9uLnNoaXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hhcmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAiLCJtaW5hbWlpenUuc2hpenVva2Eu''@;'; put 'put ''anAiLCJtaXNoaW1hLnNoaXp1b2thLmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5zaGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGltaXp1LnNoaXp1b2thLmpwIiwic2hp''@;'; put 'put ''bW9kYS5zaGl6dW9rYS5qcCIsInNoaXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwiYXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIsImhhZ2EudG9jaGlnaS5qcCIsImlj''@;'; put 'put ''aGlrYWkudG9jaGlnaS5qcCIsIml3YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpwIiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdpLmpwIiwibWlidS50b2NoaWdpLmpw''@;'; put 'put ''IiwibW9rYS50b2NoaWdpLmpwIiwibW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJuaXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIsIm9oaXJhLnRvY2hpZ2kuanAiLCJv''@;'; put 'put ''aHRhd2FyYS50b2NoaWdpLmpwIiwib3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hpb3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAiLCJ0b2NoaWdpLnRvY2hpZ2kuanAi''@;'; put 'put ''LCJ0c3VnYS50b2NoaWdpLmpwIiwidWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwiYW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpwIiwiaXRhbm8udG9rdXNoaW1hLmpw''@;'; put 'put ''Iiwia2FpbmFuLnRva3VzaGltYS5qcCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1pLnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwibXVnaS50b2t1c2hpbWEuanAiLCJu''@;'; put 'put ''YWthZ2F3YS50b2t1c2hpbWEuanAiLCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFkYWNoaS50b2t5by5qcCIsImFraXJ1''@;'; put 'put ''bm8udG9reW8uanAiLCJha2lzaGltYS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lvLmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwiZWRvZ2F3YS50b2t5by5qcCIsImZ1''@;'; put 'put ''Y2h1LnRva3lvLmpwIiwiZnVzc2EudG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRva3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGlnYXNoaXlhbWF0by50b2t5by5qcCIs''@;'; put 'put ''Imhpbm8udG9reW8uanAiLCJoaW5vZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRva3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5qcCIsImtvZGFpcmEudG9reW8uanAi''@;'; put 'put ''LCJrb2dhbmVpLnRva3lvLmpwIiwia29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNoaS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8udG9reW8uanAiLCJtaW5hdG8udG9r''@;'; put 'put ''eW8uanAiLCJtaXRha2EudG9reW8uanAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8uanAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8uanAiLCJva3V0YW1hLnRva3lvLmpw''@;'; put 'put ''Iiwib21lLnRva3lvLmpwIiwib3NoaW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lvLmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5by5qcCIsInN1bWlkYS50b2t5by5q''@;'; put 'put ''cCIsInRhY2hpa2F3YS50b2t5by5qcCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90dG9yaS5qcCIsImtvdG91cmEudG90''@;'; put 'put ''dG9yaS5qcCIsIm1pc2FzYS50b3R0b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRvdHRvcmkuanAiLCJ5b25hZ28udG90''@;'; put 'put ''dG9yaS5qcCIsImFzYWhpLnRveWFtYS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAiLCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJqb2hhbmEudG95YW1hLmpwIiwia2Ft''@;'; put 'put ''aWljaGkudG95YW1hLmpwIiwia3Vyb2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJhLnRveWFtYS5qcCIsInRha2Fva2Eu''@;'; put 'put ''dG95YW1hLmpwIiwidGF0ZXlhbWEudG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpwIiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwiYXJpZGEud2FrYXlhbWEuanAiLCJh''@;'; put 'put ''cmlkYWdhd2Eud2FrYXlhbWEuanAiLCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEuanAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1hLmpwIiwia2FpbmFuLndha2F5YW1h''@;'; put 'put ''LmpwIiwia2FtaXRvbmRhLndha2F5YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFtYS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3phLndha2F5YW1hLmpwIiwia296YWdh''@;'; put 'put ''d2Eud2FrYXlhbWEuanAiLCJrdWRveWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIsIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2FrYXlhbWEuanAiLCJzaGlyYWhhbWEu''@;'; put 'put ''d2FrYXlhbWEuanAiLCJ0YWlqaS53YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndha2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0YS55YW1hZ2F0YS5qcCIsImhpZ2Fz''@;'; put 'put ''aGluZS55YW1hZ2F0YS5qcCIsImlpZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAiLCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlhbWFnYXRhLmpwIiwibWlrYXdhLnlh''@;'; put 'put ''bWFnYXRhLmpwIiwibXVyYXlhbWEueWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWthd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAiLCJvZS55YW1hZ2F0YS5qcCIsIm9n''@;'; put 'put ''dW5pLnlhbWFnYXRhLmpwIiwib2hrdXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2FrZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAiLCJzaGlyYXRha2EueWFtYWdhdGEu''@;'; put 'put ''anAiLCJzaG9uYWkueWFtYWdhdGEuanAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdhdGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2JlLnlhbWFnYXRhLmpwIiwieW9uZXph''@;'; put 'put ''d2EueWFtYWdhdGEuanAiLCJ5dXphLnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFtYWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRhbWF0c3UueWFtYWd1Y2hpLmpwIiwi''@;'; put 'put ''bWl0b3UueWFtYWd1Y2hpLmpwIiwibmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1hLnlhbWFndWNoaS5qcCIsInRveW90''@;'; put 'put ''YS55YW1hZ3VjaGkuanAiLCJ1YmUueWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJmdWppa2F3YWd1Y2hpa28ueWFtYW5h''@;'; put 'put ''c2hpLmpwIiwiZnVqaXlvc2hpZGEueWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNoaS5qcCIsImtvc2h1LnlhbWFuYXNo''@;'; put 'put ''aS5qcCIsImtvc3VnZS55YW1hbmFzaGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5hbmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5qcCIsIm5pcmFzYWtpLnlhbWFuYXNo''@;'; put 'put ''aS5qcCIsIm5pc2hpa2F0c3VyYS55YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIsInVlbm9oYXJhLnlhbWFuYXNoaS5q''@;'; put 'put ''cCIsInlhbWFuYWtha28ueWFtYW5hc2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9iaS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwiY29tLmtnIiwiZWR1LmtnIiwiZ292Lmtn''@;'; put 'put ''IiwibWlsLmtnIiwibmV0LmtnIiwib3JnLmtnIiwiKi5raCIsImtpIiwiYml6LmtpIiwiY29tLmtpIiwiZWR1LmtpIiwiZ292LmtpIiwiaW5mby5raSIsIm5ldC5raSIsIm9yZy5raSIsImttIiwiYXNzLmttIiwiY29tLmttIiwiZWR1LmttIiwiZ292LmttIiwibWlsLmttIiwibm9tLmttIiwi''@;'; put 'put ''b3JnLmttIiwicHJkLmttIiwidG0ua20iLCJhc3NvLmttIiwiY29vcC5rbSIsImdvdXYua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInByZXNzZS5rbSIsInZldGVyaW5haXJlLmttIiwia24iLCJlZHUua24iLCJnb3Yua24iLCJuZXQua24iLCJvcmcu''@;'; put 'put ''a24iLCJrcCIsImNvbS5rcCIsImVkdS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5rciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9yLmtyIiwicGUua3IiLCJyZS5rciIs''@;'; put 'put ''InNjLmtyIiwiYnVzYW4ua3IiLCJjaHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdidWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImluY2hlb24ua3IiLCJqZWp1LmtyIiwi''@;'; put 'put ''amVvbmJ1ay5rciIsImplb25uYW0ua3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ciLCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5reSIsIm9yZy5reSIsImt6IiwiY29t''@;'; put 'put ''Lmt6IiwiZWR1Lmt6IiwiZ292Lmt6IiwibWlsLmt6IiwibmV0Lmt6Iiwib3JnLmt6IiwibGEiLCJjb20ubGEiLCJlZHUubGEiLCJnb3YubGEiLCJpbmZvLmxhIiwiaW50LmxhIiwibmV0LmxhIiwib3JnLmxhIiwicGVyLmxhIiwibGIiLCJjb20ubGIiLCJlZHUubGIiLCJnb3YubGIiLCJuZXQu''@;'; put 'put ''bGIiLCJvcmcubGIiLCJsYyIsImNvLmxjIiwiY29tLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibmV0LmxjIiwib3JnLmxjIiwibGkiLCJsayIsImFjLmxrIiwiYXNzbi5sayIsImNvbS5sayIsImVkdS5sayIsImdvdi5sayIsImdycC5sayIsImhvdGVsLmxrIiwiaW50LmxrIiwibHRkLmxrIiwi''@;'; put 'put ''bmV0LmxrIiwibmdvLmxrIiwib3JnLmxrIiwic2NoLmxrIiwic29jLmxrIiwid2ViLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJuZXQubHIiLCJvcmcubHIiLCJscyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJnb3YubHMiLCJpbmZvLmxzIiwibmV0''@;'; put 'put ''LmxzIiwib3JnLmxzIiwic2MubHMiLCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJhc24ubHYiLCJjb20ubHYiLCJjb25mLmx2IiwiZWR1Lmx2IiwiZ292Lmx2IiwiaWQubHYiLCJtaWwubHYiLCJuZXQubHYiLCJvcmcubHYiLCJseSIsImNvbS5seSIsImVkdS5seSIsImdvdi5seSIsImlkLmx5''@;'; put 'put ''IiwibWVkLmx5IiwibmV0Lmx5Iiwib3JnLmx5IiwicGxjLmx5Iiwic2NoLmx5IiwibWEiLCJhYy5tYSIsImNvLm1hIiwiZ292Lm1hIiwibmV0Lm1hIiwib3JnLm1hIiwicHJlc3MubWEiLCJtYyIsImFzc28ubWMiLCJ0bS5tYyIsIm1kIiwibWUiLCJhYy5tZSIsImNvLm1lIiwiZWR1Lm1lIiwi''@;'; put 'put ''Z292Lm1lIiwiaXRzLm1lIiwibmV0Lm1lIiwib3JnLm1lIiwicHJpdi5tZSIsIm1nIiwiY28ubWciLCJjb20ubWciLCJlZHUubWciLCJnb3YubWciLCJtaWwubWciLCJub20ubWciLCJvcmcubWciLCJwcmQubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1rIiwiZWR1Lm1rIiwiZ292Lm1rIiwi''@;'; put 'put ''aW5mLm1rIiwibmFtZS5tayIsIm5ldC5tayIsIm9yZy5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImVkdS5tbiIsImdvdi5tbiIsIm9yZy5tbiIsIm1vIiwiY29tLm1vIiwiZWR1''@;'; put 'put ''Lm1vIiwiZ292Lm1vIiwibmV0Lm1vIiwib3JnLm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQiLCJvcmcubXQiLCJtdSIsImFjLm11''@;'; put 'put ''IiwiY28ubXUiLCJjb20ubXUiLCJnb3YubXUiLCJuZXQubXUiLCJvci5tdSIsIm9yZy5tdSIsIm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJpei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12IiwibWlsLm12IiwibXVzZXVtLm12Iiwi''@;'; put 'put ''bmFtZS5tdiIsIm5ldC5tdiIsIm9yZy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3AubXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIsImVkdS5teCIsImdvYi5teCIsIm5l''@;'; put 'put ''dC5teCIsIm9yZy5teCIsIm15IiwiYml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFtZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1pbC5teiIsIm5ldC5teiIsIm9yZy5t''@;'; put 'put ''eiIsIm5hIiwiYWx0Lm5hIiwiY28ubmEiLCJjb20ubmEiLCJnb3YubmEiLCJuZXQubmEiLCJvcmcubmEiLCJuYW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImFydHMubmYiLCJjb20ubmYiLCJmaXJtLm5mIiwiaW5mby5uZiIsIm5ldC5uZiIsIm90aGVyLm5m''@;'; put 'put ''IiwicGVyLm5mIiwicmVjLm5mIiwic3RvcmUubmYiLCJ3ZWIubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIsImdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5pIiwiYWMubmkiLCJiaXoubmkiLCJjby5uaSIs''@;'; put 'put ''ImNvbS5uaSIsImVkdS5uaSIsImdvYi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIsIm5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJmb2xrZWJpYmwubm8iLCJmeWxrZXNiaWJsLm5vIiwiaWRyZXR0Lm5vIiwibXVz''@;'; put 'put ''ZXVtLm5vIiwicHJpdi5ubyIsInZncy5ubyIsImRlcC5ubyIsImhlcmFkLm5vIiwia29tbXVuZS5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4ubm8iLCJtci5ubyIsIm5sLm5vIiwibnQubm8i''@;'; put 'put ''LCJvZi5ubyIsIm9sLm5vIiwib3Nsby5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5vIiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5ubyIsImdzLmhsLm5vIiwiZ3MuaG0ubm8iLCJn''@;'; put 'put ''cy5qYW4tbWF5ZW4ubm8iLCJncy5tci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdzLm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3MudG0ubm8iLCJncy50ci5ubyIsImdzLnZhLm5v''@;'; put 'put ''IiwiZ3MudmYubm8iLCJha3JlaGFtbi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxnXHhlNXJkLm5vIiwiYXJuYS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5ceGY4eXN1bmQubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5bmUubm8iLCJkcm9iYWsubm8iLCJk''@;'; put 'put ''clx4ZjhiYWsubm8iLCJlZ2Vyc3VuZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5vIiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5ubyIsImpvcnBlbGFuZC5ubyIsImpceGY4cnBl''@;'; put 'put ''bGFuZC5ubyIsImtpcmtlbmVzLm5vIiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZhZy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWktcmFuYS5ubyIsIm1vc2pvZW4ubm8iLCJtb3Nq''@;'; put 'put ''XHhmOGVuLm5vIiwibmVzb2RkdGFuZ2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJza2Vkc21va29yc2V0Lm5vIiwic2xhdHR1bS5u''@;'; put 'put ''byIsInNwamVsa2F2aWsubm8iLCJzdGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2VuLm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFhcmJvcnRlLm5vIiwiYWVqcmllLm5vIiwiYWZq''@;'; put 'put ''b3JkLm5vIiwiXHhlNWZqb3JkLm5vIiwiYWdkZW5lcy5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxhaGVhZGp1Lm5vIiwiXHhlMWxhaGVhZGp1Lm5vIiwiYWxlc3VuZC5ubyIsIlx4ZTVs''@;'; put 'put ''ZXN1bmQubm8iLCJhbHN0YWhhdWcubm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsdmRhbC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRhc3VvbG8ubm8iLCJhbmRlYnUubm8iLCJhbmRveS5ubyIsImFuZFx4Zjh5Lm5vIiwiYXJk''@;'; put 'put ''YWwubm8iLCJceGU1cmRhbC5ubyIsImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8iLCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrb3kubm8iLCJhc2tceGY4eS5ubyIsImFza3ZvbGwubm8iLCJhc25lcy5ubyIsIlx4ZTVzbmVz''@;'; put 'put ''Lm5vIiwiYXVkbmVkYWxuLm5vIiwiYXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVyXHhmOHkubm8iLCJiYWRhZGRqYS5u''@;'; put 'put ''byIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYlx4ZTZydW0ubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5vIiwiYmFqZGRhci5ubyIsImJceGUx''@;'; put 'put ''amRkYXIubm8iLCJiYWxhdC5ubyIsImJceGUxbFx4ZTF0Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbHNmam9yZC5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmFydW0ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpvcmQubm8iLCJiZWFyYWx2YWhraS5u''@;'; put 'put ''byIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJiaW5kYWwubm8iLCJiaXJrZW5lcy5ubyIsImJqYXJrb3kubm8i''@;'; put 'put ''LCJiamFya1x4Zjh5Lm5vIiwiYmplcmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5vIiwiYm9kXHhmOC5ubyIsImJva24ubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHkubm8iLCJidWRlamp1Lm5vIiwibmVz''@;'; put 'put ''LmJ1c2tlcnVkLm5vIiwiYnlnbGFuZC5ubyIsImJ5a2xlLm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIsImRhdnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJkYXZ2ZXNpaWRhLm5vIiwiZGVhdG51Lm5vIiwiZGllbGRkYW51b3JyaS5ubyIsImRp''@;'; put 'put ''dnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5vIiwiZWlkc2Jlcmcubm8iLCJlaWRz''@;'; put 'put ''a29nLm5vIiwiZWlkc3ZvbGwubm8iLCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIsImV0bmVkYWwubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2ZW5lcy5ubyIsImV2amUtb2ctaG9y''@;'; put 'put ''bm5lcy5ubyIsImZhcnN1bmQubm8iLCJmYXVza2Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxhLm5vIiwiZmxceGU1Lm5vIiwiZmxha3N0YWQubm8iLCJmbGF0YW5nZXIubm8i''@;'; put 'put ''LCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmb2xsZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmclx4ZTZuYS5ubyIsImZyYW5hLm5vIiwiZnJlaS5ubyIsImZyb2duLm5vIiwiZnJvbGFuZC5ubyIs''@;'; put 'put ''ImZyb3N0YS5ubyIsImZyb3lhLm5vIiwiZnJceGY4eWEubm8iLCJmdW9pc2t1Lm5vIiwiZnVvc3Nrby5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImdhaXZ1b3RuYS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEubm8iLCJnYW12aWsubm8iLCJnYW5n''@;'; put 'put ''YXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1bS5ubyIsImdqZXJzdGFkLm5vIiwi''@;'; put 'put ''Z2plc2RhbC5ubyIsImdqb3Zpay5ubyIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8iLCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImdydWUubm8iLCJndWxlbi5ubyIsImd1b3ZkYWdl''@;'; put 'put ''YWlkbnUubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFkc2VsLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJveS5ubyIsImhhbW1hcmZlYXN0YS5u''@;'; put 'put ''byIsImhceGUxbW1ceGUxcmZlYXN0YS5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJoYXVnZXN1bmQubm8iLCJvcy5oZWRtYXJrLm5v''@;'; put 'put ''IiwidmFsZXIuaGVkbWFyay5ubyIsInZceGU1bGVyLmhlZG1hcmsubm8iLCJoZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGl0cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5vIiwiaG9mLm5vIiwiaG9sLm5vIiwi''@;'; put 'put ''aG9sZS5ubyIsImhvbG1lc3RyYW5kLm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsIm9zLmhvcmRhbGFuZC5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQubm8iLCJoXHhmOHlsYW5kZXQubm8i''@;'; put 'put ''LCJodXJkYWwubm8iLCJodXJ1bS5ubyIsImh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJpdmd1Lm5vIiwiamV2bmFrZXIubm8iLCJqb2xzdGVyLm5vIiwialx4Zjhsc3Rlci5ubyIsImpvbmRh''@;'; put 'put ''bC5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmFzam9rLm5vIiwia2FybHNveS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8ubm8iLCJrbGFidS5ubyIsImtsXHhl''@;'; put 'put ''NmJ1Lm5vIiwia2xlcHAubm8iLCJrb25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWFuZ2hrZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImtyYWdlcm8ubm8iLCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5kLm5vIiwia3JvZHNoZXJhZC5ubyIs''@;'; put 'put ''ImtyXHhmOGRzaGVyYWQubm8iLCJrdlx4ZTZmam9yZC5ubyIsImt2XHhlNm5hbmdlbi5ubyIsImt2YWZqb3JkLm5vIiwia3ZhbHN1bmQubm8iLCJrdmFtLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZpbmVzZGFsLm5vIiwia3Zpbm5oZXJhZC5ubyIsImt2aXRlc2VpZC5ubyIsImt2aXRzb3kubm8i''@;'; put 'put ''LCJrdml0c1x4Zjh5Lm5vIiwibGFha2VzdnVlbWllLm5vIiwibFx4ZTZyZGFsLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibGFyZGFsLm5vIiwibGFydmlrLm5vIiwibGF2YWdpcy5ubyIsImxhdmFuZ2VuLm5vIiwibGVhbmdhdmlpa2Eubm8iLCJsZWFcdTAxNGJnYXZpaWthLm5v''@;'; put 'put ''IiwibGViZXNieS5ubyIsImxlaWthbmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVyZGFsLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxsZWhhbW1lci5ubyIsImxpbGxlc2Fu''@;'; put 'put ''ZC5ubyIsImxpbmRhcy5ubyIsImxpbmRceGU1cy5ubyIsImxpbmRlc25lcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxvcmVuc2tvZy5ubyIsImxceGY4cmVuc2tvZy5ubyIsImxvdGVu''@;'; put 'put ''Lm5vIiwibFx4Zjh0ZW4ubm8iLCJsdW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8iLCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVvcG1pLm5vIiwibWFsc2Vsdi5ubyIsIm1ceGU1bHNlbHYu''@;'; put 'put ''bm8iLCJtYWx2aWsubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwibWVsYW5kLm5vIiwibWVsZGFsLm5v''@;'; put 'put ''IiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtb2RhbGVuLm5vIiwibW9kdW0ubm8iLCJtb2xkZS5ubyIs''@;'; put 'put ''Imhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1vc3Zpay5ubyIsIm11b3NhdC5ubyIs''@;'; put 'put ''Im11b3NceGUxdC5ubyIsIm5hYW1lc2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5hbWRhbHNlaWQubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFubmVzdGFkLm5vIiwibmFyb3kubm8iLCJuYXJ2aWlrYS5ubyIsIm5h''@;'; put 'put ''cnZpay5ubyIsIm5hdXN0ZGFsLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzbmEubm8iLCJuZXNvZGRlbi5ubyIsIm5lc3NlYnkubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFsLm5vIiwibm9yZC1hdXJkYWwubm8i''@;'; put 'put ''LCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsIm5vcmRyZS1sYW5kLm5vIiwibm9yZHJlaXNh''@;'; put 'put ''Lm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibm90dGVyb3kubm8iLCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvbWFzdnVvdG5hLm5vIiwib3BwZGFsLm5vIiwib3BwZWdhcmQubm8iLCJvcHBlZ1x4ZTVyZC5u''@;'; put 'put ''byIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvc2VuLm5vIiwib3N0ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJ2YWxlci5vc3Rmb2xkLm5vIiwidlx4ZTVsZXIuXHhm''@;'; put 'put ''OHN0Zm9sZC5ubyIsIm9zdHJlLXRvdGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVyaGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3lnYXJkZW4ubm8iLCJceGY4eWdhcmRlbi5ubyIsIm95c3RyZS1zbGlk''@;'; put 'put ''cmUubm8iLCJceGY4eXN0cmUtc2xpZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uubm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwiclx4ZTZsaW5nZW4ubm8iLCJyYWhr''@;'; put 'put ''a2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsInJha2tlc3RhZC5ubyIsInJhbGluZ2VuLm5vIiwicmFuYS5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5uZWJ1Lm5vIiwicmVubmVzb3kubm8i''@;'; put 'put ''LCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicmlzc2Eubm8iLCJyb2FuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5ubyIsInJvbGxhZy5ubyIsInJvbXNh''@;'; put 'put ''Lm5vIiwicm9tc2tvZy5ubyIsInJceGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9zdC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJ1b3ZhdC5ubyIsInJ5Z2dlLm5vIiwic2Fs''@;'; put 'put ''YW5nZW4ubm8iLCJzYWxhdC5ubyIsInNceGUxbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8iLCJzYWx0ZGFsLm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJzYXJwc2Jvcmcubm8iLCJzYXVkYS5ubyIsInNh''@;'; put 'put ''dWhlcmFkLm5vIiwic2VsLm5vIiwic2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWVsbGFrLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic2thbmxhbmQubm8iLCJza1x4ZTVubGFuZC5ubyIsInNr''@;'; put 'put ''YXVuLm5vIiwic2tlZHNtby5ubyIsInNraS5ubyIsInNraWVuLm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEubm8iLCJza2lwdHZldC5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tvZGplLm5vIiwic21vbGEubm8iLCJz''@;'; put 'put ''bVx4ZjhsYS5ubyIsInNuYWFzZS5ubyIsInNuXHhlNWFzZS5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbmlsbGZqb3JkLm5vIiwic25vYXNhLm5vIiwic29nbmRhbC5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb2tuZGFsLm5vIiwic29sYS5ubyIsInNvbHVuZC5ubyIs''@;'; put 'put ''InNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwic29yLW9kYWwubm8iLCJzXHhmOHIt''@;'; put 'put ''b2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwic29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnRsYW5kLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5ubyIsInNweWRlYmVyZy5ubyIsInN0''@;'; put 'put ''YW5nZS5ubyIsInN0YXZhbmdlci5ubyIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJzdGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3JkYWwubm8iLCJzdG9yZmpvcmQubm8iLCJzdHJhbmQubm8iLCJz''@;'; put 'put ''dHJhbmRhLm5vIiwic3RyeW4ubm8iLCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlvLm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInRhbmEubm8iLCJiby50ZWxlbWFyay5ubyIsImJceGY4LnRlbGVtYXJrLm5v''@;'; put 'put ''IiwidGltZS5ubyIsInRpbmd2b2xsLm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInRvcnNrZW4ubm8iLCJ0clx4ZTZuYS5ubyIsInRyYW5hLm5v''@;'; put 'put ''IiwidHJhbm95Lm5vIiwidHJhblx4Zjh5Lm5vIiwidHJvYW5kaW4ubm8iLCJ0cm9nc3RhZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHJvbXNhLm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbmRoZWltLm5vIiwidHJ5c2lsLm5vIiwidHZlZGVzdHJhbmQubm8iLCJ0eWRhbC5u''@;'; put 'put ''byIsInR5bnNldC5ubyIsInR5c2Zqb3JkLm5vIiwidHlzbmVzLm5vIiwidHlzdlx4ZTZyLm5vIiwidHlzdmFyLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwidXRzaXJhLm5vIiwidmFhcHN0ZS5ubyIs''@;'; put 'put ''InZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZha3NkYWwubm8iLCJ2YWxsZS5ubyIsInZhbmcubm8iLCJ2YW55bHZl''@;'; put 'put ''bi5ubyIsInZhcmRvLm5vIiwidmFyZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFyZ2dceGUxdC5ubyIsInZhcm95Lm5vIiwidmVmc24ubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2ZXJkYWwubm8iLCJ2ZXJyYW4ubm8i''@;'; put 'put ''LCJ2ZXN0Ynkubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVzdHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5vIiwidmlrbmEubm8iLCJ2aW5kYWZqb3Jk''@;'; put 'put ''Lm5vIiwidm9hZ2F0Lm5vIiwidm9sZGEubm8iLCJ2b3NzLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiY29tLm5yIiwiZWR1Lm5yIiwiZ292Lm5yIiwiaW5mby5uciIsIm5ldC5uciIsIm9yZy5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56IiwiY3JpLm56IiwiZ2Vlay5ueiIsImdlbi5u''@;'; put 'put ''eiIsImdvdnQubnoiLCJoZWFsdGgubnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtXHUwMTAxb3JpLm56IiwibWlsLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20iLCJjb20ub20iLCJlZHUub20iLCJnb3Yub20i''@;'; put 'put ''LCJtZWQub20iLCJtdXNldW0ub20iLCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIsInBhIiwiYWJvLnBhIiwiYWMucGEiLCJjb20ucGEiLCJlZHUucGEiLCJnb2IucGEiLCJpbmcucGEiLCJtZWQucGEiLCJuZXQucGEiLCJub20ucGEiLCJvcmcucGEiLCJzbGQucGEi''@;'; put 'put ''LCJwZSIsImNvbS5wZSIsImVkdS5wZSIsImdvYi5wZSIsIm1pbC5wZSIsIm5ldC5wZSIsIm5vbS5wZSIsIm9yZy5wZSIsInBmIiwiY29tLnBmIiwiZWR1LnBmIiwib3JnLnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwiZWR1LnBoIiwiZ292LnBoIiwiaS5waCIsIm1pbC5waCIsIm5ldC5waCIs''@;'; put 'put ''Im5nby5waCIsIm9yZy5waCIsInBrIiwiYWMucGsiLCJiaXoucGsiLCJjb20ucGsiLCJlZHUucGsiLCJmYW0ucGsiLCJna3AucGsiLCJnb2IucGsiLCJnb2cucGsiLCJnb2sucGsiLCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJnb3YucGsiLCJuZXQucGsiLCJvcmcucGsiLCJ3ZWIucGsi''@;'; put 'put ''LCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFncm8ucGwiLCJhaWQucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1lZGlhLnBsIiwibWlhc3RhLnBsIiwibWlsLnBsIiwibmll''@;'; put 'put ''cnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRtLnBsIiwidG91cmlzbS5wbCIsInRy''@;'; put 'put ''YXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImdyaXcuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwia21wc3AuZ292LnBsIiwia29uc3VsYXQuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwLmdvdi5wbCIsImt3cHNwLmdvdi5wbCIsIm11cC5n''@;'; put 'put ''b3YucGwiLCJtdy5nb3YucGwiLCJvaWEuZ292LnBsIiwib2lybS5nb3YucGwiLCJva2UuZ292LnBsIiwib293Lmdvdi5wbCIsIm9zY2hyLmdvdi5wbCIsIm91bS5nb3YucGwiLCJwYS5nb3YucGwiLCJwaW5iLmdvdi5wbCIsInBpdy5nb3YucGwiLCJwby5nb3YucGwiLCJwci5nb3YucGwiLCJw''@;'; put 'put ''c3AuZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzZG4uZ292LnBsIiwic2tvLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJ1Zy5nb3YucGwiLCJ1Z2ltLmdvdi5wbCIsInVtLmdv''@;'; put 'put ''di5wbCIsInVtaWcuZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsInVzLmdvdi5wbCIsInV3Lmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWYuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0ZC5nb3YucGwiLCJ3aXcuZ292LnBs''@;'; put 'put ''Iiwid2t6Lmdvdi5wbCIsIndzYS5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsIndzc2UuZ292LnBsIiwid3Vvei5nb3YucGwiLCJ3em1pdXcuZ292LnBsIiwienAuZ292LnBsIiwienBpc2RuLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIsImJlZHppbi5wbCIsImJlc2tpZHku''@;'; put 'put ''cGwiLCJiaWFsb3dpZXphLnBsIiwiYmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xhd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIsImRsdWdvbGVrYS5wbCIsImVsYmxh''@;'; put 'put ''Zy5wbCIsImVsay5wbCIsImdsb2dvdy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdhLnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthcnBhY3oucGwiLCJrYXJ0dXp5LnBsIiwia2FzenVi''@;'; put 'put ''eS5wbCIsImthdG93aWNlLnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHprby5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5wbCIsImxhcHkucGwiLCJsZWJvcmsu''@;'; put 'put ''cGwiLCJsZWduaWNhLnBsIiwibGV6YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJpbi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIsIm1pZWxlYy5wbCIsIm1pZWxuby5w''@;'; put 'put ''bCIsIm1yYWdvd28ucGwiLCJuYWtsby5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBsIiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xla2EucGwiLCJvc3Ryb3dpZWMucGwi''@;'; put 'put ''LCJvc3Ryb3d3bGtwLnBsIiwicGlsYS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dpY2UucGwiLCJwb21vcnNraWUucGwiLCJwb21vcnplLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdvcnNrLnBsIiwicHVsYXd5LnBsIiwi''@;'; put 'put ''cmFkb20ucGwiLCJyYXdhLW1hei5wbCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwic2tvY3pvdy5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29zbm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic3RhcmFjaG93aWNlLnBsIiwic3Rhcmdh''@;'; put 'put ''cmQucGwiLCJzdXdhbGtpLnBsIiwic3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIsInVzdGthLnBsIiwid2FsYnJ6eWNo''@;'; put 'put ''LnBsIiwid2FybWlhLnBsIiwid2Fyc3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5wbCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBsIiwiemFnYW4ucGwiLCJ6YXJvdy5w''@;'; put 'put ''bCIsInpnb3JhLnBsIiwiemdvcnplbGVjLnBsIiwicG0iLCJwbiIsImNvLnBuIiwiZWR1LnBuIiwiZ292LnBuIiwibmV0LnBuIiwib3JnLnBuIiwicG9zdCIsInByIiwiYml6LnByIiwiY29tLnByIiwiZWR1LnByIiwiZ292LnByIiwiaW5mby5wciIsImlzbGEucHIiLCJuYW1lLnByIiwibmV0''@;'; put 'put ''LnByIiwib3JnLnByIiwicHJvLnByIiwiYWMucHIiLCJlc3QucHIiLCJwcm9mLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5wcm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3LnBybyIsIm1lZC5wcm8iLCJyZWNo''@;'; put 'put ''dC5wcm8iLCJwcyIsImNvbS5wcyIsImVkdS5wcyIsImdvdi5wcyIsIm5ldC5wcyIsIm9yZy5wcyIsInBsby5wcyIsInNlYy5wcyIsInB0IiwiY29tLnB0IiwiZWR1LnB0IiwiZ292LnB0IiwiaW50LnB0IiwibmV0LnB0Iiwibm9tZS5wdCIsIm9yZy5wdCIsInB1YmwucHQiLCJwdyIsImJlbGF1''@;'; put 'put ''LnB3IiwiY28ucHciLCJlZC5wdyIsImdvLnB3Iiwib3IucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJuZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5xYSIsIm5hbWUucWEiLCJuZXQucWEi''@;'; put 'put ''LCJvcmcucWEiLCJzY2gucWEiLCJyZSIsImFzc28ucmUiLCJjb20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5mby5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3dy5ybyIsInJzIiwiYWMucnMiLCJj''@;'; put 'put ''by5ycyIsImVkdS5ycyIsImdvdi5ycyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJlZHUuc2EiLCJnb3Yuc2EiLCJtZWQuc2EiLCJuZXQuc2EiLCJv''@;'; put 'put ''cmcuc2EiLCJwdWIuc2EiLCJzY2guc2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwiY29tLnNjIiwiZWR1LnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwic2QiLCJjb20uc2QiLCJlZHUuc2QiLCJnb3Yuc2QiLCJpbmZvLnNk''@;'; put 'put ''IiwibWVkLnNkIiwibmV0LnNkIiwib3JnLnNkIiwidHYuc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNlIiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2UiLCJoLnNlIiwiaS5zZSIsImsuc2Ui''@;'; put 'put ''LCJrb21mb3JiLnNlIiwia29tbXVuYWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwibmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJwcmVzcy5zZSIsInIuc2UiLCJzLnNl''@;'; put 'put ''IiwidC5zZSIsInRtLnNlIiwidS5zZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsImVkdS5zZyIsImdvdi5zZyIsIm5ldC5zZyIsIm9yZy5zZyIsInNoIiwiY29tLnNoIiwiZ292LnNoIiwibWlsLnNoIiwibmV0LnNoIiwib3JnLnNoIiwic2kiLCJzaiIsInNr''@;'; put 'put ''Iiwic2wiLCJjb20uc2wiLCJlZHUuc2wiLCJnb3Yuc2wiLCJuZXQuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwiY29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwiZWR1LnNvIiwiZ292LnNvIiwibWUu''@;'; put 'put ''c28iLCJuZXQuc28iLCJvcmcuc28iLCJzciIsInNzIiwiYml6LnNzIiwiY28uc3MiLCJjb20uc3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8uc3QiLCJlZHUuc3QiLCJlbWJhaXhh''@;'; put 'put ''ZGEuc3QiLCJtaWwuc3QiLCJuZXQuc3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3RvbWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5IiwiY29tLnN5IiwiZWR1LnN5Iiwi''@;'; put 'put ''Z292LnN5IiwibWlsLnN5IiwibmV0LnN5Iiwib3JnLnN5Iiwic3oiLCJhYy5zeiIsImNvLnN6Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgiLCJvci50aCIsInRqIiwiYWMudGoi''@;'; put 'put ''LCJiaXoudGoiLCJjby50aiIsImNvbS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwiaW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRsIiwidG0iLCJjby50bSIsImNvbS50''@;'; put 'put ''bSIsImVkdS50bSIsImdvdi50bSIsIm1pbC50bSIsIm5ldC50bSIsIm5vbS50bSIsIm9yZy50bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQudG4iLCJuZXQudG4iLCJvcmcudG4i''@;'; put 'put ''LCJwZXJzby50biIsInRvdXJpc20udG4iLCJ0byIsImNvbS50byIsImVkdS50byIsImdvdi50byIsIm1pbC50byIsIm5ldC50byIsIm9yZy50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVkdS50ciIsImdlbi50ciIsImdvdi50''@;'; put 'put ''ciIsImluZm8udHIiLCJrMTIudHIiLCJrZXAudHIiLCJtaWwudHIiLCJuYW1lLnRyIiwibmV0LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiYml6LnR0IiwiY28udHQiLCJjb20udHQiLCJl''@;'; put 'put ''ZHUudHQiLCJnb3YudHQiLCJpbmZvLnR0IiwibWlsLnR0IiwibmFtZS50dCIsIm5ldC50dCIsIm9yZy50dCIsInByby50dCIsInR2IiwidHciLCJjbHViLnR3IiwiY29tLnR3IiwiZWJpei50dyIsImVkdS50dyIsImdhbWUudHciLCJnb3YudHciLCJpZHYudHciLCJtaWwudHciLCJuZXQudHci''@;'; put 'put ''LCJvcmcudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJnb3YudWEiLCJpbi51YSIsIm5ldC51''@;'; put 'put ''YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51YSIsImRuLnVhIiwiZG5lcHJvcGV0''@;'; put 'put ''cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEiLCJraG1lbG55dHNreWkudWEiLCJr''@;'; put 'put ''aWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcm9weXZueXRza3lpLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2sudWEiLCJsdWhhbnNrLnVhIiwibHV0c2sudWEiLCJsdi51YSIsImx2aXYudWEi''@;'; put 'put ''LCJtay51YSIsIm15a29sYWl2LnVhIiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZhLnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwic2V2YXN0b3BvbC51YSIsInNtLnVh''@;'; put 'put ''Iiwic3VteS51YSIsInRlLnVhIiwidGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidXpoaG9yb2QudWEiLCJ2aW5uaWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFrYXJwYXR0aWEudWEiLCJ6YXBvcml6aHpoZS51YSIsInph''@;'; put 'put ''cG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJhYy51ZyIsImNvLnVnIiwiY29tLnVnIiwiZ28udWciLCJuZS51ZyIsIm9yLnVnIiwib3JnLnVnIiwic2MudWciLCJ1ayIsImFjLnVrIiwiY28udWsiLCJnb3YudWsiLCJsdGQu''@;'; put 'put ''dWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVzIiwiYXMudXMiLCJhei51cyIsImNh''@;'; put 'put ''LnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1lLnVzIiwibWkudXMiLCJtbi51cyIs''@;'; put 'put ''Im1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIsInNkLnVzIiwidG4udXMiLCJ0eC51''@;'; put 'put ''cyIsInV0LnVzIiwidmEudXMiLCJ2aS51cyIsInZ0LnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIuY28udXMiLCJrMTIuY3QudXMiLCJr''@;'; put 'put ''MTIuZGMudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJrMTIubWQudXMiLCJrMTIubWUudXMi''@;'; put 'put ''LCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMiLCJrMTIub2gudXMiLCJrMTIub2su''@;'; put 'put ''dXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmEudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIud2EudXMiLCJrMTIud2kudXMiLCJjYy5hay51cyIsImxpYi5h''@;'; put 'put ''ay51cyIsImNjLmFsLnVzIiwibGliLmFsLnVzIiwiY2MuYXIudXMiLCJsaWIuYXIudXMiLCJjYy5hcy51cyIsImxpYi5hcy51cyIsImNjLmF6LnVzIiwibGliLmF6LnVzIiwiY2MuY2EudXMiLCJsaWIuY2EudXMiLCJjYy5jby51cyIsImxpYi5jby51cyIsImNjLmN0LnVzIiwibGliLmN0LnVz''@;'; put 'put ''IiwiY2MuZGMudXMiLCJsaWIuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVzIiwiY2MubGEudXMiLCJjYy5tYS51''@;'; put 'put ''cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVzIiwiY2MubnYudXMiLCJjYy5ueS51''@;'; put 'put ''cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52YS51cyIsImNjLnZpLnVzIiwiY2MudnQudXMiLCJjYy53YS51''@;'; put 'put ''cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImsxMi53eS51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIsImxpYi5rcy51cyIsImxpYi5reS51''@;'; put 'put ''cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51cyIsImxpYi5uaC51cyIsImxpYi5u''@;'; put 'put ''ai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50bi51cyIsImxpYi50eC51cyIsImxp''@;'; put 'put ''Yi51dC51cyIsImxpYi52YS51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsImNodHIuazEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsInB2dC5rMTIubWEudXMiLCJhbm4tYXJib3IubWkudXMiLCJjb2cubWkudXMiLCJk''@;'; put 'put ''c3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJjby51eiIsImNvbS51eiIsIm5ldC51''@;'; put 'put ''eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJlZHUudmMiLCJnb3YudmMiLCJtaWwudmMiLCJuZXQudmMiLCJvcmcudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUiLCJnb2IudmUiLCJnb3YudmUiLCJp''@;'; put 'put ''bmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmkiLCJvcmcudmkiLCJ2biIsImFjLnZu''@;'; put 'put ''IiwiYWkudm4iLCJiaXoudm4iLCJjb20udm4iLCJlZHUudm4iLCJnb3Yudm4iLCJoZWFsdGgudm4iLCJpZC52biIsImluZm8udm4iLCJpbnQudm4iLCJpby52biIsIm5hbWUudm4iLCJuZXQudm4iLCJvcmcudm4iLCJwcm8udm4iLCJhbmdpYW5nLnZuIiwiYmFjZ2lhbmcudm4iLCJiYWNrYW4u''@;'; put 'put ''dm4iLCJiYWNsaWV1LnZuIiwiYmFjbmluaC52biIsImJhcmlhLXZ1bmd0YXUudm4iLCJiZW50cmUudm4iLCJiaW5oZGluaC52biIsImJpbmhkdW9uZy52biIsImJpbmhwaHVvYy52biIsImJpbmh0aHVhbi52biIsImNhbWF1LnZuIiwiY2FudGhvLnZuIiwiY2FvYmFuZy52biIsImRha2xhay52''@;'; put 'put ''biIsImRha25vbmcudm4iLCJkYW5hbmcudm4iLCJkaWVuYmllbi52biIsImRvbmduYWkudm4iLCJkb25ndGhhcC52biIsImdpYWxhaS52biIsImhhZ2lhbmcudm4iLCJoYWlkdW9uZy52biIsImhhaXBob25nLnZuIiwiaGFuYW0udm4iLCJoYW5vaS52biIsImhhdGluaC52biIsImhhdWdpYW5n''@;'; put 'put ''LnZuIiwiaG9hYmluaC52biIsImh1bmd5ZW4udm4iLCJraGFuaGhvYS52biIsImtpZW5naWFuZy52biIsImtvbnR1bS52biIsImxhaWNoYXUudm4iLCJsYW1kb25nLnZuIiwibGFuZ3Nvbi52biIsImxhb2NhaS52biIsImxvbmdhbi52biIsIm5hbWRpbmgudm4iLCJuZ2hlYW4udm4iLCJuaW5o''@;'; put 'put ''YmluaC52biIsIm5pbmh0aHVhbi52biIsInBodXRoby52biIsInBodXllbi52biIsInF1YW5nYmluaC52biIsInF1YW5nbmFtLnZuIiwicXVhbmduZ2FpLnZuIiwicXVhbmduaW5oLnZuIiwicXVhbmd0cmkudm4iLCJzb2N0cmFuZy52biIsInNvbmxhLnZuIiwidGF5bmluaC52biIsInRoYWli''@;'; put 'put ''aW5oLnZuIiwidGhhaW5ndXllbi52biIsInRoYW5oaG9hLnZuIiwidGhhbmhwaG9ob2NoaW1pbmgudm4iLCJ0aHVhdGhpZW5odWUudm4iLCJ0aWVuZ2lhbmcudm4iLCJ0cmF2aW5oLnZuIiwidHV5ZW5xdWFuZy52biIsInZpbmhsb25nLnZuIiwidmluaHBodWMudm4iLCJ5ZW5iYWkudm4iLCJ2''@;'; put 'put ''dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJlZHUud3MiLCJnb3Yud3MiLCJuZXQud3MiLCJvcmcud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3MFx1MDU2MVx1MDU3NSIsIlx1MDlh''@;'; put 'put ''Y1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1''@;'; put 'put ''MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1MDNiNVx1MDNiYiIsIlx1OTk5OVx1''@;'; put 'put ''NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQuXHU5OTk5XHU2ZTJmIiwiXHU3ZGIyXHU3ZDYxLlx1OTk5''@;'; put 'put ''OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDk0Ylx1MDkyNCIsIlx1''@;'; put 'put ''MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGMyZFx1MGMzZVx1MGMzMFx1''@;'; put 'put ''MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1''@;'; put 'put ''MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1MGVhNVx1MGViMlx1MGVhNyIsIlx1''@;'; put 'put ''MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIsIlx1NmZiM1x1OTU4MCIsIlx1NmZi''@;'; put 'put ''M1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIs''@;'; put 'put ''Ilx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDM0Llx1MDQ0MVx1MDQ0MFx1MDQz''@;'; put 'put ''MSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYzN1x1MDYzMSIsIlx1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYz''@;'; put 'put ''OVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1MGJjZCIsIlx1MDYzM1x1MDY0OFx1''@;'; put 'put ''MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFcdTBlMzRcdTBlMDguXHUwZTQ0XHUw''@;'; put 'put ''ZTE3XHUwZTIyIiwiXHUwZTQwXHUwZTE5XHUwZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBlMzIuXHUwZTQ0XHUwZTE3XHUwZTIy''@;'; put 'put ''IiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQzYVx1MDQ0MCIsIlx1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibWlsLnllIiwibmV0LnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3JvbmRhci56YSIsImxhdy56YSIsIm1p''@;'; put 'put ''bC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292LnptIiwiaW5mby56bSIsIm1pbC56bSIs''@;'; put 'put ''Im5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJpIiwiYWNhZGVteSIsImFjY2VudHVy''@;'; put 'put ''ZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRzIiwiYWR1bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFrZG4iLCJhbGliYWJhIiwiYWxpcGF5''@;'; put 'put ''IiwiYWxsZmluYW56IiwiYWxsc3RhdGUiLCJhbGx5IiwiYWxzYWNlIiwiYWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFuYWx5dGljcyIsImFuZHJvaWQiLCJhbnF1YW4iLCJhbnoi''@;'; put 'put ''LCJhb2wiLCJhcGFydG1lbnRzIiwiYXBwIiwiYXBwbGUiLCJhcXVhcmVsbGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5IiwiYXVjdGlvbiIsImF1ZGkiLCJhdWRpYmxlIiwiYXVkaW8i''@;'; put 'put ''LCJhdXNwb3N0IiwiYXV0aG9yIiwiYXV0byIsImF1dG9zIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJjZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZvb3QiLCJiYXJnYWlucyIsImJhc2Vi''@;'; put 'put ''YWxsIiwiYmFza2V0YmFsbCIsImJhdWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJlcmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwiYmlibGUiLCJiaWQiLCJiaWtlIiwi''@;'; put 'put ''YmluZyIsImJpbmdvIiwiYmlvIiwiYmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFzIiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJvbmQiLCJib28iLCJib29rIiwiYm9v''@;'; put 'put ''a2luZyIsImJvc2NoIiwiYm9zdGlrIiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90aGVyIiwiYnJ1c3NlbHMiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVzaW5lc3MiLCJidXkiLCJidXp6Iiwi''@;'; put 'put ''YnpoIiwiY2FiIiwiY2FmZSIsImNhbCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5vbiIsImNhcGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2FyZWVyIiwiY2FyZWVycyIsImNhcnMi''@;'; put 'put ''LCJjYXNhIiwiY2FzZSIsImNhc2giLCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwiY2hhdCIsImNoZWFwIiwiY2hpbnRh''@;'; put 'put ''aSIsImNocmlzdG1hcyIsImNocm9tZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwiY2l0aSIsImNpdGljIiwiY2l0eSIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNsb3RoaW5nIiwiY2xvdWQiLCJjbHVi''@;'; put 'put ''IiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRvcyIsImNvbnN0cnVjdGlvbiIsImNvbnN1bHRpbmciLCJjb250YWN0''@;'; put 'put ''IiwiY29udHJhY3RvcnMiLCJjb29raW5nIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJjcnMiLCJjcnVpc2UiLCJjcnVpc2Vz''@;'; put 'put ''IiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4iLCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxsIiwiZGVsb2l0dGUiLCJkZWx0YSIs''@;'; put 'put ''ImRlbW9jcmF0IiwiZGVudGFsIiwiZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQiLCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJkbnAiLCJkb2NzIiwiZG9jdG9yIiwi''@;'; put 'put ''ZG9nIiwiZG9tYWlucyIsImRvdCIsImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJlbWVyY2siLCJlbmVyZ3kiLCJlbmdp''@;'; put 'put ''bmVlciIsImVuZ2luZWVyaW5nIiwiZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVzcSIsImVzdGF0ZSIsImV1cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQiLCJleHByZXNzIiwiZXh0cmFzcGFj''@;'; put 'put ''ZSIsImZhZ2UiLCJmYWlsIiwiZmFpcndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFzdCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpZGVsaXR5IiwiZmlkbyIsImZpbG0iLCJmaW5hbCIs''@;'; put 'put ''ImZpbmFuY2UiLCJmaW5hbmNpYWwiLCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNoIiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwiZm9vZCIsImZvb3RiYWxsIiwiZm9y''@;'; put 'put ''ZCIsImZvcmV4IiwiZm9yc2FsZSIsImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJmcmwiLCJmcm9nYW5zIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIsImZ5aSIsImdhbCIsImdhbGxlcnki''@;'; put 'put ''LCJnYWxsbyIsImdhbGx1cCIsImdhbWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdiaXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNzIiwiZ2xlIiwiZ2xvYmFsIiwiZ2xv''@;'; put 'put ''Ym8iLCJnbWFpbCIsImdtYmgiLCJnbW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2ludCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwiZ3JlZW4iLCJncmlwZSIsImdyb2Nl''@;'; put 'put ''cnkiLCJncm91cCIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxzaW5raSIsImhlcmUiLCJoZXJtZXMi''@;'; put 'put ''LCJoaXBob3AiLCJoaXNhbWl0c3UiLCJoaXRhY2hpIiwiaGl2IiwiaGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhvcnNlIiwiaG9zcGl0YWwiLCJob3N0IiwiaG9zdGluZyIsImhv''@;'; put 'put ''dCIsImhvdGVscyIsImhvdG1haWwiLCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1IiwiaWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1vYmlsaWVuIiwiaW5jIiwiaW5kdXN0''@;'; put 'put ''cmllcyIsImluZmluaXRpIiwiaW5nIiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1lbnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1bCIsIml0YXUiLCJpdHYiLCJqYWd1''@;'; put 'put ''YXIiLCJqYXZhIiwiamNiIiwiamVlcCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2FuIiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vycnlob3RlbHMiLCJrZXJyeWxvZ2lz''@;'; put 'put ''dGljcyIsImtlcnJ5cHJvcGVydGllcyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29tYXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lvdG8iLCJsYWNhaXhhIiwibGFtYm9y''@;'; put 'put ''Z2hpbmkiLCJsYW1lciIsImxhbmNhc3RlciIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlubyIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdhbCIsImxlZ28iLCJsZXh1cyIsImxn''@;'; put 'put ''YnQiLCJsaWRsIiwibGlmZSIsImxpZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJsb2FuIiwibG9hbnMiLCJsb2NrZXIi''@;'; put 'put ''LCJsb2N1cyIsImxvbCIsImxvbmRvbiIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5jaWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJtYW4iLCJtYW5hZ2VtZW50IiwibWFu''@;'; put 'put ''Z28iLCJtYXAiLCJtYXJrZXQiLCJtYXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1lbiIsIm1lbnUiLCJtZXJjayIsIm1l''@;'; put 'put ''cmNrbXNkIiwibWlhbWkiLCJtaWNyb3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJtbWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9ybW9uIiwibW9ydGdhZ2UiLCJtb3Nj''@;'; put 'put ''b3ciLCJtb3RvIiwibW90b3JjeWNsZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibmFiIiwibmFnb3lhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5ldXN0YXIiLCJuZXciLCJuZXdzIiwibmV4dCIsIm5leHRk''@;'; put 'put ''aXJlY3QiLCJuZXh1cyIsIm5mbCIsIm5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJuaW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydG9uIiwibm93Iiwibm93cnV6Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMiLCJvYmkiLCJvYnNlcnZlciIsIm9m''@;'; put 'put ''ZmljZSIsIm9raW5hd2EiLCJvbGF5YW4iLCJvbGF5YW5ncm91cCIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9ubGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3RzdWthIiwib3R0Iiwib3ZoIiwicGFn''@;'; put 'put ''ZSIsInBhbmFzb25pYyIsInBhcmlzIiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBheSIsInBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJwaG90b3MiLCJwaHlzaW8iLCJwaWNz''@;'; put 'put ''IiwicGljdGV0IiwicGljdHVyZXMiLCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIsInBvcm4iLCJwcmFtZXJpY2EiLCJw''@;'; put 'put ''cmF4aSIsInByZXNzIiwicHJpbWUiLCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUiLCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBvbiIsInF1ZWJlYyIsInF1ZXN0Iiwi''@;'; put 'put ''cmFjaW5nIiwicmFkaW8iLCJyZWFkIiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVzIiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4iLCJyZW50IiwicmVudGFscyIsInJl''@;'; put 'put ''cGFpciIsInJlcG9ydCIsInJlcHVibGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmlld3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9ja3MiLCJyb2RlbyIsInJvZ2VycyIsInJvb20iLCJyc3ZwIiwicnVn''@;'; put 'put ''YnkiLCJydWhyIiwicnVuIiwicndlIiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2FmZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNhcCIsInNhcmwiLCJzYXMiLCJzYXZl''@;'; put 'put ''Iiwic2F4byIsInNiaSIsInNicyIsInNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3VyaXR5Iiwic2VlayIsInNlbGVjdCIsInNl''@;'; put 'put ''bmVyIiwic2VydmljZXMiLCJzZXZlbiIsInNldyIsInNleCIsInNleHkiLCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaWxrIiwic2luYSIsInNpbmdsZXMiLCJzaXRl''@;'; put 'put ''Iiwic2tpIiwic2tpbiIsInNreSIsInNreXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJzb2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNveSIsInNwYSIsInNwYWNlIiwic3Bv''@;'; put 'put ''cnQiLCJzcG90Iiwic3JsIiwic3RhZGEiLCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3RyZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHlsZSIsInN1Y2tzIiwic3VwcGxpZXMi''@;'; put 'put ''LCJzdXBwbHkiLCJzdXBwb3J0Iiwic3VyZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFyZ2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwidGF0dG9vIiwidGF4IiwidGF4aSIs''@;'; put 'put ''InRjaSIsInRkayIsInRlYW0iLCJ0ZWNoIiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGptYXh4IiwidGp4IiwidGttYXh4Iiwi''@;'; put 'put ''dG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGVycyIsInRyYXZlbGVyc2luc3VyYW5jZSIs''@;'; put 'put ''InRydXN0IiwidHJ2IiwidHViZSIsInR1aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMiLCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZlbnR1cmVzIiwidmVyaXNpZ24iLCJ2''@;'; put 'put ''ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2aWFqZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZsYWFuZGVyZW4iLCJ2b2RrYSIsInZvbHZvIiwidm90ZSIsInZvdGluZyIsInZvdG8iLCJ2''@;'; put 'put ''b3lhZ2UiLCJ3YWxlcyIsIndhbG1hcnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIsIndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZCIsIndlZGRpbmciLCJ3ZWlibyIsIndlaXIiLCJ3aG9zd2hvIiwi''@;'; put 'put ''d2llbiIsIndpa2kiLCJ3aWxsaWFtaGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNrbHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhlcm94IiwieGlodWFuIiwieGluIiwi''@;'; put 'put ''XHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZiXHU1MzY2IiwiXHUwNjQ1XHUwNjQ4''@;'; put 'put ''XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwIiwiXHUw''@;'; put 'put ''NDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwiXHU2NWY2XHU1YzFhIiwiXHU1ZmFl''@;'; put 'put ''XHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRlXHUzMGJlXHUzMGYzIiwiXHVjMGJj''@;'; put 'put ''XHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQzXHUwNjQ4XHUwNjQ1IiwiXHU0ZTJk''@;'; put 'put ''XHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5IiwiXHU3ZjUxXHU1ZTk3IiwiXHUwOTM4''@;'; put 'put ''XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2NzNhIiwiXHUwNjI3XHUwNjMxXHUw''@;'; put 'put ''NjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUwNjQzXHUwNjI3XHUwNjJiXHUwNjQ4''@;'; put 'put ''XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5XHUwNjMxXHUwNjI4IiwiXHU2NzNh''@;'; put 'put ''XHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUzMGViIiwiXHU0ZTE2XHU3NTRjIiwi''@;'; put 'put ''XHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2''@;'; put 'put ''MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIsInlva29oYW1hIiwieW91IiwieW91''@;'; put 'put ''dHViZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjby5rcmQiLCJlZHUua3JkIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImtyYWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5wbCIsImxpYi5kZS51cyIsIjEyY2hh''@;'; put 'put ''cnMuZGV2IiwiMTJjaGFycy5pdCIsIjEyY2hhcnMucHJvIiwiY2MudWEiLCJpbmYudWEiLCJsdGQudWEiLCI2MTEudG8iLCJhMmhvc3RlZC5jb20iLCJjcHNlcnZlci5jb20iLCJhYWEudm9ka2EiLCIqLm9uLWFjb3JuLmlvIiwiYWN0aXZldHJhaWwuYml6IiwiYWRhcHRhYmxlLmFwcCIsImFk''@;'; put 'put ''b2JlYWVtY2xvdWQuY29tIiwiKi5kZXYuYWRvYmVhZW1jbG91ZC5jb20iLCJhZW0ubGl2ZSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJhZW0ucGFnZSIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYWRvYmVpby1zdGF0aWMubmV0IiwiYWRvYmVpb3J1bnRpbWUubmV0IiwiYWZy''@;'; put 'put ''aWNhLmNvbSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYWthZG5zLm5ldCIsImFrYW1haS5uZXQiLCJha2FtYWktc3RhZ2luZy5uZXQiLCJha2FtYWllZGdlLm5ldCIsImFrYW1haWVkZ2Ut''@;'; put 'put ''c3RhZ2luZy5uZXQiLCJha2FtYWloZC5uZXQiLCJha2FtYWloZC1zdGFnaW5nLm5ldCIsImFrYW1haW9yaWdpbi5uZXQiLCJha2FtYWlvcmlnaW4tc3RhZ2luZy5uZXQiLCJha2FtYWl6ZWQubmV0IiwiYWthbWFpemVkLXN0YWdpbmcubmV0IiwiZWRnZWtleS5uZXQiLCJlZGdla2V5LXN0YWdp''@;'; put 'put ''bmcubmV0IiwiZWRnZXN1aXRlLm5ldCIsImVkZ2VzdWl0ZS1zdGFnaW5nLm5ldCIsImJhcnN5LmNhIiwiKi5jb21wdXRlLmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEubmV0IiwibXlhbWF6ZS5uZXQiLCJleGVj''@;'; put 'put ''dXRlLWFwaS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVj''@;'; put 'put ''dXRlLWFwaS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''eGVjdXRlLWFwaS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhl''@;'; put 'put ''Y3V0ZS1hcGkuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuaWwt''@;'; put 'put ''Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJjbG91ZGZyb250Lm5ldCIsImF1dGguYWYtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMS5hbWF6b25j''@;'; put 'put ''b2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwi''@;'; put 'put ''YXV0aC5hcC1zb3V0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtNC5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgu''@;'; put 'put ''Y2EtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5jYS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1ub3J0aC0xLmFtYXpv''@;'; put 'put ''bmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUt''@;'; put 'put ''d2VzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5pbC1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguc2EtZWFzdC0xLmFtYXpvbmNvZ25p''@;'; put 'put ''dG8uY29tIiwiYXV0aC51cy1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1m''@;'; put 'put ''aXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0''@;'; put 'put ''LTIuYW1hem9uY29nbml0by5jb20iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbS5jbiIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJub3RlYm9va3Mt''@;'; put 'put ''cHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYWYtc291dGgtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtZWFzdC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Qu''@;'; put 'put ''YXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNv''@;'; put 'put ''dXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2Qu''@;'; put 'put ''YXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhl''@;'; put 'put ''YXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''bm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2EtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmNhLXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1w''@;'; put 'put ''cm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXNvdXRoLTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0z''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmls''@;'; put 'put ''LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJh''@;'; put 'put ''cHB1aS1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''bXJub3RlYm9va3MtcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcmFwcHVpLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1nb3Ytd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tz''@;'; put 'put ''LXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRp''@;'; put 'put ''by1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiKi5jbi1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouY24tbm9ydGh3ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5hZi1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtZWFzdC0x''@;'; put 'put ''LmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGgtMS5haXJm''@;'; put 'put ''bG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTMuYWlyZmxvdy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtNC5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCIqLmV1LWNlbnRyYWwtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3Qt''@;'; put 'put ''MS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmlsLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLWNlbnRyYWwtMS5haXJmbG93LmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCIqLm1lLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5zYS1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy13ZXN0''@;'; put 'put ''LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1kZXByZWNhdGVkLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5j''@;'; put 'put ''biIsInMzLW9iamVjdC1sYW1iZGEuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5j''@;'; put 'put ''bi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20u''@;'; put 'put ''Y24iLCJzMy13ZWJzaXRlLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFm''@;'; put 'put ''LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hZi1zb3V0aC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLWVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0''@;'; put 'put ''LWxhbWJkYS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEu''@;'; put 'put ''YXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRo''@;'; put 'put ''ZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNp''@;'; put 'put ''dGUuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0''@;'; put 'put ''ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFs''@;'; put 'put ''c3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFw''@;'; put 'put ''LXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVh''@;'; put 'put ''c3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw''@;'; put 'put ''b2ludC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAt''@;'; put 'put ''c291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFs''@;'; put 'put ''c3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1h''@;'; put 'put ''Y2Nlc3Nwb2ludC1maXBzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFj''@;'; put 'put ''ay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMu''@;'; put 'put ''Y2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9p''@;'; put 'put ''bnQuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLWFj''@;'; put 'put ''Y2Vzc3BvaW50LmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1jZW50cmFsLTIuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1u''@;'; put 'put ''b3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtbm9ydGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXNvdXRoLTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1z''@;'; put 'put ''b3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0''@;'; put 'put ''YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC5ldS13''@;'; put 'put ''ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNr''@;'; put 'put ''LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTMuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuaWwt''@;'; put 'put ''Y2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLW9iamVjdC1sYW1iZGEubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5tZS1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUubWUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMuYW1hem9uYXdzLmNvbSIsInMzLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMy5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LWNlbnRyYWwtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11''@;'; put 'put ''cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIm1yYXAuYWNjZXNzcG9pbnQuczMtZ2xvYmFsLmFtYXpvbmF3cy5jb20iLCJzMy1tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1zYS1lYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNp''@;'; put 'put ''dGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRl''@;'; put 'put ''LXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0yLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnNhLWVhc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZGVw''@;'; put 'put ''cmVjYXRlZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1l''@;'; put 'put ''YXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1''@;'; put 'put ''YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFs''@;'; put 'put ''c3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1maXBzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMu''@;'; put 'put ''dXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51''@;'; put 'put ''cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu''@;'; put 'put ''dC1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFjY2Vzc3BvaW50LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2Jq''@;'; put 'put ''ZWN0LWxhbWJkYS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFw''@;'; put 'put ''LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS1jZW50cmFsLTEu''@;'; put 'put ''c2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcu''@;'; put 'put ''dXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMi5zYWdl''@;'; put 'put ''bWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJu''@;'; put 'put ''b3RlYm9vay5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC00LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29r''@;'; put 'put ''LWZpcHMuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LWNlbnRy''@;'; put 'put ''YWwtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJu''@;'; put 'put ''b3RlYm9vay5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLm1lLXNvdXRoLTEu''@;'; put 'put ''c2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3Rl''@;'; put 'put ''Ym9vay1maXBzLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9v''@;'; put 'put ''ay1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13''@;'; put 'put ''ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsIm5vdGVib29rLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLWVhc3QtMS5zYWdlbWFrZXIu''@;'; put 'put ''YXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1z''@;'; put 'put ''b3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1jZW50cmFsLTEuc2FnZW1h''@;'; put 'put ''a2VyLmF3cyIsInN0dWRpby5ldS1ub3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTIuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uc2EtZWFz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwi''@;'; put 'put ''c3R1ZGlvLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jbi1ub3J0aC0xLnNh''@;'; put 'put ''Z2VtYWtlci5jb20uY24iLCJzdHVkaW8uY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsIiouZXhwZXJpbWVudHMuc2FnZW1ha2VyLmF3cyIsImFuYWx5dGljcy1nYXRld2F5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVh''@;'; put 'put ''c3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJh''@;'; put 'put ''bmFseXRpY3MtZ2F0ZXdheS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy1lYXN0LTIuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiYW1wbGlmeWFwcC5jb20iLCIqLmF3c2FwcHJ1bm5lci5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYWYtc291''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmll''@;'; put 'put ''dy1hc3NldHMuY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFw''@;'; put 'put ''LW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29t''@;'; put 'put ''Iiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xv''@;'; put 'put ''dWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGhl''@;'; put 'put ''YXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5jYS1jZW50cmFsLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInZmcy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5l''@;'; put 'put ''dS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3Vk''@;'; put 'put ''OS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''IndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5l''@;'; put 'put ''dS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''dmZzLmNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkubWUtc291dGgtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0''@;'; put 'put ''cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtZWFzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXct''@;'; put 'put ''YXNzZXRzLmNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImF3c2FwcHMuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiY24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYWYtc291dGgtMS5lbGFzdGlj''@;'; put 'put ''YmVhbnN0YWxrLmNvbSIsImFwLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFw''@;'; put 'put ''LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJjYS1jZW50cmFsLTEuZWxhc3Rp''@;'; put 'put ''Y2JlYW5zdGFsay5jb20iLCJldS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1ub3J0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMi5l''@;'; put 'put ''bGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImlsLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIm1lLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0''@;'; put 'put ''LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3YtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIs''@;'; put 'put ''InVzLXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiKi5wcml2YXRlLnJlcG9zdC5hd3MiLCJlZXJvLm9ubGluZSIsImVlcm8tc3RhZ2Uub25saW5lIiwi''@;'; put 'put ''YXBpZ2VlLmlvIiwicGFuZWwuZGV2Iiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsImY1LnNpIiwiYXJ2YW5lZGdlLmlyIiwidXNlci5hc2VpbmV0Lm5lLmpwIiwiZ3YudmMi''@;'; put 'put ''LCJkLmd2LnZjIiwidXNlci5wYXJ0eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5wcm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRlZC5wYWdlIiwibXlmcml0ei5saW5r''@;'; put 'put ''IiwibXlmcml0ei5uZXQiLCJvbmF2c3RhY2submV0IiwiKi5hd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFsZW5hLWRldmljZXMuY29tIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hvcC5qcCIsImZhc2hpb25zdG9yZS5q''@;'; put 'put ''cCIsImhhbmRjcmFmdGVkLmpwIiwia2F3YWlpc2hvcC5qcCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsImJlYWdsZWJvYXJkLmlvIiwiKi5iZWdldC5hcHAiLCJwYWdlcy5nYXkiLCJibnIubGEiLCJiaXRidWNrZXQuaW8iLCJibGFj''@;'; put 'put ''a2JhdWRjZG4ubmV0Iiwib2YuamUiLCJibHVlYml0ZS5pbyIsImJvb21sYS5uZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVhcmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJzcXVhcmU3Lm5ldCIsIioucy5icmF2''@;'; put 'put ''ZS5pbyIsInNob3AuYnJlbmRseS5ociIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNhZmpzLmNvbSIsImNhbnZhLWFwcHMu''@;'; put 'put ''Y24iLCIqLm15LmNhbnZhc2l0ZS5jbiIsImNhbnZhLWFwcHMuY29tIiwiKi5teS5jYW52YS5zaXRlIiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFwaS5nb3YudWsiLCJjZG43Ny1zdG9yYWdlLmNvbSIsInJzYy5jb250ZW50cHJveHk5LmN6Iiwici5j''@;'; put 'put ''ZG43Ny5uZXQiLCJjZG43Ny1zc2wubmV0IiwiYy5jZG43Ny5vcmciLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiemEuYnoiLCJici5jb20iLCJjbi5jb20iLCJkZS5jb20iLCJldS5jb20iLCJqcG4uY29tIiwibWV4LmNvbSIsInJ1LmNvbSIsInNhLmNv''@;'; put 'put ''bSIsInVrLmNvbSIsInVzLmNvbSIsInphLmNvbSIsImNvbS5kZSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsInNlLm5ldCIsInVrLm5ldCIsImFlLm9yZyIsImNvbS5zZSIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0iLCJjbGVyay5hcHAiLCJjbGVya3N0''@;'; put 'put ''YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGV2ZXJhcHBzLmNjIiwiKi5zZXJ2aWNlcy5jbGV2ZXItY2xvdWQuY29tIiwiY2xldmVyYXBwcy5pbyIsImNsZXZlcmFwcHMudGVjaCIsImNsaWNrcmlzaW5nLm5ldCIs''@;'; put 'put ''ImNsb3VkbnMuYXNpYSIsImNsb3VkbnMuYmUiLCJjbG91ZC1pcC5iaXoiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2MiLCJjbG91ZG5zLmNoIiwiY2xvdWRucy5jbCIsImNsb3VkbnMuY2x1YiIsImRuc2Fici5jb20iLCJpcC1kZG5zLmNvbSIsImNsb3VkbnMuY3giLCJjbG91ZG5zLmV1Iiwi''@;'; put 'put ''Y2xvdWRucy5pbiIsImNsb3VkbnMuaW5mbyIsImRkbnMtaXAubmV0IiwiZG5zLWNsb3VkLm5ldCIsImRucy1keW5hbWljLm5ldCIsImNsb3VkbnMubnoiLCJjbG91ZG5zLm9yZyIsImlwLWR5bmFtaWMub3JnIiwiY2xvdWRucy5waCIsImNsb3VkbnMucHJvIiwiY2xvdWRucy5wdyIsImNsb3Vk''@;'; put 'put ''bnMudXMiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCIqLmNsb3VkZXJhLnNpdGUiLCJjZi1pcGZzLmNvbSIsImNs''@;'; put 'put ''b3VkZmxhcmUtaXBmcy5jb20iLCJ0cnljbG91ZGZsYXJlLmNvbSIsInBhZ2VzLmRldiIsInIyLmRldiIsIndvcmtlcnMuZGV2IiwiY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZWFueWNhc3QubmV0IiwiY2RuLmNsb3VkZmxhcmVjbi5uZXQiLCJj''@;'; put 'put ''ZG4uY2xvdWRmbGFyZWdsb2JhbC5uZXQiLCJjdXN0LmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLmxwZy5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5ybWEuY2xvdWRzY2FsZS5jaCIsInduZXh0LmFwcCIsImNucHkuZ2RuIiwiKi5vdGFwLmNvIiwiY28uY2EiLCJjby5jb20iLCJjb2RlYmVyZy5w''@;'; put 'put ''YWdlIiwiY3NiLmFwcCIsInByZXZpZXcuY3NiLmFwcCIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVyLm5sIiwiY3RmY2xvdWQubmV0IiwiY29udmV4LnNpdGUiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImludC5ydSIsIm1pbC5ydSIsInRlc3Qu''@;'; put 'put ''cnUiLCJkeW4uY29zaWRucy5kZSIsImRuc3VwZGF0ZXIuZGUiLCJkeW5hbWlzY2hlcy1kbnMuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1pLW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJzdGF0aWMtYWNjZXNzLm5ldCIsImNy''@;'; put 'put ''YWZ0Lm1lIiwicmVhbG0uY3oiLCJvbi5jcmlzcC5lbWFpbCIsIiouY3J5cHRvbm9taWMubmV0IiwiY3Vydi5kZXYiLCJjZm9sa3MucGwiLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJwbGF0Zm9ybTAuYXBwIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3JrLnNpdGUiLCJiaXouZGsiLCJjby5k''@;'; put 'put ''ayIsImZpcm0uZGsiLCJyZWcuZGsiLCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGFya2xhbmcuaW8iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0YWRldGVjdC5jb20iLCJlZGdlc3RhY2subWUiLCJkYXR0b2xvY2FsLmNv''@;'; put 'put ''bSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW4taXAyNC5kZSIsImR5bmRuczEuZGUiLCJob21lLXdlYnNlcnZl''@;'; put 'put ''ci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWJpYW4ubmV0IiwiZGVmaW5pbWEuaW8iLCJkZWZpbmltYS5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIsImRldGEuYXBwIiwiZGV0YS5kZXYi''@;'; put 'put ''LCJkZmlybWEucGwiLCJka29udG8ucGwiLCJ5b3UyLnBsIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwidXMua2ciLCJyc3MubXkuaWQiLCJkaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNjb3Jkc2V6LmNvbSIsImpvemkuYml6''@;'; put 'put ''IiwiZG5zaG9tZS5kZSIsIm9ubGluZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJkcmVhbWhvc3RlcnMuY29tIiwiZHVydW1pcy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5vcmciLCJkeS5maSIsInR1bmsub3Jn''@;'; put 'put ''IiwiZHluZG5zLmJpeiIsImZvci1iZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJzZWxmaXAuYml6Iiwid2ViaG9wLmJpeiIsImZ0cGFjY2Vzcy5jYyIsImdhbWUtc2VydmVyLmNjIiwibXlwaG90b3MuY2MiLCJzY3JhcHBpbmcuY2MiLCJi''@;'; put 'put ''bG9nZG5zLmNvbSIsImNlY2hpcmUuY29tIiwiZG5zYWxpYXMuY29tIiwiZG5zZG9qby5jb20iLCJkb2VzbnRleGlzdC5jb20iLCJkb250ZXhpc3QuY29tIiwiZG9vbWRucy5jb20iLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmRucy1hdC1ob21lLmNvbSIsImR5bmRucy1h''@;'; put 'put ''dC13b3JrLmNvbSIsImR5bmRucy1ibG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFpbC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRucy1yZW1vdGUuY29tIiwiZHluZG5z''@;'; put 'put ''LXNlcnZlci5jb20iLCJkeW5kbnMtd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxlLXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1ZXVyLmNvbSIsImZyb20tYWsuY29t''@;'; put 'put ''IiwiZnJvbS1hbC5jb20iLCJmcm9tLWFyLmNvbSIsImZyb20tY2EuY29tIiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJmcm9tLWlkLmNvbSIsImZyb20taWwu''@;'; put 'put ''Y29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNvbSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20iLCJmcm9tLW5jLmNvbSIsImZyb20t''@;'; put 'put ''bmQuY29tIiwiZnJvbS1uZS5jb20iLCJmcm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5jb20iLCJmcm9tLXJpLmNvbSIsImZy''@;'; put 'put ''b20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13eS5jb20iLCJnZXRteWlwLmNvbSIs''@;'; put 'put ''ImdvdGRucy5jb20iLCJob2JieS1zaXRlLmNvbSIsImhvbWVsaW51eC5jb20iLCJob21ldW5peC5jb20iLCJpYW1hbGxhbWEuY29tIiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1hLWJ1bGxzLWZhbi5jb20iLCJpcy1h''@;'; put 'put ''LWNhdGVyZXIuY29tIiwiaXMtYS1jaGVmLmNvbSIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0b3IuY29tIiwiaXMtYS1maW5hbmNp''@;'; put 'put ''YWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIsImlzLWEtaHVudGVyLmNvbSIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5jb20iLCJpcy1hLWxpYmVyYWwuY29tIiwi''@;'; put 'put ''aXMtYS1saWJlcnRhcmlhbi5jb20iLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tIiwiaXMtYS1waG90b2dyYXBoZXIuY29t''@;'; put 'put ''IiwiaXMtYS1wbGF5ZXIuY29tIiwiaXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9ja3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEtdGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1hLXRoZXJhcGlzdC5jb20iLCJpcy1h''@;'; put 'put ''bi1hY2NvdW50YW50LmNvbSIsImlzLWFuLWFjdG9yLmNvbSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdpbmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJpcy1jZXJ0aWZpZWQuY29tIiwiaXMt''@;'; put 'put ''Z29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNsaWNrLmNvbSIsImlzLXViZXJsZWV0LmNvbSIsImlz''@;'; put 'put ''LXdpdGgtdGhlYmFuZC5jb20iLCJpc2EtZ2Vlay5jb20iLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibmVhdC11cmwuY29tIiwic2F2ZXMtdGhlLXdoYWxlcy5jb20iLCJzZWxmaXAuY29tIiwic2Vs''@;'; put 'put ''bHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VydmViYnMuY29tIiwic2ltcGxlLXVybC5jb20iLCJzcGFjZS10by1yZW50LmNvbSIsInRlYWNoZXMteW9nYS5jb20iLCJ3cml0ZXN0aGlzYmxvZy5jb20iLCJhdGguY3giLCJmdWV0dGVydGRhc25ldHouZGUiLCJpc3RlaW5n''@;'; put 'put ''ZWVrLmRlIiwiaXN0bWVpbi5kZSIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwidHJhZXVtdGdlcmFkZS5kZSIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm8iLCJkeW5kbnMuaW5mbyIsImZvci1vdXIuaW5mbyIsImdyb2tzLXRo''@;'; put 'put ''ZS5pbmZvIiwiZ3Jva3MtdGhpcy5pbmZvIiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwia25vd3NpdGFsbC5pbmZvIiwic2VsZmlwLmluZm8iLCJ3ZWJob3AuaW5mbyIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMubmFtZSIsImF0LWJhbmQtY2FtcC5uZXQiLCJibG9nZG5zLm5ldCIsImJy''@;'; put 'put ''b2tlLWl0Lm5ldCIsImJ1eXNob3VzZXMubmV0IiwiZG5zYWxpYXMubmV0IiwiZG5zZG9qby5uZXQiLCJkb2VzLWl0Lm5ldCIsImRvbnRleGlzdC5uZXQiLCJkeW5hbGlhcy5uZXQiLCJkeW5hdGhvbWUubmV0IiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJmcm9tLWF6Lm5ldCIsImZyb20tY28ubmV0''@;'; put 'put ''IiwiZnJvbS1sYS5uZXQiLCJmcm9tLW55Lm5ldCIsImdldHMtaXQubmV0IiwiaGFtLXJhZGlvLW9wLm5ldCIsImhvbWVmdHAubmV0IiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5uZXQiLCJob21ldW5peC5uZXQiLCJpbi10aGUtYmFuZC5uZXQiLCJpcy1hLWNoZWYubmV0IiwiaXMtYS1nZWVr''@;'; put 'put ''Lm5ldCIsImlzYS1nZWVrLm5ldCIsImtpY2tzLWFzcy5uZXQiLCJvZmZpY2Utb24tdGhlLm5ldCIsInBvZHpvbmUubmV0Iiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzZWxmaXAubmV0Iiwic2VsbHMtaXQubmV0Iiwic2VydmViYnMubmV0Iiwic2VydmVmdHAubmV0IiwidGhydWhlcmUubmV0Iiwi''@;'; put 'put ''d2ViaG9wLm5ldCIsIm1lcnNlaW5lLm51IiwibWluZS5udSIsInNoYWNrbmV0Lm51IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5vcmciLCJkb2VzbnRleGlzdC5vcmciLCJkb250ZXhpc3Qub3Jn''@;'; put 'put ''IiwiZG9vbWRucy5vcmciLCJkdnJkbnMub3JnIiwiZHluYWxpYXMub3JnIiwiZHluZG5zLm9yZyIsImdvLmR5bmRucy5vcmciLCJob21lLmR5bmRucy5vcmciLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZnJvbS1tZS5vcmciLCJnYW1lLWhvc3Qub3JnIiwi''@;'; put 'put ''Z290ZG5zLm9yZyIsImhvYmJ5LXNpdGUub3JnIiwiaG9tZWRucy5vcmciLCJob21lZnRwLm9yZyIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5vcmciLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNlbHRpY3NmYW4ub3JnIiwiaXMtYS1jaGVmLm9y''@;'; put 'put ''ZyIsImlzLWEtZ2Vlay5vcmciLCJpcy1hLWtuaWdodC5vcmciLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtc294ZmFuLm9yZyIsImlzLWZvdW5kLm9yZyIsImlzLWxvc3Qub3JnIiwiaXMtc2F2ZWQub3JnIiwiaXMtdmVyeS1iYWQub3JnIiwiaXMtdmVy''@;'; put 'put ''eS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpc2EtZ2Vlay5vcmciLCJraWNrcy1hc3Mub3JnIiwibWlzY29uZnVzZWQub3JnIiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9nLm9yZyIsInNlbGZpcC5vcmciLCJz''@;'; put 'put ''ZWxsc3lvdXJob21lLm9yZyIsInNlcnZlYmJzLm9yZyIsInNlcnZlZnRwLm9yZyIsInNlcnZlZ2FtZS5vcmciLCJzdHVmZi00LXNhbGUub3JnIiwid2ViaG9wLm9yZyIsImJldHRlci10aGFuLnR2IiwiZHluZG5zLnR2Iiwib24tdGhlLXdlYi50diIsIndvcnNlLXRoYW4udHYiLCJpcy1ieS51''@;'; put 'put ''cyIsImxhbmQtNC1zYWxlLnVzIiwic3R1ZmYtNC1zYWxlLnVzIiwiZHluZG5zLndzIiwibXlwZXRzLndzIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtvem93LmNvbSIsImxvc2V5b3VyaXAuY29tIiwib29ndXkuY29tIiwidGhld29y''@;'; put 'put ''a3BjLmNvbSIsImNhc2FjYW0ubmV0IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3JnIiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9ja3MiLCJkeW52Ni5uZXQiLCJlNC5jeiIsImVhc3lwYW5lbC5hcHAiLCJlYXN5''@;'; put 'put ''cGFuZWwuaG9zdCIsIiouZXdwLmxpdmUiLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsImF0LmVtZi5jYW1wIiwicnQuaHQiLCJlbGVtZW50b3IuY2xvdWQiLCJlbGVtZW50b3IuY29vbCIsImVuLXJvb3QuZnIiLCJteXR1''@;'; put 'put ''bGVhcC5jb20iLCJ0dWxlYXAtcGFydG5lcnMuY29tIiwiZW5jci5hcHAiLCJlbmNvcmVhcGkuY29tIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3JnIiwiYXUuZXUub3JnIiwiYmUuZXUub3JnIiwiYmcuZXUub3JnIiwiY2Eu''@;'; put 'put ''ZXUub3JnIiwiY2QuZXUub3JnIiwiY2guZXUub3JnIiwiY24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1Lm9yZyIsImZpLmV1Lm9yZyIsImZyLmV1Lm9yZyIsImdyLmV1Lm9yZyIs''@;'; put 'put ''ImhyLmV1Lm9yZyIsImh1LmV1Lm9yZyIsImllLmV1Lm9yZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJsdC5ldS5vcmciLCJsdS5ldS5vcmciLCJsdi5ldS5vcmciLCJtZS5ldS5v''@;'; put 'put ''cmciLCJtay5ldS5vcmciLCJtdC5ldS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicm8uZXUub3JnIiwicnUuZXUub3JnIiwic2UuZXUub3JnIiwic2ku''@;'; put 'put ''ZXUub3JnIiwic2suZXUub3JnIiwidHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVyb2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1LTQuZXZlbm5vZGUuY29tIiwidXMtMS5ldmVubm9kZS5j''@;'; put 'put ''b20iLCJ1cy0yLmV2ZW5ub2RlLmNvbSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5jb20iLCJyZWxheS5ldmVydmF1bHQuYXBwIiwicmVsYXkuZXZlcnZhdWx0LmRldiIsImV4cG8uYXBwIiwic3RhZ2luZy5leHBvLmFwcCIsIm9uZmFicmljYS5jb20iLCJydS5uZXQiLCJh''@;'; put 'put ''ZHlnZXlhLnJ1IiwiYmFzaGtpcmlhLnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnkucnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJteXRpcy5ydSIsIm5hbGNoaWsucnUi''@;'; put 'put ''LCJub3YucnUiLCJweWF0aWdvcnNrLnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlhLnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hnYWJhZC5zdSIsImF6ZXJiYWlqYW4u''@;'; put 'put ''c3UiLCJiYWxhc2hvdi5zdSIsImJhc2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJkYWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIsIml2YW5vdm8uc3UiLCJqYW1ieWwu''@;'; put 'put ''c3UiLCJrYWxteWtpYS5zdSIsImthbHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hha2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5c2hsYWsuc3UiLCJtb3Jkb3ZpYS5z''@;'; put 'put ''dSIsIm1zay5zdSIsIm11cm1hbnNrLnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5vdi5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNoa2VudC5zdSIsInRlcm1lei5zdSIs''@;'; put 'put ''InRvZ2xpYXR0aS5zdSIsInRyb2l0c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZrYXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5ldCIsImVkZ2Vjb21wdXRlLmFwcCIs''@;'; put 'put ''ImZhc3RseS1lZGdlLmNvbSIsImZhc3RseS10ZXJyYXJpdW0uY29tIiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5wcm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0IiwiYi5zc2wuZmFzdGx5Lm5ldCIsImds''@;'; put 'put ''b2JhbC5zc2wuZmFzdGx5Lm5ldCIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCIqLnVzZXIuZm0iLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJteWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFjZSIsImNvbm4udWsiLCJjb3Byby51''@;'; put 'put ''ayIsImhvc3AudWsiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJteWRvYmlzcy5jb20iLCJmaC1tdWVuc3Rl''@;'; put 'put ''ci5pbyIsImZpbGVnZWFyLm1lIiwiZmlyZWJhc2VhcHAuY29tIiwiZmxkcnYuY29tIiwiZmx1dHRlcmZsb3cuYXBwIiwiZmx5LmRldiIsInNody5pbyIsImVkZ2VhcHAubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVyLmFpIiwiZnJhbWVyLmFwcCIsImZy''@;'; put 'put ''YW1lcmNhbnZhcy5jb20iLCJmcmFtZXIubWVkaWEiLCJmcmFtZXIucGhvdG9zIiwiZnJhbWVyLndlYnNpdGUiLCJmcmFtZXIud2lraSIsIjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJmcmVlYm94LW9zLmZyIiwiZnJlZWJv''@;'; put 'put ''eG9zLmZyIiwiZnJlZWRlc2t0b3Aub3JnIiwiZnJlZW15aXAuY29tIiwiKi5mcnVza3kuZGUiLCJ3aWVuLmZ1bmtmZXVlci5hdCIsImRhZW1vbi5hc2lhIiwiZGl4LmFzaWEiLCJteWRucy5ieiIsIjBhbS5qcCIsIjBnMC5qcCIsIjBqMC5qcCIsIjB0MC5qcCIsIm15ZG5zLmpwIiwicGd3Lmpw''@;'; put 'put ''Iiwid2pnLmpwIiwia2V5d29yZC1vbi5uZXQiLCJsaXZlLW9uLm5ldCIsInNlcnZlci1vbi5uZXQiLCJteWRucy50dyIsIm15ZG5zLnZjIiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJlaG9zdGluZy5hdCIsImZ1dHVyZW1h''@;'; put 'put ''aWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJhbGlhc2VzMTIxLmNvbSIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiaW5kZXBlbmRlbnQtY29tbWlzc2lvbi51ayIsImluZGVwZW5kZW50LWlu''@;'; put 'put ''cXVlc3QudWsiLCJpbmRlcGVuZGVudC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFuZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsiLCJnZWhpcm4ubmUuanAiLCJ1c2VyY29udGVudC5qcCIsImdlbnRhcHBz''@;'; put 'put ''LmNvbSIsImdlbnRsZW50YXBpcy5jb20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwibG9jYWxjZXJ0Lm5ldCIsImxvY2FsaG9zdGNlcnQubmV0IiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVicHJldmlldy5kZXYiLCJnaXRodWIuaW8iLCJnaXRsYWIuaW8iLCJn''@;'; put 'put ''aXRhcHAuc2kiLCJnaXRwYWdlLnNpIiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIsImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNrZHJvcC5qcCIsImJhbWJpbmEuanAiLCJiaXR0ZXIuanAiLCJibHVz''@;'; put 'put ''aC5qcCIsImJvby5qcCIsImJveS5qcCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNhbmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwiY2hpcHMuanAiLCJjaG93ZGVyLmpwIiwiY2h1LmpwIiwiY2lhby5q''@;'; put 'put ''cCIsImNvY290dGUuanAiLCJjb29sYmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJsLmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVtLmpwIiwiZmxpZXIuanAiLCJmbG9wcHkuanAiLCJmb29sLmpwIiwi''@;'; put 'put ''ZnJlbmNoa2lzcy5qcCIsImdpcmxmcmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5qcCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHkuanAiLCJob2x5LmpwIiwiaHVuZ3J5LmpwIiwiaWN1cnVzLmpwIiwi''@;'; put 'put ''aXRpZ28uanAiLCJqZWxseWJlYW4uanAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJraWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAiLCJsb3ZlcG9wLmpwIiwibG92ZXNpY2suanAiLCJtYWluLmpwIiwi''@;'; put 'put ''bW9kcy5qcCIsIm1vbmQuanAiLCJtb25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3RlLmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5qcCIsInBlY29yaS5qcCIsInBlZXdlZS5qcCIsInBlbm5lLmpwIiwi''@;'; put 'put ''cGVwcGVyLmpwIiwicGVybWEuanAiLCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVueXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlzdC5qcCIsInNjaG9vbGJ1cy5qcCIsInNlY3JldC5qcCIsInN0YWJh''@;'; put 'put ''LmpwIiwic3RyaXBwZXIuanAiLCJzdWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpwIiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2aXZpYW4uanAiLCJ3YXRzb24uanAiLCJ3ZWJsaWtlLmpwIiwid2hp''@;'; put 'put ''dGVzbm93LmpwIiwiem9tYmllLmpwIiwiaGV0ZW1sLm5ldCIsImdyYXBoaWMuZGVzaWduIiwiZ29pcC5kZSIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsIiouaG9zdGVkLmFwcCIsIioucnVuLmFwcCIsIndlYi5hcHAiLCJibG9nc3BvdC5jb20uYXIiLCJibG9n''@;'; put 'put ''c3BvdC5jby5hdCIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5IiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3BvdC5jZiIsImJsb2dzcG90LmNoIiwi''@;'; put 'put ''YmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jb20uY28iLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIqLnIuYXBwc3BvdC5jb20iLCJibG9nc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFnZXNwZWVkbW9iaWxpemVyLmNvbSIs''@;'; put 'put ''IndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiYmxvZ3Nwb3QuY3YiLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiKi5nYXRld2F5LmRldiIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuY29tLmVlIiwiYmxvZ3Nwb3QuY29tLmVnIiwiYmxv''@;'; put 'put ''Z3Nwb3QuY29tLmVzIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90Lmh1IiwiYmxvZ3Nwb3QuY28uaWQi''@;'; put 'put ''LCJibG9nc3BvdC5pZSIsImJsb2dzcG90LmNvLmlsIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5sdCIsImJsb2dzcG90Lmx1IiwiYmxv''@;'; put 'put ''Z3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nwb3QuY28ubnoiLCJibG9nc3BvdC5w''@;'; put 'put ''ZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwiYmxvZ3Nwb3Quc24iLCJibG9nc3Bv''@;'; put 'put ''dC50ZCIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LnZuIiwiYmxvZ3Nwb3QuY28uemEiLCJnb3VwaWxlLmZyIiwicHltbnQudWsiLCJjbG91ZGFwcHMuZGlnaXRhbCIsImxv''@;'; put 'put ''bmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsImdvdi5ubCIsImdyYWZhbmEtZGV2Lm5ldCIsImdyYXlqYXlsZWFndWVzLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEubGkiLCJ1YS5ycyIsImNvbmYuc2Ui''@;'; put 'put ''LCJoXHhlNGtraW5lbi5maSIsImhyc24uZGV2IiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsImhhdGVuYWJsb2cuY29tIiwiaGF0ZW5hZGlhcnkuY29tIiwiaGF0ZWJsby5qcCIsImhhdGVuYWJsb2cuanAiLCJoYXRlbmFkaWFyeS5qcCIsImhhdGVuYWRpYXJ5''@;'; put 'put ''Lm9yZyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsInBhZ2VzLXJlc2VhcmNoLml0LmhzLWhlaWxicm9ubi5kZSIsImhlaXl1LnNwYWNlIiwiaGVsaW9oby5zdCIsImhlbGlvaG9zdC51cyIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJoZXJva3Vzc2wuY29tIiwiaGV5Zmxv''@;'; put 'put ''dy5wYWdlIiwiaGV5Zmxvdy5zaXRlIiwicmF2ZW5kYi5jbG91ZCIsInJhdmVuZGIuY29tbXVuaXR5IiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCIqLmtpbi5vbmUiLCIqLmlkLnB1YiIsIioua2luLnB1YiIsInNlY2Fhcy5oayIsImhvcGxpeC5zaG9w''@;'; put 'put ''Iiwib3J4LmJpeiIsImJpei5nbCIsImJpei5uZyIsImNvLmJpei5uZyIsImRsLmJpei5uZyIsImdvLmJpei5uZyIsImxnLmJpei5uZyIsIm9uLmJpei5uZyIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJwbGMubmciLCJpZS51YSIsImhvc3R5aG9zdGlu''@;'; put 'put ''Zy5pbyIsImhmLnNwYWNlIiwic3RhdGljLmhmLnNwYWNlIiwiaHlwZXJub2RlLmlvIiwiaW9iYi5uZXQiLCJjby5jeiIsIioubW9vbnNjYWxlLmlvIiwibW9vbnNjYWxlLm5ldCIsImdyLmNvbSIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5pdCIsInNtdXNoY2RuLmNvbSIsIndw''@;'; put 'put ''aG9zdGVkbWFpbC5jb20iLCJ3cG11Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUiLCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi12cG4uZGUiLCJpbi1kc2wubmV0IiwiaW4tdnBuLm5l''@;'; put 'put ''dCIsImluLWRzbC5vcmciLCJpbi12cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcuYnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJlcy5sZWcuYnIiLCJnby5sZWcuYnIi''@;'; put 'put ''LCJtYS5sZWcuYnIiLCJtZy5sZWcuYnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5sZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIiLCJyci5sZWcuYnIiLCJycy5sZWcu''@;'; put 'put ''YnIiLCJzYy5sZWcuYnIiLCJzZS5sZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiYXBwcy0xYW5kMS5jb20iLCJsaXZlLXdlYnNpdGUuY29tIiwiYXBwcy0xYW5kMS5uZXQiLCJ3ZWJzaXRlYnVpbGRlci5vbmxpbmUiLCJhcHAtaW9ub3Mu''@;'; put 'put ''c3BhY2UiLCJpb3BzeXMuc2UiLCIqLmR3ZWIubGluayIsImlwaWZvbnkubmV0IiwiaXIubWQiLCJpcy1hLWdvb2QuZGV2IiwiaXMtYS5kZXYiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2VydmVyLmRlIiwidGVzdC1pc2Vydi5k''@;'; put 'put ''ZSIsImlzZXJ2LmRldiIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwiYWxwMS5hZS5mbG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2aXAuamVsYXN0aWMuY2xvdWQiLCJq''@;'; put 'put ''ZWxlLmNsb3VkIiwiaXQxLmV1ci5hcnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNsb3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIsInByaW1ldGVsLmNsb3VkIiwidWsu''@;'; put 'put ''cHJpbWV0ZWwuY2xvdWQiLCJjYS5yZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJkb3BhYXMuY29tIiwicGFhcy5ob3N0ZWQtYnktcHJl''@;'; put 'put ''dmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJwYWFzLm1hc3NpdmVncmlkLmNvbSIsImplZC53''@;'; put 'put ''YWZhaWNsb3VkLmNvbSIsInJ5ZC53YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBsYXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwiamVsZS5ob3N0IiwibWlyY2xvdWQu''@;'; put 'put ''aG9zdCIsInBhYXMuYmVlYnl0ZS5pbyIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiamMubmVlbi5pdCIsImpjbG91ZC5reiIsImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnkubmV0IiwiamxzLXN0bzEuZWxhc3R4''@;'; put 'put ''Lm5ldCIsImpscy1zdG8yLmVsYXN0eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwi''@;'; put 'put ''bnktMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3JkZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsInNkc2Nsb3VkLnBsIiwidW5pY2xvdWQucGwiLCJtaXJj''@;'; put 'put ''bG91ZC5ydSIsImVuc2NhbGVkLnNnIiwiamVsZS5zaXRlIiwiamVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWlyY2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3RpbmcubXlqaW5vLnJ1IiwiKi5sYW5kaW5n''@;'; put 'put ''Lm15amluby5ydSIsIiouc3BlY3RydW0ubXlqaW5vLnJ1IiwiKi52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCJ3ZWJhZG9yc2l0ZS5jb20iLCJqb3V3d2ViLnNpdGUiLCIqLmNucy5qb3llbnQuY29tIiwiKi50cml0b24uem9uZSIsImpzLm9yZyIsImthYXMuZ2ciLCJraHBsYXku''@;'; put 'put ''bmwiLCJrYXBzaS5maSIsImV6cHJveHkua3VsZXV2ZW4uYmUiLCJrdWxldXZlbi5jbG91ZCIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5ldCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwid2VidGhpbmdzLmlvIiwia3JlbGxpYW4ubmV0Iiwi''@;'; put 'put ''b3lhLnRvIiwiZ2l0LXJlcG9zLmRlIiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwibHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwibGlicDJwLmRpcmVjdCIsInJ1bmNvbnRhaW5lcnMuZGV2IiwiY28uYnVzaW5lc3Mi''@;'; put 'put ''LCJjby5lZHVjYXRpb24iLCJjby5ldmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5uZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwibGlua3lhcmQtY2xvdWQuY2giLCJsaW5reWFyZC5jbG91ZCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIioubm9kZWJhbGFuY2VyLmxpbm9kZS5j''@;'; put 'put ''b20iLCIqLmxpbm9kZW9iamVjdHMuY29tIiwiaXAubGlub2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCJmaWxlZ2Vhci1zZy5tZSIsImdnZmYubmV0IiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2R6LnBsIiwicGFiaWFuaWNlLnBsIiwicGxvY2sucGwiLCJzaWVyYWR6LnBsIiwic2tp''@;'; put 'put ''ZXJuaWV3aWNlLnBsIiwiemdpZXJ6LnBsIiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYiLCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsImxvaG11cy5tZSIsInNlcnZlcnMucnVuIiwia3Jhc25pay5wbCIsImxlY3puYS5wbCIsImx1''@;'; put 'put ''YmFydG93LnBsIiwibHVibGluLnBsIiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcub3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jbHViIiwiYmFyc3ljZW50ZXIuY29tIiwiYmFyc3lvbmxpbmUuY29tIiwiYmFyc3kuZGUiLCJi''@;'; put 'put ''YXJzeS5kZXYiLCJiYXJzeS5ldSIsImJhcnN5LmdyIiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeW9ubGluZS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5ldCIsImJhcnN5Lm9ubGluZSIsImJhcnN5Lm9yZyIsImJh''@;'; put 'put ''cnN5LnBybyIsImJhcnN5LnB1YiIsImJhcnN5LnJvIiwiYmFyc3kucnMiLCJiYXJzeS5zaG9wIiwiYmFyc3lvbmxpbmUuc2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdG9yZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsImJhcnN5LmNvLnVrIiwiYmFyc3lvbmxpbmUuY28udWsiLCIq''@;'; put 'put ''Lm1hZ2VudG9zaXRlLmNsb3VkIiwiaGIuY2xkbWFpbC5ydSIsIm1hdGxhYi5jbG91ZCIsIm1vZGVsc2NhcGUuY29tIiwibXdjbG91ZG5vbnByb2QuY29tIiwicG9seXNwYWNlLmNvbSIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJtYXplcGxheS5jb20iLCJtY2Rpci5tZSIsIm1j''@;'; put 'put ''ZGlyLnJ1IiwidnBzLm1jZGlyLnJ1IiwibWNwcmUucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1lZHVzYWpzLmFwcCIsIm1pbmlzZXJ2ZXIuY29tIiwibWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsImF0bWV0YS5jb20iLCJhcHBzLmZic2J4LmNv''@;'; put 'put ''bSIsIiouY2xvdWQubWV0YWNlbnRydW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0uY3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1cmVjb250YWluZXIuaW8iLCJhenVyZS1h''@;'; put 'put ''cGkubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImF6dXJlZWRnZS5uZXQiLCJhenVyZWZkLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCI0LmF6dXJlc3RhdGlj''@;'; put 'put ''YXBwcy5uZXQiLCI1LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI2LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI3LmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0dXMyLmF6dXJlc3RhdGlj''@;'; put 'put ''YXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJhenVyZXdlYnNpdGVzLm5ldCIsImNsb3VkYXBwLm5ldCIsInRyYWZmaWNtYW5hZ2VyLm5ldCIsImJsb2IuY29yZS53aW5kb3dzLm5ldCIsInNlcnZpY2VidXMu''@;'; put 'put ''d2luZG93cy5uZXQiLCJyb3V0aW5ndGhlY2xvdWQuY29tIiwic24ubXluZXRuYW1lLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5uZXQiLCJyb3V0aW5ndGhlY2xvdWQub3JnIiwiY3N4LmNjIiwibXlkYnNlcnZlci5jb20iLCJ3ZWJzcGFjZWNvbmZpZy5kZSIsIm1pdHR3YWxkLmluZm8iLCJtaXR0''@;'; put 'put ''d2FsZHNlcnZlci5pbmZvIiwidHlwbzNzZXJ2ZXIuaW5mbyIsInByb2plY3Quc3BhY2UiLCJtb2R4LmRldiIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3RvbWVyLm15''@;'; put 'put ''dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0cy5jb20iLCJzcGhpbngubXl0aGlj''@;'; put 'put ''LWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20iLCJuZXRmeS5hcHAiLCJuZXRsaWZ5''@;'; put 'put ''LmFwcCIsIjR1LmNvbSIsIm5mc2hvc3QuY29tIiwiaXBmcy5uZnRzdG9yYWdlLmxpbmsiLCJuZ28udXMiLCJuZ3Jvay5hcHAiLCJuZ3Jvay1mcmVlLmFwcCIsIm5ncm9rLmRldiIsIm5ncm9rLWZyZWUuZGV2Iiwibmdyb2suaW8iLCJhcC5uZ3Jvay5pbyIsImF1Lm5ncm9rLmlvIiwiZXUubmdy''@;'; put 'put ''b2suaW8iLCJpbi5uZ3Jvay5pbyIsImpwLm5ncm9rLmlvIiwic2Eubmdyb2suaW8iLCJ1cy5uZ3Jvay5pbyIsIm5ncm9rLnBpenphIiwibmdyb2sucHJvIiwidG9ydW4ucGwiLCJuaC1zZXJ2LmNvLnVrIiwibmltc2l0ZS51ayIsIm1tYWZhbi5iaXoiLCJteWZ0cC5iaXoiLCJuby1pcC5iaXoi''@;'; put 'put ''LCJuby1pcC5jYSIsImZhbnRhc3lsZWFndWUuY2MiLCJnb3RkbnMuY2giLCIzdXRpbGl0aWVzLmNvbSIsImJsb2dzeXRlLmNvbSIsImNpc2NvZnJlYWsuY29tIiwiZGFtbnNlcnZlci5jb20iLCJkZG5za2luZy5jb20iLCJkaXRjaHlvdXJpcC5jb20iLCJkbnNpc2tpbmt5LmNvbSIsImR5bm5z''@;'; put 'put ''LmNvbSIsImdlZWtnYWxheHkuY29tIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXl2bmMuY29tIiwibmV0LWZyZWFrcy5jb20i''@;'; put 'put ''LCJvbnRoZXdpZmkuY29tIiwicG9pbnQydGhpcy5jb20iLCJxdWlja3N5dGVzLmNvbSIsInNlY3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVjb3VudGVyc3RyaWtlLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVmdHAuY29tIiwic2VydmVnYW1lLmNvbSIs''@;'; put 'put ''InNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbXAzLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInNlcnZlc2FyY2FzbS5jb20iLCJzdHVmZnRvcmVhZC5j''@;'; put 'put ''b20iLCJ1bnVzdWFscGVyc29uLmNvbSIsIndvcmtpc2JvcmluZy5jb20iLCJkdnJjYW0uaW5mbyIsImlsb3ZlY29sbGVnZS5pbmZvIiwibm8taXAuaW5mbyIsImJyYXNpbGlhLm1lIiwiZGRucy5tZSIsImRuc2Zvci5tZSIsImhvcHRvLm1lIiwibG9naW50by5tZSIsIm5vaXAubWUiLCJ3ZWJo''@;'; put 'put ''b3AubWUiLCJib3VuY2VtZS5uZXQiLCJkZG5zLm5ldCIsImVhdGluZy1vcmdhbmljLm5ldCIsIm15ZGlzc2VudC5uZXQiLCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJuaGxmYW4ubmV0Iiwibm8taXAubmV0IiwicGdh''@;'; put 'put ''ZmFuLm5ldCIsInByaXZhdGl6ZWhlYWx0aGluc3VyYW5jZS5uZXQiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzeXRlcy5uZXQiLCJjYWJsZS1tb2RlbS5vcmciLCJjb2xsZWdlZmFuLm9yZyIsImNvdWNocG90YXRvZnJpZXMub3JnIiwi''@;'; put 'put ''aG9wdG8ub3JnIiwibWxiZmFuLm9yZyIsIm15ZnRwLm9yZyIsIm15c2VjdXJpdHljYW1lcmEub3JnIiwibmZsZmFuLm9yZyIsIm5vLWlwLm9yZyIsInJlYWQtYm9va3Mub3JnIiwidWZjZmFuLm9yZyIsInphcHRvLm9yZyIsIm5vLWlwLmNvLnVrIiwiZ29sZmZhbi51cyIsIm5vaXAudXMiLCJw''@;'; put 'put ''b2ludHRvLnVzIiwic3RhZ2Uubm9kZWFydC5pbyIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2RlLnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90aWNlYWJsZS5uZXdzIiwibm90aW9u''@;'; put 'put ''LnNpdGUiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIsIm93bmlwLm5ldCIsInZwbmRucy5u''@;'; put 'put ''ZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJueWMubW4iLCJwcnZjeS5wYWdlIiwib2JsLm9uZyIsIm9ic2VydmFibGVocS5jbG91ZCIs''@;'; put 'put ''InN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCIxMjN3ZWJzZWl0ZS5hdCIsIjEyM3dlYnNpdGUuYmUiLCJzaW1wbGVzaXRlLmNvbS5iciIsIjEyM3dlYnNpdGUuY2giLCJzaW1wbGVzaXRlLmNvbSIs''@;'; put 'put ''IjEyM3dlYnNlaXRlLmRlIiwiMTIzaGplbW1lc2lkZS5kayIsIjEyM21pd2ViLmVzIiwiMTIza290aXNpdnUuZmkiLCIxMjNzaXRld2ViLmZyIiwic2ltcGxlc2l0ZS5nciIsIjEyM2hvbWVwYWdlLml0IiwiMTIzd2Vic2l0ZS5sdSIsIjEyM3dlYnNpdGUubmwiLCIxMjNoamVtbWVzaWRlLm5v''@;'; put 'put ''Iiwic2VydmljZS5vbmUiLCJzaW1wbGVzaXRlLnBsIiwiMTIzcGFnaW5hd2ViLnB0IiwiMTIzbWluc2lkYS5zZSIsImlzLWEtZnVsbHN0YWNrLmRldiIsImlzLWNvb2wuZGV2IiwiaXMtbm90LWEuZGV2IiwibG9jYWxwbGF5ZXIuZGV2IiwiaXMtbG9jYWwub3JnIiwib3BlbnNvY2lhbC5zaXRl''@;'; put 'put ''Iiwib3BlbmNyYWZ0Lmhvc3RpbmciLCIxNi1iLml0IiwiMzItYi5pdCIsIjY0LWIuaXQiLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcy5jdXN0''@;'; put 'put ''b21lci1vY2kuY29tIiwiKi5vcmFjbGVjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMudWsiLCJ0ZWNoLm9yYW5nZSIsImNhbi5yZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdlYXJhcHBzLmNvbSIsInNreWdlYXJh''@;'; put 'put ''cHAuY29tIiwib3V0c3lzdGVtc2Nsb3VkLmNvbSIsIiouaG9zdGluZy5vdmgubmV0IiwiKi53ZWJwYWFzLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJvd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdleGwuY29tIiwiZ290cGFudGhlb24u''@;'; put 'put ''Y29tIiwicGFudGhlb25zaXRlLmlvIiwiKi5wYXl3aGlybC5jb20iLCIqLnhtaXQuY28iLCJ4bWl0LmRldiIsIm1hZGV0aGlzLnNpdGUiLCJzcnYudXMiLCJnaC5zcnYudXMiLCJnbC5zcnYudXMiLCJsazMucnUiLCJteXBlcC5saW5rIiwicGVyc3BlY3RhLmNsb3VkIiwib24td2ViLmZyIiwi''@;'; put 'put ''Ki51cHN1bi5hcHAiLCJ1cHN1bmFwcC5jb20iLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBsYXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAuZGV2IiwicGxhdHRlcnAudXMiLCJw''@;'; put 'put ''bGV5LmdhbWVzIiwib25wb3J0ZXIucnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVxdWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInByb3RvbmV0LmlvIiwiY2hpcnVyZ2ll''@;'; put 'put ''bnMtZGVudGlzdGVzLWVuLWZyYW5jZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20iLCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwibXlxbmFwY2xvdWQuY24iLCJhbHBoYS1teXFuYXBjbG91''@;'; put 'put ''ZC5jb20iLCJkZXYtbXlxbmFwY2xvdWQuY29tIiwibXljbG91ZG5hcy5jb20iLCJteW5hc2Nsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJsYWRlc2suY29tIiwicWJ1c2VyLmNvbSIsIioucXVpcGVsZW1lbnRzLmNvbSIsInZhcG9yLmNs''@;'; put 'put ''b3VkIiwidmFwb3JjbG91ZC5pbyIsInJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImNsb3Vkc2l0ZS5idWlsZGVycyIsIm15cmFkd2ViLm5ldCIsInNlcnZlcm5hbWUudXMiLCJ3ZWIuaW4iLCJpbi5uZXQiLCJteXJkYnguaW8iLCJzaXRlLnJiLWhvc3RpbmcuaW8iLCIqLm9uLXJhbmNo''@;'; put 'put ''ZXIuY2xvdWQiLCIqLm9uLWszcy5pbyIsIioub24tcmlvLmlvIiwicmF2cGFnZS5jby5pbCIsInJlYWR0aGVkb2NzLWhvc3RlZC5jb20iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xvdWQuY29tIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwib25yZW5kZXIuY29tIiwiYXBwLnJlbmRlci5jb20iLCJy''@;'; put 'put ''ZXBsaXQuYXBwIiwiaWQucmVwbGl0LmFwcCIsImZpcmV3YWxsZWRyZXBsaXQuY28iLCJpZC5maXJld2FsbGVkcmVwbGl0LmNvIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsaXQuZGV2IiwiYXJjaGVyLnJlcGxpdC5kZXYiLCJib25lcy5yZXBsaXQuZGV2IiwiY2FuYXJ5LnJlcGxpdC5k''@;'; put 'put ''ZXYiLCJnbG9iYWwucmVwbGl0LmRldiIsImhhY2tlci5yZXBsaXQuZGV2IiwiaWQucmVwbGl0LmRldiIsImphbmV3YXkucmVwbGl0LmRldiIsImtpbS5yZXBsaXQuZGV2Iiwia2lyYS5yZXBsaXQuZGV2Iiwia2lyay5yZXBsaXQuZGV2Iiwib2RvLnJlcGxpdC5kZXYiLCJwYXJpcy5yZXBsaXQu''@;'; put 'put ''ZGV2IiwicGljYXJkLnJlcGxpdC5kZXYiLCJwaWtlLnJlcGxpdC5kZXYiLCJwcmVyZWxlYXNlLnJlcGxpdC5kZXYiLCJyZWVkLnJlcGxpdC5kZXYiLCJyaWtlci5yZXBsaXQuZGV2Iiwic2lza28ucmVwbGl0LmRldiIsInNwb2NrLnJlcGxpdC5kZXYiLCJzdGFnaW5nLnJlcGxpdC5kZXYiLCJz''@;'; put 'put ''dWx1LnJlcGxpdC5kZXYiLCJ0YXJwaXQucmVwbGl0LmRldiIsInRlYW1zLnJlcGxpdC5kZXYiLCJ0dWNrZXIucmVwbGl0LmRldiIsIndlc2xleS5yZXBsaXQuZGV2Iiwid29yZi5yZXBsaXQuZGV2IiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRldmljZXMucmVzaW5zdGFnaW5nLmlv''@;'; put 'put ''IiwiaHpjLmlvIiwiYWRpbW8uY28udWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJydWIuZGUiLCJydWhyLXVuaS1ib2NodW0uZGUiLCJpby5ub2MucnVoci11bmktYm9jaHVtLmRl''@;'; put 'put ''IiwiXHUwNDMxXHUwNDM4XHUwNDM3Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDM4XHUwNDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0''@;'; put 'put ''MSIsIlx1MDQzY1x1MDQ0MVx1MDQzYS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZVx1MDQ0N1x1MDQz''@;'; put 'put ''OC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsInJhcy5ydSIsIm55YXQuYXBwIiwiMTgwci5jb20iLCJkb2ppbi5jb20iLCJzYWt1cmF0YW4uY29tIiwic2FrdXJhd2ViLmNvbSIs''@;'; put 'put ''IngwLmNvbSIsIjItZC5qcCIsImJvbmEuanAiLCJjcmFwLmpwIiwiZGF5bmlnaHQuanAiLCJlZWsuanAiLCJmbG9wLmpwIiwiaGFsZm1vb24uanAiLCJqZWV6LmpwIiwibWF0cml4LmpwIiwibWltb3phLmpwIiwiaXZvcnkubmUuanAiLCJtYWlsLWJveC5uZS5qcCIsIm1pbnRzLm5lLmpwIiwi''@;'; put 'put ''bW9rdXJlbi5uZS5qcCIsIm9wYWwubmUuanAiLCJzYWt1cmEubmUuanAiLCJzdW1vbW8ubmUuanAiLCJ0b3Bhei5uZS5qcCIsIm5ldGdhbWVycy5qcCIsIm55YW50YS5qcCIsIm8wbzAuanAiLCJyZHkuanAiLCJyZ3IuanAiLCJydWxlei5qcCIsInMzLmlzazAxLnNha3VyYXN0b3JhZ2UuanAi''@;'; put 'put ''LCJzMy5pc2swMi5zYWt1cmFzdG9yYWdlLmpwIiwic2Fsb29uLmpwIiwic2Jsby5qcCIsInNrci5qcCIsInRhbmsuanAiLCJ1aC1vaC5qcCIsInVuZG8uanAiLCJycy53ZWJhY2NlbC5qcCIsInVzZXIud2ViYWNjZWwuanAiLCJ3ZWJzb3phaS5qcCIsInhpaS5qcCIsInNxdWFyZXMubmV0Iiwi''@;'; put 'put ''anBuLm9yZyIsImtpcmFyYS5zdCIsIngwLnRvIiwiZnJvbS50diIsInNha3VyYS50diIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIuY29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwiKi4wMDEudGVzdC5jb2RlLWJ1aWxkZXItc3RnLnBsYXRmb3JtLnNhbGVz''@;'; put 'put ''Zm9yY2UuY29tIiwiKi5kLmNybS5kZXYiLCIqLncuY3JtLmRldiIsIioud2EuY3JtLmRldiIsIioud2IuY3JtLmRldiIsIioud2MuY3JtLmRldiIsIioud2QuY3JtLmRldiIsIioud2UuY3JtLmRldiIsIioud2YuY3JtLmRldiIsInNhbmRjYXRzLmlvIiwibG9nb2lwLmNvbSIsImxvZ29pcC5k''@;'; put 'put ''ZSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImNvY2twaXQuZnItcGFyLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3VkIiwiZnVuY3Rpb25zLmZuYy5mci1w''@;'; put 'put ''YXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInByaXYuaW5zdGFuY2VzLnNjdy5jbG91''@;'; put 'put ''ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsImNvY2twaXQubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5ubC1hbXMu''@;'; put 'put ''c2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJjb2NrcGl0LnBsLXdhdy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNpdGUucGwtd2F3LnNjdy5jbG91ZCIs''@;'; put 'put ''InNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiY2xpZW50LnNjcnlwdGVkLmlvIiwiZmlyZXdhbGwtZ2F0ZXdheS5jb20i''@;'; put 'put ''LCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3JnIiwic2VpZGF0Lm5ldCIsInNlbGxm''@;'; put 'put ''eS5zdG9yZSIsIm1pbmlzaXRlLm1zIiwic2Vuc2VlcmluZy5uZXQiLCJzZXJ2ZWJvbHQuY2xvdWQiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwiYXMuc2guY24iLCJzaGVlenkuZ2FtZXMiLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwibXlzaG9waWZ5LmNvbSIsInNob3Bp''@;'; put 'put ''dHNpdGUuY29tIiwic2hvcHdhcmUuc2hvcCIsInNob3B3YXJlLnN0b3JlIiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20iLCJzaXRlbGVhZi5uZXQiLCJzbWFsbC13ZWIub3JnIiwi''@;'; put 'put ''YWVyb3BvcnQuZnIiLCJhdm9jYXQuZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJtZWRlY2luLmZyIiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIsInZldGVyaW5haXJlLmZyIiwidnA0''@;'; put 'put ''Lm1lIiwiKi5zbm93Zmxha2UuYXBwIiwiKi5wcml2YXRlbGluay5zbm93Zmxha2UuYXBwIiwic3RyZWFtbGl0LmFwcCIsInN0cmVhbWxpdGFwcC5jb20iLCJ0cnktc25vd3Bsb3cuY29tIiwibWFmZWxvLm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIsInNyaHQuc2l0ZSIsImFwcHMubGFp''@;'; put 'put ''ci5pbyIsIiouc3RvbG9zLmlvIiwic3BhY2VraXQuaW8iLCJpbmQubW9tIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5jYSIsIm15c3ByZWFkc2hvcC5jaCIs''@;'; put 'put ''Im15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQiLCJteXNwcmVhZHNob3AubmV0Iiwi''@;'; put 'put ''bXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwidy1jb3JwLXN0YXRpY2JsaXR6LmNvbSIsInctY3JlZGVudGlhbGxlc3Mtc3RhdGljYmxpdHouY29tIiwidy1zdGF0aWNibGl0''@;'; put 'put ''ei5jb20iLCJzdGFja2hlcm8tbmV0d29yay5jb20iLCJydW5zLm9uc3RhY2tpdC5jbG91ZCIsInN0YWNraXQuZ2ciLCJzdGFja2l0LnJvY2tzIiwic3RhY2tpdC5ydW4iLCJzdGFja2l0LnpvbmUiLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJhcGkuc3RkbGliLmNvbSIsImZlZWRi''@;'; put 'put ''YWNrLmFjIiwiZm9ybXMuYWMiLCJhc3Nlc3NtZW50cy5jeCIsImNhbGN1bGF0b3JzLmN4IiwiZnVubmVscy5jeCIsInBheW5vdy5jeCIsInF1aXp6ZXMuY3giLCJyZXNlYXJjaGVkLmN4IiwidGVzdHMuY3giLCJzdXJ2ZXlzLnNvIiwic3RvcmViYXNlLnN0b3JlIiwic3RvcmlwcmVzcy5hcHAi''@;'; put 'put ''LCJzdG9yai5mYXJtIiwic3RyYXBpYXBwLmNvbSIsIm1lZGlhLnN0cmFwaWFwcC5jb20iLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJzdHJlYWstbGluay5j''@;'; put 'put ''b20iLCJzdHJlYWtsaW5rcy5jb20iLCJzdHJlYWt1c2VyY29udGVudC5jb20iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2YubmV0IiwidXR3ZW50ZS5pbyIsInRlbXAtZG5zLmNvbSIsInN1cGFiYXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5uZXQiLCJzeW5jbG91ZC5pdCIsImRz''@;'; put 'put ''Y2xvdWQuYml6IiwiZGlyZWN0LnF1aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwiZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIsImRzbXluYXMubmV0IiwiZmFtaWx5''@;'; put 'put ''ZHMubmV0IiwiZHNteW5hcy5vcmciLCJmYW1pbHlkcy5vcmciLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidnBucGx1cy50byIsIm15dGFiaXQuY29tIiwibXl0YWJpdC5jby5pbCIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwidHMubmV0IiwiKi5jLnRzLm5ldCIsImdk''@;'; put 'put ''YS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwidGF2ZXVzZXJjb250ZW50LmNvbSIsInAudGF3ay5lbWFpbCIsInAudGF3a3RvLmVtYWlsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRlY2tpZHMub3JnIiwidGVsZWJpdC5h''@;'; put 'put ''cHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsIiouZmlyZW5ldC5jaCIsIiouc3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdkdXN0LmlvIiwiY3VzdC5kaXNyZWMu''@;'; put 'put ''dGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0LmlvIiwidGlja2V0cy5pbyIsImFydm8ubmV0d29yayIsImF6aW11dGgu''@;'; put 'put ''bmV0d29yayIsInRsb24ubmV0d29yayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9ycHJvamVjdC5uZXQiLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIyaXguY2giLCI0bGltYS5jaCIsImxp''@;'; put 'put ''bWEtY2l0eS5jaCIsInRyYWZmaWNwbGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxpbWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJvY2tzIiwibGltYS56b25lIiwiKi50''@;'; put 'put ''cmFuc3VybC5iZSIsIioudHJhbnN1cmwuZXUiLCJzaXRlLnRyYW5zaXAubWUiLCIqLnRyYW5zdXJsLm5sIiwidHV4ZmFtaWx5Lm9yZyIsImRkLWRucy5kZSIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJtZWluLXZpZ29yLmRlIiwibXktdmln''@;'; put 'put ''b3IuZGUiLCJteS13YW4uZGUiLCJzeW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9neS1kcy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20iLCIqLnViZXJzcGFjZS5kZSIsInVi''@;'; put 'put ''ZXIuc3BhY2UiLCJoay5jb20iLCJpbmMuaGsiLCJsdGQuaGsiLCJoay5vcmciLCJpdC5jb20iLCJ1bmlzb24tc2VydmljZXMuY2xvdWQiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ2aXJ0dWFsdXNlci5kZSIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJzY2gud2YiLCJvcmcueXQiLCJycy5i''@;'; put 'put ''YSIsImJpZWxza28ucGwiLCJ1cGxpLmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIsInVzLm9yZyIsInYudWEiLCJleHByZXNzLnZhbC5ydW4iLCJ3ZWIudmFsLnJ1biIsInZlcmNlbC5hcHAiLCJ2MC5idWlsZCIsInZlcmNlbC5kZXYiLCJ2dXNlcmNvbnRlbnQubmV0Iiwibm93''@;'; put 'put ''LnNoIiwiMjAzOC5pbyIsInJvdXRlci5tYW5hZ2VtZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIndlYmZsb3cuaW8iLCJ3ZWJmbG93dGVzdC5pbyIsIioud2ViaGFyZS5kZXYiLCJib29rb25saW5lLmFw''@;'; put 'put ''cCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJyZXNlcnZlLW9ubGluZS5jb20iLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJjcHJhcGlkLmNvbSIsInBsZXNrbnMuY29tIiwid3AyLmhvc3QiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwid3BzcXVhcmVkLnNpdGUiLCIqLndhZGwudG9wIiwicmVt''@;'; put 'put ''b3Rld2QuY29tIiwiYm94LmNhIiwicGFnZXMud2lhcmR3ZWIuY29tIiwidG9vbGZvcmdlLm9yZyIsIndtY2xvdWQub3JnIiwid21mbGFicy5vcmciLCJ3ZGguYXBwIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJ3aXhzaXRlLmNvbSIsIndpeHN0dWRpby5jb20iLCJlZGl0b3J4Lmlv''@;'; put 'put ''Iiwid2l4c3R1ZGlvLmlvIiwid2l4LnJ1biIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2JlcmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5ldCIsIm1laW5mb3J1bS5uZXQiLCJh''@;'; put 'put ''ZmZpbml0eWxvdHRlcnkub3JnLnVrIiwicmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhuYmF5LmNvbSIsInUyLWxvY2FsLnhu''@;'; put 'put ''YmF5LmNvbSIsImNpc3Ryb24ubmwiLCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNpdGUuY29tIiwieW9tYm8ubWUiLCJ5''@;'; put 'put ''bmguZnIiLCJub2hvc3QubWUiLCJub2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiemFwLmNsb3VkIiwiemVhYnVyLmFwcCIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xvdWQubnUiXS5yZWR1Y2UoKFoscSk9Pntjb25zdCBR''@;'; put 'put ''PXEucmVwbGFjZSgvXihcKlwufFwhKS8sIiIpLFg9dy50b0FTQ0lJKFEpLHRlPXEuY2hhckF0KDApO2lmKFouaGFzKFgpKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7cX0gKCR7WH0pYCk7cmV0dXJuIFouc2V0KFgse3J1bGU6cSxzdWZmaXg6USxwdW55U3Vm''@;'; put 'put ''Zml4Olgsd2lsZGNhcmQ6IioiPT09dGUsZXhjZXB0aW9uOiIhIj09PXRlfSksWn0sbmV3IE1hcCksaj17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4gSXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhh''@;'; put 'put ''biAyNTUgY2hhcnMuIixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGggYSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6''@;'; put 'put ''IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9DSEFSUzoiRG9tYWluIG5hbWUgbGFiZWwg''@;'; put 'put ''Y2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sTD1aPT57aWYoInN0cmluZyIhPXR5cGVvZiBaKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7bGV0IHE9Wi5zbGljZSgwKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''OyIuIj09PXEuY2hhckF0KHEubGVuZ3RoLTEpJiYocT1xLnNsaWNlKDAscS5sZW5ndGgtMSkpO2NvbnN0IFE9KFo9Pntjb25zdCBxPXcudG9BU0NJSShaKTtpZihxLmxlbmd0aDwxKXJldHVybiJET01BSU5fVE9PX1NIT1JUIjtpZihxLmxlbmd0aD4yNTUpcmV0dXJuIkRPTUFJTl9UT09fTE9O''@;'; put 'put ''RyI7Y29uc3QgUT1xLnNwbGl0KCIuIik7bGV0IFg7Zm9yKGxldCB0ZT0wO3RlPFEubGVuZ3RoOysrdGUpe2lmKFg9UVt0ZV0sIVgubGVuZ3RoKXJldHVybiJMQUJFTF9UT09fU0hPUlQiO2lmKFgubGVuZ3RoPjYzKXJldHVybiJMQUJFTF9UT09fTE9ORyI7aWYoIi0iPT09WC5jaGFyQXQoMCkp''@;'; put 'put ''cmV0dXJuIkxBQkVMX1NUQVJUU19XSVRIX0RBU0giO2lmKCItIj09PVguY2hhckF0KFgubGVuZ3RoLTEpKXJldHVybiJMQUJFTF9FTkRTX1dJVEhfREFTSCI7aWYoIS9eW2EtejAtOVwtX10rJC8udGVzdChYKSlyZXR1cm4iTEFCRUxfSU5WQUxJRF9DSEFSUyJ9fSkocSk7aWYoUSlyZXR1cm57''@;'; put 'put ''aW5wdXQ6WixlcnJvcjp7bWVzc2FnZTpqW1FdLGNvZGU6UX19O2NvbnN0IFg9e2lucHV0OlosdGxkOm51bGwsc2xkOm51bGwsZG9tYWluOm51bGwsc3ViZG9tYWluOm51bGwsbGlzdGVkOiExfSx0ZT1xLnNwbGl0KCIuIik7aWYoImxvY2FsIj09PXRlW3RlLmxlbmd0aC0xXSlyZXR1cm4gWDtj''@;'; put 'put ''b25zdCByZT0oKT0+KC94bi0tLy50ZXN0KHEpJiYoWC5kb21haW4mJihYLmRvbWFpbj13LnRvQVNDSUkoWC5kb21haW4pKSxYLnN1YmRvbWFpbiYmKFguc3ViZG9tYWluPXcudG9BU0NJSShYLnN1YmRvbWFpbikpKSxYKSxvZT0oWj0+e2NvbnN0IHE9dy50b0FTQ0lJKFopLnNwbGl0KCIuIik7''@;'; put 'put ''Zm9yKGxldCBRPTA7UTxxLmxlbmd0aDtRKyspe2NvbnN0IFg9cS5zbGljZShRKS5qb2luKCIuIiksdGU9SC5nZXQoWCk7aWYodGUpcmV0dXJuIHRlfXJldHVybiBudWxsfSkocSk7aWYoIW9lKXJldHVybiB0ZS5sZW5ndGg8Mj9YOihYLnRsZD10ZS5wb3AoKSxYLnNsZD10ZS5wb3AoKSxYLmRv''@;'; put 'put ''bWFpbj1bWC5zbGQsWC50bGRdLmpvaW4oIi4iKSx0ZS5sZW5ndGgmJihYLnN1YmRvbWFpbj10ZS5wb3AoKSkscmUoKSk7WC5saXN0ZWQ9ITA7Y29uc3QgZ2U9b2Uuc3VmZml4LnNwbGl0KCIuIiksX2U9dGUuc2xpY2UoMCx0ZS5sZW5ndGgtZ2UubGVuZ3RoKTtyZXR1cm4gb2UuZXhjZXB0aW9u''@;'; put 'put ''JiZfZS5wdXNoKGdlLnNoaWZ0KCkpLFgudGxkPWdlLmpvaW4oIi4iKSwhX2UubGVuZ3RofHwob2Uud2lsZGNhcmQmJihnZS51bnNoaWZ0KF9lLnBvcCgpKSxYLnRsZD1nZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoWC5zbGQ9X2UucG9wKCksWC5kb21haW49W1guc2xkLFgudGxkXS5qb2lu''@;'; put 'put ''KCIuIiksX2UubGVuZ3RoJiYoWC5zdWJkb21haW49X2Uuam9pbigiLiIpKSkscmUoKX0sWT1aPT5aJiZMKFopLmRvbWFpbnx8bnVsbCxCPVo9Pntjb25zdCBxPUwoWik7cmV0dXJuISghcS5kb21haW58fCFxLmxpc3RlZCl9O0ouZGVmYXVsdD17cGFyc2U6TCxnZXQ6WSxpc1ZhbGlkOkJ9LEou''@;'; put 'put ''ZXJyb3JDb2Rlcz1qLEouZ2V0PVksSi5pc1ZhbGlkPUIsSi5wYXJzZT1MfSw0OTQ2OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2si''@;'; put 'put ''fSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNi''@;'; put 'put ''YyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2''@;'; put 'put ''IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZC''@;'; put 'put ''IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6''@;'; put 'put ''InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJl''@;'; put 'put ''YW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0s''@;'; put 'put ''ImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJr''@;'; put 'put ''ZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6''@;'; put 'put ''MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2''@;'; put 'put ''NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJz''@;'; put 'put ''aGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FF''@;'; put 'put ''bmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1''@;'; put 'put ''MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNo''@;'; put 'put ''YTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIs''@;'; put 'put ''Imhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0Iiwi''@;'; put 'put ''aWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWdu''@;'; put 'put ''IjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24i''@;'; put 'put ''OiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRz''@;'; put 'put ''YSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNh''@;'; put 'put ''IiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQi''@;'; put 'put ''OiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1''@;'; put 'put ''IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4x''@;'; put 'put ''LjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19S''@;'; put 'put ''RFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19O''@;'; put 'put ''T0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNS''@;'; put 'put ''IjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9U''@;'; put 'put ''QVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1''@;'; put 'put ''NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFM''@;'; put 'put ''IjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUx''@;'; put 'put ''LCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJF''@;'; put 'put ''Tk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMy''@;'; put 'put ''LCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUs''@;'; put 'put ''IkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEs''@;'; put 'put ''IlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJN''@;'; put 'put ''IjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQx''@;'; put 'put ''OTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1F''@;'; put 'put ''UkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQ''@;'; put 'put ''RV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19D''@;'; put 'put ''T01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9f''@;'; put 'put ''VElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xF''@;'; put 'put ''X0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NM''@;'; put 'put ''X09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0Ei''@;'; put 'put ''OjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRI''@;'; put 'put ''T0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJM''@;'; put 'put ''RUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09N''@;'; put 'put ''UFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9y''@;'; put 'put ''dHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk''@;'; put 'put ''ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdj''@;'; put 'put ''Yzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5''@;'; put 'put ''Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTli''@;'; put 'put ''M2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1''@;'; put 'put ''ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''YzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1''@;'; put 'put ''Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRh''@;'; put 'put ''YmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZl''@;'; put 'put ''MTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIz''@;'; put 'put ''ZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2''@;'; put 'put ''YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYx''@;'; put 'put ''MmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIi''@;'; put 'put ''LCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1''@;'; put 'put ''ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJi''@;'; put 'put ''OWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4''@;'; put 'put ''ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNl''@;'; put 'put ''Yzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJk''@;'; put 'put ''YTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZm''@;'; put 'put ''YjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5''@;'; put 'put ''OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNi''@;'; put 'put ''ZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1''@;'; put 'put ''YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4''@;'; put 'put ''Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIx''@;'; put 'put ''MDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQx''@;'; put 'put ''ZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4''@;'; put 'put ''MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3''@;'; put 'put ''NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2''@;'; put 'put ''ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlh''@;'; put 'put ''NjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2''@;'; put 'put ''NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQz''@;'; put 'put ''MzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4''@;'; put 'put ''MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0''@;'; put 'put ''Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRk''@;'; put 'put ''ZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0''@;'; put 'put ''N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4''@;'; put 'put ''NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUx''@;'; put 'put ''MmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2''@;'; put 'put ''Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRh''@;'; put 'put ''YjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFh''@;'; put 'put ''OWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgn''@;'; put 'put ''eyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0''@;'; put 'put ''MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4x''@;'; put 'put ''MDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxfX3dlYnBhY2tfbW9k''@;'; put 'put ''dWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXyhjZSl7dmFyIEo9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2NlXTtpZih2b2lkIDAhPT1KKXJldHVybiBKLmV4cG9ydHM7dmFyIGI9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2NlXT17''@;'; put 'put ''aWQ6Y2UsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW2NlXS5jYWxsKGIuZXhwb3J0cyxiLGIuZXhwb3J0cyxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fKSxiLmxvYWRlZD0hMCxiLmV4cG9ydHN9X19uZXN0ZWRfd2VicGFja19yZXF1''@;'; put 'put ''aXJlXzI4OTQ5MDJfXy5kPShjZSxKKT0+e2Zvcih2YXIgYiBpbiBKKV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODk0OTAyX18ubyhKLGIpJiYhX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXy5vKGNlLGIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsYix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6SltiXX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRj''@;'; put 'put ''aHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm89KGNlLEopPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2UsSiksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5''@;'; put 'put ''MDJfXy5yPWNlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxf''@;'; put 'put ''X25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg5NDkwMl9fLm5tZD1jZT0+KGNlLnBhdGhzPVtdLGNlLmNoaWxkcmVufHwoY2UuY2hpbGRyZW49W10pLGNlKTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4OTQ5MDJfXygzNjA3KTtyZXR1''@;'; put 'put ''cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVsZS5leHBvcnRzPWIoKX0sNTk0ODpmdW5jdGlvbihjZSxKLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSCl7cmV0dXJuIEgmJkguX19lc01vZHVsZT9IOntkZWZh''@;'; put 'put ''dWx0Okh9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSi5pc1NwZWNpYWxNaXNzaW5nPUouY2hvaWNlVmFsaWRhdG9yPUouY29uZmlybWF0aW9uVmFsaWRhdG9yPUoudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBfPUQoYigxMjk1NCkpO0oudXJs''@;'; put 'put ''VmFsaWRhdG9yPShILFIpPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoSCl8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoSCl8fCIiPT09SHx8UixKLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1IPT4hMD09PUh8fCExPT09SCxKLmNob2ljZVZhbGlkYXRvcj0oSCxSLGopPT5IPjAmJkg8PVJ8fGosSi5p''@;'; put 'put ''c1NwZWNpYWxNaXNzaW5nPUg9Pigic3RyaW5nIiE9dHlwZW9mIEh8fCFILmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoSCl9LDEzMjQ3OihjZSxKKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXztKLlk9dm9pZCAwLChfPUouWXx8KEouWT17''@;'; put 'put ''fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLF8uU2FzOT0iU0FTOSIsXy5TYXNqcz0iU0FTSlMifSwyNTAwMTooY2UsSik9PnsidXNlIHN0cmljdCI7Si5DPXZvaWQgMCxKLkM9KF8scD0xLE49MTA5OTUxMTYyNzc3Nik9PntpZigwPT09XylyZXR1cm4iMCBCIjtfPV8+Tj9OOl87Y29uc3QgSD1wPDA/''@;'; put 'put ''MDpwLFI9TWF0aC5mbG9vcihNYXRoLmxvZyhfKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKF8vTWF0aC5wb3coMTAyNCxSKSkudG9GaXhlZChIKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtSXX19LDQyOTI0OmZ1bmN0aW9uKGNlKXt2YXIgSj17dmVyc2lvbjoiMS4xNS4wIn07Sls0''@;'; put 'put ''MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3''@;'; put 'put ''ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJc''@;'; put 'put ''eGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1''@;'; put 'put ''MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1''@;'; put 'put ''OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYx''@;'; put 'put ''XHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHAp''@;'; put 'put ''O3JldHVybntlbmM6XyxkZWM6RH19KCksSls2MjBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4''@;'; put 'put ''MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx1MDEwNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEwN1x4''@;'; put 'put ''YzRcdTAxMDRcdTAxMThcdTAxMTlcdTAxNDJceGY0XHhmNlx1MDEwNlx4ZmJceGY5XHUwMTVhXHhkNlx4ZGNceGEyXHUwMTQxXHhhNVx1MDE1Ylx1MDE5Mlx1MDE3OVx1MDE3Ylx4ZjNceGQzXHUwMTQ0XHUwMTQzXHUwMTdhXHUwMTdjXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhi''@;'; put 'put ''Ylx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1''@;'; put 'put ''MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUw''@;'; put 'put ''M2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1''@;'; put 'put ''MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls3MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc''@;'; put 'put ''eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5''@;'; put 'put ''MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1''@;'; put 'put ''MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1''@;'; put 'put ''Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1''@;'; put 'put ''MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4''@;'; put 'put ''Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtw''@;'; put 'put ''XT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJc''@;'; put 'put ''eDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZc''@;'; put 'put ''eGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1''@;'; put 'put ''MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhj''@;'; put 'put ''YVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4''@;'; put 'put ''YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg1Ml09ZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK''@;'; put 'put ''S0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNk''@;'; put 'put ''XHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy''@;'; put 'put ''NFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1''@;'; put 'put ''MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRc''@;'; put 'put ''eGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0''@;'; put 'put ''KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx''@;'; put 'put ''ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFc''@;'; put 'put ''eGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1''@;'; put 'put ''MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhj''@;'; put 'put ''YVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4''@;'; put 'put ''XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbODYxXT1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI''@;'; put 'put ''SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4''@;'; put 'put ''ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdc''@;'; put 'put ''dTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1''@;'; put 'put ''NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRc''@;'; put 'put ''dTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVj''@;'; put 'put ''OkR9fSgpLEpbODY1XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt''@;'; put 'put ''Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhm''@;'; put 'put ''NFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1''@;'; put 'put ''NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVc''@;'; put 'put ''dTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1''@;'; put 'put ''MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1i''@;'; put 'put ''LmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFj''@;'; put 'put ''XHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0''@;'; put 'put ''MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1''@;'; put 'put ''MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNc''@;'; put 'put ''dTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0''@;'; put 'put ''MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSls4NzRd''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6''@;'; put 'put ''Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFc''@;'; put 'put ''dTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBl''@;'; put 'put ''MjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFc''@;'; put 'put ''dTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzg5NV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMTBjXHhmY1x4ZTlcdTAxMGZceGU0XHUwMTBlXHUwMTY0XHUwMTBkXHUwMTFiXHUwMTFhXHUwMTM5XHhjZFx1MDEzZVx1MDFlYVx4YzRceGMxXHhjOVx1MDE3ZVx1MDE3ZFx4ZjRceGY2XHhkM1x1MDE2Zlx4ZGFceGZk''@;'; put 'put ''XHhkNlx4ZGNcdTAxNjBcdTAxM2RceGRkXHUwMTU4XHUwMTY1XHhlMVx4ZWRceGYzXHhmYVx1MDE0OFx1MDE0N1x1MDE2ZVx4ZDRcdTAxNjFcdTAxNTlcdTAxNTVcdTAxNTRceGJjXHhhN1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUy''@;'; put 'put ''NTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5''@;'; put 'put ''XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlc''@;'; put 'put ''dTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFy''@;'; put 'put ''QXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzkzMl09ZnVuY3Rpb24oKXt2YXIgcCxiPVtdLEQ9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc''@;'; put 'put ''eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''NjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZcdWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2Nc''@;'; put 'put ''dWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZmOGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZm''@;'; put 'put ''OThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5sZW5ndGg7KytwKTY1NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1b''@;'; put 'put ''cF0pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVm''@;'; put 'put ''ZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0''@;'; put 'put ''XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHVmZjBiXHVmZjBkXHhiMVx4ZDdcdWZmZmRceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUy''@;'; put 'put ''MjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1''@;'; put 'put ''YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjBcdTIy''@;'; put 'put ''YTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFc''@;'; put 'put ''eGI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNWVmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTI5XVtwXV09MzMwMjQrcCxiWzMzMDI0K3BdPV9bMTI5XVtwXSk7''@;'; put 'put ''Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVm''@;'; put 'put ''ZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJj''@;'; put 'put ''XHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVm''@;'; put 'put ''ZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0''@;'; put 'put ''XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUz''@;'; put 'put ''MDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdi''@;'; put 'put ''XHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMwXVtwXV09MzMyODArcCxiWzMzMjgwK3Bd''@;'; put 'put ''PV9bMTMwXVtwXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUz''@;'; put 'put ''MGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNh''@;'; put 'put ''XHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUz''@;'; put 'put ''MGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzky''@;'; put 'put ''XHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMxXVtwXV09MzM1MzYr''@;'; put 'put ''cCxiWzMzNTM2K3BdPV9bMTMxXVtwXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUw''@;'; put 'put ''NDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHVmZmZkXHUwNDNlXHUwNDNmXHUwNDQwXHUw''@;'; put 'put ''NDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUy''@;'; put 'put ''NTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMy''@;'; put 'put ''XVtwXV09MzM3OTIrcCxiWzMzNzkyK3BdPV9bMTMyXVtwXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUy''@;'; put 'put ''NDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAz''@;'; put 'put ''XHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUz''@;'; put 'put ''MDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzVdW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihEW19bMTM1XVtwXV09MzQ1NjArcCxiWzM0NTYwK3BdPV9bMTM1XVtwXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1''@;'; put 'put ''YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5''@;'; put 'put ''XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5''@;'; put 'put ''MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzZdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihEW19bMTM2XVtwXV09MzQ4MTYrcCxiWzM0ODE2K3BdPV9bMTM2XVtwXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1''@;'; put 'put ''Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBj''@;'; put 'put ''XHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1''@;'; put 'put ''M2FkXHU1MTg2XHVmZmZkXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVh''@;'; put 'put ''XHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0''@;'; put 'put ''ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2My''@;'; put 'put ''XHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5''@;'; put 'put ''NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM3XS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1sxMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM3XVtwXV09MzUwNzIrcCxiWzM1MDcyK3BdPV9bMTM3XVtwXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3''@;'; put 'put ''MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2Ez''@;'; put 'put ''XHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5''@;'; put 'put ''ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMz''@;'; put 'put ''XHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1''@;'; put 'put ''ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2''@;'; put 'put ''XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0''@;'; put 'put ''ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM4XS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1sxMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM4XVtwXV09MzUzMjgrcCxiWzM1MzI4K3BdPV9bMTM4XVtwXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2''@;'; put 'put ''YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEw''@;'; put 'put ''XHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1''@;'; put 'put ''M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIw''@;'; put 'put ''XHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2''@;'; put 'put ''MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUw''@;'; put 'put ''XHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3''@;'; put 'put ''MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMTM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM5XVtwXV09MzU1ODQrcCxiWzM1NTg0K3BdPV9bMTM5XVtwXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2''@;'; put 'put ''Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUz''@;'; put 'put ''XHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4''@;'; put 'put ''YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHVmZmZkXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1''@;'; put 'put ''XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5''@;'; put 'put ''Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFi''@;'; put 'put ''XHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2''@;'; put 'put ''MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMTQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQwXVtwXV09MzU4NDArcCxiWzM1ODQwK3BdPV9bMTQwXVtwXSk7Zm9yKF9bMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZk''@;'; put 'put ''XHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4''@;'; put 'put ''YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRh''@;'; put 'put ''XHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2''@;'; put 'put ''ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVl''@;'; put 'put ''XHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5''@;'; put 'put ''NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQxXVtwXV09MzYwOTYrcCxiWzM2MDk2K3BdPV9bMTQxXVtwXSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2''@;'; put 'put ''XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1''@;'; put 'put ''ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2''@;'; put 'put ''XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4''@;'; put 'put ''NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4Mjlk''@;'; put 'put ''XHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4''@;'; put 'put ''MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQyXVtwXV09MzYzNTIrcCxiWzM2MzUyK3BdPV9bMTQyXVtwXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRi''@;'; put 'put ''XHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4''@;'; put 'put ''ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHVmZmZkXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5''@;'; put 'put ''XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1''@;'; put 'put ''OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4''@;'; put 'put ''XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5''@;'; put 'put ''MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMx''@;'; put 'put ''XHU1N2Y0XHU5OGZlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQzXVtwXV09MzY2MDgrcCxiWzM2NjA4K3BdPV9bMTQzXVtwXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMz''@;'; put 'put ''XHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1''@;'; put 'put ''ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcw''@;'; put 'put ''XHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1''@;'; put 'put ''MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTky''@;'; put 'put ''XHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4''@;'; put 'put ''YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdk''@;'; put 'put ''XHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ0XVtwXV09MzY4NjQrcCxiWzM2ODY0K3BdPV9bMTQ0XVtwXSk7Zm9yKF9bMTQ1''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4''@;'; put 'put ''XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1''@;'; put 'put ''MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5''@;'; put 'put ''XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1''@;'; put 'put ''MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2Yzcw''@;'; put 'put ''XHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4''@;'; put 'put ''MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4''@;'; put 'put ''XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ1XVtwXV09MzcxMjArcCxiWzM3MTIwK3BdPV9bMTQ1XVtw''@;'; put 'put ''XSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5''@;'; put 'put ''XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4''@;'; put 'put ''YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHVmZmZkXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJk''@;'; put 'put ''XHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1''@;'; put 'put ''ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1''@;'; put 'put ''XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1''@;'; put 'put ''OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3''@;'; put 'put ''XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ2XVtwXV09MzczNzYrcCxiWzM3Mzc2''@;'; put 'put ''K3BdPV9bMTQ2XVtwXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJh''@;'; put 'put ''XHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1''@;'; put 'put ''OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4''@;'; put 'put ''XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4''@;'; put 'put ''NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2Uw''@;'; put 'put ''XHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2''@;'; put 'put ''YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNj''@;'; put 'put ''XHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ3XVtwXV09Mzc2''@;'; put 'put ''MzIrcCxiWzM3NjMyK3BdPV9bMTQ3XVtwXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcx''@;'; put 'put ''XHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2''@;'; put 'put ''Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZk''@;'; put 'put ''XHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5''@;'; put 'put ''ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJj''@;'; put 'put ''XHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3''@;'; put 'put ''NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdm''@;'; put 'put ''XHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b''@;'; put 'put ''MTQ4XVtwXV09Mzc4ODgrcCxiWzM3ODg4K3BdPV9bMTQ4XVtwXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4''@;'; put 'put ''XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5''@;'; put 'put ''MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHVmZmZkXHU2NWE3''@;'; put 'put ''XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1''@;'; put 'put ''ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVl''@;'; put 'put ''XHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4''@;'; put 'put ''ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4''@;'; put 'put ''XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDldW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihEW19bMTQ5XVtwXV09MzgxNDQrcCxiWzM4MTQ0K3BdPV9bMTQ5XVtwXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBj''@;'; put 'put ''XHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4''@;'; put 'put ''MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2''@;'; put 'put ''XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3''@;'; put 'put ''ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2Ri''@;'; put 'put ''XHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2''@;'; put 'put ''YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNl''@;'; put 'put ''XHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTBd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUwXVtwXV09Mzg0MDArcCxiWzM4NDAwK3BdPV9bMTUwXVtwXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3''@;'; put 'put ''XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5''@;'; put 'put ''ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdl''@;'; put 'put ''XHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1''@;'; put 'put ''MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRj''@;'; put 'put ''XHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1''@;'; put 'put ''MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3''@;'; put 'put ''XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUxXS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1sxNTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUxXVtwXV09Mzg2NTYrcCxiWzM4NjU2K3BdPV9bMTUxXVtwXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQy''@;'; put 'put ''XHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4''@;'; put 'put ''YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTll''@;'; put 'put ''XHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0''@;'; put 'put ''ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5''@;'; put 'put ''XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUyXS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1sxNTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUyXVtwXV09Mzg5MTIrcCxiWzM4OTEyK3BdPV9bMTUyXVtwXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNh''@;'; put 'put ''XHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1''@;'; put 'put ''MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1''@;'; put 'put ''XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1''@;'; put 'put ''MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5''@;'; put 'put ''XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1''@;'; put 'put ''Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRl''@;'; put 'put ''XHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMTUzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUzXVtwXV09MzkxNjgrcCxiWzM5MTY4K3BdPV9bMTUzXVtwXSk7Zm9yKF9bMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1''@;'; put 'put ''NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFi''@;'; put 'put ''XHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1''@;'; put 'put ''NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRm''@;'; put 'put ''XHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1''@;'; put 'put ''ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZi''@;'; put 'put ''XHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMTU0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU0XVtwXV09Mzk0MjQrcCxiWzM5NDI0K3BdPV9bMTU0XVtwXSk7Zm9yKF9bMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1''@;'; put 'put ''YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVh''@;'; put 'put ''XHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHVmZmZkXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1''@;'; put 'put ''YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2Fi''@;'; put 'put ''XHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1''@;'; put 'put ''ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFh''@;'; put 'put ''XHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU1XVtwXV09Mzk2ODArcCxiWzM5NjgwK3BdPV9bMTU1XVtwXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1''@;'; put 'put ''ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4''@;'; put 'put ''XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2''@;'; put 'put ''MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQz''@;'; put 'put ''XHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2''@;'; put 'put ''MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFi''@;'; put 'put ''XHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2''@;'; put 'put ''MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU2XVtwXV09Mzk5MzYrcCxiWzM5OTM2K3BdPV9bMTU2XVtwXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2''@;'; put 'put ''MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNl''@;'; put 'put ''XHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVmZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2''@;'; put 'put ''NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3''@;'; put 'put ''XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2''@;'; put 'put ''NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAz''@;'; put 'put ''XHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2''@;'; put 'put ''NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU3XVtwXV09NDAxOTIrcCxiWzQwMTkyK3BdPV9bMTU3XVtwXSk7Zm9yKF9bMTU4XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2''@;'; put 'put ''NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0''@;'; put 'put ''XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHVmZmZkXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2''@;'; put 'put ''ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3''@;'; put 'put ''XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2''@;'; put 'put ''OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBh''@;'; put 'put ''XHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2''@;'; put 'put ''YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU4XVtwXV09NDA0NDgrcCxiWzQwNDQ4K3BdPV9bMTU4XVtwXSk7Zm9yKF9b''@;'; put 'put ''MTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2''@;'; put 'put ''YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1''@;'; put 'put ''XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2''@;'; put 'put ''YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2Vh''@;'; put 'put ''XHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2''@;'; put 'put ''ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQz''@;'; put 'put ''XHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2''@;'; put 'put ''ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU5XVtwXV09NDA3MDQrcCxiWzQwNzA0K3BdPV9bMTU5''@;'; put 'put ''XVtwXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2''@;'; put 'put ''ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFh''@;'; put 'put ''XHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3''@;'; put 'put ''MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBk''@;'; put 'put ''XHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3''@;'; put 'put ''MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1''@;'; put 'put ''XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3''@;'; put 'put ''NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI0XVtwXV09NTczNDQrcCxiWzU3''@;'; put 'put ''MzQ0K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3''@;'; put 'put ''NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5''@;'; put 'put ''XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHVmZmZkXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3''@;'; put 'put ''NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3Njcy''@;'; put 'put ''XHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3''@;'; put 'put ''NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2''@;'; put 'put ''XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3''@;'; put 'put ''OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI1XVtwXV09''@;'; put 'put ''NTc2MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3''@;'; put 'put ''OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIw''@;'; put 'put ''XHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3''@;'; put 'put ''YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2''@;'; put 'put ''XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3''@;'; put 'put ''YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRj''@;'; put 'put ''XHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3''@;'; put 'put ''Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjZdW3BdLmNoYXJDb2RlQXQoMCkmJihE''@;'; put 'put ''W19bMjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3''@;'; put 'put ''ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4''@;'; put 'put ''XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3''@;'; put 'put ''ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTli''@;'; put 'put ''XHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3''@;'; put 'put ''ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIx''@;'; put 'put ''XHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4''@;'; put 'put ''MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjddW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihEW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9bMjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4''@;'; put 'put ''MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5''@;'; put 'put ''XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4''@;'; put 'put ''MjY0XHVmZmZkXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5''@;'; put 'put ''XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4''@;'; put 'put ''MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2Zi''@;'; put 'put ''XHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4''@;'; put 'put ''NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sy''@;'; put 'put ''MjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI4XVtwXV09NTgzNjgrcCxiWzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4''@;'; put 'put ''NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZl''@;'; put 'put ''XHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4''@;'; put 'put ''NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4''@;'; put 'put ''XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4''@;'; put 'put ''N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdl''@;'; put 'put ''XHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4''@;'; put 'put ''OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI5XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI5XVtwXV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4''@;'; put 'put ''OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2''@;'; put 'put ''XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4''@;'; put 'put ''YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4''@;'; put 'put ''XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4''@;'; put 'put ''YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2Uz''@;'; put 'put ''XHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4''@;'; put 'put ''ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMw''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTQ3XHU4''@;'; put 'put ''ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2''@;'; put 'put ''XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4''@;'; put 'put ''ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHVmZmZkXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDEx''@;'; put 'put ''XHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5''@;'; put 'put ''MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThi''@;'; put 'put ''XHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5''@;'; put 'put ''MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0''@;'; put 'put ''XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5''@;'; put 'put ''NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUx''@;'; put 'put ''XHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5''@;'; put 'put ''NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNl''@;'; put 'put ''XHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5''@;'; put 'put ''N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNk''@;'; put 'put ''XHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5''@;'; put 'put ''YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMw''@;'; put 'put ''XHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5''@;'; put 'put ''YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUz''@;'; put 'put ''XHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5''@;'; put 'put ''YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNm''@;'; put 'put ''XHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5''@;'; put 'put ''NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHVmZmZkXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNl''@;'; put 'put ''XHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9bMjM0XVtwXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0Zjhh''@;'; put 'put ''XHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1''@;'; put 'put ''MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMw''@;'; put 'put ''XHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2''@;'; put 'put ''MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZh''@;'; put 'put ''XHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2''@;'; put 'put ''ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1''@;'; put 'put ''XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM3XVtwXV09NjA2NzIrcCxiWzYwNjcyK3BdPV9bMjM3XVtwXSk7Zm9yKF9bMjM4XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAx''@;'; put 'put ''XHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3''@;'; put 'put ''ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5''@;'; put 'put ''XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5''@;'; put 'put ''MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZm''@;'; put 'put ''XHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5''@;'; put 'put ''OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4''@;'; put 'put ''XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM4XVtwXV09NjA5MjgrcCxiWzYwOTI4K3BdPV9bMjM4XVtwXSk7Zm9y''@;'; put 'put ''KF9bMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2''@;'; put 'put ''XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0''@;'; put 'put ''ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHVmZmZkXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMw''@;'; put 'put ''XHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1''@;'; put 'put ''OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhh''@;'; put 'put ''XHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2''@;'; put 'put ''Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNm''@;'; put 'put ''XHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUwXVtwXV09NjRlMytwLGJbNjRlMytwXT1fWzI1''@;'; put 'put ''MF1bcF0pO2ZvcihfWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1''@;'; put 'put ''NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQy''@;'; put 'put ''ZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1''@;'; put 'put ''ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgw''@;'; put 'put ''N1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1''@;'; put 'put ''OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMy''@;'; put 'put ''MVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1''@;'; put 'put ''OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI1MV1bcF1dPTY0MjU2K3AsYls2''@;'; put 'put ''NDI1NitwXT1fWzI1MV1bcF0pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI1Ml1bcF1d''@;'; put 'put ''PTY0NTEyK3AsYls2NDUxMitwXT1fWzI1Ml1bcF0pO3JldHVybntlbmM6RCxkZWM6Yn19KCksSls5MzZdPWZ1bmN0aW9uKCl7dmFyIHAsYj1bXSxEPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy''@;'; put 'put ''XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMF1bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRl''@;'; put 'put ''MjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJc''@;'; put 'put ''dTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRlN2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRl''@;'; put 'put ''OTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJc''@;'; put 'put ''dTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRm''@;'; put 'put ''MTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJc''@;'; put 'put ''dTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRm''@;'; put 'put ''OGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEyOV1bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1sxMjldW3BdXT0zMzAyNCtwLGJbMzMwMjQrcF09X1sxMjldW3BdKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRm''@;'; put 'put ''YjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRc''@;'; put 'put ''dTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUw''@;'; put 'put ''MGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRcdTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlc''@;'; put 'put ''dTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUw''@;'; put 'put ''NjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFcdTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRc''@;'; put 'put ''dTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUwOTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUw''@;'; put 'put ''YTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhcdTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMF1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKERbX1sxMzBdW3BdXT0zMzI4MCtwLGJbMzMyODArcF09X1sxMzBdW3BdKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYmRcdTUwYmVcdTUwYmZcdTUwYzBcdTUwYzFcdTUwYzJcdTUwYzNcdTUw''@;'; put 'put ''YzRcdTUwYzVcdTUwYzZcdTUwYzdcdTUwYzhcdTUwYzlcdTUwY2FcdTUwY2JcdTUwY2NcdTUwY2RcdTUwY2VcdTUwZDBcdTUwZDFcdTUwZDJcdTUwZDNcdTUwZDRcdTUwZDVcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGJcdTUwZGNcdTUwZGRcdTUwZGVcdTUwZGZcdTUwZTBcdTUwZTFcdTUwZTJc''@;'; put 'put ''dTUwZTNcdTUwZTRcdTUwZTVcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjZcdTUwZjdcdTUwZjhcdTUwZjlcdTUwZmFcdTUwZmNcdTUwZmRcdTUwZmVcdTUwZmZcdTUxMDBcdTUxMDFcdTUxMDJcdTUxMDNcdTUxMDRcdTUxMDVcdTUx''@;'; put 'put ''MDhcdWZmZmRcdTUxMDlcdTUxMGFcdTUxMGNcdTUxMGRcdTUxMGVcdTUxMGZcdTUxMTBcdTUxMTFcdTUxMTNcdTUxMTRcdTUxMTVcdTUxMTZcdTUxMTdcdTUxMThcdTUxMTlcdTUxMWFcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMWZcdTUxMjBcdTUxMjJcdTUxMjNcdTUxMjRcdTUxMjVc''@;'; put 'put ''dTUxMjZcdTUxMjdcdTUxMjhcdTUxMjlcdTUxMmFcdTUxMmJcdTUxMmNcdTUxMmRcdTUxMmVcdTUxMmZcdTUxMzBcdTUxMzFcdTUxMzJcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzZcdTUxMzdcdTUxMzhcdTUxMzlcdTUxM2FcdTUxM2JcdTUxM2NcdTUxM2RcdTUxM2VcdTUxNDJcdTUxNDdcdTUx''@;'; put 'put ''NGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTUxNWZcdTUxNjBcdTUxNjFcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNc''@;'; put 'put ''dTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTZcdTUxYTdcdTUxYThcdTUxYTlcdTUxYWFcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUx''@;'; put 'put ''YjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDJcdTUxZDNcdTUxZDRcdTUxZDVcdTUxZDZcdTUxZDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEz''@;'; put 'put ''MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzFdW3BdXT0zMzUzNitwLGJbMzM1MzYrcF09X1sxMzFdW3BdKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUx''@;'; put 'put ''ZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVc''@;'; put 'put ''dTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUy''@;'; put 'put ''NTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlc''@;'; put 'put ''dTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUyOGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUy''@;'; put 'put ''YTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2Vc''@;'; put 'put ''dTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUyZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUy''@;'; put 'put ''ZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzJdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzEzMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzJdW3BdXT0zMzc5MitwLGJbMzM3OTIrcF09X1sxMzJdW3BdKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUz''@;'; put 'put ''MTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBc''@;'; put 'put ''dTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUz''@;'; put 'put ''ODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJcdTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFc''@;'; put 'put ''dTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUzYzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUz''@;'; put 'put ''ZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2Zc''@;'; put 'put ''dTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0''@;'; put 'put ''NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzNd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzNdW3BdXT0zNDA0OCtwLGJbMzQwNDgrcF09X1sxMzNdW3BdKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YTJcdTU0''@;'; put 'put ''YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTBcdTU0ZTFcdTU0ZTJcdTU0ZTNcdTU0ZTRcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFc''@;'; put 'put ''dTU0ZjRcdTU0ZjVcdTU0ZjZcdTU0ZjdcdTU0ZjhcdTU0ZjlcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGFcdTU1MGJcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTJcdTU1MTNcdTU1MTVcdTU1MTZcdTU1MTdcdTU1MThcdTU1MTlcdTU1MWFcdTU1''@;'; put 'put ''MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjZcdWZmZmRcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGJcdTU1NGNc''@;'; put 'put ''dTU1NGRcdTU1NGVcdTU1NGZcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTdcdTU1NThcdTU1NTlcdTU1NWFcdTU1NWJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmZcdTU1NzBcdTU1NzFcdTU1NzJcdTU1NzNcdTU1NzRcdTU1''@;'; put 'put ''NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTBcdTU1YTFcdTU1YTJcdTU1YTNcdTU1YTRcdTU1YTVcdTU1YTZcdTU1YThcdTU1YTlcdTU1YWFc''@;'; put 'put ''dTU1YWJcdTU1YWNcdTU1YWRcdTU1YWVcdTU1YWZcdTU1YjBcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmZcdTU1YzBcdTU1YzFcdTU1YzJcdTU1YzNcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDdcdTU1''@;'; put 'put ''ZDhcdTU1ZDlcdTU1ZGFcdTU1ZGJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1ZjhcdTU1ZjlcdTU1ZmFcdTU1ZmJcdTU1ZmNcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzRdW3BdXT0zNDMwNCtwLGJbMzQzMDQrcF09X1sxMzRdW3BdKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVc''@;'; put 'put ''dTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2''@;'; put 'put ''NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2Vc''@;'; put 'put ''dTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2''@;'; put 'put ''OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVc''@;'; put 'put ''dTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2''@;'; put 'put ''ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzVdW3BdXT0zNDU2MCtwLGJbMzQ1NjArcF09X1sxMzVdW3BdKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZc''@;'; put 'put ''dTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3''@;'; put 'put ''NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlc''@;'; put 'put ''dTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3''@;'; put 'put ''YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBc''@;'; put 'put ''dTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4''@;'; put 'put ''MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRcdTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2Nc''@;'; put 'put ''dTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzZdW3BdXT0zNDgxNitwLGJbMzQ4MTYrcF09X1sxMzZdW3BdKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4M2VcdTU4M2ZcdTU4NDBcdTU4NDFcdTU4NDJcdTU4NDNcdTU4NDVcdTU4NDZcdTU4NDdcdTU4NDhcdTU4NDlcdTU4NGFcdTU4NGJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcdTU4NWFc''@;'; put 'put ''dTU4NWJcdTU4NWNcdTU4NWRcdTU4NWZcdTU4NjBcdTU4NjFcdTU4NjJcdTU4NjNcdTU4NjRcdTU4NjZcdTU4NjdcdTU4NjhcdTU4NjlcdTU4NmFcdTU4NmRcdTU4NmVcdTU4NmZcdTU4NzBcdTU4NzFcdTU4NzJcdTU4NzNcdTU4NzRcdTU4NzVcdTU4NzZcdTU4NzdcdTU4NzhcdTU4NzlcdTU4''@;'; put 'put ''N2FcdTU4N2JcdTU4N2NcdTU4N2RcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGNcdWZmZmRcdTU4OGRcdTU4OGVcdTU4OGZcdTU4OTBcdTU4OTFcdTU4OTRcdTU4OTVcdTU4OTZcdTU4OTdcdTU4OThcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTBc''@;'; put 'put ''dTU4YTFcdTU4YTJcdTU4YTNcdTU4YTRcdTU4YTVcdTU4YTZcdTU4YTdcdTU4YWFcdTU4YWJcdTU4YWNcdTU4YWRcdTU4YWVcdTU4YWZcdTU4YjBcdTU4YjFcdTU4YjJcdTU4YjNcdTU4YjRcdTU4YjVcdTU4YjZcdTU4YjdcdTU4YjhcdTU4YjlcdTU4YmFcdTU4YmJcdTU4YmRcdTU4YmVcdTU4''@;'; put 'put ''YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzZcdTU4YzdcdTU4YzhcdTU4YzlcdTU4Y2FcdTU4Y2JcdTU4Y2NcdTU4Y2RcdTU4Y2VcdTU4Y2ZcdTU4ZDBcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDZcdTU4ZDdcdTU4ZDhcdTU4ZDlcdTU4ZGFcdTU4ZGJcdTU4ZGNcdTU4ZGRcdTU4ZGVc''@;'; put 'put ''dTU4ZGZcdTU4ZTBcdTU4ZTFcdTU4ZTJcdTU4ZTNcdTU4ZTVcdTU4ZTZcdTU4ZTdcdTU4ZThcdTU4ZTlcdTU4ZWFcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmFcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU4ZmVcdTU4ZmZcdTU5MDBcdTU5MDFcdTU5''@;'; put 'put ''MDNcdTU5MDVcdTU5MDZcdTU5MDhcdTU5MDlcdTU5MGFcdTU5MGJcdTU5MGNcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNc''@;'; put 'put ''dTU5MzVcdTU5MzZcdTU5M2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzddW3BdXT0zNTA3MitwLGJbMzUwNzIrcF09X1sxMzddW3BdKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNc''@;'; put 'put ''dTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5''@;'; put 'put ''OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFc''@;'; put 'put ''dTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5''@;'; put 'put ''ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBc''@;'; put 'put ''dTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVh''@;'; put 'put ''MzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJc''@;'; put 'put ''dTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzhdW3BdXT0zNTMyOCtwLGJbMzUzMjgrcF09X1sxMzhdW3BdKTtmb3IoX1sxMzldPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2Jc''@;'; put 'put ''dTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVhOGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVh''@;'; put 'put ''OTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlcdTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFc''@;'; put 'put ''dTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVhY2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVh''@;'; put 'put ''ZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVcdTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJc''@;'; put 'put ''dTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTViMTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTVi''@;'; put 'put ''MjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZcdTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2Zc''@;'; put 'put ''dTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxMzldW3BdXT0zNTU4NCtwLGJbMzU1ODQrcF09X1sxMzldW3BdKTtmb3Io''@;'; put 'put ''X1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNDhcdTViNDlcdTViNGFcdTViNGJcdTViNGNcdTViNGRcdTViNGVcdTViNGZcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRc''@;'; put 'put ''dTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTVi''@;'; put 'put ''YWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2FcdTViY2JcdTViY2RcdTViY2VcdTViY2ZcdWZmZmRcdTViZDFcdTViZDRcdTViZDVcdTViZDZcdTViZDdcdTViZDhcdTViZDlcdTViZGFc''@;'; put 'put ''dTViZGJcdTViZGNcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTlcdTViZWFcdTViZWJcdTViZWNcdTViZWRcdTViZWZcdTViZjFcdTViZjJcdTViZjNcdTViZjRcdTViZjVcdTViZjZcdTViZjdcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVj''@;'; put 'put ''MDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVc''@;'; put 'put ''dTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjdcdTVjNjhcdTVjNjlcdTVjNmFcdTVjNmJcdTVjNmNcdTVj''@;'; put 'put ''NmRcdTVjNzBcdTVjNzJcdTVjNzNcdTVjNzRcdTVjNzVcdTVjNzZcdTVjNzdcdTVjNzhcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODNcdTVjODRcdTVjODVcdTVjODZcdTVjODdcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWRc''@;'; put 'put ''dTVjOWVcdTVjOWZcdTVjYTBcdTVjYTFcdTVjYTRcdTVjYTVcdTVjYTZcdTVjYTdcdTVjYThcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDBdW3BdXT0zNTg0MCtwLGJbMzU4NDArcF09X1sx''@;'; put 'put ''NDBdW3BdKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNc''@;'; put 'put ''dTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVj''@;'; put 'put ''ZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFc''@;'; put 'put ''dTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVk''@;'; put 'put ''MzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNc''@;'; put 'put ''dTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVk''@;'; put 'put ''NzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNc''@;'; put 'put ''dTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDFdW3BdXT0zNjA5NitwLGJb''@;'; put 'put ''MzYwOTYrcF09X1sxNDFdW3BdKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRc''@;'; put 'put ''dTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVkYmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVk''@;'; put 'put ''Y2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFcdTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhc''@;'; put 'put ''dTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVl''@;'; put 'put ''MmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJc''@;'; put 'put ''dTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVlNjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVl''@;'; put 'put ''NzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFc''@;'; put 'put ''dTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDJdW3Bd''@;'; put 'put ''XT0zNjM1MitwLGJbMzYzNTIrcF09X1sxNDJdW3BdKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2JcdTVlY2NcdTVlY2RcdTVlY2VcdTVlY2ZcdTVlZDBcdTVlZDRcdTVlZDVc''@;'; put 'put ''dTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGNcdTVlZGRcdTVlZGVcdTVlZGZcdTVlZTBcdTVlZTFcdTVlZTJcdTVlZTNcdTVlZTRcdTVlZTVcdTVlZTZcdTVlZTdcdTVlZTlcdTVlZWJcdTVlZWNcdTVlZWRcdTVlZWVcdTVlZWZcdTVlZjBcdTVlZjFcdTVlZjJcdTVlZjNcdTVlZjVcdTVl''@;'; put 'put ''ZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdWZmZmRcdTVmMjhcdTVmMmJc''@;'; put 'put ''dTVmMmNcdTVmMmVcdTVmMzBcdTVmMzJcdTVmMzNcdTVmMzRcdTVmMzVcdTVmMzZcdTVmMzdcdTVmMzhcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVmNDFcdTVmNDJcdTVmNDNcdTVmNDRcdTVmNDVcdTVmNDZcdTVmNDdcdTVmNDhcdTVmNDlcdTVmNGFcdTVmNGJcdTVmNGNcdTVmNGRcdTVm''@;'; put 'put ''NGVcdTVmNGZcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNc''@;'; put 'put ''dTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTJcdTVmYTNcdTVmYTRcdTVmYTVcdTVmYTZcdTVmYTdcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjJcdTVm''@;'; put 'put ''YjNcdTVmYjRcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmVcdTVmYmZcdTVmYzBcdTVmYzFcdTVmYzJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVc''@;'; put 'put ''dTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0M11bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KERbX1sxNDNdW3BdXT0zNjYwOCtwLGJbMzY2MDgrcF09X1sxNDNdW3BdKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThc''@;'; put 'put ''dTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYw''@;'; put 'put ''NDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRc''@;'; put 'put ''dTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYw''@;'; put 'put ''YjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdc''@;'; put 'put ''dTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYx''@;'; put 'put ''MTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRc''@;'; put 'put ''dTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0NF1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1sxNDRdW3BdXT0zNjg2NCtwLGJbMzY4NjQrcF09X1sxNDRdW3BdKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJc''@;'; put 'put ''dTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYx''@;'; put 'put ''NzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRcdTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNc''@;'; put 'put ''dTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYxYTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYx''@;'; put 'put ''YjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVcdTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhc''@;'; put 'put ''dTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYxZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYx''@;'; put 'put ''ZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhc''@;'; put 'put ''dTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE0NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDVdW3BdXT0zNzEyMCtwLGJbMzcxMjArcF09X1sxNDVdW3BdKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdc''@;'; put 'put ''dTYyNTlcdTYyNWFcdTYyNWNcdTYyNWRcdTYyNWVcdTYyNWZcdTYyNjBcdTYyNjFcdTYyNjJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYy''@;'; put 'put ''ODhcdTYyOGJcdTYyOGNcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFc''@;'; put 'put ''dTYyYmVcdTYyYzBcdTYyYzFcdWZmZmRcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYz''@;'; put 'put ''MDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzNcdTYzMzRcdTYzMzVcdTYzMzZcdTYzMzdc''@;'; put 'put ''dTYzMzhcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTZcdTYzNTdcdTYzNThcdTYzNTlcdTYzNWFcdTYzNWJcdTYzNWNcdTYzNWRcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYz''@;'; put 'put ''NjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdc''@;'; put 'put ''dTYzOTlcdTYzOWFcdTYzOWJcdTYzOWNcdTYzOWRcdTYzOWVcdTYzOWZcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDZdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDZdW3BdXT0zNzM3NitwLGJbMzczNzYrcF09X1sxNDZdW3BdKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNc''@;'; put 'put ''dTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYz''@;'; put 'put ''ZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFc''@;'; put 'put ''dTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0''@;'; put 'put ''NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFc''@;'; put 'put ''dTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0''@;'; put 'put ''OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZc''@;'; put 'put ''dTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''NDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDddW3BdXT0zNzYzMitwLGJbMzc2MzIrcF09X1sxNDddW3BdKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJc''@;'; put 'put ''dTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0''@;'; put 'put ''ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJcdTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFc''@;'; put 'put ''dTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1''@;'; put 'put ''NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRc''@;'; put 'put ''dTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1''@;'; put 'put ''OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZc''@;'; put 'put ''dTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDhdW3BdXT0zNzg4OCtwLGJbMzc4ODgrcF09X1sxNDhdW3BdKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmJcdTY1ZmNcdTY1ZmRcdTY1ZmVcdTY1ZmZcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2''@;'; put 'put ''MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzdcdTY2MzhcdTY2MzlcdTY2M2FcdTY2M2JcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDRcdTY2NDVcdTY2NDZc''@;'; put 'put ''dTY2NDdcdTY2NDhcdTY2NDlcdTY2NGFcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NThcdWZmZmRcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcdTY2NmFcdTY2NmJcdTY2NmNcdTY2NmRcdTY2NzFcdTY2NzJcdTY2''@;'; put 'put ''NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OThcdTY2OTlcdTY2OWFc''@;'; put 'put ''dTY2OWJcdTY2OWNcdTY2OWVcdTY2OWZcdTY2YTBcdTY2YTFcdTY2YTJcdTY2YTNcdTY2YTRcdTY2YTVcdTY2YTZcdTY2YTlcdTY2YWFcdTY2YWJcdTY2YWNcdTY2YWRcdTY2YWZcdTY2YjBcdTY2YjFcdTY2YjJcdTY2YjNcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2''@;'; put 'put ''YmNcdTY2YmRcdTY2YmZcdTY2YzBcdTY2YzFcdTY2YzJcdTY2YzNcdTY2YzRcdTY2YzVcdTY2YzZcdTY2YzdcdTY2YzhcdTY2YzlcdTY2Y2FcdTY2Y2JcdTY2Y2NcdTY2Y2RcdTY2Y2VcdTY2Y2ZcdTY2ZDBcdTY2ZDFcdTY2ZDJcdTY2ZDNcdTY2ZDRcdTY2ZDVcdTY2ZDZcdTY2ZDdcdTY2ZDhc''@;'; put 'put ''dTY2ZGFcdTY2ZGVcdTY2ZGZcdTY2ZTBcdTY2ZTFcdTY2ZTJcdTY2ZTNcdTY2ZTRcdTY2ZTVcdTY2ZTdcdTY2ZThcdTY2ZWFcdTY2ZWJcdTY2ZWNcdTY2ZWRcdTY2ZWVcdTY2ZWZcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNDldW3BdXT0zODE0NCtwLGJbMzgxNDQrcF09X1sxNDldW3BdKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3''@;'; put 'put ''MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRc''@;'; put 'put ''dTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3''@;'; put 'put ''OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJc''@;'; put 'put ''dTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3''@;'; put 'put ''ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNc''@;'; put 'put ''dTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4''@;'; put 'put ''NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTBdW3BdXT0zODQwMCtwLGJbMzg0MDArcF09X1sxNTBdW3BdKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4''@;'; put 'put ''ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNc''@;'; put 'put ''dTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4''@;'; put 'put ''YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRcdTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNc''@;'; put 'put ''dTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5''@;'; put 'put ''MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5MjdcdTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5Mzdc''@;'; put 'put ''dTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5''@;'; put 'put ''NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTFdW3BdXT0zODY1NitwLGJbMzg2NTYrcF09X1sxNTFdW3BdKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzJcdTY5NzNcdTY5NzRcdTY5NzVcdTY5NzZcdTY5N2FcdTY5N2JcdTY5N2RcdTY5''@;'; put 'put ''N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGVcdTY5OGZcdTY5OTBcdTY5OTFcdTY5OTJcdTY5OTNcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWRcdTY5OWVcdTY5OWZcdTY5YTBcdTY5YTFcdTY5YTJcdTY5YTNcdTY5YTRcdTY5YTVcdTY5YTZc''@;'; put 'put ''dTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5YmRcdWZmZmRcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzJcdTY5YzNcdTY5YzRcdTY5YzVcdTY5YzZcdTY5YzdcdTY5YzhcdTY5YzlcdTY5''@;'; put 'put ''Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDVcdTY5ZDZcdTY5ZDdcdTY5ZDhcdTY5ZDlcdTY5ZGFcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTFcdTY5ZTJcdTY5ZTNcdTY5ZTRcdTY5ZTVcdTY5ZTZcdTY5ZTdcdTY5ZThcdTY5ZTlcdTY5ZWFcdTY5ZWJcdTY5ZWNcdTY5ZWVc''@;'; put 'put ''dTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjNcdTY5ZjRcdTY5ZjVcdTY5ZjZcdTY5ZjdcdTY5ZjhcdTY5ZjlcdTY5ZmFcdTY5ZmJcdTY5ZmNcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDJcdTZhMDNcdTZhMDRcdTZhMDVcdTZhMDZcdTZhMDdcdTZhMDhcdTZhMDlcdTZhMGJcdTZhMGNcdTZhMGRcdTZh''@;'; put 'put ''MGVcdTZhMGZcdTZhMTBcdTZhMTFcdTZhMTJcdTZhMTNcdTZhMTRcdTZhMTVcdTZhMTZcdTZhMTlcdTZhMWFcdTZhMWJcdTZhMWNcdTZhMWRcdTZhMWVcdTZhMjBcdTZhMjJcdTZhMjNcdTZhMjRcdTZhMjVcdTZhMjZcdTZhMjdcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBc''@;'; put 'put ''dTZhMzJcdTZhMzNcdTZhMzRcdTZhMzZcdTZhMzdcdTZhMzhcdTZhMzlcdTZhM2FcdTZhM2JcdTZhM2NcdTZhM2ZcdTZhNDBcdTZhNDFcdTZhNDJcdTZhNDNcdTZhNDVcdTZhNDZcdTZhNDhcdTZhNDlcdTZhNGFcdTZhNGJcdTZhNGNcdTZhNGRcdTZhNGVcdTZhNGZcdTZhNTFcdTZhNTJcdTZh''@;'; put 'put ''NTNcdTZhNTRcdTZhNTVcdTZhNTZcdTZhNTdcdTZhNWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTJdW3BdXT0zODkxMitwLGJbMzg5MTIrcF09X1sxNTJdW3BdKTtmb3IoX1sxNTNdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZh''@;'; put 'put ''NzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNc''@;'; put 'put ''dTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZh''@;'; put 'put ''YjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2Vc''@;'; put 'put ''dTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZh''@;'; put 'put ''ZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVc''@;'; put 'put ''dTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZi''@;'; put 'put ''MjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTNdW3BdXT0zOTE2OCtwLGJbMzkxNjgrcF09X1sxNTNdW3BdKTtm''@;'; put 'put ''b3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZi''@;'; put 'put ''NDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdcdTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNc''@;'; put 'put ''dTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZi''@;'; put 'put ''OTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThcdTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFc''@;'; put 'put ''dTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZi''@;'; put 'put ''ZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFcdTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJc''@;'; put 'put ''dTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZj''@;'; put 'put ''NGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTRdW3BdXT0zOTQyNCtwLGJbMzk0MjQrcF09''@;'; put 'put ''X1sxNTRdW3BdKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmJcdTZjNmNcdTZjNmRcdTZjNmVcdTZjNmZcdTZjNzFcdTZjNzNcdTZj''@;'; put 'put ''NzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNc''@;'; put 'put ''dTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDhcdWZmZmRcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZj''@;'; put 'put ''ZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNc''@;'; put 'put ''dTZkMWRcdTZkMWZcdTZkMjBcdTZkMjFcdTZkMjJcdTZkMjNcdTZkMjRcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZk''@;'; put 'put ''NTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2RcdTZkN2VcdTZkN2ZcdTZkODBc''@;'; put 'put ''dTZkODFcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZkOTZcdTZkOTdcdTZkOThcdTZkOTlcdTZkOWFcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZk''@;'; put 'put ''YjlcdTZkYmFcdTZkYmJcdTZkYmNcdTZkYmRcdTZkYmVcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTVdW3BdXT0zOTY4MCtw''@;'; put 'put ''LGJbMzk2ODArcF09X1sxNTVdW3BdKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZk''@;'; put 'put ''ZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhc''@;'; put 'put ''dTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZl''@;'; put 'put ''M2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBc''@;'; put 'put ''dTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZl''@;'; put 'put ''ODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZc''@;'; put 'put ''dTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZl''@;'; put 'put ''ZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTZd''@;'; put 'put ''W3BdXT0zOTkzNitwLGJbMzk5MzYrcF09X1sxNTZdW3BdKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZl''@;'; put 'put ''ZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRcdTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVc''@;'; put 'put ''dTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZm''@;'; put 'put ''NDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhc''@;'; put 'put ''dTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZmN2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZm''@;'; put 'put ''OTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBcdTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZc''@;'; put 'put ''dTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZmYzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZm''@;'; put 'put ''ZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1N11bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKERbX1sxNTddW3BdXT00MDE5MitwLGJbNDAxOTIrcF09X1sxNTddW3BdKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTZcdTZmZTdcdTZmZThcdTZmZTlcdTZmZWFcdTZmZWJcdTZmZWNcdTZmZWRcdTZm''@;'; put 'put ''ZjBcdTZmZjFcdTZmZjJcdTZmZjNcdTZmZjRcdTZmZjVcdTZmZjZcdTZmZjdcdTZmZjhcdTZmZjlcdTZmZmFcdTZmZmJcdTZmZmNcdTZmZmRcdTZmZmVcdTZmZmZcdTcwMDBcdTcwMDFcdTcwMDJcdTcwMDNcdTcwMDRcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMDhcdTcwMDlcdTcwMGFcdTcwMGJc''@;'; put 'put ''dTcwMGNcdTcwMGRcdTcwMGVcdTcwMGZcdTcwMTBcdTcwMTJcdTcwMTNcdTcwMTRcdTcwMTVcdTcwMTZcdTcwMTdcdTcwMThcdTcwMTlcdTcwMWNcdTcwMWRcdTcwMWVcdTcwMWZcdTcwMjBcdTcwMjFcdTcwMjJcdTcwMjRcdTcwMjVcdTcwMjZcdTcwMjdcdTcwMjhcdTcwMjlcdTcwMmFcdWZm''@;'; put 'put ''ZmRcdTcwMmJcdTcwMmNcdTcwMmRcdTcwMmVcdTcwMmZcdTcwMzBcdTcwMzFcdTcwMzJcdTcwMzNcdTcwMzRcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2FcdTcwM2JcdTcwM2NcdTcwM2RcdTcwM2VcdTcwM2ZcdTcwNDBcdTcwNDFcdTcwNDJcdTcwNDNcdTcwNDRcdTcwNDVcdTcwNDZcdTcwNDdc''@;'; put 'put ''dTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNGRcdTcwNGVcdTcwNTBcdTcwNTFcdTcwNTJcdTcwNTNcdTcwNTRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNThcdTcwNTlcdTcwNWFcdTcwNWJcdTcwNWNcdTcwNWRcdTcwNWZcdTcwNjBcdTcwNjFcdTcwNjJcdTcwNjNcdTcwNjRcdTcwNjVcdTcw''@;'; put 'put ''NjZcdTcwNjdcdTcwNjhcdTcwNjlcdTcwNmFcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFc''@;'; put 'put ''dTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWVcdTcwOWZcdTcwYTBcdTcwYTFcdTcwYTJcdTcwYTNcdTcwYTRcdTcwYTVcdTcwYTZcdTcwYTdcdTcwYThcdTcwYTlcdTcwYWFcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcw''@;'; put 'put ''YzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2JcdTcwY2NcdTcwY2RcdTcwY2VcdTcwY2ZcdTcwZDBcdTcwZDFcdTcwZDJcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDdcdTcwZGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1OF1bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKERbX1sxNThdW3BdXT00MDQ0OCtwLGJbNDA0NDgrcF09X1sxNThdW3BdKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcw''@;'; put 'put ''ZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJcdTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNc''@;'; put 'put ''dTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcx''@;'; put 'put ''MzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlcdTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJc''@;'; put 'put ''dTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcxNTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcx''@;'; put 'put ''NzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBcdTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJc''@;'; put 'put ''dTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcxYTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcx''@;'; put 'put ''YmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVcdTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTldLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzE1OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNTldW3BdXT00MDcwNCtwLGJbNDA3MDQrcF09X1sxNTldW3BdKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcx''@;'; put 'put ''ZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJcdTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFc''@;'; put 'put ''dTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcy''@;'; put 'put ''MTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVcdTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2Vc''@;'; put 'put ''dTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcy''@;'; put 'put ''NmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJcdTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVc''@;'; put 'put ''dTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcyYTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcy''@;'; put 'put ''YmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjBdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzE2MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjBdW3BdXT00MDk2MCtwLGJbNDA5NjArcF09X1sxNjBdW3BdKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1''@;'; put 'put ''MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJh''@;'; put 'put ''NVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUw''@;'; put 'put ''XHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2MV0ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMTYxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2MV1bcF1dPTQxMjE2K3AsYls0MTIxNitwXT1fWzE2MV1bcF0pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3''@;'; put 'put ''Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1''@;'; put 'put ''MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2''@;'; put 'put ''Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2Ml1bcF1dPTQxNDcyK3AsYls0MTQ3MitwXT1fWzE2Ml1bcF0pO2ZvcihfWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1''@;'; put 'put ''ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYy''@;'; put 'put ''YVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1''@;'; put 'put ''ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzE2M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2M11bcF1dPTQxNzI4K3AsYls0MTcyOCtwXT1fWzE2M11bcF0pO2ZvcihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1''@;'; put 'put ''MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2''@;'; put 'put ''OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1''@;'; put 'put ''MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2NF1bcF1dPTQxOTg0K3AsYls0MTk4NCtwXT1fWzE2NF1bcF0pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1''@;'; put 'put ''MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBj''@;'; put 'put ''Nlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1''@;'; put 'put ''MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2NV1bcF1dPTQyMjQwK3AsYls0MjI0MCtwXT1fWzE2NV1bcF0pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1''@;'; put 'put ''MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNi''@;'; put 'put ''NFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2Nl1bcF1dPTQyNDk2K3AsYls0MjQ5NitwXT1fWzE2Nl1bcF0pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1''@;'; put 'put ''MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1''@;'; put 'put ''MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2N11bcF1dPTQyNzUyK3AsYls0Mjc1MitwXT1fWzE2N11bcF0pO2ZvcihfWzE2OF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2''@;'; put 'put ''N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1''@;'; put 'put ''MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5''@;'; put 'put ''NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEz''@;'; put 'put ''XHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1''@;'; put 'put ''MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2OF1bcF1dPTQzMDA4K3AsYls0MzAwOCtwXT1fWzE2OF1bcF0pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNk''@;'; put 'put ''NVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1''@;'; put 'put ''ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1''@;'; put 'put ''MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUx''@;'; put 'put ''ZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1''@;'; put 'put ''MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3MF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMlx1NzJlM1x1NzJlNFx1NzJlNVx1NzJlNlx1NzJlN1x1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMw''@;'; put 'put ''Mlx1NzMwNFx1NzMwNVx1NzMwNlx1NzMwN1x1NzMwOFx1NzMwOVx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1''@;'; put 'put ''NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MFx1NzM0MVx1NzM0Mlx1NzM0M1x1NzM0NFx1NzM0NVx1NzM0Nlx1NzM0N1x1NzM0OFx1ZmZmZFx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1''@;'; put 'put ''NVx1NzM1Nlx1NzM1OFx1NzM1OVx1NzM1YVx1NzM1Ylx1NzM1Y1x1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MVx1NzM2Mlx1NzM2M1x1NzM2NFx1NzM2NVx1NzM2Nlx1NzM2N1x1NzM2OFx1NzM2OVx1NzM2YVx1NzM2Ylx1NzM2ZVx1NzM3MFx1NzM3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3MF1bcF1dPTQzNTIwK3AsYls0MzUyMCtwXT1fWzE3MF1bcF0pO2Zv''@;'; put 'put ''cihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4''@;'; put 'put ''M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1''@;'; put 'put ''NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNk''@;'; put 'put ''Nlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3MV1bcF1dPTQzNzc2K3AsYls0Mzc3NitwXT1f''@;'; put 'put ''WzE3MV1bcF0pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNmOVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQw''@;'; put 'put ''Ylx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1''@;'; put 'put ''NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1''@;'; put 'put ''M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3Ml1bcF1dPTQ0MDMyK3As''@;'; put 'put ''Yls0NDAzMitwXT1fWzE3Ml1bcF0pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4''@;'; put 'put ''ZFx1NzQ4Zlx1NzQ5MVx1NzQ5Mlx1NzQ5M1x1NzQ5NFx1NzQ5NVx1NzQ5Nlx1NzQ5N1x1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Ylx1NzQ5ZFx1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhMlx1NzRhM1x1NzRhNFx1NzRhNVx1NzRhNlx1NzRhYVx1NzRhYlx1NzRhY1x1NzRhZFx1NzRhZVx1NzRhZlx1''@;'; put 'put ''NzRiMFx1NzRiMVx1NzRiMlx1NzRiM1x1NzRiNFx1NzRiNVx1NzRiNlx1NzRiN1x1NzRiOFx1NzRiOVx1NzRiYlx1NzRiY1x1NzRiZFx1NzRiZVx1NzRiZlx1NzRjMFx1NzRjMVx1NzRjMlx1NzRjM1x1NzRjNFx1NzRjNVx1NzRjNlx1NzRjN1x1ZmZmZFx1NzRjOFx1NzRjOVx1NzRjYVx1NzRj''@;'; put 'put ''Ylx1NzRjY1x1NzRjZFx1NzRjZVx1NzRjZlx1NzRkMFx1NzRkMVx1NzRkM1x1NzRkNFx1NzRkNVx1NzRkNlx1NzRkN1x1NzRkOFx1NzRkOVx1NzRkYVx1NzRkYlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlN1x1NzRlOFx1NzRlOVx1NzRlYVx1NzRlYlx1NzRlY1x1NzRlZFx1NzRmMFx1''@;'; put 'put ''NzRmMVx1NzRmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTczXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3M11b''@;'; put 'put ''cF1dPTQ0Mjg4K3AsYls0NDI4OCtwXT1fWzE3M11bcF0pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUw''@;'; put 'put ''MVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1''@;'; put 'put ''NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1''@;'; put 'put ''ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1''@;'; put 'put ''NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc0XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoRFtfWzE3NF1bcF1dPTQ0NTQ0K3AsYls0NDU0NCtwXT1fWzE3NF1bcF0pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5''@;'; put 'put ''NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1''@;'; put 'put ''NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZm''@;'; put 'put ''ZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1''@;'; put 'put ''NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc1XVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoRFtfWzE3NV1bcF1dPTQ0ODAwK3AsYls0NDgwMCtwXT1fWzE3NV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY0NVx1NzY0Nlx1NzY0N1x1NzY0OFx1NzY0OVx1NzY0YVx1NzY0''@;'; put 'put ''Ylx1NzY0ZVx1NzY0Zlx1NzY1MFx1NzY1MVx1NzY1Mlx1NzY1M1x1NzY1NVx1NzY1N1x1NzY1OFx1NzY1OVx1NzY1YVx1NzY1Ylx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NFx1NzY2NVx1NzY2Nlx1NzY2N1x1NzY2OFx1NzY2OVx1NzY2YVx1NzY2Y1x1NzY2ZFx1NzY2ZVx1''@;'; put 'put ''NzY3MFx1NzY3MVx1NzY3Mlx1NzY3M1x1NzY3NFx1NzY3NVx1NzY3Nlx1NzY3N1x1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5''@;'; put 'put ''YVx1NzY5Ylx1ZmZmZFx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Zlx1NzZhMFx1NzZhMVx1NzZhMlx1NzZhM1x1NzZhNVx1NzZhNlx1NzZhN1x1NzZhOFx1NzZhOVx1NzZhYVx1NzZhYlx1NzZhY1x1NzZhZFx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNVx1NzZiNlx1NzZiN1x1NzZiOFx1NzZiOVx1''@;'; put 'put ''NzZiYVx1NzZiYlx1NzZiY1x1NzZiZFx1NzZiZVx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMw''@;'; put 'put ''OVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1''@;'; put 'put ''OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0''@;'; put 'put ''YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMTc2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZj''@;'; put 'put ''Y1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1''@;'; put 'put ''NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1Nzcy''@;'; put 'put ''NVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1''@;'; put 'put ''Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4''@;'; put 'put ''OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1''@;'; put 'put ''ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0''@;'; put 'put ''ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3N10ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11bcF0pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1''@;'; put 'put ''Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1''@;'; put 'put ''Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1Nzdi''@;'; put 'put ''NFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1''@;'; put 'put ''NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIz''@;'; put 'put ''Nlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1''@;'; put 'put ''ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMy''@;'; put 'put ''Y1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzE3OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2OCtwXT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzdl''@;'; put 'put ''Nlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwM1x1NzgwNFx1NzgwNVx1NzgwNlx1NzgwN1x1NzgwOFx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1''@;'; put 'put ''NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0''@;'; put 'put ''ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YVx1ZmZmZFx1Nzg1Ylx1Nzg1Y1x1Nzg1ZVx1Nzg1Zlx1Nzg2MFx1Nzg2MVx1Nzg2Mlx1Nzg2M1x1Nzg2NFx1Nzg2NVx1Nzg2Nlx1Nzg2N1x1Nzg2OFx1Nzg2OVx1Nzg2Zlx1Nzg3MFx1Nzg3MVx1Nzg3Mlx1Nzg3M1x1''@;'; put 'put ''Nzg3NFx1Nzg3NVx1Nzg3Nlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3ZFx1Nzg3ZVx1Nzg3Zlx1Nzg4MFx1Nzg4MVx1Nzg4Mlx1Nzg4M1x1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5''@;'; put 'put ''ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1''@;'; put 'put ''NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFi''@;'; put 'put ''Mlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE3OV1bcF1dPTQ1ODI0K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1''@;'; put 'put ''NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1Nzhk''@;'; put 'put ''YVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1''@;'; put 'put ''NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIz''@;'; put 'put ''OVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1''@;'; put 'put ''NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRl''@;'; put 'put ''Y1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1''@;'; put 'put ''NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1NzkzN1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0''@;'; put 'put ''ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1''@;'; put 'put ''Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMy''@;'; put 'put ''ZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1''@;'; put 'put ''NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVj''@;'; put 'put ''N1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1''@;'; put 'put ''OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5N1x1Nzk5OFx1Nzk5OVx1Nzk5Ylx1Nzk5Y1x1Nzk5ZFx1Nzk5ZVx1Nzk5Zlx1NzlhMFx1NzlhMVx1NzlhMlx1NzlhM1x1NzlhNFx1NzlhNVx1NzlhNlx1NzlhOFx1NzlhOVx1NzlhYVx1''@;'; put 'put ''NzlhYlx1NzlhY1x1NzlhZFx1NzlhZVx1NzlhZlx1NzliMFx1NzliMVx1NzliMlx1NzliNFx1NzliNVx1NzliNlx1NzliN1x1NzliOFx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1Nzlk''@;'; put 'put ''Nlx1NzlkN1x1NzlkOVx1NzlkYVx1NzlkYlx1NzlkY1x1NzlkZFx1NzlkZVx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYVx1ZmZmZFx1NzllY1x1NzllZVx1NzlmMVx1NzlmMlx1NzlmM1x1NzlmNFx1NzlmNVx1NzlmNlx1NzlmN1x1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1''@;'; put 'put ''NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZlx1N2ExMFx1N2ExMVx1N2ExMlx1N2ExM1x1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5''@;'; put 'put ''YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1''@;'; put 'put ''OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRj''@;'; put 'put ''Nlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1''@;'; put 'put ''NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1''@;'; put 'put ''N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1''@;'; put 'put ''OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1''@;'; put 'put ''N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0''@;'; put 'put ''Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1''@;'; put 'put ''NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVm''@;'; put 'put ''ZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1''@;'; put 'put ''NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0pO2ZvcihfWzE4NF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1''@;'; put 'put ''N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2FjYVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2Fk''@;'; put 'put ''YVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1''@;'; put 'put ''N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhi''@;'; put 'put ''MVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1''@;'; put 'put ''NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUy''@;'; put 'put ''Zlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1''@;'; put 'put ''NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtwXT1fWzE4NF1bcF0p''@;'; put 'put ''O2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0Mlx1N2I0M1x1N2I0NFx1''@;'; put 'put ''N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2M1x1N2I2NFx1N2I2NVx1N2I2Nlx1N2I2N1x1N2I2OFx1N2I2OVx1N2I2YVx1N2I2Ylx1N2I2Y1x1N2I2ZFx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3''@;'; put 'put ''NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4Nlx1N2I4N1x1N2I4OFx1N2I4OVx1N2I4YVx1N2I4Ylx1N2I4Y1x1N2I4ZVx1N2I4Zlx1ZmZmZFx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1''@;'; put 'put ''N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOVx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JiZVx1N2JiZlx1N2JjMFx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAz''@;'; put 'put ''Zlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1''@;'; put 'put ''NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5''@;'; put 'put ''OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1''@;'; put 'put ''OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4NV1bcF1dPTQ3MzYwK3AsYls0NzM2MCtw''@;'; put 'put ''XT1fWzE4NV1bcF0pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1''@;'; put 'put ''N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2Jm''@;'; put 'put ''Zlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1''@;'; put 'put ''N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0''@;'; put 'put ''Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1''@;'; put 'put ''Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2''@;'; put 'put ''NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1''@;'; put 'put ''NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4Nl1bcF1dPTQ3NjE2''@;'; put 'put ''K3AsYls0NzYxNitwXT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1''@;'; put 'put ''N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2''@;'; put 'put ''Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1''@;'; put 'put ''N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2Ni''@;'; put 'put ''OFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1''@;'; put 'put ''N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZi''@;'; put 'put ''ZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1''@;'; put 'put ''ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4''@;'; put 'put ''N11bcF1dPTQ3ODcyK3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZVx1N2NjZlx1''@;'; put 'put ''N2NkMFx1N2NkMVx1N2NkMlx1N2NkM1x1N2NkNFx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMVx1N2NlMlx1N2NlM1x1N2NlNFx1N2NlNVx1N2NlNlx1N2NlN1x1N2NlOVx1N2NlYVx1N2NlYlx1N2NlY1x1N2NlZFx1N2NlZVx1N2NmMFx1N2NmMVx1N2NmMlx1N2NmM1x1N2Nm''@;'; put 'put ''NFx1N2NmNVx1N2NmNlx1N2NmN1x1N2NmOVx1N2NmYVx1N2NmY1x1N2NmZFx1N2NmZVx1N2NmZlx1N2QwMFx1N2QwMVx1N2QwMlx1N2QwM1x1N2QwNFx1N2QwNVx1N2QwNlx1N2QwN1x1N2QwOFx1N2QwOVx1N2QwYlx1N2QwY1x1N2QwZFx1N2QwZVx1N2QwZlx1N2QxMFx1ZmZmZFx1N2QxMVx1''@;'; put 'put ''N2QxMlx1N2QxM1x1N2QxNFx1N2QxNVx1N2QxNlx1N2QxN1x1N2QxOFx1N2QxOVx1N2QxYVx1N2QxYlx1N2QxY1x1N2QxZFx1N2QxZVx1N2QxZlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMFx1N2QzMVx1N2Qz''@;'; put 'put ''Mlx1N2QzM1x1N2QzNFx1N2QzNVx1N2QzNlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1''@;'; put 'put ''NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJh''@;'; put 'put ''MFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1''@;'; put 'put ''Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoRFtfWzE4OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1''@;'; put 'put ''N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1''@;'; put 'put ''YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1''@;'; put 'put ''ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5''@;'; put 'put ''Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1''@;'; put 'put ''ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5''@;'; put 'put ''Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1''@;'; put 'put ''NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg5XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoRFtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1''@;'; put 'put ''N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2RhZlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2Ri''@;'; put 'put ''Y1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1''@;'; put 'put ''N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2RlNVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2Rm''@;'; put 'put ''Mlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1''@;'; put 'put ''NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdh''@;'; put 'put ''MFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1''@;'; put 'put ''NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTkwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2RmYlx1N2RmY1x1N2RmZFx1N2RmZVx1''@;'; put 'put ''N2RmZlx1N2UwMFx1N2UwMVx1N2UwMlx1N2UwM1x1N2UwNFx1N2UwNVx1N2UwNlx1N2UwN1x1N2UwOFx1N2UwOVx1N2UwYVx1N2UwYlx1N2UwY1x1N2UwZFx1N2UwZVx1N2UwZlx1N2UxMFx1N2UxMVx1N2UxMlx1N2UxM1x1N2UxNFx1N2UxNVx1N2UxNlx1N2UxN1x1N2UxOFx1N2UxOVx1N2Ux''@;'; put 'put ''YVx1N2UxYlx1N2UxY1x1N2UxZFx1N2UxZVx1N2UxZlx1N2UyMFx1N2UyMVx1N2UyMlx1N2UyM1x1N2UyNFx1N2UyNVx1N2UyNlx1N2UyN1x1N2UyOFx1N2UyOVx1N2UyYVx1N2UyYlx1N2UyY1x1N2UyZFx1N2UyZVx1N2UyZlx1N2UzMFx1N2UzMVx1N2UzMlx1N2UzM1x1N2UzNFx1N2UzNVx1''@;'; put 'put ''N2UzNlx1N2UzN1x1N2UzOFx1N2UzOVx1ZmZmZFx1N2UzYVx1N2UzY1x1N2UzZFx1N2UzZVx1N2UzZlx1N2U0MFx1N2U0Mlx1N2U0M1x1N2U0NFx1N2U0NVx1N2U0Nlx1N2U0OFx1N2U0OVx1N2U0YVx1N2U0Ylx1N2U0Y1x1N2U0ZFx1N2U0ZVx1N2U0Zlx1N2U1MFx1N2U1MVx1N2U1Mlx1N2U1''@;'; put 'put ''M1x1N2U1NFx1N2U1NVx1N2U1Nlx1N2U1N1x1N2U1OFx1N2U1OVx1N2U1YVx1N2U1Ylx1N2U1Y1x1N2U1ZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1''@;'; put 'put ''NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJh''@;'; put 'put ''Mlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1''@;'; put 'put ''NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MV0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5MV1bcF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1''@;'; put 'put ''N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3''@;'; put 'put ''Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1''@;'; put 'put ''N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0''@;'; put 'put ''M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1''@;'; put 'put ''ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2''@;'; put 'put ''YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1''@;'; put 'put ''NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE5Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0OTE1MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4''@;'; put 'put ''MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1''@;'; put 'put ''N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2Zj''@;'; put 'put ''Zlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1''@;'; put 'put ''NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZi''@;'; put 'put ''ZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1''@;'; put 'put ''OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5M11bcF1dPTQ5NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNFx1N2ZmNVx1N2ZmNlx1N2ZmN1x1N2ZmOFx1N2ZmOVx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAw''@;'; put 'put ''Zlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYlx1ODAyY1x1ODAyZFx1ODAyZVx1ODAyZlx1ODAzMFx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1''@;'; put 'put ''ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1N1x1ZmZmZFx1ODA1OVx1ODA1Ylx1ODA1Y1x1ODA1ZFx1ODA1ZVx1ODA1Zlx1ODA2MFx1ODA2MVx1ODA2Mlx1ODA2M1x1ODA2NFx1ODA2NVx1ODA2Nlx1ODA2N1x1ODA2OFx1ODA2Ylx1ODA2''@;'; put 'put ''Y1x1ODA2ZFx1ODA2ZVx1ODA2Zlx1ODA3MFx1ODA3Mlx1ODA3M1x1ODA3NFx1ODA3NVx1ODA3Nlx1ODA3N1x1ODA3OFx1ODA3OVx1ODA3YVx1ODA3Ylx1ODA3Y1x1ODA3ZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1''@;'; put 'put ''NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1''@;'; put 'put ''MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1''@;'; put 'put ''ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYy''@;'; put 'put ''Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBi''@;'; put 'put ''M1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1''@;'; put 'put ''ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEy''@;'; put 'put ''Nlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1''@;'; put 'put ''OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVl''@;'; put 'put ''OFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1''@;'; put 'put ''NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3''@;'; put 'put ''ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2''@;'; put 'put ''Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1''@;'; put 'put ''ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZmZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFi''@;'; put 'put ''Nlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1''@;'; put 'put ''NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJm''@;'; put 'put ''Zlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1''@;'; put 'put ''NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBh''@;'; put 'put ''OFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5N109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkNFx1ODFkNVx1ODFkNlx1ODFkN1x1ODFkOFx1ODFkOVx1ODFkYVx1ODFkYlx1ODFkY1x1ODFkZFx1ODFkZVx1ODFkZlx1ODFlMFx1ODFlMVx1ODFlMlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFl''@;'; put 'put ''OVx1ODFlYlx1ODFlZVx1ODFlZlx1ODFmMFx1ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmN1x1ODFmOFx1ODFmOVx1ODFmYVx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwN1x1ODIwOFx1ODIwOVx1ODIwYVx1ODIwYlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNVx1ODIxNlx1ODIxN1x1''@;'; put 'put ''ODIxOFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZlx1ZmZmZFx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0''@;'; put 'put ''ZVx1ODI1MFx1ODI1MVx1ODI1Mlx1ODI1M1x1ODI1NFx1ODI1NVx1ODI1Nlx1ODI1N1x1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MFx1ODI2MVx1ODI2Mlx1ODI2M1x1ODI2NFx1ODI2NVx1ODI2Nlx1ODI2N1x1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1''@;'; put 'put ''N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUx''@;'; put 'put ''NVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1''@;'; put 'put ''NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1Nzgx''@;'; put 'put ''Mlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11bcF0pO2ZvcihfWzE5''@;'; put 'put ''OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4''@;'; put 'put ''OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1''@;'; put 'put ''ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMw''@;'; put 'put ''ZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1''@;'; put 'put ''NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRm''@;'; put 'put ''Nlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1''@;'; put 'put ''NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1Nzgw''@;'; put 'put ''Y1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4OCtwXT1fWzE5OF1b''@;'; put 'put ''cF0pO2ZvcihfWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1''@;'; put 'put ''N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1''@;'; put 'put ''ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNhNVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNj''@;'; put 'put ''M1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1''@;'; put 'put ''NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5''@;'; put 'put ''OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1''@;'; put 'put ''NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZk''@;'; put 'put ''YVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE5OV1bcF1dPTUwOTQ0K3AsYls1MDk0''@;'; put 'put ''NCtwXT1fWzE5OV1bcF0pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNlZVx1ODNlZlx1ODNmM1x1ODNmNFx1ODNmNVx1ODNmNlx1ODNmN1x1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQw''@;'; put 'put ''Mlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMlx1ODQxM1x1ODQxNFx1ODQxNVx1ODQxNlx1ODQxN1x1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZVx1ODQxZlx1ODQyMFx1ODQyMVx1ODQyMlx1ODQyM1x1ODQyOVx1ODQyYVx1ODQyYlx1ODQyY1x1ODQyZFx1ODQyZVx1''@;'; put 'put ''ODQyZlx1ODQzMFx1ODQzMlx1ODQzM1x1ODQzNFx1ODQzNVx1ODQzNlx1ODQzN1x1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZVx1ODQzZlx1ODQ0MFx1ODQ0MVx1ODQ0Mlx1ODQ0M1x1ODQ0NFx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0OVx1ZmZmZFx1ODQ0YVx1ODQ0Ylx1ODQ0Y1x1ODQ0ZFx1ODQ0''@;'; put 'put ''ZVx1ODQ0Zlx1ODQ1MFx1ODQ1Mlx1ODQ1M1x1ODQ1NFx1ODQ1NVx1ODQ1Nlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NFx1ODQ2NVx1ODQ2Nlx1ODQ2N1x1ODQ2OFx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1''@;'; put 'put ''ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEz''@;'; put 'put ''Nlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1''@;'; put 'put ''ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVm''@;'; put 'put ''MFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwMF1bcF1dPTUx''@;'; put 'put ''MjAwK3AsYls1MTIwMCtwXT1fWzIwMF1bcF0pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4''@;'; put 'put ''Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1''@;'; put 'put ''ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRk''@;'; put 'put ''YVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1''@;'; put 'put ''ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1''@;'; put 'put ''Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1''@;'; put 'put ''NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2Vj''@;'; put 'put ''NVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtf''@;'; put 'put ''WzIwMV1bcF1dPTUxNDU2K3AsYls1MTQ1NitwXT1fWzIwMV1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUw''@;'; put 'put ''ZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1''@;'; put 'put ''ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1''@;'; put 'put ''N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1''@;'; put 'put ''ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNm''@;'; put 'put ''Mlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1''@;'; put 'put ''ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5''@;'; put 'put ''MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAyXVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoRFtfWzIwMl1bcF1dPTUxNzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFx1ODU4OVx1ODU4YVx1ODU4Ylx1ODU4''@;'; put 'put ''Y1x1ODU4ZFx1ODU4ZVx1ODU5MFx1ODU5MVx1ODU5Mlx1ODU5M1x1ODU5NFx1ODU5NVx1ODU5Nlx1ODU5N1x1ODU5OFx1ODU5OVx1ODU5YVx1ODU5ZFx1ODU5ZVx1ODU5Zlx1ODVhMFx1ODVhMVx1ODVhMlx1ODVhM1x1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1''@;'; put 'put ''ODViMVx1ODViMlx1ODViM1x1ODViNFx1ODViNVx1ODViNlx1ODViOFx1ODViYVx1ODViYlx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMFx1ODVjMlx1ODVjM1x1ODVjNFx1ODVjNVx1ODVjNlx1ODVjN1x1ODVjOFx1ODVjYVx1ODVjYlx1ODVjY1x1ODVjZFx1ODVjZVx1ODVkMVx1ODVk''@;'; put 'put ''Mlx1ZmZmZFx1ODVkNFx1ODVkNlx1ODVkN1x1ODVkOFx1ODVkOVx1ODVkYVx1ODVkYlx1ODVkZFx1ODVkZVx1ODVkZlx1ODVlMFx1ODVlMVx1ODVlMlx1ODVlM1x1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYVx1ODVlYlx1ODVlY1x1ODVlZFx1ODVlZVx1ODVlZlx1ODVmMFx1ODVmMVx1''@;'; put 'put ''ODVmMlx1ODVmM1x1ODVmNFx1ODVmNVx1ODVmNlx1ODVmN1x1ODVmOFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJm''@;'; put 'put ''NFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1''@;'; put 'put ''NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0''@;'; put 'put ''Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAz''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYw''@;'; put 'put ''MFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1''@;'; put 'put ''ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYyZlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYz''@;'; put 'put ''ZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1''@;'; put 'put ''ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1''@;'; put 'put ''Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1''@;'; put 'put ''NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0''@;'; put 'put ''M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMjA0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3''@;'; put 'put ''Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1''@;'; put 'put ''ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZiY1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZk''@;'; put 'put ''NVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1''@;'; put 'put ''ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0''@;'; put 'put ''NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1''@;'; put 'put ''NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUz''@;'; put 'put ''OFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNV0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODcxOVx1ODcx''@;'; put 'put ''Ylx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MFx1ODc0MVx1ODc0Mlx1ODc0M1x1ODc0NFx1''@;'; put 'put ''ODc0NVx1ODc0Nlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YVx1ODc1Ylx1ODc1Y1x1ODc1ZFx1ODc1ZVx1ODc1Zlx1ODc2MVx1ODc2Mlx1ODc2Nlx1ODc2N1x1ODc2OFx1ODc2OVx1ODc2YVx1ODc2Ylx1ODc2''@;'; put 'put ''Y1x1ODc2ZFx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NVx1ZmZmZFx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZVx1ODc4Zlx1ODc5MFx1ODc5MVx1ODc5Mlx1ODc5NFx1ODc5NVx1''@;'; put 'put ''ODc5Nlx1ODc5OFx1ODc5OVx1ODc5YVx1ODc5Ylx1ODc5Y1x1ODc5ZFx1ODc5ZVx1ODdhMFx1ODdhMVx1ODdhMlx1ODdhM1x1ODdhNFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlk''@;'; put 'put ''NFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1''@;'; put 'put ''NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0''@;'; put 'put ''Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzIwNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1''@;'; put 'put ''ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdm''@;'; put 'put ''MFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1''@;'; put 'put ''ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4''@;'; put 'put ''NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1''@;'; put 'put ''NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2Ji''@;'; put 'put ''MVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzIwN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1fWzIwN11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1''@;'; put 'put ''ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2''@;'; put 'put ''YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1''@;'; put 'put ''ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhhOFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0''@;'; put 'put ''ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1''@;'; put 'put ''NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUw''@;'; put 'put ''OFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1''@;'; put 'put ''NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwOF1bcF1dPTUzMjQ4K3AsYls1MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMlx1ODhiM1x1ODhiNFx1ODhiNVx1ODhiNlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1''@;'; put 'put ''ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYVx1ODhkYlx1ODhkY1x1ODhkZFx1ODhkZVx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOVx1ODhlYVx1ODhlYlx1ODhlY1x1ODhlZFx1ODhlZVx1ODhlZlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhm''@;'; put 'put ''N1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwM1x1ODkwNFx1ODkwNVx1ODkwNlx1ODkwN1x1ODkwOFx1ZmZmZFx1ODkwOVx1ODkwYlx1ODkwY1x1ODkwZFx1ODkwZVx1ODkwZlx1ODkxMVx1ODkxNFx1ODkxNVx1ODkxNlx1ODkxN1x1ODkxOFx1ODkxY1x1ODkxZFx1''@;'; put 'put ''ODkxZVx1ODkxZlx1ODkyMFx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZl''@;'; put 'put ''YVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1''@;'; put 'put ''OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFk''@;'; put 'put ''NVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1''@;'; put 'put ''ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIwOV1bcF1dPTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1''@;'; put 'put ''ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2''@;'; put 'put ''ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1''@;'; put 'put ''ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRh''@;'; put 'put ''Y1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1''@;'; put 'put ''OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4''@;'; put 'put ''NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1''@;'; put 'put ''NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2ZvcihfWzIxMV09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1''@;'; put 'put ''ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODll''@;'; put 'put ''N1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1''@;'; put 'put ''OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGExNVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3''@;'; put 'put ''MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1''@;'; put 'put ''NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4''@;'; put 'put ''Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1''@;'; put 'put ''NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIxMV1bcF0pO2Zvcihf''@;'; put 'put ''WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGExZVx1OGExZlx1OGEyMFx1OGEyMVx1OGEyMlx1OGEyM1x1OGEyNFx1OGEyNVx1OGEyNlx1OGEyN1x1OGEyOFx1OGEyOVx1OGEyYVx1OGEyYlx1OGEyY1x1OGEyZFx1OGEyZVx1''@;'; put 'put ''OGEyZlx1OGEzMFx1OGEzMVx1OGEzMlx1OGEzM1x1OGEzNFx1OGEzNVx1OGEzNlx1OGEzN1x1OGEzOFx1OGEzOVx1OGEzYVx1OGEzYlx1OGEzY1x1OGEzZFx1OGEzZlx1OGE0MFx1OGE0MVx1OGE0Mlx1OGE0M1x1OGE0NFx1OGE0NVx1OGE0Nlx1OGE0N1x1OGE0OVx1OGE0YVx1OGE0Ylx1OGE0''@;'; put 'put ''Y1x1OGE0ZFx1OGE0ZVx1OGE0Zlx1OGE1MFx1OGE1MVx1OGE1Mlx1OGE1M1x1OGE1NFx1OGE1NVx1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1OVx1OGE1YVx1OGE1Ylx1OGE1Y1x1OGE1ZFx1OGE1ZVx1ZmZmZFx1OGE1Zlx1OGE2MFx1OGE2MVx1OGE2Mlx1OGE2M1x1OGE2NFx1OGE2NVx1OGE2Nlx1''@;'; put 'put ''OGE2N1x1OGE2OFx1OGE2OVx1OGE2YVx1OGE2Ylx1OGE2Y1x1OGE2ZFx1OGE2ZVx1OGE2Zlx1OGE3MFx1OGE3MVx1OGE3Mlx1OGE3M1x1OGE3NFx1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OFx1OGE3YVx1OGE3Ylx1OGE3Y1x1OGE3ZFx1OGE3ZVx1OGE3Zlx1OGE4MFx1NmQ3NFx1NWJkM1x1ODhk''@;'; put 'put ''NVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1''@;'; put 'put ''OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcy''@;'; put 'put ''OFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1''@;'; put 'put ''NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxMl1bcF1dPTU0MjcyK3AsYls1NDI3MitwXT1fWzIx''@;'; put 'put ''Ml1bcF0pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1''@;'; put 'put ''OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFh''@;'; put 'put ''ZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFiYlx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1''@;'; put 'put ''OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRl''@;'; put 'put ''MVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1''@;'; put 'put ''NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4''@;'; put 'put ''N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1''@;'; put 'put ''ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxM11bcF1dPTU0NTI4K3AsYls1''@;'; put 'put ''NDUyOCtwXT1fWzIxM11bcF0pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1''@;'; put 'put ''OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFmZlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIw''@;'; put 'put ''ZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1''@;'; put 'put ''OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIzN1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0''@;'; put 'put ''NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1''@;'; put 'put ''NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1Nzlj''@;'; put 'put ''ZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1''@;'; put 'put ''NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxNF1bcF1d''@;'; put 'put ''PTU0Nzg0K3AsYls1NDc4NCtwXT1fWzIxNF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI0Nlx1OGI0N1x1OGI0OFx1OGI0OVx1OGI0YVx1OGI0Ylx1OGI0Y1x1OGI0ZFx1OGI0ZVx1OGI0Zlx1OGI1MFx1''@;'; put 'put ''OGI1MVx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1NVx1OGI1Nlx1OGI1N1x1OGI1OFx1OGI1OVx1OGI1YVx1OGI1Ylx1OGI1Y1x1OGI1ZFx1OGI1ZVx1OGI1Zlx1OGI2MFx1OGI2MVx1OGI2Mlx1OGI2M1x1OGI2NFx1OGI2NVx1OGI2N1x1OGI2OFx1OGI2OVx1OGI2YVx1OGI2Ylx1OGI2ZFx1OGI2''@;'; put 'put ''ZVx1OGI2Zlx1OGI3MFx1OGI3MVx1OGI3Mlx1OGI3M1x1OGI3NFx1OGI3NVx1OGI3Nlx1OGI3N1x1OGI3OFx1OGI3OVx1OGI3YVx1OGI3Ylx1OGI3Y1x1OGI3ZFx1OGI3ZVx1OGI3Zlx1OGI4MFx1OGI4MVx1OGI4Mlx1OGI4M1x1OGI4NFx1OGI4NVx1OGI4Nlx1ZmZmZFx1OGI4N1x1OGI4OFx1''@;'; put 'put ''OGI4OVx1OGI4YVx1OGI4Ylx1OGI4Y1x1OGI4ZFx1OGI4ZVx1OGI4Zlx1OGI5MFx1OGI5MVx1OGI5Mlx1OGI5M1x1OGI5NFx1OGI5NVx1OGI5Nlx1OGI5N1x1OGI5OFx1OGI5OVx1OGI5YVx1OGI5Ylx1OGI5Y1x1OGI5ZFx1OGI5ZVx1OGI5Zlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJk''@;'; put 'put ''MFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1''@;'; put 'put ''NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFl''@;'; put 'put ''YVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1''@;'; put 'put ''NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''RFtfWzIxNV1bcF1dPTU1MDQwK3AsYls1NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1''@;'; put 'put ''OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2''@;'; put 'put ''NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1''@;'; put 'put ''OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNh''@;'; put 'put ''OFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1''@;'; put 'put ''ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMz''@;'; put 'put ''ZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1''@;'; put 'put ''NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE2XVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoRFtfWzIxNl1bcF1dPTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1''@;'; put 'put ''OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNjM1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNk''@;'; put 'put ''MFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1''@;'; put 'put ''OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNmOVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQw''@;'; put 'put ''Nlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1''@;'; put 'put ''NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBh''@;'; put 'put ''OVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1''@;'; put 'put ''NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MjE3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwZVx1OGQwZlx1OGQxMFx1OGQxMVx1OGQxMlx1''@;'; put 'put ''OGQxM1x1OGQxNFx1OGQxNVx1OGQxNlx1OGQxN1x1OGQxOFx1OGQxOVx1OGQxYVx1OGQxYlx1OGQxY1x1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OFx1OGQ3OVx1OGQ3YVx1OGQ3''@;'; put 'put ''Ylx1OGQ3Y1x1OGQ3ZFx1OGQ3ZVx1OGQ3Zlx1OGQ4MFx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4Y1x1OGQ4ZFx1OGQ4ZVx1OGQ4Zlx1OGQ5MFx1OGQ5Mlx1OGQ5M1x1OGQ5NVx1OGQ5Nlx1OGQ5N1x1OGQ5OFx1OGQ5OVx1OGQ5YVx1OGQ5Ylx1OGQ5Y1x1OGQ5ZFx1''@;'; put 'put ''OGQ5ZVx1OGRhMFx1OGRhMVx1ZmZmZFx1OGRhMlx1OGRhNFx1OGRhNVx1OGRhNlx1OGRhN1x1OGRhOFx1OGRhOVx1OGRhYVx1OGRhYlx1OGRhY1x1OGRhZFx1OGRhZVx1OGRhZlx1OGRiMFx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRj''@;'; put 'put ''NVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1''@;'; put 'put ''OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMx''@;'; put 'put ''Nlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1''@;'; put 'put ''OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOF0ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMjE4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1''@;'; put 'put ''OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUw''@;'; put 'put ''ZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUxYlx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1''@;'; put 'put ''OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2''@;'; put 'put ''MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1''@;'; put 'put ''OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNi''@;'; put 'put ''Nlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1''@;'; put 'put ''NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIx''@;'; put 'put ''OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1''@;'; put 'put ''OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5''@;'; put 'put ''OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1''@;'; put 'put ''OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVjOVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVk''@;'; put 'put ''N1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1''@;'; put 'put ''NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJj''@;'; put 'put ''MVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1''@;'; put 'put ''ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzIyMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OGVlNVx1OGVlNlx1OGVlN1x1OGVlOFx1OGVlOVx1OGVlYVx1OGVlYlx1OGVlY1x1OGVlZFx1OGVlZVx1OGVlZlx1OGVmMFx1OGVmMVx1OGVmMlx1OGVmM1x1OGVmNFx1OGVmNVx1OGVmNlx1OGVmN1x1OGVmOFx1OGVmOVx1OGVmYVx1OGVmYlx1OGVmY1x1OGVmZFx1OGVmZVx1OGVm''@;'; put 'put ''Zlx1OGYwMFx1OGYwMVx1OGYwMlx1OGYwM1x1OGYwNFx1OGYwNVx1OGYwNlx1OGYwN1x1OGYwOFx1OGYwOVx1OGYwYVx1OGYwYlx1OGYwY1x1OGYwZFx1OGYwZVx1OGYwZlx1OGYxMFx1OGYxMVx1OGYxMlx1OGYxM1x1OGYxNFx1OGYxNVx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxOVx1OGYxYVx1''@;'; put 'put ''OGYxYlx1OGYxY1x1OGYxZFx1OGYxZVx1OGYxZlx1OGYyMFx1OGYyMVx1OGYyMlx1OGYyM1x1ZmZmZFx1OGYyNFx1OGYyNVx1OGYyNlx1OGYyN1x1OGYyOFx1OGYyOVx1OGYyYVx1OGYyYlx1OGYyY1x1OGYyZFx1OGYyZVx1OGYyZlx1OGYzMFx1OGYzMVx1OGYzMlx1OGYzM1x1OGYzNFx1OGYz''@;'; put 'put ''NVx1OGYzNlx1OGYzN1x1OGYzOFx1OGYzOVx1OGYzYVx1OGYzYlx1OGYzY1x1OGYzZFx1OGYzZVx1OGYzZlx1OGY0MFx1OGY0MVx1OGY0Mlx1OGY0M1x1OGY0NFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1''@;'; put 'put ''ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQx''@;'; put 'put ''MVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1''@;'; put 'put ''ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3NitwXT1fWzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1''@;'; put 'put ''ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1''@;'; put 'put ''OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZmZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZl''@;'; put 'put ''Zlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1''@;'; put 'put ''NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0''@;'; put 'put ''MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1''@;'; put 'put ''NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2''@;'; put 'put ''ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyMl1bcF1dPTU2ODMyK3AsYls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAyYlx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0''@;'; put 'put ''M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1''@;'; put 'put ''OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5''@;'; put 'put ''Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1''@;'; put 'put ''NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQy''@;'; put 'put ''M1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1''@;'; put 'put ''NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1''@;'; put 'put ''NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyM11bcF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBl''@;'; put 'put ''NVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVx1OTEwNlx1OTEwN1x1OTEwOFx1OTEwOVx1OTEwYVx1OTEwYlx1OTEwY1x1''@;'; put 'put ''OTEwZFx1OTEwZVx1OTEwZlx1OTExMFx1OTExMVx1OTExMlx1OTExM1x1OTExNFx1OTExNVx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExYlx1OTExY1x1ZmZmZFx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNFx1OTEyNVx1OTEyNlx1OTEyN1x1OTEyOFx1OTEyOVx1OTEyYVx1OTEy''@;'; put 'put ''Ylx1OTEyY1x1OTEyZFx1OTEyZVx1OTEzMFx1OTEzMlx1OTEzM1x1OTEzNFx1OTEzNVx1OTEzNlx1OTEzN1x1OTEzOFx1OTEzYVx1OTEzYlx1OTEzY1x1OTEzZFx1OTEzZVx1OTEzZlx1OTE0MFx1OTE0MVx1OTE0Mlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1''@;'; put 'put ''NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVl''@;'; put 'put ''Nlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1''@;'; put 'put ''NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUx''@;'; put 'put ''OVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2''@;'; put 'put ''ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1''@;'; put 'put ''OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFj''@;'; put 'put ''NVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1''@;'; put 'put ''NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQw''@;'; put 'put ''Mlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1''@;'; put 'put ''NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJl''@;'; put 'put ''OVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2Zv''@;'; put 'put ''cihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFlOVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFm''@;'; put 'put ''Nlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1''@;'; put 'put ''OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIyMFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIy''@;'; put 'put ''Y1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1''@;'; put 'put ''NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2''@;'; put 'put ''OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1''@;'; put 'put ''NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAy''@;'; put 'put ''OVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1f''@;'; put 'put ''WzIyNl1bcF0pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTI0Nlx1OTI0N1x1OTI0OFx1OTI0OVx1OTI0YVx1OTI0Ylx1OTI0Y1x1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MFx1OTI1MVx1OTI1Mlx1OTI1M1x1OTI1''@;'; put 'put ''NFx1OTI1NVx1OTI1Nlx1OTI1N1x1OTI1OFx1OTI1OVx1OTI1YVx1OTI1Ylx1OTI1Y1x1OTI1ZFx1OTI1ZVx1OTI1Zlx1OTI2MFx1OTI2MVx1OTI2Mlx1OTI2M1x1OTI2NFx1OTI2NVx1OTI2Nlx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2YVx1OTI2Ylx1OTI2Y1x1OTI2ZFx1OTI2ZVx1OTI2Zlx1''@;'; put 'put ''OTI3MFx1OTI3MVx1OTI3Mlx1OTI3M1x1OTI3NVx1OTI3Nlx1OTI3N1x1OTI3OFx1OTI3OVx1OTI3YVx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3ZVx1OTI3Zlx1OTI4MFx1OTI4MVx1OTI4Mlx1OTI4M1x1OTI4NFx1OTI4NVx1ZmZmZFx1OTI4Nlx1OTI4N1x1OTI4OFx1OTI4OVx1OTI4YVx1OTI4''@;'; put 'put ''Ylx1OTI4Y1x1OTI4ZFx1OTI4Zlx1OTI5MFx1OTI5MVx1OTI5Mlx1OTI5M1x1OTI5NFx1OTI5NVx1OTI5Nlx1OTI5N1x1OTI5OFx1OTI5OVx1OTI5YVx1OTI5Ylx1OTI5Y1x1OTI5ZFx1OTI5ZVx1OTI5Zlx1OTJhMFx1OTJhMVx1OTJhMlx1OTJhM1x1OTJhNFx1OTJhNVx1OTJhNlx1OTJhN1x1''@;'; put 'put ''NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3''@;'; put 'put ''NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1''@;'; put 'put ''OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNm''@;'; put 'put ''MVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyN11bcF1dPTU4MTEyK3As''@;'; put 'put ''Yls1ODExMitwXT1fWzIyN11bcF0pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJi''@;'; put 'put ''NVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1''@;'; put 'put ''OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJl''@;'; put 'put ''Y1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1''@;'; put 'put ''OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1''@;'; put 'put ''Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1''@;'; put 'put ''NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYz''@;'; put 'put ''Nlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIyOF1b''@;'; put 'put ''cF1dPTU4MzY4K3AsYls1ODM2OCtwXT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMx''@;'; put 'put ''NFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1''@;'; put 'put ''OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMzZlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0''@;'; put 'put ''Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1''@;'; put 'put ''OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUy''@;'; put 'put ''Zlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1''@;'; put 'put ''OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2''@;'; put 'put ''M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoRFtfWzIyOV1bcF1dPTU4NjI0K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTM2Y1x1OTM2ZFx1OTM2ZVx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3Mlx1OTM3M1x1OTM3''@;'; put 'put ''NFx1OTM3NVx1OTM3Nlx1OTM3N1x1OTM3OFx1OTM3OVx1OTM3YVx1OTM3Ylx1OTM3Y1x1OTM3ZFx1OTM3ZVx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4M1x1OTM4NFx1OTM4NVx1OTM4Nlx1OTM4N1x1OTM4OFx1OTM4OVx1OTM4YVx1OTM4Ylx1OTM4Y1x1OTM4ZFx1OTM4ZVx1OTM5MFx1''@;'; put 'put ''OTM5MVx1OTM5Mlx1OTM5M1x1OTM5NFx1OTM5NVx1OTM5Nlx1OTM5N1x1OTM5OFx1OTM5OVx1OTM5YVx1OTM5Ylx1OTM5Y1x1OTM5ZFx1OTM5ZVx1OTM5Zlx1OTNhMFx1OTNhMVx1OTNhMlx1OTNhM1x1OTNhNFx1OTNhNVx1OTNhNlx1OTNhN1x1OTNhOFx1OTNhOVx1OTNhYVx1OTNhYlx1ZmZm''@;'; put 'put ''ZFx1OTNhY1x1OTNhZFx1OTNhZVx1OTNhZlx1OTNiMFx1OTNiMVx1OTNiMlx1OTNiM1x1OTNiNFx1OTNiNVx1OTNiNlx1OTNiN1x1OTNiOFx1OTNiOVx1OTNiYVx1OTNiYlx1OTNiY1x1OTNiZFx1OTNiZVx1OTNiZlx1OTNjMFx1OTNjMVx1OTNjMlx1OTNjM1x1OTNjNFx1OTNjNVx1OTNjNlx1''@;'; put 'put ''OTNjN1x1OTNjOFx1OTNjOVx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWEx''@;'; put 'put ''MVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1''@;'; put 'put ''NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5''@;'; put 'put ''M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoRFtfWzIzMF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNk''@;'; put 'put ''NFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1''@;'; put 'put ''OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQw''@;'; put 'put ''Y1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1''@;'; put 'put ''OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2Vm''@;'; put 'put ''MVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1''@;'; put 'put ''N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNj''@;'; put 'put ''OVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMjMxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQz''@;'; put 'put ''M1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1''@;'; put 'put ''OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2''@;'; put 'put ''Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1''@;'; put 'put ''OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRh''@;'; put 'put ''OFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1''@;'; put 'put ''NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1Njgx''@;'; put 'put ''ZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMjMyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTUyN1x1OTUzM1x1OTUz''@;'; put 'put ''ZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3N1x1OTU3OFx1OTU3OVx1OTU3YVx1OTU3Ylx1OTU3Y1x1OTU3ZFx1OTU3ZVx1OTU4MFx1OTU4MVx1OTU4Mlx1OTU4M1x1OTU4NFx1OTU4NVx1OTU4Nlx1OTU4N1x1OTU4OFx1OTU4OVx1''@;'; put 'put ''OTU4YVx1OTU4Ylx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU4Zlx1OTU5MFx1OTU5MVx1OTU5Mlx1OTU5M1x1OTU5NFx1OTU5NVx1OTU5Nlx1OTU5N1x1OTU5OFx1OTU5OVx1OTU5YVx1OTU5Ylx1OTU5Y1x1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMFx1OTVhMVx1OTVhMlx1OTVhM1x1OTVhNFx1OTVh''@;'; put 'put ''NVx1OTVhNlx1OTVhN1x1OTVhOFx1OTVhOVx1OTVhYVx1ZmZmZFx1OTVhYlx1OTVhY1x1OTVhZFx1OTVhZVx1OTVhZlx1OTViMFx1OTViMVx1OTViMlx1OTViM1x1OTViNFx1OTViNVx1OTViNlx1OTViN1x1OTViOFx1OTViOVx1OTViYVx1OTViYlx1OTViY1x1OTViZFx1OTViZVx1OTViZlx1''@;'; put 'put ''OTVjMFx1OTVjMVx1OTVjMlx1OTVjM1x1OTVjNFx1OTVjNVx1OTVjNlx1OTVjN1x1OTVjOFx1OTVjOVx1OTVjYVx1OTVjYlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5''@;'; put 'put ''OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1''@;'; put 'put ''NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5''@;'; put 'put ''M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzIzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVj''@;'; put 'put ''Y1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1''@;'; put 'put ''OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0''@;'; put 'put ''YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1''@;'; put 'put ''OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIy''@;'; put 'put ''NFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1''@;'; put 'put ''NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0''@;'; put 'put ''ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzIzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1''@;'; put 'put ''OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZk''@;'; put 'put ''ZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1''@;'; put 'put ''OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMw''@;'; put 'put ''ZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1''@;'; put 'put ''ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEy''@;'; put 'put ''Y1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2MCtwXT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyNFx1OTcyNVx1OTcyNlx1OTcyN1x1OTcyOFx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczM1x1OTczNFx1OTczNVx1OTczNlx1OTczN1x1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZlx1''@;'; put 'put ''OTc0MFx1OTc0MVx1OTc0Mlx1OTc0M1x1OTc0NFx1OTc0NVx1OTc0Nlx1OTc0N1x1OTc0OFx1OTc0OVx1OTc0YVx1OTc0Ylx1OTc0Y1x1OTc0ZFx1OTc0ZVx1OTc0Zlx1OTc1MFx1OTc1MVx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2''@;'; put 'put ''NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YVx1OTc2Ylx1OTc2Y1x1OTc2ZFx1OTc2ZVx1OTc2Zlx1OTc3MFx1OTc3MVx1ZmZmZFx1OTc3Mlx1OTc3NVx1OTc3N1x1OTc3OFx1OTc3OVx1OTc3YVx1OTc3Ylx1OTc3ZFx1OTc3ZVx1OTc3Zlx1OTc4MFx1OTc4MVx1OTc4Mlx1OTc4M1x1OTc4NFx1''@;'; put 'put ''OTc4Nlx1OTc4N1x1OTc4OFx1OTc4OVx1OTc4YVx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5Ylx1OTc5Y1x1OTc5ZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThk''@;'; put 'put ''Mlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1''@;'; put 'put ''NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2''@;'; put 'put ''Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1''@;'; put 'put ''NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzNl1bcF1dPTYwNDE2K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1''@;'; put 'put ''OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdk''@;'; put 'put ''Nlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1''@;'; put 'put ''OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBh''@;'; put 'put ''Ylx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1''@;'; put 'put ''NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1Nzhj''@;'; put 'put ''OVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1''@;'; put 'put ''Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1''@;'; put 'put ''OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgzMVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgz''@;'; put 'put ''ZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1''@;'; put 'put ''OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4''@;'; put 'put ''MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1''@;'; put 'put ''NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRi''@;'; put 'put ''Nlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1''@;'; put 'put ''OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzIzOV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg2Zlx1OTg3MFx1OTg3MVx1OTg3Mlx1OTg3M1x1OTg3NFx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOFx1OThhOVx1OThhYVx1OThhYlx1OThhY1x1OThhZFx1''@;'; put 'put ''OThhZVx1OThhZlx1OThiMFx1OThiMVx1OThiMlx1OThiM1x1OThiNFx1OThiNVx1OThiNlx1OThiN1x1OThiOFx1OThiOVx1OThiYVx1OThiYlx1OThiY1x1OThiZFx1OThiZVx1OThiZlx1OThjMFx1OThjMVx1OThjMlx1OThjM1x1OThjNFx1OThjNVx1OThjNlx1OThjN1x1OThjOFx1OThj''@;'; put 'put ''OVx1OThjYVx1OThjYlx1OThjY1x1OThjZFx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMFx1OThlMVx1OThlMlx1OThlM1x1OThlNFx1ZmZmZFx1OThlNVx1OThlNlx1OThlOVx1OThlYVx1OThlYlx1OThlY1x1OThlZFx1OThlZVx1OThlZlx1''@;'; put 'put ''OThmMFx1OThmMVx1OThmMlx1OThmM1x1OThmNFx1OThmNVx1OThmNlx1OThmN1x1OThmOFx1OThmOVx1OThmYVx1OThmYlx1OThmY1x1OThmZFx1OThmZVx1OThmZlx1OTkwMFx1OTkwMVx1OTkwMlx1OTkwM1x1OTkwNFx1OTkwNVx1OTkwNlx1OTkwN1x1OTRlOVx1OTRlYlx1OTRlZVx1OTRl''@;'; put 'put ''Zlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1''@;'; put 'put ''OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1''@;'; put 'put ''N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1''@;'; put 'put ''NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtwXT1fWzIzOV1bcF0p''@;'; put 'put ''O2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1''@;'; put 'put ''OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTkyOFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkz''@;'; put 'put ''Nlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1''@;'; put 'put ''OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2Ez''@;'; put 'put ''N1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1''@;'; put 'put ''OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3''@;'; put 'put ''M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1''@;'; put 'put ''NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0MF1bcF1dPTYxNDQwK3AsYls2MTQ0MCtw''@;'; put 'put ''XT1fWzI0MF1bcF0pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1''@;'; put 'put ''OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTliNlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTlj''@;'; put 'put ''M1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1''@;'; put 'put ''OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTllY1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlm''@;'; put 'put ''OVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1''@;'; put 'put ''N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODky''@;'; put 'put ''MVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1''@;'; put 'put ''ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0MV1bcF1dPTYxNjk2''@;'; put 'put ''K3AsYls2MTY5NitwXT1fWzI0MV1bcF0pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmYVx1OTlmYlx1OTlmY1x1OTlmZFx1OTlmZVx1OTlmZlx1OWEwMFx1OWEwMVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwNVx1''@;'; put 'put ''OWEwNlx1OWEwN1x1OWEwOFx1OWEwOVx1OWEwYVx1OWEwYlx1OWEwY1x1OWEwZFx1OWEwZVx1OWEwZlx1OWExMFx1OWExMVx1OWExMlx1OWExM1x1OWExNFx1OWExNVx1OWExNlx1OWExN1x1OWExOFx1OWExOVx1OWExYVx1OWExYlx1OWExY1x1OWExZFx1OWExZVx1OWExZlx1OWEyMFx1OWEy''@;'; put 'put ''MVx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyNVx1OWEyNlx1OWEyN1x1OWEyOFx1OWEyOVx1OWEyYVx1OWEyYlx1OWEyY1x1OWEyZFx1OWEyZVx1OWEyZlx1OWEzMFx1OWEzMVx1OWEzMlx1OWEzM1x1OWEzNFx1OWEzNVx1OWEzNlx1OWEzN1x1OWEzOFx1ZmZmZFx1OWEzOVx1OWEzYVx1OWEzYlx1''@;'; put 'put ''OWEzY1x1OWEzZFx1OWEzZVx1OWEzZlx1OWE0MFx1OWE0MVx1OWE0Mlx1OWE0M1x1OWE0NFx1OWE0NVx1OWE0Nlx1OWE0N1x1OWE0OFx1OWE0OVx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZFx1OWE0ZVx1OWE0Zlx1OWE1MFx1OWE1MVx1OWE1Mlx1OWE1M1x1OWE1NFx1OWE1NVx1OWE1Nlx1OWE1''@;'; put 'put ''N1x1OWE1OFx1OWE1OVx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1''@;'; put 'put ''ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZk''@;'; put 'put ''OFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1''@;'; put 'put ''ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0''@;'; put 'put ''Ml1bcF1dPTYxOTUyK3AsYls2MTk1MitwXT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1''@;'; put 'put ''OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFi''@;'; put 'put ''NVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1''@;'; put 'put ''OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFmMlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIw''@;'; put 'put ''MVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1''@;'; put 'put ''ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2Iy''@;'; put 'put ''NVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1''@;'; put 'put ''N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoRFtfWzI0M11bcF1dPTYyMjA4K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1''@;'; put 'put ''OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIz''@;'; put 'put ''MFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1''@;'; put 'put ''ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3''@;'; put 'put ''NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1''@;'; put 'put ''ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5''@;'; put 'put ''ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1''@;'; put 'put ''N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ0XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3Y1x1OWI3ZFx1OWI3ZVx1OWI3Zlx1OWI4MFx1OWI4MVx1''@;'; put 'put ''OWI4Mlx1OWI4M1x1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OFx1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4Y1x1OWI4ZFx1OWI4ZVx1OWI4Zlx1OWI5MFx1OWI5MVx1OWI5Mlx1OWI5M1x1OWI5NFx1OWI5NVx1OWI5Nlx1OWI5N1x1OWI5OFx1OWI5OVx1OWI5YVx1OWI5Ylx1OWI5Y1x1OWI5''@;'; put 'put ''ZFx1OWI5ZVx1OWI5Zlx1OWJhMFx1OWJhMVx1OWJhMlx1OWJhM1x1OWJhNFx1OWJhNVx1OWJhNlx1OWJhN1x1OWJhOFx1OWJhOVx1OWJhYVx1OWJhYlx1OWJhY1x1OWJhZFx1OWJhZVx1OWJhZlx1OWJiMFx1OWJiMVx1OWJiMlx1OWJiM1x1OWJiNFx1OWJiNVx1OWJiNlx1OWJiN1x1OWJiOFx1''@;'; put 'put ''OWJiOVx1OWJiYVx1ZmZmZFx1OWJiYlx1OWJiY1x1OWJiZFx1OWJiZVx1OWJiZlx1OWJjMFx1OWJjMVx1OWJjMlx1OWJjM1x1OWJjNFx1OWJjNVx1OWJjNlx1OWJjN1x1OWJjOFx1OWJjOVx1OWJjYVx1OWJjYlx1OWJjY1x1OWJjZFx1OWJjZVx1OWJjZlx1OWJkMFx1OWJkMVx1OWJkMlx1OWJk''@;'; put 'put ''M1x1OWJkNFx1OWJkNVx1OWJkNlx1OWJkN1x1OWJkOFx1OWJkOVx1OWJkYVx1OWJkYlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1''@;'; put 'put ''OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRm''@;'; put 'put ''OFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1''@;'; put 'put ''OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMjQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1''@;'; put 'put ''OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJm''@;'; put 'put ''Ylx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMwOVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1''@;'; put 'put ''OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMz''@;'; put 'put ''MVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1''@;'; put 'put ''OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQz''@;'; put 'put ''ZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1''@;'; put 'put ''OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Nl0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMjQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1''@;'; put 'put ''OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1''@;'; put 'put ''OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1''@;'; put 'put ''OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNi''@;'; put 'put ''ZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1''@;'; put 'put ''OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0''@;'; put 'put ''OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1''@;'; put 'put ''OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzI0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OWNlM1x1OWNlNFx1OWNlNVx1OWNlNlx1OWNlN1x1OWNlOFx1OWNlOVx1OWNlYVx1OWNlYlx1OWNlY1x1OWNlZFx1OWNlZVx1OWNlZlx1OWNmMFx1OWNmMVx1OWNmMlx1OWNmM1x1OWNmNFx1OWNmNVx1OWNmNlx1OWNmN1x1OWNmOFx1OWNmOVx1OWNmYVx1OWNmYlx1OWNmY1x1OWNmZFx1OWNm''@;'; put 'put ''ZVx1OWNmZlx1OWQwMFx1OWQwMVx1OWQwMlx1OWQwM1x1OWQwNFx1OWQwNVx1OWQwNlx1OWQwN1x1OWQwOFx1OWQwOVx1OWQwYVx1OWQwYlx1OWQwY1x1OWQwZFx1OWQwZVx1OWQwZlx1OWQxMFx1OWQxMVx1OWQxMlx1OWQxM1x1OWQxNFx1OWQxNVx1OWQxNlx1OWQxN1x1OWQxOFx1OWQxOVx1''@;'; put 'put ''OWQxYVx1OWQxYlx1OWQxY1x1OWQxZFx1OWQxZVx1OWQxZlx1OWQyMFx1OWQyMVx1ZmZmZFx1OWQyMlx1OWQyM1x1OWQyNFx1OWQyNVx1OWQyNlx1OWQyN1x1OWQyOFx1OWQyOVx1OWQyYVx1OWQyYlx1OWQyY1x1OWQyZFx1OWQyZVx1OWQyZlx1OWQzMFx1OWQzMVx1OWQzMlx1OWQzM1x1OWQz''@;'; put 'put ''NFx1OWQzNVx1OWQzNlx1OWQzN1x1OWQzOFx1OWQzOVx1OWQzYVx1OWQzYlx1OWQzY1x1OWQzZFx1OWQzZVx1OWQzZlx1OWQ0MFx1OWQ0MVx1OWQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzI0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0OF1bcF1dPTYzNDg4K3AsYls2MzQ4OCtwXT1fWzI0OF1bcF0pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1''@;'; put 'put ''Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1''@;'; put 'put ''OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5''@;'; put 'put ''Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI0OV1bcF1dPTYzNzQ0K3AsYls2Mzc0NCtwXT1fWzI0OV1bcF0pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRhZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRi''@;'; put 'put ''YVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1''@;'; put 'put ''OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRlM1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRm''@;'; put 'put ''MFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUwXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzI1MF1bcF1dPTY0ZTMrcCxiWzY0ZTMrcF09X1syNTBdW3BdKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllMDNcdTllMDRcdTllMDVcdTllMDZcdTllMDdcdTllMDhcdTllMDlcdTllMGFcdTllMGJcdTllMGNcdTllMGRcdTllMGVcdTllMGZcdTllMTBcdTllMTFcdTllMTJcdTllMTNcdTllMTRcdTllMTVcdTllMTZcdTllMTdcdTllMThc''@;'; put 'put ''dTllMTlcdTllMWFcdTllMWJcdTllMWNcdTllMWRcdTllMWVcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTll''@;'; put 'put ''NmVcdTllNmZcdTllNzJcdTllNzRcdTllNzVcdTllNzZcdTllNzdcdTllNzhcdTllNzlcdTllN2FcdTllN2JcdTllN2NcdTllN2RcdTllODBcdWZmZmRcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGNcdTllOGRcdTllOGVcdTllOGZcdTllOTBcdTllOTFc''@;'; put 'put ''dTllOTRcdTllOTVcdTllOTZcdTllOTdcdTllOThcdTllOTlcdTllOWFcdTllOWJcdTllOWNcdTllOWVcdTllYTBcdTllYTFcdTllYTJcdTllYTNcdTllYTRcdTllYTVcdTllYTdcdTllYThcdTllYTlcdTllYWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTFdW3BdXT02NDI1NitwLGJbNjQyNTYrcF09X1syNTFdW3BdKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTllYjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNc''@;'; put 'put ''dTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTll''@;'; put 'put ''ZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhcdTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlmMDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVc''@;'; put 'put ''dTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlmMWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZcdTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTJdW3BdXT02NDUxMitwLGJbNjQ1MTIrcF09X1syNTJdW3BdKTtmb3IoX1syNTNd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlc''@;'; put 'put ''dTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlmNWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlm''@;'; put 'put ''NjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVcdTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRc''@;'; put 'put ''dTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTNdW3BdXT02NDc2OCtwLGJbNjQ3NjgrcF09X1syNTNdW3Bd''@;'; put 'put ''KTtmb3IoX1syNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjlc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTRdW3BdXT02NTAyNCtwLGJbNjUwMjQr''@;'; put 'put ''cF09X1syNTRdW3BdKTtyZXR1cm57ZW5jOkQsZGVjOmJ9fSgpLEpbOTQ5XT1mdW5jdGlvbigpe3ZhciBwLGI9W10sRD17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZc''@;'; put 'put ''eDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMF1bcF1dPTArcCxiWzAr''@;'; put 'put ''cF09X1swXVtwXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVh''@;'; put 'put ''YzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQx''@;'; put 'put ''XHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVhYzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVh''@;'; put 'put ''YzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZhXHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdk''@;'; put 'put ''XHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVhYzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVh''@;'; put 'put ''Y2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0''@;'; put 'put ''XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVh''@;'; put 'put ''ZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTI5XVtwXV09MzMwMjQr''@;'; put 'put ''cCxiWzMzMDI0K3BdPV9bMTI5XVtwXSk7Zm9yKF9bMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxXHVh''@;'; put 'put ''ZDIyXHVhZDIzXHVhZDI0XHVhZDI1XHVhZDI2XHVhZDI3XHVhZDI4XHVhZDJhXHVhZDJiXHVhZDJlXHVhZDJmXHVhZDMwXHVhZDMxXHVhZDMyXHVhZDMzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkXHVhZDNl''@;'; put 'put ''XHVhZDNmXHVhZDQwXHVhZDQxXHVhZDQyXHVhZDQzXHVhZDQ2XHVhZDQ4XHVhZDRhXHVhZDRiXHVhZDRjXHVhZDRkXHVhZDRlXHVhZDRmXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDU5XHVhZDVhXHVh''@;'; put 'put ''ZDViXHVhZDVjXHVhZDVkXHVhZDVlXHVhZDVmXHVhZDYwXHVhZDYyXHVhZDY0XHVhZDY1XHVhZDY2XHVhZDY3XHVhZDY4XHVhZDY5XHVhZDZhXHVhZDZiXHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzXHVhZDg0XHVhZDg1''@;'; put 'put ''XHVhZDg2XHVhZDg3XHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxXHVhZDkyXHVhZDkzXHVhZDk0XHVhZDk1XHVhZDk2XHVhZDk3XHVhZDk4XHVhZDk5XHVhZDlhXHVhZDliXHVhZDllXHVhZDlmXHVhZGEwXHVhZGExXHVhZGEyXHVhZGEzXHVhZGE1XHVhZGE2XHVhZGE3XHVh''@;'; put 'put ''ZGE4XHVhZGE5XHVhZGFhXHVhZGFiXHVhZGFjXHVhZGFkXHVhZGFlXHVhZGFmXHVhZGIwXHVhZGIxXHVhZGIyXHVhZGIzXHVhZGI0XHVhZGI1XHVhZGI2XHVhZGI4XHVhZGI5XHVhZGJhXHVhZGJiXHVhZGJjXHVhZGJkXHVhZGJlXHVhZGJmXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3''@;'; put 'put ''XHVhZGM5XHVhZGNhXHVhZGNiXHVhZGNjXHVhZGNkXHVhZGNlXHVhZGNmXHVhZGQyXHVhZGQ0XHVhZGQ1XHVhZGQ2XHVhZGQ3XHVhZGQ4XHVhZGQ5XHVhZGRhXHVhZGRiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1XHVhZGU2XHVhZGU3XHVhZGU4XHVhZGU5XHVh''@;'; put 'put ''ZGVhXHVhZGViXHVhZGVjXHVhZGVkXHVhZGVlXHVhZGVmXHVhZGYwXHVhZGYxXHVhZGYyXHVhZGYzXHVhZGY0XHVhZGY1XHVhZGY2XHVhZGY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMw''@;'; put 'put ''XVtwXV09MzMyODArcCxiWzMzMjgwK3BdPV9bMTMwXVtwXSk7Zm9yKF9bMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVh''@;'; put 'put ''ZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIx''@;'; put 'put ''XHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVhZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVh''@;'; put 'put ''ZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZk''@;'; put 'put ''XHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVhZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVh''@;'; put 'put ''ZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlkXHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFk''@;'; put 'put ''XHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVhZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVh''@;'; put 'put ''ZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUxXHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzFdW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihEW19bMTMxXVtwXV09MzM1MzYrcCxiWzMzNTM2K3BdPV9bMTMxXVtwXSk7Zm9yKF9bMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVh''@;'; put 'put ''ZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAxXHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBh''@;'; put 'put ''XHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVhZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRh''@;'; put 'put ''XHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVhZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVh''@;'; put 'put ''ZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdhXHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhh''@;'; put 'put ''XHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVhZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVh''@;'; put 'put ''ZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzJdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihEW19bMTMyXVtwXV09MzM3OTIrcCxiWzMzNzkyK3BdPV9bMTMyXVtwXSk7Zm9yKF9bMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmJmXHVhZmMxXHVhZmMyXHVhZmMzXHVhZmM0XHVh''@;'; put 'put ''ZmM1XHVhZmM2XHVhZmNhXHVhZmNjXHVhZmNmXHVhZmQwXHVhZmQxXHVhZmQyXHVhZmQzXHVhZmQ1XHVhZmQ2XHVhZmQ3XHVhZmQ4XHVhZmQ5XHVhZmRhXHVhZmRiXHVhZmRkXHVhZmRlXHVhZmRmXHVhZmUwXHVhZmUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmUy''@;'; put 'put ''XHVhZmUzXHVhZmU0XHVhZmU1XHVhZmU2XHVhZmU3XHVhZmVhXHVhZmViXHVhZmVjXHVhZmVkXHVhZmVlXHVhZmVmXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5XHVhZmZhXHVhZmZiXHVhZmZjXHVhZmZkXHVhZmZlXHVhZmZmXHViMDAyXHViMDAzXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMDA1XHViMDA2XHViMDA3XHViMDA4XHViMDA5XHViMDBhXHViMDBiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1XHViMDE2XHViMDE3XHViMDE4XHViMDE5XHViMDFhXHViMDFiXHViMDFlXHViMDFmXHViMDIwXHViMDIx''@;'; put 'put ''XHViMDIyXHViMDIzXHViMDI0XHViMDI1XHViMDI2XHViMDI3XHViMDI5XHViMDJhXHViMDJiXHViMDJjXHViMDJkXHViMDJlXHViMDJmXHViMDMwXHViMDMxXHViMDMyXHViMDMzXHViMDM0XHViMDM1XHViMDM2XHViMDM3XHViMDM4XHViMDM5XHViMDNhXHViMDNiXHViMDNjXHViMDNkXHVi''@;'; put 'put ''MDNlXHViMDNmXHViMDQwXHViMDQxXHViMDQyXHViMDQzXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlXHViMDVmXHViMDYwXHViMDYxXHViMDYyXHViMDYzXHViMDY0XHViMDY1''@;'; put 'put ''XHViMDY2XHViMDY3XHViMDY4XHViMDY5XHViMDZhXHViMDZiXHViMDZjXHViMDZkXHViMDZlXHViMDZmXHViMDcwXHViMDcxXHViMDcyXHViMDczXHViMDc0XHViMDc1XHViMDc2XHViMDc3XHViMDc4XHViMDc5XHViMDdhXHViMDdiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHVi''@;'; put 'put ''MDg1XHViMDg2XHViMDg3XHViMDg4XHViMDg5XHViMDhhXHViMDhiXHViMDhlXHViMDkwXHViMDkyXHViMDkzXHViMDk0XHViMDk1XHViMDk2XHViMDk3XHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTMzXS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1sxMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTMzXVtwXV09MzQwNDgrcCxiWzM0MDQ4K3BdPV9bMTMzXVtwXSk7Zm9yKF9bMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHVi''@;'; put 'put ''MGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMwXHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHViMGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2''@;'; put 'put ''XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHVi''@;'; put 'put ''MTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVk''@;'; put 'put ''XHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHViMTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHVi''@;'; put 'put ''MTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM0XS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1sxMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM0XVtwXV09MzQzMDQrcCxiWzM0MzA0K3BdPV9bMTM0XVtwXSk7Zm9yKF9bMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHVi''@;'; put 'put ''MTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFlXHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHViMWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHVi''@;'; put 'put ''MWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRlXHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVm''@;'; put 'put ''XHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHViMjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHVi''@;'; put 'put ''MjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1''@;'; put 'put ''XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHViMjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHVi''@;'; put 'put ''MjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYzXHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMTM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM1XVtwXV09MzQ1NjArcCxiWzM0NTYwK3BdPV9bMTM1XVtwXSk7Zm9yKF9bMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHViMjZmXHViMjcwXHViMjcxXHViMjcyXHViMjczXHViMjc2XHViMjc3XHViMjc4XHViMjc5XHViMjdhXHViMjdiXHViMjdkXHViMjdlXHViMjdmXHViMjgwXHViMjgxXHViMjgyXHViMjgzXHViMjg2XHViMjg3XHViMjg4XHViMjhhXHViMjhiXHViMjhjXHViMjhkXHViMjhlXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliXHViMjljXHViMjlkXHViMjllXHViMjlmXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHVi''@;'; put 'put ''MmIzXHViMmI1XHViMmI2XHViMmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMmI4XHViMmI5XHViMmJhXHViMmJiXHViMmJjXHViMmJkXHViMmJlXHViMmJmXHViMmMwXHViMmMxXHViMmMyXHViMmMzXHViMmM0XHViMmM1XHViMmM2XHViMmM3XHViMmNhXHViMmNi''@;'; put 'put ''XHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzXHViMmQ0XHViMmQ1XHViMmQ2XHViMmQ3XHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHVi''@;'; put 'put ''MzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5XHViMzBhXHViMzBiXHViMzBjXHViMzBkXHViMzBlXHViMzBmXHViMzEyXHViMzE2XHViMzE3XHViMzE4XHViMzE5XHViMzFhXHViMzFiXHViMzFkXHViMzFlXHViMzFmXHViMzIwXHViMzIxXHViMzIyXHViMzIzXHViMzI0XHViMzI1XHViMzI2''@;'; put 'put ''XHViMzI3XHViMzI4XHViMzI5XHViMzJhXHViMzJiXHViMzJjXHViMzJkXHViMzJlXHViMzJmXHViMzMwXHViMzMxXHViMzMyXHViMzMzXHViMzM0XHViMzM1XHViMzM2XHViMzM3XHViMzM4XHViMzM5XHViMzNhXHViMzNiXHViMzNjXHViMzNkXHViMzNlXHViMzNmXHViMzQwXHViMzQxXHVi''@;'; put 'put ''MzQyXHViMzQzXHViMzQ0XHViMzQ1XHViMzQ2XHViMzQ3XHViMzQ4XHViMzQ5XHViMzRhXHViMzRiXHViMzRjXHViMzRkXHViMzRlXHViMzRmXHViMzUwXHViMzUxXHViMzUyXHViMzUzXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMTM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM2XVtwXV09MzQ4MTYrcCxiWzM0ODE2K3BdPV9bMTM2XVtwXSk7Zm9yKF9bMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhi''@;'; put 'put ''XHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHVi''@;'; put 'put ''M2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViM2FlXHViM2FmXHViM2IwXHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2Jk''@;'; put 'put ''XHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHVi''@;'; put 'put ''M2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1''@;'; put 'put ''XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHViNDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHVi''@;'; put 'put ''NDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMzXHViNDM1XHViNDM2XHViNDM3XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM3XVtwXV09MzUwNzIrcCxiWzM1MDcyK3BdPV9bMTM3XVtwXSk7Zm9yKF9bMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRlXHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVm''@;'; put 'put ''XHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHViNDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHVi''@;'; put 'put ''NDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgzXHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkx''@;'; put 'put ''XHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHViNGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHVi''@;'; put 'put ''NGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQz''@;'; put 'put ''XHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHViNGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHVi''@;'; put 'put ''NGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5''@;'; put 'put ''XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM4XVtwXV09MzUzMjgrcCxiWzM1MzI4K3BdPV9bMTM4XVtwXSk7Zm9yKF9bMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTFlXHViNTFmXHViNTIwXHViNTIxXHViNTIyXHViNTIzXHViNTI2XHViNTJiXHViNTJjXHViNTJkXHViNTJlXHViNTJmXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5XHViNTNhXHViNTNiXHViNTNj''@;'; put 'put ''XHViNTNkXHViNTNlXHViNTNmXHViNTQyXHViNTQ2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1XHViNTU2XHViNTU3XHViNTU4XHViNTU5XHViNTVhXHViNTViXHVi''@;'; put 'put ''NTVlXHViNTYyXHViNTYzXHViNTY0XHViNTY1XHViNTY2XHViNTY3XHViNTY4XHViNTY5XHViNTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTZiXHViNTZjXHViNTZkXHViNTZlXHViNTZmXHViNTcwXHViNTcxXHViNTcyXHViNTczXHViNTc0XHViNTc1XHViNTc2''@;'; put 'put ''XHViNTc3XHViNTc4XHViNTc5XHViNTdhXHViNTdiXHViNTdjXHViNTdkXHViNTdlXHViNTdmXHViNTgwXHViNTgxXHViNTgyXHViNTgzXHViNTg0XHViNTg1XHViNTg2XHViNTg3XHViNTg4XHViNTg5XHViNThhXHViNThiXHViNThjXHViNThkXHViNThlXHViNThmXHViNTkwXHViNTkxXHVi''@;'; put 'put ''NTkyXHViNTkzXHViNTk0XHViNTk1XHViNTk2XHViNTk3XHViNTk4XHViNTk5XHViNTlhXHViNTliXHViNTljXHViNTlkXHViNTllXHViNTlmXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2XHViNWI3XHViNWI4''@;'; put 'put ''XHViNWI5XHViNWJhXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1XHViNWM2XHViNWM3XHViNWM4XHViNWM5XHViNWNhXHViNWNiXHViNWNlXHViNWQyXHViNWQzXHViNWQ0XHViNWQ1XHViNWQ2XHViNWQ3XHViNWQ5XHViNWRhXHViNWRiXHViNWRjXHViNWRkXHViNWRlXHVi''@;'; put 'put ''NWRmXHViNWUwXHViNWUxXHViNWUyXHViNWUzXHViNWU0XHViNWU1XHViNWU2XHViNWU3XHViNWU4XHViNWU5XHViNWVhXHViNWViXHViNWVkXHViNWVlXHViNWVmXHViNWYwXHViNWYxXHViNWYyXHViNWYzXHViNWY0XHViNWY1XHViNWY2XHViNWY3XHViNWY4XHViNWY5XHViNWZhXHViNWZi''@;'; put 'put ''XHViNWZjXHViNWZkXHViNWZlXHViNWZmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxMzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTM5XVtwXV09MzU1ODQrcCxiWzM1NTg0K3BdPV9bMTM5XVtwXSk7Zm9yKF9bMTQwXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1''@;'; put 'put ''XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHViNjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHVi''@;'; put 'put ''NjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0''@;'; put 'put ''XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHViNjUxXHViNjUyXHViNjUzXHViNjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHVi''@;'; put 'put ''NjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcxXHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdl''@;'; put 'put ''XHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHViNjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHVi''@;'; put 'put ''NjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJj''@;'; put 'put ''XHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQwXVtwXV09MzU4NDArcCxiWzM1ODQwK3BdPV9bMTQwXVtwXSk7Zm9yKF9bMTQx''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQz''@;'; put 'put ''XHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHVi''@;'; put 'put ''NmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0''@;'; put 'put ''XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHViNzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHVi''@;'; put 'put ''NzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1''@;'; put 'put ''XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHViNzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHVi''@;'; put 'put ''NzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdhXHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhi''@;'; put 'put ''XHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQxXVtwXV09MzYwOTYrcCxiWzM2MDk2K3BdPV9bMTQxXVtw''@;'; put 'put ''XSk7Zm9yKF9bMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNzlmXHViN2ExXHViN2EyXHViN2EzXHViN2E0XHViN2E1XHViN2E2XHViN2E3XHViN2FhXHViN2FlXHViN2FmXHViN2IwXHViN2IxXHViN2IyXHViN2Iz''@;'; put 'put ''XHViN2I2XHViN2I3XHViN2I5XHViN2JhXHViN2JiXHViN2JjXHViN2JkXHViN2JlXHViN2JmXHViN2MwXHViN2MxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2MyXHViN2MzXHViN2M0XHViN2M1XHViN2M2XHViN2M4XHViN2NhXHViN2NiXHViN2NjXHViN2NkXHVi''@;'; put 'put ''N2NlXHViN2NmXHViN2QwXHViN2QxXHViN2QyXHViN2QzXHViN2Q0XHViN2Q1XHViN2Q2XHViN2Q3XHViN2Q4XHViN2Q5XHViN2RhXHViN2RiXHViN2RjXHViN2RkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2RlXHViN2RmXHViN2UwXHViN2UxXHViN2UyXHViN2Uz''@;'; put 'put ''XHViN2U0XHViN2U1XHViN2U2XHViN2U3XHViN2U4XHViN2U5XHViN2VhXHViN2ViXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1XHViN2Y2XHViN2Y3XHViN2Y4XHViN2Y5XHViN2ZhXHViN2ZiXHViN2ZlXHViODAyXHViODAzXHViODA0XHViODA1XHViODA2XHViODBhXHVi''@;'; put 'put ''ODBiXHViODBkXHViODBlXHViODBmXHViODExXHViODEyXHViODEzXHViODE0XHViODE1XHViODE2XHViODE3XHViODFhXHViODFjXHViODFlXHViODFmXHViODIwXHViODIxXHViODIyXHViODIzXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkXHViODJlXHViODJmXHViODMw''@;'; put 'put ''XHViODMxXHViODMyXHViODMzXHViODM2XHViODNhXHViODNiXHViODNjXHViODNkXHViODNlXHViODNmXHViODQxXHViODQyXHViODQzXHViODQ1XHViODQ2XHViODQ3XHViODQ4XHViODQ5XHViODRhXHViODRiXHViODRjXHViODRkXHViODRlXHViODRmXHViODUwXHViODUyXHViODU0XHVi''@;'; put 'put ''ODU1XHViODU2XHViODU3XHViODU4XHViODU5XHViODVhXHViODViXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1XHViODY2XHViODY3XHViODY4XHViODY5XHViODZhXHViODZiXHViODZlXHViODcwXHViODcyXHViODczXHViODc0XHViODc1XHViODc2XHViODc3XHViODc5''@;'; put 'put ''XHViODdhXHViODdiXHViODdkXHViODdlXHViODdmXHViODgwXHViODgxXHViODgyXHViODgzXHViODg0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQyXVtwXV09MzYzNTIrcCxiWzM2MzUy''@;'; put 'put ''K3BdPV9bMTQyXVtwXSk7Zm9yKF9bMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODky''@;'; put 'put ''XHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHViODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHVi''@;'; put 'put ''OGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJhXHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0''@;'; put 'put ''XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHViOGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHVi''@;'; put 'put ''OGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZjXHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBi''@;'; put 'put ''XHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHViOTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHVi''@;'; put 'put ''OTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4''@;'; put 'put ''XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQzXVtwXV09MzY2''@;'; put 'put ''MDgrcCxiWzM2NjA4K3BdPV9bMTQzXVtwXSk7Zm9yKF9bMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2''@;'; put 'put ''XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHVi''@;'; put 'put ''OTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEw''@;'; put 'put ''XHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHVi''@;'; put 'put ''OWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYy''@;'; put 'put ''XHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHViYTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHVi''@;'; put 'put ''YTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMz''@;'; put 'put ''XHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b''@;'; put 'put ''MTQ0XVtwXV09MzY4NjQrcCxiWzM2ODY0K3BdPV9bMTQ0XVtwXSk7Zm9yKF9bMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3''@;'; put 'put ''XHViYTU5XHViYTVhXHViYTViXHViYTVkXHViYTVlXHViYTVmXHViYTYwXHViYTYxXHViYTYyXHViYTYzXHViYTY2XHViYTZhXHViYTZiXHViYTZjXHViYTZkXHViYTZlXHViYTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTcyXHViYTczXHViYTc1XHViYTc2XHVi''@;'; put 'put ''YTc3XHViYTc5XHViYTdhXHViYTdiXHViYTdjXHViYTdkXHViYTdlXHViYTdmXHViYTgwXHViYTgxXHViYTgyXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkXHViYThlXHViYThmXHViYTkwXHViYTkxXHViYTkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHViYTkzXHViYTk0XHViYTk1XHViYTk2XHViYTk3XHViYTk4XHViYTk5XHViYTlhXHViYTliXHViYTljXHViYTlkXHViYTllXHViYTlmXHViYWEwXHViYWExXHViYWEyXHViYWEzXHViYWE0XHViYWE1XHViYWE2XHViYWE3XHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzXHVi''@;'; put 'put ''YWI0XHViYWI1XHViYWI2XHViYWI3XHViYWJhXHViYWJjXHViYWJlXHViYWJmXHViYWMwXHViYWMxXHViYWMyXHViYWMzXHViYWM1XHViYWM2XHViYWM3XHViYWM5XHViYWNhXHViYWNiXHViYWNjXHViYWNkXHViYWNlXHViYWNmXHViYWQwXHViYWQxXHViYWQyXHViYWQzXHViYWQ0XHViYWQ1''@;'; put 'put ''XHViYWQ2XHViYWQ3XHViYWRhXHViYWRiXHViYWRjXHViYWRkXHViYWRlXHViYWRmXHViYWUwXHViYWUxXHViYWUyXHViYWUzXHViYWU0XHViYWU1XHViYWU2XHViYWU3XHViYWU4XHViYWU5XHViYWVhXHViYWViXHViYWVjXHViYWVkXHViYWVlXHViYWVmXHViYWYwXHViYWYxXHViYWYyXHVi''@;'; put 'put ''YWYzXHViYWY0XHViYWY1XHViYWY2XHViYWY3XHViYWY4XHViYWY5XHViYWZhXHViYWZiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1XHViYjA2XHViYjA3XHViYjA4XHViYjA5XHViYjBhXHViYjBiXHViYjBjXHViYjBlXHViYjEwXHViYjEyXHViYjEzXHViYjE0''@;'; put 'put ''XHViYjE1XHViYjE2XHViYjE3XHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxXHViYjIyXHViYjIzXHViYjI0XHViYjI1XHViYjI2XHViYjI3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDVdW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihEW19bMTQ1XVtwXV09MzcxMjArcCxiWzM3MTIwK3BdPV9bMTQ1XVtwXSk7Zm9yKF9bMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMw''@;'; put 'put ''XHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHVi''@;'; put 'put ''YjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHViYjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHVi''@;'; put 'put ''YjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjljXHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFi''@;'; put 'put ''XHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHViYmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHVi''@;'; put 'put ''YmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRkXHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVh''@;'; put 'put ''XHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDZd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ2XVtwXV09MzczNzYrcCxiWzM3Mzc2K3BdPV9bMTQ2XVtwXSk7Zm9yKF9bMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3''@;'; put 'put ''XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi''@;'; put 'put ''YzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHViYzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHVi''@;'; put 'put ''YzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgwXHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkz''@;'; put 'put ''XHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHViY2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHVi''@;'; put 'put ''Y2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0''@;'; put 'put ''XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHViY2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ3XS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1sxNDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ3XVtwXV09Mzc2MzIrcCxiWzM3NjMyK3BdPV9bMTQ3XVtwXSk7Zm9yKF9bMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViY2ZlXHViY2ZmXHViZDAw''@;'; put 'put ''XHViZDAxXHViZDAyXHViZDAzXHViZDA2XHViZDA4XHViZDBhXHViZDBiXHViZDBjXHViZDBkXHViZDBlXHViZDBmXHViZDExXHViZDEyXHViZDEzXHViZDE1XHViZDE2XHViZDE3XHViZDE4XHViZDE5XHViZDFhXHViZDFiXHViZDFjXHViZDFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHViZDFlXHViZDFmXHViZDIwXHViZDIxXHViZDIyXHViZDIzXHViZDI1XHViZDI2XHViZDI3XHViZDI4XHViZDI5XHViZDJhXHViZDJiXHViZDJkXHViZDJlXHViZDJmXHViZDMwXHViZDMxXHViZDMyXHViZDMzXHViZDM0XHViZDM1XHViZDM2XHViZDM3XHViZDM4XHViZDM5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDNhXHViZDNiXHViZDNjXHViZDNkXHViZDNlXHViZDNmXHViZDQxXHViZDQyXHViZDQzXHViZDQ0XHViZDQ1XHViZDQ2XHViZDQ3XHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxXHViZDUyXHViZDUzXHVi''@;'; put 'put ''ZDU0XHViZDU1XHViZDU2XHViZDU3XHViZDVhXHViZDViXHViZDVjXHViZDVkXHViZDVlXHViZDVmXHViZDYwXHViZDYxXHViZDYyXHViZDYzXHViZDY1XHViZDY2XHViZDY3XHViZDY5XHViZDZhXHViZDZiXHViZDZjXHViZDZkXHViZDZlXHViZDZmXHViZDcwXHViZDcxXHViZDcyXHViZDcz''@;'; put 'put ''XHViZDc0XHViZDc1XHViZDc2XHViZDc3XHViZDc4XHViZDc5XHViZDdhXHViZDdiXHViZDdjXHViZDdkXHViZDdlXHViZDdmXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiXHViZDhjXHViZDhkXHViZDhlXHViZDhmXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHVi''@;'; put 'put ''ZDlkXHViZDllXHViZDlmXHViZGEwXHViZGExXHViZGEyXHViZGEzXHViZGE1XHViZGE2XHViZGE3XHViZGE4XHViZGE5XHViZGFhXHViZGFiXHViZGFjXHViZGFkXHViZGFlXHViZGFmXHViZGIxXHViZGIyXHViZGIzXHViZGI0XHViZGI1XHViZGI2XHViZGI3XHViZGI5XHViZGJhXHViZGJi''@;'; put 'put ''XHViZGJjXHViZGJkXHViZGJlXHViZGJmXHViZGMwXHViZGMxXHViZGMyXHViZGMzXHViZGM0XHViZGM1XHViZGM2XHViZGM3XHViZGM4XHViZGM5XHViZGNhXHViZGNiXHViZGNjXHViZGNkXHViZGNlXHViZGNmXHViZGQwXHViZGQxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTQ4XS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1sxNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ4XVtwXV09Mzc4ODgrcCxiWzM3ODg4K3BdPV9bMTQ4XVtwXSk7Zm9yKF9bMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQy''@;'; put 'put ''XHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHViZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTEx''@;'; put 'put ''XHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFhXHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHVi''@;'; put 'put ''ZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHViZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5''@;'; put 'put ''XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHVi''@;'; put 'put ''ZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHViZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTll''@;'; put 'put ''XHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFkXHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMTQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTQ5XVtwXV09MzgxNDQrcCxiWzM4MTQ0K3BdPV9bMTQ5XVtwXSk7Zm9yKF9bMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHViZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRmXHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYx''@;'; put 'put ''XHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHViZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHVi''@;'; put 'put ''ZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFhXHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJh''@;'; put 'put ''XHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHViZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHVi''@;'; put 'put ''ZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjViXHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4''@;'; put 'put ''XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHViZjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMTUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUwXVtwXV09Mzg0MDArcCxiWzM4NDAwK3BdPV9bMTUwXVtwXSk7Zm9yKF9bMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViZjgzXHViZjg0XHViZjg1XHViZjg2XHViZjg3XHViZjg4XHViZjg5XHViZjhhXHViZjhiXHViZjhjXHViZjhkXHViZjhlXHViZjhmXHViZjkwXHViZjkxXHViZjkyXHViZjkzXHViZjk1XHViZjk2XHViZjk3XHViZjk4XHViZjk5XHViZjlhXHViZjliXHVi''@;'; put 'put ''ZjljXHViZjlkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjllXHViZjlmXHViZmEwXHViZmExXHViZmEyXHViZmEzXHViZmE0XHViZmE1XHViZmE2XHViZmE3XHViZmE4XHViZmE5XHViZmFhXHViZmFiXHViZmFjXHViZmFkXHViZmFlXHViZmFmXHViZmIxXHViZmIy''@;'; put 'put ''XHViZmIzXHViZmI0XHViZmI1XHViZmI2XHViZmI3XHViZmI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZmI5XHViZmJhXHViZmJiXHViZmJjXHViZmJkXHViZmJlXHViZmJmXHViZmMwXHViZmMxXHViZmMyXHViZmMzXHViZmM0XHViZmM2XHViZmM3XHViZmM4XHVi''@;'; put 'put ''ZmM5XHViZmNhXHViZmNiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1XHViZmQ2XHViZmQ3XHViZmQ4XHViZmQ5XHViZmRhXHViZmRiXHViZmRkXHViZmRlXHViZmUwXHViZmUyXHViZmUzXHViZmU0XHViZmU1XHViZmU2XHViZmU3XHViZmU4XHViZmU5XHViZmVhXHViZmVi''@;'; put 'put ''XHViZmVjXHViZmVkXHViZmVlXHViZmVmXHViZmYwXHViZmYxXHViZmYyXHViZmYzXHViZmY0XHViZmY1XHViZmY2XHViZmY3XHViZmY4XHViZmY5XHViZmZhXHViZmZiXHViZmZjXHViZmZkXHViZmZlXHViZmZmXHVjMDAwXHVjMDAxXHVjMDAyXHVjMDAzXHVjMDA0XHVjMDA1XHVjMDA2XHVj''@;'; put 'put ''MDA3XHVjMDA4XHVjMDA5XHVjMDBhXHVjMDBiXHVjMDBjXHVjMDBkXHVjMDBlXHVjMDBmXHVjMDEwXHVjMDExXHVjMDEyXHVjMDEzXHVjMDE0XHVjMDE1XHVjMDE2XHVjMDE3XHVjMDE4XHVjMDE5XHVjMDFhXHVjMDFiXHVjMDFjXHVjMDFkXHVjMDFlXHVjMDFmXHVjMDIwXHVjMDIxXHVjMDIy''@;'; put 'put ''XHVjMDIzXHVjMDI0XHVjMDI1XHVjMDI2XHVjMDI3XHVjMDI4XHVjMDI5XHVjMDJhXHVjMDJiXHVjMDJjXHVjMDJkXHVjMDJlXHVjMDJmXHVjMDMwXHVjMDMxXHVjMDMyXHVjMDMzXHVjMDM0XHVjMDM1XHVjMDM2XHVjMDM3XHVjMDM4XHVjMDM5XHVjMDNhXHVjMDNiXHVjMDNkXHVjMDNlXHVj''@;'; put 'put ''MDNmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUxXVtwXV09Mzg2NTYrcCxiWzM4NjU2K3BdPV9bMTUxXVtwXSk7Zm9yKF9bMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVjMDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVj''@;'; put 'put ''MDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxXHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcx''@;'; put 'put ''XHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVj''@;'; put 'put ''MDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFh''@;'; put 'put ''XHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVj''@;'; put 'put ''MGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVlXHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAx''@;'; put 'put ''XHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVj''@;'; put 'put ''MTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUyXVtwXV09Mzg5MTIrcCxiWzM4OTEyK3BdPV9bMTUyXVtwXSk7Zm9yKF9bMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVj''@;'; put 'put ''MTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZl''@;'; put 'put ''XHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVj''@;'; put 'put ''MTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIy''@;'; put 'put ''XHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVjMWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVj''@;'; put 'put ''MWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2''@;'; put 'put ''XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVjMjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVj''@;'; put 'put ''MjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTUzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTUzXVtwXV09MzkxNjgrcCxiWzM5MTY4K3BdPV9bMTUzXVtwXSk7Zm9yKF9bMTU0XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMwXHVjMjMzXHVjMjM1XHVjMjM2XHVjMjM3XHVjMjM4XHVjMjM5XHVjMjNhXHVjMjNiXHVjMjNjXHVjMjNkXHVj''@;'; put 'put ''MjNlXHVjMjNmXHVjMjQwXHVjMjQxXHVjMjQyXHVjMjQzXHVjMjQ0XHVjMjQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjQ2XHVjMjQ3XHVjMjQ5XHVjMjRhXHVjMjRiXHVjMjRjXHVjMjRkXHVjMjRlXHVjMjRmXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3''@;'; put 'put ''XHVjMjU5XHVjMjVhXHVjMjViXHVjMjVjXHVjMjVkXHVjMjVlXHVjMjVmXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjY3XHVjMjY4XHVjMjY5XHVjMjZhXHVjMjZiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVj''@;'; put 'put ''MjczXHVjMjc1XHVjMjc2XHVjMjc3XHVjMjc4XHVjMjc5XHVjMjdhXHVjMjdiXHVjMjdlXHVjMjgwXHVjMjgyXHVjMjgzXHVjMjg0XHVjMjg1XHVjMjg2XHVjMjg3XHVjMjhhXHVjMjhiXHVjMjhjXHVjMjhkXHVjMjhlXHVjMjhmXHVjMjkxXHVjMjkyXHVjMjkzXHVjMjk0XHVjMjk1XHVjMjk2''@;'; put 'put ''XHVjMjk3XHVjMjk5XHVjMjlhXHVjMjljXHVjMjllXHVjMjlmXHVjMmEwXHVjMmExXHVjMmEyXHVjMmEzXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlXHVjMmFmXHVjMmIwXHVjMmIxXHVjMmIyXHVjMmIzXHVjMmI2XHVjMmI4XHVjMmJhXHVjMmJiXHVjMmJjXHVjMmJkXHVj''@;'; put 'put ''MmJlXHVjMmJmXHVjMmMwXHVjMmMxXHVjMmMyXHVjMmMzXHVjMmM0XHVjMmM1XHVjMmM2XHVjMmM3XHVjMmM4XHVjMmM5XHVjMmNhXHVjMmNiXHVjMmNjXHVjMmNkXHVjMmNlXHVjMmNmXHVjMmQwXHVjMmQxXHVjMmQyXHVjMmQzXHVjMmQ0XHVjMmQ1XHVjMmQ2XHVjMmQ3XHVjMmQ4XHVjMmQ5''@;'; put 'put ''XHVjMmRhXHVjMmRiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1XHVjMmU2XHVjMmU3XHVjMmU4XHVjMmU5XHVjMmVhXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxXHVjMzAyXHVjMzAzXHVjMzA0XHVj''@;'; put 'put ''MzA1XHVjMzA2XHVjMzA3XHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU0XVtwXV09Mzk0MjQrcCxiWzM5NDI0K3BdPV9bMTU0XVtwXSk7Zm9yKF9b''@;'; put 'put ''MTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVj''@;'; put 'put ''MzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNl''@;'; put 'put ''XHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRjXHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVj''@;'; put 'put ''MzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVjMzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1''@;'; put 'put ''XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVj''@;'; put 'put ''Mzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVjM2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2Iz''@;'; put 'put ''XHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2MxXHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVj''@;'; put 'put ''M2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU1XVtwXV09Mzk2ODArcCxiWzM5NjgwK3BdPV9bMTU1''@;'; put 'put ''XVtwXSk7Zm9yKF9bMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVj''@;'; put 'put ''M2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5''@;'; put 'put ''XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVjNDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVj''@;'; put 'put ''NDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQx''@;'; put 'put ''XHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVjNDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVj''@;'; put 'put ''NDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcwXHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgx''@;'; put 'put ''XHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVjNDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVj''@;'; put 'put ''NDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU2XVtwXV09Mzk5MzYrcCxiWzM5''@;'; put 'put ''OTM2K3BdPV9bMTU2XVtwXSk7Zm9yKF9bMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGFhXHVjNGFiXHVjNGFjXHVjNGFkXHVjNGFlXHVjNGFmXHVjNGIwXHVjNGIxXHVjNGIyXHVjNGIzXHVjNGI0XHVjNGI1XHVj''@;'; put 'put ''NGI2XHVjNGI3XHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkXHVjNGJlXHVjNGJmXHVjNGMwXHVjNGMxXHVjNGMyXHVjNGMzXHVjNGM0XHVjNGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGM2XHVjNGM3XHVjNGM4XHVjNGM5XHVjNGNhXHVjNGNiXHVjNGNjXHVjNGNk''@;'; put 'put ''XHVjNGNlXHVjNGNmXHVjNGQwXHVjNGQxXHVjNGQyXHVjNGQzXHVjNGQ0XHVjNGQ1XHVjNGQ2XHVjNGQ3XHVjNGQ4XHVjNGQ5XHVjNGRhXHVjNGRiXHVjNGRjXHVjNGRkXHVjNGRlXHVjNGRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGUwXHVjNGUxXHVjNGUyXHVj''@;'; put 'put ''NGUzXHVjNGU0XHVjNGU1XHVjNGU2XHVjNGU3XHVjNGU4XHVjNGVhXHVjNGViXHVjNGVjXHVjNGVkXHVjNGVlXHVjNGVmXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyXHVjNTAzXHVjNTA0XHVjNTA1XHVjNTA2XHVjNTA3''@;'; put 'put ''XHVjNTA4XHVjNTA5XHVjNTBhXHVjNTBiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1XHVjNTE2XHVjNTE3XHVjNTE4XHVjNTE5XHVjNTFhXHVjNTFiXHVjNTFkXHVjNTFlXHVjNTFmXHVjNTIwXHVjNTIxXHVjNTIyXHVjNTIzXHVjNTI0XHVjNTI1XHVjNTI2XHVj''@;'; put 'put ''NTI3XHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxXHVjNTMyXHVjNTMzXHVjNTM0XHVjNTM1XHVjNTM2XHVjNTM3XHVjNTNhXHVjNTNjXHVjNTNlXHVjNTNmXHVjNTQwXHVjNTQxXHVjNTQyXHVjNTQzXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUy''@;'; put 'put ''XHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5XHVjNTZhXHVjNTZiXHVjNTZjXHVjNTZkXHVjNTZlXHVjNTZmXHVjNTcyXHVjNTc2XHVjNTc3XHVjNTc4XHVjNTc5XHVjNTdhXHVjNTdiXHVjNTdlXHVjNTdmXHVjNTgxXHVj''@;'; put 'put ''NTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTU3XVtwXV09''@;'; put 'put ''NDAxOTIrcCxiWzQwMTkyK3BdPV9bMTU3XVtwXSk7Zm9yKF9bMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVj''@;'; put 'put ''NWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIxXHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMy''@;'; put 'put ''XHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVjNWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVj''@;'; put 'put ''NWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3''@;'; put 'put ''XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVj''@;'; put 'put ''NjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZi''@;'; put 'put ''XHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVj''@;'; put 'put ''NjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEyXHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNThdW3BdLmNoYXJDb2RlQXQoMCkmJihE''@;'; put 'put ''W19bMTU4XVtwXV09NDA0NDgrcCxiWzQwNDQ4K3BdPV9bMTU4XVtwXSk7Zm9yKF9bMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVj''@;'; put 'put ''NmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQz''@;'; put 'put ''XHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVjNmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAzXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2''@;'; put 'put ''XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVjNzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVj''@;'; put 'put ''NzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZj''@;'; put 'put ''XHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVj''@;'; put 'put ''NzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTU5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNTldW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihEW19bMTU5XVtwXV09NDA3MDQrcCxiWzQwNzA0K3BdPV9bMTU5XVtwXSk7Zm9yKF9bMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyXHVj''@;'; put 'put ''N2MzXHVjN2M0XHVjN2M1XHVjN2M2XHVjN2M3XHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxXHVjN2QyXHVjN2QzXHVjN2Q0XHVjN2Q1XHVjN2Q2XHVjN2Q3XHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2RlXHVjN2Rm''@;'; put 'put ''XHVjN2UwXHVjN2UxXHVjN2UyXHVjN2UzXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkXHVjN2VlXHVjN2VmXHVjN2YwXHVjN2YxXHVjN2YyXHVjN2YzXHVjN2Y0XHVjN2Y1XHVjN2Y2XHVjN2Y3XHVjN2Y4XHVjN2Y5XHVjN2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjN2ZiXHVjN2ZjXHVjN2ZkXHVjN2ZlXHVjN2ZmXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiXHVjODBjXHVjODBkXHVjODBlXHVjODBmXHVjODEyXHVjODE0XHVjODE3XHVjODE4XHVjODE5XHVjODFhXHVjODFiXHVjODFlXHVjODFm''@;'; put 'put ''XHVjODIxXHVjODIyXHVjODIzXHVjODI1XHVjODI2XHVjODI3XHVjODI4XHVjODI5XHVjODJhXHVjODJiXHVjODJlXHVjODMwXHVjODMyXHVjODMzXHVjODM0XHVjODM1XHVjODM2XHVjODM3XHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxXHVjODQyXHVjODQzXHVj''@;'; put 'put ''ODQ0XHVjODQ1XHVjODQ2XHVjODQ3XHVjODRhXHVjODRiXHVjODRlXHVjODRmXHVjODUwXHVjODUxXHVjODUyXHVjODUzXHVjODU1XHVjODU2XHVjODU3XHVjODU4XHVjODU5XHVjODVhXHVjODViXHVjODVjXHVjODVkXHVjODVlXHVjODVmXHVjODYwXHVjODYxXHVjODYyXHVjODYzXHVjODY0''@;'; put 'put ''XHVjODY1XHVjODY2XHVjODY3XHVjODY4XHVjODY5XHVjODZhXHVjODZiXHVjODZjXHVjODZkXHVjODZlXHVjODZmXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVjODc3XHVjODc5XHVjODdiXHVjODdjXHVjODdkXHVjODdlXHVjODdmXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVj''@;'; put 'put ''ODhlXHVjODhmXHVjODkwXHVjODkxXHVjODkyXHVjODkzXHVjODk1XHVjODk2XHVjODk3XHVjODk4XHVjODk5XHVjODlhXHVjODliXHVjODljXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sx''@;'; put 'put ''NjBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYwXVtwXV09NDA5NjArcCxiWzQwOTYwK3BdPV9bMTYwXVtwXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVj''@;'; put 'put ''OGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIwXHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVjOGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQwXHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVjOGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZm''@;'; put 'put ''XHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVjOTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUz''@;'; put 'put ''MDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1''@;'; put 'put ''MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFc''@;'; put 'put ''dTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2MV1b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjFdW3BdXT00MTIxNitwLGJbNDEyMTYrcF09X1sxNjFdW3BdKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVc''@;'; put 'put ''dWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5''@;'; put 'put ''MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2NcdWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5''@;'; put 'put ''NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEw''@;'; put 'put ''OVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1''@;'; put 'put ''MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjJdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihEW19bMTYyXVtwXV09NDE0NzIrcCxiWzQxNDcyK3BdPV9bMTYyXVtwXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1XHVjOTc2XHVj''@;'; put 'put ''OTc3XHVjOTc4XHVjOTc5XHVjOTdhXHVjOTdiXHVjOTdkXHVjOTdlXHVjOTdmXHVjOTgwXHVjOTgxXHVjOTgyXHVjOTgzXHVjOTg0XHVjOTg1XHVjOTg2XHVjOTg3XHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTkx''@;'; put 'put ''XHVjOTkyXHVjOTkzXHVjOTk0XHVjOTk1XHVjOTk2XHVjOTk3XHVjOTlhXHVjOTljXHVjOTllXHVjOTlmXHVjOWEwXHVjOWExXHVjOWEyXHVjOWEzXHVjOWE0XHVjOWE1XHVjOWE2XHVjOWE3XHVjOWE4XHVjOWE5XHVjOWFhXHVjOWFiXHVjOWFjXHVjOWFkXHVjOWFlXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWFmXHVjOWIwXHVjOWIxXHVjOWIyXHVjOWIzXHVjOWI0XHVjOWI1XHVjOWI2XHVjOWI3XHVjOWI4XHVjOWI5XHVjOWJhXHVjOWJiXHVjOWJjXHVjOWJkXHVjOWJlXHVjOWJmXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiXHVjOWNj''@;'; put 'put ''XHVjOWNkXHVjOWNlXHVjOWNmXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZjA0XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVm''@;'; put 'put ''ZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJm''@;'; put 'put ''XHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZmU2XHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVm''@;'; put 'put ''ZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYzXS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1sxNjNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYzXVtwXV09NDE3MjgrcCxiWzQxNzI4K3BdPV9bMTYzXVtwXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVj''@;'; put 'put ''OWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJjXHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNj''@;'; put 'put ''XHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUzMTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUz''@;'; put 'put ''MTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRkXHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVk''@;'; put 'put ''XHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUzMTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUz''@;'; put 'put ''MTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY0XS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1sxNjRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY0XVtwXV09NDE5ODQrcCxiWzQxOTg0K3BdPV9bMTY0XVtwXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVj''@;'; put 'put ''YTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVhXHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVjYTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVj''@;'; put 'put ''YTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThkXHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTli''@;'; put 'put ''XHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''MTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzli''@;'; put 'put ''XHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUw''@;'; put 'put ''M2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMTY1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY1XVtwXV09NDIyNDArcCxiWzQyMjQwK3BdPV9bMTY1XVtwXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjYWE4XHVjYWE5XHVjYWFhXHVjYWFiXHVjYWFjXHVjYWFkXHVjYWFlXHVjYWFmXHVjYWIwXHVjYWIxXHVjYWIyXHVjYWIzXHVjYWI0XHVjYWI1XHVjYWI2XHVjYWI3XHVjYWI4XHVjYWI5XHVjYWJhXHVjYWJiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWM2XHVjYWM3XHVjYWM4XHVjYWM5XHVjYWNhXHVjYWNiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhXHVjYWRiXHVjYWRjXHVjYWRkXHVjYWRlXHVjYWRmXHVjYWUxXHVjYWUyXHVjYWUzXHVj''@;'; put 'put ''YWU0XHVjYWU1XHVjYWU2XHVjYWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkXHVjYWVlXHVjYWVmXHVjYWYwXHVjYWYxXHVjYWYyXHVjYWYzXHVjYWY1XHVjYWY2XHVjYWY3XHVjYWY4XHVjYWY5XHVjYWZhXHVjYWZi''@;'; put 'put ''XHVjYWZjXHVjYWZkXHVjYWZlXHVjYWZmXHVjYjAwXHVjYjAxXHVjYjAyXHVjYjAzXHVjYjA0XHVjYjA1XHVjYjA2XHVjYjA3XHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUy''@;'; put 'put ''NTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFl''@;'; put 'put ''XHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMTY2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY2XVtwXV09NDI0OTYrcCxiWzQyNDk2K3BdPV9bMTY2XVtwXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4''@;'; put 'put ''XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVjYjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVj''@;'; put 'put ''YjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVh''@;'; put 'put ''XHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVjYjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUz''@;'; put 'put ''MzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4''@;'; put 'put ''XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUzM2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUz''@;'; put 'put ''M2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY3XVtwXV09NDI3NTIrcCxiWzQyNzUyK3BdPV9bMTY3XVtwXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1''@;'; put 'put ''XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVjYjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVj''@;'; put 'put ''YjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIx''@;'; put 'put ''XHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVjYmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1''@;'; put 'put ''Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2''@;'; put 'put ''XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUyNGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUy''@;'; put 'put ''NGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMTY4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY4XVtwXV09NDMwMDgrcCxiWzQzMDA4K3BdPV9bMTY4XVtwXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmM1XHVjYmM2XHVjYmM3XHVjYmM4XHVjYmM5XHVjYmNhXHVjYmNiXHVjYmNjXHVjYmNkXHVjYmNlXHVjYmNmXHVjYmQwXHVjYmQxXHVjYmQyXHVjYmQzXHVjYmQ1XHVjYmQ2XHVjYmQ3XHVjYmQ4XHVjYmQ5XHVjYmRhXHVjYmRiXHVjYmRjXHVjYmRk''@;'; put 'put ''XHVjYmRlXHVjYmRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhXHVjYmViXHVjYmVjXHVjYmVkXHVjYmVlXHVjYmVmXHVjYmYwXHVjYmYxXHVjYmYyXHVjYmYzXHVjYmY0XHVjYmY1XHVj''@;'; put 'put ''YmY2XHVjYmY3XHVjYmY4XHVjYmY5XHVjYmZhXHVjYmZiXHVjYmZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmZkXHVjYmZlXHVjYmZmXHVjYzAwXHVjYzAxXHVjYzAyXHVjYzAzXHVjYzA0XHVjYzA1XHVjYzA2XHVjYzA3XHVjYzA4XHVjYzA5XHVjYzBhXHVjYzBi''@;'; put 'put ''XHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1XHVjYzE2XHVjYzE3XHVjYzE4XHVjYzE5XHVjYzFhXHVjYzFiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhk''@;'; put 'put ''Zlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDBcdTMyMDFcdTMyMDJcdTMyMDNcdTMyMDRcdTMyMDVcdTMyMDZcdTMyMDdcdTMyMDhcdTMyMDlcdTMyMGFcdTMyMGJcdTMyMGNcdTMyMGRcdTMyMGVcdTMyMGZcdTMyMTBcdTMyMTFcdTMyMTJcdTMyMTNcdTMyMTRcdTMyMTVcdTMyMTZcdTMy''@;'; put 'put ''MTdcdTMyMThcdTMyMTlcdTMyMWFcdTMyMWJcdTI0OWNcdTI0OWRcdTI0OWVcdTI0OWZcdTI0YTBcdTI0YTFcdTI0YTJcdTI0YTNcdTI0YTRcdTI0YTVcdTI0YTZcdTI0YTdcdTI0YThcdTI0YTlcdTI0YWFcdTI0YWJcdTI0YWNcdTI0YWRcdTI0YWVcdTI0YWZcdTI0YjBcdTI0YjFcdTI0YjJc''@;'; put 'put ''dTI0YjNcdTI0YjRcdTI0YjVcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1sxNjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjldW3BdXT00MzI2NCtwLGJbNDMyNjQrcF09X1sxNjldW3BdKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNj''@;'; put 'put ''NGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJc''@;'; put 'put ''dWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNj''@;'; put 'put ''ODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJc''@;'; put 'put ''dTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMw''@;'; put 'put ''NjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJc''@;'; put 'put ''dTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzBdW3BdXT00MzUyMCtwLGJbNDM1MjArcF09X1sxNzBdW3BdKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNj''@;'; put 'put ''YjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZcdWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFc''@;'; put 'put ''dWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNj''@;'; put 'put ''ZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlcdWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlc''@;'; put 'put ''dTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMw''@;'; put 'put ''YzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBc''@;'; put 'put ''dTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzFdW3BdXT00Mzc3NitwLGJbNDM3NzYrcF09X1sxNzFdW3BdKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDJcdWNkMDNcdWNkMDRcdWNkMDVcdWNkMDZcdWNkMDdcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTFcdWNkMTJcdWNkMTNcdWNkMTRcdWNkMTVcdWNkMTZcdWNk''@;'; put 'put ''MTdcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkMjFcdWNkMjJcdWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmRcdWNkMmVcdWNkMmZcdWNkMzBcdWNkMzFcdWNkMzJcdWNkMzNc''@;'; put 'put ''dWNkMzRcdWNkMzVcdWNkMzZcdWNkMzdcdWNkMzhcdWNkM2FcdWNkM2JcdWNkM2NcdWNkM2RcdWNkM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkM2ZcdWNkNDBcdWNkNDFcdWNkNDJcdWNkNDNcdWNkNDRcdWNkNDVcdWNkNDZcdWNkNDdcdWNkNDhcdWNkNDlcdWNk''@;'; put 'put ''NGFcdWNkNGJcdWNkNGNcdWNkNGRcdWNkNGVcdWNkNGZcdWNkNTBcdWNkNTFcdWNkNTJcdWNkNTNcdWNkNTRcdWNkNTVcdWNkNTZcdWNkNTdcdWNkNThcdWNkNTlcdWNkNWFcdWNkNWJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFc''@;'; put 'put ''dTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc''@;'; put 'put ''dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzJdW3BdXT00NDAzMitwLGJbNDQwMzIrcF09X1sxNzJdW3BdKTtmb3IoX1sxNzNdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNk''@;'; put 'put ''NzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZc''@;'; put 'put ''dWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNk''@;'; put 'put ''YWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzNdW3BdXT00NDI4OCtwLGJbNDQyODgrcF09X1sxNzNdW3BdKTtmb3IoX1sx''@;'; put 'put ''NzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNkYzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNk''@;'; put 'put ''ZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZc''@;'; put 'put ''dWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNl''@;'; put 'put ''MGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRcdWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzRdW3BdXT00NDU0NCtwLGJbNDQ1NDQrcF09X1sxNzRd''@;'; put 'put ''W3BdKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzZcdWNlMzdcdWNlMzhcdWNlMzlcdWNlM2FcdWNlM2JcdWNlM2NcdWNlM2RcdWNl''@;'; put 'put ''M2VcdWNlM2ZcdWNlNDBcdWNlNDFcdWNlNDJcdWNlNDNcdWNlNDRcdWNlNDVcdWNlNDZcdWNlNDdcdWNlNDhcdWNlNDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNGFcdWNlNGJcdWNlNGNcdWNlNGRcdWNlNGVcdWNlNGZcdWNlNTBcdWNlNTFcdWNlNTJcdWNlNTNc''@;'; put 'put ''dWNlNTRcdWNlNTVcdWNlNTZcdWNlNTdcdWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjJcdWNlNjNcdWNlNjRcdWNlNjVcdWNlNjZcdWNlNjdcdWNlNmFcdWNlNmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNmVcdWNlNmZcdWNlNzBcdWNlNzFcdWNlNzJcdWNl''@;'; put 'put ''NzNcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2RcdWNlN2VcdWNlN2ZcdWNlODBcdWNlODFcdWNlODJcdWNlODNcdWNlODZcdWNlODhcdWNlOGFcdWNlOGJcdWNlOGNcdWNlOGRcdWNlOGVcdWNlOGZcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTlcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzVdW3BdXT00NDgwMCtwLGJbNDQ4''@;'; put 'put ''MDArcF09X1sxNzVdW3BdKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNl''@;'; put 'put ''YWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNc''@;'; put 'put ''dWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNl''@;'; put 'put ''ZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVc''@;'; put 'put ''dWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFj''@;'; put 'put ''MzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRc''@;'; put 'put ''dWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFj''@;'; put 'put ''ZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzZdW3BdXT00''@;'; put 'put ''NTA1NitwLGJbNDUwNTYrcF09X1sxNzZdW3BdKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNm''@;'; put 'put ''MGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFc''@;'; put 'put ''dWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNmM2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNm''@;'; put 'put ''NDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhc''@;'; put 'put ''dWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFk''@;'; put 'put ''NmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNc''@;'; put 'put ''dWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFl''@;'; put 'put ''NGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3N11bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1sxNzddW3BdXT00NTMxMitwLGJbNDUzMTIrcF09X1sxNzddW3BdKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNm''@;'; put 'put ''NzlcdWNmN2FcdWNmN2JcdWNmN2NcdWNmN2RcdWNmN2VcdWNmN2ZcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODZcdWNmODdcdWNmODhcdWNmODlcdWNmOGFcdWNmOGJcdWNmOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmOGVcdWNmOGZcdWNmOTBcdWNmOTFc''@;'; put 'put ''dWNmOTJcdWNmOTNcdWNmOTRcdWNmOTVcdWNmOTZcdWNmOTdcdWNmOThcdWNmOTlcdWNmOWFcdWNmOWJcdWNmOWNcdWNmOWRcdWNmOWVcdWNmOWZcdWNmYTBcdWNmYTJcdWNmYTNcdWNmYTRcdWNmYTVcdWNmYTZcdWNmYTdcdWNmYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWNmYWFcdWNmYWJcdWNmYWNcdWNmYWRcdWNmYWVcdWNmYWZcdWNmYjFcdWNmYjJcdWNmYjNcdWNmYjRcdWNmYjVcdWNmYjZcdWNmYjdcdWNmYjhcdWNmYjlcdWNmYmFcdWNmYmJcdWNmYmNcdWNmYmRcdWNmYmVcdWNmYmZcdWNmYzBcdWNmYzFcdWNmYzJcdWNmYzNcdWNmYzVcdWNmYzZc''@;'; put 'put ''dWNmYzdcdWNmYzhcdWNmYzlcdWNmY2FcdWNmY2JcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFl''@;'; put 'put ''ZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBc''@;'; put 'put ''dWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIw''@;'; put 'put ''MGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OF1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKERbX1sxNzhdW3BdXT00NTU2OCtwLGJbNDU1NjgrcF09X1sxNzhdW3BdKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNm''@;'; put 'put ''ZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJc''@;'; put 'put ''dWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVc''@;'; put 'put ''dWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIw''@;'; put 'put ''YWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNc''@;'; put 'put ''dWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIx''@;'; put 'put ''NzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3''@;'; put 'put ''OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzldW3BdXT00NTgyNCtwLGJbNDU4MjQrcF09X1sxNzldW3BdKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQw''@;'; put 'put ''MzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZcdWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQwNjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2JcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJc''@;'; put 'put ''dWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIy''@;'; put 'put ''MzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRc''@;'; put 'put ''dWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIy''@;'; put 'put ''ZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThcdWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODBdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzE4MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODBdW3BdXT00NjA4MCtwLGJbNDYwODArcF09X1sxODBdW3BdKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwOTVcdWQwOTZcdWQw''@;'; put 'put ''OTdcdWQwOThcdWQwOTlcdWQwOWFcdWQwOWJcdWQwOWNcdWQwOWRcdWQwOWVcdWQwOWZcdWQwYTBcdWQwYTFcdWQwYTJcdWQwYTNcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWRcdWQwYWVcdWQwYWZcdWQwYjBcdWQwYjFcdWQwYjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmFcdWQwYmJcdWQwYmNcdWQwYmRcdWQwYmVcdWQwYmZcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2FcdWQwY2JcdWQwY2NcdWQwY2RcdWQwY2VcdWQwY2ZcdWQwZDJcdWQwZDZcdWQwZDdcdWQwZDhcdWQwZDlcdWQw''@;'; put 'put ''ZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTVcdWQwZTZcdWQwZTdcdWQwZThcdWQwZTlcdWQwZWFcdWQwZWJcdWQwZWVcdWQwZjJcdWQwZjNcdWQwZjRcdWQwZjVcdWQwZjZcdWQwZjdcdWQwZjlc''@;'; put 'put ''dWQwZmFcdWQwZmJcdWQwZmNcdWQwZmRcdWQwZmVcdWQwZmZcdWQxMDBcdWQxMDFcdWQxMDJcdWQxMDNcdWQxMDRcdWIzNjdcdWIzNjlcdWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIz''@;'; put 'put ''YTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJc''@;'; put 'put ''dWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0''@;'; put 'put ''ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODFd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODFdW3BdXT00NjMzNitwLGJbNDYzMzYrcF09X1sxODFdW3BdKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQx''@;'; put 'put ''MDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQx''@;'; put 'put ''M2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFc''@;'; put 'put ''dWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1''@;'; put 'put ''NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThc''@;'; put 'put ''dWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3''@;'; put 'put ''M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxODJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODJdW3BdXT00NjU5MitwLGJbNDY1OTIrcF09X1sxODJdW3BdKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2FcdWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQxOTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQx''@;'; put 'put ''YTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNcdWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZc''@;'; put 'put ''dWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQxY2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3''@;'; put 'put ''YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4Mzhc''@;'; put 'put ''dWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4''@;'; put 'put ''ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxODNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODNdW3BdXT00Njg0OCtwLGJbNDY4NDgrcF09X1sxODNdW3BdKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZDBcdWQxZDFcdWQxZDJcdWQxZDNcdWQxZDRcdWQxZDVcdWQxZDZcdWQxZDdcdWQxZDlcdWQxZGFcdWQxZGJcdWQxZGNcdWQxZGRcdWQxZGVcdWQxZGZcdWQxZTBcdWQxZTFcdWQxZTJcdWQxZTNcdWQxZTRcdWQxZTVcdWQxZTZcdWQxZTdcdWQxZThc''@;'; put 'put ''dWQxZTlcdWQxZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZWJcdWQxZWNcdWQxZWRcdWQxZWVcdWQxZWZcdWQxZjBcdWQxZjFcdWQxZjJcdWQxZjNcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjlcdWQxZmFcdWQxZmJcdWQxZmNcdWQxZmRcdWQxZmVcdWQxZmZcdWQy''@;'; put 'put ''MDBcdWQyMDFcdWQyMDJcdWQyMDNcdWQyMDRcdWQyMDVcdWQyMDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMDhcdWQyMGFcdWQyMGJcdWQyMGNcdWQyMGRcdWQyMGVcdWQyMGZcdWQyMTFcdWQyMTJcdWQyMTNcdWQyMTRcdWQyMTVcdWQyMTZcdWQyMTdcdWQyMThc''@;'; put 'put ''dWQyMTlcdWQyMWFcdWQyMWJcdWQyMWNcdWQyMWRcdWQyMWVcdWQyMWZcdWQyMjBcdWQyMjFcdWQyMjJcdWQyMjNcdWQyMjRcdWQyMjVcdWQyMjZcdWQyMjdcdWQyMjhcdWQyMjlcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5''@;'; put 'put ''OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2VcdWI5Y2ZcdWI5ZDBcdWI5ZDFcdWI5ZDJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVc''@;'; put 'put ''dWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJh''@;'; put 'put ''NjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlc''@;'; put 'put ''dWJhZmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODRdW3BdXT00NzEwNCtwLGJbNDcxMDQrcF09X1sxODRdW3BdKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdc''@;'; put 'put ''dWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQy''@;'; put 'put ''NWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVc''@;'; put 'put ''dWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJi''@;'; put 'put ''MjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNc''@;'; put 'put ''dWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJj''@;'; put 'put ''MWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVc''@;'; put 'put ''dWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODVdW3BdXT00NzM2MCtwLGJbNDczNjArcF09X1sxODVdW3BdKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZcdWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZc''@;'; put 'put ''dWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQy''@;'; put 'put ''YzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZc''@;'; put 'put ''dWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJj''@;'; put 'put ''YThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRc''@;'; put 'put ''dWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJk''@;'; put 'put ''YjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlc''@;'; put 'put ''dWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODZdW3BdXT00NzYxNitwLGJbNDc2MTYrcF09X1sxODZdW3BdKTtmb3IoX1sxODddPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZmJcdWQyZmNcdWQyZmRcdWQyZmVcdWQyZmZcdWQzMDJcdWQzMDRcdWQzMDZcdWQzMDdcdWQzMDhcdWQzMDlcdWQzMGFcdWQzMGJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVc''@;'; put 'put ''dWQzMTdcdWQzMThcdWQzMTlcdWQzMWFcdWQzMWJcdWQzMWVcdWQzMjJcdWQzMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzFcdWQzMzJcdWQzMzNcdWQzMzRcdWQzMzVcdWQz''@;'; put 'put ''MzZcdWQzMzdcdWQzM2FcdWQzM2VcdWQzM2ZcdWQzNDBcdWQzNDFcdWQzNDJcdWQzNDNcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNGFcdWQzNGJcdWQzNGNcdWQzNGRcdWQzNGVcdWQzNGZcdWQzNTBcdWQzNTFcdWQzNTJc''@;'; put 'put ''dWQzNTNcdWQzNTRcdWQzNTVcdWQzNTZcdWQzNTdcdWQzNThcdWQzNTlcdWQzNWFcdWQzNWJcdWQzNWNcdWQzNWRcdWQzNWVcdWQzNWZcdWQzNjBcdWQzNjFcdWQzNjJcdWQzNjNcdWQzNjRcdWQzNjVcdWQzNjZcdWQzNjdcdWQzNjhcdWQzNjlcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJl''@;'; put 'put ''NzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhc''@;'; put 'put ''dWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMw''@;'; put 'put ''NjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2Nc''@;'; put 'put ''dWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODddW3BdXT00Nzg3MitwLGJbNDc4NzIrcF09X1sxODddW3BdKTtmb3Io''@;'; put 'put ''X1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlc''@;'; put 'put ''dWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQz''@;'; put 'put ''OWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZc''@;'; put 'put ''dWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMw''@;'; put 'put ''ZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2Nc''@;'; put 'put ''dWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMx''@;'; put 'put ''OWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFc''@;'; put 'put ''dWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODhdW3BdXT00ODEyOCtwLGJbNDgxMjgrcF09X1sx''@;'; put 'put ''ODhdW3BdKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdcdWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdc''@;'; put 'put ''dWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0''@;'; put 'put ''MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRcdWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJc''@;'; put 'put ''dWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMy''@;'; put 'put ''MmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThc''@;'; put 'put ''dWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMz''@;'; put 'put ''MTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJc''@;'; put 'put ''dWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODldW3BdXT00ODM4NCtwLGJb''@;'; put 'put ''NDgzODQrcF09X1sxODldW3BdKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MzhcdWQ0MzlcdWQ0M2FcdWQ0M2JcdWQ0M2NcdWQ0M2RcdWQ0M2VcdWQ0M2ZcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDVc''@;'; put 'put ''dWQ0NDZcdWQ0NDdcdWQ0NDhcdWQ0NDlcdWQ0NGFcdWQ0NGJcdWQ0NGNcdWQ0NGRcdWQ0NGVcdWQ0NGZcdWQ0NTBcdWQ0NTFcdWQ0NTJcdWQ0NTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NTRcdWQ0NTVcdWQ0NTZcdWQ0NTdcdWQ0NThcdWQ0NTlcdWQ0NWFcdWQ0''@;'; put 'put ''NWJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjVcdWQ0NjZcdWQ0NjdcdWQ0NjhcdWQ0NjlcdWQ0NmFcdWQ0NmJcdWQ0NmNcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NzNcdWQ0NzRcdWQ0NzVc''@;'; put 'put ''dWQ0NzZcdWQ0NzdcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODNcdWQ0ODRcdWQ0ODVcdWQ0ODZcdWQ0ODdcdWQ0OGFcdWQ0OGNcdWQ0OGVcdWQ0OGZcdWQ0OTBcdWQ0OTFcdWQ0OTJcdWQ0OTNcdWQ0OTVcdWQ0OTZcdWQ0OTdcdWQ0OThcdWQ0OTlcdWQ0OWFcdWQ0OWJcdWQ0''@;'; put 'put ''OWNcdWQ0OWRcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNc''@;'; put 'put ''dWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1''@;'; put 'put ''NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1Yjlc''@;'; put 'put ''dWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzRcdWM1YzVcdWM1YzZcdWM1YzdcdWM1YzhcdWM1YzlcdWM1Y2FcdWM1Y2NcdWM1Y2VcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTBdW3Bd''@;'; put 'put ''XT00ODY0MCtwLGJbNDg2NDArcF09X1sxOTBdW3BdKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdc''@;'; put 'put ''dWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0''@;'; put 'put ''YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZc''@;'; put 'put ''dWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0''@;'; put 'put ''ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdc''@;'; put 'put ''dWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2''@;'; put 'put ''NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2Yjhc''@;'; put 'put ''dWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MV1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KERbX1sxOTFdW3BdXT00ODg5NitwLGJbNDg4OTYrcF09X1sxOTFdW3BdKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZc''@;'; put 'put ''dWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1''@;'; put 'put ''MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZcdWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1''@;'; put 'put ''NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVc''@;'; put 'put ''dWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3''@;'; put 'put ''ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZc''@;'; put 'put ''dWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Ml1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1sxOTJdW3BdXT00OTE1MitwLGJbNDkxNTIrcF09X1sxOTJdW3BdKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmVc''@;'; put 'put ''dWQ1NmZcdWQ1NzBcdWQ1NzFcdWQ1NzJcdWQ1NzNcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2RcdWQ1N2VcdWQ1N2ZcdWQ1ODBcdWQ1ODFcdWQ1ODJcdWQ1ODNcdWQ1ODZcdWQ1OGFcdWQ1OGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1OGNcdWQ1''@;'; put 'put ''OGRcdWQ1OGVcdWQ1OGZcdWQ1OTFcdWQ1OTJcdWQ1OTNcdWQ1OTRcdWQ1OTVcdWQ1OTZcdWQ1OTdcdWQ1OThcdWQ1OTlcdWQ1OWFcdWQ1OWJcdWQ1OWNcdWQ1OWRcdWQ1OWVcdWQ1OWZcdWQ1YTBcdWQ1YTFcdWQ1YTJcdWQ1YTNcdWQ1YTRcdWQ1YTZcdWQ1YTdcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQ1YThcdWQ1YTlcdWQ1YWFcdWQ1YWJcdWQ1YWNcdWQ1YWRcdWQ1YWVcdWQ1YWZcdWQ1YjBcdWQ1YjFcdWQ1YjJcdWQ1YjNcdWQ1YjRcdWQ1YjVcdWQ1YjZcdWQ1YjdcdWQ1YjhcdWQ1YjlcdWQ1YmFcdWQ1YmJcdWQ1YmNcdWQ1YmRcdWQ1YmVcdWQ1YmZcdWQ1''@;'; put 'put ''YzBcdWQ1YzFcdWQ1YzJcdWQ1YzNcdWQ1YzRcdWQ1YzVcdWQ1YzZcdWQ1YzdcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRc''@;'; put 'put ''dWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4''@;'; put 'put ''ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBc''@;'; put 'put ''dWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE5M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTNdW3BdXT00OTQwOCtwLGJbNDk0MDgrcF09X1sxOTNdW3BdKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2Vc''@;'; put 'put ''dWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZcdWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2''@;'; put 'put ''MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZcdWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNc''@;'; put 'put ''dWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNh''@;'; put 'put ''Y2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhc''@;'; put 'put ''dWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTRdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE5NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTRdW3BdXT00OTY2NCtwLGJbNDk2NjQrcF09X1sxOTRdW3BdKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2Vc''@;'; put 'put ''dWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZcdWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2Zc''@;'; put 'put ''dWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2''@;'; put 'put ''OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhc''@;'; put 'put ''dWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNk''@;'; put 'put ''MGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBc''@;'; put 'put ''dWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''OTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTVdW3BdXT00OTkyMCtwLGJbNDk5MjArcF09X1sxOTVdW3BdKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjFcdWQ2YjJcdWQ2YjNcdWQ2YjRcdWQ2YjVcdWQ2YjZcdWQ2YjdcdWQ2YjhcdWQ2YmFcdWQ2YmNcdWQ2YmRcdWQ2YmVcdWQ2YmZcdWQ2YzBcdWQ2YzFcdWQ2YzJcdWQ2YzNcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2JcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGFcdWQ2ZGJcdWQ2ZGNcdWQ2ZGRcdWQ2ZGVcdWQ2ZGZcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTlcdWQ2ZWFc''@;'; put 'put ''dWQ2ZWJcdWQ2ZWNcdWQ2ZWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjZcdWQ2ZjdcdWQ2ZjhcdWQ2ZjlcdWQ2ZmFcdWQ2ZmJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDVcdWQ3''@;'; put 'put ''MDZcdWQ3MDdcdWQ3MDhcdWQ3MDlcdWQ3MGFcdWQ3MGJcdWQ3MGNcdWQ3MGRcdWQ3MGVcdWQ3MGZcdWQ3MTBcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2Nc''@;'; put 'put ''dWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNm''@;'; put 'put ''MDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhc''@;'; put 'put ''dWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2NcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxOTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTZdW3BdXT01MDE3NitwLGJbNTAxNzYrcF09X1sxOTZdW3BdKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3''@;'; put 'put ''MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVc''@;'; put 'put ''dWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3''@;'; put 'put ''NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRc''@;'; put 'put ''dWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQw''@;'; put 'put ''ZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhc''@;'; put 'put ''dWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTddW3BdXT01MDQzMitwLGJbNTA0MzIrcF09X1sxOTddW3BdKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBc''@;'; put 'put ''dWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQz''@;'; put 'put ''MGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZc''@;'; put 'put ''dWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQz''@;'; put 'put ''ZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOThdW3BdXT01MDY4OCtwLGJbNTA2ODgrcF09X1sxOThdW3BdKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRc''@;'; put 'put ''dWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1''@;'; put 'put ''MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhc''@;'; put 'put ''dWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2''@;'; put 'put ''MTRcdWQ2MTVcdWQ2MWNcdWQ2MjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTldW3BdXT01MDk0NCtwLGJbNTA5NDQrcF09X1sxOTldW3BdKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBc''@;'; put 'put ''dWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2''@;'; put 'put ''YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRc''@;'; put 'put ''dWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3''@;'; put 'put ''OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDBdW3BdXT01MTIwMCtwLGJbNTEyMDArcF09X1syMDBdW3BdKTtmb3IoX1syMDJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlc''@;'; put 'put ''dTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0''@;'; put 'put ''MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFc''@;'; put 'put ''dTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1''@;'; put 'put ''YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDJdW3BdXT01MTcxMitwLGJbNTE3MTIrcF09X1syMDJdW3BdKTtm''@;'; put 'put ''b3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMjNcdTVjYWNc''@;'; put 'put ''dTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdcdTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTlj''@;'; put 'put ''NDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVc''@;'; put 'put ''dTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBcdTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkz''@;'; put 'put ''NzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZhYTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDNdW3BdXT01MTk2OCtwLGJbNTE5NjgrcF09''@;'; put 'put ''X1syMDNdW3BdKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYy''@;'; put 'put ''ODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNc''@;'; put 'put ''dTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlh''@;'; put 'put ''NWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDRdW3BdXT01MjIyNCtw''@;'; put 'put ''LGJbNTIyMjQrcF09X1syMDRdW3BdKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1''@;'; put 'put ''NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNc''@;'; put 'put ''dTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYw''@;'; put 'put ''NmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDVd''@;'; put 'put ''W3BdXT01MjQ4MCtwLGJbNTI0ODArcF09X1syMDVdW3BdKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdm''@;'; put 'put ''NTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBc''@;'; put 'put ''dTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgx''@;'; put 'put ''YTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNl1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKERbX1syMDZdW3BdXT01MjczNitwLGJbNTI3MzYrcF09X1syMDZdW3BdKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcw''@;'; put 'put ''NzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBc''@;'; put 'put ''dTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZi''@;'; put 'put ''MGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwN11bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKERbX1syMDddW3BdXT01Mjk5MitwLGJbNTI5OTIrcF09X1syMDddW3BdKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1''@;'; put 'put ''NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlc''@;'; put 'put ''dWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRm''@;'; put 'put ''MGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDhdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzIwOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDhdW3BdXT01MzI0OCtwLGJbNTMyNDgrcF09X1syMDhdW3BdKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1''@;'; put 'put ''N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZc''@;'; put 'put ''dTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGVcdWY5MGZcdWY5MTBcdWY5MTFcdWY5MTJcdWY5MTNcdTkwYTNcdWY5MTRcdWY5MTVcdWY5MTZcdWY5MTdcdWY5MThcdThhZmVcdWY5MTlcdWY5''@;'; put 'put ''MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDldLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzIwOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDldW3BdXT01MzUwNCtwLGJbNTM1MDQrcF09X1syMDldW3BdKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3''@;'; put 'put ''ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5Mzhc''@;'; put 'put ''dTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5''@;'; put 'put ''NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1syMTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTBdW3BdXT01Mzc2MCtwLGJbNTM3NjArcF09X1syMTBdW3BdKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdh''@;'; put 'put ''ZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFc''@;'; put 'put ''dTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTcz''@;'; put 'put ''YjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1syMTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTFdW3BdXT01NDAxNitwLGJbNTQwMTYrcF09X1syMTFdW3BdKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0''@;'; put 'put ''MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNc''@;'; put 'put ''dTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1''@;'; put 'put ''ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODVc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTJdW3BdXT01NDI3MitwLGJbNTQyNzIrcF09X1syMTJdW3BdKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0''@;'; put 'put ''M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZc''@;'; put 'put ''dTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkx''@;'; put 'put ''Y2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBc''@;'; put 'put ''dTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTNdW3BdXT01NDUyOCtwLGJbNTQ1MjgrcF09X1syMTNdW3BdKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkz''@;'; put 'put ''NGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZc''@;'; put 'put ''dTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5''@;'; put 'put ''N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2Vc''@;'; put 'put ''dTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTRdW3BdXT01NDc4NCtwLGJbNTQ3ODQrcF09X1syMTRdW3BdKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVj''@;'; put 'put ''NjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2Nzhc''@;'; put 'put ''dTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3''@;'; put 'put ''NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZc''@;'; put 'put ''dTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTVdW3BdXT01NTA0MCtwLGJbNTUwNDArcF09X1syMTVdW3BdKTtmb3IoX1syMTZd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0''@;'; put 'put ''NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNc''@;'; put 'put ''dTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTVi''@;'; put 'put ''ZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4Yzlc''@;'; put 'put ''dTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTZdW3BdXT01NTI5NitwLGJbNTUyOTYrcF09X1syMTZdW3Bd''@;'; put 'put ''KTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUx''@;'; put 'put ''YTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2Rc''@;'; put 'put ''dTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVl''@;'; put 'put ''ZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNc''@;'; put 'put ''dThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTddW3BdXT01NTU1MitwLGJbNTU1NTIr''@;'; put 'put ''cF09X1syMTddW3BdKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdc''@;'; put 'put ''dTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0''@;'; put 'put ''OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJc''@;'; put 'put ''dTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMThdW3BdXT01NTgw''@;'; put 'put ''OCtwLGJbNTU4MDgrcF09X1syMThdW3BdKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBc''@;'; put 'put ''dTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkx''@;'; put 'put ''NGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2Vc''@;'; put 'put ''dTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sy''@;'; put 'put ''MTldW3BdXT01NjA2NCtwLGJbNTYwNjQrcF09X1syMTldW3BdKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRc''@;'; put 'put ''dTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUz''@;'; put 'put ''MTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJc''@;'; put 'put ''dTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMF1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKERbX1syMjBdW3BdXT01NjMyMCtwLGJbNTYzMjArcF09X1syMjBdW3BdKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNc''@;'; put 'put ''dThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdk''@;'; put 'put ''MWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBc''@;'; put 'put ''dTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMV1b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjFdW3BdXT01NjU3NitwLGJbNTY1NzYrcF09X1syMjFdW3BdKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNc''@;'; put 'put ''dTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVh''@;'; put 'put ''MTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJc''@;'; put 'put ''dTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjJdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzIyMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjJdW3BdXT01NjgzMitwLGJbNTY4MzIrcF09X1syMjJdW3BdKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlc''@;'; put 'put ''dTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4''@;'; put 'put ''NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRc''@;'; put 'put ''dTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjNdLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzIyM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjNdW3BdXT01NzA4OCtwLGJbNTcwODgrcF09X1syMjNdW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNc''@;'; put 'put ''dTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdl''@;'; put 'put ''NTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFc''@;'; put 'put ''dTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZc''@;'; put 'put ''dThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdk''@;'; put 'put ''MzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJc''@;'; put 'put ''dTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFc''@;'; put 'put ''dTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTky''@;'; put 'put ''OTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNc''@;'; put 'put ''dTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVk''@;'; put 'put ''MjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJc''@;'; put 'put ''dTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3''@;'; put 'put ''ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFc''@;'; put 'put ''dTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVj''@;'; put 'put ''MGJcdTVmYzNcdTZjODFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBc''@;'; put 'put ''dTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYx''@;'; put 'put ''MTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdc''@;'; put 'put ''dTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYz''@;'; put 'put ''OTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZc''@;'; put 'put ''dTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1''@;'; put 'put ''MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBc''@;'; put 'put ''dTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRl''@;'; put 'put ''ODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1sy''@;'; put 'put ''MzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ODNcdTZiNWZcdTZjNWRc''@;'; put 'put ''dWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2''@;'; put 'put ''YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZc''@;'; put 'put ''dTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5''@;'; put 'put ''YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZcdTgyZDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBd''@;'; put 'put ''W3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZc''@;'; put 'put ''dTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcx''@;'; put 'put ''ZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2Fc''@;'; put 'put ''dTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVh''@;'; put 'put ''MWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzFdW3BdXT01OTEzNitwLGJbNTkx''@;'; put 'put ''MzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkw''@;'; put 'put ''OTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVc''@;'; put 'put ''dTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVk''@;'; put 'put ''YTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzJdW3BdXT01''@;'; put 'put ''OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3BdKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3''@;'; put 'put ''YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdc''@;'; put 'put ''dTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2''@;'; put 'put ''MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgrcF09X1syMzNdW3BdKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZk''@;'; put 'put ''MzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRc''@;'; put 'put ''dTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYw''@;'; put 'put ''ZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKERbX1syMzRdW3BdXT01OTkwNCtwLGJbNTk5MDQrcF09X1syMzRdW3BdKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkw''@;'; put 'put ''M2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlc''@;'; put 'put ''dWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgx''@;'; put 'put ''YmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIz''@;'; put 'put ''NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzVdW3BdXT02MDE2MCtwLGJbNjAxNjArcF09X1syMzVdW3BdKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcy''@;'; put 'put ''M2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2Nc''@;'; put 'put ''dTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRm''@;'; put 'put ''NWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzZdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzIzNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzZdW3BdXT02MDQxNitwLGJbNjA0MTYrcF09X1syMzZdW3BdKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYx''@;'; put 'put ''NDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNc''@;'; put 'put ''dTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3''@;'; put 'put ''NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzdd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIrcF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThj''@;'; put 'put ''YTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdc''@;'; put 'put ''dTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThk''@;'; put 'put ''ZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzhdW3BdXT02MDkyOCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThm''@;'; put 'put ''M2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVc''@;'; put 'put ''dTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZk''@;'; put 'put ''ZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTZcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1syMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzldW3BdXT02MTE4NCtwLGJbNjExODQrcF09X1syMzldW3BdKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYz''@;'; put 'put ''ZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFc''@;'; put 'put ''dTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThl''@;'; put 'put ''ODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFc''@;'; put 'put ''dTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDBdW3BdXT02MTQ0MCtwLGJbNjE0NDArcF09X1syNDBdW3BdKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYz''@;'; put 'put ''MmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJc''@;'; put 'put ''dTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcx''@;'; put 'put ''MGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlc''@;'; put 'put ''dThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDFdW3BdXT02MTY5NitwLGJbNjE2OTYrcF09X1syNDFdW3BdKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0''@;'; put 'put ''NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlc''@;'; put 'put ''dTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1''@;'; put 'put ''MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVc''@;'; put 'put ''dWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDJdW3BdXT02MTk1MitwLGJbNjE5NTIrcF09X1syNDJdW3BdKTtmb3IoX1syNDNdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZm''@;'; put 'put ''ODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFc''@;'; put 'put ''dTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUy''@;'; put 'put ''NzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVc''@;'; put 'put ''dTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDNdW3BdXT02MjIwOCtwLGJbNjIyMDgrcF09X1syNDNdW3BdKTtmb3Io''@;'; put 'put ''X1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5''@;'; put 'put ''YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2Zc''@;'; put 'put ''dTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThh''@;'; put 'put ''NzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVc''@;'; put 'put ''dTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDRdW3BdXT02MjQ2NCtwLGJbNjI0NjQrcF09X1sy''@;'; put 'put ''NDRdW3BdKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5''@;'; put 'put ''MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZc''@;'; put 'put ''dTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThh''@;'; put 'put ''Y2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFc''@;'; put 'put ''dTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDVdW3BdXT02MjcyMCtwLGJb''@;'; put 'put ''NjI3MjArcF09X1syNDVdW3BdKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZc''@;'; put 'put ''dTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTVi''@;'; put 'put ''ZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNc''@;'; put 'put ''dTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDZdW3Bd''@;'; put 'put ''XT02Mjk3NitwLGJbNjI5NzYrcF09X1syNDZdW3BdKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNc''@;'; put 'put ''dTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1''@;'; put 'put ''ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2Vc''@;'; put 'put ''dTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0N11bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KERbX1syNDddW3BdXT02MzIzMitwLGJbNjMyMzIrcF09X1syNDddW3BdKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZc''@;'; put 'put ''dTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUz''@;'; put 'put ''MGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRc''@;'; put 'put ''dTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0OF1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1syNDhdW3BdXT02MzQ4OCtwLGJbNjM0ODgrcF09X1syNDhdW3BdKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJc''@;'; put 'put ''dTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYw''@;'; put 'put ''OGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0Yzhc''@;'; put 'put ''dTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDldLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzI0OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDldW3BdXT02Mzc0NCtwLGJbNjM3NDQrcF09X1syNDldW3BdKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdc''@;'; put 'put ''dTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZi''@;'; put 'put ''NDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZc''@;'; put 'put ''dTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTBdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzI1MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNTBdW3BdXT02NGUzK3AsYls2NGUzK3BdPV9bMjUwXVtwXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1''@;'; put 'put ''MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUw''@;'; put 'put ''XHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2''@;'; put 'put ''ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUx''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUxXVtwXV09NjQyNTYrcCxiWzY0MjU2K3BdPV9bMjUxXVtwXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0''@;'; put 'put ''ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMw''@;'; put 'put ''XHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2''@;'; put 'put ''YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMjUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUyXVtwXV09NjQ1MTIrcCxiWzY0NTEyK3BdPV9bMjUyXVtwXSk7Zm9yKF9bMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1''@;'; put 'put ''ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3''@;'; put 'put ''XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2''@;'; put 'put ''YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMjUzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjUzXVtwXV09NjQ3NjgrcCxiWzY0NzY4K3BdPV9bMjUzXVtwXSk7cmV0dXJue2VuYzpELGRlYzpifX0oKSxKWzk1MF09ZnVuY3Rpb24oKXt2YXIgcCxiPVtd''@;'; put 'put ''LEQ9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8''@;'; put 'put ''PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5sZW5ndGg7KytwKTY1NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZl''@;'; put 'put ''MzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBc''@;'; put 'put ''dTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVc''@;'; put 'put ''dTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1''@;'; put 'put ''ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIy''@;'; put 'put ''OVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzE2MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYxXVtwXS5jaGFyQ29kZUF0KDApJiYoRFtfWzE2MV1bcF1dPTQxMjE2K3AsYls0MTIxNitwXT1fWzE2MV1bcF0pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUx''@;'; put 'put ''NTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRc''@;'; put 'put ''dTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRc''@;'; put 'put ''dTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMw''@;'; put 'put ''MjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRc''@;'; put 'put ''dWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZm''@;'; put 'put ''NTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAz''@;'; put 'put ''YTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhc''@;'; put 'put ''dTAzYzlcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThc''@;'; put 'put ''dTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRl''@;'; put 'put ''MGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZc''@;'; put 'put ''dTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJc''@;'; put 'put ''dTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUy''@;'; put 'put ''ZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVc''@;'; put 'put ''dTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcy''@;'; put 'put ''NTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRlNGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUx''@;'; put 'put ''NDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZcdTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlc''@;'; put 'put ''dTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVc''@;'; put 'put ''dTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZj''@;'; put 'put ''MTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2Fc''@;'; put 'put ''dTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRmMTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRm''@;'; put 'put ''MDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sx''@;'; put 'put ''NjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0''@;'; put 'put ''MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5Nzhc''@;'; put 'put ''dTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGZcdTVmMWJcdTVmZDlc''@;'; put 'put ''dTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZj''@;'; put 'put ''NWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNc''@;'; put 'put ''dTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRm''@;'; put 'put ''NTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZd''@;'; put 'put ''W3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUy''@;'; put 'put ''MjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0Mzlc''@;'; put 'put ''dTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdc''@;'; put 'put ''dTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVj''@;'; put 'put ''NDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFc''@;'; put 'put ''dTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3''@;'; put 'put ''NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3''@;'; put 'put ''NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZj''@;'; put 'put ''N2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRcdTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZc''@;'; put 'put ''dTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgwOTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThlY2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkx''@;'; put 'put ''NDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJcdTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVc''@;'; put 'put ''dTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUz''@;'; put 'put ''NTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNjhdW3BdXT00''@;'; put 'put ''MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0''@;'; put 'put ''NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5Yjlc''@;'; put 'put ''dTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVm''@;'; put 'put ''ODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlc''@;'; put 'put ''dTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYy''@;'; put 'put ''Y2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OV1bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1sxNjldW3BdXT00MzI2NCtwLGJbNDMyNjQrcF09X1sxNjldW3BdKTtmb3IoX1sxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3''@;'; put 'put ''NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVc''@;'; put 'put ''dTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1''@;'; put 'put ''OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJc''@;'; put 'put ''dTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThl''@;'; put 'put ''Y2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3MF1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKERbX1sxNzBdW3BdXT00MzUyMCtwLGJbNDM1MjArcF09X1sxNzBdW3BdKTtmb3IoX1sxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRl''@;'; put 'put ''YWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdcdTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVc''@;'; put 'put ''dTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUzZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0''@;'; put 'put ''YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5''@;'; put 'put ''NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJcdTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJc''@;'; put 'put ''dTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVmOGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYw''@;'; put 'put ''NjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVcdTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3''@;'; put 'put ''MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzFdW3BdXT00Mzc3NitwLGJbNDM3NzYrcF09X1sxNzFdW3BdKTtmb3IoX1sxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYz''@;'; put 'put ''MDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRc''@;'; put 'put ''dTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZk''@;'; put 'put ''MzFcdTZkMWVcdTZkMTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcw''@;'; put 'put ''YWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVc''@;'; put 'put ''dTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5''@;'; put 'put ''YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzJdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzE3Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzJdW3BdXT00NDAzMitwLGJbNDQwMzIrcF09X1sxNzJdW3BdKTtmb3IoX1sxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgw''@;'; put 'put ''MzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFc''@;'; put 'put ''dTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThm''@;'; put 'put ''ZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3''@;'; put 'put ''NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFc''@;'; put 'put ''dTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUy''@;'; put 'put ''NWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzNd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzNdW3BdXT00NDI4OCtwLGJbNDQyODgrcF09X1sxNzNdW3BdKTtmb3IoX1sxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1''@;'; put 'put ''MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFcdTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlc''@;'; put 'put ''dTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVjZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVl''@;'; put 'put ''YWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYw''@;'; put 'put ''OTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBcdTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlc''@;'; put 'put ''dTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4''@;'; put 'put ''M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRcdTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxNzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzRdW3BdXT00NDU0NCtwLGJbNDQ1NDQrcF09X1sxNzRdW3BdKTtmb3IoX1sxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRc''@;'; put 'put ''dTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3''@;'; put 'put ''MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5''@;'; put 'put ''NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlc''@;'; put 'put ''dTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgx''@;'; put 'put ''ZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxNzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzVdW3BdXT00NDgwMCtwLGJbNDQ4MDArcF09X1sxNzVdW3BdKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZc''@;'; put 'put ''dThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkx''@;'; put 'put ''NGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTli''@;'; put 'put ''MjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZc''@;'; put 'put ''dTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1''@;'; put 'put ''MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFc''@;'; put 'put ''dTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzZdW3BdXT00NTA1NitwLGJbNDUwNTYrcF09X1sxNzZdW3BdKTtmb3IoX1sxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJcdTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZc''@;'; put 'put ''dTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVlYjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVm''@;'; put 'put ''OThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYw''@;'; put 'put ''ZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFc''@;'; put 'put ''dTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2''@;'; put 'put ''NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFcdTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFc''@;'; put 'put ''dTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzddW3BdXT00NTMxMitwLGJbNDUzMTIrcF09X1sxNzddW3BdKTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlc''@;'; put 'put ''dTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcy''@;'; put 'put ''ODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1''@;'; put 'put ''NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhc''@;'; put 'put ''dTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdm''@;'; put 'put ''Y2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNc''@;'; put 'put ''dTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzhdW3BdXT00NTU2OCtwLGJbNDU1NjgrcF09X1sxNzhdW3BdKTtmb3IoX1sxNzldPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJc''@;'; put 'put ''dTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThl''@;'; put 'put ''ZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkx''@;'; put 'put ''Y2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2Zc''@;'; put 'put ''dTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1''@;'; put 'put ''OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBc''@;'; put 'put ''dTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxNzldW3BdXT00NTgyNCtwLGJbNDU4MjQrcF09X1sxNzldW3BdKTtmb3Io''@;'; put 'put ''X1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJcdTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBc''@;'; put 'put ''dTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVmYTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYw''@;'; put 'put ''ZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBcdTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYz''@;'; put 'put ''ZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2Nzdc''@;'; put 'put ''dTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZi''@;'; put 'put ''M2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJcdTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZc''@;'; put 'put ''dTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODBdW3BdXT00NjA4MCtwLGJbNDYwODArcF09X1sx''@;'; put 'put ''ODBdW3BdKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVc''@;'; put 'put ''dTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1''@;'; put 'put ''ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdh''@;'; put 'put ''OTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNc''@;'; put 'put ''dTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgz''@;'; put 'put ''ZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdc''@;'; put 'put ''dTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODFdW3BdXT00NjMzNitwLGJb''@;'; put 'put ''NDYzMzYrcF09X1sxODFdW3BdKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNc''@;'; put 'put ''dThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkw''@;'; put 'put ''MzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZc''@;'; put 'put ''dTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUy''@;'; put 'put ''ZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJc''@;'; put 'put ''dTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODJdW3Bd''@;'; put 'put ''XT00NjU5MitwLGJbNDY1OTIrcF09X1sxODJdW3BdKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlc''@;'; put 'put ''dTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYxNGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0''@;'; put 'put ''MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJc''@;'; put 'put ''dTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZlOTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcx''@;'; put 'put ''NWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2VcdTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBc''@;'; put 'put ''dTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3NjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4M11bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KERbX1sxODNdW3BdXT00Njg0OCtwLGJbNDY4NDgrcF09X1sxODNdW3BdKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVc''@;'; put 'put ''dTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdj''@;'; put 'put ''YjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZc''@;'; put 'put ''dTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThh''@;'; put 'put ''NmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJc''@;'; put 'put ''dThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NF1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1sxODRdW3BdXT00NzEwNCtwLGJbNDcxMDQrcF09X1sxODRdW3BdKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRc''@;'; put 'put ''dTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTky''@;'; put 'put ''NDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNc''@;'; put 'put ''dTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFc''@;'; put 'put ''dTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4''@;'; put 'put ''NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThc''@;'; put 'put ''dTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODVdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE4NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODVdW3BdXT00NzM2MCtwLGJbNDczNjArcF09X1sxODVdW3BdKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNc''@;'; put 'put ''dTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5''@;'; put 'put ''YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNcdTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNc''@;'; put 'put ''dTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhcdTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRc''@;'; put 'put ''dTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3''@;'; put 'put ''NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRcdTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlc''@;'; put 'put ''dTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdkYmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODZdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE4Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODZdW3BdXT00NzYxNitwLGJbNDc2MTYrcF09X1sxODZdW3BdKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNzBcdTdmZTBcdTdmZTFc''@;'; put 'put ''dTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0''@;'; put 'put ''YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVc''@;'; put 'put ''dThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVc''@;'; put 'put ''dThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTky''@;'; put 'put ''N2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNc''@;'; put 'put ''dTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''ODddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODddW3BdXT00Nzg3MitwLGJbNDc4NzIrcF09X1sxODddW3BdKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdc''@;'; put 'put ''dTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4''@;'; put 'put ''YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdc''@;'; put 'put ''dTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVc''@;'; put 'put ''dTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2''@;'; put 'put ''YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZc''@;'; put 'put ''dTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxODhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODhdW3BdXT00ODEyOCtwLGJbNDgxMjgrcF09X1sxODhdW3BdKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdh''@;'; put 'put ''M2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFcdTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFc''@;'; put 'put ''dTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVc''@;'; put 'put ''dTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5''@;'; put 'put ''MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBcdThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNc''@;'; put 'put ''dThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThlMjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxODldW3BdXT00ODM4NCtwLGJbNDgzODQrcF09X1sxODldW3BdKTtmb3IoX1sxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTky''@;'; put 'put ''YzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJc''@;'; put 'put ''dTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBc''@;'; put 'put ''dTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTVi''@;'; put 'put ''MzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRc''@;'; put 'put ''dTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZm''@;'; put 'put ''YjFcdTZmYTFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTBdW3BdXT00ODY0MCtwLGJbNDg2NDArcF09X1sxOTBdW3BdKTtmb3IoX1sxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcx''@;'; put 'put ''YzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNc''@;'; put 'put ''dTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBc''@;'; put 'put ''dTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3''@;'; put 'put ''OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNc''@;'; put 'put ''dThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTky''@;'; put 'put ''ZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTFdW3BdXT00ODg5NitwLGJbNDg4OTYrcF09X1sxOTFdW3BdKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3''@;'; put 'put ''OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRcdTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJc''@;'; put 'put ''dTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBc''@;'; put 'put ''dTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYxYzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0''@;'; put 'put ''ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdcdTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJc''@;'; put 'put ''dTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcxZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2''@;'; put 'put ''NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTJdW3BdXT00OTE1MitwLGJbNDkxNTIrcF09X1sxOTJdW3BdKTtmb3IoX1sxOTNdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdj''@;'; put 'put ''ZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFc''@;'; put 'put ''dTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFc''@;'; put 'put ''dTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThi''@;'; put 'put ''MGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJc''@;'; put 'put ''dTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3''@;'; put 'put ''MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTNdW3BdXT00OTQwOCtwLGJbNDk0MDgrcF09X1sxOTNdW3BdKTtm''@;'; put 'put ''b3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2''@;'; put 'put ''OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhc''@;'; put 'put ''dTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRc''@;'; put 'put ''dTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgw''@;'; put 'put ''NzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlc''@;'; put 'put ''dThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1''@;'; put 'put ''ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTRdW3BdXT00OTY2NCtwLGJbNDk2NjQrcF09''@;'; put 'put ''X1sxOTRdW3BdKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlh''@;'; put 'put ''YzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBcdTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZc''@;'; put 'put ''dTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcwMTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdjM2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdm''@;'; put 'put ''YjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVcdTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlc''@;'; put 'put ''dThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkxYjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkz''@;'; put 'put ''ZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTVdW3BdXT00OTkyMCtw''@;'; put 'put ''LGJbNDk5MjArcF09X1sxOTVdW3BdKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlk''@;'; put 'put ''ODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3Mjdc''@;'; put 'put ''dTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThk''@;'; put 'put ''MGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNc''@;'; put 'put ''dTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdl''@;'; put 'put ''OGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sxOTZd''@;'; put 'put ''W3BdXT01MDE3NitwLGJbNTAxNzYrcF09X1sxOTZdW3BdKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0''@;'; put 'put ''MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRc''@;'; put 'put ''dTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4''@;'; put 'put ''NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNc''@;'; put 'put ''dTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTll''@;'; put 'put ''OWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5N11bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKERbX1sxOTddW3BdXT01MDQzMitwLGJbNTA0MzIrcF09X1sxOTddW3BdKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3''@;'; put 'put ''YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZcdTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNc''@;'; put 'put ''dTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OF1bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKERbX1sxOThdW3BdXT01MDY4OCtwLGJbNTA2ODgrcF09X1sxOThdW3BdKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRl''@;'; put 'put ''MGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRc''@;'; put 'put ''dTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYy''@;'; put 'put ''NTBcdTZjMTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRm''@;'; put 'put ''MWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2Jc''@;'; put 'put ''dTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYy''@;'; put 'put ''NWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDFdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzIwMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDFdW3BdXT01MTQ1NitwLGJbNTE0NTYrcF09X1syMDFdW3BdKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcy''@;'; put 'put ''YjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRc''@;'; put 'put ''dTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0''@;'; put 'put ''MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5''@;'; put 'put ''YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJc''@;'; put 'put ''dTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYy''@;'; put 'put ''OGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDJdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzIwMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDJdW3BdXT01MTcxMitwLGJbNTE3MTIrcF09X1syMDJdW3BdKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3''@;'; put 'put ''NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZcdTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVc''@;'; put 'put ''dTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgy''@;'; put 'put ''OTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgyODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2''@;'; put 'put ''MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdcdTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJc''@;'; put 'put ''dTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0''@;'; put 'put ''NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1syMDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDNdW3BdXT01MTk2OCtwLGJbNTE5NjgrcF09X1syMDNdW3BdKTtmb3IoX1syMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3''@;'; put 'put ''NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVc''@;'; put 'put ''dTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVm''@;'; put 'put ''N2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYw''@;'; put 'put ''MGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJc''@;'; put 'put ''dTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3''@;'; put 'put ''ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjJcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1syMDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDRdW3BdXT01MjIyNCtwLGJbNTIyMjQrcF09X1syMDRdW3BdKTtmb3IoX1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFc''@;'; put 'put ''dTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2''@;'; put 'put ''YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgw''@;'; put 'put ''YWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBc''@;'; put 'put ''dTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRm''@;'; put 'put ''YzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2Zc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDVdW3BdXT01MjQ4MCtwLGJbNTI0ODArcF09X1syMDVdW3BdKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNcdTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJc''@;'; put 'put ''dTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5''@;'; put 'put ''ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVj''@;'; put 'put ''YzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJcdTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNc''@;'; put 'put ''dTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYyY2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYz''@;'; put 'put ''MTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJc''@;'; put 'put ''dTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDZdW3BdXT01MjczNitwLGJbNTI3MzYrcF09X1syMDZdW3BdKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBc''@;'; put 'put ''dTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZk''@;'; put 'put ''M2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZk''@;'; put 'put ''MjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFc''@;'; put 'put ''dTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2''@;'; put 'put ''YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2Rc''@;'; put 'put ''dTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDddW3BdXT01Mjk5MitwLGJbNTI5OTIrcF09X1syMDddW3BdKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZc''@;'; put 'put ''dTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgy''@;'; put 'put ''ZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2''@;'; put 'put ''NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNc''@;'; put 'put ''dTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUw''@;'; put 'put ''MGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZc''@;'; put 'put ''dTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDhdW3BdXT01MzI0OCtwLGJbNTMyNDgrcF09X1syMDhdW3BdKTtmb3IoX1syMDld''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBcdTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNc''@;'; put 'put ''dTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVhMGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVj''@;'; put 'put ''ZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdcdTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYw''@;'; put 'put ''ODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBcdTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFc''@;'; put 'put ''dTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4''@;'; put 'put ''NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRcdTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZc''@;'; put 'put ''dTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMDldW3BdXT01MzUwNCtwLGJbNTM1MDQrcF09X1syMDldW3Bd''@;'; put 'put ''KTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZc''@;'; put 'put ''dTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcw''@;'; put 'put ''ZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyNzdcdTcy''@;'; put 'put ''NzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZc''@;'; put 'put ''dTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4''@;'; put 'put ''MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVc''@;'; put 'put ''dTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTBdW3BdXT01Mzc2MCtwLGJbNTM3NjAr''@;'; put 'put ''cF09X1syMTBdW3BdKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhc''@;'; put 'put ''dTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgw''@;'; put 'put ''ZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZc''@;'; put 'put ''dTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4''@;'; put 'put ''N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZc''@;'; put 'put ''dTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTFdW3BdXT01NDAx''@;'; put 'put ''NitwLGJbNTQwMTYrcF09X1syMTFdW3BdKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2Zc''@;'; put 'put ''dTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUw''@;'; put 'put ''NTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBcdTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdcdTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNc''@;'; put 'put ''dTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVh''@;'; put 'put ''NmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVcdTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVc''@;'; put 'put ''dTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1sy''@;'; put 'put ''MTJdW3BdXT01NDI3MitwLGJbNTQyNzIrcF09X1syMTJdW3BdKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlc''@;'; put 'put ''dTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYw''@;'; put 'put ''YzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJc''@;'; put 'put ''dTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4''@;'; put 'put ''OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZc''@;'; put 'put ''dTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxM11bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKERbX1syMTNdW3BdXT01NDUyOCtwLGJbNTQ1MjgrcF09X1syMTNdW3BdKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJc''@;'; put 'put ''dTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTcz''@;'; put 'put ''MTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2Zc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlc''@;'; put 'put ''dTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdi''@;'; put 'put ''MjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2Vc''@;'; put 'put ''dTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNF1b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTRdW3BdXT01NDc4NCtwLGJbNTQ3ODQrcF09X1syMTRdW3BdKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThc''@;'; put 'put ''dTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgz''@;'; put 'put ''OGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2VcdTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZc''@;'; put 'put ''dTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2YzhcdTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVc''@;'; put 'put ''dTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThj''@;'; put 'put ''NWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRcdThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBc''@;'; put 'put ''dTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkxZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTVdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzIxNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTVdW3BdXT01NTA0MCtwLGJbNTUwNDArcF09X1syMTVdW3BdKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVc''@;'; put 'put ''dTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUw''@;'; put 'put ''ODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFc''@;'; put 'put ''dTU1OGVcdTU3MGNcdTU4MjlcdTU4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRc''@;'; put 'put ''dTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVh''@;'; put 'put ''OGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlc''@;'; put 'put ''dTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTZdLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzIxNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTZdW3BdXT01NTI5NitwLGJbNTUyOTYrcF09X1syMTZdW3BdKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFc''@;'; put 'put ''dTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYz''@;'; put 'put ''ZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVc''@;'; put 'put ''dTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNc''@;'; put 'put ''dTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5''@;'; put 'put ''MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBc''@;'; put 'put ''dTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1syMTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTddW3BdXT01NTU1MitwLGJbNTU1NTIrcF09X1syMTddW3BdKTtmb3IoX1syMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZlNzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcw''@;'; put 'put ''ZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZc''@;'; put 'put ''dTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZc''@;'; put 'put ''dTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4''@;'; put 'put ''NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFcdTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBc''@;'; put 'put ''dTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdkNmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1syMThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMThdW3BdXT01NTgwOCtwLGJbNTU4MDgrcF09X1syMThdW3BdKTtmb3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgy''@;'; put 'put ''M2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2Vc''@;'; put 'put ''dTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJc''@;'; put 'put ''dTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4''@;'; put 'put ''YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFc''@;'; put 'put ''dThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThl''@;'; put 'put ''ZmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMTldW3BdXT01NjA2NCtwLGJbNTYwNjQrcF09X1syMTldW3BdKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkw''@;'; put 'put ''ZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNc''@;'; put 'put ''dTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNc''@;'; put 'put ''dTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUx''@;'; put 'put ''ZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJc''@;'; put 'put ''dTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVh''@;'; put 'put ''YzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjBdW3BdXT01NjMyMCtwLGJbNTYzMjArcF09X1syMjBdW3BdKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTViZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVk''@;'; put 'put ''NjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZcdTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlc''@;'; put 'put ''dTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0Mzdc''@;'; put 'put ''dTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2''@;'; put 'put ''OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBc''@;'; put 'put ''dTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZi''@;'; put 'put ''NDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjFdW3BdXT01NjU3NitwLGJbNTY1NzYrcF09X1syMjFdW3BdKTtmb3IoX1syMjJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZl''@;'; put 'put ''YzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNc''@;'; put 'put ''dTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRc''@;'; put 'put ''dTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0''@;'; put 'put ''ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZc''@;'; put 'put ''dTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdh''@;'; put 'put ''MThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjJdW3BdXT01NjgzMitwLGJbNTY4MzIrcF09X1syMjJdW3BdKTtmb3IoX1sy''@;'; put 'put ''MjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdi''@;'; put 'put ''NzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZc''@;'; put 'put ''dTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRc''@;'; put 'put ''dTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0''@;'; put 'put ''MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0Njhc''@;'; put 'put ''dTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4''@;'; put 'put ''ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjNdW3BdXT01NzA4OCtwLGJbNTcwODgrcF09X1syMjNd''@;'; put 'put ''W3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThh''@;'; put 'put ''ODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlcdThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFc''@;'; put 'put ''dThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThmMDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRc''@;'; put 'put ''dTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTky''@;'; put 'put ''NjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZcdTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2Zjhc''@;'; put 'put ''dTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUw''@;'; put 'put ''ZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjRdW3BdXT01NzM0NCtwLGJbNTcz''@;'; put 'put ''NDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2''@;'; put 'put ''MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZc''@;'; put 'put ''dTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVl''@;'; put 'put ''ZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlc''@;'; put 'put ''dTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0''@;'; put 'put ''NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjVdW3BdXT01''@;'; put 'put ''NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5''@;'; put 'put ''YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVc''@;'; put 'put ''dTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZm''@;'; put 'put ''MjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVc''@;'; put 'put ''dTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4''@;'; put 'put ''N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKERb''@;'; put 'put ''X1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdh''@;'; put 'put ''MjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVcdTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJc''@;'; put 'put ''dTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdkYmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgxOGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0''@;'; put 'put ''YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJcdTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBc''@;'; put 'put ''dTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3''@;'; put 'put ''MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNcdTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKERbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5''@;'; put 'put ''ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBc''@;'; put 'put ''dThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTky''@;'; put 'put ''OGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTky''@;'; put 'put ''N2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdc''@;'; put 'put ''dTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUw''@;'; put 'put ''ZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2NDZcdTU2NThcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIy''@;'; put 'put ''OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2''@;'; put 'put ''M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZc''@;'; put 'put ''dTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYx''@;'; put 'put ''YjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0''@;'; put 'put ''OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5Zjhc''@;'; put 'put ''dTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZh''@;'; put 'put ''MGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZm''@;'; put 'put ''NjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNcdTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNc''@;'; put 'put ''dTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcxYTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTcz''@;'; put 'put ''NWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2''@;'; put 'put ''MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhcdTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFc''@;'; put 'put ''dTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdiYWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdk''@;'; put 'put ''ZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJcdTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxOWVcdTgx''@;'; put 'put ''OTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNc''@;'; put 'put ''dTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1''@;'; put 'put ''MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3''@;'; put 'put ''NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZc''@;'; put 'put ''dTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThj''@;'; put 'put ''NGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjdcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzFdW3BdXT01OTEzNitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVc''@;'; put 'put ''dTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTky''@;'; put 'put ''ZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3''@;'; put 'put ''MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2Zc''@;'; put 'put ''dTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTlj''@;'; put 'put ''ZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3BdKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4YzlcdTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZc''@;'; put 'put ''dTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVkYjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVm''@;'; put 'put ''NGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0''@;'; put 'put ''YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRcdTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRc''@;'; put 'put ''dTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZhNjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZi''@;'; put 'put ''YWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVcdTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZc''@;'; put 'put ''dTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgrcF09X1syMzNdW3BdKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZc''@;'; put 'put ''dTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2''@;'; put 'put ''MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4''@;'; put 'put ''ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJc''@;'; put 'put ''dTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdm''@;'; put 'put ''N2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRc''@;'; put 'put ''dTg1NTNcdTg1NjFcdTg1NThcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzRdW3BdXT01OTkwNCtwLGJbNTk5MDQrcF09X1syMzRdW3BdKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRc''@;'; put 'put ''dTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5''@;'; put 'put ''MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThh''@;'; put 'put ''ZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZc''@;'; put 'put ''dThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkz''@;'; put 'put ''MWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlc''@;'; put 'put ''dTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzVdW3BdXT02MDE2MCtwLGJbNjAxNjArcF09X1syMzVdW3BdKTtmb3IoX1syMzZdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZcdTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJc''@;'; put 'put ''dTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlh''@;'; put 'put ''ZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBcdTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlk''@;'; put 'put ''MjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRcdTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNc''@;'; put 'put ''dTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTViMjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVl''@;'; put 'put ''NmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNcdTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlc''@;'; put 'put ''dTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzZdW3BdXT02MDQxNitwLGJbNjA0MTYrcF09X1syMzZdW3BdKTtmb3Io''@;'; put 'put ''X1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRc''@;'; put 'put ''dTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0''@;'; put 'put ''YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJcdTc3YjJcdTc3YjdcdTc3YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YjRcdTc3YjFcdTc3''@;'; put 'put ''YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZc''@;'; put 'put ''dTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdl''@;'; put 'put ''MjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZc''@;'; put 'put ''dTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIrcF09X1sy''@;'; put 'put ''MzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJc''@;'; put 'put ''dTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3''@;'; put 'put ''YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThi''@;'; put 'put ''MThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNc''@;'; put 'put ''dThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkz''@;'; put 'put ''NTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1Yjdc''@;'; put 'put ''dTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzhdW3BdXT02MDkyOCtwLGJb''@;'; put 'put ''NjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJc''@;'; put 'put ''dTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlh''@;'; put 'put ''ZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNcdTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBcdTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThc''@;'; put 'put ''dTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYxZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1''@;'; put 'put ''MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdcdTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVc''@;'; put 'put ''dTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syMzldW3Bd''@;'; put 'put ''XT02MTE4NCtwLGJbNjExODQrcF09X1syMzldW3BdKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNc''@;'; put 'put ''dTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdj''@;'; put 'put ''MmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1Yjdc''@;'; put 'put ''dTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5''@;'; put 'put ''NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2NcdThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVc''@;'; put 'put ''dThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThlNjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MF1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KERbX1syNDBdW3BdXT02MTQ0MCtwLGJbNjE0NDArcF09X1syNDBdW3BdKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhc''@;'; put 'put ''dThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkz''@;'; put 'put ''YjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVc''@;'; put 'put ''dTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlk''@;'; put 'put ''NGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZc''@;'; put 'put ''dTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MV1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1syNDFdW3BdXT02MTY5NitwLGJbNjE2OTYrcF09X1syNDFdW3BdKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNc''@;'; put 'put ''dTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZhZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcw''@;'; put 'put ''MjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRcdTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRc''@;'; put 'put ''dTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhcdTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZc''@;'; put 'put ''dTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1''@;'; put 'put ''ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZcdTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJc''@;'; put 'put ''dTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThiNTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzI0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDJdW3BdXT02MTk1MitwLGJbNjE5NTIrcF09X1syNDJdW3BdKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNc''@;'; put 'put ''dThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThlNmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkz''@;'; put 'put ''ZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVcdTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJc''@;'; put 'put ''dTk3MmNcdTk3MjhcdTk3MjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZc''@;'; put 'put ''dTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlhYzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTli''@;'; put 'put ''ZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhcdTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVc''@;'; put 'put ''dTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlmNDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDNdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzI0M11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDNdW3BdXT02MjIwOCtwLGJbNjIyMDgrcF09X1syNDNdW3BdKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNc''@;'; put 'put ''dTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcw''@;'; put 'put ''MzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVc''@;'; put 'put ''dTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFc''@;'; put 'put ''dTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5''@;'; put 'put ''YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJc''@;'; put 'put ''dTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sy''@;'; put 'put ''NDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDRdW3BdXT02MjQ2NCtwLGJbNjI0NjQrcF09X1syNDRdW3BdKTtmb3IoX1syNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNc''@;'; put 'put ''dTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlh''@;'; put 'put ''MzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJcdTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZc''@;'; put 'put ''dTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBcdTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZc''@;'; put 'put ''dTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlmNWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVk''@;'; put 'put ''Y2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNc''@;'; put 'put ''dTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1syNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDVdW3BdXT02MjcyMCtwLGJbNjI3MjArcF09X1syNDVdW3BdKTtmb3IoX1syNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkx''@;'; put 'put ''NDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBc''@;'; put 'put ''dTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNc''@;'; put 'put ''dTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVcdTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlk''@;'; put 'put ''YjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRlYjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJc''@;'; put 'put ''dTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVcdTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDZdW3BdXT02Mjk3NitwLGJbNjI5NzYrcF09X1syNDZdW3BdKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThi''@;'; put 'put ''ODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFc''@;'; put 'put ''dTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZc''@;'; put 'put ''dTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlk''@;'; put 'put ''ZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJc''@;'; put 'put ''dTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5''@;'; put 'put ''NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0N11bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDddW3BdXT02MzIzMitwLGJbNjMyMzIrcF09X1syNDddW3BdKTtmb3IoX1syNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkxYmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTli''@;'; put 'put ''MjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNcdTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNc''@;'; put 'put ''dTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRc''@;'; put 'put ''dTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThl''@;'; put 'put ''OWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVcdTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNc''@;'; put 'put ''dTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdj''@;'; put 'put ''NjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0OF1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDhdW3BdXT02MzQ4OCtwLGJbNjM0ODgrcF09X1syNDhdW3BdKTtmb3IoX1syNDldPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0''@;'; put 'put ''NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJc''@;'; put 'put ''dThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZcdTlmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2Vc''@;'; put 'put ''dTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlh''@;'; put 'put ''NjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRc''@;'; put 'put ''dTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1''@;'; put 'put ''NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0OV1bcF0uY2hhckNvZGVBdCgwKSYmKERbX1syNDldW3BdXT02Mzc0NCtwLGJbNjM3NDQrcF09X1syNDldW3BdKTtyZXR1cm57ZW5jOkQs''@;'; put 'put ''ZGVjOmJ9fSgpLEpbMTI1MF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygp''@;'; put 'put ''KissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUw''@;'; put 'put ''MTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5''@;'; put 'put ''XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAxNWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThc''@;'; put 'put ''eGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1''@;'; put 'put ''MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChw''@;'; put 'put ''KV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgx''@;'; put 'put ''OVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUy''@;'; put 'put ''MDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1''@;'; put 'put ''MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUw''@;'; put 'put ''NDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJk''@;'; put 'put ''XHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUw''@;'; put 'put ''NDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjUyXT1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFC''@;'; put 'put ''Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFc''@;'; put 'put ''eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4''@;'; put 'put ''ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEQ9W10sXz17fSxwPTA7MjU2''@;'; put 'put ''IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzEyNTNdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJc''@;'; put 'put ''eDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7''@;'; put 'put ''fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1''@;'; put 'put ''ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUw''@;'; put 'put ''MzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1''@;'; put 'put ''MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNj''@;'; put 'put ''M1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1''@;'; put 'put ''cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTI1NF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAh''@;'; put 'put ''XCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYw''@;'; put 'put ''XHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh''@;'; put 'put ''OVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4''@;'; put 'put ''ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4Zjlc''@;'; put 'put ''eGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Yj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1O''@;'; put 'put ''T1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIw''@;'; put 'put ''MTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhi''@;'; put 'put ''NFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMz''@;'; put 'put ''XHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUw''@;'; put 'put ''NWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHAp''@;'; put 'put ''XT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjU2XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5''@;'; put 'put ''XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIw''@;'; put 'put ''MjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhh''@;'; put 'put ''Mlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2''@;'; put 'put ''XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUw''@;'; put 'put ''NjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIixEPVtdLF89e30scD0wOzI1''@;'; put 'put ''NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy''@;'; put 'put ''XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZm''@;'; put 'put ''ZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2''@;'; put 'put ''XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2Jc''@;'; put 'put ''dTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4''@;'; put 'put ''ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4''@;'; put 'put ''MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RV''@;'; put 'put ''VldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAx''@;'; put 'put ''Y1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2''@;'; put 'put ''XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUw''@;'; put 'put ''MWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLEQ9W10sXz17''@;'; put 'put ''fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxKWzFlNF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRc''@;'; put 'put ''blx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJz''@;'; put 'put ''dHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3''@;'; put 'put ''XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUy''@;'; put 'put ''MjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4''@;'; put 'put ''YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNo''@;'; put 'put ''YXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy''@;'; put 'put ''XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIy''@;'; put 'put ''XHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUw''@;'; put 'put ''M2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAz''@;'; put 'put ''YTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUw''@;'; put 'put ''M2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2Ni''@;'; put 'put ''XHUwMzkwXHUwM2IwXHVmZmZkIixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgw''@;'; put 'put ''MVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVW''@;'; put 'put ''V1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIz''@;'; put 'put ''XHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFc''@;'; put 'put ''dTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1''@;'; put 'put ''MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2Fc''@;'; put 'put ''dTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJD''@;'; put 'put ''b2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6RH19KCksSlsxMDAwOF09ZnVuY3Rpb24oKXt2YXIgcCxiPVtdLEQ9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw''@;'; put 'put ''ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9''@;'; put 'put ''flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYx''@;'; put 'put ''XHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMF1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKERbX1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUz''@;'; put 'put ''MDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJl''@;'; put 'put ''XHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUy''@;'; put 'put ''NWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihE''@;'; put 'put ''W19bMTYxXVtwXV09NDEyMTYrcCxiWzQxMjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUy''@;'; put 'put ''NDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgx''@;'; put 'put ''XHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUz''@;'; put 'put ''MjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjJdW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihEW19bMTYyXVtwXV09NDE0NzIrcCxiWzQxNDcyK3BdPV9bMTYyXVtwXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVm''@;'; put 'put ''ZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMw''@;'; put 'put ''XHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVm''@;'; put 'put ''ZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sx''@;'; put 'put ''NjNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTYzXVtwXV09NDE3MjgrcCxiWzQxNzI4K3BdPV9bMTYzXVtwXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUz''@;'; put 'put ''MDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZl''@;'; put 'put ''XHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUz''@;'; put 'put ''MDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY0XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1sxNjRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY0XVtwXV09NDE5ODQrcCxiWzQxOTg0K3BdPV9bMTY0XVtwXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUz''@;'; put 'put ''MGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNj''@;'; put 'put ''XHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUz''@;'; put 'put ''MGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY1''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY1XVtwXV09NDIyNDArcCxiWzQyMjQwK3BdPV9bMTY1XVtwXSk7Zm9yKF9bMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUw''@;'; put 'put ''MzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2Jh''@;'; put 'put ''XHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMTY2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY2XVtwXV09NDI0OTYrcCxiWzQyNDk2K3BdPV9bMTY2XVtwXSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUw''@;'; put 'put ''NDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUw''@;'; put 'put ''NDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMTY3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY3XVtwXV09NDI3NTIrcCxiWzQyNzUyK3BdPV9bMTY3XVtwXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUw''@;'; put 'put ''MTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBh''@;'; put 'put ''XHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUz''@;'; put 'put ''MTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMTY4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY4XVtwXV09NDMwMDgrcCxiWzQzMDA4K3BdPV9bMTY4XVtwXSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUy''@;'; put 'put ''NTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0''@;'; put 'put ''XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUy''@;'; put 'put ''NTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMTY5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTY5XVtwXV09NDMyNjQrcCxiWzQzMjY0K3BdPV9bMTY5XVtwXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3''@;'; put 'put ''N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRj''@;'; put 'put ''XHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2''@;'; put 'put ''MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEy''@;'; put 'put ''XHU1MjY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc2XVtwXV09NDUwNTYrcCxiWzQ1MDU2K3BdPV9bMTc2XVtwXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2''@;'; put 'put ''NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2''@;'; put 'put ''XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3''@;'; put 'put ''ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5''@;'; put 'put ''XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc3XVtwXV09NDUzMTIrcCxiWzQ1MzEyK3BdPV9bMTc3XVtwXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5''@;'; put 'put ''NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFj''@;'; put 'put ''XHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1''@;'; put 'put ''Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYy''@;'; put 'put ''XHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc4XVtwXV09NDU1NjgrcCxiWzQ1NTY4K3BdPV9bMTc4XVtwXSk7Zm9yKF9bMTc5XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1''@;'; put 'put ''MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYx''@;'; put 'put ''XHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4''@;'; put 'put ''MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcx''@;'; put 'put ''XHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTc5XVtwXV09NDU4MjQrcCxiWzQ1ODI0K3BdPV9bMTc5XVtwXSk7Zm9y''@;'; put 'put ''KF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODQwXHU1MGE4XHU3''@;'; put 'put ''N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYz''@;'; put 'put ''XHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4''@;'; put 'put ''ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5''@;'; put 'put ''XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgwXVtwXV09NDYwODArcCxiWzQ2MDgwK3BdPV9b''@;'; put 'put ''MTgwXVtwXSk7Zm9yKF9bMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2''@;'; put 'put ''MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZj''@;'; put 'put ''XHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1''@;'; put 'put ''NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAx''@;'; put 'put ''XHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgxXVtwXV09NDYzMzYrcCxi''@;'; put 'put ''WzQ2MzM2K3BdPV9bMTgxXVtwXSk7Zm9yKF9bMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3''@;'; put 'put ''XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1''@;'; put 'put ''NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2''@;'; put 'put ''XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTgyXVtw''@;'; put 'put ''XV09NDY1OTIrcCxiWzQ2NTkyK3BdPV9bMTgyXVtwXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFm''@;'; put 'put ''XHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1''@;'; put 'put ''NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0''@;'; put 'put ''XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODNdW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihEW19bMTgzXVtwXV09NDY4NDgrcCxiWzQ2ODQ4K3BdPV9bMTgzXVtwXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4''@;'; put 'put ''XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2''@;'; put 'put ''NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5''@;'; put 'put ''XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODRdW3BdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihEW19bMTg0XVtwXV09NDcxMDQrcCxiWzQ3MTA0K3BdPV9bMTg0XVtwXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZl''@;'; put 'put ''XHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1''@;'; put 'put ''MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZh''@;'; put 'put ''XHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg1XS5sZW5ndGg7KytwKTY1NTMzIT09''@;'; put 'put ''X1sxODVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg1XVtwXV09NDczNjArcCxiWzQ3MzYwK3BdPV9bMTg1XVtwXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYw''@;'; put 'put ''XHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0''@;'; put 'put ''ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJh''@;'; put 'put ''XHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg2XS5sZW5ndGg7''@;'; put 'put ''KytwKTY1NTMzIT09X1sxODZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg2XVtwXV09NDc2MTYrcCxiWzQ3NjE2K3BdPV9bMTg2XVtwXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRk''@;'; put 'put ''XHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2''@;'; put 'put ''MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0''@;'; put 'put ''XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b''@;'; put 'put ''MTg3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg3XVtwXV09NDc4NzIrcCxiWzQ3ODcyK3BdPV9bMTg3XVtwXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRk''@;'; put 'put ''XHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5''@;'; put 'put ''NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRl''@;'; put 'put ''XHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IikscD0wO3AhPV9bMTg4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg4XVtwXV09NDgxMjgrcCxiWzQ4MTI4K3BdPV9bMTg4XVtwXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2''@;'; put 'put ''XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5''@;'; put 'put ''OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQw''@;'; put 'put ''XHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTg5XVtwXV09NDgzODQrcCxiWzQ4Mzg0K3BdPV9bMTg5XVtwXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNh''@;'; put 'put ''XHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5''@;'; put 'put ''MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFl''@;'; put 'put ''XHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1''@;'; put 'put ''NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkwXVtwXV09NDg2NDArcCxiWzQ4NjQwK3BdPV9bMTkwXVtwXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYx''@;'; put 'put ''XHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3''@;'; put 'put ''OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlm''@;'; put 'put ''XHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4''@;'; put 'put ''NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkxXVtwXV09NDg4OTYrcCxiWzQ4ODk2K3BdPV9bMTkxXVtwXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2''@;'; put 'put ''XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3''@;'; put 'put ''ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1Nzky''@;'; put 'put ''XHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3''@;'; put 'put ''ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkyXVtwXV09NDkxNTIrcCxiWzQ5MTUyK3BdPV9bMTkyXVtwXSk7Zm9yKF9bMTkzXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1''@;'; put 'put ''XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2''@;'; put 'put ''NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2Rl''@;'; put 'put ''XHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2''@;'; put 'put ''ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTkzXVtwXV09NDk0MDgrcCxiWzQ5NDA4K3BdPV9bMTkzXVtwXSk7''@;'; put 'put ''Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0''@;'; put 'put ''XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2''@;'; put 'put ''MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2''@;'; put 'put ''XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4''@;'; put 'put ''ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk0XVtwXV09NDk2NjQrcCxiWzQ5NjY0K3Bd''@;'; put 'put ''PV9bMTk0XVtwXSk7Zm9yKF9bMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3''@;'; put 'put ''NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3Yzcz''@;'; put 'put ''XHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3''@;'; put 'put ''NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk1XVtwXV09NDk5MjAr''@;'; put 'put ''cCxiWzQ5OTIwK3BdPV9bMTk1XVtwXSk7Zm9yKF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2''@;'; put 'put ''NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdj''@;'; put 'put ''XHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5''@;'; put 'put ''ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk2''@;'; put 'put ''XVtwXV09NTAxNzYrcCxiWzUwMTc2K3BdPV9bMTk2XVtwXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5''@;'; put 'put ''ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTll''@;'; put 'put ''XHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2''@;'; put 'put ''OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTddW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihEW19bMTk3XVtwXV09NTA0MzIrcCxiWzUwNDMyK3BdPV9bMTk3XVtwXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4''@;'; put 'put ''ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIy''@;'; put 'put ''XHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3''@;'; put 'put ''OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOThdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihEW19bMTk4XVtwXV09NTA2ODgrcCxiWzUwNjg4K3BdPV9bMTk4XVtwXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4''@;'; put 'put ''YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThk''@;'; put 'put ''XHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4''@;'; put 'put ''YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk5XS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1sxOTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMTk5XVtwXV09NTA5NDQrcCxiWzUwOTQ0K3BdPV9bMTk5XVtwXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3''@;'; put 'put ''MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3''@;'; put 'put ''XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0''@;'; put 'put ''ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAwXS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1syMDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAwXVtwXV09NTEyMDArcCxiWzUxMjAwK3BdPV9bMjAwXVtwXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3''@;'; put 'put ''ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0''@;'; put 'put ''XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3''@;'; put 'put ''OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMjAxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAxXVtwXV09NTE0NTYrcCxiWzUxNDU2K3BdPV9bMjAxXVtwXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1''@;'; put 'put ''MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZj''@;'; put 'put ''XHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1''@;'; put 'put ''M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMjAyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAyXVtwXV09NTE3MTIrcCxiWzUxNzEyK3BdPV9bMjAyXVtwXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3''@;'; put 'put ''MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcy''@;'; put 'put ''XHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3''@;'; put 'put ''Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjAzXVtwXV09NTE5NjgrcCxiWzUxOTY4K3BdPV9bMjAzXVtwXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5''@;'; put 'put ''MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTli''@;'; put 'put ''XHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2''@;'; put 'put ''M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1''@;'; put 'put ''XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA0XVtwXV09NTIyMjQrcCxiWzUyMjI0K3BdPV9bMjA0XVtwXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5''@;'; put 'put ''MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0''@;'; put 'put ''XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3''@;'; put 'put ''NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZh''@;'; put 'put ''XHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA1XVtwXV09NTI0ODArcCxiWzUyNDgwK3BdPV9bMjA1XVtwXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2''@;'; put 'put ''ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFm''@;'; put 'put ''XHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1''@;'; put 'put ''YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUy''@;'; put 'put ''XHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA2XVtwXV09NTI3MzYrcCxiWzUyNzM2K3BdPV9bMjA2XVtwXSk7Zm9yKF9bMjA3''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTAwXHU2MDZmXHU1ZTBjXHU2''@;'; put 'put ''MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2Ux''@;'; put 'put ''XHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3''@;'; put 'put ''ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0''@;'; put 'put ''XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA3XVtwXV09NTI5OTIrcCxiWzUyOTkyK3BdPV9bMjA3XVtw''@;'; put 'put ''XSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1''@;'; put 'put ''YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFh''@;'; put 'put ''XHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1''@;'; put 'put ''MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0''@;'; put 'put ''XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA4XVtwXV09NTMyNDgrcCxiWzUzMjQ4''@;'; put 'put ''K3BdPV9bMjA4XVtwXSk7Zm9yKF9bMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2''@;'; put 'put ''XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3''@;'; put 'put ''MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3Zjhh''@;'; put 'put ''XHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjA5XVtwXV09NTM1''@;'; put 'put ''MDQrcCxiWzUzNTA0K3BdPV9bMjA5XVtwXSk7Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFj''@;'; put 'put ''XHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4''@;'; put 'put ''MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1''@;'; put 'put ''XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19b''@;'; put 'put ''MjEwXVtwXV09NTM3NjArcCxiWzUzNzYwK3BdPV9bMjEwXVtwXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMz''@;'; put 'put ''XHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0''@;'; put 'put ''ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3''@;'; put 'put ''XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjExXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTFdW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihEW19bMjExXVtwXV09NTQwMTYrcCxiWzU0MDE2K3BdPV9bMjExXVtwXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4''@;'; put 'put ''XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1''@;'; put 'put ''MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIw''@;'; put 'put ''XHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTJd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEyXVtwXV09NTQyNzIrcCxiWzU0MjcyK3BdPV9bMjEyXVtwXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4''@;'; put 'put ''XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5''@;'; put 'put ''NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFl''@;'; put 'put ''XHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEzXS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1syMTNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjEzXVtwXV09NTQ1MjgrcCxiWzU0NTI4K3BdPV9bMjEzXVtwXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0''@;'; put 'put ''XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2''@;'; put 'put ''ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0''@;'; put 'put ''XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE0XS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1syMTRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE0XVtwXV09NTQ3ODQrcCxiWzU0Nzg0K3BdPV9bMjE0XVtwXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0''@;'; put 'put ''XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1''@;'; put 'put ''OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2''@;'; put 'put ''XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMjE1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE1XVtwXV09NTUwNDArcCxiWzU1MDQwK3BdPV9bMjE1XVtwXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4''@;'; put 'put ''XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1''@;'; put 'put ''M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1Mjgx''@;'; put 'put ''XHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMjE2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE2XVtwXV09NTUyOTYrcCxiWzU1Mjk2K3BdPV9bMjE2XVtwXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0Zjdl''@;'; put 'put ''XHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1''@;'; put 'put ''MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZl''@;'; put 'put ''XHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1''@;'; put 'put ''MWJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE3XVtwXV09NTU1NTIrcCxiWzU1NTUyK3BdPV9bMjE3XVtwXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0''@;'; put 'put ''XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4''@;'; put 'put ''YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5''@;'; put 'put ''XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5''@;'; put 'put ''MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMThdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE4XVtwXV09NTU4MDgrcCxiWzU1ODA4K3BdPV9bMjE4XVtwXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0''@;'; put 'put ''XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1''@;'; put 'put ''MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVj''@;'; put 'put ''XHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1''@;'; put 'put ''N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjE5XVtwXV09NTYwNjQrcCxiWzU2MDY0K3BdPV9bMjE5XVtwXSk7Zm9yKF9bMjIwXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAw''@;'; put 'put ''XHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4''@;'; put 'put ''MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4''@;'; put 'put ''XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4''@;'; put 'put ''MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIwXVtwXV09NTYzMjArcCxiWzU2MzIwK3BdPV9bMjIwXVtwXSk7Zm9yKF9b''@;'; put 'put ''MjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5''@;'; put 'put ''XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4''@;'; put 'put ''M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDcz''@;'; put 'put ''XHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4''@;'; put 'put ''NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIxXVtwXV09NTY1NzYrcCxiWzU2NTc2K3BdPV9bMjIx''@;'; put 'put ''XVtwXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTU2''@;'; put 'put ''XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4''@;'; put 'put ''NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIy''@;'; put 'put ''XHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2''@;'; put 'put ''NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIyXVtwXV09NTY4MzIrcCxiWzU2''@;'; put 'put ''ODMyK3BdPV9bMjIyXVtwXSk7Zm9yKF9bMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1''@;'; put 'put ''NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3''@;'; put 'put ''XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1''@;'; put 'put ''NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjIzXVtwXV09''@;'; put 'put ''NTcwODgrcCxiWzU3MDg4K3BdPV9bMjIzXVtwXSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1''@;'; put 'put ''NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIz''@;'; put 'put ''XHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1''@;'; put 'put ''NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJDb2RlQXQoMCkmJihE''@;'; put 'put ''W19bMjI0XVtwXV09NTczNDQrcCxiWzU3MzQ0K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1''@;'; put 'put ''Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRi''@;'; put 'put ''XHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3''@;'; put 'put ''MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjVdW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihEW19bMjI1XVtwXV09NTc2MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3''@;'; put 'put ''MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkx''@;'; put 'put ''XHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1''@;'; put 'put ''ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sy''@;'; put 'put ''MjZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2''@;'; put 'put ''MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0''@;'; put 'put ''XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2''@;'; put 'put ''Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1syMjddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9bMjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2''@;'; put 'put ''ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFl''@;'; put 'put ''XHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2''@;'; put 'put ''ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI4''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjhdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI4XVtwXV09NTgzNjgrcCxiWzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3''@;'; put 'put ''MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4''@;'; put 'put ''XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1''@;'; put 'put ''ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMjI5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjI5XVtwXV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1''@;'; put 'put ''OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQy''@;'; put 'put ''XHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5''@;'; put 'put ''YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMjMwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3''@;'; put 'put ''ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5''@;'; put 'put ''XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3''@;'; put 'put ''M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJl''@;'; put 'put ''XHU3NDJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3''@;'; put 'put ''NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4''@;'; put 'put ''XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2''@;'; put 'put ''ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZj''@;'; put 'put ''XHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2''@;'; put 'put ''OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMx''@;'; put 'put ''XHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2''@;'; put 'put ''YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4Zjdl''@;'; put 'put ''XHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9yKF9bMjM0XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4''@;'; put 'put ''ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAw''@;'; put 'put ''XHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4''@;'; put 'put ''ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0''@;'; put 'put ''XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9bMjM0XVtwXSk7Zm9y''@;'; put 'put ''KF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4''@;'; put 'put ''MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2''@;'; put 'put ''XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4''@;'; put 'put ''MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4''@;'; put 'put ''XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM1XVtwXV09NjAxNjArcCxiWzYwMTYwK3BdPV9b''@;'; put 'put ''MjM1XVtwXSk7Zm9yKF9bMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4''@;'; put 'put ''MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQy''@;'; put 'put ''XHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3''@;'; put 'put ''MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3''@;'; put 'put ''XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM2XVtwXV09NjA0MTYrcCxi''@;'; put 'put ''WzYwNDE2K3BdPV9bMjM2XVtwXSk7Zm9yKF9bMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3''@;'; put 'put ''XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3''@;'; put 'put ''ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4''@;'; put 'put ''XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjM3XVtw''@;'; put 'put ''XV09NjA2NzIrcCxiWzYwNjcyK3BdPV9bMjM3XVtwXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYx''@;'; put 'put ''XHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5''@;'; put 'put ''NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQy''@;'; put 'put ''XHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihEW19bMjM4XVtwXV09NjA5MjgrcCxiWzYwOTI4K3BdPV9bMjM4XVtwXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEy''@;'; put 'put ''XHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5''@;'; put 'put ''NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZm''@;'; put 'put ''XHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzldW3BdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihEW19bMjM5XVtwXV09NjExODQrcCxiWzYxMTg0K3BdPV9bMjM5XVtwXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJi''@;'; put 'put ''XHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5''@;'; put 'put ''ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUz''@;'; put 'put ''XHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQwXS5sZW5ndGg7KytwKTY1NTMzIT09''@;'; put 'put ''X1syNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQwXVtwXV09NjE0NDArcCxiWzYxNDQwK3BdPV9bMjQwXVtwXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZi''@;'; put 'put ''XHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4''@;'; put 'put ''OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2''@;'; put 'put ''XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQxXS5sZW5ndGg7''@;'; put 'put ''KytwKTY1NTMzIT09X1syNDFdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQxXVtwXV09NjE2OTYrcCxiWzYxNjk2K3BdPV9bMjQxXVtwXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZj''@;'; put 'put ''XHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4''@;'; put 'put ''NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMx''@;'; put 'put ''XHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b''@;'; put 'put ''MjQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDJdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQyXVtwXV09NjE5NTIrcCxiWzYxOTUyK3BdPV9bMjQyXVtwXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2Jk''@;'; put 'put ''XHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3''@;'; put 'put ''YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2''@;'; put 'put ''XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IikscD0wO3AhPV9bMjQzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQzXVtwXV09NjIyMDgrcCxiWzYyMjA4K3BdPV9bMjQzXVtwXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0''@;'; put 'put ''XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3''@;'; put 'put ''ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1''@;'; put 'put ''XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ0XVtwXV09NjI0NjQrcCxiWzYyNDY0K3BdPV9bMjQ0XVtwXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5''@;'; put 'put ''XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4''@;'; put 'put ''ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNk''@;'; put 'put ''XHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4''@;'; put 'put ''OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ1XVtwXV09NjI3MjArcCxiWzYyNzIwK3BdPV9bMjQ1XVtwXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYz''@;'; put 'put ''XHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3''@;'; put 'put ''N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5Yzll''@;'; put 'put ''XHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5''@;'; put 'put ''Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ2XVtwXV09NjI5NzYrcCxiWzYyOTc2K3BdPV9bMjQ2XVtwXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2Qz''@;'; put 'put ''XHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5''@;'; put 'put ''YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBm''@;'; put 'put ''XHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5''@;'; put 'put ''ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDddW3BdLmNoYXJDb2RlQXQoMCkmJihEW19bMjQ3XVtwXV09NjMyMzIrcCxiWzYzMjMyK3BdPV9bMjQ3XVtwXSk7cmV0dXJue2VuYzpE''@;'; put 'put ''LGRlYzpifX0oKSxKWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn''@;'; put 'put ''KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdc''@;'; put 'put ''eGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIz''@;'; put 'put ''XHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0''@;'; put 'put ''OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1''@;'; put 'put ''MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09''@;'; put 'put ''Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTAwNzldPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDEx''@;'; put 'put ''XHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1''@;'; put 'put ''XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUy''@;'; put 'put ''MTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMw''@;'; put 'put ''XHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2Nc''@;'; put 'put ''eGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyIsRD1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksRFtw''@;'; put 'put ''XT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkR9fSgpLEpbMTAwODFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx''@;'; put 'put ''Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhl''@;'; put 'put ''M1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1''@;'; put 'put ''MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAx''@;'; put 'put ''Y1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRi''@;'; put 'put ''XHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixEPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxEW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6''@;'; put 'put ''XyxkZWM6RH19KCksSlsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkx''@;'; put 'put ''XHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFc''@;'; put 'put ''eGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4''@;'; put 'put ''ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEQ9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9b''@;'; put 'put ''Yi5jaGFyQXQocCldPXApLERbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpEfX0oKSxjZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJihjZS5leHBvcnRzPUopLGZ1bmN0aW9uKGIsRCl7InVzZSBzdHJpY3QiO2lmKHR5cGVvZiBKPiJ1Iil7dmFy''@;'; put 'put ''IF89SjtjZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/Y2UuZXhwb3J0cz1EKF8pOmIuY3B0YWJsZT1EKF8pfWVsc2UgSj1EKEopfSh0aGlzLGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJl''@;'; put 'put ''MzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0sXz1bODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxwPVs5MzIsOTM2LDk0OSw5NTBdLE49WzY1MDAxXSx3PXt9''@;'; put 'put ''LEY9e30sSD17fSxSPXt9LGo9ZnVuY3Rpb24oVSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoVSl9LFA9ZnVuY3Rpb24oVSl7cmV0dXJuIFUuY2hhckNvZGVBdCgwKX0sTD10eXBlb2YgQnVmZmVyPCJ1IixZPWZ1bmN0aW9uKCl7fTtpZihMKXt2YXIgQj0hQnVmZmVyLmZyb207aWYoIUIp''@;'; put 'put ''dHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7Qj0hMH1ZPUI/ZnVuY3Rpb24oVixVKXtyZXR1cm4gVT9uZXcgQnVmZmVyKFYsVSk6bmV3IEJ1ZmZlcihWKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1m''@;'; put 'put ''dW5jdGlvbihWKXtyZXR1cm4gbmV3IEJ1ZmZlcihWKX0pO3ZhciBXPTEwMjQsWj1CdWZmZXIuYWxsb2NVbnNhZmUoVyksUT1mdW5jdGlvbihVKXt2YXIgRT1mdW5jdGlvbihVKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZlKDY1NTM2KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2''@;'; put 'put ''YXIgQT1PYmplY3Qua2V5cyhVKSxhZT1BLmxlbmd0aCxuZT0wLGxlPUFbbmVdO25lPGFlOysrbmUpKGxlPUFbbmVdKSYmKEVbbGUuY2hhckNvZGVBdCgwKV09VVtsZV0pO3JldHVybiBFfShiW1VdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKEEsYWUpe3ZhciBsZSxuZT1BLmxlbmd0aCx3ZT0wLFVl''@;'; put 'put ''PTAsUWU9MCxvdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3IobGU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSx3ZT0wO3dlPG5lOysrd2UpbGVbd2VdPUVbQS5jaGFyQ29kZUF0KHdlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoQSkpe2ZvcihsZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipu''@;'; put 'put ''ZSksVWU9MCx3ZT0wO3dlPG5lOysrd2UpKFFlPUFbd2VdKTwxMjg/bGVbVWUrK109RVtRZV06UWU8MjI0PyhsZVtVZSsrXT1FWygoMzEmUWUpPDw2KSsoNjMmQVt3ZSsxXSldLCsrd2UpOlFlPDI0MD8obGVbVWUrK109RVsoKDE1JlFlKTw8MTIpKygoNjMmQVt3ZSsxXSk8PDYpKyg2MyZBW3dl''@;'; put 'put ''KzJdKV0sd2UrPTIpOihvdD0oKDcmUWUpPDwxOCkrKCg2MyZBW3dlKzFdKTw8MTIpKygoNjMmQVt3ZSsyXSk8PDYpKyg2MyZBW3dlKzNdKSx3ZSs9MyxvdDw2NTUzNj9sZVtVZSsrXT1FW290XToobGVbVWUrK109RVs1NTI5NisoKG90LT02NTUzNik+PjEwJjEwMjMpXSxsZVtVZSsrXT1FWzU2''@;'; put 'put ''MzIwKygxMDIzJm90KV0pKTtsZT1sZS5zbGljZSgwLFVlKX1lbHNlIGZvcihsZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLHdlPTA7d2U8bmU7Kyt3ZSlsZVt3ZV09RVtBW3dlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYWUmJiJidWYiIT09YWU/ImFyciIhPT1hZT9sZS50b1N0cmluZygiYmlu''@;'; put 'put ''YXJ5Iik6W10uc2xpY2UuY2FsbChsZSk6bGV9fSxYPWZ1bmN0aW9uKFUpe3ZhciBFPWJbVV0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLGFlPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYoYWU9RVtBXSl7dmFyIG5lPWFlLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1''@;'; put 'put ''NSZuZSxtWzIqQSsxXT1uZT4+OH1yZXR1cm4gZnVuY3Rpb24od2Upe3ZhciBVZT13ZS5sZW5ndGgsUWU9MCxvdD0wO2lmKDIqVWU+VyYmKFc9MipVZSxaPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSksQnVmZmVyLmlzQnVmZmVyKHdlKSlmb3IoUWU9MDtRZTxVZTtRZSsrKVpbMipRZV09bVtvdD0y''@;'; put 'put ''KndlW1FlXV0sWlsyKlFlKzFdPW1bb3QrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHdlKWZvcihRZT0wO1FlPFVlO1FlKyspb3Q9Mip3ZS5jaGFyQ29kZUF0KFFlKSxaWzIqUWVdPW1bb3RdLFpbMipRZSsxXT1tW290KzFdO2Vsc2UgZm9yKFFlPTA7UWU8VWU7UWUrKylaWzIqUWVdPW1b''@;'; put 'put ''b3Q9Mip3ZVtRZV1dLFpbMipRZSsxXT1tW290KzFdO3JldHVybiBaLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LHRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgRT1iW1VdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2''@;'; put 'put ''YXIgYWU9T2JqZWN0LmtleXMoRSksbmU9MCxsZT1hZVtuZV07bmU8YWUubGVuZ3RoOysrbmUpaWYobGU9YWVbbmVdKXt2YXIgd2U9bGUuY2hhckNvZGVBdCgwKTttWzIqd2VdPTI1NSZFW2xlXSxtWzIqd2UrMV09RVtsZV0+Pjh9cmV0dXJuIGZ1bmN0aW9uKFFlLG90KXt2YXIgTWU9UWUubGVu''@;'; put 'put ''Z3RoLHZlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKk1lKSxYZT0wLEJlPTAsQWU9MCxGZT0wLFJlPTA7aWYoInN0cmluZyI9PXR5cGVvZiBRZSl7Zm9yKFhlPUZlPTA7WGU8TWU7KytYZSlCZT0yKlFlLmNoYXJDb2RlQXQoWGUpLHZlW0ZlKytdPW1bQmUrMV18fG1bQmVdLG1bQmUrMV0+MCYmKHZl''@;'; put 'put ''W0ZlKytdPW1bQmVdKTt2ZT12ZS5zbGljZSgwLEZlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihRZSkpe2ZvcihYZT1GZT0wO1hlPE1lOysrWGUpKFJlPVFlW1hlXSk8MTI4P0JlPVJlOlJlPDIyND8oQmU9KCgzMSZSZSk8PDYpKyg2MyZRZVtYZSsxXSksKytYZSk6UmU8MjQwPyhCZT0oKDE1''@;'; put 'put ''JlJlKTw8MTIpKygoNjMmUWVbWGUrMV0pPDw2KSsoNjMmUWVbWGUrMl0pLFhlKz0yKTooQmU9KCg3JlJlKTw8MTgpKygoNjMmUWVbWGUrMV0pPDwxMikrKCg2MyZRZVtYZSsyXSk8PDYpKyg2MyZRZVtYZSszXSksWGUrPTMpLEJlPDY1NTM2Pyh2ZVtGZSsrXT1tWzErKEJlKj0yKV18fG1bQmVd''@;'; put 'put ''LG1bQmUrMV0+MCYmKHZlW0ZlKytdPW1bQmVdKSk6KHZlW0ZlKytdPW1bMSsoQmU9MiooNTUyOTYrKChBZT1CZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW0JlXSxtW0JlKzFdPjAmJih2ZVtGZSsrXT1tW0JlXSksdmVbRmUrK109bVsxKyhCZT0yKig1NjMyMCsoMTAyMyZBZSkpKV18fG1bQmVd''@;'; put 'put ''LG1bQmUrMV0+MCYmKHZlW0ZlKytdPW1bQmVdKSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBmb3IoWGU9RmU9MDtYZTxNZTtYZSsrKUJlPTIqUWVbWGVdLmNoYXJDb2RlQXQoMCksdmVbRmUrK109bVtCZSsxXXx8bVtCZV0sbVtCZSsxXT4wJiYodmVbRmUrK109bVtCZV0pO3JldHVybiBvdCYm''@;'; put 'put ''ImJ1ZiIhPT1vdD8iYXJyIiE9PW90P3ZlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHZlKTp2ZX19LHJlPWZ1bmN0aW9uKFUpe3ZhciBhZSxFPWJbVV0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLG5lPTAsbGU9MCx3ZT0wO2Zvcih3ZT0wO3dlPDY1NTM2''@;'; put 'put ''Oysrd2UpbVsyKndlXT0yNTUsbVsyKndlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShhZT1FW0FdKSYmKG5lPWFlLmNoYXJDb2RlQXQoMCksbVtsZT0yKkFdPTI1NSZuZSxtW2xlKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rpb24oUWUpe3ZhciBvdD1RZS5sZW5ndGgsTWU9QnVmZmVy''@;'; put 'put ''LmFsbG9jVW5zYWZlKDIqb3QpLHZlPTAsWGU9MCxCZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihRZSkpZm9yKHZlPTA7dmU8b3Q7dmUrKykyNTU9PT1tW1hlPTIqUWVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChRZVt2ZV08PDgpK1FlW3ZlKzFdKSwrK3ZlKSxNZVtCZSsrXT1tW1hlXSxN''@;'; put 'put ''ZVtCZSsrXT1tW1hlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBRZSlmb3IodmU9MDt2ZTxvdDt2ZSsrKVhlPTIqUWUuY2hhckNvZGVBdCh2ZSksMjU1PT09bVtYZV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoUWUuY2hhckNvZGVBdCh2ZSk8PDgpK1FlLmNoYXJDb2RlQXQodmUrMSkp''@;'; put 'put ''LCsrdmUpLE1lW0JlKytdPW1bWGVdLE1lW0JlKytdPW1bWGUrMV07ZWxzZSBmb3IodmU9MDt2ZTxvdDt2ZSsrKTI1NT09PW1bWGU9MipRZVt2ZV1dJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKFFlW3ZlXTw8OCkrUWVbdmUrMV0pLCsrdmUpLE1lW0JlKytdPW1bWGVdLE1lW0JlKytdPW1bWGUr''@;'; put 'put ''MV07cmV0dXJuIE1lLnNsaWNlKDAsQmUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBWKFUpe2lmKCJzdHJpbmciPT10eXBlb2YgVSlyZXR1cm4gVihVLnNwbGl0KCIiKS5tYXAoUCkpO3ZhciBFPVUubGVuZ3RoLG09MCxBPTA7NCpFPlcmJihXPTQqRSxaPUJ1ZmZlci5h''@;'; put 'put ''bGxvY1Vuc2FmZShXKSk7dmFyIGFlPTA7RT49MyYmMjM5PT1VWzBdJiYxODc9PVVbMV0mJjE5MT09VVsyXSYmKGFlPTMpO2Zvcih2YXIgbmU9MSxsZT0wLHdlPTA7YWU8RTthZSs9bmUpbmU9MSwod2U9VVthZV0pPDEyOD9tPXdlOndlPDIyND8obT02NCooMzEmd2UpKyg2MyZVW2FlKzFdKSxu''@;'; put 'put ''ZT0yKTp3ZTwyNDA/KG09KCgxNSZ3ZSk8PDEyKSs2NCooNjMmVVthZSsxXSkrKDYzJlVbYWUrMl0pLG5lPTMpOihtPTI2MjE0NCooNyZ3ZSkrKCg2MyZVW2FlKzFdKTw8MTIpKzY0Kig2MyZVW2FlKzJdKSsoNjMmVVthZSszXSksbmU9NCksbTw2NTUzNj8oWltsZSsrXT0yNTUmbSxaW2xlKytd''@;'; put 'put ''PW0+PjgpOihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFpbbGUrK109MjU1JkEsWltsZSsrXT1BPj4+OCxaW2xlKytdPTI1NSZtLFpbbGUrK109bT4+PjgmMjU1KTtyZXR1cm4gWi5zbGljZSgwLGxlKS50b1N0cmluZygidWNzMiIpfSxGWzY1MDAxXT1m''@;'; put 'put ''dW5jdGlvbihVLEUpe2lmKEwmJkJ1ZmZlci5pc0J1ZmZlcihVKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9VLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFUpOlU7dmFyIG09VS5sZW5ndGgsQT0wLGFlPTAsbmU9MCxsZT0ic3RyaW5nIj09dHlwZW9mIFU7NCptPlcm''@;'; put 'put ''JihXPTQqbSxaPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7Zm9yKHZhciB3ZT0wO3dlPG07Kyt3ZSkoQT1sZT9VLmNoYXJDb2RlQXQod2UpOlVbd2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/WltuZSsrXT1BOkE8PTIwNDc/KFpbbmUrK109MTkyKyhBPj42KSxaW25lKytdPTEyOCsoNjMmQSkpOkE+''@;'; put 'put ''PTU1Mjk2JiZBPD01NzM0Mz8oQS09NTUyOTYsKyt3ZSxhZT0obGU/VS5jaGFyQ29kZUF0KHdlKTpVW3dlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFpbbmUrK109MjQwKyhhZT4+PjE4JjcpLFpbbmUrK109MTQ0KyhhZT4+PjEyJjYzKSxaW25lKytdPTEyOCsoYWU+Pj42JjYzKSxa''@;'; put 'put ''W25lKytdPTEyOCsoNjMmYWUpKTooWltuZSsrXT0yMjQrKEE+PjEyKSxaW25lKytdPTEyOCsoQT4+NiY2MyksWltuZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9aLnNsaWNlKDAsbmUpLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFosMCxu''@;'; put 'put ''ZSk6Wi5zbGljZSgwLG5lKX19dmFyIG9lPWZ1bmN0aW9uKCl7aWYoTCl7aWYoSFtfWzBdXSlyZXR1cm47dmFyIFU9MCxFPTA7Zm9yKFU9MDtVPF8ubGVuZ3RoOysrVSliW0U9X1tVXV0mJihIW0VdPVgoRSksUltFXT1RKEUpKTtmb3IoVT0wO1U8cC5sZW5ndGg7KytVKWJbRT1wW1VdXSYmKEhb''@;'; put 'put ''RV09cmUoRSksUltFXT10ZShFKSk7Zm9yKFU9MDtVPE4ubGVuZ3RoOysrVSl3W0U9TltVXV0mJihIW0VdPXdbRV0pLEZbRV0mJihSW0VdPUZbRV0pfX0sZ2U9ZnVuY3Rpb24oVixVKXtyZXR1cm4iIn0sX2U9ZnVuY3Rpb24oVSl7ZGVsZXRlIEhbVV0sZGVsZXRlIFJbVV19LFNlPXtlbmNhY2hl''@;'; put 'put ''Om9lLGRlY2FjaGU6ZnVuY3Rpb24oKXtpZihMKXtpZighSFtfWzBdXSlyZXR1cm47Xy5mb3JFYWNoKF9lKSxwLmZvckVhY2goX2UpLE4uZm9yRWFjaChfZSl9Zz1nZSx5PTB9LHNiY3M6XyxkYmNzOnB9O29lKCk7dmFyIHplPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWpr''@;'; put 'put ''bG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixnPWdlLHk9MDtyZXR1cm4gYi51dGlscz17ZGVjb2RlOmZ1bmN0aW9uIFYoVSxFKXt2YXIgbTtpZihtPUhbVV0pcmV0dXJuIG0oRSk7aWYoInN0cmluZyI9PXR5cGVvZiBFKXJldHVybiBWKFUsRS5zcGxpdCgiIikubWFwKFApKTt2YXIgdmUs''@;'; put 'put ''QT1FLmxlbmd0aCxhZT1uZXcgQXJyYXkoQSksbmU9IiIsbGU9MCx3ZT0wLFVlPTEsUWU9MCxvdD0wLE1lPWJbVV0sWGU9IiI7aWYoTWUmJih2ZT1NZS5kZWMpKWZvcih3ZT0wO3dlPEE7d2UrPVVlKXtpZihVZT0yLChuZT12ZVsoRVt3ZV08PDgpK0Vbd2UrMV1dKXx8KFVlPTEsbmU9dmVbRVt3''@;'; put 'put ''ZV1dKSwhbmUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgY29kZTogIitFW3dlXSsiICIrRVt3ZStVZS0xXSsiICIrd2UrIiAiK1VlKyIgIit2ZVtFW3dlXV0pO2FlW1FlKytdPW5lfWVsc2V7aWYoIShYZT1EW1VdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitV''@;'; put 'put ''KTtzd2l0Y2goWGUpe2Nhc2UidXRmOCI6Zm9yKEE+PTMmJjIzOT09RVswXSYmMTg3PT1FWzFdJiYxOTE9PUVbMl0mJih3ZT0zKTt3ZTxBO3dlKz1VZSlVZT0xLEVbd2VdPDEyOD9sZT1FW3dlXTpFW3dlXTwyMjQ/KGxlPTY0KigzMSZFW3dlXSkrKDYzJkVbd2UrMV0pLFVlPTIpOkVbd2VdPDI0''@;'; put 'put ''MD8obGU9KCgxNSZFW3dlXSk8PDEyKSs2NCooNjMmRVt3ZSsxXSkrKDYzJkVbd2UrMl0pLFVlPTMpOihsZT0yNjIxNDQqKDcmRVt3ZV0pKygoNjMmRVt3ZSsxXSk8PDEyKSs2NCooNjMmRVt3ZSsyXSkrKDYzJkVbd2UrM10pLFVlPTQpLGxlPDY1NTM2fHwob3Q9NTUyOTYrKChsZS09NjU1MzYp''@;'; put 'put ''Pj4xMCYxMDIzKSxsZT01NjMyMCsoMTAyMyZsZSksYWVbUWUrK109U3RyaW5nLmZyb21DaGFyQ29kZShvdCkpLGFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobGUpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEwmJkJ1ZmZlci5pc0J1ZmZlcihFKSlyZXR1cm4gRS50b1N0cmluZyhYZSk7Zm9y''@;'; put 'put ''KHdlPTA7d2U8QTt3ZSsrKWFlW3dlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2VdKTtRZT1BO2JyZWFrO2Nhc2UidXRmMTZsZSI6aWYoQT49MiYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJih3ZT0yKSxMJiZCdWZmZXIuaXNCdWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoWGUpO2ZvcihVZT0y''@;'; put 'put ''O3dlKzE8QTt3ZSs9VWUpYWVbUWUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoRVt3ZSsxXTw8OCkrRVt3ZV0pO2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKEE+PTImJjI1ND09RVswXSYmMjU1PT1FWzFdJiYod2U9MiksVWU9Mjt3ZSsxPEE7d2UrPVVlKWFlW1FlKytdPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoKEVbd2VdPDw4KStFW3dlKzFdKTticmVhaztjYXNlInV0ZjMybGUiOmZvcihBPj00JiYyNTU9PUVbMF0mJjI1ND09RVsxXSYmMD09PUVbMl0mJjA9PT1FWzNdJiYod2U9NCksVWU9NDt3ZTxBO3dlKz1VZSkobGU9KEVbd2UrM108PDI0KSsoRVt3ZSsyXTw8MTYpKyhFW3dlKzFdPDw4''@;'; put 'put ''KStFW3dlXSk+NjU1MzU/KGxlLT02NTUzNixhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhsZT4+MTAmMTAyMykpLGFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmbGUpKSk6YWVbUWUrK109U3RyaW5nLmZyb21DaGFyQ29kZShsZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJ1dGYzMmJlIjpmb3IoQT49NCYmMjU1PT1FWzNdJiYyNTQ9PUVbMl0mJjA9PT1FWzFdJiYwPT09RVswXSYmKHdlPTQpLFVlPTQ7d2U8QTt3ZSs9VWUpKGxlPShFW3dlXTw8MjQpKyhFW3dlKzFdPDwxNikrKEVbd2UrMl08PDgpK0Vbd2UrM10pPjY1NTM1PyhsZS09NjU1MzYsYWVbUWUrK109''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisobGU+PjEwJjEwMjMpKSxhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmxlKSkpOmFlW1FlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUobGUpO2JyZWFrO2Nhc2UidXRmNyI6Zm9yKEE+PTQmJjQzPT1FWzBdJiY0Nz09RVsx''@;'; put 'put ''XSYmMTE4PT1FWzJdJiYoQT49NSYmNTY9PUVbM10mJjQ1PT1FWzRdP3dlPTU6KDU2PT1FWzNdfHw1Nz09RVszXXx8NDM9PUVbM118fDQ3PT1FWzNdKSYmKHdlPTQpKTt3ZTxBO3dlKz1VZSlpZig0Mz09PUVbd2VdKWlmKFVlPTEsNDUhPT1FW3dlKzFdKXtmb3IoO1N0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoRVt3ZStVZV0pLm1hdGNoKC9bQS1aYS16MC05K1wvXS8pOylVZSsrO3ZhciBCZT0wOzQ1PT09RVt3ZStVZV0mJigrK1VlLEJlPTEpO2Zvcih2YXIgQWU9W10sRmU9IiIsRGU9MCxrZT0wLF90PTAsbnQ9MCxKZT0xO0plPFVlLUJlJiYoRGU9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKEVbd2UrSmUrK10pKSxrZT16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStKZSsrXSkpLEFlLnB1c2goRGU8PDJ8a2U+PjQpLC0xIT09KF90PXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK0plKytdKSkpJiYoQWUucHVzaCgoMTUma2UpPDw0fF90Pj4y''@;'; put 'put ''KSwtMSE9PShudD16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStKZSsrXSkpKSkpOyludDw2NCYmQWUucHVzaCgoMyZfdCk8PDZ8bnQpO2ZvcihGZT1WKDEyMDEsQWUpLEplPTA7SmU8RmUubGVuZ3RoOysrSmUpYWVbUWUrK109RmUuY2hhckF0KEplKX1lbHNlIFVlPTIsYWVb''@;'; put 'put ''UWUrK109IisiO2Vsc2UgVWU9MSxhZVtRZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2VdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIrVSsiICIrRFtVXSl9fXJldHVybiBhZS5zbGljZSgwLFFlKS5qb2luKCIiKX0sZW5jb2RlOmZ1bmN0''@;'; put 'put ''aW9uIFYoVSxFLG0pe2lmKFU9PT15JiZnKXJldHVybiBnKEUsbSk7aWYoUltVXSlyZXR1cm4oZz1SW3k9VV0pKEUsbSk7TCYmQnVmZmVyLmlzQnVmZmVyKEUpJiYoRT1FLnRvU3RyaW5nKCJ1dGY4IikpO3ZhciBvdCxBPUUubGVuZ3RoLGFlPUw/QnVmZmVyLmFsbG9jVW5zYWZlKDQqQSk6W10s''@;'; put 'put ''bmU9MCxsZT0wLHdlPTAsVWU9MCxRZT1iW1VdLE1lPSIiLHZlPSJzdHJpbmciPT10eXBlb2YgRTtpZihRZSYmKG90PVFlLmVuYykpZm9yKGxlPTA7bGU8QTsrK2xlLCsrd2UpKG5lPW90W3ZlP0UuY2hhckF0KGxlKTpFW2xlXV0pPjI1NT8oYWVbd2VdPW5lPj44LGFlWysrd2VdPTI1NSZuZSk6''@;'; put 'put ''YWVbd2VdPTI1NSZuZTtlbHNle2lmKCEoTWU9RFtVXSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrVSk7c3dpdGNoKE1lKXtjYXNlInV0ZjgiOmlmKEwmJnZlKXt3ZT0oYWU9WShFLE1lKSkubGVuZ3RoO2JyZWFrfWZvcihsZT0wO2xlPEE7KytsZSwrK3dlKShuZT12ZT9F''@;'; put 'put ''LmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJDb2RlQXQoMCkpPD0xMjc/YWVbd2VdPW5lOm5lPD0yMDQ3PyhhZVt3ZV09MTkyKyhuZT4+NiksYWVbKyt3ZV09MTI4Kyg2MyZuZSkpOm5lPj01NTI5NiYmbmU8PTU3MzQzPyhuZS09NTUyOTYsVWU9KHZlP0UuY2hhckNvZGVBdCgrK2xlKTpFWysr''@;'; put 'put ''bGVdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyhuZTw8MTApLGFlW3dlXT0yNDArKFVlPj4+MTgmNyksYWVbKyt3ZV09MTQ0KyhVZT4+PjEyJjYzKSxhZVsrK3dlXT0xMjgrKFVlPj4+NiY2MyksYWVbKyt3ZV09MTI4Kyg2MyZVZSkpOihhZVt3ZV09MjI0KyhuZT4+MTIpLGFlWysrd2VdPTEyOCso''@;'; put 'put ''bmU+PjYmNjMpLGFlWysrd2VdPTEyOCsoNjMmbmUpKTticmVhaztjYXNlImFzY2lpIjppZihMJiYic3RyaW5nIj09dHlwZW9mIEUpe3dlPShhZT1ZKEUsTWUpKS5sZW5ndGg7YnJlYWt9Zm9yKGxlPTA7bGU8QTsrK2xlLCsrd2Upe2lmKCEoKG5lPXZlP0UuY2hhckNvZGVBdChsZSk6RVtsZV0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkgIituZSk7YWVbd2VdPW5lfWJyZWFrO2Nhc2UidXRmMTZsZSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0oYWU9WShFLE1lKSkubGVuZ3RoO2JyZWFrfWZvcihsZT0wO2xlPEE7KytsZSluZT12ZT9F''@;'; put 'put ''LmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJDb2RlQXQoMCksYWVbd2UrK109MjU1Jm5lLGFlW3dlKytdPW5lPj44O2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKGxlPTA7bGU8QTsrK2xlKW5lPXZlP0UuY2hhckNvZGVBdChsZSk6RVtsZV0uY2hhckNvZGVBdCgwKSxhZVt3ZSsrXT1uZT4+OCxh''@;'; put 'put ''ZVt3ZSsrXT0yNTUmbmU7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IobGU9MDtsZTxBOysrbGUpKG5lPXZlP0UuY2hhckNvZGVBdChsZSk6RVtsZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoRVsrK2xlXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''LTU2MzIwKSksYWVbd2UrK109MjU1Jm5lLGFlW3dlKytdPTI1NSYobmU+Pj04KSxhZVt3ZSsrXT0yNTUmKG5lPj49OCksYWVbd2UrK109MjU1JihuZT4+PTgpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKGxlPTA7bGU8QTsrK2xlKShuZT12ZT9FLmNoYXJDb2RlQXQobGUpOkVbbGVdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKEVbKytsZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW3dlKzNdPTI1NSZuZSxhZVt3ZSsyXT0yNTUmKG5lPj49OCksYWVbd2UrMV09MjU1JihuZT4+PTgpLGFlW3dlXT0yNTUmKG5lPj49OCks''@;'; put 'put ''d2UrPTQ7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IobGU9MDtsZTxBO2xlKyspe3ZhciBYZT12ZT9FLmNoYXJBdChsZSk6RVtsZV0uY2hhckF0KDApO2lmKCIrIiE9PVhlKWlmKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwt''@;'; put 'put ''Li86PyIuaW5kZXhPZihYZSk+LTEpYWVbd2UrK109WGUuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBCZT1WKDEyMDEsWGUpO2FlW3dlKytdPTQzLGFlW3dlKytdPXplLmNoYXJDb2RlQXQoQmVbMF0+PjIpLGFlW3dlKytdPXplLmNoYXJDb2RlQXQoKCgzJkJlWzBdKTw8NCkrKChCZVsxXXx8MCk+''@;'; put 'put ''PjQpKSxhZVt3ZSsrXT16ZS5jaGFyQ29kZUF0KCgoMTUmQmVbMV0pPDwyKSsoKEJlWzJdfHwwKT4+NikpLGFlW3dlKytdPTQ1fWVsc2UgYWVbd2UrK109NDMsYWVbd2UrK109NDV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK1UrIiAiK0RbVV0p''@;'; put 'put ''fX1yZXR1cm4gYWU9YWUuc2xpY2UoMCx3ZSksTD9tJiYiYnVmIiE9PW0/ImFyciIhPT1tP2FlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGFlKTphZToic3RyIj09bT9hZS5tYXAoaikuam9pbigiIik6YWV9LGhhc2NwOmZ1bmN0aW9uKFUpe3JldHVybiEoIWJbVV0mJiFEW1Vd''@;'; put 'put ''KX0sbWFnaWM6RCxjYWNoZTpTZX0sYn0pfSwzMTc5OihjZSxKKT0+e3ZhciBiLEQsXzshZnVuY3Rpb24ocCl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKWNlLmV4cG9ydHM9cCgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1wKCks''@;'; put 'put ''RD1bXSx2b2lkIDAhPT0oXz0iZnVuY3Rpb24iPT10eXBlb2YoYj1wKT9iLmFwcGx5KEosRCk6YikmJihjZS5leHBvcnRzPV8pO2Vsc2V7dmFyIE47dHlwZW9mIGdsb2JhbFRoaXM8InUiP049Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9OPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9O''@;'; put 'put ''PWdsb2JhbDp0eXBlb2YgJDwidSImJiQuZ2xvYmFsP049JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYoTj1zZWxmKSxOLkpTWmlwU3luYz1wKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBGKEgsUixqKXtmdW5jdGlvbiBQKEIsVyl7aWYoIVJbQl0pe2lmKCFIW0JdKXtpZihMKXJl''@;'; put 'put ''dHVybiBMKEIsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0IrIiciKX12YXIgcT1SW0JdPXtleHBvcnRzOnt9fTtIW0JdWzBdLmNhbGwocS5leHBvcnRzLGZ1bmN0aW9uKFEpe3JldHVybiBQKEhbQl1bMV1bUV18fFEpfSxxLHEuZXhwb3J0cyxGLEgsUixqKX1y''@;'; put 'put ''ZXR1cm4gUltCXS5leHBvcnRzfWZvcih2YXIgTD12b2lkIDAsWT0wO1k8ai5sZW5ndGg7WSsrKVAoaltZXSk7cmV0dXJuIFB9KHsxOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''MDEyMzQ1Njc4OSsvPSI7Ui5lbmNvZGU9ZnVuY3Rpb24oUCxMKXtmb3IodmFyIEIsVyxaLHEsUSxYLHRlLFk9IiIscmU9MDtyZTxQLmxlbmd0aDspcT0oQj1QLmNoYXJDb2RlQXQocmUrKykpPj4yLFE9KDMmQik8PDR8KFc9UC5jaGFyQ29kZUF0KHJlKyspKT4+NCxYPSgxNSZXKTw8MnwoWj1Q''@;'; put 'put ''LmNoYXJDb2RlQXQocmUrKykpPj42LHRlPTYzJlosaXNOYU4oVyk/WD10ZT02NDppc05hTihaKSYmKHRlPTY0KSxZPVkrai5jaGFyQXQocSkrai5jaGFyQXQoUSkrai5jaGFyQXQoWCkrai5jaGFyQXQodGUpO3JldHVybiBZfSxSLmRlY29kZT1mdW5jdGlvbihQLEwpe3ZhciBXLFoscSxRLFgs''@;'; put 'put ''dGUsWT0iIixyZT0wO2ZvcihQPVAucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO3JlPFAubGVuZ3RoOylxPWouaW5kZXhPZihQLmNoYXJBdChyZSsrKSksVz0oMTUmKFE9ai5pbmRleE9mKFAuY2hhckF0KHJlKyspKSkpPDw0fChYPWouaW5kZXhPZihQLmNoYXJBdChyZSsrKSkp''@;'; put 'put ''Pj4yLFo9KDMmWCk8PDZ8KHRlPWouaW5kZXhPZihQLmNoYXJBdChyZSsrKSkpLFkrPVN0cmluZy5mcm9tQ2hhckNvZGUocTw8MnxRPj40KSw2NCE9WCYmKFkrPVN0cmluZy5mcm9tQ2hhckNvZGUoVykpLDY0IT10ZSYmKFkrPVN0cmluZy5mcm9tQ2hhckNvZGUoWikpO3JldHVybiBZfX0se31d''@;'; put 'put ''LDI6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaigpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH1qLnBy''@;'; put 'put ''b3RvdHlwZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sSC5leHBvcnRzPWp9LHt9XSwzOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO1IuU1RPUkU9e21hZ2ljOiJcMFwwIixjb21w''@;'; put 'put ''cmVzczpmdW5jdGlvbihqKXtyZXR1cm4gan0sdW5jb21wcmVzczpmdW5jdGlvbihqKXtyZXR1cm4gan0sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LFIuREVGTEFURT1GKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKEYsSCxS''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi91dGlscyIpLFA9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5''@;'; put 'put ''OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYs''@;'; put 'put ''MzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5''@;'; put 'put ''ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMw''@;'; put 'put ''OTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwy''@;'; put 'put ''NTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQw''@;'; put 'put ''NDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0''@;'; put 'put ''NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUs''@;'; put 'put ''MTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0Mzgw''@;'; put 'put ''MzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1''@;'; put 'put ''LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEw''@;'; put 'put ''Njg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgw''@;'; put 'put ''Nzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1''@;'; put 'put ''LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2''@;'; put 'put ''NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5''@;'; put 'put ''MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIs''@;'; put 'put ''NjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtILmV4cG9ydHM9ZnVuY3Rpb24oWSxCKXtp''@;'; put 'put ''Zih0eXBlb2YgWT4idSJ8fCFZLmxlbmd0aClyZXR1cm4gMDt2YXIgVz0ic3RyaW5nIiE9PWouZ2V0VHlwZU9mKFkpO3R5cGVvZiBCPiJ1IiYmKEI9MCk7dmFyIFE9MDtCPX5CO2Zvcih2YXIgWD0wLHRlPVkubGVuZ3RoO1g8dGU7WCsrKVE9Vz9ZW1hdOlkuY2hhckNvZGVBdChYKSxCPUI+Pj44''@;'; put 'put ''XlBbMjU1JihCXlEpXTtyZXR1cm5+Qn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vdXRpbHMiKTtmdW5jdGlvbiBQKEwpe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfVAucHJvdG90eXBlPXtjaGVj''@;'; put 'put ''a09mZnNldDpmdW5jdGlvbihMKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtMKX0sY2hlY2tJbmRleDpmdW5jdGlvbihMKXtpZih0aGlzLmxlbmd0aDxMfHxMPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwg''@;'; put 'put ''YXNrZWQgaW5kZXggPSAiK0wrIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihMKXt0aGlzLmNoZWNrSW5kZXgoTCksdGhpcy5pbmRleD1MfSxza2lwOmZ1bmN0aW9uKEwpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtMKX0sYnl0ZUF0OmZ1bmN0aW9uKEwpe30scmVh''@;'; put 'put ''ZEludDpmdW5jdGlvbihMKXt2YXIgQixZPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoTCksQj10aGlzLmluZGV4K0wtMTtCPj10aGlzLmluZGV4O0ItLSlZPShZPDw4KSt0aGlzLmJ5dGVBdChCKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxZfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKEwpe3JldHVybiBq''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoTCkpfSxyZWFkRGF0YTpmdW5jdGlvbihMKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKEwpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgTD10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKEw+''@;'; put 'put ''PjI1JjEyNyksKEw+PjIxJjE1KS0xLEw+PjE2JjMxLEw+PjExJjMxLEw+PjUmNjMsKDMxJkwpPDwxKX19LEguZXhwb3J0cz1QfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtSLmJhc2U2ND0hMSxSLmJpbmFyeT0hMSxSLmRpcj0hMSxSLmNyZWF0ZUZv''@;'; put 'put ''bGRlcnM9ITEsUi5kYXRlPW51bGwsUi5jb21wcmVzc2lvbj1udWxsLFIuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3V0aWxzIik7Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKFApe3JldHVybiBqLnN0cmluZzJiaW5hcnkoUCl9''@;'; put 'put ''LFIuc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oUCl7cmV0dXJuIGoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLFApfSxSLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKFApe3JldHVybiBqLnRyYW5zZm9ybVRvKCJzdHJpbmciLFApfSxSLnN0cmluZzJCbG9iPWZ1bmN0aW9uKFApe3Zh''@;'; put 'put ''ciBMPWoudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixQKTtyZXR1cm4gai5hcnJheUJ1ZmZlcjJCbG9iKEwpfSxSLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oUCl7cmV0dXJuIGouYXJyYXlCdWZmZXIyQmxvYihQKX0sUi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihQLEwpe3JldHVybiBqLnRy''@;'; put 'put ''YW5zZm9ybVRvKFAsTCl9LFIuZ2V0VHlwZU9mPWZ1bmN0aW9uKFApe3JldHVybiBqLmdldFR5cGVPZihQKX0sUi5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oUCl7cmV0dXJuIGouY2hlY2tTdXBwb3J0KFApfSxSLk1BWF9WQUxVRV8xNkJJVFM9ai5NQVhfVkFMVUVfMTZCSVRTLFIuTUFYX1ZBTFVF''@;'; put 'put ''XzMyQklUUz1qLk1BWF9WQUxVRV8zMkJJVFMsUi5wcmV0dHk9ZnVuY3Rpb24oUCl7cmV0dXJuIGoucHJldHR5KFApfSxSLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihQKXtyZXR1cm4gai5maW5kQ29tcHJlc3Npb24oUCl9LFIuaXNSZWdFeHA9ZnVuY3Rpb24oUCl7cmV0dXJuIGouaXNSZWdF''@;'; put 'put ''eHAoUCl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsUD1GKCJwYWtvIik7Ui51bmNvbXByZXNzSW5wdXRUeXBl''@;'; put 'put ''PWo/InVpbnQ4YXJyYXkiOiJhcnJheSIsUi5jb21wcmVzc0lucHV0VHlwZT1qPyJ1aW50OGFycmF5IjoiYXJyYXkiLFIubWFnaWM9IlxiXDAiLFIuY29tcHJlc3M9ZnVuY3Rpb24oTCl7cmV0dXJuIFAuZGVmbGF0ZVJhdyhMKX0sUi51bmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBQLmlu''@;'; put 'put ''ZmxhdGVSYXcoTCl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9iYXNlNjQiKTtmdW5jdGlvbiBQKEwsWSl7aWYoISh0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBQKEwsWSk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVs''@;'; put 'put ''bCx0aGlzLnJvb3Q9IiIsTCYmdGhpcy5sb2FkKEwsWSksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBCPW5ldyBQO2Zvcih2YXIgVyBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ddJiYoQltXXT10aGlzW1ddKTtyZXR1cm4gQn19KFAucHJvdG90eXBlPUYoIi4vb2JqZWN0Iikp''@;'; put 'put ''LmxvYWQ9RigiLi9sb2FkIiksUC5zdXBwb3J0PUYoIi4vc3VwcG9ydCIpLFAuZGVmYXVsdHM9RigiLi9kZWZhdWx0cyIpLFAudXRpbHM9RigiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxQLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKEwpe3JldHVybiBqLmVuY29kZShMKX0sZGVjb2RlOmZ1''@;'; put 'put ''bmN0aW9uKEwpe3JldHVybiBqLmRlY29kZShMKX19LFAuY29tcHJlc3Npb25zPUYoIi4vY29tcHJlc3Npb25zIiksSC5leHBvcnRzPVB9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjox''@;'; put 'put ''MCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9iYXNlNjQiKSxQPUYoIi4vemlwRW50cmllcyIpO0guZXhwb3J0cz1mdW5jdGlvbihMLFkpe3ZhciBCLFcsWixxO2ZvcigoWT1ZfHx7fSkuYmFzZTY0JiYo''@;'; put 'put ''TD1qLmRlY29kZShMKSksQj0oVz1uZXcgUChMLFkpKS5maWxlcyxaPTA7WjxCLmxlbmd0aDtaKyspdGhpcy5maWxlKChxPUJbWl0pLmZpbGVOYW1lLHEuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6cS5kYXRlLGRpcjpxLmRpcixjb21tZW50''@;'; put 'put ''OnEuZmlsZUNvbW1lbnQubGVuZ3RoP3EuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOlkuY3JlYXRlRm9sZGVyc30pO3JldHVybiBXLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVcuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6''@;'; put 'put ''MjJ9XSwxMTpbZnVuY3Rpb24oRixILFIpeyhmdW5jdGlvbihqKXsidXNlIHN0cmljdCI7dmFyIFA9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBqPCJ1Iil7dmFyIEw9IWouZnJvbTtpZighTCl0cnl7ai5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7TD0hMH1QPUw/ZnVuY3Rpb24oWSxCKXtyZXR1''@;'; put 'put ''cm4gQj9uZXcgaihZLEIpOm5ldyBqKFkpfTpqLmZyb20uYmluZChqKSxqLmFsbG9jfHwoai5hbGxvYz1mdW5jdGlvbihZKXtyZXR1cm4gbmV3IGooWSl9KX1ILmV4cG9ydHM9ZnVuY3Rpb24oWSxCKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFk/ai5hbGxvYyhZKTpQKFksQil9LEguZXhwb3J0''@;'; put 'put ''cy50ZXN0PWZ1bmN0aW9uKFkpe3JldHVybiBqLmlzQnVmZmVyKFkpfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIFAo''@;'; put 'put ''TCl7dGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KFAucHJvdG90eXBlPW5ldyBqKS5yZWFkRGF0YT1mdW5jdGlvbihMKXt0aGlzLmNoZWNrT2Zmc2V0KEwpO3ZhciBZPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW5kZXgrPUwsWX0sSC5leHBvcnRzPVB9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vc3VwcG9ydCIpLFA9RigiLi91dGlscyIpLEw9RigiLi9jcmMzMiIpLFk9RigiLi9zaWduYXR1cmUi''@;'; put 'put ''KSxCPUYoIi4vZGVmYXVsdHMiKSxXPUYoIi4vYmFzZTY0IiksWj1GKCIuL2NvbXByZXNzaW9ucyIpLHE9RigiLi9jb21wcmVzc2VkT2JqZWN0IiksUT1GKCIuL25vZGVCdWZmZXIiKSxYPUYoIi4vdXRmOCIpLHRlPUYoIi4vc3RyaW5nV3JpdGVyIikscmU9RigiLi91aW50OEFycmF5V3JpdGVy''@;'; put 'put ''Iiksb2U9ZnVuY3Rpb24oVSl7aWYoVS5fZGF0YSBpbnN0YW5jZW9mIHEmJihVLl9kYXRhPVUuX2RhdGEuZ2V0Q29udGVudCgpLFUub3B0aW9ucy5iaW5hcnk9ITAsVS5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1QLmdldFR5cGVPZihVLl9kYXRhKSkpe3ZhciBFPVUuX2RhdGE7''@;'; put 'put ''VS5fZGF0YT1uZXcgVWludDhBcnJheShFLmxlbmd0aCksMCE9PUUubGVuZ3RoJiZVLl9kYXRhLnNldChFLDApfXJldHVybiBVLl9kYXRhfSxnZT1mdW5jdGlvbihVKXt2YXIgRT1vZShVKTtyZXR1cm4ic3RyaW5nIj09PVAuZ2V0VHlwZU9mKEUpPyFVLm9wdGlvbnMuYmluYXJ5JiZqLm5vZGVi''@;'; put 'put ''dWZmZXI/UShFLCJ1dGYtOCIpOlUuYXNCaW5hcnkoKTpFfSxfZT1mdW5jdGlvbihVKXt2YXIgRT1vZSh0aGlzKTtyZXR1cm4gbnVsbD09PUV8fHR5cGVvZiBFPiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJhc2U2NCYmKEU9Vy5kZWNvZGUoRSkpLEU9VSYmdGhpcy5vcHRpb25zLmJpbmFyeT9WLnV0''@;'; put 'put ''ZjhkZWNvZGUoRSk6UC50cmFuc2Zvcm1Ubygic3RyaW5nIixFKSwhVSYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJihFPVAudHJhbnNmb3JtVG8oInN0cmluZyIsVi51dGY4ZW5jb2RlKEUpKSksRSl9LFRlPWZ1bmN0aW9uKFUsRSxtKXt0aGlzLm5hbWU9VSx0aGlzLmRpcj1tLmRpcix0aGlzLmRh''@;'; put 'put ''dGU9bS5kYXRlLHRoaXMuY29tbWVudD1tLmNvbW1lbnQsdGhpcy5fZGF0YT1FLHRoaXMub3B0aW9ucz1tLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOm0uZGlyLGRhdGU6bS5kYXRlfX07VGUucHJvdG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCEwKX0s''@;'; put 'put ''YXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIFU9Z2UodGhpcyk7cmV0dXJuIFAudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLFUpfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgVT1nZSh0aGlzKTtyZXR1''@;'; put 'put ''cm4gUC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsVSl9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgU2U9ZnVuY3Rpb24oVSxFKXt2YXIgQSxtPSIiO2ZvcihBPTA7QTxFO0ErKyltKz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KDI1NSZVKSxVPj4+PTg7cmV0dXJuIG19LHplPWZ1bmN0aW9uKCl7dmFyIEUsbSxVPXt9O2ZvcihFPTA7RTxhcmd1bWVudHMubGVuZ3RoO0UrKylmb3IobSBpbiBhcmd1bWVudHNbRV0pYXJndW1lbnRzW0VdLmhhc093blByb3BlcnR5KG0pJiZ0eXBlb2YgVVttXT4idSImJihVW21dPWFyZ3Vt''@;'; put 'put ''ZW50c1tFXVttXSk7cmV0dXJuIFV9LGc9ZnVuY3Rpb24oVSxFLG0pe3ZhciBhZSxBPVAuZ2V0VHlwZU9mKEUpO2lmKG09ZnVuY3Rpb24oVSl7cmV0dXJuITA9PT0oVT1VfHx7fSkuYmFzZTY0JiZudWxsPT1VLmJpbmFyeSYmKFUuYmluYXJ5PSEwKSwoVT16ZShVLEIpKS5kYXRlPVUuZGF0ZXx8''@;'; put 'put ''bmV3IERhdGUsbnVsbCE9PVUuY29tcHJlc3Npb24mJihVLmNvbXByZXNzaW9uPVUuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksVX0obSksbS5jcmVhdGVGb2xkZXJzJiYoYWU9eShVKSkmJnguY2FsbCh0aGlzLGFlLCEwKSxtLmRpcnx8bnVsbD09PUV8fHR5cGVvZiBFPiJ1IiltLmJhc2U2''@;'; put 'put ''ND0hMSxtLmJpbmFyeT0hMSxFPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PUEpbS5iaW5hcnkmJiFtLmJhc2U2NCYmITAhPT1tLm9wdGltaXplZEJpbmFyeVN0cmluZyYmKEU9UC5zdHJpbmcyYmluYXJ5KEUpKTtlbHNle2lmKG0uYmFzZTY0PSExLG0uYmluYXJ5PSEwLCEoQXx8RSBpbnN0YW5j''@;'; put 'put ''ZW9mIHEpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIrVSsiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1BJiYoRT1QLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixFKSl9dmFyIG5lPW5ldyBUZShVLEUsbSk7cmV0dXJuIHRoaXMuZmls''@;'; put 'put ''ZXNbVV09bmUsbmV9LHk9ZnVuY3Rpb24oVSl7Ii8iPT1VLnNsaWNlKC0xKSYmKFU9VS5zdWJzdHJpbmcoMCxVLmxlbmd0aC0xKSk7dmFyIEU9VS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBFPjA/VS5zdWJzdHJpbmcoMCxFKToiIn0seD1mdW5jdGlvbihVLEUpe3JldHVybiIvIiE9VS5zbGlj''@;'; put 'put ''ZSgtMSkmJihVKz0iLyIpLEU9dHlwZW9mIEU8InUiJiZFLHRoaXMuZmlsZXNbVV18fGcuY2FsbCh0aGlzLFUsbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6RX0pLHRoaXMuZmlsZXNbVV19LEM9ZnVuY3Rpb24oVSxFKXt2YXIgQSxtPW5ldyBxO3JldHVybiBVLl9kYXRhIGluc3RhbmNlb2Yg''@;'; put 'put ''cT8obS51bmNvbXByZXNzZWRTaXplPVUuX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxtLmNyYzMyPVUuX2RhdGEuY3JjMzIsMD09PW0udW5jb21wcmVzc2VkU2l6ZXx8VS5kaXI/KEU9Wi5TVE9SRSxtLmNvbXByZXNzZWRDb250ZW50PSIiLG0uY3JjMzI9MCk6VS5fZGF0YS5jb21wcmVzc2lvbk1l''@;'; put 'put ''dGhvZD09PUUubWFnaWM/bS5jb21wcmVzc2VkQ29udGVudD1VLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KEE9VS5fZGF0YS5nZXRDb250ZW50KCksbS5jb21wcmVzc2VkQ29udGVudD1FLmNvbXByZXNzKFAudHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpKTooKCEo''@;'; put 'put ''QT1nZShVKSl8fDA9PT1BLmxlbmd0aHx8VS5kaXIpJiYoRT1aLlNUT1JFLEE9IiIpLG0udW5jb21wcmVzc2VkU2l6ZT1BLmxlbmd0aCxtLmNyYzMyPUwoQSksbS5jb21wcmVzc2VkQ29udGVudD1FLmNvbXByZXNzKFAudHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpLG0uY29t''@;'; put 'put ''cHJlc3NlZFNpemU9bS5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgsbS5jb21wcmVzc2lvbk1ldGhvZD1FLm1hZ2ljLG19LFQ9ZnVuY3Rpb24oVSxFLG0sQSl7dmFyIE1lLHZlLEZlLFJlLG5lPVAudHJhbnNmb3JtVG8oInN0cmluZyIsWC51dGY4ZW5jb2RlKEUubmFtZSkpLGxlPUUuY29tbWVu''@;'; put 'put ''dHx8IiIsd2U9UC50cmFuc2Zvcm1Ubygic3RyaW5nIixYLnV0ZjhlbmNvZGUobGUpKSxVZT1uZS5sZW5ndGghPT1FLm5hbWUubGVuZ3RoLFFlPXdlLmxlbmd0aCE9PWxlLmxlbmd0aCxvdD1FLm9wdGlvbnMsWGU9IiIsQmU9IiIsQWU9IiI7RmU9RS5faW5pdGlhbE1ldGFkYXRhLmRpciE9PUUu''@;'; put 'put ''ZGlyP0UuZGlyOm90LmRpcixNZT0oUmU9RS5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT1FLmRhdGU/RS5kYXRlOm90LmRhdGUpLmdldEhvdXJzKCksTWU8PD02LE1lfD1SZS5nZXRNaW51dGVzKCksTWU8PD01LE1lfD1SZS5nZXRTZWNvbmRzKCkvMix2ZT1SZS5nZXRGdWxsWWVhcigpLTE5ODAs''@;'; put 'put ''dmU8PD00LHZlfD1SZS5nZXRNb250aCgpKzEsdmU8PD01LHZlfD1SZS5nZXREYXRlKCksVWUmJihCZT1TZSgxLDEpK1NlKEwobmUpLDQpK25lLFhlKz0idXAiK1NlKEJlLmxlbmd0aCwyKStCZSksUWUmJihBZT1TZSgxLDEpK1NlKHRoaXMuY3JjMzIod2UpLDQpK3dlLFhlKz0idWMiK1NlKEFl''@;'; put 'put ''Lmxlbmd0aCwyKStBZSk7dmFyIEllPSIiO3JldHVybiBJZSs9IlxuXDAiLEllKz1VZXx8UWU/IlwwXGIiOiJcMFwwIixJZSs9bS5jb21wcmVzc2lvbk1ldGhvZCxJZSs9U2UoTWUsMiksSWUrPVNlKHZlLDIpLEllKz1TZShtLmNyYzMyLDQpLEllKz1TZShtLmNvbXByZXNzZWRTaXplLDQpLEll''@;'; put 'put ''Kz1TZShtLnVuY29tcHJlc3NlZFNpemUsNCksSWUrPVNlKG5lLmxlbmd0aCwyKSxJZSs9U2UoWGUubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOlkuTE9DQUxfRklMRV9IRUFERVIrSWUrbmUrWGUsZGlyUmVjb3JkOlkuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgxNFwwIitJZStTZSh3ZS5sZW5ndGgs''@;'; put 'put ''MikrIlwwXDBcMFwwIisoITA9PT1GZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrU2UoQSw0KStuZStYZSt3ZSxjb21wcmVzc2VkT2JqZWN0Om19fSxWPXtsb2FkOmZ1bmN0aW9uKFUsRSl7dGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUg''@;'; put 'put ''anN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihVKXt2YXIgbSxBLGFlLG5lLEU9W107Zm9yKG0gaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KG0pJiYobmU9bmV3IFRlKChhZT10aGlzLmZpbGVzW21dKS5uYW1lLGFlLl9kYXRhLHplKGFl''@;'; put 'put ''Lm9wdGlvbnMpKSxBPW0uc2xpY2UodGhpcy5yb290Lmxlbmd0aCxtLmxlbmd0aCksbS5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZVKEEsbmUpJiZFLnB1c2gobmUpKTtyZXR1cm4gRX0sZmlsZTpmdW5jdGlvbihVLEUsbSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgp''@;'; put 'put ''e2lmKFAuaXNSZWdFeHAoVSkpe3ZhciBBPVU7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4hbmUuZGlyJiZBLnRlc3QoYWUpfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4hbmUuZGlyJiZhZT09PVV9KVswXXx8bnVsbH1yZXR1cm4g''@;'; put 'put ''Zy5jYWxsKHRoaXMsVT10aGlzLnJvb3QrVSxFLG0pLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihVKXtpZighVSlyZXR1cm4gdGhpcztpZihQLmlzUmVnRXhwKFUpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihhZSxuZSl7cmV0dXJuIG5lLmRpciYmVS50ZXN0KGFlKX0pO3ZhciBtPXguY2Fs''@;'; put 'put ''bCh0aGlzLHRoaXMucm9vdCtVKSxBPXRoaXMuY2xvbmUoKTtyZXR1cm4gQS5yb290PW0ubmFtZSxBfSxyZW1vdmU6ZnVuY3Rpb24oVSl7dmFyIEU9dGhpcy5maWxlc1tVPXRoaXMucm9vdCtVXTtpZihFfHwoIi8iIT1VLnNsaWNlKC0xKSYmKFUrPSIvIiksRT10aGlzLmZpbGVzW1VdKSxFJiYh''@;'; put 'put ''RS5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbVV07ZWxzZSBmb3IodmFyIG09dGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiBuZS5uYW1lLnNsaWNlKDAsVS5sZW5ndGgpPT09VX0pLEE9MDtBPG0ubGVuZ3RoO0ErKylkZWxldGUgdGhpcy5maWxlc1ttW0FdLm5hbWVdO3JldHVybiB0''@;'; put 'put ''aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihVKXtVPXplKFV8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLFAuY2hlY2tTdXBwb3J0KFUudHlwZSk7dmFyIGFlLG5lLFhlLEU9W10sbT0wLEE9MCxsZT1QLnRyYW5zZm9ybVRvKCJz''@;'; put 'put ''dHJpbmciLHRoaXMudXRmOGVuY29kZShVLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIHdlIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpe3ZhciBVZT10aGlzLmZpbGVzW3dlXSxRZT1VZS5vcHRpb25zLmNvbXByZXNzaW9ufHxVLmNv''@;'; put 'put ''bXByZXNzaW9uLnRvVXBwZXJDYXNlKCksb3Q9WltRZV07aWYoIW90KXRocm93IG5ldyBFcnJvcihRZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIE1lPUMuY2FsbCh0aGlzLFVlLG90KSx2ZT1ULmNhbGwodGhpcyx3ZSxVZSxNZSxtKTttKz12ZS5maWxlUmVj''@;'; put 'put ''b3JkLmxlbmd0aCtNZS5jb21wcmVzc2VkU2l6ZSxBKz12ZS5kaXJSZWNvcmQubGVuZ3RoLEUucHVzaCh2ZSl9WGU9WS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIitTZShFLmxlbmd0aCwyKStTZShFLmxlbmd0aCwyKStTZShBLDQpK1NlKG0sNCkrU2UobGUubGVuZ3RoLDIpK2xl''@;'; put 'put ''O3ZhciBCZT1VLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoYWU9InVpbnQ4YXJyYXkiPT09QmV8fCJhcnJheWJ1ZmZlciI9PT1CZXx8ImJsb2IiPT09QmV8fCJub2RlYnVmZmVyIj09PUJlP25ldyByZShtK0ErWGUubGVuZ3RoKTpuZXcgdGUobStBK1hlLmxlbmd0aCksbmU9MDtuZTxFLmxlbmd0''@;'; put 'put ''aDtuZSsrKWFlLmFwcGVuZChFW25lXS5maWxlUmVjb3JkKSxhZS5hcHBlbmQoRVtuZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKG5lPTA7bmU8RS5sZW5ndGg7bmUrKylhZS5hcHBlbmQoRVtuZV0uZGlyUmVjb3JkKTthZS5hcHBlbmQoWGUpO3ZhciBBZT1hZS5m''@;'; put 'put ''aW5hbGl6ZSgpO3N3aXRjaChVLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBQLnRyYW5zZm9ybVRvKFUudHlwZS50b0xvd2VyQ2FzZSgpLEFlKTtjYXNlImJsb2IiOnJldHVybiBQLmFycmF5QnVm''@;'; put 'put ''ZmVyMkJsb2IoUC50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLEFlKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBVLmJhc2U2ND9XLmVuY29kZShBZSk6QWU7ZGVmYXVsdDpyZXR1cm4gQWV9fSxjcmMzMjpmdW5jdGlvbihVLEUpe3JldHVybiBMKFUsRSl9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oVSl7''@;'; put 'put ''cmV0dXJuIFAudHJhbnNmb3JtVG8oInN0cmluZyIsWC51dGY4ZW5jb2RlKFUpKX0sdXRmOGRlY29kZTpmdW5jdGlvbihVKXtyZXR1cm4gWC51dGY4ZGVjb2RlKFUpfX07SC5leHBvcnRzPVZ9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMs''@;'; put 'put ''Ii4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihGLEgs''@;'; put 'put ''Uil7InVzZSBzdHJpY3QiO1IuTE9DQUxfRklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLFIuQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsUi5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNVx4MDYiLFIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEtceDA2XHgw''@;'; put 'put ''NyIsUi5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNlx4MDYiLFIuREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL2RhdGFSZWFkZXIiKSxQPUYoIi4vdXRpbHMiKTtmdW5jdGlvbiBMKFks''@;'; put 'put ''Qil7dGhpcy5kYXRhPVksQnx8KHRoaXMuZGF0YT1QLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEwucHJvdG90eXBlPW5ldyBqKS5ieXRlQXQ9ZnVuY3Rpb24oWSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0''@;'; put 'put ''KFkpfSxMLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKFkpfSxMLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihZKXt0aGlzLmNoZWNrT2Zmc2V0KFkpO3ZhciBCPXRoaXMuZGF0YS5zbGljZSh0aGlzLmlu''@;'; put 'put ''ZGV4LHRoaXMuaW5kZXgrWSk7cmV0dXJuIHRoaXMuaW5kZXgrPVksQn0sSC5leHBvcnRzPUx9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vdXRpbHMiKSxQPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtd''@;'; put 'put ''fTtQLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpe0w9ai50cmFuc2Zvcm1Ubygic3RyaW5nIixMKSx0aGlzLmRhdGEucHVzaChMKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sSC5leHBvcnRzPVB9LHsiLi91dGlscyI6MjF9XSwxNzpbZnVu''@;'; put 'put ''Y3Rpb24oRixILFIpeyhmdW5jdGlvbihqKXsidXNlIHN0cmljdCI7aWYoUi5iYXNlNjQ9ITAsUi5hcnJheT0hMCxSLnN0cmluZz0hMCxSLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IixSLm5vZGVidWZmZXI9dHlwZW9mIGo8InUiLFIu''@;'; put 'put ''dWludDhhcnJheT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IilSLmJsb2I9ITE7ZWxzZXt2YXIgUD1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e1IuYmxvYj0wPT09bmV3IEJsb2IoW1BdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaHt0cnl7''@;'; put 'put ''dmFyIFk9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtZLmFwcGVuZChQKSxSLmJsb2I9MD09PVkuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaHtS''@;'; put 'put ''LmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL2RhdGFSZWFkZXIiKTtmdW5jdGlvbiBQKEwpe0wmJih0aGlzLmRhdGE9TCx0aGlzLmxlbmd0aD10aGlz''@;'; put 'put ''LmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MCl9KFAucHJvdG90eXBlPW5ldyBqKS5ieXRlQXQ9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZGF0YVtMXX0sUC5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBZPUwuY2hhckNvZGVBdCgwKSxCPUwuY2hh''@;'; put 'put ''ckNvZGVBdCgxKSxXPUwuY2hhckNvZGVBdCgyKSxaPUwuY2hhckNvZGVBdCgzKSxxPXRoaXMubGVuZ3RoLTQ7cT49MDstLXEpaWYodGhpcy5kYXRhW3FdPT09WSYmdGhpcy5kYXRhW3ErMV09PT1CJiZ0aGlzLmRhdGFbcSsyXT09PVcmJnRoaXMuZGF0YVtxKzNdPT09WilyZXR1cm4gcTtyZXR1''@;'; put 'put ''cm4tMX0sUC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oTCl7aWYodGhpcy5jaGVja09mZnNldChMKSwwPT09TClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIFk9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxZ''@;'; put 'put ''fSxILmV4cG9ydHM9UH0seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3V0aWxzIiksUD1mdW5jdGlvbihMKXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoTCksdGhpcy5pbmRleD0wfTtQLnByb3RvdHlwZT17YXBwZW5kOmZ1''@;'; put 'put ''bmN0aW9uKEwpezAhPT1MLmxlbmd0aCYmKEw9ai50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTCksdGhpcy5kYXRhLnNldChMLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPUwubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sSC5leHBvcnRzPVB9LHsiLi91''@;'; put 'put ''dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGo9RigiLi91dGlscyIpLFA9RigiLi9zdXBwb3J0IiksTD1GKCIuL25vZGVCdWZmZXIiKSxZPW5ldyBBcnJheSgyNTYpLEI9MDtCPDI1NjtCKyspWVtCXT1CPj0yNTI/NjpCPj0yNDg/NTpCPj0yNDA/''@;'; put 'put ''NDpCPj0yMjQ/MzpCPj0xOTI/MjoxO1lbMjU0XT1ZWzI1NF09MTt2YXIgWj1mdW5jdGlvbihRLFgpe3ZhciB0ZTtmb3IoKFg9WHx8US5sZW5ndGgpPlEubGVuZ3RoJiYoWD1RLmxlbmd0aCksdGU9WC0xO3RlPj0wJiYxMjg9PSgxOTImUVt0ZV0pOyl0ZS0tO3JldHVybiB0ZTwwfHwwPT09dGU/''@;'; put 'put ''WDp0ZStZW1FbdGVdXT5YP3RlOlh9LHE9ZnVuY3Rpb24oUSl7dmFyIHRlLHJlLG9lLGdlLF9lPVEubGVuZ3RoLFRlPW5ldyBBcnJheSgyKl9lKTtmb3IocmU9MCx0ZT0wO3RlPF9lOylpZigob2U9UVt0ZSsrXSk8MTI4KVRlW3JlKytdPW9lO2Vsc2UgaWYoKGdlPVlbb2VdKT40KVRlW3JlKytd''@;'; put 'put ''PTY1NTMzLHRlKz1nZS0xO2Vsc2V7Zm9yKG9lJj0yPT09Z2U/MzE6Mz09PWdlPzE1Ojc7Z2U+MSYmdGU8X2U7KW9lPW9lPDw2fDYzJlFbdGUrK10sZ2UtLTtnZT4xP1RlW3JlKytdPTY1NTMzOm9lPDY1NTM2P1RlW3JlKytdPW9lOihUZVtyZSsrXT01NTI5Nnwob2UtPTY1NTM2KT4+MTAmMTAy''@;'; put 'put ''MyxUZVtyZSsrXT01NjMyMHwxMDIzJm9lKX1yZXR1cm4gVGUubGVuZ3RoIT09cmUmJihUZS5zdWJhcnJheT9UZT1UZS5zdWJhcnJheSgwLHJlKTpUZS5sZW5ndGg9cmUpLGouYXBwbHlGcm9tQ2hhckNvZGUoVGUpfTtSLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oWCl7cmV0dXJuIFAubm9kZWJ1ZmZl''@;'; put 'put ''cj9MKFgsInV0Zi04Iik6ZnVuY3Rpb24oUSl7dmFyIFgsdGUscmUsb2UsZ2UsX2U9US5sZW5ndGgsVGU9MDtmb3Iob2U9MDtvZTxfZTtvZSsrKTU1Mjk2PT0oNjQ1MTImKHRlPVEuY2hhckNvZGVBdChvZSkpKSYmb2UrMTxfZSYmNTYzMjA9PSg2NDUxMiYocmU9US5jaGFyQ29kZUF0KG9lKzEp''@;'; put 'put ''KSkmJih0ZT02NTUzNisodGUtNTUyOTY8PDEwKSsocmUtNTYzMjApLG9lKyspLFRlKz10ZTwxMjg/MTp0ZTwyMDQ4PzI6dGU8NjU1MzY/Mzo0O2ZvcihYPVAudWludDhhcnJheT9uZXcgVWludDhBcnJheShUZSk6bmV3IEFycmF5KFRlKSxnZT0wLG9lPTA7Z2U8VGU7b2UrKyk1NTI5Nj09KDY0''@;'; put 'put ''NTEyJih0ZT1RLmNoYXJDb2RlQXQob2UpKSkmJm9lKzE8X2UmJjU2MzIwPT0oNjQ1MTImKHJlPVEuY2hhckNvZGVBdChvZSsxKSkpJiYodGU9NjU1MzYrKHRlLTU1Mjk2PDwxMCkrKHJlLTU2MzIwKSxvZSsrKSx0ZTwxMjg/WFtnZSsrXT10ZTp0ZTwyMDQ4PyhYW2dlKytdPTE5Mnx0ZT4+PjYs''@;'; put 'put ''WFtnZSsrXT0xMjh8NjMmdGUpOnRlPDY1NTM2PyhYW2dlKytdPTIyNHx0ZT4+PjEyLFhbZ2UrK109MTI4fHRlPj4+NiY2MyxYW2dlKytdPTEyOHw2MyZ0ZSk6KFhbZ2UrK109MjQwfHRlPj4+MTgsWFtnZSsrXT0xMjh8dGU+Pj4xMiY2MyxYW2dlKytdPTEyOHx0ZT4+PjYmNjMsWFtnZSsrXT0x''@;'; put 'put ''Mjh8NjMmdGUpO3JldHVybiBYfShYKX0sUi51dGY4ZGVjb2RlPWZ1bmN0aW9uKFgpe2lmKFAubm9kZWJ1ZmZlcilyZXR1cm4gai50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsWCkudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciB0ZT1bXSxyZT0wLG9lPShYPWoudHJhbnNmb3JtVG8oUC51aW50''@;'; put 'put ''OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLFgpKS5sZW5ndGg7cmU8b2U7KXt2YXIgX2U9WihYLE1hdGgubWluKHJlKzY1NTM2LG9lKSk7dGUucHVzaChxKFAudWludDhhcnJheT9YLnN1YmFycmF5KHJlLF9lKTpYLnNsaWNlKHJlLF9lKSkpLHJlPV9lfXJldHVybiB0ZS5qb2luKCIiKX19''@;'; put 'put ''LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3N1cHBvcnQiKSxQPUYoIi4vY29tcHJlc3Npb25zIiksTD1GKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBZKFEpe3JldHVy''@;'; put 'put ''biBRfWZ1bmN0aW9uIEIoUSxYKXtmb3IodmFyIHRlPTA7dGU8US5sZW5ndGg7Kyt0ZSlYW3RlXT0yNTUmUS5jaGFyQ29kZUF0KHRlKTtyZXR1cm4gWH1mdW5jdGlvbiBXKFEpe3ZhciBYPTY1NTM2LHRlPVtdLHJlPVEubGVuZ3RoLG9lPVIuZ2V0VHlwZU9mKFEpLGdlPTAsX2U9ITA7dHJ5e3N3''@;'; put 'put ''aXRjaChvZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9kZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEwoMCkpfX1jYXRjaHtfZT0hMX1pZighX2Upe2Zvcih2YXIg''@;'; put 'put ''VGU9IiIsU2U9MDtTZTxRLmxlbmd0aDtTZSsrKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFFbU2VdKTtyZXR1cm4gVGV9Zm9yKDtnZTxyZSYmWD4xOyl0cnl7dGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PW9lfHwibm9kZWJ1ZmZlciI9PT1vZT9RLnNs''@;'; put 'put ''aWNlKGdlLE1hdGgubWluKGdlK1gscmUpKTpRLnN1YmFycmF5KGdlLE1hdGgubWluKGdlK1gscmUpKSkpLGdlKz1YfWNhdGNoe1g9TWF0aC5mbG9vcihYLzIpfXJldHVybiB0ZS5qb2luKCIiKX1mdW5jdGlvbiBaKFEsWCl7Zm9yKHZhciB0ZT0wO3RlPFEubGVuZ3RoO3RlKyspWFt0ZV09UVt0''@;'; put 'put ''ZV07cmV0dXJuIFh9Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKFEpe2Zvcih2YXIgWD0iIix0ZT0wO3RlPFEubGVuZ3RoO3RlKyspWCs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmUS5jaGFyQ29kZUF0KHRlKSk7cmV0dXJuIFh9LFIuYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihRKXtSLmNo''@;'; put 'put ''ZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW1FdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5e3ZhciB0ZT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93''@;'; put 'put ''Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiB0ZS5hcHBlbmQoUSksdGUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sUi5hcHBseUZyb21DaGFyQ29kZT1XO3ZhciBxPXt9O3Euc3RyaW5n''@;'; put 'put ''PXtzdHJpbmc6WSxhcnJheTpmdW5jdGlvbihRKXtyZXR1cm4gQihRLG5ldyBBcnJheShRLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gcS5zdHJpbmcudWludDhhcnJheShRKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oUSl7cmV0dXJuIEIoUSxuZXcgVWlu''@;'; put 'put ''dDhBcnJheShRLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFEpe3JldHVybiBCKFEsTChRLmxlbmd0aCkpfX0scS5hcnJheT17c3RyaW5nOlcsYXJyYXk6WSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoUSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1''@;'; put 'put ''bmN0aW9uKFEpe3JldHVybiBuZXcgVWludDhBcnJheShRKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gTChRKX19LHEuYXJyYXlidWZmZXI9e3N0cmluZzpmdW5jdGlvbihRKXtyZXR1cm4gVyhuZXcgVWludDhBcnJheShRKSl9LGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBaKG5l''@;'; put 'put ''dyBVaW50OEFycmF5KFEpLG5ldyBBcnJheShRLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6WSx1aW50OGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBuZXcgVWludDhBcnJheShRKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihRKXtyZXR1cm4gTChuZXcgVWludDhBcnJheShRKSl9fSxxLnVpbnQ4''@;'; put 'put ''YXJyYXk9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBaKFEsbmV3IEFycmF5KFEubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKFEpe3JldHVybiBRLmJ1ZmZlcn0sdWludDhhcnJheTpZLG5vZGVidWZmZXI6ZnVuY3Rpb24oUSl7cmV0dXJuIEwoUSl9fSxxLm5vZGVi''@;'; put 'put ''dWZmZXI9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKFEpe3JldHVybiBaKFEsbmV3IEFycmF5KFEubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKFEpe3JldHVybiBxLm5vZGVidWZmZXIudWludDhhcnJheShRKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oUSl7cmV0dXJuIFoo''@;'; put 'put ''USxuZXcgVWludDhBcnJheShRLmxlbmd0aCkpfSxub2RlYnVmZmVyOll9LFIudHJhbnNmb3JtVG89ZnVuY3Rpb24oUSxYKXtpZihYfHwoWD0iIiksIVEpcmV0dXJuIFg7Ui5jaGVja1N1cHBvcnQoUSk7dmFyIHRlPVIuZ2V0VHlwZU9mKFgpO3JldHVybiBxW3RlXVtRXShYKX0sUi5nZXRUeXBl''@;'; put 'put ''T2Y9ZnVuY3Rpb24oUSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBRPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUSk/ImFycmF5IjpqLm5vZGVidWZmZXImJkwudGVzdChRKT8ibm9kZWJ1ZmZlciI6ai51aW50OGFycmF5JiZRIGlu''@;'; put 'put ''c3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6ai5hcnJheWJ1ZmZlciYmUSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSxSLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihRKXtpZighaltRLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihRKyIg''@;'; put 'put ''aXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sUi5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LFIuTUFYX1ZBTFVFXzMyQklUUz0tMSxSLnByZXR0eT1mdW5jdGlvbihRKXt2YXIgdGUscmUsWD0iIjtmb3IocmU9MDtyZTwoUXx8IiIpLmxlbmd0aDtyZSsrKVgrPSJcXHgiKygodGU9''@;'; put 'put ''US5jaGFyQ29kZUF0KHJlKSk8MTY/IjAiOiIiKSt0ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gWH0sUi5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oUSl7Zm9yKHZhciBYIGluIFApaWYoUC5oYXNPd25Qcm9wZXJ0eShYKSYmUFtYXS5tYWdpYz09PVEpcmV0dXJuIFBbWF07''@;'; put 'put ''cmV0dXJuIG51bGx9LFIuaXNSZWdFeHA9ZnVuY3Rpb24oUSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUSl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9u''@;'; put 'put ''KEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9zdHJpbmdSZWFkZXIiKSxQPUYoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLEw9RigiLi91aW50OEFycmF5UmVhZGVyIiksWT1GKCIuL3V0aWxzIiksQj1GKCIuL3NpZ25hdHVyZSIpLFc9RigiLi96aXBFbnRyeSIpLFo9RigiLi9zdXBwb3J0''@;'; put 'put ''IikscT1GKCIuL29iamVjdCIpO2Z1bmN0aW9uIFEoWCx0ZSl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPXRlLFgmJnRoaXMubG9hZChYKX1RLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oWCl7dmFyIHRlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYodGUh''@;'; put 'put ''PT1YKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitZLnByZXR0eSh0ZSkrIiwgZXhwZWN0ZWQgIitZLnByZXR0eShYKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhp''@;'; put 'put ''cy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJl''@;'; put 'put ''YWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJl''@;'; put 'put ''YWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PXEudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJl''@;'; put 'put ''YWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10''@;'; put 'put ''aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4''@;'; put 'put ''KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciByZSxvZSxnZSxYPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8WDspcmU9dGhpcy5yZWFkZXIucmVhZEludCgyKSxvZT10aGlzLnJl''@;'; put 'put ''YWRlci5yZWFkSW50KDQpLGdlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcob2UpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtyZV09e2lkOnJlLGxlbmd0aDpvZSx2YWx1ZTpnZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGha''@;'; put 'put ''aXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgWCx0ZTtmb3IoWD0wO1g8dGhpcy5maWxlcy5sZW5ndGg7WCsrKXRoaXMucmVhZGVyLnNldEluZGV4KCh0ZT10aGlzLmZpbGVzW1hdKS5sb2Nh''@;'; put 'put ''bEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShCLkxPQ0FMX0ZJTEVfSEVBREVSKSx0ZS5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSx0ZS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIFg7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMu''@;'; put 'put ''Y2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PUIuQ0VOVFJBTF9GSUxFX0hFQURFUjspKFg9bmV3IFcoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChYKX0s''@;'; put 'put ''cmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBYPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKEIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PVgpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJl''@;'; put 'put ''Y3RvcnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChYKSx0aGlzLmNoZWNrU2lnbmF0dXJlKEIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PVkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRy''@;'; put 'put ''YWxEaXJTdGFydD09PVkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1ZLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1ZLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1ZLk1BWF9WQUxV''@;'; put 'put ''RV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PVkuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09PShYPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKEIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Q29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoWCksdGhpcy5jaGVja1NpZ25hdHVyZShCLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2Nr''@;'; put 'put ''WmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKEIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZD''@;'; put 'put ''ZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKFgpe3ZhciB0ZT1ZLmdldFR5cGVPZihYKTt0aGlzLnJlYWRlcj0ic3RyaW5nIiE9PXRlfHxaLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09dGU/bmV3IFAoWCk6bmV3IEwoWS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsWCkpOm5l''@;'; put 'put ''dyBqKFgsdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKFgpe3RoaXMucHJlcGFyZVJlYWRlcihYKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sSC5leHBvcnRz''@;'; put 'put ''PVF9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKEYs''@;'; put 'put ''SCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi9zdHJpbmdSZWFkZXIiKSxQPUYoIi4vdXRpbHMiKSxMPUYoIi4vY29tcHJlc3NlZE9iamVjdCIpLFk9RigiLi9vYmplY3QiKTtmdW5jdGlvbiBCKFcsWil7dGhpcy5vcHRpb25zPVcsdGhpcy5sb2FkT3B0aW9ucz1afUIucHJvdG90eXBlPXtp''@;'; put 'put ''c0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFcsWixxKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgUT1XLmlu''@;'; put 'put ''ZGV4O1cuc2V0SW5kZXgoWik7dmFyIFg9Vy5yZWFkRGF0YShxKTtyZXR1cm4gVy5zZXRJbmRleChRKSxYfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oVyxaLHEsUSxYKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdGU9UC50cmFuc2Zvcm1UbyhRLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5n''@;'; put 'put ''ZXRDb21wcmVzc2VkQ29udGVudCgpKSxyZT1RLnVuY29tcHJlc3ModGUpO2lmKHJlLmxlbmd0aCE9PVgpdGhyb3cgbmV3IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoIik7cmV0dXJuIHJlfX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihXKXt2YXIgWixxO2lm''@;'; put 'put ''KFcuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMikscT1XLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksVy5za2lwKHEpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRT''@;'; put 'put ''aXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PSha''@;'; put 'put ''PVAuZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK1AucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsi''@;'; put 'put ''KSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyBMLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9''@;'; put 'put ''dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9kLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KFcsVy5pbmRleCx0aGlzLmNvbXByZXNzZWRT''@;'; put 'put ''aXplLFopLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxaLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9UC50cmFu''@;'; put 'put ''c2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLFkuY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9u''@;'; put 'put ''KFcpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1XLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVcucmVhZEludCgyKSx0aGlzLmJpdEZsYWc9Vy5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9Vy5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1XLnJlYWREYXRlKCksdGhp''@;'; put 'put ''cy5jcmMzMj1XLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPVcucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmZp''@;'; put 'put ''bGVDb21tZW50TGVuZ3RoPVcucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1XLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9Vy5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZz''@;'; put 'put ''ZXQ9Vy5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPVcucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhXKSx0aGlzLnBh''@;'; put 'put ''cnNlWklQNjRFeHRyYUZpZWxkKFcpLHRoaXMuZmlsZUNvbW1lbnQ9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFcpe2lmKHRoaXMuZXh0''@;'; put 'put ''cmFGaWVsZHNbMV0pe3ZhciBaPW5ldyBqKHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PVAuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1aLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1QLk1BWF9WQUxV''@;'; put 'put ''RV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPVoucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PVAuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Wi5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PVAuTUFYX1ZBTFVFXzMy''@;'; put 'put ''QklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PVoucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24oVyl7dmFyIHEsUSxYLFo9Vy5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRzfHx7fTtXLmluZGV4PFordGhpcy5leHRyYUZpZWxkc0xlbmd0''@;'; put 'put ''aDspcT1XLnJlYWRJbnQoMiksUT1XLnJlYWRJbnQoMiksWD1XLnJlYWRTdHJpbmcoUSksdGhpcy5leHRyYUZpZWxkc1txXT17aWQ6cSxsZW5ndGg6USx2YWx1ZTpYfX0saGFuZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9WS51dGY4ZGVjb2RlKHRo''@;'; put 'put ''aXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9WS51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFc9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVsbCE9PVcmJih0aGlzLmZpbGVOYW1lPVcpO3ZhciBaPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2Rl''@;'; put 'put ''Q29tbWVudCgpO251bGwhPT1aJiYodGhpcy5maWxlQ29tbWVudD1aKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihXKXt2YXIgWj1uZXcgaihXLnZhbHVlKTtyZXR1cm4gMSE9PVoucmVhZEludCgxKXx8WS5j''@;'; put 'put ''cmMzMih0aGlzLmZpbGVOYW1lKSE9PVoucmVhZEludCg0KT9udWxsOlkudXRmOGRlY29kZShaLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYo''@;'; put 'put ''Vyl7dmFyIFo9bmV3IGooVy52YWx1ZSk7cmV0dXJuIDEhPT1aLnJlYWRJbnQoMSl8fFkuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1aLnJlYWRJbnQoNCk/bnVsbDpZLnV0ZjhkZWNvZGUoWi5yZWFkU3RyaW5nKFcubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LEguZXhwb3J0cz1CfSx7Ii4v''@;'; put 'put ''Y29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIEI9e307KDAsRigiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShCLEYoIi4vbGliL2RlZmxhdGUi''@;'; put 'put ''KSxGKCIuL2xpYi9pbmZsYXRlIiksRigiLi9saWIvemxpYi9jb25zdGFudHMiKSksSC5leHBvcnRzPUJ9LHsiLi9saWIvZGVmbGF0ZSI6MjUsIi4vbGliL2luZmxhdGUiOjI2LCIuL2xpYi91dGlscy9jb21tb24iOjI3LCIuL2xpYi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24o''@;'; put 'put ''RixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3psaWIvZGVmbGF0ZS5qcyIpLFA9RigiLi91dGlscy9jb21tb24iKSxMPUYoIi4vdXRpbHMvc3RyaW5ncyIpLFk9RigiLi96bGliL21lc3NhZ2VzIiksQj1GKCIuL3psaWIvenN0cmVhbSIpLG9lPWZ1bmN0aW9uKFNlKXt0aGlzLm9wdGlv''@;'; put 'put ''bnM9UC5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sU2V8fHt9KTt2YXIgemU9dGhpcy5vcHRpb25zO3plLnJhdyYmemUud2luZG93Qml0cz4wP3plLndpbmRvd0JpdHM9LXplLndpbmRv''@;'; put 'put ''d0JpdHM6emUuZ3ppcCYmemUud2luZG93Qml0cz4wJiZ6ZS53aW5kb3dCaXRzPDE2JiYoemUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IEIsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciB6''@;'; put 'put ''PWouZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx6ZS5sZXZlbCx6ZS5tZXRob2QsemUud2luZG93Qml0cyx6ZS5tZW1MZXZlbCx6ZS5zdHJhdGVneSk7aWYoMCE9PXopdGhyb3cgbmV3IEVycm9yKFlbel0pO3plLmhlYWRlciYmai5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx6ZS5oZWFkZXIp''@;'; put 'put ''fTtmdW5jdGlvbiBnZShTZSx6ZSl7dmFyIHo9bmV3IG9lKHplKTtpZih6LnB1c2goU2UsITApLHouZXJyKXRocm93IHoubXNnO3JldHVybiB6LnJlc3VsdH1vZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihTZSx6ZSl7dmFyIHkseCx6PXRoaXMuc3RybSxnPXRoaXMub3B0aW9ucy5jaHVua1Np''@;'; put 'put ''emU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt4PXplPT09fn56ZT96ZTohMD09PXplPzQ6MCx6LmlucHV0PSJzdHJpbmciPT10eXBlb2YgU2U/TC5zdHJpbmcyYnVmKFNlKTpTZSx6Lm5leHRfaW49MCx6LmF2YWlsX2luPXouaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT16LmF2YWlsX291dCYmKHou''@;'; put 'put ''b3V0cHV0PW5ldyBQLkJ1ZjgoZyksei5uZXh0X291dD0wLHouYXZhaWxfb3V0PWcpLDEhPT0oeT1qLmRlZmxhdGUoeix4KSkmJjAhPT15KXJldHVybiB0aGlzLm9uRW5kKHkpLHRoaXMuZW5kZWQ9ITAsITE7KDA9PT16LmF2YWlsX291dHx8MD09PXouYXZhaWxfaW4mJjQ9PT14KSYmdGhpcy5v''@;'; put 'put ''bkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/TC5idWYyYmluc3RyaW5nKFAuc2hyaW5rQnVmKHoub3V0cHV0LHoubmV4dF9vdXQpKTpQLnNocmlua0J1Zih6Lm91dHB1dCx6Lm5leHRfb3V0KSl9d2hpbGUoKHouYXZhaWxfaW4+MHx8MD09PXouYXZhaWxfb3V0KSYmMSE9PXkpO3Jl''@;'; put 'put ''dHVybiA0IT09eHx8KHk9ai5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZCh5KSx0aGlzLmVuZGVkPSEwLDA9PT15KX0sb2UucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihTZSl7dGhpcy5jaHVua3MucHVzaChTZSl9LG9lLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihTZSl7MD09''@;'; put 'put ''PVNlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6UC5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9U2UsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sUi5EZWZsYXRlPW9lLFIuZGVm''@;'; put 'put ''bGF0ZT1nZSxSLmRlZmxhdGVSYXc9ZnVuY3Rpb24gX2UoU2UsemUpe3JldHVybih6ZT16ZXx8e30pLnJhdz0hMCxnZShTZSx6ZSl9LFIuZ3ppcD1mdW5jdGlvbiBUZShTZSx6ZSl7cmV0dXJuKHplPXplfHx7fSkuZ3ppcD0hMCxnZShTZSx6ZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91''@;'; put 'put ''dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuL3psaWIvaW5mbGF0ZS5qcyIpLFA9RigiLi91dGlscy9jb21tb24i''@;'; put 'put ''KSxMPUYoIi4vdXRpbHMvc3RyaW5ncyIpLFk9RigiLi96bGliL2NvbnN0YW50cyIpLEI9RigiLi96bGliL21lc3NhZ2VzIiksVz1GKCIuL3psaWIvenN0cmVhbSIpLFo9RigiLi96bGliL2d6aGVhZGVyIikscT1mdW5jdGlvbih0ZSl7dGhpcy5vcHRpb25zPVAuYXNzaWduKHtjaHVua1NpemU6''@;'; put 'put ''MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0ZXx8e30pO3ZhciByZT10aGlzLm9wdGlvbnM7cmUucmF3JiZyZS53aW5kb3dCaXRzPj0wJiZyZS53aW5kb3dCaXRzPDE2JiYocmUud2luZG93Qml0cz0tcmUud2luZG93Qml0cywwPT09cmUud2luZG93Qml0cyYmKHJlLndpbmRvd0JpdHM9LTE1''@;'; put 'put ''KSkscmUud2luZG93Qml0cz49MCYmcmUud2luZG93Qml0czwxNiYmISh0ZSYmdGUud2luZG93Qml0cykmJihyZS53aW5kb3dCaXRzKz0zMikscmUud2luZG93Qml0cz4xNSYmcmUud2luZG93Qml0czw0OCYmKDE1JnJlLndpbmRvd0JpdHN8fChyZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJy''@;'; put 'put ''PTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFcsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBvZT1qLmluZmxhdGVJbml0Mih0aGlzLnN0cm0scmUud2luZG93Qml0cyk7aWYob2UhPT1ZLlpfT0spdGhyb3cgbmV3IEVycm9yKEJbb2Vd''@;'; put 'put ''KTt0aGlzLmhlYWRlcj1uZXcgWixqLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gUSh0ZSxyZSl7dmFyIG9lPW5ldyBxKHJlKTtpZihvZS5wdXNoKHRlLCEwKSxvZS5lcnIpdGhyb3cgb2UubXNnO3JldHVybiBvZS5yZXN1bHR9cS5wcm90b3R5cGUu''@;'; put 'put ''cHVzaD1mdW5jdGlvbih0ZSxyZSl7dmFyIF9lLFRlLFNlLHplLHosb2U9dGhpcy5zdHJtLGdlPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1yZT09PX5+cmU/cmU6ITA9PT1yZT9ZLlpfRklOSVNIOlkuWl9OT19GTFVTSCxvZS5pbnB1dD0ic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHRlP0wuYmluc3RyaW5nMmJ1Zih0ZSk6dGUsb2UubmV4dF9pbj0wLG9lLmF2YWlsX2luPW9lLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09b2UuYXZhaWxfb3V0JiYob2Uub3V0cHV0PW5ldyBQLkJ1ZjgoZ2UpLG9lLm5leHRfb3V0PTAsb2UuYXZhaWxfb3V0PWdlKSwoX2U9ai5p''@;'; put 'put ''bmZsYXRlKG9lLFkuWl9OT19GTFVTSCkpIT09WS5aX1NUUkVBTV9FTkQmJl9lIT09WS5aX09LKXJldHVybiB0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO29lLm5leHRfb3V0JiYoMD09PW9lLmF2YWlsX291dHx8X2U9PT1ZLlpfU1RSRUFNX0VORHx8MD09PW9lLmF2YWlsX2luJiZU''@;'; put 'put ''ZT09PVkuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KFNlPUwudXRmOGJvcmRlcihvZS5vdXRwdXQsb2UubmV4dF9vdXQpLHplPW9lLm5leHRfb3V0LVNlLHo9TC5idWYyc3RyaW5nKG9lLm91dHB1dCxTZSksb2UubmV4dF9vdXQ9emUsb2UuYXZhaWxfb3V0PWdlLXpl''@;'; put 'put ''LHplJiZQLmFycmF5U2V0KG9lLm91dHB1dCxvZS5vdXRwdXQsU2UsemUsMCksdGhpcy5vbkRhdGEoeikpOnRoaXMub25EYXRhKFAuc2hyaW5rQnVmKG9lLm91dHB1dCxvZS5uZXh0X291dCkpKX13aGlsZShvZS5hdmFpbF9pbj4wJiZfZSE9PVkuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1Z''@;'; put 'put ''LlpfU1RSRUFNX0VORCYmKFRlPVkuWl9GSU5JU0gpLFRlIT09WS5aX0ZJTklTSHx8KF9lPWouaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1ZLlpfT0spfSxxLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odGUpe3RoaXMuY2h1bmtzLnB1''@;'; put 'put ''c2godGUpfSxxLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0ZSl7dGU9PT1ZLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpQLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVy''@;'; put 'put ''cj10ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxSLkluZmxhdGU9cSxSLmluZmxhdGU9USxSLmluZmxhdGVSYXc9ZnVuY3Rpb24gWCh0ZSxyZSl7cmV0dXJuKHJlPXJlfHx7fSkucmF3PSEwLFEodGUscmUpfSxSLnVuZ3ppcD1RfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJp''@;'; put 'put ''bmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9dHlwZW9mIFVp''@;'; put 'put ''bnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7Ui5hc3NpZ249ZnVuY3Rpb24oWSl7Zm9yKHZhciBCPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtCLmxlbmd0aDspe3ZhciBXPUIuc2hpZnQoKTtpZihXKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIFcpdGhyb3cgbmV3IFR5cGVFcnJvcihXKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFogaW4gVylXLmhhc093blByb3BlcnR5KFopJiYoWVtaXT1XW1pdKX19cmV0dXJuIFl9LFIuc2hyaW5rQnVmPWZ1bmN0aW9uKFksQil7cmV0dXJuIFkubGVuZ3Ro''@;'; put 'put ''PT09Qj9ZOlkuc3ViYXJyYXk/WS5zdWJhcnJheSgwLEIpOihZLmxlbmd0aD1CLFkpfTt2YXIgUD17YXJyYXlTZXQ6ZnVuY3Rpb24oWSxCLFcsWixxKXtpZihCLnN1YmFycmF5JiZZLnN1YmFycmF5KVkuc2V0KEIuc3ViYXJyYXkoVyxXK1opLHEpO2Vsc2UgZm9yKHZhciBRPTA7UTxaO1ErKylZ''@;'; put 'put ''W3ErUV09QltXK1FdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKFkpe3ZhciBCLFcsWixxLFEsWDtmb3IoWj0wLEI9MCxXPVkubGVuZ3RoO0I8VztCKyspWis9WVtCXS5sZW5ndGg7Zm9yKFg9bmV3IFVpbnQ4QXJyYXkoWikscT0wLEI9MCxXPVkubGVuZ3RoO0I8VztCKyspWC5zZXQoUT1ZW0Jd''@;'; put 'put ''LHEpLHErPVEubGVuZ3RoO3JldHVybiBYfX0sTD17YXJyYXlTZXQ6ZnVuY3Rpb24oWSxCLFcsWixxKXtmb3IodmFyIFE9MDtRPFo7USsrKVlbcStRXT1CW1crUV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oWSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLFkpfX07Ui5zZXRUeXBlZD1mdW5j''@;'; put 'put ''dGlvbihZKXtZPyhSLkJ1Zjg9VWludDhBcnJheSxSLkJ1ZjE2PVVpbnQxNkFycmF5LFIuQnVmMzI9SW50MzJBcnJheSxSLmFzc2lnbihSLFApKTooUi5CdWY4PUFycmF5LFIuQnVmMTY9QXJyYXksUi5CdWYzMj1BcnJheSxSLmFzc2lnbihSLEwpKX0sUi5zZXRUeXBlZChqKX0se31dLDI4Oltm''@;'; put 'put ''dW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4vY29tbW9uIiksUD0hMCxMPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaHtQPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNh''@;'; put 'put ''dGNoe0w9ITF9Zm9yKHZhciBZPW5ldyBqLkJ1ZjgoMjU2KSxCPTA7QjwyNTY7QisrKVlbQl09Qj49MjUyPzY6Qj49MjQ4PzU6Qj49MjQwPzQ6Qj49MjI0PzM6Qj49MTkyPzI6MTtmdW5jdGlvbiBXKFoscSl7aWYocTw2NTUzNyYmKFouc3ViYXJyYXkmJkx8fCFaLnN1YmFycmF5JiZQKSlyZXR1''@;'; put 'put ''cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGouc2hyaW5rQnVmKFoscSkpO2Zvcih2YXIgUT0iIixYPTA7WDxxO1grKylRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFpbWF0pO3JldHVybiBRfVlbMjU0XT1ZWzI1NF09MSxSLnN0cmluZzJidWY9ZnVuY3Rpb24oWil7dmFyIHEsUSxY''@;'; put 'put ''LHRlLHJlLG9lPVoubGVuZ3RoLGdlPTA7Zm9yKHRlPTA7dGU8b2U7dGUrKyk1NTI5Nj09KDY0NTEyJihRPVouY2hhckNvZGVBdCh0ZSkpKSYmdGUrMTxvZSYmNTYzMjA9PSg2NDUxMiYoWD1aLmNoYXJDb2RlQXQodGUrMSkpKSYmKFE9NjU1MzYrKFEtNTUyOTY8PDEwKSsoWC01NjMyMCksdGUr''@;'; put 'put ''KyksZ2UrPVE8MTI4PzE6UTwyMDQ4PzI6UTw2NTUzNj8zOjQ7Zm9yKHE9bmV3IGouQnVmOChnZSkscmU9MCx0ZT0wO3JlPGdlO3RlKyspNTUyOTY9PSg2NDUxMiYoUT1aLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8b2UmJjU2MzIwPT0oNjQ1MTImKFg9Wi5jaGFyQ29kZUF0KHRlKzEpKSkmJihR''@;'; put 'put ''PTY1NTM2KyhRLTU1Mjk2PDwxMCkrKFgtNTYzMjApLHRlKyspLFE8MTI4P3FbcmUrK109UTpRPDIwNDg/KHFbcmUrK109MTkyfFE+Pj42LHFbcmUrK109MTI4fDYzJlEpOlE8NjU1MzY/KHFbcmUrK109MjI0fFE+Pj4xMixxW3JlKytdPTEyOHxRPj4+NiY2MyxxW3JlKytdPTEyOHw2MyZRKToo''@;'; put 'put ''cVtyZSsrXT0yNDB8UT4+PjE4LHFbcmUrK109MTI4fFE+Pj4xMiY2MyxxW3JlKytdPTEyOHxRPj4+NiY2MyxxW3JlKytdPTEyOHw2MyZRKTtyZXR1cm4gcX0sUi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFope3JldHVybiBXKFosWi5sZW5ndGgpfSxSLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24o''@;'; put 'put ''Wil7Zm9yKHZhciBxPW5ldyBqLkJ1ZjgoWi5sZW5ndGgpLFE9MCxYPXEubGVuZ3RoO1E8WDtRKyspcVtRXT1aLmNoYXJDb2RlQXQoUSk7cmV0dXJuIHF9LFIuYnVmMnN0cmluZz1mdW5jdGlvbihaLHEpe3ZhciBRLFgsdGUscmUsb2U9cXx8Wi5sZW5ndGgsZ2U9bmV3IEFycmF5KDIqb2UpO2Zv''@;'; put 'put ''cihYPTAsUT0wO1E8b2U7KWlmKCh0ZT1aW1ErK10pPDEyOClnZVtYKytdPXRlO2Vsc2UgaWYoKHJlPVlbdGVdKT40KWdlW1grK109NjU1MzMsUSs9cmUtMTtlbHNle2Zvcih0ZSY9Mj09PXJlPzMxOjM9PT1yZT8xNTo3O3JlPjEmJlE8b2U7KXRlPXRlPDw2fDYzJlpbUSsrXSxyZS0tO3JlPjE/''@;'; put 'put ''Z2VbWCsrXT02NTUzMzp0ZTw2NTUzNj9nZVtYKytdPXRlOihnZVtYKytdPTU1Mjk2fCh0ZS09NjU1MzYpPj4xMCYxMDIzLGdlW1grK109NTYzMjB8MTAyMyZ0ZSl9cmV0dXJuIFcoZ2UsWCl9LFIudXRmOGJvcmRlcj1mdW5jdGlvbihaLHEpe3ZhciBRO2ZvcigocT1xfHxaLmxlbmd0aCk+Wi5s''@;'; put 'put ''ZW5ndGgmJihxPVoubGVuZ3RoKSxRPXEtMTtRPj0wJiYxMjg9PSgxOTImWltRXSk7KVEtLTtyZXR1cm4gUTwwfHwwPT09UT9xOlErWVtaW1FdXT5xP1E6cX19LHsiLi9jb21tb24iOjI3fV0sMjk6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7SC5leHBvcnRzPWZ1bmN0aW9uIGooUCxM''@;'; put 'put ''LFksQil7Zm9yKHZhciBXPTY1NTM1JlAsWj1QPj4+MTYmNjU1MzUscT0wOzAhPT1ZOyl7WS09cT1ZPjJlMz8yZTM6WTtkb3taPVorKFc9VytMW0IrK118MCl8MH13aGlsZSgtLXEpO1clPTY1NTIxLFolPTY1NTIxfXJldHVybiBXfFo8PDE2fX0se31dLDMwOltmdW5jdGlvbihGLEgsUil7SC5l''@;'; put 'put ''eHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIs''@;'; put 'put ''Wl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZB''@;'; put 'put ''VUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sMzE6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIFA9ZnVuY3Rpb24gaigpe2Zvcih2YXIgWSxCPVtdLFc9MDtXPDI1NjtXKyspe1k9Vztmb3IodmFyIFo9MDta''@;'; put 'put ''PDg7WisrKVk9MSZZPzM5ODgyOTIzODReWT4+PjE6WT4+PjE7QltXXT1ZfXJldHVybiBCfSgpO0guZXhwb3J0cz1mdW5jdGlvbiBMKFksQixXLFope3ZhciBxPVAsUT1aK1c7WT1+WTtmb3IodmFyIFg9WjtYPFE7WCsrKVk9WT4+PjhecVsyNTUmKFleQltYXSldO3JldHVybn5ZfX0se31dLDMy''@;'; put 'put ''OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4uL3V0aWxzL2NvbW1vbiIpLFA9RigiLi90cmVlcyIpLEw9RigiLi9hZGxlcjMyIiksWT1GKCIuL2NyYzMyIiksQj1GKCIuL21lc3NhZ2VzIiksVz0wLHRlPTAsb2U9LTIseD0yLEM9OCxBPTI4NixhZT0zMCxuZT0xOSxs''@;'; put 'put ''ZT0yKkErMSx3ZT0xNSxVZT0zLFFlPTI1OCxvdD1RZStVZSsxLHZlPTQyLFJlPTExMztmdW5jdGlvbiBKZShXZSxUdCl7cmV0dXJuIFdlLm1zZz1CW1R0XSxUdH1mdW5jdGlvbiBsbihXZSl7cmV0dXJuKFdlPDwxKS0oV2U+ND85OjApfWZ1bmN0aW9uIHl0KFdlKXtmb3IodmFyIFR0PVdlLmxl''@;'; put 'put ''bmd0aDstLVR0Pj0wOylXZVtUdF09MH1mdW5jdGlvbiBTdChXZSl7dmFyIFR0PVdlLnN0YXRlLG5yPVR0LnBlbmRpbmc7bnI+V2UuYXZhaWxfb3V0JiYobnI9V2UuYXZhaWxfb3V0KSwwIT09bnImJihqLmFycmF5U2V0KFdlLm91dHB1dCxUdC5wZW5kaW5nX2J1ZixUdC5wZW5kaW5nX291dCxu''@;'; put 'put ''cixXZS5uZXh0X291dCksV2UubmV4dF9vdXQrPW5yLFR0LnBlbmRpbmdfb3V0Kz1ucixXZS50b3RhbF9vdXQrPW5yLFdlLmF2YWlsX291dC09bnIsVHQucGVuZGluZy09bnIsMD09PVR0LnBlbmRpbmcmJihUdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRHQoV2UsVHQpe1AuX3RyX2ZsdXNo''@;'; put 'put ''X2Jsb2NrKFdlLFdlLmJsb2NrX3N0YXJ0Pj0wP1dlLmJsb2NrX3N0YXJ0Oi0xLFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0LFR0KSxXZS5ibG9ja19zdGFydD1XZS5zdHJzdGFydCxTdChXZS5zdHJtKX1mdW5jdGlvbiBpdChXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1U''@;'; put 'put ''dH1mdW5jdGlvbiAkZShXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdD4+PjgmMjU1LFdlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109MjU1JlR0fWZ1bmN0aW9uIHR0KFdlLFR0LG5yLGh0KXt2YXIgeHQ9V2UuYXZhaWxfaW47cmV0dXJuIHh0Pmh0JiYoeHQ9aHQpLDA9''@;'; put 'put ''PT14dD8wOihXZS5hdmFpbF9pbi09eHQsai5hcnJheVNldChUdCxXZS5pbnB1dCxXZS5uZXh0X2luLHh0LG5yKSwxPT09V2Uuc3RhdGUud3JhcD9XZS5hZGxlcj1MKFdlLmFkbGVyLFR0LHh0LG5yKToyPT09V2Uuc3RhdGUud3JhcCYmKFdlLmFkbGVyPVkoV2UuYWRsZXIsVHQseHQsbnIpKSxX''@;'; put 'put ''ZS5uZXh0X2luKz14dCxXZS50b3RhbF9pbis9eHQseHQpfWZ1bmN0aW9uIE5lKFdlLFR0KXt2YXIgeHQsam4sbnI9V2UubWF4X2NoYWluX2xlbmd0aCxodD1XZS5zdHJzdGFydCxybj1XZS5wcmV2X2xlbmd0aCx6dD1XZS5uaWNlX21hdGNoLGhpPVdlLnN0cnN0YXJ0PldlLndfc2l6ZS1vdD9X''@;'; put 'put ''ZS5zdHJzdGFydC0oV2Uud19zaXplLW90KTowLHVuPVdlLndpbmRvdyxmbj1XZS53X21hc2ssSWk9V2UucHJldixYdD1XZS5zdHJzdGFydCtRZSxlbj11bltodCtybi0xXSx1YT11bltodCtybl07V2UucHJldl9sZW5ndGg+PVdlLmdvb2RfbWF0Y2gmJihucj4+PTIpLHp0PldlLmxvb2thaGVh''@;'; put 'put ''ZCYmKHp0PVdlLmxvb2thaGVhZCk7ZG97aWYodW5bKHh0PVR0KStybl09PT11YSYmdW5beHQrcm4tMV09PT1lbiYmdW5beHRdPT09dW5baHRdJiZ1blsrK3h0XT09PXVuW2h0KzFdKXtodCs9Mix4dCsrO2Rve313aGlsZSh1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRd''@;'; put 'put ''JiZ1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRdJiZ1blsrK2h0XT09PXVuWysreHRdJiZodDxYdCk7aWYoam49UWUtKFh0LWh0KSxodD1YdC1RZSxqbj5y''@;'; put 'put ''bil7aWYoV2UubWF0Y2hfc3RhcnQ9VHQscm49am4sam4+PXp0KWJyZWFrO2VuPXVuW2h0K3JuLTFdLHVhPXVuW2h0K3JuXX19fXdoaWxlKChUdD1JaVtUdCZmbl0pPmhpJiYwIT0tLW5yKTtyZXR1cm4gcm48PVdlLmxvb2thaGVhZD9ybjpXZS5sb29rYWhlYWR9ZnVuY3Rpb24gdXQoV2Upe3Zh''@;'; put 'put ''ciBucixodCx4dCxqbixybixUdD1XZS53X3NpemU7ZG97aWYoam49V2Uud2luZG93X3NpemUtV2UubG9va2FoZWFkLVdlLnN0cnN0YXJ0LFdlLnN0cnN0YXJ0Pj1UdCsoVHQtb3QpKXtqLmFycmF5U2V0KFdlLndpbmRvdyxXZS53aW5kb3csVHQsVHQsMCksV2UubWF0Y2hfc3RhcnQtPVR0LFdl''@;'; put 'put ''LnN0cnN0YXJ0LT1UdCxXZS5ibG9ja19zdGFydC09VHQsbnI9aHQ9V2UuaGFzaF9zaXplO2Rve3h0PVdlLmhlYWRbLS1ucl0sV2UuaGVhZFtucl09eHQ+PVR0P3h0LVR0OjB9d2hpbGUoLS1odCk7bnI9aHQ9VHQ7ZG97eHQ9V2UucHJldlstLW5yXSxXZS5wcmV2W25yXT14dD49VHQ/eHQtVHQ6''@;'; put 'put ''MH13aGlsZSgtLWh0KTtqbis9VHR9aWYoMD09PVdlLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoaHQ9dHQoV2Uuc3RybSxXZS53aW5kb3csV2Uuc3Ryc3RhcnQrV2UubG9va2FoZWFkLGpuKSxXZS5sb29rYWhlYWQrPWh0LFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ+PVVlKWZvcihXZS5pbnNfaD1X''@;'; put 'put ''ZS53aW5kb3dbcm49V2Uuc3Ryc3RhcnQtV2UuaW5zZXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W3JuKzFdKSZXZS5oYXNoX21hc2s7V2UuaW5zZXJ0JiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tybitVZS0xXSkm''@;'; put 'put ''V2UuaGFzaF9tYXNrLFdlLnByZXZbcm4mV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1ybixybisrLFdlLmluc2VydC0tLCEoV2UubG9va2FoZWFkK1dlLmluc2VydDxVZSkpOyk7fXdoaWxlKFdlLmxvb2thaGVhZDxvdCYmMCE9PVdlLnN0cm0uYXZhaWxf''@;'; put 'put ''aW4pfWZ1bmN0aW9uIFJ0KFdlLFR0KXtmb3IodmFyIG5yLGh0Ozspe2lmKFdlLmxvb2thaGVhZDxvdCl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDxvdCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYobnI9MCxXZS5sb29rYWhlYWQ+PVVlJiYoV2UuaW5zX2g9''@;'; put 'put ''KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydCksMCE9PW5yJiZXZS5zdHJz''@;'; put 'put ''dGFydC1ucjw9V2Uud19zaXplLW90JiYoV2UubWF0Y2hfbGVuZ3RoPU5lKFdlLG5yKSksV2UubWF0Y2hfbGVuZ3RoPj1VZSlpZihodD1QLl90cl90YWxseShXZSxXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVu''@;'; put 'put ''Z3RoLFdlLm1hdGNoX2xlbmd0aDw9V2UubWF4X2xhenlfbWF0Y2gmJldlLmxvb2thaGVhZD49VWUpe1dlLm1hdGNoX2xlbmd0aC0tO2Rve1dlLnN0cnN0YXJ0KyssV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9t''@;'; put 'put ''YXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydH13aGlsZSgwIT0tLVdlLm1hdGNoX2xlbmd0aCk7V2Uuc3Ryc3RhcnQrK31lbHNlIFdlLnN0cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2Uu''@;'; put 'put ''bWF0Y2hfbGVuZ3RoPTAsV2UuaW5zX2g9V2Uud2luZG93W1dlLnN0cnN0YXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0KzFdKSZXZS5oYXNoX21hc2s7ZWxzZSBodD1QLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFy''@;'; put 'put ''dF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0Kys7aWYoaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5h''@;'; put 'put ''dmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBQdChXZSxUdCl7Zm9yKHZhciBucixodCx4dDs7KXtpZihXZS5sb29rYWhlYWQ8b3Qpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8b3QmJlR0PT09VylyZXR1cm4g''@;'; put 'put ''MTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109''@;'; put 'put ''V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLFdlLnByZXZfbGVuZ3RoPVdlLm1hdGNoX2xlbmd0aCxXZS5wcmV2X21hdGNoPVdlLm1hdGNoX3N0YXJ0LFdlLm1hdGNoX2xlbmd0aD1VZS0xLDAhPT1uciYmV2UucHJldl9sZW5ndGg8V2UubWF4X2xhenlf''@;'; put 'put ''bWF0Y2gmJldlLnN0cnN0YXJ0LW5yPD1XZS53X3NpemUtb3QmJihXZS5tYXRjaF9sZW5ndGg9TmUoV2UsbnIpLFdlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1XZS5zdHJhdGVneXx8V2UubWF0Y2hfbGVuZ3RoPT09VWUmJldlLnN0cnN0YXJ0LVdlLm1hdGNoX3N0YXJ0PjQwOTYpJiYoV2UubWF0''@;'; put 'put ''Y2hfbGVuZ3RoPVVlLTEpKSxXZS5wcmV2X2xlbmd0aD49VWUmJldlLm1hdGNoX2xlbmd0aDw9V2UucHJldl9sZW5ndGgpe3h0PVdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZC1VZSxodD1QLl90cl90YWxseShXZSxXZS5zdHJzdGFydC0xLVdlLnByZXZfbWF0Y2gsV2UucHJldl9sZW5ndGgtVWUp''@;'; put 'put ''LFdlLmxvb2thaGVhZC09V2UucHJldl9sZW5ndGgtMSxXZS5wcmV2X2xlbmd0aC09Mjtkb3srK1dlLnN0cnN0YXJ0PD14dCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0''@;'; put 'put ''cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tV2UucHJldl9sZW5ndGgpO2lmKFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLm1hdGNoX2xlbmd0aD1VZS0xLFdlLnN0cnN0YXJ0KyssaHQmJihEdChXZSwh''@;'; put 'put ''MSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKFdlLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGh0PVAuX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0LTFdKSkmJkR0KFdlLCExKSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tLDA9PT1XZS5zdHJt''@;'; put 'put ''LmF2YWlsX291dClyZXR1cm4gMX1lbHNlIFdlLm1hdGNoX2F2YWlsYWJsZT0xLFdlLnN0cnN0YXJ0KyssV2UubG9va2FoZWFkLS19cmV0dXJuIFdlLm1hdGNoX2F2YWlsYWJsZSYmKGh0PVAuX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0LTFdKSxXZS5tYXRjaF9hdmFpbGFi''@;'; put 'put ''bGU9MCksV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgUmksc249ZnVuY3Rpb24o''@;'; put 'put ''V2UsVHQsbnIsaHQseHQpe3RoaXMuZ29vZF9sZW5ndGg9V2UsdGhpcy5tYXhfbGF6eT1UdCx0aGlzLm5pY2VfbGVuZ3RoPW5yLHRoaXMubWF4X2NoYWluPWh0LHRoaXMuZnVuYz14dH07ZnVuY3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9''@;'; put 'put ''bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1DLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRz''@;'; put 'put ''PTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAs''@;'; put 'put ''dGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWlu''@;'; put 'put ''X2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBqLkJ1ZjE2KDIqbGUpLHRoaXMuZHluX2R0cmVlPW5ldyBqLkJ1ZjE2KDIqKDIqYWUr''@;'; put 'put ''MSkpLHRoaXMuYmxfdHJlZT1uZXcgai5CdWYxNigyKigyKm5lKzEpKSx5dCh0aGlzLmR5bl9sdHJlZSkseXQodGhpcy5keW5fZHRyZWUpLHl0KHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3''@;'; put 'put ''IGouQnVmMTYod2UrMSksdGhpcy5oZWFwPW5ldyBqLkJ1ZjE2KDIqQSsxKSx5dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgai5CdWYxNigyKkErMSkseXQodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9''@;'; put 'put ''MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gT3IoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRl''@;'; put 'put ''PyhXZS50b3RhbF9pbj1XZS50b3RhbF9vdXQ9MCxXZS5kYXRhX3R5cGU9eCwoVHQ9V2Uuc3RhdGUpLnBlbmRpbmc9MCxUdC5wZW5kaW5nX291dD0wLFR0LndyYXA8MCYmKFR0LndyYXA9LVR0LndyYXApLFR0LnN0YXR1cz1UdC53cmFwP3ZlOlJlLFdlLmFkbGVyPTI9PT1UdC53cmFwPzA6MSxU''@;'; put 'put ''dC5sYXN0X2ZsdXNoPVcsUC5fdHJfaW5pdChUdCksdGUpOkplKFdlLG9lKX1mdW5jdGlvbiBXdChXZSl7dmFyIFR0PU9yKFdlKTtyZXR1cm4gVHQ9PT10ZSYmZnVuY3Rpb24gaG4oV2Upe1dlLndpbmRvd19zaXplPTIqV2Uud19zaXplLHl0KFdlLmhlYWQpLFdlLm1heF9sYXp5X21hdGNoPVJp''@;'; put 'put ''W1dlLmxldmVsXS5tYXhfbGF6eSxXZS5nb29kX21hdGNoPVJpW1dlLmxldmVsXS5nb29kX2xlbmd0aCxXZS5uaWNlX21hdGNoPVJpW1dlLmxldmVsXS5uaWNlX2xlbmd0aCxXZS5tYXhfY2hhaW5fbGVuZ3RoPVJpW1dlLmxldmVsXS5tYXhfY2hhaW4sV2Uuc3Ryc3RhcnQ9MCxXZS5ibG9ja19z''@;'; put 'put ''dGFydD0wLFdlLmxvb2thaGVhZD0wLFdlLmluc2VydD0wLFdlLm1hdGNoX2xlbmd0aD1XZS5wcmV2X2xlbmd0aD1VZS0xLFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLmluc19oPTB9KFdlLnN0YXRlKSxUdH1mdW5jdGlvbiBSbihXZSxUdCxucixodCx4dCxqbil7aWYoIVdlKXJldHVybiBvZTt2''@;'; put 'put ''YXIgcm49MTtpZigtMT09PVR0JiYoVHQ9NiksaHQ8MD8ocm49MCxodD0taHQpOmh0PjE1JiYocm49MixodC09MTYpLHh0PDF8fHh0Pjl8fG5yIT09Q3x8aHQ8OHx8aHQ+MTV8fFR0PDB8fFR0Pjl8fGpuPDB8fGpuPjQpcmV0dXJuIEplKFdlLG9lKTs4PT09aHQmJihodD05KTt2YXIgenQ9bmV3''@;'; put 'put ''IGZ0O3JldHVybiBXZS5zdGF0ZT16dCx6dC5zdHJtPVdlLHp0LndyYXA9cm4senQuZ3poZWFkPW51bGwsenQud19iaXRzPWh0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19tYXNrPXp0Lndfc2l6ZS0xLHp0Lmhhc2hfYml0cz14dCs3LHp0Lmhhc2hfc2l6ZT0xPDx6dC5oYXNoX2JpdHMs''@;'; put 'put ''enQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hpZnQ9fn4oKHp0Lmhhc2hfYml0cytVZS0xKS9VZSksenQud2luZG93PW5ldyBqLkJ1ZjgoMip6dC53X3NpemUpLHp0LmhlYWQ9bmV3IGouQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2PW5ldyBqLkJ1ZjE2KHp0Lndfc2l6''@;'; put 'put ''ZSksenQubGl0X2J1ZnNpemU9MTw8eHQrNix6dC5wZW5kaW5nX2J1Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IGouQnVmOCh6dC5wZW5kaW5nX2J1Zl9zaXplKSx6dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1Zj0zKnp0LmxpdF9idWZzaXplLHp0''@;'; put 'put ''LmxldmVsPVR0LHp0LnN0cmF0ZWd5PWpuLHp0Lm1ldGhvZD1ucixXdChXZSl9Umk9W25ldyBzbigwLDAsMCwwLGZ1bmN0aW9uIHF0KFdlLFR0KXt2YXIgbnI9NjU1MzU7Zm9yKG5yPldlLnBlbmRpbmdfYnVmX3NpemUtNSYmKG5yPVdlLnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYoV2UubG9v''@;'; put 'put ''a2FoZWFkPD0xKXtpZih1dChXZSksMD09PVdlLmxvb2thaGVhZCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9V2Uuc3Ryc3RhcnQrPVdlLmxvb2thaGVhZCxXZS5sb29rYWhlYWQ9MDt2YXIgaHQ9V2UuYmxvY2tfc3RhcnQrbnI7aWYoKDA9PT1XZS5zdHJzdGFy''@;'; put 'put ''dHx8V2Uuc3Ryc3RhcnQ+PWh0KSYmKFdlLmxvb2thaGVhZD1XZS5zdHJzdGFydC1odCxXZS5zdHJzdGFydD1odCxEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KXx8V2Uuc3Ryc3RhcnQtV2UuYmxvY2tfc3RhcnQ+PVdlLndfc2l6ZS1vdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5h''@;'; put 'put ''dmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTooV2Uuc3Ryc3RhcnQ+V2UuYmxvY2tfc3RhcnQmJkR0KFdlLCExKSwxKX0pLG5ldyBzbig0LDQsOCw0LFJ0KSxuZXcgc24oNCw1LDE2LDgsUnQp''@;'; put 'put ''LG5ldyBzbig0LDYsMzIsMzIsUnQpLG5ldyBzbig0LDQsMTYsMTYsUHQpLG5ldyBzbig4LDE2LDMyLDMyLFB0KSxuZXcgc24oOCwxNiwxMjgsMTI4LFB0KSxuZXcgc24oOCwzMiwxMjgsMjU2LFB0KSxuZXcgc24oMzIsMTI4LDI1OCwxMDI0LFB0KSxuZXcgc24oMzIsMjU4LDI1OCw0MDk2LFB0''@;'; put 'put ''KV0sUi5kZWZsYXRlSW5pdD1mdW5jdGlvbiBzdChXZSxUdCl7cmV0dXJuIFJuKFdlLFR0LEMsMTUsOCwwKX0sUi5kZWZsYXRlSW5pdDI9Um4sUi5kZWZsYXRlUmVzZXQ9V3QsUi5kZWZsYXRlUmVzZXRLZWVwPU9yLFIuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiBBdChXZSxUdCl7cmV0dXJu''@;'; put 'put ''IFdlJiZXZS5zdGF0ZSYmMj09PVdlLnN0YXRlLndyYXA/KFdlLnN0YXRlLmd6aGVhZD1UdCx0ZSk6b2V9LFIuZGVmbGF0ZT1mdW5jdGlvbiBVdChXZSxUdCl7dmFyIG5yLGh0LHh0LGpuO2lmKCFXZXx8IVdlLnN0YXRlfHxUdD41fHxUdDwwKXJldHVybiBXZT9KZShXZSxvZSk6b2U7aWYoaHQ9''@;'; put 'put ''V2Uuc3RhdGUsIVdlLm91dHB1dHx8IVdlLmlucHV0JiYwIT09V2UuYXZhaWxfaW58fDY2Nj09PWh0LnN0YXR1cyYmNCE9PVR0KXJldHVybiBKZShXZSwwPT09V2UuYXZhaWxfb3V0Py01Om9lKTtpZihodC5zdHJtPVdlLG5yPWh0Lmxhc3RfZmx1c2gsaHQubGFzdF9mbHVzaD1UdCxodC5zdGF0''@;'; put 'put ''dXM9PT12ZSlpZigyPT09aHQud3JhcClXZS5hZGxlcj0wLGl0KGh0LDMxKSxpdChodCwxMzkpLGl0KGh0LDgpLGh0Lmd6aGVhZD8oaXQoaHQsKGh0Lmd6aGVhZC50ZXh0PzE6MCkrKGh0Lmd6aGVhZC5oY3JjPzI6MCkrKGh0Lmd6aGVhZC5leHRyYT80OjApKyhodC5nemhlYWQubmFtZT84OjAp''@;'; put 'put ''KyhodC5nemhlYWQuY29tbWVudD8xNjowKSksaXQoaHQsMjU1Jmh0Lmd6aGVhZC50aW1lKSxpdChodCxodC5nemhlYWQudGltZT4+OCYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4xNiYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4yNCYyNTUpLGl0KGh0LDk9PT1odC5sZXZlbD8yOmh0''@;'; put 'put ''LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzQ6MCksaXQoaHQsMjU1Jmh0Lmd6aGVhZC5vcyksaHQuZ3poZWFkLmV4dHJhJiZodC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaXQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLGl0KGh0LGh0Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1''@;'; put 'put ''KSksaHQuZ3poZWFkLmhjcmMmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcsMCkpLGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NjkpOihpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCw5PT09aHQubGV2ZWw/Mjpo''@;'; put 'put ''dC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDMpLGh0LnN0YXR1cz1SZSk7ZWxzZXt2YXIgcm49QysoaHQud19iaXRzLTg8PDQpPDw4O3JufD0oaHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/MDpodC5sZXZlbDw2PzE6Nj09PWh0LmxldmVsPzI6Myk8PDYsMCE9PWh0LnN0''@;'; put 'put ''cnN0YXJ0JiYocm58PTMyKSxybis9MzEtcm4lMzEsaHQuc3RhdHVzPVJlLCRlKGh0LHJuKSwwIT09aHQuc3Ryc3RhcnQmJigkZShodCxXZS5hZGxlcj4+PjE2KSwkZShodCw2NTUzNSZXZS5hZGxlcikpLFdlLmFkbGVyPTF9aWYoNjk9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmV4dHJhKXtm''@;'; put 'put ''b3IoeHQ9aHQucGVuZGluZztodC5nemluZGV4PCg2NTUzNSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGh0LnBlbmRpbmchPT1odC5wZW5kaW5nX2J1Zl9zaXplfHwoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0''@;'; put 'put ''LnBlbmRpbmcteHQseHQpKSxTdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZSkpOylpdChodCwyNTUmaHQuZ3poZWFkLmV4dHJhW2h0Lmd6aW5kZXhdKSxodC5nemluZGV4Kys7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxl''@;'; put 'put ''cj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxodC5nemluZGV4PT09aHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NzMpfWVsc2UgaHQuc3RhdHVzPTczO2lmKDczPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5uYW1l''@;'; put 'put ''KXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxTdChXZSkseHQ9aHQucGVuZGluZyxo''@;'; put 'put ''dC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe2puPTE7YnJlYWt9am49aHQuZ3ppbmRleDxodC5nemhlYWQubmFtZS5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LGpuKX13aGlsZSgwIT09am4pO2h0Lmd6aGVhZC5oY3Jj''@;'; put 'put ''JiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9WShXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PWpuJiYoaHQuZ3ppbmRleD0wLGh0LnN0YXR1cz05MSl9ZWxzZSBodC5zdGF0dXM9OTE7aWYoOTE9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmNvbW1lbnQp''@;'; put 'put ''e3h0PWh0LnBlbmRpbmc7ZG97aWYoaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUmJihodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPVkoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLFN0KFdlKSx4dD1odC5wZW5kaW5nLGh0''@;'; put 'put ''LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplKSl7am49MTticmVha31qbj1odC5nemluZGV4PGh0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaHQuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChodC5nemluZGV4KyspOjAsaXQoaHQsam4pfXdoaWxlKDAhPT1qbik7aHQuZ3poZWFk''@;'; put 'put ''LmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1ZKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSwwPT09am4mJihodC5zdGF0dXM9MTAzKX1lbHNlIGh0LnN0YXR1cz0xMDM7aWYoMTAzPT09aHQuc3RhdHVzJiYoaHQuZ3poZWFkLmhjcmM/KGh0LnBlbmRp''@;'; put 'put ''bmcrMj5odC5wZW5kaW5nX2J1Zl9zaXplJiZTdChXZSksaHQucGVuZGluZysyPD1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxlcj4+OCYyNTUpLFdlLmFkbGVyPTAsaHQuc3RhdHVzPVJlKSk6aHQuc3RhdHVzPVJlKSwwIT09aHQucGVuZGlu''@;'; put 'put ''Zyl7aWYoU3QoV2UpLDA9PT1XZS5hdmFpbF9vdXQpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsdGV9ZWxzZSBpZigwPT09V2UuYXZhaWxfaW4mJmxuKFR0KTw9bG4obnIpJiY0IT09VHQpcmV0dXJuIEplKFdlLC01KTtpZig2NjY9PT1odC5zdGF0dXMmJjAhPT1XZS5hdmFpbF9pbilyZXR1cm4g''@;'; put 'put ''SmUoV2UsLTUpO2lmKDAhPT1XZS5hdmFpbF9pbnx8MCE9PWh0Lmxvb2thaGVhZHx8VHQhPT1XJiY2NjYhPT1odC5zdGF0dXMpe3ZhciBoaT0yPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gUXQoV2UsVHQpe2Zvcih2YXIgbnI7Oyl7aWYoMD09PVdlLmxvb2thaGVhZCYmKHV0KFdlKSwwPT09V2Uu''@;'; put 'put ''bG9va2FoZWFkKSl7aWYoVHQ9PT1XKXJldHVybiAxO2JyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLG5yPVAuX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSksV2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKyxuciYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9v''@;'; put 'put ''dXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQpOjM9PT1odC5zdHJhdGVneT9mdW5jdGlvbiBjaShX''@;'; put 'put ''ZSxUdCl7Zm9yKHZhciBucixodCx4dCxqbixybj1XZS53aW5kb3c7Oyl7aWYoV2UubG9va2FoZWFkPD1RZSl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDw9UWUmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLFdlLmxvb2thaGVh''@;'; put 'put ''ZD49VWUmJldlLnN0cnN0YXJ0PjAmJihodD1yblt4dD1XZS5zdHJzdGFydC0xXSk9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSl7am49V2Uuc3Ryc3RhcnQrUWU7ZG97fXdoaWxlKGh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0''@;'; put 'put ''PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJnh0PGpuKTtXZS5tYXRjaF9sZW5ndGg9UWUtKGpuLXh0KSxXZS5tYXRjaF9sZW5ndGg+V2UubG9va2FoZWFkJiYoV2UubWF0Y2hfbGVuZ3RoPVdlLmxvb2thaGVh''@;'; put 'put ''ZCl9aWYoV2UubWF0Y2hfbGVuZ3RoPj1VZT8obnI9UC5fdHJfdGFsbHkoV2UsMSxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLnN0cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTApOihucj1QLl90cl90YWxseShXZSww''@;'; put 'put ''LFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyspLG5yJiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQp''@;'; put 'put ''OldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfShodCxUdCk6UmlbaHQubGV2ZWxdLmZ1bmMoaHQsVHQpO2lmKCgzPT09aGl8fDQ9PT1oaSkmJihodC5zdGF0dXM9NjY2KSwxPT09aGl8fDM9PT1oaSlyZXR1cm4gMD09PVdlLmF2YWlsX291dCYmKGh0''@;'; put 'put ''Lmxhc3RfZmx1c2g9LTEpLHRlO2lmKDI9PT1oaSYmKDE9PT1UdD9QLl90cl9hbGlnbihodCk6NSE9PVR0JiYoUC5fdHJfc3RvcmVkX2Jsb2NrKGh0LDAsMCwhMSksMz09PVR0JiYoeXQoaHQuaGVhZCksMD09PWh0Lmxvb2thaGVhZCYmKGh0LnN0cnN0YXJ0PTAsaHQuYmxvY2tfc3RhcnQ9MCxo''@;'; put 'put ''dC5pbnNlcnQ9MCkpKSxTdChXZSksMD09PVdlLmF2YWlsX291dCkpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEsdGV9cmV0dXJuIDQhPT1UdD90ZTpodC53cmFwPD0wPzE6KDI9PT1odC53cmFwPyhpdChodCwyNTUmV2UuYWRsZXIpLGl0KGh0LFdlLmFkbGVyPj44JjI1NSksaXQoaHQsV2UuYWRs''@;'; put 'put ''ZXI+PjE2JjI1NSksaXQoaHQsV2UuYWRsZXI+PjI0JjI1NSksaXQoaHQsMjU1JldlLnRvdGFsX2luKSxpdChodCxXZS50b3RhbF9pbj4+OCYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4xNiYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4yNCYyNTUpKTooJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUo''@;'; put 'put ''aHQsNjU1MzUmV2UuYWRsZXIpKSxTdChXZSksaHQud3JhcD4wJiYoaHQud3JhcD0taHQud3JhcCksMCE9PWh0LnBlbmRpbmc/dGU6MSl9LFIuZGVmbGF0ZUVuZD1mdW5jdGlvbiByaShXZSl7dmFyIFR0O3JldHVybiBXZSYmV2Uuc3RhdGU/KFR0PVdlLnN0YXRlLnN0YXR1cykhPT12ZSYmNjkh''@;'; put 'put ''PT1UdCYmNzMhPT1UdCYmOTEhPT1UdCYmMTAzIT09VHQmJlR0IT09UmUmJjY2NiE9PVR0P0plKFdlLG9lKTooV2Uuc3RhdGU9bnVsbCxUdD09PVJlP0plKFdlLC0zKTp0ZSk6b2V9LFIuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxz''@;'; put 'put ''L2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0IjtILmV4cG9ydHM9ZnVuY3Rpb24gaigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAs''@;'; put 'put ''dGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDM0OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbihZLEIpe3ZhciBX''@;'; put 'put ''LFoscSxRLFgsdGUscmUsb2UsZ2UsX2UsVGUsU2UsemUseixnLHkseCxDLFQsVixVLEUsbSxBLGFlO0E9WS5pbnB1dCxxPShaPVkubmV4dF9pbikrKFkuYXZhaWxfaW4tNSksYWU9WS5vdXRwdXQsWD0oUT1ZLm5leHRfb3V0KS0oQi1ZLmF2YWlsX291dCksdGU9USsoWS5hdmFpbF9vdXQtMjU3''@;'; put 'put ''KSxyZT0oVz1ZLnN0YXRlKS5kbWF4LG9lPVcud3NpemUsZ2U9Vy53aGF2ZSxfZT1XLnduZXh0LFRlPVcud2luZG93LFNlPVcuaG9sZCx6ZT1XLmJpdHMsej1XLmxlbmNvZGUsZz1XLmRpc3Rjb2RlLHk9KDE8PFcubGVuYml0cyktMSx4PSgxPDxXLmRpc3RiaXRzKS0xO2U6ZG97emU8MTUmJihT''@;'; put 'put ''ZSs9QVtaKytdPDx6ZSxTZSs9QVtaKytdPDwoemUrPTgpLHplKz04KSxDPXpbU2UmeV07dDpmb3IoOzspe2lmKFNlPj4+PVQ9Qz4+PjI0LHplLT1ULDA9PShUPUM+Pj4xNiYyNTUpKWFlW1ErK109NjU1MzUmQztlbHNle2lmKCEoMTYmVCkpe2lmKDY0JlQpe2lmKDMyJlQpe1cubW9kZT0xMjti''@;'; put 'put ''cmVhayBlfVkubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLFcubW9kZT0zMDticmVhayBlfUM9elsoNjU1MzUmQykrKFNlJigxPDxUKS0xKV07Y29udGludWUgdH1mb3IoVj02NTUzNSZDLChUJj0xNSkmJih6ZTxUJiYoU2UrPUFbWisrXTw8emUsemUrPTgpLFYrPVNlJigxPDxU''@;'; put 'put ''KS0xLFNlPj4+PVQsemUtPVQpLHplPDE1JiYoU2UrPUFbWisrXTw8emUsU2UrPUFbWisrXTw8KHplKz04KSx6ZSs9OCksQz1nW1NlJnhdOzspe2lmKFNlPj4+PVQ9Qz4+PjI0LHplLT1ULDE2JihUPUM+Pj4xNiYyNTUpKXtpZihVPTY1NTM1JkMsemU8KFQmPTE1KSYmKFNlKz1BW1orK108PHpl''@;'; put 'put ''LCh6ZSs9OCk8VCYmKFNlKz1BW1orK108PHplLHplKz04KSksKFUrPVNlJigxPDxUKS0xKT5yZSl7WS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixXLm1vZGU9MzA7YnJlYWsgZX1pZihTZT4+Pj1ULHplLT1ULFU+KFQ9US1YKSl7aWYoKFQ9VS1UKT5nZSYmVy5zYW5lKXtZ''@;'; put 'put ''Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBlfWlmKEU9MCxtPVRlLDA9PT1fZSl7aWYoRSs9b2UtVCxUPFYpe1YtPVQ7ZG97YWVbUSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1RLVUsbT1hZX19ZWxzZSBpZihfZTxUKXtpZihFKz1vZStfZS1U''@;'; put 'put ''LChULT1fZSk8Vil7Vi09VDtkb3thZVtRKytdPVRlW0UrK119d2hpbGUoLS1UKTtpZihFPTAsX2U8Vil7Vi09VD1fZTtkb3thZVtRKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPVEtVSxtPWFlfX19ZWxzZSBpZihFKz1fZS1ULFQ8Vil7Vi09VDtkb3thZVtRKytdPVRlW0UrK119d2hpbGUoLS1U''@;'; put 'put ''KTtFPVEtVSxtPWFlfWZvcig7Vj4yOylhZVtRKytdPW1bRSsrXSxhZVtRKytdPW1bRSsrXSxhZVtRKytdPW1bRSsrXSxWLT0zO1YmJihhZVtRKytdPW1bRSsrXSxWPjEmJihhZVtRKytdPW1bRSsrXSkpfWVsc2V7RT1RLVU7ZG97YWVbUSsrXT1hZVtFKytdLGFlW1ErK109YWVbRSsrXSxhZVtR''@;'; put 'put ''KytdPWFlW0UrK10sVi09M313aGlsZShWPjIpO1YmJihhZVtRKytdPWFlW0UrK10sVj4xJiYoYWVbUSsrXT1hZVtFKytdKSl9YnJlYWt9aWYoNjQmVCl7WS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1nWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXX19''@;'; put 'put ''YnJlYWt9fXdoaWxlKFo8cSYmUTx0ZSk7U2UmPSgxPDwoemUtPShWPXplPj4zKTw8MykpLTEsWS5uZXh0X2luPVotPVYsWS5uZXh0X291dD1RLFkuYXZhaWxfaW49WjxxP3EtWis1OjUtKFotcSksWS5hdmFpbF9vdXQ9UTx0ZT90ZS1RKzI1NzoyNTctKFEtdGUpLFcuaG9sZD1TZSxXLmJpdHM9''@;'; put 'put ''emV9fSx7fV0sMzU6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7dmFyIGo9RigiLi4vdXRpbHMvY29tbW9uIiksUD1GKCIuL2FkbGVyMzIiKSxMPUYoIi4vY3JjMzIiKSxZPUYoIi4vaW5mZmFzdCIpLEI9RigiLi9pbmZ0cmVlcyIpLHJlPTAsX2U9LTIsZz0xLHl0PTg1MixTdD01OTI7''@;'; put 'put ''ZnVuY3Rpb24gJGUoQXQpe3JldHVybihBdD4+PjI0JjI1NSkrKEF0Pj4+OCY2NTI4MCkrKCg2NTI4MCZBdCk8PDgpKygoMjU1JkF0KTw8MjQpfWZ1bmN0aW9uIHR0KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRo''@;'; put 'put ''aXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9m''@;'; put 'put ''ZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5l''@;'; put 'put ''dyBqLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBqLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIE5lKEF0KXt2YXIgUm47cmV0dXJuIEF0JiZBdC5zdGF0ZT8oQXQudG90YWxf''@;'; put 'put ''aW49QXQudG90YWxfb3V0PShSbj1BdC5zdGF0ZSkudG90YWw9MCxBdC5tc2c9IiIsUm4ud3JhcCYmKEF0LmFkbGVyPTEmUm4ud3JhcCksUm4ubW9kZT1nLFJuLmxhc3Q9MCxSbi5oYXZlZGljdD0wLFJuLmRtYXg9MzI3NjgsUm4uaGVhZD1udWxsLFJuLmhvbGQ9MCxSbi5iaXRzPTAsUm4ubGVu''@;'; put 'put ''Y29kZT1Sbi5sZW5keW49bmV3IGouQnVmMzIoeXQpLFJuLmRpc3Rjb2RlPVJuLmRpc3RkeW49bmV3IGouQnVmMzIoU3QpLFJuLnNhbmU9MSxSbi5iYWNrPS0xLHJlKTpfZX1mdW5jdGlvbiB1dChBdCl7dmFyIFJuO3JldHVybiBBdCYmQXQuc3RhdGU/KChSbj1BdC5zdGF0ZSkud3NpemU9MCxS''@;'; put 'put ''bi53aGF2ZT0wLFJuLnduZXh0PTAsTmUoQXQpKTpfZX1mdW5jdGlvbiBxdChBdCxSbil7dmFyIHN0LFV0O3JldHVybiFBdHx8IUF0LnN0YXRlfHwoVXQ9QXQuc3RhdGUsUm48MD8oc3Q9MCxSbj0tUm4pOihzdD0xKyhSbj4+NCksUm48NDgmJihSbiY9MTUpKSxSbiYmKFJuPDh8fFJuPjE1KSk/''@;'; put 'put ''X2U6KG51bGwhPT1VdC53aW5kb3cmJlV0LndiaXRzIT09Um4mJihVdC53aW5kb3c9bnVsbCksVXQud3JhcD1zdCxVdC53Yml0cz1Sbix1dChBdCkpfWZ1bmN0aW9uIFJ0KEF0LFJuKXt2YXIgc3QsVXQ7cmV0dXJuIEF0PyhVdD1uZXcgdHQsQXQuc3RhdGU9VXQsVXQud2luZG93PW51bGwsKHN0''@;'; put 'put ''PXF0KEF0LFJuKSkhPT1yZSYmKEF0LnN0YXRlPW51bGwpLHN0KTpfZX12YXIgUXQsc24sY2k9ITA7ZnVuY3Rpb24gUmkoQXQpe2lmKGNpKXt2YXIgUm47Zm9yKFF0PW5ldyBqLkJ1ZjMyKDUxMiksc249bmV3IGouQnVmMzIoMzIpLFJuPTA7Um48MTQ0OylBdC5sZW5zW1JuKytdPTg7Zm9yKDtS''@;'; put 'put ''bjwyNTY7KUF0LmxlbnNbUm4rK109OTtmb3IoO1JuPDI4MDspQXQubGVuc1tSbisrXT03O2Zvcig7Um48Mjg4OylBdC5sZW5zW1JuKytdPTg7Zm9yKEIoMSxBdC5sZW5zLDAsMjg4LFF0LDAsQXQud29yayx7Yml0czo5fSksUm49MDtSbjwzMjspQXQubGVuc1tSbisrXT01O0IoMixBdC5sZW5z''@;'; put 'put ''LDAsMzIsc24sMCxBdC53b3JrLHtiaXRzOjV9KSxjaT0hMX1BdC5sZW5jb2RlPVF0LEF0LmxlbmJpdHM9OSxBdC5kaXN0Y29kZT1zbixBdC5kaXN0Yml0cz01fVIuaW5mbGF0ZVJlc2V0PXV0LFIuaW5mbGF0ZVJlc2V0Mj1xdCxSLmluZmxhdGVSZXNldEtlZXA9TmUsUi5pbmZsYXRlSW5pdD1m''@;'; put 'put ''dW5jdGlvbiBQdChBdCl7cmV0dXJuIFJ0KEF0LDE1KX0sUi5pbmZsYXRlSW5pdDI9UnQsUi5pbmZsYXRlPWZ1bmN0aW9uIGZ0KEF0LFJuKXt2YXIgc3QsVXQscmksV2UsVHQsbnIsaHQseHQsam4scm4senQsaGksdW4sZm4sWHQsZW4sdWEsRWksdnIsV24sJGksZWksVmksTmksSWk9MCxRcj1u''@;'; put 'put ''ZXcgai5CdWY4KDQpLERhPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighQXR8fCFBdC5zdGF0ZXx8IUF0Lm91dHB1dHx8IUF0LmlucHV0JiYwIT09QXQuYXZhaWxfaW4pcmV0dXJuIF9lOzEyPT09KHN0PUF0LnN0YXRlKS5tb2RlJiYoc3QubW9k''@;'; put 'put ''ZT0xMyksVHQ9QXQubmV4dF9vdXQscmk9QXQub3V0cHV0LFdlPUF0Lm5leHRfaW4sVXQ9QXQuaW5wdXQseHQ9c3QuaG9sZCxqbj1zdC5iaXRzLHJuPW5yPUF0LmF2YWlsX2luLHp0PWh0PUF0LmF2YWlsX291dCxlaT1yZTtlOmZvcig7Oylzd2l0Y2goc3QubW9kZSl7Y2FzZSBnOmlmKDA9PT1z''@;'; put 'put ''dC53cmFwKXtzdC5tb2RlPTEzO2JyZWFrfWZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoMiZzdC53cmFwJiYzNTYxNT09PXh0KXtzdC5jaGVjaz0wLFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3Qu''@;'; put 'put ''Y2hlY2ssUXIsMiwwKSx4dD0wLGpuPTAsc3QubW9kZT0yO2JyZWFrfWlmKHN0LmZsYWdzPTAsc3QuaGVhZCYmKHN0LmhlYWQuZG9uZT0hMSksISgxJnN0LndyYXApfHwoKCgyNTUmeHQpPDw4KSsoeHQ+PjgpKSUzMSl7QXQubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixzdC5tb2RlPTMw''@;'; put 'put ''O2JyZWFrfWlmKDghPSgxNSZ4dCkpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoam4tPTQsJGk9OCsoMTUmKHh0Pj4+PTQpKSwwPT09c3Qud2JpdHMpc3Qud2JpdHM9JGk7ZWxzZSBpZigkaT5zdC53Yml0cyl7QXQubXNnPSJpbnZhbGlk''@;'; put 'put ''IHdpbmRvdyBzaXplIixzdC5tb2RlPTMwO2JyZWFrfXN0LmRtYXg9MTw8JGksQXQuYWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTUxMiZ4dD8xMDoxMix4dD0wLGpuPTA7YnJlYWs7Y2FzZSAyOmZvcig7am48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4r''@;'; put 'put ''PTh9aWYoc3QuZmxhZ3M9eHQsOCE9KDI1NSZzdC5mbGFncykpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmc3QuZmxhZ3Mpe0F0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixzdC5tb2RlPTMwO2JyZWFrfXN0Lmhl''@;'; put 'put ''YWQmJihzdC5oZWFkLnRleHQ9eHQ+PjgmMSksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLGpuPTAsc3QubW9kZT0zO2Nhc2UgMzpmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4''@;'; put 'put ''dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmhlYWQmJihzdC5oZWFkLnRpbWU9eHQpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LFFyWzJdPXh0Pj4+MTYmMjU1LFFyWzNdPXh0Pj4+MjQmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsNCwwKSkseHQ9MCxq''@;'; put 'put ''bj0wLHN0Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5oZWFkJiYoc3QuaGVhZC54ZmxhZ3M9MjU1Jnh0LHN0LmhlYWQub3M9eHQ+PjgpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14''@;'; put 'put ''dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxqbj0wLHN0Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZzdC5mbGFncyl7Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1zdC5sZW5ndGg9eHQsc3QuaGVhZCYm''@;'; put 'put ''KHN0LmhlYWQuZXh0cmFfbGVuPXh0KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsam49MH1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhPW51bGwpO3N0Lm1vZGU9NjtjYXNlIDY6aWYoMTAy''@;'; put 'put ''NCZzdC5mbGFncyYmKChoaT1zdC5sZW5ndGgpPm5yJiYoaGk9bnIpLGhpJiYoc3QuaGVhZCYmKCRpPXN0LmhlYWQuZXh0cmFfbGVuLXN0Lmxlbmd0aCxzdC5oZWFkLmV4dHJhfHwoc3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoc3QuaGVhZC5leHRyYV9sZW4pKSxqLmFycmF5U2V0KHN0LmhlYWQu''@;'; put 'put ''ZXh0cmEsVXQsV2UsaGksJGkpKSw1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSxzdC5sZW5ndGgtPWhpKSxzdC5sZW5ndGgpKWJyZWFrIGU7c3QubGVuZ3RoPTAsc3QubW9kZT03O2Nhc2UgNzppZigyMDQ4JnN0LmZsYWdzKXtpZigw''@;'; put 'put ''PT09bnIpYnJlYWsgZTtoaT0wO2RveyRpPVV0W1dlK2hpKytdLHN0LmhlYWQmJiRpJiZzdC5sZW5ndGg8NjU1MzYmJihzdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoJGkpKX13aGlsZSgkaSYmaGk8bnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssVXQs''@;'; put 'put ''aGksV2UpKSxuci09aGksV2UrPWhpLCRpKWJyZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5uYW1lPW51bGwpO3N0Lmxlbmd0aD0wLHN0Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZzdC5mbGFncyl7aWYoMD09PW5yKWJyZWFrIGU7aGk9MDtkb3skaT1VdFtXZStoaSsrXSxzdC5oZWFkJiYk''@;'; put 'put ''aSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRpKSl9d2hpbGUoJGkmJmhpPG5yKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSwkaSlicmVhayBlfWVsc2Ugc3QuaGVh''@;'; put 'put ''ZCYmKHN0LmhlYWQuY29tbWVudD1udWxsKTtzdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZzdC5mbGFncyl7Zm9yKDtqbjwxNjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1pZih4dCE9PSg2NTUzNSZzdC5jaGVjaykpe0F0Lm1zZz0iaGVhZGVyIGNyYyBt''@;'; put 'put ''aXNtYXRjaCIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9c3QuaGVhZCYmKHN0LmhlYWQuaGNyYz1zdC5mbGFncz4+OSYxLHN0LmhlYWQuZG9uZT0hMCksQXQuYWRsZXI9c3QuY2hlY2s9MCxzdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBl''@;'; put 'put ''O25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1BdC5hZGxlcj1zdC5jaGVjaz0kZSh4dCkseHQ9MCxqbj0wLHN0Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09c3QuaGF2ZWRpY3QpcmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2lu''@;'; put 'put ''PW5yLHN0LmhvbGQ9eHQsc3QuYml0cz1qbiwyO0F0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1Sbnx8Nj09PVJuKWJyZWFrIGU7Y2FzZSAxMzppZihzdC5sYXN0KXt4dD4+Pj03JmpuLGpuLT03JmpuLHN0Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtqbjwzOyl7aWYo''@;'; put 'put ''MD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN3aXRjaChzdC5sYXN0PTEmeHQsam4tPTEsMyYoeHQ+Pj49MSkpe2Nhc2UgMDpzdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihSaShzdCksc3QubW9kZT0yMCw2PT09Um4pe3h0Pj4+PTIsam4tPTI7YnJlYWsgZX1i''@;'; put 'put ''cmVhaztjYXNlIDI6c3QubW9kZT0xNzticmVhaztjYXNlIDM6QXQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLHN0Lm1vZGU9MzB9eHQ+Pj49Mixqbi09MjticmVhaztjYXNlIDE0OmZvcih4dD4+Pj03JmpuLGpuLT03JmpuO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRb''@;'; put 'put ''V2UrK108PGpuLGpuKz04fWlmKCg2NTUzNSZ4dCkhPSh4dD4+PjE2XjY1NTM1KSl7QXQubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lmxlbmd0aD02NTUzNSZ4dCx4dD0wLGpuPTAsc3QubW9kZT0xNSw2PT09Um4pYnJlYWsgZTtjYXNl''@;'; put 'put ''IDE1OnN0Lm1vZGU9MTY7Y2FzZSAxNjppZihoaT1zdC5sZW5ndGgpe2lmKGhpPm5yJiYoaGk9bnIpLGhpPmh0JiYoaGk9aHQpLDA9PT1oaSlicmVhayBlO2ouYXJyYXlTZXQocmksVXQsV2UsaGksVHQpLG5yLT1oaSxXZSs9aGksaHQtPWhpLFR0Kz1oaSxzdC5sZW5ndGgtPWhpO2JyZWFrfXN0''@;'; put 'put ''Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO2puPDE0Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHN0Lm5sZW49MjU3KygzMSZ4dCksam4tPTUsc3QubmRpc3Q9MSsoMzEmKHh0Pj4+PTUpKSxqbi09NSxzdC5uY29kZT00KygxNSYoeHQ+Pj49''@;'; put 'put ''NSkpLHh0Pj4+PTQsam4tPTQsc3Qubmxlbj4yODZ8fHN0Lm5kaXN0PjMwKXtBdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixzdC5tb2RlPTMwO2JyZWFrfXN0LmhhdmU9MCxzdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtzdC5oYXZlPHN0Lm5jb2RlOyl7Zm9yKDtq''@;'; put 'put ''bjwzOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0LmxlbnNbRGFbc3QuaGF2ZSsrXV09NyZ4dCx4dD4+Pj0zLGpuLT0zfWZvcig7c3QuaGF2ZTwxOTspc3QubGVuc1tEYVtzdC5oYXZlKytdXT0wO2lmKHN0LmxlbmNvZGU9c3QubGVuZHluLHN0Lmxl''@;'; put 'put ''bmJpdHM9NyxlaT1CKDAsc3QubGVucywwLDE5LHN0LmxlbmNvZGUsMCxzdC53b3JrLFZpPXtiaXRzOnN0LmxlbmJpdHN9KSxzdC5sZW5iaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfXN0LmhhdmU9MCxzdC5tb2RlPTE5''@;'; put 'put ''O2Nhc2UgMTk6Zm9yKDtzdC5oYXZlPHN0Lm5sZW4rc3QubmRpc3Q7KXtmb3IoO2VuPShJaT1zdC5sZW5jb2RlW3h0JigxPDxzdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsdWE9NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PWpuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytd''@;'; put 'put ''PDxqbixqbis9OH1pZih1YTwxNil4dD4+Pj1YdCxqbi09WHQsc3QubGVuc1tzdC5oYXZlKytdPXVhO2Vsc2V7aWYoMTY9PT11YSl7Zm9yKE5pPVh0KzI7am48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9aWYoeHQ+Pj49WHQsam4tPVh0LDA9PT1z''@;'; put 'put ''dC5oYXZlKXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9JGk9c3QubGVuc1tzdC5oYXZlLTFdLGhpPTMrKDMmeHQpLHh0Pj4+PTIsam4tPTJ9ZWxzZSBpZigxNz09PXVhKXtmb3IoTmk9WHQrMztqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25y''@;'; put 'put ''LS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1qbi09WHQsJGk9MCxoaT0zKyg3Jih4dD4+Pj1YdCkpLHh0Pj4+PTMsam4tPTN9ZWxzZXtmb3IoTmk9WHQrNztqbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxqbixqbis9OH1qbi09WHQsJGk9MCxoaT0xMSsoMTI3''@;'; put 'put ''Jih4dD4+Pj1YdCkpLHh0Pj4+PTcsam4tPTd9aWYoc3QuaGF2ZStoaT5zdC5ubGVuK3N0Lm5kaXN0KXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLHN0Lm1vZGU9MzA7YnJlYWt9Zm9yKDtoaS0tOylzdC5sZW5zW3N0LmhhdmUrK109JGl9fWlmKDMwPT09c3QubW9kZSlicmVh''@;'; put 'put ''aztpZigwPT09c3QubGVuc1syNTZdKXtBdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsc3QubW9kZT0zMDticmVha31pZihzdC5sZW5iaXRzPTksZWk9QigxLHN0LmxlbnMsMCxzdC5ubGVuLHN0LmxlbmNvZGUsMCxzdC53b3JrLFZpPXtiaXRzOnN0LmxlbmJp''@;'; put 'put ''dHN9KSxzdC5sZW5iaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0LmRpc3RiaXRzPTYsc3QuZGlzdGNvZGU9c3QuZGlzdGR5bixlaT1CKDIsc3QubGVucyxzdC5ubGVuLHN0Lm5kaXN0LHN0LmRpc3Rjb2Rl''@;'; put 'put ''LDAsc3Qud29yayxWaT17Yml0czpzdC5kaXN0Yml0c30pLHN0LmRpc3RiaXRzPVZpLmJpdHMsZWkpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0Lm1vZGU9MjAsNj09PVJuKWJyZWFrIGU7Y2FzZSAyMDpzdC5tb2RlPTIxO2Nhc2UgMjE6aWYo''@;'; put 'put ''bnI+PTYmJmh0Pj0yNTgpe0F0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2luPW5yLHN0LmhvbGQ9eHQsc3QuYml0cz1qbixZKEF0LHp0KSxUdD1BdC5uZXh0X291dCxyaT1BdC5vdXRwdXQsaHQ9QXQuYXZhaWxfb3V0LFdlPUF0Lm5leHRfaW4s''@;'; put 'put ''VXQ9QXQuaW5wdXQsbnI9QXQuYXZhaWxfaW4seHQ9c3QuaG9sZCxqbj1zdC5iaXRzLDEyPT09c3QubW9kZSYmKHN0LmJhY2s9LTEpO2JyZWFrfWZvcihzdC5iYWNrPTA7ZW49KElpPXN0LmxlbmNvZGVbeHQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKChYdD1J''@;'; put 'put ''aT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKGVuJiYhKDI0MCZlbikpe2ZvcihFaT1YdCx2cj1lbixXbj11YTtlbj0oSWk9c3QubGVuY29kZVtXbisoKHh0JigxPDxFaSt2ciktMSk+PkVpKV0pPj4+MTYmMjU1LHVhPTY1NTM1''@;'; put 'put ''JklpLCEoRWkrKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9eHQ+Pj49RWksam4tPUVpLHN0LmJhY2srPUVpfWlmKHh0Pj4+PVh0LGpuLT1YdCxzdC5iYWNrKz1YdCxzdC5sZW5ndGg9dWEsMD09PWVuKXtzdC5tb2RlPTI2''@;'; put 'put ''O2JyZWFrfWlmKDMyJmVuKXtzdC5iYWNrPS0xLHN0Lm1vZGU9MTI7YnJlYWt9aWYoNjQmZW4pe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0LmV4dHJhPTE1JmVuLHN0Lm1vZGU9MjI7Y2FzZSAyMjppZihzdC5leHRyYSl7Zm9yKE5pPXN0''@;'; put 'put ''LmV4dHJhO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lmxlbmd0aCs9eHQmKDE8PHN0LmV4dHJhKS0xLHh0Pj4+PXN0LmV4dHJhLGpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1zdC53YXM9c3QubGVuZ3RoLHN0Lm1vZGU9MjM7''@;'; put 'put ''Y2FzZSAyMzpmb3IoO2VuPShJaT1zdC5kaXN0Y29kZVt4dCYoMTw8c3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx1YT02NTUzNSZJaSwhKChYdD1JaT4+PjI0KTw9am4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKCEoMjQwJmVuKSl7Zm9yKEVp''@;'; put 'put ''PVh0LHZyPWVuLFduPXVhO2VuPShJaT1zdC5kaXN0Y29kZVtXbisoKHh0JigxPDxFaSt2ciktMSk+PkVpKV0pPj4+MTYmMjU1LHVhPTY1NTM1JklpLCEoRWkrKFh0PUlpPj4+MjQpPD1qbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8am4sam4rPTh9eHQ+Pj49RWks''@;'; put 'put ''am4tPUVpLHN0LmJhY2srPUVpfWlmKHh0Pj4+PVh0LGpuLT1YdCxzdC5iYWNrKz1YdCw2NCZlbil7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3Qub2Zmc2V0PXVhLHN0LmV4dHJhPTE1JmVuLHN0Lm1vZGU9MjQ7Y2FzZSAyNDppZihzdC5leHRyYSl7''@;'; put 'put ''Zm9yKE5pPXN0LmV4dHJhO2puPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fXN0Lm9mZnNldCs9eHQmKDE8PHN0LmV4dHJhKS0xLHh0Pj4+PXN0LmV4dHJhLGpuLT1zdC5leHRyYSxzdC5iYWNrKz1zdC5leHRyYX1pZihzdC5vZmZzZXQ+c3QuZG1h''@;'; put 'put ''eCl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31zdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWh0KWJyZWFrIGU7aWYoc3Qub2Zmc2V0PihoaT16dC1odCkpe2lmKChoaT1zdC5vZmZzZXQtaGkpPnN0LndoYXZlJiZzdC5zYW5lKXtBdC5t''@;'; put 'put ''c2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfXVuPWhpPnN0LnduZXh0P3N0LndzaXplLShoaS09c3Qud25leHQpOnN0LnduZXh0LWhpLGhpPnN0Lmxlbmd0aCYmKGhpPXN0Lmxlbmd0aCksZm49c3Qud2luZG93fWVsc2UgZm49cmksdW49VHQtc3Qu''@;'; put 'put ''b2Zmc2V0LGhpPXN0Lmxlbmd0aDtoaT5odCYmKGhpPWh0KSxodC09aGksc3QubGVuZ3RoLT1oaTtkb3tyaVtUdCsrXT1mblt1bisrXX13aGlsZSgtLWhpKTswPT09c3QubGVuZ3RoJiYoc3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09aHQpYnJlYWsgZTtyaVtUdCsrXT1zdC5sZW5n''@;'; put 'put ''dGgsaHQtLSxzdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoc3Qud3JhcCl7Zm9yKDtqbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHR8PVV0W1dlKytdPDxqbixqbis9OH1pZihBdC50b3RhbF9vdXQrPXp0LT1odCxzdC50b3RhbCs9enQsenQmJihBdC5hZGxlcj1zdC5jaGVjaz1z''@;'; put 'put ''dC5mbGFncz9MKHN0LmNoZWNrLHJpLHp0LFR0LXp0KTpQKHN0LmNoZWNrLHJpLHp0LFR0LXp0KSksenQ9aHQsKHN0LmZsYWdzP3h0OiRlKHh0KSkhPT1zdC5jaGVjayl7QXQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsc3QubW9kZT0zMDticmVha314dD0wLGpuPTB9c3QubW9kZT0yODtj''@;'; put 'put ''YXNlIDI4OmlmKHN0LndyYXAmJnN0LmZsYWdzKXtmb3IoO2puPDMyOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PGpuLGpuKz04fWlmKHh0IT09KDQyOTQ5NjcyOTUmc3QudG90YWwpKXtBdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLHN0Lm1vZGU9MzA7YnJl''@;'; put 'put ''YWt9eHQ9MCxqbj0wfXN0Lm1vZGU9Mjk7Y2FzZSAyOTplaT0xO2JyZWFrIGU7Y2FzZSAzMDplaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4gX2V9cmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1odCxBdC5uZXh0X2luPVdlLEF0LmF2YWlsX2lu''@;'; put 'put ''PW5yLHN0LmhvbGQ9eHQsc3QuYml0cz1qbiwoc3Qud3NpemV8fHp0IT09QXQuYXZhaWxfb3V0JiZzdC5tb2RlPDMwJiYoc3QubW9kZTwyN3x8NCE9PVJuKSkmJmZ1bmN0aW9uIGhuKEF0LFJuLHN0LFV0KXt2YXIgcmksV2U9QXQuc3RhdGU7cmV0dXJuIG51bGw9PT1XZS53aW5kb3cmJihXZS53''@;'; put 'put ''c2l6ZT0xPDxXZS53Yml0cyxXZS53bmV4dD0wLFdlLndoYXZlPTAsV2Uud2luZG93PW5ldyBqLkJ1ZjgoV2Uud3NpemUpKSxVdD49V2Uud3NpemU/KGouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVdlLndzaXplLFdlLndzaXplLDApLFdlLnduZXh0PTAsV2Uud2hhdmU9V2Uud3NpemUpOigo''@;'; put 'put ''cmk9V2Uud3NpemUtV2Uud25leHQpPlV0JiYocmk9VXQpLGouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVV0LHJpLFdlLnduZXh0KSwoVXQtPXJpKT8oai5hcnJheVNldChXZS53aW5kb3csUm4sc3QtVXQsVXQsMCksV2Uud25leHQ9VXQsV2Uud2hhdmU9V2Uud3NpemUpOihXZS53bmV4dCs9''@;'; put 'put ''cmksV2Uud25leHQ9PT1XZS53c2l6ZSYmKFdlLnduZXh0PTApLFdlLndoYXZlPFdlLndzaXplJiYoV2Uud2hhdmUrPXJpKSkpLDB9KEF0LEF0Lm91dHB1dCxBdC5uZXh0X291dCx6dC1BdC5hdmFpbF9vdXQpPyhzdC5tb2RlPTMxLC00KTooenQtPUF0LmF2YWlsX291dCxBdC50b3RhbF9pbis9''@;'; put 'put ''cm4tPUF0LmF2YWlsX2luLEF0LnRvdGFsX291dCs9enQsc3QudG90YWwrPXp0LHN0LndyYXAmJnp0JiYoQXQuYWRsZXI9c3QuY2hlY2s9c3QuZmxhZ3M/TChzdC5jaGVjayxyaSx6dCxBdC5uZXh0X291dC16dCk6UChzdC5jaGVjayxyaSx6dCxBdC5uZXh0X291dC16dCkpLEF0LmRhdGFfdHlw''@;'; put 'put ''ZT1zdC5iaXRzKyhzdC5sYXN0PzY0OjApKygxMj09PXN0Lm1vZGU/MTI4OjApKygyMD09PXN0Lm1vZGV8fDE1PT09c3QubW9kZT8yNTY6MCksKDA9PT1ybiYmMD09PXp0fHw0PT09Um4pJiZlaT09PXJlJiYoZWk9LTUpLGVpKX0sUi5pbmZsYXRlRW5kPWZ1bmN0aW9uIE9yKEF0KXtpZighQXR8''@;'; put 'put ''fCFBdC5zdGF0ZSlyZXR1cm4gX2U7dmFyIFJuPUF0LnN0YXRlO3JldHVybiBSbi53aW5kb3cmJihSbi53aW5kb3c9bnVsbCksQXQuc3RhdGU9bnVsbCxyZX0sUi5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uIFd0KEF0LFJuKXt2YXIgc3Q7cmV0dXJuIEF0JiZBdC5zdGF0ZSYmMiYoc3Q9QXQu''@;'; put 'put ''c3RhdGUpLndyYXA/KHN0LmhlYWQ9Um4sUm4uZG9uZT0hMSxyZSk6X2V9LFIuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2lu''@;'; put 'put ''ZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO3ZhciBqPUYoIi4uL3V0aWxzL2NvbW1vbiIpLHE9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCww''@;'; put 'put ''XSxRPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sWD1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1''@;'; put 'put ''LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sdGU9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtILmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24ob2UsZ2UsX2UsVGUsU2UsemUseixnKXt2YXIgbGUsd2UsVWUsUWUsb3QsWGUsSWUsSGUsRGUseT1nLmJpdHMseD0wLEM9MCxUPTAsVj0wLFU9MCxFPTAsbT0wLEE9MCxhZT0wLG5lPTAsTWU9bnVsbCx2ZT0wLEJlPW5ldyBqLkJ1ZjE2KDE2KSxBZT1uZXcgai5CdWYxNigxNiks''@;'; put 'put ''RmU9bnVsbCxSZT0wO2Zvcih4PTA7eDw9MTU7eCsrKUJlW3hdPTA7Zm9yKEM9MDtDPFRlO0MrKylCZVtnZVtfZStDXV0rKztmb3IoVT15LFY9MTU7Vj49MSYmMD09PUJlW1ZdO1YtLSk7aWYoVT5WJiYoVT1WKSwwPT09VilyZXR1cm4gU2VbemUrK109MjA5NzE1MjAsU2VbemUrK109MjA5NzE1''@;'; put 'put ''MjAsZy5iaXRzPTEsMDtmb3IoVD0xO1Q8ViYmMD09PUJlW1RdO1QrKyk7Zm9yKFU8VCYmKFU9VCksQT0xLHg9MTt4PD0xNTt4KyspaWYoQTw8PTEsKEEtPUJlW3hdKTwwKXJldHVybi0xO2lmKEE+MCYmKDA9PT1vZXx8MSE9PVYpKXJldHVybi0xO2ZvcihBZVsxXT0wLHg9MTt4PDE1O3grKylB''@;'; put 'put ''ZVt4KzFdPUFlW3hdK0JlW3hdO2ZvcihDPTA7QzxUZTtDKyspMCE9PWdlW19lK0NdJiYoeltBZVtnZVtfZStDXV0rK109Qyk7aWYoMD09PW9lPyhNZT1GZT16LFhlPTE5KToxPT09b2U/KE1lPXEsdmUtPTI1NyxGZT1RLFJlLT0yNTcsWGU9MjU2KTooTWU9WCxGZT10ZSxYZT0tMSksbmU9MCxD''@;'; put 'put ''PTAseD1ULG90PXplLEU9VSxtPTAsVWU9LTEsUWU9KGFlPTE8PFUpLTEsMT09PW9lJiZhZT44NTJ8fDI9PT1vZSYmYWU+NTkyKXJldHVybiAxO2Zvcig7Oyl7SWU9eC1tLHpbQ108WGU/KEhlPTAsRGU9eltDXSk6eltDXT5YZT8oSGU9RmVbUmUreltDXV0sRGU9TWVbdmUreltDXV0pOihIZT05''@;'; put 'put ''NixEZT0wKSxsZT0xPDx4LW0sVD13ZT0xPDxFO2Rve1NlW290KyhuZT4+bSkrKHdlLT1sZSldPUllPDwyNHxIZTw8MTZ8RGV9d2hpbGUoMCE9PXdlKTtmb3IobGU9MTw8eC0xO25lJmxlOylsZT4+PTE7aWYoMCE9PWxlPyhuZSY9bGUtMSxuZSs9bGUpOm5lPTAsQysrLDA9PS0tQmVbeF0pe2lm''@;'; put 'put ''KHg9PT1WKWJyZWFrO3g9Z2VbX2UreltDXV19aWYoeD5VJiYobmUmUWUpIT09VWUpe2ZvcigwPT09bSYmKG09VSksb3QrPVQsQT0xPDwoRT14LW0pO0UrbTxWJiYhKChBLT1CZVtFK21dKTw9MCk7KUUrKyxBPDw9MTtpZihhZSs9MTw8RSwxPT09b2UmJmFlPjg1Mnx8Mj09PW9lJiZhZT41OTIp''@;'; put 'put ''cmV0dXJuIDE7U2VbVWU9bmUmUWVdPVU8PDI0fEU8PDE2fG90LXplfX1yZXR1cm4gMCE9PW5lJiYoU2Vbb3QrbmVdPXgtbTw8MjR8NjQ8PDE2KSxnLmJpdHM9VSwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKEYsSCxSKXsidXNlIHN0cmljdCI7SC5leHBvcnRzPXsy''@;'; put 'put ''OiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJz''@;'; put 'put ''aW9uIn19LHt9XSwzODpbZnVuY3Rpb24oRixILFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgaj1GKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBXKGZ0KXtmb3IodmFyIE9yPWZ0Lmxlbmd0aDstLU9yPj0wOylmdFtPcl09MH12YXIgemU9MTUsej0xNixWPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEs''@;'; put 'put ''MSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLFU9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLEU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLG09WzE2LDE3LDE4LDAs''@;'; put 'put ''OCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGFlPW5ldyBBcnJheSg1NzYpO1coYWUpO3ZhciBuZT1uZXcgQXJyYXkoNjApO1cobmUpO3ZhciBsZT1uZXcgQXJyYXkoNTEyKTtXKGxlKTt2YXIgd2U9bmV3IEFycmF5KDI1Nik7Vyh3ZSk7dmFyIFVlPW5ldyBBcnJheSgyOSk7''@;'; put 'put ''VyhVZSk7dmFyIFFlPW5ldyBBcnJheSgzMCk7VyhRZSk7dmFyIE1lLHZlLFhlLG90PWZ1bmN0aW9uKGZ0LE9yLFd0LEF0LFJuKXt0aGlzLnN0YXRpY190cmVlPWZ0LHRoaXMuZXh0cmFfYml0cz1Pcix0aGlzLmV4dHJhX2Jhc2U9V3QsdGhpcy5lbGVtcz1BdCx0aGlzLm1heF9sZW5ndGg9Um4s''@;'; put 'put ''dGhpcy5oYXNfc3RyZWU9ZnQmJmZ0Lmxlbmd0aH0sQmU9ZnVuY3Rpb24oZnQsT3Ipe3RoaXMuZHluX3RyZWU9ZnQsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPU9yfTtmdW5jdGlvbiBBZShmdCl7cmV0dXJuIGZ0PDI1Nj9sZVtmdF06bGVbMjU2KyhmdD4+PjcpXX1mdW5jdGlvbiBG''@;'; put 'put ''ZShmdCxPcil7ZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1Pcj4+PjgmMjU1fWZ1bmN0aW9uIFJlKGZ0LE9yLFd0KXtmdC5iaV92YWxpZD56LVd0PyhmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxGZShmdCxm''@;'; put 'put ''dC5iaV9idWYpLGZ0LmJpX2J1Zj1Pcj4+ei1mdC5iaV92YWxpZCxmdC5iaV92YWxpZCs9V3Qteik6KGZ0LmJpX2J1Znw9T3I8PGZ0LmJpX3ZhbGlkJjY1NTM1LGZ0LmJpX3ZhbGlkKz1XdCl9ZnVuY3Rpb24gSWUoZnQsT3IsV3Qpe1JlKGZ0LFd0WzIqT3JdLFd0WzIqT3IrMV0pfWZ1bmN0aW9u''@;'; put 'put ''IEhlKGZ0LE9yKXt2YXIgV3Q9MDtkb3tXdHw9MSZmdCxmdD4+Pj0xLFd0PDw9MX13aGlsZSgtLU9yPjApO3JldHVybiBXdD4+PjF9ZnVuY3Rpb24gX3QoZnQsT3IsV3Qpe3ZhciBzdCxVdCxBdD1uZXcgQXJyYXkoemUrMSksUm49MDtmb3Ioc3Q9MTtzdDw9emU7c3QrKylBdFtzdF09Um49Um4r''@;'; put 'put ''V3Rbc3QtMV08PDE7Zm9yKFV0PTA7VXQ8PU9yO1V0Kyspe3ZhciByaT1mdFsyKlV0KzFdOzAhPT1yaSYmKGZ0WzIqVXRdPUhlKEF0W3JpXSsrLHJpKSl9fWZ1bmN0aW9uIEplKGZ0KXt2YXIgT3I7Zm9yKE9yPTA7T3I8Mjg2O09yKyspZnQuZHluX2x0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8''@;'; put 'put ''MzA7T3IrKylmdC5keW5fZHRyZWVbMipPcl09MDtmb3IoT3I9MDtPcjwxOTtPcisrKWZ0LmJsX3RyZWVbMipPcl09MDtmdC5keW5fbHRyZWVbNTEyXT0xLGZ0Lm9wdF9sZW49ZnQuc3RhdGljX2xlbj0wLGZ0Lmxhc3RfbGl0PWZ0Lm1hdGNoZXM9MH1mdW5jdGlvbiBsbihmdCl7ZnQuYmlfdmFs''@;'; put 'put ''aWQ+OD9GZShmdCxmdC5iaV9idWYpOmZ0LmJpX3ZhbGlkPjAmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBTdChmdCxPcixXdCxBdCl7dmFyIFJuPTIqT3Isc3Q9MipXdDtyZXR1cm4gZnRbUm5dPGZ0''@;'; put 'put ''W3N0XXx8ZnRbUm5dPT09ZnRbc3RdJiZBdFtPcl08PUF0W1d0XX1mdW5jdGlvbiBEdChmdCxPcixXdCl7Zm9yKHZhciBBdD1mdC5oZWFwW1d0XSxSbj1XdDw8MTtSbjw9ZnQuaGVhcF9sZW4mJihSbjxmdC5oZWFwX2xlbiYmU3QoT3IsZnQuaGVhcFtSbisxXSxmdC5oZWFwW1JuXSxmdC5kZXB0''@;'; put 'put ''aCkmJlJuKyssIVN0KE9yLEF0LGZ0LmhlYXBbUm5dLGZ0LmRlcHRoKSk7KWZ0LmhlYXBbV3RdPWZ0LmhlYXBbUm5dLFd0PVJuLFJuPDw9MTtmdC5oZWFwW1d0XT1BdH1mdW5jdGlvbiBpdChmdCxPcixXdCl7dmFyIEF0LFJuLFV0LHJpLHN0PTA7aWYoMCE9PWZ0Lmxhc3RfbGl0KWRve0F0PWZ0''@;'; put 'put ''LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3RdPDw4fGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3QrMV0sUm49ZnQucGVuZGluZ19idWZbZnQubF9idWYrc3RdLHN0KyssMD09PUF0P0llKGZ0LFJuLE9yKTooSWUoZnQsKFV0PXdlW1JuXSkrMjU2KzEsT3IpLDAhPT0ocmk9VltVdF0pJiZS''@;'; put 'put ''ZShmdCxSbi09VWVbVXRdLHJpKSxJZShmdCxVdD1BZSgtLUF0KSxXdCksMCE9PShyaT1VW1V0XSkmJlJlKGZ0LEF0LT1RZVtVdF0scmkpKX13aGlsZShzdDxmdC5sYXN0X2xpdCk7SWUoZnQsMjU2LE9yKX1mdW5jdGlvbiAkZShmdCxPcil7dmFyIFV0LHJpLFR0LFd0PU9yLmR5bl90cmVlLEF0''@;'; put 'put ''PU9yLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxSbj1Pci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHN0PU9yLnN0YXRfZGVzYy5lbGVtcyxXZT0tMTtmb3IoZnQuaGVhcF9sZW49MCxmdC5oZWFwX21heD01NzMsVXQ9MDtVdDxzdDtVdCsrKTAhPT1XdFsyKlV0XT8oZnQuaGVhcFsrK2Z0LmhlYXBfbGVu''@;'; put 'put ''XT1XZT1VdCxmdC5kZXB0aFtVdF09MCk6V3RbMipVdCsxXT0wO2Zvcig7ZnQuaGVhcF9sZW48MjspV3RbMiooVHQ9ZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1XZTwyPysrV2U6MCldPTEsZnQuZGVwdGhbVHRdPTAsZnQub3B0X2xlbi0tLFJuJiYoZnQuc3RhdGljX2xlbi09QXRbMipUdCsxXSk7''@;'; put 'put ''Zm9yKE9yLm1heF9jb2RlPVdlLFV0PWZ0LmhlYXBfbGVuPj4xO1V0Pj0xO1V0LS0pRHQoZnQsV3QsVXQpO1R0PXN0O2Rve1V0PWZ0LmhlYXBbMV0sZnQuaGVhcFsxXT1mdC5oZWFwW2Z0LmhlYXBfbGVuLS1dLER0KGZ0LFd0LDEpLHJpPWZ0LmhlYXBbMV0sZnQuaGVhcFstLWZ0LmhlYXBfbWF4''@;'; put 'put ''XT1VdCxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPXJpLFd0WzIqVHRdPVd0WzIqVXRdK1d0WzIqcmldLGZ0LmRlcHRoW1R0XT0oZnQuZGVwdGhbVXRdPj1mdC5kZXB0aFtyaV0/ZnQuZGVwdGhbVXRdOmZ0LmRlcHRoW3JpXSkrMSxXdFsyKlV0KzFdPVd0WzIqcmkrMV09VHQsZnQuaGVhcFsxXT1U''@;'; put 'put ''dCsrLER0KGZ0LFd0LDEpfXdoaWxlKGZ0LmhlYXBfbGVuPj0yKTtmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPWZ0LmhlYXBbMV0sZnVuY3Rpb24ga2UoZnQsT3Ipe3ZhciBUdCxucixodCx4dCxqbixybixXdD1Pci5keW5fdHJlZSxBdD1Pci5tYXhfY29kZSxSbj1Pci5zdGF0X2Rlc2Muc3RhdGlj''@;'; put 'put ''X3RyZWUsc3Q9T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxVdD1Pci5zdGF0X2Rlc2MuZXh0cmFfYml0cyxyaT1Pci5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxXZT1Pci5zdGF0X2Rlc2MubWF4X2xlbmd0aCx6dD0wO2Zvcih4dD0wO3h0PD16ZTt4dCsrKWZ0LmJsX2NvdW50W3h0XT0wO2ZvcihXdFsy''@;'; put 'put ''KmZ0LmhlYXBbZnQuaGVhcF9tYXhdKzFdPTAsVHQ9ZnQuaGVhcF9tYXgrMTtUdDw1NzM7VHQrKykoeHQ9V3RbMipXdFsyKihucj1mdC5oZWFwW1R0XSkrMV0rMV0rMSk+V2UmJih4dD1XZSx6dCsrKSxXdFsyKm5yKzFdPXh0LCEobnI+QXQpJiYoZnQuYmxfY291bnRbeHRdKyssam49MCxucj49''@;'; put 'put ''cmkmJihqbj1VdFtuci1yaV0pLGZ0Lm9wdF9sZW4rPShybj1XdFsyKm5yXSkqKHh0K2puKSxzdCYmKGZ0LnN0YXRpY19sZW4rPXJuKihSblsyKm5yKzFdK2puKSkpO2lmKDAhPT16dCl7ZG97Zm9yKHh0PVdlLTE7MD09PWZ0LmJsX2NvdW50W3h0XTspeHQtLTtmdC5ibF9jb3VudFt4dF0tLSxm''@;'; put 'put ''dC5ibF9jb3VudFt4dCsxXSs9MixmdC5ibF9jb3VudFtXZV0tLSx6dC09Mn13aGlsZSh6dD4wKTtmb3IoeHQ9V2U7MCE9PXh0O3h0LS0pZm9yKG5yPWZ0LmJsX2NvdW50W3h0XTswIT09bnI7KSEoKGh0PWZ0LmhlYXBbLS1UdF0pPkF0KSYmKFd0WzIqaHQrMV0hPT14dCYmKGZ0Lm9wdF9sZW4r''@;'; put 'put ''PSh4dC1XdFsyKmh0KzFdKSpXdFsyKmh0XSxXdFsyKmh0KzFdPXh0KSxuci0tKX19KGZ0LE9yKSxfdChXdCxXZSxmdC5ibF9jb3VudCl9ZnVuY3Rpb24gdHQoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0tMSxVdD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09PVV0JiYoV2U9MTM4LFR0PTMp''@;'; put 'put ''LE9yWzIqKFd0KzEpKzFdPTY1NTM1LEF0PTA7QXQ8PVd0O0F0Kyspc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdlJiZzdD09PVV0KSYmKHJpPFR0P2Z0LmJsX3RyZWVbMipzdF0rPXJpOjAhPT1zdD8oc3QhPT1SbiYmZnQuYmxfdHJlZVsyKnN0XSsrLGZ0LmJsX3RyZWVbMzJdKysp''@;'; put 'put ''OnJpPD0xMD9mdC5ibF90cmVlWzM0XSsrOmZ0LmJsX3RyZWVbMzZdKysscmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0zKTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpKX1mdW5jdGlvbiBOZShmdCxPcixXdCl7dmFyIEF0LHN0LFJuPS0xLFV0PU9yWzFdLHJpPTAsV2U9NyxU''@;'; put 'put ''dD00O2ZvcigwPT09VXQmJihXZT0xMzgsVHQ9MyksQXQ9MDtBdDw9V3Q7QXQrKylpZihzdD1VdCxVdD1PclsyKihBdCsxKSsxXSwhKCsrcmk8V2UmJnN0PT09VXQpKXtpZihyaTxUdClkb3tJZShmdCxzdCxmdC5ibF90cmVlKX13aGlsZSgwIT0tLXJpKTtlbHNlIDAhPT1zdD8oc3QhPT1SbiYm''@;'; put 'put ''KEllKGZ0LHN0LGZ0LmJsX3RyZWUpLHJpLS0pLEllKGZ0LDE2LGZ0LmJsX3RyZWUpLFJlKGZ0LHJpLTMsMikpOnJpPD0xMD8oSWUoZnQsMTcsZnQuYmxfdHJlZSksUmUoZnQscmktMywzKSk6KEllKGZ0LDE4LGZ0LmJsX3RyZWUpLFJlKGZ0LHJpLTExLDcpKTtyaT0wLFJuPXN0LDA9PT1VdD8o''@;'; put 'put ''V2U9MTM4LFR0PTMpOnN0PT09VXQ/KFdlPTYsVHQ9Myk6KFdlPTcsVHQ9NCl9fXZhciBQdD0hMTtmdW5jdGlvbiBRdChmdCxPcixXdCxBdCl7UmUoZnQsMCsoQXQ/MTowKSwzKSxmdW5jdGlvbiB5dChmdCxPcixXdCxBdCl7bG4oZnQpLEF0JiYoRmUoZnQsV3QpLEZlKGZ0LH5XdCkpLGouYXJy''@;'; put 'put ''YXlTZXQoZnQucGVuZGluZ19idWYsZnQud2luZG93LE9yLFd0LGZ0LnBlbmRpbmcpLGZ0LnBlbmRpbmcrPVd0fShmdCxPcixXdCwhMCl9Ui5fdHJfaW5pdD1mdW5jdGlvbiBjaShmdCl7UHR8fChmdW5jdGlvbiBudCgpe3ZhciBmdCxPcixXdCxBdCxSbixzdD1uZXcgQXJyYXkoemUrMSk7Zm9y''@;'; put 'put ''KFd0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09V3QsZnQ9MDtmdDwxPDxWW0F0XTtmdCsrKXdlW1d0KytdPUF0O2Zvcih3ZVtXdC0xXT1BdCxSbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoUWVbQXRdPVJuLGZ0PTA7ZnQ8MTw8VVtBdF07ZnQrKylsZVtSbisrXT1BdDtmb3IoUm4+Pj03''@;'; put 'put ''O0F0PDMwO0F0KyspZm9yKFFlW0F0XT1Sbjw8NyxmdD0wO2Z0PDE8PFVbQXRdLTc7ZnQrKylsZVsyNTYrUm4rK109QXQ7Zm9yKE9yPTA7T3I8PXplO09yKyspc3RbT3JdPTA7Zm9yKGZ0PTA7ZnQ8PTE0MzspYWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoO2Z0PD0yNTU7KWFlWzIqZnQr''@;'; put 'put ''MV09OSxmdCsrLHN0WzldKys7Zm9yKDtmdDw9Mjc5OylhZVsyKmZ0KzFdPTcsZnQrKyxzdFs3XSsrO2Zvcig7ZnQ8PTI4NzspYWVbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoX3QoYWUsMjg3LHN0KSxmdD0wO2Z0PDMwO2Z0KyspbmVbMipmdCsxXT01LG5lWzIqZnRdPUhlKGZ0LDUpO01l''@;'; put 'put ''PW5ldyBvdChhZSxWLDI1NywyODYsemUpLHZlPW5ldyBvdChuZSxVLDAsMzAsemUpLFhlPW5ldyBvdChuZXcgQXJyYXkoMCksRSwwLDE5LDcpfSgpLFB0PSEwKSxmdC5sX2Rlc2M9bmV3IEJlKGZ0LmR5bl9sdHJlZSxNZSksZnQuZF9kZXNjPW5ldyBCZShmdC5keW5fZHRyZWUsdmUpLGZ0LmJs''@;'; put 'put ''X2Rlc2M9bmV3IEJlKGZ0LmJsX3RyZWUsWGUpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTAsSmUoZnQpfSxSLl90cl9zdG9yZWRfYmxvY2s9UXQsUi5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gUmkoZnQsT3IsV3QsQXQpe3ZhciBSbixzdCxVdD0wO2Z0LmxldmVsPjA/KDI9PT1mdC5zdHJt''@;'; put 'put ''LmRhdGFfdHlwZSYmKGZ0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIFJ0KGZ0KXt2YXIgV3QsT3I9NDA5MzYyNDQ0Nztmb3IoV3Q9MDtXdDw9MzE7V3QrKyxPcj4+Pj0xKWlmKDEmT3ImJjAhPT1mdC5keW5fbHRyZWVbMipXdF0pcmV0dXJuIDA7aWYoMCE9PWZ0LmR5bl9sdHJlZVsxOF18fDAh''@;'; put 'put ''PT1mdC5keW5fbHRyZWVbMjBdfHwwIT09ZnQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoV3Q9MzI7V3Q8MjU2O1d0KyspaWYoMCE9PWZ0LmR5bl9sdHJlZVsyKld0XSlyZXR1cm4gMTtyZXR1cm4gMH0oZnQpKSwkZShmdCxmdC5sX2Rlc2MpLCRlKGZ0LGZ0LmRfZGVzYyksVXQ9ZnVuY3Rp''@;'; put 'put ''b24gdXQoZnQpe3ZhciBPcjtmb3IodHQoZnQsZnQuZHluX2x0cmVlLGZ0LmxfZGVzYy5tYXhfY29kZSksdHQoZnQsZnQuZHluX2R0cmVlLGZ0LmRfZGVzYy5tYXhfY29kZSksJGUoZnQsZnQuYmxfZGVzYyksT3I9MTg7T3I+PTMmJjA9PT1mdC5ibF90cmVlWzIqbVtPcl0rMV07T3ItLSk7cmV0''@;'; put 'put ''dXJuIGZ0Lm9wdF9sZW4rPTMqKE9yKzEpKzUrNSs0LE9yfShmdCksKHN0PWZ0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShSbj1mdC5vcHRfbGVuKzMrNz4+PjMpJiYoUm49c3QpKTpSbj1zdD1XdCs1LFd0KzQ8PVJuJiYtMSE9PU9yP1F0KGZ0LE9yLFd0LEF0KTo0PT09ZnQuc3RyYXRlZ3l8fHN0''@;'; put 'put ''PT09Um4/KFJlKGZ0LDIrKEF0PzE6MCksMyksaXQoZnQsYWUsbmUpKTooUmUoZnQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiBxdChmdCxPcixXdCxBdCl7dmFyIFJuO2ZvcihSZShmdCxPci0yNTcsNSksUmUoZnQsV3QtMSw1KSxSZShmdCxBdC00LDQpLFJuPTA7Um48QXQ7Um4rKylSZShmdCxm''@;'; put 'put ''dC5ibF90cmVlWzIqbVtSbl0rMV0sMyk7TmUoZnQsZnQuZHluX2x0cmVlLE9yLTEpLE5lKGZ0LGZ0LmR5bl9kdHJlZSxXdC0xKX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9jb2RlKzEsVXQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLEplKGZ0''@;'; put 'put ''KSxBdCYmbG4oZnQpfSxSLl90cl90YWxseT1mdW5jdGlvbiBobihmdCxPcixXdCl7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXRdPU9yPj4+OCYyNTUsZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmT3IsZnQucGVuZGluZ19i''@;'; put 'put ''dWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZXdCxmdC5sYXN0X2xpdCsrLDA9PT1Pcj9mdC5keW5fbHRyZWVbMipXdF0rKzooZnQubWF0Y2hlcysrLE9yLS0sZnQuZHluX2x0cmVlWzIqKHdlW1d0XSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqQWUoT3IpXSsrKSxmdC5sYXN0X2xpdD09''@;'; put 'put ''PWZ0LmxpdF9idWZzaXplLTF9LFIuX3RyX2FsaWduPWZ1bmN0aW9uIHNuKGZ0KXtSZShmdCwyLDMpLEllKGZ0LDI1NixhZSksZnVuY3Rpb24gRGUoZnQpezE2PT09ZnQuYmlfdmFsaWQ/KEZlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+PTgm''@;'; put 'put ''JihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09OCl9KGZ0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihGLEgsUil7InVzZSBzdHJpY3QiO0guZXhwb3J0cz1mdW5jdGlvbiBqKCl7dGhp''@;'; put 'put ''cy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFf''@;'; put 'put ''dHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw2MzU3ODooY2UsSixiKT0+eyFmdW5jdGlvbiBfKHcpe3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgRj0xMjAwLEg9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0''@;'; put 'put ''YWJsZT1iKDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPWIoNDI5MjQpKSk7Zm9yKHZhciBSPVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0saj0wO2o8PTg7KytqKVIucHVzaCgxMjUwK2opO3ZhciBQPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6''@;'; put 'put ''OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sTD1mdW5jdGlvbihTKXstMSE9Ui5pbmRleE9mKFMp''@;'; put 'put ''JiYoSD1QWzBdPVMpfSxCPWZ1bmN0aW9uKFMpe0Y9UyxMKFMpfTtmdW5jdGlvbiBXKCl7QigxMjAwKSxmdW5jdGlvbiBZKCl7TCgxMjUyKX0oKX1mdW5jdGlvbiBaKFMpe2Zvcih2YXIgTz1bXSxrPTAsSz1TLmxlbmd0aDtrPEs7KytrKU9ba109Uy5jaGFyQ29kZUF0KGspO3JldHVybiBPfXZh''@;'; put 'put ''ciBYPWZ1bmN0aW9uKFMpe3ZhciBPPVMuY2hhckNvZGVBdCgwKSxrPVMuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1PJiYyNTQ9PWs/ZnVuY3Rpb24gcShTKXtmb3IodmFyIE89W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKU9ba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQo''@;'; put 'put ''MiprKSsoUy5jaGFyQ29kZUF0KDIqaysxKTw8OCkpO3JldHVybiBPLmpvaW4oIiIpfShTLnNsaWNlKDIpKToyNTQ9PU8mJjI1NT09az9mdW5jdGlvbiBRKFMpe2Zvcih2YXIgTz1bXSxrPTA7azxTLmxlbmd0aD4+MTsrK2spT1trXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFMuY2hhckNvZGVBdCgy''@;'; put 'put ''KmsrMSkrKFMuY2hhckNvZGVBdCgyKmspPDw4KSk7cmV0dXJuIE8uam9pbigiIil9KFMuc2xpY2UoMikpOjY1Mjc5PT1PP1Muc2xpY2UoMSk6U30sdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoTyl9LHJlPWZ1bmN0aW9uKE8pe3JldHVybiBTdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKE8pfTt0eXBlb2YgY3B0YWJsZTwidSImJihCPWZ1bmN0aW9uKFMpe0Y9UyxMKFMpfSxYPWZ1bmN0aW9uKFMpe3JldHVybiAyNTU9PT1TLmNoYXJDb2RlQXQoMCkmJjI1ND09PVMuY2hhckNvZGVBdCgxKT9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFooUy5zbGljZSgyKSkpOlN9''@;'; put 'put ''LHRlPWZ1bmN0aW9uKE8pe3JldHVybiAxMjAwPT09Rj9TdHJpbmcuZnJvbUNoYXJDb2RlKE8pOmNwdGFibGUudXRpbHMuZGVjb2RlKEYsWzI1NSZPLE8+PjhdKVswXX0scmU9ZnVuY3Rpb24oTyl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKEgsW09dKVswXX0pO3ZhciBvZT1udWxsLF9l''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIE89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtyZXR1cm57ZW5jb2RlOmZ1bmN0aW9uKGspe2Zvcih2YXIgSz0iIixlZT0wLHNlPTAsbWU9MCxwZT0wLGJlPTAsUGU9MCxWZT0wLFllPTA7''@;'; put 'put ''WWU8ay5sZW5ndGg7KXBlPShlZT1rLmNoYXJDb2RlQXQoWWUrKykpPj4yLGJlPSgzJmVlKTw8NHwoc2U9ay5jaGFyQ29kZUF0KFllKyspKT4+NCxQZT0oMTUmc2UpPDwyfChtZT1rLmNoYXJDb2RlQXQoWWUrKykpPj42LFZlPTYzJm1lLGlzTmFOKHNlKT9QZT1WZT02NDppc05hTihtZSkmJihW''@;'; put 'put ''ZT02NCksSys9Ty5jaGFyQXQocGUpK08uY2hhckF0KGJlKStPLmNoYXJBdChQZSkrTy5jaGFyQXQoVmUpO3JldHVybiBLfSxkZWNvZGU6ZnVuY3Rpb24oSyl7dmFyIGVlPSIiLGJlPTAsUGU9MCxWZT0wLFllPTA7Sz1LLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgZXQ9MDtl''@;'; put 'put ''dDxLLmxlbmd0aDspYmU9Ty5pbmRleE9mKEsuY2hhckF0KGV0KyspKSxQZT1PLmluZGV4T2YoSy5jaGFyQXQoZXQrKykpLGVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGJlPDwyfFBlPj40KSw2NCE9PShWZT1PLmluZGV4T2YoSy5jaGFyQXQoZXQrKykpKSYmKGVlKz1TdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKCgxNSZQZSk8PDR8VmU+PjIpKSw2NCE9PShZZT1PLmluZGV4T2YoSy5jaGFyQXQoZXQrKykpKSYmKGVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJlZlKTw8NnxZZSkpO3JldHVybiBlZX19fSgpLFRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBw''@;'; put 'put ''cm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsU2U9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgemU9IUJ1ZmZlci5mcm9tO2lmKCF6ZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHt6ZT0hMH1TZT16ZT9mdW5jdGlv''@;'; put 'put ''bihTLE8pe3JldHVybiBPP25ldyBCdWZmZXIoUyxPKTpuZXcgQnVmZmVyKFMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFs''@;'; put 'put ''bG9jVW5zYWZlPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSl9ZnVuY3Rpb24geihTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jKFMpOm5ldyBBcnJheShTKX1mdW5jdGlvbiBnKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2NVbnNhZmUoUyk6bmV3IEFycmF5KFMpfXZhciB5PWZ1''@;'; put 'put ''bmN0aW9uKE8pe3JldHVybiBUZT9TZShPLCJiaW5hcnkiKTpPLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIDI1NSZrLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24geChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiB5KFMpO2Zvcih2YXIgTz1uZXcgQXJyYXlC''@;'; put 'put ''dWZmZXIoUy5sZW5ndGgpLGs9bmV3IFVpbnQ4QXJyYXkoTyksSz0wO0shPVMubGVuZ3RoOysrSylrW0tdPTI1NSZTLmNoYXJDb2RlQXQoSyk7cmV0dXJuIE99ZnVuY3Rpb24gQyhTKXtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBTLm1hcChmdW5jdGlvbihLKXtyZXR1cm4gU3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZShLKX0pLmpvaW4oIiIpO2Zvcih2YXIgTz1bXSxrPTA7azxTLmxlbmd0aDsrK2spT1trXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBPLmpvaW4oIiIpfWZ1bmN0aW9uIFYoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''c3VwcG9ydGVkIik7aWYoUyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBWKG5ldyBVaW50OEFycmF5KFMpKTtmb3IodmFyIE89bmV3IEFycmF5KFMubGVuZ3RoKSxrPTA7azxTLmxlbmd0aDsrK2spT1trXT1TW2tdO3JldHVybiBPfXZhciBVPWZ1bmN0aW9uKFMpe3ZhciBPPVtdO3Jl''@;'; put 'put ''dHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7QXJyYXkuaXNBcnJheShrKT9PPU8uY29uY2F0KGspOih0eXBlb2YgVWludDhBcnJheTwidSImJmsgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZrIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoTz1PLmNv''@;'; put 'put ''bmNhdChWKGspKSl9KSxPfSxFPS9cdTAwMDAvZyxtPS9bXHUwMDAxLVx1MDAwNl0vZyxBPXt9LGFlPWZ1bmN0aW9uKE8pe2Z1bmN0aW9uIGsoY24pe2Zvcih2YXIgRW49IiIsVW49Y24ubGVuZ3RoLTE7VW4+PTA7KUVuKz1jbi5jaGFyQXQoVW4tLSk7cmV0dXJuIEVufWZ1bmN0aW9uIEsoY24s''@;'; put 'put ''RW4pe2Zvcih2YXIgVW49IiI7VW4ubGVuZ3RoPEVuOylVbis9Y247cmV0dXJuIFVufWZ1bmN0aW9uIGVlKGNuLEVuKXt2YXIgVW49IiIrY247cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46SygiMCIsRW4tVW4ubGVuZ3RoKStVbn1mdW5jdGlvbiBzZShjbixFbil7dmFyIFVuPSIiK2NuO3JldHVy''@;'; put 'put ''biBVbi5sZW5ndGg+PUVuP1VuOksoIiAiLEVuLVVuLmxlbmd0aCkrVW59ZnVuY3Rpb24gbWUoY24sRW4pe3ZhciBVbj0iIitjbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpVbitLKCIgIixFbi1Vbi5sZW5ndGgpfU8udmVyc2lvbj0iMS4yMDIxMDcyNi4xIjt2YXIgUGU9TWF0aC5wb3coMiwz''@;'; put 'put ''Mik7ZnVuY3Rpb24gVmUoY24sRW4pe3JldHVybiBjbj5QZXx8Y248LVBlP2Z1bmN0aW9uIHBlKGNuLEVuKXt2YXIgVW49IiIrTWF0aC5yb3VuZChjbik7cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46SygiMCIsRW4tVW4ubGVuZ3RoKStVbn0oY24sRW4pOmZ1bmN0aW9uIGJlKGNuLEVuKXt2YXIg''@;'; put 'put ''VW49IiIrY247cmV0dXJuIFVuLmxlbmd0aD49RW4/VW46SygiMCIsRW4tVW4ubGVuZ3RoKStVbn0oTWF0aC5yb3VuZChjbiksRW4pfWZ1bmN0aW9uIFllKGNuLEVuKXtyZXR1cm4gY24ubGVuZ3RoPj03KyhFbj1Fbnx8MCkmJjEwMz09KDMyfGNuLmNoYXJDb2RlQXQoRW4pKSYmMTAxPT0oMzJ8''@;'; put 'put ''Y24uY2hhckNvZGVBdChFbisxKSkmJjExMD09KDMyfGNuLmNoYXJDb2RlQXQoRW4rMikpJiYxMDE9PSgzMnxjbi5jaGFyQ29kZUF0KEVuKzMpKSYmMTE0PT0oMzJ8Y24uY2hhckNvZGVBdChFbis0KSkmJjk3PT0oMzJ8Y24uY2hhckNvZGVBdChFbis1KSkmJjEwOD09KDMyfGNuLmNoYXJDb2Rl''@;'; put 'put ''QXQoRW4rNikpfWZ1bmN0aW9uIGV0KGNuKXtmb3IodmFyIEVuPVtdLFVuPU9iamVjdC5rZXlzKGNuKSx4aT0wO3hpIT09VW4ubGVuZ3RoOysreGkpRW5bY25bVW5beGldXV09VW5beGldO3JldHVybiBFbn12YXIgY3Q9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIs''@;'; put 'put ''IlR1ZXNkYXkiXSxbIldlZCIsIldlZG5lc2RheSJdLFsiVGh1IiwiVGh1cnNkYXkiXSxbIkZyaSIsIkZyaWRheSJdLFsiU2F0IiwiU2F0dXJkYXkiXV0sRXQ9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXBy''@;'; put 'put ''IiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRl''@;'; put 'put ''YyIsIkRlY2VtYmVyIl1dO2Z1bmN0aW9uIGF0KGNuKXtjblswXT0iR2VuZXJhbCIsY25bMV09IjAiLGNuWzJdPSIwLjAwIixjblszXT0iIywjIzAiLGNuWzRdPSIjLCMjMC4wMCIsY25bOV09IjAlIixjblsxMF09IjAuMDAlIixjblsxMV09IjAuMDBFKzAwIixjblsxMl09IiMgPy8/Iixjblsx''@;'; put 'put ''M109IiMgPz8vPz8iLGNuWzE0XT0ibS9kL3l5IixjblsxNV09ImQtbW1tLXl5IixjblsxNl09ImQtbW1tIixjblsxN109Im1tbS15eSIsY25bMThdPSJoOm1tIEFNL1BNIixjblsxOV09Img6bW06c3MgQU0vUE0iLGNuWzIwXT0iaDptbSIsY25bMjFdPSJoOm1tOnNzIixjblsyMl09Im0vZC95''@;'; put 'put ''eSBoOm1tIixjblszN109IiMsIyMwIDsoIywjIzApIixjblszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGNuWzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIsY25bNDBdPSIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLGNuWzQ1XT0ibW06c3MiLGNuWzQ2XT0iW2hdOm1tOnNzIixjbls0N109''@;'; put 'put ''Im1tc3MuMCIsY25bNDhdPSIjIzAuMEUrMCIsY25bNDldPSJAIixjbls1Nl09JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJyxGbihjbil9dmFyIGJ0PXt9O2F0KGJ0KTt2YXIganQ9W10sa3Q9MDtmb3Ioa3Q9NTtrdDw9ODsrK2t0''@;'; put 'put ''KWp0W2t0XT0zMitrdDtmb3Ioa3Q9MjM7a3Q8PTI2Oysra3QpanRba3RdPTA7Zm9yKGt0PTI3O2t0PD0zMTsrK2t0KWp0W2t0XT0xNDtmb3Ioa3Q9NTA7a3Q8PTU4Oysra3QpanRba3RdPTE0O2ZvcihrdD01OTtrdDw9NjI7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0''@;'; put 'put ''KWp0W2t0XT1rdC01ODtmb3Ioa3Q9NzI7a3Q8PTc1Oysra3QpanRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClqdFtrdF09a3QtNTc7Zm9yKGt0PTc2O2t0PD03ODsrK2t0KWp0W2t0XT1rdC01Njtmb3Ioa3Q9Nzk7a3Q8PTgxOysra3QpanRba3RdPWt0LTM0O3ZhciBPdD1bXTtm''@;'; put 'put ''dW5jdGlvbiBLdChjbixFbixVbil7Zm9yKHZhciB4aT1jbjwwPy0xOjEsb3I9Y24qeGksT2k9MCxTcj0xLFBpPTAsWmE9MSxIaT0wLG1hPTAsRGk9TWF0aC5mbG9vcihvcik7SGk8RW4mJihQaT0oRGk9TWF0aC5mbG9vcihvcikpKlNyK09pLG1hPURpKkhpK1phLCEob3ItRGk8NWUtOCkpOylv''@;'; put 'put ''cj0xLyhvci1EaSksT2k9U3IsU3I9UGksWmE9SGksSGk9bWE7aWYobWE+RW4mJihIaT5Fbj8obWE9WmEsUGk9T2kpOihtYT1IaSxQaT1TcikpLCFVbilyZXR1cm5bMCx4aSpQaSxtYV07dmFyIGNzPU1hdGguZmxvb3IoeGkqUGkvbWEpO3JldHVybltjcyx4aSpQaS1jcyptYSxtYV19ZnVuY3Rp''@;'; put 'put ''b24gVG4oY24sRW4sVW4pe2lmKGNuPjI5NTg0NjV8fGNuPDApcmV0dXJuIG51bGw7dmFyIHhpPTB8Y24sb3I9TWF0aC5mbG9vcig4NjQwMCooY24teGkpKSxPaT0wLFNyPVtdLFBpPXtEOnhpLFQ6b3IsdTo4NjQwMCooY24teGkpLW9yLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYo''@;'; put 'put ''TWF0aC5hYnMoUGkudSk8MWUtNiYmKFBpLnU9MCksRW4mJkVuLmRhdGUxOTA0JiYoeGkrPTE0NjIpLFBpLnU+Ljk5OTkmJihQaS51PTAsODY0MDA9PSsrb3ImJihQaS5UPW9yPTAsKyt4aSwrK1BpLkQpKSw2MD09PXhpKVNyPVVuP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxPaT0zO2Vsc2Ug''@;'; put 'put ''aWYoMD09PXhpKVNyPVVuP1sxMzE3LDgsMjldOlsxOTAwLDEsMF0sT2k9NjtlbHNle3hpPjYwJiYtLXhpO3ZhciBaYT1uZXcgRGF0ZSgxOTAwLDAsMSk7WmEuc2V0RGF0ZShaYS5nZXREYXRlKCkreGktMSksU3I9W1phLmdldEZ1bGxZZWFyKCksWmEuZ2V0TW9udGgoKSsxLFphLmdldERhdGUo''@;'; put 'put ''KV0sT2k9WmEuZ2V0RGF5KCkseGk8NjAmJihPaT0oT2krNiklNyksVW4mJihPaT1mdW5jdGlvbiBzbyhjbixFbil7RW5bMF0tPTU4MTt2YXIgVW49Y24uZ2V0RGF5KCk7cmV0dXJuIGNuPDYwJiYoVW49KFVuKzYpJTcpLFVufShaYSxTcikpfXJldHVybiBQaS55PVNyWzBdLFBpLm09U3JbMV0s''@;'; put 'put ''UGkuZD1TclsyXSxQaS5TPW9yJTYwLG9yPU1hdGguZmxvb3Iob3IvNjApLFBpLk09b3IlNjAsb3I9TWF0aC5mbG9vcihvci82MCksUGkuSD1vcixQaS5xPU9pLFBpfU90WzVdPU90WzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsT3RbNl09T3RbNjRdPSciJCIjLCMjMF8pO1tSZWRd''@;'; put 'put ''XFwoIiQiIywjIzBcXCknLE90WzddPU90WzY1XT0nIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsT3RbOF09T3RbNjZdPSciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLE90WzQxXT0nXygqICMsIyMwXyk7XygqIFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBf''@;'; put 'put ''KScsT3RbNDJdPSdfKCIkIiogIywjIzBfKTtfKCIkIiogXFwoIywjIzBcXCk7XygiJCIqICItIl8pO18oQF8pJyxPdFs0M109J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsT3RbNDRdPSdfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogXFwoIywj''@;'; put 'put ''IzAuMDBcXCk7XygiJCIqICItIj8/Xyk7XyhAXyknLE8ucGFyc2VfZGF0ZV9jb2RlPVRuO3ZhciBycj1uZXcgRGF0ZSgxODk5LDExLDMxLDAsMCwwKSxTbj1yci5nZXRUaW1lKCksbHI9bmV3IERhdGUoMTkwMCwyLDEsMCwwLDApO2Z1bmN0aW9uIFhuKGNuLEVuKXt2YXIgVW49Y24uZ2V0VGlt''@;'; put 'put ''ZSgpO3JldHVybiBFbj9Vbi09MTI2MjMwNGU1OmNuPj1sciYmKFVuKz04NjRlNSksKFVuLShTbis2ZTQqKGNuLmdldFRpbWV6b25lT2Zmc2V0KCktcnIuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgQm49IiIsZnI9eyJlbi11cyI6e3k6InkiLGQ6ImQiLCIsIjoiLCIsIi4iOiIu''@;'; put 'put ''IixkYXRlOiJfLyJ9LCJkZS1kZSI6e3k6ImoiLGQ6InQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLiJ9LCJpdC1pdCI6e3k6InkiLGQ6ImQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLyJ9fSx5cj1mcltCbi50b0xvd2VyQ2FzZSgpXXx8ZnJbImVuLXVzIl0sZXI9ZXQoeXIpLE1pPSIkIixG''@;'; put 'put ''aT0iIixMaT0iLCIsa3I9Ii4iLFZuPSIvIjtmdW5jdGlvbiBGbihjbil7c3dpdGNoKChCbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNuWzI3XT0iWyQtNDA0XWUvbS9kIixjblsyOF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzI5XT0nWyQtNDA0''@;'; put 'put ''XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzBdPSdtIi8iZCIvInl5JyxjblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzJdPSdoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bMzNdPSdoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGNuWzM0''@;'; put 'put ''XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzZdPSJbJC00MDRdZS9tL2QiLGNuWzUwXT0iWyQtNDA0XWUvbS9kIixjbls1''@;'; put 'put ''MV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzUyXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsY25bNTNdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25b''@;'; put 'put ''NTRdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxjbls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGNuWzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGNu''@;'; put 'put ''WzU3XT0iWyQtNDA0XWUvbS9kIixjbls1OF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiemgtY24iOmNuWzI3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxjblsyOF09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bMjldPSdtIlx1NjcwOCJkIlx1NjVl''@;'; put 'put ''NSInLGNuWzMwXT0nbSItImQiLSJ5eScsY25bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzMyXT0naCJcdTY1ZjYibW0iXHU1MjA2IicsY25bMzNdPSdoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4''@;'; put 'put ''IGgiXHU2NWY2Im1tIlx1NTIwNiInLGNuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bMzZdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzUwXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxjbls1MV09J20iXHU2NzA4''@;'; put 'put ''ImQiXHU2NWU1IicsY25bNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxjbls1NF09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLGNuWzU2XT0nXHU0''@;'; put 'put ''ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsY25bNTddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzU4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImphLWpwIjpjblsyN109J1skLTQxMV1nZSIuIm0iLiJkJyxjblsyOF09''@;'; put 'put ''J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzI5XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzBdPSdtIi8iZCIvInl5JyxjblszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bMzJdPSdoIlx1NjY0MiJt''@;'; put 'put ''bSJcdTUyMDYiJyxjblszM109J2giXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxjblszNF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsY25bMzVdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzM2XT0nWyQtNDExXWdlIi4ibSIuImQnLGNuWzUwXT0nWyQtNDExXWdlIi4ibSIuImQnLGNu''@;'; put 'put ''WzUxXT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsY25bNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGNuWzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxjbls1NF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGNuWzU1XT0neXl5eSJc''@;'; put 'put ''dTVlNzQibSJcdTY3MDgiJyxjbls1Nl09J20iXHU2NzA4ImQiXHU2NWU1IicsY25bNTddPSdbJC00MTFdZ2UiLiJtIi4iZCcsY25bNThdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImtvLWtyIjpjblsyN109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3''@;'; put 'put ''MDgiIGRkIlx1NjVlNSInLGNuWzI4XT0ibW0tZGQiLGNuWzI5XT0ibW0tZGQiLGNuWzMwXT0ibW0tZGQteXkiLGNuWzMxXT0neXl5eSJcdWIxNDQiIG1tIlx1YzZkNCIgZGQiXHVjNzdjIicsY25bMzJdPSdoIlx1YzJkYyIgbW0iXHViZDg0IicsY25bMzNdPSdoIlx1YzJkYyIgbW0iXHViZDg0''@;'; put 'put ''IiBzcyJcdWNkMDgiJyxjblszNF09Inl5eXktbW0tZGQiLGNuWzM1XT0ieXl5eS1tbS1kZCIsY25bMzZdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxjbls1MF09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGNuWzUxXT0ibW0tZGQiLGNuWzUyXT0i''@;'; put 'put ''eXl5eS1tbS1kZCIsY25bNTNdPSJ5eXl5LW1tLWRkIixjbls1NF09Im1tLWRkIixjbls1NV09Inl5eXktbW0tZGQiLGNuWzU2XT0ieXl5eS1tbS1kZCIsY25bNTddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxjbls1OF09Im1tLWRkIjticmVhaztjYXNlInRoLXRoIjpj''@;'; put 'put ''bls1OV09JyJ0IjAnLGNuWzYwXT0nInQiMC4wMCcsY25bNjFdPScidCIjLCMjMCcsY25bNjJdPScidCIjLCMjMC4wMCcsY25bNjddPSJ0MCUiLGNuWzY4XT0idDAuMDAlIixjbls2OV09InQjID8vPyIsY25bNzBdPSJ0IyA/Py8/PyIsY25bNzFdPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJc''@;'; put 'put ''dTBlMWJcdTBlMWJcdTBlMWInLGNuWzcyXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxjbls3M109J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCcsY25bNzRdPSdcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGNuWzc1XT0nXHUwZTBh''@;'; put 'put ''IjoiXHUwZTE5XHUwZTE5Jyxjbls3Nl09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsY25bNzddPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWIgXHUwZTBhIjoiXHUwZTE5XHUwZTE5Jyxjbls3OF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUx''@;'; put 'put ''N1x1MGUxNycsY25bNzldPSdbXHUwZTBhXVx1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsY25bODBdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcuMCcsY25bODFdPSJkL20vYmIifX1PLl9nZW5lcmFsX2ludD1mdW5jdGlvbiBaaShjbil7cmV0dXJuIGNuLnRvU3RyaW5nKDEwKX07''@;'; put 'put ''dmFyIGJpPWZ1bmN0aW9uKCl7dmFyIEVuPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKSQvO2Z1bmN0aW9uIFVuKEhpKXtyZXR1cm4tMT09SGkuaW5kZXhPZigiLiIpP0hpOkhpLnJlcGxhY2UoRW4sIiQxIil9dmFyIHhpPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKVtFZV0vLG9yPS8oRVsrLV0p''@;'; put 'put ''KFxkKSQvO3JldHVybiBmdW5jdGlvbihtYSl7dmFyIERpPWZ1bmN0aW9uIFphKEhpKXt2YXIgRGksbWE9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhIaSkpKk1hdGguTE9HMTBFKTtyZXR1cm4gRGk9bWE+PS00JiZtYTw9LTE/SGkudG9QcmVjaXNpb24oMTArbWEpOk1hdGguYWJzKG1h''@;'; put 'put ''KTw9OT9mdW5jdGlvbiBTcihIaSl7dmFyIG1hPUhpPDA/MTI6MTEsRGk9VW4oSGkudG9GaXhlZCgxMikpO3JldHVybiBEaS5sZW5ndGg8PW1hfHwoRGk9SGkudG9QcmVjaXNpb24oMTApKS5sZW5ndGg8PW1hP0RpOkhpLnRvRXhwb25lbnRpYWwoNSl9KEhpKToxMD09PW1hP0hpLnRvRml4ZWQo''@;'; put 'put ''MTApLnN1YnN0cigwLDEyKTpmdW5jdGlvbiBQaShIaSl7dmFyIG1hPVVuKEhpLnRvRml4ZWQoMTEpKTtyZXR1cm4gbWEubGVuZ3RoPihIaTwwPzEyOjExKXx8IjAiPT09bWF8fCItMCI9PT1tYT9IaS50b1ByZWNpc2lvbig2KTptYX0oSGkpLFVuKGZ1bmN0aW9uIE9pKEhpKXtyZXR1cm4tMT09''@;'; put 'put ''SGkuaW5kZXhPZigiRSIpP0hpOkhpLnJlcGxhY2UoeGksIiQxRSIpLnJlcGxhY2Uob3IsIiQxMCQyIil9KERpLnRvVXBwZXJDYXNlKCkpKX0obWEpO3JldHVybiIsIj09PUxpJiYiLiI9PT1rcj9EaTpEaS5yZXBsYWNlKC9bLC5dL2csZnVuY3Rpb24oY3Mpe3JldHVybiIsIj09Y3M/TGk6a3J9''@;'; put 'put ''KX19KCk7ZnVuY3Rpb24gX2EoY24sRW4pe3N3aXRjaCh0eXBlb2YgY24pe2Nhc2Uic3RyaW5nIjpyZXR1cm4gY247Y2FzZSJib29sZWFuIjpyZXR1cm4gY24/IlRSVUUiOiJGQUxTRSI7Y2FzZSJudW1iZXIiOnJldHVybigwfGNuKT09PWNuP2NuLnRvU3RyaW5nKDEwKTpiaShjbik7Y2FzZSJ1''@;'; put 'put ''bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1jbilyZXR1cm4iIjtpZihjbiBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGJ1KDE0LFhuKGNuLEVuJiZFbi5kYXRlMTkwNCksRW4pfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3Jt''@;'; put 'put ''YXQ6ICIrY24pfU8uX2dlbmVyYWxfbnVtPWJpLE8uX2dlbmVyYWw9X2E7dmFyIGlhPSJcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTkiLnNwbGl0KCIiKTtmdW5jdGlvbiBMbyhjbixFbixVbix4aSl7dmFyIFphLG9yPSIiLE9pPTAs''@;'; put 'put ''U3I9MCxQaT1Vbi55LEhpPTA7c3dpdGNoKGNuKXtjYXNlIDk4OlBpPVVuLnkrNTQzO2Nhc2UgMTIxOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9UGklMTAwLEhpPTI7YnJlYWs7ZGVmYXVsdDpaYT1QaSUxZTQsSGk9NH1icmVhaztjYXNlIDEwOTpzd2l0Y2goRW4ubGVuZ3Ro''@;'; put 'put ''KXtjYXNlIDE6Y2FzZSAyOlphPVVuLm0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gRXRbVW4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIEV0W1VuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gRXRbVW4ubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNl''@;'; put 'put ''IDE6Y2FzZSAyOlphPVVuLmQsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gY3RbVW4ucV1bMF07ZGVmYXVsdDpyZXR1cm4gY3RbVW4ucV1bMV19YnJlYWs7Y2FzZSAxMDQ6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT0xKyhVbi5IKzExKSUxMixIaT1Fbi5sZW5n''@;'; put 'put ''dGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSA3Mjpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVVuLkgsSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2Ug''@;'; put 'put ''Nzc6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpaYT1Vbi5NLEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBtaW51dGUgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgMTE1OmlmKCJzIiE9RW4mJiJzcyIhPUVuJiYiLjAiIT1FbiYmIi4wMCIhPUVuJiYiLjAwMCIh''@;'; put 'put ''PUVuKXRocm93ImJhZCBzZWNvbmQgZm9ybWF0OiAiK0VuO3JldHVybiAwIT09VW4udXx8InMiIT1FbiYmInNzIiE9RW4/KFNyPXhpPj0yPzM9PT14aT8xZTM6MTAwOjE9PT14aT8xMDoxLChPaT1NYXRoLnJvdW5kKFNyKihVbi5TK1VuLnUpKSk+PTYwKlNyJiYoT2k9MCksInMiPT09RW4/MD09''@;'; put 'put ''PU9pPyIwIjoiIitPaS9Tcjoob3I9ZWUoT2ksMit4aSksInNzIj09PUVuP29yLnN1YnN0cigwLDIpOiIuIitvci5zdWJzdHIoMixFbi5sZW5ndGgtMSkpKTplZShVbi5TLEVuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goRW4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNh''@;'; put 'put ''c2UiW1x1MGUwYVx1MGUwYV0iOlphPTI0KlVuLkQrVW4uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjpaYT02MCooMjQqVW4uRCtVbi5IKStVbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10i''@;'; put 'put ''OmNhc2UiW1x1MGUxN1x1MGUxN10iOlphPTYwKig2MCooMjQqVW4uRCtVbi5IKStVbi5NKStNYXRoLnJvdW5kKFVuLlMrVW4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrRW59SGk9Mz09PUVuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6WmE9UGksSGk9''@;'; put 'put ''MTticmVhaztjYXNlIDM2MjM6WmE9VW4uZCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6WmE9VW4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFtVbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbVW4ubS0x''@;'; put 'put ''XVswXTtkZWZhdWx0OnJldHVybiBFdFtVbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goUGk9VW4ueSs1NDMsRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOlphPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6WmE9UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAzNTk0OlphPVVuLkgsSGk9''@;'; put 'put ''RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTpaYT1Vbi5NLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6WmE9VW4uUyxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjbi50b1N0cmluZygxNil9dmFyIG1hPUhpPjA/ZWUoWmEsSGkpOiIiO3JldHVybig5MD09Y24/RW4uY2hh''@;'; put 'put ''ckNvZGVBdCgxKTwzNTg0OmNuPDM1ODQpP21hOm1hLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oRGkpe3JldHVybiBpYVsrRGldfSl9ZnVuY3Rpb24gT2EoY24pe2lmKGNuLmxlbmd0aDw9MylyZXR1cm4gY247Zm9yKHZhciBVbj1jbi5sZW5ndGglMyx4aT1jbi5zdWJzdHIoMCxVbik7VW4h''@;'; put 'put ''PWNuLmxlbmd0aDtVbis9Myl4aSs9KHhpLmxlbmd0aD4wPyIsIjoiIikrY24uc3Vic3RyKFVuLDMpO3JldHVybiB4aX12YXIgaG89ZnVuY3Rpb24oKXt2YXIgRW49LyUvZztmdW5jdGlvbiBvcih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUiKS13bi5pbmRleE9mKCIuIiktMTtpZih3''@;'; put 'put ''bi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8MClyZXR1cm4iLSIrb3Iod24sLVp0KTt2YXIgem49d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRo''@;'; put 'put ''LkxPRzEwRSklem47aWYoYnI8MCYmKGJyKz16biksLTE9PT0obm49KFp0L01hdGgucG93KDEwLGJyKSkudG9QcmVjaXNpb24oeG4rMSsoem4rYnIpJXpuKSkuaW5kZXhPZigiZSIpKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpO2ZvcigtMT09PW5uLmluZGV4''@;'; put 'put ''T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyhXci1ubi5sZW5ndGgrYnIpOm5uKz0iRSsiKyhXci1icik7IjAuIj09PW5uLnN1YnN0cigwLDIpOylubj0obm49bm4uY2hhckF0KDApK25uLnN1YnN0cigyLHpuKSsiLiIrbm4uc3Vic3RyKDIrem4pKS5yZXBs''@;'; put 'put ''YWNlKC9eMCsoWzEtOV0pLywiJDEiKS5yZXBsYWNlKC9eMCtcLi8sIjAuIik7bm49bm4ucmVwbGFjZSgvXCstLywiLSIpfW5uPW5uLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24ob2ksbmksWGksVWkpe3JldHVybiBuaStYaStVaS5zdWJzdHIoMCwoem4rYnIp''@;'; put 'put ''JXpuKSsiLiIrVWkuc3Vic3RyKGJyKSsiRSJ9KX1lbHNlIG5uPVp0LnRvRXhwb25lbnRpYWwoeG4pO3JldHVybiB3bi5tYXRjaCgvRVwrMDAkLykmJm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSx3''@;'; put 'put ''bi5tYXRjaCgvRVwtLykmJm5uLm1hdGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2VcKy8sImUiKSksbm4ucmVwbGFjZSgiZSIsIkUiKX12YXIgT2k9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLFphPS9eIyowKlwuKFswI10rKS8sSGk9L1wpLipbMCNdLyxtYT0vXCgjIyNcKSAjIyNcXD8t''@;'; put 'put ''IyMjIy87ZnVuY3Rpb24gRGkod24pe2Zvcih2YXIgbm4sWnQ9IiIseG49MDt4biE9d24ubGVuZ3RoOysreG4pc3dpdGNoKG5uPXduLmNoYXJDb2RlQXQoeG4pKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6WnQrPSIgIjticmVhaztjYXNlIDQ4Olp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDpadCs9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShubil9cmV0dXJuIFp0fWZ1bmN0aW9uIGNzKHduLFp0KXt2YXIgbm49TWF0aC5wb3coMTAsWnQpO3JldHVybiIiK01hdGgucm91bmQod24qbm4pL25ufWZ1bmN0aW9uIFlvKHduLFp0KXtpZihadD4xMSlyZXR1cm4gWW8od24sMTEpKk1hdGgucG93KDEwLFp0LTEx''@;'; put 'put ''KTt2YXIgbm49d24tTWF0aC5mbG9vcih3bikseG49TWF0aC5wb3coMTAsWnQpO3JldHVybiBadDwoIiIrTWF0aC5yb3VuZChubip4bikpLmxlbmd0aD8wOk1hdGgucm91bmQobm4qeG4pfWZ1bmN0aW9uIEVsKHduLFp0LG5uKXtpZig0MD09PXduLmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChI''@;'; put 'put ''aSkpe3ZhciB4bj1adC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/RWwoIm4iLHhuLG5uKToiKCIrRWwoIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVBdChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIHhpKHduLFp0LG5uKXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hhckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaG8od24sWnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigi''@;'; put 'put ''JSIpKXJldHVybiBmdW5jdGlvbiBVbih3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2UoRW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0dXJuIGhvKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStLKCIlIix6bil9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSly''@;'; put 'put ''ZXR1cm4gb3IoWnQsbm4pO2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrRWwod24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEpPzI6MSksbm4pO3ZhciB6bixicixXcixvaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0''@;'; put 'put ''dXJuIFhpK1ZlKG5pLFp0Lmxlbmd0aCk7aWYoWnQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0oem49VmUobm4sMCkpJiYoem49IiIpLHpuLmxlbmd0aD5adC5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKGJyPVp0Lm1hdGNoKE9pKSly''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gU3Iod24sWnQsbm4pe3ZhciB4bj1wYXJzZUludCh3bls0XSwxMCksem49TWF0aC5yb3VuZChadCp4biksYnI9TWF0aC5mbG9vcih6bi94biksV3I9em4tYnIqeG4sb2k9eG47cmV0dXJuIG5uKygwPT09YnI/IiI6IiIrYnIpKyIgIisoMD09PVdyP0soIiAiLHduWzFd''@;'; put 'put ''Lmxlbmd0aCsxK3duWzRdLmxlbmd0aCk6c2UoV3Isd25bMV0ubGVuZ3RoKSt3blsyXSsiLyIrd25bM10rZWUob2ksd25bNF0ubGVuZ3RoKSl9KGJyLG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK1ZlKG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKGJyPVp0''@;'; put 'put ''Lm1hdGNoKFphKSlyZXR1cm4gem49Y3Mobm4sYnJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaShiclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0RpKGJyWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFRvLHhzKXtyZXR1cm4iLiIreHMrSygiMCIsRGko''@;'; put 'put ''YnJbMV0pLmxlbmd0aC14cy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3puOnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxicj1adC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIFhpK2NzKG5pLGJyWzJdLmxlbmd0''@;'; put 'put ''aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sYnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihicj1adC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gWGkrT2EoVmUobmksMCkpO2lmKGJy''@;'; put 'put ''PVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitFbCh3bixadCwtbm4pOk9hKCIiKyhNYXRoLmZsb29yKG5uKStmdW5jdGlvbiB4bCh3bixadCl7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5kKCh3bi1NYXRoLmZsb29yKHduKSkqTWF0aC5wb3coMTAsWnQpKSku''@;'; put 'put ''bGVuZ3RoPzE6MH0obm4sYnJbMV0ubGVuZ3RoKSkpKyIuIitlZShZbyhubixiclsxXS5sZW5ndGgpLGJyWzFdLmxlbmd0aCk7aWYoYnI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIEVsKHduLFp0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZihicj1adC5tYXRjaCgvXihbMCNdKyko''@;'; put 'put ''XFw/LShbMCNdKykpKyQvKSlyZXR1cm4gem49ayhFbCh3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVG8pe3JldHVybiBXcjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKyspOiIwIj09''@;'; put 'put ''PVRvPyIwIjoiIn0pKTtpZihadC5tYXRjaChtYSkpcmV0dXJuIigiKyh6bj1FbCh3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKGJyPVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsj''@;'; put 'put ''MD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oYnJbNF0ubGVuZ3RoLDcpLG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1obygibiIsYnJbMV0sb2lbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEpJiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIw''@;'; put 'put ''Iiksem4rPVVpK2JyWzJdKyIvIiticlszXSwoVWk9bWUob2lbMl0sV3IpKS5sZW5ndGg8YnJbNF0ubGVuZ3RoJiYoVWk9RGkoYnJbNF0uc3Vic3RyKGJyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKGJyPVp0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10r''@;'; put 'put ''KS8pKXJldHVybiBXcj1NYXRoLm1pbihNYXRoLm1heChiclsxXS5sZW5ndGgsYnJbNF0ubGVuZ3RoKSw3KSxYaSsoKG9pPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP3NlKG9pWzFdLFdyKSticlsyXSsiLyIrYnJbM10rbWUob2lb''@;'; put 'put ''Ml0sV3IpOksoIiAiLDIqV3IrMSticlsyXS5sZW5ndGgrYnJbM10ubGVuZ3RoKSk7aWYoYnI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIHpuPVZlKG5uLDApLFp0Lmxlbmd0aDw9em4ubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZihicj1a''@;'; put 'put ''dC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXt6bj0iIitubi50b0ZpeGVkKE1hdGgubWluKGJyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksV3I9em4uaW5kZXhPZigiLiIpO3ZhciBubz1adC5pbmRleE9mKCIuIiktV3IsamE9WnQubGVuZ3RoLXpuLmxl''@;'; put 'put ''bmd0aC1ubztyZXR1cm4gRGkoWnQuc3Vic3RyKDAsbm8pK3puK1p0LnN1YnN0cihadC5sZW5ndGgtamEpKX1pZihicj1adC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIFdyPVlvKG5uLGJyWzFdLmxlbmd0aCksbm48MD8iLSIrRWwod24sWnQsLW5uKTpPYShmdW5jdGlvbiBf''@;'; put 'put ''dSh3bil7cmV0dXJuIHduPDIxNDc0ODM2NDcmJnduPi0yMTQ3NDgzNjQ4PyIiKyh3bj49MD8wfHduOnduLTF8MCk6IiIrTWF0aC5mbG9vcih3bil9KG5uKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUbyl7cmV0dXJuIjAwLCIrKFRvLmxl''@;'; put 'put ''bmd0aDwzP2VlKDAsMy1Uby5sZW5ndGgpOiIiKStUb30pKyIuIitlZShXcixiclsxXS5sZW5ndGgpO3N3aXRjaChadCl7Y2FzZSIjIyMsIyMwLjAwIjpyZXR1cm4gRWwod24sIiMsIyMwLjAwIixubik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIHZhPU9hKFZl''@;'; put 'put ''KG5pLDApKTtyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMjIywjIyMuMDAiOnJldHVybiBFbCh3biwiIyMjLCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIEVsKHduLCIjLCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIil9dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1mdW5jdGlvbiBnbih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUiKS13bi5pbmRleE9mKCIuIiktMTtpZih3bi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8''@;'; put 'put ''MClyZXR1cm4iLSIrZ24od24sLVp0KTt2YXIgem49d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSklem47aWYoYnI8MCYmKGJyKz16biksIShubj0oWnQvTWF0aC5wb3coMTAsYnIp''@;'; put 'put ''KS50b1ByZWNpc2lvbih4bisxKyh6biticiklem4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpOy0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsiLiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCti''@;'; put 'put ''cik6bm4rPSJFKyIrKFdyLWJyKSxubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihvaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0cigwLCh6biticiklem4pKyIuIitVaS5zdWJzdHIoYnIpKyJF''@;'; put 'put ''In0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1ubi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2go''@;'; put 'put ''L2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfWZ1bmN0aW9uIGtuKHduLFp0LG5uKXtpZig0MD09PXduLmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChIaSkpe3ZhciB4bj1adC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIiku''@;'; put 'put ''cmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/a24oIm4iLHhuLG5uKToiKCIra24oIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVBdChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIEZmKHduLFp0LG5uKXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hh''@;'; put 'put ''ckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaG8od24sWnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24sWnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBiZCh3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2Uo''@;'; put 'put ''RW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0dXJuIGhvKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStLKCIlIix6bil9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSlyZXR1cm4gZ24oWnQsbm4pO2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIr''@;'; put 'put ''a24od24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEpPzI6MSksbm4pO3ZhciB6bixicixXcixvaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0dXJuIFhpK2VlKG5pLFp0Lmxlbmd0aCk7aWYoWnQubWF0Y2goL15bIz9dKyQvKSlyZXR1''@;'; put 'put ''cm4gem49IiIrbm4sMD09PW5uJiYoem49IiIpLHpuLmxlbmd0aD5adC5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKGJyPVp0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gUGkod24sWnQsbm4pe3JldHVybiBubisoMD09PVp0PyIiOiIiK1p0''@;'; put 'put ''KStLKCIgIix3blsxXS5sZW5ndGgrMit3bls0XS5sZW5ndGgpfShicixuaSxYaSk7aWYoWnQubWF0Y2goL14jKzArJC8pKXJldHVybiBYaStlZShuaSxadC5sZW5ndGgtWnQuaW5kZXhPZigiMCIpKTtpZihicj1adC5tYXRjaChaYSkpcmV0dXJuIHpuPSh6bj0oIiIrbm4pLnJlcGxhY2UoL14o''@;'; put 'put ''W15cLl0rKSQvLCIkMS4iK0RpKGJyWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrRGkoYnJbMV0pKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFRvLHhzKXtyZXR1cm4iLiIreHMrSygiMCIsRGkoYnJbMV0pLmxlbmd0aC14cy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3pu''@;'; put 'put ''OnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxicj1adC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIFhpKygiIituaSkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIiku''@;'; put 'put ''cmVwbGFjZSgvXjBcLi8sYnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihicj1adC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gWGkrT2EoIiIrbmkpO2lmKGJyPVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitrbih3bixadCwtbm4pOk9hKCIi''@;'; put 'put ''K25uKSsiLiIrSygiMCIsYnJbMV0ubGVuZ3RoKTtpZihicj1adC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4ga24od24sWnQucmVwbGFjZSgvXiMsIyosLywiIiksbm4pO2lmKGJyPVp0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiB6bj1rKGtuKHduLFp0LnJlcGxh''@;'; put 'put ''Y2UoL1tcXC1dL2csIiIpLG5uKSksV3I9MCxrKGsoWnQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihUbyl7cmV0dXJuIFdyPHpuLmxlbmd0aD96bi5jaGFyQXQoV3IrKyk6IjAiPT09VG8/IjAiOiIifSkpO2lmKFp0Lm1hdGNoKG1hKSlyZXR1cm4iKCIrKHpu''@;'; put 'put ''PWtuKHduLCIjIyMjIyMjIyMjIixubikpLnN1YnN0cigwLDMpKyIpICIrem4uc3Vic3RyKDMsMykrIi0iK3puLnN1YnN0cig2KTt2YXIgVWk9IiI7aWYoYnI9WnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbihicls0XS5sZW5ndGgsNyks''@;'; put 'put ''b2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITEpLHpuPSIiK1hpLCIgIj09KFVpPWhvKCJuIixiclsxXSxvaVsxXSkpLmNoYXJBdChVaS5sZW5ndGgtMSkmJihVaT1VaS5zdWJzdHIoMCxVaS5sZW5ndGgtMSkrIjAiKSx6bis9VWkrYnJbMl0rIi8iK2JyWzNdLChVaT1tZShvaVsyXSxXcikp''@;'; put 'put ''Lmxlbmd0aDxicls0XS5sZW5ndGgmJihVaT1EaShicls0XS5zdWJzdHIoYnJbNF0ubGVuZ3RoLVVpLmxlbmd0aCkpK1VpKSx6bis9VWk7aWYoYnI9WnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKE1hdGgubWF4KGJyWzFdLmxlbmd0''@;'; put 'put ''aCxicls0XS5sZW5ndGgpLDcpLFhpKygob2k9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITApKVswXXx8KG9pWzFdPyIiOiIwIikpKyIgIisob2lbMV0/c2Uob2lbMV0sV3IpK2JyWzJdKyIvIiticlszXSttZShvaVsyXSxXcik6SygiICIsMipXcisxK2JyWzJdLmxlbmd0aCticlszXS5sZW5n''@;'; put 'put ''dGgpKTtpZihicj1adC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gWnQubGVuZ3RoPD0oem49IiIrbm4pLmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkrem47aWYoYnI9WnQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXt6bj0iIitubi50b0ZpeGVk''@;'; put 'put ''KE1hdGgubWluKGJyWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksV3I9em4uaW5kZXhPZigiLiIpO3ZhciBubz1adC5pbmRleE9mKCIuIiktV3IsamE9WnQubGVuZ3RoLXpuLmxlbmd0aC1ubztyZXR1cm4gRGkoWnQuc3Vic3RyKDAsbm8pK3puK1p0LnN1YnN0ciha''@;'; put 'put ''dC5sZW5ndGgtamEpKX1pZihicj1adC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK2tuKHduLFp0LC1ubik6T2EoIiIrbm4pLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVG8pe3JldHVybiIwMCwiKyhUby5s''@;'; put 'put ''ZW5ndGg8Mz9lZSgwLDMtVG8ubGVuZ3RoKToiIikrVG99KSsiLiIrZWUoMCxiclsxXS5sZW5ndGgpO3ZhciB2YT1PYSgiIituaSk7c3dpdGNoKFp0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT12YT9YaSt2YToiIjtjYXNlIiMsIzAwIjpyZXR1''@;'; put 'put ''cm4iMDAiIT09KHZhPWVlKHZhLDIpKT9YaSt2YToiIjtkZWZhdWx0OmlmKFp0Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4ga24od24sWnQuc2xpY2UoMCxadC5sYXN0SW5kZXhPZigiLiIpKSxubikrRGkoWnQuc2xpY2UoWnQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1p0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9uKFp0LG5uLHhuKXtyZXR1cm4iMCwwIj09bm4mJihubj0iIywjMDAiKSwoMHx4bik9PT14bj9rbihadCxubix4bik6RWwoWnQsbm4seG4pfX0oKTtmdW5jdGlvbiBKYShjbil7Zm9yKHZhciBFbj1bXSxVbj0hMSx4''@;'; put 'put ''aT0wLG9yPTA7eGk8Y24ubGVuZ3RoOysreGkpc3dpdGNoKGNuLmNoYXJDb2RlQXQoeGkpKXtjYXNlIDM0OlVuPSFVbjticmVhaztjYXNlIDk1OmNhc2UgNDI6Y2FzZSA5MjorK3hpO2JyZWFrO2Nhc2UgNTk6RW5bRW4ubGVuZ3RoXT1jbi5zdWJzdHIob3IseGktb3IpLG9yPXhpKzF9aWYoRW5b''@;'; put 'put ''RW4ubGVuZ3RoXT1jbi5zdWJzdHIob3IpLCEwPT09VW4pdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrY24rInwgdW50ZXJtaW5hdGVkIHN0cmluZyAiKTtyZXR1cm4gRW59Ty5fc3BsaXQ9SmE7dmFyIEJpPS9cW1tIaE1tU3NcdTBFMEFcdTBFMTlcdTBFMTddKlxdLztmdW5jdGlvbiBJcyhj''@;'; put 'put ''bil7Zm9yKHZhciBFbj0wLFVuPSIiLHhpPSIiO0VuPGNuLmxlbmd0aDspc3dpdGNoKFVuPWNuLmNoYXJBdChFbikpe2Nhc2UiRyI6WWUoY24sRW4pJiYoRW4rPTYpLEVuKys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09Y24uY2hhckNvZGVBdCgrK0VuKSYmRW48Y24ubGVuZ3RoOyk7KytFbjti''@;'; put 'put ''cmVhaztjYXNlIlxcIjpjYXNlIl8iOkVuKz0yO2JyZWFrO2Nhc2UiQCI6KytFbjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09Y24uY2hhckF0KEVuKzEpfHwiMiI9PT1jbi5jaGFyQXQoRW4rMSkpcmV0dXJuITA7Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMi''@;'; put 'put ''OmNhc2UiRSI6Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpyZXR1cm4hMDtjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOmlmKCJBL1AiPT09Y24uc3Vic3RyKEVuLDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1jbi5zdWJzdHIo''@;'; put 'put ''RW4sNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09Y24uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCkpcmV0dXJuITA7KytFbjticmVhaztjYXNlIlsiOmZvcih4aT1VbjsiXSIhPT1jbi5jaGFyQXQoRW4rKykmJkVuPGNuLmxlbmd0aDspeGkrPWNuLmNo''@;'; put 'put ''YXJBdChFbik7aWYoeGkubWF0Y2goQmkpKXJldHVybiEwO2JyZWFrO2Nhc2UiLiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7RW48Y24ubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihVbj1jbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT1VbiYmIi0iPT1jbi5jaGFyQXQoRW4rMSkmJiIwIyIu''@;'; put 'put ''aW5kZXhPZihjbi5jaGFyQXQoRW4rMikpPi0xKTspO2JyZWFrO2Nhc2UiPyI6Zm9yKDtjbi5jaGFyQXQoKytFbik9PT1VbjspO2JyZWFrO2Nhc2UiKiI6KytFbiwoIiAiPT1jbi5jaGFyQXQoRW4pfHwiKiI9PWNuLmNoYXJBdChFbikpJiYrK0VuO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjorK0Vu''@;'; put 'put ''O2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7RW48Y24ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihjbi5jaGFyQXQoKytFbikpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK0VufXJldHVy''@;'; put 'put ''biExfWZ1bmN0aW9uIFBuKGNuLEVuLFVuLHhpKXtmb3IodmFyIEhpLG1hLERpLG9yPVtdLE9pPSIiLFNyPTAsUGk9IiIsWmE9InQiLGNzPSJIIjtTcjxjbi5sZW5ndGg7KXN3aXRjaChQaT1jbi5jaGFyQXQoU3IpKXtjYXNlIkciOmlmKCFZZShjbixTcikpdGhyb3cgbmV3IEVycm9yKCJ1bnJl''@;'; put 'put ''Y29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2NuKTtvcltvci5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0sU3IrPTc7YnJlYWs7Y2FzZSciJzpmb3IoT2k9IiI7MzQhPT0oRGk9Y24uY2hhckNvZGVBdCgrK1NyKSkmJlNyPGNuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUoRGkpO29yW29yLmxlbmd0aF09e3Q6InQiLHY6T2l9LCsrU3I7YnJlYWs7Y2FzZSJcXCI6dmFyIFlvPWNuLmNoYXJBdCgrK1NyKTtvcltvci5sZW5ndGhdPXt0OiIoIj09PVlvfHwiKSI9PT1Zbz9ZbzoidCIsdjpZb30sKytTcjticmVhaztjYXNlIl8iOm9yW29yLmxlbmd0aF09e3Q6InQi''@;'; put 'put ''LHY6IiAifSxTcis9MjticmVhaztjYXNlIkAiOm9yW29yLmxlbmd0aF09e3Q6IlQiLHY6RW59LCsrU3I7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWNuLmNoYXJBdChTcisxKXx8IjIiPT09Y24uY2hhckF0KFNyKzEpKXtpZihudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLFVuLCIy''@;'; put 'put ''Ij09PWNuLmNoYXJBdChTcisxKSkpKXJldHVybiIiO29yW29yLmxlbmd0aF09e3Q6IlgiLHY6Y24uc3Vic3RyKFNyLDIpfSxaYT1QaSxTcis9MjticmVha31jYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpQaT1QaS50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6''@;'; put 'put ''Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6aWYoRW48MHx8bnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbikp''@;'; put 'put ''KXJldHVybiIiO2ZvcihPaT1QaTsrK1NyPGNuLmxlbmd0aCYmY24uY2hhckF0KFNyKS50b0xvd2VyQ2FzZSgpPT09UGk7KU9pKz1QaTsibSI9PT1QaSYmImgiPT09WmEudG9Mb3dlckNhc2UoKSYmKFBpPSJNIiksImgiPT09UGkmJihQaT1jcyksb3Jbb3IubGVuZ3RoXT17dDpQaSx2Ok9pfSxa''@;'; put 'put ''YT1QaTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciBfdT17dDpQaSx2OlBpfTtpZihudWxsPT1IaSYmKEhpPVRuKEVuLFVuKSksIkEvUCI9PT1jbi5zdWJzdHIoU3IsMykudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJihfdS52PUhpLkg+PTEyPyJQIjoiQSIpLF91LnQ9''@;'; put 'put ''IlQiLGNzPSJoIixTcis9Myk6IkFNL1BNIj09PWNuLnN1YnN0cihTciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/IlBNIjoiQU0iKSxfdS50PSJUIixTcis9NSxjcz0iaCIpOiJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWNuLnN1YnN0cihTciw1KS50''@;'; put 'put ''b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKF91LnY9SGkuSD49MTI/Ilx1NGUwYlx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLF91LnQ9IlQiLFNyKz01LGNzPSJoIik6KF91LnQ9InQiLCsrU3IpLG51bGw9PUhpJiYiVCI9PT1fdS50KXJldHVybiIiO29yW29yLmxlbmd0aF09X3UsWmE9UGk7YnJl''@;'; put 'put ''YWs7Y2FzZSJbIjpmb3IoT2k9UGk7Il0iIT09Y24uY2hhckF0KFNyKyspJiZTcjxjbi5sZW5ndGg7KU9pKz1jbi5jaGFyQXQoU3IpO2lmKCJdIiE9PU9pLnNsaWNlKC0xKSl0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytPaSsifCI7aWYoT2kubWF0Y2goQmkpKXtpZihudWxsPT1I''@;'; put 'put ''aSYmbnVsbD09KEhpPVRuKEVuLFVuKSkpcmV0dXJuIiI7b3Jbb3IubGVuZ3RoXT17dDoiWiIsdjpPaS50b0xvd2VyQ2FzZSgpfSxaYT1PaS5jaGFyQXQoMSl9ZWxzZSBPaS5pbmRleE9mKCIkIik+LTEmJihPaT0oT2kubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIsSXMoY24p''@;'; put 'put ''fHwob3Jbb3IubGVuZ3RoXT17dDoidCIsdjpPaX0pKTticmVhaztjYXNlIi4iOmlmKG51bGwhPUhpKXtmb3IoT2k9UGk7KytTcjxjbi5sZW5ndGgmJiIwIj09PShQaT1jbi5jaGFyQXQoU3IpKTspT2krPVBpO29yW29yLmxlbmd0aF09e3Q6InMiLHY6T2l9O2JyZWFrfWNhc2UiMCI6Y2FzZSIj''@;'; put 'put ''Ijpmb3IoT2k9UGk7KytTcjxjbi5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4T2YoUGk9Y24uY2hhckF0KFNyKSk+LTE7KU9pKz1QaTtvcltvci5sZW5ndGhdPXt0OiJuIix2Ok9pfTticmVhaztjYXNlIj8iOmZvcihPaT1QaTtjbi5jaGFyQXQoKytTcik9PT1QaTspT2krPVBpO29yW29yLmxl''@;'; put 'put ''bmd0aF09e3Q6UGksdjpPaX0sWmE9UGk7YnJlYWs7Y2FzZSIqIjorK1NyLCgiICI9PWNuLmNoYXJBdChTcil8fCIqIj09Y24uY2hhckF0KFNyKSkmJisrU3I7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOm9yW29yLmxlbmd0aF09e3Q6MT09PXhpPyJ0IjpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2Ui''@;'; put 'put ''MSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaT1QaTtTcjxjbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGNuLmNoYXJBdCgrK1NyKSk+LTE7KU9pKz1jbi5jaGFyQXQoU3IpO29yW29yLmxlbmd0aF09''@;'; put 'put ''e3Q6IkQiLHY6T2l9O2JyZWFrO2Nhc2UiICI6b3Jbb3IubGVuZ3RoXT17dDpQaSx2OlBpfSwrK1NyO2JyZWFrO2Nhc2UiJCI6b3Jbb3IubGVuZ3RoXT17dDoidCIsdjpNaX0sKytTcjticmVhaztjYXNlIi8iOm9yW29yLmxlbmd0aF09b3IubGVuZ3RoPjAmJklzKG9yW29yLmxlbmd0aC0xXS52''@;'; put 'put ''KT97dDoidCIsdjpWbn06e3Q6InQiLHY6Ii8ifSwrK1NyO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49XHUyMGFjYWNmaWprbG9wcXJ0dXZ3eHpQIi5pbmRleE9mKFBpKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIr''@;'; put 'put ''Y24pO29yW29yLmxlbmd0aF09e3Q6InQiLHY6UGl9LCsrU3J9dmFyIGJkLEVsPTAsRmY9MDtmb3IoU3I9b3IubGVuZ3RoLTEsWmE9InQiO1NyPj0wOy0tU3Ipc3dpdGNoKG9yW1NyXS50KXtjYXNlImgiOmNhc2UiSCI6b3JbU3JdLnQ9Y3MsWmE9ImgiLEVsPDEmJihFbD0xKTticmVhaztjYXNl''@;'; put 'put ''InMiOihiZD1vcltTcl0udi5tYXRjaCgvXC4wKyQvKSkmJihGZj1NYXRoLm1heChGZixiZFswXS5sZW5ndGgtMSkpLEVsPDMmJihFbD0zKTtjYXNlImQiOmNhc2UieSI6Y2FzZSJNIjpjYXNlImUiOlphPW9yW1NyXS50O2JyZWFrO2Nhc2UibSI6InMiPT09WmEmJihvcltTcl0udD0iTSIsRWw8''@;'; put 'put ''MiYmKEVsPTIpKTticmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6RWw8MSYmb3JbU3JdLnYubWF0Y2goL1tIaF0vKSYmKEVsPTEpLEVsPDImJm9yW1NyXS52Lm1hdGNoKC9bTW1dLykmJihFbD0yKSxFbDwzJiZvcltTcl0udi5tYXRjaCgvW1NzXS8pJiYoRWw9Myl9c3dpdGNoKEVsKXtjYXNl''@;'; put 'put ''IDA6YnJlYWs7Y2FzZSAxOkhpLnU+PS41JiYoSGkudT0wLCsrSGkuUyksSGkuUz49NjAmJihIaS5TPTAsKytIaS5NKSxIaS5NPj02MCYmKEhpLk09MCwrK0hpLkgpO2JyZWFrO2Nhc2UgMjpIaS51Pj0uNSYmKEhpLnU9MCwrK0hpLlMpLEhpLlM+PTYwJiYoSGkuUz0wLCsrSGkuTSl9dmFyIGtu''@;'; put 'put ''LGduPSIiO2ZvcihTcj0wO1NyPG9yLmxlbmd0aDsrK1NyKXN3aXRjaChvcltTcl0udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6Y2FzZSJEIjpicmVhaztjYXNlIlgiOm9yW1NyXS52PSIiLG9yW1NyXS50PSI7IjticmVhaztjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlImgiOmNhc2Ui''@;'; put 'put ''SCI6Y2FzZSJNIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJiIjpjYXNlIloiOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOm9yW1NyXS52PUxvKG9yW1NyXS50LmNoYXJDb2RlQXQoMCksb3JbU3JdLnYs''@;'; put 'put ''SGksRmYpLG9yW1NyXS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKGtuPVNyKzE7bnVsbCE9b3Jba25dJiYoIj8iPT09KFBpPW9yW2tuXS50KXx8IkQiPT09UGl8fCgiICI9PT1QaXx8InQiPT09UGkpJiZudWxsIT1vcltrbisxXSYmKCI/Ij09PW9yW2tuKzFdLnR8fCJ0Ij09PW9y''@;'; put 'put ''W2tuKzFdLnQmJiIvIj09PW9yW2tuKzFdLnYpfHwiKCI9PT1vcltTcl0udCYmKCIgIj09PVBpfHwibiI9PT1QaXx8IikiPT09UGkpfHwidCI9PT1QaSYmKCIvIj09PW9yW2tuXS52fHwiICI9PT1vcltrbl0udiYmbnVsbCE9b3Jba24rMV0mJiI/Ij09b3Jba24rMV0udCkpOylvcltTcl0udis9''@;'; put 'put ''b3Jba25dLnYsb3Jba25dPXt2OiIiLHQ6IjsifSwrK2tuO2duKz1vcltTcl0udixTcj1rbi0xO2JyZWFrO2Nhc2UiRyI6b3JbU3JdLnQ9InQiLG9yW1NyXS52PV9hKEVuLFVuKX12YXIgWnQsbm4sd249IiI7aWYoZ24ubGVuZ3RoPjApezQwPT1nbi5jaGFyQ29kZUF0KDApPyhadD1FbjwwJiY0''@;'; put 'put ''NT09PWduLmNoYXJDb2RlQXQoMCk/LUVuOkVuLG5uPWhvKCJuIixnbixadCkpOihubj1obygibiIsZ24sWnQ9RW48MCYmeGk+MT8tRW46RW4pLFp0PDAmJm9yWzBdJiYidCI9PW9yWzBdLnQmJihubj1ubi5zdWJzdHIoMSksb3JbMF0udj0iLSIrb3JbMF0udikpLGtuPShubj1ubi5yZXBsYWNl''@;'; put 'put ''KC9bLFwuXS9nLGZ1bmN0aW9uKFdyKXtyZXR1cm4iLiI9PVdyP2tyOkxpfSkpLmxlbmd0aC0xO3ZhciB4bj1vci5sZW5ndGg7Zm9yKFNyPTA7U3I8b3IubGVuZ3RoOysrU3IpaWYobnVsbCE9b3JbU3JdJiYidCIhPW9yW1NyXS50JiZvcltTcl0udi5pbmRleE9mKCIuIik+LTEpe3huPVNyO2Jy''@;'; put 'put ''ZWFrfXZhciB6bj1vci5sZW5ndGg7aWYoeG49PT1vci5sZW5ndGgmJi0xPT09bm4uaW5kZXhPZigiRSIpKXtmb3IoU3I9b3IubGVuZ3RoLTE7U3I+PTA7LS1TciludWxsPT1vcltTcl18fC0xPT09Im4/Ii5pbmRleE9mKG9yW1NyXS50KXx8KGtuPj1vcltTcl0udi5sZW5ndGgtMT9vcltTcl0u''@;'; put 'put ''dj1ubi5zdWJzdHIoMSsoa24tPW9yW1NyXS52Lmxlbmd0aCksb3JbU3JdLnYubGVuZ3RoKTprbjwwP29yW1NyXS52PSIiOihvcltTcl0udj1ubi5zdWJzdHIoMCxrbisxKSxrbj0tMSksb3JbU3JdLnQ9InQiLHpuPVNyKTtrbj49MCYmem48b3IubGVuZ3RoJiYob3Jbem5dLnY9bm4uc3Vic3Ry''@;'; put 'put ''KDAsa24rMSkrb3Jbem5dLnYpfWVsc2UgaWYoeG4hPT1vci5sZW5ndGgmJi0xPT09bm4uaW5kZXhPZigiRSIpKXtmb3Ioa249bm4uaW5kZXhPZihrciktMSxTcj14bjtTcj49MDstLVNyKWlmKG51bGwhPW9yW1NyXSYmLTEhPT0ibj8iLmluZGV4T2Yob3JbU3JdLnQpKXtmb3IobWE9b3JbU3Jd''@;'; put 'put ''LnYuaW5kZXhPZigiLiIpPi0xJiZTcj09PXhuP29yW1NyXS52LmluZGV4T2YoIi4iKS0xOm9yW1NyXS52Lmxlbmd0aC0xLHduPW9yW1NyXS52LnN1YnN0cihtYSsxKTttYT49MDstLW1hKWtuPj0wJiYoIjAiPT09b3JbU3JdLnYuY2hhckF0KG1hKXx8IiMiPT09b3JbU3JdLnYuY2hhckF0KG1h''@;'; put 'put ''KSkmJih3bj1ubi5jaGFyQXQoa24tLSkrd24pO29yW1NyXS52PXduLG9yW1NyXS50PSJ0Iix6bj1Tcn1mb3Ioa24+PTAmJnpuPG9yLmxlbmd0aCYmKG9yW3puXS52PW5uLnN1YnN0cigwLGtuKzEpK29yW3puXS52KSxrbj1ubi5pbmRleE9mKGtyKSsxLFNyPXhuO1NyPG9yLmxlbmd0aDsrK1Ny''@;'; put 'put ''KWlmKG51bGwhPW9yW1NyXSYmKC0xIT09Im4/KCIuaW5kZXhPZihvcltTcl0udCl8fFNyPT09eG4pKXtmb3IobWE9b3JbU3JdLnYuaW5kZXhPZihrcik+LTEmJlNyPT09eG4/b3JbU3JdLnYuaW5kZXhPZihrcikrMTowLHduPW9yW1NyXS52LnN1YnN0cigwLG1hKTttYTxvcltTcl0udi5sZW5n''@;'; put 'put ''dGg7KyttYSlrbjxubi5sZW5ndGgmJih3bis9bm4uY2hhckF0KGtuKyspKTtvcltTcl0udj13bixvcltTcl0udD0idCIsem49U3J9fX1mb3IoU3I9MDtTcjxvci5sZW5ndGg7KytTciludWxsIT1vcltTcl0mJiJuPyIuaW5kZXhPZihvcltTcl0udCk+LTEmJihvcltTcl0udj1obyhvcltTcl0u''@;'; put 'put ''dCxvcltTcl0udixadD14aT4xJiZFbjwwJiZTcj4wJiYiLSI9PT1vcltTci0xXS52Py1FbjpFbikucmVwbGFjZSgvXC4vZyxrcikucmVwbGFjZSgvLC8sTGkpLG9yW1NyXS50PSJ0Iik7dmFyIGJyPSIiO2ZvcihTcj0wO1NyIT09b3IubGVuZ3RoOysrU3IpbnVsbCE9b3JbU3JdJiYoYnIrPW9y''@;'; put 'put ''W1NyXS52KTtyZXR1cm4gYnJ9Ty5pc19kYXRlPUlzLE8uX2V2YWw9UG47dmFyIGhyPS9cW1s9PD5dLyxRbD0vXFsoPXw+Wz1dP3w8Wz49XT8pKC0/XGQrKD86XC5cZCopPylcXS87ZnVuY3Rpb24gWWwoY24sRW4pe2lmKG51bGw9PUVuKXJldHVybiExO3ZhciBVbj1wYXJzZUZsb2F0KEVuWzJd''@;'; put 'put ''KTtzd2l0Y2goRW5bMV0pe2Nhc2UiPSI6aWYoY249PVVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPiI6aWYoY24+VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8IjppZihjbjxVbilyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZihjbiE9VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYoY24+PVVu''@;'; put 'put ''KXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGNuPD1VbilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBidShjbixFbixVbil7bnVsbD09VW4mJihVbj17fSk7dmFyIHhpPSIiO3N3aXRjaCh0eXBlb2YgY24pe2Nhc2Uic3RyaW5nIjp4aT0ibS9kL3l5Ij09Y24mJlVuLmRhdGVORj9Vbi5k''@;'; put 'put ''YXRlTkY6Y247YnJlYWs7Y2FzZSJudW1iZXIiOm51bGw9PSh4aT0xND09Y24mJlVuLmRhdGVORj9Vbi5kYXRlTkY6KG51bGwhPVVuLnRhYmxlP1VuLnRhYmxlOmJ0KVtjbl0pJiYoeGk9VW4udGFibGUmJlVuLnRhYmxlW2p0W2NuXV18fGJ0W2p0W2NuXV0pLG51bGw9PXhpJiYoeGk9T3RbY25d''@;'; put 'put ''fHwiR2VuZXJhbCIpfWlmKFllKHhpLDApKXJldHVybiBfYShFbixVbik7RW4gaW5zdGFuY2VvZiBEYXRlJiYoRW49WG4oRW4sVW4uZGF0ZTE5MDQpKTt2YXIgb3I9ZnVuY3Rpb24gR2woY24sRW4pe3ZhciBVbj1KYShjbikseGk9VW4ubGVuZ3RoLG9yPVVuW3hpLTFdLmluZGV4T2YoIkAiKTtp''@;'; put 'put ''Zih4aTw0JiZvcj4tMSYmLS14aSxVbi5sZW5ndGg+NCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBmb3IgfCIrVW4uam9pbigifCIpKyJ8Iik7aWYoIm51bWJlciIhPXR5cGVvZiBFbilyZXR1cm5bNCw0PT09VW4ubGVuZ3RofHxvcj4tMT9VbltVbi5sZW5ndGgt''@;'; put 'put ''MV06IkAiXTtzd2l0Y2goVW4ubGVuZ3RoKXtjYXNlIDE6VW49b3I+LTE/WyJHZW5lcmFsIiwiR2VuZXJhbCIsIkdlbmVyYWwiLFVuWzBdXTpbVW5bMF0sVW5bMF0sVW5bMF0sIkAiXTticmVhaztjYXNlIDI6VW49b3I+LTE/W1VuWzBdLFVuWzBdLFVuWzBdLFVuWzFdXTpbVW5bMF0sVW5bMV0s''@;'; put 'put ''VW5bMF0sIkAiXTticmVhaztjYXNlIDM6VW49b3I+LTE/W1VuWzBdLFVuWzFdLFVuWzBdLFVuWzJdXTpbVW5bMF0sVW5bMV0sVW5bMl0sIkAiXX12YXIgT2k9RW4+MD9VblswXTpFbjwwP1VuWzFdOlVuWzJdO2lmKC0xPT09VW5bMF0uaW5kZXhPZigiWyIpJiYtMT09PVVuWzFdLmluZGV4T2Yo''@;'; put 'put ''IlsiKSlyZXR1cm5beGksT2ldO2lmKG51bGwhPVVuWzBdLm1hdGNoKGhyKXx8bnVsbCE9VW5bMV0ubWF0Y2goaHIpKXt2YXIgU3I9VW5bMF0ubWF0Y2goUWwpLFBpPVVuWzFdLm1hdGNoKFFsKTtyZXR1cm4gWWwoRW4sU3IpP1t4aSxVblswXV06WWwoRW4sUGkpP1t4aSxVblsxXV06W3hpLFVu''@;'; put 'put ''W251bGwhPVNyJiZudWxsIT1QaT8yOjFdXX1yZXR1cm5beGksT2ldfSh4aSxFbik7aWYoWWUob3JbMV0pKXJldHVybiBfYShFbixVbik7aWYoITA9PT1FbilFbj0iVFJVRSI7ZWxzZSBpZighMT09PUVuKUVuPSJGQUxTRSI7ZWxzZSBpZigiIj09PUVufHxudWxsPT1FbilyZXR1cm4iIjtyZXR1''@;'; put 'put ''cm4gUG4ob3JbMV0sRW4sVW4sb3JbMF0pfWZ1bmN0aW9uIE1sKGNuLEVuKXtpZigibnVtYmVyIiE9dHlwZW9mIEVuKXtFbj0rRW58fC0xO2Zvcih2YXIgVW49MDtVbjwzOTI7KytVbilpZihudWxsIT1idFtVbl0pe2lmKGJ0W1VuXT09Y24pe0VuPVVuO2JyZWFrfX1lbHNlIEVuPDAmJihFbj1V''@;'; put 'put ''bik7RW48MCYmKEVuPTM5MSl9cmV0dXJuIGJ0W0VuXT1jbixFbn1PLmxvYWQ9TWwsTy5fdGFibGU9YnQsTy5nZXRfdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYnR9LE8ubG9hZF90YWJsZT1mdW5jdGlvbihFbil7Zm9yKHZhciBVbj0wOzM5MiE9VW47KytVbil2b2lkIDAhPT1FbltVbl0mJk1s''@;'; put 'put ''KEVuW1VuXSxVbil9LE8uaW5pdF90YWJsZT1hdCxPLmZvcm1hdD1idSxPLmdldGxvY2FsZT1mdW5jdGlvbiBCcigpe3JldHVybiBCbnx8ImVuLVVTIn0sTy5zZXRsb2NhbGU9ZnVuY3Rpb24gX3IoY24pe2lmKGZ1bmN0aW9uIGpyKGNuKXt2YXIgRW49MDtzd2l0Y2goKEJufHwiIikudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSl7Y2FzZSJ6aC10dyI6Y2FzZSJ6aC1jbiI6Y2FzZSJqYS1qcCI6Y2FzZSJrby1rciI6Zm9yKEVuPTI3O0VuPD0zNjsrK0VuKWRlbGV0ZSBjbltFbl07Zm9yKEVuPTUwO0VuPD01ODsrK0VuKWRlbGV0ZSBjbltFbl07YnJlYWs7Y2FzZSJ0aC10aCI6Zm9yKEVuPTU5O0VuPD02Mjsr''@;'; put 'put ''K0VuKWRlbGV0ZSBjbltFbl07Zm9yKEVuPTY3O0VuPD04MTsrK0VuKWRlbGV0ZSBjbltFbl19fShidCksQm49Y24sRm4oYnQpLHR5cGVvZiBJbnRsPCJ1Iil7dmFyIEVuPUludGwuRGF0ZVRpbWVGb3JtYXQoY24pO2lmKEVuLmZvcm1hdFRvUGFydHMpe2Zvcih2YXIgVW49RW4uZm9ybWF0VG9Q''@;'; put 'put ''YXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSwwLDAsMCkpLHhpPTA7eGk8NzsrK3hpKWN0W3hpXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGNuLHt3ZWVrZGF5OiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUreGksMCwwLDApKVswXS52YWx1ZSxjdFt4aV1bMF09SW50bC5E''@;'; put 'put ''YXRlVGltZUZvcm1hdChjbix7d2Vla2RheToic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSt4aSwwLDAsMCkpWzBdLnZhbHVlO2Zvcih2YXIgb3I9MDtvcjwxMjsrK29yKUV0W29yXVsyXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGNuLHttb250aDoibG9uZyJ9KS5mb3Jt''@;'; put 'put ''YXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsb3IsMiwwLDAsMCkpWzBdLnZhbHVlLEV0W29yXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGNuLHttb250aDoic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLG9yLDIsMCwwLDApKVswXS52YWx1ZSxFdFtvcl1bMF09RXRbb3JdWzFd''@;'; put 'put ''LnNsaWNlKDAsMSk7Zm9yKHZhciBPaT0iIixTcj0wO1NyPFVuLmxlbmd0aDsrK1NyKXt2YXIgUGk9VW5bU3JdLnZhbHVlO3N3aXRjaChVbltTcl0udHlwZSl7Y2FzZSJ5ZWFyIjpPaSs9Mj09UGkubGVuZ3RoPyJ5eSI6Inl5eXkiO2JyZWFrO2Nhc2UibW9udGgiOk9pKz0iMSI9PVBpPyJtIjoi''@;'; put 'put ''MDEiPT1QaT8ibW0iOlBpPT1FdFswXVsxXT8ibW1tIjpQaT09RXRbMF1bMl0/Im1tbW0iOlBpPT1FdFswXVswXT8ibW1tbW0iOiJtbSI7YnJlYWs7Y2FzZSJkYXkiOk9pKz0iNSI9PVBpPyJkIjoiMDUiPT1QaT8iZGQiOlBpPT1jdFswXVswXT8iZGRkIjpQaT09Y3RbMF1bMV0/ImRkZGQiOiJk''@;'; put 'put ''ZCI7YnJlYWs7Y2FzZSJsaXRlcmFsIjpPaSs9UGkucmVwbGFjZSgvLi9nLCJcXCQmIiksMT09UGkubGVuZ3RoJiYoVm49UGkpfX0oY24ubWF0Y2goL2VuL2kpJiZjbi5tYXRjaCgvdXMvaSl8fCFjbikmJihPaT0ibS9kL3l5IiksYnRbMTRdPU9pfWVsc2UiamEtanAiPT1jbi50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpJiYoYnRbMTRdPSJ5eXl5XFwvbVxcL2QiKTt2YXIgWmE9SW50bC5OdW1iZXJGb3JtYXQoY24se30pLmZvcm1hdCgxMjM0NTY3Ljg5KTtaYSYmKExpPShaYS5tYXRjaCgvMSguKikyLyl8fFtdKVsxXSxrcj0oWmEubWF0Y2goLzcoLiopOC8pfHxbXSlbMV0pfWZyW2NuLnRvTG93ZXJDYXNl''@;'; put 'put ''KCldfHwoZnJbY24udG9Mb3dlckNhc2UoKV09eyIuIjprciwiLCI6TGl9KSxlcj1ldCh5cj1mcltjbi50b0xvd2VyQ2FzZSgpXXx8ZnJbImVuLXVzIl0pfSxPLm5vcm1hbGl6ZT1mdW5jdGlvbiBXbyhjbil7Zm9yKHZhciBFbj0wLFVuPTAseGk9IiIsb3I9IiIsT2k9IiIsU3I9eXIueXx8Inki''@;'; put 'put ''LFBpPVNyLnRvVXBwZXJDYXNlKCksWmE9eXIuZHx8ImQiLEhpPVphLnRvVXBwZXJDYXNlKCksbWE9eXJbIi4iXSxEaT15clsiLCJdLGNzPSIwIz9FKy0lIit5clsiLCJdK21hO0VuPGNuLmxlbmd0aDspc3dpdGNoKHhpPWNuLmNoYXJBdChFbikpe2Nhc2UiRyI6RW4rKyxPaSs9eGk7YnJlYWs7''@;'; put 'put ''Y2FzZSciJzpmb3IoT2krPXhpOzM0IT09KFVuPWNuLmNoYXJDb2RlQXQoKytFbikpJiZFbjxjbi5sZW5ndGg7KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFVuKTtPaSs9JyInLCsrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpPaSs9Y24uc2xpY2UoRW4sRW4rMiksRW4rPTI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJAIjpPaSs9eGksKytFbjticmVhaztjYXNlIkIiOmNhc2UiYiI6KytFbixPaSs9eGk7YnJlYWs7Y2FzZSBTcjpjYXNlIFBpOmNhc2UgWmE6Y2FzZSBIaTpPaSs9ZXJbeGkudG9Mb3dlckNhc2UoKV0sKytFbjticmVhaztjYXNlIk0iOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6''@;'; put 'put ''Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIkEiOmNhc2UiYSI6T2krPXhpLCsrRW47YnJlYWs7Y2FzZSJbIjpmb3Iob3I9eGk7Il0iIT09Y24uY2hhckF0KEVuKyspJiZFbjxjbi5sZW5ndGg7KW9yKz1jbi5jaGFyQXQoRW4pO09pKz1vcjticmVhaztjYXNlIERpOk9pKz0n''@;'; put 'put ''IicreGkrJyInLCsrRW47YnJlYWs7Y2FzZSBtYTppZighKEVuPGNuLmxlbmd0aCYmKGNzLmluZGV4T2YoeGk9Y24uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09eGkmJiItIj09Y24uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YoY24uY2hhckF0KEVuKzIpKT4tMSkpKXtPaSs9JyInK21hKyci''@;'; put 'put ''JzticmVha314aT1tYSwtLUVuO2Nhc2UiMCI6Y2FzZSIjIjpmb3IoT2krPWVyW3hpLnRvTG93ZXJDYXNlKCldfHx4aTtFbjxjbi5sZW5ndGgmJihjcy5pbmRleE9mKHhpPWNuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PXhpJiYiLSI9PWNuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGNu''@;'; put 'put ''LmNoYXJBdChFbisyKSk+LTEpOylPaSs9ZXJbeGkudG9Mb3dlckNhc2UoKV18fHhpO2JyZWFrO2Nhc2UiPyI6Zm9yKE9pKz14aTtjbi5jaGFyQXQoKytFbik9PT14aTspT2krPXhpO2JyZWFrO2Nhc2UiKiI6T2krPXhpLCsrRW4sKCIgIj09Y24uY2hhckF0KEVuKXx8IioiPT1jbi5jaGFyQXQo''@;'; put 'put ''RW4pKSYmKE9pKz1jbi5jaGFyQXQoRW4pLCsrRW4pO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpPaSs9eGksKytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2krPXhpO0VuPGNuLmxlbmd0''@;'; put 'put ''aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoY24uY2hhckF0KCsrRW4pKT4tMTspT2krPWNuLmNoYXJBdChFbik7YnJlYWs7ZGVmYXVsdDpPaSs9eGksKytFbn1yZXR1cm4gT2l9LE8uZ2V0Y3VycmVuY3k9ZnVuY3Rpb24gbmEoKXtyZXR1cm4gRml8fCJVU0QifSxPLnNldGN1cnJlbmN5PWZ1bmN0''@;'; put 'put ''aW9uIGNhKGNuKXtGaT1jbixNaT10eXBlb2YgSW50bDwidSI/SW50bC5OdW1iZXJGb3JtYXQoQm4se3N0eWxlOiJjdXJyZW5jeSIsY3VycmVuY3lEaXNwbGF5OiJzeW1ib2wiLGN1cnJlbmN5OmNufSkuZm9ybWF0KDApLnJlcGxhY2UoL1swXC5cLFxzXS9nLCIiKToiJCJ9fTthZShBKTt2YXIg''@;'; put 'put ''TWUsbmU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOkEuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjpBLl90YWJsZVsxNV0sIlNob3J0IERhdGUiOkEuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjpBLl90''@;'; put 'put ''YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjpBLl90YWJsZVsxOF0sIlNob3J0IFRpbWUiOkEuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDpBLl90YWJsZVsyXSxTdGFuZGFyZDpBLl90YWJsZVs0XSxQZXJjZW50OkEuX3RhYmxl''@;'; put 'put ''WzEwXSxTY2llbnRpZmljOkEuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7IlllcyI7Ik5vIjtAJ30sbGU9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6''@;'; put 'put ''JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6''@;'; put 'put ''Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXykn''@;'; put 'put ''LDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18o''@;'; put 'put ''QF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywj''@;'; put 'put ''IzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8i''@;'; put 'put ''LDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LHdlPS9bZERdK3xb''@;'; put 'put ''bU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKFMpe1MudmVyc2lvbj0iMS4yLjAiO3ZhciBrPWZ1bmN0aW9uIE8oKXtmb3IodmFyIHBlPTAsYmU9bmV3IEFycmF5KDI1NiksUGU9MDsyNTYhPVBlOysrUGUpYmVbUGVdPXBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBlPTEmKHBl''@;'; put 'put ''PTEmKHBlPTEmKHBlPTEmKHBlPVBlKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5w''@;'; put 'put ''ZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KGJlKTpiZX0oKTtTLnRhYmxlPWssUy5ic3RyPWZ1bmN0aW9uIEsocGUsYmUpe2Zvcih2YXIgUGU9''@;'; put 'put ''fmJlLFZlPXBlLmxlbmd0aC0xLFllPTA7WWU8VmU7KVBlPShQZT1QZT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUrKykpXSk+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKyspKV07cmV0dXJuIFllPT09VmUmJihQZT1QZT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQo''@;'; put 'put ''WWUpKV0pLH5QZX0sUy5idWY9ZnVuY3Rpb24gZWUocGUsYmUpe2lmKHBlLmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIHNlKHBlLGJlKXtmb3IodmFyIFBlPX5iZSxWZT1wZS5sZW5ndGgtNyxZZT0wO1llPFZlOylQZT0oUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1''@;'; put 'put ''JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZ''@;'; put 'put ''ZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07Zm9yKDtZZTxWZSs3OylQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07cmV0dXJuflBlfShwZSxiZSk7Zm9yKHZhciBQZT1+YmUsVmU9cGUubGVuZ3RoLTMsWWU9MDtZZTxWZTspUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1''@;'; put 'put ''JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO2Zvcig7WWU8VmUrMzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0sUy5zdHI9ZnVuY3Rpb24g''@;'; put 'put ''bWUocGUsYmUpe2Zvcih2YXIgZXQsY3QsUGU9fmJlLFZlPTAsWWU9cGUubGVuZ3RoO1ZlPFllOykoZXQ9cGUuY2hhckNvZGVBdChWZSsrKSk8MTI4P1BlPVBlPj4+OF5rWzI1NSYoUGVeZXQpXTpldDwyMDQ4P1BlPShQZT1QZT4+Pjhea1syNTUmKFBlXigxOTJ8ZXQ+PjYmMzEpKV0pPj4+OF5r''@;'; put 'put ''WzI1NSYoUGVeKDEyOHw2MyZldCkpXTpldD49NTUyOTYmJmV0PDU3MzQ0PyhldD02NCsoMTAyMyZldCksY3Q9MTAyMyZwZS5jaGFyQ29kZUF0KFZlKyspLFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVeKDI0MHxldD4+OCY3KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjImNjMp''@;'; put 'put ''KV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxjdD4+NiYxNXwoMyZldCk8PDQpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZjdCkpXSk6UGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyMjR8ZXQ+PjEyJjE1KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjYmNjMpKV0pPj4+OF5rWzI1NSYo''@;'; put 'put ''UGVeKDEyOHw2MyZldCkpXTtyZXR1cm5+UGV9fShNZT17fSk7dmFyIFhlLHZlPWZ1bmN0aW9uKCl7dmFyIGJlLE89e307ZnVuY3Rpb24gSyhnbil7aWYoIi8iPT1nbi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybi0xPT09Z24uc2xpY2UoMCwtMSkuaW5kZXhPZigiLyIpP2duOksoZ24uc2xp''@;'; put 'put ''Y2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2UoMCxrbisxKX1mdW5jdGlvbiBlZShnbil7aWYoIi8iPT1nbi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybiBlZShnbi5zbGljZSgwLC0xKSk7dmFyIGtuPWduLmxhc3RJbmRleE9m''@;'; put 'put ''KCIvIik7cmV0dXJuLTE9PT1rbj9nbjpnbi5zbGljZShrbisxKX1mdW5jdGlvbiBzZShnbixrbil7InN0cmluZyI9PXR5cGVvZiBrbiYmKGtuPW5ldyBEYXRlKGtuKSk7dmFyIHduPWtuLmdldEhvdXJzKCk7d249KHduPXduPDw2fGtuLmdldE1pbnV0ZXMoKSk8PDV8a24uZ2V0U2Vjb25kcygp''@;'; put 'put ''Pj4+MSxnbi53cml0ZV9zaGlmdCgyLHduKTt2YXIgWnQ9a24uZ2V0RnVsbFllYXIoKS0xOTgwO1p0PShadD1adDw8NHxrbi5nZXRNb250aCgpKzEpPDw1fGtuLmdldERhdGUoKSxnbi53cml0ZV9zaGlmdCgyLFp0KX1mdW5jdGlvbiBwZShnbil7bW4oZ24sMCk7Zm9yKHZhciBrbj17fSx3bj0w''@;'; put 'put ''O2duLmw8PWduLmxlbmd0aC00Oyl7dmFyIFp0PWduLnJlYWRfc2hpZnQoMiksbm49Z24ucmVhZF9zaGlmdCgyKSx4bj1nbi5sK25uLHpuPXt9OzIxNTg5PT09WnQmJigxJih3bj1nbi5yZWFkX3NoaWZ0KDEpKSYmKHpuLm10aW1lPWduLnJlYWRfc2hpZnQoNCkpLG5uPjUmJigyJnduJiYoem4u''@;'; put 'put ''YXRpbWU9Z24ucmVhZF9zaGlmdCg0KSksNCZ3biYmKHpuLmN0aW1lPWduLnJlYWRfc2hpZnQoNCkpKSx6bi5tdGltZSYmKHpuLm10PW5ldyBEYXRlKDFlMyp6bi5tdGltZSkpKSxnbi5sPXhuLGtuW1p0XT16bn1yZXR1cm4ga259ZnVuY3Rpb24gUGUoKXtyZXR1cm4gYmV8fChiZT1iKDgzMzM3''@;'; put 'put ''KSl9ZnVuY3Rpb24gVmUoZ24sa24pe2lmKDgwPT1nblswXSYmNzU9PWduWzFdKXJldHVybiBEaShnbixrbik7aWYoZ24ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIitnbi5sZW5ndGgrIiA8IDUxMiIpO3ZhciB3bixubix4bix6bixicixXcixadD01MTIsb2k9''@;'; put 'put ''W10sbmk9Z24uc2xpY2UoMCw1MTIpO21uKG5pLDApO3ZhciBYaT1mdW5jdGlvbiBZZShnbil7aWYoODA9PWduW2duLmxdJiY3NT09Z25bZ24ubCsxXSlyZXR1cm5bMCwwXTtnbi5jaGsoTWksIkhlYWRlciBTaWduYXR1cmU6ICIpLGduLmwrPTE2O3ZhciBrbj1nbi5yZWFkX3NoaWZ0KDIsInUi''@;'; put 'put ''KTtyZXR1cm5bZ24ucmVhZF9zaGlmdCgyLCJ1Iiksa25dfShuaSk7c3dpdGNoKHduPVhpWzBdKXtjYXNlIDM6WnQ9NTEyO2JyZWFrO2Nhc2UgNDpadD00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT1YaVsxXSlyZXR1cm4gRGkoZ24sa24pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBW''@;'; put 'put ''ZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrd24pfTUxMiE9PVp0JiZtbihuaT1nbi5zbGljZSgwLFp0KSwyOCk7dmFyIFVpPWduLnNsaWNlKDAsWnQpOyFmdW5jdGlvbiBldChnbixrbil7dmFyIHduO3N3aXRjaChnbi5sKz0yLHduPWduLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigz''@;'; put 'put ''IT1rbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIit3bik7YnJlYWs7Y2FzZSAxMjppZig0IT1rbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrd24pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJT''@;'; put 'put ''ZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICIrd24pfWduLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxnbi5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0obmksd24pO3ZhciBubz1uaS5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09d24mJjAhPT1u''@;'; put 'put ''byl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrbm8pO25pLmwrPTQsem49bmkucmVhZF9zaGlmdCg0LCJpIiksbmkubCs9NCxuaS5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLGJyPW5pLnJlYWRfc2hpZnQo''@;'; put 'put ''NCwiaSIpLG5uPW5pLnJlYWRfc2hpZnQoNCwiaSIpLFdyPW5pLnJlYWRfc2hpZnQoNCwiaSIpLHhuPW5pLnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgamE9LTEsdmE9MDt2YTwxMDkmJiEoKGphPW5pLnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK3ZhKW9pW3ZhXT1qYTt2YXIgVG89ZnVuY3Rp''@;'; put 'put ''b24gY3QoZ24sa24pe2Zvcih2YXIgd249TWF0aC5jZWlsKGduLmxlbmd0aC9rbiktMSxadD1bXSxubj0xO25uPHduOysrbm4pWnRbbm4tMV09Z24uc2xpY2Uobm4qa24sKG5uKzEpKmtuKTtyZXR1cm4gWnRbd24tMV09Z24uc2xpY2Uod24qa24pLFp0fShnbixadCk7YnQoV3IseG4sVG8sWnQs''@;'; put 'put ''b2kpO3ZhciB4cz1mdW5jdGlvbiBrdChnbixrbix3bixadCl7dmFyIG5uPWduLmxlbmd0aCx4bj1bXSx6bj1bXSxicj1bXSxXcj1bXSxvaT1adC0xLG5pPTAsWGk9MCxVaT0wLG5vPTA7Zm9yKG5pPTA7bmk8bm47KytuaSlpZihicj1bXSwoVWk9bmkra24pPj1ubiYmKFVpLT1ubiksIXpuW1Vp''@;'; put 'put ''XSl7V3I9W107dmFyIGphPVtdO2ZvcihYaT1VaTtYaT49MDspe2phW1hpXT0hMCx6bltYaV09ITAsYnJbYnIubGVuZ3RoXT1YaSxXci5wdXNoKGduW1hpXSk7dmFyIHZhPXduW01hdGguZmxvb3IoNCpYaS9adCldO2lmKFp0PDQrKG5vPTQqWGkmb2kpKXRocm93IG5ldyBFcnJvcigiRkFUIGJv''@;'; put 'put ''dW5kYXJ5IGNyb3NzZWQ6ICIrWGkrIiA0ICIrWnQpO2lmKCFnblt2YV18fGphW1hpPVZzKGduW3ZhXSxubyldKWJyZWFrfXhuW1VpXT17bm9kZXM6YnIsZGF0YTpiMChbV3JdKX19cmV0dXJuIHhufShUbyx6bixvaSxadCk7eHNbem5dLm5hbWU9IiFEaXJlY3RvcnkiLG5uPjAmJmJyIT09ZXIm''@;'; put 'put ''Jih4c1ticl0ubmFtZT0iIU1pbmlGQVQiKSx4c1tvaVswXV0ubmFtZT0iIUZBVCIseHMuZmF0X2FkZHJzPW9pLHhzLnNzej1adDt2YXIgYzA9W10sYTE9W10sQjg9W107KGZ1bmN0aW9uIE90KGduLGtuLHduLFp0LG5uLHhuLHpuLGJyKXtmb3IodmFyIG5vLFdyPTAsb2k9WnQubGVuZ3RoPzI6''@;'; put 'put ''MCxuaT1rbltnbl0uZGF0YSxYaT0wLFVpPTA7WGk8bmkubGVuZ3RoO1hpKz0xMjgpe3ZhciBqYT1uaS5zbGljZShYaSxYaSsxMjgpO21uKGphLDY0KSxVaT1qYS5yZWFkX3NoaWZ0KDIpLG5vPU9sKGphLDAsVWktb2kpLFp0LnB1c2gobm8pO3ZhciB2YT17bmFtZTpubyx0eXBlOmphLnJlYWRf''@;'; put 'put ''c2hpZnQoMSksY29sb3I6amEucmVhZF9zaGlmdCgxKSxMOmphLnJlYWRfc2hpZnQoNCwiaSIpLFI6amEucmVhZF9zaGlmdCg0LCJpIiksQzpqYS5yZWFkX3NoaWZ0KDQsImkiKSxjbHNpZDpqYS5yZWFkX3NoaWZ0KDE2KSxzdGF0ZTpqYS5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDowLHNpemU6''@;'; put 'put ''MH07MCE9PWphLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikmJih2YS5jdD1LdChqYSxqYS5sLTgpKSwwIT09amEucmVhZF9zaGlmdCgyKStqYS5yZWFkX3NoaWZ0KDIpK2phLnJlYWRfc2hpZnQoMikramEucmVhZF9zaGlm''@;'; put 'put ''dCgyKSYmKHZhLm10PUt0KGphLGphLmwtOCkpLHZhLnN0YXJ0PWphLnJlYWRfc2hpZnQoNCwiaSIpLHZhLnNpemU9amEucmVhZF9zaGlmdCg0LCJpIiksdmEuc2l6ZTwwJiZ2YS5zdGFydDwwJiYodmEuc2l6ZT12YS50eXBlPTAsdmEuc3RhcnQ9ZXIsdmEubmFtZT0iIiksNT09PXZhLnR5cGU/''@;'; put 'put ''KFdyPXZhLnN0YXJ0LG5uPjAmJldyIT09ZXImJihrbltXcl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6dmEuc2l6ZT49NDA5Nj8odmEuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1rblt2YS5zdGFydF0mJihrblt2YS5zdGFydF09anQod24sdmEuc3RhcnQsa24uZmF0X2FkZHJzLGtuLnNzeikpLGtu''@;'; put 'put ''W3ZhLnN0YXJ0XS5uYW1lPXZhLm5hbWUsdmEuY29udGVudD1rblt2YS5zdGFydF0uZGF0YS5zbGljZSgwLHZhLnNpemUpKToodmEuc3RvcmFnZT0ibWluaWZhdCIsdmEuc2l6ZTwwP3ZhLnNpemU9MDpXciE9PWVyJiZ2YS5zdGFydCE9PWVyJiZrbltXcl0mJih2YS5jb250ZW50PWF0KHZhLGtu''@;'; put 'put ''W1dyXS5kYXRhLChrblticl18fHt9KS5kYXRhKSkpLHZhLmNvbnRlbnQmJm1uKHZhLmNvbnRlbnQsMCkseG5bbm9dPXZhLHpuLnB1c2godmEpfX0pKHpuLHhzLFRvLGMwLG5uLHt9LGExLGJyKSxmdW5jdGlvbiBFdChnbixrbix3bil7Zm9yKHZhciBadD0wLG5uPTAseG49MCx6bj0wLGJyPTAs''@;'; put 'put ''V3I9d24ubGVuZ3RoLG9pPVtdLG5pPVtdO1p0PFdyOysrWnQpb2lbWnRdPW5pW1p0XT1adCxrbltadF09d25bWnRdO2Zvcig7YnI8bmkubGVuZ3RoOysrYnIpbm49Z25bWnQ9bmlbYnJdXS5MLHhuPWduW1p0XS5SLHpuPWduW1p0XS5DLG9pW1p0XT09PVp0JiYoLTEhPT1ubiYmb2lbbm5dIT09''@;'; put 'put ''bm4mJihvaVtadF09b2lbbm5dKSwtMSE9PXhuJiZvaVt4bl0hPT14biYmKG9pW1p0XT1vaVt4bl0pKSwtMSE9PXpuJiYob2lbem5dPVp0KSwtMSE9PW5uJiZadCE9b2lbWnRdJiYob2lbbm5dPW9pW1p0XSxuaS5sYXN0SW5kZXhPZihubik8YnImJm5pLnB1c2gobm4pKSwtMSE9PXhuJiZadCE9''@;'; put 'put ''b2lbWnRdJiYob2lbeG5dPW9pW1p0XSxuaS5sYXN0SW5kZXhPZih4bik8YnImJm5pLnB1c2goeG4pKTtmb3IoWnQ9MTtadDxXcjsrK1p0KW9pW1p0XT09PVp0JiYoLTEhPT14biYmb2lbeG5dIT09eG4/b2lbWnRdPW9pW3huXTotMSE9PW5uJiZvaVtubl0hPT1ubiYmKG9pW1p0XT1vaVtubl0p''@;'; put 'put ''KTtmb3IoWnQ9MTtadDxXcjsrK1p0KWlmKDAhPT1nbltadF0udHlwZSl7aWYoKGJyPVp0KSE9b2lbYnJdKWRve2tuW1p0XT1rblticj1vaVticl1dKyIvIitrbltadF19d2hpbGUoMCE9PWJyJiYtMSE9PW9pW2JyXSYmYnIhPW9pW2JyXSk7b2lbWnRdPS0xfWZvcihrblswXSs9Ii8iLFp0PTE7''@;'; put 'put ''WnQ8V3I7KytadCkyIT09Z25bWnRdLnR5cGUmJihrbltadF0rPSIvIil9KGExLEI4LGMwKSxjMC5zaGlmdCgpO3ZhciBYNT17RmlsZUluZGV4OmExLEZ1bGxQYXRoczpCOH07cmV0dXJuIGtuJiZrbi5yYXcmJihYNS5yYXc9e2hlYWRlcjpVaSxzZWN0b3JzOlRvfSksWDV9ZnVuY3Rpb24gYXQo''@;'; put 'put ''Z24sa24sd24pe2Zvcih2YXIgbm49Z24uc2l6ZSx4bj1bXSx6bj1nbi5zdGFydDt3biYmbm4+MCYmem4+PTA7KXhuLnB1c2goa24uc2xpY2Uoem4qeXIsem4qeXIreXIpKSxubi09eXIsem49VnMod24sNCp6bik7cmV0dXJuIDA9PT14bi5sZW5ndGg/eW4oMCk6VSh4bikuc2xpY2UoMCxnbi5z''@;'; put 'put ''aXplKX1mdW5jdGlvbiBidChnbixrbix3bixadCxubil7dmFyIHhuPWVyO2lmKGduPT09ZXIpe2lmKDAhPT1rbil0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT1nbil7dmFyIHpuPXduW2duXSxicj0oWnQ+Pj4yKS0xO2lm''@;'; put 'put ''KCF6bilyZXR1cm47Zm9yKHZhciBXcj0wO1dyPGJyJiYoeG49VnMoem4sNCpXcikpIT09ZXI7KytXcilubi5wdXNoKHhuKTtidChWcyh6bixadC00KSxrbi0xLHduLFp0LG5uKX19ZnVuY3Rpb24ganQoZ24sa24sd24sWnQsbm4pe3ZhciB4bj1bXSx6bj1bXTtubnx8KG5uPVtdKTt2YXIgYnI9''@;'; put 'put ''WnQtMSxXcj0wLG9pPTA7Zm9yKFdyPWtuO1dyPj0wOyl7bm5bV3JdPSEwLHhuW3huLmxlbmd0aF09V3Isem4ucHVzaChnbltXcl0pO3ZhciBuaT13bltNYXRoLmZsb29yKDQqV3IvWnQpXTtpZihadDw0KyhvaT00KldyJmJyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2Vk''@;'; put 'put ''OiAiK1dyKyIgNCAiK1p0KTtpZighZ25bbmldKWJyZWFrO1dyPVZzKGduW25pXSxvaSl9cmV0dXJue25vZGVzOnhuLGRhdGE6YjAoW3puXSl9fWZ1bmN0aW9uIEt0KGduLGtuKXtyZXR1cm4gbmV3IERhdGUoMWUzKih6byhnbixrbis0KS8xZTcqTWF0aC5wb3coMiwzMikrem8oZ24sa24pLzFl''@;'; put 'put ''Ny0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIFNuKGduLGtuKXt2YXIgd249a258fHt9LFp0PXduLnJvb3R8fCJSb290IEVudHJ5IjtpZihnbi5GdWxsUGF0aHN8fChnbi5GdWxsUGF0aHM9W10pLGduLkZpbGVJbmRleHx8KGduLkZpbGVJbmRleD1bXSksZ24uRnVsbFBhdGhzLmxlbmd0aCE9PWdu''@;'; put 'put ''LkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1nbi5GdWxsUGF0aHMubGVuZ3RoJiYoZ24uRnVsbFBhdGhzWzBdPVp0KyIvIixnbi5GaWxlSW5kZXhbMF09e25hbWU6WnQsdHlwZTo1fSksd24uQ0xTSUQmJihnbi5GaWxl''@;'; put 'put ''SW5kZXhbMF0uY2xzaWQ9d24uQ0xTSUQpLGZ1bmN0aW9uIGxyKGduKXt2YXIga249Ilx4MDFTaDMzdEo1IjtpZighdmUuZmluZChnbiwiLyIra24pKXt2YXIgd249eW4oNCk7d25bMF09NTUsd25bMV09d25bM109NTAsd25bMl09NTQsZ24uRmlsZUluZGV4LnB1c2goe25hbWU6a24sdHlwZToy''@;'; put 'put ''LGNvbnRlbnQ6d24sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSksZ24uRnVsbFBhdGhzLnB1c2goZ24uRnVsbFBhdGhzWzBdK2tuKSxYbihnbil9fShnbil9ZnVuY3Rpb24gWG4oZ24sa24pe1NuKGduKTtmb3IodmFyIHduPSExLFp0PSExLG5uPWduLkZ1bGxQYXRocy5sZW5ndGgtMTtubj49MDst''@;'; put 'put ''LW5uKXt2YXIgeG49Z24uRmlsZUluZGV4W25uXTtzd2l0Y2goeG4udHlwZSl7Y2FzZSAwOlp0P3duPSEwOihnbi5GaWxlSW5kZXgucG9wKCksZ24uRnVsbFBhdGhzLnBvcCgpKTticmVhaztjYXNlIDE6Y2FzZSAyOmNhc2UgNTpadD0hMCxpc05hTih4bi5SKnhuLkwqeG4uQykmJih3bj0hMCks''@;'; put 'put ''eG4uUj4tMSYmeG4uTD4tMSYmeG4uUj09eG4uTCYmKHduPSEwKTticmVhaztkZWZhdWx0OnduPSEwfX1pZih3bnx8a24pe3ZhciB6bj1uZXcgRGF0ZSgxOTg3LDEsMTkpLGJyPTAsV3I9W107Zm9yKG5uPTA7bm48Z24uRnVsbFBhdGhzLmxlbmd0aDsrK25uKTAhPT1nbi5GaWxlSW5kZXhbbm5d''@;'; put 'put ''LnR5cGUmJldyLnB1c2goW2duLkZ1bGxQYXRoc1tubl0sZ24uRmlsZUluZGV4W25uXV0pO2Zvcihubj0wO25uPFdyLmxlbmd0aDsrK25uKXt2YXIgb2k9SyhXcltubl1bMF0pO2ZvcihadD0hMSxicj0wO2JyPFdyLmxlbmd0aDsrK2JyKVdyW2JyXVswXT09PW9pJiYoWnQ9ITApO1p0fHxXci5w''@;'; put 'put ''dXNoKFtvaSx7bmFtZTplZShvaSkucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpuYSxjdDp6bixtdDp6bixjb250ZW50Om51bGx9XSl9Zm9yKFdyLnNvcnQoZnVuY3Rpb24oVWksbm8pe3JldHVybiBmdW5jdGlvbiBrKGduLGtuKXtmb3IodmFyIHduPWduLnNwbGl0KCIvIiksWnQ9a24u''@;'; put 'put ''c3BsaXQoIi8iKSxubj0wLHhuPTAsem49TWF0aC5taW4od24ubGVuZ3RoLFp0Lmxlbmd0aCk7bm48em47Kytubil7aWYoeG49d25bbm5dLmxlbmd0aC1adFtubl0ubGVuZ3RoKXJldHVybiB4bjtpZih3bltubl0hPVp0W25uXSlyZXR1cm4gd25bbm5dPFp0W25uXT8tMToxfXJldHVybiB3bi5s''@;'; put 'put ''ZW5ndGgtWnQubGVuZ3RofShVaVswXSxub1swXSl9KSxnbi5GdWxsUGF0aHM9W10sZ24uRmlsZUluZGV4PVtdLG5uPTA7bm48V3IubGVuZ3RoOysrbm4pZ24uRnVsbFBhdGhzW25uXT1Xcltubl1bMF0sZ24uRmlsZUluZGV4W25uXT1Xcltubl1bMV07Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysr''@;'; put 'put ''bm4pe3ZhciBuaT1nbi5GaWxlSW5kZXhbbm5dLFhpPWduLkZ1bGxQYXRoc1tubl07aWYobmkubmFtZT1lZShYaSkucmVwbGFjZSgiLyIsIiIpLG5pLkw9bmkuUj1uaS5DPS0obmkuY29sb3I9MSksbmkuc2l6ZT1uaS5jb250ZW50P25pLmNvbnRlbnQubGVuZ3RoOjAsbmkuc3RhcnQ9MCxuaS5j''@;'; put 'put ''bHNpZD1uaS5jbHNpZHx8bmEsMD09PW5uKW5pLkM9V3IubGVuZ3RoPjE/MTotMSxuaS5zaXplPTAsbmkudHlwZT01O2Vsc2UgaWYoIi8iPT1YaS5zbGljZSgtMSkpe2Zvcihicj1ubisxO2JyPFdyLmxlbmd0aCYmSyhnbi5GdWxsUGF0aHNbYnJdKSE9WGk7Kyticik7Zm9yKG5pLkM9YnI+PVdy''@;'; put 'put ''Lmxlbmd0aD8tMTpicixicj1ubisxO2JyPFdyLmxlbmd0aCYmSyhnbi5GdWxsUGF0aHNbYnJdKSE9SyhYaSk7Kyticik7bmkuUj1icj49V3IubGVuZ3RoPy0xOmJyLG5pLnR5cGU9MX1lbHNlIEsoZ24uRnVsbFBhdGhzW25uKzFdfHwiIik9PUsoWGkpJiYobmkuUj1ubisxKSxuaS50eXBlPTJ9''@;'; put 'put ''fX1mdW5jdGlvbiBCbihnbixrbil7dmFyIHduPWtufHx7fTtpZihYbihnbiksInppcCI9PXduLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBZbyhnbixrbil7dmFyIHduPWtufHx7fSxadD1bXSxubj1bXSx4bj15bigxKSx6bj13bi5jb21wcmVzc2lvbj84OjAsYnI9MCxvaT0wLG5pPTAsWGk9''@;'; put 'put ''MCxVaT0wLG5vPWduLkZ1bGxQYXRoc1swXSxqYT1ubyx2YT1nbi5GaWxlSW5kZXhbMF0sVG89W10seHM9MDtmb3Iob2k9MTtvaTxnbi5GdWxsUGF0aHMubGVuZ3RoOysrb2kpaWYoamE9Z24uRnVsbFBhdGhzW29pXS5zbGljZShuby5sZW5ndGgpLCh2YT1nbi5GaWxlSW5kZXhbb2ldKS5zaXpl''@;'; put 'put ''JiZ2YS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT1qYSl7dmFyIHIxPVhpLGMwPXluKGphLmxlbmd0aCk7Zm9yKG5pPTA7bmk8amEubGVuZ3RoOysrbmkpYzAud3JpdGVfc2hpZnQoMSwxMjcmamEuY2hhckNvZGVBdChuaSkpO2MwPWMwLnNsaWNlKDAsYzAubCksVG9bVWldPU1lLmJ1Zih2YS5j''@;'; put 'put ''b250ZW50LDApO3ZhciBhMT12YS5jb250ZW50Ozg9PXpuJiYoYTE9anIoYTEpKSwoeG49eW4oMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0ZV9zaGlmdCgyLGJyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx2YS5tdD9zZSh4bix2YS5tdCk6''@;'; put 'put ''eG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCgtNCw4JmJyPzA6VG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LDgmYnI/MDphMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDQsOCZicj8wOnZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKSxYaSs9eG4ubGVuZ3RoLFp0LnB1c2goeG4pLFhpKz1jMC5sZW5ndGgsWnQucHVzaChjMCksWGkrPWExLmxlbmd0aCxadC5wdXNoKGExKSw4JmJyJiYoKHhuPXluKDEyKSkud3JpdGVfc2hpZnQoLTQsVG9bVWldKSx4bi53cml0ZV9zaGlmdCg0LGExLmxlbmd0aCkseG4u''@;'; put 'put ''d3JpdGVfc2hpZnQoNCx2YS5jb250ZW50Lmxlbmd0aCksWGkrPXhuLmwsWnQucHVzaCh4bikpLCh4bj15big0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwyMCkseG4ud3JpdGVfc2hpZnQoMixicikseG4ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMix6bikseG4ud3JpdGVfc2hpZnQoNCwwKSx4bi53cml0ZV9zaGlmdCgtNCxUb1tVaV0pLHhuLndyaXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LHZhLmNvbnRlbnQubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLGMwLmxlbmd0aCkseG4ud3JpdGVfc2hpZnQoMiww''@;'; put 'put ''KSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KDQscjEpLHhzKz14bi5sLG5uLnB1c2goeG4pLHhzKz1jMC5sZW5ndGgsbm4ucHVzaChjMCksKytVaX1yZXR1cm4oeG49''@;'; put 'put ''eW4oMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NikseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDIsVWkpLHhuLndyaXRlX3NoaWZ0KDQseHMpLHhuLndyaXRlX3NoaWZ0KDQsWGkpLHhuLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMCksVShbVShadCksVShubikseG5dKX0oZ24sd24pO3ZhciBadD1mdW5jdGlvbihubyl7Zm9yKHZhciBqYT0wLHZhPTAsVG89MDtUbzxuby5GaWxlSW5kZXgubGVuZ3RoOysrVG8pe3ZhciB4cz1uby5GaWxlSW5kZXhbVG9dO2lmKHhzLmNvbnRlbnQpe3ZhciByMT14cy5jb250''@;'; put 'put ''ZW50Lmxlbmd0aDtyMT4wJiYocjE8NDA5Nj9qYSs9cjErNjM+PjY6dmErPXIxKzUxMT4+OSl9fWZvcih2YXIgYzA9bm8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLEI4PWphKzEyNz4+NyxYNT0oamErNz4+MykrdmErYzArQjgsSjU9WDUrMTI3Pj43LHhlPUo1PD0xMDk/MDpNYXRoLmNlaWwoKEo1''@;'; put 'put ''LTEwOSkvMTI3KTtYNStKNSt4ZSsxMjc+Pjc+SjU7KXhlPSsrSjU8PTEwOT8wOk1hdGguY2VpbCgoSjUtMTA5KS8xMjcpO3ZhciBoaD1bMSx4ZSxKNSxCOCxjMCx2YSxqYSwwXTtyZXR1cm4gbm8uRmlsZUluZGV4WzBdLnNpemU9amE8PDYsaGhbN109KG5vLkZpbGVJbmRleFswXS5zdGFydD1o''@;'; put 'put ''aFswXStoaFsxXStoaFsyXStoaFszXStoaFs0XStoaFs1XSkrKGhoWzZdKzc+PjMpLGhofShnbiksbm49eW4oWnRbN108PDkpLHhuPTAsem49MDtmb3IoeG49MDt4bjw4OysreG4pbm4ud3JpdGVfc2hpZnQoMSxGaVt4bl0pO2Zvcih4bj0wO3huPDg7Kyt4bilubi53cml0ZV9zaGlmdCgyLDAp''@;'; put 'put ''O2Zvcihubi53cml0ZV9zaGlmdCgyLDYyKSxubi53cml0ZV9zaGlmdCgyLDMpLG5uLndyaXRlX3NoaWZ0KDIsNjU1MzQpLG5uLndyaXRlX3NoaWZ0KDIsOSksbm4ud3JpdGVfc2hpZnQoMiw2KSx4bj0wO3huPDM7Kyt4bilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApLG5uLndyaXRlX3NoaWZ0KDQsWnRbMl0pLG5uLndyaXRlX3NoaWZ0KDQsWnRbMF0rWnRbMV0rWnRbMl0rWnRbM10tMSksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDQwOTYpLG5uLndyaXRlX3NoaWZ0KDQsWnRbM10/WnRbMF0rWnRbMV0rWnRbMl0tMTplciksbm4u''@;'; put 'put ''d3JpdGVfc2hpZnQoNCxadFszXSksbm4ud3JpdGVfc2hpZnQoLTQsWnRbMV0/WnRbMF0tMTplciksbm4ud3JpdGVfc2hpZnQoNCxadFsxXSkseG49MDt4bjwxMDk7Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7aWYoWnRbMV0pZm9yKHpuPTA7em48WnRbMV07''@;'; put 'put ''Kyt6bil7Zm9yKDt4bjwyMzYrMTI3KnpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQseG48WnRbMl0/WnRbMV0reG46LTEpO25uLndyaXRlX3NoaWZ0KC00LHpuPT09WnRbMV0tMT9lcjp6bisxKX12YXIgYnI9ZnVuY3Rpb24obm8pe2Zvcih6bis9bm87eG48em4tMTsrK3huKW5uLndyaXRlX3No''@;'; put 'put ''aWZ0KC00LHhuKzEpO25vJiYoKyt4bixubi53cml0ZV9zaGlmdCgtNCxlcikpfTtmb3Ioem49eG49MCx6bis9WnRbMV07eG48em47Kyt4bilubi53cml0ZV9zaGlmdCgtNCxjYS5ESUZTRUNUKTtmb3Ioem4rPVp0WzJdO3huPHpuOysreG4pbm4ud3JpdGVfc2hpZnQoLTQsY2EuRkFUU0VDVCk7''@;'; put 'put ''YnIoWnRbM10pLGJyKFp0WzRdKTtmb3IodmFyIFdyPTAsb2k9MCxuaT1nbi5GaWxlSW5kZXhbMF07V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYhKChvaT1uaS5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihuaS5zdGFydD16bixicihv''@;'; put 'put ''aSs1MTE+PjkpKTtmb3IoYnIoWnRbNl0rNz4+Myk7NTExJm5uLmw7KW5uLndyaXRlX3NoaWZ0KC00LGNhLkVORE9GQ0hBSU4pO2Zvcih6bj14bj0wLFdyPTA7V3I8Z24uRmlsZUluZGV4Lmxlbmd0aDsrK1dyKShuaT1nbi5GaWxlSW5kZXhbV3JdKS5jb250ZW50JiYob2k9bmkuY29udGVudC5s''@;'; put 'put ''ZW5ndGgpJiYhKG9pPj00MDk2KSYmKG5pLnN0YXJ0PXpuLGJyKG9pKzYzPj42KSk7Zm9yKDs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsY2EuRU5ET0ZDSEFJTik7Zm9yKHhuPTA7eG48WnRbNF08PDI7Kyt4bil7dmFyIFhpPWduLkZ1bGxQYXRoc1t4bl07aWYoWGkmJjAhPT1YaS5sZW5n''@;'; put 'put ''dGgpe25pPWduLkZpbGVJbmRleFt4bl0sMD09PXhuJiYobmkuc3RhcnQ9bmkuc2l6ZT9uaS5zdGFydC0xOmVyKTt2YXIgVWk9MD09PXhuJiZ3bi5yb290fHxuaS5uYW1lO2lmKG9pPTIqKFVpLmxlbmd0aCsxKSxubi53cml0ZV9zaGlmdCg2NCxVaSwidXRmMTZsZSIpLG5uLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsb2kpLG5uLndyaXRlX3NoaWZ0KDEsbmkudHlwZSksbm4ud3JpdGVfc2hpZnQoMSxuaS5jb2xvciksbm4ud3JpdGVfc2hpZnQoLTQsbmkuTCksbm4ud3JpdGVfc2hpZnQoLTQsbmkuUiksbm4ud3JpdGVfc2hpZnQoLTQsbmkuQyksbmkuY2xzaWQpbm4ud3JpdGVfc2hpZnQoMTYsbmkuY2xz''@;'; put 'put ''aWQsImhleCIpO2Vsc2UgZm9yKFdyPTA7V3I8NDsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCk7bm4ud3JpdGVfc2hpZnQoNCxuaS5zdGF0ZXx8MCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxu''@;'; put 'put ''bi53cml0ZV9zaGlmdCg0LG5pLnN0YXJ0KSxubi53cml0ZV9zaGlmdCg0LG5pLnNpemUpLG5uLndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoV3I9MDtXcjwxNzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKFdyPTA7V3I8MzsrK1dyKW5uLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXcj0w''@;'; put 'put ''O1dyPDEyOysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKX19Zm9yKHhuPTE7eG48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK3huKWlmKChuaT1nbi5GaWxlSW5kZXhbeG5dKS5zaXplPj00MDk2KXtmb3Iobm4ubD1uaS5zdGFydCsxPDw5LFdyPTA7V3I8bmkuc2l6ZTsrK1dyKW5uLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsbmkuY29udGVudFtXcl0pO2Zvcig7NTExJldyOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNpemU+MCYmbmkuc2l6ZTw0MDk2KXtmb3IoV3I9MDtXcjxuaS5zaXplOysrV3Ip''@;'; put 'put ''bm4ud3JpdGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9yKDs2MyZXcjsrK1dyKW5uLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtubi5sPG5uLmxlbmd0aDspbm4ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gbm59Ty52ZXJzaW9uPSIxLjEuNCI7dmFyIEJyLHlyPTY0LGVyPS0yLE1pPSJkMGNm''@;'; put 'put ''MTFlMGExYjExYWUxIixGaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLG5hPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsY2E9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46ZXIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05B''@;'; put 'put ''VFVSRTpNaSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpuYSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24ga3IoZ24p''@;'; put 'put ''e2Zvcih2YXIga249bmV3IEFycmF5KGduLmxlbmd0aCksd249MDt3bjxnbi5sZW5ndGg7Kyt3bilrblt3bl09U3RyaW5nLmZyb21DaGFyQ29kZShnblt3bl0pO3JldHVybiBrbi5qb2luKCIiKX1mdW5jdGlvbiBqcihnbil7cmV0dXJuIEJyP0JyLmRlZmxhdGVSYXdTeW5jKGduKTpHbChnbil9''@;'; put 'put ''Zm9yKHZhciBnbixrbixaaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sYmk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLF9hPVsxLDIs''@;'; put 'put ''Myw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLGlhPXR5cGVvZiBVaW50OEFycmF5PCJ1IixMbz1pYT9uZXcgVWludDhBcnJheSgyNTYpOltdLE9h''@;'; put 'put ''PTA7T2E8MjU2OysrT2EpTG9bT2FdPSh2b2lkIDAsMjU1Jigoa249MTM5NTM2JigoZ249T2EpPDwxfGduPDwxMSl8NTU4MTQ0Jihnbjw8NXxnbjw8MTUpKT4+MTZ8a24+Pjh8a24pKTtmdW5jdGlvbiBobyhnbixrbil7dmFyIHduPUxvWzI1NSZnbl07cmV0dXJuIGtuPD04P3duPj4+OC1rbjoo''@;'; put 'put ''d249d248PDh8TG9bZ24+PjgmMjU1XSxrbjw9MTY/d24+Pj4xNi1rbjood249d248PDh8TG9bZ24+PjE2JjI1NV0pPj4+MjQta24pfWZ1bmN0aW9uIEphKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTY/MDpnbltadCsxXTw8OCkpPj4+d24mM31mdW5j''@;'; put 'put ''dGlvbiBCaShnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD01PzA6Z25bWnQrMV08PDgpKT4+PnduJjd9ZnVuY3Rpb24gUG4oZ24sa24pe3ZhciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Mz8wOmduW1p0KzFdPDw4KSk+Pj53biYz''@;'; put 'put ''MX1mdW5jdGlvbiBXbyhnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD0xPzA6Z25bWnQrMV08PDgpKT4+PnduJjEyN31mdW5jdGlvbiBocihnbixrbix3bil7dmFyIFp0PTcma24sbm49a24+Pj4zLHpuPWduW25uXT4+Plp0O3JldHVybiB3bjw4LVp0fHwo''@;'; put 'put ''em58PWduW25uKzFdPDw4LVp0LHduPDE2LVp0KXx8KHpufD1nbltubisyXTw8MTYtWnQsd248MjQtWnQpfHwoem58PWduW25uKzNdPDwyNC1adCksem4mKDE8PHduKS0xfWZ1bmN0aW9uIFFsKGduLGtuKXt2YXIgd249Z24ubGVuZ3RoLFp0PTIqd24+a24/Mip3bjprbis1LG5uPTA7aWYod24+''@;'; put 'put ''PWtuKXJldHVybiBnbjtpZihUZSl7dmFyIHhuPWcoWnQpO2lmKGduLmNvcHkpZ24uY29weSh4bik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXhuW25uXT1nbltubl07cmV0dXJuIHhufWlmKGlhKXt2YXIgem49bmV3IFVpbnQ4QXJyYXkoWnQpO2lmKHpuLnNldCl6bi5zZXQoZ24pO2Vs''@;'; put 'put ''c2UgZm9yKDtubjxnbi5sZW5ndGg7Kytubil6bltubl09Z25bbm5dO3JldHVybiB6bn1yZXR1cm4gZ24ubGVuZ3RoPVp0LGdufWZ1bmN0aW9uIFlsKGduKXtmb3IodmFyIGtuPW5ldyBBcnJheShnbiksd249MDt3bjxnbjsrK3duKWtuW3duXT0wO3JldHVybiBrbn12YXIgR2w9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgZ249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24od24sWnQpe2Zvcih2YXIgbm49MDtubjx3bi5sZW5ndGg7KXt2YXIgeG49TWF0aC5taW4oNjU1MzUsd24ubGVuZ3RoLW5uKTtmb3IoWnQud3JpdGVfc2hpZnQoMSwrKG5uK3huPT13bi5sZW5ndGgpKSxadC53cml0ZV9zaGlmdCgy''@;'; put 'put ''LHhuKSxadC53cml0ZV9zaGlmdCgyLDY1NTM1Jn54bik7eG4tLSA+MDspWnRbWnQubCsrXT13bltubisrXX1yZXR1cm4gWnQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKGtuKXt2YXIgd249eW4oNTArTWF0aC5mbG9vcigxLjEqa24ubGVuZ3RoKSksWnQ9Z24oa24sd24pO3JldHVybiB3bi5zbGlj''@;'; put 'put ''ZSgwLFp0KX19KCk7ZnVuY3Rpb24gYnUoZ24sa24sd24pe3ZhciBadD0xLG5uPTAseG49MCx6bj0wLGJyPTAsV3I9Z24ubGVuZ3RoLG9pPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2Zvcih4bj0wO3huPDMyOysreG4pb2lbeG5dPTA7Zm9yKHhuPVdyO3huPHduOysreG4pZ25beG5d''@;'; put 'put ''PTA7V3I9Z24ubGVuZ3RoO3ZhciBuaT1pYT9uZXcgVWludDE2QXJyYXkoV3IpOllsKFdyKTtmb3IoeG49MDt4bjxXcjsrK3huKW9pW25uPWduW3huXV0rKyxadDxubiYmKFp0PW5uKSxuaVt4bl09MDtmb3Iob2lbMF09MCx4bj0xO3huPD1adDsrK3huKW9pW3huKzE2XT1icj1icitvaVt4bi0x''@;'; put 'put ''XTw8MTtmb3IoeG49MDt4bjxXcjsrK3huKTAhPShicj1nblt4bl0pJiYobmlbeG5dPW9pW2JyKzE2XSsrKTt2YXIgWGk9MDtmb3IoeG49MDt4bjxXcjsrK3huKWlmKDAhPShYaT1nblt4bl0pKWZvcihicj1obyhuaVt4bl0sWnQpPj5adC1YaSx6bj0oMTw8WnQrNC1YaSktMTt6bj49MDstLXpu''@;'; put 'put ''KWtuW2JyfHpuPDxYaV09MTUmWGl8eG48PDQ7cmV0dXJuIFp0fXZhciBNbD1pYT9uZXcgVWludDE2QXJyYXkoNTEyKTpZbCg1MTIpLGNuPWlhP25ldyBVaW50MTZBcnJheSgzMik6WWwoMzIpO2lmKCFpYSl7Zm9yKHZhciBFbj0wO0VuPDUxMjsrK0VuKU1sW0VuXT0wO2ZvcihFbj0wO0VuPDMy''@;'; put 'put ''OysrRW4pY25bRW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBnbj1bXSxrbj0wO2tuPDMyO2tuKyspZ24ucHVzaCg1KTtidShnbixjbiwzMik7dmFyIHduPVtdO2Zvcihrbj0wO2tuPD0xNDM7a24rKyl3bi5wdXNoKDgpO2Zvcig7a248PTI1NTtrbisrKXduLnB1c2goOSk7Zm9yKDtrbjw9Mjc5''@;'; put 'put ''O2tuKyspd24ucHVzaCg3KTtmb3IoO2tuPD0yODc7a24rKyl3bi5wdXNoKDgpO2J1KHduLE1sLDI4OCl9KCk7dmFyIFVuPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLHhpPWlhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWwoMzI3NjgpLG9yPWlhP25ldyBVaW50MTZBcnJh''@;'; put 'put ''eSgxMjgpOllsKDEyOCksT2k9MSxTcj0xO2Z1bmN0aW9uIFBpKGduLGtuKXt2YXIgd249UG4oZ24sa24pKzI1NyxadD1Qbihnbixrbis9NSkrMSxubj1mdW5jdGlvbiBJcyhnbixrbil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD00PzA6Z25bWnQrMV08PDgpKT4+''@;'; put 'put ''PnduJjE1fShnbixrbis9NSkrNDtrbis9NDtmb3IodmFyIHhuPTAsem49aWE/bmV3IFVpbnQ4QXJyYXkoMTkpOllsKDE5KSxicj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sV3I9MSxvaT1pYT9uZXcgVWludDhBcnJheSg4KTpZbCg4KSxuaT1pYT9uZXcgVWludDhB''@;'; put 'put ''cnJheSg4KTpZbCg4KSxYaT16bi5sZW5ndGgsVWk9MDtVaTxubjsrK1VpKXpuW1ppW1VpXV09eG49QmkoZ24sa24pLFdyPHhuJiYoV3I9eG4pLG9pW3huXSsrLGtuKz0zO3ZhciBubz0wO2ZvcihvaVswXT0wLFVpPTE7VWk8PVdyOysrVWkpbmlbVWldPW5vPW5vK29pW1VpLTFdPDwxO2ZvcihV''@;'; put 'put ''aT0wO1VpPFhpOysrVWkpMCE9KG5vPXpuW1VpXSkmJihicltVaV09bmlbbm9dKyspO3ZhciBqYT0wO2ZvcihVaT0wO1VpPFhpOysrVWkpaWYoMCE9KGphPXpuW1VpXSkpe25vPUxvW2JyW1VpXV0+PjgtamE7Zm9yKHZhciB2YT0oMTw8Ny1qYSktMTt2YT49MDstLXZhKW9yW25vfHZhPDxqYV09''@;'; put 'put ''NyZqYXxVaTw8M312YXIgVG89W107Zm9yKFdyPTE7VG8ubGVuZ3RoPHduK1p0Oylzd2l0Y2gobm89b3JbV28oZ24sa24pXSxrbis9NyZubyxubz4+Pj0zKXtjYXNlIDE2OmZvcih4bj0zK0phKGduLGtuKSxrbis9Mixubz1Ub1tUby5sZW5ndGgtMV07eG4tLSA+MDspVG8ucHVzaChubyk7YnJl''@;'; put 'put ''YWs7Y2FzZSAxNzpmb3IoeG49MytCaShnbixrbiksa24rPTM7eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcih4bj0xMStXbyhnbixrbiksa24rPTc7eG4tLSA+MDspVG8ucHVzaCgwKTticmVhaztkZWZhdWx0OlRvLnB1c2gobm8pLFdyPG5vJiYoV3I9bm8pfXZhciB4cz1U''@;'; put 'put ''by5zbGljZSgwLHduKSxyMT1Uby5zbGljZSh3bik7Zm9yKFVpPXduO1VpPDI4NjsrK1VpKXhzW1VpXT0wO2ZvcihVaT1adDtVaTwzMDsrK1VpKXIxW1VpXT0wO3JldHVybiBPaT1idSh4cyxVbiwyODYpLFNyPWJ1KHIxLHhpLDMwKSxrbn1mdW5jdGlvbiBIaShnbixrbil7dmFyIFp0PWZ1bmN0''@;'; put 'put ''aW9uIFphKGduLGtuKXtpZigzPT1nblswXSYmISgzJmduWzFdKSlyZXR1cm5beihrbiksMl07Zm9yKHZhciB3bj0wLFp0PTAsbm49Zyhrbnx8MTw8MTgpLHhuPTAsem49bm4ubGVuZ3RoPj4+MCxicj0wLFdyPTA7ISgxJlp0KTspaWYoWnQ9QmkoZ24sd24pLHduKz0zLFp0Pj4+MSlmb3IoWnQ+''@;'; put 'put ''Pj4xPT0xPyhicj05LFdyPTUpOih3bj1QaShnbix3biksYnI9T2ksV3I9U3IpLCFrbiYmem48eG4rMzI3NjcmJih6bj0obm49UWwobm4seG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBuaT1ocihnbix3bixiciksWGk9WnQ+Pj4xPT0xP01sW25pXTpVbltuaV07aWYod24rPTE1JlhpLChYaT4+''@;'; put 'put ''Pj00KT4+PjgmMjU1KXtpZigyNTY9PVhpKWJyZWFrO3ZhciBVaT0oWGktPTI1Nyk8OD8wOlhpLTQ+PjI7VWk+NSYmKFVpPTApO3ZhciBubz14bitiaVtYaV07VWk+MCYmKG5vKz1ocihnbix3bixVaSksd24rPVVpKSxuaT1ocihnbix3bixXciksd24rPTE1JihYaT1adD4+PjE9PTE/Y25bbmld''@;'; put 'put ''OnhpW25pXSk7dmFyIGphPShYaT4+Pj00KTw0PzA6WGktMj4+MSx2YT1fYVtYaV07Zm9yKGphPjAmJih2YSs9aHIoZ24sd24samEpLHduKz1qYSksIWtuJiZ6bjxubyYmKHpuPShubj1RbChubixubykpLmxlbmd0aCk7eG48bm87KW5uW3huXT1ublt4bi12YV0sKyt4bn1lbHNlIG5uW3huKytd''@;'; put 'put ''PVhpfWVsc2V7NyZ3biYmKHduKz04LSg3JnduKSk7dmFyIG9pPWduW3duPj4+M118Z25bMSsod24+Pj4zKV08PDg7aWYod24rPTMyLCFrbiYmem48eG4rb2kmJih6bj0obm49UWwobm4seG4rb2kpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBnbi5jb3B5KWduLmNvcHkobm4seG4sd24+''@;'; put 'put ''Pj4zLCh3bj4+PjMpK29pKSx4bis9b2ksd24rPTgqb2k7ZWxzZSBmb3IoO29pLS0gPjA7KW5uW3huKytdPWduW3duPj4+M10sd24rPTh9cmV0dXJuW2tuP25uOm5uLnNsaWNlKDAseG4pLHduKzc+Pj4zXX0oZ24uc2xpY2UoZ24ubHx8MCksa24pO3JldHVybiBnbi5sKz1adFsxXSxadFswXX1m''@;'; put 'put ''dW5jdGlvbiBtYShnbixrbil7aWYoIWduKXRocm93IG5ldyBFcnJvcihrbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKGtuKX1mdW5jdGlvbiBEaShnbixrbil7dmFyIHduPWduO21uKHduLDApO3ZhciB4bj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07U24oeG4se3Jv''@;'; put 'put ''b3Q6a24ucm9vdH0pO2Zvcih2YXIgem49d24ubGVuZ3RoLTQ7KDgwIT13blt6bl18fDc1IT13blt6bisxXXx8NSE9d25bem4rMl18fDYhPXduW3puKzNdKSYmem4+PTA7KS0tem47d24ubD16bis0LHduLmwrPTQ7dmFyIGJyPXduLnJlYWRfc2hpZnQoMik7d24ubCs9Njt2YXIgV3I9d24ucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtmb3Iod24ubD1Xcix6bj0wO3puPGJyOysrem4pe3duLmwrPTIwO3ZhciBvaT13bi5yZWFkX3NoaWZ0KDQpLG5pPXduLnJlYWRfc2hpZnQoNCksWGk9d24ucmVhZF9zaGlmdCgyKSxVaT13bi5yZWFkX3NoaWZ0KDIpLG5vPXduLnJlYWRfc2hpZnQoMik7d24ubCs9ODt2YXIg''@;'; put 'put ''amE9d24ucmVhZF9zaGlmdCg0KSx2YT1wZSh3bi5zbGljZSh3bi5sK1hpLHduLmwrWGkrVWkpKTt3bi5sKz1YaStVaStubzt2YXIgVG89d24ubDt3bi5sPWphKzQsY3Mod24sb2ksbmkseG4sdmEpLHduLmw9VG99cmV0dXJuIHhufWZ1bmN0aW9uIGNzKGduLGtuLHduLFp0LG5uKXtnbi5sKz0y''@;'; put 'put ''O3ZhciB4bj1nbi5yZWFkX3NoaWZ0KDIpLHpuPWduLnJlYWRfc2hpZnQoMiksYnI9ZnVuY3Rpb24gbWUoZ24pe3ZhciBrbj02NTUzNSZnbi5yZWFkX3NoaWZ0KDIpLHduPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksWnQ9bmV3IERhdGUsbm49MzEmd24seG49MTUmKHduPj4+PTUpO3duPj4+PTQs''@;'; put 'put ''WnQuc2V0TWlsbGlzZWNvbmRzKDApLFp0LnNldEZ1bGxZZWFyKHduKzE5ODApLFp0LnNldE1vbnRoKHhuLTEpLFp0LnNldERhdGUobm4pO3ZhciB6bj0zMSZrbixicj02MyYoa24+Pj49NSk7cmV0dXJuIFp0LnNldEhvdXJzKGtuPj4+PTYpLFp0LnNldE1pbnV0ZXMoYnIpLFp0LnNldFNlY29u''@;'; put 'put ''ZHMoem48PDEpLFp0fShnbik7aWYoODI1NyZ4bil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBXcj1nbi5yZWFkX3NoaWZ0KDQpLG9pPWduLnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSxYaT1nbi5yZWFkX3NoaWZ0KDIpLFVp''@;'; put 'put ''PWduLnJlYWRfc2hpZnQoMiksbm89IiIsamE9MDtqYTxYaTsrK2phKW5vKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW2duLmwrK10pO2lmKFVpKXt2YXIgdmE9cGUoZ24uc2xpY2UoZ24ubCxnbi5sK1VpKSk7KHZhWzIxNTg5XXx8e30pLm10JiYoYnI9dmFbMjE1ODldLm10KSwoKG5ufHx7fSlb''@;'; put 'put ''MjE1ODldfHx7fSkubXQmJihicj1ublsyMTU4OV0ubXQpfWduLmwrPVVpO3ZhciBUbz1nbi5zbGljZShnbi5sLGduLmwrb2kpO3N3aXRjaCh6bil7Y2FzZSA4OlRvPWZ1bmN0aW9uIEZuKGduLGtuKXtpZighQnIpcmV0dXJuIEhpKGduLGtuKTt2YXIgWnQ9bmV3KDAsQnIuSW5mbGF0ZVJhdyks''@;'; put 'put ''bm49WnQuX3Byb2Nlc3NDaHVuayhnbi5zbGljZShnbi5sKSxadC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gZ24ubCs9WnQuYnl0ZXNSZWFkLG5ufShnbixuaSk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24g''@;'; put 'put ''bWV0aG9kICIrem4pfXZhciB4cz0hMTs4JnhuJiYoMTM0Njk1NzYwPT0oV3I9Z24ucmVhZF9zaGlmdCg0KSkmJihXcj1nbi5yZWFkX3NoaWZ0KDQpLHhzPSEwKSxvaT1nbi5yZWFkX3NoaWZ0KDQpLG5pPWduLnJlYWRfc2hpZnQoNCkpLG9pIT1rbiYmbWEoeHMsIkJhZCBjb21wcmVzc2VkIHNp''@;'; put 'put ''emU6ICIra24rIiAhPSAiK29pKSxuaSE9d24mJm1hKHhzLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIrd24rIiAhPSAiK25pKTt2YXIgcjE9TWUuYnVmKFRvLDApOygwfFdyKSE9KDB8cjEpJiZtYSh4cywiQmFkIENSQzMyIGNoZWNrc3VtOiAiK1dyKyIgIT0gIityMSksX3UoWnQsbm8sVG8s''@;'; put 'put ''e3Vuc2FmZTohMCxtdDpicn0pfWZ1bmN0aW9uIF91KGduLGtuLHduLFp0KXt2YXIgbm49WnQmJlp0LnVuc2FmZTtubnx8U24oZ24pO3ZhciB4bj0hbm4mJnZlLmZpbmQoZ24sa24pO2lmKCF4bil7dmFyIHpuPWduLkZ1bGxQYXRoc1swXTtrbi5zbGljZSgwLHpuLmxlbmd0aCk9PXpuP3puPWtu''@;'; put 'put ''OigiLyIhPXpuLnNsaWNlKC0xKSYmKHpuKz0iLyIpLHpuPSh6bitrbikucmVwbGFjZSgiLy8iLCIvIikpLHhuPXtuYW1lOmVlKGtuKSx0eXBlOjJ9LGduLkZpbGVJbmRleC5wdXNoKHhuKSxnbi5GdWxsUGF0aHMucHVzaCh6biksbm58fHZlLnV0aWxzLmNmYl9nYyhnbil9cmV0dXJuIHhuLmNv''@;'; put 'put ''bnRlbnQ9d24seG4uc2l6ZT13bj93bi5sZW5ndGg6MCxadCYmKFp0LkNMU0lEJiYoeG4uY2xzaWQ9WnQuQ0xTSUQpLFp0Lm10JiYoeG4ubXQ9WnQubXQpLFp0LmN0JiYoeG4uY3Q9WnQuY3QpKSx4bn1yZXR1cm4gTy5maW5kPWZ1bmN0aW9uIGZyKGduLGtuKXt2YXIgd249Z24uRnVsbFBhdGhz''@;'; put 'put ''Lm1hcChmdW5jdGlvbihXcil7cmV0dXJuIFdyLnRvVXBwZXJDYXNlKCl9KSxadD13bi5tYXAoZnVuY3Rpb24oV3Ipe3ZhciBvaT1Xci5zcGxpdCgiLyIpO3JldHVybiBvaVtvaS5sZW5ndGgtKCIvIj09V3Iuc2xpY2UoLTEpPzI6MSldfSksbm49ITE7NDc9PT1rbi5jaGFyQ29kZUF0KDApPyhu''@;'; put 'put ''bj0hMCxrbj13blswXS5zbGljZSgwLC0xKStrbik6bm49LTEhPT1rbi5pbmRleE9mKCIvIik7dmFyIHhuPWtuLnRvVXBwZXJDYXNlKCksem49ITA9PT1ubj93bi5pbmRleE9mKHhuKTpadC5pbmRleE9mKHhuKTtpZigtMSE9PXpuKXJldHVybiBnbi5GaWxlSW5kZXhbem5dO3ZhciBicj0heG4u''@;'; put 'put ''bWF0Y2gobSk7Zm9yKHhuPXhuLnJlcGxhY2UoRSwiIiksYnImJih4bj14bi5yZXBsYWNlKG0sIiEiKSksem49MDt6bjx3bi5sZW5ndGg7Kyt6bilpZigoYnI/d25bem5dLnJlcGxhY2UobSwiISIpOnduW3puXSkucmVwbGFjZShFLCIiKT09eG58fChicj9adFt6bl0ucmVwbGFjZShtLCIhIik6''@;'; put 'put ''WnRbem5dKS5yZXBsYWNlKEUsIiIpPT14bilyZXR1cm4gZ24uRmlsZUluZGV4W3puXTtyZXR1cm4gbnVsbH0sTy5yZWFkPWZ1bmN0aW9uIHJyKGduLGtuKXtzd2l0Y2goa24mJmtuLnR5cGV8fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBUbihnbixrbil7cmV0dXJuIFBl''@;'; put 'put ''KCksVmUoYmUucmVhZEZpbGVTeW5jKGduKSxrbil9KGduLGtuKTtjYXNlImJhc2U2NCI6cmV0dXJuIFZlKHkoX2UuZGVjb2RlKGduKSksa24pO2Nhc2UiYmluYXJ5IjpyZXR1cm4gVmUoeShnbiksa24pfXJldHVybiBWZShnbixrbil9LE8ucGFyc2U9VmUsTy53cml0ZT1mdW5jdGlvbiBWbihn''@;'; put 'put ''bixrbil7dmFyIHduPUJuKGduLGtuKTtzd2l0Y2goa24mJmtuLnR5cGUpe2Nhc2UiZmlsZSI6cmV0dXJuIFBlKCksYmUud3JpdGVGaWxlU3luYyhrbi5maWxlbmFtZSx3biksd247Y2FzZSJiaW5hcnkiOnJldHVybiBrcih3bik7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoa3Iod24p''@;'; put 'put ''KX1yZXR1cm4gd259LE8ud3JpdGVGaWxlPWZ1bmN0aW9uIExpKGduLGtuLHduKXtQZSgpO3ZhciBadD1Cbihnbix3bik7YmUud3JpdGVGaWxlU3luYyhrbixadCl9LE8udXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24geGwoZ24pe3ZhciBrbj17fTtyZXR1cm4gU24oa24sZ24pLGtufSxjZmJfYWRk''@;'; put 'put ''Ol91LGNmYl9kZWw6ZnVuY3Rpb24gRWwoZ24sa24pe1NuKGduKTt2YXIgd249dmUuZmluZChnbixrbik7aWYod24pZm9yKHZhciBadD0wO1p0PGduLkZpbGVJbmRleC5sZW5ndGg7KytadClpZihnbi5GaWxlSW5kZXhbWnRdPT13bilyZXR1cm4gZ24uRmlsZUluZGV4LnNwbGljZShadCwxKSxn''@;'; put 'put ''bi5GdWxsUGF0aHMuc3BsaWNlKFp0LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIEZmKGduLGtuLHduKXtTbihnbik7dmFyIFp0PXZlLmZpbmQoZ24sa24pO2lmKFp0KWZvcih2YXIgbm49MDtubjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrbm4paWYoZ24uRmlsZUluZGV4W25uXT09''@;'; put 'put ''WnQpcmV0dXJuIGduLkZpbGVJbmRleFtubl0ubmFtZT1lZSh3biksZ24uRnVsbFBhdGhzW25uXT13biwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIGJkKGduKXtYbihnbiwhMCl9LFJlYWRTaGlmdDpqbCxDaGVja0ZpZWxkOl9uLHByZXBfYmxvYjptbixiY29uY2F0OlUsdXNlX3psaWI6''@;'; put 'put ''ZnVuY3Rpb24gX3IoZ24pe3RyeXt2YXIgd249bmV3KDAsZ24uSW5mbGF0ZVJhdyk7aWYod24uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksd24uX2ZpbmlzaEZsdXNoRmxhZyksIXduLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5''@;'; put 'put ''dGVzUmVhZCIpO0JyPWdufWNhdGNoKFp0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhadC5tZXNzYWdlfHxadCkpfX0sX2RlZmxhdGVSYXc6R2wsX2luZmxhdGVSYXc6SGksY29uc3RzOmNhfSxPfSgpO3RyeXtYZT1iKDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24g''@;'; put 'put ''QmUoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP3goUyk6QXJyYXkuaXNBcnJheShTKT9mdW5jdGlvbiBUKFMpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KFMpfShTKTpTfWZ1bmN0aW9uIEFl''@;'; put 'put ''KFMsTyxrKXtpZih0eXBlb2YgWGU8InUiJiZYZS53cml0ZUZpbGVTeW5jKXJldHVybiBrP1hlLndyaXRlRmlsZVN5bmMoUyxPLGspOlhlLndyaXRlRmlsZVN5bmMoUyxPKTt2YXIgSz0idXRmOCI9PWs/TnMoTyk6TztpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmls''@;'; put 'put ''ZShLLFMpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIGVlPW5ldyBCbG9iKFtCZShLKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKGVlLFMp''@;'; put 'put ''O2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMoZWUsUyk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBzZT1VUkwuY3JlYXRlT2JqZWN0VVJMKGVlKTtpZigib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChz''@;'; put 'put ''ZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOnNlLGZpbGVuYW1lOlMsc2F2ZUFzOiEwfSk7dmFyIG1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1tZS5kb3dubG9hZClyZXR1cm4gbWUuZG93bmxvYWQ9UyxtZS5ocmVmPXNlLGRvY3VtZW50LmJv''@;'; put 'put ''ZHkuYXBwZW5kQ2hpbGQobWUpLG1lLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChzZSl9LDZlNCksc2V9fWlmKHR5''@;'; put 'put ''cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHBlPUZpbGUoUyk7cmV0dXJuIHBlLm9wZW4oInciKSxwZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KE8pJiYoTz1DKE8pKSxwZS53cml0ZShPKSxwZS5jbG9zZSgpLE99Y2F0Y2go''@;'; put 'put ''YmUpe2lmKCFiZS5tZXNzYWdlfHwhYmUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBiZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitTKX1mdW5jdGlvbiBSZShTKXtmb3IodmFyIE89T2JqZWN0LmtleXMoUyksaz1bXSxLPTA7SzxPLmxlbmd0aDsrK0spT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsT1tLXSkmJmsucHVzaChPW0tdKTtyZXR1cm4ga31mdW5jdGlvbiBJZShTLE8pe2Zvcih2YXIgaz1bXSxLPVJlKFMpLGVlPTA7ZWUhPT1LLmxlbmd0aDsrK2VlKW51bGw9PWtbU1tLW2VlXV1bT11dJiYoa1tTW0tbZWVdXVtPXV09''@;'; put 'put ''S1tlZV0pO3JldHVybiBrfWZ1bmN0aW9uIEhlKFMpe2Zvcih2YXIgTz1bXSxrPVJlKFMpLEs9MDtLIT09ay5sZW5ndGg7KytLKU9bU1trW0tdXV09a1tLXTtyZXR1cm4gT31mdW5jdGlvbiBEZShTKXtmb3IodmFyIE89W10saz1SZShTKSxLPTA7SyE9PWsubGVuZ3RoOysrSylPW1Nba1tLXV1d''@;'; put 'put ''PXBhcnNlSW50KGtbS10sMTApO3JldHVybiBPfXZhciBKZSxsbixfdD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxudD0wO2Z1bmN0aW9uIHl0KCl7bnQ9X3QuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpLEpl''@;'; put 'put ''PWZ1bmN0aW9uKE8sayl7dmFyIEs9Ty5nZXRUaW1lKCk7cmV0dXJuIGsmJihLLT0xMjYzMTY4ZTUpLChLLW50KS84NjRlNX0sbG49ZnVuY3Rpb24oTyl7dmFyIGs9bmV3IERhdGU7cmV0dXJuIGsuc2V0VGltZSgyNCpPKjYwKjYwKjFlMytudCksa319ZnVuY3Rpb24gaXQoUyl7dmFyIE89MCxr''@;'; put 'put ''PTAsSz0hMSxlZT1TLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoInwiK1MrInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFy''@;'; put 'put ''IHNlPTE7c2UhPWVlLmxlbmd0aDsrK3NlKWlmKGVlW3NlXSl7c3dpdGNoKGs9MSxzZT4zJiYoSz0hMCksZWVbc2VdLnNsaWNlKGVlW3NlXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrZWVbc2VdLnNsaWNlKGVl''@;'; put 'put ''W3NlXS5sZW5ndGgtMSkpO2Nhc2UiRCI6ayo9MjQ7Y2FzZSJIIjprKj02MDtjYXNlIk0iOmlmKCFLKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7ayo9NjB9Tys9aypwYXJzZUludChlZVtzZV0sMTApfXJldHVybiBPfXl0KCk7dmFyICRlPW5l''@;'; put 'put ''dyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTigkZS5nZXRGdWxsWWVhcigpKSYmKCRlPW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciB0dD0yMDE3PT0kZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIE5lKFMsTyl7dmFyIGs9bmV3IERhdGUoUyk7aWYodHQpcmV0dXJuIE8+''@;'; put 'put ''MD9rLnNldFRpbWUoay5nZXRUaW1lKCkrNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6TzwwJiZrLnNldFRpbWUoay5nZXRUaW1lKCktNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksaztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUztpZigxOTE3PT0kZS5nZXRGdWxsWWVh''@;'; put 'put ''cigpJiYhaXNOYU4oay5nZXRGdWxsWWVhcigpKSl7dmFyIEs9ay5nZXRGdWxsWWVhcigpO3JldHVybiBTLmluZGV4T2YoIiIrSyk+LTF8fGsuc2V0RnVsbFllYXIoay5nZXRGdWxsWWVhcigpKzEwMCksa312YXIgZWU9Uy5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIs''@;'; put 'put ''IjAiXSxzZT1uZXcgRGF0ZSgrZWVbMF0sK2VlWzFdLTEsK2VlWzJdLCtlZVszXXx8MCwrZWVbNF18fDAsK2VlWzVdfHwwKTtyZXR1cm4gUy5pbmRleE9mKCJaIik+LTEmJihzZT1uZXcgRGF0ZShzZS5nZXRUaW1lKCktNjAqc2UuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpKSxzZX1mdW5jdGlv''@;'; put 'put ''biB1dChTKXtmb3IodmFyIE89IiIsaz0wO2shPVMubGVuZ3RoOysraylPKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBPfWZ1bmN0aW9uIHF0KFMpe2lmKCJvYmplY3QiIT10eXBlb2YgU3x8bnVsbD09UylyZXR1cm4gUztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3''@;'; put 'put ''IERhdGUoUy5nZXRUaW1lKCkpO2lmKEFycmF5LmlzQXJyYXkoUykpcmV0dXJuIGZ1bmN0aW9uIFJ0KFMpe2Zvcih2YXIgTz1bXSxrPTA7azxTLmxlbmd0aDsrK2spe3ZhciBLPVNba107Im9iamVjdCI9PXR5cGVvZiBLP09ba109cXQoSyk6bnVsbCE9SyYmKE9ba109Syl9cmV0dXJuIE99KFMp''@;'; put 'put ''O3ZhciBPPXt9O2Zvcih2YXIgayBpbiBTKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLGspJiYoT1trXT1xdChTW2tdKSk7cmV0dXJuIE99ZnVuY3Rpb24gUHQoUyxPKXtpZigib2JqZWN0IiE9dHlwZW9mIE98fG51bGw9PU8pcmV0dXJuIFM7Zm9yKHZhciBrIGluIE8p''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE8saykmJihTW2tdPXF0KE9ba10pKTtyZXR1cm4gU31mdW5jdGlvbiBjaShTLE8pe2Zvcih2YXIgaz0iIjtrLmxlbmd0aDxPOylrKz1TO3JldHVybiBrfWZ1bmN0aW9uIFF0KFMpe3ZhciBPPU51bWJlcihTKTtpZighaXNOYU4o''@;'; put 'put ''TykpcmV0dXJuIGlzRmluaXRlKE8pP086TmFOO2lmKCEvXGQvLnRlc3QoUykpcmV0dXJuIE87dmFyIGs9MSxLPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLCIkMSQyIikucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIGsqPTEwMCwiIn0pO3Jl''@;'; put 'put ''dHVybiBpc05hTihPPU51bWJlcihLKSkmJihLPUsucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oZWUsc2Upe3JldHVybiBrPS1rLHNlfSksaXNOYU4oTz1OdW1iZXIoSykpKT9POk8va31mdW5jdGlvbiBzbihTKXt2YXIgTz1uZXcgRGF0ZShTKSxrPW5ldyBEYXRlKE5hTiksSz1PLmdl''@;'; put 'put ''dFllYXIoKSxlZT1PLmdldE1vbnRoKCksc2U9Ty5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKHNlKXx8SzwwfHxLPjgwOTk/azooZWU+MHx8c2U+MSkmJjEwMSE9S3x8Uy50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8p''@;'; put 'put ''P086Uy5tYXRjaCgvW14tMC05OixcL1xcXS8pP2s6T31mdW5jdGlvbiBSaShTLE8pe2lmKE8mJk8ucmF3KXJldHVybnt0OiJzIix2OlN9O2lmKCFTKXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09UylyZXR1cm57dDoiYiIsdjohMH07aWYoIkZBTFNFIj09PVMpcmV0dXJue3Q6ImIiLHY6ITF9''@;'; put 'put ''O3ZhciBrPSIiLEs9TnVtYmVyKFMpO2lmKGlzRmluaXRlKEspKXJldHVybnt0OiJuIix2Okt9O2lmKGlzTmFOKEspJiYvXGQvLnRlc3QoUykpe3ZhciBlZT0xLHNlPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9uKGV0LGN0LEV0KXtyZXR1cm4ga3x8KGs9IiMsIyMwIiksY3Qr''@;'; put 'put ''RXR9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKGV0KXtrfHwoaz0iMCIpLGsrPSIuIjtmb3IodmFyIGN0PTI7Y3Q8PWV0Lmxlbmd0aDsrK2N0KWsrPSIwIjtyZXR1cm4gZXR9KS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBlZSo9MTAwLGt8''@;'; put 'put ''fChrPSIwIiksays9IiUiLCIifSk7aWYoIWlzTmFOKEs9TnVtYmVyKHNlKSkpcmV0dXJue3Q6Im4iLHY6Sy9lZSx6Omt9O2lmKHNlPXNlLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKGV0LGN0KXtyZXR1cm4gZWU9LWVlLGN0fSksIWlzTmFOKEs9TnVtYmVyKHNlKSkpcmV0dXJue3Q6''@;'; put 'put ''Im4iLHY6Sy9lZSx6OihrfHwiMCIpKyJfKTsoIisoa3x8IjAiKSsiKTtAIn19ZTppZighT3x8IU8ucmF3RGF0ZXMpe3ZhciBtZT1PJiZPLmNlbGxEYXRlcyxwZT1uZXcgRGF0ZShTKSxQZT1wZS5nZXRZZWFyKCksVmU9cGUuZ2V0TW9udGgoKSxZZT1wZS5nZXREYXRlKCk7aWYoaXNOYU4oWWUp''@;'; put 'put ''fHxQZTwwfHxQZT44MDk5KWJyZWFrIGU7aWYoKFZlPjB8fFllPjEpJiYxMDEhPVBlKXJldHVybnt0Om1lPyJkIjoibiIsdjptZT9wZTpKZShwZSksejpPLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxh''@;'; put 'put ''dWd8c2VwfG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6bWU/ImQiOiJuIix2Om1lP3BlOkplKHBlKSx6Ok8uZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBlO3JldHVybiBwZX1yZXR1cm57dDoicyIsdjpTfX12YXIgenQsaG49NT09ImFiYWNh''@;'; put 'put ''YmEiLnNwbGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gV3QoUyl7cmV0dXJuIG51bGwhPVMmJiFTfWZ1bmN0aW9uIEF0KFMpe3JldHVybiBTLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK1Muc2xpY2UoMSl9ZnVuY3Rpb24gUm4oUyl7cmV0dXJuIFM/Uy5kYXRhP1goUy5kYXRhKTpTLmFz''@;'; put 'put ''Tm9kZUJ1ZmZlciYmVGU/WChTLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6Uy5hc0JpbmFyeT9YKFMuYXNCaW5hcnkoKSk6Uy5fZGF0YSYmUy5fZGF0YS5nZXRDb250ZW50P1godXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUy5fZGF0YS5nZXRDb250ZW50KCksMCkp''@;'; put 'put ''KTpTLmNvbnRlbnQmJlMudHlwZT9YKHV0KFMuY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBzdChTKXtpZighUylyZXR1cm4gbnVsbDtpZihTLmRhdGEpcmV0dXJuIFooUy5kYXRhKTtpZihTLmFzTm9kZUJ1ZmZlciYmVGUpcmV0dXJuIFMuYXNOb2RlQnVmZmVyKCk7aWYoUy5fZGF0YSYm''@;'; put 'put ''Uy5fZGF0YS5nZXRDb250ZW50KXt2YXIgTz1TLl9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE8/WihPKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChPKX1yZXR1cm4gUy5jb250ZW50JiZTLnR5cGU/Uy5jb250ZW50Om51bGx9ZnVuY3Rpb24gcmkoUyxPKXtm''@;'; put 'put ''b3IodmFyIGs9Uy5GdWxsUGF0aHN8fFJlKFMuZmlsZXMpLEs9Ty50b0xvd2VyQ2FzZSgpLGVlPUsucmVwbGFjZSgvXC8vZywiXFwiKSxzZT0wO3NlPGsubGVuZ3RoOysrc2Upe3ZhciBtZT1rW3NlXS50b0xvd2VyQ2FzZSgpO2lmKEs9PW1lfHxlZT09bWUpcmV0dXJuIFMuZmlsZXNba1tzZV1d''@;'; put 'put ''fXJldHVybiBudWxsfWZ1bmN0aW9uIFdlKFMsTyl7dmFyIGs9cmkoUyxPKTtpZihudWxsPT1rKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK08rIiBpbiB6aXAiKTtyZXR1cm4ga31mdW5jdGlvbiBUdChTLE8sayl7aWYoIWspcmV0dXJuIGZ1bmN0aW9uIFV0KFMpe3JldHVy''@;'; put 'put ''biBTJiYiLmJpbiI9PT1TLm5hbWUuc2xpY2UoLTQpP3N0KFMpOlJuKFMpfShXZShTLE8pKTtpZighTylyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFR0KFMsTyl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG5yKFMsTyxrKXtpZighaylyZXR1cm4gUm4oV2UoUyxPKSk7aWYoIU8pcmV0dXJu''@;'; put 'put ''IG51bGw7dHJ5e3JldHVybiBucihTLE8pfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBodChTLE8sayl7aWYoIWspcmV0dXJuIHN0KFdlKFMsTykpO2lmKCFPKXJldHVybiBudWxsO3RyeXtyZXR1cm4gaHQoUyxPKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gam4oUyxPLGspe1Mu''@;'; put 'put ''RnVsbFBhdGhzP3ZlLnV0aWxzLmNmYl9hZGQoUyxPLGspOlMuZmlsZShPLGspfWZ1bmN0aW9uIGhpKCl7cmV0dXJuIHp0P25ldyB6dDp2ZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gdW4oUyxPKXt2YXIgaztpZih6dClzd2l0Y2goTy50eXBlKXtjYXNlImJhc2U2NCI6az1uZXcgenQoUyx7''@;'; put 'put ''YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOms9bmV3IHp0KFMse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjprPW5ldyB6dChTKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitPLnR5cGUpfWVsc2Ugc3dp''@;'; put 'put ''dGNoKE8udHlwZSl7Y2FzZSJiYXNlNjQiOms9dmUucmVhZChTLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9dmUucmVhZChTLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOms9dmUucmVhZChTLHt0eXBlOiJidWZmZXIifSk7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTy50eXBlKX1yZXR1cm4ga31mdW5jdGlvbiBmbihTLE8pe2lmKCIvIj09Uy5jaGFyQXQoMCkpcmV0dXJuIFMuc2xpY2UoMSk7dmFyIGs9Ty5zcGxpdCgiLyIpOyIvIiE9Ty5zbGljZSgtMSkmJmsucG9wKCk7''@;'; put 'put ''Zm9yKHZhciBLPVMuc3BsaXQoIi8iKTswIT09Sy5sZW5ndGg7KXt2YXIgZWU9Sy5zaGlmdCgpOyIuLiI9PT1lZT9rLnBvcCgpOiIuIiE9PWVlJiZrLnB1c2goZWUpfXJldHVybiBrLmpvaW4oIi8iKX10eXBlb2YgSlNaaXBTeW5jPCJ1IiYmKHp0PUpTWmlwU3luYyksY2UuZXhwb3J0cyYmdHlw''@;'; put 'put ''ZW9mIHp0PiJ1IiYmKHp0PWIoMzE3OSkpO3ZhciBJaT0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLFh0PS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKD86W14iXSo/KSg/OiIpfCg/OicpKD86W14nXSo/KSg/OicpfCg/''@;'; put 'put ''OlteJyI+XHNdKykpL2csZW49LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO0lpLm1hdGNoKGVuKXx8KGVuPS88W14+XSo+L2cpO3ZhciB1YT0vPFx3KjovLEVpPS88KFwv''@;'; put 'put ''Pylcdys6LztmdW5jdGlvbiB2cihTLE8sayl7Zm9yKHZhciBLPXt9LGVlPTAsc2U9MDtlZSE9PVMubGVuZ3RoJiYzMiE9PShzZT1TLmNoYXJDb2RlQXQoZWUpKSYmMTAhPT1zZSYmMTMhPT1zZTsrK2VlKTtpZihPfHwoS1swXT1TLnNsaWNlKDAsZWUpKSxlZT09PVMubGVuZ3RoKXJldHVybiBL''@;'; put 'put ''O3ZhciBtZT1TLm1hdGNoKFh0KSxwZT0wLGJlPSIiLFBlPTAsVmU9IiIsWWU9IiIsZXQ9MTtpZihtZSlmb3IoUGU9MDtQZSE9bWUubGVuZ3RoOysrUGUpe2ZvcihZZT1tZVtQZV0sc2U9MDtzZSE9WWUubGVuZ3RoJiY2MSE9PVllLmNoYXJDb2RlQXQoc2UpOysrc2UpO2ZvcihWZT1ZZS5zbGlj''@;'; put 'put ''ZSgwLHNlKS50cmltKCk7MzI9PVllLmNoYXJDb2RlQXQoc2UrMSk7KSsrc2U7Zm9yKGV0PTM0PT0oZWU9WWUuY2hhckNvZGVBdChzZSsxKSl8fDM5PT1lZT8xOjAsYmU9WWUuc2xpY2Uoc2UrMStldCxZZS5sZW5ndGgtZXQpLHBlPTA7cGUhPVZlLmxlbmd0aCYmNTghPT1WZS5jaGFyQ29kZUF0''@;'; put 'put ''KHBlKTsrK3BlKTtpZihwZT09PVZlLmxlbmd0aClWZS5pbmRleE9mKCJfIik+MCYmKFZlPVZlLnNsaWNlKDAsVmUuaW5kZXhPZigiXyIpKSksS1tWZV09YmUsa3x8KEtbVmUudG9Mb3dlckNhc2UoKV09YmUpO2Vsc2V7dmFyIGN0PSg1PT09cGUmJiJ4bWxucyI9PT1WZS5zbGljZSgwLDUpPyJ4''@;'; put 'put ''bWxucyI6IiIpK1ZlLnNsaWNlKHBlKzEpO2lmKEtbY3RdJiYiZXh0Ij09VmUuc2xpY2UocGUtMyxwZSkpY29udGludWU7S1tjdF09YmUsa3x8KEtbY3QudG9Mb3dlckNhc2UoKV09YmUpfX1yZXR1cm4gS31mdW5jdGlvbiBXbihTKXtyZXR1cm4gUy5yZXBsYWNlKEVpLCI8JDEiKX12YXIgJGk9''@;'; put 'put ''eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxlaT1IZSgkaSksUXI9ZnVuY3Rpb24oKXt2YXIgUz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLE89L194KFtcZGEtZkEtRl17NH0pXy9naTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gayhLKXt2YXIgZWU9SysiIixzZT1lZS5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09c2UpcmV0dXJuIGVlLnJlcGxhY2UoUyxmdW5jdGlvbihwZSxiZSl7cmV0dXJuICRpW3BlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChiZSxwZS5pbmRleE9mKCJ4''@;'; put 'put ''Iik+LTE/MTY6MTApKXx8cGV9KS5yZXBsYWNlKE8sZnVuY3Rpb24ocGUsYmUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJlLDE2KSl9KTt2YXIgbWU9ZWUuaW5kZXhPZigiXV0+Iik7cmV0dXJuIGsoZWUuc2xpY2UoMCxzZSkpK2VlLnNsaWNlKHNlKzksbWUpK2soZWUu''@;'; put 'put ''c2xpY2UobWUrMykpfX0oKSxWaT0vWyY8PiciXS9nLE5pPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1cdTAwMWZdL2csRGE9L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24gTHIoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoRGEsIl94MDA1RiQmIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXty''@;'; put 'put ''ZXR1cm4gZWlba119KS5yZXBsYWNlKE5pLGZ1bmN0aW9uKGspe3JldHVybiJfeCIrKCIwMDAiK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBXaShTKXtyZXR1cm4gTHIoUykucmVwbGFjZSgvXG4vZywiX3gwMDBhXyIpfWZ1bmN0aW9uIHBh''@;'; put 'put ''KFMpe3JldHVybiBMcihTKS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgUW49L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uIGxhKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShR''@;'; put 'put ''bixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIGJhKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKFZpLGZ1bmN0aW9uKGspe3JldHVybiBlaVtrXX0pLnJlcGxhY2UoUW4sZnVuY3Rpb24o''@;'; put 'put ''ayl7cmV0dXJuIiYjeCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0pfXZhciBMYT1mdW5jdGlvbigpe3ZhciBTPS8mIyhcZCspOy9nO2Z1bmN0aW9uIE8oayxLKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChLLDEwKSl9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKEspe3JldHVybiBLLnJlcGxhY2UoUyxPKX19KCksRmE9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfX0oKTtmdW5jdGlvbiB0aShTKXtzd2l0Y2goUyl7Y2FzZSAxOmNhc2UhMDpjYXNlIjEi''@;'; put 'put ''OmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgZ289ZnVuY3Rpb24oTyl7Zm9yKHZhciBrPSIiLEs9MCxlZT0wLHNlPTAsbWU9MCxwZT0wLGJlPTA7SzxPLmxlbmd0aDspKGVlPU8uY2hhckNvZGVBdChLKyspKTwxMjg/ays9U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZShlZSk6KHNlPU8uY2hhckNvZGVBdChLKyspLGVlPjE5MSYmZWU8MjI0PyhwZT0oMzEmZWUpPDw2LHBlfD02MyZzZSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBlKSk6KG1lPU8uY2hhckNvZGVBdChLKyspLGVlPDI0MD9rKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZlZSk8PDEy''@;'; put 'put ''fCg2MyZzZSk8PDZ8NjMmbWUpOihiZT0oKDcmZWUpPDwxOHwoNjMmc2UpPDwxMnwoNjMmbWUpPDw2fDYzJihwZT1PLmNoYXJDb2RlQXQoSysrKSkpLTY1NTM2LGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGJlPj4+MTAmMTAyMykpLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjAr''@;'; put 'put ''KDEwMjMmYmUpKSkpKTtyZXR1cm4ga30sTnM9ZnVuY3Rpb24oUyl7Zm9yKHZhciBPPVtdLGs9MCxLPTAsZWU9MDtrPFMubGVuZ3RoOylzd2l0Y2goSz1TLmNoYXJDb2RlQXQoaysrKSwhMCl7Y2FzZSBLPDEyODpPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShLKSk7YnJlYWs7Y2FzZSBLPDIw''@;'; put 'put ''NDg6Ty5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhLPj42KSkpLE8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmSykpKTticmVhaztjYXNlIEs+PTU1Mjk2JiZLPDU3MzQ0OkstPTU1Mjk2LGVlPVMuY2hhckNvZGVBdChrKyspLTU2MzIwKyhLPDwxMCksTy5wdXNoKFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhlZT4+MTgmNykpKSxPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKGVlPj4xMiY2MykpKSxPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKGVlPj42JjYzKSkpLE8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmZWUpKSk7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDpPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKEs+PjEyKSkpLE8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoSz4+NiY2MykpKSxPLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkspKSl9cmV0dXJuIE8uam9pbigiIil9O2lmKFRlKXt2''@;'; put 'put ''YXIgeWw9ZnVuY3Rpb24oTyl7dmFyIEssZWUsYmUsaz1CdWZmZXIuYWxsb2MoMipPLmxlbmd0aCksc2U9MSxtZT0wLHBlPTA7Zm9yKGVlPTA7ZWU8Ty5sZW5ndGg7ZWUrPXNlKXNlPTEsKGJlPU8uY2hhckNvZGVBdChlZSkpPDEyOD9LPWJlOmJlPDIyND8oSz02NCooMzEmYmUpKyg2MyZPLmNo''@;'; put 'put ''YXJDb2RlQXQoZWUrMSkpLHNlPTIpOmJlPDI0MD8oSz00MDk2KigxNSZiZSkrNjQqKDYzJk8uY2hhckNvZGVBdChlZSsxKSkrKDYzJk8uY2hhckNvZGVBdChlZSsyKSksc2U9Myk6KHNlPTQsSz0yNjIxNDQqKDcmYmUpKzQwOTYqKDYzJk8uY2hhckNvZGVBdChlZSsxKSkrNjQqKDYzJk8uY2hh''@;'; put 'put ''ckNvZGVBdChlZSsyKSkrKDYzJk8uY2hhckNvZGVBdChlZSszKSkscGU9NTUyOTYrKChLLT02NTUzNik+Pj4xMCYxMDIzKSxLPTU2MzIwKygxMDIzJkspKSwwIT09cGUmJihrW21lKytdPTI1NSZwZSxrW21lKytdPXBlPj4+OCxwZT0wKSxrW21lKytdPUslMjU2LGtbbWUrK109Sz4+Pjg7cmV0''@;'; put 'put ''dXJuIGsuc2xpY2UoMCxtZSkudG9TdHJpbmcoInVjczIiKX0scHU9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7Z28ocHUpPT15bChwdSkmJihnbz15bCk7dmFyIExjPWZ1bmN0aW9uKE8pe3JldHVybiBTZShPLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtn''@;'; put 'put ''byhwdSk9PUxjKHB1KSYmKGdvPUxjKSxOcz1mdW5jdGlvbihTKXtyZXR1cm4gU2UoUywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIFMsRDA9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rpb24oayxLKXt2YXIgZWU9aysifCIrKEt8fCIiKTtyZXR1cm4gU1tlZV0/U1tl''@;'; put 'put ''ZV06U1tlZV09bmV3IFJlZ0V4cCgiPCg/Olxcdys6KT8iK2srJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycraysiPiIsS3x8IiIpfX0oKSxpcj0oUz1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyIn''@;'; put 'put ''XSxbImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuW25ldyBSZWdFeHAoIiYiK09bMF0rIjsiLCJpZyIpLE9bMV1dfSksZnVuY3Rpb24oayl7Zm9yKHZhciBLPWsucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBs''@;'; put 'put ''YWNlKC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLGVlPTA7ZWU8Uy5sZW5ndGg7KytlZSlLPUsucmVwbGFjZShTW2VlXVswXSxTW2VlXVsxXSk7cmV0''@;'; put 'put ''dXJuIEt9KSx4YT1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gdm9pZCAwIT09U1trXT9TW2tdOlNba109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitrKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIraysiPiIsImciKX19KCksdWk9LzxcLz8oPzp2dDopP3Zh''@;'; put 'put ''cmlhbnQ+L2csVnQ9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBKcihTLE8pe3ZhciBrPXZyKFMpLEs9Uy5tYXRjaCh4YShrLmJhc2VUeXBlKSl8fFtdLGVlPVtdO2lmKEsubGVuZ3RoIT1rLnNpemUpe2lmKE8uV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2''@;'; put 'put ''ZWN0b3IgbGVuZ3RoICIrSy5sZW5ndGgrIiAhPSAiK2suc2l6ZSk7cmV0dXJuIGVlfXJldHVybiBLLmZvckVhY2goZnVuY3Rpb24oc2Upe3ZhciBtZT1zZS5yZXBsYWNlKHVpLCIiKS5tYXRjaChWdCk7bWUmJmVlLnB1c2goe3Y6Z28obWVbMl0pLHQ6bWVbMV19KX0pLGVlfXZhciB5MD0vKF5c''@;'; put 'put ''c3xccyR8XG4pLztmdW5jdGlvbiBIYShTLE8pe3JldHVybiI8IitTKyhPLm1hdGNoKHkwKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK08rIjwvIitTKyI+In1mdW5jdGlvbiBMdShTKXtyZXR1cm4gUmUoUykubWFwKGZ1bmN0aW9uKE8pe3JldHVybiIgIitPKyc9IicrU1tPXSsn''@;'; put 'put ''Iid9KS5qb2luKCIiKX1mdW5jdGlvbiBQcihTLE8sayl7cmV0dXJuIjwiK1MrKG51bGwhPWs/THUoayk6IiIpKyhudWxsIT1PPyhPLm1hdGNoKHkwKT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK08rIjwvIitTOiIvIikrIj4ifWZ1bmN0aW9uIGNmKFMsTyl7dHJ5e3JldHVybiBT''@;'; put 'put ''LnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCovLCIiKX1jYXRjaChrKXtpZihPKXRocm93IGt9cmV0dXJuIiJ9dmFyICRoLEtoLFlpPXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJo''@;'; put 'put ''dHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pz''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53''@;'; put 'put ''My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9z''@;'; put 'put ''cHJlYWRzaGVldG1sL21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXX0sYmw9e286InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNl''@;'; put 'put ''Om9mZmljZSIseDoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLHNzOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldCIsZHQ6InV1aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIixtdjoiaHR0cDovL21hY1Zt''@;'; put 'put ''bFNjaGVtYVVyaSIsdjoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiLGh0bWw6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSxiMD1mdW5jdGlvbihTKXtmb3IodmFyIE89W10sSz0wO0s8U1swXS5sZW5ndGg7KytLKWlmKFNbMF1bS10pZm9yKHZhciBlZT0wLHNlPVNb''@;'; put 'put ''MF1bS10ubGVuZ3RoO2VlPHNlO2VlKz0xMDI0MClPLnB1c2guYXBwbHkoTyxTWzBdW0tdLnNsaWNlKGVlLGVlKzEwMjQwKSk7cmV0dXJuIE99LHI1PWIwLE9sPWZ1bmN0aW9uKFMsTyxrKXtmb3IodmFyIEs9W10sZWU9TztlZTxrO2VlKz0yKUsucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGVv''@;'; put 'put ''KFMsZWUpKSk7cmV0dXJuIEsuam9pbigiIikucmVwbGFjZShFLCIiKX0sdWY9T2wsc2Q9ZnVuY3Rpb24oUyxPLGspe2Zvcih2YXIgSz1bXSxlZT1PO2VlPE8razsrK2VlKUsucHVzaCgoIjAiK1NbZWVdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gSy5qb2luKCIiKX0sZGY9c2Qs''@;'; put 'put ''azE9ZnVuY3Rpb24oUyxPLGspe2Zvcih2YXIgSz1bXSxlZT1PO2VlPGs7ZWUrKylLLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShQbyhTLGVlKSkpO3JldHVybiBLLmpvaW4oIiIpfSxoZj1rMSxlaD1mdW5jdGlvbihTLE8pe3ZhciBrPXpvKFMsTyk7cmV0dXJuIGs+MD9rMShTLE8rNCxPKzQr''@;'; put 'put ''ay0xKToiIn0sZmY9ZWgsR2g9ZnVuY3Rpb24oUyxPKXt2YXIgaz16byhTLE8pO3JldHVybiBrPjA/azEoUyxPKzQsTys0K2stMSk6IiJ9LE9jPUdoLE5hPWZ1bmN0aW9uKFMsTyl7dmFyIGs9Mip6byhTLE8pO3JldHVybiBrPjA/azEoUyxPKzQsTys0K2stMSk6IiJ9LEQzPU5hOyRoPUtoPWZ1''@;'; put 'put ''bmN0aW9uKE8sayl7dmFyIEs9em8oTyxrKTtyZXR1cm4gSz4wP09sKE8says0LGsrNCtLKToiIn07dmFyIGFuLHZpLHFoPWZ1bmN0aW9uKFMsTyl7dmFyIGs9em8oUyxPKTtyZXR1cm4gaz4wP2sxKFMsTys0LE8rNCtrKToiIn0sQW49cWg7YW49dmk9ZnVuY3Rpb24oUyxPKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gUWMoUyxPKXtmb3IodmFyIGs9MS0yKihTW08rN10+Pj43KSxLPSgoMTI3JlNbTys3XSk8PDQpKyhTW08rNl0+Pj40JjE1KSxlZT0xNSZTW08rNl0sc2U9NTtzZT49MDstLXNlKWVlPTI1NiplZStTW08rc2VdO3JldHVybiAyMDQ3PT1LPzA9PWVlP2sqKDEvMCk6TmFOOigwPT1LP0s9''@;'; put 'put ''LTEwMjI6KEstPTEwMjMsZWUrPU1hdGgucG93KDIsNTIpKSxrKk1hdGgucG93KDIsSy01MikqZWUpfShTLE8pfTt2YXIgQXI9ZnVuY3Rpb24oTyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoTyl9O1RlJiYoT2w9ZnVuY3Rpb24oUyxPLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0''@;'; put 'put ''cmluZygidXRmMTZsZSIsTyxrKS5yZXBsYWNlKEUsIiIpOnVmKFMsTyxrKX0sc2Q9ZnVuY3Rpb24oUyxPLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygiaGV4IixPLE8rayk6ZGYoUyxPLGspfSxlaD1mdW5jdGlvbihPLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTykp''@;'; put 'put ''cmV0dXJuIGZmKE8sayk7dmFyIEs9Ty5yZWFkVUludDMyTEUoayk7cmV0dXJuIEs+MD9PLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0stMSk6IiJ9LEdoPWZ1bmN0aW9uKE8sayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihPKSlyZXR1cm4gT2MoTyxrKTt2YXIgSz1PLnJlYWRVSW50MzJMRShrKTty''@;'; put 'put ''ZXR1cm4gSz4wP08udG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrSy0xKToiIn0sTmE9ZnVuY3Rpb24oTyxrKXtpZighQnVmZmVyLmlzQnVmZmVyKE8pKXJldHVybiBEMyhPLGspO3ZhciBLPTIqTy5yZWFkVUludDMyTEUoayk7cmV0dXJuIE8udG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrSy0x''@;'; put 'put ''KX0sJGg9ZnVuY3Rpb24oTyxrKXtpZighQnVmZmVyLmlzQnVmZmVyKE8pKXJldHVybiBLaChPLGspO3ZhciBLPU8ucmVhZFVJbnQzMkxFKGspO3JldHVybiBPLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0spfSxxaD1mdW5jdGlvbihPLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTykpcmV0''@;'; put 'put ''dXJuIEFuKE8sayk7dmFyIEs9Ty5yZWFkVUludDMyTEUoayk7cmV0dXJuIE8udG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrSyl9LGsxPWZ1bmN0aW9uKE8sayxLKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKE8pP08udG9TdHJpbmcoInV0ZjgiLGssSyk6aGYoTyxrLEspfSxiMD1mdW5jdGlvbihT''@;'; put 'put ''KXtyZXR1cm4gU1swXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKFNbMF1bMF0pP0J1ZmZlci5jb25jYXQoU1swXSk6cjUoUyl9LFU9ZnVuY3Rpb24oUyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTWzBdKT9CdWZmZXIuY29uY2F0KFMpOltdLmNvbmNhdC5hcHBseShbXSxTKX0sYW49ZnVu''@;'; put 'put ''Y3Rpb24oTyxrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKE8pP08ucmVhZERvdWJsZUxFKGspOnZpKE8sayl9LEFyPWZ1bmN0aW9uKE8pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTyl8fEFycmF5LmlzQXJyYXkoTyl9KSx0eXBlb2YgY3B0YWJsZTwidSImJihPbD1mdW5jdGlvbihTLE8sayl7''@;'; put 'put ''cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShPLGspKS5yZXBsYWNlKEUsIiIpfSxrMT1mdW5jdGlvbihTLE8sayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoTyxrKSl9LGVoPWZ1bmN0aW9uKFMsTyl7dmFyIGs9em8oUyxPKTtyZXR1''@;'; put 'put ''cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKEgsUy5zbGljZShPKzQsTys0K2stMSkpOiIifSxHaD1mdW5jdGlvbihTLE8pe3ZhciBrPXpvKFMsTyk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShGLFMuc2xpY2UoTys0LE8rNCtrLTEpKToiIn0sTmE9ZnVuY3Rpb24oUyxPKXt2''@;'; put 'put ''YXIgaz0yKnpvKFMsTyk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoTys0LE8rNCtrLTEpKToiIn0sJGg9ZnVuY3Rpb24oUyxPKXt2YXIgaz16byhTLE8pO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKE8rNCxPKzQraykp''@;'; put 'put ''OiIifSxxaD1mdW5jdGlvbihTLE8pe3ZhciBrPXpvKFMsTyk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKE8rNCxPKzQraykpOiIifSk7dmFyIFBvPWZ1bmN0aW9uKFMsTyl7cmV0dXJuIFNbT119LGVvPWZ1bmN0aW9uKFMsTyl7cmV0dXJuIDI1NipTW08r''@;'; put 'put ''MV0rU1tPXX0sb2w9ZnVuY3Rpb24oUyxPKXt2YXIgaz0yNTYqU1tPKzFdK1NbT107cmV0dXJuIGs8MzI3Njg/azotMSooNjU1MzUtaysxKX0sem89ZnVuY3Rpb24oUyxPKXtyZXR1cm4gU1tPKzNdKigxPDwyNCkrKFNbTysyXTw8MTYpKyhTW08rMV08PDgpK1NbT119LFZzPWZ1bmN0aW9uKFMs''@;'; put 'put ''Tyl7cmV0dXJuIFNbTyszXTw8MjR8U1tPKzJdPDwxNnxTW08rMV08PDh8U1tPXX0sU3M9ZnVuY3Rpb24oUyxPKXtyZXR1cm4gU1tPXTw8MjR8U1tPKzFdPDwxNnxTW08rMl08PDh8U1tPKzNdfTtmdW5jdGlvbiBqbChTLE8pe3ZhciBLLGVlLG1lLHBlLGJlLFBlLGs9IiIsc2U9W107c3dpdGNo''@;'; put 'put ''KE8pe2Nhc2UiZGJjcyI6aWYoUGU9dGhpcy5sLFRlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpaz10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGJlPTA7YmU8UzsrK2JlKWsrPVN0cmluZy5mcm9tQ2hhckNvZGUoZW8odGhpcyxQZSkp''@;'; put 'put ''LFBlKz0yO1MqPTI7YnJlYWs7Y2FzZSJ1dGY4IjprPWsxKHRoaXMsdGhpcy5sLHRoaXMubCtTKTticmVhaztjYXNlInV0ZjE2bGUiOms9T2wodGhpcyx0aGlzLmwsdGhpcy5sKyhTKj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIGpsLmNhbGwo''@;'; put 'put ''dGhpcyxTLCJkYmNzIik7az1jcHRhYmxlLnV0aWxzLmRlY29kZShGLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKlMpKSxTKj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6az1laCh0aGlzLHRoaXMubCksUz00K3pvKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjprPUdoKHRo''@;'; put 'put ''aXMsdGhpcy5sKSxTPTQrem8odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjprPU5hKHRoaXMsdGhpcy5sKSxTPTQrMip6byh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0IjpTPTQrem8odGhpcyx0aGlzLmwpLGs9JGgodGhpcyx0aGlzLmwpLDImUyYmKFMrPTIpO2JyZWFrO2Nh''@;'; put 'put ''c2UiOGxwcDQiOlM9NCt6byh0aGlzLHRoaXMubCksaz1xaCh0aGlzLHRoaXMubCksMyZTJiYoUys9NC0oMyZTKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoUz0wLGs9IiI7MCE9PShtZT1Qbyh0aGlzLHRoaXMubCtTKyspKTspc2UucHVzaCh0ZShtZSkpO2s9c2Uuam9pbigiIik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJfd3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0obWU9ZW8odGhpcyx0aGlzLmwrUykpOylzZS5wdXNoKHRlKG1lKSksUys9MjtTKz0yLGs9c2Uuam9pbigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCxiZT0wO2JlPFM7KytiZSl7aWYodGhpcy5sZW5zJiYtMSE9''@;'; put 'put ''PXRoaXMubGVucy5pbmRleE9mKFBlKSlyZXR1cm4gbWU9UG8odGhpcyxQZSksdGhpcy5sPVBlKzEscGU9amwuY2FsbCh0aGlzLFMtYmUsbWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHNlLmpvaW4oIiIpK3BlO3NlLnB1c2godGUoZW8odGhpcyxQZSkpKSxQZSs9Mn1rPXNlLmpvaW4oIiIp''@;'; put 'put ''LFMqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtrPWNwdGFibGUudXRpbHMuZGVjb2RlKEYsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK1MpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKGs9IiIsUGU9dGhpcy5sLGJlPTA7YmUhPVM7KytiZSl7aWYodGhp''@;'; put 'put ''cy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKFBlKSlyZXR1cm4gbWU9UG8odGhpcyxQZSksdGhpcy5sPVBlKzEscGU9amwuY2FsbCh0aGlzLFMtYmUsbWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHNlLmpvaW4oIiIpK3BlO3NlLnB1c2godGUoUG8odGhpcyxQZSkpKSxQZSs9MX1r''@;'; put 'put ''PXNlLmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKFMpe2Nhc2UgMTpyZXR1cm4gSz1Qbyh0aGlzLHRoaXMubCksdGhpcy5sKyssSztjYXNlIDI6cmV0dXJuIEs9KCJpIj09PU8/b2w6ZW8pKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTIsSztjYXNlIDQ6Y2FzZS00OnJldHVybiJpIiE9PU8m''@;'; put 'put ''JjEyOCZ0aGlzW3RoaXMubCszXT8oZWU9em8odGhpcyx0aGlzLmwpLHRoaXMubCs9NCxlZSk6KEs9KFM+MD9WczpTcykodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxLKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PU8pcmV0dXJuIGVlPTg9PVM/YW4odGhpcyx0aGlzLmwpOmFuKFt0aGlzW3RoaXMu''@;'; put 'put ''bCs3XSx0aGlzW3RoaXMubCs2XSx0aGlzW3RoaXMubCs1XSx0aGlzW3RoaXMubCs0XSx0aGlzW3RoaXMubCszXSx0aGlzW3RoaXMubCsyXSx0aGlzW3RoaXMubCsxXSx0aGlzW3RoaXMubCswXV0sMCksdGhpcy5sKz04LGVlO1M9ODtjYXNlIDE2Oms9c2QodGhpcyx0aGlzLmwsUyl9fXJldHVy''@;'; put 'put ''biB0aGlzLmwrPVMsa312YXIgSG89ZnVuY3Rpb24oUyxPLGspe1Nba109MjU1Jk8sU1trKzFdPU8+Pj44JjI1NSxTW2srMl09Tz4+PjE2JjI1NSxTW2srM109Tz4+PjI0JjI1NX0sa289ZnVuY3Rpb24oUyxPLGspe1Nba109MjU1Jk8sU1trKzFdPU8+PjgmMjU1LFNbaysyXT1PPj4xNiYyNTUs''@;'; put 'put ''U1trKzNdPU8+PjI0JjI1NX0sTXQ9ZnVuY3Rpb24oUyxPLGspe1Nba109MjU1Jk8sU1trKzFdPU8+Pj44JjI1NX07ZnVuY3Rpb24gQnQoUyxPLGspe3ZhciBLPTAsZWU9MDtpZigiZGJjcyI9PT1rKXtmb3IoZWU9MDtlZSE9Ty5sZW5ndGg7KytlZSlNdCh0aGlzLE8uY2hhckNvZGVBdChlZSks''@;'; put 'put ''dGhpcy5sKzIqZWUpO0s9MipPLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PWspe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IiYmODc0PT1IKWZvcihlZT0wO2VlIT1PLmxlbmd0aDsrK2VlKXt2YXIgc2U9Y3B0YWJsZS51dGlscy5lbmNvZGUoSCxPLmNoYXJBdChlZSkpO3RoaXNbdGhpcy5sK2VlXT1z''@;'; put 'put ''ZVswXX1lbHNlIGZvcihPPU8ucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxlZT0wO2VlIT1PLmxlbmd0aDsrK2VlKXRoaXNbdGhpcy5sK2VlXT0yNTUmTy5jaGFyQ29kZUF0KGVlKTtLPU8ubGVuZ3RofWVsc2V7aWYoImhleCI9PT1rKXtmb3IoO2VlPFM7KytlZSl0aGlzW3RoaXMubCsr''@;'; put 'put ''XT1wYXJzZUludChPLnNsaWNlKDIqZWUsMiplZSsyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09ayl7dmFyIG1lPU1hdGgubWluKHRoaXMubCtTLHRoaXMubGVuZ3RoKTtmb3IoZWU9MDtlZTxNYXRoLm1pbihPLmxlbmd0aCxTKTsrK2VlKXt2YXIgcGU9Ty5jaGFyQ29kZUF0''@;'; put 'put ''KGVlKTt0aGlzW3RoaXMubCsrXT0yNTUmcGUsdGhpc1t0aGlzLmwrK109cGU+Pjh9Zm9yKDt0aGlzLmw8bWU7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKFMpe2Nhc2UgMTpLPTEsdGhpc1t0aGlzLmxdPTI1NSZPO2JyZWFrO2Nhc2UgMjpLPTIsdGhpc1t0aGlzLmxdPTI1''@;'; put 'put ''NSZPLHRoaXNbdGhpcy5sKzFdPTI1NSYoTz4+Pj04KTticmVhaztjYXNlIDM6Sz0zLHRoaXNbdGhpcy5sXT0yNTUmTyx0aGlzW3RoaXMubCsxXT0yNTUmKE8+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1JihPPj4+PTgpO2JyZWFrO2Nhc2UgNDpLPTQsSG8odGhpcyxPLHRoaXMubCk7YnJlYWs7''@;'; put 'put ''Y2FzZSA4OmlmKEs9OCwiZiI9PT1rKXshZnVuY3Rpb24gbjUoUyxPLGspe3ZhciBLPShPPDB8fDEvTz09LTEvMD8xOjApPDw3LGVlPTAsc2U9MCxtZT1LPy1POk87aXNGaW5pdGUobWUpPzA9PW1lP2VlPXNlPTA6KGVlPU1hdGguZmxvb3IoTWF0aC5sb2cobWUpL01hdGguTE4yKSxzZT1tZSpN''@;'; put 'put ''YXRoLnBvdygyLDUyLWVlKSxlZTw9LTEwMjMmJighaXNGaW5pdGUoc2UpfHxzZTxNYXRoLnBvdygyLDUyKSk/ZWU9LTEwMjI6KHNlLT1NYXRoLnBvdygyLDUyKSxlZSs9MTAyMykpOihlZT0yMDQ3LHNlPWlzTmFOKE8pPzI2OTg1OjApO2Zvcih2YXIgcGU9MDtwZTw9NTsrK3BlLHNlLz0yNTYp''@;'; put 'put ''U1trK3BlXT0yNTUmc2U7U1trKzZdPSgxNSZlZSk8PDR8MTUmc2UsU1trKzddPWVlPj40fEt9KHRoaXMsTyx0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00Oks9NCxrbyh0aGlzLE8sdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9Syx0aGlzfWZ1bmN0aW9uIF9uKFMsTyl7dmFyIGs9''@;'; put 'put ''c2QodGhpcyx0aGlzLmwsUy5sZW5ndGg+PjEpO2lmKGshPT1TKXRocm93IG5ldyBFcnJvcihPKyJFeHBlY3RlZCAiK1MrIiBzYXcgIitrKTt0aGlzLmwrPVMubGVuZ3RoPj4xfWZ1bmN0aW9uIG1uKFMsTyl7Uy5sPU8sUy5yZWFkX3NoaWZ0PWpsLFMuY2hrPV9uLFMud3JpdGVfc2hpZnQ9QnR9''@;'; put 'put ''ZnVuY3Rpb24gSW4oUyxPKXtTLmwrPU99ZnVuY3Rpb24geW4oUyl7dmFyIE89eihTKTtyZXR1cm4gbW4oTywwKSxPfWZ1bmN0aW9uIHVyKFMsTyxrKXtpZihTKXt2YXIgSyxlZSxzZTttbihTLFMubHx8MCk7Zm9yKHZhciBtZT1TLmxlbmd0aCxwZT0wLGJlPTA7Uy5sPG1lOyl7MTI4JihwZT1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMSkpJiYocGU9KDEyNyZwZSkrKCgxMjcmUy5yZWFkX3NoaWZ0KDEpKTw8NykpO3ZhciBQZT1MOFtwZV18fEw4WzY1NTM1XTtmb3Ioc2U9MTI3JihLPVMucmVhZF9zaGlmdCgxKSksZWU9MTtlZTw0JiYxMjgmSzsrK2VlKXNlKz0oMTI3JihLPVMucmVhZF9zaGlmdCgxKSkp''@;'; put 'put ''PDw3KmVlO2JlPVMubCtzZTt2YXIgVmU9KFBlLmZ8fEluKShTLHNlLGspO2lmKFMubD1iZSxPKFZlLFBlLm4scGUpKXJldHVybn19fWZ1bmN0aW9uIHlpKCl7dmFyIFM9W10sTz1UZT8yNTY6MjA0OCxrPWZ1bmN0aW9uKFBlKXt2YXIgVmU9eW4oUGUpO3JldHVybiBtbihWZSwwKSxWZX0sSz1r''@;'; put 'put ''KE8pLGVlPWZ1bmN0aW9uKCl7SyYmKEsubGVuZ3RoPksubCYmKChLPUsuc2xpY2UoMCxLLmwpKS5sPUsubGVuZ3RoKSxLLmxlbmd0aD4wJiZTLnB1c2goSyksSz1udWxsKX0sc2U9ZnVuY3Rpb24oUGUpe3JldHVybiBLJiZQZTxLLmxlbmd0aC1LLmw/SzooZWUoKSxLPWsoTWF0aC5tYXgoUGUr''@;'; put 'put ''MSxPKSkpfTtyZXR1cm57bmV4dDpzZSxwdXNoOmZ1bmN0aW9uKFBlKXtlZSgpLG51bGw9PShLPVBlKS5sJiYoSy5sPUsubGVuZ3RoKSxzZShPKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIGVlKCksYjAoW1NdKX0sX2J1ZnM6U319ZnVuY3Rpb24gRnIoUyxPLGssSyl7dmFyIHNlLGVlPStIeltP''@;'; put 'put ''XTtpZighaXNOYU4oZWUpKXtLfHwoSz1MOFtlZV0ucHx8KGt8fFtdKS5sZW5ndGh8fDApLHNlPTErKGVlPj0xMjg/MTowKSsxLEs+PTEyOCYmKytzZSxLPj0xNjM4NCYmKytzZSxLPj0yMDk3MTUyJiYrK3NlO3ZhciBtZT1TLm5leHQoc2UpO2VlPD0xMjc/bWUud3JpdGVfc2hpZnQoMSxlZSk6''@;'; put 'put ''KG1lLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmZWUpKSxtZS53cml0ZV9zaGlmdCgxLGVlPj43KSk7Zm9yKHZhciBwZT0wOzQhPXBlOysrcGUpe2lmKCEoSz49MTI4KSl7bWUud3JpdGVfc2hpZnQoMSxLKTticmVha31tZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JkspKSxLPj49N31LPjAmJkFy''@;'; put 'put ''KGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIHRhKFMsTyxrKXt2YXIgSz1xdChTKTtpZihPLnM/KEsuY1JlbCYmKEsuYys9Ty5zLmMpLEsuclJlbCYmKEsucis9Ty5zLnIpKTooSy5jUmVsJiYoSy5jKz1PLmMpLEsuclJlbCYmKEsucis9Ty5yKSksIWt8fGsuYmlmZjwxMil7Zm9yKDtLLmM+PTI1''@;'; put 'put ''NjspSy5jLT0yNTY7Zm9yKDtLLnI+PTY1NTM2OylLLnItPTY1NTM2fXJldHVybiBLfWZ1bmN0aW9uIG9hKFMsTyxrKXt2YXIgSz1xdChTKTtyZXR1cm4gSy5zPXRhKEsucyxPLnMsayksSy5lPXRhKEsuZSxPLnMsayksS31mdW5jdGlvbiBWYShTLE8pe2lmKFMuY1JlbCYmUy5jPDApZm9yKFM9''@;'; put 'put ''cXQoUyk7Uy5jPDA7KVMuYys9Tz44PzE2Mzg0OjI1NjtpZihTLnJSZWwmJlMucjwwKWZvcihTPXF0KFMpO1MucjwwOylTLnIrPU8+OD8xMDQ4NTc2Ok8+NT82NTUzNjoxNjM4NDtpZihTLmNSZWwmJlMuYz49KE8+OD8xNjM4NDoyNTYpKWZvcihTPXF0KFMpO1MuYz49KE8+OD8xNjM4NDoyNTYp''@;'; put 'put ''OylTLmMtPU8+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI+PTEwNDg1NzYpZm9yKFM9cXQoUyk7Uy5yPj0xMDQ4NTc2OylTLnItPTEwNDg1NzY7dmFyIGs9cWkoUyk7cmV0dXJuIVMuY1JlbCYmbnVsbCE9Uy5jUmVsJiYoaz1mdW5jdGlvbiBYaChTKXtyZXR1cm4gUy5yZXBsYWNlKC9eKFtB''@;'; put 'put ''LVpdKS8sIiQkJDEiKX0oaykpLCFTLnJSZWwmJm51bGwhPVMuclJlbCYmKGs9ZnVuY3Rpb24gUGMoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KGspKSxrfWZ1bmN0aW9uICRvKFMsTyl7cmV0dXJuIDAhPVMucy5yfHxTLnMuclJlbHx8Uy5lLnIhPShP''@;'; put 'put ''LmJpZmY+PTEyPzEwNDg1NzU6Ty5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8Uy5lLnJSZWw/MCE9Uy5zLmN8fFMucy5jUmVsfHxTLmUuYyE9KE8uYmlmZj49MTI/MTYzODM6MjU1KXx8Uy5lLmNSZWw/VmEoUy5zLE8uYmlmZikrIjoiK1ZhKFMuZSxPLmJpZmYpOihTLnMuclJlbD8iIjoiJCIpK2pp''@;'; put 'put ''KFMucy5yKSsiOiIrKFMuZS5yUmVsPyIiOiIkIikramkoUy5lLnIpOihTLnMuY1JlbD8iIjoiJCIpK1RhKFMucy5jKSsiOiIrKFMuZS5jUmVsPyIiOiIkIikrVGEoUy5lLmMpfXZhciBYbD17fTtmdW5jdGlvbiBfbyhTKXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gemwoUyl7cmV0dXJuIFMu''@;'; put 'put ''cmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShTKSwxMCktMX1mdW5jdGlvbiBqaShTKXtyZXR1cm4iIisoUysxKX1mdW5jdGlvbiBDYShTKXtmb3IodmFyIE89ZnVuY3Rpb24gRzAoUyl7cmV0dXJuIFMucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KFMpLGs9MCxLPTA7SyE9PU8ubGVuZ3Ro''@;'; put 'put ''OysrSylrPTI2KmsrTy5jaGFyQ29kZUF0KEspLTY0O3JldHVybiBrLTF9ZnVuY3Rpb24gVGEoUyl7aWYoUzwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitTKTt2YXIgTz0iIjtmb3IoKytTO1M7Uz1NYXRoLmZsb29yKChTLTEpLzI2KSlPPVN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''KFMtMSklMjYrNjUpK087cmV0dXJuIE99ZnVuY3Rpb24gTm8oUyl7Zm9yKHZhciBPPTAsaz0wLEs9MDtLPFMubGVuZ3RoOysrSyl7dmFyIGVlPVMuY2hhckNvZGVBdChLKTtlZT49NDgmJmVlPD01Nz9PPTEwKk8rKGVlLTQ4KTplZT49NjUmJmVlPD05MCYmKGs9MjYqaysoZWUtNjQpKX1yZXR1''@;'; put 'put ''cm57YzprLTEscjpPLTF9fWZ1bmN0aW9uIHFpKFMpe2Zvcih2YXIgTz1TLmMrMSxrPSIiO087Tz0oTy0xKS8yNnwwKWs9U3RyaW5nLmZyb21DaGFyQ29kZSgoTy0xKSUyNis2NSkraztyZXR1cm4gaysoUy5yKzEpfWZ1bmN0aW9uIE1zKFMpe3ZhciBPPVMuaW5kZXhPZigiOiIpO3JldHVybi0x''@;'; put 'put ''PT1PP3tzOk5vKFMpLGU6Tm8oUyl9OntzOk5vKFMuc2xpY2UoMCxPKSksZTpObyhTLnNsaWNlKE8rMSkpfX1mdW5jdGlvbiByYShTLE8pe3JldHVybiB0eXBlb2YgTz4idSJ8fCJudW1iZXIiPT10eXBlb2YgTz9yYShTLnMsUy5lKTooInN0cmluZyIhPXR5cGVvZiBTJiYoUz1xaShTKSksInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBPJiYoTz1xaShPKSksUz09Tz9TOlMrIjoiK08pfWZ1bmN0aW9uIG9vKFMpe3ZhciBPPUpTT04ucGFyc2UoJ3sicyI6eyJjIjowLCJyIjowfSwiZSI6eyJjIjowLCJyIjowfX0nKSxrPTAsSz0wLGVlPTAsc2U9Uy5sZW5ndGg7Zm9yKGs9MDtLPHNlJiYhKChlZT1TLmNo''@;'; put 'put ''YXJDb2RlQXQoSyktNjQpPDF8fGVlPjI2KTsrK0spaz0yNiprK2VlO2ZvcihPLnMuYz0tLWssaz0wO0s8c2UmJiEoKGVlPVMuY2hhckNvZGVBdChLKS00OCk8MHx8ZWU+OSk7KytLKWs9MTAqaytlZTtpZihPLnMucj0tLWssSz09PXNlfHw1OD09PVMuY2hhckNvZGVBdCgrK0spKXJldHVybiBP''@;'; put 'put ''LmUuYz1PLnMuYyxPLmUucj1PLnMucixPO2ZvcihrPTA7SyE9c2UmJiEoKGVlPVMuY2hhckNvZGVBdChLKS02NCk8MXx8ZWU+MjYpOysrSylrPTI2KmsrZWU7Zm9yKE8uZS5jPS0tayxrPTA7SyE9c2UmJiEoKGVlPVMuY2hhckNvZGVBdChLKS00OCk8MHx8ZWU+OSk7KytLKWs9MTAqaytlZTty''@;'; put 'put ''ZXR1cm4gTy5lLnI9LS1rLE99ZnVuY3Rpb24gYTUoUyxPKXt2YXIgaz0iZCI9PVMudCYmTyBpbnN0YW5jZW9mIERhdGU7aWYobnVsbCE9Uy56KXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KFMueixrP0plKE8pOk8pfWNhdGNoe310cnl7cmV0dXJuIFMudz1BLmZvcm1hdCgoUy5YRnx8e30pLm51''@;'; put 'put ''bUZtdElkfHwoaz8xNDowKSxrP0plKE8pOk8pfWNhdGNoe3JldHVybiIiK099fWZ1bmN0aW9uIF9sKFMsTyxrKXtyZXR1cm4gbnVsbD09U3x8bnVsbD09Uy50fHwieiI9PVMudD8iIjp2b2lkIDAhPT1TLnc/Uy53OigiZCI9PVMudCYmIVMueiYmayYmay5kYXRlTkYmJihTLno9ay5kYXRlTkYp''@;'; put 'put ''LCJlIj09Uy50P01jW1Mudl18fFMudjphNShTLG51bGw9PU8/Uy52Ok8pKX1mdW5jdGlvbiB0aChTLE8pe3ZhciBrPU8mJk8uc2hlZXQ/Ty5zaGVldDoiU2hlZXQxIixLPXt9O3JldHVybiBLW2tdPVMse1NoZWV0TmFtZXM6W2tdLFNoZWV0czpLfX1mdW5jdGlvbiBmNChTLE8sayl7dmFyIEs9''@;'; put 'put ''a3x8e30sZWU9Uz9BcnJheS5pc0FycmF5KFMpOksuZGVuc2U7bnVsbCE9b2UmJm51bGw9PWVlJiYoZWU9b2UpO3ZhciBzZT1TfHwoZWU/W106e30pLG1lPTAscGU9MDtpZihzZSYmbnVsbCE9Sy5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgSy5vcmlnaW4pbWU9Sy5vcmlnaW47ZWxzZXt2''@;'; put 'put ''YXIgYmU9InN0cmluZyI9PXR5cGVvZiBLLm9yaWdpbj9ObyhLLm9yaWdpbik6Sy5vcmlnaW47bWU9YmUucixwZT1iZS5jfXNlWyIhcmVmIl18fChzZVsiIXJlZiJdPSJBMTpBMSIpfXZhciBQZT17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihzZVsiIXJlZiJdKXt2YXIgVmU9b28o''@;'; put 'put ''c2VbIiFyZWYiXSk7UGUucy5jPVZlLnMuYyxQZS5zLnI9VmUucy5yLFBlLmUuYz1NYXRoLm1heChQZS5lLmMsVmUuZS5jKSxQZS5lLnI9TWF0aC5tYXgoUGUuZS5yLFZlLmUuciksLTE9PW1lJiYoUGUuZS5yPW1lPVZlLmUucisxKX1mb3IodmFyIFllPTA7WWUhPU8ubGVuZ3RoOysrWWUpaWYo''@;'; put 'put ''T1tZZV0pe2lmKCFBcnJheS5pc0FycmF5KE9bWWVdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5cyIpO2Zvcih2YXIgZXQ9MDtldCE9T1tZZV0ubGVuZ3RoOysrZXQpaWYoISh0eXBlb2YgT1tZZV1bZXRdPiJ1Iikpe3ZhciBjdD17djpP''@;'; put 'put ''W1llXVtldF19LEV0PW1lK1llLGF0PXBlK2V0O2lmKFBlLnMucj5FdCYmKFBlLnMucj1FdCksUGUucy5jPmF0JiYoUGUucy5jPWF0KSxQZS5lLnI8RXQmJihQZS5lLnI9RXQpLFBlLmUuYzxhdCYmKFBlLmUuYz1hdCksIU9bWWVdW2V0XXx8Im9iamVjdCIhPXR5cGVvZiBPW1llXVtldF18fEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoT1tZZV1bZXRdKXx8T1tZZV1bZXRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoY3QudikmJihjdC5mPU9bWWVdW2V0XVsxXSxjdC52PWN0LnZbMF0pLG51bGw9PT1jdC52KWlmKGN0LmYpY3QudD0ibiI7ZWxzZSBpZihLLm51bGxFcnJvciljdC50PSJlIixj''@;'; put 'put ''dC52PTA7ZWxzZXtpZighSy5zaGVldFN0dWJzKWNvbnRpbnVlO2N0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGN0LnY/Y3QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgY3Qudj9jdC50PSJiIjpjdC52IGluc3RhbmNlb2YgRGF0ZT8oY3Quej1LLmRhdGVORnx8QS5fdGFibGVbMTRdLEsu''@;'; put 'put ''Y2VsbERhdGVzPyhjdC50PSJkIixjdC53PUEuZm9ybWF0KGN0LnosSmUoY3QudikpKTooY3QudD0ibiIsY3Qudj1KZShjdC52KSxjdC53PUEuZm9ybWF0KGN0LnosY3QudikpKTpjdC50PSJzIjtlbHNlIGN0PU9bWWVdW2V0XTtpZihjdCYmY3QuaCl0cnl7Y3QuUj1tZC5odG1sX3RvX3JzKGN0''@;'; put 'put ''LmgpLGN0LnY9IiI7Zm9yKHZhciBidD0wO2J0PGN0LlIubGVuZ3RoOysrYnQpY3Qudis9Y3QuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKGVlKXNlW0V0XXx8KHNlW0V0XT1bXSksc2VbRXRdW2F0XSYmc2VbRXRdW2F0XS5zJiYoY3Qucz1zZVtFdF1bYXRdLnMpLHNlW0V0XVthdF0mJnNlW0V0XVth''@;'; put 'put ''dF0ueiYmKGN0Lno9c2VbRXRdW2F0XS56KSxzZVtFdF1bYXRdPWN0O2Vsc2V7dmFyIGp0PXFpKHtjOmF0LHI6RXR9KTtzZVtqdF0mJnNlW2p0XS5zJiYoY3Qucz1zZVtqdF0ucyksc2VbanRdJiZzZVtqdF0ueiYmKGN0Lno9c2VbanRdLnopLHNlW2p0XT1jdH19fXJldHVybiBQZS5zLmM8MWU3''@;'; put 'put ''JiYoc2VbIiFyZWYiXT1yYShQZSkpLHNlfWZ1bmN0aW9uIHA0KFMsTyl7cmV0dXJuIGY0KG51bGwsUyxPKX1mdW5jdGlvbiBLMChTLE8pe3JldHVybiBPfHwoTz15big0KSksTy53cml0ZV9zaGlmdCg0LFMpLE99ZnVuY3Rpb24gZ3UoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAw''@;'; put 'put ''PT09Tz8iIjpTLnJlYWRfc2hpZnQoTywiZGJjcyIpfWZ1bmN0aW9uIEZjKFMsTyl7dmFyIGs9ITE7cmV0dXJuIG51bGw9PU8mJihrPSEwLE89eW4oNCsyKlMubGVuZ3RoKSksTy53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxTLmxlbmd0aD4wJiZPLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/''@;'; put 'put ''Ty5zbGljZSgwLE8ubCk6T31mdW5jdGlvbiBSdyhTKXtyZXR1cm57aWNoOlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gc2woUyxPKXt2YXIgaz1TLmwsSz1TLnJlYWRfc2hpZnQoMSksZWU9Z3UoUyksc2U9W10sbWU9e3Q6ZWUsaDplZX07aWYoMSZLKXtm''@;'; put 'put ''b3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSxiZT0wO2JlIT1wZTsrK2JlKXNlLnB1c2goUncoUykpO21lLnI9c2V9ZWxzZSBtZS5yPVt7aWNoOjAsaWZudDowfV07cmV0dXJuIFMubD1rK08sbWV9IWZ1bmN0aW9uKFMsTyl7dmFyIGs7aWYodHlwZW9mIGNyeXB0b0Jyb3dzZXJpZnk8InUiKWs9''@;'; put 'put ''Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiBPPCJ1IilrPU87ZWxzZSB0cnl7az1iKDkxNDI2KX1jYXRjaHtrPW51bGx9Uy5yYzQ9ZnVuY3Rpb24oSyxlZSl7dmFyIHNlPW5ldyBBcnJheSgyNTYpLG1lPTAscGU9MCxiZT0wLFBlPTA7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKXNlW3Bl''@;'; put 'put ''XT1wZTtmb3IocGU9MDsyNTYhPXBlOysrcGUpYmU9YmUrc2VbcGVdK0tbcGUlSy5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1LFBlPXNlW3BlXSxzZVtwZV09c2VbYmVdLHNlW2JlXT1QZTtwZT1iZT0wO3ZhciBWZT16KGVlLmxlbmd0aCk7Zm9yKG1lPTA7bWUhPWVlLmxlbmd0aDsrK21lKVBl''@;'; put 'put ''PXNlW3BlPXBlKzEmMjU1XSxzZVtwZV09c2VbYmU9KGJlK3NlW3BlXSklMjU2XSxzZVtiZV09UGUsVmVbbWVdPWVlW21lXV5zZVtzZVtwZV0rc2VbYmVdJjI1NV07cmV0dXJuIFZlfSxTLm1kNT1mdW5jdGlvbihLKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNyeXB0byIp''@;'; put 'put ''O3JldHVybiBrLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShCdWZmZXIuZnJvbShLKSkuZGlnZXN0KCJoZXgiKX19KFhsLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0bzp2b2lkIDApO3ZhciBMdz1zbDtmdW5jdGlvbiBEMShTKXt2YXIgTz1TLnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hpZnQo''@;'; put 'put ''Mik7cmV0dXJuIGsrPVMucmVhZF9zaGlmdCgxKTw8MTYsUy5sKysse2M6TyxpU3R5bGVSZWY6a319ZnVuY3Rpb24geHIoUyxPKXtyZXR1cm4gbnVsbD09TyYmKE89eW4oOCkpLE8ud3JpdGVfc2hpZnQoLTQsUy5jKSxPLndyaXRlX3NoaWZ0KDMsUy5pU3R5bGVSZWZ8fFMucyksTy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApLE99ZnVuY3Rpb24gSmgoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBPKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOi0xLGlTdHlsZVJlZjpPfX1mdW5jdGlvbiBmaShTLE8pe3JldHVybiBudWxsPT1PJiYoTz15big0KSksTy53cml0ZV9zaGlmdCgzLFMu''@;'; put 'put ''aVN0eWxlUmVmfHxTLnMpLE8ud3JpdGVfc2hpZnQoMSwwKSxPfXZhciBvNT1ndSxzNT1GYztmdW5jdGlvbiB0MChTKXt2YXIgTz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1PfHw0Mjk0OTY3Mjk1PT09Tz8iIjpTLnJlYWRfc2hpZnQoTywiZGJjcyIpfWZ1bmN0aW9uIHBmKFMsTyl7dmFy''@;'; put 'put ''IGs9ITE7cmV0dXJuIG51bGw9PU8mJihrPSEwLE89eW4oMTI3KSksTy53cml0ZV9zaGlmdCg0LFMubGVuZ3RoPjA/Uy5sZW5ndGg6NDI5NDk2NzI5NSksUy5sZW5ndGg+MCYmTy53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP08uc2xpY2UoMCxPLmwpOk99dmFyIGw1PWd1LGc0PXQwLGM1PXBm''@;'; put 'put ''O2Z1bmN0aW9uIEkxKFMpe3ZhciBPPVMuc2xpY2UoUy5sLFMubCs0KSxrPTEmT1swXSxLPTImT1swXTtTLmwrPTQsT1swXSY9MjUyO3ZhciBlZT0wPT09Sz9hbihbMCwwLDAsMCxPWzBdLE9bMV0sT1syXSxPWzNdXSwwKTpWcyhPLDApPj4yO3JldHVybiBrP2VlLzEwMDplZX1mdW5jdGlvbiB1''@;'; put 'put ''dihTLE8pe251bGw9PU8mJihPPXluKDQpKTt2YXIgaz0wLEs9MCxlZT0xMDAqUztpZihTPT0oMHxTKSYmUz49LSgxPDwyOSkmJlM8MTw8Mjk/Sz0xOmVlPT0oMHxlZSkmJmVlPj0tKDE8PDI5KSYmZWU8MTw8MjkmJihLPTEsaz0xKSwhSyl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJr''@;'; put 'put ''TnVtYmVyICIrUyk7Ty53cml0ZV9zaGlmdCgtNCwoKGs/ZWU6Uyk8PDIpKyhrKzIpKX1mdW5jdGlvbiBsZChTKXt2YXIgTz17czp7fSxlOnt9fTtyZXR1cm4gTy5zLnI9Uy5yZWFkX3NoaWZ0KDQpLE8uZS5yPVMucmVhZF9zaGlmdCg0KSxPLnMuYz1TLnJlYWRfc2hpZnQoNCksTy5lLmM9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLE99dmFyIG11PWxkLGdmPWZ1bmN0aW9uIFQ2KFMsTyl7cmV0dXJuIE98fChPPXluKDE2KSksTy53cml0ZV9zaGlmdCg0LFMucy5yKSxPLndyaXRlX3NoaWZ0KDQsUy5lLnIpLE8ud3JpdGVfc2hpZnQoNCxTLnMuYyksTy53cml0ZV9zaGlmdCg0LFMuZS5jKSxPfTtmdW5j''@;'; put 'put ''dGlvbiBuMChTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9W10sSz0wO0s8TzsrK0spe3ZhciBlZT1tdShTKTtrLnB1c2gocmEoZWUpKX1yZXR1cm4gay5qb2luKCIsIil9ZnVuY3Rpb24gUGwoUyl7aWYoUy5sZW5ndGgtUy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxv''@;'; put 'put ''dyI7cmV0dXJuIFMucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gT3UoUyxPKXtyZXR1cm4oT3x8eW4oOCkpLndyaXRlX3NoaWZ0KDgsUywiZiIpfWZ1bmN0aW9uIFFoKFMpe3ZhciBPPXt9LEs9Uy5yZWFkX3NoaWZ0KDEpPj4+MSxlZT1TLnJlYWRfc2hpZnQoMSksc2U9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIsImkiKSxtZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KDEpLGJlPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goUy5sKyssSyl7Y2FzZSAwOk8uYXV0bz0xO2JyZWFrO2Nhc2UgMTpPLmluZGV4PWVlO3ZhciBQZT1yMFtlZV07UGUmJihPLnJnYj1oZChQZSkpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjpPLnJnYj1oZChbbWUscGUsYmVdKTticmVhaztjYXNlIDM6Ty50aGVtZT1lZX1yZXR1cm4gMCE9c2UmJihPLnRpbnQ9c2U+MD9zZS8zMjc2NzpzZS8zMjc2OCksT31mdW5jdGlvbiBtZihTLE8pe2lmKE98fChPPXluKDgpKSwhU3x8Uy5hdXRvKXJldHVybiBPLndyaXRlX3NoaWZ0KDQsMCks''@;'; put 'put ''Ty53cml0ZV9zaGlmdCg0LDApLE87bnVsbCE9Uy5pbmRleD8oTy53cml0ZV9zaGlmdCgxLDIpLE8ud3JpdGVfc2hpZnQoMSxTLmluZGV4KSk6bnVsbCE9Uy50aGVtZT8oTy53cml0ZV9zaGlmdCgxLDYpLE8ud3JpdGVfc2hpZnQoMSxTLnRoZW1lKSk6KE8ud3JpdGVfc2hpZnQoMSw1KSxPLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCkpO3ZhciBrPVMudGludHx8MDtpZihrPjA/ayo9MzI3Njc6azwwJiYoayo9MzI3NjgpLE8ud3JpdGVfc2hpZnQoMixrKSxTLnJnYiYmbnVsbD09Uy50aGVtZSl7dmFyIEs9Uy5yZ2J8fCJGRkZGRkYiOyJudW1iZXIiPT10eXBlb2YgSyYmKEs9KCIwMDAwMDAiK0sudG9T''@;'; put 'put ''dHJpbmcoMTYpKS5zbGljZSgtNikpLE8ud3JpdGVfc2hpZnQoMSxwYXJzZUludChLLnNsaWNlKDAsMiksMTYpKSxPLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoSy5zbGljZSgyLDQpLDE2KSksTy53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEsuc2xpY2UoNCw2KSwxNikpLE8ud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwyNTUpfWVsc2UgTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMSwwKSxPLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIE99ZnVuY3Rpb24gT3coUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmwrKyx7ZkJvbGQ6MSZPLGZJdGFsaWM6MiZPLGZVbmRlcmxpbmU6NCZP''@;'; put 'put ''LGZTdHJpa2VvdXQ6OCZPLGZPdXRsaW5lOjE2Jk8sZlNoYWRvdzozMiZPLGZDb25kZW5zZTo2NCZPLGZFeHRlbmQ6MTI4Jk99fWZ1bmN0aW9uIFB3KFMsTyl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDQpO3N3aXRjaChLKXtjYXNlIDA6cmV0dXJuIiI7Y2FzZSA0Mjk0OTY3Mjk1OmNhc2UgNDI5NDk2''@;'; put 'put ''NzI5NDpyZXR1cm57MjoiQklUTUFQIiwzOiJNRVRBRklMRVBJQ1QiLDg6IkRJQiIsMTQ6IkVOSE1FVEFGSUxFIn1bUy5yZWFkX3NoaWZ0KDQpXXx8IiJ9aWYoSz40MDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDbGlwYm9hcmQ6ICIrSy50b1N0cmluZygxNikpO3JldHVybiBTLmwt''@;'; put 'put ''PTQsUy5yZWFkX3NoaWZ0KDAsMT09Tz8ibHBzdHIiOiJscHdzdHIiKX12YXIgZTI9MixKbD0zLEkwPTEyLE5uPTgxLEZ3PVs4MCxObl0sbTQ9ezE6e246IkNvZGVQYWdlIix0OmUyfSwyOntuOiJDYXRlZ29yeSIsdDo4MH0sMzp7bjoiUHJlc2VudGF0aW9uRm9ybWF0Iix0OjgwfSw0OntuOiJC''@;'; put 'put ''eXRlQ291bnQiLHQ6Smx9LDU6e246IkxpbmVDb3VudCIsdDpKbH0sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6Smx9LDc6e246IlNsaWRlQ291bnQiLHQ6Smx9LDg6e246Ik5vdGVDb3VudCIsdDpKbH0sOTp7bjoiSGlkZGVuQ291bnQiLHQ6Smx9LDEwOntuOiJNdWx0aW1lZGlhQ2xpcENvdW50''@;'; put 'put ''Iix0OkpsfSwxMTp7bjoiU2NhbGVDcm9wIix0OjExfSwxMjp7bjoiSGVhZGluZ1BhaXJzIix0OjQwOTZ8STB9LDEzOntuOiJUaXRsZXNPZlBhcnRzIix0OjQxMjZ9LDE0OntuOiJNYW5hZ2VyIix0OjgwfSwxNTp7bjoiQ29tcGFueSIsdDo4MH0sMTY6e246IkxpbmtzVXBUb0RhdGUiLHQ6MTF9''@;'; put 'put ''LDE3OntuOiJDaGFyYWN0ZXJDb3VudCIsdDpKbH0sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDpKbCxwOiJ2ZXJzaW9uIn0sMjQ6e246IkRpZ1NpZyIsdDo2NX0sMjY6e246IkNvbnRlbnRUeXBlIix0''@;'; put 'put ''OjgwfSwyNzp7bjoiQ29udGVudFN0YXR1cyIsdDo4MH0sMjg6e246Ikxhbmd1YWdlIix0OjgwfSwyOTp7bjoiVmVyc2lvbiIsdDo4MH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LGQ1PXsx''@;'; put 'put ''OntuOiJDb2RlUGFnZSIsdDplMn0sMjp7bjoiVGl0bGUiLHQ6ODB9LDM6e246IlN1YmplY3QiLHQ6ODB9LDQ6e246IkF1dGhvciIsdDo4MH0sNTp7bjoiS2V5d29yZHMiLHQ6ODB9LDY6e246IkNvbW1lbnRzIix0OjgwfSw3OntuOiJUZW1wbGF0ZSIsdDo4MH0sODp7bjoiTGFzdEF1dGhvciIs''@;'; put 'put ''dDo4MH0sOTp7bjoiUmV2TnVtYmVyIix0OjgwfSwxMDp7bjoiRWRpdFRpbWUiLHQ6NjR9LDExOntuOiJMYXN0UHJpbnRlZCIsdDo2NH0sMTI6e246IkNyZWF0ZWREYXRlIix0OjY0fSwxMzp7bjoiTW9kaWZpZWREYXRlIix0OjY0fSwxNDp7bjoiUGFnZUNvdW50Iix0OkpsfSwxNTp7bjoiV29y''@;'; put 'put ''ZENvdW50Iix0OkpsfSwxNjp7bjoiQ2hhckNvdW50Iix0OkpsfSwxNzp7bjoiVGh1bWJuYWlsIix0OjcxfSwxODp7bjoiQXBwbGljYXRpb24iLHQ6ODB9LDE5OntuOiJEb2NTZWN1cml0eSIsdDpKbH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoi''@;'; put 'put ''QmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LGg1PUllKG00LCJuIiksdmY9SWUoZDUsIm4iKSxENj17MToiVVMiLDI6IkNBIiwzOiIiLDc6IlJVIiwyMDoiRUciLDMwOiJHUiIsMzE6Ik5MIiwzMjoiQkUiLDMzOiJGUiIsMzQ6IkVTIiwzNjoiSFUiLDM5OiJJVCIsNDE6IkNIIiw0Mzoi''@;'; put 'put ''QVQiLDQ0OiJHQiIsNDU6IkRLIiw0NjoiU0UiLDQ3OiJOTyIsNDg6IlBMIiw0OToiREUiLDUyOiJNWCIsNTU6IkJSIiw2MToiQVUiLDY0OiJOWiIsNjY6IlRIIiw4MToiSlAiLDgyOiJLUiIsODQ6IlZOIiw4NjoiQ04iLDkwOiJUUiIsMTA1OiJKUyIsMjEzOiJEWiIsMjE2OiJNQSIsMjE4OiJM''@;'; put 'put ''WSIsMzUxOiJQVCIsMzU0OiJJUyIsMzU4OiJGSSIsNDIwOiJDWiIsODg2OiJUVyIsOTYxOiJMQiIsOTYyOiJKTyIsOTYzOiJTWSIsOTY0OiJJUSIsOTY1OiJLVyIsOTY2OiJTQSIsOTcxOiJBRSIsOTcyOiJJTCIsOTc0OiJRQSIsOTgxOiJJUiIsNjU1MzU6IlVTIn0saHY9W251bGwsInNvbGlk''@;'; put 'put ''IiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGln''@;'; put 'put ''aHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdO2Z1bmN0aW9uIEk2KFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihPKXtyZXR1cm5bTz4+MTYmMjU1LE8+PjgmMjU1LDI1NSZPXX0pfXZhciB2ND1JNihbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4''@;'; put 'put ''MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsODM4ODYwOCwzMjc2OCwxMjgsODQyMTM3Niw4Mzg4NzM2LDMyODk2LDEyNjMyMjU2LDg0MjE1MDQsMTAwNjY0MzEsMTAwNDAxNjYsMTY3Nzcx''@;'; put 'put ''NjQsMTM0MzQ4NzksNjY4NDc3NCwxNjc0NDU3NiwyNjMxNiwxMzQyMTgyMywxMjgsMTY3MTE5MzUsMTY3NzY5NjAsNjU1MzUsODM4ODczNiw4Mzg4NjA4LDMyODk2LDI1NSw1MjQ3OSwxMzQzNDg3OSwxMzQzNDgyOCwxNjc3NzExMywxMDA3OTQ4NywxNjc1MTA1MiwxMzQwODc2NywxNjc2NDA1''@;'; put 'put ''NywzMzY4NzAzLDMzOTQ3NjQsMTAwNzkyMzIsMTY3NjM5MDQsMTY3NTA4NDgsMTY3Mzc3OTIsNjcxMDkzNyw5ODY4OTUwLDEzMTU4LDMzODE2MDYsMTMwNTYsMzM1NTM5MiwxMDA0MDA2NCwxMDA0MDE2NiwzMzU1NTQ1LDMzNTU0NDMsMCwxNjc3NzIxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDAsMCwwXSkscjA9cXQodjQpLEh3PUk2KFsxMjYzMjI1Niw5ODY4OTUwLDg0MjE1MDQsNjcxMDg4NiwzMzU1NDQzLDE2NzExNjgwLDMyNzY4LDEzMzY5NDk3LDEyOCwzMzk0NTYwLDI2MzY3LDEwMDI3MjEyLDEwMDUzMTcxLDEyOCwzMjc2OCw4Mzg4NjA4LDMyODk2LDgzODg3MzYsODQy''@;'; put 'put ''MTM3NiwxMzYzMTQ4OCwxNDUzOTk5NCwxMzA2ODg1MCwxMzkyNDM1Miw5OTY3NDk2LDkxNzUyNjcsOTE5NTAwOCwzNjgzNTM3LDEwNjkyNTgsODg4MDg5OSw3NDk0NjQsMjg5MzQ3NiwxMTc0NTczMCwzNzUwMjAxLDE1NTU5NTAzLDE4Mzc5NDEsMTIwODQzNTksNzYzMjI1MCw3MzYzMzI4LDk1''@;'; put 'put ''MTQ1ODgsODI4ODYxNywzMDM2ODE0LDExMTg0ODEwXSksTWM9ezA6IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSxQMz1EZShNYykseTQ9eyJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleFdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5pbnRsbWFj''@;'; put 'put ''cm9zaGVldCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhNcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz''@;'; put 'put ''LW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz''@;'; put 'put ''LW9mZmljZWRvY3VtZW50LmN1c3RvbVhtbFByb3BlcnRpZXMreG1sIjoiY3VzdG9teG1scHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhj''@;'; put 'put ''ZWwucGl2b3RUYWJsZSI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdt''@;'; put 'put ''bC5jaGFydCt4bWwiOiJjaGFydG9ianMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0Y29sb3JzdHlsZSt4bWwiOiJjaGFydGNvbG9ycyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJjaGFydHN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1v''@;'; put 'put ''ZmZpY2UuY2hhcnRleCt4bWwiOiJjaGFydGV4cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW4iOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWluK3htbCI6ImNhbGNjaGFp''@;'; put 'put ''bnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5wcmludGVyU2V0dGluZ3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZl''@;'; put 'put ''WCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmF0dGFjaGVkVG9vbGJhcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFk''@;'; put 'put ''c2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiOiJsaW5r''@;'; put 'put ''cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldE1ldGFkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5w''@;'; put 'put ''aXZvdENhY2hlRGVmaW5pdGlvbiI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNo''@;'; put 'put ''ZURlZmluaXRpb24reG1sIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucXVlcnlUYWJs''@;'; put 'put ''ZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5y''@;'; put 'put ''ZXZpc2lvbkhlYWRlcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwiOiJUT0RPIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4bWwiOiJUT0RPIiwiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNs''@;'; put 'put ''aWNlciI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6InRhYmxlcyIsImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwiOiJ0aGVtZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVPdmVycmlkZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5l''@;'; put 'put ''K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IjoidmJhIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0U2lnbmF0dXJlIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5tcy1leGNlbC5jb250cm9scHJvcGVydGllcyt4bWwiOiJjdHJscHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6ImRhdGFtb2RlbHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5K3htbCI6IlRPRE8iLCJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu''@;'; put 'put ''ZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiOiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm9s''@;'; put 'put ''ZU9iamVjdCI6IlRPRE8iLCJpbWFnZS9wbmciOiJUT0RPIixzaGVldDoianMifSxmdj1mdW5jdGlvbigpe3ZhciBTPXt3b3JrYm9va3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIix4bHNt''@;'; put 'put ''OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIix4bGFtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFi''@;'; put 'put ''bGVkLm1haW4reG1sIix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCJ9LHN0cnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRz''@;'; put 'put ''aGVldG1sLnNoYXJlZFN0cmluZ3MreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyJ9LGNvbW1lbnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWwiLHhs''@;'; put 'put ''c2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50cyJ9LHNoZWV0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndvcmtz''@;'; put 'put ''aGVldCJ9LGNoYXJ0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0In0sZGlhbG9nczp7eGxzeDoiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hlZXQifSxtYWNyb3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0K3ht''@;'; put 'put ''bCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQifSx0YWJsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRh''@;'; put 'put ''YmxlIn0scGl2b3RzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUifSxwaXZvdGNhY2hlczp7eGxzeDoiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24ifSxwaXZvdHJlY29yZHM6e3hsc3g6ImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIn0sY29ubnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIn0sbGlua3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1s''@;'; put 'put ''LmV4dGVybmFsTGluayt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsifSxzdHlsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiLHhsc2I6ImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5zdHlsZXMifX07cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oTyl7WyJ4bHNtIiwieGxhbSJdLmZvckVhY2goZnVuY3Rpb24oayl7U1tPXVtrXXx8KFNbT11ba109U1tPXS54bHN4KX0pfSksUmUoUykuZm9yRWFjaChmdW5jdGlvbihPKXtSZShTW09dKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGspe3k0W1NbT11ba11dPU99KX0pLFN9KCkscHY9ZnVuY3Rpb24ga2UoUyl7Zm9yKHZhciBPPVtdLGs9UmUoUyksSz0wO0shPT1rLmxlbmd0aDsrK0spbnVsbD09T1tTW2tbS11dXSYmKE9bU1trW0tdXV09W10pLE9bU1trW0tdXV0ucHVzaChrW0tdKTtyZXR1cm4g''@;'; put 'put ''T30oeTQpO1lpLkNUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiO3ZhciBtdj1QcigiVHlwZXMiLG51bGwse3htbG5zOllpLkNULCJ4bWxuczp4c2QiOllpLnhzZCwieG1sbnM6eHNpIjpZaS54c2l9KSxWdz1bWyJ4bWwiLCJh''@;'; put 'put ''cHBsaWNhdGlvbi94bWwiXSxbImJpbiIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iXSxbInZtbCIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIl0sWyJkYXRhIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiXSxbImJtcCIsImltYWdlL2JtcCJdLFsicG5nIiwiaW1hZ2UvcG5nIl0sWyJnaWYiLCJpbWFnZS9naWYiXSxbImVtZiIsImltYWdlL3gtZW1mIl0sWyJ3bWYiLCJpbWFnZS94LXdtZiJdLFsianBnIiwi''@;'; put 'put ''aW1hZ2UvanBlZyJdLFsianBlZyIsImltYWdlL2pwZWciXSxbInRpZiIsImltYWdlL3RpZmYiXSxbInRpZmYiLCJpbWFnZS90aWZmIl0sWyJwZGYiLCJhcHBsaWNhdGlvbi9wZGYiXSxbInJlbHMiLHB2LnJlbHNbMF1dXS5tYXAoZnVuY3Rpb24oUyl7cmV0dXJuIFByKCJEZWZhdWx0IixudWxs''@;'; put 'put ''LHtFeHRlbnNpb246U1swXSxDb250ZW50VHlwZTpTWzFdfSl9KSxLYT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRqcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0cDovL3NjaGVtYXMub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQYXRoIixYTUlTUzoiaHR0''@;'; put 'put ''cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRl''@;'; put 'put ''cm5hbExpbmsiLENYTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25z''@;'; put 'put ''aGlwcy9jdXN0b21YbWxQcm9wcyIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIFZyKFMpe3ZhciBPPVMubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gUy5zbGljZSgwLE8rMSkrIl9yZWxzLyIr''@;'; put 'put ''Uy5zbGljZShPKzEpKyIucmVscyJ9ZnVuY3Rpb24geWYoUyxPKXt2YXIgaz17IiFpZCI6e319O2lmKCFTKXJldHVybiBrOyIvIiE9PU8uY2hhckF0KDApJiYoTz0iLyIrTyk7dmFyIEs9e307cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7dmFyIHNlPXZyKGVl''@;'; put 'put ''KTtpZigiPFJlbGF0aW9uc2hpcCI9PT1zZVswXSl7dmFyIG1lPXt9O21lLlR5cGU9c2UuVHlwZSxtZS5UYXJnZXQ9c2UuVGFyZ2V0LG1lLklkPXNlLklkLG1lLlRhcmdldE1vZGU9c2UuVGFyZ2V0TW9kZTt2YXIgcGU9IkV4dGVybmFsIj09PXNlLlRhcmdldE1vZGU/c2UuVGFyZ2V0OmZuKHNl''@;'; put 'put ''LlRhcmdldCxPKTtrW3BlXT1tZSxLW3NlLklkXT1tZX19KSxrWyIhaWQiXT1LLGt9WWkuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIjt2YXIgZjU9UHIoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOllpLlJFTFN9''@;'; put 'put ''KTtmdW5jdGlvbiBraShTKXt2YXIgTz1bSWksZjVdO3JldHVybiBSZShTWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihrKXtPW08ubGVuZ3RoXT1QcigiUmVsYXRpb25zaGlwIixudWxsLFNbIiFpZCJdW2tdKX0pLE8ubGVuZ3RoPjImJihPW08ubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIs''@;'; put 'put ''T1sxXT1PWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxPLmpvaW4oIiIpfXZhciBiND1bS2EuSExJTkssS2EuWFBBVEgsS2EuWE1JU1NdO2Z1bmN0aW9uIEVyKFMsTyxrLEssZWUsc2Upe2lmKGVlfHwoZWU9e30pLFNbIiFpZCJdfHwoU1siIWlkIl09e30pLE88MClmb3IoTz0xO1NbIiFpZCJdWyJy''@;'; put 'put ''SWQiK09dOysrTyk7aWYoZWUuSWQ9InJJZCIrTyxlZS5UeXBlPUssZWUuVGFyZ2V0PWssc2U/ZWUuVGFyZ2V0TW9kZT1zZTpiNC5pbmRleE9mKGVlLlR5cGUpPi0xJiYoZWUuVGFyZ2V0TW9kZT0iRXh0ZXJuYWwiKSxTWyIhaWQiXVtlZS5JZF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmV3''@;'; put 'put ''cml0ZSBySWQgIitPKTtyZXR1cm4gU1siIWlkIl1bZWUuSWRdPWVlLFNbKCIvIitlZS5UYXJnZXQpLnJlcGxhY2UoIi8vIiwiLyIpXT1lZSxPfXZhciBsbD0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCI7ZnVuY3Rpb24gZXUoUyxPLGspe3JldHVyblsn''@;'; put 'put ''ICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxyZGY6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS8nKyhrfHwib2RmIikrIiMiK08rJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5c''@;'; put 'put ''biJdLmpvaW4oIiIpfWZ1bmN0aW9uIG4yKFMsTyl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpy''@;'; put 'put ''ZXNvdXJjZT0iJytPKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX12YXIgUjY9ZnVuY3Rpb24oKXt2YXIgUz0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4w''@;'; put 'put ''IiB4bWxuczptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0i''@;'; put 'put ''MS4yIj48b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJyt3LnZlcnNpb24rIjwvbWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRhPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN9fSgpLFIwPVtbImNwOmNhdGVnb3J5IiwiQ2F0''@;'; put 'put ''ZWdvcnkiXSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJjcDprZXl3b3JkcyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxbImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVy''@;'; put 'put ''Il0sWyJjcDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhvciJdLFsiZGM6ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZpZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0s''@;'; put 'put ''WyJkYzp0aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVkRGF0ZSIsImRhdGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO1lpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIw''@;'; put 'put ''MDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixLYS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgcDU9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFy''@;'; put 'put ''cmF5KFIwLmxlbmd0aCksTz0wO088UjAubGVuZ3RoOysrTyl7dmFyIGs9UjBbT10sSz0iKD86IitrWzBdLnNsaWNlKDAsa1swXS5pbmRleE9mKCI6IikpKyI6KSIra1swXS5zbGljZShrWzBdLmluZGV4T2YoIjoiKSsxKTtTW09dPW5ldyBSZWdFeHAoIjwiK0srIltePl0qPihbXFxzXFxTXSo/''@;'; put 'put ''KTwvIitLKyI+Iil9cmV0dXJuIFN9KCk7ZnVuY3Rpb24gdnYoUyl7dmFyIE89e307Uz1nbyhTKTtmb3IodmFyIGs9MDtrPFIwLmxlbmd0aDsrK2spe3ZhciBLPVIwW2tdLGVlPVMubWF0Y2gocDVba10pO251bGwhPWVlJiZlZS5sZW5ndGg+MCYmKE9bS1sxXV09UXIoZWVbMV0pKSwiZGF0ZSI9''@;'; put 'put ''PT1LWzJdJiZPW0tbMV1dJiYoT1tLWzFdXT1OZShPW0tbMV1dKSl9cmV0dXJuIE99dmFyIGp3PVByKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7InhtbG5zOmNwIjpZaS5DT1JFX1BST1BTLCJ4bWxuczpkYyI6WWkuZGMsInhtbG5zOmRjdGVybXMiOllpLmRjdGVybXMsInhtbG5zOmRjbWl0''@;'; put 'put ''eXBlIjpZaS5kY21pdHlwZSwieG1sbnM6eHNpIjpZaS54c2l9KTtmdW5jdGlvbiBiZihTLE8sayxLLGVlKXtudWxsIT1lZVtTXXx8bnVsbD09T3x8IiI9PT1PfHwoZWVbU109TyxPPUxyKE8pLEtbSy5sZW5ndGhdPWs/UHIoUyxPLGspOkhhKFMsTykpfXZhciByaD1bWyJBcHBsaWNhdGlvbiIs''@;'; put 'put ''IkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJI''@;'; put 'put ''eXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFp''@;'; put 'put ''cnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIF80KFMsTyxrLEspe3ZhciBlZT1bXTtpZigic3RyaW5nIj09dHlwZW9mIFMpZWU9SnIoUyxLKTtlbHNlIGZvcih2YXIgc2U9MDtzZTxTLmxlbmd0aDsrK3Nl''@;'; put 'put ''KWVlPWVlLmNvbmNhdChTW3NlXS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybnt2OlZlfX0pKTt2YXIgbWU9InN0cmluZyI9PXR5cGVvZiBPP0pyKE8sSykubWFwKGZ1bmN0aW9uKFZlKXtyZXR1cm4gVmUudn0pOk8scGU9MCxiZT0wO2lmKG1lLmxlbmd0aD4wKWZvcih2YXIgUGU9MDtQZSE9PWVl''@;'; put 'put ''Lmxlbmd0aDtQZSs9Mil7c3dpdGNoKGJlPStlZVtQZSsxXS52LGVlW1BlXS52KXtjYXNlIldvcmtzaGVldHMiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjpjYXNlIlx1MDQxYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQ0YiI6Y2FzZSJcdTA2MjNcdTA2NDhcdTA2MzFcdTA2MjdcdTA2NDIgXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjM5XHUwNjQ1XHUwNjQ0IjpjYXNlIlx1MzBlZlx1MzBmY1x1MzBhZlx1MzBiN1x1MzBmY1x1MzBjOCI6Y2FzZSJcdTA1ZDJcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWUyXHUwNWQxXHUwNWQ1XHUwNWQzXHUwNWQ0IjpjYXNlIkFyYmVpdHNi''@;'; put 'put ''bFx4ZTR0dGVyIjpjYXNlIlx4YzdhbFx1MDEzMVx1MDE1Zm1hIFNheWZhbGFyXHUwMTMxIjpjYXNlIkZldWlsbGVzIGRlIGNhbGN1bCI6Y2FzZSJGb2dsaSBkaSBsYXZvcm8iOmNhc2UiRm9saGFzIGRlIGNceGUxbGN1bG8iOmNhc2UiUGxhbmlsaGFzIjpjYXNlIlJlZ25lYXJrIjpjYXNlIkhv''@;'; put 'put ''amFzIGRlIGNceGUxbGN1bG8iOmNhc2UiV2Vya2JsYWRlbiI6ay5Xb3Jrc2hlZXRzPWJlLGsuU2hlZXROYW1lcz1tZS5zbGljZShwZSxwZStiZSk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0''@;'; put 'put ''ZTAwXHU4OWE3IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjprLk5hbWVkUmFuZ2VzPWJlLGsuRGVmaW5lZE5hbWVzPW1lLnNsaWNlKHBlLHBlK2JlKTticmVhaztjYXNlIkNoYXJ0cyI6Y2FzZSJEaWFncmFtbWUiOmsuQ2hhcnRzaGVldHM9YmUs''@;'; put 'put ''ay5DaGFydE5hbWVzPW1lLnNsaWNlKHBlLHBlK2JlKX1wZSs9YmV9fVlpLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllcyIsS2EuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiO3ZhciBMNj1QcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6WWkuRVhUX1BST1BTLCJ4bWxuczp2dCI6WWkudnR9KTtZaS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9jdXN0b20tcHJvcGVydGllcyIsS2EuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyI7dmFyIE82''@;'; put 'put ''PS88W14+XSs+W148XSovZyxfdj1QcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6WWkuQ1VTVF9QUk9QUywieG1sbnM6dnQiOllpLnZ0fSk7dmFyIFA2PXtUaXRsZToiVGl0bGUiLFN1YmplY3Q6IlN1YmplY3QiLEF1dGhvcjoiQXV0aG9yIixLZXl3b3JkczoiS2V5d29yZHMiLENvbW1lbnRz''@;'; put 'put ''OiJEZXNjcmlwdGlvbiIsTGFzdEF1dGhvcjoiTGFzdEF1dGhvciIsUmV2TnVtYmVyOiJSZXZpc2lvbiIsQXBwbGljYXRpb246IkFwcE5hbWUiLExhc3RQcmludGVkOiJMYXN0UHJpbnRlZCIsQ3JlYXRlZERhdGU6IkNyZWF0ZWQiLE1vZGlmaWVkRGF0ZToiTGFzdFNhdmVkIixDYXRlZ29yeToi''@;'; put 'put ''Q2F0ZWdvcnkiLE1hbmFnZXI6Ik1hbmFnZXIiLENvbXBhbnk6IkNvbXBhbnkiLEFwcFZlcnNpb246IlZlcnNpb24iLENvbnRlbnRTdGF0dXM6IkNvbnRlbnRTdGF0dXMiLElkZW50aWZpZXI6IklkZW50aWZpZXIiLExhbmd1YWdlOiJMYW5ndWFnZSJ9LEY2PUhlKFA2KTtmdW5jdGlvbiBGMyhT''@;'; put 'put ''LE8sayl7U1tPPUY2W09dfHxPXT1rfWZ1bmN0aW9uIEgzKFMpe3ZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gbmV3IERhdGUoMWUzKihrLzFlNypNYXRoLnBvdygyLDMyKStPLzFlNy0xMTY0NDQ3MzYwMCkpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC4w''@;'; put 'put ''MDAvLCIiKX1mdW5jdGlvbiBjZChTLE8sayl7dmFyIEs9Uy5sLGVlPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpO2lmKGspZm9yKDtTLmwtSyYzOykrK1MubDtyZXR1cm4gZWV9ZnVuY3Rpb24gZzUoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gayYmKFMu''@;'; put 'put ''bCs9NC0oSy5sZW5ndGgrMSYzKSYzKSxLfWZ1bmN0aW9uIHd2KFMsTyxrKXtyZXR1cm4gMzE9PT1PP2c1KFMpOmNkKFMsMCxrKX1mdW5jdGlvbiBONihTLE8sayl7cmV0dXJuIHd2KFMsTywhMT09PWs/MDo0KX1mdW5jdGlvbiBTdihTKXt2YXIgTz1TLmwsaz13ZihTLE5uKTtyZXR1cm4gMD09''@;'; put 'put ''U1tTLmxdJiYwPT1TW1MubCsxXSYmUy5sLU8mMiYmKFMubCs9MiksW2ssd2YoUyxKbCldfWZ1bmN0aW9uIG01KFMsTyl7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KSxLPXt9LGVlPTA7ZWUhPWs7KytlZSl7dmFyIHNlPVMucmVhZF9zaGlmdCg0KSxtZT1TLnJlYWRfc2hpZnQoNCk7S1tzZV09''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KG1lLDEyMDA9PT1PPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRSwiIikucmVwbGFjZShtLCIhIiksMTIwMD09PU8mJm1lJTImJihTLmwrPTIpfXJldHVybiAzJlMubCYmKFMubD1TLmw+PjM8PDIpLEt9ZnVuY3Rpb24gcTAoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LGs9Uy5zbGljZShTLmwsUy5sK08pO3JldHVybiBTLmwrPU8sKDMmTyk+MCYmKFMubCs9NC0oMyZPKSYzKSxrfWZ1bmN0aW9uIHdmKFMsTyxrKXt2YXIgZWUsSz1TLnJlYWRfc2hpZnQoMiksc2U9a3x8e307aWYoUy5sKz0yLE8hPT1JMCYmSyE9PU8mJi0xPT09RncuaW5kZXhPZihPKSYmKDQx''@;'; put 'put ''MjYhPSg2NTUzNCZPKXx8NDEyNiE9KDY1NTM0JkspKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUgIitPKyIgc2F3ICIrSyk7c3dpdGNoKE89PT1JMD9LOk8pe2Nhc2UgMjpyZXR1cm4gZWU9Uy5yZWFkX3NoaWZ0KDIsImkiKSxzZS5yYXd8fChTLmwrPTIpLGVlO2Nhc2UgMzpyZXR1''@;'; put 'put ''cm4gUy5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIFMucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBjZChTLDAsNCkucmVwbGFjZShFLCIiKTtjYXNlIDMxOnJldHVybiBnNShTKTtjYXNlIDY0OnJldHVybiBI''@;'; put 'put ''MyhTKTtjYXNlIDY1OnJldHVybiBxMChTKTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBNdihTKXt2YXIgTz17fTtyZXR1cm4gTy5TaXplPVMucmVhZF9zaGlmdCg0KSxTLmwrPU8uU2l6ZSszLShPLlNpemUtMSklNCxPfShTKTtjYXNlIDgwOnJldHVybiBONihTLEssIXNlLnJhdykucmVwbGFj''@;'; put 'put ''ZShFLCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBDdihTLE8pe2lmKCFPKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiB3dihTLE8sMCl9KFMsSykucmVwbGFjZShFLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIFl3KFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoNCksaz1bXSxLPTA7SzxPLzI7KytLKWsucHVzaChTdihTKSk7cmV0dXJuIGt9KFMpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PUs/ZnVuY3Rpb24gTjMoUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVtd''@;'; put 'put ''LEs9MDtLIT1POysrSyl7dmFyIGVlPVMubDtrW0tdPVMucmVhZF9zaGlmdCgwLCJscHdzdHIiKS5yZXBsYWNlKEUsIiIpLFMubC1lZSYyJiYoUy5sKz0yKX1yZXR1cm4ga30oUyk6ZnVuY3Rpb24gV3coUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVtdLEs9MDtLIT1POysrSylrW0td''@;'; put 'put ''PVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJlcGxhY2UoRSwiIik7cmV0dXJuIGt9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitPKyIgIitLKX19ZnVuY3Rpb24gQ2YoUyxPKXt2YXIgaz15big0KSxLPXluKDQp''@;'; put 'put ''O3N3aXRjaChrLndyaXRlX3NoaWZ0KDQsODA9PVM/MzE6UyksUyl7Y2FzZSAzOksud3JpdGVfc2hpZnQoLTQsTyk7YnJlYWs7Y2FzZSA1OihLPXluKDgpKS53cml0ZV9zaGlmdCg4LE8sImYiKTticmVhaztjYXNlIDExOksud3JpdGVfc2hpZnQoNCxPPzE6MCk7YnJlYWs7Y2FzZSA2NDpLPWZ1''@;'; put 'put ''bmN0aW9uIGhjKFMpe3ZhciBrPSgic3RyaW5nIj09dHlwZW9mIFM/bmV3IERhdGUoRGF0ZS5wYXJzZShTKSk6UykuZ2V0VGltZSgpLzFlMysxMTY0NDQ3MzYwMCxLPWslTWF0aC5wb3coMiwzMiksZWU9KGstSykvTWF0aC5wb3coMiwzMik7ZWUqPTFlNzt2YXIgc2U9KEsqPTFlNykvTWF0aC5w''@;'; put 'put ''b3coMiwzMil8MDtzZT4wJiYoSyU9TWF0aC5wb3coMiwzMiksZWUrPXNlKTt2YXIgbWU9eW4oOCk7cmV0dXJuIG1lLndyaXRlX3NoaWZ0KDQsSyksbWUud3JpdGVfc2hpZnQoNCxlZSksbWV9KE8pO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKEs9eW4oNCsyKihPLmxlbmd0aCsxKSsoTy5s''@;'; put 'put ''ZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxPLmxlbmd0aCsxKSxLLndyaXRlX3NoaWZ0KDAsTywiZGJjcyIpO0subCE9Sy5sZW5ndGg7KUsud3JpdGVfc2hpZnQoMSwwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0''@;'; put 'put ''eXBlICIrUysiICIrTyl9cmV0dXJuIFUoW2ssS10pfWZ1bmN0aW9uIGloKFMsTyl7dmFyIGs9Uy5sLEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPVMucmVhZF9zaGlmdCg0KSxzZT1bXSxtZT0wLHBlPTAsYmU9LTEsUGU9e307Zm9yKG1lPTA7bWUhPWVlOysrbWUpe3ZhciBWZT1TLnJlYWRfc2hpZnQo''@;'; put 'put ''NCksWWU9Uy5yZWFkX3NoaWZ0KDQpO3NlW21lXT1bVmUsWWUra119c2Uuc29ydChmdW5jdGlvbihrdCxPdCl7cmV0dXJuIGt0WzFdLU90WzFdfSk7dmFyIGV0PXt9O2ZvcihtZT0wO21lIT1lZTsrK21lKXtpZihTLmwhPT1zZVttZV1bMV0pe3ZhciBjdD0hMDtpZihtZT4wJiZPKXN3aXRjaChP''@;'; put 'put ''W3NlW21lLTFdWzBdXS50KXtjYXNlIDI6Uy5sKzI9PT1zZVttZV1bMV0mJihTLmwrPTIsY3Q9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OlMubDw9c2VbbWVdWzFdJiYoUy5sPXNlW21lXVsxXSxjdD0hMSl9aWYoKCFPfHwwPT1tZSkmJlMubDw9c2VbbWVdWzFdJiYoY3Q9ITEsUy5sPXNl''@;'; put 'put ''W21lXVsxXSksY3QpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrc2VbbWVdWzFdKyIgYXQgIitTLmwrIiA6IittZSl9aWYoTyl7dmFyIEV0PU9bc2VbbWVdWzBdXTtpZihldFtFdC5uXT13ZihTLEV0LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PUV0LnAm''@;'; put 'put ''JihldFtFdC5uXT1TdHJpbmcoZXRbRXQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmZXRbRXQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PUV0Lm4pc3dpdGNoKGV0W0V0Lm5dKXtjYXNlIDA6ZXRbRXQubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNl''@;'; put 'put ''IDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNh''@;'; put 'put ''c2UtNTM1OkIocGU9ZXRbRXQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrZXRbRXQubl0pfX1lbHNlIGlmKDE9PT1zZVttZV1bMF0pe2lmKHBlPWV0LkNvZGVQYWdlPXdmKFMsZTIpLEIocGUpLC0xIT09YmUpe3Zh''@;'; put 'put ''ciBhdD1TLmw7Uy5sPXNlW2JlXVsxXSxQZT1tNShTLHBlKSxTLmw9YXR9fWVsc2UgaWYoMD09PXNlW21lXVswXSl7aWYoMD09PXBlKXtiZT1tZSxTLmw9c2VbbWUrMV1bMV07Y29udGludWV9UGU9bTUoUyxwZSl9ZWxzZXt2YXIganQsYnQ9UGVbc2VbbWVdWzBdXTtzd2l0Y2goU1tTLmxdKXtj''@;'; put 'put ''YXNlIDY1OlMubCs9NCxqdD1xMChTKTticmVhaztjYXNlIDMwOmNhc2UgMzE6Uy5sKz00LGp0PU42KFMsU1tTLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOlMubCs9NCxqdD1TLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6Uy5sKz00LGp0PVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTticmVhaztjYXNlIDU6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpTLmwrPTQsanQ9dW8oUyw0KTticmVhaztjYXNlIDY0OlMubCs9NCxqdD1OZShIMyhTKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVl''@;'; put 'put ''OiAiK1NbUy5sXSl9ZXRbYnRdPWp0fX1yZXR1cm4gUy5sPWsrSyxldH12YXIgVjY9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3RlbUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIiwi''@;'; put 'put ''TmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gSGMoUyl7c3dpdGNoKHR5cGVvZiBTKXtjYXNlImJvb2xlYW4iOnJldHVybiAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8Uyk9PVM/Mzo1O2Nhc2Uic3RyaW5nIjpyZXR1cm4g''@;'; put 'put ''MzE7Y2FzZSJvYmplY3QiOmlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBCNihTLE8sayl7dmFyIEs9eW4oOCksZWU9W10sc2U9W10sbWU9OCxwZT0wLGJlPXluKDgpLFBlPXluKDgpO2lmKGJlLndyaXRlX3NoaWZ0KDQsMiksYmUud3JpdGVfc2hpZnQo''@;'; put 'put ''NCwxMjAwKSxQZS53cml0ZV9zaGlmdCg0LDEpLHNlLnB1c2goYmUpLGVlLnB1c2goUGUpLG1lKz04K2JlLmxlbmd0aCwhTyl7KFBlPXluKDgpKS53cml0ZV9zaGlmdCg0LDApLGVlLnVuc2hpZnQoUGUpO3ZhciBWZT1beW4oNCldO2ZvcihWZVswXS53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxw''@;'; put 'put ''ZT0wO3BlPFMubGVuZ3RoOysrcGUpe3ZhciBZZT1TW3BlXVswXTtmb3IoKGJlPXluKDgrMiooWWUubGVuZ3RoKzEpKyhZZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxwZSsyKSxiZS53cml0ZV9zaGlmdCg0LFllLmxlbmd0aCsxKSxiZS53cml0ZV9zaGlmdCgwLFllLCJkYmNzIik7''@;'; put 'put ''YmUubCE9YmUubGVuZ3RoOyliZS53cml0ZV9zaGlmdCgxLDApO1ZlLnB1c2goYmUpfWJlPVUoVmUpLHNlLnVuc2hpZnQoYmUpLG1lKz04K2JlLmxlbmd0aH1mb3IocGU9MDtwZTxTLmxlbmd0aDsrK3BlKWlmKCghT3x8T1tTW3BlXVswXV0pJiYhKFY2LmluZGV4T2YoU1twZV1bMF0pPi0xKSYm''@;'; put 'put ''bnVsbCE9U1twZV1bMV0pe3ZhciBldD1TW3BlXVsxXSxjdD0wO2lmKE8pe3ZhciBFdD1rW2N0PStPW1NbcGVdWzBdXV07aWYoInZlcnNpb24iPT1FdC5wJiYic3RyaW5nIj09dHlwZW9mIGV0KXt2YXIgYXQ9ZXQuc3BsaXQoIi4iKTtldD0oK2F0WzBdPDwxNikrKCthdFsxXXx8MCl9YmU9Q2Yo''@;'; put 'put ''RXQudCxldCl9ZWxzZXt2YXIgYnQ9SGMoZXQpOy0xPT1idCYmKGJ0PTMxLGV0PVN0cmluZyhldCkpLGJlPUNmKGJ0LGV0KX1zZS5wdXNoKGJlKSwoUGU9eW4oOCkpLndyaXRlX3NoaWZ0KDQsTz9jdDoyK3BlKSxlZS5wdXNoKFBlKSxtZSs9OCtiZS5sZW5ndGh9dmFyIGp0PTgqKHNlLmxlbmd0''@;'; put 'put ''aCsxKTtmb3IocGU9MDtwZTxzZS5sZW5ndGg7KytwZSllZVtwZV0ud3JpdGVfc2hpZnQoNCxqdCksanQrPXNlW3BlXS5sZW5ndGg7cmV0dXJuIEsud3JpdGVfc2hpZnQoNCxtZSksSy53cml0ZV9zaGlmdCg0LHNlLmxlbmd0aCksVShbS10uY29uY2F0KGVlKS5jb25jYXQoc2UpKX1mdW5jdGlv''@;'; put 'put ''biBqNihTLE8sayl7dmFyIEs9Uy5jb250ZW50O2lmKCFLKXJldHVybnt9O21uKEssMCk7dmFyIGVlLHNlLG1lLHBlLGJlPTA7Sy5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxLLnJlYWRfc2hpZnQoMik7dmFyIFBlPUsucmVhZF9zaGlmdCg0KSxWZT1LLnJlYWRfc2hpZnQoMTYpO2lmKFZl''@;'; put 'put ''IT09dmUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCYmVmUhPT1rKXRocm93IG5ldyBFcnJvcigiQmFkIFByb3BlcnR5U2V0IENMU0lEICIrVmUpO2lmKDEhPT0oZWU9Sy5yZWFkX3NoaWZ0KDQpKSYmMiE9PWVlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK2VlKTtp''@;'; put 'put ''ZihzZT1LLnJlYWRfc2hpZnQoMTYpLHBlPUsucmVhZF9zaGlmdCg0KSwxPT09ZWUmJnBlIT09Sy5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK3BlKyIgIT09ICIrSy5sKTsyPT09ZWUmJihtZT1LLnJlYWRfc2hpZnQoMTYpLGJlPUsucmVhZF9zaGlmdCg0KSk7dmFyIEV0''@;'; put 'put ''LFllPWloKEssTyksZXQ9e1N5c3RlbUlkZW50aWZpZXI6UGV9O2Zvcih2YXIgY3QgaW4gWWUpZXRbY3RdPVllW2N0XTtpZihldC5GTVRJRD1zZSwxPT09ZWUpcmV0dXJuIGV0O2lmKGJlLUsubD09MiYmKEsubCs9MiksSy5sIT09YmUpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2gg''@;'; put 'put ''MjogIitLLmwrIiAhPT0gIitiZSk7dHJ5e0V0PWloKEssbnVsbCl9Y2F0Y2h7fWZvcihjdCBpbiBFdClldFtjdF09RXRbY3RdO3JldHVybiBldC5GTVRJRD1bc2UsbWVdLGV0fWZ1bmN0aW9uIHppKFMsTyxrLEssZWUsc2Upe3ZhciBtZT15bihlZT82ODo0OCkscGU9W21lXTttZS53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDY1NTM0KSxtZS53cml0ZV9zaGlmdCgyLDApLG1lLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxtZS53cml0ZV9zaGlmdCgxNix2ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lELCJoZXgiKSxtZS53cml0ZV9zaGlmdCg0LGVlPzI6MSksbWUud3JpdGVfc2hpZnQoMTYsTywiaGV4''@;'; put 'put ''IiksbWUud3JpdGVfc2hpZnQoNCxlZT82ODo0OCk7dmFyIGJlPUI2KFMsayxLKTtpZihwZS5wdXNoKGJlKSxlZSl7dmFyIFBlPUI2KGVlLG51bGwsbnVsbCk7bWUud3JpdGVfc2hpZnQoMTYsc2UsImhleCIpLG1lLndyaXRlX3NoaWZ0KDQsNjgrYmUubGVuZ3RoKSxwZS5wdXNoKFBlKX1yZXR1''@;'; put 'put ''cm4gVShwZSl9ZnVuY3Rpb24gcjIoUyxPKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KE8pLG51bGx9ZnVuY3Rpb24gdW8oUyxPKXtyZXR1cm4gMT09PVMucmVhZF9zaGlmdChPKX1mdW5jdGlvbiB0dShTLE8pe3JldHVybiBPfHwoTz15bigyKSksTy53cml0ZV9zaGlmdCgyLCshIVMpLE99ZnVuY3Rp''@;'; put 'put ''b24gRWMoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyLCJ1Iil9ZnVuY3Rpb24gYTAoUyxPKXtyZXR1cm4gT3x8KE89eW4oMikpLE8ud3JpdGVfc2hpZnQoMixTKSxPfWZ1bmN0aW9uIHc0KFMsTyl7cmV0dXJuIGZ1bmN0aW9uIHh2KFMsTyxrKXtmb3IodmFyIEs9W10sZWU9Uy5sK087Uy5sPGVl''@;'; put 'put ''OylLLnB1c2goayhTLGVlLVMubCkpO2lmKGVlIT09Uy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gS30oUyxPLEVjKX1mdW5jdGlvbiBLaShTLE8sayl7cmV0dXJuIGt8fChrPXluKDIpKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1PPytTOishIVMpLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSwiZSI9PU8/MTowKSxrfWZ1bmN0aW9uIFVhKFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoayYmay5iaWZmPj0xMj8yOjEpLGVlPSJzYmNzLWNvbnQiLHNlPUY7ayYmay5iaWZmPj04JiYoRj0xMjAwKSxrJiY4IT1rLmJpZmY/MTI9PWsuYmlmZiYmKGVlPSJ3c3RyIik6Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpJiYoZWU9ImRiY3MtY29udCIpLGsuYmlmZj49MiYmay5iaWZmPD01JiYoZWU9ImNwc3RyIik7dmFyIHBlPUs/Uy5yZWFkX3NoaWZ0KEssZWUpOiIiO3JldHVybiBGPXNlLHBlfWZ1bmN0aW9uIGZjKFMpe3ZhciBPPUY7Rj0xMjAwO3ZhciBiZSxrPVMucmVhZF9zaGlmdCgyKSxLPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgxKSxlZT00Jkssc2U9OCZLLG1lPTErKDEmSykscGU9MCxQZT17fTtzZSYmKHBlPVMucmVhZF9zaGlmdCgyKSksZWUmJihiZT1TLnJlYWRfc2hpZnQoNCkpO3ZhciBZZT0wPT09az8iIjpTLnJlYWRfc2hpZnQoaywyPT1tZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7aWYo''@;'; put 'put ''c2UpZm9yKFBlLl9SPVtdO3BlLS0gPjA7KVBlLl9SLnB1c2goe2lkeDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gZWUmJihTLmwrPWJlKSxQZS50PVllLHNlfHwoUGUucj0iPHQ+IitQZS50KyI8L3Q+IiksRj1PLFBlfWZ1bmN0aW9uIE5jKFMsTyl7dmFy''@;'; put 'put ''IGs9Uy5SJiZTLlIubGVuZ3RofHxTLnI7Uy5yJiYoUy5SPXc1KFMucikpO3ZhciBLPSIiLGVlPTA7az9TLlIuZm9yRWFjaChmdW5jdGlvbihFdCl7ZWUrKyxLKz1FdC52fHwiIn0pOihLPVMudHx8IiIsZWU9MSk7dmFyIHNlPXluKDMrKGVlPjE/MjowKSk7c2Uud3JpdGVfc2hpZnQoMixLLmxl''@;'; put 'put ''bmd0aCksc2Uud3JpdGVfc2hpZnQoMSwxfChlZT4xPzg6MCkpLGVlPjEmJnNlLndyaXRlX3NoaWZ0KDIsZWUpO3ZhciBtZT15bigyKksubGVuZ3RoKTttZS53cml0ZV9zaGlmdCgyKksubGVuZ3RoLEssInV0ZjE2bGUiKTt2YXIgcGU9W3NlLG1lXTtpZihrKXt2YXIgYmU9eW4oNCpTLlIubGVu''@;'; put 'put ''Z3RoKSxQZT0wO3BlLnB1c2goYmUpO2Zvcih2YXIgVmU9MDtWZTxTLlIubGVuZ3RoOysrVmUpe3ZhciBZZT1TLlJbVmVdO2JlLndyaXRlX3NoaWZ0KDIsUGUpLFBlKz0oWWUudnx8IiIpLmxlbmd0aDt2YXIgZXQ9WWUucz9sMChPLmNlbGxYZnMsTy5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxz''@;'; put 'put ''OlllLnN9LE8pOjAsY3Q9Ty5jZWxsWGZzW2V0XS5mb250SWQ7YmUud3JpdGVfc2hpZnQoMixjdDw0P2N0OmN0KzEpfX1yZXR1cm4gVShwZSl9ZnVuY3Rpb24gcmMoUyxPLGspe2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBTLnJlYWRfc2hpZnQoTywiY3BzdHIiKTtpZihr''@;'; put 'put ''LmJpZmY+PTEyKXJldHVybiBTLnJlYWRfc2hpZnQoTywiZGJjcy1jb250Iil9dmFyIGVlPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KE8sMD09PWVlPyJzYmNzLWNvbnQiOiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBudShTLE8sayl7dmFyIEs9Uy5yZWFkX3NoaWZ0KGsmJjI9''@;'; put 'put ''PWsuYmlmZj8xOjIpO3JldHVybiAwPT09Sz8oUy5sKyssIiIpOnJjKFMsSyxrKX1mdW5jdGlvbiBYMChTLE8sayl7aWYoay5iaWZmPjUpcmV0dXJuIG51KFMsMCxrKTt2YXIgSz1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1LPyhTLmwrKywiIik6Uy5yZWFkX3NoaWZ0KEssay5iaWZmPD00''@;'; put 'put ''fHwhUy5sZW5zPyJjcHN0ciI6InNiY3MtY29udCIpfWZ1bmN0aW9uIGNsKFMsTyxrKXtyZXR1cm4ga3x8KGs9eW4oMysyKlMubGVuZ3RoKSksay53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCgzMSxTLCJ1dGYxNmxlIiksa31mdW5jdGlv''@;'; put 'put ''biBDNChTKXt2YXIgTz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIE8+MD9TLnJlYWRfc2hpZnQoTywidXRmMTZsZSIpLnJlcGxhY2UoRSwiIik6IiJ9ZnVuY3Rpb24gbzAoUyxPKXtPfHwoTz15big2KzIqUy5sZW5ndGgpKSxPLndyaXRlX3NoaWZ0KDQsMStTLmxlbmd0aCk7Zm9yKHZhciBrPTA7''@;'; put 'put ''azxTLmxlbmd0aDsrK2spTy53cml0ZV9zaGlmdCgyLFMuY2hhckNvZGVBdChrKSk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoMiwwKSxPfWZ1bmN0aW9uIFM0KFMpe3ZhciBPPXluKDUxMiksaz0wLEs9Uy5UYXJnZXQ7ImZpbGU6Ly8iPT1LLnNsaWNlKDAsNykmJihLPUsuc2xpY2UoNykpO3ZhciBl''@;'; put 'put ''ZT1LLmluZGV4T2YoIiMiKSxzZT1lZT4tMT8zMToyMztzd2l0Y2goSy5jaGFyQXQoMCkpe2Nhc2UiIyI6c2U9Mjg7YnJlYWs7Y2FzZSIuIjpzZSY9LTN9Ty53cml0ZV9zaGlmdCg0LDIpLE8ud3JpdGVfc2hpZnQoNCxzZSk7dmFyIG1lPVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtm''@;'; put 'put ''b3Ioaz0wO2s8bWUubGVuZ3RoOysraylPLndyaXRlX3NoaWZ0KDQsbWVba10pO2lmKDI4PT1zZSlvMChLPUsuc2xpY2UoMSksTyk7ZWxzZSBpZigyJnNlKXtmb3IobWU9ImUwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLGs9MDtrPG1l''@;'; put 'put ''Lmxlbmd0aDsrK2spTy53cml0ZV9zaGlmdCgxLHBhcnNlSW50KG1lW2tdLDE2KSk7dmFyIHBlPWVlPi0xP0suc2xpY2UoMCxlZSk6Sztmb3IoTy53cml0ZV9zaGlmdCg0LDIqKHBlLmxlbmd0aCsxKSksaz0wO2s8cGUubGVuZ3RoOysraylPLndyaXRlX3NoaWZ0KDIscGUuY2hhckNvZGVBdChr''@;'; put 'put ''KSk7Ty53cml0ZV9zaGlmdCgyLDApLDgmc2UmJm8wKGVlPi0xP0suc2xpY2UoZWUrMSk6IiIsTyl9ZWxzZXtmb3IobWU9IjAzIDAzIDAwIDAwIDAwIDAwIDAwIDAwIGMwIDAwIDAwIDAwIDAwIDAwIDAwIDQ2Ii5zcGxpdCgiICIpLGs9MDtrPG1lLmxlbmd0aDsrK2spTy53cml0ZV9zaGlmdCgx''@;'; put 'put ''LHBhcnNlSW50KG1lW2tdLDE2KSk7Zm9yKHZhciBiZT0wOyIuLi8iPT1LLnNsaWNlKDMqYmUsMypiZSszKXx8Ii4uXFwiPT1LLnNsaWNlKDMqYmUsMypiZSszKTspKytiZTtmb3IoTy53cml0ZV9zaGlmdCgyLGJlKSxPLndyaXRlX3NoaWZ0KDQsSy5sZW5ndGgtMypiZSsxKSxrPTA7azxLLmxl''@;'; put 'put ''bmd0aC0zKmJlOysraylPLndyaXRlX3NoaWZ0KDEsMjU1JksuY2hhckNvZGVBdChrKzMqYmUpKTtmb3IoTy53cml0ZV9zaGlmdCgxLDApLE8ud3JpdGVfc2hpZnQoMiw2NTUzNSksTy53cml0ZV9zaGlmdCgyLDU3MDA1KSxrPTA7azw2OysraylPLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIE8u''@;'; put 'put ''c2xpY2UoMCxPLmwpfWZ1bmN0aW9uIE1mKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIHVkKFMsTyl7dmFyIGs9TWYoUyk7cmV0dXJuIGtbM109MCxrfWZ1bmN0aW9uIHcwKFMpe3JldHVy''@;'; put 'put ''bntyOlMucmVhZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKSxpeGZlOlMucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gYTIoUyxPLGssSyl7cmV0dXJuIEt8fChLPXluKDYpKSxLLndyaXRlX3NoaWZ0KDIsUyksSy53cml0ZV9zaGlmdCgyLE8pLEsud3JpdGVfc2hpZnQoMixrfHwwKSxLfWZ1''@;'; put 'put ''bmN0aW9uIHhmKFMsTyxrKXt2YXIgSz1rLmJpZmY+OD80OjI7cmV0dXJuW1MucmVhZF9zaGlmdChLKSxTLnJlYWRfc2hpZnQoSywiaSIpLFMucmVhZF9zaGlmdChLLCJpIildfWZ1bmN0aW9uIHdvKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMiksSTEoUyldfWZ1bmN0aW9uIHMyKFMpe3ZhciBP''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7YzpTLnJlYWRfc2hpZnQoMikscjpPfSxlOntjOlMucmVhZF9zaGlmdCgyKSxyOmt9fX1mdW5jdGlvbiB2dShTLE8pe3JldHVybiBPfHwoTz15big4KSksTy53cml0ZV9zaGlmdCgyLFMucy5yKSxPLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsUy5lLnIpLE8ud3JpdGVfc2hpZnQoMixTLnMuYyksTy53cml0ZV9zaGlmdCgyLFMuZS5jKSxPfWZ1bmN0aW9uIE00KFMpe3ZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7YzpTLnJlYWRfc2hpZnQoMSkscjpPfSxlOntjOlMucmVhZF9zaGlm''@;'; put 'put ''dCgxKSxyOmt9fX12YXIgZ2M9TTQ7ZnVuY3Rpb24geTUoUyl7Uy5sKz00O3ZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxLPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0xMixbayxPLEtdfWZ1bmN0aW9uIHJ1KFMpe1MubCs9MixTLmwrPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KX12YXIgRWY9ezA6cnUsNDpydSw1OnJ1LDY6cnUsNzpmdW5jdGlvbiBIdShTKXtyZXR1cm4gUy5sKz00LFMuY2Y9Uy5yZWFkX3NoaWZ0KDIpLHt9fSw4OnJ1LDk6cnUsMTA6cnUsMTE6cnUsMTI6cnUsMTM6ZnVuY3Rpb24gRnUoUyl7dmFyIE89e307cmV0dXJuIFMubCs9NCxTLmwrPTE2LE8u''@;'; put 'put ''ZlNoYXJlZE5vdGU9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9NCxPfSwxNDpydSwxNTpydSwxNjpydSwxNzpydSwxODpydSwxOTpydSwyMDpydSwyMTp5NX07ZnVuY3Rpb24gVmMoUyxPKXt2YXIgaz17QklGRlZlcjowLGR0OjB9O3N3aXRjaChrLkJJRkZWZXI9Uy5yZWFkX3NoaWZ0KDIpLChPLT0y''@;'; put 'put ''KT49MiYmKGsuZHQ9Uy5yZWFkX3NoaWZ0KDIpLFMubC09Miksay5CSUZGVmVyKXtjYXNlIDE1MzY6Y2FzZSAxMjgwOmNhc2UgMTAyNDpjYXNlIDc2ODpjYXNlIDUxMjpjYXNlIDI6Y2FzZSA3OmJyZWFrO2RlZmF1bHQ6aWYoTz42KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBCSUZGIFZl''@;'; put 'put ''ciAiK2suQklGRlZlcil9cmV0dXJuIFMucmVhZF9zaGlmdChPKSxrfWZ1bmN0aW9uIHg0KFMsTyxrKXt2YXIgSz0xNTM2LGVlPTE2O3N3aXRjaChrLmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhsYSI6YnJlYWs7Y2FzZSJiaWZmNSI6Sz0xMjgwLGVlPTg7YnJlYWs7Y2FzZSJiaWZmNCI6''@;'; put 'put ''Sz00LGVlPTY7YnJlYWs7Y2FzZSJiaWZmMyI6Sz0zLGVlPTY7YnJlYWs7Y2FzZSJiaWZmMiI6Sz0yLGVlPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBzZT15bihlZSk7cmV0dXJuIHNlLndyaXRlX3NoaWZ0KDIsSyksc2Uu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixPKSxlZT40JiZzZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxlZT42JiZzZS53cml0ZV9zaGlmdCgyLDE5OTcpLGVlPjgmJihzZS53cml0ZV9zaGlmdCgyLDQ5MTYxKSxzZS53cml0ZV9zaGlmdCgyLDEpLHNlLndyaXRlX3NoaWZ0KDIsMTc5OCksc2Uud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwwKSksc2V9ZnVuY3Rpb24gbDIoUyxPKXt2YXIgaz0hT3x8Ty5iaWZmPj04PzI6MSxLPXluKDgraypTLm5hbWUubGVuZ3RoKTtLLndyaXRlX3NoaWZ0KDQsUy5wb3MpLEsud3JpdGVfc2hpZnQoMSxTLmhzfHwwKSxLLndyaXRlX3NoaWZ0KDEsUy5kdCksSy53cml0ZV9zaGlmdCgxLFMubmFt''@;'; put 'put ''ZS5sZW5ndGgpLE8uYmlmZj49OCYmSy53cml0ZV9zaGlmdCgxLDEpLEsud3JpdGVfc2hpZnQoaypTLm5hbWUubGVuZ3RoLFMubmFtZSxPLmJpZmY8OD8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgZWU9Sy5zbGljZSgwLEsubCk7cmV0dXJuIGVlLmw9Sy5sLGVlfWZ1bmN0aW9uIGlpKFMpe3JldHVy''@;'; put 'put ''biBTLnJlYWRfc2hpZnQoNCksbXUoUyl9ZnVuY3Rpb24gU28oUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxuMChTKX1mdW5jdGlvbiBOdShTLE8sayl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxYQihTLDAsayl9ZnVuY3Rpb24gYzIoUyxPLGspe3ZhciBLPTA7ayYmMj09ay5iaWZmfHwoSz1T''@;'; put 'put ''LnJlYWRfc2hpZnQoMikpO3ZhciBlZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjI9PWsuYmlmZiYmKEs9MS0oZWU+PjE1KSxlZSY9MzI3NjcpLFt7VW5zeW5jZWQ6MSZLLER5WmVybzooMiZLKT4+MSxFeEFzYzooNCZLKT4+MixFeERzYzooOCZLKT4+M30sZWVdfWZ1bmN0aW9uIGFWKFMs''@;'; put 'put ''TyxrLEspe3ZhciBlZT1rJiY1PT1rLmJpZmY7S3x8KEs9eW4oZWU/MytPLmxlbmd0aDo1KzIqTy5sZW5ndGgpKSxLLndyaXRlX3NoaWZ0KDIsUyksSy53cml0ZV9zaGlmdChlZT8xOjIsTy5sZW5ndGgpLGVlfHxLLndyaXRlX3NoaWZ0KDEsMSksSy53cml0ZV9zaGlmdCgoZWU/MToyKSpPLmxl''@;'; put 'put ''bmd0aCxPLGVlPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBzZT1LLmxlbmd0aD5LLmw/Sy5zbGljZSgwLEsubCk6SztyZXR1cm4gbnVsbD09c2UubCYmKHNlLmw9c2UubGVuZ3RoKSxzZX12YXIgdTI9WDA7ZnVuY3Rpb24gWHcoUyxPLGspe3ZhciBLPVMubCtPLGVlPTghPWsuYmlmZiYmay5iaWZm''@;'; put 'put ''PzI6NCxzZT1TLnJlYWRfc2hpZnQoZWUpLG1lPVMucmVhZF9zaGlmdChlZSkscGU9Uy5yZWFkX3NoaWZ0KDIpLGJlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sPUsse3M6e3I6c2UsYzpwZX0sZTp7cjptZSxjOmJlfX19ZnVuY3Rpb24gYjUoUyxPLGssSyl7dmFyIHNlPSFrfHwhay5iaWZm''@;'; put 'put ''fHw4PT1rLmJpZmY7S3x8KEs9eW4oayYmNT09ay5iaWZmPzE2OjIwKSksSy53cml0ZV9zaGlmdCgyLHNlJiZrLmNlbGxTdHlsZXMmJlMuZm9udElkJiYoUy5mb250SWQ8ND9TLmZvbnRJZDpTLmZvbnRJZCsxKXx8MCk7dmFyIG1lPTE7Uy5wcm90ZWN0aW9uJiYoUy5wcm90ZWN0aW9uLmVkaXRh''@;'; put 'put ''YmxlJiYobWUmPS0yKSxTLnByb3RlY3Rpb24uaGlkZGVuJiYobWV8PTIpKSxTLnN0eWxlPyhLLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksSy53cml0ZV9zaGlmdCgyLDY1NTI0fG1lKSk6KEsud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxLLndyaXRlX3NoaWZ0KDIsTzw8NHxt''@;'; put 'put ''ZSkpO3ZhciBwZT1TLmFsaWdubWVudHx8e307aWYoc2Upe3ZhciBiZT0wLFBlPTA7RDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKT4tMSYmKGJlfD1ENS5pbmRleE9mKHBlLmhvcml6b250YWwpKSxwZS53cmFwVGV4dCYmKGJlfD04KSx0OC5pbmRleE9mKHBlLnZlcnRpY2FsKT4tMT9iZXw9dDgu''@;'; put 'put ''aW5kZXhPZihwZS52ZXJ0aWNhbCk8PDQ6bnVsbD09cGUudmVydGljYWwmJihiZXw9MzIpLEsud3JpdGVfc2hpZnQoMSxiZSksSy53cml0ZV9zaGlmdCgxLDApLHBlLnNocmlua1RvRml0JiYoUGV8PTE2KSxLLndyaXRlX3NoaWZ0KDIsUGUpO3ZhciBWZT1udWxsO251bGwhPVMuYm9yZGVySWQm''@;'; put 'put ''JihWZT1rLkJvcmRlcnMmJmsuQm9yZGVyc1tTLmJvcmRlcklkfHwwXXx8e30pO3ZhciBZZT0wLGV0PTAsY3Q9MDtWZSYmKG51bGwhPVZlLmxlZnQmJlZlLmxlZnQuc3R5bGUmJihZZXw9KGN0PXBkLmluZGV4T2YoVmUubGVmdC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPVZlLnJpZ2h0JiZWZS5y''@;'; put 'put ''aWdodC5zdHlsZSYmKFllfD0oKGN0PXBkLmluZGV4T2YoVmUucmlnaHQuc3R5bGUpKT4tMT9jdDowKTw8NCksbnVsbCE9VmUudG9wJiZWZS50b3Auc3R5bGUmJihldHw9KGN0PXBkLmluZGV4T2YoVmUudG9wLnN0eWxlKSk+LTE/Y3Q6MCksbnVsbCE9VmUuYm90dG9tJiZWZS5ib3R0b20uc3R5''@;'; put 'put ''bGUmJihldHw9KChjdD1wZC5pbmRleE9mKFZlLmJvdHRvbS5zdHlsZSkpPi0xP2N0OjApPDw0KSksSy53cml0ZV9zaGlmdCgxLFllKSxLLndyaXRlX3NoaWZ0KDEsZXQpLEsud3JpdGVfc2hpZnQoMiwwKSxLLndyaXRlX3NoaWZ0KDIsMCksSy53cml0ZV9zaGlmdCgxLDApO3ZhciBFdD0wLGF0''@;'; put 'put ''PWsuRmlsbHMmJmsuRmlsbHNbUy5maWxsSWR8fDBdfHx7fTsoYXQuZmdDb2xvcnx8YXQuYmdDb2xvcikmJihFdHw9NCksSy53cml0ZV9zaGlmdCgxLEV0KTt2YXIgYnQ9MDtidHw9UDQoYXQuZmdDb2xvciw2NSksYnR8PVA0KGF0LmJnQ29sb3IsNjUpPDw3LEsud3JpdGVfc2hpZnQoMixidCl9''@;'; put 'put ''ZWxzZSBLLndyaXRlX3NoaWZ0KDQsMCksSy53cml0ZV9zaGlmdCg0LDApLEsud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gS31mdW5jdGlvbiBFNChTLE8sayl7dmFyIEs9dzAoUyk7KDI9PWsuYmlmZnx8OT09TykmJisrUy5sO3ZhciBlZT1mdW5jdGlvbiBVbChTKXt2YXIgTz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMSk7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoMSk/TzoxPT09T30oUyk7cmV0dXJuIEsudmFsPWVlLEsudD0hMD09PWVlfHwhMT09PWVlPyJiIjoiZSIsS312YXIgSkE9ZnVuY3Rpb24gdjUoUyxPLGspe3JldHVybiAwPT09Tz8iIjpYMChTLDAsayl9O2Z1bmN0aW9uIGVDKFMsTyxrKXt2''@;'; put 'put ''YXIgZWUsSz1TLnJlYWRfc2hpZnQoMiksc2U9e2ZCdWlsdEluOjEmSyxmV2FudEFkdmlzZTpLPj4+MSYxLGZXYW50UGljdDpLPj4+MiYxLGZPbGU6Sz4+PjMmMSxmT2xlTGluazpLPj4+NCYxLGNmOks+Pj41JjEwMjMsZkljb246Sz4+PjE1JjF9O3JldHVybiAxNDg0OT09PWsuc2JjY2gmJihl''@;'; put 'put ''ZT1mdW5jdGlvbiB6NihTLE8sayl7Uy5sKz00O3ZhciBLPVMubCsoTy09NCksZWU9VWEoUywwLGspLHNlPVMucmVhZF9zaGlmdCgyKTtpZihzZSE9PShLLT1TLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitLKyIgIT0gIitzZSk7cmV0dXJuIFMu''@;'; put 'put ''bCs9c2UsZWV9KFMsTy0yLGspKSxzZS5ib2R5PWVlfHxTLnJlYWRfc2hpZnQoTy0yKSwic3RyaW5nIj09dHlwZW9mIGVlJiYoc2UuTmFtZT1lZSksc2V9dmFyIGNWPVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5F''@;'; put 'put ''eHRyYWN0IiwiX3hsbm0uRGF0YWJhc2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJf''@;'; put 'put ''eGxubS5TaGVldF9UaXRsZSIsIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIHRDKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1TLnJlYWRfc2hpZnQoMiksc2U9Uy5yZWFkX3NoaWZ0KDEpLG1lPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6Miks''@;'; put 'put ''YmU9MDsoIWt8fGsuYmlmZj49NSkmJig1IT1rLmJpZmYmJihTLmwrPTIpLGJlPVMucmVhZF9zaGlmdCgyKSw1PT1rLmJpZmYmJihTLmwrPTIpLFMubCs9NCk7dmFyIFBlPXJjKFMsbWUsayk7MzImZWUmJihQZT1jVltQZS5jaGFyQ29kZUF0KDApXSk7dmFyIFZlPUstUy5sO2smJjI9PWsuYmlm''@;'; put 'put ''ZiYmLS1WZTt2YXIgWWU9SyE9Uy5sJiYwIT09cGUmJlZlPjA/ZnVuY3Rpb24gQW5lKFMsTyxrLEspe3ZhciBtZSxlZT1TLmwrTyxzZT1saChTLEssayk7cmV0dXJuIGVlIT09Uy5sJiYobWU9QjQoUyxlZS1TLmwsc2UsaykpLFtzZSxtZV19KFMsVmUsayxwZSk6W107cmV0dXJue2NoS2V5OnNl''@;'; put 'put ''LE5hbWU6UGUsaXRhYjpiZSxyZ2NlOlllfX1mdW5jdGlvbiBUdihTLE8sayl7aWYoay5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIG5DKFMsTyxrKXszPT1TW1MubCsxXSYmU1tTLmxdKys7dmFyIEs9VWEoUywwLGspO3JldHVybiAzPT1LLmNoYXJDb2RlQXQoMCk/Sy5zbGljZSgxKTpLfShTLDAs''@;'; put 'put ''ayk7Zm9yKHZhciBLPVtdLGVlPVMubCtPLHNlPVMucmVhZF9zaGlmdChrLmJpZmY+OD80OjIpOzAhPXNlLS07KUsucHVzaCh4ZihTLDAsaykpO2lmKFMubCE9ZWUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrUy5sKyIgIT0gIitlZSk7cmV0dXJuIEt9ZnVuY3Rpb24ga3Yo''@;'; put 'put ''UyxPLGspe3ZhciBLPWdjKFMsNik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCsrLE8tPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTIsTy09ODticmVhaztkZWZhdWx0OlMubCs9NixPLT0xMn1yZXR1cm5bSyxjRChTLE8sayldfXZhciBlaz1bXTtmdW5jdGlvbiBmVihTKXt2YXIgTz15''@;'; put 'put ''bigyNCksaz1ObyhTWzBdKTtPLndyaXRlX3NoaWZ0KDIsay5yKSxPLndyaXRlX3NoaWZ0KDIsay5yKSxPLndyaXRlX3NoaWZ0KDIsay5jKSxPLndyaXRlX3NoaWZ0KDIsay5jKTtmb3IodmFyIEs9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxp''@;'; put 'put ''dCgiICIpLGVlPTA7ZWU8MTY7KytlZSlPLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoS1tlZV0sMTYpKTtyZXR1cm4gVShbTyxTNChTWzFdKV0pfWZ1bmN0aW9uIGdWKFMpe3ZhciBPPVNbMV0uVG9vbHRpcCxrPXluKDEwKzIqKE8ubGVuZ3RoKzEpKTtrLndyaXRlX3NoaWZ0KDIsMjA0OCk7dmFy''@;'; put 'put ''IEs9Tm8oU1swXSk7ay53cml0ZV9zaGlmdCgyLEsuciksay53cml0ZV9zaGlmdCgyLEsuciksay53cml0ZV9zaGlmdCgyLEsuYyksay53cml0ZV9zaGlmdCgyLEsuYyk7Zm9yKHZhciBlZT0wO2VlPE8ubGVuZ3RoOysrZWUpay53cml0ZV9zaGlmdCgyLE8uY2hhckNvZGVBdChlZSkpO3JldHVy''@;'; put 'put ''biBrLndyaXRlX3NoaWZ0KDIsMCksa31mdW5jdGlvbiByQyhTLE8sayl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gSW4oUyxPKTt2YXIgSz1rJiZrLmJpZmY+PTEyPzQ6MixlZT1TLnJlYWRfc2hpZnQoSyksc2U9Uy5yZWFkX3NoaWZ0KEspLG1lPVMucmVhZF9zaGlmdChLKSxwZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoSyksYmU9Uy5yZWFkX3NoaWZ0KDIpOzI9PUsmJihTLmwrPTIpO3ZhciBQZT17czplZSxlOnNlLHc6bWUsaXhmZTpwZSxmbGFnczpiZX07cmV0dXJuKGsuYmlmZj49NXx8IWsuYmlmZikmJihQZS5sZXZlbD1iZT4+OCY3KSxQZX1la1s4XT1mdW5jdGlvbihTLE8pe3ZhciBrPVMubCtP''@;'; put 'put ''O1MubCs9MTA7dmFyIEs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NCxTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTQ7dmFyIGVlPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz1lZSxTLmw9ayx7Zm10Okt9fTt2YXIgUXRlPXcwLG5rPXc0LE8wPW51O3ZhciBCMz1mdW5jdGlvbigpe3ZhciBT''@;'; put 'put ''PXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEw''@;'; put 'put ''MDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0''@;'; put 'put ''MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1''@;'; put 'put ''Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sTz1IZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4''@;'; put 'put ''NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIGVlKGJlLFBlKXt2YXIgVmU9UGV8fHt9O3JldHVybiBWZS5kYXRlTkZ8fChWZS5kYXRlTkY9Inl5eXlt''@;'; put 'put ''bWRkIikscDQoZnVuY3Rpb24gSyhiZSxQZSl7dmFyIFZlPVtdLFllPXooMSk7c3dpdGNoKFBlLnR5cGUpe2Nhc2UiYmFzZTY0IjpZZT15KF9lLmRlY29kZShiZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpZZT15KGJlKTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6WWU9YmV9bW4oWWUs''@;'; put 'put ''MCk7dmFyIGV0PVllLnJlYWRfc2hpZnQoMSksY3Q9ISEoMTM2JmV0KSxFdD0hMSxhdD0hMTtzd2l0Y2goZXQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OkV0PSEwLGN0PSEwO2JyZWFrO2Nhc2UgMTQwOmF0PSEwO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitldC50b1N0cmluZygxNikpfXZhciBidD0wLGp0PTUyMTsyPT1ldCYmKGJ0PVllLnJlYWRfc2hpZnQoMikpLFllLmwrPTMsMiE9ZXQmJihidD1ZZS5yZWFkX3NoaWZ0KDQpKSxidD4xMDQ4NTc2JiYo''@;'; put 'put ''YnQ9MWU2KSwyIT1ldCYmKGp0PVllLnJlYWRfc2hpZnQoMikpO3ZhciBrdD1ZZS5yZWFkX3NoaWZ0KDIpLE90PVBlLmNvZGVwYWdlfHwxMjUyOzIhPWV0JiYoWWUubCs9MTYsWWUucmVhZF9zaGlmdCgxKSwwIT09WWVbWWUubF0mJihPdD1TW1llW1llLmxdXSksWWUubCs9MSxZZS5sKz0yKSxh''@;'; put 'put ''dCYmKFllLmwrPTM2KTtmb3IodmFyIEt0PVtdLFRuPXt9LHJyPU1hdGgubWluKFllLmxlbmd0aCwyPT1ldD81MjE6anQtMTAtKEV0PzI2NDowKSksU249YXQ/MzI6MTE7WWUubDxyciYmMTMhPVllW1llLmxdOylzd2l0Y2goVG49e30sVG4ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShPdCxZ''@;'; put 'put ''ZS5zbGljZShZZS5sLFllLmwrU24pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksWWUubCs9U24sVG4udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKFllLnJlYWRfc2hpZnQoMSkpLDIhPWV0JiYhYXQmJihUbi5vZmZzZXQ9WWUucmVhZF9zaGlmdCg0KSksVG4ubGVuPVllLnJlYWRf''@;'; put 'put ''c2hpZnQoMSksMj09ZXQmJihUbi5vZmZzZXQ9WWUucmVhZF9zaGlmdCgyKSksVG4uZGVjPVllLnJlYWRfc2hpZnQoMSksVG4ubmFtZS5sZW5ndGgmJkt0LnB1c2goVG4pLDIhPWV0JiYoWWUubCs9YXQ/MTM6MTQpLFRuLnR5cGUpe2Nhc2UiQiI6KCFFdHx8OCE9VG4ubGVuKSYmUGUuV1RGJiZj''@;'; put 'put ''b25zb2xlLmxvZygiU2tpcHBpbmcgIitUbi5uYW1lKyI6IitUbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6UGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitUbi5uYW1lKyI6IitUbi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6''@;'; put 'put ''Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrVG4udHlwZSl9aWYoMTMhPT1ZZVtZZS5sXSYmKFllLmw9anQtMSksMTMhPT1ZZS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrWWUubCsiICIrWWVbWWUubF0pO1llLmw9anQ7dmFyIGxyPTAsWG49MDtmb3IoVmVbMF09W10sWG49MDtYbiE9S3QubGVuZ3RoOysrWG4pVmVbMF1bWG5dPUt0W1huXS5uYW1lO2Zvcig7YnQt''@;'; put 'put ''LSA+MDspaWYoNDIhPT1ZZVtZZS5sXSlmb3IoKytZZS5sLFZlWysrbHJdPVtdLFhuPTAsWG49MDtYbiE9S3QubGVuZ3RoOysrWG4pe3ZhciBCbj1ZZS5zbGljZShZZS5sLFllLmwrS3RbWG5dLmxlbik7WWUubCs9S3RbWG5dLmxlbixtbihCbiwwKTt2YXIgZnI9Y3B0YWJsZS51dGlscy5kZWNv''@;'; put 'put ''ZGUoT3QsQm4pO3N3aXRjaChLdFtYbl0udHlwZSl7Y2FzZSJDIjpmci50cmltKCkubGVuZ3RoJiYoVmVbbHJdW1huXT1mci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6VmVbbHJdW1huXT04PT09ZnIubGVuZ3RoP25ldyBEYXRlKCtmci5zbGljZSgwLDQpLCtmci5zbGljZSg0''@;'; put 'put ''LDYpLTEsK2ZyLnNsaWNlKDYsOCkpOmZyO2JyZWFrO2Nhc2UiRiI6VmVbbHJdW1huXT1wYXJzZUZsb2F0KGZyLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOlZlW2xyXVtYbl09YXQ/MjE0NzQ4MzY0OF5Cbi5yZWFkX3NoaWZ0KC00LCJpIik6Qm4ucmVhZF9zaGlmdCg0LCJpIik7YnJl''@;'; put 'put ''YWs7Y2FzZSJMIjpzd2l0Y2goZnIudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpWZVtscl1bWG5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpWZVtscl1bWG5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYg''@;'; put 'put ''VW5yZWNvZ25pemVkIEw6fCIrZnIrInwiKX1icmVhaztjYXNlIk0iOmlmKCFjdCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitldC50b1N0cmluZygxNikpO1ZlW2xyXVtYbl09IiMjTUVNTyMjIisoYXQ/cGFyc2VJbnQoZnIudHJpbSgpLDEwKTpCbi5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOihmcj1mci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1mciYmKFZlW2xyXVtYbl09K2ZyfHwwKTticmVhaztjYXNlIkAiOlZlW2xyXVtYbl09bmV3IERhdGUoQm4ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1KTti''@;'; put 'put ''cmVhaztjYXNlIlQiOlZlW2xyXVtYbl09bmV3IERhdGUoODY0ZTUqKEJuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkrQm4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpWZVtscl1bWG5dPUJuLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztjYXNlIk8iOlZlW2xyXVtYbl09LUJuLnJl''@;'; put 'put ''YWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKEV0JiY4PT1LdFtYbl0ubGVuKXtWZVtscl1bWG5dPUJuLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjpCbi5sKz1LdFtYbl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09S3RbWG5dLm5h''@;'; put 'put ''bWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitLdFtYbl0udHlwZSl9fWVsc2UgWWUubCs9a3Q7aWYoMiE9ZXQmJlllLmw8WWUubGVuZ3RoJiYyNiE9WWVbWWUubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2VyIG1p''@;'; put 'put ''c3NpbmcgIisoWWUubC0xKSsiIG9mICIrWWUubGVuZ3RoKyIgIitZZVtZZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFBlJiZQZS5zaGVldFJvd3MmJihWZT1WZS5zbGljZSgwLFBlLnNoZWV0Um93cykpLFZlfShiZSxWZSksVmUpfXZhciBtZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAs''@;'; put 'put ''IiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBzZShiZSxQZSl7dHJ5e3JldHVybiB0aChlZShiZSxQZSksUGUpfWNhdGNoKFZlKXtpZihQZSYmUGUuV1RGKXRocm93IFZlfXJldHVybntTaGVldE5hbWVzOltdLFNo''@;'; put 'put ''ZWV0czp7fX19LHRvX3NoZWV0OmVlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gcGUoYmUsUGUpe3ZhciBWZT1QZXx8e307aWYoK1ZlLmNvZGVwYWdlPj0wJiZCKCtWZS5jb2RlcGFnZSksInN0cmluZyI9PVZlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmlu''@;'; put 'put ''ZyIpO3ZhciBZZT15aSgpLGV0PUs0KGJlLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksY3Q9ZXRbMF0sRXQ9ZXQuc2xpY2UoMSksYXQ9MCxidD0wLGp0PTAsa3Q9MTtmb3IoYXQ9MDthdDxjdC5sZW5ndGg7KythdClpZihudWxsIT1hdCl7aWYoKytqdCwibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGN0W2F0XSYmKGN0W2F0XT1jdFthdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGN0W2F0XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIrY3RbYXRdKyIgfCIrdHlwZW9mIGN0W2F0XSsifCIpO2lmKGN0LmluZGV4T2YoY3RbYXRdKSE9PWF0KWZv''@;'; put 'put ''cihidD0wO2J0PDEwMjQ7KytidClpZigtMT09Y3QuaW5kZXhPZihjdFthdF0rIl8iK2J0KSl7Y3RbYXRdKz0iXyIrYnQ7YnJlYWt9fXZhciBPdD1vbyhiZVsiIXJlZiJdKSxLdD1bXTtmb3IoYXQ9MDthdDw9T3QuZS5jLU90LnMuYzsrK2F0KXt2YXIgVG49W107Zm9yKGJ0PTA7YnQ8RXQubGVu''@;'; put 'put ''Z3RoOysrYnQpbnVsbCE9RXRbYnRdW2F0XSYmVG4ucHVzaChFdFtidF1bYXRdKTtpZigwIT1Ubi5sZW5ndGgmJm51bGwhPWN0W2F0XSl7dmFyIHJyPSIiLFNuPSIiO2ZvcihidD0wO2J0PFRuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIFRuW2J0XSl7Y2FzZSJudW1iZXIiOlNuPSJCIjti''@;'; put 'put ''cmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDpTbj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpTbj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOlNuPVRuW2J0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KHJyPXJyJiZyciE9U24/IkMiOlNuKSlicmVha31rdCs9bWVbcnJdfHwwLEt0''@;'; put 'put ''W2F0XT1ycn1lbHNlIEt0W2F0XT0iPyJ9dmFyIGxyPVllLm5leHQoMzIpO2Zvcihsci53cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksbHIud3JpdGVfc2hpZnQoNCxFdC5sZW5ndGgpLGxyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKmp0KSxsci53cml0ZV9zaGlmdCgyLGt0KSxhdD0wO2F0PDQ7Kyth''@;'; put 'put ''dClsci53cml0ZV9zaGlmdCg0LDApO2Zvcihsci53cml0ZV9zaGlmdCg0LCgrT1tIXXx8Myk8PDgpLGF0PTAsYnQ9MDthdDxjdC5sZW5ndGg7KythdClpZihudWxsIT1jdFthdF0pe3ZhciBYbj1ZZS5uZXh0KDMyKSxCbj0oY3RbYXRdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFww''@;'; put 'put ''XDAiKS5zbGljZSgwLDExKTtYbi53cml0ZV9zaGlmdCgxLEJuLCJzYmNzIiksWG4ud3JpdGVfc2hpZnQoMSwiPyI9PUt0W2F0XT8iQyI6S3RbYXRdLCJzYmNzIiksWG4ud3JpdGVfc2hpZnQoNCxidCksWG4ud3JpdGVfc2hpZnQoMSxtZVtLdFthdF1dfHwwKSxYbi53cml0ZV9zaGlmdCgxLDAp''@;'; put 'put ''LFhuLndyaXRlX3NoaWZ0KDEsMiksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9zaGlmdCgxLDApLFhuLndyaXRlX3NoaWZ0KDQsMCksWG4ud3JpdGVfc2hpZnQoNCwwKSxidCs9bWVbS3RbYXRdXXx8MH12YXIgZnI9WWUubmV4dCgyNjQpO2Zvcihmci53cml0ZV9zaGlmdCg0LDEzKSxh''@;'; put 'put ''dD0wO2F0PDY1OysrYXQpZnIud3JpdGVfc2hpZnQoNCwwKTtmb3IoYXQ9MDthdDxFdC5sZW5ndGg7KythdCl7dmFyIHlyPVllLm5leHQoa3QpO2Zvcih5ci53cml0ZV9zaGlmdCgxLDApLGJ0PTA7YnQ8Y3QubGVuZ3RoOysrYnQpaWYobnVsbCE9Y3RbYnRdKXN3aXRjaChLdFtidF0pe2Nhc2Ui''@;'; put 'put ''TCI6eXIud3JpdGVfc2hpZnQoMSxudWxsPT1FdFthdF1bYnRdPzYzOkV0W2F0XVtidF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6eXIud3JpdGVfc2hpZnQoOCxFdFthdF1bYnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpFdFthdF1bYnRdPyh5ci53cml0ZV9zaGlmdCg0LCgiMDAwMCIrRXRbYXRd''@;'; put 'put ''W2J0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSx5ci53cml0ZV9zaGlmdCgyLCgiMDAiKyhFdFthdF1bYnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHlyLndyaXRlX3NoaWZ0KDIsKCIwMCIrRXRbYXRdW2J0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2Jj''@;'; put 'put ''cyIpKTp5ci53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciBlcj1TdHJpbmcoRXRbYXRdW2J0XXx8IiIpO2Zvcih5ci53cml0ZV9zaGlmdCgxLGVyLCJzYmNzIiksanQ9MDtqdDwyNTAtZXIubGVuZ3RoOysranQpeXIud3JpdGVfc2hpZnQoMSwzMil9''@;'; put 'put ''fXJldHVybiBZZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLFllLmVuZCgpfX19KCksY0M9ZnVuY3Rpb24oKXt2YXIgUz17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2Ii''@;'; put 'put ''LEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcs''@;'; put 'put ''SGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixD''@;'; put 'put ''dToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6''@;'; put 'put ''MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LE89bmV3''@;'; put 'put ''IFJlZ0V4cCgiXHgxYk4oIitSZShTKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxrPWZ1bmN0aW9uKGV0LGN0KXt2YXIgRXQ9U1tjdF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFdD9yZShFdCk6''@;'; put 'put ''RXR9LEs9ZnVuY3Rpb24oZXQsY3QsRXQpe3ZhciBhdD1jdC5jaGFyQ29kZUF0KDApLTMyPDw0fEV0LmNoYXJDb2RlQXQoMCktNDg7cmV0dXJuIDU5PT1hdD9ldDpyZShhdCl9O2Z1bmN0aW9uIHNlKGV0LGN0KXt2YXIgZnIsRXQ9ZXQuc3BsaXQoL1tcblxyXSsvKSxhdD0tMSxidD0tMSxqdD0w''@;'; put 'put ''LGt0PTAsT3Q9W10sS3Q9W10sVG49bnVsbCxycj17fSxTbj1bXSxscj1bXSxYbj1bXSxCbj0wO2ZvcigrY3QuY29kZXBhZ2U+PTAmJkIoK2N0LmNvZGVwYWdlKTtqdCE9PUV0Lmxlbmd0aDsrK2p0KXtCbj0wO3ZhciBGaSx5cj1FdFtqdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgy''@;'; put 'put ''Rl0pKFtceDMwLVx4M0ZdKS9nLEspLnJlcGxhY2UoTyxrKSxlcj15ci5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKFppKXtyZXR1cm4gWmkucmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKHlyLmxlbmd0aD4wKXN3aXRjaChlclswXSl7Y2FzZSJJRCI6Y2Fz''@;'; put 'put ''ZSJFIjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09ZXJbMV0uY2hhckF0KDApJiZLdC5wdXNoKHlyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgbmE9ITEsY2E9ITEsTGk9ITEsa3I9ITEsVm49LTEsQnI9LTE7Zm9yKGt0''@;'; put 'put ''PTE7a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmJ0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxjYT0hMDticmVhaztjYXNlIlkiOmZvcihhdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsY2F8''@;'; put 'put ''fChidD0wKSxmcj1PdC5sZW5ndGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KEZpPWVyW2t0XS5zbGljZSgxKSkuY2hhckF0KDApP0ZpPUZpLnNsaWNlKDEsRmkubGVuZ3RoLTEpOiJUUlVFIj09PUZpP0ZpPSEwOiJGQUxTRSI9PT1GaT9GaT0hMTppc05hTihR''@;'; put 'put ''dChGaSkpP2lzTmFOKHNuKEZpKS5nZXREYXRlKCkpfHwoRmk9TmUoRmkpKTooRmk9UXQoRmkpLG51bGwhPT1UbiYmQS5pc19kYXRlKFRuKSYmKEZpPWxuKEZpKSkpLHR5cGVvZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBGaSYmInN0cmluZyIhPShjdHx8e30pLnR5cGUmJihjdHx8''@;'; put 'put ''e30pLmNvZGVwYWdlJiYoRmk9Y3B0YWJsZS51dGlscy5kZWNvZGUoY3QuY29kZXBhZ2UsRmkpKSxuYT0hMDticmVhaztjYXNlIkUiOmtyPSEwO3ZhciBfcj1INShlcltrdF0uc2xpY2UoMSkse3I6YXQsYzpidH0pO090W2F0XVtidF09W090W2F0XVtidF0sX3JdO2JyZWFrO2Nhc2UiUyI6TGk9''@;'; put 'put ''ITAsT3RbYXRdW2J0XT1bT3RbYXRdW2J0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpWbj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjpCcj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiU1lMSyBiYWQgcmVjb3JkICIreXIpfWlmKG5hJiYoT3RbYXRdW2J0XSYmMj09T3RbYXRdW2J0XS5sZW5ndGg/T3RbYXRdW2J0XVswXT1GaTpPdFthdF1bYnRdPUZpLFRuPW51bGwpLExpKXtpZihrcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUg''@;'; put 'put ''b3duIGZvcm11bGEiKTt2YXIgRm49Vm4+LTEmJk90W1ZuXVtCcl07aWYoIUZufHwhRm5bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2UiKTtPdFthdF1bYnRdWzFdPUdrKEZuWzFdLHtyOmF0LVZuLGM6YnQtQnJ9KX1icmVhaztjYXNlIkYi''@;'; put 'put ''OnZhciBqcj0wO2ZvcihrdD0xO2t0PGVyLmxlbmd0aDsrK2t0KXN3aXRjaChlcltrdF0uY2hhckF0KDApKXtjYXNlIlgiOmJ0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSwrK2pyO2JyZWFrO2Nhc2UiWSI6Zm9yKGF0PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMSxmcj1PdC5sZW5n''@;'; put 'put ''dGg7ZnI8PWF0OysrZnIpT3RbZnJdPVtdO2JyZWFrO2Nhc2UiTSI6Qm49cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpUbj1LdFtwYXJzZUludChlcltrdF0uc2xpY2UoMSkpXTti''@;'; put 'put ''cmVhaztjYXNlIlciOmZvcihYbj1lcltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxmcj1wYXJzZUludChYblswXSwxMCk7ZnI8PXBhcnNlSW50KFhuWzFdLDEwKTsrK2ZyKUJuPXBhcnNlSW50KFhuWzJdLDEwKSxscltmci0xXT0wPT09Qm4/e2hpZGRlbjohMH06e3djaDpCbn0sUTAobHJbZnIt''@;'; put 'put ''MV0pO2JyZWFrO2Nhc2UiQyI6bHJbYnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xXXx8KGxyW2J0XT17fSk7YnJlYWs7Y2FzZSJSIjpTblthdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwoU25bYXRdPXt9KSxCbj4wPyhTblthdF0uaHB0PUJuLFNuW2F0XS5ocHg9c2goQm4p''@;'; put 'put ''KTowPT09Qm4mJihTblthdF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKGN0JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit5cil9anI8MSYmKFRuPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFk''@;'; put 'put ''IHJlY29yZCAiK3lyKX19cmV0dXJuIFNuLmxlbmd0aD4wJiYocnJbIiFyb3dzIl09U24pLGxyLmxlbmd0aD4wJiYocnJbIiFjb2xzIl09bHIpLGN0JiZjdC5zaGVldFJvd3MmJihPdD1PdC5zbGljZSgwLGN0LnNoZWV0Um93cykpLFtPdCxycl19ZnVuY3Rpb24gbWUoZXQsY3Qpe3ZhciBFdD1m''@;'; put 'put ''dW5jdGlvbiBlZShldCxjdCl7c3dpdGNoKGN0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UoX2UuZGVjb2RlKGV0KSxjdCk7Y2FzZSJiaW5hcnkiOnJldHVybiBzZShldCxjdCk7Y2FzZSJidWZmZXIiOnJldHVybiBzZShldC50b1N0cmluZygiYmluYXJ5IiksY3QpO2Nhc2UiYXJyYXki''@;'; put 'put ''OnJldHVybiBzZSh1dChldCksY3QpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitjdC50eXBlKX0oZXQsY3QpLGJ0PUV0WzFdLGp0PXA0KEV0WzBdLGN0KTtyZXR1cm4gUmUoYnQpLmZvckVhY2goZnVuY3Rpb24oa3Qpe2p0W2t0XT1idFtrdF19KSxqdH1mdW5jdGlvbiBi''@;'; put 'put ''ZShldCxjdCxFdCxhdCl7dmFyIGJ0PSJDO1kiKyhFdCsxKSsiO1giKyhhdCsxKSsiO0siO3N3aXRjaChldC50KXtjYXNlIm4iOmJ0Kz1ldC52fHwwLGV0LmYmJiFldC5GJiYoYnQrPSI7RSIrSDQoZXQuZix7cjpFdCxjOmF0fSkpO2JyZWFrO2Nhc2UiYiI6YnQrPWV0LnY/IlRSVUUiOiJGQUxT''@;'; put 'put ''RSI7YnJlYWs7Y2FzZSJlIjpidCs9ZXQud3x8ZXQudjticmVhaztjYXNlImQiOmJ0Kz0nIicrKGV0Lnd8fGV0LnYpKyciJzticmVhaztjYXNlInMiOmJ0Kz0nIicrZXQudi5yZXBsYWNlKC8iL2csIiIpKyciJ31yZXR1cm4gYnR9cmV0dXJuIFNbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0''@;'; put 'put ''aW9uIHBlKGV0LGN0KXtyZXR1cm4gdGgobWUoZXQsY3QpLGN0KX0sdG9fc2hlZXQ6bWUsZnJvbV9zaGVldDpmdW5jdGlvbiBZZShldCxjdCl7dmFyIGp0LEV0PVsiSUQ7UFNoZWV0SlM7TjtFIl0sYXQ9W10sYnQ9b28oZXRbIiFyZWYiXSksa3Q9QXJyYXkuaXNBcnJheShldCksT3Q9IlxyXG4i''@;'; put 'put ''O0V0LnB1c2goIlA7UEdlbmVyYWwiKSxFdC5wdXNoKCJGO1AwO0RHMEc4O00yNTUiKSxldFsiIWNvbHMiXSYmZnVuY3Rpb24gUGUoZXQsY3Qpe2N0LmZvckVhY2goZnVuY3Rpb24oRXQsYXQpe3ZhciBidD0iRjtXIisoYXQrMSkrIiAiKyhhdCsxKSsiICI7RXQuaGlkZGVuP2J0Kz0iMCI6KCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgRXQud2lkdGgmJiFFdC53cHgmJihFdC53cHg9TTUoRXQud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIEV0LndweCYmIUV0LndjaCYmKEV0LndjaD14NShFdC53cHgpKSwibnVtYmVyIj09dHlwZW9mIEV0LndjaCYmKGJ0Kz1NYXRoLnJvdW5kKEV0LndjaCkpKSwiICIh''@;'; put 'put ''PWJ0LmNoYXJBdChidC5sZW5ndGgtMSkmJmV0LnB1c2goYnQpfSl9KEV0LGV0WyIhY29scyJdKSxldFsiIXJvd3MiXSYmZnVuY3Rpb24gVmUoZXQsY3Qpe2N0LmZvckVhY2goZnVuY3Rpb24oRXQsYXQpe3ZhciBidD0iRjsiO0V0LmhpZGRlbj9idCs9Ik0wOyI6RXQuaHB0P2J0Kz0iTSIrMjAq''@;'; put 'put ''RXQuaHB0KyI7IjpFdC5ocHgmJihidCs9Ik0iKzIwKlUzKEV0LmhweCkrIjsiKSxidC5sZW5ndGg+MiYmZXQucHVzaChidCsiUiIrKGF0KzEpKX0pfShFdCxldFsiIXJvd3MiXSksRXQucHVzaCgiQjtZIisoYnQuZS5yLWJ0LnMucisxKSsiO1giKyhidC5lLmMtYnQucy5jKzEpKyI7RCIrW2J0''@;'; put 'put ''LnMuYyxidC5zLnIsYnQuZS5jLGJ0LmUucl0uam9pbigiICIpKTtmb3IodmFyIEt0PWJ0LnMucjtLdDw9YnQuZS5yOysrS3QpZm9yKHZhciBUbj1idC5zLmM7VG48PWJ0LmUuYzsrK1RuKXt2YXIgcnI9cWkoe3I6S3QsYzpUbn0pOyhqdD1rdD8oZXRbS3RdfHxbXSlbVG5dOmV0W3JyXSkmJihu''@;'; put 'put ''dWxsIT1qdC52fHxqdC5mJiYhanQuRikmJmF0LnB1c2goYmUoanQsMCxLdCxUbikpfXJldHVybiBFdC5qb2luKE90KStPdCthdC5qb2luKE90KStPdCsiRSIrT3R9fX0oKSxEdj1mdW5jdGlvbigpe2Z1bmN0aW9uIE8oc2UsbWUpe2Zvcih2YXIgcGU9c2Uuc3BsaXQoIlxuIiksYmU9LTEsUGU9''@;'; put 'put ''LTEsVmU9MCxZZT1bXTtWZSE9PXBlLmxlbmd0aDsrK1ZlKWlmKCJCT1QiIT09cGVbVmVdLnRyaW0oKSl7aWYoIShiZTwwKSl7Zm9yKHZhciBldD1wZVtWZV0udHJpbSgpLnNwbGl0KCIsIiksY3Q9ZXRbMF0sRXQ9ZXRbMV0sYXQ9cGVbKytWZV18fCIiOzEmKGF0Lm1hdGNoKC9bIl0vZyl8fFtd''@;'; put 'put ''KS5sZW5ndGgmJlZlPHBlLmxlbmd0aC0xOylhdCs9IlxuIitwZVsrK1ZlXTtzd2l0Y2goYXQ9YXQudHJpbSgpLCtjdCl7Y2FzZS0xOmlmKCJCT1QiPT09YXQpe1llWysrYmVdPVtdLFBlPTA7Y29udGludWV9aWYoIkVPRCIhPT1hdCl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBESUYg''@;'; put 'put ''c3BlY2lhbCBjb21tYW5kICIrYXQpO2JyZWFrO2Nhc2UgMDpZZVtiZV1bUGVdPSJUUlVFIj09PWF0fHwiRkFMU0UiIT09YXQmJihpc05hTihRdChFdCkpP2lzTmFOKHNuKEV0KS5nZXREYXRlKCkpP0V0Ok5lKEV0KTpRdChFdCkpLCsrUGU7YnJlYWs7Y2FzZSAxOihhdD0oYXQ9YXQuc2xpY2Uo''@;'; put 'put ''MSxhdC5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJmF0Lm1hdGNoKC9ePSIuKiIkLykmJihhdD1hdC5zbGljZSgyLC0xKSksWWVbYmVdW1BlKytdPSIiIT09YXQ/YXQ6bnVsbH1pZigiRU9EIj09PWF0KWJyZWFrfX1lbHNlIFllWysrYmVdPVtdLFBlPTA7cmV0dXJuIG1lJiZtZS5z''@;'; put 'put ''aGVldFJvd3MmJihZZT1ZZS5zbGljZSgwLG1lLnNoZWV0Um93cykpLFllfWZ1bmN0aW9uIGsoc2UsbWUpe3JldHVybiBwNChmdW5jdGlvbiBTKHNlLG1lKXtzd2l0Y2gobWUudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBPKF9lLmRlY29kZShzZSksbWUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4g''@;'; put 'put ''TyhzZSxtZSk7Y2FzZSJidWZmZXIiOnJldHVybiBPKHNlLnRvU3RyaW5nKCJiaW5hcnkiKSxtZSk7Y2FzZSJhcnJheSI6cmV0dXJuIE8odXQoc2UpLG1lKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrbWUudHlwZSl9KHNlLG1lKSxtZSl9cmV0dXJue3RvX3dvcmtib29r''@;'; put 'put ''OmZ1bmN0aW9uIEsoc2UsbWUpe3JldHVybiB0aChrKHNlLG1lKSxtZSl9LHRvX3NoZWV0OmssZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBzZT1mdW5jdGlvbihiZSxQZSxWZSxZZSxldCl7YmUucHVzaChQZSksYmUucHVzaChWZSsiLCIrWWUpLGJlLnB1c2goJyInK2V0LnJlcGxhY2UoLyIv''@;'; put 'put ''ZywnIiInKSsnIicpfSxtZT1mdW5jdGlvbihiZSxQZSxWZSxZZSl7YmUucHVzaChQZSsiLCIrVmUpLGJlLnB1c2goMT09UGU/JyInK1llLnJlcGxhY2UoLyIvZywnIiInKSsnIic6WWUpfTtyZXR1cm4gZnVuY3Rpb24oYmUpe3ZhciBZZSxQZT1bXSxWZT1vbyhiZVsiIXJlZiJdKSxldD1BcnJh''@;'; put 'put ''eS5pc0FycmF5KGJlKTtzZShQZSwiVEFCTEUiLDAsMSwic2hlZXRqcyIpLHNlKFBlLCJWRUNUT1JTIiwwLFZlLmUuci1WZS5zLnIrMSwiIiksc2UoUGUsIlRVUExFUyIsMCxWZS5lLmMtVmUucy5jKzEsIiIpLHNlKFBlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgY3Q9VmUucy5yO2N0PD1WZS5l''@;'; put 'put ''LnI7KytjdCl7bWUoUGUsLTEsMCwiQk9UIik7Zm9yKHZhciBFdD1WZS5zLmM7RXQ8PVZlLmUuYzsrK0V0KXt2YXIgYXQ9cWkoe3I6Y3QsYzpFdH0pO2lmKFllPWV0PyhiZVtjdF18fFtdKVtFdF06YmVbYXRdKXN3aXRjaChZZS50KXtjYXNlIm4iOnZhciBidD1ZZS53OyFidCYmbnVsbCE9WWUu''@;'; put 'put ''diYmKGJ0PVllLnYpLG51bGw9PWJ0P21lKFBlLDEsMCxZZS5mJiYhWWUuRj8iPSIrWWUuZjoiIik6bWUoUGUsMCxidCwiViIpO2JyZWFrO2Nhc2UiYiI6bWUoUGUsMCxZZS52PzE6MCxZZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOm1lKFBlLDEsMCxpc05hTihZZS52KT9ZZS52''@;'; put 'put ''Oic9IicrWWUudisnIicpO2JyZWFrO2Nhc2UiZCI6WWUud3x8KFllLnc9QS5mb3JtYXQoWWUuenx8QS5fdGFibGVbMTRdLEplKE5lKFllLnYpKSkpLG1lKFBlLDAsWWUudywiViIpO2JyZWFrO2RlZmF1bHQ6bWUoUGUsMSwwLCIiKX1lbHNlIG1lKFBlLDEsMCwiIil9fXJldHVybiBtZShQZSwt''@;'; put 'put ''MSwwLCJFT0QiKSxQZS5qb2luKCJcclxuIil9fSgpfX0oKSxLNj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoWWUpe3JldHVybiBZZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIE8oWWUpe3JldHVybiBZZS5yZXBs''@;'; put 'put ''YWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2csIlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIEsoWWUsZXQpe3JldHVybiBwNChmdW5jdGlvbiBrKFllLGV0KXtmb3IodmFyIGN0PVllLnNwbGl0KCJcbiIpLEV0PS0xLGF0PS0xLGJ0PTAsanQ9W107YnQhPT1jdC5sZW5n''@;'; put 'put ''dGg7KytidCl7dmFyIGt0PWN0W2J0XS50cmltKCkuc3BsaXQoIjoiKTtpZigiY2VsbCI9PT1rdFswXSl7dmFyIE90PU5vKGt0WzFdKTtpZihqdC5sZW5ndGg8PU90LnIpZm9yKEV0PWp0Lmxlbmd0aDtFdDw9T3QucjsrK0V0KWp0W0V0XXx8KGp0W0V0XT1bXSk7c3dpdGNoKEV0PU90LnIsYXQ9''@;'; put 'put ''T3QuYyxrdFsyXSl7Y2FzZSJ0IjpqdFtFdF1bYXRdPVMoa3RbM10pO2JyZWFrO2Nhc2UidiI6anRbRXRdW2F0XT0ra3RbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBLdD1rdFtrdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOmp0W0V0XVthdF09Im5sIj09PWt0WzNdPyEhK2t0WzRdOitrdFs0XSwidnRm''@;'; put 'put ''Ij09a3RbMl0mJihqdFtFdF1bYXRdPVtqdFtFdF1bYXRdLEt0XSl9fX1yZXR1cm4gZXQmJmV0LnNoZWV0Um93cyYmKGp0PWp0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksanR9KFllLGV0KSxldCl9dmFyIHNlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwi''@;'; put 'put ''Q29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxtZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRG''@;'; put 'put ''LTgiXS5qb2luKCJcbiIpKyJcbiIscGU9WyIjIFNvY2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIiksYmU9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gUGUoWWUpe2lmKCFZZXx8IVllWyIhcmVm''@;'; put 'put ''Il0pcmV0dXJuIiI7Zm9yKHZhciBFdCxldD1bXSxjdD1bXSxhdD0iIixidD1NcyhZZVsiIXJlZiJdKSxqdD1BcnJheS5pc0FycmF5KFllKSxrdD1idC5zLnI7a3Q8PWJ0LmUucjsrK2t0KWZvcih2YXIgT3Q9YnQucy5jO090PD1idC5lLmM7KytPdClpZihhdD1xaSh7cjprdCxjOk90fSksKEV0''@;'; put 'put ''PWp0PyhZZVtrdF18fFtdKVtPdF06WWVbYXRdKSYmbnVsbCE9RXQudiYmInoiIT09RXQudCl7c3dpdGNoKGN0PVsiY2VsbCIsYXQsInQiXSxFdC50KXtjYXNlInMiOmNhc2Uic3RyIjpjdC5wdXNoKE8oRXQudikpO2JyZWFrO2Nhc2UibiI6RXQuZj8oY3RbMl09InZ0ZiIsY3RbM109Im4iLGN0''@;'; put 'put ''WzRdPUV0LnYsY3RbNV09TyhFdC5mKSk6KGN0WzJdPSJ2IixjdFszXT1FdC52KTticmVhaztjYXNlImIiOmN0WzJdPSJ2dCIrKEV0LmY/ImYiOiJjIiksY3RbM109Im5sIixjdFs0XT1FdC52PyIxIjoiMCIsY3RbNV09TyhFdC5mfHwoRXQudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZCI6dmFyIEt0PUplKE5lKEV0LnYpKTtjdFsyXT0idnRjIixjdFszXT0ibmQiLGN0WzRdPSIiK0t0LGN0WzVdPUV0Lnd8fEEuZm9ybWF0KEV0Lnp8fEEuX3RhYmxlWzE0XSxLdCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1ldC5wdXNoKGN0LmpvaW4oIjoiKSl9cmV0dXJuIGV0LnB1c2goInNo''@;'; put 'put ''ZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsiOnI6IisoYnQuZS5yLWJ0LnMucisxKSsiOnR2ZjoxIiksZXQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxldC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBlZShZZSxldCl7cmV0dXJuIHRoKEsoWWUsZXQp''@;'; put 'put ''LGV0KX0sdG9fc2hlZXQ6Syxmcm9tX3NoZWV0OmZ1bmN0aW9uIFZlKFllKXtyZXR1cm5bc2UsbWUscGUsbWUsUGUoWWUpLGJlXS5qb2luKCJcbiIpfX19KCksajM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFZlLFllLGV0LGN0LEV0KXtFdC5yYXc/WWVbZXRdW2N0XT1WZToiIj09PVZlfHwoWWVb''@;'; put 'put ''ZXRdW2N0XT1SaShWZSxFdCk/UmkoVmUsRXQpLnY6VmUpfXZhciBrPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sSz17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gZWUoVmUpe2Zvcih2YXIgWWU9e30sZXQ9ITEsY3Q9MCxFdD0wO2N0PFZlLmxlbmd0aDsrK2N0KTM0PT0oRXQ9VmUuY2hhckNvZGVB''@;'; put 'put ''dChjdCkpP2V0PSFldDohZXQmJkV0IGluIGsmJihZZVtFdF09KFllW0V0XXx8MCkrMSk7Zm9yKGN0IGluIEV0PVtdLFllKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZZSxjdCkmJkV0LnB1c2goW1llW2N0XSxjdF0pO2lmKCFFdC5sZW5ndGgpZm9yKGN0IGluIFllPUsp''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChbWWVbY3RdLGN0XSk7cmV0dXJuIEV0LnNvcnQoZnVuY3Rpb24oYXQsYnQpe3JldHVybiBhdFswXS1idFswXXx8S1thdFsxXV0tS1tidFsxXV19KSxrW0V0LnBvcCgpWzFdXX1mdW5jdGlvbiBtZShW''@;'; put 'put ''ZSxZZSl7cmV0dXJuIVllfHwhWWUuUFJOfHwic2VwPSI9PVZlLnNsaWNlKDAsNCl8fFZlLmluZGV4T2YoIlx0Iik+PTB8fFZlLmluZGV4T2YoIiwiKT49MHx8VmUuaW5kZXhPZigiOyIpPj0wP2Z1bmN0aW9uIHNlKFZlLFllKXt2YXIgZXQ9WWV8fHt9LGN0PSIiO251bGwhPW9lJiZudWxsPT1l''@;'; put 'put ''dC5kZW5zZSYmKGV0LmRlbnNlPW9lKTt2YXIgRXQ9ZXQuZGVuc2U/W106e30sYXQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PVZlLnNsaWNlKDAsNCk/MTM9PVZlLmNoYXJDb2RlQXQoNSkmJjEwPT1WZS5jaGFyQ29kZUF0KDYpPyhjdD1WZS5jaGFyQXQoNCksVmU9VmUuc2xp''@;'; put 'put ''Y2UoNykpOjEzPT1WZS5jaGFyQ29kZUF0KDUpfHwxMD09VmUuY2hhckNvZGVBdCg1KT8oY3Q9VmUuY2hhckF0KDQpLFZlPVZlLnNsaWNlKDYpKTpjdD1lZShWZS5zbGljZSgwLDEwMjQpKTpjdD1lZShWZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxqdD0wLGt0PTAsT3Q9MCxLdD0wLFRuPWN0''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkscnI9ITEsU249MCxscj1WZS5jaGFyQ29kZUF0KDApO1ZlPVZlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIFhuPW51bGwhPWV0LmRhdGVORj9mdW5jdGlvbiBVZShTKXt2YXIgTz0ibnVtYmVyIj09dHlwZW9mIFM/QS5fdGFibGVbU106UztyZXR1cm4gTz1PLnJl''@;'; put 'put ''cGxhY2Uod2UsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK08rIiQiKX0oZXQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIEJuKCl7dmFyIGZyPVZlLnNsaWNlKE90LEt0KSx5cj17fTtpZignIic9PWZyLmNoYXJBdCgwKSYmJyInPT1mci5jaGFyQXQoZnIubGVuZ3RoLTEpJiYoZnI9ZnIuc2xpY2Uo''@;'; put 'put ''MSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09ZnIubGVuZ3RoKXlyLnQ9InoiO2Vsc2UgaWYoZXQucmF3KXlyLnQ9InMiLHlyLnY9ZnI7ZWxzZSBpZigwPT09ZnIudHJpbSgpLmxlbmd0aCl5ci50PSJzIix5ci52PWZyO2Vsc2UgaWYoNjE9PWZyLmNoYXJDb2RlQXQoMCkpMzQ9PWZyLmNo''@;'; put 'put ''YXJDb2RlQXQoMSkmJjM0PT1mci5jaGFyQ29kZUF0KGZyLmxlbmd0aC0xKT8oeXIudD0icyIseXIudj1mci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIGhuZShTKXtyZXR1cm4gMSE9Uy5sZW5ndGh9KGZyKT8oeXIudD0ibiIseXIuZj1mci5zbGljZSgxKSk6KHly''@;'; put 'put ''LnQ9InMiLHlyLnY9ZnIpO2Vsc2UgaWYoIlRSVUUiPT1mcil5ci50PSJiIix5ci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZnIpeXIudD0iYiIseXIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PVF0KGZyKSkpaWYoIWlzTmFOKHNuKGZyKS5nZXREYXRlKCkpfHxYbiYmZnIubWF0Y2goWG4pKXt5ci56''@;'; put 'put ''PWV0LmRhdGVORnx8QS5fdGFibGVbMTRdO3ZhciBlcj0wO1huJiZmci5tYXRjaChYbikmJihmcj1mdW5jdGlvbiBRZShTLE8sayl7dmFyIEs9LTEsZWU9LTEsc2U9LTEsbWU9LTEscGU9LTEsYmU9LTE7KE8ubWF0Y2god2UpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihZZSxldCl7dmFyIGN0PXBh''@;'; put 'put ''cnNlSW50KGtbZXQrMV0sMTApO3N3aXRjaChZZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpLPWN0O2JyZWFrO2Nhc2UiZCI6c2U9Y3Q7YnJlYWs7Y2FzZSJoIjptZT1jdDticmVhaztjYXNlInMiOmJlPWN0O2JyZWFrO2Nhc2UibSI6bWU+PTA/cGU9Y3Q6ZWU9Y3R9fSksYmU+''@;'; put 'put ''PTAmJi0xPT1wZSYmZWU+PTAmJihwZT1lZSxlZT0tMSk7dmFyIFBlPSgiIisoSz49MD9LOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKGVlPj0xP2VlOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhzZT49MT9zZToxKSkuc2xpY2UoLTIpOzc9PVBlLmxl''@;'; put 'put ''bmd0aCYmKFBlPSIwIitQZSksOD09UGUubGVuZ3RoJiYoUGU9IjIwIitQZSk7dmFyIFZlPSgiMDAiKyhtZT49MD9tZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisocGU+PTA/cGU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGJlPj0wP2JlOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PW1lJiYt''@;'; put 'put ''MT09cGUmJi0xPT1iZT9QZTotMT09SyYmLTE9PWVlJiYtMT09c2U/VmU6UGUrIlQiK1ZlfSgwLGV0LmRhdGVORixmci5tYXRjaChYbil8fFtdKSxlcj0xKSxldC5jZWxsRGF0ZXM/KHlyLnQ9ImQiLHlyLnY9TmUoZnIsZXIpKTooeXIudD0ibiIseXIudj1KZShOZShmcixlcikpKSwhMSE9PWV0''@;'; put 'put ''LmNlbGxUZXh0JiYoeXIudz1BLmZvcm1hdCh5ci56LHlyLnYgaW5zdGFuY2VvZiBEYXRlP0plKHlyLnYpOnlyLnYpKSxldC5jZWxsTkZ8fGRlbGV0ZSB5ci56fWVsc2UgeXIudD0icyIseXIudj1mcjtlbHNlIHlyLnQ9Im4iLCExIT09ZXQuY2VsbFRleHQmJih5ci53PWZyKSx5ci52PWt0O2lm''@;'; put 'put ''KCJ6Ij09eXIudHx8KGV0LmRlbnNlPyhFdFtidF18fChFdFtidF09W10pLEV0W2J0XVtqdF09eXIpOkV0W3FpKHtjOmp0LHI6YnR9KV09eXIpLGxyPVZlLmNoYXJDb2RlQXQoT3Q9S3QrMSksYXQuZS5jPGp0JiYoYXQuZS5jPWp0KSxhdC5lLnI8YnQmJihhdC5lLnI9YnQpLFNuPT1UbikrK2p0''@;'; put 'put ''O2Vsc2UgaWYoanQ9MCwrK2J0LGV0LnNoZWV0Um93cyYmZXQuc2hlZXRSb3dzPD1idClyZXR1cm4hMH1lOmZvcig7S3Q8VmUubGVuZ3RoOysrS3Qpc3dpdGNoKFNuPVZlLmNoYXJDb2RlQXQoS3QpKXtjYXNlIDM0OjM0PT09bHImJihycj0hcnIpO2JyZWFrO2Nhc2UgVG46Y2FzZSAxMDpjYXNl''@;'; put 'put ''IDEzOmlmKCFyciYmQm4oKSlicmVhayBlfXJldHVybiBLdC1PdD4wJiZCbigpLEV0WyIhcmVmIl09cmEoYXQpLEV0fShWZSxZZSk6cDQoZnVuY3Rpb24gTyhWZSxZZSl7dmFyIGV0PVllfHx7fSxjdD1bXTtpZighVmV8fDA9PT1WZS5sZW5ndGgpcmV0dXJuIGN0O2Zvcih2YXIgRXQ9VmUuc3Bs''@;'; put 'put ''aXQoL1tcclxuXS8pLGF0PUV0Lmxlbmd0aC0xO2F0Pj0wJiYwPT09RXRbYXRdLmxlbmd0aDspLS1hdDtmb3IodmFyIGJ0PTEwLGp0PTAsa3Q9MDtrdDw9YXQ7KytrdCktMT09KGp0PUV0W2t0XS5pbmRleE9mKCIgIikpP2p0PUV0W2t0XS5sZW5ndGg6anQrKyxidD1NYXRoLm1heChidCxqdCk7''@;'; put 'put ''Zm9yKGt0PTA7a3Q8PWF0Oysra3Qpe2N0W2t0XT1bXTt2YXIgT3Q9MDtmb3IoUyhFdFtrdF0uc2xpY2UoMCxidCkudHJpbSgpLGN0LGt0LE90LGV0KSxPdD0xO090PD0oRXRba3RdLmxlbmd0aC1idCkvMTArMTsrK090KVMoRXRba3RdLnNsaWNlKGJ0KzEwKihPdC0xKSxidCsxMCpPdCkudHJp''@;'; put 'put ''bSgpLGN0LGt0LE90LGV0KX1yZXR1cm4gZXQuc2hlZXRSb3dzJiYoY3Q9Y3Quc2xpY2UoMCxldC5zaGVldFJvd3MpKSxjdH0oVmUsWWUpLFllKX1mdW5jdGlvbiBwZShWZSxZZSl7dmFyIGV0PSIiLGN0PSJzdHJpbmciPT1ZZS50eXBlP1swLDAsMCwwXTpRUyhWZSxZZSk7c3dpdGNoKFllLnR5''@;'; put 'put ''cGUpe2Nhc2UiYmFzZTY0IjpldD1fZS5kZWNvZGUoVmUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6ZXQ9VmU7YnJlYWs7Y2FzZSJidWZmZXIiOmV0PTY1MDAxPT1ZZS5jb2RlcGFnZT9WZS50b1N0cmluZygidXRmOCIpOlllLmNvZGVwYWdlJiZ0eXBlb2YgY3B0YWJsZTwidSI/''@;'; put 'put ''Y3B0YWJsZS51dGlscy5kZWNvZGUoWWUuY29kZXBhZ2UsVmUpOlZlLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpldD11dChWZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrWWUudHlwZSl9cmV0dXJuIDIzOT09Y3RbMF0m''@;'; put 'put ''JjE4Nz09Y3RbMV0mJjE5MT09Y3RbMl0/ZXQ9Z28oZXQuc2xpY2UoMykpOiJiaW5hcnkiPT1ZZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJlllLmNvZGVwYWdlJiYoZXQ9Y3B0YWJsZS51dGlscy5kZWNvZGUoWWUuY29kZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1OTEsZXQpKSks''@;'; put 'put ''InNvY2lhbGNhbGM6dmVyc2lvbjoiPT1ldC5zbGljZSgwLDE5KT9LNi50b19zaGVldCgic3RyaW5nIj09WWUudHlwZT9ldDpnbyhldCksWWUpOm1lKGV0LFllKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYmUoVmUsWWUpe3JldHVybiB0aChwZShWZSxZZSksWWUpfSx0b19zaGVldDpw''@;'; put 'put ''ZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFBlKFZlKXtmb3IodmFyIGN0LFllPVtdLGV0PW9vKFZlWyIhcmVmIl0pLEV0PUFycmF5LmlzQXJyYXkoVmUpLGF0PWV0LnMucjthdDw9ZXQuZS5yOysrYXQpe2Zvcih2YXIgYnQ9W10sanQ9ZXQucy5jO2p0PD1ldC5lLmM7KytqdCl7dmFyIGt0PXFpKHty''@;'; put 'put ''OmF0LGM6anR9KTtpZigoY3Q9RXQ/KFZlW2F0XXx8W10pW2p0XTpWZVtrdF0pJiZudWxsIT1jdC52KXtmb3IodmFyIE90PShjdC53fHwoX2woY3QpLGN0LncpfHwiIikuc2xpY2UoMCwxMCk7T3QubGVuZ3RoPDEwOylPdCs9IiAiO2J0LnB1c2goT3QrKDA9PT1qdD8iICI6IiIpKX1lbHNlIGJ0''@;'; put 'put ''LnB1c2goIiAgICAgICAgICAiKX1ZZS5wdXNoKGJ0LmpvaW4oIiIpKX1yZXR1cm4gWWUuam9pbigiXG4iKX19fSgpLEl2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhWbixCcixfcil7aWYoVm4pe21uKFZuLFZuLmx8fDApO2Zvcih2YXIgRm49X3IuRW51bXx8TGk7Vm4ubDxWbi5sZW5ndGg7KXt2''@;'; put 'put ''YXIganI9Vm4ucmVhZF9zaGlmdCgyKSxaaT1Gbltqcl18fEZuWzY1NTM1XSxiaT1Wbi5yZWFkX3NoaWZ0KDIpLF9hPVZuLmwrYmksc289WmkuZiYmWmkuZihWbixiaSxfcik7aWYoVm4ubD1fYSxCcihzbyxaaSxqcikpcmV0dXJufX19ZnVuY3Rpb24gayhWbixCcil7aWYoIVZuKXJldHVybiBW''@;'; put 'put ''bjt2YXIgX3I9QnJ8fHt9O251bGwhPW9lJiZudWxsPT1fci5kZW5zZSYmKF9yLmRlbnNlPW9lKTt2YXIgRm49X3IuZGVuc2U/W106e30sanI9IlNoZWV0MSIsWmk9MCxiaT17fSxfYT1banJdLHNvPVtdLGlhPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sTG89X3Iuc2hlZXRSb3dzfHwwO2lm''@;'; put 'put ''KDI9PVZuWzJdKV9yLkVudW09TGksUyhWbixmdW5jdGlvbihCaSxJcyxQbil7c3dpdGNoKFBuKXtjYXNlIDA6X3IudmVycz1CaSxCaT49NDA5NiYmKF9yLnFwcm89ITApO2JyZWFrO2Nhc2UgNjppYT1CaTticmVhaztjYXNlIDE1OmNhc2UgNTE6X3IucXByb3x8KEJpWzFdLnY9QmlbMV0udi5z''@;'; put 'put ''bGljZSgxKSk7Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTY6MTQ9PVBuJiYhKDExMiZ+QmlbMl0pJiYoMTUmQmlbMl0pPjEmJigxNSZCaVsyXSk8MTUmJihCaVsxXS56PV9yLmRhdGVORnx8QS5fdGFibGVbMTRdLF9yLmNlbGxEYXRlcyYmKEJpWzFdLnQ9ImQiLEJpWzFdLnY9bG4oQmlbMV0udikp''@;'; put 'put ''KTt2YXIgV289X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHxbXSlbQmlbMF0uY106Rm5bcWkoQmlbMF0pXTtpZihXbyl7V28udD1CaVsxXS50LFdvLnY9QmlbMV0udixudWxsIT1CaVsxXS56JiYoV28uej1CaVsxXS56KSxudWxsIT1CaVsxXS5mJiYoV28uZj1CaVsxXS5mKTticmVha31fci5kZW5z''@;'; put 'put ''ZT8oRm5bQmlbMF0ucl18fChGbltCaVswXS5yXT1bXSksRm5bQmlbMF0ucl1bQmlbMF0uY109QmlbMV0pOkZuW3FpKEJpWzBdKV09QmlbMV19fSxfcik7ZWxzZXtpZigyNiE9Vm5bMl0mJjE0IT1WblsyXSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBMT1RVUyBCT0YgIitWblsyXSk7''@;'; put 'put ''X3IuRW51bT1rciwxND09Vm5bMl0mJihfci5xcHJvPSEwLFZuLmw9MCksUyhWbixmdW5jdGlvbihCaSxJcyxQbil7c3dpdGNoKFBuKXtjYXNlIDIyOkJpWzFdLnY9QmlbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihCaVsz''@;'; put 'put ''XT5aaSYmKEZuWyIhcmVmIl09cmEoaWEpLGJpW2pyXT1GbixGbj1fci5kZW5zZT9bXTp7fSxpYT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LF9hLnB1c2goanI9IlNoZWV0IisoKFppPUJpWzNdKSsxKSkpLExvPjAmJkJpWzBdLnI+PUxvKWJyZWFrO19yLmRlbnNlPyhGbltCaVswXS5yXXx8''@;'; put 'put ''KEZuW0JpWzBdLnJdPVtdKSxGbltCaVswXS5yXVtCaVswXS5jXT1CaVsxXSk6Rm5bcWkoQmlbMF0pXT1CaVsxXSxpYS5lLmM8QmlbMF0uYyYmKGlhLmUuYz1CaVswXS5jKSxpYS5lLnI8QmlbMF0uciYmKGlhLmUucj1CaVswXS5yKTticmVhaztjYXNlIDI3OkJpWzE0ZTNdJiYoc29bQmlbMTRl''@;'; put 'put ''M11bMF1dPUJpWzE0ZTNdWzFdKX19LF9yKX1pZihGblsiIXJlZiJdPXJhKGlhKSxiaVtqcl09Rm4sIXNvLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpfYSxTaGVldHM6Yml9O2Zvcih2YXIgT2E9e30saG89W10sSmE9MDtKYTxzby5sZW5ndGg7KytKYSliaVtfYVtKYV1dJiYoaG8ucHVzaChz''@;'; put 'put ''b1tKYV0pLE9hW3NvW0phXV09YmlbX2FbSmFdXSk7cmV0dXJue1NoZWV0TmFtZXM6aG8sU2hlZXRzOk9hfX1mdW5jdGlvbiBQZShWbixCcixfcil7dmFyIEZuPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIF9yLnFwcm8mJjIwNzY4IT1fci52ZXJzPyhGblswXS5jPVZuLnJlYWRf''@;'; put 'put ''c2hpZnQoMSksVm4ubCsrLEZuWzBdLnI9Vm4ucmVhZF9zaGlmdCgyKSxWbi5sKz0yKTooRm5bMl09Vm4ucmVhZF9zaGlmdCgxKSxGblswXS5jPVZuLnJlYWRfc2hpZnQoMiksRm5bMF0ucj1Wbi5yZWFkX3NoaWZ0KDIpKSxGbn1mdW5jdGlvbiBWZShWbixCcixfcil7dmFyIEZuPVZuLmwrQnIs''@;'; put 'put ''anI9UGUoVm4sMCxfcik7aWYoanJbMV0udD0icyIsMjA3Njg9PV9yLnZlcnMpe1ZuLmwrKzt2YXIgWmk9Vm4ucmVhZF9zaGlmdCgxKTtyZXR1cm4ganJbMV0udj1Wbi5yZWFkX3NoaWZ0KFppLCJ1dGY4IiksanJ9cmV0dXJuIF9yLnFwcm8mJlZuLmwrKyxqclsxXS52PVZuLnJlYWRfc2hpZnQo''@;'; put 'put ''Rm4tVm4ubCwiY3N0ciIpLGpyfWZ1bmN0aW9uIFllKFZuLEJyLF9yKXt2YXIgRm49eW4oNytfci5sZW5ndGgpO0ZuLndyaXRlX3NoaWZ0KDEsMjU1KSxGbi53cml0ZV9zaGlmdCgyLEJyKSxGbi53cml0ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIGpyPTA7anI8''@;'; put 'put ''Rm4ubGVuZ3RoOysranIpe3ZhciBaaT1fci5jaGFyQ29kZUF0KGpyKTtGbi53cml0ZV9zaGlmdCgxLFppPj0xMjg/OTU6WmkpfXJldHVybiBGbi53cml0ZV9zaGlmdCgxLDApLEZufWZ1bmN0aW9uIGN0KFZuLEJyLF9yKXt2YXIgRm49eW4oNyk7cmV0dXJuIEZuLndyaXRlX3NoaWZ0KDEsMjU1''@;'; put 'put ''KSxGbi53cml0ZV9zaGlmdCgyLEJyKSxGbi53cml0ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCgyLF9yLCJpIiksRm59ZnVuY3Rpb24gYXQoVm4sQnIsX3Ipe3ZhciBGbj15bigxMyk7cmV0dXJuIEZuLndyaXRlX3NoaWZ0KDEsMjU1KSxGbi53cml0ZV9zaGlmdCgyLEJyKSxGbi53cml0''@;'; put 'put ''ZV9zaGlmdCgyLFZuKSxGbi53cml0ZV9zaGlmdCg4LF9yLCJmIiksRm59ZnVuY3Rpb24ganQoVm4sQnIsX3Ipe3ZhciBGbj0zMjc2OCZCcjtyZXR1cm4gQnI9KEZuP1ZuOjApKygoQnImPS0zMjc2OSk+PTgxOTI/QnItMTYzODQ6QnIpLChGbj8iIjoiJCIpKyhfcj9UYShCcik6amkoQnIpKX12''@;'; put 'put ''YXIgT3Q9ezUxOlsiRkFMU0UiLDBdLDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRBIiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2OV0sMTExOlsiVCIsMV19LEt0PVsiIiwiIiwiIiwiIiwiIiwiIiwi''@;'; put 'put ''IiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gcnIoVm4pe3ZhciBCcj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBCclswXS5yPVZuLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksQnJbM109Vm5bVm4ubCsrXSxCclswXS5jPVZuW1ZuLmwrK10sQnJ9ZnVuY3Rpb24gbHIoVm4sQnIsX3IsRm4pe3ZhciBqcj15big2K0ZuLmxlbmd0aCk7anIud3JpdGVfc2hpZnQoMixWbiksanIud3JpdGVfc2hpZnQoMSxfciksanIud3JpdGVfc2hpZnQoMSxCciksanIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBaaT0wO1ppPEZuLmxlbmd0aDsrK1ppKXt2YXIgYmk9Rm4uY2hhckNvZGVBdChaaSk7anIud3JpdGVfc2hpZnQoMSxiaT49MTI4Pzk1OmJpKX1yZXR1cm4ganIud3JpdGVfc2hpZnQoMSwwKSxqcn1mdW5jdGlvbiBCbihWbixCcil7dmFyIF9yPXJyKFZu''@;'; put 'put ''KSxGbj1Wbi5yZWFkX3NoaWZ0KDQpLGpyPVZuLnJlYWRfc2hpZnQoNCksWmk9Vm4ucmVhZF9zaGlmdCgyKTtpZig2NTUzNT09WmkpcmV0dXJuIDA9PT1GbiYmMzIyMTIyNTQ3Mj09PWpyPyhfclsxXS50PSJlIixfclsxXS52PTE1KTowPT09Rm4mJjM0ODk2NjA5Mjg9PT1qcj8oX3JbMV0udD0i''@;'; put 'put ''ZSIsX3JbMV0udj00Mik6X3JbMV0udj0wLF9yO3ZhciBiaT0zMjc2OCZaaTtyZXR1cm4gWmk9KDMyNzY3JlppKS0xNjQ0NixfclsxXS52PSgxLTIqYmkpKihqcipNYXRoLnBvdygyLFppKzMyKStGbipNYXRoLnBvdygyLFppKSksX3J9ZnVuY3Rpb24gZnIoVm4sQnIsX3IsRm4pe3ZhciBqcj15''@;'; put 'put ''bigxNCk7aWYoanIud3JpdGVfc2hpZnQoMixWbiksanIud3JpdGVfc2hpZnQoMSxfciksanIud3JpdGVfc2hpZnQoMSxCciksMD09Rm4pcmV0dXJuIGpyLndyaXRlX3NoaWZ0KDQsMCksanIud3JpdGVfc2hpZnQoNCwwKSxqci53cml0ZV9zaGlmdCgyLDY1NTM1KSxqcjt2YXIgWmk9MCxiaT0w''@;'; put 'put ''LHNvPTA7cmV0dXJuIEZuPDAmJihaaT0xLEZuPS1GbiksYmk9MHxNYXRoLmxvZzIoRm4pLDIxNDc0ODM2NDgmKHNvPShGbi89TWF0aC5wb3coMixiaS0zMSkpPj4+MCl8fCgrK2JpLHNvPShGbi89Mik+Pj4wKSxGbi09c28sc298PTIxNDc0ODM2NDgsc28+Pj49MCxGbio9TWF0aC5wb3coMiwz''@;'; put 'put ''MiksanIud3JpdGVfc2hpZnQoNCxGbj4+PjApLGpyLndyaXRlX3NoaWZ0KDQsc28pLGpyLndyaXRlX3NoaWZ0KDIsYmkrPTE2MzgzKyhaaT8zMjc2ODowKSksanJ9ZnVuY3Rpb24gTWkoVm4sQnIpe3ZhciBfcj1ycihWbiksRm49Vm4ucmVhZF9zaGlmdCg4LCJmIik7cmV0dXJuIF9yWzFdLnY9''@;'; put 'put ''Rm4sX3J9ZnVuY3Rpb24gY2EoVm4sQnIpe3ZhciBfcj15big1K1ZuLmxlbmd0aCk7X3Iud3JpdGVfc2hpZnQoMiwxNGUzKSxfci53cml0ZV9zaGlmdCgyLEJyKTtmb3IodmFyIEZuPTA7Rm48Vm4ubGVuZ3RoOysrRm4pe3ZhciBqcj1Wbi5jaGFyQ29kZUF0KEZuKTtfcltfci5sKytdPWpyPjEy''@;'; put 'put ''Nz85NTpqcn1yZXR1cm4gX3JbX3IubCsrXT0wLF9yfXZhciBMaT17MDp7bjoiQk9GIixmOkVjfSwxOntuOiJFT0YifSwyOntuOiJDQUxDTU9ERSJ9LDM6e246IkNBTENPUkRFUiJ9LDQ6e246IlNQTElUIn0sNTp7bjoiU1lOQyJ9LDY6e246IlJBTkdFIixmOmZ1bmN0aW9uIHBlKFZuKXt2YXIg''@;'; put 'put ''QnI9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gQnIucy5jPVZuLnJlYWRfc2hpZnQoMiksQnIucy5yPVZuLnJlYWRfc2hpZnQoMiksQnIuZS5jPVZuLnJlYWRfc2hpZnQoMiksQnIuZS5yPVZuLnJlYWRfc2hpZnQoMiksNjU1MzU9PUJyLnMuYyYmKEJyLnMuYz1Cci5lLmM9QnIu''@;'; put 'put ''cy5yPUJyLmUucj0wKSxCcn19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDExOntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24gZXQoVm4sQnIsX3Ipe3ZhciBGbj1QZShWbiwwLF9y''@;'; put 'put ''KTtyZXR1cm4gRm5bMV0udj1Wbi5yZWFkX3NoaWZ0KDIsImkiKSxGbn19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24gRXQoVm4sQnIsX3Ipe3ZhciBGbj1QZShWbiwwLF9yKTtyZXR1cm4gRm5bMV0udj1Wbi5yZWFkX3NoaWZ0KDgsImYiKSxGbn19LDE1OntuOiJMQUJFTCIsZjpWZX0sMTY6''@;'; put 'put ''e246IkZPUk1VTEEiLGY6ZnVuY3Rpb24gYnQoVm4sQnIsX3Ipe3ZhciBGbj1Wbi5sK0JyLGpyPVBlKFZuLDAsX3IpO2lmKGpyWzFdLnY9Vm4ucmVhZF9zaGlmdCg4LCJmIiksX3IucXBybylWbi5sPUZuO2Vsc2V7dmFyIFppPVZuLnJlYWRfc2hpZnQoMik7KGZ1bmN0aW9uIFRuKFZuLEJyKXtt''@;'; put 'put ''bihWbiwwKTtmb3IodmFyIF9yPVtdLEZuPTAsanI9IiIsWmk9IiI7Vm4ubDxWbi5sZW5ndGg7KXt2YXIgYmk9Vm5bVm4ubCsrXTtzd2l0Y2goYmkpe2Nhc2UgMDpfci5wdXNoKFZuLnJlYWRfc2hpZnQoOCwiZiIpKTticmVhaztjYXNlIDE6Wmk9anQoQnJbMF0uYyxWbi5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LCEwKSxqcj1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpLF9yLnB1c2goWmkranIpO2JyZWFrO2Nhc2UgMjp2YXIgX2E9anQoQnJbMF0uYyxWbi5yZWFkX3NoaWZ0KDIpLCEwKSxzbz1qdChCclswXS5yLFZuLnJlYWRfc2hpZnQoMiksITEpO1ppPWp0KEJyWzBdLmMsVm4ucmVhZF9z''@;'; put 'put ''aGlmdCgyKSwhMCksanI9anQoQnJbMF0ucixWbi5yZWFkX3NoaWZ0KDIpLCExKSxfci5wdXNoKF9hK3NvKyI6IitaaStqcik7YnJlYWs7Y2FzZSAzOmlmKFZuLmw8Vm4ubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBwcmVtYXR1cmUgZm9ybXVsYSBlbmQiKTticmVhaztj''@;'; put 'put ''YXNlIDQ6X3IucHVzaCgiKCIrX3IucG9wKCkrIikiKTticmVhaztjYXNlIDU6X3IucHVzaChWbi5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBpYT0iIjtiaT1WbltWbi5sKytdOylpYSs9U3RyaW5nLmZyb21DaGFyQ29kZShiaSk7X3IucHVzaCgnIicraWEucmVwbGFjZSgv''@;'; put 'put ''Ii9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSA4Ol9yLnB1c2goIi0iK19yLnBvcCgpKTticmVhaztjYXNlIDIzOl9yLnB1c2goIisiK19yLnBvcCgpKTticmVhaztjYXNlIDIyOl9yLnB1c2goIk5PVCgiK19yLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnZhciBMbz1fci5wb3Ao''@;'; put 'put ''KSxPYT1fci5wb3AoKTtfci5wdXNoKFsiQU5EIiwiT1IiXVtiaS0yMF0rIigiK09hKyIsIitMbysiKSIpO2JyZWFrO2RlZmF1bHQ6aWYoYmk8MzImJkt0W2JpXSlMbz1fci5wb3AoKSxPYT1fci5wb3AoKSxfci5wdXNoKE9hK0t0W2JpXStMbyk7ZWxzZXtpZighT3RbYmldKXJldHVybiBiaTw9''@;'; put 'put ''Nz9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitiaS50b1N0cmluZygxNikpOmJpPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitiaS50b1N0cmluZygxNikpOmJpPD0zMD9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitiaS50b1N0''@;'; put 'put ''cmluZygxNikpOmJpPD0xMTU/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5lcnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIitiaS50b1N0cmluZygxNikpO2lmKDY5PT0oRm49T3RbYmldWzFdKSYm''@;'; put 'put ''KEZuPVZuW1ZuLmwrK10pLEZuPl9yLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK2JpLnRvU3RyaW5nKDE2KSsiOnwiK19yLmpvaW4oInwiKSsifCIpO3ZhciBobz1fci5zbGljZSgtRm4pO19yLmxlbmd0aC09Rm4sX3IucHVzaChP''@;'; put 'put ''dFtiaV1bMF0rIigiK2hvLmpvaW4oIiwiKSsiKSIpfX19MT09X3IubGVuZ3RoP0JyWzFdLmY9IiIrX3JbMF06Y29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIHwiK19yLmpvaW4oInwiKSsifCIpfSkoVm4uc2xpY2UoVm4ubCxWbi5sK1ppKSxqciksVm4ubCs9Wml9cmV0dXJu''@;'; put 'put ''IGpyfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdFIn0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIi''@;'; put 'put ''fSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQifSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1B''@;'; put 'put ''VFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpWZX0sNTU6e246IlBBU1NXT1JEIn0sNTY6e246IkxPQ0tFRCJ9LDYwOntuOiJRVUVSWSJ9LDYxOntuOiJRVUVSWU5BTUUifSw2Mjp7bjoiUFJJTlQifSw2Mzp7bjoiUFJJTlROQU1FIn0s''@;'; put 'put ''NjQ6e246IkdSQVBIMiJ9LDY1OntuOiJHUkFQSE5BTUUifSw2Njp7bjoiWk9PTSJ9LDY3OntuOiJTWU1TUExJVCJ9LDY4OntuOiJOU1JPV1MifSw2OTp7bjoiTlNDT0xTIn0sNzA6e246IlJVTEVSIn0sNzE6e246Ik5OQU1FIn0sNzI6e246IkFDT01NIn0sNzM6e246IkFNQUNSTyJ9LDc0Ontu''@;'; put 'put ''OiJQQVJTRSJ9LDEwMjp7bjoiUFJBTkdFUz8/In0sMTAzOntuOiJSUkFOR0VTPz8ifSwxMDQ6e246IkZOQU1FPz8ifSwxMDU6e246Ik1SQU5HRVM/PyJ9LDY1NTM1OntuOiIifX0sa3I9ezA6e246IkJPRiJ9LDE6e246IkVPRiJ9LDI6e246IlBBU1NXT1JEIn0sMzp7bjoiQ0FMQ1NFVCJ9LDQ6''@;'; put 'put ''e246IldJTkRPV1NFVCJ9LDU6e246IlNIRUVUQ0VMTFBUUiJ9LDY6e246IlNIRUVUTEFZT1VUIn0sNzp7bjoiQ09MVU1OV0lEVEgifSw4OntuOiJISURERU5DT0xVTU4ifSw5OntuOiJVU0VSUkFOR0UifSwxMDp7bjoiU1lTVEVNUkFOR0UifSwxMTp7bjoiWkVST0ZPUkNFIn0sMTI6e246IlNP''@;'; put 'put ''UlRLRVlESVIifSwxMzp7bjoiRklMRVNFQUwifSwxNDp7bjoiREFUQUZJTExOVU1TIn0sMTU6e246IlBSSU5UTUFJTiJ9LDE2OntuOiJQUklOVFNUUklORyJ9LDE3OntuOiJHUkFQSE1BSU4ifSwxODp7bjoiR1JBUEhTVFJJTkcifSwxOTp7bjoiPz8ifSwyMDp7bjoiRVJSQ0VMTCJ9LDIxOntu''@;'; put 'put ''OiJOQUNFTEwifSwyMjp7bjoiTEFCRUwxNiIsZjpmdW5jdGlvbiBTbihWbixCcil7dmFyIF9yPXJyKFZuKTtyZXR1cm4gX3JbMV0udD0icyIsX3JbMV0udj1Wbi5yZWFkX3NoaWZ0KEJyLTQsImNzdHIiKSxfcn19LDIzOntuOiJOVU1CRVIxNyIsZjpCbn0sMjQ6e246Ik5VTUJFUjE4IixmOmZ1''@;'; put 'put ''bmN0aW9uIFhuKFZuLEJyKXt2YXIgX3I9cnIoVm4pO19yWzFdLnY9Vm4ucmVhZF9zaGlmdCgyKTt2YXIgRm49X3JbMV0udj4+MTtpZigxJl9yWzFdLnYpc3dpdGNoKDcmRm4pe2Nhc2UgMDpGbj01ZTMqKEZuPj4zKTticmVhaztjYXNlIDE6Rm49NTAwKihGbj4+Myk7YnJlYWs7Y2FzZSAyOkZu''@;'; put 'put ''PShGbj4+MykvMjA7YnJlYWs7Y2FzZSAzOkZuPShGbj4+MykvMjAwO2JyZWFrO2Nhc2UgNDpGbj0oRm4+PjMpLzJlMzticmVhaztjYXNlIDU6Rm49KEZuPj4zKS8yZTQ7YnJlYWs7Y2FzZSA2OkZuPShGbj4+MykvMTY7YnJlYWs7Y2FzZSA3OkZuPShGbj4+MykvNjR9cmV0dXJuIF9yWzFdLnY9''@;'; put 'put ''Rm4sX3J9fSwyNTp7bjoiRk9STVVMQTE5IixmOmZ1bmN0aW9uIHlyKFZuLEJyKXt2YXIgX3I9Qm4oVm4pO3JldHVybiBWbi5sKz1Cci0xNCxfcn19LDI2OntuOiJGT1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5jdGlvbiBuYShWbixCcil7Zm9yKHZhciBfcj17fSxGbj1Wbi5sK0Jy''@;'; put 'put ''O1ZuLmw8Rm47KXt2YXIganI9Vm4ucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qcil7Zm9yKF9yW2pyXT1bMCwiIl0sX3JbanJdWzBdPVZuLnJlYWRfc2hpZnQoMik7Vm5bVm4ubF07KV9yW2pyXVsxXSs9U3RyaW5nLmZyb21DaGFyQ29kZShWbltWbi5sXSksVm4ubCsrO1ZuLmwrK319cmV0dXJu''@;'; put 'put ''IF9yfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/In0sMzc6e246Ik5VTUJFUjI1Iixm''@;'; put 'put ''OmZ1bmN0aW9uIGVyKFZuLEJyKXt2YXIgX3I9cnIoVm4pLEZuPVZuLnJlYWRfc2hpZnQoNCk7cmV0dXJuIF9yWzFdLnY9Rm4+PjYsX3J9fSwzODp7bjoiPz8ifSwzOTp7bjoiTlVNQkVSMjciLGY6TWl9LDQwOntuOiJGT1JNVUxBMjgiLGY6ZnVuY3Rpb24gRmkoVm4sQnIpe3ZhciBfcj1NaShW''@;'; put 'put ''bik7cmV0dXJuIFZuLmwrPUJyLTEwLF9yfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7bjoi''@;'; put 'put ''Pz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6''@;'; put 'put ''e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0s''@;'; put 'put ''MjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/''@;'; put 'put ''PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7''@;'; put 'put ''bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246Ij8/In0sMjA0OTp7''@;'; put 'put ''bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIEsoVm4sQnIpe3ZhciBfcj1Ccnx8e307aWYo''@;'; put 'put ''K19yLmNvZGVwYWdlPj0wJiZCKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBGbj15aSgpLGpyPW9vKFZuWyIhcmVmIl0pLFppPUFycmF5LmlzQXJyYXkoVm4pLGJpPVtdO0dpKEZuLDAs''@;'; put 'put ''ZnVuY3Rpb24gc2UoVm4pe3ZhciBCcj15bigyKTtyZXR1cm4gQnIud3JpdGVfc2hpZnQoMixWbiksQnJ9KDEwMzApKSxHaShGbiw2LGZ1bmN0aW9uIGJlKFZuKXt2YXIgQnI9eW4oOCk7cmV0dXJuIEJyLndyaXRlX3NoaWZ0KDIsVm4ucy5jKSxCci53cml0ZV9zaGlmdCgyLFZuLnMuciksQnIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixWbi5lLmMpLEJyLndyaXRlX3NoaWZ0KDIsVm4uZS5yKSxCcn0oanIpKTtmb3IodmFyIF9hPWpyLnMucjtfYTw9anIuZS5yOysrX2EpZm9yKHZhciBzbz1qaShfYSksaWE9anIucy5jO2lhPD1qci5lLmM7KytpYSl7X2E9PT1qci5zLnImJihiaVtpYV09VGEoaWEpKTt2''@;'; put 'put ''YXIgT2E9Wmk/KFZuW19hXXx8W10pW2lhXTpWbltiaVtpYV0rc29dO09hJiYieiIhPU9hLnQmJigibiI9PU9hLnQ/KDB8T2Eudik9PU9hLnYmJk9hLnY+PS0zMjc2OCYmT2Eudjw9MzI3Njc/R2koRm4sMTMsY3QoX2EsaWEsT2EudikpOkdpKEZuLDE0LGF0KF9hLGlhLE9hLnYpKTpHaShGbiwx''@;'; put 'put ''NSxZZShfYSxpYSxfbChPYSkuc2xpY2UoMCwyMzkpKSkpfXJldHVybiBHaShGbiwxKSxGbi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gZWUoVm4sQnIpe3ZhciBfcj1Ccnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZCKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5cGUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBGbj15aSgpO0dpKEZuLDAsZnVuY3Rpb24gbWUoVm4pe3ZhciBCcj15bigyNik7QnIud3JpdGVfc2hpZnQoMiw0MDk2KSxCci53cml0ZV9zaGlmdCgyLDQpLEJyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBf''@;'; put 'put ''cj0wLEZuPTAsanI9MCxaaT0wO1ppPFZuLlNoZWV0TmFtZXMubGVuZ3RoOysrWmkpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1taaV1dO2lmKF9hJiZfYVsiIXJlZiJdKXsrK2pyO3ZhciBzbz1NcyhfYVsiIXJlZiJdKTtfcjxzby5lLnImJihfcj1zby5lLnIpLEZuPHNvLmUuYyYm''@;'; put 'put ''KEZuPXNvLmUuYyl9fXJldHVybiBCci53cml0ZV9zaGlmdCgyLF9yKSxCci53cml0ZV9zaGlmdCgxLGpyKSxCci53cml0ZV9zaGlmdCgxLEZuKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDIsMCksQnIud3JpdGVfc2hpZnQoMSwxKSxCci53cml0ZV9zaGlmdCgxLDIpLEJy''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksQnIud3JpdGVfc2hpZnQoNCwwKSxCcn0oVm4pKTtmb3IodmFyIGpyPTAsWmk9MDtqcjxWbi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKShWbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dfHx7fSlbIiFyZWYiXSYmR2koRm4sMjcsY2EoVm4uU2hlZXROYW1lc1tq''@;'; put 'put ''cl0sWmkrKykpO3ZhciBiaT0wO2Zvcihqcj0wO2pyPFZuLlNoZWV0TmFtZXMubGVuZ3RoOysranIpe3ZhciBfYT1Wbi5TaGVldHNbVm4uU2hlZXROYW1lc1tqcl1dO2lmKF9hJiZfYVsiIXJlZiJdKXtmb3IodmFyIHNvPW9vKF9hWyIhcmVmIl0pLGlhPUFycmF5LmlzQXJyYXkoX2EpLExvPVtd''@;'; put 'put ''LE9hPXNvLnMucjtPYTw9c28uZS5yOysrT2EpZm9yKHZhciBobz1qaShPYSksSmE9c28ucy5jO0phPD1zby5lLmM7KytKYSl7T2E9PT1zby5zLnImJihMb1tKYV09VGEoSmEpKTt2YXIgSXM9aWE/KF9hW09hXXx8W10pW0phXTpfYVtMb1tKYV0raG9dO0lzJiYieiIhPUlzLnQmJigibiI9PUlz''@;'; put 'put ''LnQ/R2koRm4sMjMsZnIoT2EsSmEsYmksSXMudikpOkdpKEZuLDIyLGxyKE9hLEphLGJpLF9sKElzKS5zbGljZSgwLDIzOSkpKSl9KytiaX19cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBPKFZuLEJyKXtzd2l0Y2goQnIudHlwZSl7Y2FzZSJiYXNlNjQi''@;'; put 'put ''OnJldHVybiBrKHkoX2UuZGVjb2RlKFZuKSksQnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gayh5KFZuKSxCcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBrKFZuLEJyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrQnIudHlwZX19fSgpLHc1PWZ1bmN0aW9uKCl7dmFyIFM9RDAo''@;'; put 'put ''InQiKSxPPUQwKCJyUHIiKTtmdW5jdGlvbiBrKHNlKXt2YXIgbWU9c2UubWF0Y2goUyk7aWYoIW1lKXJldHVybnt0OiJzIix2OiIifTt2YXIgcGU9e3Q6InMiLHY6UXIobWVbMV0pfSxiZT1zZS5tYXRjaChPKTtyZXR1cm4gYmUmJihwZS5zPWZ1bmN0aW9uIG9rKFMpe3ZhciBPPXt9LGs9Uy5t''@;'; put 'put ''YXRjaChlbiksSz0wLGVlPSExO2lmKGspZm9yKDtLIT1rLmxlbmd0aDsrK0spe3ZhciBzZT12cihrW0tdKTtzd2l0Y2goc2VbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighc2UudmFsKWJyZWFrO2Nh''@;'; put 'put ''c2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpPLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXNlLnZhbClicmVhaztPLmNwPVBbcGFyc2VJbnQoc2UudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIXNlLnZhbCli''@;'; put 'put ''cmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpPLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpPLm5hbWU9c2UudmFsO2JyZWFrO2Nhc2UiPHN6IjpPLnN6PXNlLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFzZS52YWwp''@;'; put 'put ''YnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOk8uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFzZS52YWwpYnJlYWs7c3dpdGNoKHNlLnZhbCl7Y2FzZSJkb3VibGUiOk8udW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2Nv''@;'; put 'put ''dW50aW5nIjpPLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOk8udW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOk8udW5kZXJsaW5lfHwoTy51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PXNlLnZhbCli''@;'; put 'put ''cmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpPLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09c2UudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOk8uaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6c2UucmdiJiYo''@;'; put 'put ''Ty5jb2xvcj17cmdiOjg9PXNlLnJnYi5sZW5ndGg/c2UucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK3NlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpPLmZhbWlseT1zZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShzZS52YWx8fCJub25lIikmJihP''@;'; put 'put ''LnZhbGlnbj1zZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjplZT0hMDticmVhaztjYXNlIjwvZXh0PiI6ZWU9ITE7YnJlYWs7ZGVmYXVsdDpp''@;'; put 'put ''Zig0NyE9PXNlWzBdLmNoYXJDb2RlQXQoMSkmJiFlZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK3NlWzBdKX19cmV0dXJuIE99KGJlWzFdKSkscGV9dmFyIEs9LzwoPzpcdys6KT9yPi9nLGVlPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9uKG1l''@;'; put 'put ''KXtyZXR1cm4gbWUucmVwbGFjZShLLCIiKS5zcGxpdChlZSkubWFwKGspLmZpbHRlcihmdW5jdGlvbihwZSl7cmV0dXJuIHBlLnZ9KX19KCksd1Y9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LFZ1PWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIE89LyhcclxufFxuKS9nO2Z1bmN0aW9uIEsoZWUpe3ZhciBzZT1bW10sZWUudixbXV07cmV0dXJuIGVlLnY/KGVlLnMmJmZ1bmN0aW9uIGsoZWUsc2UsbWUpe3ZhciBwZT1bXTtlZS51bmRlcmxpbmUmJnBlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLGVlLnVu''@;'; put 'put ''ZGVybGluZT4xJiZwZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK3dWW2VlLnVuZGVybGluZV0rIjsiKSxlZS5zeiYmcGUucHVzaCgiZm9udC1zaXplOiIrZWUuc3orInB0OyIpLGVlLm91dGxpbmUmJnBlLnB1c2goInRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLGVlLnNoYWRvdyYmcGUu''@;'; put 'put ''cHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IiksZWUuY29sb3ImJmVlLmNvbG9yLnJnYiYmcGUucHVzaCgiY29sb3I6ICMiK1AwKGVlLmNvbG9yLnJnYikrIjsiKSxzZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytwZS5qb2luKCIiKSsnIj4nKSxlZS5ib2xkJiYoc2UucHVzaCgiPGI+IiksbWUucHVz''@;'; put 'put ''aCgiPC9iPiIpKSxlZS5pdGFsaWMmJihzZS5wdXNoKCI8aT4iKSxtZS5wdXNoKCI8L2k+IikpLGVlLnN0cmlrZSYmKHNlLnB1c2goIjxzPiIpLG1lLnB1c2goIjwvcz4iKSk7dmFyIGJlPWVlLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09YmV8fCJzdXBlciI9PWJlP2JlPSJzdXAiOiJzdWJz''@;'; put 'put ''Y3JpcHQiPT1iZSYmKGJlPSJzdWIiKSwiIiE9YmUmJihzZS5wdXNoKCI8IitiZSsiPiIpLG1lLnB1c2goIjwvIitiZSsiPiIpKSxtZS5wdXNoKCI8L3NwYW4+Iil9KGVlLnMsc2VbMF0sc2VbMl0pLHNlWzBdLmpvaW4oIiIpK3NlWzFdLnJlcGxhY2UoTywiPGJyLz4iKStzZVsyXS5qb2luKCIi''@;'; put 'put ''KSk6IiJ9cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UubWFwKEspLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBRcyhTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uIEE0KFMpe3ZhciBPPSIiLGs9W107cmV0dXJuIFMucyYmKFMucy5ib2xkJiZrLnB1c2goIjxi''@;'; put 'put ''Lz4iKSxTLnMuaXRhbGljJiZrLnB1c2goIjxpLz4iKSxTLnMuc3RyaWtlJiZrLnB1c2goIjxzdHJpa2UvPiIpLFMucy51bmRlcmxpbmUmJmsucHVzaCgnPHUgdmFsPSInKyhBNVtTLnMudW5kZXJsaW5lXXx8InNpbmdsZSIpKyciLz4nKSxTLnMuY29sb3ImJmsucHVzaChnZChTLnMuY29sb3Ip''@;'; put 'put ''KSxTLnMuc3omJmsucHVzaCgnPHN6IHZhbD0iJytTLnMuc3orJyIvPicpLFMucy5uYW1lJiZrLnB1c2goJzxyRm9udCB2YWw9IicrUy5zLm5hbWUrJyIvPicpLCgic3VwZXIiPT1TLnMudmFsaWdufHwic3ViIj09Uy5zLnZhbGlnbikmJmsucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy5zLnZh''@;'; put 'put ''bGlnbisnc2NyaXB0Ii8+JykpLGsubGVuZ3RoJiYoTys9IjxyUHI+IitrLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoTys9UHIoInQiLExyKFMudiksbnVsbCkpKyI8L3I+In0oayl9KS5qb2luKCIiKX12YXIgQ1Y9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2cs''@;'; put 'put ''U1Y9LzwoPzpcdys6KT9yXGJbXj5dKj4vLE1WPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gdUMoUyxPKXt2YXIgaz0hT3x8Ty5jZWxsSFRNTCxLPXt9O3JldHVybiBTPyhTLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oSy50''@;'; put 'put ''PVFyKGdvKFMuc2xpY2UoUy5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksSy5yPWdvKFMpLGsmJihLLmg9bGEoSy50KSkpOlMubWF0Y2goU1YpJiYoSy5yPWdvKFMpLEsudD1RcihnbygoUy5yZXBsYWNlKE1WLCIiKS5tYXRjaChDVil8fFtdKS5qb2lu''@;'; put 'put ''KCIiKS5yZXBsYWNlKGVuLCIiKSkpLEsuUj13NShLLnIpLGsmJihLLmg9VnUoSy5SKSkpLEspOnt0OiIifX12YXIgc2s9LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLGxrPS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2cscTY9LzxcLyg/Olx3Kzop''@;'; put 'put ''Pyg/OnNpfHNzdEl0ZW0pPi87S2EuU1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiO3ZhciB4Vj0vXlxzfFxzJHxbXHRcblxyXS87ZnVuY3Rpb24gUnYoUyxPKXtpZighTy5ib29rU1NU''@;'; put 'put ''KXJldHVybiIiO3ZhciBrPVtJaV07a1trLmxlbmd0aF09UHIoInNzdCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSxjb3VudDpTLkNvdW50LHVuaXF1ZUNvdW50OlMuVW5pcXVlfSk7Zm9yKHZhciBLPTA7SyE9Uy5sZW5ndGg7KytLKWlmKG51bGwhPVNbS10pe3ZhciBlZT1TW0tdLHNlPSI8c2k+''@;'; put 'put ''IjtlZS5yP3NlKz1lZS5yOihzZSs9Ijx0IixlZS50fHwoZWUudD0iIiksZWUudC5tYXRjaCh4VikmJihzZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLHNlKz0iPiIrTHIoZWUudCkrIjwvdD4iKSxrW2subGVuZ3RoXT1zZSs9Ijwvc2k+In1yZXR1cm4gay5sZW5ndGg+MiYmKGtbay5sZW5n''@;'; put 'put ''dGhdPSI8L3NzdD4iLGtbMV09a1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX12YXIgY2s9ZnVuY3Rpb24gSTMoUyxPLGspe3ZhciBLPTEzKzQqUy50Lmxlbmd0aCxlZT1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9dzUoUy5yKSksZWUmJihLKz00KzQqUy5SLmxlbmd0''@;'; put 'put ''aCk7dmFyIHNlPSExO2lmKG51bGw9PWsmJihzZT0hMCxrPXluKEspKSxrLndyaXRlX3NoaWZ0KDEsZWU/MTowKSxGYyhTLnQsayksZWUpe2sud3JpdGVfc2hpZnQoNCxTLlIubGVuZ3RoKTtmb3IodmFyIG1lPTAscGU9MDtwZTxTLlIubGVuZ3RoOysrcGUpe3ZhciBiZT1TLlJbcGVdO2sud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixtZSksbWUrPShiZS52fHwiIikubGVuZ3RoO3ZhciBQZT1iZS5zP2wwKE8uY2VsbFhmcyxPLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6YmUuc30sTyk6MDtrLndyaXRlX3NoaWZ0KDIsTy5jZWxsWGZzW1BlXS5mb250SWQpfX1yZXR1cm4gc2U/ay5zbGljZSgwLGsubCk6''@;'; put 'put ''a307ZnVuY3Rpb24gdWsoUyxPKXt2YXIgaz15aSgpO0ZyKGssIkJydEJlZ2luU3N0IixmdW5jdGlvbiBkQyhTLE8pe3JldHVybiBPfHwoTz15big4KSksTy53cml0ZV9zaGlmdCg0LFMuQ291bnQpLE8ud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSksT30oUykpO2Zvcih2YXIgSz0wO0s8Uy5sZW5n''@;'; put 'put ''dGg7KytLKUZyKGssIkJydFNTVEl0ZW0iLGNrKFNbS10sTykpO3JldHVybiBGcihrLCJCcnRFbmRTc3QiKSxrLmVuZCgpfWZ1bmN0aW9uIGs0KFMpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoSCxTKTtmb3IodmFyIE89W10saz1TLnNwbGl0KCIi''@;'; put 'put ''KSxLPTA7SzxrLmxlbmd0aDsrK0spT1tLXT1rW0tdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIE99ZnVuY3Rpb24gUDEoUyxPKXt2YXIgaz17fTtyZXR1cm4gay5NYWpvcj1TLnJlYWRfc2hpZnQoMiksay5NaW5vcj1TLnJlYWRfc2hpZnQoMiksTz49NCYmKFMubCs9Ty00KSxrfWZ1bmN0aW9uIGhD''@;'; put 'put ''KFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoNCksaz1TLmwrTy00LEs9e30sZWU9Uy5yZWFkX3NoaWZ0KDQpLHNlPVtdO2VlLS0gPjA7KXNlLnB1c2goe3Q6Uy5yZWFkX3NoaWZ0KDQpLHY6Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKEsubmFtZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIp''@;'; put 'put ''LEsuY29tcHM9c2UsUy5sIT1rKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK1MubCsiICE9ICIrayk7cmV0dXJuIEt9ZnVuY3Rpb24gSVYoUyxPKXt2YXIgaz1TLmwrTyxLPXt9O0suRmxhZ3M9NjMmUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxLLkFsZ0lEPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTt2YXIgZWU9ITE7c3dpdGNoKEsuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OmVlPTM2PT1LLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6ZWU9ND09KDUyJksuRmxhZ3MpO2JyZWFrO2Nhc2UgMDplZT0xNj09Sy5GbGFnc3x8ND09Sy5GbGFnc3x8MzY9''@;'; put 'put ''PUsuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrSy5BbGdJRH1pZighZWUpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIEsuQWxnSURIYXNoPVMucmVhZF9zaGlmdCg0''@;'; put 'put ''KSxLLktleVNpemU9Uy5yZWFkX3NoaWZ0KDQpLEsuUHJvdmlkZXJUeXBlPVMucmVhZF9zaGlmdCg0KSxTLmwrPTgsSy5DU1BOYW1lPVMucmVhZF9zaGlmdChrLVMubD4+MSwidXRmMTZsZSIpLFMubD1rLEt9ZnVuY3Rpb24gUHYoUyxPKXt2YXIgaz17fSxLPVMubCtPO3JldHVybiBTLmwrPTQs''@;'; put 'put ''ay5TYWx0PVMuc2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixrLlZlcmlmaWVyPVMuc2xpY2UoUy5sLFMubCsxNiksUy5sKz0xNixTLnJlYWRfc2hpZnQoNCksay5WZXJpZmllckhhc2g9Uy5zbGljZShTLmwsSyksUy5sPUssa31mdW5jdGlvbiBSVihTKXtpZigzNiE9KDYzJlMucmVhZF9zaGlm''@;'; put 'put ''dCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciBrPVMucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOklWKFMsayksdjpQdihTLFMubGVuZ3RoLVMubCl9fWZ1bmN0aW9uIEo2KCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3Jk''@;'; put 'put ''LXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIGZDKFMpe3ZhciBPPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtT''@;'; put 'put ''LmwrPTQ7dmFyIGs9Uy5yZWFkX3NoaWZ0KFMubGVuZ3RoLVMubCwidXRmOCIpLEs9e307cmV0dXJuIGsucmVwbGFjZShlbixmdW5jdGlvbihzZSl7dmFyIG1lPXZyKHNlKTtzd2l0Y2goV24obWVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4i''@;'; put 'put ''OmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOk8uZm9yRWFjaChmdW5jdGlvbihwZSl7S1twZV09bWVbcGVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6Sy5lbmNyeXB0ZWRIbWFjS2V5PW1lLmVuY3J5cHRlZEht''@;'; put 'put ''YWNLZXksSy5lbmNyeXB0ZWRIbWFjVmFsdWU9bWUuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpLLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpLLnVyaT1tZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlw''@;'; put 'put ''dGVkS2V5IjpLLmVuY3MucHVzaChtZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBtZVswXX19KSxLfWZ1bmN0aW9uIEh2KFMpe3ZhciBrLHNlLE89MCxLPWs0KFMpLGVlPUsubGVuZ3RoKzE7Zm9yKChrPXooZWUpKVswXT1LLmxlbmd0aCxzZT0xO3NlIT1lZTsrK3NlKWtbc2VdPUtbc2UtMV07Zm9y''@;'; put 'put ''KHNlPWVlLTE7c2U+PTA7LS1zZSlPPSgoMTYzODQmTz8xOjApfE88PDEmMzI3NjcpXmtbc2VdO3JldHVybiA1MjgxMV5PfXZhciBwQz1mdW5jdGlvbigpe3ZhciBTPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLE89WzU3ODQwLDc0MzksNTIz''@;'; put 'put ''ODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLGs9WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYz''@;'; put 'put ''LDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5''@;'; put 'put ''MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1Mzks''@;'; put 'put ''MzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAz''@;'; put 'put ''Miw0NjU3LDkzMTQsMTg2MjhdLGVlPWZ1bmN0aW9uKG1lLHBlKXtyZXR1cm4gZnVuY3Rpb24obWUpe3JldHVybiAyNTUmKG1lPj4xfG1lPDw3KX0obWVecGUpfTtyZXR1cm4gZnVuY3Rpb24ocGUpe2Zvcih2YXIgYmU9azQocGUpLFBlPWZ1bmN0aW9uKG1lKXtmb3IodmFyIHBlPU9bbWUubGVu''@;'; put 'put ''Z3RoLTFdLGJlPTEwNCxQZT1tZS5sZW5ndGgtMTtQZT49MDstLVBlKWZvcih2YXIgVmU9bWVbUGVdLFllPTA7NyE9WWU7KytZZSk2NCZWZSYmKHBlXj1rW2JlXSksVmUqPTIsLS1iZTtyZXR1cm4gcGV9KGJlKSxWZT1iZS5sZW5ndGgsWWU9eigxNiksZXQ9MDsxNiE9ZXQ7KytldClZZVtldF09''@;'; put 'put ''MDt2YXIgYXQ7Zm9yKCEoMSZ+VmUpJiYoWWVbVmVdPWVlKFNbMF0sUGU+PjgpLFllWy0tVmVdPWVlKGJlW2JlLmxlbmd0aC0xXSwyNTUmUGUpKTtWZT4wOylZZVstLVZlXT1lZShiZVtWZV0sUGU+PjgpLFllWy0tVmVdPWVlKGJlW1ZlXSwyNTUmUGUpO2ZvcihWZT0xNSxhdD0xNS1iZS5sZW5n''@;'; put 'put ''dGg7YXQ+MDspWWVbVmVdPWVlKFNbYXRdLFBlPj44KSwtLWF0LFllWy0tVmVdPWVlKGJlW1ZlXSwyNTUmUGUpLC0tVmUsLS1hdDtyZXR1cm4gWWV9fSgpO3ZhciBWdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoZWUsc2Upe3N3aXRjaChzZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIE8oX2Uu''@;'; put 'put ''ZGVjb2RlKGVlKSxzZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBPKGVlLHNlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIE8oZWUudG9TdHJpbmcoImJpbmFyeSIpLHNlKTtjYXNlImFycmF5IjpyZXR1cm4gTyh1dChlZSksc2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitzZS50''@;'; put 'put ''eXBlKX1mdW5jdGlvbiBPKGVlLHNlKXt2YXIgcGU9KHNlfHx7fSkuZGVuc2U/W106e307aWYoIWVlLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiBwZVsiIXJlZiJdPXJhKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHBlfXJl''@;'; put 'put ''dHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBrKGVlLHNlKXtyZXR1cm4gdGgoUyhlZSxzZSksc2UpfSx0b19zaGVldDpTLGZyb21fc2hlZXQ6ZnVuY3Rpb24gSyhlZSl7Zm9yKHZhciBwZSxzZT1bIntcXHJ0ZjFcXGFuc2kiXSxtZT1vbyhlZVsiIXJlZiJdKSxiZT1BcnJheS5pc0FycmF5KGVl''@;'; put 'put ''KSxQZT1tZS5zLnI7UGU8PW1lLmUucjsrK1BlKXtzZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBWZT1tZS5zLmM7VmU8PW1lLmUuYzsrK1ZlKXNlLnB1c2goIlxcY2VsbHgiKyhWZSsxKSk7Zm9yKHNlLnB1c2goIlxccGFyZFxcaW50YmwiKSxWZT1tZS5zLmM7VmU8PW1l''@;'; put 'put ''LmUuYzsrK1ZlKXt2YXIgWWU9cWkoe3I6UGUsYzpWZX0pOyhwZT1iZT8oZWVbUGVdfHxbXSlbVmVdOmVlW1llXSkmJihudWxsIT1wZS52fHxwZS5mJiYhcGUuRikmJihzZS5wdXNoKCIgIisocGUud3x8KF9sKHBlKSxwZS53KSkpLHNlLnB1c2goIlxcY2VsbCIpKX1zZS5wdXNoKCJcXHBhcmRc''@;'; put 'put ''XGludGJsXFxyb3ciKX1yZXR1cm4gc2Uuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gQzUoUyl7dmFyIE89Uy5zbGljZSgiIyI9PT1TWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoTy5zbGljZSgwLDIpLDE2KSxwYXJzZUludChPLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50''@;'; put 'put ''KE8uc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIGhkKFMpe2Zvcih2YXIgTz0wLGs9MTszIT1POysrTylrPTI1NiprKyhTW09dPjI1NT8yNTU6U1tPXTwwPzA6U1tPXSk7cmV0dXJuIGsudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gb2goUyxPKXtpZihudWxs''@;'; put 'put ''PT1TKXJldHVybiBudWxsIT1PO2lmKG51bGw9PU8pcmV0dXJuITA7aWYoMT09Uy5hdXRvJiYxPT1PLmF1dG8pcmV0dXJuITE7aWYoISFTLmF1dG8hPSEhTy5hdXRvfHxudWxsPT1TLnRoZW1lIT0obnVsbD09Ty50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9Uy50aGVtZSlyZXR1cm4gUy50aGVt''@;'; put 'put ''ZSE9Ty50aGVtZXx8Uy50aW50IT1PLnRpbnQ7aWYobnVsbD09Uy5yZ2ImJm51bGw9PU8ucmdiKXJldHVybiExO3ZhciBrPVMucmdiOyJudW1iZXIiPT10eXBlb2YgayYmKGs9ay50b1N0cmluZygxNikpLGs9ay5zbGljZSgtNik7dmFyIEs9Ty5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBL''@;'; put 'put ''JiYoSz1LLnRvU3RyaW5nKDE2KSksSz1LLnNsaWNlKC02KSxrLnRvTG93ZXJDYXNlKCkhPUsudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBoayhTLE8pe3JldHVybiBudWxsPT1TP251bGwhPU86bnVsbD09Tz9udWxsIT1TOlMuc3R5bGUhPU8uc3R5bGV8fG9oKFMuY29sb3IsTy5jb2xvcil9ZnVu''@;'; put 'put ''Y3Rpb24gUzUoUyxPKXtpZigwPT09TylyZXR1cm4gUzt2YXIgaz1mdW5jdGlvbiBQVihTKXt2YXIgTz1TWzBdLzI1NSxrPVNbMV0vMjU1LEs9U1syXS8yNTUsZWU9TWF0aC5tYXgoTyxrLEspLHNlPU1hdGgubWluKE8sayxLKSxtZT1lZS1zZTtpZigwPT09bWUpcmV0dXJuWzAsMCxPXTt2YXIg''@;'; put 'put ''YmUscGU9MCxQZT1lZStzZTtzd2l0Y2goYmU9bWUvKFBlPjE/Mi1QZTpQZSksZWUpe2Nhc2UgTzpwZT0oKGstSykvbWUrNiklNjticmVhaztjYXNlIGs6cGU9KEstTykvbWUrMjticmVhaztjYXNlIEs6cGU9KE8taykvbWUrNH1yZXR1cm5bcGUvNixiZSxQZS8yXX0oQzUoUykpO3JldHVybiBr''@;'; put 'put ''WzJdPU88MD9rWzJdKigxK08pOjEtKDEta1syXSkqKDEtTyksaGQoZnVuY3Rpb24gZGsoUyl7dmFyIGJlLGs9U1sxXSxLPVNbMl0sZWU9MiprKihLPC41P0s6MS1LKSxzZT1LLWVlLzIsbWU9W3NlLHNlLHNlXSxwZT02KlNbMF07aWYoMCE9PWspc3dpdGNoKDB8cGUpe2Nhc2UgMDpjYXNlIDY6''@;'; put 'put ''YmU9ZWUqcGUsbWVbMF0rPWVlLG1lWzFdKz1iZTticmVhaztjYXNlIDE6bWVbMF0rPWJlPWVlKigyLXBlKSxtZVsxXSs9ZWU7YnJlYWs7Y2FzZSAyOmJlPWVlKihwZS0yKSxtZVsxXSs9ZWUsbWVbMl0rPWJlO2JyZWFrO2Nhc2UgMzptZVsxXSs9YmU9ZWUqKDQtcGUpLG1lWzJdKz1lZTticmVh''@;'; put 'put ''aztjYXNlIDQ6YmU9ZWUqKHBlLTQpLG1lWzJdKz1lZSxtZVswXSs9YmU7YnJlYWs7Y2FzZSA1Om1lWzJdKz1iZT1lZSooNi1wZSksbWVbMF0rPWVlfWZvcih2YXIgUGU9MDszIT1QZTsrK1BlKW1lW1BlXT1NYXRoLnJvdW5kKDI1NSptZVtQZV0pO3JldHVybiBtZX0oaykpfXZhciBmaz02LFRj''@;'; put 'put ''PWZrO2Z1bmN0aW9uIE01KFMpe3JldHVybiBNYXRoLmZsb29yKChTK01hdGgucm91bmQoMTI4L1RjKS8yNTYpKlRjKX1mdW5jdGlvbiB4NShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUy01KS9UYyoxMDArLjUpLzEwMH1mdW5jdGlvbiBrZihTKXtyZXR1cm4gTWF0aC5yb3VuZCgoUypUYys1KS9U''@;'; put 'put ''YyoyNTYpLzI1Nn1mdW5jdGlvbiBRMChTKXtTLmJlc3RGaXQmJmRlbGV0ZSBTLmJlc3RGaXQsUy53aWR0aD8oUy53cHg9TTUoUy53aWR0aCksUy53Y2g9eDUoUy53cHgpLFMuTURXPVRjKTpTLndweD8oUy53Y2g9eDUoUy53cHgpLFMud2lkdGg9a2YoUy53Y2gpLFMuTURXPVRjKToibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFMud2NoJiYoUy53aWR0aD1rZihTLndjaCksUy53cHg9TTUoUy53aWR0aCksUy5NRFc9VGMpLFMuY3VzdG9tV2lkdGgmJmRlbGV0ZSBTLmN1c3RvbVdpZHRofXZhciBZcz05NixEZj1ZcztmdW5jdGlvbiBVMyhTKXtyZXR1cm4gNzIqUy9EZn1mdW5jdGlvbiBzaChTKXtyZXR1''@;'; put 'put ''cm4gUypEZi83Mn1mdW5jdGlvbiBJZihTKXtEZj1TPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W1NdfHxTfHxZcyx5Qz1UNVtTXX1mdW5jdGlvbiBqdihTKXtTLmhweD9TLmhwdD1VMyhTLmhweCk6Uy5ocHQmJihTLmhweD1zaChTLmhwdCkpfXZhciBt''@;'; put 'put ''Qz17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rv''@;'; put 'put ''d24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdo''@;'; put 'put ''dERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LHZDPUhlKG1DKSxRNj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4''@;'; put 'put ''LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gRTUoUyxPKXtpZihTLnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9''@;'; put 'put ''JC8pKXJldHVybiBwYXJzZUludChTLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoUTZbU10pcmV0dXJuIFE2W1NdO3ZhciBrPVMubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKGspcmV0dXJuKCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM107''@;'; put 'put ''aWYoaz1TLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShrWzRdJiZrWzRdLmxlbmd0aD4wJiYra1s0XXx8MCl8fCtrWzFdPjB8fCtrWzJdPjB8fCtrWzNdPjA/KCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM106Tz8t''@;'; put 'put ''MToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK1MpfXZhciBUNT17fTtmdW5jdGlvbiB6dihTKXtTPVN8fDk2O3ZhciBPPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdc''@;'; put 'put ''dTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIE8uQ2FsaWJyaVsxMV09NyxPLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1bU118fDgsTy5DYWxpYnJpWzEzXT0xMCxPLkNhbGlicmlbMTRdPTExLE8uQ2FsaWJyaVsxNl09MTIsTy5DYWxpYnJp''@;'; put 'put ''WzE4XT0xNCxPLkNhbGlicmlbMjBdPTE2LE8uXHU1YjhiXHU0ZjUzWzExXT04LE8uXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LE9bIlNwYXJrYXNzZSBSZyJdWzExXT03LE8uQXJpYWxbMTBdPTcsT1siQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxPfVQ1WzcyXT16dig3Miks''@;'; put 'put ''VDVbOTZdPXp2KDk2KSxUNVsxMjBdPXp2KDEyMCksVDVbMTQ0XT16digxNDQpO3ZhciB5Qz1UNVs5Nl07ZnVuY3Rpb24gYkMoUyl7cmV0dXJuKHlDW1MubmFtZXx8Uy5Gb250TmFtZV18fFtdKVtTLnN6fHxTLlNpemVdfWZ1bmN0aW9uIEk0KFMpe2lmKFMpe3ZhciBPPWJDKFMpO2lmKE8pcmV0''@;'; put 'put ''dXJuIFRjPU99cmV0dXJuIFRjPTZ9ZnVuY3Rpb24gX0MoUyxPLGspe3JldHVybiBoZChmdW5jdGlvbiBwayhTLE8sayl7cmV0dXJuW01hdGgucm91bmQoT1swXSprK1NbMF0qKDEtaykpLE1hdGgucm91bmQoT1sxXSprK1NbMV0qKDEtaykpLE1hdGgucm91bmQoT1syXSprK1NbMl0qKDEtaykp''@;'; put 'put ''XX0oQzUoIm51bWJlciI9PXR5cGVvZiBTLnJnYj8oIjAwMDAwIitTLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlMucmdiKSxDNSgibnVtYmVyIj09dHlwZW9mIE8ucmdiPygiMDAwMDAiK08udG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Ty5yZ2IpLGspKX1mdW5jdGlvbiBVdihTLE8sayl7aWYo''@;'; put 'put ''aylzd2l0Y2goK1Mpe2Nhc2UgNjQ6Uz02NTticmVhaztjYXNlIDY1OlM9NjR9dmFyIEs9TyYmT1srU118fHIwWytTXXx8SHdbK1MtMjAwXTtpZig4MT09K1MmJihLPXIwWzFdKSxLfHwoSz1yMFsxXSksIUspdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrUyk7cmV0dXJuIGhkKEsp''@;'; put 'put ''fWZ1bmN0aW9uIGdrKFMsTyxrKXt2YXIgSz17fTtyZXR1cm4gbnVsbCE9Uy5pbmRleGVkJiYoSy5pbmRleD1wYXJzZUludChTLmluZGV4ZWQsMTApLEsucmdiPVV2KEsuaW5kZXgsTy5JbmRleGVkKSksbnVsbCE9Uy50aGVtZSYmKEsudGhlbWU9cGFyc2VJbnQoUy50aGVtZSwxMCkpLG51bGwh''@;'; put 'put ''PVMudGludCYmKEsudGludD1wYXJzZUZsb2F0KFMudGludCkpLG51bGwhPVMucmdiJiYoSy5yZ2I9Uy5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1LLnRoZW1lJiYhSy5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKEsucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbSy50aGVtZV0ucmdiLEsu''@;'; put 'put ''dGludHx8MCksSy5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbSy50aGVtZV0ucmdiKSxLfWZ1bmN0aW9uIHdDKFMsTyxrLEspe08uQm9yZGVycz1bXTt2YXIgZWU9e30sc2U9e30sbWU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIGJl''@;'; put 'put ''PXZyKHBlKTtzd2l0Y2goV24oYmVbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNl''@;'; put 'put ''IjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6''@;'; put 'put ''Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2Nv''@;'; put 'put ''bG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6ZWU9e30sYmUuZGlhZ29uYWxVcCYmKGVlLmRpYWdvbmFsVXA9dGkoYmUuZGlhZ29uYWxVcCkpLGJlLmRpYWdv''@;'; put 'put ''bmFsRG93biYmKGVlLmRpYWdvbmFsRG93bj10aShiZS5kaWFnb25hbERvd24pKSxPLkJvcmRlcnMucHVzaChlZSk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOnNlPWVlLmxlZnQ9e30sYmUuc3R5bGUmJihzZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2Ui''@;'; put 'put ''PHJpZ2h0PiI6c2U9ZWUucmlnaHQ9e30sYmUuc3R5bGUmJihzZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpzZT1lZS50b3A9e30sYmUuc3R5bGUmJihzZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpzZT1l''@;'; put 'put ''ZS5ib3R0b209e30sYmUuc3R5bGUmJihzZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6ZWUuZGlhZ29uYWw9c2Usc2U9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjplZS5ob3Jpem9udGFsPXNlLHNlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOmVlLnZl''@;'; put 'put ''cnRpY2FsPXNlLHNlPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOnNlLmNvbG9yfHwoc2UuY29sb3I9e30pLGJlLmF1dG8mJihzZS5jb2xvci5hdXRvPXRpKGJlLmF1dG8pKSxudWxsIT1iZS5yZ2I/c2UuY29sb3IucmdiPWJlLnJnYi5zbGljZSgtNik6YmUuaW5kZXhlZD8o''@;'; put 'put ''c2UuY29sb3IuaW5kZXg9cGFyc2VJbnQoYmUuaW5kZXhlZCwxMCksc2UuY29sb3IucmdiPVV2KHNlLmNvbG9yLmluZGV4LE8uSW5kZXhlZCwhMSkpOmJlLnRoZW1lJiYoc2UuY29sb3IudGhlbWU9cGFyc2VJbnQoYmUudGhlbWUsMTApLGJlLnRpbnQmJihzZS5jb2xvci50aW50PXBhcnNlRmxv''@;'; put 'put ''YXQoYmUudGludCkpLGJlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihzZS5jb2xvci5yZ2I9UzUoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtzZS5jb2xvci50aGVtZV0ucmdiLHNlLmNvbG9yLnRpbnR8fDApKSksIWJlLmF1dG8mJm51bGw9''@;'; put 'put ''PWJlLnJnYiYmIWJlLmluZGV4ZWQmJmRlbGV0ZSBzZS5jb2xvcjticmVhaztjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjptZT0hMTticmVhaztkZWZhdWx0OmlmKEsmJksuV1RGJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitiZVswXSsiIGluIGJvcmRl''@;'; put 'put ''cnMiKX19KX1mdW5jdGlvbiBSNChTLE8pe3ZhciBrPVsiPCIrT107cmV0dXJuIFMmJlMuc3R5bGU/KGsucHVzaCgnIHN0eWxlPSInK1Muc3R5bGUrJyInKSxTLmNvbG9yPyhrLnB1c2goIj4iKSxrLnB1c2goZ2QoUy5jb2xvciwhMCkpLGsuam9pbigiIikrIjwvIitPKyI+Iik6ay5qb2luKCIi''@;'; put 'put ''KSsiLz4iKTprWzBdKyIvPiJ9ZnVuY3Rpb24gRlYoUyxPLGssSyl7Ty5GaWxscz1bXTt2YXIgZWU9e30sc2U9e30sbWU9ITEscGU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiZSl7dmFyIFBlPXZyKGJlKTtzd2l0Y2goV24oUGVbMF0pKXtjYXNlIjxmaWxscyI6''@;'; put 'put ''Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNh''@;'; put 'put ''c2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Ty5GaWxscy5wdXNoKGVlPXt9KTticmVhaztjYXNlIjxncmFkaWVudEZpbGw+IjplZS5zdG9wcz1bXTticmVh''@;'; put 'put ''aztjYXNlIjxncmFkaWVudEZpbGwiOmVlLnN0b3BzPVtdLFBlLmRlZ3JlZSYmKGVlLmFuZ2xlPStQZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOlBlLnBhdHRlcm5UeXBlJiYoZWUucGF0dGVyblR5cGU9UGUucGF0dGVyblR5cGUpO2JyZWFr''@;'; put 'put ''O2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKG1lKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIFZlPVduKFBlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1WZSYm''@;'; put 'put ''IWVlW1ZlXSYmKGVlW1ZlXT17fSk7dmFyIFllPW1lP3NlOmVlW1ZlXTtudWxsIT1QZS5pbmRleGVkJiYoWWUuaW5kZXg9cGFyc2VJbnQoUGUuaW5kZXhlZCwxMCksWWUucmdiPVV2KFllLmluZGV4LE8uSW5kZXhlZCkpLG51bGwhPVBlLnRoZW1lJiYoWWUudGhlbWU9cGFyc2VJbnQoUGUudGhl''@;'; put 'put ''bWUsMTApKSxudWxsIT1QZS50aW50JiYoWWUudGludD1wYXJzZUZsb2F0KFBlLnRpbnQpKSxudWxsIT1QZS5yZ2ImJihZZS5yZ2I9UGUucmdiLnNsaWNlKC02KSksbnVsbCE9UGUuYXV0byYmZGVsZXRlIGVlW1ZlXSxudWxsIT1ZZS50aGVtZSYmIVllLnJnYiYmay50aGVtZUVsZW1lbnRzJiYo''@;'; put 'put ''WWUucmdiPVM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbWWUudGhlbWVdLnJnYixZZS50aW50fHwwKSxLLldURiYmKFllLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOm1lPSEwLHNlPXt9O2JyZWFrO2Nhc2Ui''@;'; put 'put ''PHN0b3AiOm1lPSEwLHNlPXt9LG51bGwhPVBlLnBvc2l0aW9uJiYoc2Uudj1wYXJzZUZsb2F0KFBlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjptZT0hMSxlZS5zdG9wcy5wdXNoKHNlKTticmVhaztjYXNlIjxleHQiOnBlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpwZT0hMTticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKEsmJksuV1RGJiYhcGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitQZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24gSFYoUyxPLGssSyl7Ty5Gb250cz1bXTt2YXIgZWU9e30sc2U9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihtZSl7dmFyIHBlPXZyKG1lKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9bWUuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+''@;'; put 'put ''IjpPLkZvbnRzLnB1c2goZWUpLGVlPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnBlLnZhbCYmKGVlLm5hbWU9Z28ocGUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOmVlLmJvbGQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxiLz4i''@;'; put 'put ''OmNhc2UiPGI+IjplZS5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjplZS5pdGFsaWM9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjplZS5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChwZS52''@;'; put 'put ''YWwpe2Nhc2Uibm9uZSI6ZWUudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOmVlLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjplZS51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOmVlLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291''@;'; put 'put ''bnRpbmciOmVlLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjplZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6ZWUuc3RyaWtlPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOmVlLnN0cmlrZT0x''@;'; put 'put ''O2JyZWFrO2Nhc2UiPG91dGxpbmUiOmVlLm91dGxpbmU9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOmVlLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOmVlLnNoYWRvdz1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjplZS5z''@;'; put 'put ''aGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6ZWUuY29uZGVuc2U9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjplZS5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6ZWUuZXh0ZW5kPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0''@;'; put 'put ''ZW5kLz4iOmVlLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6IjpwZS52YWwmJihlZS5zej0rcGUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZhbHx8Im5vbmUiKSYmKGVlLnZhbGlnbj1wZS52YWwucmVwbGFjZSgi''@;'; put 'put ''c2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5IjpwZS52YWwmJihlZS5mYW1pbHk9cGFyc2VJbnQocGUudmFsLDEwKSk7YnJlYWs7Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNl''@;'; put 'put ''IjxzY2hlbWUiOnBlLnZhbCYmKGVlLnNjaGVtZT1wZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1wZS52YWwpYnJlYWs7cGUuY29kZXBhZ2U9UFtwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxj''@;'; put 'put ''b2xvciI6ZWUuY29sb3J8fChlZS5jb2xvcj17fSkscGUuYXV0byYmKGVlLmNvbG9yLmF1dG89dGkocGUuYXV0bykpLHBlLnJnYj9lZS5jb2xvci5yZ2I9cGUucmdiLnNsaWNlKC02KTpwZS5pbmRleGVkPyhlZS5jb2xvci5pbmRleD1wYXJzZUludChwZS5pbmRleGVkLDEwKSxlZS5jb2xvci5y''@;'; put 'put ''Z2I9VXYoZWUuY29sb3IuaW5kZXgsTy5JbmRleGVkKSk6cGUudGhlbWUmJihlZS5jb2xvci50aGVtZT1wYXJzZUludChwZS50aGVtZSwxMCkscGUudGludCYmKGVlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChwZS50aW50KSkscGUudGhlbWUmJmsudGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1l''@;'; put 'put ''bnRzLmNsclNjaGVtZSYmKGVlLmNvbG9yLnJnYj1TNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2VlLmNvbG9yLnRoZW1lXS5yZ2IsZWUuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50Ijpz''@;'; put 'put ''ZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOnNlPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6c2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnNlPSExO2JyZWFrO2RlZmF1bHQ6aWYoSyYmSy5X''@;'; put 'put ''VEYmJiFzZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgQTU9ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRpbmcifSxaMz1bIm51bUZtdElkIiwiZmls''@;'; put 'put ''bElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sVzM9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0sTDQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLE89LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxrPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxsPi8sZWU9LzwoPzpcdys6KT9ib3Jk''@;'; put 'put ''ZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHBlLGJlLFBlLFZlKXt2YXIgY3QsRXQsWWU9e30sZXQ9e307cmV0dXJuKGN0PXBlLm1hdGNoKFMpKSYmKEhWKGN0LFllLFBlLFZlKSwoWWUuRm9udHN8fFtdKVswXSYmUHQoZXQsWWUuRm9udHNb''@;'; put 'put ''MF0pKSwoY3Q9cGUubWF0Y2goTykpJiYoRXQ9dnIoZ28oY3RbMF0pKSxldC56PUV0LmZvcm1hdENvZGU/UXIoRXQuZm9ybWF0Q29kZSk6KGJlLk51bWJlckZtdHx8W10pWytFdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGN0PXBlLm1hdGNoKGspKSYmKEZWKGN0LFllLFBlLFZlKSwoWWUuRmls''@;'; put 'put ''bHN8fFtdKVswXSYmUHQoZXQsWWUuRmlsbHNbMF0pKSwoY3Q9cGUubWF0Y2goZWUpKSYmKHdDKGN0LFllLFBlLFZlKSwoWWUuQm9yZGVyc3x8W10pWzBdJiZQdChldCxZZS5Cb3JkZXJzWzBdKSksZXR9fSgpLEppPS88KD86XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLEty''@;'; put 'put ''PS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgX2s9ZnVuY3Rpb24oKXt2YXIgTz0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/bnVtRm10cz4vLGs9LzwoPzpcdys6KT9jZWxsU3R5bGVY''@;'; put 'put ''ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sSz0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLGVlPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZz''@;'; put 'put ''Pi8sc2U9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLG1lPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+LyxwZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9y''@;'; put 'put ''ZGVycz4vLGJlPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sUGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4vLFZlPS88KD86XHcrOik/ZHhmcyhb''@;'; put 'put ''Xj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKGV0LGN0LEV0KXt2YXIgYnQsYXQ9e307cmV0dXJuIGV0PygoYnQ9KGV0PWV0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9n''@;'; put 'put ''bSwiIikpLm1hdGNoKGJlKSkmJmZ1bmN0aW9uIE5WKFMsTyxrKXtPLkluZGV4ZWR8fChPLkluZGV4ZWQ9W10pO3ZhciBLPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBzZT12cihlZSk7c3dpdGNoKFduKHNlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9y''@;'; put 'put ''cz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIHNl''@;'; put 'put ''WzBdO3ZhciBtZT1wYXJzZUludChzZS5yZ2Iuc2xpY2UoLTYpLDE2KTtPLkluZGV4ZWQucHVzaChbbWU+PjE2JjI1NSxtZT4+OCYyNTUsMjU1Jm1lXSk7YnJlYWs7Y2FzZSI8ZXh0IjpLPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpLPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFLKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrc2VbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LGF0LEV0KSwoYnQ9ZXQubWF0Y2goTykpJiZmdW5jdGlvbiB2ayhTLE8sayl7Ty5OdW1iZXJGbXQ9W107Zm9yKHZhciBLPVJlKEEuX3RhYmxlKSxlZT0wO2VlPEsubGVuZ3RoOysrZWUp''@;'; put 'put ''Ty5OdW1iZXJGbXRbS1tlZV1dPUEuX3RhYmxlW0tbZWVdXTt2YXIgc2U9U1swXS5tYXRjaChlbik7aWYoc2UpZm9yKGVlPTA7ZWU8c2UubGVuZ3RoOysrZWUpe3ZhciBtZT12cihzZVtlZV0pO3N3aXRjaChXbihtZVswXSkpe2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8''@;'; put 'put ''bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHBlPVFyKGdvKG1lLmZvcm1hdENvZGUpKSxiZT1wYXJzZUludChtZS5udW1GbXRJZCwxMCk7aWYoTy5OdW1iZXJGbXRbYmVdPXBlLGJlPjApe2lmKGJlPjM5Mil7Zm9yKGJl''@;'; put 'put ''PTM5MjtiZT42MCYmbnVsbCE9Ty5OdW1iZXJGbXRbYmVdOy0tYmUpO08uTnVtYmVyRm10W2JlXT1wZX1BLmxvYWQocGUsYmUpfWJyZWFrO2RlZmF1bHQ6aWYoay5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIittZVswXSsiIGluIG51bUZtdHMiKX19fShidCxhdCxFdCksKGJ0''@;'; put 'put ''PWV0Lm1hdGNoKG1lKSkmJkhWKGJ0LGF0LGN0LEV0KSwoYnQ9ZXQubWF0Y2goc2UpKSYmRlYoYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChwZSkpJiZ3QyhidCxhdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKGspKSYmZnVuY3Rpb24gcm5lKFMsTyxrKXtPLkNlbGxTdHlsZVhmPVtdO3ZhciBLLGVl''@;'; put 'put ''PSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oc2Upe3ZhciBtZT12cihzZSkscGU9MDtzd2l0Y2goV24obWVbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZz''@;'; put 'put ''PiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShLPW1lKVsw''@;'; put 'put ''XSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUtbWjNbcGVdXSYmKEtbWjNbcGVdXT1wYXJzZUludChLW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlLW1czW3BlXV0mJihLW1czW3BlXV09dGkoS1tXM1twZV1dKSk7aWYoTy5OdW1iZXJGbXQmJksubnVtRm10SWQ+Mzky''@;'; put 'put ''KWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihPLk51bWJlckZtdFtLLm51bUZtdElkXT09Ty5OdW1iZXJGbXRbcGVdKXtLLm51bUZtdElkPXBlO2JyZWFrfU8uQ2VsbFN0eWxlWGYucHVzaChLKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgYmU9e307bWUu''@;'; put 'put ''dmVydGljYWwmJihiZS52ZXJ0aWNhbD1tZS52ZXJ0aWNhbCksbWUuaG9yaXpvbnRhbCYmKGJlLmhvcml6b250YWw9bWUuaG9yaXpvbnRhbCksbnVsbCE9bWUudGV4dFJvdGF0aW9uJiYoYmUudGV4dFJvdGF0aW9uPW1lLnRleHRSb3RhdGlvbiksbWUuaW5kZW50JiYoYmUuaW5kZW50PW1lLmlu''@;'; put 'put ''ZGVudCksbWUud3JhcFRleHQmJihiZS53cmFwVGV4dD1tZS53cmFwVGV4dCksbWUuc2hyaW5rVG9GaXQmJihiZS5zaHJpbmtUb0ZpdD10aShtZS5zaHJpbmtUb0ZpdCkpLEsuYWxpZ25tZW50PWJlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOksucHJvdGVjdGlvbj17fSx0aShtZS5oaWRkZW4p''@;'; put 'put ''JiYoSy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9bWUubG9ja2VkJiYoSy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShtZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOmVlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjplZT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhZWUpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIittZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxhdCxFdCksKGJ0PWV0Lm1hdGNoKEspKSYmZnVuY3Rpb24gYW5lKFMsTyxrKXtPLkNlbGxTdHlsZVhmfHwoTy5DZWxsU3R5bGVYZj1bXSk7dmFyIEs9ITE7KFNbMF0ubWF0Y2goZW4p''@;'; put 'put ''fHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7dmFyIHNlPXZyKGVlKTtzd2l0Y2goV24oc2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNlIjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9jZWxsU3R5bGU+''@;'; put 'put ''IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgc2VbMF07dmFyIG1lPStzZS54ZklkO2lmKE8uQ2VsbFN0eWxlWGZbbWVdKU8uQ2VsbFN0eWxlWGZbbWVdLnN0eWxlPWdv''@;'; put 'put ''KHNlLm5hbWUpO2Vsc2UgaWYoIXNlLmJ1aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK21lKTticmVhaztjYXNlIjxleHQiOks9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOks9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUspdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsYXQsRXQpLChidD1ldC5tYXRjaChlZSkpJiZmdW5jdGlvbiB5ayhTLE8sayl7Ty5DZWxsWGY9W107dmFyIEssZWU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzZSl7''@;'; put 'put ''dmFyIG1lPXZyKHNlKSxwZT0wO3N3aXRjaChXbihtZVswXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVj''@;'; put 'put ''dGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShLPW1lKVswXSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUtbWjNbcGVdXSYmKEtbWjNbcGVdXT1wYXJzZUludChLW1ozW3BlXV0s''@;'; put 'put ''MTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlLW1czW3BlXV0mJihLW1czW3BlXV09dGkoS1tXM1twZV1dKSk7aWYoTy5OdW1iZXJGbXQmJksubnVtRm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihPLk51bWJlckZtdFtLLm51bUZtdElkXT09Ty5OdW1iZXJGbXRbcGVd''@;'; put 'put ''KXtLLm51bUZtdElkPXBlO2JyZWFrfU8uQ2VsbFN0eWxlWGYmJksueGZJZCYmTy5DZWxsU3R5bGVYZltLLnhmSWRdJiZPLkNlbGxTdHlsZVhmW0sueGZJZF0uc3R5bGUmJihLLnN0eWxlPU8uQ2VsbFN0eWxlWGZbSy54ZklkXS5zdHlsZSksTy5DZWxsWGYucHVzaChLKTticmVhaztjYXNlIjxh''@;'; put 'put ''bGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgYmU9e307bWUudmVydGljYWwmJihiZS52ZXJ0aWNhbD1tZS52ZXJ0aWNhbCksbWUuaG9yaXpvbnRhbCYmKGJlLmhvcml6b250YWw9bWUuaG9yaXpvbnRhbCksbnVsbCE9bWUudGV4dFJvdGF0aW9uJiYoYmUudGV4dFJvdGF0aW9uPW1l''@;'; put 'put ''LnRleHRSb3RhdGlvbiksbWUuaW5kZW50JiYoYmUuaW5kZW50PW1lLmluZGVudCksbWUud3JhcFRleHQmJihiZS53cmFwVGV4dD10aShtZS53cmFwVGV4dCkpLG1lLnNocmlua1RvRml0JiYoYmUuc2hyaW5rVG9GaXQ9dGkobWUuc2hyaW5rVG9GaXQpKSxLLmFsaWdubWVudD1iZTticmVhaztj''@;'; put 'put ''YXNlIjxwcm90ZWN0aW9uIjpLLnByb3RlY3Rpb249e30sdGkobWUuaGlkZGVuKSYmKEsucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPW1lLmxvY2tlZCYmKEsucHJvdGVjdGlvbi5lZGl0YWJsZT0hdGkobWUubG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8''@;'; put 'put ''ZXh0IjplZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjplZT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhZWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIittZVswXSsiIGluIGNlbGxYZnMiKX19KX0oYnQsYXQsRXQpLChidD1l''@;'; put 'put ''dC5tYXRjaChWZSkpJiZmdW5jdGlvbiBiayhTLE8sayxLKXtPLkRYRnx8KE8uRFhGPVtdKSwoU1swXS5tYXRjaChKaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtPLkRYRi5wdXNoKEw0KGVlLE8sayxLKSl9KX0oYnQsYXQsY3QsRXQpLChidD1ldC5tYXRjaChQZSkpJiZmdW5jdGlvbiBC''@;'; put 'put ''VihTLE8sayxLKXtPLlRhYmxlfHwoTy5UYWJsZT1bXSksKFNbMF0ubWF0Y2goS3IpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7Ty5UYWJsZS5wdXNoKGZ1bmN0aW9uIFZWKFMsTyxrLEspe3ZhciBlZT0hMSxzZT17fTtyZXR1cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KG1lKXt2YXIgcGU9dnIobWUpO3N3aXRjaChXbihwZVswXSkpe2Nhc2UiPHRhYmxlU3R5bGU+IjpjYXNlIjx0YWJsZVN0eWxlIjpzZS5uYW1lPXBlLm5hbWUucmVwbGFjZSgvXihUYWJsZXxQaXZvdClTdHlsZS8sIiIpLHNlLnJhd25hbWU9cGUubmFtZSxzZS5waXZvdD0hcGUucGl2b3R8fHRp''@;'; put 'put ''KHBlLnBpdm90KSxzZS50YWJsZT0hcGUudGFibGV8fHRpKHBlLnRhYmxlKTticmVhaztjYXNlIjx0YWJsZVN0eWxlLz4iOmNhc2UiPC90YWJsZVN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUVsZW1lbnQi''@;'; put 'put ''OmlmKHBlLnR5cGUmJnBlLmR4ZklkKXtpZighTy5EWEZ8fCFPLkRYRlsrcGUuZHhmSWRdKXRocm93IG5ldyBFcnJvcihtZSsiIGNhbm5vdCBmaW5kIERYRiIpO3NlW3BlLnR5cGVdPU8uRFhGWytwZS5keGZJZF19YnJlYWs7Y2FzZSI8ZXh0IjplZT0hMDticmVhaztjYXNlIjwvZXh0PiI6ZWU9''@;'; put 'put ''ITE7YnJlYWs7ZGVmYXVsdDppZihLJiZLLldURiYmIWVlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksc2V9KGVlLE8sMCxLKSl9KX0oYnQsYXQsMCxFdCksKGF0LkZvbnRzfHxbXSlbMF0mJkk0KGF0LkZvbnRzWzBdKSxhdCk6YXR9''@;'; put 'put ''fSgpLHdrPVByKCJzdHlsZVNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczp2dCI6WWkudnR9KTtmdW5jdGlvbiBadihTLE8pe3ZhciBLLGs9W0lpLHdrXTtTLlNTRiYmbnVsbCE9KEs9ZnVuY3Rpb24gazUoUyl7dmFyIE89WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUsOF0sWzIz''@;'; put 'put ''LDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Zvcih2YXIgSz1rWzBdO0s8PWtbMV07KytLKW51bGwhPVNbS10mJihPW08ubGVuZ3RoXT1QcigibnVtRm10IixudWxsLHtudW1GbXRJZDpLLGZvcm1hdENvZGU6THIoU1tLXSl9KSl9KSwxPT09Ty5sZW5ndGg/IiI6''@;'; put 'put ''KE9bTy5sZW5ndGhdPSI8L251bUZtdHM+IixPWzBdPVByKCJudW1GbXRzIixudWxsLHtjb3VudDpPLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksTy5qb2luKCIiKSl9KFMuU1NGKSkmJihrW2subGVuZ3RoXT1LKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBnMihTKXt2YXIgTz1bXTtyZXR1''@;'; put 'put ''cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBLPVsiPGZvbnQ+Il07ay5ib2xkJiZLLnB1c2goIjxiLz4iKSxrLml0YWxpYyYmSy5wdXNoKCI8aS8+Iiksay5zdHJpa2UmJksucHVzaCgiPHN0cmlrZS8+Iiksay5zaGFkb3cmJksucHVzaCgiPHNoYWRvdy8+IiksQTVbK2sudW5kZXJsaW5l''@;'; put 'put ''XSYmSy5wdXNoKCc8dSB2YWw9IicrQTVbK2sudW5kZXJsaW5lXSsnIi8+Jyksay5zeiYmSy5wdXNoKCc8c3ogdmFsPSInK2suc3orJyIvPicpLGsuY29sb3ImJksucHVzaChnZChrLmNvbG9yLCEwKSksay5uYW1lJiZLLnB1c2goJzxuYW1lIHZhbD0iJytrLm5hbWUrJyIvPicpLGsuZmFtaWx5''@;'; put 'put ''JiZLLnB1c2goJzxmYW1pbHkgdmFsPSInK2suZmFtaWx5KyciLz4nKSxrLnNjaGVtZSYmSy5wdXNoKCc8c2NoZW1lIHZhbD0iJytrLnNjaGVtZSsnIi8+Jyksay52YWxpZ24mJksucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicray52YWxpZ24rKCJzdWIiPT1rLnZhbGlnbnx8InN1cGVyIj09ay52''@;'; put 'put ''YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKSxPLnB1c2goSy5qb2luKCIiKSsiPC9mb250PiIpfSksJzxmb250cyBjb3VudD0iJytPLmxlbmd0aCsnIj4nK08uam9pbigiIikrIjwvZm9udHM+In0oKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBtayhTKXt2''@;'; put 'put ''YXIgTz1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBLPW51bGw7aWYoay5zdG9wcyYmay5zdG9wcy5sZW5ndGgpe3ZhciBlZT17fTtrLmFuZ2xlJiYoZWUuZGVncmVlPU1hdGgucm91bmQoay5hbmdsZSkpLEs9ay5zdG9wcy5tYXAoZnVuY3Rpb24oc2Upe3JldHVybiBQcigi''@;'; put 'put ''c3RvcCIsZ2Qoc2UsImNvbG9yIiwhMCksbnVsbCE9c2Uudj97cG9zaXRpb246c2Uudn06e30pfSksTy5wdXNoKCI8ZmlsbD4iK1ByKCJncmFkaWVudEZpbGwiLEsuam9pbigiIiksZWUpKyI8L2ZpbGw+Iil9ZWxzZXtpZihrLmZnQ29sb3Ipe2lmKEs9KEt8fCIiKSsiPGZnQ29sb3IgIixrLmZn''@;'; put 'put ''Q29sb3IudGhlbWUpSys9J3RoZW1lPSInK2suZmdDb2xvci50aGVtZSsnIicrKGsuZmdDb2xvci50aW50PycgdGludD0iJytrLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1rLmZnQ29sb3IuaW5kZXgmJm51bGw9PWsuZmdDb2xvci5yZ2IpSys9J2luZGV4ZWQ9Iicr''@;'; put 'put ''ay5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoay5mZ0NvbG9yLmF1dG8pSys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK1JlKGsuZmdDb2xvcikuam9pbigifCIpKTtLKz0ncmdiPSJGRicrUDAoay5mZ0Nv''@;'; put 'put ''bG9yLnJnYikrJyIvPid9InNvbGlkIj09ay5wYXR0ZXJuVHlwZSYmIWsuYmdDb2xvciYmKGsuYmdDb2xvcj17aW5kZXg6NjR9KX1pZihrLmJnQ29sb3IpaWYoSz0oS3x8IiIpKyI8YmdDb2xvciAiLGsuYmdDb2xvci50aGVtZSlLKz0ndGhlbWU9Iicray5iZ0NvbG9yLnRoZW1lKyciLz4nO2Vs''@;'; put 'put ''c2UgaWYobnVsbCE9ay5iZ0NvbG9yLmluZGV4JiZudWxsPT1rLmJnQ29sb3IucmdiKUsrPSdpbmRleGVkPSInK2suYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuYmdDb2xvci5hdXRvKUsrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuYmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJCYWQgY29sb3IgIitSZShrLmJnQ29sb3IpLmpvaW4oInwiKSk7Sys9J3JnYj0iRkYnK1AwKGsuYmdDb2xvci5yZ2IpKyciLz4nfU8ucHVzaCgiPGZpbGw+IitQcigicGF0dGVybkZpbGwiLEsse3BhdHRlcm5UeXBlOmsucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMg''@;'; put 'put ''Y291bnQ9IicrTy5sZW5ndGgrJyI+JytPLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gRHMoUyl7dmFyIE89W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgSz1bXTtLLnB1c2goUjQoay5sZWZ0LCJs''@;'; put 'put ''ZWZ0IikpLEsucHVzaChSNChrLnJpZ2h0LCJyaWdodCIpKSxLLnB1c2goUjQoay50b3AsInRvcCIpKSxLLnB1c2goUjQoay5ib3R0b20sImJvdHRvbSIpKSxLLnB1c2goUjQoay5kaWFnb25hbCwiZGlhZ29uYWwiKSksTy5wdXNoKCI8Ym9yZGVyPiIrSy5qb2luKCIiKSsiPC9ib3JkZXI+Iil9''@;'; put 'put ''KSwnPGJvcmRlcnMgY291bnQ9IicrTy5sZW5ndGgrJyI+JytPLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIGluZShTKXt2YXIgTz1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJv''@;'; put 'put ''cmRlcklkPSIwIi8+J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylPLnB1c2goUHIoInhmIixudWxsLHtudW1GbXRJZDpTW2tdLm51bUZtdElkfHwwLGZvbnRJZDpTW2tdLmZvbnRJZHx8MCxmaWxsSWQ6U1trXS5maWxsSWR8fDAsYm9yZGVySWQ6U1trXS5ib3JkZXJJZHx8MH0p''@;'; put 'put ''KTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytPLmxlbmd0aCsnIj4nK08uam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KE8uY2VsbFN0eWxlWGZzKSwoSz1mdW5jdGlvbiBubmUoUyl7dmFyIE89W107cmV0dXJuIE9bTy5sZW5ndGhdPVByKCJjZWxsWGZzIixudWxsKSxTLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oayl7dmFyIEs9ay5hbGlnbm1lbnQ7ZGVsZXRlIGsuYWxpZ25tZW50O3ZhciBlZT1rLnByb3RlY3Rpb247ZGVsZXRlIGsucHJvdGVjdGlvbjt2YXIgc2U9Sz9QcigiYWxpZ25tZW50IixudWxsLEspOiIiO3NlKz1lZT9QcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOmVl''@;'; put 'put ''LmhpZGRlbj8xOjAsbG9ja2VkOmVlLmVkaXRhYmxlPzA6MX0pOiIiLE9bTy5sZW5ndGhdPVByKCJ4ZiIsc2V8fG51bGwsayksSyYmKGsuYWxpZ25tZW50PUspLGVlJiYoay5wcm90ZWN0aW9uPWVlKX0pLE9bTy5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09Ty5sZW5ndGg/IiI6KE9bMF09UHIo''@;'; put 'put ''ImNlbGxYZnMiLG51bGwse2NvdW50Ok8ubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxPLmpvaW4oIiIpKX0oTy5jZWxsWGZzKSkmJihrW2subGVuZ3RoXT1LKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBvbmUoUyl7dmFyIE89Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIg''@;'; put 'put ''YnVpbHRpbklkPSIwIi8+J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylPLnB1c2goUHIoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpTW2tdLm5hbWUseGZJZDprfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytPLmxlbmd0aCsnIj4nK08uam9pbigiIikrIjwvY2VsbFN0''@;'; put 'put ''eWxlcz4ifShPLmNlbGxTdHlsZVhmcyksUy5TdHlsZXMuRFhGfHwoUy5TdHlsZXMuRFhGPVtdKTt2YXIgZWU9ZnVuY3Rpb24gZmQoUyxPLGspe3ZhciBLPVsnPHRhYmxlU3R5bGVzIGNvdW50PSInKyhTfHxbXSkubGVuZ3RoKyciIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVt''@;'; put 'put ''OSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiBTJiZTLmxlbmd0aD8oS1swXSs9Ij4iLFMuZm9yRWFjaChmdW5jdGlvbihlZSl7Sy5wdXNoKGZ1bmN0aW9uIENDKFMsTyxrKXt2YXIgSz1bXTtbIndob2xlVGFibGUiLCJoZWFkZXJSb3ciLCJ0b3RhbFJv''@;'; put 'put ''dyIsImZpcnN0Q29sdW1uIiwibGFzdENvbHVtbiIsImZpcnN0Um93U3RyaXBlIiwic2Vjb25kUm93U3RyaXBlIiwiZmlyc3RDb2x1bW5TdHJpcGUiLCJzZWNvbmRDb2x1bW5TdHJpcGUiLCJmaXJzdEhlYWRlckNlbGwiLCJsYXN0SGVhZGVyQ2VsbCIsImZpcnN0VG90YWxDZWxsIiwibGFzdFRv''@;'; put 'put ''dGFsQ2VsbCIsImZpcnN0U3VidG90YWxDb2x1bW4iLCJzZWNvbmRTdWJ0b3RhbENvbHVtbiIsInRoaXJkU3VidG90YWxDb2x1bW4iLCJmaXJzdFN1YnRvdGFsUm93Iiwic2Vjb25kU3VidG90YWxSb3ciLCJ0aGlyZFN1YnRvdGFsUm93IiwiYmxhbmtSb3ciLCJmaXJzdENvbHVtblN1YmhlYWRp''@;'; put 'put ''bmciLCJzZWNvbmRDb2x1bW5TdWJoZWFkaW5nIiwidGhpcmRDb2x1bW5TdWJoZWFkaW5nIiwiZmlyc3RSb3dTdWJoZWFkaW5nIiwic2Vjb25kUm93U3ViaGVhZGluZyIsInRoaXJkUm93U3ViaGVhZGluZyIsInBhZ2VGaWVsZExhYmVscyIsInBhZ2VGaWVsZFZhbHVlcyJdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oc2Upe2lmKFNbc2VdKXt2YXIgbWU9bFMoTyxTW3NlXSk7Sy5wdXNoKCc8dGFibGVTdHlsZUVsZW1lbnQgZHhmSWQ9IicrbWUrJyIgdHlwZT0iJytzZSsnIi8+Jyl9fSk7dmFyIGVlPSc8dGFibGVTdHlsZSBjb3VudD0iJytLLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhUy5waXZvdCsn''@;'; put 'put ''IiBuYW1lPSInK1MubmFtZSsnIic7cmV0dXJuIEsubGVuZ3RoP2VlKyI+IitLLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjplZSsiLz4ifShlZSxPKSl9KSxLLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOktbMF0rIi8+In0oKFMuU3R5bGVzfHx7fSkuVGFibGV8fFtdLFMuU3R5bGVzLkRY''@;'; put 'put ''Rik7cmV0dXJuIGtbay5sZW5ndGhdPWZ1bmN0aW9uIGpWKFMsTyl7aWYoIVMubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIGs9Wyc8ZHhmcyBjb3VudD0iJytTLmxlbmd0aCsnIj4nXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKEspe2sucHVzaChmdW5jdGlvbiBlOChT''@;'; put 'put ''LE8pe3ZhciBrPXtib2xkOiJiIixpdGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sSz1bIjxkeGY+Il0sZWU9W10sc2U9W10sbWU9W10sYmU9W107cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oVmUpe3N3aXRjaChWZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJp''@;'; put 'put ''a2UiOmNhc2UidW5kZXJsaW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNoYXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Y2FzZSJzY2hlbWUiOmVlLnB1''@;'; put 'put ''c2goVmUpO2JyZWFrO2Nhc2UiYmdDb2xvciI6Y2FzZSJmZ0NvbG9yIjptZS5wdXNoKFZlKTticmVhaztjYXNlInoiOnNlLnB1c2goVmUpO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImRpYWdvbmFsIjpjYXNlInZlcnRpY2FsIjpjYXNl''@;'; put 'put ''Imhvcml6b250YWwiOmJlLnB1c2goVmUpO2JyZWFrO2Nhc2UicGF0dGVyblR5cGUiOmNhc2UiZGlhZ29uYWxEb3duIjpjYXNlImRpYWdvbmFsVXAiOmNhc2Uic3RvcHMiOmNhc2UiZGVncmVlIjpicmVhaztkZWZhdWx0OnRocm93IlVucmVjb2duaXplZCAiK1ZlKyIgaW4gRFhGIn19KSxlZS5s''@;'; put 'put ''ZW5ndGg+MCYmKEsucHVzaCgiPGZvbnQ+IiksZWUuZm9yRWFjaChmdW5jdGlvbihWZSl7c3dpdGNoKFZlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOksucHVzaCgiPCIr''@;'; put 'put ''KGtbVmVdfHxWZSkrJyB2YWw9IicrKFNbVmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpLLnB1c2goZ2QoU1tWZV0sVmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNjaGVtZSI6Sy5wdXNoKCI8Iisoa1tWZV18fFZlKSsnIHZh''@;'; put 'put ''bD0iJytTW1ZlXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOksucHVzaCgnPHUgdmFsPSInK0E1W1NbVmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOksucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy52YWxpZ24rKCJzdWIiPT1TLnZhbGlnbnx8InN1cGVyIj09Uy52YWxp''@;'; put 'put ''Z24/InNjcmlwdCI6IiIpKyciLz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrVmUrIiA6IGZvbnQgRFhGIn19KSxLLnB1c2goIjwvZm9udD4iKSksc2UubGVuZ3RoPjAmJksucHVzaCgnPG51bUZtdCBmb3JtYXRDb2RlPSInK0xyKFMueikrJyIgbnVtRm10SWQ9IicrZnVu''@;'; put 'put ''Y3Rpb24gc1MoUyxPKXtpZigibnVtYmVyIj09dHlwZW9mIFMpcmV0dXJuIFM7dmFyIGs9Ty5yZXZzc2ZbUz8/IkdlbmVyYWwiXSxLPTYwO2lmKG51bGw9PWspZm9yKDtLPDM5MjsrK0spaWYobnVsbD09Ty5zc2ZbS10pcmV0dXJuIEEubG9hZChTLEspLE8uc3NmW0tdPVMsTy5yZXZzc2ZbU109''@;'; put 'put ''SyxLO3JldHVybiBrfShTLnosTykrJyIvPicpLG1lLmxlbmd0aD4wJiYoSy5wdXNoKCI8ZmlsbD4iKSxLLnB1c2goIjxwYXR0ZXJuRmlsbCIrKFMucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJytTLnBhdHRlcm5UeXBlKyciPic6Ij4iKSksbWUuZm9yRWFjaChmdW5jdGlvbihWZSl7c3dp''@;'; put 'put ''dGNoKFZlKXtjYXNlInBhdHRlcm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6Sy5wdXNoKGdkKFNbVmVdLFZlLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK1ZlKyIgOiBmaWxsIERYRiJ9fSksSy5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLEsu''@;'; put 'put ''cHVzaCgiPC9maWxsPiIpKSxiZS5sZW5ndGg+MD8oSy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFTLmRpYWdvbmFsVXAr''@;'; put 'put ''JyInOiIiLCI+Il0uam9pbigiIikpLGJlLmZvckVhY2goZnVuY3Rpb24oVmUpe0sucHVzaChSNChTW1ZlXSxWZSkpfSksSy5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPVMuZGlhZ29uYWxEb3dufHxudWxsIT1TLmRpYWdvbmFsVXApJiZLLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdv''@;'; put 'put ''bmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PUsubGVuZ3RoPyI8ZHhmLz4iOksuam9pbigiIikrIjwvZHhm''@;'; put 'put ''PiJ9KEssTykpfSksay5qb2luKCIiKSsiPC9keGZzPiJ9KFMuU3R5bGVzLkRYRixPKSxrW2subGVuZ3RoXT1lZSxrLmxlbmd0aD4yJiYoa1trLmxlbmd0aF09Ijwvc3R5bGVTaGVldD4iLGtbMV09a1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX1mdW5jdGlvbiBTQyhTLE8sayl7''@;'; put 'put ''a3x8KGs9eW4oNis0Kk8ubGVuZ3RoKSksay53cml0ZV9zaGlmdCgyLFMpLEZjKE8sayk7dmFyIEs9ay5sZW5ndGg+ay5sP2suc2xpY2UoMCxrLmwpOms7cmV0dXJuIG51bGw9PWsubCYmKGsubD1rLmxlbmd0aCksS31mdW5jdGlvbiBaVihTKXtyZXR1cm57Y29sb3I6UWgoUykscG9zOlBsKFMp''@;'; put 'put ''fX1LYS5TVFk9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIjt2YXIgTUM9WyJub25lIiwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRh''@;'; put 'put ''cmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il0sV1Y9''@;'; put 'put ''SGUoTUMpLEQ1PVsiZ2VuZXJhbCIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImZpbGwiLCJqdXN0aWZ5IiwiY2VudGVyQ29udGludW91cyIsImRpc3RyaWJ1dGVkIl0sdDg9WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iLCJqdXN0aWZ5IiwiZGlzdHJpYnV0ZWQiXTtmdW5jdGlvbiBqdShTLE8s''@;'; put 'put ''ayl7a3x8KGs9eW4oMTYpKSxrLndyaXRlX3NoaWZ0KDIsT3x8MCksay53cml0ZV9zaGlmdCgyLFMubnVtRm10SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZvbnRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZmlsbElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5ib3JkZXJJZHx8MCksay53cml0''@;'; put 'put ''ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdubWVudC50ZXh0Um90YXRpb258fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGlnbm1lbnQuaW5kZW50fHwwKTt2YXIgSz0wLGVlPTA7aWYoUy5hbGlnbm1lbnQpe2lmKFMuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBz''@;'; put 'put ''ZT1ENS5pbmRleE9mKFMuYWxpZ25tZW50Lmhvcml6b250YWwpO3NlPDAmJihzZT0wKSxLfD1zZX1pZihTLmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIG1lPXQ4LmluZGV4T2YoUy5hbGlnbm1lbnQudmVydGljYWwpO21lPDAmJihtZT0yKSxLfD1tZTw8M31TLmFsaWdubWVudC53cmFwVGV4dCYm''@;'; put 'put ''KEt8PTY0KSxTLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKGVlfD0xKX1yZXR1cm4gay53cml0ZV9zaGlmdCgxLEspLGsud3JpdGVfc2hpZnQoMSxlZSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrfXZhciBwZD1bIm5vbmUiLCJ0aGluIiwibWVkaXVtIiwiZGFzaGVk''@;'; put 'put ''IiwiZG90dGVkIiwidGhpY2siLCJkb3VibGUiLCJoYWlyIiwibWVkaXVtRGFzaGVkIiwiZGFzaERvdCIsIm1lZGl1bURhc2hEb3QiLCJkYXNoRG90RG90IiwibWVkaXVtRGFzaERvdERvdCIsInNsYW50RGFzaERvdCJdO2Z1bmN0aW9uIEk1KFMpe3ZhciBPPVMucmVhZF9zaGlmdCgxKTtTLmwr''@;'; put 'put ''PTE7dmFyIGs9UWgoUyk7cmV0dXJue3N0eWxlOnBkW09dLGNvbG9yOmt9fWZ1bmN0aW9uIFI1KFMsTyl7cmV0dXJuIE98fChPPXluKDEwKSksUyYmUy5zdHlsZSYmIiIhPVMuc3R5bGUmJiJub25lIiE9Uy5zdHlsZSYmLTEhPT1wZC5pbmRleE9mKFMuc3R5bGUpPyhPLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''cGQuaW5kZXhPZihTLnN0eWxlKSksTy53cml0ZV9zaGlmdCgxLDApLFMuY29sb3I/bWYoUy5jb2xvcixPKTooTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSkpOihPLndyaXRlX3NoaWZ0KDEsMCksTy53cml0ZV9zaGlmdCgxLDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMCkpLE99ZnVuY3Rpb24gU2soUyxPKXtyZXR1cm4gT3x8KE89eW4oNTIpKSxPLndyaXRlX3NoaWZ0KDQsUy54ZklkKSxPLndyaXRlX3NoaWZ0KDIsMSksTy53cml0ZV9zaGlmdCgxLCtTLmJ1aWx0aW5JZCksTy53cml0ZV9zaGlmdCgxLDApLHBmKFMubmFtZXx8IiIsTyks''@;'; put 'put ''Ty5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99ZnVuY3Rpb24gWXYoUyxPKXshT3x8IU8udGhlbWVFbGVtZW50c3x8IU8udGhlbWVFbGVtZW50cy5jbHJTY2hlbWV8fG51bGwhPVMudGhlbWUmJihTLnJnYj1TNShPLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1MudGhlbWVdLnJnYixTLnRp''@;'; put 'put ''bnR8fDApKX1mdW5jdGlvbiBEayhTLE8pe3ZhciBrPXlpKCk7cmV0dXJuIEZyKGssIkJydEJlZ2luU3R5bGVTaGVldCIpLGZ1bmN0aW9uICRWKFMsTyl7aWYoTyl7dmFyIGs9MDtbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEspe2Zvcih2YXIgZWU9''@;'; put 'put ''S1swXTtlZTw9S1sxXTsrK2VlKW51bGwhPU9bZWVdJiYrK2t9KSwwIT1rJiYoRnIoUywiQnJ0QmVnaW5GbXRzIixLMChrKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihLKXtmb3IodmFyIGVlPUtbMF07ZWU8PUtbMV07KytlZSludWxsIT1PW2Vl''@;'; put 'put ''XSYmRnIoUywiQnJ0Rm10IixTQyhlZSxPW2VlXSkpfSksRnIoUywiQnJ0RW5kRm10cyIpKX19KGssUy5TU0YpLGZ1bmN0aW9uIEtWKFMsTyl7dmFyIGs9Ty5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luRm9udHMiLEswKGspKSxPLmZvckVhY2goZnVuY3Rpb24oSyl7RnIoUywiQnJ0Rm9u''@;'; put 'put ''dCIsZnVuY3Rpb24gVVYoUyxPKXtPfHwoTz15bigxNTMpKSxPLndyaXRlX3NoaWZ0KDIsMjAqUy5zeiksZnVuY3Rpb24gZHYoUyxPKXtPfHwoTz15bigyKSksTy53cml0ZV9zaGlmdCgxLChTLml0YWxpYz8yOjApfChTLnN0cmlrZT84OjApfChTLm91dGxpbmU/MTY6MCl8KFMuc2hhZG93PzMy''@;'; put 'put ''OjApfChTLmNvbmRlbnNlPzY0OjApfChTLmV4dGVuZD8xMjg6MCkpLE8ud3JpdGVfc2hpZnQoMSwwKX0oUyxPKSxPLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApO3ZhciBrPTA7InN1cGVyIj09Uy52YWxpZ24/az0xOiJzdWIiPT1TLnZhbGlnbiYmKGs9MiksTy53cml0ZV9zaGlmdCgy''@;'; put 'put ''LGspLE8ud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksTy53cml0ZV9zaGlmdCgxLFMuZmFtaWx5fHwwKSxPLndyaXRlX3NoaWZ0KDEsUy5jaGFyc2V0fHwwKSxPLndyaXRlX3NoaWZ0KDEsMCksbWYoUy5jb2xvcixPKTt2YXIgSz0wO3JldHVybiJtYWpvciI9PVMuc2NoZW1lJiYoSz0x''@;'; put 'put ''KSwibWlub3IiPT1TLnNjaGVtZSYmKEs9MiksTy53cml0ZV9zaGlmdCgxLEspLEZjKFMubmFtZSxPKSxPLmxlbmd0aD5PLmw/Ty5zbGljZSgwLE8ubCk6T30oSykpfSksRnIoUywiQnJ0RW5kRm9udHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBxVihTLE8pe3Zh''@;'; put 'put ''ciBrPU8ubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkZpbGxzIixLMChrKSksTy5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZyKFMsIkJydEZpbGwiLGZ1bmN0aW9uIGUxKFMsTyl7T3x8KE89eW4oODQpKTt2YXIgaz1XVltTLnBhdHRlcm5UeXBlXTtudWxsPT1rJiYoaz00MCksTy53cml0ZV9z''@;'; put 'put ''aGlmdCg0LGs9K2spO3ZhciBLPTA7aWYoNDAhPWspZm9yKG1mKFMuZmdDb2xvcnx8e2luZGV4OjY0fSxPKSxtZihTLmJnQ29sb3J8fHtpbmRleDo2NX0sTyk7SzwxMjsrK0spTy53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtLPDQ7KytLKU8ud3JpdGVfc2hpZnQoNCwwKTtmb3IoO0s8MTI7''@;'; put 'put ''KytLKU8ud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99KEspKX0pLEZyKFMsIkJydEVuZEZpbGxzIikpfShrLChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gWFYoUyxPKXt2YXIgaz1PLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0''@;'; put 'put ''QmVnaW5Cb3JkZXJzIixLMChrKSksTy5mb3JFYWNoKGZ1bmN0aW9uKEspe0ZyKFMsIkJydEJvcmRlciIsZnVuY3Rpb24gQ2soUyxPKXtyZXR1cm4gT3x8KE89eW4oNTEpKSxPLndyaXRlX3NoaWZ0KDEsMCksUjUoUy50b3AsTyksUjUoUy5ib3R0b20sTyksUjUoUy5sZWZ0LE8pLFI1KFMucmln''@;'; put 'put ''aHQsTyksUjUobnVsbCxPKSxPLmxlbmd0aD5PLmw/Ty5zbGljZSgwLE8ubCk6T30oSykpfSksRnIoUywiQnJ0RW5kQm9yZGVycyIpKX0oaywoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gRWsoUyxPKXt2YXIgaz0xO2lmKE8mJihrPU8ubGVuZ3RoKSxGcihTLCJCcnRCZWdp''@;'; put 'put ''bkNlbGxTdHlsZVhGcyIsSzAoaykpLEZyKFMsIkJydFhGIixqdSh7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLE8pZm9yKHZhciBLPTE7SzxPLmxlbmd0aDsrK0spRnIoUywiQnJ0WEYiLGp1KHtudW1GbXRJZDpPW0tdLm51bUZtdElkfHwwLGZvbnRJ''@;'; put 'put ''ZDpPW0tdLmZvbnRJZHx8MCxmaWxsSWQ6T1tLXS5maWxsSWR8fDAsYm9yZGVySWQ6T1tLXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTtGcihTLCJCcnRFbmRDZWxsU3R5bGVYRnMiKX0oayxPLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24gVGsoUyxPKXtGcihTLCJCcnRCZWdpbkNlbGxYRnMiLEswKE8u''@;'; put 'put ''bGVuZ3RoKSksTy5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydFhGIixqdShrLDApKX0pLEZyKFMsIkJydEVuZENlbGxYRnMiKX0oayxPLmNlbGxYZnMpLGZ1bmN0aW9uIEFrKFMsTyl7dmFyIGs9MTtpZihPJiYoaz1PLmxlbmd0aCksRnIoUywiQnJ0QmVnaW5TdHlsZXMiLEswKGspKSxG''@;'; put 'put ''cihTLCJCcnRTdHlsZSIsU2soe3hmSWQ6MCxidWlsdGluSWQ6MCxuYW1lOiJOb3JtYWwifSkpLE8pZm9yKHZhciBLPTE7SzxPLmxlbmd0aDsrK0spRnIoUywiQnJ0U3R5bGUiLFNrKHt4ZklkOkssYnVpbHRpbklkOjAsbmFtZTpPW0tdLm5hbWV9KSk7RnIoUywiQnJ0RW5kU3R5bGVzIil9KGss''@;'; put 'put ''Ty5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIEd2KFMpe0ZyKFMsIkJydEJlZ2luRFhGcyIsSzAoMCkpLEZyKFMsIkJydEVuZERYRnMiKX0oayksZnVuY3Rpb24ga2soUyl7RnIoUywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24gTWsoUyxPLGspe3ZhciBLPXluKDIwNTIpO3JldHVybiBL''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsUykscGYoTyxLKSxwZihrLEspLEsubGVuZ3RoPksubD9LLnNsaWNlKDAsSy5sKTpLfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLEZyKFMsIkJydEVuZFRhYmxlU3R5bGVzIil9KGspLEZyKGssIkJydEVuZFN0eWxlU2hlZXQiKSxr''@;'; put 'put ''LmVuZCgpfUthLlRIRU1FPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIgSWs9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTph''@;'; put 'put ''Y2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gUVYoUyxPLGspe08udGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIEs9e307KFNbMF0ubWF0''@;'; put 'put ''Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihlZSl7dmFyIHNlPXZyKGVlKTtzd2l0Y2goc2VbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwvYTpjbHJTY2hlbWU+IjpjYXNlIjwvYTpzcmdiQ2xyPiI6Y2FzZSI8L2E6c3lzQ2xyPiI6YnJlYWs7Y2FzZSI8YTpzcmdiQ2xyIjpLLnJn''@;'; put 'put ''Yj1zZS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOksucmdiPXNlLmxhc3RDbHI7YnJlYWs7Y2FzZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNlIjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsyPiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTps''@;'; put 'put ''dDI+IjpjYXNlIjxhOmFjY2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2FzZSI8YTphY2NlbnQyPiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxhOmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2Nl''@;'; put 'put ''bnQ1PiI6Y2FzZSI8L2E6YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNhc2UiPC9hOmFjY2VudDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6Zm9sSGxpbms+IjoiLyI9PT1zZVswXS5jaGFyQXQoMSk/KE8udGhlbWVF''@;'; put 'put ''bGVtZW50cy5jbHJTY2hlbWVbSWsuaW5kZXhPZihzZVswXSldPUssSz17fSk6Sy5uYW1lPXNlWzBdLnNsaWNlKDMsc2VbMF0ubGVuZ3RoLTEpO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgIitzZVswXSsiIGluIGNsclNjaGVtZSIpfX0p''@;'; put 'put ''fWZ1bmN0aW9uIGVCKCl7fWZ1bmN0aW9uIHRCKCl7fXZhciBuQj0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxSaz0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLHNuZT0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10q''@;'; put 'put ''PFwvYTpmbXRTY2hlbWU+LyxyQj0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEVDKFMsTyl7aWYoIVN8fDA9PT1TLmxlbmd0aClyZXR1cm4gRUMoaUIoKSk7dmFyIGssSz17fTtpZighKGs9Uy5tYXRjaChyQikpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gTGsoUyxPLGspe3ZhciBLO08udGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLG5CLFFWXSxbImZvbnRTY2hlbWUiLFJrLGVCXSxbImZtdFNjaGVtZSIsc25lLHRCXV0uZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihlZSl7aWYoIShLPVMubWF0Y2goZWVbMV0pKSl0aHJvdyBuZXcgRXJyb3IoZWVbMF0rIiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO2VlWzJdKEssTyxrKX0pfShrWzBdLEssTyksSy5yYXc9UyxLfWZ1bmN0aW9uIGlCKFMsTyl7aWYoTyYmTy50aGVtZVhMU1gpcmV0''@;'; put 'put ''dXJuIE8udGhlbWVYTFNYO2lmKFMmJiJzdHJpbmciPT10eXBlb2YgUy5yYXcpcmV0dXJuIFMucmF3O3ZhciBrPVtJaV07cmV0dXJuIGtbay5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFt''@;'; put 'put ''ZT0iT2ZmaWNlIFRoZW1lIj4nLGtbay5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIsa1trLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsx''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxrW2subGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsa1trLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0i''@;'; put 'put ''RUVFQ0UxIi8+PC9hOmx0Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLGtbay5sZW5ndGhdPSc8YTphY2Nl''@;'; put 'put ''bnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50''@;'; put 'put ''NT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLGtbay5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsa1trLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFs''@;'; put 'put ''PSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxrW2subGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLGtbay5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlh''@;'; put 'put ''Ii8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4n''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0''@;'; put 'put ''PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5l''@;'; put 'put ''dyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFj''@;'; put 'put ''ZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0''@;'; put 'put ''eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVy''@;'; put 'put ''IiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFs''@;'; put 'put ''YXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9''@;'; put 'put ''IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJP''@;'; put 'put ''cnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFu''@;'; put 'put ''Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLGtbay5sZW5n''@;'; put 'put ''dGhdPSI8YTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFu''@;'; put 'put ''IiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI''@;'; put 'put ''YW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2su''@;'; put 'put ''bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1tr''@;'; put 'put ''Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlh''@;'; put 'put ''Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRl''@;'; put 'put ''c3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNl''@;'; put 'put ''PSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09IjwvYTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFs''@;'; put 'put ''PSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAi''@;'; put 'put ''Lz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48''@;'; put 'put ''L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVu''@;'; put 'put ''Z3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+''@;'; put 'put ''PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFs''@;'; put 'put ''PSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxl''@;'; put 'put ''ZD0iMCIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29s''@;'; put 'put ''aWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMjU0''@;'; put 'put ''MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBj''@;'; put 'put ''bXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxl''@;'; put 'put ''THN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9''@;'; put 'put ''IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6''@;'; put 'put ''ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVy''@;'; put 'put ''U2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAw''@;'; put 'put ''IiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6''@;'; put 'put ''c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGln''@;'; put 'put ''aHRSaWc+PC9hOnNjZW5lM2Q+JyxrW2subGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpi''@;'; put 'put ''Z0ZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0n''@;'; put 'put ''PGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxh''@;'; put 'put ''OnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAi''@;'; put 'put ''Lz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIv''@;'; put 'put ''PjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp''@;'; put 'put ''bnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIv''@;'; put 'put ''PjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09Ijwv''@;'; put 'put ''YTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLGtbay5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpzcERlZj4i''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6Zmls''@;'; put 'put ''bFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6c3BEZWY+Iixr''@;'; put 'put ''W2subGVuZ3RoXT0iPGE6bG5EZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIg''@;'; put 'put ''dmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2su''@;'; put 'put ''bGVuZ3RoXT0iPC9hOmxuRGVmPiIsa1trLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lPiIsay5qb2luKCIiKX1mdW5jdGlvbiAkdihTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''az1TLnJlYWRfc2hpZnQoMiktNCxLPVtPXTtzd2l0Y2goTyl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpLWzFdPWZ1bmN0aW9uIFRDKFMpe3ZhciBPPXt9O3N3aXRjaChPLnhjbHJUeXBlPVMucmVhZF9zaGlmdCgyKSxPLm5UaW50''@;'; put 'put ''U2hhZGU9Uy5yZWFkX3NoaWZ0KDIpLE8ueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6Uy5sKz00O2JyZWFrO2Nhc2UgMTpPLnhjbHJWYWx1ZT1mdW5jdGlvbiBvQihTLE8pe3JldHVybiBJbihTLE8pfShTLDQpO2JyZWFrO2Nhc2UgMjpPLnhjbHJWYWx1ZT1NZihTKTticmVhaztjYXNlIDM6Ty54''@;'; put 'put ''Y2xyVmFsdWU9ZnVuY3Rpb24gT2soUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KX0oUyl9cmV0dXJuIFMubCs9OCxPfShTKTticmVhaztjYXNlIDY6S1sxXT1mdW5jdGlvbiBZMyhTLE8pe3JldHVybiBJbihTLE8pfShTLGspO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpLWzFdPVMucmVhZF9zaGlm''@;'; put 'put ''dCgxPT09az8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK08rIiAiK2spfXJldHVybiBLfWZ1bmN0aW9uIFBrKFMsTyl7Ty5mb3JFYWNoKGZ1bmN0aW9uKGspe3N3aXRjaChrWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpj''@;'; put 'put ''YXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTM6Uy5mb250JiZTLmZvbnQuY29sb3ImJkFycmF5LmlzQXJyYXkoa1sxXS54Y2xyVmFsdWUpJiYoUy5mb250LmNvbG9yLnJnYj1oZChrWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0''@;'; put 'put ''aW9uIGlvKFMpe3JldHVybiBTLzkxNDQwMCpEZn1mdW5jdGlvbiBGayhTLE8pe3ZhciBrPXt9O2lmKFMucG9zKWsueD1pbyhTLnBvcy54KSxrLnk9aW8oUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sucj1TLmZyb20ucnx8MCxrLmM9Uy5mcm9tLmN8''@;'; put 'put ''fDAsUy5mcm9tLmNPZmYmJihrLng9aW8oUy5mcm9tLmNPZmYpKSxTLmZyb20uck9mZiYmKGsueT1pbyhTLmZyb20uck9mZikpfWlmKFMuZXh0KWsudz1pbyhTLmV4dC54KSxrLmg9aW8oUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay5DPVMudG8uYyxrLlI9''@;'; put 'put ''Uy50by5yLFMudG8uY09mZiYmKGsuWD1pbyhTLnRvLmNPZmYpKSxTLnRvLnJPZmYmJihrLlk9aW8oUy50by5yT2ZmKSl9cmV0dXJuIGt9ZnVuY3Rpb24gTDUoUyxPKXt2YXIgaz17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoUy5wb3Mpay54PWlvKFMucG9zLngpLGsueT1pbyhTLnBvcy55KTtl''@;'; put 'put ''bHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay54PU81KE8sUy5mcm9tLmMsIkMiKStpbyhTLmZyb20uY09mZiksay55PU81KE8sUy5mcm9tLnIsIlIiKStpbyhTLmZyb20uck9mZil9aWYoUy5leHQpay53PWlvKFMuZXh0LngpLGsuaD1pbyhTLmV4dC55KTtlbHNle2lm''@;'; put 'put ''KCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLnc9TzUoTyxTLnRvLmMsIkMiKStpbyhTLnRvLmNPZmYpLWsueCxrLmg9TzUoTyxTLnRvLnIsIlIiKStpbyhTLnRvLnJPZmYpLWsueX1yZXR1cm4ga31mdW5jdGlvbiBBQyhTLE8pe3ZhciBrPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEs''@;'; put 'put ''QzotMSxYOi0xLFk6LTF9O3N3aXRjaChTLnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5yLGsueT1pbyhTLmZyb20uck9mZiksay5SPVMudG8ucixrLlk9aW8oUy50by5yT2ZmKSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKSxrLkM9Uy50by5jLGsuWD1pbyhT''@;'; put 'put ''LnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5yLGsueT1pbyhTLmZyb20uck9mZik7dmFyIEs9UmYoTyxrLnIsay55K2lvKFMuZXh0LnkpKTtrLlI9S1swXSxrLlk9S1sxXSxrLmM9Uy5mcm9tLmMsay54PWlvKFMuZnJvbS5jT2ZmKTt2YXIgZWU9RzMoTyxr''@;'; put 'put ''LmMsay54K2lvKFMuZXh0LngpKTtrLkM9ZWVbMF0say5YPWVlWzFdO2JyZWFrO2Nhc2UiYWJzb2x1dGVBbmNob3IiOnZhciBzZT1SZihPLDAsaW8oUy5wb3MueSkpO2sucj1zZVswXSxrLnk9c2VbMV07dmFyIG1lPVJmKE8say5yLGsueStpbyhTLmV4dC55KSk7ay5SPW1lWzBdLGsuWT1tZVsx''@;'; put 'put ''XTt2YXIgcGU9UmYoTywwLGlvKFMucG9zLngpKTtrLmM9cGVbMF0say54PXBlWzFdO3ZhciBiZT1SZihPLGsuYyxrLngraW8oUy5leHQueCkpO2suQz1iZVswXSxrLlg9YmVbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIitTLnR5cGV9cmV0dXJuIGt9ZnVuY3Rpb24g''@;'; put 'put ''SGsoUyxPKXt2YXIgaz1TLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO09bIiFwb3MiXT17Yzora1swXSx4OitrWzFdLHI6K2tbMl0seTora1szXSxDOitrWzRdLFg6K2tbNV0sUjora1s2XSxZOitrWzddfX1mdW5jdGlvbiBsQihTLE8sayl7dmFyIEs9LTE7aWYobnVsbCE9Uy5SfHxudWxsIT1T''@;'; put 'put ''LkMpSz0wO2Vsc2V7aWYobnVsbD09Uy54fHxudWxsPT1TLnl8fG51bGw9PVMud3x8bnVsbD09Uy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lmeShTKTtLPTErMiohKFMuY3x8Uy5yKX1pZihLIT1PKXtzd2l0Y2goTyl7Y2FzZSAwOmNhc2UgMTppZigzIT1LKWJy''@;'; put 'put ''ZWFrO3ZhciBlZT1HMyhrLFMuY3x8MCxTLnh8fDApO1MuYz1lZVswXSxTLng9ZWVbMV07dmFyIHNlPVJmKGssUy5yfHwwLFMueXx8MCk7Uy5yPXNlWzBdLFMueT1zZVsxXTticmVhaztjYXNlIDM6aWYoMz09SylicmVhazt2YXIgbWU9Uy5jfHwwLHBlPVMueHx8MDtkZWxldGUgUy5jLGRlbGV0''@;'; put 'put ''ZSBTLngsUy54PShtZT9LdihrLG1lKTowKStwZTt2YXIgYmU9Uy5yfHwwLFBlPVMueXx8MDtkZWxldGUgUy5yLGRlbGV0ZSBTLnksUy55PShiZT9PNChrLGJlKTowKStQZTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrT31zd2l0Y2goTyl7''@;'; put 'put ''Y2FzZSAwOmlmKDA9PUspYnJlYWs7dmFyIFZlPUczKGssUy5jfHwwLChTLnh8fDApK1Mudyk7ZGVsZXRlIFMudyxTLkM9VmVbMF0sUy5YPVZlWzFdO3ZhciBZZT1SZihrLFMucnx8MCwoUy55fHwwKStTLmgpO2RlbGV0ZSBTLmgsUy5SPVllWzBdLFMuWT1ZZVsxXTticmVhaztjYXNlIDE6Y2Fz''@;'; put 'put ''ZSAzOmlmKDAhPUspYnJlYWs7dmFyIGV0PVMuQ3x8MCxjdD1TLlh8fDA7ZGVsZXRlIFMuQyxkZWxldGUgUy5YLFMudz1LdihrLGV0KStjdC0oUy5jP0t2KGssUy5jKTowKS0oUy54fHwwKTt2YXIgRXQ9Uy5SfHwwLGF0PVMuWXx8MDtkZWxldGUgUy5SLGRlbGV0ZSBTLlksUy5oPU80KGssRXQp''@;'; put 'put ''K2F0LShTLnI/TzQoayxTLnIpOjApLShTLnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitPfX19ZnVuY3Rpb24gY0IoUyl7dmFyIE89W1MuY3x8MCxNYXRoLnJvdW5kKFMueHx8MCksUy5yfHwwLE1hdGgucm91bmQoUy55fHwwKV07''@;'; put 'put ''cmV0dXJuKE89Ty5jb25jYXQoUy5oJiZTLnc/W09bMF0sTWF0aC5yb3VuZChPWzFdK1MudyksT1syXSxNYXRoLnJvdW5kKE9bM10rUy5oKV06W1MuQ3x8MCxNYXRoLnJvdW5kKFMuWHx8MCksUy5SfHwwLE1hdGgucm91bmQoUy5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIE80KFMsTyl7''@;'; put 'put ''aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1PPj0wOyl7dmFyIEs9KChTWyIhcm93cyJdfHxbXSlbT118fHt9KS5ocHg7bnVsbD09SyYmKEs9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09SyYmKEs9MjQpLGsrPUt9cmV0dXJuIGt9ZnVuY3Rpb24gS3Yo''@;'; put 'put ''UyxPKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLU8+PTA7KXt2YXIgSz0oKFNbIiFjb2xzIl18fFtdKVtPXXx8e30pLndweDtpZihudWxsPT1LJiYoSz0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1LKXt2YXIgZWU9e3djaDo4LjQzfTtRMChlZSks''@;'; put 'put ''U1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bT109ZWUpLEs9ZWUud3B4fWsrPUt9cmV0dXJuIGt9ZnVuY3Rpb24gTzUoUyxPLGspe3JldHVybiJDIj09az9LdihTLE8pOk80KFMsTyl9ZnVuY3Rpb24gUmYoUyxPLGspe3ZhciBLPVtPLGtdO2lmKCFTKXJldHVybiBLO2Zvcig7Oyl7dmFyIGVlPShT''@;'; put 'put ''WyIhcm93cyJdfHxbXSlbS1swXV18fHt9O2lmKGVlLmhpZGRlbikrK0tbMF07ZWxzZXt2YXIgc2U9ZWUuaHB4O2lmKG51bGw9PXNlJiYoc2U9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09c2UmJihzZT1zaCgxNSkpLEtbMV08c2UpYnJlYWs7S1swXSsrLEtb''@;'; put 'put ''MV0tPXNlfX1yZXR1cm4gS31mdW5jdGlvbiBHMyhTLE8sayl7dmFyIEs9W08sa107aWYoIVMpcmV0dXJuIEs7Zm9yKDs7KXt2YXIgZWU9KFNbIiFjb2xzIl18fFtdKVtLWzBdXXx8e307aWYoZWUuaGlkZGVufHwwPT09ZWUud3B4KSsrS1swXTtlbHNle3ZhciBzZT1lZS53cHg7aWYobnVsbD09''@;'; put 'put ''c2UmJihzZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1zZSl7dmFyIG1lPXt3Y2g6OC40M307UTAobWUpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW0tbMF1dPW1lKSxzZT1tZS53cHh9aWYoS1sxXTxzZSlicmVhaztLWzBdKyssS1sxXS09c2V9fXJldHVy''@;'; put 'put ''biBLfWZ1bmN0aW9uIFAwKFMpe3JldHVybigiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBTP1MudG9TdHJpbmcoMTYpOlMpKS5zbGljZSgtNil9ZnVuY3Rpb24gZ2QoUyxPLGspe3ZhciBLPSJzdHJpbmciPT10eXBlb2YgTz8hIWs6ISFPOyJzdHJpbmciIT10eXBlb2YgTyYmKE89ImNvbG9y''@;'; put 'put ''Iik7dmFyIGVlPSI8IitPKyIgIjtyZXR1cm4gUy5hdXRvP2VlKydhdXRvPSIxIi8+JzpTLmluZGV4JiZudWxsPT1TLnJnYj9lZSsnaW5kZXhlZD0iJytTLmluZGV4KyciLz4nOm51bGwhPVMudGhlbWU/ZWUrJ3RoZW1lPSInK1MudGhlbWUrJyInKyhTLnRpbnQ/JyB0aW50PSInK1MudGludCsn''@;'; put 'put ''Iic6IiIpKyIvPiI6bnVsbCE9Uy5yZ2I/ZWUrJ3JnYj0iJysoSz8iRkYiOiIiKStQMChTLnJnYikrJyIvPic6ZWUrIi8+In1mdW5jdGlvbiBQNChTLE8pe2lmKCFTfHxudWxsPT1TLnJnYilyZXR1cm4gTztmb3IodmFyIGs9KCIwMDAwMDAiK1MucmdiLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYp''@;'; put 'put ''LEs9W2suc2xpY2UoMCwyKSxrLnNsaWNlKDIsNCksay5zbGljZSg0LDYpXS5tYXAoZnVuY3Rpb24obWUpe3JldHVybiBwYXJzZUludChtZSwxNil9KSxlZT0wO2VlPHIwLmxlbmd0aDsrK2VlKXt2YXIgc2U9cjBbZWVdO2lmKHNlWzBdPT1LWzBdJiZzZVsxXT09S1sxXSYmc2VbMl09PUtbMl0p''@;'; put 'put ''cmV0dXJuIGVlfXJldHVybiByMC5sZW5ndGg8NjQ/KHIwLnB1c2goW0tbMF0sS1sxXSxLWzJdXSkscjAubGVuZ3RoLTEpOk99ZnVuY3Rpb24gdDEoUyl7dmFyIE89WyIiLCIiLCIiXTtpZighUylyZXR1cm5bXTt2YXIgaz0iIixLPVMmJlMucz9mdW5jdGlvbiBxdihTKXt2YXIgTz1bIiIsIiJd''@;'; put 'put ''O2lmKCFTKXJldHVybiBPO2lmKFMuc3omJihPWzBdKz0iJiIrUy5zeixPWzFdPSImMTIiK09bMV0pLFMubmFtZSYmKE9bMF0rPScmIicrUy5uYW1lKycsUmVndWxhciInLE9bMV09JyYiLSxSZWd1bGFyIicrT1sxXSksUy5ib2xkJiYoT1swXSs9IiZCIixPWzFdPSImQiIrT1sxXSksUy51bmRl''@;'; put 'put ''cmxpbmUpe3ZhciBrPTI9PVMudW5kZXJsaW5lPyImRSI6IiZVIjtPWzBdKz1rLE9bMV09aytPWzFdfXJldHVybiBTLml0YWxpYyYmKE9bMF0rPSImSSIsT1sxXT0iJkkiK09bMV0pLFMuY29sb3ImJm51bGwhPVMuY29sb3IucmdiJiYoT1swXSs9IiZLIitQMChTLmNvbG9yLnJnYiksT1sxXSs9''@;'; put 'put ''IiZLMDAwMDAwIiksUy5zdHJpa2UmJihPWzBdKz0iJlMiLE9bMV09IiZTIitPWzFdKSwic3VwZXIiPT1TLnZhbGlnbiYmKE9bMF0rPSImWCIsT1sxXT0iJlgiK09bMV0pLCJzdWIiPT1TLnZhbGlnbiYmKE9bMF0rPSImWSIsT1sxXT0iJlkiK09bMV0pLE99KFMucyk6WyIiLCIiXTtyZXR1cm4i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFM/W1MsUyxTXTpudWxsIT1TLmZpcnN0fHxudWxsIT1TLmV2ZW58fG51bGwhPVMub2RkPyhudWxsIT1TLm9kZCYmKE9bMF09dDEoUy5vZGQpWzBdKSx2b2lkIDA9PT1TLmZpcnN0JiZPWzBdJiYoT1sxXT1PWzBdKSxudWxsIT1TLmZpcnN0JiYoT1sxXT10MShTLmZp''@;'; put 'put ''cnN0KVswXSksbnVsbCE9Uy5ldmVuJiYoT1syXT10MShTLmV2ZW4pWzBdKSxPKTpTLmxlZnR8fFMuY2VudGVyfHxTLnJpZ2h0PyhTLmxlZnQmJihrKz0iJkwiK3QxKFMubGVmdClbMF0pLFMuY2VudGVyJiYoays9IiZDIit0MShTLmNlbnRlcilbMF0pLFMucmlnaHQmJihrKz0iJlIiK3QxKFMu''@;'; put 'put ''cmlnaHQpWzBdKSxbayxrLGtdKTpudWxsIT1TLnY/W2s9S1swXStTLnYucmVwbGFjZSgvJi9nLCImJiIpK0tbMV0sayxrXTpudWxsIT1TLnc/W2s9S1swXStTLncrS1sxXSxrLGtdOkFycmF5LmlzQXJyYXkoUy5SKT8oUy5SLmZvckVhY2goZnVuY3Rpb24oZWUpe2srPXQxKGVlKVswXX0pLFtr''@;'; put 'put ''LGssa10pOltdfXZhciBuOD17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQiLDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVudmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sdUI9SGUobjgpO0thLkNP''@;'; put 'put ''Tk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVjdGlvbnMiO3ZhciBoQj1QcigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxuczpZaS5tYWluWzBdfSk7S2EuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixLYS5EUkFXPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciO3ZhciBwQj17dDoidG9wIixjdHI6ImNlbnRl''@;'; put 'put ''ciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LFA1PXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRoYWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBtQigpe3ZhciBTPVtJaV07cmV0''@;'; put 'put ''dXJuIFMucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4i''@;'; put 'put ''Lz4nKSxTLmpvaW4oIiIpfWZ1bmN0aW9uIGNuZShTKXt2YXIgayxPPVNbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT1TWyIhZGF0YXR5cGUiXT8oKGs9Ty5tYXRjaCgvXmRhdGE6LiosLykpJiYoTz1PLnNsaWNlKGtbMF0ubGVuZ3RoKSksX2UuZGVjb2RlKE8pKTpPfUthLlRBQkxFPSJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgeUI9LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gT0MoUyxPLGssSyl7dmFy''@;'; put 'put ''IGVlPVsyMTYwMCwyMTYwMF0sc2U9WyJtMCwwbDAiLGVlWzFdLGVlWzBdLGVlWzFdLGVlWzBdLCIweGUiXS5qb2luKCIsIiksbWU9W1ByKCJ4bWwiLG51bGwseyJ4bWxuczp2IjpibC52LCJ4bWxuczpvIjpibC5vLCJ4bWxuczp4IjpibC54LCJ4bWxuczptdiI6YmwubXZ9KS5yZXBsYWNlKC9c''@;'; put 'put ''Lz4vLCI+IiksUHIoIm86c2hhcGVsYXlvdXQiLFByKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0In0pLHsidjpleHQiOiJlZGl0In0pXSxwZT0xMDI0KlMsYmU9a3x8W107YmUubGVuZ3RoPjAmJm1lLnB1c2goUHIoInY6c2hhcGV0eXBlIixbUHIoInY6c3Ryb2tlIixudWxsLHtqb2lu''@;'; put 'put ''c3R5bGU6Im1pdGVyIn0pLFByKCJ2OnBhdGgiLG51bGwse3NoYWRvd29rOiJmIixleHRydXNpb25vazoiZiIsc3Ryb2tlb2s6ImYiLGZpbGxvazoiZiIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pLFByKCJvOmxvY2siLG51bGwseyJ2OmV4dCI6ImVkaXQiLHNoYXBldHlwZToidCJ9KV0uam9p''@;'; put 'put ''bigiIikse2lkOiJfeDAwMDBfdDIwMSIsY29vcmRzaXplOmVlLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOnNlfSkpLGJlLmZvckVhY2goZnVuY3Rpb24oVmUpeysrcGUsbWU9bWUuY29uY2F0KGZ1bmN0aW9uIGk4KFMsTyl7dmFyIGs9e2lkOiJfeDAwMDBfcyIrTyx0eXBlOiIjX3gwMDAw''@;'; put 'put ''X3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdfHwiTGlzdCI9PVNbIiF0eXBlIl18fCJEcm9wIj09U1siIXR5cGUiXSkmJihrLnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1TWyIhdHlwZSJdJiYoay5m''@;'; put 'put ''aWxsZWQ9ImYiKTt2YXIgSz0iIjtTLnQmJlBDW1NbIiF0eXBlIl1dJiYoSz1QQ1tTWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxMcihTLnQpKSk7dmFyIGVlPVtdO3JldHVybiBTLm1hY3JvJiZlZS5wdXNoKEhhKCJ4OkZtbGFNYWNybyIsUy5tYWNybykpLFMubGluayYmZWUucHVzaChIYSgi''@;'; put 'put ''eDpGbWxhTGluayIsUy5saW5rKSksUy52YWwmJmVlLnB1c2goSGEoIlJhZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyhTLnZhbCkpKSxTLnJlZiYmZWUucHVzaChIYSgieDpGbWxhUmFuZ2UiLFMucmVmKSksUy5zZWwm''@;'; put 'put ''JiJMaXN0Ij09U1siIXR5cGUiXSYmZWUucHVzaChIYSgieDpTZWxUeXBlIixTLnNlbCkpLFMubWluJiZlZS5wdXNoKEhhKCJ4Ok1pbiIsU3RyaW5nKFMubWluKSkpLFMubWF4JiZlZS5wdXNoKEhhKCJ4Ok1heCIsU3RyaW5nKFMubWF4KSkpLFMuc3RlcCYmZWUucHVzaChIYSgieDpJbmMiLFN0''@;'; put 'put ''cmluZyhTLnN0ZXApKSksUy5wYWdlJiZlZS5wdXNoKEhhKCJ4OlBhZ2UiLFN0cmluZyhTLnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK0x1KGspKyI+Il0pLmNvbmNhdChGQ1tTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbS10pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlw''@;'; put 'put ''ZT0iJytTWyIhdHlwZSJdKyciPicsSGEoIng6QW5jaG9yIixjQihTWyIhcG9zIl0pKSxIYSgieDpQcmludE9iamVjdCIsIkZhbHNlIildKS5jb25jYXQoZWUpLmNvbmNhdChiQltTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXSl9KFZlLHBl''@;'; put 'put ''KSl9KTt2YXIgUGU9T3x8W107cmV0dXJuIFBlLmxlbmd0aD4wJiZtZS5wdXNoKFByKCJ2OnNoYXBldHlwZSIsW1ByKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxQcigidjpwYXRoIixudWxsLHtncmFkaWVudHNoYXBlb2s6InQiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9''@;'; put 'put ''KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMiIsY29vcmRzaXplOmVlLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOnNlfSkpLFBlLmZvckVhY2goZnVuY3Rpb24oVmUpeysrcGUsbWU9bWUuY29uY2F0KGZ1bmN0aW9uIEp2KFMsTyxrKXt2YXIgSz1ObyhTWzBdKSxlZT1TWzFdLmZpbGx8''@;'; put 'put ''fHt9O1NbMV0ucyYmKGVlPXt0eXBlOlNbMV0ucy5wYXR0ZXJuVHlwZXx8InNvbGlkIn0sU1sxXS5zLmZnQ29sb3ImJihlZS5jb2xvcjI9ZWUuY29sb3IxPSIjIitQMChTWzFdLnMuZmdDb2xvci5yZ2IpKSxTWzFdLnMuYmdDb2xvciYmKGVlLmNvbG9yMj0iIyIrUDAoU1sxXS5zLmJnQ29sb3Iu''@;'; put 'put ''cmdiKSkpO3ZhciBzZT17Y29sb3IyOmVlLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6ZWUudHlwZXx8ImdyYWRpZW50In07ImdyYWRpZW50Ij09c2UudHlwZSYmKHNlLmFuZ2xlPSItMTgwIik7dmFyIG1lPSJncmFkaWVudCI9PXNlLnR5cGU/UHIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGll''@;'; put 'put ''bnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLHBlPVByKCJ2OmZpbGwiLG1lLHNlKSxiZT17fTtTWzFdLnNoYWRvdyYmKFNbMV0uc2hhZG93LmNvbG9yJiYoYmUuY29sb3I9U1sxXS5zaGFkb3cuY29sb3IpLFNbMV0uc2hhZG93Lm9uJiYoYmUub249U1sxXS5zaGFkb3cub24pKSxi''@;'; put 'put ''ZS5vYnNjdXJlZD0idCI7dmFyIFBlPSEwLFZlPSEwLFllPVNbMV1bIiFwb3MiXT9xdChTWzFdWyIhcG9zIl0pOm51bGw7cmV0dXJuIFllJiYoVmU9bnVsbD09WWUuUiYmbnVsbD09WWUuQyYmbnVsbD09WWUuWCYmbnVsbD09WWUuWSxQZT0hWWUuciYmIVllLmMsbEIoWWUsMCxrKSksWyI8djpz''@;'; put 'put ''aGFwZSIrTHUoe2lkOiJfeDAwMDBfcyIrTyx0eXBlOiIjX3gwMDAwX3QyMDIiLHN0eWxlOiJwb3NpdGlvbjphYnNvbHV0ZTsgbWFyZ2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRwdDt6LWluZGV4OjEwIisoU1sxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5''@;'; put 'put ''OmhpZGRlbiI6IiIpLGZpbGxjb2xvcjplZS5jb2xvcjF8fCIjRUNGQUQ0IixzdHJva2Vjb2xvcjooU1sxXS5zdHJva2V8fHt9KS5jb2xvcnx8IiNlZGVhYTEifSkrIj4iLHBlLFByKCJ2OnNoYWRvdyIsbnVsbCxiZSksUHIoInY6cGF0aCIsbnVsbCx7Im86Y29ubmVjdHR5cGUiOiJub25lIn0p''@;'; put 'put ''LCc8djp0ZXh0Ym94PjxkaXYgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC9kaXY+PC92OnRleHRib3g+JywnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSJOb3RlIj4nLFBlPyI8eDpNb3ZlV2l0aENlbGxzLz4iOiIiLFZlPyI8eDpTaXplV2l0aENlbGxzLz4iOiIiLEhhKCJ4OkFuY2hvciIs''@;'; put 'put ''WWU/Y0IoWWUpOlNbMV0ucmF3YW5jaG9yfHxbSy5jKzEsMCxLLnIrMSwwLEsuYyszLDIwLEsucis1LDIwXS5qb2luKCIsIikpLEhhKCJ4OkF1dG9GaWxsIiwiRmFsc2UiKSxIYSgieDpSb3ciLFN0cmluZyhLLnIpKSxIYSgieDpDb2x1bW4iLFN0cmluZyhLLmMpKSxTWzFdLmhpZGRlbj8iIjoi''@;'; put 'put ''PHg6VmlzaWJsZS8+IiwiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdfShWZSxwZSxLKSl9KSxtZS5wdXNoKCI8L3htbD4iKSxtZS5qb2luKCIiKX12YXIgYkI9e0J1dHRvbjpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OlRleHRIQWxpZ24+Q2VudGVyPC94OlRl''@;'; put 'put ''eHRIQWxpZ24+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iXSxHQm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6Tm9UaHJlZUQvPiJdLExhYmVsOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+''@;'; put 'put ''IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Il0sUmFkaW86WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWdu''@;'; put 'put ''PiIsIjx4Ok5vVGhyZWVELz4iXSxDaGVja2JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJl''@;'; put 'put ''ZUQvPiJdLERyb3A6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OlNlbFR5cGU+U2luZ2xlPC94OlNlbFR5cGU+IiwiPHg6RHJvcFN0eWxlPkNvbWJvPC94OkRyb3BTdHlsZT4iLCI8eDpMQ1Q+Tm9ybWFs''@;'; put 'put ''PC94OkxDVD4iLCI8eDpEcm9wTGluZXM+NDwveDpEcm9wTGluZXM+Il0sTGlzdDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6VmFsPjA8L3g6VmFsPiIsIjx4''@;'; put 'put ''Ok1pbj4wPC94Ok1pbj4iLCI8eDpNYXg+NTwveDpNYXg+IiwiPHg6SW5jPjE8L3g6SW5jPiIsIjx4OlBhZ2U+NDwveDpQYWdlPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNjcm9sbDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4Okhvcml6Lz4iLCI8eDpEeD4xNTwveDpEeD4iXSxTcGluOlsiPHg6''@;'; put 'put ''RHg+MTU8L3g6RHg+Il19LFBDPXtCdXR0b246Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Zm9udCBmYWNlPSdDYWxpYnJpJyBzaXplPScyNDAnIGNvbG9yPScjMDAwMDAw''@;'; put 'put ''Jz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsR0JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAn''@;'; put 'put ''IGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsUmFkaW86Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdy''@;'; put 'put ''YW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nYXV0byc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLExhYmVsOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZh''@;'; put 'put ''Y2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixDaGVja2JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsc2hlZXRqczoiZGFmdXEifSxGQz17QnV0dG9uOlsnPHY6ZmlsbCBjb2xvcjI9IiNmMGYwZjAgWzY3XSIgbzpkZXRlY3Rt''@;'; put 'put ''b3VzZWNsaWNrPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxHQm94OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxEcm9wOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMaXN0OlsnPG86''@;'; put 'put ''bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTcGluOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTY3JvbGw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExhYmVsOlsnPG86''@;'; put 'put ''bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxSYWRpbzpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLENoZWNrYm94OlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ry''@;'; put 'put ''b2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sc2hlZXRqczpbXX07ZnVuY3Rpb24gQmsoUyxPLGssSyl7dmFyIGVlPXsiIWlkIjp7fX0sc2U9W1ByKCJ4bWwiLG51bGwseyJ4bWxuczp2IjpibC52LCJ4bWxuczpvIjpibC5vLCJ4''@;'; put 'put ''bWxuczp4IjpibC54fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6ImVkaXQifSksJzx2OnNoYXBldHlwZSBpZD0iX3gwMDAwX3Q3NSIgY29vcmRzaXplPSIyMTYwMCwyMTYw''@;'; put 'put ''MCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2luc3R5bGU9Im1pdGVyIi8+JywiPHY6Zm9ybXVsYXM+IiwnPHY6ZiBlcW49ImlmIGxpbmVEcmF3biBwaXhl''@;'; put 'put ''bExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhl''@;'; put 'put ''bEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVs''@;'; put 'put ''SGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIgbzpjb25uZWN0dHlwZT0icmVjdCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIGFzcGVjdHJhdGlvPSJ0''@;'; put 'put ''Ii8+JywiPC92OnNoYXBldHlwZT4iXSxtZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7S1twZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihiZSl7S1twZV1bYmVdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUGUpe2lmKEFycmF5LmlzQXJyYXkoS1twZV1bYmVdW1BlXSkpZm9yKHZhciBWZT0wO1ZlPEtbcGVdW2JlXVtQZV0ubGVuZ3RoOysrVmUpaWYoS1twZV1bYmVdW1BlXVtWZV0pe3ZhciBZZT1LW3BlXVtiZV1bUGVdW1ZlXTtpZigicmVtb3RlIj09WWVbIiFkYXRhdHlwZSJdKXRo''@;'; put 'put ''cm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7cmkoUywieGwvbWVkaWEvaW1hZ2UiK21lKyIuanBnIik7KSsrbWU7Uy5maWxlKCJ4bC9tZWRpYS9pbWFnZSIrbWUrIi5qcGciLGNuZShZZSkse2JpbmFyeTohMH0pLEVyKGVlLC0xLCIuLi9tZWRp''@;'; put 'put ''YS9pbWFnZSIrbWUrIi5qcGciLEthLklNRyk7dmFyIGV0PSJfeDAwMDBfcyIrKDEwMjUrWWUuX2NudCksY3Q9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoWWUuX2NudCsxKSsiOyI7Y3QrPSJ3aWR0aDoiK1llWyIhcG9zIl0udysicHg7''@;'; put 'put ''IixjdCs9ImhlaWdodDoiK1llWyIhcG9zIl0uaCsicHg7Ijt2YXIgRXQ9UGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1iZSYmKEV0Kz1iZS50b1VwcGVyQ2FzZSgpKSxLW3BlXVtiZV1bUGVdLmxlbmd0aD4xJiYoRXQrPVZlKSxz''@;'; put 'put ''ZS5wdXNoKFByKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhZZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpFdCwibzpzcGlkIjpldCx0eXBlOiIjX3gwMDAw''@;'; put 'put ''X3Q3NSIsc3R5bGU6Y3R9KSl9fSl9KX0pLHNlLnB1c2goIjwveG1sPiIpLFMuZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIraysiSEYudm1sIixzZS5qb2luKCIiKSksUy5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitrKyJIRi52bWwucmVscyIsa2koZWUpKX1LYS5D''@;'; put 'put ''TU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgUXY9UHIoImNvbW1lbnRzIixudWxsLHt4bWxuczpZaS5tYWluWzBdfSk7ZnVuY3Rpb24gSEMoUyl7dmFyIE89W0lpLFF2XSxrPVtdO3Jl''@;'; put 'put ''dHVybiBPLnB1c2goIjxhdXRob3JzPiIpLFMuZm9yRWFjaChmdW5jdGlvbihLKXtLWzFdLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBzZT1McihlZS5hKTtrLmluZGV4T2Yoc2UpPi0xfHwoay5wdXNoKHNlKSxPLnB1c2goIjxhdXRob3I+IitzZSsiPC9hdXRob3I+IikpfSl9KSxPLnB1c2go''@;'; put 'put ''IjwvYXV0aG9ycz4iKSxPLnB1c2goIjxjb21tZW50TGlzdD4iKSxTLmZvckVhY2goZnVuY3Rpb24oSyl7S1sxXS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtPLnB1c2goJzxjb21tZW50IHJlZj0iJytLWzBdKyciIGF1dGhvcklkPSInK2suaW5kZXhPZihMcihlZS5hKSkrJyI+PHRleHQ+JyksTy5w''@;'; put 'put ''dXNoKGVlLlI/UXMoZWUuUik6SGEoInQiLG51bGw9PWVlLnQ/IiI6THIoZWUudCkpKSxPLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLE8ucHVzaCgiPC9jb21tZW50TGlzdD4iKSxPLmxlbmd0aD4yJiYoT1tPLmxlbmd0aF09IjwvY29tbWVudHM+IixPWzFdPU9bMV0ucmVwbGFjZSgi''@;'; put 'put ''Lz4iLCI+IikpLE8uam9pbigiIil9dmFyIHdCPWd1O2Z1bmN0aW9uIE5DKFMpe3ZhciBPPXlpKCksaz1bXTtyZXR1cm4gRnIoTywiQnJ0QmVnaW5Db21tZW50cyIpLEZyKE8sIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSxTLmZvckVhY2goZnVuY3Rpb24oSyl7S1sxXS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKGVlKXtrLmluZGV4T2YoZWUuYSk+LTF8fChrLnB1c2goZWUuYS5zbGljZSgwLDU0KSksRnIoTywiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gdW5lKFMpe3JldHVybiBGYyhTLnNsaWNlKDAsNTQpKX0oZWUuYSkpKX0pfSksRnIoTywiQnJ0RW5kQ29tbWVudEF1dGhvcnMiKSxGcihP''@;'; put 'put ''LCJCcnRCZWdpbkNvbW1lbnRMaXN0IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEspe0tbMV0uZm9yRWFjaChmdW5jdGlvbihlZSl7ZWUuaWF1dGhvcj1rLmluZGV4T2YoZWUuYSk7dmFyIHNlPXtzOk5vKEtbMF0pLGU6Tm8oS1swXSl9O0ZyKE8sIkJydEJlZ2luQ29tbWVudCIsZnVuY3Rpb24gX0Io''@;'; put 'put ''UyxPKXtyZXR1cm4gbnVsbD09TyYmKE89eW4oMzYpKSxPLndyaXRlX3NoaWZ0KDQsU1sxXS5pYXV0aG9yKSxnZihTWzBdLE8pLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPfShbc2UsZWVdKSksZWUu''@;'; put 'put ''dCYmZWUudC5sZW5ndGg+MCYmRnIoTywiQnJ0Q29tbWVudFRleHQiLGZ1bmN0aW9uIG5oKFMsTyl7dmFyIGs9ITE7cmV0dXJuIG51bGw9PU8mJihrPSEwLE89eW4oMjMrNCpTLnQubGVuZ3RoKSksTy53cml0ZV9zaGlmdCgxLDEpLEZjKFMudCxPKSxPLndyaXRlX3NoaWZ0KDQsMSksZnVuY3Rp''@;'; put 'put ''b24gY3YoUyxPKXtPfHwoTz15big0KSksTy53cml0ZV9zaGlmdCgyLFMuaWNofHwwKSxPLndyaXRlX3NoaWZ0KDIsUy5pZm50fHwwKX0oe2ljaDowLGlmbnQ6MH0sTyksaz9PLnNsaWNlKDAsTy5sKTpPfShlZSkpLEZyKE8sIkJydEVuZENvbW1lbnQiKSxkZWxldGUgZWUuaWF1dGhvcn0pfSks''@;'; put 'put ''RnIoTywiQnJ0RW5kQ29tbWVudExpc3QiKSxGcihPLCJCcnRFbmRDb21tZW50cyIpLE8uZW5kKCl9dmFyIFVrPSJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiLFlrPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtLYS5EUz0iaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsS2EuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBINT1mdW5jdGlvbigpe3ZhciBT''@;'; put 'put ''PS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csTz17cjowLGM6MH07ZnVuY3Rpb24gayhLLGVlLHNlLG1lKXt2YXIgcGU9ITEsYmU9ITE7MD09c2UubGVuZ3RoP2JlPSEwOiJbIj09c2UuY2hhckF0''@;'; put 'put ''KDApJiYoYmU9ITAsc2U9c2Uuc2xpY2UoMSwtMSkpLDA9PW1lLmxlbmd0aD9wZT0hMDoiWyI9PW1lLmNoYXJBdCgwKSYmKHBlPSEwLG1lPW1lLnNsaWNlKDEsLTEpKTt2YXIgUGU9c2UubGVuZ3RoPjA/MHxwYXJzZUludChzZSwxMCk6MCxWZT1tZS5sZW5ndGg+MD8wfHBhcnNlSW50KG1lLDEw''@;'; put 'put ''KTowO3JldHVybiBwZT9WZSs9Ty5jOi0tVmUsYmU/UGUrPU8ucjotLVBlLGVlKyhwZT8iIjoiJCIpK1RhKFZlKSsoYmU/IiI6IiQiKStqaShQZSl9cmV0dXJuIGZ1bmN0aW9uKGVlLHNlKXtyZXR1cm4gTz1zZSxlZS5yZXBsYWNlKFMsayl9fSgpLG0yPS8oXnxbXi5fQS1aMC05XSkoWyRdPyko''@;'; put 'put ''W0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXowLTldKS9nLEg0PWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGZ1bmN0aW9uKE8sayl7cmV0dXJuIE8ucmVwbGFjZShtMixmdW5jdGlvbihLLGVlLHNlLG1lLHBlLGJlKXt2YXIgUGU9Q2EobWUpLShzZT8wOmsuYyksVmU9X28oYmUpLShwZT8wOmsucik7cmV0dXJuIGVlKyJSIisoMD09VmU/IiI6cGU/VmUrMToiWyIrVmUrIl0iKSsiQyIr''@;'; put 'put ''KDA9PVBlPyIiOnNlP1BlKzE6IlsiK1BlKyJdIil9KX19KCk7ZnVuY3Rpb24gR2soUyxPKXtyZXR1cm4gUy5yZXBsYWNlKG0yLGZ1bmN0aW9uKGssSyxlZSxzZSxtZSxwZSl7cmV0dXJuIEsrKCIkIj09ZWU/ZWUrc2U6VGEoQ2Eoc2UpK08uYykpKygiJCI9PW1lP21lK3BlOmppKF9vKHBlKStP''@;'; put 'put ''LnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oayxLLGVlKXtyZXR1cm4gamkoX28oSykrTy5yKSsiOiIramkoX28oZWUpK08ucil9KX1mdW5jdGlvbiBkbmUoUyxPLGspe3ZhciBlZT1NcyhPKS5zLHNlPU5vKGspO3JldHVybiBHayhTLHtyOnNlLnItZWUucixjOnNlLmMt''@;'; put 'put ''ZWUuY30pfWZ1bmN0aW9uIEVCKFMpe3JldHVybiBTLnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24geXUoUyl7Uy5sKz0xfWZ1bmN0aW9uIE40KFMsTyl7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE9PU8/MToyKTtyZXR1cm5bMTYzODMmayxrPj4xNCYxLGs+PjE1JjFdfWZ1bmN0aW9uIFZD''@;'; put 'put ''KFMsTyxrKXt2YXIgSz0yO2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiAkayhTKTsxMj09ay5iaWZmJiYoSz00KX12YXIgZWU9Uy5yZWFkX3NoaWZ0KEspLHNlPVMucmVhZF9zaGlmdChLKSxtZT1ONChTLDIpLHBlPU40KFMsMik7cmV0dXJue3M6e3I6ZWUsYzptZVswXSxj''@;'; put 'put ''UmVsOm1lWzFdLHJSZWw6bWVbMl19LGU6e3I6c2UsYzpwZVswXSxjUmVsOnBlWzFdLHJSZWw6cGVbMl19fX1mdW5jdGlvbiAkayhTKXt2YXIgTz1ONChTLDIpLGs9TjQoUywyKSxLPVMucmVhZF9zaGlmdCgxKSxlZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6T1swXSxjOkssY1JlbDpP''@;'; put 'put ''WzFdLHJSZWw6T1syXX0sZTp7cjprWzBdLGM6ZWUsY1JlbDprWzFdLHJSZWw6a1syXX19fWZ1bmN0aW9uIEtrKFMsTyxrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gQUIoUyl7dmFyIE89TjQoUywyKSxrPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57cjpPWzBd''@;'; put 'put ''LGM6ayxjUmVsOk9bMV0sclJlbDpPWzJdfX0oUyk7dmFyIEs9Uy5yZWFkX3NoaWZ0KGsmJjEyPT1rLmJpZmY/NDoyKSxlZT1ONChTLDIpO3JldHVybntyOkssYzplZVswXSxjUmVsOmVlWzFdLHJSZWw6ZWVbMl19fWZ1bmN0aW9uIEJDKFMpe3ZhciBPPVMucmVhZF9zaGlmdCgyKSxrPVMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKTtyZXR1cm57cjpPLGM6MjU1JmssZlF1b3RlZDohISgxNjM4NCZrKSxjUmVsOms+PjE1LHJSZWw6az4+MTV9fWZ1bmN0aW9uIGVEKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBaQyhTLE8pe3ZhciBrPVtTLnJlYWRfc2hpZnQo''@;'; put 'put ''MSldO2lmKDEyPT1PKXN3aXRjaChrWzBdKXtjYXNlIDI6a1swXT00O2JyZWFrO2Nhc2UgNDprWzBdPTE2O2JyZWFrO2Nhc2UgMDprWzBdPTE7YnJlYWs7Y2FzZSAxOmtbMF09Mn1zd2l0Y2goa1swXSl7Y2FzZSA0OmtbMV09dW8oUywxKT8iVFJVRSI6IkZBTFNFIiwxMiE9TyYmKFMubCs9Nyk7''@;'; put 'put ''YnJlYWs7Y2FzZSAzNzpjYXNlIDE2OmtbMV09TWNbU1tTLmxdXSxTLmwrPTEyPT1PPzQ6ODticmVhaztjYXNlIDA6Uy5sKz04O2JyZWFrO2Nhc2UgMTprWzFdPVBsKFMpO2JyZWFrO2Nhc2UgMjprWzFdPVgwKFMsMCx7YmlmZjpPPjAmJk88OD8yOk99KTticmVhaztkZWZhdWx0OnRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQmFkIFNlckFyOiAiK2tbMF0pfXJldHVybiBrfWZ1bmN0aW9uIGlEKFMsTyxrKXtmb3IodmFyIEs9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxlZT1bXSxzZT0wO3NlIT1LOysrc2UpZWUucHVzaCgoMTI9PWsuYmlmZj9tdTpzMikoUyw4KSk7cmV0dXJuIGVlfWZ1bmN0''@;'; put 'put ''aW9uIE5CKFMsTyxrKXt2YXIgSz0wLGVlPTA7MTI9PWsuYmlmZj8oSz1TLnJlYWRfc2hpZnQoNCksZWU9Uy5yZWFkX3NoaWZ0KDQpKTooZWU9MStTLnJlYWRfc2hpZnQoMSksSz0xK1MucmVhZF9zaGlmdCgyKSksay5iaWZmPj0yJiZrLmJpZmY8OCYmKC0tSywwPT0tLWVlJiYoZWU9MjU2KSk7''@;'; put 'put ''Zm9yKHZhciBzZT0wLG1lPVtdO3NlIT1LJiYobWVbc2VdPVtdKTsrK3NlKWZvcih2YXIgcGU9MDtwZSE9ZWU7KytwZSltZVtzZV1bcGVdPVpDKFMsay5iaWZmKTtyZXR1cm4gbWV9ZnVuY3Rpb24gVjUoUyxPLGspe3JldHVybiBTLmwrPTIsW0JDKFMpXX1mdW5jdGlvbiBXQyhTKXtyZXR1cm4g''@;'; put 'put ''Uy5sKz02LFtdfXZhciBXQj1WNSxZQj1XQyxHQj1XQywkQj1WNTtmdW5jdGlvbiBvRChTKXtyZXR1cm4gUy5sKz0yLFtFYyhTKSwxJlMucmVhZF9zaGlmdCgyKV19dmFyIFlDPVY1LF9uZT1vRCx3bmU9V0MsR0M9VjUsQ25lPVY1LFNuZT1bIkRhdGEiLCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/''@;'; put 'put ''RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLGl5PXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24gUEIoUyxPLGspe3JldHVybiBTLmwrKyxrJiYxMj09ay5iaWZmP1tT''@;'; put 'put ''LnJlYWRfc2hpZnQoNCwiaSIpLDBdOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpJbn0sMzp7bjoiUHRnQWRkIixmOnl1fSw0OntuOiJQdGdTdWIiLGY6eXV9LDU6e246IlB0Z011bCIsZjp5dX0sNjp7bjoiUHRnRGl2''@;'; put 'put ''IixmOnl1fSw3OntuOiJQdGdQb3dlciIsZjp5dX0sODp7bjoiUHRnQ29uY2F0IixmOnl1fSw5OntuOiJQdGdMdCIsZjp5dX0sMTA6e246IlB0Z0xlIixmOnl1fSwxMTp7bjoiUHRnRXEiLGY6eXV9LDEyOntuOiJQdGdHZSIsZjp5dX0sMTM6e246IlB0Z0d0IixmOnl1fSwxNDp7bjoiUHRnTmUi''@;'; put 'put ''LGY6eXV9LDE1OntuOiJQdGdJc2VjdCIsZjp5dX0sMTY6e246IlB0Z1VuaW9uIixmOnl1fSwxNzp7bjoiUHRnUmFuZ2UiLGY6eXV9LDE4OntuOiJQdGdVcGx1cyIsZjp5dX0sMTk6e246IlB0Z1VtaW51cyIsZjp5dX0sMjA6e246IlB0Z1BlcmNlbnQiLGY6eXV9LDIxOntuOiJQdGdQYXJlbiIs''@;'; put 'put ''Zjp5dX0sMjI6e246IlB0Z01pc3NBcmciLGY6eXV9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gSEIoUyxPLGspe3JldHVybiBTLmwrKyxVYShTLDAsayl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gRW5lKFMsTyxrKXtyZXR1cm4gUy5sKz01LFMubCs9MixTLmwrPTI9PWsuYmlm''@;'; put 'put ''Zj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIEtCKFMsTyxrKXtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gVUMoUyl7cmV0dXJuIFMubCsrLE1jW1MucmVhZF9zaGlm''@;'; put 'put ''dCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiBONShTKXtyZXR1cm4gUy5sKyssMCE9PVMucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gRkIoUyl7cmV0dXJuIFMubCsrLFMucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24g''@;'; put 'put ''VjQoUyl7cmV0dXJuIFMubCsrLFBsKFMpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGduZShTLE8sayl7dmFyIEs9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NjoxMj09ay5iaWZmPzE0OjcsW0tdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gTEIo''@;'; put 'put ''UyxPLGspe3ZhciBLPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZjw9Mz8xOjIpO3JldHVybltlaltlZV0scERbZWVdLEtdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gT0IoUyxPLGspe3ZhciBLPVNbUy5sKytdLGVlPVMucmVhZF9z''@;'; put 'put ''aGlmdCgxKSxzZT1rJiZrLmJpZmY8PTM/Wzg4PT1LPy0xOjAsUy5yZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiByRChTKXtyZXR1cm5bU1tTLmwrMV0+PjcsMzI3NjcmUy5yZWFkX3NoaWZ0KDIpXX0oUyk7cmV0dXJuW2VlLCgwPT09c2VbMF0/cEQ6clMpW3NlWzFdXV19fSwzNTp7bjoiUHRnTmFt''@;'; put 'put ''ZSIsZjpmdW5jdGlvbiBWQihTLE8sayl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLHNlPVMucmVhZF9zaGlmdCgha3x8ay5iaWZmPj04PzQ6Mik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9ODticmVhaztjYXNlIDU6Uy5sKz0xMn1y''@;'; put 'put ''ZXR1cm5bSywwLHNlXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gUkIoUyxPLGspe3ZhciBLPSg5NiZTW1MubF0pPj41O3JldHVybiBTLmwrPTEsW0ssS2soUywwLGspXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIHFrKFMsTyxrKXtyZXR1cm5bKDk2JlNbUy5sKytdKT4+NSxW''@;'; put 'put ''QyhTLDAsayldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gYUQoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz1rJiYyPT1rLmJpZmY/Mzo0LFtLLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixm''@;'; put 'put ''OklufSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6SW59LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIHluZShTLE8sayl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBi''@;'; put 'put ''bmUoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz00LGsuYmlmZjw4JiZTLmwtLSwxMj09ay5iaWZmJiYoUy5sKz0yKSxbS119fSw0Mzp7bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBKayhTLE8sayl7dmFyIEs9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4g''@;'; put 'put ''Uy5sKz1rJiZrLmJpZmY+OD8xMjprLmJpZmY8OD82OjgsW0tdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gdEQoUyxPLGspe3ZhciBLPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgZWU9ZnVuY3Rpb24gTGYoUyxPLGspe3ZhciBLPWsmJmsuYmlmZj9rLmJpZmY6ODtpZihLPj0yJiZL''@;'; put 'put ''PD01KXJldHVybiBmdW5jdGlvbiBhOChTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMSksSz0oMzI3NjgmTyk+PjE1LGVlPSgxNjM4NCZPKT4+MTQ7cmV0dXJuIE8mPTE2MzgzLDE9PUsmJk8+PTgxOTImJihPLT0xNjM4NCksMT09ZWUmJms+PTEyOCYmKGstPTI1Niks''@;'; put 'put ''e3I6TyxjOmssY1JlbDplZSxyUmVsOkt9fShTKTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KEs+PTEyPzQ6Miksc2U9Uy5yZWFkX3NoaWZ0KDIpLG1lPSgxNjM4NCZzZSk+PjE0LHBlPSgzMjc2OCZzZSk+PjE1O2lmKHNlJj0xNjM4MywxPT1wZSlmb3IoO2VlPjUyNDI4NzspZWUtPTEwNDg1NzY7aWYo''@;'; put 'put ''MT09bWUpZm9yKDtzZT44MTkxOylzZS09MTYzODQ7cmV0dXJue3I6ZWUsYzpzZSxjUmVsOm1lLHJSZWw6cGV9fShTLDAsayk7cmV0dXJuW0ssZWVdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIHBuZShTLE8sayl7dmFyIEs9KDk2JlNbUy5sKytdKT4+NSxlZT1mdW5jdGlvbiBUQihT''@;'; put 'put ''LE8sayl7aWYoay5iaWZmPDgpcmV0dXJuICRrKFMpO3ZhciBLPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksZWU9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxzZT1ONChTLDIpLG1lPU40KFMsMik7cmV0dXJue3M6e3I6SyxjOnNlWzBdLGNSZWw6c2VbMV0sclJlbDpzZVsyXX0s''@;'; put 'put ''ZTp7cjplZSxjOm1lWzBdLGNSZWw6bWVbMV0sclJlbDptZVsyXX19fShTLDAsayk7cmV0dXJuW0ssZWVdfX0sNDY6e246IlB0Z01lbUFyZWFOIixmOmZ1bmN0aW9uIG55KFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDQ3OntuOiJQdGdNZW1Ob01l''@;'; put 'put ''bU4iLGY6ZnVuY3Rpb24gcnkoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNTc6e246IlB0Z05hbWVYIixmOmZ1bmN0aW9uIEJCKFMsTyxrKXtyZXR1cm4gNT09ay5iaWZmP2Z1bmN0aW9uIGpCKFMpe3ZhciBPPVMucmVhZF9zaGlmdCgxKT4+PjUm''@;'; put 'put ''MyxrPVMucmVhZF9zaGlmdCgyLCJpIik7Uy5sKz04O3ZhciBLPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0xMixbTyxrLEtdfShTKTpbUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCldfX0sNTg6e246IlB0Z1JlZjNkIixmOmZ1bmN0aW9u''@;'; put 'put ''IG5EKFMsTyxrKXt2YXIgSz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIGVlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gayYmNT09ay5iaWZmJiYoUy5sKz0xMiksW0ssZWUsS2soUywwLGspXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gWGsoUyxPLGspe3ZhciBLPSg5NiZTW1Mu''@;'; put 'put ''bCsrXSk+PjUsZWU9Uy5yZWFkX3NoaWZ0KDIsImkiKTtpZihrJiY1PT09ay5iaWZmKVMubCs9MTI7cmV0dXJuW0ssZWUsVkMoUywwLGspXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBvOChTLE8sayl7dmFyIEs9KDk2JlNbUy5sKytdKT4+NSxlZT1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''c2U9NDtpZihrKXN3aXRjaChrLmJpZmYpe2Nhc2UgNTpzZT0xNTticmVhaztjYXNlIDEyOnNlPTZ9cmV0dXJuIFMubCs9c2UsW0ssZWVdfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBmbmUoUyxPLGspe3ZhciBLPSg5NiZTW1MubCsrXSk+PjUsZWU9Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LHNlPTg7aWYoaylzd2l0Y2goay5iaWZmKXtjYXNlIDU6Uy5sKz0xMixzZT02O2JyZWFrO2Nhc2UgMTI6c2U9MTJ9cmV0dXJuIFMubCs9c2UsW0ssZWVdfX0sMjU1Ont9fSxLQz17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5''@;'; put 'put ''OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1''@;'; put 'put ''Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgUyBpbiBLQylpeVtTXT1peVtLQ1tTXV19KCk7dmFyIHFDPXsxOntuOiJQdGdFbGZMZWwiLGY6b0R9LDI6e246IlB0Z0VsZlJ3IixmOkdDfSwzOntuOiJQdGdF''@;'; put 'put ''bGZDb2wiLGY6V0J9LDY6e246IlB0Z0VsZlJ3ViIsZjpDbmV9LDc6e246IlB0Z0VsZkNvbFYiLGY6JEJ9LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOllDfSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6d25lfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpZQn0sMTU6e246IlB0Z0VsZkNvbFNWIixm''@;'; put 'put ''OkdCfSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpfbmV9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIE1uZShTKXtTLmwrPTI7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPVMucmVhZF9zaGlmdCgyKSxzZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMik7cmV0dXJue2l4dGk6Tyxjb2x0eXBlOjMmayxydDpTbmVbaz4+MiYzMV0saWR4OkssYzplZSxDOnNlfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24geG5lKFMpe3JldHVybiBTLmwrPTIsW1MucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LCQzPXswOntuOiJQdGdBdHRy''@;'; put 'put ''Tm9vcCIsZjpmdW5jdGlvbiAkQyhTKXtyZXR1cm4gUy5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24ga0IoUyxPLGspe3ZhciBLPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbS119fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gdm5lKFMsTyxrKXt2YXIgSz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0ssUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gekMoUyxPLGspe1MubCs9Mjtmb3IodmFyIEs9Uy5yZWFkX3NoaWZ0KGsm''@;'; put 'put ''JjI9PWsuYmlmZj8xOjIpLGVlPVtdLHNlPTA7c2U8PUs7KytzZSllZS5wdXNoKFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSk7cmV0dXJuIGVlfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gbW5lKFMsTyxrKXt2YXIgSz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwr''@;'; put 'put ''PTIsW0ssUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0aW9uIHR5KFMsTyxrKXtTLmwrPWsmJjI9PWsuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiBqQyhTKXt2YXIgTz0xJlNbUy5sKzFdO3JldHVy''@;'; put 'put ''biBTLmwrPTQsW08sMV19fSw2NDp7bjoiUHRnQXR0clNwYWNlIixmOmZ1bmN0aW9uIERCKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksZUQoUyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBJQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLGVEKFMpfX0sMTI4Ontu''@;'; put 'put ''OiJQdGdBdHRySWZFcnJvciIsZjpmdW5jdGlvbiBRayhTKXt2YXIgTz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW08sUy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gQjQoUyxPLGssSyxlZSl7aWYoSy5iaWZmPDgpcmV0dXJuIEluKFMsTyk7Zm9yKHZhciBzZT1T''@;'; put 'put ''LmwrTyxtZT1bXSxwZT0wO3BlIT09ay5sZW5ndGg7KytwZSlzd2l0Y2goa1twZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOmtbcGVdWzFdPU5CKFMsMCxLKSxtZS5wdXNoKGtbcGVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOmtbcGVdWzJdPWlEKFMsMCxLKSxtZS5wdXNoKGtbcGVdWzJdKTti''@;'; put 'put ''cmVhaztjYXNlIlB0Z0V4cCI6SyYmMTI9PUsuYmlmZiYmKGtbcGVdWzFdWzFdPVMucmVhZF9zaGlmdCg0KSxtZS5wdXNoKGtbcGVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVu''@;'; put 'put ''c3VwcG9ydGVkICIra1twZV1bMF19cmV0dXJuIE89c2UtUy5sLCFlZSYmMCE9PU8mJm1lLnB1c2goSW4oUyxPKSksbWV9ZnVuY3Rpb24gbGgoUyxPLGspe2Zvcih2YXIgZWUsc2UsSz1TLmwrTyxtZT1bXTtLIT1TLmw7KU89Sy1TLmwsZWU9aXlbc2U9U1tTLmxdXSwoMjQ9PT1zZXx8MjU9PT1z''@;'; put 'put ''ZSkmJihlZT0oMjQ9PT1zZT9xQzokMylbU1tTLmwrMV1dKSxlZSYmZWUuZj9tZS5wdXNoKFtlZS5uLGVlLmYoUyxPLGspXSk6SW4oUyxPKTtyZXR1cm4gbWV9ZnVuY3Rpb24gRjEoUyl7Zm9yKHZhciBPPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7Zm9yKHZhciBLPVNba10sZWU9W10sc2U9MDtz''@;'; put 'put ''ZTxLLmxlbmd0aDsrK3NlKXt2YXIgbWU9S1tzZV07ZWUucHVzaChtZT8yPT09bWVbMF0/JyInK21lWzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIic6bWVbMV06IiIpfU8ucHVzaChlZS5qb2luKCIsIikpfXJldHVybiBPLmpvaW4oIjsiKX0kM1szM109JDNbMzJdO3ZhciBjaD17UHRnQWRkOiIr''@;'; put 'put ''IixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn0sc0Q9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAt''@;'; put 'put ''XHUzMEZGXS8pO2Z1bmN0aW9uIGxEKFMsTyxrKXtpZighUylyZXR1cm4iU0gzM1RKU0VSUjAiO2lmKGsuYmlmZj44JiYoIVMuWFRJfHwhUy5YVElbT10pKXJldHVybiBTLlNoZWV0TmFtZXNbT107aWYoIVMuWFRJKXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIEs9Uy5YVElbT107aWYoay5iaWZm''@;'; put 'put ''PDgpcmV0dXJuIE8+MWU0JiYoTy09NjU1MzYpLE88MCYmKE89LU8pLDA9PU8/IiI6Uy5YVElbTy0xXTtpZighSylyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBlZT0iIjtpZihrLmJpZmY+OClzd2l0Y2goU1tLWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJuIGVlPS0xPT1LWzFdPyIjUkVGIjpTLlNo''@;'; put 'put ''ZWV0TmFtZXNbS1sxXV0sS1sxXT09S1syXT9lZTplZSsiOiIrUy5TaGVldE5hbWVzW0tbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1rLlNJRD9TLlNoZWV0TmFtZXNbay5TSURdOiJTSDMzVEpTU0FNRSIrU1tLWzBdXVswXTtkZWZhdWx0OnJldHVybiJTSDMzVEpTU1JDIitTW0tbMF1dWzBd''@;'; put 'put ''fXN3aXRjaChTW0tbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIGVlPS0xPT1LWzFdPyIjUkVGIjpTLlNoZWV0TmFtZXNbS1sxXV18fCJTSDMzVEpTRVJSMyIsS1sxXT09S1syXT9lZTplZSsiOiIrUy5TaGVldE5hbWVzW0tbMl1dO2Nhc2UgMTQ4NDk6cmV0dXJuIFNbS1swXV0uc2xpY2Uo''@;'; put 'put ''MSkubWFwKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gU1tLWzBdXVswXVszXT8oZWU9LTE9PUtbMV0/IiNSRUYiOlNbS1swXV1bMF1bM11bS1sxXV18fCJTSDMzVEpTRVJSNCIsS1sxXT09S1syXT9lZTplZSsiOiIrU1tLWzBdXVswXVsz''@;'; put 'put ''XVtLWzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gcUIoUyxPLGspe3JldHVybiBmdW5jdGlvbiBUbmUoUyxPKXtpZighKFN8fE8mJk8uYmlmZjw9NSYmTy5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdChTKT9TOnNELnRl''@;'; put 'put ''c3QoUyk/IiciK1MrIiciOlN9KGxEKFMsTyxrKSxrKX1mdW5jdGlvbiBzMChTLE8sayxLLGVlLHNlKXt2YXIgUGUsVmUsWWUsRXQsbWU9ZWUmJmVlLmJpZmZ8fDgscGU9c2UmJm51bGwhPU8/Tzp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LGJlPVtdLGV0PTAsY3Q9MCxhdD0iIjtpZighU1sw''@;'; put 'put ''XXx8IVNbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxqdD0iIixrdD0wLE90PVNbMF0ubGVuZ3RoO2t0PE90Oysra3Qpe3ZhciBLdD1TWzBdW2t0XTtzd2l0Y2goS3RbMF0pe2Nhc2UiUHRnVW1pbnVzIjpiZS5wdXNoKCItIitiZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6YmUu''@;'; put 'put ''cHVzaCgiKyIrYmUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6YmUucHVzaChiZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2Ui''@;'; put 'put ''UHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoUGU9YmUucG9wKCksVmU9YmUucG9wKCksYnQ+PTApe3N3aXRjaChTWzBdW2J0XVsxXVswXSl7Y2FzZSAwOmp0PWNpKCIgIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOmp0''@;'; put 'put ''PWNpKCJcciIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsZWUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfVZlKz1qdCxidD0tMX1iZS5wdXNoKFZlK2NoW0t0WzBdXStQZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJQdGdJc2VjdCI6UGU9YmUucG9wKCksVmU9YmUucG9wKCksYmUucHVzaChWZSsiICIrUGUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOlBlPWJlLnBvcCgpLFZlPWJlLnBvcCgpLGJlLnB1c2goVmUrIiwiK1BlKTticmVhaztjYXNlIlB0Z1JhbmdlIjpQZT1iZS5wb3AoKSxWZT1iZS5wb3AoKSxi''@;'; put 'put ''ZS5wdXNoKFZlKyI6IitQZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNhc2UiUHRnVGJs''@;'; put 'put ''IjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdSZWYiOlllPXRh''@;'; put 'put ''KEt0WzFdWzFdLHBlLGVlKSxiZS5wdXNoKFZhKFllLG1lKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpZZT1rP3RhKEt0WzFdWzFdLGssZWUpOkt0WzFdWzFdLGJlLnB1c2goVmEoWWUsbWUpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpldD1LdFsxXVsxXSxZZT10YShLdFsxXVsyXSxwZSxlZSksYXQ9''@;'; put 'put ''cUIoSyxldCxlZSksYmUucHVzaChhdCsiISIrVmEoWWUsbWUpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHJyPUt0WzFdWzBdLFNuPUt0WzFdWzFdO3JyfHwocnI9MCk7dmFyIGxyPTA9PShyciY9MTI3KT9bXTpiZS5zbGljZSgtcnIpO2JlLmxlbmd0aC09cnIs''@;'; put 'put ''IlVzZXIiPT09U24mJihTbj1sci5zaGlmdCgpKSxiZS5wdXNoKFNuKyIoIitsci5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOmJlLnB1c2goS3RbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6YmUucHVzaChTdHJpbmcoS3RbMV0p''@;'; put 'put ''KTticmVhaztjYXNlIlB0Z1N0ciI6YmUucHVzaCgnIicrS3RbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOmJlLnB1c2goS3RbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkV0PW9hKEt0WzFdWzFdLGs/e3M6a306cGUsZWUpLGJlLnB1c2goJG8oRXQsZWUp''@;'; put 'put ''KTticmVhaztjYXNlIlB0Z0FyZWEiOkV0PW9hKEt0WzFdWzFdLHBlLGVlKSxiZS5wdXNoKCRvKEV0LGVlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmV0PUt0WzFdWzFdLEV0PW9hKEt0WzFdWzJdLHBlLGVlKSxhdD1xQihLLGV0LGVlKSxiZS5wdXNoKGF0KyIhIiskbyhFdCxlZSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiUHRnQXR0clN1bSI6YmUucHVzaCgiU1VNKCIrYmUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBYbj0oSy5uYW1lc3x8W10pWyhjdD1LdFsxXVsyXSktMV18fChLWzBdfHxbXSlbY3RdLEJuPVhuP1huLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcoY3QpO0JuIGlu''@;'; put 'put ''IGF5JiYoQm49YXlbQm5dKSxiZS5wdXNoKEJuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgeXIsZnI9S3RbMV1bMV07aWYoY3Q9S3RbMV1bMl0sIShlZS5iaWZmPD01KSl7dmFyIGVyPSIiO2lmKDE0ODQ5PT0oKEtbZnJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoS1tmcl18fFtdKVsw''@;'; put 'put ''XXx8W10pWzBdP0tbZnJdW2N0XSYmS1tmcl1bY3RdLml0YWI+MCYmKGVyPUsuU2hlZXROYW1lc1tLW2ZyXVtjdF0uaXRhYi0xXSsiISIpOmVyPUsuU2hlZXROYW1lc1tjdC0xXSsiISIpLEtbZnJdJiZLW2ZyXVtjdF0pZXIrPUtbZnJdW2N0XS5OYW1lO2Vsc2UgaWYoS1swXSYmS1swXVtjdF0p''@;'; put 'put ''ZXIrPUtbMF1bY3RdLk5hbWU7ZWxzZXt2YXIgRmk9KGxEKEssZnIsZWUpfHwiIikuc3BsaXQoIjs7Iik7RmlbY3QtMV0/ZXI9RmlbY3QtMV06ZXIrPSJTSDMzVEpTRVJSWCJ9YmUucHVzaChlcik7YnJlYWt9ZnI8MCYmKGZyPS1mciksS1tmcl0mJih5cj1LW2ZyXVtjdF0pLHlyfHwoeXI9e05h''@;'; put 'put ''bWU6IlNIMzNUSlNFUlJZIn0pLGJlLnB1c2goeXIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIG5hPSIoIixjYT0iKSI7aWYoYnQ+PTApe3N3aXRjaChqdD0iIixTWzBdW2J0XVsxXVswXSl7Y2FzZSAyOm5hPWNpKCIgIixTWzBdW2J0XVsxXVsxXSkrbmE7YnJlYWs7Y2FzZSAzOm5h''@;'; put 'put ''PWNpKCJcciIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgNDpjYT1jaSgiICIsU1swXVtidF1bMV1bMV0pK2NhO2JyZWFrO2Nhc2UgNTpjYT1jaSgiXHIiLFNbMF1bYnRdWzFdWzFdKStjYTticmVhaztkZWZhdWx0OmlmKGVlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQg''@;'; put 'put ''UHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1idD0tMX1iZS5wdXNoKG5hK2JlLnBvcCgpK2NhKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6YmUucHVzaCgiI1JFRiEiKTticmVhaztj''@;'; put 'put ''YXNlIlB0Z0V4cCI6dmFyIGtyPXtjOmsuYyxyOmsucn07aWYoSy5zaGFyZWRmW3FpKFllPXtjOkt0WzFdWzFdLHI6S3RbMV1bMF19KV0pe3ZhciBWbj1LLnNoYXJlZGZbcWkoWWUpXTtiZS5wdXNoKHMwKFZuLHBlLGtyLEssZWUpKX1lbHNle3ZhciBCcj0hMTtmb3IoUGU9MDtQZSE9Sy5hcnJh''@;'; put 'put ''eWYubGVuZ3RoOysrUGUpaWYoIShZZS5jPChWZT1LLmFycmF5ZltQZV0pWzBdLnMuY3x8WWUuYz5WZVswXS5lLmN8fFllLnI8VmVbMF0ucy5yfHxZZS5yPlZlWzBdLmUucikpe2JlLnB1c2goczAoVmVbMV0scGUsa3IsSyxlZSkpLEJyPSEwO2JyZWFrfUJyfHxiZS5wdXNoKEt0WzFdKX1icmVh''@;'; put 'put ''aztjYXNlIlB0Z0FycmF5IjpiZS5wdXNoKCJ7IitGMShLdFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1rdDticmVhaztjYXNlIlB0Z01pc3NBcmciOmJlLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6YmUucHVzaCgiVGFi''@;'; put 'put ''bGUiK0t0WzFdLmlkeCsiWyMiK0t0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwi''@;'; put 'put ''OmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKEt0KSl9aWYoMyE9ZWUu''@;'; put 'put ''YmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoU1swXVtrdF1bMF0pKXt2YXIgRm49ITA7c3dpdGNoKChLdD1TWzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpGbj0hMTtjYXNlIDA6anQ9Y2koIiAiLEt0WzFdWzFd''@;'; put 'put ''KTticmVhaztjYXNlIDU6Rm49ITE7Y2FzZSAxOmp0PWNpKCJcciIsS3RbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoanQ9IiIsZWUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrS3RbMV1bMF0pfWJlLnB1c2goKEZuP2p0OiIiKStiZS5wb3AoKSso''@;'; put 'put ''Rm4/IiI6anQpKSxidD0tMX19aWYoYmUubGVuZ3RoPjEmJmVlLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIGJlWzBdfWZ1bmN0aW9uIGNEKFMsTyxrKXt2YXIgc2UsSz1TLmwrTyxlZT0yPT1rLmJpZmY/MToyLG1lPVMucmVhZF9zaGlmdChlZSk7aWYo''@;'; put 'put ''NjU1MzU9PW1lKXJldHVybltbXSxJbihTLE8tMildO3ZhciBwZT1saChTLG1lLGspO3JldHVybiBPIT09bWUrZWUmJihzZT1CNChTLE8tbWUtZWUscGUsaykpLFMubD1LLFtwZSxzZV19ZnVuY3Rpb24gSzMoUyxPLGspe3ZhciBlZSxLPVMubCtPLHNlPVMucmVhZF9zaGlmdCgyKSxtZT1saChT''@;'; put 'put ''LHNlLGspO3JldHVybiA2NTUzNT09c2U/W1tdLEluKFMsTy0yKV06KE8hPT1zZSsyJiYoZWU9QjQoUyxLLXNlLTIsbWUsaykpLFttZSxlZV0pfWZ1bmN0aW9uIFFDKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT13MChTKTsyPT1rLmJpZmYmJisrUy5sO3ZhciBzZT1mdW5jdGlvbiBYQyhTKXt2YXIg''@;'; put 'put ''TztpZig2NTUzNSE9PWVvKFMsUy5sKzYpKXJldHVybltQbChTKSwibiJdO3N3aXRjaChTW1MubF0pe2Nhc2UgMDpyZXR1cm4gUy5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gTz0xPT09U1tTLmwrMl0sUy5sKz04LFtPLCJiIl07Y2FzZSAyOnJldHVybiBPPVNbUy5sKzJdLFMu''@;'; put 'put ''bCs9OCxbTywiZSJdO2Nhc2UgMzpyZXR1cm4gUy5sKz04LFsiIiwicyJdfXJldHVybltdfShTKSxtZT1TLnJlYWRfc2hpZnQoMSk7MiE9ay5iaWZmJiYoUy5yZWFkX3NoaWZ0KDEpLGsuYmlmZj49NSYmUy5yZWFkX3NoaWZ0KDQpKTt2YXIgcGU9ZnVuY3Rpb24gdUQoUyxPLGspe3ZhciBzZSxL''@;'; put 'put ''PVMubCtPLGVlPTI9PWsuYmlmZj8xOjIsbWU9Uy5yZWFkX3NoaWZ0KGVlKTtpZig2NTUzNT09bWUpcmV0dXJuW1tdLEluKFMsTy0yKV07dmFyIHBlPWxoKFMsbWUsayk7cmV0dXJuIE8hPT1tZStlZSYmKHNlPUI0KFMsTy1tZS1lZSxwZSxrKSksUy5sPUssW3BlLHNlXX0oUyxLLVMubCxrKTty''@;'; put 'put ''ZXR1cm57Y2VsbDplZSx2YWw6c2VbMF0sZm9ybXVsYTpwZSxzaGFyZWQ6bWU+PjMmMSx0dDpzZVsxXX19ZnVuY3Rpb24gajQoUyxPLGspe3ZhciBLPVMucmVhZF9zaGlmdCg0KSxlZT1saChTLEssayksc2U9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybltlZSxzZT4wP0I0KFMsc2UsZWUsaywhMCk6''@;'; put 'put ''bnVsbF19dmFyIGVTPWo0LHo0PWo0LGhEPWo0LFhCPWZ1bmN0aW9uIGREKFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoNCksZWU9Uy5yZWFkX3NoaWZ0KDQpLHNlPWxoKFMsSyxrKTtyZXR1cm5bc2UsZWU+MD9CNChTLGVlLHNlLGssITApOm51bGxdfSxmRD1qNCxKQj1qNDtmdW5jdGlvbiB0''@;'; put 'put ''UyhTKXtpZigoMHxTKT09UyYmUzxNYXRoLnBvdygyLDE2KSYmUz49MCl7dmFyIE89eW4oMTEpO3JldHVybiBPLndyaXRlX3NoaWZ0KDQsMyksTy53cml0ZV9zaGlmdCgxLDMwKSxPLndyaXRlX3NoaWZ0KDIsUyksTy53cml0ZV9zaGlmdCg0LDApLE99dmFyIGs9eW4oMTcpO3JldHVybiBrLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsMTEpLGsud3JpdGVfc2hpZnQoMSwzMSksay53cml0ZV9zaGlmdCg4LFMpLGsud3JpdGVfc2hpZnQoNCwwKSxrfWZ1bmN0aW9uIG5TKFMpe3ZhciBPPXluKDcpO08ud3JpdGVfc2hpZnQoNCwzKzIqUy5sZW5ndGgpLE8ud3JpdGVfc2hpZnQoMSwyMyksTy53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFMubGVuZ3RoKTt2YXIgaz15bigyKlMubGVuZ3RoKTtrLndyaXRlX3NoaWZ0KDIqUy5sZW5ndGgsUywidXRmMTZsZSIpO3ZhciBLPXluKDQpO3JldHVybiBLLndyaXRlX3NoaWZ0KDQsMCksVShbTyxrLEtdKX1mdW5jdGlvbiBVNChTKXtpZihTLm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJ''@;'; put 'put ''TkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gUUIoUyl7dmFyIE89eW4oMTApO3JldHVybiBPLndyaXRlX3NoaWZ0KDQsMiksTy53cml0ZV9zaGlmdCgxLDI4KSxPLndyaXRlX3NoaWZ0KDEsUyksTy53cml0ZV9zaGlmdCg0LDAp''@;'; put 'put ''LE99KCtQM1tTXSk7aWYoUy5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8p''@;'; put 'put ''KXJldHVybiBmdW5jdGlvbiBzOChTKXt2YXIgTz1ObyhTKSxrPXluKDE1KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDcpLGsud3JpdGVfc2hpZnQoMSwzNiksay53cml0ZV9zaGlmdCg0LE8uciksay53cml0ZV9zaGlmdCgyLE8uY3woIiQiPT1TLmNoYXJBdCgwKT8wOjEpPDwxNHwoUy5tYXRj''@;'; put 'put ''aCgvXCRcZC8pPzA6MSk8PDE1KSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUyk7aWYoUy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIG5TKFMpO3Rocm93IkZvcm11bGEgfCIrUysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgclM9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1Mi''@;'; put 'put ''LDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9X''@;'; put 'put ''Lk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5U''@;'; put 'put ''IiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRB''@;'; put 'put ''LlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFS''@;'; put 'put ''Iiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxB''@;'; put 'put ''U1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBS''@;'; put 'put ''RUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJO''@;'; put 'put ''UyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JN''@;'; put 'put ''VUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQi''@;'; put 'put ''LDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdF''@;'; put 'put ''IiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUu''@;'; put 'put ''QVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVF''@;'; put 'put ''WkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRB''@;'; put 'put ''LkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToi''@;'; put 'put ''Q09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUi''@;'; put 'put ''LDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9Q''@;'; put 'put ''RU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNE''@;'; put 'put ''LlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJU''@;'; put 'put ''SUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5F''@;'; put 'put ''WFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJG''@;'; put 'put ''T1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1''@;'; put 'put ''MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwy''@;'; put 'put ''Njg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04u''@;'; put 'put ''RE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9P''@;'; put 'put ''TCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoi''@;'; put 'put ''V09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwz''@;'; put 'put ''MTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJ''@;'; put 'put ''T05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6''@;'; put 'put ''IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJX''@;'; put 'put ''T1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFku''@;'; put 'put ''QUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURF''@;'; put 'put ''IiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0''@;'; put 'put ''OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktC''@;'; put 'put ''T09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1O''@;'; put 'put ''UyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxE''@;'; put 'put ''LlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQy''@;'; put 'put ''OiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUi''@;'; put 'put ''LDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMu''@;'; put 'put ''TElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1B''@;'; put 'put ''SUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0''@;'; put 'put ''NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJF''@;'; put 'put ''Q1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJN''@;'; put 'put ''U09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVU''@;'; put 'put ''RS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5U''@;'; put 'put ''QUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LHBEPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToi''@;'; put 'put ''Q09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJT''@;'; put 'put ''SUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVS''@;'; put 'put ''QUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoi''@;'; put 'put ''TlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6''@;'; put 'put ''Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VU''@;'; put 'put ''Lk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhM''@;'; put 'put ''T09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0''@;'; put 'put ''OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoi''@;'; put 'put ''SVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVW''@;'; put 'put ''QUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwx''@;'; put 'put ''NTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9H''@;'; put 'put ''LkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVY''@;'; put 'put ''VCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JL''@;'; put 'put ''U1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4''@;'; put 'put ''OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwy''@;'; put 'put ''MTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwy''@;'; put 'put ''Mjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6''@;'; put 'put ''IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIs''@;'; put 'put ''MjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9S''@;'; put 'put ''LlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6''@;'; put 'put ''IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4''@;'; put 'put ''MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNU''@;'; put 'put ''IiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VN''@;'; put 'put ''WDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoi''@;'; put 'put ''REVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUi''@;'; put 'put ''LDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdF''@;'; put 'put ''VC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVE''@;'; put 'put ''SUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdF''@;'; put 'put ''QSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5E''@;'; put 'put ''IiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJD''@;'; put 'put ''VUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRF''@;'; put 'put ''QyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklN''@;'; put 'put ''Q09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJU''@;'; put 'put ''UEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJY''@;'; put 'put ''SVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQi''@;'; put 'put ''LDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlC''@;'; put 'put ''UyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERG''@;'; put 'put ''WUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJH''@;'; put 'put ''Q0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoi''@;'; put 'put ''QVZFUkFHRUlGUyJ9LGVqPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMs''@;'; put 'put ''NDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1''@;'; put 'put ''OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQs''@;'; put 'put ''MTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1''@;'; put 'put ''OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIs''@;'; put 'put ''Mjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEz''@;'; put 'put ''OjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEs''@;'; put 'put ''Mzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIx''@;'; put 'put ''OjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sYXk9eyJfeGxmbi5BQ09U''@;'; put 'put ''IjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNF''@;'; put 'put ''IiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYi''@;'; put 'put ''LCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRI''@;'; put 'put ''IiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6''@;'; put 'put ''IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05G''@;'; put 'put ''SURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0Mi''@;'; put 'put ''LCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5Q''@;'; put 'put ''UkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVT''@;'; put 'put ''VCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklO''@;'; put 'put ''VCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNU''@;'; put 'put ''LkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJ''@;'; put 'put ''U0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoi''@;'; put 'put ''SU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJ''@;'; put 'put ''U0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFY''@;'; put 'put ''SUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RB''@;'; put 'put ''WVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5W''@;'; put 'put ''IjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZu''@;'; put 'put ''LlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElT''@;'; put 'put ''VCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJf''@;'; put 'put ''eGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMi''@;'; put 'put ''OiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIs''@;'; put 'put ''Il94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIu''@;'; put 'put ''UyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlv''@;'; put 'put ''biBpUyhTKXtyZXR1cm4ib2Y6Ij09Uy5zbGljZSgwLDMpJiYoUz1TLnNsaWNlKDMpKSw2MT09Uy5jaGFyQ29kZUF0KDApJiY2MT09KFM9Uy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKFM9Uy5zbGljZSgxKSksKFM9KFM9KFM9Uy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5y''@;'; put 'put ''ZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKE8sayl7cmV0dXJuIGsucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2Uo''@;'; put 'put ''L1x8L2csIjsiKX1mdW5jdGlvbiBaNChTKXtyZXR1cm4oIm9mOj0iK1MucmVwbGFjZShtMiwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gb3koUyl7dmFyIE89Uy5zcGxpdCgiOiIpO3Jl''@;'; put 'put ''dHVybltPWzBdLnNwbGl0KCIuIilbMF0sT1swXS5zcGxpdCgiLiIpWzFdKyhPLmxlbmd0aD4xPyI6IisoT1sxXS5zcGxpdCgiLiIpWzFdfHxPWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gZ0QoUyl7cmV0dXJuIFMucmVwbGFjZSgvXC4vLCIhIil9dmFyIGw4PXt9LGM4PXt9O0th''@;'; put 'put ''LldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBxMz10eXBl''@;'; put 'put ''b2YgTWFwPCJ1IjtmdW5jdGlvbiBhUyhTLE8sayxLKXt2YXIgZWU9MCxzZT1TLmxlbmd0aDtpZihLKXtpZihxMz9LLmhhcyhPKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSyxPKSlmb3IodmFyIG1lPXEzP0suZ2V0KE8pOktbT107ZWU8bWUubGVuZ3RoOysrZWUpaWYo''@;'; put 'put ''U1ttZVtlZV1dLnQ9PT1PJiYoIVNbbWVbZWVdXS5yJiYha3x8U1ttZVtlZV1dLnI9PWspKXJldHVybiBTLkNvdW50KyssbWVbZWVdfWVsc2UgZm9yKDtlZTxzZTsrK2VlKWlmKFNbZWVdLnQ9PT1PJiYoIVNbZWVdLnImJiFrfHxTW2VlXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLGVlO3JldHVy''@;'; put 'put ''biBTW3NlXT17dDpPLHI6a30sUy5Db3VudCsrLFMuVW5pcXVlKyssSyYmKHEzPyhLLmhhcyhPKXx8Sy5zZXQoTyxbXSksSy5nZXQoTykucHVzaChzZSkpOihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSyxPKXx8KEtbT109W10pLEtbT10ucHVzaChzZSkpKSxzZX1mdW5j''@;'; put 'put ''dGlvbiB1OChTLE8pe3ZhciBrPXttaW46UysxLG1heDpTKzF9LEs9VGM7aWYoIU8pcmV0dXJuIE87dmFyIGVlPS0xO3JldHVybiBPLmF1dG8mJihrLmJlc3RGaXQ9MSxPLmJlc3R3aWR0aCYmKGVlPU8uYmVzdHdpZHRoKSxkZWxldGUgTy5iZXN0d2lkdGgpLG51bGwhPU8ud3B4P2VlPXg1KE8u''@;'; put 'put ''d3B4KTpudWxsIT1PLndjaD9lZT1PLndjaDpudWxsIT1PLndpZHRoJiYoay5jdXN0b21XaWR0aD0xKSxlZT4tMT8oay53aWR0aD1rZihlZSksay5jdXN0b21XaWR0aD0xKTpudWxsIT1PLndpZHRoJiYoay53aWR0aD1PLndpZHRoKSxPLmhpZGRlbiYmKGsuaGlkZGVuPSEwKSxrLmJlc3RGaXQm''@;'; put 'put ''JmRlbGV0ZSBrLmN1c3RvbVdpZHRoLFRjPUssbnVsbCE9Ty5sZXZlbCYmKGsub3V0bGluZUxldmVsPWsubGV2ZWw9Ty5sZXZlbCksbnVsbCE9Ty5zdHlsZSYmKGsuc3R5bGU9Ty5zdHlsZSksa31mdW5jdGlvbiBvUyhTLE8sayl7dmFyIEs9TXMoU1siIXJlZiJdKSxlZT0wLHNlPVNbIiFtZXJn''@;'; put 'put ''ZXMiXXx8W10sbWU9QXJyYXkuaXNBcnJheShTKTtlOmZvcih2YXIgcGU9MDtwZTw9Sy5lLnI7KytwZSl7Zm9yKHZhciBiZT0wO2JlPHNlLmxlbmd0aDsrK2JlKWlmKHNlW2JlXS5zLnI8PXBlJiZwZTw9c2VbYmVdLmUuciYmc2VbYmVdLnMuYzw9ayYmazw9c2VbYmVdLmUuYyljb250aW51ZSBl''@;'; put 'put ''O3ZhciBQZT1tZT8oU1twZV18fFtdKVtrXTpTW3FpKHtyOnBlLGM6a30pXTtpZihQZSl7dmFyIFZlPTE7aWYoUGUucyYmKFZlPWJDKFBlLnMpL3lDLkNhbGlicmlbMTJdfHwxKSxQZS53KWVlPU1hdGgubWF4KGVlLFBlLncubGVuZ3RoKlZlKTtlbHNlIHN3aXRjaChQZS50KXtjYXNlImIiOmNh''@;'; put 'put ''c2UiZSI6ZWU9TWF0aC5tYXgoZWUsNSpWZSk7YnJlYWs7Y2FzZSJzIjplZT1NYXRoLm1heChlZSxQZS52Lmxlbmd0aCpWZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjphNShQZSxQZS52KSxlZT1NYXRoLm1heChlZSxTdHJpbmcoUGUud3x8UGUudikubGVuZ3RoKlZlKTticmVhaztjYXNlImQiOmVl''@;'; put 'put ''PU1hdGgubWF4KGVlLDgqVmUpfX19ZWU8MSYmKGVlPTEpLE8uYmVzdHdpZHRoPWVlfWZ1bmN0aW9uIFgzKFMsTyl7aWYoUyl7dmFyIGs9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09TyYmKGs9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1TLmxlZnQmJihTLmxlZnQ9a1swXSksbnVsbD09''@;'; put 'put ''Uy5yaWdodCYmKFMucmlnaHQ9a1sxXSksbnVsbD09Uy50b3AmJihTLnRvcD1rWzJdKSxudWxsPT1TLmJvdHRvbSYmKFMuYm90dG9tPWtbM10pLG51bGw9PVMuaGVhZGVyJiYoUy5oZWFkZXI9a1s0XSksbnVsbD09Uy5mb290ZXImJihTLmZvb3Rlcj1rWzVdKX19ZnVuY3Rpb24gbFMoUyxPKXtm''@;'; put 'put ''b3IodmFyIGs9UmUoTyksSz0wO0s8Uy5sZW5ndGg7KytLKXt2YXIgZWU9ITAsc2U9U1tLXTtpZihzZSYmay5sZW5ndGg9PVJlKHNlKS5sZW5ndGgmJihrLmZvckVhY2goZnVuY3Rpb24obWUpe2lmKGVlKXtpZihudWxsPT09T1ttZV0hPShudWxsPT09c2VbbWVdKSlyZXR1cm4gdm9pZChlZT0h''@;'; put 'put ''MSk7aWYoIm9iamVjdCI9PXR5cGVvZiBPW21lXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKG1lKT4tMSl7aWYob2goT1ttZV0sc2VbbWVdKSlyZXR1cm4gdm9pZChlZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uaW5kZXhP''@;'; put 'put ''ZihtZSk+LTEpKXJldHVybiB2b2lkKGVlPSExKTtpZihoayhPW21lXSxzZVttZV0pKXJldHVybiB2b2lkKGVlPSExKX1pZihPW21lXSE9c2VbbWVdKXJldHVybiB2b2lkKGVlPSExKX19KSxlZSkpcmV0dXJuIEt9cmV0dXJuIFNbUy5sZW5ndGhdPXF0KE8pLFMubGVuZ3RoLTF9ZnVuY3Rpb24g''@;'; put 'put ''bDAoUyxPLGssSyl7dmFyIGVlPUsucmV2c3NmW251bGwhPWsuej9rLno6IkdlbmVyYWwiXSxzZT02MCxtZT1TLmxlbmd0aDtpZihudWxsPT1lZSYmSy5zc2YpZm9yKDtzZTwzOTI7KytzZSlpZihudWxsPT1LLnNzZltzZV0pe0EubG9hZChrLnosc2UpLEsuc3NmW3NlXT1rLnosSy5yZXZzc2Zb''@;'; put 'put ''ay56XT1lZT1zZTticmVha312YXIgcGU9MCxiZT0wLFBlPTAsVmU9MDtpZihLLmNlbGxTdHlsZXMpe2lmKGsucyl7aWYoSy5Gb250cyl7ay5zLmNvbG9yfHwoay5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgWWU9KGsucy5ib2xkPzE6MCl8KGsucy5pdGFsaWM/Mjow''@;'; put 'put ''KXwoay5zLnN0cmlrZT80OjApfChrLnMuc2hhZG93Pzg6MCk7cGU8Sy5Gb250cy5sZW5ndGg7KytwZSl7dmFyIGV0PUsuRm9udHNbcGVdO2lmKG51bGw9PWV0LmZvbnRoYXNoJiYoZXQuZm9udGhhc2g9KGV0LmJvbGQ/MTowKXwoZXQuaXRhbGljPzI6MCl8KGV0LnN0cmlrZT80OjApfChldC5z''@;'; put 'put ''aGFkb3c/ODowKSksIShZZSE9ZXQuZm9udGhhc2h8fCEhay5zLmNvbG9yIT0hIWV0LmNvbG9yfHxrLnMudmFsaWduIT1ldC52YWxpZ258fChrLnMuc3p8fGV0LnN6KSYmKGsucy5zenx8MTIpIT0oZXQuc3p8fDEyKXx8ay5zLm5hbWUmJmsucy5uYW1lIT1ldC5uYW1lfHwoay5zLnVuZGVybGlu''@;'; put 'put ''ZXx8MCkhPShldC51bmRlcmxpbmV8fDApfHxrLnMuY29sb3ImJm9oKGsucy5jb2xvcixldC5jb2xvcikpKWJyZWFrfXBlPT1LLkZvbnRzLmxlbmd0aCYmKEsuRm9udHMucHVzaCh7c3o6ay5zLnN6fHwxMixjb2xvcjprLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTprLnMu''@;'; put 'put ''bmFtZXx8IkNhbGlicmkiLGZhbWlseTprLnMuZmFtaWx5fHwyLHNjaGVtZTprLnMuc2NoZW1lLGJvbGQ6ay5zLmJvbGQsaXRhbGljOmsucy5pdGFsaWMsc3RyaWtlOmsucy5zdHJpa2Usc2hhZG93Omsucy5zaGFkb3csdmFsaWduOmsucy52YWxpZ24sdW5kZXJsaW5lOmsucy51bmRlcmxpbmV9''@;'; put 'put ''KSwxPT1LLkZvbnRzLmxlbmd0aCYmSTQoSy5Gb250c1swXSkpfWlmKEsuRmlsbHMpe2Zvcig7YmU8Sy5GaWxscy5sZW5ndGg7KytiZSl7dmFyIGN0PUsuRmlsbHNbYmVdO2lmKCEhay5zLnN0b3BzPT0hIWN0LnN0b3BzKXtpZihrLnMuc3RvcHMpe2lmKGsucy5hbmdsZSE9Y3QuYW5nbGUpY29u''@;'; put 'put ''dGludWU7dmFyIEV0PSEwO2lmKGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LE90KXtvaChrdCxjdC5zdG9wc1tPdF0pJiYoRXQ9ITEpLGt0LnYhPWN0LnN0b3BzW090XS52JiYoRXQ9ITEpfSksIUV0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09ay5zLnBhdHRlcm5UeXBlJiZrLnMuZmdD''@;'; put 'put ''b2xvciYmKGsucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1rLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoay5zLnBhdHRlcm5UeXBlIT1jdC5wYXR0ZXJuVHlwZXx8b2goay5zLmZnQ29sb3IsY3QuZmdDb2xvcil8fG9oKGsucy5iZ0NvbG9yLGN0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFr''@;'; put 'put ''fX1pZihiZT09Sy5GaWxscy5sZW5ndGgpe3ZhciBhdD17fTtrLnMuc3RvcHM/KG51bGwhPWsucy5hbmdsZSYmKGF0LmFuZ2xlPWsucy5hbmdsZSksYXQuc3RvcHM9W10say5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe2F0LnN0b3BzLnB1c2gocXQoa3QpKX0pKTphdD17cGF0dGVyblR5''@;'; put 'put ''cGU6ay5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6ay5zLmZnQ29sb3IsYmdDb2xvcjprLnMuYmdDb2xvcn0sSy5GaWxscy5wdXNoKGF0KX19aWYoSy5Cb3JkZXJzKXtmb3IoO1BlPEsuQm9yZGVycy5sZW5ndGg7KytQZSl7dmFyIGJ0PUsuQm9yZGVyc1tQZV0sanQ9InRvcCI7aWYoay5zW2p0XSl7''@;'; put 'put ''aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJib3R0b20iXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRd''@;'; put 'put ''LnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJsZWZ0Il0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5zdHlsZXx8b2goay5zW2p0XS5jb2xvcixidFtqdF0uY29s''@;'; put 'put ''b3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0icmlnaHQiXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxvaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0p''@;'; put 'put ''Y29udGludWU7YnJlYWt9UGU9PUsuQm9yZGVycy5sZW5ndGgmJksuQm9yZGVycy5wdXNoKHt0b3A6ay5zLnRvcCYmcXQoay5zLnRvcCl8fHZvaWQgMCxib3R0b206ay5zLmJvdHRvbSYmcXQoay5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Omsucy5sZWZ0JiZxdChrLnMubGVmdCl8fHZvaWQgMCxy''@;'; put 'put ''aWdodDprLnMucmlnaHQmJnF0KGsucy5yaWdodCl8fHZvaWQgMH0pfWlmKE8mJmsucy5zdHlsZSYmIk5vcm1hbCIhPT1rLnMuc3R5bGUpe2ZvcihWZT0xO1ZlPE8ubGVuZ3RoJiZPW1ZlXS5uYW1lIT1rLnMuc3R5bGU7KytWZSk7VmU9PU8ubGVuZ3RoJiZPLnB1c2goe25hbWU6ay5zLnN0eWxl''@;'; put 'put ''LG51bUZtdElkOmVlLGZvbnRJZDpwZSxmaWxsSWQ6YmUsYm9yZGVySWQ6UGV9KX19Zm9yKHNlPTA7c2UhPW1lOysrc2UpaWYoU1tzZV0ubnVtRm10SWQ9PWVlJiZTW3NlXS5mb250SWQ9PXBlJiZTW3NlXS5maWxsSWQ9PWJlJiZTW3NlXS5ib3JkZXJJZD09UGUmJlNbc2VdLnhmSWQ9PVZlKXtp''@;'; put 'put ''ZihrLnMmJmsucy5hbGlnbm1lbnQpe2lmKCFTW3NlXS5hbGlnbm1lbnQpY29udGludWU7aWYoay5zLmFsaWdubWVudC5ob3Jpem9udGFsIT1TW3NlXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8ay5zLmFsaWdubWVudC52ZXJ0aWNhbCE9U1tzZV0uYWxpZ25tZW50LnZlcnRpY2FsfHxrLnMuYWxp''@;'; put 'put ''Z25tZW50LndyYXBUZXh0IT1TW3NlXS5hbGlnbm1lbnQud3JhcFRleHR8fGsucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPVNbc2VdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8ay5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPVNbc2VdLmFsaWdubWVudC50ZXh0Um90YXRpb258fGsucy5hbGln''@;'; put 'put ''bm1lbnQuaW5kZW50IT1TW3NlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoU1tzZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucyl7aWYoISFrLnMuaGlkZGVuPT0oIVNbc2VdLnByb3RlY3Rpb258fCFTW3NlXS5wcm90ZWN0aW9uLmhpZGRlbil8fCEhay5zLmVkaXRhYmxl''@;'; put 'put ''PT0oIVNbc2VdLnByb3RlY3Rpb258fCFTW3NlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKFNbc2VdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJuIHNlfX1lbHNlIGZvcihzZT0wO3NlIT1tZTsrK3NlKWlmKFNbc2VdLm51bUZtdElkPT09ZWUpcmV0dXJuIHNlO3Jl''@;'; put 'put ''dHVybiBTW21lXT17bnVtRm10SWQ6ZWUsZm9udElkOnBlLGZpbGxJZDpiZSxib3JkZXJJZDpQZSx4ZklkOlZlLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHBlPjAmJihTW21lXS5hcHBseUZvbnQ9MSksYmU+MCYmKFNbbWVdLmFwcGx5RmlsbD0xKSxQZT4wJiYoU1ttZV0uYXBwbHlCb3JkZXI9MSks''@;'; put 'put ''IU8mJmsucyYmay5zLnN0eWxlJiYiTm9ybWFsIiE9ay5zLnN0eWxlJiYoU1ttZV0uc3R5bGU9ay5zLnN0eWxlKSxrLnMmJmsucy5hbGlnbm1lbnQmJihTW21lXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50Iiwi''@;'; put 'put ''dGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7bnVsbCE9ay5zLmFsaWdubWVudFtrdF0mJihTW21lXS5hbGlnbm1lbnRba3RdPWsucy5hbGlnbm1lbnRba3RdKX0pKSxrLnMmJmsucy5oaWRkZW4mJihTW21lXS5wcm90ZWN0aW9ufHwoU1ttZV0ucHJvdGVjdGlvbj17fSksU1tt''@;'; put 'put ''ZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLGsucyYmay5zLmVkaXRhYmxlJiYoU1ttZV0ucHJvdGVjdGlvbnx8KFNbbWVdLnByb3RlY3Rpb249e30pLFNbbWVdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLG1lfWZ1bmN0aW9uIEozKFMsTyxrLEssZWUsc2UsbWUscGUpeyJkIj09PVMudCYmInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBTLnYmJihTLnY9TmUoUy52KSk7dHJ5e3NlLmNlbGxORiYmKFMuej1BLl90YWJsZVtPXSl9Y2F0Y2goUGUpe2lmKHNlLldURil0aHJvdyBQZX1pZigoIXNlfHwhMSE9PXNlLmNlbGxUZXh0KSYmInoiIT1TLnQpdHJ5e2lmKG51bGw9PUEuX3RhYmxlW09dJiZBLmxvYWQo''@;'; put 'put ''bGVbT118fCJHZW5lcmFsIixPKSwiZSI9PT1TLnQpUy53PVMud3x8TWNbUy52XTtlbHNlIGlmKDA9PT1PKWlmKCJuIj09PVMudClTLnc9KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik7ZWxzZSBpZigiZCI9PT1TLnQpe3ZhciBiZT1KZShTLnYp''@;'; put 'put ''O1Mudz0oMHxiZSk9PT1iZT9BLl9nZW5lcmFsX2ludChiZSk6QS5fZ2VuZXJhbF9udW0oYmUpfWVsc2V7aWYodm9pZCAwPT09Uy52KXJldHVybiIiO1Mudz1BLl9nZW5lcmFsKFMudixjOCl9ZWxzZSBTLnc9QS5mb3JtYXQoTywiZCI9PT1TLnQ/SmUoUy52KTpTLnYsYzgpfWNhdGNoKFBlKXtp''@;'; put 'put ''ZihzZS5XVEYpdGhyb3cgUGV9aWYoc2UuY2VsbFN0eWxlcyYmcGUpe2lmKFMucz17fSxudWxsIT1rJiZwZS5GaWxscyl0cnl7UHQoUy5zLHBlLkZpbGxzW2tdKX1jYXRjaChQZSl7aWYoc2UuV1RGKXRocm93IFBlfWlmKG51bGwhPUsmJnBlLkZvbnRzKXRyeXtQdChTLnMscGUuRm9udHNbS10p''@;'; put 'put ''fWNhdGNoKFBlKXtpZihzZS5XVEYpdGhyb3cgUGV9aWYobnVsbCE9ZWUmJnBlLkJvcmRlcnMpdHJ5e1B0KFMucyxwZS5Cb3JkZXJzW2VlXSl9Y2F0Y2goUGUpe2lmKHNlLldURil0aHJvdyBQZX19fWZ1bmN0aW9uIG1EKFMsTyxrKXtpZihTJiZTWyIhcmVmIl0pe3ZhciBLPW9vKFNbIiFyZWYi''@;'; put 'put ''XSk7aWYoSy5lLmM8Sy5zLmN8fEsuZS5yPEsucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK2srIik6ICIrU1siIXJlZiJdKX19dmFyIGQ4PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLHZEPS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+''@;'; put 'put ''KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sdVM9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sc3k9LyIoXHcqOlx3KikiLyx0aj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHlEPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLG5qPS88KD86XHc6KT9h''@;'; put 'put ''dXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxiRD0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLF9EPS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sd0Q9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxi''@;'; put 'put ''KD86W14+YS16XVtePl0qKT9cLz4vLENEPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sUm89LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxmZT0vPCg/''@;'; put 'put ''Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+LyxkUz0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3Jt''@;'; put 'put ''YXR0aW5nKT4vZyxHZT0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxTRD0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxNRD0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLHJqPS88KD86XHc6KT9yb3dCcmVha3Nb''@;'; put 'put ''Xj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLGx5PS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLGo1PS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxc''@;'; put 'put ''Lyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLGhTPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBmUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gY3koUyxPLGssSyl7dmFyIGVlPXZyKFMpO2suU2hlZXRzW0tdfHwoay5TaGVldHNb''@;'; put 'put ''S109e30pLGVlLmNvZGVOYW1lJiYoay5TaGVldHNbS10uQ29kZU5hbWU9ZWUuY29kZU5hbWUpfXZhciBtUz0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8saWo9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLGFqPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8s''@;'; put 'put ''VEQ9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxBRD1IZShURCksa0Q9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sREQ9SGUoa0QpLEYwPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLHlT''@;'; put 'put ''PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLExEPVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRl''@;'; put 'put ''bGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIFBEKFMpe3ZhciBPPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW2td''@;'; put 'put ''JiYoT1trXT1wYXJzZUZsb2F0KFNba10pKX0pLE99dmFyIHVoPXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LF9TPUhlKHVoKSx1''@;'; put 'put ''eT17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxGRD1IZSh1eSk7ZnVuY3Rpb24gd1MoUyxPLGspe3Zh''@;'; put 'put ''ciBLPVtdLGVlPXt9LHNlPSIiLG1lPSExLHBlPTAsYmU9MDtyZXR1cm4gUy5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlLFZlKXt2YXIgWWU9dnIoUGUpO3N3aXRjaChXbihZZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8L2RhdGFWYWxp''@;'; put 'put ''ZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjplZT17dDpfU1tZZS50eXBlfHwibm9uZSJdLHJlZjooc2U9WWUuc3FyZWYpP3NlLmluZGV4T2YoIiAiKT4tMT9zZTpvbyhzZSk6IiJ9LFllLm9wZXJhdG9yJiYoZWUub3A9RkRbWWUub3BlcmF0b3JdKSxlZS5ibGFuaz0hIVll''@;'; put 'put ''LmFsbG93QmxhbmsmJnRpKFllLmFsbG93QmxhbmspLCghWWUuc2hvd0lucHV0TWVzc2FnZXx8IXRpKFllLnNob3dJbnB1dE1lc3NhZ2UpKSYmKGVlLmlucHV0PSExKSxZZS5wcm9tcHRUaXRsZSYmKChlZS5pbnB1dHx8KGVlLmlucHV0PXt9KSkudGl0bGU9UXIoWWUucHJvbXB0VGl0bGUpKSxZ''@;'; put 'put ''ZS5wcm9tcHQmJigoZWUuaW5wdXR8fChlZS5pbnB1dD17fSkpLm1lc3NhZ2U9UXIoWWUucHJvbXB0KSksKCFZZS5zaG93RXJyb3JNZXNzYWdlfHwhdGkoWWUuc2hvd0Vycm9yTWVzc2FnZSkpJiYoZWUuZXJyb3I9ITEpLFllLmVycm9yVGl0bGUmJigoZWUuZXJyb3J8fChlZS5lcnJvcj17fSkp''@;'; put 'put ''LnRpdGxlPVFyKFllLmVycm9yVGl0bGUpKSxZZS5lcnJvciYmKChlZS5lcnJvcnx8KGVlLmVycm9yPXt9KSkubWVzc2FnZT1RcihZZS5lcnJvcikpLGVlLmVycm9yP2VlLmVycm9yLnN0eWxlPVllLmVycm9yU3R5bGV8fCJzdG9wIjpZZS5lcnJvclN0eWxlJiYoZWUuZXJyb3I9e3N0eWxlOlll''@;'; put 'put ''LmVycm9yU3R5bGV9KSxlZS50JiZLLnB1c2goZWUpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6YmU9VmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOnNlPVMuc2xpY2UoYmUsVmUpLGVlLnJl''@;'; put 'put ''Zj1zZT9zZS5pbmRleE9mKCIgIik+LTE/c2U6b28oc2UpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpwZT1WZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2FzZSI8''@;'; put 'put ''L2Zvcm11bGEyPiI6aWYoaylicmVhaztjYXNlIjwvZj4iOnZhciBldD1RcihnbyhTLnNsaWNlKHBlLFZlKSkpO3N3aXRjaChlZS50KXtjYXNlIkxpc3QiOmlmKGVlLmx8fGVlLmYpYnJlYWs7aWYoMzQ9PWV0LmNoYXJDb2RlQXQoMCkpe2VlLmw9ZXQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTti''@;'; put 'put ''cmVha31jYXNlIkN1c3RvbSI6bnVsbD09ZWUuZiYmKGVlLmY9ZXQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjplZS5vcHx8KGVlLm9wPSJJTiIpLG51bGw9PWVlLnY/ZWUudj1pc05hTigrZXQpP2V0OitldDooZWUu''@;'; put 'put ''bWluPWVlLnYsZWUubWF4PWlzTmFOKCtldCk/ZXQ6K2V0LGRlbGV0ZSBlZS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjptZT0hMTticmVhaztkZWZhdWx0OmlmKE8m''@;'; put 'put ''Jk8uV1RGJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitZZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBQZX0pLEt9dmFyIGY4PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0s''@;'; put 'put ''ZHk9SGUoZjgpLGJqPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LE5EPUhlKGJq''@;'; put 'put ''KTtmdW5jdGlvbiBwOChTKXt2YXIgTz17fTtyZXR1cm4gbnVsbCE9Uy52YWwmJihpc05hTigrUy52YWwpP08uZj1TLnZhbDpPLnY9K1MudmFsKSxPLnQ9Uy50eXBlLE99ZnVuY3Rpb24gVzQoUyl7cmV0dXJuIFByKCJjZnZvIixudWxsLHt0eXBlOlMudCx2YWw6bnVsbCE9Uy52P1MudjpMcihT''@;'; put 'put ''LmYpfSl9ZnVuY3Rpb24gejUoUyxPLGssSyl7dmFyIGVlPXA4KFMpO3JldHVybiBlZS5jb2xvcj1nayhPLGssSyksZWV9ZnVuY3Rpb24gdjIoUyxPLGssSyxlZSl7dmFyIHNlPShTLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBDUyhTLE8sayxL''@;'; put 'put ''LGVlLHNlKXt2YXIgbWU9ITEscGU9W10sYmU9e2Y6W119LFBlPTAsVmU9MCxZZT17Y2Z2b3M6W10sY29sb3JzOltdfSxldD17fSxjdD0tMSxFdD0wLGF0PSIiO3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24oYnQsanQpe3ZhciBrdD12cihidCk7c3dpdGNoKFduKGt0WzBdKSl7Y2FzZSI8''@;'; put 'put ''Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihWZT1qdCxldD1rdCxiZT17cmVmOk8sZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNo''@;'; put 'put ''KGV0LmR4ZklkJiZlZSYmZWUuRFhGJiYoYmUucz1lZS5EWEZbK2V0LmR4ZklkXSksZXQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOmJlLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOmJlLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6YmUudD0iYmxh''@;'; put 'put ''bmsiLGJlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6YmUudD0iYmxhbmsiLGJlLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6YmUudD0iZXJyb3IiLGJlLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6YmUudD0iZXJyb3IiLGJlLnY9ITE7YnJl''@;'; put 'put ''YWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChldC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoYmUudD0idGV4dCIsYmUub3A9ZHlbZXQub3BlcmF0b3JdLG51bGw9PWV0LnRleHQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitiZS5vcCsiIG1pc3NpbmcgdGV4dCIpO2JlLnY9ZXQudGV4dCxiZS5mPWJlLmZbMF0sbnVsbD09YmUuZiYmZGVsZXRlIGJlLmY7YnJlYWs7ZGVmYXVsdDpiZS50PSJ2YWwiLGJlLm9wPUZEW2V0Lm9wZXJhdG9yXSwxPT1iZS5mLmxlbmd0aD9pc05hTigr''@;'; put 'put ''YmUuZlswXSk/YmUuZj1iZS5mWzBdOihiZS52PStiZS5mWzBdLGRlbGV0ZSBiZS5mKTooYmUubWluPWlzTmFOKCtiZS5mWzBdKT9iZS5mWzBdOitiZS5mWzBdLGJlLm1heD1pc05hTigrYmUuZlsxXSk/YmUuZlsxXTorYmUuZlsxXSxkZWxldGUgYmUuZil9YnJlYWs7Y2FzZSJleHByZXNzaW9u''@;'; put 'put ''IjpiZS50PSJmb3JtdWxhIixiZS5mPWJlLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKGJlLnQ9InRleHQiLGJlLm9wPWR5W2V0LnR5cGVdLG51bGw9PWV0LnRleHQmJmJlLmYubGVu''@;'; put 'put ''Z3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitiZS5vcCsiIG1pc3NpbmcgdGV4dCIpO2JlLnY9bnVsbCE9ZXQudGV4dD9ldC50ZXh0OmJlLmZbMV0ubWF0Y2goLyIuKiIvKT9iZS5mWzFdLnNsaWNlKDEsLTEpOmJlLmZbMV0sYmUuZj1iZS5mWzBdLG51bGw9PWJlLmYmJmRl''@;'; put 'put ''bGV0ZSBiZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoYmUudD0ic2NhbGUiLCFiZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7YmUuY21pbj16NSgoWWU9YmUuY29sb3JTY2FsZSkuY2Z2b3NbMF0sWWUuY29sb3JzWzBdLGVlLEspLDM9PVll''@;'; put 'put ''LmNmdm9zLmxlbmd0aCYmKGJlLmNtaWQ9ejUoWWUuY2Z2b3NbMV0sWWUuY29sb3JzWzFdLGVlLEspKSxiZS5jbWF4PXo1KFllLmNmdm9zW1llLmNmdm9zLmxlbmd0aC0xXSxZZS5jb2xvcnNbWWUuY2Z2b3MubGVuZ3RoLTFdLGVlLEspO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYoYmUudD0iYmFy''@;'; put 'put ''IiwhYmUuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhZZT1iZS5kYXRhQmFyKS5jb2xvcnNbMF0mJihiZS5jb2xvcj1nayhZZS5jb2xvcnNbMF0sZWUsSykpLGJlLmNtaW49cDgoWWUuY2Z2b3NbMF0pLGJlLmNtYXg9cDgoWWUuY2Z2b3NbMV0pO2JyZWFrO2Nh''@;'; put 'put ''c2UiaWNvblNldCI6aWYoYmUudD0iaWNvbiIsIWJlLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtiZS50aHJlc2g9KFllPWJlLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihPdCl7cmV0dXJuIHA4KE90KX0pLGJlLnY9WWUudGFnJiZZZS50YWcuaWNvblNl''@;'; put 'put ''dHx8IjNUcmFmZmljTGlnaHRzMSIsYmUucmV2PXRpKFllLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxiZS5wY3Q9dGkoWWUudGFnLnBlcmNlbnR8fCJ0cnVlIiksYmUuaGlkZGVuPSF0aShZZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6YmUudD0iZGF0ZSIs''@;'; put 'put ''YmUub3A9TkRbZXQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOmJlLnQ9ImF2ZyIsYmUub3A9IjAiPT1ldC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixiZS5vcCs9ZXQuc3RkRGV2P2V0LnN0ZERldjp0aShldC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNl''@;'; put 'put ''InRvcDEwIjpiZS50PSJyYW5rIixiZS5vcD0odGkoZXQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyh0aShldC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLGJlLnY9K2V0LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrZXQudHlwZX1pZihkZWxldGUgYmUuY29s''@;'; put 'put ''b3JTY2FsZSxkZWxldGUgYmUuZGF0YUJhcixkZWxldGUgYmUuaWNvblNldCwhYmUudCl0aHJvdyBjb25zb2xlLmxvZyhTLnNsaWNlKFZlLGp0K2J0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9YmUuZiYmIWJlLmYubGVuZ3RoJiZkZWxldGUgYmUuZixiZS5kZWx8fHBlLnB1c2goYmUp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpiZS5mLnB1c2goUXIoUy5zbGljZShQZSxqdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6UGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6''@;'; put 'put ''YmUuZi5wdXNoKFFyKFMuc2xpY2UoUGUsanQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjpFdD1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6YXQ9Uy5zbGljZShFdCxqdCksTz1hdD9hdC5pbmRleE9mKCIgIik+LTE/YXQ6b28oYXQpOiIiLGJlLnJlZj1PLHBlLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oT3Qpe090LnJlZj1PfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6WWU9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6a3R9LFBlPWp0K2J0''@;'; put 'put ''Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOmJlLmNvbG9yU2NhbGU9WWU7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpiZS5kYXRhQmFyPVllO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6YmUuaWNvblNldD1ZZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOlllLmNmdm9z''@;'; put 'put ''LnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOlllLmNvbG9ycy5wdXNoKGt0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9leHQ+IjptZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpiZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6bWU9ITAsY3Q9anQ7''@;'; put 'put ''YnJlYWs7Y2FzZSI8L2R4Zj4iOm1lPSExLGJlLnM9TDQoUy5zbGljZShjdCxqdCtidC5sZW5ndGgpLGVlLEssayk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil7aWYoc2UpYnJlYWs7aWYoIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9''@;'; put 'put ''fXJldHVybiBidH0pLHBlfShTLHNlLE8sayxLLGVlKX12YXIgU1M9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIG04KFMsTyl7dmFyIGs9MCxLPTAsZWU9MCxzZT0wO2lmKCFPfHwhTy5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIG1lPU8uQ2VsbFhm''@;'; put 'put ''W1NdO251bGwhPW1lJiYobnVsbCE9bWUubnVtRm10SWQmJihrPW1lLm51bUZtdElkKSxudWxsIT1tZS5maWxsSWQmJihLPW1lLmZpbGxJZCksbnVsbCE9bWUuZm9udElkJiYoZWU9bWUuZm9udElkKSxudWxsIT1tZS5ib3JkZXJJZCYmKHNlPW1lLmJvcmRlcklkKSk7dmFyIHBlPXt0OiJ6In07''@;'; put 'put ''dHJ5e0ozKHBlLGssSyxlZSxzZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxPKX1jYXRjaHt9cmV0dXJuIHBlLnN9ZnVuY3Rpb24gVTUoUyxPLGssSyl7aWYodm9pZCAwPT09Uy52JiZ2b2lkIDA9PT1TLmYmJm51bGw9PVMucyYmIVMuY3x8InoiPT09Uy50JiYhUy5jJiYhSy5zaGVldFN0dWJz''@;'; put 'put ''KXJldHVybiIiO3ZhciBlZT0iIixzZT1TLnQsbWU9Uy52O2lmKCJ6IiE9PVMudClzd2l0Y2goUy50KXtjYXNlImIiOmVlPVMudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6ZWU9IiIrUy52O2JyZWFrO2Nhc2UiZSI6ZWU9TWNbUy52XTticmVhaztjYXNlImQiOksmJksuY2VsbERhdGVzP2VlPU5l''@;'; put 'put ''KFMudiwtMSkudG9JU09TdHJpbmcoKTooKFM9cXQoUykpLnQ9Im4iLGVlPSIiKyhTLnY9SmUoTmUoUy52KSkpKSx0eXBlb2YgUy56PiJ1IiYmKFMuej1BLl90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6ZWU9Uy52fXZhciBwZT0ieiI9PVMudD8iIjpIYSgidiIsTHIoZWUpKSxiZT17cjpPfSxQ''@;'; put 'put ''ZT1LP2wwKEsuY2VsbFhmcyxLLmNlbGxTdHlsZVhmcyxTLEspOjA7c3dpdGNoKDAhPT1QZSYmKGJlLnM9UGUpLFMudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6YmUudD0iZCI7YnJlYWs7Y2FzZSJiIjpiZS50PSJiIjticmVhaztjYXNlImUiOmJlLnQ9ImUiO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYobnVsbD09Uy52KXtkZWxldGUgUy50O2JyZWFrfWlmKEsmJksuYm9va1NTVCl7cGU9SGEoInYiLCIiK2FTKEsuU3RyaW5ncyxTLnYsUy5SP1Mucj1RcyhTLlIpOm51bGwsSy5yZXZTdHJpbmdzKSksYmUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShTLlIpPyhwZT0iPGlzPiIrUXMo''@;'; put 'put ''Uy5SKSsiPC9pcz4iLGJlLnQ9ImlubGluZVN0ciIpOmJlLnQ9InN0ciJ9aWYoUy50IT1zZSYmKFMudD1zZSxTLnY9bWUpLFMuZil7dmFyIFZlPVMuRiYmUy5GLnNsaWNlKDAsTy5sZW5ndGgpPT1PP3t0OiJhcnJheSIscmVmOlMuRn06bnVsbDtwZT1QcigiZiIsTHIoUy5mKSxWZSkrKG51bGwh''@;'; put 'put ''PVMudj9wZToiIil9cmV0dXJuIFMubCYma1siIWxpbmtzIl0ucHVzaChbTyxTLmxdKSxTLmMmJmtbIiFjb21tZW50cyJdLnB1c2goW08sUy5jXSksUHIoImMiLHBlLGJlKX12YXIgdjg9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2NbIFwvPl0vLE89LzxcLyg/Olx3KzopP3Jvdz4vLGs9''@;'; put 'put ''L3I9WyInXShbXiInXSopWyInXS8sSz0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLGVlPS9yZWY9WyInXShbXiInXSopWyInXS8sc2U9RDAoInYiKSxtZT1EMCgiZiIpO3JldHVybiBmdW5jdGlvbihiZSxQZSxWZSxZZSxldCxjdCxFdCl7Zm9yKHZhciBTbixscixm''@;'; put 'put ''cix5cixMaSxhdD0wLGJ0PSIiLGp0PVtdLGt0PVtdLE90PTAsS3Q9MCxUbj0wLHJyPSIiLFhuPTAsQm49MCxlcj0wLE1pPTAsRmk9MCxuYT0wLGNhPUFycmF5LmlzQXJyYXkoRXQuQ2VsbFhmKSxrcj1bXSxWbj1bXSxCcj1BcnJheS5pc0FycmF5KFZlKSxfcj1bXSxGbj17fSxqcj0hMSxaaT1i''@;'; put 'put ''ZS5zcGxpdChPKSxiaT0hIVllLnNoZWV0U3R1YnMsX2E9ISFZZS5jZWxsSFRNTCxzbz0hKCExPT09WWUuY2VsbFRleHQmJiFZZS5jZWxsTkYmJiFZZS5jZWxsU3R5bGVzKSxpYT0wLExvPVppLmxlbmd0aDtpYSE9TG87KytpYSl7dmFyIE9hPShidD1aaVtpYV0udHJpbSgpKS5sZW5ndGg7aWYo''@;'; put 'put ''MCE9PU9hKXt2YXIgaG89MDtlOmZvcihhdD0wO2F0PE9hOysrYXQpc3dpdGNoKGJ0W2F0XSl7Y2FzZSI+IjppZigiLyIhPWJ0W2F0LTFdKXsrK2F0O2JyZWFrIGV9WWUuY2VsbFN0eWxlcyYmbnVsbCE9KGxyPXZyKGJ0LnNsaWNlKGhvLGF0KSwhMCkpLnImJnBhcnNlSW50KGxyLnIsMTApJiYo''@;'; put 'put ''WG49cGFyc2VJbnQobHIuciwxMCksRm49e30sanI9ITEsbHIuaHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PXNoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEwLEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoanI9ITAsRm4u''@;'; put 'put ''aGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihqcj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiZFdCYmRXQuQ2VsbFhmJiYoanI9ITAsRm4ucz1tOChsci5zLEV0KSksanImJihfcltYbi0xXT1GbikpO2JyZWFrO2Nhc2UiPCI6aG89YXR9aWYoaG8+PWF0KWJy''@;'; put 'put ''ZWFrO2lmKFhuPW51bGwhPShscj12cihidC5zbGljZShobyxhdCksITApKS5yP3BhcnNlSW50KGxyLnIsMTApOlhuKzEsQm49LTEsIShZZS5zaGVldFJvd3MmJlllLnNoZWV0Um93czxYbikpe1llLm5vZGltfHwoZXQucy5yPlhuLTEmJihldC5zLnI9WG4tMSksZXQuZS5yPFhuLTEmJihldC5l''@;'; put 'put ''LnI9WG4tMSkpO3ZhciBKYT17dDoicm93Iixyb3c6W10sUjpYbi0xLGlkeDpQZX07WWUuY2VsbFN0eWxlcyYmKEZuPXt9LGpyPSExLGxyLmh0JiYoanI9ITAsRm4uaHB0PXBhcnNlRmxvYXQobHIuaHQpLEZuLmhweD1zaChGbi5ocHQpKSxsci5keURlc2NlbnQmJihqcj0hMCxGbi5keURlc2Nl''@;'; put 'put ''bnQ9bHIuZHlEZXNjZW50KSwiMSI9PWxyLmhpZGRlbiYmKGpyPSEwLEZuLmhpZGRlbj0hMCksbnVsbCE9bHIub3V0bGluZUxldmVsJiYoanI9ITAsRm4ubGV2ZWw9K2xyLm91dGxpbmVMZXZlbCksbHIucyYmKGpyPSEwLEZuLnM9bTgobHIucyxFdCkpLGpyJiYoWWUuY2FsbGJhY2s/SmEucHJv''@;'; put 'put ''cHM9Rm46X3JbWG4tMV09Rm4pKSxqdD1idC5zbGljZShhdCkuc3BsaXQoUyk7Zm9yKHZhciBCaT0wO0JpIT1qdC5sZW5ndGgmJiI8Ij09anRbQmldLnRyaW0oKS5jaGFyQXQoMCk7KytCaSk7Zm9yKGp0PWp0LnNsaWNlKEJpKSxhdD0wO2F0IT1qdC5sZW5ndGg7KythdClpZigwIT09KGJ0PWp0''@;'; put 'put ''W2F0XS50cmltKCkpLmxlbmd0aCl7aWYoa3Q9YnQubWF0Y2goayksT3Q9YXQsS3Q9MCxUbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1rdCYmMj09PWt0Lmxlbmd0aCl7Zm9yKE90PTAscnI9a3RbMV0sS3Q9MDtLdCE9cnIubGVuZ3RoJiYhKChUbj1y''@;'; put 'put ''ci5jaGFyQ29kZUF0KEt0KS02NCk8MXx8VG4+MjYpOysrS3QpT3Q9MjYqT3QrVG47Qm49LS1PdH1lbHNlKytCbjtmb3IoS3Q9MDtLdCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoS3QpOysrS3QpO2lmKCsrS3QsKGxyPXZyKGJ0LnNsaWNlKDAsS3QpLCEwKSkucnx8KGxyLnI9cWko''@;'; put 'put ''e3I6WG4tMSxjOkJufSkpLFNuPXt0OiIifSxudWxsIT0oa3Q9KHJyPWJ0LnNsaWNlKEt0KSkubWF0Y2goc2UpKSYmIiIhPT1rdFsxXSYmKFNuLnY9UXIoa3RbMV0pKSxZZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KGt0PXJyLm1hdGNoKG1lKSkmJiIiIT09a3RbMV0pe2lmKFNuLmY9UXIoZ28o''@;'; put 'put ''a3RbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksWWUueGxmbnx8KFNuLmY9RUIoU24uZikpLGt0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKVNuLkY9KHJyLm1hdGNoKGVlKXx8W10pWzFdLFNuLkYuaW5kZXhPZigiOiIpPi0xJiZrci5wdXNoKFtvbyhTbi5GKSxTbi5GXSk7ZWxzZSBp''@;'; put 'put ''ZihrdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe3lyPXZyKGt0WzBdKTt2YXIgSXM9UXIoZ28oa3RbMV0pKTtZZS54bGZufHwoSXM9RUIoSXMpKSxWbltwYXJzZUludCh5ci5zaSwxMCldPVt5cixJcyxsci5yXX19ZWxzZShrdD1yci5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmVm5bKHly''@;'; put 'put ''PXZyKGt0WzBdKSkuc2ldJiYoU24uZj1kbmUoVm5beXIuc2ldWzFdLFZuW3lyLnNpXVsyXSxsci5yKSk7dmFyIFBuPU5vKGxyLnIpO2ZvcihLdD0wO0t0PGtyLmxlbmd0aDsrK0t0KVBuLnI+PWtyW0t0XVswXS5zLnImJlBuLnI8PWtyW0t0XVswXS5lLnImJlBuLmM+PWtyW0t0XVswXS5zLmMm''@;'; put 'put ''JlBuLmM8PWtyW0t0XVswXS5lLmMmJihTbi5GPWtyW0t0XVsxXSl9aWYobnVsbD09bHIudCYmdm9pZCAwPT09U24udilpZihTbi5mfHxTbi5GKVNuLnY9MCxTbi50PSJuIjtlbHNle2lmKCFiaSljb250aW51ZTtTbi50PSJ6In1lbHNlIFNuLnQ9bHIudHx8Im4iO3N3aXRjaChldC5zLmM+Qm4m''@;'; put 'put ''JihldC5zLmM9Qm4pLGV0LmUuYzxCbiYmKGV0LmUuYz1CbiksU24udCl7Y2FzZSJuIjppZigiIj09U24udnx8bnVsbD09U24udil7aWYoIWJpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgU24udj1wYXJzZUZsb2F0KFNuLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIFNuLnY+InUiKXtpZigh''@;'; put 'put ''YmkpY29udGludWU7U24udD0ieiJ9ZWxzZSBmcj1sOFtwYXJzZUludChTbi52LDEwKV0sU24udj1mci50LFNuLnI9ZnIucixmci5SJiYoU24uUj1mci5SKSxfYSYmKFNuLmg9ZnIuaCk7YnJlYWs7Y2FzZSJzdHIiOlNuLnQ9InMiLFNuLnY9bnVsbCE9U24udj9nbyhTbi52KToiIixfYSYmKFNu''@;'; put 'put ''Lmg9bGEoU24udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjprdD1yci5tYXRjaChLKSxTbi50PSJzIixudWxsIT1rdCYmKGZyPXVDKGt0WzFdKSk/KFNuLnY9ZnIudCxmci5SJiYoU24uUj1mci5SKSxfYSYmKFNuLmg9ZnIuaCkpOlNuLnY9IiI7YnJlYWs7Y2FzZSJiIjpTbi52PXRpKFNuLnYp''@;'; put 'put ''O2JyZWFrO2Nhc2UiZCI6WWUuY2VsbERhdGVzP1NuLnY9TmUoU24udiwxKTooU24udj1KZShOZShTbi52LDEpKSxTbi50PSJuIik7YnJlYWs7Y2FzZSJlIjohMSE9PVllLmNlbGxUZXh0JiYoU24udz1Tbi52KSxTbi52PVAzW1NuLnZdfWlmKHNvKXtlcj1NaT1GaT1uYT0wLExpPW51bGwsY2Em''@;'; put 'put ''JnZvaWQgMCE9PWxyLnMmJm51bGwhPShMaT1FdC5DZWxsWGZbbHIuc10pJiYobnVsbCE9TGkubnVtRm10SWQmJihlcj1MaS5udW1GbXRJZCksWWUuY2VsbFN0eWxlcyYmKG51bGwhPUxpLmZpbGxJZCYmKE1pPUxpLmZpbGxJZCksbnVsbCE9TGkuZm9udElkJiYoRmk9TGkuZm9udElkKSxudWxs''@;'; put 'put ''IT1MaS5ib3JkZXJJZCYmKG5hPUxpLmJvcmRlcklkKSkpO3RyeXtKMyhTbixlcixNaSxGaSxuYSxZZSwwLEV0KX1jYXRjaHt9WWUuY2VsbFN0eWxlcyYmU24ucyYmKExpJiZMaS5hbGlnbm1lbnQmJihTbi5zLmFsaWdubWVudD1xdChMaS5hbGlnbm1lbnQpKSxMaSYmTGkucHJvdGVjdGlvbiYm''@;'; put 'put ''KG51bGwhPUxpLnByb3RlY3Rpb24uaGlkZGVuJiYoU24ucy5oaWRkZW49TGkucHJvdGVjdGlvbi5oaWRkZW4pLG51bGwhPUxpLnByb3RlY3Rpb24uZWRpdGFibGUmJihTbi5zLmVkaXRhYmxlPUxpLnByb3RlY3Rpb24uZWRpdGFibGUpKSxMaSYmTGkuc3R5bGUmJihTbi5zLnN0eWxlPUxpLnN0''@;'; put 'put ''eWxlKSksWWUuY2VsbERhdGVzJiZjYSYmIm4iPT1Tbi50JiZBLmlzX2RhdGUoQS5fdGFibGVbZXJdKSYmKFNuLnQ9ImQiLFNuLnY9bG4oU24udikpfXZhciBXbztZZS5ub2RpbSYmKFdvPU5vKGxyLnIpLGV0LnMucj5Xby5yJiYoZXQucy5yPVdvLnIpLGV0LmUucjxXby5yJiYoZXQuZS5yPVdv''@;'; put 'put ''LnIpKSxZZS5jYWxsYmFjaz8oV289Tm8obHIuciksSmEucm93W1dvLmNdPVNuKTpCcj8oVmVbKFdvPU5vKGxyLnIpKS5yXXx8KFZlW1dvLnJdPVtdKSxWZVtXby5yXVtXby5jXT1Tbik6VmVbbHIucl09U259WWUuY2FsbGJhY2smJlllLmNhbGxiYWNrKEphKX19fWJpJiYhWWUuY2FsbGJhY2sm''@;'; put 'put ''Jm04KDAsRXQpLF9yLmxlbmd0aD4wJiYoVmVbIiFyb3dzIl09X3IpfX0oKSx5OD1Qcigid29ya3NoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczpyIjpZaS5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwv''@;'; put 'put ''MjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIFZEKFMsTyxrLEspe3ZhciBtZSxlZT1bSWkseThdLHBlPSIiLGJlPWsuU2hlZXRz''@;'; put 'put ''W2suU2hlZXROYW1lc1tTXV07bnVsbD09YmUmJihiZT17fSk7dmFyIFBlPWJlWyIhcmVmIl18fCJBMSIsVmU9b28oUGUpO2lmKFZlLmUuYz4xNjM4M3x8VmUuZS5yPjEwNDg1NzUpe2lmKE8uV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitQZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEEx''@;'; put 'put ''OlhGRDEwNDg1NzYiKTtWZS5lLmM9TWF0aC5taW4oVmUuZS5jLDE2MzgzKSxWZS5lLnI9TWF0aC5taW4oVmUuZS5jLDEwNDg1NzUpLFBlPXJhKFZlKX1LfHwoSz17fSksYmVbIiFjb21tZW50cyJdPVtdO3ZhciBZZT1bXSxldD1iZVsiIXByaW50Il07aWYoZnVuY3Rpb24gRUQoUyxPLGssSyxl''@;'; put 'put ''ZSl7dmFyIHNlPSExLG1lPXt9LHBlPW51bGw7aWYoInhsc3giIT09Sy5ib29rVHlwZSYmTy52YmFyYXcpe3ZhciBiZT1PLlNoZWV0TmFtZXNba107dHJ5e08uV29ya2Jvb2smJihiZT1PLldvcmtib29rLlNoZWV0c1trXS5Db2RlTmFtZXx8YmUpfWNhdGNoe31zZT0hMCxtZS5jb2RlTmFtZT1M''@;'; put 'put ''cihiZSl9UyYmU1siIWNvbmRmbXQiXSYmKG1lLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLFMmJlNbIiF0YWJjb2xvciJdJiYocGU9KHBlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytQMChTWyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgUGU9ITEsVmU9e307''@;'; put 'put ''aWYoKCgoU3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoUGU9ITAsVmUuZml0VG9QYWdlPTEpLFBlJiYocGU9KHBlfHwiIikrUHIoInBhZ2VTZXRVcFByIixudWxsLFZlKSksUyYmU1siIW91dGxpbmUiXSl7dmFyIFllPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6''@;'; put 'put ''MX07U1siIW91dGxpbmUiXS5hYm92ZSYmKFllLnN1bW1hcnlCZWxvdz0wKSxTWyIhb3V0bGluZSJdLmxlZnQmJihZZS5zdW1tYXJ5UmlnaHQ9MCkscGU9KHBlfHwiIikrUHIoIm91dGxpbmVQciIsbnVsbCxZZSl9IXNlJiYhcGV8fChlZVtlZS5sZW5ndGhdPVByKCJzaGVldFByIixwZSxtZSkp''@;'; put 'put ''fShiZSxrLFMsTyxlZSksZWVbZWUubGVuZ3RoXT1QcigiZGltZW5zaW9uIixudWxsLHtyZWY6UGV9KSxlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIGc4KFMsTyxrLEspe3ZhciBlZT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChLfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0''@;'; put 'put ''aCl7dmFyIHNlPUsuV29ya2Jvb2suVmlld3MsbWU9c2Vba118fHNlWzBdO2VlLnJpZ2h0VG9MZWZ0PW1lLlJUTD8iMSI6IjAiLG1lLnpvb20mJihlZS56b29tU2NhbGU9bWUuem9vbSksbnVsbCE9bWUuZ3JpZCYmKGVlLnNob3dHcmlkTGluZXM9bWUuZ3JpZCksbWUudmlldyYmKGVlLnZpZXc9''@;'; put 'put ''bWUudmlldyl9bnVsbCE9U1siIWdyaWRsaW5lcyJdJiYoZWUuc2hvd0dyaWRMaW5lcz0hIVNbIiFncmlkbGluZXMiXSk7dmFyIHBlPSIiLGJlPXtyOjAsYzowfTtpZihTWyIhc2VsIl0pe2lmKCEoYmU9U1siIXNlbCJdLmNlbGwpKXtpZighU1siIXNlbCJdLnJhbmdlKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtiZT1NcyhTWyIhc2VsIl0ucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkuc30ic3RyaW5nIj09dHlwZW9mIGJlJiYoYmU9Tm8oYmUpKX12YXIgVmU9U1siIWZyZWV6ZSJdPyJzdHJpbmciPT10eXBlb2YgU1siIWZy''@;'; put 'put ''ZWV6ZSJdP05vKFNbIiFmcmVlemUiXSk6U1siIWZyZWV6ZSJdOntjOjAscjowfTtpZihTWyIhZnJlZXplIl0pe3ZhciBZZT1xaShWZSksZXQ9e3N0YXRlOiJmcm96ZW4iLHhTcGxpdDpWZS5jLHlTcGxpdDpWZS5yLHRvcExlZnRDZWxsOlllfTtTWyIhc2VsIl0mJihldC5hY3RpdmVQYW5lPShi''@;'; put 'put ''ZS5yPj1WZS5yJiZWZS5yPjA/ImJvdHRvbSI6InRvcCIpKyhiZS5jPj1WZS5jJiZWZS5jPjA/IlJpZ2h0IjoiTGVmdCIpKSxwZT1QcigicGFuZSIsbnVsbCxldCl9aWYoU1siIXNlbCJdKXt2YXIgY3Q9e2FjdGl2ZUNlbGw6InN0cmluZyI9PXR5cGVvZiBiZT9iZTpxaShiZSl9O2N0LnNxcmVm''@;'; put 'put ''PVNbIiFzZWwiXS5yYW5nZT9TWyIhc2VsIl0ucmFuZ2U6Y3QuYWN0aXZlQ2VsbCsiOiIrY3QuYWN0aXZlQ2VsbCxwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCksU1siIWZyZWV6ZSJdJiYoVmUuYz4wJiYoY3QucGFuZT0idG9wUmlnaHQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxsLGN0KSks''@;'; put 'put ''VmUucj4wJiYoY3QucGFuZT0iYm90dG9tTGVmdCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpKSxWZS5jPjAmJlZlLnI+MCYmKGN0LnBhbmU9ImJvdHRvbVJpZ2h0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpKX1yZXR1cm4gUHIoInNoZWV0Vmlld3MiLFByKCJzaGVldFZpZXci''@;'; put 'put ''LHBlfHxudWxsLGVlKSx7fSl9KGJlLDAsUyxrKSxPLnNoZWV0Rm9ybWF0KXt2YXIgY3Q9e2RlZmF1bHRSb3dIZWlnaHQ6Ty5zaGVldEZvcm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpPLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9Ty5zaGVl''@;'; put 'put ''dEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihjdC5vdXRsaW5lTGV2ZWxSb3c9Ty5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cpLGVlW2VlLmxlbmd0aF09UHIoInNoZWV0Rm9ybWF0UHIiLG51bGwsY3QpfWVsc2UgaWYoYmVbIiFzaGVldEZvcm1hdCJdKXt2YXIgRXQ9e30sYXQ9ITE7YmVb''@;'; put 'put ''IiFzaGVldEZvcm1hdCJdLnJvdyYmKGJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0PyhhdD0hMCxFdC5kZWZhdWx0Um93SGVpZ2h0PWJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0LEV0LmN1c3RvbUhlaWdodD0xKTpiZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweD8oYXQ9ITAsRXQuZGVmYXVs''@;'; put 'put ''dFJvd0hlaWdodD1VMyhiZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweCksRXQuY3VzdG9tSGVpZ2h0PTEpOigwPT09YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHR8fDA9PT1iZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweHx8YmVbIiFzaGVldEZvcm1hdCJdLnJvdy5oaWRkZW4pJiYoYXQ9ITAs''@;'; put 'put ''RXQuZGVmYXVsdFJvd0hlaWdodD1FdC5kZWZhdWx0Um93SGVpZ2h0fHwxNixFdC5jdXN0b21IZWlnaHQ9MSxFdC56ZXJvSGVpZ2h0PTEpLGJlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQmJihFdFsieDE0YWM6ZHlEZXNjZW50Il09YmVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCkpLGJl''@;'; put 'put ''WyIhc2hlZXRGb3JtYXQiXS5jb2wmJihiZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaHx8UTAoYmVbIiFzaGVldEZvcm1hdCJdLmNvbCksRXQuZGVmYXVsdENvbFdpZHRoPWJlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NoKzUvVGN8fDAsYXQ9ITApLG51bGw9PUV0LmRlZmF1bHRSb3dIZWlnaHQm''@;'; put 'put ''JihFdC5kZWZhdWx0Um93SGVpZ2h0PTE2KSxudWxsPT1FdC5kZWZhdWx0Q29sV2lkdGgmJihFdC5kZWZhdWx0Q29sV2lkdGg9MTApLEV0Lm91dGxpbmVMZXZlbFJvdz1FdC5vdXRsaW5lTGV2ZWxSb3d8fDcsYXQmJihlZVtlZS5sZW5ndGhdPVByKCJzaGVldEZvcm1hdFByIixudWxsLEV0KSl9''@;'; put 'put ''bnVsbCE9YmVbIiFjb2xzIl0mJmJlWyIhY29scyJdLmxlbmd0aD4wJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBwaihTLE8sayl7Zm9yKHZhciBlZSxLPVsiPGNvbHM+Il0sc2U9MDtzZSE9Ty5sZW5ndGg7KytzZSlpZihlZT1PW3NlXSl7aWYoZWUuYXV0byYmb1MoUyxlZSxzZSksZWUuc3x8''@;'; put 'put ''ZWUueil7dmFyIG1lPXt0OiJ6In07bnVsbCE9ZWUucyYmKG1lLnM9ZWUucyksbnVsbCE9ZWUueiYmKG1lLno9ZWUueiksZWUuc3R5bGU9bDAoay5jZWxsWGZzLGsuY2VsbFN0eWxlWGZzLG1lLGspfUtbSy5sZW5ndGhdPVByKCJjb2wiLG51bGwsdTgoc2UsZWUpKX1yZXR1cm4gS1tLLmxlbmd0''@;'; put 'put ''aF09IjwvY29scz4iLEsuam9pbigiIil9KGJlLGJlWyIhY29scyJdLE8pKSxlZVttZT1lZS5sZW5ndGhdPSI8c2hlZXREYXRhLz4iLGJlWyIhbGlua3MiXT1bXSxudWxsIT1iZVsiIXJlZiJdJiYocGU9ZnVuY3Rpb24gTVMoUyxPLGssSyl7dmFyIGJlLGJ0LGVlPVtdLHNlPVtdLG1lPW9vKFNb''@;'; put 'put ''IiFyZWYiXSkscGU9IiIsUGU9IiIsVmU9W10sWWU9MCxldD0wLGN0PVNbIiFyb3dzIl0sRXQ9QXJyYXkuaXNBcnJheShTKSxhdD17cjpQZX0sanQ9LTE7Zm9yKGV0PW1lLnMuYztldDw9bWUuZS5jOysrZXQpVmVbZXRdPVRhKGV0KTtmb3IoWWU9bWUucy5yO1llPD1tZS5lLnI7KytZZSl7Zm9y''@;'; put 'put ''KHNlPVtdLFBlPWppKFllKSxldD1tZS5zLmM7ZXQ8PW1lLmUuYzsrK2V0KXtiZT1WZVtldF0rUGU7dmFyIGt0PUV0PyhTW1llXXx8W10pW2V0XTpTW2JlXTt2b2lkIDAhPT1rdCYmbnVsbCE9KHBlPVU1KGt0LGJlLFMsTykpJiZzZS5wdXNoKHBlKX0oc2UubGVuZ3RoPjB8fGN0JiZjdFtZZV0p''@;'; put 'put ''JiYoYXQ9e3I6UGV9LGN0JiZjdFtZZV0mJigoYnQ9Y3RbWWVdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKGF0Lmh0PWp0LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVM''@;'; put 'put ''ZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoYXRbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKGF0LnM9bDAoTy5jZWxsWGZzLE8uY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0LnN9LE8pLGF0LmN1c3RvbUZvcm1hdD0xKSksZWVbZWUubGVuZ3RoXT1Qcigicm93''@;'; put 'put ''IixzZS5qb2luKCIiKSxhdCkpfWlmKGN0KWZvcig7WWU8Y3QubGVuZ3RoOysrWWUpY3QmJmN0W1llXSYmKGF0PXtyOlllKzF9LChidD1jdFtZZV0pLmhpZGRlbiYmKGF0LmhpZGRlbj0xKSxqdD0tMSxidC5ocHg/anQ9VTMoYnQuaHB4KTpidC5ocHQmJihqdD1idC5ocHQpLGp0Pi0xJiYoYXQu''@;'; put 'put ''aHQ9anQsYXQuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoYXQub3V0bGluZUxldmVsPWJ0LmxldmVsKSxlZVtlZS5sZW5ndGhdPVByKCJyb3ciLCIiLGF0KSk7cmV0dXJuIGVlLmpvaW4oIiIpfShiZSxPKSxwZS5sZW5ndGg+MCYmKGVlW2VlLmxlbmd0aF09cGUpKSxlZS5sZW5ndGg+bWUr''@;'; put 'put ''MSYmKGVlW2VlLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIsZWVbbWVdPWVlW21lXS5yZXBsYWNlKCIvPiIsIj4iKSksYmVbIiFwcm90ZWN0Il0mJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIGRqKFMpe3ZhciBPPXtzaGVldDoxfTtyZXR1cm4geVMuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1T''@;'; put 'put ''W2tdJiZTW2tdJiYoT1trXT0iMSIpfSksTEQuZm9yRWFjaChmdW5jdGlvbihrKXtudWxsIT1TW2tdJiYhU1trXSYmKE9ba109IjAiKX0pLFMucGFzc3dvcmQ/Ty5wYXNzd29yZD1IdihTLnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTpTLmVuY3J5cHRpb24mJihPLmFsZ29y''@;'; put 'put ''aXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28sTy5oYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gsTy5zYWx0VmFsdWU9Uy5lbmNyeXB0aW9uLnNhbHQsTy5zcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pLFByKCJzaGVldFByb3RlY3Rpb24iLG51bGwsTyl9KGJlWyIhcHJvdGVjdCJdKSks''@;'; put 'put ''bnVsbCE9YmVbIiFhdXRvZmlsdGVyIl0mJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIG1qKFMsTyxrLEspe3ZhciBlZT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOnJhKFMucmVmKTtrLldvcmtib29rfHwoay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsu''@;'; put 'put ''V29ya2Jvb2suTmFtZXM9W10pO3ZhciBzZT1rLldvcmtib29rLk5hbWVzLG1lPU1zKGVlKTttZS5zLnI9PW1lLmUuciYmKG1lLmUucj1NcyhPWyIhcmVmIl0pLmUucixlZT1yYShtZSkpO2Zvcih2YXIgcGU9MDtwZTxzZS5sZW5ndGg7KytwZSl7dmFyIGJlPXNlW3BlXTtpZigiX3hsbm0uX0Zp''@;'; put 'put ''bHRlckRhdGFiYXNlIj09YmUuTmFtZSYmYmUuU2hlZXQ9PUspe2JlLlJlZj0iJyIray5TaGVldE5hbWVzW0tdKyInISIrZWU7YnJlYWt9fXJldHVybiBwZT09c2UubGVuZ3RoJiZzZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkssUmVmOiInIitrLlNoZWV0TmFt''@;'; put 'put ''ZXNbS10rIichIitlZX0pLFByKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6ZWV9KX0oYmVbIiFhdXRvZmlsdGVyIl0sYmUsayxTKSksbnVsbCE9YmVbIiFtZXJnZXMiXSYmYmVbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKGVlW2VlLmxlbmd0aF09ZnVuY3Rpb24gZ1MoUyl7aWYoMD09PVMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiIiO2Zvcih2YXIgTz0nPG1lcmdlQ2VsbHMgY291bnQ9IicrUy5sZW5ndGgrJyI+JyxrPTA7ayE9Uy5sZW5ndGg7KytrKU8rPSc8bWVyZ2VDZWxsIHJlZj0iJytyYShTW2tdKSsnIi8+JztyZXR1cm4gTysiPC9tZXJnZUNlbGxzPiJ9KGJlWyIhbWVyZ2VzIl0pKSxiZVsiIWNvbmRm''@;'; put 'put ''bXQiXSYmKGVlW2VlLmxlbmd0aF09ZnVuY3Rpb24gd2ooUyxPKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oayxLKXtyZXR1cm4gZnVuY3Rpb24gX2ooUyxPLGspe3ZhciBLPVMucz9sUyhrLkRYRixTLnMpOi0xLGVlPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpLG1lPW9v''@;'; put 'put ''KGVlLnJlcGxhY2UoL1xzLiokLywiIikpLnM7bWUucjwwJiYobWUucj0wKSxtZS5jPDAmJihtZS5jPTApO3ZhciBwZT0iIixiZT17cHJpb3JpdHk6TysxfTtzd2l0Y2goSz4tMSYmKGJlLmR4ZklkPUspLFMudCl7Y2FzZSJ1bmlxdWUiOmJlLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJkdXAiOmJlLnR5cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6YmUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIixwZT0iPGZvcm11bGE+TEVOKFRSSU0oIitxaShtZSkrIikpIisoUy52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7''@;'; put 'put ''Y2FzZSJlcnJvciI6YmUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEiOmJlLnR5cGU9ImV4cHJlc3Npb24iLHBlPVByKCJmb3JtdWxhIixMcihTLmYpLHt9KTticmVhaztjYXNlImRhdGUiOmJlLnR5cGU9InRpbWVQZXJpb2QiLGJlLnRp''@;'; put 'put ''bWVQZXJpb2Q9YmpbUy5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goYmUudHlwZT1iZS5vcGVyYXRvcj1mOFtTLm9wXSxiZS50ZXh0PVMudixTLm9wKXtjYXNlIklOIjpwZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShtZSkrIikpKTwvZm9ybXVs''@;'; put 'put ''YT4iO2JyZWFrO2Nhc2UiT1QiOnBlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytMcihTLnYpKyciLCcrcWkobWUpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnBlPSI8Zm9ybXVsYT5MRUZUKCIrcWkobWUpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9m''@;'; put 'put ''b3JtdWxhPic7YnJlYWs7Y2FzZSJORCI6cGU9Ijxmb3JtdWxhPlJJR0hUKCIrcWkobWUpKycsTEVOKCInK0xyKFMudikrJyIpKT0iJytMcihTLnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOmJlLnR5cGU9ImNlbGxJcyIsYmUub3BlcmF0b3I9dXlbUy5vcF0scGU9bnVsbCE9Uy5t''@;'; put 'put ''aW4/UHIoImZvcm11bGEiLExyKFN0cmluZyhTLm1pbikpLHt9KStQcigiZm9ybXVsYSIsTHIoU3RyaW5nKFMubWF4KSkse30pOlByKCJmb3JtdWxhIixMcihudWxsIT1TLnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgUy52PyciJytTLnYucmVwbGFjZSgvIi9nLCciIicpKyciJzpTLnYpOlMu''@;'; put 'put ''Zikse30pO2JyZWFrO2Nhc2UiYXZnIjpzd2l0Y2goYmUudHlwZT0iYWJvdmVBdmVyYWdlIixiZS5hYm92ZUF2ZXJhZ2U9IkwiPT1TLm9wLmNoYXJBdCgwKT8iMCI6IjEiLFMub3AuY2hhckF0KDEpKXtjYXNlIlQiOmJlLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjpiZS5lcXVhbEF2''@;'; put 'put ''ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1bHQ6YmUuc3RkRGV2PVMub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6YmUudHlwZT0idG9wMTAiLGJlLmJvdHRvbT0iQiI9PVMub3AuY2hhckF0KDApPyIxIjoiMCIsYmUucGVyY2VudD0iUCI9PVMub3AuY2hhckF0KDEpPyIxIjoiMCIsYmUucmFu''@;'; put 'put ''az1TLnY7YnJlYWs7Y2FzZSJpY29uIjpiZS50eXBlPSJpY29uU2V0Ijt2YXIgUGU9e2ljb25TZXQ6Uy52LHBlcmNlbnQ6Uy5wY3Q/InRydWUiOiJmYWxzZSJ9O1MucmV2JiYoUGUucmV2ZXJzZT0idHJ1ZSIpLFMuaGlkZGVuJiYoUGUuc2hvd1ZhbHVlPSJmYWxzZSIpLHBlPVByKCJpY29uU2V0''@;'; put 'put ''IixTLnRocmVzaC5tYXAoVzQpLmpvaW4oIiIpLFBlKTticmVhaztjYXNlInNjYWxlIjpiZS50eXBlPSJjb2xvclNjYWxlIixwZSs9VzQoUy5jbWluKSxTLmNtaWQmJihwZSs9VzQoUy5jbWlkKSkscGUrPVc0KFMuY21heCkscGUrPWdkKFMuY21pbi5jb2xvciksUy5jbWlkJiYocGUrPWdkKFMu''@;'; put 'put ''Y21pZC5jb2xvcikpLHBlPVByKCJjb2xvclNjYWxlIixwZSs9Z2QoUy5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIiOmJlLnR5cGU9ImRhdGFCYXIiLHBlKz1XNChTLmNtaW4pLHBlKz1XNChTLmNtYXgpLHBlPVByKCJkYXRhQmFyIixwZSs9Z2QoUy5jb2xvcikse30pO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6dGhyb3cgY29uc29sZS5sb2coUyksIkNGIG1pc3NpbmcgdHlwZSAiK1MudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytlZSsnIj4nK1ByKCJjZlJ1bGUiLCIiPT1wZT9udWxsOnBlLGJlKSsiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+In0oayxLLE8pfSku''@;'; put 'put ''am9pbigiIil9KGJlWyIhY29uZGZtdCJdLE8pKSxiZVsiIXZhbGlkYXRpb25zIl0mJihlZVtlZS5sZW5ndGhdPWZ1bmN0aW9uIEhEKFMpe2lmKCFTfHwwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIE89W10saz0wLEs9MDtLPFMubGVuZ3RoOysrSyl7dmFyIGVlPVNbS10sc2U9dWhbZWUu''@;'; put 'put ''dF07aWYoZWUucmVmJiYoInN0cmluZyIhPXR5cGVvZiBlZS5yZWZ8fC0xIT1lZS5yZWYuaW5kZXhPZigiICIpfHwoZWUucmVmPW9vKGVlLnJlZiksZWUucmVmLnMmJiEoZWUucmVmLnMuYzwwKSkpKXsrK2s7dmFyIG1lPXt0eXBlOnNlLGFsbG93Qmxhbms6KygwIT1lZS5ibGFuayksc2hvd0lu''@;'; put 'put ''cHV0TWVzc2FnZTorKDAhPWVlLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9ZWUuZXJyb3IpLHNxcmVmOiJzdHJpbmciPT10eXBlb2YgZWUucmVmP2VlLnJlZjpyYShlZS5yZWYpfTtpZihlZS5pbnB1dCYmKGVlLmlucHV0LnRpdGxlJiYobWUucHJvbXB0VGl0bGU9V2koZWUuaW5wdXQu''@;'; put 'put ''dGl0bGUpKSxlZS5pbnB1dC5tZXNzYWdlJiYobWUucHJvbXB0PVdpKGVlLmlucHV0Lm1lc3NhZ2UpKSksZWUuZXJyb3ImJihlZS5lcnJvci50aXRsZSYmKG1lLmVycm9yVGl0bGU9V2koZWUuZXJyb3IudGl0bGUpKSxlZS5lcnJvci5tZXNzYWdlJiYobWUuZXJyb3I9V2koZWUuZXJyb3IubWVz''@;'; put 'put ''c2FnZSkpLGVlLmVycm9yLnN0eWxlJiYobWUuZXJyb3JTdHlsZT1lZS5lcnJvci5zdHlsZSkpLCFzZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK2VlLnQpO3ZhciBwZT0iIjtzd2l0Y2goZWUudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlz''@;'; put 'put ''dCI6Y2FzZSJDdXN0b20iOmlmKGVlLmwpe2lmKGVlLmwuam9pbigiLCIpLmxlbmd0aD4yNTApdGhyb3cgbmV3IEVycm9yKCJEViBsZW5ndGggPiAyNTAgdHJpZ2dlcnMgY29ycnVwdGlvbiBlcnJvcnMgaW4gRXhjZWwuICBVc2UgYSBsb29rdXAgdGFibGUiKTtwZT0nPGZvcm11bGExPiInK0xy''@;'; put 'put ''KGVlLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHBlPSI8Zm9ybXVsYTE+IitMcihlZS5mKSsiPC9mb3JtdWxhMT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighdXlbZWUub3BdKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrZWUub3ArIiBmb3IgIitlZS50KTtpZihtZS5vcGVyYXRvcj11eVtlZS5vcF0sbnVsbCE9ZWUudilwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKGVlLnYgaW5zdGFuY2VvZiBEYXRlP0plKGVlLnYpOmVlLnYpKSsiPC9mb3JtdWxh''@;'; put 'put ''MT4iO2Vsc2V7aWYobnVsbD09ZWUubWlufHxudWxsPT1lZS5tYXgpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitlZS50KTtwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKGVlLm1pbiBpbnN0YW5jZW9m''@;'; put 'put ''IERhdGU/SmUoZWUubWluKTplZS5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitMcihTdHJpbmcoZWUubWF4IGluc3RhbmNlb2YgRGF0ZT9KZShlZS5tYXgpOmVlLm1heCkpKyI8L2Zvcm11bGEyPiJ9fU8ucHVzaChQcigiZGF0YVZhbGlkYXRpb24iLHBlfHxudWxsLG1lKSl9fXJldHVy''@;'; put 'put ''biBrPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicraysnIj4nK08uam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KGJlWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBqdCxidD0tMSxrdD0tMTtpZihiZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihlZVtlZS5sZW5ndGhdPSI8aHlwZXJs''@;'; put 'put ''aW5rcz4iLGJlWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtTblsxXS5UYXJnZXQmJihqdD17cmVmOlNuWzBdfSwiIyIhPVNuWzFdLlRhcmdldC5jaGFyQXQoMCkmJihrdD1FcihLLC0xLExyKFNuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIiIpLEthLkhMSU5LKSxqdFsicjpp''@;'; put 'put ''ZCJdPSJySWQiK2t0KSwoYnQ9U25bMV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihqdC5sb2NhdGlvbj1McihTblsxXS5UYXJnZXQuc2xpY2UoYnQrMSkpKSxTblsxXS5Ub29sdGlwJiYoanQudG9vbHRpcD1McihTblsxXS5Ub29sdGlwKSksZWVbZWUubGVuZ3RoXT1QcigiaHlwZXJsaW5r''@;'; put 'put ''IixudWxsLGp0KSl9KSxlZVtlZS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIGJlWyIhbGlua3MiXSxldCl7dmFyIE90PWZ1bmN0aW9uIGxqKFMpe2lmKFMucHJvcHMpe3ZhciBPPXt9LGs9Uy5wcm9wcztyZXR1cm4gay5ncmlkbGluZXMmJihPLmdyaWRMaW5lcz1PLmdyaWRMaW5l''@;'; put 'put ''c1NldD0xKSxrLmhlYWRpbmdzJiYoTy5oZWFkaW5ncz0xKSxrLmNlbnRlclgmJihPLmhvcml6b250YWxDZW50ZXJlZD0xKSxrLmNlbnRlclkmJihPLnZlcnRpY2FsQ2VudGVyZWQ9MSksUHIoInByaW50T3B0aW9ucyIsbnVsbCxPKX1yZXR1cm4iIn0oZXQpO090Lmxlbmd0aCYmKGVlW2VlLmxl''@;'; put 'put ''bmd0aF09T3QpfWlmKChudWxsIT1iZVsiIW1hcmdpbnMiXXx8ZXQmJmV0Lm1hcmdpbnMpJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiBmaihTKXtyZXR1cm4gWDMoUyksUHIoInBhZ2VNYXJnaW5zIixudWxsLFMpfShiZVsiIW1hcmdpbnMiXXx8ZXQubWFyZ2lucykpLGV0KXt2YXIgS3Q9ZnVu''@;'; put 'put ''Y3Rpb24gUkQoUyl7aWYoUy5wcm9wcyl7dmFyIE89e30saz1TLnByb3BzO2lmKGsub3JpZW50YXRpb24mJihPLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihPLnNjYWxlPWsuc2NhbGUpLGsuZml0JiYobnVsbCE9ay5maXQuaGVpZ2h0JiYoTy5maXRUb0hlaWdodD1rLmZp''@;'; put 'put ''dC5oZWlnaHQpLG51bGwhPWsuZml0LndpZHRoJiYoTy5maXRUb1dpZHRoPWsuZml0LndpZHRoKSksay5kcGkmJihPLmhvcml6b250YWxEcGk9Ty52ZXJ0aWNhbERwaT1rLmRwaSksbnVsbCE9ay5maXJzdCYmKE8uZmlyc3RQYWdlTnVtYmVyPWsuZmlyc3QsTy51c2VGaXJzdFBhZ2VOdW1iZXI9''@;'; put 'put ''MSksay5idyYmKE8uYmxhY2tBbmRXaGl0ZT0xKSxrLmRyYWZ0JiYoTy5kcmFmdD0xKSxrLmNvbW1lbnRzJiYoTy5jZWxsQ29tbWVudHM9VERbay5jb21tZW50c118fCJub25lIiksay5lcnJvcnMmJihPLmVycm9ycz1rRFtrLmVycm9yc118fCJub25lIiksay5wYXBlcilzd2l0Y2godHlwZW9m''@;'; put 'put ''IGsucGFwZXIpe2Nhc2UibnVtYmVyIjpPLnBhcGVyU2l6ZT1rLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjp1QltrLnBhcGVyXT9PLnBhcGVyU2l6ZT11QltrLnBhcGVyXToray5wYXBlciYmKE8ucGFwZXJTaXplPStrLnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIWsucGFwZXIuaGVp''@;'; put 'put ''Z2h0fHwhay5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO08ucGFwZXJIZWlnaHQ9ay5wYXBlci5oZWlnaHQsTy5wYXBlcldpZHRoPWsucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhP''@;'; put 'put ''ZihrLm9yZGVyKT4tMSYmKE8ucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxQcigicGFnZVNldHVwIixudWxsLE8pfXJldHVybiIifShldCk7S3QubGVuZ3RoJiYoZWVbZWUubGVuZ3RoXT1LdCksS3Q9ZnVuY3Rpb24geWooUyl7dmFyIE89W10saz0iIixLPSIiLGVlPSIiLHNlPSIiLG1lPSIi''@;'; put 'put ''LHBlPSIiLGJlPSIiLFBlPXQxKFMuaGVhZGVyKTtQZS5sZW5ndGgmJihLPVBlWzBdLHBlPVBlWzFdLHNlPVBlWzJdKTt2YXIgVmU9dDEoUy5mb290ZXIpO3JldHVybiBWZS5sZW5ndGgmJihlZT1WZVswXSxiZT1WZVsxXSxtZT1WZVsyXSksSyYmTy5wdXNoKCI8b2RkSGVhZGVyPiIrTHIoSykr''@;'; put 'put ''Ijwvb2RkSGVhZGVyPiIpLGVlJiZPLnB1c2goIjxvZGRGb290ZXI+IitMcihlZSkrIjwvb2RkRm9vdGVyPiIpLChtZSE9ZWV8fHNlIT1LKSYmKGsrPScgZGlmZmVyZW50T2RkRXZlbj0iMSInLE8ucHVzaCgiPGV2ZW5IZWFkZXI+IitMcihzZSkrIjwvZXZlbkhlYWRlcj4iKSxPLnB1c2goIjxl''@;'; put 'put ''dmVuRm9vdGVyPiIrTHIobWUpKyI8L2V2ZW5Gb290ZXI+IikpLChiZSE9ZWV8fHBlIT1LKSYmKGsrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxPLnB1c2goIjxmaXJzdEhlYWRlcj4iK0xyKHBlKSsiPC9maXJzdEhlYWRlcj4iKSxPLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0xyKGJlKSsiPC9maXJz''@;'; put 'put ''dEZvb3Rlcj4iKSksTy5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK2srIj4iK08uam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGV0KSxLdC5sZW5ndGgmJihlZVtlZS5sZW5ndGhdPUt0KX1pZigobnVsbCE9YmVbIiFyb3dCcmVha3MiXXx8ZXQmJmV0LnJvd0JyZWFrcykmJihlZVtlZS5s''@;'; put 'put ''ZW5ndGhdPWZ1bmN0aW9uIHVqKFMpe2lmKDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTz1bJzxyb3dCcmVha3MgY291bnQ9IicrUy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0aCsnIj4nXSxrPTA7azxTLmxlbmd0aDsrK2spTy5wdXNoKCc8YnJrIGlkPSInK1Nb''@;'; put 'put ''a10uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gTy5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oYmVbIiFyb3dCcmVha3MiXXx8ZXQucm93QnJlYWtzKSksKG51bGwhPWJlWyIhY29sQnJlYWtzIl18fGV0JiZldC5jb2xCcmVha3MpJiYoZWVbZWUubGVuZ3RoXT1mdW5jdGlvbiB2UyhTKXtpZigw''@;'; put 'put ''PT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIE89Wyc8Y29sQnJlYWtzIGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKU8ucHVzaCgnPGJyayBpZD0iJytTW2tdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJu''@;'; put 'put ''IE8uam9pbigiIikrIjwvY29sQnJlYWtzPiJ9KGJlWyIhY29sQnJlYWtzIl18fGV0LmNvbEJyZWFrcykpLCghT3x8Ty5pZ25vcmVFQ3x8bnVsbD09Ty5pZ25vcmVFQykmJihlZVtlZS5sZW5ndGhdPUhhKCJpZ25vcmVkRXJyb3JzIixQcigiaWdub3JlZEVycm9yIixudWxsLHtudW1iZXJTdG9y''@;'; put 'put ''ZWRBc1RleHQ6MSxzcXJlZjpQZX0pKSksYmVbIiFjaGFydHMiXSYmWWUucHVzaC5hcHBseShZZSxiZVsiIWNoYXJ0cyJdKSxiZVsiIWltYWdlcyJdJiZZZS5wdXNoLmFwcGx5KFllLGJlWyIhaW1hZ2VzIl0pLGJlWyIhc2hhcGVzIl0mJlllLnB1c2guYXBwbHkoWWUsYmVbIiFzaGFwZXMiXSks''@;'; put 'put ''WWUubGVuZ3RoPjAmJihrdD1FcihLLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoUysxKSsiLnhtbCIsS2EuRFJBVyksZWVbZWUubGVuZ3RoXT1QcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksYmVbIiFkcmF3aW5nIl09WWUpLChiZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8''@;'; put 'put ''fChiZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD1FcihLLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiLnZtbCIsS2EuVk1MKSxlZVtlZS5sZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSxiZVsiIWxlZ2FjeSJdPWt0''@;'; put 'put ''KSxiZVsiIXByaW50Il0mJmJlWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBUbj1iZVsiIXByaW50Il0uaW1hZ2VzLHJyPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtUbltTbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihscil7VG5b''@;'; put 'put ''U25dW2xyXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFhuKXtpZihBcnJheS5pc0FycmF5KFRuW1NuXVtscl1bWG5dKSlmb3IodmFyIEJuPTA7Qm48VG5bU25dW2xyXVtYbl0ubGVuZ3RoOysrQm4pVG5bU25dW2xyXVtYbl1bQm5dJiYoVG5bU25dW2xyXVtY''@;'; put 'put ''bl1bQm5dLl9jbnQ9cnIrKyl9KX0pfSkscnI+MCYmKGt0PUVyKEssLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyJIRi52bWwiLEthLlZNTCksZWVbZWUubGVuZ3RoXT1QcigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6InJJZCIra3R9KSxiZVsiIWxlZ2FjeUhGIl09''@;'; put 'put ''a3QpfXJldHVybihiZVsiIXRhYmxlcyJdfHxbXSkubGVuZ3RoPjAmJihlZVtlZS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJytiZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLGJlWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihTbixscil7a3Q9RXIoSywtMSwiLi4vdGFibGVzL3Rh''@;'; put 'put ''YmxlIisoUysxKSsiXyIrbHIrIi54bWwiLEthLlRBQkxFKSxlZVtlZS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJZCcra3QrJyIvPid9KSxlZVtlZS5sZW5ndGhdPSI8L3RhYmxlUGFydHM+IiksZWUubGVuZ3RoPjEmJihlZVtlZS5sZW5ndGhdPSI8L3dvcmtzaGVldD4iLGVlWzFdPWVl''@;'; put 'put ''WzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxlZS5qb2luKCIiKX1mdW5jdGlvbiBNaihTLE8sayxLKXt2YXIgZWU9ZnVuY3Rpb24gU2ooUyxPLGspe3ZhciBLPXluKDE0NSksZWU9KGtbIiFyb3dzIl18fFtdKVtTXXx8e307Sy53cml0ZV9zaGlmdCg0LFMpLEsud3JpdGVfc2hpZnQoNCwwKTt2YXIg''@;'; put 'put ''c2U9MzIwO2VlLmhweD9zZT0yMCpVMyhlZS5ocHgpOmVlLmhwdCYmKHNlPTIwKmVlLmhwdCksSy53cml0ZV9zaGlmdCgyLHNlKSxLLndyaXRlX3NoaWZ0KDEsMCk7dmFyIG1lPTA7ZWUubGV2ZWwmJihtZXw9ZWUubGV2ZWwpLGVlLmhpZGRlbiYmKG1lfD0xNiksKGVlLmhweHx8ZWUuaHB0KSYm''@;'; put 'put ''KG1lfD0zMiksSy53cml0ZV9zaGlmdCgxLG1lKSxLLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHBlPTAsYmU9Sy5sO0subCs9NDtmb3IodmFyIFBlPXtyOlMsYzowfSxWZT0wO1ZlPDE2OysrVmUpaWYoIShPLnMuYz5WZSsxPDwxMHx8Ty5lLmM8VmU8PDEwKSl7Zm9yKHZhciBZZT0tMSxldD0tMSxj''@;'; put 'put ''dD1WZTw8MTA7Y3Q8VmUrMTw8MTA7KytjdClQZS5jPWN0LChBcnJheS5pc0FycmF5KGspPyhrW1BlLnJdfHxbXSlbUGUuY106a1txaShQZSldKSYmKFllPDAmJihZZT1jdCksZXQ9Y3QpO1llPDB8fCgrK3BlLEsud3JpdGVfc2hpZnQoNCxZZSksSy53cml0ZV9zaGlmdCg0LGV0KSl9dmFyIGF0''@;'; put 'put ''PUsubDtyZXR1cm4gSy5sPWJlLEsud3JpdGVfc2hpZnQoNCxwZSksSy5sPWF0LEsubGVuZ3RoPksubD9LLnNsaWNlKDAsSy5sKTpLfShLLGssTyk7KGVlLmxlbmd0aD4xN3x8KE9bIiFyb3dzIl18fFtdKVtLXSkmJkZyKFMsIkJydFJvd0hkciIsZWUpfXZhciB4aj1tdSxFaj1nZjtmdW5jdGlv''@;'; put 'put ''biBGaihTKXtyZXR1cm5bSmgoUyksUGwoUyksIm4iXX12YXIgV0Q9bXUsQzg9Z2YsS0Q9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxxRD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3Rv''@;'; put 'put ''bSJdLERTPVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIFhEKFMpe3ZhciBPPXluKDQpLGs9W09dLEs9cUQuaW5kZXhPZihTLnQpO2lmKEs8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7''@;'; put 'put ''dmFyIHNlPURTLmluZGV4T2YoUy5vcCk7c3dpdGNoKEspe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OnNlPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09c2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1PLndyaXRlX3NoaWZ0KDEsMHxL''@;'; put 'put ''KSxPLndyaXRlX3NoaWZ0KDEsMSksTy53cml0ZV9zaGlmdCgxLDEyfHNlPDw0KSxPLndyaXRlX3NoaWZ0KDEsMCksay5wdXNoKGZ1bmN0aW9uIFIzKFMpe3ZhciBPPVMuc3BsaXQoL1xzKixccyovKSxrPXluKDQpO2sud3JpdGVfc2hpZnQoNCxPLmxlbmd0aCk7dmFyIEs9W2tdO3JldHVybiBP''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oZWUpe0sucHVzaChnZihvbyhlZSkpKX0pLFUoSyl9KCJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6cmEoUy5yZWYpKSk7dmFyIG1lPXluKDE2KTttZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLG1lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksbWUu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxtZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGsucHVzaChtZSk7dmFyIHBlPXluKDgpO3BlLndyaXRlX3NoaWZ0KDQsMCkscGUud3JpdGVfc2hpZnQoNCwwKTt2YXIgYmU9MTtzd2l0Y2goUy50KXtjYXNlIkFueSI6ay5wdXNoKHBlKSxrLnB1''@;'; put 'put ''c2gocGUpO2JyZWFrO2Nhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKG51bGwhPVMudnx8bnVsbCE9Uy5mKWsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMudj90UyhTLnYpOlU0KG51bGw9PVMudj9TLmY6Uy52KSk7ZWxzZXtpZihudWxsPT1TLm1pbnx8bnVsbD09Uy5t''@;'; put 'put ''YXgpdGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIitTLnQ7ay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy5taW4/dFMoUy5taW4pOlU0KFMubWluKSksay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy5tYXg/dFMo''@;'; put 'put ''Uy5tYXgpOlU0KFMubWF4KSksYmU9Mn1icmVhaztjYXNlIkxpc3QiOmlmKG51bGwhPVMubCl7ay5wdXNoKG5TKFMubC5qb2luKCIsIikpKTticmVha31jYXNlIkN1c3RvbSI6aWYoIm51bGwiIT1TLmYpe2sucHVzaChVNChTLmYpKTticmVha310aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlk''@;'; put 'put ''YXRpb246IGBmYCIrKCJMaXN0Ij09Uy50PyIgb3IgYGxgIjoiIikrIiByZXF1aXJlZCBmb3IgVHlwZSAiK1MudDtkZWZhdWx0OnRocm93IlhMU0IgZG9lcyBub3Qgc3VwcG9ydCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1MudH1yZXR1cm4gMT09YmUmJmsucHVzaChwZSksVShrKX1mdW5jdGlv''@;'; put 'put ''biBleihTLE8sayxLLGVlLHNlLG1lKXtpZih2b2lkIDA9PT1PLnYmJm51bGw9PU8uc3x8InoiPT09Ty50JiYhZWUuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgcGU9IiI7c3dpdGNoKE8udCl7Y2FzZSJiIjpwZT1PLnY/IjEiOiIwIjticmVhaztjYXNlImQiOihPPXF0KE8pKS56PU8uenx8QS5f''@;'; put 'put ''dGFibGVbMTRdLE8udj1KZShOZShPLnYpKSxPLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjpwZT0iIitPLnY7YnJlYWs7ZGVmYXVsdDpwZT1PLnZ9dmFyIGJlPXtyOmssYzpLfTtzd2l0Y2goYmUucz1sMChlZS5jZWxsWGZzLGVlLmNlbGxTdHlsZVhmcyxPLGVlKSxPLmwmJnNlWyIhbGlu''@;'; put 'put ''a3MiXS5wdXNoKFtxaShiZSksTy5sXSksTy5jJiZzZVsiIWNvbW1lbnRzIl0ucHVzaChbcWkoYmUpLE8uY10pLE8udCl7Y2FzZSJzIjpjYXNlInN0ciI6aWYoZWUuYm9va1NTVCl7aWYocGU9YVMoZWUuU3RyaW5ncyxPLnYsTy5SP08ucj1RcyhPLlIpOm51bGwsZWUucmV2U3RyaW5ncyksTy5S''@;'; put 'put ''KWZvcih2YXIgUGU9MDtQZTxPLlIubGVuZ3RoOysrUGUpTy5SW1BlXS5zJiZsMChlZS5jZWxsWGZzLGVlLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Ty5SW1BlXS5zfSxlZSk7YmUudD0icyIsYmUudj1wZSxtZT9GcihTLCJCcnRTaG9ydElzc3QiLGZ1bmN0aW9uIGZ5KFMsTyxrKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09ayYmKGs9eW4oOCkpLGZpKE8sayksay53cml0ZV9zaGlmdCg0LE8udiksa30oMCxiZSkpOkZyKFMsIkJydENlbGxJc3N0IixmdW5jdGlvbiBMaihTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXluKDEyKSkseHIoTyxrKSxrLndyaXRlX3NoaWZ0KDQsTy52KSxrfSgwLGJlKSl9''@;'; put 'put ''ZWxzZSBiZS50PSJzdHIiLG1lP0ZyKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIHpqKFMsTyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9eW4oOCs0KlMudi5sZW5ndGgpKSxmaShPLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTyxiZSkpOkZyKFMsIkJydENlbGxT''@;'; put 'put ''dCIsZnVuY3Rpb24gQmooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz15bigxMis0KlMudi5sZW5ndGgpKSx4cihPLGspLEZjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTyxiZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIE8udj09KDB8Ty52KSYmTy52Pi0xZTMm''@;'; put 'put ''Jk8udjwxZTM/bWU/RnIoUywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gVmooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz15big4KSksZmkoTyxrKSx1dihTLnYsayksa30oTyxiZSkpOkZyKFMsIkJydENlbGxSayIsZnVuY3Rpb24gTmooUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz15bigxMikp''@;'; put 'put ''LHhyKE8sayksdXYoUy52LGspLGt9KE8sYmUpKTptZT9GcihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIEluZShTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXluKDEyKSksZmkoTyxrKSxPdShTLnYsayksa30oTyxiZSkpOkZyKFMsIkJydENlbGxSZWFsIixmdW5jdGlvbiBQaihTLE8sayl7''@;'; put 'put ''cmV0dXJuIG51bGw9PWsmJihrPXluKDE2KSkseHIoTyxrKSxPdShTLnYsayksa30oTyxiZSkpLCEwO2Nhc2UiYiI6cmV0dXJuIGJlLnQ9ImIiLG1lP0ZyKFMsIkJydFNob3J0Qm9vbCIsZnVuY3Rpb24geFMoUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz15big1KSksZmkoTyxrKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDEsUy52PzE6MCksa30oTyxiZSkpOkZyKFMsIkJydENlbGxCb29sIixmdW5jdGlvbiBJaihTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXluKDkpKSx4cihPLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShPLGJlKSksITA7Y2FzZSJlIjpyZXR1cm4gYmUudD0iZSIsbWU/''@;'; put 'put ''RnIoUywiQnJ0U2hvcnRFcnJvciIsZnVuY3Rpb24gU2woUyxPLGspe3JldHVybiBudWxsPT1rJiYoaz15big4KSksZmkoTyxrKSxrLndyaXRlX3NoaWZ0KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9KE8sYmUpKTpGcihTLCJCcnRDZWxsRXJyb3IiLGZ1''@;'; put 'put ''bmN0aW9uIGI4KFMsTyxrKXtyZXR1cm4gbnVsbD09ayYmKGs9eW4oOSkpLHhyKE8sayksay53cml0ZV9zaGlmdCgxLFMudiksa30oTyxiZSkpLCEwfXJldHVybiBtZT9GcihTLCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiB6RChTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXluKDQpKSxmaShP''@;'; put 'put ''LGspfSgwLGJlKSk6RnIoUywiQnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBBaihTLE8sayl7cmV0dXJuIG51bGw9PWsmJihrPXluKDgpKSx4cihPLGspfSgwLGJlKSksITB9ZnVuY3Rpb24gVzUoUyxPLGssSyl7dmFyIGVlPXlpKCksc2U9ay5TaGVldE5hbWVzW1NdLG1lPWsuU2hlZXRzW3NlXXx8''@;'; put 'put ''e30scGU9c2U7dHJ5e2smJmsuV29ya2Jvb2smJihwZT1rLldvcmtib29rLlNoZWV0c1tTXS5Db2RlTmFtZXx8cGUpfWNhdGNoe312YXIgYmU9b28obWVbIiFyZWYiXXx8IkExIik7aWYoYmUuZS5jPjE2MzgzfHxiZS5lLnI+MTA0ODU3NSl7aWYoTy5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5n''@;'; put 'put ''ZSAiKyhtZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtiZS5lLmM9TWF0aC5taW4oYmUuZS5jLDE2MzgzKSxiZS5lLnI9TWF0aC5taW4oYmUuZS5jLDEwNDg1NzUpfXJldHVybiBtZVsiIWxpbmtzIl09W10sbWVbIiFjb21tZW50cyJdPVtd''@;'; put 'put ''LEZyKGVlLCJCcnRCZWdpblNoZWV0IiksKGsudmJhcmF3fHxtZVsiIW91dGxpbmUiXSkmJkZyKGVlLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIFRqKFMsTyxrKXtudWxsPT1rJiYoaz15big4NCs0KlMubGVuZ3RoKSk7dmFyIEs9MTkyO08mJihPLmFib3ZlJiYoSyY9LTY1KSxPLmxlZnQmJihLJj0t''@;'; put 'put ''MTI5KSksay53cml0ZV9zaGlmdCgxLEspO2Zvcih2YXIgZWU9MTtlZTwzOysrZWUpay53cml0ZV9zaGlmdCgxLDApO3JldHVybiBtZih7YXV0bzoxfSxrKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxzNShTLGspLGsuc2xpY2UoMCxrLmwpfShwZSxtZVsiIW91''@;'; put 'put ''dGxpbmUiXSkpLEZyKGVlLCJCcnRXc0RpbSIsRWooYmUpKSxmdW5jdGlvbiBpeihTLE8sayl7RnIoUywiQnJ0QmVnaW5Xc1ZpZXdzIiksRnIoUywiQnJ0QmVnaW5Xc1ZpZXciLGZ1bmN0aW9uIE04KFMsTyxrKXtudWxsPT1rJiYoaz15bigzMCkpO3ZhciBLPTkyNDtyZXR1cm4oKChPfHx7fSku''@;'; put 'put ''Vmlld3N8fFtdKVswXXx8e30pLlJUTCYmKEt8PTMyKSxXdChTWyIhZ3JpZGxpbmVzIl0pJiYoSyY9LTUpLFd0KCgoKE98fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuZ3JpZCkmJihLJj0tNSksay53cml0ZV9zaGlmdCgyLEspLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCks''@;'; put 'put ''ay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwwKSxrfShPLGspKSxPWyIhZnJlZXplIl0mJkZyKFMsIkJydFBhbmUiLGZ1bmN0aW9uIFpqKFMpe3ZhciBPPU5vKFNbIiFmcmVlemUiXSksaz15bigyOSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoOCxPLmMsImYiKSxrLndyaXRlX3NoaWZ0KDgsTy5yLCJmIiksay53cml0ZV9zaGlmdCg0''@;'; put 'put ''LE8uciksay53cml0ZV9zaGlmdCg0LE8uYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwzKSxrfShPKSksT1siIXNlbCJdJiZGcihTLCJCcnRTZWwiLGZ1bmN0aW9uIFdqKFMsTyl7dmFyIGs9eW4oMzYpLEs9Uy5jZWxsO2lmKCFLKXtpZighUy5yYW5nZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Sz1xaShNcyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBlZT0ic3RyaW5nIj09dHlwZW9mIEs/Tm8oSyk6SztpZihPKXt2YXIgc2U9InN0cmluZyI9PXR5cGVvZiBPP05vKE8pOk87ay53''@;'; put 'put ''cml0ZV9zaGlmdCg0LGVlLnI+PXNlLnImJmVlLmM+PXNlLmM/MDplZS5yPj1zZS5yJiZlZS5jPHNlLmM/MjplZS5yPHNlLnImJmVlLmM+PXNlLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQoNCwzKTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LGVlLnIpLGsud3JpdGVfc2hpZnQoNCxlZS5jKSxr''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDEpLGsud3JpdGVfc2hpZnQoNCxlZS5yKSxrLndyaXRlX3NoaWZ0KDQsZWUuciksay53cml0ZV9zaGlmdCg0LGVlLmMpLGsud3JpdGVfc2hpZnQoNCxlZS5jKSxrfShPWyIhc2VsIl0sT1siIWZyZWV6ZSJdKSksRnIoUywiQnJ0RW5k''@;'; put 'put ''V3NWaWV3IiksRnIoUywiQnJ0RW5kV3NWaWV3cyIpfShlZSxtZSxrLldvcmtib29rKSxmdW5jdGlvbiBueihTLE8peyFPfHwhT1siIWNvbHMiXXx8KEZyKFMsIkJydEJlZ2luQ29sSW5mb3MiKSxPWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oayxLKXtrJiZGcihTLCJCcnRDb2xJbmZvIixm''@;'; put 'put ''dW5jdGlvbiBHaihTLE8sayl7bnVsbD09ayYmKGs9eW4oMTgpKTt2YXIgSz11OChTLE8pO2sud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3NoaWZ0KDQsMjU2KihLLndpZHRofHwxMCkpLGsud3JpdGVfc2hpZnQoNCwwKTt2YXIgZWU9MDtyZXR1cm4gTy5o''@;'; put 'put ''aWRkZW4mJihlZXw9MSksIm51bWJlciI9PXR5cGVvZiBLLndpZHRoJiYoZWV8PTIpLE8ubGV2ZWwmJihlZXw9Ty5sZXZlbDw8OCksay53cml0ZV9zaGlmdCgyLGVlKSxrfShLLGspKX0pLEZyKFMsIkJydEVuZENvbEluZm9zIikpfShlZSxtZSksZnVuY3Rpb24gSkQoUyxPLGssSyl7dmFyIGVl''@;'; put 'put ''PW9vKE9bIiFyZWYiXXx8IkExIiksbWU9IiIscGU9W107RnIoUywiQnJ0QmVnaW5TaGVldERhdGEiKTt2YXIgYmU9QXJyYXkuaXNBcnJheShPKSxQZT1lZS5lLnI7T1siIXJvd3MiXSYmKFBlPU1hdGgubWF4KGVlLmUucixPWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBWZT1lZS5zLnI7''@;'; put 'put ''VmU8PVBlOysrVmUpe21lPWppKFZlKSxNaihTLE8sZWUsVmUpO3ZhciBZZT0hMTtpZihWZTw9ZWUuZS5yKWZvcih2YXIgZXQ9ZWUucy5jO2V0PD1lZS5lLmM7KytldCl7VmU9PT1lZS5zLnImJihwZVtldF09VGEoZXQpKTt2YXIgY3Q9YmU/KE9bVmVdfHxbXSlbZXRdOk9bcGVbZXRdK21lXTtZ''@;'; put 'put ''ZT0hIWN0JiZleihTLGN0LFZlLGV0LEssTyxZZSl9fUZyKFMsIkJydEVuZFNoZWV0RGF0YSIpfShlZSxtZSwwLE8pLGZ1bmN0aW9uIE9uZShTLE8pe09bIiFwcm90ZWN0Il0mJkZyKFMsIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gbXkoUyxPKXtyZXR1cm4gbnVsbD09TyYmKE89eW4o''@;'; put 'put ''NjYpKSxPLndyaXRlX3NoaWZ0KDIsUy5wYXNzd29yZD9IdihTLnBhc3N3b3JkKTowKSxPLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5z''@;'; put 'put ''ZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVz''@;'; put 'put ''IiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oayl7Ty53cml0ZV9zaGlmdCg0LGtbMV0/bnVsbD09U1trWzBdXXx8U1trWzBdXT8wOjE6bnVsbCE9U1trWzBdXSYmU1trWzBdXT8wOjEpfSksT30oT1siIXByb3RlY3QiXSkpfShlZSxtZSksZnVuY3Rp''@;'; put 'put ''b24gUUQoUyxPLGssSyl7aWYoT1siIWF1dG9maWx0ZXIiXSl7dmFyIGVlPU9bIiFhdXRvZmlsdGVyIl0sc2U9InN0cmluZyI9PXR5cGVvZiBlZS5yZWY/ZWUucmVmOnJhKGVlLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldv''@;'; put 'put ''cmtib29rLk5hbWVzPVtdKTt2YXIgbWU9ay5Xb3JrYm9vay5OYW1lcyxwZT1NcyhzZSk7cGUucy5yPT1wZS5lLnImJihwZS5lLnI9TXMoT1siIXJlZiJdKS5lLnIsc2U9cmEocGUpKTtmb3IodmFyIGJlPTA7YmU8bWUubGVuZ3RoOysrYmUpe3ZhciBQZT1tZVtiZV07aWYoIl94bG5tLl9GaWx0''@;'; put 'put ''ZXJEYXRhYmFzZSI9PVBlLk5hbWUmJlBlLlNoZWV0PT1LKXtQZS5SZWY9IiciK2suU2hlZXROYW1lc1tLXSsiJyEiK3NlO2JyZWFrfX1iZT09bWUubGVuZ3RoJiZtZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkssUmVmOiInIitrLlNoZWV0TmFtZXNbS10rIich''@;'; put 'put ''IitzZX0pLEZyKFMsIkJydEJlZ2luQUZpbHRlciIsZ2Yob28oc2UpKSksRnIoUywiQnJ0RW5kQUZpbHRlciIpfX0oZWUsbWUsayxTKSxmdW5jdGlvbiB0eihTLE8peyFPfHwhT1siIW1lcmdlcyJdfHwoRnIoUywiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBZRChTLE8pe3JldHVybiBu''@;'; put 'put ''dWxsPT1PJiYoTz15big0KSksTy53cml0ZV9zaGlmdCg0LFMpLE99KE9bIiFtZXJnZXMiXS5sZW5ndGgpKSxPWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihrKXtGcihTLCJCcnRNZXJnZUNlbGwiLEM4KGspKX0pLEZyKFMsIkJydEVuZE1lcmdlQ2VsbHMiKSl9KGVlLG1lKSxmdW5jdGlv''@;'; put 'put ''biBveihTLE8pe2lmKE8pe0ZyKFMsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIHZ5KFMsTyl7bnVsbD09TyYmKE89eW4oMTgpKSxPLndyaXRlX3NoaWZ0KDIsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBrPTAsSz0w''@;'; put 'put ''O0s8Uy5sZW5ndGg7KytLKSgoU1tLXXx8e30pLnJlZnx8e30pLnMmJlNbS10ucmVmLnMuYzwwfHwrK2s7cmV0dXJuIE8ud3JpdGVfc2hpZnQoNCxrKSxPfShPKSk7Zm9yKHZhciBrPTA7azxPLmxlbmd0aDsrK2spKChPW2tdfHx7fSkucmVmfHx7fSkucyYmT1trXS5yZWYucy5jPDB8fEZyKFMs''@;'; put 'put ''IkJydERWYWwiLFhEKE9ba10pKTtGcihTLCJCcnRFbmREVmFscyIpfX0oZWUsbWVbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiB5eShTLE8sayl7T1siIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihLKXtpZihLWzFdLlRhcmdldCl7dmFyIGVlPUVyKGssLTEsS1sxXS5UYXJnZXQucmVwbGFj''@;'; put 'put ''ZSgvIy4qJC8sIiIpLEthLkhMSU5LKTtGcihTLCJCcnRITGluayIsZnVuY3Rpb24gUzgoUyxPKXt2YXIgaz15big1MCs0KihTWzFdLlRhcmdldC5sZW5ndGgrKFNbMV0uVG9vbHRpcHx8IiIpLmxlbmd0aCkpO2dmKHtzOk5vKFNbMF0pLGU6Tm8oU1swXSl9LGspLGM1KCJySWQiK08sayk7dmFy''@;'; put 'put ''IEs9U1sxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBGYygoLTE9PUs/IiI6U1sxXS5UYXJnZXQuc2xpY2UoSysxKSl8fCIiLGspLEZjKFNbMV0uVG9vbHRpcHx8IiIsayksRmMoIiIsayksay5zbGljZSgwLGsubCl9KEssZWUpKX19KSxkZWxldGUgT1siIWxpbmtzIl19KGVlLG1lLEsp''@;'; put 'put ''LG1lWyIhbWFyZ2lucyJdJiZGcihlZSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gS2ooUyxPKXtyZXR1cm4gbnVsbD09TyYmKE89eW4oNDgpKSxYMyhTKSxLRC5mb3JFYWNoKGZ1bmN0aW9uKGspe091KFNba10sTyl9KSxPfShtZVsiIW1hcmdpbnMiXSkpLCghT3x8Ty5pZ25vcmVFQ3x8bnVsbD09''@;'; put 'put ''Ty5pZ25vcmVFQykmJmZ1bmN0aW9uIFo1KFMsTyl7IU98fCFPWyIhcmVmIl18fChGcihTLCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSxGcihTLCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIHFqKFMpe3ZhciBPPXluKDI0KTtyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDQpLE8ud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwxKSxnZihTLE8pLE99KG9vKE9bIiFyZWYiXSkpKSxGcihTLCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShlZSxtZSksZnVuY3Rpb24gcnooUyxPLGssSyl7aWYoT1siIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBlZT1FcihLLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoaysx''@;'; put 'put ''KSsiLnZtbCIsS2EuVk1MKTtGcihTLCJCcnRMZWdhY3lEcmF3aW5nIixjNSgicklkIitlZSkpLE9bIiFsZWdhY3kiXT1lZX19KGVlLG1lLFMsSyksRnIoZWUsIkJydEVuZFNoZWV0IiksZWUuZW5kKCl9ZnVuY3Rpb24geDgoUyl7dmFyIEssTz1bXSxrPVMubWF0Y2goL148YzpudW1DYWNoZT4v''@;'; put 'put ''KTsoUy5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXt2YXIgbWU9c2UubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTttZSYmKE9bK21lWzFdXT1rPyttZVsyXTptZVsy''@;'; put 'put ''XSl9KTt2YXIgZWU9UXIoKFMubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oUy5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzZSl7Sz1zZS5yZXBsYWNl''@;'; put 'put ''KC88Lio/Pi9nLCIiKX0pLFtPLGVlLEtdfUthLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0IixLYS5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDE0L3Jl''@;'; put 'put ''bGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIGx6PS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8sUlM9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxQbmU9LzwoPzpcdys6KT9sZWdlbmQ+KFtcc1xTXSo/KTxc''@;'; put 'put ''Lyg/Olx3KzopP2xlZ2VuZD4vLGVJPS88KD86XHcrOik/dGl0bGU+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RpdGxlPi87ZnVuY3Rpb24geTIoUyxPLGssSyxlZSxzZSxtZSxwZSl7dmFyIGJlPXNlfHx7IiF0eXBlIjoiY2hhcnQifTtpZighUylyZXR1cm4gc2U7bWUmJm1lLkFuY2hvciYmKGJl''@;'; put 'put ''WyIhcG9zIl09TDUobWUuQW5jaG9yLHBlKSxiZVsiIXBvc1R5cGUiXT1tZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSxiZVsiIWFic3BvcyJdPUw1KG1lLkFuY2hvcixwZSksYmVbIiFyZWxwb3MiXT1BQyhtZS5BbmNob3IscGUpKSxiZVsiIXBsb3QiXT1bXTt2YXIgUGU9IiIs''@;'; put 'put ''VmU9IiIsWWU9Uy5tYXRjaChseik7WWU/KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksVmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1WZT1TO3ZhciBldD1bXSxjdD1QZS5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8Uy5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8VmUubWF0Y2goLzxj''@;'; put 'put ''OmxhbmcuKj8+Lyk7cmV0dXJuIGN0JiYoYmVbIiFsYW5nIl09KHZyKGN0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksWWUmJigoZXQ9WWVbMV0ubWF0Y2goZUkpKSYmZnVuY3Rpb24gc3ooUyxPKXt2YXIgaz0iIjtTLm1hdGNoKC88YzpyaWNoPi8pJiZTLnJlcGxhY2UoLzxhOnQ+KFtcc1xTXSo/''@;'; put 'put ''KTxcL2E6dD4vZyxmdW5jdGlvbihLLGVlKXtrKz1lZX0pLE9bIiF0aXRsZSJdPWt8fCJDaGFydCBUaXRsZSJ9KGV0WzFdLGJlKSxmdW5jdGlvbiBGbmUoUyxPKXtpZihTKXt2YXIgaz0wLEs9MCxlZT0iQSIsc2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07Uy5yZXBsYWNlKHRJLGZ1''@;'; put 'put ''bmN0aW9uKG1lLHBlKXt2YXIgYmU9e3Q6cGUsYzprLHc6MCxzZXI6W119LFBlPVtdLFZlPShtZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxZZT1WZT9tZS5zbGljZSgwLFZlKTptZTsic2NhdHRlciI9PXBlJiYoUGU9bWUubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9t''@;'; put 'put ''KSkmJnZyKFBlWzBdKSwiYmFyIj09cGUmJihQZT1tZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKGJlLmJhckRpcj0iYmFyIj09dnIoUGVbMF0pLnZhbD8iaCI6InYiKSwoUGU9WWUubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKGJlLmdyb3VwaW5nPXZy''@;'; put 'put ''KFBlWzBdKS52YWx8fCJzdGFuZGFyZCIpLChtZS5tYXRjaChjeil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXt2YXIgRXQ9W10sYXQ9e30sYnQ9W107aWYoY3QubWF0Y2goLzxjOnR4Pi8pKXt2YXIganQ9eDgoKGN0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFd''@;'; put 'put ''fHwiIil8fFtdO2p0WzBdJiZqdFswXVswXSYmKGF0Lm5hbWU9anRbMF1bMF0pLGp0WzJdJiYoYXQubmFtZXJlZj1qdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgS3QsT3Q9Y3QubWF0Y2gobmV3IFJlZ0V4cCgi''@;'; put 'put ''PGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7T3QmJigoT3RbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe0t0PVRuLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKE90WzBdLm1hdGNoKC88YzooPzpcdyopQ2Fj''@;'; put 'put ''aGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7dmFyIHJyPXg4KFRuKTtzZS5zLnI9c2Uucy5jPTAsc2UuZS5jPWssZWU9VGEoaykscnJbMF0uZm9yRWFjaChmdW5jdGlvbihTbixscil7T1tlZStqaShscildPXt0OiJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgU24/Im4iOiJzIix2OlNuLHo6cnJbMV19LEs9bHJ9KSxzZS5lLnI8SyYmKHNlLmUucj1LKSwrK2ssYmUudysrLEV0LnB1c2goa3QpLChyclsyXXx8S3QpJiZidC5wdXNoKHJyWzJdfHxLdCksInZhbCI9PWt0JiYoYXQuej1yclsxXXx8IkdlbmVyYWwiKX0pKX0pLChQZT1tZS5tYXRj''@;'; put 'put ''aCgvPGM6c21vb3RoKFteXC8+XSopXC8+L20pKSYmKGF0LnNtb290aD1udWxsPT12cihQZVswXSkudmFsfHx0aSh2cihQZVswXSkudmFsKSksYXQuY29scz1FdCxhdC5yYW5nZXM9YnQsYmUuc2VyLnB1c2goYXQpfSksImRvdWdobnV0Ij09cGUmJihQZT1tZS5tYXRjaCgvPGM6aG9sZVNpemUo''@;'; put 'put ''W15cLz5dKilcLz4vbSkpJiYoYmUuaG9sZT0odnIoUGVbMF0pLnZhbHx8MTApLzEwMCksT1siIXBsb3QiXS5wdXNoKGJlKX0pLGs+MCYmKE9bIiFyZWYiXT1yYShzZSkpfX0oKFllWzFdLm1hdGNoKFJTKXx8W10pWzFdLGJlKSxudWxsIT0oZXQ9WWVbMV0ubWF0Y2goUG5lKSkmJmZ1bmN0aW9u''@;'; put 'put ''IEVvKFMsTyl7dmFyIGs7T1siIWxlZ2VuZCJdPXtwb3M6InIifSwoaz1TLm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoT1siIWxlZ2VuZCJdLnBvcz12cihrWzBdKS52YWx8fCJyIil9KGV0WzBdLGJlKSksYmV9dmFyIHRJPS88YzooKD86YXJlYXxsaW5lfHN0b2NrfHJh''@;'; put 'put ''ZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/Q2hh''@;'; put 'put ''cnQ+L2dtLGN6PS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtLYS5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgV2E9UHIoImNoYXJ0c2hlZXQiLG51bGwse3htbG5zOllp''@;'; put 'put ''Lm1haW5bMF0sInhtbG5zOnIiOllpLnJ9KTtmdW5jdGlvbiBMUyhTLE8sayxLKXt2YXIgZWU9W0lpLFdhXTtyZXR1cm4gZWUucHVzaCgiPHNoZWV0UHIvPiIpLGVlLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29tVG9G''@;'; put 'put ''aXQ9IjEiLz48L3NoZWV0Vmlld3M+JyksZWVbZWUubGVuZ3RoXT1QcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLEVyKEssLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixLYS5EUkFXKSxlZS5sZW5ndGg+MiYmKGVlW2VlLmxlbmd0aF09IjwvY2hhcnRzaGVl''@;'; put 'put ''dD4iLGVlWzFdPWVlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxlZS5qb2luKCIiKX1mdW5jdGlvbiBPUygpe3ZhciBTPXlpKCk7cmV0dXJuIEZyKFMsIkJydEJlZ2luU2hlZXQiKSxGcihTLCJCcnRFbmRTaGVldCIpLFMuZW5kKCl9dmFyIGJ5PVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9v''@;'; put 'put ''bCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50''@;'; put 'put ''Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZl''@;'; put 'put ''RXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVw''@;'; put 'put ''ZGF0ZUxpbmtzIiwidXNlclNldCJdXSxuST1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29s''@;'; put 'put ''Il0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxyST1bXSxmej1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRv''@;'; put 'put ''Il0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAu''@;'; put 'put ''MDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gaUkoUyxPKXtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spZm9yKHZhciBLPVNba10sZWU9MDtlZSE9Ty5sZW5ndGg7KytlZSl7dmFyIHNlPU9bZWVdO2lmKG51bGw9PUtbc2VbMF1dKUtbc2VbMF1dPXNlWzFdO2Vsc2Ugc3dpdGNo''@;'; put 'put ''KHNlWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgS1tzZVswXV0mJihLW3NlWzBdXT10aShLW3NlWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIEtbc2VbMF1dJiYoS1tzZVswXV09cGFyc2VJbnQoS1tzZVswXV0sMTApKX19fWZ1bmN0aW9uIFEzKFMsTyl7''@;'; put 'put ''Zm9yKHZhciBrPTA7ayE9Ty5sZW5ndGg7KytrKXt2YXIgSz1PW2tdO2lmKG51bGw9PVNbS1swXV0pU1tLWzBdXT1LWzFdO2Vsc2Ugc3dpdGNoKEtbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBTW0tbMF1dJiYoU1tLWzBdXT10aShTW0tbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgU1tLWzBdXSYmKFNbS1swXV09cGFyc2VJbnQoU1tLWzBdXSwxMCkpfX19ZnVuY3Rpb24gUFMoUyl7UTMoUy5XQlByb3BzLGJ5KSxRMyhTLkNhbGNQcixmeiksaUkoUy5XQlZpZXcsbkkpLGlJKFMuU2hlZXRzLHJJKSxjOC5kYXRlMTkwND10aShTLldCUHJvcHMuZGF0''@;'; put 'put ''ZTE5MDQpfXZhciBwej0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIF95KFMsTyl7aWYoUy5sZW5ndGg+MzEpe2lmKE8pcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIGs9ITA7cmV0dXJuIHB6LmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oSyl7aWYoLTEhPVMuaW5kZXhPZihLKSl7aWYoIU8pdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7az0hMX19KSxrfXZhciBFOD0vPFx3Kzp3b3JrYm9vay8sc0k9UHIoIndvcmtib29rIixudWxsLHt4bWxuczpZaS5tYWlu''@;'; put 'put ''WzBdLCJ4bWxuczpyIjpZaS5yfSk7ZnVuY3Rpb24gVDgoUyxPKXt2YXIgaz1PfHx7fSxLPVtJaV07S1tLLmxlbmd0aF09c0k7dmFyIGVlPVMuV29ya2Jvb2smJihTLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5Nb2RpZnkmJihLW0subGVuZ3Ro''@;'; put 'put ''XT1mdW5jdGlvbiBlcChTKXt2YXIgTz17fTtyZXR1cm4gUy53YXJuJiYoTy5yZWFkT25seVJlY29tbWVuZGVkPTEpLE8udXNlck5hbWU9Uy51c2VyfHwiU2hlZXQgSlMiLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoTy5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdv''@;'; put 'put ''KSxTLmVuY3J5cHRpb24uaGFzaCYmKE8uaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKE8uc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKE8uc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksUHIoImZpbGVT''@;'; put 'put ''aGFyaW5nIixudWxsLE8pfShTLldvcmtib29rLk1vZGlmeSkpO3ZhciBzZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O1MuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmKGJ5LmZvckVhY2goZnVuY3Rpb24oUGUpe251bGwhPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0mJlMuV29y''@;'; put 'put ''a2Jvb2suV0JQcm9wc1tQZVswXV0hPVBlWzFdJiYoc2VbUGVbMF1dPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0pfSksUy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYoc2UuY29kZU5hbWU9Uy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBzZS5Db2RlTmFtZSkpLEtbSy5s''@;'; put 'put ''ZW5ndGhdPVByKCJ3b3JrYm9va1ByIixudWxsLHNlKSxTLldvcmtib29rJiZTLldvcmtib29rLlByb3RlY3Rpb24mJihLW0subGVuZ3RoXT1mdW5jdGlvbiB3eShTKXt2YXIgTz17fTtyZXR1cm4gUy5sb2NrU3RydWN0dXJlJiYoTy5sb2NrU3RydWN0dXJlPTEpLFMubG9ja1dpbmRvd3MmJihP''@;'; put 'put ''LmxvY2tXaW5kb3dzPTEpLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoTy53b3JrYm9va0FsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoTy53b3JrYm9va0hhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCksUy5lbmNyeXB0aW9u''@;'; put 'put ''LnNhbHQmJihPLndvcmtib29rU2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKE8ud29ya2Jvb2tTcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxQcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLE8pfShTLldvcmtib29rLlByb3RlY3Rpb24pKTt2''@;'; put 'put ''YXIgbWU9Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLHBlPTA7aWYobWUmJm1lWzBdJiZtZVswXS5IaWRkZW4pe2ZvcihLW0subGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGgmJm1lW3BlXSYmbWVbcGVdLkhpZGRlbjsrK3BlKTtwZT09''@;'; put 'put ''Uy5TaGVldE5hbWVzLmxlbmd0aCYmKHBlPTApLEtbSy5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrcGUrJyIgYWN0aXZlVGFiPSInK3BlKyciLz4nLEtbSy5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihLW0subGVuZ3RoXT0iPHNoZWV0cz4iLHBlPTA7cGUhPVMuU2hl''@;'; put 'put ''ZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIGJlPXtuYW1lOkxyKFMuU2hlZXROYW1lc1twZV0uc2xpY2UoMCwzMSkpfTtpZihiZS5zaGVldElkPSIiKyhwZSsxKSxiZVsicjppZCJdPSJySWQiKyhwZSsxKSxtZVtwZV0pc3dpdGNoKG1lW3BlXS5IaWRkZW4pe2Nhc2UgMTpiZS5zdGF0ZT0iaGlk''@;'; put 'put ''ZGVuIjticmVhaztjYXNlIDI6YmUuc3RhdGU9InZlcnlIaWRkZW4ifUtbSy5sZW5ndGhdPVByKCJzaGVldCIsbnVsbCxiZSl9cmV0dXJuIEtbSy5sZW5ndGhdPSI8L3NoZWV0cz4iLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmxlbmd0aCYmKEtbSy5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZl''@;'; put 'put ''cmVuY2VzPiIsKFMuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUsVmUpe3ZhciBZZT1FcihrLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhWZSsxKSsiLnhtbCIsS2EuWExJTkspO0tbSy5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0i''@;'; put 'put ''cklkJytZZSsnIi8+J30pLEtbSy5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxlZSYmKEtbSy5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIsUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5OYW1lcyYmUy5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFBlKXt2YXIgVmU9e25h''@;'; put 'put ''bWU6UGUuTmFtZX07UGUuQ29tbWVudCYmKFZlLmNvbW1lbnQ9UGUuQ29tbWVudCksbnVsbCE9UGUuU2hlZXQmJihWZS5sb2NhbFNoZWV0SWQ9IiIrUGUuU2hlZXQpLFBlLkhpZGRlbiYmKFZlLmhpZGRlbj0iMSIpLFBlLlJlZiYmKEtbSy5sZW5ndGhdPVByKCJkZWZpbmVkTmFtZSIsTHIoUGUu''@;'; put 'put ''UmVmKSxWZSkpfSksS1tLLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLGsmJmsucGl2b3RzJiZrLnBpdm90cy5sZW5ndGg+MCYmKEsucHVzaCgiPHBpdm90Q2FjaGVzPiIpLGsucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oUGUsVmUpe0sucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJyso''@;'; put 'put ''VmUrMSkrJyIgcjppZD0icklkJytQZVsyXSsnIi8+Jyl9KSxLLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLEsubGVuZ3RoPjImJihLW0subGVuZ3RoXT0iPC93b3JrYm9vaz4iLEtbMV09S1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksSy5qb2luKCIiKX1mdW5jdGlvbiBteihTLE8pe3JldHVybiBP''@;'; put 'put ''fHwoTz15bigxMjcpKSxPLndyaXRlX3NoaWZ0KDQsUy5IaWRkZW4pLE8ud3JpdGVfc2hpZnQoNCxTLmlUYWJJRCksYzUoUy5zdHJSZWxJRCxPKSxGYyhTLm5hbWUuc2xpY2UoMCwzMSksTyksTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99ZnVuY3Rpb24gdHAoUyxPKXt2YXIgaz17fTty''@;'; put 'put ''ZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGsuQXJjaElEPVMucmVhZF9zaGlmdCg0KSxTLmwrPU8tOCxrfWZ1bmN0aW9uIFN5KFMsTyl7dmFyIGs9eWkoKTtyZXR1cm4gRnIoaywiQnJ0QmVnaW5Cb29rIiksRnIoaywiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIGNJKFMsTyl7T3x8KE89eW4oMTI3''@;'; put 'put ''KSk7Zm9yKHZhciBrPTA7NCE9azsrK2spTy53cml0ZV9zaGlmdCg0LDApO3JldHVybiBGYygiU2hlZXRKUyIsTyksRmMody52ZXJzaW9uLE8pLEZjKHcudmVyc2lvbixPKSxGYygiNzI2MiIsTyksTy5sZW5ndGg+Ty5sP08uc2xpY2UoMCxPLmwpOk99KCkpLEZyKGssIkJydFdiUHJvcCIsZnVu''@;'; put 'put ''Y3Rpb24gbEkoUyxPKXtPfHwoTz15big3MikpO3ZhciBrPTA7cmV0dXJuIFMmJlMuZmlsdGVyUHJpdmFjeSYmKGt8PTgpLE8ud3JpdGVfc2hpZnQoNCxrKSxPLndyaXRlX3NoaWZ0KDQsMCksczUoUyYmUy5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsTyksTy5zbGljZSgwLE8ubCl9KFMuV29y''@;'; put 'put ''a2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIHZ6KFMsTyl7aWYoTy5Xb3JrYm9vayYmTy5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgaz1PLldvcmtib29rLlNoZWV0cyxLPTAsZWU9LTEsc2U9LTE7SzxrLmxlbmd0aDsrK0spIWtbS118fCFrW0tdLkhpZGRlbiYm''@;'; put 'put ''LTE9PWVlP2VlPUs6MT09a1tLXS5IaWRkZW4mJi0xPT1zZSYmKHNlPUspO3NlPmVlfHwoRnIoUywiQnJ0QmVnaW5Cb29rVmlld3MiKSxGcihTLCJCcnRCb29rVmlldyIsZnVuY3Rpb24gdUkoUyxPKXtyZXR1cm4gT3x8KE89eW4oMjkpKSxPLndyaXRlX3NoaWZ0KC00LDApLE8ud3JpdGVfc2hp''@;'; put 'put ''ZnQoLTQsNDYwKSxPLndyaXRlX3NoaWZ0KDQsMjg4MDApLE8ud3JpdGVfc2hpZnQoNCwxNzYwMCksTy53cml0ZV9zaGlmdCg0LDUwMCksTy53cml0ZV9zaGlmdCg0LFMpLE8ud3JpdGVfc2hpZnQoNCxTKSxPLndyaXRlX3NoaWZ0KDEsMTIwKSxPLmxlbmd0aD5PLmw/Ty5zbGljZSgwLE8ubCk6''@;'; put 'put ''T30oZWUpKSxGcihTLCJCcnRFbmRCb29rVmlld3MiKSl9fShrLFMpLGZ1bmN0aW9uIEN5KFMsTyl7RnIoUywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIGs9MDtrIT1PLlNoZWV0TmFtZXMubGVuZ3RoOysraylGcihTLCJCcnRCdW5kbGVTaCIsbXooe0hpZGRlbjpPLldvcmtib29rJiZP''@;'; put 'put ''Lldvcmtib29rLlNoZWV0cyYmTy5Xb3JrYm9vay5TaGVldHNba10mJk8uV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbnx8MCxpVGFiSUQ6aysxLHN0clJlbElEOiJySWQiKyhrKzEpLG5hbWU6Ty5TaGVldE5hbWVzW2tdfSkpO0ZyKFMsIkJydEVuZEJ1bmRsZVNocyIpfShrLFMpLEZyKGssIkJy''@;'; put 'put ''dEVuZEJvb2siKSxrLmVuZCgpfWZ1bmN0aW9uIGRJKFMsTyxrLEssZWUpe3JldHVybigiLmJpbiI9PT1PLnNsaWNlKC00KT9XNTpWRCkoUyxrLEssZWUpfWZ1bmN0aW9uIGhJKFMsTyxrLEssZWUpe3JldHVybigiLmJpbiI9PT1PLnNsaWNlKC00KT9PUzpMUykoUyxrLEssZWUpfWZ1bmN0aW9u''@;'; put 'put ''IGZJKFMsTyxrKXtyZXR1cm4oIi5iaW4iPT09Ty5zbGljZSgtNCk/dWs6UnYpKFMsayl9ZnVuY3Rpb24gQXooUyxPLGspe3JldHVybigiLmJpbiI9PT1PLnNsaWNlKC00KT9OQzpIQykoUyxrKX12YXIgQlM9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkv''@;'; put 'put ''ZyxNeT0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIEgwKFMsTyl7dmFyIGs9Uy5zcGxpdCgvXHMrLyksSz1bXTtpZihPfHwoS1swXT1rWzBdKSwxPT09ay5sZW5ndGgpcmV0dXJuIEs7dmFyIHNlLG1lLGJlLGVlPVMubWF0Y2go''@;'; put 'put ''QlMpO2lmKGVlKWZvcihiZT0wO2JlIT1lZS5sZW5ndGg7KytiZSktMT09PShtZT0oc2U9ZWVbYmVdLm1hdGNoKE15KSlbMV0uaW5kZXhPZigiOiIpKT9LW3NlWzFdXT1zZVsyXS5zbGljZSgxLHNlWzJdLmxlbmd0aC0xKTpLWyJ4bWxuczoiPT09c2VbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK3Nl''@;'; put 'put ''WzFdLnNsaWNlKDYpOnNlWzFdLnNsaWNlKG1lKzEpXT1zZVsyXS5zbGljZSgxLHNlWzJdLmxlbmd0aC0xKTtyZXR1cm4gS31mdW5jdGlvbiBqUyhTKXt2YXIgaz17fTtpZigxPT09Uy5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBrO3ZhciBlZSxzZSxwZSxLPVMubWF0Y2goQlMpO2lmKEsp''@;'; put 'put ''Zm9yKHBlPTA7cGUhPUsubGVuZ3RoOysrcGUpLTE9PT0oc2U9KGVlPUtbcGVdLm1hdGNoKE15KSlbMV0uaW5kZXhPZigiOiIpKT9rW2VlWzFdXT1lZVsyXS5zbGljZSgxLGVlWzJdLmxlbmd0aC0xKTprWyJ4bWxuczoiPT09ZWVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK2VlWzFdLnNsaWNlKDYp''@;'; put 'put ''OmVlWzFdLnNsaWNlKHNlKzEpXT1lZVsyXS5zbGljZSgxLGVlWzJdLmxlbmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBreihTKXt2YXIgTz17fTtpZihTLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBrPXtocHg6NCpwYXJzZUludChTLkRlZmF1bHRSb3dIZWlnaHQpLzN9O2p2KGspLE8ucm93PWt9''@;'; put 'put ''aWYoUy5EZWZhdWx0Q29sV2lkdGgpe3ZhciBLPXt3cHg6NCpwYXJzZUludChTLkRlZmF1bHRDb2xXaWR0aCkvM307UTAoSyksTy5jb2w9S31yZXR1cm4gT31mdW5jdGlvbiBJeihTLE8sayxLKXt2YXIgZWU9Sztzd2l0Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIi''@;'; put 'put ''XSlbMV0pe2Nhc2UiYm9vbGVhbiI6ZWU9dGkoSyk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOmVlPXBhcnNlSW50KEssMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOmVlPXBhcnNlRmxvYXQoSyk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjplZT1OZShLKTticmVh''@;'; put 'put ''aztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitrWzBdKX1TW1FyKE8pXT1lZX12YXIgeHk9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91Ymxl''@;'; put 'put ''IiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxwST1EZSh4eSk7ZnVuY3Rpb24gVVMoUyxPLGssSyl7aWYoSy5jZWxsU3R5bGVzKXtpZihrPWsucmVwbGFjZSgvXHMrL2csIiAiKSxPLkludGVyaW9yKXt2YXIgZWU9Ty5JbnRlcmlvcjtlZS5QYXR0ZXJuJiYo''@;'; put 'put ''ZWUucGF0dGVyblR5cGU9bUNbZWUuUGF0dGVybl18fGVlLlBhdHRlcm4pLGVlLkNvbG9yJiZlZS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoZWUuZmdDb2xvcj17cmdiOmVlLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIFJ6KFMpe1MuQm9yZGVycyYmKFMuQm9yZGVycy5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKE8pe3ZhciBrPU8uUG9zaXRpb24udG9Mb3dlckNhc2UoKTtTW2tdPXtzdHlsZTpaUyhPLkxpbmVTdHlsZSwrTy5XZWlnaHQpLGNvbG9yOntyZ2I6KE8uQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBTLkJvcmRlcnMpfShPKTt2YXIgbWUsc2U9ay5t''@;'; put 'put ''YXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO3NlJiYodGkoKG1lPXZyKHNlWzBdKSkuQm9sZCkmJihPLkJvbGQ9ITApLHRpKG1lLkl0YWxpYykmJihPLkl0YWxpYz0hMCksdGkobWUuU3RyaWtlVGhyb3VnaCkmJihPLlN0cmlrZT0hMCksbWUuU2l6ZSYmKE8uU2l6ZT0rbWUuU2l6ZSks''@;'; put 'put ''Ty5Gb250TmFtZT1tZS5Gb250TmFtZT9tZS5Gb250TmFtZToiQXJpYWwiLG1lLlVuZGVybGluZSYmKE8uVW5kZXJsaW5lPXBJW21lLlVuZGVybGluZV0pLG1lLkNvbG9yJiYoTy5SR0I9bWUuQ29sb3Iuc2xpY2UoLTYpKSksTy5BbGlnbm1lbnQmJihPLmFsaWdubWVudD17fSxPLkFsaWdubWVu''@;'; put 'put ''dC5WZXJ0aWNhbCYmKE8uYWxpZ25tZW50LnZlcnRpY2FsPU8uQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLE8uQWxpZ25tZW50Lkhvcml6b250YWwmJihPLmFsaWdubWVudC5ob3Jpem9udGFsPU8uQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSksdGkoTy5BbGln''@;'; put 'put ''bm1lbnQuV3JhcFRleHR8fCIwIik/Ty5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09Ty5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBPLmFsaWdubWVudC53cmFwVGV4dCx0aShPLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKE8uYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwr''@;'; put 'put ''Ty5BbGlnbm1lbnQuSW5kZW50JiYoTy5hbGlnbm1lbnQuaW5kZW50PStPLkFsaWdubWVudC5JbmRlbnR8fDApLCtPLkFsaWdubWVudC5Sb3RhdGUmJihPLmFsaWdubWVudC50ZXh0Um90YXRpb249K08uQWxpZ25tZW50LlJvdGF0ZXx8MCkpfVNbTy5JRF09TywoIkRlZmF1bHQiPT1PLklEfHwi''@;'; put 'put ''Tm9ybWFsIj09Ty5OYW1lKSYmSTQoTyl9ZnVuY3Rpb24gWlMoUyxPKXtzd2l0Y2goUyl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNo''@;'; put 'put ''RG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrT3x8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4i''@;'; put 'put ''O2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIFN9ZnVuY3Rpb24gZ0koUyxPLGssSyxlZSxzZSxtZSxwZSxiZSxQZSl7dmFyIFZlPSJHZW5lcmFsIixZZT1LLlN0eWxlSUQsZXQ9e307UGU9UGV8fHt9O3ZhciBjdD1bXSxFdD0w''@;'; put 'put ''O2Zvcih2b2lkIDA9PT1ZZSYmcGUmJihZZT1wZS5TdHlsZUlEKSx2b2lkIDA9PT1ZZSYmbWUmJihZZT1tZS5TdHlsZUlEKTt2b2lkIDAhPT1zZVtZZV07KXt2YXIgYXQ9c2VbWWVdO2lmKCJHZW5lcmFsIj09VmUmJmF0Lm5mJiYoVmU9c2VbWWVdLm5mKSxhdC5JbnRlcmlvciYmY3QucHVzaChz''@;'; put 'put ''ZVtZZV0uSW50ZXJpb3IpLGF0LmFsaWdubWVudCYmKGV0LmFsaWdubWVudHx8KGV0LmFsaWdubWVudD1xdChhdC5hbGlnbm1lbnQpKSksbnVsbD09ZXQuYm9sZCYmYXQuQm9sZCYmKGV0LmJvbGQ9ITApLG51bGw9PWV0Lml0YWxpYyYmYXQuSXRhbGljJiYoZXQuaXRhbGljPSEwKSxudWxsPT1l''@;'; put 'put ''dC5zdHJpa2UmJmF0LlN0cmlrZSYmKGV0LnN0cmlrZT0hMCksbnVsbD09ZXQuc3omJmF0LlNpemUmJihldC5zej1hdC5TaXplKSxudWxsPT1ldC5uYW1lJiZhdC5Gb250TmFtZSYmKGV0Lm5hbWU9YXQuRm9udE5hbWUpLG51bGw9PWV0LnVuZGVybGluZSYmYXQuVW5kZXJsaW5lJiYoZXQudW5k''@;'; put 'put ''ZXJsaW5lPWF0LlVuZGVybGluZSksbnVsbD09ZXQuY29sb3ImJmF0LlJHQiYmKGV0LmNvbG9yPXtyZ2I6YXQuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtudWxsPT1ldFtPdF0mJmF0W090XSYmKGV0W090XT1xdChhdFtPdF0pKX0p''@;'; put 'put ''LCJEZWZhdWx0Ij09WWUpYnJlYWs7WWU9YXQuUGFyZW50fHwiRGVmYXVsdCJ9ZXQubmFtZXx8KGV0Lm5hbWU9c2UuRGVmYXVsdCYmc2UuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksZXQuc3p8fChldC5zej1zZS5EZWZhdWx0JiZzZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYo''@;'; put 'put ''U3x8Sy5Gb3JtdWxhfHwiU3RyaW5nIj09ay5UeXBlfHwiTnVtYmVyIj09ay5UeXBlKXN3aXRjaChrLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Sy50PSJiIixLLnY9dGkoUyk7YnJlYWs7Y2FzZSJTdHJpbmciOksudD0icyIsYnQ9TGEoUXIoUykpLEsudj1TLmluZGV4T2YoIjwiKT4tMT9RcihPfHxT''@;'; put 'put ''KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoSy5SPW1kLmh0bWxfdG9fcnMoUXIoUykpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPVMuc2xpY2UoLTEpJiYoUys9IloiKSxLLnY9KE5lKFMpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkv''@;'; put 'put ''ODY0ZTUsSy52IT1LLnY/Sy52PVFyKFMpOksudjw2MCYmKEsudj1LLnYtMSksKCFWZXx8IkdlbmVyYWwiPT1WZSkmJihWZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1LLnYmJihLLnY9K1MpLEsudHx8KEsudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOksudD0iZSIsSy52''@;'; put 'put ''PVAzW1NdLCExIT09UGUuY2VsbFRleHQmJihLLnc9Uyk7YnJlYWs7ZGVmYXVsdDoiIj09UyYmIiI9PU8/Sy50PSJ6IjooSy50PSJzIixidD1MYShRcihTKSksSy52PVMuaW5kZXhPZigiPCIpPi0xP1FyKE98fFMpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEm''@;'; put 'put ''JihLLlI9bWQuaHRtbF90b19ycyhRcihTKSkpKX1lbHNlIEsudD0ieiIsZGVsZXRlIEsudjtpZihmdW5jdGlvbiB6UyhTLE8sayl7aWYoInoiIT09Uy50KXtpZigha3x8ITEhPT1rLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8TWNbUy52XToiR2VuZXJhbCI9PT1PPyJuIj09PVMu''@;'; put 'put ''dD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6ZnVuY3Rpb24gRHooUyxPKXt2YXIgaz1uZVtTXXx8UXIoUyk7cmV0dXJuIkdlbmVyYWwiPT09az9BLl9nZW5lcmFsKE8pOkEuZm9ybWF0KGssTyl9KE98fCJHZW5l''@;'; put 'put ''cmFsIixTLnYpfWNhdGNoKHNlKXtpZihrLldURil0aHJvdyBzZX10cnl7dmFyIEs9bmVbT118fE98fCJHZW5lcmFsIjtpZihrLmNlbGxORiYmKFMuej1LKSxrLmNlbGxEYXRlcyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShLKSl7dmFyIGVlPUEucGFyc2VfZGF0ZV9jb2RlKFMudik7ZWUmJihTLnQ9''@;'; put 'put ''ImQiLFMudj1uZXcgRGF0ZShlZS55LGVlLm0tMSxlZS5kLGVlLkgsZWUuTSxlZS5TLGVlLnUpKX19Y2F0Y2goc2Upe2lmKGsuV1RGKXRocm93IHNlfX19KEssVmUsUGUpLCExIT09UGUuY2VsbEZvcm11bGEpaWYoSy5Gb3JtdWxhKXt2YXIganQ9UXIoSy5Gb3JtdWxhKTs2MT09anQuY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGp0PWp0LnNsaWNlKDEpKSxLLmY9SDUoanQsZWUpLGRlbGV0ZSBLLkZvcm11bGEsIlJDIj09Sy5BcnJheVJhbmdlP0suRj1INSgiUkM6UkMiLGVlKTpLLkFycmF5UmFuZ2UmJihLLkY9SDUoSy5BcnJheVJhbmdlLGVlKSxiZS5wdXNoKFtvbyhLLkYpLEsuRl0pKX1lbHNlIGZv''@;'; put 'put ''cihFdD0wO0V0PGJlLmxlbmd0aDsrK0V0KWVlLnI+PWJlW0V0XVswXS5zLnImJmVlLnI8PWJlW0V0XVswXS5lLnImJmVlLmM+PWJlW0V0XVswXS5zLmMmJmVlLmM8PWJlW0V0XVswXS5lLmMmJihLLkY9YmVbRXRdWzFdKTtpZihQZS5jZWxsU3R5bGVzJiYoY3QuZm9yRWFjaChmdW5jdGlvbihP''@;'; put 'put ''dCl7IWV0LnBhdHRlcm5UeXBlJiZPdC5wYXR0ZXJuVHlwZSYmKGV0LnBhdHRlcm5UeXBlPU90LnBhdHRlcm5UeXBlKSwhZXQuZmdDb2xvciYmT3QuZmdDb2xvciYmKGV0LmZnQ29sb3I9T3QuZmdDb2xvcil9KSxLLnM9ZXQpLHZvaWQgMCE9PUsuU3R5bGVJRCYmKEsuaXhmZT1LLlN0eWxlSUQp''@;'; put 'put ''LEsuUiYmSy5zKXt2YXIga3Q9cXQoSy5zKTtkZWxldGUga3QuYm9sZCxkZWxldGUga3QuaXRhbGljLGRlbGV0ZSBrdC51bmRlcmxpbmUsZGVsZXRlIGt0LnN0cmlrZSxLLlIuZm9yRWFjaChmdW5jdGlvbihPdCl7T3Qucz1QdChxdChrdCksT3Qucyl9KX19ZnVuY3Rpb24gTHooUyl7Uy50PVMu''@;'; put 'put ''dnx8IiIsUy50PVMudC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxTLnY9Uy53PVMuaXhmZT12b2lkIDB9ZnVuY3Rpb24gV1MoUyl7aWYoVGUmJkJ1ZmZlci5pc0J1ZmZlcihTKSlyZXR1cm4gUy50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''UylyZXR1cm4gUztpZih0eXBlb2YgVWludDhBcnJheTwidSImJlMgaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBnbyhDKFYoUykpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgWTU9LzwoXC8/KShbXlxzPz48''@;'; put 'put ''IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIEQ4KFMsTyl7dmFyIGs9T3x8e30sSz1YKFdTKFMpKTsoImJpbmFyeSI9PWsudHlwZXx8ImFycmF5Ij09ay50eXBlfHwiYmFzZTY0Ij09ay50eXBlKSYmKEs9dHlwZW9mIGNwdGFibGU8InUi''@;'; put 'put ''P2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFooSykpOmdvKEspKTt2YXIgZWU9Sy5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksc2U9ITE7aWYoKDEwMjMmZWUuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJmVlLmluZGV4T2YoIiwiKSwxMDIzJmVlLmluZGV4T2YoIjsiKSkpe3Zh''@;'; put 'put ''ciBtZT1xdChrKTtyZXR1cm4gbWUudHlwZT0ic3RyaW5nIixqMy50b193b3JrYm9vayhLLG1lKX1pZigtMT09ZWUuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbihidSl7ZWUuaW5k''@;'; put 'put ''ZXhPZigiPCIrYnUpPj0wJiYoc2U9ITApfSksc2UpcmV0dXJuIG1kLnRvX3dvcmtib29rKEssayk7dmFyIHBlLFBlLGJlPVtdO251bGwhPW9lJiZudWxsPT1rLmRlbnNlJiYoay5kZW5zZT1vZSk7dmFyIGtyLFZlPXt9LFllPVtdLGV0PWsuZGVuc2U/W106e30sY3Q9IiIsRXQ9e30sYXQ9e30s''@;'; put 'put ''YnQ9e30sanQ9SDAoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+Jyksa3Q9MCxPdD0wLEt0PTAsVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0scnI9e30sU249e30sbHI9IiIsWG49MCxCbj1bXSxmcj17fSx5cj17fSxlcj0wLE1pPVtdLEZpPXt9LG5hPVtdLGNhPXt9LExpPVtdLFZu''@;'; put 'put ''PSExLEJyPVtdLF9yPVtdLEZuPXt9LGpyPTAsWmk9MCxiaT17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sX2E9e307WTUubGFzdEluZGV4PTAsSz1LLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIHNvPSIiO3BlPVk1LmV4ZWMoSyk7KXN3aXRjaChw''@;'; put 'put ''ZVszXT0oc289cGVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1zbyl7aWYoIi8iPT09cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFy''@;'; put 'put ''QXQocGVbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtwZVszXSwhMF0pO2JyZWFrfWlmKGJlW2JlLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT1wZVsxXT9nSShLLnNsaWNlKGt0LHBlLmluZGV4KSxscixqdCwiY29tbWVudCI9PWJlW2JlLmxlbmd0aC0xXVswXT9jYTphdCx7YzpPdCxyOkt0fSxy''@;'; put 'put ''cixMaVtPdF0sYnQsQnIsayk6KGxyPSIiLGp0PUgwKHBlWzBdKSxrdD1wZS5pbmRleCtwZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09cGVbMV18fCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2lmKChhdD1qUyhwZVswXSkp''@;'; put 'put ''LkluZGV4JiYoT3Q9K2F0LkluZGV4LTEpLE90PFRuLnMuYyYmKFRuLnMuYz1PdCksT3Q+VG4uZS5jJiYoVG4uZS5jPU90KSxuYT1bXSwhay5zaGVldFN0dWJzKXsrK090O2JyZWFrfWdJKCIiLCIiLHt9LCJjb21tZW50Ij09YmVbYmUubGVuZ3RoLTFdWzBdP2NhOmF0LHtjOk90LHI6S3R9LHJy''@;'; put 'put ''LExpW090XSxidCxCcixrKX1pZihuYS5sZW5ndGg+MCYmKGF0LmM9bmEpLCghay5zaGVldFJvd3N8fGsuc2hlZXRSb3dzPkt0KSYmKHZvaWQgMCE9PWF0LnZ8fGsuc2hlZXRTdHVicykmJihrLmRlbnNlPyhldFtLdF18fChldFtLdF09W10pLGV0W0t0XVtPdF09YXQpOmV0W1RhKE90KStqaShL''@;'; put 'put ''dCldPWF0KSxhdC5IUmVmJiYoYXQubD17VGFyZ2V0OlFyKGF0LkhSZWYpfSxhdC5IUmVmU2NyZWVuVGlwJiYoYXQubC5Ub29sdGlwPWF0LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSBhdC5IUmVmLGRlbGV0ZSBhdC5IUmVmU2NyZWVuVGlwKSwoYXQuTWVyZ2VBY3Jvc3N8fGF0Lk1lcmdlRG93bikm''@;'; put 'put ''Jihqcj1PdCsoMHxwYXJzZUludChhdC5NZXJnZUFjcm9zcywxMCkpLFppPUt0KygwfHBhcnNlSW50KGF0Lk1lcmdlRG93biwxMCkpLChqcj5PdHx8Wmk+S3QpJiZCbi5wdXNoKHtzOntjOk90LHI6S3R9LGU6e2M6anIscjpaaX19KSksay5zaGVldFN0dWJzKWlmKGF0Lk1lcmdlQWNyb3NzfHxh''@;'; put 'put ''dC5NZXJnZURvd24pe2Zvcih2YXIgaWE9T3Q7aWE8PWpyOysraWEpZm9yKHZhciBMbz1LdDtMbzw9Wmk7KytMbykoaWE+T3R8fExvPkt0KSYmKGsuZGVuc2U/KGV0W0xvXXx8KGV0W0xvXT1bXSksZXRbTG9dW2lhXT17dDoieiJ9KTpldFtUYShpYSkramkoTG8pXT17dDoieiJ9KTtPdD1qcisx''@;'; put 'put ''fWVsc2UrK090O2Vsc2UgYXQuTWVyZ2VBY3Jvc3M/T3Q9anIrMTorK090fWVsc2UoYXQ9alMocGVbMF0pKS5JbmRleCYmKE90PSthdC5JbmRleC0xKSxPdDxUbi5zLmMmJihUbi5zLmM9T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKytPdCxuYT1b''@;'; put 'put ''XTticmVhaztjYXNlInJvdyI6Ii8iPT09cGVbMV18fCIvPiI9PT1wZVswXS5zbGljZSgtMik/KEt0PFRuLnMuciYmKFRuLnMucj1LdCksS3Q+VG4uZS5yJiYoVG4uZS5yPUt0KSwiLz4iPT09cGVbMF0uc2xpY2UoLTIpJiYoYnQ9SDAocGVbMF0pKS5JbmRleCYmKEt0PStidC5JbmRleC0xKSxP''@;'; put 'put ''dD0wLCsrS3QpOigoYnQ9SDAocGVbMF0pKS5JbmRleCYmKEt0PStidC5JbmRleC0xKSxGbj17fSwoIjAiPT1idC5BdXRvRml0SGVpZ2h0fHxidC5IZWlnaHQpJiYoRm4uaHB0PXBhcnNlRmxvYXQoYnQuSGVpZ2h0KSxGbi5ocHg9c2goRm4uaHB0KSxfcltLdF09Rm4pLCIxIj09YnQuSGlkZGVu''@;'; put 'put ''JiYoRm4uaGlkZGVuPSEwLF9yW0t0XT1GbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7WWUucHVzaChjdCksVG4ucy5yPD1Ubi5lLnIm''@;'; put 'put ''JlRuLnMuYzw9VG4uZS5jJiYoZXRbIiFyZWYiXT1yYShUbiksay5zaGVldFJvd3MmJmsuc2hlZXRSb3dzPD1Ubi5lLnImJihldFsiIWZ1bGxyZWYiXT1ldFsiIXJlZiJdLFRuLmUucj1rLnNoZWV0Um93cy0xLGV0WyIhcmVmIl09cmEoVG4pKSksQm4ubGVuZ3RoJiYoZXRbIiFtZXJnZXMiXT1C''@;'; put 'put ''biksTGkubGVuZ3RoPjAmJihldFsiIWNvbHMiXT1MaSksX3IubGVuZ3RoPjAmJihldFsiIXJvd3MiXT1fciksRXQmJihldFsiIXNoZWV0Rm9ybWF0Il09a3ooRXQpKSxWZVtjdF09ZXR9ZWxzZSBUbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxLdD1PdD0wLGJlLnB1c2goW3BlWzNd''@;'; put 'put ''LCExXSksUGU9SDAocGVbMF0pLGN0PVFyKFBlLk5hbWUpLGV0PWsuZGVuc2U/W106e30sQm49W10sQnI9W10sX3I9W10sYmkuU2hlZXRzLnB1c2goX2E9e25hbWU6Y3QsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPWJlLnBvcCgpKVswXSE9PXBl''@;'; put 'put ''WzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT1wZVswXS5zbGljZSgtMikpYnJlYWs7RXQ9SDAocGVbMF0pLGJlLnB1c2goW3BlWzNdLCExXSksTGk9W10sVm49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09cGVbMV0/VVMocnIs''@;'; put 'put ''U24sbHIsayk6KFNuPUgwKHBlWzBdKSxscj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOlNuLm5mPVFyKEgwKHBlWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksbmVbU24ubmZdJiYoU24ubmY9bmVbU24ubmZdKTtmb3IodmFyIE9hPTA7MzkyIT1PYSYmQS5fdGFibGVbT2FdIT1Tbi5uZjsr''@;'; put 'put ''K09hKTtpZigzOTI9PU9hKWZvcihPYT01NzszOTIhPU9hOysrT2EpaWYobnVsbD09QS5fdGFibGVbT2FdKXtBLmxvYWQoU24ubmYsT2EpO2JyZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjppZigidGFibGUiIT09YmVbYmUubGVuZ3RoLTFdWzBdfHwiLyI9PT1wZVsxXSlicmVhaztpZigoa3I9SDAo''@;'; put 'put ''cGVbMF0pKS5IaWRkZW4mJihrci5oaWRkZW49ITAsZGVsZXRlIGtyLkhpZGRlbiksa3IuV2lkdGg/a3Iud3B4PTQqcGFyc2VJbnQoa3IuV2lkdGgsMTApLzM6K2tyLkF1dG9GaXRXaWR0aCYmKGtyLmF1dG89MSksIVZuJiZrci53cHg+MTApe1ZuPSEwLFRjPWZrO2Zvcih2YXIgaG89MDtobzxM''@;'; put 'put ''aS5sZW5ndGg7KytobylMaVtob10mJlEwKExpW2hvXSl9Vm4mJlEwKGtyKSxMaVtrci5JbmRleC0xfHxMaS5sZW5ndGhdPWtyO2Zvcih2YXIgSmE9MDtKYTwra3IuU3BhbjsrK0phKUxpW0xpLmxlbmd0aF09cXQoa3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09cGVbMV0pYnJl''@;'; put 'put ''YWs7YmkuTmFtZXN8fChiaS5OYW1lcz1bXSk7dmFyIEJpPXZyKHBlWzBdKSxJcz17TmFtZTpCaS5OYW1lLFJlZjpINShCaS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtiaS5TaGVldHMubGVuZ3RoPjAmJihJcy5TaGVldD1iaS5TaGVldHMubGVuZ3RoLTEpLGJpLk5hbWVzLnB1c2go''@;'; put 'put ''SXMpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVh''@;'; put 'put ''aztjYXNlImFsaWdubWVudCI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7U24uQWxpZ25tZW50PUgwKHBlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXBlWzFdJiYoU24uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXBlWzFdKWJyZWFr''@;'; put 'put ''O1NuLkJvcmRlcnN8fChTbi5Cb3JkZXJzPVtdKSxTbi5Cb3JkZXJzLnB1c2goSDAocGVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe2xyKz1wZVswXTticmVha30iLyI9PT1wZVsxXT9scis9Sy5zbGljZShYbixwZS5pbmRleCtwZVswXS5sZW5ndGgp''@;'; put 'put ''OlhuPXBlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFrLmNlbGxTdHlsZXN8fCIvIj09PXBlWzFdKWJyZWFrO1NuLkludGVyaW9yPUgwKHBlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdv''@;'; put 'put ''cmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpj''@;'; put 'put ''YXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09cGVbMV0/RjMoZnIsc28sSy5zbGljZShlcixwZS5pbmRleCkpOmVyPXBlLmluZGV4''@;'; put 'put ''K3BlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgYmUucHVzaChbcGVbM10sITFdKTticmVh''@;'; put 'put ''aztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKTtMeihjYSksbmEucHVzaChjYSl9ZWxzZSBiZS5wdXNoKFtwZVszXSwhMV0pLGNhPXthOihQZT1IMChwZVsw''@;'; put 'put ''XSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIp''@;'; put 'put ''KXt2YXIgUG49SDAocGVbMF0pO2V0WyIhYXV0b2ZpbHRlciJdPXtyZWY6SDUoUG4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxiZS5wdXNoKFtwZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKGV0WyIhdmFsaWRhdGlvbnMiXXx8KGV0WyIhdmFsaWRhdGlvbnMiXT1b''@;'; put 'put ''XSksIi8iPT09cGVbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZiZS5wdXNoKFtwZVszXSwhMF0pLEZpPXt9O2JyZWFrO2Nhc2Ui''@;'; put 'put ''cGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09cGVbMV0pe3ZhciBXbz0rSy5zbGljZShrdCxwZS5pbmRleCk7KDcyPT1Xb3x8OTY9PVdvKSYmSWYoV28pfWVsc2Uga3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3BlcnRp''@;'; put 'put ''ZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNlInNv''@;'; put 'put ''cnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXBlWzFdKXtp''@;'; put 'put ''ZigoUGU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmYmUucHVzaChbcGVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PWJlLmxlbmd0aCYmImRv''@;'; put 'put ''Y3VtZW50Ij09cGVbM118fDA9PWJlLmxlbmd0aCYmInVvZiI9PXBlWzNdKXJldHVybiBJSShLLGspO3ZhciBocj0hMDtzd2l0Y2goYmVbYmUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaChwZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1vdmVw''@;'; put 'put ''ZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1lbmRl''@;'; put 'put ''ZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdo''@;'; put 'put ''dCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2gocGVbM10pe2Nhc2UiZGF0ZTE5MDQiOmJpLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQiOmNh''@;'; put 'put ''c2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5rbm90''@;'; put 'put ''ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2UiZG9u''@;'; put 'put ''b3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Uic3Rh''@;'; put 'put ''cnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292ZXIi''@;'; put 'put ''OmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRjaChw''@;'; put 'put ''ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChwZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXBlWzFd''@;'; put 'put ''KXN3aXRjaChLLnNsaWNlKGVyLHBlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6X2EuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOl9hLkhpZGRlbj0yfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjpldFsiIW1hcmdpbnMiXXx8''@;'; put 'put ''WDMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdpbnMiXS5oZWFkZXI9dnIocGVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0uZm9vdGVyPXZyKHBlWzBdKS5N''@;'; put 'put ''YXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIFFsPXZyKHBlWzBdKTtldFsiIW1hcmdpbnMiXXx8WDMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxRbC5Ub3AmJihldFsiIW1hcmdpbnMiXS50b3A9UWwuVG9wKSxRbC5MZWZ0JiYoZXRbIiFtYXJnaW5zIl0ubGVmdD1RbC5MZWZ0''@;'; put 'put ''KSxRbC5SaWdodCYmKGV0WyIhbWFyZ2lucyJdLnJpZ2h0PVFsLlJpZ2h0KSxRbC5Cb3R0b20mJihldFsiIW1hcmdpbnMiXS5ib3R0b209UWwuQm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6YmkuVmlld3N8fChiaS5WaWV3cz1bXSksYmkuVmlld3NbMF18fChiaS5WaWV3''@;'; put 'put ''c1swXT17fSksYmkuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5bmNl''@;'; put 'put ''ZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVjdGlv''@;'; put 'put ''biI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2FzZSJs''@;'; put 'put ''ZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQiOmNh''@;'; put 'put ''c2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xzIjpj''@;'; put 'put ''YXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2FzZSJz''@;'; put 'put ''aG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxvd3Vz''@;'; put 'put ''ZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09cGVbMF0uc2xpY2UoLTIpKWlm''@;'; put 'put ''KCIvIj09cGVbMV0pe2V0WyIhZnJlZXplIl18fChldFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBZbD1ObyhldFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09cGVbM10/WWwucj0rSy5zbGljZShlcixwZS5pbmRleCk6WWwuYz0rSy5zbGljZShlcixwZS5pbmRleCksZXRbIiFmcmVlemUi''@;'; put 'put ''XT1xaShZbCl9ZWxzZSBlcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOmV0WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30p''@;'; put 'put ''LGV0WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwaXZvdHRhYmxl''@;'; put 'put ''IjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaChwZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlvbiI6''@;'; put 'put ''Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50ZmllbGQi''@;'; put 'put ''OmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpjYXNl''@;'; put 'put ''InJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVmcmVz''@;'; put 'put ''aG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2ZXJz''@;'; put 'put ''aW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2gocGVbM10pe2Nhc2UiY29sYnJlYWtzIjpjYXNl''@;'; put 'put ''ImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHBlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4iOmNh''@;'; put 'put ''c2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaChwZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9ybWF0''@;'; put 'put ''cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2UicmVm''@;'; put 'put ''cmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2ltYWwi''@;'; put 'put ''OmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25sYXN0''@;'; put 'put ''ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHBlWzNdKXtjYXNlInJhbmdlIjpGaS5yZWY9cGU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2Fz''@;'; put 'put ''ZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNh''@;'; put 'put ''c2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNvcnRpbmciOmNhc2Ui''@;'; put 'put ''Y29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2gocGVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5''@;'; put 'put ''bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2Ui''@;'; put 'put ''dXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2gocGVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNl''@;'; put 'put ''InhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNh''@;'; put 'put ''c2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1pZihocnx8cGVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIWJlW2JlLmxlbmd0aC0x''@;'; put 'put ''XVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8IitiZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1iZVtiZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09cGVbMV0/SXooeXIsc28sTWksSy5z''@;'; put 'put ''bGljZShlcixwZS5pbmRleCkpOihNaT1wZSxlcj1wZS5pbmRleCtwZVswXS5sZW5ndGgpO2JyZWFrfWlmKGsuV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK2JlLmpvaW4oInwiKX12YXIgR2w9e307cmV0dXJuIWsuYm9va1NoZWV0cyYmIWsuYm9va1Byb3BzJiYoR2wu''@;'; put 'put ''U2hlZXRzPVZlKSxHbC5TaGVldE5hbWVzPVllLEdsLldvcmtib29rPWJpLEdsLlNTRj1BLmdldF90YWJsZSgpLEdsLlByb3BzPWZyLEdsLkN1c3Rwcm9wcz15cixHbC5TaGVldHMmJkdsLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihidSl7dmFyIE1sPUdsLlNoZWV0c1tidV07TWxbIiFt''@;'; put 'put ''ZXJnZXMiXSYmTWxbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGNuKXsic3RyaW5nIj09dHlwZW9mIGNuJiYoY249dy51dGlscy5kZWNvZGVfcmFuZ2UoY24pKTt2YXIgRW49dy51dGlscy5lbmNvZGVfY2VsbChjbi5zKSxVbj1BcnJheS5pc0FycmF5KE1sKT8oTWxbY24ucy5yXXx8W10p''@;'; put 'put ''W2NuLnMuY106TWxbRW5dO1VuJiZVbi5zJiYobnVsbCE9VW4ucy50b3AmJnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxjbix7dG9wOlVuLnMudG9wfSksbnVsbCE9VW4ucy5ib3R0b20mJnp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxjbix7Ym90dG9tOlVuLnMuYm90dG9tfSksbnVs''@;'; put 'put ''bCE9VW4ucy5sZWZ0JiZ6dS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsY24se2xlZnQ6VW4ucy5sZWZ0fSksbnVsbCE9VW4ucy5yaWdodCYmenUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKE1sLGNuLHtyaWdodDpVbi5zLnJpZ2h0fSkpfSl9KSxHbH1mdW5jdGlvbiBJOChTLE8pe3N3aXRjaChO''@;'; put 'put ''SShPPU98fHt9KSxPLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIEQ4KF9lLmRlY29kZShTKSxPKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIEQ4KFMsTyk7Y2FzZSJhcnJheSI6cmV0dXJuIEQ4KEMoUyksTyl9fWZ1bmN0aW9uIGJJKFMp''@;'; put 'put ''e3JldHVybiBQcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOlMuTmFtZSwic3M6UmVmZXJzVG8iOiI9IitINChTLlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gTm5lKFMsTyxrLEssZWUsc2UsbWUpe2lmKCFTfHxudWxsPT1TLnYmJm51bGw9PVMuZiYmIUsuc2hlZXRTdHVicylyZXR1''@;'; put 'put ''cm4iIjt2YXIgcGU9e307aWYoUy5mJiYocGVbInNzOkZvcm11bGEiXT0iPSIrTHIoSDQoUy5mLG1lKSkpLFMuRiYmUy5GLnNsaWNlKDAsTy5sZW5ndGgpPT1PKXt2YXIgYmU9Tm8oUy5GLnNsaWNlKE8ubGVuZ3RoKzEpKTtwZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoYmUucj09bWUucj8i''@;'; put 'put ''IjoiWyIrKGJlLnItbWUucikrIl0iKSsiQyIrKGJlLmM9PW1lLmM/IiI6IlsiKyhiZS5jLW1lLmMpKyJdIil9aWYoUy5sJiZTLmwuVGFyZ2V0JiYocGVbInNzOkhSZWYiXT1McihTLmwuVGFyZ2V0KSxTLmwuVG9vbHRpcCYmKHBlWyJ4OkhSZWZTY3JlZW5UaXAiXT1McihTLmwuVG9vbHRpcCkp''@;'; put 'put ''KSxrWyIhbWVyZ2VzIl0pZm9yKHZhciBQZT1rWyIhbWVyZ2VzIl0sVmU9MDtWZSE9UGUubGVuZ3RoOysrVmUpUGVbVmVdLnMuYyE9bWUuY3x8UGVbVmVdLnMuciE9bWUucnx8KFBlW1ZlXS5lLmM+UGVbVmVdLnMuYyYmKHBlWyJzczpNZXJnZUFjcm9zcyJdPVBlW1ZlXS5lLmMtUGVbVmVdLnMu''@;'; put 'put ''YyksUGVbVmVdLmUucj5QZVtWZV0ucy5yJiYocGVbInNzOk1lcmdlRG93biJdPVBlW1ZlXS5lLnItUGVbVmVdLnMucikpO3ZhciBZZT0iIixldD0iIjtzd2l0Y2goUy50KXtjYXNlInoiOmlmKCFLLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpZZT0iTnVtYmVyIixldD1TdHJp''@;'; put 'put ''bmcoUy52KTticmVhaztjYXNlImIiOlllPSJCb29sZWFuIixldD1TLnY/IjEiOiIwIjticmVhaztjYXNlImUiOlllPSJFcnJvciIsZXQ9TWNbUy52XTticmVhaztjYXNlImQiOlllPSJEYXRlVGltZSIsZXQ9bmV3IERhdGUoUy52KS50b0lTT1N0cmluZygpLG51bGw9PVMueiYmKFMuej1TLnp8''@;'; put 'put ''fEEuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpZZT0iU3RyaW5nIixldD1iYShTLnZ8fCIiKX12YXIgY3Q9bDAoSy5jZWxsWGZzLG51bGwsUyxLKTtwZVsic3M6U3R5bGVJRCJdPSJzIisoMjErY3QpLHBlWyJzczpJbmRleCJdPW1lLmMrMTt2YXIgRXQ9bnVsbCE9Uy52P2V0OiIiLGF0PSJ6''@;'; put 'put ''Ij09Uy50PyIiOlMuUj9mdW5jdGlvbiBFeShTKXtyZXR1cm4nPHNzOkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+JytTLm1hcChmdW5jdGlvbihrKXt2YXIgSz1iYShrLnYpO3JldHVybiBrLnMmJihrLnMuYm9sZCYmKEs9IjxC''@;'; put 'put ''PiIrSysiPC9CPiIpLGsucy5pdGFsaWMmJihLPSI8ST4iK0srIjwvST4iKSxrLnMuc3RyaWtlJiYoSz0iPFM+IitLKyI8L1M+Iiksay5zLnVuZGVybGluZSYmKEs9IjxVPiIrSysiPC9VPiIpLCJzdXBlciI9PWsucy52YWxpZ24mJihLPSI8U3VwPiIrSysiPC9TdXA+IiksInN1YiI9PWsucy52''@;'; put 'put ''YWxpZ24mJihLPSI8U3ViPiIrSysiPC9TdWI+IiksKGsucy5uYW1lfHxrLnMuc3p8fGsucy5jb2xvciYmbnVsbCE9ay5zLmNvbG9yLnJnYikmJihLPVsiPEZvbnQiLGsucy5uYW1lPycgaHRtbDpGYWNlPSInK2sucy5uYW1lKyciJzoiIixrLnMuc3o/JyBodG1sOlNpemU9Iicray5zLnN6Kyci''@;'; put 'put ''JzoiIixrLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2Ygay5zLmNvbG9yLnJnYj9rLnMuY29sb3IucmdiLnRvU3RyaW5nKDE2KTprLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsSywiPC9Gb250PiJdLmpvaW4oIiIpKSksS30p''@;'; put 'put ''LmpvaW4oIiIpKyI8L0RhdGE+In0oUy5SKTonPERhdGEgc3M6VHlwZT0iJytZZSsnIj4nK0V0KyI8L0RhdGE+IjtyZXR1cm4oUy5jfHxbXSkubGVuZ3RoPjAmJihhdCs9ZnVuY3Rpb24gd0koUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKE8pe3ZhciBLPVByKCJzczpEYXRhIixGYShPLnR8fCIi''@;'; put 'put ''KSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSk7cmV0dXJuIFByKCJDb21tZW50IixLLHsic3M6QXV0aG9yIjpPLmF9KX0pLmpvaW4oIiIpfShTLmMpKSxQcigiQ2VsbCIsYXQscGUpfWZ1bmN0aW9uIFZuZShTLE8pe3ZhciBrPSc8Um93IHNzOkluZGV4PSInKyhT''@;'; put 'put ''KzEpKyciJztyZXR1cm4gTyYmKE8uaHB4JiYhTy5ocHQmJihPLmhwdD1VMyhPLmhweCkpLE8uaHB0JiYoays9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicrTy5ocHQrJyInKSxPLmhpZGRlbiYmKGsrPScgc3M6SGlkZGVuPSIxIicpKSxrKyI+In1mdW5jdGlvbiBDSShTLE8s''@;'; put 'put ''ayl7dmFyIEs9W10sc2U9ay5TaGVldHNbay5TaGVldE5hbWVzW1NdXSxtZT1zZT9mdW5jdGlvbiBPeihTLE8sayxLKXtpZighU3x8ISgoS3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBlZT1LLldvcmtib29rLk5hbWVzLHNlPVtdLG1lPTA7bWU8ZWUubGVuZ3Ro''@;'; put 'put ''OysrbWUpe3ZhciBwZT1lZVttZV07cGUuU2hlZXQ9PWsmJihwZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxzZS5wdXNoKGJJKHBlKSkpfXJldHVybiBzZS5qb2luKCIiKX0oc2UsMCxTLGspOiIiO3JldHVybiBtZS5sZW5ndGg+MCYmSy5wdXNoKCI8TmFtZXM+IittZSsiPC9OYW1lcz4iKSxt''@;'; put 'put ''ZT1zZT9mdW5jdGlvbiBQeihTLE8sayxLKXtpZighU1siIXJlZiJdKXJldHVybiIiO3ZhciBlZT1vbyhTWyIhcmVmIl0pLHNlPVNbIiFtZXJnZXMiXXx8W10sbWU9MCxwZT1bXTtTWyIhY29scyJdJiZTWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsanQpe1EwKGJ0KTt2YXIga3Q9ISFi''@;'; put 'put ''dC53aWR0aCxPdD11OChqdCxidCksS3Q9eyJzczpJbmRleCI6anQrMX07a3QmJihLdFsic3M6V2lkdGgiXT1NNShPdC53aWR0aCkpLGJ0LmhpZGRlbiYmKEt0WyJzczpIaWRkZW4iXT0iMSIpLHBlLnB1c2goUHIoIkNvbHVtbiIsbnVsbCxLdCkpfSk7Zm9yKHZhciBiZT1BcnJheS5pc0FycmF5''@;'; put 'put ''KFMpLFBlPWVlLnMucjtQZTw9ZWUuZS5yOysrUGUpe2Zvcih2YXIgVmU9W1ZuZShQZSwoU1siIXJvd3MiXXx8W10pW1BlXSldLFllPWVlLnMuYztZZTw9ZWUuZS5jOysrWWUpe3ZhciBldD0hMTtmb3IobWU9MDttZSE9c2UubGVuZ3RoOysrbWUpaWYoIShzZVttZV0ucy5jPlllfHxzZVttZV0u''@;'; put 'put ''cy5yPlBlfHxzZVttZV0uZS5jPFllfHxzZVttZV0uZS5yPFBlKSl7KHNlW21lXS5zLmMhPVllfHxzZVttZV0ucy5yIT1QZSkmJihldD0hMCk7YnJlYWt9aWYoIWV0KXt2YXIgY3Q9e3I6UGUsYzpZZX0sRXQ9cWkoY3QpO1ZlLnB1c2goTm5lKGJlPyhTW1BlXXx8W10pW1llXTpTW0V0XSxFdCxT''@;'; put 'put ''LE8sMCwwLGN0KSl9fVZlLnB1c2goIjwvUm93PiIpLFZlLmxlbmd0aD4yJiZwZS5wdXNoKFZlLmpvaW4oIiIpKX1yZXR1cm4gcGUuam9pbigiIil9KHNlLE8pOiIiLG1lLmxlbmd0aD4wJiZLLnB1c2goIjxUYWJsZT4iK21lKyI8L1RhYmxlPiIpLEsucHVzaChmdW5jdGlvbiBZUyhTLE8sayxL''@;'; put 'put ''KXtpZighUylyZXR1cm4iIjt2YXIgZWU9W107aWYoU1siIW1hcmdpbnMiXSYmKGVlLnB1c2goIjxQYWdlU2V0dXA+IiksU1siIW1hcmdpbnMiXS5oZWFkZXImJmVlLnB1c2goUHIoIkhlYWRlciIsbnVsbCx7Ing6TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmhlYWRlcn0pKSxTWyIhbWFyZ2lucyJd''@;'; put 'put ''LmZvb3RlciYmZWUucHVzaChQcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFtYXJnaW5zIl0uZm9vdGVyfSkpLGVlLnB1c2goUHIoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOlNbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6U1siIW1hcmdpbnMiXS5s''@;'; put 'put ''ZWZ0fHwiMC43IiwieDpSaWdodCI6U1siIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjpTWyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLGVlLnB1c2goIjwvUGFnZVNldHVwPiIpKSxLJiZLLldvcmtib29rJiZLLldvcmtib29rLlNoZWV0cyYmSy5Xb3JrYm9vay5TaGVldHNba10p''@;'; put 'put ''aWYoSy5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVuKWVlLnB1c2goUHIoIlZpc2libGUiLDE9PUsuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIHNlPTA7c2U8ayYmKCFLLldvcmtib29rLlNoZWV0c1tz''@;'; put 'put ''ZV18fEsuV29ya2Jvb2suU2hlZXRzW3NlXS5IaWRkZW4pOysrc2UpO3NlPT1rJiZlZS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChLfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZlZS5wdXNoKCI8RGlzcGxheVJpZ2h0VG9MZWZ0Lz4iKSxXdChTWyIhZ3Jp''@;'; put 'put ''ZGxpbmVzIl0pJiZlZS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSxTWyIhZnJlZXplIl0pe2VlLnB1c2goIjxGcmVlemVQYW5lcy8+IiksZWUucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBtZT1ObyhTWyIhZnJlZXplIl0pO21lLnI+MCYmKGVlLnB1c2goSGEoIlNwbGl0''@;'; put 'put ''SG9yaXpvbnRhbCIsIiIrbWUucikpLGVlLnB1c2goSGEoIlRvcFJvd0JvdHRvbVBhbmUiLCIiK21lLnIpKSksbWUuYz4wJiYoZWUucHVzaChIYSgiU3BsaXRWZXJ0aWNhbCIsIiIrbWUuYykpLGVlLnB1c2goSGEoIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK21lLmMpKSl9cmV0dXJuIFNbIiFw''@;'; put 'put ''cm90ZWN0Il0mJihlZS5wdXNoKEhhKCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0ub2JqZWN0cyYmZWUucHVzaChIYSgiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZlZS5wdXNoKEhhKCJQcm90ZWN0U2NlbmFyaW9zIiwi''@;'; put 'put ''VHJ1ZSIpKSxudWxsPT1TWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHxTWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzP251bGwhPVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmZWUucHVzaChI''@;'; put 'put ''YSgiRW5hYmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxscyIpKTplZS5wdXNoKEhhKCJFbmFibGVTZWxlY3Rpb24iLCJOb1NlbGVjdGlvbiIpKSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJBbGxvd1NpemVDb2xzIl0sWyJmb3JtYXRSb3dz''@;'; put 'put ''IiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIsIkFsbG93SW5zZXJ0Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVsZXRlQ29sdW1ucyIsIkFsbG93RGVsZXRlQ29s''@;'; put 'put ''cyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRlciIsIkFsbG93RmlsdGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5jdGlvbihwZSl7U1siIXByb3RlY3QiXVtwZVsw''@;'; put 'put ''XV0mJmVlLnB1c2goIjwiK3BlWzFdKyIvPiIpfSkpLDA9PWVlLmxlbmd0aD8iIjpQcigiV29ya3NoZWV0T3B0aW9ucyIsZWUuam9pbigiIikse3htbG5zOmJsLnh9KX0oc2UsMCxTLGspKSxLLmpvaW4oIiIpfWZ1bmN0aW9uIFNJKFMsTyl7T3x8KE89e30pLFMuU1NGfHwoUy5TU0Y9QS5nZXRf''@;'; put 'put ''dGFibGUoKSksUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLE8ucmV2c3NmPURlKFMuU1NGKSxPLnJldnNzZltTLlNTRls2NTUzNV1dPTAsTy5zc2Y9Uy5TU0YsUy5TdHlsZXM9e0ZvbnRzOk8uRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6''@;'; put 'put ''IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6Ty5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6Ty5Cb3JkZXJzPVt7fV19LE8uY2VsbFhmcz1bXSxPLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9''@;'; put 'put ''XSxsMChPLmNlbGxYZnMsbnVsbCx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkpO3ZhciBrPVtdO2sucHVzaChmdW5jdGlvbiBtSShTLE8pe3ZhciBrPVtdO3JldHVybiBTLlByb3BzJiZrLnB1c2goZnVuY3Rpb24gWncoUyxPKXt2YXIgaz1bXTtyZXR1cm4gUmUoUDYpLm1hcChmdW5jdGlvbihL''@;'; put 'put ''KXtmb3IodmFyIGVlPTA7ZWU8UjAubGVuZ3RoOysrZWUpaWYoUjBbZWVdWzFdPT1LKXJldHVybiBSMFtlZV07Zm9yKGVlPTA7ZWU8cmgubGVuZ3RoOysrZWUpaWYocmhbZWVdWzFdPT1LKXJldHVybiByaFtlZV07dGhyb3cgS30pLmZvckVhY2goZnVuY3Rpb24oSyl7aWYobnVsbCE9U1tLWzFd''@;'; put 'put ''XSl7dmFyIGVlPU8mJk8uUHJvcHMmJm51bGwhPU8uUHJvcHNbS1sxXV0/Ty5Qcm9wc1tLWzFdXTpTW0tbMV1dOyJkYXRlIj09PUtbMl0mJihlZT1uZXcgRGF0ZShlZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2YgZWU/ZWU9U3RyaW5nKGVl''@;'; put 'put ''KTohMD09PWVlfHwhMT09PWVlP2VlPWVlPyIxIjoiMCI6ZWUgaW5zdGFuY2VvZiBEYXRlJiYoZWU9bmV3IERhdGUoZWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLGsucHVzaChIYShQNltLWzFdXXx8S1sxXSxlZSkpfX0pLFByKCJEb2N1bWVudFByb3BlcnRpZXMiLGsu''@;'; put 'put ''am9pbigiIikse3htbG5zOmJsLm99KX0oUy5Qcm9wcyxPKSksUy5DdXN0cHJvcHMmJmsucHVzaChmdW5jdGlvbiBINihTLE8pe3ZhciBrPVsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiXSxLPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLGVlPVtdO3JldHVybiBTJiZSZShTKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKHNlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxzZSkpe2Zvcih2YXIgbWU9MDttZTxSMC5sZW5ndGg7KyttZSlpZihzZT09UjBbbWVdWzFdKXJldHVybjtmb3IobWU9MDttZTxyaC5sZW5ndGg7KyttZSlpZihzZT09cmhbbWVdWzFdKXJldHVy''@;'; put 'put ''bjtmb3IobWU9MDttZTxrLmxlbmd0aDsrK21lKWlmKHNlPT1rW21lXSlyZXR1cm47dmFyIHBlPVNbc2VdLGJlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgcGU/KGJlPSJmbG9hdCIscGU9U3RyaW5nKHBlKSk6ITA9PT1wZXx8ITE9PT1wZT8oYmU9ImJvb2xlYW4iLHBlPXBlPyIxIjoiMCIp''@;'; put 'put ''OnBlPVN0cmluZyhwZSksZWUucHVzaChQcihwYShzZSkscGUseyJkdDpkdCI6YmV9KSl9fSksTyYmUmUoTykuZm9yRWFjaChmdW5jdGlvbihzZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE8sc2UpJiYoIVN8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoUyxzZSkpKXt2YXIgbWU9T1tzZV0scGU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBtZT8ocGU9ImZsb2F0IixtZT1TdHJpbmcobWUpKTohMD09PW1lfHwhMT09PW1lPyhwZT0iYm9vbGVhbiIsbWU9bWU/IjEiOiIwIik6bWUgaW5zdGFuY2VvZiBEYXRlPyhwZT0iZGF0ZVRp''@;'; put 'put ''bWUudHoiLG1lPW1lLnRvSVNPU3RyaW5nKCkpOm1lPVN0cmluZyhtZSksZWUucHVzaChQcihwYShzZSksbWUseyJkdDpkdCI6cGV9KSl9fSksIjwiK0srJyB4bWxucz0iJytibC5vKyciPicrZWUuam9pbigiIikrIjwvIitLKyI+In0oUy5Qcm9wcyxTLkN1c3Rwcm9wcykpLGsuam9pbigiIil9''@;'; put 'put ''KFMsTykpLGsucHVzaCgiIiksay5wdXNoKCIiKSxrLnB1c2goIiIpO2Zvcih2YXIgSz0wO0s8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK0spay5wdXNoKFByKCJXb3Jrc2hlZXQiLENJKEssTyxTKSx7InNzOk5hbWUiOkxyKFMuU2hlZXROYW1lc1tLXSl9KSk7cmV0dXJuIGtbMl09ZnVuY3Rpb24g''@;'; put 'put ''eUkoUyxPKXt2YXIgSz1bWyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJvcmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZhbWlseT0iU3dpc3MiIHNzOlNpemU9IjEy''@;'; put 'put ''IiBzczpDb2xvcj0iIzAwMDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVybiBPLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihlZSxzZSl7dmFyIG1lPVtdO2lmKGVlLmFsaWdubWVudCl7dmFy''@;'; put 'put ''IHBlPXt9O2VlLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKHBlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIiksZWUuYWxpZ25tZW50LndyYXBUZXh0JiYocGVbInNzOldyYXBUZXh0Il09IjEiKSxlZS5hbGlnbm1lbnQudmVydGljYWwmJihwZVsic3M6VmVydGljYWwiXT1BdChlZS5hbGlnbm1lbnQu''@;'; put 'put ''dmVydGljYWwpKSxlZS5hbGlnbm1lbnQuaG9yaXpvbnRhbCYmKHBlWyJzczpIb3Jpem9udGFsIl09QXQoZWUuYWxpZ25tZW50Lmhvcml6b250YWwpKSxlZS5hbGlnbm1lbnQuaW5kZW50JiYocGVbInNzOkluZGVudCJdPWVlLmFsaWdubWVudC5pbmRlbnQpLGVlLmFsaWdubWVudC50ZXh0Um90''@;'; put 'put ''YXRpb24mJihwZVsic3M6Um90YXRlIl09ZWUuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksbWUucHVzaChQcigiQWxpZ25tZW50IixudWxsLHBlKSl9ZTppZihudWxsIT1lZS5mb250SWQpe3ZhciBiZT1PLkZvbnRzW2VlLmZvbnRJZF07aWYoIWJlKWJyZWFrIGU7dmFyIFBlPXsic3M6Rm9udE5h''@;'; put 'put ''bWUiOiJDYWxpYnJpIiwic3M6U2l6ZSI6IjEyIn0sVmU9ITE7YmUuYm9sZCYmKFZlPSEwLFBlWyJzczpCb2xkIl09IjEiKSxiZS5pdGFsaWMmJihWZT0hMCxQZVsic3M6SXRhbGljIl09IjEiKSxiZS5zdHJpa2UmJihWZT0hMCxQZVsic3M6U3RyaWtlVGhyb3VnaCJdPSIxIiksbnVsbCE9YmUu''@;'; put 'put ''dW5kZXJsaW5lJiYoVmU9ITAsUGVbInNzOlVuZGVybGluZSJdPXh5W2JlLnVuZGVybGluZV18fChiZS51bmRlcmxpbmU/IlNpbmdsZSI6Ik5vbmUiKSksbnVsbCE9YmUuc3omJihWZT0hMCxQZVsic3M6U2l6ZSJdPWJlLnN6KSxudWxsIT1iZS5uYW1lJiYoVmU9ITAsUGVbInNzOkZvbnROYW1l''@;'; put 'put ''Il09YmUubmFtZSksYmUuY29sb3ImJm51bGwhPWJlLmNvbG9yLnJnYiYmKFZlPSEwLFBlWyJzczpDb2xvciJdPSIjIisoIm51bWJlciI9PXR5cGVvZiBiZS5jb2xvci5yZ2I/IjAwMDAwMCIrYmUuY29sb3IucmdiLnRvU3RyaW5nKDE2KTpiZS5jb2xvci5yZ2IpLnNsaWNlKC02KSksWyJzdWIi''@;'; put 'put ''LCJzdXBlciJdLmluZGV4T2YoYmUudmFsaWduKT4tMSYmKFBlWyJzczpWZXJ0aWNhbEFsaWduIl09QXQoYmUudmFsaWduKSsic2NyaXB0IiksVmUmJm1lLnB1c2goUHIoIkZvbnQiLG51bGwsUGUpKX1lOmlmKGVlLmZpbGxJZD4wKXt2YXIgWWU9Ty5GaWxsc1tlZS5maWxsSWRdO2lmKCFZZXx8''@;'; put 'put ''IVllLmZnQ29sb3J8fG51bGw9PVllLmZnQ29sb3IucmdiKWJyZWFrIGU7bWUucHVzaChQcigiSW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJuIjp2Q1tZZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgWWUuZmdDb2xvci5yZ2I/IjAwIitZ''@;'; put 'put ''ZS5mZ0NvbG9yLnJnYi50b1N0cmluZygxNik6WWUuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0pKX1tZS5wdXNoKFByKCJOdW1iZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOkxyKEEuX3RhYmxlW2VlLm51bUZtdElkXSl9KSk7dmFyIGV0PXsic3M6SUQiOiJzIisoMjErc2UpfTtlZS5zdHls''@;'; put 'put ''ZSYmKGV0WyJzczpOYW1lIl09ZWUuc3R5bGUpLEsucHVzaChQcigiU3R5bGUiLG1lLmpvaW4oIiIpLGV0KSl9KSxQcigiU3R5bGVzIixLLmpvaW4oIiIpKX0oMCxPKSxrWzNdPWZ1bmN0aW9uIF9JKFMpe2lmKCEoKFN8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''Tz1TLldvcmtib29rLk5hbWVzLGs9W10sSz0wO0s8Ty5sZW5ndGg7KytLKXt2YXIgZWU9T1tLXTtudWxsPT1lZS5TaGVldCYmKGVlLk5hbWUubWF0Y2goL15feGxmblwuLyl8fGsucHVzaChiSShlZSkpKX1yZXR1cm4gUHIoIk5hbWVzIixrLmpvaW4oIiIpKX0oUyksSWkrUHIoIldvcmtib29r''@;'; put 'put ''IixrLmpvaW4oIiIpLHt4bWxuczpibC5zcywieG1sbnM6byI6YmwubywieG1sbnM6eCI6YmwueCwieG1sbnM6c3MiOmJsLnNzLCJ4bWxuczpkdCI6YmwuZHQsInhtbG5zOmh0bWwiOmJsLmh0bWx9KX1mdW5jdGlvbiBNSShTLE8sayxLKXt2YXIgZWU9ayxzZT1bXSxtZT1PLnNsaWNlKE8ubCxP''@;'; put 'put ''LmwrZWUpO2lmKEsmJksuZW5jJiZLLmVuYy5pbnNpdHUmJm1lLmxlbmd0aD4wKXN3aXRjaChTLm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJF''@;'; put 'put ''T0YiOksuZW5jLmluc2l0dShTZSh7bGVuZ3RoOm1lLmxlbmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6Sy5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6NH0pLCJza2lwIiksbWU9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20obWUuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20o''@;'; put 'put ''Sy5lbmMuaW5zaXR1KG1lLnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0Om1lPUsuZW5jLmluc2l0dShtZSl9QXJyYXkuaXNBcnJheShPKSYmIUFycmF5LmlzQXJyYXkobWUpJiYobWU9QXJyYXkuZnJvbShtZSkpLHNlLnB1c2gobWUpLE8ubCs9ZWU7Zm9yKHZhciBwZT1LU1tlbyhPLE8ubCld''@;'; put 'put ''LGJlPTA7bnVsbCE9cGUmJiJDb250aW51ZSI9PT1wZS5uLnNsaWNlKDAsOCk7KWVlPWVvKE8sTy5sKzIpLGJlPU8ubCs0LEsmJksuZW5jJiZLLmVuYy5pbnNpdHUmJksuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tpcCIpLCJDb250aW51ZUZydCI9PXBlLm4/YmUrPTQ6IkNvbnRpbnVl''@;'; put 'put ''RnJ0Ij09cGUubi5zbGljZSgwLDExKSYmKGJlKz0xMixLJiZLLmVuYyYmSy5lbmMuaW5zaXR1JiZLLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo4fSksInNraXAiKSksbWU9Ty5zbGljZShiZSxPLmwrNCtlZSksSyYmSy5lbmMmJksuZW5jLmluc2l0dSYmbWUubGVuZ3RoPjAmJihtZT1LLmVuYy5p''@;'; put 'put ''bnNpdHUobWUpKSxzZS5wdXNoKG1lKSxPLmwrPTQrZWUscGU9S1NbZW8oTyxPLmwpXTt2YXIgUGU9VShzZSk7bW4oUGUsMCk7dmFyIFZlPTA7UGUubGVucz1bXTtmb3IodmFyIFllPTA7WWU8c2UubGVuZ3RoOysrWWUpUGUubGVucy5wdXNoKFZlKSxWZSs9c2VbWWVdLmxlbmd0aDtpZihQZS5s''@;'; put 'put ''ZW5ndGg8ayl0aHJvdyJYTFMgUmVjb3JkICIrKFMmJlMubnx8Ij8/IikrIiBUcnVuY2F0ZWQ6ICIrUGUubGVuZ3RoKyIgPCAiK2s7cmV0dXJuIFMuZihQZSxQZS5sZW5ndGgsSyl9ZnVuY3Rpb24gZGgoUyxPLGspe2lmKCJ6IiE9PVMudCYmUy5YRil7dmFyIEs9MDt0cnl7Sz1TLnp8fFMuWEYu''@;'; put 'put ''bnVtRm10SWR8fDAsTy5jZWxsTkYmJihTLno9QS5fdGFibGVbS10pfWNhdGNoKHNlKXtpZihPLldURil0aHJvdyBzZX1pZighT3x8ITEhPT1PLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8TWNbUy52XTowPT09S3x8IkdlbmVyYWwiPT1LPyJuIj09PVMudD8oMHxTLnYpPT09Uy52''@;'; put 'put ''P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6QS5mb3JtYXQoSyxTLnYse2RhdGUxOTA0OiEhayxkYXRlTkY6TyYmTy5kYXRlTkZ9KX1jYXRjaChzZSl7aWYoTy5XVEYpdGhyb3cgc2V9aWYoTy5jZWxsRGF0ZXMmJksmJiJuIj09Uy50JiZB''@;'; put 'put ''LmlzX2RhdGUoQS5fdGFibGVbS118fFN0cmluZyhLKSkpe3ZhciBlZT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO2VlJiYoUy50PSJkIixTLnY9bmV3IERhdGUoZWUueSxlZS5tLTEsZWUuZCxlZS5ILGVlLk0sZWUuUyxlZS51KSl9fX1mdW5jdGlvbiBSOChTLE8sayl7cmV0dXJue3Y6UyxpeGZl''@;'; put 'put ''Ok8sdDprfX12YXIgeEk9ZnVuY3Rpb24oUyxPLGspe09bIiFvYmplY3RzIl09U30sVHk9e1NJOiJlMDg1OWZmMmY5NGY2ODEwYWI5MTA4MDAyYjI3YjNkOSIsRFNJOiIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIsVURJOiIwNWQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlh''@;'; put 'put ''ZSJ9O2Z1bmN0aW9uICRTKFMsTyl7dmFyIGssSyxlZSxzZTtpZihPfHwoTz17fSksTkkoTyksVygpLE8uY29kZXBhZ2UmJkwoTy5jb2RlcGFnZSksUy5GdWxsUGF0aHMpe2lmKHZlLmZpbmQoUywiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVj''@;'; put 'put ''dGVkIik7az12ZS5maW5kKFMsIiFDb21wT2JqIiksSz12ZS5maW5kKFMsIi9Xb3JrYm9vayIpfHx2ZS5maW5kKFMsIi9Cb29rIil9ZWxzZXtzd2l0Y2goTy50eXBlKXtjYXNlImJhc2U2NCI6Uz15KF9lLmRlY29kZShTKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOlM9eShTKTticmVhaztjYXNlImJ1''@;'; put 'put ''ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShTKXx8KFM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUykpfW1uKFMsMCksSz17Y29udGVudDpTfX1pZihrJiZmdW5jdGlvbiBHUyhTKXt2YXIgTz17fSxrPVMuY29udGVudDtpZihrLmw9MjgsTy5BbnNpVXNlclR5cGU9''@;'; put 'put ''ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxPLkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gXzAoUyl7cmV0dXJuIFB3KFMsMSl9KGspLGsubGVuZ3RoLWsubDw9NClyZXR1cm4gTzt2YXIgSz1rLnJlYWRfc2hpZnQoNCk7aWYoMD09S3x8Sz40MHx8KGsubC09NCxPLlJlc2VydmVk''@;'; put 'put ''MT1rLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLGsubGVuZ3RoLWsubDw9NCl8fDE5MDc1MDU2NTIhPT0oSz1rLnJlYWRfc2hpZnQoNCkpfHwoTy5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIEE2KFMpe3JldHVybiBQdyhTLDIpfShrKSwwPT0oSz1rLnJlYWRfc2hpZnQoNCkp''@;'; put 'put ''fHxLPjQwKSlyZXR1cm4gTztrLmwtPTQsTy5SZXNlcnZlZDI9ay5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShrKSxPLmJvb2tQcm9wcyYmIU8uYm9va1NoZWV0cyllZT17fTtlbHNle3ZhciBtZT1UZT8iYnVmZmVyIjoiYXJyYXkiO2lmKEsmJksuY29udGVudCllZT1mdW5jdGlvbiBGeihTLE8p''@;'; put 'put ''e3ZhciBrPXtvcHRzOnt9fSxLPXt9O251bGwhPW9lJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT1vZSk7dmFyIFllLGN0LGF0LGJ0LE90LEt0LGVlPU8uZGVuc2U/W106e30sc2U9e30sbWU9e30scGU9bnVsbCxiZT1bXSxQZT0iIixWZT17fSxldD0iIixqdD17fSxrdD1bXSxUbj1bXSxycj1b''@;'; put 'put ''XSxTbj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxscj17fSxYbj17Rm9udHM6W119LEJuPWZ1bmN0aW9uKERpKXtyZXR1cm4gRGk8OD9yMFtEaV06RGk8NjQmJnJyW0RpLThdfHxyMFtEaV19LGZyPWZ1bmN0aW9uKERpLGNzKXt2YXIgeGwsWW89RGkuWEYu''@;'; put 'put ''ZGF0YTtZbyYmKFlvLnBhdHRlcm5UeXBlfHxudWxsIT1Zby5pY3ZGb3JlKSYmY3MmJmNzLmNlbGxTdHlsZXMmJihEaS5zPXt9LERpLnMucGF0dGVyblR5cGU9WW8ucGF0dGVyblR5cGUsRGkuWEYuZm9udCYmUHQoRGkucyxEaS5YRi5mb250KSxZby5mV3JhcCYmKChEaS5zLmFsaWdubWVudHx8''@;'; put 'put ''KERpLnMuYWxpZ25tZW50PXt9KSkud3JhcFRleHQ9ITApLFlvLmZTaHJpbmtUb0ZpdCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLFlvLmhhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuaG9yaXpvbnRh''@;'; put 'put ''bD1Zby5oYWxpZ24pLFlvLnZhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9WW8udmFsaWduKSxZby5jSW5kZW50JiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS5pbmRlbnQ9WW8uY0luZGVudCksNjQhPVlvLmljdkZv''@;'; put 'put ''cmUmJjY1IT1Zby5pY3ZCYWNrJiYoKHhsPWhkKEJuKFlvLmljdkZvcmUpKSkmJihEaS5zLmZnQ29sb3I9e3JnYjp4bH0pLCh4bD1oZChCbihZby5pY3ZCYWNrKSkpJiYoRGkucy5iZ0NvbG9yPXtyZ2I6eGx9KSksWyJMZWZ0IiwiUmlnaHQiLCJUb3AiLCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKF91KXtZb1siZGciK191XSYmKERpLnNbX3UudG9Mb3dlckNhc2UoKV09e3N0eWxlOnBkW1lvWyJkZyIrX3VdXSxjb2xvcjp7cmdiOmhkKEJuKFlvWyJpY3YiK191XSkpfX0pfSkpfSx5cj1mdW5jdGlvbihEaSxjcyxZbyl7aWYoIShaaT4xfHxZby5zaGVldFJvd3MmJkRpLnI+PVlvLnNo''@;'; put 'put ''ZWV0Um93cykpe2lmKFlvLmNlbGxTdHlsZXMmJmNzLlhGJiZjcy5YRi5kYXRhJiZmcihjcyxZbyksZGVsZXRlIGNzLml4ZmUsZGVsZXRlIGNzLlhGLFllPURpLGV0PXFpKERpKSwoIW1lfHwhbWUuc3x8IW1lLmUpJiYobWU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSksRGkucjxtZS5zLnIm''@;'; put 'put ''JihtZS5zLnI9RGkuciksRGkuYzxtZS5zLmMmJihtZS5zLmM9RGkuYyksRGkucisxPm1lLmUuciYmKG1lLmUucj1EaS5yKzEpLERpLmMrMT5tZS5lLmMmJihtZS5lLmM9RGkuYysxKSxZby5jZWxsRm9ybXVsYSYmY3MuZilmb3IodmFyIHhsPTA7eGw8a3QubGVuZ3RoOysreGwpaWYoIShrdFt4''@;'; put 'put ''bF1bMF0ucy5jPkRpLmN8fGt0W3hsXVswXS5zLnI+RGkucnx8a3RbeGxdWzBdLmUuYzxEaS5jfHxrdFt4bF1bMF0uZS5yPERpLnIpKXtjcy5GPXJhKGt0W3hsXVswXSksKGt0W3hsXVswXS5zLmMhPURpLmN8fGt0W3hsXVswXS5zLnIhPURpLnIpJiZkZWxldGUgY3MuZixjcy5mJiYoY3MuZj0i''@;'; put 'put ''IitzMChrdFt4bF1bMV0sbWUsRGksRm4sZXIpKTticmVha31Zby5kZW5zZT8oZWVbRGkucl18fChlZVtEaS5yXT1bXSksZWVbRGkucl1bRGkuY109Y3MpOmVlW2V0XT1jc319LGVyPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpqdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0''@;'; put 'put ''dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhTyYmISFPLmNlbGxTdHlsZXMsV1RGOiEhTyYmISFPLnd0Zn07ZXIucGFzc3dvcmQ9Ty5wYXNzd29yZD9PLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBGaSxNaT1udWxsLG5hPVtdLGNhPVtd''@;'; put 'put ''LExpPVtdLGtyPVtdLF9yPSExLEZuPVtdO0ZuLlNoZWV0TmFtZXM9ZXIuc25hbWVzLEZuLnNoYXJlZGY9ZXIuc2hhcmVkZixGbi5hcnJheWY9ZXIuYXJyYXlmLEZuLm5hbWVzPVtdLEZuLlhUST1bXTt2YXIgaWEsanI9IiIsWmk9MCxiaT0wLF9hPVtdLHNvPVtdO2VyLmNvZGVwYWdlPTEyMDAs''@;'; put 'put ''QigxMjAwKTtmb3IodmFyIExvPSExO1MubDxTLmxlbmd0aC0xOyl7dmFyIE9hPVMubCxobz1TLnJlYWRfc2hpZnQoMik7aWYoZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSksImhlYWRlci0wIiksMD09PWhvJiYiRU9GIj09PWpyKWJyZWFrO3ZhciBK''@;'; put 'put ''YT1TLmw9PT1TLmxlbmd0aD8wOlMucmVhZF9zaGlmdCgyKTtlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSwibGVuZ3RoLTAiKTt2YXIgQmk9S1NbaG9dO2lmKEJpJiZCaS5mKXtpZihPLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1qciYmIkJv''@;'; put 'put ''dW5kU2hlZXQ4IiE9PUJpLm4pYnJlYWs7aWYoanI9QmkubiwyPT09Qmkucnx8MTI9PUJpLnIpe3ZhciBJcz1TLnJlYWRfc2hpZnQoMik7aWYoSmEtPTIsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwXSkpLCFlci5lbmMmJklzIT09aG8mJigoMjU1Jklz''@;'; put 'put ''KTw8OHxJcz4+OCkhPT1obyl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK0lzKyIhPSIraG8pOzEyPT1CaS5yJiYoUy5sKz0xMCxKYS09MTAsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIFBuPU1J''@;'; put 'put ''KEJpLFMsSmEsZXIpLFdvPUJpLm47aWYoMD09WmkmJiJCT0YiIT1Xbyljb250aW51ZTtzd2l0Y2goV28pe2Nhc2UiRGF0ZTE5MDQiOmsub3B0cy5EYXRlMTkwND1Tbi5XQlByb3BzLmRhdGUxOTA0PVBuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjprLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKGVyLmVuY3x8KFMubD0wLFppPTApLGVyLmVuYz1QbiwhTy5wYXNzd29yZCYmbnVsbD09UG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PVBuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5j''@;'; put 'put ''cnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZighUG4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRlQWNjZXNzIjplci5sYXN0dXNlcj1QbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNl''@;'; put 'put ''IkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6''@;'; put 'put ''YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIGhyPU51bWJlcihQbik7c3dpdGNoKGhyKXtjYXNlIDIxMDEwOmhyPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODpocj0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTpocj0xMjUyfUIoZXIuY29kZXBhZ2U9aHIpLExvPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6ZXIu''@;'; put 'put ''cnJ0YWJpZD1QbjticmVhaztjYXNlIldpblByb3RlY3QiOmVyLndpbmxvY2tlZD1QbjticmVhaztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNEZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNT''@;'; put 'put ''YXZlUmVjYWxjIjprLm9wdHNbV29dPVBuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOmVyLkNhbGNSZWZNb2RlPVBuO2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24iOmsub3B0cy5GdWxsQ2FsYz1QbjticmVhaztjYXNlIldzQm9vbCI6UG4uZkRpYWxvZyYmKGVlWyIhdHlwZSJdPSJk''@;'; put 'put ''aWFsb2ciKSxQbi5mQmVsb3d8fCgoZWVbIiFvdXRsaW5lIl18fChlZVsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxQbi5mUmlnaHR8fCgoZWVbIiFvdXRsaW5lIl18fChlZVsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UiWEYiOlBuLmZvbnQ9WG4uRm9udHNbUG4uaWZu''@;'; put 'put ''dDw0P1BuLmlmbnQ6UG4uaWZudC0xXSxUbi5wdXNoKFBuKTticmVhaztjYXNlIlN1cEJvb2siOkZuLnB1c2goW1BuXSksRm5bRm4ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOkZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKTticmVhaztjYXNlIkxibCI6aWE9e05hbWU6''@;'; put 'put ''UG4uTmFtZSxSZWY6czAoUG4ucmdjZSxtZSxudWxsLEZuLGVyKX0sUG4uaXRhYj4wJiYoaWEuU2hlZXQ9UG4uaXRhYi0xKSxGbi5uYW1lcy5wdXNoKGlhKSxGblswXXx8KEZuWzBdPVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3RoLTFdLnB1c2goUG4pLCJfeGxubS5fRmlsdGVyRGF0YWJh''@;'; put 'put ''c2UiPT1Qbi5OYW1lJiZQbi5pdGFiPjAmJlBuLnJnY2UmJlBuLnJnY2VbMF0mJlBuLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Qbi5yZ2NlWzBdWzBdWzBdJiYoc29bUG4uaXRhYi0xXT17cmVmOnJhKFBuLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSJFeHRlcm5Db3VudCI6ZXIu''@;'; put 'put ''RXh0ZXJuQ291bnQ9UG47YnJlYWs7Y2FzZSJFeHRlcm5TaGVldCI6MD09Rm4ubGVuZ3RoJiYoRm5bMF09W10sRm5bMF0uWFRJPVtdKSxGbltGbi5sZW5ndGgtMV0uWFRJPUZuW0ZuLmxlbmd0aC0xXS5YVEkuY29uY2F0KFBuKSxGbi5YVEk9Rm4uWFRJLmNvbmNhdChQbik7YnJlYWs7Y2FzZSJO''@;'; put 'put ''YW1lQ210IjppZihlci5iaWZmPDgpYnJlYWs7bnVsbCE9aWEmJihpYS5Db21tZW50PVBuWzFdKTticmVhaztjYXNlIlByb3RlY3QiOmVlWyIhcHJvdGVjdCJdPVBuO2JyZWFrO2Nhc2UiUGFzc3dvcmQiOjAhPT1QbiYmZXIuV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjog''@;'; put 'put ''IitQbik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6c2VbUG4ucG9zXT1Qbixlci5zbmFtZXMucHVzaChQbi5uYW1lKTticmVhaztjYXNlIkVPRiI6aWYoZWVbIiFncmlkbGluZXMiXT0hTWl8fE1pLmdyaWQsTWk9bnVsbCwtLVppKWJyZWFrO2lmKG1lLmUpe2lmKG1lLmUucj4wJiZtZS5lLmM+''@;'; put 'put ''MCl7aWYobWUuZS5yLS0sbWUuZS5jLS0sZWVbIiFyZWYiXT1yYShtZSksTy5zaGVldFJvd3MmJk8uc2hlZXRSb3dzPD1tZS5lLnIpe3ZhciBRbD1tZS5lLnI7bWUuZS5yPU8uc2hlZXRSb3dzLTEsZWVbIiFmdWxscmVmIl09ZWVbIiFyZWYiXSxlZVsiIXJlZiJdPXJhKG1lKSxtZS5lLnI9UWx9''@;'; put 'put ''bWUuZS5yKyssbWUuZS5jKyt9bmEubGVuZ3RoPjAmJihlZVsiIW1lcmdlcyJdPW5hKSxjYS5sZW5ndGg+MCYmeEkoY2EsZWUsWG4pLExpLmxlbmd0aD4wJiYoZWVbIiFjb2xzIl09TGkpLGtyLmxlbmd0aD4wJiYoZWVbIiFyb3dzIl09a3IpLFNuLlNoZWV0cy5wdXNoKGxyKX0iIj09PVBlP1Zl''@;'; put 'put ''PWVlOktbUGVdPWVlLGVlPU8uZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1lci5iaWZmJiYoZXIuYmlmZj17OToyLDUyMTozLDEwMzM6NH1baG9dfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bUG4uQklGRlZlcl18fDgpLGVyLmJpZmZndWVz''@;'; put 'put ''cz0wPT1Qbi5CSUZGVmVyLDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0JiYoZXIuYmlmZj01LExvPSEwLEIoZXIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1lci5iaWZmJiYwPT1Qbi5CSUZGVmVyJiYxNj09UG4uZHQmJihlci5iaWZmPTIpLFppKyspYnJlYWs7aWYoZWU9Ty5kZW5zZT9bXTp7fSxl''@;'; put 'put ''ci5iaWZmPDgmJiFMbyYmKExvPSEwLEIoZXIuY29kZXBhZ2U9Ty5jb2RlcGFnZXx8MTI1MikpLGVyLmJpZmY8NXx8MD09UG4uQklGRlZlciYmNDA5Nj09UG4uZHQpeyIiPT09UGUmJihQZT0iU2hlZXQxIiksbWU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgWWw9e3BvczpTLmwtSmEs''@;'; put 'put ''bmFtZTpQZX07c2VbWWwucG9zXT1ZbCxlci5zbmFtZXMucHVzaChQZSl9ZWxzZSBQZT0oc2VbT2FdfHx7bmFtZToiIn0pLm5hbWU7MzI9PVBuLmR0JiYoZWVbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PVBuLmR0JiYoZWVbIiF0eXBlIl09Im1hY3JvIiksbmE9W10sY2E9W10sZXIuYXJyYXlmPWt0''@;'; put 'put ''PVtdLExpPVtdLGtyPVtdLF9yPSExLGxyPXtIaWRkZW46KHNlW09hXXx8e2hzOjB9KS5ocyxuYW1lOlBlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09ZWVbIiF0eXBlIl0mJihPLmRlbnNlPyhlZVtQbi5yXXx8W10pW1BuLmNdOmVl''@;'; put 'put ''W3FpKHtjOlBuLmMscjpQbi5yfSldKSYmKytQbi5jLE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV18fHt9LHY6UG4udmFsLHQ6Im4ifSxiaT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLHlyKHtjOlBuLmMscjpQbi5yfSxPdCxPKTti''@;'; put 'put ''cmVhaztjYXNlIkJvb2xFcnIiOk90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi52YWwsdDpQbi50fSxiaT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLHlyKHtjOlBuLmMscjpQbi5yfSxPdCxPKTticmVhaztjYXNlIlJLIjpP''@;'; put 'put ''dD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHY6UG4ucmtudW0sdDoibiJ9LGJpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxPLGsub3B0cy5EYXRlMTkwNCkseXIoe2M6UG4uYyxyOlBuLnJ9LE90LE8pO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgR2w9UG4uYztH''@;'; put 'put ''bDw9UG4uQzsrK0dsKXt2YXIgYnU9UG4ucmtyZWNbR2wtUG4uY11bMF07T3Q9e2l4ZmU6YnUsWEY6VG5bYnVdLHY6UG4ucmtyZWNbR2wtUG4uY11bMV0sdDoibiJ9LGJpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxPLGsub3B0cy5EYXRlMTkwNCkseXIoe2M6R2wscjpQbi5y''@;'; put 'put ''fSxPdCxPKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Qbi52YWwpe3BlPVBuO2JyZWFrfWlmKChPdD1SOChQbi52YWwsUG4uY2VsbC5peGZlLFBuLnR0KSkuWEY9VG5bT3QuaXhmZV0sTy5jZWxsRm9ybXVsYSl7dmFyIE1sPVBuLmZvcm11bGE7aWYoTWwmJk1sWzBdJiZNbFsw''@;'; put 'put ''XVswXSYmIlB0Z0V4cCI9PU1sWzBdWzBdWzBdKXt2YXIgY249TWxbMF1bMF1bMV1bMF0sRW49TWxbMF1bMF1bMV1bMV0sVW49cWkoe3I6Y24sYzpFbn0pO2p0W1VuXT9PdC5mPSIiK3MwKFBuLmZvcm11bGEsbWUsUG4uY2VsbCxGbixlcik6T3QuRj0oKE8uZGVuc2U/KGVlW2NuXXx8W10pW0Vu''@;'; put 'put ''XTplZVtVbl0pfHx7fSkuRn1lbHNlIE90LmY9IiIrczAoUG4uZm9ybXVsYSxtZSxQbi5jZWxsLEZuLGVyKX1iaT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLHlyKFBuLmNlbGwsT3QsTykscGU9UG47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCFw''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7cGUudmFsPVBuLChPdD1SOChQbixwZS5jZWxsLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sTy5jZWxsRm9ybXVsYSYmKE90LmY9IiIrczAocGUuZm9ybXVsYSxtZSxwZS5jZWxsLEZuLGVyKSksYmk+''@;'; put 'put ''MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LE8say5vcHRzLkRhdGUxOTA0KSx5cihwZS5jZWxsLE90LE8pLHBlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChQbik7dmFyIHhpPXFpKFBuWzBdLnMpO2lmKGN0PU8uZGVuc2U/KGVlW1BuWzBdLnMucl18fFtdKVtQblsw''@;'; put 'put ''XS5zLmNdOmVlW3hpXSxPLmNlbGxGb3JtdWxhJiZjdCl7aWYoIXBlfHwheGl8fCFjdClicmVhaztjdC5mPSIiK3MwKFBuWzFdLG1lLFBuWzBdLEZuLGVyKSxjdC5GPXJhKFBuWzBdKX1icmVhaztjYXNlIlNockZtbGEiOmlmKCFPLmNlbGxGb3JtdWxhKWJyZWFrO2lmKGV0KXtpZighcGUpYnJl''@;'; put 'put ''YWs7anRbcWkocGUuY2VsbCldPVBuWzBdLCgoY3Q9Ty5kZW5zZT8oZWVbcGUuY2VsbC5yXXx8W10pW3BlLmNlbGwuY106ZWVbcWkocGUuY2VsbCldKXx8e30pLmY9IiIrczAoUG5bMF0sbWUsWWUsRm4sZXIpfWJyZWFrO2Nhc2UiTGFiZWxTc3QiOk90PVI4KGJlW1BuLmlzc3RdLnQsUG4uaXhm''@;'; put 'put ''ZSwicyIpLGJlW1BuLmlzc3RdLmgmJihPdC5oPWJlW1BuLmlzc3RdLmgpLE90LlhGPVRuW090Lml4ZmVdLGJpPjAmJihPdC56PV9hW090Lml4ZmU+PjgmNjNdKSxkaChPdCxPLGsub3B0cy5EYXRlMTkwNCkseXIoe2M6UG4uYyxyOlBuLnJ9LE90LE8pLGJlW1BuLmlzc3RdLlImJihPdC5SPWJl''@;'; put 'put ''W1BuLmlzc3RdLlIubWFwKGZ1bmN0aW9uKG1hKXt2YXIgRGk9cXQobWEpO3JldHVybiBtYS5zPT1Ybi5Gb250c1swXSYmKERpLnM9T3QucyksRGl9KSk7YnJlYWs7Y2FzZSJCbGFuayI6Ty5zaGVldFN0dWJzJiYoT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx0OiJ6In0sYmk+MCYm''@;'; put 'put ''KE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LE8say5vcHRzLkRhdGUxOTA0KSx5cih7YzpQbi5jLHI6UG4ucn0sT3QsTykpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKE8uc2hlZXRTdHVicylmb3IodmFyIG9yPVBuLmM7b3I8PVBuLkM7Kytvcil7dmFyIE9pPVBuLml4ZmVbb3ItUG4u''@;'; put 'put ''Y107T3Q9e2l4ZmU6T2ksWEY6VG5bT2ldLHQ6InoifSxiaT4wJiYoT3Quej1fYVtPdC5peGZlPj44JjYzXSksZGgoT3QsTyxrLm9wdHMuRGF0ZTE5MDQpLHlyKHtjOm9yLHI6UG4ucn0sT3QsTyl9YnJlYWs7Y2FzZSJSU3RyaW5nIjpjYXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooT3Q9Ujgo''@;'; put 'put ''UG4udmFsLFBuLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sYmk+MCYmKE90Lno9X2FbT3QuaXhmZT4+OCY2M10pLGRoKE90LE8say5vcHRzLkRhdGUxOTA0KSx5cih7YzpQbi5jLHI6UG4ucn0sT3QsTyk7YnJlYWs7Y2FzZSJEaW1lbnNpb25zIjoxPT09WmkmJihtZT1Qbik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJTU1QiOihiZT1QbikuZm9yRWFjaChmdW5jdGlvbihtYSl7bWEuX1I/KG1hLl9SWzBdJiZtYS5fUlswXS5pZHg+MCYmbWEuX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksbWEuUj1tYS5fUi5tYXAoZnVuY3Rpb24oRGksY3Mpe3JldHVybnt0OiJzIix2Om1hLnQuc2xpY2UoRGkuaWR4LCht''@;'; put 'put ''YS5fUltjcysxXXx8e30pLmlkeCksczpYbi5Gb250c1tEaS5pZm50PDQ/RGkuaWZudDpEaS5pZm50LTFdfX0pLE8uY2VsbEhUTUwmJihtYS5oPVZ1KG1hLlIpKSk6Ty5jZWxsSFRNTCYmKG1hLmg9bGEobWEudCkpLGRlbGV0ZSBtYS5fUn0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1lci5i''@;'; put 'put ''aWZmKXtfYVtiaSsrXT1QblsxXTtmb3IodmFyIFNyPTA7U3I8YmkrMTYzJiZBLl90YWJsZVtTcl0hPVBuWzFdOysrU3IpO1NyPj0xNjMmJkEubG9hZChQblsxXSxiaSsxNjMpfWVsc2UgQS5sb2FkKFBuWzFdLFBuWzBdKTticmVhaztjYXNlIkJJRkYyRk9STUFUIjpfYVtiaSsrXT1Qbjtmb3Io''@;'; put 'put ''dmFyIFBpPTA7UGk8YmkrMTYzJiZBLl90YWJsZVtQaV0hPVBuOysrUGkpO1BpPj0xNjMmJkEubG9hZChQbixiaSsxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6bmE9bmEuY29uY2F0KFBuKTticmVhaztjYXNlIk9iaiI6Y2FbUG4uY21vWzBdXT1lci5sYXN0b2JqPVBuO2JyZWFrO2Nhc2Ui''@;'; put 'put ''VHhPIjplci5sYXN0b2JqLlR4Tz1QbjticmVhaztjYXNlIkltRGF0YSI6ZXIubGFzdG9iai5JbURhdGE9UG47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGJ0PVBuWzBdLnMucjtidDw9UG5bMF0uZS5yOysrYnQpZm9yKGF0PVBuWzBdLnMuYzthdDw9UG5bMF0uZS5jOysrYXQpKGN0PU8uZGVuc2U/''@;'; put 'put ''KGVlW2J0XXx8W10pW2F0XTplZVtxaSh7YzphdCxyOmJ0fSldKSYmKGN0Lmw9UG5bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3IoYXQ9UG5bMF0ucy5jO2F0PD1QblswXS5lLmM7KythdCkoY3Q9Ty5kZW5zZT8oZWVb''@;'; put 'put ''YnRdfHxbXSlbYXRdOmVlW3FpKHtjOmF0LHI6YnR9KV0pJiZjdC5sJiYoY3QubC5Ub29sdGlwPVBuWzFdKTticmVhaztjYXNlIk5vdGUiOmlmKGVyLmJpZmY8PTUmJmVyLmJpZmY+PTIpYnJlYWs7Y3Q9Ty5kZW5zZT8oZWVbUG5bMF0ucl18fFtdKVtQblswXS5jXTplZVtxaShQblswXSldO3Zh''@;'; put 'put ''ciBaYT1jYVtQblsyXV07Y3R8fChPLmRlbnNlPyhlZVtQblswXS5yXXx8KGVlW1BuWzBdLnJdPVtdKSxjdD1lZVtQblswXS5yXVtQblswXS5jXT17dDoieiJ9KTpjdD1lZVtxaShQblswXSldPXt0OiJ6In0sbWUuZS5yPU1hdGgubWF4KG1lLmUucixQblswXS5yKSxtZS5zLnI9TWF0aC5taW4o''@;'; put 'put ''bWUucy5yLFBuWzBdLnIpLG1lLmUuYz1NYXRoLm1heChtZS5lLmMsUG5bMF0uYyksbWUucy5jPU1hdGgubWluKG1lLnMuYyxQblswXS5jKSksY3QuY3x8KGN0LmM9W10pLGN0LmMucHVzaCh7YTpQblsxXSx0OlphLlR4Ty50fSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQmkubil7Y2FzZSJDbHJ0''@;'; put 'put ''Q2xpZW50IjpjYXNlIkhlYWRlciI6Y2FzZSJGb290ZXIiOmNhc2UiSENlbnRlciI6Y2FzZSJWQ2VudGVyIjpjYXNlIlBscyI6Y2FzZSJHQ1ciOmNhc2UiTEhSZWNvcmQiOmNhc2UiREJDZWxsIjpjYXNlIkVudEV4VTIiOmNhc2UiU3hWaWV3IjpjYXNlIlN4dmQiOmNhc2UiU1hWSSI6Y2FzZSJT''@;'; put 'put ''WFZERXgiOmNhc2UiU3hJdmQiOmNhc2UiU1hTdHJpbmciOmNhc2UiU3luYyI6Y2FzZSJBZGRpbiI6Y2FzZSJTWERJIjpjYXNlIlNYTEkiOmNhc2UiU1hFeCI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJGZWF0IjpjYXNlIkZlYXRIZHIiOmNhc2UiRmVhdEhkcjExIjpjYXNlIkZlYXR1cmUxMSI6Y2Fz''@;'; put 'put ''ZSJGZWF0dXJlMTIiOmNhc2UiTGlzdDEyIjpjYXNlIlJlY2FsY0lkIjpjYXNlIkR4R0NvbCI6Y2FzZSJGYmkiOmNhc2UiRmJpMiI6Y2FzZSJHZWxGcmFtZSI6Y2FzZSJYRkNSQyI6Y2FzZSJTdHlsZSI6Y2FzZSJTdHlsZUV4dCI6Y2FzZSJTY2VuYXJpb1Byb3RlY3QiOmNhc2UiT2JqUHJvdGVj''@;'; put 'put ''dCI6Y2FzZSJDb25kRm10MTIiOmNhc2UiVGFibGUiOmNhc2UiVGFibGVTdHlsZXMiOmNhc2UiVGFibGVTdHlsZSI6Y2FzZSJUYWJsZVN0eWxlRWxlbWVudCI6Y2FzZSJTWFN0cmVhbUlEIjpjYXNlIlNYVlMiOmNhc2UiRENvblJlZiI6Y2FzZSJTWEFkZGwiOmNhc2UiRENvbkJpbiI6Y2FzZSJE''@;'; put 'put ''Q29uTmFtZSI6Y2FzZSJTWFBJIjpjYXNlIlN4Rm9ybWF0IjpjYXNlIlN4U2VsZWN0IjpjYXNlIlN4UnVsZSI6Y2FzZSJTeEZpbHQiOmNhc2UiU3hJdG0iOmNhc2UiU3hEWEYiOmNhc2UiU2Nlbk1hbiI6Y2FzZSJEQ29uIjpjYXNlIkNlbGxXYXRjaCI6Y2FzZSJQcmludFJvd0NvbCI6Y2FzZSJQ''@;'; put 'put ''cmludEdyaWQiOmNhc2UiUHJpbnRTaXplIjpjYXNlIlhDVCI6Y2FzZSJDUk4iOmNhc2UiU2NsIjpjYXNlIlNoZWV0RXh0IjpjYXNlIlNoZWV0RXh0T3B0aW9uYWwiOmNhc2UiT2JOb01hY3JvcyI6Y2FzZSJPYlByb2oiOmNhc2UiR1VJRFR5cGVMaWIiOmNhc2UiV09wdCI6Y2FzZSJQaG9uZXRp''@;'; put 'put ''Y0luZm8iOmNhc2UiT2xlT2JqZWN0U2l6ZSI6Y2FzZSJEWEYiOmNhc2UiRFhGTiI6Y2FzZSJEWEZOMTIiOmNhc2UiRFhGTjEyTGlzdCI6Y2FzZSJEWEZOMTJOb0NCIjpjYXNlIkR2IjpjYXNlIkRWYWwiOmNhc2UiQlJBSSI6Y2FzZSJTZXJpZXMiOmNhc2UiU2VyaWVzVGV4dCI6Y2FzZSJEQ29u''@;'; put 'put ''biI6Y2FzZSJEYk9yUGFyYW1RcnkiOmNhc2UiREJRdWVyeUV4dCI6Y2FzZSJPbGVEYkNvbm4iOmNhc2UiRXh0U3RyaW5nIjpjYXNlIklGbXRSZWNvcmQiOmNhc2UiQ29uZEZtdCI6Y2FzZSJDRiI6Y2FzZSJDRjEyIjpjYXNlIkNGRXgiOmNhc2UiRXhjZWw5RmlsZSI6Y2FzZSJVbml0cyI6Y2Fz''@;'; put 'put ''ZSJJbnRlcmZhY2VIZHIiOmNhc2UiTW1zIjpjYXNlIkludGVyZmFjZUVuZCI6Y2FzZSJEU0YiOmNhc2UiQnVpbHRJbkZuR3JvdXBDb3VudCI6Y2FzZSJXaW5kb3cxIjpjYXNlIkhpZGVPYmoiOmNhc2UiR3JpZFNldCI6Y2FzZSJHdXRzIjpjYXNlIlVzZXJCVmlldyI6Y2FzZSJVc2VyU1ZpZXdC''@;'; put 'put ''ZWdpbiI6Y2FzZSJVc2VyU1ZpZXdFbmQiOmNhc2UiRGVmQ29sV2lkdGgiOmNhc2UiRGVmYXVsdFJvd0hlaWdodCI6YnJlYWs7Y2FzZSJYRkV4dCI6UGsoVG5bUG4uaXhmZV0sUG4uZXh0KTticmVhaztjYXNlIkNvbEluZm8iOmlmKCFlci5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7UG4uZT49UG4u''@;'; put 'put ''czspTGlbUG4uZS0tXT17d2lkdGg6UG4udy8yNTYsbGV2ZWw6UG4ubGV2ZWx8fDAsaGlkZGVuOiEhKDEmUG4uZmxhZ3MpfSxfcnx8KF9yPSEwKSxRMChMaVtQbi5lKzFdKTticmVhaztjYXNlIlJvdyI6dmFyIEhpPXt9O251bGwhPVBuLmxldmVsJiYoa3JbUG4ucl09SGksSGkubGV2ZWw9UG4u''@;'; put 'put ''bGV2ZWwpLFBuLmhpZGRlbiYmKGtyW1BuLnJdPUhpLEhpLmhpZGRlbj0hMCksUG4uaHB0JiYoa3JbUG4ucl09SGksSGkuaHB0PVBuLmhwdCxIaS5ocHg9c2goUG4uaHB0KSksUG4uaXhmZSYmKGtyW1BuLnJdPUhpLGZyKE90PXtpeGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV18fHt9LHY6MCx0''@;'; put 'put ''OiJuIn0sTyksSGkucz1PdC5zKTticmVhaztjYXNlIkxlZnRNYXJnaW4iOmNhc2UiUmlnaHRNYXJnaW4iOmNhc2UiVG9wTWFyZ2luIjpjYXNlIkJvdHRvbU1hcmdpbiI6ZWVbIiFtYXJnaW5zIl18fFgzKGVlWyIhbWFyZ2lucyJdPXt9KSxlZVsiIW1hcmdpbnMiXVtXby5zbGljZSgwLC02KS50''@;'; put 'put ''b0xvd2VyQ2FzZSgpXT1QbjticmVhaztjYXNlIlNlbGVjdGlvbiI6ZWVbIiFzZWwiXT1QbjticmVhaztjYXNlIlNldHVwIjplZVsiIW1hcmdpbnMiXXx8WDMoZWVbIiFtYXJnaW5zIl09e30pLGVlWyIhbWFyZ2lucyJdLmhlYWRlcj1Qbi5oZWFkZXIsZWVbIiFtYXJnaW5zIl0uZm9vdGVyPVBu''@;'; put 'put ''LmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOlBuLlJUTCYmKFNuLlZpZXdzWzBdLlJUTD0hMCksTWk9UG47YnJlYWs7Y2FzZSJDb3VudHJ5IjpLdD1QbjticmVhaztjYXNlIkZvbnQiOlBuLmljdiYmQm4oUG4uaWN2KSYmKFBuLmNvbG9yPXtyZ2I6aGQoQm4oUG4uaWN2KSl9KSxkZWxldGUg''@;'; put 'put ''UG4uaWN2LDA9PVhuLkZvbnRzLmxlbmd0aCYmSTQoUG4pLFhuLkZvbnRzLnB1c2goUG4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6cnI9UG47YnJlYWs7Y2FzZSJUaGVtZSI6Rmk9UG47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6UGU/bHIuQ29kZU5hbWU9UG58fGxyLm5hbWU6U24uV0JQcm9wcy5Db2Rl''@;'; put 'put ''TmFtZT1Qbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooTWl8fHt9KS5mcm96ZW4mJihlZVsiIWZyZWV6ZSJdPXFpKHtyOlBuLnl8fDAsYzpQbi54fHwwfSkpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiRGF0IjpjYXNlIkJlZ2luIjpjYXNlIkVuZCI6Y2FzZSJT''@;'; put 'put ''dGFydEJsb2NrIjpjYXNlIkVuZEJsb2NrIjpjYXNlIkZyYW1lIjpjYXNlIkFyZWEiOmNhc2UiQXhpcyI6Y2FzZSJBeGlzTGluZSI6Y2FzZSJUaWNrIjpjYXNlIkF4ZXNVc2VkIjpjYXNlIkNydExheW91dDEyIjpjYXNlIkNydExheW91dDEyQSI6Y2FzZSJDcnRMaW5rIjpjYXNlIkNydExpbmUi''@;'; put 'put ''OmNhc2UiQ3J0TWxGcnQiOmNhc2UiQ3J0TWxGcnRDb250aW51ZSI6Y2FzZSJMaW5lRm9ybWF0IjpjYXNlIkFyZWFGb3JtYXQiOmNhc2UiQ2hhcnQiOmNhc2UiQ2hhcnQzZCI6Y2FzZSJDaGFydDNEQmFyU2hhcGUiOmNhc2UiQ2hhcnRGb3JtYXQiOmNhc2UiQ2hhcnRGcnRJbmZvIjpjYXNlIlBs''@;'; put 'put ''b3RBcmVhIjpjYXNlIlBsb3RHcm93dGgiOmNhc2UiU2VyaWVzTGlzdCI6Y2FzZSJTZXJQYXJlbnQiOmNhc2UiU2VyQXV4VHJlbmQiOmNhc2UiRGF0YUZvcm1hdCI6Y2FzZSJTZXJUb0NydCI6Y2FzZSJGb250WCI6Y2FzZSJDYXRTZXJSYW5nZSI6Y2FzZSJBeGNFeHQiOmNhc2UiU2VyRm10Ijpj''@;'; put 'put ''YXNlIlNodFByb3BzIjpjYXNlIkRlZmF1bHRUZXh0IjpjYXNlIlRleHQiOmNhc2UiQ2F0TGFiIjpjYXNlIkRhdGFMYWJFeHRDb250ZW50cyI6Y2FzZSJMZWdlbmQiOmNhc2UiTGVnZW5kRXhjZXB0aW9uIjpjYXNlIlBpZSI6Y2FzZSJTY2F0dGVyIjpjYXNlIlBpZUZvcm1hdCI6Y2FzZSJNYXJr''@;'; put 'put ''ZXJGb3JtYXQiOmNhc2UiU3RhcnRPYmplY3QiOmNhc2UiRW5kT2JqZWN0IjpjYXNlIkFsUnVucyI6Y2FzZSJPYmplY3RMaW5rIjpjYXNlIlNJSW5kZXgiOmNhc2UiQXR0YWNoZWRMYWJlbCI6Y2FzZSJZTXVsdCI6Y2FzZSJMaW5lIjpjYXNlIkJhciI6Y2FzZSJTdXJmIjpjYXNlIkF4aXNQYXJl''@;'; put 'put ''bnQiOmNhc2UiUG9zIjpjYXNlIlZhbHVlUmFuZ2UiOmNhc2UiU1hWaWV3RXg5IjpjYXNlIlNYVmlld0xpbmsiOmNhc2UiUGl2b3RDaGFydEJpdHMiOmNhc2UiU0Jhc2VSZWYiOmNhc2UiVGV4dFByb3BzU3RyZWFtIjpjYXNlIkxuRXh0IjpjYXNlIk1rckV4dCI6Y2FzZSJDcnRDb29wdCI6Y2Fz''@;'; put 'put ''ZSJRc2kiOmNhc2UiUXNpZiI6Y2FzZSJRc2lyIjpjYXNlIlFzaVNYVGFnIjpjYXNlIlR4dFFyeSI6Y2FzZSJGaWx0ZXJNb2RlIjpjYXNlIkF1dG9GaWx0ZXIiOmNhc2UiQXV0b0ZpbHRlckluZm8iOmNhc2UiQXV0b0ZpbHRlcjEyIjpjYXNlIkRyb3BEb3duT2JqSWRzIjpjYXNlIlNvcnQiOmNh''@;'; put 'put ''c2UiU29ydERhdGEiOmNhc2UiU2hhcGVQcm9wc1N0cmVhbSI6Y2FzZSJNc29EcmF3aW5nIjpjYXNlIk1zb0RyYXdpbmdHcm91cCI6Y2FzZSJNc29EcmF3aW5nU2VsZWN0aW9uIjpjYXNlIldlYlB1YiI6Y2FzZSJBdXRvV2ViUHViIjpjYXNlIkhlYWRlckZvb3RlciI6Y2FzZSJIRlBpY3R1cmUi''@;'; put 'put ''OmNhc2UiUExWIjpjYXNlIkhvcml6b250YWxQYWdlQnJlYWtzIjpjYXNlIlZlcnRpY2FsUGFnZUJyZWFrcyI6Y2FzZSJCYWNrdXAiOmNhc2UiQ29tcHJlc3NQaWN0dXJlcyI6Y2FzZSJDb21wYXQxMiI6Y2FzZSJDb250aW51ZSI6Y2FzZSJDb250aW51ZUZydDEyIjpjYXNlIkZydEZvbnRMaXN0''@;'; put 'put ''IjpjYXNlIkZydFdyYXBwZXIiOmJyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiVGFiSWRDb25mIjpjYXNlIlJhZGFyIjpjYXNlIlJhZGFyQXJlYSI6Y2FzZSJEcm9wQmFyIjpjYXNlIkludGwiOmNhc2UiQ29vcmRMaXN0IjpjYXNlIlNlckF1eEVyckJhciI6Y2FzZSJCSUZGMkZPTlRD''@;'; put 'put ''TFIiOmNhc2UiQklGRjJGTVRDTlQiOmNhc2UiQklGRjJGT05UWFRSQSI6Y2FzZSJCSUZGMlhGIjpjYXNlIkJJRkYzWEYiOmNhc2UiQklGRjRYRiI6Y2FzZSJCSUZGMlhGSU5ERVgiOmNhc2UiQklGRjRGTVRDTlQiOmNhc2UiQklGRjJST1ciOmNhc2UiQklGRjJXSU5ET1cyIjpjYXNlIlNDRU5B''@;'; put 'put ''UklPIjpjYXNlIkRDb25CaW4iOmNhc2UiUGljRiI6Y2FzZSJEYXRhTGFiRXh0IjpjYXNlIkxlbCI6Y2FzZSJCb3BQb3AiOmNhc2UiQm9wUG9wQ3VzdG9tIjpjYXNlIlJlYWxUaW1lRGF0YSI6Y2FzZSJOYW1lIjpjYXNlIkxITkdyYXBoIjpjYXNlIkZuR3JvdXBOYW1lIjpjYXNlIkFkZE1lbnUi''@;'; put 'put ''OmNhc2UiTFByIjpjYXNlIkxpc3RPYmoiOmNhc2UiTGlzdEZpZWxkIjpjYXNlIlJSU29ydCI6Y2FzZSJCaWdOYW1lIjpjYXNlIlRvb2xiYXJIZHIiOmNhc2UiVG9vbGJhckVuZCI6Y2FzZSJEREVPYmpOYW1lIjpjYXNlIkZSVEFyY2hJZCQiOmJyZWFrO2RlZmF1bHQ6aWYoTy5XVEYpdGhyb3ci''@;'; put 'put ''VW5yZWNvZ25pemVkIFJlY29yZCAiK0JpLm59fX19fWVsc2UgUy5sKz1KYSxlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6SmF9KSl9cmV0dXJuIGsuU2hlZXROYW1lcz1SZShzZSkuc29ydChmdW5jdGlvbihtYSxEaSl7cmV0dXJuIE51bWJlciht''@;'; put 'put ''YSktTnVtYmVyKERpKX0pLm1hcChmdW5jdGlvbihtYSl7cmV0dXJuIHNlW21hXS5uYW1lfSksTy5ib29rU2hlZXRzfHwoay5TaGVldHM9SyksIWsuU2hlZXROYW1lcy5sZW5ndGgmJlZlWyIhcmVmIl0/KGsuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxrLlNoZWV0cyYmKGsuU2hlZXRzLlNo''@;'; put 'put ''ZWV0MT1WZSkpOmsuUHJlYW1ibGU9VmUsay5TaGVldHMmJnNvLmZvckVhY2goZnVuY3Rpb24obWEsRGkpe2suU2hlZXRzW2suU2hlZXROYW1lc1tEaV1dWyIhYXV0b2ZpbHRlciJdPW1hfSksay5TdHJpbmdzPWJlLGsuU1NGPUEuZ2V0X3RhYmxlKCksZXIuZW5jJiYoay5FbmNyeXB0aW9uPWVy''@;'; put 'put ''LmVuYyksRmkmJihrLlRoZW1lcz1GaSksay5NZXRhZGF0YT17fSx2b2lkIDAhPT1LdCYmKGsuTWV0YWRhdGEuQ291bnRyeT1LdCksRm4ubmFtZXMubGVuZ3RoPjAmJihTbi5OYW1lcz1Gbi5uYW1lcyksay5Xb3JrYm9vaz1TbixrfShLLmNvbnRlbnQsTyk7ZWxzZSBpZigoc2U9dmUuZmluZChT''@;'; put 'put ''LCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJnNlLmNvbnRlbnQpZWU9SXYudG9fd29ya2Jvb2soc2UuY29udGVudCwoTy50eXBlPW1lLE8pKTtlbHNle2lmKCEoc2U9dmUuZmluZChTLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFzZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZp''@;'; put 'put ''bmQgV29ya2Jvb2sgc3RyZWFtIik7ZWU9SXYudG9fd29ya2Jvb2soc2UuY29udGVudCwoTy50eXBlPW1lLE8pKX1PLmJvb2tWQkEmJlMuRnVsbFBhdGhzJiZ2ZS5maW5kKFMsIi9fVkJBX1BST0pFQ1RfQ1VSL1ZCQS9kaXIiKSYmKGVlLnZiYXJhdz1mdW5jdGlvbiBaayhTKXt2YXIgTz12ZS51''@;'; put 'put ''dGlscy5jZmJfbmV3KHtyb290OiJSIn0pO3JldHVybiBTLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGssSyl7aWYoIi8iIT09ay5zbGljZSgtMSkmJmsubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIGVlPWsucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFf''@;'; put 'put ''UFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZChPLGVlLFMuRmlsZUluZGV4W0tdLmNvbnRlbnQpfX0pLHZlLndyaXRlKE8pfShTKSl9dmFyIHBlPXt9O3JldHVybiBTLkZ1bGxQYXRocyYmZnVuY3Rpb24gQm5lKFMsTyxrKXt2YXIgSz12ZS5maW5kKFMsIiFEb2N1bWVu''@;'; put 'put ''dFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEsmJksuc2l6ZT4wKXRyeXt2YXIgZWU9ajYoSyxtNCxUeS5EU0kpO2Zvcih2YXIgc2UgaW4gZWUpT1tzZV09ZWVbc2VdfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX12YXIgbWU9dmUuZmluZChTLCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYo''@;'; put 'put ''bWUmJm1lLnNpemU+MCl0cnl7dmFyIHBlPWo2KG1lLGQ1LFR5LlNJKTtmb3IodmFyIGJlIGluIHBlKW51bGw9PU9bYmVdJiYoT1tiZV09cGVbYmVdKX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cgUGV9Ty5IZWFkaW5nUGFpcnMmJk8uVGl0bGVzT2ZQYXJ0cyYmKF80KE8uSGVhZGluZ1BhaXJz''@;'; put 'put ''LE8uVGl0bGVzT2ZQYXJ0cyxPLGspLGRlbGV0ZSBPLkhlYWRpbmdQYWlycyxkZWxldGUgTy5UaXRsZXNPZlBhcnRzKX0oUyxwZSxPKSxlZS5Qcm9wcz1lZS5DdXN0cHJvcHM9cGUsTy5ib29rRmlsZXMmJihlZS5jZmI9UyksZWV9dmFyIEw4PXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24g''@;'; put 'put ''QkQoUyxPKXt2YXIgaz17fSxLPVMubCtPO2sucj1TLnJlYWRfc2hpZnQoNCksUy5sKz00O3ZhciBlZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0xO3ZhciBzZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubD1LLDcmc2UmJihrLmxldmVsPTcmc2UpLDE2JnNlJiYoay5oaWRkZW49ITApLDMyJnNl''@;'; put 'put ''JiYoay5ocHQ9ZWUvMjApLGt9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gRG5lKFMpe3JldHVybltEMShTKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gSGooUyl7cmV0dXJuW0QxKFMpLEkxKFMpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24g''@;'; put 'put ''WkQoUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gRGooUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gRVMoUyl7cmV0dXJuW0QxKFMpLFBs''@;'; put 'put ''KFMpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gTG5lKFMpe3JldHVybltEMShTKSxndShTKSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBSaihTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntuOiJCcnRGbWxhU3RyaW5n''@;'; put 'put ''IixmOmZ1bmN0aW9uIHB5KFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1EMShTKTtlZS5yPWtbIiFyb3ciXTt2YXIgbWU9W2VlLGd1KFMpLCJzdHIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsSy1TLmwsayk7bWVbM109czAocGUsbnVsbCxlZSxrLnN1cGJvb2tzLGspfWVs''@;'; put 'put ''c2UgUy5sPUs7cmV0dXJuIG1lfX0sOTp7bjoiQnJ0Rm1sYU51bSIsZjpmdW5jdGlvbiBBUyhTLE8sayl7dmFyIEs9Uy5sK08sZWU9RDEoUyk7ZWUucj1rWyIhcm93Il07dmFyIG1lPVtlZSxQbChTKSwibiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxLLVMubCxrKTtt''@;'; put 'put ''ZVszXT1zMChwZSxudWxsLGVlLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9SztyZXR1cm4gbWV9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gVFMoUyxPLGspe3ZhciBLPVMubCtPLGVlPUQxKFMpO2VlLnI9a1siIXJvdyJdO3ZhciBtZT1bZWUsUy5yZWFkX3NoaWZ0KDEpLCJiIl07''@;'; put 'put ''aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEstUy5sLGspO21lWzNdPXMwKHBlLG51bGwsZWUsay5zdXBib29rcyxrKX1lbHNlIFMubD1LO3JldHVybiBtZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVuY3Rpb24gdzgoUyxPLGspe3ZhciBLPVMubCtPLGVlPUQxKFMp''@;'; put 'put ''O2VlLnI9a1siIXJvdyJdO3ZhciBtZT1bZWUsUy5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEstUy5sLGspO21lWzNdPXMwKHBlLG51bGwsZWUsay5zdXBib29rcyxrKX1lbHNlIFMubD1LO3JldHVybiBtZX19LDEyOntuOiJCcnRTaG9y''@;'; put 'put ''dEJsYW5rIixmOmZ1bmN0aW9uIGtqKFMpe3JldHVybltKaChTKV19fSwxMzp7bjoiQnJ0U2hvcnRSayIsZjpmdW5jdGlvbiBSbmUoUyl7cmV0dXJuW0poKFMpLEkxKFMpLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBfOChTKXtyZXR1cm5bSmgoUyksUy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpLCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIFVEKFMpe3JldHVybltKaChTKSxTLnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6Rmp9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIGpqKFMpe3JldHVybltKaChTKSxn''@;'; put 'put ''dShTKSwic3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIE9qKFMpe3JldHVybltKaChTKSxTLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOnNsfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntu''@;'; put 'put ''OiJCcnRQQ0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5Ontu''@;'; put 'put ''OiJCcnRQQ0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2Ontu''@;'; put 'put ''OiJCcnRGUlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIEE4KFMsTyxrKXt2YXIgSz1TLmwrTztTLmwrPTQsUy5sKz0xO3ZhciBlZT1TLnJlYWRfc2hpZnQoNCksc2U9bDUoUyksbWU9ZkQoUywwLGspLHBlPXQw''@;'; put 'put ''KFMpO1MubD1LO3ZhciBiZT17TmFtZTpzZSxQdGc6bWV9O3JldHVybiBlZTwyNjg0MzU0NTUmJihiZS5TaGVldD1lZSkscGUmJihiZS5Db21tZW50PXBlKSxiZX19LDQwOntuOiJCcnRJbmRleFJvd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5j''@;'; put 'put ''dGlvbiB6VihTLE8sayl7dmFyIEs9e307Sy5zej1TLnJlYWRfc2hpZnQoMikvMjA7dmFyIGVlPU93KFMpO3N3aXRjaChlZS5mQm9sZCYmKEsuYm9sZD0xKSxlZS5mSXRhbGljJiYoSy5pdGFsaWM9MSksZWUuZlVuZGVybGluZSYmKEsudW5kZXJsaW5lPTEpLGVlLmZDb25kZW5zZSYmKEsuY29u''@;'; put 'put ''ZGVuc2U9MSksZWUuZkV4dGVuZCYmKEsuZXh0ZW5kPTEpLGVlLmZTaGFkb3cmJihLLnNoYWRvdz0xKSxlZS5mT3V0bGluZSYmKEsub3V0bGluZT0xKSxlZS5mU3RyaWtlb3V0JiYoSy5zdHJpa2U9MSksNzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoSy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7''@;'; put 'put ''Y2FzZSAxOksudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOksudmFsaWduPSJzdWIifXZhciBtZT1TLnJlYWRfc2hpZnQoMSk7MCE9bWUmJihLLnVuZGVybGluZT1tZSk7dmFyIHBlPVMucmVhZF9zaGlmdCgxKTtwZT4wJiYoSy5mYW1pbHk9cGUpO3ZhciBiZT1TLnJlYWRfc2hpZnQoMSk7''@;'; put 'put ''c3dpdGNoKGJlPjAmJihLLmNoYXJzZXQ9YmUpLFMubCsrLEsuY29sb3I9UWgoUyksUy5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6Sy5zY2hlbWU9Im1ham9yIjticmVhaztjYXNlIDI6Sy5zY2hlbWU9Im1pbm9yIn1yZXR1cm4gSy5uYW1lPWd1KFMpLEt9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0''@;'; put 'put ''aW9uIFd2KFMsTyl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxndShTKV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBZVihTLE8pe3ZhciBrPVMubCtPLEs9e30sZWU9Uy5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1lZSl7Sy5wYXR0ZXJuVHlwZT1NQ1tlZV07dmFyIHNlPVFoKFMpOzY0IT1z''@;'; put 'put ''ZS5pbmRleCYmKEsuZmdDb2xvcj1zZSk7dmFyIG1lPVFoKFMpOzY1IT1tZS5pbmRleCYmKEsuYmdDb2xvcj1tZSl9ZWxzZXtTLmwrPTE2LFMucmVhZF9zaGlmdCg0KSxQbChTKSxQbChTKSxQbChTKSxQbChTKSxQbChTKTtmb3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSxiZT1bXSxQZT0wO1Bl''@;'; put 'put ''PHBlOysrUGUpYmUucHVzaChaVihTKSl9cmV0dXJuIFMubD1rLEt9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIEdWKFMpe3ZhciBPPXt9O1MucmVhZF9zaGlmdCgxKTt2YXIgaz1JNShTKTsibm9uZSIhPWsuc3R5bGUmJihPLnRvcD1rKTt2YXIgSz1JNShTKTsibm9uZSIhPUsuc3R5''@;'; put 'put ''bGUmJihPLmJvdHRvbT1LKTt2YXIgZWU9STUoUyk7Im5vbmUiIT1lZS5zdHlsZSYmKE8ubGVmdD1lZSk7dmFyIHNlPUk1KFMpOyJub25lIiE9c2Uuc3R5bGUmJihPLnJpZ2h0PXNlKTt2YXIgbWU9STUoUyk7cmV0dXJuIm5vbmUiIT1tZS5zdHlsZSYmKE8uZGlhZz1tZSksT319LDQ3OntuOiJC''@;'; put 'put ''cnRYRiIsZjpmdW5jdGlvbiB4QyhTLE8pe3ZhciBrPVMubCtPLEs9e30sZWU9Uy5yZWFkX3NoaWZ0KDIpLHNlPVMucmVhZF9zaGlmdCgyKSxtZT1TLnJlYWRfc2hpZnQoMikscGU9Uy5yZWFkX3NoaWZ0KDIpLGJlPVMucmVhZF9zaGlmdCgyKSxQZT1TLnJlYWRfc2hpZnQoMSk7Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpO3ZhciBWZT1TLnJlYWRfc2hpZnQoMiksWWU9Uy5yZWFkX3NoaWZ0KDEpO1MubD1rLEsueGZJZD1lZSxLLm51bUZtdElkPXNlLEsuZm9udElkPW1lLEsuZmlsbElkPXBlLEsuYm9yZGVySWQ9YmUsMSZZZSYmMCE9Sy5udW1GbXRJZCYmKEsuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLEsu''@;'; put 'put ''YWxpZ25tZW50PXt9LFBlPjAmJihLLmFsaWdubWVudC50ZXh0Um90YXRpb249UGUpO3ZhciBldD0hMTtyZXR1cm4gNyZWZSYmKGV0PSEwLEsuYWxpZ25tZW50Lmhvcml6b250YWw9RDVbNyZWZV0pLEsuYWxpZ25tZW50LnZlcnRpY2FsPXQ4W1ZlPj4+MyY3XSxLLmFsaWdubWVudC52ZXJ0aWNh''@;'; put 'put ''bCYmKGV0PSEwKSxWZT4+PjYmMSYmKEsuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxWZT4+PjgmMSYmKEsuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxldHx8ZGVsZXRlIEsuYWxpZ25tZW50LDQmWWUmJmV0JiYoSy5hcHBseUFsaWdubWVudD0hMCksS319LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5''@;'; put 'put ''OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3''@;'; put 'put ''OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOnJDfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gcjgoUyl7dmFyIE89e307Ty5p''@;'; put 'put ''PVMucmVhZF9zaGlmdCg0KTt2YXIgaz17fTtrLnI9Uy5yZWFkX3NoaWZ0KDQpLGsuYz1TLnJlYWRfc2hpZnQoNCksTy5yPXFpKGspO3ZhciBLPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZLJiYoTy5sPSIxIiksOCZLJiYoTy5hPSIxIiksT319LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9u''@;'; put 'put ''IFhqKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1TLnJlYWRfc2hpZnQoNCksc2U9bjAoUyksbWU9dDAoUykscGU9dDAoUyksYmU9dDAoUyksUGU9dDAoUyksVmU9aEQoUyxPLGspLFllPVMubDxLP2hEKFMsTyxrKTpudWxsLGV0PTE1JmVlLGN0PXt0OnFEW2V0XSxzcXJmeDpzZSxzOlttZSxwZSxi''@;'; put 'put ''ZSxQZV19O3JldHVybiBWZSYmKGN0LmYxPVZlKSxZZSYmKGN0LmYyPVllKSwwPT1ldHx8Mz09ZXR8fDc9PWV0fHwoY3Qub3A9RFNbZWU+PjIwJjE1XSksY3R9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6''@;'; put 'put ''e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6SW4s''@;'; put 'put ''cDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24g''@;'; put 'put ''a1MoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTI4LHtSVEw6MzImTyxncmlkOiEhKDQmTyl9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXci''@;'; put 'put ''fSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIGh5''@;'; put 'put ''KFMsTyl7dmFyIGs9e30sSz1TW1MubF07cmV0dXJuKytTLmwsay5hYm92ZT0hKDY0JkspLGsubGVmdD0hKDEyOCZLKSxTLmwrPTE4LGsubmFtZT1vNShTLE8tMTkpLGt9fSwxNDg6e246IkJydFdzRGltIixmOnhqLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBHRChTLE8pe3Zh''@;'; put 'put ''ciBrPVMubCtPO1BsKFMpLFBsKFMpO3ZhciBLPVMucmVhZF9zaGlmdCg0LCJpIiksZWU9Uy5yZWFkX3NoaWZ0KDQsImkiKTtpZihTLnJlYWRfc2hpZnQoNCksUy5yZWFkX3NoaWZ0KDEpLGshPVMubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK2srIiAhPSAiK1MubCk7cmV0dXJu''@;'; put 'put ''W3FpKHtyOkssYzplZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uICREKFMsTyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSx7Y2VsbDpxaSh7cjpTLnJlYWRfc2hpZnQoNCksYzpTLnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBOUyhTLE8p''@;'; put 'put ''e3ZhciBrPXt9LEs9Uy5yZWFkX3NoaWZ0KDQpO2suZGVmYXVsdFRoZW1lVmVyc2lvbj1TLnJlYWRfc2hpZnQoNCk7dmFyIGVlPU8+OD9ndShTKToiIjtyZXR1cm4gZWUubGVuZ3RoPjAmJihrLkNvZGVOYW1lPWVlKSxrLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkspLGsuYmFja3Vw''@;'; put 'put ''RmlsZT0hISg2NCZLKSxrLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkspLGsuZGF0ZTE5MDQ9ISEoMSZLKSxrLmZpbHRlclByaXZhY3k9ISEoOCZLKSxrLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkspLGsucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmSyksay5wdWJsaXNoSXRlbXM9''@;'; put 'put ''ISEoMjA0OCZLKSxrLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmSyksay5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZLKSxrLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmSyksay5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZLKSxrLnNob3dPYmplY3RzPVsi''@;'; put 'put ''YWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW0s+PjEzJjNdLGsuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmSyksay51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0s+PjgmM10sa319LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxl''@;'; put 'put ''UmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gZ3ooUyxPKXt2YXIgaz17fTtyZXR1cm4gay5IaWRkZW49Uy5yZWFkX3NoaWZ0KDQpLGsuaVRhYklEPVMucmVhZF9zaGlmdCg0KSxrLnN0clJlbElEPWc0KFMsTy04KSxrLm5hbWU9Z3UoUyksa319LDE1Nzp7bjoiQnJ0''@;'; put 'put ''Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBMdihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOm11fSwx''@;'; put 'put ''NjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRD''@;'; put 'put ''b2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3Vz''@;'; put 'put ''dG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOldEfSwxNzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgw''@;'; put 'put ''OntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6''@;'; put 'put ''e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0''@;'; put 'put ''RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBD''@;'; put 'put ''REhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rp''@;'; put 'put ''b24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFND''@;'; put 'put ''b25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RT''@;'; put 'put ''Q1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91''@;'; put 'put ''cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENE''@;'; put 'put ''RkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RU''@;'; put 'put ''Q0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVl''@;'; put 'put ''cmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0''@;'; put 'put ''RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246''@;'; put 'put ''IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1l''@;'; put 'put ''cyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5F''@;'; put 'put ''Q1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVD''@;'; put 'put ''UGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRF''@;'; put 'put ''bmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246''@;'; put 'put ''IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5k''@;'; put 'put ''U1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9''@;'; put 'put ''LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29s''@;'; put 'put ''cyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5''@;'; put 'put ''OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1Ontu''@;'; put 'put ''OiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntu''@;'; put 'put ''OiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hU''@;'; put 'put ''SEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8i''@;'; put 'put ''fSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNl''@;'; put 'put ''bGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJC''@;'; put 'put ''cnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRl''@;'; put 'put ''cm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6ZzR9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJy''@;'; put 'put ''dEV4dGVyblNoZWV0IixmOlR2fSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6''@;'; put 'put ''e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0''@;'; put 'put ''RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgy''@;'; put 'put ''OntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJ''@;'; put 'put ''RCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdp''@;'; put 'put ''bkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRF''@;'; put 'put ''T0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6''@;'; put 'put ''e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoi''@;'; put 'put ''QnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmll''@;'; put 'put ''dyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gZ3koUyxPLGspe3ZhciBLPVMubCtPLGVlPWxkKFMpLHNlPVMucmVhZF9zaGlmdCgxKSxtZT1bZWVdO2lmKG1lWzJdPXNlLGsuY2VsbEZvcm11bGEpe3ZhciBwZT1lUyhTLEstUy5s''@;'; put 'put ''LGspO21lWzFdPXBlfWVsc2UgUy5sPUs7cmV0dXJuIG1lfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIFlqKFMsTyxrKXt2YXIgSz1TLmwrTyxzZT1bbXUoUywxNildO2lmKGsuY2VsbEZvcm11bGEpe3ZhciBtZT1KQihTLEstUy5sLGspO3NlWzFdPW1lLFMubD1LfWVsc2UgUy5s''@;'; put 'put ''PUs7cmV0dXJuIHNlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJC''@;'; put 'put ''cnRCZWdpblBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6''@;'; put 'put ''e246IkJydEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RI''@;'; put 'put ''R0xHTWVtYmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6''@;'; put 'put ''e246IkJydEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7''@;'; put 'put ''bjoiQnJ0QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25h''@;'; put 'put ''bEZvcm1hdHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5''@;'; put 'put ''OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7''@;'; put 'put ''bjoiQnJ0SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uICRqKFMpe3ZhciBPPXt9O3JldHVybiBLRC5mb3JFYWNoKGZ1bmN0aW9uKGspe09ba109UGwoUyl9KSxPfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENy''@;'; put 'put ''dEZvcm1hdHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBqRChTKXt2YXIgTz17fSxrPXt9LEs9e30sZWU9Uy5yZWFkX3NoaWZ0KDQpLHNlPVMucmVhZF9zaGlmdCgyKTtLLndjaD1lZTw9NjU1MzY/ZWUvMjU2OnNlO3ZhciBtZT1TLnJlYWRfc2hpZnQoMik7ay5ocHQ9bWUv''@;'; put 'put ''MjA7dmFyIHBlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZwZSYmKGsuaGlkZGVuPSEwKSw0JnBlJiYoTy50b3B0aGljaz0hMCksOCZwZSYmKE8uYm90dGhpY2s9ITApLE8ucm93b3V0bGluZT1TLnJlYWRfc2hpZnQoMSksTy5jb2xvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxqdihrKSxPLnJv''@;'; put 'put ''dz1rLFEwKEspLE8uY29sPUssT319LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJl''@;'; put 'put ''Z2luTWFwIn0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIFVqKFMsTyl7dmFyIGs9Uy5sK08sSz1tdShTLDE2KSxlZT10MChTKSxzZT1ndShTKSxtZT1ndShTKSxwZT1ndShTKTtTLmw9azt2YXIgYmU9e3JmeDpLLHJlbElkOmVlLGxvYzpzZSxkaXNw''@;'; put 'put ''bGF5OnBlfTtyZXR1cm4gbWUmJihiZS5Ub29sdGlwPW1lKSxiZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''Y2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRC''@;'; put 'put ''ZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUx''@;'; put 'put ''NDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5W''@;'; put 'put ''b2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6''@;'; put 'put ''e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246''@;'; put 'put ''IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoi''@;'; put 'put ''QnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOmc0fSw1NTE6e246''@;'; put 'put ''IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJC''@;'; put 'put ''cnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9''@;'; put 'put ''LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3''@;'; put 'put ''NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0''@;'; put 'put ''U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5Ontu''@;'; put 'put ''OiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdp''@;'; put 'put ''blNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJy''@;'; put 'put ''dEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0''@;'; put 'put ''Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2lu''@;'; put 'put ''Qm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRF''@;'; put 'put ''bmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1l''@;'; put 'put ''bnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjp3Qn0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0''@;'; put 'put ''aW9uIEY1KFMpe3ZhciBPPXt9O08uaWF1dGhvcj1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9bXUoUywxNik7cmV0dXJuIE8ucmZ4PWsucyxPLnJlZj1xaShrLnMpLFMubCs9MTYsT319LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6THd9LDYzODp7bjoi''@;'; put 'put ''QnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJy''@;'; put 'put ''dEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3Jl''@;'; put 'put ''RUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gZHooUyxPKXtyZXR1cm4gUy5sKz0xMCx7bmFtZTpndShTKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9''@;'; put 'put ''LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRp''@;'; put 'put ''biJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoi''@;'; put 'put ''QnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNv''@;'; put 'put ''In0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVy''@;'; put 'put ''In0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0''@;'; put 'put ''Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2Fs''@;'; put 'put ''Y01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgx''@;'; put 'put ''NCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEw''@;'; put 'put ''NTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gSVMoUyxPLGspe3ZhciBLPWZ1bmN0aW9uIGRuKFMsTyxrKXt2YXIgSz1TLnJlYWRfc2hpZnQoNCksZWU9e307cmV0dXJuIDEmSyYmKGVl''@;'; put 'put ''LnJlZnM9ZnVuY3Rpb24gcW4oUyl7Zm9yKHZhciBPPVMucmVhZF9zaGlmdCg0KSxrPVtdO08tLSA+MDspay5wdXNoKGlpKFMpKTtyZXR1cm4ga30oUykpLDImSyYmKGVlLnNxcmVmcz1mdW5jdGlvbiBJYShTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDQpLGs9W107Ty0tID4wOylrLnB1c2go''@;'; put 'put ''U28oUykpO3JldHVybiBrfShTKSksNCZLJiYoZWUuZm9ybXVsYXM9ZnVuY3Rpb24gZnMoUyxPLGspe2Zvcih2YXIgSz1TLnJlYWRfc2hpZnQoNCksZWU9W107Sy0tID4wOyllZS5wdXNoKE51KFMsMCxrKSk7cmV0dXJuIGVlfShTLDAsaykpLDgmSyYmKGVlLnJlbElEPWZ1bmN0aW9uIGx2KFMp''@;'; put 'put ''e3ZhciBPPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PU8/IiI6Uy5yZWFkX3NoaWZ0KE8sInV0ZjE2bGUiKX0oUykpLGVlfShTLDAsayksZWU9Uy5yZWFkX3NoaWZ0KDQpLHNlPXQwKFMpLG1lPXQwKFMpLHBlPXQwKFMpLGJlPXQwKFMpLFBlPShLLmZvcm11bGFzfHxbXSlbMF0sVmU9KEsu''@;'; put 'put ''Zm9ybXVsYXN8fFtdKVsxXSxZZT0xNSZlZSxldD17dDpxRFtZZV0sc3FyZng6Sy5zcXJlZnNbMF0sczpbc2UsbWUscGUsYmVdfTtyZXR1cm4gUGUmJihldC5mMT1QZSksVmUmJihldC5mMj1WZSksMD09WWV8fDM9PVllfHw3PT1ZZXx8KGV0Lm9wPURTW2VlPj4yMCYxNV0pLGV0fX0sMTA1NDp7''@;'; put 'put ''bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3Vw''@;'; put 'put ''cyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3Ontu''@;'; put 'put ''OiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNo''@;'; put 'put ''ZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEw''@;'; put 'put ''Nzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1Ontu''@;'; put 'put ''OiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xp''@;'; put 'put ''Y2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVT''@;'; put 'put ''aVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7''@;'; put 'put ''bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5h''@;'; put 'put ''dGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdp''@;'; put 'put ''blNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''WEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMi''@;'; put 'put ''fSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdp''@;'; put 'put ''blN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25h''@;'; put 'put ''bEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0''@;'; put 'put ''RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGlj''@;'; put 'put ''ZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwx''@;'; put 'put ''MTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0''@;'; put 'put ''In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRl''@;'; put 'put ''cnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVn''@;'; put 'put ''aW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1''@;'; put 'put ''c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0''@;'; put 'put ''RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0Ontu''@;'; put 'put ''OiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIw''@;'; put 'put ''Njc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0''@;'; put 'put ''dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRU''@;'; put 'put ''YWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENh''@;'; put 'put ''Y2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRp''@;'; put 'put ''bWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5U''@;'; put 'put ''aW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0s''@;'; put 'put ''MjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9''@;'; put 'put ''LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwy''@;'; put 'put ''MTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVk''@;'; put 'put ''UHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1''@;'; put 'put ''In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxl''@;'; put 'put ''In0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUi''@;'; put 'put ''fSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZl''@;'; put 'put ''cnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVH''@;'; put 'put ''cm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJC''@;'; put 'put ''cnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sSHo9SWUoTDgsIm4iKTtIei5CcnRGUlRBcmNoSUQkPTE2O3ZhciBLUz17Njp7bjoiRm9ybXVsYSIsZjpRQ30sMTA6e246IkVPRiIsZjpyMn0sMTI6e246IkNhbGNDb3VudCIsZjpFY30sMTM6e246IkNhbGNNb2RlIixmOkVjfSwxNDp7bjoi''@;'; put 'put ''Q2FsY1ByZWNpc2lvbiIsZjp1b30sMTU6e246IkNhbGNSZWZNb2RlIixmOnVvfSwxNjp7bjoiQ2FsY0RlbHRhIixmOlBsfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6dW99LDE4OntuOiJQcm90ZWN0IixmOnVvfSwxOTp7bjoiUGFzc3dvcmQiLGY6RWN9LDIwOntuOiJIZWFkZXIiLGY6SkF9LDIxOntu''@;'; put 'put ''OiJGb290ZXIiLGY6SkF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjpUdn0sMjQ6e246IkxibCIsZjp0Q30sMjU6e246IldpblByb3RlY3QiLGY6dW99LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlv''@;'; put 'put ''biBRQShTLE8sayl7cmV0dXJuIGZ1bmN0aW9uIENvKFMsTyxrKXtpZighKGsuYmlmZjw4KSl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDIpLGVlPVMucmVhZF9zaGlmdCgyKSxzZT1TLnJlYWRfc2hpZnQoMiksbWU9Uy5yZWFkX3NoaWZ0KDIpLHBlPVgwKFMsMCxrKTtyZXR1cm4gay5iaWZmPDgmJlMu''@;'; put 'put ''cmVhZF9zaGlmdCgxKSxbe3I6SyxjOmVlfSxwZSxtZSxzZV19fShTLDAsayl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFRmKFMsTyxrKXtyZXR1cm4gayYmay5iaWZmPDU/KFMubCs9Tyx7Y2VsbDp7cjowLGM6MH19KTooUy5yZWFkX3NoaWZ0KDEpLHtjZWxsOnFpKHtyOlMucmVh''@;'; put 'put ''ZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6dW99LDM1OntuOiJFeHRlcm5OYW1lIixmOmVDfSwzODp7bjoiTGVmdE1hcmdpbiIsZjpQbH0sMzk6e246IlJpZ2h0TWFyZ2luIixmOlBsfSw0MDp7bjoiVG9wTWFyZ2luIixmOlBsfSw0MTp7bjoi''@;'; put 'put ''Qm90dG9tTWFyZ2luIixmOlBsfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6dW99LDQzOntuOiJQcmludEdyaWQiLGY6dW99LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBnQyhTLE8sayl7aWYoay5lbmMpcmV0dXJuIGsuZW5jO3ZhciBLPXtUeXBlOmsuYmlmZj49OD9TLnJlYWRfc2hpZnQo''@;'; put 'put ''Mik6MH07cmV0dXJuIEsuVHlwZT9mdW5jdGlvbiBOdihTLE8sayxLKXt2YXIgZWU9S3x8e307aWYoZWUuSW5mbz1TLnJlYWRfc2hpZnQoMiksUy5sLT0yLDE9PT1lZS5JbmZvKXtpZihlZS5EYXRhPWZ1bmN0aW9uIHRuZShTKXt2YXIgTz17fSxrPU8uRW5jcnlwdGlvblZlcnNpb25JbmZvPVAx''@;'; put 'put ''KFMsNCk7aWYoMSE9ay5NYWpvcnx8MSE9ay5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIray5NYWpvcisiIDogIitrLk1pbm9yO3JldHVybiBPLlNhbHQ9Uy5yZWFkX3NoaWZ0KDE2KSxPLkVuY3J5cHRlZFZlcmlmaWVyPVMucmVhZF9zaGlmdCgxNiksTy5FbmNyeXB0''@;'; put 'put ''ZWRWZXJpZmllckhhc2g9Uy5yZWFkX3NoaWZ0KDE2KSxPfShTKSxrLnBhc3N3b3JkJiZ0eXBlb2YgRzQ8InUiKXt2YXIgc2U9RzQoay5wYXNzd29yZCxlZS5EYXRhLlNhbHQsIjAwMDAwMDAwIiksbWU9U2UoZWUuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitlZS5EYXRhLkVuY3J5cHRlZFZlcmlm''@;'; put 'put ''aWVySGFzaCwiaGV4IikscGU9WGwucmM0KFNlKHNlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksbWUpO0sudmFsaWQ9WGwubWQ1KHBlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20ocGUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksZWUuRGF0YS5LZXk9c2UsSy5pbnNpdHU9ZnVuY3Rp''@;'; put 'put ''b24gcXooUyxPKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxLPTAsZWU9MCxzZT0wLG1lPTA7ZnVuY3Rpb24gcGUoZXQpe2ZvcihLPTAsZWU9MCxzZT0wLG1lPTAsZWU9MDsyNTYhPWVlOysrZWUpa1tlZV09ZWU7Zm9yKHNlPTAsZWU9MDsyNTYhPWVlOysrZWUpe3RyeXtzZT1zZStrW2VlXStldFtl''@;'; put 'put ''ZSVldC5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1fWNhdGNoKGN0KXt0aHJvdyBjb25zb2xlLmxvZyhlZSxldFtlZSVldC5sZW5ndGhdKSxjdH1tZT1rW2VlXSxrW2VlXT1rW3NlXSxrW3NlXT1tZX1lZT1zZT0wfWZ1bmN0aW9uIGJlKGV0KXt2YXIgY3Q9eihldC5sZW5ndGgpO2ZvcihLPTA7''@;'; put 'put ''SyE9ZXQubGVuZ3RoOysrSyltZT1rW2VlPWVlKzEmMjU1XSxrW2VlXT1rW3NlPShzZStrW2VlXSklMjU2XSxrW3NlXT1tZSxjdFtLXT1ldFtLXV5rW2tbZWVdK2tbc2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGN0KX12YXIgUGU9Uy5LZXksVmU9MDtwZShTZShQZSwiaGV4IikudG9TdHJp''@;'; put 'put ''bmcoImJpbmFyeSIpKTt2YXIgWWU9MDtyZXR1cm4gZnVuY3Rpb24oZXQpe2lmKFllK2V0Lmxlbmd0aDwxMDI0KXJldHVybiBZZSs9ZXQubGVuZ3RoLGJlKGV0KTt2YXIgYXQ9MCxidD1TZShldC5zbGljZShhdCxhdCsoRXQ9MTAyNC1ZZSkpKTthdCs9RXQsWWU9MDt2YXIganQ9YmUoYnQpO2Zv''@;'; put 'put ''cihhdD09ZXQubGVuZ3RoJiYoKytWZSxQZT1HNChPLFMuU2FsdCxGOChWZSkpLHBlKFNlKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTthdDxldC5sZW5ndGg7KXsrK1ZlLFBlPUc0KE8sUy5TYWx0LEY4KFZlKSkscGUoQnVmZmVyLmZyb20oUGUsImhleCIpLnRvU3RyaW5nKCJiaW5h''@;'; put 'put ''cnkiKSk7dmFyIEV0PU1hdGgubWluKDEwMjQsZXQubGVuZ3RoLWF0KTtidD1TZShldC5zbGljZShhdCxhdCtFdCkpLGF0Kz1FdCxZZT1FdCxqdD1CdWZmZXIuY29uY2F0KFtqdCxiZShidCldKX1yZXR1cm4ganR9fShlZS5EYXRhLGsucGFzc3dvcmQpfX1lbHNlIGlmKGVlLkRhdGE9ZnVuY3Rp''@;'; put 'put ''b24gRnYoUyxPKXt2YXIgaz17fSxLPWsuRW5jcnlwdGlvblZlcnNpb25JbmZvPVAxKFMsNCk7aWYoTy09NCwyIT1LLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIitLLk1pbm9yKTtpZihLLk1ham9yPjR8fEsuTWFqb3I8Mil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrSy5NYWpvcik7ay5GbGFncz1TLnJlYWRfc2hpZnQoNCksTy09NDt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPLT00LGsuRW5jcnlwdGlvbkhlYWRlcj1JVihTLGVlKSxrLkVuY3J5cHRpb25WZXJpZmll''@;'; put 'put ''cj1QdihTLE8tPWVlKSxrfShTLE8pLGVlLkRhdGEmJmVlLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1lZS5EYXRhLkVuY3J5cHRpb25IZWFkZXIuQWxnSUQmJmsucGFzc3dvcmQmJnR5cGVvZiAkNDwidSIpe3ZhciBiZT0kNChrLnBhc3N3b3JkLGVlLkRhdGEuRW5jcnlwdGlvblZl''@;'; put 'put ''cmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLFBlPWVlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1QZXx8UGU8YmUubGVuZ3RoJiYoYmU9YmUuc2xpY2UoMCxQZSkpO3ZhciBWZT1TZShlZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmll''@;'; put 'put ''ci50b1N0cmluZygiaGV4IikrZWUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksWWU9WGwucmM0KGJlLnRvU3RyaW5nKCJiaW5hcnkiKSxWZSk7Sy52YWxpZD1tYyhZZS5zbGljZSgwLFBlKSwiU0hBMSIpLnRvU3RyaW5nKCJoZXgi''@;'; put 'put ''KT09WWUuc2xpY2UoUGUpLnRvU3RyaW5nKCJoZXgiKSxlZS5EYXRhLktleT1iZSxLLnZhbGlkJiYoSy5pbnNpdHU9ZnVuY3Rpb24gdHJlKFMsTyl7dmFyIGs9bmV3IEFycmF5KDI1NiksSz0wLGVlPTAsc2U9MCxtZT0wLHBlPVMuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+MztmdW5jdGlv''@;'; put 'put ''biBiZShjdCl7Zm9yKGN0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKDAscGUpKSxLPTAsZWU9MCxzZT0wLG1lPTAsZWU9MDsyNTYhPWVlOysrZWUpa1tlZV09ZWU7Zm9yKHNlPTAsZWU9MDsyNTYhPWVlOysrZWUpe3ZhciBFdD1jdFtlZSVjdC5sZW5ndGhdO3NlPXNlK2tbZWVdKygic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIEV0P0V0LmNoYXJDb2RlQXQoMCk6RXQpJjI1NSxtZT1rW2VlXSxrW2VlXT1rW3NlXSxrW3NlXT1tZX1lZT1zZT0wfWZ1bmN0aW9uIFBlKGN0KXt2YXIgRXQ9eihjdC5sZW5ndGgpO2ZvcihLPTA7SyE9Y3QubGVuZ3RoOysrSyltZT1rW2VlPWVlKzEmMjU1XSxrW2VlXT1rW3NlPShz''@;'; put 'put ''ZStrW2VlXSklMjU2XSxrW3NlXT1tZSxFdFtLXT1jdFtLXV5rW2tbZWVdK2tbc2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKEV0KX12YXIgVmU9Uy5LZXksWWU9MDtiZShTZShWZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgZXQ9MDtyZXR1cm4gZnVuY3Rpb24oY3Qpe2lmKGV0''@;'; put 'put ''K2N0Lmxlbmd0aDwxMDI0KXJldHVybiBldCs9Y3QubGVuZ3RoLFBlKGN0KTt2YXIgYXQ9MTAyNC1ldCxidD0wLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K2F0KSk7YnQrPWF0LGV0PTA7dmFyIGt0PVBlKGp0KTtmb3IoYnQ9PWN0Lmxlbmd0aCYmKCsrWWUsVmU9JDQoTyxTLkVuY3J5''@;'; put 'put ''cHRpb25WZXJpZmllci5TYWx0LEY4KFllKSksYmUoQnVmZmVyLmZyb20oVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGN0Lmxlbmd0aDspKytZZSxWZT0kNChPLFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsRjgoWWUpKSxiZShCdWZmZXIuZnJvbShWZSwiaGV4IikudG9TdHJp''@;'; put 'put ''bmcoImJpbmFyeSIpKSxhdD1NYXRoLm1pbigxMDI0LGN0Lmxlbmd0aC1idCksanQ9QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrYXQpKSxidCs9YXQsYXQ8MTAyNCYmKGV0PWF0KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxQZShqdCldKTtyZXR1cm4ga3R9fShlZS5EYXRhLGsucGFzc3dvcmQp''@;'; put 'put ''KX1yZXR1cm4gZWV9KFMsTy0yLGssSyk6ZnVuY3Rpb24gT1YoUyxPLGssSyl7dmFyIGVlPXtrZXk6RWMoUyksdmVyaWZpY2F0aW9uQnl0ZXM6RWMoUyl9O2sucGFzc3dvcmQmJihlZS52ZXJpZmllcj1IdihrLnBhc3N3b3JkKSksSy52YWxpZD1lZS52ZXJpZmljYXRpb25CeXRlcz09PWVlLnZl''@;'; put 'put ''cmlmaWVyLEsudmFsaWQmJihLLmluc2l0dT1mdW5jdGlvbihTLE8pe3ZhciBrPU98fDAsSz1wQyhTKTtyZXR1cm4gZnVuY3Rpb24oZWUpe3ZhciBzZT1mdW5jdGlvbihTLE8sayxLLGVlKXt2YXIgc2UsbWU7Zm9yKGVlfHwoZWU9TyksS3x8KEs9cEMoIiIpKSxzZT0wO3NlIT1PLmxlbmd0aDsr''@;'; put 'put ''K3NlKW1lPTI1NSYoKG1lPU9bc2VdKT4+NXxtZTw8MyksZWVbc2VdPW1lXj1LW2tdLGs9aysxJjE1O3JldHVybltlZSxrLEtdfSgwLGVlLGssSyk7cmV0dXJuIGs9c2VbMV0sc2VbMF19fShrLnBhc3N3b3JkLDApKX0oUywwLGssSyksS319LDQ5OntuOiJGb250IixmOmZ1bmN0aW9uIEdBKFMs''@;'; put 'put ''TyxrKXt2YXIgSz17c3o6Uy5yZWFkX3NoaWZ0KDIpLzIwfSxlZT1PdyhTKTtlZS5mQm9sZCYmKEsuYm9sZD0xKSxlZS5mSXRhbGljJiYoSy5pdGFsaWM9MSksZWUuZlVuZGVybGluZSYmKEsudW5kZXJsaW5lPTEpLGVlLmZDb25kZW5zZSYmKEsuY29uZGVuc2U9MSksZWUuZkV4dGVuZCYmKEsu''@;'; put 'put ''ZXh0ZW5kPTEpLGVlLmZTaGFkb3cmJihLLnNoYWRvdz0xKSxlZS5mT3V0bGluZSYmKEsub3V0bGluZT0xKSxlZS5mU3RyaWtlb3V0JiYoSy5zdHJpa2U9MSk7dmFyIHNlPWsmJmsuYmlmZnx8ODtpZigyIT1zZSYmKEsuaWN2PVMucmVhZF9zaGlmdCgyKSwzIT1zZSYmNCE9c2UpKXtzd2l0Y2go''@;'; put 'put ''NzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoSy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOksudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOksudmFsaWduPSJzdWIifXZhciBwZT1TLnJlYWRfc2hpZnQoMSk7MCE9cGUmJihLLnVuZGVybGluZT1wZSk7dmFyIGJlPVMucmVhZF9z''@;'; put 'put ''aGlmdCgxKTtiZT4wJiYoSy5mYW1pbHk9YmUpO3ZhciBQZT1TLnJlYWRfc2hpZnQoMSk7UGU+MCYmKEsuY2hhcnNldD1QZSksUy5sKz0xfXJldHVybiBLLm5hbWU9VWEoUywwLGspLEt9fSw1MTp7bjoiUHJpbnRTaXplIixmOkVjfSw2MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIs''@;'; put 'put ''ZjpmdW5jdGlvbiAkdGUoUyl7cmV0dXJue1BvczpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRGltOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxGbGFnczpTLnJlYWRfc2hpZnQoMiksQ3VyVGFiOlMucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjpTLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksU2VsZWN0ZWQ6Uy5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOlMucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOnVvfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBZQShTLE8sayl7aWYoayYmay5iaWZmPDUpcmV0dXJue307dmFyIEs9e307cmV0dXJuIEsueD1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksSy55PVMucmVhZF9zaGlmdCgyKSxLLnJ3VG9wPVMucmVhZF9zaGlmdCgyKSxLLmNvbExlZnQ9Uy5yZWFkX3NoaWZ0KDIpLEsucG5uQWNjdD1TLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLEt9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6RWN9LDc3OntuOiJQbHMiLGY6SW59''@;'; put 'put ''LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6RWN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIEt3KFMsTyxrKXtp''@;'; put 'put ''ZihrLmVuYylyZXR1cm4gUy5sKz1PLCIiO3ZhciBLPVMubCxlZT1YMChTLDAsayk7cmV0dXJuIFMucmVhZF9zaGlmdChPK0stUy5sKSxlZX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gZFYoUyxPLGspe2lmKGsmJmsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiB0ayhTLE8sayl7Uy5sKz00O3Zh''@;'; put 'put ''ciBLPVMucmVhZF9zaGlmdCgyKSxlZT1TLnJlYWRfc2hpZnQoMiksc2U9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9Njt2YXIgbWU9W107cmV0dXJuIG1lLnB1c2goKGVrW0tdfHxJbiko''@;'; put 'put ''UyxPLT0zNixrKSkse2NtbzpbZWUsSyxzZV0sZnQ6bWV9fShTLE8sayk7dmFyIEs9eTUoUyksZWU9ZnVuY3Rpb24gSjAoUyxPLGspe2Zvcih2YXIgSz1TLmwrTyxlZT1bXTtTLmw8Szspe3ZhciBzZT1TLnJlYWRfc2hpZnQoMik7Uy5sLT0yO3RyeXtlZVtzZV09RWZbc2VdKFMsSy1TLmwpfWNh''@;'; put 'put ''dGNoe3JldHVybiBTLmw9SyxlZX19cmV0dXJuIFMubCE9SyYmKFMubD1LKSxlZX0oUyxPLTIyKTtyZXR1cm57Y21vOkssZnQ6ZWV9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOnVvfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJP''@;'; put 'put ''YmpQcm90ZWN0IixmOnVvfSwxMjU6e246IkNvbEluZm8iLGY6ckN9LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBzVihTKXtTLmwrPTQ7dmFyIE89W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildO2lmKDAhPT1PWzBdJiZPWzBdLS0sMCE9PU9bMV0mJk9bMV0tLSxPWzBdPjd8fE9b''@;'; put 'put ''MV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK08uam9pbigifCIpKTtyZXR1cm4gT319LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIEV2KFMsTyxrKXt2YXIgSz1rJiY4PT1rLmJpZmZ8fDI9PU8/Uy5yZWFkX3NoaWZ0KDIpOihTLmwrPU8sMCk7cmV0dXJue2ZEaWFsb2c6''@;'; put 'put ''MTYmSyxmQmVsb3c6NjQmSyxmUmlnaHQ6MTI4Jkt9fX0sMTMwOntuOiJHcmlkU2V0IixmOkVjfSwxMzE6e246IkhDZW50ZXIiLGY6dW99LDEzMjp7bjoiVkNlbnRlciIsZjp1b30sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBaNihTLE8sayl7dmFyIEs9Uy5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LGVlPTMmUy5yZWFkX3NoaWZ0KDEpLHNlPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goc2Upe2Nhc2UgMDpzZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6c2U9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpzZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OnNlPSJWQkFNb2R1bGUifXZhciBt''@;'; put 'put ''ZT1VYShTLDAsayk7cmV0dXJuIDA9PT1tZS5sZW5ndGgmJihtZT0iU2hlZXQxIikse3BvczpLLGhzOmVlLGR0OnNlLG5hbWU6bWV9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gbVYoUyl7dmFyIGssTz1bMCwwXTtyZXR1cm4gaz1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksT1swXT1ENltrXXx8ayxrPVMucmVhZF9zaGlmdCgyKSxPWzFdPUQ2W2tdfHxrLE99fSwxNDE6e246IkhpZGVPYmoiLGY6RWN9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiB3dChTKXtmb3IodmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9W107Ty0t''@;'; put 'put ''ID4wOylrLnB1c2godWQoUykpO3JldHVybiBrfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6RWN9LDE1Nzp7bjoiQXV0''@;'; put 'put ''b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpua30sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBoMihTLE8pe3ZhciBrPXt9O3JldHVybiBPPDMyfHwoUy5sKz0xNixrLmhlYWRlcj1QbChTKSxrLmZvb3Rlcj1QbChTKSxTLmwrPTIpLGt9fSwxNzQ6''@;'; put 'put ''e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0s''@;'; put 'put ''MTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBvVihTLE8pe2Zvcih2YXIgaz1TLmwrTy0yLEs9Uy5yZWFkX3NoaWZ0KDIpLGVlPVMucmVhZF9zaGlmdCgyKSxzZT1bXTtTLmw8azspc2UucHVzaCh3byhTKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2''@;'; put 'put ''YXIgbWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKHNlLmxlbmd0aCE9bWUtZWUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkssYzplZSxDOm1lLHJrcmVjOnNlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gWHRlKFMsTyl7Zm9yKHZhciBr''@;'; put 'put ''PVMubCtPLTIsSz1TLnJlYWRfc2hpZnQoMiksZWU9Uy5yZWFkX3NoaWZ0KDIpLHNlPVtdO1MubDxrOylzZS5wdXNoKFMucmVhZF9zaGlmdCgyKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgbWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKHNlLmxl''@;'; put 'put ''bmd0aCE9bWUtZWUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkssYzplZSxDOm1lLGl4ZmU6c2V9fX0sMTkzOntuOiJNbXMiLGY6cjJ9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hGREIifSwyMDA6e246IlNY''@;'; put 'put ''REJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOnVvfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246IlNYVEJSR0lJVE0ifSwy''@;'; put 'put ''MTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOkVjfSwyMjA6e246IkRiT3JQYXJhbVFyeSJ9LDIyMTp7bjoiU2Nl''@;'; put 'put ''bmFyaW9Qcm90ZWN0IixmOnVvfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIEp3KFMsTyxrKXt2YXIgSz17fTtyZXR1cm4gSy5pZm50PVMucmVhZF9zaGlmdCgyKSxLLm51bUZtdElkPVMucmVhZF9zaGlmdCgyKSxLLmZsYWdzPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxLLmZTdHlsZT1LLmZsYWdzPj4yJjEsSy5kYXRhPWZ1bmN0aW9uIENsKFMsTyxrLEspe3ZhciBlZT17fSxzZT1TLnJlYWRfc2hpZnQoNCksbWU9Uy5yZWFkX3NoaWZ0KDQpLHBlPVMucmVhZF9zaGlmdCg0KSxiZT1TLnJlYWRfc2hpZnQoMik7aWYoZWUucGF0dGVyblR5cGU9aHZbcGU+PjI2''@;'; put 'put ''XSwhSy5jZWxsU3R5bGVzKXJldHVybiBlZTt2YXIgUGU9NyZzZTtzd2l0Y2goUGUpe2Nhc2UgMTplZS5oYWxpZ249ImxlZnQiO2JyZWFrO2Nhc2UgMjplZS5oYWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOmVlLmhhbGlnbj0icmlnaHQifXN3aXRjaChlZS5mV3JhcD1zZT4+MyYxLFBlPXNl''@;'; put 'put ''Pj40Jjcpe2Nhc2UgMDplZS52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOmVlLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6ZWUudmFsaWduPSJib3R0b20ifXJldHVybiBlZS5mSnVzdExhc3Q9c2U+PjcmMSxlZS50cm90PXNlPj44JjI1NSxlZS5jSW5kZW50PXNlPj4xNiYxNSxlZS5m''@;'; put 'put ''U2hyaW5rVG9GaXQ9c2U+PjIwJjEsZWUuaVJlYWRPcmRlcj1zZT4+MjImMixlZS5mQXRyTnVtPXNlPj4yNiYxLGVlLmZBdHJGbnQ9c2U+PjI3JjEsZWUuZkF0ckFsYz1zZT4+MjgmMSxlZS5mQXRyQmRyPXNlPj4yOSYxLGVlLmZBdHJQYXQ9c2U+PjMwJjEsZWUuZkF0clByb3Q9c2U+PjMxJjEs''@;'; put 'put ''ZWUuZGdMZWZ0PTE1Jm1lLGVlLmRnUmlnaHQ9bWU+PjQmMTUsZWUuZGdUb3A9bWU+PjgmMTUsZWUuZGdCb3R0b209bWU+PjEyJjE1LGVlLmljdkxlZnQ9bWU+PjE2JjEyNyxlZS5pY3ZSaWdodD1tZT4+MjMmMTI3LGVlLmdyYml0RGlhZz1tZT4+MzAmMyxlZS5pY3ZUb3A9MTI3JnBlLGVlLmlj''@;'; put 'put ''dkJvdHRvbT1wZT4+NyYxMjcsZWUuaWN2RGlhZz1wZT4+MTQmMTI3LGVlLmRnRGlhZz1wZT4+MjEmMTUsZWUuaWN2Rm9yZT0xMjcmYmUsZWUuaWN2QmFjaz1iZT4+NyYxMjcsZWUuZnN4QnV0dG9uPWJlPj4xNCYxLGVlfShTLDAsMCxrKSxLfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gJHcoUyxPKXtyZXR1cm4gMD09PU98fFMucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6cjJ9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBKdGUoUyxPKXtmb3IodmFyIGs9W10sSz1TLnJlYWRfc2hpZnQoMik7''@;'; put 'put ''Sy0tOylrLnB1c2goczIoUykpO3JldHVybiBrfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0''@;'; put 'put ''MTp7bjoiU1hFeCJ9LDI0Mjp7bjoiU3hGaWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixm''@;'; put 'put ''OmZ1bmN0aW9uIFc2KFMsTyl7Zm9yKHZhciBrPVMubCtPLEs9Uy5yZWFkX3NoaWZ0KDQpLGVlPVMucmVhZF9zaGlmdCg0KSxzZT1bXSxtZT0wO21lIT1lZSYmUy5sPGs7KyttZSlzZS5wdXNoKGZjKFMpKTtyZXR1cm4gc2UuQ291bnQ9SyxzZS5VbmlxdWU9ZWUsc2V9fSwyNTM6e246IkxhYmVs''@;'; put 'put ''U3N0IixmOmZ1bmN0aW9uIHJWKFMpe3ZhciBPPXcwKFMpO3JldHVybiBPLmlzc3Q9Uy5yZWFkX3NoaWZ0KDQpLE99fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBDZShTLE8pe3ZhciBrPXt9O3JldHVybiBrLmRzc3Q9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9Ty0yLGt9fSwyNTY6e246IlNY''@;'; put 'put ''VkRFeCJ9LDI1OTp7bjoiU1hGb3JtdWxhIn0sMjkwOntuOiJTWERCRXgifSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjp3NH0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJTb3J0In0s''@;'; put 'put ''MzIwOntuOiJSUkRNb3ZlIn0sMzMwOntuOiJSUkZvcm1hdCJ9LDMzMTp7bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJbnNEZWxF''@;'; put 'put ''bmQifSwzMzg6e246IlJSRENvbmZsaWN0In0sMzM5OntuOiJSUkREZWZOYW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjp1b30sMzUzOntuOiJEU0YiLGY6cjJ9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0MDM6e246''@;'; put 'put ''IlVzckluZm8ifSw0MDQ6e246IlVzckV4Y2wifSw0MDU6e246IkZpbGVMb2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNWaWV3RW5k''@;'; put 'put ''In0sNDI4OntuOiJSUkRVc2VyVmlldyJ9LDQyOTp7bjoiUXNpIn0sNDMwOntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIGQyKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT1TLnJlYWRfc2hpZnQoMiksc2U9Uy5yZWFkX3NoaWZ0KDIpO2lmKGsuc2JjY2g9c2UsMTAyNT09c2V8fDE0ODQ5PT1zZSlyZXR1''@;'; put 'put ''cm5bc2UsZWVdO2lmKHNlPDF8fHNlPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK3NlKTtmb3IodmFyIG1lPXJjKFMsc2UpLHBlPVtdO0s+Uy5sOylwZS5wdXNoKG51KFMpKTtyZXR1cm5bc2UsZWUsbWUscGVdfX0sNDMxOntuOiJQcm90NFJldiIsZjp1''@;'; put 'put ''b30sNDMyOntuOiJDb25kRm10In0sNDMzOntuOiJDRiJ9LDQzNDp7bjoiRFZhbCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIF81KFMsTyxrKXt2YXIgSz1TLmwsZWU9IiIsc2U9LTE7dHJ5e1MubCs9NCwtMT09WzAsNSw3LDExLDEyLDE0XS5pbmRleE9mKChr''@;'; put 'put ''Lmxhc3RvYmp8fHtjbW86WzAsMF19KS5jbW9bMV0pP1MubCs9NjpmdW5jdGlvbiBwYyhTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMSk7Uy5sKys7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mn0oUyk7dmFyIGJlPVMucmVhZF9zaGlmdCgyKTtTLnJlYWRfc2hpZnQoMiksc2U9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpO3ZhciBWZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz1WZTtmb3IodmFyIFllPTE7WWU8Uy5sZW5zLmxlbmd0aC0xOysrWWUpe2lmKFMubC1LIT1TLmxlbnNbWWVdKXRocm93IG5ldyBFcnJvcigiVHhPOiBiYWQgY29udGludWUgcmVjb3JkIik7dmFyIGV0PVNbUy5sXTtpZigoZWUrPXJj''@;'; put 'put ''KFMsUy5sZW5zW1llKzFdLVMubGVuc1tZZV0tMSkpLmxlbmd0aD49KGV0P2JlOjIqYmUpKWJyZWFrfWlmKGVlLmxlbmd0aCE9PWJlJiZlZS5sZW5ndGghPT0yKmJlKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitiZSsiICE9ICIrZWUubGVuZ3RoKTtyZXR1cm4gUy5sPUsrTyx7dDplZSxp''@;'; put 'put ''Zm50OnNlfX1jYXRjaHtyZXR1cm4gUy5sPUsrTyx7dDplZSxpZm50OnNlfX19fSw0Mzk6e246IlJlZnJlc2hBbGwiLGY6dW99LDQ0MDp7bjoiSExpbmsiLGY6ZnVuY3Rpb24gaFYoUyxPKXt2YXIgaz1zMihTKTtTLmwrPTE2O3ZhciBLPWZ1bmN0aW9uIFpsKFMsTyl7dmFyIGs9Uy5sK08sSz1T''@;'; put 'put ''LnJlYWRfc2hpZnQoNCk7aWYoMiE9PUspdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIitLKTt2YXIgZWU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjt2YXIgc2UsbWUscGUsYmUsVmUsWWUsUGU9IiI7MTYmZWUmJihzZT1DNChTKSksMTI4JmVlJiYobWU9QzQo''@;'; put 'put ''UykpLCEoMjU3Jn5lZSkmJihwZT1DNChTKSksMT09KDI1NyZlZSkmJihiZT1mdW5jdGlvbiBTZihTLE8pe3ZhciBrPVMucmVhZF9zaGlmdCgxNik7c3dpdGNoKGspe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBMMShTKXt2YXIgTz1TLnJl''@;'; put 'put ''YWRfc2hpZnQoNCksaz1TLmwsSz0hMTtPPjI0JiYoUy5sKz1PLTI0LCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2MyI9PT1TLnJlYWRfc2hpZnQoMTYpJiYoSz0hMCksUy5sPWspO3ZhciBlZT1TLnJlYWRfc2hpZnQoKEs/Ty0yNDpPKT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwi''@;'; put 'put ''Iik7cmV0dXJuIEsmJihTLmwrPTI0KSxlZX0oUyk7Y2FzZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIHlvKFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz0iIjtPLS0gPjA7KWsrPSIuLi8iO3ZhciBLPVMucmVhZF9zaGlmdCgwLCJscHN0''@;'; put 'put ''ci1hbnNpIik7aWYoUy5sKz0yLDU3MDA1IT1TLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09Uy5yZWFkX3NoaWZ0KDQpKXJldHVybiBrK0sucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBzZT1TLnJlYWRfc2hpZnQoNCk7aWYoMyE9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIGsrUy5yZWFkX3NoaWZ0KHNlPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKX0oUyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitrKX19KFMpKSw4JmVlJiYo''@;'; put 'put ''UGU9QzQoUykpLDMyJmVlJiYoVmU9Uy5yZWFkX3NoaWZ0KDE2KSksNjQmZWUmJihZZT1IMyhTKSksUy5sPWs7dmFyIGV0PW1lfHxwZXx8YmV8fCIiO2V0JiZQZSYmKGV0Kz0iIyIrUGUpLGV0fHwoZXQ9IiMiK1BlKSwyJmVlJiYiLyI9PWV0LmNoYXJBdCgwKSYmIi8iIT1ldC5jaGFyQXQoMSkm''@;'; put 'put ''JihldD0iZmlsZTovLyIrZXQpO3ZhciBjdD17VGFyZ2V0OmV0fTtyZXR1cm4gVmUmJihjdC5ndWlkPVZlKSxZZSYmKGN0LnRpbWU9WWUpLHNlJiYoY3QuVG9vbHRpcD1zZSksY3R9KFMsTy0yNCk7cmV0dXJuW2ssS119fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6bnV9LDQ0''@;'; put 'put ''Mzp7bjoiU1hGREJUeXBlIn0sNDQ0OntuOiJQcm90NFJldlBhc3MiLGY6RWN9LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6cjJ9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gZGQoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxT''@;'; put 'put ''LnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixmOnIyfSw1MTI6e246IkRpbWVuc2lvbnMiLGY6WHd9LDUxMzp7bjoiQmxhbmsiLGY6UXRlfSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBsVihTLE8sayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01KTt2''@;'; put 'put ''YXIgSz13MChTKSxlZT1QbChTKTtyZXR1cm4gSy52YWw9ZWUsS319LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gS0EoUyxPLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIGVlPXcwKFMpOzI9PWsuYmlmZiYmUy5sKys7dmFyIHNlPW51KFMsMCxrKTtyZXR1cm4g''@;'; put 'put ''ZWUudmFsPXNlLGVlfX0sNTE3OntuOiJCb29sRXJyIixmOkU0fSw1MTk6e246IlN0cmluZyIsZjpPMH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gS2UoUyl7dmFyIE89e307Ty5yPVMucmVhZF9zaGlmdCgyKSxPLmM9Uy5yZWFkX3NoaWZ0KDIpLE8uY250PVMucmVhZF9zaGlmdCgyKS1PLmM7''@;'; put 'put ''dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NDt2YXIgSz1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBlZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIE8uaXhmZT00MDk1JmVlLDcmSyYmKE8ubGV2ZWw9NyZLKSwzMiZLJiYoTy5oaWRkZW49ITApLDY0JksmJihPLmhwdD1rLzIwKSxPfX0s''@;'; put 'put ''NTIzOntuOiJJbmRleCJ9LDU0NTp7bjoiQXJyYXkiLGY6a3Z9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpjMn0sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBxdGUoUyxPLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPDUpcmV0dXJue307dmFyIEs9''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntSVEw6NjQmSyxncmlkOiEhKDImSyksZnJvemVuOiEhKDgmSyl9fX0sNjM4OntuOiJSSyIsZjpmdW5jdGlvbiBYQShTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksSz13byhTKTtyZXR1cm57cjpPLGM6ayxpeGZlOktbMF0s''@;'; put 'put ''cmtudW06S1sxXX19fSw2NTk6e246IlN0eWxlIixmOmZ1bmN0aW9uIEwwKFMsTyxrKXtyZXR1cm4gUy5sKz1PLHt9fX0sMTA0ODp7bjoiQmlnTmFtZSJ9LDEwNTQ6e246IkZvcm1hdCIsZjpmdW5jdGlvbiBxdyhTLE8sayl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxYMChTLDAsayldfX0sMTA4''@;'; put 'put ''NDp7bjoiQ29udGludWVCaWdOYW1lIn0sMTIxMjp7bjoiU2hyRm1sYSIsZjpmdW5jdGlvbiBBdihTLE8sayl7dmFyIEs9TTQoUyk7Uy5sKys7dmFyIGVlPVMucmVhZF9zaGlmdCgxKTtyZXR1cm5bSzMoUyxPLT04LGspLGVlLEtdfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9u''@;'; put 'put ''IHBWKFMsTyl7Uy5yZWFkX3NoaWZ0KDIpO3ZhciBrPXMyKFMpLEs9Uy5yZWFkX3NoaWZ0KChPLTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bayxLPUsucmVwbGFjZShFLCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwy''@;'; put 'put ''MDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0sMjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOlZjfSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgi''@;'; put 'put ''fSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBl''@;'; put 'put ''ciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFy''@;'; put 'put ''dEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOnIyfSwyMTUyOntuOiJG''@;'; put 'put ''ZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVG''@;'; put 'put ''cnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVhdHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiB1bChTKXtTLmwrPTI7dmFyIE89e2N4''@;'; put 'put ''ZnM6MCxjcmM6MH07cmV0dXJuIE8uY3hmcz1TLnJlYWRfc2hpZnQoMiksTy5jcmM9Uy5yZWFkX3NoaWZ0KDQpLE99LHI6MTJ9LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIHNCKFMsTyl7Uy5sKz0yO3ZhciBLPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7Zm9yKHZhciBlZT1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMiksc2U9W107ZWUtLSA+MDspc2UucHVzaCgkdihTKSk7cmV0dXJue2l4ZmU6SyxleHQ6c2V9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1''@;'; put 'put ''cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOnVvLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwy''@;'; put 'put ''MTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5jdGlvbiBHNihTLE8sayl7aWYoIShrLmJpZmY8OCkpe3ZhciBLPVMucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxlZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuW3JjKFMsSyxrKSxyYyhTLGVlLGspXX1TLmwrPU99LHI6MTJ9LDIxOTc6e246IlNvcnREYXRhIn0sMjE5ODp7bjoiVGhlbWUiLGY6ZnVuY3Rpb24gYUIoUyxPLGspe3ZhciBLPVMubCtPO2lmKDEyNDIyNiE9PVMucmVhZF9zaGlmdCg0KSl7''@;'; put 'put ''aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gdm9pZChTLmw9Syk7dmFyIG1lLHNlPVMuc2xpY2UoUy5sKTtTLmw9Szt0cnl7bWU9dW4oc2Use3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgcGU9bnIobWUsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZihwZSlyZXR1cm4gRUMo''@;'; put 'put ''cGUsayl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwyMjAxOntuOiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1UUlNldHRpbmdzIixmOmZ1bmN0aW9uIFQ0KFMpe3JldHVyblswIT09Uy5yZWFkX3NoaWZ0KDQpLDAhPT1TLnJlYWRfc2hpZnQoNCks''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjpyMn0sMjIwNDp7bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoiQ3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZydCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJGb3Jj''@;'; put 'put ''ZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBJdChTKXt2YXIgTz1mdW5jdGlvbiBvMihTKXt2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9OCx7dHlwZTpPLGZsYWdzOmt9fShTKTtpZigyMjExIT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJ''@;'; put 'put ''bnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitPLnR5cGUpO3JldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpfX0sMjIxMjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIyMTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJBIn0s''@;'; put 'put ''NDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6e246IkRhdGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9ybWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0sNDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9LDQx''@;'; put 'put ''MDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hhcnRGb3JtYXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFyIn0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246IkFy''@;'; put 'put ''ZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMifSw0MTI2OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVSYW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0sNDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEzMjp7''@;'; put 'put ''bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6RWN9LDQxMzU6e246Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFtZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoiRW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNkIn0s''@;'; put 'put ''NDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6e246IlN1cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoiTGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVuY3Rp''@;'; put 'put ''b24gYUMoUyxPLGspe3ZhciBLPXthcmVhOiExfTtpZig1IT1rLmJpZmYpcmV0dXJuIFMubCs9TyxLO3ZhciBlZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9MywxNiZlZSYmKEsuYXJlYT0hMCksS319LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4Ontu''@;'; put 'put ''OiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0''@;'; put 'put ''Q2xpZW50IixmOmZ1bmN0aW9uIGxzKFMpe2Zvcih2YXIgTz1TLnJlYWRfc2hpZnQoMiksaz1bXTtPLS0gPjA7KWsucHVzaCh1ZChTKSk7cmV0dXJuIGt9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3Ai''@;'; put 'put ''fSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6WHd9LDE6e246''@;'; put 'put ''IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIsZjpmdW5jdGlvbiBiVihTKXt2YXIgTz13MChTKTsrK1MubDt2YXIgaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIE8udD0ibiIsTy52YWw9ayxPfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24geVYoUyl7dmFyIE89dzAoUyk7KytTLmw7''@;'; put 'put ''dmFyIGs9UGwoUyk7cmV0dXJuIE8udD0ibiIsTy52YWw9ayxPfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gQWYoUyxPLGspe2suYmlmZmd1ZXNzJiY1PT1rLmJpZmYmJihrLmJpZmY9Mik7dmFyIEs9dzAoUyk7KytTLmw7dmFyIGVlPVgwKFMsMCxrKTtyZXR1cm4gSy50PSJzdHIiLEsu''@;'; put 'put ''dmFsPWVlLEt9fSw1OntuOiJCb29sRXJyIixmOkU0fSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gb0MoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Tz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChPLCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9G''@;'; put 'put ''IixmOlZjfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6RWN9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjp1Mn0sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntuOiJBcnJheSIsZjprdn0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRl''@;'; put 'put ''ZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIHNDKFMsTyl7Uy5sKz02LFMubCs9MixTLmwrPTEsUy5sKz0zLFMubCs9MSxTLmwrPU8tMTN9fSw2Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJY''@;'; put 'put ''RiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6RWN9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gYWgoUyl7dmFyIE89Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEs9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLGVlPXtmbXQ6TyxlbnY6ayxsZW46SyxkYXRhOlMuc2xpY2UoUy5sLFMubCtLKX07cmV0dXJuIFMubCs9SyxlZX19LDEzNTp7bjoiQWRkaW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5OntuOiJM''@;'; put 'put ''SE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4OntuOiJTaHJGbWxhIn0sMTkxOntuOiJUb29sYmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0OntuOiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0OntuOiJS''@;'; put 'put ''U3RyaW5nIixmOmZ1bmN0aW9uIGxDKFMsTyxrKXt2YXIgSz1TLmwrTyxlZT13MChTKSxzZT1TLnJlYWRfc2hpZnQoMiksbWU9cmMoUyxzZSxrKTtyZXR1cm4gUy5sPUssZWUudD0ic3RyIixlZS52YWw9bWUsZWV9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0Ontu''@;'; put 'put ''OiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpRQ30sNTIxOntuOiJCT0YiLGY6VmN9LDUzNjp7bjoiTGJsIixmOnRDfSw1NDc6e246IkV4dGVybk5hbWUiLGY6ZUN9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246''@;'; put 'put ''IkZvcm11bGEiLGY6UUN9LDEwMzM6e246IkJPRiIsZjpWY30sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntu''@;'; put 'put ''OiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntu''@;'; put 'put ''OiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxxUz1JZShLUywibiIpO2Z1bmN0aW9uIEdpKFMsTyxrLEspe3ZhciBlZT0rT3x8K3FTW09dO2lmKCFpc05hTihlZSkpe3ZhciBzZT1LfHwoa3x8W10pLmxlbmd0aHx8MCxtZT1TLm5leHQoNCk7bWUud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixlZSksbWUud3JpdGVfc2hpZnQoMixzZSksc2U+MCYmQXIoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gQXkoUyxPLGspe3JldHVybiBTfHwoUz15big3KSksUy53cml0ZV9zaGlmdCgyLE8pLFMud3JpdGVfc2hpZnQoMixrKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDApLFN9ZnVuY3Rpb24gWW5lKFMsTyxrLEspe2lmKG51bGwhPU8udilzd2l0Y2goTy50KXtjYXNlImQiOmNhc2UibiI6dmFyIGVlPSJkIj09Ty50P0plKE5lKE8udikpOk8udjtyZXR1cm4gdm9pZChlZT09KDB8ZWUpJiZlZT49MCYmZWU8NjU1MzY/R2koUywyLGZ1bmN0aW9uIF9W''@;'; put 'put ''KFMsTyxrKXt2YXIgSz15big5KTtyZXR1cm4gQXkoSyxTLE8pLEsud3JpdGVfc2hpZnQoMixrKSxLfShrLEssZWUpKTpHaShTLDMsZnVuY3Rpb24gaWsoUyxPLGspe3ZhciBLPXluKDE1KTtyZXR1cm4gQXkoSyxTLE8pLEsud3JpdGVfc2hpZnQoOCxrLCJmIiksS30oayxLLGVlKSkpO2Nhc2Ui''@;'; put 'put ''YiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCBHaShTLDUsZnVuY3Rpb24gWm5lKFMsTyxrLEspe3ZhciBlZT15big5KTtyZXR1cm4gQXkoZWUsUyxPKSxLaShrLEt8fCJiIixlZSksZWV9KGssSyxPLnYsTy50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQgR2koUyw0LGZ1bmN0aW9uIFdu''@;'; put 'put ''ZShTLE8sayl7dmFyIEs9eW4oOCsyKmsubGVuZ3RoKTtyZXR1cm4gQXkoSyxTLE8pLEsud3JpdGVfc2hpZnQoMSxrLmxlbmd0aCksSy53cml0ZV9zaGlmdChrLmxlbmd0aCxrLCJzYmNzIiksSy5sPEsubGVuZ3RoP0suc2xpY2UoMCxLLmwpOkt9KGssSywoTy52fHwiIikuc2xpY2UoMCwyNTUp''@;'; put 'put ''KSl9R2koUywxLEF5KG51bGwsayxLKSl9ZnVuY3Rpb24gWG5lKFMsTyxrLEssZWUpe3ZhciBzZT0xNitsMChlZS5jZWxsWGZzLGVlLmNlbGxTdHlsZVhmcyxPLGVlKTtpZihudWxsIT1PLnZ8fE8uYmYpaWYoTy5iZilHaShTLCJGb3JtdWxhIixmdW5jdGlvbiBCNShTLE8sayxLLGVlKXt2YXIg''@;'; put 'put ''c2U9YTIoTyxrLGVlKSxtZT1mdW5jdGlvbiBKQyhTKXtpZihudWxsPT1TKXt2YXIgTz15big4KTtyZXR1cm4gTy53cml0ZV9zaGlmdCgxLDMpLE8ud3JpdGVfc2hpZnQoMSwwKSxPLndyaXRlX3NoaWZ0KDIsMCksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMiw2NTUzNSksT31y''@;'; put 'put ''ZXR1cm4gT3UoIm51bWJlciI9PXR5cGVvZiBTP1M6MCl9KFMudikscGU9eW4oNik7cGUud3JpdGVfc2hpZnQoMiwzMykscGUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIFBlPXluKFMuYmYubGVuZ3RoKSxWZT0wO1ZlPFMuYmYubGVuZ3RoOysrVmUpUGVbVmVdPVMuYmZbVmVdO3JldHVybiBV''@;'; put 'put ''KFtzZSxtZSxwZSxQZV0pfShPLGssSywwLHNlKSk7ZWxzZSBzd2l0Y2goTy50KXtjYXNlImQiOmNhc2UibiI6R2koUywiTnVtYmVyIixmdW5jdGlvbiBRdyhTLE8sayxLKXt2YXIgZWU9eW4oMTQpO3JldHVybiBhMihTLE8sSyxlZSksT3UoayxlZSksZWV9KGssSywiZCI9PU8udD9KZShOZShP''@;'; put 'put ''LnYpKTpPLnYsc2UpKTticmVhaztjYXNlImIiOmNhc2UiZSI6R2koUyw1MTcsZnVuY3Rpb24gTzEoUyxPLGssSyxlZSxzZSl7dmFyIG1lPXluKDgpO3JldHVybiBhMihTLE8sSyxtZSksS2koayxzZSxtZSksbWV9KGssSyxPLnYsc2UsMCxPLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjpp''@;'; put 'put ''ZihlZS5ib29rU1NUKXt2YXIgcGU9YVMoZWUuU3RyaW5ncyxPLnYsTy5SP08ucj1RcyhPLlIpOm51bGwsZWUucmV2U3RyaW5ncyk7aWYoTy5SKWZvcih2YXIgYmU9MDtiZTxPLlIubGVuZ3RoOysrYmUpTy5SW2JlXS5zJiZsMChlZS5jZWxsWGZzLGVlLmNlbGxTdHlsZVhmcyx7dDoibiIsdjow''@;'; put 'put ''LHM6Ty5SW2JlXS5zfSxlZSk7R2koUywiTGFiZWxTc3QiLGZ1bmN0aW9uICRBKFMsTyxrLEspe3ZhciBlZT15bigxMCk7cmV0dXJuIGEyKFMsTyxLLGVlKSxlZS53cml0ZV9zaGlmdCg0LGspLGVlfShrLEsscGUsc2UpKX1lbHNlIEdpKFMsIkxhYmVsIixmdW5jdGlvbiBpVihTLE8sayxLLGVl''@;'; put 'put ''KXt2YXIgc2U9IWVlfHw4PT1lZS5iaWZmLG1lPXluKCtzZSs4KygxK3NlKSprLmxlbmd0aCk7cmV0dXJuIGEyKFMsTyxLLG1lKSxtZS53cml0ZV9zaGlmdCgyLGsubGVuZ3RoKSxzZSYmbWUud3JpdGVfc2hpZnQoMSwxKSxtZS53cml0ZV9zaGlmdCgoMStzZSkqay5sZW5ndGgsayxzZT8idXRm''@;'; put 'put ''MTZsZSI6InNiY3MiKSxtZX0oayxLLChPLnZ8fCIiKS5zbGljZSgwLDI1NSksc2UsZWUpKTticmVhaztkZWZhdWx0OkdpKFMsIkJsYW5rIixhMihrLEssc2UpKX1lbHNlIEdpKFMsIkJsYW5rIixhMihrLEssc2UpKX1mdW5jdGlvbiBFSShTLE8sayl7dmFyIFZlLEs9eWkoKSxlZT1rLlNoZWV0''@;'; put 'put ''TmFtZXNbU10sc2U9ay5TaGVldHNbZWVdfHx7fSxtZT0oa3x8e30pLldvcmtib29rfHx7fSxwZT0obWUuU2hlZXRzfHxbXSlbU118fHt9LGJlPUFycmF5LmlzQXJyYXkoc2UpLFBlPTg9PU8uYmlmZixZZT0iIixldD1bXSxjdD1vbyhzZVsiIXJlZiJdfHwiQTEiKSxFdD1QZT82NTUzNjoxNjM4''@;'; put 'put ''NDtpZihjdC5lLmM+MjU1fHxjdC5lLnI+PUV0KXtpZihPLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKHNlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO2N0LmUuYz1NYXRoLm1pbihjdC5lLmMsMjU1KSxjdC5lLnI9TWF0aC5taW4oY3Qu''@;'; put 'put ''ZS5jLEV0LTEpfUdpKEssMjA1Nyx4NCgwLDE2LE8pKSxHaShLLCJDYWxjTW9kZSIsYTAoMSkpLEdpKEssIkNhbGNDb3VudCIsYTAoMTAwKSksR2koSywiQ2FsY1JlZk1vZGUiLHR1KCEwKSksR2koSywiQ2FsY0l0ZXIiLHR1KCExKSksR2koSywiQ2FsY0RlbHRhIixPdSguMDAxKSksR2koSywi''@;'; put 'put ''Q2FsY1NhdmVSZWNhbGMiLHR1KCEwKSksR2koSywiUHJpbnRSb3dDb2wiLHR1KCExKSksR2koSywiUHJpbnRHcmlkIix0dSghMSkpLEdpKEssIkdyaWRTZXQiLGEwKDEpKSxHaShLLCJHdXRzIixmdW5jdGlvbiBZNihTKXt2YXIgTz15big4KTtyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDApLE8u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixTWzBdP1NbMF0rMTowKSxPLndyaXRlX3NoaWZ0KDIsU1sxXT9TWzFdKzE6MCksT30oWzAsMF0pKSxHaShLLCJIQ2VudGVyIix0dSghMSkpLEdpKEssIlZDZW50ZXIiLHR1KCExKSk7dmFyIGF0PXNlWyIhcHJpbnQiXSYmc2VbIiFwcmludCJdLm1hcmdpbnN8fHNlWyIh''@;'; put 'put ''bWFyZ2lucyJdO2F0JiYobnVsbCE9YXQubGVmdCYmR2koSywiTGVmdE1hcmdpbiIsT3UoYXQubGVmdCkpLG51bGwhPWF0LnJpZ2h0JiZHaShLLCJSaWdodE1hcmdpbiIsT3UoYXQucmlnaHQpKSxudWxsIT1hdC50b3AmJkdpKEssIlRvcE1hcmdpbiIsT3UoYXQudG9wKSksbnVsbCE9YXQuYm90''@;'; put 'put ''dG9tJiZHaShLLCJCb3R0b21NYXJnaW4iLE91KGF0LmJvdHRvbSkpLChudWxsIT1hdC5oZWFkZXJ8fG51bGwhPWF0LmZvb3RlcikmJkdpKEssIlNldHVwIixmdW5jdGlvbiBpQyhTLE8pe3ZhciBrPXluKDM0KSxLPSExLGVlPTcwO3JldHVybiJsYW5kc2NhcGUiPT0oTy5wcm9wc3x8e30pLm9y''@;'; put 'put ''aWVudGF0aW9uJiYoSz0hMCxlZSY9LTY3KSxLJiYoZWUmPS01KSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLGVlKSxrLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsMCksay53cml0ZV9zaGlmdCgyLDYwMCksay53cml0ZV9zaGlmdCgyLDYwMCksT3UobnVsbD09Uy5oZWFkZXI/LjU6Uy5oZWFkZXIsayksT3UobnVsbD09Uy5mb290ZXI/LjU6Uy5mb290ZXIsayksay53cml0ZV9zaGlmdCgyLDEpLGt9KGF0LHNlWyIhcHJpbnQiXXx8e30pKSksUGUm''@;'; put 'put ''JmZ1bmN0aW9uIFZ6KFMsTyxrKXtpZihPKXt2YXIgSz0wO08uZm9yRWFjaChmdW5jdGlvbihlZSxzZSl7KytLPD0yNTYmJmVlJiYoZWUuYXV0byYmb1MoayxlZSxzZSksR2koUywiQ29sSW5mbyIsZnVuY3Rpb24gJDYoUyxPKXt2YXIgaz15bigxMik7ay53cml0ZV9zaGlmdCgyLE8pLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixPKSxrLndyaXRlX3NoaWZ0KDIsMjU2KlMud2lkdGgpLGsud3JpdGVfc2hpZnQoMiwwKTt2YXIgSz0wO3JldHVybiBTLmhpZGRlbiYmKEt8PTEpLGsud3JpdGVfc2hpZnQoMSxLKSxrLndyaXRlX3NoaWZ0KDEsSz1TLmxldmVsfHwwKSxrLndyaXRlX3NoaWZ0KDIsMCksa30o''@;'; put 'put ''dTgoc2UsZWUpLHNlKSkpfSl9fShLLHNlWyIhY29scyJdLHNlKSxHaShLLCJEaW1lbnNpb25zIixmdW5jdGlvbiBxQShTLE8pe3ZhciBrPTghPU8uYmlmZiYmTy5iaWZmPzI6NCxLPXluKDIqays2KTtyZXR1cm4gSy53cml0ZV9zaGlmdChrLFMucy5yKSxLLndyaXRlX3NoaWZ0KGssUy5lLnIr''@;'; put 'put ''MSksSy53cml0ZV9zaGlmdCgyLFMucy5jKSxLLndyaXRlX3NoaWZ0KDIsUy5lLmMrMSksSy53cml0ZV9zaGlmdCgyLDApLEt9KGN0LE8pKSxQZSYmKHNlWyIhbGlua3MiXT1bXSksc2VbIiFyb3dzIl0mJlBlJiZzZVsiIXJvd3MiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0LFRuKXtmb3IodmFyIHJy''@;'; put 'put ''PWppKFRuKSxTbj0yNTYsbHI9MCxYbj1LdC5zPzE2K2wwKE8uY2VsbFhmcyxPLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6S3Quc30sTyk6MCxCbj1jdC5zLmM7Qm48PWN0LmUuYzsrK0JuKShiZT8oc2VbVG5dfHxbXSlbQm5dOnNlW2V0W0JuXStycl0pJiYoQm48U24mJihTbj1CbiksQm4+''@;'; put 'put ''bHImJihscj1CbikpO2xyPFNuJiYoU249bHI9MCksR2koSywiUm93IixmdW5jdGlvbiBtdChTLE8sayl7dmFyIEs9eW4oMTYpO0sud3JpdGVfc2hpZnQoMixPKSxLLndyaXRlX3NoaWZ0KDIsa1swXSksSy53cml0ZV9zaGlmdCgyLGtbMV0rMSksSy53cml0ZV9zaGlmdCgyLDIwKlMuaHB0fHwy''@;'; put 'put ''MCpVMyhTLmhweCl8fDMzMCksSy53cml0ZV9zaGlmdCg0LDApO3ZhciBlZT0wO3JldHVybiBlZXw9MHxTLmxldmVsLFMuaGlkZGVuJiYoZWV8PTMyKSxlZXw9NjQsa1syXSYmKGVlfD0xMjgpLEsud3JpdGVfc2hpZnQoMSxlZSksSy53cml0ZV9zaGlmdCgxLDEpLEsud3JpdGVfc2hpZnQoMixr''@;'; put 'put ''WzJdfHwwKSxLfShLdCxUbixbU24sbHIsWG5dKSl9KTtmb3IodmFyIGJ0PWN0LnMucjtidDw9Y3QuZS5yOysrYnQpe1llPWppKGJ0KTtmb3IodmFyIGp0PWN0LnMuYztqdDw9Y3QuZS5jOysranQpe2J0PT09Y3Qucy5yJiYoZXRbanRdPVRhKGp0KSksVmU9ZXRbanRdK1llO3ZhciBrdD1iZT8o''@;'; put 'put ''c2VbYnRdfHxbXSlbanRdOnNlW1ZlXTtrdCYmKFhuZShLLGt0LGJ0LGp0LE8pLFBlJiZrdC5sJiZzZVsiIWxpbmtzIl0ucHVzaChbVmUsa3QubF0pKX19dmFyIE90PXBlLkNvZGVOYW1lfHxwZS5uYW1lfHxlZTtyZXR1cm4oUGV8fDU9PU8uYmlmZiYmc2VbIiFmcmVlemUiXSkmJkdpKEssIldp''@;'; put 'put ''bmRvdzIiLGZ1bmN0aW9uIHRWKFMsTyxrLEspe3ZhciBlZT1LJiZLLmJpZmZ8fDgsc2U9eW4oOD09ZWU/MTg6MTApLG1lPTE3MTg7cmV0dXJuIGs+MCYmKG1lJj0tNTEzKSxXdChPWyIhZ3JpZGxpbmVzIl0pJiYobWUmPS0zKSxPWyIhZnJlZXplIl0mJihtZXw9OCksUyYmUy5SVEwmJihtZXw9''@;'; put 'put ''NjQpLDU9PWVlJiYobWU9NDQ2KSxzZS53cml0ZV9zaGlmdCgyLG1lKSw4PT1lZT8oc2Uud3JpdGVfc2hpZnQoNCwwKSxzZS53cml0ZV9zaGlmdCg0LDY0KSxzZS53cml0ZV9zaGlmdCg0LDApLHNlLndyaXRlX3NoaWZ0KDQsMCkpOihzZS53cml0ZV9zaGlmdCg0LDApLHNlLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCkpLHNlfSgobWUuVmlld3N8fFtdKVswXSxzZSxTKSksKFBlfHw1PT1PLmJpZmYpJiZzZVsiIWZyZWV6ZSJdJiZHaShLLCJQYW5lIixmdW5jdGlvbiB3bChTKXsic3RyaW5nIj09dHlwZW9mIFMmJihTPU5vKFMpKTt2YXIgTz15bigxMCk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoMixTLmMp''@;'; put 'put ''LE8ud3JpdGVfc2hpZnQoMixTLnIpLE8ud3JpdGVfc2hpZnQoMixTLnIpLE8ud3JpdGVfc2hpZnQoMixTLmMpLE8ud3JpdGVfc2hpZnQoMSwzKSxPLndyaXRlX3NoaWZ0KDEsMCksT30oc2VbIiFmcmVlemUiXSkpLFBlJiZzZVsiIXNlbCJdJiZHaShLLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIHJr''@;'; put 'put ''KFMsTyl7dmFyIGs9eW4oMTUpLEs9Uy5jZWxsO2lmKCFLKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Sz1xaShNcyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBlZT0ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEs/Tm8oSyk6SztpZihPKXt2YXIgc2U9InN0cmluZyI9PXR5cGVvZiBPP05vKE8pOk87ay53cml0ZV9zaGlmdCgxLGVlLnI+PXNlLnImJmVlLmM+PXNlLmM/MDplZS5yPj1zZS5yJiZlZS5jPHNlLmM/MjplZS5yPHNlLnImJmVlLmM+PXNlLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwzKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLGVlLnIpLGsud3JpdGVfc2hpZnQoMixlZS5jKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIFYzKFMsTyl7T3x8KE89eW4oNikpLE8ud3JpdGVfc2hpZnQoMixTLnM/Uy5zLnI6Uy5yKSxPLndyaXRlX3No''@;'; put 'put ''aWZ0KDIsUy5lP1MuZS5yOlMuciksTy53cml0ZV9zaGlmdCgxLFMucz9TLnMuYzpTLmMpLE8ud3JpdGVfc2hpZnQoMSxTLmU/Uy5lLmM6Uy5jKX0oe3M6ZWUsZTplZX0sayksa30oc2VbIiFzZWwiXSxzZVsiIWZyZWV6ZSJdKSksUGUmJihzZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZHaShL''@;'; put 'put ''LCJNZXJnZUNlbGxzIixmdW5jdGlvbiB1VihTKXt2YXIgTz15bigyKzgqUy5sZW5ndGgpO08ud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spdnUoU1trXSxPKTtyZXR1cm4gT30oc2VbIiFtZXJnZXMiXSkpLFBlJiZmdW5jdGlvbiBPOChTLE8pe2Zv''@;'; put 'put ''cih2YXIgaz0wO2s8T1siIWxpbmtzIl0ubGVuZ3RoOysrayl7dmFyIEs9T1siIWxpbmtzIl1ba107R2koUywiSExpbmsiLGZWKEspKSxLWzFdLlRvb2x0aXAmJkdpKFMsIkhMaW5rVG9vbHRpcCIsZ1YoSykpfWRlbGV0ZSBPWyIhbGlua3MiXX0oSyxzZSksR2koSywiQ29kZU5hbWUiLGNsKE90''@;'; put 'put ''KSksUGUmJmZ1bmN0aW9uIE56KFMsTyl7dmFyIGs9eW4oMTkpO2sud3JpdGVfc2hpZnQoNCwyMTUxKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCg0LDApLEdpKFMsIkZlYXRI''@;'; put 'put ''ZHIiLGspLChrPXluKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUyKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsNCksay53cml0ZV9zaGlmdCgyLDApLHZ1KG9vKE9bIiFyZWYiXXx8IkExIiksayksay53cml0ZV9zaGlmdCg0LDQpLEdpKFMsIkZlYXQiLGspfShLLHNlKSxHaShLLCJFT0YiKSxLLmVuZCgpfWZ1bmN0aW9uIEJ6KFMsTyxrKXt2YXIgSz15aSgpLGVlPShTfHx7fSkuV29ya2Jvb2t8fHt9''@;'; put 'put ''LHNlPWVlLlNoZWV0c3x8W10sbWU9ZWUuV0JQcm9wc3x8e30scGU9OD09ay5iaWZmLGJlPTU9PWsuYmlmZjtHaShLLDIwNTcseDQoMCw1LGspKSwieGxhIj09ay5ib29rVHlwZSYmR2koSywiQWRkaW4iKSxHaShLLCJJbnRlcmZhY2VIZHIiLHBlP2EwKDEyMDApOm51bGwpLEdpKEssIk1tcyIs''@;'; put 'put ''ZnVuY3Rpb24gR3coUyxPKXtPfHwoTz15bihTKSk7Zm9yKHZhciBrPTA7azxTOysraylPLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIE99KDIpKSxiZSYmR2koSywiVG9vbGJhckhkciIpLGJlJiZHaShLLCJUb29sYmFyRW5kIiksR2koSywiSW50ZXJmYWNlRW5kIiksR2koSywiV3JpdGVBY2Nl''@;'; put 'put ''c3MiLGZ1bmN0aW9uIFU2KFMsTyl7dmFyIGs9IU98fDg9PU8uYmlmZixLPXluKGs/MTEyOjU0KTtmb3IoSy53cml0ZV9zaGlmdCg4PT1PLmJpZmY/MjoxLDcpLGsmJksud3JpdGVfc2hpZnQoMSwwKSxLLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxLLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwo''@;'; put 'put ''az8wOjUzNjg3MDkxMikpO0subDxLLmxlbmd0aDspSy53cml0ZV9zaGlmdCgxLGs/MDozMik7cmV0dXJuIEt9KDAsaykpLEdpKEssIkNvZGVQYWdlIixhMChwZT8xMjAwOjEyNTIpKSxwZSYmR2koSywiRFNGIixhMCgwKSkscGUmJkdpKEssIkV4Y2VsOUZpbGUiKSxHaShLLCJSUlRhYklkIixm''@;'; put 'put ''dW5jdGlvbiB2VihTKXtmb3IodmFyIE89eW4oMipTKSxrPTA7azxTOysraylPLndyaXRlX3NoaWZ0KDIsaysxKTtyZXR1cm4gT30oUy5TaGVldE5hbWVzLmxlbmd0aCkpLHBlJiZTLnZiYXJhdyYmR2koSywiT2JQcm9qIikscGUmJlMudmJhcmF3JiZHaShLLCJDb2RlTmFtZSIsY2wobWUuQ29k''@;'; put 'put ''ZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksR2koSywiQnVpbHRJbkZuR3JvdXBDb3VudCIsYTAoMTcpKSxHaShLLCJXaW5Qcm90ZWN0Iix0dSghMSkpLEdpKEssIlByb3RlY3QiLHR1KCExKSksR2koSywiUGFzc3dvcmQiLGEwKDApKSxwZSYmR2koSywiUHJvdDRSZXYiLHR1KCExKSkscGUmJkdp''@;'; put 'put ''KEssIlByb3Q0UmV2UGFzcyIsYTAoMCkpLEdpKEssIldpbmRvdzEiLGZ1bmN0aW9uIEt0ZSgpe3ZhciBTPXluKDE4KTtyZXR1cm4gUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMjkyODApLFMud3JpdGVfc2hpZnQoMiwxNzYwMCksUy53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDU2KSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsNTAwKSxTfSgpKSxHaShLLCJCYWNrdXAiLHR1KCExKSksR2koSywiSGlkZU9iaiIsYTAoMCkpLEdpKEssIkRhdGUxOTA0Iix0dSgidHJ1''@;'; put 'put ''ZSI9PWZ1bmN0aW9uIEZTKFMpe3JldHVybiBTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHMmJnRpKFMuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KFMpKSksR2koSywiQ2FsY1ByZWNpc2lvbiIsdHUoITApKSxwZSYmR2koSywiUmVmcmVzaEFsbCIsdHUo''@;'; put 'put ''ITEpKSxHaShLLCJCb29rQm9vbCIsYTAoMCkpLHIwPUk2KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIEtuZShTLE8sayl7''@;'; put 'put ''KCgoT3x8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEyLGNvbG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihLKXtHaShTLCJGb250IixmdW5jdGlvbiBuVihTLE8pe3ZhciBrPVMubmFtZXx8IkFyaWFsIixL''@;'; put 'put ''PU8mJjU9PU8uYmlmZixzZT15bihLPzE1K2subGVuZ3RoOjE2KzIqay5sZW5ndGgpO3NlLndyaXRlX3NoaWZ0KDIsMjAqKFMuc3p8fDEyKSk7dmFyIG1lPTA7cmV0dXJuIFMuYm9sZCYmKG1lfD0xKSxTLml0YWxpYyYmKG1lfD0yKSxTLnN0cmlrZSYmKG1lfD04KSxTLnNoYWRvdyYmKG1lfD0z''@;'; put 'put ''Miksc2Uud3JpdGVfc2hpZnQoMSxtZSksc2Uud3JpdGVfc2hpZnQoMSwwKSxzZS53cml0ZV9zaGlmdCgyLFMuY29sb3I/UDQoUy5jb2xvciw2NCk6NjQpLHNlLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApLHNlLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09Uy52YWxpZ24/MToic3ViIj09''@;'; put 'put ''Uy52YWxpZ24/MjowKSxzZS53cml0ZV9zaGlmdCgxLFMudW5kZXJsaW5lfHwwKSxzZS53cml0ZV9zaGlmdCgxLHNlLmZhbWlseXx8MCksc2Uud3JpdGVfc2hpZnQoMSxzZS5jaGFyc2V0fHwwKSxzZS53cml0ZV9zaGlmdCgxLDApLHNlLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEt8fHNlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMSksc2Uud3JpdGVfc2hpZnQoKEs/MToyKSprLmxlbmd0aCxrLEs/InNiY3MiOiJ1dGYxNmxlIiksc2V9KEssaykpfSl9KEssUyxrKSxmdW5jdGlvbiBxbmUoUyxPLGspe08mJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oSyl7''@;'; put 'put ''Zm9yKHZhciBlZT1LWzBdO2VlPD1LWzFdOysrZWUpbnVsbCE9T1tlZV0mJkdpKFMsIkZvcm1hdCIsYVYoZWUsT1tlZV0saykpfSl9KEssUy5TU0YsayksZnVuY3Rpb24gRzUoUyxPKXtmb3IodmFyIGs9MDtrPDE2OysraylHaShTLCJYRiIsYjUoe251bUZtdElkOjAsc3R5bGU6ITB9LDAsTykp''@;'; put 'put ''O08uY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKEspe0dpKFMsIlhGIixiNShLLDAsTykpfSl9KEssayksR2koSywiUGFsZXR0ZSIsZnVuY3Rpb24gQ3QoUyl7dmFyIE89eW4oMjI2KTtPLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgaz0wO2s8NTY7KytrKXt2YXIgSz1TW2srOF18fHY0W2sr''@;'; put 'put ''OF07Ty53cml0ZV9zaGlmdCgxLEtbMF0pLE8ud3JpdGVfc2hpZnQoMSxLWzFdKSxPLndyaXRlX3NoaWZ0KDEsS1syXSksTy53cml0ZV9zaGlmdCgxLDApfXJldHVybiBPfShyMCkpLHIwPXF0KHY0KSxwZSYmR2koSywiVXNlc0VMRnMiLHR1KCExKSk7dmFyIFZlPUsuZW5kKCksWWU9eWkoKTtw''@;'; put 'put ''ZSYmR2koWWUsIkNvdW50cnkiLGZ1bmN0aW9uIGRpKFMpe3JldHVybiBTfHwoUz15big0KSksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiwxKSxTfSgpKSxwZSYmay5TdHJpbmdzJiZmdW5jdGlvbiBVbmUoUyxPLGssSyl7dmFyIGVlPUt8fChrfHxbXSkubGVuZ3RofHwwO2lm''@;'; put 'put ''KGVlPD04MjI0KXJldHVybiBHaShTLE8sayxlZSk7dmFyIHNlPStPfHwrcVNbT107aWYoIWlzTmFOKHNlKSl7Zm9yKHZhciBtZT1rLnBhcnRzfHxbXSxwZT0wLGJlPTAsUGU9MDtQZSsobWVbcGVdfHw4MjI0KTw9ODIyNDspUGUrPW1lW3BlXXx8ODIyNCxwZSsrO3ZhciBWZT1TLm5leHQoNCk7''@;'; put 'put ''Zm9yKFZlLndyaXRlX3NoaWZ0KDIsc2UpLFZlLndyaXRlX3NoaWZ0KDIsUGUpLFMucHVzaChrLnNsaWNlKGJlLGJlK1BlKSksYmUrPVBlO2JlPGVlOyl7Zm9yKChWZT1TLm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLFBlPTA7UGUrKG1lW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1tZVtwZV18''@;'; put 'put ''fDgyMjQscGUrKztWZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZShiZSxiZStQZSkpLGJlKz1QZX19fShZZSwiU1NUIixmdW5jdGlvbiBtcyhTLE8pe3ZhciBrPXluKDgpO2sud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxrLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpO2Zvcih2YXIg''@;'; put 'put ''Sz1bXSxlZT0wO2VlPFMubGVuZ3RoOysrZWUpS1tlZV09TmMoU1tlZV0sTyk7dmFyIHNlPVUoW2tdLmNvbmNhdChLKSk7cmV0dXJuIHNlLnBhcnRzPVtrLmxlbmd0aF0uY29uY2F0KEsubWFwKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWUubGVuZ3RofSkpLHNlfShrLlN0cmluZ3MsaykpLEdpKFll''@;'; put 'put ''LCJFT0YiKTt2YXIgZXQ9WWUuZW5kKCksY3Q9eWkoKSxFdD0wLGF0PTA7Zm9yKGF0PTA7YXQ8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2F0KUV0Kz0ocGU/MTI6MTEpKyhwZT8yOjEpKlMuU2hlZXROYW1lc1thdF0ubGVuZ3RoO3ZhciBidD1WZS5sZW5ndGgrRXQrZXQubGVuZ3RoO2ZvcihhdD0w''@;'; put 'put ''O2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClHaShjdCwiQm91bmRTaGVldDgiLGwyKHtwb3M6YnQsaHM6KHNlW2F0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6Uy5TaGVldE5hbWVzW2F0XX0saykpLGJ0Kz1PW2F0XS5sZW5ndGg7dmFyIGt0PWN0LmVuZCgpO2lmKEV0IT1rdC5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitFdCsiICE9ICIra3QubGVuZ3RoKTt2YXIgT3Q9W107cmV0dXJuIFZlLmxlbmd0aCYmT3QucHVzaChWZSksa3QubGVuZ3RoJiZPdC5wdXNoKGt0KSxldC5sZW5ndGgmJk90LnB1c2goZXQpLGIwKFtPdF0pfWZ1bmN0aW9uIFRJKFMsTyl7dmFyIGs9''@;'; put 'put ''T3x8e307c3dpdGNoKGsuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24gSm5lKFMsTyl7dmFyIGs9T3x8e30sSz1bXTtJZihPJiZPLlBQSXx8OTYpLFMmJiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NG''@;'; put 'put ''KSxrLnJldnNzZj1EZShTLlNTRiksay5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLGsuc3NmPVMuU1NGKSxTLlN0eWxlcz17Rm9udHM6ay5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxs''@;'; put 'put ''czprLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczprLkJvcmRlcnM9W3t9XSxEWEY6ay5EWEY9Uy5TdHlsZXMmJlMuU3R5bGVzLkRYRnx8W119LEk0KGsuRm9udHNbMF0pLGsuU3RyaW5ncz1bXSxrLlN0cmluZ3MuQ291bnQ9MCxr''@;'; put 'put ''LlN0cmluZ3MuVW5pcXVlPTAscTM/ay5yZXZTdHJpbmdzPW5ldyBNYXA6KGsucmV2U3RyaW5ncz17fSxrLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBrLnJldlN0cmluZ3MuZm9vKSxQZihrKSxrLmNlbGxYZnM9W10say5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sbDAoay5jZWxs''@;'; put 'put ''WGZzLGsuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwoUy5Qcm9wcz17fSk7Zm9yKHZhciBlZT0wO2VlPFMuU2hlZXROYW1lcy5sZW5ndGg7KytlZSlLW0subGVuZ3RoXT1FSShlZSxrLFMpO3JldHVybiBLLnVuc2hpZnQoQnooUyxLLGspKSxiMChbS10p''@;'; put 'put ''fShTLE8pO2Nhc2UgNDpjYXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiAkbmUoUyxPKXt2YXIgaz1PfHx7fTtudWxsIT1vZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9b2UpO2Zvcih2YXIgSz15aSgpLGVlPTAsc2U9MDtzZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrc2UpUy5TaGVldE5h''@;'; put 'put ''bWVzW3NlXT09ay5zaGVldCYmKGVlPXNlKTtpZigwPT1lZSYmay5zaGVldCYmUy5TaGVldE5hbWVzWzBdIT1rLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK2suc2hlZXQpO3JldHVybiBHaShLLDQ9PWsuYmlmZj8xMDMzOjM9PWsuYmlmZj81MjE6OSx4NCgwLDE2''@;'; put 'put ''LGspKSxmdW5jdGlvbiBHbmUoUyxPLGssSyl7dmFyIG1lLGVlPUFycmF5LmlzQXJyYXkoTyksc2U9b28oT1siIXJlZiJdfHwiQTEiKSxwZT0iIixiZT1bXTtpZihzZS5lLmM+MjU1fHxzZS5lLnI+MTYzODMpe2lmKEsuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoT1siIXJlZiJdfHwi''@;'; put 'put ''QTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtzZS5lLmM9TWF0aC5taW4oc2UuZS5jLDI1NSksc2UuZS5yPU1hdGgubWluKHNlLmUuYywxNjM4MyksbWU9cmEoc2UpfWZvcih2YXIgUGU9c2Uucy5yO1BlPD1zZS5lLnI7KytQZSl7cGU9amkoUGUpO2Zvcih2YXIgVmU9''@;'; put 'put ''c2Uucy5jO1ZlPD1zZS5lLmM7KytWZSl7UGU9PT1zZS5zLnImJihiZVtWZV09VGEoVmUpKSxtZT1iZVtWZV0rcGU7dmFyIFllPWVlPyhPW1BlXXx8W10pW1ZlXTpPW21lXTtZZSYmWW5lKFMsWWUsUGUsVmUpfX19KEssUy5TaGVldHNbUy5TaGVldE5hbWVzW2VlXV0sMCxrKSxHaShLLDEwKSxL''@;'; put 'put ''LmVuZCgpfShTLE8pfXRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIG1kPWZ1bmN0aW9uKCl7dmFyIFM9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIGsoWWUsZXQpe3ZhciBjdD1ldHx8''@;'; put 'put ''e307bnVsbCE9b2UmJm51bGw9PWN0LmRlbnNlJiYoY3QuZGVuc2U9b2UpO3ZhciBFdD1jdC5kZW5zZT9bXTp7fSxhdD0oWWU9WWUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighYXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5v''@;'; put 'put ''dCBmaW5kIDx0YWJsZT4iKTt2YXIgYnQ9WWUubWF0Y2goLzxcL3RhYmxlL2kpLGp0PWF0LmluZGV4LGt0PWJ0JiZidC5pbmRleHx8WWUubGVuZ3RoLE90PWZ1bmN0aW9uIGZ0KFMsTyxrKXtpZihobnx8InN0cmluZyI9PXR5cGVvZiBPKXJldHVybiBTLnNwbGl0KE8pO2Zvcih2YXIgSz1TLnNw''@;'; put 'put ''bGl0KE8pLGVlPVtLWzBdXSxzZT0xO3NlPEsubGVuZ3RoOysrc2UpZWUucHVzaChrKSxlZS5wdXNoKEtbc2VdKTtyZXR1cm4gZWV9KFllLnNsaWNlKGp0LGt0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksS3Q9LTEsVG49MCxycj0wLFNuPTAsbHI9e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAs''@;'; put 'put ''YzowfX0sWG49W107Zm9yKGp0PTA7anQ8T3QubGVuZ3RoOysranQpe3ZhciBCbj1PdFtqdF0udHJpbSgpLGZyPUJuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9ZnIpe2lmKCI8dGQiPT1mcnx8Ijx0aCI9PWZyKXt2YXIgeXI9Qm4uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3Io''@;'; put 'put ''a3Q9MDtrdDx5ci5sZW5ndGg7KytrdCl7dmFyIGVyPXlyW2t0XS50cmltKCk7aWYoZXIubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBNaT1lcixGaT0wOyI8Ij09TWkuY2hhckF0KDApJiYoRmk9TWkuaW5kZXhPZigiPiIpKT4tMTspTWk9TWkuc2xpY2UoRmkrMSk7Zm9yKHZhciBuYT0wO25h''@;'; put 'put ''PFhuLmxlbmd0aDsrK25hKXt2YXIgY2E9WG5bbmFdO2NhLnMuYz09VG4mJmNhLnMucjxLdCYmS3Q8PWNhLmUuciYmKFRuPWNhLmUuYysxLG5hPS0xKX12YXIgTGk9dnIoZXIuc2xpY2UoMCxlci5pbmRleE9mKCI+IikpKTtTbj1MaS5jb2xzcGFuPytMaS5jb2xzcGFuOjEsKChycj0rTGkucm93''@;'; put 'put ''c3Bhbik+MXx8U24+MSkmJlhuLnB1c2goe3M6e3I6S3QsYzpUbn0sZTp7cjpLdCsocnJ8fDEpLTEsYzpUbitTbi0xfX0pO3ZhciBrcj1MaS50fHxMaVsiZGF0YS10Il18fCIiO2lmKCFNaS5sZW5ndGgpe1RuKz1Tbjtjb250aW51ZX1pZihNaT1pcihNaSksbHIucy5yPkt0JiYobHIucy5yPUt0''@;'; put 'put ''KSxsci5lLnI8S3QmJihsci5lLnI9S3QpLGxyLnMuYz5UbiYmKGxyLnMuYz1UbiksbHIuZS5jPFRuJiYobHIuZS5jPVRuKSxNaS5sZW5ndGgpe3ZhciBWbj17dDoicyIsdjpNaX07Y3QucmF3fHwhTWkudHJpbSgpLmxlbmd0aHx8InMiPT1rcnx8KFZuPVJpKE1pLGN0KSksY3QuZGVuc2U/KEV0''@;'; put 'put ''W0t0XXx8KEV0W0t0XT1bXSksRXRbS3RdW1RuXT1Wbik6RXRbcWkoe3I6S3QsYzpUbn0pXT1WbixUbis9U259fX19fWVsc2V7aWYoKytLdCxjdC5zaGVldFJvd3MmJmN0LnNoZWV0Um93czw9S3Qpey0tS3Q7YnJlYWt9VG49MH19cmV0dXJuIEV0WyIhcmVmIl09cmEobHIpLFhuLmxlbmd0aCYm''@;'; put 'put ''KEV0WyIhbWVyZ2VzIl09WG4pLEV0fWZ1bmN0aW9uIGVlKFllLGV0LGN0LEV0LGF0LGJ0KXt2YXIgT3QsanQ9WWVbIiFtZXJnZXMiXXx8W10sa3Q9W10sS3Q9e3N0eWxlOltdfSxUbj0hMTtmdW5jdGlvbiBycihpYSxMbyxPYSl7dmFyIGhvPSIiLEphPTA7aWYoT3RbaWFdKXN3aXRjaChPdFtp''@;'; put 'put ''YV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpobz0ic29saWQiLEphPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOmhvPSJzb2xpZCIsSmE9MjticmVhaztjYXNlInRoaWNrIjpobz0ic29saWQiLEphPTM7YnJlYWs7Y2FzZSJkb3VibGUiOmhvPSJkb3VibGUiLEphPTM7YnJlYWs7Y2FzZSJk''@;'; put 'put ''b3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6aG89ImRvdHRlZCIsSmE9MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOmhvPSJkb3R0ZWQiLEphPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOmhvPSJkYXNoZWQiLEphPTE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6aG89ImRhc2hlZCIsSmE9Mn1lOmlmKDA9PUphKXtzd2l0Y2goaWEpe2Nhc2UidG9wIjotLUxvO2JyZWFrO2Nhc2UibGVmdCI6LS1PYTticmVhaztjYXNlImJvdHRvbSI6KytMbzticmVhaztjYXNlInJpZ2h0IjorK09hfXZhciBC''@;'; put 'put ''aT1Mbz49MCYmT2E+PTA/RXQuZGVuc2U/KFllW0xvXXx8W10pW09hXTpZZVtxaSh7cjpMbyxjOk9hfSldOm51bGw7aWYoQmkpe2lmKEJpLnMmJkJpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1baWFdXSlicmVhayBlO0JpLnMmJkJpLnMu''@;'; put 'put ''ZmdDb2xvciYmKEphPTEpfU90LmZnQ29sb3ImJihKYT0xKSwhQmkmJlRuJiYwPT1KYSYmKEphPTEpfTAhPUphJiZKYSYmKEt0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItc3R5bGU6IisoaG98fCJ0cmFuc3BhcmVudCIpKSxLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLXdpZHRoOiIr''@;'; put 'put ''SmErInB4IiksIiI9PWhvP0t0LnN0eWxlLnB1c2goImJvcmRlci0iK2lhKyItY29sb3I6IHRyYW5zcGFyZW50Iik6T3RbaWFdLmNvbG9yJiZPdFtpYV0uY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJib3JkZXItIitpYSsiLWNvbG9yOiMiK1AwKE90W2lhXS5jb2xvci5yZ2IpKSl9Zm9yKHZh''@;'; put 'put ''ciBTbj1ldC5zLmM7U248PWV0LmUuYzsrK1NuKXtmb3IodmFyIGxyPTAsWG49MCxCbj0wO0JuPGp0Lmxlbmd0aDsrK0JuKWlmKCEoanRbQm5dLnMucj5jdHx8anRbQm5dLnMuYz5Tbnx8anRbQm5dLmUucjxjdHx8anRbQm5dLmUuYzxTbikpe2lmKGp0W0JuXS5zLnI8Y3R8fGp0W0JuXS5zLmM8''@;'; put 'put ''U24pe2xyPS0xO2JyZWFrfWxyPWp0W0JuXS5lLnItanRbQm5dLnMucisxLFhuPWp0W0JuXS5lLmMtanRbQm5dLnMuYysxO2JyZWFrfWlmKCEobHI8MCkpe3ZhciBmcj1xaSh7cjpjdCxjOlNufSkseXI9RXQuZGVuc2U/KFllW2N0XXx8W10pW1NuXTpZZVtmcl07eXI/VG49ITE6KFRuPSEwLHly''@;'; put 'put ''PXt0OiJ6IixzOnt9fSk7dmFyIGVyPSJ6Ij09eXIudD8iIjp5ci5ofHxsYSh5ci53fHwoX2woeXIpLHlyLncpfHwiIik7aWYoS3Q9e3N0eWxlOltdfSxPdD15ci5zKXt2YXIgTWk9MTtpZigoInN1cGVyIj09T3QudmFsaWdufHwic3ViIj09T3QudmFsaWduKSYmKE1pPS44Myxlcj1Qcigic3Bh''@;'; put 'put ''biIsZXIse3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitPdC52YWxpZ259KSksS3Quc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoT3QuYm9sZD83MDA6NDAwKSksT3QuaXRhbGljJiZLdC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoT3QudW5kZXJsaW5lfHxPdC5zdHJpa2Up''@;'; put 'put ''JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoT3QudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKE90LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxPdC5jb2xvciYmT3QuY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrUDAoT3QuY29sb3IucmdiKSks''@;'; put 'put ''T3QubmFtZSYmS3Quc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitPdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxPdC5zeiYmS3Quc3R5bGUucHVzaCgiZm9udC1zaXplOiIrT3Quc3oqTWkrInB0IiksbnVsbCE9PU90LnBhdHRlcm5UeXBlJiZPdC5mZ0NvbG9yJiZPdC5mZ0NvbG9yLnJnYiYmS3Qu''@;'; put 'put ''c3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrUDAoT3QuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxscj4xfHxYbj4xKXt2YXIgRmk9cWkoe3I6Y3QrbHItMSxjOlNuK1huLTF9KSxuYT1FdC5kZW5zZT8oWWVb''@;'; put 'put ''Y3QrbHItMV18fFtdKVtTbitYbi0xXTpZZVtGaV0sTGk9T3Q7T3Q9bmEmJm5hLnN8fE90LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGlhKXtycihpYSxjdCxTbil9KSxPdD1MaX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oaWEpe3JyKGlhLGN0''@;'; put 'put ''LFNuKX0pO2lmKE90LmFsaWdubWVudCl7aWYoT3QuYWxpZ25tZW50Lmhvcml6b250YWw/S3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoU1tPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fE90LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT15ci50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0''@;'; put 'put ''LWFsaWduOiByaWdodCIpLE90LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGtyPU90LmFsaWdubWVudC52ZXJ0aWNhbDtLdC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PWtyPyJtaWRkbGUiOmtyKSl9aWYoT3QuYWxpZ25tZW50LndyYXBUZXh0KUt0LnN0eWxlLnB1''@;'; put 'put ''c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIFZuPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbisxXTpZZVtxaSh7cjpjdCxjOlNuKzF9KV07Vm4mJiJ6IiE9Vm4udCYmS3Quc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PXlyLnQmJkt0LnN0''@;'; put 'put ''eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIEJyPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHg7bnVsbD09QnImJihCcj0oKFllWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIF9yPTA7aWYoWG48PTEmJmxyPD0xJiYoX3I9KChZZVsiIWNvbHMi''@;'; put 'put ''XXx8W10pW1NuXXx8e30pLndweCkmJkt0LnN0eWxlLnB1c2goIndpZHRoOiAiK19yKyJweCIpLFllWyIhY29uZGZtdCJdJiZzZSh5cixjdCxTbixZZVsiIWNvbmRmbXQiXSxLdC5zdHlsZSxZZSksMD09S3Quc3R5bGUubGVuZ3RoP2RlbGV0ZSBLdC5zdHlsZTpLdC5zdHlsZT1LdC5zdHlsZS5q''@;'; put 'put ''b2luKCI7IiksRXQuY3NzKXt2YXIgRm49YXQuaW5kZXhPZihLdC5zdHlsZSk7LTE9PUZuJiYoYXQucHVzaChLdC5zdHlsZSksRm49YXQubGVuZ3RoLTEpLGRlbGV0ZSBLdC5zdHlsZSxLdC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrRm59bHI+MSYmKEt0LnJvd3NwYW49bHIpLFhuPjEmJihL''@;'; put 'put ''dC5jb2xzcGFuPVhuKSxFdC5lZGl0YWJsZT9lcj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK2VyKyI8L3NwYW4+Ijp5ciYmKEt0WyJkYXRhLXQiXT15ciYmeXIudHx8InoiLG51bGwhPXlyLnYmJihLdFsiZGF0YS12Il09eXIudiksbnVsbCE9eXIueiYmKEt0WyJkYXRhLXoiXT15''@;'; put 'put ''ci56KSksS3QuaWQ9KEV0LmlkfHwic2pzIikrIi0iK2ZyLGt0LnB1c2goUHIoInRkIixlcixLdCkpfX12YXIgWmksanI9e3N0eWxlOltdfTsoWmk9WWVbIiFzaGVldEZvcm1hdCJdKSYmWmkucm93JiYoanYoWmkucm93KSxaaS5yb3cuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsWmku''@;'; put 'put ''cm93LmhweCsicHgiXSksanIuaGVpZ2h0PU1hdGgucm91bmQoWmkucm93LmhweCkpKTt2YXIgYmk9WWVbIiFyb3dzIl07aWYoYmkmJmJpW2N0XSl7dmFyIF9hPWJpW2N0XTtfYS5ocHgmJihqci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwrX2EuaHB4KyJweCJdKSxqci5oZWlnaHQ9TWF0aC5yb3Vu''@;'; put 'put ''ZChfYS5ocHgpKSxfYS5oaWRkZW4mJmpyLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgc289W107cmV0dXJuIGpyLnN0eWxlPWpyLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oaWEpe3JldHVybiEoc28uaW5kZXhPZihpYVswXSk+LTF8fChzby5wdXNoKGlhWzBd''@;'; put 'put ''KSwwKSl9KS5tYXAoZnVuY3Rpb24oaWEpe3JldHVybiBpYVswXSsiOiIraWFbMV19KSwwPT1qci5zdHlsZS5sZW5ndGg/ZGVsZXRlIGpyLnN0eWxlOmpyLnN0eWxlPWpyLnN0eWxlLmpvaW4oIjsiKSxQcigidHIiLGt0LmpvaW4oIiIpLGpyKX1mdW5jdGlvbiBzZShZZSxldCxjdCxFdCxhdCxi''@;'; put 'put ''dCl7RXQuZm9yRWFjaChmdW5jdGlvbihqdCl7aWYoanQuX3JlZnx8KGp0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBqdC5yZWY/TXMoanQucmVmKTpqdC5yZWYpLCEoanQuX3JlZi5zLmM+Y3R8fGp0Ll9yZWYuZS5jPGN0fHxqdC5fcmVmLnMucj5ldHx8anQuX3JlZi5lLnI8ZXR8fCJzY2FsZSIh''@;'; put 'put ''PT1qdC50KSl7aWYoIm4iIT1ZZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09anQuX21pbil7anQuX3ZhbHVlcz1bXTtmb3IodmFyIE90PWp0Ll9yZWYucy5yO090PD1qdC5fcmVmLmUucjsrK090KWZvcih2YXIgS3Q9anQuX3JlZi5zLmM7S3Q8PWp0Ll9yZWYuZS5jOysrS3Qpe3ZhciBUbj1B''@;'; put 'put ''cnJheS5pc0FycmF5KGJ0KT8oYnRbT3RdfHxbXSlbS3RdOmJ0W3FpKHtyOk90LGM6S3R9KV07VG4mJiJuIj09VG4udCYmanQuX3ZhbHVlcy5wdXNoKFRuLnYpfWlmKGp0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihycixTbil7cmV0dXJuIHJyLVNufSksanQuX21pbj1qdC5fdmFsdWVzWzBdLGp0''@;'; put 'put ''Ll9tYXg9anQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sanQuX2JhbmQ9anQuX21heC1qdC5fbWluLGp0LmNtaWQpe3N3aXRjaChqdC5jbWlkLnQpe2Nhc2UibnVtIjpqdC5fbWlkPWp0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOmp0Ll9taWQ9anQuY21pZC52LzEwMCpqdC5fYmFuZCtqdC5f''@;'; put 'put ''bWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6anQuX21pZD1mdW5jdGlvbiBPcihTLE8pe2lmKDA9PU8pcmV0dXJuIFNbMF07aWYoMTAwPT1PKXJldHVybiBTW1MubGVuZ3RoLTFdO3ZhciBLPU8vMTAwKihTLmxlbmd0aC0xKSxlZT1LLU1hdGguZmxvb3IoSyk7cmV0dXJuIGVlKlNbTWF0aC5j''@;'; put 'put ''ZWlsKEspXSsoMS1lZSkqU1tNYXRoLmZsb29yKEspXX0oanQuX3ZhbHVlcyxqdC5jbWlkLnYpfWp0Ll9iYW5kaD1qdC5fbWF4LWp0Ll9taWQsanQuX2JhbmRsPWp0Ll9taWQtanQuX21pbn19KGt0PWp0LmNtaWQ/WWUudj49anQuX21pZD9fQyhqdC5jbWlkLmNvbG9yLGp0LmNtYXguY29sb3Is''@;'; put 'put ''KFllLnYtanQuX21pZCkvanQuX2JhbmRoKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtaWQuY29sb3IsKFllLnYtanQuX21pbikvanQuX2JhbmRsKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pbikvanQuX2JhbmQpKSYmYXQucHVzaCgiYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjogIyIra3QpfX0pfWZ1bmN0aW9uIG1lKFllLGV0KXt2YXIgY3Q9e3NwYW46ZXR8fDEsc3R5bGU6IiJ9LEV0PVtdO3JldHVybiBZZSYmWWUud3B4JiYoY3Qud2lkdGg9TWF0aC5yb3VuZCg0KlllLndweC8zKSxFdC5wdXNoKCJ3aWR0aDoiKyhZZS53cHh8fDApKyJweCIpKSxFdC5sZW5ndGg+''@;'; put 'put ''MCYmKGN0LnN0eWxlPUV0LmpvaW4oIjsiKSksUHIoImNvbCIsbnVsbCxjdCl9ZnVuY3Rpb24gcGUoWWUsZXQsY3Qpe3ZhciBFdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVk''@;'; put 'put ''Il0uam9pbigiOyIpfTtjdCYmY3QuaWQmJihFdC5pZD1jdC5pZCk7dmFyIGF0PVllWyIhY29scyJdLGJ0PVllWyIhc2hlZXRGb3JtYXQiXTtpZihZZSYmYXQpe2Zvcih2YXIganQ9MCxPdD1ldC5zLmM7T3Q8PWV0LmUuYzsrK090KXt2YXIgS3Q9YXRbT3RdO2p0Kz1LdCYmS3Qud3B4P0t0Lndw''@;'; put 'put ''eDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9RXQuc3R5bGUrPSI7d2lkdGg6IitqdCsicHgifXZhciBycixUbj1bIjx0YWJsZSIrTHUoRXQpKyI+Il07aWYoVG4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRp''@;'; put 'put ''bmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoY3QmJmN0LmdyaWRjb2xvcj9jdC5ncmlkY29sb3I6V3QoWWVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsi''@;'; put 'put ''OyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxUbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoZXQuZS5jLWV0LnMuYysxKSsnIj4nKSxhdCl7Zm9yKHZhciBTbj1ldC5zLmM7U248TWF0aC5taW4oYXQubGVuZ3RoLGV0LmUuYysxKTsrK1Nu''@;'; put 'put ''KSEocnI9YXRbU25dKSYmYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChtZShyciwxKSk7ZXQuZS5jLWV0LnMuYysxPmF0Lmxlbmd0aCYmKHJyPW51bGwsYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChtZShy''@;'; put 'put ''cixldC5lLmMtZXQucy5jKzEtYXQubGVuZ3RoKSkpfWVsc2UgcnI9bnVsbCxidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8KHJyPXt3cHg6NTN9KSxUbi5wdXNoKG1lKHJyLGV0LmUuYy1ldC5zLmMrMSkpO3JldHVybiBUbi5wdXNoKCI8L2NvbGdyb3VwPiIpLFRuLmpvaW4oIiIpfXZhciBi''@;'; put 'put ''ZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLFBlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEsoWWUsZXQpe3JldHVybiB0aChrKFllLGV0KSxl''@;'; put 'put ''dCl9LHRvX3NoZWV0OmssX3JvdzplZSxCRUdJTjpiZSxFTkQ6UGUsX3ByZWFtYmxlOnBlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gTyhZZSl7dmFyIGV0PVtdLGN0PXt9LEV0PTA7cmV0dXJuIFllLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1''@;'; put 'put ''bmN0aW9uKGF0LGJ0LGp0LGt0LE90KXt2YXIgVG49V24odnIoYXQpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIikscnI9WWUuc2xpY2UoRXQsT3QpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2gocnIubGVuZ3RoPjAmJihldC5wdXNoKHt0OiJzIix2OnJyLHM6Y3R9KSxjdD1xdChjdCkpLFRu''@;'; put 'put ''LnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8iIT1idD9jdC5ib2xkPSEwOmRlbGV0ZSBjdC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD9jdC5pdGFsaWM9ITA6ZGVsZXRlIGN0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/Y3QudW5kZXJsaW5lPTE6ZGVsZXRlIGN0LnVuZGVybGlu''@;'; put 'put ''ZTticmVhaztjYXNlInMiOiIvIiE9YnQ/Y3Quc3RyaWtlPSEwOmRlbGV0ZSBjdC5zdHJpa2V9cmV0dXJuIEV0PU90K2F0Lmxlbmd0aCxhdH0pLGV0fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFZlKFllLGV0KXt2YXIgY3Q9ZXR8fHt9LGF0PW51bGwhPWN0LmZvb3Rlcj9jdC5mb290ZXI6UGUsYnQ9''@;'; put 'put ''W251bGwhPWN0LmhlYWRlcj9jdC5oZWFkZXI6YmUsIiJdLGp0PVtdLGt0PShuZXcgRGF0ZSkudmFsdWVPZigpO1llfHwoWWU9e30pLFllWyIhcmVmIl18fChZZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBPdD1NcyhZZVsiIXJlZiJdKTtpZihjdC5kZW5zZT1BcnJheS5pc0FycmF5KFllKSxjdC5z''@;'; put 'put ''a2lwZW5kKXt2YXIgS3Q9T3QuZS5yO2U6Zm9yKDtLdD49T3Qucy5yOy0tS3QpZm9yKHZhciBUbj1PdC5lLmM7VG4+PU90LnMuYzstLVRuKWlmKG51bGwhPSgoY3QuZGVuc2U/KFllW0t0XXx8W10pW1RuXTpZZVtxaSh7cjpLdCxjOlRufSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLnI9S3Q7dmFy''@;'; put 'put ''IHJyPU90LmUuYztlOmZvcig7cnI+PU90LnMuYzstLXJyKWZvcih2YXIgU249T3QuZS5yO1NuPj1PdC5zLnI7LS1TbilpZihudWxsIT0oKGN0LmRlbnNlPyhZZVtTbl18fFtdKVtycl06WWVbcWkoe3I6U24sYzpycn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5jPXJyfWJ0LnB1c2gocGUoWWUs''@;'; put 'put ''T3QsY3QpKTtmb3IodmFyIGxyPU90LnMucjtscjw9T3QuZS5yOysrbHIpYnQucHVzaChlZShZZSxPdCxscixjdCxqdCxrdCkpO3JldHVybiBidC5wdXNoKCI8L3RhYmxlPiIrYXQpLGN0LmNzcyYmKGJ0WzFdPSI8c3R5bGU+XG4iK2p0Lm1hcChmdW5jdGlvbihYbixCbil7cmV0dXJuIi5zanMi''@;'; put 'put ''K2t0KyItIitCbisiIHsiK1huKyJ9In0pLmpvaW4oIlxuIikrIjwvc3R5bGU+IiksYnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiBBSShTLE8sayl7dmFyIEs9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBLO3ZhciBlZT1nZXRDb21wdXRlZFN0eWxlKFMpO2lmKCg3''@;'; put 'put ''MDA9PWVlWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PWVlWyJmb250LXdlaWdodCJdKSYmKEsuYm9sZD0hMCksKGVlWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihLLml0YWxpYz0hMCksKGVlWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYm''@;'; put 'put ''KEsudW5kZXJsaW5lPTEpLChlZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihLLnN0cmlrZT0xKSxwYXJzZUludChlZVsiZm9udC1zaXplIl0pJiYoSy5zej1wYXJzZUZsb2F0KGVlWyJmb250LXNpemUiXSkqKGVlWyJmb250LXNpemUiXS5tYXRjaCgv''@;'; put 'put ''cHgvKT8zLzQ6MSkpLGVlWyJmb250LWZhbWlseSJdJiYoSy5uYW1lPWVlWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksZWUuY29sb3Ipe3ZhciBzZT1FNShlZS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtzZT49MCYmKEsuY29sb3I9e3JnYjpz''@;'; put 'put ''ZX0pfXN3aXRjaChlZVsidGV4dC10cmFuc2Zvcm0iXSYmKEsudGV4dF90cmFuc2Zvcm09ZWVbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0oZWVbInRleHQtc2hhZG93Il18fCJub25lIikmJihLLnNoYWRvdz0hMCksZWVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50''@;'; put 'put ''ZXIiOksuYWxpZ25tZW50PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpLLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOksuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpLLmFsaWdu''@;'; put 'put ''bWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3aXRjaChlZVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6Sy5hbGlnbm1lbnR8fChLLmFsaWdubWVudD17fSksSy5hbGlnbm1lbnQudmVydGljYWw9ZWVbInZlcnRpY2FsLWFsaWduIl0s''@;'; put 'put ''Im1pZGRsZSI9PUsuYWxpZ25tZW50LnZlcnRpY2FsJiYoSy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpLLnZhbGlnbj1lZVsidmVydGljYWwtYWxpZ24iXSxLLnN6JiYoSy5zei89LjgzKX12YXIgbWU9TyYmZ2V0Q29tcHV0ZWRTdHls''@;'; put 'put ''ZShPKTtyZXR1cm4gbWUmJmsmJk8mJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIGJlPXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLnNsaWNlKDEpLFBlPW1lWyJib3JkZXItIitwZSsiLXN0eWxlIl07aWYoKCJub25lIj09UGV8''@;'; put 'put ''fCFQZSkmJihQZT1tZVsiYm9yZGVyIitiZSsiU3R5bGUiXSksIm5vbmUiIT1QZSYmUGUpe3ZhciBWZT1wYXJzZUludChtZVsiYm9yZGVyLSIrcGUrIi13aWR0aCJdfHxtZVsiYm9yZGVyIitiZSsiV2lkdGgiXSwxMCksWWU9InRoaW4iO2lmKFZlPjApe3N3aXRjaChQZSl7Y2FzZSJkb3VibGUi''@;'; put 'put ''OlllPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpZZT1WZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6WWU9VmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOlllPVZlPj0zPyJ0aGljayI6VmU+PTI/Im1l''@;'; put 'put ''ZGl1bSI6InRoaW4ifWlmKEtbcGVdPXtzdHlsZTpZZX0sbWVbImJvcmRlci0iK3BlKyItY29sb3IiXXx8bWVbImJvcmRlciIrYmUrIkNvbG9yIl0pe3ZhciBldD1FNSgobWVbImJvcmRlci0iK3BlKyItY29sb3IiXXx8bWVbImJvcmRlciIrYmUrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITAp''@;'; put 'put ''O2V0Pj0wJiYoS1twZV0uY29sb3I9e3JnYjpldH0pfX19fSksS31mdW5jdGlvbiBESShTLE8sayl7dmFyIEs9Uy5jaGlsZE5vZGVzO2lmKDE9PVMubm9kZVR5cGUpc3dpdGNoKFMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOk8ubGVuZ3RoPjAmJk8ucHVzaCh7dDoidCIsdjoiXG4i''@;'; put 'put ''LHM6a30pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24ga0koUyxPLGspe08ucHVzaCh7dDoidCIsdjpTLmNoaWxkcmVuW1Muc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6a30pfShTLE8sayl9aWYoSy5sZW5ndGg+MCl7dmFyIGVlPUFJKFMsbnVsbCwhMSk7ayYmKGsudW5k''@;'; put 'put ''ZXJsaW5lJiYoZWUudW5kZXJsaW5lPWsudW5kZXJsaW5lKSxrLnN0cmlrZSYmKGVlLnN0cmlrZT1rLnN0cmlrZSkpO2Zvcih2YXIgc2U9MDtzZTxLLmxlbmd0aDsrK3NlKXt0cnl7aWYoS1tzZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31ESShLW3NlXSxP''@;'; put 'put ''LGVlKX1kZWxldGUgZWUudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT1TLm5vZGVUeXBlKXt2YXIgbWU9e3Q6InQiLHY6Uy5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6a307c3dpdGNoKGsudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBw''@;'; put 'put ''ZXJjYXNlIjptZS52PW1lLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6bWUudj1tZS52LnRvTG93ZXJDYXNlKCl9KE8ubGVuZ3RoPjB8fG1lLnYmJiIgIiE9bWUudikmJk8ucHVzaChtZSl9ZWxzZSAxPT1TLm5vZGVUeXBlJiYiYnIiPT09Uy50YWdOYW1lLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkmJk8ucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pfWZ1bmN0aW9uIER5KFMsTyxrLEssZWUpe3ZhciBtZSxzZT1TLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKG1lPWdldENvbXB1dGVkU3R5bGUoUyksKG1lWyJ3aGl0ZS1zcGFjZSJdfHwiIiku''@;'; put 'put ''bWF0Y2goL3ByZS8pJiYoc2U9c2UucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKG1lWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnNlPXNlLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnNlPXNlLnRvTG93ZXJDYXNlKCl9''@;'; put 'put ''dmFyIHBlPWZ1bmN0aW9uIGt5KFMsTyxrLEspe3ZhciBlZT17dDoicyIsdjpPfSxzZT0iIjtpZihTKXtrPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8Uy5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgbWU9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHxTLmdldEF0dHJpYnV0ZSgidiIpO2lmKG51''@;'; put 'put ''bGwhPShzZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS16Iil8fFMuZ2V0QXR0cmlidXRlKCJ6IikpJiYoZWUuej1zZSksbnVsbCE9ayYmbnVsbCE9bWUpcmV0dXJuIGVlLnQ9ayxlZS52PW1lLGVlfXJldHVybiBudWxsIT1PJiYoMD09Ty5sZW5ndGg/ZWUudD1rfHwieiI6Sy5yYXd8fCFPLnRyaW0o''@;'; put 'put ''KS5sZW5ndGh8fCJzIj09a3x8KGVlPVJpKE8sSykpKSxzZSYmKGVlLno9c2UpLGVlfShTLGlyKHNlKSxrLGVlKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJihwZS5zPUFJKFMsTyxlZS5ib3JkZXJzKSxkZWxldGUgcGUucy50ZXh0X3RyYW5zZm9ybSxTLmNoaWxkTm9kZXMubGVu''@;'; put 'put ''Z3RoPjF8fDE9PVMuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPVMuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKERJKFMscGUuUj1bXSxudWxsKSxwZS5SJiZwZS5SW3BlLlIubGVuZ3RoLTFdJiYiXG4iPT1wZS5SW3BlLlIubGVuZ3RoLTFdLnYmJnBlLlIubGVuZ3RoLS0sKG1lWyJ0ZXh0''@;'; put 'put ''LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52PWV0LnYudG9Mb3dl''@;'; put 'put ''ckNhc2UoKX0pfWlmKCJzIj09cGUudCl7dmFyIGJlPXBlLnYubWF0Y2goL1xuLyk7IWJlJiZwZS5SJiZwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpeyJzdHJpbmciPT10eXBlb2YgZXQudiYmZXQudi5tYXRjaCgvXG4vKSYmKGJlPSEwKX0pLCJzIj09cGUudCYmYmUmJihwZS5zfHwocGUucz17''@;'; put 'put ''fSkscGUucy5hbGlnbm1lbnR8fChwZS5zLmFsaWdubWVudD17fSkscGUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKE8pe3ZhciBQZT0iIixWZT1PLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoVmUmJlZlLmxlbmd0aClmb3IodmFyIFllPTA7WWU8VmUubGVuZ3RoJiYoIVZlW1ll''@;'; put 'put ''XS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oUGU9VmVbWWVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrWWUpO1BlJiYiIyIhPVBlLmNoYXJBdCgwKSYmKHBlLmw9e1RhcmdldDpQZX0pfXJldHVybiBwZX1mdW5jdGlvbiBJeShTLE8sayl7dmFyIGVlLEs9Ty5yb3dz''@;'; put 'put ''O2lmKCFLKXtpZihrJiZudWxsIT1rLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK08udGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gUW5lKFMsTyxrKXtrPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoa3x8e30pKTt2YXIgc2U9e3M6e3I6''@;'; put 'put ''MCxjOjB9LGU6e3I6MCxjOjB9fTtTWyIhbWVyZ2VzIl18fChTWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgcGUsbWU9Ty5jaGlsZHJlbixiZT0wLFBlPTA7UGU8bWUubGVuZ3RoOysrUGUpe3ZhciBldCxWZT1tZVtQZV0sWWU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9ldD1n''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlOlZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihldD1WZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNh''@;'; put 'put ''dGNoe31pZighZXR8fCJub25lIiE9ZXQoVmUpLmRpc3BsYXkpc3dpdGNoKFZlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6YmU9LTEsU1siIXJlZiJdJiYoay5vcmlnaW49LTEpLEl5KFMsVmUsayk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6YmU9LTEsU1siIXJlZiJdPygr''@;'; put 'put ''KyhzZT1NcyhTWyIhcmVmIl0pKS5lLnIsU1siIXJlZiJdPXJhKHNlKSk6U1siIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6YmU9LTEscGU9RHkoVmUsbnVsbCwiIiwwLGsp''@;'; put 'put ''LFNbIiFyZWYiXT8oay5vcmlnaW49LTEsZjQoUyxbW3BlXV0saykpOihTWyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KFMpPyhTWzBdfHwoU1swXT1bXSksU1swXVswXT1wZSk6Uy5BMT1wZSksU1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGV0JiYoc2U9TXMoU1siIXJlZiJdKSwoWWU9''@;'; put 'put ''ZXQoVmUpLmhlaWdodCkmJiJhdXRvIiE9WWUmJihTWyIhcm93cyJdW3NlLmUucl09e2hwdDpwYXJzZUludChZZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNl''@;'; put 'put ''IlUiOnBlPUR5KFZlLG51bGwsIiIsMCxrKSxTWyIhcmVmIl18fChTWyIhcmVmIl09IkExOkExIiksZjQoUyxbW3BlXV0se29yaWdpbjpxaSh7cjooYmU8MD8xOjApKyhzZT1NcyhTWyIhcmVmIl0pKS5lLnIsYzorK2JlfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjpiZT0t''@;'; put 'put ''MSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitWZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6YmU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitWZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1y''@;'; put 'put ''ZXR1cm4gU30oUyxPLGspfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/ZWU9Z2V0Q29tcHV0ZWRTdHlsZTpPLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGVl''@;'; put 'put ''PU8ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIHNlPWt8fHt9O251bGwhPW9lJiYoc2UuZGVuc2U9b2UpO3ZhciBtZT0wLHBlPTA7aWYobnVsbCE9c2Uub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2Ygc2Uub3JpZ2luKW1lPXNlLm9yaWdp''@;'; put 'put ''bjtlbHNle3ZhciBiZT0ic3RyaW5nIj09dHlwZW9mIHNlLm9yaWdpbj9ObyhzZS5vcmlnaW4pOnNlLm9yaWdpbjttZT1iZS5yLHBlPWJlLmN9dmFyIFBlPU1hdGgubWluKHNlLnNoZWV0Um93c3x8MWU3LEsubGVuZ3RoKSxWZT17czp7cjowLGM6MH0sZTp7cjptZSxjOnBlfX07aWYoU1siIXJl''@;'; put 'put ''ZiJdKXt2YXIgWWU9TXMoU1siIXJlZiJdKTtWZS5zLnI9TWF0aC5taW4oVmUucy5yLFllLnMuciksVmUucy5jPU1hdGgubWluKFZlLnMuYyxZZS5zLmMpLFZlLmUucj1NYXRoLm1heChWZS5lLnIsWWUuZS5yKSxWZS5lLmM9TWF0aC5tYXgoVmUuZS5jLFllLmUuYyksLTE9PW1lJiYoVmUuZS5y''@;'; put 'put ''PW1lPVllLmUucisxKX12YXIgZXQ9W10sY3Q9MCxFdD1TWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksYXQ9MCxidD0wLGp0PTAsa3Q9MCxPdD0wLEt0PTA7Zm9yKFNbIiFjb2xzIl18fChTWyIhY29scyJdPVtdKTthdDxLLmxlbmd0aCYmYnQ8UGU7KythdCl7Zm9yKHZhciBUbj1LW2F0XSxy''@;'; put 'put ''cj1Ubi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPXJyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspcnI9cnIucGFyZW50RWxlbWVudDtpZihycj09Tyl7ZTppZih0eXBlb2YgZWU8InUiKXt2YXIgU249ZWUoVG4pO2lmKG51bGw9PVNuKWJyZWFrIGU7aWYoU24uc3R5bGV8fChTbi5zdHlsZT17fSks''@;'; put 'put ''c2UuZGlzcGxheSYmIm5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkpY29udGludWU7Im5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkmJigoRXRbYnRdfHwoRXRbYnRdPXt9KSkuaGlkZGVuPSEwKX12YXIgbHI9VG4uY2VsbHM7Zm9yKGp0PWt0PTA7anQ8''@;'; put 'put ''bHIubGVuZ3RoOysranQpe3ZhciBYbj1scltqdF0sQm49bnVsbDtpZighKHR5cGVvZiBlZTwidSImJihudWxsPT1CbiYmKEJuPWVlKFhuKSksQm4uc3R5bGV8fChCbi5zdHlsZT17fSksc2UuZGlzcGxheSYmbnVsbCE9Qm4mJiJub25lIj09KEJuLmRpc3BsYXl8fEJuLnN0eWxlLmRpc3BsYXkp''@;'; put 'put ''KSkpe2ZvcihLdD0rWG4uZ2V0QXR0cmlidXRlKCJjb2xzcGFuIil8fDEsY3Q9MDtjdDxldC5sZW5ndGg7KytjdCl7dmFyIGZyPWV0W2N0XTtmci5zLmM9PWt0K3BlJiZmci5zLnI8YnQrbWUmJmJ0K21lPD1mci5lLnImJihrdD1mci5lLmMrMS1wZSxjdD0tMSl9KChPdD0rWG4uZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJyb3dzcGFuIil8fDEpPjF8fEt0PjEpJiZldC5wdXNoKHtzOntyOmJ0K21lLGM6a3QrcGV9LGU6e3I6YnQrbWUrKE90fHwxKS0xLGM6a3QrcGUrKEt0fHwxKS0xfX0pO3ZhciB5cj1Ybi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsZXI9WG4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTpp''@;'; put 'put ''Zih0eXBlb2YgZWU8InUiKXtpZihudWxsPT1CbiYmKEJuPWVlKFhuKSksbnVsbD09Qm4pYnJlYWsgZTtpZihCbi5zdHlsZXx8KEJuLnN0eWxlPXt9KSwxPT1LdCYmQm4ud2lkdGgmJihTWyIhY29scyJdW2t0K3BlXT1TWyIhY29scyJdW2t0K3BlXXx8e30sQm4ud2lkdGgubWF0Y2goL3B4Lyk/''@;'; put 'put ''U1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KEJuLndpZHRoLDEwKSs1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCk6Qm4ud2lkdGgubWF0Y2goL3B0LykmJihTWyIhY29scyJdW2t0K3BlXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChCbi53aWR0aCwxMCkvMys1LFNb''@;'; put 'put ''IiFjb2xzIl1ba3QrcGVdLndweHx8MCkpKSxPdDw9MSl7RXRbYnQrbWVdfHwoRXRbYnQrbWVdPXt9KTt2YXIgTWk9Qm4uaGVpZ2h0OyhNaT1NaS5tYXRjaCgvcHQvKT9zaChwYXJzZUludChNaSwxMCkpOnBhcnNlSW50KE1pLDEwKSk+KEV0W2J0K21lXS5ocHh8fHNoKEV0W2J0K21lXS5ocHQp''@;'; put 'put ''fHwwKSYmKGRlbGV0ZSBFdFtidCttZV0uaHB0LEV0W2J0K21lXS5ocHg9TWkpfX12YXIgRmk9WG47aWYoWG4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PVhuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1Ybi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFy''@;'; put 'put ''IG5hPTAsY2E9WG4uY2hpbGROb2RlcyxMaT0wO0xpPGNhLmxlbmd0aDsrK0xpKTM9PWNhW0xpXS5ub2RlVHlwZSYmKytuYTswPT1uYSYmKFhuPVhuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9RHkoWG4sRmkseXIsMCxzZSk7aWYoQm4pe3ZhciBWbj1lZShYbik7aWYoVm4mJiFWbi5zdHls''@;'; put 'put ''ZSYmKFZuLnN0eWxlPXt9KSwoVm4mJlZuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgQnI9Vm4mJlZuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fEJuWyJiYWNrZ3JvdW5kLWNvbG9yIl07''@;'; put 'put ''QnIubWF0Y2goL3JnYmFbKF1ccyowLipbKV0vaSkmJihCcj1CblsiYmFja2dyb3VuZC1jb2xvciJdKTt2YXIgX3I9RTUoQnIudG9Mb3dlckNhc2UoKSwhMCk7X3I+PTAmJihrci5zLmZnQ29sb3I9e3JnYjpfcn0pfWNhdGNoe31zd2l0Y2goQm5bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlk''@;'; put 'put ''ZGxlIjpjYXNlImJhc2VsaW5lIjprci5zfHwoa3Iucz17fSksa3Iucy5hbGlnbm1lbnR8fChrci5zLmFsaWdubWVudD17fSksa3Iucy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9fWlmKGVyJiYoa3Iuc3x8KGtyLnM9e30pLCFrci5zLmZnQ29sb3IpKXRyeXt2YXIgRm49RTUoZXIudG9M''@;'; put 'put ''b3dlckNhc2UoKSwhMCk7Rm4+PTAmJihrci5zLmZnQ29sb3I9e3JnYjpGbn0pfWNhdGNoe31pZihzZS5kZW5zZT8oU1tidCttZV18fChTW2J0K21lXT1bXSksU1tidCttZV1ba3QrcGVdPWtyKTpTW3FpKHtjOmt0K3BlLHI6YnQrbWV9KV09a3IsT3Q+MXx8S3Q+MSlmb3IodmFyIGpyPWJ0O2py''@;'; put 'put ''PGJ0K090OysranIpZm9yKHZhciBaaT1rdDtaaTxrdCtLdDsrK1ppKWJ0PT1qciYma3Q9PVppfHwoc2UuZGVuc2U/KFNbanIrbWVdfHwoU1tqcittZV09W10pLFNbanIrbWVdW1ppK3BlXT17dDoieiIsczpxdChrci5zfHx7fSl9KTpTW3FpKHtjOlppK3BlLHI6anIrbWV9KV09e3Q6InoiLHM6''@;'; put 'put ''cXQoa3Iuc3x8e30pfSk7VmUuZS5jPGt0K3BlJiYoVmUuZS5jPWt0K3BlKSxrdCs9S3R9fSsrYnR9fWlmKGV0Lmxlbmd0aCYmKFNbIiFtZXJnZXMiXT0oU1siIW1lcmdlcyJdfHxbXSkuY29uY2F0KGV0KSksVmUuZS5yPU1hdGgubWF4KFZlLmUucixidC0xK21lKSxTWyIhcmVmIl09cmEoVmUp''@;'; put 'put ''LGJ0Pj1QZSYmKFNbIiFmdWxscmVmIl09cmEoKFZlLmUucj1LLmxlbmd0aC1hdCtidC0xK21lLFZlKSkpLHNlLmJvcmRlcnMpZm9yKGJ0PVZlLnMucjtidDw9VmUuZS5yOysrYnQpZm9yKGt0PVZlLnMuYztrdDw9VmUuZS5jOysra3QpaWYoIXNlLmRlbnNlKXt2YXIgYmk9U1txaSh7cjpidCxj''@;'; put 'put ''Omt0fSldO2lmKCFiaXx8IWJpLnMpY29udGludWU7aWYoYnQ+MCl7dmFyIF9hPVNbcWkoe3I6YnQtMSxjOmt0fSldO19hJiZfYS5zJiZfYS5zLmJvdHRvbSYmZGVsZXRlIGJpLnMudG9wfWlmKGt0PjApe3ZhciBzbz1TW3FpKHtyOmJ0LGM6a3QtMX0pXTtzbyYmc28ucyYmc28ucy5ib3R0b20m''@;'; put 'put ''JmRlbGV0ZSBiaS5zLmxlZnR9fXJldHVybiBTfWZ1bmN0aW9uIGp6KFMsTyl7cmV0dXJuIEl5KChPfHx7fSkuZGVuc2U/W106e30sUyxPKX12YXIgWFM9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihLLGVlLHNlKXt2YXIgbWU9Sy5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJl''@;'; put 'put ''cGxhY2UoLyArL2csIiAiKS5yZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oVmUsWWUpe3JldHVybiBBcnJheShwYXJzZUludChZZSwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpc''@;'; put 'put ''Lz4vZywiXHQiKS5yZXBsYWNlKC88dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIikscGU9UXIobWUucmVwbGFjZSgvPFtePl0qPi9nLCIiKSksYmU9W10sUGU9MDtyZXR1cm4gbWUucmVwbGFjZSgvKDx0ZXh0OnNwYW4uKj8+KSguKj8pPFtcL110ZXh0OnNwYW4+L2csZnVuY3Rpb24oVmUsWWUs''@;'; put 'put ''ZXQsY3Qpe2N0IT1QZSYmYmUucHVzaCh7dDoicyIsdjpRcihtZS5zbGljZShQZSxjdCkpfSk7dmFyIEV0PXt0OiJzIix2OlFyKGV0KX0sYXQ9dnIoWWUpWyJzdHlsZS1uYW1lIl07cmV0dXJuIGF0JiZzZVthdF0mJihFdC5zPXF0KHNlW2F0XSkpLGJlLnB1c2goRXQpLFBlPWN0K1ZlLmxlbmd0''@;'; put 'put ''aCwiIn0pLFBlPG1lLmxlbmd0aCYmYmUucHVzaCh7dDoicyIsdjpRcihtZS5zbGljZShQZSkpfSksW3BlLGJlXX0sTz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpbInMi''@;'; put 'put ''LCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX0saz1mdW5jdGlvbihLLGVlKXt2YXIgc2U9dnIoSy5zbGljZSgwLEsuaW5kZXhPZigiPiIpKSks''@;'; put 'put ''bWU9Sy5zbGljZShLLmluZGV4T2YoIj4iKSsxKSxwZT17bmFtZTpzZS5uYW1lLGZhbWlseTpzZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFBlKXtzZVtQZVsxXV0mJihwZVtQZVswXV09c2VbUGVbMV1dKX0pO3ZhciBiZT17fTttZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlKXt2YXIgVmU9dnIoUGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PVZlWzBdKXtpZihWZVsiZm9udC13ZWlnaHQiXSYmKGJlLmJv''@;'; put 'put ''bGQ9KygiYm9sZCI9PVZlWyJmb250LXdlaWdodCJdfHwiNzAwIj09VmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PVZlWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09VmVbImZvbnQtc3R5bGUiXSkmJihiZS5pdGFsaWM9MSksIm5vbmUiIT0oVmVbInRleHQtdW5kZXJsaW5lLXN0eWxl''@;'; put 'put ''Il18fCJub25lIik/YmUudW5kZXJsaW5lPSJkb3VibGUiPT1WZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooVmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09VmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJihiZS51bmRlcmxpbmU9MCksKFZlWyJmb250LXNpemUiXXx8''@;'; put 'put ''IiIpLm1hdGNoKC9wdCQvKSYmKGJlLnN6PStWZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oVmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJihiZS5zdHJpa2U9MSksVmVbImZvbnQtbmFtZSJdJiYoYmUubmFtZT1WZVsiZm9udC1uYW1lIl0p''@;'; put 'put ''LFZlLmNvbG9yKXt2YXIgWWU9RTUoVmUuY29sb3IsITApO1llPj0wJiYoYmUuY29sb3I9WWUpfXN3aXRjaChWZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjpiZS52YWxpZ249InN1cGVyIjticmVhaztjYXNlInN1YiI6YmUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KFZlWyJ0''@;'; put 'put ''ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoYmUudmFsaWduPSItIj09VmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oVmVbInRleHQtc2hhZG93Il18fCJub25lIikmJihiZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxlZVtzZS5uYW1l''@;'; put 'put ''XT1iZX07cmV0dXJuIGZ1bmN0aW9uKGVlLHNlKXt2YXIgbWU9c2V8fHt9O251bGwhPW9lJiZudWxsPT1tZS5kZW5zZSYmKG1lLmRlbnNlPW9lKTt2YXIgUGUsVmUsRXQsYXQsT3QsS3QscGU9V1MoZWUpLGJlPVtdLFllPXtuYW1lOiIifSxldD0iIixjdD0wLGJ0PXt9LGp0PVtdLGt0PW1lLmRl''@;'; put 'put ''bnNlP1tdOnt9LFRuPXt2YWx1ZToiIn0scnI9IiIsU249MCxYbj1bXSxCbj0tMSxmcj0tMSx5cj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxlcj0wLE1pPXt9LEZpPVtdLG5hPXt9LGNhPTAsTGk9MCxrcj1bXSxWbj0xLEJyPTEsX3I9W10sRm49e05hbWVzOltdfSxqcj17fSxaaT1b''@;'; put 'put ''IiIsIiJdLGJpPVtdLF9hPXt9LHNvPXt9LGlhPTAsTG89IiIsT2E9MCxobz0hMSxKYT0hMSxCaT0wO2ZvcihZNS5sYXN0SW5kZXg9MCxwZT1wZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO090PVk1''@;'; put 'put ''LmV4ZWMocGUpOylzd2l0Y2goT3RbM109T3RbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09T3RbMV0/KGt0WyIhcmVmIl09eXIuZS5jPj15ci5zLmMmJnlyLmUucj49eXIucy5yP3JhKHlyKToiQTE6QTEiLG1lLnNoZWV0''@;'; put 'put ''Um93cz4wJiZtZS5zaGVldFJvd3M8PXlyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0seXIuZS5yPW1lLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09cmEoeXIpKSxGaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPUZpKSxrci5sZW5ndGgmJihrdFsiIXJvd3MiXT1rciksRXQubmFtZT1F''@;'; put 'put ''dC5cdTU0MGRcdTc5ZjB8fEV0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShFdCksanQucHVzaChFdC5uYW1lKSxidFtFdC5uYW1lXT1rdCxKYT0hMSk6Ii8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKEV0PXZyKE90WzBdLCExKSxCbj1mcj0tMSx5ci5z''@;'; put 'put ''LnI9eXIucy5jPTFlNyx5ci5lLnI9eXIuZS5jPTAsa3Q9bWUuZGVuc2U/W106e30sRmk9W10sa3I9W10sSmE9ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1PdFsxXT8tLWVyOisrZXI7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1PdFsx''@;'; put 'put ''XSl7Qm4rPVZuLFZuPTE7YnJlYWt9aWYoKGF0PXZyKE90WzBdLCExKSkuXHU4ODRjXHU1M2Y3P0JuPWF0Llx1ODg0Y1x1NTNmNy0xOi0xPT1CbiYmKEJuPTApLChWbj0rYXRbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihCaT0wO0JpPFZuOysrQmkpZXI+MCYmKGtyW0JuK0Jp''@;'; put 'put ''XT17bGV2ZWw6ZXJ9KTtmcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09T3RbMV0mJisrZnIsbWUuc2hlZXRTdHVicyYmKG1lLmRlbnNlPyhrdFtCbl18fChrdFtCbl09W10pLGt0W0JuXVtmcl09e3Q6InoifSk6a3RbcWkoe3I6Qm4sYzpmcn0pXT17dDoieiJ9KSxy''@;'; put 'put ''cj0iIixYbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpKSsrZnIsVG49dnIoT3RbMF0sITEpLEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLEt0''@;'; put 'put ''PXt0OiJ6Iix2Om51bGx9LFRuLmZvcm11bGEmJjAhPW1lLmNlbGxGb3JtdWxhJiYoS3QuZj1pUyhRcihUbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0oVG4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlwZSJdKSYmKEt0LnQ9InMiLEt0LnY9UXIoVG5bInN0cmluZy12YWx1''@;'; put 'put ''ZSJdfHwiIiksbWUuZGVuc2U/KGt0W0JuXXx8KGt0W0JuXT1bXSksa3RbQm5dW2ZyXT1LdCk6a3RbcWkoe3I6Qm4sYzpmcn0pXT1LdCksZnIrPUJyLTE7ZWxzZSBpZigiLyIhPT1PdFsxXSl7QnI9MTt2YXIgSXM9Vm4/Qm4rVm4tMTpCbjtpZigrK2ZyPnlyLmUuYyYmKHlyLmUuYz1mciksZnI8''@;'; put 'put ''eXIucy5jJiYoeXIucy5jPWZyKSxCbjx5ci5zLnImJih5ci5zLnI9Qm4pLElzPnlyLmUuciYmKHlyLmUucj1JcyksYmk9W10sX2E9e30sS3Q9e3Q6KFRuPXZyKE90WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sbWUuY2VsbEZvcm11''@;'; put 'put ''bGEpaWYoVG4uZm9ybXVsYSYmKFRuLmZvcm11bGE9UXIoVG4uZm9ybXVsYSkpLFRuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKGNhPXBhcnNlSW50KFRuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEw''@;'; put 'put ''KXx8MCxMaT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsS3QuRj1yYShuYT17czp7cjpCbixjOmZyfSxlOntyOkJuK2NhLTEsYzpmcitMaS0xfX0pLF9yLnB1c2goW25hLEt0LkZdKSksVG4uZm9ybXVsYSlLdC5mPWlTKFRuLmZvcm11bGEpO2Vs''@;'; put 'put ''c2UgZm9yKEJpPTA7Qmk8X3IubGVuZ3RoOysrQmkpQm4+PV9yW0JpXVswXS5zLnImJkJuPD1fcltCaV1bMF0uZS5yJiZmcj49X3JbQmldWzBdLnMuYyYmZnI8PV9yW0JpXVswXS5lLmMmJihLdC5GPV9yW0JpXVsxXSk7c3dpdGNoKChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxUblsi''@;'; put 'put ''bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKGNhPXBhcnNlSW50KFRuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLExpPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEZpLnB1c2gobmE9e3M6e3I6Qm4sYzpmcn0sZTp7cjpCbitjYS0xLGM6ZnIrTGkt''@;'; put 'put ''MX19KSksVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLEt0LnQpe2Nhc2UiYm9vbGVhbiI6S3QudD0iYiIsS3Qudj10aShUblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNl''@;'; put 'put ''InBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpLdC50PSJkIixLdC52PU5lKFRuWyJkYXRlLXZhbHVlIl0pLG1lLmNlbGxEYXRlc3x8KEt0LnQ9Im4iLEt0LnY9SmUoS3QudikpLEt0Lno9Im0vZC95''@;'; put 'put ''eSI7YnJlYWs7Y2FzZSJ0aW1lIjpLdC50PSJuIixLdC52PWl0KFRuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLG1lLmNlbGxEYXRlcyYmKEt0LnQ9ImQiLEt0LnY9bG4oS3QudikpLEt0Lno9IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6S3QudD0ibiIsS3Qudj1wYXJzZUZsb2F0KFRuLlx1''@;'; put 'put ''NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PUt0LnQmJiJ0ZXh0IiE9PUt0LnQmJkt0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrS3QudCk7S3QudD0icyIsbnVsbCE9VG5bInN0cmluZy12YWx1ZSJdJiYocnI9''@;'; put 'put ''UXIoVG5bInN0cmluZy12YWx1ZSJdKSxYbj1bXSl9fWVsc2V7aWYoaG89ITEsInMiPT09S3QudCYmKEt0LnY9cnJ8fCIiLFhuLmxlbmd0aCYmKEt0LlI9WG4pLGhvPTA9PVNuKSxqci5UYXJnZXQmJihLdC5sPWpyKSxiaS5sZW5ndGg+MCYmKEt0LmM9YmksYmk9W10pLHJyJiYhMSE9PW1lLmNl''@;'; put 'put ''bGxUZXh0JiYoS3Qudz1yciksaG8mJihLdC50PSJ6IixkZWxldGUgS3QudiksbWUuY2VsbEhUTUwmJihLdC5oPUt0LlI/VnUoS3QuUik6bGEoIiIrS3QudikpLCghaG98fG1lLnNoZWV0U3R1YnMpJiYhKG1lLnNoZWV0Um93cyYmbWUuc2hlZXRSb3dzPD1CbikpZm9yKHZhciBQbj0wO1BuPFZu''@;'; put 'put ''OysrUG4pe2lmKEJyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLG1lLmRlbnNlKWZvcihrdFtCbitQbl18fChrdFtCbitQbl09W10pLGt0W0JuK1BuXVtmcl09MD09UG4/S3Q6cXQoS3QpOy0tQnI+MDspa3RbQm4rUG5dW2ZyK0JyXT1xdChLdCk7ZWxz''@;'; put 'put ''ZSBmb3Ioa3RbcWkoe3I6Qm4rUG4sYzpmcn0pXT1LdDstLUJyPjA7KWt0W3FpKHtyOkJuK1BuLGM6ZnIrQnJ9KV09cXQoS3QpO3lyLmUuYzw9ZnImJih5ci5lLmM9ZnIpfWZyKz0oQnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsQnI9MCxLdD17''@;'; put 'put ''fSxycj0iIixYbj1bXX1qcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0''@;'; put 'put ''eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT1iZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJmJlLnB1c2goW090''@;'; put 'put ''WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1PdFsxXSl7aWYoKFBlPWJlLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZTtfYS50PXJyLFhuLmxlbmd0aCYmKF9hLlI9WG4pLF9hLmE9TG8sYmkucHVzaChfYSl9ZWxzZSIvIiE9PU90WzBdLmNo''@;'; put 'put ''YXJBdChPdFswXS5sZW5ndGgtMikmJmJlLnB1c2goW090WzNdLCExXSk7TG89IiIsT2E9MCxycj0iIixTbj0wLFhuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09T3RbMV0/TG89cGUuc2xpY2UoT2EsT3QuaW5kZXgpOk9hPU90LmluZGV4K090WzBdLmxlbmd0aDticmVhaztjYXNlIm1l''@;'; put 'put ''dGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6''@;'; put 'put ''Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT1i''@;'; put 'put ''ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrUGV9ZWxzZSIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJmJlLnB1c2goW090WzNdLCExXSk7cnI9IiIsU249MCxYbj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5''@;'; put 'put ''bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0''@;'; put 'put ''aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2Fz''@;'; put 'put ''ZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVy''@;'; put 'put ''LXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpj''@;'; put 'put ''YXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpj''@;'; put 'put ''YXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25z''@;'; put 'put ''IjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlz''@;'; put 'put ''dC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUi''@;'; put 'put ''OmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNp''@;'; put 'put ''dHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUt''@;'; put 'put ''bmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNh''@;'; put 'put ''c2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2Fz''@;'; put 'put ''ZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2Fz''@;'; put 'put ''ZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRh''@;'; put 'put ''dGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNs''@;'; put 'put ''IjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJu''@;'; put 'put ''dW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PU90WzFdKXtpZihNaVtZZS5uYW1lXT1ldCwoUGU9YmUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFsw''@;'; put 'put ''XS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiYoZXQ9IiIsWWU9dnIoT3RbMF0sITEpLGJlLnB1c2goW090WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1PdFswXS5zbGljZSgtMik/ayhPdFswXSxzbyk6Ii8iPT1PdFsxXT9rKHBlLnNsaWNlKGlhLE90LmluZGV4K090WzBdLmxl''@;'; put 'put ''bmd0aCksc28pOmlhPU90LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNl''@;'; put 'put ''InNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChiZVtiZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpWZT12cihPdFswXSwhMSksZXQrPU9bT3RbM11dWyJsb25nIj09PVZlLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09T3Rb''@;'; put 'put ''MF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PU90WzFdKXN3aXRjaChiZVtiZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6ZXQrPXBlLnNsaWNlKGN0LE90LmluZGV4KX1lbHNlIGN0PU90LmluZGV4K090WzBdLmxl''@;'; put 'put ''bmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpaaT1veSgoVmU9dnIoT3RbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBXbz17TmFtZTpWZS5uYW1lLFJlZjpaaVswXSsiISIrWmlbMV19O0phJiYoV28uU2hlZXQ9anQubGVuZ3RoKSxGbi5OYW1lcy5wdXNoKFdvKTticmVh''@;'; put 'put ''aztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKGJlW2JlLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09T3RbMV18fFRuJiZUblsic3RyaW5nLXZhbHVlIl0pdnIoT3RbMF0sITEpLFNuPU90LmluZGV4K090WzBdLmxl''@;'; put 'put ''bmd0aDtlbHNle3ZhciBocj1TKHBlLnNsaWNlKFNuLE90LmluZGV4KSwwLHNvKTtycj0ocnIubGVuZ3RoPjA/cnIrIlxuIjoiIikraHJbMF0sWG49aHJbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09T3RbMV0pYnJlYWs7dHJ5e2J0WyhaaT1veSh2cihPdFswXSlbInRh''@;'; put 'put ''cmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpaaVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09T3RbMV0pe2lmKCEoanI9dnIoT3RbMF0sITEpKS5ocmVmKWJyZWFrO2pyLlRhcmdldD1Rcihqci5ocmVmKSxkZWxldGUganIuaHJlZiwiIyI9''@;'; put 'put ''PWpyLlRhcmdldC5jaGFyQXQoMCkmJmpyLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KFppPW95KGpyLlRhcmdldC5zbGljZSgxKSksanIuVGFyZ2V0PSIjIitaaVswXSsiISIrWmlbMV0pOmpyLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKGpyLlRhcmdldD1qci5UYXJnZXQuc2xpY2Uo''@;'; put 'put ''MykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKE90WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1''@;'; put 'put ''ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihtZS5XVEYpdGhyb3cgbmV3IEVycm9yKE90KX19dmFyIFFsPXtTaGVldHM6YnQsU2hlZXROYW1lczpqdCxXb3JrYm9vazpGbn07cmV0dXJuIG1lLmJvb2tTaGVldHMmJmRlbGV0ZSBRbC5TaGVldHMsUWx9fSgpO2Z1bmN0aW9u''@;'; put 'put ''IElJKFMsTyl7cmV0dXJuIFhTKFMsTyl9dmFyIFV6PWZ1bmN0aW9uKCl7dmFyIFM9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5hbWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVh''@;'; put 'put ''ZGVyLz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwv''@;'; put 'put ''b2ZmaWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxPPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK0x1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6''@;'; put 'put ''dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5z''@;'; put 'put ''OmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcv''@;'; put 'put ''MTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRv''@;'; put 'put ''Y3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSsiPlxuIitTKyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBJaStPfX0oKSxQOD1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKHBlLGJlKXtyZXR1cm4gTHIocGUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKFBlKXtyZXR1cm4nPHRleHQ6cyB0ZXh0OmM9IicrUGUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6''@;'; put 'put ''dGFiLz4iKS5yZXBsYWNlKC9cbi9nLGJlPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8dGV4dDpzLz4iKX0sTz1mdW5jdGlvbihwZSl7cmV0dXJuIHBlLm1hcChmdW5jdGlvbihiZSl7dmFy''@;'; put 'put ''IFBlPSIiO3JldHVybiBudWxsIT1iZS5vZHMmJihQZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK2JlLm9kcysnIicpLGJlLnY/Ijx0ZXh0OnNwYW4iK1BlKyI+IitTKGJlLnYsITApKyI8L3RleHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LGs9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAv''@;'; put 'put ''PlxuIixlZT1mdW5jdGlvbihwZSxiZSxQZSl7dmFyIFZlPVtdO1ZlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK0xyKGJlLlNoZWV0TmFtZXNbUGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIFllPTAsZXQ9MCxjdD1NcyhwZVsiIXJlZiJdfHwi''@;'; put 'put ''QTEiKSxFdD1wZVsiIW1lcmdlcyJdfHxbXSxhdD0wLGJ0PUFycmF5LmlzQXJyYXkocGUpO2lmKHBlWyIhY29scyJdKWZvcihldD0wO2V0PD1jdC5lLmM7KytldClWZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyhwZVsiIWNvbHMiXVtldF0/JyB0YWJsZTpzdHlsZS1uYW1l''@;'; put 'put ''PSJjbycrcGVbIiFjb2xzIl1bZXRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9cGVbIiFyb3dzIl18fFtdO2ZvcihZZT0wO1llPGN0LnMucjsrK1llKVZlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1llXT8nIHRhYmxlOnN0eWxl''@;'; put 'put ''LW5hbWU9InJvJytrdFtZZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7WWU8PWN0LmUucjsrK1llKXtmb3IoVmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1llXS5vZHMrJyInOiIi''@;'; put 'put ''KSsiPlxuIiksZXQ9MDtldDxjdC5zLmM7KytldClWZS5wdXNoKGspO2Zvcig7ZXQ8PWN0LmUuYzsrK2V0KXt2YXIgT3Q9ITEsS3Q9e30sVG49IiI7Zm9yKGF0PTA7YXQhPUV0Lmxlbmd0aDsrK2F0KWlmKCEoRXRbYXRdLnMuYz5ldHx8RXRbYXRdLnMucj5ZZXx8RXRbYXRdLmUuYzxldHx8RXRb''@;'; put 'put ''YXRdLmUucjxZZSkpeyhFdFthdF0ucy5jIT1ldHx8RXRbYXRdLnMuciE9WWUpJiYoT3Q9ITApLEt0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09RXRbYXRdLmUuYy1FdFthdF0ucy5jKzEsS3RbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1FdFthdF0uZS5yLUV0W2F0XS5z''@;'; put 'put ''LnIrMTticmVha31pZihPdClWZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBycj1xaSh7cjpZZSxjOmV0fSksU249YnQ/KHBlW1llXXx8W10pW2V0XTpwZVtycl07aWYoU24mJlNuLmYmJihLdFsidGFibGU6Zm9ybXVsYSJdPUxyKFo0''@;'; put 'put ''KFNuLmYpKSxTbi5GJiZTbi5GLnNsaWNlKDAscnIubGVuZ3RoKT09cnIpKXt2YXIgbHI9TXMoU24uRik7S3RbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09bHIuZS5jLWxyLnMuYysxLEt0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPWxyLmUuci1s''@;'; put 'put ''ci5zLnIrMX1pZihTbil7c3dpdGNoKFNuLnQpe2Nhc2UiYiI6VG49U24udj8iVFJVRSI6IkZBTFNFIixLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsS3RbIm9mZmljZTpib29sZWFuLXZhbHVlIl09U24udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlRuPVNuLnd8fFN0''@;'; put 'put ''cmluZyhTbi52fHwwKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLEt0WyJvZmZpY2U6dmFsdWUiXT1Tbi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOlRuPVNuLnYsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpUbj1Tbi53fHxOZShT''@;'; put 'put ''bi52KS50b0lTT1N0cmluZygpLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixLdFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1OZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpWZS5wdXNoKGspO2NvbnRpbnVlfW51bGwh''@;'; put 'put ''PVNuLm9kcyYmIUt0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihLdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrU24ub2RzKTt2YXIgWG49IVNuLlJ8fFNuLmwmJlNuLmwuVGFyZ2V0P1MoVG4pOk8oU24uUik7aWYoU24ubCYmU24ubC5UYXJnZXQpe3ZhciBCbj1Tbi5sLlRhcmdldDsiIyIhPShC''@;'; put 'put ''bj0iIyI9PUJuLmNoYXJBdCgwKT8iIyIrZ0QoQm4uc2xpY2UoMSkpOkJuKS5jaGFyQXQoMCkmJiFCbi5tYXRjaCgvXlx3KzovKSYmKEJuPSIuLi8iK0JuKSxYbj1QcigidGV4dDphIixYbix7InhsaW5rOmhyZWYiOkJuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfVZlLnB1c2goIiAgICAgICAg''@;'; put 'put ''ICAiK1ByKCJ0YWJsZTp0YWJsZS1jZWxsIixQcigidGV4dDpwIixYbix7fSksS3QpKyJcbiIpfWVsc2UgVmUucHVzaChrKX19VmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBWZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksVmUuam9pbigiIil9''@;'; put 'put ''LHNlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oYmUsUGUpe3ZhciBWZT1bSWldLFllPUx1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFi''@;'; put 'put ''bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4''@;'; put 'put ''bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5r''@;'; put 'put ''IjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNp''@;'; put 'put ''czpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1l''@;'; put 'put ''bnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0''@;'; put 'put ''aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEu''@;'; put 'put ''MCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNj''@;'; put 'put ''aGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVu''@;'; put 'put ''dDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIs''@;'; put 'put ''InhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3Vt''@;'; put 'put ''ZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZp''@;'; put 'put ''Y2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksZXQ9THUoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFt''@;'; put 'put ''ZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09UGUuYm9va1R5cGU/KFZlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1llK2V0KyI+XG4i''@;'; put 'put ''KSxWZS5wdXNoKFI2KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOlZlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrWWUrIj5cbiIpLGZ1bmN0aW9uKHBlLGJlKXt2YXIgUGU9W10sVmU9e307UGUucHVzaCgiIDxvZmZpY2U6YXV0b21h''@;'; put 'put ''dGljLXN0eWxlcz5cbiIpLFBlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxQZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51''@;'; put 'put ''bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxQZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksUGUucHVzaCgi''@;'; put 'put ''ICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFllPTA7YmUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIWNvbHMiXS5sZW5ndGg7''@;'; put 'put ''KytidClpZihhdFsiIWNvbHMiXVtidF0pe3ZhciBqdD1hdFsiIWNvbHMiXVtidF07aWYobnVsbD09anQud2lkdGgmJm51bGw9PWp0LndweCYmbnVsbD09anQud2NoKWNvbnRpbnVlO1EwKGp0KSxqdC5vZHM9WWU7dmFyIGt0PWF0WyIhY29scyJdW2J0XS53cHgrInB4IjtQZS5wdXNoKCcgIDxz''@;'; put 'put ''dHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrWWUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicp''@;'; put 'put ''LFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrWWV9fSk7dmFyIGV0PTA7YmUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIXJv''@;'; put 'put ''d3MiXS5sZW5ndGg7KytidClpZihhdFsiIXJvd3MiXVtidF0pe2F0WyIhcm93cyJdW2J0XS5vZHM9ZXQ7dmFyIGp0PWF0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrZXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxu''@;'; put 'put ''JyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytqdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK2V0fX0pLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxl''@;'; put 'put ''Om5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLFBlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLFBlLnB1c2go''@;'; put 'put ''IiAgPC9zdHlsZTpzdHlsZT5cbiIpLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBjdD0y''@;'; put 'put ''O2V0PTAsYmUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQpZm9yKHZhciBidD0wLGp0PTAsa3Q9TXMoYXRbIiFyZWYiXSksT3Q9QXJyYXkuaXNBcnJheShhdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihq''@;'; put 'put ''dD0wO2p0PD1rdC5lLmM7KytqdCl7dmFyIEt0PXFpKHtyOmJ0LGM6anR9KSxUbj1PdD8oYXRbYnRdfHxbXSlbanRdOmF0W0t0XTtpZihUbiYmKFRuLnN8fFRuLlIpKXt2YXIgcnI9W107VG4ucyYmcnIucHVzaChbVG4sITBdKSxUbi5SJiZUbi5SLmZvckVhY2goZnVuY3Rpb24oU24pe1NuJiZT''@;'; put 'put ''bi5zJiZyci5wdXNoKFtTbiwhMV0pfSkscnIuZm9yRWFjaChmdW5jdGlvbihTbil7dmFyIGxyPVNuWzBdLFhuPWxyLnMsQm49IiIsZnI9eyJzdHlsZTpuYW1lIjooU25bMV0/ImNlIjoiVCIpK2N0LCJzdHlsZTpmYW1pbHkiOlNuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O1NuWzFdJiYoZnJb''@;'; put 'put ''InN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGZyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgeXI9e30sZXI9ITEsTWk9e30sRmk9ITEsbmE9e30sY2E9ITE7aWYoWG4uY29sb3ImJihNaVsiZm86Y29sb3IiXT0iIyIrUDAoWG4uY29sb3IucmdiKSxGaT0h''@;'; put 'put ''MCksWG4uc3omJihNaVsiZm86Zm9udC1zaXplIl09WG4uc3orInB0IixGaT0hMCksWG4uYm9sZCYmKE1pWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixGaT0hMCksWG4uaXRhbGljJiYoTWlbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixGaT0hMCksWG4ubmFtZSYmKFZlW1huLm5hbWVdfHwo''@;'; put 'put ''VmVbWG4ubmFtZV09WG4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK1huLm5hbWUrIiZhcG9zOyI6WG4ubmFtZSksTWlbInN0eWxlOmZvbnQtbmFtZSJdPVhuLm5hbWUsRmk9ITApLFhuLnN0cmlrZSYmKE1pWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsTWlbInN0''@;'; put 'put ''eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixGaT0hMCksWG4udW5kZXJsaW5lJiYoTWlbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixNaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsTWlbInN0eWxlOnRleHQtdW5kZXJsaW5l''@;'; put 'put ''LWNvbG9yIl09ImZvbnQtY29sb3IiLEZpPSEwKSxTblsxXSl7aWYoWG4uYWxpZ25tZW50KXt2YXIgTGk9WG4uYWxpZ25tZW50O0xpLndyYXBUZXh0JiYoeXJbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLGVyPSEwKSxMaS52ZXJ0aWNhbCYmKHlyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJj''@;'; put 'put ''ZW50ZXIiPT1MaS52ZXJ0aWNhbD8ibWlkZGxlIjpMaS52ZXJ0aWNhbCxlcj0hMCksc2VbTGkuaG9yaXpvbnRhbF0mJihuYVsiZm86dGV4dC1hbGlnbiJdPXNlW0xpLmhvcml6b250YWxdLGNhPSEwKX1Ybi5mZ0NvbG9yJiYoeXJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrUDAoWG4uZmdD''@;'; put 'put ''b2xvci5yZ2IpLGVyPSEwKX1lciYmKEJuKz1Qcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLHlyKSksRmkmJihCbis9UHIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCxNaSkpLGNhJiYoQm4rPVByKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxuYSkp''@;'; put 'put ''LFBlLnB1c2goIiAgIitQcigic3R5bGU6c3R5bGUiLEJuLGZyKSsiXG4iKSxsci5vZHM9Y3QsKytjdH0pfX19KSxQZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBFdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitSZShWZSkubWFwKGZ1bmN0aW9uKGF0''@;'; put 'put ''KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrYXQrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK1ZlW2F0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3BlLnB1c2goRXQpLHBlLnB1c2goUGUuam9pbigiIikpfShWZSxiZSks''@;'; put 'put ''VmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxWZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgY3Q9MDtjdCE9YmUuU2hlZXROYW1lcy5sZW5ndGg7KytjdClWZS5wdXNoKGVlKGJlLlNoZWV0c1tiZS5TaGVldE5hbWVzW2N0XV0sYmUsY3QpKTtyZXR1cm4g''@;'; put 'put ''VmUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksVmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksVmUucHVzaCgiZm9kcyI9PVBlLmJvb2tUeXBlPyI8L29mZmljZTpkb2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLFZlLmpvaW4oIiIpfX0oKTtm''@;'; put 'put ''dW5jdGlvbiBSSShTLE8pe2lmKCJmb2RzIj09Ty5ib29rVHlwZSlyZXR1cm4gUDgoUyxPKTt2YXIgaz1oaSgpLEs9IiIsZWU9W10sc2U9W107cmV0dXJuIGpuKGssSz0ibWltZXR5cGUiLCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0Iiksam4oayxLPSJj''@;'; put 'put ''b250ZW50LnhtbCIsUDgoUyxPKSksZWUucHVzaChbSywidGV4dC94bWwiXSksc2UucHVzaChbSywiQ29udGVudEZpbGUiXSksam4oayxLPSJzdHlsZXMueG1sIixVeihTLE8pKSxlZS5wdXNoKFtLLCJ0ZXh0L3htbCJdKSxzZS5wdXNoKFtLLCJTdHlsZXNGaWxlIl0pLGpuKGssSz0ibWV0YS54''@;'; put 'put ''bWwiLElpK1I2KCkpLGVlLnB1c2goW0ssInRleHQveG1sIl0pLHNlLnB1c2goW0ssIk1ldGFkYXRhRmlsZSJdKSxqbihrLEs9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24gUHUoUyl7dmFyIE89W0lpXTtPLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8w''@;'; put 'put ''Mi8yMi1yZGYtc3ludGF4LW5zIyI+XG4nKTtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spTy5wdXNoKGV1KFNba11bMF0sU1trXVsxXSkpLE8ucHVzaChuMigiIixTW2tdWzBdKSk7cmV0dXJuIE8ucHVzaChldSgiIiwiRG9jdW1lbnQiLCJwa2ciKSksTy5wdXNoKCI8L3JkZjpSREY+Iiks''@;'; put 'put ''Ty5qb2luKCIiKX0oc2UpKSxlZS5wdXNoKFtLLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLGpuKGssSz0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlvbiB4YyhTKXt2YXIgTz1bSWldO08ucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFt''@;'; put 'put ''ZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLE8ucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0i''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spTy5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJytTW2tdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9''@;'; put 'put ''IicrU1trXVsxXSsnIi8+XG4nKTtyZXR1cm4gTy5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLE8uam9pbigiIil9KGVlKSksa31mdW5jdGlvbiBPZihTKXtyZXR1cm4gZnVuY3Rpb24oayxLKXt2YXIgZWU9ZnVuY3Rpb24gWnooUyxPKXtpZighTylyZXR1cm4gMDt2YXIgaz1TLlNoZWV0''@;'; put 'put ''TmFtZXMuaW5kZXhPZihPKTtpZigtMT09ayl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitPKTtyZXR1cm4ga30oayxLLnNoZWV0KTtyZXR1cm4gUy5mcm9tX3NoZWV0KGsuU2hlZXRzW2suU2hlZXROYW1lc1tlZV1dLEssayl9fXZhciBXej1PZihtZCksWXo9T2Yoe2Zyb21f''@;'; put 'put ''c2hlZXQ6QzB9KSxHej1PZih0eXBlb2YgY0M8InUiP2NDOnt9KSx2ZD1PZih0eXBlb2YgRHY8InUiP0R2Ont9KSxMST1PZih0eXBlb2YgajM8InUiP2ozOnt9KSxPST1PZih0eXBlb2YgVnY8InUiP1Z2Ont9KSwkej1PZih7ZnJvbV9zaGVldDpqSX0pLGVyZT1PZih0eXBlb2YgQjM8InUiP0Iz''@;'; put 'put ''Ont9KSxQST1PZih0eXBlb2YgSzY8InUiP0s2Ont9KSxXbD1iKDkxNDI2KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93c2VyaWZ5O2lmKCFXbCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBucD17U0hBNTEyOiJzaGE1''@;'; put 'put ''MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1bmN0aW9uIG1jKFMsTyl7c3dpdGNoKE89KE98fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4g''@;'; put 'put ''bmV3IFdsLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcgV2wuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyBXbC5jcmVhdGVIYXNoKCJtZDIiKS51''@;'; put 'put ''cGRhdGUoUykuZGlnZXN0KCk7ZGVmYXVsdDppZihucFtPXSlyZXR1cm4gbmV3IFdsLmNyZWF0ZUhhc2gobnBbT10pLnVwZGF0ZShTKS5kaWdlc3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrTyl9fWZ1bmN0aW9uIFk0KFMsTyxrKXtpZigicmMyIj09''@;'; put 'put ''ayl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBLPVdsLmNyZWF0ZURlY2lwaGVyaXYoa3x8ImFlcy0yNTYtY2JjIixTLE8pO3JldHVybiBLLnNldEF1dG9QYWRkaW5nKCExKSxLfWZ1bmN0aW9uIEY4KFMpe3JldHVyblsoIjAwIisoMjU1JlMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgi''@;'; put 'put ''MDAiKyhTPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBHND1mdW5jdGlvbihTLE8sayl7Zm9yKHZh''@;'; put 'put ''ciBLPSJzdHJpbmciPT10eXBlb2YgTz9CdWZmZXIuZnJvbShPLCJoZXgiKTpPLGVlPSJzdHJpbmciPT10eXBlb2YgUz9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKTpTLHNlPSJzdHJpbmciPT10eXBlb2Ygaz9CdWZmZXIuZnJvbShrLCJoZXgiKTprLG1lPW1jKGVl''@;'; put 'put ''LCJNRDUiKSxwZT1CdWZmZXIuY29uY2F0KFttZS5zbGljZSgwLDUpLEtdKSxiZT0wO2JlPDQ7KytiZSlwZT1CdWZmZXIuY29uY2F0KFtwZSxwZV0pO3ZhciBQZT1tYyhwZSwiTUQ1Iik7cmV0dXJuKG1jKEJ1ZmZlci5jb25jYXQoW1BlLnNsaWNlKDAsNSksc2VdKSwiTUQ1IikudG9TdHJpbmco''@;'; put 'put ''ImhleCIpKyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLnNsaWNlKDAsMzIpfSwkND1mdW5jdGlvbihTLE8sayl7dmFyIEs9InN0cmluZyI9PXR5cGVvZiBPP0J1ZmZlci5mcm9tKE8sImhleCIpOk8sZWU9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUu''@;'; put 'put ''dXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsc2U9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssbWU9bWMoQnVmZmVyLmNvbmNhdChbSyxlZV0pLCJTSEExIik7cmV0dXJuIG1jKEJ1ZmZlci5jb25jYXQoW21lLHNlXSksIlNIQTEiKX0sWHo9ZnVuY3Rpb24oKXtmdW5j''@;'; put 'put ''dGlvbiBPKCl7fU8ucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKGF0KXt0aGlzLl9pPTA7dmFyIGJ0PXRoaXMuX2J1aWxkKGF0LCIiKTtyZXR1cm4iIj09PWJ0PyIiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JytidH0sTy5wcm90b3R5''@;'; put 'put ''cGUuX2J1aWxkPWZ1bmN0aW9uKGF0LGJ0KXtpZih0aGlzLl9pKyslMWU2PT0wJiYodGhpcy5fYz1idFswXSksbnVsbD09YXR8fCJvYmplY3QiIT10eXBlb2YgYXQmJiJmdW5jdGlvbiIhPXR5cGVvZiBhdCludWxsIT1hdCYmKGJ0Kz1mdW5jdGlvbiBTKGF0LGJ0KXtyZXR1cm4gbnVsbD09YXR8''@;'; put 'put ''fChhdD1hdC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxidCYmKGF0PWF0LnJlcGxhY2UoLyIvZywiJnF1b3Q7IikpKSxhdH0oYXQpKTtlbHNle2lmKCFhdC5uYW1lKXRocm93IG5ldyBFcnJvcigiWE1M''@;'; put 'put ''IG5vZGUgZG9lcyBub3QgaGF2ZSBuYW1lOiAiK0pTT04uc3RyaW5naWZ5KGF0KSk7YnQrPSI8IithdC5uYW1lO3ZhciBqdD10aGlzO2J0Kz1hdC5hdHRyaWJ1dGVzJiZMdShhdC5hdHRyaWJ1dGVzKXx8IiIsQXJyYXkuaXNBcnJheShhdC5jaGlsZHJlbikmJjAhPWF0LmNoaWxkcmVuLmxlbmd0''@;'; put 'put ''aD8oYnQrPSI+IixhdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtidD1qdC5fYnVpbGQoa3QsYnQpfSksYnQrPSI8LyIrYXQubmFtZSsiPiIpOmJ0Kz0iLz4ifXJldHVybiBidH07dmFyIGs9QnVmZmVyLmZyb20oWzQsMCw0LDAsNjQsMCwwLDBdKSxzZT17ZGF0YUludGVncml0eTp7''@;'; put 'put ''aG1hY0tleTpCdWZmZXIuZnJvbShbOTUsMTc4LDE3MywxLDEyLDE4NSwyMjUsMjQ2XSksaG1hY1ZhbHVlOkJ1ZmZlci5mcm9tKFsxNjAsMTAzLDEyNywyLDE3OCw0NCwxMzIsNTFdKX0sa2V5OkJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4LDIxNF0pLHZlcmlmaWVySGFz''@;'; put 'put ''aDp7aW5wdXQ6QnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSksdmFsdWU6QnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSl9fTtmdW5jdGlvbiBtZShhdCxidCxqdCxrdCxPdCxLdCl7dmFyIFRuPWJ0LnRvTG93ZXJDYXNlKCkrIi0iKzgq''@;'; put 'put ''a3QubGVuZ3RoO2lmKCJDaGFpbmluZ01vZGVDQkMiIT09anQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNpcGhlciBjaGFpbmluZzogIitqdCk7dmFyIHJyPVdsW2F0PyJjcmVhdGVDaXBoZXJpdiI6ImNyZWF0ZURlY2lwaGVyaXYiXShUbis9Ii1jYmMiLGt0LE90KTtyci5zZXRBdXRvUGFk''@;'; put 'put ''ZGluZyghMSk7dmFyIFNuPXJyLnVwZGF0ZShLdCksbHI9W1NuXTt0cnl7dmFyIFhuPXJyLmZpbmFsKCk7bHIucHVzaChYbil9Y2F0Y2h7fXJldHVybiBCdWZmZXIuY29uY2F0KGxyKX1mdW5jdGlvbiBwZShhdCl7YXQ9YXQudG9Mb3dlckNhc2UoKTt2YXIgYnQ9W10uc2xpY2UuY2FsbChhcmd1''@;'; put 'put ''bWVudHMsMSk7aWYoV2wuZ2V0SGFzaGVzKCkuaW5kZXhPZihhdCk8MCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrYXQpO3ZhciBrdD1XbC5jcmVhdGVIYXNoKGF0KTtyZXR1cm4ga3QudXBkYXRlKEJ1ZmZlci5jb25jYXQoYnQpKSxrdC5kaWdlc3QoKX1m''@;'; put 'put ''dW5jdGlvbiBiZShhdCxidCxqdCxrdCl7Im51bWJlciI9PXR5cGVvZiBrdCYmKGt0PVBlKGt0KSk7dmFyIE90PXBlKGF0LGJ0LGt0KTtpZihPdC5sZW5ndGg8anQpe3ZhciBLdD1CdWZmZXIuYWxsb2MoanQsNTQpO090LmNvcHkoS3QpLE90PUt0fWVsc2UgT3QubGVuZ3RoPmp0JiYoT3Q9T3Qu''@;'; put 'put ''c2xpY2UoMCxqdCkpO3JldHVybiBPdH1mdW5jdGlvbiBQZShhdCxidCl7dmFyIGp0PUJ1ZmZlci5hbGxvYyhidHx8NCk7cmV0dXJuIGp0LndyaXRlVUludDMyTEUoYXQsMCksanR9ZnVuY3Rpb24gVmUoYXQsYnQsanQsa3QsT3QsS3Qpe2Zvcih2YXIgcnI9cGUoYnQsanQsQnVmZmVyLmZyb20o''@;'; put 'put ''YXQsInV0ZjE2bGUiKSksU249MDtTbjxrdDtTbisrKXJyPXBlKGJ0LFBlKFNuKSxycik7dmFyIFhuPU90Lzg7aWYoKHJyPXBlKGJ0LHJyLEt0KSkubGVuZ3RoPFhuKXt2YXIgQm49QnVmZmVyLmFsbG9jKFhuLDU0KTtyci5jb3B5KEJuKSxycj1Cbn1lbHNlIHJyLmxlbmd0aD5YbiYmKHJyPXJy''@;'; put 'put ''LnNsaWNlKDAsWG4pKTtyZXR1cm4gcnJ9cmV0dXJuIFdsLnJhbmRvbUJ5dGVzfHwoV2wucmFuZG9tQnl0ZXM9ZnVuY3Rpb24oYXQpe2Zvcih2YXIgYnQ9QnVmZmVyLmFsbG9jKGF0KSxqdD0wO2p0PGF0OysranQpYnRbanRdPU1hdGguZmxvb3IoMjU2Kk1hdGgucmFuZG9tKCkpO3JldHVybiBi''@;'; put 'put ''dH0pLGZ1bmN0aW9uIEV0KGF0LGJ0KXtpZigic3RyaW5nIj09dHlwZW9mIGF0KXJldHVybiBFdChCdWZmZXIuZnJvbShhdCwiYmluYXJ5IiksYnQpO3ZhciBqdD1XbC5yYW5kb21CeXRlcygzMiksa3Q9e3BhY2thZ2U6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hh''@;'; put 'put ''aW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6V2wucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LGtleUJpdHM6OCpqdC5sZW5ndGh9LGtleTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01v''@;'; put 'put ''ZGVDQkMiLHNhbHRWYWx1ZTpXbC5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsc3BpbkNvdW50OjEsa2V5Qml0czoyNTZ9fSxPdD1mdW5jdGlvbiBZZShhdCxidCxqdCxrdCxPdCxLdCxUbixycil7Zm9yKHZhciBTbj1bXSxs''@;'; put 'put ''cj1hdD8wOjgsWG49MCxCbj0wLGZyPTA7ZnI8cnIubGVuZ3RoOyl7KGZyPShCbj1mcikrNDA5Nik+cnIubGVuZ3RoJiYoZnI9cnIubGVuZ3RoKTt2YXIgeXI9cnIuc2xpY2UoQm4rbHIsZnIrbHIpLGVyPXlyLmxlbmd0aCVPdDtlciYmKHlyPUJ1ZmZlci5jb25jYXQoW3lyLEJ1ZmZlci5hbGxv''@;'; put 'put ''YyhPdC1lcildKSk7dmFyIEZpPW1lKGF0LGJ0LGp0LFRuLGJlKGt0LEt0LE90LFhuKSx5cik7U24ucHVzaChGaSksWG4rK312YXIgbmE9QnVmZmVyLmNvbmNhdChTbik7aWYoYXQpbmE9QnVmZmVyLmNvbmNhdChbUGUocnIubGVuZ3RoLDgpLG5hXSk7ZWxzZXt2YXIgY2E9cnIucmVhZFVJbnQz''@;'; put 'put ''MkxFKDApO25hPW5hLnNsaWNlKDAsY2EpfXJldHVybiBuYX0oITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5ibG9ja1NpemUsa3QucGFja2FnZS5zYWx0VmFsdWUsanQsYXQp''@;'; put 'put ''LEt0PVdsLnJhbmRvbUJ5dGVzKDY0KSxUbj1iZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5zYWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsc2UuZGF0YUludGVncml0eS5obWFjS2V5KSxycj1tZSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNr''@;'; put 'put ''YWdlLmNpcGhlckNoYWluaW5nLGp0LFRuLEt0KSxTbj1mdW5jdGlvbiBldChhdCxidCl7YXQ9YXQudG9Mb3dlckNhc2UoKTt2YXIganQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7aWYoV2wuZ2V0SGFzaGVzKCkuaW5kZXhPZihhdCk8MCl0aHJvdyBuZXcgRXJyb3IoIkhNQUMgYWxnb3Jp''@;'; put 'put ''dGhtICciK2F0KyInIG5vdCBzdXBwb3J0ZWQhIik7dmFyIE90PVdsLmNyZWF0ZUhtYWMoYXQsYnQpO3JldHVybiBPdC51cGRhdGUoQnVmZmVyLmNvbmNhdChqdCkpLE90LmRpZ2VzdCgpfShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sS3QsT3QpLGxyPWJlKGt0LnBhY2thZ2UuaGFzaEFsZ29y''@;'; put 'put ''aXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxzZS5kYXRhSW50ZWdyaXR5LmhtYWNWYWx1ZSksWG49bWUoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxqdCxscixTbik7a3QuZGF0YUludGVncml0eT17''@;'; put 'put ''ZW5jcnlwdGVkSG1hY0tleTpycixlbmNyeXB0ZWRIbWFjVmFsdWU6WG59O3ZhciBCbj1WZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsc2Uua2V5KTtrdC5rZXkuZW5jcnlwdGVkS2V5VmFsdWU9bWUoITAs''@;'; put 'put ''a3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsQm4sa3Qua2V5LnNhbHRWYWx1ZSxqdCk7dmFyIGZyPVdsLnJhbmRvbUJ5dGVzKDE2KSx5cj1WZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5''@;'; put 'put ''LmtleUJpdHMsc2UudmVyaWZpZXJIYXNoLmlucHV0KTtrdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ9bWUoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcseXIsa3Qua2V5LnNhbHRWYWx1ZSxmcik7dmFyIGVyPXBlKGt0LmtleS5oYXNoQWxn''@;'; put 'put ''b3JpdGhtLGZyKSxNaT1WZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsc2UudmVyaWZpZXJIYXNoLnZhbHVlKTtrdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWU9bWUoITAsa3Qua2V5LmNpcGhl''@;'; put 'put ''ckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsTWksa3Qua2V5LnNhbHRWYWx1ZSxlcik7dmFyIEZpPWZ1bmN0aW9uIGN0KGF0KXt2YXIgYnQ9e25hbWU6ImVuY3J5cHRpb24iLGF0dHJpYnV0ZXM6e3htbG5zOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2''@;'; put 'put ''L2VuY3J5cHRpb24iLCJ4bWxuczpwIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiLCJ4bWxuczpjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvY2VydGlmaWNhdGUi''@;'; put 'put ''fSxjaGlsZHJlbjpbe25hbWU6ImtleURhdGEiLGF0dHJpYnV0ZXM6e3NhbHRTaXplOmF0LnBhY2thZ2Uuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6YXQucGFja2FnZS5ibG9ja1NpemUsa2V5Qml0czphdC5wYWNrYWdlLmtleUJpdHMsaGFzaFNpemU6YXQucGFja2FnZS5oYXNoU2l6ZSxj''@;'; put 'put ''aXBoZXJBbGdvcml0aG06YXQucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sY2lwaGVyQ2hhaW5pbmc6YXQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmF0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6YXQucGFja2FnZS5zYWx0VmFsdWUudG9TdHJpbmcoImJh''@;'; put 'put ''c2U2NCIpfX0se25hbWU6ImRhdGFJbnRlZ3JpdHkiLGF0dHJpYnV0ZXM6e2VuY3J5cHRlZEhtYWNLZXk6YXQuZGF0YUludGVncml0eS5lbmNyeXB0ZWRIbWFjS2V5LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRIbWFjVmFsdWU6YXQuZGF0YUludGVncml0eS5lbmNyeXB0ZWRIbWFjVmFs''@;'; put 'put ''dWUudG9TdHJpbmcoImJhc2U2NCIpfX0se25hbWU6ImtleUVuY3J5cHRvcnMiLGNoaWxkcmVuOlt7bmFtZToia2V5RW5jcnlwdG9yIixhdHRyaWJ1dGVzOnt1cmk6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIn0sY2hpbGRy''@;'; put 'put ''ZW46W3tuYW1lOiJwOmVuY3J5cHRlZEtleSIsYXR0cmlidXRlczp7c3BpbkNvdW50OmF0LmtleS5zcGluQ291bnQsc2FsdFNpemU6YXQua2V5LnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmF0LmtleS5ibG9ja1NpemUsa2V5Qml0czphdC5rZXkua2V5Qml0cyxoYXNoU2l6ZTphdC5rZXku''@;'; put 'put ''aGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmF0LmtleS5jaXBoZXJBbGdvcml0aG0sY2lwaGVyQ2hhaW5pbmc6YXQua2V5LmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06YXQua2V5Lmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmF0LmtleS5zYWx0VmFsdWUudG9TdHJpbmcoImJhc2U2NCIp''@;'; put 'put ''LGVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0OmF0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dC50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWU6YXQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNy''@;'; put 'put ''eXB0ZWRLZXlWYWx1ZTphdC5rZXkuZW5jcnlwdGVkS2V5VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX1dfV19XX0sa3Q9KG5ldyBPKS5idWlsZChidCk7cmV0dXJuIEJ1ZmZlci5jb25jYXQoW2ssQnVmZmVyLmZyb20oa3QsInV0ZjgiKV0pfShrdCksbmE9dmUudXRpbHMuY2ZiX25ldygpO3Jl''@;'; put 'put ''dHVybiB2ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0aW9uSW5mbyIsRmkpLHZlLnV0aWxzLmNmYl9hZGQobmEsIkVuY3J5cHRlZFBhY2thZ2UiLE90KSxuYX19KCk7ZnVuY3Rpb24gSEkoUyl7cmV0dXJuIGZ1bmN0aW9uKGspe2Zvcih2YXIgSz0wO0shPVMubGVuZ3RoOysrSyl7dmFyIGVl''@;'; put 'put ''PVNbS107dm9pZCAwPT09a1tlZVswXV0mJihrW2VlWzBdXT1lZVsxXSksIm4iPT09ZWVbMl0mJihrW2VlWzBdXT1OdW1iZXIoa1tlZVswXV0pKX19fXZhciBOST1mdW5jdGlvbihTKXtISShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0''@;'; put 'put ''eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxb''@;'; put 'put ''InBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKFMpLFMuYm9va0ltYWdlcyYmKFMuY2VsbFN0eWxlcz0hMCl9LFBmPUhJKFtbImNlbGxEYXRlcyIsITFdLFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RGIiwhMV1dKTtmdW5jdGlvbiBu''@;'; put 'put ''cmUoUyl7cmV0dXJuIEthLldTLmluZGV4T2YoUyk+LTE/InNoZWV0IjpLYS5DUyYmUz09S2EuQ1M/ImNoYXJ0IjpLYS5EUyYmUz09S2EuRFM/ImRpYWxvZyI6S2EuTVMmJlM9PUthLk1TPyJtYWNybyI6UyYmUy5sZW5ndGg/Uzoic2hlZXQifXZhciBQeT1bXTtmdW5jdGlvbiBiMihTLE8sayxL''@;'; put 'put ''LGVlLHNlLG1lLHBlLGJlLFBlLFZlLFllKXt0cnl7c2VbS109eWYobnIoUyxrLCEwKSxPKTt2YXIgY3QsZXQ9VHQoUyxPKTtzd2l0Y2gocGUpe2Nhc2Uic2hlZXQiOmN0PWZ1bmN0aW9uIHl6KFMsTyxrLEssZWUsc2UsbWUscGUpe3JldHVybiIuYmluIj09PU8uc2xpY2UoLTQpP2Z1bmN0aW9u''@;'; put 'put ''IFFqKFMsTyxrLEssZWUsc2UsbWUpe2lmKCFTKXJldHVybiBTO3ZhciBwZT1PfHx7fTtLfHwoSz17IiFpZCI6e319KSxudWxsIT1vZSYmbnVsbD09cGUuZGVuc2UmJihwZS5kZW5zZT1vZSk7dmFyIFBlLEV0LGF0LGJ0LGp0LGt0LE90LEt0LFRuLHJyLGJlPXBlLmRlbnNlP1tdOnt9LFZlPXtz''@;'; put 'put ''OntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFllPVtdLGV0PSExLGN0PSExLFNuPVtdO3BlLmJpZmY9MTIscGVbIiFyb3ciXT0wO3ZhciBscj0wLFhuPSExLEJuPVtdLGZyPXt9LHlyPXBlLnN1cGJvb2tzfHxlZS5zdXBib29rc3x8W1tdXTtpZih5ci5zaGFyZWRmPWZyLHlyLmFycmF5Zj1C''@;'; put 'put ''bix5ci5TaGVldE5hbWVzPWVlLlNoZWV0TmFtZXN8fGVlLlNoZWV0cy5tYXAoZnVuY3Rpb24oTGkpe3JldHVybiBMaS5uYW1lfSksIXBlLnN1cGJvb2tzJiYocGUuc3VwYm9va3M9eXIsZWUuTmFtZXMpKWZvcih2YXIgZXI9MDtlcjxlZS5OYW1lcy5sZW5ndGg7Kytlcil5clswXVtlcisxXT1l''@;'; put 'put ''ZS5OYW1lc1tlcl07dmFyIE1pPVtdLEZpPVtdLG5hPSExO2lmKEw4WzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOkZqfSx1cihTLGZ1bmN0aW9uKGtyLFZuLEJyKXtpZighY3Qpc3dpdGNoKEJyKXtjYXNlIDE0ODpQZT1rcjticmVhaztjYXNlIDA6RXQ9a3IscGUuc2hlZXRSb3dzJiZwZS5zaGVl''@;'; put 'put ''dFJvd3M8PUV0LnImJihjdD0hMCksVG49amkoanQ9RXQucikscGVbIiFyb3ciXT1FdC5yLChrci5oaWRkZW58fGtyLmhwdHx8bnVsbCE9a3IubGV2ZWwpJiYoa3IuaHB0JiYoa3IuaHB4PXNoKGtyLmhwdCkpLEZpW2tyLnJdPWtyKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6''@;'; put 'put ''Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2goYXQ9e3Q6a3JbMl19LGtyWzJdKXtjYXNlIm4iOmF0LnY9a3JbMV07YnJlYWs7Y2FzZSJzIjphdC52PShLdD1sOFtr''@;'; put 'put ''clsxXV0pLnQscGUuY2VsbFN0eWxlcyYmKGF0LlI9ZnVuY3Rpb24gRVYoUyxPKXtpZihTLlIpcmV0dXJuIFMuUjtpZihPJiZPLkZvbnRzJiYoMSE9Uy5yLmxlbmd0aHx8MCE9Uy5yWzBdLmljaCkpe1MuUj1bXTt2YXIgaz0wLEs9Uy5yW2tdLGVlPVMucltrKzFdO2ZvcihLLmljaD4wJiZTLlIu''@;'; put 'put ''cHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoMCxLLmljaCl9KTtrPFMuci5sZW5ndGgtMTsrK2spUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKChLPVMucltrXSkuaWNoLChlZT1TLnJbaysxXSkuaWNoKSxzOk8uRm9udHNbSy5pZm50XX0pO3JldHVybiBTLlIucHVzaCh7dDoicyIsdjpTLnQu''@;'; put 'put ''c2xpY2UoKGVlfHxLKS5pY2gpLHM6Ty5Gb250c1soZWV8fEspLmlmbnRdfSksUy5SfX0oS3QsbWUpKTticmVhaztjYXNlImIiOmF0LnY9ISFrclsxXTticmVhaztjYXNlImUiOmF0LnY9a3JbMV0sITEhPT1wZS5jZWxsVGV4dCYmKGF0Lnc9TWNbYXQudl0pO2JyZWFrO2Nhc2Uic3RyIjphdC50''@;'; put 'put ''PSJzIixhdC52PWtyWzFdfWlmKChidD1tZS5DZWxsWGZba3JbMF0uaVN0eWxlUmVmXSkmJkozKGF0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxtZSkscGUuY2VsbFN0eWxlcyYmYXQucyYmYnQuYWxpZ25tZW50JiYoYXQucy5hbGlnbm1lbnQ9cXQo''@;'; put 'put ''YnQuYWxpZ25tZW50KSksa3Q9LTE9PWtyWzBdLmM/a3QrMTprclswXS5jLHBlLmRlbnNlPyhiZVtqdF18fChiZVtqdF09W10pLGJlW2p0XVtrdF09YXQpOmJlW1RhKGt0KStUbl09YXQscGUuY2VsbEZvcm11bGEpe2ZvcihYbj0hMSxscj0wO2xyPEJuLmxlbmd0aDsrK2xyKXt2YXIgX3I9Qm5b''@;'; put 'put ''bHJdO0V0LnI+PV9yWzBdLnMuciYmRXQucjw9X3JbMF0uZS5yJiZrdD49X3JbMF0ucy5jJiZrdDw9X3JbMF0uZS5jJiYoYXQuRj1yYShfclswXSksWG49ITApfSFYbiYma3IubGVuZ3RoPjMmJihhdC5mPWtyWzNdKX1pZihWZS5zLnI+RXQuciYmKFZlLnMucj1FdC5yKSxWZS5zLmM+a3QmJihW''@;'; put 'put ''ZS5zLmM9a3QpLFZlLmUucjxFdC5yJiYoVmUuZS5yPUV0LnIpLFZlLmUuYzxrdCYmKFZlLmUuYz1rdCkscGUuY2VsbERhdGVzJiZidCYmIm4iPT1hdC50JiZBLmlzX2RhdGUoQS5fdGFibGVbYnQubnVtRm10SWRdKSl7dmFyIEZuPUEucGFyc2VfZGF0ZV9jb2RlKGF0LnYpO0ZuJiYoYXQudD0i''@;'; put 'put ''ZCIsYXQudj1uZXcgRGF0ZShGbi55LEZuLm0tMSxGbi5kLEZuLkgsRm4uTSxGbi5TLEZuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighcGUuc2hlZXRTdHVic3x8ZXQpYnJlYWs7YXQ9e3Q6InoiLHY6dm9pZCAwfSxrdD0tMT09a3JbMF0uYz9rdCsxOmtyWzBdLmMsKGJ0PW1lLkNlbGxY''@;'; put 'put ''ZltrclswXS5pU3R5bGVSZWZdKSYmSjMoYXQsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCxwZSwwLG1lKSxwZS5jZWxsU3R5bGVzJiZhdC5zJiZidC5hbGlnbm1lbnQmJihhdC5zLmFsaWdubWVudD1xdChidC5hbGlnbm1lbnQpKSxwZS5kZW5zZT8oYmVbanRd''@;'; put 'put ''fHwoYmVbanRdPVtdKSxiZVtqdF1ba3RdPWF0KTpiZVtUYShrdCkrVG5dPWF0LFZlLnMucj5FdC5yJiYoVmUucy5yPUV0LnIpLFZlLnMuYz5rdCYmKFZlLnMuYz1rdCksVmUuZS5yPEV0LnImJihWZS5lLnI9RXQuciksVmUuZS5jPGt0JiYoVmUuZS5jPWt0KTticmVhaztjYXNlIDE3NjpTbi5w''@;'; put 'put ''dXNoKGtyKTticmVhaztjYXNlIDQ5NDp2YXIganI9S1siIWlkIl1ba3IucmVsSWRdO2Zvcihqcj8oa3IuVGFyZ2V0PWpyLlRhcmdldCxrci5sb2MmJihrci5UYXJnZXQrPSIjIitrci5sb2MpLGtyLlJlbD1qcik6IiI9PWtyLnJlbElkJiYoa3IuVGFyZ2V0PSIjIitrci5sb2MpLGp0PWtyLnJm''@;'; put 'put ''eC5zLnI7anQ8PWtyLnJmeC5lLnI7KytqdClmb3Ioa3Q9a3IucmZ4LnMuYztrdDw9a3IucmZ4LmUuYzsrK2t0KXBlLmRlbnNlPyhiZVtqdF18fChiZVtqdF09W10pLGJlW2p0XVtrdF18fChiZVtqdF1ba3RdPXt0OiJ6Iix2OnZvaWQgMH0pLGJlW2p0XVtrdF0ubD1rcik6KE90PXFpKHtjOmt0''@;'; put 'put ''LHI6anR9KSxiZVtPdF18fChiZVtPdF09e3Q6InoiLHY6dm9pZCAwfSksYmVbT3RdLmw9a3IpO2JyZWFrO2Nhc2UgNDI2OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztCbi5wdXNoKGtyKSwocnI9cGUuZGVuc2U/YmVbanRdW2t0XTpiZVtUYShrdCkrVG5dKS5mPXMwKGtyWzFdLFZlLHtyOkV0''@;'; put 'put ''LnIsYzprdH0seXIscGUpLHJyLkY9cmEoa3JbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztmcltxaShrclswXS5zKV09a3JbMV0sKHJyPXBlLmRlbnNlP2JlW2p0XVtrdF06YmVbVGEoa3QpK1RuXSkuZj1zMChrclsxXSxWZSx7cjpFdC5yLGM6a3R9LHlyLHBl''@;'; put 'put ''KTticmVhaztjYXNlIDYwOmlmKCFwZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7a3IuZT49a3IuczspTWlba3IuZS0tXT17d2lkdGg6a3Iudy8yNTYsaGlkZGVuOiEhKDEma3IuZmxhZ3MpLGxldmVsOmtyLmxldmVsfSxuYXx8KG5hPSEwKSxRMChNaVtrci5lKzFdKTticmVhaztjYXNlIDE2MTpi''@;'; put 'put ''ZVsiIWF1dG9maWx0ZXIiXT17cmVmOnJhKGtyKX07YnJlYWs7Y2FzZSA0NzY6YmVbIiFtYXJnaW5zIl09a3I7YnJlYWs7Y2FzZSAxNDc6ZWUuU2hlZXRzW2tdfHwoZWUuU2hlZXRzW2tdPXt9KSxrci5uYW1lJiYoZWUuU2hlZXRzW2tdLkNvZGVOYW1lPWtyLm5hbWUpLChrci5hYm92ZXx8a3Iu''@;'; put 'put ''bGVmdCkmJihiZVsiIW91dGxpbmUiXT17YWJvdmU6a3IuYWJvdmUsbGVmdDprci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6ZWUuVmlld3N8fChlZS5WaWV3cz1be31dKSxlZS5WaWV3c1swXXx8KGVlLlZpZXdzWzBdPXt9KSxrci5SVEwmJihlZS5WaWV3c1swXS5SVEw9ITApLGtyLmdyaWR8fChl''@;'; put 'put ''ZS5WaWV3c1swXS5ncmlkPSExLGJlWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OmJlWyIhc2hlZXRGb3JtYXQiXT1rcjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24gSmooUyxPLGssSyl7aWYoTyl7dmFyIGVlPXtyZWY6Ty5zcXJmeCx0Ok8udH07Ty5vcCYmKGVl''@;'; put 'put ''Lm9wPU8ub3ApO3ZhciBzZT0iIixtZT0iIixwZT1PLnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgTy5zcXJmeD9vbyhPLnNxcmZ4LnNwbGl0KCIsIilbMF0pOk8uc3FyZng6bnVsbDtpZihPLmYxJiYoc2U9czAoTy5mMSxwZSxudWxsLGssSywhMCkpLE8uZjImJihtZT1zMChPLmYyLHBlLG51bGws''@;'; put 'put ''ayxLLCEwKSksTy5vcCYmWyJJTiIsIk9UIl0uaW5kZXhPZihPLm9wKT49LTEpZWUubWluPXNlLGVlLm1heD1tZTtlbHNlIGlmKE8ub3ApZWUudj1zZTtlbHNlIHRyeXtzd2l0Y2goTy50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09Ty5mMVswXVswXVswXSYmMT09Ty5mMVswXS5sZW5ndGgp''@;'; put 'put ''e2VlLmw9Ty5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjplZS5mPXNlfX1jYXRjaHt9U1siIXZhbGlkYXRpb25zIl18fChTWyIhdmFsaWRhdGlvbnMiXT1bXSksU1siIXZhbGlkYXRpb25zIl0ucHVzaChlZSl9fShiZSxrcix5cixwZSk7YnJlYWs7Y2FzZSAxNTE6''@;'; put 'put ''YmVbIiFmcmVlemUiXT1rclswXTticmVhaztjYXNlIDE1MjpiZVsiIXNlbCJdPWtyO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5''@;'; put 'put ''OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNhc2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2''@;'; put 'put ''MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpjYXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2Ug''@;'; put 'put ''NTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztjYXNlIDM1OmV0PSEwO2JyZWFrO2Nhc2UgMzY6ZXQ9ITE7YnJlYWs7Y2FzZSAzNzpZZS5wdXNoKFZuKSxldD0hMDticmVhaztjYXNlIDM4OlllLnBvcCgpLGV0PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoVm58fCIiKS5pbmRleE9mKCJCZWdp''@;'; put 'put ''biIpPjApJiYhKChWbnx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWV0fHxwZS5XVEYmJiJCcnRBQ0JlZ2luIiE9WWVbWWUubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQnIrIiAiK1ZuKX19LHBlKSxkZWxldGUgcGUuc3VwYm9va3MsZGVsZXRlIHBl''@;'; put 'put ''WyIhcm93Il0sIWJlWyIhcmVmIl0mJihWZS5zLnI8MmU2fHxQZSYmKFBlLmUucj4wfHxQZS5lLmM+MHx8UGUucy5yPjB8fFBlLnMuYz4wKSkmJihiZVsiIXJlZiJdPXJhKFBlfHxWZSkpLHBlLnNoZWV0Um93cyYmYmVbIiFyZWYiXSl7dmFyIGNhPW9vKGJlWyIhcmVmIl0pO3BlLnNoZWV0Um93''@;'; put 'put ''czw9K2NhLmUuciYmKGNhLmUucj1wZS5zaGVldFJvd3MtMSxjYS5lLnI+VmUuZS5yJiYoY2EuZS5yPVZlLmUuciksY2EuZS5yPGNhLnMuciYmKGNhLnMucj1jYS5lLnIpLGNhLmUuYz5WZS5lLmMmJihjYS5lLmM9VmUuZS5jKSxjYS5lLmM8Y2Eucy5jJiYoY2Eucy5jPWNhLmUuYyksYmVbIiFm''@;'; put 'put ''dWxscmVmIl09YmVbIiFyZWYiXSxiZVsiIXJlZiJdPXJhKGNhKSl9cmV0dXJuIFNuLmxlbmd0aD4wJiYoYmVbIiFtZXJnZXMiXT1TbiksTWkubGVuZ3RoPjAmJihiZVsiIWNvbHMiXT1NaSksRmkubGVuZ3RoPjAmJihiZVsiIXJvd3MiXT1GaSksYmV9KFMsSyxrLGVlLHNlLDAscGUpOmZ1bmN0''@;'; put 'put ''aW9uIGg4KFMsTyxrLEssZWUsc2UsbWUpe2lmKCFTKXJldHVybiBTO0t8fChLPXsiIWlkIjp7fX0pLG51bGwhPW9lJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT1vZSk7dmFyIHBlPU8uZGVuc2U/W106e30sYmU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sUGU9IiIsVmU9IiIsWWU9''@;'; put 'put ''Uy5tYXRjaCh2RCk7WWU/KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksVmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1WZT1TO3ZhciBldD1WZS5sYXN0SW5kZXhPZigiZXh0THN0IiksRXQ9KC0xPT1ldHx8VmUuc2xpY2UoZXQpLFBlLm1hdGNoKF9EKSk7RXQ/Y3koRXRbMF0s''@;'; put 'put ''MCxlZSxrKTooRXQ9UGUubWF0Y2goQ0QpKSYmZnVuY3Rpb24gb2ooUyxPLGssSyxlZSxzZSxtZSl7Y3koUy5zbGljZSgwLFMuaW5kZXhPZigiPiIpKSwwLEssZWUpO3ZhciBwZT1PLm1hdGNoKG1TKTtpZihwZSl7dmFyIFBlPWdrKHZyKHBlWzBdKSxzZSxtZSk7a1siIXRhYmNvbG9yIl09UGV9''@;'; put 'put ''aWYoKHBlPU8ubWF0Y2goaWopKSYmdnIocGVbMF0pLmZpdFRvUGFnZSYmKGtbIiFwcmludCJdfHwoa1siIXByaW50Il09e30pLGtbIiFwcmludCJdLnByb3BzfHwoa1siIXByaW50Il0ucHJvcHM9e30pLGtbIiFwcmludCJdLnByb3BzLmZpdHx8KGtbIiFwcmludCJdLnByb3BzLmZpdD17fSks''@;'; put 'put ''bnVsbD09a1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodCYmKGtbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09a1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoa1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSxwZT1PLm1hdGNoKGFqKSl7a1siIW91dGxpbmUi''@;'; put 'put ''XT17fTt2YXIgWWU9dnIocGVbMF0pO1llLnN1bW1hcnlCZWxvdyYmKGtbIiFvdXRsaW5lIl0uYWJvdmU9IXRpKFllLnN1bW1hcnlCZWxvdykpLFllLnN1bW1hcnlSaWdodCYmKGtbIiFvdXRsaW5lIl0ubGVmdD0hdGkoWWUuc3VtbWFyeVJpZ2h0KSl9fShFdFswXSxFdFsxXXx8IiIscGUsZWUs''@;'; put 'put ''ayxtZSxzZSk7dmFyIGF0PShQZS5tYXRjaCgvPCg/Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZihhdD4wKXt2YXIgYnQ9UGUuc2xpY2UoYXQsYXQrNTApLm1hdGNoKHN5KTtidCYmKCFPfHwhTy5ub2RpbSkmJmZ1bmN0aW9uIGNTKFMsTyl7dmFyIGs9b28oTyk7ay5z''@;'; put 'put ''LnI8PWsuZS5yJiZrLnMuYzw9ay5lLmMmJmsucy5yPj0wJiZrLnMuYz49MCYmKFNbIiFyZWYiXT1yYShrKSl9KHBlLGJ0WzFdKX12YXIganQ9UGUubWF0Y2goUm8pO2p0JiZqdFsxXSYmZnVuY3Rpb24gQ2ooUyxPLGssSyl7ay5WaWV3c3x8KGsuVmlld3M9W3t9XSk7dmFyIGVlPTA7Uy5yZXBs''@;'; put 'put ''YWNlKFNTLGZ1bmN0aW9uKHNlLG1lKXt2YXIgcGU9dnIoc2UpO2lmKGsuVmlld3NbS118fChrLlZpZXdzW0tdPXt9KSx0aShwZS5yaWdodFRvTGVmdCkmJihrLlZpZXdzW0tdLlJUTD0hMCkscGUuc2hvd0dyaWRMaW5lcyYmKGsuVmlld3NbS10uZ3JpZD10aShwZS5zaG93R3JpZExpbmVzKSxu''@;'; put 'put ''dWxsPT1PWyIhZ3JpZGxpbmVzIl0mJihPWyIhZ3JpZGxpbmVzIl09dGkocGUuc2hvd0dyaWRMaW5lcykpKSwrcGUuem9vbVNjYWxlJiYoay5WaWV3c1tLXS56b29tPStwZS56b29tU2NhbGUpLHBlLnZpZXcmJihrLlZpZXdzW0tdLnZpZXc9cGUudmlldyksMT09KytlZSYmIi8+IiE9c2Uuc2xp''@;'; put 'put ''Y2UoLTIpKXt2YXIgYmU9Uy5zbGljZShtZStzZS5sZW5ndGgpLFBlPWJlLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFQZSlyZXR1cm4iIjt2YXIgVmU9KGJlPWJlLnNsaWNlKDAsUGUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/''@;'; put 'put ''OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKFZlKXt2YXIgWWU9dnIoVmVbMF0pOyJmcm96ZW4iPT1ZZS5zdGF0ZT9PWyIhZnJlZXplIl09VGEoK1llLnhTcGxpdHx8MCkramkoK1llLnlTcGxpdHx8MCk6WWUudG9wTGVmdENlbGwmJihPWyIhZnJlZXplIl09WWUudG9wTGVmdENlbGwpfXZhciBl''@;'; put 'put ''dD1iZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9uKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoZXQpe3ZhciBjdD12cihldFswXSk7aWYoY3QuYWN0aXZlQ2VsbCYmKE9bIiFzZWwiXT17Y2VsbDpjdC5hY3RpdmVDZWxsfSksY3Quc3FyZWYpe3ZhciBFdD1jdC5zcXJlZi5yZXBsYWNlKC9c''@;'; put 'put ''cy4qJC8sIiIpO09bIiFzZWwiXXx8KE9bIiFzZWwiXT17Y2VsbDpxaShNcyhFdCkucyl9KSxPWyIhc2VsIl0ucmFuZ2U9Y3Quc3FyZWZ9fX1yZXR1cm4iIn0pfShqdFsxXSxwZSxlZSxrKTt2YXIga3Q9UGUubWF0Y2goR2UpLE90PVtdO2lmKE8uY2VsbFN0eWxlcyl7dmFyIEt0PVBlLm1hdGNo''@;'; put 'put ''KHRqKTtLdCYmZnVuY3Rpb24gYlMoUyxPLGspe2Zvcih2YXIgSz0hMSxlZT0wO2VlIT1PLmxlbmd0aDsrK2VlKXt2YXIgc2U9dnIoT1tlZV0sITApO3NlLmhpZGRlbiYmKHNlLmhpZGRlbj10aShzZS5oaWRkZW4pKTt2YXIgbWU9cGFyc2VJbnQoc2UubWluLDEwKS0xLHBlPXBhcnNlSW50KHNl''@;'; put 'put ''Lm1heCwxMCktMTtmb3Ioc2Uub3V0bGluZUxldmVsJiYoc2UubGV2ZWw9K3NlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIHNlLm1pbixkZWxldGUgc2UubWF4LHNlLndpZHRoPStzZS53aWR0aCwhSyYmc2Uud2lkdGgmJihLPSEwKSxRMChzZSksc2Uuc3R5bGUmJihzZS5zPW04KHNlLnN0eWxl''@;'; put 'put ''LGspKTttZTw9cGU7KVNbbWUrK109cXQoc2UpfX0oT3QsS3QsbWUpfWlmKFllJiZ2OChZZVsxXSxrLHBlLE8sYmUsc2UsbWUpLE8uY2FsbGJhY2spcmV0dXJuIHBlO3ZhciBUbj1WZS5tYXRjaCh3RCk7VG4mJihwZVsiIXByb3RlY3QiXT1mdW5jdGlvbiBoaihTKXt2YXIgTz12cihTLCEwLCEw''@;'; put 'put ''KSxrPXt9O2lmKHRpKE8uc2hlZXQpKXJldHVybiB5Uy5mb3JFYWNoKGZ1bmN0aW9uKEspe2tbS109bnVsbCE9T1tLXSYmdGkoT1tLXSl9KSxMRC5mb3JFYWNoKGZ1bmN0aW9uKEspe2tbS109bnVsbD09T1tLXXx8dGkoT1tLXSl9KSxPLmFsZ29yaXRobU5hbWUmJihrLmVuY3J5cHRpb249e2Fs''@;'; put 'put ''Z286Ty5hbGdvcml0aG1OYW1lLGhhc2g6Ty5oYXNoVmFsdWUsc2FsdDpPLnNhbHRWYWx1ZSxzcGluOitPLnNwaW5Db3VudHx8MWU1fSksa30oVG5bMF0pKTt2YXIgcnI9VmUubWF0Y2gobmopO3JyJiYocGVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gZ2ooUyl7cmV0dXJue3JlZjooUy5tYXRj''@;'; put 'put ''aCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShyclswXSkpO3ZhciBTbj1bXSxscj1WZS5tYXRjaChkOCk7aWYobHIpZm9yKGF0PTA7YXQhPWxyLmxlbmd0aDsrK2F0KVNuW2F0XT1vbyhsclthdF0uc2xpY2UobHJbYXRdLmluZGV4T2YoJyInKSsxKSk7dmFyIFhuPSgtMT09ZXQ/VmU6VmUu''@;'; put 'put ''c2xpY2UoMCxldCkpLm1hdGNoKGRTKTtYbiYmKHBlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2MihWbixPLHNlLG1lKX0pKSksZXQ+LTEmJihYbj1WZS5zbGljZShldCkubWF0Y2goZFMpKSYmKHBlWyIhY29uZGZtdCJdfHwocGVb''@;'; put 'put ''IiFjb25kZm10Il09W10pLHBlWyIhY29uZGZtdCJdPXBlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShwZVsiIWNvbmRmbXQiXSxYbi5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2MihWbixPLHNlLG1lLCEwKX0pKSk7dmFyIEJuPSgtMT09ZXQ/VmU6VmUuc2xpY2UoMCxldCkpLm1hdGNoKGZl''@;'; put 'put ''KTtCbiYmKHBlWyIhdmFsaWRhdGlvbnMiXT13UyhCblswXSxPKSksZXQ+LTEmJihCbj1WZS5zbGljZShldCkubWF0Y2goZmUpKSYmKHBlWyIhdmFsaWRhdGlvbnMiXXx8KHBlWyIhdmFsaWRhdGlvbnMiXT1bXSkscGVbIiF2YWxpZGF0aW9ucyJdPXBlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQo''@;'; put 'put ''d1MoQm5bMF0sTywhMCkpKTt2YXIgZnI9VmUubWF0Y2godVMpO2ZyJiZmdW5jdGlvbiBPRChTLE8sayl7Zm9yKHZhciBLPUFycmF5LmlzQXJyYXkoUyksZWU9MDtlZSE9Ty5sZW5ndGg7KytlZSl7dmFyIHNlPXZyKGdvKE9bZWVdKSwhMCk7aWYoIXNlLnJlZilyZXR1cm47dmFyIG1lPSgoa3x8''@;'; put 'put ''e30pWyIhaWQiXXx8W10pW3NlLmlkXTttZT8oc2UuVGFyZ2V0PW1lLlRhcmdldCxzZS5sb2NhdGlvbiYmKHNlLlRhcmdldCs9IiMiK1FyKHNlLmxvY2F0aW9uKSkpOihzZS5UYXJnZXQ9IiMiK1FyKHNlLmxvY2F0aW9uKSxtZT17VGFyZ2V0OnNlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5h''@;'; put 'put ''bCJ9KSxzZS5SZWw9bWUsc2UudG9vbHRpcCYmKHNlLlRvb2x0aXA9c2UudG9vbHRpcCxkZWxldGUgc2UudG9vbHRpcCk7Zm9yKHZhciBwZT1vbyhzZS5yZWYpLGJlPXBlLnMucjtiZTw9cGUuZS5yOysrYmUpZm9yKHZhciBQZT1wZS5zLmM7UGU8PXBlLmUuYzsrK1BlKXt2YXIgVmU9cWkoe2M6''@;'; put 'put ''UGUscjpiZX0pO0s/KFNbYmVdfHwoU1tiZV09W10pLFNbYmVdW1BlXXx8KFNbYmVdW1BlXT17dDoieiIsdjp2b2lkIDB9KSxTW2JlXVtQZV0ubD1zZSk6KFNbVmVdfHwoU1tWZV09e3Q6InoiLHY6dm9pZCAwfSksU1tWZV0ubD1zZSl9fX0ocGUsZnIsSyk7dmFyIHlyPVZlLm1hdGNoKGhTKTt5''@;'; put 'put ''ciYmZnVuY3Rpb24gc2ooUyxPKXt2YXIgaz12cihTLCExLCEwKTtPWyIhcHJpbnQiXXx8KE9bIiFwcmludCJdPXt9KSxPWyIhcHJpbnQiXS5wcm9wc3x8KE9bIiFwcmludCJdLnByb3BzPXt9KTt2YXIgSz1PWyIhcHJpbnQiXS5wcm9wcztrLmdyaWRMaW5lcyYmKEsuZ3JpZGxpbmVzPXRpKGsu''@;'; put 'put ''Z3JpZExpbmVzKSksbnVsbCE9ay5ob3Jpem9udGFsQ2VudGVyZWQmJihLLmNlbnRlclg9dGkoay5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1rLnZlcnRpY2FsQ2VudGVyZWQmJihLLmNlbnRlclk9dGkoay52ZXJ0aWNhbENlbnRlcmVkKSl9KHlyWzBdLHBlKTt2YXIgZXI9VmUubWF0Y2go''@;'; put 'put ''YkQpO2VyJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLm1hcmdpbnM9cGVbIiFtYXJnaW5zIl09UEQodnIoZXJbMF0pKSk7dmFyIE1pPVZlLm1hdGNoKE1EKTtNaSYmZnVuY3Rpb24gSUQoUyxPKXt2YXIgaz12cihTLCExLCEwKTtkZWxldGUgay5pZCxkZWxldGUga1swXSxP''@;'; put 'put ''WyIhcHJpbnQiXXx8KE9bIiFwcmludCJdPXt9KSxPWyIhcHJpbnQiXS5wcm9wc3x8KE9bIiFwcmludCJdLnByb3BzPXt9KTt2YXIgSz1PWyIhcHJpbnQiXS5wcm9wcztrLm9yaWVudGF0aW9uJiYoSy5vcmllbnRhdGlvbj1rLm9yaWVudGF0aW9uKSxrLnNjYWxlJiYoSy5zY2FsZT0ray5zY2Fs''@;'; put 'put ''ZSksK2suZml0VG9IZWlnaHQ+PTAmJigoSy5maXR8fChLLmZpdD17fSkpLmhlaWdodD0ray5maXRUb0hlaWdodCksK2suZml0VG9XaWR0aD49MCYmKChLLmZpdHx8KEsuZml0PXt9KSkud2lkdGg9K2suZml0VG9XaWR0aCksay5wYXBlckhlaWdodCYmay5wYXBlcldpZHRoP0sucGFwZXI9e3dp''@;'; put 'put ''ZHRoOmsucGFwZXJXaWR0aCxoZWlnaHQ6ay5wYXBlckhlaWdodH06ay5wYXBlclNpemUmJihLLnBhcGVyPW44W0sucGFwZXI9K2sucGFwZXJTaXplXXx8Sy5wYXBlciksay5ob3Jpem9udGFsRHBpP0suZHBpPStrLmhvcml6b250YWxEcGk6ay52ZXJ0aWNhbERwaSYmKEsuZHBpPStrLnZlcnRp''@;'; put 'put ''Y2FsRHBpKSwiYXV0b21hdGljIiE9KGsuZmlyc3RQYWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihLLmZpcnN0PStrLmZpcnN0UGFnZU51bWJlciksdGkoay5ibGFja0FuZFdoaXRlKSYmKEsuYnc9ITApLHRpKGsuZHJhZnQpJiYoSy5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PWsucGFnZU9y''@;'; put 'put ''ZGVyJiYoSy5vcmRlcj0ib3ZlciIpLEFEW2suY2VsbENvbW1lbnRzXSYmKEsuY29tbWVudHM9QURbay5jZWxsQ29tbWVudHNdKSxERFtrLmVycm9yc10mJihLLmVycm9ycz1ERFtrLmVycm9yc10pfShNaVswXSxwZSk7dmFyIEZpPVZlLm1hdGNoKGo1KTtGaSYmZnVuY3Rpb24gdmooUyxPKXtp''@;'; put 'put ''ZihPWyIhcHJpbnQiXXx8KE9bIiFwcmludCJdPXt9KSxTWzFdKXt2YXIgaz0iIixLPTA7U1sxXS5yZXBsYWNlKGVuLGZ1bmN0aW9uKGVlLHNlKXtpZigiLyIhPWVlLmNoYXJBdCgxKSlrPWVlLnNsaWNlKDEsLTEpLEs9c2UrZWUubGVuZ3RoO2Vsc2UgaWYoayl7dmFyIG1lPWsubWF0Y2goL0hl''@;'; put 'put ''YWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHBlPWsucmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO2s9IiIsT1siIXByaW50Il1bbWVdfHwoT1siIXByaW50Il1bbWVdPXt9KSxPWyIhcHJpbnQiXVttZV1bcGVdPVFyKGdvKFNbMV0uc2xpY2UoSyxzZSkpKX19KX19KEZpLHBlKTt2YXIgbmE9''@;'; put 'put ''VmUubWF0Y2gocmopO25hJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz1wZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIGNqKFMpe3ZhciBPPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEs9dnIoayk7Ty5wdXNo''@;'; put 'put ''KHtSOitLLmlkfSl9KSxPfShuYVswXSkpO3ZhciBjYT1WZS5tYXRjaChseSk7Y2EmJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXBlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24ga25lKFMpe3ZhciBPPVtdO3JldHVybihTLm1hdGNoKEYwKXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oayl7dmFyIEs9dnIoayk7Ty5wdXNoKHtDOitLLmlkfSl9KSxPfShjYVswXSkpO3ZhciBMaT1bXTtpZigoTGk9VmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFyZWwiXT1MaVsxXSksKExpPVZlLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9Iigu''@;'; put 'put ''Kj8pIi8pKSYmKHBlWyIhbGVncmVsIl09TGlbMV0pLChMaT1WZS5tYXRjaCh5RCkpJiYocGVbIiFjdHJsaWQiXT1MaS5tYXAoZnVuY3Rpb24oVm4pe3JldHVybiB2cihWbil9KSksKExpPVZlLm1hdGNoKFNEKSkmJmZ1bmN0aW9uIHBTKFMsTyl7U1siIXRhYmxlcmVmcyJdfHwoU1siIXRhYmxl''@;'; put 'put ''cmVmcyJdPVtdKSwoTy5tYXRjaChmUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbIiF0YWJsZXJlZnMiXS5wdXNoKHZyKGspLmlkKX0pfShwZSxMaVsxXSksTyYmTy5ub2RpbSYmKGJlLnMuYz1iZS5zLnI9MCksIXBlWyIhcmVmIl0mJmJlLmUuYz49YmUucy5jJiZiZS5lLnI+PWJlLnMu''@;'; put 'put ''ciYmKHBlWyIhcmVmIl09cmEoYmUpKSxPLnNoZWV0Um93cz4wJiZwZVsiIXJlZiJdKXt2YXIga3I9b28ocGVbIiFyZWYiXSk7Ty5zaGVldFJvd3M8PStrci5lLnImJihrci5lLnI9Ty5zaGVldFJvd3MtMSxrci5lLnI+YmUuZS5yJiYoa3IuZS5yPWJlLmUuciksa3IuZS5yPGtyLnMuciYmKGty''@;'; put 'put ''LnMucj1rci5lLnIpLGtyLmUuYz5iZS5lLmMmJihrci5lLmM9YmUuZS5jKSxrci5lLmM8a3Iucy5jJiYoa3Iucy5jPWtyLmUuYykscGVbIiFmdWxscmVmIl09cGVbIiFyZWYiXSxwZVsiIXJlZiJdPXJhKGtyKSl9cmV0dXJuIGt0JiYocGVbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIHhEKFMp''@;'; put 'put ''e3ZhciBPPXt9LGs9e30sSz0hMSxlZT17fSxzZT0hMTtyZXR1cm4gUy5kZWZhdWx0Um93SGVpZ2h0JiYoSz0hMCxrLmhwdD1wYXJzZUZsb2F0KFMuZGVmYXVsdFJvd0hlaWdodCkpLFMuemVyb0hlaWdodCYmKEs9ITAsay5oaWRkZW49dGkoUy56ZXJvSGVpZ2h0KSksUy5iYXNlQ29sV2lkdGg/''@;'; put 'put ''KHNlPSEwLGVlLndjaD1wYXJzZUZsb2F0KFMuYmFzZUNvbFdpZHRoKSk6Uy5kZWZhdWx0Q29sV2lkdGgmJihzZT0hMCxlZS53Y2g9cGFyc2VGbG9hdChTLmRlZmF1bHRDb2xXaWR0aCktNS9UYyksUy5vdXRsaW5lTGV2ZWxDb2wmJihPLmNvbG91dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2''@;'; put 'put ''ZWxDb2wpKSxTLm91dGxpbmVMZXZlbFJvdyYmKE8ucm93b3V0bGluZT1wYXJzZUludChTLm91dGxpbmVMZXZlbFJvdykpLFMudGhpY2tCb3R0b20mJihPLmJvdHRoaWNrPXRpKFMudGhpY2tCb3R0b20pKSxTLnRoaWNrVG9wJiYoTy50b3B0aGljaz10aShTLnRoaWNrVG9wKSksUy5keURlc2Nl''@;'; put 'put ''bnQmJihPLmR5RGVzY2VudD1wYXJzZUZsb2F0KFMuZHlEZXNjZW50KSksSyYmKGp2KGspLE8ucm93PWspLHNlJiYoUTAoZWUpLE8uY29sPWVlKSxPfSh2cihrdFswXSkpKSxPdC5sZW5ndGg+MCYmKHBlWyIhY29scyJdPU90KSxTbi5sZW5ndGg+MCYmKHBlWyIhbWVyZ2VzIl09U24pLEtbIiFp''@;'; put 'put ''ZCJdW3BlWyIhcmVsIl1dJiYocGVbIiFkcmF3ZWwiXT1LWyIhaWQiXVtwZVsiIXJlbCJdXSksS1siIWlkIl1bcGVbIiFsZWdyZWwiXV0mJihwZVsiIWxlZ2RyYXdlbCJdPUtbIiFpZCJdW3BlWyIhbGVncmVsIl1dKSwocGVbIiFjdHJsaWQiXXx8W10pLmZvckVhY2goZnVuY3Rpb24oVm4pe1Zu''@;'; put 'put ''LnJlbD1LWyIhaWQiXVtWbi5pZF19KSxudWxsPT1wZVsiIWdyaWRsaW5lcyJdJiYocGVbIiFncmlkbGluZXMiXT0hMCkscGV9KFMsSyxrLGVlLHNlLG1lLHBlKX0oZXQsTyxlZSxiZSxzZVtLXSxQZSxWZSxZZSk7YnJlYWs7Y2FzZSJjaGFydCI6Y3Q9ZnVuY3Rpb24gYnooUyxPLGssSyxlZSxz''@;'; put 'put ''ZSxtZSxwZSl7cmV0dXJuIi5iaW4iPT09Ty5zbGljZSgtNCk/ZnVuY3Rpb24gaHooUyxPLGssSyxlZSl7aWYoIVMpcmV0dXJuIFM7S3x8KEs9eyIhaWQiOnt9fSk7dmFyIHNlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxtZT1bXSxwZT0hMTtyZXR1cm4gdXIo''@;'; put 'put ''UyxmdW5jdGlvbihQZSxWZSxZZSl7c3dpdGNoKFllKXtjYXNlIDU1MDpzZVsiIXJlbCJdPVBlO2JyZWFrO2Nhc2UgNjUxOmVlLlNoZWV0c1trXXx8KGVlLlNoZWV0c1trXT17fSksUGUubmFtZSYmKGVlLlNoZWV0c1trXS5Db2RlTmFtZT1QZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1''@;'; put 'put ''MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2Nhc2UgMzc6bWUucHVzaChWZSk7YnJlYWs7Y2FzZSAzODptZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChW''@;'; put 'put ''ZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCltZS5wdXNoKFZlKTtlbHNlIGlmKChWZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApbWUucG9wKCk7ZWxzZSBpZighcGV8fE8uV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitZZSsiICIrVmUpfX0sTyksS1siIWlkIl1bc2Vb''@;'; put 'put ''IiFyZWwiXV0mJihzZVsiIWRyYXdlbCJdPUtbIiFpZCJdW3NlWyIhcmVsIl1dKSxzZX0oUyxLLGssZWUsc2UpOmZ1bmN0aW9uIHV6KFMsTyxrLEssZWUpe2lmKCFTKXJldHVybiBTO0t8fChLPXsiIWlkIjp7fX0pO3ZhciBtZSxzZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIh''@;'; put 'put ''cmVsIjoiIn0scGU9Uy5tYXRjaChfRCk7cGUmJmN5KHBlWzBdLDAsZWUsayk7dmFyIGJlPVMubWF0Y2goYkQpO3JldHVybiBiZSYmKHNlWyIhbWFyZ2lucyJdPVBEKHZyKGJlWzBdKSkpLChtZT1TLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHNlWyIhcmVsIl09bWVbMV0pLEtb''@;'; put 'put ''IiFpZCJdW3NlWyIhcmVsIl1dJiYoc2VbIiFkcmF3ZWwiXT1LWyIhaWQiXVtzZVsiIXJlbCJdXSksc2V9KFMsMCxrLGVlLHNlKX0oZXQsTyxlZSxiZSxzZVtLXSxQZSk7YnJlYWs7Y2FzZSJtYWNybyI6Y3Q9ZnVuY3Rpb24gX3ooUyxPLGssSyxlZSxzZSxtZSxwZSl7cmV0dXJuIE8uc2xpY2Uo''@;'; put 'put ''LTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLE8pO2JyZWFrO2Nhc2UiZGlhbG9nIjpjdD1mdW5jdGlvbiB3eihTLE8sayxLLGVlLHNlLG1lLHBlKXtyZXR1cm4gTy5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLE8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29n''@;'; put 'put ''bml6ZWQgc2hlZXQgdHlwZSAiK3BlKX1pZihiZS5jYWxsYmFjaylyZXR1cm47bWVbS109Y3QsZnVuY3Rpb24gSnooUyxPLGssSyxlZSxzZSxtZSxwZSl7aWYoUyYmU1siIWRyYXdlbCJdKXt2YXIgYmU9Zm4oU1siIWRyYXdlbCJdLlRhcmdldCxLKSxQZT1WcihiZSksVmU9ZnVuY3Rpb24gTEMo''@;'; put 'put ''UyxPLGssSyxlZSl7dmFyIHNlPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIVMpcmV0dXJuIHNlO3ZhciBtZT1lZXx8e307cmV0dXJuKFMubWF0Y2goLzxbXjxdKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0ZUFuY2hv''@;'; put 'put ''cnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT0iIixQZT17dHlwZToiIn0sVmU9e30sWWU9ITAsZXQ9ITEsY3Q9ITEsRXQ9ITEsYXQ9e3M6e319LGJ0PS0xLGp0PVtdLGt0PVtdLE90PXtzOnthbGlnbm1lbnQ6e2hv''@;'; put 'put ''cml6b250YWw6ImNlbnRlciIsdmVydGljYWw6ImNlbnRlciJ9fX0sS3Q9IiIsVG49LTEsU249e307cGUucmVwbGFjZShlbixmdW5jdGlvbihscixYbil7anQ9bnVsbDt2YXIgQm49dnIobHIpLGZyPVduKEJuWzBdKS5yZXBsYWNlKC9bXC9dPz4kLywiIik7c3dpdGNoKGZyKXtjYXNlIjxjbGll''@;'; put 'put ''bnREYXRhIjpicmVhaztjYXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6UGUudHlwZT1XbihCblswXSkucmVwbGFjZSgvWzw+XS9nLCIiKTticmVhaztjYXNlIjwvYWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxsQW5jaG9y''@;'; put 'put ''IjpjYXNlIjwvdHdvQ2VsbEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpQZS5wb3M9e3g6K0JuLngseTorQm4ueX07YnJlYWs7Y2FzZSI8ZXh0IjpZZSYmKFBlLmV4dD17eDorQm4uY3gseTorQm4uY3l9KTticmVhaztjYXNlIjxmcm9tIjpjYXNlIjx0byI6VmU9e307YnJlYWs7Y2FzZSI8L2Zy''@;'; put 'put ''b20iOlllJiYoUGUuZnJvbT1WZSk7YnJlYWs7Y2FzZSI8L3RvIjpZZSYmKFBlLnRvPVZlKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYiOmJ0PVhuK2xyLmxlbmd0aDticmVhaztjYXNlIjwvY29sIjpWZS5jPStwZS5zbGljZShidCxYbik7''@;'; put 'put ''YnJlYWs7Y2FzZSI8L2NvbE9mZiI6VmUuY09mZj0rcGUuc2xpY2UoYnQsWG4pO2JyZWFrO2Nhc2UiPC9yb3ciOlZlLnI9K3BlLnNsaWNlKGJ0LFhuKTticmVhaztjYXNlIjwvcm93T2ZmIjpWZS5yT2ZmPStwZS5zbGljZShidCxYbik7YnJlYWs7Y2FzZSI8c3AiOmJlPSJzaGFwZSIsT3QuQW5j''@;'; put 'put ''aG9yPVBlLHNlLnNoYXBlcy5wdXNoKE90KSxZZT0hMTticmVhaztjYXNlIjwvc3AiOlllPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6YmU9ImdyYXBoaWMiLFllPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOlllPSEwO2JyZWFrO2Nhc2UiPHBpYyI6YmU9InBpY3R1cmUiLFll''@;'; put 'put ''PSExO2JyZWFrO2Nhc2UiPC9waWMiOlllPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjpiZT0iZ3JvdXBzaGFwZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpZZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9m''@;'; put 'put ''ZiI6YnJlYWs7Y2FzZSI8Z3JhcGhpY0RhdGEiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6ZXQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOmV0''@;'; put 'put ''PSEwO2JyZWFrO2Nhc2UiPC9zcmNSZWN0IjpldD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKGN0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0xKVswXSYmKE90LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZihjdHx8RXQpYnJlYWs7IjxzcFByIj09a3Quc2xp''@;'; put 'put ''Y2UoLTIpWzBdP090LnMuZmdDb2xvcj1TbjoiPHJQciI9PWt0LnNsaWNlKC0yKVswXSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoYXQucy5jb2xvcj1TbiksU249e30sRXQ9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PWJlJiYoT3RbIiFzaGFwZSJdPUJuLnByc3QpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC9wcnN0R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6ZXQ9ITAsT3QuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpldD0hMTticmVhaztjYXNlIjxib2R5UHIiOk90LnMuYWxpZ25tZW50LnZlcnRpY2FsPXBCW0JuLmFuY2hvcnx8InQiXXx8InRvcCI7''@;'; put 'put ''YnJlYWs7Y2FzZSI8bHN0U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOlRuPVhuK2xyLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6S3QrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOkt0Kz1wZS5zbGljZShUbixYbik7YnJlYWs7Y2FzZSI8cFByIjpPdC5zLmFsaWdubWVudC5ob3Jpem9u''@;'; put 'put ''dGFsfHwoT3Qucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QNVtCbi5hbGdufHwibCJdfHwibGVmdCIpLGt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UDVbQm4uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOkJuLnN6JiZrdC5p''@;'; put 'put ''bmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC5zLnN6PWF0LnMuc3o9K0JuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6S3Q9IiIsYXQ9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9PWJlJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC52''@;'; put 'put ''PShPdC52fHwiIikrS3QsYXQudj1LdCxPdC5SLnB1c2goYXQpKTticmVhaztjYXNlIjxsYXRpbiI6Qm4udHlwZWZhY2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMubmFtZT1Cbi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOmV0PSEwLGN0PSEwO2JyZWFrO2Nhc2UiPC9z''@;'; put 'put ''dHlsZSI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFjdCYmInNoYXBlIj09YmUmJihPdC5zLmZnQ29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2UiPC9mb250''@;'; put 'put ''UmVmIjohY3QmJiJzaGFwZSI9PWJlJiYoT3Qucy5jb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgeXI9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1bQm4udmFsXXx8Qm4udmFsLGVyPSgoSy50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2No''@;'; put 'put ''ZW1lfHxbXSkuZmluZChmdW5jdGlvbihGaSl7cmV0dXJuIEZpLm5hbWU9PXlyfSk7ZXI/U24ucmdiPWVyLnJnYjpFdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6U24ucmdiPUJuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpj''@;'; put 'put ''YXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIiOkV0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpqdD1zZS5jaGFydHM7dmFyIE1pPUJuLmlkO2Nhc2UiPGJsaXAiOmp0fHwoanQ9c2UuaW1hZ2VzLE1pPUJuLmVtYmVkKSxqdC5wdXNoKHtBbmNob3I6UGUsVGFyZ2V0OihPWyIhaWQiXVtNaV18fHt9''@;'; put 'put ''KS5UYXJnZXR9KSxCbi5saW5rJiYoanRbanQubGVuZ3RoLTFdLkxpbms9KE9bIiFpZCJdW0JuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpldD0hMDticmVhaztj''@;'; put 'put ''YXNlIjwvbnZHcnBTcFByIjpldD0hMTticmVhaztjYXNlIjxzcFByIjpldD0hMDticmVhaztjYXNlIjwvc3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGlj''@;'; put 'put ''RnJhbWVQciI6Y2FzZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6''@;'; put 'put ''Y2FzZSI8Y052R3JwU3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nhc2UiPGNOdlByIjpldD0hMDticmVhaztjYXNl''@;'; put 'put ''IjwvY052UHIiOmV0PSExO2JyZWFrO2Nhc2UiPGN4blNwIjpldD0hMDticmVhaztjYXNlIjwvY3huU3AiOmV0PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjpldD0hMTticmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNw''@;'; put 'put ''UHIiOmJyZWFrO2Nhc2UiPGV4dExzdCI6ZXQ9ITAsY3Q9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6ZXQ9ITEsY3Q9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihtZSYmbWUuV1RGJiYhZXQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitCblswXSsiIGluIGRy''@;'; put 'put ''YXdpbmciKX1yZXR1cm4iPC8iPT1mci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPWxyLnNsaWNlKGxyLmxlbmd0aC0yKSYma3QucHVzaChmciksIiJ9KX0pLHNlfShucihrLGJlLCEwKSx5ZihucihrLFBlLCEwKSxiZSksMCxwZSxlZSk7aWYoVmUpe2lmKFZlLmNoYXJ0cylmb3IodmFyIFll''@;'; put 'put ''PTA7WWU8VmUuY2hhcnRzLmxlbmd0aDsrK1llKXt2YXIgZXQ9VmUuY2hhcnRzW1llXSxjdD1mbihldC5UYXJnZXQsYmUpLEV0PVZyKGN0KSxhdD0iY2hhcnQiPT1PJiYwPT1ZZSxidD15MihucihrLGN0LCEwKSwwLDAseWYobnIoayxFdCwhMCksY3QpLDAsYXQ/UzpudWxsLGV0LGF0P251bGw6''@;'; put 'put ''Uyk7YXR8fChTWyIhY2hhcnRzIl18fChTWyIhY2hhcnRzIl09W10pLFNbIiFjaGFydHMiXS5wdXNoKGJ0KSl9aWYoZWUuYm9va0ltYWdlcyYmVmUuaW1hZ2VzKWZvcih2YXIganQ9MDtqdDxWZS5pbWFnZXMubGVuZ3RoOysranQpe3ZhciBrdD1WZS5pbWFnZXNbanRdLE90PXsiIXR5cGUiOiJp''@;'; put 'put ''bWFnZSIsIiFwb3MiOkZrKGt0LkFuY2hvciksIiFwb3NUeXBlIjprdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6TDUoa3QuQW5jaG9yLFMpLCIhcmVscG9zIjpBQyhrdC5BbmNob3IsUyl9O2lmKGt0LlRhcmdldCYmKE90WyIhcGF0aCJdPWZuKGt0LlRhcmdl''@;'; put 'put ''dCxiZSksT3RbIiFkYXRhIl09VHQoayxPdFsiIXBhdGgiXSksT3RbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgT3RbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLGt0LkxpbmsmJihPdFsiIWRhdGF0eXBlIl18fChPdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLE90WyIhbGluayJd''@;'; put 'put ''PWt0LkxpbmspLCFPdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO1NbIiFpbWFnZXMiXXx8KFNbIiFpbWFnZXMiXT1bXSksU1siIWltYWdlcyJdLnB1c2goT3QpfXZhciBLdCxUbjtpZihWZS5zaGFwZXMpZm9yKHZhciBTbj0wO1NuPFZlLnNoYXBlcy5s''@;'; put 'put ''ZW5ndGg7KytTbilUbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpMNSgoS3Q9VmUuc2hhcGVzW1NuXSkuQW5jaG9yLFMpLCIhcG9zVHlwZSI6S3QuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkw1KEt0LkFuY2hvcixTKSwiIXJlbHBvcyI6QUMoS3QuQW5jaG9y''@;'; put 'put ''LFMpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2gocnIpLFNbIiFzaGFwZXMiXXx8KFNbIiFzaGFwZXMiXT1bXSksU1siIXNoYXBlcyJdLnB1c2goVG4pfX1mdW5jdGlvbiBycihscil7S3RbbHJdJiYoVG5bbHJdPUt0W2xyXSl9fShjdCxwZSxTLE8sYmUsMCwwLFZlKTt2YXIgRXQ9''@;'; put 'put ''W107cmV0dXJuIHNlJiZzZVtLXSYmUmUoc2VbS10pLmZvckVhY2goZnVuY3Rpb24oYXQpe2lmKHNlW0tdW2F0XS5UeXBlPT1LYS5DTU5UKXt2YXIgYnQ9Zm4oc2VbS11bYXRdLlRhcmdldCxPKTtpZighKEV0PWZ1bmN0aW9uIHh6KFMsTyxrKXtyZXR1cm4iLmJpbiI9PT1PLnNsaWNlKC00KT9m''@;'; put 'put ''dW5jdGlvbiBleShTLE8pe3ZhciBrPVtdLEs9W10sZWU9e30sc2U9ITE7cmV0dXJuIHVyKFMsZnVuY3Rpb24ocGUsYmUsUGUpe3N3aXRjaChQZSl7Y2FzZSA2MzI6Sy5wdXNoKHBlKTticmVhaztjYXNlIDYzNTplZT1wZTticmVhaztjYXNlIDYzNzplZS50PXBlLnQsZWUuaD1wZS5oLGVlLnI9''@;'; put 'put ''cGUucjticmVhaztjYXNlIDYzNjppZihlZS5hdXRob3I9S1tlZS5pYXV0aG9yXSxkZWxldGUgZWUuaWF1dGhvcixPLnNoZWV0Um93cyYmZWUucmZ4JiZPLnNoZWV0Um93czw9ZWUucmZ4LnIpYnJlYWs7ZWUudHx8KGVlLnQ9IiIpLGRlbGV0ZSBlZS5yZngsay5wdXNoKGVlKTticmVhaztjYXNl''@;'; put 'put ''IDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6c2U9ITA7YnJlYWs7Y2FzZSAzNjpzZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKGJlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoYmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFzZXx8Ty5XVEYpKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitQZSsiICIrYmUpfX0pLGt9KFMsayk6ZnVuY3Rpb24gemsoUyxPKXtpZihTLm1hdGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVybltdO3ZhciBrPVtdLEs9W10sZWU9Uy5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSop''@;'; put 'put ''PFwvKD86XHcrOik/YXV0aG9ycz4vKTtlZSYmZWVbMV0mJmVlWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZigiIiE9PW1lJiYiIiE9PW1lLnRyaW0oKSl7dmFyIHBlPW1lLm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3BlJiZr''@;'; put 'put ''LnB1c2gocGVbMV0pfX0pO3ZhciBzZT1TLm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIHNlJiZzZVsxXSYmc2VbMV0uc3BsaXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXtpZigi''@;'; put 'put ''IiE9PW1lJiYiIiE9PW1lLnRyaW0oKSl7dmFyIHBlPW1lLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHBlKXt2YXIgYmU9dnIocGVbMF0pLFBlPXthdXRob3I6YmUuYXV0aG9ySWQmJmtbYmUuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6YmUucmVmLGd1aWQ6YmUu''@;'; put 'put ''Z3VpZH0sVmU9Tm8oYmUucmVmKTtpZighKE8uc2hlZXRSb3dzJiZPLnNoZWV0Um93czw9VmUucikpe3ZhciBZZT1tZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcrOik/dGV4dD4vKSxldD0hIVllJiYhIVllWzFdJiZ1QyhZZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07''@;'; put 'put ''UGUucj1ldC5yLCI8dD48L3Q+Ij09ZXQuciYmKGV0LnQ9ZXQuaD0iIiksUGUudD0oZXQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLE8uY2VsbEhUTUwmJihQZS5oPWV0LmgpLEsucHVzaChQZSl9fX19KSxLfShTLGspfShUdChTLGJ0LCEwKSxidCxi''@;'; put 'put ''ZSkpfHwhRXQubGVuZ3RoKXJldHVybjshZnVuY3Rpb24gamsoUyxPKXt2YXIgSyxrPUFycmF5LmlzQXJyYXkoUyk7Ty5mb3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIgc2U9Tm8oZWUucmVmKTtpZihrPyhTW3NlLnJdfHwoU1tzZS5yXT1bXSksSz1TW3NlLnJdW3NlLmNdKTpLPVNbZWUucmVmXSwh''@;'; put 'put ''Syl7Sz17dDoieiJ9LGs/U1tzZS5yXVtzZS5jXT1LOlNbZWUucmVmXT1LO3ZhciBtZT1vbyhTWyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTttZS5zLnI+c2UuciYmKG1lLnMucj1zZS5yKSxtZS5lLnI8c2UuciYmKG1lLmUucj1zZS5yKSxtZS5zLmM+c2UuYyYmKG1lLnMuYz1zZS5jKSxt''@;'; put 'put ''ZS5lLmM8c2UuYyYmKG1lLmUuYz1zZS5jKTt2YXIgcGU9cmEobWUpO3BlIT09U1siIXJlZiJdJiYoU1siIXJlZiJdPXBlKX1LLmN8fChLLmM9W10pO3ZhciBiZT17YTplZS5hdXRob3IsdDplZS50LHI6ZWUucn07YmUuciYmInN0cmluZyI9PXR5cGVvZiBiZS5yJiYoYmUuUj13NShiZS5yKSks''@;'; put 'put ''ZWUuaCYmKGJlLmg9ZWUuaCksSy5jLnB1c2goYmUpfSl9KGN0LEV0KX19KSxmdW5jdGlvbiBKUyhTLE8sayxLLGVlLHNlLG1lKXshU3x8IVNbIiF0YWJsZXJlZnMiXXx8IWt8fCFrWyIhaWQiXXx8KFNbIiF0YWJsZXMiXT1bXSxTWyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7''@;'; put 'put ''dmFyIGJlPWtbIiFpZCJdW3BlXTtpZihiZSYmYmUuVGFyZ2V0KXt2YXIgUGU9Zm4oYmUuVGFyZ2V0LEspOyFmdW5jdGlvbiB2QihTLE8sayxLLGVlKXt2YXIgc2U9e3N0eWxlOnt9LGhlYWRlcjowfSxtZT0hMTtTLnJlcGxhY2UoZW4sZnVuY3Rpb24ocGUpe3ZhciBiZT12cihwZSk7c3dpdGNo''@;'; put 'put ''KFduKGJlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3Rh''@;'; put 'put ''YmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90''@;'; put 'put ''b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4i''@;'; put 'put ''OmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6YmUucmVmJiYoc2UucmVmPWJlLnJlZiksYmUubmFtZT9zZS5uYW1lPWJlLm5hbWU6YmUuZGlzcGxheU5hbWUmJihzZS5uYW1lPWJlLmRpc3BsYXlOYW1lKSxudWxsIT1iZS5oZWFkZXJyb3djb3VudCYmMSE9K2JlLmhlYWRlcnJv''@;'; put 'put ''d2NvdW50P3NlLmhlYWRlcj0rYmUuaGVhZGVycm93Y291bnQ6bnVsbD09YmUuaGVhZGVycm93Y291bnQmJihzZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRlcj4iOnNlLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRh''@;'; put 'put ''YmxlQ29sdW1ucz4iOnNlLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOmJlLnNob3dSb3dTdHJpcGVzJiYoc2Uuc3R5bGUucm93c3RyaXBlPXRpKGJlLnNob3dSb3dTdHJpcGVzKSksYmUuc2hvd0NvbHVtblN0cmlwZXMmJihzZS5zdHlsZS5jb2xzdHJpcGU9dGkoYmUuc2hv''@;'; put 'put ''d0NvbHVtblN0cmlwZXMpKSxiZS5zaG93Rmlyc3RDb2x1bW4mJihzZS5zdHlsZS5jb2xmaXJzdD10aShiZS5zaG93Rmlyc3RDb2x1bW4pKSxiZS5zaG93TGFzdENvbHVtbiYmKHNlLnN0eWxlLmNvbGxhc3Q9dGkoYmUuc2hvd0xhc3RDb2x1bW4pKSxiZS5uYW1lJiYoc2Uuc3R5bGUubmFtZT1i''@;'; put 'put ''ZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOnNlLmNvbHMucHVzaCh7aWQ6K2JlLmlkLG5hbWU6YmUubmFtZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6''@;'; put 'put ''Y2FzZSI8Y3VzdG9tRmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6bWU9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2FzZSI8L2V4dD4iOm1lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW1lJiZlZS5XVEYpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitiZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHBlfSksc2UuZmlsdGVyfHwoc2UuZmlsdGVyPSExKSxzZS5zdHlsZS5uYW1lJiYhc2Uuc3R5bGUubmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJmsuVGFibGUmJmsuVGFibGUu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihwZSl7KHBlLm5hbWU9PXNlLnN0eWxlLm5hbWV8fHBlLnJhd25hbWU9PXNlLnN0eWxlLm5hbWUpJiYoc2Uuc3R5bGUucmF3PXF0KHBlKSl9KSxPWyIhdGFibGVzIl0ucHVzaChzZSl9KFR0KE8sUGUsITApLFMsZWUsMCxtZSl9fSksZGVsZXRlIFNbIiF0YWJsZXJl''@;'; put 'put ''ZnMiXSl9KGN0LFMsc2VbS10sTyxZZSwwLGJlKSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZQeS5wdXNoKFtjdCxTLHNlW0tdLE8se1NoZWV0czptZX0sWWUsYmVdKSxmdW5jdGlvbiBReihTLE8sayxLLGVlLHNlLG1lLHBlKXtpZihTJiZTWyIhbGVnZHJhd2VsIl0pe3ZhciBiZT1m''@;'; put 'put ''bihTWyIhbGVnZHJhd2VsIl0uVGFyZ2V0LEspLFBlPW5yKGssYmUsITApO1BlJiZmdW5jdGlvbiBYdihTLE8sayl7dmFyIEs9MDsoUy5tYXRjaCh5Qil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGVlKXt2YXIganQsa3QsT3QsS3QsVG4scnIsU24sbHIsc2U9IiIsbWU9ITAscGU9IiIsYmU9LTEs''@;'; put 'put ''UGU9e30sVmU9e30sWWU9e30sZXQ9LTEsY3Q9LTEsRXQ9IiIsYXQ9IiIsYnQ9IiIsWG49ITEsQm49ITE7c3dpdGNoKGVlLnJlcGxhY2UoZW4sZnVuY3Rpb24oZXIsTWkpe3ZhciBGaT12cihlcik7c3dpdGNoKFduKEZpWzBdKSl7Y2FzZSI8c2hhcGUiOkZpLmZpbGxjb2xvciYmKFBlLmNvbG9y''@;'; put 'put ''MT1GaS5maWxsY29sb3IpLEZpLnN0cm9rZWNvbG9yJiYoWWUuY29sb3I9Rmkuc3Ryb2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PUZpWzBdJiYoRmkuY29sb3IyJiYoUGUuY29sb3IyPUZpLmNvbG9yMiksRmkudHlwZSYmKFBlLnR5cGU9RmkudHlw''@;'; put 'put ''ZSkpO2JyZWFrO2Nhc2UiPC9maWxsPiI6Y2FzZSI8bG9jayI6Y2FzZSI8bG9jay8+IjpicmVhaztjYXNlIjxzaGFkb3ciOkZpLmNvbG9yJiYoVmUuY29sb3I9RmkuY29sb3IpLEZpLm9uJiYoVmUub249Rmkub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOkZpLk9iamVjdFR5cGUmJihzZT1G''@;'; put 'put ''aS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxlLz4iOm1lPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2Fz''@;'; put 'put ''ZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2Ui''@;'; put 'put ''PE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRleHRib3g+IjpiZT1NaStlci5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4i''@;'; put 'put ''OnBlPWVlLnNsaWNlKGJlLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOmV0PStlZS5zbGljZShiZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9Db2x1bW4+IjpjdD0rZWUuc2xpY2UoYmUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6RXQ9ZWUuc2xpY2UoYmUsTWkp''@;'; put 'put ''LnRyaW0oKTticmVhaztjYXNlIjwvRm1sYUxpbms+IjphdD1lZS5zbGljZShiZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhUmFuZ2U+IjpTbj1lZS5zbGljZShiZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6bHI9ZWUuc2xpY2UoYmUsTWkpLnRyaW0oKTticmVhaztj''@;'; put 'put ''YXNlIjwvVmFsPiI6anQ9K2VlLnNsaWNlKGJlLE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L01pbj4iOmt0PStlZS5zbGljZShiZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpPdD0rZWUuc2xpY2UoYmUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvSW5jPiI6S3Q9K2VlLnNsaWNlKGJl''@;'; put 'put ''LE1pKS50cmltKCk7YnJlYWs7Y2FzZSI8L1BhZ2U+IjpUbj0rZWUuc2xpY2UoYmUsTWkpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOnJyPStlZS5zbGljZShiZSxNaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6YnQ9ZWUuc2xpY2UoYmUsTWkpLnRyaW0oKTticmVhaztj''@;'; put 'put ''YXNlIjxNb3ZlV2l0aENlbGxzLz4iOmNhc2UiPE1vdmVXaXRoQ2VsbHM+IjpYbj0hMDticmVhaztjYXNlIjxTaXplV2l0aENlbGxzLz4iOmNhc2UiPFNpemVXaXRoQ2VsbHM+IjpCbj0hMH1yZXR1cm4iIn0pLHNlKXtjYXNlIk5vdGUiOnZhciBmcj16dS5zaGVldF9nZXRfY2VsbChPLGV0Pj0w''@;'; put 'put ''JiZjdD49MD9xaSh7cjpldCxjOmN0fSk6a1tLXS5yZWYpO2ZyLmMmJihmci5jLmhpZGRlbj1tZSxwZSYmKGZyLmMucmF3YW5jaG9yPXBlLEhrKHBlLGZyLmMpLGxCKGZyLmNbIiFwb3MiXSwyKiEhWG4rISFCbixPKSksUGUuY29sb3IxJiYoZnIuYy5maWxsPVBlKSxWZS5jb2xvciYmKGZyLmMu''@;'; put 'put ''c2hhZG93PVZlKSxZZS5jb2xvciYmKGZyLmMuc3Ryb2tlPVllKSksKytLO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVja2JveCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6Y2FzZSJSYWRpbyI6Y2FzZSJTcGluIjpjYXNlIkVk''@;'; put 'put ''aXQiOk9bIiFjb250cm9scyJdfHwoT1siIWNvbnRyb2xzIl09W10pO3ZhciB5cj17IiF0eXBlIjpzZX07cGUmJkhrKHBlLHlyKSxFdCYmKHlyLm1hY3JvPUV0LnJlcGxhY2UoIlswXSEiLCIiKSksYXQmJih5ci5saW5rPWF0KSwiU2Nyb2xsIj09c2V8fCJTcGluIj09c2U/KG51bGw9PWp0JiYo''@;'; put 'put ''anQ9MCksbnVsbD09a3QmJihrdD0wKSxudWxsPT1PdCYmKE90PTNlNCksbnVsbD09S3QmJihLdD0xKSwiU2Nyb2xsIj09c2UmJm51bGw9PVRuJiYoVG49MTApKToiUmFkaW8iPT1zZXx8IkNoZWNrYm94Ij09c2U/KG51bGw9PXJyJiYocnI9MCksanQ9cnIpOigiTGlzdCI9PXNlfHwiRHJvcCI9''@;'; put 'put ''PXNlKSYmKG51bGwhPVNuJiYoeXIucmVmPVNuKSxudWxsPT1sciYmKGxyPSJTaW5nbGUiKSwiTGlzdCI9PXNlJiYoeXIuc2VsPWxyKSksbnVsbCE9anQmJih5ci52YWw9anQpLG51bGwhPWt0JiYoeXIubWluPWt0KSxudWxsIT1PdCYmKHlyLm1heD1PdCksbnVsbCE9S3QmJih5ci5zdGVwPUt0''@;'; put 'put ''KSxudWxsIT1UbiYmKHlyLnBhZ2U9VG4pLGJ0JiYoeXIudD1idC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxPWyIhY29udHJvbHMiXS5wdXNoKHlyKX19KX0oZ28oUGUpLFMscGV8fFtdKSxTWyIhTERQIl09YmUsU1siIWN0cmxpZCJdJiZTWyIhY3RybGlkIl0uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihWZSl7aWYoVmUucmVsJiZWZS5yZWwuVGFyZ2V0KXt2YXIgWWU9Zm4oVmUucmVsLlRhcmdldCxLKTtWZS5wYXRoPVllLGRlbGV0ZSBWZS5yZWx9fSl9fShjdCwwLFMsTywwLDAsMCxFdCksY3R9Y2F0Y2goYXQpe2lmKGJlLldURil0aHJvdyBhdH19ZnVuY3Rpb24gQWMoUyl7cmV0''@;'; put 'put ''dXJuIi8iPT1TLmNoYXJBdCgwKT9TLnNsaWNlKDEpOlN9dmFyIEJjPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBycChTLE8pe2lmKFB5PVtdLE5JKE89T3x8e30pLHJpKFMsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxyaShTLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBmdW5jdGlvbiB3YShT''@;'; put 'put ''LE8pe089T3x8e30scmkoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFZvKFMsTyl7Zm9yKHZhciBLLGVlLGs9V1MoUyk7Sz1ZNS5leGVjKGspOylzd2l0Y2goS1szXSl7Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShlZT12cihLWzBd''@;'; put 'put ''LCExKSkucGF0aCYmZWUudHlwZSE9PWxsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRl''@;'; put 'put ''cml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKE8mJk8uV1RGKXRocm93IEt9fShUdChTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSxPKTt2YXIgaz1ucihTLCJjb250ZW50LnhtbCIpO2lmKCFrKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBLPVhTKGdvKGspLE8pO3JldHVybiByaShTLCJtZXRhLnhtbCIpJiYoSy5Qcm9wcz12dihUdChTLCJtZXRhLnhtbCIpKSksS30oUyxPKTtpZihyaShTLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBzZSxtZSxrPWZ1bmN0aW9uIHh0KFMpe2Zvcih2YXIgTz1TLkZ1bGxQYXRoc3x8UmUoUy5maWxlcyksaz1bXSxLPTA7SzxPLmxlbmd0aDsrK0spIi8iIT1PW0tdLnNsaWNlKC0xKSYmay5wdXNoKE9bS10pO3JldHVybiBrLnNv''@;'; put 'put ''cnQoKX0oUyksSz1mdW5jdGlvbiBOdyhTKXt2YXIgTz17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhl''@;'; put 'put ''bWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxl''@;'; put 'put ''czpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIVN8fCFTLm1hdGNoKXJldHVybiBPO3ZhciBrPXt9O2lmKChTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oSyl7dmFyIGVlPXZyKEspO3N3aXRjaChlZVswXS5y''@;'; put 'put ''ZXBsYWNlKHVhLCI8Iikpe2Nhc2UiPD94bWwiOmJyZWFrO2Nhc2UiPFR5cGVzIjpPLnhtbG5zPWVlWyJ4bWxucyIrKGVlWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjprW2VlLkV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXT1lZS5Db250ZW50''@;'; put 'put ''VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09T1t5NFtlZS5Db250ZW50VHlwZV1dJiZPW3k0W2VlLkNvbnRlbnRUeXBlXV0ucHVzaChlZS5QYXJ0TmFtZSl9fSksTy54bWxucyE9PVlpLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrTy54bWxucyk7''@;'; put 'put ''cmV0dXJuIE8uY2FsY2NoYWluPU8uY2FsY2NoYWlucy5sZW5ndGg+MD9PLmNhbGNjaGFpbnNbMF06IiIsTy5zc3Q9Ty5zdHJzLmxlbmd0aD4wP08uc3Ryc1swXToiIixPLnN0eWxlPU8uc3R5bGVzLmxlbmd0aD4wP08uc3R5bGVzWzBdOiIiLE8uY29ubj1PLmNvbm5zLmxlbmd0aD4wP08uY29u''@;'; put 'put ''bnNbMF06IiIsTy5kZWZhdWx0cz1rLGRlbGV0ZSBPLmNhbGNjaGFpbnMsT30obnIoUywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxlZT0hMTtpZigwPT09Sy53b3JrYm9va3MubGVuZ3RoJiZUdChTLG1lPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmSy53b3JrYm9va3MucHVzaChtZSksMD09PUsu''@;'; put 'put ''d29ya2Jvb2tzLmxlbmd0aCl7aWYoIVR0KFMsbWU9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtLLndvcmtib29rcy5wdXNoKG1lKSxlZT0hMH0iYmluIj09Sy53b3JrYm9va3NbMF0uc2xpY2UoLTMpJiYoZWU9ITApO3Zh''@;'; put 'put ''ciBwZT17fSxiZT17fTtpZighTy5ib29rU2hlZXRzJiYhTy5ib29rUHJvcHMpe2lmKGw4PVtdLEsuc3N0KXRyeXtsOD1mdW5jdGlvbiBNeihTLE8sayl7cmV0dXJuIi5iaW4iPT09Ty5zbGljZSgtNCk/ZnVuY3Rpb24gT3YoUyxPKXt2YXIgaz1bXSxLPSExO3JldHVybiB1cihTLGZ1bmN0aW9u''@;'; put 'put ''KHNlLG1lLHBlKXtzd2l0Y2gocGUpe2Nhc2UgMTU5OmsuQ291bnQ9c2VbMF0say5VbmlxdWU9c2VbMV07YnJlYWs7Y2FzZSAxOTprLnB1c2goc2UpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6Sz0hMDticmVhaztjYXNlIDM2Oks9ITE7YnJlYWs7ZGVmYXVsdDppZihtZS5pbmRl''@;'; put 'put ''eE9mKCJCZWdpbiIpPjB8fG1lLmluZGV4T2YoIkVuZCIpLCFLfHxPLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrcGUrIiAiK21lKX19KSxrfShTLGspOmZ1bmN0aW9uIGYyKFMsTyl7dmFyIGs9W10sSz0iIjtpZighUylyZXR1cm4gazt2YXIgZWU9Uy5tYXRjaChz''@;'; put 'put ''ayk7aWYoZWUpe0s9ZWVbMl0ucmVwbGFjZShsaywiIikuc3BsaXQocTYpO2Zvcih2YXIgc2U9MDtzZSE9Sy5sZW5ndGg7KytzZSl7dmFyIG1lPXVDKEtbc2VdLnRyaW0oKSxPKTtudWxsIT1tZSYmKGtbay5sZW5ndGhdPW1lKX1lZT12cihlZVsxXSksay5Db3VudD1lZS5jb3VudCxrLlVuaXF1''@;'; put 'put ''ZT1lZS51bmlxdWVDb3VudH1yZXR1cm4ga30oUyxrKX0oVHQoUyxBYyhLLnNzdCkpLEsuc3N0LE8pfWNhdGNoKF9yKXtpZihPLldURil0aHJvdyBfcn1PLmNlbGxTdHlsZXMmJksudGhlbWVzLmxlbmd0aCYmKHBlPWZ1bmN0aW9uIFN6KFMsTyxrKXtyZXR1cm4gRUMoUyxrKX0obnIoUyxLLnRo''@;'; put 'put ''ZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsTykpLEsuc3R5bGUmJihiZT1mdW5jdGlvbiBDeihTLE8sayxLKXtyZXR1cm4iLmJpbiI9PT1PLnNsaWNlKC00KT9mdW5jdGlvbiB4ayhTLE8sayl7dmFyIEs9e051bWJlckZtdDpbXX07Zm9yKHZhciBlZSBpbiBBLl90YWJsZSlL''@;'; put 'put ''Lk51bWJlckZtdFtlZV09QS5fdGFibGVbZWVdO0suQ2VsbFhmPVtdLEsuRm9udHM9W10sSy5GaWxscz1bXSxLLkJvcmRlcnM9W107dmFyIHNlPVtdLG1lPSExO3JldHVybiB1cihTLGZ1bmN0aW9uKGJlLFBlLFZlKXtzd2l0Y2goVmUpe2Nhc2UgNDQ6Sy5OdW1iZXJGbXRbYmVbMF1dPWJlWzFd''@;'; put 'put ''LEEubG9hZChiZVsxXSxiZVswXSk7YnJlYWs7Y2FzZSA0MzpZdihiZS5jb2xvcixPKSxLLkZvbnRzLnB1c2goYmUpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5''@;'; put 'put ''NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTpiZS5mZ0NvbG9yJiZZdihiZS5mZ0NvbG9yLE8pLGJlLmJnQ29sb3ImJll2KGJlLmJnQ29sb3IsTyksSy5GaWxscy5wdXNoKGJlKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oWWUpe2JlW1llXSYmYmVbWWVdLmNvbG9yJiZZdihiZVtZZV0uY29sb3IsTyl9KSxLLkJvcmRlcnMucHVzaChiZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09c2Vbc2UubGVuZ3RoLTFdJiZLLkNlbGxYZi5wdXNoKGJlKTticmVhaztjYXNlIDM1Om1lPSEwO2JyZWFr''@;'; put 'put ''O2Nhc2UgMzY6bWU9ITE7YnJlYWs7Y2FzZSAzNzpzZS5wdXNoKFBlKSxtZT0hMDticmVhaztjYXNlIDM4OnNlLnBvcCgpLG1lPSExO2JyZWFrO2RlZmF1bHQ6aWYoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKXNlLnB1c2goUGUpO2Vsc2UgaWYoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+''@;'; put 'put ''MClzZS5wb3AoKTtlbHNlIGlmKCFtZXx8ay5XVEYmJiJCcnRBQ0JlZ2luIiE9c2Vbc2UubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWZSsiICIrUGUpfX0pLChLLkZvbnRzfHxbXSlbMF0mJkk0KEsuRm9udHNbMF0pLEt9KFMsayxLKTpfayhTLGssSyl9''@;'; put 'put ''KFR0KFMsQWMoSy5zdHlsZSkpLEsuc3R5bGUscGUsTykpfXZhciBQZT1LLmxpbmtzLm1hcChmdW5jdGlvbihfcil7dHJ5e3ZhciBGbj15ZihucihTLFZyKEFjKF9yKSkpLF9yKTtyZXR1cm4gZnVuY3Rpb24gRXooUyxPLGssSyl7cmV0dXJuIi5iaW4iPT09ay5zbGljZSgtNCk/ZnVuY3Rpb24g''@;'; put 'put ''VmsoUyxPLGssSyl7aWYoIVMpcmV0dXJuIFM7dmFyIGVlPUt8fHt9LHNlPSExO3VyKFMsZnVuY3Rpb24oYmUsUGUsVmUpe3N3aXRjaChWZSl7Y2FzZSAzNTk6Y2FzZSAzNjM6Y2FzZSAzNjQ6Y2FzZSAzNjY6Y2FzZSAzNjc6Y2FzZSAzNjg6Y2FzZSAzNjk6Y2FzZSAzNzA6Y2FzZSAzNzE6Y2Fz''@;'; put 'put ''ZSA0NzI6Y2FzZSA1Nzc6Y2FzZSA1Nzg6Y2FzZSA1Nzk6Y2FzZSA1ODA6Y2FzZSA1ODE6Y2FzZSA1ODI6Y2FzZSA1ODM6Y2FzZSA1ODQ6Y2FzZSA1ODU6Y2FzZSA1ODY6Y2FzZSA1ODc6YnJlYWs7Y2FzZSAzNTpzZT0hMDticmVhaztjYXNlIDM2OnNlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgo''@;'; put 'put ''UGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChQZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXNlfHxlZS5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWZS50b1N0cmluZygxNikrIiAiK1BlKX19LGVlKX0oUywwLDAsSyk6ZnVuY3Rpb24gTmsoUyxP''@;'; put 'put ''LGssSyl7dmFyIGVlPUt8fHt9LHNlPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX0scGU9ITEsYmU9e30sUGU9LTEsVmU9LTEsWWU9e3M6e3I6MCxjOjB9LGU6e3I6LTEsYzotMX19LGV0PXt9LGN0PTA7cmV0dXJuKFN8fCIiKS5yZXBsYWNlKGVuLGZ1bmN0aW9uKEV0LGF0KXt2YXIgYnQ9dnIo''@;'; put 'put ''RXQpO3N3aXRjaChXbihidFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGV4dGVybmFsTGluayI6Y2FzZSI8L2V4dGVybmFsTGluaz4iOmNhc2UiPC9leHRlcm5hbEJvb2s+IjpjYXNlIjxzaGVldE5hbWVzIjpjYXNlIjxzaGVldE5hbWVzPiI6Y2FzZSI8L3NoZWV0TmFtZXM+IjpjYXNlIjxzaGVl''@;'; put 'put ''dERhdGFTZXQ+IjpjYXNlIjxzaGVldERhdGFTZXQvPiI6Y2FzZSI8L3NoZWV0RGF0YVNldD4iOmNhc2UiPC9yb3c+IjpicmVhaztjYXNlIjxleHRlcm5hbEJvb2siOmNhc2UiPGV4dGVybmFsQm9vaz4iOnNlLlRhcmdldD1PWyIhaWQiXVtidC5pZF0uVGFyZ2V0LHNlLk1pc3Npbmc9T1siIWlk''@;'; put 'put ''Il1bYnQuaWRdLlR5cGU9PUthLlhNSVNTO2JyZWFrO2Nhc2UiPHNoZWV0TmFtZSI6c2UuU2hlZXROYW1lcy5wdXNoKFFyKGdvKGJ0LnZhbCkpKTticmVhaztjYXNlIjxzaGVldERhdGEiOmJlPXt9LHNlLlNoZWV0c1tzZS5TaGVldE5hbWVzW2J0LnNoZWV0SWRdXT10aShidC5yZWZyZXNoRXJy''@;'; put 'put ''b3J8fCIwIik/bnVsbDpiZTticmVhaztjYXNlIjwvc2hlZXREYXRhPiI6WWUuZS5jPj0wJiYoYmVbIiFyZWYiXT1yYShZZSkpO2JyZWFrO2Nhc2UiPHJvdyI6Y2FzZSI8cm93PiI6YnQucj9QZT1wYXJzZUludChidC5yLDEwKS0xOlBlKyssVmU9LTE7YnJlYWs7Y2FzZSI8Y2VsbCI6Y2FzZSI8''@;'; put 'put ''Y2VsbD4iOmJ0LnI/VmU9Tm8oYnQucikuYzorK1ZlLGV0LnQ9YnQudHx8Im4iLCJzdHIiPT1ldC50JiYoZXQudD0icyIpO2JyZWFrO2Nhc2UiPC9jZWxsPiI6WWUuZS5yPFBlJiYoWWUuZS5yPVBlKSxZZS5lLmM8VmUmJihZZS5lLmM9VmUpLGJlW3FpKHtyOlBlLGM6VmV9KV09ZXQsZXQ9e307''@;'; put 'put ''YnJlYWs7Y2FzZSI8diI6Y2FzZSI8dj4iOmN0PUV0Lmxlbmd0aCthdDticmVhaztjYXNlIjwvdj4iOnZhciBqdD1RcihTLnNsaWNlKGN0LGF0KSk7ZXQudj0ibiI9PWV0LnQ/cGFyc2VGbG9hdChqdCk6anQ7YnJlYWs7Y2FzZSI8di8+IjpldC52PSIiO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1l''@;'; put 'put ''cz4iOnBlPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpwZT0hMTticmVhaztkZWZhdWx0OmlmKCFwZSYmZWUuV1RGKXRocm93InVucmVjb2duaXplZCAiK2J0WzBdKyIgaW4gZXh0ZXJuYWwgbGluayJ9fSksc2V9KFMsTywwLEspfShUdChTLEFjKF9yKSksRm4sX3IsTyl9Y2F0Y2h7''@;'; put 'put ''fX0pLFZlPWZ1bmN0aW9uIGs4KFMsTyxrKXtyZXR1cm4iLmJpbiI9PT1PLnNsaWNlKC00KT9mdW5jdGlvbiBIbmUoUyxPKXt2YXIgaz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5zOiIifSxLPVtdLGVlPSExO098fChPPXt9KSxP''@;'; put 'put ''LmJpZmY9MTI7dmFyIHNlPVtdLG1lPVtbXV07cmV0dXJuIG1lLlNoZWV0TmFtZXM9W10sbWUuWFRJPVtdLEw4WzE2XT17bjoiQnJ0RlJUQXJjaElEJCIsZjp0cH0sdXIoUyxmdW5jdGlvbihiZSxQZSxWZSl7c3dpdGNoKFZlKXtjYXNlIDE1NjptZS5TaGVldE5hbWVzLnB1c2goYmUubmFtZSks''@;'; put 'put ''ay5TaGVldHMucHVzaChiZSk7YnJlYWs7Y2FzZSAxNTM6ay5XQlByb3BzPWJlO2JyZWFrO2Nhc2UgMzk6bnVsbCE9YmUuU2hlZXQmJihPLlNJRD1iZS5TaGVldCksYmUuUmVmPXMwKGJlLlB0ZyxudWxsLG51bGwsbWUsTyksZGVsZXRlIE8uU0lELGRlbGV0ZSBiZS5QdGcsc2UucHVzaChiZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSAxMDM2OmNhc2UgMzYxOmNhc2UgMjA3MTpjYXNlIDE1ODpjYXNlIDE0MzpjYXNlIDY2NDpjYXNlIDM1MzpjYXNlIDMwNzI6Y2FzZSAzMDczOmNhc2UgNTM0OmNhc2UgNjc3OmNhc2UgMTU3OmNhc2UgNjEwOmNhc2UgMjA1MDpjYXNlIDE1NTpjYXNlIDU0ODpjYXNlIDY3Njpj''@;'; put 'put ''YXNlIDEyODpjYXNlIDY2NTpjYXNlIDIxMjg6Y2FzZSAyMTI1OmNhc2UgNTQ5OmNhc2UgMjA1MzpjYXNlIDU5NjpjYXNlIDIwNzY6Y2FzZSAyMDc1OmNhc2UgMjA4MjpjYXNlIDM5NzpjYXNlIDE1NDpjYXNlIDExMTc6Y2FzZSA1NTM6Y2FzZSAyMDkxOmNhc2UgMTY6YnJlYWs7Y2FzZSAzNTc6''@;'; put 'put ''Y2FzZSAzNTg6Y2FzZSAzNTU6Y2FzZSA2Njc6bWVbMF0ubGVuZ3RoP21lLnB1c2goW1ZlLGJlXSk6bWVbMF09W1ZlLGJlXSxtZVttZS5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UgMzYyOjA9PT1tZS5sZW5ndGgmJihtZVswXT1bXSxtZVswXS5YVEk9W10pLG1lW21lLmxlbmd0aC0xXS5Y''@;'; put 'put ''VEk9bWVbbWUubGVuZ3RoLTFdLlhUSS5jb25jYXQoYmUpLG1lLlhUST1tZS5YVEkuY29uY2F0KGJlKTticmVhaztjYXNlIDM1OmNhc2UgMzc6Sy5wdXNoKFBlKSxlZT0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6Sy5wb3AoKSxlZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKFBlfHwiIikuaW5k''@;'; put 'put ''ZXhPZigiQmVnaW4iKT4wKSYmISgoUGV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFlZXx8Ty5XVEYmJiJCcnRBQ0JlZ2luIiE9S1tLLmxlbmd0aC0xXSYmIkJydEZSVEJlZ2luIiE9S1tLLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1ZlKyIgIitQ''@;'; put 'put ''ZSl9fSxPKSxQUyhrKSxrLk5hbWVzPXNlLGsuc3VwYm9va3M9bWUsa30oUyxrKTpmdW5jdGlvbiBIUyhTLE8pe2lmKCFTKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmlsZSIpO3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxj''@;'; put 'put ''UHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxLPSExLGVlPSJ4bWxucyIsc2U9e30sbWU9MDtpZihTLnJlcGxhY2UoZW4sZnVuY3Rpb24oYmUsUGUpe3ZhciBWZT12cihiZSk7c3dpdGNoKFduKFZlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3dvcmtib29rPiI6Y2FzZSI8Zmls''@;'; put 'put ''ZVZlcnNpb24vPiI6Y2FzZSI8L2ZpbGVWZXJzaW9uPiI6Y2FzZSI8ZmlsZVNoYXJpbmcvPiI6Y2FzZSI8L3dvcmtib29rUHI+IjpjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24vPiI6Y2FzZSI8Ym9va1ZpZXdzIjpjYXNlIjxib29rVmlld3M+IjpjYXNlIjwvYm9va1ZpZXdzPiI6Y2FzZSI8L3dv''@;'; put 'put ''cmtib29rVmlldz4iOmNhc2UiPHNoZWV0cyI6Y2FzZSI8c2hlZXRzPiI6Y2FzZSI8L3NoZWV0cz4iOmNhc2UiPC9zaGVldD4iOmNhc2UiPGZ1bmN0aW9uR3JvdXBzIjpjYXNlIjxmdW5jdGlvbkdyb3Vwcy8+IjpjYXNlIjxmdW5jdGlvbkdyb3VwIjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXMi''@;'; put 'put ''OmNhc2UiPC9leHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMvPiI6Y2FzZSI8ZGVmaW5lZE5hbWUvPiI6Y2FzZSI8L2NhbGNQcj4iOmNhc2UiPG9sZVNpemUiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjwv''@;'; put 'put ''Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3MiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlldyI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlldz4iOmNhc2UiPHBpdm90Q2FjaGVzPiI6Y2FzZSI8L3Bpdm90Q2FjaGVzPiI6Y2FzZSI8cGl2b3RDYWNoZXMiOmNh''@;'; put 'put ''c2UiPHBpdm90Q2FjaGUiOmNhc2UiPHNtYXJ0VGFnUHIiOmNhc2UiPHNtYXJ0VGFnUHIvPiI6Y2FzZSI8c21hcnRUYWdUeXBlcyI6Y2FzZSI8c21hcnRUYWdUeXBlcz4iOmNhc2UiPC9zbWFydFRhZ1R5cGVzPiI6Y2FzZSI8c21hcnRUYWdUeXBlIjpjYXNlIjx3ZWJQdWJsaXNoaW5nIjpjYXNl''@;'; put 'put ''Ijx3ZWJQdWJsaXNoaW5nLz4iOmNhc2UiPGZpbGVSZWNvdmVyeVByIjpjYXNlIjxmaWxlUmVjb3ZlcnlQci8+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzIjpjYXNlIjwvd2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0''@;'; put 'put ''IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6Y2FzZSI8QXJjaElEIjpjYXNlIjxyZXZpc2lvblB0ciI6YnJlYWs7Y2FzZSI8d29ya2Jvb2siOmJlLm1hdGNoKEU4KSYmKGVlPSJ4bWxucyIrYmUubWF0Y2goLzwoXHcrKTovKVsx''@;'; put 'put ''XSksay54bWxucz1WZVtlZV07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBWZVswXSxrLkFwcFZlcnNpb249VmU7YnJlYWs7Y2FzZSI8ZmlsZVNoYXJpbmciOmsuTW9kaWZ5PXt1c2VyOlZlLnVzZXJOYW1lLHdhcm46dGkoVmUucmVhZE9ubHlSZWNvbW1lbmRlZHx8ImZhbHNlIil9''@;'; put 'put ''LChWZS5hbGdvcml0aG1OYW1lfHxWZS5oYXNoVmFsdWV8fFZlLnNhbHRWYWx1ZXx8VmUuc3BpbkNvdW50KSYmKGsuTW9kaWZ5LmVuY3J5cHRpb249e2FsZ286VmUuYWxnb3JpdGhtTmFtZSxoYXNoOlZlLmhhc2hWYWx1ZSxzYWx0OlZlLnNhbHRWYWx1ZSxzcGluOitWZS5zcGluQ291bnR8fDFl''@;'; put 'put ''NX0pO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29rUHIvPiI6YnkuZm9yRWFjaChmdW5jdGlvbihldCl7aWYobnVsbCE9VmVbZXRbMF1dKXN3aXRjaChldFsyXSl7Y2FzZSJib29sIjprLldCUHJvcHNbZXRbMF1dPXRpKFZlW2V0WzBdXSk7YnJlYWs7Y2FzZSJpbnQiOmsu''@;'; put 'put ''V0JQcm9wc1tldFswXV09cGFyc2VJbnQoVmVbZXRbMF1dLDEwKTticmVhaztkZWZhdWx0OmsuV0JQcm9wc1tldFswXV09VmVbZXRbMF1dfX0pLFZlLmNvZGVOYW1lJiYoay5XQlByb3BzLkNvZGVOYW1lPWdvKFZlLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uIjp2''@;'; put 'put ''YXIgWWU9ay5Qcm90ZWN0aW9ufHx7fTtZZS5sb2NrU3RydWN0dXJlPXRpKFZlLmxvY2tTdHJ1Y3R1cmV8fCJmYWxzZSIpLFllLmxvY2tXaW5kb3dzPXRpKFZlLmxvY2tXaW5kb3dzfHwiZmFsc2UiKSxWZS53b3JrYm9va0FsZ29yaXRobU5hbWUmJihZZS5lbmNyeXB0aW9uPXthbGdvOlZlLndv''@;'; put 'put ''cmtib29rQWxnb3JpdGhtTmFtZSxoYXNoOlZlLndvcmtib29rSGFzaFZhbHVlLHNhbHQ6VmUud29ya2Jvb2tTYWx0VmFsdWUsc3BpbjorVmUud29ya2Jvb2tTcGluQ291bnR8fDFlNX0pLGsuUHJvdGVjdGlvbj1ZZTticmVhaztjYXNlIjx3b3JrYm9va1ZpZXciOmNhc2UiPHdvcmtib29rVmll''@;'; put 'put ''dy8+IjpkZWxldGUgVmVbMF0say5XQlZpZXcucHVzaChWZSk7YnJlYWs7Y2FzZSI8c2hlZXQiOnN3aXRjaChWZS5zdGF0ZSl7Y2FzZSJoaWRkZW4iOlZlLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6VmUuSGlkZGVuPTI7YnJlYWs7ZGVmYXVsdDpWZS5IaWRkZW49MH1kZWxldGUg''@;'; put 'put ''VmUuc3RhdGUsVmUubmFtZT1RcihnbyhWZS5uYW1lKSksZGVsZXRlIFZlWzBdLGsuU2hlZXRzLnB1c2goVmUpO2JyZWFrO2Nhc2UiPGV4dGVybmFsUmVmZXJlbmNlIjprLkV4dGVybi5wdXNoKFZlLmlkKTticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMiOmNh''@;'; put 'put ''c2UiPGV4dCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudD4iOks9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOmNhc2UiPC9leHQ+IjpjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOks9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihzZT17''@;'; put 'put ''fSkuTmFtZT1nbyhWZS5uYW1lKSxWZS5jb21tZW50JiYoc2UuQ29tbWVudD1WZS5jb21tZW50KSxWZS5sb2NhbFNoZWV0SWQmJihzZS5TaGVldD0rVmUubG9jYWxTaGVldElkKSx0aShWZS5oaWRkZW58fCIwIikmJihzZS5IaWRkZW49ITApLG1lPVBlK2JlLmxlbmd0aDticmVhaztjYXNlIjwv''@;'; put 'put ''ZGVmaW5lZE5hbWU+IjpzZS5SZWY9UXIoZ28oUy5zbGljZShtZSxQZSkpKSxrLk5hbWVzLnB1c2goc2UpO2JyZWFrO2Nhc2UiPGNhbGNQciI6Y2FzZSI8Y2FsY1ByLz4iOmRlbGV0ZSBWZVswXSxrLkNhbGNQcj1WZTticmVhaztkZWZhdWx0OmlmKCFLJiZPLldURil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InVucmVjb2duaXplZCAiK1ZlWzBdKyIgaW4gd29ya2Jvb2siKX1yZXR1cm4gYmV9KSwtMT09PVlpLm1haW4uaW5kZXhPZihrLnhtbG5zKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK2sueG1sbnMpO3JldHVybiBQUyhrKSxrfShTLGspfShUdChTLEFjKEsud29ya2Jv''@;'; put 'put ''b2tzWzBdKSksSy53b3JrYm9va3NbMF0sTyksWWU9e30sZXQ9IiI7Sy5jb3JlcHJvcHMubGVuZ3RoJiYoKGV0PVR0KFMsQWMoSy5jb3JlcHJvcHNbMF0pLCEwKSkmJihZZT12dihldCkpLDAhPT1LLmV4dHByb3BzLmxlbmd0aCYmKGV0PVR0KFMsQWMoSy5leHRwcm9wc1swXSksITApKSYmZnVu''@;'; put 'put ''Y3Rpb24gV0EoUyxPLGspe3ZhciBLPXt9O098fChPPXt9KSxTPWdvKFMpLHJoLmZvckVhY2goZnVuY3Rpb24oZWUpe3ZhciBzZT0oUy5tYXRjaChEMChlZVswXSkpfHxbXSlbMV07c3dpdGNoKGVlWzJdKXtjYXNlInN0cmluZyI6c2UmJihPW2VlWzFdXT1RcihzZSkpO2JyZWFrO2Nhc2UiYm9v''@;'; put 'put ''bCI6T1tlZVsxXV09InRydWUiPT09c2U7YnJlYWs7Y2FzZSJyYXciOnZhciBtZT1TLm1hdGNoKG5ldyBSZWdFeHAoIjwiK2VlWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrZWVbMF0rIj4iKSk7bWUmJm1lLmxlbmd0aD4wJiYoS1tlZVsxXV09bWVbMV0pfX0pLEsuSGVhZGluZ1BhaXJzJiZL''@;'; put 'put ''LlRpdGxlc09mUGFydHMmJl80KEsuSGVhZGluZ1BhaXJzLEsuVGl0bGVzT2ZQYXJ0cyxPLGspfShldCxZZSxPKSk7dmFyIGN0PXt9OyghTy5ib29rU2hlZXRzfHxPLmJvb2tQcm9wcykmJjAhPT1LLmN1c3Rwcm9wcy5sZW5ndGgmJihldD1ucihTLEFjKEsuY3VzdHByb3BzWzBdKSwhMCkpJiYo''@;'; put 'put ''Y3Q9ZnVuY3Rpb24gYnYoUyxPKXt2YXIgaz17fSxLPSIiLGVlPVMubWF0Y2goTzYpO2lmKGVlKWZvcih2YXIgc2U9MDtzZSE9ZWUubGVuZ3RoOysrc2Upe3ZhciBtZT1lZVtzZV0scGU9dnIobWUpO3N3aXRjaChwZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8cHJvcGVydHkiOks9UXIocGUubmFtZSk7YnJlYWs7Y2FzZSI8L3Byb3BlcnR5PiI6Sz1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PW1lLmluZGV4T2YoIjx2dDoiKSl7dmFyIGJlPW1lLnNwbGl0KCI+IiksUGU9YmVbMF0uc2xpY2UoNCksVmU9YmVbMV07c3dpdGNoKFBlKXtjYXNlImxw''@;'; put 'put ''c3RyIjpjYXNlImJzdHIiOmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjprW0tdPVFyKFZlKTticmVhaztjYXNlImJvb2wiOmtbS109dGkoVmUpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOmtbS109cGFyc2VJ''@;'; put 'put ''bnQoVmUsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6a1tLXT1wYXJzZUZsb2F0KFZlKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNlImRhdGUiOmtbS109TmUoVmUpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1QZS5zbGljZSgtMSkpYnJlYWs7Ty5XVEYmJnR5cGVv''@;'; put 'put ''ZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJVbmV4cGVjdGVkIixtZSxQZSxiZSl9fWVsc2UgaWYoIjwvIiE9PW1lLnNsaWNlKDAsMikmJk8uV1RGKXRocm93IG5ldyBFcnJvcihtZSl9fXJldHVybiBrfShldCxPKSk7dmFyIEV0PXt9O2lmKChPLmJvb2tTaGVldHN8fE8uYm9va1Byb3Bz''@;'; put 'put ''KSYmKFZlLlNoZWV0cz9zZT1WZS5TaGVldHMubWFwKGZ1bmN0aW9uKEZuKXtyZXR1cm4gRm4ubmFtZX0pOlllLldvcmtzaGVldHMmJlllLlNoZWV0TmFtZXMubGVuZ3RoPjAmJihzZT1ZZS5TaGVldE5hbWVzKSxPLmJvb2tQcm9wcyYmKEV0LlByb3BzPVllLEV0LkN1c3Rwcm9wcz1jdCksTy5i''@;'; put 'put ''b29rU2hlZXRzJiZ0eXBlb2Ygc2U8InUiJiYoRXQuU2hlZXROYW1lcz1zZSksTy5ib29rU2hlZXRzP0V0LlNoZWV0TmFtZXM6Ty5ib29rUHJvcHMpKXJldHVybiBFdDtzZT17fTt2YXIgYXQ9e307Ty5ib29rRGVwcyYmSy5jYWxjY2hhaW4mJihhdD1mdW5jdGlvbiBEbyhTLE8sayl7cmV0dXJu''@;'; put 'put ''Ii5iaW4iPT09Ty5zbGljZSgtNCk/ZnVuY3Rpb24gZEIoUyxPLGspe3ZhciBLPVtdO3JldHVybiB1cihTLGZ1bmN0aW9uKG1lLHBlLGJlKXtpZig2Mz09PWJlKUsucHVzaChtZSk7ZWxzZSBpZighKChwZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHBlfHwiIikuaW5kZXhPZigiRW5kIik+''@;'; put 'put ''MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK2JlKyIgIitwZSl9KSxLfShTKTpmdW5jdGlvbiBJQyhTKXt2YXIgTz1bXTtpZighUylyZXR1cm4gTzt2YXIgaz0xO3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oSyl7dmFyIGVlPXZyKEspO3N3''@;'; put 'put ''aXRjaChlZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8Y2FsY0NoYWluIjpjYXNlIjxjYWxjQ2hhaW4+IjpjYXNlIjwvY2FsY0NoYWluPiI6YnJlYWs7Y2FzZSI8YyI6ZGVsZXRlIGVlWzBdLGVlLmk/az1lZS5pOmVlLmk9ayxPLnB1c2goZWUpfX0pLE99KFMpfShUdChTLEFjKEsuY2FsY2NoYWlu''@;'; put 'put ''KSksSy5jYWxjY2hhaW4pKTt2YXIga3QsT3QsYnQ9MCxqdD17fSxLdD1WZS5TaGVldHM7WWUuV29ya3NoZWV0cz1LdC5sZW5ndGgsWWUuU2hlZXROYW1lcz1bXTtmb3IodmFyIFRuPTA7VG4hPUt0Lmxlbmd0aDsrK1RuKVllLlNoZWV0TmFtZXNbVG5dPUt0W1RuXS5uYW1lO3ZhciBycj1lZT8i''@;'; put 'put ''YmluIjoieG1sIixTbj1LLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLGxyPShLLndvcmtib29rc1swXS5zbGljZSgwLFNuKzEpKyJfcmVscy8iK0sud29ya2Jvb2tzWzBdLnNsaWNlKFNuKzEpKyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO3JpKFMsbHIpfHwobHI9InhsL19yZWxz''@;'; put 'put ''L3dvcmtib29rLiIrcnIrIi5yZWxzIik7dmFyIFhuPXlmKG5yKFMsbHIsITApLGxyKSxCbj1Ybixmcj1bXTtYbiYmKFZlJiZWZS5FeHRlcm4mJlZlLkV4dGVybi5sZW5ndGgmJlZlLkV4dGVybi5mb3JFYWNoKGZ1bmN0aW9uKF9yLEZuKXt2YXIgWmk9KCIveGwvIitYblsiIWlkIl1bX3JdLlRh''@;'; put 'put ''cmdldCkucmVwbGFjZSgvW1wvXVtcL10vZywiLyIpLGJpPUsubGlua3MuaW5kZXhPZihaaSk7Ymk+LTEmJihmcltGbl09UGVbYmldKX0pLFZlJiZkZWxldGUgVmUuRXh0ZXJuKSxYbiYmKFhuPWZ1bmN0aW9uIE95KFMsTyl7aWYoIVMpcmV0dXJuIDA7dHJ5e1M9Ty5tYXAoZnVuY3Rpb24oSyl7''@;'; put 'put ''cmV0dXJuIEsuaWR8fChLLmlkPUsuc3RyUmVsSUQpLFtLLm5hbWUsU1siIWlkIl1bSy5pZF0uVGFyZ2V0LG5yZShTWyIhaWQiXVtLLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gUyYmMCE9PVMubGVuZ3RoP1M6bnVsbH0oWG4sVmUuU2hlZXRzKSk7dmFyIHlyPXJpKFMs''@;'; put 'put ''InhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLGVyPVtdLE1pPVtdO2U6Zm9yKGJ0PTA7YnQhPVllLldvcmtzaGVldHM7KytidCl7dmFyIEZpPSJzaGVldCI7aWYoWG4mJlhuW2J0XT8oa3Q9InhsLyIrWG5bYnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLHJpKFMsa3QpfHwoa3Q9''@;'; put 'put ''WG5bYnRdWzFdKSxyaShTLGt0KXx8KGt0PWxyLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStYbltidF1bMV0pLEZpPVhuW2J0XVsyXSk6a3Q9KGt0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS15cikrIi4iK3JyKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLE90PWt0LnJlcGxh''@;'; put 'put ''Y2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJlbHMiKSxlci5wdXNoKGt0KSxPJiZudWxsIT1PLnNoZWV0cylzd2l0Y2godHlwZW9mIE8uc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoYnQhPU8uc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKFllLlNo''@;'; put 'put ''ZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkhPU8uc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoTy5zaGVldHMpKXtmb3IodmFyIG5hPTAsY2E9MDtjYSE9Ty5zaGVldHMubGVuZ3RoOysrY2EpIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBPLnNoZWV0c1tjYV0mJk8uc2hlZXRzW2NhXT09YnQmJihuYT0xKSwic3RyaW5nIj09dHlwZW9mIE8uc2hlZXRzW2NhXSYmTy5zaGVldHNbY2FdLnRvTG93ZXJDYXNlKCk9PVllLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkmJihuYT0xKTtpZighbmEpY29udGlu''@;'; put 'put ''dWUgZX19aWYoIU8uc2tpcFBhcnNlKXt2YXIgTGk9YjIoUyxrdCxPdCxZZS5TaGVldE5hbWVzW2J0XSxidCxqdCxzZSxGaSxPLFZlLHBlLGJlKTtMaSYmTGlbIiFMRFAiXSYmKE1pW2J0XT1MaVsiIUxEUCJdLGRlbGV0ZSBMaVsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90''@;'; put 'put ''PCJ1Iilmb3IoYnQ9MDtidDxQeS5sZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLFB5W2J0XSk7aWYoRXQ9e0RpcmVjdG9yeTpLLFdvcmtib29rOlZlLFByb3BzOlllLEN1c3Rwcm9wczpjdCxEZXBzOmF0LFNoZWV0czpzZSxTaGVldE5hbWVzOlllLlNoZWV0TmFtZXMs''@;'; put 'put ''U3RyaW5nczpsOCxTdHlsZXM6YmUsVGhlbWVzOnBlLFNTRjpBLmdldF90YWJsZSgpfSwhTy5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIGtDKFMpeyFTfHwhUy5Xb3JrYm9va3x8IVMuV29ya2Jvb2suTmFtZXN8fFMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihPKXtpZihPLk5hbWUm''@;'; put 'put ''JiJfeGxubS4iPT1PLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09Ty5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09Ty5OYW1lKSl7dmFyIGs9Uy5TaGVldHNbUy5TaGVldE5hbWVzW08uU2hlZXRdXTtpZihrKXtrWyIhcHJpbnQiXXx8KGtbIiFwcmludCJdPXt9KSxr''@;'; put 'put ''WyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgSz1rWyIhcHJpbnQiXSxlZT1PLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PU8uTmFtZSl7ZWUuaW5kZXhPZigiISIpPi0xJiYoZWU9ZWUuc2xpY2UoZWUuaW5kZXhPZigiISIpKzEpKTt2YXIgc2U9b28oZWU9''@;'; put 'put ''ZWUucmVwbGFjZSgvWyRdL2csIiIpKTtLLmFyZWE9c2V9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1PLk5hbWUmJihLLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxlZS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24obWUpe3ZhciBiZT1NcyhtZS5zbGljZShtZS5p''@;'; put 'put ''bmRleE9mKCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIpKTtiZS5zLmM+LTEmJihLLnRpdGxlcy5zLmM9YmUucy5jKSxiZS5lLmM+LTEmJihLLnRpdGxlcy5lLmM9YmUuZS5jKSxiZS5zLnI+LTEmJihLLnRpdGxlcy5zLnI9YmUucy5yKSxiZS5lLnI+LTEmJihLLnRpdGxlcy5lLnI9YmUuZS5y''@;'; put 'put ''KX0pKX19fSl9KEV0KSxPJiZPLmJvb2tGaWxlcyYmKEV0LmtleXM9ayxFdC5maWxlcz1TLmZpbGVzKSxPJiZPLmJvb2tWQkEmJihLLnZiYS5sZW5ndGg+MD9FdC52YmFyYXc9VHQoUyxBYyhLLnZiYVswXSksITApOksuZGVmYXVsdHMmJksuZGVmYXVsdHMuYmluPT09VWsmJihFdC52YmFyYXc9''@;'; put 'put ''VHQoUywieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLEJuJiZCblsiIWlkIl0pe2Zvcih2YXIga3I9W10sVm49MTtWbjw9MTAyNDsrK1ZuKUJuWyIhaWQiXVsicklkIitWbl0mJkJuWyIhaWQiXVsicklkIitWbl0uVHlwZSYmL2N1c3RvbVhtbCQvLnRlc3QoQm5bIiFpZCJdWyJySWQiK1ZuXS5U''@;'; put 'put ''eXBlKSYma3IucHVzaChmbihCblsiIWlkIl1bInJJZCIrVm5dLlRhcmdldCxLLndvcmtib29rc1swXSkpO2tyLmxlbmd0aD4wJiYoRXQuQ3VzdG9tWE1MPVtdLGtyLmZvckVhY2goZnVuY3Rpb24oX3Ipe3ZhciBGbj17ZGF0YTpucihTLEFjKF9yKSl9LGpyPVZyKF9yKTt0cnl7dmFyIFppPXlm''@;'; put 'put ''KG5yKFMsQWMoanIpLCEwKSxqcik7aWYoWmkpZm9yKHZhciBiaT0xO2JpPD0xMDI0OysrYmkpWmlbIiFpZCJdWyJySWQiK2JpXSYmWmlbIiFpZCJdWyJySWQiK2JpXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KFppWyIhaWQiXVsicklkIitiaV0uVHlwZSkmJihGbi5wcm9wcz1ucihT''@;'; put 'put ''LEFjKGZuKFppWyIhaWQiXVsicklkIitiaV0uVGFyZ2V0LF9yKSkpKX1jYXRjaHt9RXQuQ3VzdG9tWE1MLnB1c2goRm4pfSkpfXZhciBCcj1odChTLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTtCciYmKEV0Lm1vZGVsPUJyKSxLLmNvbm4mJihFdC5jb25uPVR0KFMsQWMoSy5jb25uKSwhMCkp''@;'; put 'put ''LGZyLmxlbmd0aCYmKEV0LkV4dGVybmFsV0I9ZnIpLFZlJiYoVmUuUFBJPURmKX1yZXR1cm4gTy50ZW1wbGF0ZSYmKEV0Ll93c3BhdGhzPWVyLEV0Ll9zdHlwYXRoPUFjKEsuc3R5bGV8fCIiKSxFdC5fd2JwYXRoPUFjKEsud29ya2Jvb2tzWzBdfHwieGwvd29ya2Jvb2sueG1sIiksRXQuX3Zt''@;'; put 'put ''bHBhdGhzPU1pLEV0Ll93YnJlbHNwYXRoPWxyLEV0Ll9jdD1ucihTLCJbQ29udGVudF9UeXBlc10ueG1sIiksRXQuZmlsZXM9Uy5maWxlcyxCYyhFdCxTLE8pKSxFdH1mdW5jdGlvbiBGeShTLE8pe3ZhciBrPU98fHt9O2sucGFzc3dvcmR8fChrLnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3Ai''@;'; put 'put ''KTt2YXIgSz0iV29ya2Jvb2siLGVlPXZlLmZpbmQoUyxLKTt0cnl7aWYoIShlZT12ZS5maW5kKFMsSz0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFlZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0spO2lmKGZ1bmN0aW9uIFRW''@;'; put 'put ''KFMpe3ZhciBPPXt9O08uaWQ9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxPLlI9UDEoUyw0KSxPLlU9UDEoUyw0KSxPLlc9UDEoUyw0KX0oZWUuY29udGVudCksIShlZT12ZS5maW5kKFMsSz0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IWVlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrSyk7dmFyIHNlPWZ1bmN0aW9uIEFWKFMpe3ZhciBPPVtdO1MubCs9NDtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO2stLSA+MDspTy5wdXNoKGhDKFMpKTtyZXR1cm4gT30oZWUuY29udGVudCk7aWYoMSE9PXNlLmxlbmd0aHx8''@;'; put 'put ''MSE9PXNlWzBdLmNvbXBzLmxlbmd0aHx8MCE9PXNlWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PXNlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PXNlWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmls''@;'; put 'put ''ZSBiYWQgIitLKTtpZighKGVlPXZlLmZpbmQoUyxLPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhZWUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitLKTt2YXIgbWU9ZnVu''@;'; put 'put ''Y3Rpb24ga1YoUyl7dmFyIE89W107Uy5sKz00O2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylPLnB1c2goUy5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIE99KGVlLmNvbnRlbnQpO2lmKDEhPW1lLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0iIT1tZVsw''@;'; put 'put ''XSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK0spO2lmKCEoZWU9dmUuZmluZChTLEs9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFlZS5jb250ZW50KXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0spOyFmdW5jdGlvbiBlbmUoUyl7dmFyIE89ZnVuY3Rpb24gRFYoUyl7dmFyIE89e307cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxTLmwrPTQsTy5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLE8ubmFtZT1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MCwibHBwNCIpLE8uUj1QMShTLDQpLE8uVT1QMShTLDQpLE8uVz1QMShTLDQpLE99KFMpO2lmKE8uZW5hbWU9Uy5yZWFkX3NoaWZ0KDAsIjhscHA0IiksTy5ibGtzej1TLnJlYWRfc2hpZnQoNCksTy5jbW9kZT1TLnJlYWRfc2hpZnQoNCksNCE9Uy5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQmFkICFQcmltYXJ5IHJlY29yZCIpO3JldHVybiBPfShlZS5jb250ZW50KX1jYXRjaHt9aWYoIShlZT12ZS5maW5kKFMsSz0iL0VuY3J5cHRpb25JbmZvIikpfHwhZWUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitLKTt2''@;'; put 'put ''YXIgcGU9ZnVuY3Rpb24gWDYoUyl7dmFyIE89UDEoUyk7c3dpdGNoKE8uTWlub3Ipe2Nhc2UgMjpyZXR1cm5bTy5NaW5vcixSVihTKV07Y2FzZSAzOnJldHVybltPLk1pbm9yLEo2KCldO2Nhc2UgNDpyZXR1cm5bTy5NaW5vcixmQyhTKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy''@;'; put 'put ''eXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIitPLk1pbm9yKX0oZWUuY29udGVudCk7aWYoIShlZT12ZS5maW5kKFMsSz0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFlZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0sp''@;'; put 'put ''O2lmKDQ9PXBlWzBdKXJldHVybiBmdW5jdGlvbiBMeShTLE8sayxLKXt2YXIgZWU9dmUudXRpbHMucHJlcF9ibG9iO2lmKCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIhPVMudXJpKXRocm93IG5ldyBFcnJvcigiVW5zdXBw''@;'; put 'put ''b3J0ZWQgRUNNQS0zNzYgQWdpbGUgVVJJICIrUy51cmkpO3ZhciBzZT1TLmVuY3NbMF0sbWU9c2UuaGFzaEFsZ29yaXRobSxwZT0iYWVzLTI1Ni1jYmMiLGJlPUJ1ZmZlci5mcm9tKHNlLnNhbHRWYWx1ZSwiYmFzZTY0IiksUGU9QnVmZmVyLmZyb20oUy5zYWx0VmFsdWUsImJhc2U2NCIpLFZl''@;'; put 'put ''PStzZS5ibG9ja1NpemUsWWU9K3NlLmtleUJpdHM+PjMsZXQ9bWMoQnVmZmVyLmNvbmNhdChbYmUsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrKSldKSxtZSksY3Q9QnVmZmVyLmFsbG9jKDQpO2VlKGN0LDApO2Zvcih2YXIgRXQ9MDtFdDxzZS5zcGluQ291bnQ7KytF''@;'; put 'put ''dCljdC5sPTAsY3Qud3JpdGVfc2hpZnQoNCxFdCksZXQ9bWMoQnVmZmVyLmNvbmNhdChbY3QsZXRdKSxtZSk7dmFyIGF0PWZ1bmN0aW9uKHlyLGVyLE1pLEZpKXt2YXIgbmE9bWMoQnVmZmVyLmNvbmNhdChbeXIsQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSld''@;'; put 'put ''KSxGaSksY2E9bmEubGVuZ3RoPj1NaT9uYS5zbGljZSgwLE1pKTpCdWZmZXIuYWxsb2MoTWkpO2lmKG5hLmxlbmd0aDxNaSl7Zm9yKHZhciBMaT0wO0xpPG5hLmxlbmd0aDsrK0xpKWNhW0xpXT1uYVtMaV07Zm9yKDtMaTxNaTsrK0xpKWNhW0xpXT01NH1yZXR1cm4gY2F9KGV0LDAsWWUsbWUp''@;'; put 'put ''O3N3aXRjaChzZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9c2UuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIitzZS5jaXBoZXJDaGFpbmluZyk7cGU9ImFlcy0iK3NlLmtleUJpdHMr''@;'; put 'put ''Ii1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpwZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitzZS5jaXBoZXJBbGdvcml0aG0pfWJlPWZ1bmN0aW9uKGZyKXtmb3IodmFyIHlyPUJ1ZmZlci5hbGxvYyhWZSksZXI9MDtlcjxWZTsr''@;'; put 'put ''K2VyKXlyW2VyXT1lcjxmci5sZW5ndGg/ZnJbZXJdOjU0O3JldHVybiB5cn0oYmUpO3ZhciBidD1CdWZmZXIuZnJvbShzZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksanQ9WTQoYXQsYmUscGUpLnVwZGF0ZShidCksa3Q9WTQobWMoQnVmZmVyLmNvbmNhdChbZXQsQnVmZmVyLmZyb20o''@;'; put 'put ''WzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxtZSkuc2xpY2UoMCxZZSksYmUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShzZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLE90PW1jKFk0KG1jKEJ1ZmZlci5jb25jYXQoW2V0LEJ1ZmZlci5mcm9tKFsyNTQsMTY3''@;'; put 'put ''LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksbWUpLnNsaWNlKDAsWWUpLGJlLHBlKS51cGRhdGUoQnVmZmVyLmZyb20oc2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxtZSksS3Q9K3NlLmhhc2hTaXplfHxNYXRoLm1pbihrdC5sZW5ndGgsT3QubGVuZ3RoKTtpZigw''@;'; put 'put ''IT1rdC5zbGljZSgwLEt0KS5jb21wYXJlKE90LnNsaWNlKDAsS3QpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO2VlKE8sMCk7dmFyIFRuPU8ucmVhZF9zaGlmdCg0KTtPLmwrPTQ7dmFyIHJyPVtdLFNuPUJ1ZmZlci5jb25jYXQoW1BlLEJ1ZmZlci5hbGxvYyg0KV0p''@;'; put 'put ''O2ZvcihlZShTbiksRXQ9MDtPLmw8Ty5sZW5ndGg7KVNuLmw9YmUubGVuZ3RoLFNuLndyaXRlX3NoaWZ0KDQsRXQpLHJyLnB1c2goWTQoanQsbWMoQnVmZmVyLmZyb20oU24pLG1lKS5zbGljZSgwLDE2KSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKE8uc2xpY2UoTy5sLE8ubCs0MDk2KSkpKSxP''@;'; put 'put ''LmwrPTQwOTYsKytFdDt2YXIgWG49QnVmZmVyLmNvbmNhdChycikuc2xpY2UoMCxUbiksQm49cXQoSyk7cmV0dXJuIEJuLnR5cGU9ImJ1ZmZlciIsJDUoWG4sQm4pfShwZVsxXSxlZS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO2lmKDI9PXBlWzBdKXJldHVybiBmdW5jdGlvbiBGSShTLE8s''@;'; put 'put ''ayxLKXt2YXIgZWU9dmUudXRpbHMucHJlcF9ibG9iO2lmKCJTdGQiIT09Uy50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgc2U9Uy52LlNhbHQsbWU9Uy52LlZlcmlmaWVyLHBlPVMudi5WZXJpZmllckhhc2g7aWYoMzYhPVMuaC5GbGFn''@;'; put 'put ''cyl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IFN0YW5kYXJkIEVuY3J5cHRpb24gYmFkIEZsYWdzIik7dmFyIGJlPTAsUGU9IiI7c3dpdGNoKFMuaC5BbGdJRCl7Y2FzZSAyNjEyNjpiZT0xMjgsUGU9ImFlcy0xMjgtZWNiIjticmVhaztjYXNlIDI2MTI3OmJlPTE5NixQZT0iYWVzLTE5Mi1l''@;'; put 'put ''Y2IiO2JyZWFrO2Nhc2UgMjYxMjg6YmU9MjU2LFBlPSJhZXMtMjU2LWVjYiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIil9aWYoMzI3NzIhPVMuaC5BbGdJREhhc2gpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQg''@;'; put 'put ''U3RhbmRhcmQgRW5jcnlwdGlvbiIpO2lmKFMuaC5LZXlTaXplIT1iZSl0aHJvdyBuZXcgRXJyb3IoIkFsZ0lEL0tleVNpemUgbWlzbWF0Y2giKTtpZigyNCE9Uy5oLlByb3ZpZGVyVHlwZSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IHVuc3VwcG9ydGVkIFByb3ZpZGVyVHlwZSAiK1MuaC5Q''@;'; put 'put ''cm92aWRlclR5cGUpO2lmKCJNaWNyb3NvZnQgRW5oYW5jZWQgUlNBIGFuZCBBRVMgQ3J5cHRvZ3JhcGhpYyBQcm92aWRlciIhPT1TLmguQ1NQTmFtZS5zbGljZSgwLDUzKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENyeXB0byBQcm92aWRlciAiK1MuaC5DU1BOYW1lKTt2YXIgWWU9''@;'; put 'put ''IlNIQS0xIixldD1iZT4+MyxjdD1tYyhCdWZmZXIuY29uY2F0KFtzZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGspXSksWWUpLEV0PUJ1ZmZlci5hbGxvYyg0KTtlZShFdCwwKTtmb3IodmFyIGF0PTA7YXQ8NWU0OysrYXQpRXQubD0wLEV0LndyaXRlX3NoaWZ0KDQsYXQpLGN0PW1jKEJ1''@;'; put 'put ''ZmZlci5jb25jYXQoW0V0LGN0XSksWWUpO0V0Lmw9MCxFdC53cml0ZV9zaGlmdCg0LDApO3ZhciBycixTbixscixYbixCbixqdD0oWG49KGxyPWZ1bmN0aW9uKHlyLGVyLE1pKXtmb3IodmFyIEZpPUJ1ZmZlci5hbGxvYyg2NCksbmE9MDtuYTxGaS5sZW5ndGg7KytuYSlGaVtuYV09eXI7Zm9y''@;'; put 'put ''KG5hPTA7bmE8ZXIubGVuZ3RoOysrbmEpRmlbbmFdXj1lcltuYV07cmV0dXJuIG1jKEZpLE1pKX0pKDU0LHJyPW1jKEJ1ZmZlci5jb25jYXQoW2N0LEV0XSksWWUpLFNuPVllKSxCbj1scig5MixycixTbiksQnVmZmVyLmNvbmNhdChbWG4sQm5dKS5zbGljZSgwLGV0KSk7aWYoWTQoanQsQnVm''@;'; put 'put ''ZmVyLmFsbG9jKDApLFBlKS51cGRhdGUocGUpLnNsaWNlKDAsMjApLmNvbXBhcmUobWMoWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUobWUpLFllKSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtlZShPLDApO3ZhciBrdD1PLnJlYWRfc2hpZnQoNCk7Ty5s''@;'; put 'put ''Kz00O3ZhciBPdD1bXTtmb3IoYXQ9MDtPLmw8Ty5sZW5ndGg7KU90LnB1c2goWTQoanQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUoTy5zbGljZShPLmwsTy5sKzQwOTYpKSksTy5sKz00MDk2LCsrYXQ7cmV0dXJuICQ1KEJ1ZmZlci5jb25jYXQoT3QpLnNsaWNlKDAsa3QpLEspfShwZVsx''@;'; put 'put ''XSxlZS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKX12YXIgeWQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIEg4KFMsTyl7aWYoTy50ZW1wbGF0ZSlyZXR1cm4geWQoUyxPKTtpZigib2RzIj09Ty5ib29rVHlwZSly''@;'; put 'put ''ZXR1cm4gUkkoUyxPKTtJZihPJiZPLlBQSXx8OTYpLFMmJiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxPLnJldnNzZj1EZShTLlNTRiksTy5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLE8uc3NmPVMuU1NGKSxTLlN0eWxl''@;'; put 'put ''cz17Rm9udHM6Ty5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpPLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpP''@;'; put 'put ''LkJvcmRlcnM9W3t9XSxEWEY6Ty5EWEY9Uy5TdHlsZXMmJlMuU3R5bGVzLkRYRnx8W10sVGFibGU6Ty5UYWJsZT1TLlN0eWxlcyYmUy5TdHlsZXMuVGFibGV8fFtdfSxPLm92ZXJyaWRlTURXP1RjPU8ub3ZlcnJpZGVNRFc6STQoTy5Gb250c1swXSksTy5yZWxzPXt9LE8ud2JyZWxzPXt9LE8u''@;'; put 'put ''U3RyaW5ncz1bXSxPLlN0cmluZ3MuQ291bnQ9MCxPLlN0cmluZ3MuVW5pcXVlPTAscTM/Ty5yZXZTdHJpbmdzPW5ldyBNYXA6KE8ucmV2U3RyaW5ncz17fSxPLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBPLnJldlN0cmluZ3MuZm9vKTt2YXIgaz0ieGxzYiI9PU8uYm9va1R5cGU/ImJpbiI6''@;'; put 'put ''InhtbCIsSz1Zay5pbmRleE9mKE8uYm9va1R5cGUpPi0xLGVlPXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpb''@;'; put 'put ''XSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10s''@;'; put 'put ''dGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtQZihPPU98fHt9KTt2YXIgc2U9aGkoKSxtZT0iIixwZT0wO2lmKE8uY2VsbFhmcz1bXSxPLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxsMChPLmNlbGxYZnMs''@;'; put 'put ''Ty5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0pLFMuUHJvcHN8fChTLlByb3BzPXt9KSxqbihzZSxtZT0iZG9jUHJvcHMvY29yZS54bWwiLGZ1bmN0aW9uIHp3KFMsTyl7dmFyIGs9T3x8e30sSz1bSWksanddLGVlPXt9O2lmKCFTJiYhay5Qcm9wcylyZXR1cm4gSy5qb2lu''@;'; put 'put ''KCIiKTtTJiYobnVsbCE9Uy5DcmVhdGVkRGF0ZSYmYmYoImRjdGVybXM6Y3JlYXRlZCIsInN0cmluZyI9PXR5cGVvZiBTLkNyZWF0ZWREYXRlP1MuQ3JlYXRlZERhdGU6Y2YoUy5DcmVhdGVkRGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sSyxlZSksbnVsbCE9Uy5N''@;'; put 'put ''b2RpZmllZERhdGUmJmJmKCJkY3Rlcm1zOm1vZGlmaWVkIiwic3RyaW5nIj09dHlwZW9mIFMuTW9kaWZpZWREYXRlP1MuTW9kaWZpZWREYXRlOmNmKFMuTW9kaWZpZWREYXRlLGsuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxLLGVlKSk7Zm9yKHZhciBzZT0wO3NlIT1SMC5s''@;'; put 'put ''ZW5ndGg7KytzZSl7dmFyIG1lPVIwW3NlXSxwZT1rLlByb3BzJiZudWxsIT1rLlByb3BzW21lWzFdXT9rLlByb3BzW21lWzFdXTpTP1NbbWVbMV1dOm51bGw7ITA9PT1wZT9wZT0iMSI6ITE9PT1wZT9wZT0iMCI6Im51bWJlciI9PXR5cGVvZiBwZSYmKHBlPVN0cmluZyhwZSkpLG51bGwhPXBl''@;'; put 'put ''JiZiZihtZVswXSxwZSxudWxsLEssZWUpfXJldHVybiBLLmxlbmd0aD4yJiYoS1tLLmxlbmd0aF09IjwvY3A6Y29yZVByb3BlcnRpZXM+IixLWzFdPUtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEsuam9pbigiIil9KFMuUHJvcHMsTykpLGVlLmNvcmVwcm9wcy5wdXNoKG1lKSxFcihPLnJlbHMs''@;'; put 'put ''MixtZSxLYS5DT1JFX1BST1BTKSxtZT0iZG9jUHJvcHMvYXBwLnhtbCIsIVMuUHJvcHN8fCFTLlByb3BzLlNoZWV0TmFtZXMpaWYoUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgYmU9W10sUGU9MDtQZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrUGUpMiE9KFMuV29ya2Jv''@;'; put 'put ''b2suU2hlZXRzW1BlXXx8e30pLkhpZGRlbiYmYmUucHVzaChTLlNoZWV0TmFtZXNbUGVdKTtTLlByb3BzLlNoZWV0TmFtZXM9YmV9ZWxzZSBTLlByb3BzLlNoZWV0TmFtZXM9Uy5TaGVldE5hbWVzO1MuUHJvcHMuV29ya3NoZWV0cz1TLlByb3BzLlNoZWV0TmFtZXMubGVuZ3RoLGpuKHNlLG1l''@;'; put 'put ''LGZ1bmN0aW9uIFV3KFMpe3ZhciBPPVtdLGs9UHI7cmV0dXJuIFN8fChTPXt9KSxTLkFwcGxpY2F0aW9uPSJTaGVldEpTIixPW08ubGVuZ3RoXT1JaSxPW08ubGVuZ3RoXT1MNixyaC5mb3JFYWNoKGZ1bmN0aW9uKEspe2lmKHZvaWQgMCE9PVNbS1sxXV0pe3ZhciBlZTtzd2l0Y2goS1syXSl7''@;'; put 'put ''Y2FzZSJzdHJpbmciOmVlPUxyKFN0cmluZyhTW0tbMV1dKSk7YnJlYWs7Y2FzZSJib29sIjplZT1TW0tbMV1dPyJ0cnVlIjoiZmFsc2UifXZvaWQgMCE9PWVlJiYoT1tPLmxlbmd0aF09ayhLWzBdLGVlKSl9fSksT1tPLmxlbmd0aF09aygiSGVhZGluZ1BhaXJzIixrKCJ2dDp2ZWN0b3IiLGso''@;'; put 'put ''InZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+IikraygidnQ6dmFyaWFudCIsaygidnQ6aTQiLFN0cmluZyhTLldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlwZToidmFyaWFudCJ9KSksT1tPLmxlbmd0aF09aygiVGl0bGVzT2ZQYXJ0cyIsaygidnQ6dmVj''@;'; put 'put ''dG9yIixTLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKEspe3JldHVybiI8dnQ6bHBzdHI+IitMcihLKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6Uy5Xb3Jrc2hlZXRzLGJhc2VUeXBlOiJscHN0ciJ9KSksTy5sZW5ndGg+MiYmKE9bTy5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixP''@;'; put 'put ''WzFdPU9bMV0ucmVwbGFjZSgiLz4iLCI+IikpLE8uam9pbigiIil9KFMuUHJvcHMpKSxlZS5leHRwcm9wcy5wdXNoKG1lKSxFcihPLnJlbHMsMyxtZSxLYS5FWFRfUFJPUFMpLFMuQ3VzdHByb3BzIT09Uy5Qcm9wcyYmUmUoUy5DdXN0cHJvcHN8fHt9KS5sZW5ndGg+MCYmKGpuKHNlLG1lPSJk''@;'; put 'put ''b2NQcm9wcy9jdXN0b20ueG1sIixmdW5jdGlvbiBfZihTKXt2YXIgTz1bSWksX3ZdO2lmKCFTKXJldHVybiBPLmpvaW4oIiIpO3ZhciBrPTE7cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oZWUpeysrayxPW08ubGVuZ3RoXT1QcigicHJvcGVydHkiLGZ1bmN0aW9uIENzKFMsTyl7c3dp''@;'; put 'put ''dGNoKHR5cGVvZiBTKXtjYXNlInN0cmluZyI6dmFyIGs9UHIoInZ0Omxwd3N0ciIsTHIoUykpO3JldHVybiBPJiYoaz1rLnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLGs7Y2FzZSJudW1iZXIiOnJldHVybiBQcigoMHxTKT09Uz8idnQ6aTQiOiJ2dDpyOCIsTHIoU3RyaW5nKFMpKSk7''@;'; put 'put ''Y2FzZSJib29sZWFuIjpyZXR1cm4gUHIoInZ0OmJvb2wiLFM/InRydWUiOiJmYWxzZSIpfWlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBQcigidnQ6ZmlsZXRpbWUiLGNmKFMpKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIitTKX0oU1tlZV0sITApLHtmbXRpZDoi''@;'; put 'put ''e0Q1Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDprLG5hbWU6THIoZWUpfSl9KSxPLmxlbmd0aD4yJiYoT1tPLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLE9bMV09T1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksTy5qb2luKCIiKX0oUy5DdXN0cHJvcHMpKSxlZS5jdXN0''@;'; put 'put ''cHJvcHMucHVzaChtZSksRXIoTy5yZWxzLDQsbWUsS2EuQ1VTVF9QUk9QUykpO3ZhciBWZT1bXSxZZT1bXTtmdW5jdGlvbiBldChUbixycil7WWUucHVzaChbcGUtMSxycixUbl0pfWZ1bmN0aW9uIGN0KFRuKXtWZS5wdXNoKFtwZS0xLFRuXSksRXIoRXQsLTEsIi4uL3Bpdm90VGFibGVzL3Bp''@;'; put 'put ''dm90VGFibGUiK1ZlLmxlbmd0aCsiLiIrayxLYS5QSVZPVCl9Zm9yKHBlPTE7cGU8PVMuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIEV0PXsiIWlkIjp7fX0sYXQ9Uy5TaGVldHNbUy5TaGVldE5hbWVzW3BlLTFdXSxidD0oYXR8fHt9KVsiIXR5cGUiXXx8InNoZWV0Ijtzd2l0Y2goYnQp''@;'; put 'put ''e2Nhc2UiY2hhcnQiOmlmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSIpe2puKHNlLG1lPSJ4bC9jaGFydHNoZWV0cy9zaGVldCIrcGUrIi4iK2ssaEkocGUtMSxtZSxPLFMsRXQpKSxlZS5jaGFydHMucHVzaChtZSksRXIoTy53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIr''@;'; put 'put ''ayxLYS5DUyk7YnJlYWt9ZGVmYXVsdDpqbihzZSxtZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssZEkocGUtMSxtZSxPLFMsRXQpKSxlZS5zaGVldHMucHVzaChtZSksRXIoTy53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK3BlKyIuIitrLEthLldTWzBdKX1pZihhdCl7ImNo''@;'; put 'put ''YXJ0Ij09YnQmJiFhdFsiIXBvcyJdJiYoYXRbIiFwb3MiXT17eDowLHk6MCx3OjkwMCxoOjYwMH0pO3ZhciBqdD1hdFsiIWNvbW1lbnRzIl0sa3Q9ITE7aWYoanQmJmp0Lmxlbmd0aD4wKXt2YXIgT3Q9InhsL2NvbW1lbnRzIitwZSsiLiIraztqbihzZSxPdCxBeihqdCxPdCxPKSksZWUuY29t''@;'; put 'put ''bWVudHMucHVzaChPdCksRXIoRXQsLTEsIi4uL2NvbW1lbnRzIitwZSsiLiIrayxLYS5DTU5UKSxrdD0hMH0oYXRbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjAmJihrdD0hMCksYXRbIiFsZWdhY3kiXSYma3QmJmpuKHNlLCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitwZSsiLnZtbCIsT0Mo''@;'; put 'put ''cGUsYXRbIiFjb21tZW50cyJdLGF0WyIhY29udHJvbHMiXSxhdCkpLGF0WyIhbGVnYWN5SEYiXSYmQmsoc2UsMCxwZSxhdFsiIXByaW50Il0uaW1hZ2VzKTt2YXIgS3Q9KCJjaGFydCI9PWF0WyIhdHlwZSJdP1thdF06YXRbIiFjaGFydHMiXXx8W10pLmNvbmNhdCgoYXRbIiFpbWFnZXMiXXx8''@;'; put 'put ''W10pLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIFRuWyIhdHlwZSJdfHwoVG5bIiF0eXBlIl09ImltYWdlIiksVG59KSkuY29uY2F0KChhdFsiIXNoYXBlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKFRuKXtyZXR1cm4gVG5bIiF0eXBlIl18fChUblsiIXR5cGUiXT0ic2hhcGUiKSxUbn0pKTtLdCYm''@;'; put 'put ''S3QubGVuZ3RoJiYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Ij93cml0ZV9kcmF3aW5nXyhzZSxlZSxwZSxhdCxLdCk6KGpuKHNlLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIsbUIoKSksZWUuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrcGUrIi54bWwiKSkp''@;'; put 'put ''LGRlbGV0ZSBhdFsiIWNvbW1lbnRzIl0sZGVsZXRlIGF0WyIhbGVnYWN5Il0sZGVsZXRlIGF0WyIhbGVnYWN5SEYiXX1hdCYmYXRbIiFwaXZvdHMiXSYmInhtbCI9PWsmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZhdFsiIXBpdm90cyJdLmZvckVhY2goY3QpLEV0WyIhaWQiXS5ySWQx''@;'; put 'put ''JiZqbihzZSxWcihtZSksa2koRXQpKSxhdCYmYXRbIiF0YWJsZXMiXSYmInhtbCI9PWsmJmF0WyIhdGFibGVzIl0uZm9yRWFjaChldCl9cmV0dXJuIG51bGwhPU8uU3RyaW5ncyYmTy5TdHJpbmdzLmxlbmd0aD4wJiYoam4oc2UsbWU9InhsL3NoYXJlZFN0cmluZ3MuIitrLGZJKE8uU3RyaW5n''@;'; put 'put ''cyxtZSxPKSksZWUuc3Rycy5wdXNoKG1lKSxFcihPLndicmVscywtMSwic2hhcmVkU3RyaW5ncy4iK2ssS2EuU1NUKSksInhtbCI9PWsmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZ3cml0ZV9waXZvdF94bWwoVmUsUyxzZSxlZSxPKSwieG1sIj09ayYmZnVuY3Rpb24gRjQoUyxPLGss''@;'; put 'put ''Syl7Uy5mb3JFYWNoKGZ1bmN0aW9uKGVlLHNlKXt2YXIgbWU9Ty5TaGVldHNbTy5TaGVldE5hbWVzW2VlWzBdXV0scGU9InhsL3RhYmxlcy90YWJsZSIrKGVlWzBdKzEpKyJfIitlZVsxXSsiLnhtbCI7Sy50YWJsZXMucHVzaChwZSk7dmFyIGJlPWVlWzJdLnJlZnx8bWVbIiFyZWYiXTsic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGJlJiYoYmU9cmEoYmUpKTt2YXIgUGU9b28oYmUpLFZlPWVlWzJdLm5hbWV8fCJzanN0YmxfIitlZVswXSsiXyIrZWVbMV0sWWU9W0lpXSxldD0hV3QoZWVbMl0uaGVhZGVyKSxjdD1ldCYmIVd0KGVlWzJdLmZpbHRlcik7WWUucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIGlkPSInKyhzZSsxKSsnIiBuYW1lPSInK0xyKFZlKSsnIiBkaXNwbGF5TmFtZT0iJytMcihWZSkrJyIgcmVmPSInK2JlKyciICcrKG51bGwhPWVlWzJdLmhlYWRlciYmMSE9ZWVbMl0uaGVhZGVy''@;'; put 'put ''PydoZWFkZXJSb3dDb3VudD0iJysoZWVbMl0uaGVhZGVyfHwwKSsnIiAnOiIiKSsiPiIpLGN0JiZZZS5wdXNoKCc8YXV0b0ZpbHRlciByZWY9IicrYmUrJyIvPicpLFllLnB1c2goJzx0YWJsZUNvbHVtbnMgY291bnQ9IicrKFBlLmUuYy1QZS5zLmMrMSkrJyI+Jyk7Zm9yKHZhciBFdD1bXSxh''@;'; put 'put ''dD1QZS5zLmM7YXQ8PVBlLmUuYzsrK2F0KWlmKGV0KXtmb3IodmFyIGJ0PXFpKHtyOlBlLnMucixjOmF0fSksanQ9bWVbYnRdLGt0PWVlWzJdLmNvbHMmJmVlWzJdLmNvbHNbYXQtUGUucy5jXSYmZWVbMl0uY29sc1thdC1QZS5zLmNdLm5hbWV8fGp0JiYoanQud3x8anQudil8fCJDb2x1bW4g''@;'; put 'put ''IisoYXQtUGUucy5jKzEpLE90PWt0LEt0PTE7RXQuaW5kZXhPZihPdCk+LTEmJisrS3Q8MTYzODQ7KU90PWt0K0t0O2lmKE90IT1rdCl0aHJvdyJ0YWJsZSBjb2x1bW5zICIrYXQrIiBhbmQgIisoRXQuaW5kZXhPZihrdCkrUGUucy5jKSsiIGhhdmUgdGhlIHNhbWUgaGVhZGVyICciK2t0KyIn''@;'; put 'put ''OyB0cnkgc2V0dGluZyBjZWxsICIrYnQrIiB0byAnIitPdCsiJyI7RXQucHVzaChPdCksWWUucHVzaCgnPHRhYmxlQ29sdW1uIGlkPSInKyhlZVsyXS5jb2xzJiZlZVsyXS5jb2xzW2F0LVBlLnMuY10mJm51bGwhPWVlWzJdLmNvbHNbYXQtUGUucy5jXS5pZD9lZVsyXS5jb2xzW2F0LVBlLnMu''@;'; put 'put ''Y10uaWQ6YXQtUGUucy5jKzEpKyciIG5hbWU9IicrTHIoT3QpKyciLz4nKX1lbHNlIFllLnB1c2goZWVbMl0uY29scyYmZWVbMl0uY29sc1thdC1QZS5zLmNdPyc8dGFibGVDb2x1bW4gaWQ9IicrZWVbMl0uY29sc1thdC1QZS5zLmNdLmlkKyciIG5hbWU9IicrZWVbMl0uY29sc1thdC1QZS5z''@;'; put 'put ''LmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJysoYXQtUGUucy5jKzEpKyciIHVuaXF1ZU5hbWU9IicrKGF0LVBlLnMuYysxKSsnIiBuYW1lPSInKyhhdC1QZS5zLmMrMSkrJyIvPicpO1llLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBycj0rKCExIT09KGVlWzJdLnN0eWxl''@;'; put 'put ''fHx7fSkucm93c3RyaXBlKSxTbj0rISEoZWVbMl0uc3R5bGV8fHt9KS5jb2xzdHJpcGUsbHI9KyEhKGVlWzJdLnN0eWxlfHx7fSkuY29sZmlyc3QsWG49KyEhKGVlWzJdLnN0eWxlfHx7fSkuY29sbGFzdCxCbj0oZWVbMl0uc3R5bGV8fHt9KS5uYW1lfHwiTWVkaXVtOSI7Qm49Qm4ubWF0Y2go''@;'; put 'put ''L14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pPyJUYWJsZVN0eWxlIitCbjpCbixZZS5wdXNoKCc8dGFibGVTdHlsZUluZm8gbmFtZT0iJytCbisnIiBzaG93Rmlyc3RDb2x1bW49IicrbHIrJyIgc2hvd0xhc3RDb2x1bW49IicrWG4rJyIgc2hvd1Jvd1N0cmlwZXM9IicrcnIrJyIgc2hvd0Nv''@;'; put 'put ''bHVtblN0cmlwZXM9IicrU24rJyIvPicpLFllLnB1c2goIjwvdGFibGU+Iiksam4oayxwZSxZZS5qb2luKCIiKSl9KX0oWWUsUyxzZSxlZSksInhtbCI9PWsmJihTLkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIFJDKFMsTyxrKXtrLmxpbmtzfHwoay5saW5rcz1bXSksUy5FeHRl''@;'; put 'put ''cm5hbFdCJiZTLkV4dGVybmFsV0IuZm9yRWFjaChmdW5jdGlvbihLLGVlKXt2YXIgc2U9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGluayIrKGVlKzEpKyIueG1sLnJlbHMiLG1lPXt9O0VyKG1lLC0xLEsuVGFyZ2V0LEsuTWlzc2luZz9LYS5YTUlTUzpLYS5YUEFUSCksam4o''@;'; put 'put ''TyxBYyhzZSksa2kobWUpKTt2YXIgcGU9Ii94bC9leHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKGVlKzEpKyIueG1sIjtrLmxpbmtzLnB1c2gocGUpLGpuKE8sQWMocGUpLGZ1bmN0aW9uIGZCKFMpe3ZhciBPPVtJaSxoQl07cmV0dXJuKFMuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYmKE8u''@;'; put 'put ''cHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxPLnB1c2goIjxzaGVldE5hbWVzPiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KGspe08ucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicrTHIoaykrJyIvPicpfSksTy5wdXNoKCI8L3NoZWV0TmFtZXM+IiksTy5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGssSyl7dmFyIGVlPVMuU2hlZXRzW2tdLHNlPXtzaGVldElkOkt9LG1l''@;'; put 'put ''PW51bGw7aWYobnVsbD09ZWUpc2UucmVmcmVzaEVycm9yPTE7ZWxzZSBpZihlZVsiIXJlZiJdKXt2YXIgcGU9TXMoZWVbIiFyZWYiXSk7bWU9IiI7Zm9yKHZhciBiZT1wZS5zLnI7YmU8PXBlLmUucjsrK2JlKXtmb3IodmFyIFBlPSIiLFZlPXBlLnMuYztWZTw9cGUuZS5jOysrVmUpe3ZhciBZ''@;'; put 'put ''ZT1xaSh7cjpiZSxjOlZlfSk7ZWVbWWVdJiYoUGV8fChQZT0nPHJvdyByPSInKyhiZSsxKSsnIj4nKSxQZSs9JzxjZWxsIHI9IicrWWUrJyInKyhlZVtZZV0udD8nIHQ9IicrZWVbWWVdLnQrJyInOiIiKSsiPjx2PiIrTHIoZWVbWWVdLnYpKyI8L3Y+PC9jZWxsPiIpfVBlJiYobWUrPVBlKyI8''@;'; put 'put ''L3Jvdz4iKX19Ty5wdXNoKFByKCJzaGVldERhdGEiLG1lLHNlKSl9KSxPLnB1c2goIjwvc2hlZXREYXRhU2V0PiIpLE8ucHVzaCgiPC9leHRlcm5hbEJvb2s+IikpLE8ubGVuZ3RoPjImJihPW08ubGVuZ3RoXT0iPC9leHRlcm5hbExpbms+IixPWzFdPU9bMV0ucmVwbGFjZSgiLz4iLCI+Iikp''@;'; put 'put ''LE8uam9pbigiIil9KEspKX0pfShTLHNlLGVlKSwieG1sIj09ayYmZnVuY3Rpb24gREMoUyl7dmFyIE8saztTLldvcmtib29rfHwoUy5Xb3JrYm9vaz17TmFtZXM6W119KSxTLldvcmtib29rLk5hbWVzfHwoUy5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBLPVMuV29ya2Jvb2suTmFtZXMs''@;'; put 'put ''ZWU9MDtlZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrZWUpe3ZhciBzZT1TLlNoZWV0TmFtZXNbZWVdLG1lPVMuU2hlZXRzW3NlXTtpZihtZSYmbWVbIiFwcmludCJdKXt2YXIgcGU9IiciK3NlKyInISIsYmU9bWVbIiFwcmludCJdO2lmKGJlKXt2YXIgUGU9IShPPWJlLmFyZWEpLFZlPSEoaz1i''@;'; put 'put ''ZS50aXRsZXMpLFllPU8/InN0cmluZyI9PXR5cGVvZiBPP086cmEoTyk6IiI7aWYoTyYmKEsuZm9yRWFjaChmdW5jdGlvbihjdCl7Y3QuU2hlZXQ9PWVlJiYhUGUmJiJfeGxubS5QcmludF9BcmVhIj09Y3QuTmFtZSYmKFBlPSEwLGN0LlJlZj1wZStZZSl9KSxQZXx8Sy5wdXNoKHtOYW1lOiJf''@;'; put 'put ''eGxubS5QcmludF9BcmVhIixSZWY6cGUrWWUsU2hlZXQ6ZWV9KSksayl7dmFyIGV0PSIiO2sucy5jPi0xJiZrLmUuYz4tMSYmKGV0Kz1wZStUYShrLnMuYykrIjoiK1RhKGsuZS5jKSsiLCIpLGsucy5yPi0xJiZrLmUucj4tMSYmKGV0Kz1wZStqaShrLnMucikrIjoiK2ppKGsuZS5yKSsiLCIp''@;'; put 'put ''LGV0PWV0LnNsaWNlKDAsLTEpLEsuZm9yRWFjaChmdW5jdGlvbihjdCl7Y3QuU2hlZXQ9PWVlJiYhVmUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1jdC5OYW1lJiYoUGU9ITAsY3QuUmVmPWV0KX0pLFZlfHxLLnB1c2goe05hbWU6Il94bG5tLlByaW50X1RpdGxlcyIsUmVmOmV0LFNoZWV0OmVl''@;'; put 'put ''fSl9fX19fShTKSxqbihzZSxtZT0ieGwvd29ya2Jvb2suIitrLGZ1bmN0aW9uIFR6KFMsTyxrKXtyZXR1cm4oIi5iaW4iPT09Ty5zbGljZSgtNCk/U3k6VDgpKFMsayl9KFMsbWUsTykpLGVlLndvcmtib29rcy5wdXNoKG1lKSxFcihPLnJlbHMsMSxtZSxLYS5XQiksam4oc2UsbWU9InhsL3Ro''@;'; put 'put ''ZW1lL3RoZW1lMS54bWwiLGlCKFMuVGhlbWVzLE8pKSxlZS50aGVtZXMucHVzaChtZSksRXIoTy53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLEthLlRIRU1FKSxqbihzZSxtZT0ieGwvc3R5bGVzLiIrayxmdW5jdGlvbiBWUyhTLE8sayl7cmV0dXJuKCIuYmluIj09PU8uc2xpY2UoLTQp''@;'; put 'put ''P0RrOlp2KShTLGspfShTLG1lLE8pKSxlZS5zdHlsZXMucHVzaChtZSksRXIoTy53YnJlbHMsLTEsInN0eWxlcy4iK2ssS2EuU1RZKSxTLnZiYXJhdyYmSyYmKGpuKHNlLG1lPSJ4bC92YmFQcm9qZWN0LmJpbiIsUy52YmFyYXcpLGVlLnZiYS5wdXNoKG1lKSxFcihPLndicmVscywtMSwidmJh''@;'; put 'put ''UHJvamVjdC5iaW4iLEthLlZCQSkpLFMubW9kZWwmJlMubW9kZWwubGVuZ3RoJiYoam4oc2UsInhsL21vZGVsL2l0ZW0uZGF0YSIsUy5tb2RlbCksRXIoTy53YnJlbHMsLTEsIm1vZGVsL2l0ZW0uZGF0YSIsS2EuUFdSUEQpKSxTLmNvbm4mJihqbihzZSwieGwvY29ubmVjdGlvbnMueG1sIixT''@;'; put 'put ''LmNvbm4pLGVlLmNvbm5zLnB1c2goIi94bC9jb25uZWN0aW9ucy54bWwiKSxFcihPLndicmVscywtMSwiY29ubmVjdGlvbnMueG1sIixLYS5DT05OKSksUy5DdXN0b21YTUwmJlMuQ3VzdG9tWE1MLmZvckVhY2goZnVuY3Rpb24oVG4scnIpe2lmKGpuKHNlLCJjdXN0b21YbWwvaXRlbSIrKHJy''@;'; put 'put ''KzEpKyIueG1sIixUbi5kYXRhKSxFcihPLndicmVscywtMSwiLi4vY3VzdG9tWG1sL2l0ZW0iKyhycisxKSsiLnhtbCIsS2EuQ1hNTCksVG4ucHJvcHMpe2puKHNlLCJjdXN0b21YbWwvaXRlbVByb3BzIisocnIrMSkrIi54bWwiLFRuLnByb3BzKSxlZS5jdXN0b214bWxwcm9wcy5wdXNoKCIv''@;'; put 'put ''Y3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKHJyKzEpKyIueG1sIik7dmFyIFNuPXt9O0VyKFNuLC0xLCJpdGVtUHJvcHMiKyhycisxKSsiLnhtbCIsS2EuQ1hNTFApLGpuKHNlLCJjdXN0b21YbWwvX3JlbHMvaXRlbSIrKHJyKzEpKyIueG1sLnJlbHMiLGtpKFNuKSl9fSksam4oc2UsIltDb250ZW50''@;'; put 'put ''X1R5cGVzXS54bWwiLGZ1bmN0aW9uIEJ3KFMsTyxrKXt2YXIgZWUsSz1bXTtrfHwoS1tLLmxlbmd0aF09SWksS1tLLmxlbmd0aF09bXYsSz1LLmNvbmNhdChWdykpO3ZhciBzZT1mdW5jdGlvbihiZSl7U1tiZV0mJlNbYmVdLmxlbmd0aD4wJiYoS1tLLmxlbmd0aF09UHIoIk92ZXJyaWRlIixu''@;'; put 'put ''dWxsLHtQYXJ0TmFtZTooIi8iPT0oZWU9U1tiZV1bMF0pWzBdPyIiOiIvIikrZWUsQ29udGVudFR5cGU6ZnZbYmVdW08uYm9va1R5cGV8fCJ4bHN4Il19KSl9LG1lPWZ1bmN0aW9uKGJlKXsoU1tiZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtLW0subGVuZ3RoXT1QcigiT3ZlcnJpZGUi''@;'; put 'put ''LG51bGwse1BhcnROYW1lOigiLyI9PVBlWzBdPyIiOiIvIikrUGUsQ29udGVudFR5cGU6ZnZbYmVdW08uYm9va1R5cGV8fCJ4bHN4Il19KX0pfSxwZT1mdW5jdGlvbihiZSl7KFNbYmVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQZSl7S1tLLmxlbmd0aF09UHIoIk92ZXJyaWRlIixudWxsLHtQ''@;'; put 'put ''YXJ0TmFtZTooIi8iPT1QZVswXT8iIjoiLyIpK1BlLENvbnRlbnRUeXBlOnB2W2JlXVswXX0pfSl9O3JldHVybiBzZSgid29ya2Jvb2tzIiksbWUoInNoZWV0cyIpLG1lKCJjaGFydHMiKSxwZSgidGhlbWVzIiksWyJzdHJzIiwic3R5bGVzIiwiY29ubnMiXS5mb3JFYWNoKHNlKSxbImNvcmVw''@;'; put 'put ''cm9wcyIsImV4dHByb3BzIiwiY3VzdHByb3BzIl0uZm9yRWFjaChwZSkscGUoInZiYSIpLHBlKCJjb21tZW50cyIpLHBlKCJkcmF3aW5ncyIpLG1lKCJ0YWJsZXMiKSxtZSgicGl2b3RzIiksbWUoInBpdm90Y2FjaGVzIiksbWUoInBpdm90cmVjb3JkcyIpLHBlKCJkYXRhbW9kZWxzIikscGUo''@;'; put 'put ''ImN0cmxwcm9wcyIpLHBlKCJjaGFydG9ianMiKSxwZSgiY2hhcnRzdHlsZXMiKSxwZSgiY2hhcnRjb2xvcnMiKSxwZSgiY2hhcnRleHMiKSxtZSgibGlua3MiKSxwZSgiY3VzdG9teG1scHJvcHMiKSwhayYmSy5sZW5ndGg+MiYmKEtbSy5sZW5ndGhdPSI8L1R5cGVzPiIsS1sxXT1LWzFdLnJl''@;'; put 'put ''cGxhY2UoIi8+IiwiPiIpKSxLLmpvaW4oIiIpfShlZSxPKSksam4oc2UsIl9yZWxzLy5yZWxzIixraShPLnJlbHMpKSxqbihzZSwieGwvX3JlbHMvd29ya2Jvb2suIitrKyIucmVscyIsa2koTy53YnJlbHMpKSxkZWxldGUgTy5Gb250cyxkZWxldGUgTy5GaWxscyxkZWxldGUgTy5Cb3JkZXJz''@;'; put 'put ''LGRlbGV0ZSBPLnJldnNzZixkZWxldGUgTy5zc2Ysc2V9ZnVuY3Rpb24gUVMoUyxPKXt2YXIgaz0iIjtzd2l0Y2goKE98fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN11dO2Nh''@;'; put 'put ''c2UiYmFzZTY0IjprPV9lLmRlY29kZShTLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhPJiZPLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW2suY2hhckNvZGVBdCgwKSxrLmNo''@;'; put 'put ''YXJDb2RlQXQoMSksay5jaGFyQ29kZUF0KDIpLGsuY2hhckNvZGVBdCgzKSxrLmNoYXJDb2RlQXQoNCksay5jaGFyQ29kZUF0KDUpLGsuY2hhckNvZGVBdCg2KSxrLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIGVNKFMsTyl7dmFyIGs9MDtlOmZvcig7azxTLmxlbmd0aDspc3dpdGNoKFMuY2hh''@;'; put 'put ''ckNvZGVBdChrKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytrO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIEk4KFMuc2xpY2UoayksTyk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBqMy50b193b3JrYm9vayhTLE8pfWZ1bmN0aW9uIEh5KFMsTyxrLEspe3JldHVybiBLPyhrLnR5cGU9InN0cmlu''@;'; put 'put ''ZyIsajMudG9fd29ya2Jvb2soUyxrKSk6ajMudG9fd29ya2Jvb2soTyxrKX1mdW5jdGlvbiAkNShTLE8pe3ZhciBrPUEuZ2V0bG9jYWxlKCk7YWUoQSksQS5zZXRsb2NhbGUoayksVygpO3ZhciBLPU98fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJlMgaW5zdGFuY2VvZiBBcnJheUJ1''@;'; put 'put ''ZmZlcilyZXR1cm4gJDUobmV3IFVpbnQ4QXJyYXkoUyksKChLPXF0KEspKS50eXBlPSJhcnJheSIsSykpO3ZhciBzZSxlZT1TLG1lPSExO2lmKElmKERmPUsuUFBJfHxZcyksSy5jZWxsU3R5bGVzJiYoSy5jZWxsTkY9ITAsSy5zaGVldFN0dWJzPSEwKSxjOD17fSxLLmRhdGVORiYmKGM4LmRh''@;'; put 'put ''dGVORj1LLmRhdGVORiksSy50eXBlfHwoSy50eXBlPVRlJiZCdWZmZXIuaXNCdWZmZXIoUyk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09Sy50eXBlJiYoSy50eXBlPVRlPyJidWZmZXIiOiJiaW5hcnkiLGVlPWZ1bmN0aW9uIEZlKFMpe2lmKHR5cGVvZiBYZTwidSIpcmV0dXJuIFhlLnJl''@;'; put 'put ''YWRGaWxlU3luYyhTKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBPPUZpbGUoUyk7Ty5vcGVuKCJyIiksTy5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgaz1PLnJlYWQoKTtyZXR1cm4gTy5jbG9zZSgpLGt9Y2F0Y2goSyl7aWYoIUsu''@;'; put 'put ''bWVzc2FnZXx8IUsubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBLfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrUyl9KFMpKSwic3RyaW5nIj09Sy50eXBlJiYobWU9ITAsSy50eXBlPSJiaW5hcnkiLEsuY29kZXBhZ2U9NjUwMDEsZWU9ZnVuY3Rpb24gamMo''@;'; put 'put ''Uyl7cmV0dXJuIFMubWF0Y2goL1teXHgwMC1ceDdGXS8pP05zKFMpOlN9KFMpKSwiYXJyYXkiPT1LLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciBwZT1uZXcgQXJyYXlCdWZmZXIoMyksYmU9''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkocGUpO2lmKGJlLmZvbz0iYmFyIiwhYmUuZm9vKXJldHVybihLPXF0KEspKS50eXBlPSJhcnJheSIsJDUoVihlZSksSyl9c3dpdGNoKChzZT1RUyhlZSxLKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PXNlWzFdJiYxNz09PXNlWzJdJiYyMjQ9PT1zZVszXSYmMTYxPT09''@;'; put 'put ''c2VbNF0mJjE3Nz09PXNlWzVdJiYyNj09PXNlWzZdJiYyMjU9PT1zZVs3XSlyZXR1cm4gZnVuY3Rpb24gZ3QoUyxPKXtyZXR1cm4gdmUuZmluZChTLCJFbmNyeXB0ZWRQYWNrYWdlIik/RnkoUyxPKTokUyhTLE8pfSh2ZS5yZWFkKGVlLEspLEspO2JyZWFrO2Nhc2UgOTppZihzZVsxXTw9OCly''@;'; put 'put ''ZXR1cm4gJFMoZWUsSyk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gSTgoZWUsSyk7Y2FzZSA3MzppZig3Mz09PXNlWzFdJiY0Mj09PXNlWzJdJiYwPT09c2VbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PXNlWzFdKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBhayhTLE8pe3ZhciBrPU98fHt9LEs9ISFrLldURjtrLldURj0hMDt0cnl7dmFyIGVlPWNDLnRvX3dvcmtib29rKFMsayk7cmV0dXJuIGsuV1RGPUssZWV9Y2F0Y2goc2Upe2lmKGsuV1RGPUssIXNlLm1lc3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZLKXRo''@;'; put 'put ''cm93IHNlO3JldHVybiBqMy50b193b3JrYm9vayhTLE8pfX0oZWUsSyk7YnJlYWs7Y2FzZSA4NDppZig2NT09PXNlWzFdJiY2Nj09PXNlWzJdJiY3Nj09PXNlWzNdKXJldHVybiBEdi50b193b3JrYm9vayhlZSxLKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PXNlWzFdJiZzZVsyXTw5JiZz''@;'; put 'put ''ZVszXTw5P2Z1bmN0aW9uIFZJKFMsTyl7dmFyIEs9UyxlZT1PfHx7fTtyZXR1cm4gZWUudHlwZXx8KGVlLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IikscnAodW4oSyxlZSksZWUpfShlZSxLKTpIeShTLGVlLEssbWUpO2Nhc2UgMjM5OnJldHVybiA2MD09''@;'; put 'put ''PXNlWzNdP0k4KGVlLEspOkh5KFMsZWUsSyxtZSk7Y2FzZSAyNTU6aWYoMjU0PT09c2VbMV0pcmV0dXJuIGZ1bmN0aW9uIHRVKFMsTyl7dmFyIGs9UztyZXR1cm4iYmFzZTY0Ij09Ty50eXBlJiYoaz1fZS5kZWNvZGUoaykpLGs9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxrLnNsaWNlKDIp''@;'; put 'put ''LCJzdHIiKSxPLnR5cGU9ImJpbmFyeSIsZU0oayxPKX0oZWUsSyk7YnJlYWs7Y2FzZSAwOmlmKDA9PT1zZVsxXSYmc2VbMl0+PTImJjA9PT1zZVszXSlyZXR1cm4gSXYudG9fd29ya2Jvb2soZWUsSyk7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBCMy50''@;'; put 'put ''b193b3JrYm9vayhlZSxLKTtjYXNlIDEyMzppZig5Mj09PXNlWzFdJiYxMTQ9PT1zZVsyXSYmMTE2PT09c2VbM10pcmV0dXJuIFZ2LnRvX3dvcmtib29rKGVlLEspO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBlVShTLE8pe3ZhciBrPSIiLEs9UVMoUyxP''@;'; put 'put ''KTtzd2l0Y2goTy50eXBlKXtjYXNlImJhc2U2NCI6az1fZS5kZWNvZGUoUyk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9UzticmVhaztjYXNlImJ1ZmZlciI6az1TLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjprPXV0KFMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnJlY29nbml6ZWQgdHlwZSAiK08udHlwZSl9cmV0dXJuIDIzOT09S1swXSYmMTg3PT1LWzFdJiYxOTE9PUtbMl0mJihrPWdvKGspKSxlTShrLE8pfShlZSxLKX1yZXR1cm4gQjMudmVyc2lvbnMuaW5kZXhPZihzZVswXSk+LTEmJnNlWzJdPD0xMiYmc2VbM108PTMxP0IzLnRvX3dvcmti''@;'; put 'put ''b29rKGVlLEspOkh5KFMsZWUsSyxtZSl9ZnVuY3Rpb24ga2MoUyxPKXt2YXIgaz1PfHx7fTtyZXR1cm4gay50eXBlPSJmaWxlIiwkNShTLGspfWZ1bmN0aW9uIEs1KFMsTyl7c3dpdGNoKE8udHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJh''@;'; put 'put ''cnJheSI6Ty50eXBlPSIiO2JyZWFrO2Nhc2UiZmlsZSI6cmV0dXJuIEFlKE8uZmlsZSx2ZS53cml0ZShTLHt0eXBlOlRlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK08uYm9va1R5cGUrIicg''@;'; put 'put ''ZmlsZXMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitPLnR5cGUpfXJldHVybiB2ZS53cml0ZShTLE8pfWZ1bmN0aW9uIG4xKFMsTyxrKXtrfHwoaz0iIik7dmFyIEs9aytTO3N3aXRjaChPLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2UuZW5jb2Rl''@;'; put 'put ''KE5zKEspKTtjYXNlImJpbmFyeSI6cmV0dXJuIE5zKEspO2Nhc2Uic3RyaW5nIjpyZXR1cm4gUztjYXNlImZpbGUiOnJldHVybiBBZShPLmZpbGUsSywidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gVGU/U2UoSywidXRmOCIpOm4xKEsse3R5cGU6ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFw''@;'; put 'put ''KGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitPLnR5cGUpfWZ1bmN0aW9uIHRNKFMsTyl7c3dpdGNoKE8udHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBr''@;'; put 'put ''PSIiLEs9MDtLPFMubGVuZ3RoOysrSylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNbS10pO3JldHVybiJiYXNlNjQiPT1PLnR5cGU/X2UuZW5jb2RlKGspOiJzdHJpbmciPT1PLnR5cGU/Z28oayk6aztjYXNlImZpbGUiOnJldHVybiBBZShPLmZpbGUsUyk7Y2FzZSJidWZmZXIiOnJldHVybiBT''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK08udHlwZSl9fWZ1bmN0aW9uIE44KFMsTyl7VygpLGZ1bmN0aW9uIG9JKFMpe2lmKCFTfHwhUy5TaGVldE5hbWVzfHwhUy5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIVMu''@;'; put 'put ''U2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBhSShTLE8sayl7Uy5mb3JFYWNoKGZ1bmN0aW9uKEssZWUpe195KEspO2Zvcih2YXIgc2U9MDtzZTxlZTsrK3NlKWlmKEs9PVNbc2VdKXRocm93IG5ldyBFcnJvcigiRHVwbGlj''@;'; put 'put ''YXRlIFNoZWV0IE5hbWU6ICIrSyk7aWYoayl7dmFyIG1lPU8mJk9bZWVdJiZPW2VlXS5Db2RlTmFtZXx8SztpZig5NT09bWUuY2hhckNvZGVBdCgwKSYmbWUubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0IittZSl9fSl9KFMuU2hlZXROYW1lcyxT''@;'; put 'put ''Lldvcmtib29rJiZTLldvcmtib29rLlNoZWV0c3x8W10sISFTLnZiYXJhdyk7Zm9yKHZhciBrPTA7azxTLlNoZWV0TmFtZXMubGVuZ3RoOysrayltRChTLlNoZWV0c1tTLlNoZWV0TmFtZXNba11dLDAsayl9KFMpO3ZhciBrPU98fHt9O2lmKGsuY2VsbFN0eWxlcyYmKGsuY2VsbE5GPSEwLGsu''@;'; put 'put ''c2hlZXRTdHVicz0hMCksImFycmF5Ij09ay50eXBlKXtrLnR5cGU9ImJpbmFyeSI7dmFyIEs9TjgoUyxrKTtyZXR1cm4gay50eXBlPSJhcnJheSIseChLKX1zd2l0Y2goay5ib29rVHlwZXx8Inhsc2IiKXtjYXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1cm4gbjEoU0koUyxrKSxrKTtjYXNlInNs''@;'; put 'put ''ayI6Y2FzZSJzeWxrIjpyZXR1cm4gbjEoR3ooUyxrKSxrKTtjYXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gbjEoV3ooUyxrKSxrKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIFZ5KFMsTyl7c3dpdGNoKE8udHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoUyk7Y2FzZSJi''@;'; put 'put ''aW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4gUztjYXNlImZpbGUiOnJldHVybiBBZShPLmZpbGUsUywiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBUZT9TZShTLCJiaW5hcnkiKTpTLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIGsuY2hhckNvZGVBdCgwKX0pfXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitPLnR5cGUpfSgkeihTLGspLGspO2Nhc2UiY3N2IjpyZXR1cm4gbjEoWXooUyxrKSxrLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIG4xKHZkKFMsayksayk7Y2FzZSJkYmYiOnJldHVybiB0TShlcmUoUyxrKSxrKTtjYXNlInBybiI6''@;'; put 'put ''cmV0dXJuIG4xKExJKFMsayksayk7Y2FzZSJydGYiOnJldHVybiBuMShPSShTLGspLGspO2Nhc2UiZXRoIjpyZXR1cm4gbjEoUEkoUyxrKSxrKTtjYXNlImZvZHMiOnJldHVybiBuMShSSShTLGspLGspO2Nhc2UiYmlmZjIiOmsuYmlmZnx8KGsuYmlmZj0yKTtjYXNlImJpZmYzIjprLmJpZmZ8''@;'; put 'put ''fChrLmJpZmY9Myk7Y2FzZSJiaWZmNCI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj00KSx0TShUSShTLGspLGspO2Nhc2UiYmlmZjUiOmsuYmlmZnx8KGsuYmlmZj01KTtjYXNlImJpZmY4IjpjYXNlInhsYSI6Y2FzZSJ4bHMiOnJldHVybiBrLmJpZmZ8fChrLmJpZmY9OCksZnVuY3Rpb24gTnko''@;'; put 'put ''UyxPKXt2YXIgaz1PfHx7fTtyZXR1cm4gSzUoZnVuY3Rpb24gem5lKFMsTyl7dmFyIGs9T3x8e30sSz12ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pLGVlPSIvV29ya2Jvb2siO3N3aXRjaChrLmJvb2tUeXBlfHwieGxzIil7Y2FzZSJ4bHMiOmsuYm9va1R5cGU9ImJpZmY4IjtjYXNlInhs''@;'; put 'put ''YSI6ay5ib29rVHlwZXx8KGsuYm9va1R5cGU9InhsYSIpO2Nhc2UiYmlmZjgiOmVlPSIvV29ya2Jvb2siLGsuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOmVlPSIvQm9vayIsay5iaWZmPTU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK2suYm9va1R5cGUr''@;'; put 'put ''IiBmb3IgWExTIENGQiIpfXJldHVybiB2ZS51dGlscy5jZmJfYWRkKEssZWUsVEkoUyxrKSksOD09ay5iaWZmJiYoUy5Qcm9wc3x8Uy5DdXN0cHJvcHMpJiZmdW5jdGlvbiBqbmUoUyxPKXt2YXIgbWUsaz1bXSxLPVtdLGVlPVtdLHNlPTA7aWYoUy5Qcm9wcylmb3IobWU9UmUoUy5Qcm9wcyks''@;'; put 'put ''c2U9MDtzZTxtZS5sZW5ndGg7KytzZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGg1LG1lW3NlXSk/azpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmYsbWVbc2VdKT9LOmVlKS5wdXNoKFttZVtzZV0sUy5Qcm9wc1ttZVtzZV1dXSk7aWYoUy5D''@;'; put 'put ''dXN0cHJvcHMpZm9yKG1lPVJlKFMuQ3VzdHByb3BzKSxzZT0wO3NlPG1lLmxlbmd0aDsrK3NlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLlByb3BzfHx7fSxtZVtzZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGg1LG1lW3NlXSk/azpP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmYsbWVbc2VdKT9LOmVlKS5wdXNoKFttZVtzZV0sUy5DdXN0cHJvcHNbbWVbc2VdXV0pO3ZhciBwZT1bXTtmb3Ioc2U9MDtzZTxlZS5sZW5ndGg7KytzZSlWNi5pbmRleE9mKGVlW3NlXVswXSk+LTF8fG51bGwhPWVlW3NlXVsx''@;'; put 'put ''XSYmcGUucHVzaChlZVtzZV0pO0subGVuZ3RoJiZ2ZS51dGlscy5jZmJfYWRkKE8sIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIix6aShLLFR5LlNJLHZmLGQ1KSksKGsubGVuZ3RofHxwZS5sZW5ndGgpJiZ2ZS51dGlscy5jZmJfYWRkKE8sIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRp''@;'; put 'put ''b24iLHppKGssVHkuRFNJLGg1LG00LHBlLmxlbmd0aD9wZTpudWxsLFR5LlVESSkpfShTLEspLDg9PWsuYmlmZiYmUy52YmFyYXcmJmZ1bmN0aW9uIFdrKFMsTyl7Ty5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEspe2lmKDAhPUspe3ZhciBlZT1rLnJlcGxhY2UoL1teXC9dKltcL10v''@;'; put 'put ''LCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1lZS5zbGljZSgtMSkmJnZlLnV0aWxzLmNmYl9hZGQoUyxlZSxPLkZpbGVJbmRleFtLXS5jb250ZW50KX19KX0oSyx2ZS5yZWFkKFMudmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgUy52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSks''@;'; put 'put ''S30oUyxrKSxrKX0oUyxrKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gcTUoUyxPKXt2YXIgaz1PfHx7fSxLPUg4KFMsayksZWU9e307aWYoay5jb21wcmVzc2lvbiYmKGVlLmNvbXByZXNzaW9uPSJERUZMQVRF''@;'; put 'put ''Iiksay5wYXNzd29yZCllZS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChrLnR5cGUpe2Nhc2UiYmFzZTY0IjplZS50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjplZS50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK2suYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjplZS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5''@;'; put 'put ''cGUgIitrLnR5cGUpfXZhciBzZT1LLkZ1bGxQYXRocz92ZS53cml0ZShLLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bZWUudHlwZV18fGVlLnR5cGV9KTpLLmdlbmVyYXRlKGVlKTtyZXR1cm4gay5wYXNzd29yZCYmdHlwZW9mIFh6''@;'; put 'put ''PCJ1Ij9LNShYeihzZSxrLnBhc3N3b3JkKSxrKToiZmlsZSI9PT1rLnR5cGU/QWUoay5maWxlLHNlKToic3RyaW5nIj09ay50eXBlP2dvKHNlKTpzZX0oUyxrKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK2suYm9va1R5cGUrInwiKX19ZnVuY3Rp''@;'; put 'put ''b24gbk0oUyl7aWYoIVMuYm9va1R5cGUpe3ZhciBrPVMuZmlsZS5zbGljZShTLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtrLm1hdGNoKC9eXC5bYS16XSskLykmJihTLmJvb2tUeXBlPWsuc2xpY2UoMSkpLFMuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIs''@;'; put 'put ''c2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W1MuYm9va1R5cGVdfHxTLmJvb2tUeXBlfX1mdW5jdGlvbiBWOChTLE8sayl7dmFyIEs9a3x8e307cmV0dXJuIEsudHlwZT0iZmlsZSIsSy5maWxlPU8sbk0oSyksTjgoUyxLKX1mdW5jdGlvbiBpTShTLE8sayxLLGVl''@;'; put 'put ''LHNlLG1lLHBlKXt2YXIgYmU9amkoayksUGU9cGUuZGVmdmFsLFZlPXBlLnJhdyxZZT0hMCxldD0xPT09ZWU/W106e307aWYoMSE9PWVlKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV0LCJfX3Jvd051bV9fIix7dmFsdWU6ayxlbnVtZXJhYmxl''@;'; put 'put ''OiExfSl9Y2F0Y2h7ZXQuX19yb3dOdW1fXz1rfWVsc2UgZXQuX19yb3dOdW1fXz1rO2lmKCFtZXx8U1trXSlmb3IodmFyIGN0PU8ucy5jO2N0PD1PLmUuYzsrK2N0KXt2YXIgRXQ9bWU/U1trXVtjdF06U1tLW2N0XStiZV07aWYodm9pZCAwIT09RXQmJnZvaWQgMCE9PUV0LnQpe3ZhciBhdD1F''@;'; put 'put ''dC52O3N3aXRjaChFdC50KXtjYXNlInoiOmlmKG51bGw9PWF0KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6YXQ9MD09YXQ/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5''@;'; put 'put ''cGUgIitFdC50KX1pZihudWxsIT1zZVtjdF0pe2lmKG51bGw9PWF0KWlmKCJlIj09RXQudCYmbnVsbD09PWF0KWV0W3NlW2N0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PVBlKWV0W3NlW2N0XV09UGU7ZWxzZXtpZighVmV8fG51bGwhPT1hdCljb250aW51ZTtldFtzZVtjdF1dPW51bGx9ZWxz''@;'; put 'put ''ZSBldFtzZVtjdF1dPVZlP2F0Ol9sKEV0LGF0LHBlKTtudWxsIT1hdCYmKFllPSExKX19ZWxzZXtpZih2b2lkIDA9PT1QZSljb250aW51ZTtudWxsIT1zZVtjdF0mJihldFtzZVtjdF1dPVBlKX19cmV0dXJue3JvdzpldCxpc2VtcHR5OlllfX1mdW5jdGlvbiBLNChTLE8pe2lmKG51bGw9PVN8''@;'; put 'put ''fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgaz17dDoibiIsdjowfSxLPTAsZWU9MSxzZT1bXSxtZT0wLHBlPSIiLGJlPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxQZT1PfHx7fSxWZT1udWxsIT1QZS5yYW5nZT9QZS5yYW5nZTpTWyIh''@;'; put 'put ''cmVmIl07c3dpdGNoKDE9PT1QZS5oZWFkZXI/Sz0xOiJBIj09PVBlLmhlYWRlcj9LPTI6QXJyYXkuaXNBcnJheShQZS5oZWFkZXIpP0s9MzpudWxsPT1QZS5oZWFkZXImJihLPTApLHR5cGVvZiBWZSl7Y2FzZSJzdHJpbmciOmJlPW9vKFZlKTticmVhaztjYXNlIm51bWJlciI6KGJlPW9vKFNb''@;'; put 'put ''IiFyZWYiXSkpLnMucj1WZTticmVhaztkZWZhdWx0OmJlPVZlfUs+MCYmKGVlPTApO3ZhciBZZT1qaShiZS5zLnIpLGV0PVtdLGN0PVtdLEV0PTAsYXQ9MCxidD1BcnJheS5pc0FycmF5KFMpLGp0PWJlLnMucixrdD0wLE90PTA7Zm9yKGJ0JiYhU1tqdF0mJihTW2p0XT1bXSksa3Q9YmUucy5j''@;'; put 'put ''O2t0PD1iZS5lLmM7KytrdClzd2l0Y2goZXRba3RdPVRhKGt0KSxrPWJ0P1NbanRdW2t0XTpTW2V0W2t0XStZZV0sSyl7Y2FzZSAxOnNlW2t0XT1rdC1iZS5zLmM7YnJlYWs7Y2FzZSAyOnNlW2t0XT1ldFtrdF07YnJlYWs7Y2FzZSAzOnNlW2t0XT1QZS5oZWFkZXJba3QtYmUucy5jXTticmVh''@;'; put 'put ''aztkZWZhdWx0OmZvcihudWxsPT1rJiYoaz1KU09OLnBhcnNlKCd7InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSxwZT1tZT1fbChrLG51bGwsUGUpLGF0PTAsT3Q9MDtPdDxzZS5sZW5ndGg7KytPdClzZVtPdF09PXBlJiYocGU9bWUrIl8iKyArK2F0KTtzZVtrdF09cGV9Zm9yKGp0PWJl''@;'; put 'put ''LnMucitlZTtqdDw9YmUuZS5yOysranQpe3ZhciBLdD1pTShTLGJlLGp0LGV0LEssc2UsYnQsUGUpOyghMT09PUt0LmlzZW1wdHl8fCgxPT09Sz8hMSE9PVBlLmJsYW5rcm93czpQZS5ibGFua3Jvd3MpKSYmKGN0W0V0KytdPUt0LnJvdyl9cmV0dXJuIGN0Lmxlbmd0aD1FdCxjdH12YXIgXzI9''@;'; put 'put ''LyIvZztmdW5jdGlvbiBCSShTLE8sayxLLGVlLHNlLG1lLHBlKXtmb3IodmFyIGJlPSEwLFBlPVtdLFZlPSIiLFllPWppKGspLGV0PU8ucy5jO2V0PD1PLmUuYzsrK2V0KWlmKEtbZXRdKXt2YXIgY3Q9cGUuZGVuc2U/KFNba118fFtdKVtldF06U1tLW2V0XStZZV07aWYobnVsbD09Y3QpVmU9''@;'; put 'put ''IiI7ZWxzZSBpZihudWxsIT1jdC52KXtiZT0hMSxWZT0iIitfbChjdCxudWxsLHBlKTtmb3IodmFyIEV0PTAsYXQ9MDtFdCE9PVZlLmxlbmd0aDsrK0V0KWlmKChhdD1WZS5jaGFyQ29kZUF0KEV0KSk9PT1lZXx8YXQ9PT1zZXx8MzQ9PT1hdCl7VmU9JyInK1ZlLnJlcGxhY2UoXzIsJyIiJykr''@;'; put 'put ''JyInO2JyZWFrfSJJRCI9PVZlJiYoVmU9JyJJRCInKX1lbHNlIG51bGw9PWN0LmZ8fGN0LkY/VmU9IiI6KGJlPSExLChWZT0iPSIrY3QuZikuaW5kZXhPZigiLCIpPj0wJiYoVmU9JyInK1ZlLnJlcGxhY2UoXzIsJyIiJykrJyInKSk7UGUucHVzaChWZSl9cmV0dXJuITE9PT1wZS5ibGFua3Jv''@;'; put 'put ''d3MmJmJlP251bGw6UGUuam9pbihtZSl9ZnVuY3Rpb24gQzAoUyxPKXt2YXIgaz1bXSxLPU8/P3t9O2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgZWU9b28oU1siIXJlZiJdKSxzZT12b2lkIDAhPT1LLkZTP0suRlM6IiwiLG1lPXNlLmNoYXJDb2RlQXQoMCkscGU9''@;'; put 'put ''dm9pZCAwIT09Sy5SUz9LLlJTOiJcbiIsYmU9cGUuY2hhckNvZGVBdCgwKSxQZT1uZXcgUmVnRXhwKCgifCI9PXNlPyJcXHwiOnNlKSsiKyQiKSxWZT0iIixZZT1bXTtLLmRlbnNlPUFycmF5LmlzQXJyYXkoUyk7Zm9yKHZhciBldD1LLnNraXBIaWRkZW4mJlNbIiFjb2xzIl18fFtdLGN0PUsu''@;'; put 'put ''c2tpcEhpZGRlbiYmU1siIXJvd3MiXXx8W10sRXQ9ZWUucy5jO0V0PD1lZS5lLmM7KytFdCkoZXRbRXRdfHx7fSkuaGlkZGVufHwoWWVbRXRdPVRhKEV0KSk7Zm9yKHZhciBhdD1lZS5zLnI7YXQ8PWVlLmUucjsrK2F0KShjdFthdF18fHt9KS5oaWRkZW58fG51bGwhPShWZT1CSShTLGVlLGF0''@;'; put 'put ''LFllLG1lLGJlLHNlLEspKSYmKEsuc3RyaXAmJihWZT1WZS5yZXBsYWNlKFBlLCIiKSksay5wdXNoKFZlK3BlKSk7cmV0dXJuIGRlbGV0ZSBLLmRlbnNlLGsuam9pbigiIil9ZnVuY3Rpb24gakkoUyxPKXtPfHwoTz17fSksTy5GUz0iXHQiLE8uUlM9IlxuIjt2YXIgaz1DMChTLE8pO3JldHVy''@;'; put 'put ''biB0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJpbmciPT1PLnR5cGU/azoiXHhmZlx4ZmUiK2NwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsaywic3RyIil9ZnVuY3Rpb24gYU0oUyl7dmFyIGssTz0iIixLPSIiO2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcGUsZWU9''@;'; put 'put ''b28oU1siIXJlZiJdKSxzZT0iIixtZT1bXSxiZT1bXSxQZT1BcnJheS5pc0FycmF5KFMpO2ZvcihwZT1lZS5zLmM7cGU8PWVlLmUuYzsrK3BlKW1lW3BlXT1UYShwZSk7Zm9yKHZhciBWZT1lZS5zLnI7VmU8PWVlLmUucjsrK1ZlKWZvcihzZT1qaShWZSkscGU9ZWUucy5jO3BlPD1lZS5lLmM7''@;'; put 'put ''KytwZSlpZihPPW1lW3BlXStzZSxLPSIiLHZvaWQgMCE9PShrPVBlPyhTW1ZlXXx8W10pW3BlXTpTW09dKSl7aWYobnVsbCE9ay5GKXtpZihPPWsuRiwhay5mKWNvbnRpbnVlO0s9ay5mLC0xPT1PLmluZGV4T2YoIjoiKSYmKE89TysiOiIrTyl9aWYobnVsbCE9ay5mKUs9ay5mO2Vsc2V7aWYo''@;'; put 'put ''InoiPT1rLnQpY29udGludWU7aWYoIm4iPT1rLnQmJm51bGwhPWsudilLPSIiK2sudjtlbHNlIGlmKCJiIj09ay50KUs9ay52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09ay53KUs9IiciK2sudztlbHNle2lmKHZvaWQgMD09PWsudiljb250aW51ZTtLPSJzIj09ay50PyInIitr''@;'; put 'put ''LnY6IiIray52fX1iZVtiZS5sZW5ndGhdPU8rIj0iK0t9cmV0dXJuIGJlfWZ1bmN0aW9uIEJ5KFMsTyxrKXt2YXIgSz1rfHx7fSxlZT0rIUsuc2tpcEhlYWRlcixzZT1TfHx7fSxtZT0wLHBlPTA7aWYoc2UmJm51bGwhPUsub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgSy5vcmlnaW4pbWU9''@;'; put 'put ''Sy5vcmlnaW47ZWxzZXt2YXIgYmU9InN0cmluZyI9PXR5cGVvZiBLLm9yaWdpbj9ObyhLLm9yaWdpbik6Sy5vcmlnaW47bWU9YmUucixwZT1iZS5jfXZhciBQZSxWZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihWZS5lLmM9cGUs''@;'; put 'put ''VmUuZS5yPW1lK08ubGVuZ3RoLTErZWUsc2VbIiFyZWYiXSl7dmFyIFllPW9vKHNlWyIhcmVmIl0pO1ZlLmUuYz1NYXRoLm1heChWZS5lLmMsWWUuZS5jKSxWZS5lLnI9TWF0aC5tYXgoVmUuZS5yLFllLmUuciksLTE9PW1lJiYoVmUuZS5yPShtZT1ZZS5lLnIrMSkrTy5sZW5ndGgtMStlZSl9''@;'; put 'put ''ZWxzZS0xPT1tZSYmKG1lPTAsVmUuZS5yPU8ubGVuZ3RoLTErZWUpO3ZhciBldD1LLmhlYWRlcnx8W10sY3Q9MDtPLmZvckVhY2goZnVuY3Rpb24oYXQsYnQpe1JlKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKGp0KXstMT09KGN0PWV0LmluZGV4T2YoanQpKSYmKGV0W2N0PWV0Lmxlbmd0aF09anQp''@;'; put 'put ''O3ZhciBrdD1hdFtqdF0sT3Q9InoiLEt0PSIiLFRuPXFpKHtjOnBlK2N0LHI6bWUrYnQrZWV9KTtpZihQZT16dS5zaGVldF9nZXRfY2VsbChzZSxUbiksIWt0fHwib2JqZWN0IiE9dHlwZW9mIGt0fHxrdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2Yga3Q/T3Q9Im4iOiJi''@;'; put 'put ''b29sZWFuIj09dHlwZW9mIGt0P090PSJiIjoic3RyaW5nIj09dHlwZW9mIGt0P090PSJzIjprdCBpbnN0YW5jZW9mIERhdGU/KE90PSJkIixLLmNlbGxEYXRlc3x8KE90PSJuIixrdD1KZShrdCkpLEt0PVBlLnomJkEuaXNfZGF0ZShQZS56KT9QZS56OksuZGF0ZU5GfHxBLl90YWJsZVsxNF0p''@;'; put 'put ''Om51bGw9PT1rdCYmSy5udWxsRXJyb3ImJihPdD0iZSIsa3Q9MCksUGU/KFBlLnQ9T3QsUGUudj1rdCxkZWxldGUgUGUudyxkZWxldGUgUGUuUixLdCYmKFBlLno9S3QpKTpzZVtUbl09UGU9e3Q6T3QsdjprdH0sS3QmJihQZS56PUt0KSxQZSYmUGUuaCl0cnl7aWYoUGUuUj1tZC5odG1sX3Rv''@;'; put 'put ''X3JzKFBlLmgpLCFQZS52KXtQZS52PSIiO2Zvcih2YXIgcnI9MDtycjxQZS5SLmxlbmd0aDsrK3JyKVBlLnYrPVBlLlJbcnJdLnZ8fCIifX1jYXRjaHt9fWVsc2Ugc2VbVG5dPWt0fSl9KSxWZS5lLmM9TWF0aC5tYXgoVmUuZS5jLHBlK2V0Lmxlbmd0aC0xKTt2YXIgRXQ9amkobWUpO2lmKGVl''@;'; put 'put ''KWZvcihjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KXNlW1RhKGN0K3BlKStFdF09e3Q6InMiLHY6ZXRbY3RdfTtyZXR1cm4gc2VbIiFyZWYiXT1yYShWZSksc2V9dmFyIHp1PXtlbmNvZGVfY29sOlRhLGVuY29kZV9yb3c6amksZW5jb2RlX2NlbGw6cWksZW5jb2RlX3JhbmdlOnJhLGRlY29kZV9j''@;'; put 'put ''b2w6Q2EsZGVjb2RlX3JvdzpfbyxzcGxpdF9jZWxsOmZ1bmN0aW9uICQwKFMpe3JldHVybiBTLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOk5vLGRlY29kZV9yYW5nZTpNcyxmb3JtYXRfY2VsbDpfbCxnZXRfZm9ybXVsYWU6''@;'; put 'put ''YU0sbWFrZV9jc3Y6QzAsbWFrZV9qc29uOks0LG1ha2VfZm9ybXVsYWU6YU0saHRtbF90b19yczptZC5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6ZjQsc2hlZXRfYWRkX2pzb246Qnksc2hlZXRfYWRkX2RvbTpJeSxhb2FfdG9fc2hlZXQ6cDQsanNvbl90b19zaGVldDpmdW5jdGlvbiB6SShT''@;'; put 'put ''LE8pe3JldHVybiBCeShudWxsLFMsTyl9LHRhYmxlX3RvX3NoZWV0Omp6LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24genooUyxPKXtyZXR1cm4gdGgoanooUyxPKSxPKX0sc2hlZXRfdG9fY3N2OkMwLHNoZWV0X3RvX3R4dDpqSSxzaGVldF90b19qc29uOks0LHNoZWV0X3RvX2h0bWw6bWQuZnJv''@;'; put 'put ''bV9zaGVldCxzaGVldF90b19mb3JtdWxhZTphTSxzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Oks0fTtmdW5jdGlvbiBVSShTLE8sayxLLGVlKXt2YXIgc2U7aWYoUy5zdHlsZSYmIShTLl9yYW5nZSYmKHNlPSJzdHJpbmciPT10eXBlb2YgUy5fcmFuZ2U/dy51dGlscy5kZWNvZGVfcmFuZ2Uo''@;'; put 'put ''Uy5fcmFuZ2UpOlMuX3JhbmdlLGsuYz5zZS5lLmN8fGsuYzxzZS5zLmN8fGsucj5zZS5lLnJ8fGsucjxzZS5zLnIpKSYmc2Upe3ZhciBtZT1TLnN0eWxlLnN0eWxlO2lmKG1lKXttZS53aG9sZVRhYmxlJiZ6dS5hcHBseV9zdHlsZV9kZWx0YShLLG1lLndob2xlVGFibGUpO2U6aWYobWUuaGVh''@;'; put 'put ''ZGVyUm93KWlmKGVlKXtpZihrLnIhPXNlLnMucilicmVhayBlO1d0KFMuc3R5bGUuY29saGVhZCl8fHp1LmFwcGx5X3N0eWxlX2RlbHRhKEssbWUuaGVhZGVyUm93KX1lbHNle2lmKGsuciE9c2Uucy5yKWJyZWFrIGU7V3QoUy5oZWFkZXIpfHx6dS5hcHBseV9zdHlsZV9kZWx0YShLLG1lLmhl''@;'; put 'put ''YWRlclJvdyl9fX19enUudGVzdF9wYXNzd29yZD1mdW5jdGlvbiBLeihTLE8pe3ZhciBrPUJ1ZmZlci5mcm9tKFMuc2FsdCwiYmFzZTY0IiksSz1TLmFsZ28sZWU9bWMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLE8pKV0pLEspLHNlPUJ1''@;'; put 'put ''ZmZlci5hbGxvYyg0KTttbihzZSwwKTtmb3IodmFyIG1lPTA7bWU8Uy5zcGluOysrbWUpc2UubD0wLHNlLndyaXRlX3NoaWZ0KDQsbWUpLGVlPW1jKEJ1ZmZlci5jb25jYXQoW2VlLHNlXSksSyk7dmFyIHBlPUJ1ZmZlci5mcm9tKFMuaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PWVlLmNvbXBh''@;'; put 'put ''cmUocGUpfSx6dS5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIFJ5KFMpe3ZhciBPPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxrPUJ1ZmZlci5mcm9tKE8uc2FsdCwiYmFzZTY0IiksSz1PLmFsZ28sZWU9bWMoQnVmZmVyLmNvbmNhdChb''@;'; put 'put ''ayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKV0pLEspLHNlPUJ1ZmZlci5hbGxvYyg0KTttbihzZSwwKTtmb3IodmFyIG1lPTA7bWU8Ty5zcGluOysrbWUpc2UubD0wLHNlLndyaXRlX3NoaWZ0KDQsbWUpLGVlPW1jKEJ1ZmZlci5jb25jYXQoW2VlLHNlXSksSyk7''@;'; put 'put ''cmV0dXJuIE8uaGFzaD1lZS50b1N0cmluZygiYmFzZTY0IiksT30senUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKFMsTyxrKXtpZihrKXt2YXIgSz0ic3RyaW5nIj09dHlwZW9mIE8/b28oTyk6TztudWxsIT1LLnImJm51bGwhPUsuYyYmKEs9e3M6SyxlOkt9KTt2YXIgcGUsZWU9''@;'; put 'put ''Sy5zLnIsc2U9MCxtZT0iIixiZT1NcyhTWyIhcmVmIl18fCJBMSIpO2JlLnMucj5LLnMuciYmKGJlLnMucj1LLnMuciksYmUucy5jPksucy5jJiYoYmUucy5jPUsucy5jKSxiZS5lLnI8Sy5lLnImJihiZS5lLnI9Sy5lLnIpLGJlLmUuYzxLLmUuYyYmKGJlLmUuYz1LLmUuYyksU1siIXJlZiJd''@;'; put 'put ''PXJhKGJlKTtmb3IodmFyIFZlPUFycmF5LmlzQXJyYXkoUyk7ZWU8PUsuZS5yOysrZWUpZm9yKHNlPUsucy5jO3NlPD1LLmUuYzsrK3NlKVZlPyhTW2VlXXx8KFNbZWVdPVtdKSxTW2VlXVtzZV18fChTW2VlXVtzZV09e3Q6InoifSkscGU9U1tlZV1bc2VdKTooU1ttZT1xaSh7cjplZSxjOnNl''@;'; put 'put ''fSldfHwoU1ttZV09e3Q6InoifSkscGU9U1ttZV0pLHBlLnN8fChwZS5zPXt9KSxPYmplY3Qua2V5cyhrKS5mb3JFYWNoKFBlKSxwZS5zLnBhdHRlcm5UeXBlJiYhcGUucy5mZ0NvbG9yJiYoZGVsZXRlIHBlLnMucGF0dGVyblR5cGUsZGVsZXRlIHBlLnMuYmdDb2xvciksKHBlLnMuZmdDb2xv''@;'; put 'put ''cnx8cGUucy5iZ0NvbG9yKSYmIm5vbmUiPT0ocGUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYmKHBlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYoZWU9Sy5zLnIsay50b3B8fG51bGw9PT1rLnRvcClmb3Ioc2U9Sy5zLmM7c2U8PUsuZS5jOysrc2Upe2lmKFZlKXtpZighU1tlZV0pY29udGlu''@;'; put 'put ''dWU7cGU9U1tlZV1bc2VdfWVsc2UgbWU9cWkoe3I6ZWUsYzpzZX0pLHBlPVNbbWVdO3BlJiYobnVsbD09PWsudG9wP2RlbGV0ZSBwZS5zLnRvcDpwZS5zLnRvcD1xdChrLnRvcCkpfWlmKGVlPUsuZS5yLGsuYm90dG9tfHxudWxsPT09ay5ib3R0b20pZm9yKHNlPUsucy5jO3NlPD1LLmUuYzsr''@;'; put 'put ''K3NlKXtpZihWZSl7aWYoIVNbZWVdKWNvbnRpbnVlO3BlPVNbZWVdW3NlXX1lbHNlIG1lPXFpKHtyOmVlLGM6c2V9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209cXQoay5ib3R0b20pKX1pZihzZT1LLnMuYyxrLmxlZnR8fG51''@;'; put 'put ''bGw9PT1rLmxlZnQpZm9yKGVlPUsucy5yO2VlPD1LLmUucjsrK2VlKXtpZihWZSl7aWYoIVNbZWVdKWNvbnRpbnVlO3BlPVNbZWVdW3NlXX1lbHNlIG1lPXFpKHtyOmVlLGM6c2V9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9cXQoay5s''@;'; put 'put ''ZWZ0KSl9aWYoc2U9Sy5lLmMsay5yaWdodHx8bnVsbD09PWsucmlnaHQpZm9yKGVlPUsucy5yO2VlPD1LLmUucjsrK2VlKXtpZihWZSl7aWYoIVNbZWVdKWNvbnRpbnVlO3BlPVNbZWVdW3NlXX1lbHNlIG1lPXFpKHtyOmVlLGM6c2V9KSxwZT1TW21lXTtwZSYmKG51bGw9PT1rLnJpZ2h0P2Rl''@;'; put 'put ''bGV0ZSBwZS5zLnJpZ2h0OnBlLnMucmlnaHQ9cXQoay5yaWdodCkpfX1mdW5jdGlvbiBQZShZZSl7aWYoInRvcCIhPVllJiYiYm90dG9tIiE9WWUmJiJsZWZ0IiE9WWUmJiJyaWdodCIhPVllKXtpZigieiI9PVllKXJldHVybiB2b2lkKHBlLno9ay56KTtpZigiYWxpZ25tZW50Ij09WWUpcmV0''@;'; put 'put ''dXJuIHZvaWQocGUuc1tZZV0/T2JqZWN0LmtleXMoa1tZZV0pLmZvckVhY2goZnVuY3Rpb24oZXQpe3BlLnNbWWVdW2V0XT1rW1llXVtldF19KTpwZS5zW1llXT1xdChrW1llXSkpO2lmKCJpbmNvbCI9PVllKXJldHVybiBzZT5LLnMuYyYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVm''@;'; put 'put ''dDpwZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pLHZvaWQoc2U8Sy5lLmMmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSk7aWYoImlucm93Ij09''@;'; put 'put ''WWUpcmV0dXJuIGVlPksucy5yJiYobnVsbD09PWsudG9wP2RlbGV0ZSBwZS5zLnRvcDpwZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXSksdm9pZChlZTxLLmUuciYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBrW1llXT9xdChrW1llXSk6a1tZZV0pKTtudWxsPT09a1tZZV0/ZGVsZXRlIHBlLnNbWWVdOnBlLnNbWWVdPWtbWWVdJiZBcnJheS5pc0FycmF5KGtbWWVdKT9rW1llXS5zbGljZSgpLm1hcChmdW5jdGlvbihldCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBldD9xdChl''@;'; put 'put ''dCk6ZXR9KToib2JqZWN0Ij09dHlwZW9mIGtbWWVdP3F0KGtbWWVdKTprW1llXX19fSx6dS5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbihTLE8pe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oayl7''@;'; put 'put ''dmFyIEs9azsiYmdDb2xvciI9PWs/Sz0iZmdDb2xvciI6ImZnQ29sb3IiPT1rJiYoSz0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPLGspJiYobnVsbD09PU9ba10/ZGVsZXRlIFNbS106bnVsbCE9T1trXSYmKFNbS109T1trXSkpfSksWyJsZWZ0Iiwi''@;'; put 'put ''cmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmZvckVhY2goZnVuY3Rpb24oayl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE8saykmJihudWxsPT09T1trXT9kZWxldGUgU1trXTpu''@;'; put 'put ''dWxsIT1PW2tdJiYoU1trXT1xdChPW2tdKSkpfSl9LHp1LmdldF9jb21wdXRlZF9zdHlsZT1mdW5jdGlvbihTLE8peyJzdHJpbmciPT10eXBlb2YgTyYmKE89dy51dGlscy5kZWNvZGVfY2VsbChPKSk7dmFyIGs9QXJyYXkuaXNBcnJheShTKT8oU1tPLnJdfHxbXSlbTy5jXTpTW3cudXRpbHMu''@;'; put 'put ''ZW5jb2RlX2NlbGwoTyldLEs9cXQoayYmay5zfHx7fSk7cmV0dXJuIFNbIiF0YWJsZXMiXSYmU1siIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oZWUpe1VJKGVlLDAsTyxLKX0pLFNbIiFwaXZvdHMiXSYmU1siIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24oZWUpe1VJKGVlLDAsTyxLLCEw''@;'; put 'put ''KX0pLEt9O3ZhciB6eT17fTt6dS5jZWxsX2FycmF5X3RvX2Nzdl9yb3c9ZnVuY3Rpb24oUyxPKXt2YXIgaz1PPz97fSxLPXZvaWQgMCE9PWsuRlM/ay5GUzoiLCIsZWU9Sy5jaGFyQ29kZUF0KDApLHNlPXZvaWQgMCE9PWsuUlM/ay5SUzoiXG4iLG1lPXNlLmNoYXJDb2RlQXQoMCkscGU9enlb''@;'; put 'put ''S118fCh6eVtLXT1uZXcgUmVnRXhwKCgifCI9PUs/IlxcfCI6SykrIiskIikpLGJlPWZ1bmN0aW9uIGp5KFMsTyxrLEssZWUpe2Zvcih2YXIgc2U9ITAsbWU9W10scGU9IiIsYmU9MDtiZTw9Uy5sZW5ndGgtMTsrK2JlKXt2YXIgUGU9U1tiZV07aWYobnVsbD09UGUpcGU9IiI7ZWxzZSBpZihu''@;'; put 'put ''dWxsIT1QZS52KXtzZT0hMSxwZT0iIitfbChQZSxudWxsLGVlKTtmb3IodmFyIFZlPTAsWWU9MDtWZSE9PXBlLmxlbmd0aDsrK1ZlKWlmKChZZT1wZS5jaGFyQ29kZUF0KFZlKSk9PT1PfHxZZT09PWt8fDM0PT09WWUpe3BlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJzticmVha30iSUQi''@;'; put 'put ''PT1wZSYmKHBlPSciSUQiJyl9ZWxzZSBudWxsPT1QZS5mfHxQZS5GP3BlPSIiOihzZT0hMSwocGU9Ij0iK1BlLmYpLmluZGV4T2YoIiwiKT49MCYmKHBlPSciJytwZS5yZXBsYWNlKF8yLCciIicpKyciJykpO21lLnB1c2gocGUpfXJldHVybiExPT09ZWUuYmxhbmtyb3dzJiZzZT9udWxsOm1l''@;'; put 'put ''LmpvaW4oSyl9KFMsZWUsbWUsSyxrKTtyZXR1cm4gay5zdHJpcCYmKGJlPWJlLnJlcGxhY2UocGUsIiIpKSxiZStzZX0sZnVuY3Rpb24oUyl7ZnVuY3Rpb24gayhzZSxtZSxwZSl7cmV0dXJuIG51bGwhPXNlW21lXT9zZVttZV06c2VbbWVdPXBlfWZ1bmN0aW9uIEsoc2UsbWUscGUpe2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbWUpe2lmKEFycmF5LmlzQXJyYXkoc2UpKXt2YXIgYmU9Tm8obWUpO3JldHVybiBzZVtiZS5yXXx8KHNlW2JlLnJdPVtdKSxzZVtiZS5yXVtiZS5jXXx8KHNlW2JlLnJdW2JlLmNdPXt0OiJ6In0pfXJldHVybiBzZVttZV18fChzZVttZV09e3Q6InoifSl9cmV0dXJu''@;'; put 'put ''IEsoc2UscWkoIm51bWJlciIhPXR5cGVvZiBtZT9tZTp7cjptZSxjOnBlfHwwfSkpfVMuY29uc3RzPVMuY29uc3RzfHx7fSxTLnNoZWV0X2dldF9jZWxsPUssUy5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LFMuYm9va19hcHBlbmRfc2hlZXQ9''@;'; put 'put ''ZnVuY3Rpb24oc2UsbWUscGUpe2lmKCFwZSlmb3IodmFyIGJlPTE7YmU8PTY1NTM1JiYtMSE9c2UuU2hlZXROYW1lcy5pbmRleE9mKHBlPSJTaGVldCIrYmUpOysrYmUpO2lmKF95KHBlKSxzZS5TaGVldE5hbWVzLmluZGV4T2YocGUpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdp''@;'; put 'put ''dGggbmFtZSB8IitwZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtzZS5TaGVldE5hbWVzLnB1c2gocGUpLHNlLlNoZWV0c1twZV09bWV9LFMuYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihzZSxtZSxwZSl7ayhzZSwiV29ya2Jvb2siLHt9KSxrKHNlLldvcmtib29rLCJTaGVldHMi''@;'; put 'put ''LFtdKTt2YXIgYmU9ZnVuY3Rpb24gZWUoc2UsbWUpe2lmKCJudW1iZXIiPT10eXBlb2YgbWUpe2lmKG1lPj0wJiZzZS5TaGVldE5hbWVzLmxlbmd0aD5tZSlyZXR1cm4gbWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrbWUpfWlmKCJzdHJpbmciPT10eXBlb2YgbWUp''@;'; put 'put ''e3ZhciBwZT1zZS5TaGVldE5hbWVzLmluZGV4T2YobWUpO2lmKHBlPi0xKXJldHVybiBwZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrbWUrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK21lKyJ8Iil9KHNlLG1lKTtzd2l0Y2go''@;'; put 'put ''ayhzZS5Xb3JrYm9vay5TaGVldHMsYmUse30pLHBlKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3BlKX1zZS5Xb3JrYm9vay5TaGVldHNbYmVdLkhpZGRlbj1wZX0sZnVuY3Rpb24gTyhz''@;'; put 'put ''ZSl7c2UuZm9yRWFjaChmdW5jdGlvbihtZSl7Uy5jb25zdHNbbWVbMF1dPW1lWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLFMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihzZSxtZSl7cmV0dXJu''@;'; put 'put ''IHNlLno9bWUsc2V9LFMuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9uKHNlLG1lLHBlKXtyZXR1cm4gbWU/KHNlLmw9e1RhcmdldDptZX0scGUmJihzZS5sLlRvb2x0aXA9cGUpLHNlLnN8fChzZS5zPXt9KSxzZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgc2UubCxzZS5zJiZzZS5z''@;'; put 'put ''LmNvbG9yJiYxMD09c2Uucy5jb2xvci50aGVtZSYmZGVsZXRlIHNlLnMuY29sb3IpLHNlfSxTLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24oc2UsbWUscGUpe3JldHVybiBTLmNlbGxfc2V0X2h5cGVybGluayhzZSwiIyIrbWUscGUpfSxTLmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rp''@;'; put 'put ''b24oc2UsbWUscGUpe3NlLmN8fChzZS5jPVtdKSxzZS5jLnB1c2goe3Q6bWUsYTpwZXx8IlNoZWV0SlMifSl9LFMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24oc2UsbWUscGUpe2Zvcih2YXIgYmU9InN0cmluZyIhPXR5cGVvZiBtZT9tZTpvbyhtZSksUGU9InN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBtZT9tZTpyYShtZSksVmU9YmUucy5yO1ZlPD1iZS5lLnI7KytWZSlmb3IodmFyIFllPWJlLnMuYztZZTw9YmUuZS5jOysrWWUpe3ZhciBldD1LKHNlLFZlLFllKTtldC50PSJuIixldC5GPVBlLGRlbGV0ZSBldC52LFZlPT1iZS5zLnImJlllPT1iZS5zLmMmJihldC5mPXBlKX1yZXR1''@;'; put 'put ''cm4gc2V9fSh6dSksVGUmJmZ1bmN0aW9uKCl7dmFyIFM9Yig3MDQ1KS5SZWFkYWJsZTt3LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihlZSxzZSl7dmFyIG1lPVMoe29iamVjdE1vZGU6ITB9KTtpZihudWxsPT1lZXx8bnVsbD09ZWVbIiFyZWYiXSlyZXR1cm4gbWUucHVzaChudWxsKSxtZTt2''@;'; put 'put ''YXIgcGU9e3Q6Im4iLHY6MH0sYmU9MCxQZT0xLFZlPVtdLFllPTAsZXQ9IiIsY3Q9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxFdD1zZXx8e30sYXQ9bnVsbCE9RXQucmFuZ2U/RXQucmFuZ2U6ZWVbIiFyZWYiXTtzd2l0Y2goMT09PUV0LmhlYWRlcj9iZT0xOiJBIj09PUV0LmhlYWRlcj9i''@;'; put 'put ''ZT0yOkFycmF5LmlzQXJyYXkoRXQuaGVhZGVyKSYmKGJlPTMpLHR5cGVvZiBhdCl7Y2FzZSJzdHJpbmciOmN0PW9vKGF0KTticmVhaztjYXNlIm51bWJlciI6KGN0PW9vKGVlWyIhcmVmIl0pKS5zLnI9YXQ7YnJlYWs7ZGVmYXVsdDpjdD1hdH1iZT4wJiYoUGU9MCk7dmFyIGJ0PWppKGN0LnMu''@;'; put 'put ''ciksanQ9W10sa3Q9MCxPdD1BcnJheS5pc0FycmF5KGVlKSxLdD1jdC5zLnIsVG49MCxycj0wO2ZvcihPdCYmIWVlW0t0XSYmKGVlW0t0XT1bXSksVG49Y3Qucy5jO1RuPD1jdC5lLmM7KytUbilzd2l0Y2goanRbVG5dPVRhKFRuKSxwZT1PdD9lZVtLdF1bVG5dOmVlW2p0W1RuXStidF0sYmUp''@;'; put 'put ''e2Nhc2UgMTpWZVtUbl09VG4tY3Qucy5jO2JyZWFrO2Nhc2UgMjpWZVtUbl09anRbVG5dO2JyZWFrO2Nhc2UgMzpWZVtUbl09RXQuaGVhZGVyW1RuLWN0LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09cGUmJihwZT17dzoiX19FTVBUWSIsdDoicyJ9KSxldD1ZZT1fbChwZSxudWxsLEV0''@;'; put 'put ''KSxrdD0wLHJyPTA7cnI8VmUubGVuZ3RoOysrcnIpVmVbcnJdPT1ldCYmKGV0PVllKyJfIisgKytrdCk7VmVbVG5dPWV0fXJldHVybiBLdD1jdC5zLnIrUGUsbWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZihLdD5jdC5lLnIpcmV0dXJuIG1lLnB1c2gobnVsbCk7Zm9yKDtLdDw9Y3QuZS5yOyl7dmFy''@;'; put 'put ''IFNuPWlNKGVlLGN0LEt0LGp0LGJlLFZlLE90LEV0KTtpZigrK0t0LCExPT09U24uaXNlbXB0eXx8KDE9PT1iZT8hMSE9PUV0LmJsYW5rcm93czpFdC5ibGFua3Jvd3MpKXttZS5wdXNoKFNuLnJvdyk7YnJlYWt9fX0sbWV9LHRvX2h0bWw6ZnVuY3Rpb24oZWUsc2Upe3ZhciBtZT1TKCkscGU9''@;'; put 'put ''c2V8fHt9LFBlPW51bGwhPXBlLmZvb3Rlcj9wZS5mb290ZXI6bWQuRU5EO21lLnB1c2gobnVsbCE9cGUuaGVhZGVyP3BlLmhlYWRlcjptZC5CRUdJTik7dmFyIFZlPU1zKGVlWyIhcmVmIl0pO3BlLmRlbnNlPUFycmF5LmlzQXJyYXkoZWUpLG1lLnB1c2gobWQuX3ByZWFtYmxlKGVlLFZlLHBl''@;'; put 'put ''KSk7dmFyIFllPVZlLnMucixldD0hMSxjdD1bXTtyZXR1cm4gbWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZihZZT5WZS5lLnIpcmV0dXJuIGV0fHwoZXQ9ITAsbWUucHVzaCgiPC90YWJsZT4iK1BlKSksbWUucHVzaChudWxsKTtmb3IoO1llPD1WZS5lLnI7KXttZS5wdXNoKG1kLl9yb3coZWUsVmUs''@;'; put 'put ''WWUscGUsY3QsIiIpKSwrK1llO2JyZWFrfX0sbWV9LHRvX2NzdjpmdW5jdGlvbihlZSxzZSl7dmFyIG1lPVMoKSxwZT1zZT8/e307aWYobnVsbD09ZWV8fG51bGw9PWVlWyIhcmVmIl0pcmV0dXJuIG1lLnB1c2gobnVsbCksbWU7dmFyIGJlPW9vKGVlWyIhcmVmIl0pLFBlPXZvaWQgMCE9PXBl''@;'; put 'put ''LkZTP3BlLkZTOiIsIixWZT1QZS5jaGFyQ29kZUF0KDApLFllPXZvaWQgMCE9PXBlLlJTP3BlLlJTOiJcbiIsZXQ9WWUuY2hhckNvZGVBdCgwKSxjdD1uZXcgUmVnRXhwKCgifCI9PVBlPyJcXHwiOlBlKSsiKyQiKSxFdD0iIixhdD1bXTtwZS5kZW5zZT1BcnJheS5pc0FycmF5KGVlKTtmb3Io''@;'; put 'put ''dmFyIGJ0PXBlLnNraXBIaWRkZW4mJmVlWyIhY29scyJdfHxbXSxqdD1wZS5za2lwSGlkZGVuJiZlZVsiIXJvd3MiXXx8W10sa3Q9YmUucy5jO2t0PD1iZS5lLmM7KytrdCkoYnRba3RdfHx7fSkuaGlkZGVufHwoYXRba3RdPVRhKGt0KSk7dmFyIE90PWJlLnMucixLdD0hMTtyZXR1cm4gbWUu''@;'; put 'put ''X3JlYWQ9ZnVuY3Rpb24oKXtpZighS3QpcmV0dXJuIEt0PSEwLG1lLnB1c2goIlx1ZmVmZiIpO2Zvcig7T3Q8PWJlLmUucjspaWYoKytPdCwhKGp0W090LTFdfHx7fSkuaGlkZGVuJiZudWxsIT0oRXQ9QkkoZWUsYmUsT3QtMSxhdCxWZSxldCxQZSxwZSkpKXtwZS5zdHJpcCYmKEV0PUV0LnJl''@;'; put 'put ''cGxhY2UoY3QsIiIpKSxtZS5wdXNoKEV0K1llKTticmVha31yZXR1cm4gT3Q+YmUuZS5yP21lLnB1c2gobnVsbCk6dm9pZCAwfSxtZX19fSgpLHcucGFyc2VfeGxzY2ZiPSRTLHcucGFyc2VfemlwPXJwLHcucmVhZD0kNSx3LnJlYWRGaWxlPWtjLHcucmVhZEZpbGVTeW5jPWtjLHcud3JpdGU9''@;'; put 'put ''Tjgsdy53cml0ZUZpbGU9Vjgsdy53cml0ZUZpbGVTeW5jPVY4LHcud3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gck0oUyxPLGssSyl7dmFyIGVlPWt8fHt9O2VlLnR5cGU9ImZpbGUiLGVlLmZpbGU9UyxuTShlZSksZWUudHlwZT0iYnVmZmVyIjt2YXIgc2U9SztyZXR1cm4gc2UgaW5zdGFuY2Vv''@;'; put 'put ''ZiBGdW5jdGlvbnx8KHNlPWspLFhlLndyaXRlRmlsZShTLE44KE8sZWUpLHNlKX0sdy5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlvbiBEdChTKXtzd2l0Y2goUyl7Y2FzZSAwOnl0KCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBTdCgpe3ZhciBTPW5ldyBEYXRlO250PV90LmdldFRpbWUoKSs2ZTQq''@;'; put 'put ''KFMuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgTz1TLmdldFRpbWV6b25lT2Zmc2V0KCk7SmU9ZnVuY3Rpb24oSyxlZSl7dmFyIHNlPUsuZ2V0VGltZSgpO3JldHVybiBlZSYmKHNlLT0xMjYzMTY4ZTUpLChzZS0oX3QuZ2V0VGltZSgpKzZlNCooSy5n''@;'; put 'put ''ZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9LGxuPWZ1bmN0aW9uKEspe3ZhciBlZT1uZXcgRGF0ZTtyZXR1cm4gZWUuc2V0VGltZSgyNCpLKjYwKjYwKjFlMytudCksZWUuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PU8mJmVlLnNldFRpbWUoZWUuZ2V0''@;'; put 'put ''VGltZSgpKzZlNCooZWUuZ2V0VGltZXpvbmVPZmZzZXQoKS1PKSksZWV9fSgpfX0sdy51dGlscz16dSx3LlNTRj1BLHR5cGVvZiB2ZTwidSImJih3LkNGQj12ZSl9KEopfSw0OTYwOTooY2UsSixiKT0+e3ZhciBEPUo7RC5iaWdudW09Yig5Njg2NyksRC5kZWZpbmU9YigxNjYyNikuZGVmaW5l''@;'; put 'put ''LEQuYmFzZT1iKDE1MDY2KSxELmNvbnN0YW50cz1iKDQ3NzQwKSxELmRlY29kZXJzPWIoOTE1NTgpLEQuZW5jb2RlcnM9YigyMjcxNCl9LDE2NjI2OihjZSxKLGIpPT57dmFyIEQ9Yig0OTYwOSksXz1iKDcxOTkzKTtmdW5jdGlvbiBOKHcsRil7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PUYsdGhp''@;'; put 'put ''cy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fUouZGVmaW5lPWZ1bmN0aW9uKEYsSCl7cmV0dXJuIG5ldyBOKEYsSCl9LE4ucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihGKXt2YXIgSDt0cnl7SD1iKDg2NjEpLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMu''@;'; put 'put ''bmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7SD1mdW5jdGlvbihqKXt0aGlzLl9pbml0TmFtZWQoail9fXJldHVybiBfKEgsRiksSC5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihqKXtGLmNhbGwodGhpcyxqKX0sbmV3IEgodGhp''@;'; put 'put ''cyl9LE4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEY9Rnx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tGXT10aGlzLl9jcmVhdGVOYW1lZChELmRlY29kZXJzW0ZdKSksdGhpcy5kZWNvZGVyc1tGXX0sTi5wcm90''@;'; put 'put ''b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihIKS5kZWNvZGUoRixSKX0sTi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoRj1GfHwiZGVyIil8fCh0aGlzLmVuY29k''@;'; put 'put ''ZXJzW0ZdPXRoaXMuX2NyZWF0ZU5hbWVkKEQuZW5jb2RlcnNbRl0pKSx0aGlzLmVuY29kZXJzW0ZdfSxOLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRixILFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEgpLmVuY29kZShGLFIpfX0sOTcyOTA6KGNlLEosYik9Pnt2YXIgRD1iKDcxOTkz''@;'; put 'put ''KSxfPWIoMTUwNjYpLlJlcG9ydGVyLHA9Yig4MzgzOCkuQnVmZmVyO2Z1bmN0aW9uIE4oRixIKXtfLmNhbGwodGhpcyxIKSxwLmlzQnVmZmVyKEYpPyh0aGlzLmJhc2U9Rix0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPUYubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9''@;'; put 'put ''ZnVuY3Rpb24gdyhGLEgpe2lmKEFycmF5LmlzQXJyYXkoRikpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPUYubWFwKGZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2Ygd3x8KFI9bmV3IHcoUixIKSksdGhpcy5sZW5ndGgrPVIubGVuZ3RoLFJ9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBGKXtpZighKDA8PUYmJkY8PTI1NSkpcmV0dXJuIEguZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPUYsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgRil0aGlzLnZhbHVlPUYsdGhpcy5sZW5ndGg9cC5ieXRlTGVu''@;'; put 'put ''Z3RoKEYpO2Vsc2V7aWYoIXAuaXNCdWZmZXIoRikpcmV0dXJuIEguZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIEYpO3RoaXMudmFsdWU9Rix0aGlzLmxlbmd0aD1GLmxlbmd0aH19RChOLF8pLEoudD1OLE4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0''@;'; put 'put ''OnRoaXMub2Zmc2V0LHJlcG9ydGVyOl8ucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LE4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oSCl7dmFyIFI9bmV3IE4odGhpcy5iYXNlKTtyZXR1cm4gUi5vZmZzZXQ9SC5vZmZzZXQsUi5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9''@;'; put 'put ''SC5vZmZzZXQsXy5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsSC5yZXBvcnRlciksUn0sTi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxOLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oSCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''b2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihIfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LE4ucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oSCxSKXtpZighKHRoaXMub2Zmc2V0K0g8PXRoaXMubGVuZ3RoKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5lcnJvcihSfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIGo9bmV3IE4odGhpcy5iYXNlKTtyZXR1cm4gai5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLGoub2Zmc2V0PXRoaXMub2Zmc2V0LGoubGVuZ3RoPXRoaXMub2Zmc2V0K0gsdGhpcy5vZmZz''@;'; put 'put ''ZXQrPUgsan0sTi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEgpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoSD9ILm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LEouZD13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oSCxSKXtyZXR1cm4gSHx8KEg9bmV3IHAodGhpcy5sZW5ndGgp''@;'; put 'put ''KSxSfHwoUj0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihqKXtqLmpvaW4oSCxSKSxSKz1qLmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/SFtSXT10aGlzLnZhbHVlOiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgdGhpcy52YWx1ZT9ILndyaXRlKHRoaXMudmFsdWUsUik6cC5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEgsUiksUis9dGhpcy5sZW5ndGgpKSxIfX0sMTUwNjY6KGNlLEosYik9Pnt2YXIgRD1KO0QuUmVwb3J0ZXI9Yig4NTY5NykuYSxELkRlY29kZXJC''@;'; put 'put ''dWZmZXI9Yig5NzI5MCkudCxELkVuY29kZXJCdWZmZXI9Yig5NzI5MCkuZCxELk5vZGU9YigzNDMyMCl9LDM0MzIwOihjZSxKLGIpPT57dmFyIEQ9YigxNTA2NikuUmVwb3J0ZXIsXz1iKDE1MDY2KS5FbmNvZGVyQnVmZmVyLHA9YigxNTA2NikuRGVjb2RlckJ1ZmZlcixOPWIoMzkyMTApLHc9''@;'; put 'put ''WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwi''@;'; put 'put ''bnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxGPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQodyk7''@;'; put 'put ''ZnVuY3Rpb24gUihQLEwpe3ZhciBZPXt9O3RoaXMuX2Jhc2VTdGF0ZT1ZLFkuZW5jPVAsWS5wYXJlbnQ9THx8bnVsbCxZLmNoaWxkcmVuPW51bGwsWS50YWc9bnVsbCxZLmFyZ3M9bnVsbCxZLnJldmVyc2VBcmdzPW51bGwsWS5jaG9pY2U9bnVsbCxZLm9wdGlvbmFsPSExLFkuYW55PSExLFku''@;'; put 'put ''b2JqPSExLFkudXNlPW51bGwsWS51c2VEZWNvZGVyPW51bGwsWS5rZXk9bnVsbCxZLmRlZmF1bHQ9bnVsbCxZLmV4cGxpY2l0PW51bGwsWS5pbXBsaWNpdD1udWxsLFkuY29udGFpbnM9bnVsbCxZLnBhcmVudHx8KFkuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1jZS5leHBvcnRzPVI7dmFy''@;'; put 'put ''IGo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtSLnByb3Rv''@;'; put 'put ''dHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxZPXt9O2ouZm9yRWFjaChmdW5jdGlvbihXKXtZW1ddPUxbV119KTt2YXIgQj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihZLnBhcmVudCk7cmV0dXJuIEIuX2Jhc2VTdGF0ZT1ZLEJ9LFIucHJvdG90eXBlLl93cmFwPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlO0YuZm9yRWFjaChmdW5jdGlvbihZKXt0aGlzW1ldPWZ1bmN0aW9uKCl7dmFyIFc9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIEwuY2hpbGRyZW4ucHVzaChXKSxXW1ldLmFwcGx5KFcsYXJndW1lbnRzKX19LHRoaXMpfSxS''@;'; put 'put ''LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7TihudWxsPT09WS5wYXJlbnQpLEwuY2FsbCh0aGlzKSxZLmNoaWxkcmVuPVkuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKEIpe3JldHVybiBCLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyks''@;'; put 'put ''Ti5lcXVhbChZLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sUi5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oTCl7dmFyIFk9dGhpcy5fYmFzZVN0YXRlLEI9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB0''@;'; put 'put ''aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtMPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiEoVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09Qi5sZW5ndGgmJihOKG51bGw9PT1ZLmNoaWxkcmVuKSxZLmNoaWxkcmVuPUIsQi5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cu''@;'; put 'put ''X2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1MLmxlbmd0aCYmKE4obnVsbD09PVkuYXJncyksWS5hcmdzPUwsWS5yZXZlcnNlQXJncz1MLm1hcChmdW5jdGlvbihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fFcuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFc7dmFyIFo9''@;'; put 'put ''e307cmV0dXJuIE9iamVjdC5rZXlzKFcpLmZvckVhY2goZnVuY3Rpb24ocSl7cT09KDB8cSkmJihxfD0wKSxaW1dbcV1dPXF9KSxafSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVs''@;'; put 'put ''bCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihQ''@;'; put 'put ''KXtSLnByb3RvdHlwZVtQXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihQKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx3LmZvckVhY2goZnVuY3Rpb24oUCl7Ui5wcm90b3R5cGVbUF09ZnVuY3Rpb24oKXt2YXIgWT10aGlzLl9i''@;'; put 'put ''YXNlU3RhdGUsQj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBOKG51bGw9PT1ZLnRhZyksWS50YWc9UCx0aGlzLl91c2VBcmdzKEIpLHRoaXN9fSksUi5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEwpe04oTCk7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO3JldHVy''@;'; put 'put ''biBOKG51bGw9PT1ZLnVzZSksWS51c2U9TCx0aGlzfSxSLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sUi5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gTihu''@;'; put 'put ''dWxsPT09WS5kZWZhdWx0KSxZLmRlZmF1bHQ9TCxZLm9wdGlvbmFsPSEwLHRoaXN9LFIucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gTihudWxsPT09WS5leHBsaWNpdCYmbnVsbD09PVkuaW1wbGljaXQpLFkuZXhwbGljaXQ9TCx0''@;'; put 'put ''aGlzfSxSLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkuZXhwbGljaXQmJm51bGw9PT1ZLmltcGxpY2l0KSxZLmltcGxpY2l0PUwsdGhpc30sUi5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5f''@;'; put 'put ''YmFzZVN0YXRlLFk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTC5vYmo9ITAsMCE9PVkubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKFkpLHRoaXN9LFIucHJvdG90eXBlLmtleT1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVs''@;'; put 'put ''bD09PVkua2V5KSxZLmtleT1MLHRoaXN9LFIucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LFIucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIE4obnVsbD09PVkuY2hvaWNl''@;'; put 'put ''KSxZLmNob2ljZT1MLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoTCkubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBMW0JdfSkpLHRoaXN9LFIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEwpe3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gTihudWxsPT09WS51c2UpLFkuY29udGFp''@;'; put 'put ''bnM9TCx0aGlzfSxSLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKEwsWSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1CLnBhcmVudClyZXR1cm4gTC53cmFwUmVzdWx0KEIuY2hpbGRyZW5bMF0uX2RlY29kZShMLFkpKTt2YXIgdGUsVz1CLmRlZmF1bHQsWj0hMCxxPW51bGw7''@;'; put 'put ''aWYobnVsbCE9PUIua2V5JiYocT1MLmVudGVyS2V5KEIua2V5KSksQi5vcHRpb25hbCl7dmFyIFE9bnVsbDtpZihudWxsIT09Qi5leHBsaWNpdD9RPUIuZXhwbGljaXQ6bnVsbCE9PUIuaW1wbGljaXQ/UT1CLmltcGxpY2l0Om51bGwhPT1CLnRhZyYmKFE9Qi50YWcpLG51bGwhPT1RfHxCLmFu''@;'; put 'put ''eSl7aWYoWj10aGlzLl9wZWVrVGFnKEwsUSxCLmFueSksTC5pc0Vycm9yKFopKXJldHVybiBafWVsc2V7dmFyIFg9TC5zYXZlKCk7dHJ5e251bGw9PT1CLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKEIudGFnLEwsWSk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsWSksWj0hMH1jYXRjaHtaPSEx''@;'; put 'put ''fUwucmVzdG9yZShYKX19aWYoQi5vYmomJlomJih0ZT1MLmVudGVyT2JqZWN0KCkpLFope2lmKG51bGwhPT1CLmV4cGxpY2l0KXt2YXIgcmU9dGhpcy5fZGVjb2RlVGFnKEwsQi5leHBsaWNpdCk7aWYoTC5pc0Vycm9yKHJlKSlyZXR1cm4gcmU7TD1yZX12YXIgb2U9TC5vZmZzZXQ7aWYobnVs''@;'; put 'put ''bD09PUIudXNlJiZudWxsPT09Qi5jaG9pY2Upe0IuYW55JiYoWD1MLnNhdmUoKSk7dmFyIGdlPXRoaXMuX2RlY29kZVRhZyhMLG51bGwhPT1CLmltcGxpY2l0P0IuaW1wbGljaXQ6Qi50YWcsQi5hbnkpO2lmKEwuaXNFcnJvcihnZSkpcmV0dXJuIGdlO0IuYW55P1c9TC5yYXcoWCk6TD1nZX1p''@;'; put 'put ''ZihZJiZZLnRyYWNrJiZudWxsIT09Qi50YWcmJlkudHJhY2soTC5wYXRoKCksb2UsTC5sZW5ndGgsInRhZ2dlZCIpLFkmJlkudHJhY2smJm51bGwhPT1CLnRhZyYmWS50cmFjayhMLnBhdGgoKSxMLm9mZnNldCxMLmxlbmd0aCwiY29udGVudCIpLEIuYW55fHwoVz1udWxsPT09Qi5jaG9pY2U/''@;'; put 'put ''dGhpcy5fZGVjb2RlR2VuZXJpYyhCLnRhZyxMLFkpOnRoaXMuX2RlY29kZUNob2ljZShMLFkpKSxMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoIUIuYW55JiZudWxsPT09Qi5jaG9pY2UmJm51bGwhPT1CLmNoaWxkcmVuJiZCLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU2Upe1NlLl9kZWNv''@;'; put 'put ''ZGUoTCxZKX0pLEIuY29udGFpbnMmJigib2N0c3RyIj09PUIudGFnfHwiYml0c3RyIj09PUIudGFnKSl7dmFyIF9lPW5ldyBwKFcpO1c9dGhpcy5fZ2V0VXNlKEIuY29udGFpbnMsTC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoX2UsWSl9fXJldHVybiBCLm9iaiYmWiYmKFc9TC5sZWF2''@;'; put 'put ''ZU9iamVjdCh0ZSkpLG51bGw9PT1CLmtleXx8bnVsbD09PVcmJiEwIT09Wj9udWxsIT09cSYmTC5leGl0S2V5KHEpOkwubGVhdmVLZXkocSxCLmtleSxXKSxXfSxSLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihMLFksQil7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJz''@;'; put 'put ''ZXEiPT09THx8InNldCI9PT1MP251bGw6InNlcW9mIj09PUx8fCJzZXRvZiI9PT1MP3RoaXMuX2RlY29kZUxpc3QoWSxMLFcuYXJnc1swXSxCKTovc3RyJC8udGVzdChMKT90aGlzLl9kZWNvZGVTdHIoWSxMLEIpOiJvYmppZCI9PT1MJiZXLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoWSxXLmFy''@;'; put 'put ''Z3NbMF0sVy5hcmdzWzFdLEIpOiJvYmppZCI9PT1MP3RoaXMuX2RlY29kZU9iamlkKFksbnVsbCxudWxsLEIpOiJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUw/dGhpcy5fZGVjb2RlVGltZShZLEwsQik6Im51bGxfIj09PUw/dGhpcy5fZGVjb2RlTnVsbChZLEIpOiJib29sIj09PUw/dGhp''@;'; put 'put ''cy5fZGVjb2RlQm9vbChZLEIpOiJvYmpEZXNjIj09PUw/dGhpcy5fZGVjb2RlU3RyKFksTCxCKToiaW50Ij09PUx8fCJlbnVtIj09PUw/dGhpcy5fZGVjb2RlSW50KFksVy5hcmdzJiZXLmFyZ3NbMF0sQik6bnVsbCE9PVcudXNlP3RoaXMuX2dldFVzZShXLnVzZSxZLl9yZXBvcnRlclN0YXRl''@;'; put 'put ''Lm9iaikuX2RlY29kZShZLEIpOlkuZXJyb3IoInVua25vd24gdGFnOiAiK0wpfSxSLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9uKEwsWSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCLnVzZURlY29kZXI9dGhpcy5fdXNlKEwsWSksTihudWxsPT09Qi51c2VEZWNvZGVyLl9iYXNl''@;'; put 'put ''U3RhdGUucGFyZW50KSxCLnVzZURlY29kZXI9Qi51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sQi5pbXBsaWNpdCE9PUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoQi51c2VEZWNvZGVyPUIudXNlRGVjb2Rlci5jbG9uZSgpLEIudXNlRGVjb2Rlci5fYmFzZVN0''@;'; put 'put ''YXRlLmltcGxpY2l0PUIuaW1wbGljaXQpLEIudXNlRGVjb2Rlcn0sUi5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihMLFkpe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZSxXPW51bGwsWj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoQi5jaG9pY2UpLnNvbWUoZnVuY3Rpb24ocSl7dmFyIFE9''@;'; put 'put ''TC5zYXZlKCksWD1CLmNob2ljZVtxXTt0cnl7dmFyIHRlPVguX2RlY29kZShMLFkpO2lmKEwuaXNFcnJvcih0ZSkpcmV0dXJuITE7Vz17dHlwZTpxLHZhbHVlOnRlfSxaPSEwfWNhdGNoe3JldHVybiBMLnJlc3RvcmUoUSksITF9cmV0dXJuITB9LHRoaXMpLFo/VzpMLmVycm9yKCJDaG9pY2Ug''@;'; put 'put ''bm90IG1hdGNoZWQiKX0sUi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBfKEwsdGhpcy5yZXBvcnRlcil9LFIucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZh''@;'; put 'put ''dWx0fHxXLmRlZmF1bHQhPT1MKXt2YXIgWj10aGlzLl9lbmNvZGVWYWx1ZShMLFksQik7aWYodm9pZCAwIT09WiYmIXRoaXMuX3NraXBEZWZhdWx0KFosWSxCKSlyZXR1cm4gWn19LFIucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihMLFksQil7dmFyIFc9dGhpcy5fYmFzZVN0YXRl''@;'; put 'put ''O2lmKG51bGw9PT1XLnBhcmVudClyZXR1cm4gVy5jaGlsZHJlblswXS5fZW5jb2RlKEwsWXx8bmV3IEQpO3ZhciBYPW51bGw7aWYodGhpcy5yZXBvcnRlcj1ZLFcub3B0aW9uYWwmJnZvaWQgMD09PUwpe2lmKG51bGw9PT1XLmRlZmF1bHQpcmV0dXJuO0w9Vy5kZWZhdWx0fXZhciBaPW51bGws''@;'; put 'put ''cT0hMTtpZihXLmFueSlYPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7ZWxzZSBpZihXLmNob2ljZSlYPXRoaXMuX2VuY29kZUNob2ljZShMLFkpO2Vsc2UgaWYoVy5jb250YWlucylaPXRoaXMuX2dldFVzZShXLmNvbnRhaW5zLEIpLl9lbmNvZGUoTCxZKSxxPSEwO2Vsc2UgaWYoVy5j''@;'; put 'put ''aGlsZHJlbilaPVcuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKG9lKXtpZigibnVsbF8iPT09b2UuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIG9lLl9lbmNvZGUobnVsbCxZLEwpO2lmKG51bGw9PT1vZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gWS5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXki''@;'; put 'put ''KTt2YXIgZ2U9WS5lbnRlcktleShvZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBZLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9b2UuX2VuY29kZShMW29lLl9iYXNlU3RhdGUua2V5XSxZLEwpO3Jl''@;'; put 'put ''dHVybiBZLmxlYXZlS2V5KGdlKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2V9KSxaPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWik7ZWxzZSBpZigic2Vxb2YiPT09Vy50YWd8fCJzZXRvZiI9PT1XLnRhZyl7aWYoIVcuYXJnc3x8MSE9PVcuYXJncy5sZW5ndGgp''@;'; put 'put ''cmV0dXJuIFkuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitXLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIFkuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgUT10aGlzLmNsb25lKCk7US5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGws''@;'; put 'put ''Wj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEwpLl9lbmNvZGUob2UsWSl9LFEpKX1lbHNlIG51bGwhPT1XLnVzZT9YPXRoaXMuX2dldFVzZShXLnVzZSxCKS5fZW5jb2RlKEws''@;'; put 'put ''WSk6KFo9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFcudGFnLEwpLHE9ITApO2lmKCFXLmFueSYmbnVsbD09PVcuY2hvaWNlKXt2YXIgdGU9bnVsbCE9PVcuaW1wbGljaXQ/Vy5pbXBsaWNpdDpXLnRhZyxyZT1udWxsPT09Vy5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXRl''@;'; put 'put ''P251bGw9PT1XLnVzZSYmWS5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVcudXNlJiYoWD10aGlzLl9lbmNvZGVDb21wb3NpdGUodGUscSxyZSxaKSl9cmV0dXJuIG51bGwhPT1XLmV4cGxpY2l0JiYoWD10aGlzLl9lbmNvZGVDb21wb3NpdGUo''@;'; put 'put ''Vy5leHBsaWNpdCwhMSwiY29udGV4dCIsWCkpLFh9LFIucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxZKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsVz1CLmNob2ljZVtMLnR5cGVdO3JldHVybiBXfHxOKCExLEwudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5''@;'; put 'put ''KE9iamVjdC5rZXlzKEIuY2hvaWNlKSkpLFcuX2VuY29kZShMLnZhbHVlLFkpfSxSLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEwsWSl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KEwpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWSxMKTtpZigib2Jq''@;'; put 'put ''aWQiPT09TCYmQi5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChZLEIucmV2ZXJzZUFyZ3NbMF0sQi5hcmdzWzFdKTtpZigib2JqaWQiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWSxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUwpcmV0dXJuIHRo''@;'; put 'put ''aXMuX2VuY29kZVRpbWUoWSxMKTtpZigibnVsbF8iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09THx8ImVudW0iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KFksQi5hcmdzJiZCLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1MKXJldHVybiB0aGlzLl9l''@;'; put 'put ''bmNvZGVCb29sKFkpO2lmKCJvYmpEZXNjIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihZLEwpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK0wpfSxSLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bMC05IF0qJC8udGVzdChMKX0sUi5wcm90''@;'; put 'put ''b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChMKX19LDg1Njk3OihjZSxKLGIpPT57dmFyIEQ9Yig3MTk5Myk7ZnVuY3Rpb24gXyhOKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltd''@;'; put 'put ''LG9wdGlvbnM6Tnx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBwKE4sdyl7dGhpcy5wYXRoPU4sdGhpcy5yZXRocm93KHcpfUouYT1fLF8ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBwfSxfLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHc9''@;'; put 'put ''dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOncub2JqLHBhdGhMZW46dy5wYXRoLmxlbmd0aH19LF8ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odyl7dmFyIEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtGLm9iaj13Lm9iaixGLnBhdGg9Ri5wYXRoLnNsaWNlKDAsdy5wYXRoTGVuKX0s''@;'; put 'put ''Xy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHcpfSxfLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHcpe3ZhciBGPXRoaXMuX3JlcG9ydGVyU3RhdGU7Ri5wYXRoPUYucGF0aC5zbGljZSgwLHctMSl9LF8ucHJv''@;'; put 'put ''dG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHcsRixIKXt2YXIgUj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh3KSxudWxsIT09Ui5vYmomJihSLm9ialtGXT1IKX0sXy5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9p''@;'; put 'put ''bigiLyIpfSxfLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGUsRj13Lm9iajtyZXR1cm4gdy5vYmo9e30sRn0sXy5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24odyl7dmFyIEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxIPUYub2Jq''@;'; put 'put ''O3JldHVybiBGLm9iaj13LEh9LF8ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHcpe3ZhciBGLEg9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxSPXcgaW5zdGFuY2VvZiBwO2lmKEY9Uj93Om5ldyBwKEgucGF0aC5tYXAoZnVuY3Rpb24oail7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KGopKyJdIn0p''@;'; put 'put ''LmpvaW4oIiIpLHcubWVzc2FnZXx8dyx3LnN0YWNrKSwhSC5vcHRpb25zLnBhcnRpYWwpdGhyb3cgRjtyZXR1cm4gUnx8SC5lcnJvcnMucHVzaChGKSxGfSxfLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHcpe3ZhciBGPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIEYub3B0aW9u''@;'; put 'put ''cy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHcpP251bGw6dyxlcnJvcnM6Ri5lcnJvcnN9Ond9LEQocCxFcnJvcikscC5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih3KXtpZih0aGlzLm1lc3NhZ2U9dysiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0''@;'; put 'put ''dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxwKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goRil7dGhpcy5zdGFjaz1GLnN0YWNrfXJldHVybiB0aGlzfX0sMzYyODM6KGNlLEosYik9Pnt2YXIgRD1iKDQ3NzQw''@;'; put 'put ''KTtKLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sSi50YWdDbGFzc0J5TmFtZT1ELl9yZXZlcnNlKEoudGFnQ2xhc3MpLEoudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6''@;'; put 'put ''Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZp''@;'; put 'put ''ZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxKLnRhZ0J5TmFtZT1ELl9yZXZlcnNlKEoudGFnKX0sNDc3NDA6KGNl''@;'; put 'put ''LEosYik9Pnt2YXIgRD1KO0QuX3JldmVyc2U9ZnVuY3Rpb24ocCl7dmFyIE49e307cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9PXcmJih3fD0wKSxOW3Bbd11dPXd9KSxOfSxELmRlcj1iKDM2MjgzKX0sNTU5NDE6KGNlLEosYik9Pnt2YXIgRD1iKDcx''@;'; put 'put ''OTkzKSxfPWIoNDk2MDkpLHA9Xy5iYXNlLE49Xy5iaWdudW0sdz1fLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gRihQKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9UC5uYW1lLHRoaXMuZW50aXR5PVAsdGhpcy50cmVlPW5ldyBILHRoaXMudHJlZS5faW5pdChQLmJvZHkpfWZ1bmN0aW9uIEgo''@;'; put 'put ''UCl7cC5Ob2RlLmNhbGwodGhpcywiZGVyIixQKX1mdW5jdGlvbiBSKFAsTCl7dmFyIFk9UC5yZWFkVUludDgoTCk7aWYoUC5pc0Vycm9yKFkpKXJldHVybiBZO3ZhciBCPXcudGFnQ2xhc3NbWT4+Nl0sVz0hKDMyJlkpO2lmKDMxJn5ZKVkmPTMxO2Vsc2V7dmFyIFo9WTtmb3IoWT0wOyEoMTI4''@;'; put 'put ''Jn5aKTspe2lmKFo9UC5yZWFkVUludDgoTCksUC5pc0Vycm9yKFopKXJldHVybiBaO1k8PD03LFl8PTEyNyZafX1yZXR1cm57Y2xzOkIscHJpbWl0aXZlOlcsdGFnOlksdGFnU3RyOncudGFnW1ldfX1mdW5jdGlvbiBqKFAsTCxZKXt2YXIgQj1QLnJlYWRVSW50OChZKTtpZihQLmlzRXJyb3Io''@;'; put 'put ''QikpcmV0dXJuIEI7aWYoIUwmJjEyOD09PUIpcmV0dXJuIG51bGw7aWYoISgxMjgmQikpcmV0dXJuIEI7dmFyIFc9MTI3JkI7aWYoVz40KXJldHVybiBQLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7Qj0wO2Zvcih2YXIgWj0wO1o8VztaKyspe0I8PD04O3ZhciBxPVAucmVh''@;'; put 'put ''ZFVJbnQ4KFkpO2lmKFAuaXNFcnJvcihxKSlyZXR1cm4gcTtCfD1xfXJldHVybiBCfWNlLmV4cG9ydHM9RixGLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oTCxZKXtyZXR1cm4gTCBpbnN0YW5jZW9mIHAuRGVjb2RlckJ1ZmZlcnx8KEw9bmV3IHAuRGVjb2RlckJ1ZmZlcihMLFkpKSx0aGlz''@;'; put 'put ''LnRyZWUuX2RlY29kZShMLFkpfSxEKEgscC5Ob2RlKSxILnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihMLFksQil7aWYoTC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIFc9TC5zYXZlKCksWj1SKEwsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrWSsnIicpO3JldHVybiBMLmlzRXJyb3IoWik/''@;'; put 'put ''WjooTC5yZXN0b3JlKFcpLFoudGFnPT09WXx8Wi50YWdTdHI9PT1ZfHxaLnRhZ1N0cisib2YiPT09WXx8Qil9LEgucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oTCxZLEIpe3ZhciBXPVIoTCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrWSsnIicpO2lmKEwuaXNFcnJvcihXKSly''@;'; put 'put ''ZXR1cm4gVzt2YXIgWj1qKEwsVy5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mICInK1krJyInKTtpZihMLmlzRXJyb3IoWikpcmV0dXJuIFo7aWYoIUImJlcudGFnIT09WSYmVy50YWdTdHIhPT1ZJiZXLnRhZ1N0cisib2YiIT09WSlyZXR1cm4gTC5lcnJvcignRmFpbGVkIHRv''@;'; put 'put ''IG1hdGNoIHRhZzogIicrWSsnIicpO2lmKFcucHJpbWl0aXZlfHxudWxsIT09WilyZXR1cm4gTC5za2lwKFosJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytZKyciJyk7dmFyIHE9TC5zYXZlKCksUT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBs''@;'; put 'put ''ZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKFEpP1E6KFo9TC5vZmZzZXQtcS5vZmZzZXQsTC5yZXN0b3JlKHEpLEwuc2tpcChaLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrWSsnIicpKX0sSC5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlv''@;'; put 'put ''bihMLFkpe2Zvcig7Oyl7dmFyIEI9UihMLFkpO2lmKEwuaXNFcnJvcihCKSlyZXR1cm4gQjt2YXIgWixXPWooTCxCLnByaW1pdGl2ZSxZKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoWj1CLnByaW1pdGl2ZXx8bnVsbCE9PVc/TC5za2lwKFcpOnRoaXMuX3NraXBVbnRpbEVuZChMLFkp''@;'; put 'put ''LEwuaXNFcnJvcihaKSlyZXR1cm4gWjtpZigiZW5kIj09PUIudGFnU3RyKWJyZWFrfX0sSC5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oTCxZLEIsVyl7Zm9yKHZhciBaPVtdOyFMLmlzRW1wdHkoKTspe3ZhciBxPXRoaXMuX3BlZWtUYWcoTCwiZW5kIik7aWYoTC5pc0Vycm9yKHEp''@;'; put 'put ''KXJldHVybiBxO3ZhciBRPUIuZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9yKFEpJiZxKWJyZWFrO1oucHVzaChRKX1yZXR1cm4gWn0sSC5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbihMLFkpe2lmKCJiaXRzdHIiPT09WSl7dmFyIEI9TC5yZWFkVUludDgoKTtyZXR1cm4gTC5p''@;'; put 'put ''c0Vycm9yKEIpP0I6e3VudXNlZDpCLGRhdGE6TC5yYXcoKX19aWYoImJtcHN0ciI9PT1ZKXt2YXIgVz1MLnJhdygpO2lmKFcubGVuZ3RoJTI9PTEpcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7Zm9yKHZhciBaPSIiLHE9''@;'; put 'put ''MDtxPFcubGVuZ3RoLzI7cSsrKVorPVN0cmluZy5mcm9tQ2hhckNvZGUoVy5yZWFkVUludDE2QkUoMipxKSk7cmV0dXJuIFp9aWYoIm51bXN0ciI9PT1ZKXt2YXIgUT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihRKT9ROkwuZXJyb3IoIkRlY29kaW5n''@;'; put 'put ''IG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09WSlyZXR1cm4gTC5yYXcoKTtpZigib2JqRGVzYyI9PT1ZKXJldHVybiBMLnJhdygpO2lmKCJwcmludHN0ciI9PT1ZKXt2YXIgWD1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3Jl''@;'; put 'put ''dHVybiB0aGlzLl9pc1ByaW50c3RyKFgpP1g6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdChZKT9MLnJhdygpLnRvU3RyaW5nKCk6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5''@;'; put 'put ''cGU6ICIrWSsiIHVuc3VwcG9ydGVkIil9LEgucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihMLFksQil7Zm9yKHZhciBXLFo9W10scT0wOyFMLmlzRW1wdHkoKTspe3ZhciBRPUwucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JlEsMTI4JlF8fChaLnB1c2gocSkscT0wKX1pZigxMjgm''@;'; put 'put ''USYmWi5wdXNoKHEpLFc9Qj9aOltaWzBdLzQwfDAsWlswXSU0MF0uY29uY2F0KFouc2xpY2UoMSkpLFkpe3ZhciByZT1ZW1cuam9pbigiICIpXTt2b2lkIDA9PT1yZSYmKHJlPVlbVy5qb2luKCIuIildKSx2b2lkIDAhPT1yZSYmKFc9cmUpfXJldHVybiBXfSxILnByb3RvdHlwZS5fZGVjb2Rl''@;'; put 'put ''VGltZT1mdW5jdGlvbihMLFkpe3ZhciBCPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1ZKXZhciBXPTB8Qi5zbGljZSgwLDQpLFo9MHxCLnNsaWNlKDQsNikscT0wfEIuc2xpY2UoNiw4KSxRPTB8Qi5zbGljZSg4LDEwKSxYPTB8Qi5zbGljZSgxMCwxMiksdGU9MHxCLnNsaWNl''@;'; put 'put ''KDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PVkpcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nICIrWSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtXPTB8Qi5zbGljZSgwLDIpLFo9MHxCLnNsaWNlKDIsNCkscT0wfEIuc2xpY2UoNCw2KSxRPTB8Qi5zbGljZSg2LDgpLFg9MHxCLnNs''@;'; put 'put ''aWNlKDgsMTApLHRlPTB8Qi5zbGljZSgxMCwxMiksVz1XPDcwPzJlMytXOjE5MDArV31yZXR1cm4gRGF0ZS5VVEMoVyxaLTEscSxRLFgsdGUsMCl9LEgucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxILnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlv''@;'; put 'put ''bihMKXt2YXIgWT1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoWSk/WTowIT09WX0sSC5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLFkpe3ZhciBCPUwucmF3KCksVz1uZXcgTihCKTtyZXR1cm4gWSYmKFc9WVtXLnRvU3RyaW5nKDEwKV18fFcpLFd9LEgucHJvdG90eXBl''@;'; put 'put ''Ll91c2U9ZnVuY3Rpb24oTCxZKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChZKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDkxNTU4OihjZSxKLGIpPT57dmFyIEQ9SjtELmRlcj1iKDU1OTQxKSxELnBlbT1iKDU5MzE2KX0sNTkzMTY6KGNlLEosYik9Pnt2YXIgRD1i''@;'; put 'put ''KDcxOTkzKSxfPWIoODM4MzgpLkJ1ZmZlcixwPWIoNTU5NDEpO2Z1bmN0aW9uIE4odyl7cC5jYWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9RChOLHApLGNlLmV4cG9ydHM9TixOLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oRixIKXtmb3IodmFyIFI9Ri50b1N0cmluZygpLnNwbGl0KC9b''@;'; put 'put ''XHJcbl0rL2cpLGo9SC5sYWJlbC50b1VwcGVyQ2FzZSgpLFA9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLEw9LTEsWT0tMSxCPTA7QjxSLmxlbmd0aDtCKyspe3ZhciBXPVJbQl0ubWF0Y2goUCk7aWYobnVsbCE9PVcmJldbMl09PT1qKXtpZigtMSE9PUwpe2lmKCJFTkQiIT09''@;'; put 'put ''V1sxXSlicmVhaztZPUI7YnJlYWt9aWYoIkJFR0lOIiE9PVdbMV0pYnJlYWs7TD1CfX1pZigtMT09PUx8fC0xPT09WSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIraik7dmFyIFo9Ui5zbGljZShMKzEsWSkuam9pbigiIik7Wi5yZXBsYWNlKC9bXmEtejAt''@;'; put 'put ''OVwrXC89XSsvZ2ksIiIpO3ZhciBxPW5ldyBfKFosImJhc2U2NCIpO3JldHVybiBwLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLHEsSCl9fSw3MjE5MzooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89Yig4MzgzOCkuQnVmZmVyLHA9Yig0OTYwOSksTj1wLmJhc2Usdz1wLmNvbnN0YW50''@;'; put 'put ''cy5kZXI7ZnVuY3Rpb24gRihQKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9UC5uYW1lLHRoaXMuZW50aXR5PVAsdGhpcy50cmVlPW5ldyBILHRoaXMudHJlZS5faW5pdChQLmJvZHkpfWZ1bmN0aW9uIEgoUCl7Ti5Ob2RlLmNhbGwodGhpcywiZGVyIixQKX1mdW5jdGlvbiBSKFApe3JldHVy''@;'; put 'put ''biBQPDEwPyIwIitQOlB9Y2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLFkpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLFkpLmpvaW4oKX0sRChILE4uTm9kZSksSC5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLFksQixXKXt2YXIgWCxa''@;'; put 'put ''PWZ1bmN0aW9uIGooUCxMLFksQil7dmFyIFc7aWYoInNlcW9mIj09PVA/UD0ic2VxIjoic2V0b2YiPT09UCYmKFA9InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KFApKVc9dy50YWdCeU5hbWVbUF07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFB8fCgwfFApIT09UClyZXR1cm4g''@;'; put 'put ''Qi5lcnJvcigiVW5rbm93biB0YWc6ICIrUCk7Vz1QfXJldHVybiBXPj0zMT9CLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW1l8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsWSxCLHRoaXMucmVwb3J0ZXIp''@;'; put 'put ''O2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oWD1uZXcgXygyKSlbMF09WixYWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsV10pO2Zvcih2YXIgcT0xLFE9Vy5sZW5ndGg7UT49MjU2O1E+Pj04KXErKzsoWD1uZXcgXygyK3EpKVswXT1aLFhbMV09MTI4fHEsUT0xK3E7''@;'; put 'put ''Zm9yKHZhciB0ZT1XLmxlbmd0aDt0ZT4wO1EtLSx0ZT4+PTgpWFtRXT0yNTUmdGU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1gsV10pfSxILnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsWSl7aWYoImJpdHN0ciI9PT1ZKXJldHVybiB0aGlzLl9jcmVhdGVFbmNv''@;'; put 'put ''ZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09WSl7Zm9yKHZhciBCPW5ldyBfKDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylCLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIo''@;'; put 'put ''Qil9cmV0dXJuIm51bXN0ciI9PT1ZP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIi''@;'; put 'put ''PT09WT90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRz''@;'; put 'put ''LCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChZKXx8Im9iakRlc2MiPT09WT90aGlzLl9jcmVhdGVF''@;'; put 'put ''bmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1krIiB1bnN1cHBvcnRlZCIpfSxILnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxZLEIpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIVkpcmV0dXJuIHRoaXMu''@;'; put 'put ''cmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPVlbTF0uc3BsaXQoL1tcc1wu''@;'; put 'put ''XSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgp''@;'; put 'put ''IHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFCKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9''@;'; put 'put ''dmFyIFo9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgcT1MW1ddO2ZvcihaKys7cT49MTI4O3E+Pj03KVorK312YXIgUT1uZXcgXyhaKSxYPVEubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoUVtYLS1dPTEyNyYocT1MW1ddKTsocT4+PTcpPjA7KVFbWC0tXT0x''@;'; put 'put ''Mjh8MTI3JnE7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoUSl9LEgucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsWSl7dmFyIEIsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVhcigpKSxSKFcuZ2V0VVRDTW9udGgoKSsx''@;'; put 'put ''KSxSKFcuZ2V0VVRDRGF0ZSgpKSxSKFcuZ2V0VVRDSG91cnMoKSksUihXLmdldFVUQ01pbnV0ZXMoKSksUihXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1ZP0I9W1IoVy5nZXRGdWxsWWVhcigpJTEwMCksUihXLmdldFVUQ01vbnRoKCkrMSksUihXLmdldFVU''@;'; put 'put ''Q0RhdGUoKSksUihXLmdldFVUQ0hvdXJzKCkpLFIoVy5nZXRVVENNaW51dGVzKCkpLFIoVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitZKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihC''@;'; put 'put ''LCJvY3RzdHIiKX0sSC5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEgucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxZKXtpZigic3RyaW5nIj09dHlwZW9mIEwpe2lmKCFZKXJldHVybiB0aGlzLnJl''@;'; put 'put ''cG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIVkuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPVlb''@;'; put 'put ''TF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYhXy5pc0J1ZmZlcihMKSl7dmFyIEI9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JkJbMF0mJkIudW5zaGlmdCgwKSxMPW5ldyBfKEIpfWlmKF8uaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9PT1MLmxlbmd0aCYmVysrO3ZhciBxPW5ldyBf''@;'; put 'put ''KFcpO3JldHVybiBMLmNvcHkocSksMD09PUwubGVuZ3RoJiYocVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLExd''@;'; put 'put ''KTtXPTE7Zm9yKHZhciBaPUw7Wj49MjU2O1o+Pj04KVcrKztmb3IoWj0ocT1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1o+PTA7Wi0tKXFbWl09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZxWzBdJiZxLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgXyhxKSl9LEgucHJv''@;'; put 'put ''dG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxILnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwoWSkpLEwuX2dldEVuY29kZXIoImRlciIpLnRy''@;'; put 'put ''ZWV9LEgucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihMLFksQil7dmFyIFosVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgcT1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZmZXImJihXLmRlZmF1bHRCdWZmZXI9dGhpcy5f''@;'; put 'put ''ZW5jb2RlVmFsdWUoVy5kZWZhdWx0LFksQikuam9pbigpKSxxLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFo9MDtaPHEubGVuZ3RoO1orKylpZihxW1pdIT09Vy5kZWZhdWx0QnVmZmVyW1pdKXJldHVybiExO3JldHVybiEwfX0sMjI3MTQ6KGNlLEosYik9''@;'; put 'put ''Pnt2YXIgRD1KO0QuZGVyPWIoNzIxOTMpLEQucGVtPWIoMjQ4MTYpfSwyNDgxNjooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89Yig3MjE5Myk7ZnVuY3Rpb24gcChOKXtfLmNhbGwodGhpcyxOKSx0aGlzLmVuYz0icGVtIn1EKHAsXyksY2UuZXhwb3J0cz1wLHAucHJvdG90eXBlLmVuY29k''@;'; put 'put ''ZT1mdW5jdGlvbih3LEYpe2Zvcih2YXIgUj1fLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSxqPVsiLS0tLS1CRUdJTiAiK0YubGFiZWwrIi0tLS0tIl0sUD0wO1A8Ui5sZW5ndGg7UCs9NjQpai5wdXNoKFIuc2xpY2UoUCxQKzY0KSk7cmV0dXJuIGou''@;'; put 'put ''cHVzaCgiLS0tLS1FTkQgIitGLmxhYmVsKyItLS0tLSIpLGouam9pbigiXG4iKX19LDk2ODY3OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5j''@;'; put 'put ''dGlvbiBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmplY3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9dzpfLkJOPXcs''@;'; put 'put ''dy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzg5ODIpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcw''@;'; put 'put ''P3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgseSksVj1nO1Y8VDtWKysp''@;'; put 'put ''e3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1UtNDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNp''@;'; put 'put ''emU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50''@;'; put 'put ''b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHks''@;'; put 'put ''eCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYz''@;'; put 'put ''JmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5''@;'; put 'put ''LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRo''@;'; put 'put ''aXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDLTFdPDw4''@;'; put 'put ''fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MrMV08PDh8Z1tD''@;'; put 'put ''KzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5s''@;'; put 'put ''ZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9UihnLHksQyk8PFQsdGhpcy53''@;'; put 'put ''b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09''@;'; put 'put ''MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7''@;'; put 'put ''Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYtVSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PVUpe3ZhciBh''@;'; put 'put ''ZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29y''@;'; put 'put ''ZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0''@;'; put 'put ''NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4''@;'; put 'put ''ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4PXoubGVuZ3RoK2cubGVu''@;'; put 'put ''Z3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWlu''@;'; put 'put ''KG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEpO2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29yZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/''@;'; put 'put ''eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxlbmd0aDtWKyspe3ZhciBV''@;'; put 'put ''PXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0pLHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJp''@;'; put 'put ''bmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlz''@;'; put 'put ''WmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRo''@;'; put 'put ''aXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5w''@;'; put 'put ''cm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxl''@;'; put 'put ''bmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVttXT1F''@;'; put 'put ''O2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96''@;'; put 'put ''ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsrLHh9LHcucHJvdG90eXBl''@;'; put 'put ''LmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFy''@;'; put 'put ''IGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90''@;'; put 'put ''bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsr''@;'; put 'put ''KXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3Ro''@;'; put 'put ''LHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''LmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53''@;'; put 'put ''b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlz''@;'; put 'put ''LndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlh''@;'; put 'put ''ZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4''@;'; put 'put ''ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNbVl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUm''@;'; put 'put ''JjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgwfFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYmVTxDLmxlbmd0aDtVKysp''@;'; put 'put ''Vj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5n''@;'; put 'put ''dGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLFY9eC53b3Jk''@;'; put 'put ''cyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEz''@;'; put 'put ''LEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0wfENbN10seXQ9ODE5MSZsbixTdD1sbj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0w''@;'; put 'put ''fFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxUWzVd''@;'; put 'put ''LFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9Zy5u''@;'; put 'put ''ZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oVSsoRT1NYXRoLmltdWwobmUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0KSkrTWF0aC5pbXVsKGxlLFJ0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyhtPj4+MTMpfDApKyh1YT4+''@;'; put 'put ''PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpO3ZhciBFaT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDA7dmFyIHZyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxobil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEJlLFJ0KSxtPShtPU1hdGguaW11bChCZSxQdCkpK01hdGguaW11bChBZSxS''@;'; put 'put ''dCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwO3ZhciBXbj0oVSsoRT1FK01hdGguaW11bChuZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwobGUsV3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUs''@;'; put 'put ''QXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoQmUsUXQpfDAsbT0obT1tK01hdGguaW11bChC''@;'; put 'put ''ZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFd0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciAkaT0oVSsoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwobGUsc3QpfDApKTw8''@;'; put 'put ''MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxSdCksbT0obT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsUnQpfDAsQT1NYXRoLmltdWwoa2UsUHQpLEU9RStNYXRoLmltdWwo''@;'; put 'put ''UmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChCZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGguaW11bChBZSxm''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoUWUsVXQpfDA7dmFyIGVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxUdCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''a2UsUXQpfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoQmUsV3QpfDAsbT0obT1tK01hdGguaW11bChC''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHh0KXwwKStNYXRoLmltdWwobGUsaHQpfDApKTw8''@;'; put 'put ''MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoU3QsUnQpfDAsQT1NYXRoLmltdWwoU3QsUHQpLEU9RStNYXRoLmltdWwo''@;'; put 'put ''bnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChEZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxm''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoQmUsc3QpfDAsbT0obT1tK01hdGguaW11bChCZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwO3ZhciBWaT0oVSsoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwobGUscm4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUs''@;'; put 'put ''enQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5''@;'; put 'put ''dCxzbil8MCkrTWF0aC5pbXVsKFN0LFF0KXwwLEE9QStNYXRoLmltdWwoU3Qsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0aC5pbXVsKERlLFd0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsVXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChCZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDA7dmFyIE5pPShVKyhFPUUrTWF0aC5pbXVsKG5lLHVuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSx1bil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFJ0KSxtPShtPU1hdGguaW11bChOZSxQdCkpK01hdGguaW11bCh1dCxS''@;'; put 'put ''dCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDAp''@;'; put 'put ''K01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChEZSxzdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKERlLFV0KXwwKStNYXRoLmltdWwoa2Usc3QpfDAsQT1BK01hdGguaW11bChrZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoQmUsaHQpfDAsbT0obT1tK01hdGguaW11bChCZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01hdGguaW11bCh2''@;'; put 'put ''ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHVuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChRZSx1bil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBEYT0oVSsoRT1FK01hdGguaW11bChuZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LGVuKXwwKStNYXRoLmltdWwobGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxRdCksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoU3QsV3QpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChEZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsdW4pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLHVuKXwwLEE9QStNYXRoLmltdWwodmUsZm4pfDA7''@;'; put 'put ''dmFyIExyPShVKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKE5lLGhuKSxtPShtPU1hdGguaW11bChOZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01hdGguaW11bCgk''@;'; put 'put ''ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKEplLFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDAsRT1FK01hdGguaW11bChEZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHh0KXwwKStNYXRoLmltdWwoa2UsaHQpfDAsQT1BK01hdGguaW11bChrZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoUmUsenQp''@;'; put 'put ''fDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoQmUsdW4pfDAsbT0obT1tK01hdGguaW11bChCZSxmbil8MCkrTWF0aC5pbXVsKEFlLHVuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFdpPShVKyhFPUUrTWF0aC5pbXVsKE1l''@;'; put 'put ''LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFd0KSxtPShtPU1h''@;'; put 'put ''dGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdl''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChEZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSx1bil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oVSsoRT1FK01hdGguaW11bChCZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEJlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhwYT4+''@;'; put 'put ''PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxzdCksbT0obT1NYXRoLmltdWwoTmUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoU3QsaHQpfDAsQT1BK01hdGguaW11bChTdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmltdWwobnQsenQp''@;'; put 'put ''fDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsdW4pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKGtlLHVuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIFFuPShVKyhFPUUrTWF0aC5pbXVsKFJl''@;'; put 'put ''LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFdlKSxtPShtPU1h''@;'; put 'put ''dGguaW11bChOZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwobnQsdW4pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLHVuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7''@;'; put 'put ''dmFyIGxhPShVKyhFPUUrTWF0aC5pbXVsKERlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01hdGguaW11bCgk''@;'; put 'put ''ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChTdCx1bil8MCxBPUErTWF0aC5pbXVsKFN0LGZuKXwwO3ZhciBiYT0oVSsoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG50''@;'; put 'put ''LGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxybiksbT0obT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmltdWwodXQscm4pfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsdW4pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLHVuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShVKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoeXQsZW4pfDApK01hdGguaW11bChTdCxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChTdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHVuKSxtPShtPU1hdGguaW11bChOZSxmbikpK01hdGguaW11bCh1dCx1''@;'; put 'put ''bil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShVKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oVSsoRT1NYXRoLmltdWwoTmUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEzKXwwKSsodGk+''@;'; put 'put ''Pj4yNil8MCx0aSY9NjcxMDg4NjMsVlswXT11YSxWWzFdPUVpLFZbMl09dnIsVlszXT1XbixWWzRdPSRpLFZbNV09ZWksVls2XT1RcixWWzddPVZpLFZbOF09TmksVls5XT1EYSxWWzEwXT1McixWWzExXT1XaSxWWzEyXT1wYSxWWzEzXT1RbixWWzE0XT1sYSxWWzE1XT1iYSxWWzE2XT1MYSxW''@;'; put 'put ''WzE3XT1GYSxWWzE4XT10aSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBYKS5tdWxwKHosZyx5KX1mdW5jdGlvbiBYKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpDPDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2''@;'; put 'put ''ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsxKTttPD1FO20rKyl7dmFy''@;'; put 'put ''IGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9NjcxMDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1WLFY9Q31yZXR1cm4gMCE9''@;'; put 'put ''PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6USh0aGlzLGcseSkseH0sWC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109''@;'; put 'put ''dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxYLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sWC5wcm90b3R5cGUucGVybXV0''@;'; put 'put ''ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1UrKylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxYLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBVPTE7VTxUO1U8PD0xKWZv''@;'; put 'put ''cih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLFFlPUNbYWUrd2VdLG90PXhbYWUrd2UrVV0sTWU9Q1thZSt3ZStV''@;'; put 'put ''XSx2ZT1uZSpvdC1sZSpNZTtNZT1uZSpNZStsZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPVFlK01lLHhbYWUrd2UrVV09VWUtb3QsQ1thZSt3ZStVXT1RZS1NZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LFgucHJvdG90eXBlLmd1ZXNzTGVu''@;'; put 'put ''MTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxYLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2''@;'; put 'put ''YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxYLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMr''@;'; put 'put ''MV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxYLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhbMipWXT04MTkxJihUKz0w''@;'; put 'put ''fGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LFgucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJu''@;'; put 'put ''IHl9LFgucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcg''@;'; put 'put ''QXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxsZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShVLFYsRSxtLEMs''@;'; put 'put ''VCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUsVixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlv''@;'; put 'put ''bihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5s''@;'; put 'put ''ZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZh''@;'; put 'put ''ciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jk''@;'; put 'put ''c1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsr''@;'; put 'put ''KXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3Io''@;'; put 'put ''dmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYz''@;'; put 'put ''Pj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMubGVuZ3RoKysp''@;'; put 'put ''fWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4oKGctVCkvMjYs''@;'; put 'put ''dGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9yKHRoaXMubGVu''@;'; put 'put ''Z3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jk''@;'; put 'put ''c1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1''@;'; put 'put ''bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihn''@;'; put 'put ''KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9''@;'; put 'put ''ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhp''@;'; put 'put ''cy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6''@;'; put 'put ''KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4''@;'; put 'put ''NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcs''@;'; put 'put ''MT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNb''@;'; put 'put ''eSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gp''@;'; put 'put ''O3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtWPSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0aGlzLmxlbmd0''@;'; put 'put ''aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNbVF0pK1UpPj4y''@;'; put 'put ''Nix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2Nv''@;'; put 'put ''dW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZh''@;'; put 'put ''ciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQqKDB8Qy53b3Jk''@;'; put 'put ''c1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsbGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJv''@;'; put 'put ''KCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAo''@;'; put 'put ''IWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVn''@;'; put 'put ''KCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRoaXMubmVnYXRp''@;'; put 'put ''dmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3''@;'; put 'put ''IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcg''@;'; put 'put ''dyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1v''@;'; put 'put ''ZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHku''@;'; put 'put ''ZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1cm4gVjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3Ao''@;'; put 'put ''Zzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHco''@;'; put 'put ''MSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRz''@;'; put 'put ''WzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4LndvcmRzWzBdJndl''@;'; put 'put ''KSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHguaXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0pLFUuaXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoViksVC5pc3Vi''@;'; put 'put ''KFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkpfXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9''@;'; put 'put ''PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4wKWZvcih5Lml1''@;'; put 'put ''c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNocm4oMSk7eS5j''@;'; put 'put ''bXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJz''@;'; put 'put ''KCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zv''@;'; put 'put ''cig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14LHg9Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0p''@;'; put 'put ''fSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhp''@;'; put 'put ''cy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhpcy53b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jk''@;'; put 'put ''c1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYh''@;'; put 'put ''eSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8t''@;'; put 'put ''MToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRo''@;'; put 'put ''aXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgt''@;'; put 'put ''MTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0o''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gcmUoeixnKXt0''@;'; put 'put ''aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIG9lKCl7cmUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe3JlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9''@;'; put 'put ''ZnVuY3Rpb24gX2UoKXtyZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7cmUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhp''@;'; put 'put ''cy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHope1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0''@;'; put 'put ''KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhp''@;'; put 'put ''cy5yLnN1Yih0aGlzLm1pbnYpfXJlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxyZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhp''@;'; put 'put ''cy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3ku''@;'; put 'put ''aXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0scmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LE4o''@;'; put 'put ''b2UscmUpLG9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lk''@;'; put 'put ''KGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcubGVuZ3RoLT0w''@;'; put 'put ''PT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sb2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29y''@;'; put 'put ''ZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxyZSksTihfZSxyZSksTihUZSxyZSksVGUucHJv''@;'; put 'put ''dG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5f''@;'; put 'put ''cHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgb2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''a25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVbZ109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5j''@;'; put 'put ''bG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcu''@;'; put 'put ''c3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sU2UucHJv''@;'; put 'put ''dG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJu''@;'; put 'put ''IHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNo''@;'; put 'put ''cm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJQWRkKFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5w''@;'; put 'put ''b3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFyIHdlPW5lLFVlPTA7MCE9PXdlLmNtcChWKTtVZSsrKXdlPXdlLnJlZFNxcigpO3AoVWU8bGUpO3ZhciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1VZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFlLnJlZFNxcigp''@;'; put 'put ''LG5lPW5lLnJlZE11bChBKSxsZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LFNlLnBy''@;'; put 'put ''b3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9''@;'; put 'put ''MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBu''@;'; put 'put ''ZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSksMCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihWPXRoaXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyB6ZShnKX0s''@;'; put 'put ''Tih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJl''@;'; put 'put ''ZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1m''@;'; put 'put ''dW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMp''@;'; put 'put ''Lml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcu''@;'; put 'put ''X2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDU1MTg4OihjZSxKKT0+eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1''@;'; put 'put ''dnd4eXowMTIzNDU2Nzg5Ky8iLEQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxfPTA7Xzw2NDtfKyspRFtiLmNoYXJDb2RlQXQoXyldPV87Si5sPWZ1bmN0aW9uKHApe3ZhciB3LE49bmV3IFVpbnQ4QXJyYXkocCksRj1OLmxlbmd0aCxIPSIiO2Zvcih3PTA7dzxGO3crPTMpSCs9YltOW3ddPj4yXSxI''@;'; put 'put ''Kz1iWygzJk5bd10pPDw0fE5bdysxXT4+NF0sSCs9YlsoMTUmTlt3KzFdKTw8MnxOW3crMl0+PjZdLEgrPWJbNjMmTlt3KzJdXTtyZXR1cm4gRiUzPT0yP0g9SC5zdWJzdHJpbmcoMCxILmxlbmd0aC0xKSsiPSI6RiUzPT0xJiYoSD1ILnN1YnN0cmluZygwLEgubGVuZ3RoLTIpKyI9PSIpLEh9''@;'; put 'put ''LEouRD1mdW5jdGlvbihwKXt2YXIgRixSLGosUCxMLE49Ljc1KnAubGVuZ3RoLHc9cC5sZW5ndGgsSD0wOyI9Ij09PXBbcC5sZW5ndGgtMV0mJihOLS0sIj0iPT09cFtwLmxlbmd0aC0yXSYmTi0tKTt2YXIgWT1uZXcgQXJyYXlCdWZmZXIoTiksQj1uZXcgVWludDhBcnJheShZKTtmb3IoRj0w''@;'; put 'put ''O0Y8dztGKz00KVI9RFtwLmNoYXJDb2RlQXQoRildLGo9RFtwLmNoYXJDb2RlQXQoRisxKV0sUD1EW3AuY2hhckNvZGVBdChGKzIpXSxMPURbcC5jaGFyQ29kZUF0KEYrMyldLEJbSCsrXT1SPDwyfGo+PjQsQltIKytdPSgxNSZqKTw8NHxQPj4yLEJbSCsrXT0oMyZQKTw8Nnw2MyZMO3JldHVy''@;'; put 'put ''biBZfX0oKX0sMTM5ODE6KGNlLEopPT57InVzZSBzdHJpY3QiO0ouYnl0ZUxlbmd0aD1mdW5jdGlvbiBIKEIpe3ZhciBXPUYoQikscT1XWzFdO3JldHVybiAzKihXWzBdK3EpLzQtcX0sSi50b0J5dGVBcnJheT1mdW5jdGlvbiBqKEIpe3ZhciBXLG9lLFo9RihCKSxxPVpbMF0sUT1aWzFdLFg9''@;'; put 'put ''bmV3IF8oZnVuY3Rpb24gUihCLFcsWil7cmV0dXJuIDMqKFcrWikvNC1afSgwLHEsUSkpLHRlPTAscmU9UT4wP3EtNDpxO2ZvcihvZT0wO29lPHJlO29lKz00KVc9RFtCLmNoYXJDb2RlQXQob2UpXTw8MTh8RFtCLmNoYXJDb2RlQXQob2UrMSldPDwxMnxEW0IuY2hhckNvZGVBdChvZSsyKV08''@;'; put 'put ''PDZ8RFtCLmNoYXJDb2RlQXQob2UrMyldLFhbdGUrK109Vz4+MTYmMjU1LFhbdGUrK109Vz4+OCYyNTUsWFt0ZSsrXT0yNTUmVztyZXR1cm4gMj09PVEmJihXPURbQi5jaGFyQ29kZUF0KG9lKV08PDJ8RFtCLmNoYXJDb2RlQXQob2UrMSldPj40LFhbdGUrK109MjU1JlcpLDE9PT1RJiYoVz1E''@;'; put 'put ''W0IuY2hhckNvZGVBdChvZSldPDwxMHxEW0IuY2hhckNvZGVBdChvZSsxKV08PDR8RFtCLmNoYXJDb2RlQXQob2UrMildPj4yLFhbdGUrK109Vz4+OCYyNTUsWFt0ZSsrXT0yNTUmVyksWH0sSi5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIFkoQil7Zm9yKHZhciBXLFo9Qi5sZW5ndGgscT1aJTMs''@;'; put 'put ''UT1bXSxYPTE2MzgzLHRlPTAscmU9Wi1xO3RlPHJlO3RlKz1YKVEucHVzaChMKEIsdGUsdGUrWD5yZT9yZTp0ZStYKSk7cmV0dXJuIDE9PT1xP1EucHVzaChiWyhXPUJbWi0xXSk+PjJdK2JbVzw8NCY2M10rIj09Iik6Mj09PXEmJlEucHVzaChiWyhXPShCW1otMl08PDgpK0JbWi0xXSk+PjEw''@;'; put 'put ''XStiW1c+PjQmNjNdK2JbVzw8MiY2M10rIj0iKSxRLmpvaW4oIiIpfTtmb3IodmFyIGI9W10sRD1bXSxfPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LHA9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5''@;'; put 'put ''Ky8iLE49MDtOPDY0OysrTiliW05dPXBbTl0sRFtwLmNoYXJDb2RlQXQoTildPU47ZnVuY3Rpb24gRihCKXt2YXIgVz1CLmxlbmd0aDtpZihXJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgWj1CLmluZGV4''@;'; put 'put ''T2YoIj0iKTtyZXR1cm4tMT09PVomJihaPVcpLFtaLFo9PT1XPzA6NC1aJTRdfWZ1bmN0aW9uIFAoQil7cmV0dXJuIGJbQj4+MTgmNjNdK2JbQj4+MTImNjNdK2JbQj4+NiY2M10rYls2MyZCXX1mdW5jdGlvbiBMKEIsVyxaKXtmb3IodmFyIFE9W10sWD1XO1g8WjtYKz0zKVEucHVzaChQKChC''@;'; put 'put ''W1hdPDwxNiYxNjcxMTY4MCkrKEJbWCsxXTw8OCY2NTI4MCkrKDI1NSZCW1grMl0pKSk7cmV0dXJuIFEuam9pbigiIil9RFs0NV09NjIsRFs5NV09NjN9LDkxNzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihELF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHgsQyl7aWYoIXgpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gTih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7''@;'; put 'put ''aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgRjsi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIEQ/RC5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtGPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDQ3NzkwKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeCxDKXt2YXIg''@;'; put 'put ''VD14LmNoYXJDb2RlQXQoQyk7cmV0dXJuIFQ+PTQ4JiZUPD01Nz9ULTQ4OlQ+PTY1JiZUPD03MD9ULTU1OlQ+PTk3JiZUPD0xMDI/VC04Nzp2b2lkIHAoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIreCl9ZnVuY3Rpb24gUih4LEMsVCl7dmFyIFY9SCh4LFQpO3JldHVybiBULTE+PUMmJihW''@;'; put 'put ''fD1IKHgsVC0xKTw8NCksVn1mdW5jdGlvbiBqKHgsQyxULFYpe2Zvcih2YXIgVT0wLEU9MCxtPU1hdGgubWluKHgubGVuZ3RoLFQpLEE9QztBPG07QSsrKXt2YXIgYWU9eC5jaGFyQ29kZUF0KEEpLTQ4O1UqPVYsRT1hZT49NDk/YWUtNDkrMTA6YWU+PTE3P2FlLTE3KzEwOmFlLHAoYWU+PTAm''@;'; put 'put ''JkU8ViwiSW52YWxpZCBjaGFyYWN0ZXIiKSxVKz1FfXJldHVybiBVfWZ1bmN0aW9uIFAoeCxDKXt4LndvcmRzPUMud29yZHMseC5sZW5ndGg9Qy5sZW5ndGgseC5uZWdhdGl2ZT1DLm5lZ2F0aXZlLHgucmVkPUMucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihDKXtyZXR1cm4gQyBpbnN0YW5jZW9m''@;'; put 'put ''IHd8fG51bGwhPT1DJiYib2JqZWN0Ij09dHlwZW9mIEMmJkMuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KEMud29yZHMpfSx3Lm1heD1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKT4wP0M6VH0sdy5taW49ZnVuY3Rpb24oQyxUKXtyZXR1cm4g''@;'; put 'put ''Qy5jbXAoVCk8MD9DOlR9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEMsVCxWKXtpZigibnVtYmVyIj09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoQyxULFYpO2lmKCJvYmplY3QiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdEFycmF5KEMsVCxWKTsiaGV4Ij09PVQm''@;'; put 'put ''JihUPTE2KSxwKFQ9PT0oMHxUKSYmVD49MiYmVDw9MzYpO3ZhciBVPTA7Ii0iPT09KEM9Qy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihVKyssdGhpcy5uZWdhdGl2ZT0xKSxVPEMubGVuZ3RoJiYoMTY9PT1UP3RoaXMuX3BhcnNlSGV4KEMsVSxWKToodGhpcy5fcGFyc2VC''@;'; put 'put ''YXNlKEMsVCxVKSwibGUiPT09ViYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsVikpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oQyxULFYpe0M8MCYmKHRoaXMubmVnYXRpdmU9MSxDPS1DKSxDPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDXSx0''@;'; put 'put ''aGlzLmxlbmd0aD0xKTpDPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoQzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhp''@;'; put 'put ''cy5sZW5ndGg9MyksImxlIj09PVYmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULFYpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKEMsVCxWKXtpZihwKCJudW1iZXIiPT10eXBlb2YgQy5sZW5ndGgpLEMubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0''@;'; put 'put ''aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKEMubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPTA7dmFyIEUsbSxBPTA7aWYoImJlIj09PVYpZm9yKFU9Qy5s''@;'; put 'put ''ZW5ndGgtMSxFPTA7VT49MDtVLT0zKXRoaXMud29yZHNbRV18PShtPUNbVV18Q1tVLTFdPDw4fENbVS0yXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7ZWxzZSBpZigibGUiPT09Vilmb3IoVT0wLEU9''@;'; put 'put ''MDtVPEMubGVuZ3RoO1UrPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tVXXxDW1UrMV08PDh8Q1tVKzJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKEMsVCxWKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKEMubGVuZ3RoLVQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFU9MDtVPHRoaXMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPTA7dmFyIEEsRT0wLG09MDtpZigi''@;'; put 'put ''YmUiPT09Vilmb3IoVT1DLmxlbmd0aC0xO1U+PVQ7VS09MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODtlbHNlIGZvcihVPShDLmxlbmd0aC1UKSUyPT0wP1QrMTpUO1U8Qy5sZW5ndGg7''@;'; put 'put ''VSs9MilBPVIoQyxULFUpPDxFLHRoaXMud29yZHNbbV18PTY3MTA4ODYzJkEsRT49MTg/KEUtPTE4LHRoaXMud29yZHNbbSs9MV18PUE+Pj4yNik6RSs9ODt0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKEMsVCxWKXt0aGlzLndvcmRzPVswXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0xO2Zvcih2YXIgVT0wLEU9MTtFPD02NzEwODg2MztFKj1UKVUrKztVLS0sRT1FL1R8MDtmb3IodmFyIG09Qy5sZW5ndGgtVixBPW0lVSxhZT1NYXRoLm1pbihtLG0tQSkrVixuZT0wLGxlPVY7bGU8YWU7bGUrPVUpbmU9aihDLGxlLGxlK1UsVCksdGhpcy5pbXVsbihFKSx0aGlzLndv''@;'; put 'put ''cmRzWzBdK25lPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKTtpZigwIT09QSl7dmFyIHdlPTE7Zm9yKG5lPWooQyxsZSxDLmxlbmd0aCxUKSxsZT0wO2xlPEE7bGUrKyl3ZSo9VDt0aGlzLmltdWxuKHdlKSx0aGlzLndvcmRzWzBdK25lPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPW5lOnRoaXMuX2lhZGRuKG5lKX10aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKEMpe0Mud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylDLndvcmRzW1RdPXRoaXMud29yZHNbVF07Qy5sZW5n''@;'; put 'put ''dGg9dGhpcy5sZW5ndGgsQy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLEMucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihDKXtQKEMsdGhpcyl9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShDKSxD''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8QzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMu''@;'; put 'put ''bGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwi''@;'; put 'put ''dSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXt3LnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1MfWNhdGNoe3cucHJvdG90eXBlLmluc3BlY3Q9TH1lbHNlIHcucHJvdG90eXBlLmluc3BlY3Q9TDtmdW5jdGlvbiBMKCl7cmV0''@;'; put 'put ''dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIFk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sQj1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcs''@;'; put 'put ''Nyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxXPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1''@;'; put 'put ''Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMs''@;'; put 'put ''NDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFEoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBWPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9VixWPVYtMXwwO3ZhciBVPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPVUqRSxh''@;'; put 'put ''ZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxWO25lKyspe2Zvcih2YXIgbGU9YWU+Pj4yNix3ZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxRZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO1FlPD1VZTtRZSsrKWxl''@;'; put 'put ''Kz0obT0oVT0wfHgud29yZHNbbmUtUWV8MF0pKihFPTB8Qy53b3Jkc1tRZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1tuZV09MHx3ZSxhZT0wfGxlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUu''@;'; put 'put ''dG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgVjtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtWPSIiO2Zvcih2YXIgVT0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxVfEUpKS50b1N0cmluZygx''@;'; put 'put ''Nik7RT1BPj4+MjQtVSYxNjc3NzIxNSwoVSs9Mik+PTI2JiYoVS09MjYsbS0tKSxWPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9ZWzYtYWUubGVuZ3RoXSthZStWOmFlK1Z9Zm9yKDAhPT1FJiYoVj1FLnRvU3RyaW5nKDE2KStWKTtWLmxlbmd0aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmKFY9Ii0iK1YpLFZ9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPUJbQ10sbGU9V1tDXTtWPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5lZ2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFVlPXdlLm1vZHJuKGxlKS50b1N0cmluZyhDKTtW''@;'; put 'put ''PSh3ZT13ZS5pZGl2bihsZSkpLmlzWmVybygpP1VlK1Y6WVtuZS1VZS5sZW5ndGhdK1VlK1Z9Zm9yKHRoaXMuaXNaZXJvKCkmJihWPSIwIitWKTtWLmxlbmd0aCVUIT0wOylWPSIwIitWO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFY9Ii0iK1YpLFZ9cCghMSwiQmFzZSBzaG91bGQgYmUg''@;'; put 'put ''YmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5''@;'; put 'put ''OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LnRvU3RyaW5nKDE2LDIpfSxGJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShGLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90''@;'; put 'put ''b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULFYpe3RoaXMuX3N0cmlwKCk7dmFyIFU9dGhpcy5ieXRlTGVuZ3RoKCksRT1WfHxNYXRoLm1heCgxLFUpO3AoVTw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVu''@;'; put 'put ''Z3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0sVSksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtl''@;'; put 'put ''TEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIFY9MCxVPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxVO0NbVisrXT0yNTUmQSxWPEMubGVuZ3RoJiYoQ1tWKytdPUE+PjgmMjU1KSxWPEMubGVuZ3RoJiYoQ1tWKytdPUE+PjE2JjI1NSksNj09PW0/''@;'; put 'put ''KFY8Qy5sZW5ndGgmJihDW1YrK109QT4+MjQmMjU1KSxVPTAsbT0wKTooVT1BPj4+MjQsbSs9Mil9aWYoVjxDLmxlbmd0aClmb3IoQ1tWKytdPVU7VjxDLmxlbmd0aDspQ1tWKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBWPUMubGVuZ3Ro''@;'; put 'put ''LTEsVT0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18VTtDW1YtLV09MjU1JkEsVj49MCYmKENbVi0tXT1BPj44JjI1NSksVj49MCYmKENbVi0tXT1BPj4xNiYyNTUpLDY9PT1tPyhWPj0wJiYoQ1tWLS1dPUE+PjI0JjI1NSksVT0wLG09MCk6KFU9''@;'; put 'put ''QT4+PjI0LG0rPTIpfWlmKFY+PTApZm9yKENbVi0tXT1VO1Y+PTA7KUNbVi0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsVj0wO3JldHVybiBUPj00MDk2JiYoVis9''@;'; put 'put ''MTMsVD4+Pj0xMyksVD49NjQmJihWKz03LFQ+Pj49NyksVD49OCYmKFYrPTQsVD4+Pj00KSxUPj0yJiYoVis9MixUPj4+PTIpLFYrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLFY9MDtyZXR1cm4gODE5MSZUfHwoVis9MTMs''@;'; put 'put ''VD4+Pj0xMyksMTI3JlR8fChWKz03LFQ+Pj49NyksMTUmVHx8KFYrPTQsVD4+Pj00KSwzJlR8fChWKz0yLFQ+Pj49MiksMSZUfHxWKyssVn0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3Jl''@;'; put 'put ''dHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFY9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tUXSk7aWYoQys9Viwy''@;'; put 'put ''NiE9PVYpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90''@;'; put 'put ''bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1m''@;'; put 'put ''dW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7''@;'; put 'put ''Zm9yKHZhciBWPTA7VjxULmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT10aGlzLndvcmRzW1ZdJkMud29yZHNbVl07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfEMu''@;'; put 'put ''bmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxWO3RoaXMubGVuZ3RoPkMubGVuZ3RoPyhUPXRoaXMsVj1DKTooVD1DLFY9dGhpcyk7Zm9yKHZhciBVPTA7VTxWLmxl''@;'; put 'put ''bmd0aDtVKyspdGhpcy53b3Jkc1tVXT1ULndvcmRzW1VdXlYud29yZHNbVV07aWYodGhpcyE9PVQpZm9yKDtVPFQubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPVQud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxN''@;'; put 'put ''YXRoLmNlaWwoQy8yNiksVj1DJTI2O3RoaXMuX2V4cGFuZChUKSxWPjAmJlQtLTtmb3IodmFyIFU9MDtVPFQ7VSsrKXRoaXMud29yZHNbVV09NjcxMDg4NjMmfnRoaXMud29yZHNbVV07cmV0dXJuIFY+MCYmKHRoaXMud29yZHNbVV09fnRoaXMud29yZHNbVV0mNjcxMDg4NjM+PjI2LVYpLHRo''@;'; put 'put ''aXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVj1DLzI2fDAsVT1DJTI2O3JldHVybiB0aGlzLl9l''@;'; put 'put ''eHBhbmQoVisxKSx0aGlzLndvcmRzW1ZdPVQ/dGhpcy53b3Jkc1tWXXwxPDxVOnRoaXMud29yZHNbVl0mfigxPDxVKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMpe3ZhciBULFYsVTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7''@;'; put 'put ''dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFY9dGhpcyxVPUMpOihWPUMsVT10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxVLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxWLndvcmRzW21dKSsoMHxVLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPFYubGVu''@;'; put 'put ''Z3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfFYud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPVYubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFYhPT10aGlzKWZvcig7bTxWLmxlbmd0aDtt''@;'; put 'put ''KyspdGhpcy53b3Jkc1ttXT1WLndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09''@;'; put 'put ''Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5j''@;'; put 'put ''dGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LHRoaXMuX25vcm1TaWduKCk7dmFyIFUsRSxWPXRoaXMuY21wKEMpO2lmKDA9PT1WKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztWPjA/KFU9dGhpcyxFPUMpOihVPUMsRT10aGlzKTtmb3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtB''@;'; put 'put ''KyspbT0oVD0oMHxVLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8VS5sZW5ndGg7QSsrKW09KFQ9KDB8VS53b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtpZigwPT09bSYmQTxVLmxl''@;'; put 'put ''bmd0aCYmVSE9PXRoaXMpZm9yKDtBPFUubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPVUud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLFUhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgWD1mdW5jdGlvbihDLFQsVil7dmFyIGFlLG5lLGxlLFU9Qy53b3JkcyxFPVQud29yZHMsbT1WLndvcmRzLEE9MCx3ZT0wfFVbMF0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEzLG90PTB8VVsxXSxNZT04MTkxJm90LHZlPW90''@;'; put 'put ''Pj4+MTMsWGU9MHxVWzJdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfFVbM10sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLEhlPTB8VVs0XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxVWzVdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0wfFVbNl0seXQ9ODE5MSZsbixTdD1sbj4+PjEz''@;'; put 'put ''LER0PTB8VVs3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxVWzhdLE5lPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxxdD0wfFVbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8RVswXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxFWzFdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0w''@;'; put 'put ''fEVbMl0sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8RVszXSxzdD04MTkxJlJuLFV0PVJuPj4+MTMscmk9MHxFWzRdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfEVbNV0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8RVs2XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxFWzdd''@;'; put 'put ''LHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLHVhPTB8RVs5XSxFaT04MTkxJnVhLHZyPXVhPj4+MTM7Vi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9MTk7dmFyIFduPShBKyhhZT1NYXRoLmltdWwoVWUsUXQpKXww''@;'; put 'put ''KSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoUWUsUXQpfDApKTw8MTMpfDA7QT0oKGxlPU1hdGguaW11bChRZSxzbikpKyhuZT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE1lLFF0KSxuZT0obmU9TWF0aC5pbXVsKE1l''@;'; put 'put ''LHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLGxlPU1hdGguaW11bCh2ZSxzbik7dmFyICRpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRo''@;'; put 'put ''LmltdWwoUWUsZnQpfDApKyhuZT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKEJlLFF0KSxuZT0obmU9TWF0aC5pbXVsKEJlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLGxlPU1hdGguaW11bChBZSxzbiksYWU9YWUrTWF0aC5pbXVsKE1lLGhuKXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxsZT1sZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIGVpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0''@;'; put 'put ''KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsQXQpfDApKyhuZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJlLFF0KSxuZT0obmU9TWF0aC5pbXVsKFJlLHNuKSkrTWF0aC5pbXVsKEllLFF0KXwwLGxlPU1hdGguaW11bChJZSxzbiks''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKEJlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsZnQpfDApK01hdGguaW11bChBZSxobil8MCxsZT1sZStNYXRoLmltdWwoQWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2''@;'; put 'put ''ZSxXdCl8MCxsZT1sZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIFFyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsc3QpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsVXQp''@;'; put 'put ''fDApKyhuZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKERlLFF0KSxuZT0obmU9TWF0aC5pbXVsKERlLHNuKSkrTWF0aC5pbXVsKGtlLFF0KXwwLGxlPU1hdGguaW11bChrZSxzbiksYWU9YWUrTWF0aC5pbXVsKFJlLGhuKXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxsZT1sZStNYXRoLmltdWwoSWUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoQWUsQXQpfDAsYWU9YWUr''@;'; put 'put ''TWF0aC5pbXVsKE1lLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxsZT1sZStNYXRoLmltdWwodmUsVXQpfDA7dmFyIFZpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsV2UpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsVHQpfDApKyhuZT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKG50LFF0KSxuZT0obmU9TWF0aC5pbXVsKG50LHNuKSkrTWF0aC5pbXVsKEplLFF0KXww''@;'; put 'put ''LGxlPU1hdGguaW11bChKZSxzbiksYWU9YWUrTWF0aC5pbXVsKERlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxobil8MCxsZT1sZStNYXRoLmltdWwoa2UsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo''@;'; put 'put ''UmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoQWUsVXQpfDAsYWU9YWUrTWF0aC5p''@;'; put 'put ''bXVsKE1lLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxsZT1sZStNYXRoLmltdWwodmUsVHQpfDA7dmFyIE5pPShBKyhhZT1hZStNYXRoLmltdWwoVWUsaHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx4dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLGh0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUseHQpfDApKyhuZT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKHl0LFF0KSxuZT0obmU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVsKFN0LFF0KXwwLGxlPU1h''@;'; put 'put ''dGguaW11bChTdCxzbiksYWU9YWUrTWF0aC5pbXVsKG50LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxobil8MCxsZT1sZStNYXRoLmltdWwoSmUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsQXQp''@;'; put 'put ''fDApK01hdGguaW11bChrZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKEJl''@;'; put 'put ''LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoQWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxsZT1sZStNYXRo''@;'; put 'put ''LmltdWwodmUseHQpfDA7dmFyIERhPShBKyhhZT1hZStNYXRoLmltdWwoVWUscm4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsenQpfDApKyhuZT4+PjEzKXwwKSso''@;'; put 'put ''RGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKGl0LFF0KSxuZT0obmU9TWF0aC5pbXVsKGl0LHNuKSkrTWF0aC5pbXVsKCRlLFF0KXwwLGxlPU1hdGguaW11bCgkZSxzbiksYWU9YWUrTWF0aC5pbXVsKHl0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsZnQpfDApK01h''@;'; put 'put ''dGguaW11bChTdCxobil8MCxsZT1sZStNYXRoLmltdWwoU3QsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLHN0KXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoRGUsVXQpfDApK01hdGguaW11bChrZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxsZT1sZStNYXRoLmltdWwo''@;'; put 'put ''SWUsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxsZT1sZStNYXRoLmltdWwoQWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsenQpfDApK01h''@;'; put 'put ''dGguaW11bCh2ZSxybil8MCxsZT1sZStNYXRoLmltdWwodmUsenQpfDA7dmFyIExyPShBKyhhZT1hZStNYXRoLmltdWwoVWUsdW4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFFlLHVuKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmlt''@;'; put 'put ''dWwoUWUsZm4pfDApKyhuZT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKE5lLFF0KSxuZT0obmU9TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLGxlPU1hdGguaW11bCh1dCxzbiksYWU9YWUrTWF0aC5pbXVsKGl0LGhuKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxsZT1sZStNYXRoLmltdWwoJGUsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChTdCxXdCl8MCxsZT1sZStNYXRoLmltdWwoU3QsQXQp''@;'; put 'put ''fDAsYWU9YWUrTWF0aC5pbXVsKG50LHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsVHQpfDApK01hdGguaW11''@;'; put 'put ''bChrZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoa2UsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxsZT1sZStNYXRoLmltdWwoSWUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLHJuKXwwLG5lPShu''@;'; put 'put ''ZT1uZStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxsZT1sZStNYXRoLmltdWwoQWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKE1lLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1bil8MCxsZT1sZStNYXRoLmltdWwodmUsZm4p''@;'; put 'put ''fDA7dmFyIFdpPShBKyhhZT1hZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsZW4pfDApKyhuZT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxX''@;'; put 'put ''aSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFF0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLGxlPU1hdGguaW11bChQdCxzbiksYWU9YWUrTWF0aC5pbXVsKE5lLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZnQpfDApK01hdGguaW11bCh1dCxo''@;'; put 'put ''bil8MCxsZT1sZStNYXRoLmltdWwodXQsZnQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxsZT1sZStNYXRoLmltdWwoJGUsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHN0KXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxsZT1sZStNYXRoLmltdWwoU3QsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoSmUsVHQpfDAsYWU9''@;'; put 'put ''YWUrTWF0aC5pbXVsKERlLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUseHQpfDApK01hdGguaW11bChrZSxodCl8MCxsZT1sZStNYXRoLmltdWwoa2UseHQpfDAsYWU9YWUrTWF0aC5pbXVsKFJlLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxy''@;'; put 'put ''bil8MCxsZT1sZStNYXRoLmltdWwoSWUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKEJlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxsZT1sZStNYXRoLmltdWwoQWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKE1lLFh0KXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxsZT1sZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIHBhPShBKyhhZT1hZStNYXRoLmltdWwoVWUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx2cil8MCkrTWF0aC5pbXVsKFFlLEVpKXwwKSk8PDEz''@;'; put 'put ''KXwwO0E9KChsZT1sZStNYXRoLmltdWwoUWUsdnIpfDApKyhuZT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGhuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LGZ0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLGxlPU1hdGguaW11bChQdCxmdCksYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKE5lLFd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsQXQpfDApK01hdGguaW11bCh1dCxXdCl8MCxsZT1sZStNYXRoLmltdWwodXQsQXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxs''@;'; put 'put ''ZT1sZStNYXRoLmltdWwoJGUsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxsZT1sZStNYXRoLmltdWwoU3QsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LGh0KXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxsZT1sZStNYXRoLmltdWwoSmUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxybil8MCxsZT1sZStNYXRoLmltdWwoa2UsenQpfDAsYWU9YWUrTWF0''@;'; put 'put ''aC5pbXVsKFJlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSx1bil8MCxsZT1sZStNYXRoLmltdWwoSWUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKEJlLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQmUsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCxs''@;'; put 'put ''ZT1sZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIFFuPShBKyhhZT1hZStNYXRoLmltdWwoTWUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChNZSx2cil8MCkrTWF0aC5pbXVsKHZlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwodmUsdnIpfDApKyhuZT4+''@;'; put 'put ''PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFd0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFd0KXwwLGxlPU1hdGguaW11bChQdCxBdCksYWU9YWUrTWF0aC5pbXVsKE5lLHN0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUs''@;'; put 'put ''VXQpfDApK01hdGguaW11bCh1dCxzdCl8MCxsZT1sZStNYXRoLmltdWwodXQsVXQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFdlKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxsZT1sZStNYXRoLmltdWwoJGUsVHQpfDAsYWU9YWUrTWF0aC5pbXVs''@;'; put 'put ''KHl0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChTdCxodCl8MCxsZT1sZStNYXRoLmltdWwoU3QseHQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsenQpfDApK01hdGguaW11bChKZSxybil8MCxsZT1sZStN''@;'; put 'put ''YXRoLmltdWwoSmUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKERlLHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxsZT1sZStNYXRoLmltdWwoa2UsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKFJlLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUs''@;'; put 'put ''ZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGxhPShBKyhhZT1hZStNYXRoLmltdWwoQmUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChCZSx2cil8MCkrTWF0aC5pbXVsKEFlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1s''@;'; put 'put ''ZStNYXRoLmltdWwoQWUsdnIpfDApKyhuZT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHN0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LFV0KSkrTWF0aC5pbXVsKFB0LHN0KXwwLGxlPU1hdGguaW11bChQdCxVdCksYWU9YWUrTWF0aC5pbXVsKE5lLFdl''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsVHQpfDApK01hdGguaW11bCh1dCxXZSl8MCxsZT1sZStNYXRoLmltdWwodXQsVHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxsZT1sZStNYXRoLmlt''@;'; put 'put ''dWwoJGUseHQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxsZT1sZStNYXRoLmltdWwoU3QsenQpfDAsYWU9YWUrTWF0aC5pbXVsKG50LHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZm4pfDAp''@;'; put 'put ''K01hdGguaW11bChKZSx1bil8MCxsZT1sZStNYXRoLmltdWwoSmUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKERlLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoa2UsZW4pfDA7dmFyIGJhPShBKyhhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoUmUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChSZSx2cil8MCkrTWF0aC5pbXVsKEllLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoSWUsdnIpfDApKyhuZT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVs''@;'; put 'put ''KFJ0LFdlKSxuZT0obmU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLGxlPU1hdGguaW11bChQdCxUdCksYWU9YWUrTWF0aC5pbXVsKE5lLGh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUseHQpfDApK01hdGguaW11bCh1dCxodCl8MCxsZT1sZStNYXRoLmltdWwodXQs''@;'; put 'put ''eHQpfDAsYWU9YWUrTWF0aC5pbXVsKGl0LHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxsZT1sZStNYXRoLmltdWwoJGUsenQpfDAsYWU9YWUrTWF0aC5pbXVsKHl0LHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsZm4pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCx1bil8MCxsZT1sZStNYXRoLmltdWwoU3QsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKG50LFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoSmUsZW4pfDA7dmFyIExhPShBKyhhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''RGUsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChEZSx2cil8MCkrTWF0aC5pbXVsKGtlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoa2UsdnIpfDApKyhuZT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LGh0''@;'; put 'put ''KSxuZT0obmU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLGxlPU1hdGguaW11bChQdCx4dCksYWU9YWUrTWF0aC5pbXVsKE5lLHJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsenQpfDApK01hdGguaW11bCh1dCxybil8MCxsZT1sZStNYXRoLmltdWwodXQsenQpfDAs''@;'; put 'put ''YWU9YWUrTWF0aC5pbXVsKGl0LHVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxsZT1sZStNYXRoLmltdWwoJGUsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKHl0LFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChT''@;'; put 'put ''dCxYdCl8MCxsZT1sZStNYXRoLmltdWwoU3QsZW4pfDA7dmFyIEZhPShBKyhhZT1hZStNYXRoLmltdWwobnQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChudCx2cil8MCkrTWF0aC5pbXVsKEplLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoSmUsdnIp''@;'; put 'put ''fDApKyhuZT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LHJuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LHp0KSkrTWF0aC5pbXVsKFB0LHJuKXwwLGxlPU1hdGguaW11bChQdCx6dCksYWU9YWUrTWF0aC5pbXVsKE5lLHVuKXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoTmUsZm4pfDApK01hdGguaW11bCh1dCx1bil8MCxsZT1sZStNYXRoLmltdWwodXQsZm4pfDAsYWU9YWUrTWF0aC5pbXVsKGl0LFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCxsZT1sZStNYXRoLmltdWwoJGUsZW4pfDA7dmFyIHRp''@;'; put 'put ''PShBKyhhZT1hZStNYXRoLmltdWwoeXQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh5dCx2cil8MCkrTWF0aC5pbXVsKFN0LEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoU3QsdnIpfDApKyhuZT4+PjEzKXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4''@;'; put 'put ''NjMsYWU9TWF0aC5pbXVsKFJ0LHVuKSxuZT0obmU9TWF0aC5pbXVsKFJ0LGZuKSkrTWF0aC5pbXVsKFB0LHVuKXwwLGxlPU1hdGguaW11bChQdCxmbiksYWU9YWUrTWF0aC5pbXVsKE5lLFh0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTmUsZW4pfDApK01hdGguaW11bCh1dCxYdCl8MCxsZT1s''@;'; put 'put ''ZStNYXRoLmltdWwodXQsZW4pfDA7dmFyIGdvPShBKyhhZT1hZStNYXRoLmltdWwoaXQsRWkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChpdCx2cil8MCkrTWF0aC5pbXVsKCRlLEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwoJGUsdnIpfDApKyhuZT4+PjEz''@;'; put 'put ''KXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsYWU9TWF0aC5pbXVsKFJ0LFh0KSxuZT0obmU9TWF0aC5pbXVsKFJ0LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLGxlPU1hdGguaW11bChQdCxlbik7dmFyIE5zPShBKyhhZT1hZStNYXRoLmltdWwoTmUsRWkpfDApfDApKygoODE5MSYobmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChOZSx2cil8MCkrTWF0aC5pbXVsKHV0LEVpKXwwKSk8PDEzKXwwO0E9KChsZT1sZStNYXRoLmltdWwodXQsdnIpfDApKyhuZT4+PjEzKXwwKSsoTnM+Pj4yNil8MCxOcyY9NjcxMDg4NjM7dmFyIHlsPShBKyhhZT1NYXRoLmltdWwoUnQsRWkpKXwwKSsoKDgxOTEm''@;'; put 'put ''KG5lPShuZT1NYXRoLmltdWwoUnQsdnIpKStNYXRoLmltdWwoUHQsRWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChsZT1NYXRoLmltdWwoUHQsdnIpKSsobmU+Pj4xMyl8MCkrKHlsPj4+MjYpfDAseWwmPTY3MTA4ODYzLG1bMF09V24sbVsxXT0kaSxtWzJdPWVpLG1bM109UXIsbVs0XT1WaSxt''@;'; put 'put ''WzVdPU5pLG1bNl09RGEsbVs3XT1McixtWzhdPVdpLG1bOV09cGEsbVsxMF09UW4sbVsxMV09bGEsbVsxMl09YmEsbVsxM109TGEsbVsxNF09RmEsbVsxNV09dGksbVsxNl09Z28sbVsxN109TnMsbVsxOF09eWwsMCE9PUEmJihtWzE5XT1BLFYubGVuZ3RoKyspLFZ9O2Z1bmN0aW9uIHRlKHgs''@;'; put 'put ''QyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIFY9MCxVPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBtPVU7VT0wO2Zvcih2YXIgQT02NzEwODg2MyZWLGFlPU1hdGgubWluKEUsQy5sZW5ndGgtMSksbmU9''@;'; put 'put ''TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO25lPD1hZTtuZSsrKXt2YXIgUWU9KDB8eC53b3Jkc1tFLW5lXSkqKDB8Qy53b3Jkc1tuZV0pLG90PTY3MTA4ODYzJlFlO0E9NjcxMDg4NjMmKG90PW90K0F8MCksVSs9KG09KG09bSsoUWUvNjcxMDg4NjR8MCl8MCkrKG90Pj4+MjYpfDApPj4+MjYs''@;'; put 'put ''bSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLFY9bSxtPVV9cmV0dXJuIDAhPT1WP1Qud29yZHNbRV09VjpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gcmUoeCxDLFQpe3JldHVybiB0ZSh4LEMsVCl9ZnVuY3Rpb24gb2UoeCxDKXt0aGlzLng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChY''@;'; put 'put ''PVEpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIFU9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/WCh0aGlzLEMsVCk6VTw2Mz9RKHRoaXMsQyxUKTpVPDEwMjQ/dGUodGhpcyxDLFQpOnJlKHRoaXMsQyxUKX0s''@;'; put 'put ''b2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxWPXcucHJvdG90eXBlLl9jb3VudEJpdHMoQyktMSxVPTA7VTxDO1UrKylUW1VdPXRoaXMucmV2QmluKFUsVixDKTtyZXR1cm4gVH0sb2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihDLFQs''@;'; put 'put ''Vil7aWYoMD09PUN8fEM9PT1WLTEpcmV0dXJuIEM7Zm9yKHZhciBVPTAsRT0wO0U8VDtFKyspVXw9KDEmQyk8PFQtRS0xLEM+Pj0xO3JldHVybiBVfSxvZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihDLFQsVixVLEUsbSl7Zm9yKHZhciBBPTA7QTxtO0ErKylVW0FdPVRbQ1tBXV0sRVtB''@;'; put 'put ''XT1WW0NbQV1dfSxvZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKEMsVCxWLFUsRSxtKXt0aGlzLnBlcm11dGUobSxDLFQsVixVLEUpO2Zvcih2YXIgQT0xO0E8RTtBPDw9MSlmb3IodmFyIGFlPUE8PDEsbmU9TWF0aC5jb3MoMipNYXRoLlBJL2FlKSxsZT1NYXRoLnNpbigyKk1hdGgu''@;'; put 'put ''UEkvYWUpLHdlPTA7d2U8RTt3ZSs9YWUpZm9yKHZhciBVZT1uZSxRZT1sZSxvdD0wO290PEE7b3QrKyl7dmFyIE1lPVZbd2Urb3RdLHZlPVVbd2Urb3RdLFhlPVZbd2Urb3QrQV0sQmU9VVt3ZStvdCtBXSxBZT1VZSpYZS1RZSpCZTtCZT1VZSpCZStRZSpYZSxWW3dlK290XT1NZSsoWGU9QWUp''@;'; put 'put ''LFVbd2Urb3RdPXZlK0JlLFZbd2Urb3QrQV09TWUtWGUsVVt3ZStvdCtBXT12ZS1CZSxvdCE9PWFlJiYoQWU9bmUqVWUtbGUqUWUsUWU9bmUqUWUrbGUqVWUsVWU9QWUpfX0sb2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKEMsVCl7dmFyIFY9MXxNYXRoLm1heChULEMpLFU9MSZW''@;'; put 'put ''LEU9MDtmb3IoVj1WLzJ8MDtWO1Y+Pj49MSlFKys7cmV0dXJuIDE8PEUrMStVfSxvZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKEMsVCxWKXtpZighKFY8PTEpKWZvcih2YXIgVT0wO1U8Vi8yO1UrKyl7dmFyIEU9Q1tVXTtDW1VdPUNbVi1VLTFdLENbVi1VLTFdPUUsRT1UW1VdLFRb''@;'; put 'put ''VV09LVRbVi1VLTFdLFRbVi1VLTFdPS1FfX0sb2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihDLFQpe2Zvcih2YXIgVj0wLFU9MDtVPFQvMjtVKyspe3ZhciBFPTgxOTIqTWF0aC5yb3VuZChDWzIqVSsxXS9UKStNYXRoLnJvdW5kKENbMipVXS9UKStWO0NbVV09NjcxMDg4NjMm''@;'; put 'put ''RSxWPUU8NjcxMDg4NjQ/MDpFLzY3MTA4ODY0fDB9cmV0dXJuIEN9LG9lLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKEMsVCxWLFUpe2Zvcih2YXIgRT0wLG09MDttPFQ7bSsrKVZbMiptXT04MTkxJihFKz0wfENbbV0pLFZbMiptKzFdPTgxOTEmKEU+Pj49MTMpLEU+Pj49MTM7Zm9y''@;'; put 'put ''KG09MipUO208VTsrK20pVlttXT0wO3AoMD09PUUpLHAoISgtODE5MiZFKSl9LG9lLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksVj0wO1Y8QztWKyspVFtWXT0wO3JldHVybiBUfSxvZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihDLFQsVil7dmFy''@;'; put 'put ''IFU9Mip0aGlzLmd1ZXNzTGVuMTNiKEMubGVuZ3RoLFQubGVuZ3RoKSxFPXRoaXMubWFrZVJCVChVKSxtPXRoaXMuc3R1YihVKSxBPW5ldyBBcnJheShVKSxhZT1uZXcgQXJyYXkoVSksbmU9bmV3IEFycmF5KFUpLGxlPW5ldyBBcnJheShVKSx3ZT1uZXcgQXJyYXkoVSksVWU9bmV3IEFycmF5''@;'; put 'put ''KFUpLFFlPVYud29yZHM7UWUubGVuZ3RoPVUsdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsQSxVKSx0aGlzLmNvbnZlcnQxM2IoVC53b3JkcyxULmxlbmd0aCxsZSxVKSx0aGlzLnRyYW5zZm9ybShBLG0sYWUsbmUsVSxFKSx0aGlzLnRyYW5zZm9ybShsZSxtLHdlLFVlLFUsRSk7''@;'; put 'put ''Zm9yKHZhciBvdD0wO290PFU7b3QrKyl7dmFyIE1lPWFlW290XSp3ZVtvdF0tbmVbb3RdKlVlW290XTtuZVtvdF09YWVbb3RdKlVlW290XStuZVtvdF0qd2Vbb3RdLGFlW290XT1NZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYWUsbmUsVSksdGhpcy50cmFuc2Zvcm0oYWUsbmUsUWUsbSxVLEUp''@;'; put 'put ''LHRoaXMuY29uanVnYXRlKFFlLG0sVSksdGhpcy5ub3JtYWxpemUxM2IoUWUsVSksVi5uZWdhdGl2ZT1DLm5lZ2F0aXZlXlQubmVnYXRpdmUsVi5sZW5ndGg9Qy5sZW5ndGgrVC5sZW5ndGgsVi5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwp''@;'; put 'put ''O3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCksdGhpcy5tdWxUbyhDLFQpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKEMpe3ZhciBUPW5ldyB3KG51bGwpO3JldHVybiBULndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtDLmxlbmd0aCkscmUodGhp''@;'; put 'put ''cyxDLFQpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oQyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKCJudW1iZXIiPT10eXBlb2YgQykscChDPDY3MTA4ODY0KTtmb3IodmFy''@;'; put 'put ''IFY9MCxVPTA7VTx0aGlzLmxlbmd0aDtVKyspe3ZhciBFPSgwfHRoaXMud29yZHNbVV0pKkMsbT0oNjcxMDg4NjMmRSkrKDY3MTA4ODYzJlYpO1Y+Pj0yNixWKz1FLzY3MTA4ODY0fDAsVis9bT4+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmbX1yZXR1cm4gMCE9PVYmJih0aGlzLndvcmRz''@;'; put 'put ''W1VdPVYsdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PUM/MTp0aGlzLmxlbmd0aCxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gcSh4KXtmb3IodmFyIEM9bmV3IEFycmF5KHguYml0TGVuZ3RoKCkpLFQ9MDtU''@;'; put 'put ''PEMubGVuZ3RoO1QrKylDW1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIFY9dGhpcyxVPTA7VTxULmxlbmd0aCYmMD09PVRbVV07VSsrLFY9Vi5zcXIoKSk7aWYoKytVPFQubGVuZ3RoKWZvcih2''@;'; put 'put ''YXIgRT1WLnNxcigpO1U8VC5sZW5ndGg7VSsrLEU9RS5zcXIoKSkwIT09VFtVXSYmKFY9Vi5tdWwoRSkpO3JldHVybiBWfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9QyUyNixWPShDLVQpLzI2LFU9NjcxMDg4NjM+''@;'; put 'put ''Pj4yNi1UPDwyNi1UO2lmKDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0mVTt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlzLndvcmRzW0VdPW0sdGhpcy5sZW5ndGgrKyl9''@;'; put 'put ''aWYoMCE9PVYpe2ZvcihFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK1ZdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPFY7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9Vn1yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULFYpe3ZhciBVO3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxVPVQ/KFQtVCUyNikvMjY6MDt2YXIgRT1DJTI2LG09TWF0aC5taW4oKEMtRSkvMjYs''@;'; put 'put ''dGhpcy5sZW5ndGgpLEE9NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLGFlPVY7aWYoVS09bSxVPU1hdGgubWF4KDAsVSksYWUpe2Zvcih2YXIgbmU9MDtuZTxtO25lKyspYWUud29yZHNbbmVdPXRoaXMud29yZHNbbmVdO2FlLmxlbmd0aD1tfWlmKDAhPT1tKWlmKHRoaXMubGVuZ3RoPm0pZm9y''@;'; put 'put ''KHRoaXMubGVuZ3RoLT1tLG5lPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl0aGlzLndvcmRzW25lXT10aGlzLndvcmRzW25lK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGxlPTA7Zm9yKG5lPXRoaXMubGVuZ3RoLTE7bmU+PTAmJigwIT09bGV8fG5lPj1VKTtuZS0t''@;'; put 'put ''KXt2YXIgd2U9MHx0aGlzLndvcmRzW25lXTt0aGlzLndvcmRzW25lXT1sZTw8MjYtRXx3ZT4+PkUsbGU9d2UmQX1yZXR1cm4gYWUmJjAhPT1sZSYmKGFlLndvcmRzW2FlLmxlbmd0aCsrXT1sZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMu''@;'; put 'put ''X3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxWKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULFYpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oQyl9LHcucHJvdG90eXBlLnVz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKEMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixWPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVZ8fCEodGhpcy53b3Jkc1tWXSYxPDxUKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihDKXtwKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixWPShDLVQpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Vj90aGlzOigwIT09VCYmVisrLHRoaXMubGVuZ3RoPU1hdGgu''@;'; put 'put ''bWluKFYsdGhpcy5sZW5ndGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oQyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlhZGRuPWZ1bmN0aW9uKEMpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgQykscChDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9Qz8odGhpcy53b3Jkc1swXT1DLSgwfHRoaXMu''@;'; put 'put ''d29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53b3Jkc1swXSs9Qztmb3IodmFyIFQ9MDtUPHRo''@;'; put 'put ''aXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFQrMSksdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oQyl7aWYocCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oQyksdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF08MDtUKyspdGhp''@;'; put 'put ''cy53b3Jkc1tUXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc3VibihDKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihDLFQs''@;'; put 'put ''Vil7dmFyIEU7dGhpcy5fZXhwYW5kKEMubGVuZ3RoK1YpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStWXSkrQTt2YXIgYWU9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmYWUpPj4yNiktKGFlLzY3MTA4ODY0fDApLHRoaXMud29y''@;'; put 'put ''ZHNbRStWXT02NzEwODg2MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1WO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStWXSkrQSk+PjI2LHRoaXMud29yZHNbRStWXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihwKC0xPT09QSksQT0wLEU9MDtFPHRoaXMubGVu''@;'; put 'put ''Z3RoO0UrKylBPShtPS0oMHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2YXIgVixVPXRoaXMuY2xvbmUoKSxFPUMsbT0w''@;'; put 'put ''fEUud29yZHNbRS5sZW5ndGgtMV07MCE9KFY9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihWKSxVLml1c2hsbihWKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIG5lLGFlPVUubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2QiIT09VCl7KG5lPW5ldyB3KG51bGwpKS5sZW5n''@;'; put 'put ''dGg9YWUrMSxuZS53b3Jkcz1uZXcgQXJyYXkobmUubGVuZ3RoKTtmb3IodmFyIGxlPTA7bGU8bmUubGVuZ3RoO2xlKyspbmUud29yZHNbbGVdPTB9dmFyIHdlPVUuY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLGFlKTswPT09d2UubmVnYXRpdmUmJihVPXdlLG5lJiYobmUud29yZHNbYWVdPTEp''@;'; put 'put ''KTtmb3IodmFyIFVlPWFlLTE7VWU+PTA7VWUtLSl7dmFyIFFlPTY3MTA4ODY0KigwfFUud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxVLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoUWU9TWF0aC5taW4oUWUvbXwwLDY3MTA4ODYzKSxVLl9pc2hsbnN1Ym11bChFLFFlLFVlKTswIT09VS5uZWdh''@;'; put 'put ''dGl2ZTspUWUtLSxVLm5lZ2F0aXZlPTAsVS5faXNobG5zdWJtdWwoRSwxLFVlKSxVLmlzWmVybygpfHwoVS5uZWdhdGl2ZV49MSk7bmUmJihuZS53b3Jkc1tVZV09UWUpfXJldHVybiBuZSYmbmUuX3N0cmlwKCksVS5fc3RyaXAoKSwiZGl2IiE9PVQmJjAhPT1WJiZVLml1c2hybihWKSx7ZGl2''@;'; put 'put ''Om5lfHxudWxsLG1vZDpVfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxWKXtyZXR1cm4gcCghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCku''@;'; put 'put ''ZGl2bW9kKEMsVCksIm1vZCIhPT1UJiYoVT1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxWJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OlUsbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmU/KG09dGhpcy5kaXZtb2QoQy5uZWco''@;'; put 'put ''KSxUKSwibW9kIiE9PVQmJihVPW0uZGl2Lm5lZygpKSx7ZGl2OlUsbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxWJiYwIT09RS5uZWdhdGl2ZSYmRS5pc3ViKEMpKSx7''@;'; put 'put ''ZGl2Om0uZGl2LG1vZDpFfSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1UP3tkaXY6bnVsbCxtb2Q6bmV3''@;'; put 'put ''IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBVLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1v''@;'; put 'put ''ZChDLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJv''@;'; put 'put ''dW5kPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgVj0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxVPUMudXNocm4oMSksRT1DLmFuZGxuKDEpLG09Vi5jbXAoVSk7cmV0dXJuIG08MHx8MT09''@;'; put 'put ''PUUmJjA9PT1tP1QuZGl2OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKEM8PTY3MTA4ODYzKTtmb3IodmFyIFY9KDE8PDI2KSVDLFU9MCxFPXRoaXMubGVu''@;'; put 'put ''Z3RoLTE7RT49MDtFLS0pVT0oVipVKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1VOlV9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscChDPD02''@;'; put 'put ''NzEwODg2Myk7Zm9yKHZhciBWPTAsVT10aGlzLmxlbmd0aC0xO1U+PTA7VS0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW1VdKSs2NzEwODg2NCpWO3RoaXMud29yZHNbVV09RS9DfDAsVj1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5kaXZu''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSkscCghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxWPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7''@;'; put 'put ''Zm9yKHZhciBVPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLGFlPTA7VC5pc0V2ZW4oKSYmVi5pc0V2ZW4oKTspVC5pdXNocm4oMSksVi5pdXNocm4oMSksKythZTtmb3IodmFyIG5lPVYuY2xvbmUoKSxsZT1ULmNsb25lKCk7IVQuaXNaZXJvKCk7KXtmb3IodmFy''@;'; put 'put ''IHdlPTAsVWU9MTshKFQud29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShVLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihVLmlhZGQobmUpLEUuaXN1YihsZSkpLFUuaXVzaHJuKDEpLEUuaXVzaHJuKDEpO2Zvcih2YXIgUWU9''@;'; put 'put ''MCxvdD0xOyEoVi53b3Jkc1swXSZvdCkmJlFlPDI2OysrUWUsb3Q8PD0xKTtpZihRZT4wKWZvcihWLml1c2hybihRZSk7UWUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZChuZSksQS5pc3ViKGxlKSksbS5pdXNocm4oMSksQS5pdXNocm4oMSk7VC5jbXAoVik+PTA/KFQu''@;'; put 'put ''aXN1YihWKSxVLmlzdWIobSksRS5pc3ViKEEpKTooVi5pc3ViKFQpLG0uaXN1YihVKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpWLml1c2hsbihhZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSkscCghQy5pc1plcm8oKSk7dmFyIHdl''@;'; put 'put ''LFQ9dGhpcyxWPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBVPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1WLmNsb25lKCk7VC5jbXBuKDEpPjAmJlYuY21wbigxKT4wOyl7Zm9yKHZhciBBPTAsYWU9MTshKFQud29yZHNbMF0mYWUpJiZBPDI2''@;'; put 'put ''OysrQSxhZTw8PTEpO2lmKEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylVLmlzT2RkKCkmJlUuaWFkZChtKSxVLml1c2hybigxKTtmb3IodmFyIG5lPTAsbGU9MTshKFYud29yZHNbMF0mbGUpJiZuZTwyNjsrK25lLGxlPDw9MSk7aWYobmU+MClmb3IoVi5pdXNocm4obmUpO25lLS0gPjA7''@;'; put 'put ''KUUuaXNPZGQoKSYmRS5pYWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKFYpPj0wPyhULmlzdWIoViksVS5pc3ViKEUpKTooVi5pc3ViKFQpLEUuaXN1YihVKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/VTpFKS5jbXBuKDApPDAmJndlLmlhZGQoQyksd2V9LHcucHJvdG90eXBlLmdjZD1mdW5j''@;'; put 'put ''dGlvbihDKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLFY9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxWLm5lZ2F0aXZlPTA7Zm9yKHZhciBVPTA7VC5pc0V2ZW4oKSYmVi5pc0V2ZW4oKTtV''@;'; put 'put ''KyspVC5pdXNocm4oMSksVi5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7Vi5pc0V2ZW4oKTspVi5pdXNocm4oMSk7dmFyIEU9VC5jbXAoVik7aWYoRTwwKXt2YXIgbT1UO1Q9VixWPW19ZWxzZSBpZigwPT09RXx8MD09PVYuY21wbigxKSlicmVh''@;'; put 'put ''aztULmlzdWIoVil9cmV0dXJuIFYuaXVzaGxuKFUpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2Rk''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMpO3ZhciBUPUMlMjYsVj0oQy1UKS8y''@;'; put 'put ''NixVPTE8PFQ7aWYodGhpcy5sZW5ndGg8PVYpcmV0dXJuIHRoaXMuX2V4cGFuZChWKzEpLHRoaXMud29yZHNbVl18PVUsdGhpcztmb3IodmFyIEU9VSxtPVY7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07RT0oQSs9RSk+Pj4yNix0aGlzLndvcmRzW21d''@;'; put 'put ''PUEmPTY3MTA4ODYzfXJldHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihD''@;'; put 'put ''KXt2YXIgVixUPUM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKVY9MTtlbHNle1QmJihDPS1DKSxwKEM8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIp''@;'; put 'put ''O3ZhciBVPTB8dGhpcy53b3Jkc1swXTtWPVU9PT1DPzA6VTxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVY6Vn0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Qy5sZW5n''@;'; put 'put ''dGgpcmV0dXJuLTE7Zm9yKHZhciBUPTAsVj10aGlzLmxlbmd0aC0xO1Y+PTA7Vi0tKXt2YXIgVT0wfHRoaXMud29yZHNbVl0sRT0wfEMud29yZHNbVl07aWYoVSE9PUUpe1U8RT9UPS0xOlU+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIDE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlz''@;'; put 'put ''LmNtcChDKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk8''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcChDKX0sdy5yZWQ9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBnKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0''@;'; put 'put ''aXZlcyIpLEMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20o''@;'; put 'put ''dGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9m''@;'; put 'put ''b3JjZVJlZChDKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhp''@;'; put 'put ''cy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5z''@;'; put 'put ''dWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0''@;'; put 'put ''aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5pbXVs''@;'; put 'put ''KHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5l''@;'; put 'put ''Zyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBnZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTky''@;'; put 'put ''Om51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlv''@;'; put 'put ''biBUZSgpe19lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiB6KCl7X2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBnKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBwKHguZ3RuKDEpLCJt''@;'; put 'put ''b2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24geSh4KXtnLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiks''@;'; put 'put ''dGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhp''@;'; put 'put ''cy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxDfSxfZS5wcm90b3R5cGUuaXJl''@;'; put 'put ''ZHVjZT1mdW5jdGlvbihDKXt2YXIgVixUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxWPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShWPnRoaXMubik7dmFyIFU9Vjx0aGlzLm4/LTE6VC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1V''@;'; put 'put ''PyhULndvcmRzWzBdPTAsVC5sZW5ndGg9MSk6VT4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAsVCl9LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4gQy5pbXVsKHRoaXMuayl9LE4oVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgVj00MTk0MzAzLFU9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8VTtFKyspVC53b3Jkc1tFXT1DLndvcmRzW0VdO2lmKFQubGVuZ3RoPVUsQy5s''@;'; put 'put ''ZW5ndGg8PTkpcmV0dXJuIEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZWLEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRzW0UtMTBdPShBJlYpPDw0fG0+Pj4yMixtPUF9''@;'; put 'put ''Qy53b3Jkc1tFLTEwXT1tPj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3RoKz0yO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVu''@;'; put 'put ''Z3RoO1YrKyl7dmFyIFU9MHxDLndvcmRzW1ZdO0Mud29yZHNbVl09NjcxMDg4NjMmKFQrPTk3NypVKSxUPTY0KlUrKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmQy5sZW5ndGgtLSksQ30s''@;'; put 'put ''TihTZSxfZSksTih6ZSxfZSksTih6LF9lKSx6LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspe3ZhciBVPTE5KigwfEMud29yZHNbVl0pK1QsRT02NzEwODg2MyZVO1U+Pj49MjYsQy53b3Jkc1tWXT1FLFQ9VX1yZXR1cm4gMCE9PVQm''@;'; put 'put ''JihDLndvcmRzW0MubGVuZ3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKGdlW0NdKXJldHVybiBnZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJwMTkyIj09PUMpVD1uZXcgemU7ZWxzZXtpZigi''@;'; put 'put ''cDI1NTE5IiE9PUMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgen1yZXR1cm4gZ2VbQ109VCxUfSxnLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtwKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoQy5yZWQs''@;'; put 'put ''InJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sZy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtwKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKEMucmVkJiZDLnJlZD09PVQucmVkLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIil9LGcucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooUChDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksQyl9LGcucHJvdG90eXBlLm5l''@;'; put 'put ''Zz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgVj1DLmFkZChUKTtyZXR1cm4gVi5jbXAodGhpcy5tKT49MCYmVi5p''@;'; put 'put ''c3ViKHRoaXMubSksVi5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5pYWRkKFQpO3JldHVybiBWLmNtcCh0aGlzLm0pPj0wJiZWLmlzdWIodGhpcy5tKSxWfSxnLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIFY9Qy5zdWIoVCk7cmV0dXJuIFYuY21wbigwKTwwJiZWLmlhZGQodGhpcy5tKSxWLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgVj1DLmlzdWIoVCk7cmV0dXJu''@;'; put 'put ''IFYuY21wbigwKTwwJiZWLmlhZGQodGhpcy5tKSxWfSxnLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQp''@;'; put 'put ''LHRoaXMuaW1vZChDLmltdWwoVCkpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LGcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW11bChDLEMuY2xvbmUoKSl9LGcucHJv''@;'; put 'put ''dG90eXBlLnNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0sZy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKHAoVCUyPT0xKSwzPT09VCl7dmFyIFY9dGhpcy5tLmFkZChu''@;'; put 'put ''ZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhDLFYpfWZvcih2YXIgVT10aGlzLm0uc3VibigxKSxFPTA7IVUuaXNaZXJvKCkmJjA9PT1VLmFuZGxuKDEpOylFKyssVS5pdXNocm4oMSk7cCghVS5pc1plcm8oKSk7dmFyIG09bmV3IHcoMSkudG9SZWQodGhpcyksQT1tLnJlZE5l''@;'; put 'put ''ZygpLGFlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxuZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG5lPW5ldyB3KDIqbmUqbmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhuZSxhZSkuY21wKEEpOyluZS5yZWRJQWRkKEEpO2Zvcih2YXIgbGU9dGhpcy5wb3cobmUsVSksd2U9dGhpcy5w''@;'; put 'put ''b3coQyxVLmFkZG4oMSkuaXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLFUpLFFlPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgb3Q9VWUsTWU9MDswIT09b3QuY21wKG0pO01lKyspb3Q9b3QucmVkU3FyKCk7cChNZTxRZSk7dmFyIHZlPXRoaXMucG93KGxlLG5ldyB3KDEpLml1c2hsbihRZS1N''@;'; put 'put ''ZS0xKSk7d2U9d2UucmVkTXVsKHZlKSxsZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwobGUpLFFlPU1lfXJldHVybiB3ZX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5uZWdhdGl2ZT8oVC5uZWdhdGl2ZT0wLHRoaXMu''@;'; put 'put ''aW1vZChUKS5yZWROZWcoKSk6dGhpcy5pbW9kKFQpfSxnLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7dmFyIFU9bmV3IEFycmF5KDE2KTtVWzBdPW5l''@;'; put 'put ''dyB3KDEpLnRvUmVkKHRoaXMpLFVbMV09Qztmb3IodmFyIEU9MjtFPFUubGVuZ3RoO0UrKylVW0VdPXRoaXMubXVsKFVbRS0xXSxDKTt2YXIgbT1VWzBdLEE9MCxhZT0wLG5lPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSxFPVQubGVuZ3RoLTE7RT49MDtFLS0pe2Zvcih2''@;'; put 'put ''YXIgbGU9VC53b3Jkc1tFXSx3ZT1uZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1sZT4+d2UmMTttIT09VVswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK2FlfHwwPT09RSYmMD09PXdlKSYmKG09dGhpcy5tdWwobSxVW0FdKSxhZT0wLEE9MCkpOmFl''@;'; put 'put ''PTB9bmU9MjZ9cmV0dXJuIG19LGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPUMuY2xvbmUoKTtyZXR1cm4gVC5yZWQ9''@;'; put 'put ''bnVsbCxUfSx3Lm1vbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyB5KEMpfSxOKHksZykseS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LHkucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBU''@;'; put 'put ''PXRoaXMuaW1vZChDLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSx5LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEsQzt2YXIgVj1DLmltdWwoVCksVT1WLm1hc2tu''@;'; put 'put ''KHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPVYuaXN1YihVKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0p''@;'; put 'put ''KSxtLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBWPUMubXVsKFQpLFU9Vi5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFz''@;'; put 'put ''a24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1WLmlzdWIoVSkuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSwzNTI5NDooY2UsSixiKT0+e3ZhciBEO2Z1bmN0aW9uIF8oTil7dGhpcy5yYW5kPU59aWYoY2UuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbih3KXtyZXR1cm4gRHx8KEQ9bmV3IF8obnVsbCkpLEQuZ2VuZXJhdGUodyl9LGNlLmV4cG9ydHMuUmFuZD1fLF8ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yYW5kKHcpfSxfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtpZih0aGlz''@;'; put 'put ''LnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyh3KTtmb3IodmFyIEY9bmV3IFVpbnQ4QXJyYXkodyksSD0wO0g8Ri5sZW5ndGg7SCsrKUZbSF09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gRn0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxm''@;'; put 'put ''LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIEY9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhGKSxGfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9f''@;'; put 'put ''LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgRj1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoRiksRn06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIHA9Yig5MTQyNik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHAucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIHAucmFuZG9t''@;'; put 'put ''Qnl0ZXModyl9fWNhdGNoe319LDEyMzc1OihjZSxKLGIpPT57dmFyIEQ9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8oUil7RC5pc0J1ZmZlcihSKXx8KFI9RC5mcm9tKFIpKTtmb3IodmFyIGo9Ui5sZW5ndGgvNHwwLFA9bmV3IEFycmF5KGopLEw9MDtMPGo7TCsrKVBbTF09Ui5yZWFkVUlu''@;'; put 'put ''dDMyQkUoNCpMKTtyZXR1cm4gUH1mdW5jdGlvbiBwKFIpe2Zvcig7MDxSLmxlbmd0aDtSKyspUlswXT0wfWZ1bmN0aW9uIE4oUixqLFAsTCxZKXtmb3IodmFyIG9lLGdlLF9lLFRlLEI9UFswXSxXPVBbMV0sWj1QWzJdLHE9UFszXSxRPVJbMF1ealswXSxYPVJbMV1ealsxXSx0ZT1SWzJdXmpb''@;'; put 'put ''Ml0scmU9UlszXV5qWzNdLFNlPTQsemU9MTt6ZTxZO3plKyspb2U9QltRPj4+MjRdXldbWD4+PjE2JjI1NV1eWlt0ZT4+PjgmMjU1XV5xWzI1NSZyZV1ealtTZSsrXSxnZT1CW1g+Pj4yNF1eV1t0ZT4+PjE2JjI1NV1eWltyZT4+PjgmMjU1XV5xWzI1NSZRXV5qW1NlKytdLF9lPUJbdGU+Pj4y''@;'; put 'put ''NF1eV1tyZT4+PjE2JjI1NV1eWltRPj4+OCYyNTVdXnFbMjU1JlhdXmpbU2UrK10sVGU9QltyZT4+PjI0XV5XW1E+Pj4xNiYyNTVdXlpbWD4+PjgmMjU1XV5xWzI1NSZ0ZV1ealtTZSsrXSxRPW9lLFg9Z2UsdGU9X2UscmU9VGU7cmV0dXJuIG9lPShMW1E+Pj4yNF08PDI0fExbWD4+PjE2JjI1''@;'; put 'put ''NV08PDE2fExbdGU+Pj44JjI1NV08PDh8TFsyNTUmcmVdKV5qW1NlKytdLGdlPShMW1g+Pj4yNF08PDI0fExbdGU+Pj4xNiYyNTVdPDwxNnxMW3JlPj4+OCYyNTVdPDw4fExbMjU1JlFdKV5qW1NlKytdLF9lPShMW3RlPj4+MjRdPDwyNHxMW3JlPj4+MTYmMjU1XTw8MTZ8TFtRPj4+OCYyNTVd''@;'; put 'put ''PDw4fExbMjU1JlhdKV5qW1NlKytdLFRlPShMW3JlPj4+MjRdPDwyNHxMW1E+Pj4xNiYyNTVdPDwxNnxMW1g+Pj44JjI1NV08PDh8TFsyNTUmdGVdKV5qW1NlKytdLFtvZT4+Pj0wLGdlPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0s''@;'; put 'put ''Rj1mdW5jdGlvbigpe2Zvcih2YXIgUj1uZXcgQXJyYXkoMjU2KSxqPTA7ajwyNTY7aisrKVJbal09ajwxMjg/ajw8MTpqPDwxXjI4Mztmb3IodmFyIFA9W10sTD1bXSxZPVtbXSxbXSxbXSxbXV0sQj1bW10sW10sW10sW11dLFc9MCxaPTAscT0wO3E8MjU2OysrcSl7dmFyIFE9Wl5aPDwxXlo8''@;'; put 'put ''PDJeWjw8M15aPDw0O1BbV109UT1RPj4+OF4yNTUmUV45OSxMW1FdPVc7dmFyIFg9UltXXSx0ZT1SW1hdLHJlPVJbdGVdLG9lPTI1NypSW1FdXjE2ODQzMDA4KlE7WVswXVtXXT1vZTw8MjR8b2U+Pj44LFlbMV1bV109b2U8PDE2fG9lPj4+MTYsWVsyXVtXXT1vZTw8OHxvZT4+PjI0LFlbM11b''@;'; put 'put ''V109b2UsQlswXVtRXT0ob2U9MTY4NDMwMDkqcmVeNjU1MzcqdGVeMjU3KlheMTY4NDMwMDgqVyk8PDI0fG9lPj4+OCxCWzFdW1FdPW9lPDwxNnxvZT4+PjE2LEJbMl1bUV09b2U8PDh8b2U+Pj4yNCxCWzNdW1FdPW9lLDA9PT1XP1c9Wj0xOihXPVheUltSW1JbcmVeWF1dXSxaXj1SW1JbWl1d''@;'; put 'put ''KX1yZXR1cm57U0JPWDpQLElOVl9TQk9YOkwsU1VCX01JWDpZLElOVl9TVUJfTUlYOkJ9fSgpO2Z1bmN0aW9uIEgoUil7dGhpcy5fa2V5PV8oUiksdGhpcy5fcmVzZXQoKX1ILmJsb2NrU2l6ZT0xNixILmtleVNpemU9MzIsSC5wcm90b3R5cGUuYmxvY2tTaXplPUguYmxvY2tTaXplLEgucHJv''@;'; put 'put ''dG90eXBlLmtleVNpemU9SC5rZXlTaXplLEgucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgUj10aGlzLl9rZXksaj1SLmxlbmd0aCxQPWorNixMPTQqKFArMSksWT1bXSxCPTA7QjxqO0IrKylZW0JdPVJbQl07Zm9yKEI9ajtCPEw7QisrKXt2YXIgVz1ZW0ItMV07QiVqPT0w''@;'; put 'put ''PyhXPUYuU0JPWFsoVz1XPDw4fFc+Pj4yNCk+Pj4yNF08PDI0fEYuU0JPWFtXPj4+MTYmMjU1XTw8MTZ8Ri5TQk9YW1c+Pj44JjI1NV08PDh8Ri5TQk9YWzI1NSZXXSxXXj13W0IvanwwXTw8MjQpOmo+NiYmQiVqPT00JiYoVz1GLlNCT1hbVz4+PjI0XTw8MjR8Ri5TQk9YW1c+Pj4xNiYyNTVd''@;'; put 'put ''PDwxNnxGLlNCT1hbVz4+PjgmMjU1XTw8OHxGLlNCT1hbMjU1JlddKSxZW0JdPVlbQi1qXV5XfWZvcih2YXIgWj1bXSxxPTA7cTxMO3ErKyl7dmFyIFE9TC1xLFg9WVtRLShxJTQ/MDo0KV07WltxXT1xPDR8fFE8PTQ/WDpGLklOVl9TVUJfTUlYWzBdW0YuU0JPWFtYPj4+MjRdXV5GLklOVl9T''@;'; put 'put ''VUJfTUlYWzFdW0YuU0JPWFtYPj4+MTYmMjU1XV1eRi5JTlZfU1VCX01JWFsyXVtGLlNCT1hbWD4+PjgmMjU1XV1eRi5JTlZfU1VCX01JWFszXVtGLlNCT1hbMjU1JlhdXX10aGlzLl9uUm91bmRzPVAsdGhpcy5fa2V5U2NoZWR1bGU9WSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1afSxILnByb3Rv''@;'; put 'put ''dHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oUil7cmV0dXJuIE4oUj1fKFIpLHRoaXMuX2tleVNjaGVkdWxlLEYuU1VCX01JWCxGLlNCT1gsdGhpcy5fblJvdW5kcyl9LEgucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgaj10aGlzLmVuY3J5cHRCbG9ja1JhdyhS''@;'; put 'put ''KSxQPUQuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBQLndyaXRlVUludDMyQkUoalswXSwwKSxQLndyaXRlVUludDMyQkUoalsxXSw0KSxQLndyaXRlVUludDMyQkUoalsyXSw4KSxQLndyaXRlVUludDMyQkUoalszXSwxMiksUH0sSC5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKFIp''@;'; put 'put ''e3ZhciBqPShSPV8oUikpWzFdO1JbMV09UlszXSxSWzNdPWo7dmFyIFA9TihSLHRoaXMuX2ludktleVNjaGVkdWxlLEYuSU5WX1NVQl9NSVgsRi5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxMPUQuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlVUludDMyQkUoUFswXSwwKSxMLndyaXRl''@;'; put 'put ''VUludDMyQkUoUFszXSw0KSxMLndyaXRlVUludDMyQkUoUFsyXSw4KSxMLndyaXRlVUludDMyQkUoUFsxXSwxMiksTH0sSC5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtwKHRoaXMuX2tleVNjaGVkdWxlKSxwKHRoaXMuX2ludktleVNjaGVkdWxlKSxwKHRoaXMuX2tleSl9LGNlLmV4cG9y''@;'; put 'put ''dHMuQUVTPUh9LDE5MzA3OihjZSxKLGIpPT57dmFyIEQ9YigxMjM3NSksXz1iKDI3MDU0KS5CdWZmZXIscD1iKDMyNDcpLE49Yig3MTk5Myksdz1iKDg1OTE3KSxGPWIoMTM1NDYpLEg9Yig5NTcyNSk7ZnVuY3Rpb24gUChMLFksQixXKXtwLmNhbGwodGhpcyk7dmFyIFo9Xy5hbGxvYyg0LDAp''@;'; put 'put ''O3RoaXMuX2NpcGhlcj1uZXcgRC5BRVMoWSk7dmFyIHE9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhaKTt0aGlzLl9naGFzaD1uZXcgdyhxKSxCPWZ1bmN0aW9uIGooTCxZLEIpe2lmKDEyPT09WS5sZW5ndGgpcmV0dXJuIEwuX2ZpbklEPV8uY29uY2F0KFtZLF8uZnJvbShbMCwwLDAsMV0p''@;'; put 'put ''XSksXy5jb25jYXQoW1ksXy5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhCKSxaPVkubGVuZ3RoLHE9WiUxNjtXLnVwZGF0ZShZKSxxJiZXLnVwZGF0ZShfLmFsbG9jKHE9MTYtcSwwKSksVy51cGRhdGUoXy5hbGxvYyg4LDApKTt2YXIgUT04KlosWD1fLmFsbG9jKDgpO1gud3JpdGVV''@;'; put 'put ''SW50QkUoUSwwLDgpLFcudXBkYXRlKFgpLEwuX2ZpbklEPVcuc3RhdGU7dmFyIHRlPV8uZnJvbShMLl9maW5JRCk7cmV0dXJuIEgodGUpLHRlfSh0aGlzLEIscSksdGhpcy5fcHJldj1fLmZyb20oQiksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9j''@;'; put 'put ''VW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Vyx0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsdGhpcy5fbW9kZT1MLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9TihQLHApLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxl''@;'; put 'put ''bil7dmFyIFk9MTYtdGhpcy5fYWxlbiUxNjtZPDE2JiYoWT1fLmFsbG9jKFksMCksdGhpcy5fZ2hhc2gudXBkYXRlKFkpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIEI9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsTCk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P0w6Qiks''@;'; put 'put ''dGhpcy5fbGVuKz1MLmxlbmd0aCxCfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBMPUYodGhp''@;'; put 'put ''cy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24gUihMLFkpe3ZhciBCPTA7TC5sZW5ndGghPT1ZLmxlbmd0aCYmQisrO2Zvcih2YXIgVz1NYXRoLm1p''@;'; put 'put ''bihMLmxlbmd0aCxZLmxlbmd0aCksWj0wO1o8VzsrK1opQis9TFtaXV5ZW1pdO3JldHVybiBCfShMLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1MLHRoaXMuX2Np''@;'; put 'put ''cGhlci5zY3J1YigpfSxQLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IV8uaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVy''@;'; put 'put ''biB0aGlzLl9hdXRoVGFnfSxQLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKFkpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPVl9LFAucHJvdG90eXBl''@;'; put 'put ''LnNldEFBRD1mdW5jdGlvbihZKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoWSksdGhpcy5fYWxlbis9WS5sZW5ndGh9LGNlLmV4cG9ydHM9UH0sNDMzODg6KGNl''@;'; put 'put ''LEosYik9Pnt2YXIgRD1iKDM1MCksXz1iKDYwMTAyKSxwPWIoMzIxOSk7Si5jcmVhdGVDaXBoZXI9Si5DaXBoZXI9RC5jcmVhdGVDaXBoZXIsSi5jcmVhdGVDaXBoZXJpdj1KLkNpcGhlcml2PUQuY3JlYXRlQ2lwaGVyaXYsSi5jcmVhdGVEZWNpcGhlcj1KLkRlY2lwaGVyPV8uY3JlYXRlRGVj''@;'; put 'put ''aXBoZXIsSi5jcmVhdGVEZWNpcGhlcml2PUouRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsSi5saXN0Q2lwaGVycz1KLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhwKX19LDYwMTAyOihjZSxKLGIpPT57dmFyIEQ9YigxOTMwNyksXz1iKDI3MDU0KS5C''@;'; put 'put ''dWZmZXIscD1iKDYwNTAzKSxOPWIoOTE4MjEpLHc9YigzMjQ3KSxGPWIoMTIzNzUpLEg9YigxODIxMSk7ZnVuY3Rpb24gaihXLFoscSl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBQLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgRi5BRVMoWiksdGhpcy5fcHJldj1f''@;'; put 'put ''LmZyb20ocSksdGhpcy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFAoKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gWShXLFoscSl7dmFyIFE9cFtXLnRvTG93ZXJDYXNlKCldO2lmKCFRKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3Vp''@;'; put 'put ''dGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Xy5mcm9tKHEpKSwiR0NNIiE9PVEubW9kZSYmcS5sZW5ndGghPT1RLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWiYmKFo9Xy5mcm9tKFop''@;'; put 'put ''KSxaLmxlbmd0aCE9PVEua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09US50eXBlP25ldyBOKFEubW9kdWxlLFoscSwhMCk6ImF1dGgiPT09US50eXBlP25ldyBEKFEubW9kdWxlLFoscSwhMCk6bmV3IGoo''@;'; put 'put ''US5tb2R1bGUsWixxKX1iKDcxOTkzKShqLHcpLGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWixxLFE9W107Wj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylxPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFopLFEu''@;'; put 'put ''cHVzaChxKTtyZXR1cm4gXy5jb25jYXQoUSl9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFo9V1sxNV07aWYoWjwxfHxaPjE2KXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8WjspaWYoV1txKygxNi1aKV0hPT1aKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09WilyZXR1cm4gVy5zbGljZSgwLDE2LVopfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhp''@;'; put 'put ''cyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxqLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LFAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihX''@;'; put 'put ''KXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sUC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFcpe3ZhciBaO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBaPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2''@;'; put 'put ''KSxafWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBaPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxaO3JldHVybiBudWxsfSxQLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJl''@;'; put 'put ''dHVybiB0aGlzLmNhY2hlfSxKLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIEIoVyxaKXt2YXIgcT1wW1cudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFE9SChaLCExLHEua2V5LHEuaXYpO3JldHVybiBZKFcsUS5rZXks''@;'; put 'put ''US5pdil9LEouY3JlYXRlRGVjaXBoZXJpdj1ZfSwzNTA6KGNlLEosYik9Pnt2YXIgRD1iKDYwNTAzKSxfPWIoMTkzMDcpLHA9YigyNzA1NCkuQnVmZmVyLE49Yig5MTgyMSksdz1iKDMyNDcpLEY9YigxMjM3NSksSD1iKDE4MjExKTtmdW5jdGlvbiBqKFcsWixxKXt3LmNhbGwodGhpcyksdGhp''@;'; put 'put ''cy5fY2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBGLkFFUyhaKSx0aGlzLl9wcmV2PXAuZnJvbShxKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9Yig3MTk5Mykoaix3KSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3Io''@;'; put 'put ''dmFyIFoscSxRPVtdO1o9dGhpcy5fY2FjaGUuZ2V0KCk7KXE9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWiksUS5wdXNoKHEpO3JldHVybiBwLmNvbmNhdChRKX07dmFyIFA9cC5hbGxvYygxNiwxNik7ZnVuY3Rpb24gTCgpe3RoaXMuY2FjaGU9cC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBZ''@;'; put 'put ''KFcsWixxKXt2YXIgUT1EW1cudG9Mb3dlckNhc2UoKV07aWYoIVEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBaJiYoWj1wLmZyb20oWikpLFoubGVuZ3RoIT09US5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlk''@;'; put 'put ''IGtleSBsZW5ndGggIitaLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1wLmZyb20ocSkpLCJHQ00iIT09US5tb2RlJiZxLmxlbmd0aCE9PVEuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1RLnR5''@;'; put 'put ''cGU/bmV3IE4oUS5tb2R1bGUsWixxKToiYXV0aCI9PT1RLnR5cGU/bmV3IF8oUS5tb2R1bGUsWixxKTpuZXcgaihRLm1vZHVsZSxaLHEpfWoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9''@;'; put 'put ''dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoUCkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sai5wcm90b3R5cGUuc2V0QXV0b1BhZGRp''@;'; put 'put ''bmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1wLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1''@;'; put 'put ''KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFo9cC5hbGxvY1Vuc2FmZShXKSxx''@;'; put 'put ''PS0xOysrcTxXOylaLndyaXRlVUludDgoVyxxKTtyZXR1cm4gcC5jb25jYXQoW3RoaXMuY2FjaGUsWl0pfSxKLmNyZWF0ZUNpcGhlcml2PVksSi5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gQihXLFope3ZhciBxPURbVy50b0xvd2VyQ2FzZSgpXTtpZighcSl0aHJvdyBuZXcgVHlwZUVycm9yKCJp''@;'; put 'put ''bnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgUT1IKFosITEscS5rZXkscS5pdik7cmV0dXJuIFkoVyxRLmtleSxRLml2KX19LDg1OTE3OihjZSxKLGIpPT57dmFyIEQ9YigyNzA1NCkuQnVmZmVyLF89RC5hbGxvYygxNiwwKTtmdW5jdGlvbiBOKEYpe3ZhciBIPUQuYWxsb2NVbnNhZmUoMTYpO3Jl''@;'; put 'put ''dHVybiBILndyaXRlVUludDMyQkUoRlswXT4+PjAsMCksSC53cml0ZVVJbnQzMkJFKEZbMV0+Pj4wLDQpLEgud3JpdGVVSW50MzJCRShGWzJdPj4+MCw4KSxILndyaXRlVUludDMyQkUoRlszXT4+PjAsMTIpLEh9ZnVuY3Rpb24gdyhGKXt0aGlzLmg9Rix0aGlzLnN0YXRlPUQuYWxsb2MoMTYs''@;'; put 'put ''MCksdGhpcy5jYWNoZT1ELmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKEYpe2Zvcih2YXIgSD0tMTsrK0g8Ri5sZW5ndGg7KXRoaXMuc3RhdGVbSF1ePUZbSF07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBSLFAsRj1mdW5jdGlvbiBwKEYpe3JldHVybltGLnJlYWRVSW50MzJCRSgwKSxGLnJlYWRVSW50MzJCRSg0KSxGLnJlYWRVSW50MzJCRSg4KSxGLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEg9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KEwvOCld''@;'; put 'put ''JjE8PDctTCU4KSYmKEhbMF1ePUZbMF0sSFsxXV49RlsxXSxIWzJdXj1GWzJdLEhbM11ePUZbM10pLFA9ISEoMSZGWzNdKSxSPTM7Uj4wO1ItLSlGW1JdPUZbUl0+Pj4xfCgxJkZbUi0xXSk8PDMxO0ZbMF09RlswXT4+PjEsUCYmKEZbMF09RlswXV4yMjU8PDI0KX10aGlzLnN0YXRlPU4oSCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLmNhY2hlPUQuY29uY2F0KFt0aGlzLmNhY2hlLEZdKTtmb3IodmFyIEg7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylIPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdo''@;'; put 'put ''YXNoKEgpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihGLEgpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChELmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goTihbMCxGLDAsSF0pKSx0aGlzLnN0YXRlfSxjZS5leHBvcnRzPXd9LDk1NzI1OmNl''@;'; put 'put ''PT57Y2UuZXhwb3J0cz1mdW5jdGlvbiBKKGIpe2Zvcih2YXIgXyxEPWIubGVuZ3RoO0QtLTspe2lmKDI1NSE9PShfPWIucmVhZFVJbnQ4KEQpKSl7XysrLGIud3JpdGVVSW50OChfLEQpO2JyZWFrfWIud3JpdGVVSW50OCgwLEQpfX19LDM0MTMzOihjZSxKLGIpPT57dmFyIEQ9YigxMzU0Nik7''@;'; put 'put ''Si5lbmNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49RChwLF8uX3ByZXYpO3JldHVybiBfLl9wcmV2PV8uX2NpcGhlci5lbmNyeXB0QmxvY2soTiksXy5fcHJldn0sSi5kZWNyeXB0PWZ1bmN0aW9uKF8scCl7dmFyIE49Xy5fcHJldjtfLl9wcmV2PXA7dmFyIHc9Xy5fY2lwaGVyLmRlY3J5cHRC''@;'; put 'put ''bG9jayhwKTtyZXR1cm4gRCh3LE4pfX0sMTcwOTA6KGNlLEosYik9Pnt2YXIgRD1iKDI3MDU0KS5CdWZmZXIsXz1iKDEzNTQ2KTtmdW5jdGlvbiBwKE4sdyxGKXt2YXIgSD13Lmxlbmd0aCxSPV8odyxOLl9jYWNoZSk7cmV0dXJuIE4uX2NhY2hlPU4uX2NhY2hlLnNsaWNlKEgpLE4uX3ByZXY9''@;'; put 'put ''RC5jb25jYXQoW04uX3ByZXYsRj93OlJdKSxSfUouZW5jcnlwdD1mdW5jdGlvbihOLHcsRil7Zm9yKHZhciBSLEg9RC5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1OLl9jYWNoZS5sZW5ndGgmJihOLl9jYWNoZT1OLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpLE4uX3By''@;'; put 'put ''ZXY9RC5hbGxvY1Vuc2FmZSgwKSksIShOLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7SD1ELmNvbmNhdChbSCxwKE4sdyxGKV0pO2JyZWFrfUg9RC5jb25jYXQoW0gscChOLHcuc2xpY2UoMCxSPU4uX2NhY2hlLmxlbmd0aCksRildKSx3PXcuc2xpY2UoUil9cmV0dXJuIEh9fSw3MTAzOToo''@;'; put 'put ''Y2UsSixiKT0+e3ZhciBEPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKE4sdyxGKXtmb3IodmFyIEwsWSxSPS0xLFA9MDsrK1I8ODspUCs9KDEyOCYoWT1OLl9jaXBoZXIuZW5jcnlwdEJsb2NrKE4uX3ByZXYpWzBdXihMPXcmMTw8Ny1SPzEyODowKSkpPj5SJTgsTi5fcHJldj1wKE4uX3By''@;'; put 'put ''ZXYsRj9MOlkpO3JldHVybiBQfWZ1bmN0aW9uIHAoTix3KXt2YXIgRj1OLmxlbmd0aCxIPS0xLFI9RC5hbGxvY1Vuc2FmZShOLmxlbmd0aCk7Zm9yKE49RC5jb25jYXQoW04sRC5mcm9tKFt3XSldKTsrK0g8RjspUltIXT1OW0hdPDwxfE5bSCsxXT4+NztyZXR1cm4gUn1KLmVuY3J5cHQ9ZnVu''@;'; put 'put ''Y3Rpb24oTix3LEYpe2Zvcih2YXIgSD13Lmxlbmd0aCxSPUQuYWxsb2NVbnNhZmUoSCksaj0tMTsrK2o8SDspUltqXT1fKE4sd1tqXSxGKTtyZXR1cm4gUn19LDcyNTc2OihjZSxKLGIpPT57dmFyIEQ9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIF8ocCxOLHcpe3ZhciBIPXAuX2NpcGhlci5l''@;'; put 'put ''bmNyeXB0QmxvY2socC5fcHJldilbMF1eTjtyZXR1cm4gcC5fcHJldj1ELmNvbmNhdChbcC5fcHJldi5zbGljZSgxKSxELmZyb20oW3c/TjpIXSldKSxIfUouZW5jcnlwdD1mdW5jdGlvbihwLE4sdyl7Zm9yKHZhciBGPU4ubGVuZ3RoLEg9RC5hbGxvY1Vuc2FmZShGKSxSPS0xOysrUjxGOylI''@;'; put 'put ''W1JdPV8ocCxOW1JdLHcpO3JldHVybiBIfX0sNzAzMzY6KGNlLEosYik9Pnt2YXIgRD1iKDEzNTQ2KSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoOTU3MjUpO2Z1bmN0aW9uIE4oRil7dmFyIEg9Ri5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhGLl9wcmV2KTtyZXR1cm4gcChGLl9wcmV2KSxIfUou''@;'; put 'put ''ZW5jcnlwdD1mdW5jdGlvbihGLEgpe3ZhciBSPU1hdGguY2VpbChILmxlbmd0aC8xNiksaj1GLl9jYWNoZS5sZW5ndGg7Ri5fY2FjaGU9Xy5jb25jYXQoW0YuX2NhY2hlLF8uYWxsb2NVbnNhZmUoMTYqUildKTtmb3IodmFyIFA9MDtQPFI7UCsrKXt2YXIgTD1OKEYpLFk9aisxNipQO0YuX2Nh''@;'; put 'put ''Y2hlLndyaXRlVUludDMyQkUoTFswXSxZKzApLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxZKzQpLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxZKzgpLEYuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxZKzEyKX12YXIgQj1GLl9jYWNoZS5zbGljZSgwLEgubGVuZ3RoKTtyZXR1''@;'; put 'put ''cm4gRi5fY2FjaGU9Ri5fY2FjaGUuc2xpY2UoSC5sZW5ndGgpLEQoSCxCKX19LDM3NTEzOihjZSxKKT0+e0ouZW5jcnlwdD1mdW5jdGlvbihiLEQpe3JldHVybiBiLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEQpfSxKLmRlY3J5cHQ9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5fY2lwaGVyLmRlY3J5''@;'; put 'put ''cHRCbG9jayhEKX19LDYwNTAzOihjZSxKLGIpPT57dmFyIEQ9e0VDQjpiKDM3NTEzKSxDQkM6YigzNDEzMyksQ0ZCOmIoMTcwOTApLENGQjg6Yig3MjU3NiksQ0ZCMTpiKDcxMDM5KSxPRkI6Yig0Njg1NCksQ1RSOmIoNzAzMzYpLEdDTTpiKDcwMzM2KX0sXz1iKDMyMTkpO2Zvcih2YXIgcCBp''@;'; put 'put ''biBfKV9bcF0ubW9kdWxlPURbX1twXS5tb2RlXTtjZS5leHBvcnRzPV99LDQ2ODU0OihjZSxKLGIpPT57dmFyIEQ9YigxMzU0Nik7ZnVuY3Rpb24gXyhwKXtyZXR1cm4gcC5fcHJldj1wLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHAuX3ByZXYpLHAuX3ByZXZ9Si5lbmNyeXB0PWZ1bmN0aW9uKHAs''@;'; put 'put ''Til7Zm9yKDtwLl9jYWNoZS5sZW5ndGg8Ti5sZW5ndGg7KXAuX2NhY2hlPUJ1ZmZlci5jb25jYXQoW3AuX2NhY2hlLF8ocCldKTt2YXIgdz1wLl9jYWNoZS5zbGljZSgwLE4ubGVuZ3RoKTtyZXR1cm4gcC5fY2FjaGU9cC5fY2FjaGUuc2xpY2UoTi5sZW5ndGgpLEQoTix3KX19LDkxODIxOihj''@;'; put 'put ''ZSxKLGIpPT57dmFyIEQ9YigxMjM3NSksXz1iKDI3MDU0KS5CdWZmZXIscD1iKDMyNDcpO2Z1bmN0aW9uIHcoRixILFIsail7cC5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgRC5BRVMoSCksdGhpcy5fcHJldj1fLmZyb20oUiksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlz''@;'; put 'put ''Ll9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9aix0aGlzLl9tb2RlPUZ9Yig3MTk5MykodyxwKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxGLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''ZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sY2UuZXhwb3J0cz13fSw4ODg2MjooY2UsSixiKT0+e3ZhciBEPWIoMzk3OTkpLF89Yig0MzM4OCkscD1iKDYwNTAzKSxOPWIoNTk1NzEpLHc9YigxODIxMSk7ZnVuY3Rpb24gUihMLFksQil7aWYoTD1MLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkscFtMXSlyZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihMLFksQik7aWYoTltMXSlyZXR1cm4gbmV3IEQoe2tleTpZLGl2OkIsbW9kZTpMfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gaihMLFksQil7aWYoTD1MLnRvTG93ZXJDYXNlKCkscFtM''@;'; put 'put ''XSlyZXR1cm4gXy5jcmVhdGVEZWNpcGhlcml2KEwsWSxCKTtpZihOW0xdKXJldHVybiBuZXcgRCh7a2V5OlksaXY6Qixtb2RlOkwsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfUouY3JlYXRlQ2lwaGVyPUouQ2lwaGVyPWZ1bmN0aW9uIEYo''@;'; put 'put ''TCxZKXt2YXIgQixXO2lmKEw9TC50b0xvd2VyQ2FzZSgpLHBbTF0pQj1wW0xdLmtleSxXPXBbTF0uaXY7ZWxzZXtpZighTltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtCPTgqTltMXS5rZXksVz1OW0xdLml2fXZhciBaPXcoWSwhMSxCLFcpO3JldHVybiBS''@;'; put 'put ''KEwsWi5rZXksWi5pdil9LEouY3JlYXRlQ2lwaGVyaXY9Si5DaXBoZXJpdj1SLEouY3JlYXRlRGVjaXBoZXI9Si5EZWNpcGhlcj1mdW5jdGlvbiBIKEwsWSl7dmFyIEIsVztpZihMPUwudG9Mb3dlckNhc2UoKSxwW0xdKUI9cFtMXS5rZXksVz1wW0xdLml2O2Vsc2V7aWYoIU5bTF0pdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Qj04Kk5bTF0ua2V5LFc9TltMXS5pdn12YXIgWj13KFksITEsQixXKTtyZXR1cm4gaihMLFoua2V5LFouaXYpfSxKLmNyZWF0ZURlY2lwaGVyaXY9Si5EZWNpcGhlcml2PWosSi5saXN0Q2lwaGVycz1KLmdldENpcGhlcnM9ZnVu''@;'; put 'put ''Y3Rpb24gUCgpe3JldHVybiBPYmplY3Qua2V5cyhOKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sMzk3OTk6KGNlLEosYik9Pnt2YXIgRD1iKDMyNDcpLF89Yig3MTU0OSkscD1iKDcxOTkzKSxOPWIoMjcwNTQpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjpfLkNCQy5pbnN0YW50aWF0ZShf''@;'; put 'put ''LkVERSksImRlcy1lZGUzIjpfLkVERSwiZGVzLWVkZS1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZSI6Xy5FREUsImRlcy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uREVTKSwiZGVzLWVjYiI6Xy5ERVN9O2Z1bmN0aW9uIEYoSCl7RC5jYWxsKHRoaXMpO3ZhciBQLFI9''@;'; put 'put ''SC5tb2RlLnRvTG93ZXJDYXNlKCksaj13W1JdO1A9SC5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9SC5rZXk7Ti5pc0J1ZmZlcihMKXx8KEw9Ti5mcm9tKEwpKSwoImRlcy1lZGUiPT09Unx8ImRlcy1lZGUtY2JjIj09PVIpJiYoTD1OLmNvbmNhdChbTCxMLnNsaWNlKDAsOCld''@;'; put 'put ''KSk7dmFyIFk9SC5pdjtOLmlzQnVmZmVyKFkpfHwoWT1OLmZyb20oWSkpLHRoaXMuX2Rlcz1qLmNyZWF0ZSh7a2V5OkwsaXY6WSx0eXBlOlB9KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLGNlLmV4cG9ydHM9RixwKEYsRCksRi5wcm90b3R5cGUuX3VwZGF0''@;'; put 'put ''ZT1mdW5jdGlvbihIKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoSCkpfSxGLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gTi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDU5NTcxOihjZSxKKT0+e0pbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sSlsiZGVzLWNi''@;'; put 'put ''YyJdPUouZGVzPXtrZXk6OCxpdjo4fSxKWyJkZXMtZWRlMy1jYmMiXT1KLmRlczM9e2tleToyNCxpdjo4fSxKWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sSlsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LEpbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwxNDEwNTooY2UsSixiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDkxNyksXz1iKDMzNDIpLHA9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIE4oSCl7dmFyIGosUj1ILm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve2o9bmV3IEQoXyhSKSl9d2hpbGUoai5jbXAoSC5tb2R1bHVzKT49MHx8IWoudW1vZChILnByaW1lMSl8fCFq''@;'; put 'put ''LnVtb2QoSC5wcmltZTIpKTtyZXR1cm4gan1mdW5jdGlvbiBGKEgsUil7dmFyIGo9ZnVuY3Rpb24gdyhIKXt2YXIgUj1OKEgpO3JldHVybntibGluZGVyOlIudG9SZWQoRC5tb250KEgubW9kdWx1cykpLnJlZFBvdyhuZXcgRChILnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRl''@;'; put 'put ''cjpSLmludm0oSC5tb2R1bHVzKX19KFIpLFA9Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBEKEgpLm11bChqLmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKSxZPUwudG9SZWQoRC5tb250KFIucHJpbWUxKSksQj1MLnRvUmVkKEQubW9udChSLnByaW1lMikpLFc9Ui5jb2VmZmljaWVudCxa''@;'; put 'put ''PVIucHJpbWUxLHE9Ui5wcmltZTIsUT1ZLnJlZFBvdyhSLmV4cG9uZW50MSkuZnJvbVJlZCgpLFg9Qi5yZWRQb3coUi5leHBvbmVudDIpLmZyb21SZWQoKSx0ZT1RLmlzdWIoWCkuaW11bChXKS51bW9kKFopLmltdWwocSk7cmV0dXJuIFguaWFkZCh0ZSkuaW11bChqLnVuYmxpbmRlcikudW1v''@;'; put 'put ''ZChSLm1vZHVsdXMpLnRvQXJyYXlMaWtlKHAsImJlIixQKX1GLmdldHI9TixjZS5leHBvcnRzPUZ9LDk5NTYwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Yig2Mjk1MSl9LDc5MTQzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjcwNTQpLkJ1ZmZlcixfPWIo''@;'; put 'put ''NjcyMTEpLHA9Yig1OTQyKSxOPWIoNzE5OTMpLHc9Yig0MzE1MCksRj1iKDc0NzU0KSxIPWIoNjI5NTEpO2Z1bmN0aW9uIFIoWSl7cC5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBCPUhbWV07aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFz''@;'; put 'put ''aFR5cGU9Qi5oYXNoLHRoaXMuX2hhc2g9XyhCLmhhc2gpLHRoaXMuX3RhZz1CLmlkLHRoaXMuX3NpZ25UeXBlPUIuc2lnbn1mdW5jdGlvbiBqKFkpe3AuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgQj1IW1ldO2lmKCFCKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIp''@;'; put 'put ''O3RoaXMuX2hhc2g9XyhCLmhhc2gpLHRoaXMuX3RhZz1CLmlkLHRoaXMuX3NpZ25UeXBlPUIuc2lnbn1mdW5jdGlvbiBQKFkpe3JldHVybiBuZXcgUihZKX1mdW5jdGlvbiBMKFkpe3JldHVybiBuZXcgaihZKX1PYmplY3Qua2V5cyhIKS5mb3JFYWNoKGZ1bmN0aW9uKFkpe0hbWV0uaWQ9RC5m''@;'; put 'put ''cm9tKEhbWV0uaWQsImhleCIpLEhbWS50b0xvd2VyQ2FzZSgpXT1IW1ldfSksTihSLHAuV3JpdGFibGUpLFIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihCLFcsWil7dGhpcy5faGFzaC51cGRhdGUoQiksWigpfSxSLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQixXKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBCP0QuZnJvbShCLFcpOkIpLHRoaXN9LFIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oQixXKXt0aGlzLmVuZCgpO3ZhciBaPXRoaXMuX2hhc2guZGlnZXN0KCkscT13KFosQix0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlz''@;'; put 'put ''Ll90YWcpO3JldHVybiBXP3EudG9TdHJpbmcoVyk6cX0sTihqLHAuV3JpdGFibGUpLGoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihCLFcsWil7dGhpcy5faGFzaC51cGRhdGUoQiksWigpfSxqLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oQixXKXtyZXR1cm4gdGhpcy5faGFzaC51cGRh''@;'; put 'put ''dGUoInN0cmluZyI9PXR5cGVvZiBCP0QuZnJvbShCLFcpOkIpLHRoaXN9LGoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihCLFcsWil7dmFyIHE9InN0cmluZyI9PXR5cGVvZiBXP0QuZnJvbShXLFopOlc7dGhpcy5lbmQoKTt2YXIgUT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBGKHEs''@;'; put 'put ''USxCLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LGNlLmV4cG9ydHM9e1NpZ246UCxWZXJpZnk6TCxjcmVhdGVTaWduOlAsY3JlYXRlVmVyaWZ5Okx9fSw0MzE1MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI3MDU0KS5CdWZmZXIsXz1iKDU2NDMyKSxwPWIoMTQxMDUpLE49''@;'; put 'put ''Yig5MDUxOCkuZWMsdz1iKDkxNyksRj1iKDY1NjY3KSxIPWIoNjQ1ODkpO2Z1bmN0aW9uIEIoWCx0ZSxyZSxvZSl7aWYoKFg9RC5mcm9tKFgudG9BcnJheSgpKSkubGVuZ3RoPHRlLmJ5dGVMZW5ndGgoKSl7dmFyIGdlPUQuYWxsb2ModGUuYnl0ZUxlbmd0aCgpLVgubGVuZ3RoKTtYPUQuY29u''@;'; put 'put ''Y2F0KFtnZSxYXSl9dmFyIF9lPXJlLmxlbmd0aCxUZT1mdW5jdGlvbiBaKFgsdGUpe1g9KFg9VyhYLHRlKSkubW9kKHRlKTt2YXIgcmU9RC5mcm9tKFgudG9BcnJheSgpKTtpZihyZS5sZW5ndGg8dGUuYnl0ZUxlbmd0aCgpKXt2YXIgb2U9RC5hbGxvYyh0ZS5ieXRlTGVuZ3RoKCktcmUubGVu''@;'; put 'put ''Z3RoKTtyZT1ELmNvbmNhdChbb2UscmVdKX1yZXR1cm4gcmV9KHJlLHRlKSxTZT1ELmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciB6ZT1ELmFsbG9jKF9lKTtyZXR1cm4gemU9XyhvZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFswXSkpLnVwZGF0ZShYKS51cGRhdGUoVGUpLmRpZ2Vz''@;'; put 'put ''dCgpLFNlPV8ob2UsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCkse2s6emU9XyhvZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoRC5mcm9tKFsxXSkpLnVwZGF0ZShYKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9XyhvZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVyhYLHRlKXt2''@;'; put 'put ''YXIgcmU9bmV3IHcoWCksb2U9KFgubGVuZ3RoPDwzKS10ZS5iaXRMZW5ndGgoKTtyZXR1cm4gb2U+MCYmcmUuaXNocm4ob2UpLHJlfWZ1bmN0aW9uIHEoWCx0ZSxyZSl7dmFyIG9lLGdlO2Rve2ZvcihvZT1ELmFsbG9jKDApOzgqb2UubGVuZ3RoPFguYml0TGVuZ3RoKCk7KXRlLnY9XyhyZSx0''@;'; put 'put ''ZS5rKS51cGRhdGUodGUudikuZGlnZXN0KCksb2U9RC5jb25jYXQoW29lLHRlLnZdKTtnZT1XKG9lLFgpLHRlLms9XyhyZSx0ZS5rKS51cGRhdGUodGUudikudXBkYXRlKEQuZnJvbShbMF0pKS5kaWdlc3QoKSx0ZS52PV8ocmUsdGUuaykudXBkYXRlKHRlLnYpLmRpZ2VzdCgpfXdoaWxlKC0x''@;'; put 'put ''IT09Z2UuY21wKFgpKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gUShYLHRlLHJlLG9lKXtyZXR1cm4gWC50b1JlZCh3Lm1vbnQocmUpKS5yZWRQb3codGUpLmZyb21SZWQoKS5tb2Qob2UpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gaihYLHRlLHJlLG9lLGdlKXt2YXIgX2U9Rih0ZSk7aWYoX2UuY3VydmUp''@;'; put 'put ''e2lmKCJlY2RzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUChYLHRlKXt2YXIgcmU9SFt0ZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFyZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3Vy''@;'; put 'put ''dmUgIit0ZS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBfZT1uZXcgTihyZSkua2V5RnJvbVByaXZhdGUodGUucHJpdmF0ZUtleSkuc2lnbihYKTtyZXR1cm4gRC5mcm9tKF9lLnRvREVSKCkpfShYLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3''@;'; put 'put ''cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIEwoWCx0ZSxyZSl7Zm9yKHZhciB6ZSxvZT10ZS5wYXJhbXMucHJpdl9rZXksZ2U9dGUucGFyYW1zLnAsX2U9dGUucGFyYW1zLnEsVGU9dGUucGFyYW1zLmcsU2U9bmV3IHcoMCksej1XKFgsX2UpLm1vZChfZSksZz0hMSx5''@;'; put 'put ''PUIob2UsX2UsWCxyZSk7ITE9PT1nOylTZT1RKFRlLHplPXEoX2UseSxyZSksZ2UsX2UpLDA9PT0oZz16ZS5pbnZtKF9lKS5pbXVsKHouYWRkKG9lLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYoZz0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIFkoWCx0ZSl7WD1YLnRvQXJy''@;'; put 'put ''YXkoKSx0ZT10ZS50b0FycmF5KCksMTI4JlhbMF0mJihYPVswXS5jb25jYXQoWCkpLDEyOCZ0ZVswXSYmKHRlPVswXS5jb25jYXQodGUpKTt2YXIgb2U9WzQ4LFgubGVuZ3RoK3RlLmxlbmd0aCs0LDIsWC5sZW5ndGhdO3JldHVybiBvZT1vZS5jb25jYXQoWCxbMix0ZS5sZW5ndGhdLHRlKSxE''@;'; put 'put ''LmZyb20ob2UpfShTZSxnKX0oWCxfZSxyZSl9aWYoInJzYSIhPT1vZSYmImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT10ZS5wYWRkaW5nJiYxIT09dGUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwg''@;'; put 'put ''b3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7WD1ELmNvbmNhdChbZ2UsWF0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07WC5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgemU9LTE7Kyt6ZTxYLmxl''@;'; put 'put ''bmd0aDspU2UucHVzaChYW3plXSk7cmV0dXJuIHAoU2UsX2UpfSxjZS5leHBvcnRzLmdldEtleT1CLGNlLmV4cG9ydHMubWFrZUtleT1xfSw3NDc1NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI3MDU0KS5CdWZmZXIsXz1iKDkxNykscD1iKDkwNTE4KS5lYyxOPWIoNjU2Njcp''@;'; put 'put ''LHc9Yig2NDU4OSk7ZnVuY3Rpb24gaihQLEwpe2lmKFAuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoUC5jbXAoTCk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gRihQLEwsWSxCLFcpe3ZhciBaPU4oWSk7''@;'; put 'put ''aWYoImVjIj09PVoudHlwZSl7aWYoImVjZHNhIiE9PUImJiJlY2RzYS9yc2EiIT09Qil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBIKFAsTCxZKXt2YXIgQj13W1kuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighQil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitZLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBwKEIpLnZlcmlmeShMLFAsWS5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShQLEwsWil9aWYoImRzYSI9PT1aLnR5cGUpe2lmKCJkc2EiIT09Qil0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBSKFAsTCxZKXt2YXIgQj1ZLmRhdGEucCxXPVkuZGF0YS5xLFo9WS5kYXRhLmcscT1ZLmRhdGEucHViX2tleSxRPU4uc2lnbmF0dXJlLmRlY29kZShQLCJkZXIiKSxYPVEucyx0ZT1RLnI7aihY''@;'; put 'put ''LFcpLGoodGUsVyk7dmFyIHJlPV8ubW9udChCKSxvZT1YLmludm0oVyk7cmV0dXJuIDA9PT1aLnRvUmVkKHJlKS5yZWRQb3cobmV3IF8oTCkubXVsKG9lKS5tb2QoVykpLmZyb21SZWQoKS5tdWwocS50b1JlZChyZSkucmVkUG93KHRlLm11bChvZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChC''@;'; put 'put ''KS5tb2QoVykuY21wKHRlKX0oUCxMLFopfWlmKCJyc2EiIT09QiYmImVjZHNhL3JzYSIhPT1CKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7TD1ELmNvbmNhdChbVyxMXSk7Zm9yKHZhciBxPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCksUT1bMV0sWD0wO0wubGVuZ3Ro''@;'; put 'put ''K1EubGVuZ3RoKzI8cTspUS5wdXNoKDI1NSksWCs9MTtRLnB1c2goMCk7Zm9yKHZhciB0ZT0tMTsrK3RlPEwubGVuZ3RoOylRLnB1c2goTFt0ZV0pO1E9RC5mcm9tKFEpO3ZhciByZT1fLm1vbnQoWi5tb2R1bHVzKTtQPShQPW5ldyBfKFApLnRvUmVkKHJlKSkucmVkUG93KG5ldyBfKFoucHVi''@;'; put 'put ''bGljRXhwb25lbnQpKSxQPUQuZnJvbShQLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBvZT1YPDg/MTowO2ZvcihxPU1hdGgubWluKFAubGVuZ3RoLFEubGVuZ3RoKSxQLmxlbmd0aCE9PVEubGVuZ3RoJiYob2U9MSksdGU9LTE7Kyt0ZTxxOylvZXw9UFt0ZV1eUVt0ZV07cmV0dXJuIDA9PT1v''@;'; put 'put ''ZX19LDEzNTQ2OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiLEQpe2Zvcih2YXIgXz1NYXRoLm1pbihiLmxlbmd0aCxELmxlbmd0aCkscD1uZXcgQnVmZmVyKF8pLE49MDtOPF87KytOKXBbTl09YltOXV5EW05dO3JldHVybiBwfX0sODM4Mzg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEQ9YigxMzk4MSksXz1iKDIyMDIwKSxwPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtKLkJ1ZmZlcj1ILEouU2xvd0J1ZmZlcj1mdW5jdGlvbiBYKEll''@;'; put 'put ''KXtyZXR1cm4rSWUhPUllJiYoSWU9MCksSC5hbGxvYygrSWUpfSxKLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBOPTIxNDc0ODM2NDc7ZnVuY3Rpb24gRihJZSl7aWYoSWU+Til0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0llKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAi''@;'; put 'put ''c2l6ZSInKTt2YXIgSGU9bmV3IFVpbnQ4QXJyYXkoSWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoSGUsSC5wcm90b3R5cGUpLEhlfWZ1bmN0aW9uIEgoSWUsSGUsRGUpe2lmKCJudW1iZXIiPT10eXBlb2YgSWUpe2lmKCJzdHJpbmciPT10eXBlb2YgSGUpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIEwoSWUpfXJldHVybiBSKEllLEhlLERlKX1mdW5jdGlvbiBSKEllLEhlLERlKXtpZigic3RyaW5nIj09dHlwZW9mIEllKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBZKEllLEhlKXtpZigoInN0cmluZyIhPXR5cGVvZiBIZXx8IiI9PT1IZSkmJihIZT0idXRmOCIpLCFILmlzRW5jb2RpbmcoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSGUpO3ZhciBEZT0wfHRlKEllLEhlKSxrZT1GKERlKSxfdD1rZS53cml0ZShJZSxI''@;'; put 'put ''ZSk7cmV0dXJuIF90IT09RGUmJihrZT1rZS5zbGljZSgwLF90KSksa2V9KEllLEhlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoSWUpKXJldHVybiBmdW5jdGlvbiBXKEllKXtpZihBZShJZSxVaW50OEFycmF5KSl7dmFyIEhlPW5ldyBVaW50OEFycmF5KEllKTtyZXR1cm4gWihIZS5idWZmZXIs''@;'; put 'put ''SGUuYnl0ZU9mZnNldCxIZS5ieXRlTGVuZ3RoKX1yZXR1cm4gQihJZSl9KEllKTtpZihudWxsPT1JZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1s''@;'; put 'put ''aWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBJZSk7aWYoQWUoSWUsQXJyYXlCdWZmZXIpfHxJZSYmQWUoSWUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKEFlKEllLFNoYXJlZEFycmF5QnVmZmVyKXx8SWUmJkFlKEllLmJ1ZmZl''@;'; put 'put ''cixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBaKEllLEhlLERlKTtpZigibnVtYmVyIj09dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBrZT1J''@;'; put 'put ''ZS52YWx1ZU9mJiZJZS52YWx1ZU9mKCk7aWYobnVsbCE9a2UmJmtlIT09SWUpcmV0dXJuIEguZnJvbShrZSxIZSxEZSk7dmFyIF90PWZ1bmN0aW9uIHEoSWUpe2lmKEguaXNCdWZmZXIoSWUpKXt2YXIgSGU9MHxRKEllLmxlbmd0aCksRGU9RihIZSk7cmV0dXJuIDA9PT1EZS5sZW5ndGh8fEll''@;'; put 'put ''LmNvcHkoRGUsMCwwLEhlKSxEZX1yZXR1cm4gdm9pZCAwIT09SWUubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgSWUubGVuZ3RofHxGZShJZS5sZW5ndGgpP0YoMCk6QihJZSk6IkJ1ZmZlciI9PT1JZS50eXBlJiZBcnJheS5pc0FycmF5KEllLmRhdGEpP0IoSWUuZGF0YSk6dm9pZCAwfShJZSk7''@;'; put 'put ''aWYoX3QpcmV0dXJuIF90O2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBJZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBILmZyb20oSWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIiksSGUsRGUpO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIEllKX1mdW5jdGlvbiBqKEllKXtpZigibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoSWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0llKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBM''@;'; put 'put ''KEllKXtyZXR1cm4gaihJZSksRihJZTwwPzA6MHxRKEllKSl9ZnVuY3Rpb24gQihJZSl7Zm9yKHZhciBIZT1JZS5sZW5ndGg8MD8wOjB8UShJZS5sZW5ndGgpLERlPUYoSGUpLGtlPTA7a2U8SGU7a2UrPTEpRGVba2VdPTI1NSZJZVtrZV07cmV0dXJuIERlfWZ1bmN0aW9uIFooSWUsSGUsRGUp''@;'; put 'put ''e2lmKEhlPDB8fEllLmJ5dGVMZW5ndGg8SGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKEllLmJ5dGVMZW5ndGg8SGUrKERlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZm''@;'; put 'put ''ZXIgYm91bmRzJyk7dmFyIGtlO3JldHVybiBrZT12b2lkIDA9PT1IZSYmdm9pZCAwPT09RGU/bmV3IFVpbnQ4QXJyYXkoSWUpOnZvaWQgMD09PURlP25ldyBVaW50OEFycmF5KEllLEhlKTpuZXcgVWludDhBcnJheShJZSxIZSxEZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGtlLEgucHJvdG90''@;'; put 'put ''eXBlKSxrZX1mdW5jdGlvbiBRKEllKXtpZihJZT49Til0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrTi50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfEllfWZ1bmN0aW9uIHRlKEllLEhl''@;'; put 'put ''KXtpZihILmlzQnVmZmVyKEllKSlyZXR1cm4gSWUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhJZSl8fEFlKEllLEFycmF5QnVmZmVyKSlyZXR1cm4gSWUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIEllKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1''@;'; put 'put ''bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBJZSk7dmFyIERlPUllLmxlbmd0aCxrZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFrZSYmMD09PURlKXJldHVybiAw''@;'; put 'put ''O2Zvcih2YXIgX3Q9ITE7Oylzd2l0Y2goSGUpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIERlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIG90KEllKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRm''@;'; put 'put ''LTE2bGUiOnJldHVybiAyKkRlO2Nhc2UiaGV4IjpyZXR1cm4gRGU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gWGUoSWUpLmxlbmd0aDtkZWZhdWx0OmlmKF90KXJldHVybiBrZT8tMTpvdChJZSkubGVuZ3RoO0hlPSgiIitIZSkudG9Mb3dlckNhc2UoKSxfdD0hMH19ZnVuY3Rpb24gcmUoSWUs''@;'; put 'put ''SGUsRGUpe3ZhciBrZT0hMTtpZigodm9pZCAwPT09SGV8fEhlPDApJiYoSGU9MCksSGU+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09RGV8fERlPnRoaXMubGVuZ3RoKSYmKERlPXRoaXMubGVuZ3RoKSxEZTw9MCl8fChEZT4+Pj0wKTw9KEhlPj4+PTApKXJldHVybiIiO2ZvcihJZXx8KEllPSJ1''@;'; put 'put ''dGY4Iik7Oylzd2l0Y2goSWUpe2Nhc2UiaGV4IjpyZXR1cm4gRSh0aGlzLEhlLERlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB4KHRoaXMsSGUsRGUpO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMsSGUsRGUpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFUodGhp''@;'; put 'put ''cyxIZSxEZSk7Y2FzZSJiYXNlNjQiOnJldHVybiB5KHRoaXMsSGUsRGUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gbSh0aGlzLEhlLERlKTtkZWZhdWx0OmlmKGtlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rp''@;'; put 'put ''bmc6ICIrSWUpO0llPShJZSsiIikudG9Mb3dlckNhc2UoKSxrZT0hMH19ZnVuY3Rpb24gb2UoSWUsSGUsRGUpe3ZhciBrZT1JZVtIZV07SWVbSGVdPUllW0RlXSxJZVtEZV09a2V9ZnVuY3Rpb24gZ2UoSWUsSGUsRGUsa2UsX3Qpe2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBEZT8oa2U9RGUsRGU9MCk6RGU+MjE0NzQ4MzY0Nz9EZT0yMTQ3NDgzNjQ3OkRlPC0yMTQ3NDgzNjQ4JiYoRGU9LTIxNDc0ODM2NDgpLEZlKERlPStEZSkmJihEZT1fdD8wOkllLmxlbmd0aC0xKSxEZTwwJiYoRGU9SWUubGVuZ3RoK0RlKSxEZT49SWUubGVuZ3RoKXtpZihf''@;'; put 'put ''dClyZXR1cm4tMTtEZT1JZS5sZW5ndGgtMX1lbHNlIGlmKERlPDApe2lmKCFfdClyZXR1cm4tMTtEZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgSGUmJihIZT1ILmZyb20oSGUsa2UpKSxILmlzQnVmZmVyKEhlKSlyZXR1cm4gMD09PUhlLmxlbmd0aD8tMTpfZShJZSxIZSxEZSxrZSxfdCk7aWYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBIZSlyZXR1cm4gSGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9fdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoSWUsSGUsRGUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNh''@;'; put 'put ''bGwoSWUsSGUsRGUpOl9lKEllLFtIZV0sRGUsa2UsX3QpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIF9lKEllLEhlLERlLGtlLF90KXt2YXIgU3QsbnQ9MSxKZT1JZS5sZW5ndGgsbG49SGUubGVuZ3RoO2lmKHZv''@;'; put 'put ''aWQgMCE9PWtlJiYoInVjczIiPT09KGtlPVN0cmluZyhrZSkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1rZXx8InV0ZjE2bGUiPT09a2V8fCJ1dGYtMTZsZSI9PT1rZSkpe2lmKEllLmxlbmd0aDwyfHxIZS5sZW5ndGg8MilyZXR1cm4tMTtudD0yLEplLz0yLGxuLz0yLERlLz0yfWZ1bmN0''@;'; put 'put ''aW9uIHl0KHR0LE5lKXtyZXR1cm4gMT09PW50P3R0W05lXTp0dC5yZWFkVUludDE2QkUoTmUqbnQpfWlmKF90KXt2YXIgRHQ9LTE7Zm9yKFN0PURlO1N0PEplO1N0KyspaWYoeXQoSWUsU3QpPT09eXQoSGUsLTE9PT1EdD8wOlN0LUR0KSl7aWYoLTE9PT1EdCYmKER0PVN0KSxTdC1EdCsxPT09''@;'; put 'put ''bG4pcmV0dXJuIER0Km50fWVsc2UtMSE9PUR0JiYoU3QtPVN0LUR0KSxEdD0tMX1lbHNlIGZvcihEZStsbj5KZSYmKERlPUplLWxuKSxTdD1EZTtTdD49MDtTdC0tKXtmb3IodmFyIGl0PSEwLCRlPTA7JGU8bG47JGUrKylpZih5dChJZSxTdCskZSkhPT15dChIZSwkZSkpe2l0PSExO2JyZWFr''@;'; put 'put ''fWlmKGl0KXJldHVybiBTdH1yZXR1cm4tMX1mdW5jdGlvbiBUZShJZSxIZSxEZSxrZSl7RGU9TnVtYmVyKERlKXx8MDt2YXIgX3Q9SWUubGVuZ3RoLURlO2tlPyhrZT1OdW1iZXIoa2UpKT5fdCYmKGtlPV90KTprZT1fdDt2YXIgbnQ9SGUubGVuZ3RoO2tlPm50LzImJihrZT1udC8yKTtmb3Io''@;'; put 'put ''dmFyIEplPTA7SmU8a2U7KytKZSl7dmFyIGxuPXBhcnNlSW50KEhlLnN1YnN0cigyKkplLDIpLDE2KTtpZihGZShsbikpcmV0dXJuIEplO0llW0RlK0plXT1sbn1yZXR1cm4gSmV9ZnVuY3Rpb24gU2UoSWUsSGUsRGUsa2Upe3JldHVybiBCZShvdChIZSxJZS5sZW5ndGgtRGUpLEllLERlLGtl''@;'; put 'put ''KX1mdW5jdGlvbiB6ZShJZSxIZSxEZSxrZSl7cmV0dXJuIEJlKGZ1bmN0aW9uIE1lKEllKXtmb3IodmFyIEhlPVtdLERlPTA7RGU8SWUubGVuZ3RoOysrRGUpSGUucHVzaCgyNTUmSWUuY2hhckNvZGVBdChEZSkpO3JldHVybiBIZX0oSGUpLEllLERlLGtlKX1mdW5jdGlvbiB6KEllLEhlLERl''@;'; put 'put ''LGtlKXtyZXR1cm4gQmUoWGUoSGUpLEllLERlLGtlKX1mdW5jdGlvbiBnKEllLEhlLERlLGtlKXtyZXR1cm4gQmUoZnVuY3Rpb24gdmUoSWUsSGUpe2Zvcih2YXIgRGUsa2UsbnQ9W10sSmU9MDtKZTxJZS5sZW5ndGgmJiEoKEhlLT0yKTwwKTsrK0plKWtlPShEZT1JZS5jaGFyQ29kZUF0KEpl''@;'; put 'put ''KSk+PjgsbnQucHVzaChEZSUyNTYpLG50LnB1c2goa2UpO3JldHVybiBudH0oSGUsSWUubGVuZ3RoLURlKSxJZSxEZSxrZSl9ZnVuY3Rpb24geShJZSxIZSxEZSl7cmV0dXJuIEQuZnJvbUJ5dGVBcnJheSgwPT09SGUmJkRlPT09SWUubGVuZ3RoP0llOkllLnNsaWNlKEhlLERlKSl9ZnVuY3Rp''@;'; put 'put ''b24geChJZSxIZSxEZSl7RGU9TWF0aC5taW4oSWUubGVuZ3RoLERlKTtmb3IodmFyIGtlPVtdLF90PUhlO190PERlOyl7dmFyIHl0LFN0LER0LGl0LG50PUllW190XSxKZT1udWxsLGxuPW50PjIzOT80Om50PjIyMz8zOm50PjE5MT8yOjE7aWYoX3QrbG48PURlKXN3aXRjaChsbil7Y2FzZSAx''@;'; put 'put ''Om50PDEyOCYmKEplPW50KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYoaXQ9KDMxJm50KTw8Nnw2MyZ5dCk+MTI3JiYoSmU9aXQpO2JyZWFrO2Nhc2UgMzpTdD1JZVtfdCsyXSwxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJjEyOD09KDE5MiZTdCkmJihpdD0oMTUm''@;'; put 'put ''bnQpPDwxMnwoNjMmeXQpPDw2fDYzJlN0KT4yMDQ3JiYoaXQ8NTUyOTZ8fGl0PjU3MzQzKSYmKEplPWl0KTticmVhaztjYXNlIDQ6U3Q9SWVbX3QrMl0sRHQ9SWVbX3QrM10sMTI4PT0oMTkyJih5dD1JZVtfdCsxXSkpJiYxMjg9PSgxOTImU3QpJiYxMjg9PSgxOTImRHQpJiYoaXQ9KDE1Jm50''@;'; put 'put ''KTw8MTh8KDYzJnl0KTw8MTJ8KDYzJlN0KTw8Nnw2MyZEdCk+NjU1MzUmJml0PDExMTQxMTImJihKZT1pdCl9bnVsbD09PUplPyhKZT02NTUzMyxsbj0xKTpKZT42NTUzNSYmKGtlLnB1c2goKEplLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxKZT01NjMyMHwxMDIzJkplKSxrZS5wdXNoKEpl''@;'; put 'put ''KSxfdCs9bG59cmV0dXJuIGZ1bmN0aW9uIFQoSWUpe3ZhciBIZT1JZS5sZW5ndGg7aWYoSGU8PUMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLEllKTtmb3IodmFyIERlPSIiLGtlPTA7a2U8SGU7KURlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxJ''@;'; put 'put ''ZS5zbGljZShrZSxrZSs9QykpO3JldHVybiBEZX0oa2UpfUoua01heExlbmd0aD1OLCEoSC5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uIHcoKXt0cnl7dmFyIEllPW5ldyBVaW50OEFycmF5KDEpLEhlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFBy''@;'; put 'put ''b3RvdHlwZU9mKEhlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoSWUsSGUpLDQyPT09SWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIGNvbnNvbGU8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJv''@;'; put 'put ''cigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KEgucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKEguaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oKXtpZihILmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksSC5wb29sU2l6ZT04MTkyLEguZnJvbT1mdW5jdGlvbihJZSxIZSxEZSl7cmV0dXJuIFIoSWUsSGUsRGUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoSC5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5''@;'; put 'put ''cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihILFVpbnQ4QXJyYXkpLEguYWxsb2M9ZnVuY3Rpb24oSWUsSGUsRGUpe3JldHVybiBmdW5jdGlvbiBQKEllLEhlLERlKXtyZXR1cm4gaihJZSksSWU8PTA/RihJZSk6dm9pZCAwIT09SGU/InN0cmluZyI9PXR5cGVvZiBEZT9GKEllKS5maWxsKEhl''@;'; put 'put ''LERlKTpGKEllKS5maWxsKEhlKTpGKEllKX0oSWUsSGUsRGUpfSxILmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEllKXtyZXR1cm4gTChJZSl9LEguYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKEllKXtyZXR1cm4gTChJZSl9LEguaXNCdWZmZXI9ZnVuY3Rpb24oSGUpe3JldHVybiBudWxsIT1IZSYm''@;'; put 'put ''ITA9PT1IZS5faXNCdWZmZXImJkhlIT09SC5wcm90b3R5cGV9LEguY29tcGFyZT1mdW5jdGlvbihIZSxEZSl7aWYoQWUoSGUsVWludDhBcnJheSkmJihIZT1ILmZyb20oSGUsSGUub2Zmc2V0LEhlLmJ5dGVMZW5ndGgpKSxBZShEZSxVaW50OEFycmF5KSYmKERlPUguZnJvbShEZSxEZS5vZmZz''@;'; put 'put ''ZXQsRGUuYnl0ZUxlbmd0aCkpLCFILmlzQnVmZmVyKEhlKXx8IUguaXNCdWZmZXIoRGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKEhlPT09RGUpcmV0dXJuIDA7''@;'; put 'put ''Zm9yKHZhciBrZT1IZS5sZW5ndGgsX3Q9RGUubGVuZ3RoLG50PTAsSmU9TWF0aC5taW4oa2UsX3QpO250PEplOysrbnQpaWYoSGVbbnRdIT09RGVbbnRdKXtrZT1IZVtudF0sX3Q9RGVbbnRdO2JyZWFrfXJldHVybiBrZTxfdD8tMTpfdDxrZT8xOjB9LEguaXNFbmNvZGluZz1mdW5jdGlvbihI''@;'; put 'put ''ZSl7c3dpdGNoKFN0cmluZyhIZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRm''@;'; put 'put ''LTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxILmNvbmNhdD1mdW5jdGlvbihIZSxEZSl7aWYoIUFycmF5LmlzQXJyYXkoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09SGUubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBILmFsbG9jKDApO3ZhciBrZTtpZih2b2lkIDA9PT1EZSlmb3IoRGU9MCxrZT0wO2tlPEhlLmxlbmd0aDsrK2tlKURlKz1IZVtrZV0ubGVuZ3RoO3ZhciBfdD1ILmFsbG9jVW5zYWZlKERlKSxudD0wO2ZvcihrZT0wO2tlPEhlLmxlbmd0aDsrK2tlKXt2YXIgSmU9SGVba2VdO2lm''@;'; put 'put ''KEFlKEplLFVpbnQ4QXJyYXkpKW50K0plLmxlbmd0aD5fdC5sZW5ndGg/SC5mcm9tKEplKS5jb3B5KF90LG50KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChfdCxKZSxudCk7ZWxzZXtpZighSC5pc0J1ZmZlcihKZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO0plLmNvcHkoX3QsbnQpfW50Kz1KZS5sZW5ndGh9cmV0dXJuIF90fSxILmJ5dGVMZW5ndGg9dGUsSC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEgucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBIZT10aGlzLmxlbmd0aDtpZihI''@;'; put 'put ''ZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgRGU9MDtEZTxIZTtEZSs9MilvZSh0aGlzLERlLERlKzEpO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgSGU9''@;'; put 'put ''dGhpcy5sZW5ndGg7aWYoSGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIERlPTA7RGU8SGU7RGUrPTQpb2UodGhpcyxEZSxEZSszKSxvZSh0aGlzLERlKzEsRGUrMik7cmV0dXJuIHRoaXN9LEgu''@;'; put 'put ''cHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBIZT10aGlzLmxlbmd0aDtpZihIZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgRGU9MDtEZTxIZTtEZSs9OClvZSh0aGlzLERlLERlKzcp''@;'; put 'put ''LG9lKHRoaXMsRGUrMSxEZSs2KSxvZSh0aGlzLERlKzIsRGUrNSksb2UodGhpcyxEZSszLERlKzQpO3JldHVybiB0aGlzfSxILnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1ILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBIZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PUhlPyIi''@;'; put 'put ''OjA9PT1hcmd1bWVudHMubGVuZ3RoP3godGhpcywwLEhlKTpyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEgucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihIZSl7aWYoIUguaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1''@;'; put 'put ''cm4gdGhpcz09PUhlfHwwPT09SC5jb21wYXJlKHRoaXMsSGUpfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIEhlPSIiLERlPUouSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIEhlPXRoaXMudG9TdHJpbmcoImhleCIsMCxEZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRy''@;'; put 'put ''aW0oKSx0aGlzLmxlbmd0aD5EZSYmKEhlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK0hlKyI+In0scCYmKEgucHJvdG90eXBlW3BdPUgucHJvdG90eXBlLmluc3BlY3QpLEgucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oSGUsRGUsa2UsX3QsbnQpe2lmKEFlKEhlLFVpbnQ4QXJyYXkpJiYoSGU9''@;'; put 'put ''SC5mcm9tKEhlLEhlLm9mZnNldCxIZS5ieXRlTGVuZ3RoKSksIUguaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEhlKTtp''@;'; put 'put ''Zih2b2lkIDA9PT1EZSYmKERlPTApLHZvaWQgMD09PWtlJiYoa2U9SGU/SGUubGVuZ3RoOjApLHZvaWQgMD09PV90JiYoX3Q9MCksdm9pZCAwPT09bnQmJihudD10aGlzLmxlbmd0aCksRGU8MHx8a2U+SGUubGVuZ3RofHxfdDwwfHxudD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJv''@;'; put 'put ''cigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoX3Q+PW50JiZEZT49a2UpcmV0dXJuIDA7aWYoX3Q+PW50KXJldHVybi0xO2lmKERlPj1rZSlyZXR1cm4gMTtpZih0aGlzPT09SGUpcmV0dXJuIDA7Zm9yKHZhciBKZT0obnQ+Pj49MCktKF90Pj4+PTApLGxuPShrZT4+Pj0wKS0oRGU+Pj49MCks''@;'; put 'put ''eXQ9TWF0aC5taW4oSmUsbG4pLFN0PXRoaXMuc2xpY2UoX3QsbnQpLER0PUhlLnNsaWNlKERlLGtlKSxpdD0wO2l0PHl0OysraXQpaWYoU3RbaXRdIT09RHRbaXRdKXtKZT1TdFtpdF0sbG49RHRbaXRdO2JyZWFrfXJldHVybiBKZTxsbj8tMTpsbjxKZT8xOjB9LEgucHJvdG90eXBlLmluY2x1''@;'; put 'put ''ZGVzPWZ1bmN0aW9uKEhlLERlLGtlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihIZSxEZSxrZSl9LEgucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oSGUsRGUsa2Upe3JldHVybiBnZSh0aGlzLEhlLERlLGtlLCEwKX0sSC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oSGUsRGUs''@;'; put 'put ''a2Upe3JldHVybiBnZSh0aGlzLEhlLERlLGtlLCExKX0sSC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSGUsRGUsa2UsX3Qpe2lmKHZvaWQgMD09PURlKV90PSJ1dGY4IixrZT10aGlzLmxlbmd0aCxEZT0wO2Vsc2UgaWYodm9pZCAwPT09a2UmJiJzdHJpbmciPT10eXBlb2YgRGUpX3Q9RGUs''@;'; put 'put ''a2U9dGhpcy5sZW5ndGgsRGU9MDtlbHNle2lmKCFpc0Zpbml0ZShEZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0RlPj4+PTAsaXNGaW5pdGUoa2UpPyhrZT4+Pj0wLHZv''@;'; put 'put ''aWQgMD09PV90JiYoX3Q9InV0ZjgiKSk6KF90PWtlLGtlPXZvaWQgMCl9dmFyIG50PXRoaXMubGVuZ3RoLURlO2lmKCh2b2lkIDA9PT1rZXx8a2U+bnQpJiYoa2U9bnQpLEhlLmxlbmd0aD4wJiYoa2U8MHx8RGU8MCl8fERlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRl''@;'; put 'put ''bXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO190fHwoX3Q9InV0ZjgiKTtmb3IodmFyIEplPSExOzspc3dpdGNoKF90KXtjYXNlImhleCI6cmV0dXJuIFRlKHRoaXMsSGUsRGUsa2UpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFNlKHRoaXMsSGUsRGUsa2UpO2Nh''@;'; put 'put ''c2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIHplKHRoaXMsSGUsRGUsa2UpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geih0aGlzLEhlLERlLGtlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGcodGhpcyxI''@;'; put 'put ''ZSxEZSxrZSk7ZGVmYXVsdDppZihKZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK190KTtfdD0oIiIrX3QpLnRvTG93ZXJDYXNlKCksSmU9ITB9fSxILnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnBy''@;'; put 'put ''b3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBDPTQwOTY7ZnVuY3Rpb24gVihJZSxIZSxEZSl7dmFyIGtlPSIiO0RlPU1hdGgubWluKEllLmxlbmd0aCxEZSk7Zm9yKHZhciBfdD1IZTtfdDxEZTsrK190KWtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZJZVtf''@;'; put 'put ''dF0pO3JldHVybiBrZX1mdW5jdGlvbiBVKEllLEhlLERlKXt2YXIga2U9IiI7RGU9TWF0aC5taW4oSWUubGVuZ3RoLERlKTtmb3IodmFyIF90PUhlO190PERlOysrX3Qpa2UrPVN0cmluZy5mcm9tQ2hhckNvZGUoSWVbX3RdKTtyZXR1cm4ga2V9ZnVuY3Rpb24gRShJZSxIZSxEZSl7dmFyIGtl''@;'; put 'put ''PUllLmxlbmd0aDsoIUhlfHxIZTwwKSYmKEhlPTApLCghRGV8fERlPDB8fERlPmtlKSYmKERlPWtlKTtmb3IodmFyIF90PSIiLG50PUhlO250PERlOysrbnQpX3QrPVJlW0llW250XV07cmV0dXJuIF90fWZ1bmN0aW9uIG0oSWUsSGUsRGUpe2Zvcih2YXIga2U9SWUuc2xpY2UoSGUsRGUpLF90''@;'; put 'put ''PSIiLG50PTA7bnQ8a2UubGVuZ3RoLTE7bnQrPTIpX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoa2VbbnRdKzI1NiprZVtudCsxXSk7cmV0dXJuIF90fWZ1bmN0aW9uIEEoSWUsSGUsRGUpe2lmKEllJTEhPTB8fEllPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIp''@;'; put 'put ''O2lmKEllK0hlPkRlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gYWUoSWUsSGUsRGUsa2UsX3QsbnQpe2lmKCFILmlzQnVmZmVyKEllKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoSGU+X3R8fEhlPG50KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihEZStrZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1''@;'; put 'put ''bmN0aW9uIG5lKEllLEhlLERlLGtlLF90LG50KXtpZihEZStrZT5JZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKERlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGxlKEllLEhlLERlLGtl''@;'; put 'put ''LF90KXtyZXR1cm4gSGU9K0hlLERlPj4+PTAsX3R8fG5lKEllLDAsRGUsNCksXy53cml0ZShJZSxIZSxEZSxrZSwyMyw0KSxEZSs0fWZ1bmN0aW9uIHdlKEllLEhlLERlLGtlLF90KXtyZXR1cm4gSGU9K0hlLERlPj4+PTAsX3R8fG5lKEllLDAsRGUsOCksXy53cml0ZShJZSxIZSxEZSxrZSw1''@;'; put 'put ''Miw4KSxEZSs4fUgucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKEhlLERlKXt2YXIga2U9dGhpcy5sZW5ndGg7KEhlPX5+SGUpPDA/KEhlKz1rZSk8MCYmKEhlPTApOkhlPmtlJiYoSGU9a2UpLChEZT12b2lkIDA9PT1EZT9rZTp+fkRlKTwwPyhEZSs9a2UpPDAmJihEZT0wKTpEZT5rZSYmKERl''@;'; put 'put ''PWtlKSxEZTxIZSYmKERlPUhlKTt2YXIgX3Q9dGhpcy5zdWJhcnJheShIZSxEZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdCxILnByb3RvdHlwZSksX3R9LEgucHJvdG90eXBlLnJlYWRVaW50TEU9SC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihIZSxEZSxrZSl7SGU+''@;'; put 'put ''Pj49MCxEZT4+Pj0wLGtlfHxBKEhlLERlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbSGVdLG50PTEsSmU9MDsrK0plPERlJiYobnQqPTI1Nik7KV90Kz10aGlzW0hlK0plXSpudDtyZXR1cm4gX3R9LEgucHJvdG90eXBlLnJlYWRVaW50QkU9SC5wcm90b3R5cGUucmVhZFVJbnRCRT1m''@;'; put 'put ''dW5jdGlvbihIZSxEZSxrZSl7SGU+Pj49MCxEZT4+Pj0wLGtlfHxBKEhlLERlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRoaXNbSGUrLS1EZV0sbnQ9MTtEZT4wJiYobnQqPTI1Nik7KV90Kz10aGlzW0hlKy0tRGVdKm50O3JldHVybiBfdH0sSC5wcm90b3R5cGUucmVhZFVpbnQ4PUgucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihIZSxEZSl7cmV0dXJuIEhlPj4+PTAsRGV8fEEoSGUsMSx0aGlzLmxlbmd0aCksdGhpc1tIZV19LEgucHJvdG90eXBlLnJlYWRVaW50MTZMRT1ILnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oSGUsRGUpe3JldHVybiBIZT4+Pj0wLERl''@;'; put 'put ''fHxBKEhlLDIsdGhpcy5sZW5ndGgpLHRoaXNbSGVdfHRoaXNbSGUrMV08PDh9LEgucHJvdG90eXBlLnJlYWRVaW50MTZCRT1ILnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oSGUsRGUpe3JldHVybiBIZT4+Pj0wLERlfHxBKEhlLDIsdGhpcy5sZW5ndGgpLHRoaXNbSGVdPDw4fHRo''@;'; put 'put ''aXNbSGUrMV19LEgucHJvdG90eXBlLnJlYWRVaW50MzJMRT1ILnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oSGUsRGUpe3JldHVybiBIZT4+Pj0wLERlfHxBKEhlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW0hlXXx0aGlzW0hlKzFdPDw4fHRoaXNbSGUrMl08PDE2KSsxNjc3NzIxNip0''@;'; put 'put ''aGlzW0hlKzNdfSxILnByb3RvdHlwZS5yZWFkVWludDMyQkU9SC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEhlLERlKXtyZXR1cm4gSGU+Pj49MCxEZXx8QShIZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW0hlXSsodGhpc1tIZSsxXTw8MTZ8dGhpc1tIZSsyXTw8OHx0''@;'; put 'put ''aGlzW0hlKzNdKX0sSC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKEhlLERlLGtlKXtIZT4+Pj0wLERlPj4+PTAsa2V8fEEoSGUsRGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tIZV0sbnQ9MSxKZT0wOysrSmU8RGUmJihudCo9MjU2KTspX3QrPXRoaXNbSGUrSmVdKm50O3Jl''@;'; put 'put ''dHVybiBfdD49KG50Kj0xMjgpJiYoX3QtPU1hdGgucG93KDIsOCpEZSkpLF90fSxILnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oSGUsRGUsa2Upe0hlPj4+PTAsRGU+Pj49MCxrZXx8QShIZSxEZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD1EZSxudD0xLEplPXRoaXNbSGUrLS1fdF07''@;'; put 'put ''X3Q+MCYmKG50Kj0yNTYpOylKZSs9dGhpc1tIZSstLV90XSpudDtyZXR1cm4gSmU+PShudCo9MTI4KSYmKEplLT1NYXRoLnBvdygyLDgqRGUpKSxKZX0sSC5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oSGUsRGUpe3JldHVybiBIZT4+Pj0wLERlfHxBKEhlLDEsdGhpcy5sZW5ndGgpLDEy''@;'; put 'put ''OCZ0aGlzW0hlXT8tMSooMjU1LXRoaXNbSGVdKzEpOnRoaXNbSGVdfSxILnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihIZSxEZSl7SGU+Pj49MCxEZXx8QShIZSwyLHRoaXMubGVuZ3RoKTt2YXIga2U9dGhpc1tIZV18dGhpc1tIZSsxXTw8ODtyZXR1cm4gMzI3Njgma2U/NDI5NDkw''@;'; put 'put ''MTc2MHxrZTprZX0sSC5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oSGUsRGUpe0hlPj4+PTAsRGV8fEEoSGUsMix0aGlzLmxlbmd0aCk7dmFyIGtlPXRoaXNbSGUrMV18dGhpc1tIZV08PDg7cmV0dXJuIDMyNzY4JmtlPzQyOTQ5MDE3NjB8a2U6a2V9LEgucHJvdG90eXBlLnJlYWRJ''@;'; put 'put ''bnQzMkxFPWZ1bmN0aW9uKEhlLERlKXtyZXR1cm4gSGU+Pj49MCxEZXx8QShIZSw0LHRoaXMubGVuZ3RoKSx0aGlzW0hlXXx0aGlzW0hlKzFdPDw4fHRoaXNbSGUrMl08PDE2fHRoaXNbSGUrM108PDI0fSxILnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihIZSxEZSl7cmV0dXJuIEhl''@;'; put 'put ''Pj4+PTAsRGV8fEEoSGUsNCx0aGlzLmxlbmd0aCksdGhpc1tIZV08PDI0fHRoaXNbSGUrMV08PDE2fHRoaXNbSGUrMl08PDh8dGhpc1tIZSszXX0sSC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oSGUsRGUpe3JldHVybiBIZT4+Pj0wLERlfHxBKEhlLDQsdGhpcy5sZW5ndGgpLF8u''@;'; put 'put ''cmVhZCh0aGlzLEhlLCEwLDIzLDQpfSxILnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihIZSxEZSl7cmV0dXJuIEhlPj4+PTAsRGV8fEEoSGUsNCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsSGUsITEsMjMsNCl9LEgucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihIZSxE''@;'; put 'put ''ZSl7cmV0dXJuIEhlPj4+PTAsRGV8fEEoSGUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsSGUsITAsNTIsOCl9LEgucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihIZSxEZSl7cmV0dXJuIEhlPj4+PTAsRGV8fEEoSGUsOCx0aGlzLmxlbmd0aCksXy5yZWFkKHRoaXMsSGUsITEs''@;'; put 'put ''NTIsOCl9LEgucHJvdG90eXBlLndyaXRlVWludExFPUgucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKEhlLERlLGtlLF90KXtIZT0rSGUsRGU+Pj49MCxrZT4+Pj0wLF90fHxhZSh0aGlzLEhlLERlLGtlLE1hdGgucG93KDIsOCprZSktMSwwKTt2YXIgSmU9MSxsbj0wO2Zvcih0aGlz''@;'; put 'put ''W0RlXT0yNTUmSGU7KytsbjxrZSYmKEplKj0yNTYpOyl0aGlzW0RlK2xuXT1IZS9KZSYyNTU7cmV0dXJuIERlK2tlfSxILnByb3RvdHlwZS53cml0ZVVpbnRCRT1ILnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihIZSxEZSxrZSxfdCl7SGU9K0hlLERlPj4+PTAsa2U+Pj49MCxfdHx8''@;'; put 'put ''YWUodGhpcyxIZSxEZSxrZSxNYXRoLnBvdygyLDgqa2UpLTEsMCk7dmFyIEplPWtlLTEsbG49MTtmb3IodGhpc1tEZStKZV09MjU1JkhlOy0tSmU+PTAmJihsbio9MjU2KTspdGhpc1tEZStKZV09SGUvbG4mMjU1O3JldHVybiBEZStrZX0sSC5wcm90b3R5cGUud3JpdGVVaW50OD1ILnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKEhlLERlLGtlKXtyZXR1cm4gSGU9K0hlLERlPj4+PTAsa2V8fGFlKHRoaXMsSGUsRGUsMSwyNTUsMCksdGhpc1tEZV09MjU1JkhlLERlKzF9LEgucHJvdG90eXBlLndyaXRlVWludDE2TEU9SC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlv''@;'; put 'put ''bihIZSxEZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDIsNjU1MzUsMCksdGhpc1tEZV09MjU1JkhlLHRoaXNbRGUrMV09SGU+Pj44LERlKzJ9LEgucHJvdG90eXBlLndyaXRlVWludDE2QkU9SC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihI''@;'; put 'put ''ZSxEZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDIsNjU1MzUsMCksdGhpc1tEZV09SGU+Pj44LHRoaXNbRGUrMV09MjU1JkhlLERlKzJ9LEgucHJvdG90eXBlLndyaXRlVWludDMyTEU9SC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihIZSxE''@;'; put 'put ''ZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0RlKzNdPUhlPj4+MjQsdGhpc1tEZSsyXT1IZT4+PjE2LHRoaXNbRGUrMV09SGU+Pj44LHRoaXNbRGVdPTI1NSZIZSxEZSs0fSxILnByb3RvdHlwZS53cml0ZVVpbnQzMkJF''@;'; put 'put ''PUgucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oSGUsRGUsa2Upe3JldHVybiBIZT0rSGUsRGU+Pj49MCxrZXx8YWUodGhpcyxIZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZV09SGU+Pj4yNCx0aGlzW0RlKzFdPUhlPj4+MTYsdGhpc1tEZSsyXT1IZT4+PjgsdGhpc1tEZSsz''@;'; put 'put ''XT0yNTUmSGUsRGUrNH0sSC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihIZSxEZSxrZSxfdCl7aWYoSGU9K0hlLERlPj4+PTAsIV90KXt2YXIgbnQ9TWF0aC5wb3coMiw4KmtlLTEpO2FlKHRoaXMsSGUsRGUsa2UsbnQtMSwtbnQpfXZhciBKZT0wLGxuPTEseXQ9MDtmb3IodGhpc1tE''@;'; put 'put ''ZV09MjU1JkhlOysrSmU8a2UmJihsbio9MjU2KTspSGU8MCYmMD09PXl0JiYwIT09dGhpc1tEZStKZS0xXSYmKHl0PTEpLHRoaXNbRGUrSmVdPShIZS9sbnwwKS15dCYyNTU7cmV0dXJuIERlK2tlfSxILnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKEhlLERlLGtlLF90KXtpZihIZT0r''@;'; put 'put ''SGUsRGU+Pj49MCwhX3Qpe3ZhciBudD1NYXRoLnBvdygyLDgqa2UtMSk7YWUodGhpcyxIZSxEZSxrZSxudC0xLC1udCl9dmFyIEplPWtlLTEsbG49MSx5dD0wO2Zvcih0aGlzW0RlK0plXT0yNTUmSGU7LS1KZT49MCYmKGxuKj0yNTYpOylIZTwwJiYwPT09eXQmJjAhPT10aGlzW0RlK0plKzFd''@;'; put 'put ''JiYoeXQ9MSksdGhpc1tEZStKZV09KEhlL2xufDApLXl0JjI1NTtyZXR1cm4gRGUra2V9LEgucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihIZSxEZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDEsMTI3LC0xMjgpLEhlPDAmJihIZT0yNTUrSGUrMSks''@;'; put 'put ''dGhpc1tEZV09MjU1JkhlLERlKzF9LEgucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihIZSxEZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0RlXT0yNTUmSGUsdGhpc1tEZSsxXT1IZT4+PjgsRGUrMn0sSC5w''@;'; put 'put ''cm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKEhlLERlLGtlKXtyZXR1cm4gSGU9K0hlLERlPj4+PTAsa2V8fGFlKHRoaXMsSGUsRGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbRGVdPUhlPj4+OCx0aGlzW0RlKzFdPTI1NSZIZSxEZSsyfSxILnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVu''@;'; put 'put ''Y3Rpb24oSGUsRGUsa2Upe3JldHVybiBIZT0rSGUsRGU+Pj49MCxrZXx8YWUodGhpcyxIZSxEZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbRGVdPTI1NSZIZSx0aGlzW0RlKzFdPUhlPj4+OCx0aGlzW0RlKzJdPUhlPj4+MTYsdGhpc1tEZSszXT1IZT4+PjI0LERlKzR9LEgucHJv''@;'; put 'put ''dG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihIZSxEZSxrZSl7cmV0dXJuIEhlPStIZSxEZT4+Pj0wLGtlfHxhZSh0aGlzLEhlLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksSGU8MCYmKEhlPTQyOTQ5NjcyOTUrSGUrMSksdGhpc1tEZV09SGU+Pj4yNCx0aGlzW0RlKzFdPUhlPj4+''@;'; put 'put ''MTYsdGhpc1tEZSsyXT1IZT4+PjgsdGhpc1tEZSszXT0yNTUmSGUsRGUrNH0sSC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKEhlLERlLGtlKXtyZXR1cm4gbGUodGhpcyxIZSxEZSwhMCxrZSl9LEgucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihIZSxEZSxrZSl7cmV0''@;'; put 'put ''dXJuIGxlKHRoaXMsSGUsRGUsITEsa2UpfSxILnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKEhlLERlLGtlKXtyZXR1cm4gd2UodGhpcyxIZSxEZSwhMCxrZSl9LEgucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oSGUsRGUsa2Upe3JldHVybiB3ZSh0aGlzLEhlLERl''@;'; put 'put ''LCExLGtlKX0sSC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihIZSxEZSxrZSxfdCl7aWYoIUguaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKGtlfHwoa2U9MCksIV90JiYwIT09X3QmJihfdD10aGlzLmxlbmd0aCksRGU+''@;'; put 'put ''PUhlLmxlbmd0aCYmKERlPUhlLmxlbmd0aCksRGV8fChEZT0wKSxfdD4wJiZfdDxrZSYmKF90PWtlKSxfdD09PWtlfHwwPT09SGUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIp''@;'; put 'put ''O2lmKGtlPDB8fGtlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoX3Q8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtfdD50aGlzLmxlbmd0aCYmKF90PXRoaXMubGVuZ3RoKSxIZS5sZW5n''@;'; put 'put ''dGgtRGU8X3Qta2UmJihfdD1IZS5sZW5ndGgtRGUra2UpO3ZhciBudD1fdC1rZTtyZXR1cm4gdGhpcz09PUhlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oRGUsa2UsX3QpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNl''@;'; put 'put ''dC5jYWxsKEhlLHRoaXMuc3ViYXJyYXkoa2UsX3QpLERlKSxudH0sSC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihIZSxEZSxrZSxfdCl7aWYoInN0cmluZyI9PXR5cGVvZiBIZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZT8oX3Q9RGUsRGU9MCxrZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBrZSYmKF90PWtlLGtlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1fdCYmInN0cmluZyIhPXR5cGVvZiBfdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBfdCYmIUguaXNFbmNvZGluZyhfdCkpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7aWYoMT09PUhlLmxlbmd0aCl7dmFyIG50PUhlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PV90JiZudDwxMjh8fCJsYXRpbjEiPT09X3QpJiYoSGU9bnQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBIZT9IZSY9MjU1OiJib29sZWFu''@;'; put 'put ''Ij09dHlwZW9mIEhlJiYoSGU9TnVtYmVyKEhlKSk7aWYoRGU8MHx8dGhpcy5sZW5ndGg8RGV8fHRoaXMubGVuZ3RoPGtlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihrZTw9RGUpcmV0dXJuIHRoaXM7dmFyIEplO2lmKERlPj4+PTAsa2U9dm9pZCAwPT09''@;'; put 'put ''a2U/dGhpcy5sZW5ndGg6a2U+Pj4wLEhlfHwoSGU9MCksIm51bWJlciI9PXR5cGVvZiBIZSlmb3IoSmU9RGU7SmU8a2U7KytKZSl0aGlzW0plXT1IZTtlbHNle3ZhciBsbj1ILmlzQnVmZmVyKEhlKT9IZTpILmZyb20oSGUsX3QpLHl0PWxuLmxlbmd0aDtpZigwPT09eXQpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcignVGhlIHZhbHVlICInK0hlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoSmU9MDtKZTxrZS1EZTsrK0plKXRoaXNbSmUrRGVdPWxuW0plJXl0XX1yZXR1cm4gdGhpc307dmFyIFVlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gb3QoSWUsSGUp''@;'; put 'put ''e0hlPUhlfHwxLzA7Zm9yKHZhciBEZSxrZT1JZS5sZW5ndGgsX3Q9bnVsbCxudD1bXSxKZT0wO0plPGtlOysrSmUpe2lmKChEZT1JZS5jaGFyQ29kZUF0KEplKSk+NTUyOTUmJkRlPDU3MzQ0KXtpZighX3Qpe2lmKERlPjU2MzE5KXsoSGUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtj''@;'; put 'put ''b250aW51ZX1pZihKZSsxPT09a2UpeyhIZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfV90PURlO2NvbnRpbnVlfWlmKERlPDU2MzIwKXsoSGUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KSxfdD1EZTtjb250aW51ZX1EZT02NTUzNisoX3QtNTUyOTY8PDEwfERl''@;'; put 'put ''LTU2MzIwKX1lbHNlIF90JiYoSGUtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtpZihfdD1udWxsLERlPDEyOCl7aWYoKEhlLT0xKTwwKWJyZWFrO250LnB1c2goRGUpfWVsc2UgaWYoRGU8MjA0OCl7aWYoKEhlLT0yKTwwKWJyZWFrO250LnB1c2goRGU+PjZ8MTkyLDYzJkRlfDEyOCl9''@;'; put 'put ''ZWxzZSBpZihEZTw2NTUzNil7aWYoKEhlLT0zKTwwKWJyZWFrO250LnB1c2goRGU+PjEyfDIyNCxEZT4+NiY2M3wxMjgsNjMmRGV8MTI4KX1lbHNle2lmKCEoRGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoSGUtPTQpPDApYnJlYWs7bnQucHVz''@;'; put 'put ''aChEZT4+MTh8MjQwLERlPj4xMiY2M3wxMjgsRGU+PjYmNjN8MTI4LDYzJkRlfDEyOCl9fXJldHVybiBudH1mdW5jdGlvbiBYZShJZSl7cmV0dXJuIEQudG9CeXRlQXJyYXkoZnVuY3Rpb24gUWUoSWUpe2lmKChJZT0oSWU9SWUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoVWUsIiIp''@;'; put 'put ''KS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO0llLmxlbmd0aCU0IT0wOylJZSs9Ij0iO3JldHVybiBJZX0oSWUpKX1mdW5jdGlvbiBCZShJZSxIZSxEZSxrZSl7Zm9yKHZhciBfdD0wO190PGtlJiYhKF90K0RlPj1IZS5sZW5ndGh8fF90Pj1JZS5sZW5ndGgpOysrX3QpSGVbX3QrRGVdPUllW190''@;'; put 'put ''XTtyZXR1cm4gX3R9ZnVuY3Rpb24gQWUoSWUsSGUpe3JldHVybiBJZSBpbnN0YW5jZW9mIEhlfHxudWxsIT1JZSYmbnVsbCE9SWUuY29uc3RydWN0b3ImJm51bGwhPUllLmNvbnN0cnVjdG9yLm5hbWUmJkllLmNvbnN0cnVjdG9yLm5hbWU9PT1IZS5uYW1lfWZ1bmN0aW9uIEZlKEllKXtyZXR1''@;'; put 'put ''cm4gSWUhPUllfXZhciBSZT1mdW5jdGlvbigpe2Zvcih2YXIgSWU9IjAxMjM0NTY3ODlhYmNkZWYiLEhlPW5ldyBBcnJheSgyNTYpLERlPTA7RGU8MTY7KytEZSlmb3IodmFyIGtlPTE2KkRlLF90PTA7X3Q8MTY7KytfdClIZVtrZStfdF09SWVbRGVdK0llW190XTtyZXR1cm4gSGV9KCl9LDk1''@;'; put 'put ''NzMxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjU5OTIpLF89Yig3OTQ3NykscD1iKDU5NzA1KSxOPWIoNTI5MTApO2NlLmV4cG9ydHM9Tnx8RC5jYWxsKHAsXyl9LDk4OTEwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjU5OTIpLF89Yig3OTQ3NykscD1iKDk1''@;'; put 'put ''NzMxKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHAoRCxfLGFyZ3VtZW50cyl9fSw3OTQ3NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseX0sNTk3MDU6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5''@;'; put 'put ''cGUuY2FsbH0sNjE4ODU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NTk5MiksXz1iKDQ2NzU4KSxwPWIoNTk3MDUpLE49Yig5NTczMSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtpZihGLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgRlswXSl0aHJvdyBuZXcgXygiYSBm''@;'; put 'put ''dW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBOKEQscCxGKX19LDUyOTEwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSw0ODEyODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDMxMzU4KSxf''@;'; put 'put ''PWIoNDU3MCkscD1iKDYxODg1KSxOPWIoOTg5MTApO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIEg9cChhcmd1bWVudHMpLFI9Ri5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEQoSCwxKyhSPjA/UjowKSwhMCl9LF8/XyhjZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOk59''@;'; put 'put ''KTpjZS5leHBvcnRzLmFwcGx5PU59LDEyNzczOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTAyNTgpLF89Yig2MTg4NSkscD1fKFtEKCIlU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJSIpXSk7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LEYpe3ZhciBIPUQodywhIUYpO3JldHVybiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBIJiZwKHcsIi5wcm90b3R5cGUuIik+LTE/XyhbSF0pOkh9fSwzMjQ3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNzA0NSkuVHJhbnNmb3JtLHA9Yig3ODQ1NCkuSTtmdW5jdGlvbiB3KGope18uY2FsbCh0aGlzKSx0''@;'; put 'put ''aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygaix0aGlzLmhhc2hNb2RlP3RoaXNbal09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhp''@;'; put 'put ''cy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Yig3MTk5MykodyxfKTt2YXIgRj10eXBlb2YgVWludDhBcnJheTwidSIsSD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEQucHJvdG90eXBlIGluc3Rh''@;'; put 'put ''bmNlb2YgVWludDhBcnJheXx8RC5UWVBFRF9BUlJBWV9TVVBQT1JUKTt3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oaixQLEwpe3ZhciBZPWZ1bmN0aW9uIFIoaixQKXtpZihqIGluc3RhbmNlb2YgRClyZXR1cm4gajtpZigic3RyaW5nIj09dHlwZW9mIGopcmV0dXJuIEQuZnJvbShqLFAp''@;'; put 'put ''O2lmKEgmJkFycmF5QnVmZmVyLmlzVmlldyhqKSl7aWYoMD09PWouYnl0ZUxlbmd0aClyZXR1cm4gRC5hbGxvYygwKTt2YXIgTD1ELmZyb20oai5idWZmZXIsai5ieXRlT2Zmc2V0LGouYnl0ZUxlbmd0aCk7aWYoTC5ieXRlTGVuZ3RoPT09ai5ieXRlTGVuZ3RoKXJldHVybiBMfWlmKEYmJmog''@;'; put 'put ''aW5zdGFuY2VvZiBVaW50OEFycmF5fHxELmlzQnVmZmVyKGopJiZqLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihqKSlyZXR1cm4gRC5mcm9tKGopO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAi''@;'; put 'put ''ZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShqLFApLEI9dGhpcy5fdXBkYXRlKFkpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KEwmJihCPXRoaXMuX3RvU3RyaW5nKEIs''@;'; put 'put ''TCkpLEIpfSx3LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sdy5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBdXRo''@;'; put 'put ''VGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUi''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihqLFAsTCl7dmFyIFk7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKGopOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoaikpfWNhdGNoKEIpe1k9Qn1maW5hbGx5e0woWSl9fSx3LnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24o''@;'; put 'put ''ail7dmFyIFA7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goTCl7UD1MfWooUCl9LHcucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKGope3ZhciBQPXRoaXMuX19maW5hbCgpfHxELmFsbG9jKDApO3JldHVybiBqJiYoUD10aGlzLl90b1N0cmluZyhQLGosITAp''@;'; put 'put ''KSxQfSx3LnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oaixQLEwpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBwKFApLHRoaXMuX2VuY29kaW5nPVApLHRoaXMuX2VuY29kaW5nIT09UCl0aHJvdyBuZXcgRXJyb3IoImNhblx1MjAxOXQgc3dpdGNoIGVuY29kaW5n''@;'; put 'put ''cyIpO3ZhciBZPXRoaXMuX2RlY29kZXIud3JpdGUoaik7cmV0dXJuIEwmJihZKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxZfSxjZS5leHBvcnRzPXd9LDI3NjM3OihjZSxKLGIpPT57ZnVuY3Rpb24gWihxKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHEpfUouaXNBcnJh''@;'; put 'put ''eT1mdW5jdGlvbiBEKHEpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkocSk6IltvYmplY3QgQXJyYXldIj09PVoocSl9LEouaXNCb29sZWFuPWZ1bmN0aW9uIF8ocSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgcX0sSi5pc051bGw9ZnVuY3Rpb24gcChxKXtyZXR1cm4gbnVs''@;'; put 'put ''bD09PXF9LEouaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gTihxKXtyZXR1cm4gbnVsbD09cX0sSi5pc051bWJlcj1mdW5jdGlvbiB3KHEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgcX0sSi5pc1N0cmluZz1mdW5jdGlvbiBGKHEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcX0sSi5pc1N5''@;'; put 'put ''bWJvbD1mdW5jdGlvbiBIKHEpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgcX0sSi5pc1VuZGVmaW5lZD1mdW5jdGlvbiBSKHEpe3JldHVybiB2b2lkIDA9PT1xfSxKLmlzUmVnRXhwPWZ1bmN0aW9uIGoocSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1aKHEpfSxKLmlzT2JqZWN0PWZ1bmN0''@;'; put 'put ''aW9uIFAocSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBxJiZudWxsIT09cX0sSi5pc0RhdGU9ZnVuY3Rpb24gTChxKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1aKHEpfSxKLmlzRXJyb3I9ZnVuY3Rpb24gWShxKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09WihxKXx8cSBpbnN0YW5jZW9m''@;'; put 'put ''IEVycm9yfSxKLmlzRnVuY3Rpb249ZnVuY3Rpb24gQihxKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcX0sSi5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBXKHEpe3JldHVybiBudWxsPT09cXx8ImJvb2xlYW4iPT10eXBlb2YgcXx8Im51bWJlciI9PXR5cGVvZiBxfHwic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IHF8fCJzeW1ib2wiPT10eXBlb2YgcXx8dHlwZW9mIHE+InUifSxKLmlzQnVmZmVyPWIoODM4MzgpLkJ1ZmZlci5pc0J1ZmZlcn0sODczMDM6KGNlLEosYik9Pnt2YXIgRD1iKDkwNTE4KSxfPWIoODk2MDYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSCl7cmV0dXJuIG5ldyBOKEgpfTt2YXIgcD17''@;'; put 'put ''c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUx''@;'; put 'put ''OTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBOKEYpe3RoaXMuY3VydmVUeXBlPXBbRl0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlz''@;'; put 'put ''LmN1cnZlVHlwZT17bmFtZTpGfSksdGhpcy5jdXJ2ZT1uZXcgRC5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIHcoRixILFIpe0FycmF5LmlzQXJyYXkoRil8fChGPUYudG9BcnJheSgpKTt2YXIgaj1uZXcgQnVmZmVyKEYpO2lmKFImJmoubGVuZ3Ro''@;'; put 'put ''PFIpe3ZhciBQPW5ldyBCdWZmZXIoUi1qLmxlbmd0aCk7UC5maWxsKDApLGo9QnVmZmVyLmNvbmNhdChbUCxqXSl9cmV0dXJuIEg/ai50b1N0cmluZyhIKTpqfXAucDIyND1wLnNlY3AyMjRyMSxwLnAyNTY9cC5zZWNwMjU2cjE9cC5wcmltZTI1NnYxLHAucDE5Mj1wLnNlY3AxOTJyMT1wLnBy''@;'; put 'put ''aW1lMTkydjEscC5wMzg0PXAuc2VjcDM4NHIxLHAucDUyMT1wLnNlY3A1MjFyMSxOLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oRixIKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KEYsSCl9LE4ucHJvdG90eXBlLmNv''@;'; put 'put ''bXB1dGVTZWNyZXQ9ZnVuY3Rpb24oRixILFIpe3JldHVybiBIPUh8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoRil8fChGPW5ldyBCdWZmZXIoRixIKSksdyh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoRikuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxS''@;'; put 'put ''LHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxOLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixIKXt2YXIgUj10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PUgsITApO3JldHVybiJoeWJyaWQiPT09SCYmKFJbMF09UltSLmxlbmd0aC0xXSUyPzc6NiksdyhS''@;'; put 'put ''LEYpfSxOLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKEYpe3JldHVybiB3KHRoaXMua2V5cy5nZXRQcml2YXRlKCksRil9LE4ucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihGLEgpe3JldHVybiBIPUh8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoRil8fChGPW5ldyBC''@;'; put 'put ''dWZmZXIoRixIKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sTi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGLEgpe0g9SHx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihGKXx8KEY9bmV3IEJ1ZmZlcihGLEgpKTt2YXIgUj1uZXcgXyhGKTtyZXR1cm4gUj1SLnRv''@;'; put 'put ''U3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKFIpLHRoaXN9fSw4OTYwNjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihELF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHosZyl7aWYoIXopdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gTih6LGcpe3ouc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLHoucHJvdG90eXBlPW5ldyB5LHoucHJvdG90eXBlLmNvbnN0cnVjdG9yPXp9ZnVuY3Rpb24gdyh6LGcseSl7aWYody5p''@;'; put 'put ''c0JOKHopKXJldHVybiB6O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT16JiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdCh6fHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgRjsib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIEQ/RC5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtGPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc3OTY1KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNo''@;'; put 'put ''YXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgoeix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHktMSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1h''@;'; put 'put ''dGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2YXIgVT16LmNoYXJDb2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcrMTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3Rv''@;'; put 'put ''dHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+''@;'; put 'put ''PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRo''@;'; put 'put ''aXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5''@;'; put 'put ''NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0''@;'; put 'put ''aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0''@;'; put 'put ''aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMu''@;'; put 'put ''d29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcs''@;'; put 'put ''eSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0x''@;'; put 'put ''O0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMu''@;'; put 'put ''d29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8''@;'; put 'put ''PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgVj1nLmxlbmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1t''@;'; put 'put ''OnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9MTtmb3IobT1qKGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9''@;'; put 'put ''dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVy''@;'; put 'put ''biB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIs''@;'; put 'put ''IjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMy''@;'; put 'put ''LDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUz''@;'; put 'put ''NjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVe''@;'; put 'put ''ei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0sVj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1F''@;'; put 'put ''Pj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0oVj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxnLndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5Lndv''@;'; put 'put ''cmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxU''@;'; put 'put ''PTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10aGlzLndvcmRzW1ZdLEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsVi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhd''@;'; put 'put ''K0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5j''@;'; put 'put ''bG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0w''@;'; put 'put ''Oyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9n''@;'; put 'put ''Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0''@;'; put 'put ''cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkp''@;'; put 'put ''fSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5''@;'; put 'put ''dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9''@;'; put 'put ''QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtmb3IoO208VDttKyspVVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4''@;'; put 'put ''Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIs''@;'; put 'put ''eT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lm''@;'; put 'put ''KHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgr''@;'; put 'put ''K109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1''@;'; put 'put ''b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRz''@;'; put 'put ''W3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtD''@;'; put 'put ''PHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUo''@;'; put 'put ''KS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5v''@;'; put 'put ''dG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8''@;'; put 'put ''QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7''@;'; put 'put ''aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxD''@;'; put 'put ''Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRo''@;'; put 'put ''aXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14LndvcmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4g''@;'; put 'put ''Zy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxULmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2''@;'; put 'put ''MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtVPEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFUpLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxt''@;'; put 'put ''LEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMsVT0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsUWU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxCZT04MTkxJlhlLEFlPVhlPj4+MTMs''@;'; put 'put ''RmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxIZT0wfENbNV0sRGU9ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90Pj4+MTMsbG49MHxDWzddLHl0PTgxOTEmbG4sU3Q9bG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8''@;'; put 'put ''Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0s''@;'; put 'put ''c3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSx1bj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgx''@;'; put 'put ''OTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KFUrKEU9TWF0aC5pbXVsKG5lLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxQdCkpK01hdGguaW11bChsZSxSdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRo''@;'; put 'put ''LmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KTt2YXIgRWk9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB2cj0oVSsoRT1FK01hdGguaW11bChu''@;'; put 'put ''ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwobGUsaG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChCZSxSdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoQmUsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxo''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgV249KFUrKEU9RStNYXRoLmltdWwobmUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFd0KXww''@;'; put 'put ''KSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoQmUsc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MDt2YXIgJGk9KFUrKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChu''@;'; put 'put ''ZSxVdCl8MCkrTWF0aC5pbXVsKGxlLHN0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsUnQpLG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLFJ0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoQmUsaG4pfDAsbT0obT1tK01hdGguaW11bChCZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoVWUsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLFV0KXwwO3ZhciBlaT0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStN''@;'; put 'put ''YXRoLmltdWwobGUsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsUXQpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtlLFF0KXwwLEE9QStNYXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoQmUsQXQpfDApK01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRoLmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChu''@;'; put 'put ''ZSx4dCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKFN0LFJ0KXwwLEE9''@;'; put 'put ''TWF0aC5pbXVsKFN0LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmltdWwoRGUsaG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEJlLHN0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxo''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MDt2YXIgVmk9KFUrKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLHJuKXww''@;'; put 'put ''KSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChTdCxRdCl8MCxBPUErTWF0aC5pbXVsKFN0LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV3QpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoQmUsV2UpfDAsbT0obT1tK01hdGguaW11bChCZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChu''@;'; put 'put ''ZSx1bil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGZuKXwwKStNYXRoLmltdWwobGUsdW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxSdCksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxo''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoRGUsc3QpfDAsbT0obT1tK01hdGguaW11bChEZSxVdCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoUWUsdW4pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgRGE9KFUrKEU9RStNYXRoLmltdWwobmUsWHQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGxlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUXQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKFN0LFd0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwoRGUsVHQpfDApK01hdGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSWUseHQpfDAsRT1FK01hdGguaW11bChCZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHVuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2''@;'; put 'put ''ZSx1bil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oVSsoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxobiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01hdGguaW11bChEZSx4dCl8MCkrTWF0aC5pbXVsKGtlLGh0KXwwLEE9QStNYXRoLmltdWwoa2UseHQpfDAsRT1FK01hdGguaW11bChS''@;'; put 'put ''ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxBPUErTWF0aC5pbXVsKEFlLGZu''@;'; put 'put ''KXwwO3ZhciBXaT0oVSsoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChOZSxXdCksbT0obT1NYXRoLmltdWwoTmUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoU3QsV2UpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwLEU9RStNYXRoLmltdWwoRGUscm4pfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bChSZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFJl''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwoSWUsdW4pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgcGE9KFUrKEU9RStNYXRoLmltdWwoQmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChCZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxwYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsc3QpLG09KG09TWF0aC5pbXVsKE5lLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKFN0LGh0KXwwLEE9QStNYXRoLmltdWwoU3QseHQpfDAsRT1FK01hdGguaW11bChu''@;'; put 'put ''dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLHVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxBPUErTWF0aC5pbXVsKGtlLGZu''@;'; put 'put ''KXwwO3ZhciBRbj0oVSsoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEw''@;'; put 'put ''ODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRoLmltdWwoTmUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LHVuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSx1bil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBsYT0oVSsoRT1FK01hdGguaW11bChEZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoa2UsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsZW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxodCksbT0obT1NYXRoLmltdWwoTmUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoU3QsdW4pfDAsQT1BK01hdGguaW11bChTdCxmbil8MDt2YXIgYmE9KFUrKEU9RStNYXRoLmltdWwobnQsWHQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUscm4pLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KE5lLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oVSsoRT1FK01hdGguaW11bCh5''@;'; put 'put ''dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoU3QsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoU3QsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSx1biksbT0obT1N''@;'; put 'put ''YXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsdW4pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBGYT0oVSsoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStN''@;'; put 'put ''YXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KFUrKEU9TWF0aC5pbXVsKE5lLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChOZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0''@;'; put 'put ''aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLFZbMF09dWEsVlsxXT1FaSxWWzJdPXZyLFZbM109V24sVls0XT0kaSxWWzVdPWVpLFZbNl09UXIsVls3XT1WaSxWWzhdPU5pLFZbOV09RGEsVlsxMF09THIsVlsxMV09V2ksVlsxMl09cGEsVlsxM109''@;'; put 'put ''UW4sVlsxNF09bGEsVlsxNV09YmEsVlsxNl09TGEsVlsxN109RmEsVlsxOF09dGksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEoeixnLHkpe3JldHVybihuZXcgWCkubXVscCh6LGcseSl9ZnVuY3Rpb24gWCh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11''@;'; put 'put ''bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcseSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcSh6LGcseSl7''@;'; put 'put ''eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUseS5sZW5ndGg9ei5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1h''@;'; put 'put ''eCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBsZT0oMHx6LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9''@;'; put 'put ''eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkpLHh9LFgucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9j''@;'; put 'put ''b3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sWC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+''@;'; put 'put ''PTE7cmV0dXJuIEN9LFgucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRbVV09eFtnW1VdXX0sWC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHks''@;'; put 'put ''eCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3IodmFyIEU9VTw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBVZT14W2FlK3dlXSxRZT1DW2Fl''@;'; put 'put ''K3dlXSxvdD14W2FlK3dlK1VdLE1lPUNbYWUrd2UrVV0sdmU9bmUqb3QtbGUqTWU7TWU9bmUqTWUrbGUqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1RZStNZSx4W2FlK3dlK1VdPVVlLW90LENbYWUrd2UrVV09UWUtTWUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpu''@;'; put 'put ''ZSxuZT12ZSl9fSxYLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sWC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZigh''@;'; put 'put ''KHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sWC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0Mr''@;'; put 'put ''Kyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sWC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9''@;'; put 'put ''MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxnW1ZdKSx4WzIqVisxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhbVl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxYLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJy''@;'; put 'put ''YXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxYLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3''@;'; put 'put ''IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3Ro''@;'; put 'put ''LEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2VdO21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0''@;'; put 'put ''dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sbGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxpemUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7''@;'; put 'put ''cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEw''@;'; put 'put ''ODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09Zz8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3Fy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3IEFycmF5KHou''@;'; put 'put ''Yml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKyss''@;'; put 'put ''eD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy''@;'; put 'put ''IFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+PjI2LXl9ViYm''@;'; put 'put ''KHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7''@;'; put 'put ''dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxVPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9Vn1pZigwIT09''@;'; put 'put ''VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09VixtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1B''@;'; put 'put ''fHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51''@;'; put 'put ''c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''Lm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53''@;'; put 'put ''b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhp''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlz''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlz''@;'; put 'put ''LndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgp''@;'; put 'put ''e3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixVPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspVT0oVj0oMHx0aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMubGVuZ3RoO1Qr''@;'; put 'put ''KylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxWPTB8VC53b3Jk''@;'; put 'put ''c1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoVikpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7''@;'; put 'put ''bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5lZ2F0aXZlPTAs''@;'; put 'put ''Qy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPVYuZGl2''@;'; put 'put ''Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkp''@;'; put 'put ''LHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlz''@;'; put 'put ''Lmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2''@;'; put 'put ''OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1v''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9k''@;'; put 'put ''KGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2''@;'; put 'put ''ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3''@;'; put 'put ''LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1v''@;'; put 'put ''ZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj1uZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8o''@;'; put 'put ''KTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zv''@;'; put 'put ''cih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2OysrbGUsd2U8PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09kZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEpO3kuY21wKHgp''@;'; put 'put ''Pj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHguaXN1Yih5KSxWLmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7''@;'; put 'put ''dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYm''@;'; put 'put ''VTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7VS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNP''@;'; put 'put ''ZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihn''@;'; put 'put ''KXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5p''@;'; put 'put ''dXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5Lmlz''@;'; put 'put ''dWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8''@;'; put 'put ''PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRzW1ZdPVUmPTY3''@;'; put 'put ''MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''eCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9''@;'; put 'put ''MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''IT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1''@;'; put 'put ''cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09''@;'; put 'put ''PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcp''@;'; put 'put ''Pj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5w''@;'; put 'put ''cm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIp''@;'; put 'put ''LGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJl''@;'; put 'put ''ZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQs''@;'; put 'put ''InJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhp''@;'; put 'put ''cyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMs''@;'; put 'put ''Zyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGws''@;'; put 'put ''cDI1NTE5Om51bGx9O2Z1bmN0aW9uIHJlKHosZyl7dGhpcy5uYW1lPXosdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBvZSgp''@;'; put 'put ''e3JlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtyZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7cmUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe3JlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIgZz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4oMSksIm1vZHVs''@;'; put 'put ''dXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRo''@;'; put 'put ''aXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMu''@;'; put 'put ''bWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1yZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30scmUucHJvdG90eXBlLmlyZWR1''@;'; put 'put ''Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8o''@;'; put 'put ''eS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LHJlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxyZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKG9lLHJlKSxvZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVu''@;'; put 'put ''Z3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgVj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+MjIsVj1VfWcu''@;'; put 'put ''d29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcubGVuZ3RoPjEwPzEwOjl9LG9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LE4o''@;'; put 'put ''Z2UscmUpLE4oX2UscmUpLE4oVGUscmUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkm''@;'; put 'put ''JihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IG9lO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigi''@;'; put 'put ''cDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJl''@;'; put 'put ''ZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3Vi''@;'; put 'put ''KHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihn''@;'; put 'put ''LHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJu''@;'; put 'put ''IHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcs''@;'; put 'put ''eSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5t''@;'; put 'put ''LmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQodGhpcyksVT1W''@;'; put 'put ''LnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhn''@;'; put 'put ''LEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksbGU9VDswIT09bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxVZT0wOzAhPT13ZS5jbXAoVik7VWUrKyl3ZT13ZS5yZWRTcXIoKTtwKFVlPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4obGUtVWUtMSkp''@;'; put 'put ''O2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksbGU9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5''@;'; put 'put ''KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygx''@;'; put 'put ''KS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15Lndv''@;'; put 'put ''cmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtWIT09Q1swXSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0yNn1yZXR1cm4g''@;'; put 'put ''Vn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1v''@;'; put 'put ''ZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNo''@;'; put 'put ''aWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw2NzIxMTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDcxOTkzKSxfPWIoMzQ3MjUpLHA9YigzNjYzNiks''@;'; put 'put ''Tj1iKDI1NDQzKSx3PWIoMzI0Nyk7ZnVuY3Rpb24gRihIKXt3LmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1IfUQoRix3KSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEgpe3RoaXMuX2hhc2gudXBkYXRlKEgpfSxGLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sY2UuZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4ibWQ1Ij09PShSPVIudG9Mb3dlckNhc2UoKSk/bmV3IF86InJtZDE2MCI9PT1SfHwicmlwZW1kMTYwIj09PVI/bmV3IHA6bmV3IEYoTihSKSl9fSw4MzQwNzooY2UsSixiKT0+e3ZhciBEPWIoMzQ3''@;'; put 'put ''MjUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuKG5ldyBEKS51cGRhdGUoXykuZGlnZXN0KCl9fSw1NjQzMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDcxOTkzKSxfPWIoOTA1MDkpLHA9YigzMjQ3KSxOPWIoMjcwNTQpLkJ1ZmZlcix3PWIoODM0MDcpLEY9YigzNjYz''@;'; put 'put ''NiksSD1iKDI1NDQzKSxSPU4uYWxsb2MoMTI4KTtmdW5jdGlvbiBqKFAsTCl7cC5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgTCYmKEw9Ti5mcm9tKEwpKTt2YXIgWT0ic2hhNTEyIj09PVB8fCJzaGEzODQiPT09UD8xMjg6NjQ7dGhpcy5fYWxnPVAsdGhpcy5fa2V5PUws''@;'; put 'put ''TC5sZW5ndGg+WT9MPSgicm1kMTYwIj09PVA/bmV3IEY6SChQKSkudXBkYXRlKEwpLmRpZ2VzdCgpOkwubGVuZ3RoPFkmJihMPU4uY29uY2F0KFtMLFJdLFkpKTtmb3IodmFyIFc9dGhpcy5faXBhZD1OLmFsbG9jVW5zYWZlKFkpLFo9dGhpcy5fb3BhZD1OLmFsbG9jVW5zYWZlKFkpLHE9MDtx''@;'; put 'put ''PFk7cSsrKVdbcV09NTReTFtxXSxaW3FdPTkyXkxbcV07dGhpcy5faGFzaD0icm1kMTYwIj09PVA/bmV3IEY6SChQKSx0aGlzLl9oYXNoLnVwZGF0ZShXKX1EKGoscCksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLl9oYXNoLnVwZGF0ZShQKX0sai5wcm90b3R5cGUuX2Zp''@;'; put 'put ''bmFsPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IEY6SCh0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKFApLmRpZ2VzdCgpfSxjZS5leHBvcnRzPWZ1bmN0aW9uKEwsWSl7cmV0dXJuInJtZDE2''@;'; put 'put ''MCI9PT0oTD1MLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PUw/bmV3IGooInJtZDE2MCIsWSk6Im1kNSI9PT1MP25ldyBfKHcsWSk6bmV3IGooTCxZKX19LDkwNTA5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzE5OTMpLF89YigyNzA1NCkuQnVmZmVyLHA9YigzMjQ3''@;'; put 'put ''KSxOPV8uYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIEYoSCxSKXtwLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBSJiYoUj1fLmZyb20oUikpLHRoaXMuX2FsZz1ILHRoaXMuX2tleT1SLFIubGVuZ3RoPnc/Uj1IKFIpOlIubGVuZ3RoPHcmJihSPV8uY29uY2F0KFtSLE5d''@;'; put 'put ''LHcpKTtmb3IodmFyIGo9dGhpcy5faXBhZD1fLmFsbG9jVW5zYWZlKHcpLFA9dGhpcy5fb3BhZD1fLmFsbG9jVW5zYWZlKHcpLEw9MDtMPHc7TCsrKWpbTF09NTReUltMXSxQW0xdPTkyXlJbTF07dGhpcy5faGFzaD1bal19RChGLHApLEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSCl7''@;'; put 'put ''dGhpcy5faGFzaC5wdXNoKEgpfSxGLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgSD10aGlzLl9hbGcoXy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoXy5jb25jYXQoW3RoaXMuX29wYWQsSF0pKX0sY2UuZXhwb3J0cz1GfSw5MTQyNjooY2UsSixiKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtKLnJhbmRvbUJ5dGVzPUoucm5nPUoucHNldWRvUmFuZG9tQnl0ZXM9Si5wcm5nPWIoMzM0MiksSi5jcmVhdGVIYXNoPUouSGFzaD1iKDY3MjExKSxKLmNyZWF0ZUhtYWM9Si5IbWFjPWIoNTY0MzIpO3ZhciBEPWIoOTk1NjApLF89T2JqZWN0LmtleXMoRCkscD1bInNoYTEi''@;'; put 'put ''LCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoXyk7Si5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcH07dmFyIE49Yig5MzM5Nyk7Si5wYmtkZjI9Ti5wYmtkZjIsSi5wYmtkZjJTeW5jPU4ucGJrZGYyU3luYzt2YXIgdz1iKDg4''@;'; put 'put ''ODYyKTtKLkNpcGhlcj13LkNpcGhlcixKLmNyZWF0ZUNpcGhlcj13LmNyZWF0ZUNpcGhlcixKLkNpcGhlcml2PXcuQ2lwaGVyaXYsSi5jcmVhdGVDaXBoZXJpdj13LmNyZWF0ZUNpcGhlcml2LEouRGVjaXBoZXI9dy5EZWNpcGhlcixKLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIs''@;'; put 'put ''Si5EZWNpcGhlcml2PXcuRGVjaXBoZXJpdixKLmNyZWF0ZURlY2lwaGVyaXY9dy5jcmVhdGVEZWNpcGhlcml2LEouZ2V0Q2lwaGVycz13LmdldENpcGhlcnMsSi5saXN0Q2lwaGVycz13Lmxpc3RDaXBoZXJzO3ZhciBGPWIoNDM3Nyk7Si5EaWZmaWVIZWxsbWFuR3JvdXA9Ri5EaWZmaWVIZWxs''@;'; put 'put ''bWFuR3JvdXAsSi5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9Ri5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsSi5nZXREaWZmaWVIZWxsbWFuPUYuZ2V0RGlmZmllSGVsbG1hbixKLmNyZWF0ZURpZmZpZUhlbGxtYW49Ri5jcmVhdGVEaWZmaWVIZWxsbWFuLEouRGlmZmllSGVsbG1hbj1GLkRp''@;'; put 'put ''ZmZpZUhlbGxtYW47dmFyIEg9Yig3OTE0Myk7Si5jcmVhdGVTaWduPUguY3JlYXRlU2lnbixKLlNpZ249SC5TaWduLEouY3JlYXRlVmVyaWZ5PUguY3JlYXRlVmVyaWZ5LEouVmVyaWZ5PUguVmVyaWZ5LEouY3JlYXRlRUNESD1iKDg3MzAzKTt2YXIgUj1iKDUyOTY1KTtKLnB1YmxpY0VuY3J5''@;'; put 'put ''cHQ9Ui5wdWJsaWNFbmNyeXB0LEoucHJpdmF0ZUVuY3J5cHQ9Ui5wcml2YXRlRW5jcnlwdCxKLnB1YmxpY0RlY3J5cHQ9Ui5wdWJsaWNEZWNyeXB0LEoucHJpdmF0ZURlY3J5cHQ9Ui5wcml2YXRlRGVjcnlwdDt2YXIgaj1iKDk2ODIpO0oucmFuZG9tRmlsbD1qLnJhbmRvbUZpbGwsSi5yYW5k''@;'; put 'put ''b21GaWxsU3luYz1qLnJhbmRvbUZpbGxTeW5jLEouY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XG53ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1xuaHR0cHM6Ly9naXRodWIu''@;'; put 'put ''Y29tL2Jyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiKX0sSi5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VO''@;'; put 'put ''QUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9O''@;'; put 'put ''X0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwxNzY1NjpmdW5jdGlvbihjZSxKLGIpe3ZhciBEO2NlLmV4cG9ydHM9KEQ9RHx8ZnVuY3Rpb24oXyxwKXt2YXIgTjtpZih0eXBlb2Ygd2luZG93PCJ1IiYmd2lu''@;'; put 'put ''ZG93LmNyeXB0byYmKE49d2luZG93LmNyeXB0byksdHlwZW9mIHNlbGY8InUiJiZzZWxmLmNyeXB0byYmKE49c2VsZi5jcnlwdG8pLHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5jcnlwdG8mJihOPWdsb2JhbFRoaXMuY3J5cHRvKSwhTiYmdHlwZW9mIHdpbmRvdzwidSImJndp''@;'; put 'put ''bmRvdy5tc0NyeXB0byYmKE49d2luZG93Lm1zQ3J5cHRvKSwhTiYmdHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbC5jcnlwdG8mJihOPWdsb2JhbC5jcnlwdG8pLCFOKXRyeXtOPWIoOTE0MjYpfWNhdGNoe312YXIgdz1mdW5jdGlvbigpe2lmKE4pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOLmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcyl0cnl7cmV0dXJuIE4uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF19Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBOLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gTi5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpfWNhdGNoe319dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBudW1iZXIuIil9LEY9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiBYKCl7fXJldHVybiBmdW5jdGlvbih0ZSl7dmFyIHJlO3JldHVybiBYLnByb3Rv''@;'; put 'put ''dHlwZT10ZSxyZT1uZXcgWCxYLnByb3RvdHlwZT1udWxsLHJlfX0oKSxIPXt9LFI9SC5saWI9e30saj1SLkJhc2U9ZnVuY3Rpb24oKXtyZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKFgpe3ZhciB0ZT1GKHRoaXMpO3JldHVybiBYJiZ0ZS5taXhJbihYKSwoIXRlLmhhc093blByb3BlcnR5KCJpbml0''@;'; put 'put ''Iil8fHRoaXMuaW5pdD09PXRlLmluaXQpJiYodGUuaW5pdD1mdW5jdGlvbigpe3RlLiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHRlLmluaXQucHJvdG90eXBlPXRlLHRlLiRzdXBlcj10aGlzLHRlfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgWD10aGlzLmV4dGVuZCgpO3Jl''@;'; put 'put ''dHVybiBYLmluaXQuYXBwbHkoWCxhcmd1bWVudHMpLFh9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKFgpe2Zvcih2YXIgdGUgaW4gWClYLmhhc093blByb3BlcnR5KHRlKSYmKHRoaXNbdGVdPVhbdGVdKTtYLmhhc093blByb3BlcnR5KCJ0b1N0cmluZyIpJiYodGhpcy50b1N0''@;'; put 'put ''cmluZz1YLnRvU3RyaW5nKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSxQPVIuV29yZEFycmF5PWouZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKFgsdGUpe1g9dGhpcy53b3Jkcz1YfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXRl''@;'; put 'put ''P3RlOjQqWC5sZW5ndGh9LHRvU3RyaW5nOmZ1bmN0aW9uKFgpe3JldHVybihYfHxZKS5zdHJpbmdpZnkodGhpcyl9LGNvbmNhdDpmdW5jdGlvbihYKXt2YXIgdGU9dGhpcy53b3JkcyxyZT1YLndvcmRzLG9lPXRoaXMuc2lnQnl0ZXMsZ2U9WC5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksb2Ul''@;'; put 'put ''NClmb3IodmFyIF9lPTA7X2U8Z2U7X2UrKyl0ZVtvZStfZT4+PjJdfD0ocmVbX2U+Pj4yXT4+PjI0LV9lJTQqOCYyNTUpPDwyNC0ob2UrX2UpJTQqODtlbHNlIGZvcih2YXIgU2U9MDtTZTxnZTtTZSs9NCl0ZVtvZStTZT4+PjJdPXJlW1NlPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPWdl''@;'; put 'put ''LHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIFg9dGhpcy53b3Jkcyx0ZT10aGlzLnNpZ0J5dGVzO1hbdGU+Pj4yXSY9NDI5NDk2NzI5NTw8MzItdGUlNCo4LFgubGVuZ3RoPV8uY2VpbCh0ZS80KX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgWD1qLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIFgu''@;'; put 'put ''d29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxYfSxyYW5kb206ZnVuY3Rpb24oWCl7Zm9yKHZhciB0ZT1bXSxyZT0wO3JlPFg7cmUrPTQpdGUucHVzaCh3KCkpO3JldHVybiBuZXcgUC5pbml0KHRlLFgpfX0pLEw9SC5lbmM9e30sWT1MLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKFgpe2Zvcih2''@;'; put 'put ''YXIgdGU9WC53b3JkcyxyZT1YLnNpZ0J5dGVzLG9lPVtdLGdlPTA7Z2U8cmU7Z2UrKyl7dmFyIF9lPXRlW2dlPj4+Ml0+Pj4yNC1nZSU0KjgmMjU1O29lLnB1c2goKF9lPj4+NCkudG9TdHJpbmcoMTYpKSxvZS5wdXNoKCgxNSZfZSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gb2Uuam9pbigiIil9''@;'; put 'put ''LHBhcnNlOmZ1bmN0aW9uKFgpe2Zvcih2YXIgdGU9WC5sZW5ndGgscmU9W10sb2U9MDtvZTx0ZTtvZSs9MilyZVtvZT4+PjNdfD1wYXJzZUludChYLnN1YnN0cihvZSwyKSwxNik8PDI0LW9lJTgqNDtyZXR1cm4gbmV3IFAuaW5pdChyZSx0ZS8yKX19LEI9TC5MYXRpbjE9e3N0cmluZ2lmeTpm''@;'; put 'put ''dW5jdGlvbihYKXtmb3IodmFyIHRlPVgud29yZHMscmU9WC5zaWdCeXRlcyxvZT1bXSxnZT0wO2dlPHJlO2dlKyspb2UucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHRlW2dlPj4+Ml0+Pj4yNC1nZSU0KjgmMjU1KSk7cmV0dXJuIG9lLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihYKXtmb3Io''@;'; put 'put ''dmFyIHRlPVgubGVuZ3RoLHJlPVtdLG9lPTA7b2U8dGU7b2UrKylyZVtvZT4+PjJdfD0oMjU1JlguY2hhckNvZGVBdChvZSkpPDwyNC1vZSU0Kjg7cmV0dXJuIG5ldyBQLmluaXQocmUsdGUpfX0sVz1MLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihYKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNv''@;'; put 'put ''bXBvbmVudChlc2NhcGUoQi5zdHJpbmdpZnkoWCkpKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihYKXtyZXR1cm4gQi5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoWCkpKX19LFo9Ui5CdWZmZXJlZEJsb2Nr''@;'; put 'put ''QWxnb3JpdGhtPWouZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IFAuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oWCl7InN0cmluZyI9PXR5cGVvZiBYJiYoWD1XLnBhcnNlKFgpKSx0aGlzLl9kYXRhLmNvbmNhdChYKSx0aGlzLl9uRGF0''@;'; put 'put ''YUJ5dGVzKz1YLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbihYKXt2YXIgdGUscmU9dGhpcy5fZGF0YSxvZT1yZS53b3JkcyxnZT1yZS5zaWdCeXRlcyxfZT10aGlzLmJsb2NrU2l6ZSxTZT1nZS8oNCpfZSksemU9KFNlPVg/Xy5jZWlsKFNlKTpfLm1heCgoMHxTZSktdGhpcy5fbWluQnVm''@;'; put 'put ''ZmVyU2l6ZSwwKSkqX2Usej1fLm1pbig0KnplLGdlKTtpZih6ZSl7Zm9yKHZhciBnPTA7Zzx6ZTtnKz1fZSl0aGlzLl9kb1Byb2Nlc3NCbG9jayhvZSxnKTt0ZT1vZS5zcGxpY2UoMCx6ZSkscmUuc2lnQnl0ZXMtPXp9cmV0dXJuIG5ldyBQLmluaXQodGUseil9LGNsb25lOmZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFg9ai5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBYLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxYfSxfbWluQnVmZmVyU2l6ZTowfSksUT0oUi5IYXNoZXI9Wi5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oWCl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKFgpLHRo''@;'; put 'put ''aXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtaLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oWCl7cmV0dXJuIHRoaXMuX2FwcGVuZChYKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oWCl7cmV0dXJuIFgmJnRoaXMu''@;'; put 'put ''X2FwcGVuZChYKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKFgpe3JldHVybiBmdW5jdGlvbih0ZSxyZSl7cmV0dXJuIG5ldyBYLmluaXQocmUpLmZpbmFsaXplKHRlKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKFgpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbih0ZSxyZSl7cmV0dXJuIG5ldyBRLkhNQUMuaW5pdChYLHJlKS5maW5hbGl6ZSh0ZSl9fX0pLEguYWxnbz17fSk7cmV0dXJuIEh9KE1hdGgpLEQpfSw3ODg1NTpmdW5jdGlvbihjZSxKLGIpe3ZhciBEO2NlLmV4cG9ydHM9KEQ9YigxNzY1NiksZnVuY3Rpb24oXyl7dmFyIHA9''@;'; put 'put ''RCxOPXAubGliLHc9Ti5Xb3JkQXJyYXksRj1OLkhhc2hlcixIPXAuYWxnbyxSPVtdOyFmdW5jdGlvbigpe2Zvcih2YXIgVz0wO1c8NjQ7VysrKVJbV109NDI5NDk2NzI5NipfLmFicyhfLnNpbihXKzEpKXwwfSgpO3ZhciBqPUguTUQ1PUYuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuX2hhc2g9bmV3IHcuaW5pdChbMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4XSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihXLFope2Zvcih2YXIgcT0wO3E8MTY7cSsrKXt2YXIgUT1aK3EsWD1XW1FdO1dbUV09MTY3MTE5MzUmKFg8PDh8WD4+PjI0KXw0''@;'; put 'put ''Mjc4MjU1MzYwJihYPDwyNHxYPj4+OCl9dmFyIHRlPXRoaXMuX2hhc2gud29yZHMscmU9V1taKzBdLG9lPVdbWisxXSxnZT1XW1orMl0sX2U9V1taKzNdLFRlPVdbWis0XSxTZT1XW1orNV0semU9V1taKzZdLHo9V1taKzddLGc9V1taKzhdLHk9V1taKzldLHg9V1taKzEwXSxDPVdbWisxMV0s''@;'; put 'put ''VD1XW1orMTJdLFY9V1taKzEzXSxVPVdbWisxNF0sRT1XW1orMTVdLG09dGVbMF0sQT10ZVsxXSxhZT10ZVsyXSxuZT10ZVszXTttPVAobSxBLGFlLG5lLHJlLDcsUlswXSksbmU9UChuZSxtLEEsYWUsb2UsMTIsUlsxXSksYWU9UChhZSxuZSxtLEEsZ2UsMTcsUlsyXSksQT1QKEEsYWUsbmUs''@;'; put 'put ''bSxfZSwyMixSWzNdKSxtPVAobSxBLGFlLG5lLFRlLDcsUls0XSksbmU9UChuZSxtLEEsYWUsU2UsMTIsUls1XSksYWU9UChhZSxuZSxtLEEsemUsMTcsUls2XSksQT1QKEEsYWUsbmUsbSx6LDIyLFJbN10pLG09UChtLEEsYWUsbmUsZyw3LFJbOF0pLG5lPVAobmUsbSxBLGFlLHksMTIsUls5''@;'; put 'put ''XSksYWU9UChhZSxuZSxtLEEseCwxNyxSWzEwXSksQT1QKEEsYWUsbmUsbSxDLDIyLFJbMTFdKSxtPVAobSxBLGFlLG5lLFQsNyxSWzEyXSksbmU9UChuZSxtLEEsYWUsViwxMixSWzEzXSksYWU9UChhZSxuZSxtLEEsVSwxNyxSWzE0XSksbT1MKG0sQT1QKEEsYWUsbmUsbSxFLDIyLFJbMTVd''@;'; put 'put ''KSxhZSxuZSxvZSw1LFJbMTZdKSxuZT1MKG5lLG0sQSxhZSx6ZSw5LFJbMTddKSxhZT1MKGFlLG5lLG0sQSxDLDE0LFJbMThdKSxBPUwoQSxhZSxuZSxtLHJlLDIwLFJbMTldKSxtPUwobSxBLGFlLG5lLFNlLDUsUlsyMF0pLG5lPUwobmUsbSxBLGFlLHgsOSxSWzIxXSksYWU9TChhZSxuZSxt''@;'; put 'put ''LEEsRSwxNCxSWzIyXSksQT1MKEEsYWUsbmUsbSxUZSwyMCxSWzIzXSksbT1MKG0sQSxhZSxuZSx5LDUsUlsyNF0pLG5lPUwobmUsbSxBLGFlLFUsOSxSWzI1XSksYWU9TChhZSxuZSxtLEEsX2UsMTQsUlsyNl0pLEE9TChBLGFlLG5lLG0sZywyMCxSWzI3XSksbT1MKG0sQSxhZSxuZSxWLDUs''@;'; put 'put ''UlsyOF0pLG5lPUwobmUsbSxBLGFlLGdlLDksUlsyOV0pLGFlPUwoYWUsbmUsbSxBLHosMTQsUlszMF0pLG09WShtLEE9TChBLGFlLG5lLG0sVCwyMCxSWzMxXSksYWUsbmUsU2UsNCxSWzMyXSksbmU9WShuZSxtLEEsYWUsZywxMSxSWzMzXSksYWU9WShhZSxuZSxtLEEsQywxNixSWzM0XSks''@;'; put 'put ''QT1ZKEEsYWUsbmUsbSxVLDIzLFJbMzVdKSxtPVkobSxBLGFlLG5lLG9lLDQsUlszNl0pLG5lPVkobmUsbSxBLGFlLFRlLDExLFJbMzddKSxhZT1ZKGFlLG5lLG0sQSx6LDE2LFJbMzhdKSxBPVkoQSxhZSxuZSxtLHgsMjMsUlszOV0pLG09WShtLEEsYWUsbmUsViw0LFJbNDBdKSxuZT1ZKG5l''@;'; put 'put ''LG0sQSxhZSxyZSwxMSxSWzQxXSksYWU9WShhZSxuZSxtLEEsX2UsMTYsUls0Ml0pLEE9WShBLGFlLG5lLG0semUsMjMsUls0M10pLG09WShtLEEsYWUsbmUseSw0LFJbNDRdKSxuZT1ZKG5lLG0sQSxhZSxULDExLFJbNDVdKSxhZT1ZKGFlLG5lLG0sQSxFLDE2LFJbNDZdKSxtPUIobSxBPVko''@;'; put 'put ''QSxhZSxuZSxtLGdlLDIzLFJbNDddKSxhZSxuZSxyZSw2LFJbNDhdKSxuZT1CKG5lLG0sQSxhZSx6LDEwLFJbNDldKSxhZT1CKGFlLG5lLG0sQSxVLDE1LFJbNTBdKSxBPUIoQSxhZSxuZSxtLFNlLDIxLFJbNTFdKSxtPUIobSxBLGFlLG5lLFQsNixSWzUyXSksbmU9QihuZSxtLEEsYWUsX2Us''@;'; put 'put ''MTAsUls1M10pLGFlPUIoYWUsbmUsbSxBLHgsMTUsUls1NF0pLEE9QihBLGFlLG5lLG0sb2UsMjEsUls1NV0pLG09QihtLEEsYWUsbmUsZyw2LFJbNTZdKSxuZT1CKG5lLG0sQSxhZSxFLDEwLFJbNTddKSxhZT1CKGFlLG5lLG0sQSx6ZSwxNSxSWzU4XSksQT1CKEEsYWUsbmUsbSxWLDIxLFJb''@;'; put 'put ''NTldKSxtPUIobSxBLGFlLG5lLFRlLDYsUls2MF0pLG5lPUIobmUsbSxBLGFlLEMsMTAsUls2MV0pLGFlPUIoYWUsbmUsbSxBLGdlLDE1LFJbNjJdKSxBPUIoQSxhZSxuZSxtLHksMjEsUls2M10pLHRlWzBdPXRlWzBdK218MCx0ZVsxXT10ZVsxXStBfDAsdGVbMl09dGVbMl0rYWV8MCx0ZVsz''@;'; put 'put ''XT10ZVszXStuZXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBXPXRoaXMuX2RhdGEsWj1XLndvcmRzLHE9OCp0aGlzLl9uRGF0YUJ5dGVzLFE9OCpXLnNpZ0J5dGVzO1pbUT4+PjVdfD0xMjg8PDI0LVElMzI7dmFyIFg9Xy5mbG9vcihxLzQyOTQ5NjcyOTYpLHRlPXE7WlsxNSsoUSs2''@;'; put 'put ''ND4+Pjk8PDQpXT0xNjcxMTkzNSYoWDw8OHxYPj4+MjQpfDQyNzgyNTUzNjAmKFg8PDI0fFg+Pj44KSxaWzE0KyhRKzY0Pj4+OTw8NCldPTE2NzExOTM1Jih0ZTw8OHx0ZT4+PjI0KXw0Mjc4MjU1MzYwJih0ZTw8MjR8dGU+Pj44KSxXLnNpZ0J5dGVzPTQqKFoubGVuZ3RoKzEpLHRoaXMuX3By''@;'; put 'put ''b2Nlc3MoKTtmb3IodmFyIHJlPXRoaXMuX2hhc2gsb2U9cmUud29yZHMsZ2U9MDtnZTw0O2dlKyspe3ZhciBfZT1vZVtnZV07b2VbZ2VdPTE2NzExOTM1JihfZTw8OHxfZT4+PjI0KXw0Mjc4MjU1MzYwJihfZTw8MjR8X2U+Pj44KX1yZXR1cm4gcmV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFc9''@;'; put 'put ''Ri5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBXLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxXfX0pO2Z1bmN0aW9uIFAoVyxaLHEsUSxYLHRlLHJlKXt2YXIgb2U9VysoWiZxfH5aJlEpK1grcmU7cmV0dXJuKG9lPDx0ZXxvZT4+PjMyLXRlKStafWZ1bmN0aW9uIEwoVyxaLHEsUSxYLHRlLHJl''@;'; put 'put ''KXt2YXIgb2U9VysoWiZRfHEmflEpK1grcmU7cmV0dXJuKG9lPDx0ZXxvZT4+PjMyLXRlKStafWZ1bmN0aW9uIFkoVyxaLHEsUSxYLHRlLHJlKXt2YXIgb2U9VysoWl5xXlEpK1grcmU7cmV0dXJuKG9lPDx0ZXxvZT4+PjMyLXRlKStafWZ1bmN0aW9uIEIoVyxaLHEsUSxYLHRlLHJlKXt2YXIg''@;'; put 'put ''b2U9VysocV4oWnx+USkpK1grcmU7cmV0dXJuKG9lPDx0ZXxvZT4+PjMyLXRlKStafXAuTUQ1PUYuX2NyZWF0ZUhlbHBlcihqKSxwLkhtYWNNRDU9Ri5fY3JlYXRlSG1hY0hlbHBlcihqKX0oTWF0aCksRC5NRDUpfSw5MjczNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ1NzAp''@;'; put 'put ''LF89Yig1ODQxMykscD1iKDQ2NzU4KSxOPWIoODM3OTgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRixILFIpe2lmKCFGfHwib2JqZWN0IiE9dHlwZW9mIEYmJiJmdW5jdGlvbiIhPXR5cGVvZiBGKXRocm93IG5ldyBwKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lm''@;'; put 'put ''KCJzdHJpbmciIT10eXBlb2YgSCYmInN5bWJvbCIhPXR5cGVvZiBIKXRocm93IG5ldyBwKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVu''@;'; put 'put ''dHNbM10pdGhyb3cgbmV3IHAoImBub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgcCgi''@;'; put 'put ''YG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcgcCgiYG5vbkNvbmZpZ3VyYWJsZWAsIGlm''@;'; put 'put ''IHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNl0pdGhyb3cgbmV3IHAoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciBqPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxQPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxMPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06bnVsbCxZPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLEI9ISFOJiZOKEYsSCk7aWYoRClEKEYsSCx7''@;'; put 'put ''Y29uZmlndXJhYmxlOm51bGw9PT1MJiZCP0IuY29uZmlndXJhYmxlOiFMLGVudW1lcmFibGU6bnVsbD09PWomJkI/Qi5lbnVtZXJhYmxlOiFqLHZhbHVlOlIsd3JpdGFibGU6bnVsbD09PVAmJkI/Qi53cml0YWJsZTohUH0pO2Vsc2V7aWYoIVkmJihqfHxQfHxMKSl0aHJvdyBuZXcgXygiVGhp''@;'; put 'put ''cyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtGW0hdPVJ9fX0sNzE1NDk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Si51dGlscz1iKDg1NjcxKSxK''@;'; put 'put ''LkNpcGhlcj1iKDEwMjE5KSxKLkRFUz1iKDY0MTY2KSxKLkNCQz1iKDg4ODAwKSxKLkVERT1iKDYyMTIyKX0sODg4MDA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzOTIxMCksXz1iKDcxOTkzKSxwPXt9O2Z1bmN0aW9uIE4oRil7RC5lcXVhbChGLmxlbmd0aCw4LCJJbnZhbGlk''@;'; put 'put ''IElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgSD0wO0g8dGhpcy5pdi5sZW5ndGg7SCsrKXRoaXMuaXZbSF09RltIXX1KLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoRil7ZnVuY3Rpb24gSChMKXtGLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9XyhILEYpO2Zv''@;'; put 'put ''cih2YXIgUj1PYmplY3Qua2V5cyhwKSxqPTA7ajxSLmxlbmd0aDtqKyspe3ZhciBQPVJbal07SC5wcm90b3R5cGVbUF09cFtQXX1yZXR1cm4gSC5jcmVhdGU9ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBIKFkpfSxIfSxwLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEg9bmV3IE4odGhpcy5vcHRp''@;'; put 'put ''b25zLml2KTt0aGlzLl9jYmNTdGF0ZT1IfSxwLl91cGRhdGU9ZnVuY3Rpb24oSCxSLGosUCl7dmFyIFk9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLEI9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tT''@;'; put 'put ''aXplO1crKylCW1ddXj1IW1IrV107Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsQiwwLGosUCksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJbV109altQK1ddfWVsc2V7Zm9yKFkuX3VwZGF0ZS5jYWxsKHRoaXMsSCxSLGosUCksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKWpbUCtXXV49QltX''@;'; put 'put ''XTtmb3IoVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKUJbV109SFtSK1ddfX19LDEwMjE5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzkyMTApO2Z1bmN0aW9uIF8ocCl7dGhpcy5vcHRpb25zPXAsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgs''@;'; put 'put ''dGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1wLnBhZGRpbmd9Y2UuZXhwb3J0cz1fLF8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxfLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oTil7cmV0dXJuIDA9PT1OLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChOKTp0aGlzLl91cGRhdGVFbmNyeXB0KE4pfSxfLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKE4sdyl7Zm9yKHZhciBGPU1hdGgubWluKHRoaXMuYnVmZmVyLmxl''@;'; put 'put ''bmd0aC10aGlzLmJ1ZmZlck9mZixOLmxlbmd0aC13KSxIPTA7SDxGO0grKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitIXT1OW3crSF07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1GLEZ9LF8ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihOLHcpe3JldHVybiB0aGlzLl91cGRh''@;'; put 'put ''dGUodGhpcy5idWZmZXIsMCxOLHcpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LF8ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKE4pe3ZhciB3PTAsRj0wLFI9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrTi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRo''@;'; put 'put ''aXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJih3Kz10aGlzLl9idWZmZXIoTix3KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKEYrPXRoaXMuX2ZsdXNoQnVmZmVyKFIsRikpKTtmb3IodmFyIGo9Ti5sZW5ndGgtKE4ubGVuZ3RoLXcpJXRoaXMuYmxvY2tT''@;'; put 'put ''aXplO3c8ajt3Kz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoTix3LFIsRiksRis9dGhpcy5ibG9ja1NpemU7Zm9yKDt3PE4ubGVuZ3RoO3crKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1OW3ddO3JldHVybiBSfSxfLnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''RGVjcnlwdD1mdW5jdGlvbihOKXtmb3IodmFyIHc9MCxGPTAsSD1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK04ubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxSPW5ldyBBcnJheShIKnRoaXMuYmxvY2tTaXplKTtIPjA7SC0tKXcrPXRoaXMuX2J1ZmZlcihOLHcpLEYrPXRoaXMuX2ZsdXNo''@;'; put 'put ''QnVmZmVyKFIsRik7cmV0dXJuIHcrPXRoaXMuX2J1ZmZlcihOLHcpLFJ9LF8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKE4pe3ZhciB3LEY7cmV0dXJuIE4mJih3PXRoaXMudXBkYXRlKE4pKSxGPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5h''@;'; put 'put ''bERlY3J5cHQoKSx3P3cuY29uY2F0KEYpOkZ9LF8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oTix3KXtpZigwPT09dylyZXR1cm4hMTtmb3IoO3c8Ti5sZW5ndGg7KU5bdysrXT0wO3JldHVybiEwfSxfLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0''@;'; put 'put ''aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIE49bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsTiwwKSxOfSxfLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oTil7cmV0dXJuIE59LF8ucHJvdG90eXBlLl9m''@;'; put 'put ''aW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtELmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBOPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKE4sMCksdGhpcy5fdW5wYWQo''@;'; put 'put ''Til9fSw2NDE2NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM5MjEwKSxfPWIoNzE5OTMpLHA9Yig4NTY3MSksTj1iKDEwMjE5KTtmdW5jdGlvbiB3KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIEYoUil7Ti5jYWxsKHRoaXMsUik7dmFy''@;'; put 'put ''IGo9bmV3IHc7dGhpcy5fZGVzU3RhdGU9aix0aGlzLmRlcml2ZUtleXMoaixSLmtleSl9XyhGLE4pLGNlLmV4cG9ydHM9RixGLmNyZWF0ZT1mdW5jdGlvbihqKXtyZXR1cm4gbmV3IEYoail9O3ZhciBIPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtGLnByb3RvdHlwZS5kZXJp''@;'; put 'put ''dmVLZXlzPWZ1bmN0aW9uKGosUCl7ai5rZXlzPW5ldyBBcnJheSgzMiksRC5lcXVhbChQLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEw9cC5yZWFkVUludDMyQkUoUCwwKSxZPXAucmVhZFVJbnQzMkJFKFAsNCk7cC5wYzEoTCxZLGoudG1wLDApLEw9''@;'; put 'put ''ai50bXBbMF0sWT1qLnRtcFsxXTtmb3IodmFyIEI9MDtCPGoua2V5cy5sZW5ndGg7Qis9Mil7dmFyIFc9SFtCPj4+MV07TD1wLnIyOHNobChMLFcpLFk9cC5yMjhzaGwoWSxXKSxwLnBjMihMLFksai5rZXlzLEIpfX0sRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihqLFAsTCxZKXt2YXIg''@;'; put 'put ''Qj10aGlzLl9kZXNTdGF0ZSxXPXAucmVhZFVJbnQzMkJFKGosUCksWj1wLnJlYWRVSW50MzJCRShqLFArNCk7cC5pcChXLFosQi50bXAsMCksVz1CLnRtcFswXSxaPUIudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KEIsVyxaLEIudG1wLDApOnRoaXMuX2RlY3J5''@;'; put 'put ''cHQoQixXLFosQi50bXAsMCksWj1CLnRtcFsxXSxwLndyaXRlVUludDMyQkUoTCxXPUIudG1wWzBdLFkpLHAud3JpdGVVSW50MzJCRShMLFosWSs0KX0sRi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihqLFApe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgTD1qLmxlbmd0''@;'; put 'put ''aC1QLFk9UDtZPGoubGVuZ3RoO1krKylqW1ldPUw7cmV0dXJuITB9LEYucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihqKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gajtmb3IodmFyIFA9altqLmxlbmd0aC0xXSxMPWoubGVuZ3RoLVA7TDxqLmxlbmd0aDtMKyspRC5lcXVhbChqW0xd''@;'; put 'put ''LFApO3JldHVybiBqLnNsaWNlKDAsai5sZW5ndGgtUCl9LEYucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKGosUCxMLFksQil7Zm9yKHZhciBXPVAsWj1MLHE9MDtxPGoua2V5cy5sZW5ndGg7cSs9Mil7dmFyIFE9ai5rZXlzW3FdLFg9ai5rZXlzW3ErMV07cC5leHBhbmQoWixqLnRtcCww''@;'; put 'put ''KTt2YXIgdGU9cC5zdWJzdGl0dXRlKFFePWoudG1wWzBdLFhePWoudG1wWzFdKSxvZT1aO1o9KFdecC5wZXJtdXRlKHRlKSk+Pj4wLFc9b2V9cC5yaXAoWixXLFksQil9LEYucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKGosUCxMLFksQil7Zm9yKHZhciBXPUwsWj1QLHE9ai5rZXlzLmxl''@;'; put 'put ''bmd0aC0yO3E+PTA7cS09Mil7dmFyIFE9ai5rZXlzW3FdLFg9ai5rZXlzW3ErMV07cC5leHBhbmQoVyxqLnRtcCwwKTt2YXIgdGU9cC5zdWJzdGl0dXRlKFFePWoudG1wWzBdLFhePWoudG1wWzFdKSxvZT1XO1c9KFpecC5wZXJtdXRlKHRlKSk+Pj4wLFo9b2V9cC5yaXAoVyxaLFksQil9fSw2''@;'; put 'put ''MjEyMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM5MjEwKSxfPWIoNzE5OTMpLHA9YigxMDIxOSksTj1iKDY0MTY2KTtmdW5jdGlvbiB3KEgsUil7RC5lcXVhbChSLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGo9Ui5zbGljZSgwLDgpLFA9Ui5zbGljZSg4''@;'; put 'put ''LDE2KSxMPVIuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1IP1tOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omp9KSxOLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5OlB9KSxOLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W04uY3JlYXRlKHt0eXBl''@;'; put 'put ''OiJkZWNyeXB0IixrZXk6TH0pLE4uY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6UH0pLE4uY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6an0pXX1mdW5jdGlvbiBGKEgpe3AuY2FsbCh0aGlzLEgpO3ZhciBSPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVT''@;'; put 'put ''dGF0ZT1SfV8oRixwKSxjZS5leHBvcnRzPUYsRi5jcmVhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBGKFIpfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIsaixQLEwpe3ZhciBZPXRoaXMuX2VkZVN0YXRlO1kuY2lwaGVyc1swXS5fdXBkYXRlKFIsaixQLEwpLFkuY2lwaGVyc1sx''@;'; put 'put ''XS5fdXBkYXRlKFAsTCxQLEwpLFkuY2lwaGVyc1syXS5fdXBkYXRlKFAsTCxQLEwpfSxGLnByb3RvdHlwZS5fcGFkPU4ucHJvdG90eXBlLl9wYWQsRi5wcm90b3R5cGUuX3VucGFkPU4ucHJvdG90eXBlLl91bnBhZH0sODU2NzE6KGNlLEopPT57InVzZSBzdHJpY3QiO0oucmVhZFVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKE4sdyl7cmV0dXJuKE5bMCt3XTw8MjR8TlsxK3ddPDwxNnxOWzIrd108PDh8TlszK3ddKT4+PjB9LEoud3JpdGVVSW50MzJCRT1mdW5jdGlvbihOLHcsRil7TlswK0ZdPXc+Pj4yNCxOWzErRl09dz4+PjE2JjI1NSxOWzIrRl09dz4+PjgmMjU1LE5bMytGXT0yNTUmd30sSi5p''@;'; put 'put ''cD1mdW5jdGlvbihOLHcsRixIKXtmb3IodmFyIFI9MCxqPTAsUD02O1A+PTA7UC09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClSPDw9MSxSfD13Pj4+TCtQJjE7Zm9yKEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PU4+Pj5MK1AmMX1mb3IoUD02O1A+PTA7UC09Mil7Zm9yKEw9MTtMPD0yNTtM''@;'; put 'put ''Kz04KWo8PD0xLGp8PXc+Pj5MK1AmMTtmb3IoTD0xO0w8PTI1O0wrPTgpajw8PTEsanw9Tj4+PkwrUCYxfUZbSCswXT1SPj4+MCxGW0grMV09aj4+PjB9LEoucmlwPWZ1bmN0aW9uKE4sdyxGLEgpe2Zvcih2YXIgUj0wLGo9MCxQPTA7UDw0O1ArKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KVI8''@;'; put 'put ''PD0xLFJ8PXc+Pj5MK1AmMSxSPDw9MSxSfD1OPj4+TCtQJjE7Zm9yKFA9NDtQPDg7UCsrKWZvcihMPTI0O0w+PTA7TC09OClqPDw9MSxqfD13Pj4+TCtQJjEsajw8PTEsanw9Tj4+PkwrUCYxO0ZbSCswXT1SPj4+MCxGW0grMV09aj4+PjB9LEoucGMxPWZ1bmN0aW9uKE4sdyxGLEgpe2Zvcih2''@;'; put 'put ''YXIgUj0wLGo9MCxQPTc7UD49NTtQLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpUjw8PTEsUnw9dz4+TCtQJjE7Zm9yKEw9MDtMPD0yNDtMKz04KVI8PD0xLFJ8PU4+PkwrUCYxfWZvcihMPTA7TDw9MjQ7TCs9OClSPDw9MSxSfD13Pj5MK1AmMTtmb3IoUD0xO1A8PTM7UCsrKXtmb3IoTD0w''@;'; put 'put ''O0w8PTI0O0wrPTgpajw8PTEsanw9dz4+TCtQJjE7Zm9yKEw9MDtMPD0yNDtMKz04KWo8PD0xLGp8PU4+PkwrUCYxfWZvcihMPTA7TDw9MjQ7TCs9OClqPDw9MSxqfD1OPj5MK1AmMTtGW0grMF09Uj4+PjAsRltIKzFdPWo+Pj4wfSxKLnIyOHNobD1mdW5jdGlvbihOLHcpe3JldHVybiBOPDx3''@;'; put 'put ''JjI2ODQzNTQ1NXxOPj4+Mjgtd307dmFyIGI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07Si5wYzI9ZnVu''@;'; put 'put ''Y3Rpb24oTix3LEYsSCl7Zm9yKHZhciBSPTAsaj0wLFA9Yi5sZW5ndGg+Pj4xLEw9MDtMPFA7TCsrKVI8PD0xLFJ8PU4+Pj5iW0xdJjE7Zm9yKEw9UDtMPGIubGVuZ3RoO0wrKylqPDw9MSxqfD13Pj4+YltMXSYxO0ZbSCswXT1SPj4+MCxGW0grMV09aj4+PjB9LEouZXhwYW5kPWZ1bmN0aW9u''@;'; put 'put ''KE4sdyxGKXt2YXIgSD0wLFI9MDtIPSgxJk4pPDw1fE4+Pj4yNztmb3IodmFyIGo9MjM7aj49MTU7ai09NClIPDw9NixIfD1OPj4+aiY2Mztmb3Ioaj0xMTtqPj0zO2otPTQpUnw9Tj4+PmomNjMsUjw8PTY7Unw9KDMxJk4pPDwxfE4+Pj4zMSx3W0YrMF09SD4+PjAsd1tGKzFdPVI+Pj4wfTt2''@;'; put 'put ''YXIgRD1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEs''@;'; put 'put ''MTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2''@;'; put 'put ''LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAs''@;'; put 'put ''MTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSww''@;'; put 'put ''LDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0''@;'; put 'put ''LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgs''@;'; put 'put ''MSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEs''@;'; put 'put ''NCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtKLnN1YnN0aXR1dGU9ZnVuY3Rpb24oTix3KXtmb3IodmFyIEY9MCxIPTA7SDw0O0grKylGPDw9NCxGfD1EWzY0KkgrKE4+Pj4xOC02KkgmNjMpXTtmb3IoSD0wO0g8NDtI''@;'; put 'put ''KyspRjw8PTQsRnw9RFsyNTYrNjQqSCsodz4+PjE4LTYqSCY2MyldO3JldHVybiBGPj4+MH07dmFyIF89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0oucGVybXV0ZT1mdW5jdGlv''@;'; put 'put ''bihOKXtmb3IodmFyIHc9MCxGPTA7RjxfLmxlbmd0aDtGKyspdzw8PTEsd3w9Tj4+Pl9bRl0mMTtyZXR1cm4gdz4+PjB9LEoucGFkU3BsaXQ9ZnVuY3Rpb24oTix3LEYpe2Zvcih2YXIgSD1OLnRvU3RyaW5nKDIpO0gubGVuZ3RoPHc7KUg9IjAiK0g7Zm9yKHZhciBSPVtdLGo9MDtqPHc7ais9''@;'; put 'put ''RilSLnB1c2goSC5zbGljZShqLGorRikpO3JldHVybiBSLmpvaW4oIiAiKX19LDQzNzc6KGNlLEosYik9Pnt2YXIgRD1iKDEyNzI3KSxfPWIoMjMyNDEpLHA9Yig5NDU5Myksdz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O0ouRGlmZmllSGVsbG1hbkdyb3VwPUouY3JlYXRlRGlmZmll''@;'; put 'put ''SGVsbG1hbkdyb3VwPUouZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBOKEgpe3ZhciBSPW5ldyBCdWZmZXIoX1tIXS5wcmltZSwiaGV4Iiksaj1uZXcgQnVmZmVyKF9bSF0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IHAoUixqKX0sSi5jcmVhdGVEaWZmaWVIZWxsbWFuPUouRGlmZmllSGVsbG1h''@;'; put 'put ''bj1mdW5jdGlvbiBGKEgsUixqLFApe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUil8fHZvaWQgMD09PXdbUl0/RihILCJiaW5hcnkiLFIsaik6KFI9Unx8ImJpbmFyeSIsUD1QfHwiYmluYXJ5IixqPWp8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoail8fChqPW5ldyBCdWZmZXIo''@;'; put 'put ''aixQKSksIm51bWJlciI9PXR5cGVvZiBIP25ldyBwKEQoSCxqKSxqLCEwKTooQnVmZmVyLmlzQnVmZmVyKEgpfHwoSD1uZXcgQnVmZmVyKEgsUikpLG5ldyBwKEgsaiwhMCkpKX19LDk0NTkzOihjZSxKLGIpPT57dmFyIEQ9YigzODI4MCkscD1uZXcoYig1MzQ1OSkpLE49bmV3IEQoMjQpLHc9''@;'; put 'put ''bmV3IEQoMTEpLEY9bmV3IEQoMTApLEg9bmV3IEQoMyksUj1uZXcgRCg3KSxqPWIoMTI3MjcpLFA9YigzMzQyKTtmdW5jdGlvbiBMKFEsWCl7cmV0dXJuIFg9WHx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihRKXx8KFE9bmV3IEJ1ZmZlcihRLFgpKSx0aGlzLl9wdWI9bmV3IEQoUSksdGhpc31m''@;'; put 'put ''dW5jdGlvbiBZKFEsWCl7cmV0dXJuIFg9WHx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihRKXx8KFE9bmV3IEJ1ZmZlcihRLFgpKSx0aGlzLl9wcml2PW5ldyBEKFEpLHRoaXN9Y2UuZXhwb3J0cz1aO3ZhciBCPXt9O2Z1bmN0aW9uIFooUSxYLHRlKXt0aGlzLnNldEdlbmVyYXRvcihYKSx0aGlz''@;'; put 'put ''Ll9fcHJpbWU9bmV3IEQoUSksdGhpcy5fcHJpbWU9RC5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49US5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHRlPyh0aGlzLnNldFB1YmxpY0tleT1MLHRoaXMuc2V0''@;'; put 'put ''UHJpdmF0ZUtleT1ZKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBxKFEsWCl7dmFyIHRlPW5ldyBCdWZmZXIoUS50b0FycmF5KCkpO3JldHVybiBYP3RlLnRvU3RyaW5nKFgpOnRlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFcoUSxYKXt2YXIgdGU9WC50b1N0cmluZygiaGV4IikscmU9W3RlLFEudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYocmUgaW4gQilyZXR1''@;'; put 'put ''cm4gQltyZV07dmFyIGdlLG9lPTA7aWYoUS5pc0V2ZW4oKXx8IWouc2ltcGxlU2lldmV8fCFqLmZlcm1hdFRlc3QoUSl8fCFwLnRlc3QoUSkpcmV0dXJuIG9lKz0xLEJbcmVdPW9lKz0iMDIiPT09dGV8fCIwNSI9PT10ZT84OjQsb2U7c3dpdGNoKHAudGVzdChRLnNocm4oMSkpfHwob2UrPTIp''@;'; put 'put ''LHRlKXtjYXNlIjAyIjpRLm1vZChOKS5jbXAodykmJihvZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KGdlPVEubW9kKEYpKS5jbXAoSCkmJmdlLmNtcChSKSYmKG9lKz04KTticmVhaztkZWZhdWx0Om9lKz00fXJldHVybiBCW3JlXT1vZSxvZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlz''@;'; put 'put ''Ll9wcmltZUNvZGV9fSksWi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBEKFAodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYp''@;'; put 'put ''LmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxaLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFEpe3ZhciBYPShRPShRPW5ldyBEKFEpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGU9bmV3IEJ1ZmZlcihYLnRvQXJyYXko''@;'; put 'put ''KSkscmU9dGhpcy5nZXRQcmltZSgpO2lmKHRlLmxlbmd0aDxyZS5sZW5ndGgpe3ZhciBvZT1uZXcgQnVmZmVyKHJlLmxlbmd0aC10ZS5sZW5ndGgpO29lLmZpbGwoMCksdGU9QnVmZmVyLmNvbmNhdChbb2UsdGVdKX1yZXR1cm4gdGV9LFoucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlv''@;'; put 'put ''bihYKXtyZXR1cm4gcSh0aGlzLl9wdWIsWCl9LFoucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oWCl7cmV0dXJuIHEodGhpcy5fcHJpdixYKX0sWi5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oUSl7cmV0dXJuIHEodGhpcy5fX3ByaW1lLFEpfSxaLnByb3RvdHlwZS5nZXRH''@;'; put 'put ''ZW5lcmF0b3I9ZnVuY3Rpb24oUSl7cmV0dXJuIHEodGhpcy5fZ2VuLFEpfSxaLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oUSxYKXtyZXR1cm4gWD1YfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFEpfHwoUT1uZXcgQnVmZmVyKFEsWCkpLHRoaXMuX19nZW49USx0aGlzLl9nZW49''@;'; put 'put ''bmV3IEQoUSksdGhpc319LDEyNzI3OihjZSxKLGIpPT57dmFyIEQ9YigzMzQyKTtjZS5leHBvcnRzPW9lLG9lLnNpbXBsZVNpZXZlPXRlLG9lLmZlcm1hdFRlc3Q9cmU7dmFyIF89YigzODI4MCkscD1uZXcgXygyNCksdz1uZXcoYig1MzQ1OSkpLEY9bmV3IF8oMSksSD1uZXcgXygyKSxSPW5l''@;'; put 'put ''dyBfKDUpLEw9KG5ldyBfKDE2KSxuZXcgXyg4KSxuZXcgXygxMCkpLFk9bmV3IF8oMyksVz0obmV3IF8oNyksbmV3IF8oMTEpKSxaPW5ldyBfKDQpLFE9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiB0ZShnZSl7Zm9yKHZhciBfZT1mdW5jdGlvbiBYKCl7aWYobnVsbCE9PVEpcmV0dXJuIFE7''@;'; put 'put ''dmFyIF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciB6ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksej0wO3o8VGUmJl9lW3pdPD16ZSYmU2UlX2Vbel0hPTA7eisrKTtUZSE9PXomJl9lW3pdPD16ZXx8KF9lW1RlKytdPVNlKX1yZXR1''@;'; put 'put ''cm4gUT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1nZS5tb2RuKF9lW1RlXSkpcmV0dXJuIDA9PT1nZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gcmUoZ2Upe3ZhciBfZT1fLm1vbnQoZ2UpO3JldHVybiAwPT09SC50b1JlZChfZSkucmVkUG93KGdlLnN1''@;'; put 'put ''Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIG9lKGdlLF9lKXtpZihnZTwxNilyZXR1cm4gbmV3IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxTZTs7KXtmb3IoVGU9bmV3IF8oRChNYXRoLmNlaWwoZ2UvOCkpKTtU''@;'; put 'put ''ZS5iaXRMZW5ndGgoKT5nZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoRiksVGUudGVzdG4oMSl8fFRlLmlhZGQoSCksX2UuY21wKEgpKXtpZighX2UuY21wKFIpKWZvcig7VGUubW9kKEwpLmNtcChZKTspVGUuaWFkZChaKX1lbHNlIGZvcig7VGUubW9kKHApLmNtcChX''@;'; put 'put ''KTspVGUuaWFkZChaKTtpZih0ZShTZT1UZS5zaHJuKDEpKSYmdGUoVGUpJiZyZShTZSkmJnJlKFRlKSYmdy50ZXN0KFNlKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzgyODA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lm''@;'; put 'put ''KCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9u''@;'; put 'put ''IHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoenx8MCxnfHwxMCx5fHwiYmUi''@;'; put 'put ''KSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjA4OSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBI''@;'; put 'put ''KHosZyl7dmFyIHk9ei5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1IKHoseSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7''@;'; put 'put ''Zm9yKHZhciBDPTAsVD1NYXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFyIFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEwOlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVs''@;'; put 'put ''bCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5''@;'; put 'put ''KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYp''@;'; put 'put ''LHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5''@;'; put 'put ''LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVu''@;'; put 'put ''Z3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0''@;'; put 'put ''aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVu''@;'; put 'put ''Z3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0x''@;'; put 'put ''LFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5s''@;'; put 'put ''ZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJz''@;'; put 'put ''ZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBVLFQ9MCxWPTA7aWYoImJlIj09PXgp''@;'; put 'put ''Zm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1S''@;'; put 'put ''KGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zv''@;'; put 'put ''cih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxFO0ErPUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/''@;'; put 'put ''dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4i''@;'; put 'put ''fTt2YXIgUD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVd''@;'; put 'put ''LFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2''@;'; put 'put ''NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdh''@;'; put 'put ''dGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLFY9QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmVjtmb3IodmFyIG09MTttPHg7''@;'; put 'put ''bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9KFY9KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jkc1tsZV0pK2FlKS82NzEwODg2NHwwLGFl''@;'; put 'put ''PTY3MTA4ODYzJlY7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9''@;'; put 'put ''IiI7Zm9yKHZhciBDPTAsVD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhpcy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSkseD0wIT09VHx8ViE9PXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE/UFs2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9''@;'; put 'put ''IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIr''@;'; put 'put ''eCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAy''@;'; put 'put ''PT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0''@;'; put 'put ''b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIEY8InUiKSx0aGlzLnRv''@;'; put 'put ''QXJyYXlMaWtlKEYsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4''@;'; put 'put ''KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihWKXtmb3IobT0wOyFB''@;'; put 'put ''LmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9yKDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW1QtbS0xXT1FfXJldHVy''@;'; put 'put ''biBVfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQs''@;'; put 'put ''eT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4gODE5MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+''@;'; put 'put ''Pj00KSwzJnl8fCh4Kz0yLHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0Jp''@;'; put 'put ''dHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21U''@;'; put 'put ''d29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5l''@;'; put 'put ''Z2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMu''@;'; put 'put ''d29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUo''@;'; put 'put ''KS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lm''@;'; put 'put ''KHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0''@;'; put 'put ''aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxl''@;'; put 'put ''bmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtm''@;'; put 'put ''b3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhp''@;'; put 'put ''cy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0''@;'; put 'put ''aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9y''@;'; put 'put ''KHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmVjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW1ZdKStU''@;'; put 'put ''KSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tWXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5''@;'; put 'put ''cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1n''@;'; put 'put ''LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlz''@;'; put 'put ''LmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eCly''@;'; put 'put ''ZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8VC5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMu''@;'; put 'put ''d29yZHNbVV09NjcxMDg4NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09PVYmJlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxlbmd0aDtVKyspdGhpcy53b3Jkc1tVXT1D''@;'; put 'put ''LndvcmRzW1VdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxVKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLFFlPXdlPj4+MTMsb3Q9MHxDWzJdLE1lPTgxOTEmb3QsdmU9b3Q+Pj4xMyxYZT0wfENbM10sQmU9ODE5''@;'; put 'put ''MSZYZSxBZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1fdD4+PjEzLGxuPTB8Q1s3XSx5dD04MTkxJmxuLFN0PWxuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQs''@;'; put 'put ''JGU9RHQ+Pj4xMyx0dD0wfENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9y''@;'; put 'put ''Pj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRbOF0sdW49ODE5MSZoaSxmbj1oaT4+PjEz''@;'; put 'put ''LElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShVKyhFPU1hdGguaW11bChuZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQpKStNYXRoLmltdWwobGUsUnQpfDApKTw8''@;'; put 'put ''MTMpfDA7VT0oKEE9TWF0aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCk7dmFyIEVpPShVKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKG5lLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MDt2YXIgdnI9KFUr''@;'; put 'put ''KEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGhuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwoQmUsUnQpLG09KG09TWF0aC5pbXVsKEJlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIFduPShVKyhFPUUrTWF0aC5pbXVsKG5lLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01h''@;'; put 'put ''dGguaW11bChsZSxXdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJ''@;'; put 'put ''ZSxQdCksRT1FK01hdGguaW11bChCZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDA7dmFyICRpPShVKyhFPUUrTWF0aC5pbXVsKG5lLHN0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobmUsVXQpfDApK01hdGguaW11bChsZSxzdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLFJ0KSxtPShtPU1hdGguaW11bChEZSxQdCkpK01hdGgu''@;'; put 'put ''aW11bChrZSxSdCl8MCxBPU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKEJlLGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''QmUsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MDt2YXIgZWk9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8''@;'; put 'put ''PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KSxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KERlLFF0KXwwLG09KG09bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxRdCl8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUs''@;'; put 'put ''ZnQpfDAsRT1FK01hdGguaW11bChCZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobmUseHQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGgu''@;'; put 'put ''aW11bChTdCxSdCl8MCxBPU1hdGguaW11bChTdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERlLGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''RGUsZnQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChCZSxzdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKEJlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDA7dmFyIFZpPShVKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01h''@;'; put 'put ''dGguaW11bChsZSxybil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgk''@;'; put 'put ''ZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoU3QsUXQpfDAsQT1BK01hdGguaW11bChTdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChKZSxobil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsV3QpfDAsbT0obT1tK01hdGguaW11bChEZSxBdCl8MCkrTWF0aC5pbXVsKGtlLFd0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoQmUsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MDt2YXIgTmk9KFUr''@;'; put 'put ''KEU9RStNYXRoLmltdWwobmUsdW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLHVuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwoTmUsUnQpLG09KG09TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLHN0KXwwLG09KG09bStNYXRoLmltdWwoRGUsVXQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChCZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsdW4pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFFlLHVuKXwwLEE9QStNYXRoLmltdWwoUWUsZm4pfDA7dmFyIERhPShVKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKG5lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChsZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFF0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChOZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChTdCxXdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUsVXQpfDAsRT1FK01hdGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERlLFR0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxo''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoQmUscm4pfDAsbT0obT1tK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChNZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwodmUsdW4pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KFUrKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLEE9QStNYXRoLmltdWwoU3QsVXQpfDAsRT1FK01hdGguaW11bChudCxX''@;'; put 'put ''ZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStNYXRoLmltdWwoRGUseHQpfDApK01hdGguaW11bChrZSxodCl8MCxBPUErTWF0aC5pbXVsKGtlLHh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChCZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZuKXwwKStNYXRoLmltdWwoQWUsdW4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChBZSxmbil8MDt2YXIgV2k9KFUrKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+''@;'; put 'put ''Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV3QpLG09KG09TWF0aC5pbXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxz''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFdlKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MCxFPUUrTWF0aC5pbXVsKERlLHJuKXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsdW4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLHVuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShVKyhFPUUrTWF0aC5pbXVsKEJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQmUsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtVPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHN0KSxtPShtPU1hdGguaW11bChOZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxX''@;'; put 'put ''ZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChTdCxodCl8MCxBPUErTWF0aC5pbXVsKFN0LHh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01hdGguaW11bChEZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoa2UsdW4pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChrZSxmbil8MDt2YXIgUW49KFUrKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+''@;'; put 'put ''Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5pbXVsKE5lLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxo''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChudCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSmUsdW4pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgbGE9KFUrKEU9RStNYXRoLmltdWwoRGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChEZSxlbil8MCkrTWF0aC5pbXVsKGtlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVs''@;'; put 'put ''KGtlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsdW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKFN0LHVuKXwwLEE9QStNYXRoLmltdWwoU3QsZm4pfDA7dmFyIGJhPShVKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHJu''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChOZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsdW4pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgTGE9KFUr''@;'; put 'put ''KEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKFN0LFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFN0LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmlt''@;'; put 'put ''dWwoTmUsdW4pLG09KG09TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LHVuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KFUrKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8''@;'; put 'put ''PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShVKyhFPU1hdGguaW11bChOZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoTmUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7''@;'; put 'put ''cmV0dXJuIFU9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxWWzBdPXVhLFZbMV09RWksVlsyXT12cixWWzNdPVduLFZbNF09JGksVls1XT1laSxWWzZdPVFyLFZbN109VmksVls4XT1OaSxWWzldPURhLFZbMTBdPUxyLFZbMTFdPVdp''@;'; put 'put ''LFZbMTJdPXBhLFZbMTNdPVFuLFZbMTRdPWxhLFZbMTVdPWJhLFZbMTZdPUxhLFZbMTddPUZhLFZbMThdPXRpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBRKHosZyx5KXtyZXR1cm4obmV3IFgpLm11bHAoeixnLHkpfWZ1bmN0aW9uIFgoeixnKXt0aGlzLng9eix0''@;'; put 'put ''aGlzLnk9Z31NYXRoLmltdWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1''@;'; put 'put ''bmN0aW9uIHEoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHkubGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVu''@;'; put 'put ''Z3RoLTEpLG09TWF0aC5tYXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4ODYzJih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+''@;'; put 'put ''PjI2LFYmPTY3MTA4ODYzfXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5KSx4fSxYLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZyks''@;'; put 'put ''eD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LFgucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9''@;'; put 'put ''KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxYLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxUW1VdPXhbZ1tVXV19LFgucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsVil7dGhp''@;'; put 'put ''cy5wZXJtdXRlKFYsZyx5LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZhciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1BLHdlPTA7d2U8VTt3ZSsrKXt2YXIgVWU9''@;'; put 'put ''eFthZSt3ZV0sUWU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStVXSxNZT1DW2FlK3dlK1VdLHZlPW5lKm90LWxlKk1lO01lPW5lKk1lK2xlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09UWUrTWUseFthZSt3ZStVXT1VZS1vdCxDW2FlK3dlK1VdPVFlLU1lLHdlIT09RSYmKHZlPW0qbmUt''@;'; put 'put ''QSpsZSxsZT1tKmxlK0EqbmUsbmU9dmUpfX0sWC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LFgucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5j''@;'; put 'put ''dGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LFgucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIg''@;'; put 'put ''eD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LFgucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5''@;'; put 'put ''LHgsQyl7Zm9yKHZhciBUPTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tWXSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4W1ZdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sWC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtm''@;'; put 'put ''b3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sWC5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxWPXRoaXMuc3R1YihDKSxVPW5l''@;'; put 'put ''dyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsVSxDKSx0aGlzLmNvbnZlcnQxM2Io''@;'; put 'put ''eS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dlXT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVb''@;'; put 'put ''d2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFsaXplMTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVu''@;'; put 'put ''Z3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlv''@;'; put 'put ''bihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRo''@;'; put 'put ''aXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PWc/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZh''@;'; put 'put ''ciBnPW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0''@;'; put 'put ''aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLVU8PHl8''@;'; put 'put ''VixWPVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1y''@;'; put 'put ''ZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9''@;'; put 'put ''eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0Uu''@;'; put 'put ''bGVuZ3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0''@;'; put 'put ''aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZVfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRo''@;'; put 'put ''aXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4Kyss''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1h''@;'; put 'put ''c2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jk''@;'; put 'put ''c1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztm''@;'; put 'put ''b3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''bGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFk''@;'; put 'put ''ZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29y''@;'; put 'put ''ZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVs''@;'; put 'put ''PWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe1Y9KDB8dGhpcy53b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8''@;'; put 'put ''MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStVKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PVUpLFU9MCxUPTA7''@;'; put 'put ''VDx0aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUo''@;'; put 'put ''KSxUPWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwp''@;'; put 'put ''KS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2''@;'; put 'put ''YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxsZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxl''@;'; put 'put ''LS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1sZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpD''@;'; put 'put ''fX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1v''@;'; put 'put ''ZCIhPT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkm''@;'; put 'put ''JihDPVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpU''@;'; put 'put ''fSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcu''@;'; put 'put ''d29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2''@;'; put 'put ''fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVybiBWPDB8fDE9PT1UJiYwPT09Vj95LmRpdjow''@;'; put 'put ''IT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0Nd''@;'; put 'put ''KSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJu''@;'; put 'put ''IHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09''@;'; put 'put ''eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNs''@;'; put 'put ''b25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigx''@;'; put 'put ''KSxULml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3IoeC5pdXNocm4obGUpO2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSksVS5pc3ViKEEpKSxWLml1c2hybigxKSxVLml1''@;'; put 'put ''c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihUKSl9cmV0dXJue2E6VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUp''@;'; put 'put ''LHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgVT0wLEU9MTsh''@;'; put 'put ''KHkud29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoViksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4o''@;'; put 'put ''bSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJngu''@;'; put 'put ''aXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgseD1WfWVsc2UgaWYoMD09PVR8fDA9PT14LmNt''@;'; put 'put ''cG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2''@;'; put 'put ''LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlzLndvcmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMg''@;'; put 'put ''dG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5n''@;'; put 'put ''dGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChn''@;'; put 'put ''KX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNv''@;'; put 'put ''bnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0''@;'; put 'put ''IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhp''@;'; put 'put ''cy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''SVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0''@;'; put 'put ''Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiByZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1w''@;'; put 'put ''KCl9ZnVuY3Rpb24gb2UoKXtyZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7cmUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe3JlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtyZS5jYWxsKHRoaXMs''@;'; put 'put ''IjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKHope2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBw''@;'; put 'put ''KHouZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoeil7U2UuY2FsbCh0aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10''@;'; put 'put ''aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0p''@;'; put 'put ''LHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cmUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHJl''@;'; put 'put ''LnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5w''@;'; put 'put ''KTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0scmUucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihvZSxyZSksb2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYo''@;'; put 'put ''eS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KFUmeCk8''@;'; put 'put ''PDR8Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxvZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5''@;'; put 'put ''PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZn''@;'; put 'put ''Lmxlbmd0aC0tKSxnfSxOKGdlLHJlKSxOKF9lLHJlKSxOKFRlLHJlKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5''@;'; put 'put ''PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4gdGVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyBvZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9''@;'; put 'put ''bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0ZVtnXT15LHl9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9''@;'; put 'put ''PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRo''@;'; put 'put ''aXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9''@;'; put 'put ''Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVs''@;'; put 'put ''KGcsZy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09''@;'; put 'put ''PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEp''@;'; put 'put ''LnRvUmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElBZGQoVSk7Zm9yKHZhciBBPXRoaXMucG93KG0s''@;'; put 'put ''QyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2YXIgd2U9bmUsVWU9MDswIT09d2UuY21wKFYpO1VlKyspd2U9d2UucmVkU3FyKCk7cChVZTxsZSk7dmFyIFFlPXRoaXMucG93KEEsbmV3IHcoMSku''@;'; put 'put ''aXVzaGxuKGxlLVVlLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXko''@;'; put 'put ''MTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBWPUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0t''@;'; put 'put ''KXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYpKSwwIT09bmV8fDAhPT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9dGhpcy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6''@;'; put 'put ''RT0wfW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJl''@;'; put 'put ''ZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihn''@;'; put 'put ''KXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxD''@;'; put 'put ''PXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRk''@;'; put 'put ''KHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t''@;'; put 'put ''aW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHpl''@;'; put 'put ''LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNjMzNjE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIHAsRD1iKDYxODg1KSxfPWIo''@;'; put 'put ''ODM3OTgpO3RyeXtwPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaChIKXtpZighSHx8Im9iamVjdCIhPXR5cGVvZiBIfHwhKCJjb2RlImluIEgpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1ILmNvZGUpdGhyb3cgSH12YXIgTj0hIXAmJl8mJl8oT2JqZWN0LnByb3RvdHlwZSwi''@;'; put 'put ''X19wcm90b19fIiksdz1PYmplY3QsRj13LmdldFByb3RvdHlwZU9mO2NlLmV4cG9ydHM9TiYmImZ1bmN0aW9uIj09dHlwZW9mIE4uZ2V0P0QoW04uZ2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIEYmJmZ1bmN0aW9uKFIpe3JldHVybiBGKG51bGw9PVI/Ujp3KFIpKX19LDkwNTE4OihjZSxKLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBEPUo7RC52ZXJzaW9uPWIoMTYzNikuckUsRC51dGlscz1iKDMxMzYpLEQucmFuZD1iKDM1Mjk0KSxELmN1cnZlPWIoODcyOSksRC5jdXJ2ZXM9YigyMzQwMSksRC5lYz1iKDI5MDQyKSxELmVkZHNhPWIoODMwNDUpfSw5ODgyODooY2UsSixiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgRD1iKDg4NzIzKSxfPWIoMzEzNikscD1fLmdldE5BRixOPV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gRihSLGope3RoaXMudHlwZT1SLHRoaXMucD1uZXcgRChqLnAsMTYpLHRoaXMucmVkPWoucHJpbWU/RC5yZWQoai5wcmltZSk6RC5tb250KHRoaXMucCksdGhp''@;'; put 'put ''cy56ZXJvPW5ldyBEKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgRCgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEQoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1qLm4mJm5ldyBEKGoubiwxNiksdGhpcy5nPWouZyYmdGhpcy5wb2ludEZyb21KU09OKGouZyxqLmdS''@;'; put 'put ''ZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgUD10aGlzLm4m''@;'; put 'put ''JnRoaXMucC5kaXYodGhpcy5uKTshUHx8UC5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBIKFIsail7dGhpcy5jdXJ2ZT1SLHRoaXMudHlwZT1qLHRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQ9bnVsbH1jZS5leHBvcnRzPUYsRi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxGLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBl''@;'; put 'put ''Ll9maXhlZE5hZk11bD1mdW5jdGlvbihqLFApe3coai5wcmVjb21wdXRlZCk7dmFyIEw9ai5fZ2V0RG91YmxlcygpLFk9cChQLDEsdGhpcy5fYml0TGVuZ3RoKSxCPSgxPDxMLnN0ZXArMSktKEwuc3RlcCUyPT0wPzI6MSk7Qi89Mzt2YXIgWixxLFc9W107Zm9yKFo9MDtaPFkubGVuZ3RoO1or''@;'; put 'put ''PUwuc3RlcCl7cT0wO2Zvcih2YXIgUT1aK0wuc3RlcC0xO1E+PVo7US0tKXE9KHE8PDEpK1lbUV07Vy5wdXNoKHEpfWZvcih2YXIgWD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksdGU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHJlPUI7cmU+MDtyZS0tKXtmb3IoWj0wO1o8Vy5s''@;'; put 'put ''ZW5ndGg7WisrKShxPVdbWl0pPT09cmU/dGU9dGUubWl4ZWRBZGQoTC5wb2ludHNbWl0pOnE9PT0tcmUmJih0ZT10ZS5taXhlZEFkZChMLnBvaW50c1taXS5uZWcoKSkpO1g9WC5hZGQodGUpfXJldHVybiBYLnRvUCgpfSxGLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihqLFApe2Zvcih2''@;'; put 'put ''YXIgTD00LFk9ai5fZ2V0TkFGUG9pbnRzKEwpLEI9WS5wb2ludHMsVz1wKFAsTD1ZLnduZCx0aGlzLl9iaXRMZW5ndGgpLFo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9Vy5sZW5ndGgtMTtxPj0wO3EtLSl7Zm9yKHZhciBRPTA7cT49MCYmMD09PVdbcV07cS0tKVErKztpZihxPj0w''@;'; put 'put ''JiZRKyssWj1aLmRibHAoUSkscTwwKWJyZWFrO3ZhciBYPVdbcV07dygwIT09WCksWj0iYWZmaW5lIj09PWoudHlwZT9aLm1peGVkQWRkKFg+MD9CW1gtMT4+MV06QlstWC0xPj4xXS5uZWcoKSk6Wi5hZGQoWD4wP0JbWC0xPj4xXTpCWy1YLTE+PjFdLm5lZygpKX1yZXR1cm4iYWZmaW5lIj09''@;'; put 'put ''PWoudHlwZT9aLnRvUCgpOlp9LEYucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKGosUCxMLFksQil7dmFyIFgsdGUscmUsVz10aGlzLl93bmFmVDEsWj10aGlzLl93bmFmVDIscT10aGlzLl93bmFmVDMsUT0wO2ZvcihYPTA7WDxZO1grKyl7dmFyIG9lPShyZT1QW1hdKS5fZ2V0TkFG''@;'; put 'put ''UG9pbnRzKGopO1dbWF09b2Uud25kLFpbWF09b2UucG9pbnRzfWZvcihYPVktMTtYPj0xO1gtPTIpe3ZhciBnZT1YLTEsX2U9WDtpZigxPT09V1tnZV0mJjE9PT1XW19lXSl7dmFyIFRlPVtQW2dlXSxudWxsLG51bGwsUFtfZV1dOzA9PT1QW2dlXS55LmNtcChQW19lXS55KT8oVGVbMV09UFtn''@;'; put 'put ''ZV0uYWRkKFBbX2VdKSxUZVsyXT1QW2dlXS50b0ooKS5taXhlZEFkZChQW19lXS5uZWcoKSkpOjA9PT1QW2dlXS55LmNtcChQW19lXS55LnJlZE5lZygpKT8oVGVbMV09UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtfZV0pLFRlWzJdPVBbZ2VdLmFkZChQW19lXS5uZWcoKSkpOihUZVsxXT1QW2dl''@;'; put 'put ''XS50b0ooKS5taXhlZEFkZChQW19lXSksVGVbMl09UFtnZV0udG9KKCkubWl4ZWRBZGQoUFtfZV0ubmVnKCkpKTt2YXIgU2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10semU9TihMW2dlXSxMW19lXSk7Zm9yKFE9TWF0aC5tYXgoemVbMF0ubGVuZ3RoLFEpLHFbZ2VdPW5ldyBBcnJheShRKSxx''@;'; put 'put ''W19lXT1uZXcgQXJyYXkoUSksdGU9MDt0ZTxRO3RlKyspcVtnZV1bdGVdPVNlWzMqKDErKDB8emVbMF1bdGVdKSkrKDErKDB8emVbMV1bdGVdKSldLHFbX2VdW3RlXT0wLFpbZ2VdPVRlfWVsc2UgcVtnZV09cChMW2dlXSxXW2dlXSx0aGlzLl9iaXRMZW5ndGgpLHFbX2VdPXAoTFtfZV0sV1tf''@;'; put 'put ''ZV0sdGhpcy5fYml0TGVuZ3RoKSxRPU1hdGgubWF4KHFbZ2VdLmxlbmd0aCxRKSxRPU1hdGgubWF4KHFbX2VdLmxlbmd0aCxRKX12YXIgeT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKFg9UTtYPj0wO1gtLSl7Zm9yKHZhciBDPTA7WD49MDspe3ZhciBU''@;'; put 'put ''PSEwO2Zvcih0ZT0wO3RlPFk7dGUrKyl4W3RlXT0wfHFbdGVdW1hdLDAhPT14W3RlXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0MrKyxYLS19aWYoWD49MCYmQysrLHk9eS5kYmxwKEMpLFg8MClicmVhaztmb3IodGU9MDt0ZTxZO3RlKyspe3ZhciBWPXhbdGVdOzAhPT1WJiYoVj4wP3JlPVpbdGVd''@;'; put 'put ''W1YtMT4+MV06VjwwJiYocmU9Wlt0ZV1bLVYtMT4+MV0ubmVnKCkpLHk9ImFmZmluZSI9PT1yZS50eXBlP3kubWl4ZWRBZGQocmUpOnkuYWRkKHJlKSl9fWZvcihYPTA7WDxZO1grKylaW1hdPW51bGw7cmV0dXJuIEI/eTp5LnRvUCgpfSxGLkJhc2VQb2ludD1ILEgucHJvdG90eXBlLmVxPWZ1''@;'; put 'put ''bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sSC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sRi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oaixQKXtqPV8udG9BcnJheShqLFAp''@;'; put 'put ''O3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1qWzBdfHw2PT09alswXXx8Nz09PWpbMF0pJiZqLmxlbmd0aC0xPT0yKkwpcmV0dXJuIDY9PT1qWzBdP3coaltqLmxlbmd0aC0xXSUyPT0wKTo3PT09alswXSYmdyhqW2oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoai5zbGlj''@;'; put 'put ''ZSgxLDErTCksai5zbGljZSgxK0wsMSsyKkwpKTtpZigoMj09PWpbMF18fDM9PT1qWzBdKSYmai5sZW5ndGgtMT09PUwpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChqLnNsaWNlKDEsMStMKSwzPT09alswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxILnByb3Rv''@;'; put 'put ''dHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmVuY29kZShqLCEwKX0sSC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihqKXt2YXIgUD10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLFApO3JldHVybiBqP1t0''@;'; put 'put ''aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLFApKX0sSC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGosUCl7cmV0dXJuIF8uZW5jb2RlKHRoaXMuX2VuY29kZShQKSxqKX0sSC5wcm90b3R5cGUucHJlY29t''@;'; put 'put ''cHV0ZT1mdW5jdGlvbihqKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBQPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gUC5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLFAuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsaiksUC5iZXRhPXRo''@;'; put 'put ''aXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPVAsdGhpc30sSC5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oail7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIFA9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhUCYmUC5wb2ludHMubGVuZ3RoPj1N''@;'; put 'put ''YXRoLmNlaWwoKGouYml0TGVuZ3RoKCkrMSkvUC5zdGVwKX0sSC5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oaixQKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEw9W3Ro''@;'; put 'put ''aXNdLFk9dGhpcyxCPTA7QjxQO0IrPWope2Zvcih2YXIgVz0wO1c8ajtXKyspWT1ZLmRibCgpO0wucHVzaChZKX1yZXR1cm57c3RlcDpqLHBvaW50czpMfX0sSC5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihqKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVk''@;'; put 'put ''Lm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBQPVt0aGlzXSxMPSgxPDxqKS0xLFk9MT09PUw/bnVsbDp0aGlzLmRibCgpLEI9MTtCPEw7QisrKVBbQl09UFtCLTFdLmFkZChZKTtyZXR1cm57d25kOmoscG9pbnRzOlB9fSxILnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBudWxsfSxILnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKGope2Zvcih2YXIgUD10aGlzLEw9MDtMPGo7TCsrKVA9UC5kYmwoKTtyZXR1cm4gUH19LDU1NTM3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzEzNiksXz1iKDg4NzIzKSxwPWIoNzE5OTMpLE49''@;'; put 'put ''Yig5ODgyOCksdz1ELmFzc2VydDtmdW5jdGlvbiBGKFIpe3RoaXMudHdpc3RlZD0xIT0oMHxSLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Ui5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsTi5jYWxsKHRoaXMsImVkd2FyZHMiLFIpLHRoaXMuYT1uZXcgXyhSLmEsMTYp''@;'; put 'put ''LnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBfKFIuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgXyhSLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRB''@;'; put 'put ''ZGQodGhpcy5kKSx3KCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxSLmMpfWZ1bmN0aW9uIEgoUixqLFAsTCxZKXtOLkJhc2VQb2ludC5jYWxsKHRoaXMsUiwicHJvamVjdGl2ZSIpLG51bGw9PT1qJiZudWxsPT09UCYmbnVsbD09''@;'; put 'put ''PUw/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgXyhqLDE2KSx0aGlzLnk9bmV3IF8oUCwxNiksdGhpcy56PUw/bmV3IF8oTCwx''@;'; put 'put ''Nik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PVkmJm5ldyBfKFksMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMu''@;'; put 'put ''ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJl''@;'; put 'put ''ZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfXAoRixOKSxjZS5leHBvcnRzPUYsRi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMubU9uZUE/ai5yZWROZWcoKTp0aGlzLmEucmVkTXVsKGopfSxG''@;'; put 'put ''LnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5vbmVDP2o6dGhpcy5jLnJlZE11bChqKX0sRi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKGosUCxMLFkpe3JldHVybiB0aGlzLnBvaW50KGosUCxMLFkpfSxGLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKGos''@;'; put 'put ''UCl7KGo9bmV3IF8oaiwxNikpLnJlZHx8KGo9ai50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPWoucmVkU3FyKCksWT10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEwpKSxCPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChMKSksVz1ZLnJlZE11bChCLnJl''@;'; put 'put ''ZEludm0oKSksWj1XLnJlZFNxcnQoKTtpZigwIT09Wi5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIHE9Wi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oUCYmIXF8fCFQJiZxKSYmKFo9Wi5yZWROZWcoKSksdGhp''@;'; put 'put ''cy5wb2ludChqLFopfSxGLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKGosUCl7KGo9bmV3IF8oaiwxNikpLnJlZHx8KGo9ai50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPWoucmVkU3FyKCksWT1MLnJlZFN1Yih0aGlzLmMyKSxCPUwucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIp''@;'; put 'put ''LnJlZFN1Yih0aGlzLmEpLFc9WS5yZWRNdWwoQi5yZWRJbnZtKCkpO2lmKDA9PT1XLmNtcCh0aGlzLnplcm8pKXtpZihQKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxqKX12YXIgWj1XLnJlZFNxcnQoKTtpZigwIT09Wi5yZWRT''@;'; put 'put ''cXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIFouZnJvbVJlZCgpLmlzT2RkKCkhPT1QJiYoWj1aLnJlZE5lZygpKSx0aGlzLnBvaW50KFosail9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGope2lmKGou''@;'; put 'put ''aXNJbmZpbml0eSgpKXJldHVybiEwO2oubm9ybWFsaXplKCk7dmFyIFA9ai54LnJlZFNxcigpLEw9ai55LnJlZFNxcigpLFk9UC5yZWRNdWwodGhpcy5hKS5yZWRBZGQoTCksQj10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChQKS5yZWRNdWwoTCkpKTtyZXR1''@;'; put 'put ''cm4gMD09PVkuY21wKEIpfSxwKEgsTi5CYXNlUG9pbnQpLEYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oail7cmV0dXJuIEguZnJvbUpTT04odGhpcyxqKX0sRi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oaixQLEwsWSl7cmV0dXJuIG5ldyBIKHRoaXMsaixQLEwsWSl9LEgu''@;'; put 'put ''ZnJvbUpTT049ZnVuY3Rpb24oaixQKXtyZXR1cm4gbmV3IEgoaixQWzBdLFBbMV0sUFsyXSl9LEgucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgp''@;'; put 'put ''LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sSC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09''@;'; put 'put ''dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxILnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIGo9dGhpcy54LnJlZFNxcigpLFA9dGhpcy55LnJlZFNxcigpLEw9dGhpcy56LnJlZFNxcigpO0w9TC5yZWRJQWRkKEwp''@;'; put 'put ''O3ZhciBZPXRoaXMuY3VydmUuX211bEEoaiksQj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihqKS5yZWRJU3ViKFApLFc9WS5yZWRBZGQoUCksWj1XLnJlZFN1YihMKSxxPVkucmVkU3ViKFApLFE9Qi5yZWRNdWwoWiksWD1XLnJlZE11bChxKSx0ZT1CLnJlZE11bChx''@;'; put 'put ''KSxyZT1aLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChRLFgscmUsdGUpfSxILnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBZLEIsVyxaLHEsUSxqPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxQPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRT''@;'; put 'put ''cXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBYPShaPXRoaXMuY3VydmUuX211bEEoUCkpLnJlZEFkZChMKTt0aGlzLnpPbmU/KFk9ai5yZWRTdWIoUCkucmVkU3ViKEwpLnJlZE11bChYLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLEI9WC5yZWRNdWwoWi5yZWRTdWIoTCkpLFc9WC5y''@;'; put 'put ''ZWRTcXIoKS5yZWRTdWIoWCkucmVkU3ViKFgpKToocT10aGlzLnoucmVkU3FyKCksUT1YLnJlZFN1YihxKS5yZWRJU3ViKHEpLFk9ai5yZWRTdWIoUCkucmVkSVN1YihMKS5yZWRNdWwoUSksQj1YLnJlZE11bChaLnJlZFN1YihMKSksVz1YLnJlZE11bChRKSl9ZWxzZSBaPVAucmVkQWRkKEwp''@;'; put 'put ''LHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLFE9Wi5yZWRTdWIocSkucmVkU3ViKHEpLFk9dGhpcy5jdXJ2ZS5fbXVsQyhqLnJlZElTdWIoWikpLnJlZE11bChRKSxCPXRoaXMuY3VydmUuX211bEMoWikucmVkTXVsKFAucmVkSVN1YihMKSksVz1aLnJlZE11bChRKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5jdXJ2ZS5wb2ludChZLEIsVyl9LEgucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxILnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9u''@;'; put 'put ''KGope3ZhciBQPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoai55LnJlZFN1YihqLngpKSxMPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoai55LnJlZEFkZChqLngpKSxZPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKGoudCksQj10aGlzLnoucmVkTXVsKGou''@;'; put 'put ''ei5yZWRBZGQoai56KSksVz1MLnJlZFN1YihQKSxaPUIucmVkU3ViKFkpLHE9Qi5yZWRBZGQoWSksUT1MLnJlZEFkZChQKSxYPVcucmVkTXVsKFopLHRlPXEucmVkTXVsKFEpLHJlPVcucmVkTXVsKFEpLG9lPVoucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsdGUsb2UscmUp''@;'; put 'put ''fSxILnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihqKXt2YXIgdGUscmUsUD10aGlzLnoucmVkTXVsKGoueiksTD1QLnJlZFNxcigpLFk9dGhpcy54LnJlZE11bChqLngpLEI9dGhpcy55LnJlZE11bChqLnkpLFc9dGhpcy5jdXJ2ZS5kLnJlZE11bChZKS5yZWRNdWwoQiksWj1MLnJlZFN1''@;'; put 'put ''YihXKSxxPUwucmVkQWRkKFcpLFE9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChqLngucmVkQWRkKGoueSkpLnJlZElTdWIoWSkucmVkSVN1YihCKSxYPVAucmVkTXVsKFopLnJlZE11bChRKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyh0ZT1QLnJlZE11bChxKS5yZWRNdWwoQi5y''@;'; put 'put ''ZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShZKSkpLHJlPVoucmVkTXVsKHEpKToodGU9UC5yZWRNdWwocSkucmVkTXVsKEIucmVkU3ViKFkpKSxyZT10aGlzLmN1cnZlLl9tdWxDKFopLnJlZE11bChxKSksdGhpcy5jdXJ2ZS5wb2ludChYLHRlLHJlKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u''@;'; put 'put ''KGope3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9qOmouaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoaik6dGhpcy5fcHJvakFkZChqKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLl9oYXNEb3VibGVzKGopP3RoaXMu''@;'; put 'put ''Y3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsaik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLGopfSxILnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oaixQLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsUF0sW2osTF0sMiwhMSl9LEgucHJvdG90eXBlLmptdWxBZGQ9''@;'; put 'put ''ZnVuY3Rpb24oaixQLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsUF0sW2osTF0sMiwhMCl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgaj10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9''@;'; put 'put ''dGhpcy54LnJlZE11bChqKSx0aGlzLnk9dGhpcy55LnJlZE11bChqKSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bChqKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2lu''@;'; put 'put ''dCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LEgucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxILnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sSC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXM9PT1qfHwwPT09dGhpcy5nZXRYKCkuY21wKGouZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcChqLmdldFkoKSl9LEgucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlv''@;'; put 'put ''bihqKXt2YXIgUD1qLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChQKSlyZXR1cm4hMDtmb3IodmFyIEw9ai5jbG9uZSgpLFk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKEwuaWFkZCh0aGlzLmN1cnZlLm4pLEwuY21w''@;'; put 'put ''KHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoUC5yZWRJQWRkKFkpLDA9PT10aGlzLnguY21wKFApKXJldHVybiEwfX0sSC5wcm90b3R5cGUudG9QPUgucHJvdG90eXBlLm5vcm1hbGl6ZSxILnByb3RvdHlwZS5taXhlZEFkZD1ILnByb3RvdHlwZS5hZGR9LDg3Mjk6KGNlLEosYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEQ9SjtELmJhc2U9Yig5ODgyOCksRC5zaG9ydD1iKDY4MDc1KSxELm1vbnQ9Yig2NDk0NyksRC5lZHdhcmRzPWIoNTU1MzcpfSw2NDk0NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg4NzIzKSxfPWIoNzE5OTMpLHA9Yig5ODgyOCksTj1iKDMxMzYp''@;'; put 'put ''O2Z1bmN0aW9uIHcoSCl7cC5jYWxsKHRoaXMsIm1vbnQiLEgpLHRoaXMuYT1uZXcgRChILmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEQoSC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgRCg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5l''@;'; put 'put ''dyBEKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gRihILFIsail7cC5CYXNlUG9pbnQuY2FsbCh0aGlzLEgsInByb2plY3RpdmUiKSxudWxsPT09UiYmbnVsbD09PWo/KHRoaXMueD10aGlzLmN1cnZl''@;'; put 'put ''Lm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBEKFIsMTYpLHRoaXMuej1uZXcgRChqLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVk''@;'; put 'put ''KSkpfV8odyxwKSxjZS5leHBvcnRzPXcsdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUil7dmFyIGo9Ui5ub3JtYWxpemUoKS54LFA9ai5yZWRTcXIoKSxMPVAucmVkTXVsKGopLnJlZEFkZChQLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoaik7cmV0dXJuIDA9PT1MLnJlZFNxcnQoKS5y''@;'; put 'put ''ZWRTcXIoKS5jbXAoTCl9LF8oRixwLkJhc2VQb2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oUixqKXtyZXR1cm4gdGhpcy5wb2ludChOLnRvQXJyYXkoUixqKSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oUixqKXtyZXR1cm4gbmV3IEYodGhpcyxSLGopfSx3''@;'; put 'put ''LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFIpe3JldHVybiBGLmZyb21KU09OKHRoaXMsUil9LEYucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LEYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRo''@;'; put 'put ''aXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxGLmZyb21KU09OPWZ1bmN0aW9uKFIsail7cmV0dXJuIG5ldyBGKFIsalswXSxqWzFdfHxSLm9uZSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8''@;'; put 'put ''RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LEYucHJvdG90eXBlLmRi''@;'; put 'put ''bD1mdW5jdGlvbigpe3ZhciBqPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxMPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxZPWoucmVkU3ViKEwpLEI9ai5yZWRNdWwoTCksVz1ZLnJlZE11bChMLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoWSkpKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5jdXJ2ZS5wb2ludChCLFcpfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxGLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKFIsail7dmFyIFA9dGhpcy54LnJlZEFkZCh0aGlzLnop''@;'; put 'put ''LEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLFk9Ui54LnJlZEFkZChSLnopLFc9Ui54LnJlZFN1YihSLnopLnJlZE11bChQKSxaPVkucmVkTXVsKEwpLHE9ai56LnJlZE11bChXLnJlZEFkZChaKS5yZWRTcXIoKSksUT1qLngucmVkTXVsKFcucmVkSVN1YihaKS5yZWRTcXIoKSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQocSxRKX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFIpe2Zvcih2YXIgaj1SLmNsb25lKCksUD10aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLEI9W107MCE9PWouY21wbigwKTtqLml1c2hybigxKSlCLnB1c2goai5hbmRsbigxKSk7Zm9yKHZhciBX''@;'; put 'put ''PUIubGVuZ3RoLTE7Vz49MDtXLS0pMD09PUJbV10/KFA9UC5kaWZmQWRkKEwsdGhpcyksTD1MLmRibCgpKTooTD1QLmRpZmZBZGQoTCx0aGlzKSxQPVAuZGJsKCkpO3JldHVybiBMfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQg''@;'; put 'put ''b24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxGLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoUi5n''@;'; put 'put ''ZXRYKCkpfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUo''@;'; put 'put ''KSx0aGlzLnguZnJvbVJlZCgpfX0sNjgwNzU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMTM2KSxfPWIoODg3MjMpLHA9Yig3MTk5MyksTj1iKDk4ODI4KSx3PUQuYXNzZXJ0O2Z1bmN0aW9uIEYoail7Ti5jYWxsKHRoaXMsInNob3J0IixqKSx0aGlzLmE9bmV3IF8oai5hLDE2''@;'; put 'put ''KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBfKGouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlz''@;'; put 'put ''LnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oaiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gSChqLFAsTCxZKXtOLkJhc2VQb2ludC5jYWxsKHRoaXMsaiwiYWZmaW5lIiksbnVs''@;'; put 'put ''bD09PVAmJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgXyhQLDE2KSx0aGlzLnk9bmV3IF8oTCwxNiksWSYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhp''@;'; put 'put ''cy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBSKGosUCxMLFkpe04uQmFzZVBvaW50LmNhbGwodGhpcyxqLCJqYWNvYmlhbiIp''@;'; put 'put ''LG51bGw9PT1QJiZudWxsPT09TCYmbnVsbD09PVk/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBfKDApKToodGhpcy54PW5ldyBfKFAsMTYpLHRoaXMueT1uZXcgXyhMLDE2KSx0aGlzLno9bmV3IF8oWSwxNikpLHRoaXMueC5yZWR8fCh0''@;'; put 'put ''aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZl''@;'; put 'put ''Lm9uZX1wKEYsTiksY2UuZXhwb3J0cz1GLEYucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oUCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsWTtpZihQLmJldGEpTD1uZXcgXyhQLmJldGEsMTYpLnRvUmVkKHRoaXMu''@;'; put 'put ''cmVkKTtlbHNle3ZhciBCPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO0w9KEw9QlswXS5jbXAoQlsxXSk8MD9CWzBdOkJbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihQLmxhbWJkYSlZPW5ldyBfKFAubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9''@;'; put 'put ''PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChMKSk/WT1XWzBdOncoMD09PXRoaXMuZy5tdWwoWT1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpZLGJhc2lzOlAuYmFzaXM/UC5iYXNpcy5tYXAoZnVuY3Rpb24ocSl7''@;'; put 'put ''cmV0dXJue2E6bmV3IF8ocS5hLDE2KSxiOm5ldyBfKHEuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKFkpfX19LEYucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oUCl7dmFyIEw9UD09PXRoaXMucD90aGlzLnJlZDpfLm1vbnQoUCksWT1uZXcgXygyKS50b1JlZChMKS5yZWRJ''@;'; put 'put ''bnZtKCksQj1ZLnJlZE5lZygpLFc9bmV3IF8oMykudG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChZKTtyZXR1cm5bQi5yZWRBZGQoVykuZnJvbVJlZCgpLEIucmVkU3ViKFcpLmZyb21SZWQoKV19LEYucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oUCl7Zm9yKHZh''@;'; put 'put ''ciBYLHRlLHJlLG9lLGdlLF9lLFRlLHplLHosTD10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLFk9UCxCPXRoaXMubi5jbG9uZSgpLFc9bmV3IF8oMSksWj1uZXcgXygwKSxxPW5ldyBfKDApLFE9bmV3IF8oMSksU2U9MDswIT09WS5jbXBuKDApOyl7dmFy''@;'; put 'put ''IGc9Qi5kaXYoWSk7emU9Qi5zdWIoZy5tdWwoWSkpLHo9cS5zdWIoZy5tdWwoVykpO3ZhciB5PVEuc3ViKGcubXVsKFopKTtpZighcmUmJnplLmNtcChMKTwwKVg9VGUubmVnKCksdGU9VyxyZT16ZS5uZWcoKSxvZT16O2Vsc2UgaWYocmUmJjI9PSsrU2UpYnJlYWs7VGU9emUsQj1ZLFk9emUs''@;'; put 'put ''cT1XLFc9eixRPVosWj15fWdlPXplLm5lZygpLF9lPXo7dmFyIHg9cmUuc3FyKCkuYWRkKG9lLnNxcigpKTtyZXR1cm4gZ2Uuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihnZT1YLF9lPXRlKSxyZS5uZWdhdGl2ZSYmKHJlPXJlLm5lZygpLG9lPW9lLm5lZygpKSxnZS5uZWdhdGl2''@;'; put 'put ''ZSYmKGdlPWdlLm5lZygpLF9lPV9lLm5lZygpKSxbe2E6cmUsYjpvZX0se2E6Z2UsYjpfZX1dfSxGLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKFApe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxZPUxbMF0sQj1MWzFdLFc9Qi5iLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLFo9WS5iLm5l''@;'; put 'put ''ZygpLm11bChQKS5kaXZSb3VuZCh0aGlzLm4pLHE9Vy5tdWwoWS5hKSxRPVoubXVsKEIuYSksWD1XLm11bChZLmIpLHRlPVoubXVsKEIuYik7cmV0dXJue2sxOlAuc3ViKHEpLnN1YihRKSxrMjpYLmFkZCh0ZSkubmVnKCl9fSxGLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFAsTCl7''@;'; put 'put ''KFA9bmV3IF8oUCwxNikpLnJlZHx8KFA9UC50b1JlZCh0aGlzLnJlZCkpO3ZhciBZPVAucmVkU3FyKCkucmVkTXVsKFApLnJlZElBZGQoUC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLEI9WS5yZWRTcXJ0KCk7aWYoMCE9PUIucmVkU3FyKCkucmVkU3ViKFkpLmNtcCh0aGlzLnpl''@;'; put 'put ''cm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPUIuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihCPUIucmVkTmVnKCkpLHRoaXMucG9pbnQoUCxCKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUCl7aWYoUC5pbmYpcmV0dXJu''@;'; put 'put ''ITA7dmFyIEw9UC54LFk9UC55LEI9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoQikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09WS5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LEYucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlv''@;'; put 'put ''bihQLEwsWSl7Zm9yKHZhciBCPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFo9MDtaPFAubGVuZ3RoO1orKyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KExbWl0pLFE9UFtaXSxYPVEuX2dldEJldGEoKTtxLmsxLm5lZ2F0aXZlJiYocS5rMS5pbmVnKCksUT1RLm5lZyghMCkp''@;'; put 'put ''LHEuazIubmVnYXRpdmUmJihxLmsyLmluZWcoKSxYPVgubmVnKCEwKSksQlsyKlpdPVEsQlsyKlorMV09WCxXWzIqWl09cS5rMSxXWzIqWisxXT1xLmsyfWZvcih2YXIgdGU9dGhpcy5fd25hZk11bEFkZCgxLEIsVywyKlosWSkscmU9MDtyZTwyKlo7cmUrKylCW3JlXT1udWxsLFdbcmVdPW51''@;'; put 'put ''bGw7cmV0dXJuIHRlfSxwKEgsTi5CYXNlUG9pbnQpLEYucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFAsTCxZKXtyZXR1cm4gbmV3IEgodGhpcyxQLEwsWSl9LEYucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oUCxMKXtyZXR1cm4gSC5mcm9tSlNPTih0aGlzLFAsTCl9LEgucHJv''@;'; put 'put ''dG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgUD10aGlzLnByZWNvbXB1dGVkO2lmKFAmJlAuYmV0YSlyZXR1cm4gUC5iZXRhO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtp''@;'; put 'put ''ZihQKXt2YXIgWT10aGlzLmN1cnZlLEI9ZnVuY3Rpb24oVyl7cmV0dXJuIFkucG9pbnQoVy54LnJlZE11bChZLmVuZG8uYmV0YSksVy55KX07UC5iZXRhPUwsTC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpQLm5hZiYme3duZDpQLm5hZi53bmQscG9pbnRzOlAubmFmLnBvaW50cy5tYXAo''@;'; put 'put ''Qil9LGRvdWJsZXM6UC5kb3VibGVzJiZ7c3RlcDpQLmRvdWJsZXMuc3RlcCxwb2ludHM6UC5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4gTH19LEgucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlz''@;'; put 'put ''LnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEguZnJvbUpTT049ZnVuY3Rpb24oUCxMLFkpeyJzdHJpbmciPT10eXBlb2YgTCYmKEw9SlNPTi5wYXJzZShMKSk7dmFyIEI9UC5wb2ludChM''@;'; put 'put ''WzBdLExbMV0sWSk7aWYoIUxbMl0pcmV0dXJuIEI7ZnVuY3Rpb24gVyhxKXtyZXR1cm4gUC5wb2ludChxWzBdLHFbMV0sWSl9dmFyIFo9TFsyXTtyZXR1cm4gQi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6Wi5kb3VibGVzJiZ7c3RlcDpaLmRvdWJsZXMuc3RlcCxwb2ludHM6W0Jd''@;'; put 'put ''LmNvbmNhdChaLmRvdWJsZXMucG9pbnRzLm1hcChXKSl9LG5hZjpaLm5hZiYme3duZDpaLm5hZi53bmQscG9pbnRzOltCXS5jb25jYXQoWi5uYWYucG9pbnRzLm1hcChXKSl9fSxCfSxILnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMg''@;'; put 'put ''UG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEgucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEgucHJv''@;'; put 'put ''dG90eXBlLmFkZD1mdW5jdGlvbihQKXtpZih0aGlzLmluZilyZXR1cm4gUDtpZihQLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKFApKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoUCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54''@;'; put 'put ''LmNtcChQLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy55LnJlZFN1YihQLnkpOzAhPT1MLmNtcG4oMCkmJihMPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoUC54KS5yZWRJbnZtKCkpKTt2YXIgWT1MLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJ''@;'; put 'put ''U3ViKFAueCksQj1MLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxCKX0sSC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFA9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lm''@;'; put 'put ''KDA9PT1QLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLmN1cnZlLmEsWT10aGlzLngucmVkU3FyKCksQj1QLnJlZEludm0oKSxXPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChMKS5yZWRNdWwoQiksWj1XLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxxPVcucmVkTXVsKHRoaXMueC5yZWRTdWIoWikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChaLHEpfSxILnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEgucHJvdG90eXBl''@;'; put 'put ''LmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFApe3JldHVybiBQPW5ldyBfKFAsMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhQKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFAp''@;'; put 'put ''OnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW1BdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsUCl9LEgucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihQLEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRv''@;'; put 'put ''P3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKEIsVyk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEIsVywyKX0sSC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihQLEwsWSl7dmFyIEI9W3RoaXMsTF0sVz1bUCxZXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9X''@;'; put 'put ''bmFmTXVsQWRkKEIsVywhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLEIsVywyLCEwKX0sSC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXM9PT1QfHx0aGlzLmluZj09PVAuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFAueCkmJjA9PT10aGlzLnkuY21wKFAu''@;'; put 'put ''eSkpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oUCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihQJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgWT10aGlzLnByZWNvbXB1dGVkLEI9ZnVuY3Rpb24oVyl7''@;'; put 'put ''cmV0dXJuIFcubmVnKCl9O0wucHJlY29tcHV0ZWQ9e25hZjpZLm5hZiYme3duZDpZLm5hZi53bmQscG9pbnRzOlkubmFmLnBvaW50cy5tYXAoQil9LGRvdWJsZXM6WS5kb3VibGVzJiZ7c3RlcDpZLmRvdWJsZXMuc3RlcCxwb2ludHM6WS5kb3VibGVzLnBvaW50cy5tYXAoQil9fX1yZXR1cm4g''@;'; put 'put ''TH0sSC5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0scChSLE4uQmFzZVBvaW50KSxGLnByb3RvdHlwZS5qcG9pbnQ9''@;'; put 'put ''ZnVuY3Rpb24oUCxMLFkpe3JldHVybiBuZXcgUih0aGlzLFAsTCxZKX0sUi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgUD10aGlzLnoucmVkSW52bSgpLEw9UC5yZWRTcXIoKSxZPXRo''@;'; put 'put ''aXMueC5yZWRNdWwoTCksQj10aGlzLnkucmVkTXVsKEwpLnJlZE11bChQKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLEIpfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxSLnByb3Rv''@;'; put 'put ''dHlwZS5hZGQ9ZnVuY3Rpb24oUCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFA7aWYoUC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIEw9UC56LnJlZFNxcigpLFk9dGhpcy56LnJlZFNxcigpLEI9dGhpcy54LnJlZE11bChMKSxXPVAueC5yZWRNdWwoWSksWj10aGlzLnkucmVk''@;'; put 'put ''TXVsKEwucmVkTXVsKFAueikpLHE9UC55LnJlZE11bChZLnJlZE11bCh0aGlzLnopKSxRPUIucmVkU3ViKFcpLFg9Wi5yZWRTdWIocSk7aWYoMD09PVEuY21wbigwKSlyZXR1cm4gMCE9PVguY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIg''@;'; put 'put ''dGU9US5yZWRTcXIoKSxyZT10ZS5yZWRNdWwoUSksb2U9Qi5yZWRNdWwodGUpLGdlPVgucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihvZSkucmVkSVN1YihvZSksX2U9WC5yZWRNdWwob2UucmVkSVN1YihnZSkpLnJlZElTdWIoWi5yZWRNdWwocmUpKSxUZT10aGlzLnoucmVkTXVsKFAu''@;'; put 'put ''eikucmVkTXVsKFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChnZSxfZSxUZSl9LFIucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKFApe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBQLnRvSigpO2lmKFAuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRT''@;'; put 'put ''cXIoKSxZPXRoaXMueCxCPVAueC5yZWRNdWwoTCksVz10aGlzLnksWj1QLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLHE9WS5yZWRTdWIoQiksUT1XLnJlZFN1YihaKTtpZigwPT09cS5jbXBuKDApKXJldHVybiAwIT09US5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxu''@;'; put 'put ''dWxsKTp0aGlzLmRibCgpO3ZhciBYPXEucmVkU3FyKCksdGU9WC5yZWRNdWwocSkscmU9WS5yZWRNdWwoWCksb2U9US5yZWRTcXIoKS5yZWRJQWRkKHRlKS5yZWRJU3ViKHJlKS5yZWRJU3ViKHJlKSxnZT1RLnJlZE11bChyZS5yZWRJU3ViKG9lKSkucmVkSVN1YihXLnJlZE11bCh0ZSkpLF9l''@;'; put 'put ''PXRoaXMuei5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG9lLGdlLF9lKX0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihQKXtpZigwPT09UClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighUClyZXR1cm4gdGhpcy5kYmwoKTt2YXIg''@;'; put 'put ''TDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIFk9dGhpcztmb3IoTD0wO0w8UDtMKyspWT1ZLmRibCgpO3JldHVybiBZfXZhciBCPXRoaXMuY3VydmUuYSxXPXRoaXMuY3VydmUudGludixaPXRoaXMueCxxPXRoaXMueSxRPXRoaXMueixYPVEucmVkU3FyKCku''@;'; put 'put ''cmVkU3FyKCksdGU9cS5yZWRBZGQocSk7Zm9yKEw9MDtMPFA7TCsrKXt2YXIgcmU9Wi5yZWRTcXIoKSxvZT10ZS5yZWRTcXIoKSxnZT1vZS5yZWRTcXIoKSxfZT1yZS5yZWRBZGQocmUpLnJlZElBZGQocmUpLnJlZElBZGQoQi5yZWRNdWwoWCkpLFRlPVoucmVkTXVsKG9lKSxTZT1fZS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJU3ViKFRlLnJlZEFkZChUZSkpLHplPVRlLnJlZElTdWIoU2UpLHo9X2UucmVkTXVsKHplKTt6PXoucmVkSUFkZCh6KS5yZWRJU3ViKGdlKTt2YXIgZz10ZS5yZWRNdWwoUSk7TCsxPFAmJihYPVgucmVkTXVsKGdlKSksWj1TZSxRPWcsdGU9en1yZXR1cm4gdGhpcy5jdXJ2ZS5q''@;'; put 'put ''cG9pbnQoWix0ZS5yZWRNdWwoVyksUSl9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LFIu''@;'; put 'put ''cHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFAsTCxZO2lmKHRoaXMuek9uZSl7dmFyIEI9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFo9Vy5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFopO3E9cS5yZWRJ''@;'; put 'put ''QWRkKHEpO3ZhciBRPUIucmVkQWRkKEIpLnJlZElBZGQoQiksWD1RLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKSx0ZT1aLnJlZElBZGQoWik7dGU9KHRlPXRlLnJlZElBZGQodGUpKS5yZWRJQWRkKHRlKSxQPVgsTD1RLnJlZE11bChxLnJlZElTdWIoWCkpLnJlZElTdWIodGUpLFk9''@;'; put 'put ''dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHJlPXRoaXMueC5yZWRTcXIoKSxvZT10aGlzLnkucmVkU3FyKCksZ2U9b2UucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChvZSkucmVkU3FyKCkucmVkSVN1YihyZSkucmVkSVN1YihnZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPXJl''@;'; put 'put ''LnJlZEFkZChyZSkucmVkSUFkZChyZSksU2U9VGUucmVkU3FyKCksemU9Z2UucmVkSUFkZChnZSk7emU9KHplPXplLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxQPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoUCkpLnJlZElTdWIoemUpLFk9KFk9''@;'; put 'put ''dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKFkpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChQLEwsWSl9LFIucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBQLEwsWTtpZih0aGlzLnpPbmUpe3ZhciBCPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxa''@;'; put 'put ''PVcucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihaKTtxPXEucmVkSUFkZChxKTt2YXIgUT1CLnJlZEFkZChCKS5yZWRJQWRkKEIpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxYPVEucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO1A9''@;'; put 'put ''WDt2YXIgdGU9Wi5yZWRJQWRkKFopO3RlPSh0ZT10ZS5yZWRJQWRkKHRlKSkucmVkSUFkZCh0ZSksTD1RLnJlZE11bChxLnJlZElTdWIoWCkpLnJlZElTdWIodGUpLFk9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHJlPXRoaXMuei5yZWRTcXIoKSxvZT10aGlzLnkucmVkU3FyKCks''@;'; put 'put ''Z2U9dGhpcy54LnJlZE11bChvZSksX2U9dGhpcy54LnJlZFN1YihyZSkucmVkTXVsKHRoaXMueC5yZWRBZGQocmUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1nZS5yZWRJQWRkKGdlKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7UD1fZS5yZWRTcXIo''@;'; put 'put ''KS5yZWRJU3ViKFNlKSxZPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKG9lKS5yZWRJU3ViKHJlKTt2YXIgemU9b2UucmVkU3FyKCk7emU9KHplPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIo''@;'; put 'put ''UCkpLnJlZElTdWIoemUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChQLEwsWSl9LFIucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmN1cnZlLmEsTD10aGlzLngsWT10aGlzLnksQj10aGlzLnosVz1CLnJlZFNxcigpLnJlZFNxcigpLFo9TC5yZWRTcXIoKSxxPVkucmVk''@;'; put 'put ''U3FyKCksUT1aLnJlZEFkZChaKS5yZWRJQWRkKFopLnJlZElBZGQoUC5yZWRNdWwoVykpLFg9TC5yZWRBZGQoTCksdGU9KFg9WC5yZWRJQWRkKFgpKS5yZWRNdWwocSkscmU9US5yZWRTcXIoKS5yZWRJU3ViKHRlLnJlZEFkZCh0ZSkpLG9lPXRlLnJlZElTdWIocmUpLGdlPXEucmVkU3FyKCk7''@;'; put 'put ''Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkpLnJlZElBZGQoZ2UpO3ZhciBfZT1RLnJlZE11bChvZSkucmVkSVN1YihnZSksVGU9WS5yZWRBZGQoWSkucmVkTXVsKEIpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChyZSxfZSxUZSl9LFIucHJvdG90eXBlLnRycGw9ZnVu''@;'; put 'put ''Y3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIFA9dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLFk9dGhpcy56LnJlZFNxcigpLEI9TC5yZWRTcXIoKSxXPVAucmVkQWRkKFApLnJlZElBZGQoUCksWj1XLnJlZFNxcigp''@;'; put 'put ''LHE9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKFApLnJlZElTdWIoQiksUT0ocT0ocT0ocT1xLnJlZElBZGQocSkpLnJlZEFkZChxKS5yZWRJQWRkKHEpKS5yZWRJU3ViKFopKS5yZWRTcXIoKSxYPUIucmVkSUFkZChCKTtYPShYPShYPVgucmVkSUFkZChYKSkucmVkSUFkZChY''@;'; put 'put ''KSkucmVkSUFkZChYKTt2YXIgdGU9Vy5yZWRJQWRkKHEpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihRKS5yZWRJU3ViKFgpLHJlPUwucmVkTXVsKHRlKTtyZT0ocmU9cmUucmVkSUFkZChyZSkpLnJlZElBZGQocmUpO3ZhciBvZT10aGlzLngucmVkTXVsKFEpLnJlZElTdWIocmUpO29l''@;'; put 'put ''PShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSk7dmFyIGdlPXRoaXMueS5yZWRNdWwodGUucmVkTXVsKFgucmVkSVN1Yih0ZSkpLnJlZElTdWIocS5yZWRNdWwoUSkpKTtnZT0oZ2U9KGdlPWdlLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSk7dmFyIF9lPXRoaXMu''@;'; put 'put ''ei5yZWRBZGQocSkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKFEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChvZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihQLEwpe3JldHVybiBQPW5ldyBfKFAsTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLFApfSxSLnByb3Rv''@;'; put 'put ''dHlwZS5lcT1mdW5jdGlvbihQKXtpZigiYWZmaW5lIj09PVAudHlwZSlyZXR1cm4gdGhpcy5lcShQLnRvSigpKTtpZih0aGlzPT09UClyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksWT1QLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoWSkucmVkSVN1YihQLngucmVkTXVs''@;'; put 'put ''KEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBCPUwucmVkTXVsKHRoaXMueiksVz1ZLnJlZE11bChQLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKFAueS5yZWRNdWwoQikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihQKXt2YXIgTD10aGlzLnou''@;'; put 'put ''cmVkU3FyKCksWT1QLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITA7Zm9yKHZhciBCPVAuY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoQi5pYWRkKHRoaXMuY3VydmUubiksQi5jbXAodGhpcy5jdXJ2''@;'; put 'put ''ZS5wKT49MClyZXR1cm4hMTtpZihZLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoWSkpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngu''@;'; put 'put ''dG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSwyMzQwMTooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgUixEPUosXz1iKDUyNTI5KSxwPWIoODcyOSksdz1iKDMxMzYpLmFzc2VydDtmdW5jdGlvbiBGKGope3RoaXMuY3VydmU9InNob3J0Ij09PWoudHlwZT9uZXcgcC5zaG9ydChqKToiZWR3YXJkcyI9PT1qLnR5cGU/bmV3IHAuZWR3YXJkcyhqKTpuZXcgcC5tb250KGopLHRoaXMu''@;'; put 'put ''Zz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ai5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gSChqLFAp''@;'; put 'put ''e09iamVjdC5kZWZpbmVQcm9wZXJ0eShELGose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBGKFApO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoRCxqLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19''@;'; put 'put ''KX1ELlByZXNldEN1cnZlPUYsSCgicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYg''@;'; put 'put ''N2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksSCgicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZi''@;'; put 'put ''NCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3''@;'; put 'put ''NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksSCgicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZm''@;'; put 'put ''ZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThj''@;'; put 'put ''Mjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEgoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAg''@;'; put 'put ''ZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEz''@;'; put 'put ''OCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxIKCJwNTIxIix7dHlw''@;'; put 'put ''ZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoi''@;'; put 'put ''MDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1''@;'; put 'put ''MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJk''@;'; put 'put ''NjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksSCgi''@;'; put 'put ''Y3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAg''@;'; put 'put ''MTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEgoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1''@;'; put 'put ''Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1''@;'; put 'put ''OCJdfSk7dHJ5e1I9Yig1MTQxNil9Y2F0Y2h7Uj12b2lkIDB9SCgic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIs''@;'; put 'put ''bjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6Xy5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFl''@;'; put 'put ''ZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToi''@;'; put 'put ''MTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEz''@;'; put 'put ''YzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsUl19KX0sMjkwNDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4ODcyMyksXz1iKDMzNTU2KSxwPWIoMzEzNiksTj1iKDIzNDAxKSx3PWIoMzUyOTQpLEY9cC5hc3NlcnQsSD1iKDYw''@;'; put 'put ''NTQxKSxSPWIoNDA0ODQpO2Z1bmN0aW9uIGooUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaikpcmV0dXJuIG5ldyBqKFApOyJzdHJpbmciPT10eXBlb2YgUCYmKEYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sUCksIlVua25vd24gY3VydmUgIitQKSxQPU5bUF0pLFAg''@;'; put 'put ''aW5zdGFuY2VvZiBOLlByZXNldEN1cnZlJiYoUD17Y3VydmU6UH0pLHRoaXMuY3VydmU9UC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPVAuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShQ''@;'; put 'put ''LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPVAuaGFzaHx8UC5jdXJ2ZS5oYXNofWNlLmV4cG9ydHM9aixqLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgSCh0aGlzLEwpfSxqLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihMLFkpe3Jl''@;'; put 'put ''dHVybiBILmZyb21Qcml2YXRlKHRoaXMsTCxZKX0sai5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihMLFkpe3JldHVybiBILmZyb21QdWJsaWModGhpcyxMLFkpfSxqLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKEwpe0x8fChMPXt9KTtmb3IodmFyIFk9bmV3IF8oe2hh''@;'; put 'put ''c2g6dGhpcy5oYXNoLHBlcnM6TC5wZXJzLHBlcnNFbmM6TC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpMLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpMLmVudHJvcHkmJkwuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxC''@;'; put 'put ''PXRoaXMubi5ieXRlTGVuZ3RoKCksVz10aGlzLm4uc3ViKG5ldyBEKDIpKTs7KXt2YXIgWj1uZXcgRChZLmdlbmVyYXRlKEIpKTtpZighKFouY21wKFcpPjApKXJldHVybiBaLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoWil9fSxqLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rp''@;'; put 'put ''b24oTCxZLEIpe3ZhciBXO2lmKEQuaXNCTihMKXx8Im51bWJlciI9PXR5cGVvZiBMKVc9KEw9bmV3IEQoTCwxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgTClXPUwubGVuZ3RoLEw9bmV3IEQoTCwxNik7ZWxzZXt2YXIgWj1MLnRvU3RyaW5nKCk7Vz1aLmxlbmd0''@;'; put 'put ''aCsxPj4+MSxMPW5ldyBEKFosMTYpfSJudW1iZXIiIT10eXBlb2YgQiYmKEI9OCpXKTt2YXIgcT1CLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoTD1MLnVzaHJuKHEpKSwhWSYmTC5jbXAodGhpcy5uKT49MD9MLnN1Yih0aGlzLm4pOkx9LGoucHJvdG90eXBlLnNpZ249ZnVuY3Rp''@;'; put 'put ''b24oTCxZLEIsVyl7aWYoIm9iamVjdCI9PXR5cGVvZiBCJiYoVz1CLEI9bnVsbCksV3x8KFc9e30pLCJzdHJpbmciIT10eXBlb2YgTCYmIm51bWJlciIhPXR5cGVvZiBMJiYhRC5pc0JOKEwpKXtGKCJvYmplY3QiPT10eXBlb2YgTCYmTCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCwiRXhw''@;'; put 'put ''ZWN0ZWQgbWVzc2FnZSB0byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxGKEwubGVuZ3RoPj4+MD09PUwubGVuZ3RoKTtmb3IodmFyIFo9MDtaPEwubGVuZ3RoO1orKylGKCgyNTUmTFtaXSk9PT1MW1pdKX1ZPXRoaXMua2V5RnJvbVByaXZhdGUo''@;'; put 'put ''WSxCKSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsVy5tc2dCaXRMZW5ndGgpLEYoIUwuaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBxPXRoaXMubi5ieXRlTGVuZ3RoKCksUT1ZLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIscSksWD1MLnRvQXJyYXko''@;'; put 'put ''ImJlIixxKTtGKG5ldyBEKFgpLmVxKEwpLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgdGU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6USxub25jZTpYLHBlcnM6Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCJ9KSxyZT10aGlzLm4uc3ViKG5ldyBEKDEpKSxv''@;'; put 'put ''ZT0wOztvZSsrKXt2YXIgZ2U9Vy5rP1cuayhvZSk6bmV3IEQodGUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKGdlPXRoaXMuX3RydW5jYXRlVG9OKGdlLCEwKSkuY21wbigxKTw9MHx8Z2UuY21wKHJlKT49MCkpe3ZhciBfZT10aGlzLmcubXVsKGdlKTtpZighX2UuaXNJ''@;'; put 'put ''bmZpbml0eSgpKXt2YXIgVGU9X2UuZ2V0WCgpLFNlPVRlLnVtb2QodGhpcy5uKTtpZigwIT09U2UuY21wbigwKSl7dmFyIHplPWdlLmludm0odGhpcy5uKS5tdWwoU2UubXVsKFkuZ2V0UHJpdmF0ZSgpKS5pYWRkKEwpKTtpZigwIT09KHplPXplLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFy''@;'; put 'put ''IHo9KF9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1UZS5jbXAoU2UpPzI6MCk7cmV0dXJuIFcuY2Fub25pY2FsJiZ6ZS5jbXAodGhpcy5uaCk+MCYmKHplPXRoaXMubi5zdWIoemUpLHpePTEpLG5ldyBSKHtyOlNlLHM6emUscmVjb3ZlcnlQYXJhbTp6fSl9fX19fX0sai5wcm90b3R5cGUu''@;'; put 'put ''dmVyaWZ5PWZ1bmN0aW9uKEwsWSxCLFcsWil7Wnx8KFo9e30pLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxaLm1zZ0JpdExlbmd0aCksQj10aGlzLmtleUZyb21QdWJsaWMoQixXKTt2YXIgcT0oWT1uZXcgUihZLCJoZXgiKSkucixRPVkucztpZihxLmNtcG4oMSk8MHx8cS5jbXAodGhpcy5u''@;'; put 'put ''KT49MHx8US5jbXBuKDEpPDB8fFEuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIG9lLFg9US5pbnZtKHRoaXMubiksdGU9WC5tdWwoTCkudW1vZCh0aGlzLm4pLHJlPVgubXVsKHEpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEob2U9dGhpcy5nLmpt''@;'; put 'put ''dWxBZGQodGUsQi5nZXRQdWJsaWMoKSxyZSkpLmlzSW5maW5pdHkoKSYmb2UuZXFYVG9QKHEpOiEob2U9dGhpcy5nLm11bEFkZCh0ZSxCLmdldFB1YmxpYygpLHJlKSkuaXNJbmZpbml0eSgpJiYwPT09b2UuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocSl9LGoucHJvdG90eXBlLnJlY292ZXJQ''@;'; put 'put ''dWJLZXk9ZnVuY3Rpb24oUCxMLFksQil7RigoMyZZKT09PVksIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxMPW5ldyBSKEwsQik7dmFyIFc9dGhpcy5uLFo9bmV3IEQoUCkscT1MLnIsUT1MLnMsWD0xJlksdGU9WT4+MTtpZihxLmNtcCh0aGlzLmN1cnZlLnAu''@;'; put 'put ''dW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmdGUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWCh0ZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEsWCk7dmFyIHJlPUwuci5pbnZtKFcpLG9lPVcuc3ViKFop''@;'; put 'put ''Lm11bChyZSkudW1vZChXKSxnZT1RLm11bChyZSkudW1vZChXKTtyZXR1cm4gdGhpcy5nLm11bEFkZChvZSxxLGdlKX0sai5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihQLEwsWSxCKXtpZihudWxsIT09KEw9bmV3IFIoTCxCKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4g''@;'; put 'put ''TC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVz0wO1c8NDtXKyspe3ZhciBaO3RyeXtaPXRoaXMucmVjb3ZlclB1YktleShQLEwsVyl9Y2F0Y2h7Y29udGludWV9aWYoWi5lcShZKSlyZXR1cm4gV310aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIp''@;'; put 'put ''fX0sNjA1NDE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4ODcyMykscD1iKDMxMzYpLmFzc2VydDtmdW5jdGlvbiBOKHcsRil7dGhpcy5lYz13LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsRi5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKEYucHJpdixGLnByaXZFbmMp''@;'; put 'put ''LEYucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoRi5wdWIsRi5wdWJFbmMpfWNlLmV4cG9ydHM9TixOLmZyb21QdWJsaWM9ZnVuY3Rpb24oRixILFIpe3JldHVybiBIIGluc3RhbmNlb2YgTj9IOm5ldyBOKEYse3B1YjpILHB1YkVuYzpSfSl9LE4uZnJvbVByaXZhdGU9ZnVuY3Rpb24oRixILFIp''@;'; put 'put ''e3JldHVybiBIIGluc3RhbmNlb2YgTj9IOm5ldyBOKEYse3ByaXY6SCxwcml2RW5jOlJ9KX0sTi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLmdldFB1YmxpYygpO3JldHVybiBGLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMg''@;'; put 'put ''a2V5In06Ri52YWxpZGF0ZSgpP0YubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQi''@;'; put 'put ''fX0sTi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYsSCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGJiYoSD1GLEY9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEg/dGhpcy5wdWIuZW5jb2RlKEgsRik6dGhpcy5wdWJ9LE4ucHJvdG90''@;'; put 'put ''eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oRil7cmV0dXJuImhleCI9PT1GP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LE4ucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKEYsSCl7dGhpcy5wcml2PW5ldyBEKEYsSHx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYu''@;'; put 'put ''dW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxOLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKEYsSCl7aWYoRi54fHxGLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP3AoRi54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBl''@;'; put 'put ''fHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZwKEYueCYmRi55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KEYueCxGLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KEYsSCl9LE4u''@;'; put 'put ''cHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihGKXtyZXR1cm4gRi52YWxpZGF0ZSgpfHxwKEYudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxGLm11bCh0aGlzLnByaXYpLmdldFgoKX0sTi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGLEgsUil7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZWMuc2lnbihGLHRoaXMsSCxSKX0sTi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEYsSCxSKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoRixILHRoaXMsdm9pZCAwLFIpfSxOLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlz''@;'; put 'put ''LnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNDA0ODQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4ODcyMyksXz1iKDMxMzYpLHA9Xy5hc3NlcnQ7ZnVuY3Rpb24gTihqLFApe2lmKGogaW5zdGFuY2Vv''@;'; put 'put ''ZiBOKXJldHVybiBqO3RoaXMuX2ltcG9ydERFUihqLFApfHwocChqLnImJmoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBEKGouciwxNiksdGhpcy5zPW5ldyBEKGoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PWoucmVjb3ZlcnlQYXJhbT9udWxs''@;'; put 'put ''OmoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBGKGosUCl7dmFyIEw9altQLnBsYWNlKytdO2lmKCEoMTI4JkwpKXJldHVybiBMO3ZhciBZPTE1Jkw7aWYoMD09PVl8fFk+NHx8MD09PWpbUC5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBCPTAsVz0w''@;'; put 'put ''LFo9UC5wbGFjZTtXPFk7VysrLForKylCPDw9OCxCfD1qW1pdLEI+Pj49MDtyZXR1cm4hKEI8PTEyNykmJihQLnBsYWNlPVosQil9ZnVuY3Rpb24gSChqKXtmb3IodmFyIFA9MCxMPWoubGVuZ3RoLTE7IWpbUF0mJiEoMTI4JmpbUCsxXSkmJlA8TDspUCsrO3JldHVybiAwPT09UD9qOmouc2xp''@;'; put 'put ''Y2UoUCl9ZnVuY3Rpb24gUihqLFApe2lmKFA8MTI4KWoucHVzaChQKTtlbHNle3ZhciBMPTErKE1hdGgubG9nKFApL01hdGguTE4yPj4+Myk7Zm9yKGoucHVzaCgxMjh8TCk7LS1MOylqLnB1c2goUD4+PihMPDwzKSYyNTUpO2oucHVzaChQKX19Y2UuZXhwb3J0cz1OLE4ucHJvdG90eXBlLl9p''@;'; put 'put ''bXBvcnRERVI9ZnVuY3Rpb24oUCxMKXtQPV8udG9BcnJheShQLEwpO3ZhciBZPW5ldyB3O2lmKDQ4IT09UFtZLnBsYWNlKytdKXJldHVybiExO3ZhciBCPUYoUCxZKTtpZighMT09PUJ8fEIrWS5wbGFjZSE9PVAubGVuZ3RofHwyIT09UFtZLnBsYWNlKytdKXJldHVybiExO3ZhciBXPUYoUCxZ''@;'; put 'put ''KTtpZighMT09PVd8fDEyOCZQW1kucGxhY2VdKXJldHVybiExO3ZhciBaPVAuc2xpY2UoWS5wbGFjZSxXK1kucGxhY2UpO2lmKFkucGxhY2UrPVcsMiE9PVBbWS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1GKFAsWSk7aWYoITE9PT1xfHxQLmxlbmd0aCE9PXErWS5wbGFjZXx8MTI4JlBbWS5w''@;'; put 'put ''bGFjZV0pcmV0dXJuITE7dmFyIFE9UC5zbGljZShZLnBsYWNlLHErWS5wbGFjZSk7aWYoMD09PVpbMF0pe2lmKCEoMTI4JlpbMV0pKXJldHVybiExO1o9Wi5zbGljZSgxKX1pZigwPT09UVswXSl7aWYoISgxMjgmUVsxXSkpcmV0dXJuITE7UT1RLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3''@;'; put 'put ''IEQoWiksdGhpcy5zPW5ldyBEKFEpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxOLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihQKXt2YXIgTD10aGlzLnIudG9BcnJheSgpLFk9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JkxbMF0mJihMPVswXS5jb25jYXQoTCkpLDEyOCZZWzBdJiYo''@;'; put 'put ''WT1bMF0uY29uY2F0KFkpKSxMPUgoTCksWT1IKFkpOyEoWVswXXx8MTI4JllbMV0pOylZPVkuc2xpY2UoMSk7dmFyIEI9WzJdO1IoQixMLmxlbmd0aCksKEI9Qi5jb25jYXQoTCkpLnB1c2goMiksUihCLFkubGVuZ3RoKTt2YXIgVz1CLmNvbmNhdChZKSxaPVs0OF07cmV0dXJuIFIoWixXLmxl''@;'; put 'put ''bmd0aCksWj1aLmNvbmNhdChXKSxfLmVuY29kZShaLFApfX0sODMwNDU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1MjUyOSksXz1iKDIzNDAxKSxwPWIoMzEzNiksTj1wLmFzc2VydCx3PXAucGFyc2VCeXRlcyxGPWIoODcyMjIpLEg9Yig1NDUxKTtmdW5jdGlvbiBSKGope2lm''@;'; put 'put ''KE4oImVkMjU1MTkiPT09aiwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUihqKTt0aGlzLmN1cnZlPWo9X1tqXS5jdXJ2ZSx0aGlzLmc9ai5nLHRoaXMuZy5wcmVjb21wdXRlKGoubi5iaXRMZW5ndGgoKSsxKSx0aGlz''@;'; put 'put ''LnBvaW50Q2xhc3M9ai5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKGoubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9RC5zaGE1MTJ9Y2UuZXhwb3J0cz1SLFIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxMKXtQPXcoUCk7dmFyIFk9dGhpcy5r''@;'; put 'put ''ZXlGcm9tU2VjcmV0KEwpLEI9dGhpcy5oYXNoSW50KFkubWVzc2FnZVByZWZpeCgpLFApLFc9dGhpcy5nLm11bChCKSxaPXRoaXMuZW5jb2RlUG9pbnQoVykscT10aGlzLmhhc2hJbnQoWixZLnB1YkJ5dGVzKCksUCkubXVsKFkucHJpdigpKSxRPUIuYWRkKHEpLnVtb2QodGhpcy5jdXJ2ZS5u''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlcsUzpRLFJlbmNvZGVkOlp9KX0sUi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFAsTCxZKXtpZihQPXcoUCksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5TKCkuZ3RlKEwuZWRkc2EuY3VydmUubil8fEwuUygpLmlzTmVnKCkpcmV0''@;'; put 'put ''dXJuITE7dmFyIEI9dGhpcy5rZXlGcm9tUHVibGljKFkpLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxCLnB1YkJ5dGVzKCksUCksWj10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKEIucHViKCkubXVsKFcpKS5lcShaKX0sUi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgUD10aGlzLmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylQLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBwLmludEZyb21MRShQLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LFIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oUCl7''@;'; put 'put ''cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLFApfSxSLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKFApe3JldHVybiBGLmZyb21TZWNyZXQodGhpcyxQKX0sUi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihQKXtyZXR1cm4gUCBpbnN0YW5jZW9mIEg/UDpuZXcgSCh0''@;'; put 'put ''aGlzLFApfSxSLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihQKXt2YXIgTD1QLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9UC5nZXRYKCkuaXNPZGQoKT8xMjg6MCxMfSxSLnByb3RvdHlwZS5k''@;'; put 'put ''ZWNvZGVQb2ludD1mdW5jdGlvbihQKXt2YXIgTD0oUD1wLnBhcnNlQnl0ZXMoUCkpLmxlbmd0aC0xLFk9UC5zbGljZSgwLEwpLmNvbmNhdCgtMTI5JlBbTF0pLEI9ISEoMTI4JlBbTF0pLFc9cC5pbnRGcm9tTEUoWSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShXLEIpfSxSLnByb3Rv''@;'; put 'put ''dHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxSLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oUCl7cmV0dXJuIHAuaW50RnJvbUxFKFApfSxSLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKFApe3JldHVy''@;'; put 'put ''biBQIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sODcyMjI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMTM2KSxfPUQuYXNzZXJ0LHA9RC5wYXJzZUJ5dGVzLE49RC5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KEYsSCl7dGhpcy5lZGRzYT1GLHRoaXMuX3NlY3JldD1w''@;'; put 'put ''KEguc2VjcmV0KSxGLmlzUG9pbnQoSC5wdWIpP3RoaXMuX3B1Yj1ILnB1Yjp0aGlzLl9wdWJCeXRlcz1wKEgucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhILHtwdWI6Un0pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oSCxSKXty''@;'; put 'put ''ZXR1cm4gUiBpbnN0YW5jZW9mIHc/UjpuZXcgdyhILHtzZWNyZXQ6Un0pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxOKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSks''@;'; put 'put ''Tih3LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksTih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcy5lZGRzYSxSPXRoaXMu''@;'; put 'put ''aGFzaCgpLGo9SC5lbmNvZGluZ0xlbmd0aC0xLFA9Ui5zbGljZSgwLEguZW5jb2RpbmdMZW5ndGgpO3JldHVybiBQWzBdJj0yNDgsUFtqXSY9MTI3LFBbal18PTY0LFB9KSxOKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkp''@;'; put 'put ''fSksTih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxOKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgp''@;'; put 'put ''fSksdy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEgsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihILFIpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShI''@;'; put 'put ''LFIsdGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihIKXtyZXR1cm4gXyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxELmVuY29kZSh0aGlzLnNlY3JldCgpLEgpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oSCl7cmV0dXJuIEQuZW5j''@;'; put 'put ''b2RlKHRoaXMucHViQnl0ZXMoKSxIKX0sY2UuZXhwb3J0cz13fSw1NDUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODg3MjMpLF89YigzMTM2KSxwPV8uYXNzZXJ0LE49Xy5jYWNoZWRQcm9wZXJ0eSx3PV8ucGFyc2VCeXRlcztmdW5jdGlvbiBGKEgsUil7dGhpcy5lZGRzYT1I''@;'; put 'put ''LCJvYmplY3QiIT10eXBlb2YgUiYmKFI9dyhSKSksQXJyYXkuaXNBcnJheShSKSYmKHAoUi5sZW5ndGg9PT0yKkguZW5jb2RpbmdMZW5ndGgsIlNpZ25hdHVyZSBoYXMgaW52YWxpZCBzaXplIiksUj17UjpSLnNsaWNlKDAsSC5lbmNvZGluZ0xlbmd0aCksUzpSLnNsaWNlKEguZW5jb2RpbmdM''@;'; put 'put ''ZW5ndGgpfSkscChSLlImJlIuUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksSC5pc1BvaW50KFIuUikmJih0aGlzLl9SPVIuUiksUi5TIGluc3RhbmNlb2YgRCYmKHRoaXMuX1M9Ui5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KFIuUik/Ui5SOlIuUmVuY29kZWQsdGhpcy5f''@;'; put 'put ''U2VuY29kZWQ9QXJyYXkuaXNBcnJheShSLlMpP1IuUzpSLlNlbmNvZGVkfU4oRiwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLE4oRiwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJl''@;'; put 'put ''bmNvZGVkKCkpfSksTihGLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxOKEYsIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxGLnByb3RvdHlwZS50b0J5dGVz''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sRi5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gXy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LGNlLmV4cG9ydHM9Rn0sNTE0MTY6Y2U9''@;'; put 'put ''PntjZS5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5''@;'; put 'put ''NjE2ODIxIl0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcy''@;'; put 'put ''Zjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZm''@;'; put 'put ''ZTUyNmJhZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4''@;'; put 'put ''ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2''@;'; put 'put ''NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxb''@;'; put 'put ''IjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0''@;'; put 'put ''YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5''@;'; put 'put ''MDk0Njk2ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFm''@;'; put 'put ''NDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5''@;'; put 'put ''OWRjYjA5NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0''@;'; put 'put ''YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4''@;'; put 'put ''NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwi''@;'; put 'put ''NTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJj''@;'; put 'put ''MmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhj''@;'; put 'put ''OGU1ODkiXSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4''@;'; put 'put ''MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3''@;'; put 'put ''MjU4NjZhMGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVh''@;'; put 'put ''ZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYx''@;'; put 'put ''NGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxb''@;'; put 'put ''Ijc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNm''@;'; put 'put ''OGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4''@;'; put 'put ''OGY2YzE0YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdj''@;'; put 'put ''OTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5''@;'; put 'put ''ZmNiNDI5MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIz''@;'; put 'put ''ODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2''@;'; put 'put ''Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwi''@;'; put 'put ''MWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZj''@;'; put 'put ''OTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNm''@;'; put 'put ''MmNmZDUxIl0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkz''@;'; put 'put ''MjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2Vh''@;'; put 'put ''NDA5NTk4MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJk''@;'; put 'put ''ODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2''@;'; put 'put ''YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJh''@;'; put 'put ''NTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThj''@;'; put 'put ''MzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5''@;'; put 'put ''MDNhYyIsImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5''@;'; put 'put ''NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5''@;'; put 'put ''NTFlMDFmMGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1''@;'; put 'put ''MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYw''@;'; put 'put ''YzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFl''@;'; put 'put ''ZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4''@;'; put 'put ''NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRm''@;'; put 'put ''MjgxMSJdLFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1''@;'; put 'put ''ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAy''@;'; put 'put ''MmYzODJkZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhj''@;'; put 'put ''MzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBh''@;'; put 'put ''ZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsi''@;'; put 'put ''ODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdm''@;'; put 'put ''NDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJk''@;'; put 'put ''ODNmMzY2IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZl''@;'; put 'put ''ZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVh''@;'; put 'put ''ZjM0YTMwZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWVi''@;'; put 'put ''OTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkz''@;'; put 'put ''NDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3''@;'; put 'put ''Y2JhOGQ1NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJh''@;'; put 'put ''MjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhh''@;'; put 'put ''NDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxb''@;'; put 'put ''ImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZm''@;'; put 'put ''NDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRh''@;'; put 'put ''MmQ0YTM0IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQz''@;'; put 'put ''MDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2''@;'; put 'put ''N2JkM2Q4YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5''@;'; put 'put ''YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUx''@;'; put 'put ''NDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIy''@;'; put 'put ''MTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0''@;'; put 'put ''YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAx''@;'; put 'put ''YjIzOTYiXSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAy''@;'; put 'put ''ZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1''@;'; put 'put ''ZTU1NWMyZjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4''@;'; put 'put ''NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1''@;'; put 'put ''YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3''@;'; put 'put ''ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJj''@;'; put 'put ''ZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkw''@;'; put 'put ''ZDQ1YiIsIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2''@;'; put 'put ''ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMy''@;'; put 'put ''ZjkwODMxOGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdl''@;'; put 'put ''ODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3''@;'; put 'put ''OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5''@;'; put 'put ''ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIy''@;'; put 'put ''MWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0''@;'; put 'put ''MTciXSxbIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZl''@;'; put 'put ''MDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJk''@;'; put 'put ''ZmRlY2VmNDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2Jl''@;'; put 'put ''NWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5''@;'; put 'put ''MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3''@;'; put 'put ''NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlk''@;'; put 'put ''NzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdj''@;'; put 'put ''NzdhYiIsIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUy''@;'; put 'put ''YzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZi''@;'; put 'put ''MzRkYjA0ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1''@;'; put 'put ''NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5''@;'; put 'put ''MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVk''@;'; put 'put ''ZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3''@;'; put 'put ''YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4''@;'; put 'put ''Mzc0Il0sWyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRl''@;'; put 'put ''NWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIz''@;'; put 'put ''NjkxMjQ2OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1''@;'; put 'put ''NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBj''@;'; put 'put ''OTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2''@;'; put 'put ''ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2''@;'; put 'put ''YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5''@;'; put 'put ''ZjUxIiwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2Yw''@;'; put 'put ''NzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAy''@;'; put 'put ''NmRiZDJkODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZm''@;'; put 'put ''YTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDky''@;'; put 'put ''OGJlNGRlZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0''@;'; put 'put ''YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFm''@;'; put 'put ''N2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRl''@;'; put 'put ''Il0sWyIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVk''@;'; put 'put ''NzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgw''@;'; put 'put ''MDY2MWFjNWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThl''@;'; put 'put ''YzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUw''@;'; put 'put ''MmI4MjdjZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2''@;'; put 'put ''YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIw''@;'; put 'put ''MDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5Iiwi''@;'; put 'put ''MmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBj''@;'; put 'put ''NzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkz''@;'; put 'put ''ZWE1N2E0Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEz''@;'; put 'put ''YTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3''@;'; put 'put ''ZWEyMDQxMTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNi''@;'; put 'put ''YjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTcz''@;'; put 'put ''YzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsi''@;'; put 'put ''ZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2''@;'; put 'put ''ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAz''@;'; put 'put ''N2YzNTAyIiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5''@;'; put 'put ''NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgw''@;'; put 'put ''ZjQ0OGEwMWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMz''@;'; put 'put ''ZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFj''@;'; put 'put ''YzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwi''@;'; put 'put ''ZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVh''@;'; put 'put ''OWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJi''@;'; put 'put ''ZmFkMTI1Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5''@;'; put 'put ''MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4''@;'; put 'put ''ZTdiZjQ0OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIz''@;'; put 'put ''Yzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0''@;'; put 'put ''MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0s''@;'; put 'put ''WyI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5''@;'; put 'put ''MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVh''@;'; put 'put ''YWFiMTE5MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRk''@;'; put 'put ''MzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJh''@;'; put 'put ''NDk3MjM3Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2''@;'; put 'put ''NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5''@;'; put 'put ''YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwi''@;'; put 'put ''Y2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4''@;'; put 'put ''MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIz''@;'; put 'put ''ZWVhODciXSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2''@;'; put 'put ''ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkz''@;'; put 'put ''YzQxOTg1OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZk''@;'; put 'put ''MDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1''@;'; put 'put ''YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxb''@;'; put 'put ''IjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYz''@;'; put 'put ''ZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNk''@;'; put 'put ''YTc3MDNlOSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4''@;'; put 'put ''ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5''@;'; put 'put ''ZTJmYmYyNjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVh''@;'; put 'put ''Mzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZi''@;'; put 'put ''MDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwi''@;'; put 'put ''NDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSwzMTM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPUosXz1iKDg4NzIzKSxwPWIoMzkyMTApLE49YigyMTgzMik7RC5hc3NlcnQ9cCxELnRvQXJyYXk9Ti50''@;'; put 'put ''b0FycmF5LEQuemVybzI9Ti56ZXJvMixELnRvSGV4PU4udG9IZXgsRC5lbmNvZGU9Ti5lbmNvZGUsRC5nZXROQUY9ZnVuY3Rpb24gdyhQLEwsWSl7dmFyIFcsQj1uZXcgQXJyYXkoTWF0aC5tYXgoUC5iaXRMZW5ndGgoKSxZKSsxKTtmb3IoVz0wO1c8Qi5sZW5ndGg7Vys9MSlCW1ddPTA7dmFy''@;'; put 'put ''IFo9MTw8TCsxLHE9UC5jbG9uZSgpO2ZvcihXPTA7VzxCLmxlbmd0aDtXKyspe3ZhciBRLFg9cS5hbmRsbihaLTEpO3EuaXNPZGQoKT9xLmlzdWJuKFE9WD4oWj4+MSktMT8oWj4+MSktWDpYKTpRPTAsQltXXT1RLHEuaXVzaHJuKDEpfXJldHVybiBCfSxELmdldEpTRj1mdW5jdGlvbiBGKFAs''@;'; put 'put ''TCl7dmFyIFk9W1tdLFtdXTtQPVAuY2xvbmUoKSxMPUwuY2xvbmUoKTtmb3IodmFyIFosQj0wLFc9MDtQLmNtcG4oLUIpPjB8fEwuY21wbigtVyk+MDspe3ZhciBYLHRlLHE9UC5hbmRsbigzKStCJjMsUT1MLmFuZGxuKDMpK1cmMzszPT09cSYmKHE9LTEpLDM9PT1RJiYoUT0tMSksWD0xJnE/''@;'; put 'put ''MyE9KFo9UC5hbmRsbig3KStCJjcpJiY1IT09Wnx8MiE9PVE/cTotcTowLFlbMF0ucHVzaChYKSx0ZT0xJlE/MyE9KFo9TC5hbmRsbig3KStXJjcpJiY1IT09Wnx8MiE9PXE/UTotUTowLFlbMV0ucHVzaCh0ZSksMipCPT09WCsxJiYoQj0xLUIpLDIqVz09PXRlKzEmJihXPTEtVyksUC5pdXNo''@;'; put 'put ''cm4oMSksTC5pdXNocm4oMSl9cmV0dXJuIFl9LEQuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gSChQLEwsWSl7dmFyIEI9Il8iK0w7UC5wcm90b3R5cGVbTF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tCXT90aGlzW0JdOnRoaXNbQl09WS5jYWxsKHRoaXMpfX0sRC5wYXJzZUJ5''@;'; put 'put ''dGVzPWZ1bmN0aW9uIFIoUCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQP0QudG9BcnJheShQLCJoZXgiKTpQfSxELmludEZyb21MRT1mdW5jdGlvbiBqKFApe3JldHVybiBuZXcgXyhQLCJoZXgiLCJsZSIpfX0sODg3MjM6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCxfKXsidXNlIHN0''@;'; put 'put ''cmljdCI7ZnVuY3Rpb24gcCh6LGcpe2lmKCF6KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIE4oeixnKXt6LnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSx6LnByb3RvdHlwZT1uZXcgeSx6LnByb3RvdHlw''@;'; put 'put ''ZS5jb25zdHJ1Y3Rvcj16fWZ1bmN0aW9uIHcoeixnLHkpe2lmKHcuaXNCTih6KSlyZXR1cm4gejt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMu''@;'; put 'put ''X2luaXQoenx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIEY7Im9iamVjdCI9PXR5cGVvZiBEP0QuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7Rj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig3OTM2OCku''@;'; put 'put ''QnVmZmVyfWNhdGNoe31mdW5jdGlvbiBIKHosZyl7dmFyIHk9ei5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKHosZyx5KXt2YXIgeD1IKHoseSk7cmV0dXJuIHktMT49ZyYmKHh8PUgoeix5LTEpPDw0''@;'; put 'put ''KSx4fWZ1bmN0aW9uIGooeixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbih6Lmxlbmd0aCx5KSxWPWc7VjxUO1YrKyl7dmFyIFU9ei5jaGFyQ29kZUF0KFYpLTQ4O0MqPXgsQys9VT49NDk/VS00OSsxMDpVPj0xNz9VLTE3KzEwOlV9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXko''@;'; put 'put ''Zyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxD''@;'; put 'put ''LHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29y''@;'; put 'put ''ZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2''@;'; put 'put ''NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJu''@;'; put 'put ''IHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxWLFU9MDtpZigi''@;'; put 'put ''YmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtlbHNlIGlmKCJs''@;'; put 'put ''ZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO3JldHVybiB0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3Zh''@;'; put 'put ''ciBVLFQ9MCxWPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95''@;'; put 'put ''KzE6eTtDPGcubGVuZ3RoO0MrPTIpVT1SKGcseSxDKTw8VCx0aGlzLndvcmRzW1ZdfD02NzEwODg2MyZVLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW1YrPTFdfD1VPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndv''@;'; put 'put ''cmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIFY9Zy5sZW5ndGgteCxVPVYlQyxFPU1hdGgubWluKFYsVi1VKSt4LG09MCxBPXg7QTxFO0ErPUMpbT1qKGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0''@;'; put 'put ''aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09VSl7dmFyIGFlPTE7Zm9yKG09aihnLEEsZy5sZW5ndGgseSksQT0wO0E8VTtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhp''@;'; put 'put ''cy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVu''@;'; put 'put ''Z3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjog''@;'; put 'put ''IikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgUD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUs''@;'; put 'put ''NSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEz''@;'; put 'put ''NzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07''@;'; put 'put ''ZnVuY3Rpb24gVyh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmU7dmFyIHg9ei5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHx6LndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLFY9QypULEU9Vi82NzEwODg2NHwwO3kud29yZHNbMF09Njcx''@;'; put 'put ''MDg4NjMmVjtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxsZT1NYXRoLm1heCgwLG0tei5sZW5ndGgrMSk7bGU8PW5lO2xlKyspQSs9KFY9KEM9MHx6LndvcmRzW20tbGV8MF0pKihUPTB8Zy53b3Jk''@;'; put 'put ''c1tsZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJlY7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09''@;'; put 'put ''KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLFY9MDtWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9dGhpcy53b3Jkc1tWXSxFPSgxNjc3NzIxNSYoVTw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9VT4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LFYtLSks''@;'; put 'put ''eD0wIT09VHx8ViE9PXRoaXMubGVuZ3RoLTE/UFs2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9''@;'; put 'put ''MzYpe3ZhciBtPUxbZ10sQT1ZW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpQW20tbmUubGVuZ3RoXStuZSt4fWZv''@;'; put 'put ''cih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Zz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJO''@;'; put 'put ''dW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJu''@;'; put 'put ''IHAodHlwZW9mIEY8InUiKSx0aGlzLnRvQXJyYXlMaWtlKEYsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5''@;'; put 'put ''dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLFY9ImxlIj09PXksVT1uZXcgZyhUKSxBPXRoaXMu''@;'; put 'put ''Y2xvbmUoKTtpZihWKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxVW21dPUU7Zm9yKDttPFQ7bSsrKVVbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKVVbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1''@;'; put 'put ''c2hybig4KSxVW1QtbS0xXT1FfXJldHVybiBVfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4''@;'; put 'put ''Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4gODE5MSZ5fHwoeCs9MTMseT4+Pj0xMyksMTI3Jnl8fCh4Kz03''@;'; put 'put ''LHk+Pj49NyksMTUmeXx8KHgrPTQseT4+Pj00KSwzJnl8fCh4Kz0yLHk+Pj49MiksMSZ5fHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgt''@;'; put 'put ''MSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9''@;'; put 'put ''LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNs''@;'; put 'put ''b25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3Ro''@;'; put 'put ''O3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j''@;'; put 'put ''bG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109''@;'; put 'put ''eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3Ro''@;'; put 'put ''aXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''bm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09''@;'; put 'put ''eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlz''@;'; put 'put ''dWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRo''@;'; put 'put ''aXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsVj0wO1Y8Qy5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrKDB8Qy53b3Jkc1tWXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmVjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEw''@;'; put 'put ''ODg2MyYoeT0oMHx4LndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO1Y8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09eC53b3Jkc1tW''@;'; put 'put ''XTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUp''@;'; put 'put ''e2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQs''@;'; put 'put ''eD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBWPTAsVT0wO1U8VC5sZW5ndGg7VSsrKVY9KHk9KDB8Qy53b3Jkc1tVXSktKDB8''@;'; put 'put ''VC53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtmb3IoOzAhPT1WJiZVPEMubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7aWYoMD09PVYmJlU8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7VTxDLmxl''@;'; put 'put ''bmd0aDtVKyspdGhpcy53b3Jkc1tVXT1DLndvcmRzW1VdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxVKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pc3ViKGcpfTt2YXIgWj1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsVj14LndvcmRzLFU9MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxsZT1hZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLFFlPXdlPj4+MTMsb3Q9MHxDWzJdLE1lPTgxOTEmb3QsdmU9''@;'; put 'put ''b3Q+Pj4xMyxYZT0wfENbM10sQmU9ODE5MSZYZSxBZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsSGU9MHxDWzVdLERlPTgxOTEmSGUsa2U9SGU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxKZT1fdD4+PjEzLGxuPTB8Q1s3XSx5dD04MTkxJmxuLFN0PWxuPj4+''@;'; put 'put ''MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sTmU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsY2k9MHxUWzFdLFF0PTgxOTEmY2ksc249Y2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9y''@;'; put 'put ''PTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsam49MHxUWzddLHJuPTgxOTEmam4senQ9am4+Pj4xMyxoaT0wfFRb''@;'; put 'put ''OF0sdW49ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVhPShVKyhFPU1hdGguaW11bChuZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUHQp''@;'; put 'put ''KStNYXRoLmltdWwobGUsUnQpfDApKTw8MTMpfDA7VT0oKEE9TWF0aC5pbXVsKGxlLFB0KSkrKG0+Pj4xMyl8MCkrKHVhPj4+MjYpfDAsdWEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChR''@;'; put 'put ''ZSxQdCk7dmFyIEVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChsZSxRdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxzbil8MCkrKG0+Pj4xMyl8MCkrKEVpPj4+MjYpfDAsRWkmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSxzbil8MDt2YXIgdnI9KFUrKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGxlLGhuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8''@;'; put 'put ''MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQmUsUnQpLG09KG09TWF0aC5pbXVsKEJlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDA7dmFyIFduPShVKyhFPUUrTWF0aC5pbXVsKG5lLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChsZSxXdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11''@;'; put 'put ''bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChCZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDA7dmFyICRpPShVKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG5lLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVXQpfDApK01hdGguaW11bChsZSxzdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKERlLFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChEZSxQdCkpK01hdGguaW11bChrZSxSdCl8MCxBPU1hdGguaW11bChrZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKEJl''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MDt2YXIgZWk9KFUrKEU9RStNYXRoLmltdWwobmUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGxlLFdlKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKEplLFB0KSxFPUUrTWF0aC5pbXVsKERlLFF0KXwwLG09KG09bStNYXRoLmltdWwoRGUsc24pfDApK01hdGguaW11bChrZSxRdCl8MCxBPUErTWF0aC5pbXVsKGtlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChCZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUs''@;'; put 'put ''VXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDA7dmFyIFFyPShVKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KG5lLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUseHQpfDApK01hdGguaW11bChsZSxodCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChTdCxSdCl8MCxBPU1hdGguaW11bChTdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MCxFPUUrTWF0aC5pbXVsKERl''@;'; put 'put ''LGhuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZnQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChCZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFV0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDA7dmFyIFZpPShVKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09''@;'; put 'put ''bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChsZSxybil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11''@;'; put 'put ''bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoU3QsUXQpfDAsQT1BK01hdGguaW11bChTdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQs''@;'; put 'put ''ZnQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwLEU9RStNYXRoLmltdWwoRGUsV3QpfDAsbT0obT1tK01hdGguaW11bChEZSxBdCl8MCkrTWF0aC5pbXVsKGtlLFd0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoQmUsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChRZSx6dCl8MDt2YXIgTmk9KFUrKEU9RStNYXRoLmltdWwobmUsdW4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxmbil8MCkrTWF0aC5pbXVsKGxlLHVuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8''@;'; put 'put ''MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUnQpLG09KG09TWF0aC5pbXVsKE5lLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MCxFPUUrTWF0aC5pbXVsKERlLHN0KXwwLG09KG09bStNYXRoLmltdWwoRGUsVXQpfDApK01hdGguaW11bChrZSxzdCl8MCxBPUErTWF0aC5pbXVsKGtlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChCZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsdW4pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFFlLHVuKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''Zm4pfDA7dmFyIERhPShVKyhFPUUrTWF0aC5pbXVsKG5lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChsZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxlbil8MCkrKG0+Pj4xMyl8MCkrKERhPj4+MjYpfDAsRGEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFF0KSxtPShtPU1hdGguaW11bChOZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChTdCxXdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsVXQpfDAsRT1FK01hdGguaW11bChEZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKERlLFR0KXwwKStNYXRoLmltdWwoa2UsV2UpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''UmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoQmUscm4pfDAsbT0obT1tK01hdGguaW11bChCZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChNZSx1bil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsdW4pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KFUrKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8''@;'; put 'put ''PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaG4pLG09KG09TWF0aC5pbXVsKE5lLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKFN0LHN0KXwwLEE9QStNYXRoLmltdWwoU3Qs''@;'; put 'put ''VXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MCxFPUUrTWF0aC5pbXVsKERlLGh0KXwwLG09KG09bStNYXRoLmltdWwoRGUseHQpfDApK01hdGguaW11bChrZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKGtlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChCZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoQWUsdW4pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgV2k9KFUrKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKHZl''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV3QpLG09KG09TWF0aC5pbXVsKE5lLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFdlKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MCxFPUUrTWF0aC5pbXVsKERlLHJuKXwwLG09KG09bStNYXRoLmltdWwoRGUsenQpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoUmUsdW4pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLHVuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIHBhPShVKyhFPUUrTWF0aC5pbXVsKEJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQmUsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKHBhPj4+MjYpfDAscGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHN0KSxtPShtPU1hdGguaW11bChOZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1''@;'; put 'put ''dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChTdCxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFN0LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDAsRT1FK01hdGguaW11bChEZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZuKXww''@;'; put 'put ''KStNYXRoLmltdWwoa2UsdW4pfDAsQT1BK01hdGguaW11bChrZSxmbil8MDt2YXIgUW49KFUrKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsV2UpLG09KG09TWF0aC5pbXVsKE5lLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChudCx1bil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoSmUsdW4pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgbGE9KFUrKEU9RStNYXRoLmltdWwoRGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChEZSxlbil8MCkrTWF0aC5pbXVsKGtlLFh0KXwwKSk8''@;'; put 'put ''PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGtlLGVuKXwwKSsobT4+PjEzKXwwKSsobGE+Pj4yNil8MCxsYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsaHQpLG09KG09TWF0aC5pbXVsKE5lLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsdW4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKFN0LHVuKXwwLEE9QStNYXRoLmltdWwoU3Qs''@;'; put 'put ''Zm4pfDA7dmFyIGJhPShVKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGJhPj4+MjYpfDAsYmEmPTY3''@;'; put 'put ''MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHJuKSxtPShtPU1hdGguaW11bChOZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsdW4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bCgkZSxmbil8MDt2YXIgTGE9KFUrKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKFN0LFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKFN0LGVuKXwwKSsobT4+PjEzKXwwKSsoTGE+Pj4yNil8''@;'; put 'put ''MCxMYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsdW4pLG09KG09TWF0aC5pbXVsKE5lLGZuKSkrTWF0aC5pbXVsKHV0LHVuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgRmE9KFUrKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoRmE+Pj4yNil8MCxGYSY9NjcxMDg4NjM7dmFyIHRpPShVKyhFPU1hdGguaW11bChOZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoTmUsZW4pKStNYXRo''@;'; put 'put ''LmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIFU9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxWWzBdPXVhLFZbMV09RWksVlsyXT12cixWWzNdPVduLFZbNF09JGksVls1XT1laSxWWzZdPVFyLFZbN109VmksVls4XT1OaSxW''@;'; put 'put ''WzldPURhLFZbMTBdPUxyLFZbMTFdPVdpLFZbMTJdPXBhLFZbMTNdPVFuLFZbMTRdPWxhLFZbMTVdPWJhLFZbMTZdPUxhLFZbMTddPUZhLFZbMThdPXRpLDAhPT1VJiYoVlsxOV09VSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBRKHosZyx5KXtyZXR1cm4obmV3IFgpLm11bHAoeixnLHkpfWZ1''@;'; put 'put ''bmN0aW9uIFgoeixnKXt0aGlzLng9eix0aGlzLnk9Z31NYXRoLmltdWx8fChaPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1oodGhpcyxnLHkpOkM8''@;'; put 'put ''NjM/Vyh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlLHkubGVuZ3RoPXoubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIFY9QztDPTA7Zm9yKHZhciBVPTY3MTA4''@;'; put 'put ''ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULXoubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgbGU9KDB8ei53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSx3ZT02NzEwODg2MyZsZTtVPTY3MTA4ODYzJih3ZT13ZStVfDApLEMrPShWPShWPVYrKGxlLzY3MTA4''@;'; put 'put ''ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LFYmPTY3MTA4ODYzfXkud29yZHNbVF09VSx4PVYsVj1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTpRKHRoaXMsZyx5KSx4fSxYLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcp''@;'; put 'put ''e2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LFgucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9y''@;'; put 'put ''KHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxYLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXtmb3IodmFyIFU9MDtVPFY7VSsrKUNbVV09eVtnW1VdXSxUW1VdPXhbZ1tVXV19LFgucHJvdG90eXBlLnRyYW5zZm9ybT1m''@;'; put 'put ''dW5jdGlvbihnLHkseCxDLFQsVil7dGhpcy5wZXJtdXRlKFYsZyx5LHgsQyxUKTtmb3IodmFyIFU9MTtVPFQ7VTw8PTEpZm9yKHZhciBFPVU8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxsZT1B''@;'; put 'put ''LHdlPTA7d2U8VTt3ZSsrKXt2YXIgVWU9eFthZSt3ZV0sUWU9Q1thZSt3ZV0sb3Q9eFthZSt3ZStVXSxNZT1DW2FlK3dlK1VdLHZlPW5lKm90LWxlKk1lO01lPW5lKk1lK2xlKm90LHhbYWUrd2VdPVVlKyhvdD12ZSksQ1thZSt3ZV09UWUrTWUseFthZSt3ZStVXT1VZS1vdCxDW2FlK3dlK1Vd''@;'; put 'put ''PVFlLU1lLHdlIT09RSYmKHZlPW0qbmUtQSpsZSxsZT1tKmxlK0EqbmUsbmU9dmUpfX0sWC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LFgu''@;'; put 'put ''cHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LFgucHJvdG90eXBlLm5vcm1hbGl6ZTEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LFgucHJvdG90eXBl''@;'; put 'put ''LmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsVj0wO1Y8eTtWKyspeFsyKlZdPTgxOTEmKFQrPTB8Z1tWXSkseFsyKlYrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoVj0yKnk7VjxDOysrVil4W1ZdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sWC5wcm90''@;'; put 'put ''b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sWC5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJC''@;'; put 'put ''VChDKSxWPXRoaXMuc3R1YihDKSxVPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLGxlPXgud29yZHM7bGUubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5n''@;'; put 'put ''dGgsVSxDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKFUsVixFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLFYsYWUsbmUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qYWVbd2VdLW1bd2VdKm5lW3dlXTttW3dl''@;'; put 'put ''XT1FW3dlXSpuZVt3ZV0rbVt3ZV0qYWVbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLGxlLFYsQyxUKSx0aGlzLmNvbmp1Z2F0ZShsZSxWLEMpLHRoaXMubm9ybWFsaXplMTNiKGxlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55''@;'; put 'put ''Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksUSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1D''@;'; put 'put ''LzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PWc/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB5PWZ1bmN0aW9uIEIoeil7Zm9yKHZhciBnPW5ldyBBcnJheSh6LmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oei53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3Io''@;'; put 'put ''dmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgVj0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBVPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1Rd''@;'; put 'put ''PSgwfHRoaXMud29yZHNbVF0pLVU8PHl8VixWPVU+Pj4yNi15fVYmJih0aGlzLndvcmRzW1RdPVYsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29y''@;'; put 'put ''ZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsVj1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksVT02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPVYsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208VjttKyspRS53''@;'; put 'put ''b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPVZ9aWYoMCE9PVYpaWYodGhpcy5sZW5ndGg+Vilmb3IodGhpcy5sZW5ndGgtPVYsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK1ZdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7''@;'; put 'put ''dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZVfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8''@;'; put 'put ''PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVu''@;'; put 'put ''Z3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhp''@;'; put 'put ''cy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rp''@;'; put 'put ''b24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4g''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0w''@;'; put 'put ''O3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIFYsVT0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe1Y9KDB8dGhpcy53b3Jkc1tUK3hdKStVO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7VT0oKFYtPTY3MTA4''@;'; put 'put ''ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlZ9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKVU9KFY9KDB8dGhpcy53b3Jkc1tUK3hdKStVKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJlY7aWYoMD09PVUpcmV0dXJuIHRoaXMuc3RyaXAo''@;'; put 'put ''KTtmb3IocCgtMT09PVUpLFU9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspVT0oVj0tKDB8dGhpcy53b3Jkc1tUXSkrVSk+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmVjtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsVj0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKFYpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigi''@;'; put 'put ''bW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUs''@;'; put 'put ''bSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBsZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKGxlPU1hdGgubWluKGxlL1Z8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxs''@;'; put 'put ''ZSxuZSk7MCE9PUMubmVnYXRpdmU7KWxlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1sZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNo''@;'; put 'put ''cm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhWPXRo''@;'; put 'put ''aXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KFY9dGhpcy5kaXZt''@;'; put 'put ''b2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOlYubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhWPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1WLm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5p''@;'; put 'put ''c3ViKGcpKSx7ZGl2OlYuZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVs''@;'; put 'put ''bCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULFZ9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxWPXguY21wKEMpO3JldHVybiBW''@;'; put 'put ''PDB8fDE9PT1UJiYwPT09Vj95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0t''@;'; put 'put ''KXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29y''@;'; put 'put ''ZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5''@;'; put 'put ''PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9bmV3IHcoMCksVT1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zv''@;'; put 'put ''cih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQo''@;'; put 'put ''bSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIGxlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZsZTwyNjsrK2xlLHdlPDw9MSk7aWYobGU+MClmb3IoeC5pdXNocm4obGUpO2xlLS0gPjA7KShWLmlzT2RkKCl8fFUuaXNPZGQoKSkmJihWLmlhZGQobSksVS5p''@;'; put 'put ''c3ViKEEpKSxWLml1c2hybigxKSxVLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihWKSxULmlzdWIoVSkpOih4LmlzdWIoeSksVi5pc3ViKEMpLFUuaXN1YihUKSl9cmV0dXJue2E6VixiOlUsZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLFY9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4o''@;'; put 'put ''MSk+MDspe2Zvcih2YXIgVT0wLEU9MTshKHkud29yZHNbMF0mRSkmJlU8MjY7KytVLEU8PD0xKTtpZihVPjApZm9yKHkuaXVzaHJuKFUpO1UtLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoViksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8''@;'; put 'put ''PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChWKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZh''@;'; put 'put ''ZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zv''@;'; put 'put ''cih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIFY9eTt5PXgseD1W''@;'; put 'put ''fWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgx''@;'; put 'put ''JnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsVj14OzAhPT1UJiZWPHRoaXMubGVuZ3RoO1YrKyl7dmFyIFU9MHx0aGlzLndv''@;'; put 'put ''cmRzW1ZdO1Q9KFUrPVQpPj4+MjYsdGhpcy53b3Jkc1tWXT1VJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW1ZdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29y''@;'; put 'put ''ZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxw''@;'; put 'put ''KGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5u''@;'; put 'put ''ZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5''@;'; put 'put ''fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90''@;'; put 'put ''b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBTZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rp''@;'; put 'put ''b24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVt''@;'; put 'put ''YmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNx''@;'; put 'put ''cih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElu''@;'; put 'put ''dm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcp''@;'; put 'put ''fTt2YXIgdGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiByZSh6LGcpe3RoaXMubmFtZT16LHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRo''@;'; put 'put ''aXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gb2UoKXtyZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7cmUuY2FsbCh0aGlzLCJw''@;'; put 'put ''MjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe3JlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVu''@;'; put 'put ''Y3Rpb24gVGUoKXtyZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKHope2lmKCJzdHJpbmciPT10eXBlb2Ygeil7dmFyIGc9dy5fcHJpbWUoeik7dGhpcy5t''@;'; put 'put ''PWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKHouZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoeil7U2UuY2FsbCh0aGlzLHopLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQl''@;'; put 'put ''MjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlz''@;'; put 'put ''LnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9cmUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0''@;'; put 'put ''aC5jZWlsKHRoaXMubi8xMykpLGd9LHJlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14''@;'; put 'put ''PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxyZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hy''@;'; put 'put ''bih0aGlzLm4sMCx5KX0scmUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sTihvZSxyZSksb2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5''@;'; put 'put ''LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIFY9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1WJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIFU9MHxnLndvcmRz''@;'; put 'put ''W1RdO2cud29yZHNbVC0xMF09KFUmeCk8PDR8Vj4+PjIyLFY9VX1nLndvcmRzW1QtMTBdPVY+Pj49MjIsZy5sZW5ndGgtPTA9PT1WJiZnLmxlbmd0aD4xMD8xMDo5fSxvZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFd''@;'; put 'put ''PTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9''@;'; put 'put ''PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxOKGdlLHJlKSxOKF9lLHJlKSxOKFRlLHJlKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMm''@;'; put 'put ''QztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZih0ZVtnXSlyZXR1cm4gdGVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyBvZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcg''@;'; put 'put ''Z2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiB0ZVtnXT15LHl9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZl''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9z''@;'; put 'put ''aXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlz''@;'; put 'put ''Lm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9''@;'; put 'put ''Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1''@;'; put 'put ''Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0''@;'; put 'put ''aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sU2UucHJvdG90eXBlLmlt''@;'; put 'put ''dWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5h''@;'; put 'put ''bmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMu''@;'; put 'put ''aXNaZXJvKCkpO3ZhciBWPW5ldyB3KDEpLnRvUmVkKHRoaXMpLFU9Vi5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKFUpOyltLnJlZElBZGQo''@;'; put 'put ''VSk7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLGxlPVQ7MCE9PW5lLmNtcChWKTspe2Zvcih2YXIgd2U9bmUsVWU9MDswIT09d2UuY21wKFYpO1VlKyspd2U9d2UucmVkU3FyKCk7cChVZTxsZSk7dmFy''@;'; put 'put ''IFFlPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKGxlLVVlLTEpKTthZT1hZS5yZWRNdWwoUWUpLEE9UWUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLGxlPVVlfXJldHVybiBhZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4g''@;'; put 'put ''MCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcu''@;'; put 'put ''Y2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBWPUNbMF0sVT0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0y''@;'; put 'put ''NiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7ViE9PUNbMF0mJihWPXRoaXMuc3FyKFYpKSwwIT09bmV8fDAhPT1VPyhVPDw9MSxVfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKFY9dGhp''@;'; put 'put ''cy5tdWwoVixDW1VdKSxFPTAsVT0wKSk6RT0wfW09MjZ9cmV0dXJuIFZ9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFy''@;'; put 'put ''IHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IHplKGcpfSxOKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlw''@;'; put 'put ''ZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5n''@;'; put 'put ''dGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5t''@;'; put 'put ''KTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNr''@;'; put 'put ''bih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5t''@;'; put 'put ''KSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNDU3MDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''Sj1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKEopdHJ5e0ooe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7Sj0hMX1jZS5leHBvcnRzPUp9LDE3NTY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FdmFsRXJyb3J9LDM3NjQwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9RXJy''@;'; put 'put ''b3J9LDc3OTMzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9UmFuZ2VFcnJvcn0sNjYxMzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVJlZmVyZW5jZUVycm9yfSw1ODQxMzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVN5bnRheEVycm9yfSw0Njc1ODpjZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtjZS5leHBvcnRzPVR5cGVFcnJvcn0sNTI4NjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVVSSUVycm9yfSw2NTg5MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU9iamVjdH0sNDQzNTY6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEQsSj0ib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IFJlZmxlY3Q/UmVmbGVjdDpudWxsLGI9SiYmImZ1bmN0aW9uIj09dHlwZW9mIEouYXBwbHk/Si5hcHBseTpmdW5jdGlvbihyZSxvZSxnZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHJlLG9lLGdlKX07RD1KJiYiZnVuY3Rpb24iPT10eXBlb2YgSi5vd25LZXlzP0ou''@;'; put 'put ''b3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHJlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocmUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHJlKSl9OmZ1bmN0aW9uKHJlKXtyZXR1cm4gT2JqZWN0LmdldE93blBy''@;'; put 'put ''b3BlcnR5TmFtZXMocmUpfTt2YXIgcD1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUhPXJlfTtmdW5jdGlvbiBOKCl7Ti5pbml0LmNhbGwodGhpcyl9Y2UuZXhwb3J0cz1OLGNlLmV4cG9ydHMub25jZT1mdW5jdGlvbiBxKHRlLHJlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVu''@;'; put 'put ''Y3Rpb24ob2UsZ2Upe2Z1bmN0aW9uIF9lKFNlKXt0ZS5yZW1vdmVMaXN0ZW5lcihyZSxUZSksZ2UoU2UpfWZ1bmN0aW9uIFRlKCl7ImZ1bmN0aW9uIj09dHlwZW9mIHRlLnJlbW92ZUxpc3RlbmVyJiZ0ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLF9lKSxvZShbXS5zbGljZS5jYWxsKGFyZ3Vt''@;'; put 'put ''ZW50cykpfVgodGUscmUsVGUse29uY2U6ITB9KSwiZXJyb3IiIT09cmUmJmZ1bmN0aW9uIFEodGUscmUsb2UpeyJmdW5jdGlvbiI9PXR5cGVvZiB0ZS5vbiYmWCh0ZSwiZXJyb3IiLHJlLG9lKX0odGUsX2Use29uY2U6ITB9KX0pfSxOLkV2ZW50RW1pdHRlcj1OLE4ucHJvdG90eXBlLl9ldmVu''@;'; put 'put ''dHM9dm9pZCAwLE4ucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLE4ucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB3PTEwO2Z1bmN0aW9uIEYodGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdGUpfWZ1bmN0aW9uIEgodGUpe3JldHVybiB2b2lkIDA9PT10ZS5fbWF4TGlzdGVuZXJzP04uZGVmYXVsdE1heExpc3RlbmVyczp0ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIFIodGUscmUsb2UsZ2Upe3Zh''@;'; put 'put ''ciBfZSxUZSxTZTtpZihGKG9lKSx2b2lkIDA9PT0oVGU9dGUuX2V2ZW50cyk/KFRlPXRlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0ZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVRlLm5ld0xpc3RlbmVyJiYodGUuZW1pdCgibmV3TGlzdGVuZXIiLHJlLG9lLmxpc3RlbmVyP29l''@;'; put 'put ''Lmxpc3RlbmVyOm9lKSxUZT10ZS5fZXZlbnRzKSxTZT1UZVtyZV0pLHZvaWQgMD09PVNlKVNlPVRlW3JlXT1vZSwrK3RlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBTZT9TZT1UZVtyZV09Z2U/W29lLFNlXTpbU2Usb2VdOmdlP1NlLnVuc2hpZnQob2UpOlNlLnB1''@;'; put 'put ''c2gob2UpLChfZT1IKHRlKSk+MCYmU2UubGVuZ3RoPl9lJiYhU2Uud2FybmVkKXtTZS53YXJuZWQ9ITA7dmFyIHplPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK1NlLmxlbmd0aCsiICIrU3RyaW5nKHJlKSsiIGxpc3RlbmVycyBhZGRl''@;'; put 'put ''ZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTt6ZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHplLmVtaXR0ZXI9dGUsemUudHlwZT1yZSx6ZS5jb3VudD1TZS5sZW5ndGgsZnVuY3Rpb24gXyh0ZSl7Y29uc29sZSYmY29uc29s''@;'; put 'put ''ZS53YXJuJiZjb25zb2xlLndhcm4odGUpfSh6ZSl9cmV0dXJuIHRlfWZ1bmN0aW9uIGooKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMu''@;'; put 'put ''bGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIFAodGUscmUsb2Upe3ZhciBnZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6dGUsdHlwZTpyZSxsaXN0ZW5lcjpvZX0sX2U9ai5iaW5kKGdl''@;'; put 'put ''KTtyZXR1cm4gX2UubGlzdGVuZXI9b2UsZ2Uud3JhcEZuPV9lLF9lfWZ1bmN0aW9uIEwodGUscmUsb2Upe3ZhciBnZT10ZS5fZXZlbnRzO2lmKHZvaWQgMD09PWdlKXJldHVybltdO3ZhciBfZT1nZVtyZV07cmV0dXJuIHZvaWQgMD09PV9lP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBfZT9vZT9b''@;'; put 'put ''X2UubGlzdGVuZXJ8fF9lXTpbX2VdOm9lP2Z1bmN0aW9uIFoodGUpe2Zvcih2YXIgcmU9bmV3IEFycmF5KHRlLmxlbmd0aCksb2U9MDtvZTxyZS5sZW5ndGg7KytvZSlyZVtvZV09dGVbb2VdLmxpc3RlbmVyfHx0ZVtvZV07cmV0dXJuIHJlfShfZSk6QihfZSxfZS5sZW5ndGgpfWZ1bmN0aW9u''@;'; put 'put ''IFkodGUpe3ZhciByZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09cmUpe3ZhciBvZT1yZVt0ZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIG9lKXJldHVybiAxO2lmKHZvaWQgMCE9PW9lKXJldHVybiBvZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gQih0ZSxyZSl7Zm9yKHZhciBvZT1uZXcg''@;'; put 'put ''QXJyYXkocmUpLGdlPTA7Z2U8cmU7KytnZSlvZVtnZV09dGVbZ2VdO3JldHVybiBvZX1mdW5jdGlvbiBYKHRlLHJlLG9lLGdlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGUub24pZ2Uub25jZT90ZS5vbmNlKHJlLG9lKTp0ZS5vbihyZSxvZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''dGUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdGUpO3RlLmFkZEV2ZW50TGlzdGVuZXIocmUsZnVuY3Rpb24gX2UoVGUpe2dlLm9u''@;'; put 'put ''Y2UmJnRlLnJlbW92ZUV2ZW50TGlzdGVuZXIocmUsX2UpLG9lKFRlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldDpmdW5jdGlvbih0ZSl7aWYoIm51bWJlciIhPXR5cGVv''@;'; put 'put ''ZiB0ZXx8dGU8MHx8cCh0ZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyt0ZSsiLiIpO3c9dGV9fSksTi5pbml0PWZ1bmN0''@;'; put 'put ''aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21h''@;'; put 'put ''eExpc3RlbmVyc3x8dm9pZCAwfSxOLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24ocmUpe2lmKCJudW1iZXIiIT10eXBlb2YgcmV8fHJlPDB8fHAocmUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBh''@;'; put 'put ''IG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrcmUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXJlLHRoaXN9LE4ucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBIKHRoaXMpfSxOLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHJlKXtmb3Io''@;'; put 'put ''dmFyIG9lPVtdLGdlPTE7Z2U8YXJndW1lbnRzLmxlbmd0aDtnZSsrKW9lLnB1c2goYXJndW1lbnRzW2dlXSk7dmFyIF9lPSJlcnJvciI9PT1yZSxUZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VGUpX2U9X2UmJnZvaWQgMD09PVRlLmVycm9yO2Vsc2UgaWYoIV9lKXJldHVybiExO2lmKF9l''@;'; put 'put ''KXt2YXIgU2U7aWYob2UubGVuZ3RoPjAmJihTZT1vZVswXSksU2UgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBTZTt2YXIgemU9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoU2U/IiAoIitTZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHplLmNvbnRleHQ9U2UsemV9dmFyIHo9VGVbcmVd''@;'; put 'put ''O2lmKHZvaWQgMD09PXopcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHopYih6LHRoaXMsb2UpO2Vsc2V7dmFyIGc9ei5sZW5ndGgseT1CKHosZyk7Zm9yKGdlPTA7Z2U8ZzsrK2dlKWIoeVtnZV0sdGhpcyxvZSl9cmV0dXJuITB9LE4ucHJvdG90eXBlLm9uPU4ucHJvdG90eXBlLmFk''@;'; put 'put ''ZExpc3RlbmVyPWZ1bmN0aW9uKHJlLG9lKXtyZXR1cm4gUih0aGlzLHJlLG9lLCExKX0sTi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHJlLG9lKXtyZXR1cm4gUih0aGlzLHJlLG9lLCEwKX0sTi5wcm90b3R5cGUub25jZT1mdW5jdGlvbihyZSxvZSl7cmV0dXJuIEYob2Up''@;'; put 'put ''LHRoaXMub24ocmUsUCh0aGlzLHJlLG9lKSksdGhpc30sTi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihyZSxvZSl7cmV0dXJuIEYob2UpLHRoaXMucHJlcGVuZExpc3RlbmVyKHJlLFAodGhpcyxyZSxvZSkpLHRoaXN9LE4ucHJvdG90eXBlLm9mZj1OLnByb3RvdHlw''@;'; put 'put ''ZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihyZSxvZSl7dmFyIGdlLF9lLFRlLFNlLHplO2lmKEYob2UpLHZvaWQgMD09PShfZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShnZT1fZVtyZV0pKXJldHVybiB0aGlzO2lmKGdlPT09b2V8fGdlLmxpc3RlbmVyPT09b2Up''@;'; put 'put ''MD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIF9lW3JlXSxfZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIscmUsZ2UubGlzdGVuZXJ8fG9lKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''Z2Upe2ZvcihUZT0tMSxTZT1nZS5sZW5ndGgtMTtTZT49MDtTZS0tKWlmKGdlW1NlXT09PW9lfHxnZVtTZV0ubGlzdGVuZXI9PT1vZSl7emU9Z2VbU2VdLmxpc3RlbmVyLFRlPVNlO2JyZWFrfWlmKFRlPDApcmV0dXJuIHRoaXM7MD09PVRlP2dlLnNoaWZ0KCk6ZnVuY3Rpb24gVyh0ZSxyZSl7''@;'; put 'put ''Zm9yKDtyZSsxPHRlLmxlbmd0aDtyZSsrKXRlW3JlXT10ZVtyZSsxXTt0ZS5wb3AoKX0oZ2UsVGUpLDE9PT1nZS5sZW5ndGgmJihfZVtyZV09Z2VbMF0pLHZvaWQgMCE9PV9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixyZSx6ZXx8b2UpfXJldHVybiB0aGlz''@;'; put 'put ''fSxOLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24ocmUpe3ZhciBvZSxnZSxfZTtpZih2b2lkIDA9PT0oZ2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1nZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMu''@;'; put 'put ''X2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWdlW3JlXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGdlW3JlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCl7dmFyIFNlLFRlPU9iamVjdC5rZXlzKGdlKTtmb3IoX2U9MDtfZTxUZS5sZW5ndGg7KytfZSkicmVtb3ZlTGlzdGVuZXIiIT09KFNlPVRlW19lXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFNlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiks''@;'; put 'put ''dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihvZT1nZVtyZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIocmUsb2UpO2Vsc2UgaWYodm9pZCAwIT09b2UpZm9yKF9lPW9lLmxlbmd0aC0xO19lPj0wO19l''@;'; put 'put ''LS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihyZSxvZVtfZV0pO3JldHVybiB0aGlzfSxOLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24ocmUpe3JldHVybiBMKHRoaXMscmUsITApfSxOLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24ocmUpe3JldHVybiBMKHRoaXMscmUsITEpfSxO''@;'; put 'put ''Lmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odGUscmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0ZS5saXN0ZW5lckNvdW50P3RlLmxpc3RlbmVyQ291bnQocmUpOlkuY2FsbCh0ZSxyZSl9LE4ucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WSxOLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/RCh0aGlzLl9ldmVudHMpOltdfX0sMTgyMTE6KGNlLEosYik9Pnt2YXIgRD1iKDI3MDU0KS5CdWZmZXIsXz1iKDM0NzI1KTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoTix3LEYsSCl7aWYoRC5pc0J1ZmZlcihOKXx8KE49RC5mcm9tKE4s''@;'; put 'put ''ImJpbmFyeSIpKSx3JiYoRC5pc0J1ZmZlcih3KXx8KHc9RC5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBSPUYvOCxqPUQuYWxsb2MoUiksUD1ELmFs''@;'; put 'put ''bG9jKEh8fDApLEw9RC5hbGxvYygwKTtSPjB8fEg+MDspe3ZhciBZPW5ldyBfO1kudXBkYXRlKEwpLFkudXBkYXRlKE4pLHcmJlkudXBkYXRlKHcpLEw9WS5kaWdlc3QoKTt2YXIgQj0wO2lmKFI+MCl7dmFyIFc9ai5sZW5ndGgtUjtCPU1hdGgubWluKFIsTC5sZW5ndGgpLEwuY29weShqLFcs''@;'; put 'put ''MCxCKSxSLT1CfWlmKEI8TC5sZW5ndGgmJkg+MCl7dmFyIFo9UC5sZW5ndGgtSCxxPU1hdGgubWluKEgsTC5sZW5ndGgtQik7TC5jb3B5KFAsWixCLEIrcSksSC09cX19cmV0dXJuIEwuZmlsbCgwKSx7a2V5OmosaXY6UH19fSw4OTk5OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1i''@;'; put 'put ''KDU4MjM5KSxfPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NlLmV4cG9ydHM9ZnVuY3Rpb24oaixQLEwpe2lmKCFEKFApKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBZO2Fy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+PTMmJihZPUwpLGZ1bmN0aW9uIEgoUil7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PV8uY2FsbChSKX0oaik/ZnVuY3Rpb24oaixQLEwpe2Zvcih2YXIgWT0wLEI9ai5sZW5ndGg7WTxCO1krKylwLmNhbGwoaixZKSYmKG51bGw9PUw/UChqW1ldLFksaik6UC5jYWxs''@;'; put 'put ''KEwsaltZXSxZLGopKX0oaixQLFkpOiJzdHJpbmciPT10eXBlb2Ygaj9mdW5jdGlvbihqLFAsTCl7Zm9yKHZhciBZPTAsQj1qLmxlbmd0aDtZPEI7WSsrKW51bGw9PUw/UChqLmNoYXJBdChZKSxZLGopOlAuY2FsbChMLGouY2hhckF0KFkpLFksail9KGosUCxZKTpmdW5jdGlvbihqLFAsTCl7''@;'; put 'put ''Zm9yKHZhciBZIGluIGopcC5jYWxsKGosWSkmJihudWxsPT1MP1AoaltZXSxZLGopOlAuY2FsbChMLGpbWV0sWSxqKSl9KGosUCxZKX19LDQ5MTMyOmNlPT57InVzZSBzdHJpY3QiO3ZhciBiPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRD1NYXRoLm1heCxwPWZ1bmN0aW9uKEgsUil7Zm9y''@;'; put 'put ''KHZhciBqPVtdLFA9MDtQPEgubGVuZ3RoO1ArPTEpaltQXT1IW1BdO2Zvcih2YXIgTD0wO0w8Ui5sZW5ndGg7TCs9MSlqW0wrSC5sZW5ndGhdPVJbTF07cmV0dXJuIGp9O2NlLmV4cG9ydHM9ZnVuY3Rpb24oSCl7dmFyIFI9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgUnx8IltvYmplY3Qg''@;'; put 'put ''RnVuY3Rpb25dIiE9PWIuYXBwbHkoUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK1IpO2Zvcih2YXIgUCxqPWZ1bmN0aW9uKEgsUil7Zm9yKHZhciBqPVtdLFA9MSxMPTA7UDxILmxlbmd0aDtQKz0xLEwrPTEp''@;'; put 'put ''altMXT1IW1BdO3JldHVybiBqfShhcmd1bWVudHMpLFk9RCgwLFIubGVuZ3RoLWoubGVuZ3RoKSxCPVtdLFc9MDtXPFk7VysrKUJbV109IiQiK1c7aWYoUD1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKEYsSCl7Zm9yKHZhciBSPSIiLGo9MDtqPEYubGVu''@;'; put 'put ''Z3RoO2orPTEpUis9RltqXSxqKzE8Ri5sZW5ndGgmJihSKz0iLCIpO3JldHVybiBSfShCKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBQKXt2YXIgcT1SLmFwcGx5KHRoaXMscChqLGFyZ3VtZW50cykp''@;'; put 'put ''O3JldHVybiBPYmplY3QocSk9PT1xP3E6dGhpc31yZXR1cm4gUi5hcHBseShILHAoaixhcmd1bWVudHMpKX0pLFIucHJvdG90eXBlKXt2YXIgWj1mdW5jdGlvbigpe307Wi5wcm90b3R5cGU9Ui5wcm90b3R5cGUsUC5wcm90b3R5cGU9bmV3IFosWi5wcm90b3R5cGU9bnVsbH1yZXR1cm4gUH19''@;'; put 'put ''LDY1OTkyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDkxMzIpO2NlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fER9LDkwMjU4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBELF89Yig2NTg5MSkscD1iKDM3NjQwKSxOPWIoMTc1Niksdz1iKDc3OTMzKSxG''@;'; put 'put ''PWIoNjYxMyksSD1iKDU4NDEzKSxSPWIoNDY3NTgpLGo9Yig1Mjg2KSxQPWIoNzA4MzcpLEw9YigzMzgzKSxZPWIoNzkwMzkpLEI9YigxNDk4MSksVz1iKDgwOTc1KSxaPWIoNTMzNykscT1iKDQ5MTIpLFE9RnVuY3Rpb24sWD1mdW5jdGlvbih2ZSl7dHJ5e3JldHVybiBRKCcidXNlIHN0cmlj''@;'; put 'put ''dCI7IHJldHVybiAoJyt2ZSsiKS5jb25zdHJ1Y3RvcjsiKSgpfWNhdGNoe319LHRlPWIoODM3OTgpLHJlPWIoNDU3MCksb2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgUn0sZ2U9dGU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG9lfWNhdGNoe3RyeXtyZXR1cm4gdGUoYXJndW1lbnRzLCJjYWxsZWUi''@;'; put 'put ''KS5nZXR9Y2F0Y2h7cmV0dXJuIG9lfX19KCk6b2UsX2U9YigxOTkwMCkoKSxUZT1iKDkxNjI3KSxTZT1iKDI3MjAzKSx6ZT1iKDk3NjY5KSx6PWIoNzk0NzcpLGc9Yig1OTcwNSkseT17fSx4PXR5cGVvZiBVaW50OEFycmF5PiJ1Inx8IVRlP0Q6VGUoVWludDhBcnJheSksQz17X19wcm90b19f''@;'; put 'put ''Om51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj4idSI/RDpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/RDpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpf''@;'; put 'put ''ZSYmVGU/VGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTpELCIlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6RCwiJUFzeW5jRnVuY3Rpb24lIjp5LCIlQXN5bmNHZW5lcmF0b3IlIjp5LCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOnksIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBl''@;'; put 'put ''JSI6eSwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/RDpBdG9taWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/RDpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0Q6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlw''@;'; put 'put ''ZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij9EOkJpZ1VpbnQ2NEFycmF5LCIlQm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/RDpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6''@;'; put 'put ''ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJLCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpwLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpOLCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4i''@;'; put 'put ''dSI/RDpGbG9hdDE2QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij9EOkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP0Q6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmlu''@;'; put 'put ''YWxpemF0aW9uUmVnaXN0cnk+InUiP0Q6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOlEsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOnksIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9EOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4i''@;'; put 'put ''dSI/RDpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9EOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkQs''@;'; put 'put ''IiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046RCwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0Q6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/RDpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRo''@;'; put 'put ''LCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjp0ZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/RDpQcm9taXNlLCIlUHJv''@;'; put 'put ''eHklIjp0eXBlb2YgUHJveHk+InUiP0Q6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6RiwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/RDpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/RDpTZXQsIiVTZXRJdGVy''@;'; put 'put ''YXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9EOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0Q6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcs''@;'; put 'put ''IiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkQsIiVTeW1ib2wlIjpfZT9TeW1ib2w6RCwiJVN5bnRheEVycm9yJSI6SCwiJVRocm93VHlwZUVycm9yJSI6Z2UsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOlIsIiVVaW50''@;'; put 'put ''OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0Q6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9EOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0Q6VWludDE2QXJy''@;'; put 'put ''YXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/RDpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6aiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/RDpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9EOldlYWtSZWYsIiVXZWFrU2V0JSI6''@;'; put 'put ''dHlwZW9mIFdlYWtTZXQ+InUiP0Q6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6ZywiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOnosIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjpyZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOlNlLCIlTWF0aC5hYnMlIjpQLCIl''@;'; put 'put ''TWF0aC5mbG9vciUiOkwsIiVNYXRoLm1heCUiOlksIiVNYXRoLm1pbiUiOkIsIiVNYXRoLnBvdyUiOlcsIiVNYXRoLnJvdW5kJSI6WiwiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6emV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHZlKXt2YXIgVD1UZShU''@;'; put 'put ''ZSh2ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgVj1mdW5jdGlvbiB2ZShYZSl7dmFyIEJlO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09WGUpQmU9WCgiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PVhlKUJlPVgoImZ1bmN0aW9u''@;'; put 'put ''KiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSlCZT1YKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PVhlKXt2YXIgQWU9dmUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0FlJiYoQmU9QWUucHJv''@;'; put 'put ''dG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09WGUpe3ZhciBGZT12ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0ZlJiZUZSYmKEJlPVRlKEZlLnByb3RvdHlwZSkpfXJldHVybiBDW1hlXT1CZSxCZX0sVT17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3Rv''@;'; put 'put ''dHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJw''@;'; put 'put ''cm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9u''@;'; put 'put ''IiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90''@;'; put 'put ''b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFs''@;'; put 'put ''RXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblBy''@;'; put 'put ''b3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVBy''@;'; put 'put ''b3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJz''@;'; put 'put ''ZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJd''@;'; put 'put ''LCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNl''@;'; put 'put ''UHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFu''@;'; put 'put ''Z2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6''@;'; put 'put ''WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90''@;'; put 'put ''eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50''@;'; put 'put ''OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIl''@;'; put 'put ''VWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpb''@;'; put 'put ''IldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT1iKDY1OTkyKSxtPWIoNzgzNjgpLEE9RS5jYWxsKGcsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksYWU9RS5jYWxsKHosQXJyYXkucHJvdG90eXBlLnNwbGljZSksbmU9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxsZT1FLmNhbGwo''@;'; put 'put ''ZyxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSx3ZT1FLmNhbGwoZyxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLFVlPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2cs''@;'; put 'put ''UWU9L1xcKFxcKT8vZyxNZT1mdW5jdGlvbihYZSxCZSl7dmFyIEZlLEFlPVhlO2lmKG0oVSxBZSkmJihBZT0iJSIrKEZlPVVbQWVdKVswXSsiJSIpLG0oQyxBZSkpe3ZhciBSZT1DW0FlXTtpZihSZT09PXkmJihSZT1WKEFlKSksdHlwZW9mIFJlPiJ1IiYmIUJlKXRocm93IG5ldyBSKCJpbnRy''@;'; put 'put ''aW5zaWMgIitYZSsiIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpGZSxuYW1lOkFlLHZhbHVlOlJlfX10aHJvdyBuZXcgSCgiaW50cmluc2ljICIrWGUrIiBkb2VzIG5vdCBleGlzdCEiKX07Y2UuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihYZSxCZSl7aWYoInN0cmluZyIhPXR5cGVvZiBYZXx8MD09PVhlLmxlbmd0aCl0aHJvdyBuZXcgUigiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIEJlKXRocm93IG5ldyBSKCci''@;'; put 'put ''YWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT13ZSgvXiU/W14lXSolPyQvLFhlKSl0aHJvdyBuZXcgSCgiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMg''@;'; put 'put ''bmFtZSIpO3ZhciBBZT1mdW5jdGlvbihYZSl7dmFyIEJlPWxlKFhlLDAsMSksQWU9bGUoWGUsLTEpO2lmKCIlIj09PUJlJiYiJSIhPT1BZSl0aHJvdyBuZXcgSCgiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PUFlJiYiJSIhPT1CZSl0''@;'; put 'put ''aHJvdyBuZXcgSCgiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBGZT1bXTtyZXR1cm4gbmUoWGUsVWUsZnVuY3Rpb24oUmUsSWUsSGUsRGUpe0ZlW0ZlLmxlbmd0aF09SGU/bmUoRGUsUWUsIiQxIik6SWV8fFJlfSksRmV9KFhlKSxGZT1BZS5s''@;'; put 'put ''ZW5ndGg+MD9BZVswXToiIixSZT1NZSgiJSIrRmUrIiUiLEJlKSxJZT1SZS5uYW1lLEhlPVJlLnZhbHVlLERlPSExLGtlPVJlLmFsaWFzO2tlJiYoRmU9a2VbMF0sYWUoQWUsQShbMCwxXSxrZSkpKTtmb3IodmFyIF90PTEsbnQ9ITA7X3Q8QWUubGVuZ3RoO190Kz0xKXt2YXIgSmU9QWVbX3Rd''@;'; put 'put ''LGxuPWxlKEplLDAsMSkseXQ9bGUoSmUsLTEpO2lmKCgnIic9PT1sbnx8IiciPT09bG58fCJgIj09PWxufHwnIic9PT15dHx8IiciPT09eXR8fCJgIj09PXl0KSYmbG4hPT15dCl0aHJvdyBuZXcgSCgicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3Rl''@;'; put 'put ''cyIpO2lmKCgiY29uc3RydWN0b3IiPT09SmV8fCFudCkmJihEZT0hMCksbShDLEllPSIlIisoRmUrPSIuIitKZSkrIiUiKSlIZT1DW0llXTtlbHNlIGlmKG51bGwhPUhlKXtpZighKEplIGluIEhlKSl7aWYoIUJlKXRocm93IG5ldyBSKCJiYXNlIGludHJpbnNpYyBmb3IgIitYZSsiIGV4aXN0''@;'; put 'put ''cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZih0ZSYmX3QrMT49QWUubGVuZ3RoKXt2YXIgU3Q9dGUoSGUsSmUpO0hlPShudD0hIVN0KSYmImdldCJpbiBTdCYmISgib3JpZ2luYWxWYWx1ZSJpbiBTdC5nZXQpP1N0LmdldDpIZVtKZV19ZWxzZSBudD1t''@;'; put 'put ''KEhlLEplKSxIZT1IZVtKZV07bnQmJiFEZSYmKENbSWVdPUhlKX19cmV0dXJuIEhlfX0sMjcyMDM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NTg5MSk7Y2UuZXhwb3J0cz1ELmdldFByb3RvdHlwZU9mfHxudWxsfSw5NzY2OTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRz''@;'; put 'put ''PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sOTE2Mjc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NzY2OSksXz1iKDI3MjAzKSxwPWIoNjMzNjEpO2NlLmV4cG9ydHM9RD9mdW5jdGlvbih3KXtyZXR1cm4gRCh3KX06Xz9mdW5jdGlv''@;'; put 'put ''bih3KXtpZighd3x8Im9iamVjdCIhPXR5cGVvZiB3JiYiZnVuY3Rpb24iIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJnZXRQcm90bzogbm90IGFuIG9iamVjdCIpO3JldHVybiBfKHcpfTpwP2Z1bmN0aW9uKHcpe3JldHVybiBwKHcpfTpudWxsfSw1Mjc4NjpjZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtjZS5leHBvcnRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LDgzNzk4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTI3ODYpO2lmKEQpdHJ5e0QoW10sImxlbmd0aCIpfWNhdGNoe0Q9bnVsbH1jZS5leHBvcnRzPUR9LDM1ODYxOihjZSxKLGIpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBEPWIoNDU3MCksXz1mdW5jdGlvbigpe3JldHVybiEhRH07Xy5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFEKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUQoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9''@;'; put 'put ''fSxjZS5leHBvcnRzPV99LDE5OTAwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wsXz1iKDQ1MzEwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm''@;'; put 'put ''JiJzeW1ib2wiPT10eXBlb2YgRCgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNDUzMTA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBiPXt9LEQ9U3ltYm9sKCJ0ZXN0IiksXz1PYmplY3QoRCk7aWYoInN0cmluZyI9PXR5cGVvZiBEfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXykpcmV0dXJuITE7Zm9yKHZhciBOIGluIGJbRF09NDIsYilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1P''@;'; put 'put ''YmplY3Qua2V5cyhiKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGIpO2lmKDEhPT13''@;'; put 'put ''Lmxlbmd0aHx8d1swXSE9PUR8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYixEKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp''@;'; put 'put ''cHRvcihiLEQpO2lmKDQyIT09Ri52YWx1ZXx8ITAhPT1GLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw4ODc3OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ1MzEwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEQoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9''@;'; put 'put ''fSwxMzY4NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI3MDU0KS5CdWZmZXIsXz1iKDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBOKFIpe18uY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1ELmFsbG9jVW5zYWZlKFIpLHRoaXMuX2Jsb2NrU2l6ZT1SLHRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Yig3MTk5MykoTixfKSxOLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIsaixQKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLGopfWNhdGNoKFkpe0w9WX1QKEwpfSxOLnByb3RvdHlwZS5fZmx1''@;'; put 'put ''c2g9ZnVuY3Rpb24oUil7dmFyIGo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKFApe2o9UH1SKGopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsRj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlz''@;'; put 'put ''VmlldyYmKEQucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8RC5UWVBFRF9BUlJBWV9TVVBQT1JUKTtOLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUixqKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0''@;'; put 'put ''aW9uIEgoUixqKXtpZihSIGluc3RhbmNlb2YgRClyZXR1cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEQuZnJvbShSLGopO2lmKEYmJkFycmF5QnVmZmVyLmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gRC5hbGxvYygwKTt2YXIgUD1ELmZyb20oUi5idWZm''@;'; put 'put ''ZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYoUC5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBQfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxELmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5p''@;'; put 'put ''c0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihSKSlyZXR1cm4gRC5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3''@;'; put 'put ''LicpfShSLGopO2Zvcih2YXIgUD10aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBZPXRoaXMuX2Jsb2NrT2Zmc2V0O1k8dGhpcy5fYmxvY2tTaXplOylQW1krK109UltMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMu''@;'; put 'put ''X2Jsb2NrT2Zmc2V0PTB9Zm9yKDtMPFIubGVuZ3RoOylQW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTCsrXTtmb3IodmFyIEI9MCxXPTgqUi5sZW5ndGg7Vz4wOysrQil0aGlzLl9sZW5ndGhbQl0rPVcsKFc9dGhpcy5fbGVuZ3RoW0JdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtC''@;'; put 'put ''XS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgaj10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoaj1qLnRvU3RyaW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBQPTA7UDw0OysrUCl0''@;'; put 'put ''aGlzLl9sZW5ndGhbUF09MDtyZXR1cm4gan0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sY2UuZXhwb3J0cz1OfSw1MjUyOTooY2UsSixiKT0+e3ZhciBEPUo7RC51dGlscz1iKDY4MjgzKSxELmNv''@;'; put 'put ''bW1vbj1iKDEyOTAxKSxELnNoYT1iKDc4NTI4KSxELnJpcGVtZD1iKDE1MjgzKSxELmhtYWM9YigzNzE2MyksRC5zaGExPUQuc2hhLnNoYTEsRC5zaGEyNTY9RC5zaGEuc2hhMjU2LEQuc2hhMjI0PUQuc2hhLnNoYTIyNCxELnNoYTM4ND1ELnNoYS5zaGEzODQsRC5zaGE1MTI9RC5zaGEuc2hh''@;'; put 'put ''NTEyLEQucmlwZW1kMTYwPUQucmlwZW1kLnJpcGVtZDE2MH0sMTI5MDE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2ODI4MyksXz1iKDM5MjEwKTtmdW5jdGlvbiBwKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJp''@;'; put 'put ''ZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1KLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LEYpe2lmKHc9RC50b0FycmF5KHcsRiksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBl''@;'; put 'put ''bmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEg9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUgsdy5sZW5ndGgp''@;'; put 'put ''LDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9RC5qb2luMzIodywwLHcubGVuZ3RoLUgsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5sZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJu''@;'; put 'put ''IHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsRj10''@;'; put 'put ''aGlzLl9kZWx0YTgsSD1GLSh3K3RoaXMucGFkTGVuZ3RoKSVGLFI9bmV3IEFycmF5KEgrdGhpcy5wYWRMZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgaj0xO2o8SDtqKyspUltqXT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgUD04O1A8dGhpcy5wYWRMZW5ndGg7UCsr''@;'; put 'put ''KVJbaisrXT0wO1JbaisrXT0wLFJbaisrXT0wLFJbaisrXT0wLFJbaisrXT0wLFJbaisrXT13Pj4+MjQmMjU1LFJbaisrXT13Pj4+MTYmMjU1LFJbaisrXT13Pj4+OCYyNTUsUltqKytdPTI1NSZ3fWVsc2UgZm9yKFJbaisrXT0yNTUmdyxSW2orK109dz4+PjgmMjU1LFJbaisrXT13Pj4+MTYm''@;'; put 'put ''MjU1LFJbaisrXT13Pj4+MjQmMjU1LFJbaisrXT0wLFJbaisrXT0wLFJbaisrXT0wLFJbaisrXT0wLFA9ODtQPHRoaXMucGFkTGVuZ3RoO1ArKylSW2orK109MDtyZXR1cm4gUn19LDM3MTYzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjgyODMpLF89YigzOTIxMCk7ZnVuY3Rp''@;'; put 'put ''b24gcChOLHcsRil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKE4sdyxGKTt0aGlzLkhhc2g9Tix0aGlzLmJsb2NrU2l6ZT1OLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1OLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQo''@;'; put 'put ''RC50b0FycmF5KHcsRikpfWNlLmV4cG9ydHM9cCxwLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgRj13Lmxl''@;'; put 'put ''bmd0aDtGPHRoaXMuYmxvY2tTaXplO0YrKyl3LnB1c2goMCk7Zm9yKEY9MDtGPHcubGVuZ3RoO0YrKyl3W0ZdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLEY9MDtGPHcubGVuZ3RoO0YrKyl3W0ZdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCku''@;'; put 'put ''dXBkYXRlKHcpfSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxGKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxGKSx0aGlzfSxwLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0''@;'; put 'put ''ZXIuZGlnZXN0KHcpfX0sMTUyODM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2ODI4MyksXz1iKDEyOTAxKSxwPUQucm90bDMyLE49RC5zdW0zMix3PUQuc3VtMzJfMyxGPUQuc3VtMzJfNCxIPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIFIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBS''@;'; put 'put ''KSlyZXR1cm4gbmV3IFI7SC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIGoocSxRLFgsdGUpe3JldHVybiBxPD0xNT9RXlhedGU6cTw9MzE/USZYfH5R''@;'; put 'put ''JnRlOnE8PTQ3PyhRfH5YKV50ZTpxPD02Mz9RJnRlfFgmfnRlOlFeKFh8fnRlKX1mdW5jdGlvbiBMKHEpe3JldHVybiBxPD0xNT8xMzUyODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9RC5pbmhlcml0cyhSLEgpLEoucmlwZW1kMTYw''@;'; put 'put ''PVIsUi5ibG9ja1NpemU9NTEyLFIub3V0U2l6ZT0xNjAsUi5obWFjU3RyZW5ndGg9MTkyLFIucGFkTGVuZ3RoPTY0LFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUSxYKXtmb3IodmFyIHRlPXRoaXMuaFswXSxyZT10aGlzLmhbMV0sb2U9dGhpcy5oWzJdLGdlPXRoaXMuaFszXSxfZT10''@;'; put 'put ''aGlzLmhbNF0sVGU9dGUsU2U9cmUsemU9b2Usej1nZSxnPV9lLHk9MDt5PDgwO3krKyl7dmFyIHg9TihwKEYodGUsaih5LHJlLG9lLGdlKSxRW1lbeV0rWF0sKHE9eSk8PTE1PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCks''@;'; put 'put ''V1t5XSksX2UpO3RlPV9lLF9lPWdlLGdlPXAob2UsMTApLG9lPXJlLHJlPXgseD1OKHAoRihUZSxqKDc5LXksU2UsemUseiksUVtCW3ldK1hdLEwoeSkpLFpbeV0pLGcpLFRlPWcsZz16LHo9cCh6ZSwxMCksemU9U2UsU2U9eH12YXIgcTt4PXcodGhpcy5oWzFdLG9lLHopLHRoaXMuaFsxXT13''@;'; put 'put ''KHRoaXMuaFsyXSxnZSxnKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSx0ZSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLHJlLHplKSx0aGlzLmhbMF09eH0sUi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihRKXtyZXR1cm4iaGV4Ij09PVE/''@;'; put 'put ''RC50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6RC5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBZPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYs''@;'; put 'put ''MTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEs''@;'; put 'put ''MiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4''@;'; put 'put ''LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWj1bOCw5LDks''@;'; put 'put ''MTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEy''@;'; put 'put ''LDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDc4NTI4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO0ouc2hhMT1iKDMzNDY4KSxKLnNoYTIyND1iKDU1NjMpLEouc2hhMjU2PWIoMjcxMzgpLEouc2hhMzg0PWIoOTM4OTgpLEouc2hhNTEyPWIoMTA4MjcpfSwzMzQ2ODooY2UsSixiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9Yig5NTU0MiksTj1ELnJvdGwzMix3PUQuc3VtMzIsRj1ELnN1bTMyXzUsSD1wLmZ0XzEsUj1fLkJsb2NrSGFzaCxqPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBQ''@;'; put 'put ''KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBQO1IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1ELmluaGVyaXRzKFAsUiksY2UuZXhwb3J0cz1Q''@;'; put 'put ''LFAuYmxvY2tTaXplPTUxMixQLm91dFNpemU9MTYwLFAuaG1hY1N0cmVuZ3RoPTgwLFAucGFkTGVuZ3RoPTY0LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSxCKXtmb3IodmFyIFc9dGhpcy5XLFo9MDtaPDE2O1orKylXW1pdPVlbQitaXTtmb3IoO1o8Vy5sZW5ndGg7WisrKVdbWl09''@;'; put 'put ''TihXW1otM11eV1taLThdXldbWi0xNF1eV1taLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sUT10aGlzLmhbMV0sWD10aGlzLmhbMl0sdGU9dGhpcy5oWzNdLHJlPXRoaXMuaFs0XTtmb3IoWj0wO1o8Vy5sZW5ndGg7WisrKXt2YXIgb2U9fn4oWi8yMCksZ2U9RihOKHEsNSksSChvZSxRLFgsdGUp''@;'; put 'put ''LHJlLFdbWl0saltvZV0pO3JlPXRlLHRlPVgsWD1OKFEsMzApLFE9cSxxPWdlfXRoaXMuaFswXT13KHRoaXMuaFswXSxxKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sUSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFgpLHRoaXMuaFszXT13KHRoaXMuaFszXSx0ZSksdGhpcy5oWzRdPXcodGhpcy5o''@;'; put 'put ''WzRdLHJlKX0sUC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihZKXtyZXR1cm4iaGV4Ij09PVk/RC50b0hleDMyKHRoaXMuaCwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw1NTYzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjgyODMpLF89YigyNzEzOCk7ZnVu''@;'; put 'put ''Y3Rpb24gcCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1ELmluaGVyaXRz''@;'; put 'put ''KHAsXyksY2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTUxMixwLm91dFNpemU9MjI0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD02NCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9ELnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIp''@;'; put 'put ''OkQuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSwyNzEzODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9Yig5NTU0MiksTj1iKDM5MjEwKSx3PUQuc3VtMzIsRj1ELnN1bTMyXzQsSD1ELnN1bTMyXzUsUj1wLmNoMzIsaj1wLm1h''@;'; put 'put ''ajMyLFA9cC5zMF8yNTYsTD1wLnMxXzI1NixZPXAuZzBfMjU2LEI9cC5nMV8yNTYsVz1fLkJsb2NrSGFzaCxaPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMx''@;'; put 'put ''MDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIw''@;'; put 'put ''ODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcs''@;'; put 'put ''MjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3''@;'; put 'put ''Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIHEoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBxKSlyZXR1cm4gbmV3IHE7Vy5jYWxsKHRoaXMpLHRoaXMuaD1b''@;'; put 'put ''MTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1aLHRoaXMuVz1uZXcgQXJyYXkoNjQpfUQuaW5oZXJpdHMocSxXKSxjZS5leHBvcnRzPXEscS5ibG9ja1NpemU9NTEyLHEu''@;'; put 'put ''b3V0U2l6ZT0yNTYscS5obWFjU3RyZW5ndGg9MTkyLHEucGFkTGVuZ3RoPTY0LHEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCx0ZSl7Zm9yKHZhciByZT10aGlzLlcsb2U9MDtvZTwxNjtvZSsrKXJlW29lXT1YW3RlK29lXTtmb3IoO29lPHJlLmxlbmd0aDtvZSsrKXJlW29lXT1GKEIo''@;'; put 'put ''cmVbb2UtMl0pLHJlW29lLTddLFkocmVbb2UtMTVdKSxyZVtvZS0xNl0pO3ZhciBnZT10aGlzLmhbMF0sX2U9dGhpcy5oWzFdLFRlPXRoaXMuaFsyXSxTZT10aGlzLmhbM10semU9dGhpcy5oWzRdLHo9dGhpcy5oWzVdLGc9dGhpcy5oWzZdLHk9dGhpcy5oWzddO2ZvcihOKHRoaXMuay5sZW5n''@;'; put 'put ''dGg9PT1yZS5sZW5ndGgpLG9lPTA7b2U8cmUubGVuZ3RoO29lKyspe3ZhciB4PUgoeSxMKHplKSxSKHplLHosZyksdGhpcy5rW29lXSxyZVtvZV0pLEM9dyhQKGdlKSxqKGdlLF9lLFRlKSk7eT1nLGc9eix6PXplLHplPXcoU2UseCksU2U9VGUsVGU9X2UsX2U9Z2UsZ2U9dyh4LEMpfXRoaXMu''@;'; put 'put ''aFswXT13KHRoaXMuaFswXSxnZSksdGhpcy5oWzFdPXcodGhpcy5oWzFdLF9lKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sVGUpLHRoaXMuaFszXT13KHRoaXMuaFszXSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLHplKSx0aGlzLmhbNV09dyh0aGlzLmhbNV0seiksdGhpcy5oWzZdPXcodGhp''@;'; put 'put ''cy5oWzZdLGcpLHRoaXMuaFs3XT13KHRoaXMuaFs3XSx5KX0scS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihYKXtyZXR1cm4iaGV4Ij09PVg/RC50b0hleDMyKHRoaXMuaCwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw5Mzg5ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgRD1iKDY4MjgzKSxfPWIoMTA4MjcpO2Z1bmN0aW9uIHAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHA7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2''@;'; put 'put ''MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19RC5pbmhlcml0cyhwLF8pLGNlLmV4cG9ydHM9cCxwLmJsb2NrU2l6ZT0xMDI0LHAub3V0U2l6ZT0zODQs''@;'; put 'put ''cC5obWFjU3RyZW5ndGg9MTkyLHAucGFkTGVuZ3RoPTEyOCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9ELnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpELnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDEwODI3Oihj''@;'; put 'put ''ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNjgyODMpLF89YigxMjkwMSkscD1iKDM5MjEwKSxOPUQucm90cjY0X2hpLHc9RC5yb3RyNjRfbG8sRj1ELnNocjY0X2hpLEg9RC5zaHI2NF9sbyxSPUQuc3VtNjQsaj1ELnN1bTY0X2hpLFA9RC5zdW02NF9sbyxMPUQuc3VtNjRfNF9oaSxZ''@;'; put 'put ''PUQuc3VtNjRfNF9sbyxCPUQuc3VtNjRfNV9oaSxXPUQuc3VtNjRfNV9sbyxaPV8uQmxvY2tIYXNoLHE9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4''@;'; put 'put ''NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4''@;'; put 'put ''OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcw''@;'; put 'put ''MjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMz''@;'; put 'put ''Mzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkx''@;'; put 'put ''LDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcs''@;'; put 'put ''MzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4''@;'; put 'put ''NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0''@;'; put 'put ''NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEs''@;'; put 'put ''Mzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4''@;'; put 'put ''NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBRKCl7aWYoISh0aGlzIGluc3RhbmNl''@;'; put 'put ''b2YgUSkpcmV0dXJuIG5ldyBRO1ouY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1''@;'; put 'put ''MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1xLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBYKHgsQyxULFYsVSl7dmFyIEU9eCZUXn54JlU7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gdGUoeCxDLFQs''@;'; put 'put ''VixVLEUpe3ZhciBtPUMmVl5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIHJlKHgsQyxULFYsVSl7dmFyIEU9eCZUXngmVV5UJlU7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gb2UoeCxDLFQsVixVLEUpe3ZhciBtPUMmVl5DJkVeViZF''@;'; put 'put ''O3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIGdlKHgsQyl7dmFyIEU9Tih4LEMsMjgpXk4oQyx4LDIpXk4oQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3Jl''@;'; put 'put ''dHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFyIEU9Tih4LEMsMTQpXk4oeCxDLDE4KV5OKEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0''@;'; put 'put ''dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gemUoeCxDKXt2YXIgRT1OKHgsQywxKV5OKHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB6KHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleSCh4LEMsNyk7cmV0dXJuIEU8''@;'; put 'put ''MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gZyh4LEMpe3ZhciBFPU4oeCxDLDE5KV5OKEMseCwyOSleRih4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24geSh4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleSCh4LEMsNik7cmV0dXJuIEU8MCYm''@;'; put 'put ''KEUrPTQyOTQ5NjcyOTYpLEV9RC5pbmhlcml0cyhRLFopLGNlLmV4cG9ydHM9USxRLmJsb2NrU2l6ZT0xMDI0LFEub3V0U2l6ZT01MTIsUS5obWFjU3RyZW5ndGg9MTkyLFEucGFkTGVuZ3RoPTEyOCxRLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBWPXRo''@;'; put 'put ''aXMuVyxVPTA7VTwzMjtVKyspVltVXT1DW1QrVV07Zm9yKDtVPFYubGVuZ3RoO1UrPTIpe3ZhciBFPWcoVltVLTRdLFZbVS0zXSksbT15KFZbVS00XSxWW1UtM10pLEE9VltVLTE0XSxhZT1WW1UtMTNdLG5lPXplKFZbVS0zMF0sVltVLTI5XSksbGU9eihWW1UtMzBdLFZbVS0yOV0pLHdlPVZb''@;'; put 'put ''VS0zMl0sVWU9VltVLTMxXTtWW1VdPUwoRSxtLEEsYWUsbmUsbGUsd2UsVWUpLFZbVSsxXT1ZKEUsbSxBLGFlLG5lLGxlLHdlLFVlKX19LFEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQyxUKXt0aGlzLl9wcmVwYXJlQmxvY2soQyxUKTt2YXIgVj10aGlzLlcsVT10aGlzLmhbMF0sRT10''@;'; put 'put ''aGlzLmhbMV0sbT10aGlzLmhbMl0sQT10aGlzLmhbM10sYWU9dGhpcy5oWzRdLG5lPXRoaXMuaFs1XSxsZT10aGlzLmhbNl0sd2U9dGhpcy5oWzddLFVlPXRoaXMuaFs4XSxRZT10aGlzLmhbOV0sb3Q9dGhpcy5oWzEwXSxNZT10aGlzLmhbMTFdLHZlPXRoaXMuaFsxMl0sWGU9dGhpcy5oWzEz''@;'; put 'put ''XSxCZT10aGlzLmhbMTRdLEFlPXRoaXMuaFsxNV07cCh0aGlzLmsubGVuZ3RoPT09Vi5sZW5ndGgpO2Zvcih2YXIgRmU9MDtGZTxWLmxlbmd0aDtGZSs9Mil7dmFyIFJlPUJlLEllPUFlLEhlPVRlKFVlLFFlKSxEZT1TZShVZSxRZSksa2U9WChVZSwwLG90LDAsdmUpLF90PXRlKDAsUWUsMCxN''@;'; put 'put ''ZSwwLFhlKSxudD10aGlzLmtbRmVdLEplPXRoaXMua1tGZSsxXSxsbj1WW0ZlXSx5dD1WW0ZlKzFdLFN0PUIoUmUsSWUsSGUsRGUsa2UsX3QsbnQsSmUsbG4seXQpLER0PVcoUmUsSWUsSGUsRGUsa2UsX3QsbnQsSmUsbG4seXQpO1JlPWdlKFUsRSksSWU9X2UoVSxFKSxIZT1yZShVLDAsbSww''@;'; put 'put ''LGFlKSxEZT1vZSgwLEUsMCxBLDAsbmUpO3ZhciBpdD1qKFJlLEllLEhlLERlKSwkZT1QKFJlLEllLEhlLERlKTtCZT12ZSxBZT1YZSx2ZT1vdCxYZT1NZSxvdD1VZSxNZT1RZSxVZT1qKGxlLHdlLFN0LER0KSxRZT1QKHdlLHdlLFN0LER0KSxsZT1hZSx3ZT1uZSxhZT1tLG5lPUEsbT1VLEE9''@;'; put 'put ''RSxVPWooU3QsRHQsaXQsJGUpLEU9UChTdCxEdCxpdCwkZSl9Uih0aGlzLmgsMCxVLEUpLFIodGhpcy5oLDIsbSxBKSxSKHRoaXMuaCw0LGFlLG5lKSxSKHRoaXMuaCw2LGxlLHdlKSxSKHRoaXMuaCw4LFVlLFFlKSxSKHRoaXMuaCwxMCxvdCxNZSksUih0aGlzLmgsMTIsdmUsWGUpLFIodGhp''@;'; put 'put ''cy5oLDE0LEJlLEFlKX0sUS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1cm4iaGV4Ij09PUM/RC50b0hleDMyKHRoaXMuaCwiYmlnIik6RC5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw5NTU0MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDY4MjgzKS5yb3RyMzI7''@;'; put 'put ''ZnVuY3Rpb24gTihMLFksQil7cmV0dXJuIEwmWV5+TCZCfWZ1bmN0aW9uIHcoTCxZLEIpe3JldHVybiBMJlleTCZCXlkmQn1mdW5jdGlvbiBGKEwsWSxCKXtyZXR1cm4gTF5ZXkJ9Si5mdF8xPWZ1bmN0aW9uIHAoTCxZLEIsVyl7cmV0dXJuIDA9PT1MP04oWSxCLFcpOjE9PT1MfHwzPT09TD9G''@;'; put 'put ''KFksQixXKToyPT09TD93KFksQixXKTp2b2lkIDB9LEouY2gzMj1OLEoubWFqMzI9dyxKLnAzMj1GLEouczBfMjU2PWZ1bmN0aW9uIEgoTCl7cmV0dXJuIF8oTCwyKV5fKEwsMTMpXl8oTCwyMil9LEouczFfMjU2PWZ1bmN0aW9uIFIoTCl7cmV0dXJuIF8oTCw2KV5fKEwsMTEpXl8oTCwyNSl9''@;'; put 'put ''LEouZzBfMjU2PWZ1bmN0aW9uIGooTCl7cmV0dXJuIF8oTCw3KV5fKEwsMTgpXkw+Pj4zfSxKLmcxXzI1Nj1mdW5jdGlvbiBQKEwpe3JldHVybiBfKEwsMTcpXl8oTCwxOSleTD4+PjEwfX0sNjgyODM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzOTIxMCksXz1iKDcxOTkzKTtm''@;'; put 'put ''dW5jdGlvbiBwKHkseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJnkuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj15Lmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgrMSkpfWZ1bmN0aW9uIEYoeSl7cmV0dXJuKHk+Pj4yNHx5Pj4+OCY2NTI4MHx5PDw4JjE2NzExNjgwfCgy''@;'; put 'put ''NTUmeSk8PDI0KT4+PjB9ZnVuY3Rpb24gUih5KXtyZXR1cm4gMT09PXkubGVuZ3RoPyIwIit5Onl9ZnVuY3Rpb24gaih5KXtyZXR1cm4gNz09PXkubGVuZ3RoPyIwIit5OjY9PT15Lmxlbmd0aD8iMDAiK3k6NT09PXkubGVuZ3RoPyIwMDAiK3k6ND09PXkubGVuZ3RoPyIwMDAwIit5OjM9PT15''@;'; put 'put ''Lmxlbmd0aD8iMDAwMDAiK3k6Mj09PXkubGVuZ3RoPyIwMDAwMDAiK3k6MT09PXkubGVuZ3RoPyIwMDAwMDAwIit5Onl9Si5pbmhlcml0cz1fLEoudG9BcnJheT1mdW5jdGlvbiBOKHkseCl7aWYoQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4geS5zbGljZSgpO2lmKCF5KXJldHVybltdO3ZhciBD''@;'; put 'put ''PVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlpZih4KXtpZigiaGV4Ij09PXgpZm9yKCh5PXkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoeT0iMCIreSksVj0wO1Y8eS5sZW5ndGg7Vis9MilDLnB1c2gocGFyc2VJbnQoeVtWXSt5W1YrMV0sMTYpKX1lbHNlIGZv''@;'; put 'put ''cih2YXIgVD0wLFY9MDtWPHkubGVuZ3RoO1YrKyl7dmFyIFU9eS5jaGFyQ29kZUF0KFYpO1U8MTI4P0NbVCsrXT1VOlU8MjA0OD8oQ1tUKytdPVU+PjZ8MTkyLENbVCsrXT02MyZVfDEyOCk6cCh5LFYpPyhVPTY1NTM2KygoMTAyMyZVKTw8MTApKygxMDIzJnkuY2hhckNvZGVBdCgrK1YpKSxD''@;'; put 'put ''W1QrK109VT4+MTh8MjQwLENbVCsrXT1VPj4xMiY2M3wxMjgsQ1tUKytdPVU+PjYmNjN8MTI4LENbVCsrXT02MyZVfDEyOCk6KENbVCsrXT1VPj4xMnwyMjQsQ1tUKytdPVU+PjYmNjN8MTI4LENbVCsrXT02MyZVfDEyOCl9ZWxzZSBmb3IoVj0wO1Y8eS5sZW5ndGg7VisrKUNbVl09MHx5W1Zd''@;'; put 'put ''O3JldHVybiBDfSxKLnRvSGV4PWZ1bmN0aW9uIHcoeSl7Zm9yKHZhciB4PSIiLEM9MDtDPHkubGVuZ3RoO0MrKyl4Kz1SKHlbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sSi5odG9ubD1GLEoudG9IZXgzMj1mdW5jdGlvbiBIKHkseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPHkubGVuZ3RoO1Qr''@;'; put 'put ''Kyl7dmFyIFY9eVtUXTsibGl0dGxlIj09PXgmJihWPUYoVikpLEMrPWooVi50b1N0cmluZygxNikpfXJldHVybiBDfSxKLnplcm8yPVIsSi56ZXJvOD1qLEouam9pbjMyPWZ1bmN0aW9uIFAoeSx4LEMsVCl7dmFyIFY9Qy14O0QoViU0PT0wKTtmb3IodmFyIFU9bmV3IEFycmF5KFYvNCksRT0w''@;'; put 'put ''LG09eDtFPFUubGVuZ3RoO0UrKyxtKz00KVVbRV09KCJiaWciPT09VD95W21dPDwyNHx5W20rMV08PDE2fHlbbSsyXTw8OHx5W20rM106eVttKzNdPDwyNHx5W20rMl08PDE2fHlbbSsxXTw8OHx5W21dKT4+PjA7cmV0dXJuIFV9LEouc3BsaXQzMj1mdW5jdGlvbiBMKHkseCl7Zm9yKHZhciBD''@;'; put 'put ''PW5ldyBBcnJheSg0KnkubGVuZ3RoKSxUPTAsVj0wO1Q8eS5sZW5ndGg7VCsrLFYrPTQpe3ZhciBVPXlbVF07ImJpZyI9PT14PyhDW1ZdPVU+Pj4yNCxDW1YrMV09VT4+PjE2JjI1NSxDW1YrMl09VT4+PjgmMjU1LENbViszXT0yNTUmVSk6KENbViszXT1VPj4+MjQsQ1tWKzJdPVU+Pj4xNiYy''@;'; put 'put ''NTUsQ1tWKzFdPVU+Pj44JjI1NSxDW1ZdPTI1NSZVKX1yZXR1cm4gQ30sSi5yb3RyMzI9ZnVuY3Rpb24gWSh5LHgpe3JldHVybiB5Pj4+eHx5PDwzMi14fSxKLnJvdGwzMj1mdW5jdGlvbiBCKHkseCl7cmV0dXJuIHk8PHh8eT4+PjMyLXh9LEouc3VtMzI9ZnVuY3Rpb24gVyh5LHgpe3JldHVy''@;'; put 'put ''biB5K3g+Pj4wfSxKLnN1bTMyXzM9ZnVuY3Rpb24gWih5LHgsQyl7cmV0dXJuIHkreCtDPj4+MH0sSi5zdW0zMl80PWZ1bmN0aW9uIHEoeSx4LEMsVCl7cmV0dXJuIHkreCtDK1Q+Pj4wfSxKLnN1bTMyXzU9ZnVuY3Rpb24gUSh5LHgsQyxULFYpe3JldHVybiB5K3grQytUK1Y+Pj4wfSxKLnN1''@;'; put 'put ''bTY0PWZ1bmN0aW9uIFgoeSx4LEMsVCl7dmFyIEU9VCt5W3grMV0+Pj4wO3lbeF09KEU8VD8xOjApK0MreVt4XT4+PjAseVt4KzFdPUV9LEouc3VtNjRfaGk9ZnVuY3Rpb24gdGUoeSx4LEMsVCl7cmV0dXJuKHgrVD4+PjA8eD8xOjApK3krQz4+PjB9LEouc3VtNjRfbG89ZnVuY3Rpb24gcmUo''@;'; put 'put ''eSx4LEMsVCl7cmV0dXJuIHgrVD4+PjB9LEouc3VtNjRfNF9oaT1mdW5jdGlvbiBvZSh5LHgsQyxULFYsVSxFLG0pe3ZhciBBPTAsYWU9eDtyZXR1cm4gQSs9KGFlPWFlK1Q+Pj4wKTx4PzE6MCxBKz0oYWU9YWUrVT4+PjApPFU/MTowLHkrQytWK0UrKEErPShhZT1hZSttPj4+MCk8bT8xOjAp''@;'; put 'put ''Pj4+MH0sSi5zdW02NF80X2xvPWZ1bmN0aW9uIGdlKHkseCxDLFQsVixVLEUsbSl7cmV0dXJuIHgrVCtVK20+Pj4wfSxKLnN1bTY0XzVfaGk9ZnVuY3Rpb24gX2UoeSx4LEMsVCxWLFUsRSxtLEEsYWUpe3ZhciBuZT0wLGxlPXg7cmV0dXJuIG5lKz0obGU9bGUrVD4+PjApPHg/MTowLG5lKz0o''@;'; put 'put ''bGU9bGUrVT4+PjApPFU/MTowLG5lKz0obGU9bGUrbT4+PjApPG0/MTowLHkrQytWK0UrQSsobmUrPShsZT1sZSthZT4+PjApPGFlPzE6MCk+Pj4wfSxKLnN1bTY0XzVfbG89ZnVuY3Rpb24gVGUoeSx4LEMsVCxWLFUsRSxtLEEsYWUpe3JldHVybiB4K1QrVSttK2FlPj4+MH0sSi5yb3RyNjRf''@;'; put 'put ''aGk9ZnVuY3Rpb24gU2UoeSx4LEMpe3JldHVybih4PDwzMi1DfHk+Pj5DKT4+PjB9LEoucm90cjY0X2xvPWZ1bmN0aW9uIHplKHkseCxDKXtyZXR1cm4oeTw8MzItQ3x4Pj4+Qyk+Pj4wfSxKLnNocjY0X2hpPWZ1bmN0aW9uIHooeSx4LEMpe3JldHVybiB5Pj4+Q30sSi5zaHI2NF9sbz1mdW5j''@;'; put 'put ''dGlvbiBnKHkseCxDKXtyZXR1cm4oeTw8MzItQ3x4Pj4+Qyk+Pj4wfX0sNzgzNjg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9Yig2NTk5Mik7Y2UuZXhwb3J0cz1wLmNhbGwo''@;'; put 'put ''RCxfKX0sMzM1NTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1MjUyOSksXz1iKDIxODMyKSxwPWIoMzkyMTApO2Z1bmN0aW9uIE4odyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5w''@;'; put 'put ''cmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBG''@;'; put 'put ''PV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksSD1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksUj1fLnRvQXJyYXkody5wZXJzLHcucGVyc0VuY3x8ImhleCIpO3AoRi5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJv''@;'; put 'put ''cHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoRixILFIpfWNlLmV4cG9ydHM9TixOLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihGLEgsUil7dmFyIGo9Ri5jb25jYXQoSCkuY29uY2F0KFIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4v''@;'; put 'put ''OCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIFA9MDtQPHRoaXMuVi5sZW5ndGg7UCsrKXRoaXMuS1tQXT0wLHRoaXMuVltQXT0xO3RoaXMuX3VwZGF0ZShqKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sTi5wcm90''@;'; put 'put ''b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEQuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt2YXIgSD10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7RiYmKEg9SC51cGRhdGUoRikpLHRoaXMuSz1I''@;'; put 'put ''LmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksRiYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKEYpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0''@;'; put 'put ''KCkpfSxOLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oRixILFIsail7InN0cmluZyIhPXR5cGVvZiBIJiYoaj1SLFI9SCxIPW51bGwpLEY9Xy50b0FycmF5KEYsSCksUj1fLnRvQXJyYXkoUixqKSxwKEYubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBN''@;'; put 'put ''aW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoRi5jb25jYXQoUnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sTi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oRixILFIsail7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEgmJihqPVIsUj1ILEg9bnVsbCksUiYmKFI9Xy50b0FycmF5KFIsanx8ImhleCIpLHRoaXMuX3VwZGF0ZShSKSk7Zm9yKHZhciBQPVtdO1AubGVuZ3RoPEY7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRl''@;'; put 'put ''KHRoaXMuVikuZGlnZXN0KCksUD1QLmNvbmNhdCh0aGlzLlYpO3ZhciBMPVAuc2xpY2UoMCxGKTtyZXR1cm4gdGhpcy5fdXBkYXRlKFIpLHRoaXMuX3Jlc2VlZCsrLF8uZW5jb2RlKEwsSCl9fSw5MzY5NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDkzODA3KS5CdWZmZXI7Si5f''@;'; put 'put ''ZGJjcz1qO2Zvcih2YXIgXz0tMSxwPS0yLE49LTEwLHc9LTFlMyxGPW5ldyBBcnJheSgyNTYpLFI9MDtSPDI1NjtSKyspRltSXT1fO2Z1bmN0aW9uIGooQixXKXtpZih0aGlzLmVuY29kaW5nTmFtZT1CLmVuY29kaW5nTmFtZSwhQil0aHJvdyBuZXcgRXJyb3IoIkRCQ1MgY29kZWMgaXMgY2Fs''@;'; put 'put ''bGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIUIudGFibGUpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit0aGlzLmVuY29kaW5nTmFtZSsiJyBoYXMgbm8gZGF0YS4iKTt2YXIgWj1CLnRhYmxlKCk7dGhpcy5kZWNvZGVUYWJsZXM9W10sdGhpcy5kZWNvZGVUYWJsZXNbMF09Ri5zbGlj''@;'; put 'put ''ZSgwKSx0aGlzLmRlY29kZVRhYmxlU2VxPVtdO2Zvcih2YXIgcT0wO3E8Wi5sZW5ndGg7cSsrKXRoaXMuX2FkZERlY29kZUNodW5rKFpbcV0pO3RoaXMuZGVmYXVsdENoYXJVbmljb2RlPVcuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZW5jb2RlVGFibGU9W10sdGhpcy5lbmNvZGVUYWJsZVNl''@;'; put 'put ''cT1bXTt2YXIgUT17fTtpZihCLmVuY29kZVNraXBWYWxzKWZvcihxPTA7cTxCLmVuY29kZVNraXBWYWxzLmxlbmd0aDtxKyspe3ZhciBYPUIuZW5jb2RlU2tpcFZhbHNbcV07aWYoIm51bWJlciI9PXR5cGVvZiBYKVFbWF09ITA7ZWxzZSBmb3IodmFyIHRlPVguZnJvbTt0ZTw9WC50bzt0ZSsr''@;'; put 'put ''KVFbdGVdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsUSksQi5lbmNvZGVBZGQpZm9yKHZhciByZSBpbiBCLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQi5lbmNvZGVBZGQscmUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKHJlLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCksQi5lbmNvZGVBZGRbcmVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1cuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhp''@;'; put 'put ''cy5kZWZDaGFyU0I9PT1fJiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBCLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1CLmdiMTgwMzAoKTt2YXIgb2U9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLGdlPXRoaXMuZGVjb2RlVGFibGVzW29lXT1GLnNsaWNlKDApLF9lPXRo''@;'; put 'put ''aXMuZGVjb2RlVGFibGVzLmxlbmd0aCxUZT10aGlzLmRlY29kZVRhYmxlc1tfZV09Ri5zbGljZSgwKTtmb3IocT0xMjk7cTw9MjU0O3ErKyl7dmFyIHplPXRoaXMuZGVjb2RlVGFibGVzW3ctdGhpcy5kZWNvZGVUYWJsZXNbMF1bcV1dO2Zvcih0ZT00ODt0ZTw9NTc7dGUrKyl6ZVt0ZV09dy1v''@;'; put 'put ''ZX1mb3IocT0xMjk7cTw9MjU0O3ErKylnZVtxXT13LV9lO2ZvcihxPTQ4O3E8PTU3O3ErKylUZVtxXT1wfX1mdW5jdGlvbiBQKEIsVyl7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29kZVRhYmxlPVcuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJs''@;'; put 'put ''ZVNlcT1XLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVcuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1XLmdiMTgwMzB9ZnVuY3Rpb24gTChCLFcpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1ELmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVcuZGVjb2Rl''@;'; put 'put ''VGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vy5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1XLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vy5nYjE4MDMwfWZ1bmN0aW9uIFkoQixXKXtpZihCWzBdPlcpcmV0dXJuLTE7Zm9yKHZhciBaPTAscT1CLmxl''@;'; put 'put ''bmd0aDtaPHEtMTspe3ZhciBRPVorTWF0aC5mbG9vcigocS1aKzEpLzIpO0JbUV08PVc/Wj1ROnE9UX1yZXR1cm4gWn1qLnByb3RvdHlwZS5lbmNvZGVyPVAsai5wcm90b3R5cGUuZGVjb2Rlcj1MLGoucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZT1mdW5jdGlvbihCKXtmb3IodmFyIFc9''@;'; put 'put ''W107Qj4wO0I+Pj04KVcucHVzaCgyNTUmQik7MD09Vy5sZW5ndGgmJlcucHVzaCgwKTtmb3IodmFyIFo9dGhpcy5kZWNvZGVUYWJsZXNbMF0scT1XLmxlbmd0aC0xO3E+MDtxLS0pe3ZhciBRPVpbV1txXV07aWYoUT09XylaW1dbcV1dPXctdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMu''@;'; put 'put ''ZGVjb2RlVGFibGVzLnB1c2goWj1GLnNsaWNlKDApKTtlbHNle2lmKCEoUTw9dykpdGhyb3cgbmV3IEVycm9yKCJPdmVyd3JpdGUgYnl0ZSBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIsIGFkZHI6ICIrQi50b1N0cmluZygxNikpO1o9dGhpcy5kZWNvZGVUYWJsZXNbdy1RXX19cmV0dXJuIFp9''@;'; put 'put ''LGoucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihCKXt2YXIgVz1wYXJzZUludChCWzBdLDE2KSxaPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFcpO1cmPTI1NTtmb3IodmFyIHE9MTtxPEIubGVuZ3RoO3ErKyl7dmFyIFE9QltxXTtpZigic3RyaW5nIj09dHlwZW9mIFEpZm9y''@;'; put 'put ''KHZhciBYPTA7WDxRLmxlbmd0aDspe3ZhciB0ZT1RLmNoYXJDb2RlQXQoWCsrKTtpZig1NTI5Njw9dGUmJnRlPDU2MzIwKXt2YXIgcmU9US5jaGFyQ29kZUF0KFgrKyk7aWYoISg1NjMyMDw9cmUmJnJlPDU3MzQ0KSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBp''@;'; put 'put ''biAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitCWzBdKTtaW1crK109NjU1MzYrMTAyNCoodGUtNTUyOTYpKyhyZS01NjMyMCl9ZWxzZSBpZig0MDgwPHRlJiZ0ZTw9NDA5NSl7Zm9yKHZhciBvZT00MDk1LXRlKzIsZ2U9W10sX2U9MDtfZTxvZTtfZSsrKWdlLnB1c2goUS5jaGFy''@;'; put 'put ''Q29kZUF0KFgrKykpO1pbVysrXT1OLXRoaXMuZGVjb2RlVGFibGVTZXEubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChnZSl9ZWxzZSBaW1crK109dGV9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFEpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgUSsi''@;'; put 'put ''JyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitCWzBdKTt2YXIgVGU9WltXLTFdKzE7Zm9yKFg9MDtYPFE7WCsrKVpbVysrXT1UZSsrfX1pZihXPjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQg''@;'; put 'put ''YWRkciAiK0JbMF0rIjogdG9vIGxvbmciK1cpfSxqLnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKEIpe3ZhciBXPUI+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbV10mJih0aGlzLmVuY29kZVRhYmxlW1ddPUYuc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFi''@;'; put 'put ''bGVbV119LGoucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKEIsVyl7dmFyIFo9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KEIpLHE9MjU1JkI7WltxXTw9Tj90aGlzLmVuY29kZVRhYmxlU2VxW04tWltxXV1bLTFdPVc6WltxXT09XyYmKFpbcV09Vyl9LGoucHJvdG90eXBlLl9zZXRF''@;'; put 'put ''bmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihCLFcpe3ZhciBYLFo9QlswXSxxPXRoaXMuX2dldEVuY29kZUJ1Y2tldChaKSxRPTI1NSZaO3FbUV08PU4/WD10aGlzLmVuY29kZVRhYmxlU2VxW04tcVtRXV06KFg9e30scVtRXSE9PV8mJihYWy0xXT1xW1FdKSxxW1FdPU4tdGhpcy5lbmNvZGVUYWJs''@;'; put 'put ''ZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKFgpKTtmb3IodmFyIHRlPTE7dGU8Qi5sZW5ndGgtMTt0ZSsrKXt2YXIgcmU9WFtaXTsib2JqZWN0Ij09dHlwZW9mIHJlP1g9cmU6KFg9WFtaXT17fSx2b2lkIDAhPT1yZSYmKFhbLTFdPXJlKSl9WFtaPUJbQi5sZW5ndGgtMV1d''@;'; put 'put ''PVd9LGoucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGU9ZnVuY3Rpb24oQixXLFope2Zvcih2YXIgcT10aGlzLmRlY29kZVRhYmxlc1tCXSxRPTA7UTwyNTY7USsrKXt2YXIgWD1xW1FdLHRlPVcrUTtaW3RlXXx8KFg+PTA/dGhpcy5fc2V0RW5jb2RlQ2hhcihYLHRlKTpYPD13P3RoaXMuX2Zp''@;'; put 'put ''bGxFbmNvZGVUYWJsZSh3LVgsdGU8PDgsWik6WDw9TiYmdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtOLVhdLHRlKSl9fSxQLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihCKXtmb3IodmFyIFc9RC5hbGxvYyhCLmxlbmd0aCoodGhpcy5nYjE4MDMwPzQ6Mykp''@;'; put 'put ''LFo9dGhpcy5sZWFkU3Vycm9nYXRlLHE9dGhpcy5zZXFPYmosUT0tMSxYPTAsdGU9MDs7KXtpZigtMT09PVEpe2lmKFg9PUIubGVuZ3RoKWJyZWFrO3ZhciByZT1CLmNoYXJDb2RlQXQoWCsrKX1lbHNlIHJlPVEsUT0tMTtpZig1NTI5Njw9cmUmJnJlPDU3MzQ0KWlmKHJlPDU2MzIwKXtpZigt''@;'; put 'put ''MT09PVope1o9cmU7Y29udGludWV9Wj1yZSxyZT1ffWVsc2UtMSE9PVo/KHJlPTY1NTM2KzEwMjQqKFotNTUyOTYpKyhyZS01NjMyMCksWj0tMSk6cmU9XztlbHNlLTEhPT1aJiYoUT1yZSxyZT1fLFo9LTEpO3ZhciBvZT1fO2lmKHZvaWQgMCE9PXEmJnJlIT1fKXt2YXIgZ2U9cVtyZV07aWYo''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBnZSl7cT1nZTtjb250aW51ZX0ibnVtYmVyIj09dHlwZW9mIGdlP29lPWdlOm51bGw9PWdlJiZ2b2lkIDAhPT0oZ2U9cVstMV0pJiYob2U9Z2UsUT1yZSkscT12b2lkIDB9ZWxzZSBpZihyZT49MCl7dmFyIF9lPXRoaXMuZW5jb2RlVGFibGVbcmU+PjhdO2lmKHZv''@;'; put 'put ''aWQgMCE9PV9lJiYob2U9X2VbMjU1JnJlXSksb2U8PU4pe3E9dGhpcy5lbmNvZGVUYWJsZVNlcVtOLW9lXTtjb250aW51ZX1pZihvZT09XyYmdGhpcy5nYjE4MDMwKXt2YXIgVGU9WSh0aGlzLmdiMTgwMzAudUNoYXJzLHJlKTtpZigtMSE9VGUpe29lPXRoaXMuZ2IxODAzMC5nYkNoYXJzW1Rl''@;'; put 'put ''XSsocmUtdGhpcy5nYjE4MDMwLnVDaGFyc1tUZV0pLFdbdGUrK109MTI5K01hdGguZmxvb3Iob2UvMTI2MDApLG9lJT0xMjYwMCxXW3RlKytdPTQ4K01hdGguZmxvb3Iob2UvMTI2MCksb2UlPTEyNjAsV1t0ZSsrXT0xMjkrTWF0aC5mbG9vcihvZS8xMCksV1t0ZSsrXT00OCsob2UlPTEwKTtj''@;'; put 'put ''b250aW51ZX19fW9lPT09XyYmKG9lPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSxvZTwyNTY/V1t0ZSsrXT1vZTpvZTw2NTUzNj8oV1t0ZSsrXT1vZT4+OCxXW3RlKytdPTI1NSZvZSk6KFdbdGUrK109b2U+PjE2LFdbdGUrK109b2U+PjgmMjU1LFdbdGUrK109MjU1Jm9lKX1yZXR1cm4g''@;'; put 'put ''dGhpcy5zZXFPYmo9cSx0aGlzLmxlYWRTdXJyb2dhdGU9WixXLnNsaWNlKDAsdGUpfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZigtMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZXx8dm9pZCAwIT09dGhpcy5zZXFPYmope3ZhciBCPUQuYWxsb2MoMTApLFc9MDtpZih0aGlzLnNlcU9iail7''@;'; put 'put ''dmFyIFo9dGhpcy5zZXFPYmpbLTFdO3ZvaWQgMCE9PVomJihaPDI1Nj9CW1crK109WjooQltXKytdPVo+PjgsQltXKytdPTI1NSZaKSksdGhpcy5zZXFPYmo9dm9pZCAwfXJldHVybi0xIT09dGhpcy5sZWFkU3Vycm9nYXRlJiYoQltXKytdPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlLHRo''@;'; put 'put ''aXMubGVhZFN1cnJvZ2F0ZT0tMSksQi5zbGljZSgwLFcpfX0sUC5wcm90b3R5cGUuZmluZElkeD1ZLEwucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEIpe3ZhciBXPUQuYWxsb2MoMipCLmxlbmd0aCksWj10aGlzLm5vZGVJZHgscT10aGlzLnByZXZCdWYsUT10aGlzLnByZXZCdWYubGVuZ3Ro''@;'; put 'put ''LFg9LXRoaXMucHJldkJ1Zi5sZW5ndGg7UT4wJiYocT1ELmNvbmNhdChbcSxCLnNsaWNlKDAsMTApXSkpO2Zvcih2YXIgcmU9MCxvZT0wO3JlPEIubGVuZ3RoO3JlKyspe3ZhciB0ZSxnZT1yZT49MD9CW3JlXTpxW3JlK1FdO2lmKCEoKHRlPXRoaXMuZGVjb2RlVGFibGVzW1pdW2dlXSk+PTAp''@;'; put 'put ''KWlmKHRlPT09XylyZT1YLHRlPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7ZWxzZSBpZih0ZT09PXApe3ZhciBfZT1YPj0wP0Iuc2xpY2UoWCxyZSsxKTpxLnNsaWNlKFgrUSxyZSsxK1EpLFRlPTEyNjAwKihfZVswXS0xMjkpKzEyNjAqKF9lWzFdLTQ4KSsxMCooX2Vb''@;'; put 'put ''Ml0tMTI5KSsoX2VbM10tNDgpLFNlPVkodGhpcy5nYjE4MDMwLmdiQ2hhcnMsVGUpO3RlPXRoaXMuZ2IxODAzMC51Q2hhcnNbU2VdK1RlLXRoaXMuZ2IxODAzMC5nYkNoYXJzW1NlXX1lbHNle2lmKHRlPD13KXtaPXctdGU7Y29udGludWV9aWYoISh0ZTw9TikpdGhyb3cgbmV3IEVycm9yKCJp''@;'; put 'put ''Y29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrdGUrIiBhdCAiK1orIi8iK2dlKTtmb3IodmFyIHplPXRoaXMuZGVjb2RlVGFibGVTZXFbTi10ZV0sej0wO3o8emUubGVuZ3RoLTE7eisrKVdbb2UrK109MjU1Jih0ZT16ZVt6XSksV1tvZSsr''@;'; put 'put ''XT10ZT4+ODt0ZT16ZVt6ZS5sZW5ndGgtMV19aWYodGU+NjU1MzUpe3RlLT02NTUzNjt2YXIgZz01NTI5NitNYXRoLmZsb29yKHRlLzEwMjQpO1dbb2UrK109MjU1JmcsV1tvZSsrXT1nPj44LHRlPTU2MzIwK3RlJTEwMjR9V1tvZSsrXT0yNTUmdGUsV1tvZSsrXT10ZT4+OCxaPTAsWD1yZSsx''@;'; put 'put ''fXJldHVybiB0aGlzLm5vZGVJZHg9Wix0aGlzLnByZXZCdWY9WD49MD9CLnNsaWNlKFgpOnEuc2xpY2UoWCtRKSxXLnNsaWNlKDAsb2UpLnRvU3RyaW5nKCJ1Y3MyIil9LEwucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2Zvcih2YXIgQj0iIjt0aGlzLnByZXZCdWYubGVuZ3RoPjA7KXtCKz10''@;'; put 'put ''aGlzLmRlZmF1bHRDaGFyVW5pY29kZTt2YXIgVz10aGlzLnByZXZCdWYuc2xpY2UoMSk7dGhpcy5wcmV2QnVmPUQuYWxsb2MoMCksdGhpcy5ub2RlSWR4PTAsVy5sZW5ndGg+MCYmKEIrPXRoaXMud3JpdGUoVykpfXJldHVybiB0aGlzLm5vZGVJZHg9MCxCfX0sNDUyNzg6KGNlLEosYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBiKDQwNjc5KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFsczpbe2Zyb206NjA3MzYsdG86NjM4MDh9XX0sY3NzaGlmdGpp''@;'; put 'put ''czoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1zMzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5MzI6InNoaWZ0amlzIiw5MzI6InNoaWZ0amlzIixjcDkzMjoi''@;'; put 'put ''c2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig1NjQwNil9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkzNiIsZ2IyMzEyMTk4MDoiY3A5MzYiLGNzZ2IyMzEyOiJjcDkz''@;'; put 'put ''NiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIoNzQ0ODgpfX0sZ2JrOnt0eXBlOiJfZGJjcyIsdGFibGU6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29uY2F0KGIoNTU5MTQpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixnYjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29uY2F0KGIoNTU5MTQpKX0sZ2IxODAzMDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBiKDk5MTI5KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNwOTQ5Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gYigyMTE2Nil9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNvaXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDExOTg5OiJjcDk0OSIsa3NjNTYwMToiY3A5NDkiLHdpbmRvd3M5''@;'; put 'put ''NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3MjMyNCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIoNzIzMjQp''@;'; put 'put ''LmNvbmNhdChiKDQzMjY3KSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJpZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNzI4OTM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Zm9yKHZhciBEPVtiKDE1MjU5KSxiKDM1MDg5KSxiKDcx''@;'; put 'put ''NzUpLGIoOTc0NyksYig1ODY3NyksYig3NjIzKSxiKDMwMTg3KSxiKDkzNjk0KSxiKDQ1Mjc4KV0sXz0wO188RC5sZW5ndGg7XysrKXt2YXIgcD1EW19dO2Zvcih2YXIgTiBpbiBwKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLE4pJiYoSltOXT1wW05dKX19LDE1MjU5''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKGosUCl7dGhpcy5lbmM9ai5lbmNvZGluZ05hbWUsdGhpcy5ib21Bd2FyZT1qLmJvbUF3YXJlLCJiYXNlNjQiPT09dGhpcy5lbmM/dGhpcy5lbmNvZGVyPUY6ImNlc3U4Ij09PXRoaXMuZW5j''@;'; put 'put ''JiYodGhpcy5lbmM9InV0ZjgiLHRoaXMuZW5jb2Rlcj1ILCJcdXsxZjRhOX0iIT09RC5mcm9tKCJlZGEwYmRlZGIyYTkiLCJoZXgiKS50b1N0cmluZygpJiYodGhpcy5kZWNvZGVyPVIsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9UC5kZWZhdWx0Q2hhclVuaWNvZGUpKX1jZS5leHBvcnRzPXt1''@;'; put 'put ''dGY4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSxjZXN1ODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdW5pY29kZTExdXRmODoidXRmOCIsdWNzMjp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdXRmMTZsZToidWNzMiIsYmluYXJ5Ont0eXBlOiJfaW50ZXJu''@;'; put 'put ''YWwifSxiYXNlNjQ6e3R5cGU6Il9pbnRlcm5hbCJ9LGhleDp7dHlwZToiX2ludGVybmFsIn0sX2ludGVybmFsOl99LF8ucHJvdG90eXBlLmVuY29kZXI9dyxfLnByb3RvdHlwZS5kZWNvZGVyPU47dmFyIHA9Yig3ODQ1NCkuSTtmdW5jdGlvbiBOKGosUCl7cC5jYWxsKHRoaXMsUC5lbmMpfWZ1''@;'; put 'put ''bmN0aW9uIHcoaixQKXt0aGlzLmVuYz1QLmVuY31mdW5jdGlvbiBGKGosUCl7dGhpcy5wcmV2U3RyPSIifWZ1bmN0aW9uIEgoaixQKXt9ZnVuY3Rpb24gUihqLFApe3RoaXMuYWNjPTAsdGhpcy5jb250Qnl0ZXM9MCx0aGlzLmFjY0J5dGVzPTAsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9UC5k''@;'; put 'put ''ZWZhdWx0Q2hhclVuaWNvZGV9cC5wcm90b3R5cGUuZW5kfHwocC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSksTi5wcm90b3R5cGU9cC5wcm90b3R5cGUsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7cmV0dXJuIEQuZnJvbShqLHRoaXMuZW5jKX0sdy5wcm90b3R5cGUuZW5kPWZ1''@;'; put 'put ''bmN0aW9uKCl7fSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXt2YXIgUD0oaj10aGlzLnByZXZTdHIraikubGVuZ3RoLWoubGVuZ3RoJTQ7cmV0dXJuIHRoaXMucHJldlN0cj1qLnNsaWNlKFApLGo9ai5zbGljZSgwLFApLEQuZnJvbShqLCJiYXNlNjQiKX0sRi5wcm90b3R5cGUuZW5k''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIEQuZnJvbSh0aGlzLnByZXZTdHIsImJhc2U2NCIpfSxILnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXtmb3IodmFyIFA9RC5hbGxvYygzKmoubGVuZ3RoKSxMPTAsWT0wO1k8ai5sZW5ndGg7WSsrKXt2YXIgQj1qLmNoYXJDb2RlQXQoWSk7QjwxMjg/UFtM''@;'; put 'put ''KytdPUI6QjwyMDQ4PyhQW0wrK109MTkyKyhCPj4+NiksUFtMKytdPTEyOCsoNjMmQikpOihQW0wrK109MjI0KyhCPj4+MTIpLFBbTCsrXT0xMjgrKEI+Pj42JjYzKSxQW0wrK109MTI4Kyg2MyZCKSl9cmV0dXJuIFAuc2xpY2UoMCxMKX0sSC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxS''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXtmb3IodmFyIFA9dGhpcy5hY2MsTD10aGlzLmNvbnRCeXRlcyxZPXRoaXMuYWNjQnl0ZXMsQj0iIixXPTA7VzxqLmxlbmd0aDtXKyspe3ZhciBaPWpbV107MTI4IT0oMTkyJlopPyhMPjAmJihCKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSxM''@;'; put 'put ''PTApLFo8MTI4P0IrPVN0cmluZy5mcm9tQ2hhckNvZGUoWik6WjwyMjQ/KFA9MzEmWixMPTEsWT0xKTpaPDI0MD8oUD0xNSZaLEw9MixZPTEpOkIrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKTpMPjA/KFA9UDw8Nnw2MyZaLFkrKywwPT0tLUwmJihCKz0yPT09WSYmUDwxMjgmJlA+MHx8Mz09''@;'; put 'put ''PVkmJlA8MjA0OD90aGlzLmRlZmF1bHRDaGFyVW5pY29kZTpTdHJpbmcuZnJvbUNoYXJDb2RlKFApKSk6Qis9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGV9cmV0dXJuIHRoaXMuYWNjPVAsdGhpcy5jb250Qnl0ZXM9TCx0aGlzLmFjY0J5dGVzPVksQn0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGo9MDtyZXR1cm4gdGhpcy5jb250Qnl0ZXM+MCYmKGorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlKSxqfX0sNTg2Nzc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8odyxGKXtpZighdyl0aHJvdyBuZXcgRXJyb3IoIlNCQ1Mg''@;'; put 'put ''Y29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIXcuY2hhcnN8fDEyOCE9PXcuY2hhcnMubGVuZ3RoJiYyNTYhPT13LmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3cudHlwZSsiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2Yg''@;'; put 'put ''bGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09dy5jaGFycy5sZW5ndGgpe2Zvcih2YXIgSD0iIixSPTA7UjwxMjg7UisrKUgrPVN0cmluZy5mcm9tQ2hhckNvZGUoUik7dy5jaGFycz1IK3cuY2hhcnN9dGhpcy5kZWNvZGVCdWY9RC5mcm9tKHcuY2hhcnMsInVjczIiKTt2YXIgaj1ELmFsbG9j''@;'; put 'put ''KDY1NTM2LEYuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO2ZvcihSPTA7Ujx3LmNoYXJzLmxlbmd0aDtSKyspalt3LmNoYXJzLmNoYXJDb2RlQXQoUildPVI7dGhpcy5lbmNvZGVCdWY9an1mdW5jdGlvbiBwKHcsRil7dGhpcy5lbmNvZGVCdWY9Ri5lbmNvZGVCdWZ9ZnVu''@;'; put 'put ''Y3Rpb24gTih3LEYpe3RoaXMuZGVjb2RlQnVmPUYuZGVjb2RlQnVmfUouX3NiY3M9XyxfLnByb3RvdHlwZS5lbmNvZGVyPXAsXy5wcm90b3R5cGUuZGVjb2Rlcj1OLHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgRj1ELmFsbG9jKHcubGVuZ3RoKSxIPTA7SDx3Lmxlbmd0''@;'; put 'put ''aDtIKyspRltIXT10aGlzLmVuY29kZUJ1Zlt3LmNoYXJDb2RlQXQoSCldO3JldHVybiBGfSxwLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LE4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgRj10aGlzLmRlY29kZUJ1ZixIPUQuYWxsb2MoMip3Lmxlbmd0aCksUj0wLGo9''@;'; put 'put ''MCxQPTA7UDx3Lmxlbmd0aDtQKyspSFtqPTIqUF09RltSPTIqd1tQXV0sSFtqKzFdPUZbUisxXTtyZXR1cm4gSC50b1N0cmluZygidWNzMiIpfSxOLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9fSwzMDE4NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6''@;'; put 'put ''ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNwODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNwODYxIiw4NjI6ImNwODYyIiw4NjM6ImNwODYzIiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4''@;'; put 'put ''NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQiLDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEzMzoiY3AxMTMzIiwxMTYxOiJjcDExNjEiLDExNjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwx''@;'; put 'put ''MjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEyNTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1IiwxMjU2OiJ3aW5kb3dzMTI1NiIsMTI1Nzoid2luZG93czEyNTciLDEyNTg6IndpbmRvd3Mx''@;'; put 'put ''MjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIsMjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5NzoiaXNvODg1OTciLDI4NTk4OiJpc284ODU5OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoi''@;'; put 'put ''aXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNvODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBc''@;'; put 'put ''dTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBl''@;'; put 'put ''MWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdc''@;'; put 'put ''dTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBl''@;'; put 'put ''NTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dzODc0Iix3aW5kb3dzMTI1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIw''@;'; put 'put ''MWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVc''@;'; put 'put ''dTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAx''@;'; put 'put ''N2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUw''@;'; put 'put ''MTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2lu''@;'; put 'put ''MTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAiLHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1''@;'; put 'put ''MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNc''@;'; put 'put ''eGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1''@;'; put 'put ''MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQz''@;'; put 'put ''Nlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6Indp''@;'; put 'put ''bmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dzMTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFc''@;'; put 'put ''eGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4''@;'; put 'put ''ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dz''@;'; put 'put ''MTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUy''@;'; put 'put ''MDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4''@;'; put 'put ''YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUw''@;'; put 'put ''MzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2Jh''@;'; put 'put ''XHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0sd2luMTI1Mzoid2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93''@;'; put 'put ''czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4''@;'; put 'put ''YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZc''@;'; put 'put ''eGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LHdpbjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6''@;'; put 'put ''IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIw''@;'; put 'put ''MWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVc''@;'; put 'put ''eGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYw''@;'; put 'put ''XHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUw''@;'; put 'put ''NWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93czEyNTUiLGNwMTI1NToid2luZG93czEyNTUiLHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1''@;'; put 'put ''MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVc''@;'; put 'put ''dTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5''@;'; put 'put ''XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUw''@;'; put 'put ''NjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUy''@;'; put 'put ''MDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3''@;'; put 'put ''XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDEx''@;'; put 'put ''Nlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1''@;'; put 'put ''MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5In0sd2luMTI1Nzoid2luZG93czEyNTciLGNwMTI1Nzoid2luZG93czEyNTci''@;'; put 'put ''LHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy''@;'; put 'put ''Mlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5''@;'; put 'put ''XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhk''@;'; put 'put ''Zlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1''@;'; put 'put ''OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5''@;'; put 'put ''Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0''@;'; put 'put ''XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRc''@;'; put 'put ''eGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4''@;'; put 'put ''OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhhNFx1MDEzZFx1MDE1YVx4YTdceGE4XHUwMTYwXHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3''@;'; put 'put ''ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNlXHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4''@;'; put 'put ''Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhl''@;'; put 'put ''ZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIsaXNvODg1OTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1''@;'; put 'put ''XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTI2XHUwMmQ4XHhhM1x4YTRcdWZmZmRcdTAxMjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDEx''@;'; put 'put ''ZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMxXHhjMlx1ZmZmZFx4YzRcdTAxMGFcdTAxMDhceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNk''@;'; put 'put ''XHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhkNlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJcdTAxMDlceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhm''@;'; put 'put ''Mlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4''@;'; put 'put ''OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhcdTAxM2JceGE3XHhhOFx1MDE2MFx1MDExMlx1MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhi''@;'; put 'put ''MFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAyYzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1''@;'; put 'put ''MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZc''@;'; put 'put ''dTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4''@;'; put 'put ''OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUw''@;'; put 'put ''NDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUw''@;'; put 'put ''NDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1''@;'; put 'put ''OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRc''@;'; put 'put ''eDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYz''@;'; put 'put ''Nlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1''@;'; put 'put ''MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4''@;'; put 'put ''N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIwMTlceGEzXHUyMGFjXHUyMGFmXHhhNlx4YTdceGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1''@;'; put 'put ''ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVcdTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJc''@;'; put 'put ''dTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAz''@;'; put 'put ''YjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5''@;'; put 'put ''NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEw''@;'; put 'put ''XHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1''@;'; put 'put ''ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIsaXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3''@;'; put 'put ''XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBc''@;'; put 'put ''eGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4''@;'; put 'put ''XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJpc284ODU5OSIsaXNvODg1OTEwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4''@;'; put 'put ''ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDExMlx1MDEyMlx1MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2Jc''@;'; put 'put ''dTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRhXHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAxN2VcdTIwMTVcdTAxNmJcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAx''@;'; put 'put ''MmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhjZlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlc''@;'; put 'put ''eGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284ODU5MTAiLGlzbzg4NTkxMTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgz''@;'; put 'put ''XHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhc''@;'; put 'put ''dTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBl''@;'; put 'put ''MjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2Zc''@;'; put 'put ''dTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBl''@;'; put 'put ''NWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJpc284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRc''@;'; put 'put ''eDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHUyMDFjXHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJi''@;'; put 'put ''XHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFc''@;'; put 'put ''dTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAx''@;'; put 'put ''NDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0sY3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5''@;'; put 'put ''Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgyXHUxZTBiXHUxZWYyXHhhZFx4YWVcdTAxNzhcdTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFl''@;'; put 'put ''NDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUxZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE3NFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2''@;'; put 'put ''YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHUxZTZiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3''@;'; put 'put ''XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5''@;'; put 'put ''YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxN2RceGI1XHhiNlx4YjdcdTAxN2VceGI5XHhiYVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJm''@;'; put 'put ''XHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThc''@;'; put 'put ''eGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkxNSIsaXNvODg1OTE2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0''@;'; put 'put ''XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEwNVx1MDE0MVx1MjBhY1x1MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUw''@;'; put 'put ''MjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Y1x4YzBceGMxXHhjMlx1MDEwMlx4YzRcdTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4''@;'; put 'put ''Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNceGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx1MDEwN1x4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZc''@;'; put 'put ''dTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTViXHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4''@;'; put 'put ''ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5''@;'; put 'put ''MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1''@;'; put 'put ''MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUw''@;'; put 'put ''M2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNDM3OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3Iixj''@;'; put 'put ''cDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThc''@;'; put 'put ''dTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1''@;'; put 'put ''OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc''@;'; put 'put ''dTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAz''@;'; put 'put ''Y2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm03Mzc6ImNwNzM3Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAxXHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2XHhjNlx1MDE0ZFx4ZjZcdTAxMjJceGEyXHUwMTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4''@;'; put 'put ''ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2NcdTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDEwNFx1MDEwY1x1MDExOFx1MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1''@;'; put 'put ''ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDE3ZFx1MDEwNVx1MDEwZFx1MDExOVx1MDExN1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1''@;'; put 'put ''MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUwMTQ2XHUwMTEyXHUwMTQ1XHUyMDE5XHhhZFx4YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUy''@;'; put 'put ''MDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1''@;'; put 'put ''XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFc''@;'; put 'put ''eGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMx''@;'; put 'put ''XHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4Yjlc''@;'; put 'put ''eGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2libTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAx''@;'; put 'put ''MzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFc''@;'; put 'put ''dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1''@;'; put 'put ''MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUw''@;'; put 'put ''MTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1MjoiY3A4NTIiLGNzaWJtODUyOiJjcDg1MiIsY3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoi''@;'; put 'put ''XHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUwNDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUwNDVhXHUwNDBhXHUwNDViXHUwNDBiXHUwNDVjXHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUw''@;'; put 'put ''NDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEwXHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEzXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0''@;'; put 'put ''MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUw''@;'; put 'put ''NDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQyXHUwNDIyXHUwNDQzXHUwNDIzXHUwNDM2XHUwNDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJj''@;'; put 'put ''XHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1NSIsY3NpYm04NTU6ImNwODU1IixjcDg1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBc''@;'; put 'put ''dTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEz''@;'; put 'put ''XHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFc''@;'; put 'put ''dTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVmZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdc''@;'; put 'put ''eGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0''@;'; put 'put ''XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUw''@;'; put 'put ''Mlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4''@;'; put 'put ''Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhi''@;'; put 'put ''MFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2''@;'; put 'put ''XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBc''@;'; put 'put ''eGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNl''@;'; put 'put ''XHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJc''@;'; put 'put ''dTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNwODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNhXHhlOFx4Y2RceGQ0XHhlY1x4YzNceGMyXHhjOVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4''@;'; put 'put ''ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1''@;'; put 'put ''MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1''@;'; put 'put ''MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2''@;'; put 'put ''NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4''@;'; put 'put ''ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJc''@;'; put 'put ''dTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1''@;'; put 'put ''NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNj''@;'; put 'put ''NFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2''@;'; put 'put ''MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUw''@;'; put 'put ''NWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2''@;'; put 'put ''XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUy''@;'; put 'put ''NTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIy''@;'; put 'put ''MjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2MjoiY3A4NjIiLGNwODYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJc''@;'; put 'put ''eGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIwMTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1MDE5Mlx4YTZceGI0XHhmM1x4ZmFceGE4XHhiOFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJk''@;'; put 'put ''XHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1''@;'; put 'put ''YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAz''@;'; put 'put ''YTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2''@;'; put 'put ''MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwi''@;'; put 'put ''IyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4YjdcdTIyMTlcdTIyMWFcdTI1OTJcdTI1MDBcdTI1MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNc''@;'; put 'put ''dTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIyMWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1ZmZmZFx4YTBceGFkXHVmZTgyXHhhM1x4YTRcdWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZl''@;'; put 'put ''OGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJcdWZlYjFcdWZlYjVcdWZlYjlcdTA2MWZceGEyXHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVm''@;'; put 'put ''ZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMxXHVmZWM1XHVmZWNiXHVmZWNmXHhhNlx4YWNceGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1''@;'; put 'put ''ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVlZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVlY1x1ZmVmMFx1ZmVmMlx1ZmVkMFx1ZmVkNVx1ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVm''@;'; put 'put ''MVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4''@;'; put 'put ''ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUy''@;'; put 'put ''NTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4''@;'; put 'put ''XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFc''@;'; put 'put ''eGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUiLGNwODY2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1''@;'; put 'put ''MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQy''@;'; put 'put ''Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1''@;'; put 'put ''MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1''@;'; put 'put ''M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1''@;'; put 'put ''MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNwODY5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAzOGZceGIyXHhiM1x1MDNhY1x4YTNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAz''@;'; put 'put ''Y2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZc''@;'; put 'put ''dTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1''@;'; put 'put ''MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzODRceGFkXHhiMVx1MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhc''@;'; put 'put ''dTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhk''@;'; put 'put ''XHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHUyMDNlXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhi''@;'; put 'put ''Nlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdk''@;'; put 'put ''XHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTdlXHhmZiJ9LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJj''@;'; put 'put ''cDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1ZmU3OVx1ZmU3Ylx1ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVm''@;'; put 'put ''MFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHUwNjBjXHhhZFx1ZmVhN1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1''@;'; put 'put ''MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYy''@;'; put 'put ''ZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1''@;'; put 'put ''MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVlN1x1ZmVlY1x1ZmVlOVx1ZmZmZCJ9LGlibTEwNDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEw''@;'; put 'put ''NDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBc''@;'; put 'put ''dTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFj''@;'; put 'put ''XHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUw''@;'; put 'put ''NDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkx''@;'; put 'put ''XHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNwMTEyNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0''@;'; put 'put ''MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZc''@;'; put 'put ''dTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1''@;'; put 'put ''NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNc''@;'; put 'put ''dTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0''@;'; put 'put ''OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1IixjcDExMjk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1''@;'; put 'put ''XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhh''@;'; put 'put ''ZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0''@;'; put 'put ''XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4Zjlc''@;'; put 'put ''eGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToiY3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5''@;'; put 'put ''MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1MGU5NFx1MGU5NVx1MGU5Nlx1MGU5N1x1MGU5OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1''@;'; put 'put ''MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGViNVx1MGViNlx1MGViN1x1MGViOFx1MGViOVx1MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZmZFx4YTJceGFjXHhhNlx1ZmZmZCJ9LGlibTExMzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDEx''@;'; put 'put ''MzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBl''@;'; put 'put ''MTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNc''@;'; put 'put ''dTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBl''@;'; put 'put ''NDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJceGEyXHhhY1x4YTZceGEwIn0saWJtMTE2MToiY3AxMTYxIixjc2libTExNjE6ImNw''@;'; put 'put ''MTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJc''@;'; put 'put ''eDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1''@;'; put 'put ''MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUz''@;'; put 'put ''NFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1''@;'; put 'put ''MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2MiIsY3NpYm0xMTYyOiJjcDExNjIiLGNwMTE2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgw''@;'; put 'put ''XHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNc''@;'; put 'put ''eGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1''@;'; put 'put ''MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRc''@;'; put 'put ''dTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0''@;'; put 'put ''XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx1MDE2MFx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIx''@;'; put 'put ''ZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUwMTA2XHhhYlx1MDEwY1x1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAx''@;'; put 'put ''MTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHUwMTA3XHhjMVx1MDEwZFx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFc''@;'; put 'put ''eGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0''@;'; put 'put ''MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhi''@;'; put 'put ''Nlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFh''@;'; put 'put ''XHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1''@;'; put 'put ''MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4''@;'; put 'put ''ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUw''@;'; put 'put ''Mzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4''@;'; put 'put ''ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2Vc''@;'; put 'put ''dTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhl''@;'; put 'put ''M1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIy''@;'; put 'put ''NjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNc''@;'; put 'put ''dTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAy''@;'; put 'put ''YzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVj''@;'; put 'put ''XHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUy''@;'; put 'put ''MjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZm''@;'; put 'put ''XHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUw''@;'; put 'put ''MmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhm''@;'; put 'put ''Mlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJi''@;'; put 'put ''XHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0''@;'; put 'put ''NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4''@;'; put 'put ''YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVmODkxXHVmODk0XHVmODk3XHUyMDFjXHUyMDFkXHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVm''@;'; put 'put ''ODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhkXHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1''@;'; put 'put ''MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUy''@;'; put 'put ''YVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1MjAxM1x1MjAxNFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1''@;'; put 'put ''MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx4YWVceGE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhh''@;'; put 'put ''M1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIy''@;'; put 'put ''NDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVc''@;'; put 'put ''dTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFy''@;'; put 'put ''czoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh''@;'; put 'put ''XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRc''@;'; put 'put ''dTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5''@;'; put 'put ''XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0''@;'; put 'put ''MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1''@;'; put 'put ''MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1''@;'; put 'put ''NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0''@;'; put 'put ''MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRc''@;'; put 'put ''dTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0''@;'; put 'put ''MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNc''@;'; put 'put ''dTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1''@;'; put 'put ''MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNc''@;'; put 'put ''dTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0''@;'; put 'put ''MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0Mjdc''@;'; put 'put ''dTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUy''@;'; put 'put ''MjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1''@;'; put 'put ''NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUw''@;'; put 'put ''NDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4''@;'; put 'put ''XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUw''@;'; put 'put ''NDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNh''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUwNGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBceGIxXHhiMlx1MDQwMVx1ZmZmZFx1MDRlMlx4YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhi''@;'; put 'put ''Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0''@;'; put 'put ''MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBc''@;'; put 'put ''dTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4''@;'; put 'put ''ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0Llx1MDU1ZCwtXHUwNThhXHUyMDI2XHUwNTVjXHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUw''@;'; put 'put ''NTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNiXHUwNTZiXHUwNTNjXHUwNTZjXHUwNTNkXHUwNTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZm''@;'; put 'put ''XHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUwNTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUwNTQ5XHUwNTc5XHUwNTRhXHUwNTdhXHUwNTRiXHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUw''@;'; put 'put ''NTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgwXHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2XHUwNTVhXHVmZmZkIn0scmsxMDQ4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQw''@;'; put 'put ''M1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1''@;'; put 'put ''MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhceGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUwNDU2XHUwNGU5XHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRh''@;'; put 'put ''Mlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1''@;'; put 'put ''MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0''@;'; put 'put ''NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgwM1x1MWVlYVx1MWVlY1x1MWVlZVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThc''@;'; put 'put ''dTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3''@;'; put 'put ''Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4ZDNcdTFlY2NcdTFlZDhcdTFlZGNcdTFlZGVcdTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2''@;'; put 'put ''XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFhZlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x4ZTBcdTFlYTNceGUzXHhlMVx1MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWVi''@;'; put 'put ''NVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5XHUxZWI5XHUxZWMxXHUxZWMzXHUxZWM1XHUxZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1''@;'; put 'put ''MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUxZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJcdTFlZTNceGY5XHUxZWQ2XHUxZWU3XHUwMTY5XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVl''@;'; put 'put ''Zlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFlZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhk''@;'; put 'put ''XHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhi''@;'; put 'put ''MFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1''@;'; put 'put ''MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBmM1x1MTBmNFx1MTBmNVx1MTBmNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhl''@;'; put 'put ''Zlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUy''@;'; put 'put ''MDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4''@;'; put 'put ''YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZjFcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJc''@;'; put 'put ''dTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZjRcdTEwZWZcdTEwZjBcdTEwZjVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVj''@;'; put 'put ''XHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Nlx1MDQ5Mlx1MDRlZVx1MDQ5M1x1MjAxZVx1MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRh''@;'; put 'put ''Zlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1MDRhM1x1MDQ5Ylx1MDRiYlx1MDRiOVx4YTBcdTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0''@;'; put 'put ''OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUwNGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRkOVx4YmJcdTA0NThcdTA0YWFcdTA0YWJcdTA0OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNc''@;'; put 'put ''dTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0''@;'; put 'put ''MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFc''@;'; put 'put ''dTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHUxZWY2XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFc''@;'; put 'put ''eDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTFlYTBcdTFlYWVcdTFlYjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThc''@;'; put 'put ''dTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFlYzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFlY2VcdTFlY2NcdTFlYzhcdTFlZTZcdTAxNjhcdTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIx''@;'; put 'put ''XHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUxZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWNiXHUxZWYwXHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUx''@;'; put 'put ''ZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0XHUxZWExXHUxZWY3XHUxZWViXHUxZWVkXHhkOVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUx''@;'; put 'put ''XHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVlZlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhmNVx1MWVjZlx1MWVjZFx1MWVlNVx4ZjlceGZhXHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVl''@;'; put 'put ''ZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKiss''@;'; put 'put ''LS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpc282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgx''@;'; put 'put ''Ylx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhm''@;'; put 'put ''XHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJjNlx4YThcdTAyZGNceGQ5XHhkYlx1MjBhNFx4YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFc''@;'; put 'put ''eGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4ZDhceGM2XHhlNVx4ZWRceGY4XHhlNlx4YzRceGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0''@;'; put 'put ''XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhkNVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhhYVx4YmFceGFiXHUyNWEwXHhiYlx4YjFcdWZmZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNz''@;'; put 'put ''IixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIy''@;'; put 'put ''XHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhh''@;'; put 'put ''Ylx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNh''@;'; put 'put ''XHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sYXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1''@;'; put 'put ''MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUx''@;'; put 'put ''ZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1''@;'; put 'put ''MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1''@;'; put 'put ''NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sNzYyMzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXsxMDAyOToibWFjY2VudGV1cm8iLG1hY2NlbnRldXJvOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRc''@;'; put 'put ''dTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIw''@;'; put 'put ''XHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2Fc''@;'; put 'put ''dTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIw''@;'; put 'put ''MzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUw''@;'; put 'put ''MTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3In0sODA4OiJjcDgwOCIsaWJtODA4OiJjcDgwOCIsY3A4MDg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUw''@;'; put 'put ''NDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3''@;'; put 'put ''XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUy''@;'; put 'put ''NTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkw''@;'; put 'put ''XHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4Yjdc''@;'; put 'put ''dTIyMWFcdTIxMTZcdTIwYWNcdTI1YTBceGEwIn0sbWlrOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1''@;'; put 'put ''MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQz''@;'; put 'put ''ZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU2M1x1MjU1MVx1MjU1YVx1''@;'; put 'put ''MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjUxMFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx4YTdcdTI1NTdcdTI1NWRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUw''@;'; put 'put ''M2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGNwNzIwOnt0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx4ODBceDgxXHhlOVx4ZTJceDg0XHhlMFx4ODZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceDhkXHg4ZVx4OGZceDkwXHUwNjUxXHUwNjUyXHhmNFx4YTRcdTA2NDBceGZiXHhmOVx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx4YTNcdTA2MjVcdTA2MjZcdTA2MjdcdTA2Mjhc''@;'; put 'put ''dTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1''@;'; put 'put ''MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2''@;'; put 'put ''YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MVx4YjVcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTIyNjFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2''@;'; put 'put ''NGVcdTA2NGZcdTA2NTBcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sYXNjaWk4Yml0OiJhc2NpaSIsdXNhc2NpaToiYXNjaWkiLGFuc2l4MzQ6ImFzY2lpIixhbnNpeDM0MTk2ODoiYXNjaWkiLGFuc2l4MzQxOTg2OiJhc2NpaSIsY3Nhc2NpaToiYXNj''@;'; put 'put ''aWkiLGNwMzY3OiJhc2NpaSIsaWJtMzY3OiJhc2NpaSIsaXNvaXI2OiJhc2NpaSIsaXNvNjQ2dXM6ImFzY2lpIixpc282NDZpcnY6ImFzY2lpIix1czoiYXNjaWkiLGxhdGluMToiaXNvODg1OTEiLGxhdGluMjoiaXNvODg1OTIiLGxhdGluMzoiaXNvODg1OTMiLGxhdGluNDoiaXNvODg1OTQi''@;'; put 'put ''LGxhdGluNToiaXNvODg1OTkiLGxhdGluNjoiaXNvODg1OTEwIixsYXRpbjc6Imlzbzg4NTkxMyIsbGF0aW44OiJpc284ODU5MTQiLGxhdGluOToiaXNvODg1OTE1IixsYXRpbjEwOiJpc284ODU5MTYiLGNzaXNvbGF0aW4xOiJpc284ODU5MSIsY3Npc29sYXRpbjI6Imlzbzg4NTkyIixjc2lz''@;'; put 'put ''b2xhdGluMzoiaXNvODg1OTMiLGNzaXNvbGF0aW40OiJpc284ODU5NCIsY3Npc29sYXRpbmN5cmlsbGljOiJpc284ODU5NSIsY3Npc29sYXRpbmFyYWJpYzoiaXNvODg1OTYiLGNzaXNvbGF0aW5ncmVlazoiaXNvODg1OTciLGNzaXNvbGF0aW5oZWJyZXc6Imlzbzg4NTk4Iixjc2lzb2xhdGlu''@;'; put 'put ''NToiaXNvODg1OTkiLGNzaXNvbGF0aW42OiJpc284ODU5MTAiLGwxOiJpc284ODU5MSIsbDI6Imlzbzg4NTkyIixsMzoiaXNvODg1OTMiLGw0OiJpc284ODU5NCIsbDU6Imlzbzg4NTk5IixsNjoiaXNvODg1OTEwIixsNzoiaXNvODg1OTEzIixsODoiaXNvODg1OTE0IixsOToiaXNvODg1OTE1''@;'; put 'put ''IixsMTA6Imlzbzg4NTkxNiIsaXNvaXIxNDoiaXNvNjQ2anAiLGlzb2lyNTc6ImlzbzY0NmNuIixpc29pcjEwMDoiaXNvODg1OTEiLGlzb2lyMTAxOiJpc284ODU5MiIsaXNvaXIxMDk6Imlzbzg4NTkzIixpc29pcjExMDoiaXNvODg1OTQiLGlzb2lyMTQ0OiJpc284ODU5NSIsaXNvaXIxMjc6''@;'; put 'put ''Imlzbzg4NTk2Iixpc29pcjEyNjoiaXNvODg1OTciLGlzb2lyMTM4OiJpc284ODU5OCIsaXNvaXIxNDg6Imlzbzg4NTk5Iixpc29pcjE1NzoiaXNvODg1OTEwIixpc29pcjE2NjoidGlzNjIwIixpc29pcjE3OToiaXNvODg1OTEzIixpc29pcjE5OToiaXNvODg1OTE0Iixpc29pcjIwMzoiaXNv''@;'; put 'put ''ODg1OTE1Iixpc29pcjIyNjoiaXNvODg1OTE2IixjcDgxOToiaXNvODg1OTEiLGlibTgxOToiaXNvODg1OTEiLGN5cmlsbGljOiJpc284ODU5NSIsYXJhYmljOiJpc284ODU5NiIsYXJhYmljODoiaXNvODg1OTYiLGVjbWExMTQ6Imlzbzg4NTk2Iixhc21vNzA4OiJpc284ODU5NiIsZ3JlZWs6''@;'; put 'put ''Imlzbzg4NTk3IixncmVlazg6Imlzbzg4NTk3IixlY21hMTE4OiJpc284ODU5NyIsZWxvdDkyODoiaXNvODg1OTciLGhlYnJldzoiaXNvODg1OTgiLGhlYnJldzg6Imlzbzg4NTk4Iix0dXJraXNoOiJpc284ODU5OSIsdHVya2lzaDg6Imlzbzg4NTk5Iix0aGFpOiJpc284ODU5MTEiLHRoYWk4''@;'; put 'put ''OiJpc284ODU5MTEiLGNlbHRpYzoiaXNvODg1OTE0IixjZWx0aWM4OiJpc284ODU5MTQiLGlzb2NlbHRpYzoiaXNvODg1OTE0Iix0aXM2MjAwOiJ0aXM2MjAiLHRpczYyMDI1MjkxOiJ0aXM2MjAiLHRpczYyMDI1MzMwOiJ0aXM2MjAiLDFlNDoibWFjcm9tYW4iLDEwMDA2OiJtYWNncmVlayIs''@;'; put 'put ''MTAwMDc6Im1hY2N5cmlsbGljIiwxMDA3OToibWFjaWNlbGFuZCIsMTAwODE6Im1hY3R1cmtpc2giLGNzcGM4Y29kZXBhZ2U0Mzc6ImNwNDM3Iixjc3BjNzc1YmFsdGljOiJjcDc3NSIsY3NwYzg1MG11bHRpbGluZ3VhbDoiY3A4NTAiLGNzcGNwODUyOiJjcDg1MiIsY3NwYzg2MmxhdGluaGVi''@;'; put 'put ''cmV3OiJjcDg2MiIsY3BncjoiY3A4NjkiLG1zZWU6ImNwMTI1MCIsbXNjeXJsOiJjcDEyNTEiLG1zYW5zaToiY3AxMjUyIixtc2dyZWVrOiJjcDEyNTMiLG1zdHVyazoiY3AxMjU0Iixtc2hlYnI6ImNwMTI1NSIsbXNhcmFiOiJjcDEyNTYiLHdpbmJhbHRyaW06ImNwMTI1NyIsY3AyMDg2Njoi''@;'; put 'put ''a29pOHIiLDIwODY2OiJrb2k4ciIsaWJtODc4OiJrb2k4ciIsY3Nrb2k4cjoia29pOHIiLGNwMjE4NjY6ImtvaTh1IiwyMTg2Njoia29pOHUiLGlibTExNjg6ImtvaTh1IixzdHJrMTA0ODIwMDI6InJrMTA0OCIsdGN2bjU3MTI6InRjdm4iLHRjdm41NzEyMToidGN2biIsZ2IxOTg4ODA6Imlz''@;'; put 'put ''bzY0NmNuIixjbjoiaXNvNjQ2Y24iLGNzaXNvMTRqaXNjNjIyMHJvOiJpc282NDZqcCIsamlzYzYyMjAxOTY5cm86ImlzbzY0NmpwIixqcDoiaXNvNjQ2anAiLGNzaHByb21hbjg6Imhwcm9tYW44IixyODoiaHByb21hbjgiLHJvbWFuODoiaHByb21hbjgiLHhyb21hbjg6Imhwcm9tYW44Iixp''@;'; put 'put ''Ym0xMDUxOiJocHJvbWFuOCIsbWFjOiJtYWNpbnRvc2giLGNzbWFjaW50b3NoOiJtYWNpbnRvc2gifX0sNzE3NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIE4oKXt0aGlzLm92ZXJmbG93''@;'; put 'put ''Qnl0ZT0tMX1mdW5jdGlvbiB3KGosUCl7dGhpcy5pY29udj1QfWZ1bmN0aW9uIEYoaixQKXt2b2lkIDA9PT0oaj1qfHx7fSkuYWRkQk9NJiYoai5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1QLmljb252LmdldEVuY29kZXIoInV0Zi0xNmxlIixqKX1mdW5jdGlvbiBIKGosUCl7dGhpcy5kZWNv''@;'; put 'put ''ZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9anx8e30sdGhpcy5pY29udj1QLmljb252fWZ1bmN0aW9uIFIoaixQKXt2YXIgTD1QfHwidXRmLTE2bGUiO2lmKGoubGVuZ3RoPj0yKWlmKDI1ND09alswXSYmMjU1PT1qWzFd''@;'; put 'put ''KUw9InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09alswXSYmMjU0PT1qWzFdKUw9InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgWT0wLEI9MCxXPU1hdGgubWluKGoubGVuZ3RoLWoubGVuZ3RoJTIsNjQpLFo9MDtaPFc7Wis9MikwPT09altaXSYmMCE9PWpbWisxXSYmQisrLDAhPT1qW1pdJiYwPT09''@;'; put 'put ''altaKzFdJiZZKys7Qj5ZP0w9InV0Zi0xNmJlIjpCPFkmJihMPSJ1dGYtMTZsZSIpfXJldHVybiBMfUoudXRmMTZiZT1fLF8ucHJvdG90eXBlLmVuY29kZXI9cCxfLnByb3RvdHlwZS5kZWNvZGVyPU4sXy5wcm90b3R5cGUuYm9tQXdhcmU9ITAscC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o''@;'; put 'put ''ail7Zm9yKHZhciBQPUQuZnJvbShqLCJ1Y3MyIiksTD0wO0w8UC5sZW5ndGg7TCs9Mil7dmFyIFk9UFtMXTtQW0xdPVBbTCsxXSxQW0wrMV09WX1yZXR1cm4gUH0scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxOLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXtpZigwPT1qLmxlbmd0''@;'; put 'put ''aClyZXR1cm4iIjt2YXIgUD1ELmFsbG9jKGoubGVuZ3RoKzEpLEw9MCxZPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihQWzBdPWpbMF0sUFsxXT10aGlzLm92ZXJmbG93Qnl0ZSxMPTEsWT0yKTtMPGoubGVuZ3RoLTE7TCs9MixZKz0yKVBbWV09altMKzFdLFBbWSsxXT1qW0xdO3Jl''@;'; put 'put ''dHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1MPT1qLmxlbmd0aC0xP2pbai5sZW5ndGgtMV06LTEsUC5zbGljZSgwLFkpLnRvU3RyaW5nKCJ1Y3MyIil9LE4ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sSi51dGYxNj13LHcucHJvdG90eXBlLmVuY29kZXI9Rix3LnByb3RvdHlwZS5kZWNvZGVy''@;'; put 'put ''PUgsRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShqKX0sRi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sSC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oail7aWYoIXRoaXMuZGVjb2Rlcil7''@;'; put 'put ''aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChqKSx0aGlzLmluaXRpYWxCeXRlc0xlbis9ai5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIFA9UihqPUQuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlz''@;'; put 'put ''LmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKFAsdGhpcy5vcHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKGopfSxILnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNv''@;'; put 'put ''ZGVyKXt2YXIgaj1ELmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksUD1SKGosdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihQLHRoaXMub3B0aW9ucyk7dmFyIEw9dGhpcy5kZWNvZGVyLndyaXRlKGopLFk9dGhpcy5kZWNv''@;'; put 'put ''ZGVyLmVuZCgpO3JldHVybiBZP0wrWTpMfXJldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSwzNTA4OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXyhqLFApe3RoaXMuaWNvbnY9UCx0aGlzLmJvbUF3YXJlPSEwLHRoaXMuaXNMRT1qLmlz''@;'; put 'put ''TEV9ZnVuY3Rpb24gcChqLFApe3RoaXMuaXNMRT1QLmlzTEUsdGhpcy5oaWdoU3Vycm9nYXRlPTB9ZnVuY3Rpb24gTihqLFApe3RoaXMuaXNMRT1QLmlzTEUsdGhpcy5iYWRDaGFyPVAuaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCksdGhpcy5vdmVyZmxvdz1udWxsfWZ1''@;'; put 'put ''bmN0aW9uIHcoaixQKXt0aGlzLmljb252PVB9ZnVuY3Rpb24gRihqLFApe3ZvaWQgMD09PShqPWp8fHt9KS5hZGRCT00mJihqLmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPVAuaWNvbnYuZ2V0RW5jb2RlcihqLmRlZmF1bHRFbmNvZGluZ3x8InV0Zi0zMmxlIixqKX1mdW5jdGlvbiBIKGosUCl7''@;'; put 'put ''dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9anx8e30sdGhpcy5pY29udj1QLmljb252fWZ1bmN0aW9uIFIoaixQKXt2YXIgTD1QfHwidXRmLTMybGUiO2lmKGoubGVuZ3RoPj00KWlmKDY1Mjc5PT09ai5y''@;'; put 'put ''ZWFkVUludDMyQkUoMCkpTD0idXRmLTMyYmUiO2Vsc2UgaWYoNjUyNzk9PT1qLnJlYWRVSW50MzJMRSgwKSlMPSJ1dGYtMzJsZSI7ZWxzZXtmb3IodmFyIFk9MCxCPTAsVz0wLFo9MCxxPU1hdGgubWluKGoubGVuZ3RoLWoubGVuZ3RoJTQsMTI4KSxRPTA7UTxxO1ErPTQpe3ZhciBYPWpbUV0s''@;'; put 'put ''dGU9altRKzFdLHJlPWpbUSsyXSxvZT1qW1ErM107KDAhPT1YfHx0ZT4xNikmJisrQiwoMCE9PW9lfHxyZT4xNikmJisrWSwwPT09WCYmMD09PXRlJiYwPT09cmUmJjAhPT1vZSYmWisrLDAhPT1YJiYwPT09dGUmJjA9PT1yZSYmMD09PW9lJiZXKyt9QjxZP0w9InV0Zi0zMmJlIjpZPEImJihM''@;'; put 'put ''PSJ1dGYtMzJsZSIpLFo+Vz9MPSJ1dGYtMzJiZSI6WjxXJiYoTD0idXRmLTMybGUiKX1yZXR1cm4gTH1KLl91dGYzMj1fLEoudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxKLnV0ZjMyYmU9e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sSi51Y3M0bGU9InV0ZjMybGUiLEoudWNzNGJl''@;'; put 'put ''PSJ1dGYzMmJlIixfLnByb3RvdHlwZS5lbmNvZGVyPXAsXy5wcm90b3R5cGUuZGVjb2Rlcj1OLHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope2Zvcih2YXIgUD1ELmZyb20oaiwidWNzMiIpLEw9RC5hbGxvYygyKlAubGVuZ3RoKSxZPXRoaXMuaXNMRT9MLndyaXRlVUludDMyTEU6TC53''@;'; put 'put ''cml0ZVVJbnQzMkJFLEI9MCxXPTA7VzxQLmxlbmd0aDtXKz0yKXt2YXIgWj1QLnJlYWRVSW50MTZMRShXKSxxPTU1Mjk2PD1aJiZaPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIXEmJjU2MzIwPD1aJiZaPDU3MzQ0KXtZLmNhbGwoTCw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRl''@;'; put 'put ''LTU1Mjk2PDwxMHxaLTU2MzIwKSxCKSxCKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfVkuY2FsbChMLHRoaXMuaGlnaFN1cnJvZ2F0ZSxCKSxCKz00fXE/dGhpcy5oaWdoU3Vycm9nYXRlPVo6KFkuY2FsbChMLFosQiksQis9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJu''@;'; put 'put ''IEI8TC5sZW5ndGgmJihMPUwuc2xpY2UoMCxCKSksTH0scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgaj1ELmFsbG9jKDQpO3JldHVybiB0aGlzLmlzTEU/ai53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTpqLndyaXRlVUlu''@;'; put 'put ''dDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLGp9fSxOLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXtpZigwPT09ai5sZW5ndGgpcmV0dXJuIiI7dGhpcy5vdmVyZmxvdyYmKGo9RC5jb25jYXQoW3RoaXMub3ZlcmZsb3csal0pKTt2YXIgUD1qLmxl''@;'; put 'put ''bmd0aC1qLmxlbmd0aCU0O2oubGVuZ3RoIT09UD8odGhpcy5vdmVyZmxvdz1qLnNsaWNlKFApLGo9ai5zbGljZSgwLFApKTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBMPUQuYWxsb2MoUCksWT0wLEI9MDtCPFA7Qis9NCl7dmFyIFc9dGhpcy5pc0xFP2oucmVhZFVJbnQzMkxFKEIpOmou''@;'; put 'put ''cmVhZFVJbnQzMkJFKEIpO2lmKFc8NjU1MzYpTC53cml0ZVVJbnQxNkxFKFcsWSksWSs9MjtlbHNlIGlmKFc+MTExNDExMSlMLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLFkpLFkrPTI7ZWxzZXt2YXIgcT01NjMyMCsoMTAyMyYoVy09NjU1MzYpKTtMLndyaXRlVUludDE2TEUoNTUyOTZ8''@;'; put 'put ''Vz4+MTAsWSksTC53cml0ZVVJbnQxNkxFKHEsWSs9MiksWSs9Mn19cmV0dXJuIEwuc2xpY2UoMCxZKS50b1N0cmluZygidWNzMiIpfSxOLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92ZXJmbG93PW51bGx9LEoudXRmMzI9dyxKLnVjczQ9dyx3LnByb3RvdHlwZS5lbmNvZGVyPUYs''@;'; put 'put ''dy5wcm90b3R5cGUuZGVjb2Rlcj1ILEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoail9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEgucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGop''@;'; put 'put ''e2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goaiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPWoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3ZhciBMPVIoRC5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZh''@;'; put 'put ''dWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTCx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoail9LEgucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciBqPUQuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxQPVIoaix0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKFAsdGhpcy5vcHRpb25zKTt2YXIgTD10aGlzLmRlY29kZXIud3Jp''@;'; put 'put ''dGUoaiksWT10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIFk/TCtZOkx9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDk3NDc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8ocSxRKXt0aGlzLmljb252PVF9Si51dGY3PV8sSi51bmlj''@;'; put 'put ''b2RlMTF1dGY3PSJ1dGY3IixfLnByb3RvdHlwZS5lbmNvZGVyPU4sXy5wcm90b3R5cGUuZGVjb2Rlcj13LF8ucHJvdG90eXBlLmJvbUF3YXJlPSEwO3ZhciBwPS9bXkEtWmEtejAtOSdcKFwpLC1cLlwvOlw/IFxuXHJcdF0rL2c7ZnVuY3Rpb24gTihxLFEpe3RoaXMuaWNvbnY9US5pY29udn1m''@;'; put 'put ''dW5jdGlvbiB3KHEsUSl7dGhpcy5pY29udj1RLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1OLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtyZXR1cm4gRC5mcm9tKHEucmVwbGFjZShwLGZ1bmN0aW9uKFEpe3JldHVybiIrIisoIisiPT09UT8iIjp0aGlz''@;'; put 'put ''Lmljb252LmVuY29kZShRLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LE4ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBGPS9bQS1aYS16MC05XC8rXS8sSD1bXSxSPTA7UjwyNTY7UisrKUhbUl09''@;'; put 'put ''Ri50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoUikpO3ZhciBQPTQ1O2Z1bmN0aW9uIFkocSxRKXt0aGlzLmljb252PVF9ZnVuY3Rpb24gQihxLFEpe3RoaXMuaWNvbnY9US5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09RC5hbGxvYyg2KSx0aGlzLmJhc2U2NEFjY3Vt''@;'; put 'put ''SWR4PTB9ZnVuY3Rpb24gVyhxLFEpe3RoaXMuaWNvbnY9US5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBRPSIiLFg9MCx0ZT10aGlzLmluQmFzZTY0LHJlPXRoaXMuYmFzZTY0QWNjdW0sb2U9''@;'; put 'put ''MDtvZTxxLmxlbmd0aDtvZSsrKWlmKHRlKXtpZighSFtxW29lXV0pe2lmKG9lPT1YJiZxW29lXT09UClRKz0iKyI7ZWxzZXt2YXIgZ2U9cmUrcS5zbGljZShYLG9lKS50b1N0cmluZygpO1ErPXRoaXMuaWNvbnYuZGVjb2RlKEQuZnJvbShnZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVtvZV0h''@;'; put 'put ''PVAmJm9lLS0sWD1vZSsxLHRlPSExLHJlPSIifX1lbHNlIDQzPT1xW29lXSYmKFErPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoWCxvZSksImFzY2lpIiksWD1vZSsxLHRlPSEwKTtpZih0ZSl7dmFyIF9lPShnZT1yZStxLnNsaWNlKFgpLnRvU3RyaW5nKCkpLmxlbmd0aC1nZS5sZW5ndGgl''@;'; put 'put ''ODtyZT1nZS5zbGljZShfZSksZ2U9Z2Uuc2xpY2UoMCxfZSksUSs9dGhpcy5pY29udi5kZWNvZGUoRC5mcm9tKGdlLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIFErPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoWCksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9dGUsdGhpcy5i''@;'; put 'put ''YXNlNjRBY2N1bT1yZSxRfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgcT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKHE9dGhpcy5pY29udi5kZWNvZGUoRC5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1i''@;'; put 'put ''ZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIscX0sSi51dGY3aW1hcD1ZLFkucHJvdG90eXBlLmVuY29kZXI9QixZLnByb3RvdHlwZS5kZWNvZGVyPVcsWS5wcm90b3R5cGUuYm9tQXdhcmU9ITAsQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBR''@;'; put 'put ''PXRoaXMuaW5CYXNlNjQsWD10aGlzLmJhc2U2NEFjY3VtLHRlPXRoaXMuYmFzZTY0QWNjdW1JZHgscmU9RC5hbGxvYyg1KnEubGVuZ3RoKzEwKSxvZT0wLGdlPTA7Z2U8cS5sZW5ndGg7Z2UrKyl7dmFyIF9lPXEuY2hhckNvZGVBdChnZSk7MzI8PV9lJiZfZTw9MTI2PyhRJiYodGU+MCYmKG9l''@;'; put 'put ''Kz1yZS53cml0ZShYLnNsaWNlKDAsdGUpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksb2UpLHRlPTApLHJlW29lKytdPVAsUT0hMSksUXx8KHJlW29lKytdPV9lLDM4PT09X2UmJihyZVtvZSsrXT1QKSkpOihRfHwocmVbb2UrK109Mzgs''@;'; put 'put ''UT0hMCksUSYmKFhbdGUrK109X2U+PjgsWFt0ZSsrXT0yNTUmX2UsdGU9PVgubGVuZ3RoJiYob2UrPXJlLndyaXRlKFgudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKSxvZSksdGU9MCkpKX1yZXR1cm4gdGhpcy5pbkJhc2U2ND1RLHRoaXMuYmFzZTY0QWNjdW1JZHg9dGUs''@;'; put 'put ''cmUuc2xpY2UoMCxvZSl9LEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPUQuYWxsb2MoMTApLFE9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0QWNjdW1JZHg+MCYmKFErPXEud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLHRoaXMuYmFzZTY0QWNjdW1J''@;'; put 'put ''ZHgpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksUSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxxW1ErK109UCx0aGlzLmluQmFzZTY0PSExKSxxLnNsaWNlKDAsUSl9O3ZhciBaPUguc2xpY2UoKTtaWzQ0XT0hMCxXLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZT1mdW5jdGlvbihxKXtmb3IodmFyIFE9IiIsWD0wLHRlPXRoaXMuaW5CYXNlNjQscmU9dGhpcy5iYXNlNjRBY2N1bSxvZT0wO29lPHEubGVuZ3RoO29lKyspaWYodGUpe2lmKCFaW3Fbb2VdXSl7aWYob2U9PVgmJnFbb2VdPT1QKVErPSImIjtlbHNle3ZhciBnZT1yZStxLnNsaWNlKFgs''@;'; put 'put ''b2UpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIik7USs9dGhpcy5pY29udi5kZWNvZGUoRC5mcm9tKGdlLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1xW29lXSE9UCYmb2UtLSxYPW9lKzEsdGU9ITEscmU9IiJ9fWVsc2UgMzg9PXFbb2VdJiYoUSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGlj''@;'; put 'put ''ZShYLG9lKSwiYXNjaWkiKSxYPW9lKzEsdGU9ITApO2lmKHRlKXt2YXIgX2U9KGdlPXJlK3Euc2xpY2UoWCkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLWdlLmxlbmd0aCU4O3JlPWdlLnNsaWNlKF9lKSxnZT1nZS5zbGljZSgwLF9lKSxRKz10aGlzLmljb252LmRlY29k''@;'; put 'put ''ZShELmZyb20oZ2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgUSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShYKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND10ZSx0aGlzLmJhc2U2NEFjY3VtPXJlLFF9LFcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIiO3Jl''@;'; put 'put ''dHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlzLmljb252LmRlY29kZShELmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfX0sMjk0MjI6KGNl''@;'; put 'put ''LEopPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQocCxOKXt0aGlzLmVuY29kZXI9cCx0aGlzLmFkZEJPTT0hMH1mdW5jdGlvbiBfKHAsTil7dGhpcy5kZWNvZGVyPXAsdGhpcy5wYXNzPSExLHRoaXMub3B0aW9ucz1OfHx7fX1KLlByZXBlbmRCT009RCxELnByb3RvdHlwZS53cml0ZT1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5hZGRCT00mJihwPSJcdWZlZmYiK3AsdGhpcy5hZGRCT009ITEpLHRoaXMuZW5jb2Rlci53cml0ZShwKX0sRC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sSi5TdHJpcEJPTT1fLF8ucHJvdG90eXBlLndyaXRl''@;'; put 'put ''PWZ1bmN0aW9uKHApe3ZhciBOPXRoaXMuZGVjb2Rlci53cml0ZShwKTtyZXR1cm4gdGhpcy5wYXNzfHwhTnx8KCJcdWZlZmYiPT09TlswXSYmKE49Ti5zbGljZSgxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NJiZ0aGlzLm9wdGlvbnMuc3RyaXBCT00oKSksdGhp''@;'; put 'put ''cy5wYXNzPSEwKSxOfSxfLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTQyNDg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5MzgwNykuQnVmZmVyLF89YigyOTQyMikscD1jZS5leHBvcnRzO3AuZW5jb2RpbmdzPW51bGwscC5k''@;'; put 'put ''ZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIscC5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLHAuZW5jb2RlPWZ1bmN0aW9uKEgsUixqKXtIPSIiKyhIfHwiIik7dmFyIFA9cC5nZXRFbmNvZGVyKFIsaiksTD1QLndyaXRlKEgpLFk9UC5lbmQoKTtyZXR1cm4gWSYmWS5sZW5ndGg+MD9ELmNv''@;'; put 'put ''bmNhdChbTCxZXSk6TH0scC5kZWNvZGU9ZnVuY3Rpb24oSCxSLGopeyJzdHJpbmciPT10eXBlb2YgSCYmKHAuc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVycm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0''@;'; put 'put ''dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIikscC5za2lwRGVjb2RlV2FybmluZz0hMCksSD1ELmZyb20oIiIrKEh8fCIiKSwiYmluYXJ5IikpO3ZhciBQPXAuZ2V0RGVjb2RlcihSLGopLEw9UC53cml0ZShIKSxZ''@;'; put 'put ''PVAuZW5kKCk7cmV0dXJuIFk/TCtZOkx9LHAuZW5jb2RpbmdFeGlzdHM9ZnVuY3Rpb24oSCl7dHJ5e3JldHVybiBwLmdldENvZGVjKEgpLCEwfWNhdGNoe3JldHVybiExfX0scC50b0VuY29kaW5nPXAuZW5jb2RlLHAuZnJvbUVuY29kaW5nPXAuZGVjb2RlLHAuX2NvZGVjRGF0YUNhY2hlPXt9''@;'; put 'put ''LHAuZ2V0Q29kZWM9ZnVuY3Rpb24oSCl7cC5lbmNvZGluZ3N8fChwLmVuY29kaW5ncz1iKDcyODkzKSk7Zm9yKHZhciBSPXAuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nKEgpLGo9e307Oyl7dmFyIFA9cC5fY29kZWNEYXRhQ2FjaGVbUl07aWYoUClyZXR1cm4gUDt2YXIgTD1wLmVuY29kaW5nc1tS''@;'; put 'put ''XTtzd2l0Y2godHlwZW9mIEwpe2Nhc2Uic3RyaW5nIjpSPUw7YnJlYWs7Y2FzZSJvYmplY3QiOmZvcih2YXIgWSBpbiBMKWpbWV09TFtZXTtqLmVuY29kaW5nTmFtZXx8KGouZW5jb2RpbmdOYW1lPVIpLFI9TC50eXBlO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBqLmVuY29kaW5nTmFt''@;'; put 'put ''ZXx8KGouZW5jb2RpbmdOYW1lPVIpLFA9bmV3IEwoaixwKSxwLl9jb2RlY0RhdGFDYWNoZVtqLmVuY29kaW5nTmFtZV09UCxQO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyBub3QgcmVjb2duaXplZDogJyIrSCsiJyAoc2VhcmNoZWQgYXM6ICciK1IrIicpIil9fX0scC5fY2Fu''@;'; put 'put ''b25pY2FsaXplRW5jb2Rpbmc9ZnVuY3Rpb24oRil7cmV0dXJuKCIiK0YpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvOlxkezR9JHxbXjAtOWEtel0vZywiIil9LHAuZ2V0RW5jb2Rlcj1mdW5jdGlvbihILFIpe3ZhciBqPXAuZ2V0Q29kZWMoSCksUD1uZXcgai5lbmNvZGVyKFIsaik7cmV0dXJu''@;'; put 'put ''IGouYm9tQXdhcmUmJlImJlIuYWRkQk9NJiYoUD1uZXcgXy5QcmVwZW5kQk9NKFAsUikpLFB9LHAuZ2V0RGVjb2Rlcj1mdW5jdGlvbihILFIpe3ZhciBqPXAuZ2V0Q29kZWMoSCksUD1uZXcgai5kZWNvZGVyKFIsaik7cmV0dXJuIGouYm9tQXdhcmUmJiEoUiYmITE9PT1SLnN0cmlwQk9NKSYm''@;'; put 'put ''KFA9bmV3IF8uU3RyaXBCT00oUCxSKSksUH07dmFyIE49dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aWYoTil7dmFyIHc9Ti5zcGxpdCgiLiIpLm1hcChOdW1iZXIpOyh3WzBdPjB8fHdbMV0+PTEwKSYmYig2MTA5MykocCksYigx''@;'; put 'put ''NTc5MSkocCl9fSwyMjAyMDooY2UsSik9PntKLnJlYWQ9ZnVuY3Rpb24oYixELF8scCxOKXt2YXIgdyxGLEg9OCpOLXAtMSxSPSgxPDxIKS0xLGo9Uj4+MSxQPS03LEw9Xz9OLTE6MCxZPV8/LTE6MSxCPWJbRCtMXTtmb3IoTCs9WSx3PUImKDE8PC1QKS0xLEI+Pj0tUCxQKz1IO1A+MDt3PTI1''@;'; put 'put ''Nip3K2JbRCtMXSxMKz1ZLFAtPTgpO2ZvcihGPXcmKDE8PC1QKS0xLHc+Pj0tUCxQKz1wO1A+MDtGPTI1NipGK2JbRCtMXSxMKz1ZLFAtPTgpO2lmKDA9PT13KXc9MS1qO2Vsc2V7aWYodz09PVIpcmV0dXJuIEY/TmFOOjEvMCooQj8tMToxKTtGKz1NYXRoLnBvdygyLHApLHctPWp9cmV0dXJu''@;'; put 'put ''KEI/LTE6MSkqRipNYXRoLnBvdygyLHctcCl9LEoud3JpdGU9ZnVuY3Rpb24oYixELF8scCxOLHcpe3ZhciBGLEgsUixqPTgqdy1OLTEsUD0oMTw8aiktMSxMPVA+PjEsWT0yMz09PU4/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLEI9cD8wOnctMSxXPXA/MTotMSxaPUQ8MHx8''@;'; put 'put ''MD09PUQmJjEvRDwwPzE6MDtmb3IoRD1NYXRoLmFicyhEKSxpc05hTihEKXx8RD09PTEvMD8oSD1pc05hTihEKT8xOjAsRj1QKTooRj1NYXRoLmZsb29yKE1hdGgubG9nKEQpL01hdGguTE4yKSxEKihSPU1hdGgucG93KDIsLUYpKTwxJiYoRi0tLFIqPTIpLChEKz1GK0w+PTE/WS9SOlkqTWF0''@;'; put 'put ''aC5wb3coMiwxLUwpKSpSPj0yJiYoRisrLFIvPTIpLEYrTD49UD8oSD0wLEY9UCk6RitMPj0xPyhIPShEKlItMSkqTWF0aC5wb3coMixOKSxGKz1MKTooSD1EKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygyLE4pLEY9MCkpO04+PTg7YltfK0JdPTI1NSZILEIrPVcsSC89MjU2LE4tPTgpO2Zv''@;'; put 'put ''cihGPUY8PE58SCxqKz1OO2o+MDtiW18rQl09MjU1JkYsQis9VyxGLz0yNTYsai09OCk7YltfK0ItV118PTEyOCpafX0sNzE5OTM6Y2U9PntjZS5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGIsRCl7RCYmKGIuc3VwZXJfPUQsYi5wcm90b3R5cGU9''@;'; put 'put ''T2JqZWN0LmNyZWF0ZShELnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihiLEQpe2lmKEQpe2Iuc3VwZXJfPUQ7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUQucHJvdG90''@;'; put 'put ''eXBlLGIucHJvdG90eXBlPW5ldyBfLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fX0sNTgyMzk6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEQsXyxKPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxiPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3Qu''@;'; put 'put ''YXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0Q9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBffX0pLF89e30sYihmdW5jdGlvbigpe3Rocm93IDQy''@;'; put 'put ''fSxudWxsLEQpfWNhdGNoKFEpe1EhPT1fJiYoYj1udWxsKX1lbHNlIGI9bnVsbDt2YXIgcD0vXlxzKmNsYXNzXGIvLE49ZnVuY3Rpb24oWCl7dHJ5e3ZhciB0ZT1KLmNhbGwoWCk7cmV0dXJuIHAudGVzdCh0ZSl9Y2F0Y2h7cmV0dXJuITF9fSx3PWZ1bmN0aW9uKFgpe3RyeXtyZXR1cm4hTihY''@;'; put 'put ''KSYmKEouY2FsbChYKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSxGPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxXPSEoMCBpblssXSksWj1mdW5jdGlvbigpe3JldHVybiExfTtpZigib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGRvY3VtZW50KXt2YXIgcT1kb2N1bWVudC5hbGw7Ri5jYWxsKHEpPT09Ri5jYWxsKGRvY3VtZW50LmFsbCkmJihaPWZ1bmN0aW9uKFgpe2lmKChXfHwhWCkmJih0eXBlb2YgWD4idSJ8fCJvYmplY3QiPT10eXBlb2YgWCkpdHJ5e3ZhciB0ZT1GLmNhbGwoWCk7cmV0dXJuKCJbb2JqZWN0''@;'; put 'put ''IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT10ZXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXRlfHwiW29iamVjdCBIVE1MQ29sbGVjdGlvbl0iPT09dGV8fCJbb2JqZWN0IE9iamVjdF0iPT09dGUpJiZudWxsPT1YKCIiKX1jYXRjaHt9cmV0dXJuITF9KX1jZS5leHBvcnRz''@;'; put 'put ''PWI/ZnVuY3Rpb24oWCl7aWYoWihYKSlyZXR1cm4hMDtpZighWHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFgmJiJvYmplY3QiIT10eXBlb2YgWClyZXR1cm4hMTt0cnl7YihYLG51bGwsRCl9Y2F0Y2godGUpe2lmKHRlIT09XylyZXR1cm4hMX1yZXR1cm4hTihYKSYmdyhYKX06ZnVuY3Rpb24oWCl7''@;'; put 'put ''aWYoWihYKSlyZXR1cm4hMDtpZighWHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFgmJiJvYmplY3QiIT10eXBlb2YgWClyZXR1cm4hMTtpZihCKXJldHVybiB3KFgpO2lmKE4oWCkpcmV0dXJuITE7dmFyIHRlPUYuY2FsbChYKTtyZXR1cm4hKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT10ZSYmIltvYmpl''@;'; put 'put ''Y3QgR2VuZXJhdG9yRnVuY3Rpb25dIiE9PXRlJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHRlKSkmJncoWCl9fSw0NzI5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDQwNjgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuISFEKHApfX0sMjAwNTM6Y2U9Pnt2YXIgSj17''@;'; put 'put ''fS50b1N0cmluZztjZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PUouY2FsbChiKX19LDcwODM3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5hYnN9LDMzODM6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1N''@;'; put 'put ''YXRoLmZsb29yfSw4NTQ4ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oYil7cmV0dXJuIGIhPWJ9fSw3OTAzOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgubWF4fSwxNDk4MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRz''@;'; put 'put ''PU1hdGgubWlufSw4MDk3NTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucG93fSw1MzM3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5yb3VuZH0sNDkxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDg1NDg4KTtjZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBEKHApfHwwPT09cD9wOnA8MD8tMToxfX0sMzQ3MjU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3MTk5MyksXz1iKDEzNjg2KSxwPWIoMjcwNTQpLkJ1ZmZlcixOPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe18uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3''@;'; put 'put ''MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBGKEwsWSl7cmV0dXJuIEw8PFl8TD4+PjMyLVl9ZnVuY3Rpb24gSChMLFksQixXLFoscSxRKXtyZXR1cm4gRihMKyhZJkJ8flkmVykrWitxfDAsUSkrWXwwfWZ1''@;'; put 'put ''bmN0aW9uIFIoTCxZLEIsVyxaLHEsUSl7cmV0dXJuIEYoTCsoWSZXfEImflcpK1orcXwwLFEpK1l8MH1mdW5jdGlvbiBqKEwsWSxCLFcsWixxLFEpe3JldHVybiBGKEwrKFleQl5XKStaK3F8MCxRKStZfDB9ZnVuY3Rpb24gUChMLFksQixXLFoscSxRKXtyZXR1cm4gRihMKyhCXihZfH5XKSkr''@;'; put 'put ''WitxfDAsUSkrWXwwfUQodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPU4sWT0wO1k8MTY7KytZKUxbWV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpZKTt2YXIgQj10aGlzLl9hLFc9dGhpcy5fYixaPXRoaXMuX2MscT10aGlzLl9kO0I9SChCLFcsWixx''@;'; put 'put ''LExbMF0sMzYxNDA5MDM2MCw3KSxxPUgocSxCLFcsWixMWzFdLDM5MDU0MDI3MTAsMTIpLFo9SChaLHEsQixXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUgoVyxaLHEsQixMWzNdLDMyNTA0NDE5NjYsMjIpLEI9SChCLFcsWixxLExbNF0sNDExODU0ODM5OSw3KSxxPUgocSxCLFcsWixMWzVdLDEy''@;'; put 'put ''MDAwODA0MjYsMTIpLFo9SChaLHEsQixXLExbNl0sMjgyMTczNTk1NSwxNyksVz1IKFcsWixxLEIsTFs3XSw0MjQ5MjYxMzEzLDIyKSxCPUgoQixXLFoscSxMWzhdLDE3NzAwMzU0MTYsNykscT1IKHEsQixXLFosTFs5XSwyMzM2NTUyODc5LDEyKSxaPUgoWixxLEIsVyxMWzEwXSw0Mjk0OTI1''@;'; put 'put ''MjMzLDE3KSxXPUgoVyxaLHEsQixMWzExXSwyMzA0NTYzMTM0LDIyKSxCPUgoQixXLFoscSxMWzEyXSwxODA0NjAzNjgyLDcpLHE9SChxLEIsVyxaLExbMTNdLDQyNTQ2MjYxOTUsMTIpLFo9SChaLHEsQixXLExbMTRdLDI3OTI5NjUwMDYsMTcpLEI9UihCLFc9SChXLFoscSxCLExbMTVdLDEy''@;'; put 'put ''MzY1MzUzMjksMjIpLFoscSxMWzFdLDQxMjkxNzA3ODYsNSkscT1SKHEsQixXLFosTFs2XSwzMjI1NDY1NjY0LDkpLFo9UihaLHEsQixXLExbMTFdLDY0MzcxNzcxMywxNCksVz1SKFcsWixxLEIsTFswXSwzOTIxMDY5OTk0LDIwKSxCPVIoQixXLFoscSxMWzVdLDM1OTM0MDg2MDUsNSkscT1S''@;'; put 'put ''KHEsQixXLFosTFsxMF0sMzgwMTYwODMsOSksWj1SKFoscSxCLFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1SKFcsWixxLEIsTFs0XSwzODg5NDI5NDQ4LDIwKSxCPVIoQixXLFoscSxMWzldLDU2ODQ0NjQzOCw1KSxxPVIocSxCLFcsWixMWzE0XSwzMjc1MTYzNjA2LDkpLFo9UihaLHEsQixX''@;'; put 'put ''LExbM10sNDEwNzYwMzMzNSwxNCksVz1SKFcsWixxLEIsTFs4XSwxMTYzNTMxNTAxLDIwKSxCPVIoQixXLFoscSxMWzEzXSwyODUwMjg1ODI5LDUpLHE9UihxLEIsVyxaLExbMl0sNDI0MzU2MzUxMiw5KSxaPVIoWixxLEIsVyxMWzddLDE3MzUzMjg0NzMsMTQpLEI9aihCLFc9UihXLFoscSxC''@;'; put 'put ''LExbMTJdLDIzNjgzNTk1NjIsMjApLFoscSxMWzVdLDQyOTQ1ODg3MzgsNCkscT1qKHEsQixXLFosTFs4XSwyMjcyMzkyODMzLDExKSxaPWooWixxLEIsVyxMWzExXSwxODM5MDMwNTYyLDE2KSxXPWooVyxaLHEsQixMWzE0XSw0MjU5NjU3NzQwLDIzKSxCPWooQixXLFoscSxMWzFdLDI3NjM5''@;'; put 'put ''NzUyMzYsNCkscT1qKHEsQixXLFosTFs0XSwxMjcyODkzMzUzLDExKSxaPWooWixxLEIsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9aihXLFoscSxCLExbMTBdLDMyMDAyMzY2NTYsMjMpLEI9aihCLFcsWixxLExbMTNdLDY4MTI3OTE3NCw0KSxxPWoocSxCLFcsWixMWzBdLDM5MzY0MzAwNzQs''@;'; put 'put ''MTEpLFo9aihaLHEsQixXLExbM10sMzU3MjQ0NTMxNywxNiksVz1qKFcsWixxLEIsTFs2XSw3NjAyOTE4OSwyMyksQj1qKEIsVyxaLHEsTFs5XSwzNjU0NjAyODA5LDQpLHE9aihxLEIsVyxaLExbMTJdLDM4NzMxNTE0NjEsMTEpLFo9aihaLHEsQixXLExbMTVdLDUzMDc0MjUyMCwxNiksQj1Q''@;'; put 'put ''KEIsVz1qKFcsWixxLEIsTFsyXSwzMjk5NjI4NjQ1LDIzKSxaLHEsTFswXSw0MDk2MzM2NDUyLDYpLHE9UChxLEIsVyxaLExbN10sMTEyNjg5MTQxNSwxMCksWj1QKFoscSxCLFcsTFsxNF0sMjg3ODYxMjM5MSwxNSksVz1QKFcsWixxLEIsTFs1XSw0MjM3NTMzMjQxLDIxKSxCPVAoQixXLFos''@;'; put 'put ''cSxMWzEyXSwxNzAwNDg1NTcxLDYpLHE9UChxLEIsVyxaLExbM10sMjM5OTk4MDY5MCwxMCksWj1QKFoscSxCLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1QKFcsWixxLEIsTFsxXSwyMjQwMDQ0NDk3LDIxKSxCPVAoQixXLFoscSxMWzhdLDE4NzMzMTMzNTksNikscT1QKHEsQixXLFosTFsx''@;'; put 'put ''NV0sNDI2NDM1NTU1MiwxMCksWj1QKFoscSxCLFcsTFs2XSwyNzM0NzY4OTE2LDE1KSxXPVAoVyxaLHEsQixMWzEzXSwxMzA5MTUxNjQ5LDIxKSxCPVAoQixXLFoscSxMWzRdLDQxNDk0NDQyMjYsNikscT1QKHEsQixXLFosTFsxMV0sMzE3NDc1NjkxNywxMCksWj1QKFoscSxCLFcsTFsyXSw3''@;'; put 'put ''MTg3ODcyNTksMTUpLFc9UChXLFoscSxCLExbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK0J8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytafDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Js''@;'; put 'put ''b2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0''@;'; put 'put ''LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBMPXAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9h''@;'; put 'put ''LDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSxjZS5leHBvcnRzPXd9LDUzNDU5OihjZSxKLGIpPT57dmFyIEQ9Yig1NzIyMyksXz1iKDM1Mjk0KTtmdW5jdGlvbiBwKE4pe3RoaXMucmFu''@;'; put 'put ''ZD1OfHxuZXcgXy5SYW5kfWNlLmV4cG9ydHM9cCxwLmNyZWF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IHAodyl9LHAucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFyIEY9dy5iaXRMZW5ndGgoKSxIPU1hdGguY2VpbChGLzgpO2Rve3ZhciBSPW5ldyBEKHRoaXMucmFuZC5n''@;'; put 'put ''ZW5lcmF0ZShIKSl9d2hpbGUoUi5jbXAodyk+PTApO3JldHVybiBSfSxwLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsRil7dmFyIEg9Ri5zdWIodyk7cmV0dXJuIHcuYWRkKHRoaXMuX3JhbmRiZWxvdyhIKSl9LHAucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxGLEgpe3ZhciBS''@;'; put 'put ''PXcuYml0TGVuZ3RoKCksaj1ELm1vbnQodyksUD1uZXcgRCgxKS50b1JlZChqKTtGfHwoRj1NYXRoLm1heCgxLFIvNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksWT0wOyFMLnRlc3RuKFkpO1krKyk7Zm9yKHZhciBCPXcuc2hybihZKSxXPUwudG9SZWQoaik7Rj4wO0YtLSl7dmFyIHE9dGhp''@;'; put 'put ''cy5fcmFuZHJhbmdlKG5ldyBEKDIpLEwpO0gmJkgocSk7dmFyIFE9cS50b1JlZChqKS5yZWRQb3coQik7aWYoMCE9PVEuY21wKFApJiYwIT09US5jbXAoVykpe2Zvcih2YXIgWD0xO1g8WTtYKyspe2lmKDA9PT0oUT1RLnJlZFNxcigpKS5jbXAoUCkpcmV0dXJuITE7aWYoMD09PVEuY21wKFcp''@;'; put 'put ''KWJyZWFrfWlmKFg9PT1ZKXJldHVybiExfX1yZXR1cm4hMH0scC5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih3LEYpe3ZhciBIPXcuYml0TGVuZ3RoKCksUj1ELm1vbnQodyksaj1uZXcgRCgxKS50b1JlZChSKTtGfHwoRj1NYXRoLm1heCgxLEgvNDh8MCkpO2Zvcih2YXIgUD13LnN1''@;'; put 'put ''Ym4oMSksTD0wOyFQLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBZPXcuc2hybihMKSxCPVAudG9SZWQoUik7Rj4wO0YtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBEKDIpLFApLFo9dy5nY2QoVyk7aWYoMCE9PVouY21wbigxKSlyZXR1cm4gWjt2YXIgcT1XLnRvUmVkKFIpLnJlZFBvdyhZ''@;'; put 'put ''KTtpZigwIT09cS5jbXAoaikmJjAhPT1xLmNtcChCKSl7Zm9yKHZhciBRPTE7UTxMO1ErKyl7aWYoMD09PShxPXEucmVkU3FyKCkpLmNtcChqKSlyZXR1cm4gcS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PXEuY21wKEIpKWJyZWFrfWlmKFE9PT1MKXJldHVybihxPXEucmVkU3Fy''@;'; put 'put ''KCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw1NzIyMzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihELF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHosZyl7aWYoIXopdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gTih6''@;'; put 'put ''LGcpe3ouc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLHoucHJvdG90eXBlPW5ldyB5LHoucHJvdG90eXBlLmNvbnN0cnVjdG9yPXp9ZnVuY3Rpb24gdyh6LGcseSl7aWYody5pc0JOKHopKXJldHVybiB6O3RoaXMubmVnYXRpdmU9MCx0aGlzLndv''@;'; put 'put ''cmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT16JiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdCh6fHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgRjsib2JqZWN0Ij09dHlwZW9mIEQ/RC5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3''@;'; put 'put ''LndvcmRTaXplPTI2O3RyeXtGPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY0Njg4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEgoeixnKXt2YXIgeT16LmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+''@;'; put 'put ''PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoeixnLHkpe3ZhciB4PUgoeix5KTtyZXR1cm4geS0xPj1nJiYoeHw9SCh6LHktMSk8PDQpLHh9ZnVuY3Rpb24gaih6LGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKHoubGVuZ3RoLHkpLFY9ZztWPFQ7VisrKXt2YXIgVT16''@;'; put 'put ''LmNoYXJDb2RlQXQoViktNDg7Qyo9eCxDKz1VPj00OT9VLTQ5KzEwOlU+PTE3P1UtMTcrMTA6VX1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53''@;'; put 'put ''b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmco''@;'; put 'put ''KS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcx''@;'; put 'put ''MDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRz''@;'; put 'put ''PW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULFYsVT0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oVj1nW0NdfGdbQy0xXTw8OHxnW0MtMl08''@;'; put 'put ''PDE2KTw8VSY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09Vj4+PjI2LVUmNjcxMDg4NjMsKFUrPTI0KT49MjYmJihVLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShWPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYp''@;'; put 'put ''PDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkp''@;'; put 'put ''LzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFUsVD0wLFY9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18''@;'; put 'put ''PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMud29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilVPVIoZyx5LEMpPDxULHRoaXMud29yZHNbVl18PTY3MTA4ODYzJlUsVD49MTg/KFQtPTE4LHRoaXMu''@;'; put 'put ''d29yZHNbVis9MV18PVU+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIg''@;'; put 'put ''Vj1nLmxlbmd0aC14LFU9ViVDLEU9TWF0aC5taW4oVixWLVUpK3gsbT0wLEE9eDtBPEU7QSs9QyltPWooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1VKXt2YXIgYWU9MTtmb3Io''@;'; put 'put ''bT1qKGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxVO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcg''@;'; put 'put ''QXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBQPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sWT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQw''@;'; put 'put ''MzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0''@;'; put 'put ''MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeei5uZWdhdGl2ZTt2YXIgeD16Lmxlbmd0aCtnLmxlbmd0aHwwO3ku''@;'; put 'put ''bGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfHoud29yZHNbMF0sVD0wfGcud29yZHNbMF0sVj1DKlQsRT1WLzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZWO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVu''@;'; put 'put ''Z3RoLTEpLGxlPU1hdGgubWF4KDAsbS16Lmxlbmd0aCsxKTtsZTw9bmU7bGUrKylBKz0oVj0oQz0wfHoud29yZHNbbS1sZXwwXSkqKFQ9MHxnLndvcmRzW2xlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmVjt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNb''@;'; put 'put ''bV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsVj0wO1Y8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT10aGlzLndv''@;'; put 'put ''cmRzW1ZdLEU9KDE2Nzc3MjE1JihVPDxDfFQpKS50b1N0cmluZygxNik7VD1VPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsVi0tKSx4PTAhPT1UfHxWIT09dGhpcy5sZW5ndGgtMT9QWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4''@;'; put 'put ''KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09TFtnXSxBPVlbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTsp''@;'; put 'put ''e3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4OlBbbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9''@;'; put 'put ''Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgRjwidSIpLHRoaXMudG9BcnJheUxpa2UoRixnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0''@;'; put 'put ''dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxw''@;'; put 'put ''KFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sVj0ibGUiPT09eSxVPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKFYpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbbV09RTtmb3IoO208''@;'; put 'put ''VDttKyspVVttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspVVttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLFVbVC1tLTFdPUV9cmV0dXJuIFV9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiA4MTkxJnl8fCh4Kz0xMyx5Pj4+PTEzKSwxMjcmeXx8KHgrPTcseT4+Pj03KSwxNSZ5fHwoeCs9NCx5Pj4+PTQpLDMmeXx8KHgrPTIseT4+Pj0yKSwxJnl8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5n''@;'; put 'put ''dGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0w''@;'; put 'put ''O3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90''@;'; put 'put ''b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFk''@;'; put 'put ''ZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndv''@;'; put 'put ''cmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcp''@;'; put 'put ''OmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3Ro''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tD''@;'; put 'put ''XTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtw''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJl''@;'; put 'put ''dHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxWPTA7VjxDLmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT02NzEwODg2MyYoeT0o''@;'; put 'put ''MHx4LndvcmRzW1ZdKSsoMHxDLndvcmRzW1ZdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Vjx4Lmxlbmd0aDtWKyspdGhpcy53b3Jkc1tWXT14LndvcmRzW1ZdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlz''@;'; put 'put ''LmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhp''@;'; put 'put ''czt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIFY9MCxVPTA7VTxULmxlbmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKS0oMHxULndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2Zvcig7MCE9PVYmJlU8Qy5sZW5ndGg7VSsrKVY9KHk9KDB8''@;'; put 'put ''Qy53b3Jkc1tVXSkrVik+PjI2LHRoaXMud29yZHNbVV09NjcxMDg4NjMmeTtpZigwPT09ViYmVTxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtVPEMubGVuZ3RoO1UrKyl0aGlzLndvcmRzW1VdPUMud29yZHNbVV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFUpLEMh''@;'; put 'put ''PT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBaPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxWPXgud29yZHMsVT0wLGFl''@;'; put 'put ''PTB8Q1swXSxuZT04MTkxJmFlLGxlPWFlPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsUWU9d2U+Pj4xMyxvdD0wfENbMl0sTWU9ODE5MSZvdCx2ZT1vdD4+PjEzLFhlPTB8Q1szXSxCZT04MTkxJlhlLEFlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxIZT0wfENb''@;'; put 'put ''NV0sRGU9ODE5MSZIZSxrZT1IZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LEplPV90Pj4+MTMsbG49MHxDWzddLHl0PTgxOTEmbG4sU3Q9bG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxOZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0''@;'; put 'put ''PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxjaT0wfFRbMV0sUXQ9ODE5MSZjaSxzbj1jaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkx''@;'; put 'put ''JnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxqbj0wfFRbN10scm49ODE5MSZqbix6dD1qbj4+PjEzLGhpPTB8VFs4XSx1bj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVe''@;'; put 'put ''eS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWE9KFUrKEU9TWF0aC5pbXVsKG5lLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxQdCkpK01hdGguaW11bChsZSxSdCl8MCkpPDwxMyl8MDtVPSgoQT1NYXRoLmltdWwobGUsUHQpKSsobT4+PjEzKXwwKSsodWE+Pj4yNil8MCx1''@;'; put 'put ''YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KTt2YXIgRWk9KFUrKEU9RStNYXRoLmltdWwobmUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxzbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGxlLFF0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHNuKXwwKSsobT4+PjEzKXwwKSsoRWk+Pj4yNil8MCxFaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwO3ZhciB2cj0oVSsoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwobGUsaG4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChCZSxSdCksbT0obT1NYXRoLmltdWwoQmUsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MDt2YXIgV249KFUrKEU9RStNYXRoLmltdWwobmUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKGxlLFd0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLEF0KXwwKSso''@;'; put 'put ''bT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKEJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoQmUsc24pfDAp''@;'; put 'put ''K01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MDt2YXIgJGk9KFUrKEU9RStNYXRoLmltdWwobmUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxVdCl8MCkrTWF0aC5pbXVsKGxlLHN0KXwwKSk8PDEzKXwwO1U9''@;'; put 'put ''KChBPUErTWF0aC5pbXVsKGxlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoRGUsUnQpLG09KG09TWF0aC5pbXVsKERlLFB0KSkrTWF0aC5pbXVsKGtlLFJ0KXwwLEE9TWF0aC5pbXVsKGtlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoQmUsaG4pfDAsbT0obT1tK01hdGguaW11bChCZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLFV0KXwwO3ZhciBlaT0oVSsoRT1FK01hdGguaW11bChuZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwobGUsV2UpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2''@;'; put 'put ''KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpLEU9RStNYXRoLmltdWwoRGUsUXQpfDAsbT0obT1tK01hdGguaW11bChEZSxzbil8MCkrTWF0aC5pbXVsKGtlLFF0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoa2Usc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKEJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoQmUsQXQpfDAp''@;'; put 'put ''K01hdGguaW11bChBZSxXdCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MDt2YXIgUXI9KFUrKEU9RStNYXRoLmltdWwobmUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx4dCl8MCkrTWF0aC5pbXVsKGxlLGh0KXwwKSk8PDEzKXwwO1U9''@;'; put 'put ''KChBPUErTWF0aC5pbXVsKGxlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKFN0LFJ0KXwwLEE9TWF0aC5pbXVsKFN0LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwLEU9RStNYXRoLmltdWwoRGUsaG4pfDAsbT0obT1tK01hdGguaW11bChEZSxmdCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsZnQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoQmUsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MDt2YXIgVmk9KFUrKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGxlLHJuKXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLHp0KXwwKSso''@;'; put 'put ''bT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDAp''@;'; put 'put ''K01hdGguaW11bChTdCxRdCl8MCxBPUErTWF0aC5pbXVsKFN0LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDAsRT1FK01hdGguaW11bChEZSxXdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKERlLEF0KXwwKStNYXRoLmltdWwoa2UsV3QpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoQmUsV2UpfDAsbT0obT1tK01hdGguaW11bChCZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2''@;'; put 'put ''ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwO3ZhciBOaT0oVSsoRT1FK01hdGguaW11bChuZSx1bil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LGZuKXwwKStNYXRoLmltdWwobGUsdW4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxSdCksbT0obT1NYXRoLmltdWwoTmUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChKZSxXdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwLEU9RStNYXRoLmltdWwoRGUsc3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChEZSxVdCl8MCkrTWF0aC5pbXVsKGtlLHN0KXwwLEE9QStNYXRoLmltdWwoa2UsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEJlLGh0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoQmUseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChVZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoUWUsdW4pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgRGE9KFUrKEU9RStNYXRoLmltdWwobmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxlbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGxlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKGxlLGVuKXwwKSsobT4+PjEzKXwwKSsoRGE+Pj4yNil8MCxEYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsUXQpLG09KG09TWF0aC5pbXVsKE5lLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKFN0LFd0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MCxFPUUrTWF0aC5pbXVsKERlLFdlKXwwLG09KG09bStNYXRoLmltdWwoRGUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChrZSxXZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChCZSxybil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKEJlLHp0KXwwKStNYXRoLmltdWwoQWUscm4pfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHVuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSx1bil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0o''@;'; put 'put ''VSsoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChOZSxobiksbT0obT1NYXRoLmltdWwoTmUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoU3Qsc3QpfDAsQT1BK01hdGguaW11bChTdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEplLFR0KXwwLEU9RStNYXRoLmltdWwoRGUsaHQpfDAsbT0obT1tK01hdGguaW11bChEZSx4dCl8MCkrTWF0aC5pbXVsKGtlLGh0KXwwLEE9QStNYXRoLmltdWwoa2UseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoQmUsZm4pfDApK01hdGguaW11bChBZSx1bil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBXaT0oVSsoRT1FK01hdGguaW11bChNZSxYdCl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXdCksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''TmUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoU3QsV2UpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoRGUscm4pfDAsbT0obT1tK01hdGguaW11bChEZSx6dCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bChSZSx1bil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsdW4pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChJZSxmbil8MDt2YXIgcGE9KFUrKEU9RStNYXRoLmltdWwoQmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChCZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsocGE+Pj4yNil8MCxw''@;'; put 'put ''YSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUsc3QpLG09KG09TWF0aC5pbXVsKE5lLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKFN0LGh0KXwwLEE9QStNYXRoLmltdWwoU3QseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MCxFPUUrTWF0aC5pbXVsKERlLHVuKXwwLG09KG09bStNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bChrZSx1bil8MCxBPUErTWF0aC5pbXVsKGtlLGZuKXwwO3ZhciBRbj0oVSsoRT1FK01hdGguaW11bChSZSxYdCl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxXZSksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''TmUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LHVuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChKZSx1bil8MCxBPUErTWF0aC5pbXVsKEplLGZuKXwwO3ZhciBsYT0o''@;'; put 'put ''VSsoRT1FK01hdGguaW11bChEZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKERlLGVuKXwwKStNYXRoLmltdWwoa2UsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoa2UsZW4pfDApKyhtPj4+MTMpfDApKyhsYT4+PjI2KXwwLGxhJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChOZSxodCksbT0obT1NYXRoLmltdWwoTmUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh5dCx1bil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoU3QsdW4pfDAsQT1BK01hdGguaW11bChTdCxmbil8MDt2YXIgYmE9KFUrKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO1U9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoYmE+Pj4yNil8MCxiYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTmUscm4pLG09KG09TWF0aC5pbXVsKE5lLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVs''@;'; put 'put ''KHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSx1bil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBMYT0oVSsoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0''@;'; put 'put ''LGVuKXwwKStNYXRoLmltdWwoU3QsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoU3QsZW4pfDApKyhtPj4+MTMpfDApKyhMYT4+PjI2KXwwLExhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSx1biksbT0obT1NYXRoLmltdWwoTmUsZm4pKStNYXRoLmltdWwodXQsdW4pfDAsQT1N''@;'; put 'put ''YXRoLmltdWwodXQsZm4pO3ZhciBGYT0oVSsoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhGYT4+PjI2''@;'; put 'put ''KXwwLEZhJj02NzEwODg2Mzt2YXIgdGk9KFUrKEU9TWF0aC5pbXVsKE5lLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChOZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gVT0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAs''@;'; put 'put ''dGkmPTY3MTA4ODYzLFZbMF09dWEsVlsxXT1FaSxWWzJdPXZyLFZbM109V24sVls0XT0kaSxWWzVdPWVpLFZbNl09UXIsVls3XT1WaSxWWzhdPU5pLFZbOV09RGEsVlsxMF09THIsVlsxMV09V2ksVlsxMl09cGEsVlsxM109UW4sVlsxNF09bGEsVlsxNV09YmEsVlsxNl09TGEsVlsxN109RmEs''@;'; put 'put ''VlsxOF09dGksMCE9PVUmJihWWzE5XT1VLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIFEoeixnLHkpe3JldHVybihuZXcgWCkubXVscCh6LGcseSl9ZnVuY3Rpb24gWCh6LGcpe3RoaXMueD16LHRoaXMueT1nfU1hdGguaW11bHx8KFo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5''@;'; put 'put ''KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Wih0aGlzLGcseSk6Qzw2Mz9XKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcSh6LGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnoubmVnYXRpdmUseS5sZW5n''@;'; put 'put ''dGg9ei5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgVj1DO0M9MDtmb3IodmFyIFU9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtei5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBsZT0oMHx6''@;'; put 'put ''LndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLHdlPTY3MTA4ODYzJmxlO1U9NjcxMDg4NjMmKHdlPXdlK1V8MCksQys9KFY9KFY9VisobGUvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsViY9NjcxMDg4NjN9eS53b3Jkc1tUXT1VLHg9VixWPUN9cmV0dXJuIDAhPT14P3kud29y''@;'; put 'put ''ZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOlEodGhpcyxnLHkpLHh9LFgucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2''@;'; put 'put ''QmluKEMseCxnKTtyZXR1cm4geX0sWC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LFgucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rp''@;'; put 'put ''b24oZyx5LHgsQyxULFYpe2Zvcih2YXIgVT0wO1U8VjtVKyspQ1tVXT15W2dbVV1dLFRbVV09eFtnW1VdXX0sWC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxWKXt0aGlzLnBlcm11dGUoVixnLHkseCxDLFQpO2Zvcih2YXIgVT0xO1U8VDtVPDw9MSlmb3IodmFyIEU9''@;'; put 'put ''VTw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLGxlPUEsd2U9MDt3ZTxVO3dlKyspe3ZhciBVZT14W2FlK3dlXSxRZT1DW2FlK3dlXSxvdD14W2FlK3dlK1VdLE1lPUNbYWUrd2UrVV0sdmU9bmUq''@;'; put 'put ''b3QtbGUqTWU7TWU9bmUqTWUrbGUqb3QseFthZSt3ZV09VWUrKG90PXZlKSxDW2FlK3dlXT1RZStNZSx4W2FlK3dlK1VdPVVlLW90LENbYWUrd2UrVV09UWUtTWUsd2UhPT1FJiYodmU9bSpuZS1BKmxlLGxlPW0qbGUrQSpuZSxuZT12ZSl9fSxYLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sWC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tD''@;'; put 'put ''XTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sWC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01h''@;'; put 'put ''dGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sWC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxWPTA7Vjx5O1YrKyl4WzIqVl09ODE5MSYoVCs9MHxnW1ZdKSx4''@;'; put 'put ''WzIqVisxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihWPTIqeTtWPEM7KytWKXhbVl09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxYLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxYLnBy''@;'; put 'put ''b3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLFY9dGhpcy5zdHViKEMpLFU9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMp''@;'; put 'put ''LGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksbGU9eC53b3JkcztsZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxVLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oVSxWLEUsbSxDLFQpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKEEsVixhZSxuZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSphZVt3ZV0tbVt3ZV0qbmVbd2VdO21bd2VdPUVbd2VdKm5lW3dlXSttW3dlXSphZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9y''@;'; put 'put ''bShFLG0sbGUsVixDLFQpLHRoaXMuY29uanVnYXRlKGxlLFYsQyksdGhpcy5ub3JtYWxpemUxM2IobGUsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFy''@;'; put 'put ''IHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cu''@;'; put 'put ''bGVuZ3RoKSxRKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9''@;'; put 'put ''MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09Zz8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gQih6KXtmb3IodmFyIGc9bmV3IEFycmF5KHouYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9''@;'; put 'put ''eSUyNjtnW3ldPSh6LndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXgu''@;'; put 'put ''c3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8''@;'; put 'put ''PDI2LXk7aWYoMCE9PXkpe3ZhciBWPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIFU9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktVTw8eXxWLFY9VT4+PjI2LXl9ViYmKHRoaXMud29yZHNbVF09Vix0aGlzLmxlbmd0aCsrKX1pZigwIT09''@;'; put 'put ''eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixWPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVu''@;'; put 'put ''Z3RoKSxVPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09VixDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxWO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9Vn1pZigwIT09VilpZih0aGlzLmxlbmd0aD5WKWZvcih0aGlzLmxlbmd0aC09Vixt''@;'; put 'put ''PTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rVl07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhp''@;'; put 'put ''cy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJlV9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihn''@;'; put 'put ''LHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1''@;'; put 'put ''c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0o''@;'; put 'put ''Zy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNb''@;'; put 'put ''dGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0''@;'; put 'put ''aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7''@;'; put 'put ''cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgVixV''@;'; put 'put ''PTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7Vj0oMHx0aGlzLndvcmRzW1QreF0pK1U7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtVPSgoVi09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVn1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKysp''@;'; put 'put ''VT0oVj0oMHx0aGlzLndvcmRzW1QreF0pK1UpPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmVjtpZigwPT09VSlyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09VSksVT0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylVPShWPS0oMHx0aGlzLndvcmRzW1RdKStVKT4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tUXT02NzEwODg2MyZWO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxWPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMo''@;'; put 'put ''VikpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8''@;'; put 'put ''bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIGxlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5n''@;'; put 'put ''dGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3IobGU9TWF0aC5taW4obGUvVnwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULGxlLG5lKTswIT09Qy5uZWdhdGl2ZTspbGUtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5u''@;'; put 'put ''ZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPWxlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVy''@;'; put 'put ''bygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPVYuZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAh''@;'; put 'put ''PT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oVj10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6Vi5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVn''@;'; put 'put ''YXRpdmU/KFY9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPVYubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6Vi5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1v''@;'; put 'put ''ZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5t''@;'; put 'put ''b2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsVn0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9k''@;'; put 'put ''IiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIg''@;'; put 'put ''eD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLFY9eC5jbXAoQyk7cmV0dXJuIFY8MHx8MT09PVQmJjA9PT1WP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4''@;'; put 'put ''ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3''@;'; put 'put ''IHcoMCksVj1uZXcgdygwKSxVPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkm''@;'; put 'put ''JmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgbGU9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJmxlPDI2''@;'; put 'put ''OysrbGUsd2U8PD0xKTtpZihsZT4wKWZvcih4Lml1c2hybihsZSk7bGUtLSA+MDspKFYuaXNPZGQoKXx8VS5pc09kZCgpKSYmKFYuaWFkZChtKSxVLmlzdWIoQSkpLFYuaXVzaHJuKDEpLFUuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFYpLFQuaXN1YihVKSk6KHgu''@;'; put 'put ''aXN1Yih5KSxWLmlzdWIoQyksVS5pc3ViKFQpKX1yZXR1cm57YTpWLGI6VSxnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0''@;'; put 'put ''aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksVj14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBVPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmVTwyNjsrK1UsRTw8PTEpO2lmKFU+MClmb3IoeS5pdXNocm4oVSk7''@;'; put 'put ''VS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChWKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKFYpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0w''@;'; put 'put ''Pyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNF''@;'; put 'put ''dmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgVj15O3k9eCx4PVZ9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''bnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFu''@;'; put 'put ''ZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxWPXg7MCE9PVQmJlY8dGhpcy5sZW5ndGg7VisrKXt2YXIgVT0wfHRoaXMud29yZHNbVl07VD0oVSs9VCk+Pj4yNix0aGlzLndvcmRzW1ZdPVUmPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbVl09VCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJu''@;'; put 'put ''LTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1''@;'; put 'put ''cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAo''@;'; put 'put ''Zyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4''@;'; put 'put ''LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''LTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNt''@;'; put 'put ''cChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFNlKGcpfSx3LnByb3RvdHlwZS50b1Jl''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp''@;'; put 'put ''ZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciB0ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHJlKHosZyl7dGhpcy5uYW1l''@;'; put 'put ''PXosdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBvZSgpe3JlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtyZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9u''@;'; put 'put ''IF9lKCl7cmUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe3JlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2Uoeil7aWYoInN0cmluZyI9PXR5cGVvZiB6KXt2YXIgZz13Ll9wcmltZSh6KTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoei5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT16LHRo''@;'; put 'put ''aXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZSh6KXtTZS5jYWxsKHRoaXMseiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5y''@;'; put 'put ''Mj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIo''@;'; put 'put ''dGhpcy5taW52KX1yZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30scmUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQo''@;'; put 'put ''eSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhp''@;'; put 'put ''cy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LHJlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxyZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxOKG9lLHJlKSxv''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0''@;'; put 'put ''aD0xKTt2YXIgVj1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPVYmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgVT0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oVSZ4KTw8NHxWPj4+MjIsVj1VfWcud29yZHNbVC0xMF09Vj4+Pj0yMixnLmxlbmd0aC09MD09PVYmJmcu''@;'; put 'put ''bGVuZ3RoPjEwPzEwOjl9LG9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3''@;'; put 'put ''MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LE4oZ2UscmUpLE4oX2UscmUpLE4oVGUscmUpLFRlLnByb3RvdHlwZS5p''@;'; put 'put ''bXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1''@;'; put 'put ''bmN0aW9uKGcpe2lmKHRlW2ddKXJldHVybiB0ZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IG9lO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBy''@;'; put 'put ''aW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHRlW2ddPXkseX0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0''@;'; put 'put ''aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTty''@;'; put 'put ''ZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90''@;'; put 'put ''b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LFNlLnByb3RvdHlwZS5t''@;'; put 'put ''dWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxTZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bChnLGcpfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBv''@;'; put 'put ''dyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIFY9bmV3IHcoMSkudG9SZWQodGhpcyksVT1WLnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09''@;'; put 'put ''dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoVSk7KW0ucmVkSUFkZChVKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyks''@;'; put 'put ''bGU9VDswIT09bmUuY21wKFYpOyl7Zm9yKHZhciB3ZT1uZSxVZT0wOzAhPT13ZS5jbXAoVik7VWUrKyl3ZT13ZS5yZWRTcXIoKTtwKFVlPGxlKTt2YXIgUWU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4obGUtVWUtMSkpO2FlPWFlLnJlZE11bChRZSksQT1RZS5yZWRTcXIoKSxuZT1uZS5y''@;'; put 'put ''ZWRNdWwoQSksbGU9VWV9cmV0dXJuIGFlfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxTZS5wcm90b3R5cGUu''@;'; put 'put ''cG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxl''@;'; put 'put ''bmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIFY9Q1swXSxVPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUm''@;'; put 'put ''MTtWIT09Q1swXSYmKFY9dGhpcy5zcXIoVikpLDAhPT1uZXx8MCE9PVU/KFU8PD0xLFV8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoVj10aGlzLm11bChWLENbVV0pLEU9MCxVPTApKTpFPTB9bT0yNn1yZXR1cm4gVn0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgemUoZyl9LE4oemUsU2Up''@;'; put 'put ''LHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5''@;'; put 'put ''fSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLFY9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9WPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoVj1ULmlhZGQodGhpcy5tKSksVi5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4o''@;'; put 'put ''dGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0''@;'; put 'put ''aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSwzOTIxMDpjZT0+e2Z1bmN0aW9uIEooYixEKXtpZighYil0aHJvdyBuZXcgRXJyb3IoRHx8IkFzc2VydGlvbiBmYWlsZWQiKX1jZS5leHBvcnRzPUosSi5lcXVhbD1mdW5jdGlvbihELF8s''@;'; put 'put ''cCl7aWYoRCE9Xyl0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrRCsiICE9ICIrXyl9fSwyMTgzMjooY2UsSik9PnsidXNlIHN0cmljdCI7dmFyIGI9SjtmdW5jdGlvbiBfKE4pe3JldHVybiAxPT09Ti5sZW5ndGg/IjAiK046Tn1mdW5jdGlvbiBwKE4pe2Zvcih2YXIg''@;'; put 'put ''dz0iIixGPTA7RjxOLmxlbmd0aDtGKyspdys9XyhOW0ZdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9Yi50b0FycmF5PWZ1bmN0aW9uIEQoTix3KXtpZihBcnJheS5pc0FycmF5KE4pKXJldHVybiBOLnNsaWNlKCk7aWYoIU4pcmV0dXJuW107dmFyIEY9W107aWYoInN0cmluZyIhPXR5cGVvZiBO''@;'; put 'put ''KXtmb3IodmFyIEg9MDtIPE4ubGVuZ3RoO0grKylGW0hdPTB8TltIXTtyZXR1cm4gRn1pZigiaGV4Ij09PXcpZm9yKChOPU4ucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoTj0iMCIrTiksSD0wO0g8Ti5sZW5ndGg7SCs9MilGLnB1c2gocGFyc2VJbnQoTltIXStO''@;'; put 'put ''W0grMV0sMTYpKTtlbHNlIGZvcihIPTA7SDxOLmxlbmd0aDtIKyspe3ZhciBSPU4uY2hhckNvZGVBdChIKSxqPVI+PjgsUD0yNTUmUjtqP0YucHVzaChqLFApOkYucHVzaChQKX1yZXR1cm4gRn0sYi56ZXJvMj1fLGIudG9IZXg9cCxiLmVuY29kZT1mdW5jdGlvbih3LEYpe3JldHVybiJoZXgi''@;'; put 'put ''PT09Rj9wKHcpOnd9fSwxMTU0NDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImFmIix7bW9udGhzOiJKYW51YXJpZV9GZWJydWFyaWVfTWFhcnRfQXByaWxfTWVpX0p1bmllX0p1bGllX0F1Z3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVy''@;'; put 'put ''X05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1Nh''@;'; put 'put ''dGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTWFfRGlfV29fRG9fVnJfU2EiLnNwbGl0KCJfIiksbWVyaWRpZW1QYXJzZTovdm18bm0vaSxpc1BNOmZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''bi9ebm0kL2kudGVzdChwKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPDEyP3c/InZtIjoiVk0iOnc/Im5tIjoiTk0ifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltWYW5kYWcgb21dIExUIixuZXh0RGF5OiJbTVx4ZjRyZSBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltHaXN0ZXIgb21dIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W0xhYXNdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib29yICVzIixwYXN0OiIlcyBnZWxlZGUiLHM6IiduIHBhYXIgc2Vrb25kZXMiLHNzOiIlZCBzZWtvbmRlcyIsbToiJ24gbWludXV0IixtbToiJWQgbWludXRlIixoOiInbiB1dXIiLGhoOiIl''@;'; put 'put ''ZCB1cmUiLGQ6IiduIGRhZyIsZGQ6IiVkIGRhZSIsTToiJ24gbWFhbmQiLE1NOiIlZCBtYWFuZGUiLHk6IiduIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3JldHVybiBwKygxPT09cHx8OD09''@;'; put 'put ''PXB8fHA+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1MjE1NTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89ZnVuY3Rpb24oSCl7cmV0dXJuIDA9PT1IPzA6MT09PUg/MToyPT09SD8yOkglMTAwPj0zJiZI''@;'; put 'put ''JTEwMDw9MTA/MzpIJTEwMD49MTE/NDo1fSxwPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1''@;'; put 'put ''MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJc''@;'; put 'put ''dTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYy''@;'; put 'put ''Zlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1''@;'; put 'put ''MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsi''@;'; put 'put ''XHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJd''@;'; put 'put ''LCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2''@;'; put 'put ''MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2''@;'; put 'put ''MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYy''@;'; put 'put ''N1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sTj1mdW5jdGlvbihIKXtyZXR1cm4gZnVuY3Rpb24oUixqLFAsTCl7dmFyIFk9''@;'; put 'put ''XyhSKSxCPXBbSF1bXyhSKV07cmV0dXJuIDI9PT1ZJiYoQj1CW2o/MDoxXSksQi5yZXBsYWNlKC8lZC9pLFIpfX0sdz1bIlx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1''@;'; put 'put ''MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDYyN1x1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOSIsIlx1MDYyM1x1MDY0OFx1MDYyYSIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1''@;'; put 'put ''MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO0QuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczp3LG1v''@;'; put 'put ''bnRoc1Nob3J0Oncsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1''@;'; put 'put ''MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2''@;'; put 'put ''MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1''@;'; put 'put ''MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oSCl7cmV0dXJuIlx1MDY0''@;'; put 'put ''NSI9PT1IfSxtZXJpZGllbTpmdW5jdGlvbihILFIsail7cmV0dXJuIEg8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6TigicyIpLHNzOk4oInMiKSxtOk4oIm0iKSxtbTpOKCJtIiksaDpOKCJoIiksaGg6TigiaCIp''@;'; put 'put ''LGQ6TigiZCIpLGRkOk4oImQiKSxNOk4oIk0iKSxNTTpOKCJNIikseTpOKCJ5IikseXk6TigieSIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEgpe3JldHVybiBILnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfShiKDk3NTg2KSl9LDUzNTgzOmZ1bmN0aW9uKGNl''@;'; put 'put ''LEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1''@;'; put 'put ''MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYy''@;'; put 'put ''M1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUw''@;'; put 'put ''NjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJf''@;'; put 'put ''XHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5''@;'; put 'put ''XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9c''@;'; put 'put ''dTA2MjdcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYy''@;'; put 'put ''OFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9N''@;'; put 'put ''TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2''@;'; put 'put ''NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2''@;'; put 'put ''NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJh''@;'; put 'put ''In0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShiKDk3NTg2KSl9LDQxNjM4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMDoiMCJ9LHA9ZnVuY3Rpb24o''@;'; put 'put ''Uil7cmV0dXJuIDA9PT1SPzA6MT09PVI/MToyPT09Uj8yOlIlMTAwPj0zJiZSJTEwMDw9MTA/MzpSJTEwMD49MTE/NDo1fSxOPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2''@;'; put 'put ''NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIl''@;'; put 'put ''ZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJc''@;'; put 'put ''dTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIi''@;'; put 'put ''LCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUw''@;'; put 'put ''NjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2''@;'; put 'put ''MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1''@;'; put 'put ''MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0''@;'; put 'put ''NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdc''@;'; put 'put ''dTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixb''@;'; put 'put ''Ilx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0s''@;'; put 'put ''dz1mdW5jdGlvbihSKXtyZXR1cm4gZnVuY3Rpb24oaixQLEwsWSl7dmFyIEI9cChqKSxXPU5bUl1bcChqKV07cmV0dXJuIDI9PT1CJiYoVz1XW1A/MDoxXSksVy5yZXBsYWNlKC8lZC9pLGopfX0sRj1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYz''@;'; put 'put ''MVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0''@;'; put 'put ''YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYy''@;'; put 'put ''Zlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO0QuZGVmaW5lTG9jYWxlKCJhci1seSIse21vbnRoczpGLG1vbnRoc1Nob3J0OkYsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZf''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5''@;'; put 'put ''XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFc''@;'; put 'put ''dTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYz''@;'; put 'put ''MyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oUil7cmV0dXJuIlx1MDY0NSI9PT1SfSxtZXJpZGllbTpmdW5jdGlvbihSLGosUCl7cmV0dXJuIFI8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYz''@;'; put 'put ''OVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2''@;'; put 'put ''NDZcdTA2MzAgJXMiLHM6dygicyIpLHNzOncoInMiKSxtOncoIm0iKSxtbTp3KCJtIiksaDp3KCJoIiksaGg6dygiaCIpLGQ6dygiZCIpLGRkOncoImQiKSxNOncoIk0iKSxNTTp3KCJNIikseTp3KCJ5IikseXk6dygieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNl''@;'; put 'put ''KC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oail7cmV0dXJuIF9bal19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KGIoOTc1ODYpKX0sODc4MjM6ZnVuY3Rpb24oY2Us''@;'; put 'put ''SixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJhci1tYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUw''@;'; put 'put ''NjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIz''@;'; put 'put ''XHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2''@;'; put 'put ''MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9c''@;'; put 'put ''dTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2Mzlc''@;'; put 'put ''dTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1''@;'; put 'put ''MDYyN1x1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4''@;'; put 'put ''XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0''@;'; put 'put ''YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEi''@;'; put 'put ''fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw3NzEyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3''@;'; put 'put ''Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6''@;'; put 'put ''IjAifTtELmRlZmluZUxvY2FsZSgiYXItcHMiLHttb250aHM6Ilx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZcdTA2''@;'; put 'put ''NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUwNjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0NF9c''@;'; put 'put ''dTA2MmFcdTA2MzRcdTA2MzFcdTA2NGEgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4XHUwNjUxXHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjQzXHUwNjYyX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1''@;'; put 'put ''MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjYxX1x1MDYyYVx1MDY2Ml9cdTA2NDNcdTA2''@;'; put 'put ''NjEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''M1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYz''@;'; put 'put ''OVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9''@;'; put 'put ''LG1lcmlkaWVtOmZ1bmN0aW9uKHcsRixIKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQg''@;'; put 'put ''XHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcp''@;'; put 'put ''e3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJdKD8hW1x1MDYyYVx1MDY0''@;'; put 'put ''M10pL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pLnJlcGxhY2Uo''@;'; put 'put ''LywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDc4MjYxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1''@;'; put 'put ''MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5''@;'; put 'put ''IjoiOSIsIlx1MDY2MCI6IjAifTtELmRlZmluZUxvY2FsZSgiYXItc2EiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1''@;'; put 'put ''MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMx''@;'; put 'put ''X1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2''@;'; put 'put ''MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhc''@;'; put 'put ''dTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYy''@;'; put 'put ''Zlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJc''@;'; put 'put ''dTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVc''@;'; put 'put ''dTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiJcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxGLEgpe3JldHVybiB3PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUw''@;'; put 'put ''NjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixk''@;'; put 'put ''OiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3''@;'; put 'put ''XHUwNjJhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihGKXtyZXR1cm4gcFtGXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBv''@;'; put 'put ''c3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDU2NzAzOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiYXItdG4iLHttb250aHM6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2''@;'; put 'put ''NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1''@;'; put 'put ''MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRh''@;'; put 'put ''X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1''@;'; put 'put ''MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUw''@;'; put 'put ''NjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2''@;'; put 'put ''MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1''@;'; put 'put ''MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhc''@;'; put 'put ''dTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7''@;'; put 'put ''ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMzMxMDg6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1''@;'; put 'put ''MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxwPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LE49''@;'; put 'put ''ZnVuY3Rpb24oail7cmV0dXJuIDA9PT1qPzA6MT09PWo/MToyPT09aj8yOmolMTAwPj0zJiZqJTEwMDw9MTA/MzpqJTEwMD49MTE/NDo1fSx3PXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2Mjdc''@;'; put 'put ''dTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2''@;'; put 'put ''NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2''@;'; put 'put ''MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNc''@;'; put 'put ''dTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUw''@;'; put 'put ''NjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2''@;'; put 'put ''MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJk''@;'; put 'put ''XHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2NDUiXX0sRj1mdW5jdGlvbihqKXtyZXR1cm4gZnVuY3Rpb24oUCxMLFksQil7dmFyIFc9TihQKSxaPXdbal1bTihQKV07cmV0dXJuIDI9PT1XJiYoWj1aW0w/MDoxXSksWi5yZXBsYWNlKC8lZC9pLFApfX0sSD1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1''@;'; put 'put ''MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1''@;'; put 'put ''MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYz''@;'; put 'put ''MSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO0QuZGVmaW5lTG9jYWxlKCJhciIse21vbnRoczpILG1vbnRoc1Nob3J0Okgsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1''@;'; put 'put ''XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNc''@;'; put 'put ''dTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJj''@;'; put 'put ''X1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1N''@;'; put 'put ''TU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oail7cmV0dXJuIlx1MDY0NSI9PT1qfSxtZXJpZGllbTpmdW5jdGlvbihqLFAsTCl7cmV0dXJuIGo8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3''@;'; put 'put ''XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2''@;'; put 'put ''NDVcdTA2NDZcdTA2MzAgJXMiLHM6RigicyIpLHNzOkYoInMiKSxtOkYoIm0iKSxtbTpGKCJtIiksaDpGKCJoIiksaGg6RigiaCIpLGQ6RigiZCIpLGRkOkYoImQiKSxNOkYoIk0iKSxNTTpGKCJNIikseTpGKCJ5IikseXk6RigieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihqKXtyZXR1cm4gai5y''@;'; put 'put ''ZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihqKXtyZXR1cm4gai5yZXBsYWNlKC9c''@;'; put 'put ''ZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShiKDk3NTg2KSl9LDQ2NTA4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiLWluY2kiLDU6Ii1pbmNpIiw4''@;'; put 'put ''OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoiLW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIs''@;'; put 'put ''NjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O0QuZGVmaW5lTG9jYWxlKCJheiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1''@;'; put 'put ''MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1OV9cdTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpfQnpFX1x4YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVlXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3NhYmFoIHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5''@;'; put 'put ''ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RXZWVrOiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoi''@;'; put 'put ''JXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUwMjU5IHNhbml5XHUwMjU5IixzczoiJWQgc2FuaXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFpcVx1MDI1OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixk''@;'; put 'put ''ZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIGlsIix5eToiJWQgaWwifSxtZXJpZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxheFx1MDE1ZmFtLyxpc1BNOmZ1bmN0aW9uKE4pe3JldHVybi9eKGdceGZjbmRceGZjenxh''@;'; put 'put ''eFx1MDE1ZmFtKSQvLnRlc3QoTil9LG1lcmlkaWVtOmZ1bmN0aW9uKE4sdyxGKXtyZXR1cm4gTjw0PyJnZWNcdTAyNTkiOk48MTI/InNcdTAyNTloXHUwMjU5ciI6TjwxNz8iZ1x4ZmNuZFx4ZmN6IjoiYXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEz''@;'; put 'put ''MW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAxMzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIE4rIi1cdTAxMzFuY1x1MDEzMSI7dmFyIHc9TiUxMDtyZXR1cm4gTisoX1t3XXx8X1tOJTEwMC13XXx8X1tOPj0xMDA/MTAwOm51bGxdKX0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sMTY3NjY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAodyxGLEgpe3JldHVybiJtIj09PUg/Rj8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1''@;'; put 'put ''XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9PT1IP0Y/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6dysiICIrZnVuY3Rpb24gXyh3LEYpe3ZhciBI''@;'; put 'put ''PXcuc3BsaXQoIl8iKTtyZXR1cm4gRiUxMD09MSYmRiUxMDAhPTExP0hbMF06RiUxMD49MiYmRiUxMDw9NCYmKEYlMTAwPDEwfHxGJTEwMD49MjApP0hbMV06SFsyXX0oe3NzOkY/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOkY/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMy''@;'; put 'put ''XHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGhoOkY/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0''@;'; put 'put ''MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9c''@;'; put 'put ''dTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVc''@;'; put 'put ''dTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtIXSwrdyl9RC5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1''@;'; put 'put ''MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1''@;'; put 'put ''MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZc''@;'; put 'put ''dTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVc''@;'; put 'put ''dTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQw''@;'; put 'put ''XHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQz''@;'; put 'put ''MFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9y''@;'; put 'put ''dDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQz''@;'; put 'put ''Nlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUw''@;'; put 'put ''NDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1''@;'; put 'put ''MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1''@;'; put 'put ''MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdc''@;'; put 'put ''dTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0''@;'; put 'put ''M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUw''@;'; put 'put ''NDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEi''@;'; put 'put ''LnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2RcdTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMw''@;'; put 'put ''IFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQi''@;'; put 'put ''LG06cCxtbTpwLGg6cCxoaDpwLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6cCxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOnAseToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpwfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0''@;'; put 'put ''NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQz''@;'; put 'put ''MFx1MDQ0MFx1MDQzMCkkLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjp3PDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOnc8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQz''@;'; put 'put ''Mlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbih3LEYpe3N3aXRjaChGKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2Fz''@;'; put 'put ''ZSJXIjpyZXR1cm4gdyUxMCE9MiYmdyUxMCE9M3x8dyUxMDA9PTEyfHx3JTEwMD09MTM/dysiLVx1MDQ0YiI6dysiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gdysiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gd319LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDI4NTY0''@;'; put 'put ''OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiYmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNj''@;'; put 'put ''XHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUw''@;'; put 'put ''NDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUw''@;'; put 'put ''NDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0''@;'; put 'put ''MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1''@;'; put 'put ''MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1''@;'; put 'put ''MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRhXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUw''@;'; put 'put ''NDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1''@;'; put 'put ''MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1''@;'; put 'put ''MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAx''@;'; put 'put ''OmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoi''@;'; put 'put ''XHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBOPXAlMTAsdz1wJTEwMDtyZXR1cm4gMD09PXA/cCsiLVx1MDQzNVx1MDQzMiI6MD09''@;'; put 'put ''PXc/cCsiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9wKyItXHUwNDQyXHUwNDM4IjoxPT09Tj9wKyItXHUwNDMyXHUwNDM4IjoyPT09Tj9wKyItXHUwNDQwXHUwNDM4Ijo3PT09Tnx8OD09PU4/cCsiLVx1MDQzY1x1MDQzOCI6cCsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3''@;'; put 'put ''fX0pfShiKDk3NTg2KSl9LDk3NDYyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5r''@;'; put 'put ''YWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9c''@;'; put 'put ''dTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFts''@;'; put 'put ''XHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBr''@;'; put 'put ''XHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIsc3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGls''@;'; put 'put ''ZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0MzQzODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89''@;'; put 'put ''ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LHA9eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0''@;'; put 'put ''IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07RC5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUw''@;'; put 'put ''OWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNc''@;'; put 'put ''dTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4''@;'; put 'put ''XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDli''@;'; put 'put ''MFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1''@;'; put 'put ''MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1''@;'; put 'put ''MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFc''@;'; put 'put ''dTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUw''@;'; put 'put ''OWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1''@;'; put 'put ''MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6''@;'; put 'put ''bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDli''@;'; put 'put ''ZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIw''@;'; put 'put ''XHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1''@;'; put 'put ''MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5''@;'; put 'put ''YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAi''@;'; put 'put ''LHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBwW0ZdfSl9LHBvc3Rm''@;'; put 'put ''b3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNiXHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFc''@;'; put 'put ''dTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LEYpe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5''@;'; put 'put ''YmVcdTA5YTQiPT09Rj93PDQ/dzp3KzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09Rnx8Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI9PT1GP3c6Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1GP3c+PTM/dzp3KzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIi''@;'; put 'put ''PT09Rnx8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1GP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8ND8iXHUwOWIwXHUwOWJlXHUwOWE0Ijp3PDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6dzwxMj8iXHUwOWI4XHUw''@;'; put 'put ''OTk1XHUwOWJlXHUwOWIyIjp3PDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MTg/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6dzwyMD8iXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0s''@;'; put 'put ''d2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sMTcxMDc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQi''@;'; put 'put ''LDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxwPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2Ijoi''@;'; put 'put ''MCJ9O0QuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5''@;'; put 'put ''Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2Rc''@;'; put 'put ''dTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNc''@;'; put 'put ''dTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5''@;'; put 'put ''YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRc''@;'; put 'put ''dTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1''@;'; put 'put ''MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9c''@;'; put 'put ''dTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1''@;'; put 'put ''MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDlj''@;'; put 'put ''ZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6''@;'; put 'put ''IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUw''@;'; put 'put ''OTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlm''@;'; put 'put ''IixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5''@;'; put 'put ''OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDll''@;'; put 'put ''OFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihGKXtyZXR1cm4gcFtGXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KX0sbWVyaWRpZW1QYXJz''@;'; put 'put ''ZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsRil7cmV0dXJuIDEy''@;'; put 'put ''PT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1GJiZ3Pj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PUYmJnc8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1GP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxGLEgpe3JldHVybiB3''@;'; put 'put ''PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2Rvdzow''@;'; put 'put ''LGRveTo2fX0pfShiKDk3NTg2KSl9LDkwMDQ6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIs''@;'; put 'put ''OToiXHUwZjI5IiwwOiJcdTBmMjAifSxwPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O0QuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJibyIse21vbnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBm''@;'; put 'put ''MGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1''@;'; put 'put ''NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYw''@;'; put 'put ''Ylx1MGY1Nlx1MGY2Mlx1MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0''@;'; put 'put ''X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJc''@;'; put 'put ''dTBmNjZcdTBmMGJcdTBmNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1''@;'; put 'put ''MGY1Zlx1MGZiM1x1MGYwYjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIz''@;'; put 'put ''XHUwZjBiXGR7MSwyfSkvLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUw''@;'; put 'put ''ZjVmXHUwZjYwXHUwZjBiXHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBm''@;'; put 'put ''NjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1''@;'; put 'put ''XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUw''@;'; put 'put ''ZjU4XHUwZjcyXHUwZjQyX1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZ''@;'; put 'put ''WVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0''@;'; put 'put ''XHUwZjBiXHUwZjQ5XHUwZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2''@;'; put 'put ''Nlx1MGY0NF0gTFQiLGxhc3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYz''@;'; put 'put ''XHUwZjBiIixwYXN0OiIlcyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUw''@;'; put 'put ''ZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJc''@;'; put 'put ''dTBmNWFcdTBmN2NcdTBmNTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixN''@;'; put 'put ''TToiJWQgXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0''@;'; put 'put ''XHUwZjI1XHUwZjI2XHUwZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKEYpe3JldHVybiBwW0ZdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBm''@;'; put 'put ''NWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUw''@;'; put 'put ''ZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxGKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PUYmJnc+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRc''@;'; put 'put ''dTBmNDQiPT09RiYmdzw1fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PUY/dysxMjp3fSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjp3PDEwPyJcdTBmNWVcdTBm''@;'; put 'put ''N2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjYiOnc8MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6dzwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4''@;'; put 'put ''XHUwZjdjIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNTA5Mjc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oWixxLFEpe3JldHVybiBaKyIgIitmdW5jdGlvbiB3KFoscSl7cmV0dXJuIDI9PT1xP2Z1bmN0aW9uIEYoWil7''@;'; put 'put ''dmFyIHE9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09cVtaLmNoYXJBdCgwKV0/WjpxW1ouY2hhckF0KDApXStaLnN1YnN0cmluZygxKX0oWik6Wn0oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRldmV6aCJ9W1FdLFopfWZ1bmN0aW9uIE4oWil7cmV0dXJuIFo+OT9O''@;'; put 'put ''KFolMTApOlp9dmFyIEg9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9pLC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sUj0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6''@;'; put 'put ''aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksQj1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwv''@;'; put 'put ''Xkd3L2ksL15TYS9pXTtELmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdl''@;'; put 'put ''X01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlOkIsZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9e''@;'; put 'put ''c2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTpCLG1vbnRoc1JlZ2V4OlIsbW9udGhzU2hvcnRSZWdleDpSLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZl''@;'; put 'put ''cnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8''@;'; put 'put ''a2VyKS9pLG1vbnRoc1BhcnNlOkgsbG9uZ01vbnRoc1BhcnNlOkgsc2hvcnRNb250aHNQYXJzZTpILGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06Xyxo''@;'; put 'put ''OiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6XyxNOiJ1ciBtaXoiLE1NOl8seToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIHAoWil7c3dpdGNoKE4oWikpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIForIiBibG9heiI7ZGVmYXVsdDpyZXR1''@;'; put 'put ''cm4gWisiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oWil7cmV0dXJuIForKDE9PT1aPyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1''@;'; put 'put ''bmN0aW9uKFope3JldHVybiJnLm0uIj09PVp9LG1lcmlkaWVtOmZ1bmN0aW9uKFoscSxRKXtyZXR1cm4gWjwxMj8iYS5tLiI6ImcubS4ifX0pfShiKDk3NTg2KSl9LDg3NzY4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHcsRixIKXt2YXIg''@;'; put 'put ''Uj13KyIgIjtzd2l0Y2goSCl7Y2FzZSJzcyI6cmV0dXJuIFIrKDE9PT13PyJzZWt1bmRhIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibW0iOnJldHVybiBSKygxPT09dz8ibWludXRhIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJtaW51dGUiOiJtaW51dGEi''@;'; put 'put ''KTtjYXNlImgiOnJldHVybiJqZWRhbiBzYXQiO2Nhc2UiaGgiOnJldHVybiBSKygxPT09dz8ic2F0IjoyPT09d3x8Mz09PXd8fDQ9PT13PyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBSKygxPT09dz8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBSKygxPT09dz8ibWplc2Vj''@;'; put 'put ''IjoyPT09d3x8Mz09PXd8fDQ9PT13PyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBSKygxPT09dz8iZ29kaW5hIjoyPT09d3x8Mz09PXd8fDQ9PT13PyJnb2RpbmUiOiJnb2RpbmEiKX19RC5kZWZpbmVMb2NhbGUoImJzIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0''@;'; put 'put ''X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZ''@;'; put 'put ''WSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBb''@;'; put 'put ''dV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZXIgdV0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3By''@;'; put 'put ''b1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixzczpwLG06ZnVuY3Rpb24gXyh3LEYsSCxSKXtpZigibSI9PT1IKXJldHVybiBGPyJqZWRuYSBtaW51dGEiOlI/''@;'; put 'put ''ImplZG51IG1pbnV0dSI6ImplZG5lIG1pbnV0ZSJ9LG1tOnAsaDpwLGhoOnAsZDoiZGFuIixkZDpwLE06Im1qZXNlYyIsTU06cCx5OiJnb2RpbnUiLHl5OnB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5''@;'; put 'put ''NzU4NikpfSw1NjI5MTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyXHhlN19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVf''@;'; put 'put ''bm92ZW1icmVfZGVzZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyXHhlN19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmUiLnNwbGl0KCJf''@;'; put 'put ''IiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5z''@;'; put 'put ''X2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''UGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2dWkgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiJbZGVtXHhlMCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIlthaGlyIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzc2F0IGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBzZWdvbnMiLG06InVuIG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBt''@;'; put 'put ''ZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihwLE4pe3ZhciB3PTE9PT1wPyJyIjoyPT09cD8ibiI6Mz09PXA/InIiOjQ9PT1wPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09''@;'; put 'put ''PU58fCJXIj09PU4pJiYodz0iYSIpLHArd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sODUzMDE6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXtzdGFuZGFsb25lOiJsZWRlbl9ceGZhbm9yX2JcdTAxNTllemVuX2R1YmVuX2t2XHUw''@;'; put 'put ''MTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksZm9ybWF0OiJsZWRuYV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJuYV9rdlx1MDExYnRuYV9cdTAxMGRlcnZuYV9c''@;'; put 'put ''dTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovREQ/W28uXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NL30scD0ibGVkX1x4ZmFub19iXHUwMTU5ZV9kdWJfa3ZcdTAxMWJfXHUwMTBk''@;'; put 'put ''dm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksTj1bL15sZWQvaSwvXlx4ZmFuby9pLC9eYlx1MDE1OWUvaSwvXmR1Yi9pLC9ea3ZcdTAxMWIvaSwvXihcdTAxMGR2bnxcdTAxMGRlcnZlbiR8XHUwMTBkZXJ2bmEpL2ksL14oXHUwMTBk''@;'; put 'put ''dmN8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlKS9pLC9ec3JwL2ksL156XHhlMVx1MDE1OS9pLC9eXHUwMTU5XHhlZGovaSwvXmxpcy9pLC9ecHJvL2ldLHc9L14obGVkZW58XHhmYW5vcnxiXHUwMTU5ZXplbnxkdWJlbnxrdlx1MDExYnRlbnxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVu''@;'; put 'put ''Y2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xw''@;'; put 'put ''cm8pL2k7ZnVuY3Rpb24gRihqKXtyZXR1cm4gaj4xJiZqPDUmJjEhPX5+KGovMTApfWZ1bmN0aW9uIEgoaixQLEwsWSl7dmFyIEI9aisiICI7c3dpdGNoKEwpe2Nhc2UicyI6cmV0dXJuIFB8fFk/InBceGUxciBzZWt1bmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gUHx8''@;'; put 'put ''WT9CKyhGKGopPyJzZWt1bmR5Ijoic2VrdW5kIik6Qisic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBQPyJtaW51dGEiOlk/Im1pbnV0dSI6Im1pbnV0b3UiO2Nhc2UibW0iOnJldHVybiBQfHxZP0IrKEYoaik/Im1pbnV0eSI6Im1pbnV0Iik6QisibWludXRhbWkiO2Nhc2UiaCI6cmV0dXJu''@;'; put 'put ''IFA/ImhvZGluYSI6WT8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIFB8fFk/QisoRihqKT8iaG9kaW55IjoiaG9kaW4iKTpCKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gUHx8WT8iZGVuIjoiZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIFB8fFk/QisoRihqKT8iZG55IjoiZG5c''@;'; put 'put ''eGVkIik6QisiZG55IjtjYXNlIk0iOnJldHVybiBQfHxZPyJtXHUwMTFic1x4ZWRjIjoibVx1MDExYnNceGVkY2VtIjtjYXNlIk1NIjpyZXR1cm4gUHx8WT9CKyhGKGopPyJtXHUwMTFic1x4ZWRjZSI6Im1cdTAxMWJzXHhlZGNcdTAxNmYiKTpCKyJtXHUwMTFic1x4ZWRjaSI7Y2FzZSJ5Ijpy''@;'; put 'put ''ZXR1cm4gUHx8WT8icm9rIjoicm9rZW0iO2Nhc2UieXkiOnJldHVybiBQfHxZP0IrKEYoaik/InJva3kiOiJsZXQiKTpCKyJsZXR5In19RC5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6cCxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJp''@;'; put 'put ''Y3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6''@;'; put 'put ''XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6''@;'; put 'put ''XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOk4sbG9uZ01vbnRoc1BhcnNlOk4sc2hvcnRNb250aHNQYXJzZTpOLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUx''@;'; put 'put ''dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIs''@;'; put 'put ''TFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0''@;'; put 'put ''cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2Ug''@;'; put 'put ''NDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkp''@;'; put 'put ''e2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBk''@;'; put 'put ''ZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAlcyIsczpILHNzOkgsbTpILG1tOkgsaDpILGhoOkgsZDpILGRkOkgsTTpILE1NOkgseTpILHl5''@;'; put 'put ''Okh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2NjY2NjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJc''@;'; put 'put ''dTA0M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0''@;'; put 'put ''NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBc''@;'; put 'put ''dTA0MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJc''@;'; put 'put ''dTA0NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBc''@;'; put 'put ''dTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0''@;'; put 'put ''NDBfXHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUw''@;'; put 'put ''NDRiXHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1''@;'; put 'put ''XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0''@;'; put 'put ''M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwg''@;'; put 'put ''SEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0''@;'; put 'put ''MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOmZ1bmN0aW9uKHApe3JldHVybiBwKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMocCk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKHApPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2Qi''@;'; put 'put ''KX0scGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6''@;'; put 'put ''IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0''@;'; put 'put ''M1x1MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0''@;'; put 'put ''ZDdcdTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDU1MTYzOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dv''@;'; put 'put ''cmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQg''@;'; put 'put ''TWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJt''@;'; put 'put ''ZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5''@;'; put 'put ''biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgdz0iIjtyZXR1cm4gcD4yMD93PTQwPT09cHx8NTA9PT1wfHw2MD09PXB8fDgwPT09cHx8MTAwPT09cD8iZmVk''@;'; put 'put ''IjoiYWluIjpwPjAmJih3PVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW3BdKSxwK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3''@;'; put 'put ''NTg2KSl9LDg3MzYwOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2Vt''@;'; put 'put ''YmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5N''@;'; put 'put ''TS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6IiVk''@;'; put 'put ''IHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0MzI0ODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhOLHcsRixIKXt2YXIgUj17bTpbImVpbmUgTWludXRlIiwi''@;'; put 'put ''ZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbTisiIFRhZ2UiLE4rIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpb''@;'; put 'put ''TisiIE1vbmF0ZSIsTisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W04rIiBKYWhyZSIsTisiIEphaHJlbiJdfTtyZXR1cm4gdz9SW0ZdWzBdOlJbRl1bMV19RC5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhlNHJ6''@;'; put 'put ''X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0g''@;'; put 'put ''TFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBT''@;'; put 'put ''dHVuZGVuIixkOl8sZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4MzIyMjpmdW5jdGlvbihjZSxKLGIpeyFmdW5j''@;'; put 'put ''dGlvbihEKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhOLHcsRixIKXt2YXIgUj17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbTisiIFRhZ2UiLE4rIiBUYWdlbiJd''@;'; put 'put ''LHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbTisiIE1vbmF0ZSIsTisiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W04rIiBKYWhyZSIsTisiIEphaHJlbiJdfTtyZXR1cm4gdz9SW0ZdWzBd''@;'; put 'put ''OlJbRl1bMV19RC5kZWZpbmVMb2NhbGUoImRlLWNoIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4''@;'; put 'put ''ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0u''@;'; put 'put ''WVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0i''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5k''@;'; put 'put ''ZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2Rv''@;'; put 'put ''dzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQ1OTMyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKE4sdyxGLEgpe3ZhciBSPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUi''@;'; put 'put ''XSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltOKyIgVGFnZSIsTisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltOKyIgTW9uYXRlIixOKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVt''@;'; put 'put ''IEphaHIiXSx5eTpbTisiIEphaHJlIixOKyIgSmFocmVuIl19O3JldHVybiB3P1JbRl1bMF06UltGXVsxXX1ELmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1i''@;'; put 'put ''ZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdf''@;'; put 'put ''TWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUg''@;'; put 'put ''dW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY0MDU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNzk2XHUwN2FjXHUwNzgyXHUwN2FhXHUw''@;'; put 'put ''Nzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzhhXHUwN2FjXHUwNzg0XHUwN2IwXHUwNzgzXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzg5XHUwN2E3XHUwNzgzXHUwN2E4XHUwNzk3XHUwN2FhIiwiXHUwNzg3XHUwN2FkXHUwNzk1XHUwN2IwXHUwNzgzXHUwN2E5XHUw''@;'; put 'put ''NzhkXHUwN2FhIiwiXHUwNzg5XHUwN2FkIiwiXHUwNzk2XHUwN2FiXHUwNzgyXHUwN2IwIiwiXHUwNzk2XHUwN2FhXHUwNzhkXHUwN2E2XHUwNzg3XHUwN2E4IiwiXHUwNzg3XHUwN2FmXHUwNzhlXHUwN2E2XHUwNzkwXHUwN2IwXHUwNzkzXHUwN2FhIiwiXHUwNzkwXHUwN2FjXHUwNzk1XHUw''@;'; put 'put ''N2IwXHUwNzkzXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzg3XHUwN2FlXHUwNzg2XHUwN2IwXHUwNzkzXHUwN2FmXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzgyXHUwN2FlXHUwNzg4XHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2''@;'; put 'put ''XHUwNzgzXHUwN2FhIiwiXHUwNzkxXHUwN2E4XHUwNzkwXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIl0scD1bIlx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOFx1MDc4N1x1MDdiMFx1MDc4Y1x1MDdhNiIsIlx1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNiIsIlx1MDc4''@;'; put 'put ''N1x1MDdhNlx1MDc4Mlx1MDdiMFx1MDc4ZVx1MDdhN1x1MDc4M1x1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN1x1MDc5MFx1MDdiMFx1MDc4YVx1MDdhNlx1MDc4Y1x1MDdhOCIsIlx1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYVx1MDc4''@;'; put 'put ''M1x1MDdhYSIsIlx1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOFx1MDc4MFx1MDdhOFx1MDc4M1x1MDdhYSJdO0QuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6cCx3ZWVrZGF5c1Nob3J0OnAsd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1''@;'; put 'put ''MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1''@;'; put 'put ''MDc4YS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNzg5XHUwNzhhIj09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsRixIKXtyZXR1cm4gdzwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3''@;'; put 'put ''OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4''@;'; put 'put ''N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3''@;'; put 'put ''ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUw''@;'; put 'put ''Nzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3''@;'; put 'put ''OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUw''@;'; put 'put ''NzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oYig5NzU4NikpfSw2MDcxODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlv''@;'; put 'put ''bihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUw''@;'; put 'put ''M2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1''@;'; put 'put ''MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1''@;'; put 'put ''MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1''@;'; put 'put ''MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAzYmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUw''@;'; put 'put ''M2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1''@;'; put 'put ''MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1''@;'; put 'put ''MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1''@;'; put 'put ''MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24oTix3KXtyZXR1cm4gTj8ic3RyaW5nIj09dHlwZW9mIHcmJi9ELy50ZXN0KHcuc3Vic3RyaW5nKDAsdy5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW04ubW9udGgo''@;'; put 'put ''KV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW04ubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9ydDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1MDNiMl9cdTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNi''@;'; put 'put ''MVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiX1x1MDM5MVx1MDNjNVx1MDNiM19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUwM2M0X1x1MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiYVx1MDNhZV9cdTAzOTRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUwM2FmXHUwM2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1''@;'; put 'put ''MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2IxXHUwM2MxXHUwM2IxXHUwM2MzXHUwM2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1MDNiMlx1MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1X1x1MDNhNFx1MDNjMVx1MDNiOV9cdTAzYTRcdTAzYjVcdTAzYzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1MDNjMV9cdTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5''@;'; put 'put ''YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNhNFx1MDNiNV9cdTAzYTBcdTAzYjVfXHUwM2EwXHUwM2IxX1x1MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihOLHcsRil7cmV0dXJuIE4+MTE/Rj8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzlj''@;'; put 'put ''IjpGPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKE4pe3JldHVybiJcdTAzYmMiPT09KE4rIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBcdTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBB''@;'; put 'put ''IixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJFbDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNi''@;'; put 'put ''MSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2MyIHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5''@;'; put 'put ''KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUwM2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1''@;'; put 'put ''MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihOLHcpe3ZhciBGPXRoaXMuX2NhbGVuZGFyRWxbTl0sSD13JiZ3LmhvdXJzKCk7cmV0dXJuIGZ1bmN0aW9uIF8oTil7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSIm''@;'; put 'put ''Jk4gaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChOKX0oRikmJihGPUYuYXBwbHkodykpLEYucmVwbGFjZSgie30iLEglMTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1''@;'; put 'put ''MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUwM2I1ICVzIixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVc''@;'; put 'put ''dTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1MDNiZFx1MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAz''@;'; put 'put ''YmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIlZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNc''@;'; put 'put ''dTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjVcdTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFc''@;'; put 'put ''dTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3LyxvcmRpbmFsOiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMzYz''@;'; put 'put ''MTk6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1ll''@;'; put 'put ''c3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVz''@;'; put 'put ''IixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bihwKXt2YXIgTj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Tj8ic3QiOjI9PT1OPyJuZCI6Mz09PU4/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KGIoOTc1ODYpKX0sODA1OTc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJp''@;'; put 'put ''Y3QiO0QuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01h''@;'; put 'put ''eV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6''@;'; put 'put ''ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBb''@;'; put 'put ''YXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5Iixk''@;'; put 'put ''ZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgTj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8x''@;'; put 'put ''MCk/InRoIjoxPT09Tj8ic3QiOjI9PT1OPyJuZCI6Mz09PU4/InJkIjoidGgiKX19KX0oYig5NzU4NikpfSw1MTgwMDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNo''@;'; put 'put ''X0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5''@;'; put 'put ''X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIs''@;'; put 'put ''czoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIE49cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PU4/InN0IjoyPT09Tj8ibmQiOjM9PT1OPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0''@;'; put 'put ''fX0pfShiKDk3NTg2KSl9LDgwNzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05v''@;'; put 'put ''dmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJk''@;'; put 'put ''YXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9N''@;'; put 'put ''TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIs''@;'; put 'put ''bGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1t''@;'; put 'put ''OiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbihwKXt2YXIgTj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Tj8ic3QiOjI9PT1OPyJuZCI6Mz09PU4/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTU5NjA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24o''@;'; put 'put ''RCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJlbi1pbCIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zl''@;'; put 'put ''Yl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9U''@;'; put 'put ''aHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBk''@;'; put 'put ''ZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBk''@;'; put 'put ''YXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBOPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAl''@;'; put 'put ''MTAwLzEwKT8idGgiOjE9PT1OPyJzdCI6Mj09PU4/Im5kIjozPT09Tj8icmQiOiJ0aCIpfX0pfShiKDk3NTg2KSl9LDg0NDE4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlf''@;'; put 'put ''TWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJT''@;'; put 'put ''dW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgi''@;'; put 'put ''XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBh''@;'; put 'put ''dF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6''@;'; put 'put ''IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVk''@;'; put 'put ''IHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIE49cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PU4/InN0IjoyPT09Tj8ibmQiOjM9PT1OPyJyZCI6InRoIil9LHdlZWs6e2Rv''@;'; put 'put ''dzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDQ2ODY1OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZW4tbnoiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVy''@;'; put 'put ''X09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0Zy''@;'; put 'put ''aWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06''@;'; put 'put ''c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMi''@;'; put 'put ''LG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShz''@;'; put 'put ''dHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIE49cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PU4/InN0IjoyPT09Tj8ibmQiOjM9PT1OPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDMyNjQ3OmZ1bmN0aW9uKGNl''@;'; put 'put ''LEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZW4tc2ciLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJT''@;'; put 'put ''dW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJE''@;'; put 'put ''IE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoi''@;'; put 'put ''JWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgTj1wJTEwO3Jl''@;'; put 'put ''dHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Tj8ic3QiOjI9PT1OPyJuZCI6Mz09PU4/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjE5MzE6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hXHUwMTZkZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFydF9hcHJfbWFqX2p1bl9qdWxf''@;'; put 'put ''YVx1MDE2ZGdfc2VwdF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZGltYW5cdTAxMDlvX2x1bmRvX21hcmRvX21lcmtyZWRvX1x1MDEzNWFcdTAxNmRkb192ZW5kcmVkb19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltX2x1bl9tYXJkX21lcmtfXHUwMTM1''@;'; put 'put ''YVx1MDE2ZF92ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9cdTAxMzVhX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZ''@;'; put 'put ''IixMTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovW2FwXVwudFwubS9pLGlzUE06''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuInAiPT09cC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPjExP3c/InAudC5tLiI6IlAuVC5NLiI6dz8iYS50Lm0uIjoiQS5ULk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYVx1MDE2ZCBqZV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltNb3JnYVx1MDE2ZCBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24gamVdIExUIixsYXN0RGF5OiJbSGllcmFcdTAxNmQgamVdIExUIixsYXN0V2VlazoiW3Bhc2ludGFuXSBkZGRkW24gamVdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0''@;'; put 'put ''ICVzIixwYXN0OiJhbnRhXHUwMTZkICVzIixzOiJrZWxrYWogc2VrdW5kb2oiLHNzOiIlZCBzZWt1bmRvaiIsbToidW51IG1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6InVudSBob3JvIixoaDoiJWQgaG9yb2oiLGQ6InVudSB0YWdvIixkZDoiJWQgdGFnb2oiLE06InVudSBtb25hdG8iLE1N''@;'; put 'put ''OiIlZCBtb25hdG9qIix5OiJ1bnUgamFybyIseXk6IiVkIGphcm9qIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfWEvLG9yZGluYWw6IiVkYSIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNDE4MDU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxOPVsvXmVuZS9pLC9eZmVi''@;'; put 'put ''L2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1i''@;'; put 'put ''cmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0QuZGVmaW5lTG9jYWxlKCJlcy1kbyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1''@;'; put 'put ''bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihILFIpe3JldHVybiBIPy8tTU1NLS8udGVzdChSKT9wW0gubW9udGgoKV06X1tILm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9u''@;'; put 'put ''dGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmVi''@;'; put 'put ''XC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0TW9udGhzUGFyc2U6Tix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5''@;'; put 'put ''cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtk''@;'; put 'put ''ZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIi''@;'; put 'put ''KSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRv''@;'; put 'put ''cyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIl''@;'; put 'put ''ZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sODM0NDU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5f''@;'; put 'put ''bWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxOPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5''@;'; put 'put ''L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJc''@;'; put 'put ''Lj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0QuZGVmaW5lTG9jYWxlKCJlcy1teCIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVt''@;'; put 'put ''YnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihILFIpe3JldHVybiBIPy8tTU1NLS8udGVzdChSKT9wW0gubW9udGgoKV06X1tILm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0''@;'; put 'put ''cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/''@;'; put 'put ''fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0TW9udGhzUGFyc2U6Tix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3Nc''@;'; put 'put ''eGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNh''@;'; put 'put ''ZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3Mi''@;'; put 'put ''LGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sODE1MTY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5f''@;'; put 'put ''bWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxOPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5''@;'; put 'put ''L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJc''@;'; put 'put ''Lj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0QuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVt''@;'; put 'put ''YnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihILFIpe3JldHVybiBIPy8tTU1NLS8udGVzdChSKT9wW0gubW9udGgoKV06X1tILm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0''@;'; put 'put ''cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/''@;'; put 'put ''fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0TW9udGhzUGFyc2U6Tix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3Nc''@;'; put 'put ''eGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRk''@;'; put 'put ''ZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQg''@;'; put 'put ''bWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNDY2Nzk6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwu''@;'; put 'put ''X2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxOPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdv''@;'; put 'put ''L2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98''@;'; put 'put ''anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0QuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2ll''@;'; put 'put ''bWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihILFIpe3JldHVybiBIPy8tTU1NLS8udGVzdChSKT9wW0gubW9udGgoKV06X1tILm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98''@;'; put 'put ''bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwu''@;'; put 'put ''P3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0TW9udGhzUGFyc2U6Tix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBh''@;'; put 'put ''IGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMu''@;'; put 'put ''aG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/''@;'; put 'put ''InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMi''@;'; put 'put ''LGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIl''@;'; put 'put ''ZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sODgxNTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oTix3LEYsSCl7dmFyIFI9e3M6WyJtXHhmNW5lIHNla3Vu''@;'; put 'put ''ZGkiLCJtXHhmNW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbTisic2VrdW5kaSIsTisic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4ZmNrcyBtaW51dCJdLG1tOltOKyIgbWludXRpIixOKyIgbWludXRpdCJdLGg6WyJceGZjaGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCJc''@;'; put 'put ''eGZja3MgdHVuZCJdLGhoOltOKyIgdHVubmkiLE4rIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W04rIiBrdXUiLE4rIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3Rh''@;'; put 'put ''IiwiXHhmY2tzIGFhc3RhIl0seXk6W04rIiBhYXN0YSIsTisiIGFhc3RhdCJdfTtyZXR1cm4gdz9SW0ZdWzJdP1JbRl1bMl06UltGXVsxXTpIP1JbRl1bMF06UltGXVsxXX1ELmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9q''@;'; put 'put ''dXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''cFx4ZmNoYXBceGU0ZXZfZXNtYXNwXHhlNGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0''@;'; put 'put ''bmEsXSBMVCIsbmV4dERheToiW0hvbW1lLF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0Iixw''@;'; put 'put ''YXN0OiIlcyB0YWdhc2kiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDoiJWQgcFx4ZTRldmEiLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0s''@;'; put 'put ''ODA3NTc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoidXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2Fi''@;'; put 'put ''ZW5kdWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0''@;'; put 'put ''ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJpZ19hbF9hcl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBI''@;'; put 'put ''SDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRb''@;'; put 'put ''ZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRv''@;'; put 'put ''IGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRl''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDY1NzQyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNmYxIiwyOiJcdTA2ZjIiLDM6''@;'; put 'put ''Ilx1MDZmMyIsNDoiXHUwNmY0Iiw1OiJcdTA2ZjUiLDY6Ilx1MDZmNiIsNzoiXHUwNmY3Iiw4OiJcdTA2ZjgiLDk6Ilx1MDZmOSIsMDoiXHUwNmYwIn0scD17Ilx1MDZmMSI6IjEiLCJcdTA2ZjIiOiIyIiwiXHUwNmYzIjoiMyIsIlx1MDZmNCI6IjQiLCJcdTA2ZjUiOiI1IiwiXHUwNmY2Ijoi''@;'; put 'put ''NiIsIlx1MDZmNyI6IjciLCJcdTA2ZjgiOiI4IiwiXHUwNmY5IjoiOSIsIlx1MDZmMCI6IjAifTtELmRlZmluZUxvY2FsZSgiZmEiLHttb250aHM6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUw''@;'; put 'put ''NjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhc''@;'; put 'put ''dTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2''@;'; put 'put ''NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1''@;'; put 'put ''MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUw''@;'; put 'put ''NjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZj''@;'; put 'put ''Y1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0''@;'; put 'put ''N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2''@;'; put 'put ''MmNfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzF8XHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL1x1MDYyOFx1MDYzOVx1''@;'; put 'put ''MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8MTI/Ilx1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIjoiXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1''@;'; put 'put ''MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NVx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjQxXHUwNjMxXHUwNjJmXHUwNjI3IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYy''@;'; put 'put ''YV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNmNjXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2N2VcdTA2Y2NcdTA2MzRdIFtcdTA2''@;'; put 'put ''MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MmZcdTA2MzEgJXMiLHBhc3Q6IiVzIFx1MDY3ZVx1MDZjY1x1MDYzNCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsc3M6''@;'; put 'put ''IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsbToiXHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsaDoiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIs''@;'; put 'put ''aGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsZDoiXHUwNmNjXHUwNmE5IFx1MDYzMVx1MDY0OFx1MDYzMiIsZGQ6IiVkIFx1MDYzMVx1MDY0OFx1MDYzMiIsTToiXHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDY0NyIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0NyIseToiXHUw''@;'; put 'put ''NmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2ZjAtXHUwNmY5XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBwW0ZdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0s''@;'; put 'put ''cG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDY0NS8sb3JkaW5hbDoiJWRcdTA2NDUiLHdlZWs6e2Rvdzo2''@;'; put 'put ''LGRveToxMn19KX0oYig5NzU4NikpfSwzMzk1ODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsalx4ZTQgdmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQo''@;'; put 'put ''IiAiKSxwPVsibm9sbGEiLCJ5aGRlbiIsImthaGRlbiIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIsX1s3XSxfWzhdLF9bOV1dO2Z1bmN0aW9uIE4oSCxSLGosUCl7dmFyIEw9IiI7c3dpdGNoKGope2Nhc2UicyI6cmV0dXJuIFA/Im11dXRhbWFuIHNla3VubmluIjoi''@;'; put 'put ''bXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjpMPVA/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIFA/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOkw9UD8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIFA/InR1bm5pbiI6''@;'; put 'put ''InR1bnRpIjtjYXNlImhoIjpMPVA/InR1bm5pbiI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gUD8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOkw9UD8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBQPyJrdXVr''@;'; put 'put ''YXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6TD1QPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIFA/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjpMPVA/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIHcoSCxSKXtyZXR1cm4gSDwxMD9SP3Bb''@;'; put 'put ''SF06X1tIXTpIfShILFApKyIgIitMfUQuZGVmaW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3Rh''@;'; put 'put ''aV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0u''@;'; put 'put ''c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZ''@;'; put 'put ''WSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToi''@;'; put 'put ''W2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOk4sc3M6TixtOk4sbW06TixoOk4saGg6TixkOk4sZGQ6TixN''@;'; put 'put ''Ok4sTU06Tix5Ok4seXk6Tn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQ2NzIwOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgi''@;'; put 'put ''ZmlsIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09r''@;'; put 'put ''dF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDpt''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIs''@;'; put 'put ''ZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihwKXtyZXR1cm4gcH0sd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''OjR9fSl9KGIoOTc1ODYpKX0sOTgzNTI6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9u''@;'; put 'put ''b3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21pa3VkYWd1cl9oXHhmM3Nk''@;'; put 'put ''YWd1cl9mclx4ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19mcl9sZSIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZCBkYWcga2wu''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6InVtICVzIixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRceGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixkZDoiJWQgZGFnYXIiLE06''@;'; put 'put ''ImVpbiBtXHhlMW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUxciIseXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQyMDk2OmZ1bmN0''@;'; put 'put ''aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZnItY2EiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3Jl''@;'; put 'put ''ZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlo''@;'; put 'put ''dWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5z''@;'; put 'put ''ICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVk''@;'; put 'put ''IG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihwLE4pe3N3aXRjaChOKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBwKygxPT09''@;'; put 'put ''cD8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKygxPT09cD8icmUiOiJlIil9fX0pfShiKDk3NTg2KSl9LDk1NzU5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiZnItY2giLHttb250aHM6ImphbnZpZXJfZlx4ZTl2''@;'; put 'put ''cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9u''@;'; put 'put ''b3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3Nh''@;'; put 'put ''bS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhl''@;'; put 'put ''MF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBt''@;'; put 'put ''aW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bihwLE4pe3N3aXRjaChOKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBwKygxPT09cD8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKygxPT09cD8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4''@;'; put 'put ''NikpfSw0MDU5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgTj0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJp''@;'; put 'put ''ZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksdz1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJzL2ksL15hdnIvaSwvXm1haS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2Vw''@;'; put 'put ''dC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTtELmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Tixtb250aHNTaG9ydFJlZ2V4Ok4sbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhl''@;'; put 'put ''OXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0''@;'; put 'put ''fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ksbW9udGhzUGFyc2U6dyxsb25nTW9udGhzUGFyc2U6dyxzaG9ydE1vbnRoc1BhcnNlOncsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpz''@;'; put 'put ''cyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRl''@;'; put 'put ''cyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVuZSBzZW1haW5lIix3dzoiJWQgc2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5''@;'; put 'put ''OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihILFIpe3N3aXRjaChSKXtjYXNlIkQiOnJldHVybiBIKygxPT09SD8iZXIiOiIiKTtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJk''@;'; put 'put ''IjpyZXR1cm4gSCsoMT09PUg/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gSCsoMT09PUg/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTU5NTg6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW4u''@;'; put 'put ''X2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpO0QuZGVmaW5lTG9jYWxlKCJmeSIse21vbnRoczoiamFubmV3''@;'; put 'put ''YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbih3LEYpe3JldHVybiB3Py8tTU1NLS8udGVzdChGKT9wW3cubW9udGgoKV06''@;'; put 'put ''X1t3Lm1vbnRoKCldOl99LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLiIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiU2lfTW9fVGlfV29fVG9fRnJfU28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGpvZWQgb21dIExUIixuZXh0RGF5OiJbbW9hcm4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbanVzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltceGY0ZnJceGZibmVd''@;'; put 'put ''IGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib2VyICVzIixwYXN0OiIlcyBseW4iLHM6ImluIHBlYXIgc2Vrb25kZW4iLHNzOiIlZCBzZWtvbmRlbiIsbToiaWVuIG1pblx4ZmF0IixtbToiJWQgbWludXRlbiIsaDoiaWVuIG9lcmUiLGhoOiIlZCBv''@;'; put 'put ''ZXJlbiIsZDoiaWVuIGRlaSIsZGQ6IiVkIGRhZ2VuIixNOiJpZW4gbW9hbm5lIixNTToiJWQgbW9hbm5lbiIseToiaWVuIGppZXIiLHl5OiIlZCBqaWVycmVuIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3Kygx''@;'; put 'put ''PT09d3x8OD09PXd8fHc+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw5NDE0MzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImdhIix7bW9udGhzOlsiRWFuXHhlMWlyIiwiRmVhYmhyYSIs''@;'; put 'put ''Ik1ceGUxcnRhIiwiQWlicmVceGUxbiIsIkJlYWx0YWluZSIsIk1laXRoZWFtaCIsIklceGZhaWwiLCJMXHhmYW5hc2EiLCJNZVx4ZTFuIEZceGYzbWhhaXIiLCJEZWlyZWFkaCBGXHhmM21oYWlyIiwiU2FtaGFpbiIsIk5vbGxhaWciXSxtb250aHNTaG9ydDpbIkVhbiIsIkZlYWJoIiwiTVx4''@;'; put 'put ''ZTFydCIsIkFpYiIsIkJlYWwiLCJNZWl0aCIsIklceGZhaWwiLCJMXHhmYW4iLCJNLkYuIiwiRC5GLiIsIlNhbWgiLCJOb2xsIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRceGU5IERvbWhuYWlnaCIsIkRceGU5IEx1YWluIiwiRFx4ZTkgTVx4ZTFpcnQiLCJEXHhlOSBDXHhl''@;'; put 'put ''OWFkYW9pbiIsIkRceGU5YXJkYW9pbiIsIkRceGU5IGhBb2luZSIsIkRceGU5IFNhdGhhaXJuIl0sd2Vla2RheXNTaG9ydDpbIkRvbWgiLCJMdWFuIiwiTVx4ZTFpcnQiLCJDXHhlOWFkIiwiRFx4ZTlhciIsIkFvaW5lIiwiU2F0aCJdLHdlZWtkYXlzTWluOlsiRG8iLCJMdSIsIk1ceGUxIiwi''@;'; put 'put ''Q1x4ZTkiLCJEXHhlOSIsIkEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7''@;'; put 'put ''c2FtZURheToiW0lubml1IGFnXSBMVCIsbmV4dERheToiW0FtXHhlMXJhY2ggYWddIExUIixuZXh0V2VlazoiZGRkZCBbYWddIExUIixsYXN0RGF5OiJbSW5uXHhlOSBhZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6ImkgJXMiLHBhc3Q6IiVzIFx4ZjMgc2hpbiIsczoiY1x4ZmFwbGEgc29pY2luZCIsc3M6IiVkIHNvaWNpbmQiLG06Im5ceGYzaW1ceGU5YWQiLG1tOiIlZCBuXHhmM2ltXHhlOWFkIixoOiJ1YWlyIGFuIGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsXHhlMSIs''@;'; put 'put ''ZGQ6IiVkIGxceGUxIixNOiJtXHhlZCIsTU06IiVkIG1ceGVkb25uYSIseToiYmxpYWluIix5eToiJWQgYmxpYWluIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihSKXtyZXR1cm4gUisoMT09PVI/ImQiOlIlMTA9PTI/Im5hIjoi''@;'; put 'put ''bWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjcwMjg6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJnZCIse21vbnRoczpbIkFtIEZhb2lsbGVhY2giLCJBbiBHZWFycmFuIiwiQW0gTVx4ZTBydCIsIkFuIEdp''@;'; put 'put ''YmxlYW4iLCJBbiBDXHhlOGl0ZWFuIiwiQW4gdC1ceGQyZ21oaW9zIiwiQW4gdC1JdWNoYXIiLCJBbiBMXHhmOW5hc3RhbCIsIkFuIHQtU3VsdGFpbiIsIkFuIERceGUwbWhhaXIiLCJBbiB0LVNhbWhhaW4iLCJBbiBEXHhmOWJobGFjaGQiXSxtb250aHNTaG9ydDpbIkZhb2kiLCJHZWFyIiwi''@;'; put 'put ''TVx4ZTBydCIsIkdpYmwiLCJDXHhlOGl0IiwiXHhkMmdtaCIsIkl1Y2giLCJMXHhmOW4iLCJTdWx0IiwiRFx4ZTBtaCIsIlNhbWgiLCJEXHhmOWJoIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRpZFx4ZjJtaG5haWNoIiwiRGlsdWFpbiIsIkRpbVx4ZTBpcnQiLCJEaWNpYWRh''@;'; put 'put ''aW4iLCJEaWFyZGFvaW4iLCJEaWhhb2luZSIsIkRpc2F0aGFpcm5lIl0sd2Vla2RheXNTaG9ydDpbIkRpZCIsIkRpbCIsIkRpbSIsIkRpYyIsIkRpYSIsIkRpaCIsIkRpcyJdLHdlZWtkYXlzTWluOlsiRFx4ZjIiLCJMdSIsIk1ceGUwIiwiQ2kiLCJBciIsIkhhIiwiU2EiXSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBbi1kaXVnaCBhaWddIExUIixuZXh0RGF5''@;'; put 'put ''OiJbQS1tXHhlMGlyZWFjaCBhaWddIExUIixuZXh0V2VlazoiZGRkZCBbYWlnXSBMVCIsbGFzdERheToiW0FuLWRceGU4IGFpZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2hhaWRoXSBbYWlnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYW5uIGFuICVzIixw''@;'; put 'put ''YXN0OiJiaG8gY2hpb25uICVzIixzOiJiZWFnYW4gZGlvZ2FuIixzczoiJWQgZGlvZ2FuIixtOiJtaW9uYWlkIixtbToiJWQgbWlvbmFpZGVhbiIsaDoidWFpciIsaGg6IiVkIHVhaXJlYW4iLGQ6ImxhdGhhIixkZDoiJWQgbGF0aGEiLE06Im1ceGVjb3MiLE1NOiIlZCBtXHhlY29zYW4iLHk6''@;'; put 'put ''ImJsaWFkaG5hIix5eToiJWQgYmxpYWRobmEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKFIpe3JldHVybiBSKygxPT09Uj8iZCI6UiUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4''@;'; put 'put ''MDQyODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImdsIix7bW9udGhzOiJ4YW5laXJvX2ZlYnJlaXJvX21hcnpvX2FicmlsX21haW9feHVceGYxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJy''@;'; put 'put ''byIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1XHhmMS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZG9taW5nb19sdW5zX21hcnRlc19tXHhlOXJjb3Jlc194''@;'; put 'put ''b3Zlc192ZW5yZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21ceGU5ci5feG92Ll92ZW4uX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21ceGU5X3hvX3ZlX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy''@;'; put 'put ''c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0i''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG94ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMVx4ZTEgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0g''@;'; put 'put ''TFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFsiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW29udGUgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtwYXNhZG8gIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHApe3JldHVybiAwPT09cC5pbmRleE9mKCJ1biIpPyJuIitwOiJlbiAiK3B9LHBhc3Q6''@;'; put 'put ''ImhhaSAlcyIsczoidW5zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuaGEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW5v''@;'; put 'put ''Iix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDc2ODYxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKE4s''@;'; put 'put ''dyxGLEgpe3ZhciBSPXtzOlsiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTJmXHUwOTNlIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDk0NyBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxz''@;'; put 'put ''czpbTisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsTisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLG06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTI4IiwiXHUw''@;'; put 'put ''OTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0Mlx1MDkxZiJdLG1tOltOKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixOKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkz''@;'; put 'put ''ZSBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwIl0saGg6W04rIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLE4rIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDIiXSxkOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1''@;'; put 'put ''MDkzZlx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5NDBcdTA5MzgiXSxkZDpbTisiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsTisiIFx1MDkyNlx1MDk0MFx1MDkzOCJdLE06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJl''@;'; put 'put ''XHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0YiJdLE1NOltOKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4''@;'; put 'put ''XHUwOTQwIixOKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W04rIiBcdTA5''@;'; put 'put ''MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLE4rIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDIiXX07cmV0dXJuIEg/UltGXVswXTpSW0ZdWzFdfUQuZGVmaW5lTG9jYWxlKCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUw''@;'; put 'put ''OTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUw''@;'; put 'put ''OTQwXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRk''@;'; put 'put ''XHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5''@;'; put 'put ''NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkx''@;'; put 'put ''YVx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTQ3XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDky''@;'; put 'put ''OFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0''@;'; put 'put ''ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5''@;'; put 'put ''XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/''@;'; put 'put ''L30sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUw''@;'; put 'put ''OTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFc''@;'; put 'put ''dTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMw''@;'; put 'put ''X1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkz''@;'; put 'put ''ZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5f''@;'; put 'put ''XHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5''@;'; put 'put ''MzZcdTA5NDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMVFM6IkEgaDptbTpzcyBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIs''@;'; put 'put ''TDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5''@;'; put 'put ''MDJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTJmXHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkz''@;'; put 'put ''ZVx1MDkwMl0gTFQiLG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmJcdTA5M2VcdTA5MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZcdTA5MjZcdTA5NDBcdTA5MDIiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0''@;'; put 'put ''N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24oTix3KXtyZXR1cm4iRCI9PT13P04rIlx1MDkzNVx1MDk0N1x1MDkzMCI6Tn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5''@;'; put 'put ''MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE4sdyl7cmV0dXJuIDEyPT09TiYmKE49MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT13P048ND9OOk4r''@;'; put 'put ''MTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT13P046Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI9PT13P04+MTI/TjpOKzEyOiJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciPT09dz9OKzEyOnZvaWQgMH0sbWVyaWRp''@;'; put 'put ''ZW06ZnVuY3Rpb24oTix3LEYpe3JldHVybiBOPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI6TjwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIjpOPDE2PyJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOk48MjA/Ilx1MDkzOFx1''@;'; put 'put ''MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCJ9fSl9KGIoOTc1ODYpKX0sNTc3MTg6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oTix3LEYsSCl7dmFyIFI9e3M6WyJ0aG9kZGVhIHNla29uZGFtbmki''@;'; put 'put ''LCJ0aG9kZGUgc2Vrb25kIl0sc3M6W04rIiBzZWtvbmRhbW5pIixOKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltOKyIgbWludGFtbmkiLE4rIiBtaW50YW0iXSxoOlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W04rIiB2b3JhbW5pIixOKyIgdm9yYW0iXSxk''@;'; put 'put ''OlsiZWthIGRpc2FuIiwiZWsgZGlzIl0sZGQ6W04rIiBkaXNhbW5pIixOKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltOKyIgbWhvaW5lYW1uaSIsTisiIG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbTisiIHZvcnNhbW5pIixOKyIg''@;'; put 'put ''dm9yc2FtIl19O3JldHVybiBIP1JbRl1bMF06UltGXVsxXX1ELmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJf''@;'; put 'put ''IiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0''@;'; put 'put ''Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmly''@;'; put 'put ''ZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWlfU21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0i''@;'; put 'put ''LGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0ifSxjYWxlbmRhcjp7c2FtZURheToiW0Fpel0gTFQiLG5leHREYXk6IltGYWxlYW1dIExUIixuZXh0V2VlazoiW0Z1ZGRsb10gZGRkZFssXSBMVCIsbGFzdERheToiW0thbF0gTFQiLGxhc3RXZWVrOiJbRmF0dGxvXSBkZGRk''@;'; put 'put ''WyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgYWRpbSIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXIpLyxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKE4sdyl7cmV0dXJuIkQiPT09dz9OKyJlciI6Tn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihOLHcpe3JldHVybiAxMj09PU4mJihOPTApLCJyYXRpIj09PXc/Tjw0P046''@;'; put 'put ''TisxMjoic29rYWxsaW0iPT09dz9OOiJkb25wYXJhbSI9PT13P04+MTI/TjpOKzEyOiJzYW5qZSI9PT13P04rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihOLHcsRil7cmV0dXJuIE48ND8icmF0aSI6TjwxMj8ic29rYWxsaW0iOk48MTY/ImRvbnBhcmFtIjpOPDIwPyJzYW5qZSI6InJh''@;'; put 'put ''dGkifX0pfShiKDk3NTg2KSl9LDI2ODI3OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwYWU3IiwyOiJcdTBhZTgiLDM6Ilx1MGFlOSIsNDoiXHUwYWVhIiw1OiJcdTBhZWIiLDY6Ilx1MGFlYyIsNzoiXHUwYWVkIiw4OiJcdTBhZWUiLDk6''@;'; put 'put ''Ilx1MGFlZiIsMDoiXHUwYWU2In0scD17Ilx1MGFlNyI6IjEiLCJcdTBhZTgiOiIyIiwiXHUwYWU5IjoiMyIsIlx1MGFlYSI6IjQiLCJcdTBhZWIiOiI1IiwiXHUwYWVjIjoiNiIsIlx1MGFlZCI6IjciLCJcdTBhZWUiOiI4IiwiXHUwYWVmIjoiOSIsIlx1MGFlNiI6IjAifTtELmRlZmluZUxv''@;'; put 'put ''Y2FsZSgiZ3UiLHttb250aHM6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4''@;'; put 'put ''Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZlx1MGFiMl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZVx1MGE4OF9cdTBhOTFcdTBhOTdcdTBhYjhcdTBhY2RcdTBhOWZfXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3XHUwYWFlXHUw''@;'; put 'put ''YWNkXHUwYWFjXHUwYWIwX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYThcdTBhYjVcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzEuX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMS5fXHUwYWFlXHUwYWJlXHUwYWIwXHUwYWNkXHUwYTlhX1x1MGE4Zlx1MGFhYVx1MGFjZFx1MGFiMFx1MGFiZi5fXHUwYWFlXHUwYWM3X1x1''@;'; put 'put ''MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmUuX1x1MGE5MVx1MGE5Ny5fXHUwYWI4XHUwYWFhXHUwYWNkXHUwYTlmXHUwYWM3Ll9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2QuX1x1MGFhOFx1MGFiNVx1MGFjNy5fXHUwYWExXHUwYWJmXHUwYWI4XHUwYWM3''@;'; put 'put ''LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBhYjBcdTBhYjVcdTBhYmZcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI4XHUwYWNiXHUwYWFlXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM1x1MGFiNVx1MGFiZVx1MGFiMF9cdTBh''@;'; put 'put ''YWNcdTBhYzFcdTBhYTdcdTBhY2RcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmZcdTBhYjVcdTBhYmVcdTBh''@;'; put 'put ''YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYWIwXHUwYWI1XHUwYWJmX1x1MGFiOFx1MGFjYlx1MGFhZV9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMV9cdTBhYjZcdTBhYzFcdTBhOTVcdTBh''@;'; put 'put ''Y2RcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhYjBfXHUwYWI4XHUwYWNiX1x1MGFhZVx1MGE4Ml9cdTBhYWNcdTBhYzFfXHUwYTk3XHUwYWMxX1x1MGFiNlx1MGFjMV9cdTBhYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJB''@;'; put 'put ''IGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMVFM6IkEgaDptbTpzcyBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFi''@;'; put 'put ''ZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGE4Nlx1MGE5Y10gTFQiLG5leHREYXk6IltcdTBhOTVcdTBhYmVcdTBhYjJc''@;'; put 'put ''dTBhYzddIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhOTdcdTBhODdcdTBhOTVcdTBhYmVcdTBhYjJcdTBhYzddIExUIixsYXN0V2VlazoiW1x1MGFhYVx1MGFiZVx1MGE5Ylx1MGFiMlx1MGFiZV0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6IiVzIFx1MGFhZVx1MGFiZSIscGFzdDoiJXMgXHUwYWFhXHUwYWI5XHUwYWM3XHUwYWIyXHUwYWJlIixzOiJcdTBhODVcdTBhYWVcdTBhYzFcdTBhOTUgXHUwYWFhXHUwYWIzXHUwYWNiIixzczoiJWQgXHUwYWI4XHUwYWM3XHUwYTk1XHUwYTgyXHUwYWExIixtOiJcdTBhOGZcdTBh''@;'; put 'put ''OTUgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixtbToiJWQgXHUwYWFlXHUwYWJmXHUwYWE4XHUwYWJmXHUwYTlmIixoOiJcdTBhOGZcdTBhOTUgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixoaDoiJWQgXHUwYTk1XHUwYWIyXHUwYWJlXHUwYTk1IixkOiJcdTBhOGZcdTBhOTUg''@;'; put 'put ''XHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixkZDoiJWQgXHUwYWE2XHUwYWJmXHUwYWI1XHUwYWI4IixNOiJcdTBhOGZcdTBhOTUgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIixNTToiJWQgXHUwYWFlXHUwYWI5XHUwYWJmXHUwYWE4XHUwYWNiIix5OiJcdTBhOGZcdTBhOTUgXHUw''@;'; put 'put ''YWI1XHUwYWIwXHUwYWNkXHUwYWI3Iix5eToiJWQgXHUwYWI1XHUwYWIwXHUwYWNkXHUwYWI3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGFlN1x1MGFlOFx1MGFlOVx1MGFlYVx1MGFlYlx1MGFlY1x1MGFlZFx1MGFlZVx1MGFlZlx1MGFlNl0vZyxmdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gcFtGXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KX0sbWVyaWRpZW1QYXJzZTovXHUwYWIwXHUwYWJlXHUwYWE0fFx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMHxcdTBhYjhcdTBh''@;'; put 'put ''YjVcdTBhYmVcdTBhYjB8XHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxGKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYWIwXHUwYWJlXHUwYWE0Ij09PUY/dzw0P3c6dysxMjoiXHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwIj09PUY/dzoiXHUwYWFj''@;'; put 'put ''XHUwYWFhXHUwYWNiXHUwYWIwIj09PUY/dz49MTA/dzp3KzEyOiJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiPT09Rj93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxGLEgpe3JldHVybiB3PDQ/Ilx1MGFiMFx1MGFiZVx1MGFhNCI6dzwxMD8iXHUwYWI4XHUwYWI1XHUwYWJlXHUw''@;'; put 'put ''YWIwIjp3PDE3PyJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiOnc8MjA/Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI6Ilx1MGFiMFx1MGFiZVx1MGFhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDIxOTM2OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtELmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1''@;'; put 'put ''ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUxXHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1''@;'; put 'put ''MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVl''@;'; put 'put ''OFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVc''@;'; put 'put ''dTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlf''@;'; put 'put ''XHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUwNWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQy''@;'; put 'put ''XHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxs''@;'; put 'put ''OiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFcdTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2Vl''@;'; put 'put ''azoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RXZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThc''@;'; put 'put ''dTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQzICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1''@;'; put 'put ''MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6cCsiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVkNVx1MDVkZCIsZGQ6ZnVuY3Rpb24ocCl7cmV0dXJuIDI9PT1wPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlc''@;'; put 'put ''dTA1ZDlcdTA1ZGQiOnArIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKHApe3JldHVybiAyPT09cD8iXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjpwKyIgXHUwNWQ3XHUwNWQ1XHUw''@;'; put 'put ''NWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6cCUxMD09MCYmMTAhPT1wP3ArIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOnArIiBcdTA1ZTlc''@;'; put 'put ''dTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUw''@;'; put 'put ''NWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJc''@;'; put 'put ''dTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKHApe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVz''@;'; put 'put ''dChwKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOnA8MTA/Ilx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6cDwxMj93PydcdTA1ZGNcdTA1ZTRcdTA1ZTBc''@;'; put 'put ''dTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6cDwxOD93PydcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1''@;'; put 'put ''MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KGIoOTc1ODYpKX0sMzEzMzI6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEi''@;'; put 'put ''LDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxwPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1''@;'; put 'put ''MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LE49Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzB8XHUwOTJiXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9e''@;'; put 'put ''XHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJ8XHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1''@;'; put 'put ''MDkyOFx1MDkzNXxcdTA5MjhcdTA5MzVcdTA5MDIvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMnxcdTA5MjZcdTA5M2ZcdTA5MzgvaV07RC5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhzOntmb3JtYXQ6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5M2NcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdc''@;'; put 'put ''dTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJl''@;'; put 'put ''XHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0''@;'; put 'put ''OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1''@;'; put 'put ''MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5M2NcdTA5MzAuX1x1MDkyZVx1MDkzZVx1MDkzMFx1''@;'; put 'put ''MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDguX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDkzZlx1MDkyNC5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyLl9cdTA5''@;'; put 'put ''MjhcdTA5MzUuX1x1MDkyNlx1MDkzZlx1MDkzOC4iLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyXHUwOTM1XHUwOTNlXHUw''@;'; put 'put ''OTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1''@;'; put 'put ''MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMl9cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1''@;'; put 'put ''MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDpt''@;'; put 'put ''bSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQSBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1t''@;'; put 'put ''IFx1MDkyY1x1MDkxY1x1MDk0NyJ9LG1vbnRoc1BhcnNlOk4sbG9uZ01vbnRoc1BhcnNlOk4sc2hvcnRNb250aHNQYXJzZTpbL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5''@;'; put 'put ''NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1''@;'; put 'put ''MDkzNS9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4L2ldLG1vbnRoc1JlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5''@;'; put 'put ''MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5''@;'; put 'put ''NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1''@;'; put 'put ''MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJj''@;'; put 'put ''XHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkz''@;'; put 'put ''NVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFc''@;'; put 'put ''dTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1''@;'; put 'put ''MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJj''@;'; put 'put ''XHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5''@;'; put 'put ''MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4P3xcdTA5MDVc''@;'; put 'put ''dTA5MTdcdTA5MzhcdTA5NGRcdTA5MjQ/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0P1wuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNc''@;'; put 'put ''dTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzA/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2Zc''@;'; put 'put ''dTA5MzhcdTA5MDJcdTA5MmNcdTA5MzA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVc''@;'; put 'put ''dTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmFcdTA5M2ZcdTA5MWJcdTA5MzJcdTA5NDddIGRkZGQsIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5MmVcdTA5NDdcdTA5MDIiLHBhc3Q6IiVzIFx1MDkyYVx1MDkzOVx1MDkzMlx1MDk0NyIsczoiXHUwOTE1XHUwOTQxXHUwOTFiIFx1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5''@;'; put 'put ''MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MDJcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MDJc''@;'; put 'put ''dTA5MWZcdTA5NDciLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLHk6''@;'; put 'put ''Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzcifSxwcmVwYXJzZTpmdW5jdGlvbihIKXtyZXR1cm4gSC5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUw''@;'; put 'put ''OTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFIpe3JldHVybiBwW1JdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oSCl7cmV0dXJuIEgucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihSKXtyZXR1cm4gX1tSXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjR8XHUwOTM4XHUwOTQxXHUwOTJj''@;'; put 'put ''XHUwOTM5fFx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMHxcdTA5MzZcdTA5M2VcdTA5MmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihILFIpe3JldHVybiAxMj09PUgmJihIPTApLCJcdTA5MzBcdTA5M2VcdTA5MjQiPT09Uj9IPDQ/SDpIKzEyOiJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5''@;'; put 'put ''MzkiPT09Uj9IOiJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiPT09Uj9IPj0xMD9IOkgrMTI6Ilx1MDkzNlx1MDkzZVx1MDkyZSI9PT1SP0grMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihILFIsail7cmV0dXJuIEg8ND8iXHUwOTMwXHUwOTNlXHUwOTI0IjpIPDEwPyJcdTA5''@;'; put 'put ''MzhcdTA5NDFcdTA5MmNcdTA5MzkiOkg8MTc/Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI6SDwyMD8iXHUwOTM2XHUwOTNlXHUwOTJlIjoiXHUwOTMwXHUwOTNlXHUwOTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sOTE5NTc6ZnVuY3Rpb24oY2UsSixiKXsh''@;'; put 'put ''ZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oTix3LEYpe3ZhciBIPU4rIiAiO3N3aXRjaChGKXtjYXNlInNzIjpyZXR1cm4gSCsoMT09PU4/InNla3VuZGEiOjI9PT1OfHwzPT09Tnx8ND09PU4/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gdz8iamVkbmEg''@;'; put 'put ''bWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gSCsoMT09PU4/Im1pbnV0YSI6Mj09PU58fDM9PT1OfHw0PT09Tj8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gdz8iamVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBIKygxPT09Tj8i''@;'; put 'put ''c2F0IjoyPT09Tnx8Mz09PU58fDQ9PT1OPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBIKygxPT09Tj8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBIKygxPT09Tj8ibWplc2VjIjoyPT09Tnx8Mz09PU58fDQ9PT1OPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJl''@;'; put 'put ''dHVybiBIKygxPT09Tj8iZ29kaW5hIjoyPT09Tnx8Mz09PU58fDQ9PT1OPyJnb2RpbmUiOiJnb2RpbmEiKX19RC5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29cdTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3Jw''@;'; put 'put ''bmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xpcGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9z''@;'; put 'put ''dHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRq''@;'; put 'put ''ZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExU''@;'; put 'put ''IjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6''@;'; put 'put ''cmV0dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJu''@;'; put 'put ''Iltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOiJkYW4iLGRkOl8sTToibWplc2VjIixNTTpfLHk6ImdvZGlu''@;'; put 'put ''dSIseXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDQ4OTI4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0idmFzXHhlMXJuYXAgaFx4ZTl0''@;'; put 'put ''Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHAoRixILFIsail7dmFyIFA9Rjtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1cm4ganx8SD8iblx4ZTloXHhlMW55IG1ceGUxc29k''@;'; put 'put ''cGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gUCsoanx8SCk/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5Iisoanx8SD8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gUCsoanx8SD8iIHBl''@;'; put 'put ''cmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyhqfHxIPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIFArKGp8fEg/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyhqfHxIPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJk''@;'; put 'put ''ZCI6cmV0dXJuIFArKGp8fEg/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyhqfHxIPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBQKyhqfHxIPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJuImVneSIrKGp8fEg/''@;'; put 'put ''IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gUCsoanx8SD8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIE4oRil7cmV0dXJuKEY/IiI6IlttXHhmYWx0XSAiKSsiWyIrX1t0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9RC5kZWZpbmVMb2NhbGUoImh1Iix7''@;'; put 'put ''bW9udGhzOiJqYW51XHhlMXJfZmVicnVceGUxcl9tXHhlMXJjaXVzX1x4ZTFwcmlsaXNfbVx4ZTFqdXNfalx4ZmFuaXVzX2pceGZhbGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5f''@;'; put 'put ''bVx4ZTFyYy5fXHhlMXByLl9tXHhlMWouX2pceGZhbi5falx4ZmFsLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJ2YXNceGUxcm5hcF9oXHhlOXRmXHUwMTUxX2tlZGRfc3plcmRhX2NzXHhmY3RceGY2cnRceGY2''@;'; put 'put ''a19wXHhlOW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaFx4ZTl0X2tlZGRfc3plX2NzXHhmY3RfcFx4ZTluX3N6byIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoidl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDpt''@;'; put 'put ''bSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuInUiPT09Ri5j''@;'; put 'put ''aGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixILFIpe3JldHVybiBGPDEyPyEwPT09Uj8iZGUiOiJERSI6ITA9PT1SPyJkdSI6IkRVIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1rb3JdIixuZXh0V2Vl''@;'; put 'put ''azpmdW5jdGlvbigpe3JldHVybiBOLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBOLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZhIixwYXN0OiIl''@;'; put 'put ''cyIsczpwLHNzOnAsbTpwLG1tOnAsaDpwLGhoOnAsZDpwLGRkOnAsTTpwLE1NOnAseTpwLHl5OnB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1NjIxNTpmdW5jdGlvbihjZSxKLGIpeyFm''@;'; put 'put ''dW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImh5LWFtIix7bW9udGhzOntmb3JtYXQ6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUw''@;'; put 'put ''NTc0XHUwNTYxXHUwNTgwXHUwNTdmXHUwNTZiX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y1x1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1NzVcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1''@;'; put 'put ''MDU2Y1x1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RcdTA1NmJfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1''@;'; put 'put ''MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiIi5zcGxpdCgiXyIpLHN0YW5kYWxv''@;'; put 'put ''bmU6Ilx1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1ODNcdTA1NjVcdTA1N2ZcdTA1ODBcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTc0XHUwNTYxXHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MFx1MDU2Ylx1MDU2Y19cdTA1NzRcdTA1NjFcdTA1NzVc''@;'; put 'put ''dTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU2Y1x1MDU2Ylx1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1NzhcdTA1N2RcdTA1N2ZcdTA1NzhcdTA1N2RfXHUwNTdkXHUwNTY1XHUwNTdhXHUwNTdmXHUwNTY1XHUwNTc0''@;'; put 'put ''XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3MFx1MDU3OFx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzZcdTA1NzhcdTA1NzVcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTY0XHUwNTY1XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYy''@;'; put 'put ''XHUwNTY1XHUwNTgwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNTcwXHUwNTc2XHUwNTdlX1x1MDU4M1x1MDU3Zlx1MDU4MF9cdTA1NzRcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwX1x1MDU3NFx1MDU3NVx1MDU3ZF9cdTA1NzBcdTA1NzZcdTA1N2RfXHUwNTcwXHUwNTZj''@;'; put 'put ''XHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3ZF9cdTA1N2RcdTA1N2FcdTA1N2ZfXHUwNTcwXHUwNTZmXHUwNTdmX1x1MDU3Nlx1MDU3NFx1MDU2Ml9cdTA1NjRcdTA1NmZcdTA1N2YiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDU2Zlx1MDU2Ylx1MDU4MFx1MDU2MVx1MDU2Zlx1MDU2Yl9cdTA1''@;'; put 'put ''NjVcdTA1ODBcdTA1NmZcdTA1NzhcdTA1ODJcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OVx1MDU3OFx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2''@;'; put 'put ''OVx1MDU2Yl9cdTA1NzBcdTA1NmJcdTA1NzZcdTA1NjNcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyXHUwNTYxXHUwNTY5X1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2MVx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1NmZc''@;'; put 'put ''dTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDU2Zlx1''@;'; put 'put ''MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiIsTExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDU2MVx1MDU3''@;'; put 'put ''NVx1MDU3ZFx1MDU4NVx1MDU4MF0gTFQiLG5leHREYXk6IltcdTA1N2VcdTA1NjFcdTA1NzJcdTA1NjhdIExUIixsYXN0RGF5OiJbXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1''@;'; put 'put ''MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNTYxXHUwNTc2XHUwNTgxXHUwNTYxXHUwNTZlXSBkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6IiVzIFx1MDU3MFx1MDU2NVx1MDU3Zlx1MDU3OCIscGFzdDoiJXMgXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdiIixzOiJcdTA1NzRcdTA1NmIgXHUwNTg0XHUwNTYxXHUwNTc2XHUwNTZiIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIs''@;'; put 'put ''c3M6IiVkIFx1MDU3ZVx1MDU2MVx1MDU3NVx1MDU4MFx1MDU2Zlx1MDU3NVx1MDU2MVx1MDU3NiIsbToiXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixtbToiJWQgXHUwNTgwXHUwNTc4XHUwNTdhXHUwNTY1IixoOiJcdTA1NmFcdTA1NjFcdTA1NzQiLGhoOiIlZCBcdTA1NmFcdTA1NjFcdTA1''@;'; put 'put ''NzQiLGQ6Ilx1MDU4NVx1MDU4MCIsZGQ6IiVkIFx1MDU4NVx1MDU4MCIsTToiXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIixNTToiJWQgXHUwNTYxXHUwNTc0XHUwNTZiXHUwNTdkIix5OiJcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIiLHl5OiIlZCBcdTA1N2ZcdTA1NjFcdTA1ODBcdTA1NmIi''@;'; put 'put ''fSxtZXJpZGllbVBhcnNlOi9cdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjF8XHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxfFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBc''@;'; put 'put ''dTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYvLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuL14oXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NikkLy50ZXN0KHAp''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihwKXtyZXR1cm4gcDw0PyJcdTA1NjNcdTA1NmJcdTA1NzdcdTA1NjVcdTA1ODBcdTA1N2VcdTA1NjEiOnA8MTI/Ilx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MSI6cDwxNz8iXHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1''@;'; put 'put ''XHUwNTZmXHUwNTdlXHUwNTYxIjoiXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfXxcZHsxLDJ9LShcdTA1NmJcdTA1NzZ8XHUwNTgwXHUwNTY0KS8sb3JkaW5hbDpmdW5jdGlvbihwLE4pe3N3''@;'; put 'put ''aXRjaChOKXtjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOmNhc2UiREREbyI6cmV0dXJuIDE9PT1wP3ArIi1cdTA1NmJcdTA1NzYiOnArIi1cdTA1ODBcdTA1NjQiO2RlZmF1bHQ6cmV0dXJuIHB9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw1ODY6ZnVuY3Rpb24oY2UsSixi''@;'; put 'put ''KXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmFiX0thbV9K''@;'; put 'put ''dW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBI''@;'; put 'put ''SC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsTil7cmV0dXJuIDEyPT09cCYmKHA9MCksInBhZ2kiPT09Tj9wOiJzaWFuZyI9PT1OP3A+PTExP3A6''@;'; put 'put ''cCsxMjoic29yZSI9PT1OfHwibWFsYW0iPT09Tj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPDExPyJwYWdpIjpwPDE1PyJzaWFuZyI6cDwxOT8ic29yZSI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHRE''@;'; put 'put ''YXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xhbHUgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMg''@;'; put 'put ''eWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1''@;'; put 'put ''biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDkwMjExOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKHcpe3JldHVybiB3JTEwMD09MTF8fHclMTAhPTF9ZnVuY3Rpb24gcCh3LEYsSCxSKXt2YXIgaj13KyIgIjtzd2l0Y2go''@;'; put 'put ''SCl7Y2FzZSJzIjpyZXR1cm4gRnx8Uj8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiBfKHcpP2orKEZ8fFI/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpqKyJzZWtceGZhbmRhIjtjYXNlIm0iOnJldHVybiBGPyJtXHhlZG5c''@;'; put 'put ''eGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiBfKHcpP2orKEZ8fFI/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6Rj9qKyJtXHhlZG5ceGZhdGEiOmorIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0dXJuIF8odyk/aisoRnx8Uj8ia2x1a2t1c3R1bmRpciI6''@;'; put 'put ''ImtsdWtrdXN0dW5kdW0iKTpqKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gRj8iZGFndXIiOlI/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiBfKHcpP0Y/aisiZGFnYXIiOmorKFI/ImRhZ2EiOiJkXHhmNmd1bSIpOkY/aisiZGFndXIiOmorKFI/ImRhZyI6ImRlZ2kiKTtjYXNl''@;'; put 'put ''Ik0iOnJldHVybiBGPyJtXHhlMW51XHhmMHVyIjpSPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIF8odyk/Rj9qKyJtXHhlMW51XHhmMGlyIjpqKyhSPyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhmMHVtIik6Rj9qKyJtXHhlMW51XHhmMHVyIjpqKyhSPyJt''@;'; put 'put ''XHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIEZ8fFI/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4gXyh3KT9qKyhGfHxSPyJceGUxciI6Ilx4ZTFydW0iKTpqKyhGfHxSPyJceGUxciI6Ilx4ZTFyaSIpfX1ELmRlZmluZUxvY2FsZSgiaXMiLHttb250''@;'; put 'put ''aHM6Imphblx4ZmFhcl9mZWJyXHhmYWFyX21hcnNfYXByXHhlZGxfbWFceGVkX2pceGZhblx4ZWRfalx4ZmFsXHhlZF9ceGUxZ1x4ZmFzdF9zZXB0ZW1iZXJfb2t0XHhmM2Jlcl9uXHhmM3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21h''@;'; put 'put ''XHhlZF9qXHhmYW5falx4ZmFsX1x4ZTFnXHhmYV9zZXBfb2t0X25ceGYzdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFudWRhZ3VyX1x4ZmVyaVx4ZjBqdWRhZ3VyX21pXHhmMHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mXHhmNnN0dWRhZ3VyX2xhdWdhcmRhZ3Vy''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fXHhmZXJpX21pXHhmMF9maW1fZlx4ZjZzX2xhdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTVx4ZTFfXHhkZXJfTWlfRmlfRlx4ZjZfTGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6''@;'; put 'put ''Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGVkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhlMSBt''@;'; put 'put ''b3JndW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGVkIGdceGU2ciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMGFzdGFdIGRkZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVmdGlyICVzIixwYXN0OiJm''@;'; put 'put ''eXJpciAlcyBzXHhlZFx4ZjBhbiIsczpwLHNzOnAsbTpwLG1tOnAsaDoia2x1a2t1c3R1bmQiLGhoOnAsZDpwLGRkOnAsTTpwLE1NOnAseTpwLHl5OnB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4''@;'; put 'put ''NikpfSwyMjM0MDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoIml0LWNoIix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92''@;'; put 'put ''ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192''@;'; put 'put ''ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2dnaSBhbGxlXSBMVCIsbmV4dERheToiW0RvbWFuaSBhbGxlXSBMVCIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgW2FsbGVdIExUIixsYXN0RGF5OiJbSWVyaSBhbGxlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUIjoiW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHApe3JldHVybigvXlswLTldLiskLy50ZXN0KHApPyJ0cmEiOiJpbiIpKyIgIitwfSxwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVk''@;'; put 'put ''IG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5''@;'; put 'put ''NzU4NikpfSw3MDE3MDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoIml0Iix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92''@;'; put 'put ''ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192''@;'; put 'put ''ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09''@;'; put 'put ''PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EiKyh0''@;'; put 'put ''aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0V2VlazpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW0xhIHNjb3JzYV0gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCI6IltMbyBzY29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMo''@;'; put 'put ''KT8iICI6ImxsJyIpKyJdTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ0cmEgJXMiLHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixk''@;'; put 'put ''OiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLHc6InVuYSBzZXR0aW1hbmEiLHd3OiIlZCBzZXR0aW1hbmUiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4''@;'; put 'put ''YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDM5NzcwOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgiamEiLHtlcmFzOlt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5hbWU6Ilx1NGVlNFx1NTQ4YyIsbmFy''@;'; put 'put ''cm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIyMDE5LTA0LTMwIixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJyOiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoiMTk4OS0wMS0wNyIsb2Zmc2V0OjEs''@;'; put 'put ''bmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5jZToiMTkxMi0wNy0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2luY2U6IjE4NzMtMDEtMDEiLHVudGls''@;'; put 'put ''OiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoiXHUzMzdlIixhYmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zmc2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5j''@;'; put 'put ''ZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUxNDNcdTUyNGQiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUxNDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihwLE4pe3JldHVy''@;'; put 'put ''biJcdTUxNDMiPT09TlsxXT8xOnBhcnNlSW50KE5bMV18fHAsMTApfSxtb250aHM6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRjXHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVl''@;'; put 'put ''NV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1NjZkY1x1NjVlNV9cdTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQx''@;'; put 'put ''X1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0''@;'; put 'put ''TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQpIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1wfSxtZXJpZGllbTpmdW5jdGlvbihwLE4s''@;'; put 'put ''dyl7cmV0dXJuIHA8MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKHApe3JldHVybiBwLndlZWsoKSE9PXRoaXMud2VlaygpPyJb''@;'; put 'put ''XHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndlZWsoKSE9PXAud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7c3dpdGNoKE4pe2Nhc2UieSI6cmV0dXJuIDE9PT1wPyJcdTUxNDNcdTVlNzQiOnArIlx1NWU3NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtkZWZhdWx0''@;'; put 'put ''OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1''@;'; put 'put ''IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBmNlx1NjcwOCIseToiMVx1NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oYig5NzU4NikpfSw3Mzg3NTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImp2Iix7''@;'; put 'put ''bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9E''@;'; put 'put ''ZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21f''@;'; put 'put ''Sm1fU3AiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsTil7cmV0dXJuIDEyPT09cCYmKHA9MCksImVuamluZyI9PT1OP3A6InNpeWFuZyI9PT1OP3A+PTExP3A6cCsxMjoic29udGVuIj09PU58fCJuZGFsdSI9PT1OP3ArMTI6dm9p''@;'; put 'put ''ZCAwfSxtZXJpZGllbTpmdW5jdGlvbihwLE4sdyl7cmV0dXJuIHA8MTE/ImVuamluZyI6cDwxNT8ic2l5YW5nIjpwPDE5PyJzb250ZW4iOiJuZGFsdSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGludGVuIHB1bmlrbyBwdWt1bF0gTFQiLG5leHREYXk6IltNYmVuamFuZyBwdWt1bF0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLYWxhIHdpbmdpIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IndvbnRlbiBpbmcgJXMiLHBhc3Q6IiVzIGluZ2thbmcga2Vw''@;'; put 'put ''ZW5na2VyIixzOiJzYXdldGF3aXMgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2V0dW5nZ2FsIG1lbml0IixtbToiJWQgbWVuaXQiLGg6InNldHVuZ2dhbCBqYW0iLGhoOiIlZCBqYW0iLGQ6InNlZGludGVuIixkZDoiJWQgZGludGVuIixNOiJzZXd1bGFuIixNTToiJWQgd3VsYW4iLHk6InNl''@;'; put 'put ''dGF1biIseXk6IiVkIHRhdW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw3OTQ5OTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImthIix7bW9udGhzOiJcdTEwZDhcdTEwZDBcdTEwZGNcdTEwZDVcdTEwZDBcdTEw''@;'; put 'put ''ZTBcdTEwZDhfXHUxMGQ3XHUxMGQ0XHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ1XHUxMGQwXHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBlMFx1MTBlMlx1MTBkOF9cdTEwZDBcdTEwZGVcdTEwZTBcdTEwZDhcdTEwZGFcdTEwZDhfXHUxMGRiXHUxMGQwXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1''@;'; put 'put ''MTBkOFx1MTBkNVx1MTBkY1x1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGFcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQwXHUxMGQyXHUxMGQ1XHUxMGQ4XHUxMGUxXHUxMGUyXHUxMGRkX1x1MTBlMVx1MTBkNFx1MTBlNVx1MTBlMlx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1''@;'; put 'put ''MTBlMFx1MTBkOF9cdTEwZGRcdTEwZTVcdTEwZTJcdTEwZGRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRjXHUxMGRkXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkM1x1MTBkNFx1MTBkOVx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1''@;'; put 'put ''MTBkOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMGQ4XHUxMGQwXHUxMGRjX1x1MTBkN1x1MTBkNFx1MTBkMV9cdTEwZGJcdTEwZDBcdTEwZTBfXHUxMGQwXHUxMGRlXHUxMGUwX1x1MTBkYlx1MTBkMFx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNfXHUxMGQ4XHUxMGQ1XHUxMGRhX1x1''@;'; put 'put ''MTBkMFx1MTBkMlx1MTBkNV9cdTEwZTFcdTEwZDRcdTEwZTVfXHUxMGRkXHUxMGU1XHUxMGUyX1x1MTBkY1x1MTBkZFx1MTBkNF9cdTEwZDNcdTEwZDRcdTEwZDkiLnNwbGl0KCJfIiksd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMF9cdTEwZGRc''@;'; put 'put ''dTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZWVcdTEwZTNc''@;'; put 'put ''dTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGQ4X1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MTBkOVx1MTBk''@;'; put 'put ''NVx1MTBkOFx1MTBlMFx1MTBkMFx1MTBlMV9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBk''@;'; put 'put ''MVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGUxX1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBl''@;'; put 'put ''MSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovKFx1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMHxcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDIpL30sd2Vla2RheXNTaG9ydDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4X1x1MTBkZFx1MTBlMFx1MTBlOF9cdTEwZTFcdTEwZDBcdTEwZGJfXHUx''@;'; put 'put ''MGRkXHUxMGQ3XHUxMGVlX1x1MTBlZVx1MTBlM1x1MTBkN19cdTEwZGVcdTEwZDBcdTEwZTBfXHUxMGU4XHUxMGQwXHUxMGQxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwZDlcdTEwZDVfXHUxMGRkXHUxMGUwX1x1MTBlMVx1MTBkMF9cdTEwZGRcdTEwZDdfXHUxMGVlXHUxMGUzX1x1''@;'; put 'put ''MTBkZVx1MTBkMF9cdTEwZThcdTEwZDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMGQzXHUxMGU2XHUxMGQ0XHUxMGUxXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dERheToiW1x1MTBlZVx1MTBkNVx1MTBkMFx1MTBkYV0gTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3REYXk6IltcdTEwZDJcdTEwZTNcdTEwZThcdTEwZDhcdTEwZGNdIExU''@;'; put 'put ''Wy1cdTEwZDZcdTEwZDRdIixuZXh0V2VlazoiW1x1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMl0gZGRkZCBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdFdlZWs6IltcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDBdIGRkZGQgTFQtXHUxMGQ2XHUxMGQ0IixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHApe3JldHVybiBwLnJlcGxhY2UoLyhcdTEwZWNcdTEwZDBcdTEwZGJ8XHUxMGVjXHUxMGUzXHUxMGQ3fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN3xcdTEwZWNcdTEwZDRcdTEwZGF8XHUxMGQzXHUxMGU2fFx1MTBkN1x1MTBkNSkoXHUxMGQ4''@;'; put 'put ''fFx1MTBkNCkvLGZ1bmN0aW9uKE4sdyxGKXtyZXR1cm4iXHUxMGQ4Ij09PUY/dysiXHUxMGU4XHUxMGQ4Ijp3K0YrIlx1MTBlOFx1MTBkOCJ9KX0scGFzdDpmdW5jdGlvbihwKXtyZXR1cm4vKFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOHxcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDh8XHUxMGUx''@;'; put 'put ''XHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4fFx1MTBkM1x1MTBlNlx1MTBkNHxcdTEwZDdcdTEwZDVcdTEwZDQpLy50ZXN0KHApP3AucmVwbGFjZSgvKFx1MTBkOHxcdTEwZDQpJC8sIlx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTovXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Ly50''@;'; put 'put ''ZXN0KHApP3AucmVwbGFjZSgvXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4JC8sIlx1MTBlY1x1MTBkYVx1MTBkOFx1MTBlMSBcdTEwZWNcdTEwZDhcdTEwZGMiKTpwfSxzOiJcdTEwZTBcdTEwZDBcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZGNcdTEwZDhcdTEwZGJcdTEwZDQgXHUxMGVjXHUxMGQw''@;'; put 'put ''XHUxMGRiXHUxMGQ4IixzczoiJWQgXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4IixtOiJcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLG1tOiIlZCBcdTEwZWNcdTEwZTNcdTEwZDdcdTEwZDgiLGg6Ilx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOCIsaGg6IiVkIFx1MTBlMVx1MTBkMFx1''@;'; put 'put ''MTBkMFx1MTBkN1x1MTBkOCIsZDoiXHUxMGQzXHUxMGU2XHUxMGQ0IixkZDoiJWQgXHUxMGQzXHUxMGU2XHUxMGQ0IixNOiJcdTEwZDdcdTEwZDVcdTEwZDQiLE1NOiIlZCBcdTEwZDdcdTEwZDVcdTEwZDQiLHk6Ilx1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCIseXk6IiVkIFx1MTBlY1x1MTBk''@;'; put 'put ''NFx1MTBkYVx1MTBkOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LzB8MS1cdTEwZGFcdTEwZDh8XHUxMGRiXHUxMGQ0LVxkezEsMn18XGR7MSwyfS1cdTEwZDQvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT1wP3A6MT09PXA/cCsiLVx1MTBkYVx1MTBkOCI6cDwyMHx8cDw9MTAw''@;'; put 'put ''JiZwJTIwPT0wfHxwJTEwMD09MD8iXHUxMGRiXHUxMGQ0LSIrcDpwKyItXHUxMGQ0In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sOTM1NzM6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQ4XHUwNDU2IiwxOiItXHUw''@;'; put 'put ''NDQ4XHUwNDU2IiwyOiItXHUwNDQ4XHUwNDU2IiwzOiItXHUwNDQ4XHUwNDU2Iiw0OiItXHUwNDQ4XHUwNDU2Iiw1OiItXHUwNDQ4XHUwNDU2Iiw2OiItXHUwNDQ4XHUwNDRiIiw3OiItXHUwNDQ4XHUwNDU2Iiw4OiItXHUwNDQ4XHUwNDU2Iiw5OiItXHUwNDQ4XHUwNDRiIiwxMDoiLVx1MDQ0''@;'; put 'put ''OFx1MDQ0YiIsMjA6Ii1cdTA0NDhcdTA0NGIiLDMwOiItXHUwNDQ4XHUwNDRiIiw0MDoiLVx1MDQ0OFx1MDQ0YiIsNTA6Ii1cdTA0NDhcdTA0NTYiLDYwOiItXHUwNDQ4XHUwNDRiIiw3MDoiLVx1MDQ0OFx1MDQ1NiIsODA6Ii1cdTA0NDhcdTA0NTYiLDkwOiItXHUwNDQ4XHUwNDRiIiwxMDA6''@;'; put 'put ''Ii1cdTA0NDhcdTA0NTYifTtELmRlZmluZUxvY2FsZSgia2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0M2RfXHUwNDNkXHUwNDMwXHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3X1x1MDQ0MVx1MDRkOVx1''@;'; put 'put ''MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1MDQzNV9cdTA0NDJcdTA0MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUwNDliXHUwNDRiXHUwNDQw''@;'; put 'put ''XHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1XHUwNDNiXHUwNDQyXHUwNDNlXHUwNDliXHUwNDQxXHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNfXHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1MDQzY1x1MDQzMFx1MDQ0M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUwNDQyXHUwNDMwXHUwNDNj''@;'; put 'put ''X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBcdTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1XHUwNDNhXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNFx1MDRhZlx1MDQz''@;'; put 'put ''OVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''ZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2NcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1MDQzYV9cdTA0MzRcdTA0YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUwNDM5X1x1MDQ0MVx1MDRk''@;'; put 'put ''OVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1MDQzOV9cdTA0NDFcdTA0MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1MDQzOV9cdTA0MzZcdTA0''@;'; put 'put ''M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1XHUwNDNkIFx1MDQzMFx1''@;'; put 'put ''MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRhM10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDU2XHUwNDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBc''@;'; put 'put ''dTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1''@;'; put 'put ''MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBc''@;'; put 'put ''dTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3JkaW5hbDpmdW5jdGlvbihOKXtyZXR1cm4gTisoX1tOXXx8X1tOJTEwXXx8X1tOPj0xMDA/MTAw''@;'; put 'put ''Om51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNjg4MDc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTE3ZTEiLDI6Ilx1MTdlMiIsMzoiXHUxN2UzIiw0OiJcdTE3ZTQiLDU6Ilx1MTdlNSIsNjoiXHUxN2U2Iiw3''@;'; put 'put ''OiJcdTE3ZTciLDg6Ilx1MTdlOCIsOToiXHUxN2U5IiwwOiJcdTE3ZTAifSxwPXsiXHUxN2UxIjoiMSIsIlx1MTdlMiI6IjIiLCJcdTE3ZTMiOiIzIiwiXHUxN2U0IjoiNCIsIlx1MTdlNSI6IjUiLCJcdTE3ZTYiOiI2IiwiXHUxN2U3IjoiNyIsIlx1MTdlOCI6IjgiLCJcdTE3ZTkiOiI5Iiwi''@;'; put 'put ''XHUxN2UwIjoiMCJ9O0QuZGVmaW5lTG9jYWxlKCJrbSIse21vbnRoczoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5''@;'; put 'put ''Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUx''@;'; put 'put ''N2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3Yzhf''@;'; put 'put ''XHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3''@;'; put 'put ''YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTE3''@;'; put 'put ''YTJcdTE3YjZcdTE3OTFcdTE3YjdcdTE3OGZcdTE3ZDJcdTE3OTlfXHUxNzg1XHUxN2QwXHUxNzkzXHUxN2QyXHUxNzkxX1x1MTdhMlx1MTc4NFx1MTdkMlx1MTc4Mlx1MTdiNlx1MTc5YV9cdTE3OTZcdTE3YmJcdTE3OTJfXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2EwXHUxNzlmXHUxN2QyXHUx''@;'; put 'put ''Nzk0XHUxNzhmXHUxN2I3XHUxN2NkX1x1MTc5Zlx1MTdiYlx1MTc4MFx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YzVcdTE3OWFcdTE3Y2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZc''@;'; put 'put ''dTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODB8XHUxNzliXHUx''@;'; put 'put ''N2QyXHUxNzg0XHUxN2I2XHUxNzg1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxGLEgpe3JldHVybiB3PDEyPyJcdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODAiOiJcdTE3OWJcdTE3''@;'; put 'put ''ZDJcdTE3ODRcdTE3YjZcdTE3ODUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTc5MFx1MTdkMlx1MTc4NFx1MTdjM1x1MTc5M1x1MTdjMVx1MTdjNyBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0RGF5OiJbXHUxNzlmXHUxN2QyXHUxN2EyXHUxN2MyXHUxNzgwIFx1MTc5OFx1''@;'; put 'put ''MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0RGF5OiJbXHUxNzk4XHUxN2QyXHUxNzlmXHUxN2I3XHUxNzliXHUxNzk4XHUxN2I3XHUxNzg5IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTE3OWZcdTE3OTRcdTE3ZDJcdTE3OGZcdTE3YjZcdTE3YTBcdTE3Y2RcdTE3OThcdTE3YmJcdTE3OTNdIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MTc5MVx1MTdjMFx1MTc4ZiIscGFzdDoi''@;'; put 'put ''JXNcdTE3OThcdTE3YmJcdTE3OTMiLHM6Ilx1MTc5NFx1MTdjOVx1MTdiYlx1MTc5M1x1MTdkMlx1MTc5OFx1MTdiNlx1MTc5M1x1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsc3M6IiVkIFx1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbToiXHUxNzk4''@;'; put 'put ''XHUxN2JkXHUxNzk5XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtbToiJWQgXHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixoOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGhoOiIlZCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGQ6Ilx1MTc5OFx1MTdi''@;'; put 'put ''ZFx1MTc5OVx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsZGQ6IiVkIFx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsTToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzgxXHUxN2MyIixNTToiJWQgXHUxNzgxXHUxN2MyIix5OiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3''@;'; put 'put ''YjZcdTE3YzYiLHl5OiIlZCBcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTE3OTFcdTE3YjhcZHsxLDJ9LyxvcmRpbmFsOiJcdTE3OTFcdTE3YjglZCIscHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTdl''@;'; put 'put ''MVx1MTdlMlx1MTdlM1x1MTdlNFx1MTdlNVx1MTdlNlx1MTdlN1x1MTdlOFx1MTdlOVx1MTdlMF0vZyxmdW5jdGlvbihGKXtyZXR1cm4gcFtGXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KX0sd2Vlazp7''@;'; put 'put ''ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjUwODI6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBjZTciLDI6Ilx1MGNlOCIsMzoiXHUwY2U5Iiw0OiJcdTBjZWEiLDU6Ilx1MGNlYiIsNjoiXHUwY2VjIiw3OiJcdTBjZWQiLDg6Ilx1''@;'; put 'put ''MGNlZSIsOToiXHUwY2VmIiwwOiJcdTBjZTYifSxwPXsiXHUwY2U3IjoiMSIsIlx1MGNlOCI6IjIiLCJcdTBjZTkiOiIzIiwiXHUwY2VhIjoiNCIsIlx1MGNlYiI6IjUiLCJcdTBjZWMiOiI2IiwiXHUwY2VkIjoiNyIsIlx1MGNlZSI6IjgiLCJcdTBjZWYiOiI5IiwiXHUwY2U2IjoiMCJ9O0Qu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJrbiIse21vbnRoczoiXHUwYzljXHUwY2E4XHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUw''@;'; put 'put ''Y2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZc''@;'; put 'put ''dTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODJc''@;'; put 'put ''dTBjYWNcdTBjYjBcdTBjY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGM5Y1x1MGNhOF9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNj''@;'; put 'put ''ZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyX1x1MGM4NVx1''@;'; put 'put ''MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMVx1MGNiNVx1''@;'; put 'put ''MGNiZVx1MGNiMF9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhY1x1MGNjMVx1MGNhN1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFc''@;'; put 'put ''dTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZlx1MGNiNVx1MGNiZVx1MGNiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFfXHUwY2I4XHUw''@;'; put 'put ''Y2M2XHUwY2MyXHUwY2Q1XHUwY2FlX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM19cdTBjYWNcdTBjYzFcdTBjYTdfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''Ilx1MGNhZFx1MGNiZV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2FlXHUwYzgyX1x1MGNhY1x1MGNjMV9cdTBjOTdcdTBjYzFfXHUwY2I2XHUwY2MxX1x1MGNiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZ''@;'; put 'put ''WVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjODdcdTBjODJcdTBjYTZcdTBjYzFdIExUIixuZXh0RGF5OiJbXHUwY2E4XHUwY2JlXHUwY2IzXHUwY2M2''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwY2E4XHUwY2JmXHUwY2E4XHUwY2NkXHUwY2E4XHUwY2M2XSBMVCIsbGFzdFdlZWs6IltcdTBjOTVcdTBjYzZcdTBjYzJcdTBjYThcdTBjYzZcdTBjYWZdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiIlcyBcdTBjYThcdTBjODJcdTBjYTRcdTBjYjAiLHBhc3Q6IiVzIFx1MGNiOVx1MGNiZlx1MGM4Mlx1MGNhNlx1MGNjNiIsczoiXHUwYzk1XHUwY2M2XHUwY2IyXHUwY2I1XHUwY2MxIFx1MGM5NVx1MGNjZFx1MGNiN1x1MGNhM1x1MGM5N1x1MGNiM1x1MGNjMSIsc3M6IiVkIFx1''@;'; put 'put ''MGNiOFx1MGNjNlx1MGM5NVx1MGNjNlx1MGM4Mlx1MGNhMVx1MGNjMVx1MGM5N1x1MGNiM1x1MGNjMSIsbToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsbW06IiVkIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsaDoiXHUw''@;'; put 'put ''YzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsaGg6IiVkIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsZDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNlx1MGNiZlx1MGNhOCIsZGQ6IiVkIFx1MGNhNlx1MGNiZlx1MGNhOCIsTToiXHUwYzky''@;'; put 'put ''XHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIsTU06IiVkIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIseToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyIseXk6IiVkIFx1''@;'; put 'put ''MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBjZTdcdTBjZThcdTBjZTlcdTBjZWFcdTBjZWJcdTBjZWNcdTBjZWRcdTBjZWVcdTBjZWZcdTBjZTZdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KX0scG9zdGZvcm1h''@;'; put 'put ''dDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZnxcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzZ8''@;'; put 'put ''XHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4fFx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsRil7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI9PT1G''@;'; put 'put ''P3c8ND93OncrMTI6Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI9PT1GP3c6Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI9PT1GP3c+PTEwP3c6dysxMjoiXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2Ij09''@;'; put 'put ''PUY/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsRixIKXtyZXR1cm4gdzw0PyJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiOnc8MTA/Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI6dzwxNz8iXHUwY2FlXHUwY2E3''@;'; put 'put ''XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ijp3PDIwPyJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiOiJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MGNhOFx1MGNjNlx1MGNkNSkvLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrIlx1MGNhOFx1MGNjNlx1MGNkNSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDIwMTM3OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgia28iLHttb250aHM6IjFcdWM2''@;'; put 'put ''ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZk''@;'; put 'put ''NF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHVjNzdjXHVjNjk0XHVjNzdjX1x1YzZkNFx1YzY5NFx1Yzc3Y19cdWQ2NTRcdWM2OTRcdWM3N2NfXHVjMjE4XHVjNjk0XHVjNzdjX1x1YmFhOVx1YzY5NFx1''@;'; put 'put ''Yzc3Y19cdWFlMDhcdWM2OTRcdWM3N2NfXHVkMWEwXHVjNjk0XHVjNzdjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRf''@;'; put 'put ''XHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0i''@;'; put 'put ''LExMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIixsOiJZWVlZLk1NLkRELiIsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIEEgaDptbSIsbGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiXHVjNjI0XHViMjk4IExUIixuZXh0RGF5OiJcdWIwYjRcdWM3N2MgTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJcdWM1YjRcdWM4MWMgTFQiLGxhc3RXZWVrOiJcdWM5YzBcdWIwOWNcdWM4ZmMgZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHVkNmM0IixwYXN0OiIlcyBcdWM4MDQiLHM6Ilx1YmE4NyBcdWNkMDgiLHNzOiIlZFx1Y2QwOCIsbToiMVx1YmQ4NCIsbW06IiVkXHViZDg0IixoOiJcdWQ1NWMgXHVjMmRjXHVhYzA0IixoaDoiJWRcdWMyZGNcdWFjMDQiLGQ6Ilx1ZDU1OFx1Yjhl''@;'; put 'put ''OCIsZGQ6IiVkXHVjNzdjIixNOiJcdWQ1NWMgXHViMmVjIixNTToiJWRcdWIyZWMiLHk6Ilx1Yzc3YyBcdWIxNDQiLHl5OiIlZFx1YjE0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHVjNzdjfFx1YzZkNHxcdWM4ZmMpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7c3dpdGNo''@;'; put 'put ''KE4pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHArIlx1Yzc3YyI7Y2FzZSJNIjpyZXR1cm4gcCsiXHVjNmQ0IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIHArIlx1YzhmYyI7ZGVmYXVsdDpyZXR1cm4gcH19LG1lcmlkaWVtUGFyc2U6L1x1YzYyNFx1YzgwNHxcdWM2MjRcdWQ2''@;'; put 'put ''YzQvLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIlx1YzYyNFx1ZDZjNCI9PT1wfSxtZXJpZGllbTpmdW5jdGlvbihwLE4sdyl7cmV0dXJuIHA8MTI/Ilx1YzYyNFx1YzgwNCI6Ilx1YzYyNFx1ZDZjNCJ9fSl9KGIoOTc1ODYpKX0sNjM3NDQ6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8odyxGLEgsUil7dmFyIGo9e3M6WyJceGU3ZW5kIHNhblx4ZWV5ZSIsIlx4ZTdlbmQgc2FuXHhlZXlleWFuIl0sc3M6W3crIiBzYW5ceGVleWUiLHcrIiBzYW5ceGVleWV5YW4iXSxtOlsiZGVxXHhlZXFleWVrIiwiZGVxXHhlZXFleWVrXHhlYSJdLG1t''@;'; put 'put ''Olt3KyIgZGVxXHhlZXFlIix3KyIgZGVxXHhlZXFleWFuIl0saDpbInNhZXRlayIsInNhZXRla1x4ZWEiXSxoaDpbdysiIHNhZXQiLHcrIiBzYWV0YW4iXSxkOlsicm9qZWsiLCJyb2pla1x4ZWEiXSxkZDpbdysiIHJvaiIsdysiIHJvamFuIl0sdzpbImhlZnRleWVrIiwiaGVmdGV5ZWtceGVh''@;'; put 'put ''Il0sd3c6W3crIiBoZWZ0ZSIsdysiIGhlZnRleWFuIl0sTTpbIm1laGVrIiwibWVoZWtceGVhIl0sTU06W3crIiBtZWgiLHcrIiBtZWhhbiJdLHk6WyJzYWxlayIsInNhbGVrXHhlYSJdLHl5Olt3KyIgc2FsIix3KyIgc2FsYW4iXX07cmV0dXJuIEY/altIXVswXTpqW0hdWzFdfUQuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJrdS1rbXIiLHttb250aHM6IlJceGVhYmVuZGFuX1NpYmF0X0FkYXJfTlx4ZWVzYW5fR3VsYW5fSGV6XHhlZXJhbl9UXHhlZXJtZWhfVGViYXhfXHhjZWxvbl9Db3RtZWhfTWlqZGFyX0JlcmZhbmJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiUlx4ZWFiX1NpYl9BZGFfTlx4''@;'; put 'put ''ZWVzX0d1bF9IZXpfVFx4ZWVyX1RlYl9ceGNlbG9fQ290X01pal9CZXIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiWWVrXHUwMTVmZW1fRHVcdTAxNWZlbV9TXHhlYVx1MDE1ZmVtX1x4Yzdhclx1MDE1ZmVtX1BceGVhbmNcdTAxNWZlbV9ceGNlbl9cdTAxNWVl''@;'; put 'put ''bVx4ZWUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWVrX0R1X1NceGVhX1x4Yzdhcl9QXHhlYW5fXHhjZW5fXHUwMTVlZW0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlllX0R1X1NceGVhX1x4YzdhX1BceGVhX1x4Y2VuX1x1MDE1ZWUiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24odyxGLEgpe3JldHVybiB3PDEyP0g/ImJuIjoiQk4iOkg/InBuIjoiUE4ifSxtZXJpZGllbVBhcnNlOi9ibnxCTnxwbnxQTi8sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0iLExMTDoiRG8g''@;'; put 'put ''TU1NTVthXSBZWVlZW2FuXSBISDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTVthXSBZWVlZW2FuXSBISDptbSIsbGw6IkRvIE1NTVsuXSBZWVlZW2FuXSIsbGxsOiJEbyBNTU1bLl0gWVlZWVthbl0gSEg6bW0iLGxsbGw6ImRkZFsuXSwgRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltceGNlcm8gZGkgc2FldF0gTFQgW2RlXSIsbmV4dERheToiW1NpYlx4ZWEgZGkgc2FldF0gTFQgW2RlXSIsbmV4dFdlZWs6ImRkZGQgW2RpIHNhZXRdIExUIFtkZV0iLGxhc3REYXk6IltEdWggZGkgc2FldF0gTFQgW2RlXSIsbGFzdFdlZWs6ImRkZGRbYSBib3JceGVl''@;'; put 'put ''IGRpIHNhZXRdIExUIFtkZV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRpICVzIGRlIixwYXN0OiJiZXJceGVlICVzIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6Xyx3Ol8sd3c6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfSg/OnlceGVhfFx4ZWF8XC4pLyxvcmRpbmFsOmZ1bmN0aW9uKHcsRil7dmFyIEg9Ri50b0xvd2VyQ2FzZSgpO3JldHVybiBILmluY2x1ZGVzKCJ3Iil8fEguaW5jbHVkZXMoIm0iKT93KyIuIjp3K2Z1bmN0aW9uIHAodyl7dmFyIEY9KHc9IiIrdykuc3Vic3RyaW5nKHcu''@;'; put 'put ''bGVuZ3RoLTEpLEg9dy5sZW5ndGg+MT93LnN1YnN0cmluZyh3Lmxlbmd0aC0yKToiIjtyZXR1cm4gMTI9PUh8fDEzPT1IfHwiMiIhPUYmJiIzIiE9RiYmIjUwIiE9SCYmIjcwIiE9RiYmIjgwIiE9Rj8iXHhlYSI6InlceGVhIn0odyl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDcwMTExOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYw''@;'; put 'put ''In0scD17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxOPVsiXHUwNmE5XHUwNjI3XHUwNjQ2XHUwNjQ4''@;'; put 'put ''XHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDYzNFx1MDY0OFx1MDYyOFx1MDYyN1x1MDYyYSIsIlx1MDYyNlx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDY0Nlx1MDZjY1x1MDYzM1x1MDYyN1x1MDY0NiIsIlx1MDYyNlx1MDYyN1x1MDZjY1x1''@;'; put 'put ''MDYyN1x1MDYzMSIsIlx1MDYyZFx1MDY0OFx1MDYzMlx1MDZkNVx1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyYVx1MDZkNVx1MDY0NVx1MDY0NVx1MDY0OFx1MDYzMiIsIlx1MDYyNlx1MDYyN1x1MDYyOCIsIlx1MDYyNlx1MDZkNVx1MDZjY1x1MDY0NFx1MDY0OFx1MDY0OFx1MDY0''@;'; put 'put ''NCIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2NDNcdTA2ZDVcdTA2NDUiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjQzXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjQ4XHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDZhOVx1MDZkNVx1MDY0NSJdO0QuZGVmaW5lTG9jYWxlKCJrdSIse21vbnRoczpOLG1vbnRoc1Nob3J0Ok4sd2Vla2RheXM6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1''@;'; put 'put ''MjAwY19cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1''@;'; put 'put ''MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1''@;'; put 'put ''MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2''@;'; put 'put ''ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2''@;'; put 'put ''NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjQ3X1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwY3xcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2Nc''@;'; put 'put ''dTA2MjdcdTA2NDZcdTA2Y2MvLGlzUE06ZnVuY3Rpb24oRil7cmV0dXJuL1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYy8udGVzdChGKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixILFIpe3JldHVybiBGPDEyPyJcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2Mjdc''@;'; put 'put ''dTA2NDZcdTA2Y2MiOiJcdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyNlx1MDY0N1x1MjAwY1x1MDY0NVx1MDYzMVx1MDZjNiBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwNjJmXHUwNjQ4XHUwNmNlXHUwNjQ2XHUwNmNlIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDRcdTA2NDdcdTIwMGMgJXMiLHBhc3Q6IiVzIixzOiJcdTA2ODZcdTA2NDdcdTIwMGNcdTA2NDZcdTA2MmYgXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIixzczoiXHUwNjg2XHUwNjMxXHUw''@;'; put 'put ''NjQzXHUwNjQ3XHUyMDBjICVkIixtOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixtbToiJWQgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixoOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQz''@;'; put 'put ''XHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixoaDoiJWQgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixkOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjk1XHUwNmM2XHUwNjk4IixkZDoiJWQgXHUwNjk1XHUwNmM2XHUwNjk4IixN''@;'; put 'put ''OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIix5OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjMzXHUwNjI3XHUwNmI1Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNmI1In0scHJl''@;'; put 'put ''cGFyc2U6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihIKXtyZXR1cm4gcFtIXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVu''@;'; put 'put ''Y3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihIKXtyZXR1cm4gX1tIXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSw5OTE4NzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIF89ezA6Ii1cdTA0NDdcdTA0YWYiLDE6Ii1cdTA0NDdcdTA0MzgiLDI6Ii1cdTA0NDdcdTA0MzgiLDM6Ii1cdTA0NDdcdTA0YWYiLDQ6Ii1cdTA0NDdcdTA0YWYiLDU6Ii1cdTA0NDdcdTA0MzgiLDY6Ii1cdTA0NDdcdTA0NGIiLDc6Ii1cdTA0NDdcdTA0MzgiLDg6Ii1cdTA0NDdcdTA0''@;'; put 'put ''MzgiLDk6Ii1cdTA0NDdcdTA0NDMiLDEwOiItXHUwNDQ3XHUwNDQzIiwyMDoiLVx1MDQ0N1x1MDQ0YiIsMzA6Ii1cdTA0NDdcdTA0NDMiLDQwOiItXHUwNDQ3XHUwNDRiIiw1MDoiLVx1MDQ0N1x1MDRhZiIsNjA6Ii1cdTA0NDdcdTA0NGIiLDcwOiItXHUwNDQ3XHUwNDM4Iiw4MDoiLVx1MDQ0''@;'; put 'put ''N1x1MDQzOCIsOTA6Ii1cdTA0NDdcdTA0NDMiLDEwMDoiLVx1MDQ0N1x1MDRhZiJ9O0QuZGVmaW5lTG9jYWxlKCJreSIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2Nc''@;'; put 'put ''dTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0''@;'; put 'put ''NGMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0''@;'; put 'put ''ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MTZcdTA0MzVcdTA0M2FcdTA0NDhcdTA0MzVcdTA0''@;'; put 'put ''M2NcdTA0MzFcdTA0MzhfXHUwNDE0XHUwNGFmXHUwNDM5XHUwNDQ4XHUwNGU5XHUwNDNjXHUwNDMxXHUwNGFmX1x1MDQyOFx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MjhcdTA0MzBcdTA0NDBcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUw''@;'; put 'put ''NDExXHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNlx1MDQ0M1x1MDQzY1x1MDQzMF9cdTA0MThcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDE2XHUwNDM1XHUwNDNhX1x1MDQxNFx1MDRh''@;'; put 'put ''Zlx1MDQzOV9cdTA0MjhcdTA0MzVcdTA0MzlfXHUwNDI4XHUwNDMwXHUwNDQwX1x1MDQxMVx1MDQzNVx1MDQzOV9cdTA0MTZcdTA0NDNcdTA0M2NfXHUwNDE4XHUwNDQ4XHUwNDM1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MTZcdTA0M2FfXHUwNDE0XHUwNDM5X1x1MDQyOFx1MDQz''@;'; put 'put ''OV9cdTA0MjhcdTA0NDBfXHUwNDExXHUwNDM5X1x1MDQxNlx1MDQzY19cdTA0MThcdTA0NDgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNGFmXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MmRcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDdcdTA0NGRcdTA0NGQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2Fc''@;'; put 'put ''dTA0ZTlcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0YWZcdTA0M2RcdTA0YWZdIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0Mzhc''@;'; put 'put ''dTA0NDdcdTA0MzhcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzY1x1MDQ0M1x1MDQ0MFx1MDQ0M1x1MDQzZCIsczoiXHUwNDMxXHUwNDM4XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ3XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1''@;'; put 'put ''MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDRhZlx1MDQzZFx1MDRlOVx1MDQ0MiIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzMFx1''@;'; put 'put ''MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1''@;'; put 'put ''MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0N1x1MDQzOHxcdTA0NDdcdTA0NGJ8XHUwNDQ3XHUwNGFmfFx1MDQ0N1x1MDQ0MykvLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24oTil7cmV0dXJuIE4rKF9bTl18fF9bTiUxMF18fF9bTj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDM1OTY5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEgsUixqLFAp''@;'; put 'put ''e3ZhciBMPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIFI/TFtq''@;'; put 'put ''XVswXTpMW2pdWzFdfWZ1bmN0aW9uIHcoSCl7aWYoSD1wYXJzZUludChILDEwKSxpc05hTihIKSlyZXR1cm4hMTtpZihIPDApcmV0dXJuITA7aWYoSDwxMClyZXR1cm4gNDw9SCYmSDw9NztpZihIPDEwMCl7dmFyIFI9SCUxMDtyZXR1cm4gdygwPT09Uj9ILzEwOlIpfWlmKEg8MWU0KXtmb3Io''@;'; put 'put ''O0g+PTEwOylILz0xMDtyZXR1cm4gdyhIKX1yZXR1cm4gdyhILz0xZTMpfUQuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0''@;'; put 'put ''d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZ''@;'; put 'put ''IEg6bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0dceGVic2NodGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2go''@;'; put 'put ''dGhpcy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIHAoSCl7cmV0dXJuIHcoSC5zdWJzdHIoMCxILmluZGV4T2Yo''@;'; put 'put ''IiAiKSkpPyJhICIrSDoiYW4gIitIfSxwYXN0OmZ1bmN0aW9uIE4oSCl7cmV0dXJuIHcoSC5zdWJzdHIoMCxILmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrSDoidmlydW4gIitIfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTpfLG1tOiIlZCBNaW51dHRlbiIsaDpfLGho''@;'; put 'put ''OiIlZCBTdG9ubmVuIixkOl8sZGQ6IiVkIERlZWciLE06XyxNTToiJWQgTVx4ZTlpbnQiLHk6Xyx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzMzUyNjpmdW5jdGlv''@;'; put 'put ''bihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBc''@;'; put 'put ''dTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFi''@;'; put 'put ''XHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUw''@;'; put 'put ''ZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZc''@;'; put 'put ''dTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4''@;'; put 'put ''OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGVi''@;'; put 'put ''OFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4''@;'; put 'put ''N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0''@;'; put 'put ''X1x1MGU5ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgxX1x1MGVhYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIixMTExMOiJcdTBlYTdcdTBlYjFcdTBlOTlkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyfFx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4Ny8saXNQTTpm''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Ij09PXB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcDwxMj8iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyIjoiXHUwZTk1XHUwZWFkXHUw''@;'; put 'put ''ZTk5XHUwZWMxXHUwZWE1XHUwZTg3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWFkXHUwZWI3XHUwZWM4XHUwZTk5XHUw''@;'; put 'put ''ZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlZGNcdTBlYzlcdTBlYjJcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWE3XHUwZWIyXHUwZTk5XHUwZTk5XHUw''@;'; put 'put ''ZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlYzFcdTBlYTVcdTBlYzlcdTBlYTdcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJcdTBlYWRcdTBlYjVcdTBlODEgJXMiLHBhc3Q6IiVzXHUwZTljXHUwZWM4XHUwZWIyXHUwZTk5XHUwZWExXHUwZWIyIixzOiJcdTBlOWFcdTBlY2RcdTBlYzhcdTBlYzBcdTBlOTdcdTBlYmJcdTBlYzhcdTBlYjJcdTBlYzNcdTBlOTRcdTBlYTdcdTBlYjRcdTBl''@;'; put 'put ''OTlcdTBlYjJcdTBlOTdcdTBlYjUiLHNzOiIlZCBcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG06IjEgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtbToiJWQgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixoOiIxIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVj''@;'; put 'put ''Mlx1MGVhMVx1MGU4NyIsaGg6IiVkIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsZDoiMSBcdTBlYTFcdTBlYjdcdTBlYzkiLGRkOiIlZCBcdTBlYTFcdTBlYjdcdTBlYzkiLE06IjEgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5IixNTToiJWQgXHUw''@;'; put 'put ''ZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5Iix5OiIxIFx1MGU5Ylx1MGViNSIseXk6IiVkIFx1MGU5Ylx1MGViNSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LyhcdTBlOTdcdTBlYjVcdTBlYzgpXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihwKXtyZXR1cm4iXHUwZTk3XHUwZWI1XHUw''@;'; put 'put ''ZWM4IitwfX0pfShiKDk3NTg2KSl9LDkwNDExOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17c3M6InNla3VuZFx1MDExN19zZWt1bmRcdTAxN2VpXHUwMTczX3Nla3VuZGVzIixtOiJtaW51dFx1MDExN19taW51dFx1MDExN3NfbWludXRcdTAxMTki''@;'; put 'put ''LG1tOiJtaW51dFx1MDExN3NfbWludVx1MDEwZGlcdTAxNzNfbWludXRlcyIsaDoidmFsYW5kYV92YWxhbmRvc192YWxhbmRcdTAxMDUiLGhoOiJ2YWxhbmRvc192YWxhbmRcdTAxNzNfdmFsYW5kYXMiLGQ6ImRpZW5hX2RpZW5vc19kaWVuXHUwMTA1IixkZDoiZGllbm9zX2RpZW5cdTAxNzNf''@;'; put 'put ''ZGllbmFzIixNOiJtXHUwMTE3bnVvX21cdTAxMTduZXNpb19tXHUwMTE3bmVzXHUwMTJmIixNTToibVx1MDExN25lc2lhaV9tXHUwMTE3bmVzaVx1MDE3M19tXHUwMTE3bmVzaXVzIix5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMiLHl5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMifTtmdW5jdGlv''@;'; put 'put ''biBOKGosUCxMLFkpe3JldHVybiBQP0YoTClbMF06WT9GKEwpWzFdOkYoTClbMl19ZnVuY3Rpb24gdyhqKXtyZXR1cm4gaiUxMD09MHx8aj4xMCYmajwyMH1mdW5jdGlvbiBGKGope3JldHVybiBfW2pdLnNwbGl0KCJfIil9ZnVuY3Rpb24gSChqLFAsTCxZKXt2YXIgQj1qKyIgIjtyZXR1cm4g''@;'; put 'put ''MT09PWo/QitOKDAsUCxMWzBdLFkpOlA/QisodyhqKT9GKEwpWzFdOkYoTClbMF0pOlk/QitGKEwpWzFdOkIrKHcoaik/RihMKVsxXTpGKEwpWzJdKX1ELmRlZmluZUxvY2FsZSgibHQiLHttb250aHM6e2Zvcm1hdDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmRcdTAxN2Vpb19nZWd1XHUw''@;'; put 'put ''MTdlXHUwMTE3c19iaXJcdTAxN2VlbGlvX2xpZXBvc19ydWdwalx1MDE2Ylx1MDEwZGlvX3J1Z3NcdTAxMTdqb19zcGFsaW9fbGFwa3JpXHUwMTBkaW9fZ3J1b2RcdTAxN2VpbyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1XHUwMTdl''@;'; put 'put ''XHUwMTE3X2Jpclx1MDE3ZWVsaXNfbGllcGFfcnVncGpcdTAxNmJ0aXNfcnVnc1x1MDExN2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/fE1NTU0/KFxbW15cW1xdXSpcXXxccykrRFtvRF0/L30s''@;'; put 'put ''bW9udGhzU2hvcnQ6InNhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6InNla21hZGllblx1MDEyZl9waXJtYWRpZW5cdTAxMmZfYW50cmFkaWVuXHUwMTJmX3RyZVx1MDEwZGlhZGllblx1MDEyZl9rZXR2''@;'; put 'put ''aXJ0YWRpZW5cdTAxMmZfcGVua3RhZGllblx1MDEyZl9cdTAxNjFlXHUwMTYxdGFkaWVuXHUwMTJmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZVx1MDEwZGlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc19c''@;'; put 'put ''dTAxNjFlXHUwMTYxdGFkaWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl9cdTAxNjBlXHUwMTYxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTX1BfQV9UX0tfUG5fXHUwMTYwIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0g''@;'; put 'put ''TU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9''@;'; put 'put ''LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwaWFuZGllbl0gTFQiLG5leHREYXk6IltSeXRval0gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbVmFrYXJdIExUIixsYXN0V2VlazoiW1ByYVx1MDExN2p1c1x1MDEyZl0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWVcdTAxNjEgJXMiLHM6ZnVuY3Rpb24gcChqLFAsTCxZKXtyZXR1cm4gUD8ia2VsaW9zIHNla3VuZFx1MDExN3MiOlk/ImtlbGlcdTAxNzMgc2VrdW5kXHUwMTdlaVx1MDE3MyI6ImtlbGlhcyBzZWt1bmRlcyJ9LHNzOkgsbTpOLG1tOkgsaDpO''@;'; put 'put ''LGhoOkgsZDpOLGRkOkgsTTpOLE1NOkgseTpOLHl5Okh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKGope3JldHVybiBqKyItb2ppIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMzI2MjE6ZnVuY3Rpb24oY2UsSixiKXsh''@;'; put 'put ''ZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1p''@;'; put 'put ''blx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgi''@;'; put 'put ''XyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2''@;'; put 'put ''MWkiLnNwbGl0KCJfIiksTU06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToiZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxp''@;'; put 'put ''dCgiXyIpfTtmdW5jdGlvbiBwKFIsaixQKXtyZXR1cm4gUD9qJTEwPT0xJiZqJTEwMCE9MTE/UlsyXTpSWzNdOmolMTA9PTEmJmolMTAwIT0xMT9SWzBdOlJbMV19ZnVuY3Rpb24gTihSLGosUCl7cmV0dXJuIFIrIiAiK3AoX1tQXSxSLGopfWZ1bmN0aW9uIHcoUixqLFApe3JldHVybiBwKF9b''@;'; put 'put ''UF0sUixqKX1ELmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEzdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9w''@;'; put 'put ''aWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4g''@;'; put 'put ''cHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBGKFIsail7cmV0dXJuIGo/ImRhXHUwMTdlYXMgc2VrdW5kZXMiOiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEzbSJ9LHNzOk4sbTp3LG1tOk4saDp3LGho''@;'; put 'put ''Ok4sZDp3LGRkOk4sTTp3LE1NOk4seTp3LHl5Ok59LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4NTg2OTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IF89e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0s''@;'; put 'put ''ZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWplc2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKE4sdyl7cmV0dXJuIDE9PT1OP3dbMF06Tj49MiYmTjw9ND93WzFdOndb''@;'; put 'put ''Ml19LHRyYW5zbGF0ZTpmdW5jdGlvbihOLHcsRil7dmFyIEg9Xy53b3Jkc1tGXTtyZXR1cm4gMT09PUYubGVuZ3RoP3c/SFswXTpIWzFdOk4rIiAiK18uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShOLEgpfX07RC5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0''@;'; put 'put ''X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBM''@;'; put 'put ''VCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2''@;'; put 'put ''MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVz''@;'; put 'put ''IixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDoiZGFuIixkZDpfLnRyYW5zbGF0ZSxNOiJtamVzZWMiLE1NOl8udHJhbnNsYXRlLHk6ImdvZGludSIseXk6Xy50cmFu''@;'; put 'put ''c2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSwzNTg4MTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhz''@;'; put 'put ''OiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRlLXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hcdTAxNGRuZ29pbmdvaV9IZXJlLXR1cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdh''@;'; put 'put ''LVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9IYWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2''@;'; put 'put ''Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpc''@;'; put 'put ''dTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSXHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1BhcmFpcmVfSFx1MDEwMXRhcmVpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFf''@;'; put 'put ''SFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwgaV0gTFQiLG5leHREYXk6IlthcG9wbyBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBhc3Q6IiVzIGkgbXVhIixzOiJ0ZSBoXHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixt''@;'; put 'put ''bToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVkIHRhdSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4''@;'; put 'put ''YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDkyMzkxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgibWsiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRc''@;'; put 'put ''dTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQz''@;'; put 'put ''OF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0''@;'; put 'put ''M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2Zc''@;'; put 'put ''dTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUw''@;'; put 'put ''NDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQzNV9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNk''@;'; put 'put ''ZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0M2VdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2Ug''@;'; put 'put ''NjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUw''@;'; put 'put ''NDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0''@;'; put 'put ''MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4''@;'; put 'put ''Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQz''@;'; put 'put ''NVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBOPXAlMTAsdz1wJTEwMDtyZXR1cm4gMD09PXA/cCsiLVx1MDQzNVx1MDQzMiI6MD09PXc/cCsiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwy''@;'; put 'put ''MD9wKyItXHUwNDQyXHUwNDM4IjoxPT09Tj9wKyItXHUwNDMyXHUwNDM4IjoyPT09Tj9wKyItXHUwNDQwXHUwNDM4Ijo3PT09Tnx8OD09PU4/cCsiLVx1MDQzY1x1MDQzOCI6cCsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDIxMTI2OmZ1bmN0aW9u''@;'; put 'put ''KGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgibWwiLHttb250aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUw''@;'; put 'put ''ZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRc''@;'; put 'put ''dTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIx''@;'; put 'put ''XHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkMWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2Yu''@;'; put 'put ''X1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBk''@;'; put 'put ''MjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1''@;'; put 'put ''MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1''@;'; put 'put ''MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkN2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUw''@;'; put 'put ''ZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFfXHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUw''@;'; put 'put ''ZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExUUzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6''@;'; put 'put ''ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERh''@;'; put 'put ''eToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RXZWVrOiJbXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUw''@;'; put 'put ''ZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2JcdTBkMmFcdTBkNGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2ZcdTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBk''@;'; put 'put ''MTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIlZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6''@;'; put 'put ''Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBk''@;'; put 'put ''MzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLE06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVc''@;'; put 'put ''dTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIifSxtZXJpZGllbVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQx''@;'; put 'put ''YSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlv''@;'; put 'put ''bihwLE4pe3JldHVybiAxMj09PXAmJihwPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiPT09TiYmcD49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09Tnx8Ilx1MGQzNVx1MGQ0''@;'; put 'put ''OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9PT1OP3ArMTI6cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPDQ/Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6cDwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUw''@;'; put 'put ''ZDNmXHUwZDMyXHUwZDQ2IjpwPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpwPDIwPyJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBk''@;'; put 'put ''MzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShiKDk3NTg2KSl9LDQ0ODkyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKE4sdyxGLEgpe3N3aXRjaChGKXtjYXNlInMiOnJldHVybiB3PyJcdTA0NDVcdTA0NGRcdTA0MzRc''@;'; put 'put ''dTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIE4rKHc/''@;'; put 'put ''IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpyZXR1cm4gTisodz8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2Nc''@;'; put 'put ''dTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBOKyh3PyIgXHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIE4rKHc/IiBcdTA0''@;'; put 'put ''ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiOiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gTisodz8iIFx1MDQ0MVx1MDQzMFx1MDQ0MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXki''@;'; put 'put ''OnJldHVybiBOKyh3PyIgXHUwNDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIE59fUQuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRk''@;'; put 'put ''XHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQz''@;'; put 'put ''MFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0''@;'; put 'put ''MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUw''@;'; put 'put ''NDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBc''@;'; put 'put ''dTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRk''@;'; put 'put ''XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0NDBfMiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFcdTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBf''@;'; put 'put ''OSBcdTA0NDFcdTA0MzBcdTA0NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQz''@;'; put 'put ''Mlx1MDQzMFx1MDQzMF9cdTA0MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUw''@;'; put 'put ''NDRmXHUwNDNjXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQxYlx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1''@;'; put 'put ''MDQxMVx1MDQ0Zlx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCwgWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVuY3Rpb24oTil7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1OfSxtZXJpZGllbTpmdW5jdGlvbihO''@;'; put 'put ''LHcsRil7cmV0dXJuIE48MTI/Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1''@;'; put 'put ''MDQ0OF0gTFQiLG5leHRXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0''@;'; put 'put ''ZTlcdTA0M2RdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNjXHUwNDNkXHUwNGU5IixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8s''@;'; put 'put ''TU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAvLG9yZGluYWw6ZnVuY3Rpb24oTix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gTisiIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0''@;'; put 'put ''MCI7ZGVmYXVsdDpyZXR1cm4gTn19fSl9KGIoOTc1ODYpKX0sNTkwODA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5''@;'; put 'put ''NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxwPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2''@;'; put 'put ''IjoiMCJ9O2Z1bmN0aW9uIE4oRixILFIsail7dmFyIFA9IiI7aWYoSClzd2l0Y2goUil7Y2FzZSJzIjpQPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlInNzIjpQPSIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJc''@;'; put 'put ''dTA5MjYiO2JyZWFrO2Nhc2UibSI6UD0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZiI7YnJlYWs7Y2FzZSJtbSI6UD0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTQ3IjticmVhaztjYXNlImgiOlA9Ilx1MDkwZlx1MDkxNSBcdTA5MjRc''@;'; put 'put ''dTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiaGgiOlA9IiVkIFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJlYWs7Y2FzZSJkIjpQPSJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlImRkIjpQPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2JyZWFrO2Nh''@;'; put 'put ''c2UiTSI6UD0iXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6UD0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTQ3IjticmVhaztjYXNlInkiOlA9Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciO2Jy''@;'; put 'put ''ZWFrO2Nhc2UieXkiOlA9IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDk0NyJ9ZWxzZSBzd2l0Y2goUil7Y2FzZSJzIjpQPSJcdTA5MTVcdTA5M2VcdTA5MzlcdTA5NDAgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlInNzIjpQPSIl''@;'; put 'put ''ZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UibSI6UD0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZSI7YnJlYWs7Y2FzZSJtbSI6UD0iJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNm''@;'; put 'put ''XHUwOTFmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlImgiOlA9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2UiO2JyZWFrO2Nhc2UiaGgiOlA9IiVkIFx1MDkyNFx1MDkzZVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJkIjpQPSJcdTA5MGZcdTA5MTVc''@;'; put 'put ''dTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlIjticmVhaztjYXNlImRkIjpQPSIlZCBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiTSI6UD0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1''@;'; put 'put ''MDkyZlx1MDkzZSI7YnJlYWs7Y2FzZSJNTSI6UD0iJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyIjticmVhaztjYXNlInkiOlA9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2UiO2JyZWFrO2Nhc2UieXki''@;'; put 'put ''OlA9IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDkzZVx1MDkwMiJ9cmV0dXJuIFAucmVwbGFjZSgvJWQvaSxGKX1ELmRlZmluZUxvY2FsZSgibXIiLHttb250aHM6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5''@;'; put 'put ''MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1''@;'; put 'put ''MDk0OF9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdc''@;'; put 'put ''dTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUw''@;'; put 'put ''OTMwXHUwOTRkXHUwOTFhLl9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDk0Ny5fXHUwOTFjXHUwOTQyXHUwOTI4Ll9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDguX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5''@;'; put 'put ''MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2Zc''@;'; put 'put ''dTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1''@;'; put 'put ''XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9c''@;'; put 'put ''dTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1''@;'; put 'put ''MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMVFM6IkEgaDptbTpzcyBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5''@;'; put 'put ''MjRcdTA5M2UiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MDlcdTA5MjZcdTA5NGRcdTA5MmZcdTA5M2VdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyZVx1MDkzZVx1MDkx''@;'; put 'put ''N1x1MDk0MFx1MDkzMl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTI3XHUwOTRkXHUwOTJmXHUwOTQ3IixwYXN0OiIlc1x1MDkyYVx1MDk0Mlx1MDkzMFx1MDk0ZFx1MDkzNVx1MDk0MCIsczpOLHNzOk4sbTpOLG1tOk4saDpOLGho''@;'; put 'put ''Ok4sZDpOLGRkOk4sTTpOLE1NOk4seTpOLHl5Ok59LHByZXBhcnNlOmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oSCl7cmV0dXJuIHBbSF19KX0scG9z''@;'; put 'put ''dGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEgpe3JldHVybiBfW0hdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0N3xcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTI2XHUwOTQxXHUwOTJh''@;'; put 'put ''XHUwOTNlXHUwOTMwXHUwOTQwfFx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihGLEgpe3JldHVybiAxMj09PUYmJihGPTApLCJcdTA5MmFcdTA5''@;'; put 'put ''MzlcdTA5M2VcdTA5MWZcdTA5NDciPT09SHx8Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1IP0Y6Ilx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI9PT1IfHwiXHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUh8''@;'; put 'put ''fCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAiPT09SD9GPj0xMj9GOkYrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihGLEgsUil7cmV0dXJuIEY+PTAmJkY8Nj8iXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3IjpGPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2Vc''@;'; put 'put ''dTA5MzNcdTA5NDAiOkY8MTc/Ilx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MCI6RjwyMD8iXHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIn0sd2Vlazp7ZG93OjAs''@;'; put 'put ''ZG95OjZ9fSl9KGIoOTc1ODYpKX0sMjU5NTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJtcy1teSIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVy''@;'; put 'put ''X05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLE4pe3JldHVybiAx''@;'; put 'put ''Mj09PXAmJihwPTApLCJwYWdpIj09PU4/cDoidGVuZ2FoYXJpIj09PU4/cD49MTE/cDpwKzEyOiJwZXRhbmciPT09Tnx8Im1hbGFtIj09PU4/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcDwxMT8icGFnaSI6cDwxNT8idGVuZ2FoYXJpIjpwPDE5PyJwZXRh''@;'; put 'put ''bmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0g''@;'; put 'put ''TFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoi''@;'; put 'put ''JWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw3MDM5OTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoIm1zIix7''@;'; put 'put ''bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsTil7cmV0dXJuIDEyPT09cCYmKHA9MCksInBhZ2kiPT09Tj9wOiJ0ZW5nYWhhcmkiPT09Tj9wPj0xMT9wOnArMTI6InBldGFuZyI9PT1OfHwibWFsYW0iPT09Tj9wKzEyOnZvaWQgMH0s''@;'; put 'put ''bWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3JldHVybiBwPDExPyJwYWdpIjpwPDE1PyJ0ZW5nYWhhcmkiOnA8MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltFc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQg''@;'; put 'put ''W3B1a3VsXSBMVCIsbGFzdERheToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIl''@;'; put 'put ''ZCBzYWF0IixtOiJzZW1pbml0IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDc5OTAyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgibXQiLHttb250aHM6Ikphbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X1x1MDEyMHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EaVx1''@;'; put 'put ''MDEwYmVtYnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRnJhX01hcl9BcHJfTWVqX1x1MDEyMHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGlcdTAxMGIiLnNwbGl0KCJfIiksd2Vla2RheXM6IklsLVx1MDEyNmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnXHUwMTI3YV9JbC1c''@;'; put 'put ''dTAxMjZhbWlzX0lsLVx1MDEyMGltZ1x1MDEyN2FfSXMtU2lidCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAxMjZhZF9UbmVfVGxpX0VyYl9cdTAxMjZhbV9cdTAxMjBpbV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDEyNmFfVG5fVGxfRXJfXHUwMTI2YV9cdTAxMjBp''@;'; put 'put ''X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W0lsbHVtIGZpbC1dTFQiLG5leHREYXk6IltHXHUwMTI3YWRhIGZpbC1dTFQiLG5leHRXZWVrOiJkZGRkIFtmaWwtXUxUIixsYXN0RGF5OiJbSWwtYmllcmFcdTAxMjcgZmlsLV1MVCIsbGFzdFdlZWs6ImRkZGQgW2xpIGdcdTAxMjdhZGRhXSBbZmlsLV1MVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiZlx1MjAxOSAlcyIscGFzdDoiJXMgaWx1IixzOiJmdGl0IHNla29uZGkiLHNzOiIlZCBzZWtvbmRpIixtOiJtaW51dGEiLG1tOiIlZCBtaW51dGkiLGg6InNpZWdcdTAxMjdhIixoaDoiJWQgc2llZ1x1MDEyN2F0IixkOiJcdTAxMjF1cm5hdGEiLGRkOiIlZCBc''@;'; put 'put ''dTAxMjFyYW5ldCIsTToieGFoYXIiLE1NOiIlZCB4aHVyIix5OiJzZW5hIix5eToiJWQgc25pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzI5ODU6ZnVuY3Rpb24oY2UsSixi''@;'; put 'put ''KXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTEwNDEiLDI6Ilx1MTA0MiIsMzoiXHUxMDQzIiw0OiJcdTEwNDQiLDU6Ilx1MTA0NSIsNjoiXHUxMDQ2Iiw3OiJcdTEwNDciLDg6Ilx1MTA0OCIsOToiXHUxMDQ5IiwwOiJcdTEwNDAifSxwPXsiXHUxMDQxIjoiMSIsIlx1''@;'; put 'put ''MTA0MiI6IjIiLCJcdTEwNDMiOiIzIiwiXHUxMDQ0IjoiNCIsIlx1MTA0NSI6IjUiLCJcdTEwNDYiOiI2IiwiXHUxMDQ3IjoiNyIsIlx1MTA0OCI6IjgiLCJcdTEwNDkiOiI5IiwiXHUxMDQwIjoiMCJ9O0QuZGVmaW5lTG9jYWxlKCJteSIse21vbnRoczoiXHUxMDA3XHUxMDE0XHUxMDNhXHUx''@;'; put 'put ''MDE0XHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxNlx1MTAzMVx1MTAxNlx1MTAzMVx1MTAyY1x1MTAzYVx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTlcdTEwMTBcdTEwM2FfXHUxMDI3XHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRc''@;'; put 'put ''dTEwM2FfXHUxMDA3XHUxMDMwXHUxMDFjXHUxMDJkXHUxMDJmXHUxMDA0XHUxMDNhX1x1MTAxZVx1MTAzY1x1MTAwMlx1MTAyZlx1MTAxMFx1MTAzYV9cdTEwMDVcdTEwMDBcdTEwM2FcdTEwMTBcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNh''@;'; put 'put ''XHUxMDEwXHUxMDJkXHUxMDJmXHUxMDE4XHUxMDJjX1x1MTAxNFx1MTAyZFx1MTAyZlx1MTAxZFx1MTAwNFx1MTAzYVx1MTAxOFx1MTAyY19cdTEwMTJcdTEwMmVcdTEwMDdcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTAwN1x1MTAxNFx1MTAz''@;'; put 'put ''YV9cdTEwMTZcdTEwMzFfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NfXHUxMDA1XHUxMDAwXHUxMDNhX1x1MTAyMVx1MTAz''@;'; put 'put ''MVx1MTAyY1x1MTAwMFx1MTAzYV9cdTEwMTRcdTEwMmRcdTEwMmZfXHUxMDEyXHUxMDJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDFj''@;'; put 'put ''XHUxMDJjX1x1MTAyMVx1MTAwNFx1MTAzYVx1MTAzOVx1MTAwMlx1MTAyYl9cdTEwMTdcdTEwMmZcdTEwMTJcdTEwMzlcdTEwMTNcdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjXHUxMDFlXHUxMDE1XHUxMDEwXHUxMDMxXHUxMDM4X1x1MTAxZVx1MTAzMVx1MTAyY1x1MTAw''@;'; put 'put ''MFx1MTAzY1x1MTAyY19cdTEwMDVcdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUx''@;'; put 'put ''MDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAwMlx1MTAyYl9cdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTEwMWFcdTEwMTRcdTEwMzEu''@;'; put 'put ''XSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbmV4dERheToiW1x1MTAxOVx1MTAxNFx1MTAwMFx1MTAzYVx1MTAxNlx1MTAzY1x1MTAxNFx1MTAzYV0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHRXZWVrOiJkZGRkIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0RGF5OiJbXHUx''@;'; put 'put ''MDE5XHUxMDE0XHUxMDMxLlx1MTAwMF0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3RXZWVrOiJbXHUxMDE1XHUxMDNjXHUxMDJlXHUxMDM4XHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjXSBkZGRkIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTEwMWNcdTEwMmNcdTEwMTlcdTEwMGFcdTEwM2FcdTEwMzcgJXMgXHUxMDE5XHUxMDNlXHUxMDJjIixwYXN0OiJcdTEwMWNcdTEwM2RcdTEwMTRcdTEwM2FcdTEwMDFcdTEwMzJcdTEwMzdcdTEwMWVcdTEwMzFcdTEwMmMgJXMgXHUxMDAwIixzOiJc''@;'; put 'put ''dTEwMDVcdTEwMDBcdTEwMzlcdTEwMDBcdTEwMTRcdTEwM2EuXHUxMDIxXHUxMDE0XHUxMDBhXHUxMDNhXHUxMDM4XHUxMDA0XHUxMDFhXHUxMDNhIixzczoiJWQgXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDM3XHUxMDNhIixtOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTlc''@;'; put 'put ''dTEwMmRcdTEwMTRcdTEwMDVcdTEwM2EiLG1tOiIlZCBcdTEwMTlcdTEwMmRcdTEwMTRcdTEwMDVcdTEwM2EiLGg6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxNFx1MTAyY1x1MTAxYlx1MTAyZSIsaGg6IiVkIFx1MTAxNFx1MTAyY1x1MTAxYlx1MTAyZSIsZDoiXHUxMDEwXHUxMDA1XHUxMDNh''@;'; put 'put ''XHUxMDFiXHUxMDAwXHUxMDNhIixkZDoiJWQgXHUxMDFiXHUxMDAwXHUxMDNhIixNOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWMiLE1NOiIlZCBcdTEwMWMiLHk6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxNFx1MTAzZVx1MTAwNVx1MTAzYSIseXk6IiVkIFx1MTAxNFx1MTAzZVx1MTAwNVx1''@;'; put 'put ''MTAzYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTEwNDFcdTEwNDJcdTEwNDNcdTEwNDRcdTEwNDVcdTEwNDZcdTEwNDdcdTEwNDhcdTEwNDlcdTEwNDBdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY3ODU5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgibmIiLHttb250aHM6ImphbnVhcl9m''@;'; put 'put ''ZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjguX21hLl90aS5fb24uX3RvLl9mci5fbFx4ZjguIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZ''@;'; put 'put ''WVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGdceGU1ciBrbC5d''@;'; put 'put ''IExUIixsYXN0V2VlazoiW2ZvcnJpZ2VdIGRkZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoibm9lbiBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldHQgbWludXR0IixtbToiJWQgbWludXR0ZXIi''@;'; put 'put ''LGg6Ilx4ZTluIHRpbWUiLGhoOiIlZCB0aW1lciIsZDoiXHhlOW4gZGFnIixkZDoiJWQgZGFnZXIiLHc6Ilx4ZTluIHVrZSIsd3c6IiVkIHVrZXIiLE06Ilx4ZTluIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXR0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3Jk''@;'; put 'put ''aW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTM2NDI6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5''@;'; put 'put ''NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxwPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIs''@;'; put 'put ''Ilx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9O0QuZGVmaW5lTG9jYWxlKCJuZSIse21vbnRoczoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5''@;'; put 'put ''M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzN1x1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5NDdc''@;'; put 'put ''dTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdc''@;'; put 'put ''dTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9c''@;'; put 'put ''dTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOC5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5NDdcdTA5MmFcdTA5NGRcdTA5MWYuX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTJkXHUwOTQ3''@;'; put 'put ''Ll9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkwN1x1MDkyNFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTE5XHUwOTRkXHUw''@;'; put 'put ''OTE3XHUwOTMyXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzNlx1''@;'; put 'put ''MDkyOFx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MDdcdTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTE5XHUwOTRkXHUwOTE3XHUwOTMyLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDkzZlx1MDkz''@;'; put 'put ''OVx1MDkzZi5fXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5MjhcdTA5M2YuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDYuX1x1MDkzOFx1MDk0Yi5fXHUwOTJlXHUwOTAyLl9cdTA5MmNcdTA5NDEuX1x1MDkyY1x1MDkzZi5fXHUwOTM2XHUwOTQxLl9c''@;'; put 'put ''dTA5MzYuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQVx1MDkxNVx1MDk0YiBoOm1tOnNzIFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3''@;'; put 'put ''LnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVy''@;'; put 'put ''biBfW0ZdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZnxcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5Mjh8XHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRifFx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9u''@;'; put 'put ''KHcsRil7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI9PT1GP3c8ND93OncrMTI6Ilx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOCI9PT1GP3c6Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI9PT1GP3c+PTEwP3c6dysxMjoi''@;'; put 'put ''XHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIj09PUY/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsRixIKXtyZXR1cm4gdzwzPyJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiOnc8MTI/Ilx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOCI6dzwxNj8iXHUwOTI2XHUwOTNmXHUw''@;'; put 'put ''OTA5XHUwOTAxXHUwOTM4XHUwOTRiIjp3PDIwPyJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQiOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmRcdTA5NGJcdTA5MzJcdTA5M2ZdIExUIixuZXh0''@;'; put 'put ''V2VlazoiW1x1MDkwNlx1MDkwOVx1MDkwMVx1MDkyNlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkzOVx1MDkzZlx1MDkxY1x1MDk0Yl0gTFQiLGxhc3RXZWVrOiJbXHUwOTE3XHUwOTBmXHUwOTE1XHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt''@;'; put 'put ''ZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkzZSIscGFzdDoiJXMgXHUwOTA1XHUwOTE3XHUwOTNlXHUwOTIxXHUwOTNmIixzOiJcdTA5MTVcdTA5NDdcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTQ3XHUwOTIzXHUwOTRk''@;'; put 'put ''XHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQ3XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQ3XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTIzXHUwOTRkXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTIzXHUw''@;'; put 'put ''OTRkXHUwOTFmXHUwOTNlIixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTNlIixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTNl''@;'; put 'put ''Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTJjXHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTJjXHUwOTMwXHUwOTRkXHUwOTM3In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sOTk4NzU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBf''@;'; put 'put ''PSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLE49Wy9eamFuL2ksL15mZWIvaSwvXihtYWFydHxt''@;'; put 'put ''cnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0sdz0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3Rv''@;'; put 'put ''YmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaTtELmRlZmluZUxvY2FsZSgibmwtYmUiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1''@;'; put 'put ''bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihILFIpe3JldHVybiBIPy8tTU1NLS8udGVzdChSKT9wW0gubW9udGgoKV06X1tILm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhz''@;'; put 'put ''U2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1y''@;'; put 'put ''dFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOk4sbG9uZ01vbnRoc1BhcnNlOk4sc2hvcnRNb250aHNQYXJzZTpOLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRh''@;'; put 'put ''Z192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9y''@;'; put 'put ''bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQiLG5leHREYXk6Iltt''@;'; put 'put ''b3JnZW4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbZ2lzdGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIlcyBnZWxlZGVuIixz''@;'; put 'put ''OiJlZW4gcGFhciBzZWNvbmRlbiIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhlOW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhlOVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBt''@;'; put 'put ''YWFuZGVuIix5OiJceGU5XHhlOW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oSCl7cmV0dXJuIEgrKDE9PT1IfHw4PT09SHx8SD49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShiKDk3NTg2KSl9LDY1NDQxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxwPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1''@;'; put 'put ''bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxOPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9''@;'; put 'put ''L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7''@;'; put 'put ''RC5kZWZpbmVMb2NhbGUoIm5sIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oSCxSKXtyZXR1cm4gSD8v''@;'; put 'put ''LU1NTS0vLnRlc3QoUik/cFtILm1vbnRoKCldOl9bSC5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVy''@;'; put 'put ''fG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0''@;'; put 'put ''TW9udGhzUGFyc2U6Tix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Inpv''@;'; put 'put ''X21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIs''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1''@;'; put 'put ''dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsdzoiXHhlOVx4ZTluIHdlZWsiLHd3OiIlZCB3ZWtlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEgpe3JldHVybiBIKygxPT09SHx8OD09PUh8fEg+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4MTMxMTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZp''@;'; put 'put ''bmVMb2NhbGUoIm5uIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlf''@;'; put 'put ''YXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InN1bmRhZ19tXHhlNW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1Ll9tXHhlNS5fdHkuX29u''@;'; put 'put ''Ll90by5fZnIuX2xhdS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGU1X3R5X29uX3RvX2ZyX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1N''@;'; put 'put ''TSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSSBkYWcga2xva2thXSBMVCIsbmV4dERheToiW0kgbW9yZ29uIGtsb2trYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9r''@;'; put 'put ''a2FdIExUIixsYXN0RGF5OiJbSSBnXHhlNXIga2xva2thXSBMVCIsbGFzdFdlZWs6IltGXHhmOHJlZ1x4ZTVhbmRlXSBkZGRkIFtrbG9ra2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkYW4iLHM6Im5va3JlIHNla3VuZCIsc3M6''@;'; put 'put ''IiVkIHNla3VuZCIsbToiZWl0IG1pbnV0dCIsbW06IiVkIG1pbnV0dCIsaDoiZWluIHRpbWUiLGhoOiIlZCB0aW1hciIsZDoiZWluIGRhZyIsZGQ6IiVkIGRhZ2FyIix3OiJlaSB2ZWtlIix3dzoiJWQgdmVrZXIiLE06ImVpbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImVpdCBc''@;'; put 'put ''eGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDcyNTY3OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgib2MtbG5jIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5pXHhlOHJfZmVicmlceGU4cl9tYXJceGU3X2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3RceGYyYnJlX25vdmVtYnJlX2RlY2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuaVx4ZThyX2RlIGZl''@;'; put 'put ''YnJpXHhlOHJfZGUgbWFyXHhlN19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0XHhmMmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdl''@;'; put 'put ''bi5fZmVici5fbWFyXHhlN19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltXHhlOGNyZXNfZGlqXHhmMnVzX2RpdmVuZHJlc19kaXNzYWJ0''@;'; put 'put ''ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2RtX2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExU''@;'; put 'put ''UzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGxsOiJk''@;'; put 'put ''ZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdVx4ZThpIGFdIExUIixuZXh0RGF5OiJbZGVtYW4gYV0gTFQiLG5leHRXZWVrOiJkZGRkIFthXSBMVCIsbGFzdERheToiW2lceGU4ciBhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc3NhdCBhXSBMVCIsc2FtZUVsc2U6''@;'; put 'put ''IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5hcyBzZWdvbmRhcyIsc3M6IiVkIHNlZ29uZGFzIixtOiJ1bmEgbWludXRhIixtbToiJWQgbWludXRhcyIsaDoidW5hIG9yYSIsaGg6IiVkIG9yYXMiLGQ6InVuIGpvcm4iLGRkOiIlZCBq''@;'; put 'put ''b3JucyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7dmFyIHc9MT09PXA/InIiOjI9PT1wPyJuIjozPT09cD8iciI6ND09PXA/''@;'; put 'put ''InQiOiJceGU4IjtyZXR1cm4oInciPT09Tnx8IlciPT09TikmJih3PSJhIikscCt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1Njk2MjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGE2NyIsMjoiXHUwYTY4IiwzOiJc''@;'; put 'put ''dTBhNjkiLDQ6Ilx1MGE2YSIsNToiXHUwYTZiIiw2OiJcdTBhNmMiLDc6Ilx1MGE2ZCIsODoiXHUwYTZlIiw5OiJcdTBhNmYiLDA6Ilx1MGE2NiJ9LHA9eyJcdTBhNjciOiIxIiwiXHUwYTY4IjoiMiIsIlx1MGE2OSI6IjMiLCJcdTBhNmEiOiI0IiwiXHUwYTZiIjoiNSIsIlx1MGE2YyI6IjYi''@;'; put 'put ''LCJcdTBhNmQiOiI3IiwiXHUwYTZlIjoiOCIsIlx1MGE2ZiI6IjkiLCJcdTBhNjYiOiIwIn07RC5kZWZpbmVMb2NhbGUoInBhLWluIix7bW9udGhzOiJcdTBhMWNcdTBhMjhcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJiXHUwYTNjXHUwYTMwXHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyZVx1MGEz''@;'; put 'put ''ZVx1MGEzMFx1MGExYV9cdTBhMDVcdTBhMmFcdTBhNGRcdTBhMzBcdTBhNDhcdTBhMzJfXHUwYTJlXHUwYTA4X1x1MGExY1x1MGE0Mlx1MGEyOF9cdTBhMWNcdTBhNDFcdTBhMzJcdTBhM2VcdTBhMDhfXHUwYTA1XHUwYTE3XHUwYTM4XHUwYTI0X1x1MGEzOFx1MGEyNFx1MGE3MFx1MGEyY1x1''@;'; put 'put ''MGEzMF9cdTBhMDVcdTBhMTVcdTBhMjRcdTBhNDJcdTBhMmNcdTBhMzBfXHUwYTI4XHUwYTM1XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEyNlx1MGEzOFx1MGE3MFx1MGEyY1x1MGEzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEy''@;'; put 'put ''Ylx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1''@;'; put 'put ''MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6Ilx1MGExMFx1MGEyNFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhNGJcdTBhMmVcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyY1x1MGE0MVx1MGEyN1x1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzVcdTBhNDBc''@;'; put 'put ''dTBhMzBcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUwYTcxXHUwYTE1XHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MFx1MGExYVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBh''@;'; put 'put ''MTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46Ilx1MGExMFx1MGEyNF9cdTBhMzhcdTBhNGJcdTBhMmVfXHUwYTJlXHUwYTcwXHUwYTE3XHUwYTMyX1x1MGEyY1x1MGE0MVx1MGEyN19cdTBhMzVcdTBhNDBcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTQxXHUwYTE1XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGEyOFx1MGE0MCIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDciLExUUzoiQSBoOm1tOnNzIFx1MGEzNVx1MGExY1x1MGE0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixM''@;'; put 'put ''TExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTA1XHUwYTFjXSBMVCIsbmV4dERheToiW1x1MGExNVx1MGEzMl0gTFQiLG5leHRXZWVrOiJbXHUwYTA1XHUwYTE3XHUwYTMyXHUwYTNlXSBkZGRkLCBMVCIs''@;'; put 'put ''bGFzdERheToiW1x1MGExNVx1MGEzMl0gTFQiLGxhc3RXZWVrOiJbXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYTM1XHUwYTNmXHUwYTcxXHUwYTFhIixwYXN0OiIlcyBcdTBhMmFcdTBh''@;'; put 'put ''M2ZcdTBhMWJcdTBhMzJcdTBhNDciLHM6Ilx1MGExNVx1MGE0MVx1MGExZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBhMWYiLHNzOiIlZCBcdTBhMzhcdTBhMTVcdTBhM2ZcdTBhNzBcdTBhMWYiLG06Ilx1MGEwN1x1MGExNSBcdTBhMmVcdTBhM2ZcdTBhNzBcdTBhMWYiLG1tOiIlZCBc''@;'; put 'put ''dTBhMmVcdTBhM2ZcdTBhNzBcdTBhMWYiLGg6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMThcdTBhNzBcdTBhMWZcdTBhM2UiLGhoOiIlZCBcdTBhMThcdTBhNzBcdTBhMWZcdTBhNDciLGQ6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMjZcdTBhM2ZcdTBhMjgiLGRkOiIlZCBcdTBhMjZcdTBh''@;'; put 'put ''M2ZcdTBhMjgiLE06Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhM2UiLE1NOiIlZCBcdTBhMmVcdTBhMzlcdTBhNDBcdTBhMjhcdTBhNDciLHk6Ilx1MGEwN1x1MGE3MVx1MGExNSBcdTBhMzhcdTBhM2VcdTBhMzIiLHl5OiIlZCBcdTBhMzhcdTBhM2Vc''@;'; put 'put ''dTBhMzIifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYTY3XHUwYTY4XHUwYTY5XHUwYTZhXHUwYTZiXHUwYTZjXHUwYTZkXHUwYTZlXHUwYTZmXHUwYTY2XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBwW0ZdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0''@;'; put 'put ''dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4gX1tGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhMzBcdTBhM2VcdTBhMjR8XHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwfFx1MGEyNlx1MGE0MVx1MGEyYVx1MGEzOVx1MGEzZlx1MGEzMHxcdTBhMzhcdTBhM2NcdTBhM2VcdTBh''@;'; put 'put ''MmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LEYpe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBhMzBcdTBhM2VcdTBhMjQiPT09Rj93PDQ/dzp3KzEyOiJcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzAiPT09Rj93OiJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiPT09Rj93''@;'; put 'put ''Pj0xMD93OncrMTI6Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI9PT1GP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8ND8iXHUwYTMwXHUwYTNlXHUwYTI0Ijp3PDEwPyJcdTBhMzhcdTBhMzVcdTBhNDdcdTBhMzAiOnc8MTc/Ilx1MGEyNlx1MGE0MVx1''@;'; put 'put ''MGEyYVx1MGEzOVx1MGEzZlx1MGEzMCI6dzwyMD8iXHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlIjoiXHUwYTMwXHUwYTNlXHUwYTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNjEwNjM6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBf''@;'; put 'put ''PSJzdHljemVcdTAxNDRfbHV0eV9tYXJ6ZWNfa3dpZWNpZVx1MDE0NF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWVcdTAxNDRfd3J6ZXNpZVx1MDE0NF9wYVx1MDE3YWR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWVcdTAxNDQiLnNwbGl0KCJfIikscD0ic3R5Y3puaWFfbHV0ZWdvX21hcmNh''@;'; put 'put ''X2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplXHUwMTVibmlhX3BhXHUwMTdhZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhIi5zcGxpdCgiXyIpLE49Wy9ec3R5L2ksL15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUv''@;'; put 'put ''aSwvXndyei9pLC9ecGFcdTAxN2EvaSwvXmxpcy9pLC9eZ3J1L2ldO2Z1bmN0aW9uIHcoUil7cmV0dXJuIFIlMTA8NSYmUiUxMD4xJiZ+fihSLzEwKSUxMCE9MX1mdW5jdGlvbiBGKFIsaixQKXt2YXIgTD1SKyIgIjtzd2l0Y2goUCl7Y2FzZSJzcyI6cmV0dXJuIEwrKHcoUik/InNla3VuZHki''@;'; put 'put ''OiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiBqPyJtaW51dGEiOiJtaW51dFx1MDExOSI7Y2FzZSJtbSI6cmV0dXJuIEwrKHcoUik/Im1pbnV0eSI6Im1pbnV0Iik7Y2FzZSJoIjpyZXR1cm4gaj8iZ29kemluYSI6ImdvZHppblx1MDExOSI7Y2FzZSJoaCI6cmV0dXJuIEwrKHcoUik/ImdvZHpp''@;'; put 'put ''bnkiOiJnb2R6aW4iKTtjYXNlInd3IjpyZXR1cm4gTCsodyhSKT8idHlnb2RuaWUiOiJ0eWdvZG5pIik7Y2FzZSJNTSI6cmV0dXJuIEwrKHcoUik/Im1pZXNpXHUwMTA1Y2UiOiJtaWVzaVx1MDExOWN5Iik7Y2FzZSJ5eSI6cmV0dXJuIEwrKHcoUik/ImxhdGEiOiJsYXQiKX19RC5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInBsIix7bW9udGhzOmZ1bmN0aW9uKFIsail7cmV0dXJuIFI/L0QgTU1NTS8udGVzdChqKT9wW1IubW9udGgoKV06X1tSLm1vbnRoKCldOl99LG1vbnRoc1Nob3J0OiJzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYVx1MDE3YV9saXNfZ3J1Ii5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1BhcnNlOk4sbG9uZ01vbnRoc1BhcnNlOk4sc2hvcnRNb250aHNQYXJzZTpOLHdlZWtkYXlzOiJuaWVkemllbGFfcG9uaWVkemlhXHUwMTQyZWtfd3RvcmVrX1x1MDE1YnJvZGFfY3p3YXJ0ZWtfcGlcdTAxMDV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5k''@;'; put 'put ''el9wb25fd3RfXHUwMTVicl9jendfcHRfc29iIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJOZF9Qbl9XdF9cdTAxNWFyX0N6X1B0X1NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIs''@;'; put 'put ''TExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0R6aVx1MDE1YiBvXSBMVCIsbmV4dERheToiW0p1dHJvIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0''@;'; put 'put ''dXJuIltXIG5pZWR6aWVsXHUwMTE5IG9dIExUIjtjYXNlIDI6cmV0dXJuIltXZSB3dG9yZWsgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgXHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHNvYm90XHUwMTE5IG9dIExUIjtkZWZhdWx0OnJldHVybiJbV10gZGRkZCBbb10g''@;'; put 'put ''TFQifX0sbGFzdERheToiW1djem9yYWogb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IFx1MDE1''@;'; put 'put ''YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IHNvYm90XHUwMTE5IG9dIExUIjtkZWZhdWx0OnJldHVybiJbVyB6ZXN6XHUwMTQyeV0gZGRkZCBbb10gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6''@;'; put 'put ''IiVzIHRlbXUiLHM6ImtpbGthIHNla3VuZCIsc3M6RixtOkYsbW06RixoOkYsaGg6RixkOiIxIGR6aWVcdTAxNDQiLGRkOiIlZCBkbmkiLHc6InR5ZHppZVx1MDE0NCIsd3c6RixNOiJtaWVzaVx1MDEwNWMiLE1NOkYseToicm9rIix5eTpGfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx''@;'; put 'put ''LDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTc0NzY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJwdC1iciIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyXHhlN29fYWJy''@;'; put 'put ''aWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWluZ29f''@;'; put 'put ''c2VndW5kYS1mZWlyYV90ZXJceGU3YS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fc2VnX3Rlcl9xdWFfcXVpX3NleF9zXHhlMWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvXzJc''@;'; put 'put ''eGFhXzNceGFhXzRceGFhXzVceGFhXzZceGFhX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBN''@;'; put 'put ''TU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhl''@;'; put 'put ''MHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJM''@;'; put 'put ''In0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoicG91Y29zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMi''@;'; put 'put ''LE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsaW52YWxpZERhdGU6IkRhdGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sNzg3MTk6ZnVuY3Rp''@;'; put 'put ''b24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJwdCIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyXHhlN29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ29fU2VndW5kYS1mZWlyYV9UZXJceGU3YS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1Nc''@;'; put 'put ''eGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9TXHhlMWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvXzJceGFhXzNceGFhXzRceGFhXzVceGFhXzZceGFhX1NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltIb2plIFx4ZTBzXSBMVCIsbmV4dERheToiW0FtYW5oXHhlMyBceGUwc10gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwc10gTFQiLGxhc3REYXk6IltPbnRlbSBceGUwc10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpfHw2PT09dGhp''@;'; put 'put ''cy5kYXkoKT8iW1x4ZGFsdGltb10gZGRkZCBbXHhlMHNdIExUIjoiW1x4ZGFsdGltYV0gZGRkZCBbXHhlMHNdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMiLHBhc3Q6ImhceGUxICVzIixzOiJzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBt''@;'; put 'put ''aW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIix3OiJ1bWEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW0gbVx4ZWFzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1MTAwNDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhOLHcsRil7dmFyIFI9IiAiO3JldHVybihO''@;'; put 'put ''JTEwMD49MjB8fE4+PTEwMCYmTiUxMDA9PTApJiYoUj0iIGRlICIpLE4rUit7c3M6InNlY3VuZGUiLG1tOiJtaW51dGUiLGhoOiJvcmUiLGRkOiJ6aWxlIix3dzoic1x1MDEwM3B0XHUwMTAzbVx4ZTJuaSIsTU06Imx1bmkiLHl5OiJhbmkifVtGXX1ELmRlZmluZUxvY2FsZSgicm8iLHttb250''@;'; put 'put ''aHM6ImlhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imlhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVn''@;'; put 'put ''Ll9zZXB0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkdW1pbmljXHUwMTAzX2x1bmlfbWFyXHUwMjFiaV9taWVyY3VyaV9qb2lfdmluZXJpX3NceGUybWJcdTAxMDN0XHUwMTAzIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkR1''@;'; put 'put ''bV9MdW5fTWFyX01pZV9Kb2lfVmluX1NceGUybSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRHVfTHVfTWFfTWlfSm9fVmlfU1x4ZTIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlthemkgbGFdIExUIixuZXh0RGF5OiJbbVx4ZTJpbmUgbGFdIExUIixuZXh0V2VlazoiZGRkZCBbbGFdIExUIixsYXN0RGF5OiJbaWVyaSBsYV0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJbZm9zdGFdIGRkZGQgW2xhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicGVzdGUgJXMiLHBhc3Q6IiVzIFx4ZWVuIHVybVx1MDEwMyIsczoiY1x4ZTJ0ZXZhIHNlY3VuZGUiLHNzOl8sbToidW4gbWludXQiLG1tOl8saDoibyBvclx1MDEwMyIsaGg6XyxkOiJv''@;'; put 'put ''IHppIixkZDpfLHc6Im8gc1x1MDEwM3B0XHUwMTAzbVx4ZTJuXHUwMTAzIix3dzpfLE06Im8gbHVuXHUwMTAzIixNTTpfLHk6InVuIGFuIix5eTpffSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw1MTMyNjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7ZnVuY3Rpb24gcChGLEgsUil7cmV0dXJuIm0iPT09Uj9IPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDMiOkYrIiAiK2Z1bmN0aW9uIF8oRixIKXt2YXIgUj1GLnNwbGl0KCJfIik7cmV0dXJuIEgl''@;'; put 'put ''MTA9PTEmJkglMTAwIT0xMT9SWzBdOkglMTA+PTImJkglMTA8PTQmJihIJTEwMDwxMHx8SCUxMDA+PTIwKT9SWzFdOlJbMl19KHtzczpIPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRi''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0Iixt''@;'; put 'put ''bTpIPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzBfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0M19cdTA0M2NcdTA0MzhcdTA0''@;'; put 'put ''M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoaDoiXHUwNDQ3XHUwNDMwXHUwNDQxX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0M2VcdTA0MzIiLGRkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGNfXHUw''@;'; put 'put ''NDM0XHUwNDNkXHUwNDRmX1x1MDQzNFx1MDQzZFx1MDQzNVx1MDQzOSIsd3c6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjIixNTToiXHUw''@;'; put 'put ''NDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMF9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzVcdTA0MzIiLHl5OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDMwX1x1MDQzYlx1''@;'; put 'put ''MDQzNVx1MDQ0MiJ9W1JdLCtGKX12YXIgTj1bL15cdTA0NGZcdTA0M2RcdTA0MzIvaSwvXlx1MDQ0NFx1MDQzNVx1MDQzMi9pLC9eXHUwNDNjXHUwNDMwXHUwNDQwL2ksL15cdTA0MzBcdTA0M2ZcdTA0NDAvaSwvXlx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdL2ksL15cdTA0MzhcdTA0NGVc''@;'; put 'put ''dTA0M2QvaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzYi9pLC9eXHUwNDMwXHUwNDMyXHUwNDMzL2ksL15cdTA0NDFcdTA0MzVcdTA0M2QvaSwvXlx1MDQzZVx1MDQzYVx1MDQ0Mi9pLC9eXHUwNDNkXHUwNDNlXHUwNDRmL2ksL15cdTA0MzRcdTA0MzVcdTA0M2EvaV07RC5kZWZpbmVMb2NhbGUoInJ1''@;'; put 'put ''Iix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Zl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0''@;'; put 'put ''Zl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1''@;'; put 'put ''MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1''@;'; put 'put ''MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRj''@;'; put 'put ''X1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzIuX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUw''@;'; put 'put ''NDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQz''@;'; put 'put ''ZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzIuX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUw''@;'; put 'put ''NDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2EuIi5zcGxpdCgiXyIpfSx3ZWVrZGF5czp7c3RhbmRhbG9uZToiXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjXHUwNDM1X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1''@;'; put 'put ''MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM19cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZc''@;'; put 'put ''dTA0MzBfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDQwXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjXHUwNDM1X1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQz''@;'; put 'put ''NFx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzM19cdTA0M2ZcdTA0''@;'; put 'put ''NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9cWyA/W1x1MDQxMlx1MDQzMl0gPyg/Olx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0ZXxc''@;'; put 'put ''dTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGV8XHUwNDRkXHUwNDQyXHUwNDQzKT8gP10gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQy''@;'; put 'put ''X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxtb250aHNQYXJz''@;'; put 'put ''ZTpOLGxvbmdNb250aHNQYXJzZTpOLHNob3J0TW9udGhzUGFyc2U6Tixtb250aHNSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0''@;'; put 'put ''Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNj''@;'; put 'put ''XHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0''@;'; put 'put ''NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0''@;'; put 'put ''NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzYVwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0Zlx1MDQzZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0''@;'; put 'put ''MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0''@;'; put 'put ''MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUw''@;'; put 'put ''NDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/''@;'; put 'put ''fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLj98XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1N0cmljdFJl''@;'; put 'put ''Z2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNi''@;'; put 'put ''W1x1MDQ0Zlx1MDQ0Y118XHUwNDNjXHUwNDMwW1x1MDQ0Zlx1MDQzOV18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Zlx1MDQ0Y118XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Zlx1MDQ0Y118XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0NDBbXHUwNDRmXHUwNDRjXSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlwufFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLnxcdTA0M2NcdTA0MzBcdTA0NDBbXHUwNDQyLl18XHUwNDMwXHUwNDNmXHUwNDQwXC58XHUwNDNjXHUwNDMw''@;'; put 'put ''W1x1MDQ0Zlx1MDQzOV18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGYuXXxcdTA0MzBcdTA0MzJcdTA0MzNcLnxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC58XHUwNDNlXHUwNDNhXHUwNDQyXC58XHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDRmXHUwNDMxP1wufFx1MDQzNFx1MDQzNVx1MDQzYVwuKS9pLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiIsTExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuLCBIOm1tIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IE1NTU0gWVlZWSBcdTA0MzMuLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0MzRcdTA0M2RcdTA0NGYsIFx1MDQzMl0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAsIFx1MDQzMl0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAsIFx1MDQzMl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKEYpe2lmKEYud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNlXSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJd''@;'; put 'put ''IGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQzNVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJb''@;'; put 'put ''XHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQzOFx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0''@;'; put 'put ''M1x1MDQ0ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sbGFzdFdlZWs6ZnVuY3Rpb24oRil7aWYoRi53ZWVrKCk9PT10aGlzLndlZWsoKSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/IltcdTA0MTJcdTA0M2VdIGRkZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3''@;'; put 'put ''aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUw''@;'; put 'put ''NDNiXHUwNDRiXHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MTIgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzcgJXMiLHBhc3Q6IiVzIFx1MDQzZFx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzNCIsczoiXHUwNDNkXHUwNDM1XHUwNDQxXHUwNDNhXHUwNDNlXHUwNDNiXHUwNDRjXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQzNCIsc3M6cCxtOnAsbW06cCxoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOnAsZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpwLHc6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0ZiIsd3c6cCxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZc''@;'; put 'put ''dTA0NDYiLE1NOnAseToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpwfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0Mzh8XHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwfFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAvaSxp''@;'; put 'put ''c1BNOmZ1bmN0aW9uKEYpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzApJC8udGVzdChGKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixILFIpe3JldHVybiBGPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOCI6RjwxMj8iXHUw''@;'; put 'put ''NDQzXHUwNDQyXHUwNDQwXHUwNDMwIjpGPDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlfFx1MDQ0ZikvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oRixIKXtzd2l0Y2goSCl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpyZXR1cm4gRisiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gRisiLVx1MDQzM1x1MDQzZSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKyItXHUwNDRmIjtkZWZhdWx0OnJldHVybiBGfX0sd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''OjR9fSl9KGIoOTc1ODYpKX0sNzI2MDg6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUwNjQxXHUwNjRhXHUwNjI4XHUwNjMxXHUwNjQ4XHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdlXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjIxXHUwNjUwIiwiXHUwNjIyXHUwNmFmXHUwNjMzXHUwNjdkIiwiXHUwNjMzXHUw''@;'; put 'put ''NjRhXHUwNjdlXHUwNjdkXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIyXHUwNmFhXHUwNjdkXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjhhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0scD1bIlx1MDYyMlx1MDY4Nlx1MDYzMSIs''@;'; put 'put ''Ilx1MDYzM1x1MDY0OFx1MDY0NVx1MDYzMSIsIlx1MDYyN1x1MDZiMVx1MDYyN1x1MDYzMVx1MDY0OCIsIlx1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOSIsIlx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzMyIsIlx1MDYyY1x1MDY0NVx1MDYzOSIsIlx1MDY4N1x1MDY0Nlx1MDY4N1x1MDYzMSJdO0Qu''@;'; put 'put ''ZGVmaW5lTG9jYWxlKCJzZCIse21vbnRoczpfLG1vbnRoc1Nob3J0Ol8sd2Vla2RheXM6cCx3ZWVrZGF5c1Nob3J0OnAsd2Vla2RheXNNaW46cCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06''@;'; put 'put ''ZnVuY3Rpb24odyxGLEgpe3JldHVybiB3PDEyPyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY4NF0gTFQiLG5leHREYXk6IltcdTA2MzNcdTA2ODBcdTA2MjdcdTA2YmJcdTA2NGFdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbXHUwNjI3XHUwNmIzXHUwNjRhXHUwNjQ2IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YSBcdTA2MmFcdTA2NGFdIExUIixsYXN0RGF5OiJbXHUwNmFhXHUwNjI3XHUwNjQ0XHUwNjQ3XHUwNjQ3XSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzJcdTA2MzFcdTA2NGFcdTA2NDQgXHUw''@;'; put 'put ''NjQ3XHUwNjQxXHUwNjJhXHUwNjRhXSBkZGRkIFtcdTA2MmFcdTA2NGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2N2VcdTA2NDhcdTA2MjEiLHBhc3Q6IiVzIFx1MDYyN1x1MDZiMyIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDY0YVx1''@;'; put 'put ''MDZhYVx1MDY0Nlx1MDY4YSIsc3M6IiVkIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsbToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsaDoiXHUwNjQ3XHUwNmFhIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsaGg6''@;'; put 'put ''IiVkIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsZDoiXHUwNjQ3XHUwNmFhIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsZGQ6IiVkIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsTToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDY0OCIs''@;'; put 'put ''TU06IiVkIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDYyNyIseToiXHUwNjQ3XHUwNmFhIFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3Jt''@;'; put 'put ''YXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTM5MTE6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJzZSIse21vbnRoczoib1x1MDEx''@;'; put 'put ''MVx1MDExMWFqYWdlbVx4ZTFubnVfZ3VvdnZhbVx4ZTFubnVfbmp1a1x1MDEwZGFtXHhlMW5udV9jdW9cdTAxNGJvbVx4ZTFubnVfbWllc3NlbVx4ZTFubnVfZ2Vhc3NlbVx4ZTFubnVfc3VvaWRuZW1ceGUxbm51X2JvcmdlbVx4ZTFubnVfXHUwMTBkYWtcdTAxMGRhbVx4ZTFubnVfZ29sZ2dv''@;'; put 'put ''dG1ceGUxbm51X3NrXHhlMWJtYW1ceGUxbm51X2p1b3ZsYW1ceGUxbm51Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJvXHUwMTExXHUwMTExal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfXHUwMTBkYWtcdTAxMGRfZ29sZ19za1x4ZTFiX2p1b3YiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXM6InNvdG5hYmVhaXZpX3Z1b3NzXHhlMXJnYV9tYVx1MDE0Ylx1MDE0YmViXHhlMXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2xceGUxdnZhcmRhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzb3RuX3Z1b3NfbWFcdTAxNGJfZ2Fza19kdW9yX2JlYXJfbFx4''@;'; put 'put ''ZTF2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzX3ZfbV9nX2RfYl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJNTU1NIEQuIFtiLl0gWVlZWSIsTExMOiJNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBI''@;'; put 'put ''SDptbSIsTExMTDoiZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW290bmUgdGldIExUIixuZXh0RGF5OiJbaWh0dGluIHRpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3RpXSBMVCIsbGFzdERheToiW2lrdGUgdGldIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W292ZGRpdF0gZGRkZCBbdGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBnZWFcdTAxN2VlcyIscGFzdDoibWFcdTAxNGJpdCAlcyIsczoibW9hZGRlIHNla3VuZGRhdCIsc3M6IiVkIHNla3VuZGRhdCIsbToib2t0YSBtaW51aHRhIixtbToiJWQgbWludWh0''@;'; put 'put ''YXQiLGg6Im9rdGEgZGlpbW11IixoaDoiJWQgZGlpbW11dCIsZDoib2t0YSBiZWFpdmkiLGRkOiIlZCBiZWFpdnZpdCIsTToib2t0YSBtXHhlMW5udSIsTU06IiVkIG1ceGUxbnV0Iix5OiJva3RhIGphaGtpIix5eToiJWQgamFnaXQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMjUxNDc6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJzaSIse21vbnRoczoiXHUwZGEyXHUwZGIxXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQy''@;'; put 'put ''X1x1MGRiNFx1MGRkOVx1MGRiNlx1MGRiYlx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZDg1XHUwZGI0XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGRhXHUwZGJkXHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9cdTBk''@;'; put 'put ''YTJcdTBkZDZcdTBkYjFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUwZGQyX1x1MGQ4NVx1MGQ5Y1x1MGRkZFx1MGRjM1x1MGRjYVx1MGRhZFx1MGRkNF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBkY2FcdTBkYWRcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZDk0XHUw''@;'; put 'put ''ZDlhXHUwZGNhXHUwZGFkXHUwZGRkXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYWZcdTBkZDlcdTBkYzNcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2EiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ilx1MGRhMlx1MGRiMV9cdTBkYjRcdTBkZDlcdTBkYjZfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhX1x1MGQ4NVx1MGRiNFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBk''@;'; put 'put ''ODVcdTBkOWNcdTBkZGRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBfXHUwZGFmXHUwZGQ5XHUwZGMzXHUwZGQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBkODlcdTBkYmJcdTBkZDJcdTBkYWZcdTBkY2ZfXHUw''@;'; put 'put ''ZGMzXHUwZGIzXHUwZGQ0XHUwZGFmXHUwZGNmX1x1MGQ4NVx1MGQ5Zlx1MGRjNFx1MGRiYlx1MGRkNFx1MGRjMFx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkYWZcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0XHUwZGMzXHUwZGNhXHUwZGI0XHUw''@;'; put 'put ''ZGFkXHUwZGQyXHUwZGIxXHUwZGNhXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkMlx1MGQ5YVx1MGRkNFx1MGRiYlx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDlcdTBkYjFcdTBkYzNcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2YiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''XHUwZDg5XHUwZGJiXHUwZGQyX1x1MGRjM1x1MGRiM1x1MGRkNF9cdTBkODVcdTBkOWZfXHUwZGI2XHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNF9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRfXHUwZGMzXHUwZGQ5XHUwZGIxIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJcdTBkODlfXHUwZGMzX1x1MGQ4NV9cdTBkYjZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiX1x1MGRjM1x1MGRkMl9cdTBkYzNcdTBkZDkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiYSBoOm1tIixMVFM6ImEgaDptbTpzcyIsTDoi''@;'; put 'put ''WVlZWS9NTS9ERCIsTEw6IllZWVkgTU1NTSBEIixMTEw6IllZWVkgTU1NTSBELCBhIGg6bW0iLExMTEw6IllZWVkgTU1NTSBEIFtcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDJdIGRkZGQsIGEgaDptbTpzcyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZDg1XHUwZGFmXSBMVFtcdTBkYTddIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwZGM0XHUwZGQ5XHUwZGE3XSBMVFtcdTBkYTddIixuZXh0V2VlazoiZGRkZCBMVFtcdTBkYTddIixsYXN0RGF5OiJbXHUwZDhhXHUwZGJhXHUwZGRhXSBMVFtcdTBkYTddIixsYXN0V2VlazoiW1x1MGRiNFx1MGRjM1x1MGRkNFx1MGQ5Y1x1MGRkMlx1MGRiYV0gZGRkZCBM''@;'; put 'put ''VFtcdTBkYTddIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MGQ5YVx1MGRkMlx1MGRiMVx1MGRjYSIscGFzdDoiJXNcdTBkOWFcdTBkYTcgXHUwZGI0XHUwZGQ5XHUwZGJiIixzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgXHUwZDlhXHUwZGQyXHUw''@;'; put 'put ''ZGM0XHUwZGQyXHUwZGI0XHUwZGJhIixzczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiICVkIixtOiJcdTBkYjhcdTBkZDJcdTBkYjFcdTBkZDJcdTBkYWRcdTBkY2FcdTBkYWRcdTBkZDRcdTBkYzAiLG1tOiJcdTBkYjhcdTBkZDJcdTBkYjFcdTBkZDJcdTBkYWRcdTBkY2FcdTBk''@;'; put 'put ''YWRcdTBkZDQgJWQiLGg6Ilx1MGRiNFx1MGRkMFx1MGRiYSIsaGg6Ilx1MGRiNFx1MGRkMFx1MGRiYSAlZCIsZDoiXHUwZGFmXHUwZGQyXHUwZGIxXHUwZGJhIixkZDoiXHUwZGFmXHUwZGQyXHUwZGIxICVkIixNOiJcdTBkYjhcdTBkY2ZcdTBkYzNcdTBkYmEiLE1NOiJcdTBkYjhcdTBkY2Zc''@;'; put 'put ''dTBkYzMgJWQiLHk6Ilx1MGRjMFx1MGRjM1x1MGRiYiIseXk6Ilx1MGRjMFx1MGRjM1x1MGRiYiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3JldHVybiBwKyIgXHUwZGMwXHUwZGQwXHUw''@;'; put 'put ''ZGIxXHUwZGQyIn0sbWVyaWRpZW1QYXJzZTovXHUwZGI0XHUwZGQ5XHUwZGJiIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1MGRkOS5cdTBkYzB8XHUwZGI0Llx1MGRjMC4vLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIlx1''@;'; put 'put ''MGRiNC5cdTBkYzAuIj09PXB8fCJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ij09PXB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcD4xMT93PyJcdTBkYjQuXHUwZGMwLiI6Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiOnc/Ilx1''@;'; put 'put ''MGRiNFx1MGRkOS5cdTBkYzAuIjoiXHUwZGI0XHUwZGQ5XHUwZGJiIFx1MGRjMFx1MGRiYlx1MGRkNCJ9fSl9KGIoOTc1ODYpKX0sMjM3NDE6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPSJqYW51XHhlMXJfZmVicnVceGUxcl9tYXJlY19hcHJceGVk''@;'; put 'put ''bF9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWd1c3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIikscD0iamFuX2ZlYl9tYXJfYXByX21ceGUxal9qXHhmYW5falx4ZmFsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gTihI''@;'; put 'put ''KXtyZXR1cm4gSD4xJiZIPDV9ZnVuY3Rpb24gdyhILFIsaixQKXt2YXIgTD1IKyIgIjtzd2l0Y2goail7Y2FzZSJzIjpyZXR1cm4gUnx8UD8icFx4ZTFyIHNla1x4ZmFuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBSfHxQP0wrKE4oSCk/InNla3VuZHkiOiJzZWtceGZh''@;'; put 'put ''bmQiKTpMKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIFI/Im1pblx4ZmF0YSI6UD8ibWluXHhmYXR1IjoibWluXHhmYXRvdSI7Y2FzZSJtbSI6cmV0dXJuIFJ8fFA/TCsoTihIKT8ibWluXHhmYXR5IjoibWluXHhmYXQiKTpMKyJtaW5ceGZhdGFtaSI7Y2FzZSJoIjpyZXR1cm4gUj8iaG9k''@;'; put 'put ''aW5hIjpQPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gUnx8UD9MKyhOKEgpPyJob2RpbnkiOiJob2RceGVkbiIpOkwrImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBSfHxQPyJkZVx1MDE0OCI6ImRcdTAxNDhvbSI7Y2FzZSJkZCI6cmV0dXJuIFJ8fFA/TCsoTihIKT8iZG5p''@;'; put 'put ''IjoiZG5ceGVkIik6TCsiZFx1MDE0OGFtaSI7Y2FzZSJNIjpyZXR1cm4gUnx8UD8ibWVzaWFjIjoibWVzaWFjb20iO2Nhc2UiTU0iOnJldHVybiBSfHxQP0wrKE4oSCk/Im1lc2lhY2UiOiJtZXNpYWNvdiIpOkwrIm1lc2lhY21pIjtjYXNlInkiOnJldHVybiBSfHxQPyJyb2siOiJyb2tvbSI7''@;'; put 'put ''Y2FzZSJ5eSI6cmV0dXJuIFJ8fFA/TCsoTihIKT8icm9reSI6InJva292Iik6TCsicm9rbWkifX1ELmRlZmluZUxvY2FsZSgic2siLHttb250aHM6Xyxtb250aHNTaG9ydDpwLHdlZWtkYXlzOiJuZWRlXHUwMTNlYV9wb25kZWxva191dG9yb2tfc3RyZWRhX1x1MDE2MXR2cnRva19waWF0b2tf''@;'; put 'put ''c29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3N0X1x1MDE2MXRfcGlfc28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6''@;'; put 'put ''IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RuZXMgb10gTFQiLG5leHREYXk6Ilt6YWp0cmEgb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dp''@;'; put 'put ''dGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkZVx1MDEzZXUgb10gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFtvXSBMVCI7Y2FzZSAzOnJldHVybiJbdiBzdHJlZHUgb10gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZvIFx1MDE2MXR2cnRvayBvXSBMVCI7Y2FzZSA1''@;'; put 'put ''OnJldHVybiJbdiBwaWF0b2sgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IG9dIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bFx4ZmEgbmVkZVx1MDEzZXUgb10g''@;'; put 'put ''TFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsXHhmYSBzdHJlZHUgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsXHhmYSBzb2JvdHUgb10gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZWQgJXMiLHM6dyxzczp3LG06dyxtbTp3LGg6dyxoaDp3LGQ6dyxkZDp3LE06dyxNTTp3LHk6dyx5eTp3fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIo''@;'; put 'put ''OTc1ODYpKX0sOTNlMzpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhOLHcsRixIKXt2YXIgUj1OKyIgIjtzd2l0Y2goRil7Y2FzZSJzIjpyZXR1cm4gd3x8SD8ibmVrYWogc2VrdW5kIjoibmVrYWogc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1''@;'; put 'put ''cm4gUisoMT09PU4/dz8ic2VrdW5kbyI6InNla3VuZGkiOjI9PT1OP3d8fEg/InNla3VuZGkiOiJzZWt1bmRhaCI6Tjw1P3d8fEg/InNla3VuZGUiOiJzZWt1bmRhaCI6InNla3VuZCIpO2Nhc2UibSI6cmV0dXJuIHc/ImVuYSBtaW51dGEiOiJlbm8gbWludXRvIjtjYXNlIm1tIjpyZXR1cm4g''@;'; put 'put ''UisoMT09PU4/dz8ibWludXRhIjoibWludXRvIjoyPT09Tj93fHxIPyJtaW51dGkiOiJtaW51dGFtYSI6Tjw1P3d8fEg/Im1pbnV0ZSI6Im1pbnV0YW1pIjp3fHxIPyJtaW51dCI6Im1pbnV0YW1pIik7Y2FzZSJoIjpyZXR1cm4gdz8iZW5hIHVyYSI6ImVubyB1cm8iO2Nhc2UiaGgiOnJldHVy''@;'; put 'put ''biBSKygxPT09Tj93PyJ1cmEiOiJ1cm8iOjI9PT1OP3d8fEg/InVyaSI6InVyYW1hIjpOPDU/d3x8SD8idXJlIjoidXJhbWkiOnd8fEg/InVyIjoidXJhbWkiKTtjYXNlImQiOnJldHVybiB3fHxIPyJlbiBkYW4iOiJlbmltIGRuZW0iO2Nhc2UiZGQiOnJldHVybiBSKygxPT09Tj93fHxIPyJk''@;'; put 'put ''YW4iOiJkbmVtIjoyPT09Tj93fHxIPyJkbmkiOiJkbmV2b21hIjp3fHxIPyJkbmkiOiJkbmV2aSIpO2Nhc2UiTSI6cmV0dXJuIHd8fEg/ImVuIG1lc2VjIjoiZW5pbSBtZXNlY2VtIjtjYXNlIk1NIjpyZXR1cm4gUisoMT09PU4/d3x8SD8ibWVzZWMiOiJtZXNlY2VtIjoyPT09Tj93fHxIPyJt''@;'; put 'put ''ZXNlY2EiOiJtZXNlY2VtYSI6Tjw1P3d8fEg/Im1lc2VjZSI6Im1lc2VjaSI6d3x8SD8ibWVzZWNldiI6Im1lc2VjaSIpO2Nhc2UieSI6cmV0dXJuIHd8fEg/ImVubyBsZXRvIjoiZW5pbSBsZXRvbSI7Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT1OP3d8fEg/ImxldG8iOiJsZXRvbSI6Mj09PU4/''@;'; put 'put ''d3x8SD8ibGV0aSI6ImxldG9tYSI6Tjw1P3d8fEg/ImxldGEiOiJsZXRpIjp3fHxIPyJsZXQiOiJsZXRpIil9fUQuZGVmaW5lTG9jYWxlKCJzbCIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3Zl''@;'; put 'put ''bWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamVrX3RvcmVr''@;'; put 'put ''X3NyZWRhX1x1MDEwZGV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zb2IuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb190b19zcl9cdTAxMGRlX3BlX3NvIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuIE1NLiBZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbZGFuZXMgb2JdIExUIixuZXh0RGF5OiJbanV0cmkgb2JdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2XSBbbmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbdl0gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0''@;'; put 'put ''dXJuIlt2XSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt2XSBkZGRkIFtvYl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmFqIG9iXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJb''@;'; put 'put ''cHJlalx1MDE2MW5qb10gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbcHJlalx1MDE2MW5qb10gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJb''@;'; put 'put ''cHJlalx1MDE2MW5qaV0gZGRkZCBbb2JdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDEwZGV6ICVzIixwYXN0OiJwcmVkICVzIixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250aE9yZGlu''@;'; put 'put ''YWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDYwNDUxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgic3EiLHttb250aHM6IkphbmFyX1Noa3VydF9NYXJzX1By''@;'; put 'put ''aWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX05ceGVibnRvcl9EaGpldG9yIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTlx4ZWJuX0RoaiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRSBEaWVs''@;'; put 'put ''X0UgSFx4ZWJuXHhlYl9FIE1hcnRceGViX0UgTVx4ZWJya3VyXHhlYl9FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW5ceGViIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRpZV9IXHhlYm5fTWFyX01ceGVicl9FbmpfUHJlX1NodCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRF9IX01hX01c''@;'; put 'put ''eGViX0VfUF9TaCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovUER8TUQvLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIk0iPT09cC5jaGFyQXQoMCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcDwxMj8iUEQiOiJNRCJ9LGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1NvdCBuXHhlYl0gTFQiLG5leHREYXk6''@;'; put 'put ''IltOZXNceGViciBuXHhlYl0gTFQiLG5leHRXZWVrOiJkZGRkIFtuXHhlYl0gTFQiLGxhc3REYXk6IltEamUgblx4ZWJdIExUIixsYXN0V2VlazoiZGRkZCBbZSBrYWx1YXIgblx4ZWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuXHhlYiAlcyIscGFzdDoiJXMg''@;'; put 'put ''bVx4ZWIgcGFyXHhlYiIsczoiZGlzYSBzZWtvbmRhIixzczoiJWQgc2Vrb25kYSIsbToibmpceGViIG1pbnV0XHhlYiIsbW06IiVkIG1pbnV0YSIsaDoibmpceGViIG9yXHhlYiIsaGg6IiVkIG9yXHhlYiIsZDoibmpceGViIGRpdFx4ZWIiLGRkOiIlZCBkaXRceGViIixNOiJualx4ZWIgbXVh''@;'; put 'put ''aiIsTU06IiVkIG11YWoiLHk6Im5qXHhlYiB2aXQiLHl5OiIlZCB2aXRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQwOTA1OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgXz17d29yZHM6e3NzOlsiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwIiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM1IiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4Il0s''@;'; put 'put ''bTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0sbW06WyJcdTA0M2NcdTA0MzhcdTA0''@;'; put 'put ''M2RcdTA0NDNcdTA0NDIiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxoOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiXSxoaDpbIlx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCIsIlx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzOCJdLGQ6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2Qg''@;'; put 'put ''XHUwNDM0XHUwNDMwXHUwNDNkIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLGRkOlsiXHUwNDM0XHUwNDMwXHUwNDNkIiwiXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIiwiXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0s''@;'; put 'put ''TTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIl0sTU06WyJcdTA0M2NcdTA0MzVcdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0NDYiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiXSx5OlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDQzIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0''@;'; put 'put ''MyIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzNSBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiXSx5eTpbIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSIsIlx1MDQzM1x1''@;'; put 'put ''MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKE4sdyl7cmV0dXJuIE4lMTA+PTEmJk4lMTA8PTQmJihOJTEwMDwxMHx8TiUxMDA+PTIwKT9OJTEwPT0xP3dbMF06d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oTix3LEYs''@;'; put 'put ''SCl7dmFyIGosUj1fLndvcmRzW0ZdO3JldHVybiAxPT09Ri5sZW5ndGg/InkiPT09RiYmdz8iXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDMwIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6SHx8dz9SWzBdOlJbMV06KGo9Xy5jb3JyZWN0R3JhbW1hdGljYWxDYXNl''@;'; put 'put ''KE4sUiksInl5Ij09PUYmJncmJiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiPT09aj9OKyIgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjpOKyIgIitqKX19O0QuZGVmaW5lTG9jYWxlKCJzci1jeXJsIix7bW9udGhzOiJcdTA0NThcdTA0MzBcdTA0''@;'; put 'put ''M2RcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMxXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThc''@;'; put 'put ''dTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDMy''@;'; put 'put ''XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQ0Nlx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDU4XHUwNDMwXHUwNDNkLl9cdTA0NDRcdTA0MzVcdTA0MzEuX1x1MDQzY1x1MDQzMFx1MDQ0MC5f''@;'; put 'put ''XHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0MzIuX1x1MDQzNFx1''@;'; put 'put ''MDQzNVx1MDQ0Ni4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzMFx1MDQzYV9cdTA0NDNcdTA0NDJcdTA0M2Vc''@;'; put 'put ''dTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMw''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNC5fXHUwNDNmXHUwNDNlXHUwNDNkLl9cdTA0NDNcdTA0NDJcdTA0M2UuX1x1MDQ0MVx1MDQ0MFx1MDQzNS5fXHUwNDQ3XHUwNDM1XHUwNDQyLl9cdTA0M2ZcdTA0MzVcdTA0NDIuX1x1MDQ0MVx1MDQ0M1x1MDQz''@;'; put 'put ''MS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNV9cdTA0M2ZcdTA0M2VfXHUwNDQzXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0MVx1MDQ0MyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMw''@;'; put 'put ''XHUwNDQxIFx1MDQ0M10gTFQiLG5leHREYXk6IltcdTA0NDFcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAgXHUwNDQzXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDQzXSBbXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5''@;'; put 'put ''XHUwNDQzXSBbXHUwNDQzXSBMVCI7Y2FzZSAzOnJldHVybiJbXHUwNDQzXSBbXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQzXSBbXHUwNDQzXSBMVCI7Y2FzZSA2OnJldHVybiJbXHUwNDQzXSBbXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzXSBbXHUwNDQzXSBMVCI7''@;'; put 'put ''Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDQzXSBkZGRkIFtcdTA0NDNdIExUIn19LGxhc3REYXk6IltcdTA0NThcdTA0NDNcdTA0NDdcdTA0MzUgXHUwNDQzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhc''@;'; put 'put ''dTA0M2JcdTA0MzVdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzVdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzYVx1MDQz''@;'; put 'put ''MF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQzXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0MzVdIFtcdTA0NDFcdTA0''@;'; put 'put ''NDBcdTA0MzVcdTA0MzRcdTA0MzVdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzM10gW1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzYVx1MDQzMF0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNl''@;'; put 'put ''XHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0MzVdIFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzVdIFtcdTA0NDNdIExUIl1b''@;'; put 'put ''dGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0MzhcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczpfLnRyYW5zbGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDpfLnRyYW5zbGF0ZSxkZDpfLnRyYW5zbGF0ZSxNOl8udHJhbnNsYXRlLE1NOl8udHJhbnNsYXRlLHk6Xy50cmFu''@;'; put 'put ''c2xhdGUseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw1NTA0NjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRz''@;'; put 'put ''OntzczpbInNla3VuZGEiLCJzZWt1bmRlIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGQ6WyJqZWRh''@;'; put 'put ''biBkYW4iLCJqZWRub2cgZGFuYSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNOlsiamVkYW4gbWVzZWMiLCJqZWRub2cgbWVzZWNhIl0sTU06WyJtZXNlYyIsIm1lc2VjYSIsIm1lc2VjaSJdLHk6WyJqZWRudSBnb2RpbnUiLCJqZWRuZSBnb2RpbmUiXSx5eTpbImdvZGludSIsImdvZGlu''@;'; put 'put ''ZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKE4sdyl7cmV0dXJuIE4lMTA+PTEmJk4lMTA8PTQmJihOJTEwMDwxMHx8TiUxMDA+PTIwKT9OJTEwPT0xP3dbMF06d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oTix3LEYsSCl7dmFyIGosUj1fLndvcmRz''@;'; put 'put ''W0ZdO3JldHVybiAxPT09Ri5sZW5ndGg/InkiPT09RiYmdz8iamVkbmEgZ29kaW5hIjpIfHx3P1JbMF06UlsxXTooaj1fLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoTixSKSwieXkiPT09RiYmdyYmImdvZGludSI9PT1qP04rIiBnb2RpbmEiOk4rIiAiK2opfX07RC5kZWZpbmVMb2NhbGUoInNy''@;'; put 'put ''Iix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9u''@;'; put 'put ''b3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamFrX3V0b3Jha19zcmVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmUuX1x1MDEwZGV0''@;'; put 'put ''Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0g''@;'; put 'put ''WVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2Ug''@;'; put 'put ''MDpyZXR1cm4iW3VdIFtuZWRlbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6Iltq''@;'; put 'put ''dVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRlbGplXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRlbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Jl''@;'; put 'put ''ZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''InphICVzIixwYXN0OiJwcmUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOl8udHJhbnNsYXRlLGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06Xy50''@;'; put 'put ''cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDg1NzY1OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtELmRlZmluZUxvY2FsZSgic3MiLHttb250aHM6IkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmkiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6IkJoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ikxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfVXNfTGJfTHRfTHNfTGhfVWciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltOYW11aGxhIG5nYV0gTFQiLG5leHREYXk6IltLdXNhc2EgbmdhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25n''@;'; put 'put ''YV0gTFQiLGxhc3REYXk6IltJdG9sbyBuZ2FdIExUIixsYXN0V2VlazoiZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuZ2EgJXMiLHBhc3Q6IndlbnRla2EgbmdhICVzIixzOiJlbWl6dXp3YW5hIGxvbWNhbmUiLHNzOiIl''@;'; put 'put ''ZCBtenV6d2FuYSIsbToidW16dXp1IixtbToiJWQgZW1penV6dSIsaDoibGlob3JhIixoaDoiJWQgZW1haG9yYSIsZDoibGlsYW5nYSIsZGQ6IiVkIGVtYWxhbmdhIixNOiJpbnlhbmdhIixNTToiJWQgdGlueWFuZ2EiLHk6InVtbnlha2EiLHl5OiIlZCBpbWlueWFrYSJ9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxtZXJpZGllbTpmdW5jdGlvbihwLE4sdyl7cmV0dXJuIHA8MTE/ImVrdXNlbmkiOnA8MTU/ImVtaW5pIjpwPDE5PyJlbnRzYW1iYW1hIjoiZWJ1c3VrdSJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLE4pe3JldHVybiAxMj09''@;'; put 'put ''PXAmJihwPTApLCJla3VzZW5pIj09PU4/cDoiZW1pbmkiPT09Tj9wPj0xMT9wOnArMTI6ImVudHNhbWJhbWEiPT09Tnx8ImVidXN1a3UiPT09Tj8wPT09cD8wOnArMTI6dm9pZCAwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOiIlZCIsd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''OjR9fSl9KGIoOTc1ODYpKX0sOTkyOTA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJzdiIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9u''@;'; put 'put ''b3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InNceGY2bmRhZ19tXHhlNW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhm''@;'; put 'put ''NnJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjZuX21ceGU1bl90aXNfb25zX3Rvcl9mcmVfbFx4ZjZyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmNl9tXHhlNV90aV9vbl90b19mcl9sXHhmNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVkgSEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW0lkYWddIExUIixuZXh0RGF5OiJbSW1vcmdvbl0gTFQiLGxhc3REYXk6IltJZ1x4ZTVyXSBMVCIsbmV4dFdlZWs6IltQXHhlNV0gZGRkZCBMVCIsbGFzdFdlZWs6IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJv''@;'; put 'put ''bSAlcyIscGFzdDoiZlx4ZjZyICVzIHNlZGFuIixzOiJuXHhlNWdyYSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJlbiBtaW51dCIsbW06IiVkIG1pbnV0ZXIiLGg6ImVuIHRpbW1lIixoaDoiJWQgdGltbWFyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdhciIsTToiZW4gbVx4ZTVuYWQi''@;'; put 'put ''LE1NOiIlZCBtXHhlNW5hZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXDplfFw6YSkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIE49cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyI6ZSI6MT09PU58fDI9PT1O''@;'; put 'put ''PyI6YSI6IjplIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDUzNDQ5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgic3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1''@;'; put 'put ''bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9K''@;'; put 'put ''dW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNh''@;'; put 'put ''YV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNla3VuZGUgJWQiLG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixoaDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2ph''@;'; put 'put ''IixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw3MjY4ODpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGJlNyIsMjoiXHUwYmU4IiwzOiJcdTBi''@;'; put 'put ''ZTkiLDQ6Ilx1MGJlYSIsNToiXHUwYmViIiw2OiJcdTBiZWMiLDc6Ilx1MGJlZCIsODoiXHUwYmVlIiw5OiJcdTBiZWYiLDA6Ilx1MGJlNiJ9LHA9eyJcdTBiZTciOiIxIiwiXHUwYmU4IjoiMiIsIlx1MGJlOSI6IjMiLCJcdTBiZWEiOiI0IiwiXHUwYmViIjoiNSIsIlx1MGJlYyI6IjYiLCJc''@;'; put 'put ''dTBiZWQiOiI3IiwiXHUwYmVlIjoiOCIsIlx1MGJlZiI6IjkiLCJcdTBiZTYiOiIwIn07RC5kZWZpbmVMb2NhbGUoInRhIix7bW9udGhzOiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJh''@;'; put 'put ''ZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNcdTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUw''@;'; put 'put ''YmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUw''@;'; put 'put ''YmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVc''@;'; put 'put ''dTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJj''@;'; put 'put ''ZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJj''@;'; put 'put ''ZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjZFx1MGJiMVx1MGJjMVx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9c''@;'; put 'put ''dTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhYVx1MGJjMVx1''@;'; put 'put ''MGJhNFx1MGJhOVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmXHUwYjk1XHUw''@;'; put 'put ''YmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJhOVx1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiYzFfXHUwYmE0''@;'; put 'put ''XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RfXHUwYmI1XHUwYmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYmE5XHUwYmNkX1x1MGJi''@;'; put 'put ''NVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZl9cdTBiOWFcdTBiYTlcdTBiYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGI5ZVx1MGJiZV9cdTBiYTRcdTBiYmZfXHUwYjlhXHUwYmM2X1x1MGJhYVx1MGJjMV9cdTBiYjVcdTBiYmZfXHUwYmI1XHUwYmM2X1x1MGI5YSIuc3Bs''@;'; put 'put ''aXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGI4''@;'; put 'put ''N1x1MGJhOVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLG5leHREYXk6IltcdTBiYThcdTBiYmVcdTBiYjNcdTBiYzhdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBiYThcdTBiYzdcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixsYXN0V2VlazoiW1x1MGI5NVx1MGI5''@;'; put 'put ''Zlx1MGJhOFx1MGJjZFx1MGJhNCBcdTBiYjVcdTBiYmVcdTBiYjBcdTBiYWVcdTBiY2RdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBiODdcdTBiYjJcdTBiY2QiLHBhc3Q6IiVzIFx1MGJhZVx1MGJjMVx1MGJhOVx1MGJjZCIsczoiXHUwYjky''@;'; put 'put ''XHUwYmIwXHUwYmMxIFx1MGI5YVx1MGJiZlx1MGJiMiBcdTBiYjVcdTBiYmZcdTBiYThcdTBiYmVcdTBiOWZcdTBiYmZcdTBiOTVcdTBiYjNcdTBiY2QiLHNzOiIlZCBcdTBiYjVcdTBiYmZcdTBiYThcdTBiYmVcdTBiOWZcdTBiYmZcdTBiOTVcdTBiYjNcdTBiY2QiLG06Ilx1MGI5Mlx1MGJi''@;'; put 'put ''MFx1MGJjMSBcdTBiYThcdTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiYWVcdTBiY2QiLG1tOiIlZCBcdTBiYThcdTBiYmZcdTBiYWVcdTBiYmZcdTBiOWZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLGg6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYTNcdTBiYmYgXHUw''@;'; put 'put ''YmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixoaDoiJWQgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsZDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhOFx1MGJiZVx1MGJiM1x1MGJjZCIsZGQ6IiVkIFx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJj''@;'; put 'put ''ZFx1MGI5NVx1MGJiM1x1MGJjZCIsTToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGJhZVx1MGJjZCIsTU06IiVkIFx1MGJhZVx1MGJiZVx1MGJhNFx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIseToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJiNVx1MGJi''@;'; put 'put ''MFx1MGJjMVx1MGI5Zlx1MGJhZVx1MGJjZCIseXk6IiVkIFx1MGI4Nlx1MGJhM1x1MGJjZFx1MGI5Zlx1MGJjMVx1MGI5NVx1MGJiM1x1MGJjZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTBiYjVcdTBiYTRcdTBiYzEvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcr''@;'; put 'put ''Ilx1MGJiNVx1MGJhNFx1MGJjMSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBiZTdcdTBiZThcdTBiZTlcdTBiZWFcdTBiZWJcdTBiZWNcdTBiZWRcdTBiZWVcdTBiZWZcdTBiZTZdL2csZnVuY3Rpb24oRil7cmV0dXJuIHBbRl19KX0scG9zdGZvcm1hdDpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiBfW0ZdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZHxcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzh8XHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4fFx1''@;'; put 'put ''MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZHxcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFcdTBiYmVcdTBiOWZcdTBiYzF8XHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4LyxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8Mj8iIFx1MGJhZlx1MGJiZVx1MGJh''@;'; put 'put ''ZVx1MGJhZVx1MGJjZCI6dzw2PyIgXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ijp3PDEwPyIgXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ijp3PDE0PyIgXHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIjp3PDE4PyIgXHUwYjhlXHUwYmIxXHUwYmNkXHUw''@;'; put 'put ''YmFhXHUwYmJlXHUwYjlmXHUwYmMxIjp3PDIyPyIgXHUwYmFlXHUwYmJlXHUwYmIyXHUwYmM4IjoiIFx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCJ9LG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LEYpe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVc''@;'; put 'put ''dTBiY2QiPT09Rj93PDI/dzp3KzEyOiJcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiPT09Rnx8Ilx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI9PT1GfHwiXHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkIj09PUYmJnc+PTEwP3c6dysxMn0sd2Vlazp7ZG93''@;'; put 'put ''OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sMzIwNjA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJ0ZSIse21vbnRoczoiXHUwYzFjXHUwYzI4XHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyYlx1MGMzZlx1MGMyY1x1MGM0ZFx1MGMzMFx1''@;'; put 'put ''MGMzNVx1MGMzMFx1MGMzZl9cdTBjMmVcdTBjM2VcdTBjMzBcdTBjNGRcdTBjMWFcdTBjM2ZfXHUwYzBmXHUwYzJhXHUwYzRkXHUwYzMwXHUwYzNmXHUwYzMyXHUwYzRkX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMw''@;'; put 'put ''Nlx1MGMxN1x1MGMzOFx1MGM0ZFx1MGMxZlx1MGM0MV9cdTBjMzhcdTBjNDZcdTBjMmFcdTBjNGRcdTBjMWZcdTBjNDZcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzA1XHUwYzE1XHUwYzRkXHUwYzFmXHUwYzRiXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyOFx1MGMzNVx1MGMwMlx1MGMy''@;'; put 'put ''Y1x1MGMzMFx1MGM0ZF9cdTBjMjFcdTBjM2ZcdTBjMzhcdTBjNDZcdTBjMDJcdTBjMmNcdTBjMzBcdTBjNGQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGMxY1x1MGMyOC5fXHUwYzJiXHUwYzNmXHUwYzJjXHUwYzRkXHUwYzMwLl9cdTBjMmVcdTBjM2VcdTBjMzBcdTBjNGRcdTBjMWFc''@;'; put 'put ''dTBjM2ZfXHUwYzBmXHUwYzJhXHUwYzRkXHUwYzMwXHUwYzNmLl9cdTBjMmVcdTBjNDdfXHUwYzFjXHUwYzQyXHUwYzI4XHUwYzRkX1x1MGMxY1x1MGM0MVx1MGMzMlx1MGM0OF9cdTBjMDZcdTBjMTcuX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZC5fXHUwYzA1XHUwYzE1XHUwYzRkXHUwYzFm''@;'; put 'put ''XHUwYzRiLl9cdTBjMjhcdTBjMzUuX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Ni4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYzA2XHUwYzI2XHUwYzNmXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzOFx1MGM0Ylx1MGMyZVx1MGMzNVx1MGMzZVx1''@;'; put 'put ''MGMzMFx1MGMwMl9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzJjXHUwYzQxXHUwYzI3XHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MVx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjNDFc''@;'; put 'put ''dTBjMTVcdTBjNGRcdTBjMzBcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM2XHUwYzI4XHUwYzNmXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGMwNlx1MGMyNlx1MGMzZl9cdTBjMzhcdTBjNGJcdTBjMmVfXHUwYzJlXHUwYzAyXHUw''@;'; put 'put ''YzE3XHUwYzMzX1x1MGMyY1x1MGM0MVx1MGMyN19cdTBjMTdcdTBjNDFcdTBjMzBcdTBjNDFfXHUwYzM2XHUwYzQxXHUwYzE1XHUwYzRkXHUwYzMwX1x1MGMzNlx1MGMyOFx1MGMzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYzA2X1x1MGMzOFx1MGM0Yl9cdTBjMmVcdTBjMDJfXHUw''@;'; put 'put ''YzJjXHUwYzQxX1x1MGMxN1x1MGM0MV9cdTBjMzZcdTBjNDFfXHUwYzM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGMyOFx1MGM0N1x1MGMyMVx1MGM0MV0gTFQiLG5leHREYXk6IltcdTBjMzBcdTBjNDdcdTBjMmFcdTBjNDFdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjMjhcdTBjM2ZcdTBjMjhc''@;'; put 'put ''dTBjNGRcdTBjMjhdIExUIixsYXN0V2VlazoiW1x1MGMxN1x1MGMyNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGMzMlx1MGM0YiIscGFzdDoiJXMgXHUwYzE1XHUwYzRkXHUwYzMwXHUwYzNmXHUwYzI0XHUwYzAyIixzOiJcdTBjMTVcdTBj''@;'; put 'put ''NGFcdTBjMjhcdTBjNGRcdTBjMjhcdTBjM2YgXHUwYzE1XHUwYzRkXHUwYzM3XHUwYzIzXHUwYzNlXHUwYzMyXHUwYzQxIixzczoiJWQgXHUwYzM4XHUwYzQ2XHUwYzE1XHUwYzI4XHUwYzRkXHUwYzMyXHUwYzQxIixtOiJcdTBjMTJcdTBjMTUgXHUwYzI4XHUwYzNmXHUwYzJlXHUwYzNmXHUw''@;'; put 'put ''YzM3XHUwYzAyIixtbToiJWQgXHUwYzI4XHUwYzNmXHUwYzJlXHUwYzNmXHUwYzM3XHUwYzNlXHUwYzMyXHUwYzQxIixoOiJcdTBjMTJcdTBjMTUgXHUwYzE3XHUwYzAyXHUwYzFmIixoaDoiJWQgXHUwYzE3XHUwYzAyXHUwYzFmXHUwYzMyXHUwYzQxIixkOiJcdTBjMTJcdTBjMTUgXHUwYzMw''@;'; put 'put ''XHUwYzRiXHUwYzFjXHUwYzQxIixkZDoiJWQgXHUwYzMwXHUwYzRiXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQxIixNOiJcdTBjMTJcdTBjMTUgXHUwYzI4XHUwYzQ2XHUwYzMyIixNTToiJWQgXHUwYzI4XHUwYzQ2XHUwYzMyXHUwYzMyXHUwYzQxIix5OiJcdTBjMTJcdTBjMTUgXHUwYzM4XHUw''@;'; put 'put ''YzAyXHUwYzM1XHUwYzI0XHUwYzRkXHUwYzM4XHUwYzMwXHUwYzAyIix5eToiJWQgXHUwYzM4XHUwYzAyXHUwYzM1XHUwYzI0XHUwYzRkXHUwYzM4XHUwYzMwXHUwYzNlXHUwYzMyXHUwYzQxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MGMzNS8sb3JkaW5hbDoiJWRcdTBj''@;'; put 'put ''MzUiLG1lcmlkaWVtUGFyc2U6L1x1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZnxcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDJ8XHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyfFx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMy''@;'; put 'put ''NFx1MGM0ZFx1MGMzMFx1MGMwMi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsTil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI9PT1OP3A8ND9wOnArMTI6Ilx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMiI9PT1OP3A6Ilx1MGMyZVx1''@;'; put 'put ''MGMyN1x1MGM0ZFx1MGMyZlx1MGMzZVx1MGMzOVx1MGM0ZFx1MGMyOFx1MGMwMiI9PT1OP3A+PTEwP3A6cCsxMjoiXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyIj09PU4/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4g''@;'; put 'put ''cDw0PyJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YiOnA8MTA/Ilx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMiI6cDwxNz8iXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIjpwPDIwPyJcdTBjMzhcdTBjM2VcdTBjMmZcdTBj''@;'; put 'put ''MDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiOiJcdTBjMzBcdTBjM2VcdTBjMjRcdTBjNGRcdTBjMzBcdTBjM2YifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw5MzI5MDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUo''@;'; put 'put ''InRldCIse21vbnRoczoiSmFuZWlydV9GZXZlcmVpcnVfTWFyc3VfQWJyaWxfTWFpdV9KdVx4ZjF1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1Nl''@;'; put 'put ''dF9PdXRfTm92X0RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJEb19TZWdfVGVfS3VfS2lfU2VzX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheToiW09oaW4gaWhhXSBMVCIsbmV4dERheToiW0FiYW4gaWhhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2loYV0gTFQiLGxhc3REYXk6IltIb3Jpc2VpayBpaGFdIExUIixsYXN0V2VlazoiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCIsc2FtZUVsc2U6Ikwi''@;'; put 'put ''fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaWhhICVzIixwYXN0OiIlcyBsaXViYSIsczoic2VndW5kdSBiYWx1biIsc3M6InNlZ3VuZHUgJWQiLG06Im1pbnV0dSBpZGEiLG1tOiJtaW51dHUgJWQiLGg6Im9yYXMgaWRhIixoaDoib3JhcyAlZCIsZDoibG9yb24gaWRhIixkZDoibG9yb24gJWQi''@;'; put 'put ''LE06ImZ1bGFuIGlkYSIsTU06ImZ1bGFuICVkIix5OiJ0aW5hbiBpZGEiLHl5OiJ0aW5hbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBOPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgi''@;'; put 'put ''OjE9PT1OPyJzdCI6Mj09PU4/Im5kIjozPT09Tj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4Mjk0OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0M1x1MDQzYyIsMToiLVx1MDQ0M1x1MDQzYyIs''@;'; put 'put ''MjoiLVx1MDQ0ZVx1MDQzYyIsMzoiLVx1MDQ0ZVx1MDQzYyIsNDoiLVx1MDQ0M1x1MDQzYyIsNToiLVx1MDQ0M1x1MDQzYyIsNjoiLVx1MDQ0M1x1MDQzYyIsNzoiLVx1MDQ0M1x1MDQzYyIsODoiLVx1MDQ0M1x1MDQzYyIsOToiLVx1MDQ0M1x1MDQzYyIsMTA6Ii1cdTA0NDNcdTA0M2MiLDEy''@;'; put 'put ''OiItXHUwNDQzXHUwNDNjIiwxMzoiLVx1MDQ0M1x1MDQzYyIsMjA6Ii1cdTA0NDNcdTA0M2MiLDMwOiItXHUwNDRlXHUwNDNjIiw0MDoiLVx1MDQ0M1x1MDQzYyIsNTA6Ii1cdTA0NDNcdTA0M2MiLDYwOiItXHUwNDQzXHUwNDNjIiw3MDoiLVx1MDQ0M1x1MDQzYyIsODA6Ii1cdTA0NDNcdTA0''@;'; put 'put ''M2MiLDkwOiItXHUwNDQzXHUwNDNjIiwxMDA6Ii1cdTA0NDNcdTA0M2MifTtELmRlZmluZUxvY2FsZSgidGciLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQzOF9cdTA0''@;'; put 'put ''M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzhfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQzOVx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1''@;'; put 'put ''MDQ0MVx1MDQ0Mlx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0MzBcdTA0MzFcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1''@;'; put 'put ''XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNlXHUwNDNhXHUwNDQyXHUw''@;'; put 'put ''NDRmXHUwNDMxXHUwNDQwX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDRmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQzNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQ3''@;'; put 'put ''XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQzZlx1MDQzMFx1MDQzZFx1MDRiN1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0YjdcdTA0NDNcdTA0M2NcdTA0NGFcdTA0MzBfXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1Ii5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQ0Zlx1MDQ0OFx1MDQzMV9cdTA0MzRcdTA0NDhcdTA0MzFfXHUwNDQxXHUwNDQ4XHUwNDMxX1x1MDQ0N1x1MDQ0OFx1MDQzMV9cdTA0M2ZcdTA0NDhcdTA0MzFfXHUwNGI3XHUwNDQzXHUwNDNjX1x1MDQ0OFx1MDQzZFx1MDQzMSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHUwNDRmXHUwNDQ4X1x1MDQzNFx1MDQ0OF9cdTA0NDFcdTA0NDhfXHUwNDQ3XHUwNDQ4X1x1MDQzZlx1MDQ0OF9cdTA0YjdcdTA0M2NfXHUwNDQ4XHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''Lk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxOFx1MDQzY1x1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0Mzhd''@;'; put 'put ''IExUIixuZXh0RGF5OiJbXHUwNDI0XHUwNDMwXHUwNDQwXHUwNDM0XHUwNDNlIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3REYXk6IltcdTA0MTRcdTA0MzhcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzZVx1MDQ0Zlx1MDQzZFx1MDQzNFx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRc''@;'; put 'put ''dTA0NDJcdTA0MzBcdTA0MzggXHUwNDMzXHUwNDQzXHUwNDM3XHUwNDMwXHUwNDQ4XHUwNDQyXHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzMVx1MDQzMFx1MDQ0YVx1MDQzNFx1MDQzOCAl''@;'; put 'put ''cyIscGFzdDoiJXMgXHUwNDNmXHUwNDM1XHUwNDQ4IixzOiJcdTA0NGZcdTA0M2FcdTA0NDdcdTA0MzBcdTA0M2RcdTA0MzQgXHUwNDQxXHUwNDNlXHUwNDNkXHUwNDM4XHUwNDRmIixtOiJcdTA0NGZcdTA0M2EgXHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMwIixtbToiJWQg''@;'; put 'put ''XHUwNDM0XHUwNDMwXHUwNDliXHUwNDM4XHUwNDliXHUwNDMwIixoOiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyIixkOiJcdTA0NGZcdTA0M2EgXHUwNDQwXHUwNGVmXHUwNDM3IixkZDoiJWQgXHUwNDQwXHUw''@;'; put 'put ''NGVmXHUwNDM3IixNOiJcdTA0NGZcdTA0M2EgXHUwNDNjXHUwNDNlXHUwNGIzIixNTToiJWQgXHUwNDNjXHUwNDNlXHUwNGIzIix5OiJcdTA0NGZcdTA0M2EgXHUwNDQxXHUwNDNlXHUwNDNiIix5eToiJWQgXHUwNDQxXHUwNDNlXHUwNDNiIn0sbWVyaWRpZW1QYXJzZTovXHUwNDQ4XHUwNDMw''@;'; put 'put ''XHUwNDMxfFx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRiM3xcdTA0NDBcdTA0ZWZcdTA0Mzd8XHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTix3KXtyZXR1cm4gMTI9PT1OJiYoTj0wKSwiXHUwNDQ4XHUwNDMwXHUwNDMxIj09PXc/Tjw0P046Tisx''@;'; put 'put ''MjoiXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIj09PXc/TjoiXHUwNDQwXHUwNGVmXHUwNDM3Ij09PXc/Tj49MTE/TjpOKzEyOiJcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMiPT09dz9OKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTix3LEYpe3JldHVybiBOPDQ/Ilx1MDQ0''@;'; put 'put ''OFx1MDQzMFx1MDQzMSI6TjwxMT8iXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIjpOPDE2PyJcdTA0NDBcdTA0ZWZcdTA0MzciOk48MTk/Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI6Ilx1MDQ0OFx1MDQzMFx1MDQzMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0t''@;'; put 'put ''KFx1MDQ0M1x1MDQzY3xcdTA0NGVcdTA0M2MpLyxvcmRpbmFsOmZ1bmN0aW9uKE4pe3JldHVybiBOKyhfW05dfHxfW04lMTBdfHxfW04+PTEwMD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSwxMjMxOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgidGgiLHttb250aHM6Ilx1MGUyMVx1MGUwMVx1MGUyM1x1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzhcdTBlMjFcdTBlMjBcdTBlMzJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMThcdTBlNGNfXHUwZTIxXHUwZTM1XHUwZTE5XHUwZTMyXHUw''@;'; put 'put ''ZTA0XHUwZTIxX1x1MGU0MFx1MGUyMVx1MGUyOVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMWVcdTBlMjRcdTBlMjlcdTBlMjBcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTIxXHUwZTM0XHUwZTE2XHUwZTM4XHUwZTE5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUwMVx1MGUyM1x1MGUwMVx1MGUwZVx1''@;'; put 'put ''MGUzMlx1MGUwNFx1MGUyMV9cdTBlMmFcdTBlMzRcdTBlMDdcdTBlMmJcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTAxXHUwZTMxXHUwZTE5XHUwZTIyXHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxNVx1MGUzOFx1MGUyNVx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMWVcdTBlMjRcdTBlMjhcdTBlMDhc''@;'; put 'put ''dTBlMzRcdTBlMDFcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE4XHUwZTMxXHUwZTE5XHUwZTI3XHUwZTMyXHUwZTA0XHUwZTIxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBlMjEuXHUwZTA0Ll9cdTBlMDEuXHUwZTFlLl9cdTBlMjFcdTBlMzUuXHUwZTA0Ll9cdTBlNDBcdTBlMjEuXHUw''@;'; put 'put ''ZTIyLl9cdTBlMWUuXHUwZTA0Ll9cdTBlMjFcdTBlMzQuXHUwZTIyLl9cdTBlMDEuXHUwZTA0Ll9cdTBlMmEuXHUwZTA0Ll9cdTBlMDEuXHUwZTIyLl9cdTBlMTUuXHUwZTA0Ll9cdTBlMWUuXHUwZTIyLl9cdTBlMTguXHUwZTA0LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdl''@;'; put 'put ''ZWtkYXlzOiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUw''@;'; put 'put ''ZTMxXHUwZTJhXHUwZTFhXHUwZTE0XHUwZTM1X1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZTJkXHUwZTMyXHUwZTE3XHUwZTM0XHUwZTE1XHUwZTIyXHUwZTRjX1x1MGUw''@;'; put 'put ''OFx1MGUzMVx1MGUxOVx1MGUxN1x1MGUyM1x1MGU0Y19cdTBlMmRcdTBlMzFcdTBlMDdcdTBlMDRcdTBlMzJcdTBlMjNfXHUwZTFlXHUwZTM4XHUwZTE4X1x1MGUxZVx1MGUyNFx1MGUyYlx1MGUzMVx1MGUyYV9cdTBlMjhcdTBlMzhcdTBlMDFcdTBlMjNcdTBlNGNfXHUwZTQwXHUwZTJhXHUw''@;'; put 'put ''ZTMyXHUwZTIzXHUwZTRjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBlMmRcdTBlMzIuX1x1MGUwOC5fXHUwZTJkLl9cdTBlMWUuX1x1MGUxZVx1MGUyNC5fXHUwZTI4Ll9cdTBlMmEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6''@;'; put 'put ''bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMiBIOm1tIixMTExMOiJcdTBlMjdcdTBlMzFcdTBlMTlkZGRkXHUwZTE3XHUwZTM1XHUwZTQ4IEQgTU1NTSBZWVlZIFx1MGU0MFx1''@;'; put 'put ''MGUyN1x1MGUyNVx1MGUzMiBIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTAxXHUwZTQ4XHUwZTJkXHUwZTE5XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3fFx1MGUyYlx1MGUyNVx1MGUzMVx1MGUwN1x1MGU0MFx1MGUxN1x1MGUzNVx1MGU0OFx1MGUyMlx1MGUwNy8saXNQ''@;'; put 'put ''TTpmdW5jdGlvbihwKXtyZXR1cm4iXHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Ij09PXB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcDwxMj8iXHUwZTAxXHUwZTQ4XHUwZTJkXHUwZTE5XHUwZTQwXHUwZTE3XHUw''@;'; put 'put ''ZTM1XHUwZTQ4XHUwZTIyXHUwZTA3IjoiXHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlMjdcdTBlMzFcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUw''@;'; put 'put ''ZTMyXSBMVCIsbmV4dERheToiW1x1MGUxZVx1MGUyM1x1MGUzOFx1MGU0OFx1MGUwN1x1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0V2VlazoiZGRkZFtcdTBlMmJcdTBlMTlcdTBlNDlcdTBlMzIgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBM''@;'; put 'put ''VCIsbGFzdERheToiW1x1MGU0MFx1MGUyMVx1MGUzN1x1MGU0OFx1MGUyZFx1MGUyN1x1MGUzMlx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0V2VlazoiW1x1MGUyN1x1MGUzMVx1MGUxOV1kZGRkW1x1MGUxN1x1MGUzNVx1MGU0OFx1''@;'; put 'put ''MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTBlMmRcdTBlMzVcdTBlMDEgJXMiLHBhc3Q6IiVzXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3Iixz''@;'; put 'put ''OiJcdTBlNDRcdTBlMjFcdTBlNDhcdTBlMDFcdTBlMzVcdTBlNDhcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLHNzOiIlZCBcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG06IjEgXHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtbToiJWQgXHUwZTE5''@;'; put 'put ''XHUwZTMyXHUwZTE3XHUwZTM1IixoOiIxIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUyMVx1MGUwNyIsaGg6IiVkIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUyMVx1MGUwNyIsZDoiMSBcdTBlMjdcdTBlMzFcdTBlMTkiLGRkOiIlZCBcdTBlMjdcdTBlMzFc''@;'; put 'put ''dTBlMTkiLHc6IjEgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIix3dzoiJWQgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIixNOiIxIFx1MGU0MFx1MGUxNFx1MGUzN1x1MGUyZFx1MGUxOSIsTU06IiVkIFx1MGU0MFx1MGUxNFx1''@;'; put 'put ''MGUzN1x1MGUyZFx1MGUxOSIseToiMSBcdTBlMWJcdTBlMzUiLHl5OiIlZCBcdTBlMWJcdTBlMzUifX0pfShiKDk3NTg2KSl9LDM3NDY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiInaW5qaSIsNToiJ2luamkiLDg6IidpbmppIiw3MDoiJ2lu''@;'; put 'put ''amkiLDgwOiInaW5qaSIsMjoiJ25qaSIsNzoiJ25qaSIsMjA6IiduamkiLDUwOiInbmppIiwzOiInXHhmY25qaSIsNDoiJ1x4ZmNuamkiLDEwMDoiJ1x4ZmNuamkiLDY6IiduankiLDk6Iid1bmp5IiwxMDoiJ3VuankiLDMwOiIndW5qeSIsNjA6Iid5bmp5Iiw5MDoiJ3luankifTtELmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgidGsiLHttb250aHM6Ilx4ZGRhbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYVx4ZmRfSVx4ZmR1bl9JXHhmZHVsX0F3Z3VzdF9TZW50XHhmZGFicl9Pa3RceGZkYWJyX05vXHhmZGFicl9EZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx4ZGRhbl9GZXdfTWFyX0Fwcl9N''@;'; put 'put ''YVx4ZmRfSVx4ZmRuX0lceGZkbF9Bd2dfU2VuX09rdF9Ob1x4ZmRfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJceGRkZWtcdTAxNWZlbmJlX0R1XHUwMTVmZW5iZV9TaVx1MDE1ZmVuYmVfXHhjN2FyXHUwMTVmZW5iZV9QZW5cdTAxNWZlbmJlX0FubmFfXHUwMTVlZW5iZSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJceGRkZWtfRHVcdTAxNWZfU2lcdTAxNWZfXHhjN2FyX1Blbl9Bbm5fXHUwMTVlZW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx4ZGRrX0RcdTAxNWZfU1x1MDE1Zl9ceGM3cl9Qbl9Bbl9cdTAxNWVuIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhZ2F0XSBMVCIsbmV4dERheToiW2VydGly''@;'; put 'put ''IHNhZ2F0XSBMVCIsbmV4dFdlZWs6IltpbmRpa2ldIGRkZGQgW3NhZ2F0XSBMVCIsbGFzdERheToiW2RceGZjXHhmZG5dIExUIixsYXN0V2VlazoiW2dlXHhlN2VuXSBkZGRkIFtzYWdhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvXHUwMTQ4IixwYXN0''@;'; put 'put ''OiIlcyBceGY2XHUwMTQ4IixzOiJiaXJuXHhlNFx4ZTdlIHNla3VudCIsbToiYmlyIG1pbnV0IixtbToiJWQgbWludXQiLGg6ImJpciBzYWdhdCIsaGg6IiVkIHNhZ2F0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYVx4ZmQiLE1NOiIlZCBhXHhmZCIseToiYmlyIFx4''@;'; put 'put ''ZmR5bCIseXk6IiVkIFx4ZmR5bCJ9LG9yZGluYWw6ZnVuY3Rpb24oTix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBOO2RlZmF1bHQ6aWYoMD09PU4pcmV0dXJuIE4rIid1bmp5Ijt2YXIgRj1OJTEwO3JldHVybiBOKyhfW0ZdfHxfW04lMTAw''@;'; put 'put ''LUZdfHxfW04+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNDkwNDA6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJ0bC1waCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJp''@;'; put 'put ''bF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dv''@;'; put 'put ''X0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJh''@;'; put 'put ''d10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9v''@;'; put 'put ''YiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBi''@;'; put 'put ''dXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHB9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDE3MTg3OmZ1bmN0aW9uKGNlLEos''@;'; put 'put ''Yil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0icGFnaF93YVx1MjAxOV9jaGFcdTIwMTlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQiLnNwbGl0KCJfIik7ZnVuY3Rpb24gdyhSLGosUCxMKXt2YXIgWT1mdW5jdGlvbiBGKFIpe3ZhciBqPU1hdGguZmxvb3IoUiUx''@;'; put 'put ''ZTMvMTAwKSxQPU1hdGguZmxvb3IoUiUxMDAvMTApLEw9UiUxMCxZPSIiO3JldHVybiBqPjAmJihZKz1fW2pdKyJ2YXRsaCIpLFA+MCYmKFkrPSgiIiE9PVk/IiAiOiIiKStfW1BdKyJtYUgiKSxMPjAmJihZKz0oIiIhPT1ZPyIgIjoiIikrX1tMXSksIiI9PT1ZPyJwYWdoIjpZfShSKTtzd2l0''@;'; put 'put ''Y2goUCl7Y2FzZSJzcyI6cmV0dXJuIFkrIiBsdXAiO2Nhc2UibW0iOnJldHVybiBZKyIgdHVwIjtjYXNlImhoIjpyZXR1cm4gWSsiIHJlcCI7Y2FzZSJkZCI6cmV0dXJuIFkrIiBqYWoiO2Nhc2UiTU0iOnJldHVybiBZKyIgamFyIjtjYXNlInl5IjpyZXR1cm4gWSsiIERJUyJ9fUQuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJ0bGgiLHttb250aHM6InRlcmFcdTIwMTkgamFyIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIGNoYVx1MjAxOV90ZXJhXHUyMDE5IGphciB3ZWpfdGVyYVx1MjAxOSBqYXIgbG9TX3RlcmFcdTIwMTkgamFyIHZhZ2hfdGVyYVx1MjAxOSBqYXIgamF2X3RlcmFcdTIwMTkgamFyIFNv''@;'; put 'put ''Y2hfdGVyYVx1MjAxOSBqYXIgY2hvcmdoX3RlcmFcdTIwMTkgamFyIEh1dF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6ImphciB3YVx1MjAxOV9qYXIgY2hhXHUyMDE5X2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2FcdTIwMTltYUhfamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X2phciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVx''@;'; put 'put ''amFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0RhSGphal0gTFQiLG5leHREYXk6Ilt3YVx1MjAxOWxlU10gTFQiLG5leHRXZWVrOiJMTEwiLGxhc3REYXk6Ilt3YVx1MjAxOUh1''@;'; put 'put ''XHUyMDE5XSBMVCIsbGFzdFdlZWs6IkxMTCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBwKFIpe3ZhciBqPVI7cmV0dXJuLTEhPT1SLmluZGV4T2YoImphaiIpP2ouc2xpY2UoMCwtMykrImxlUyI6LTEhPT1SLmluZGV4T2YoImphciIpP2ouc2xpY2UoMCwt''@;'; put 'put ''MykrIndhUSI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP2ouc2xpY2UoMCwtMykrIm5lbSI6aisiIHBJcSJ9LHBhc3Q6ZnVuY3Rpb24gTihSKXt2YXIgaj1SO3JldHVybi0xIT09Ui5pbmRleE9mKCJqYWoiKT9qLnNsaWNlKDAsLTMpKyJIdVx1MjAxOSI6LTEhPT1SLmluZGV4T2YoImphciIpP2ou''@;'; put 'put ''c2xpY2UoMCwtMykrIndlbiI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP2ouc2xpY2UoMCwtMykrImJlbiI6aisiIHJldCJ9LHM6InB1UyBsdXAiLHNzOncsbToid2FcdTIwMTkgdHVwIixtbTp3LGg6IndhXHUyMDE5IHJlcCIsaGg6dyxkOiJ3YVx1MjAxOSBqYWoiLGRkOncsTToid2FcdTIwMTkg''@;'; put 'put ''amFyIixNTTp3LHk6IndhXHUyMDE5IERJUyIseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDYwMTUzOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgXz17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiInbmNcdTAxMzEiLDk6Iid1''@;'; put 'put ''bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O0QuZGVmaW5lTG9jYWxlKCJ0ciIse21vbnRoczoiT2Nha19cdTAxNWV1YmF0X01hcnRfTmlzYW5fTWF5XHUwMTMxc19IYXppcmFuX1RlbW11el9BXHUwMTFmdXN0b3Nf''@;'; put 'put ''RXlsXHhmY2xfRWtpbV9LYXNcdTAxMzFtX0FyYWxcdTAxMzFrIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJPY2FfXHUwMTVldWJfTWFyX05pc19NYXlfSGF6X1RlbV9BXHUwMTFmdV9FeWxfRWtpX0thc19BcmEiLnNwbGl0KCJfIiksd2Vla2RheXM6IlBhemFyX1BhemFydGVzaV9TYWxcdTAx''@;'; put 'put ''MzFfXHhjN2FyXHUwMTVmYW1iYV9QZXJcdTAxNWZlbWJlX0N1bWFfQ3VtYXJ0ZXNpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBhel9QenRfU2FsX1x4Yzdhcl9QZXJfQ3VtX0NtdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUHpfUHRfU2FfXHhjN2FfUGVfQ3VfQ3QiLnNwbGl0KCJf''@;'; put 'put ''IiksbWVyaWRpZW06ZnVuY3Rpb24oTix3LEYpe3JldHVybiBOPDEyP0Y/Ilx4ZjZceGY2IjoiXHhkNlx4ZDYiOkY/Ilx4ZjZzIjoiXHhkNlMifSxtZXJpZGllbVBhcnNlOi9ceGY2XHhmNnxceGQ2XHhkNnxceGY2c3xceGQ2Uy8saXNQTTpmdW5jdGlvbihOKXtyZXR1cm4iXHhmNnMiPT09Tnx8''@;'; put 'put ''Ilx4ZDZTIj09PU59LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1''@;'; put 'put ''Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbeWFyXHUwMTMxbiBzYWF0XSBMVCIsbmV4dFdlZWs6IltnZWxlY2VrXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHhmNm5jZSIsczoiYmlya2FceGU3IHNhbml5ZSIsc3M6IiVkIHNhbml5ZSIsbToiYmlyIGRha2lrYSIsbW06IiVkIGRha2lrYSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIix3''@;'; put 'put ''OiJiaXIgaGFmdGEiLHd3OiIlZCBoYWZ0YSIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5XHUwMTMxbCIseXk6IiVkIHlcdTAxMzFsIn0sb3JkaW5hbDpmdW5jdGlvbihOLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIE47ZGVmYXVs''@;'; put 'put ''dDppZigwPT09TilyZXR1cm4gTisiJ1x1MDEzMW5jXHUwMTMxIjt2YXIgRj1OJTEwO3JldHVybiBOKyhfW0ZdfHxfW04lMTAwLUZdfHxfW04+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sODg1MjE6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24o''@;'; put 'put ''RCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoTix3LEYsSCl7dmFyIFI9e3M6WyJ2aWVuc2FzIHNlY3VuZHMiLCInaWVuc2FzIHNlY3VuZHMiXSxzczpbTisiIHNlY3VuZHMiLE4rIiBzZWN1bmRzIl0sbTpbIiduIG1ceGVkdXQiLCInaWVucyBtXHhlZHV0Il0sbW06W04rIiBtXHhlZHV0cyIs''@;'; put 'put ''TisiIG1ceGVkdXRzIl0saDpbIiduIFx4ZmVvcmEiLCInaWVuc2EgXHhmZW9yYSJdLGhoOltOKyIgXHhmZW9yYXMiLE4rIiBceGZlb3JhcyJdLGQ6WyInbiB6aXVhIiwiJ2llbnNhIHppdWEiXSxkZDpbTisiIHppdWFzIixOKyIgeml1YXMiXSxNOlsiJ24gbWVzIiwiJ2llbnMgbWVzIl0sTU06''@;'; put 'put ''W04rIiBtZXNlbiIsTisiIG1lc2VuIl0seTpbIiduIGFyIiwiJ2llbnMgYXIiXSx5eTpbTisiIGFycyIsTisiIGFycyJdfTtyZXR1cm4gSHx8dz9SW0ZdWzBdOlJbRl1bMV19RC5kZWZpbmVMb2NhbGUoInR6bCIse21vbnRoczoiSmFudWFyX0ZldnJhZ2xoX01hclx4ZTdfQXZyXHhlZnVfTWFp''@;'; put 'put ''X0dceGZjbl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9wXHhlNHRzX05vZW12YXJfWmVjZW12YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0F2cl9NYWlfR1x4ZmNuX0p1bF9HdXNfU2V0X0xpc19Ob2VfWmVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTXHhmYWxh''@;'; put 'put ''ZGlfTFx4ZmFuZVx4ZTdpX01haXR6aV9NXHhlMXJjdXJpX1hoXHhmYWFkaV9WaVx4ZTluZXJceGU3aV9TXHhlMXR1cmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU1x4ZmFsX0xceGZhbl9NYWlfTVx4ZTFyX1hoXHhmYV9WaVx4ZTlfU1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJTXHhmYV9MXHhmYV9NYV9NXHhlMV9YaF9WaV9TXHhlMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIixMTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0ifSxtZXJpZGllbVBhcnNlOi9kXCdvfGRcJ2EvaSxpc1BNOmZ1bmN0aW9uKE4pe3JldHVybiJkJ28iPT09Ti50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihOLHcsRil7cmV0dXJuIE4+MTE/Rj8iZCdv''@;'; put 'put ''IjoiRCdPIjpGPyJkJ2EiOiJEJ0EifSxjYWxlbmRhcjp7c2FtZURheToiW294aGkgXHhlMF0gTFQiLG5leHREYXk6IltkZW1ceGUwIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltpZWlyaSBceGUwXSBMVCIsbGFzdFdlZWs6IltzXHhmY3IgZWxdIGRkZGQg''@;'; put 'put ''W2xhc3RldSBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3NwcmVpICVzIixwYXN0OiJqYSVzIixzOnAsc3M6cCxtOnAsbW06cCxoOnAsaGg6cCxkOnAsZGQ6cCxNOnAsTU06cCx5OnAseXk6cH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwu''@;'; put 'put ''LyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDIyMjM0OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgidHptLWxhdG4iLHttb250aHM6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAy''@;'; put 'put ''ZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0''@;'; put 'put ''X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExU''@;'; put 'put ''IixuZXh0RGF5OiJbYXNrYSBnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6Imlt''@;'; put 'put ''aWsiLHNzOiIlZCBpbWlrIixtOiJtaW51XHUxZTBkIixtbToiJWQgbWludVx1MWUwZCIsaDoic2FcdTAyNWJhIixoaDoiJWQgdGFzc2FcdTAyNWJpbiIsZDoiYXNzIixkZDoiJWQgb3NzYW4iLE06ImF5b3dyIixNTToiJWQgaXl5aXJuIix5OiJhc2dhcyIseXk6IiVkIGlzZ2FzbiJ9LHdlZWs6''@;'; put 'put ''e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSwxODAxMDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoInR6bSIse21vbnRoczoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1''@;'; put 'put ''MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYz''@;'; put 'put ''X1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJk''@;'; put 'put ''NTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1''@;'; put 'put ''MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMw''@;'; put 'put ''XHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMw''@;'; put 'put ''XHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1''@;'; put 'put ''MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlf''@;'; put 'put ''XHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQz''@;'; put 'put ''MFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTJkMzBcdTJkNTlc''@;'; put 'put ''dTJkMzdcdTJkNDUgXHUyZDM0XSBMVCIsbmV4dERheToiW1x1MmQzMFx1MmQ1OVx1MmQzZFx1MmQzMCBcdTJkMzRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUyZDM0XSBMVCIsbGFzdERheToiW1x1MmQzMFx1MmQ1YVx1MmQzMFx1MmQ0Zlx1MmQ1YyBcdTJkMzRdIExUIixsYXN0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUyZDM0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUyZDM3XHUyZDMwXHUyZDM3XHUyZDQ1IFx1MmQ1OSBcdTJkNjJcdTJkMzBcdTJkNGYgJXMiLHBhc3Q6Ilx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIsczoiXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixz''@;'; put 'put ''czoiJWQgXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixtOiJcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLG1tOiIlZCBcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLGg6Ilx1MmQ1OVx1MmQzMFx1MmQ0NFx1MmQzMCIsaGg6IiVkIFx1MmQ1Y1x1MmQzMFx1MmQ1OVx1MmQ1''@;'; put 'put ''OVx1MmQzMFx1MmQ0NFx1MmQ0OVx1MmQ0ZiIsZDoiXHUyZDMwXHUyZDU5XHUyZDU5IixkZDoiJWQgb1x1MmQ1OVx1MmQ1OVx1MmQzMFx1MmQ0ZiIsTToiXHUyZDMwXHUyZDYyb1x1MmQ1M1x1MmQ1NCIsTU06IiVkIFx1MmQ0OVx1MmQ2Mlx1MmQ2Mlx1MmQ0OVx1MmQ1NFx1MmQ0ZiIseToiXHUy''@;'; put 'put ''ZDMwXHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5Iix5eToiJWQgXHUyZDQ5XHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5XHUyZDRmIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShiKDk3NTg2KSl9LDYzMzQ5OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgidWctY24iLHttb250aHM6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2''@;'; put 'put ''NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUw''@;'; put 'put ''NjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJc''@;'; put 'put ''dTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2JcdTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMxXHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2MjdcdTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyNlx1MDY0''@;'; put 'put ''OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUwNjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2NDNcdTA2''@;'; put 'put ''MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjRhXHUwNmQ1XHUwNjQzXHUwNjM0XHUwNmQ1''@;'; put 'put ''XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyZlx1MDZjOFx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MzNcdTA2ZDVcdTA2NGFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjg2XHUwNjI3XHUwNjMxXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY3''@;'; put 'put ''ZVx1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MmNcdTA2YzhcdTA2NDVcdTA2ZDVfXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDY0YVx1MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1''@;'; put 'put ''X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUw''@;'; put 'put ''NmQ1Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZc''@;'; put 'put ''dTA2NDkiLExMTDoiWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIFlZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5''@;'; put 'put ''TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDV8XHUwNjMzXHUwNmQ1XHUw''@;'; put 'put ''NmJlXHUwNmQ1XHUwNjMxfFx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDZ8XHUwNjg2XHUwNmM4XHUwNjM0fFx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlc''@;'; put 'put ''dTA2NDZ8XHUwNjQzXHUwNmQ1XHUwNjg2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxOKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwiXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNSI9PT1OfHwiXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUw''@;'; put 'put ''NjMxIj09PU58fCJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2Ij09PU4/cDoiXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI9PT1OfHwiXHUw''@;'; put 'put ''NjQzXHUwNmQ1XHUwNjg2Ij09PU4/cCsxMjpwPj0xMT9wOnArMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXt2YXIgRj0xMDAqcCtOO3JldHVybiBGPDYwMD8iXHUwNjRhXHUwNmQwXHUwNjMxXHUwNjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNSI6Rjw5MDA/Ilx1MDYzM1x1''@;'; put 'put ''MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI6RjwxMTMwPyJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IjpGPDEyMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNCI6RjwxODAwPyJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2''@;'; put 'put ''NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2IjoiXHUwNjQzXHUwNmQ1XHUwNjg2In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjhcdTA2YzhcdTA2YWZcdTA2YzhcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDYy''@;'; put 'put ''Nlx1MDZkNVx1MDYyYVx1MDZkNSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0V2VlazoiW1x1MDY0M1x1MDZkMFx1MDY0NFx1MDZkNVx1MDYzMVx1MDY0M1x1MDY0OV0gZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbGFzdERheToiW1x1''@;'; put 'put ''MDYyYVx1MDZjNlx1MDY0Nlx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0Nl0gTFQiLGxhc3RXZWVrOiJbXHUwNjI2XHUwNjI3XHUwNjQ0XHUwNjJmXHUwNjQ5XHUwNjQ2XHUwNjQyXHUwNjQ5XSBkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJl''@;'; put 'put ''bGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiLHBhc3Q6IiVzIFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiIsczoiXHUwNjQ2XHUwNmQ1XHUwNjg2XHUwNjg2XHUwNmQ1IFx1MDYzM1x1MDZkMFx1MDY0M1x1MDY0OFx1MDY0Nlx1MDYy''@;'; put 'put ''YSIsc3M6IiVkIFx1MDYzM1x1MDZkMFx1MDY0M1x1MDY0OFx1MDY0Nlx1MDYyYSIsbToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0NVx1MDY0OVx1MDY0Nlx1MDZjN1x1MDYyYSIsbW06IiVkIFx1MDY0NVx1MDY0OVx1MDY0Nlx1MDZjN1x1MDYyYSIsaDoiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYSIsZDoiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0M1x1MDZjOFx1MDY0NiIsZGQ6IiVkIFx1MDY0M1x1MDZjOFx1MDY0NiIsTToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDYy''@;'; put 'put ''Nlx1MDYyN1x1MDY0YSIsTU06IiVkIFx1MDYyNlx1MDYyN1x1MDY0YSIseToiXHUwNjI4XHUwNjQ5XHUwNjMxIFx1MDY0YVx1MDY0OVx1MDY0NCIseXk6IiVkIFx1MDY0YVx1MDY0OVx1MDY0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oLVx1MDY0M1x1MDZjOFx1MDY0Nlx1''@;'; put 'put ''MDY0OXwtXHUwNjI2XHUwNjI3XHUwNjRhfC1cdTA2YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7c3dpdGNoKE4pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHArIi1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDkiO2Nhc2UidyI6Y2Fz''@;'; put 'put ''ZSJXIjpyZXR1cm4gcCsiLVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSI7ZGVmYXVsdDpyZXR1cm4gcH19LHByZXBhcnNlOmZ1bmN0aW9uKHApe3JldHVybiBwLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIHAucmVwbGFjZSgvLC9n''@;'; put 'put ''LCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNjg0Nzk6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoSCxSLGope3JldHVybiJtIj09PWo/Uj8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzIjoiaCI9PT1qP1I/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI6SCsiICIrZnVuY3Rpb24gXyhILFIpe3Zh''@;'; put 'put ''ciBqPUguc3BsaXQoIl8iKTtyZXR1cm4gUiUxMD09MSYmUiUxMDAhPTExP2pbMF06UiUxMD49MiYmUiUxMDw9NCYmKFIlMTAwPDEwfHxSJTEwMD49MjApP2pbMV06alsyXX0oe3NzOlI/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOlI/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkIjoiXHUwNDQ1XHUw''@;'; put 'put ''NDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiLGhoOlI/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0MzNc''@;'; put 'put ''dTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIjoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0''@;'; put 'put ''M2QiLGRkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzZFx1MDQ1Nlx1MDQzMiIsTU06Ilx1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0Y19cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZfXHUwNDNjXHUw''@;'; put 'put ''NDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2XHUwNDMyIix5eToiXHUwNDQwXHUwNDU2XHUwNDNhX1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzOF9cdTA0NDBcdTA0M2VcdTA0M2FcdTA0NTZcdTA0MzIifVtqXSwrSCl9ZnVuY3Rpb24gdyhIKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSCsi''@;'; put 'put ''XHUwNDNlIisoMTE9PT10aGlzLmhvdXJzKCk/Ilx1MDQzMSI6IiIpKyJdIExUIn19RC5kZWZpbmVMb2NhbGUoInVrIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N1x1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0M2VcdTA0MzNcdTA0M2VfXHUwNDMxXHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDM1XHUwNDM3XHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzZFx1MDQ0Zl9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQzZlx1MDQz''@;'; put 'put ''ZFx1MDQ0Zl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Mlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0''@;'; put 'put ''MzBcdTA0MzRcdTA0MzBfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzhcdTA0MzlfXHUwNDMxXHUwNDM1XHUwNDQwXHUw''@;'; put 'put ''NDM1XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1''@;'; put 'put ''MDQzOFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Mlx1MDQzNVx1MDQzZFx1MDQ0Y19c''@;'; put 'put ''dTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDU2XHUwNDQ3X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0MzFcdTA0''@;'; put 'put ''MzVcdTA0NDBfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDM4XHUwNDNmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDM2XHUwNDNlXHUwNDMy''@;'; put 'put ''XHUwNDQyX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Ml9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzQiLnNwbGl0KCJfIiksd2Vla2RheXM6ZnVuY3Rpb24gTihILFIpe3ZhciBqPXtub21pbmF0aXZlOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUw''@;'; put 'put ''NDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1''@;'; put 'put ''MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0Zl9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksYWNjdXNhdGl2ZToiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzZVx1MDQzZFx1''@;'; put 'put ''MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQzZVx1MDQzYV9cdTA0MzJcdTA0NTZcdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2Zc''@;'; put 'put ''dTIwMTlcdTA0NGZcdTA0NDJcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGVfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLGdlbml0aXZlOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NTZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUw''@;'; put 'put ''NDM0XHUwNDU2XHUwNDNiXHUwNDNhXHUwNDMwX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzYVx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzhfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzXHUwNDMwX1x1''@;'; put 'put ''MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ1Nl9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzgiLnNwbGl0KCJfIil9O3JldHVybiEwPT09SD9qLm5vbWluYXRpdmUuc2xpY2UoMSw3KS5jb25jYXQoai5ub21pbmF0aXZlLnNsaWNlKDAsMSkp''@;'; put 'put ''Okg/alsvKFxbW1x1MDQxMlx1MDQzMlx1MDQyM1x1MDQ0M11cXSkgP2RkZGQvLnRlc3QoUik/ImFjY3VzYXRpdmUiOi9cWz8oPzpcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0M2JcdTA0M2VcdTA0NTd8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDU3KT8gP1xdID9kZGRkLy50ZXN0KFIpPyJnZW5pdGl2ZSI6Im5vbWluYXRpdmUiXVtILmRheSgpXTpqLm5vbWluYXRpdmV9LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUw''@;'; put 'put ''NDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0NDAuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0NDAuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OncoIltcdTA0MjFc''@;'; put 'put ''dTA0NGNcdTA0M2VcdTA0MzNcdTA0M2VcdTA0MzRcdTA0M2RcdTA0NTYgIiksbmV4dERheTp3KCJbXHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwICIpLGxhc3REYXk6dygiW1x1MDQxMlx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCAiKSxuZXh0V2Vlazp3KCJbXHUwNDIzXSBk''@;'; put 'put ''ZGRkIFsiKSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIHcoIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0NDNcdTA0M2JcdTA0M2VcdTA0NTddIGRkZGQgWyIpLmNhbGwodGhpcyk7Y2FzZSAxOmNhc2UgMjpj''@;'; put 'put ''YXNlIDQ6cmV0dXJuIHcoIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0NDNcdTA0M2JcdTA0M2VcdTA0MzNcdTA0M2VdIGRkZGQgWyIpLmNhbGwodGhpcyl9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzdcdTA0MzAgJXMiLHBhc3Q6IiVzIFx1MDQ0Mlx1MDQzZVx1''@;'; put 'put ''MDQzY1x1MDQ0MyIsczoiXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDU2XHUwNDNiXHUwNDRjXHUwNDNhXHUwNDMwIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6cCxtOnAsbW06cCxoOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLGhoOnAsZDoi''@;'; put 'put ''XHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDpwLE06Ilx1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0YyIsTU06cCx5OiJcdTA0NDBcdTA0NTZcdTA0M2EiLHl5OnB9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NnxcdTA0NDBcdTA0MzBcdTA0M2Rc''@;'; put 'put ''dTA0M2FcdTA0NDN8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbihIKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwKSQvLnRlc3QoSCl9LG1l''@;'; put 'put ''cmlkaWVtOmZ1bmN0aW9uKEgsUixqKXtyZXR1cm4gSDw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTYiOkg8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0MyI6SDwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZSkvLG9yZGluYWw6ZnVuY3Rpb24oSCxSKXtzd2l0Y2goUil7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIEgrIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIEgr''@;'; put 'put ''Ii1cdTA0MzNcdTA0M2UiO2RlZmF1bHQ6cmV0dXJuIEh9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw0MzAyNDpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7dmFyIF89WyJcdTA2MmNcdTA2NDZcdTA2NDhcdTA2MzFcdTA2Y2MiLCJcdTA2NDFc''@;'; put 'put ''dTA2MzFcdTA2NDhcdTA2MzFcdTA2Y2MiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2ODYiLCJcdTA2MjdcdTA2N2VcdTA2MzFcdTA2Y2NcdTA2NDQiLCJcdTA2NDVcdTA2MjZcdTA2Y2MiLCJcdTA2MmNcdTA2NDhcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NDRcdTA2MjdcdTA2MjZcdTA2Y2Mi''@;'; put 'put ''LCJcdTA2MjdcdTA2YWZcdTA2MzNcdTA2MmEiLCJcdTA2MzNcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjdcdTA2YTlcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEi''@;'; put 'put ''XSxwPVsiXHUwNjI3XHUwNjJhXHUwNjQ4XHUwNjI3XHUwNjMxIiwiXHUwNjdlXHUwNmNjXHUwNjMxIiwiXHUwNjQ1XHUwNjQ2XHUwNmFmXHUwNjQ0IiwiXHUwNjI4XHUwNjJmXHUwNmJlIiwiXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNjJjXHUwNjQ1XHUwNjM5''@;'; put 'put ''XHUwNmMxIiwiXHUwNmMxXHUwNjQxXHUwNjJhXHUwNmMxIl07RC5kZWZpbmVMb2NhbGUoInVyIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5czpwLHdlZWtkYXlzU2hvcnQ6cCx3ZWVrZGF5c01pbjpwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNVx1MDYyOFx1MDYyZHxcdTA2MzRcdTA2MjdcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0''@;'; put 'put ''dXJuIlx1MDYzNFx1MDYyN1x1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LEYsSCl7cmV0dXJuIHc8MTI/Ilx1MDYzNVx1MDYyOFx1MDYyZCI6Ilx1MDYzNFx1MDYyN1x1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjIyXHUwNjJjIFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYy''@;'; put 'put ''YV0gTFQiLG5leHREYXk6IltcdTA2YTlcdTA2NDQgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzEgXHUwNjMxXHUwNjQ4XHUwNjMy''@;'; put 'put ''IFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxXSBkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2MjhcdTA2MzlcdTA2''@;'; put 'put ''MmYiLHBhc3Q6IiVzIFx1MDY0Mlx1MDYyOFx1MDY0NCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDZjY1x1MDZhOVx1MDY0Nlx1MDY4OCIsc3M6IiVkIFx1MDYzM1x1MDZjY1x1MDZhOVx1MDY0Nlx1MDY4OCIsbToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDY0Nlx1MDY3''@;'; put 'put ''OSIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3OSIsaDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDZhZlx1MDZiZVx1MDY0Nlx1MDY3OVx1MDZjMSIsaGg6IiVkIFx1MDZhZlx1MDZiZVx1MDY0Nlx1MDY3OVx1MDZkMiIsZDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0NiIsZGQ6IiVk''@;'; put 'put ''IFx1MDYyZlx1MDY0NiIsTToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDZjMSIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDZjMSIseToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzIzNzY6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24o''@;'; put 'put ''RCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJ1ei1sYXRuIix7bW9udGhzOiJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWWFuX0Zldl9NYXJfQXBy''@;'; put 'put ''X01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illha19EdXNoX1Nlc2hfQ2hvcl9Q''@;'; put 'put ''YXlfSnVtX1NoYW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IllhX0R1X1NlX0Nob19QYV9KdV9TaGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQnVndW4gc29hdF0gTFQgW2RhXSIsbmV4dERheToiW0VydGFnYV0gTFQgW2RhXSIsbmV4dFdlZWs6ImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsbGFzdERheToiW0tlY2hhIHNvYXRdIExU''@;'; put 'put ''IFtkYV0iLGxhc3RXZWVrOiJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IllhcWluICVzIGljaGlkYSIscGFzdDoiQmlyIG5lY2hhICVzIG9sZGluIixzOiJzb25peWEiLHNzOiIlZCBzb25peWEiLG06ImJpciBk''@;'; put 'put ''YXFpcWEiLG1tOiIlZCBkYXFpcWEiLGg6ImJpciBzb2F0IixoaDoiJWQgc29hdCIsZDoiYmlyIGt1biIsZGQ6IiVkIGt1biIsTToiYmlyIG95IixNTToiJWQgb3kiLHk6ImJpciB5aWwiLHl5OiIlZCB5aWwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSwxOTgwMDpmdW5jdGlv''@;'; put 'put ''bihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoInV6Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBc''@;'; put 'put ''dTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0''@;'; put 'put ''M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9c''@;'; put 'put ''dTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1''@;'; put 'put ''MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQyZlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDIxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUw''@;'; put 'put ''NDMxXHUwNDMwX1x1MDQyN1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MWZcdTA0MzBcdTA0MzlcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQyOFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MmZcdTA0M2FcdTA0NDhfXHUwNDE0XHUwNDQzXHUwNDQ4X1x1MDQyMVx1MDQzNVx1MDQ0OF9cdTA0MjdcdTA0M2VcdTA0NDBfXHUwNDFmXHUwNDMwXHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MjhcdTA0MzBcdTA0M2QiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MDQyZlx1MDQzYV9cdTA0MTRcdTA0NDNfXHUwNDIxXHUwNDM1X1x1MDQyN1x1MDQzZV9cdTA0MWZcdTA0MzBfXHUwNDE2XHUwNDQzX1x1MDQyOFx1MDQzMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0NDNcdTA0MzNcdTA0NDNcdTA0M2QgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBM''@;'; put 'put ''VCBbXHUwNDM0XHUwNDMwXSIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF0gTFQgW1x1MDQzNFx1MDQzMF0iLG5leHRXZWVrOiJkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUw''@;'; put 'put ''NDMwXSIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0V2VlazoiW1x1MDQyM1x1MDQ0Mlx1MDQzM1x1MDQzMFx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM4IFx1MDQ0''@;'; put 'put ''MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQyZlx1MDQzYVx1MDQzOFx1MDQzZCAlcyBcdTA0MzhcdTA0NDdcdTA0MzhcdTA0MzRcdTA0MzAiLHBhc3Q6Ilx1MDQxMVx1MDQzOFx1MDQ0MCBcdTA0''@;'; put 'put ''M2RcdTA0MzVcdTA0NDdcdTA0MzAgJXMgXHUwNDNlXHUwNDNiXHUwNDM0XHUwNDM4XHUwNDNkIixzOiJcdTA0NDRcdTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDIiLHNzOiIlZCBcdTA0NDRcdTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDIiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBc''@;'; put 'put ''dTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLGg6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6''@;'; put 'put ''Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2VcdTA0MzkiLE1NOiIlZCBcdTA0M2VcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzlcdTA0MzhcdTA0M2Ii''@;'; put 'put ''LHl5OiIlZCBcdTA0MzlcdTA0MzhcdTA0M2IifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw4OTM2NjpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoInZpIix7bW9udGhzOiJ0aFx4ZTFuZyAxX3RoXHhlMW5nIDJfdGhc''@;'; put 'put ''eGUxbmcgM190aFx4ZTFuZyA0X3RoXHhlMW5nIDVfdGhceGUxbmcgNl90aFx4ZTFuZyA3X3RoXHhlMW5nIDhfdGhceGUxbmcgOV90aFx4ZTFuZyAxMF90aFx4ZTFuZyAxMV90aFx4ZTFuZyAxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1Ro''@;'; put 'put ''ZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiY2hcdTFlZTcgbmhcdTFlYWR0X3RoXHUxZWU5IGhhaV90aFx1MWVlOSBiYV90aFx1MWVlOSB0XHUwMWIwX3RoXHUxZWU5''@;'; put 'put ''IG5cdTAxMDNtX3RoXHUxZWU5IHNceGUxdV90aFx1MWVlOSBiXHUxZWEzeSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLG1lcmlkaWVtUGFyc2U6L3NhfGNoL2ksaXNQTTpmdW5jdGlvbihwKXtyZXR1cm4vXmNoJC9pLnRlc3QocCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gcDwxMj93PyJzYSI6IlNBIjp3PyJjaCI6IkNIIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkiLExMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSBISDptbSIsbDoiREQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJE''@;'; put 'put ''IE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hceGY0bSBuYXkgbFx4ZmFjXSBMVCIsbmV4dERheToiW05nXHhlMHkgbWFpIGxceGZhY10gTFQiLG5leHRXZWVrOiJkZGRkIFt0dVx1MWVhN24gdFx1MWVkYmkgbFx4ZmFj''@;'; put 'put ''XSBMVCIsbGFzdERheToiW0hceGY0bSBxdWEgbFx4ZmFjXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0clx1MDFiMFx1MWVkYmMgbFx4ZmFjXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgdFx1MWVkYmkiLHBhc3Q6IiVzIHRyXHUwMWIwXHUxZWRi''@;'; put 'put ''YyIsczoidlx4ZTBpIGdpXHhlMnkiLHNzOiIlZCBnaVx4ZTJ5IixtOiJtXHUxZWQ5dCBwaFx4ZmF0IixtbToiJWQgcGhceGZhdCIsaDoibVx1MWVkOXQgZ2lcdTFlZGQiLGhoOiIlZCBnaVx1MWVkZCIsZDoibVx1MWVkOXQgbmdceGUweSIsZGQ6IiVkIG5nXHhlMHkiLHc6Im1cdTFlZDl0IHR1''@;'; put 'put ''XHUxZWE3biIsd3c6IiVkIHR1XHUxZWE3biIsTToibVx1MWVkOXQgdGhceGUxbmciLE1NOiIlZCB0aFx4ZTFuZyIseToibVx1MWVkOXQgblx1MDEwM20iLHl5OiIlZCBuXHUwMTAzbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHB9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY5NzAyOmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtELmRlZmluZUxvY2FsZSgieC1wc2V1ZG8iLHttb250aHM6Ikp+XHhlMVx4ZjFceGZhXHhlMX5yXHhmZF9Gflx4ZTliclx4ZmF+XHhlMXJc''@;'; put 'put ''eGZkX35NXHhlMXJjfmhfXHhjMXB+clx4ZWRsX35NXHhlMVx4ZmRffkpceGZhXHhmMVx4ZTl+X0pceGZhbH5ceGZkX1x4YzFceGZhfmdceGZhc3R+X1NceGU5cH50XHhlOW1iflx4ZTlyX1x4ZDN+Y3RceGYzYn5ceGU5cl9ceGQxflx4ZjN2XHhlOW1+Ylx4ZTlyX35EXHhlOWNceGU5fm1iXHhl''@;'; put 'put ''OXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikp+XHhlMVx4ZjFffkZceGU5Yl9+TVx4ZTFyX35ceGMxcHJffk1ceGUxXHhmZF9+Slx4ZmFceGYxX35KXHhmYWxfflx4YzFceGZhZ19+U1x4ZTlwX35ceGQzY3Rfflx4ZDFceGYzdl9+RFx4ZTljIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsd2Vla2RheXM6IlN+XHhmYVx4ZjFkXHhlMX5ceGZkX01ceGYzflx4ZjFkXHhlMVx4ZmR+X1RceGZhXHhlOX5zZFx4ZTFceGZkfl9XXHhlOWR+XHhmMVx4ZTlzZH5ceGUxXHhmZF9UfmhceGZhcnN+ZFx4ZTFceGZkX35Gclx4ZWRkflx4ZTFceGZkX1N+XHhlMXRceGZhcn5kXHhlMVx4''@;'; put 'put ''ZmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU35ceGZhXHhmMV9+TVx4ZjNceGYxX35UXHhmYVx4ZTlffldceGU5ZF9+VGhceGZhX35Gclx4ZWRfflNceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU35ceGZhX01ceGYzfl9UXHhmYV9+V1x4ZTlfVH5oX0Zyfl9TXHhlMSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb''@;'; put 'put ''VH5ceGYzZFx4ZTF+XHhmZCBceGUxdF0gTFQiLG5leHREYXk6IltUflx4ZjNtXHhmM35yclx4ZjN+dyBceGUxdF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUxdF0gTFQiLGxhc3REYXk6IltceGRkflx4ZTlzdH5ceGU5cmRceGUxflx4ZmQgXHhlMXRdIExUIixsYXN0V2VlazoiW0x+XHhlMXN0''@;'; put 'put ''XSBkZGRkIFtceGUxdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx4ZWR+XHhmMSAlcyIscGFzdDoiJXMgXHhlMX5nXHhmMyIsczoiXHhlMSB+Zlx4ZTl3IH5zXHhlOWNceGYzflx4ZjFkcyIsc3M6IiVkIHN+XHhlOWNceGYzXHhmMX5kcyIsbToiXHhlMSB+bVx4''@;'; put 'put ''ZWRceGYxflx4ZmF0XHhlOSIsbW06IiVkIG1+XHhlZFx4ZjFceGZhfnRceGU5cyIsaDoiXHhlMX5ceGYxIGhceGYzflx4ZmFyIixoaDoiJWQgaH5ceGYzXHhmYXJzIixkOiJceGUxIH5kXHhlMVx4ZmQiLGRkOiIlZCBkflx4ZTFceGZkcyIsTToiXHhlMSB+bVx4ZjNceGYxfnRoIixNTToiJWQg''@;'; put 'put ''bX5ceGYzXHhmMXR+aHMiLHk6Ilx4ZTEgflx4ZmRceGU5XHhlMXIiLHl5OiIlZCBceGZkflx4ZTlceGUxcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgTj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8x''@;'; put 'put ''MCk/InRoIjoxPT09Tj8ic3QiOjI9PT1OPyJuZCI6Mz09PU4/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzI2NTU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJ5byIse21vbnRoczoiU1x1MWVi''@;'; put 'put ''OVx1MDMwMXJcdTFlYjlcdTAzMDFfRVx1MDMwMHJlXHUwMzAwbGVcdTAzMDBfXHUxZWI4clx1MWViOVx1MDMwMG5hXHUwMzAwX0lcdTAzMDBnYmVcdTAzMDFfRVx1MDMwMGJpYmlfT1x1MDMwMGt1XHUwMzAwZHVfQWdcdTFlYjltb19PXHUwMzAwZ3VcdTAzMDFuX093ZXdlX1x1MWVjY1x1MDMw''@;'; put 'put ''MHdhXHUwMzAwcmFcdTAzMDBfQmVcdTAzMDFsdVx1MDMwMV9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJTXHUxZWI5XHUwMzAxcl9FXHUwMzAwcmxfXHUxZWI4cm5fSVx1MDMwMGdiX0VcdTAzMDBiaV9PXHUwMzAwa3VcdTAzMDBfQWdc''@;'; put 'put ''dTFlYjlfT1x1MDMwMGd1XHUwMzAxX093ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMF9CZVx1MDMwMWxfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQVx1MDMwMGlcdTAzMDBrdVx1MDMwMV9BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFn''@;'; put 'put ''dW5fXHUxZWNjalx1MWVjZFx1MDMwMXJ1XHUwMzAxX1x1MWVjY2pcdTFlY2RcdTAzMDFiXHUxZWNkX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMW1cdTFlYjlcdTAzMDF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBXHUwMzAwaVx1MDMwMGtfQWplXHUwMzAxX0lcdTAzMDBz''@;'; put 'put ''XHUxZWI5XHUwMzAxX1x1MWVjY2pyX1x1MWVjY2piX1x1MWViOHRpXHUwMzAwX0FcdTAzMDBiYVx1MDMwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQVx1MDMwMGlcdTAzMDBfQWpfSVx1MDMwMHNfXHUxZWNjcl9cdTFlY2NiX1x1MWViOHRfQVx1MDMwMGIiLnNwbGl0KCJfIiksbG9uZ0Rh''@;'; put 'put ''dGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW09cdTAzMDBuaVx1MDMwMCBu''@;'; put 'put ''aV0gTFQiLG5leHREYXk6IltcdTFlY2NcdTAzMDBsYSBuaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbidiXHUxZWNkXSBbbmldIExUIixsYXN0RGF5OiJbQVx1MDMwMG5hIG5pXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAz''@;'; put 'put ''MDAgdG9cdTAzMDFsXHUxZWNkXHUwMzAxXSBbbmldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuaVx1MDMwMSAlcyIscGFzdDoiJXMga1x1MWVjZGphXHUwMzAxIixzOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGFheWFcdTAzMDEgZGllIixzczoiYWF5YVx1MDMw''@;'; put 'put ''MSAlZCIsbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBrYW4iLG1tOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxICVkIixoOiJ3YVx1MDMwMWthdGkga2FuIixoaDoid2FcdTAzMDFrYXRpICVkIixkOiJcdTFlY2RqXHUxZWNkXHUwMzAxIGthbiIsZGQ6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQi''@;'; put 'put ''LE06Im9zdVx1MDMwMCBrYW4iLE1NOiJvc3VcdTAzMDAgJWQiLHk6Ilx1MWVjZGR1XHUwMzAxbiBrYW4iLHl5OiJcdTFlY2RkdVx1MDMwMW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTFlY2RqXHUxZWNkXHUwMzAxXHNcZHsxLDJ9LyxvcmRpbmFsOiJcdTFlY2RqXHUxZWNkXHUw''@;'; put 'put ''MzAxICVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1NzU6ZnVuY3Rpb24oY2UsSixiKXshZnVuY3Rpb24oRCl7InVzZSBzdHJpY3QiO0QuZGVmaW5lTG9jYWxlKCJ6aC1jbiIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRi''@;'; put 'put ''XHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8z''@;'; put 'put ''XHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2''@;'; put 'put ''MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU1NDY4XHU2NWU1X1x1NTQ2OFx1NGUwMF9cdTU0NjhcdTRlOGNfXHU1NDY4XHU0ZTA5X1x1NTQ2OFx1NTZkYl9c''@;'; put 'put ''dTU0NjhcdTRlOTRfXHU1NDY4XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9E''@;'; put 'put ''RCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVBaFx1NzBiOW1tXHU1MjA2IixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkQWhcdTcwYjltbVx1NTIwNiIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1Njcw''@;'; put 'put ''OERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1''@;'; put 'put ''NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLE4pe3JldHVybiAxMj09PXAmJihwPTApLCJcdTUxY2NcdTY2NjgiPT09Tnx8Ilx1NjVlOVx1NGUwYSI9PT1OfHwiXHU0ZTBhXHU1MzQ4Ij09PU4/cDoiXHU0ZTBiXHU1MzQ4Ij09PU58fCJcdTY2NWFcdTRlMGEiPT09''@;'; put 'put ''Tj9wKzEyOnA+PTExP3A6cCsxMn0sbWVyaWRpZW06ZnVuY3Rpb24ocCxOLHcpe3ZhciBGPTEwMCpwK047cmV0dXJuIEY8NjAwPyJcdTUxY2NcdTY2NjgiOkY8OTAwPyJcdTY1ZTlcdTRlMGEiOkY8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpGPDEyMzA/Ilx1NGUyZFx1NTM0OCI6RjwxODAwPyJcdTRl''@;'; put 'put ''MGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6ZnVuY3Rpb24ocCl7cmV0dXJuIHAud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTRlMGJdZGRkTFQiOiJbXHU2NzJj''@;'; put 'put ''XWRkZExUIn0sbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud2VlaygpIT09cC53ZWVrKCk/IltcdTRlMGFdZGRkTFQiOiJbXHU2NzJjXWRkZExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''KFx1NjVlNXxcdTY3MDh8XHU1NDY4KS8sb3JkaW5hbDpmdW5jdGlvbihwLE4pe3N3aXRjaChOKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIHArIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKyJcdTU0NjgiO2RlZmF1''@;'; put 'put ''bHQ6cmV0dXJuIHB9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTU0MGUiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTUxZTBcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDlmIixtbToiJWQgXHU1MjA2XHU5NDlmIixoOiIxIFx1NWMwZlx1NjVmNiIsaGg6IiVkIFx1NWMw''@;'; put 'put ''Zlx1NjVmNiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLHc6IjEgXHU1NDY4Iix3dzoiJWQgXHU1NDY4IixNOiIxIFx1NGUyYVx1NjcwOCIsTU06IiVkIFx1NGUyYVx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4Nikp''@;'; put 'put ''fSwxODM1MTpmdW5jdGlvbihjZSxKLGIpeyFmdW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoInpoLWhrIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRl''@;'; put 'put ''MDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1Njcw''@;'; put 'put ''OF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2''@;'; put 'put ''NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6''@;'; put 'put ''IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZ''@;'; put 'put ''XHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLE4pe3JldHVybiAxMj09''@;'; put 'put ''PXAmJihwPTApLCJcdTUxY2NcdTY2NjgiPT09Tnx8Ilx1NjVlOVx1NGUwYSI9PT1OfHwiXHU0ZTBhXHU1MzQ4Ij09PU4/cDoiXHU0ZTJkXHU1MzQ4Ij09PU4/cD49MTE/cDpwKzEyOiJcdTRlMGJcdTUzNDgiPT09Tnx8Ilx1NjY1YVx1NGUwYSI9PT1OP3ArMTI6dm9pZCAwfSxtZXJpZGllbTpm''@;'; put 'put ''dW5jdGlvbihwLE4sdyl7dmFyIEY9MTAwKnArTjtyZXR1cm4gRjw2MDA/Ilx1NTFjY1x1NjY2OCI6Rjw5MDA/Ilx1NjVlOVx1NGUwYSI6RjwxMjAwPyJcdTRlMGFcdTUzNDgiOjEyMDA9PT1GPyJcdTRlMmRcdTUzNDgiOkY8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGRMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7c3dpdGNoKE4pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHArIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gcCsiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0''@;'; put 'put ''dXJuIHArIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gcH19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBm''@;'; put 'put ''XHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oYig5NzU4NikpfSw1MTYyNjpmdW5jdGlvbihjZSxKLGIpeyFm''@;'; put 'put ''dW5jdGlvbihEKXsidXNlIHN0cmljdCI7RC5kZWZpbmVMb2NhbGUoInpoLW1vIix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1''@;'; put 'put ''ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhf''@;'; put 'put ''MTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1Njcx''@;'; put 'put ''Zlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBf''@;'; put 'put ''XHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBI''@;'; put 'put ''SDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiRC9NL1lZWVkiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhI''@;'; put 'put ''Om1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLE4pe3JldHVybiAxMj09PXAmJihwPTApLCJcdTUxY2NcdTY2NjgiPT09''@;'; put 'put ''Tnx8Ilx1NjVlOVx1NGUwYSI9PT1OfHwiXHU0ZTBhXHU1MzQ4Ij09PU4/cDoiXHU0ZTJkXHU1MzQ4Ij09PU4/cD49MTE/cDpwKzEyOiJcdTRlMGJcdTUzNDgiPT09Tnx8Ilx1NjY1YVx1NGUwYSI9PT1OP3ArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihwLE4sdyl7dmFyIEY9MTAwKnAr''@;'; put 'put ''TjtyZXR1cm4gRjw2MDA/Ilx1NTFjY1x1NjY2OCI6Rjw5MDA/Ilx1NjVlOVx1NGUwYSI6RjwxMTMwPyJcdTRlMGFcdTUzNDgiOkY8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpGPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5leHRXZWVrOiJbXHU0ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2''@;'; put 'put ''NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsTil7c3dpdGNoKE4pe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIHArIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gcCsiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIHArIlx1OTAzMSI7ZGVmYXVsdDpy''@;'; put 'put ''ZXR1cm4gcH19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTE2NyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2''@;'; put 'put ''NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oYig5NzU4NikpfSw4ODg3OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtE''@;'; put 'put ''LmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUz''@;'; put 'put ''NDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRl''@;'; put 'put ''OTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1''@;'; put 'put ''NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUx''@;'; put 'put ''Y2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsTil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1OfHwiXHU2NWU5XHU0ZTBhIj09PU58fCJc''@;'; put 'put ''dTRlMGFcdTUzNDgiPT09Tj9wOiJcdTRlMmRcdTUzNDgiPT09Tj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1OfHwiXHU2NjVhXHU0ZTBhIj09PU4/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsTix3KXt2YXIgRj0xMDAqcCtOO3JldHVybiBGPDYwMD8iXHU1MWNjXHU2''@;'; put 'put ''NjY4IjpGPDkwMD8iXHU2NWU5XHU0ZTBhIjpGPDExMzA/Ilx1NGUwYVx1NTM0OCI6RjwxMjMwPyJcdTRlMmRcdTUzNDgiOkY8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1''@;'; put 'put ''OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGlu''@;'; put 'put ''YWw6ZnVuY3Rpb24ocCxOKXtzd2l0Y2goTil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQg''@;'; put 'put ''XHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3NTg2KSl9LDk3NTg2OmZ1bmN0aW9uKGNlLEosYil7KGNlPWIubm1kKGNlKSkuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''RCxxO2Z1bmN0aW9uIF8oKXtyZXR1cm4gRC5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTihDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgQXJyYXl8fCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIHcoQ2Upe3JldHVy''@;'; put 'put ''biBudWxsIT1DZSYmIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIEYoQ2UsS2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ2UsS2UpfWZ1bmN0aW9uIEgoQ2Upe2lmKE9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eU5hbWVzKXJldHVybiAwPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQ2UpLmxlbmd0aDt2YXIgS2U7Zm9yKEtlIGluIENlKWlmKEYoQ2UsS2UpKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoQ2Upe3JldHVybiB2b2lkIDA9PT1DZX1mdW5jdGlvbiBqKENlKXty''@;'; put 'put ''ZXR1cm4ibnVtYmVyIj09dHlwZW9mIENlfHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gUChDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''Zy5jYWxsKENlKX1mdW5jdGlvbiBMKENlLEtlKXt2YXIgSXQsbXQ9W10sZG49Q2UubGVuZ3RoO2ZvcihJdD0wO0l0PGRuOysrSXQpbXQucHVzaChLZShDZVtJdF0sSXQpKTtyZXR1cm4gbXR9ZnVuY3Rpb24gWShDZSxLZSl7Zm9yKHZhciBtdCBpbiBLZSlGKEtlLG10KSYmKENlW210XT1LZVtt''@;'; put 'put ''dF0pO3JldHVybiBGKEtlLCJ0b1N0cmluZyIpJiYoQ2UudG9TdHJpbmc9S2UudG9TdHJpbmcpLEYoS2UsInZhbHVlT2YiKSYmKENlLnZhbHVlT2Y9S2UudmFsdWVPZiksQ2V9ZnVuY3Rpb24gQihDZSxLZSxtdCxJdCl7cmV0dXJuIGN2KENlLEtlLG10LEl0LCEwKS51dGMoKX1mdW5jdGlvbiBa''@;'; put 'put ''KENlKXtyZXR1cm4gbnVsbD09Q2UuX3BmJiYoQ2UuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkRXJhOm51bGwsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDoh''@;'; put 'put ''MSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxlcmE6bnVsbCxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksQ2UuX3BmfWZ1bmN0aW9uIFEoQ2Upe3ZhciBLZT1udWxsLG10PSExLEl0PUNlLl9kJiYhaXNOYU4oQ2UuX2Qu''@;'; put 'put ''Z2V0VGltZSgpKTtyZXR1cm4gSXQmJihLZT1aKENlKSxtdD1xLmNhbGwoS2UucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKGRuKXtyZXR1cm4gbnVsbCE9ZG59KSxJdD1LZS5vdmVyZmxvdzwwJiYhS2UuZW1wdHkmJiFLZS5pbnZhbGlkRXJhJiYhS2UuaW52YWxpZE1vbnRoJiYhS2UuaW52YWxp''@;'; put 'put ''ZFdlZWtkYXkmJiFLZS53ZWVrZGF5TWlzbWF0Y2gmJiFLZS5udWxsSW5wdXQmJiFLZS5pbnZhbGlkRm9ybWF0JiYhS2UudXNlckludmFsaWRhdGVkJiYoIUtlLm1lcmlkaWVtfHxLZS5tZXJpZGllbSYmbXQpLENlLl9zdHJpY3QmJihJdD1JdCYmMD09PUtlLmNoYXJzTGVmdE92ZXImJjA9PT1L''@;'; put 'put ''ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1LZS5iaWdIb3VyKSksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oQ2UpP0l0OihDZS5faXNWYWxpZD1JdCxDZS5faXNWYWxpZCl9ZnVuY3Rpb24gWChDZSl7dmFyIEtlPUIoTmFOKTtyZXR1cm4gbnVsbCE9Q2U/''@;'; put 'put ''WShaKEtlKSxDZSk6WihLZSkudXNlckludmFsaWRhdGVkPSEwLEtlfXE9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24oQ2Upe3ZhciBJdCxLZT1PYmplY3QodGhpcyksbXQ9S2UubGVuZ3RoPj4+MDtmb3IoSXQ9MDtJdDxtdDtJdCsrKWlmKEl0IGlu''@;'; put 'put ''IEtlJiZDZS5jYWxsKHRoaXMsS2VbSXRdLEl0LEtlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHRlPV8ubW9tZW50UHJvcGVydGllcz1bXSxyZT0hMTtmdW5jdGlvbiBvZShDZSxLZSl7dmFyIG10LEl0LGRuLHFuPXRlLmxlbmd0aDtpZihSKEtlLl9pc0FNb21lbnRPYmplY3QpfHwoQ2UuX2lz''@;'; put 'put ''QU1vbWVudE9iamVjdD1LZS5faXNBTW9tZW50T2JqZWN0KSxSKEtlLl9pKXx8KENlLl9pPUtlLl9pKSxSKEtlLl9mKXx8KENlLl9mPUtlLl9mKSxSKEtlLl9sKXx8KENlLl9sPUtlLl9sKSxSKEtlLl9zdHJpY3QpfHwoQ2UuX3N0cmljdD1LZS5fc3RyaWN0KSxSKEtlLl90em0pfHwoQ2UuX3R6''@;'; put 'put ''bT1LZS5fdHptKSxSKEtlLl9pc1VUQyl8fChDZS5faXNVVEM9S2UuX2lzVVRDKSxSKEtlLl9vZmZzZXQpfHwoQ2UuX29mZnNldD1LZS5fb2Zmc2V0KSxSKEtlLl9wZil8fChDZS5fcGY9WihLZSkpLFIoS2UuX2xvY2FsZSl8fChDZS5fbG9jYWxlPUtlLl9sb2NhbGUpLHFuPjApZm9yKG10PTA7''@;'; put 'put ''bXQ8cW47bXQrKylSKGRuPUtlW0l0PXRlW210XV0pfHwoQ2VbSXRdPWRuKTtyZXR1cm4gQ2V9ZnVuY3Rpb24gZ2UoQ2Upe29lKHRoaXMsQ2UpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9Q2UuX2Q/Q2UuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRl''@;'; put 'put ''KE5hTikpLCExPT09cmUmJihyZT0hMCxfLnVwZGF0ZU9mZnNldCh0aGlzKSxyZT0hMSl9ZnVuY3Rpb24gX2UoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIGdlfHxudWxsIT1DZSYmbnVsbCE9Q2UuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiBUZShDZSl7ITE9PT1fLnN1cHByZXNzRGVwcmVj''@;'; put 'put ''YXRpb25XYXJuaW5ncyYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIitDZSl9ZnVuY3Rpb24gU2UoQ2UsS2Upe3ZhciBtdD0hMDtyZXR1cm4gWShmdW5jdGlvbigpe2lmKG51bGwhPV8uZGVwcmVjYXRpb25IYW5k''@;'; put 'put ''bGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLENlKSxtdCl7dmFyIGRuLHFuLGlpLEl0PVtdLElhPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHFuPTA7cW48SWE7cW4rKyl7aWYoZG49IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbcW5dKXtmb3IoaWkgaW4gZG4rPSJcblsiK3FuKyJd''@;'; put 'put ''ICIsYXJndW1lbnRzWzBdKUYoYXJndW1lbnRzWzBdLGlpKSYmKGRuKz1paSsiOiAiK2FyZ3VtZW50c1swXVtpaV0rIiwgIik7ZG49ZG4uc2xpY2UoMCwtMil9ZWxzZSBkbj1hcmd1bWVudHNbcW5dO0l0LnB1c2goZG4pfVRlKENlKyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xp''@;'; put 'put ''Y2UuY2FsbChJdCkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksbXQ9ITF9cmV0dXJuIEtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sS2UpfXZhciBULHplPXt9O2Z1bmN0aW9uIHooQ2UsS2Upe251bGwhPV8uZGVwcmVjYXRpb25IYW5kbGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxl''@;'; put 'put ''cihDZSxLZSksemVbQ2VdfHwoVGUoS2UpLHplW0NlXT0hMCl9ZnVuY3Rpb24gZyhDZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJkNlIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0''@;'; put 'put ''aW9uIHgoQ2UsS2Upe3ZhciBJdCxtdD1ZKHt9LENlKTtmb3IoSXQgaW4gS2UpRihLZSxJdCkmJih3KENlW0l0XSkmJncoS2VbSXRdKT8obXRbSXRdPXt9LFkobXRbSXRdLENlW0l0XSksWShtdFtJdF0sS2VbSXRdKSk6bnVsbCE9S2VbSXRdP210W0l0XT1LZVtJdF06ZGVsZXRlIG10W0l0XSk7''@;'; put 'put ''Zm9yKEl0IGluIENlKUYoQ2UsSXQpJiYhRihLZSxJdCkmJncoQ2VbSXRdKSYmKG10W0l0XT1ZKHt9LG10W0l0XSkpO3JldHVybiBtdH1mdW5jdGlvbiBDKENlKXtudWxsIT1DZSYmdGhpcy5zZXQoQ2UpfV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLF8uZGVwcmVjYXRpb25IYW5k''@;'; put 'put ''bGVyPW51bGwsVD1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbihDZSl7dmFyIEtlLG10PVtdO2ZvcihLZSBpbiBDZSlGKENlLEtlKSYmbXQucHVzaChLZSk7cmV0dXJuIG10fTtmdW5jdGlvbiBFKENlLEtlLG10KXt2YXIgSXQ9IiIrTWF0aC5hYnMoQ2UpO3JldHVybihDZT49MD9t''@;'; put 'put ''dD8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLEtlLUl0Lmxlbmd0aCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK0l0fXZhciBtPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xX''@;'; put 'put ''XT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLEE9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2cs''@;'; put 'put ''YWU9e30sbmU9e307ZnVuY3Rpb24gbGUoQ2UsS2UsbXQsSXQpe3ZhciBkbj1JdDsic3RyaW5nIj09dHlwZW9mIEl0JiYoZG49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tJdF0oKX0pLENlJiYobmVbQ2VdPWRuKSxLZSYmKG5lW0tlWzBdXT1mdW5jdGlvbigpe3JldHVybiBFKGRuLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKSxLZVsxXSxLZVsyXSl9KSxtdCYmKG5lW210XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGRuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxDZSl9KX1mdW5jdGlvbiB3ZShDZSl7cmV0dXJuIENlLm1hdGNoKC9cW1tcc1xTXS8pP0NlLnJl''@;'; put 'put ''cGxhY2UoL15cW3xcXSQvZywiIik6Q2UucmVwbGFjZSgvXFwvZywiIil9ZnVuY3Rpb24gUWUoQ2UsS2Upe3JldHVybiBDZS5pc1ZhbGlkKCk/KEtlPW90KEtlLENlLmxvY2FsZURhdGEoKSksYWVbS2VdPWFlW0tlXXx8ZnVuY3Rpb24gVWUoQ2Upe3ZhciBtdCxJdCxLZT1DZS5tYXRjaChtKTtm''@;'; put 'put ''b3IobXQ9MCxJdD1LZS5sZW5ndGg7bXQ8SXQ7bXQrKylLZVttdF09bmVbS2VbbXRdXT9uZVtLZVttdF1dOndlKEtlW210XSk7cmV0dXJuIGZ1bmN0aW9uKGRuKXt2YXIgaWkscW49IiI7Zm9yKGlpPTA7aWk8SXQ7aWkrKylxbis9ZyhLZVtpaV0pP0tlW2lpXS5jYWxsKGRuLENlKTpLZVtpaV07''@;'; put 'put ''cmV0dXJuIHFufX0oS2UpLGFlW0tlXShDZSkpOkNlLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIG90KENlLEtlKXt2YXIgbXQ9NTtmdW5jdGlvbiBJdChkbil7cmV0dXJuIEtlLmxvbmdEYXRlRm9ybWF0KGRuKXx8ZG59Zm9yKEEubGFzdEluZGV4PTA7bXQ+PTAmJkEudGVz''@;'; put 'put ''dChDZSk7KUNlPUNlLnJlcGxhY2UoQSxJdCksQS5sYXN0SW5kZXg9MCxtdC09MTtyZXR1cm4gQ2V9dmFyIGtlPXtEOiJkYXRlIixkYXRlczoiZGF0ZSIsZGF0ZToiZGF0ZSIsZDoiZGF5IixkYXlzOiJkYXkiLGRheToiZGF5IixlOiJ3ZWVrZGF5Iix3ZWVrZGF5czoid2Vla2RheSIsd2Vla2Rh''@;'; put 'put ''eToid2Vla2RheSIsRToiaXNvV2Vla2RheSIsaXNvd2Vla2RheXM6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXk6Imlzb1dlZWtkYXkiLERERDoiZGF5T2ZZZWFyIixkYXlvZnllYXJzOiJkYXlPZlllYXIiLGRheW9meWVhcjoiZGF5T2ZZZWFyIixoOiJob3VyIixob3VyczoiaG91ciIsaG91cjoi''@;'; put 'put ''aG91ciIsbXM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZHM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZDoibWlsbGlzZWNvbmQiLG06Im1pbnV0ZSIsbWludXRlczoibWludXRlIixtaW51dGU6Im1pbnV0ZSIsTToibW9udGgiLG1vbnRoczoibW9udGgiLG1vbnRoOiJtb250aCIsUToicXVh''@;'; put 'put ''cnRlciIscXVhcnRlcnM6InF1YXJ0ZXIiLHF1YXJ0ZXI6InF1YXJ0ZXIiLHM6InNlY29uZCIsc2Vjb25kczoic2Vjb25kIixzZWNvbmQ6InNlY29uZCIsZ2c6IndlZWtZZWFyIix3ZWVreWVhcnM6IndlZWtZZWFyIix3ZWVreWVhcjoid2Vla1llYXIiLEdHOiJpc29XZWVrWWVhciIsaXNvd2Vl''@;'; put 'put ''a3llYXJzOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXI6Imlzb1dlZWtZZWFyIix3OiJ3ZWVrIix3ZWVrczoid2VlayIsd2Vlazoid2VlayIsVzoiaXNvV2VlayIsaXNvd2Vla3M6Imlzb1dlZWsiLGlzb3dlZWs6Imlzb1dlZWsiLHk6InllYXIiLHllYXJzOiJ5ZWFyIix5ZWFyOiJ5ZWFyIn07''@;'; put 'put ''ZnVuY3Rpb24gX3QoQ2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/a2VbQ2VdfHxrZVtDZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gbnQoQ2Upe3ZhciBtdCxJdCxLZT17fTtmb3IoSXQgaW4gQ2UpRihDZSxJdCkmJihtdD1fdChJdCkpJiYoS2VbbXRdPUNlW0l0XSk7cmV0''@;'; put 'put ''dXJuIEtlfXZhciBKZT17ZGF0ZTo5LGRheToxMSx3ZWVrZGF5OjExLGlzb1dlZWtkYXk6MTEsZGF5T2ZZZWFyOjQsaG91cjoxMyxtaWxsaXNlY29uZDoxNixtaW51dGU6MTQsbW9udGg6OCxxdWFydGVyOjcsc2Vjb25kOjE1LHdlZWtZZWFyOjEsaXNvV2Vla1llYXI6MSx3ZWVrOjUsaXNvV2Vl''@;'; put 'put ''azo1LHllYXI6MX07dmFyIEF0LHl0PS9cZC8sU3Q9L1xkXGQvLER0PS9cZHszfS8saXQ9L1xkezR9LywkZT0vWystXT9cZHs2fS8sdHQ9L1xkXGQ/LyxOZT0vXGRcZFxkXGQ/Lyx1dD0vXGRcZFxkXGRcZFxkPy8scXQ9L1xkezEsM30vLFJ0PS9cZHsxLDR9LyxQdD0vWystXT9cZHsxLDZ9Lyxj''@;'; put 'put ''aT0vXGQrLyxRdD0vWystXT9cZCsvLHNuPS9afFsrLV1cZFxkOj9cZFxkL2dpLFJpPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksZnQ9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEs''@;'; put 'put ''MjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxPcj0vXlsxLTldXGQ/LyxXdD0vXihbMS05XVxkfFxkKS87ZnVuY3Rpb24gUm4oQ2UsS2UsbXQpe0F0W0NlXT1nKEtlKT9LZTpmdW5jdGlvbihJdCxkbil7cmV0dXJuIEl0JiZt''@;'; put 'put ''dD9tdDpLZX19ZnVuY3Rpb24gc3QoQ2UsS2Upe3JldHVybiBGKEF0LENlKT9BdFtDZV0oS2UuX3N0cmljdCxLZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ1bmN0aW9uIFV0KENlKXtyZXR1cm4gcmkoQ2UucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10q''@;'; put 'put ''KVxdfFxcKC4pL2csZnVuY3Rpb24oS2UsbXQsSXQsZG4scW4pe3JldHVybiBtdHx8SXR8fGRufHxxbn0pKX0oQ2UpKX1mdW5jdGlvbiByaShDZSl7cmV0dXJuIENlLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gV2UoQ2Upe3JldHVybiBDZTwwP01h''@;'; put 'put ''dGguY2VpbChDZSl8fDA6TWF0aC5mbG9vcihDZSl9ZnVuY3Rpb24gVHQoQ2Upe3ZhciBLZT0rQ2UsbXQ9MDtyZXR1cm4gMCE9PUtlJiZpc0Zpbml0ZShLZSkmJihtdD1XZShLZSkpLG10fUF0PXt9O3ZhciBucj17fTtmdW5jdGlvbiBodChDZSxLZSl7dmFyIG10LGRuLEl0PUtlO2Zvcigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIENlJiYoQ2U9W0NlXSksaihLZSkmJihJdD1mdW5jdGlvbihxbixpaSl7aWlbS2VdPVR0KHFuKX0pLGRuPUNlLmxlbmd0aCxtdD0wO210PGRuO210KyspbnJbQ2VbbXRdXT1JdH1mdW5jdGlvbiB4dChDZSxLZSl7aHQoQ2UsZnVuY3Rpb24obXQsSXQsZG4scW4pe2RuLl93''@;'; put 'put ''PWRuLl93fHx7fSxLZShtdCxkbi5fdyxkbixxbil9KX1mdW5jdGlvbiBqbihDZSxLZSxtdCl7bnVsbCE9S2UmJkYobnIsQ2UpJiZucltDZV0oS2UsbXQuX2EsbXQsQ2UpfWZ1bmN0aW9uIHJuKENlKXtyZXR1cm4gQ2UlND09MCYmQ2UlMTAwIT0wfHxDZSU0MDA9PTB9dmFyIHp0PTAsaGk9MSx1''@;'; put 'put ''bj0yLGZuPTMsSWk9NCxYdD01LGVuPTYsdWE9NyxFaT04O2Z1bmN0aW9uIHZyKENlKXtyZXR1cm4gcm4oQ2UpPzM2NjozNjV9bGUoIlkiLDAsMCxmdW5jdGlvbigpe3ZhciBDZT10aGlzLnllYXIoKTtyZXR1cm4gQ2U8PTk5OTk/RShDZSw0KToiKyIrQ2V9KSxsZSgwLFsiWVkiLDJdLDAsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksbGUoMCxbIllZWVkiLDRdLDAsInllYXIiKSxsZSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxsZSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksUm4oIlkiLFF0KSxSbigiWVkiLHR0LFN0KSxSbigiWVlZWSIsUnQsaXQpLFJuKCJZ''@;'; put 'put ''WVlZWSIsUHQsJGUpLFJuKCJZWVlZWVkiLFB0LCRlKSxodChbIllZWVlZIiwiWVlZWVlZIl0senQpLGh0KCJZWVlZIixmdW5jdGlvbihDZSxLZSl7S2VbenRdPTI9PT1DZS5sZW5ndGg/Xy5wYXJzZVR3b0RpZ2l0WWVhcihDZSk6VHQoQ2UpfSksaHQoIllZIixmdW5jdGlvbihDZSxLZSl7S2Vb''@;'; put 'put ''enRdPV8ucGFyc2VUd29EaWdpdFllYXIoQ2UpfSksaHQoIlkiLGZ1bmN0aW9uKENlLEtlKXtLZVt6dF09cGFyc2VJbnQoQ2UsMTApfSksXy5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihDZSl7cmV0dXJuIFR0KENlKSsoVHQoQ2UpPjY4PzE5MDA6MmUzKX07dmFyIFdpLFduPWVpKCJGdWxs''@;'; put 'put ''WWVhciIsITApO2Z1bmN0aW9uIGVpKENlLEtlKXtyZXR1cm4gZnVuY3Rpb24obXQpe3JldHVybiBudWxsIT1tdD8oVmkodGhpcyxDZSxtdCksXy51cGRhdGVPZmZzZXQodGhpcyxLZSksdGhpcyk6UXIodGhpcyxDZSl9fWZ1bmN0aW9uIFFyKENlLEtlKXtpZighQ2UuaXNWYWxpZCgpKXJldHVy''@;'; put 'put ''biBOYU47dmFyIG10PUNlLl9kLEl0PUNlLl9pc1VUQztzd2l0Y2goS2Upe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk6bXQuZ2V0TWlsbGlzZWNvbmRzKCk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDU2Vjb25kcygpOm10Lmdl''@;'; put 'put ''dFNlY29uZHMoKTtjYXNlIk1pbnV0ZXMiOnJldHVybiBJdD9tdC5nZXRVVENNaW51dGVzKCk6bXQuZ2V0TWludXRlcygpO2Nhc2UiSG91cnMiOnJldHVybiBJdD9tdC5nZXRVVENIb3VycygpOm10LmdldEhvdXJzKCk7Y2FzZSJEYXRlIjpyZXR1cm4gSXQ/bXQuZ2V0VVRDRGF0ZSgpOm10Lmdl''@;'; put 'put ''dERhdGUoKTtjYXNlIkRheSI6cmV0dXJuIEl0P210LmdldFVUQ0RheSgpOm10LmdldERheSgpO2Nhc2UiTW9udGgiOnJldHVybiBJdD9tdC5nZXRVVENNb250aCgpOm10LmdldE1vbnRoKCk7Y2FzZSJGdWxsWWVhciI6cmV0dXJuIEl0P210LmdldFVUQ0Z1bGxZZWFyKCk6bXQuZ2V0RnVsbFll''@;'; put 'put ''YXIoKTtkZWZhdWx0OnJldHVybiBOYU59fWZ1bmN0aW9uIFZpKENlLEtlLG10KXt2YXIgSXQsZG4scW4saWksSWE7aWYoQ2UuaXNWYWxpZCgpJiYhaXNOYU4obXQpKXtzd2l0Y2goSXQ9Q2UuX2QsZG49Q2UuX2lzVVRDLEtlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIHZvaWQoZG4/SXQu''@;'; put 'put ''c2V0VVRDTWlsbGlzZWNvbmRzKG10KTpJdC5zZXRNaWxsaXNlY29uZHMobXQpKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ1NlY29uZHMobXQpOkl0LnNldFNlY29uZHMobXQpKTtjYXNlIk1pbnV0ZXMiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ01pbnV0ZXMobXQp''@;'; put 'put ''Okl0LnNldE1pbnV0ZXMobXQpKTtjYXNlIkhvdXJzIjpyZXR1cm4gdm9pZChkbj9JdC5zZXRVVENIb3VycyhtdCk6SXQuc2V0SG91cnMobXQpKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKGRuP0l0LnNldFVUQ0RhdGUobXQpOkl0LnNldERhdGUobXQpKTtjYXNlIkZ1bGxZZWFyIjpicmVhaztk''@;'; put 'put ''ZWZhdWx0OnJldHVybn1xbj1tdCxpaT1DZS5tb250aCgpLElhPTI5IT09KElhPUNlLmRhdGUoKSl8fDEhPT1paXx8cm4ocW4pP0lhOjI4LGRuP0l0LnNldFVUQ0Z1bGxZZWFyKHFuLGlpLElhKTpJdC5zZXRGdWxsWWVhcihxbixpaSxJYSl9fWZ1bmN0aW9uIHBhKENlLEtlKXtpZihpc05hTihD''@;'; put 'put ''ZSl8fGlzTmFOKEtlKSlyZXR1cm4gTmFOO3ZhciBtdD1mdW5jdGlvbiBMcihDZSxLZSl7cmV0dXJuKENlJUtlK0tlKSVLZX0oS2UsMTIpO3JldHVybiBDZSs9KEtlLW10KS8xMiwxPT09bXQ/cm4oQ2UpPzI5OjI4OjMxLW10JTclMn1XaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5w''@;'; put 'put ''cm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihDZSl7dmFyIEtlO2ZvcihLZT0wO0tlPHRoaXMubGVuZ3RoOysrS2UpaWYodGhpc1tLZV09PT1DZSlyZXR1cm4gS2U7cmV0dXJuLTF9LGxlKCJNIixbIk1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksbGUoIk1N''@;'; put 'put ''TSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyxDZSl9KSxsZSgiTU1NTSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsQ2UpfSksUm4oIk0iLHR0LE9yKSxSbigiTU0iLHR0LFN0''@;'; put 'put ''KSxSbigiTU1NIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLm1vbnRoc1Nob3J0UmVnZXgoQ2UpfSksUm4oIk1NTU0iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2UubW9udGhzUmVnZXgoQ2UpfSksaHQoWyJNIiwiTU0iXSxmdW5jdGlvbihDZSxLZSl7S2VbaGldPVR0KENlKS0xfSksaHQo''@;'; put 'put ''WyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3ZhciBkbj1tdC5fbG9jYWxlLm1vbnRoc1BhcnNlKENlLEl0LG10Ll9zdHJpY3QpO251bGwhPWRuP0tlW2hpXT1kbjpaKG10KS5pbnZhbGlkTW9udGg9Q2V9KTt2YXIgUW49IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxf''@;'; put 'put ''TWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbGE9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLGJhPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1N''@;'; put 'put ''Py8sTGE9ZnQsRmE9ZnQ7ZnVuY3Rpb24gTnMoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbixpaT1DZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhz''@;'; put 'put ''UGFyc2U9W10sSXQ9MDtJdDwxMjsrK0l0KXFuPUIoWzJlMyxJdF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdPXRoaXMubW9udGhzU2hvcnQocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XT10aGlzLm1vbnRocyhxbiwiIikudG9Mb2NhbGVM''@;'; put 'put ''b3dlckNhc2UoKTtyZXR1cm4gbXQ/Ik1NTSI9PT1LZT8tMSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLGlpKSk/ZG46bnVsbDoiTU1NIj09PUtlPy0xIT09KGRuPVdpLmNhbGwo''@;'; put 'put ''dGhpcy5fc2hvcnRNb250aHNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxpaSkpP2RuOm51bGw6LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNl''@;'; put 'put ''LGlpKSk/ZG46bnVsbH1mdW5jdGlvbiBwdShDZSxLZSl7aWYoIUNlLmlzVmFsaWQoKSlyZXR1cm4gQ2U7aWYoInN0cmluZyI9PXR5cGVvZiBLZSlpZigvXlxkKyQvLnRlc3QoS2UpKUtlPVR0KEtlKTtlbHNlIGlmKCFqKEtlPUNlLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShLZSkpKXJldHVy''@;'; put 'put ''biBDZTt2YXIgbXQ9S2UsSXQ9Q2UuZGF0ZSgpO3JldHVybiBJdD1JdDwyOT9JdDpNYXRoLm1pbihJdCxwYShDZS55ZWFyKCksbXQpKSxDZS5faXNVVEM/Q2UuX2Quc2V0VVRDTW9udGgobXQsSXQpOkNlLl9kLnNldE1vbnRoKG10LEl0KSxDZX1mdW5jdGlvbiBMYyhDZSl7cmV0dXJuIG51bGwh''@;'; put 'put ''PUNlPyhwdSh0aGlzLENlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpRcih0aGlzLCJNb250aCIpfWZ1bmN0aW9uIHVpKCl7ZnVuY3Rpb24gQ2UoU28sZnMpe3JldHVybiBmcy5sZW5ndGgtU28ubGVuZ3RofXZhciBkbixxbixpaSxJYSxLZT1bXSxtdD1bXSxJdD1bXTtmb3IoZG49''@;'; put 'put ''MDtkbjwxMjtkbisrKXFuPUIoWzJlMyxkbl0pLGlpPXJpKHRoaXMubW9udGhzU2hvcnQocW4sIiIpKSxJYT1yaSh0aGlzLm1vbnRocyhxbiwiIikpLEtlLnB1c2goaWkpLG10LnB1c2goSWEpLEl0LnB1c2goSWEpLEl0LnB1c2goaWkpO0tlLnNvcnQoQ2UpLG10LnNvcnQoQ2UpLEl0LnNvcnQo''@;'; put 'put ''Q2UpLHRoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpLHRo''@;'; put 'put ''aXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBWdChDZSxLZSxtdCxJdCxkbixxbixpaSl7dmFyIElhO3JldHVybiBDZTwxMDAmJkNlPj0wPyhJYT1uZXcgRGF0ZShDZSs0MDAsS2UsbXQsSXQsZG4scW4saWkp''@;'; put 'put ''LGlzRmluaXRlKElhLmdldEZ1bGxZZWFyKCkpJiZJYS5zZXRGdWxsWWVhcihDZSkpOklhPW5ldyBEYXRlKENlLEtlLG10LEl0LGRuLHFuLGlpKSxJYX1mdW5jdGlvbiBKcihDZSl7dmFyIEtlLG10O3JldHVybiBDZTwxMDAmJkNlPj0wPygobXQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo''@;'; put 'put ''YXJndW1lbnRzKSlbMF09Q2UrNDAwLEtlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbXQpKSxpc0Zpbml0ZShLZS5nZXRVVENGdWxsWWVhcigpKSYmS2Uuc2V0VVRDRnVsbFllYXIoQ2UpKTpLZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLEtlfWZ1bmN0''@;'; put 'put ''aW9uIHkwKENlLEtlLG10KXt2YXIgSXQ9NytLZS1tdDtyZXR1cm4tKDcrSnIoQ2UsMCxJdCkuZ2V0VVRDRGF5KCktS2UpJTcrSXQtMX1mdW5jdGlvbiBIYShDZSxLZSxtdCxJdCxkbil7dmFyIFNvLGZzLElhPTErNyooS2UtMSkrKDcrbXQtSXQpJTcreTAoQ2UsSXQsZG4pO3JldHVybiBJYTw9''@;'; put 'put ''MD9mcz12cihTbz1DZS0xKStJYTpJYT52cihDZSk/KFNvPUNlKzEsZnM9SWEtdnIoQ2UpKTooU289Q2UsZnM9SWEpLHt5ZWFyOlNvLGRheU9mWWVhcjpmc319ZnVuY3Rpb24gTHUoQ2UsS2UsbXQpe3ZhciBxbixpaSxJdD15MChDZS55ZWFyKCksS2UsbXQpLGRuPU1hdGguZmxvb3IoKENlLmRh''@;'; put 'put ''eU9mWWVhcigpLUl0LTEpLzcpKzE7cmV0dXJuIGRuPDE/cW49ZG4rUHIoaWk9Q2UueWVhcigpLTEsS2UsbXQpOmRuPlByKENlLnllYXIoKSxLZSxtdCk/KHFuPWRuLVByKENlLnllYXIoKSxLZSxtdCksaWk9Q2UueWVhcigpKzEpOihpaT1DZS55ZWFyKCkscW49ZG4pLHt3ZWVrOnFuLHllYXI6''@;'; put 'put ''aWl9fWZ1bmN0aW9uIFByKENlLEtlLG10KXt2YXIgSXQ9eTAoQ2UsS2UsbXQpLGRuPXkwKENlKzEsS2UsbXQpO3JldHVybih2cihDZSktSXQrZG4pLzd9bGUoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxsZSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLFJuKCJ3Iix0dCxPciksUm4o''@;'; put 'put ''Ind3Iix0dCxTdCksUm4oIlciLHR0LE9yKSxSbigiV1ciLHR0LFN0KSx4dChbInciLCJ3dyIsIlciLCJXVyJdLGZ1bmN0aW9uKENlLEtlLG10LEl0KXtLZVtJdC5zdWJzdHIoMCwxKV09VHQoQ2UpfSk7ZnVuY3Rpb24gYjAoQ2UsS2Upe3JldHVybiBDZS5zbGljZShLZSw3KS5jb25jYXQoQ2Uu''@;'; put 'put ''c2xpY2UoMCxLZSkpfWxlKCJkIiwwLCJkbyIsImRheSIpLGxlKCJkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyxDZSl9KSxsZSgiZGRkIiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5''@;'; put 'put ''c1Nob3J0KHRoaXMsQ2UpfSksbGUoImRkZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsQ2UpfSksbGUoImUiLDAsMCwid2Vla2RheSIpLGxlKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxSbigiZCIsdHQpLFJuKCJlIix0dCksUm4oIkUi''@;'; put 'put ''LHR0KSxSbigiZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNNaW5SZWdleChDZSl9KSxSbigiZGRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzU2hvcnRSZWdleChDZSl9KSxSbigiZGRkZCIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5''@;'; put 'put ''c1JlZ2V4KENlKX0pLHh0KFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3ZhciBkbj1tdC5fbG9jYWxlLndlZWtkYXlzUGFyc2UoQ2UsSXQsbXQuX3N0cmljdCk7bnVsbCE9ZG4/S2UuZD1kbjpaKG10KS5pbnZhbGlkV2Vla2RheT1DZX0pLHh0KFsiZCIsImUiLCJF''@;'; put 'put ''Il0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe0tlW0l0XT1UdChDZSl9KTt2YXIgcjU9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLE9sPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksdWY9''@;'; put 'put ''IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHNkPWZ0LGRmPWZ0LGsxPWZ0O2Z1bmN0aW9uIEdoKENlLEtlLG10KXt2YXIgSXQsZG4scW4saWk9Q2UudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0''@;'; put 'put ''aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxJdD0wO0l0PDc7KytJdClxbj1CKFsyZTMsMV0pLmRheShJdCksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtJdF09dGhpcy53ZWVrZGF5c01pbihxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlz''@;'; put 'put ''Ll9zaG9ydFdlZWtkYXlzUGFyc2VbSXRdPXRoaXMud2Vla2RheXNTaG9ydChxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzKHFuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBtdD8iZGRkZCI9PT1LZT8tMSE9PShk''@;'; put 'put ''bj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOiJkZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsaWkpKT9kbjpudWxsOi0xIT09KGRuPVdpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRk''@;'; put 'put ''ZGQiPT09S2U/LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxpaSkpP2RuOm51bGw6ImRkZCI9PT1LZT8t''@;'; put 'put ''MSE9PShkbj1XaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxpaSkpfHwtMSE9PShkbj1XaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbDotMSE9PShkbj1XaS5jYWxsKHRoaXMu''@;'; put 'put ''X21pbldlZWtkYXlzUGFyc2UsaWkpKXx8LTEhPT0oZG49V2kuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLGlpKSl8fC0xIT09KGRuPVdpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLGlpKSk/ZG46bnVsbH1mdW5jdGlvbiBhbigpe2Z1bmN0aW9uIENlKE51LGRkKXtyZXR1cm4gZGQu''@;'; put 'put ''bGVuZ3RoLU51Lmxlbmd0aH12YXIgcW4saWksSWEsU28sZnMsS2U9W10sbXQ9W10sSXQ9W10sZG49W107Zm9yKHFuPTA7cW48NztxbisrKWlpPUIoWzJlMywxXSkuZGF5KHFuKSxJYT1yaSh0aGlzLndlZWtkYXlzTWluKGlpLCIiKSksU289cmkodGhpcy53ZWVrZGF5c1Nob3J0KGlpLCIiKSks''@;'; put 'put ''ZnM9cmkodGhpcy53ZWVrZGF5cyhpaSwiIikpLEtlLnB1c2goSWEpLG10LnB1c2goU28pLEl0LnB1c2goZnMpLGRuLnB1c2goSWEpLGRuLnB1c2goU28pLGRuLnB1c2goZnMpO0tlLnNvcnQoQ2UpLG10LnNvcnQoQ2UpLEl0LnNvcnQoQ2UpLGRuLnNvcnQoQ2UpLHRoaXMuX3dlZWtkYXlzUmVn''@;'; put 'put ''ZXg9bmV3IFJlZ0V4cCgiXigiK2RuLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhw''@;'; put 'put ''KCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1m''@;'; put 'put ''dW5jdGlvbiB2aSgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIFBvKENlLEtlKXtsZShDZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLEtlKX0pfWZ1bmN0aW9uIGVvKENlLEtl''@;'; put 'put ''KXtyZXR1cm4gS2UuX21lcmlkaWVtUGFyc2V9bGUoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxsZSgiaCIsWyJoaCIsMl0sMCx2aSksbGUoImsiLFsia2siLDJdLDAsZnVuY3Rpb24gQXIoKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pLGxlKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIi''@;'; put 'put ''K3ZpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMil9KSxsZSgiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3ZpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMikrRSh0aGlzLnNlY29uZHMoKSwyKX0pLGxlKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3Ro''@;'; put 'put ''aXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpfSksbGUoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25kcygpLDIpfSksUG8oImEiLCEwKSxQbygiQSIsITEpLFJuKCJhIixlbyksUm4oIkEiLGVv''@;'; put 'put ''KSxSbigiSCIsdHQsV3QpLFJuKCJoIix0dCxPciksUm4oImsiLHR0LE9yKSxSbigiSEgiLHR0LFN0KSxSbigiaGgiLHR0LFN0KSxSbigia2siLHR0LFN0KSxSbigiaG1tIixOZSksUm4oImhtbXNzIix1dCksUm4oIkhtbSIsTmUpLFJuKCJIbW1zcyIsdXQpLGh0KFsiSCIsIkhIIl0sZm4pLGh0''@;'; put 'put ''KFsiayIsImtrIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1UdChDZSk7S2VbZm5dPTI0PT09SXQ/MDpJdH0pLGh0KFsiYSIsIkEiXSxmdW5jdGlvbihDZSxLZSxtdCl7bXQuX2lzUG09bXQuX2xvY2FsZS5pc1BNKENlKSxtdC5fbWVyaWRpZW09Q2V9KSxodChbImgiLCJoaCJdLGZ1bmN0''@;'; put 'put ''aW9uKENlLEtlLG10KXtLZVtmbl09VHQoQ2UpLFoobXQpLmJpZ0hvdXI9ITB9KSxodCgiaG1tIixmdW5jdGlvbihDZSxLZSxtdCl7dmFyIEl0PUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQpKSxaKG10KS5iaWdIb3VyPSEwfSks''@;'; put 'put ''aHQoImhtbXNzIixmdW5jdGlvbihDZSxLZSxtdCl7dmFyIEl0PUNlLmxlbmd0aC00LGRuPUNlLmxlbmd0aC0yO0tlW2ZuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQsMikpLEtlW1h0XT1UdChDZS5zdWJzdHIoZG4pKSxaKG10KS5iaWdIb3VyPSEwfSksaHQo''@;'; put 'put ''IkhtbSIsZnVuY3Rpb24oQ2UsS2UsbXQpe3ZhciBJdD1DZS5sZW5ndGgtMjtLZVtmbl09VHQoQ2Uuc3Vic3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0KSl9KSxodCgiSG1tc3MiLGZ1bmN0aW9uKENlLEtlLG10KXt2YXIgSXQ9Q2UubGVuZ3RoLTQsZG49Q2UubGVuZ3RoLTI7S2Vb''@;'; put 'put ''Zm5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCwyKSksS2VbWHRdPVR0KENlLnN1YnN0cihkbikpfSk7dmFyIFZzPWVpKCJIb3VycyIsITApO3ZhciBNdCxqbD17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBh''@;'; put 'put ''dF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExM''@;'; put 'put ''OiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLHc6ImEgd2VlayIsd3c6IiVkIHdlZWtzIixN''@;'; put 'put ''OiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpRbixtb250aHNTaG9ydDpsYSx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6cjUsd2Vla2RheXNNaW46dWYsd2Vla2RheXNTaG9ydDpPbCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9c''@;'; put 'put ''Lj8vaX0sSG89e30sa289e307ZnVuY3Rpb24gQnQoQ2UsS2Upe3ZhciBtdCxJdD1NYXRoLm1pbihDZS5sZW5ndGgsS2UubGVuZ3RoKTtmb3IobXQ9MDttdDxJdDttdCs9MSlpZihDZVttdF0hPT1LZVttdF0pcmV0dXJuIG10O3JldHVybiBJdH1mdW5jdGlvbiBfbihDZSl7cmV0dXJuIENlJiZD''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIil9ZnVuY3Rpb24geW4oQ2Upe3ZhciBLZT1udWxsO2lmKHZvaWQgMD09PUhvW0NlXSYmY2UmJmNlLmV4cG9ydHMmJmZ1bmN0aW9uIEluKENlKXtyZXR1cm4hKCFDZXx8IUNlLm1hdGNoKCJeW14vXFxcXF0qJCIpKX0oQ2UpKXRyeXtLZT1N''@;'; put 'put ''dC5fYWJicixiKDM1MzU4KSgiLi8iK0NlKSx1cihLZSl9Y2F0Y2h7SG9bQ2VdPW51bGx9cmV0dXJuIEhvW0NlXX1mdW5jdGlvbiB1cihDZSxLZSl7dmFyIG10O3JldHVybiBDZSYmKChtdD1SKEtlKT90YShDZSk6eWkoQ2UsS2UpKT9NdD1tdDp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUu''@;'; put 'put ''d2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitDZSsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksTXQuX2FiYnJ9ZnVuY3Rpb24geWkoQ2UsS2Upe2lmKG51bGwhPT1LZSl7dmFyIG10LEl0PWpsO2lmKEtlLmFiYnI9Q2UsbnVsbCE9SG9bQ2VdKXooImRlZmlu''@;'; put 'put ''ZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcg''@;'; put 'put ''YSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIiksSXQ9SG9bQ2VdLl9jb25maWc7ZWxzZSBpZihudWxsIT1LZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9SG9bS2UucGFyZW50TG9jYWxlXSlJ''@;'; put 'put ''dD1Ib1tLZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obXQ9eW4oS2UucGFyZW50TG9jYWxlKSkpcmV0dXJuIGtvW0tlLnBhcmVudExvY2FsZV18fChrb1tLZS5wYXJlbnRMb2NhbGVdPVtdKSxrb1tLZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6Q2UsY29uZmlnOktl''@;'; put 'put ''fSksbnVsbDtJdD1tdC5fY29uZmlnfXJldHVybiBIb1tDZV09bmV3IEMoeChJdCxLZSkpLGtvW0NlXSYma29bQ2VdLmZvckVhY2goZnVuY3Rpb24oZG4pe3lpKGRuLm5hbWUsZG4uY29uZmlnKX0pLHVyKENlKSxIb1tDZV19cmV0dXJuIGRlbGV0ZSBIb1tDZV0sbnVsbH1mdW5jdGlvbiB0YShD''@;'; put 'put ''ZSl7dmFyIEtlO2lmKENlJiZDZS5fbG9jYWxlJiZDZS5fbG9jYWxlLl9hYmJyJiYoQ2U9Q2UuX2xvY2FsZS5fYWJiciksIUNlKXJldHVybiBNdDtpZighTihDZSkpe2lmKEtlPXluKENlKSlyZXR1cm4gS2U7Q2U9W0NlXX1yZXR1cm4gZnVuY3Rpb24gbW4oQ2Upe2Zvcih2YXIgbXQsSXQsZG4s''@;'; put 'put ''cW4sS2U9MDtLZTxDZS5sZW5ndGg7KXtmb3IobXQ9KHFuPV9uKENlW0tlXSkuc3BsaXQoIi0iKSkubGVuZ3RoLEl0PShJdD1fbihDZVtLZSsxXSkpP0l0LnNwbGl0KCItIik6bnVsbDttdD4wOyl7aWYoZG49eW4ocW4uc2xpY2UoMCxtdCkuam9pbigiLSIpKSlyZXR1cm4gZG47aWYoSXQmJkl0''@;'; put 'put ''Lmxlbmd0aD49bXQmJkJ0KHFuLEl0KT49bXQtMSlicmVhazttdC0tfUtlKyt9cmV0dXJuIE10fShDZSl9ZnVuY3Rpb24gVmEoQ2Upe3ZhciBLZSxtdD1DZS5fYTtyZXR1cm4gbXQmJi0yPT09WihDZSkub3ZlcmZsb3cmJihLZT1tdFtoaV08MHx8bXRbaGldPjExP2hpOm10W3VuXTwxfHxtdFt1''@;'; put 'put ''bl0+cGEobXRbenRdLG10W2hpXSk/dW46bXRbZm5dPDB8fG10W2ZuXT4yNHx8MjQ9PT1tdFtmbl0mJigwIT09bXRbSWldfHwwIT09bXRbWHRdfHwwIT09bXRbZW5dKT9mbjptdFtJaV08MHx8bXRbSWldPjU5P0lpOm10W1h0XTwwfHxtdFtYdF0+NTk/WHQ6bXRbZW5dPDB8fG10W2VuXT45OTk/''@;'; put 'put ''ZW46LTEsWihDZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYoS2U8enR8fEtlPnVuKSYmKEtlPXVuKSxaKENlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1LZSYmKEtlPXVhKSxaKENlKS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PUtlJiYoS2U9RWkpLFooQ2UpLm92ZXJmbG93PUtlKSxDZX12YXIgJG89''@;'; put 'put ''L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLFhsPS9eXHMqKCg/OlsrLV1cZHs2''@;'; put 'put ''fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLHRvPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLF9vPVtbIllZWVlZWS1N''@;'; put 'put ''TS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0i''@;'; put 'put ''LC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8s''@;'; put 'put ''ITFdLFsiWVlZWSIsL1xkezR9LywhMV1dLGppPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEht''@;'; put 'put ''bXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLFBjPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLHpsPS9eKD86KE1vbnxU''@;'; put 'put ''dWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1d''@;'; put 'put ''XGR7NH0pKSQvLENhPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBUYShDZSl7dmFyIEtlLG10LHFuLGlpLElhLFNvLEl0PUNlLl9pLGRuPSRvLmV4ZWMoSXQpfHxYbC5l''@;'; put 'put ''eGVjKEl0KSxmcz1fby5sZW5ndGgsTnU9amkubGVuZ3RoO2lmKGRuKXtmb3IoWihDZSkuaXNvPSEwLEtlPTAsbXQ9ZnM7S2U8bXQ7S2UrKylpZihfb1tLZV1bMV0uZXhlYyhkblsxXSkpe2lpPV9vW0tlXVswXSxxbj0hMSE9PV9vW0tlXVsyXTticmVha31pZihudWxsPT1paSlyZXR1cm4gdm9p''@;'; put 'put ''ZChDZS5faXNWYWxpZD0hMSk7aWYoZG5bM10pe2ZvcihLZT0wLG10PU51O0tlPG10O0tlKyspaWYoamlbS2VdWzFdLmV4ZWMoZG5bM10pKXtJYT0oZG5bMl18fCIgIikramlbS2VdWzBdO2JyZWFrfWlmKG51bGw9PUlhKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKX1pZighcW4mJm51bGwh''@;'; put 'put ''PUlhKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtpZihkbls0XSl7aWYoIXRvLmV4ZWMoZG5bNF0pKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtTbz0iWiJ9Q2UuX2Y9aWkrKElhfHwiIikrKFNvfHwiIiksZjQoQ2UpfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gRzAoQ2Up''@;'; put 'put ''e3ZhciBLZT1wYXJzZUludChDZSwxMCk7cmV0dXJuIEtlPD00OT8yZTMrS2U6S2U8PTk5OT8xOTAwK0tlOktlfWZ1bmN0aW9uIE1zKENlKXt2YXIgbXQsS2U9emwuZXhlYyhmdW5jdGlvbiAkMChDZSl7cmV0dXJuIENlLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNl''@;'; put 'put ''KC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIiKS5yZXBsYWNlKC9cc1xzKiQvLCIiKX0oQ2UuX2kpKTtpZihLZSl7aWYobXQ9ZnVuY3Rpb24gWGgoQ2UsS2UsbXQsSXQsZG4scW4pe3ZhciBpaT1bRzAoQ2UpLGxhLmluZGV4T2YoS2UpLHBhcnNlSW50KG10LDEwKSxwYXJzZUlu''@;'; put 'put ''dChJdCwxMCkscGFyc2VJbnQoZG4sMTApXTtyZXR1cm4gcW4mJmlpLnB1c2gocGFyc2VJbnQocW4sMTApKSxpaX0oS2VbNF0sS2VbM10sS2VbMl0sS2VbNV0sS2VbNl0sS2VbN10pLCFmdW5jdGlvbiBObyhDZSxLZSxtdCl7cmV0dXJuIUNlfHxPbC5pbmRleE9mKENlKT09PW5ldyBEYXRlKEtl''@;'; put 'put ''WzBdLEtlWzFdLEtlWzJdKS5nZXREYXkoKXx8KFoobXQpLndlZWtkYXlNaXNtYXRjaD0hMCxtdC5faXNWYWxpZD0hMSwhMSl9KEtlWzFdLG10LENlKSlyZXR1cm47Q2UuX2E9bXQsQ2UuX3R6bT1mdW5jdGlvbiBxaShDZSxLZSxtdCl7aWYoQ2UpcmV0dXJuIENhW0NlXTtpZihLZSlyZXR1cm4g''@;'; put 'put ''MDt2YXIgSXQ9cGFyc2VJbnQobXQsMTApLGRuPUl0JTEwMDtyZXR1cm4oSXQtZG4pLzEwMCo2MCtkbn0oS2VbOF0sS2VbOV0sS2VbMTBdKSxDZS5fZD1Kci5hcHBseShudWxsLENlLl9hKSxDZS5fZC5zZXRVVENNaW51dGVzKENlLl9kLmdldFVUQ01pbnV0ZXMoKS1DZS5fdHptKSxaKENlKS5y''@;'; put 'put ''ZmMyODIyPSEwfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gb28oQ2UsS2UsbXQpe3JldHVybiBDZT8/S2U/P210fWZ1bmN0aW9uIF9sKENlKXt2YXIgS2UsbXQsZG4scW4saWksSXQ9W107aWYoIUNlLl9kKXtmb3IoZG49ZnVuY3Rpb24gYTUoQ2Upe3ZhciBLZT1uZXcgRGF0ZShfLm5v''@;'; put 'put ''dygpKTtyZXR1cm4gQ2UuX3VzZVVUQz9bS2UuZ2V0VVRDRnVsbFllYXIoKSxLZS5nZXRVVENNb250aCgpLEtlLmdldFVUQ0RhdGUoKV06W0tlLmdldEZ1bGxZZWFyKCksS2UuZ2V0TW9udGgoKSxLZS5nZXREYXRlKCldfShDZSksQ2UuX3cmJm51bGw9PUNlLl9hW3VuXSYmbnVsbD09Q2UuX2Fb''@;'; put 'put ''aGldJiZmdW5jdGlvbiB0aChDZSl7dmFyIEtlLG10LEl0LGRuLHFuLGlpLElhLFNvLGZzO251bGwhPShLZT1DZS5fdykuR0d8fG51bGwhPUtlLld8fG51bGwhPUtlLkU/KHFuPTEsaWk9NCxtdD1vbyhLZS5HRyxDZS5fYVt6dF0sTHUoc2woKSwxLDQpLnllYXIpLEl0PW9vKEtlLlcsMSksKChk''@;'; put 'put ''bj1vbyhLZS5FLDEpKTwxfHxkbj43KSYmKFNvPSEwKSk6KHFuPUNlLl9sb2NhbGUuX3dlZWsuZG93LGlpPUNlLl9sb2NhbGUuX3dlZWsuZG95LGZzPUx1KHNsKCkscW4saWkpLG10PW9vKEtlLmdnLENlLl9hW3p0XSxmcy55ZWFyKSxJdD1vbyhLZS53LGZzLndlZWspLG51bGwhPUtlLmQ/KChk''@;'; put 'put ''bj1LZS5kKTwwfHxkbj42KSYmKFNvPSEwKTpudWxsIT1LZS5lPyhkbj1LZS5lK3FuLChLZS5lPDB8fEtlLmU+NikmJihTbz0hMCkpOmRuPXFuKSxJdDwxfHxJdD5QcihtdCxxbixpaSk/WihDZSkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9U28/WihDZSkuX292ZXJmbG93V2Vla2RheT0hMDoo''@;'; put 'put ''SWE9SGEobXQsSXQsZG4scW4saWkpLENlLl9hW3p0XT1JYS55ZWFyLENlLl9kYXlPZlllYXI9SWEuZGF5T2ZZZWFyKX0oQ2UpLG51bGwhPUNlLl9kYXlPZlllYXImJihpaT1vbyhDZS5fYVt6dF0sZG5benRdKSwoQ2UuX2RheU9mWWVhcj52cihpaSl8fDA9PT1DZS5fZGF5T2ZZZWFyKSYmKFoo''@;'; put 'put ''Q2UpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCksbXQ9SnIoaWksMCxDZS5fZGF5T2ZZZWFyKSxDZS5fYVtoaV09bXQuZ2V0VVRDTW9udGgoKSxDZS5fYVt1bl09bXQuZ2V0VVRDRGF0ZSgpKSxLZT0wO0tlPDMmJm51bGw9PUNlLl9hW0tlXTsrK0tlKUNlLl9hW0tlXT1JdFtLZV09ZG5bS2VdO2Zv''@;'; put 'put ''cig7S2U8NztLZSsrKUNlLl9hW0tlXT1JdFtLZV09bnVsbD09Q2UuX2FbS2VdPzI9PT1LZT8xOjA6Q2UuX2FbS2VdOzI0PT09Q2UuX2FbZm5dJiYwPT09Q2UuX2FbSWldJiYwPT09Q2UuX2FbWHRdJiYwPT09Q2UuX2FbZW5dJiYoQ2UuX25leHREYXk9ITAsQ2UuX2FbZm5dPTApLENlLl9kPShD''@;'; put 'put ''ZS5fdXNlVVRDP0pyOlZ0KS5hcHBseShudWxsLEl0KSxxbj1DZS5fdXNlVVRDP0NlLl9kLmdldFVUQ0RheSgpOkNlLl9kLmdldERheSgpLG51bGwhPUNlLl90em0mJkNlLl9kLnNldFVUQ01pbnV0ZXMoQ2UuX2QuZ2V0VVRDTWludXRlcygpLUNlLl90em0pLENlLl9uZXh0RGF5JiYoQ2UuX2Fb''@;'; put 'put ''Zm5dPTI0KSxDZS5fdyYmdHlwZW9mIENlLl93LmQ8InUiJiZDZS5fdy5kIT09cW4mJihaKENlKS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiBmNChDZSl7aWYoQ2UuX2YhPT1fLklTT184NjAxKWlmKENlLl9mIT09Xy5SRkNfMjgyMil7Q2UuX2E9W10sWihDZSkuZW1wdHk9ITA7dmFy''@;'; put 'put ''IG10LEl0LGRuLHFuLGlpLGZzLE51LEtlPSIiK0NlLl9pLElhPUtlLmxlbmd0aCxTbz0wO2ZvcihOdT0oZG49b3QoQ2UuX2YsQ2UuX2xvY2FsZSkubWF0Y2gobSl8fFtdKS5sZW5ndGgsbXQ9MDttdDxOdTttdCsrKShJdD0oS2UubWF0Y2goc3QocW49ZG5bbXRdLENlKSl8fFtdKVswXSkmJigo''@;'; put 'put ''aWk9S2Uuc3Vic3RyKDAsS2UuaW5kZXhPZihJdCkpKS5sZW5ndGg+MCYmWihDZSkudW51c2VkSW5wdXQucHVzaChpaSksS2U9S2Uuc2xpY2UoS2UuaW5kZXhPZihJdCkrSXQubGVuZ3RoKSxTbys9SXQubGVuZ3RoKSxuZVtxbl0/KEl0P1ooQ2UpLmVtcHR5PSExOlooQ2UpLnVudXNlZFRva2Vu''@;'; put 'put ''cy5wdXNoKHFuKSxqbihxbixJdCxDZSkpOkNlLl9zdHJpY3QmJiFJdCYmWihDZSkudW51c2VkVG9rZW5zLnB1c2gocW4pO1ooQ2UpLmNoYXJzTGVmdE92ZXI9SWEtU28sS2UubGVuZ3RoPjAmJlooQ2UpLnVudXNlZElucHV0LnB1c2goS2UpLENlLl9hW2ZuXTw9MTImJiEwPT09WihDZSkuYmln''@;'; put 'put ''SG91ciYmQ2UuX2FbZm5dPjAmJihaKENlKS5iaWdIb3VyPXZvaWQgMCksWihDZSkucGFyc2VkRGF0ZVBhcnRzPUNlLl9hLnNsaWNlKDApLFooQ2UpLm1lcmlkaWVtPUNlLl9tZXJpZGllbSxDZS5fYVtmbl09ZnVuY3Rpb24gcDQoQ2UsS2UsbXQpe3ZhciBJdDtyZXR1cm4gbnVsbD09bXQ/S2U6''@;'; put 'put ''bnVsbCE9Q2UubWVyaWRpZW1Ib3VyP0NlLm1lcmlkaWVtSG91cihLZSxtdCk6KG51bGwhPUNlLmlzUE0mJigoSXQ9Q2UuaXNQTShtdCkpJiZLZTwxMiYmKEtlKz0xMiksIUl0JiYxMj09PUtlJiYoS2U9MCkpLEtlKX0oQ2UuX2xvY2FsZSxDZS5fYVtmbl0sQ2UuX21lcmlkaWVtKSxudWxsIT09''@;'; put 'put ''KGZzPVooQ2UpLmVyYSkmJihDZS5fYVt6dF09Q2UuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZnMsQ2UuX2FbenRdKSksX2woQ2UpLFZhKENlKX1lbHNlIE1zKENlKTtlbHNlIFRhKENlKX1mdW5jdGlvbiBsdihDZSl7dmFyIEtlPUNlLl9pLG10PUNlLl9mO3JldHVybiBDZS5fbG9jYWxlPUNl''@;'; put 'put ''Ll9sb2NhbGV8fHRhKENlLl9sKSxudWxsPT09S2V8fHZvaWQgMD09PW10JiYiIj09PUtlP1goe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIEtlJiYoQ2UuX2k9S2U9Q2UuX2xvY2FsZS5wcmVwYXJzZShLZSkpLF9lKEtlKT9uZXcgZ2UoVmEoS2UpKTooUChLZSk/Q2UuX2Q9S2U6''@;'; put 'put ''TihtdCk/ZnVuY3Rpb24gSzAoQ2Upe3ZhciBLZSxtdCxJdCxkbixxbixpaSxJYT0hMSxTbz1DZS5fZi5sZW5ndGg7aWYoMD09PVNvKXJldHVybiBaKENlKS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQoQ2UuX2Q9bmV3IERhdGUoTmFOKSk7Zm9yKGRuPTA7ZG48U287ZG4rKylxbj0wLGlpPSExLEtl''@;'; put 'put ''PW9lKHt9LENlKSxudWxsIT1DZS5fdXNlVVRDJiYoS2UuX3VzZVVUQz1DZS5fdXNlVVRDKSxLZS5fZj1DZS5fZltkbl0sZjQoS2UpLFEoS2UpJiYoaWk9ITApLHFuKz1aKEtlKS5jaGFyc0xlZnRPdmVyLHFuKz0xMCpaKEtlKS51bnVzZWRUb2tlbnMubGVuZ3RoLFooS2UpLnNjb3JlPXFuLElh''@;'; put 'put ''P3FuPEl0JiYoSXQ9cW4sbXQ9S2UpOihudWxsPT1JdHx8cW48SXR8fGlpKSYmKEl0PXFuLG10PUtlLGlpJiYoSWE9ITApKTtZKENlLG10fHxLZSl9KENlKTptdD9mNChDZSk6ZnVuY3Rpb24gUncoQ2Upe3ZhciBLZT1DZS5faTtSKEtlKT9DZS5fZD1uZXcgRGF0ZShfLm5vdygpKTpQKEtlKT9D''@;'; put 'put ''ZS5fZD1uZXcgRGF0ZShLZS52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2YgS2U/ZnVuY3Rpb24gcmEoQ2Upe3ZhciBLZT1QYy5leGVjKENlLl9pKTtudWxsPT09S2U/KFRhKENlKSwhMT09PUNlLl9pc1ZhbGlkJiYoZGVsZXRlIENlLl9pc1ZhbGlkLE1zKENlKSwhMT09PUNlLl9pc1ZhbGlk''@;'; put 'put ''JiYoZGVsZXRlIENlLl9pc1ZhbGlkLENlLl9zdHJpY3Q/Q2UuX2lzVmFsaWQ9ITE6Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhDZSkpKSk6Q2UuX2Q9bmV3IERhdGUoK0tlWzFdKX0oQ2UpOk4oS2UpPyhDZS5fYT1MKEtlLnNsaWNlKDApLGZ1bmN0aW9uKG10KXtyZXR1cm4gcGFyc2VJbnQo''@;'; put 'put ''bXQsMTApfSksX2woQ2UpKTp3KEtlKT9mdW5jdGlvbiBndShDZSl7aWYoIUNlLl9kKXt2YXIgS2U9bnQoQ2UuX2kpO0NlLl9hPUwoW0tlLnllYXIsS2UubW9udGgsdm9pZCAwPT09S2UuZGF5P0tlLmRhdGU6S2UuZGF5LEtlLmhvdXIsS2UubWludXRlLEtlLnNlY29uZCxLZS5taWxsaXNlY29u''@;'; put 'put ''ZF0sZnVuY3Rpb24oSXQpe3JldHVybiBJdCYmcGFyc2VJbnQoSXQsMTApfSksX2woQ2UpfX0oQ2UpOmooS2UpP0NlLl9kPW5ldyBEYXRlKEtlKTpfLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKENlKX0oQ2UpLFEoQ2UpfHwoQ2UuX2Q9bnVsbCksQ2UpKX1mdW5jdGlvbiBjdihDZSxLZSxtdCxJ''@;'; put 'put ''dCxkbil7dmFyIHFuPXt9O3JldHVybighMD09PUtlfHwhMT09PUtlKSYmKEl0PUtlLEtlPXZvaWQgMCksKCEwPT09bXR8fCExPT09bXQpJiYoSXQ9bXQsbXQ9dm9pZCAwKSwodyhDZSkmJkgoQ2UpfHxOKENlKSYmMD09PUNlLmxlbmd0aCkmJihDZT12b2lkIDApLHFuLl9pc0FNb21lbnRPYmpl''@;'; put 'put ''Y3Q9ITAscW4uX3VzZVVUQz1xbi5faXNVVEM9ZG4scW4uX2w9bXQscW4uX2k9Q2UscW4uX2Y9S2UscW4uX3N0cmljdD1JdCxmdW5jdGlvbiBGYyhDZSl7dmFyIEtlPW5ldyBnZShWYShsdihDZSkpKTtyZXR1cm4gS2UuX25leHREYXkmJihLZS5hZGQoMSwiZCIpLEtlLl9uZXh0RGF5PXZvaWQg''@;'; put 'put ''MCksS2V9KHFuKX1mdW5jdGlvbiBzbChDZSxLZSxtdCxJdCl7cmV0dXJuIGN2KENlLEtlLG10LEl0LCExKX1fLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPVNlKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0''@;'; put 'put ''cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRq''@;'; put 'put ''cy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4iLGZ1bmN0aW9uKENlKXtDZS5fZD1uZXcgRGF0ZShDZS5faSsoQ2UuX3VzZVVUQz8iIFVUQyI6IiIpKX0pLF8uSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LF8uUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBJMz1T''@;'; put 'put ''ZSgibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIENlPXNsLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlk''@;'; put 'put ''KCkmJkNlLmlzVmFsaWQoKT9DZTx0aGlzP3RoaXM6Q2U6WCgpfSksTHc9U2UoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBDZT1z''@;'; put 'put ''bC5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZDZS5pc1ZhbGlkKCk/Q2U+dGhpcz90aGlzOkNlOlgoKX0pO2Z1bmN0aW9uIG5oKENlLEtlKXt2YXIgbXQsSXQ7aWYoMT09PUtlLmxlbmd0aCYmTihLZVswXSkmJihLZT1LZVswXSksIUtlLmxlbmd0aClyZXR1''@;'; put 'put ''cm4gc2woKTtmb3IobXQ9S2VbMF0sSXQ9MTtJdDxLZS5sZW5ndGg7KytJdCkoIUtlW0l0XS5pc1ZhbGlkKCl8fEtlW0l0XVtDZV0obXQpKSYmKG10PUtlW0l0XSk7cmV0dXJuIG10fXZhciBmaT1bInllYXIiLCJxdWFydGVyIiwibW9udGgiLCJ3ZWVrIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIs''@;'; put 'put ''InNlY29uZCIsIm1pbGxpc2Vjb25kIl07ZnVuY3Rpb24gcGYoQ2Upe3ZhciBLZT1udChDZSksbXQ9S2UueWVhcnx8MCxJdD1LZS5xdWFydGVyfHwwLGRuPUtlLm1vbnRofHwwLHFuPUtlLndlZWt8fEtlLmlzb1dlZWt8fDAsaWk9S2UuZGF5fHwwLElhPUtlLmhvdXJ8fDAsU289S2UubWludXRl''@;'; put 'put ''fHwwLGZzPUtlLnNlY29uZHx8MCxOdT1LZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uIG81KENlKXt2YXIgS2UsSXQsbXQ9ITEsZG49ZmkubGVuZ3RoO2ZvcihLZSBpbiBDZSlpZihGKENlLEtlKSYmKC0xPT09V2kuY2FsbChmaSxLZSl8fG51bGwhPUNlW0tlXSYmaXNO''@;'; put 'put ''YU4oQ2VbS2VdKSkpcmV0dXJuITE7Zm9yKEl0PTA7SXQ8ZG47KytJdClpZihDZVtmaVtJdF1dKXtpZihtdClyZXR1cm4hMTtwYXJzZUZsb2F0KENlW2ZpW0l0XV0pIT09VHQoQ2VbZmlbSXRdXSkmJihtdD0hMCl9cmV0dXJuITB9KEtlKSx0aGlzLl9taWxsaXNlY29uZHM9K051KzFlMypmcys2''@;'; put 'put ''ZTQqU28rMWUzKklhKjYwKjYwLHRoaXMuX2RheXM9K2lpKzcqcW4sdGhpcy5fbW9udGhzPStkbiszKkl0KzEyKm10LHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXRhKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gbDUoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIHBmfWZ1bmN0aW9uIGc0''@;'; put 'put ''KENlKXtyZXR1cm4gQ2U8MD8tMSpNYXRoLnJvdW5kKC0xKkNlKTpNYXRoLnJvdW5kKENlKX1mdW5jdGlvbiBJMShDZSxLZSl7bGUoQ2UsMCwwLGZ1bmN0aW9uKCl7dmFyIG10PXRoaXMudXRjT2Zmc2V0KCksSXQ9IisiO3JldHVybiBtdDwwJiYobXQ9LW10LEl0PSItIiksSXQrRSh+fihtdC82''@;'; put 'put ''MCksMikrS2UrRSh+fm10JTYwLDIpfSl9STEoIloiLCI6IiksSTEoIlpaIiwiIiksUm4oIloiLFJpKSxSbigiWloiLFJpKSxodChbIloiLCJaWiJdLGZ1bmN0aW9uKENlLEtlLG10KXttdC5fdXNlVVRDPSEwLG10Ll90em09bGQoUmksQ2UpfSk7dmFyIHV2PS8oW1wrXC1dfFxkXGQpL2dpO2Z1''@;'; put 'put ''bmN0aW9uIGxkKENlLEtlKXt2YXIgZG4scW4sbXQ9KEtlfHwiIikubWF0Y2goQ2UpO3JldHVybiBudWxsPT09bXQ/bnVsbDowPT09KHFuPTYwKihkbj0oKG10W210Lmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaCh1dil8fFsiLSIsMCwwXSlbMV0rVHQoZG5bMl0pKT8wOiIrIj09PWRuWzBdP3Fu''@;'; put 'put ''Oi1xbn1mdW5jdGlvbiBUNihDZSxLZSl7dmFyIG10LEl0O3JldHVybiBLZS5faXNVVEM/KG10PUtlLmNsb25lKCksSXQ9KF9lKENlKXx8UChDZSk/Q2UudmFsdWVPZigpOnNsKENlKS52YWx1ZU9mKCkpLW10LnZhbHVlT2YoKSxtdC5fZC5zZXRUaW1lKG10Ll9kLnZhbHVlT2YoKStJdCksXy51''@;'; put 'put ''cGRhdGVPZmZzZXQobXQsITEpLG10KTpzbChDZSkubG9jYWwoKX1mdW5jdGlvbiBtdShDZSl7cmV0dXJuLU1hdGgucm91bmQoQ2UuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gXzAoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQyYmMD09PXRoaXMuX29mZnNl''@;'; put 'put ''dH1fLnVwZGF0ZU9mZnNldD1mdW5jdGlvbigpe307dmFyIEE2PS9eKC18XCspPyg/OihcZCopWy4gXSk/KFxkKyk6KFxkKykoPzo6KFxkKykoXC5cZCopPyk/JC8sZTI9L14oLXxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0q''@;'; put 'put ''KVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO2Z1bmN0aW9uIEpsKENlLEtlKXt2YXIgZG4scW4saWksbXQ9Q2UsSXQ9bnVsbDtyZXR1cm4gbDUoQ2UpP210PXttczpD''@;'; put 'put ''ZS5fbWlsbGlzZWNvbmRzLGQ6Q2UuX2RheXMsTTpDZS5fbW9udGhzfTpqKENlKXx8IWlzTmFOKCtDZSk/KG10PXt9LEtlP210W0tlXT0rQ2U6bXQubWlsbGlzZWNvbmRzPStDZSk6KEl0PUE2LmV4ZWMoQ2UpKT8oZG49Ii0iPT09SXRbMV0/LTE6MSxtdD17eTowLGQ6VHQoSXRbdW5dKSpkbixo''@;'; put 'put ''OlR0KEl0W2ZuXSkqZG4sbTpUdChJdFtJaV0pKmRuLHM6VHQoSXRbWHRdKSpkbixtczpUdChnNCgxZTMqSXRbZW5dKSkqZG59KTooSXQ9ZTIuZXhlYyhDZSkpP210PXt5OlIxKEl0WzJdLGRuPSItIj09PUl0WzFdPy0xOjEpLE06UjEoSXRbM10sZG4pLHc6UjEoSXRbNF0sZG4pLGQ6UjEoSXRb''@;'; put 'put ''NV0sZG4pLGg6UjEoSXRbNl0sZG4pLG06UjEoSXRbN10sZG4pLHM6UjEoSXRbOF0sZG4pfTpudWxsPT1tdD9tdD17fToib2JqZWN0Ij09dHlwZW9mIG10JiYoImZyb20iaW4gbXR8fCJ0byJpbiBtdCkmJihpaT1mdW5jdGlvbiB0cyhDZSxLZSl7dmFyIG10O3JldHVybiBDZS5pc1ZhbGlkKCkm''@;'; put 'put ''JktlLmlzVmFsaWQoKT8oS2U9VDYoS2UsQ2UpLENlLmlzQmVmb3JlKEtlKT9tdD1JMChDZSxLZSk6KChtdD1JMChLZSxDZSkpLm1pbGxpc2Vjb25kcz0tbXQubWlsbGlzZWNvbmRzLG10Lm1vbnRocz0tbXQubW9udGhzKSxtdCk6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oc2wobXQuZnJv''@;'; put 'put ''bSksc2wobXQudG8pKSwobXQ9e30pLm1zPWlpLm1pbGxpc2Vjb25kcyxtdC5NPWlpLm1vbnRocykscW49bmV3IHBmKG10KSxsNShDZSkmJkYoQ2UsIl9sb2NhbGUiKSYmKHFuLl9sb2NhbGU9Q2UuX2xvY2FsZSksbDUoQ2UpJiZGKENlLCJfaXNWYWxpZCIpJiYocW4uX2lzVmFsaWQ9Q2UuX2lz''@;'; put 'put ''VmFsaWQpLHFufWZ1bmN0aW9uIFIxKENlLEtlKXt2YXIgbXQ9Q2UmJnBhcnNlRmxvYXQoQ2UucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKG10KT8wOm10KSpLZX1mdW5jdGlvbiBJMChDZSxLZSl7dmFyIG10PXt9O3JldHVybiBtdC5tb250aHM9S2UubW9udGgoKS1DZS5tb250aCgp''@;'; put 'put ''KzEyKihLZS55ZWFyKCktQ2UueWVhcigpKSxDZS5jbG9uZSgpLmFkZChtdC5tb250aHMsIk0iKS5pc0FmdGVyKEtlKSYmLS1tdC5tb250aHMsbXQubWlsbGlzZWNvbmRzPStLZS0rQ2UuY2xvbmUoKS5hZGQobXQubW9udGhzLCJNIiksbXR9ZnVuY3Rpb24gdDIoQ2UsS2Upe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihtdCxJdCl7dmFyIHFuO3JldHVybiBudWxsIT09SXQmJiFpc05hTigrSXQpJiYoeihLZSwibW9tZW50KCkuIitLZSsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLiIrS2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50''@;'; put 'put ''anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxxbj1tdCxtdD1JdCxJdD1xbiksTDModGhpcyxKbChtdCxJdCksQ2UpLHRoaXN9fWZ1bmN0aW9uIEwzKENlLEtlLG10LEl0KXt2YXIgZG49S2UuX21pbGxpc2Vjb25kcyxxbj1nNChL''@;'; put 'put ''ZS5fZGF5cyksaWk9ZzQoS2UuX21vbnRocyk7Q2UuaXNWYWxpZCgpJiYoSXQ9SXQ/PyEwLGlpJiZwdShDZSxRcihDZSwiTW9udGgiKStpaSptdCkscW4mJlZpKENlLCJEYXRlIixRcihDZSwiRGF0ZSIpK3FuKm10KSxkbiYmQ2UuX2Quc2V0VGltZShDZS5fZC52YWx1ZU9mKCkrZG4qbXQpLEl0''@;'; put 'put ''JiZfLnVwZGF0ZU9mZnNldChDZSxxbnx8aWkpKX1KbC5mbj1wZi5wcm90b3R5cGUsSmwuaW52YWxpZD1mdW5jdGlvbiB0MCgpe3JldHVybiBKbChOYU4pfTt2YXIgazY9dDIoMSwiYWRkIiksdTU9dDIoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gTzMoQ2Upe3JldHVybiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgQ2V8fENlIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIEpzKENlKXtyZXR1cm4gX2UoQ2UpfHxQKENlKXx8TzMoQ2UpfHxqKENlKXx8ZnVuY3Rpb24gRncoQ2Upe3ZhciBLZT1OKENlKSxtdD0hMTtyZXR1cm4gS2UmJihtdD0wPT09Q2UuZmlsdGVyKGZ1bmN0aW9uKEl0KXtyZXR1cm4h''@;'; put 'put ''aihJdCkmJk8zKENlKX0pLmxlbmd0aCksS2UmJm10fShDZSl8fGZ1bmN0aW9uIE5uKENlKXt2YXIgZG4sS2U9dyhDZSkmJiFIKENlKSxtdD0hMSxJdD1bInllYXJzIiwieWVhciIsInkiLCJtb250aHMiLCJtb250aCIsIk0iLCJkYXlzIiwiZGF5IiwiZCIsImRhdGVzIiwiZGF0ZSIsIkQiLCJo''@;'; put 'put ''b3VycyIsImhvdXIiLCJoIiwibWludXRlcyIsIm1pbnV0ZSIsIm0iLCJzZWNvbmRzIiwic2Vjb25kIiwicyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibXMiXSxpaT1JdC5sZW5ndGg7Zm9yKGRuPTA7ZG48aWk7ZG4rPTEpbXQ9bXR8fEYoQ2UsSXRbZG5dKTtyZXR1cm4gS2UmJm10''@;'; put 'put ''fShDZSl8fG51bGw9PUNlfWZ1bmN0aW9uIFAzKENlLEtlKXtpZihDZS5kYXRlKCk8S2UuZGF0ZSgpKXJldHVybi1QMyhLZSxDZSk7dmFyIG10PTEyKihLZS55ZWFyKCktQ2UueWVhcigpKSsoS2UubW9udGgoKS1DZS5tb250aCgpKSxJdD1DZS5jbG9uZSgpLmFkZChtdCwibW9udGhzIik7cmV0''@;'; put 'put ''dXJuLShtdCsoS2UtSXQ8MD8oS2UtSXQpLyhJdC1DZS5jbG9uZSgpLmFkZChtdC0xLCJtb250aHMiKSk6KEtlLUl0KS8oQ2UuY2xvbmUoKS5hZGQobXQrMSwibW9udGhzIiktSXQpKSl8fDB9ZnVuY3Rpb24gS2EoQ2Upe3ZhciBLZTtyZXR1cm4gdm9pZCAwPT09Q2U/dGhpcy5fbG9jYWxlLl9h''@;'; put 'put ''YmJyOihudWxsIT0oS2U9dGEoQ2UpKSYmKHRoaXMuX2xvY2FsZT1LZSksdGhpcyl9Xy5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsXy5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgVnI9U2UoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXBy''@;'; put 'put ''ZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuIixmdW5jdGlvbihDZSl7cmV0dXJuIHZvaWQgMD09PUNlP3RoaXMubG9jYWxl''@;'; put 'put ''RGF0YSgpOnRoaXMubG9jYWxlKENlKX0pO2Z1bmN0aW9uIHlmKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIga2k9NmU0LGI0PTYwKmtpLEVyPTM1MDYzMjgqYjQ7ZnVuY3Rpb24gbGwoQ2UsS2Upe3JldHVybihDZSVLZStLZSklS2V9ZnVuY3Rpb24gVm8oQ2UsS2UsbXQpe3JldHVybiBDZTwx''@;'; put 'put ''MDAmJkNlPj0wP25ldyBEYXRlKENlKzQwMCxLZSxtdCktRXI6bmV3IERhdGUoQ2UsS2UsbXQpLnZhbHVlT2YoKX1mdW5jdGlvbiB4YyhDZSxLZSxtdCl7cmV0dXJuIENlPDEwMCYmQ2U+PTA/RGF0ZS5VVEMoQ2UrNDAwLEtlLG10KS1FcjpEYXRlLlVUQyhDZSxLZSxtdCl9ZnVuY3Rpb24gRjMo''@;'; put 'put ''Q2UsS2Upe3JldHVybiBLZS5lcmFzQWJiclJlZ2V4KENlKX1mdW5jdGlvbiBoYygpe3ZhciBkbixxbixpaSxJYSxTbyxDZT1bXSxLZT1bXSxtdD1bXSxJdD1bXSxmcz10aGlzLmVyYXMoKTtmb3IoZG49MCxxbj1mcy5sZW5ndGg7ZG48cW47KytkbilpaT1yaShmc1tkbl0ubmFtZSksSWE9cmko''@;'; put 'put ''ZnNbZG5dLmFiYnIpLFNvPXJpKGZzW2RuXS5uYXJyb3cpLEtlLnB1c2goaWkpLENlLnB1c2goSWEpLG10LnB1c2goU28pLEl0LnB1c2goaWkpLEl0LnB1c2goSWEpLEl0LnB1c2goU28pO3RoaXMuX2VyYXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMu''@;'; put 'put ''X2VyYXNOYW1lUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzQWJiclJlZ2V4PW5ldyBSZWdFeHAoIl4oIitDZS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc05hcnJvd1JlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIiki''@;'; put 'put ''LCJpIil9ZnVuY3Rpb24gY2QoQ2UsS2Upe2xlKDAsW0NlLENlLmxlbmd0aF0sMCxLZSl9ZnVuY3Rpb24gU3YoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbjtyZXR1cm4gbnVsbD09Q2U/THUodGhpcyxJdCxkbikueWVhcjooS2U+KHFuPVByKENlLEl0LGRuKSkmJihLZT1xbiksWXcuY2FsbCh0aGlz''@;'; put 'put ''LENlLEtlLG10LEl0LGRuKSl9ZnVuY3Rpb24gWXcoQ2UsS2UsbXQsSXQsZG4pe3ZhciBxbj1IYShDZSxLZSxtdCxJdCxkbiksaWk9SnIocW4ueWVhciwwLHFuLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihpaS5nZXRVVENGdWxsWWVhcigpKSx0aGlzLm1vbnRoKGlpLmdldFVUQ01vbnRo''@;'; put 'put ''KCkpLHRoaXMuZGF0ZShpaS5nZXRVVENEYXRlKCkpLHRoaXN9bGUoIk4iLDAsMCwiZXJhQWJiciIpLGxlKCJOTiIsMCwwLCJlcmFBYmJyIiksbGUoIk5OTiIsMCwwLCJlcmFBYmJyIiksbGUoIk5OTk4iLDAsMCwiZXJhTmFtZSIpLGxlKCJOTk5OTiIsMCwwLCJlcmFOYXJyb3ciKSxsZSgieSIs''@;'; put 'put ''WyJ5IiwxXSwieW8iLCJlcmFZZWFyIiksbGUoInkiLFsieXkiLDJdLDAsImVyYVllYXIiKSxsZSgieSIsWyJ5eXkiLDNdLDAsImVyYVllYXIiKSxsZSgieSIsWyJ5eXl5Iiw0XSwwLCJlcmFZZWFyIiksUm4oIk4iLEYzKSxSbigiTk4iLEYzKSxSbigiTk5OIixGMyksUm4oIk5OTk4iLGZ1bmN0''@;'; put 'put ''aW9uIFp3KENlLEtlKXtyZXR1cm4gS2UuZXJhc05hbWVSZWdleChDZSl9KSxSbigiTk5OTk4iLGZ1bmN0aW9uIEg2KENlLEtlKXtyZXR1cm4gS2UuZXJhc05hcnJvd1JlZ2V4KENlKX0pLGh0KFsiTiIsIk5OIiwiTk5OIiwiTk5OTiIsIk5OTk5OIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3Zh''@;'; put 'put ''ciBkbj1tdC5fbG9jYWxlLmVyYXNQYXJzZShDZSxJdCxtdC5fc3RyaWN0KTtkbj9aKG10KS5lcmE9ZG46WihtdCkuaW52YWxpZEVyYT1DZX0pLFJuKCJ5IixjaSksUm4oInl5IixjaSksUm4oInl5eSIsY2kpLFJuKCJ5eXl5IixjaSksUm4oInlvIixmdW5jdGlvbiBIMyhDZSxLZSl7cmV0dXJu''@;'; put 'put ''IEtlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4fHxjaX0pLGh0KFsieSIsInl5IiwieXl5IiwieXl5eSJdLHp0KSxodChbInlvIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe3ZhciBkbjttdC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4JiYoZG49Q2UubWF0Y2gobXQuX2xvY2FsZS5fZXJhWWVh''@;'; put 'put ''ck9yZGluYWxSZWdleCkpLEtlW3p0XT1tdC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2U/bXQuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKENlLGRuKTpwYXJzZUludChDZSwxMCl9KSxsZSgwLFsiZ2ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0p''@;'; put 'put ''LGxlKDAsWyJHRyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSksY2QoImdnZ2ciLCJ3ZWVrWWVhciIpLGNkKCJnZ2dnZyIsIndlZWtZZWFyIiksY2QoIkdHR0ciLCJpc29XZWVrWWVhciIpLGNkKCJHR0dHRyIsImlzb1dlZWtZZWFyIiksUm4oIkciLFF0''@;'; put 'put ''KSxSbigiZyIsUXQpLFJuKCJHRyIsdHQsU3QpLFJuKCJnZyIsdHQsU3QpLFJuKCJHR0dHIixSdCxpdCksUm4oImdnZ2ciLFJ0LGl0KSxSbigiR0dHR0ciLFB0LCRlKSxSbigiZ2dnZ2ciLFB0LCRlKSx4dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLGZ1bmN0aW9uKENlLEtlLG10''@;'; put 'put ''LEl0KXtLZVtJdC5zdWJzdHIoMCwyKV09VHQoQ2UpfSkseHQoWyJnZyIsIkdHIl0sZnVuY3Rpb24oQ2UsS2UsbXQsSXQpe0tlW0l0XT1fLnBhcnNlVHdvRGlnaXRZZWFyKENlKX0pLGxlKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxSbigiUSIseXQpLGh0KCJRIixmdW5jdGlvbihDZSxLZSl7S2Vb''@;'; put 'put ''aGldPTMqKFR0KENlKS0xKX0pLGxlKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksUm4oIkQiLHR0LE9yKSxSbigiREQiLHR0LFN0KSxSbigiRG8iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gQ2U/S2UuX2RheU9mTW9udGhPcmRpbmFsUGFyc2V8fEtlLl9vcmRpbmFsUGFyc2U6S2UuX2RheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSksaHQoWyJEIiwiREQiXSx1biksaHQoIkRvIixmdW5jdGlvbihDZSxLZSl7S2VbdW5dPVR0KENlLm1hdGNoKHR0KVswXSl9KTt2YXIgcTA9ZWkoIkRhdGUiLCEwKTtsZSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksUm4oIkRE''@;'; put 'put ''RCIscXQpLFJuKCJEREREIixEdCksaHQoWyJEREQiLCJEREREIl0sZnVuY3Rpb24oQ2UsS2UsbXQpe210Ll9kYXlPZlllYXI9VHQoQ2UpfSksbGUoIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIpLFJuKCJtIix0dCxXdCksUm4oIm1tIix0dCxTdCksaHQoWyJtIiwibW0iXSxJaSk7dmFyIHdmPWVp''@;'; put 'put ''KCJNaW51dGVzIiwhMSk7bGUoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLFJuKCJzIix0dCxXdCksUm4oInNzIix0dCxTdCksaHQoWyJzIiwic3MiXSxYdCk7dmFyIGloLFY2LENmPWVpKCJTZWNvbmRzIiwhMSk7Zm9yKGxlKCJTIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxp''@;'; put 'put ''c2Vjb25kKCkvMTAwKX0pLGxlKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxsZSgwLFsiU1NTIiwzXSwwLCJtaWxsaXNlY29uZCIpLGxlKDAsWyJTU1NTIiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQo''@;'; put 'put ''KX0pLGxlKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSksbGUoMCxbIlNTU1NTUyIsNl0sMCxmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSksbGUoMCxbIlNTU1NTU1MiLDddLDAsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLGxlKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSksbGUoMCxbIlNTU1NTU1NTUyIsOV0sMCxmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSksUm4oIlMi''@;'; put 'put ''LHF0LHl0KSxSbigiU1MiLHF0LFN0KSxSbigiU1NTIixxdCxEdCksaWg9IlNTU1MiO2loLmxlbmd0aDw9OTtpaCs9IlMiKVJuKGloLGNpKTtmdW5jdGlvbiBIYyhDZSxLZSl7S2VbZW5dPVR0KDFlMyooIjAuIitDZSkpfWZvcihpaD0iUyI7aWgubGVuZ3RoPD05O2loKz0iUyIpaHQoaWgsSGMp''@;'; put 'put ''O1Y2PWVpKCJNaWxsaXNlY29uZHMiLCExKSxsZSgieiIsMCwwLCJ6b25lQWJiciIpLGxlKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciB6aT1nZS5wcm90b3R5cGU7ZnVuY3Rpb24geHYoQ2Upe3JldHVybiBDZX16aS5hZGQ9azYsemkuY2FsZW5kYXI9ZnVuY3Rpb24gaDUoQ2UsS2UpezE9PT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoJiYoYXJndW1lbnRzWzBdP0pzKGFyZ3VtZW50c1swXSk/KENlPWFyZ3VtZW50c1swXSxLZT12b2lkIDApOmZ1bmN0aW9uIG00KENlKXt2YXIgZG4sS2U9dyhDZSkmJiFIKENlKSxtdD0hMSxJdD1bInNhbWVEYXkiLCJuZXh0RGF5IiwibGFzdERheSIsIm5leHRXZWVr''@;'; put 'put ''IiwibGFzdFdlZWsiLCJzYW1lRWxzZSJdO2Zvcihkbj0wO2RuPEl0Lmxlbmd0aDtkbis9MSltdD1tdHx8RihDZSxJdFtkbl0pO3JldHVybiBLZSYmbXR9KGFyZ3VtZW50c1swXSkmJihLZT1hcmd1bWVudHNbMF0sQ2U9dm9pZCAwKTooQ2U9dm9pZCAwLEtlPXZvaWQgMCkpO3ZhciBtdD1DZXx8''@;'; put 'put ''c2woKSxJdD1UNihtdCx0aGlzKS5zdGFydE9mKCJkYXkiKSxkbj1fLmNhbGVuZGFyRm9ybWF0KHRoaXMsSXQpfHwic2FtZUVsc2UiLHFuPUtlJiYoZyhLZVtkbl0pP0tlW2RuXS5jYWxsKHRoaXMsbXQpOktlW2RuXSk7cmV0dXJuIHRoaXMuZm9ybWF0KHFufHx0aGlzLmxvY2FsZURhdGEoKS5j''@;'; put 'put ''YWxlbmRhcihkbix0aGlzLHNsKG10KSkpfSx6aS5jbG9uZT1mdW5jdGlvbiB2Zigpe3JldHVybiBuZXcgZ2UodGhpcyl9LHppLmRpZmY9ZnVuY3Rpb24gTWMoQ2UsS2UsbXQpe3ZhciBJdCxkbixxbjtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKEl0PVQ2KENlLHRoaXMpKS5p''@;'; put 'put ''c1ZhbGlkKCkpcmV0dXJuIE5hTjtzd2l0Y2goZG49NmU0KihJdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxLZT1fdChLZSkpe2Nhc2UieWVhciI6cW49UDModGhpcyxJdCkvMTI7YnJlYWs7Y2FzZSJtb250aCI6cW49UDModGhpcyxJdCk7YnJlYWs7Y2FzZSJxdWFydGVyIjpxbj1Q''@;'; put 'put ''Myh0aGlzLEl0KS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjpxbj0odGhpcy1JdCkvMWUzO2JyZWFrO2Nhc2UibWludXRlIjpxbj0odGhpcy1JdCkvNmU0O2JyZWFrO2Nhc2UiaG91ciI6cW49KHRoaXMtSXQpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOnFuPSh0aGlzLUl0LWRuKS84NjRlNTticmVhaztj''@;'; put 'put ''YXNlIndlZWsiOnFuPSh0aGlzLUl0LWRuKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDpxbj10aGlzLUl0fXJldHVybiBtdD9xbjpXZShxbil9LHppLmVuZE9mPWZ1bmN0aW9uIG4yKENlKXt2YXIgS2UsbXQ7aWYodm9pZCAwPT09KENlPV90KENlKSl8fCJtaWxsaXNlY29uZCI9PT1DZXx8IXRoaXMu''@;'; put 'put ''aXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChtdD10aGlzLl9pc1VUQz94YzpWbyxDZSl7Y2FzZSJ5ZWFyIjpLZT1tdCh0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7''@;'; put 'put ''YnJlYWs7Y2FzZSJtb250aCI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKzEsMSktMTticmVhaztjYXNlIndlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6S2U9bXQodGhp''@;'; put 'put ''cy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSsxKS0xO2JyZWFrO2Nhc2UiaG91ciI6S2U9dGhpcy5fZC52''@;'; put 'put ''YWx1ZU9mKCksS2UrPWI0LWxsKEtlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqa2kpLGI0KS0xO2JyZWFrO2Nhc2UibWludXRlIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9a2ktbGwoS2Usa2kpLTE7YnJlYWs7Y2FzZSJzZWNvbmQiOktlPXRoaXMuX2QudmFsdWVPZigpLEtl''@;'; put 'put ''Kz0xZTMtbGwoS2UsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoS2UpLF8udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHppLmZvcm1hdD1mdW5jdGlvbiBndihDZSl7Q2V8fChDZT10aGlzLmlzVXRjKCk/Xy5kZWZhdWx0Rm9ybWF0VXRjOl8uZGVmYXVsdEZvcm1hdCk7dmFyIEtl''@;'; put 'put ''PVFlKHRoaXMsQ2UpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KEtlKX0semkuZnJvbT1mdW5jdGlvbiBOdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoX2UoQ2UpJiZDZS5pc1ZhbGlkKCl8fHNsKENlKS5pc1ZhbGlkKCkpP0psKHt0bzp0aGlzLGZyb206Q2V9''@;'; put 'put ''KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIUtlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSx6aS5mcm9tTm93PWZ1bmN0aW9uIG12KENlKXtyZXR1cm4gdGhpcy5mcm9tKHNsKCksQ2UpfSx6aS50bz1mdW5jdGlvbiBWdyhDZSxLZSl7cmV0dXJuIHRoaXMuaXNW''@;'; put 'put ''YWxpZCgpJiYoX2UoQ2UpJiZDZS5pc1ZhbGlkKCl8fHNsKENlKS5pc1ZhbGlkKCkpP0psKHtmcm9tOnRoaXMsdG86Q2V9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIUtlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSx6aS50b05vdz1mdW5jdGlvbiBCdyhDZSl7''@;'; put 'put ''cmV0dXJuIHRoaXMudG8oc2woKSxDZSl9LHppLmdldD1mdW5jdGlvbiBOaShDZSl7cmV0dXJuIGcodGhpc1tDZT1fdChDZSldKT90aGlzW0NlXSgpOnRoaXN9LHppLmludmFsaWRBdD1mdW5jdGlvbiByaCgpe3JldHVybiBaKHRoaXMpLm92ZXJmbG93fSx6aS5pc0FmdGVyPWZ1bmN0aW9uIEQ2''@;'; put 'put ''KENlLEtlKXt2YXIgbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bXQudmFsdWVPZigpOm10LnZhbHVlT2YoKTx0aGlzLmNs''@;'; put 'put ''b25lKCkuc3RhcnRPZihLZSkudmFsdWVPZigpKX0semkuaXNCZWZvcmU9ZnVuY3Rpb24gaHYoQ2UsS2Upe3ZhciBtdD1fZShDZSk/Q2U6c2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbXQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlzZWNv''@;'; put 'put ''bmQiKT90aGlzLnZhbHVlT2YoKTxtdC52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKEtlKS52YWx1ZU9mKCk8bXQudmFsdWVPZigpKX0semkuaXNCZXR3ZWVuPWZ1bmN0aW9uIEk2KENlLEtlLG10LEl0KXt2YXIgZG49X2UoQ2UpP0NlOnNsKENlKSxxbj1fZShLZSk/S2U6c2woS2UpO3Jl''@;'; put 'put ''dHVybiEhKHRoaXMuaXNWYWxpZCgpJiZkbi5pc1ZhbGlkKCkmJnFuLmlzVmFsaWQoKSkmJigiKCI9PT0oSXQ9SXR8fCIoKSIpWzBdP3RoaXMuaXNBZnRlcihkbixtdCk6IXRoaXMuaXNCZWZvcmUoZG4sbXQpKSYmKCIpIj09PUl0WzFdP3RoaXMuaXNCZWZvcmUocW4sbXQpOiF0aGlzLmlzQWZ0''@;'; put 'put ''ZXIocW4sbXQpKX0semkuaXNTYW1lPWZ1bmN0aW9uIHY0KENlLEtlKXt2YXIgSXQsbXQ9X2UoQ2UpP0NlOnNsKENlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KEtlPV90KEtlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9m''@;'; put 'put ''KCk9PT1tdC52YWx1ZU9mKCk6KEl0PW10LnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZihLZSkudmFsdWVPZigpPD1JdCYmSXQ8PXRoaXMuY2xvbmUoKS5lbmRPZihLZSkudmFsdWVPZigpKSl9LHppLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24gcjAoQ2UsS2Upe3JldHVybiB0aGlzLmlz''@;'; put 'put ''U2FtZShDZSxLZSl8fHRoaXMuaXNBZnRlcihDZSxLZSl9LHppLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uIEh3KENlLEtlKXtyZXR1cm4gdGhpcy5pc1NhbWUoQ2UsS2UpfHx0aGlzLmlzQmVmb3JlKENlLEtlKX0semkuaXNWYWxpZD1mdW5jdGlvbiBiZigpe3JldHVybiBRKHRoaXMpfSx6aS5s''@;'; put 'put ''YW5nPVZyLHppLmxvY2FsZT1LYSx6aS5sb2NhbGVEYXRhPXlmLHppLm1heD1Mdyx6aS5taW49STMsemkucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uIHp3KCl7cmV0dXJuIFkoe30sWih0aGlzKSl9LHppLnNldD1mdW5jdGlvbiBEYShDZSxLZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBDZSl7dmFyIEl0''@;'; put 'put ''LG10PWZ1bmN0aW9uIGxuKENlKXt2YXIgbXQsS2U9W107Zm9yKG10IGluIENlKUYoQ2UsbXQpJiZLZS5wdXNoKHt1bml0Om10LHByaW9yaXR5OkplW210XX0pO3JldHVybiBLZS5zb3J0KGZ1bmN0aW9uKEl0LGRuKXtyZXR1cm4gSXQucHJpb3JpdHktZG4ucHJpb3JpdHl9KSxLZX0oQ2U9bnQo''@;'; put 'put ''Q2UpKSxkbj1tdC5sZW5ndGg7Zm9yKEl0PTA7SXQ8ZG47SXQrKyl0aGlzW210W0l0XS51bml0XShDZVttdFtJdF0udW5pdF0pfWVsc2UgaWYoZyh0aGlzW0NlPV90KENlKV0pKXJldHVybiB0aGlzW0NlXShLZSk7cmV0dXJuIHRoaXN9LHppLnN0YXJ0T2Y9ZnVuY3Rpb24gZXUoQ2Upe3ZhciBL''@;'; put 'put ''ZSxtdDtpZih2b2lkIDA9PT0oQ2U9X3QoQ2UpKXx8Im1pbGxpc2Vjb25kIj09PUNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKG10PXRoaXMuX2lzVVRDP3hjOlZvLENlKXtjYXNlInllYXIiOktlPW10KHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjpL''@;'; put 'put ''ZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Uid2VlayI6S2U9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMu''@;'; put 'put ''d2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOktlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUo''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSJob3VyIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2UrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpraSksYjQpO2JyZWFrO2Nhc2UibWludXRlIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2Usa2kpO2JyZWFrO2Nhc2Uic2Vjb25kIjpL''@;'; put 'put ''ZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09bGwoS2UsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKEtlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSx6aS5zdWJ0cmFjdD11NSx6aS50b0FycmF5PWZ1bmN0aW9uIHA1KCl7dmFyIENlPXRoaXM7cmV0dXJuW0NlLnllYXIoKSxDZS5t''@;'; put 'put ''b250aCgpLENlLmRhdGUoKSxDZS5ob3VyKCksQ2UubWludXRlKCksQ2Uuc2Vjb25kKCksQ2UubWlsbGlzZWNvbmQoKV19LHppLnRvT2JqZWN0PWZ1bmN0aW9uIHZ2KCl7dmFyIENlPXRoaXM7cmV0dXJue3llYXJzOkNlLnllYXIoKSxtb250aHM6Q2UubW9udGgoKSxkYXRlOkNlLmRhdGUoKSxo''@;'; put 'put ''b3VyczpDZS5ob3VycygpLG1pbnV0ZXM6Q2UubWludXRlcygpLHNlY29uZHM6Q2Uuc2Vjb25kcygpLG1pbGxpc2Vjb25kczpDZS5taWxsaXNlY29uZHMoKX19LHppLnRvRGF0ZT1mdW5jdGlvbiBSMCgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LHppLnRvSVNPU3RyaW5nPWZ1''@;'; put 'put ''bmN0aW9uIGZ2KENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIEtlPSEwIT09Q2UsbXQ9S2U/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIG10LnllYXIoKTwwfHxtdC55ZWFyKCk+OTk5OT9RZShtdCxLZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pd''@;'; put 'put ''IjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOmcoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP0tlP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSs2MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNl''@;'; put 'put ''KCJaIixRZShtdCwiWiIpKTpRZShtdCxLZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LHppLmluc3BlY3Q9ZnVuY3Rpb24gcHYoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5f''@;'; put 'put ''aSsiICovKSI7dmFyIG10LEl0LENlPSJtb21lbnQiLEtlPSIiO3JldHVybiB0aGlzLmlzTG9jYWwoKXx8KENlPTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBhcnNlWm9uZSIsS2U9IloiKSxtdD0iWyIrQ2UrJygiXScsSXQ9MDw9dGhpcy55ZWFyKCkmJnRoaXMu''@;'; put 'put ''eWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIix0aGlzLmZvcm1hdChtdCtJdCsiLU1NLUREW1RdSEg6bW06c3MuU1NTIitLZSsnWyIpXScpfSx0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLmZvciYmKHppW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIild''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIk1vbWVudDwiK3RoaXMuZm9ybWF0KCkrIj4ifSksemkudG9KU09OPWZ1bmN0aW9uIGp3KCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSx6aS50b1N0cmluZz1mdW5jdGlvbiB5NCgpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''bG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0semkudW5peD1mdW5jdGlvbiBSNigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LHppLnZhbHVlT2Y9ZnVuY3Rpb24gUHUoKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9m''@;'; put 'put ''KCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSx6aS5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24geXYoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSx6aS5lcmFOYW1lPWZ1''@;'; put 'put ''bmN0aW9uIFV3KCl7dmFyIENlLEtlLG10LEl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9bXQmJm10PD1JdFtDZV0udW50aWx8''@;'; put 'put ''fEl0W0NlXS51bnRpbDw9bXQmJm10PD1JdFtDZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5uYW1lO3JldHVybiIifSx6aS5lcmFOYXJyb3c9ZnVuY3Rpb24gTzYoKXt2YXIgQ2UsS2UsbXQsSXQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0Nl''@;'; put 'put ''KWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1tdCYmbXQ8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1tdCYmbXQ8PUl0W0NlXS5zaW5jZSlyZXR1cm4gSXRbQ2VdLm5hcnJvdztyZXR1cm4iIn0semkuZXJhQWJicj1mdW5jdGlv''@;'; put 'put ''biBidigpe3ZhciBDZSxLZSxtdCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYobXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxJdFtDZV0uc2luY2U8PW10JiZtdDw9SXRbQ2VdLnVudGlsfHxJdFtD''@;'; put 'put ''ZV0udW50aWw8PW10JiZtdDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0uYWJicjtyZXR1cm4iIn0semkuZXJhWWVhcj1mdW5jdGlvbiBfdigpe3ZhciBDZSxLZSxtdCxJdCxkbj10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9ZG4ubGVuZ3RoO0NlPEtlOysrQ2UpaWYo''@;'; put 'put ''bXQ9ZG5bQ2VdLnNpbmNlPD1kbltDZV0udW50aWw/MTotMSxJdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLGRuW0NlXS5zaW5jZTw9SXQmJkl0PD1kbltDZV0udW50aWx8fGRuW0NlXS51bnRpbDw9SXQmJkl0PD1kbltDZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigp''@;'; put 'put ''LV8oZG5bQ2VdLnNpbmNlKS55ZWFyKCkpKm10K2RuW0NlXS5vZmZzZXQ7cmV0dXJuIHRoaXMueWVhcigpfSx6aS55ZWFyPVduLHppLmlzTGVhcFllYXI9ZnVuY3Rpb24gJGkoKXtyZXR1cm4gcm4odGhpcy55ZWFyKCkpfSx6aS53ZWVrWWVhcj1mdW5jdGlvbiBnNShDZSl7cmV0dXJuIFN2LmNh''@;'; put 'put ''bGwodGhpcyxDZSx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSt0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LHppLmlzb1dlZWtZZWFyPWZ1bmN0aW9uIHd2KENlKXtyZXR1cm4gU3Yu''@;'; put 'put ''Y2FsbCh0aGlzLENlLHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LHppLnF1YXJ0ZXI9emkucXVhcnRlcnM9ZnVuY3Rpb24gbTUoQ2Upe3JldHVybiBudWxsPT1DZT9NYXRoLmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKDMqKENlLTEpK3RoaXMubW9u''@;'; put 'put ''dGgoKSUzKX0semkubW9udGg9TGMsemkuZGF5c0luTW9udGg9ZnVuY3Rpb24gRDAoKXtyZXR1cm4gcGEodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0semkud2Vlaz16aS53ZWVrcz1mdW5jdGlvbiBZaShDZSl7dmFyIEtlPXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51''@;'; put 'put ''bGw9PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSx6aS5pc29XZWVrPXppLmlzb1dlZWtzPWZ1bmN0aW9uIGJsKENlKXt2YXIgS2U9THUodGhpcywxLDQpLndlZWs7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSx6aS53ZWVrc0luWWVhcj1mdW5jdGlv''@;'; put 'put ''biBOMygpe3ZhciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUHIodGhpcy55ZWFyKCksQ2UuZG93LENlLmRveSl9LHppLndlZWtzSW5XZWVrWWVhcj1mdW5jdGlvbiBXdygpe3ZhciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUHIodGhpcy53ZWVrWWVhcigp''@;'; put 'put ''LENlLmRvdyxDZS5kb3kpfSx6aS5pc29XZWVrc0luWWVhcj1mdW5jdGlvbiBONigpe3JldHVybiBQcih0aGlzLnllYXIoKSwxLDQpfSx6aS5pc29XZWVrc0luSVNPV2Vla1llYXI9ZnVuY3Rpb24gQ3YoKXtyZXR1cm4gUHIodGhpcy5pc29XZWVrWWVhcigpLDEsNCl9LHppLmRhdGU9cTAsemku''@;'; put 'put ''ZGF5PXppLmRheXM9ZnVuY3Rpb24gTmEoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPVFyKHRoaXMsIkRheSIpO3JldHVybiBudWxsIT1DZT8oQ2U9ZnVuY3Rpb24gUWMoQ2UsS2Upe3JldHVybiJzdHJpbmciIT10eXBlb2YgQ2U/Q2U6aXNO''@;'; put 'put ''YU4oQ2UpPyJudW1iZXIiPT10eXBlb2YoQ2U9S2Uud2Vla2RheXNQYXJzZShDZSkpP0NlOm51bGw6cGFyc2VJbnQoQ2UsMTApfShDZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoQ2UtS2UsImQiKSk6S2V9LHppLndlZWtkYXk9ZnVuY3Rpb24gRDMoQ2Upe2lmKCF0aGlzLmlzVmFsaWQo''@;'; put 'put ''KSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1DZT9LZTp0aGlzLmFkZChDZS1LZSwiZCIpfSx6aS5pc29XZWVrZGF5PWZ1bmN0aW9uICRoKENlKXtpZighdGhpcy5pc1ZhbGlk''@;'; put 'put ''KCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO2lmKG51bGwhPUNlKXt2YXIgS2U9ZnVuY3Rpb24gbjUoQ2UsS2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/S2Uud2Vla2RheXNQYXJzZShDZSklN3x8Nzppc05hTihDZSk/bnVsbDpDZX0oQ2UsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVy''@;'; put 'put ''biB0aGlzLmRheSh0aGlzLmRheSgpJTc/S2U6S2UtNyl9cmV0dXJuIHRoaXMuZGF5KCl8fDd9LHppLmRheU9mWWVhcj1mdW5jdGlvbiBNdihDZSl7dmFyIEtlPU1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRl''@;'; put 'put ''NSkrMTtyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoQ2UtS2UsImQiKX0semkuaG91cj16aS5ob3Vycz1Wcyx6aS5taW51dGU9emkubWludXRlcz13Zix6aS5zZWNvbmQ9emkuc2Vjb25kcz1DZix6aS5taWxsaXNlY29uZD16aS5taWxsaXNlY29uZHM9VjYsemkudXRjT2Zmc2V0PWZ1bmN0''@;'; put 'put ''aW9uIGdmKENlLEtlLG10KXt2YXIgZG4sSXQ9dGhpcy5fb2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47aWYobnVsbCE9Q2Upe2lmKCJzdHJpbmciPT10eXBlb2YgQ2Upe2lmKG51bGw9PT0oQ2U9bGQoUmksQ2UpKSlyZXR1cm4gdGhpc31lbHNl''@;'; put 'put ''IE1hdGguYWJzKENlKTwxNiYmIW10JiYoQ2UqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJktlJiYoZG49bXUodGhpcykpLHRoaXMuX29mZnNldD1DZSx0aGlzLl9pc1VUQz0hMCxudWxsIT1kbiYmdGhpcy5hZGQoZG4sIm0iKSxJdCE9PUNlJiYoIUtlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNz''@;'; put 'put ''P0wzKHRoaXMsSmwoQ2UtSXQsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9JdDptdSh0''@;'; put 'put ''aGlzKX0semkudXRjPWZ1bmN0aW9uIFIzKENlKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCxDZSl9LHppLmxvY2FsPWZ1bmN0aW9uIFBsKENlKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLENlKSx0aGlzLl9pc1VUQz0hMSxDZSYmdGhpcy5zdWJ0cmFjdChtdSh0aGlz''@;'; put 'put ''KSwibSIpKSx0aGlzfSx6aS5wYXJzZVpvbmU9ZnVuY3Rpb24gT3UoKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIENlPWxkKHNuLHRoaXMuX2kpO251bGwhPUNlP3RoaXMudXRj''@;'; put 'put ''T2Zmc2V0KENlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30semkuaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24gUWgoQ2Upe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJihDZT1DZT9zbChDZSkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1DZSklNjA9PTAp''@;'; put 'put ''fSx6aS5pc0RTVD1mdW5jdGlvbiBtZigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LHppLmlzTG9jYWw9ZnVuY3Rpb24gZHYoKXtyZXR1''@;'; put 'put ''cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LHppLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uIFB3KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LHppLmlzVXRjPV8wLHppLmlzVVRDPV8wLHppLnpvbmVBYmJyPWZ1bmN0aW9uIEI2KCl7cmV0dXJuIHRoaXMuX2lz''@;'; put 'put ''VVRDPyJVVEMiOiIifSx6aS56b25lTmFtZT1mdW5jdGlvbiBqNigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSx6aS5kYXRlcz1TZSgiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLHEwKSx6aS5tb250''@;'; put 'put ''aHM9U2UoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsTGMpLHppLnllYXJzPVNlKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkIixXbiksemkuem9uZT1TZSgibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVk''@;'; put 'put ''LCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLGZ1bmN0aW9uIG4wKENlLEtlKXtyZXR1cm4gbnVsbCE9Q2U/KCJzdHJpbmciIT10eXBlb2YgQ2UmJihDZT0tQ2UpLHRoaXMudXRjT2Zmc2V0KENlLEtl''@;'; put 'put ''KSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLHppLmlzRFNUU2hpZnRlZD1TZSgiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsZnVuY3Rpb24gT3co''@;'; put 'put ''KXtpZighUih0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIEtlLENlPXt9O3JldHVybiBvZShDZSx0aGlzKSwoQ2U9bHYoQ2UpKS5fYT8oS2U9Q2UuX2lzVVRDP0IoQ2UuX2EpOnNsKENlLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlk''@;'; put 'put ''KCkmJmZ1bmN0aW9uIGM1KENlLEtlLG10KXt2YXIgaWksSXQ9TWF0aC5taW4oQ2UubGVuZ3RoLEtlLmxlbmd0aCksZG49TWF0aC5hYnMoQ2UubGVuZ3RoLUtlLmxlbmd0aCkscW49MDtmb3IoaWk9MDtpaTxJdDtpaSsrKShtdCYmQ2VbaWldIT09S2VbaWldfHwhbXQmJlR0KENlW2lpXSkhPT1U''@;'; put 'put ''dChLZVtpaV0pKSYmcW4rKztyZXR1cm4gcW4rZG59KENlLl9hLEtlLnRvQXJyYXkoKSk+MCk6dGhpcy5faXNEU1RTaGlmdGVkPSExLHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciB1bz1DLnByb3RvdHlwZTtmdW5jdGlvbiB0dShDZSxLZSxtdCxJdCl7dmFyIGRuPXRhKCkscW49QigpLnNldChJ''@;'; put 'put ''dCxLZSk7cmV0dXJuIGRuW210XShxbixDZSl9ZnVuY3Rpb24gRWMoQ2UsS2UsbXQpe2lmKGooQ2UpJiYoS2U9Q2UsQ2U9dm9pZCAwKSxDZT1DZXx8IiIsbnVsbCE9S2UpcmV0dXJuIHR1KENlLEtlLG10LCJtb250aCIpO3ZhciBJdCxkbj1bXTtmb3IoSXQ9MDtJdDwxMjtJdCsrKWRuW0l0XT10''@;'; put 'put ''dShDZSxJdCxtdCwibW9udGgiKTtyZXR1cm4gZG59ZnVuY3Rpb24gYTAoQ2UsS2UsbXQsSXQpeyJib29sZWFuIj09dHlwZW9mIENlPyhqKEtlKSYmKG10PUtlLEtlPXZvaWQgMCksS2U9S2V8fCIiKToobXQ9S2U9Q2UsQ2U9ITEsaihLZSkmJihtdD1LZSxLZT12b2lkIDApLEtlPUtlfHwiIik7''@;'; put 'put ''dmFyIGlpLGRuPXRhKCkscW49Q2U/ZG4uX3dlZWsuZG93OjAsSWE9W107aWYobnVsbCE9bXQpcmV0dXJuIHR1KEtlLChtdCtxbiklNyxJdCwiZGF5Iik7Zm9yKGlpPTA7aWk8NztpaSsrKUlhW2lpXT10dShLZSwoaWkrcW4pJTcsSXQsImRheSIpO3JldHVybiBJYX11by5jYWxlbmRhcj1mdW5j''@;'; put 'put ''dGlvbiBVKENlLEtlLG10KXt2YXIgSXQ9dGhpcy5fY2FsZW5kYXJbQ2VdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gZyhJdCk/SXQuY2FsbChLZSxtdCk6SXR9LHVvLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uIHZlKENlKXt2YXIgS2U9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2Vd''@;'; put 'put ''LG10PXRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlLnRvVXBwZXJDYXNlKCldO3JldHVybiBLZXx8IW10P0tlOih0aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV09bXQubWF0Y2gobSkubWFwKGZ1bmN0aW9uKEl0KXtyZXR1cm4iTU1NTSI9PT1JdHx8Ik1NIj09PUl0fHwiREQiPT09SXR8fCJkZGRkIj09''@;'; put 'put ''PUl0P0l0LnNsaWNlKDEpOkl0fSkuam9pbigiIiksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdKX0sdW8uaW52YWxpZERhdGU9ZnVuY3Rpb24gQmUoKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LHVvLm9yZGluYWw9ZnVuY3Rpb24gUmUoQ2Upe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxh''@;'; put 'put ''Y2UoIiVkIixDZSl9LHVvLnByZXBhcnNlPXh2LHVvLnBvc3Rmb3JtYXQ9eHYsdW8ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uIEhlKENlLEtlLG10LEl0KXt2YXIgZG49dGhpcy5fcmVsYXRpdmVUaW1lW210XTtyZXR1cm4gZyhkbik/ZG4oQ2UsS2UsbXQsSXQpOmRuLnJlcGxhY2UoLyVkL2ksQ2Up''@;'; put 'put ''fSx1by5wYXN0RnV0dXJlPWZ1bmN0aW9uIERlKENlLEtlKXt2YXIgbXQ9dGhpcy5fcmVsYXRpdmVUaW1lW0NlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gZyhtdCk/bXQoS2UpOm10LnJlcGxhY2UoLyVzL2ksS2UpfSx1by5zZXQ9ZnVuY3Rpb24geShDZSl7dmFyIEtlLG10O2ZvcihtdCBp''@;'; put 'put ''biBDZSlGKENlLG10KSYmKGcoS2U9Q2VbbXRdKT90aGlzW210XT1LZTp0aGlzWyJfIittdF09S2UpO3RoaXMuX2NvbmZpZz1DZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5f''@;'; put 'put ''b3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSx1by5lcmFzPWZ1bmN0aW9uIF80KENlLEtlKXt2YXIgbXQsSXQsZG4scW49dGhpcy5fZXJhc3x8dGEoImVuIikuX2VyYXM7Zm9yKG10PTAsSXQ9cW4ubGVuZ3RoO210PEl0OysrbXQpc3dpdGNoKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgcW5bbXRdLnNpbmNlJiYoZG49XyhxblttdF0uc2luY2UpLnN0YXJ0T2YoImRheSIpLHFuW210XS5zaW5jZT1kbi52YWx1ZU9mKCkpLHR5cGVvZiBxblttdF0udW50aWwpe2Nhc2UidW5kZWZpbmVkIjpxblttdF0udW50aWw9MS8wO2JyZWFrO2Nhc2Uic3RyaW5nIjpkbj1fKHFuW210''@;'; put 'put ''XS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLHFuW210XS51bnRpbD1kbi52YWx1ZU9mKCl9cmV0dXJuIHFufSx1by5lcmFzUGFyc2U9ZnVuY3Rpb24gV0EoQ2UsS2UsbXQpe3ZhciBJdCxkbixpaSxJYSxTbyxxbj10aGlzLmVyYXMoKTtmb3IoQ2U9Q2UudG9VcHBlckNhc2UoKSxJ''@;'; put 'put ''dD0wLGRuPXFuLmxlbmd0aDtJdDxkbjsrK0l0KWlmKGlpPXFuW0l0XS5uYW1lLnRvVXBwZXJDYXNlKCksSWE9cW5bSXRdLmFiYnIudG9VcHBlckNhc2UoKSxTbz1xbltJdF0ubmFycm93LnRvVXBwZXJDYXNlKCksbXQpc3dpdGNoKEtlKXtjYXNlIk4iOmNhc2UiTk4iOmNhc2UiTk5OIjppZihJ''@;'; put 'put ''YT09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OIjppZihpaT09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OTiI6aWYoU289PT1DZSlyZXR1cm4gcW5bSXRdfWVsc2UgaWYoW2lpLElhLFNvXS5pbmRleE9mKENlKT49MClyZXR1cm4gcW5bSXRdfSx1by5lcmFzQ29u''@;'; put 'put ''dmVydFllYXI9ZnVuY3Rpb24gTDYoQ2UsS2Upe3ZhciBtdD1DZS5zaW5jZTw9Q2UudW50aWw/MTotMTtyZXR1cm4gdm9pZCAwPT09S2U/XyhDZS5zaW5jZSkueWVhcigpOl8oQ2Uuc2luY2UpLnllYXIoKSsoS2UtQ2Uub2Zmc2V0KSptdH0sdW8uZXJhc0FiYnJSZWdleD1mdW5jdGlvbiBQNihD''@;'; put 'put ''ZSl7cmV0dXJuIEYodGhpcywiX2VyYXNBYmJyUmVnZXgiKXx8aGMuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzQWJiclJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sdW8uZXJhc05hbWVSZWdleD1mdW5jdGlvbiBfZihDZSl7cmV0dXJuIEYodGhpcywiX2VyYXNOYW1lUmVnZXgiKXx8aGMuY2FsbCh0''@;'; put 'put ''aGlzKSxDZT90aGlzLl9lcmFzTmFtZVJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sdW8uZXJhc05hcnJvd1JlZ2V4PWZ1bmN0aW9uIEY2KENlKXtyZXR1cm4gRih0aGlzLCJfZXJhc05hcnJvd1JlZ2V4Iil8fGhjLmNhbGwodGhpcyksQ2U/dGhpcy5fZXJhc05hcnJvd1JlZ2V4OnRoaXMuX2VyYXNS''@;'; put 'put ''ZWdleH0sdW8ubW9udGhzPWZ1bmN0aW9uIHRpKENlLEtlKXtyZXR1cm4gQ2U/Tih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1tDZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8YmEpLnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bQ2UubW9u''@;'; put 'put ''dGgoKV06Tih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sdW8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gZ28oQ2UsS2Upe3JldHVybiBDZT9OKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFtDZS5tb250aCgpXTp0aGlzLl9tb250''@;'; put 'put ''aHNTaG9ydFtiYS50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW0NlLm1vbnRoKCldOk4odGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LHVvLm1vbnRoc1BhcnNlPWZ1bmN0aW9uIHlsKENlLEtlLG10KXt2YXIg''@;'; put 'put ''SXQsZG4scW47aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gTnMuY2FsbCh0aGlzLENlLEtlLG10KTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksSXQ9''@;'; put 'put ''MDtJdDwxMjtJdCsrKXtpZihkbj1CKFsyZTMsSXRdKSxtdCYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzKGRuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250''@;'; put 'put ''aHNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChkbiwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSwhbXQmJiF0aGlzLl9tb250aHNQYXJzZVtJdF0mJihxbj0iXiIrdGhpcy5tb250aHMoZG4sIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChkbiwiIiksdGhp''@;'; put 'put ''cy5fbW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLG10JiYiTU1NTSI9PT1LZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYobXQmJiJNTU0iPT09S2UmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdLnRl''@;'; put 'put ''c3QoQ2UpKXJldHVybiBJdDtpZighbXQmJnRoaXMuX21vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXR9fSx1by5tb250aHNSZWdleD1mdW5jdGlvbiB4YShDZSl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KEYodGhpcywiX21vbnRoc1JlZ2V4Iil8fHVpLmNhbGwodGhp''@;'; put 'put ''cyksQ2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihGKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9RmEpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZDZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdl''@;'; put 'put ''eCl9LHVvLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24gaXIoQ2Upe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhGKHRoaXMsIl9tb250aHNSZWdleCIpfHx1aS5jYWxsKHRoaXMpLENlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6''@;'; put 'put ''KEYodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TGEpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJkNlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LHVvLndlZWs9ZnVuY3Rpb24gb2Qo''@;'; put 'put ''Q2Upe3JldHVybiBMdShDZSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sdW8uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24gQ3MoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LHVvLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIGNmKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSx1''@;'; put 'put ''by53ZWVrZGF5cz1mdW5jdGlvbiBoZihDZSxLZSl7dmFyIG10PU4odGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW0NlJiYhMCE9PUNlJiZ0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09''@;'; put 'put ''Q2U/YjAobXQsdGhpcy5fd2Vlay5kb3cpOkNlP210W0NlLmRheSgpXTptdH0sdW8ud2Vla2RheXNNaW49ZnVuY3Rpb24gZmYoQ2Upe3JldHVybiEwPT09Q2U/YjAodGhpcy5fd2Vla2RheXNNaW4sdGhpcy5fd2Vlay5kb3cpOkNlP3RoaXMuX3dlZWtkYXlzTWluW0NlLmRheSgpXTp0aGlzLl93''@;'; put 'put ''ZWVrZGF5c01pbn0sdW8ud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBlaChDZSl7cmV0dXJuITA9PT1DZT9iMCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTpDZT90aGlzLl93ZWVrZGF5c1Nob3J0W0NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSx1by53ZWVrZGF5c1Bh''@;'; put 'put ''cnNlPWZ1bmN0aW9uIE9jKENlLEtlLG10KXt2YXIgSXQsZG4scW47aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBHaC5jYWxsKHRoaXMsQ2UsS2UsbXQpO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1Bh''@;'; put 'put ''cnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSksSXQ9MDtJdDw3O0l0Kyspe2lmKGRuPUIoWzJlMywxXSkuZGF5KEl0KSxtdCYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0''@;'; put 'put ''XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKGRuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KGRuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIp''@;'; put 'put ''LHRoaXMuX21pbldlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oZG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdfHwocW49Il4iK3RoaXMud2Vla2RheXMoZG4sIiIpKyJ8XiIrdGhpcy53ZWVr''@;'; put 'put ''ZGF5c1Nob3J0KGRuLCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4oZG4sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLG10JiYiZGRkZCI9PT1LZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVy''@;'; put 'put ''biBJdDtpZihtdCYmImRkZCI9PT1LZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYobXQmJiJkZCI9PT1LZSYmdGhpcy5fbWluV2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKCFtdCYmdGhpcy5fd2Vla2RheXNQYXJzZVtJ''@;'; put 'put ''dF0udGVzdChDZSkpcmV0dXJuIEl0fX0sdW8ud2Vla2RheXNSZWdleD1mdW5jdGlvbiBLaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oRih0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5f''@;'; put 'put ''d2Vla2RheXNSZWdleCk6KEYodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9c2QpLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LHVvLndlZWtkYXlzU2hvcnRSZWdl''@;'; put 'put ''eD1mdW5jdGlvbiBxaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oRih0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpOihGKHRoaXMsIl93ZWVr''@;'; put 'put ''ZGF5c1Nob3J0UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD1kZiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZDZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sdW8ud2Vla2RheXNNaW5SZWdleD1mdW5j''@;'; put 'put ''dGlvbiBBbihDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oRih0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCk6KEYodGhpcywiX3dlZWtkYXlzTWluUmVn''@;'; put 'put ''ZXgiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9azEpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LHVvLmlzUE09ZnVuY3Rpb24gb2woQ2Upe3JldHVybiJwIj09PShDZSsiIiku''@;'; put 'put ''dG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LHVvLm1lcmlkaWVtPWZ1bmN0aW9uIFNzKENlLEtlLG10KXtyZXR1cm4gQ2U+MTE/bXQ/InBtIjoiUE0iOm10PyJhbSI6IkFNIn0sdXIoImVuIix7ZXJhczpbe3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoxLzAsb2Zmc2V0OjEsbmFtZToiQW5ubyBE''@;'; put 'put ''b21pbmkiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6IkJlZm9yZSBDaHJpc3QiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKENlKXt2YXIgS2U9Q2UlMTA7cmV0dXJuIENlKygxPT09VHQoQ2UlMTAwLzEwKT8idGgiOjE9PT1LZT8ic3QiOjI9PT1LZT8ibmQiOjM9PT1LZT8icmQiOiJ0aCIpfX0pLF8ubGFuZz1TZSgibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUg''@;'; put 'put ''aW5zdGVhZC4iLHVyKSxfLmxhbmdEYXRhPVNlKCJtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIix0YSk7dmFyIE5jPU1hdGguYWJzO2Z1bmN0aW9uIG51KENlLEtlLG10LEl0KXt2YXIgZG49SmwoS2UsbXQpO3JldHVybiBDZS5f''@;'; put 'put ''bWlsbGlzZWNvbmRzKz1JdCpkbi5fbWlsbGlzZWNvbmRzLENlLl9kYXlzKz1JdCpkbi5fZGF5cyxDZS5fbW9udGhzKz1JdCpkbi5fbW9udGhzLENlLl9idWJibGUoKX1mdW5jdGlvbiBwYyhDZSl7cmV0dXJuIENlPDA/TWF0aC5mbG9vcihDZSk6TWF0aC5jZWlsKENlKX1mdW5jdGlvbiB5byhD''@;'; put 'put ''ZSl7cmV0dXJuIDQ4MDAqQ2UvMTQ2MDk3fWZ1bmN0aW9uIFNmKENlKXtyZXR1cm4gMTQ2MDk3KkNlLzQ4MDB9ZnVuY3Rpb24gbzAoQ2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKENlKX19dmFyIFpsPW8wKCJtcyIpLFM0PW8wKCJzIiksTWY9bzAoIm0iKSx1ZD1vMCgiaCIp''@;'; put 'put ''LHcwPW8wKCJkIiksYTI9bzAoInciKSxvMj1vMCgiTSIpLHY1PW8wKCJRIikseGY9bzAoInkiKSx3bz1abDtmdW5jdGlvbiB2dShDZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbQ2VdOk5hTn19dmFyIE00PXZ1KCJtaWxsaXNlY29uZHMiKSxW''@;'; put 'put ''Mz12dSgic2Vjb25kcyIpLGdjPXZ1KCJtaW51dGVzIikseTU9dnUoImhvdXJzIiksRnU9dnUoImRheXMiKSxIdT12dSgibW9udGhzIikscnU9dnUoInllYXJzIik7dmFyIEowPU1hdGgucm91bmQsVmM9e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsdzpudWxsLE06MTF9O2Z1bmN0aW9uIHg0''@;'; put 'put ''KENlLEtlLG10LEl0LGRuKXtyZXR1cm4gZG4ucmVsYXRpdmVUaW1lKEtlfHwxLCEhbXQsQ2UsSXQpfXZhciBaNj1NYXRoLmFicztmdW5jdGlvbiBsMihDZSl7cmV0dXJuKENlPjApLShDZTwwKXx8K0NlfWZ1bmN0aW9uIFc2KCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2Fs''@;'; put 'put ''ZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBJdCxkbixxbixpaSxTbyxmcyxOdSxkZCxDZT1aNih0aGlzLl9taWxsaXNlY29uZHMpLzFlMyxLZT1aNih0aGlzLl9kYXlzKSxtdD1aNih0aGlzLl9tb250aHMpLElhPXRoaXMuYXNTZWNvbmRzKCk7cmV0dXJuIElhPyhJdD1XZShDZS82MCksZG49''@;'; put 'put ''V2UoSXQvNjApLENlJT02MCxJdCU9NjAscW49V2UobXQvMTIpLG10JT0xMixpaT1DZT9DZS50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiLFNvPUlhPDA/Ii0iOiIiLGZzPWwyKHRoaXMuX21vbnRocykhPT1sMihJYSk/Ii0iOiIiLE51PWwyKHRoaXMuX2RheXMpIT09bDIoSWEp''@;'; put 'put ''PyItIjoiIixkZD1sMih0aGlzLl9taWxsaXNlY29uZHMpIT09bDIoSWEpPyItIjoiIixTbysiUCIrKHFuP2ZzK3FuKyJZIjoiIikrKG10P2ZzK210KyJNIjoiIikrKEtlP051K0tlKyJEIjoiIikrKGRufHxJdHx8Q2U/IlQiOiIiKSsoZG4/ZGQrZG4rIkgiOiIiKSsoSXQ/ZGQrSXQrIk0iOiIi''@;'; put 'put ''KSsoQ2U/ZGQraWkrIlMiOiIiKSk6IlAwRCJ9dmFyIG1zPXBmLnByb3RvdHlwZTtyZXR1cm4gbXMuaXNWYWxpZD1mdW5jdGlvbiBzNSgpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxtcy5hYnM9ZnVuY3Rpb24gcmMoKXt2YXIgQ2U9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRz''@;'; put 'put ''PU5jKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1OYyh0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9TmModGhpcy5fbW9udGhzKSxDZS5taWxsaXNlY29uZHM9TmMoQ2UubWlsbGlzZWNvbmRzKSxDZS5zZWNvbmRzPU5jKENlLnNlY29uZHMpLENlLm1pbnV0ZXM9TmMoQ2UubWludXRl''@;'; put 'put ''cyksQ2UuaG91cnM9TmMoQ2UuaG91cnMpLENlLm1vbnRocz1OYyhDZS5tb250aHMpLENlLnllYXJzPU5jKENlLnllYXJzKSx0aGlzfSxtcy5hZGQ9ZnVuY3Rpb24gWDAoQ2UsS2Upe3JldHVybiBudSh0aGlzLENlLEtlLDEpfSxtcy5zdWJ0cmFjdD1mdW5jdGlvbiBjbChDZSxLZSl7cmV0dXJu''@;'; put 'put ''IG51KHRoaXMsQ2UsS2UsLTEpfSxtcy5hcz1mdW5jdGlvbiBDNChDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIEtlLG10LEl0PXRoaXMuX21pbGxpc2Vjb25kcztpZigibW9udGgiPT09KENlPV90KENlKSl8fCJxdWFydGVyIj09PUNlfHwieWVhciI9PT1DZSlzd2l0Y2go''@;'; put 'put ''S2U9dGhpcy5fZGF5cytJdC84NjRlNSxtdD10aGlzLl9tb250aHMreW8oS2UpLENlKXtjYXNlIm1vbnRoIjpyZXR1cm4gbXQ7Y2FzZSJxdWFydGVyIjpyZXR1cm4gbXQvMztjYXNlInllYXIiOnJldHVybiBtdC8xMn1lbHNlIHN3aXRjaChLZT10aGlzLl9kYXlzK01hdGgucm91bmQoU2YodGhp''@;'; put 'put ''cy5fbW9udGhzKSksQ2Upe2Nhc2Uid2VlayI6cmV0dXJuIEtlLzcrSXQvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gS2UrSXQvODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqS2UrSXQvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqS2UrSXQvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4g''@;'; put 'put ''ODY0MDAqS2UrSXQvMWUzO2Nhc2UibWlsbGlzZWNvbmQiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KktlKStJdDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrQ2UpfX0sbXMuYXNNaWxsaXNlY29uZHM9WmwsbXMuYXNTZWNvbmRzPVM0LG1zLmFzTWludXRlcz1NZixt''@;'; put 'put ''cy5hc0hvdXJzPXVkLG1zLmFzRGF5cz13MCxtcy5hc1dlZWtzPWEyLG1zLmFzTW9udGhzPW8yLG1zLmFzUXVhcnRlcnM9djUsbXMuYXNZZWFycz14Zixtcy52YWx1ZU9mPXdvLG1zLl9idWJibGU9ZnVuY3Rpb24gTDEoKXt2YXIgZG4scW4saWksSWEsU28sQ2U9dGhpcy5fbWlsbGlzZWNvbmRz''@;'; put 'put ''LEtlPXRoaXMuX2RheXMsbXQ9dGhpcy5fbW9udGhzLEl0PXRoaXMuX2RhdGE7cmV0dXJuIENlPj0wJiZLZT49MCYmbXQ+PTB8fENlPD0wJiZLZTw9MCYmbXQ8PTB8fChDZSs9ODY0ZTUqcGMoU2YobXQpK0tlKSxLZT0wLG10PTApLEl0Lm1pbGxpc2Vjb25kcz1DZSUxZTMsZG49V2UoQ2UvMWUz''@;'; put 'put ''KSxJdC5zZWNvbmRzPWRuJTYwLHFuPVdlKGRuLzYwKSxJdC5taW51dGVzPXFuJTYwLGlpPVdlKHFuLzYwKSxJdC5ob3Vycz1paSUyNCxLZSs9V2UoaWkvMjQpLG10Kz1Tbz1XZSh5byhLZSkpLEtlLT1wYyhTZihTbykpLElhPVdlKG10LzEyKSxtdCU9MTIsSXQuZGF5cz1LZSxJdC5tb250aHM9''@;'; put 'put ''bXQsSXQueWVhcnM9SWEsdGhpc30sbXMuY2xvbmU9ZnVuY3Rpb24gejYoKXtyZXR1cm4gSmwodGhpcyl9LG1zLmdldD1mdW5jdGlvbiBzMihDZSl7cmV0dXJuIENlPV90KENlKSx0aGlzLmlzVmFsaWQoKT90aGlzW0NlKyJzIl0oKTpOYU59LG1zLm1pbGxpc2Vjb25kcz1NNCxtcy5zZWNvbmRz''@;'; put 'put ''PVYzLG1zLm1pbnV0ZXM9Z2MsbXMuaG91cnM9eTUsbXMuZGF5cz1GdSxtcy53ZWVrcz1mdW5jdGlvbiBFZigpe3JldHVybiBXZSh0aGlzLmRheXMoKS83KX0sbXMubW9udGhzPUh1LG1zLnllYXJzPXJ1LG1zLmh1bWFuaXplPWZ1bmN0aW9uIEV2KENlLEtlKXtpZighdGhpcy5pc1ZhbGlkKCkp''@;'; put 'put ''cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIGRuLHFuLG10PSExLEl0PVZjO3JldHVybiJvYmplY3QiPT10eXBlb2YgQ2UmJihLZT1DZSxDZT0hMSksImJvb2xlYW4iPT10eXBlb2YgQ2UmJihtdD1DZSksIm9iamVjdCI9PXR5cGVvZiBLZSYmKEl0PU9iamVjdC5h''@;'; put 'put ''c3NpZ24oe30sVmMsS2UpLG51bGwhPUtlLnMmJm51bGw9PUtlLnNzJiYoSXQuc3M9S2Uucy0xKSkscW49ZnVuY3Rpb24gJHcoQ2UsS2UsbXQsSXQpe3ZhciBkbj1KbChDZSkuYWJzKCkscW49SjAoZG4uYXMoInMiKSksaWk9SjAoZG4uYXMoIm0iKSksSWE9SjAoZG4uYXMoImgiKSksU289SjAo''@;'; put 'put ''ZG4uYXMoImQiKSksZnM9SjAoZG4uYXMoIk0iKSksTnU9SjAoZG4uYXMoInciKSksZGQ9SjAoZG4uYXMoInkiKSksYzI9cW48PW10LnNzJiZbInMiLHFuXXx8cW48bXQucyYmWyJzcyIscW5dfHxpaTw9MSYmWyJtIl18fGlpPG10Lm0mJlsibW0iLGlpXXx8SWE8PTEmJlsiaCJdfHxJYTxtdC5o''@;'; put 'put ''JiZbImhoIixJYV18fFNvPD0xJiZbImQiXXx8U288bXQuZCYmWyJkZCIsU29dO3JldHVybiBudWxsIT1tdC53JiYoYzI9YzJ8fE51PD0xJiZbInciXXx8TnU8bXQudyYmWyJ3dyIsTnVdKSwoYzI9YzJ8fGZzPD0xJiZbIk0iXXx8ZnM8bXQuTSYmWyJNTSIsZnNdfHxkZDw9MSYmWyJ5Il18fFsi''@;'; put 'put ''eXkiLGRkXSlbMl09S2UsYzJbM109K0NlPjAsYzJbNF09SXQseDQuYXBwbHkobnVsbCxjMil9KHRoaXMsIW10LEl0LGRuPXRoaXMubG9jYWxlRGF0YSgpKSxtdCYmKHFuPWRuLnBhc3RGdXR1cmUoK3RoaXMscW4pKSxkbi5wb3N0Zm9ybWF0KHFuKX0sbXMudG9JU09TdHJpbmc9VzYsbXMudG9T''@;'; put 'put ''dHJpbmc9VzYsbXMudG9KU09OPVc2LG1zLmxvY2FsZT1LYSxtcy5sb2NhbGVEYXRhPXlmLG1zLnRvSXNvU3RyaW5nPVNlKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsVzYpLG1zLmxh''@;'; put 'put ''bmc9VnIsbGUoIlgiLDAsMCwidW5peCIpLGxlKCJ4IiwwLDAsInZhbHVlT2YiKSxSbigieCIsUXQpLFJuKCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxodCgiWCIsZnVuY3Rpb24oQ2UsS2UsbXQpe210Ll9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KENlKSl9KSxodCgieCIsZnVuY3Rp''@;'; put 'put ''b24oQ2UsS2UsbXQpe210Ll9kPW5ldyBEYXRlKFR0KENlKSl9KSxfLnZlcnNpb249IjIuMzAuMSIsZnVuY3Rpb24gcChDZSl7RD1DZX0oc2wpLF8uZm49emksXy5taW49ZnVuY3Rpb24gRDEoKXtyZXR1cm4gbmgoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubWF4''@;'; put 'put ''PWZ1bmN0aW9uIHhyKCl7cmV0dXJuIG5oKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxfLnV0Yz1CLF8udW5peD1mdW5jdGlvbiByMihDZSl7cmV0dXJuIHNsKDFlMypD''@;'; put 'put ''ZSl9LF8ubW9udGhzPWZ1bmN0aW9uIHc0KENlLEtlKXtyZXR1cm4gRWMoQ2UsS2UsIm1vbnRocyIpfSxfLmlzRGF0ZT1QLF8ubG9jYWxlPXVyLF8uaW52YWxpZD1YLF8uZHVyYXRpb249SmwsXy5pc01vbWVudD1fZSxfLndlZWtkYXlzPWZ1bmN0aW9uIEtpKENlLEtlLG10KXtyZXR1cm4gYTAo''@;'; put 'put ''Q2UsS2UsbXQsIndlZWtkYXlzIil9LF8ucGFyc2Vab25lPWZ1bmN0aW9uIEd3KCl7cmV0dXJuIHNsLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0sXy5sb2NhbGVEYXRhPXRhLF8uaXNEdXJhdGlvbj1sNSxfLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIFVsKENlLEtlKXtyZXR1cm4g''@;'; put 'put ''RWMoQ2UsS2UsIm1vbnRoc1Nob3J0Iil9LF8ud2Vla2RheXNNaW49ZnVuY3Rpb24gZmMoQ2UsS2UsbXQpe3JldHVybiBhMChDZSxLZSxtdCwid2Vla2RheXNNaW4iKX0sXy5kZWZpbmVMb2NhbGU9eWksXy51cGRhdGVMb2NhbGU9ZnVuY3Rpb24gRnIoQ2UsS2Upe2lmKG51bGwhPUtlKXt2YXIg''@;'; put 'put ''bXQsSXQsZG49amw7bnVsbCE9SG9bQ2VdJiZudWxsIT1Ib1tDZV0ucGFyZW50TG9jYWxlP0hvW0NlXS5zZXQoeChIb1tDZV0uX2NvbmZpZyxLZSkpOihudWxsIT0oSXQ9eW4oQ2UpKSYmKGRuPUl0Ll9jb25maWcpLEtlPXgoZG4sS2UpLG51bGw9PUl0JiYoS2UuYWJicj1DZSksKG10PW5ldyBD''@;'; put 'put ''KEtlKSkucGFyZW50TG9jYWxlPUhvW0NlXSxIb1tDZV09bXQpLHVyKENlKX1lbHNlIG51bGwhPUhvW0NlXSYmKG51bGwhPUhvW0NlXS5wYXJlbnRMb2NhbGU/KEhvW0NlXT1Ib1tDZV0ucGFyZW50TG9jYWxlLENlPT09dXIoKSYmdXIoQ2UpKTpudWxsIT1Ib1tDZV0mJmRlbGV0ZSBIb1tDZV0p''@;'; put 'put ''O3JldHVybiBIb1tDZV19LF8ubG9jYWxlcz1mdW5jdGlvbiBvYSgpe3JldHVybiBUKEhvKX0sXy53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIFVhKENlLEtlLG10KXtyZXR1cm4gYTAoQ2UsS2UsbXQsIndlZWtkYXlzU2hvcnQiKX0sXy5ub3JtYWxpemVVbml0cz1fdCxfLnJlbGF0aXZlVGltZVJv''@;'; put 'put ''dW5kaW5nPWZ1bmN0aW9uIEt3KENlKXtyZXR1cm4gdm9pZCAwPT09Q2U/SjA6ImZ1bmN0aW9uIj09dHlwZW9mIENlJiYoSjA9Q2UsITApfSxfLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbiBVNihDZSxLZSl7cmV0dXJuIHZvaWQgMCE9PVZjW0NlXSYmKHZvaWQgMD09PUtlP1ZjW0Nl''@;'; put 'put ''XTooVmNbQ2VdPUtlLCJzIj09PUNlJiYoVmMuc3M9S2UtMSksITApKX0sXy5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbiBkNShDZSxLZSl7dmFyIG10PUNlLmRpZmYoS2UsImRheXMiLCEwKTtyZXR1cm4gbXQ8LTY/InNhbWVFbHNlIjptdDwtMT8ibGFzdFdlZWsiOm10PDA/Imxhc3REYXkiOm10''@;'; put 'put ''PDE/InNhbWVEYXkiOm10PDI/Im5leHREYXkiOm10PDc/Im5leHRXZWVrIjoic2FtZUVsc2UifSxfLnByb3RvdHlwZT16aSxfLkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0tRERUSEg6bW0iLERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERB''@;'; put 'put ''VEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhIOm1tOnNzLlNTUyIsV0VFSzoiR0dHRy1bV11XVyIsTU9OVEg6IllZWVktTU0ifSxffSgpfSw3ODM3''@;'; put 'put ''NTpmdW5jdGlvbihjZSl7Y2UuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgZ2xvYmFsVGhpczwidSJ8fHR5cGVvZiB3aW5kb3c8InUifHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsO3ZhciBiPXt9LEQ9e2V4cG9ydHM6e319O0QuZXhwb3J0cz1mdW5jdGlvbiB1aShW''@;'; put 'put ''dCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImJnIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25z''@;'; put 'put ''Ont0aG91c2FuZDoiXHUwNDE4IixtaWxsaW9uOiJcdTA0MTAiLGJpbGxpb246Ik0iLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1MDQzMi4iLGNvZGU6IkJHTiJ9fSk7dmFyIF89RC5leHBvcnRzLHA9e2V4cG9ydHM6e319O3AuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2lt''@;'; put 'put ''YWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3Np''@;'; put 'put ''dGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMCxhdmVyYWdlOiEwfSxm''@;'; put 'put ''b3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdv''@;'; put 'put ''RGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pO3ZhciBOPXAuZXhwb3J0cyx3PXtl''@;'; put 'put ''eHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkYS1E''@;'; put 'put ''SyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixw''@;'; put 'put ''b3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExl''@;'; put 'put ''bmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNz''@;'; put 'put ''YToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh3KTt2YXIgRj13LmV4cG9ydHMsSD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGly''@;'; put 'put ''LHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZGUtQVQiLGRlbGltaXRlcnM6e3Rob3VzYW5k''@;'; put 'put ''czoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oSCk7dmFyIFI9''@;'; put 'put ''SC5leHBvcnRzLGo9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFu''@;'; put 'put ''Z3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MjAxOSIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5''@;'; put 'put ''OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGopO3ZhciBQPWouZXhwb3J0cyxMPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1ERSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNp''@;'; put 'put ''bWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik1pIixiaWxsaW9uOiJNYSIsdHJpbGxpb246IkJpIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9z''@;'; put 'put ''dGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3RvdGFsTGVuZ3RoOjQsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJj''@;'; put 'put ''dXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEwpO3ZhciBZPUwuZXhwb3J0cyxCPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJkZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246''@;'; put 'put ''ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShCKTt2YXIgVz1CLmV4cG9ydHMsWj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs''@;'; put 'put ''bChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0cmlsbGlvbjoi''@;'; put 'put ''XHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShaKTt2YXIgcT1aLmV4cG9ydHMsUT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4g''@;'; put 'put ''VnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tQVUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixw''@;'; put 'put ''b3NpdGlvbjoicHJlZml4Iixjb2RlOiJBVUQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVu''@;'; put 'put ''Z3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9E''@;'; put 'put ''ZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFEpO3ZhciBYPVEuZXhwb3J0cyx0ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1''@;'; put 'put ''bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tR0IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJceGEzIixwb3NpdGlvbjoicHJl''@;'; put 'put ''Zml4Iixjb2RlOiJHQlAifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiExLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITEsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlzc2E6MH19fSl9KHRlKTt2YXIgcmU9dGUuZXhwb3J0cyxvZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tSUUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVj''@;'; put 'put ''aW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJk''@;'; put 'put ''IjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9fSl9KG9lKTt2YXIgZ2U9b2UuZXhwb3J0cyxfZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9f''@;'; put 'put ''ZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tTloiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixt''@;'; put 'put ''aWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoi''@;'; put 'put ''cHJlZml4Iixjb2RlOiJOWkQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KF9lKTt2YXIgVGU9X2UuZXhwb3J0cyxTZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZW4tWkEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixi''@;'; put 'put ''aWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PX5+KFZ0JTEwMC8xMCk/InRoIjoxPT09SnI/InN0IjoyPT09SnI/Im5kIjozPT09SnI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJSIixwb3NpdGlvbjoicHJlZml4Iixjb2Rl''@;'; put 'put ''OiJaQVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJy''@;'; put 'put ''ZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFNlKTt2YXIgemU9U2UuZXhwb3J0cyx6PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJlcy1BUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0''@;'; put 'put ''cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTA7cmV0dXJuIDE9PT1Kcnx8Mz09PUpyPyJlciI6Mj09PUpyPyJkbyI6Nz09PUpyfHwwPT09SnI/Im1vIjo4PT09SnI/InZvIjo5PT09SnI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZp''@;'; put 'put ''eCIsY29kZToiQVJTIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh6KTt2YXIgZz16LmV4cG9ydHMseT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ0wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoi''@;'; put 'put ''LCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2''@;'; put 'put ''byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQ0xQIn0sY3VycmVuY3lGb3JtYXQ6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh5KTt2YXIgeD15LmV4cG9ydHMsQz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtQ08iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVj''@;'; put 'put ''aW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09''@;'; put 'put ''PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQyk7dmFyIFQ9Qy5leHBvcnRz''@;'; put 'put ''LFY9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6''@;'; put 'put ''ImVzLUNSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVy''@;'; put 'put ''IjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhMSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNSQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExl''@;'; put 'put ''bmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5''@;'; put 'put ''IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oVik7dmFyIFU9Vi5leHBvcnRzLEU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLUVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRy''@;'; put 'put ''aWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBv''@;'; put 'put ''c3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oRSk7dmFyIG09RS5leHBvcnRzLEE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLU1YIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2lt''@;'; put 'put ''YWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihWdCl7bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJt''@;'; put 'put ''byI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik1YTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9''@;'; put 'put ''LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEEpO3ZhciBhZT1BLmV4cG9y''@;'; put 'put ''dHMsbmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VU''@;'; put 'put ''YWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09PUpyfHwzPT09SnI/''@;'; put 'put ''ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5n''@;'; put 'put ''dGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIs''@;'; put 'put ''bWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5lKTt2YXIgbGU9bmUuZXhwb3J0cyx3ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIs''@;'; put 'put ''dHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJl''@;'; put 'put ''Zml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHdlKTt2YXIgVWU9d2UuZXhwb3J0cyxRZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVj''@;'; put 'put ''aW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwO3JldHVybiAxPT09SnJ8fDM9PT1Kcj8iZXIiOjI9PT1Kcj8iZG8iOjc9PT1Kcnx8MD09PUpyPyJtbyI6OD09''@;'; put 'put ''PUpyPyJ2byI6OT09PUpyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJy''@;'; put 'put ''ZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fShRZSk7dmFyIG90PVFlLmV4cG9ydHMsTWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5k''@;'; put 'put ''ZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDty''@;'; put 'put ''ZXR1cm4gMT09PUpyfHwzPT09SnI/ImVyIjoyPT09SnI/ImRvIjo3PT09SnJ8fDA9PT1Kcj8ibW8iOjg9PT1Kcj8idm8iOjk9PT1Kcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTWUpO3ZhciB2ZT1NZS5leHBvcnRzLFhlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWls''@;'; put 'put ''bGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJj''@;'; put 'put ''dXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFhlKTt2YXIgQmU9WGUuZXhwb3J0cyxBZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZmEtSVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUwNjBjIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDY0N1x1MDYzMlx1''@;'; put 'put ''MDYyN1x1MDYzMSIsbWlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2IixiaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2MjdcdTA2MzFcdTA2MmYiLHRyaWxsaW9uOiJcdTA2MmFcdTA2MzFcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYi''@;'; put 'put ''fSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1MDYyN1x1MDY0NSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1ZmRmYyIsY29kZToiSVJSIn19KX0oQWUpO3ZhciBGZT1BZS5leHBvcnRzLFJlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQp''@;'; put 'put ''e3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmaS1GSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9u''@;'; put 'put ''czp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1h''@;'; put 'put ''bHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShSZSk7dmFyIEllPVJlLmV4cG9ydHMsSGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2Vz''@;'; put 'put ''TW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1p''@;'; put 'put ''bGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpWdD0+e2xldCBKcj1WdCUxMDtyZXR1cm4gMT09fn4oVnQlMTAwLzEwKT8idGgiOjE9PT1Kcj8ic3QiOjI9PT1Kcj8ibmQiOjM9PT1Kcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiMSIsY29kZToi''@;'; put 'put ''UEhQIn19KX0oSGUpO3ZhciBEZT1IZS5leHBvcnRzLGtlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0''@;'; put 'put ''Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1DQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpWdD0+MT09PVZ0PyJl''@;'; put 'put ''ciI6Ilx4ZThtZSIsc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZv''@;'; put 'put ''cm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGtlKTt2YXIgX3Q9a2UuZXhwb3J0cyxudD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''IHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VnQ9PjE9PT1WdD8iZXIiOiJceGU4bWUiLGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0obnQpO3ZhciBKZT1udC5leHBvcnRzLGxuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYm''@;'; put 'put ''VnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJmci1GUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''ImsiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246ImJpbGxpb24ifSxvcmRpbmFsOlZ0PT4xPT09VnQ/ImVyIjoiXHhlOG1lIixieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJvIiwiS2lvIiwiTWlvIiwiR2lvIiwiVGlvIiwiUGlvIiwiRWlvIiwiWmlvIiwiWWlvIl0sZGVjaW1h''@;'; put 'put ''bFN1ZmZpeGVzOlsibyIsIktvIiwiTW8iLCJHbyIsIlRvIiwiUG8iLCJFbyIsIlpvIiwiWW8iXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRp''@;'; put 'put ''c3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShsbik7dmFyIHl0PWxuLmV4cG9ydHMsU3Q9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImhlLUlMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQwXHUwNWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1''@;'; put 'put ''ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkMFx1MDVlOFx1MDVkMyIsdHJpbGxpb246Ilx1MDVkOFx1MDVlOFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBh''@;'; put 'put ''YSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShTdCk7dmFyIER0PVN0LmV4cG9ydHMsaXQ9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Imh1LUhV''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiRSIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkZ0Iixwb3Np''@;'; put 'put ''dGlvbjoicG9zdGZpeCIsY29kZToiSFVGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0''@;'; put 'put ''aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToy''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShpdCk7dmFyICRlPWl0LmV4cG9ydHMsdHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihp''@;'; put 'put ''cix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImlkIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6''@;'; put 'put ''Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiciIsbWlsbGlvbjoiaiIsYmlsbGlvbjoibSIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJScCIsY29kZToiSURSIn19KX0odHQpO3ZhciBOZT10dC5l''@;'; put 'put ''eHBvcnRzLHV0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1''@;'; put 'put ''YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YjAifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fSl9KHV0KTt2YXIgcXQ9dXQuZXhwb3J0cyxSdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9u''@;'; put 'put ''OiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwLG1hbnRpc3NhOjB9fX0pfShSdCk7dmFyIFB0PVJ0LmV4cG9ydHMsY2k9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''VnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NTEw''@;'; put 'put ''NCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkpQWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToy''@;'; put 'put ''fSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oY2kpO3ZhciBRdD1jaS5leHBvcnRzLHNu''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJr''@;'; put 'put ''by1LUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1Y2M5YyIsbWlsbGlvbjoiXHViYzMxXHViOWNjIixiaWxsaW9uOiJcdWMyZWRcdWM1YjUiLHRyaWxsaW9uOiJcdWM3N2NcdWM4NzAifSxvcmRpbmFsOmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTkiLGNvZGU6IktQVyJ9fSl9KHNuKTt2YXIgUmk9c24uZXhwb3J0cyxobj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIsbWls''@;'; put 'put ''bGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJl''@;'; put 'put ''bmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oaG4pO3ZhciBmdD1obi5leHBvcnRzLE9yPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVs''@;'; put 'put ''ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJuYi1OTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246''@;'; put 'put ''Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTk9LIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLG1hbnRpc3NhOjB9fX0pfShPcik7dmFyIFd0PU9yLmV4cG9ydHMsQXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KEF0KTt2YXIgUm49QXQuZXhwb3J0cyxzdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1''@;'; put 'put ''bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibmwtQkUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9u''@;'; put 'put ''OiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6VnQ9PntsZXQgSnI9VnQlMTAwO3JldHVybiAwIT09VnQmJkpyPD0xfHw4PT09SnJ8fEpyPj0yMD8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJF''@;'; put 'put ''VVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1''@;'; put 'put ''dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShzdCk7dmFyIFV0PXN0LmV4cG9ydHMscmk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5f''@;'; put 'put ''X2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIs''@;'; put 'put ''bWlsbGlvbjoibWxuIixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOlZ0PT57bGV0IEpyPVZ0JTEwMDtyZXR1cm4gMCE9PVZ0JiZKcjw9MXx8OD09PUpyfHxKcj49MjA/InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixj''@;'; put 'put ''b2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHJpKTt2YXIgV2U9cmkuZXhwb3J0cyxUdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoibm4iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9''@;'; put 'put ''LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oVHQpO3ZhciBucj1UdC5leHBvcnRzLGh0PXtl''@;'; put 'put ''eHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJwbC1Q''@;'; put 'put ''TCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IiB6XHUwMTQyIixwb3Np''@;'; put 'put ''dGlvbjoicG9zdGZpeCIsY29kZToiUExOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0''@;'; put 'put ''aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToy''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShodCk7dmFyIHh0PWh0LmV4cG9ydHMsam49e2V4cG9ydHM6e319OyFmdW5jdGlvbihp''@;'; put 'put ''cix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2Fu''@;'; put 'put ''ZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJl''@;'; put 'put ''Zml4Iixjb2RlOiJCUkwifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShqbik7dmFyIHJuPWpuLmV4cG9ydHMsenQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0''@;'; put 'put ''dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InB0LVBUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0''@;'; put 'put ''aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRp''@;'; put 'put ''c3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh6dCk7dmFyIGhpPXp0LmV4cG9ydHMsdW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9WdC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIs''@;'; put 'put ''dHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHVuKTt2YXIgZm49dW4uZXhwb3J0cyxJaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxu''@;'; put 'put ''In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50''@;'; put 'put ''aXNzYTowfX19KX0oSWkpO3ZhciBYdD1JaS5leHBvcnRzLGVuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZh''@;'; put 'put ''dWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJydS1SVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoi''@;'; put 'put ''YiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0NDBcdTA0NDNcdTA0MzEuIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUlVCIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxt''@;'; put 'put ''YW50aXNzYTowfX19KX0oZW4pO3ZhciB1YT1lbi5leHBvcnRzLEVpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJk''@;'; put 'put ''ZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJydS1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlv''@;'; put 'put ''bjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9''@;'; put 'put ''fX0pfShFaSk7dmFyIHZyPUVpLmV4cG9ydHMsV249e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbiB1aShWdCl7cmV0dXJuIFZ0JiZWdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVnQsImRlZmF1bHQiKT9W''@;'; put 'put ''dC5kZWZhdWx0OlZ0fSh7bGFuZ3VhZ2VUYWc6InNrLVNLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsbWFudGlzc2E6MH19fSl9KFduKTt2YXIgJGk9V24uZXhwb3J0cyxlaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChW''@;'; put 'put ''dCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oZWkpO3ZhciBRcj1laS5leHBvcnRzLFZpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01v''@;'; put 'put ''ZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUw''@;'; put 'put ''NDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJSU0QiLGNvZGU6IlJTRCJ9fSl9KFZpKTt2YXIgTmk9VmkuZXhwb3J0cyxEYT17ZXhwb3J0czp7fX07''@;'; put 'put ''IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiU0VL''@;'; put 'put ''In0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2lt''@;'; put 'put ''YWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oRGEpO3ZhciBMcj1EYS5leHBvcnRzLFdpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19l''@;'; put 'put ''c01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUx''@;'; put 'put ''ZVx1MGUzMVx1MGUxOSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRyaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkifSxv''@;'; put 'put ''cmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShXaSk7dmFyIHBhPVdpLmV4''@;'; put 'put ''cG9ydHMsUW49e2V4cG9ydHM6e319OyFmdW5jdGlvbihpcix4YSl7aXIuZXhwb3J0cz1mdW5jdGlvbigpe2NvbnN0IFZ0PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiIn''@;'; put 'put ''XHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw0MDoiJ1x1MDEzMW5jXHUwMTMxIiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIHVpKEpyKXtyZXR1cm4gSnImJkpyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChKciwiZGVmYXVsdCIpP0pyLmRlZmF1bHQ6SnJ9KHtsYW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9''@;'; put 'put ''LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmlsbGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6SnI9PntpZigwPT09SnIpcmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7bGV0IHkwPUpyJTEwO3JldHVybiBWdFt5MF18fFZ0W0py''@;'; put 'put ''JTEwMC15MF18fFZ0W0pyPj0xMDA/MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFu''@;'; put 'put ''dGlzc2E6MH19fSl9KCl9KFFuKTt2YXIgbGE9UW4uZXhwb3J0cyxiYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWdCwi''@;'; put 'put ''ZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxp''@;'; put 'put ''b246Ilx1MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1MDQzZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6Mixz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGJhKTt2YXIgTGE9YmEuZXhwb3J0cyxGYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiemgtQ04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoi''@;'; put 'put ''XHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiQ05ZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3Ro''@;'; put 'put ''OjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0Rl''@;'; put 'put ''Y2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oRmEpO3ZhciB0aT1GYS5leHBvcnRzLGdvPXtleHBvcnRzOnt9fTsh''@;'; put 'put ''ZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ6aC1NTyIsZGVsaW1pdGVy''@;'; put 'put ''czp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fSl9KGdvKTt2YXIgTnM9Z28uZXhwb3J0cyx5bD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKGlyLHhhKXtpci5leHBvcnRzPWZ1bmN0aW9uIHVpKFZ0KXtyZXR1cm4gVnQmJlZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChWdCwiZGVmYXVsdCIpP1Z0LmRlZmF1bHQ6VnR9KHtsYW5ndWFnZVRhZzoiemgtU0ciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoi''@;'; put 'put ''XHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIsY29kZToiU0dEIn19KX0oeWwpO3ZhciBwdT15bC5leHBvcnRzLExjPXtleHBvcnRzOnt9fTshZnVuY3Rpb24oaXIseGEpe2lyLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gdWkoVnQpe3JldHVybiBWdCYmVnQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFZ0LCJkZWZhdWx0Iik/VnQuZGVmYXVsdDpWdH0oe2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIu''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIsY29kZToi''@;'; put 'put ''VFdEIn19KX0oTGMpO3ZhciBEMD1MYy5leHBvcnRzO3JldHVybiBmdW5jdGlvbihpcil7aXIuYmc9XyxpclsiY3MtQ1oiXT1OLGlyWyJkYS1ESyJdPUYsaXJbImRlLUFUIl09UixpclsiZGUtQ0giXT1QLGlyWyJkZS1ERSJdPVksaXJbImRlLUxJIl09Vyxpci5lbD1xLGlyWyJlbi1BVSJdPVgs''@;'; put 'put ''aXJbImVuLUdCIl09cmUsaXJbImVuLUlFIl09Z2UsaXJbImVuLU5aIl09VGUsaXJbImVuLVpBIl09emUsaXJbImVzLUFSIl09ZyxpclsiZXMtQ0wiXT14LGlyWyJlcy1DTyJdPVQsaXJbImVzLUNSIl09VSxpclsiZXMtRVMiXT1tLGlyWyJlcy1NWCJdPWFlLGlyWyJlcy1OSSJdPWxlLGlyWyJl''@;'; put 'put ''cy1QRSJdPVVlLGlyWyJlcy1QUiJdPW90LGlyWyJlcy1TViJdPXZlLGlyWyJldC1FRSJdPUJlLGlyWyJmYS1JUiJdPUZlLGlyWyJmaS1GSSJdPUllLGlyWyJmaWwtUEgiXT1EZSxpclsiZnItQ0EiXT1fdCxpclsiZnItQ0giXT1KZSxpclsiZnItRlIiXT15dCxpclsiaGUtSUwiXT1EdCxpclsi''@;'; put 'put ''aHUtSFUiXT0kZSxpci5pZD1OZSxpclsiaXQtQ0giXT1xdCxpclsiaXQtSVQiXT1QdCxpclsiamEtSlAiXT1RdCxpclsia28tS1IiXT1SaSxpclsibHYtTFYiXT1mdCxpclsibmItTk8iXT1XdCxpci5uYj1SbixpclsibmwtQkUiXT1VdCxpclsibmwtTkwiXT1XZSxpci5ubj1ucixpclsicGwt''@;'; put 'put ''UEwiXT14dCxpclsicHQtQlIiXT1ybixpclsicHQtUFQiXT1oaSxpclsicm8tUk8iXT1mbixpci5ybz1YdCxpclsicnUtUlUiXT11YSxpclsicnUtVUEiXT12cixpclsic2stU0siXT0kaSxpci5zbD1Rcixpclsic3ItQ3lybC1SUyJdPU5pLGlyWyJzdi1TRSJdPUxyLGlyWyJ0aC1USCJdPXBh''@;'; put 'put ''LGlyWyJ0ci1UUiJdPWxhLGlyWyJ1ay1VQSJdPUxhLGlyWyJ6aC1DTiJdPXRpLGlyWyJ6aC1NTyJdPU5zLGlyWyJ6aC1TRyJdPXB1LGlyWyJ6aC1UVyJdPUQwfShiKSxmdW5jdGlvbiBKKGlyKXtyZXR1cm4gaXImJmlyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbChpciwiZGVmYXVsdCIpP2lyLmRlZmF1bHQ6aXJ9KGIpfSgpfSw4MzEzODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ5NjA5KTtKLmNlcnRpZmljYXRlPWIoOTQ3NzIpO3ZhciBfPUQuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIi''@;'; put 'put ''KS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO0ouUlNBUHJpdmF0ZUtleT1fO3ZhciBwPUQuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEo''@;'; put 'put ''KS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtKLlJTQVB1YmxpY0tleT1wO3ZhciBOPUQuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0''@;'; put 'put ''aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgi''@;'; put 'put ''ZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHc9RC5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtKLlB1YmxpY0tl''@;'; put 'put ''eT13O3ZhciBGPUQuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Si5Qcml2''@;'; put 'put ''YXRlS2V5PUY7dmFyIEg9RC5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlz''@;'; put 'put ''LmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Si5FbmNyeXB0ZWRQcml2YXRlS2V5PUg7dmFyIFI9RC5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5v''@;'; put 'put ''YmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO0ouRFNBUHJpdmF0ZUtleT1SLEou''@;'; put 'put ''RFNBcGFyYW09RC5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgaj1ELmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksUD1ELmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5j''@;'; put 'put ''dGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgp''@;'; put 'put ''LmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO0ouRUNQcml2YXRlS2V5PVAsSi5zaWduYXR1cmU9RC5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDk0NzcyOihjZSxKLGIpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBEPWIoNDk2MDkpLF89RC5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLHA9RC5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksTj1ELmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgi''@;'; put 'put ''cGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9RC5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInN1''@;'; put 'put ''YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxGPUQuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YocCl9KSxIPUQuZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKEYpfSksUj1ELmRlZmluZSgiTmFtZSIs''@;'; put 'put ''ZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoSCl9KX0pLGo9RC5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoXyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKF8pKX0pLFA9RC5k''@;'; put 'put ''ZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTD1ELmRlZmluZSgiVEJTQ2VydGlmaWNh''@;'; put 'put ''dGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKE4pLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoUiks''@;'; put 'put ''dGhpcy5rZXkoInZhbGlkaXR5IikudXNlKGopLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKFIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJz''@;'; put 'put ''dWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoUCkub3B0aW9uYWwoKSl9KSxZPUQuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhp''@;'; put 'put ''cy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKEwpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoTiksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7Y2UuZXhwb3J0cz1ZfSw4OTQ3MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD0vUHJvYy1U''@;'; put 'put ''eXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxfPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxwPS9e''@;'; put 'put ''LS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLE49YigxODIxMSksdz1iKDQzMzg4KSxGPWIoMjcwNTQpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEgsUil7dmFyIEwsaj1ILnRvU3RyaW5nKCks''@;'; put 'put ''UD1qLm1hdGNoKEQpO2lmKFApe3ZhciBCPSJhZXMiK1BbMV0sVz1GLmZyb20oUFsyXSwiaGV4IiksWj1GLmZyb20oUFszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHE9TihSLFcuc2xpY2UoMCw4KSxwYXJzZUludChQWzFdLDEwKSkua2V5LFE9W10sWD13LmNyZWF0ZURlY2lw''@;'; put 'put ''aGVyaXYoQixxLFcpO1EucHVzaChYLnVwZGF0ZShaKSksUS5wdXNoKFguZmluYWwoKSksTD1GLmNvbmNhdChRKX1lbHNle3ZhciBZPWoubWF0Y2gocCk7TD1GLmZyb20oWVsyXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6ai5tYXRjaChfKVsxXSxkYXRhOkx9''@;'; put 'put ''fX0sNjU2Njc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4MzEzOCksXz1iKDE1NTc5KSxwPWIoODk0NzIpLE49Yig0MzM4OCksdz1iKDkzMzk3KSxGPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBSKGope3ZhciBQOyJvYmplY3QiPT10eXBlb2YgaiYmIUYuaXNCdWZmZXIoaikm''@;'; put 'put ''JihQPWoucGFzc3BocmFzZSxqPWoua2V5KSwic3RyaW5nIj09dHlwZW9mIGomJihqPUYuZnJvbShqKSk7dmFyIFcsWixMPXAoaixQKSxZPUwudGFnLEI9TC5kYXRhO3N3aXRjaChZKXtjYXNlIkNFUlRJRklDQVRFIjpaPUQuY2VydGlmaWNhdGUuZGVjb2RlKEIsImRlciIpLnRic0NlcnRpZmlj''@;'; put 'put ''YXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFp8fChaPUQuUHVibGljS2V5LmRlY29kZShCLCJkZXIiKSksVz1aLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gRC5SU0FQdWJsaWNL''@;'; put 'put ''ZXkuZGVjb2RlKFouc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWi5zdWJqZWN0UHJpdmF0ZUtleT1aLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOlp9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBaLmFs''@;'; put 'put ''Z29yaXRobS5wYXJhbXMucHViX2tleT1ELkRTQXBhcmFtLmRlY29kZShaLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpaLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiRU5DUllQ''@;'; put 'put ''VEVEIFBSSVZBVEUgS0VZIjpCPWZ1bmN0aW9uIEgoaixQKXt2YXIgTD1qLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxZPXBhcnNlSW50KGouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxCPV9bai5hbGdvcml0aG0uZGVj''@;'; put 'put ''cnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFc9ai5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWj1qLnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoQi5zcGxpdCgiLSIpWzFdLDEwKS84LFE9dy5wYmtkZjJTeW5jKFAsTCxZLHEsInNoYTEiKSxYPU4uY3JlYXRlRGVjaXBoZXJp''@;'; put 'put ''dihCLFEsVyksdGU9W107cmV0dXJuIHRlLnB1c2goWC51cGRhdGUoWikpLHRlLnB1c2goWC5maW5hbCgpKSxGLmNvbmNhdCh0ZSl9KEI9RC5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShCLCJkZXIiKSxQKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oWj1ELlByaXZhdGVLZXkuZGVj''@;'; put 'put ''b2RlKEIsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEQuUlNBUHJpdmF0ZUtleS5kZWNvZGUoWi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZl''@;'; put 'put ''OlouYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6RC5FQ1ByaXZhdGVLZXkuZGVjb2RlKFouc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBaLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9RC5EU0FwYXJhbS5kZWNv''@;'; put 'put ''ZGUoWi5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlouYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEQuUlNBUHVibGljS2V5LmRlY29kZShC''@;'; put 'put ''LCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIEQuUlNBUHJpdmF0ZUtleS5kZWNvZGUoQiwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczpELkRTQVByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUg''@;'; put 'put ''S0VZIjpyZXR1cm57Y3VydmU6KEI9RC5FQ1ByaXZhdGVLZXkuZGVjb2RlKEIsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6Qi5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK1kpfX1SLnNpZ25hdHVyZT1ELnNpZ25hdHVy''@;'; put 'put ''ZSxjZS5leHBvcnRzPVJ9LDkzMzk3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO0oucGJrZGYyPWIoODI2ODUpLEoucGJrZGYyU3luYz1iKDU5MTExKX0sODI2ODU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEYsUCxEPWIoMjcwNTQpLkJ1ZmZlcixfPWIoODYxMTEpLHA9Yig0NTM5Miks''@;'; put 'put ''Tj1iKDU5MTExKSx3PWIoNzY2NDMpLEg9Z2xvYmFsLmNyeXB0byYmZ2xvYmFsLmNyeXB0by5zdWJ0bGUsUj17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4''@;'; put 'put ''NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0saj1bXTtmdW5jdGlvbiBMKCl7cmV0dXJuIFB8fChQPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5uZXh0VGljaz9nbG9iYWwucHJvY2Vzcy5uZXh0VGljazpnbG9iYWwucXVldWVNaWNyb3Rh''@;'; put 'put ''c2s/Z2xvYmFsLnF1ZXVlTWljcm90YXNrOmdsb2JhbC5zZXRJbW1lZGlhdGU/Z2xvYmFsLnNldEltbWVkaWF0ZTpnbG9iYWwuc2V0VGltZW91dCl9ZnVuY3Rpb24gWShaLHEsUSxYLHRlKXtyZXR1cm4gSC5pbXBvcnRLZXkoInJhdyIsWix7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRz''@;'; put 'put ''Il0pLnRoZW4oZnVuY3Rpb24ocmUpe3JldHVybiBILmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlvbnM6USxoYXNoOntuYW1lOnRlfX0scmUsWDw8Myl9KS50aGVuKGZ1bmN0aW9uKHJlKXtyZXR1cm4gRC5mcm9tKHJlKX0pfWNlLmV4cG9ydHM9ZnVuY3Rpb24oWixx''@;'; put 'put ''LFEsWCx0ZSxyZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHRlJiYocmU9dGUsdGU9dm9pZCAwKTt2YXIgb2U9UlsodGU9dGV8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYob2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZSl7aWYoXyhRLFgpLFo9dyhaLHAsIlBhc3N3b3JkIiks''@;'; put 'put ''cT13KHEscCwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFoscSl7Wi50aGVuKGZ1bmN0aW9uKFEpe0woKShmdW5jdGlvbigpe3EobnVsbCxRKX0pfSxmdW5jdGlvbihRKXtM''@;'; put 'put ''KCkoZnVuY3Rpb24oKXtxKFEpfSl9KX0oZnVuY3Rpb24gQihaKXtpZihnbG9iYWwucHJvY2VzcyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFIfHwhSC5pbXBvcnRLZXl8fCFILmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09altaXSlyZXR1cm4g''@;'; put 'put ''altaXTt2YXIgcT1ZKEY9Rnx8RC5hbGxvYyg4KSxGLDEwLDEyOCxaKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4galtaXT1xLHF9KG9lKS50aGVuKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2U/WShaLHEsUSxYLG9lKTpOKFoscSxRLFgsdGUp''@;'; put 'put ''fSkscmUpfWVsc2UgTCgpKGZ1bmN0aW9uKCl7dmFyIGdlO3RyeXtnZT1OKFoscSxRLFgsdGUpfWNhdGNoKF9lKXtyZXR1cm4gdm9pZCByZShfZSl9cmUobnVsbCxnZSl9KX19LDQ1MzkyOmNlPT57InVzZSBzdHJpY3QiO3ZhciBKO0o9Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLmJy''@;'; put 'put ''b3dzZXI/InV0Zi04IjpnbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChwcm9jZXNzLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLGNlLmV4cG9ydHM9Sn0sODYxMTE6Y2U9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEo9TWF0aC5wb3coMiwzMCktMTtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsRCl7aWYoIm51bWJlciIhPXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoYjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25z''@;'; put 'put ''Iik7aWYoIm51bWJlciIhPXR5cGVvZiBEKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoRDwwfHxEPkp8fEQhPUQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDU5MTExOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBE''@;'; put 'put ''PWIoMjUwNTYpLF89YigyMDYwMykscD1iKDI1NDQzKSxOPWIoMjcwNTQpLkJ1ZmZlcix3PWIoODYxMTEpLEY9Yig0NTM5MiksSD1iKDc2NjQzKSxSPU4uYWxsb2MoMTI4KSxqPXtfX3Byb3RvX186bnVsbCxtZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1''@;'; put 'put ''MTI6NjQsInNoYTUxMi0yNTYiOjMyLHJpcGVtZDE2MDoyMCxybWQxNjA6MjB9LFA9e19fcHJvdG9fXzpudWxsLCJzaGEtMSI6InNoYTEiLCJzaGEtMjI0Ijoic2hhMjI0Iiwic2hhLTI1NiI6InNoYTI1NiIsInNoYS0zODQiOiJzaGEzODQiLCJzaGEtNTEyIjoic2hhNTEyIiwicmlwZW1kLTE2''@;'; put 'put ''MCI6InJpcGVtZDE2MCJ9O2Z1bmN0aW9uIEwoWil7cmV0dXJuKG5ldyBfKS51cGRhdGUoWikuZGlnZXN0KCl9ZnVuY3Rpb24gQihaLHEsUSl7dmFyIFg9ZnVuY3Rpb24gWShaKXtyZXR1cm4icm1kMTYwIj09PVp8fCJyaXBlbWQxNjAiPT09Wj9MOiJtZDUiPT09Wj9EOmZ1bmN0aW9uIHEoUSl7''@;'; put 'put ''cmV0dXJuIHAoWikudXBkYXRlKFEpLmRpZ2VzdCgpfX0oWiksdGU9InNoYTUxMiI9PT1afHwic2hhMzg0Ij09PVo/MTI4OjY0O3EubGVuZ3RoPnRlP3E9WChxKTpxLmxlbmd0aDx0ZSYmKHE9Ti5jb25jYXQoW3EsUl0sdGUpKTtmb3IodmFyIHJlPU4uYWxsb2NVbnNhZmUodGUraltaXSksb2U9''@;'; put 'put ''Ti5hbGxvY1Vuc2FmZSh0ZStqW1pdKSxnZT0wO2dlPHRlO2dlKyspcmVbZ2VdPTU0XnFbZ2VdLG9lW2dlXT05Ml5xW2dlXTt2YXIgX2U9Ti5hbGxvY1Vuc2FmZSh0ZStRKzQpO3JlLmNvcHkoX2UsMCwwLHRlKSx0aGlzLmlwYWQxPV9lLHRoaXMuaXBhZDI9cmUsdGhpcy5vcGFkPW9lLHRoaXMu''@;'; put 'put ''YWxnPVosdGhpcy5ibG9ja3NpemU9dGUsdGhpcy5oYXNoPVgsdGhpcy5zaXplPWpbWl19Qi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFoscSl7cmV0dXJuIFouY29weShxLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2gocSkuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFz''@;'; put 'put ''aCh0aGlzLm9wYWQpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIFcoWixxLFEsWCx0ZSl7dyhRLFgpLFo9SChaLEYsIlBhc3N3b3JkIikscT1IKHEsRiwiU2FsdCIpO3ZhciByZT0odGV8fCJzaGExIikudG9Mb3dlckNhc2UoKSxvZT1QW3JlXXx8cmUsZ2U9altvZV07aWYoIm51bWJlciIhPXR5cGVv''@;'; put 'put ''ZiBnZXx8IWdlKXRocm93IG5ldyBUeXBlRXJyb3IoIkRpZ2VzdCBhbGdvcml0aG0gbm90IHN1cHBvcnRlZDogIit0ZSk7dmFyIF9lPW5ldyBCKG9lLFoscS5sZW5ndGgpLFRlPU4uYWxsb2NVbnNhZmUoWCksU2U9Ti5hbGxvY1Vuc2FmZShxLmxlbmd0aCs0KTtxLmNvcHkoU2UsMCwwLHEubGVu''@;'; put 'put ''Z3RoKTtmb3IodmFyIHplPTAsej1nZSxnPU1hdGguY2VpbChYL3opLHk9MTt5PD1nO3krKyl7U2Uud3JpdGVVSW50MzJCRSh5LHEubGVuZ3RoKTtmb3IodmFyIHg9X2UucnVuKFNlLF9lLmlwYWQxKSxDPXgsVD0xO1Q8UTtUKyspe0M9X2UucnVuKEMsX2UuaXBhZDIpO2Zvcih2YXIgVj0wO1Y8''@;'; put 'put ''ejtWKyspeFtWXV49Q1tWXX14LmNvcHkoVGUsemUpLHplKz16fXJldHVybiBUZX19LDc2NjQzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNDEwOTApLHA9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHc9cCYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYm''@;'; put 'put ''QXJyYXlCdWZmZXIuaXNWaWV3O2NlLmV4cG9ydHM9ZnVuY3Rpb24oRixILFIpe2lmKCJzdHJpbmciPT10eXBlb2YgRnx8RC5pc0J1ZmZlcihGKXx8cCYmRiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHcmJncoRikpcmV0dXJuIF8oRixIKTt0aHJvdyBuZXcgVHlwZUVycm9yKFIrIiBtdXN0IGJl''@;'; put 'put ''IGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBVaW50OEFycmF5LCBvciBhIERhdGFWaWV3Iil9fSw4NjA2OTpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYj1uZXcgQnVmZmVyKDQpO2IuZmlsbCgwKSxjZS5leHBvcnRzPWZ1bmN0aW9uKHcsRil7dmFyIEg9RihmdW5jdGlvbiBwKE4pe04ubGVuZ3RoJTQh''@;'; put 'put ''PTAmJihOPUJ1ZmZlci5jb25jYXQoW04sYl0sTi5sZW5ndGgrKDQtTi5sZW5ndGglNCkpKTtmb3IodmFyIEY9bmV3IEFycmF5KE4ubGVuZ3RoPj4+MiksSD0wLFI9MDtIPE4ubGVuZ3RoO0grPTQsUisrKUZbUl09Ti5yZWFkSW50MzJMRShIKTtyZXR1cm4gRn0odyksOCp3Lmxlbmd0aCk7dz1u''@;'; put 'put ''ZXcgQnVmZmVyKDE2KTtmb3IodmFyIFI9MDtSPEgubGVuZ3RoO1IrKyl3LndyaXRlSW50MzJMRShIW1JdLFI8PDIsITApO3JldHVybiB3fX0sMjUwNTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NjA2OSk7ZnVuY3Rpb24gXyhQLEwpe1BbTD4+NV18PTEyODw8TCUzMixQWzE0''@;'; put 'put ''KyhMKzY0Pj4+OTw8NCldPUw7Zm9yKHZhciBZPTE3MzI1ODQxOTMsQj0tMjcxNzMzODc5LFc9LTE3MzI1ODQxOTQsWj0yNzE3MzM4NzgscT0wO3E8UC5sZW5ndGg7cSs9MTYpe3ZhciBRPVksWD1CLHRlPVcscmU9WjtZPU4oWSxCLFcsWixQW3ErMF0sNywtNjgwODc2OTM2KSxaPU4oWixZLEIs''@;'; put 'put ''VyxQW3ErMV0sMTIsLTM4OTU2NDU4NiksVz1OKFcsWixZLEIsUFtxKzJdLDE3LDYwNjEwNTgxOSksQj1OKEIsVyxaLFksUFtxKzNdLDIyLC0xMDQ0NTI1MzMwKSxZPU4oWSxCLFcsWixQW3ErNF0sNywtMTc2NDE4ODk3KSxaPU4oWixZLEIsVyxQW3ErNV0sMTIsMTIwMDA4MDQyNiksVz1OKFcs''@;'; put 'put ''WixZLEIsUFtxKzZdLDE3LC0xNDczMjMxMzQxKSxCPU4oQixXLFosWSxQW3ErN10sMjIsLTQ1NzA1OTgzKSxZPU4oWSxCLFcsWixQW3ErOF0sNywxNzcwMDM1NDE2KSxaPU4oWixZLEIsVyxQW3ErOV0sMTIsLTE5NTg0MTQ0MTcpLFc9TihXLFosWSxCLFBbcSsxMF0sMTcsLTQyMDYzKSxCPU4o''@;'; put 'put ''QixXLFosWSxQW3ErMTFdLDIyLC0xOTkwNDA0MTYyKSxZPU4oWSxCLFcsWixQW3ErMTJdLDcsMTgwNDYwMzY4MiksWj1OKFosWSxCLFcsUFtxKzEzXSwxMiwtNDAzNDExMDEpLFc9TihXLFosWSxCLFBbcSsxNF0sMTcsLTE1MDIwMDIyOTApLFk9dyhZLEI9TihCLFcsWixZLFBbcSsxNV0sMjIs''@;'; put 'put ''MTIzNjUzNTMyOSksVyxaLFBbcSsxXSw1LC0xNjU3OTY1MTApLFo9dyhaLFksQixXLFBbcSs2XSw5LC0xMDY5NTAxNjMyKSxXPXcoVyxaLFksQixQW3ErMTFdLDE0LDY0MzcxNzcxMyksQj13KEIsVyxaLFksUFtxKzBdLDIwLC0zNzM4OTczMDIpLFk9dyhZLEIsVyxaLFBbcSs1XSw1LC03MDE1''@;'; put 'put ''NTg2OTEpLFo9dyhaLFksQixXLFBbcSsxMF0sOSwzODAxNjA4MyksVz13KFcsWixZLEIsUFtxKzE1XSwxNCwtNjYwNDc4MzM1KSxCPXcoQixXLFosWSxQW3ErNF0sMjAsLTQwNTUzNzg0OCksWT13KFksQixXLFosUFtxKzldLDUsNTY4NDQ2NDM4KSxaPXcoWixZLEIsVyxQW3ErMTRdLDksLTEw''@;'; put 'put ''MTk4MDM2OTApLFc9dyhXLFosWSxCLFBbcSszXSwxNCwtMTg3MzYzOTYxKSxCPXcoQixXLFosWSxQW3ErOF0sMjAsMTE2MzUzMTUwMSksWT13KFksQixXLFosUFtxKzEzXSw1LC0xNDQ0NjgxNDY3KSxaPXcoWixZLEIsVyxQW3ErMl0sOSwtNTE0MDM3ODQpLFc9dyhXLFosWSxCLFBbcSs3XSwx''@;'; put 'put ''NCwxNzM1MzI4NDczKSxZPUYoWSxCPXcoQixXLFosWSxQW3ErMTJdLDIwLC0xOTI2NjA3NzM0KSxXLFosUFtxKzVdLDQsLTM3ODU1OCksWj1GKFosWSxCLFcsUFtxKzhdLDExLC0yMDIyNTc0NDYzKSxXPUYoVyxaLFksQixQW3ErMTFdLDE2LDE4MzkwMzA1NjIpLEI9RihCLFcsWixZLFBbcSsx''@;'; put 'put ''NF0sMjMsLTM1MzA5NTU2KSxZPUYoWSxCLFcsWixQW3ErMV0sNCwtMTUzMDk5MjA2MCksWj1GKFosWSxCLFcsUFtxKzRdLDExLDEyNzI4OTMzNTMpLFc9RihXLFosWSxCLFBbcSs3XSwxNiwtMTU1NDk3NjMyKSxCPUYoQixXLFosWSxQW3ErMTBdLDIzLC0xMDk0NzMwNjQwKSxZPUYoWSxCLFcs''@;'; put 'put ''WixQW3ErMTNdLDQsNjgxMjc5MTc0KSxaPUYoWixZLEIsVyxQW3ErMF0sMTEsLTM1ODUzNzIyMiksVz1GKFcsWixZLEIsUFtxKzNdLDE2LC03MjI1MjE5NzkpLEI9RihCLFcsWixZLFBbcSs2XSwyMyw3NjAyOTE4OSksWT1GKFksQixXLFosUFtxKzldLDQsLTY0MDM2NDQ4NyksWj1GKFosWSxC''@;'; put 'put ''LFcsUFtxKzEyXSwxMSwtNDIxODE1ODM1KSxXPUYoVyxaLFksQixQW3ErMTVdLDE2LDUzMDc0MjUyMCksWT1IKFksQj1GKEIsVyxaLFksUFtxKzJdLDIzLC05OTUzMzg2NTEpLFcsWixQW3ErMF0sNiwtMTk4NjMwODQ0KSxaPUgoWixZLEIsVyxQW3ErN10sMTAsMTEyNjg5MTQxNSksVz1IKFcs''@;'; put 'put ''WixZLEIsUFtxKzE0XSwxNSwtMTQxNjM1NDkwNSksQj1IKEIsVyxaLFksUFtxKzVdLDIxLC01NzQzNDA1NSksWT1IKFksQixXLFosUFtxKzEyXSw2LDE3MDA0ODU1NzEpLFo9SChaLFksQixXLFBbcSszXSwxMCwtMTg5NDk4NjYwNiksVz1IKFcsWixZLEIsUFtxKzEwXSwxNSwtMTA1MTUyMyks''@;'; put 'put ''Qj1IKEIsVyxaLFksUFtxKzFdLDIxLC0yMDU0OTIyNzk5KSxZPUgoWSxCLFcsWixQW3ErOF0sNiwxODczMzEzMzU5KSxaPUgoWixZLEIsVyxQW3ErMTVdLDEwLC0zMDYxMTc0NCksVz1IKFcsWixZLEIsUFtxKzZdLDE1LC0xNTYwMTk4MzgwKSxCPUgoQixXLFosWSxQW3ErMTNdLDIxLDEzMDkx''@;'; put 'put ''NTE2NDkpLFk9SChZLEIsVyxaLFBbcSs0XSw2LC0xNDU1MjMwNzApLFo9SChaLFksQixXLFBbcSsxMV0sMTAsLTExMjAyMTAzNzkpLFc9SChXLFosWSxCLFBbcSsyXSwxNSw3MTg3ODcyNTkpLEI9SChCLFcsWixZLFBbcSs5XSwyMSwtMzQzNDg1NTUxKSxZPVIoWSxRKSxCPVIoQixYKSxXPVIo''@;'; put 'put ''Vyx0ZSksWj1SKFoscmUpfXJldHVybltZLEIsVyxaXX1mdW5jdGlvbiBwKFAsTCxZLEIsVyxaKXtyZXR1cm4gUihmdW5jdGlvbiBqKFAsTCl7cmV0dXJuIFA8PEx8UD4+PjMyLUx9KFIoUihMLFApLFIoQixaKSksVyksWSl9ZnVuY3Rpb24gTihQLEwsWSxCLFcsWixxKXtyZXR1cm4gcChMJll8''@;'; put 'put ''fkwmQixQLEwsVyxaLHEpfWZ1bmN0aW9uIHcoUCxMLFksQixXLFoscSl7cmV0dXJuIHAoTCZCfFkmfkIsUCxMLFcsWixxKX1mdW5jdGlvbiBGKFAsTCxZLEIsVyxaLHEpe3JldHVybiBwKExeWV5CLFAsTCxXLFoscSl9ZnVuY3Rpb24gSChQLEwsWSxCLFcsWixxKXtyZXR1cm4gcChZXihMfH5C''@;'; put 'put ''KSxQLEwsVyxaLHEpfWZ1bmN0aW9uIFIoUCxMKXt2YXIgWT0oNjU1MzUmUCkrKDY1NTM1JkwpO3JldHVybihQPj4xNikrKEw+PjE2KSsoWT4+MTYpPDwxNnw2NTUzNSZZfWNlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7cmV0dXJuIEQoTCxfKX19LDgzODMzOihjZSxKLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBEPWIoNzA0NSkuVHJhbnNmb3JtO2Z1bmN0aW9uIHAoTil7RC5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPW5ldyBCdWZmZXIoTiksdGhpcy5fYmxvY2tTaXplPU4sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1iKDcxOTkz''@;'; put 'put ''KShwLEQpLHAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTix3LEYpe3ZhciBIPW51bGw7dHJ5eyJidWZmZXIiIT09dyYmKE49bmV3IEJ1ZmZlcihOLHcpKSx0aGlzLnVwZGF0ZShOKX1jYXRjaChSKXtIPVJ9RihIKX0scC5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE4pe3ZhciB3''@;'; put 'put ''PW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLl9kaWdlc3QoKSl9Y2F0Y2goRil7dz1GfU4odyl9LHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihOLHcpe2lmKCFCdWZmZXIuaXNCdWZmZXIoTikmJiJzdHJpbmciIT10eXBlb2YgTil0aHJvdyBuZXcgVHlwZUVycm9yKCJEYXRhIG11c3QgYmUg''@;'; put 'put ''YSBzdHJpbmcgb3IgYSBidWZmZXIiKTtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtCdWZmZXIuaXNCdWZmZXIoTil8fChOPW5ldyBCdWZmZXIoTix3fHwiYmluYXJ5IikpO2Zvcih2YXIgRj10aGlzLl9ibG9jayxIPTA7dGhpcy5f''@;'; put 'put ''YmxvY2tPZmZzZXQrTi5sZW5ndGgtSD49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBSPXRoaXMuX2Jsb2NrT2Zmc2V0O1I8dGhpcy5fYmxvY2tTaXplOylGW1IrK109TltIKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtIPE4ubGVuZ3RoOylGW3RoaXMuX2Js''@;'; put 'put ''b2NrT2Zmc2V0KytdPU5bSCsrXTtmb3IodmFyIGo9MCxQPTgqTi5sZW5ndGg7UD4wOysrail0aGlzLl9sZW5ndGhbal0rPVAsKFA9dGhpcy5fbGVuZ3RoW2pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtqXS09NDI5NDk2NzI5NipQKTtyZXR1cm4gdGhpc30scC5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbihOKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihOKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9m''@;'; put 'put ''aW5hbGl6ZWQ9ITA7dmFyIHc9dGhpcy5fZGlnZXN0KCk7cmV0dXJuIHZvaWQgMCE9PU4mJih3PXcudG9TdHJpbmcoTikpLHd9LHAucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LGNlLmV4cG9ydHM9cH0s''@;'; put 'put ''MjA2MDM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3MTk5MyksXz1iKDgzODMzKTtmdW5jdGlvbiBwKCl7Xy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMu''@;'; put 'put ''X2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBOKFAsTCl7cmV0dXJuIFA8PEx8UD4+PjMyLUx9ZnVuY3Rpb24gdyhQLEwsWSxCLFcsWixxLFEpe3JldHVybiBOKFArKExeWV5CKStaK3F8MCxRKStXfDB9ZnVuY3Rpb24gRihQLEwsWSxCLFcsWixxLFEpe3JldHVybiBOKFArKEwmWXx+TCZCKStaK3F8''@;'; put 'put ''MCxRKStXfDB9ZnVuY3Rpb24gSChQLEwsWSxCLFcsWixxLFEpe3JldHVybiBOKFArKChMfH5ZKV5CKStaK3F8MCxRKStXfDB9ZnVuY3Rpb24gUihQLEwsWSxCLFcsWixxLFEpe3JldHVybiBOKFArKEwmQnxZJn5CKStaK3F8MCxRKStXfDB9ZnVuY3Rpb24gaihQLEwsWSxCLFcsWixxLFEpe3Jl''@;'; put 'put ''dHVybiBOKFArKExeKFl8fkIpKStaK3F8MCxRKStXfDB9RChwLF8pLHAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFA9bmV3IEFycmF5KDE2KSxMPTA7TDwxNjsrK0wpUFtMXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkwpO3ZhciBZPXRoaXMuX2EsQj10aGlzLl9i''@;'; put 'put ''LFc9dGhpcy5fYyxaPXRoaXMuX2QscT10aGlzLl9lO1k9dyhZLEIsVyxaLHEsUFswXSwwLDExKSxxPXcocSxZLEIsVz1OKFcsMTApLFosUFsxXSwwLDE0KSxaPXcoWixxLFksQj1OKEIsMTApLFcsUFsyXSwwLDE1KSxXPXcoVyxaLHEsWT1OKFksMTApLEIsUFszXSwwLDEyKSxCPXcoQixXLFos''@;'; put 'put ''cT1OKHEsMTApLFksUFs0XSwwLDUpLFk9dyhZLEIsVyxaPU4oWiwxMCkscSxQWzVdLDAsOCkscT13KHEsWSxCLFc9TihXLDEwKSxaLFBbNl0sMCw3KSxaPXcoWixxLFksQj1OKEIsMTApLFcsUFs3XSwwLDkpLFc9dyhXLFoscSxZPU4oWSwxMCksQixQWzhdLDAsMTEpLEI9dyhCLFcsWixxPU4o''@;'; put 'put ''cSwxMCksWSxQWzldLDAsMTMpLFk9dyhZLEIsVyxaPU4oWiwxMCkscSxQWzEwXSwwLDE0KSxxPXcocSxZLEIsVz1OKFcsMTApLFosUFsxMV0sMCwxNSksWj13KFoscSxZLEI9TihCLDEwKSxXLFBbMTJdLDAsNiksVz13KFcsWixxLFk9TihZLDEwKSxCLFBbMTNdLDAsNyksQj13KEIsVyxaLHE9''@;'; put 'put ''TihxLDEwKSxZLFBbMTRdLDAsOSkscT1GKHEsWT13KFksQixXLFo9TihaLDEwKSxxLFBbMTVdLDAsOCksQixXPU4oVywxMCksWixQWzddLDE1MTg1MDAyNDksNyksWj1GKFoscSxZLEI9TihCLDEwKSxXLFBbNF0sMTUxODUwMDI0OSw2KSxXPUYoVyxaLHEsWT1OKFksMTApLEIsUFsxM10sMTUx''@;'; put 'put ''ODUwMDI0OSw4KSxCPUYoQixXLFoscT1OKHEsMTApLFksUFsxXSwxNTE4NTAwMjQ5LDEzKSxZPUYoWSxCLFcsWj1OKFosMTApLHEsUFsxMF0sMTUxODUwMDI0OSwxMSkscT1GKHEsWSxCLFc9TihXLDEwKSxaLFBbNl0sMTUxODUwMDI0OSw5KSxaPUYoWixxLFksQj1OKEIsMTApLFcsUFsxNV0s''@;'; put 'put ''MTUxODUwMDI0OSw3KSxXPUYoVyxaLHEsWT1OKFksMTApLEIsUFszXSwxNTE4NTAwMjQ5LDE1KSxCPUYoQixXLFoscT1OKHEsMTApLFksUFsxMl0sMTUxODUwMDI0OSw3KSxZPUYoWSxCLFcsWj1OKFosMTApLHEsUFswXSwxNTE4NTAwMjQ5LDEyKSxxPUYocSxZLEIsVz1OKFcsMTApLFosUFs5''@;'; put 'put ''XSwxNTE4NTAwMjQ5LDE1KSxaPUYoWixxLFksQj1OKEIsMTApLFcsUFs1XSwxNTE4NTAwMjQ5LDkpLFc9RihXLFoscSxZPU4oWSwxMCksQixQWzJdLDE1MTg1MDAyNDksMTEpLEI9RihCLFcsWixxPU4ocSwxMCksWSxQWzE0XSwxNTE4NTAwMjQ5LDcpLFk9RihZLEIsVyxaPU4oWiwxMCkscSxQ''@;'; put 'put ''WzExXSwxNTE4NTAwMjQ5LDEzKSxaPUgoWixxPUYocSxZLEIsVz1OKFcsMTApLFosUFs4XSwxNTE4NTAwMjQ5LDEyKSxZLEI9TihCLDEwKSxXLFBbM10sMTg1OTc3NTM5MywxMSksVz1IKFcsWixxLFk9TihZLDEwKSxCLFBbMTBdLDE4NTk3NzUzOTMsMTMpLEI9SChCLFcsWixxPU4ocSwxMCks''@;'; put 'put ''WSxQWzE0XSwxODU5Nzc1MzkzLDYpLFk9SChZLEIsVyxaPU4oWiwxMCkscSxQWzRdLDE4NTk3NzUzOTMsNykscT1IKHEsWSxCLFc9TihXLDEwKSxaLFBbOV0sMTg1OTc3NTM5MywxNCksWj1IKFoscSxZLEI9TihCLDEwKSxXLFBbMTVdLDE4NTk3NzUzOTMsOSksVz1IKFcsWixxLFk9TihZLDEw''@;'; put 'put ''KSxCLFBbOF0sMTg1OTc3NTM5MywxMyksQj1IKEIsVyxaLHE9TihxLDEwKSxZLFBbMV0sMTg1OTc3NTM5MywxNSksWT1IKFksQixXLFo9TihaLDEwKSxxLFBbMl0sMTg1OTc3NTM5MywxNCkscT1IKHEsWSxCLFc9TihXLDEwKSxaLFBbN10sMTg1OTc3NTM5Myw4KSxaPUgoWixxLFksQj1OKEIs''@;'; put 'put ''MTApLFcsUFswXSwxODU5Nzc1MzkzLDEzKSxXPUgoVyxaLHEsWT1OKFksMTApLEIsUFs2XSwxODU5Nzc1MzkzLDYpLEI9SChCLFcsWixxPU4ocSwxMCksWSxQWzEzXSwxODU5Nzc1MzkzLDUpLFk9SChZLEIsVyxaPU4oWiwxMCkscSxQWzExXSwxODU5Nzc1MzkzLDEyKSxxPUgocSxZLEIsVz1O''@;'; put 'put ''KFcsMTApLFosUFs1XSwxODU5Nzc1MzkzLDcpLFc9UihXLFo9SChaLHEsWSxCPU4oQiwxMCksVyxQWzEyXSwxODU5Nzc1MzkzLDUpLHEsWT1OKFksMTApLEIsUFsxXSwyNDAwOTU5NzA4LDExKSxCPVIoQixXLFoscT1OKHEsMTApLFksUFs5XSwyNDAwOTU5NzA4LDEyKSxZPVIoWSxCLFcsWj1O''@;'; put 'put ''KFosMTApLHEsUFsxMV0sMjQwMDk1OTcwOCwxNCkscT1SKHEsWSxCLFc9TihXLDEwKSxaLFBbMTBdLDI0MDA5NTk3MDgsMTUpLFo9UihaLHEsWSxCPU4oQiwxMCksVyxQWzBdLDI0MDA5NTk3MDgsMTQpLFc9UihXLFoscSxZPU4oWSwxMCksQixQWzhdLDI0MDA5NTk3MDgsMTUpLEI9UihCLFcs''@;'; put 'put ''WixxPU4ocSwxMCksWSxQWzEyXSwyNDAwOTU5NzA4LDkpLFk9UihZLEIsVyxaPU4oWiwxMCkscSxQWzRdLDI0MDA5NTk3MDgsOCkscT1SKHEsWSxCLFc9TihXLDEwKSxaLFBbMTNdLDI0MDA5NTk3MDgsOSksWj1SKFoscSxZLEI9TihCLDEwKSxXLFBbM10sMjQwMDk1OTcwOCwxNCksVz1SKFcs''@;'; put 'put ''WixxLFk9TihZLDEwKSxCLFBbN10sMjQwMDk1OTcwOCw1KSxCPVIoQixXLFoscT1OKHEsMTApLFksUFsxNV0sMjQwMDk1OTcwOCw2KSxZPVIoWSxCLFcsWj1OKFosMTApLHEsUFsxNF0sMjQwMDk1OTcwOCw4KSxxPVIocSxZLEIsVz1OKFcsMTApLFosUFs1XSwyNDAwOTU5NzA4LDYpLFo9Uiha''@;'; put 'put ''LHEsWSxCPU4oQiwxMCksVyxQWzZdLDI0MDA5NTk3MDgsNSksQj1qKEIsVz1SKFcsWixxLFk9TihZLDEwKSxCLFBbMl0sMjQwMDk1OTcwOCwxMiksWixxPU4ocSwxMCksWSxQWzRdLDI4NDA4NTM4MzgsOSksWT1qKFksQixXLFo9TihaLDEwKSxxLFBbMF0sMjg0MDg1MzgzOCwxNSkscT1qKHEs''@;'; put 'put ''WSxCLFc9TihXLDEwKSxaLFBbNV0sMjg0MDg1MzgzOCw1KSxaPWooWixxLFksQj1OKEIsMTApLFcsUFs5XSwyODQwODUzODM4LDExKSxXPWooVyxaLHEsWT1OKFksMTApLEIsUFs3XSwyODQwODUzODM4LDYpLEI9aihCLFcsWixxPU4ocSwxMCksWSxQWzEyXSwyODQwODUzODM4LDgpLFk9aihZ''@;'; put 'put ''LEIsVyxaPU4oWiwxMCkscSxQWzJdLDI4NDA4NTM4MzgsMTMpLHE9aihxLFksQixXPU4oVywxMCksWixQWzEwXSwyODQwODUzODM4LDEyKSxaPWooWixxLFksQj1OKEIsMTApLFcsUFsxNF0sMjg0MDg1MzgzOCw1KSxXPWooVyxaLHEsWT1OKFksMTApLEIsUFsxXSwyODQwODUzODM4LDEyKSxC''@;'; put 'put ''PWooQixXLFoscT1OKHEsMTApLFksUFszXSwyODQwODUzODM4LDEzKSxZPWooWSxCLFcsWj1OKFosMTApLHEsUFs4XSwyODQwODUzODM4LDE0KSxxPWoocSxZLEIsVz1OKFcsMTApLFosUFsxMV0sMjg0MDg1MzgzOCwxMSksWj1qKFoscSxZLEI9TihCLDEwKSxXLFBbNl0sMjg0MDg1MzgzOCw4''@;'; put 'put ''KSxXPWooVyxaLHEsWT1OKFksMTApLEIsUFsxNV0sMjg0MDg1MzgzOCw1KSxCPWooQixXLFoscT1OKHEsMTApLFksUFsxM10sMjg0MDg1MzgzOCw2KSxaPU4oWiwxMCk7dmFyIFE9dGhpcy5fYSxYPXRoaXMuX2IsdGU9dGhpcy5fYyxyZT10aGlzLl9kLG9lPXRoaXMuX2U7UT1qKFEsWCx0ZSxy''@;'; put 'put ''ZSxvZSxQWzVdLDEzNTI4Mjk5MjYsOCksb2U9aihvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFsxNF0sMTM1MjgyOTkyNiw5KSxyZT1qKHJlLG9lLFEsWD1OKFgsMTApLHRlLFBbN10sMTM1MjgyOTkyNiw5KSx0ZT1qKHRlLHJlLG9lLFE9TihRLDEwKSxYLFBbMF0sMTM1MjgyOTkyNiwxMSksWD1q''@;'; put 'put ''KFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzldLDEzNTI4Mjk5MjYsMTMpLFE9aihRLFgsdGUscmU9TihyZSwxMCksb2UsUFsyXSwxMzUyODI5OTI2LDE1KSxvZT1qKG9lLFEsWCx0ZT1OKHRlLDEwKSxyZSxQWzExXSwxMzUyODI5OTI2LDE1KSxyZT1qKHJlLG9lLFEsWD1OKFgsMTApLHRlLFBb''@;'; put 'put ''NF0sMTM1MjgyOTkyNiw1KSx0ZT1qKHRlLHJlLG9lLFE9TihRLDEwKSxYLFBbMTNdLDEzNTI4Mjk5MjYsNyksWD1qKFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzZdLDEzNTI4Mjk5MjYsNyksUT1qKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzE1XSwxMzUyODI5OTI2LDgpLG9lPWoob2UsUSxY''@;'; put 'put ''LHRlPU4odGUsMTApLHJlLFBbOF0sMTM1MjgyOTkyNiwxMSkscmU9aihyZSxvZSxRLFg9TihYLDEwKSx0ZSxQWzFdLDEzNTI4Mjk5MjYsMTQpLHRlPWoodGUscmUsb2UsUT1OKFEsMTApLFgsUFsxMF0sMTM1MjgyOTkyNiwxNCksWD1qKFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzNdLDEzNTI4''@;'; put 'put ''Mjk5MjYsMTIpLG9lPVIob2UsUT1qKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzEyXSwxMzUyODI5OTI2LDYpLFgsdGU9Tih0ZSwxMCkscmUsUFs2XSwxNTQ4NjAzNjg0LDkpLHJlPVIocmUsb2UsUSxYPU4oWCwxMCksdGUsUFsxMV0sMTU0ODYwMzY4NCwxMyksdGU9Uih0ZSxyZSxvZSxRPU4o''@;'; put 'put ''USwxMCksWCxQWzNdLDE1NDg2MDM2ODQsMTUpLFg9UihYLHRlLHJlLG9lPU4ob2UsMTApLFEsUFs3XSwxNTQ4NjAzNjg0LDcpLFE9UihRLFgsdGUscmU9TihyZSwxMCksb2UsUFswXSwxNTQ4NjAzNjg0LDEyKSxvZT1SKG9lLFEsWCx0ZT1OKHRlLDEwKSxyZSxQWzEzXSwxNTQ4NjAzNjg0LDgp''@;'; put 'put ''LHJlPVIocmUsb2UsUSxYPU4oWCwxMCksdGUsUFs1XSwxNTQ4NjAzNjg0LDkpLHRlPVIodGUscmUsb2UsUT1OKFEsMTApLFgsUFsxMF0sMTU0ODYwMzY4NCwxMSksWD1SKFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzE0XSwxNTQ4NjAzNjg0LDcpLFE9UihRLFgsdGUscmU9TihyZSwxMCksb2Us''@;'; put 'put ''UFsxNV0sMTU0ODYwMzY4NCw3KSxvZT1SKG9lLFEsWCx0ZT1OKHRlLDEwKSxyZSxQWzhdLDE1NDg2MDM2ODQsMTIpLHJlPVIocmUsb2UsUSxYPU4oWCwxMCksdGUsUFsxMl0sMTU0ODYwMzY4NCw3KSx0ZT1SKHRlLHJlLG9lLFE9TihRLDEwKSxYLFBbNF0sMTU0ODYwMzY4NCw2KSxYPVIoWCx0''@;'; put 'put ''ZSxyZSxvZT1OKG9lLDEwKSxRLFBbOV0sMTU0ODYwMzY4NCwxNSksUT1SKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzFdLDE1NDg2MDM2ODQsMTMpLHJlPUgocmUsb2U9UihvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFsyXSwxNTQ4NjAzNjg0LDExKSxRLFg9TihYLDEwKSx0ZSxQWzE1XSwxODM2''@;'; put 'put ''MDcyNjkxLDkpLHRlPUgodGUscmUsb2UsUT1OKFEsMTApLFgsUFs1XSwxODM2MDcyNjkxLDcpLFg9SChYLHRlLHJlLG9lPU4ob2UsMTApLFEsUFsxXSwxODM2MDcyNjkxLDE1KSxRPUgoUSxYLHRlLHJlPU4ocmUsMTApLG9lLFBbM10sMTgzNjA3MjY5MSwxMSksb2U9SChvZSxRLFgsdGU9Tih0''@;'; put 'put ''ZSwxMCkscmUsUFs3XSwxODM2MDcyNjkxLDgpLHJlPUgocmUsb2UsUSxYPU4oWCwxMCksdGUsUFsxNF0sMTgzNjA3MjY5MSw2KSx0ZT1IKHRlLHJlLG9lLFE9TihRLDEwKSxYLFBbNl0sMTgzNjA3MjY5MSw2KSxYPUgoWCx0ZSxyZSxvZT1OKG9lLDEwKSxRLFBbOV0sMTgzNjA3MjY5MSwxNCks''@;'; put 'put ''UT1IKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzExXSwxODM2MDcyNjkxLDEyKSxvZT1IKG9lLFEsWCx0ZT1OKHRlLDEwKSxyZSxQWzhdLDE4MzYwNzI2OTEsMTMpLHJlPUgocmUsb2UsUSxYPU4oWCwxMCksdGUsUFsxMl0sMTgzNjA3MjY5MSw1KSx0ZT1IKHRlLHJlLG9lLFE9TihRLDEwKSxY''@;'; put 'put ''LFBbMl0sMTgzNjA3MjY5MSwxNCksWD1IKFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzEwXSwxODM2MDcyNjkxLDEzKSxRPUgoUSxYLHRlLHJlPU4ocmUsMTApLG9lLFBbMF0sMTgzNjA3MjY5MSwxMyksb2U9SChvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFs0XSwxODM2MDcyNjkxLDcpLHRlPUYo''@;'; put 'put ''dGUscmU9SChyZSxvZSxRLFg9TihYLDEwKSx0ZSxQWzEzXSwxODM2MDcyNjkxLDUpLG9lLFE9TihRLDEwKSxYLFBbOF0sMjA1Mzk5NDIxNywxNSksWD1GKFgsdGUscmUsb2U9TihvZSwxMCksUSxQWzZdLDIwNTM5OTQyMTcsNSksUT1GKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzRdLDIwNTM5''@;'; put 'put ''OTQyMTcsOCksb2U9RihvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFsxXSwyMDUzOTk0MjE3LDExKSxyZT1GKHJlLG9lLFEsWD1OKFgsMTApLHRlLFBbM10sMjA1Mzk5NDIxNywxNCksdGU9Rih0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzExXSwyMDUzOTk0MjE3LDE0KSxYPUYoWCx0ZSxyZSxvZT1O''@;'; put 'put ''KG9lLDEwKSxRLFBbMTVdLDIwNTM5OTQyMTcsNiksUT1GKFEsWCx0ZSxyZT1OKHJlLDEwKSxvZSxQWzBdLDIwNTM5OTQyMTcsMTQpLG9lPUYob2UsUSxYLHRlPU4odGUsMTApLHJlLFBbNV0sMjA1Mzk5NDIxNyw2KSxyZT1GKHJlLG9lLFEsWD1OKFgsMTApLHRlLFBbMTJdLDIwNTM5OTQyMTcs''@;'; put 'put ''OSksdGU9Rih0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzJdLDIwNTM5OTQyMTcsMTIpLFg9RihYLHRlLHJlLG9lPU4ob2UsMTApLFEsUFsxM10sMjA1Mzk5NDIxNyw5KSxRPUYoUSxYLHRlLHJlPU4ocmUsMTApLG9lLFBbOV0sMjA1Mzk5NDIxNywxMiksb2U9RihvZSxRLFgsdGU9Tih0ZSwxMCks''@;'; put 'put ''cmUsUFs3XSwyMDUzOTk0MjE3LDUpLHJlPUYocmUsb2UsUSxYPU4oWCwxMCksdGUsUFsxMF0sMjA1Mzk5NDIxNywxNSksWD13KFgsdGU9Rih0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzE0XSwyMDUzOTk0MjE3LDgpLHJlLG9lPU4ob2UsMTApLFEsUFsxMl0sMCw4KSxRPXcoUSxYLHRlLHJlPU4o''@;'; put 'put ''cmUsMTApLG9lLFBbMTVdLDAsNSksb2U9dyhvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFsxMF0sMCwxMikscmU9dyhyZSxvZSxRLFg9TihYLDEwKSx0ZSxQWzRdLDAsOSksdGU9dyh0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzFdLDAsMTIpLFg9dyhYLHRlLHJlLG9lPU4ob2UsMTApLFEsUFs1XSww''@;'; put 'put ''LDUpLFE9dyhRLFgsdGUscmU9TihyZSwxMCksb2UsUFs4XSwwLDE0KSxvZT13KG9lLFEsWCx0ZT1OKHRlLDEwKSxyZSxQWzddLDAsNikscmU9dyhyZSxvZSxRLFg9TihYLDEwKSx0ZSxQWzZdLDAsOCksdGU9dyh0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzJdLDAsMTMpLFg9dyhYLHRlLHJlLG9l''@;'; put 'put ''PU4ob2UsMTApLFEsUFsxM10sMCw2KSxRPXcoUSxYLHRlLHJlPU4ocmUsMTApLG9lLFBbMTRdLDAsNSksb2U9dyhvZSxRLFgsdGU9Tih0ZSwxMCkscmUsUFswXSwwLDE1KSxyZT13KHJlLG9lLFEsWD1OKFgsMTApLHRlLFBbM10sMCwxMyksdGU9dyh0ZSxyZSxvZSxRPU4oUSwxMCksWCxQWzld''@;'; put 'put ''LDAsMTEpLFg9dyhYLHRlLHJlLG9lPU4ob2UsMTApLFEsUFsxMV0sMCwxMSkscmU9TihyZSwxMCk7dmFyIGdlPXRoaXMuX2IrVytyZXwwO3RoaXMuX2I9dGhpcy5fYytaK29lfDAsdGhpcy5fYz10aGlzLl9kK3ErUXwwLHRoaXMuX2Q9dGhpcy5fZStZK1h8MCx0aGlzLl9lPXRoaXMuX2ErQit0''@;'; put 'put ''ZXwwLHRoaXMuX2E9Z2V9LHAucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRo''@;'; put 'put ''aXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUo''@;'; put 'put ''KTt2YXIgUD1uZXcgQnVmZmVyKDIwKTtyZXR1cm4gUC53cml0ZUludDMyTEUodGhpcy5fYSwwKSxQLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFAud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksUC53cml0ZUludDMyTEUodGhpcy5fZCwxMiksUC53cml0ZUludDMyTEUodGhpcy5fZSwxNiksUH0s''@;'; put 'put ''Y2UuZXhwb3J0cz1wfSw1MDE5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIs''@;'; put 'put ''IlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sOTY1NjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBwcm9jZXNzPiJ1Inx8IXByb2Nlc3MudmVyc2lvbnx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2''@;'; put 'put ''MC4iKXx8MD09PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PXByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBKKGIsRCxfLHApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIHcsRixOPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKE4pe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soYik7Y2FzZSAyOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Yi5jYWxsKG51bGwsRCl9''@;'; put 'put ''KTtjYXNlIDM6cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtiLmNhbGwobnVsbCxELF8pfSk7Y2FzZSA0OnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Yi5jYWxsKG51bGwsRCxfLHApfSk7ZGVmYXVsdDpmb3Iodz1uZXcgQXJyYXkoTi0xKSxGPTA7Rjx3Lmxl''@;'; put 'put ''bmd0aDspd1tGKytdPWFyZ3VtZW50c1tGXTtyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe2IuYXBwbHkobnVsbCx3KX0pfX19OnByb2Nlc3N9LDUyOTY1OihjZSxKLGIpPT57Si5wdWJsaWNFbmNyeXB0PWIoODcyNjcpLEoucHJpdmF0ZURlY3J5cHQ9Yig5ODYxMyksSi5wcml2''@;'; put 'put ''YXRlRW5jcnlwdD1mdW5jdGlvbihfLHApe3JldHVybiBKLnB1YmxpY0VuY3J5cHQoXyxwLCEwKX0sSi5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKF8scCl7cmV0dXJuIEoucHJpdmF0ZURlY3J5cHQoXyxwLCEwKX19LDMwNzE1OihjZSxKLGIpPT57dmFyIEQ9Yig2NzIxMSksXz1iKDI3MDU0KS5C''@;'; put 'put ''dWZmZXI7ZnVuY3Rpb24gcChOKXt2YXIgdz1fLmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoTiwwKSx3fWNlLmV4cG9ydHM9ZnVuY3Rpb24oTix3KXtmb3IodmFyIFIsRj1fLmFsbG9jKDApLEg9MDtGLmxlbmd0aDx3OylSPXAoSCsrKSxGPV8uY29uY2F0KFtGLEQoInNo''@;'; put 'put ''YTEiKS51cGRhdGUoTikudXBkYXRlKFIpLmRpZ2VzdCgpXSk7cmV0dXJuIEYuc2xpY2UoMCx3KX19LDE2NTA4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQsXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeixnKXtpZigheil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWls''@;'; put 'put ''ZWQiKX1mdW5jdGlvbiBOKHosZyl7ei5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsei5wcm90b3R5cGU9bmV3IHksei5wcm90b3R5cGUuY29uc3RydWN0b3I9en1mdW5jdGlvbiB3KHosZyx5KXtpZih3LmlzQk4oeikpcmV0dXJuIHo7dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXomJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KHp8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBGOyJvYmplY3QiPT10eXBlb2YgRD9ELmV4cG9ydHM9''@;'; put 'put ''dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0Y9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNTEwNjkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gSCh6LGcpe3ZhciB5PXouY2hhckNvZGVBdChnKTtyZXR1cm4geT49''@;'; put 'put ''NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUih6LGcseSl7dmFyIHg9SCh6LHkpO3JldHVybiB5LTE+PWcmJih4fD1IKHoseS0xKTw8NCkseH1mdW5jdGlvbiBqKHosZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oei5sZW5ndGgseSksVj1n''@;'; put 'put ''O1Y8VDtWKyspe3ZhciBVPXouY2hhckNvZGVBdChWKS00ODtDKj14LEMrPVU+PTQ5P1UtNDkrMTA6VT49MTc/VS0xNysxMDpVfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0''@;'; put 'put ''b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcs''@;'; put 'put ''eSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0i''@;'; put 'put ''PT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9B''@;'; put 'put ''cnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9''@;'; put 'put ''WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRv''@;'; put 'put ''QXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVu''@;'; put 'put ''Z3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsVixVPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShWPWdbQ118''@;'; put 'put ''Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxVJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1WPj4+MjYtVSY2NzEwODg2MywoVSs9MjQpPj0yNiYmKFUtPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KFY9Z1tDXXxnW0Mr''@;'; put 'put ''MV08PDh8Z1tDKzJdPDwxNik8PFUmNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPVY+Pj4yNi1VJjY3MTA4ODYzLChVKz0yNCk+PTI2JiYoVS09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGgu''@;'; put 'put ''Y2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVSxUPTAsVj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKVU9UihnLHksQyk8''@;'; put 'put ''PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKVU9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tWXXw9NjcxMDg4NjMmVSxU''@;'; put 'put ''Pj0xOD8oVC09MTgsdGhpcy53b3Jkc1tWKz0xXXw9VT4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0t''@;'; put 'put ''LFQ9VC95fDA7Zm9yKHZhciBWPWcubGVuZ3RoLXgsVT1WJUMsRT1NYXRoLm1pbihWLFYtVSkreCxtPTAsQT14O0E8RTtBKz1DKW09aihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9''@;'; put 'put ''PVUpe3ZhciBhZT0xO2ZvcihtPWooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPFU7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlv''@;'; put 'put ''bihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUu''@;'; put 'put ''Y2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0''@;'; put 'put ''cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09''@;'; put 'put ''PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFA9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxZPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4''@;'; put 'put ''MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3''@;'; put 'put ''NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoeixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV56Lm5lZ2F0aXZlO3ZhciB4PXoubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8ei53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxWPUMqVCxFPVYvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJlY7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5l''@;'; put 'put ''PU1hdGgubWluKG0sZy5sZW5ndGgtMSksbGU9TWF0aC5tYXgoMCxtLXoubGVuZ3RoKzEpO2xlPD1uZTtsZSsrKUErPShWPShDPTB8ei53b3Jkc1ttLWxlfDBdKSooVD0wfGcud29yZHNbbGVdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZWO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1''@;'; put 'put ''cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxWPTA7Vjx0aGlzLmxlbmd0aDtW''@;'; put 'put ''Kyspe3ZhciBVPXRoaXMud29yZHNbVl0sRT0oMTY3NzcyMTUmKFU8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPVU+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixWLS0pLHg9MCE9PVR8fFYhPT10aGlzLmxlbmd0aC0xP1BbNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4''@;'; put 'put ''PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1MW2ddLEE9WVtnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZl''@;'; put 'put ''PTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6UFttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNb''@;'; put 'put ''MV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBGPCJ1IiksdGhpcy50b0FycmF5TGlrZShGLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBk''@;'; put 'put ''ZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxWPSJsZSI9PT15LFU9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoVil7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4o''@;'; put 'put ''OCksVVttXT1FO2Zvcig7bTxUO20rKylVW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylVW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksVVtULW0tMV09RX1yZXR1cm4gVX0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMy''@;'; put 'put ''P2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJv''@;'; put 'put ''dG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuIDgxOTEmeXx8KHgrPTEzLHk+Pj49MTMpLDEyNyZ5fHwoeCs9Nyx5Pj4+PTcpLDE1Jnl8fCh4Kz00LHk+Pj49NCksMyZ5fHwoeCs9Mix5Pj4+PTIpLDEmeXx8eCsrLHh9LHcu''@;'; put 'put ''cHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''MDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExl''@;'; put 'put ''bmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEp''@;'; put 'put ''P3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5s''@;'; put 'put ''ZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25l''@;'; put 'put ''KCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29y''@;'; put 'put ''ZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5p''@;'; put 'put ''dXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4''@;'; put 'put ''ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0''@;'; put 'put ''bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLFY9MDtWPEMubGVuZ3RoO1YrKyl0aGlzLndvcmRz''@;'; put 'put ''W1ZdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbVl0pKygwfEMud29yZHNbVl0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJlY8eC5sZW5ndGg7VisrKXRoaXMud29yZHNbVl09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tWXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9''@;'; put 'put ''PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtWPHgubGVuZ3RoO1YrKyl0aGlzLndvcmRzW1ZdPXgud29yZHNbVl07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcu''@;'; put 'put ''bmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVu''@;'; put 'put ''Z3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNp''@;'; put 'put ''Z24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRo''@;'; put 'put ''aXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgVj0wLFU9MDtVPFQubGVuZ3RoO1UrKylWPSh5PSgwfEMud29yZHNbVV0pLSgwfFQud29yZHNbVV0pK1YpPj4yNix0aGlzLndvcmRzW1VdPTY3MTA4ODYzJnk7Zm9yKDswIT09ViYmVTxDLmxl''@;'; put 'put ''bmd0aDtVKyspVj0oeT0oMHxDLndvcmRzW1VdKStWKT4+MjYsdGhpcy53b3Jkc1tVXT02NzEwODg2MyZ5O2lmKDA9PT1WJiZVPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO1U8Qy5sZW5ndGg7VSsrKXRoaXMud29yZHNbVV09Qy53b3Jkc1tVXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgo''@;'; put 'put ''dGhpcy5sZW5ndGgsVSksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFo9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRz''@;'; put 'put ''LFY9eC53b3JkcyxVPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsbGU9YWU+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxRZT13ZT4+PjEzLG90PTB8Q1syXSxNZT04MTkxJm90LHZlPW90Pj4+MTMsWGU9MHxDWzNdLEJlPTgxOTEmWGUsQWU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJ''@;'; put 'put ''ZT1GZT4+PjEzLEhlPTB8Q1s1XSxEZT04MTkxJkhlLGtlPUhlPj4+MTMsX3Q9MHxDWzZdLG50PTgxOTEmX3QsSmU9X3Q+Pj4xMyxsbj0wfENbN10seXQ9ODE5MSZsbixTdD1sbj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLE5lPTgxOTEmdHQsdXQ9dHQ+''@;'; put 'put ''Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGNpPTB8VFsxXSxRdD04MTkxJmNpLHNuPWNpPj4+MTMsUmk9MHxUWzJdLGhuPTgxOTEmUmksZnQ9Umk+Pj4xMyxPcj0wfFRbM10sV3Q9ODE5MSZPcixBdD1Pcj4+PjEzLFJuPTB8VFs0XSxzdD04MTkxJlJuLFV0PVJuPj4+MTMs''@;'; put 'put ''cmk9MHxUWzVdLFdlPTgxOTEmcmksVHQ9cmk+Pj4xMyxucj0wfFRbNl0saHQ9ODE5MSZucix4dD1ucj4+PjEzLGpuPTB8VFs3XSxybj04MTkxJmpuLHp0PWpuPj4+MTMsaGk9MHxUWzhdLHVuPTgxOTEmaGksZm49aGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVn''@;'; put 'put ''YXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1YT0oVSsoRT1NYXRoLmltdWwobmUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFB0KSkrTWF0aC5pbXVsKGxlLFJ0KXwwKSk8PDEzKXwwO1U9KChBPU1hdGguaW11bChsZSxQdCkpKyhtPj4+MTMp''@;'; put 'put ''fDApKyh1YT4+PjI2KXwwLHVhJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpO3ZhciBFaT0oVSsoRT1FK01hdGguaW11bChuZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwobGUsUXQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsc24pfDApKyhtPj4+MTMpfDApKyhFaT4+PjI2KXwwLEVpJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUs''@;'; put 'put ''UnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDA7dmFyIHZyPShVKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChsZSxobil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHZyPj4+MjYpfDAsdnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEJlLFJ0KSxtPShtPU1hdGguaW11bChCZSxQdCkpK01hdGgu''@;'; put 'put ''aW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''VWUsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwO3ZhciBXbj0oVSsoRT1FK01hdGguaW11bChuZSxXdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwobGUsV3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwobGUsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoQmUsUXQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChCZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChNZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsaG4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFd0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwO3ZhciAkaT0oVSsoRT1FK01hdGguaW11bChuZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFV0KXwwKStNYXRoLmltdWwobGUs''@;'; put 'put ''c3QpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsVXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChEZSxSdCksbT0obT1NYXRoLmltdWwoRGUsUHQpKStNYXRoLmltdWwoa2UsUnQpfDAsQT1NYXRoLmltdWwoa2UsUHQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChCZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEJlLGZ0KXwwKStNYXRoLmltdWwoQWUsaG4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFd0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxXdCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSxVdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDA7dmFyIGVpPShVKyhFPUUrTWF0aC5pbXVsKG5lLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChsZSxXZSl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxUdCl8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKG50LFJ0KSxtPShtPU1hdGguaW11bChudCxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCksRT1FK01hdGguaW11bChEZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHNuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoa2UsUXQpfDAsQT1BK01hdGguaW11bChrZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGhuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxobil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoQmUsV3QpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChCZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFV0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSxVdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwO3ZhciBRcj0oVSsoRT1FK01hdGguaW11bChuZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHh0KXwwKStNYXRoLmltdWwobGUs''@;'; put 'put ''aHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUseHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoU3QsUnQpfDAsQT1NYXRoLmltdWwoU3QsUHQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwobnQsUXQpfDAsbT0obT1tK01hdGguaW11bChudCxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDAsRT1FK01hdGguaW11bChEZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKERlLGZ0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChrZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFd0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxXdCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoQmUsc3QpfDAsbT0obT1tK01hdGguaW11bChCZSxVdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''VWUseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwO3ZhciBWaT0oVSsoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwobGUscm4pfDApKTw8MTMpfDA7VT0oKEE9QStNYXRo''@;'; put 'put ''LmltdWwobGUsenQpfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKFN0LFF0KXwwLEE9QStNYXRoLmltdWwoU3Qsc24pfDAsRT1FK01hdGguaW11bChudCxobil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KERlLFd0KXwwLG09KG09bStNYXRoLmltdWwoRGUsQXQpfDApK01hdGguaW11bChrZSxXdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUs''@;'; put 'put ''VXQpfDAsRT1FK01hdGguaW11bChCZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKEJlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDA7dmFyIE5pPShVKyhFPUUrTWF0aC5pbXVsKG5lLHVuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwobmUsZm4pfDApK01hdGguaW11bChsZSx1bil8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChsZSxmbil8MCkrKG0+Pj4xMyl8MCkrKE5pPj4+MjYpfDAsTmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFJ0KSxtPShtPU1hdGguaW11bChOZSxQdCkpK01hdGgu''@;'; put 'put ''aW11bCh1dCxSdCl8MCxBPU1hdGguaW11bCh1dCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGhuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''eXQsZnQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGZ0KXwwLEU9RStNYXRoLmltdWwobnQsV3QpfDAsbT0obT1tK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDAsRT1FK01hdGguaW11bChEZSxzdCl8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKERlLFV0KXwwKStNYXRoLmltdWwoa2Usc3QpfDAsQT1BK01hdGguaW11bChrZSxVdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9''@;'; put 'put ''RStNYXRoLmltdWwoQmUsaHQpfDAsbT0obT1tK01hdGguaW11bChCZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChNZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUscm4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHVuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChRZSx1bil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBEYT0oVSsoRT1FK01hdGguaW11bChuZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwobGUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwobGUsZW4pfDApKyhtPj4+MTMpfDApKyhEYT4+PjI2KXwwLERhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxRdCksbT0obT1NYXRoLmltdWwoTmUsc24pKStNYXRoLmltdWwodXQs''@;'; put 'put ''UXQpfDAsQT1NYXRoLmltdWwodXQsc24pLEU9RStNYXRoLmltdWwoaXQsaG4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXww''@;'; put 'put ''KStNYXRoLmltdWwoU3QsV3QpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKG50LHN0KXwwLG09KG09bStNYXRoLmltdWwobnQsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwLEU9RStNYXRoLmltdWwoRGUsV2UpfDAsbT0obT1t''@;'; put 'put ''K01hdGguaW11bChEZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFdlKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEJlLHJuKXwwLG09KG09bStNYXRoLmltdWwoQmUsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsdW4pfDAsbT0obT1tK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLHVuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''dmUsZm4pfDA7dmFyIExyPShVKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHIm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGhuKSxtPShtPU1hdGguaW11bChOZSxmdCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxmdCksRT1FK01hdGguaW11bChpdCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsV3QpfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsVXQpfDApK01hdGguaW11bChTdCxzdCl8MCxBPUErTWF0aC5pbXVsKFN0LFV0KXwwLEU9RStNYXRoLmltdWwobnQsV2UpfDAsbT0obT1tK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDAsRT1FK01hdGguaW11bChEZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKERlLHh0KXwwKStNYXRoLmltdWwoa2UsaHQpfDAsQT1BK01hdGguaW11bChrZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHJuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoUmUsenQpfDApK01hdGguaW11bChJZSxybil8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoQmUsdW4pfDAsbT0obT1tK01hdGguaW11bChCZSxmbil8MCkrTWF0aC5pbXVsKEFlLHVuKXwwLEE9QStNYXRoLmltdWwoQWUsZm4pfDA7dmFyIFdpPShVKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFd0''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChOZSxBdCkpK01hdGguaW11bCh1dCxXdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFV0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSxVdCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChTdCxXZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwobnQsaHQpfDAsbT0obT1tK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUseHQpfDAsRT1FK01hdGguaW11bChEZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKERlLHp0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLHVuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChJZSx1''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKEllLGZuKXwwO3ZhciBwYT0oVSsoRT1FK01hdGguaW11bChCZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEJlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMp''@;'; put 'put ''fDApKyhwYT4+PjI2KXwwLHBhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxzdCksbT0obT1NYXRoLmltdWwoTmUsVXQpKStNYXRoLmltdWwodXQsc3QpfDAsQT1NYXRoLmltdWwodXQsVXQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoU3QsaHQpfDAsQT1BK01hdGguaW11bChTdCx4dCl8MCxFPUUrTWF0aC5pbXVsKG50LHJuKXwwLG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwobnQsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwLEU9RStNYXRoLmltdWwoRGUsdW4pfDAsbT0obT1tK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKGtlLHVuKXwwLEE9QStNYXRoLmltdWwoa2UsZm4pfDA7dmFyIFFuPShVKyhFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFFuPj4+MjYpfDAsUW4mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLFdl''@;'; put 'put ''KSxtPShtPU1hdGguaW11bChOZSxUdCkpK01hdGguaW11bCh1dCxXZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwobnQsdW4pfDAsbT0obT1tK01hdGguaW11bChudCxmbil8MCkrTWF0aC5pbXVsKEplLHVuKXwwLEE9QStNYXRoLmltdWwo''@;'; put 'put ''SmUsZm4pfDA7dmFyIGxhPShVKyhFPUUrTWF0aC5pbXVsKERlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChrZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChrZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGxhPj4+MjYpfDAsbGEm''@;'; put 'put ''PTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLGh0KSxtPShtPU1hdGguaW11bChOZSx4dCkpK01hdGguaW11bCh1dCxodCl8MCxBPU1hdGguaW11bCh1dCx4dCksRT1FK01hdGguaW11bChpdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUscm4pfDAsQT1BK01h''@;'; put 'put ''dGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LHVuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZm4pfDApK01hdGguaW11bChTdCx1bil8MCxBPUErTWF0aC5pbXVsKFN0LGZuKXwwO3ZhciBiYT0oVSsoRT1FK01hdGguaW11bChudCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKG50LGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7VT0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhiYT4+PjI2KXwwLGJhJj02NzEwODg2MyxFPU1hdGguaW11bChOZSxybiksbT0obT1NYXRoLmltdWwoTmUsenQpKStNYXRoLmltdWwodXQs''@;'; put 'put ''cm4pfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoaXQsdW4pfDAsbT0obT1tK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLHVuKXwwLEE9QStNYXRoLmltdWwoJGUsZm4pfDA7dmFyIExhPShVKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChTdCxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bChTdCxlbil8MCkrKG0+Pj4xMyl8MCkrKExhPj4+MjYpfDAsTGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE5lLHVuKSxtPShtPU1hdGguaW11bChOZSxmbikpK01hdGgu''@;'; put 'put ''aW11bCh1dCx1bil8MCxBPU1hdGguaW11bCh1dCxmbik7dmFyIEZhPShVKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtVPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKEZhPj4+MjYpfDAsRmEmPTY3MTA4ODYzO3ZhciB0aT0oVSsoRT1NYXRoLmltdWwoTmUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKE5lLGVuKSkrTWF0aC5pbXVsKHV0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBVPSgoQT1NYXRoLmltdWwodXQsZW4pKSsobT4+PjEz''@;'; put 'put ''KXwwKSsodGk+Pj4yNil8MCx0aSY9NjcxMDg4NjMsVlswXT11YSxWWzFdPUVpLFZbMl09dnIsVlszXT1XbixWWzRdPSRpLFZbNV09ZWksVls2XT1RcixWWzddPVZpLFZbOF09TmksVls5XT1EYSxWWzEwXT1McixWWzExXT1XaSxWWzEyXT1wYSxWWzEzXT1RbixWWzE0XT1sYSxWWzE1XT1iYSxW''@;'; put 'put ''WzE2XT1MYSxWWzE3XT1GYSxWWzE4XT10aSwwIT09VSYmKFZbMTldPVUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gUSh6LGcseSl7cmV0dXJuKG5ldyBYKS5tdWxwKHosZyx5KX1mdW5jdGlvbiBYKHosZyl7dGhpcy54PXosdGhpcy55PWd9TWF0aC5pbXVsfHwoWj1XKSx3LnByb3RvdHlwZS5t''@;'; put 'put ''dWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9aKHRoaXMsZyx5KTpDPDYzP1codGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKHosZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVe''@;'; put 'put ''ei5uZWdhdGl2ZSx5Lmxlbmd0aD16Lmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBWPUM7Qz0wO2Zvcih2YXIgVT02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC16Lmxlbmd0aCsxKTttPD1F''@;'; put 'put ''O20rKyl7dmFyIGxlPSgwfHoud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksd2U9NjcxMDg4NjMmbGU7VT02NzEwODg2MyYod2U9d2UrVXwwKSxDKz0oVj0oVj1WKyhsZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixWJj02NzEwODg2M315LndvcmRzW1RdPVUseD1WLFY9Q31y''@;'; put 'put ''ZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6USh0aGlzLGcseSkseH0sWC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7''@;'; put 'put ''QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxYLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sWC5wcm90b3R5''@;'; put 'put ''cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsVil7Zm9yKHZhciBVPTA7VTxWO1UrKylDW1VdPXlbZ1tVXV0sVFtVXT14W2dbVV1dfSxYLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULFYpe3RoaXMucGVybXV0ZShWLGcseSx4LEMsVCk7Zm9yKHZhciBVPTE7VTxU''@;'; put 'put ''O1U8PD0xKWZvcih2YXIgRT1VPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sbGU9QSx3ZT0wO3dlPFU7d2UrKyl7dmFyIFVlPXhbYWUrd2VdLFFlPUNbYWUrd2VdLG90PXhbYWUrd2UrVV0sTWU9''@;'; put 'put ''Q1thZSt3ZStVXSx2ZT1uZSpvdC1sZSpNZTtNZT1uZSpNZStsZSpvdCx4W2FlK3dlXT1VZSsob3Q9dmUpLENbYWUrd2VdPVFlK01lLHhbYWUrd2UrVV09VWUtb3QsQ1thZSt3ZStVXT1RZS1NZSx3ZSE9PUUmJih2ZT1tKm5lLUEqbGUsbGU9bSpsZStBKm5lLG5lPXZlKX19LFgucHJvdG90eXBl''@;'; put 'put ''Lmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxYLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4''@;'; put 'put ''LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxYLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91''@;'; put 'put ''bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxYLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLFY9MDtWPHk7VisrKXhbMipWXT04''@;'; put 'put ''MTkxJihUKz0wfGdbVl0pLHhbMipWKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKFY9Mip5O1Y8QzsrK1YpeFtWXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LFgucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hd''@;'; put 'put ''PTA7cmV0dXJuIHl9LFgucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksVj10aGlzLnN0dWIoQyksVT1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXko''@;'; put 'put ''QyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxsZT14LndvcmRzO2xlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLFUsQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShV''@;'; put 'put ''LFYsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxWLGFlLG5lLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKmFlW3dlXS1tW3dlXSpuZVt3ZV07bVt3ZV09RVt3ZV0qbmVbd2VdK21bd2VdKmFlW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxt''@;'; put 'put ''LEMpLHRoaXMudHJhbnNmb3JtKEUsbSxsZSxWLEMsVCksdGhpcy5jb25qdWdhdGUobGUsVixDKSx0aGlzLm5vcm1hbGl6ZTEzYihsZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11''@;'; put 'put ''bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLFEodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2''@;'; put 'put ''NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYo''@;'; put 'put ''dGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBCKHope2Zvcih2YXIgZz1uZXcgQXJyYXkoei5iaXRMZW5ndGgoKSkseT0wO3k8Zy5s''@;'; put 'put ''ZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KHoud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxl''@;'; put 'put ''bmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixD''@;'; put 'put ''PTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIFY9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgVT10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1VPDx5fFYsVj1VPj4+MjYteX1WJiYodGhpcy53b3Jkc1tUXT1WLHRoaXMu''@;'; put 'put ''bGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LFY9TWF0aC5taW4o''@;'; put 'put ''KGctVCkvMjYsdGhpcy5sZW5ndGgpLFU9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1WLEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPFY7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1WfWlmKDAhPT1WKWlmKHRoaXMubGVuZ3RoPlYpZm9y''@;'; put 'put ''KHRoaXMubGVuZ3RoLT1WLG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStWXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8''@;'; put 'put ''dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUmVX1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1m''@;'; put 'put ''dW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49''@;'; put 'put ''MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAh''@;'; put 'put ''PT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5''@;'; put 'put ''XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29y''@;'; put 'put ''ZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRo''@;'; put 'put ''aXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcu''@;'; put 'put ''bGVuZ3RoK3gpO3ZhciBWLFU9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtWPSgwfHRoaXMud29yZHNbVCt4XSkrVTt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O1U9KChWLT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWfWZvcig7VDx0''@;'; put 'put ''aGlzLmxlbmd0aC14O1QrKylVPShWPSgwfHRoaXMud29yZHNbVCt4XSkrVSk+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZWO2lmKDA9PT1VKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1VKSxVPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKVU9KFY9LSgwfHRoaXMud29yZHNb''@;'; put 'put ''VF0pK1UpPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJlY7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLFY9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2''@;'; put 'put ''LXRoaXMuX2NvdW50Qml0cyhWKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksVj0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgbGU9NjcxMDg4NjQq''@;'; put 'put ''KDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihsZT1NYXRoLm1pbihsZS9WfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsbGUsbmUpOzAhPT1DLm5lZ2F0aXZlOylsZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUp''@;'; put 'put ''LEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09bGUpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9Vi5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9''@;'; put 'put ''Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhWPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1WLmRpdi5uZWcoKSkse2RpdjpDLG1vZDpWLm1vZH0pOnRo''@;'; put 'put ''aXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oVj10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9Vi5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpWLmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTww''@;'; put 'put ''P3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0p''@;'; put 'put ''LG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxWfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksVj14LmNtcChDKTtyZXR1cm4gVjwwfHwxPT09VCYmMD09PVY/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2''@;'; put 'put ''LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFy''@;'; put 'put ''IEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPW5ldyB3KDApLFU9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7''@;'; put 'put ''ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBsZT0wLHdlPTE7ISh4Lndv''@;'; put 'put ''cmRzWzBdJndlKSYmbGU8MjY7KytsZSx3ZTw8PTEpO2lmKGxlPjApZm9yKHguaXVzaHJuKGxlKTtsZS0tID4wOykoVi5pc09kZCgpfHxVLmlzT2RkKCkpJiYoVi5pYWRkKG0pLFUuaXN1YihBKSksVi5pdXNocm4oMSksVS5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIo''@;'; put 'put ''ViksVC5pc3ViKFUpKTooeC5pc3ViKHkpLFYuaXN1YihDKSxVLmlzdWIoVCkpfXJldHVybnthOlYsYjpVLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9u''@;'; put 'put ''ZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxWPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIFU9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZVPDI2OysrVSxFPDw9MSk7aWYoVT4w''@;'; put 'put ''KWZvcih5Lml1c2hybihVKTtVLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKFYpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoViksVC5pdXNo''@;'; put 'put ''cm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0''@;'; put 'put ''dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtm''@;'; put 'put ''b3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBWPXk7eT14LHg9Vn1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4o''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMu''@;'; put 'put ''d29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eCly''@;'; put 'put ''ZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLFY9eDswIT09VCYmVjx0aGlzLmxlbmd0aDtWKyspe3ZhciBVPTB8dGhpcy53b3Jkc1tWXTtUPShVKz1UKT4+PjI2LHRoaXMud29yZHNbVl09VSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYo''@;'; put 'put ''dGhpcy53b3Jkc1tWXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09''@;'; put 'put ''Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAx''@;'; put 'put ''O3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhp''@;'; put 'put ''cy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgU2UoZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2Zv''@;'; put 'put ''cmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVk''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRB''@;'; put 'put ''ZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''U3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVs''@;'; put 'put ''KHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3Fy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHRlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24g''@;'; put 'put ''cmUoeixnKXt0aGlzLm5hbWU9eix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIG9lKCl7cmUuY2FsbCh0aGlzLCJrMjU2Iiwi''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe3JlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAw''@;'; put 'put ''MDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtyZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7cmUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZSh6KXtpZigic3RyaW5nIj09dHlwZW9mIHope3ZhciBnPXcuX3ByaW1lKHopO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcCh6Lmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhh''@;'; put 'put ''biAxIiksdGhpcy5tPXosdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKHope1NlLmNhbGwodGhpcyx6KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0''@;'; put 'put ''aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlz''@;'; put 'put ''Lm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXJlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxyZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5''@;'; put 'put ''PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9''@;'; put 'put ''MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0scmUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LHJlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRo''@;'; put 'put ''aXMuayl9LE4ob2UscmUpLG9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNb''@;'; put 'put ''MF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBWPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109ViZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBVPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShVJngpPDw0fFY+Pj4yMixWPVV9Zy53b3Jkc1tULTEwXT1WPj4+PTIyLGcu''@;'; put 'put ''bGVuZ3RoLT0wPT09ViYmZy5sZW5ndGg+MTA/MTA6OX0sb2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRz''@;'; put 'put ''W3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sTihnZSxyZSksTihfZSxyZSksTihUZSxy''@;'; put 'put ''ZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109''@;'; put 'put ''eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYodGVbZ10pcmV0dXJuIHRlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgb2U7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gdGVbZ109eSx5fSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNa''@;'; put 'put ''ZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkp''@;'; put 'put ''O3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0''@;'; put 'put ''aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkp''@;'; put 'put ''KX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4o''@;'; put 'put ''Mik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgVj1uZXcgdygxKS50b1JlZCh0aGlzKSxVPVYucmVkTmVnKCksRT10aGlzLm0uc3Vi''@;'; put 'put ''bigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChVKTspbS5yZWRJQWRkKFUpO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSks''@;'; put 'put ''bmU9dGhpcy5wb3coZyxDKSxsZT1UOzAhPT1uZS5jbXAoVik7KXtmb3IodmFyIHdlPW5lLFVlPTA7MCE9PXdlLmNtcChWKTtVZSsrKXdlPXdlLnJlZFNxcigpO3AoVWU8bGUpO3ZhciBRZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihsZS1VZS0xKSk7YWU9YWUucmVkTXVsKFFlKSxBPVFl''@;'; put 'put ''LnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxsZT1VZX1yZXR1cm4gYWV9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2Qo''@;'; put 'put ''eSl9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztm''@;'; put 'put ''b3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgVj1DWzBdLFU9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2Fl''@;'; put 'put ''LS0pe3ZhciBuZT1BPj5hZSYxO1YhPT1DWzBdJiYoVj10aGlzLnNxcihWKSksMCE9PW5lfHwwIT09VT8oVTw8PTEsVXw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihWPXRoaXMubXVsKFYsQ1tVXSksRT0wLFU9MCkpOkU9MH1tPTI2fXJldHVybiBWfSxTZS5wcm90b3R5cGUuY29udmVy''@;'; put 'put ''dFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5l''@;'; put 'put ''dyB6ZShnKX0sTih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3Jl''@;'; put 'put ''dHVybiB5LnJlZD1udWxsLHl9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmlt''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksVj1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP1Y9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihWPVQuaWFkZCh0aGlzLm0pKSxWLl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90''@;'; put 'put ''eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9''@;'; put 'put ''eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxWPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/Vj1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKFY9VC5pYWRkKHRoaXMubSkpLFYuX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDk4NjEzOihjZSxKLGIpPT57dmFyIEQ9Yig2NTY2NyksXz1iKDMwNzE1KSxwPWIoMzcxOTYpLE49YigxNjUwOCksdz1iKDE0MTA1KSxGPWIoNjcyMTEpLEg9''@;'; put 'put ''YigxMDU2OCksUj1iKDI3MDU0KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihCLFcsWil7dmFyIHE7cT1CLnBhZGRpbmc/Qi5wYWRkaW5nOlo/MTo0O3ZhciB0ZSxRPUQoQiksWD1RLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPlh8fG5ldyBOKFcpLmNtcChRLm1vZHVsdXMp''@;'; put 'put ''Pj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3RlPVo/SChuZXcgTihXKSxRKTp3KFcsUSk7dmFyIHJlPVIuYWxsb2MoWC10ZS5sZW5ndGgpO2lmKHRlPVIuY29uY2F0KFtyZSx0ZV0sWCksND09PXEpcmV0dXJuIGZ1bmN0aW9uIGooWSxCKXt2YXIgVz1ZLm1vZHVsdXMu''@;'; put 'put ''Ynl0ZUxlbmd0aCgpLFo9Rigic2hhMSIpLnVwZGF0ZShSLmFsbG9jKDApKS5kaWdlc3QoKSxxPVoubGVuZ3RoO2lmKDAhPT1CWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBRPUIuc2xpY2UoMSxxKzEpLFg9Qi5zbGljZShxKzEpLHRlPXAoUSxfKFgscSkpLHJl''@;'; put 'put ''PXAoWCxfKHRlLFctcS0xKSk7aWYoZnVuY3Rpb24gTChZLEIpe1k9Ui5mcm9tKFkpLEI9Ui5mcm9tKEIpO3ZhciBXPTAsWj1ZLmxlbmd0aDtZLmxlbmd0aCE9PUIubGVuZ3RoJiYoVysrLFo9TWF0aC5taW4oWS5sZW5ndGgsQi5sZW5ndGgpKTtmb3IodmFyIHE9LTE7KytxPFo7KVcrPVlbcV1e''@;'; put 'put ''QltxXTtyZXR1cm4gV30oWixyZS5zbGljZSgwLHEpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIG9lPXE7MD09PXJlW29lXTspb2UrKztpZigxIT09cmVbb2UrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIHJlLnNsaWNl''@;'; put 'put ''KG9lKX0oUSx0ZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uIFAoWSxCLFcpe2Zvcih2YXIgWj1CLnNsaWNlKDAsMikscT0yLFE9MDswIT09QltxKytdOylpZihxPj1CLmxlbmd0aCl7USsrO2JyZWFrfXZhciBYPUIuc2xpY2UoMixxLTEpO2lmKCgiMDAwMiIhPT1aLnRvU3RyaW5nKCJoZXgi''@;'; put 'put ''KSYmIVd8fCIwMDAxIiE9PVoudG9TdHJpbmcoImhleCIpJiZXKSYmUSsrLFgubGVuZ3RoPDgmJlErKyxRKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBCLnNsaWNlKHEpfSgwLHRlLFopO2lmKDM9PT1xKXJldHVybiB0ZTt0aHJvdyBuZXcgRXJyb3IoInVua25v''@;'; put 'put ''d24gcGFkZGluZyIpfX0sODcyNjc6KGNlLEosYik9Pnt2YXIgRD1iKDY1NjY3KSxfPWIoMzM0MikscD1iKDY3MjExKSxOPWIoMzA3MTUpLHc9YigzNzE5NiksRj1iKDE2NTA4KSxIPWIoMTA1NjgpLFI9YigxNDEwNSksaj1iKDI3MDU0KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihXLFos''@;'; put 'put ''cSl7dmFyIFE7UT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciB0ZSxYPUQoVyk7aWYoND09PVEpdGU9ZnVuY3Rpb24gUChCLFcpe3ZhciBaPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCkscT1XLmxlbmd0aCxRPXAoInNoYTEiKS51cGRhdGUoai5hbGxvYygwKSkuZGlnZXN0KCksWD1RLmxl''@;'; put 'put ''bmd0aCx0ZT0yKlg7aWYocT5aLXRlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIHJlPWouYWxsb2MoWi1xLXRlLTIpLG9lPVotWC0xLGdlPV8oWCksX2U9dyhqLmNvbmNhdChbUSxyZSxqLmFsbG9jKDEsMSksV10sb2UpLE4oZ2Usb2UpKSxUZT13KGdlLE4oX2Us''@;'; put 'put ''WCkpO3JldHVybiBuZXcgRihqLmNvbmNhdChbai5hbGxvYygxKSxUZSxfZV0sWikpfShYLFopO2Vsc2UgaWYoMT09PVEpdGU9ZnVuY3Rpb24gTChCLFcsWil7dmFyIFgscT1XLmxlbmd0aCxRPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5RLTExKXRocm93IG5ldyBFcnJvcigibWVzc2Fn''@;'; put 'put ''ZSB0b28gbG9uZyIpO3JldHVybiBYPVo/ai5hbGxvYyhRLXEtMywyNTUpOmZ1bmN0aW9uIFkoQil7Zm9yKHZhciBYLFc9ai5hbGxvY1Vuc2FmZShCKSxaPTAscT1fKDIqQiksUT0wO1o8QjspUT09PXEubGVuZ3RoJiYocT1fKDIqQiksUT0wKSwoWD1xW1ErK10pJiYoV1taKytdPVgpO3JldHVy''@;'; put 'put ''biBXfShRLXEtMyksbmV3IEYoai5jb25jYXQoW2ouZnJvbShbMCxaPzE6Ml0pLFgsai5hbGxvYygxKSxXXSxRKSl9KFgsWixxKTtlbHNle2lmKDMhPT1RKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHRlPW5ldyBGKFopKS5jbXAoWC5tb2R1bHVzKT49MCl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9SKHRlLFgpOkgodGUsWCl9fSwxMDU2ODooY2UsSixiKT0+e3ZhciBEPWIoMTY1MDgpLF89YigyNzA1NCkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChOLHcpe3JldHVybiBfLmZyb20oTi50b1JlZChE''@;'; put 'put ''Lm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBEKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDM3MTk2OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiLEQpe2Zvcih2YXIgXz1iLmxlbmd0aCxwPS0xOysrcDxfOyliW3BdXj1EW3BdO3JldHVybiBifX0sMzM0''@;'; put 'put ''MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD02NTUzNixOPWIoMjcwNTQpLkJ1ZmZlcix3PWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0bztjZS5leHBvcnRzPXcmJncuZ2V0UmFuZG9tVmFsdWVzP2Z1bmN0aW9uIEYoSCxSKXtpZihIPjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgaj1OLmFsbG9jVW5zYWZlKEgpO2lmKEg+MClpZihIPkQpZm9yKHZhciBQPTA7UDxIO1ArPUQpdy5nZXRSYW5kb21WYWx1ZXMoai5zbGljZShQLFArRCkpO2Vsc2Ugdy5nZXRSYW5kb21WYWx1ZXMoaik7cmV0''@;'; put 'put ''dXJuImZ1bmN0aW9uIj09dHlwZW9mIFI/cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe1IobnVsbCxqKX0pOmp9OmZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5V''@;'; put 'put ''c2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw5NjgyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEQoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dz''@;'; put 'put ''ZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgXz1iKDI3MDU0KSxwPWIoMzM0MiksTj1fLkJ1ZmZlcix3PV8ua01heExlbmd0aCxGPWdsb2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0byxIPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gUihC''@;'; put 'put ''LFcpe2lmKCJudW1iZXIiIT10eXBlb2YgQnx8QiE9Qil0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKEI+SHx8QjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoQj53fHxCPlcpdGhyb3cgbmV3IFJhbmdl''@;'; put 'put ''RXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBqKEIsVyxaKXtpZigibnVtYmVyIiE9dHlwZW9mIEJ8fEIhPUIpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoQj5IfHxCPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJl''@;'; put 'put ''IGEgdWludDMyIik7aWYoQitXPlp8fEI+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIEwoQixXLFoscSl7aWYocHJvY2Vzcy5icm93c2VyKXt2YXIgWD1uZXcgVWludDhBcnJheShCLmJ1ZmZlcixXLFopO3JldHVybiBGLmdldFJhbmRvbVZhbHVl''@;'; put 'put ''cyhYKSxxP3ZvaWQgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3EobnVsbCxCKX0pOkJ9aWYoIXEpcmV0dXJuIHAoWikuY29weShCLFcpLEI7cChaLGZ1bmN0aW9uKHJlLG9lKXtpZihyZSlyZXR1cm4gcShyZSk7b2UuY29weShCLFcpLHEobnVsbCxCKX0pfUYmJkYuZ2V0UmFuZG9tVmFs''@;'; put 'put ''dWVzfHwhcHJvY2Vzcy5icm93c2VyPyhKLnJhbmRvbUZpbGw9ZnVuY3Rpb24gUChCLFcsWixxKXtpZighKE4uaXNCdWZmZXIoQil8fEIgaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBV''@;'; put 'put ''aW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFcpcT1XLFc9MCxaPUIubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFopcT1aLFo9Qi5sZW5ndGgtVztlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFIoVyxCLmxlbmd0aCksaihaLFcsQi5sZW5ndGgpLEwoQixXLFoscSl9LEoucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gWShCLFcsWil7aWYodHlwZW9mIFc+InUiJiYoVz0wKSwhKE4uaXNCdWZmZXIoQil8fEIgaW5zdGFuY2VvZiBnbG9iYWwu''@;'; put 'put ''VWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFIoVyxCLmxlbmd0aCksdm9pZCAwPT09WiYmKFo9Qi5sZW5ndGgtVyksaihaLFcsQi5sZW5ndGgpLEwoQixXLFopfSk6KEoucmFuZG9t''@;'; put 'put ''RmlsbD1ELEoucmFuZG9tRmlsbFN5bmM9RCl9LDc0MDc1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTY1NiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oWSl7dmFyIEI9W107Zm9yKHZhciBXIGluIFkpQi5wdXNoKFcpO3JldHVybiBCfTtjZS5leHBvcnRzPWo7dmFyIHA9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShiKDI3NjM3KSk7cC5pbmhlcml0cz1iKDcxOTkzKTt2YXIgTj1iKDE5NjA5KSx3PWIoNDc4NDkpO3AuaW5oZXJpdHMoaixOKTtmb3IodmFyIEY9Xyh3LnByb3RvdHlwZSksSD0wO0g8Ri5sZW5ndGg7SCsrKXt2YXIgUj1GW0hdO2oucHJvdG90eXBlW1JdfHwoai5wcm90b3R5''@;'; put 'put ''cGVbUl09dy5wcm90b3R5cGVbUl0pfWZ1bmN0aW9uIGooWSl7aWYoISh0aGlzIGluc3RhbmNlb2YgaikpcmV0dXJuIG5ldyBqKFkpO04uY2FsbCh0aGlzLFkpLHcuY2FsbCh0aGlzLFkpLFkmJiExPT09WS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLFkmJiExPT09WS53cml0YWJsZSYm''@;'; put 'put ''KHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxZJiYhMT09PVkuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLFApfWZ1bmN0aW9uIFAoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5k''@;'; put 'put ''ZWR8fEQubmV4dFRpY2soTCx0aGlzKX1mdW5jdGlvbiBMKFkpe1kuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hX''@;'; put 'put ''YXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oWSl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVksdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWQ9WSl9fSksai5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oWSxCKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxELm5leHRUaWNrKEIsWSl9fSwxODgyMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXA7dmFyIEQ9YigyOTA5KSxfPU9iamVjdC5j''@;'; put 'put ''cmVhdGUoYigyNzYzNykpO2Z1bmN0aW9uIHAoTil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKE4pO0QuY2FsbCh0aGlzLE4pfV8uaW5oZXJpdHM9Yig3MTk5MyksXy5pbmhlcml0cyhwLEQpLHAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTix3LEYpe0YobnVs''@;'; put 'put ''bCxOKX19LDE5NjA5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTY1Nik7Y2UuZXhwb3J0cz1yZTt2YXIgcCxfPWIoMjAwNTMpO3JlLlJlYWRhYmxlU3RhdGU9dGUsYig0NDM1Nik7dmFyIHc9ZnVuY3Rpb24oTWUsdmUpe3JldHVybiBNZS5saXN0ZW5lcnModmUpLmxlbmd0aH0s''@;'; put 'put ''Rj1iKDE4MzQyKSxIPWIoMjY1NSkuQnVmZmVyLFI9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxMPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO0wuaW5oZXJp''@;'; put 'put ''dHM9Yig3MTk5Myk7dmFyIFk9Yig3OTgzOCksQj12b2lkIDA7Qj1ZJiZZLmRlYnVnbG9nP1kuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxXPWIoMjc4MDkpLFo9YigyMTUwOSk7TC5pbmhlcml0cyhyZSxGKTt2YXIgUT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95Iiwi''@;'; put 'put ''cGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiB0ZShNZSx2ZSl7dmFyIFhlPXZlIGluc3RhbmNlb2YocD1wfHxiKDc0MDc1KSk7dGhpcy5vYmplY3RNb2RlPSEhKE1lPU1lfHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTWUucmVhZGFibGVP''@;'; put 'put ''YmplY3RNb2RlKTt2YXIgQmU9TWUuaGlnaFdhdGVyTWFyayxBZT1NZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPUJlfHwwPT09QmU/QmU6WGUmJihBZXx8MD09PUFlKT9BZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGgu''@;'; put 'put ''Zmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgVyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5z''@;'; put 'put ''eW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9TWUuZGVmYXVsdEVuY29kaW5nfHwidXRm''@;'; put 'put ''OCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsTWUuZW5jb2RpbmcmJihxfHwocT1iKDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IHEoTWUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9TWUuZW5jb2Rp''@;'; put 'put ''bmcpfWZ1bmN0aW9uIHJlKE1lKXtpZihwPXB8fGIoNzQwNzUpLCEodGhpcyBpbnN0YW5jZW9mIHJlKSlyZXR1cm4gbmV3IHJlKE1lKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyB0ZShNZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLE1lJiYoImZ1bmN0aW9uIj09dHlwZW9mIE1lLnJlYWQmJih0''@;'; put 'put ''aGlzLl9yZWFkPU1lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBNZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1NZS5kZXN0cm95KSksRi5jYWxsKHRoaXMpfWZ1bmN0aW9uIG9lKE1lLHZlLFhlLEJlLEFlKXt2YXIgUmUsRmU9TWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG51bGw9PT12ZT8o''@;'; put 'put ''RmUucmVhZGluZz0hMSxmdW5jdGlvbiBnKE1lLHZlKXtpZighdmUuZW5kZWQpe2lmKHZlLmRlY29kZXIpe3ZhciBYZT12ZS5kZWNvZGVyLmVuZCgpO1hlJiZYZS5sZW5ndGgmJih2ZS5idWZmZXIucHVzaChYZSksdmUubGVuZ3RoKz12ZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoKX12ZS5lbmRl''@;'; put 'put ''ZD0hMCx5KE1lKX19KE1lLEZlKSk6KEFlfHwoUmU9ZnVuY3Rpb24gX2UoTWUsdmUpe3ZhciBYZTtyZXR1cm4hZnVuY3Rpb24gUChNZSl7cmV0dXJuIEguaXNCdWZmZXIoTWUpfHxNZSBpbnN0YW5jZW9mIFJ9KHZlKSYmInN0cmluZyIhPXR5cGVvZiB2ZSYmdm9pZCAwIT09dmUmJiFNZS5vYmpl''@;'; put 'put ''Y3RNb2RlJiYoWGU9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxYZX0oRmUsdmUpKSxSZT9NZS5lbWl0KCJlcnJvciIsUmUpOkZlLm9iamVjdE1vZGV8fHZlJiZ2ZS5sZW5ndGg+MD8oInN0cmluZyIhPXR5cGVvZiB2ZSYmIUZlLm9iamVjdE1vZGUm''@;'; put 'put ''Jk9iamVjdC5nZXRQcm90b3R5cGVPZih2ZSkhPT1ILnByb3RvdHlwZSYmKHZlPWZ1bmN0aW9uIGooTWUpe3JldHVybiBILmZyb20oTWUpfSh2ZSkpLEJlP0ZlLmVuZEVtaXR0ZWQ/TWUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6''@;'; put 'put ''Z2UoTWUsRmUsdmUsITApOkZlLmVuZGVkP01lLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihGZS5yZWFkaW5nPSExLEZlLmRlY29kZXImJiFYZT8odmU9RmUuZGVjb2Rlci53cml0ZSh2ZSksRmUub2JqZWN0TW9kZXx8MCE9PXZlLmxlbmd0aD9n''@;'; put 'put ''ZShNZSxGZSx2ZSwhMSk6QyhNZSxGZSkpOmdlKE1lLEZlLHZlLCExKSkpOkJlfHwoRmUucmVhZGluZz0hMSkpLGZ1bmN0aW9uIFRlKE1lKXtyZXR1cm4hTWUuZW5kZWQmJihNZS5uZWVkUmVhZGFibGV8fE1lLmxlbmd0aDxNZS5oaWdoV2F0ZXJNYXJrfHwwPT09TWUubGVuZ3RoKX0oRmUpfWZ1''@;'; put 'put ''bmN0aW9uIGdlKE1lLHZlLFhlLEJlKXt2ZS5mbG93aW5nJiYwPT09dmUubGVuZ3RoJiYhdmUuc3luYz8oTWUuZW1pdCgiZGF0YSIsWGUpLE1lLnJlYWQoMCkpOih2ZS5sZW5ndGgrPXZlLm9iamVjdE1vZGU/MTpYZS5sZW5ndGgsQmU/dmUuYnVmZmVyLnVuc2hpZnQoWGUpOnZlLmJ1ZmZlci5w''@;'; put 'put ''dXNoKFhlKSx2ZS5uZWVkUmVhZGFibGUmJnkoTWUpKSxDKE1lLHZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocmUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWR9LHNldDpmdW5jdGlvbihNZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPU1lKX19KSxyZS5wcm90b3R5cGUuZGVzdHJveT1aLmRlc3Ryb3kscmUucHJvdG90eXBlLl91bmRlc3Ryb3k9Wi51bmRlc3Ryb3kscmUucHJvdG90eXBlLl9k''@;'; put 'put ''ZXN0cm95PWZ1bmN0aW9uKE1lLHZlKXt0aGlzLnB1c2gobnVsbCksdmUoTWUpfSxyZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihNZSx2ZSl7dmFyIEJlLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFhlLm9iamVjdE1vZGU/QmU9ITA6InN0cmluZyI9PXR5cGVvZiBNZSYmKCh2ZT12''@;'; put 'put ''ZXx8WGUuZGVmYXVsdEVuY29kaW5nKSE9PVhlLmVuY29kaW5nJiYoTWU9SC5mcm9tKE1lLHZlKSx2ZT0iIiksQmU9ITApLG9lKHRoaXMsTWUsdmUsITEsQmUpfSxyZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihNZSl7cmV0dXJuIG9lKHRoaXMsTWUsbnVsbCwhMCwhMSl9LHJlLnByb3Rv''@;'; put 'put ''dHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxyZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oTWUpe3JldHVybiBxfHwocT1iKDc4NDU0KS5JKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHEoTWUp''@;'; put 'put ''LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9TWUsdGhpc307ZnVuY3Rpb24geihNZSx2ZSl7cmV0dXJuIE1lPD0wfHwwPT09dmUubGVuZ3RoJiZ2ZS5lbmRlZD8wOnZlLm9iamVjdE1vZGU/MTpNZSE9TWU/dmUuZmxvd2luZyYmdmUubGVuZ3RoP3ZlLmJ1ZmZlci5oZWFkLmRhdGEubGVu''@;'; put 'put ''Z3RoOnZlLmxlbmd0aDooTWU+dmUuaGlnaFdhdGVyTWFyayYmKHZlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gemUoTWUpe3JldHVybiBNZT49ODM4ODYwOD9NZT04Mzg4NjA4OihNZS0tLE1lfD1NZT4+PjEsTWV8PU1lPj4+MixNZXw9TWU+Pj40LE1lfD1NZT4+PjgsTWV8PU1lPj4+MTYsTWUr''@;'; put 'put ''KyksTWV9KE1lKSksTWU8PXZlLmxlbmd0aD9NZTp2ZS5lbmRlZD92ZS5sZW5ndGg6KHZlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24geShNZSl7dmFyIHZlPU1lLl9yZWFkYWJsZVN0YXRlO3ZlLm5lZWRSZWFkYWJsZT0hMSx2ZS5lbWl0dGVkUmVhZGFibGV8fChCKCJlbWl0UmVhZGFi''@;'; put 'put ''bGUiLHZlLmZsb3dpbmcpLHZlLmVtaXR0ZWRSZWFkYWJsZT0hMCx2ZS5zeW5jP0QubmV4dFRpY2soeCxNZSk6eChNZSkpfWZ1bmN0aW9uIHgoTWUpe0IoImVtaXQgcmVhZGFibGUiKSxNZS5lbWl0KCJyZWFkYWJsZSIpLEEoTWUpfWZ1bmN0aW9uIEMoTWUsdmUpe3ZlLnJlYWRpbmdNb3JlfHwo''@;'; put 'put ''dmUucmVhZGluZ01vcmU9ITAsRC5uZXh0VGljayhULE1lLHZlKSl9ZnVuY3Rpb24gVChNZSx2ZSl7Zm9yKHZhciBYZT12ZS5sZW5ndGg7IXZlLnJlYWRpbmcmJiF2ZS5mbG93aW5nJiYhdmUuZW5kZWQmJnZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrJiYoQigibWF5YmVSZWFkTW9yZSByZWFk''@;'; put 'put ''IDAiKSxNZS5yZWFkKDApLFhlIT09dmUubGVuZ3RoKTspWGU9dmUubGVuZ3RoO3ZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIFUoTWUpe0IoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLE1lLnJlYWQoMCl9ZnVuY3Rpb24gbShNZSx2ZSl7dmUucmVhZGluZ3x8KEIoInJlc3VtZSByZWFk''@;'; put 'put ''IDAiKSxNZS5yZWFkKDApKSx2ZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdmUuYXdhaXREcmFpbj0wLE1lLmVtaXQoInJlc3VtZSIpLEEoTWUpLHZlLmZsb3dpbmcmJiF2ZS5yZWFkaW5nJiZNZS5yZWFkKDApfWZ1bmN0aW9uIEEoTWUpe3ZhciB2ZT1NZS5fcmVhZGFibGVTdGF0ZTtmb3IoQigiZmxv''@;'; put 'put ''dyIsdmUuZmxvd2luZyk7dmUuZmxvd2luZyYmbnVsbCE9PU1lLnJlYWQoKTspO31mdW5jdGlvbiBhZShNZSx2ZSl7cmV0dXJuIDA9PT12ZS5sZW5ndGg/bnVsbDoodmUub2JqZWN0TW9kZT9YZT12ZS5idWZmZXIuc2hpZnQoKTohTWV8fE1lPj12ZS5sZW5ndGg/KFhlPXZlLmRlY29kZXI/dmUu''@;'; put 'put ''YnVmZmVyLmpvaW4oIiIpOjE9PT12ZS5idWZmZXIubGVuZ3RoP3ZlLmJ1ZmZlci5oZWFkLmRhdGE6dmUuYnVmZmVyLmNvbmNhdCh2ZS5sZW5ndGgpLHZlLmJ1ZmZlci5jbGVhcigpKTpYZT1mdW5jdGlvbiBuZShNZSx2ZSxYZSl7dmFyIEJlO3JldHVybiBNZTx2ZS5oZWFkLmRhdGEubGVuZ3Ro''@;'; put 'put ''PyhCZT12ZS5oZWFkLmRhdGEuc2xpY2UoMCxNZSksdmUuaGVhZC5kYXRhPXZlLmhlYWQuZGF0YS5zbGljZShNZSkpOkJlPU1lPT09dmUuaGVhZC5kYXRhLmxlbmd0aD92ZS5zaGlmdCgpOlhlP2Z1bmN0aW9uIGxlKE1lLHZlKXt2YXIgWGU9dmUuaGVhZCxCZT0xLEFlPVhlLmRhdGE7Zm9yKE1l''@;'; put 'put ''LT1BZS5sZW5ndGg7WGU9WGUubmV4dDspe3ZhciBGZT1YZS5kYXRhLFJlPU1lPkZlLmxlbmd0aD9GZS5sZW5ndGg6TWU7aWYoQWUrPVJlPT09RmUubGVuZ3RoP0ZlOkZlLnNsaWNlKDAsTWUpLDA9PShNZS09UmUpKXtSZT09PUZlLmxlbmd0aD8oKytCZSx2ZS5oZWFkPVhlLm5leHQ/WGUubmV4''@;'; put 'put ''dDp2ZS50YWlsPW51bGwpOih2ZS5oZWFkPVhlLFhlLmRhdGE9RmUuc2xpY2UoUmUpKTticmVha30rK0JlfXJldHVybiB2ZS5sZW5ndGgtPUJlLEFlfShNZSx2ZSk6ZnVuY3Rpb24gd2UoTWUsdmUpe3ZhciBYZT1ILmFsbG9jVW5zYWZlKE1lKSxCZT12ZS5oZWFkLEFlPTE7Zm9yKEJlLmRhdGEu''@;'; put 'put ''Y29weShYZSksTWUtPUJlLmRhdGEubGVuZ3RoO0JlPUJlLm5leHQ7KXt2YXIgRmU9QmUuZGF0YSxSZT1NZT5GZS5sZW5ndGg/RmUubGVuZ3RoOk1lO2lmKEZlLmNvcHkoWGUsWGUubGVuZ3RoLU1lLDAsUmUpLDA9PShNZS09UmUpKXtSZT09PUZlLmxlbmd0aD8oKytBZSx2ZS5oZWFkPUJlLm5l''@;'; put 'put ''eHQ/QmUubmV4dDp2ZS50YWlsPW51bGwpOih2ZS5oZWFkPUJlLEJlLmRhdGE9RmUuc2xpY2UoUmUpKTticmVha30rK0FlfXJldHVybiB2ZS5sZW5ndGgtPUFlLFhlfShNZSx2ZSksQmV9KE1lLHZlLmJ1ZmZlcix2ZS5kZWNvZGVyKSxYZSk7dmFyIFhlfWZ1bmN0aW9uIFVlKE1lKXt2YXIgdmU9''@;'; put 'put ''TWUuX3JlYWRhYmxlU3RhdGU7aWYodmUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt2ZS5lbmRFbWl0dGVkfHwodmUuZW5kZWQ9ITAsRC5uZXh0VGljayhRZSx2ZSxNZSkpfWZ1bmN0aW9uIFFlKE1lLHZlKXsh''@;'; put 'put ''TWUuZW5kRW1pdHRlZCYmMD09PU1lLmxlbmd0aCYmKE1lLmVuZEVtaXR0ZWQ9ITAsdmUucmVhZGFibGU9ITEsdmUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIG90KE1lLHZlKXtmb3IodmFyIFhlPTAsQmU9TWUubGVuZ3RoO1hlPEJlO1hlKyspaWYoTWVbWGVdPT09dmUpcmV0dXJuIFhlO3JldHVy''@;'; put 'put ''bi0xfXJlLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKE1lKXtCKCJyZWFkIixNZSksTWU9cGFyc2VJbnQoTWUsMTApO3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPU1lO2lmKDAhPT1NZSYmKHZlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PU1lJiZ2ZS5uZWVkUmVhZGFibGUmJih2ZS5s''@;'; put 'put ''ZW5ndGg+PXZlLmhpZ2hXYXRlck1hcmt8fHZlLmVuZGVkKSlyZXR1cm4gQigicmVhZDogZW1pdFJlYWRhYmxlIix2ZS5sZW5ndGgsdmUuZW5kZWQpLDA9PT12ZS5sZW5ndGgmJnZlLmVuZGVkP1VlKHRoaXMpOnkodGhpcyksbnVsbDtpZigwPT09KE1lPXooTWUsdmUpKSYmdmUuZW5kZWQpcmV0''@;'; put 'put ''dXJuIDA9PT12ZS5sZW5ndGgmJlVlKHRoaXMpLG51bGw7dmFyIEFlLEJlPXZlLm5lZWRSZWFkYWJsZTtyZXR1cm4gQigibmVlZCByZWFkYWJsZSIsQmUpLCgwPT09dmUubGVuZ3RofHx2ZS5sZW5ndGgtTWU8dmUuaGlnaFdhdGVyTWFyaykmJkIoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJr''@;'; put 'put ''IixCZT0hMCksdmUuZW5kZWR8fHZlLnJlYWRpbmc/QigicmVhZGluZyBvciBlbmRlZCIsQmU9ITEpOkJlJiYoQigiZG8gcmVhZCIpLHZlLnJlYWRpbmc9ITAsdmUuc3luYz0hMCwwPT09dmUubGVuZ3RoJiYodmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHZlLmhpZ2hXYXRlck1hcmsp''@;'; put 'put ''LHZlLnN5bmM9ITEsdmUucmVhZGluZ3x8KE1lPXooWGUsdmUpKSksbnVsbD09PShBZT1NZT4wP2FlKE1lLHZlKTpudWxsKT8odmUubmVlZFJlYWRhYmxlPSEwLE1lPTApOnZlLmxlbmd0aC09TWUsMD09PXZlLmxlbmd0aCYmKHZlLmVuZGVkfHwodmUubmVlZFJlYWRhYmxlPSEwKSxYZSE9PU1l''@;'; put 'put ''JiZ2ZS5lbmRlZCYmVWUodGhpcykpLG51bGwhPT1BZSYmdGhpcy5lbWl0KCJkYXRhIixBZSksQWV9LHJlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihNZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0scmUucHJvdG90eXBlLnBp''@;'; put 'put ''cGU9ZnVuY3Rpb24oTWUsdmUpe3ZhciBYZT10aGlzLEJlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKEJlLnBpcGVzQ291bnQpe2Nhc2UgMDpCZS5waXBlcz1NZTticmVhaztjYXNlIDE6QmUucGlwZXM9W0JlLnBpcGVzLE1lXTticmVhaztkZWZhdWx0OkJlLnBpcGVzLnB1c2goTWUpfUJl''@;'; put 'put ''LnBpcGVzQ291bnQrPTEsQigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixCZS5waXBlc0NvdW50LHZlKTt2YXIgRmU9dmUmJiExPT09dmUuZW5kfHxNZT09PXByb2Nlc3Muc3Rkb3V0fHxNZT09PXByb2Nlc3Muc3RkZXJyP1N0OkllO2Z1bmN0aW9uIEllKCl7Qigib25lbmQiKSxNZS5lbmQoKX1C''@;'; put 'put ''ZS5lbmRFbWl0dGVkP0QubmV4dFRpY2soRmUpOlhlLm9uY2UoImVuZCIsRmUpLE1lLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIFJlKER0LGl0KXtCKCJvbnVucGlwZSIpLER0PT09WGUmJml0JiYhMT09PWl0Lmhhc1VucGlwZWQmJihpdC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIGtlKCl7QigiY2xl''@;'; put 'put ''YW51cCIpLE1lLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbG4pLE1lLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHl0KSxNZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLEhlKSxNZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEplKSxNZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixSZSksWGUucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImVuZCIsSWUpLFhlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFN0KSxYZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsbnQpLERlPSEwLEJlLmF3YWl0RHJhaW4mJighTWUuX3dyaXRhYmxlU3RhdGV8fE1lLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJkhlKCl9KCkpfSk7dmFy''@;'; put 'put ''IEhlPWZ1bmN0aW9uIFYoTWUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB2ZT1NZS5fcmVhZGFibGVTdGF0ZTtCKCJwaXBlT25EcmFpbiIsdmUuYXdhaXREcmFpbiksdmUuYXdhaXREcmFpbiYmdmUuYXdhaXREcmFpbi0tLDA9PT12ZS5hd2FpdERyYWluJiZ3KE1lLCJkYXRhIikmJih2ZS5mbG93''@;'; put 'put ''aW5nPSEwLEEoTWUpKX19KFhlKTtNZS5vbigiZHJhaW4iLEhlKTt2YXIgRGU9ITEsX3Q9ITE7ZnVuY3Rpb24gbnQoRHQpe0IoIm9uZGF0YSIpLF90PSExLCExPT09TWUud3JpdGUoRHQpJiYhX3QmJigoMT09PUJlLnBpcGVzQ291bnQmJkJlLnBpcGVzPT09TWV8fEJlLnBpcGVzQ291bnQ+MSYm''@;'; put 'put ''LTEhPT1vdChCZS5waXBlcyxNZSkpJiYhRGUmJihCKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEJlLmF3YWl0RHJhaW4pLEJlLmF3YWl0RHJhaW4rKyxfdD0hMCksWGUucGF1c2UoKSl9ZnVuY3Rpb24gSmUoRHQpe0IoIm9uZXJyb3IiLER0KSxTdCgpLE1lLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlcnJvciIsSmUpLDA9PT13KE1lLCJlcnJvciIpJiZNZS5lbWl0KCJlcnJvciIsRHQpfWZ1bmN0aW9uIGxuKCl7TWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIseXQpLFN0KCl9ZnVuY3Rpb24geXQoKXtCKCJvbmZpbmlzaCIpLE1lLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbG4pLFN0KCl9''@;'; put 'put ''ZnVuY3Rpb24gU3QoKXtCKCJ1bnBpcGUiKSxYZS51bnBpcGUoTWUpfXJldHVybiBYZS5vbigiZGF0YSIsbnQpLGZ1bmN0aW9uIFgoTWUsdmUsWGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIE1lLnByZXBlbmRMaXN0ZW5lcih2ZSxYZSk7TWUuX2V2''@;'; put 'put ''ZW50cyYmTWUuX2V2ZW50c1t2ZV0/XyhNZS5fZXZlbnRzW3ZlXSk/TWUuX2V2ZW50c1t2ZV0udW5zaGlmdChYZSk6TWUuX2V2ZW50c1t2ZV09W1hlLE1lLl9ldmVudHNbdmVdXTpNZS5vbih2ZSxYZSl9KE1lLCJlcnJvciIsSmUpLE1lLm9uY2UoImNsb3NlIixsbiksTWUub25jZSgiZmluaXNo''@;'; put 'put ''Iix5dCksTWUuZW1pdCgicGlwZSIsWGUpLEJlLmZsb3dpbmd8fChCKCJwaXBlIHJlc3VtZSIpLFhlLnJlc3VtZSgpKSxNZX0scmUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihNZSl7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWGU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT12ZS5waXBl''@;'; put 'put ''c0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT12ZS5waXBlc0NvdW50KXJldHVybiBNZSYmTWUhPT12ZS5waXBlc3x8KE1lfHwoTWU9dmUucGlwZXMpLHZlLnBpcGVzPW51bGwsdmUucGlwZXNDb3VudD0wLHZlLmZsb3dpbmc9ITEsTWUmJk1lLmVtaXQoInVucGlwZSIsdGhpcyxYZSkpLHRoaXM7''@;'; put 'put ''aWYoIU1lKXt2YXIgQmU9dmUucGlwZXMsQWU9dmUucGlwZXNDb3VudDt2ZS5waXBlcz1udWxsLHZlLnBpcGVzQ291bnQ9MCx2ZS5mbG93aW5nPSExO2Zvcih2YXIgRmU9MDtGZTxBZTtGZSsrKUJlW0ZlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312''@;'; put 'put ''YXIgUmU9b3QodmUucGlwZXMsTWUpO3JldHVybi0xPT09UmV8fCh2ZS5waXBlcy5zcGxpY2UoUmUsMSksdmUucGlwZXNDb3VudC09MSwxPT09dmUucGlwZXNDb3VudCYmKHZlLnBpcGVzPXZlLnBpcGVzWzBdKSxNZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWGUpKSx0aGlzfSxyZS5wcm90b3R5cGUu''@;'; put 'put ''YWRkTGlzdGVuZXI9cmUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKE1lLHZlKXt2YXIgWGU9Ri5wcm90b3R5cGUub24uY2FsbCh0aGlzLE1lLHZlKTtpZigiZGF0YSI9PT1NZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9''@;'; put 'put ''PT1NZSl7dmFyIEJlPXRoaXMuX3JlYWRhYmxlU3RhdGU7IUJlLmVuZEVtaXR0ZWQmJiFCZS5yZWFkYWJsZUxpc3RlbmluZyYmKEJlLnJlYWRhYmxlTGlzdGVuaW5nPUJlLm5lZWRSZWFkYWJsZT0hMCxCZS5lbWl0dGVkUmVhZGFibGU9ITEsQmUucmVhZGluZz9CZS5sZW5ndGgmJnkodGhpcyk6''@;'; put 'put ''RC5uZXh0VGljayhVLHRoaXMpKX1yZXR1cm4gWGV9LHJlLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgTWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTWUuZmxvd2luZ3x8KEIoInJlc3VtZSIpLE1lLmZsb3dpbmc9ITAsZnVuY3Rpb24gRShNZSx2ZSl7dmUucmVzdW1lU2No''@;'; put 'put ''ZWR1bGVkfHwodmUucmVzdW1lU2NoZWR1bGVkPSEwLEQubmV4dFRpY2sobSxNZSx2ZSkpfSh0aGlzLE1lKSksdGhpc30scmUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIEIoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEIoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30scmUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oTWUpe3ZhciB2ZT10aGlzLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUs''@;'; put 'put ''QmU9ITE7Zm9yKHZhciBBZSBpbiBNZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEIoIndyYXBwZWQgZW5kIiksWGUuZGVjb2RlciYmIVhlLmVuZGVkKXt2YXIgUmU9WGUuZGVjb2Rlci5lbmQoKTtSZSYmUmUubGVuZ3RoJiZ2ZS5wdXNoKFJlKX12ZS5wdXNoKG51bGwpfSksTWUub24oImRhdGEi''@;'; put 'put ''LGZ1bmN0aW9uKFJlKXtCKCJ3cmFwcGVkIGRhdGEiKSxYZS5kZWNvZGVyJiYoUmU9WGUuZGVjb2Rlci53cml0ZShSZSkpLFhlLm9iamVjdE1vZGUmJm51bGw9PVJlfHwhKFhlLm9iamVjdE1vZGV8fFJlJiZSZS5sZW5ndGgpfHx2ZS5wdXNoKFJlKXx8KEJlPSEwLE1lLnBhdXNlKCkpfSksTWUp''@;'; put 'put ''dm9pZCAwPT09dGhpc1tBZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBNZVtBZV0mJih0aGlzW0FlXT1mdW5jdGlvbihSZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1lW1JlXS5hcHBseShNZSxhcmd1bWVudHMpfX0oQWUpKTtmb3IodmFyIEZlPTA7RmU8US5sZW5ndGg7RmUrKylNZS5vbihR''@;'; put 'put ''W0ZlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFFbRmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oUmUpe0IoIndyYXBwZWQgX3JlYWQiLFJlKSxCZSYmKEJlPSExLE1lLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLnByb3RvdHlwZSwicmVhZGFibGVIaWdo''@;'; put 'put ''V2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHJlLl9mcm9tTGlzdD1hZX0sMjkwOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU47dmFyIEQ9Yig3NDA3NSksXz1PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKGIoMjc2MzcpKTtmdW5jdGlvbiBwKEgsUil7dmFyIGo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ai50cmFuc2Zvcm1pbmc9ITE7dmFyIFA9ai53cml0ZWNiO2lmKCFQKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0''@;'; put 'put ''aXBsZSB0aW1lcyIpKTtqLndyaXRlY2h1bms9bnVsbCxqLndyaXRlY2I9bnVsbCxudWxsIT1SJiZ0aGlzLnB1c2goUiksUChIKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3Jl''@;'; put 'put ''YWQoTC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBOKEgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTihIKTtELmNhbGwodGhpcyxIKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06cC5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3Jt''@;'; put 'put ''aW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsSCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBILnRyYW5zZm9ybSYmKHRoaXMuX3Ry''@;'; put 'put ''YW5zZm9ybT1ILnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIEguZmx1c2gmJih0aGlzLl9mbHVzaD1ILmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEg9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVu''@;'; put 'put ''Y3Rpb24oUixqKXtGKEgsUixqKX0pOkYodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIEYoSCxSLGope2lmKFIpcmV0dXJuIEguZW1pdCgiZXJyb3IiLFIpO2lmKG51bGwhPWomJkgucHVzaChqKSxILl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNm''@;'; put 'put ''b3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKEguX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gSC5wdXNoKG51bGwpfV8uaW5oZXJpdHM9Yig3''@;'; put 'put ''MTk5MyksXy5pbmhlcml0cyhOLEQpLE4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oSCxSKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxELnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxILFIpfSxOLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEgs''@;'; put 'put ''UixqKXt0aHJvdyBuZXcgRXJyb3IoIl90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEgsUixqKXt2YXIgUD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihQLndyaXRlY2I9aixQLndyaXRlY2h1bms9SCxQLndyaXRlZW5jb2Rpbmc9''@;'; put 'put ''UiwhUC50cmFuc2Zvcm1pbmcpe3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFAubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LE4ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEgp''@;'; put 'put ''e3ZhciBSPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGwhPT1SLndyaXRlY2h1bmsmJlIud3JpdGVjYiYmIVIudHJhbnNmb3JtaW5nPyhSLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oUi53cml0ZWNodW5rLFIud3JpdGVlbmNvZGluZyxSLmFmdGVyVHJhbnNmb3JtKSk6Ui5uZWVk''@;'; put 'put ''VHJhbnNmb3JtPSEwfSxOLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihILFIpe3ZhciBqPXRoaXM7RC5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEgsZnVuY3Rpb24oUCl7UihQKSxqLmVtaXQoImNsb3NlIil9KX19LDQ3ODQ5OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBE''@;'; put 'put ''PWIoOTY1Nik7ZnVuY3Rpb24gcChFKXt2YXIgbT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBVKEUsbSxBKXt2YXIgYWU9RS5lbnRyeTtmb3IoRS5lbnRyeT1udWxsO2FlOyl7dmFyIG5lPWFlLmNhbGxiYWNrO20u''@;'; put 'put ''cGVuZGluZ2NiLS0sbmUoQSksYWU9YWUubmV4dH1tLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PUV9KG0sRSl9fWNlLmV4cG9ydHM9UTt2YXIgdyxOPSFwcm9jZXNzLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldElt''@;'; put 'put ''bWVkaWF0ZTpELm5leHRUaWNrO1EuV3JpdGFibGVTdGF0ZT1aO3ZhciBGPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO0YuaW5oZXJpdHM9Yig3MTk5Myk7dmFyIHEsSD17ZGVwcmVjYXRlOmIoMzM5OCl9LFI9YigxODM0Miksaj1iKDI2NTUpLkJ1ZmZlcixQPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9n''@;'; put 'put ''bG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sQj1iKDIxNTA5KTtmdW5jdGlvbiBXKCl7fWZ1bmN0aW9uIFooRSxtKXt3PXd8fGIoNzQwNzUpO3ZhciBBPW0gaW5zdGFuY2VvZiB3O3RoaXMub2Jq''@;'; put 'put ''ZWN0TW9kZT0hIShFPUV8fHt9KS5vYmplY3RNb2RlLEEmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUUud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgYWU9RS5oaWdoV2F0ZXJNYXJrLG5lPUUud3JpdGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1hZXx8''@;'; put 'put ''MD09PWFlP2FlOkEmJihuZXx8MD09PW5lKT9uZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5k''@;'; put 'put ''ZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PUUuZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlz''@;'; put 'put ''LmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKFVlKXshZnVuY3Rpb24gU2UoRSxtKXt2YXIgQT1FLl93cml0YWJsZVN0YXRlLGFlPUEuc3luYyxuZT1BLndyaXRlY2I7aWYoZnVuY3Rpb24gVGUoRSl7RS53cml0aW5n''@;'; put 'put ''PSExLEUud3JpdGVjYj1udWxsLEUubGVuZ3RoLT1FLndyaXRlbGVuLEUud3JpdGVsZW49MH0oQSksbSkhZnVuY3Rpb24gX2UoRSxtLEEsYWUsbmUpey0tbS5wZW5kaW5nY2IsQT8oRC5uZXh0VGljayhuZSxhZSksRC5uZXh0VGljayhULEUsbSksRS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0''@;'; put 'put ''ZWQ9ITAsRS5lbWl0KCJlcnJvciIsYWUpKToobmUoYWUpLEUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUuZW1pdCgiZXJyb3IiLGFlKSxUKEUsbSkpfShFLEEsYWUsbSxuZSk7ZWxzZXt2YXIgbGU9eShBKTshbGUmJiFBLmNvcmtlZCYmIUEuYnVmZmVyUHJvY2Vzc2luZyYmQS5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3QmJmcoRSxBKSxhZT9OKHplLEUsQSxsZSxuZSk6emUoRSxBLGxlLG5lKX19KG0sVWUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRp''@;'; put 'put ''bmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKHRoaXMpfWZ1bmN0aW9uIFEoRSl7aWYodz13fHxiKDc0MDc1KSwhKHEuY2FsbChRLHRoaXMpfHx0aGlz''@;'; put 'put ''IGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyBRKEUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFooRSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLEUmJigiZnVuY3Rpb24iPT10eXBlb2YgRS53cml0ZSYmKHRoaXMuX3dyaXRlPUUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLndyaXRldiYm''@;'; put 'put ''KHRoaXMuX3dyaXRldj1FLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIEUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgRS5maW5hbCYmKHRoaXMuX2ZpbmFsPUUuZmluYWwpKSxSLmNhbGwodGhpcyl9ZnVuY3Rpb24gZ2UoRSxtLEEsYWUs''@;'; put 'put ''bmUsbGUsd2Upe20ud3JpdGVsZW49YWUsbS53cml0ZWNiPXdlLG0ud3JpdGluZz0hMCxtLnN5bmM9ITAsQT9FLl93cml0ZXYobmUsbS5vbndyaXRlKTpFLl93cml0ZShuZSxsZSxtLm9ud3JpdGUpLG0uc3luYz0hMX1mdW5jdGlvbiB6ZShFLG0sQSxhZSl7QXx8ZnVuY3Rpb24geihFLG0pezA9''@;'; put 'put ''PT1tLmxlbmd0aCYmbS5uZWVkRHJhaW4mJihtLm5lZWREcmFpbj0hMSxFLmVtaXQoImRyYWluIikpfShFLG0pLG0ucGVuZGluZ2NiLS0sYWUoKSxUKEUsbSl9ZnVuY3Rpb24gZyhFLG0pe20uYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgQT1tLmJ1ZmZlcmVkUmVxdWVzdDtpZihFLl93cml0ZXYm''@;'; put 'put ''JkEmJkEubmV4dCl7dmFyIG5lPW5ldyBBcnJheShtLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxsZT1tLmNvcmtlZFJlcXVlc3RzRnJlZTtsZS5lbnRyeT1BO2Zvcih2YXIgd2U9MCxVZT0hMDtBOyluZVt3ZV09QSxBLmlzQnVmfHwoVWU9ITEpLEE9QS5uZXh0LHdlKz0xO25lLmFsbEJ1ZmZlcnM9''@;'; put 'put ''VWUsZ2UoRSxtLCEwLG0ubGVuZ3RoLG5lLCIiLGxlLmZpbmlzaCksbS5wZW5kaW5nY2IrKyxtLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxsZS5uZXh0PyhtLmNvcmtlZFJlcXVlc3RzRnJlZT1sZS5uZXh0LGxlLm5leHQ9bnVsbCk6bS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHAobSksbS5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtBOyl7dmFyIFFlPUEuY2h1bms7aWYoZ2UoRSxtLCExLG0ub2JqZWN0TW9kZT8xOlFlLmxlbmd0aCxRZSxBLmVuY29kaW5nLEEuY2FsbGJhY2spLEE9QS5uZXh0LG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxtLndyaXRpbmcpYnJlYWt9''@;'; put 'put ''bnVsbD09PUEmJihtLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9bS5idWZmZXJlZFJlcXVlc3Q9QSxtLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24geShFKXtyZXR1cm4gRS5lbmRpbmcmJjA9PT1FLmxlbmd0aCYmbnVsbD09PUUuYnVmZmVyZWRSZXF1ZXN0JiYhRS5maW5pc2hlZCYm''@;'; put 'put ''IUUud3JpdGluZ31mdW5jdGlvbiB4KEUsbSl7RS5fZmluYWwoZnVuY3Rpb24oQSl7bS5wZW5kaW5nY2ItLSxBJiZFLmVtaXQoImVycm9yIixBKSxtLnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNoIiksVChFLG0pfSl9ZnVuY3Rpb24gVChFLG0pe3ZhciBBPXkobSk7cmV0dXJuIEEm''@;'; put 'put ''JihmdW5jdGlvbiBDKEUsbSl7IW0ucHJlZmluaXNoZWQmJiFtLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUuX2ZpbmFsPyhtLnBlbmRpbmdjYisrLG0uZmluYWxDYWxsZWQ9ITAsRC5uZXh0VGljayh4LEUsbSkpOihtLnByZWZpbmlzaGVkPSEwLEUuZW1pdCgicHJlZmluaXNo''@;'; put 'put ''IikpKX0oRSxtKSwwPT09bS5wZW5kaW5nY2ImJihtLmZpbmlzaGVkPSEwLEUuZW1pdCgiZmluaXNoIikpKSxBfUYuaW5oZXJpdHMoUSxSKSxaLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG09dGhpcy5idWZmZXJlZFJlcXVlc3QsQT1bXTttOylBLnB1c2gobSksbT1t''@;'; put 'put ''Lm5leHQ7cmV0dXJuIEF9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OkguZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4g''@;'; put 'put ''VXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5j''@;'; put 'put ''ZV0/KHE9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihFKXtyZXR1cm4hIXEuY2FsbCh0aGlzLEUpfHx0aGlzPT09USYmRSYmRS5fd3JpdGFibGVTdGF0ZSBpbnN0''@;'; put 'put ''YW5jZW9mIFp9fSkpOnE9ZnVuY3Rpb24oRSl7cmV0dXJuIEUgaW5zdGFuY2VvZiB0aGlzfSxRLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxRLnByb3RvdHlwZS53cml0ZT1mdW5jdGlv''@;'; put 'put ''bihFLG0sQSl7dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGUsbmU9ITEsbGU9IWFlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFkoRSl7cmV0dXJuIGouaXNCdWZmZXIoRSl8fEUgaW5zdGFuY2VvZiBQfShFKTtyZXR1cm4gbGUmJiFqLmlzQnVmZmVyKEUpJiYoRT1mdW5jdGlvbiBMKEUpe3JldHVy''@;'; put 'put ''biBqLmZyb20oRSl9KEUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLGxlP209ImJ1ZmZlciI6bXx8KG09YWUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgQSYmKEE9VyksYWUuZW5kZWQ/ZnVuY3Rpb24gWChFLG0pe3ZhciBBPW5ldyBFcnJvcigid3Jp''@;'; put 'put ''dGUgYWZ0ZXIgZW5kIik7RS5lbWl0KCJlcnJvciIsQSksRC5uZXh0VGljayhtLEEpfSh0aGlzLEEpOihsZXx8ZnVuY3Rpb24gdGUoRSxtLEEsYWUpe3ZhciBuZT0hMCxsZT0hMTtyZXR1cm4gbnVsbD09PUE/bGU9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBz''@;'; put 'put ''dHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIEEmJnZvaWQgMCE9PUEmJiFtLm9iamVjdE1vZGUmJihsZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLGxlJiYoRS5lbWl0KCJlcnJvciIsbGUpLEQubmV4dFRpY2soYWUsbGUpLG5lPSExKSxuZX0odGhp''@;'; put 'put ''cyxhZSxFLEEpKSYmKGFlLnBlbmRpbmdjYisrLG5lPWZ1bmN0aW9uIG9lKEUsbSxBLGFlLG5lLGxlKXtpZighQSl7dmFyIHdlPWZ1bmN0aW9uIHJlKEUsbSxBKXtyZXR1cm4hRS5vYmplY3RNb2RlJiYhMSE9PUUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBtJiYobT1qLmZyb20o''@;'; put 'put ''bSxBKSksbX0obSxhZSxuZSk7YWUhPT13ZSYmKEE9ITAsbmU9ImJ1ZmZlciIsYWU9d2UpfXZhciBVZT1tLm9iamVjdE1vZGU/MTphZS5sZW5ndGg7bS5sZW5ndGgrPVVlO3ZhciBRZT1tLmxlbmd0aDxtLmhpZ2hXYXRlck1hcms7aWYoUWV8fChtLm5lZWREcmFpbj0hMCksbS53cml0aW5nfHxt''@;'; put 'put ''LmNvcmtlZCl7dmFyIG90PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDttLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOmFlLGVuY29kaW5nOm5lLGlzQnVmOkEsY2FsbGJhY2s6bGUsbmV4dDpudWxsfSxvdD9vdC5uZXh0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDptLmJ1ZmZlcmVkUmVxdWVzdD1t''@;'; put 'put ''Lmxhc3RCdWZmZXJlZFJlcXVlc3QsbS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIGdlKEUsbSwhMSxVZSxhZSxuZSxsZSk7cmV0dXJuIFFlfSh0aGlzLGFlLGxlLEUsbSxBKSksbmV9LFEucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsr''@;'; put 'put ''fSxRLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgRT10aGlzLl93cml0YWJsZVN0YXRlO0UuY29ya2VkJiYoRS5jb3JrZWQtLSwhRS53cml0aW5nJiYhRS5jb3JrZWQmJiFFLmJ1ZmZlclByb2Nlc3NpbmcmJkUuYnVmZmVyZWRSZXF1ZXN0JiZnKHRoaXMsRSkpfSxRLnByb3RvdHlw''@;'; put 'put ''ZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24obSl7aWYoInN0cmluZyI9PXR5cGVvZiBtJiYobT1tLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJh''@;'; put 'put ''dyJdLmluZGV4T2YoKG0rIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK20pO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1tLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShRLnByb3RvdHlw''@;'; put 'put ''ZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihFLG0sQSl7QShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBp''@;'; put 'put ''bXBsZW1lbnRlZCIpKX0sUS5wcm90b3R5cGUuX3dyaXRldj1udWxsLFEucHJvdG90eXBlLmVuZD1mdW5jdGlvbihFLG0sQSl7dmFyIGFlPXRoaXMuX3dyaXRhYmxlU3RhdGU7ImZ1bmN0aW9uIj09dHlwZW9mIEU/KEE9RSxFPW51bGwsbT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9''@;'; put 'put ''bSxtPW51bGwpLG51bGwhPUUmJnRoaXMud3JpdGUoRSxtKSxhZS5jb3JrZWQmJihhZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxhZS5lbmRpbmd8fGZ1bmN0aW9uIFYoRSxtLEEpe20uZW5kaW5nPSEwLFQoRSxtKSxBJiYobS5maW5pc2hlZD9ELm5leHRUaWNrKEEpOkUub25jZSgiZmluaXNo''@;'; put 'put ''IixBKSksbS5lbmRlZD0hMCxFLndyaXRhYmxlPSExfSh0aGlzLGFlLEEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRl''@;'; put 'put ''c3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1FKX19KSxRLnByb3RvdHlwZS5kZXN0cm95PUIuZGVzdHJveSxRLnByb3RvdHlwZS5fdW5kZXN0cm95PUIudW5kZXN0cm95LFEucHJvdG90eXBlLl9kZXN0''@;'; put 'put ''cm95PWZ1bmN0aW9uKEUsbSl7dGhpcy5lbmQoKSxtKEUpfX0sMjc4MDk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIF89YigyNjU1KS5CdWZmZXIscD1iKDE1MzQwKTtmdW5jdGlvbiBOKHcsRixIKXt3LmNvcHkoRixIKX1jZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhm''@;'; put 'put ''dW5jdGlvbiBEKHcsRil7aWYoISh3IGluc3RhbmNlb2YgRikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBl''@;'; put 'put ''LnB1c2g9ZnVuY3Rpb24oSCl7dmFyIFI9e2RhdGE6SCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Ujp0aGlzLmhlYWQ9Uix0aGlzLnRhaWw9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEgpe3ZhciBSPXtkYXRhOkgsbmV4dDp0''@;'; put 'put ''aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1SKSx0aGlzLmhlYWQ9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEg9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxIfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihIKXtpZigwPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPXRoaXMuaGVhZCxqPSIiK1IuZGF0YTtSPVIubmV4dDspais9SCtSLmRhdGE7cmV0dXJuIGp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihIKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBSPV8uYWxsb2NV''@;'; put 'put ''bnNhZmUoSD4+PjApLGo9dGhpcy5oZWFkLFA9MDtqOylOKGouZGF0YSxSLFApLFArPWouZGF0YS5sZW5ndGgsaj1qLm5leHQ7cmV0dXJuIFJ9LHd9KCkscCYmcC5pbnNwZWN0JiZwLmluc3BlY3QuY3VzdG9tJiYoY2UuZXhwb3J0cy5wcm90b3R5cGVbcC5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgdz1wLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sMjE1MDk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NjU2KTtmdW5jdGlvbiBOKHcsRil7dy5lbWl0KCJlcnJvciIsRil9Y2UuZXhw''@;'; put 'put ''b3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKHcsRil7dmFyIEg9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhGP0Yodyk6dyYmKHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxELm5leHRUaWNrKE4sdGhpcyx3KSk6RC5uZXh0VGljayhOLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKFApeyFGJiZQP0guX3dyaXRhYmxlU3RhdGU/SC5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWR8fChILl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxELm5leHRUaWNrKE4sSCxQKSk6RC5uZXh0VGljayhOLEgsUCk6RiYmRihQKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gcCgpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRl''@;'; put 'put ''c3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwxODM0MjooY2UsSixiKT0+e2NlLmV4cG9ydHM9Yig0NDM1NikuRXZlbnRFbWl0dGVyfSwyNjU1OihjZSxKLGIpPT57dmFyIEQ9Yig4MzgzOCksXz1ELkJ1ZmZlcjtmdW5jdGlvbiBwKHcsRil7Zm9yKHZhciBIIGluIHcpRltIXT13W0hd''@;'; put 'put ''fWZ1bmN0aW9uIE4odyxGLEgpe3JldHVybiBfKHcsRixIKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9RDoocChELEopLEouQnVmZmVyPU4pLHAoXyxOKSxOLmZyb209ZnVuY3Rpb24odyxGLEgpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsRixIKX0sTi5hbGxvYz1mdW5jdGlvbih3LEYsSCl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTt2YXIgUj1fKHcpO3JldHVybiB2b2lkIDAhPT1GPyJzdHJpbmciPT10eXBlb2YgSD9SLmZpbGwoRixIKTpSLmZpbGwoRik6Ui5maWxsKDApLFJ9LE4uYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sTi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gRC5TbG93QnVmZmVyKHcpfX0sNTk0Mjoo''@;'; put 'put ''Y2UsSixiKT0+eyhKPWNlLmV4cG9ydHM9YigxOTYwOSkpLlN0cmVhbT1KLEouUmVhZGFibGU9SixKLldyaXRhYmxlPWIoNDc4NDkpLEouRHVwbGV4PWIoNzQwNzUpLEouVHJhbnNmb3JtPWIoMjkwOSksSi5QYXNzVGhyb3VnaD1iKDE4ODIzKX0sMzY2MzY6KGNlLEosYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEQ9Yig4MzgzOCkuQnVmZmVyLF89Yig3MTk5MykscD1iKDEzNjg2KSxOPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcs''@;'; put 'put ''MCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxGPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQs''@;'; put 'put ''OSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEg9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3''@;'; put 'put ''LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9Wzgs''@;'; put 'put ''OSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIs''@;'; put 'put ''OSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLGo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sUD1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7cC5jYWxsKHRoaXMsNjQpLHRo''@;'; put 'put ''aXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBZKFgsdGUpe3JldHVybiBYPDx0ZXxYPj4+MzItdGV9ZnVuY3Rpb24gQihYLHRlLHJlLG9lLGdlLF9lLFRlLFNl''@;'; put 'put ''KXtyZXR1cm4gWShYKyh0ZV5yZV5vZSkrX2UrVGV8MCxTZSkrZ2V8MH1mdW5jdGlvbiBXKFgsdGUscmUsb2UsZ2UsX2UsVGUsU2Upe3JldHVybiBZKFgrKHRlJnJlfH50ZSZvZSkrX2UrVGV8MCxTZSkrZ2V8MH1mdW5jdGlvbiBaKFgsdGUscmUsb2UsZ2UsX2UsVGUsU2Upe3JldHVybiBZKFgr''@;'; put 'put ''KCh0ZXx+cmUpXm9lKStfZStUZXwwLFNlKStnZXwwfWZ1bmN0aW9uIHEoWCx0ZSxyZSxvZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkoWCsodGUmb2V8cmUmfm9lKStfZStUZXwwLFNlKStnZXwwfWZ1bmN0aW9uIFEoWCx0ZSxyZSxvZSxnZSxfZSxUZSxTZSl7cmV0dXJuIFkoWCsodGVeKHJlfH5v''@;'; put 'put ''ZSkpK19lK1RlfDAsU2UpK2dlfDB9XyhMLHApLEwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFg9Tix0ZT0wO3RlPDE2OysrdGUpWFt0ZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCp0ZSk7Zm9yKHZhciByZT0wfHRoaXMuX2Esb2U9MHx0aGlzLl9iLGdlPTB8dGhp''@;'; put 'put ''cy5fYyxfZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLFNlPTB8dGhpcy5fYSx6ZT0wfHRoaXMuX2Isej0wfHRoaXMuX2MsZz0wfHRoaXMuX2QseT0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPUIocmUsb2UsZ2UsX2UsVGUsWFt3W3hdXSxqWzBdLEhbeF0pLFQ9UShT''@;'; put 'put ''ZSx6ZSx6LGcseSxYW0ZbeF1dLFBbMF0sUlt4XSkpOng8MzI/KEM9VyhyZSxvZSxnZSxfZSxUZSxYW3dbeF1dLGpbMV0sSFt4XSksVD1xKFNlLHplLHosZyx5LFhbRlt4XV0sUFsxXSxSW3hdKSk6eDw0OD8oQz1aKHJlLG9lLGdlLF9lLFRlLFhbd1t4XV0salsyXSxIW3hdKSxUPVooU2UsemUs''@;'; put 'put ''eixnLHksWFtGW3hdXSxQWzJdLFJbeF0pKTp4PDY0PyhDPXEocmUsb2UsZ2UsX2UsVGUsWFt3W3hdXSxqWzNdLEhbeF0pLFQ9VyhTZSx6ZSx6LGcseSxYW0ZbeF1dLFBbM10sUlt4XSkpOihDPVEocmUsb2UsZ2UsX2UsVGUsWFt3W3hdXSxqWzRdLEhbeF0pLFQ9QihTZSx6ZSx6LGcseSxYW0Zb''@;'; put 'put ''eF1dLFBbNF0sUlt4XSkpLHJlPVRlLFRlPV9lLF9lPVkoZ2UsMTApLGdlPW9lLG9lPUMsU2U9eSx5PWcsZz1ZKHosMTApLHo9emUsemU9VH12YXIgVj10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZSty''@;'; put 'put ''ZSt6ZXwwLHRoaXMuX2U9dGhpcy5fYStvZSt6fDAsdGhpcy5fYT1WfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zm''@;'; put 'put ''c2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xl''@;'; put 'put ''bmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIFg9RC5hbGxvYz9ELmFsbG9jKDIwKTpuZXcgRCgyMCk7cmV0dXJuIFgud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksWC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxYLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLFgud3JpdGVJbnQzMkxFKHRo''@;'; put 'put ''aXMuX2QsMTIpLFgud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLFh9LGNlLmV4cG9ydHM9TH0sMjcwNTQ6KGNlLEosYik9Pnt2YXIgRD1iKDgzODM4KSxfPUQuQnVmZmVyO2Z1bmN0aW9uIHAodyxGKXtmb3IodmFyIEggaW4gdylGW0hdPXdbSF19ZnVuY3Rpb24gTih3LEYsSCl7cmV0dXJuIF8o''@;'; put 'put ''dyxGLEgpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2UuZXhwb3J0cz1EOihwKEQsSiksSi5CdWZmZXI9TiksTi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfLnByb3RvdHlwZSkscChfLE4pLE4uZnJvbT1mdW5jdGlvbih3LEYsSCl7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxGLEgpfSxOLmFsbG9jPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PUY/InN0cmluZyI9PXR5cGVvZiBIP1IuZmlsbChGLEgpOlIuZmlsbChGKTpSLmZpbGwoMCksUn0sTi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxOLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBELlNsb3dCdWZmZXIo''@;'; put 'put ''dyl9fSw5MzgwNzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTixEPWIoODM4MzgpLF89RC5CdWZmZXIscD17fTtmb3IoTiBpbiBEKUQuaGFzT3duUHJvcGVydHkoTikmJigiU2xvd0J1ZmZlciI9PT1OfHwiQnVmZmVyIj09PU58fChwW05dPURbTl0pKTt2YXIgdz1wLkJ1ZmZlcj17fTtm''@;'; put 'put ''b3IoTiBpbiBfKV8uaGFzT3duUHJvcGVydHkoTikmJigiYWxsb2NVbnNhZmUiPT09Tnx8ImFsbG9jVW5zYWZlU2xvdyI9PT1OfHwod1tOXT1fW05dKSk7aWYocC5CdWZmZXIucHJvdG90eXBlPV8ucHJvdG90eXBlLCghdy5mcm9tfHx3LmZyb209PT1VaW50OEFycmF5LmZyb20pJiYody5mcm9t''@;'; put 'put ''PWZ1bmN0aW9uKEYsSCxSKXtpZigibnVtYmVyIj09dHlwZW9mIEYpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgRik7aWYoRiYmdHlwZW9mIEYubGVuZ3RoPiJ1Iil0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBGKTtyZXR1cm4gXyhGLEgsUil9KSx3LmFsbG9j''@;'; put 'put ''fHwody5hbGxvYz1mdW5jdGlvbihGLEgsUil7aWYoIm51bWJlciIhPXR5cGVvZiBGKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBGKTtpZihGPDB8fEY+PTIqKDE8PDMwKSl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBqPV8oRik7cmV0dXJuIEgmJjAhPT1ILmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIFI/ai5maWxsKEgsUik6ai5maWxsKEgpOmouZmlsbCgwKSxqfSksIXAua1N0cmlu''@;'; put 'put ''Z01heExlbmd0aCl0cnl7cC5rU3RyaW5nTWF4TGVuZ3RoPXByb2Nlc3MuYmluZGluZygiYnVmZmVyIikua1N0cmluZ01heExlbmd0aH1jYXRjaHt9cC5jb25zdGFudHN8fChwLmNvbnN0YW50cz17TUFYX0xFTkdUSDpwLmtNYXhMZW5ndGh9LHAua1N0cmluZ01heExlbmd0aCYmKHAuY29uc3Rh''@;'; put 'put ''bnRzLk1BWF9TVFJJTkdfTEVOR1RIPXAua1N0cmluZ01heExlbmd0aCkpLGNlLmV4cG9ydHM9cH0sOTgwODM6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBEOyFmdW5jdGlvbigpe3ZhciBfPUp8fHt9O3ZvaWQgMCE9PShEPWZ1bmN0aW9uKCl7cmV0dXJuIF99LmFwcGx5KEosW10pKSYmKGNl''@;'; put 'put ''LmV4cG9ydHM9RCksXy5kZWZhdWx0PV87dmFyIHA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIix3PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsSD0vdXJsXChbIiddPyguKz8pWyInXT9cKS8sUj17d29mZjI6ImZvbnQvd29mZjIiLHdvZmY6ImZvbnQvd29mZiIsb3RmOiJh''@;'; put 'put ''cHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGUiLHR0ZjoiYXBwbGljYXRpb24veC1mb250LXR0ZiIsZW90OiJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCIsc2ZudDoiYXBwbGljYXRpb24vZm9udC1zZm50Iixzdmc6ImltYWdlL3N2Zyt4bWwifSxqPWZ1bmN0aW9uKHkpe3JldHVybiB5''@;'; put 'put ''IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fHkgaW5zdGFuY2VvZiBTVkdFbGVtZW50fSxQPWZ1bmN0aW9uKHkpe2lmKCFqKHkpKXRocm93IG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIreSl9LEw9ZnVuY3Rpb24oeSl7cmV0dXJuIG5l''@;'; put 'put ''dyBQcm9taXNlKGZ1bmN0aW9uKHgsQyl7aih5KT94KHkpOkMobmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3QgIit5KSl9KX0sQj1mdW5jdGlvbih5KXt2YXIgeD1PYmplY3Qua2V5cyhSKS5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIHku''@;'; put 'put ''aW5kZXhPZigiLiIrQyk+MH0pLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gUltDXX0pO3JldHVybiB4P3hbMF06KGNvbnNvbGUuZXJyb3IoIlVua25vd24gZm9udCBmb3JtYXQgZm9yICIreSsiLiBGb250cyBtYXkgbm90IGJlIHdvcmtpbmcgY29ycmVjdGx5LiIpLCJhcHBsaWNhdGlvbi9vY3Rl''@;'; put 'put ''dC1zdHJlYW0iKX0sWj1mdW5jdGlvbih5LHgsQyl7dmFyIFQ9eS52aWV3Qm94JiZ5LnZpZXdCb3guYmFzZVZhbCYmeS52aWV3Qm94LmJhc2VWYWxbQ118fG51bGwhPT14LmdldEF0dHJpYnV0ZShDKSYmIXguZ2V0QXR0cmlidXRlKEMpLm1hdGNoKC8lJC8pJiZwYXJzZUludCh4LmdldEF0dHJp''@;'; put 'put ''YnV0ZShDKSl8fHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbQ118fHBhcnNlSW50KHguc3R5bGVbQ10pfHxwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh5KS5nZXRQcm9wZXJ0eVZhbHVlKEMpKTtyZXR1cm4gdHlwZW9mIFQ+InUifHxudWxsPT09VHx8aXNOYU4ocGFyc2VGbG9h''@;'; put 'put ''dChUKSk/MDpUfSxYPWZ1bmN0aW9uKHkpe2Zvcih2YXIgeD13aW5kb3cuYXRvYih5LnNwbGl0KCIsIilbMV0pLEM9eS5zcGxpdCgiLCIpWzBdLnNwbGl0KCI6IilbMV0uc3BsaXQoIjsiKVswXSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksVj1uZXcgVWludDhBcnJheShUKSxVPTA7VTx4''@;'; put 'put ''Lmxlbmd0aDtVKyspVltVXT14LmNoYXJDb2RlQXQoVSk7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpDfSl9LGdlPXt9LFRlPW51bGwsemU9ZnVuY3Rpb24oeSx4KXt2YXIgQz14fHx7fSxUPUMuc2VsZWN0b3JSZW1hcCxWPUMubW9kaWZ5U3R5bGUsRT1DLmZvbnRzLG09Qy5leGNsdWRlVW51''@;'; put 'put ''c2VkQ3NzLEE9Qy5tb2RpZnlDc3N8fGZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4oVD9UKHdlKTp3ZSkrInsiKyhWP1YoVWUpOlVlKSsifVxuIn0sYWU9W10sbmU9dHlwZW9mIEU+InUiLGxlPUV8fFtdO3JldHVybihUZXx8KFRlPUFycmF5LmZyb20oZG9jdW1lbnQuc3R5bGVTaGVldHMpLm1hcChm''@;'; put 'put ''dW5jdGlvbih5KXt0cnl7cmV0dXJue3J1bGVzOnkuY3NzUnVsZXMsaHJlZjp5LmhyZWZ9fWNhdGNoKHgpe3JldHVybiBjb25zb2xlLndhcm4oIlN0eWxlc2hlZXQgY291bGQgbm90IGJlIGxvYWRlZDogIit5LmhyZWYseCkse319fSkpKS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXt2YXIgVWU9d2Uu''@;'; put 'put ''cnVsZXMsUWU9d2UuaHJlZjtVZSYmQXJyYXkuZnJvbShVZSkuZm9yRWFjaChmdW5jdGlvbihvdCl7aWYodHlwZW9mIG90LnN0eWxlPCJ1IilpZihmdW5jdGlvbih5LHgpe2lmKHgpdHJ5e3JldHVybiB5LnF1ZXJ5U2VsZWN0b3IoeCl8fHkucGFyZW50Tm9kZSYmeS5wYXJlbnROb2RlLnF1ZXJ5''@;'; put 'put ''U2VsZWN0b3IoeCl9Y2F0Y2goQyl7Y29uc29sZS53YXJuKCdJbnZhbGlkIENTUyBzZWxlY3RvciAiJyt4KyciJyxDKX19KHksb3Quc2VsZWN0b3JUZXh0KSlhZS5wdXNoKEEob3Quc2VsZWN0b3JUZXh0LG90LnN0eWxlLmNzc1RleHQpKTtlbHNlIGlmKG5lJiZvdC5jc3NUZXh0Lm1hdGNoKC9e''@;'; put 'put ''QGZvbnQtZmFjZS8pKXt2YXIgTWU9ZnVuY3Rpb24oeSx4KXt2YXIgQz15LmNzc1RleHQubWF0Y2goSCksVD1DJiZDWzFdfHwiIjtpZihUJiYhVC5tYXRjaCgvXmRhdGE6LykmJiJhYm91dDpibGFuayIhPT1UKXt2YXIgVj1ULnN0YXJ0c1dpdGgoIi4uLyIpP3grIi8uLi8iK1Q6VC5zdGFydHNX''@;'; put 'put ''aXRoKCIuLyIpP3grIi8uIitUOlQ7cmV0dXJue3RleHQ6eS5jc3NUZXh0LGZvcm1hdDpCKFYpLHVybDpWfX19KG90LFFlKTtNZSYmbGUucHVzaChNZSl9ZWxzZSBtfHxhZS5wdXNoKG90LmNzc1RleHQpfSl9KSxmdW5jdGlvbih5KXtyZXR1cm4gUHJvbWlzZS5hbGwoeS5tYXAoZnVuY3Rpb24o''@;'; put 'put ''eCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsVCl7aWYoZ2VbeC51cmxdKXJldHVybiBDKGdlW3gudXJsXSk7dmFyIFY9bmV3IFhNTEh0dHBSZXF1ZXN0O1YuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXt2YXIgVT1mdW5jdGlvbih5KXtmb3IodmFyIHg9IiIsQz1u''@;'; put 'put ''ZXcgVWludDhBcnJheSh5KSxUPTA7VDxDLmJ5dGVMZW5ndGg7VCsrKXgrPVN0cmluZy5mcm9tQ2hhckNvZGUoQ1tUXSk7cmV0dXJuIHdpbmRvdy5idG9hKHgpfShWLnJlc3BvbnNlKSxFPXgudGV4dC5yZXBsYWNlKEgsJ3VybCgiZGF0YTonK3guZm9ybWF0KyI7YmFzZTY0LCIrVSsnIiknKSsi''@;'; put 'put ''XG4iO2dlW3gudXJsXT1FLEMoRSl9KSxWLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihVKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIGZvbnQgZnJvbTogIit4LnVybCxVKSxnZVt4LnVybF09bnVsbCxDKG51bGwpfSksVi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIs''@;'; put 'put ''ZnVuY3Rpb24oVSl7Y29uc29sZS53YXJuKCJBYm9ydGVkIGxvYWRpbmcgZm9udCBmcm9tOiAiK3gudXJsLFUpLEMobnVsbCl9KSxWLm9wZW4oIkdFVCIseC51cmwpLFYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsVi5zZW5kKCl9KX0pKS50aGVuKGZ1bmN0aW9uKHgpe3JldHVybiB4LmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQ30pLmpvaW4oIiIpfSl9KGxlKS50aGVuKGZ1bmN0aW9uKHdlKXtyZXR1cm4gYWUuam9pbigiXG4iKSt3ZX0pfSx6PWZ1bmN0aW9uKCl7aWYoIW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiYhKCJkb3dubG9hZCJpbiBkb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJhIikpKXJldHVybntwb3B1cDp3aW5kb3cub3BlbigpfX07Xy5wcmVwYXJlU3ZnPWZ1bmN0aW9uKGcseSx4KXtQKGcpO3ZhciBDPXl8fHt9LFQ9Qy5sZWZ0LFY9dm9pZCAwPT09VD8wOlQsVT1DLnRvcCxFPXZvaWQgMD09PVU/MDpVLG09Qy53aWR0aCxBPUMuaGVpZ2h0LGFlPUMu''@;'; put 'put ''c2NhbGUsbmU9dm9pZCAwPT09YWU/MTphZSxsZT1DLnJlc3BvbnNpdmUsd2U9dm9pZCAwIT09bGUmJmxlLFVlPUMuZXhjbHVkZUNzcyxRZT12b2lkIDAhPT1VZSYmVWU7cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKHkucXVlcnlTZWxlY3RvckFsbCgi''@;'; put 'put ''aW1hZ2UiKSkubWFwKGZ1bmN0aW9uKHgpe3ZhciBDPXguZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIil8fHguZ2V0QXR0cmlidXRlKCJocmVmIik7cmV0dXJuIEM/KGZ1bmN0aW9uKHkpe3JldHVybiB5JiYwPT09eS5sYXN0SW5kZXhPZigiaHR0''@;'; put 'put ''cCIsMCkmJi0xPT09eS5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KEMpJiYoQys9KC0xPT09Qy5pbmRleE9mKCI/Iik/Ij8iOiImIikrInQ9IisobmV3IERhdGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2UoZnVuY3Rpb24oVCxWKXt2YXIgVT1kb2N1bWVudC5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJjYW52YXMiKSxFPW5ldyBJbWFnZTtFLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLEUuc3JjPUMsRS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIFYobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK0MpKX0sRS5vbmxvYWQ9ZnVuY3Rpb24oKXtVLndpZHRoPUUud2lkdGgsVS5oZWln''@;'; put 'put ''aHQ9RS5oZWlnaHQsVS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShFLDAsMCkseC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiLFUudG9EYXRhVVJMKCJpbWFnZS9wbmciKSksVCghMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0pKX0o''@;'; put 'put ''ZykudGhlbihmdW5jdGlvbigpe3ZhciBvdD1nLmNsb25lTm9kZSghMCk7b3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPSh5fHx7fSkuYmFja2dyb3VuZENvbG9yfHxnLnN0eWxlLmJhY2tncm91bmRDb2xvcjt2YXIgTWU9ZnVuY3Rpb24oeSx4LEMsVCl7aWYoInN2ZyI9PT15LnRhZ05hbWUpcmV0''@;'; put 'put ''dXJue3dpZHRoOkN8fFooeSx4LCJ3aWR0aCIpLGhlaWdodDpUfHxaKHkseCwiaGVpZ2h0Iil9O2lmKHkuZ2V0QkJveCl7dmFyIFY9eS5nZXRCQm94KCk7cmV0dXJue3dpZHRoOlYueCtWLndpZHRoLGhlaWdodDpWLnkrVi5oZWlnaHR9fX0oZyxvdCxtLEEpLHZlPU1lLndpZHRoLFhlPU1lLmhl''@;'; put 'put ''aWdodDtpZigic3ZnIiE9PWcudGFnTmFtZSl7aWYoIWcuZ2V0QkJveClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJBdHRlbXB0ZWQgdG8gcmVuZGVyIG5vbi1TVkcgZWxlbWVudCIsZyk7bnVsbCE9b3QuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSYmb3Quc2V0QXR0cmlidXRlKCJ0cmFu''@;'; put 'put ''c2Zvcm0iLG90LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikucmVwbGFjZSgvdHJhbnNsYXRlXCguKj9cKS8sIiIpKTt2YXIgQmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO0JlLmFwcGVuZENoaWxkKG90KSxvdD1CZX1pZihv''@;'; put 'put ''dC5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxvdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtWLEUsdmUsWGVdLmpvaW4oIiAiKSksb3QuZ2V0QXR0cmlidXRlKCJ4bWxucyIpfHxvdC5zZXRBdHRyaWJ1dGVOUyhwLCJ4bWxucyIsdyksb3QuZ2V0QXR0cmlidXRlKCJ4bWxuczp4bGlu''@;'; put 'put ''ayIpfHxvdC5zZXRBdHRyaWJ1dGVOUyhwLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSx3ZT8ob3QucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpLG90LnJlbW92ZUF0dHJpYnV0ZSgiaGVpZ2h0Iiksb3Quc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJh''@;'; put 'put ''dGlvIiwieE1pbllNaW4gbWVldCIpKToob3Quc2V0QXR0cmlidXRlKCJ3aWR0aCIsdmUqbmUpLG90LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixYZSpuZSkpLEFycmF5LmZyb20ob3QucXVlcnlTZWxlY3RvckFsbCgiZm9yZWlnbk9iamVjdCA+ICoiKSkuZm9yRWFjaChmdW5jdGlvbihSZSl7UmUu''@;'; put 'put ''c2V0QXR0cmlidXRlTlMocCwieG1sbnMiLCJzdmciPT09UmUudGFnTmFtZT93OiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIil9KSwhUWUpcmV0dXJuIHplKGcseSkudGhlbihmdW5jdGlvbihSZSl7dmFyIEllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7SWUuc2V0QXR0''@;'; put 'put ''cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxJZS5pbm5lckhUTUw9IjwhW0NEQVRBW1xuIitSZSsiXG5dXT4iO3ZhciBIZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWZzIik7SGUuYXBwZW5kQ2hpbGQoSWUpLG90Lmluc2VydEJlZm9yZShIZSxvdC5maXJzdENoaWxkKTt2YXIgRGU9ZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7RGUuYXBwZW5kQ2hpbGQob3QpO3ZhciBrZT1EZS5pbm5lckhUTUwucmVwbGFjZSgvTlNcZCs6aHJlZi9naSwneG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWYnKTtpZigiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgeClyZXR1cm57c3JjOmtlLHdpZHRoOnZlLGhlaWdodDpYZX07eChrZSx2ZSxYZSl9KTt2YXIgQWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7QWUuYXBwZW5kQ2hpbGQob3QpO3ZhciBGZT1BZS5pbm5lckhUTUw7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3NyYzpG''@;'; put 'put ''ZSx3aWR0aDp2ZSxoZWlnaHQ6WGV9O3goRmUsdmUsWGUpfSl9LF8uc3ZnQXNEYXRhVXJpPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gUChnKSxfLnByZXBhcmVTdmcoZyx5KS50aGVuKGZ1bmN0aW9uKEMpe3ZhciBWPUMud2lkdGgsVT1DLmhlaWdodCxFPSJkYXRhOmltYWdlL3N2Zyt4bWw7YmFz''@;'; put 'put ''ZTY0LCIrd2luZG93LmJ0b2EoZnVuY3Rpb24oeSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoeSkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxmdW5jdGlvbih4LEMpe3ZhciBUPVN0cmluZy5mcm9tQ2hhckNvZGUoIjB4IitDKTtyZXR1cm4iJSI9PT1U''@;'; put 'put ''PyIlMjUiOlR9KSl9KCc8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbPCFFTlRJVFkgbmJzcCAi''@;'; put 'put ''JiMxNjA7Ij5dPicrQy5zcmMpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeChFLFYsVSksRX0pfSxfLnN2Z0FzUG5nVXJpPWZ1bmN0aW9uKGcseSx4KXtQKGcpO3ZhciBDPXl8fHt9LFQ9Qy5lbmNvZGVyVHlwZSxWPXZvaWQgMD09PVQ/ImltYWdlL3BuZyI6VCxVPUMuZW5jb2Rlck9w''@;'; put 'put ''dGlvbnMsRT12b2lkIDA9PT1VPy44OlUsbT1DLmNhbnZnLEE9ZnVuY3Rpb24obmUpe3ZhciBsZT1uZS5zcmMsd2U9bmUud2lkdGgsVWU9bmUuaGVpZ2h0LFFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG90PVFlLmdldENvbnRleHQoIjJkIiksTWU9d2luZG93LmRldmljZVBp''@;'; put 'put ''eGVsUmF0aW98fDE7UWUud2lkdGg9d2UqTWUsUWUuaGVpZ2h0PVVlKk1lLFFlLnN0eWxlLndpZHRoPVFlLndpZHRoKyJweCIsUWUuc3R5bGUuaGVpZ2h0PVFlLmhlaWdodCsicHgiLG90LnNldFRyYW5zZm9ybShNZSwwLDAsTWUsMCwwKSxtP20oUWUsbGUpOm90LmRyYXdJbWFnZShsZSwwLDAp''@;'; put 'put ''O3ZhciB2ZT12b2lkIDA7dHJ5e3ZlPVFlLnRvRGF0YVVSTChWLEUpfWNhdGNoKFhlKXtpZih0eXBlb2YgU2VjdXJpdHlFcnJvcjwidSImJlhlIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09WGUubmFtZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJSZW5k''@;'; put 'put ''ZXJlZCBTVkcgaW1hZ2VzIGNhbm5vdCBiZSBkb3dubG9hZGVkIGluIHRoaXMgYnJvd3Nlci4iKTt0aHJvdyBYZX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeCh2ZSxRZS53aWR0aCxRZS5oZWlnaHQpLFByb21pc2UucmVzb2x2ZSh2ZSl9O3JldHVybiBtP18ucHJlcGFyZVN2ZyhnLHkp''@;'; put 'put ''LnRoZW4oQSk6Xy5zdmdBc0RhdGFVcmkoZyx5KS50aGVuKGZ1bmN0aW9uKGFlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obmUsbGUpe3ZhciB3ZT1uZXcgSW1hZ2U7d2Uub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIG5lKEEoe3NyYzp3ZSx3aWR0aDp3ZS53aWR0aCxoZWlnaHQ6d2Uu''@;'; put 'put ''aGVpZ2h0fSkpfSx3ZS5vbmVycm9yPWZ1bmN0aW9uKCl7bGUoIlRoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHRoZSBkYXRhIFVSSSBhcyBhbiBpbWFnZSBvbiB0aGUgZm9sbG93aW5nIFNWR1xuIit3aW5kb3cuYXRvYihhZS5zbGljZSgyNikpKyJPcGVuIHRoZSBmb2xsb3dpbmcgbGluayB0''@;'; put 'put ''byBzZWUgYnJvd3NlcidzIGRpYWdub3Npc1xuIithZSl9LHdlLnNyYz1hZX0pfSl9LF8uZG93bmxvYWQ9ZnVuY3Rpb24oZyx5LHgpe2lmKG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKFgoeSksZyk7ZWxzZXt2YXIgQz1kb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJhIik7aWYoImRvd25sb2FkImluIEMpe0MuZG93bmxvYWQ9ZyxDLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQyk7dHJ5e3ZhciBUPVgoeSksVj1VUkwuY3JlYXRlT2JqZWN0VVJMKFQpO0MuaHJlZj1WLEMub25jbGljaz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChWKX0pfX1jYXRjaChVKXtjb25zb2xlLmVycm9yKFUpLGNvbnNvbGUud2FybigiRXJyb3Igd2hpbGUgZ2V0dGluZyBvYmplY3QgVVJMLiBGYWxsaW5nIGJhY2sgdG8g''@;'; put 'put ''c3RyaW5nIFVSTC4iKSxDLmhyZWY9eX1DLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChDKX1lbHNlIHgmJngucG9wdXAmJih4LnBvcHVwLmRvY3VtZW50LnRpdGxlPWcseC5wb3B1cC5sb2NhdGlvbi5yZXBsYWNlKHkpKX19LF8uc2F2ZVN2Zz1mdW5jdGlvbihnLHkseCl7dmFy''@;'; put 'put ''IEM9eigpO3JldHVybiBMKGcpLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uc3ZnQXNEYXRhVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5kb3dubG9hZCh5LFQsQyl9KX0sXy5zYXZlU3ZnQXNQbmc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXooKTtyZXR1cm4gTChn''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLnN2Z0FzUG5nVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5kb3dubG9hZCh5LFQsQyl9KX19KCl9LDMxMzU4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTAyNTgpLF89Yig5MjczNikscD1iKDM1ODYx''@;'; put 'put ''KSgpLE49Yig4Mzc5OCksdz1iKDQ2NzU4KSxGPUQoIiVNYXRoLmZsb29yJSIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUixqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUil0aHJvdyBuZXcgdygiYGZuYCBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJudW1iZXIiIT10eXBlb2Yganx8ajwwfHxqPjQy''@;'; put 'put ''OTQ5NjcyOTV8fEYoaikhPT1qKXRocm93IG5ldyB3KCJgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXIiKTt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjImJiEhYXJndW1lbnRzWzJdLEw9ITAsWT0hMDtpZigibGVuZ3RoImluIFImJk4pe3ZhciBCPU4oUiwibGVuZ3Ro''@;'; put 'put ''Iik7QiYmIUIuY29uZmlndXJhYmxlJiYoTD0hMSksQiYmIUIud3JpdGFibGUmJihZPSExKX1yZXR1cm4oTHx8WXx8IVApJiYocD9fKFIsImxlbmd0aCIsaiwhMCwhMCk6XyhSLCJsZW5ndGgiLGopKSxSfX0sNzA0NjM6KGNlLEosYik9Pnt2YXIgRD1iKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24g''@;'; put 'put ''XyhwLE4pe3RoaXMuX2Jsb2NrPUQuYWxsb2MocCksdGhpcy5fZmluYWxTaXplPU4sdGhpcy5fYmxvY2tTaXplPXAsdGhpcy5fbGVuPTB9Xy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHAsTil7InN0cmluZyI9PXR5cGVvZiBwJiYocD1ELmZyb20ocCxOPU58fCJ1dGY4IikpO2Zvcih2YXIg''@;'; put 'put ''dz10aGlzLl9ibG9jayxGPXRoaXMuX2Jsb2NrU2l6ZSxIPXAubGVuZ3RoLFI9dGhpcy5fbGVuLGo9MDtqPEg7KXtmb3IodmFyIFA9UiVGLEw9TWF0aC5taW4oSC1qLEYtUCksWT0wO1k8TDtZKyspd1tQK1ldPXBbaitZXTtqKz1MLChSKz1MKSVGPT0wJiZ0aGlzLl91cGRhdGUodyl9cmV0dXJu''@;'; put 'put ''IHRoaXMuX2xlbis9SCx0aGlzfSxfLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24ocCl7dmFyIE49dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tOXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLE4rMSksTj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMu''@;'; put 'put ''X2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgdz04KnRoaXMuX2xlbjtpZih3PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgRj0oNDI5NDk2NzI5NSZ3KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJC''@;'; put 'put ''RSgody1GKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKEYsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIFI9dGhpcy5faGFzaCgpO3JldHVybiBwP1IudG9TdHJpbmcocCk6Un0sXy5wcm90b3R5''@;'; put 'put ''cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LGNlLmV4cG9ydHM9X30sMjU0NDM6KGNlLEosYik9Pnt2YXIgRD1jZS5leHBvcnRzPWZ1bmN0aW9uKHApe3A9cC50b0xvd2VyQ2FzZSgpO3ZhciBO''@;'; put 'put ''PURbcF07aWYoIU4pdGhyb3cgbmV3IEVycm9yKHArIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IE59O0Quc2hhPWIoNDg1ODUpLEQuc2hhMT1iKDIxMjcwKSxELnNoYTIyND1iKDQyNzA5KSxELnNoYTI1Nj1iKDMyMTQ4KSxELnNoYTM4''@;'; put 'put ''ND1iKDUxODU2KSxELnNoYTUxMj1iKDMxMjEpfSw0ODU4NTooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89Yig3MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsTj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBG''@;'; put 'put ''KCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBIKFApe3JldHVybiBQPDw1fFA+Pj4yN31mdW5jdGlvbiBSKFApe3JldHVybiBQPDwzMHxQPj4+Mn1mdW5jdGlvbiBqKFAsTCxZLEIpe3JldHVybiAwPT09UD9MJll8fkwmQjoyPT09UD9MJll8TCZC''@;'; put 'put ''fFkmQjpMXlleQn1EKEYsXyksRi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sRi5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbihQKXtmb3IodmFyIEw9dGhpcy5fdyxZPTB8dGhpcy5fYSxCPTB8dGhpcy5fYixXPTB8dGhpcy5fYyxaPTB8dGhpcy5fZCxxPTB8dGhpcy5fZSxRPTA7UTwxNjsrK1EpTFtRXT1QLnJlYWRJbnQzMkJFKDQqUSk7Zm9yKDtRPDgwOysrUSlMW1FdPUxbUS0zXV5MW1Et''@;'; put 'put ''OF1eTFtRLTE0XV5MW1EtMTZdO2Zvcih2YXIgWD0wO1g8ODA7KytYKXt2YXIgdGU9fn4oWC8yMCkscmU9SChZKStqKHRlLEIsVyxaKStxK0xbWF0rTlt0ZV18MDtxPVosWj1XLFc9UihCKSxCPVksWT1yZX10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9Qit0aGlzLl9ifDAsdGhpcy5fYz1X''@;'; put 'put ''K3RoaXMuX2N8MCx0aGlzLl9kPVordGhpcy5fZHwwLHRoaXMuX2U9cSt0aGlzLl9lfDB9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFA9cC5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFAud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxQLndyaXRlSW50MzJCRSgwfHRoaXMuX2Is''@;'; put 'put ''NCksUC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFAud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksUC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxQfSxjZS5leHBvcnRzPUZ9LDIxMjcwOihjZSxKLGIpPT57dmFyIEQ9Yig3MTk5MyksXz1iKDcwNDYzKSxwPWIoMjcwNTQpLkJ1ZmZl''@;'; put 'put ''cixOPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIEYoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEgoTCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIFIo''@;'; put 'put ''TCl7cmV0dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIGooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIFAoTCxZLEIsVyl7cmV0dXJuIDA9PT1MP1kmQnx+WSZXOjI9PT1MP1kmQnxZJld8QiZXOlleQl5XfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxGLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgWT10aGlzLl93LEI9MHx0aGlzLl9hLFc9MHx0''@;'; put 'put ''aGlzLl9iLFo9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLFE9MHx0aGlzLl9lLFg9MDtYPDE2OysrWClZW1hdPUwucmVhZEludDMyQkUoNCpYKTtmb3IoO1g8ODA7KytYKVlbWF09SChZW1gtM11eWVtYLThdXllbWC0xNF1eWVtYLTE2XSk7Zm9yKHZhciB0ZT0wO3RlPDgwOysrdGUpe3ZhciByZT1+''@;'; put 'put ''fih0ZS8yMCksb2U9UihCKStQKHJlLFcsWixxKStRK1lbdGVdK05bcmVdfDA7UT1xLHE9WixaPWooVyksVz1CLEI9b2V9dGhpcy5fYT1CK3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9Wit0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPVErdGhpcy5f''@;'; put 'put ''ZXwwfSxGLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBMPXAuYWxsb2NVbnNhZmUoMjApO3JldHVybiBMLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxMLndyaXRlSW50MzJCRSgw''@;'; put 'put ''fHRoaXMuX2QsMTIpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTH0sY2UuZXhwb3J0cz1GfSw0MjcwOTooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89YigzMjE0OCkscD1iKDcwNDYzKSxOPWIoMjcwNTQpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gRigpe3RoaXMu''@;'; put 'put ''aW5pdCgpLHRoaXMuX3c9dyxwLmNhbGwodGhpcyw2NCw1Nil9RChGLF8pLEYucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3''@;'; put 'put ''NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sRi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1OLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gSC53cml0ZUludDMyQkUodGhpcy5fYSwwKSxILndyaXRlSW50''@;'; put 'put ''MzJCRSh0aGlzLl9iLDQpLEgud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksSC53cml0ZUludDMyQkUodGhpcy5fZCwxMiksSC53cml0ZUludDMyQkUodGhpcy5fZSwxNiksSC53cml0ZUludDMyQkUodGhpcy5fZiwyMCksSC53cml0ZUludDMyQkUodGhpcy5fZywyNCksSH0sY2UuZXhwb3J0cz1G''@;'; put 'put ''fSwzMjE0ODooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89Yig3MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsTj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwz''@;'; put 'put ''MTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIy''@;'; put 'put ''MDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3''@;'; put 'put ''LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4''@;'; put 'put ''NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gRigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9''@;'; put 'put ''ZnVuY3Rpb24gSChCLFcsWil7cmV0dXJuIFpeQiYoV15aKX1mdW5jdGlvbiBSKEIsVyxaKXtyZXR1cm4gQiZXfFomKEJ8Vyl9ZnVuY3Rpb24gaihCKXtyZXR1cm4oQj4+PjJ8Qjw8MzApXihCPj4+MTN8Qjw8MTkpXihCPj4+MjJ8Qjw8MTApfWZ1bmN0aW9uIFAoQil7cmV0dXJuKEI+Pj42fEI8''@;'; put 'put ''PDI2KV4oQj4+PjExfEI8PDIxKV4oQj4+PjI1fEI8PDcpfWZ1bmN0aW9uIEwoQil7cmV0dXJuKEI+Pj43fEI8PDI1KV4oQj4+PjE4fEI8PDE0KV5CPj4+M31mdW5jdGlvbiBZKEIpe3JldHVybihCPj4+MTd8Qjw8MTUpXihCPj4+MTl8Qjw8MTMpXkI+Pj4xMH1EKEYsXyksRi5wcm90b3R5cGUu''@;'; put 'put ''aW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1''@;'; put 'put ''NDE0NTkyMjUsdGhpc30sRi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihCKXtmb3IodmFyIFc9dGhpcy5fdyxaPTB8dGhpcy5fYSxxPTB8dGhpcy5fYixRPTB8dGhpcy5fYyxYPTB8dGhpcy5fZCx0ZT0wfHRoaXMuX2UscmU9MHx0aGlzLl9mLG9lPTB8dGhpcy5fZyxnZT0wfHRoaXMuX2gs''@;'; put 'put ''X2U9MDtfZTwxNjsrK19lKVdbX2VdPUIucmVhZEludDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPVkoV1tfZS0yXSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9Z2UrUCh0ZSkrSCh0ZSxyZSxvZSkrTltUZV0r''@;'; put 'put ''V1tUZV18MCx6ZT1qKFopK1IoWixxLFEpfDA7Z2U9b2Usb2U9cmUscmU9dGUsdGU9WCtTZXwwLFg9USxRPXEscT1aLFo9U2UremV8MH10aGlzLl9hPVordGhpcy5fYXwwLHRoaXMuX2I9cSt0aGlzLl9ifDAsdGhpcy5fYz1RK3RoaXMuX2N8MCx0aGlzLl9kPVgrdGhpcy5fZHwwLHRoaXMuX2U9''@;'; put 'put ''dGUrdGhpcy5fZXwwLHRoaXMuX2Y9cmUrdGhpcy5fZnwwLHRoaXMuX2c9b2UrdGhpcy5fZ3wwLHRoaXMuX2g9Z2UrdGhpcy5faHwwfSxGLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBCPXAuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBCLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEIu''@;'; put 'put ''d3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksQi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxCLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxCLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxCLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxCLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxCLndyaXRl''@;'; put 'put ''SW50MzJCRSh0aGlzLl9oLDI4KSxCfSxjZS5leHBvcnRzPUZ9LDUxODU2OihjZSxKLGIpPT57dmFyIEQ9Yig3MTk5MyksXz1iKDMxMjEpLHA9Yig3MDQ2MyksTj1iKDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBGKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHAuY2Fs''@;'; put 'put ''bCh0aGlzLDEyOCwxMTIpfUQoRixfKSxGLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2Zo''@;'; put 'put ''PTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYw''@;'; put 'put ''MzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sRi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgSD1OLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBSKGosUCxMKXtILndyaXRlSW50MzJCRShqLEwpLEgud3JpdGVJbnQzMkJFKFAsTCs0KX1y''@;'; put 'put ''ZXR1cm4gUih0aGlzLl9haCx0aGlzLl9hbCwwKSxSKHRoaXMuX2JoLHRoaXMuX2JsLDgpLFIodGhpcy5fY2gsdGhpcy5fY2wsMTYpLFIodGhpcy5fZGgsdGhpcy5fZGwsMjQpLFIodGhpcy5fZWgsdGhpcy5fZWwsMzIpLFIodGhpcy5fZmgsdGhpcy5fZmwsNDApLEh9LGNlLmV4cG9ydHM9Rn0s''@;'; put 'put ''MzEyMTooY2UsSixiKT0+e3ZhciBEPWIoNzE5OTMpLF89Yig3MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsTj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2''@;'; put 'put ''Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4''@;'; put 'put ''Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3''@;'; put 'put ''NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIw''@;'; put 'put ''MzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIy''@;'; put 'put ''OTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1''@;'; put 'put ''NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUw''@;'; put 'put ''Njg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzcz''@;'; put 'put ''MDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcx''@;'; put 'put ''MSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5''@;'; put 'put ''Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gRigp''@;'; put 'put ''e3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBIKHEsUSxYKXtyZXR1cm4gWF5xJihRXlgpfWZ1bmN0aW9uIFIocSxRLFgpe3JldHVybiBxJlF8WCYocXxRKX1mdW5jdGlvbiBqKHEsUSl7cmV0dXJuKHE+Pj4yOHxRPDw0KV4oUT4+PjJ8cTw8MzAp''@;'; put 'put ''XihRPj4+N3xxPDwyNSl9ZnVuY3Rpb24gUChxLFEpe3JldHVybihxPj4+MTR8UTw8MTgpXihxPj4+MTh8UTw8MTQpXihRPj4+OXxxPDwyMyl9ZnVuY3Rpb24gTChxLFEpe3JldHVybihxPj4+MXxRPDwzMSleKHE+Pj44fFE8PDI0KV5xPj4+N31mdW5jdGlvbiBZKHEsUSl7cmV0dXJuKHE+Pj4x''@;'; put 'put ''fFE8PDMxKV4ocT4+Pjh8UTw8MjQpXihxPj4+N3xRPDwyNSl9ZnVuY3Rpb24gQihxLFEpe3JldHVybihxPj4+MTl8UTw8MTMpXihRPj4+Mjl8cTw8MylecT4+PjZ9ZnVuY3Rpb24gVyhxLFEpe3JldHVybihxPj4+MTl8UTw8MTMpXihRPj4+Mjl8cTw8MyleKHE+Pj42fFE8PDI2KX1mdW5jdGlv''@;'; put 'put ''biBaKHEsUSl7cmV0dXJuIHE+Pj4wPFE+Pj4wPzE6MH1EKEYsXyksRi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEz''@;'; put 'put ''NTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUx''@;'; put 'put ''MzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LEYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBRPXRoaXMuX3csWD0wfHRoaXMuX2FoLHRlPTB8dGhpcy5fYmgscmU9MHx0aGlzLl9jaCxvZT0wfHRo''@;'; put 'put ''aXMuX2RoLGdlPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLFNlPTB8dGhpcy5faGgsemU9MHx0aGlzLl9hbCx6PTB8dGhpcy5fYmwsZz0wfHRoaXMuX2NsLHk9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRoaXMuX2ZsLFQ9MHx0aGlzLl9nbCxWPTB8dGhpcy5f''@;'; put 'put ''aGwsVT0wO1U8MzI7VSs9MilRW1VdPXEucmVhZEludDMyQkUoNCpVKSxRW1UrMV09cS5yZWFkSW50MzJCRSg0KlUrNCk7Zm9yKDtVPDE2MDtVKz0yKXt2YXIgRT1RW1UtMzBdLG09UVtVLTMwKzFdLEE9TChFLG0pLGFlPVkobSxFKSxuZT1CKEU9UVtVLTRdLG09UVtVLTQrMV0pLGxlPVcobSxF''@;'; put 'put ''KSxRZT1RW1UtMzJdLG90PVFbVS0zMisxXSxNZT1hZStRW1UtMTQrMV18MCx2ZT1BK1FbVS0xNF0rWihNZSxhZSl8MDt2ZT0odmU9dmUrbmUrWihNZT1NZStsZXwwLGxlKXwwKStRZStaKE1lPU1lK290fDAsb3QpfDAsUVtVXT12ZSxRW1UrMV09TWV9Zm9yKHZhciBYZT0wO1hlPDE2MDtYZSs9''@;'; put 'put ''Mil7dmU9UVtYZV0sTWU9UVtYZSsxXTt2YXIgQmU9UihYLHRlLHJlKSxBZT1SKHplLHosZyksRmU9aihYLHplKSxSZT1qKHplLFgpLEllPVAoZ2UseCksSGU9UCh4LGdlKSxEZT1OW1hlXSxrZT1OW1hlKzFdLF90PUgoZ2UsX2UsVGUpLG50PUgoeCxDLFQpLEplPVYrSGV8MCxsbj1TZStJZSta''@;'; put 'put ''KEplLFYpfDA7bG49KGxuPShsbj1sbitfdCtaKEplPUplK250fDAsbnQpfDApK0RlK1ooSmU9SmUra2V8MCxrZSl8MCkrdmUrWihKZT1KZStNZXwwLE1lKXwwO3ZhciB5dD1SZStBZXwwLFN0PUZlK0JlK1ooeXQsUmUpfDA7U2U9VGUsVj1ULFRlPV9lLFQ9QyxfZT1nZSxDPXgsZ2U9b2UrbG4r''@;'; put 'put ''Wih4PXkrSmV8MCx5KXwwLG9lPXJlLHk9ZyxyZT10ZSxnPXosdGU9WCx6PXplLFg9bG4rU3QrWih6ZT1KZSt5dHwwLEplKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3plfDAsdGhpcy5fYmw9dGhpcy5fYmwrenwwLHRoaXMuX2NsPXRoaXMuX2NsK2d8MCx0aGlzLl9kbD10aGlzLl9kbCt5fDAsdGhp''@;'; put 'put ''cy5fZWw9dGhpcy5fZWwreHwwLHRoaXMuX2ZsPXRoaXMuX2ZsK0N8MCx0aGlzLl9nbD10aGlzLl9nbCtUfDAsdGhpcy5faGw9dGhpcy5faGwrVnwwLHRoaXMuX2FoPXRoaXMuX2FoK1grWih0aGlzLl9hbCx6ZSl8MCx0aGlzLl9iaD10aGlzLl9iaCt0ZStaKHRoaXMuX2JsLHopfDAsdGhpcy5f''@;'; put 'put ''Y2g9dGhpcy5fY2grcmUrWih0aGlzLl9jbCxnKXwwLHRoaXMuX2RoPXRoaXMuX2RoK29lK1oodGhpcy5fZGwseSl8MCx0aGlzLl9laD10aGlzLl9laCtnZStaKHRoaXMuX2VsLHgpfDAsdGhpcy5fZmg9dGhpcy5fZmgrX2UrWih0aGlzLl9mbCxDKXwwLHRoaXMuX2doPXRoaXMuX2doK1RlK1oo''@;'; put 'put ''dGhpcy5fZ2wsVCl8MCx0aGlzLl9oaD10aGlzLl9oaCtTZStaKHRoaXMuX2hsLFYpfDB9LEYucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHE9cC5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gUShYLHRlLHJlKXtxLndyaXRlSW50MzJCRShYLHJlKSxxLndyaXRlSW50MzJCRSh0ZSxy''@;'; put 'put ''ZSs0KX1yZXR1cm4gUSh0aGlzLl9haCx0aGlzLl9hbCwwKSxRKHRoaXMuX2JoLHRoaXMuX2JsLDgpLFEodGhpcy5fY2gsdGhpcy5fY2wsMTYpLFEodGhpcy5fZGgsdGhpcy5fZGwsMjQpLFEodGhpcy5fZWgsdGhpcy5fZWwsMzIpLFEodGhpcy5fZmgsdGhpcy5fZmwsNDApLFEodGhpcy5fZ2gs''@;'; put 'put ''dGhpcy5fZ2wsNDgpLFEodGhpcy5faGgsdGhpcy5faGwsNTYpLHF9LGNlLmV4cG9ydHM9Rn0sNzA0NTooY2UsSixiKT0+e2NlLmV4cG9ydHM9cDt2YXIgRD1iKDQ0MzU2KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gcCgpe0QuY2FsbCh0aGlzKX1iKDcxOTkzKShwLEQpLHAuUmVhZGFibGU9Yig2''@;'; put 'put ''MTA5MikscC5Xcml0YWJsZT1iKDE1NDkyKSxwLkR1cGxleD1iKDEwMzApLHAuVHJhbnNmb3JtPWIoNDM0MTApLHAuUGFzc1Rocm91Z2g9Yig4MzgyNCkscC5maW5pc2hlZD1iKDU3ODU0KSxwLnBpcGVsaW5lPWIoNjg0NikscC5TdHJlYW09cCxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKE4s''@;'; put 'put ''dyl7dmFyIEY9dGhpcztmdW5jdGlvbiBIKFcpe04ud3JpdGFibGUmJiExPT09Ti53cml0ZShXKSYmRi5wYXVzZSYmRi5wYXVzZSgpfWZ1bmN0aW9uIFIoKXtGLnJlYWRhYmxlJiZGLnJlc3VtZSYmRi5yZXN1bWUoKX1GLm9uKCJkYXRhIixIKSxOLm9uKCJkcmFpbiIsUiksIU4uX2lzU3RkaW8m''@;'; put 'put ''Jighd3x8ITEhPT13LmVuZCkmJihGLm9uKCJlbmQiLFApLEYub24oImNsb3NlIixMKSk7dmFyIGo9ITE7ZnVuY3Rpb24gUCgpe2p8fChqPSEwLE4uZW5kKCkpfWZ1bmN0aW9uIEwoKXtqfHwoaj0hMCwiZnVuY3Rpb24iPT10eXBlb2YgTi5kZXN0cm95JiZOLmRlc3Ryb3koKSl9ZnVuY3Rpb24g''@;'; put 'put ''WShXKXtpZihCKCksMD09PUQubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gQigpe0YucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEgpLE4ucmVtb3ZlTGlzdGVuZXIoImRyYWluIixSKSxGLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFApLEYucmVtb3ZlTGlzdGVuZXIo''@;'; put 'put ''ImNsb3NlIixMKSxGLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWSksTi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFkpLEYucmVtb3ZlTGlzdGVuZXIoImVuZCIsQiksRi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEIpLE4ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixCKX1yZXR1cm4gRi5vbigiZXJy''@;'; put 'put ''b3IiLFkpLE4ub24oImVycm9yIixZKSxGLm9uKCJlbmQiLEIpLEYub24oImNsb3NlIixCKSxOLm9uKCJjbG9zZSIsQiksTi5lbWl0KCJwaXBlIixGKSxOfX0sMzA0NjQ6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gRChGLEgsUil7Unx8KFI9RXJyb3IpO3ZhciBQPWZ1bmN0''@;'; put 'put ''aW9uKEwpe2Z1bmN0aW9uIFkoQixXLFope3JldHVybiBMLmNhbGwodGhpcyxmdW5jdGlvbiBqKEwsWSxCKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEg/SDpIKEwsWSxCKX0oQixXLFopKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gSihGLEgpe0YucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5w''@;'; put 'put ''cm90b3R5cGUpLEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUYsRi5fX3Byb3RvX189SH0oWSxMKSxZfShSKTtQLnByb3RvdHlwZS5uYW1lPVIubmFtZSxQLnByb3RvdHlwZS5jb2RlPUYsYltGXT1QfWZ1bmN0aW9uIF8oRixIKXtpZihBcnJheS5pc0FycmF5KEYpKXt2YXIgUj1GLmxlbmd0aDty''@;'; put 'put ''ZXR1cm4gRj1GLm1hcChmdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nKGopfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoSCwiICIpLmNvbmNhdChGLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIpK0ZbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEgsIiAiKS5jb25jYXQoRlswXSwi''@;'; put 'put ''IG9yICIpLmNvbmNhdChGWzFdKToib2YgIi5jb25jYXQoSCwiICIpLmNvbmNhdChGWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoSCwiICIpLmNvbmNhdChTdHJpbmcoRikpfUQoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oRixIKXtyZXR1cm4nVGhlIHZhbHVlICInK0grJyIgaXMg''@;'; put 'put ''aW52YWxpZCBmb3Igb3B0aW9uICInK0YrJyInfSxUeXBlRXJyb3IpLEQoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihGLEgsUil7dmFyIGosUDtpZigic3RyaW5nIj09dHlwZW9mIEgmJmZ1bmN0aW9uIHAoRixILFIpe3JldHVybiBGLnN1YnN0cighUnx8UjwwPzA6K1IsSC5sZW5n''@;'; put 'put ''dGgpPT09SH0oSCwibm90ICIpPyhqPSJtdXN0IG5vdCBiZSIsSD1ILnJlcGxhY2UoL15ub3QgLywiIikpOmo9Im11c3QgYmUiLGZ1bmN0aW9uIE4oRixILFIpe3JldHVybih2b2lkIDA9PT1SfHxSPkYubGVuZ3RoKSYmKFI9Ri5sZW5ndGgpLEYuc3Vic3RyaW5nKFItSC5sZW5ndGgsUik9PT1I''@;'; put 'put ''fShGLCIgYXJndW1lbnQiKSlQPSJUaGUgIi5jb25jYXQoRiwiICIpLmNvbmNhdChqLCIgIikuY29uY2F0KF8oSCwidHlwZSIpKTtlbHNle3ZhciBMPWZ1bmN0aW9uIHcoRixILFIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgUiYmKFI9MCksIShSK0gubGVuZ3RoPkYubGVuZ3RoKSYmLTEhPT1G''@;'; put 'put ''LmluZGV4T2YoSCxSKX0oRiwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtQPSdUaGUgIicuY29uY2F0KEYsJyIgJykuY29uY2F0KEwsIiAiKS5jb25jYXQoaiwiICIpLmNvbmNhdChfKEgsInR5cGUiKSl9cmV0dXJuIFArIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgUil9LFR5''@;'; put 'put ''cGVFcnJvciksRCgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksRCgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKEYpe3JldHVybiJUaGUgIitGKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxEKCJFUlJfU1RS''@;'; put 'put ''RUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEQoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihGKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitGKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxEKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxs''@;'; put 'put ''YmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxEKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEQoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksRCgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1h''@;'; put 'put ''eSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEQoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihGKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitGfSxUeXBlRXJyb3IpLEQoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJz''@;'; put 'put ''dHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLGNlLmV4cG9ydHMuRj1ifSwxMDMwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPU9iamVjdC5rZXlzfHxmdW5jdGlvbihQKXt2YXIgTD1bXTtmb3IodmFyIFkgaW4gUClMLnB1c2goWSk7cmV0dXJuIEx9O2NlLmV4cG9ydHM9''@;'; put 'put ''SDt2YXIgXz1iKDYxMDkyKSxwPWIoMTU0OTIpO2IoNzE5OTMpKEgsXyk7Zm9yKHZhciBOPUQocC5wcm90b3R5cGUpLHc9MDt3PE4ubGVuZ3RoO3crKyl7dmFyIEY9Tlt3XTtILnByb3RvdHlwZVtGXXx8KEgucHJvdG90eXBlW0ZdPXAucHJvdG90eXBlW0ZdKX1mdW5jdGlvbiBIKFApe2lmKCEo''@;'; put 'put ''dGhpcyBpbnN0YW5jZW9mIEgpKXJldHVybiBuZXcgSChQKTtfLmNhbGwodGhpcyxQKSxwLmNhbGwodGhpcyxQKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsUCYmKCExPT09UC5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09UC53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCEx''@;'; put 'put ''PT09UC5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixSKSkpfWZ1bmN0aW9uIFIoKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxwcm9jZXNzLm5leHRUaWNrKGosdGhpcyl9ZnVuY3Rpb24gaihQKXtQLmVuZCgpfU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVCdWZm''@;'; put 'put ''ZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZv''@;'; put 'put ''aWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEwpe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8''@;'; put 'put ''fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1MLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUwpfX0pfSw4MzgyNDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPV87dmFyIEQ9Yig0MzQxMCk7ZnVuY3Rpb24gXyhwKXtpZighKHRoaXMgaW5zdGFuY2VvZiBf''@;'; put 'put ''KSlyZXR1cm4gbmV3IF8ocCk7RC5jYWxsKHRoaXMscCl9Yig3MTk5MykoXyxEKSxfLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHAsTix3KXt3KG51bGwscCl9fSw2MTA5MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtjZS5leHBvcnRzPXosei5SZWFkYWJsZVN0YXRlPXpl''@;'; put 'put ''LGIoNDQzNTYpO3ZhciBQLHA9ZnVuY3Rpb24oRmUsUmUpe3JldHVybiBGZS5saXN0ZW5lcnMoUmUpLmxlbmd0aH0sTj1iKDEyNjAxKSx3PWIoODM4MzgpLkJ1ZmZlcixGPSh0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9z''@;'; put 'put ''ZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30saj1iKDc3MTk5KTtQPWomJmouZGVidWdsb2c/ai5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciByZSxvZSxnZSxMPWIoNzUyMjUpLFk9Yig4ODE1MiksVz1iKDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFo9YigzMDQ2''@;'; put 'put ''NCkuRixxPVouRVJSX0lOVkFMSURfQVJHX1RZUEUsUT1aLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsWD1aLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHRlPVouRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtiKDcxOTkzKSh6LE4pO3ZhciBfZT1ZLmVycm9yT3JEZXN0''@;'; put 'put ''cm95LFRlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIHplKEFlLEZlLFJlKXtEPUR8fGIoMTAzMCksImJvb2xlYW4iIT10eXBlb2YgUmUmJihSZT1GZSBpbnN0YW5jZW9mIEQpLHRoaXMub2JqZWN0TW9kZT0hIShBZT1BZXx8e30pLm9iamVj''@;'; put 'put ''dE1vZGUsUmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUFlLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVcodGhpcyxBZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixSZSksdGhpcy5idWZmZXI9bmV3IEwsdGhpcy5sZW5ndGg9MCx0aGlzLnBp''@;'; put 'put ''cGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxl''@;'; put 'put ''TGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09QWUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFBZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1BZS5kZWZh''@;'; put 'put ''dWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxBZS5lbmNvZGluZyYmKHJlfHwocmU9Yig3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyByZShBZS5lbmNvZGluZyksdGhp''@;'; put 'put ''cy5lbmNvZGluZz1BZS5lbmNvZGluZyl9ZnVuY3Rpb24geihBZSl7aWYoRD1EfHxiKDEwMzApLCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihBZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgemUoQWUsdGhpcyx0aGlzIGluc3RhbmNlb2YgRCksdGhpcy5yZWFkYWJsZT0hMCxB''@;'; put 'put ''ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBZS5yZWFkJiYodGhpcy5fcmVhZD1BZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgQWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9QWUuZGVzdHJveSkpLE4uY2FsbCh0aGlzKX1mdW5jdGlvbiBnKEFlLEZlLFJlLEllLEhlKXtQKCJyZWFkYWJsZUFk''@;'; put 'put ''ZENodW5rIixGZSk7dmFyIGtlLERlPUFlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1GZSlEZS5yZWFkaW5nPSExLGZ1bmN0aW9uIFUoQWUsRmUpe2lmKFAoIm9uRW9mQ2h1bmsiKSwhRmUuZW5kZWQpe2lmKEZlLmRlY29kZXIpe3ZhciBSZT1GZS5kZWNvZGVyLmVuZCgpO1JlJiZSZS5sZW5n''@;'; put 'put ''dGgmJihGZS5idWZmZXIucHVzaChSZSksRmUubGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6UmUubGVuZ3RoKX1GZS5lbmRlZD0hMCxGZS5zeW5jP0UoQWUpOihGZS5uZWVkUmVhZGFibGU9ITEsRmUuZW1pdHRlZFJlYWRhYmxlfHwoRmUuZW1pdHRlZFJlYWRhYmxlPSEwLG0oQWUpKSl9fShBZSxE''@;'; put 'put ''ZSk7ZWxzZSBpZihIZXx8KGtlPWZ1bmN0aW9uIHgoQWUsRmUpe3ZhciBSZTtyZXR1cm4hZnVuY3Rpb24gUihBZSl7cmV0dXJuIHcuaXNCdWZmZXIoQWUpfHxBZSBpbnN0YW5jZW9mIEZ9KEZlKSYmInN0cmluZyIhPXR5cGVvZiBGZSYmdm9pZCAwIT09RmUmJiFBZS5vYmplY3RNb2RlJiYoUmU9''@;'; put 'put ''bmV3IHEoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxGZSkpLFJlfShEZSxGZSkpLGtlKV9lKEFlLGtlKTtlbHNlIGlmKERlLm9iamVjdE1vZGV8fEZlJiZGZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIEZlJiYhRGUub2JqZWN0TW9kZSYmT2JqZWN0Lmdl''@;'; put 'put ''dFByb3RvdHlwZU9mKEZlKSE9PXcucHJvdG90eXBlJiYoRmU9ZnVuY3Rpb24gSChBZSl7cmV0dXJuIHcuZnJvbShBZSl9KEZlKSksSWUpRGUuZW5kRW1pdHRlZD9fZShBZSxuZXcgdGUpOnkoQWUsRGUsRmUsITApO2Vsc2UgaWYoRGUuZW5kZWQpX2UoQWUsbmV3IFEpO2Vsc2V7aWYoRGUuZGVz''@;'; put 'put ''dHJveWVkKXJldHVybiExO0RlLnJlYWRpbmc9ITEsRGUuZGVjb2RlciYmIVJlPyhGZT1EZS5kZWNvZGVyLndyaXRlKEZlKSxEZS5vYmplY3RNb2RlfHwwIT09RmUubGVuZ3RoP3koQWUsRGUsRmUsITEpOkEoQWUsRGUpKTp5KEFlLERlLEZlLCExKX1lbHNlIEllfHwoRGUucmVhZGluZz0hMSxB''@;'; put 'put ''KEFlLERlKSk7cmV0dXJuIURlLmVuZGVkJiYoRGUubGVuZ3RoPERlLmhpZ2hXYXRlck1hcmt8fDA9PT1EZS5sZW5ndGgpfWZ1bmN0aW9uIHkoQWUsRmUsUmUsSWUpe0ZlLmZsb3dpbmcmJjA9PT1GZS5sZW5ndGgmJiFGZS5zeW5jPyhGZS5hd2FpdERyYWluPTAsQWUuZW1pdCgiZGF0YSIsUmUp''@;'; put 'put ''KTooRmUubGVuZ3RoKz1GZS5vYmplY3RNb2RlPzE6UmUubGVuZ3RoLEllP0ZlLmJ1ZmZlci51bnNoaWZ0KFJlKTpGZS5idWZmZXIucHVzaChSZSksRmUubmVlZFJlYWRhYmxlJiZFKEFlKSksQShBZSxGZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9''@;'; put 'put ''RmUpfX0pLHoucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95LHoucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQWUsRmUpe0ZlKEFlKX0sei5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihBZSxGZSl7dmFyIEllLFJlPXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGU7cmV0dXJuIFJlLm9iamVjdE1vZGU/SWU9ITA6InN0cmluZyI9PXR5cGVvZiBBZSYmKChGZT1GZXx8UmUuZGVmYXVsdEVuY29kaW5nKSE9PVJlLmVuY29kaW5nJiYoQWU9dy5mcm9tKEFlLEZlKSxGZT0iIiksSWU9ITApLGcodGhpcyxBZSxGZSwhMSxJZSl9LHoucHJv''@;'; put 'put ''dG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oQWUpe3JldHVybiBnKHRoaXMsQWUsbnVsbCwhMCwhMSl9LHoucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHoucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKEFl''@;'; put 'put ''KXtyZXx8KHJlPWIoNzg0NTQpLkkpO3ZhciBGZT1uZXcgcmUoQWUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1GZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIFJlPXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGUuYnVmZmVyLmhlYWQsSWU9IiI7bnVsbCE9PVJlOylJZSs9RmUud3JpdGUoUmUuZGF0YSksUmU9UmUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PUllJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKEllKSx0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmxlbmd0aD1JZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3Mzc0MTgyNDtmdW5jdGlvbiBWKEFlLEZlKXtyZXR1cm4gQWU8PTB8fDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkPzA6RmUub2JqZWN0TW9kZT8xOkFlIT1BZT9GZS5mbG93aW5nJiZGZS5sZW5ndGg/RmUuYnVmZmVyLmhlYWQu''@;'; put 'put ''ZGF0YS5sZW5ndGg6RmUubGVuZ3RoOihBZT5GZS5oaWdoV2F0ZXJNYXJrJiYoRmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBUKEFlKXtyZXR1cm4gQWU+PUM/QWU9QzooQWUtLSxBZXw9QWU+Pj4xLEFlfD1BZT4+PjIsQWV8PUFlPj4+NCxBZXw9QWU+Pj44LEFlfD1BZT4+PjE2LEFlKyspLEFl''@;'; put 'put ''fShBZSkpLEFlPD1GZS5sZW5ndGg/QWU6RmUuZW5kZWQ/RmUubGVuZ3RoOihGZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEUoQWUpe3ZhciBGZT1BZS5fcmVhZGFibGVTdGF0ZTtQKCJlbWl0UmVhZGFibGUiLEZlLm5lZWRSZWFkYWJsZSxGZS5lbWl0dGVkUmVhZGFibGUpLEZlLm5l''@;'; put 'put ''ZWRSZWFkYWJsZT0hMSxGZS5lbWl0dGVkUmVhZGFibGV8fChQKCJlbWl0UmVhZGFibGUiLEZlLmZsb3dpbmcpLEZlLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKG0sQWUpKX1mdW5jdGlvbiBtKEFlKXt2YXIgRmU9QWUuX3JlYWRhYmxlU3RhdGU7UCgiZW1pdFJlYWRhYmxl''@;'; put 'put ''XyIsRmUuZGVzdHJveWVkLEZlLmxlbmd0aCxGZS5lbmRlZCksIUZlLmRlc3Ryb3llZCYmKEZlLmxlbmd0aHx8RmUuZW5kZWQpJiYoQWUuZW1pdCgicmVhZGFibGUiKSxGZS5lbWl0dGVkUmVhZGFibGU9ITEpLEZlLm5lZWRSZWFkYWJsZT0hRmUuZmxvd2luZyYmIUZlLmVuZGVkJiZGZS5sZW5n''@;'; put 'put ''dGg8PUZlLmhpZ2hXYXRlck1hcmssb3QoQWUpfWZ1bmN0aW9uIEEoQWUsRmUpe0ZlLnJlYWRpbmdNb3JlfHwoRmUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhhZSxBZSxGZSkpfWZ1bmN0aW9uIGFlKEFlLEZlKXtmb3IoOyFGZS5yZWFkaW5nJiYhRmUuZW5kZWQmJihGZS5sZW5n''@;'; put 'put ''dGg8RmUuaGlnaFdhdGVyTWFya3x8RmUuZmxvd2luZyYmMD09PUZlLmxlbmd0aCk7KXt2YXIgUmU9RmUubGVuZ3RoO2lmKFAoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksQWUucmVhZCgwKSxSZT09PUZlLmxlbmd0aClicmVha31GZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBsZShBZSl7dmFy''@;'; put 'put ''IEZlPUFlLl9yZWFkYWJsZVN0YXRlO0ZlLnJlYWRhYmxlTGlzdGVuaW5nPUFlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxGZS5yZXN1bWVTY2hlZHVsZWQmJiFGZS5wYXVzZWQ/RmUuZmxvd2luZz0hMDpBZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmQWUucmVzdW1lKCl9ZnVuY3Rp''@;'; put 'put ''b24gd2UoQWUpe1AoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEFlLnJlYWQoMCl9ZnVuY3Rpb24gUWUoQWUsRmUpe1AoInJlc3VtZSIsRmUucmVhZGluZyksRmUucmVhZGluZ3x8QWUucmVhZCgwKSxGZS5yZXN1bWVTY2hlZHVsZWQ9ITEsQWUuZW1pdCgicmVzdW1lIiksb3QoQWUpLEZl''@;'; put 'put ''LmZsb3dpbmcmJiFGZS5yZWFkaW5nJiZBZS5yZWFkKDApfWZ1bmN0aW9uIG90KEFlKXt2YXIgRmU9QWUuX3JlYWRhYmxlU3RhdGU7Zm9yKFAoImZsb3ciLEZlLmZsb3dpbmcpO0ZlLmZsb3dpbmcmJm51bGwhPT1BZS5yZWFkKCk7KTt9ZnVuY3Rpb24gTWUoQWUsRmUpe3JldHVybiAwPT09RmUu''@;'; put 'put ''bGVuZ3RoP251bGw6KEZlLm9iamVjdE1vZGU/UmU9RmUuYnVmZmVyLnNoaWZ0KCk6IUFlfHxBZT49RmUubGVuZ3RoPyhSZT1GZS5kZWNvZGVyP0ZlLmJ1ZmZlci5qb2luKCIiKToxPT09RmUuYnVmZmVyLmxlbmd0aD9GZS5idWZmZXIuZmlyc3QoKTpGZS5idWZmZXIuY29uY2F0KEZlLmxlbmd0''@;'; put 'put ''aCksRmUuYnVmZmVyLmNsZWFyKCkpOlJlPUZlLmJ1ZmZlci5jb25zdW1lKEFlLEZlLmRlY29kZXIpLFJlKTt2YXIgUmV9ZnVuY3Rpb24gdmUoQWUpe3ZhciBGZT1BZS5fcmVhZGFibGVTdGF0ZTtQKCJlbmRSZWFkYWJsZSIsRmUuZW5kRW1pdHRlZCksRmUuZW5kRW1pdHRlZHx8KEZlLmVuZGVk''@;'; put 'put ''PSEwLHByb2Nlc3MubmV4dFRpY2soWGUsRmUsQWUpKX1mdW5jdGlvbiBYZShBZSxGZSl7aWYoUCgiZW5kUmVhZGFibGVOVCIsQWUuZW5kRW1pdHRlZCxBZS5sZW5ndGgpLCFBZS5lbmRFbWl0dGVkJiYwPT09QWUubGVuZ3RoJiYoQWUuZW5kRW1pdHRlZD0hMCxGZS5yZWFkYWJsZT0hMSxGZS5l''@;'; put 'put ''bWl0KCJlbmQiKSxBZS5hdXRvRGVzdHJveSkpe3ZhciBSZT1GZS5fd3JpdGFibGVTdGF0ZTsoIVJlfHxSZS5hdXRvRGVzdHJveSYmUmUuZmluaXNoZWQpJiZGZS5kZXN0cm95KCl9fWZ1bmN0aW9uIEJlKEFlLEZlKXtmb3IodmFyIFJlPTAsSWU9QWUubGVuZ3RoO1JlPEllO1JlKyspaWYoQWVb''@;'; put 'put ''UmVdPT09RmUpcmV0dXJuIFJlO3JldHVybi0xfXoucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oQWUpe1AoInJlYWQiLEFlKSxBZT1wYXJzZUludChBZSwxMCk7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsUmU9QWU7aWYoMCE9PUFlJiYoRmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09QWUm''@;'; put 'put ''JkZlLm5lZWRSZWFkYWJsZSYmKCgwIT09RmUuaGlnaFdhdGVyTWFyaz9GZS5sZW5ndGg+PUZlLmhpZ2hXYXRlck1hcms6RmUubGVuZ3RoPjApfHxGZS5lbmRlZCkpcmV0dXJuIFAoInJlYWQ6IGVtaXRSZWFkYWJsZSIsRmUubGVuZ3RoLEZlLmVuZGVkKSwwPT09RmUubGVuZ3RoJiZGZS5lbmRl''@;'; put 'put ''ZD92ZSh0aGlzKTpFKHRoaXMpLG51bGw7aWYoMD09PShBZT1WKEFlLEZlKSkmJkZlLmVuZGVkKXJldHVybiAwPT09RmUubGVuZ3RoJiZ2ZSh0aGlzKSxudWxsO3ZhciBIZSxJZT1GZS5uZWVkUmVhZGFibGU7cmV0dXJuIFAoIm5lZWQgcmVhZGFibGUiLEllKSwoMD09PUZlLmxlbmd0aHx8RmUu''@;'; put 'put ''bGVuZ3RoLUFlPEZlLmhpZ2hXYXRlck1hcmspJiZQKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsSWU9ITApLEZlLmVuZGVkfHxGZS5yZWFkaW5nP1AoInJlYWRpbmcgb3IgZW5kZWQiLEllPSExKTpJZSYmKFAoImRvIHJlYWQiKSxGZS5yZWFkaW5nPSEwLEZlLnN5bmM9ITAsMD09PUZl''@;'; put 'put ''Lmxlbmd0aCYmKEZlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChGZS5oaWdoV2F0ZXJNYXJrKSxGZS5zeW5jPSExLEZlLnJlYWRpbmd8fChBZT1WKFJlLEZlKSkpLG51bGw9PT0oSGU9QWU+MD9NZShBZSxGZSk6bnVsbCk/KEZlLm5lZWRSZWFkYWJsZT1GZS5sZW5ndGg8PUZlLmhpZ2hX''@;'; put 'put ''YXRlck1hcmssQWU9MCk6KEZlLmxlbmd0aC09QWUsRmUuYXdhaXREcmFpbj0wKSwwPT09RmUubGVuZ3RoJiYoRmUuZW5kZWR8fChGZS5uZWVkUmVhZGFibGU9ITApLFJlIT09QWUmJkZlLmVuZGVkJiZ2ZSh0aGlzKSksbnVsbCE9PUhlJiZ0aGlzLmVtaXQoImRhdGEiLEhlKSxIZX0sei5wcm90''@;'; put 'put ''b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oQWUpe19lKHRoaXMsbmV3IFgoIl9yZWFkKCkiKSl9LHoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oQWUsRmUpe3ZhciBSZT10aGlzLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKEllLnBpcGVzQ291bnQpe2Nhc2UgMDpJZS5waXBlcz1BZTticmVh''@;'; put 'put ''aztjYXNlIDE6SWUucGlwZXM9W0llLnBpcGVzLEFlXTticmVhaztkZWZhdWx0OkllLnBpcGVzLnB1c2goQWUpfUllLnBpcGVzQ291bnQrPTEsUCgicGlwZSBjb3VudD0lZCBvcHRzPSVqIixJZS5waXBlc0NvdW50LEZlKTt2YXIgRGU9RmUmJiExPT09RmUuZW5kfHxBZT09PXByb2Nlc3Muc3Rk''@;'; put 'put ''b3V0fHxBZT09PXByb2Nlc3Muc3RkZXJyPyRlOl90O2Z1bmN0aW9uIF90KCl7UCgib25lbmQiKSxBZS5lbmQoKX1JZS5lbmRFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soRGUpOlJlLm9uY2UoImVuZCIsRGUpLEFlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIGtlKHR0LE5lKXtQKCJvbnVucGlwZSIp''@;'; put 'put ''LHR0PT09UmUmJk5lJiYhMT09PU5lLmhhc1VucGlwZWQmJihOZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIGxuKCl7UCgiY2xlYW51cCIpLEFlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRHQpLEFlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0KSxBZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4i''@;'; put 'put ''LG50KSxBZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFN0KSxBZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixrZSksUmUucmVtb3ZlTGlzdGVuZXIoImVuZCIsX3QpLFJlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLCRlKSxSZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIseXQpLEplPSEwLEllLmF3YWl0''@;'; put 'put ''RHJhaW4mJighQWUuX3dyaXRhYmxlU3RhdGV8fEFlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJm50KCl9KCkpfSk7dmFyIG50PWZ1bmN0aW9uIG5lKEFlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgUmU9QWUuX3JlYWRhYmxlU3RhdGU7UCgicGlwZU9uRHJhaW4iLFJlLmF3YWl0RHJhaW4p''@;'; put 'put ''LFJlLmF3YWl0RHJhaW4mJlJlLmF3YWl0RHJhaW4tLSwwPT09UmUuYXdhaXREcmFpbiYmcChBZSwiZGF0YSIpJiYoUmUuZmxvd2luZz0hMCxvdChBZSkpfX0oUmUpO0FlLm9uKCJkcmFpbiIsbnQpO3ZhciBKZT0hMTtmdW5jdGlvbiB5dCh0dCl7UCgib25kYXRhIik7dmFyIE5lPUFlLndyaXRl''@;'; put 'put ''KHR0KTtQKCJkZXN0LndyaXRlIixOZSksITE9PT1OZSYmKCgxPT09SWUucGlwZXNDb3VudCYmSWUucGlwZXM9PT1BZXx8SWUucGlwZXNDb3VudD4xJiYtMSE9PUJlKEllLnBpcGVzLEFlKSkmJiFKZSYmKFAoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsSWUuYXdhaXREcmFpbiksSWUu''@;'; put 'put ''YXdhaXREcmFpbisrKSxSZS5wYXVzZSgpKX1mdW5jdGlvbiBTdCh0dCl7UCgib25lcnJvciIsdHQpLCRlKCksQWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixTdCksMD09PXAoQWUsImVycm9yIikmJl9lKEFlLHR0KX1mdW5jdGlvbiBEdCgpe0FlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGl0''@;'; put 'put ''KSwkZSgpfWZ1bmN0aW9uIGl0KCl7UCgib25maW5pc2giKSxBZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLER0KSwkZSgpfWZ1bmN0aW9uICRlKCl7UCgidW5waXBlIiksUmUudW5waXBlKEFlKX1yZXR1cm4gUmUub24oImRhdGEiLHl0KSxmdW5jdGlvbiBTZShBZSxGZSxSZSl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEFlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gQWUucHJlcGVuZExpc3RlbmVyKEZlLFJlKTtBZS5fZXZlbnRzJiZBZS5fZXZlbnRzW0ZlXT9BcnJheS5pc0FycmF5KEFlLl9ldmVudHNbRmVdKT9BZS5fZXZlbnRzW0ZlXS51bnNoaWZ0KFJlKTpBZS5fZXZlbnRzW0ZlXT1b''@;'; put 'put ''UmUsQWUuX2V2ZW50c1tGZV1dOkFlLm9uKEZlLFJlKX0oQWUsImVycm9yIixTdCksQWUub25jZSgiY2xvc2UiLER0KSxBZS5vbmNlKCJmaW5pc2giLGl0KSxBZS5lbWl0KCJwaXBlIixSZSksSWUuZmxvd2luZ3x8KFAoInBpcGUgcmVzdW1lIiksUmUucmVzdW1lKCkpLEFlfSx6LnByb3RvdHlw''@;'; put 'put ''ZS51bnBpcGU9ZnVuY3Rpb24oQWUpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlLFJlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09RmUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09RmUucGlwZXNDb3VudClyZXR1cm4gQWUmJkFlIT09RmUucGlwZXN8fChBZXx8KEFlPUZlLnBpcGVz''@;'; put 'put ''KSxGZS5waXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExLEFlJiZBZS5lbWl0KCJ1bnBpcGUiLHRoaXMsUmUpKSx0aGlzO2lmKCFBZSl7dmFyIEllPUZlLnBpcGVzLEhlPUZlLnBpcGVzQ291bnQ7RmUucGlwZXM9bnVsbCxGZS5waXBlc0NvdW50PTAsRmUuZmxvd2luZz0h''@;'; put 'put ''MTtmb3IodmFyIERlPTA7RGU8SGU7RGUrKylJZVtEZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIGtlPUJlKEZlLnBpcGVzLEFlKTtyZXR1cm4tMT09PWtlfHwoRmUucGlwZXMuc3BsaWNlKGtlLDEpLEZlLnBpcGVzQ291bnQtPTEsMT09PUZl''@;'; put 'put ''LnBpcGVzQ291bnQmJihGZS5waXBlcz1GZS5waXBlc1swXSksQWUuZW1pdCgidW5waXBlIix0aGlzLFJlKSksdGhpc30sei5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ei5wcm90b3R5cGUub249ZnVuY3Rpb24oQWUsRmUpe3ZhciBSZT1OLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsQWUsRmUpLEll''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09QWU/KEllLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09SWUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6InJlYWRhYmxlIj09PUFlJiYhSWUuZW5kRW1pdHRlZCYmIUllLnJl''@;'; put 'put ''YWRhYmxlTGlzdGVuaW5nJiYoSWUucmVhZGFibGVMaXN0ZW5pbmc9SWUubmVlZFJlYWRhYmxlPSEwLEllLmZsb3dpbmc9ITEsSWUuZW1pdHRlZFJlYWRhYmxlPSExLFAoIm9uIHJlYWRhYmxlIixJZS5sZW5ndGgsSWUucmVhZGluZyksSWUubGVuZ3RoP0UodGhpcyk6SWUucmVhZGluZ3x8cHJv''@;'; put 'put ''Y2Vzcy5uZXh0VGljayh3ZSx0aGlzKSksUmV9LHoucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKEFlLEZlKXt2YXIgUmU9Ti5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLEFlLEZlKTtyZXR1cm4icmVhZGFibGUiPT09QWUmJnByb2Nlc3MubmV4dFRpY2sobGUs''@;'; put 'put ''dGhpcyksUmV9LHoucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihBZSl7dmFyIEZlPU4ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKCJyZWFkYWJsZSI9PT1BZXx8dm9pZCAwPT09QWUpJiZwcm9jZXNzLm5leHRU''@;'; put 'put ''aWNrKGxlLHRoaXMpLEZlfSx6LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgQWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gQWUuZmxvd2luZ3x8KFAoInJlc3VtZSIpLEFlLmZsb3dpbmc9IUFlLnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uIFVlKEFlLEZlKXtGZS5yZXN1''@;'; put 'put ''bWVTY2hlZHVsZWR8fChGZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhRZSxBZSxGZSkpfSh0aGlzLEFlKSksQWUucGF1c2VkPSExLHRoaXN9LHoucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFAoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFAoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sei5wcm90b3R5cGUu''@;'; put 'put ''d3JhcD1mdW5jdGlvbihBZSl7dmFyIEZlPXRoaXMsUmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT0hMTtmb3IodmFyIEhlIGluIEFlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoUCgid3JhcHBlZCBlbmQiKSxSZS5kZWNvZGVyJiYhUmUuZW5kZWQpe3ZhciBrZT1SZS5kZWNvZGVyLmVuZCgpO2tl''@;'; put 'put ''JiZrZS5sZW5ndGgmJkZlLnB1c2goa2UpfUZlLnB1c2gobnVsbCl9KSxBZS5vbigiZGF0YSIsZnVuY3Rpb24oa2Upe1AoIndyYXBwZWQgZGF0YSIpLFJlLmRlY29kZXImJihrZT1SZS5kZWNvZGVyLndyaXRlKGtlKSksUmUub2JqZWN0TW9kZSYmbnVsbD09a2V8fCEoUmUub2JqZWN0TW9kZXx8''@;'; put 'put ''a2UmJmtlLmxlbmd0aCl8fEZlLnB1c2goa2UpfHwoSWU9ITAsQWUucGF1c2UoKSl9KSxBZSl2b2lkIDA9PT10aGlzW0hlXSYmImZ1bmN0aW9uIj09dHlwZW9mIEFlW0hlXSYmKHRoaXNbSGVdPWZ1bmN0aW9uKF90KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQWVbX3RdLmFwcGx5KEFlLGFy''@;'; put 'put ''Z3VtZW50cyl9fShIZSkpO2Zvcih2YXIgRGU9MDtEZTxUZS5sZW5ndGg7RGUrKylBZS5vbihUZVtEZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxUZVtEZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihrZSl7UCgid3JhcHBlZCBfcmVhZCIsa2UpLEllJiYoSWU9ITEsQWUucmVzdW1lKCkp''@;'; put 'put ''fSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoei5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW9lJiYob2U9YigxMjY4MykpLG9lKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJyZWFk''@;'; put 'put ''YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oRmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9RmUpfX0pLHouX2Zyb21MaXN0PU1lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVt''@;'; put 'put ''ZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoei5mcm9tPWZ1bmN0aW9uKEFlLEZlKXtyZXR1cm4gdm9pZCAwPT09Z2UmJihnZT1iKDQ3NzY1KSksZ2UoeixBZSxGZSl9KX0sNDM0''@;'; put 'put ''MTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1SO3ZhciBEPWIoMzA0NjQpLkYsXz1ELkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHA9RC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssTj1ELkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1ELkVSUl9UUkFO''@;'; put 'put ''U0ZPUk1fV0lUSF9MRU5HVEhfMCxGPWIoMTAzMCk7ZnVuY3Rpb24gSChMLFkpe3ZhciBCPXRoaXMuX3RyYW5zZm9ybVN0YXRlO0IudHJhbnNmb3JtaW5nPSExO3ZhciBXPUIud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IHApO0Iud3JpdGVjaHVuaz1u''@;'; put 'put ''dWxsLEIud3JpdGVjYj1udWxsLG51bGwhPVkmJnRoaXMucHVzaChZKSxXKEwpO3ZhciBaPXRoaXMuX3JlYWRhYmxlU3RhdGU7Wi5yZWFkaW5nPSExLChaLm5lZWRSZWFkYWJsZXx8Wi5sZW5ndGg8Wi5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChaLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9u''@;'; put 'put ''IFIoTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKEwpO0YuY2FsbCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpILmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1''@;'; put 'put ''bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLGopfWZ1bmN0aW9uIGooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/UCh0aGlzLG51bGws''@;'; put 'put ''bnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oWSxCKXtQKEwsWSxCKX0pfWZ1bmN0aW9uIFAoTCxZLEIpe2lmKFkpcmV0dXJuIEwuZW1pdCgiZXJyb3IiLFkpO2lmKG51bGwhPUImJkwucHVzaChCKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihMLl90cmFuc2Zvcm1T''@;'; put 'put ''dGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IE47cmV0dXJuIEwucHVzaChudWxsKX1iKDcxOTkzKShSLEYpLFIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxZKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxGLnByb3RvdHlwZS5wdXNoLmNhbGwodGhp''@;'; put 'put ''cyxMLFkpfSxSLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEwsWSxCKXtCKG5ldyBfKCJfdHJhbnNmb3JtKCkiKSl9LFIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLFksQil7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53cml0ZWNiPUIsVy53cml0ZWNodW5rPUws''@;'; put 'put ''Vy53cml0ZWVuY29kaW5nPVksIVcudHJhbnNmb3JtaW5nKXt2YXIgWj10aGlzLl9yZWFkYWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFoubmVlZFJlYWRhYmxlfHxaLmxlbmd0aDxaLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFouaGlnaFdhdGVyTWFyayl9fSxSLnByb3RvdHlwZS5f''@;'; put 'put ''cmVhZD1mdW5jdGlvbihMKXt2YXIgWT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09WS53cml0ZWNodW5rfHxZLnRyYW5zZm9ybWluZz9ZLm5lZWRUcmFuc2Zvcm09ITA6KFkudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShZLndyaXRlY2h1bmssWS53cml0ZWVuY29kaW5nLFku''@;'; put 'put ''YWZ0ZXJUcmFuc2Zvcm0pKX0sUi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxZKXtGLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihCKXtZKEIpfSl9fSwxNTQ5MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKG90KXt2YXIgTWU9dGhpczt0''@;'; put 'put ''aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gUWUob3QsTWUsdmUpe3ZhciBYZT1vdC5lbnRyeTtmb3Iob3QuZW50cnk9bnVsbDtYZTspe3ZhciBCZT1YZS5jYWxsYmFjaztNZS5wZW5kaW5nY2ItLSxCZSh2ZSksWGU9WGUubmV4''@;'; put 'put ''dH1NZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1vdH0oTWUsb3QpfX12YXIgcDtjZS5leHBvcnRzPXplLHplLldyaXRhYmxlU3RhdGU9VGU7dmFyIFNlLE49e2RlcHJlY2F0ZTpiKDMzOTgpfSx3PWIoMTI2MDEpLEY9Yig4MzgzOCkuQnVmZmVyLEg9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2Jh''@;'; put 'put ''bDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxQPWIoODgxNTIpLFk9YigyMjgyNykuZ2V0SGlnaFdhdGVyTWFyayxCPWIoMzA0NjQpLkYsVz1CLkVSUl9JTlZBTElEX0FSR19UWVBFLFo9Qi5FUlJfTUVU''@;'; put 'put ''SE9EX05PVF9JTVBMRU1FTlRFRCxxPUIuRVJSX01VTFRJUExFX0NBTExCQUNLLFE9Qi5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFg9Qi5FUlJfU1RSRUFNX0RFU1RST1lFRCx0ZT1CLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMscmU9Qi5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxvZT1CLkVS''@;'; put 'put ''Ul9VTktOT1dOX0VOQ09ESU5HLGdlPVAuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gVGUob3QsTWUsdmUpe3A9cHx8YigxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiB2ZSYmKHZlPU1lIGluc3RhbmNlb2YgcCksdGhpcy5vYmplY3RNb2RlPSEhKG90PW90fHx7fSkub2Jq''@;'; put 'put ''ZWN0TW9kZSx2ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhb3Qud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WSh0aGlzLG90LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHZlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSEx''@;'; put 'put ''LHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PW90LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPW90LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oQmUpeyFmdW5jdGlvbiBVKG90LE1lKXt2YXIgdmU9b3QuX3dyaXRhYmxlU3RhdGUsWGU9dmUuc3luYyxCZT12ZS53cml0''@;'; put 'put ''ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCZSl0aHJvdyBuZXcgcTtpZihmdW5jdGlvbiBWKG90KXtvdC53cml0aW5nPSExLG90LndyaXRlY2I9bnVsbCxvdC5sZW5ndGgtPW90LndyaXRlbGVuLG90LndyaXRlbGVuPTB9KHZlKSxNZSkhZnVuY3Rpb24gVChvdCxNZSx2ZSxYZSxCZSl7LS1N''@;'; put 'put ''ZS5wZW5kaW5nY2IsdmU/KHByb2Nlc3MubmV4dFRpY2soQmUsWGUpLHByb2Nlc3MubmV4dFRpY2sod2Usb3QsTWUpLG90Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxnZShvdCxYZSkpOihCZShYZSksb3QuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGdlKG90LFhlKSx3''@;'; put 'put ''ZShvdCxNZSkpfShvdCx2ZSxYZSxNZSxCZSk7ZWxzZXt2YXIgQWU9YWUodmUpfHxvdC5kZXN0cm95ZWQ7IUFlJiYhdmUuY29ya2VkJiYhdmUuYnVmZmVyUHJvY2Vzc2luZyYmdmUuYnVmZmVyZWRSZXF1ZXN0JiZBKG90LHZlKSxYZT9wcm9jZXNzLm5leHRUaWNrKEUsb3QsdmUsQWUsQmUpOkUo''@;'; put 'put ''b3QsdmUsQWUsQmUpfX0oTWUsQmUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0''@;'; put 'put ''ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1vdC5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIW90LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgXyh0aGlzKX1mdW5jdGlvbiB6ZShvdCl7dmFyIE1lPXRoaXMg''@;'; put 'put ''aW5zdGFuY2VvZihwPXB8fGIoMTAzMCkpO2lmKCFNZSYmIVNlLmNhbGwoemUsdGhpcykpcmV0dXJuIG5ldyB6ZShvdCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgVGUob3QsdGhpcyxNZSksdGhpcy53cml0YWJsZT0hMCxvdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvdC53cml0ZSYmKHRoaXMu''@;'; put 'put ''X3dyaXRlPW90LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2Ygb3Qud3JpdGV2JiYodGhpcy5fd3JpdGV2PW90LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIG90LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PW90LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBvdC5maW5hbCYmKHRoaXMu''@;'; put 'put ''X2ZpbmFsPW90LmZpbmFsKSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIEMob3QsTWUsdmUsWGUsQmUsQWUsRmUpe01lLndyaXRlbGVuPVhlLE1lLndyaXRlY2I9RmUsTWUud3JpdGluZz0hMCxNZS5zeW5jPSEwLE1lLmRlc3Ryb3llZD9NZS5vbndyaXRlKG5ldyBYKCJ3cml0ZSIpKTp2ZT9vdC5f''@;'; put 'put ''d3JpdGV2KEJlLE1lLm9ud3JpdGUpOm90Ll93cml0ZShCZSxBZSxNZS5vbndyaXRlKSxNZS5zeW5jPSExfWZ1bmN0aW9uIEUob3QsTWUsdmUsWGUpe3ZlfHxmdW5jdGlvbiBtKG90LE1lKXswPT09TWUubGVuZ3RoJiZNZS5uZWVkRHJhaW4mJihNZS5uZWVkRHJhaW49ITEsb3QuZW1pdCgiZHJh''@;'; put 'put ''aW4iKSl9KG90LE1lKSxNZS5wZW5kaW5nY2ItLSxYZSgpLHdlKG90LE1lKX1mdW5jdGlvbiBBKG90LE1lKXtNZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB2ZT1NZS5idWZmZXJlZFJlcXVlc3Q7aWYob3QuX3dyaXRldiYmdmUmJnZlLm5leHQpe3ZhciBCZT1uZXcgQXJyYXkoTWUuYnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0Q291bnQpLEFlPU1lLmNvcmtlZFJlcXVlc3RzRnJlZTtBZS5lbnRyeT12ZTtmb3IodmFyIEZlPTAsUmU9ITA7dmU7KUJlW0ZlXT12ZSx2ZS5pc0J1Znx8KFJlPSExKSx2ZT12ZS5uZXh0LEZlKz0xO0JlLmFsbEJ1ZmZlcnM9UmUsQyhvdCxNZSwhMCxNZS5sZW5ndGgsQmUsIiIs''@;'; put 'put ''QWUuZmluaXNoKSxNZS5wZW5kaW5nY2IrKyxNZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsQWUubmV4dD8oTWUuY29ya2VkUmVxdWVzdHNGcmVlPUFlLm5leHQsQWUubmV4dD1udWxsKTpNZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8oTWUpLE1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9''@;'; put 'put ''ZWxzZXtmb3IoO3ZlOyl7dmFyIEllPXZlLmNodW5rO2lmKEMob3QsTWUsITEsTWUub2JqZWN0TW9kZT8xOkllLmxlbmd0aCxJZSx2ZS5lbmNvZGluZyx2ZS5jYWxsYmFjayksdmU9dmUubmV4dCxNZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLE1lLndyaXRpbmcpYnJlYWt9bnVsbD09PXZlJiYo''@;'; put 'put ''TWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1NZS5idWZmZXJlZFJlcXVlc3Q9dmUsTWUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBhZShvdCl7cmV0dXJuIG90LmVuZGluZyYmMD09PW90Lmxlbmd0aCYmbnVsbD09PW90LmJ1ZmZlcmVkUmVxdWVzdCYmIW90LmZpbmlzaGVkJiYh''@;'; put 'put ''b3Qud3JpdGluZ31mdW5jdGlvbiBuZShvdCxNZSl7b3QuX2ZpbmFsKGZ1bmN0aW9uKHZlKXtNZS5wZW5kaW5nY2ItLSx2ZSYmZ2Uob3QsdmUpLE1lLnByZWZpbmlzaGVkPSEwLG90LmVtaXQoInByZWZpbmlzaCIpLHdlKG90LE1lKX0pfWZ1bmN0aW9uIHdlKG90LE1lKXt2YXIgdmU9YWUoTWUp''@;'; put 'put ''O2lmKHZlJiYoZnVuY3Rpb24gbGUob3QsTWUpeyFNZS5wcmVmaW5pc2hlZCYmIU1lLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIG90Ll9maW5hbHx8TWUuZGVzdHJveWVkPyhNZS5wcmVmaW5pc2hlZD0hMCxvdC5lbWl0KCJwcmVmaW5pc2giKSk6KE1lLnBlbmRpbmdjYisrLE1l''@;'; put 'put ''LmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2sobmUsb3QsTWUpKSl9KG90LE1lKSwwPT09TWUucGVuZGluZ2NiJiYoTWUuZmluaXNoZWQ9ITAsb3QuZW1pdCgiZmluaXNoIiksTWUuYXV0b0Rlc3Ryb3kpKSl7dmFyIFhlPW90Ll9yZWFkYWJsZVN0YXRlOyghWGV8fFhlLmF1dG9EZXN0''@;'; put 'put ''cm95JiZYZS5lbmRFbWl0dGVkKSYmb3QuZGVzdHJveSgpfXJldHVybiB2ZX1iKDcxOTkzKSh6ZSx3KSxUZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBNZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx2ZT1bXTtNZTspdmUucHVzaChNZSksTWU9TWUubmV4dDtyZXR1cm4g''@;'; put 'put ''dmV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShUZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpOLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhTZT1GdW5j''@;'; put 'put ''dGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihNZSl7cmV0dXJuISFTZS5jYWxsKHRoaXMsTWUpfHx0aGlzPT09emUmJk1lJiZNZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5j''@;'; put 'put ''ZW9mIFRlfX0pKTpTZT1mdW5jdGlvbihNZSl7cmV0dXJuIE1lIGluc3RhbmNlb2YgdGhpc30semUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtnZSh0aGlzLG5ldyBRKX0semUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG90LE1lLHZlKXt2YXIgWGU9dGhpcy5fd3JpdGFibGVTdGF0ZSxC''@;'; put 'put ''ZT0hMSxBZT0hWGUub2JqZWN0TW9kZSYmZnVuY3Rpb24gaihvdCl7cmV0dXJuIEYuaXNCdWZmZXIob3QpfHxvdCBpbnN0YW5jZW9mIEh9KG90KTtyZXR1cm4gQWUmJiFGLmlzQnVmZmVyKG90KSYmKG90PWZ1bmN0aW9uIFIob3Qpe3JldHVybiBGLmZyb20ob3QpfShvdCkpLCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpLEFlP01lPSJidWZmZXIiOk1lfHwoTWU9WGUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgdmUmJih2ZT1fZSksWGUuZW5kaW5nP2Z1bmN0aW9uIHoob3QsTWUpe3ZhciB2ZT1uZXcgcmU7Z2Uob3QsdmUpLHByb2Nlc3MubmV4''@;'; put 'put ''dFRpY2soTWUsdmUpfSh0aGlzLHZlKTooQWV8fGZ1bmN0aW9uIGcob3QsTWUsdmUsWGUpe3ZhciBCZTtyZXR1cm4gbnVsbD09PXZlP0JlPW5ldyB0ZToic3RyaW5nIiE9dHlwZW9mIHZlJiYhTWUub2JqZWN0TW9kZSYmKEJlPW5ldyBXKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSx2ZSkp''@;'; put 'put ''LCFCZXx8KGdlKG90LEJlKSxwcm9jZXNzLm5leHRUaWNrKFhlLEJlKSwhMSl9KHRoaXMsWGUsb3QsdmUpKSYmKFhlLnBlbmRpbmdjYisrLEJlPWZ1bmN0aW9uIHgob3QsTWUsdmUsWGUsQmUsQWUpe2lmKCF2ZSl7dmFyIEZlPWZ1bmN0aW9uIHkob3QsTWUsdmUpe3JldHVybiFvdC5vYmplY3RN''@;'; put 'put ''b2RlJiYhMSE9PW90LmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgTWUmJihNZT1GLmZyb20oTWUsdmUpKSxNZX0oTWUsWGUsQmUpO1hlIT09RmUmJih2ZT0hMCxCZT0iYnVmZmVyIixYZT1GZSl9dmFyIFJlPU1lLm9iamVjdE1vZGU/MTpYZS5sZW5ndGg7TWUubGVuZ3RoKz1SZTt2''@;'; put 'put ''YXIgSWU9TWUubGVuZ3RoPE1lLmhpZ2hXYXRlck1hcms7aWYoSWV8fChNZS5uZWVkRHJhaW49ITApLE1lLndyaXRpbmd8fE1lLmNvcmtlZCl7dmFyIEhlPU1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7TWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6WGUsZW5jb2Rpbmc6QmUsaXNCdWY6dmUs''@;'; put 'put ''Y2FsbGJhY2s6QWUsbmV4dDpudWxsfSxIZT9IZS5uZXh0PU1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6TWUuYnVmZmVyZWRSZXF1ZXN0PU1lLmxhc3RCdWZmZXJlZFJlcXVlc3QsTWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBDKG90LE1lLCExLFJlLFhlLEJlLEFlKTtyZXR1cm4gSWV9''@;'; put 'put ''KHRoaXMsWGUsQWUsb3QsTWUsdmUpKSxCZX0semUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSx6ZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG90PXRoaXMuX3dyaXRhYmxlU3RhdGU7b3QuY29ya2VkJiYob3QuY29ya2Vk''@;'; put 'put ''LS0sIW90LndyaXRpbmcmJiFvdC5jb3JrZWQmJiFvdC5idWZmZXJQcm9jZXNzaW5nJiZvdC5idWZmZXJlZFJlcXVlc3QmJkEodGhpcyxvdCkpfSx6ZS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKE1lKXtpZigic3RyaW5nIj09dHlwZW9mIE1lJiYoTWU9TWUudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoTWUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgb2UoTWUpO3JldHVybiB0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1NZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLHplLnByb3RvdHlw''@;'; put 'put ''ZS5fd3JpdGU9ZnVuY3Rpb24ob3QsTWUsdmUpe3ZlKG5ldyBaKCJfd3JpdGUoKSIpKX0semUucHJvdG90eXBlLl93cml0ZXY9bnVsbCx6ZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKG90LE1lLHZlKXt2YXIgWGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''b3Q/KHZlPW90LG90PW51bGwsTWU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiYodmU9TWUsTWU9bnVsbCksbnVsbCE9b3QmJnRoaXMud3JpdGUob3QsTWUpLFhlLmNvcmtlZCYmKFhlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLFhlLmVuZGluZ3x8ZnVuY3Rpb24gVWUob3QsTWUsdmUp''@;'; put 'put ''e01lLmVuZGluZz0hMCx3ZShvdCxNZSksdmUmJihNZS5maW5pc2hlZD9wcm9jZXNzLm5leHRUaWNrKHZlKTpvdC5vbmNlKCJmaW5pc2giLHZlKSksTWUuZW5kZWQ9ITAsb3Qud3JpdGFibGU9ITF9KHRoaXMsWGUsdmUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUs''@;'; put 'put ''IndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihNZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPU1lKX19KSx6ZS5wcm90b3R5cGUuZGVzdHJveT1QLmRl''@;'; put 'put ''c3Ryb3ksemUucHJvdG90eXBlLl91bmRlc3Ryb3k9UC51bmRlc3Ryb3ksemUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKG90LE1lKXtNZShvdCl9fSwxMjY4MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtmdW5jdGlvbiBfKHJlLG9lLGdlKXtyZXR1cm4gb2U9ZnVuY3Rpb24g''@;'; put 'put ''cChyZSl7dmFyIG9lPWZ1bmN0aW9uIE4ocmUsb2Upe2lmKCJvYmplY3QiIT10eXBlb2YgcmV8fG51bGw9PT1yZSlyZXR1cm4gcmU7dmFyIGdlPXJlW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Z2Upe3ZhciBfZT1nZS5jYWxsKHJlLG9lfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgX2UpcmV0dXJuIF9lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09b2U/U3RyaW5nOk51bWJlcikocmUpfShyZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBvZT9vZTpTdHJpbmcob2UpfShvZSksb2UgaW4gcmU/T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLG9lLHt2YWx1ZTpnZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJlW29lXT1nZSxyZX12YXIgdz1iKDU3ODU0KSxGPVN5bWJvbCgibGFzdFJlc29sdmUi''@;'; put 'put ''KSxIPVN5bWJvbCgibGFzdFJlamVjdCIpLFI9U3ltYm9sKCJlcnJvciIpLGo9U3ltYm9sKCJlbmRlZCIpLFA9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEw9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksWT1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIEIocmUsb2Upe3JldHVybnt2YWx1ZTpyZSxk''@;'; put 'put ''b25lOm9lfX1mdW5jdGlvbiBXKHJlKXt2YXIgb2U9cmVbRl07aWYobnVsbCE9PW9lKXt2YXIgZ2U9cmVbWV0ucmVhZCgpO251bGwhPT1nZSYmKHJlW1BdPW51bGwscmVbRl09bnVsbCxyZVtIXT1udWxsLG9lKEIoZ2UsITEpKSl9fWZ1bmN0aW9uIFoocmUpe3Byb2Nlc3MubmV4dFRpY2soVyxy''@;'; put 'put ''ZSl9dmFyIFE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksWD1PYmplY3Quc2V0UHJvdG90eXBlT2YoKF8oRD17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW1ldfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIG9lPXRoaXMsZ2U9dGhpc1tSXTtpZihudWxsIT09Z2UpcmV0dXJuIFBy''@;'; put 'put ''b21pc2UucmVqZWN0KGdlKTtpZih0aGlzW2pdKXJldHVybiBQcm9taXNlLnJlc29sdmUoQih2b2lkIDAsITApKTtpZih0aGlzW1ldLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oemUseil7cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe29lW1JdP3oob2VbUl0pOnpl''@;'; put 'put ''KEIodm9pZCAwLCEwKSl9KX0pO3ZhciBUZSxfZT10aGlzW1BdO2lmKF9lKVRlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIHEocmUsb2Upe3JldHVybiBmdW5jdGlvbihnZSxfZSl7cmUudGhlbihmdW5jdGlvbigpe29lW2pdP2dlKEIodm9pZCAwLCEwKSk6b2VbTF0oZ2UsX2UpfSxfZSl9fShfZSx0''@;'; put 'put ''aGlzKSk7ZWxzZXt2YXIgU2U9dGhpc1tZXS5yZWFkKCk7aWYobnVsbCE9PVNlKXJldHVybiBQcm9taXNlLnJlc29sdmUoQihTZSwhMSkpO1RlPW5ldyBQcm9taXNlKHRoaXNbTF0pfXJldHVybiB0aGlzW1BdPVRlLFRlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpc30pLF8oRCwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBvZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnZSxfZSl7b2VbWV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFRlKXtUZT9fZShUZSk6Z2UoQih2b2lkIDAsITApKX0pfSl9KSxEKSxRKTtjZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKG9lKXt2YXIgZ2UsX2U9T2JqZWN0LmNyZWF0ZShYLChfKGdlPXt9LFkse3ZhbHVlOm9lLHdyaXRhYmxlOiEwfSksXyhnZSxGLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksXyhnZSxILHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksXyhnZSxSLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEw''@;'; put 'put ''fSksXyhnZSxqLHt2YWx1ZTpvZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksXyhnZSxMLHt2YWx1ZTpmdW5jdGlvbihTZSx6ZSl7dmFyIHo9X2VbWV0ucmVhZCgpO3o/KF9lW1BdPW51bGwsX2VbRl09bnVsbCxfZVtIXT1udWxsLFNlKEIoeiwhMSkpKTooX2VbRl09''@;'; put 'put ''U2UsX2VbSF09emUpfSx3cml0YWJsZTohMH0pLGdlKSk7cmV0dXJuIF9lW1BdPW51bGwsdyhvZSxmdW5jdGlvbihUZSl7aWYoVGUmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1UZS5jb2RlKXt2YXIgU2U9X2VbSF07cmV0dXJuIG51bGwhPT1TZSYmKF9lW1BdPW51bGwsX2VbRl09''@;'; put 'put ''bnVsbCxfZVtIXT1udWxsLFNlKFRlKSksdm9pZChfZVtSXT1UZSl9dmFyIHplPV9lW0ZdO251bGwhPT16ZSYmKF9lW1BdPW51bGwsX2VbRl09bnVsbCxfZVtIXT1udWxsLHplKEIodm9pZCAwLCEwKSkpLF9lW2pdPSEwfSksb2Uub24oInJlYWRhYmxlIixaLmJpbmQobnVsbCxfZSkpLF9lfX0s''@;'; put 'put ''NzUyMjU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRChaLHEpe3ZhciBRPU9iamVjdC5rZXlzKFopO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBYPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWik7cSYmKFg9WC5maWx0ZXIoZnVuY3Rpb24odGUp''@;'; put 'put ''e3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFosdGUpLmVudW1lcmFibGV9KSksUS5wdXNoLmFwcGx5KFEsWCl9cmV0dXJuIFF9ZnVuY3Rpb24gXyhaKXtmb3IodmFyIHE9MTtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgUT1udWxsIT1hcmd1bWVudHNbcV0/YXJn''@;'; put 'put ''dW1lbnRzW3FdOnt9O3ElMj9EKE9iamVjdChRKSwhMCkuZm9yRWFjaChmdW5jdGlvbihYKXtwKFosWCxRW1hdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFosT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoUSkpOkQo''@;'; put 'put ''T2JqZWN0KFEpKS5mb3JFYWNoKGZ1bmN0aW9uKFgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLFgsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihRLFgpKX0pfXJldHVybiBafWZ1bmN0aW9uIHAoWixxLFEpe3JldHVybihxPUgocSkpaW4gWj9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WixxLHt2YWx1ZTpRLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WltxXT1RLFp9ZnVuY3Rpb24gdyhaLHEpe2Zvcih2YXIgUT0wO1E8cS5sZW5ndGg7USsrKXt2YXIgWD1xW1FdO1guZW51bWVyYWJsZT1YLmVudW1lcmFibGV8fCExLFguY29uZmlndXJhYmxl''@;'; put 'put ''PSEwLCJ2YWx1ZSJpbiBYJiYoWC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFosSChYLmtleSksWCl9fWZ1bmN0aW9uIEgoWil7dmFyIHE9ZnVuY3Rpb24gUihaLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgWnx8bnVsbD09PVopcmV0dXJuIFo7dmFyIFE9WltTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PVEpe3ZhciBYPVEuY2FsbChaLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBYKXJldHVybiBYO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09cT9TdHJpbmc6TnVtYmVyKShaKX0oWiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBQPWIoODM4MzgpLkJ1ZmZlcixZPWIoNjM3NzkpLmluc3BlY3QsQj1ZJiZZLmN1c3RvbXx8Imluc3BlY3QiO2Z1bmN0aW9uIFcoWixxLFEpe1AucHJv''@;'; put 'put ''dG90eXBlLmNvcHkuY2FsbChaLHEsUSl9Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFooKXsoZnVuY3Rpb24gTihaLHEpe2lmKCEoWiBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxaKSx0''@;'; put 'put ''aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBGKFoscSxRKXtxJiZ3KFoucHJvdG90eXBlLHEpLFEmJncoWixRKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWiwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oWixbe2tleToicHVzaCIs''@;'; put 'put ''dmFsdWU6ZnVuY3Rpb24oUSl7dmFyIFg9e2RhdGE6USxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9WDp0aGlzLmhlYWQ9WCx0aGlzLnRhaWw9WCwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oUSl7dmFyIFg9e2RhdGE6USxuZXh0''@;'; put 'put ''OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVgpLHRoaXMuaGVhZD1YLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBRPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRo''@;'; put 'put ''aXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsUX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKFEpe2lmKDA9''@;'; put 'put ''PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFg9dGhpcy5oZWFkLHRlPSIiK1guZGF0YTtYPVgubmV4dDspdGUrPVErWC5kYXRhO3JldHVybiB0ZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oUSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBQLmFsbG9jKDApO2Zvcih2''@;'; put 'put ''YXIgWD1QLmFsbG9jVW5zYWZlKFE+Pj4wKSx0ZT10aGlzLmhlYWQscmU9MDt0ZTspVyh0ZS5kYXRhLFgscmUpLHJlKz10ZS5kYXRhLmxlbmd0aCx0ZT10ZS5uZXh0O3JldHVybiBYfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24oUSxYKXt2YXIgdGU7cmV0dXJuIFE8dGhpcy5oZWFk''@;'; put 'put ''LmRhdGEubGVuZ3RoPyh0ZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLFEpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKFEpKTp0ZT1RPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpYP3RoaXMuX2dldFN0cmluZyhRKTp0aGlzLl9nZXRCdWZmZXIoUSks''@;'; put 'put ''dGV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgWD10aGlzLmhlYWQsdGU9MSxyZT1YLmRhdGE7Zm9yKFEtPXJlLmxlbmd0aDtYPVgubmV4dDspe3ZhciBvZT1YLmRh''@;'; put 'put ''dGEsZ2U9UT5vZS5sZW5ndGg/b2UubGVuZ3RoOlE7aWYocmUrPWdlPT09b2UubGVuZ3RoP29lOm9lLnNsaWNlKDAsUSksMD09KFEtPWdlKSl7Z2U9PT1vZS5sZW5ndGg/KCsrdGUsdGhpcy5oZWFkPVgubmV4dD9YLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9WCxYLmRhdGE9b2Uu''@;'; put 'put ''c2xpY2UoZ2UpKTticmVha30rK3RlfXJldHVybiB0aGlzLmxlbmd0aC09dGUscmV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgWD1QLmFsbG9jVW5zYWZlKFEpLHRlPXRoaXMuaGVhZCxyZT0xO2Zvcih0ZS5kYXRhLmNvcHkoWCksUS09dGUuZGF0YS5sZW5ndGg7''@;'; put 'put ''dGU9dGUubmV4dDspe3ZhciBvZT10ZS5kYXRhLGdlPVE+b2UubGVuZ3RoP29lLmxlbmd0aDpRO2lmKG9lLmNvcHkoWCxYLmxlbmd0aC1RLDAsZ2UpLDA9PShRLT1nZSkpe2dlPT09b2UubGVuZ3RoPygrK3JlLHRoaXMuaGVhZD10ZS5uZXh0P3RlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlz''@;'; put 'put ''LmhlYWQ9dGUsdGUuZGF0YT1vZS5zbGljZShnZSkpO2JyZWFrfSsrcmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1yZSxYfX0se2tleTpCLHZhbHVlOmZ1bmN0aW9uKFEsWCl7cmV0dXJuIFkodGhpcyxfKF8oe30sWCkse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSksWn0oKX0sODgx''@;'; put 'put ''NTI6Y2U9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYih3LEYpe3AodyxGKSxEKHcpfWZ1bmN0aW9uIEQodyl7dy5fd3JpdGFibGVTdGF0ZSYmIXcuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx3Ll9yZWFkYWJsZVN0YXRlJiYhdy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuZW1pdCgi''@;'; put 'put ''Y2xvc2UiKX1mdW5jdGlvbiBwKHcsRil7dy5lbWl0KCJlcnJvciIsRil9Y2UuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBKKHcsRil7dmFyIEg9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhGP0Yodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHAsdGhpcyx3KSk6''@;'; put 'put ''cHJvY2Vzcy5uZXh0VGljayhwLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxu''@;'; put 'put ''dWxsLGZ1bmN0aW9uKFApeyFGJiZQP0guX3dyaXRhYmxlU3RhdGU/SC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhELEgpOihILl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGIsSCxQKSk6cHJvY2Vzcy5uZXh0VGlj''@;'; put 'put ''ayhiLEgsUCk6Rj8ocHJvY2Vzcy5uZXh0VGljayhELEgpLEYoUCkpOnByb2Nlc3MubmV4dFRpY2soRCxIKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gXygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEx''@;'; put 'put ''KX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gTih3LEYpe3ZhciBIPXcuX3JlYWRhYmxlU3RhdGUsUj13Ll93cml0YWJsZVN0YXRlO0gmJkguYXV0b0Rlc3Ryb3l8fFImJlIuYXV0b0Rlc3Ryb3k/dy5kZXN0cm95KEYpOncuZW1pdCgiZXJyb3IiLEYpfX19LDU3ODU0OihjZSxKLGIpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBEPWIoMzA0NjQpLkYuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcCgpe31jZS5leHBvcnRzPWZ1bmN0aW9uIHcoRixILFIpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBIKXJldHVybiB3KEYsbnVsbCxIKTtIfHwoSD17fSksUj1mdW5jdGlvbiBfKEYp''@;'; put 'put ''e3ZhciBIPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFIKXtIPSEwO2Zvcih2YXIgUj1hcmd1bWVudHMubGVuZ3RoLGo9bmV3IEFycmF5KFIpLFA9MDtQPFI7UCsrKWpbUF09YXJndW1lbnRzW1BdO0YuYXBwbHkodGhpcyxqKX19fShSfHxwKTt2YXIgaj1ILnJlYWRhYmxlfHwhMSE9PUgucmVh''@;'; put 'put ''ZGFibGUmJkYucmVhZGFibGUsUD1ILndyaXRhYmxlfHwhMSE9PUgud3JpdGFibGUmJkYud3JpdGFibGUsTD1mdW5jdGlvbigpe0Yud3JpdGFibGV8fEIoKX0sWT1GLl93cml0YWJsZVN0YXRlJiZGLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLEI9ZnVuY3Rpb24oKXtQPSExLFk9ITAsanx8Ui5j''@;'; put 'put ''YWxsKEYpfSxXPUYuX3JlYWRhYmxlU3RhdGUmJkYuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxaPWZ1bmN0aW9uKCl7aj0hMSxXPSEwLFB8fFIuY2FsbChGKX0scT1mdW5jdGlvbihyZSl7Ui5jYWxsKEYscmUpfSxRPWZ1bmN0aW9uKCl7dmFyIHJlO3JldHVybiBqJiYhVz8oKCFGLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlfHwhRi5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihyZT1uZXcgRCksUi5jYWxsKEYscmUpKTpQJiYhWT8oKCFGLl93cml0YWJsZVN0YXRlfHwhRi5fd3JpdGFibGVTdGF0ZS5lbmRlZCkmJihyZT1uZXcgRCksUi5jYWxsKEYscmUpKTp2b2lkIDB9LFg9ZnVuY3Rpb24oKXtGLnJl''@;'; put 'put ''cS5vbigiZmluaXNoIixCKX07cmV0dXJuIGZ1bmN0aW9uIE4oRil7cmV0dXJuIEYuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgRi5hYm9ydH0oRik/KEYub24oImNvbXBsZXRlIixCKSxGLm9uKCJhYm9ydCIsUSksRi5yZXE/WCgpOkYub24oInJlcXVlc3QiLFgpKTpQJiYhRi5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZSYmKEYub24oImVuZCIsTCksRi5vbigiY2xvc2UiLEwpKSxGLm9uKCJlbmQiLFopLEYub24oImZpbmlzaCIsQiksITEhPT1ILmVycm9yJiZGLm9uKCJlcnJvciIscSksRi5vbigiY2xvc2UiLFEpLGZ1bmN0aW9uKCl7Ri5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLEIpLEYu''@;'; put 'put ''cmVtb3ZlTGlzdGVuZXIoImFib3J0IixRKSxGLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixYKSxGLnJlcSYmRi5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsQiksRi5yZW1vdmVMaXN0ZW5lcigiZW5kIixMKSxGLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksRi5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cigiZmluaXNoIixCKSxGLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFopLEYucmVtb3ZlTGlzdGVuZXIoImVycm9yIixxKSxGLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsUSl9fX0sNDc3NjU6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlz''@;'; put 'put ''IG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDY4NDY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQscD1iKDMwNDY0KS5GLE49cC5FUlJfTUlTU0lOR19BUkdTLHc9cC5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBGKEIpe2lmKEIpdGhyb3cgQn1mdW5jdGlvbiBq''@;'; put 'put ''KEIpe0IoKX1mdW5jdGlvbiBQKEIsVyl7cmV0dXJuIEIucGlwZShXKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFkoKXtmb3IodmFyIEI9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShCKSxaPTA7WjxCO1orKylXW1pdPWFyZ3VtZW50c1taXTt2YXIgcT1mdW5jdGlvbiBMKEIpe3JldHVybiBC''@;'; put 'put ''Lmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIEJbQi5sZW5ndGgtMV0/Qi5wb3AoKTpGfShXKTtpZihBcnJheS5pc0FycmF5KFdbMF0pJiYoVz1XWzBdKSxXLmxlbmd0aDwyKXRocm93IG5ldyBOKCJzdHJlYW1zIik7dmFyIFEsWD1XLm1hcChmdW5jdGlvbih0ZSxyZSl7dmFyIG9lPXJlPFcu''@;'; put 'put ''bGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uIFIoQixXLFoscSl7cT1mdW5jdGlvbiBfKEIpe3ZhciBXPSExO3JldHVybiBmdW5jdGlvbigpe1d8fChXPSEwLEIuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0ocSk7dmFyIFE9ITE7Qi5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7UT0hMH0pLHZvaWQg''@;'; put 'put ''MD09PUQmJihEPWIoNTc4NTQpKSxEKEIse3JlYWRhYmxlOlcsd3JpdGFibGU6Wn0sZnVuY3Rpb24odGUpe2lmKHRlKXJldHVybiBxKHRlKTtRPSEwLHEoKX0pO3ZhciBYPSExO3JldHVybiBmdW5jdGlvbih0ZSl7aWYoIVEmJiFYKXtpZihYPSEwLGZ1bmN0aW9uIEgoQil7cmV0dXJuIEIuc2V0''@;'; put 'put ''SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5hYm9ydH0oQikpcmV0dXJuIEIuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95KXJldHVybiBCLmRlc3Ryb3koKTtxKHRlfHxuZXcgdygicGlwZSIpKX19fSh0ZSxvZSxyZT4wLGZ1bmN0aW9uKF9lKXtRfHwoUT1fZSks''@;'; put 'put ''X2UmJlguZm9yRWFjaChqKSwhb2UmJihYLmZvckVhY2goaikscShRKSl9KX0pO3JldHVybiBXLnJlZHVjZShQKX19LDIyODI3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzA0NjQpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2NlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6''@;'; put 'put ''ZnVuY3Rpb24gcChOLHcsRixIKXt2YXIgUj1mdW5jdGlvbiBfKE4sdyxGKXtyZXR1cm4gbnVsbCE9Ti5oaWdoV2F0ZXJNYXJrP04uaGlnaFdhdGVyTWFyazp3P05bRl06bnVsbH0odyxILEYpO2lmKG51bGwhPVIpe2lmKCFpc0Zpbml0ZShSKXx8TWF0aC5mbG9vcihSKSE9PVJ8fFI8MCl0aHJv''@;'; put 'put ''dyBuZXcgRChIP0Y6ImhpZ2hXYXRlck1hcmsiLFIpO3JldHVybiBNYXRoLmZsb29yKFIpfXJldHVybiBOLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMTI2MDE6KGNlLEosYik9PntjZS5leHBvcnRzPWIoNDQzNTYpLkV2ZW50RW1pdHRlcn0sNzg0NTQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEQ9Yig1NDI3MikuQnVmZmVyLF89RC5pc0VuY29kaW5nfHxmdW5jdGlvbihYKXtzd2l0Y2goKFg9IiIrWCkmJlgudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIi''@;'; put 'put ''OmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KFgpe3ZhciB0ZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBOKFgpe3ZhciB0ZT1mdW5jdGlvbiBwKFgpe2lmKCFYKXJl''@;'; put 'put ''dHVybiJ1dGY4Ijtmb3IodmFyIHRlOzspc3dpdGNoKFgpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5Ijpy''@;'; put 'put ''ZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBYO2RlZmF1bHQ6aWYodGUpcmV0dXJuO1g9KCIiK1gpLnRvTG93ZXJDYXNlKCksdGU9ITB9fShYKTtpZigic3RyaW5nIiE9dHlwZW9mIHRlJiYoRC5pc0VuY29kaW5nPT09X3x8IV8oWCkpKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitYKTtyZXR1cm4gdGV8fFh9KFgpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PVksdGhpcy5lbmQ9Qix0ZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1qLHRlPTQ7YnJlYWs7Y2FzZSJiYXNl''@;'; put 'put ''NjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVosdGU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVuZD1RKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUQuYWxsb2NVbnNhZmUodGUpfWZ1bmN0aW9uIEYoWCl7cmV0''@;'; put 'put ''dXJuIFg8PTEyNz8wOlg+PjU9PTY/MjpYPj40PT0xND8zOlg+PjM9PTMwPzQ6WD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBqKFgpe3ZhciB0ZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHJlPWZ1bmN0aW9uIFIoWCx0ZSxyZSl7aWYoMTI4IT0oMTkyJnRlWzBdKSlyZXR1cm4gWC5sYXN0''@;'; put 'put ''TmVlZD0wLCJcdWZmZmQiO2lmKFgubGFzdE5lZWQ+MSYmdGUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZ0ZVsxXSkpcmV0dXJuIFgubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihYLmxhc3ROZWVkPjImJnRlLmxlbmd0aD4yJiYxMjghPSgxOTImdGVbMl0pKXJldHVybiBYLmxhc3ROZWVkPTIsIlx1''@;'; put 'put ''ZmZmZCJ9fSh0aGlzLFgpO3JldHVybiB2b2lkIDAhPT1yZT9yZTp0aGlzLmxhc3ROZWVkPD1YLmxlbmd0aD8oWC5jb3B5KHRoaXMubGFzdENoYXIsdGUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihYLmNv''@;'; put 'put ''cHkodGhpcy5sYXN0Q2hhcix0ZSwwLFgubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPVgubGVuZ3RoKSl9ZnVuY3Rpb24gWShYLHRlKXtpZigoWC5sZW5ndGgtdGUpJTI9PTApe3ZhciByZT1YLnRvU3RyaW5nKCJ1dGYxNmxlIix0ZSk7aWYocmUpe3ZhciBvZT1yZS5jaGFyQ29kZUF0KHJl''@;'; put 'put ''Lmxlbmd0aC0xKTtpZihvZT49NTUyOTYmJm9lPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1YW1gubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09WFtYLmxlbmd0aC0xXSxyZS5zbGljZSgwLC0xKX1yZXR1cm4gcmV9cmV0''@;'; put 'put ''dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09WFtYLmxlbmd0aC0xXSxYLnRvU3RyaW5nKCJ1dGYxNmxlIix0ZSxYLmxlbmd0aC0xKX1mdW5jdGlvbiBCKFgpe3ZhciB0ZT1YJiZYLmxlbmd0aD90aGlzLndyaXRlKFgpOiIiO3JldHVybiB0aGlz''@;'; put 'put ''Lmxhc3ROZWVkP3RlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6dGV9ZnVuY3Rpb24gVyhYLHRlKXt2YXIgcmU9KFgubGVuZ3RoLXRlKSUzO3JldHVybiAwPT09cmU/WC50b1N0cmluZygiYmFzZTY0Iix0ZSk6KHRoaXMu''@;'; put 'put ''bGFzdE5lZWQ9My1yZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1yZT90aGlzLmxhc3RDaGFyWzBdPVhbWC5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09WFtYLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPVhbWC5sZW5ndGgtMV0pLFgudG9TdHJpbmcoImJhc2U2NCIsdGUsWC5sZW5ndGgt''@;'; put 'put ''cmUpKX1mdW5jdGlvbiBaKFgpe3ZhciB0ZT1YJiZYLmxlbmd0aD90aGlzLndyaXRlKFgpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3RlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnRlfWZ1bmN0aW9uIHEoWCl7cmV0dXJuIFgudG9TdHJpbmco''@;'; put 'put ''dGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gUShYKXtyZXR1cm4gWCYmWC5sZW5ndGg/dGhpcy53cml0ZShYKToiIn1KLkk9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihYKXtpZigwPT09WC5sZW5ndGgpcmV0dXJuIiI7dmFyIHRlLHJlO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09''@;'; put 'put ''PSh0ZT10aGlzLmZpbGxMYXN0KFgpKSlyZXR1cm4iIjtyZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIHJlPTA7cmV0dXJuIHJlPFgubGVuZ3RoP3RlP3RlK3RoaXMudGV4dChYLHJlKTp0aGlzLnRleHQoWCxyZSk6dGV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24g''@;'; put 'put ''TChYKXt2YXIgdGU9WCYmWC5sZW5ndGg/dGhpcy53cml0ZShYKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90ZSsiXHVmZmZkIjp0ZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBQKFgsdGUpe3ZhciByZT1mdW5jdGlvbiBIKFgsdGUscmUpe3ZhciBvZT10ZS5sZW5ndGgtMTtpZihvZTxy''@;'; put 'put ''ZSlyZXR1cm4gMDt2YXIgZ2U9Rih0ZVtvZV0pO3JldHVybiBnZT49MD8oZ2U+MCYmKFgubGFzdE5lZWQ9Z2UtMSksZ2UpOi0tb2U8cmV8fC0yPT09Z2U/MDooZ2U9Rih0ZVtvZV0pKT49MD8oZ2U+MCYmKFgubGFzdE5lZWQ9Z2UtMiksZ2UpOi0tb2U8cmV8fC0yPT09Z2U/MDooZ2U9Rih0ZVtv''@;'; put 'put ''ZV0pKT49MD8oZ2U+MCYmKDI9PT1nZT9nZT0wOlgubGFzdE5lZWQ9Z2UtMyksZ2UpOjB9KHRoaXMsWCx0ZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIFgudG9TdHJpbmcoInV0ZjgiLHRlKTt0aGlzLmxhc3RUb3RhbD1yZTt2YXIgb2U9WC5sZW5ndGgtKHJlLXRoaXMubGFzdE5lZWQpO3Jl''@;'; put 'put ''dHVybiBYLmNvcHkodGhpcy5sYXN0Q2hhciwwLG9lKSxYLnRvU3RyaW5nKCJ1dGY4Iix0ZSxvZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKFgpe2lmKHRoaXMubGFzdE5lZWQ8PVgubGVuZ3RoKXJldHVybiBYLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlz''@;'; put 'put ''Lmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO1guY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxYLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09WC5sZW5n''@;'; put 'put ''dGh9fSw1NDI3MjooY2UsSixiKT0+e3ZhciBEPWIoODM4MzgpLF89RC5CdWZmZXI7ZnVuY3Rpb24gcCh3LEYpe2Zvcih2YXIgSCBpbiB3KUZbSF09d1tIXX1mdW5jdGlvbiBOKHcsRixIKXtyZXR1cm4gXyh3LEYsSCl9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5z''@;'; put 'put ''YWZlU2xvdz9jZS5leHBvcnRzPUQ6KHAoRCxKKSxKLkJ1ZmZlcj1OKSxwKF8sTiksTi5mcm9tPWZ1bmN0aW9uKHcsRixIKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LEYsSCl9LE4u''@;'; put 'put ''YWxsb2M9ZnVuY3Rpb24odyxGLEgpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9pZCAwIT09Rj8ic3RyaW5nIj09dHlwZW9mIEg/Ui5maWxsKEYsSCk6Ui5maWxsKEYpOlIu''@;'; put 'put ''ZmlsbCgwKSxSfSxOLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LE4uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10''@;'; put 'put ''eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEQuU2xvd0J1ZmZlcih3KX19LDc4NzU1OihjZSxKLGIpPT57dmFyIEQ9Yig2NDMxOCk7Y2UuZXhwb3J0cz17VGV4dEVuY29kZXI6RC5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjpE''@;'; put 'put ''LlRleHREZWNvZGVyfX0sNjc5NTE6ZnVuY3Rpb24oY2UpeyFmdW5jdGlvbihKKXsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cyYmKGNlLmV4cG9ydHM9SiksSlsiZW5jb2RpbmctaW5kZXhlcyJdPXtiaWc1OltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzM5MiwxOTUwNiwxNzkyMywxNzgzMCwxNzc4NCwxNjAzNTksMTk4MzEsMTc4NDMsMTYyOTkzLDE5NjgyLDE2MzAxMywxNTI1MywxODIzMCwxODI0NCwxOTUyNywxOTUyMCwxNDgxNTksMTQ0OTE5LDE2MDU5NCwxNTkz''@;'; put 'put ''NzEsMTU5OTU0LDE5NTQzLDE3Mjg4MSwxODI1NSwxNzg4MiwxOTU4OSwxNjI5MjQsMTk3MTksMTkxMDgsMTgwODEsMTU4NDk5LDI5MjIxLDE1NDE5NiwxMzc4MjcsMTQ2OTUwLDE0NzI5NywyNjE4OSwyMjI2NyxudWxsLDMyMTQ5LDIyODEzLDE2Njg0MSwxNTg2MCwzODcwOCwxNjI3OTksMjM1''@;'; put 'put ''MTUsMTM4NTkwLDIzMjA0LDEzODYxLDE3MTY5NiwyMzI0OSwyMzQ3OSwyMzgwNCwyNjQ3OCwzNDE5NSwxNzAzMDksMjk3OTMsMjk4NTMsMTQ0NTMsMTM4NTc5LDE0NTA1NCwxNTU2ODEsMTYxMDgsMTUzODIyLDE1MDkzLDMxNDg0LDQwODU1LDE0NzgwOSwxNjYxNTcsMTQzODUwLDEzMzc3MCwx''@;'; put 'put ''NDM5NjYsMTcxNjIsMzM5MjQsNDA4NTQsMzc5MzUsMTg3MzYsMzQzMjMsMjI2NzgsMzg3MzAsMzc0MDAsMzExODQsMzEyODIsMjYyMDgsMjcxNzcsMzQ5NzMsMjk3NzIsMzE2ODUsMjY0OTgsMzEyNzYsMjEwNzEsMzY5MzQsMTM1NDIsMjk2MzYsMTU1MDY1LDI5ODk0LDQwOTAzLDIyNDUxLDE4''@;'; put 'put ''NzM1LDIxNTgwLDE2Njg5LDE0NTAzOCwyMjU1MiwzMTM0NiwxNjI2NjEsMzU3MjcsMTgwOTQsMTU5MzY4LDE2NzY5LDE1NTAzMywzMTY2MiwxNDA0NzYsNDA5MDQsMTQwNDgxLDE0MDQ4OSwxNDA0OTIsNDA5MDUsMzQwNTIsMTQ0ODI3LDE2NTY0LDQwOTA2LDE3NjMzLDE3NTYxNSwyNTI4MSwy''@;'; put 'put ''ODc4Miw0MDkwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDEyNzM2LDEyNzM3LDEyNzM4LDEyNzM5LDEyNzQwLDEzMTM0MCwxMjc0MSwxMzEyODEsMTMxMjc3LDEyNzQyLDEyNzQzLDEzMTI3NSwxMzkyNDAsMTI3NDQsMTMxMjc0LDEyNzQ1LDEyNzQ2LDEyNzQ3LDEyNzQ4LDEzMTM0MiwxMjc0OSwxMjc1MCwyNTYsMTkzLDQ2MSwxOTIsMjc0LDIwMSwy''@;'; put 'put ''ODIsMjAwLDMzMiwyMTEsNDY1LDIxMCxudWxsLDc4NzAsbnVsbCw3ODcyLDIwMiwyNTcsMjI1LDQ2MiwyMjQsNTkzLDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYsMzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLG51bGwsNzg3MSxudWxs''@;'; put 'put ''LDc4NzMsMjM0LDYwOSw5MTc4LDkxNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTcyOTY5LDEzNTQ5MyxudWxsLDI1ODY2LG51bGwsbnVsbCwyMDAyOSwyODM4MSw0MDI3''@;'; put 'put ''MCwzNzM0MyxudWxsLG51bGwsMTYxNTg5LDI1NzQ1LDIwMjUwLDIwMjY0LDIwMzkyLDIwODIyLDIwODUyLDIwODkyLDIwOTY0LDIxMTUzLDIxMTYwLDIxMzA3LDIxMzI2LDIxNDU3LDIxNDY0LDIyMjQyLDIyNzY4LDIyNzg4LDIyNzkxLDIyODM0LDIyODM2LDIzMzk4LDIzNDU0LDIzNDU1LDIz''@;'; put 'put ''NzA2LDI0MTk4LDI0NjM1LDI1OTkzLDI2NjIyLDI2NjI4LDI2NzI1LDI3OTgyLDI4ODYwLDMwMDA1LDMyNDIwLDMyNDI4LDMyNDQyLDMyNDU1LDMyNDYzLDMyNDc5LDMyNTE4LDMyNTY3LDMzNDAyLDMzNDg3LDMzNjQ3LDM1MjcwLDM1Nzc0LDM1ODEwLDM2NzEwLDM2NzExLDM2NzE4LDI5NzEz''@;'; put 'put ''LDMxOTk2LDMyMjA1LDI2OTUwLDMxNDMzLDIxMDMxLG51bGwsbnVsbCxudWxsLG51bGwsMzcyNjAsMzA5MDQsMzcyMTQsMzI5NTYsbnVsbCwzNjEwNywzMzAxNCwxMzM2MDcsbnVsbCxudWxsLDMyOTI3LDQwNjQ3LDE5NjYxLDQwMzkzLDQwNDYwLDE5NTE4LDE3MTUxMCwxNTk3NTgsNDA0NTgs''@;'; put 'put ''MTcyMzM5LDEzNzYxLG51bGwsMjgzMTQsMzMzNDIsMjk5NzcsbnVsbCwxODcwNSwzOTUzMiwzOTU2Nyw0MDg1NywzMTExMSwxNjQ5NzIsMTM4Njk4LDEzMjU2MCwxNDIwNTQsMjAwMDQsMjAwOTcsMjAwOTYsMjAxMDMsMjAxNTksMjAyMDMsMjAyNzksMTMzODgsMjA0MTMsMTU5NDQsMjA0ODMs''@;'; put 'put ''MjA2MTYsMTM0MzcsMTM0NTksMTM0NzcsMjA4NzAsMjI3ODksMjA5NTUsMjA5ODgsMjA5OTcsMjAxMDUsMjExMTMsMjExMzYsMjEyODcsMTM3NjcsMjE0MTcsMTM2NDksMjE0MjQsMTM2NTEsMjE0NDIsMjE1MzksMTM2NzcsMTM2ODIsMTM5NTMsMjE2NTEsMjE2NjcsMjE2ODQsMjE2ODksMjE3''@;'; put 'put ''MTIsMjE3NDMsMjE3ODQsMjE3OTUsMjE4MDAsMTM3MjAsMjE4MjMsMTM3MzMsMTM3NTksMjE5NzUsMTM3NjUsMTYzMjA0LDIxNzk3LG51bGwsMTM0MjEwLDEzNDQyMSwxNTE4NTEsMjE5MDQsMTQyNTM0LDE0ODI4LDEzMTkwNSwzNjQyMiwxNTA5NjgsMTY5MTg5LDE2NDY3LDE2NDAzMCwzMDU4''@;'; put 'put ''NiwxNDIzOTIsMTQ5MDAsMTgzODksMTY0MTg5LDE1ODE5NCwxNTEwMTgsMjU4MjEsMTM0NTI0LDEzNTA5MiwxMzQzNTcsMTM1NDEyLDI1NzQxLDM2NDc4LDEzNDgwNiwxMzQxNTUsMTM1MDEyLDE0MjUwNSwxNjQ0MzgsMTQ4NjkxLG51bGwsMTM0NDcwLDE3MDU3MywxNjQwNzMsMTg0MjAsMTUx''@;'; put 'put ''MjA3LDE0MjUzMCwzOTYwMiwxNDk1MSwxNjk0NjAsMTYzNjUsMTM1NzQsMTUyMjYzLDE2OTk0MCwxNjE5OTIsMTQyNjYwLDQwMzAyLDM4OTMzLG51bGwsMTczNjksMTU1ODEzLDI1NzgwLDIxNzMxLDE0MjY2OCwxNDIyODIsMTM1Mjg3LDE0ODQzLDEzNTI3OSwxNTc0MDIsMTU3NDYyLDE2MjIw''@;'; put 'put ''OCwyNTgzNCwxNTE2MzQsMTM0MjExLDM2NDU2LDEzOTY4MSwxNjY3MzIsMTMyOTEzLG51bGwsMTg0NDMsMTMxNDk3LDE2Mzc4LDIyNjQzLDE0MjczMyxudWxsLDE0ODkzNiwxMzIzNDgsMTU1Nzk5LDEzNDk4OCwxMzQ1NTAsMjE4ODEsMTY1NzEsMTczMzgsbnVsbCwxOTEyNCwxNDE5MjYsMTM1''@;'; put 'put ''MzI1LDMzMTk0LDM5MTU3LDEzNDU1NiwyNTQ2NSwxNDg0NiwxNDExNzMsMzYyODgsMjIxNzcsMjU3MjQsMTU5MzksbnVsbCwxNzM1NjksMTM0NjY1LDE0MjAzMSwxNDI1MzcsbnVsbCwxMzUzNjgsMTQ1ODU4LDE0NzM4LDE0ODU0LDE2NDUwNywxMzY4OCwxNTUyMDksMTM5NDYzLDIyMDk4LDEz''@;'; put 'put ''NDk2MSwxNDI1MTQsMTY5NzYwLDEzNTAwLDI3NzA5LDE1MTA5OSxudWxsLG51bGwsMTYxMTQwLDE0Mjk4NywxMzk3ODQsMTczNjU5LDE2NzExNywxMzQ3NzgsMTM0MTk2LDE1NzcyNCwzMjY1OSwxMzUzNzUsMTQxMzE1LDE0MTYyNSwxMzgxOSwxNTIwMzUsMTM0Nzk2LDEzNTA1MywxMzQ4MjYs''@;'; put 'put ''MTYyNzUsMTM0OTYwLDEzNDQ3MSwxMzU1MDMsMTM0NzMyLG51bGwsMTM0ODI3LDEzNDA1NywxMzQ0NzIsMTM1MzYwLDEzNTQ4NSwxNjM3NywxNDA5NTAsMjU2NTAsMTM1MDg1LDE0NDM3MiwxNjEzMzcsMTQyMjg2LDEzNDUyNiwxMzQ1MjcsMTQyNDE3LDE0MjQyMSwxNDg3MiwxMzQ4MDgsMTM1''@;'; put 'put ''MzY3LDEzNDk1OCwxNzM2MTgsMTU4NTQ0LDE2NzEyMiwxNjczMjEsMTY3MTE0LDM4MzE0LDIxNzA4LDMzNDc2LDIxOTQ1LG51bGwsMTcxNzE1LDM5OTc0LDM5NjA2LDE2MTYzMCwxNDI4MzAsMjg5OTIsMzMxMzMsMzMwMDQsMjM1ODAsMTU3MDQyLDMzMDc2LDE0MjMxLDIxMzQzLDE2NDAyOSwz''@;'; put 'put ''NzMwMiwxMzQ5MDYsMTM0NjcxLDEzNDc3NSwxMzQ5MDcsMTM3ODksMTUxMDE5LDEzODMzLDEzNDM1OCwyMjE5MSwxNDEyMzcsMTM1MzY5LDEzNDY3MiwxMzQ3NzYsMTM1Mjg4LDEzNTQ5NiwxNjQzNTksMTM2Mjc3LDEzNDc3NywxNTExMjAsMTQyNzU2LDIzMTI0LDEzNTE5NywxMzUxOTgsMTM1''@;'; put 'put ''NDEzLDEzNTQxNCwyMjQyOCwxMzQ2NzMsMTYxNDI4LDE2NDU1NywxMzUwOTMsMTM0Nzc5LDE1MTkzNCwxNDA4MywxMzUwOTQsMTM1NTUyLDE1MjI4MCwxNzI3MzMsMTQ5OTc4LDEzNzI3NCwxNDc4MzEsMTY0NDc2LDIyNjgxLDIxMDk2LDEzODUwLDE1MzQwNSwzMTY2NiwyMzQwMCwxODQzMiwx''@;'; put 'put ''OTI0NCw0MDc0MywxODkxOSwzOTk2NywzOTgyMSwxNTQ0ODQsMTQzNjc3LDIyMDExLDEzODEwLDIyMTUzLDIwMDA4LDIyNzg2LDEzODE3NywxOTQ2ODAsMzg3MzcsMTMxMjA2LDIwMDU5LDIwMTU1LDEzNjMwLDIzNTg3LDI0NDAxLDI0NTE2LDE0NTg2LDI1MTY0LDI1OTA5LDI3NTE0LDI3NzAx''@;'; put 'put ''LDI3NzA2LDI4NzgwLDI5MjI3LDIwMDEyLDI5MzU3LDE0OTczNywzMjU5NCwzMTAzNSwzMTk5MywzMjU5NSwxNTYyNjYsMTM1MDUsbnVsbCwxNTY0OTEsMzI3NzAsMzI4OTYsMTU3MjAyLDE1ODAzMywyMTM0MSwzNDkxNiwzNTI2NSwxNjE5NzAsMzU3NDQsMzYxMjUsMzgwMjEsMzgyNjQsMzgy''@;'; put 'put ''NzEsMzgzNzYsMTY3NDM5LDM4ODg2LDM5MDI5LDM5MTE4LDM5MTM0LDM5MjY3LDE3ZTQsNDAwNjAsNDA0NzksNDA2NDQsMjc1MDMsNjM3NTEsMjAwMjMsMTMxMjA3LDM4NDI5LDI1MTQzLDM4MDUwLG51bGwsMjA1MzksMjgxNTgsMTcxMTIzLDQwODcwLDE1ODE3LDM0OTU5LDE0Nzc5MCwyODc5''@;'; put 'put ''MSwyMzc5NywxOTIzMiwxNTIwMTMsMTM2NTcsMTU0OTI4LDI0ODY2LDE2NjQ1MCwzNjc3NSwzNzM2NiwyOTA3MywyNjM5MywyOTYyNiwxNDQwMDEsMTcyMjk1LDE1NDk5LDEzNzYwMCwxOTIxNiwzMDk0OCwyOTY5OCwyMDkxMCwxNjU2NDcsMTYzOTMsMjcyMzUsMTcyNzMwLDE2OTMxLDM0MzE5''@;'; put 'put ''LDEzMzc0MywzMTI3NCwxNzAzMTEsMTY2NjM0LDM4NzQxLDI4NzQ5LDIxMjg0LDEzOTM5MCwzNzg3NiwzMDQyNSwxNjYzNzEsNDA4NzEsMzA2ODUsMjAxMzEsMjA0NjQsMjA2NjgsMjAwMTUsMjAyNDcsNDA4NzIsMjE1NTYsMzIxMzksMjI2NzQsMjI3MzYsMTM4Njc4LDI0MjEwLDI0MjE3LDI0''@;'; put 'put ''NTE0LDE0MTA3NCwyNTk5NSwxNDQzNzcsMjY5MDUsMjcyMDMsMTQ2NTMxLDI3OTAzLG51bGwsMjkxODQsMTQ4NzQxLDI5NTgwLDE2MDkxLDE1MDAzNSwyMzMxNywyOTg4MSwzNTcxNSwxNTQ3ODgsMTUzMjM3LDMxMzc5LDMxNzI0LDMxOTM5LDMyMzY0LDMzNTI4LDM0MTk5LDQwODczLDM0OTYw''@;'; put 'put ''LDQwODc0LDM2NTM3LDQwODc1LDM2ODE1LDM0MTQzLDM5MzkyLDM3NDA5LDQwODc2LDE2NzM1MywxMzYyNTUsMTY0OTcsMTcwNTgsMjMwNjYsbnVsbCxudWxsLG51bGwsMzkwMTYsMjY0NzUsMTcwMTQsMjIzMzMsbnVsbCwzNDI2MiwxNDk4ODMsMzM0NzEsMTYwMDEzLDE5NTg1LDE1OTA5Miwy''@;'; put 'put ''MzkzMSwxNTg0ODUsMTU5Njc4LDQwODc3LDQwODc4LDIzNDQ2LDQwODc5LDI2MzQzLDMyMzQ3LDI4MjQ3LDMxMTc4LDE1NzUyLDE3NjAzLDE0Mzk1OCwxNDEyMDYsMTczMDYsMTc3MTgsbnVsbCwyMzc2NSwxNDYyMDIsMzU1NzcsMjM2NzIsMTU2MzQsMTQ0NzIxLDIzOTI4LDQwODgyLDI5MDE1''@;'; put 'put ''LDE3NzUyLDE0NzY5MiwxMzg3ODcsMTk1NzUsMTQ3MTIsMTMzODYsMTMxNDkyLDE1ODc4NSwzNTUzMiwyMDQwNCwxMzE2NDEsMjI5NzUsMzMxMzIsMzg5OTgsMTcwMjM0LDI0Mzc5LDEzNDA0NyxudWxsLDEzOTcxMywxNjYyNTMsMTY2NDIsMTgxMDcsMTY4MDU3LDE2MTM1LDQwODgzLDE3MjQ2''@;'; put 'put ''OSwxNjYzMiwxNDI5NCwxODE2NywxNTg3OTAsMTY3NjQsMTY1NTU0LDE2MDc2NywxNzc3MywxNDU0OCwxNTI3MzAsMTc3NjEsMTc2OTEsMTk4NDksMTk1NzksMTk4MzAsMTc4OTgsMTYzMjgsMTUwMjg3LDEzOTIxLDE3NjMwLDE3NTk3LDE2ODc3LDIzODcwLDIzODgwLDIzODk0LDE1ODY4LDE0''@;'; put 'put ''MzUxLDIzOTcyLDIzOTkzLDE0MzY4LDE0MzkyLDI0MTMwLDI0MjUzLDI0MzU3LDI0NDUxLDE0NjAwLDE0NjEyLDE0NjU1LDE0NjY5LDI0NzkxLDI0ODkzLDIzNzgxLDE0NzI5LDI1MDE1LDI1MDE3LDI1MDM5LDE0Nzc2LDI1MTMyLDI1MjMyLDI1MzE3LDI1MzY4LDE0ODQwLDIyMTkzLDE0ODUx''@;'; put 'put ''LDI1NTcwLDI1NTk1LDI1NjA3LDI1NjkwLDE0OTIzLDI1NzkyLDIzODI5LDIyMDQ5LDQwODYzLDE0OTk5LDI1OTkwLDE1MDM3LDI2MTExLDI2MTk1LDE1MDkwLDI2MjU4LDE1MTM4LDI2MzkwLDE1MTcwLDI2NTMyLDI2NjI0LDE1MTkyLDI2Njk4LDI2NzU2LDE1MjE4LDE1MjE3LDE1MjI3LDI2''@;'; put 'put ''ODg5LDI2OTQ3LDI5Mjc2LDI2OTgwLDI3MDM5LDI3MDEzLDE1MjkyLDI3MDk0LDE1MzI1LDI3MjM3LDI3MjUyLDI3MjQ5LDI3MjY2LDE1MzQwLDI3Mjg5LDE1MzQ2LDI3MzA3LDI3MzE3LDI3MzQ4LDI3MzgyLDI3NTIxLDI3NTg1LDI3NjI2LDI3NzY1LDI3ODE4LDE1NTYzLDI3OTA2LDI3OTEw''@;'; put 'put ''LDI3OTQyLDI4MDMzLDE1NTk5LDI4MDY4LDI4MDgxLDI4MTgxLDI4MTg0LDI4MjAxLDI4Mjk0LDE2NjMzNiwyODM0NywyODM4NiwyODM3OCw0MDgzMSwyODM5MiwyODM5MywyODQ1MiwyODQ2OCwxNTY4NiwxNDcyNjUsMjg1NDUsMjg2MDYsMTU3MjIsMTU3MzMsMjkxMTEsMjM3MDUsMTU3NTQs''@;'; put 'put ''Mjg3MTYsMTU3NjEsMjg3NTIsMjg3NTYsMjg3ODMsMjg3OTksMjg4MDksMTMxODc3LDE3MzQ1LDEzODA5LDEzNDg3MiwxNDcxNTksMjI0NjIsMTU5NDQzLDI4OTkwLDE1MzU2OCwxMzkwMiwyNzA0MiwxNjY4ODksMjM0MTIsMzEzMDUsMTUzODI1LDE2OTE3NywzMTMzMywzMTM1NywxNTQwMjgs''@;'; put 'put ''MzE0MTksMzE0MDgsMzE0MjYsMzE0MjcsMjkxMzcsMTU2ODEzLDE2ODQyLDMxNDUwLDMxNDUzLDMxNDY2LDE2ODc5LDIxNjgyLDE1NDYyNSwzMTQ5OSwzMTU3MywzMTUyOSwxNTIzMzQsMTU0ODc4LDMxNjUwLDMxNTk5LDMzNjkyLDE1NDU0OCwxNTg4NDcsMzE2OTYsMzM4MjUsMzE2MzQsMzE2''@;'; put 'put ''NzIsMTU0OTEyLDE1Nzg5LDE1NDcyNSwzMzkzOCwzMTczOCwzMTc1MCwzMTc5NywxNTQ4MTcsMzE4MTIsMzE4NzUsMTQ5NjM0LDMxOTEwLDI2MjM3LDE0ODg1NiwzMTk0NSwzMTk0MywzMTk3NCwzMTg2MCwzMTk4NywzMTk4OSwzMTk1MCwzMjM1OSwxNzY5MywxNTkzMDAsMzIwOTMsMTU5NDQ2''@;'; put 'put ''LDI5ODM3LDMyMTM3LDMyMTcxLDI4OTgxLDMyMTc5LDMyMjEwLDE0NzU0MywxNTU2ODksMzIyMjgsMTU2MzUsMzIyNDUsMTM3MjA5LDMyMjI5LDE2NDcxNywzMjI4NSwxNTU5MzcsMTU1OTk0LDMyMzY2LDMyNDAyLDE3MTk1LDM3OTk2LDMyMjk1LDMyNTc2LDMyNTc3LDMyNTgzLDMxMDMwLDE1''@;'; put 'put ''NjM2OCwzOTM5MywzMjY2MywxNTY0OTcsMzI2NzUsMTM2ODAxLDEzMTE3NiwxNzc1NiwxNDUyNTQsMTc2NjcsMTY0NjY2LDMyNzYyLDE1NjgwOSwzMjc3MywzMjc3NiwzMjc5NywzMjgwOCwzMjgxNSwxNzIxNjcsMTU4OTE1LDMyODI3LDMyODI4LDMyODY1LDE0MTA3NiwxODgyNSwxNTcyMjIs''@;'; put 'put ''MTQ2OTE1LDE1NzQxNiwyNjQwNSwzMjkzNSwxNjY0NzIsMzMwMzEsMzMwNTAsMjI3MDQsMTQxMDQ2LDI3Nzc1LDE1NjgyNCwxNTE0ODAsMjU4MzEsMTM2MzMwLDMzMzA0LDEzNzMxMCwyNzIxOSwxNTAxMTcsMTUwMTY1LDE3NTMwLDMzMzIxLDEzMzkwMSwxNTgyOTAsMTQ2ODE0LDIwNDczLDEz''@;'; put 'put ''NjQ0NSwzNDAxOCwzMzYzNCwxNTg0NzQsMTQ5OTI3LDE0NDY4OCwxMzcwNzUsMTQ2OTM2LDMzNDUwLDI2OTA3LDE5NDk2NCwxNjg1OSwzNDEyMywzMzQ4OCwzMzU2MiwxMzQ2NzgsMTM3MTQwLDE0MDE3LDE0Mzc0MSwxNDQ3MzAsMzM0MDMsMzM1MDYsMzM1NjAsMTQ3MDgzLDE1OTEzOSwxNTg0''@;'; put 'put ''NjksMTU4NjE1LDE0NDg0NiwxNTgwNywzMzU2NSwyMTk5NiwzMzY2OSwxNzY3NSwxNTkxNDEsMzM3MDgsMzM3MjksMzM3NDcsMTM0MzgsMTU5NDQ0LDI3MjIzLDM0MTM4LDEzNDYyLDE1OTI5OCwxNDMwODcsMzM4ODAsMTU0NTk2LDMzOTA1LDE1ODI3LDE3NjM2LDI3MzAzLDMzODY2LDE0NjYx''@;'; put 'put ''MywzMTA2NCwzMzk2MCwxNTg2MTQsMTU5MzUxLDE1OTI5OSwzNDAxNCwzMzgwNywzMzY4MSwxNzU2OCwzMzkzOSwzNDAyMCwxNTQ3NjksMTY5NjAsMTU0ODE2LDE3NzMxLDM0MTAwLDIzMjgyLDE1OTM4NSwxNzcwMywzNDE2MywxNzY4NiwyNjU1OSwzNDMyNiwxNjU0MTMsMTY1NDM1LDM0MjQx''@;'; put 'put ''LDE1OTg4MCwzNDMwNiwxMzY1NzgsMTU5OTQ5LDE5NDk5NCwxNzc3MCwzNDM0NCwxMzg5NiwxMzczNzgsMjE0OTUsMTYwNjY2LDM0NDMwLDM0NjczLDE3MjI4MCwzNDc5OCwxNDIzNzUsMzQ3MzcsMzQ3NzgsMzQ4MzEsMjIxMTMsMzQ0MTIsMjY3MTAsMTc5MzUsMzQ4ODUsMzQ4ODYsMTYxMjQ4''@;'; put 'put ''LDE0Njg3MywxNjEyNTIsMzQ5MTAsMzQ5NzIsMTgwMTEsMzQ5OTYsMzQ5OTcsMjU1MzcsMzUwMTMsMzA1ODMsMTYxNTUxLDM1MjA3LDM1MjEwLDM1MjM4LDM1MjQxLDM1MjM5LDM1MjYwLDE2NjQzNywzNTMwMywxNjIwODQsMTYyNDkzLDM1NDg0LDMwNjExLDM3Mzc0LDM1NDcyLDE2MjM5Mywz''@;'; put 'put ''MTQ2NSwxNjI2MTgsMTQ3MzQzLDE4MTk1LDE2MjYxNiwyOTA1MiwzNTU5NiwzNTYxNSwxNTI2MjQsMTUyOTMzLDM1NjQ3LDM1NjYwLDM1NjYxLDM1NDk3LDE1MDEzOCwzNTcyOCwzNTczOSwzNTUwMywxMzY5MjcsMTc5NDEsMzQ4OTUsMzU5OTUsMTYzMTU2LDE2MzIxNSwxOTUwMjgsMTQxMTcs''@;'; put 'put ''MTYzMTU1LDM2MDU0LDE2MzIyNCwxNjMyNjEsMzYxMTQsMzYwOTksMTM3NDg4LDM2MDU5LDI4NzY0LDM2MTEzLDE1MDcyOSwxNjA4MCwzNjIxNSwzNjI2NSwxNjM4NDIsMTM1MTg4LDE0OTg5OCwxNTIyOCwxNjQyODQsMTYwMDEyLDMxNDYzLDM2NTI1LDM2NTM0LDM2NTQ3LDM3NTg4LDM2NjMz''@;'; put 'put ''LDM2NjUzLDE2NDcwOSwxNjQ4ODIsMzY3NzMsMzc2MzUsMTcyNzAzLDEzMzcxMiwzNjc4NywxODczMCwxNjYzNjYsMTY1MTgxLDE0Njg3NSwyNDMxMiwxNDM5NzAsMzY4NTcsMTcyMDUyLDE2NTU2NCwxNjUxMjEsMTQwMDY5LDE0NzIwLDE1OTQ0NywzNjkxOSwxNjUxODAsMTYyNDk0LDM2OTYx''@;'; put 'put ''LDE2NTIyOCwxNjUzODcsMzcwMzIsMTY1NjUxLDM3MDYwLDE2NTYwNiwzNzAzOCwzNzExNywzNzIyMywxNTA4OCwzNzI4OSwzNzMxNiwzMTkxNiwxNjYxOTUsMTM4ODg5LDM3MzkwLDI3ODA3LDM3NDQxLDM3NDc0LDE1MzAxNywzNzU2MSwxNjY1OTgsMTQ2NTg3LDE2NjY2OCwxNTMwNTEsMTM0''@;'; put 'put ''NDQ5LDM3Njc2LDM3NzM5LDE2NjYyNSwxNjY4OTEsMjg4MTUsMjMyMzUsMTY2NjI2LDE2NjYyOSwxODc4OSwzNzQ0NCwxNjY4OTIsMTY2OTY5LDE2NjkxMSwzNzc0NywzNzk3OSwzNjU0MCwzODI3NywzODMxMCwzNzkyNiwzODMwNCwyODY2MiwxNzA4MSwxNDA5MjIsMTY1NTkyLDEzNTgwNCwx''@;'; put 'put ''NDY5OTAsMTg5MTEsMjc2NzYsMzg1MjMsMzg1NTAsMTY3NDgsMzg1NjMsMTU5NDQ1LDI1MDUwLDM4NTgyLDMwOTY1LDE2NjYyNCwzODU4OSwyMTQ1MiwxODg0OSwxNTg5MDQsMTMxNzAwLDE1NjY4OCwxNjgxMTEsMTY4MTY1LDE1MDIyNSwxMzc0OTMsMTQ0MTM4LDM4NzA1LDM0MzcwLDM4NzEw''@;'; put 'put ''LDE4OTU5LDE3NzI1LDE3Nzk3LDE1MDI0OSwyODc4OSwyMzM2MSwzODY4MywzODc0OCwxNjg0MDUsMzg3NDMsMjMzNzAsMTY4NDI3LDM4NzUxLDM3OTI1LDIwNjg4LDE0MzU0MywxNDM1NDgsMzg3OTMsMzg4MTUsMzg4MzMsMzg4NDYsMzg4NDgsMzg4NjYsMzg4ODAsMTUyNjg0LDM4ODk0LDI5''@;'; put 'put ''NzI0LDE2OTAxMSwzODkxMSwzODkwMSwxNjg5ODksMTYyMTcwLDE5MTUzLDM4OTY0LDM4OTYzLDM4OTg3LDM5MDE0LDE1MTE4LDE2MDExNywxNTY5NywxMzI2NTYsMTQ3ODA0LDE1MzM1MCwzOTExNCwzOTA5NSwzOTExMiwzOTExMSwxOTE5OSwxNTkwMTUsMTM2OTE1LDIxOTM2LDM5MTM3LDM5''@;'; put 'put ''MTQyLDM5MTQ4LDM3NzUyLDM5MjI1LDE1MDA1NywxOTMxNCwxNzAwNzEsMTcwMjQ1LDM5NDEzLDM5NDM2LDM5NDgzLDM5NDQwLDM5NTEyLDE1MzM4MSwxNDAyMCwxNjgxMTMsMTcwOTY1LDM5NjQ4LDM5NjUwLDE3MDc1NywzOTY2OCwxOTQ3MCwzOTcwMCwzOTcyNSwxNjUzNzYsMjA1MzIsMzk3''@;'; put 'put ''MzIsMTU4MTIwLDE0NTMxLDE0MzQ4NSwzOTc2MCwzOTc0NCwxNzEzMjYsMjMxMDksMTM3MzE1LDM5ODIyLDE0ODA0MywzOTkzOCwzOTkzNSwzOTk0OCwxNzE2MjQsNDA0MDQsMTcxOTU5LDE3MjQzNCwxNzI0NTksMTcyMjU3LDE3MjMyMywxNzI1MTEsNDAzMTgsNDAzMjMsMTcyMzQwLDQwNDYy''@;'; put 'put ''LDI2NzYwLDQwMzg4LDEzOTYxMSwxNzI0MzUsMTcyNTc2LDEzNzUzMSwxNzI1OTUsNDAyNDksMTcyMjE3LDE3MjcyNCw0MDU5Miw0MDU5Nyw0MDYwNiw0MDYxMCwxOTc2NCw0MDYxOCw0MDYyMywxNDgzMjQsNDA2NDEsMTUyMDAsMTQ4MjEsMTU2NDUsMjAyNzQsMTQyNzAsMTY2OTU1LDQwNzA2''@;'; put 'put ''LDQwNzEyLDE5MzUwLDM3OTI0LDE1OTEzOCw0MDcyNyw0MDcyNiw0MDc2MSwyMjE3NSwyMjE1NCw0MDc3MywzOTM1MiwxNjgwNzUsMzg4OTgsMzM5MTksNDA4MDIsNDA4MDksMzE0NTIsNDA4NDYsMjkyMDYsMTkzOTAsMTQ5ODc3LDE0OTk0NywyOTA0NywxNTAwMDgsMTQ4Mjk2LDE1MDA5Nywy''@;'; put 'put ''OTU5OCwxNjY4NzQsMTM3NDY2LDMxMTM1LDE2NjI3MCwxNjc0NzgsMzc3MzcsMzc4NzUsMTY2NDY4LDM3NjEyLDM3NzYxLDM3ODM1LDE2NjI1MiwxNDg2NjUsMjkyMDcsMTYxMDcsMzA1NzgsMzEyOTksMjg4ODAsMTQ4NTk1LDE0ODQ3MiwyOTA1NCwxMzcxOTksMjg4MzUsMTM3NDA2LDE0NDc5''@;'; put 'put ''MywxNjA3MSwxMzczNDksMTUyNjIzLDEzNzIwOCwxNDExNCwxMzY5NTUsMTM3MjczLDE0MDQ5LDEzNzA3NiwxMzc0MjUsMTU1NDY3LDE0MTE1LDEzNjg5NiwyMjM2MywxNTAwNTMsMTM2MTkwLDEzNTg0OCwxMzYxMzQsMTM2Mzc0LDM0MDUxLDE0NTA2MiwzNDA1MSwzMzg3NywxNDk5MDgsMTYw''@;'; put 'put ''MTAxLDE0Njk5MywxNTI5MjQsMTQ3MTk1LDE1OTgyNiwxNzY1MiwxNDUxMzQsMTcwMzk3LDE1OTUyNiwyNjYxNywxNDEzMSwxNTM4MSwxNTg0NywyMjYzNiwxMzc1MDYsMjY2NDAsMTY0NzEsMTQ1MjE1LDE0NzY4MSwxNDc1OTUsMTQ3NzI3LDE1ODc1MywyMTcwNywyMjE3NCwxNTczNjEsMjIx''@;'; put 'put ''NjIsMTM1MTM1LDEzNDA1NiwxMzQ2NjksMzc4MzAsMTY2Njc1LDM3Nzg4LDIwMjE2LDIwNzc5LDE0MzYxLDE0ODUzNCwyMDE1NiwxMzIxOTcsMTMxOTY3LDIwMjk5LDIwMzYyLDE1MzE2OSwyMzE0NCwxMzE0OTksMTMyMDQzLDE0NzQ1LDEzMTg1MCwxMzIxMTYsMTMzNjUsMjAyNjUsMTMxNzc2''@;'; put 'put ''LDE2NzYwMywxMzE3MDEsMzU1NDYsMTMxNTk2LDIwMTIwLDIwNjg1LDIwNzQ5LDIwMzg2LDIwMjI3LDE1MDAzMCwxNDcwODIsMjAyOTAsMjA1MjYsMjA1ODgsMjA2MDksMjA0MjgsMjA0NTMsMjA1NjgsMjA3MzIsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjgyNzgsMTQ0Nzg5LDE0NzAwMSwx''@;'; put 'put ''NDcxMzUsMjgwMTgsMTM3MzQ4LDE0NzA4MSwyMDkwNCwyMDkzMSwxMzI1NzYsMTc2MjksMTMyMjU5LDEzMjI0MiwxMzIyNDEsMzYyMTgsMTY2NTU2LDEzMjg3OCwyMTA4MSwyMTE1NiwxMzMyMzUsMjEyMTcsMzc3NDIsMTgwNDIsMjkwNjgsMTQ4MzY0LDEzNDE3NiwxNDk5MzIsMTM1Mzk2LDI3''@;'; put 'put ''MDg5LDEzNDY4NSwyOTgxNywxNjA5NCwyOTg0OSwyOTcxNiwyOTc4MiwyOTU5MiwxOTM0MiwxNTAyMDQsMTQ3NTk3LDIxNDU2LDEzNzAwLDI5MTk5LDE0NzY1NywyMTk0MCwxMzE5MDksMjE3MDksMTM0MDg2LDIyMzAxLDM3NDY5LDM4NjQ0LDM3NzM0LDIyNDkzLDIyNDEzLDIyMzk5LDEzODg2''@;'; put 'put ''LDIyNzMxLDIzMTkzLDE2NjQ3MCwxMzY5NTQsMTM3MDcxLDEzNjk3NiwyMzA4NCwyMjk2OCwzNzUxOSwyMzE2NiwyMzI0NywyMzA1OCwxNTM5MjYsMTM3NzE1LDEzNzMxMywxNDgxMTcsMTQwNjksMjc5MDksMjk3NjMsMjMwNzMsMTU1MjY3LDIzMTY5LDE2Njg3MSwxMzIxMTUsMzc4NTYsMjk4''@;'; put 'put ''MzYsMTM1OTM5LDI4OTMzLDE4ODAyLDM3ODk2LDE2NjM5NSwzNzgyMSwxNDI0MCwyMzU4MiwyMzcxMCwyNDE1OCwyNDEzNiwxMzc2MjIsMTM3NTk2LDE0NjE1OCwyNDI2OSwyMzM3NSwxMzc0NzUsMTM3NDc2LDE0MDgxLDEzNzM3NiwxNDA0NSwxMzY5NTgsMTQwMzUsMzMwNjYsMTY2NDcxLDEz''@;'; put 'put ''ODY4MiwxNDQ0OTgsMTY2MzEyLDI0MzMyLDI0MzM0LDEzNzUxMSwxMzcxMzEsMjMxNDcsMTM3MDE5LDIzMzY0LDM0MzI0LDE2MTI3NywzNDkxMiwyNDcwMiwxNDE0MDgsMTQwODQzLDI0NTM5LDE2MDU2LDE0MDcxOSwxNDA3MzQsMTY4MDcyLDE1OTYwMywyNTAyNCwxMzExMzQsMTMxMTQyLDE0''@;'; put 'put ''MDgyNywyNDk4NSwyNDk4NCwyNDY5MywxNDI0OTEsMTQyNTk5LDE0OTIwNCwxNjgyNjksMjU3MTMsMTQ5MDkzLDE0MjE4NiwxNDg4OSwxNDIxMTQsMTQ0NDY0LDE3MDIxOCwxNDI5NjgsMjUzOTksMTczMTQ3LDI1NzgyLDI1MzkzLDI1NTUzLDE0OTk4NywxNDI2OTUsMjUyNTIsMTQyNDk3LDI1''@;'; put 'put ''NjU5LDI1OTYzLDI2OTk0LDE1MzQ4LDE0MzUwMiwxNDQwNDUsMTQ5ODk3LDE0NDA0MywyMTc3MywxNDQwOTYsMTM3NDMzLDE2OTAyMywyNjMxOCwxNDQwMDksMTQzNzk1LDE1MDcyLDE2Nzg0LDE1Mjk2NCwxNjY2OTAsMTUyOTc1LDEzNjk1NiwxNTI5MjMsMTUyNjEzLDMwOTU4LDE0MzYxOSwx''@;'; put 'put ''MzcyNTgsMTQzOTI0LDEzNDEyLDE0Mzg4NywxNDM3NDYsMTQ4MTY5LDI2MjU0LDE1OTAxMiwyNjIxOSwxOTM0NywyNjE2MCwxNjE5MDQsMTM4NzMxLDI2MjExLDE0NDA4MiwxNDQwOTcsMjYxNDIsMTUzNzE0LDE0NTQ1LDE0NTQ2NiwxNDUzNDAsMTUyNTcsMTQ1MzE0LDE0NDM4MiwyOTkwNCwx''@;'; put 'put ''NTI1NCwyNjUxMSwxNDkwMzQsMjY4MDYsMjY2NTQsMTUzMDAsMjczMjYsMTQ0MzUsMTQ1MzY1LDE0ODYxNSwyNzE4NywyNzIxOCwyNzMzNywyNzM5NywxMzc0OTAsMjU4NzMsMjY3NzYsMjcyMTIsMTUzMTksMjcyNTgsMjc0NzksMTQ3MzkyLDE0NjU4NiwzNzc5MiwzNzYxOCwxNjY4OTAsMTY2''@;'; put 'put ''NjAzLDM3NTEzLDE2Mzg3MCwxNjYzNjQsMzc5OTEsMjgwNjksMjg0MjcsMTQ5OTk2LDI4MDA3LDE0NzMyNywxNTc1OSwyODE2NCwxNDc1MTYsMjMxMDEsMjgxNzAsMjI1OTksMjc5NDAsMzA3ODYsMjg5ODcsMTQ4MjUwLDE0ODA4NiwyODkxMywyOTI2NCwyOTMxOSwyOTMzMiwxNDkzOTEsMTQ5''@;'; put 'put ''Mjg1LDIwODU3LDE1MDE4MCwxMzI1ODcsMjk4MTgsMTQ3MTkyLDE0NDk5MSwxNTAwOTAsMTQ5NzgzLDE1NTYxNywxNjEzNCwxNjA0OSwxNTAyMzksMTY2OTQ3LDE0NzI1MywyNDc0MywxNjExNSwyOTkwMCwyOTc1NiwzNzc2NywyOTc1MSwxNzU2NywxNTkyMTAsMTc3NDUsMzAwODMsMTYyMjcs''@;'; put 'put ''MTUwNzQ1LDE1MDc5MCwxNjIxNiwzMDAzNywzMDMyMywxNzM1MTAsMTUxMjksMjk4MDAsMTY2NjA0LDE0OTkzMSwxNDk5MDIsMTUwOTksMTU4MjEsMTUwMDk0LDE2MTI3LDE0OTk1NywxNDk3NDcsMzczNzAsMjIzMjIsMzc2OTgsMTY2NjI3LDEzNzMxNiwyMDcwMywxNTIwOTcsMTUyMDM5LDMw''@;'; put 'put ''NTg0LDE0MzkyMiwzMDQ3OCwzMDQ3OSwzMDU4NywxNDkxNDMsMTQ1MjgxLDE0OTQyLDE0OTc0NCwyOTc1MiwyOTg1MSwxNjA2MywxNTAyMDIsMTUwMjE1LDE2NTg0LDE1MDE2NiwxNTYwNzgsMzc2MzksMTUyOTYxLDMwNzUwLDMwODYxLDMwODU2LDMwOTMwLDI5NjQ4LDMxMDY1LDE2MTYwMSwx''@;'; put 'put ''NTMzMTUsMTY2NTQsMzExMzEsMzM5NDIsMzExNDEsMjcxODEsMTQ3MTk0LDMxMjkwLDMxMjIwLDE2NzUwLDEzNjkzNCwxNjY5MCwzNzQyOSwzMTIxNywxMzQ0NzYsMTQ5OTAwLDEzMTczNywxNDY4NzQsMTM3MDcwLDEzNzE5LDIxODY3LDEzNjgwLDEzOTk0LDEzMTU0MCwxMzQxNTcsMzE0NTgs''@;'; put 'put ''MjMxMjksMTQxMDQ1LDE1NDI4NywxNTQyNjgsMjMwNTMsMTMxNjc1LDMwOTYwLDIzMDgyLDE1NDU2NiwzMTQ4NiwxNjg4OSwzMTgzNywzMTg1MywxNjkxMywxNTQ1NDcsMTU1MzI0LDE1NTMwMiwzMTk0OSwxNTAwMDksMTM3MTM2LDMxODg2LDMxODY4LDMxOTE4LDI3MzE0LDMyMjIwLDMyMjYz''@;'; put 'put ''LDMyMjExLDMyNTkwLDE1NjI1NywxNTU5OTYsMTYyNjMyLDMyMTUxLDE1NTI2NiwxNzAwMiwxNTg1ODEsMTMzMzk4LDI2NTgyLDEzMTE1MCwxNDQ4NDcsMjI0NjgsMTU2NjkwLDE1NjY2NCwxNDk4NTgsMzI3MzMsMzE1MjcsMTMzMTY0LDE1NDM0NSwxNTQ5NDcsMzE1MDAsMTU1MTUwLDM5Mzk4''@;'; put 'put ''LDM0MzczLDM5NTIzLDI3MTY0LDE0NDQ0NywxNDgxOCwxNTAwMDcsMTU3MTAxLDM5NDU1LDE1NzA4OCwzMzkyMCwxNjAwMzksMTU4OTI5LDE3NjQyLDMzMDc5LDE3NDEwLDMyOTY2LDMzMDMzLDMzMDkwLDE1NzYyMCwzOTEwNywxNTgyNzQsMzMzNzgsMzMzODEsMTU4Mjg5LDMzODc1LDE1OTE0''@;'; put 'put ''MywzNDMyMCwxNjAyODMsMjMxNzQsMTY3NjcsMTM3MjgwLDIzMzM5LDEzNzM3NywyMzI2OCwxMzc0MzIsMzQ0NjQsMTk1MDA0LDE0NjgzMSwzNDg2MSwxNjA4MDIsMjMwNDIsMzQ5MjYsMjAyOTMsMzQ5NTEsMzUwMDcsMzUwNDYsMzUxNzMsMzUxNDksMTUzMjE5LDM1MTU2LDE2MTY2OSwxNjE2''@;'; put 'put ''NjgsMTY2OTAxLDE2Njg3MywxNjY4MTIsMTY2MzkzLDE2MDQ1LDMzOTU1LDE4MTY1LDE4MTI3LDE0MzIyLDM1Mzg5LDM1MzU2LDE2OTAzMiwyNDM5NywzNzQxOSwxNDgxMDAsMjYwNjgsMjg5NjksMjg4NjgsMTM3Mjg1LDQwMzAxLDM1OTk5LDM2MDczLDE2MzI5MiwyMjkzOCwzMDY1OSwyMzAy''@;'; put 'put ''NCwxNzI2MiwxNDAzNiwzNjM5NCwzNjUxOSwxNTA1MzcsMzY2NTYsMzY2ODIsMTcxNDAsMjc3MzYsMjg2MDMsMTQwMDY1LDE4NTg3LDI4NTM3LDI4Mjk5LDEzNzE3OCwzOTkxMywxNDAwNSwxNDk4MDcsMzcwNTEsMzcwMTUsMjE4NzMsMTg2OTQsMzczMDcsMzc4OTIsMTY2NDc1LDE2NDgyLDE2''@;'; put 'put ''NjY1MiwzNzkyNywxNjY5NDEsMTY2OTcxLDM0MDIxLDM1MzcxLDM4Mjk3LDM4MzExLDM4Mjk1LDM4Mjk0LDE2NzIyMCwyOTc2NSwxNjA2NiwxNDk3NTksMTUwMDgyLDE0ODQ1OCwxNjEwMywxNDM5MDksMzg1NDMsMTY3NjU1LDE2NzUyNiwxNjc1MjUsMTYwNzYsMTQ5OTk3LDE1MDEzNiwxNDc0''@;'; put 'put ''MzgsMjk3MTQsMjk4MDMsMTYxMjQsMzg3MjEsMTY4MTEyLDI2Njk1LDE4OTczLDE2ODA4MywxNTM1NjcsMzg3NDksMzc3MzYsMTY2MjgxLDE2Njk1MCwxNjY3MDMsMTU2NjA2LDM3NTYyLDIzMzEzLDM1Njg5LDE4NzQ4LDI5Njg5LDE0Nzk5NSwzODgxMSwzODc2OSwzOTIyNCwxMzQ5NTAsMjQw''@;'; put 'put ''MDEsMTY2ODUzLDE1MDE5NCwzODk0MywxNjkxNzgsMzc2MjIsMTY5NDMxLDM3MzQ5LDE3NjAwLDE2NjczNiwxNTAxMTksMTY2NzU2LDM5MTMyLDE2NjQ2OSwxNjEyOCwzNzQxOCwxODcyNSwzMzgxMiwzOTIyNywzOTI0NSwxNjI1NjYsMTU4NjksMzkzMjMsMTkzMTEsMzkzMzgsMzk1MTYsMTY2''@;'; put 'put ''NzU3LDE1MzgwMCwyNzI3OSwzOTQ1NywyMzI5NCwzOTQ3MSwxNzAyMjUsMTkzNDQsMTcwMzEyLDM5MzU2LDE5Mzg5LDE5MzUxLDM3NzU3LDIyNjQyLDEzNTkzOCwyMjU2MiwxNDk5NDQsMTM2NDI0LDMwNzg4LDE0MTA4NywxNDY4NzIsMjY4MjEsMTU3NDEsMzc5NzYsMTQ2MzEsMjQ5MTIsMTQx''@;'; put 'put ''MTg1LDE0MTY3NSwyNDgzOSw0MDAxNSw0MDAxOSw0MDA1OSwzOTk4OSwzOTk1MiwzOTgwNywzOTg4NywxNzE1NjUsMzk4MzksMTcyNTMzLDE3MjI4Niw0MDIyNSwxOTYzMCwxNDc3MTYsNDA0NzIsMTk2MzIsNDAyMDQsMTcyNDY4LDE3MjI2OSwxNzIyNzUsMTcwMjg3LDQwMzU3LDMzOTgxLDE1''@;'; put 'put ''OTI1MCwxNTk3MTEsMTU4NTk0LDM0MzAwLDE3NzE1LDE1OTE0MCwxNTkzNjQsMTU5MjE2LDMzODI0LDM0Mjg2LDE1OTIzMiwxNDUzNjcsMTU1NzQ4LDMxMjAyLDE0NDc5NiwxNDQ5NjAsMTg3MzMsMTQ5OTgyLDE1NzE0LDM3ODUxLDM3NTY2LDM3NzA0LDEzMTc3NSwzMDkwNSwzNzQ5NSwzNzk2''@;'; put 'put ''NSwyMDQ1MiwxMzM3NiwzNjk2NCwxNTI5MjUsMzA3ODEsMzA4MDQsMzA5MDIsMzA3OTUsMTM3MDQ3LDE0MzgxNywxNDk4MjUsMTM5NzgsMjAzMzgsMjg2MzQsMjg2MzMsMjg3MDIsMjg3MDIsMjE1MjQsMTQ3ODkzLDIyNDU5LDIyNzcxLDIyNDEwLDQwMjE0LDIyNDg3LDI4OTgwLDEzNDg3LDE0''@;'; put 'put ''Nzg4NCwyOTE2MywxNTg3ODQsMTUxNDQ3LDIzMzM2LDEzNzE0MSwxNjY0NzMsMjQ4NDQsMjMyNDYsMjMwNTEsMTcwODQsMTQ4NjE2LDE0MTI0LDE5MzIzLDE2NjM5NiwzNzgxOSwzNzgxNiwxMzc0MzAsMTM0OTQxLDMzOTA2LDE1ODkxMiwxMzYyMTEsMTQ4MjE4LDE0MjM3NCwxNDg0MTcsMjI5''@;'; put 'put ''MzIsMTQ2ODcxLDE1NzUwNSwzMjE2OCwxNTU5OTUsMTU1ODEyLDE0OTk0NSwxNDk4OTksMTY2Mzk0LDM3NjA1LDI5NjY2LDE2MTA1LDI5ODc2LDE2Njc1NSwxMzczNzUsMTYwOTcsMTUwMTk1LDI3MzUyLDI5NjgzLDI5NjkxLDE2MDg2LDE1MDA3OCwxNTAxNjQsMTM3MTc3LDE1MDExOCwxMzIw''@;'; put 'put ''MDcsMTM2MjI4LDE0OTk4OSwyOTc2OCwxNDk3ODIsMjg4MzcsMTQ5ODc4LDM3NTA4LDI5NjcwLDM3NzI3LDEzMjM1MCwzNzY4MSwxNjY2MDYsMTY2NDIyLDM3NzY2LDE2Njg4NywxNTMwNDUsMTg3NDEsMTY2NTMwLDI5MDM1LDE0OTgyNywxMzQzOTksMjIxODAsMTMyNjM0LDEzNDEyMywxMzQz''@;'; put 'put ''MjgsMjE3NjIsMzExNzIsMTM3MjEwLDMyMjU0LDEzNjg5OCwxNTAwOTYsMTM3Mjk4LDE3NzEwLDM3ODg5LDE0MDkwLDE2NjU5MiwxNDk5MzMsMjI5NjAsMTM3NDA3LDEzNzM0NywxNjA5MDAsMjMyMDEsMTQwNTAsMTQ2Nzc5LDE0ZTMsMzc0NzEsMjMxNjEsMTY2NTI5LDEzNzMxNCwzNzc0OCwx''@;'; put 'put ''NTU2NSwxMzM4MTIsMTkwOTQsMTQ3MzAsMjA3MjQsMTU3MjEsMTU2OTIsMTM2MDkyLDI5MDQ1LDE3MTQ3LDE2NDM3NiwyODE3NSwxNjgxNjQsMTc2NDMsMjc5OTEsMTYzNDA3LDI4Nzc1LDI3ODIzLDE1NTc0LDE0NzQzNywxNDY5ODksMjgxNjIsMjg0MjgsMTU3MjcsMTMyMDg1LDMwMDMzLDE0''@;'; put 'put ''MDEyLDEzNTEyLDE4MDQ4LDE2MDkwLDE4NTQ1LDIyOTgwLDM3NDg2LDE4NzUwLDM2NjczLDE2Njk0MCwxNTg2NTYsMjI1NDYsMjI0NzIsMTQwMzgsMTM2Mjc0LDI4OTI2LDE0ODMyMiwxNTAxMjksMTQzMzMxLDEzNTg1NiwxNDAyMjEsMjY4MDksMjY5ODMsMTM2MDg4LDE0NDYxMywxNjI4MDQs''@;'; put 'put ''MTQ1MTE5LDE2NjUzMSwxNDUzNjYsMTQ0Mzc4LDE1MDY4NywyNzE2MiwxNDUwNjksMTU4OTAzLDMzODU0LDE3NjMxLDE3NjE0LDE1OTAxNCwxNTkwNTcsMTU4ODUwLDE1OTcxMCwyODQzOSwxNjAwMDksMzM1OTcsMTM3MDE4LDMzNzczLDE1ODg0OCwxNTk4MjcsMTM3MTc5LDIyOTIxLDIzMTcw''@;'; put 'put ''LDEzNzEzOSwyMzEzNywyMzE1MywxMzc0NzcsMTQ3OTY0LDE0MTI1LDIzMDIzLDEzNzAyMCwxNDAyMywyOTA3MCwzNzc3NiwyNjI2NiwxNDgxMzMsMjMxNTAsMjMwODMsMTQ4MTE1LDI3MTc5LDE0NzE5MywxNjE1OTAsMTQ4NTcxLDE0ODE3MCwyODk1NywxNDgwNTcsMTY2MzY5LDIwNDAwLDE1''@;'; put 'put ''OTAxNiwyMzc0NiwxNDg2ODYsMTYzNDA1LDE0ODQxMywyNzE0OCwxNDgwNTQsMTM1OTQwLDI4ODM4LDI4OTc5LDE0ODQ1NywxNTc4MSwyNzg3MSwxOTQ1OTcsMTUwMDk1LDMyMzU3LDIzMDE5LDIzODU1LDE1ODU5LDI0NDEyLDE1MDEwOSwxMzcxODMsMzIxNjQsMzM4MzAsMjE2MzcsMTQ2MTcw''@;'; put 'put ''LDE0NDEyOCwxMzE2MDQsMjIzOTgsMTMzMzMzLDEzMjYzMywxNjM1NywxMzkxNjYsMTcyNzI2LDI4Njc1LDE2ODI4MywyMzkyMCwyOTU4MywzMTk1NSwxNjY0ODksMTY4OTkyLDIwNDI0LDMyNzQzLDI5Mzg5LDI5NDU2LDE2MjU0OCwyOTQ5NiwyOTQ5NywxNTMzMzQsMjk1MDUsMjk1MTIsMTYw''@;'; put 'put ''NDEsMTYyNTg0LDM2OTcyLDI5MTczLDE0OTc0NiwyOTY2NSwzMzI3MCwxNjA3NCwzMDQ3NiwxNjA4MSwyNzgxMCwyMjI2OSwyOTcyMSwyOTcyNiwyOTcyNywxNjA5OCwxNjExMiwxNjExNiwxNjEyMiwyOTkwNywxNjE0MiwxNjIxMSwzMDAxOCwzMDA2MSwzMDA2NiwzMDA5MywxNjI1MiwzMDE1''@;'; put 'put ''MiwzMDE3MiwxNjMyMCwzMDI4NSwxNjM0MywzMDMyNCwxNjM0OCwzMDMzMCwxNTEzODgsMjkwNjQsMjIwNTEsMzUyMDAsMjI2MzMsMTY0MTMsMzA1MzEsMTY0NDEsMjY0NjUsMTY0NTMsMTM3ODcsMzA2MTYsMTY0OTAsMTY0OTUsMjM2NDYsMzA2NTQsMzA2NjcsMjI3NzAsMzA3NDQsMjg4NTcs''@;'; put 'put ''MzA3NDgsMTY1NTIsMzA3NzcsMzA3OTEsMzA4MDEsMzA4MjIsMzM4NjQsMTUyODg1LDMxMDI3LDI2NjI3LDMxMDI2LDE2NjQzLDE2NjQ5LDMxMTIxLDMxMTI5LDM2Nzk1LDMxMjM4LDM2Nzk2LDE2NzQzLDMxMzc3LDE2ODE4LDMxNDIwLDMzNDAxLDE2ODM2LDMxNDM5LDMxNDUxLDE2ODQ3LDIw''@;'; put 'put ''MDAxLDMxNTg2LDMxNTk2LDMxNjExLDMxNzYyLDMxNzcxLDE2OTkyLDE3MDE4LDMxODY3LDMxOTAwLDE3MDM2LDMxOTI4LDE3MDQ0LDMxOTgxLDM2NzU1LDI4ODY0LDEzNDM1MSwzMjIwNywzMjIxMiwzMjIwOCwzMjI1MywzMjY4NiwzMjY5MiwyOTM0MywxNzMwMywzMjgwMCwzMjgwNSwzMTU0''@;'; put 'put ''NSwzMjgxNCwzMjgxNywzMjg1MiwxNTgyMCwyMjQ1MiwyODgzMiwzMjk1MSwzMzAwMSwxNzM4OSwzMzAzNiwyOTQ4MiwzMzAzOCwzMzA0MiwzMDA0OCwzMzA0NCwxNzQwOSwxNTE2MSwzMzExMCwzMzExMywzMzExNCwxNzQyNywyMjU4NiwzMzE0OCwzMzE1NiwxNzQ0NSwzMzE3MSwxNzQ1Mywz''@;'; put 'put ''MzE4OSwyMjUxMSwzMzIxNywzMzI1MiwzMzM2NCwxNzU1MSwzMzQ0NiwzMzM5OCwzMzQ4MiwzMzQ5NiwzMzUzNSwxNzU4NCwzMzYyMywzODUwNSwyNzAxOCwzMzc5NywyODkxNywzMzg5MiwyNDgwMywzMzkyOCwxNzY2OCwzMzk4MiwzNDAxNywzNDA0MCwzNDA2NCwzNDEwNCwzNDEzMCwxNzcy''@;'; put 'put ''MywzNDE1OSwzNDE2MCwzNDI3MiwxNzc4MywzNDQxOCwzNDQ1MCwzNDQ4MiwzNDU0MywzODQ2OSwzNDY5OSwxNzkyNiwxNzk0MywzNDk5MCwzNTA3MSwzNTEwOCwzNTE0MywzNTIxNywxNjIxNTEsMzUzNjksMzUzODQsMzU0NzYsMzU1MDgsMzU5MjEsMzYwNTIsMzYwODIsMzYxMjQsMTgzMjgs''@;'; put 'put ''MjI2MjMsMzYyOTEsMTg0MTMsMjAyMDYsMzY0MTAsMjE5NzYsMjIzNTYsMzY0NjUsMjIwMDUsMzY1MjgsMTg0ODcsMzY1NTgsMzY1NzgsMzY1ODAsMzY1ODksMzY1OTQsMzY3OTEsMzY4MDEsMzY4MTAsMzY4MTIsMzY5MTUsMzkzNjQsMTg2MDUsMzkxMzYsMzczOTUsMTg3MTgsMzc0MTYsMzc0''@;'; put 'put ''NjQsMzc0ODMsMzc1NTMsMzc1NTAsMzc1NjcsMzc2MDMsMzc2MTEsMzc2MTksMzc2MjAsMzc2MjksMzc2OTksMzc3NjQsMzc4MDUsMTg3NTcsMTg3NjksNDA2MzksMzc5MTEsMjEyNDksMzc5MTcsMzc5MzMsMzc5NTAsMTg3OTQsMzc5NzIsMzgwMDksMzgxODksMzgzMDYsMTg4NTUsMzgzODgs''@;'; put 'put ''Mzg0NTEsMTg5MTcsMjY1MjgsMTg5ODAsMzg3MjAsMTg5OTcsMzg4MzQsMzg4NTAsMjIxMDAsMTkxNzIsMjQ4MDgsMzkwOTcsMTkyMjUsMzkxNTMsMjI1OTYsMzkxODIsMzkxOTMsMjA5MTYsMzkxOTYsMzkyMjMsMzkyMzQsMzkyNjEsMzkyNjYsMTkzMTIsMzkzNjUsMTkzNTcsMzk0ODQsMzk2''@;'; put 'put ''OTUsMzEzNjMsMzk3ODUsMzk4MDksMzk5MDEsMzk5MjEsMzk5MjQsMTk1NjUsMzk5NjgsMTQxOTEsMTM4MTc4LDQwMjY1LDM5OTk0LDQwNzAyLDIyMDk2LDQwMzM5LDQwMzgxLDQwMzg0LDQwNDQ0LDM4MTM0LDM2NzkwLDQwNTcxLDQwNjIwLDQwNjI1LDQwNjM3LDQwNjQ2LDM4MTA4LDQwNjc0''@;'; put 'put ''LDQwNjg5LDQwNjk2LDMxNDMyLDQwNzcyLDEzMTIyMCwxMzE3NjcsMTMyZTMsMjY5MDYsMzgwODMsMjI5NTYsMTMyMzExLDIyNTkyLDM4MDgxLDE0MjY1LDEzMjU2NSwxMzI2MjksMTMyNzI2LDEzNjg5MCwyMjM1OSwyOTA0MywxMzM4MjYsMTMzODM3LDEzNDA3OSwyMTYxMCwxOTQ2MTksMTM0''@;'; put 'put ''MDkxLDIxNjYyLDEzNDEzOSwxMzQyMDMsMTM0MjI3LDEzNDI0NSwxMzQyNjgsMjQ4MDcsMTM0Mjg1LDIyMTM4LDEzNDMyNSwxMzQzNjUsMTM0MzgxLDEzNDUxMSwxMzQ1NzgsMTM0NjAwLDI2OTY1LDM5OTgzLDM0NzI1LDEzNDY2MCwxMzQ2NzAsMTM0ODcxLDEzNTA1NiwxMzQ5NTcsMTM0Nzcx''@;'; put 'put ''LDIzNTg0LDEzNTEwMCwyNDA3NSwxMzUyNjAsMTM1MjQ3LDEzNTI4NiwyNjM5OCwxMzUyOTEsMTM1MzA0LDEzNTMxOCwxMzg5NSwxMzUzNTksMTM1Mzc5LDEzNTQ3MSwxMzU0ODMsMjEzNDgsMzM5NjUsMTM1OTA3LDEzNjA1MywxMzU5OTAsMzU3MTMsMTM2NTY3LDEzNjcyOSwxMzcxNTUsMTM3''@;'; put 'put ''MTU5LDIwMDg4LDI4ODU5LDEzNzI2MSwxMzc1NzgsMTM3NzczLDEzNzc5NywxMzgyODIsMTM4MzUyLDEzODQxMiwxMzg5NTIsMjUyODMsMTM4OTY1LDEzOTAyOSwyOTA4MCwyNjcwOSwxMzkzMzMsMjcxMTMsMTQwMjQsMTM5OTAwLDE0MDI0NywxNDAyODIsMTQxMDk4LDE0MTQyNSwxNDE2NDcs''@;'; put 'put ''MzM1MzMsMTQxNjcxLDE0MTcxNSwxNDIwMzcsMzUyMzcsMTQyMDU2LDM2NzY4LDE0MjA5NCwzODg0MCwxNDIxNDMsMzg5ODMsMzk2MTMsMTQyNDEyLG51bGwsMTQyNDcyLDE0MjUxOSwxNTQ2MDAsMTQyNjAwLDE0MjYxMCwxNDI3NzUsMTQyNzQxLDE0MjkxNCwxNDMyMjAsMTQzMzA4LDE0MzQx''@;'; put 'put ''MSwxNDM0NjIsMTQ0MTU5LDE0NDM1MCwyNDQ5NywyNjE4NCwyNjMwMywxNjI0MjUsMTQ0NzQzLDE0NDg4MywyOTE4NSwxNDk5NDYsMzA2NzksMTQ0OTIyLDE0NTE3NCwzMjM5MSwxMzE5MTAsMjI3MDksMjYzODIsMjY5MDQsMTQ2MDg3LDE2MTM2NywxNTU2MTgsMTQ2OTYxLDE0NzEyOSwxNjEy''@;'; put 'put ''NzgsMTM5NDE4LDE4NjQwLDE5MTI4LDE0NzczNywxNjY1NTQsMTQ4MjA2LDE0ODIzNywxNDc1MTUsMTQ4Mjc2LDE0ODM3NCwxNTAwODUsMTMyNTU0LDIwOTQ2LDEzMjYyNSwyMjk0MywxMzg5MjAsMTUyOTQsMTQ2Njg3LDE0ODQ4NCwxNDg2OTQsMjI0MDgsMTQ5MTA4LDE0NzQ3LDE0OTI5NSwx''@;'; put 'put ''NjUzNTIsMTcwNDQxLDE0MTc4LDEzOTcxNSwzNTY3OCwxNjY3MzQsMzkzODIsMTQ5NTIyLDE0OTc1NSwxNTAwMzcsMjkxOTMsMTUwMjA4LDEzNDI2NCwyMjg4NSwxNTEyMDUsMTUxNDMwLDEzMjk4NSwzNjU3MCwxNTE1OTYsMjExMzUsMjIzMzUsMjkwNDEsMTUyMjE3LDE1MjYwMSwxNDcyNzQs''@;'; put 'put ''MTUwMTgzLDIxOTQ4LDE1MjY0NiwxNTI2ODYsMTU4NTQ2LDM3MzMyLDEzNDI3LDE1Mjg5NSwxNjEzMzAsMTUyOTI2LDE4MjAwLDE1MjkzMCwxNTI5MzQsMTUzNTQzLDE0OTgyMywxNTM2OTMsMjA1ODIsMTM1NjMsMTQ0MzMyLDI0Nzk4LDE1Mzg1OSwxODMwMCwxNjYyMTYsMTU0Mjg2LDE1NDUw''@;'; put 'put ''NSwxNTQ2MzAsMTM4NjQwLDIyNDMzLDI5MDA5LDI4NTk4LDE1NTkwNiwxNjI4MzQsMzY5NTAsMTU2MDgyLDE1MTQ1MCwzNTY4MiwxNTY2NzQsMTU2NzQ2LDIzODk5LDE1ODcxMSwzNjY2MiwxNTY4MDQsMTM3NTAwLDM1NTYyLDE1MDAwNiwxNTY4MDgsMTQ3NDM5LDE1Njk0NiwxOTM5MiwxNTcx''@;'; put 'put ''MTksMTU3MzY1LDE0MTA4MywzNzk4OSwxNTM1NjksMjQ5ODEsMjMwNzksMTk0NzY1LDIwNDExLDIyMjAxLDE0ODc2OSwxNTc0MzYsMjAwNzQsMTQ5ODEyLDM4NDg2LDI4MDQ3LDE1ODkwOSwxMzg0OCwzNTE5MSwxNTc1OTMsMTU3ODA2LDE1NjY4OSwxNTc3OTAsMjkxNTEsMTU3ODk1LDMxNTU0''@;'; put 'put ''LDE2ODEyOCwxMzM2NDksMTU3OTkwLDM3MTI0LDE1ODAwOSwzMTMwMSw0MDQzMiwxNTgyMDIsMzk0NjIsMTU4MjUzLDEzOTE5LDE1Njc3NywxMzExMDUsMzExMDcsMTU4MjYwLDE1ODU1NSwyMzg1MiwxNDQ2NjUsMzM3NDMsMTU4NjIxLDE4MTI4LDE1ODg4NCwzMDAxMSwzNDkxNywxNTkxNTAs''@;'; put 'put ''MjI3MTAsMTQxMDgsMTQwNjg1LDE1OTgxOSwxNjAyMDUsMTU0NDQsMTYwMzg0LDE2MDM4OSwzNzUwNSwxMzk2NDIsMTYwMzk1LDM3NjgwLDE2MDQ4NiwxNDk5NjgsMjc3MDUsMzgwNDcsMTYwODQ4LDEzNDkwNCwzNDg1NSwzNTA2MSwxNDE2MDYsMTY0OTc5LDEzNzEzNywyODM0NCwxNTAwNTgs''@;'; put 'put ''MTM3MjQ4LDE0NzU2LDE0MDA5LDIzNTY4LDMxMjAzLDE3NzI3LDI2Mjk0LDE3MTE4MSwxNzAxNDgsMzUxMzksMTYxNzQwLDE2MTg4MCwyMjIzMCwxNjYwNywxMzY3MTQsMTQ3NTMsMTQ1MTk5LDE2NDA3MiwxMzYxMzMsMjkxMDEsMzM2MzgsMTYyMjY5LDE2ODM2MCwyMzE0MywxOTYzOSwxNTk5''@;'; put 'put ''MTksMTY2MzE1LDE2MjMwMSwxNjIzMTQsMTYyNTcxLDE2MzE3NCwxNDc4MzQsMzE1NTUsMzExMDIsMTYzODQ5LDI4NTk3LDE3Mjc2NywyNzEzOSwxNjQ2MzIsMjE0MTAsMTU5MjM5LDM3ODIzLDI2Njc4LDM4NzQ5LDE2NDIwNywxNjM4NzUsMTU4MTMzLDEzNjE3MywxNDM5MTksMTYzOTEyLDIz''@;'; put 'put ''OTQxLDE2Njk2MCwxNjM5NzEsMjIyOTMsMzg5NDcsMTY2MjE3LDIzOTc5LDE0OTg5NiwyNjA0NiwyNzA5MywyMTQ1OCwxNTAxODEsMTQ3MzI5LDE1Mzc3LDI2NDIyLDE2Mzk4NCwxNjQwODQsMTY0MTQyLDEzOTE2OSwxNjQxNzUsMTY0MjMzLDE2NDI3MSwxNjQzNzgsMTY0NjE0LDE2NDY1NSwx''@;'; put 'put ''NjQ3NDYsMTM3NzAsMTY0OTY4LDE2NTU0NiwxODY4MiwyNTU3NCwxNjYyMzAsMzA3MjgsMzc0NjEsMTY2MzI4LDE3Mzk0LDE2NjM3NSwxNzM3NSwxNjYzNzYsMTY2NzI2LDE2Njg2OCwyMzAzMiwxNjY5MjEsMzY2MTksMTY3ODc3LDE2ODE3MiwzMTU2OSwxNjgyMDgsMTY4MjUyLDE1ODYzLDE2''@;'; put 'put ''ODI4NiwxNTAyMTgsMzY4MTYsMjkzMjcsMjIxNTUsMTY5MTkxLDE2OTQ0OSwxNjkzOTIsMTY5NDAwLDE2OTc3OCwxNzAxOTMsMTcwMzEzLDE3MDM0NiwxNzA0MzUsMTcwNTM2LDE3MDc2NiwxNzEzNTQsMTcxNDE5LDMyNDE1LDE3MTc2OCwxNzE4MTEsMTk2MjAsMzgyMTUsMTcyNjkxLDI5MDkw''@;'; put 'put ''LDE3Mjc5OSwxOTg1NywzNjg4MiwxNzM1MTUsMTk4NjgsMTM0MzAwLDM2Nzk4LDIxOTUzLDM2Nzk0LDE0MDQ2NCwzNjc5MywxNTAxNjMsMTc2NzMsMzIzODMsMjg1MDIsMjczMTMsMjAyMDIsMTM1NDAsMTY2NzAwLDE2MTk0OSwxNDEzOCwzNjQ4MCwxMzcyMDUsMTYzODc2LDE2Njc2NCwxNjY4''@;'; put 'put ''MDksMTYyMzY2LDE1NzM1OSwxNTg1MSwxNjEzNjUsMTQ2NjE1LDE1MzE0MSwxNTM5NDIsMjAxMjIsMTU1MjY1LDE1NjI0OCwyMjIwNywxMzQ3NjUsMzYzNjYsMjM0MDUsMTQ3MDgwLDE1MDY4NiwyNTU2NiwyNTI5NiwxMzcyMDYsMTM3MzM5LDI1OTA0LDIyMDYxLDE1NDY5OCwyMTUzMCwxNTIz''@;'; put 'put ''MzcsMTU4MTQsMTcxNDE2LDE5NTgxLDIyMDUwLDIyMDQ2LDMyNTg1LDE1NTM1MiwyMjkwMSwxNDY3NTIsMzQ2NzIsMTk5OTYsMTM1MTQ2LDEzNDQ3MywxNDUwODIsMzMwNDcsNDAyODYsMzYxMjAsMzAyNjcsNDAwMDUsMzAyODYsMzA2NDksMzc3MDEsMjE1NTQsMzMwOTYsMzM1MjcsMjIwNTMs''@;'; put 'put ''MzMwNzQsMzM4MTYsMzI5NTcsMjE5OTQsMzEwNzQsMjIwODMsMjE1MjYsMTM0ODEzLDEzNzc0LDIyMDIxLDIyMDAxLDI2MzUzLDE2NDU3OCwxMzg2OSwzMDAwNCwyMmUzLDIxOTQ2LDIxNjU1LDIxODc0LDEzNDIwOSwxMzQyOTQsMjQyNzIsMTUxODgwLDEzNDc3NCwxNDI0MzQsMTM0ODE4LDQw''@;'; put 'put ''NjE5LDMyMDkwLDIxOTgyLDEzNTI4NSwyNTI0NSwzODc2NSwyMTY1MiwzNjA0NSwyOTE3NCwzNzIzOCwyNTU5NiwyNTUyOSwyNTU5OCwyMTg2NSwxNDIxNDcsNDAwNTAsMTQzMDI3LDIwODkwLDEzNTM1LDEzNDU2NywyMDkwMywyMTU4MSwyMTc5MCwyMTc3OSwzMDMxMCwzNjM5NywxNTc4MzQs''@;'; put 'put ''MzAxMjksMzI5NTAsMzQ4MjAsMzQ2OTQsMzUwMTUsMzMyMDYsMzM4MjAsMTM1MzYxLDE3NjQ0LDI5NDQ0LDE0OTI1NCwyMzQ0MCwzMzU0NywxNTc4NDMsMjIxMzksMTQxMDQ0LDE2MzExOSwxNDc4NzUsMTYzMTg3LDE1OTQ0MCwxNjA0MzgsMzcyMzIsMTM1NjQxLDM3Mzg0LDE0NjY4NCwxNzM3''@;'; put 'put ''MzcsMTM0ODI4LDEzNDkwNSwyOTI4NiwxMzg0MDIsMTgyNTQsMTUxNDkwLDE2MzgzMywxMzUxNDcsMTY2MzQsNDAwMjksMjU4ODcsMTQyNzUyLDE4Njc1LDE0OTQ3MiwxNzEzODgsMTM1MTQ4LDEzNDY2NiwyNDY3NCwxNjExODcsMTM1MTQ5LG51bGwsMTU1NzIwLDEzNTU1OSwyOTA5MSwzMjM5''@;'; put 'put ''OCw0MDI3MiwxOTk5NCwxOTk3MiwxMzY4NywyMzMwOSwyNzgyNiwyMTM1MSwxMzk5NiwxNDgxMiwyMTM3MywxMzk4OSwxNDkwMTYsMjI2ODIsMTUwMzgyLDMzMzI1LDIxNTc5LDIyNDQyLDE1NDI2MSwxMzM0OTcsbnVsbCwxNDkzMCwxNDAzODksMjk1NTYsMTcxNjkyLDE5NzIxLDM5OTE3LDE0''@;'; put 'put ''NjY4NiwxNzE4MjQsMTk1NDcsMTUxNDY1LDE2OTM3NCwxNzE5OTgsMzM4ODQsMTQ2ODcwLDE2MDQzNCwxNTc2MTksMTQ1MTg0LDI1MzkwLDMyMDM3LDE0NzE5MSwxNDY5ODgsMTQ4OTAsMzY4NzIsMjExOTYsMTU5ODgsMTM5NDYsMTc4OTcsMTMyMjM4LDMwMjcyLDIzMjgwLDEzNDgzOCwzMDg0''@;'; put 'put ''MiwxNjM2MzAsMjI2OTUsMTY1NzUsMjIxNDAsMzk4MTksMjM5MjQsMzAyOTIsMTczMTA4LDQwNTgxLDE5NjgxLDMwMjAxLDE0MzMxLDI0ODU3LDE0MzU3OCwxNDg0NjYsbnVsbCwyMjEwOSwxMzU4NDksMjI0MzksMTQ5ODU5LDE3MTUyNiwyMTA0NCwxNTk5MTgsMTM3NDEsMjc3MjIsNDAzMTYs''@;'; put 'put ''MzE4MzAsMzk3MzcsMjI0OTQsMTM3MDY4LDIzNjM1LDI1ODExLDE2OTE2OCwxNTY0NjksMTYwMTAwLDM0NDc3LDEzNDQ0MCwxNTkwMTAsMTUwMjQyLDEzNDUxMyxudWxsLDIwOTkwLDEzOTAyMywyMzk1MCwzODY1OSwxMzg3MDUsNDA1NzcsMzY5NDAsMzE1MTksMzk2ODIsMjM3NjEsMzE2NTEs''@;'; put 'put ''MjUxOTIsMjUzOTcsMzk2NzksMzE2OTUsMzk3MjIsMzE4NzAsMzk3MjYsMzE4MTAsMzE4NzgsMzk5NTcsMzE3NDAsMzk2ODksNDA3MjcsMzk5NjMsMTQ5ODIyLDQwNzk0LDIxODc1LDIzNDkxLDIwNDc3LDQwNjAwLDIwNDY2LDIxMDg4LDE1ODc4LDIxMjAxLDIyMzc1LDIwNTY2LDIyOTY3LDI0''@;'; put 'put ''MDgyLDM4ODU2LDQwMzYzLDM2NzAwLDIxNjA5LDM4ODM2LDM5MjMyLDM4ODQyLDIxMjkyLDI0ODgwLDI2OTI0LDIxNDY2LDM5OTQ2LDQwMTk0LDE5NTE1LDM4NDY1LDI3MDA4LDIwNjQ2LDMwMDIyLDEzNzA2OSwzOTM4NiwyMTEwNyxudWxsLDM3MjA5LDM4NTI5LDM3MjEyLG51bGwsMzcyMDEs''@;'; put 'put ''MTY3NTc1LDI1NDcxLDE1OTAxMSwyNzMzOCwyMjAzMywzNzI2MiwzMDA3NCwyNTIyMSwxMzIwOTIsMjk1MTksMzE4NTYsMTU0NjU3LDE0NjY4NSxudWxsLDE0OTc4NSwzMDQyMiwzOTgzNywyMDAxMCwxMzQzNTYsMzM3MjYsMzQ4ODIsbnVsbCwyMzYyNiwyNzA3MiwyMDcxNywyMjM5NCwyMTAy''@;'; put 'put ''MywyNDA1MywyMDE3NCwyNzY5NywxMzE1NzAsMjAyODEsMjE2NjAsMjE3MjIsMjExNDYsMzYyMjYsMTM4MjIsMjQzMzIsMTM4MTEsbnVsbCwyNzQ3NCwzNzI0NCw0MDg2OSwzOTgzMSwzODk1OCwzOTA5MiwzOTYxMCw0MDYxNiw0MDU4MCwyOTA1MCwzMTUwOCxudWxsLDI3NjQyLDM0ODQwLDMy''@;'; put 'put ''NjMyLG51bGwsMjIwNDgsMTczNjQyLDM2NDcxLDQwNzg3LG51bGwsMzYzMDgsMzY0MzEsNDA0NzYsMzYzNTMsMjUyMTgsMTY0NzMzLDM2MzkyLDM2NDY5LDMxNDQzLDE1MDEzNSwzMTI5NCwzMDkzNiwyNzg4MiwzNTQzMSwzMDIxNSwxNjY0OTAsNDA3NDIsMjc4NTQsMzQ3NzQsMzAxNDcsMTcy''@;'; put 'put ''NzIyLDMwODAzLDE5NDYyNCwzNjEwOCwyOTQxMCwyOTU1MywzNTYyOSwyOTQ0MiwyOTkzNywzNjA3NSwxNTAyMDMsMzQzNTEsMjQ1MDYsMzQ5NzYsMTc1OTEsbnVsbCwxMzcyNzUsMTU5MjM3LG51bGwsMzU0NTQsMTQwNTcxLG51bGwsMjQ4MjksMzAzMTEsMzk2MzksNDAyNjAsMzc3NDIsMzk4''@;'; put 'put ''MjMsMzQ4MDUsbnVsbCwzNDgzMSwzNjA4NywyOTQ4NCwzODY4OSwzOTg1NiwxMzc4MiwyOTM2MiwxOTQ2MywzMTgyNSwzOTI0MiwxNTU5OTMsMjQ5MjEsMTk0NjAsNDA1OTgsMjQ5NTcsbnVsbCwyMjM2NywyNDk0MywyNTI1NCwyNTE0NSwyNTI5NCwxNDk0MCwyNTA1OCwyMTQxOCwxNDQzNzMs''@;'; put 'put ''MjU0NDQsMjY2MjYsMTM3NzgsMjM4OTUsMTY2ODUwLDM2ODI2LDE2NzQ4MSxudWxsLDIwNjk3LDEzODU2NiwzMDk4MiwyMTI5OCwzODQ1NiwxMzQ5NzEsMTY0ODUsbnVsbCwzMDcxOCxudWxsLDMxOTM4LDE1NTQxOCwzMTk2MiwzMTI3NywzMjg3MCwzMjg2NywzMjA3NywyOTk1NywyOTkzOCwz''@;'; put 'put ''NTIyMCwzMzMwNiwyNjM4MCwzMjg2NiwxNjA5MDIsMzI4NTksMjk5MzYsMzMwMjcsMzA1MDAsMzUyMDksMTU3NjQ0LDMwMDM1LDE1OTQ0MSwzNDcyOSwzNDc2NiwzMzIyNCwzNDcwMCwzNTQwMSwzNjAxMywzNTY1MSwzMDUwNywyOTk0NCwzNDAxMCwxMzg3NywyNzA1OCwzNjI2MixudWxsLDM1''@;'; put 'put ''MjQxLDI5ODAwLDI4MDg5LDM0NzUzLDE0NzQ3MywyOTkyNywxNTgzNSwyOTA0NiwyNDc0MCwyNDk4OCwxNTU2OSwyOTAyNiwyNDY5NSxudWxsLDMyNjI1LDE2NjcwMSwyOTI2NCwyNDgwOSwxOTMyNiwyMTAyNCwxNTM4NCwxNDY2MzEsMTU1MzUxLDE2MTM2NiwxNTI4ODEsMTM3NTQwLDEzNTkz''@;'; put 'put ''NCwxNzAyNDMsMTU5MTk2LDE1OTkxNywyMzc0NSwxNTYwNzcsMTY2NDE1LDE0NTAxNSwxMzEzMTAsMTU3NzY2LDE1MTMxMCwxNzc2MiwyMzMyNywxNTY0OTIsNDA3ODQsNDA2MTQsMTU2MjY3LDEyMjg4LDY1MjkyLDEyMjg5LDEyMjkwLDY1Mjk0LDgyMzEsNjUzMDcsNjUzMDYsNjUzMTEsNjUy''@;'; put 'put ''ODEsNjUwNzIsODIzMCw4MjI5LDY1MTA0LDY1MTA1LDY1MTA2LDE4Myw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTM3Miw4MjExLDY1MDczLDgyMTIsNjUwNzUsOTU4OCw2NTA3Niw2NTEwMyw2NTI4OCw2NTI4OSw2NTA3Nyw2NTA3OCw2NTM3MSw2NTM3Myw2NTA3OSw2NTA4MCwxMjMwOCwx''@;'; put 'put ''MjMwOSw2NTA4MSw2NTA4MiwxMjMwNCwxMjMwNSw2NTA4Myw2NTA4NCwxMjI5OCwxMjI5OSw2NTA4NSw2NTA4NiwxMjI5NiwxMjI5Nyw2NTA4Nyw2NTA4OCwxMjMwMCwxMjMwMSw2NTA4OSw2NTA5MCwxMjMwMiwxMjMwMyw2NTA5MSw2NTA5Miw2NTExMyw2NTExNCw2NTExNSw2NTExNiw2NTEx''@;'; put 'put ''Nyw2NTExOCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzE3LDEyMzE4LDgyNDUsODI0Miw2NTI4Myw2NTI4Niw2NTI5MCw4MjUxLDE2NywxMjI5MSw5Njc1LDk2NzksOTY1MSw5NjUwLDk2NzgsOTczNCw5NzMzLDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY2MSw5NjYwLDEyOTYzLDg0NTMsMTc1LDY1''@;'; put 'put ''NTA3LDY1MzQzLDcxNyw2NTA5Nyw2NTA5OCw2NTEwMSw2NTEwMiw2NTA5OSw2NTEwMCw2NTExOSw2NTEyMCw2NTEyMSw2NTI5MSw2NTI5MywyMTUsMjQ3LDE3Nyw4NzMwLDY1MzA4LDY1MzEwLDY1MzA5LDg4MDYsODgwNyw4ODAwLDg3MzQsODc4Niw4ODAxLDY1MTIyLDY1MTIzLDY1MTI0LDY1''@;'; put 'put ''MTI1LDY1MTI2LDY1Mzc0LDg3NDUsODc0Niw4ODY5LDg3MzYsODczNSw4ODk1LDEzMjY2LDEzMjY1LDg3NDcsODc1MCw4NzU3LDg3NTYsOTc5Miw5Nzk0LDg4NTMsODg1Nyw4NTkzLDg1OTUsODU5Miw4NTk0LDg1OTgsODU5OSw4NjAxLDg2MDAsODc0MSw4NzM5LDY1Mjk1LDY1MzQwLDg3MjUs''@;'; put 'put ''NjUxMjgsNjUyODQsNjU1MDksMTIzMDYsNjU1MDQsNjU1MDUsNjUyODUsNjUzMTIsODQ1MSw4NDU3LDY1MTI5LDY1MTMwLDY1MTMxLDEzMjY5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjYyLDEzMjE3LDEzMTk4LDEzMTk5LDEzMjUyLDE3NiwyMDgyNSwyMDgyNywyMDgzMCwyMDgyOSwyMDgzMywy''@;'; put 'put ''MDgzNSwyMTk5MSwyOTkyOSwzMTk1MCw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYxNSw5NjE0LDk2MTMsOTYxMiw5NjExLDk2MTAsOTYwOSw5NTMyLDk1MjQsOTUxNiw5NTA4LDk1MDAsOTYyMCw5NDcyLDk0NzQsOTYyMSw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1''@;'; put 'put ''ODEsOTU4Miw5NTg0LDk1ODMsOTU1Miw5NTY2LDk1NzgsOTU2OSw5Njk4LDk2OTksOTcwMSw5NzAwLDk1ODUsOTU4Niw5NTg3LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1''@;'; put 'put ''NTAsODU1MSw4NTUyLDg1NTMsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcsMTIzMjgsMTIzMjksMjEzMTMsMjEzMTYsMjEzMTcsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUz''@;'; put 'put ''MjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgs''@;'; put 'put ''NjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5''@;'; put 'put ''MzcsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgsMTI1NTks''@;'; put 'put ''MTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNzI5LDcxMyw3''@;'; put 'put ''MTQsNzExLDcxNSw5MjE2LDkyMTcsOTIxOCw5MjE5LDkyMjAsOTIyMSw5MjIyLDkyMjMsOTIyNCw5MjI1LDkyMjYsOTIyNyw5MjI4LDkyMjksOTIzMCw5MjMxLDkyMzIsOTIzMyw5MjM0LDkyMzUsOTIzNiw5MjM3LDkyMzgsOTIzOSw5MjQwLDkyNDEsOTI0Miw5MjQzLDkyNDQsOTI0NSw5MjQ2''@;'; put 'put ''LDkyNDcsOTI0OSw4MzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTk2''@;'; put 'put ''OCwyMDA1NywxOTk2OSwxOTk3MSwyMDAzNSwyMDA2MSwyMDEwMiwyMDEwOCwyMDE1NCwyMDc5OSwyMDgzNywyMDg0MywyMDk2MCwyMDk5MiwyMDk5MywyMTE0NywyMTI2OSwyMTMxMywyMTM0MCwyMTQ0OCwxOTk3NywxOTk3OSwxOTk3NiwxOTk3OCwyMDAxMSwyMDAyNCwyMDk2MSwyMDAzNywy''@;'; put 'put ''MDA0MCwyMDA2MywyMDA2MiwyMDExMCwyMDEyOSwyMDgwMCwyMDk5NSwyMTI0MiwyMTMxNSwyMTQ0OSwyMTQ3NSwyMjMwMywyMjc2MywyMjgwNSwyMjgyMywyMjg5OSwyMzM3NiwyMzM3NywyMzM3OSwyMzU0NCwyMzU2NywyMzU4NiwyMzYwOCwyMzY2NSwyNDAyOSwyNDAzNywyNDA0OSwyNDA1''@;'; put 'put ''MCwyNDA1MSwyNDA2MiwyNDE3OCwyNDMxOCwyNDMzMSwyNDMzOSwyNTE2NSwxOTk4NSwxOTk4NCwxOTk4MSwyMDAxMywyMDAxNiwyMDAyNSwyMDA0MywyMzYwOSwyMDEwNCwyMDExMywyMDExNywyMDExNCwyMDExNiwyMDEzMCwyMDE2MSwyMDE2MCwyMDE2MywyMDE2NiwyMDE2NywyMDE3Mywy''@;'; put 'put ''MDE3MCwyMDE3MSwyMDE2NCwyMDgwMywyMDgwMSwyMDgzOSwyMDg0NSwyMDg0NiwyMDg0NCwyMDg4NywyMDk4MiwyMDk5OCwyMDk5OSwyMWUzLDIxMjQzLDIxMjQ2LDIxMjQ3LDIxMjcwLDIxMzA1LDIxMzIwLDIxMzE5LDIxMzE3LDIxMzQyLDIxMzgwLDIxNDUxLDIxNDUwLDIxNDUzLDIyNzY0''@;'; put 'put ''LDIyODI1LDIyODI3LDIyODI2LDIyODI5LDIzMzgwLDIzNTY5LDIzNTg4LDIzNjEwLDIzNjYzLDI0MDUyLDI0MTg3LDI0MzE5LDI0MzQwLDI0MzQxLDI0NTE1LDI1MDk2LDI1MTQyLDI1MTYzLDI1MTY2LDI1OTAzLDI1OTkxLDI2MDA3LDI2MDIwLDI2MDQxLDI2MDg1LDI2MzUyLDI2Mzc2LDI2''@;'; put 'put ''NDA4LDI3NDI0LDI3NDkwLDI3NTEzLDI3NTk1LDI3NjA0LDI3NjExLDI3NjYzLDI3NzAwLDI4Nzc5LDI5MjI2LDI5MjM4LDI5MjQzLDI5MjU1LDI5MjczLDI5Mjc1LDI5MzU2LDI5NTc5LDE5OTkzLDE5OTkwLDE5OTg5LDE5OTg4LDE5OTkyLDIwMDI3LDIwMDQ1LDIwMDQ3LDIwMDQ2LDIwMTk3''@;'; put 'put ''LDIwMTg0LDIwMTgwLDIwMTgxLDIwMTgyLDIwMTgzLDIwMTk1LDIwMTk2LDIwMTg1LDIwMTkwLDIwODA1LDIwODA0LDIwODczLDIwODc0LDIwOTA4LDIwOTg1LDIwOTg2LDIwOTg0LDIxMDAyLDIxMTUyLDIxMTUxLDIxMjUzLDIxMjU0LDIxMjcxLDIxMjc3LDIwMTkxLDIxMzIyLDIxMzIxLDIx''@;'; put 'put ''MzQ1LDIxMzQ0LDIxMzU5LDIxMzU4LDIxNDM1LDIxNDg3LDIxNDc2LDIxNDkxLDIxNDg0LDIxNDg2LDIxNDgxLDIxNDgwLDIxNTAwLDIxNDk2LDIxNDkzLDIxNDgzLDIxNDc4LDIxNDgyLDIxNDkwLDIxNDg5LDIxNDg4LDIxNDc3LDIxNDg1LDIxNDk5LDIyMjM1LDIyMjM0LDIyODA2LDIyODMw''@;'; put 'put ''LDIyODMzLDIyOTAwLDIyOTAyLDIzMzgxLDIzNDI3LDIzNjEyLDI0MDQwLDI0MDM5LDI0MDM4LDI0MDY2LDI0MDY3LDI0MTc5LDI0MTg4LDI0MzIxLDI0MzQ0LDI0MzQzLDI0NTE3LDI1MDk4LDI1MTcxLDI1MTcyLDI1MTcwLDI1MTY5LDI2MDIxLDI2MDg2LDI2NDE0LDI2NDEyLDI2NDEwLDI2''@;'; put 'put ''NDExLDI2NDEzLDI3NDkxLDI3NTk3LDI3NjY1LDI3NjY0LDI3NzA0LDI3NzEzLDI3NzEyLDI3NzEwLDI5MzU5LDI5NTcyLDI5NTc3LDI5OTE2LDI5OTI2LDI5OTc2LDI5OTgzLDI5OTkyLDI5OTkzLDNlNCwzMDAwMSwzMDAwMiwzMDAwMywzMDA5MSwzMDMzMywzMDM4MiwzMDM5OSwzMDQ0Niwz''@;'; put 'put ''MDY4MywzMDY5MCwzMDcwNywzMTAzNCwzMTE2NiwzMTM0OCwzMTQzNSwxOTk5OCwxOTk5OSwyMDA1MCwyMDA1MSwyMDA3MywyMDEyMSwyMDEzMiwyMDEzNCwyMDEzMywyMDIyMywyMDIzMywyMDI0OSwyMDIzNCwyMDI0NSwyMDIzNywyMDI0MCwyMDI0MSwyMDIzOSwyMDIxMCwyMDIxNCwyMDIx''@;'; put 'put ''OSwyMDIwOCwyMDIxMSwyMDIyMSwyMDIyNSwyMDIzNSwyMDgwOSwyMDgwNywyMDgwNiwyMDgwOCwyMDg0MCwyMDg0OSwyMDg3NywyMDkxMiwyMTAxNSwyMTAwOSwyMTAxMCwyMTAwNiwyMTAxNCwyMTE1NSwyMTI1NiwyMTI4MSwyMTI4MCwyMTM2MCwyMTM2MSwyMTUxMywyMTUxOSwyMTUxNiwy''@;'; put 'put ''MTUxNCwyMTUyMCwyMTUwNSwyMTUxNSwyMTUwOCwyMTUyMSwyMTUxNywyMTUxMiwyMTUwNywyMTUxOCwyMTUxMCwyMTUyMiwyMjI0MCwyMjIzOCwyMjIzNywyMjMyMywyMjMyMCwyMjMxMiwyMjMxNywyMjMxNiwyMjMxOSwyMjMxMywyMjgwOSwyMjgxMCwyMjgzOSwyMjg0MCwyMjkxNiwyMjkw''@;'; put 'put ''NCwyMjkxNSwyMjkwOSwyMjkwNSwyMjkxNCwyMjkxMywyMzM4MywyMzM4NCwyMzQzMSwyMzQzMiwyMzQyOSwyMzQzMywyMzU0NiwyMzU3NCwyMzY3MywyNDAzMCwyNDA3MCwyNDE4MiwyNDE4MCwyNDMzNSwyNDM0NywyNDUzNywyNDUzNCwyNTEwMiwyNTEwMCwyNTEwMSwyNTEwNCwyNTE4Nywy''@;'; put 'put ''NTE3OSwyNTE3NiwyNTkxMCwyNjA4OSwyNjA4OCwyNjA5MiwyNjA5MywyNjM1NCwyNjM1NSwyNjM3NywyNjQyOSwyNjQyMCwyNjQxNywyNjQyMSwyNzQyNSwyNzQ5MiwyNzUxNSwyNzY3MCwyNzc0MSwyNzczNSwyNzczNywyNzc0MywyNzc0NCwyNzcyOCwyNzczMywyNzc0NSwyNzczOSwyNzcy''@;'; put 'put ''NSwyNzcyNiwyODc4NCwyOTI3OSwyOTI3NywzMDMzNCwzMTQ4MSwzMTg1OSwzMTk5MiwzMjU2NiwzMjY1MCwzMjcwMSwzMjc2OSwzMjc3MSwzMjc4MCwzMjc4NiwzMjgxOSwzMjg5NSwzMjkwNSwzMjkwNywzMjkwOCwzMzI1MSwzMzI1OCwzMzI2NywzMzI3NiwzMzI5MiwzMzMwNywzMzMxMSwz''@;'; put 'put ''MzM5MCwzMzM5NCwzMzQwNiwzNDQxMSwzNDg4MCwzNDg5MiwzNDkxNSwzNTE5OSwzODQzMywyMDAxOCwyMDEzNiwyMDMwMSwyMDMwMywyMDI5NSwyMDMxMSwyMDMxOCwyMDI3NiwyMDMxNSwyMDMwOSwyMDI3MiwyMDMwNCwyMDMwNSwyMDI4NSwyMDI4MiwyMDI4MCwyMDI5MSwyMDMwOCwyMDI4''@;'; put 'put ''NCwyMDI5NCwyMDMyMywyMDMxNiwyMDMyMCwyMDI3MSwyMDMwMiwyMDI3OCwyMDMxMywyMDMxNywyMDI5NiwyMDMxNCwyMDgxMiwyMDgxMSwyMDgxMywyMDg1MywyMDkxOCwyMDkxOSwyMTAyOSwyMTAyOCwyMTAzMywyMTAzNCwyMTAzMiwyMTE2MywyMTE2MSwyMTE2MiwyMTE2NCwyMTI4Mywy''@;'; put 'put ''MTM2MywyMTM2NSwyMTUzMywyMTU0OSwyMTUzNCwyMTU2NiwyMTU0MiwyMTU4MiwyMTU0MywyMTU3NCwyMTU3MSwyMTU1NSwyMTU3NiwyMTU3MCwyMTUzMSwyMTU0NSwyMTU3OCwyMTU2MSwyMTU2MywyMTU2MCwyMTU1MCwyMTU1NywyMTU1OCwyMTUzNiwyMTU2NCwyMTU2OCwyMTU1MywyMTU0''@;'; put 'put ''NywyMTUzNSwyMTU0OCwyMjI1MCwyMjI1NiwyMjI0NCwyMjI1MSwyMjM0NiwyMjM1MywyMjMzNiwyMjM0OSwyMjM0MywyMjM1MCwyMjMzNCwyMjM1MiwyMjM1MSwyMjMzMSwyMjc2NywyMjg0NiwyMjk0MSwyMjkzMCwyMjk1MiwyMjk0MiwyMjk0NywyMjkzNywyMjkzNCwyMjkyNSwyMjk0OCwy''@;'; put 'put ''MjkzMSwyMjkyMiwyMjk0OSwyMzM4OSwyMzM4OCwyMzM4NiwyMzM4NywyMzQzNiwyMzQzNSwyMzQzOSwyMzU5NiwyMzYxNiwyMzYxNywyMzYxNSwyMzYxNCwyMzY5NiwyMzY5NywyMzcwMCwyMzY5MiwyNDA0MywyNDA3NiwyNDIwNywyNDE5OSwyNDIwMiwyNDMxMSwyNDMyNCwyNDM1MSwyNDQy''@;'; put 'put ''MCwyNDQxOCwyNDQzOSwyNDQ0MSwyNDUzNiwyNDUyNCwyNDUzNSwyNDUyNSwyNDU2MSwyNDU1NSwyNDU2OCwyNDU1NCwyNTEwNiwyNTEwNSwyNTIyMCwyNTIzOSwyNTIzOCwyNTIxNiwyNTIwNiwyNTIyNSwyNTE5NywyNTIyNiwyNTIxMiwyNTIxNCwyNTIwOSwyNTIwMywyNTIzNCwyNTE5OSwy''@;'; put 'put ''NTI0MCwyNTE5OCwyNTIzNywyNTIzNSwyNTIzMywyNTIyMiwyNTkxMywyNTkxNSwyNTkxMiwyNjA5NywyNjM1NiwyNjQ2MywyNjQ0NiwyNjQ0NywyNjQ0OCwyNjQ0OSwyNjQ2MCwyNjQ1NCwyNjQ2MiwyNjQ0MSwyNjQzOCwyNjQ2NCwyNjQ1MSwyNjQ1NSwyNzQ5MywyNzU5OSwyNzcxNCwyNzc0''@;'; put 'put ''MiwyNzgwMSwyNzc3NywyNzc4NCwyNzc4NSwyNzc4MSwyNzgwMywyNzc1NCwyNzc3MCwyNzc5MiwyNzc2MCwyNzc4OCwyNzc1MiwyNzc5OCwyNzc5NCwyNzc3MywyNzc3OSwyNzc2MiwyNzc3NCwyNzc2NCwyNzc4MiwyNzc2NiwyNzc4OSwyNzc5NiwyNzgwMCwyNzc3OCwyODc5MCwyODc5Niwy''@;'; put 'put ''ODc5NywyODc5MiwyOTI4MiwyOTI4MSwyOTI4MCwyOTM4MCwyOTM3OCwyOTU5MCwyOTk5NiwyOTk5NSwzMDAwNywzMDAwOCwzMDMzOCwzMDQ0NywzMDY5MSwzMTE2OSwzMTE2OCwzMTE2NywzMTM1MCwzMTk5NSwzMjU5NywzMjkxOCwzMjkxNSwzMjkyNSwzMjkyMCwzMjkyMywzMjkyMiwzMjk0''@;'; put 'put ''NiwzMzM5MSwzMzQyNiwzMzQxOSwzMzQyMSwzNTIxMSwzNTI4MiwzNTMyOCwzNTg5NSwzNTkxMCwzNTkyNSwzNTk5NywzNjE5NiwzNjIwOCwzNjI3NSwzNjUyMywzNjU1NCwzNjc2MywzNjc4NCwzNjgwMiwzNjgwNiwzNjgwNSwzNjgwNCwyNDAzMywzNzAwOSwzNzAyNiwzNzAzNCwzNzAzMCwz''@;'; put 'put ''NzAyNywzNzE5MywzNzMxOCwzNzMyNCwzODQ1MCwzODQ0NiwzODQ0OSwzODQ0MiwzODQ0NCwyMDAwNiwyMDA1NCwyMDA4MywyMDEwNywyMDEyMywyMDEyNiwyMDEzOSwyMDE0MCwyMDMzNSwyMDM4MSwyMDM2NSwyMDMzOSwyMDM1MSwyMDMzMiwyMDM3OSwyMDM2MywyMDM1OCwyMDM1NSwyMDMz''@;'; put 'put ''NiwyMDM0MSwyMDM2MCwyMDMyOSwyMDM0NywyMDM3NCwyMDM1MCwyMDM2NywyMDM2OSwyMDM0NiwyMDgyMCwyMDgxOCwyMDgyMSwyMDg0MSwyMDg1NSwyMDg1NCwyMDg1NiwyMDkyNSwyMDk4OSwyMTA1MSwyMTA0OCwyMTA0NywyMTA1MCwyMTA0MCwyMTAzOCwyMTA0NiwyMTA1NywyMTE4Miwy''@;'; put 'put ''MTE3OSwyMTMzMCwyMTMzMiwyMTMzMSwyMTMyOSwyMTM1MCwyMTM2NywyMTM2OCwyMTM2OSwyMTQ2MiwyMTQ2MCwyMTQ2MywyMTYxOSwyMTYyMSwyMTY1NCwyMTYyNCwyMTY1MywyMTYzMiwyMTYyNywyMTYyMywyMTYzNiwyMTY1MCwyMTYzOCwyMTYyOCwyMTY0OCwyMTYxNywyMTYyMiwyMTY0''@;'; put 'put ''NCwyMTY1OCwyMTYwMiwyMTYwOCwyMTY0MywyMTYyOSwyMTY0NiwyMjI2NiwyMjQwMywyMjM5MSwyMjM3OCwyMjM3NywyMjM2OSwyMjM3NCwyMjM3MiwyMjM5NiwyMjgxMiwyMjg1NywyMjg1NSwyMjg1NiwyMjg1MiwyMjg2OCwyMjk3NCwyMjk3MSwyMjk5NiwyMjk2OSwyMjk1OCwyMjk5Mywy''@;'; put 'put ''Mjk4MiwyMjk5MiwyMjk4OSwyMjk4NywyMjk5NSwyMjk4NiwyMjk1OSwyMjk2MywyMjk5NCwyMjk4MSwyMzM5MSwyMzM5NiwyMzM5NSwyMzQ0NywyMzQ1MCwyMzQ0OCwyMzQ1MiwyMzQ0OSwyMzQ1MSwyMzU3OCwyMzYyNCwyMzYyMSwyMzYyMiwyMzczNSwyMzcxMywyMzczNiwyMzcyMSwyMzcy''@;'; put 'put ''MywyMzcyOSwyMzczMSwyNDA4OCwyNDA5MCwyNDA4NiwyNDA4NSwyNDA5MSwyNDA4MSwyNDE4NCwyNDIxOCwyNDIxNSwyNDIyMCwyNDIxMywyNDIxNCwyNDMxMCwyNDM1OCwyNDM1OSwyNDM2MSwyNDQ0OCwyNDQ0OSwyNDQ0NywyNDQ0NCwyNDU0MSwyNDU0NCwyNDU3MywyNDU2NSwyNDU3NSwy''@;'; put 'put ''NDU5MSwyNDU5NiwyNDYyMywyNDYyOSwyNDU5OCwyNDYxOCwyNDU5NywyNDYwOSwyNDYxNSwyNDYxNywyNDYxOSwyNDYwMywyNTExMCwyNTEwOSwyNTE1MSwyNTE1MCwyNTE1MiwyNTIxNSwyNTI4OSwyNTI5MiwyNTI4NCwyNTI3OSwyNTI4MiwyNTI3MywyNTI5OCwyNTMwNywyNTI1OSwyNTI5''@;'; put 'put ''OSwyNTMwMCwyNTI5MSwyNTI4OCwyNTI1NiwyNTI3NywyNTI3NiwyNTI5NiwyNTMwNSwyNTI4NywyNTI5MywyNTI2OSwyNTMwNiwyNTI2NSwyNTMwNCwyNTMwMiwyNTMwMywyNTI4NiwyNTI2MCwyNTI5NCwyNTkxOCwyNjAyMywyNjA0NCwyNjEwNiwyNjEzMiwyNjEzMSwyNjEyNCwyNjExOCwy''@;'; put 'put ''NjExNCwyNjEyNiwyNjExMiwyNjEyNywyNjEzMywyNjEyMiwyNjExOSwyNjM4MSwyNjM3OSwyNjQ3NywyNjUwNywyNjUxNywyNjQ4MSwyNjUyNCwyNjQ4MywyNjQ4NywyNjUwMywyNjUyNSwyNjUxOSwyNjQ3OSwyNjQ4MCwyNjQ5NSwyNjUwNSwyNjQ5NCwyNjUxMiwyNjQ4NSwyNjUyMiwyNjUx''@;'; put 'put ''NSwyNjQ5MiwyNjQ3NCwyNjQ4MiwyNzQyNywyNzQ5NCwyNzQ5NSwyNzUxOSwyNzY2NywyNzY3NSwyNzg3NSwyNzg4MCwyNzg5MSwyNzgyNSwyNzg1MiwyNzg3NywyNzgyNywyNzgzNywyNzgzOCwyNzgzNiwyNzg3NCwyNzgxOSwyNzg2MSwyNzg1OSwyNzgzMiwyNzg0NCwyNzgzMywyNzg0MSwy''@;'; put 'put ''NzgyMiwyNzg2MywyNzg0NSwyNzg4OSwyNzgzOSwyNzgzNSwyNzg3MywyNzg2NywyNzg1MCwyNzgyMCwyNzg4NywyNzg2OCwyNzg2MiwyNzg3MiwyODgyMSwyODgxNCwyODgxOCwyODgxMCwyODgyNSwyOTIyOCwyOTIyOSwyOTI0MCwyOTI1NiwyOTI4NywyOTI4OSwyOTM3NiwyOTM5MCwyOTQw''@;'; put 'put ''MSwyOTM5OSwyOTM5MiwyOTYwOSwyOTYwOCwyOTU5OSwyOTYxMSwyOTYwNSwzMDAxMywzMDEwOSwzMDEwNSwzMDEwNiwzMDM0MCwzMDQwMiwzMDQ1MCwzMDQ1MiwzMDY5MywzMDcxNywzMTAzOCwzMTA0MCwzMTA0MSwzMTE3NywzMTE3NiwzMTM1NCwzMTM1MywzMTQ4MiwzMTk5OCwzMjU5Niwz''@;'; put 'put ''MjY1MiwzMjY1MSwzMjc3MywzMjk1NCwzMjkzMywzMjkzMCwzMjk0NSwzMjkyOSwzMjkzOSwzMjkzNywzMjk0OCwzMjkzOCwzMjk0MywzMzI1MywzMzI3OCwzMzI5MywzMzQ1OSwzMzQzNywzMzQzMywzMzQ1MywzMzQ2OSwzMzQzOSwzMzQ2NSwzMzQ1NywzMzQ1MiwzMzQ0NSwzMzQ1NSwzMzQ2''@;'; put 'put ''NCwzMzQ0MywzMzQ1NiwzMzQ3MCwzMzQ2MywzNDM4MiwzNDQxNywyMTAyMSwzNDkyMCwzNjU1NSwzNjgxNCwzNjgyMCwzNjgxNywzNzA0NSwzNzA0OCwzNzA0MSwzNzA0NiwzNzMxOSwzNzMyOSwzODI2MywzODI3MiwzODQyOCwzODQ2NCwzODQ2MywzODQ1OSwzODQ2OCwzODQ2NiwzODU4NSwz''@;'; put 'put ''ODYzMiwzODczOCwzODc1MCwyMDEyNywyMDE0MSwyMDE0MiwyMDQ0OSwyMDQwNSwyMDM5OSwyMDQxNSwyMDQ0OCwyMDQzMywyMDQzMSwyMDQ0NSwyMDQxOSwyMDQwNiwyMDQ0MCwyMDQ0NywyMDQyNiwyMDQzOSwyMDM5OCwyMDQzMiwyMDQyMCwyMDQxOCwyMDQ0MiwyMDQzMCwyMDQ0NiwyMDQw''@;'; put 'put ''NywyMDgyMywyMDg4MiwyMDg4MSwyMDg5NiwyMTA3MCwyMTA1OSwyMTA2NiwyMTA2OSwyMTA2OCwyMTA2NywyMTA2MywyMTE5MSwyMTE5MywyMTE4NywyMTE4NSwyMTI2MSwyMTMzNSwyMTM3MSwyMTQwMiwyMTQ2NywyMTY3NiwyMTY5NiwyMTY3MiwyMTcxMCwyMTcwNSwyMTY4OCwyMTY3MCwy''@;'; put 'put ''MTY4MywyMTcwMywyMTY5OCwyMTY5MywyMTY3NCwyMTY5NywyMTcwMCwyMTcwNCwyMTY3OSwyMTY3NSwyMTY4MSwyMTY5MSwyMTY3MywyMTY3MSwyMTY5NSwyMjI3MSwyMjQwMiwyMjQxMSwyMjQzMiwyMjQzNSwyMjQzNCwyMjQ3OCwyMjQ0NiwyMjQxOSwyMjg2OSwyMjg2NSwyMjg2MywyMjg2''@;'; put 'put ''MiwyMjg2NCwyMzAwNCwyM2UzLDIzMDM5LDIzMDExLDIzMDE2LDIzMDQzLDIzMDEzLDIzMDE4LDIzMDAyLDIzMDE0LDIzMDQxLDIzMDM1LDIzNDAxLDIzNDU5LDIzNDYyLDIzNDYwLDIzNDU4LDIzNDYxLDIzNTUzLDIzNjMwLDIzNjMxLDIzNjI5LDIzNjI3LDIzNzY5LDIzNzYyLDI0MDU1LDI0''@;'; put 'put ''MDkzLDI0MTAxLDI0MDk1LDI0MTg5LDI0MjI0LDI0MjMwLDI0MzE0LDI0MzI4LDI0MzY1LDI0NDIxLDI0NDU2LDI0NDUzLDI0NDU4LDI0NDU5LDI0NDU1LDI0NDYwLDI0NDU3LDI0NTk0LDI0NjA1LDI0NjA4LDI0NjEzLDI0NTkwLDI0NjE2LDI0NjUzLDI0Njg4LDI0NjgwLDI0Njc0LDI0NjQ2''@;'; put 'put ''LDI0NjQzLDI0Njg0LDI0NjgzLDI0NjgyLDI0Njc2LDI1MTUzLDI1MzA4LDI1MzY2LDI1MzUzLDI1MzQwLDI1MzI1LDI1MzQ1LDI1MzI2LDI1MzQxLDI1MzUxLDI1MzI5LDI1MzM1LDI1MzI3LDI1MzI0LDI1MzQyLDI1MzMyLDI1MzYxLDI1MzQ2LDI1OTE5LDI1OTI1LDI2MDI3LDI2MDQ1LDI2''@;'; put 'put ''MDgyLDI2MTQ5LDI2MTU3LDI2MTQ0LDI2MTUxLDI2MTU5LDI2MTQzLDI2MTUyLDI2MTYxLDI2MTQ4LDI2MzU5LDI2NjIzLDI2NTc5LDI2NjA5LDI2NTgwLDI2NTc2LDI2NjA0LDI2NTUwLDI2NTQzLDI2NjEzLDI2NjAxLDI2NjA3LDI2NTY0LDI2NTc3LDI2NTQ4LDI2NTg2LDI2NTk3LDI2NTUy''@;'; put 'put ''LDI2NTc1LDI2NTkwLDI2NjExLDI2NTQ0LDI2NTg1LDI2NTk0LDI2NTg5LDI2NTc4LDI3NDk4LDI3NTIzLDI3NTI2LDI3NTczLDI3NjAyLDI3NjA3LDI3Njc5LDI3ODQ5LDI3OTE1LDI3OTU0LDI3OTQ2LDI3OTY5LDI3OTQxLDI3OTE2LDI3OTUzLDI3OTM0LDI3OTI3LDI3OTYzLDI3OTY1LDI3''@;'; put 'put ''OTY2LDI3OTU4LDI3OTMxLDI3ODkzLDI3OTYxLDI3OTQzLDI3OTYwLDI3OTQ1LDI3OTUwLDI3OTU3LDI3OTE4LDI3OTQ3LDI4ODQzLDI4ODU4LDI4ODUxLDI4ODQ0LDI4ODQ3LDI4ODQ1LDI4ODU2LDI4ODQ2LDI4ODM2LDI5MjMyLDI5Mjk4LDI5Mjk1LDI5MzAwLDI5NDE3LDI5NDA4LDI5NDA5''@;'; put 'put ''LDI5NjIzLDI5NjQyLDI5NjI3LDI5NjE4LDI5NjQ1LDI5NjMyLDI5NjE5LDI5OTc4LDI5OTk3LDMwMDMxLDMwMDI4LDMwMDMwLDMwMDI3LDMwMTIzLDMwMTE2LDMwMTE3LDMwMTE0LDMwMTE1LDMwMzI4LDMwMzQyLDMwMzQzLDMwMzQ0LDMwNDA4LDMwNDA2LDMwNDAzLDMwNDA1LDMwNDY1LDMw''@;'; put 'put ''NDU3LDMwNDU2LDMwNDczLDMwNDc1LDMwNDYyLDMwNDYwLDMwNDcxLDMwNjg0LDMwNzIyLDMwNzQwLDMwNzMyLDMwNzMzLDMxMDQ2LDMxMDQ5LDMxMDQ4LDMxMDQ3LDMxMTYxLDMxMTYyLDMxMTg1LDMxMTg2LDMxMTc5LDMxMzU5LDMxMzYxLDMxNDg3LDMxNDg1LDMxODY5LDMyMDAyLDMyMDA1''@;'; put 'put ''LDMyZTMsMzIwMDksMzIwMDcsMzIwMDQsMzIwMDYsMzI1NjgsMzI2NTQsMzI3MDMsMzI3NzIsMzI3ODQsMzI3ODEsMzI3ODUsMzI4MjIsMzI5ODIsMzI5OTcsMzI5ODYsMzI5NjMsMzI5NjQsMzI5NzIsMzI5OTMsMzI5ODcsMzI5NzQsMzI5OTAsMzI5OTYsMzI5ODksMzMyNjgsMzMzMTQsMzM1''@;'; put 'put ''MTEsMzM1MzksMzM1NDEsMzM1MDcsMzM0OTksMzM1MTAsMzM1NDAsMzM1MDksMzM1MzgsMzM1NDUsMzM0OTAsMzM0OTUsMzM1MjEsMzM1MzcsMzM1MDAsMzM0OTIsMzM0ODksMzM1MDIsMzM0OTEsMzM1MDMsMzM1MTksMzM1NDIsMzQzODQsMzQ0MjUsMzQ0MjcsMzQ0MjYsMzQ4OTMsMzQ5MjMs''@;'; put 'put ''MzUyMDEsMzUyODQsMzUzMzYsMzUzMzAsMzUzMzEsMzU5OTgsMzZlMywzNjIxMiwzNjIxMSwzNjI3NiwzNjU1NywzNjU1NiwzNjg0OCwzNjgzOCwzNjgzNCwzNjg0MiwzNjgzNywzNjg0NSwzNjg0MywzNjgzNiwzNjg0MCwzNzA2NiwzNzA3MCwzNzA1NywzNzA1OSwzNzE5NSwzNzE5NCwzNzMy''@;'; put 'put ''NSwzODI3NCwzODQ4MCwzODQ3NSwzODQ3NiwzODQ3NywzODc1NCwzODc2MSwzODg1OSwzODg5MywzODg5OSwzODkxMywzOTA4MCwzOTEzMSwzOTEzNSwzOTMxOCwzOTMyMSwyMDA1NiwyMDE0NywyMDQ5MiwyMDQ5MywyMDUxNSwyMDQ2MywyMDUxOCwyMDUxNywyMDQ3MiwyMDUyMSwyMDUwMiwy''@;'; put 'put ''MDQ4NiwyMDU0MCwyMDUxMSwyMDUwNiwyMDQ5OCwyMDQ5NywyMDQ3NCwyMDQ4MCwyMDUwMCwyMDUyMCwyMDQ2NSwyMDUxMywyMDQ5MSwyMDUwNSwyMDUwNCwyMDQ2NywyMDQ2MiwyMDUyNSwyMDUyMiwyMDQ3OCwyMDUyMywyMDQ4OSwyMDg2MCwyMDkwMCwyMDkwMSwyMDg5OCwyMDk0MSwyMDk0''@;'; put 'put ''MCwyMDkzNCwyMDkzOSwyMTA3OCwyMTA4NCwyMTA3NiwyMTA4MywyMTA4NSwyMTI5MCwyMTM3NSwyMTQwNywyMTQwNSwyMTQ3MSwyMTczNiwyMTc3NiwyMTc2MSwyMTgxNSwyMTc1NiwyMTczMywyMTc0NiwyMTc2NiwyMTc1NCwyMTc4MCwyMTczNywyMTc0MSwyMTcyOSwyMTc2OSwyMTc0Miwy''@;'; put 'put ''MTczOCwyMTczNCwyMTc5OSwyMTc2NywyMTc1NywyMTc3NSwyMjI3NSwyMjI3NiwyMjQ2NiwyMjQ4NCwyMjQ3NSwyMjQ2NywyMjUzNywyMjc5OSwyMjg3MSwyMjg3MiwyMjg3NCwyMzA1NywyMzA2NCwyMzA2OCwyMzA3MSwyMzA2NywyMzA1OSwyMzAyMCwyMzA3MiwyMzA3NSwyMzA4MSwyMzA3''@;'; put 'put ''NywyMzA1MiwyMzA0OSwyMzQwMywyMzY0MCwyMzQ3MiwyMzQ3NSwyMzQ3OCwyMzQ3NiwyMzQ3MCwyMzQ3NywyMzQ4MSwyMzQ4MCwyMzU1NiwyMzYzMywyMzYzNywyMzYzMiwyMzc4OSwyMzgwNSwyMzgwMywyMzc4NiwyMzc4NCwyMzc5MiwyMzc5OCwyMzgwOSwyMzc5NiwyNDA0NiwyNDEwOSwy''@;'; put 'put ''NDEwNywyNDIzNSwyNDIzNywyNDIzMSwyNDM2OSwyNDQ2NiwyNDQ2NSwyNDQ2NCwyNDY2NSwyNDY3NSwyNDY3NywyNDY1NiwyNDY2MSwyNDY4NSwyNDY4MSwyNDY4NywyNDcwOCwyNDczNSwyNDczMCwyNDcxNywyNDcyNCwyNDcxNiwyNDcwOSwyNDcyNiwyNTE1OSwyNTMzMSwyNTM1MiwyNTM0''@;'; put 'put ''MywyNTQyMiwyNTQwNiwyNTM5MSwyNTQyOSwyNTQxMCwyNTQxNCwyNTQyMywyNTQxNywyNTQwMiwyNTQyNCwyNTQwNSwyNTM4NiwyNTM4NywyNTM4NCwyNTQyMSwyNTQyMCwyNTkyOCwyNTkyOSwyNjAwOSwyNjA0OSwyNjA1MywyNjE3OCwyNjE4NSwyNjE5MSwyNjE3OSwyNjE5NCwyNjE4OCwy''@;'; put 'put ''NjE4MSwyNjE3NywyNjM2MCwyNjM4OCwyNjM4OSwyNjM5MSwyNjY1NywyNjY4MCwyNjY5NiwyNjY5NCwyNjcwNywyNjY4MSwyNjY5MCwyNjcwOCwyNjY2NSwyNjgwMywyNjY0NywyNjcwMCwyNjcwNSwyNjY4NSwyNjYxMiwyNjcwNCwyNjY4OCwyNjY4NCwyNjY5MSwyNjY2NiwyNjY5MywyNjY0''@;'; put 'put ''MywyNjY0OCwyNjY4OSwyNzUzMCwyNzUyOSwyNzU3NSwyNzY4MywyNzY4NywyNzY4OCwyNzY4NiwyNzY4NCwyNzg4OCwyODAxMCwyODA1MywyODA0MCwyODAzOSwyODAwNiwyODAyNCwyODAyMywyNzk5MywyODA1MSwyODAxMiwyODA0MSwyODAxNCwyNzk5NCwyODAyMCwyODAwOSwyODA0NCwy''@;'; put 'put ''ODA0MiwyODAyNSwyODAzNywyODAwNSwyODA1MiwyODg3NCwyODg4OCwyODkwMCwyODg4OSwyODg3MiwyODg3OSwyOTI0MSwyOTMwNSwyOTQzNiwyOTQzMywyOTQzNywyOTQzMiwyOTQzMSwyOTU3NCwyOTY3NywyOTcwNSwyOTY3OCwyOTY2NCwyOTY3NCwyOTY2MiwzMDAzNiwzMDA0NSwzMDA0''@;'; put 'put ''NCwzMDA0MiwzMDA0MSwzMDE0MiwzMDE0OSwzMDE1MSwzMDEzMCwzMDEzMSwzMDE0MSwzMDE0MCwzMDEzNywzMDE0NiwzMDEzNiwzMDM0NywzMDM4NCwzMDQxMCwzMDQxMywzMDQxNCwzMDUwNSwzMDQ5NSwzMDQ5NiwzMDUwNCwzMDY5NywzMDc2OCwzMDc1OSwzMDc3NiwzMDc0OSwzMDc3Miwz''@;'; put 'put ''MDc3NSwzMDc1NywzMDc2NSwzMDc1MiwzMDc1MSwzMDc3MCwzMTA2MSwzMTA1NiwzMTA3MiwzMTA3MSwzMTA2MiwzMTA3MCwzMTA2OSwzMTA2MywzMTA2NiwzMTIwNCwzMTIwMywzMTIwNywzMTE5OSwzMTIwNiwzMTIwOSwzMTE5MiwzMTM2NCwzMTM2OCwzMTQ0OSwzMTQ5NCwzMTUwNSwzMTg4''@;'; put 'put ''MSwzMjAzMywzMjAyMywzMjAxMSwzMjAxMCwzMjAzMiwzMjAzNCwzMjAyMCwzMjAxNiwzMjAyMSwzMjAyNiwzMjAyOCwzMjAxMywzMjAyNSwzMjAyNywzMjU3MCwzMjYwNywzMjY2MCwzMjcwOSwzMjcwNSwzMjc3NCwzMjc5MiwzMjc4OSwzMjc5MywzMjc5MSwzMjgyOSwzMjgzMSwzMzAwOSwz''@;'; put 'put ''MzAyNiwzMzAwOCwzMzAyOSwzMzAwNSwzMzAxMiwzMzAzMCwzMzAxNiwzMzAxMSwzMzAzMiwzMzAyMSwzMzAzNCwzMzAyMCwzMzAwNywzMzI2MSwzMzI2MCwzMzI4MCwzMzI5NiwzMzMyMiwzMzMyMywzMzMyMCwzMzMyNCwzMzQ2NywzMzU3OSwzMzYxOCwzMzYyMCwzMzYxMCwzMzU5MiwzMzYx''@;'; put 'put ''NiwzMzYwOSwzMzU4OSwzMzU4OCwzMzYxNSwzMzU4NiwzMzU5MywzMzU5MCwzMzU1OSwzMzYwMCwzMzU4NSwzMzU3NiwzMzYwMywzNDM4OCwzNDQ0MiwzNDQ3NCwzNDQ1MSwzNDQ2OCwzNDQ3MywzNDQ0NCwzNDQ2NywzNDQ2MCwzNDkyOCwzNDkzNSwzNDk0NSwzNDk0NiwzNDk0MSwzNDkzNywz''@;'; put 'put ''NTM1MiwzNTM0NCwzNTM0MiwzNTM0MCwzNTM0OSwzNTMzOCwzNTM1MSwzNTM0NywzNTM1MCwzNTM0MywzNTM0NSwzNTkxMiwzNTk2MiwzNTk2MSwzNjAwMSwzNjAwMiwzNjIxNSwzNjUyNCwzNjU2MiwzNjU2NCwzNjU1OSwzNjc4NSwzNjg2NSwzNjg3MCwzNjg1NSwzNjg2NCwzNjg1OCwzNjg1''@;'; put 'put ''MiwzNjg2NywzNjg2MSwzNjg2OSwzNjg1NiwzNzAxMywzNzA4OSwzNzA4NSwzNzA5MCwzNzIwMiwzNzE5NywzNzE5NiwzNzMzNiwzNzM0MSwzNzMzNSwzNzM0MCwzNzMzNywzODI3NSwzODQ5OCwzODQ5OSwzODQ5NywzODQ5MSwzODQ5MywzODUwMCwzODQ4OCwzODQ5NCwzODU4NywzOTEzOCwz''@;'; put 'put ''OTM0MCwzOTU5MiwzOTY0MCwzOTcxNywzOTczMCwzOTc0MCwyMDA5NCwyMDYwMiwyMDYwNSwyMDU3MiwyMDU1MSwyMDU0NywyMDU1NiwyMDU3MCwyMDU1MywyMDU4MSwyMDU5OCwyMDU1OCwyMDU2NSwyMDU5NywyMDU5NiwyMDU5OSwyMDU1OSwyMDQ5NSwyMDU5MSwyMDU4OSwyMDgyOCwyMDg4''@;'; put 'put ''NSwyMDk3NiwyMTA5OCwyMTEwMywyMTIwMiwyMTIwOSwyMTIwOCwyMTIwNSwyMTI2NCwyMTI2MywyMTI3MywyMTMxMSwyMTMxMiwyMTMxMCwyMTQ0MywyNjM2NCwyMTgzMCwyMTg2NiwyMTg2MiwyMTgyOCwyMTg1NCwyMTg1NywyMTgyNywyMTgzNCwyMTgwOSwyMTg0NiwyMTgzOSwyMTg0NSwy''@;'; put 'put ''MTgwNywyMTg2MCwyMTgxNiwyMTgwNiwyMTg1MiwyMTgwNCwyMTg1OSwyMTgxMSwyMTgyNSwyMTg0NywyMjI4MCwyMjI4MywyMjI4MSwyMjQ5NSwyMjUzMywyMjUzOCwyMjUzNCwyMjQ5NiwyMjUwMCwyMjUyMiwyMjUzMCwyMjU4MSwyMjUxOSwyMjUyMSwyMjgxNiwyMjg4MiwyMzA5NCwyMzEw''@;'; put 'put ''NSwyMzExMywyMzE0MiwyMzE0NiwyMzEwNCwyMzEwMCwyMzEzOCwyMzEzMCwyMzExMCwyMzExNCwyMzQwOCwyMzQ5NSwyMzQ5MywyMzQ5MiwyMzQ5MCwyMzQ4NywyMzQ5NCwyMzU2MSwyMzU2MCwyMzU1OSwyMzY0OCwyMzY0NCwyMzY0NSwyMzgxNSwyMzgxNCwyMzgyMiwyMzgzNSwyMzgzMCwy''@;'; put 'put ''Mzg0MiwyMzgyNSwyMzg0OSwyMzgyOCwyMzgzMywyMzg0NCwyMzg0NywyMzgzMSwyNDAzNCwyNDEyMCwyNDExOCwyNDExNSwyNDExOSwyNDI0NywyNDI0OCwyNDI0NiwyNDI0NSwyNDI1NCwyNDM3MywyNDM3NSwyNDQwNywyNDQyOCwyNDQyNSwyNDQyNywyNDQ3MSwyNDQ3MywyNDQ3OCwyNDQ3''@;'; put 'put ''MiwyNDQ4MSwyNDQ4MCwyNDQ3NiwyNDcwMywyNDczOSwyNDcxMywyNDczNiwyNDc0NCwyNDc3OSwyNDc1NiwyNDgwNiwyNDc2NSwyNDc3MywyNDc2MywyNDc1NywyNDc5NiwyNDc2NCwyNDc5MiwyNDc4OSwyNDc3NCwyNDc5OSwyNDc2MCwyNDc5NCwyNDc3NSwyNTExNCwyNTExNSwyNTE2MCwy''@;'; put 'put ''NTUwNCwyNTUxMSwyNTQ1OCwyNTQ5NCwyNTUwNiwyNTUwOSwyNTQ2MywyNTQ0NywyNTQ5NiwyNTUxNCwyNTQ1NywyNTUxMywyNTQ4MSwyNTQ3NSwyNTQ5OSwyNTQ1MSwyNTUxMiwyNTQ3NiwyNTQ4MCwyNTQ5NywyNTUwNSwyNTUxNiwyNTQ5MCwyNTQ4NywyNTQ3MiwyNTQ2NywyNTQ0OSwyNTQ0''@;'; put 'put ''OCwyNTQ2NiwyNTk0OSwyNTk0MiwyNTkzNywyNTk0NSwyNTk0MywyMTg1NSwyNTkzNSwyNTk0NCwyNTk0MSwyNTk0MCwyNjAxMiwyNjAxMSwyNjAyOCwyNjA2MywyNjA1OSwyNjA2MCwyNjA2MiwyNjIwNSwyNjIwMiwyNjIxMiwyNjIxNiwyNjIxNCwyNjIwNiwyNjM2MSwyMTIwNywyNjM5NSwy''@;'; put 'put ''Njc1MywyNjc5OSwyNjc4NiwyNjc3MSwyNjgwNSwyNjc1MSwyNjc0MiwyNjgwMSwyNjc5MSwyNjc3NSwyNjgwMCwyNjc1NSwyNjgyMCwyNjc5NywyNjc1OCwyNjc1NywyNjc3MiwyNjc4MSwyNjc5MiwyNjc4MywyNjc4NSwyNjc1NCwyNzQ0MiwyNzU3OCwyNzYyNywyNzYyOCwyNzY5MSwyODA0''@;'; put 'put ''NiwyODA5MiwyODE0NywyODEyMSwyODA4MiwyODEyOSwyODEwOCwyODEzMiwyODE1NSwyODE1NCwyODE2NSwyODEwMywyODEwNywyODA3OSwyODExMywyODA3OCwyODEyNiwyODE1MywyODA4OCwyODE1MSwyODE0OSwyODEwMSwyODExNCwyODE4NiwyODA4NSwyODEyMiwyODEzOSwyODEyMCwy''@;'; put 'put ''ODEzOCwyODE0NSwyODE0MiwyODEzNiwyODEwMiwyODEwMCwyODA3NCwyODE0MCwyODA5NSwyODEzNCwyODkyMSwyODkzNywyODkzOCwyODkyNSwyODkxMSwyOTI0NSwyOTMwOSwyOTMxMywyOTQ2OCwyOTQ2NywyOTQ2MiwyOTQ1OSwyOTQ2NSwyOTU3NSwyOTcwMSwyOTcwNiwyOTY5OSwyOTcw''@;'; put 'put ''MiwyOTY5NCwyOTcwOSwyOTkyMCwyOTk0MiwyOTk0MywyOTk4MCwyOTk4NiwzMDA1MywzMDA1NCwzMDA1MCwzMDA2NCwzMDA5NSwzMDE2NCwzMDE2NSwzMDEzMywzMDE1NCwzMDE1NywzMDM1MCwzMDQyMCwzMDQxOCwzMDQyNywzMDUxOSwzMDUyNiwzMDUyNCwzMDUxOCwzMDUyMCwzMDUyMiwz''@;'; put 'put ''MDgyNywzMDc4NywzMDc5OCwzMTA3NywzMTA4MCwzMTA4NSwzMTIyNywzMTM3OCwzMTM4MSwzMTUyMCwzMTUyOCwzMTUxNSwzMTUzMiwzMTUyNiwzMTUxMywzMTUxOCwzMTUzNCwzMTg5MCwzMTg5NSwzMTg5MywzMjA3MCwzMjA2NywzMjExMywzMjA0NiwzMjA1NywzMjA2MCwzMjA2NCwzMjA0''@;'; put 'put ''OCwzMjA1MSwzMjA2OCwzMjA0NywzMjA2NiwzMjA1MCwzMjA0OSwzMjU3MywzMjY3MCwzMjY2NiwzMjcxNiwzMjcxOCwzMjcyMiwzMjc5NiwzMjg0MiwzMjgzOCwzMzA3MSwzMzA0NiwzMzA1OSwzMzA2NywzMzA2NSwzMzA3MiwzMzA2MCwzMzI4MiwzMzMzMywzMzMzNSwzMzMzNCwzMzMzNywz''@;'; put 'put ''MzY3OCwzMzY5NCwzMzY4OCwzMzY1NiwzMzY5OCwzMzY4NiwzMzcyNSwzMzcwNywzMzY4MiwzMzY3NCwzMzY4MywzMzY3MywzMzY5NiwzMzY1NSwzMzY1OSwzMzY2MCwzMzY3MCwzMzcwMywzNDM4OSwyNDQyNiwzNDUwMywzNDQ5NiwzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUwMiwzNDUwNywzNDQ4''@;'; put 'put ''MSwzNDQ3OSwzNDUwNSwzNDg5OSwzNDk3NCwzNDk1MiwzNDk4NywzNDk2MiwzNDk2NiwzNDk1NywzNDk1NSwzNTIxOSwzNTIxNSwzNTM3MCwzNTM1NywzNTM2MywzNTM2NSwzNTM3NywzNTM3MywzNTM1OSwzNTM1NSwzNTM2MiwzNTkxMywzNTkzMCwzNjAwOSwzNjAxMiwzNjAxMSwzNjAwOCwz''@;'; put 'put ''NjAxMCwzNjAwNywzNjE5OSwzNjE5OCwzNjI4NiwzNjI4MiwzNjU3MSwzNjU3NSwzNjg4OSwzNjg3NywzNjg5MCwzNjg4NywzNjg5OSwzNjg5NSwzNjg5MywzNjg4MCwzNjg4NSwzNjg5NCwzNjg5NiwzNjg3OSwzNjg5OCwzNjg4NiwzNjg5MSwzNjg4NCwzNzA5NiwzNzEwMSwzNzExNywzNzIw''@;'; put 'put ''NywzNzMyNiwzNzM2NSwzNzM1MCwzNzM0NywzNzM1MSwzNzM1NywzNzM1MywzODI4MSwzODUwNiwzODUxNywzODUxNSwzODUyMCwzODUxMiwzODUxNiwzODUxOCwzODUxOSwzODUwOCwzODU5MiwzODYzNCwzODYzMywzMTQ1NiwzMTQ1NSwzODkxNCwzODkxNSwzOTc3MCw0MDE2NSw0MDU2NSw0''@;'; put 'put ''MDU3NSw0MDYxMyw0MDYzNSwyMDY0MiwyMDYyMSwyMDYxMywyMDYzMywyMDYyNSwyMDYwOCwyMDYzMCwyMDYzMiwyMDYzNCwyNjM2OCwyMDk3NywyMTEwNiwyMTEwOCwyMTEwOSwyMTA5NywyMTIxNCwyMTIxMywyMTIxMSwyMTMzOCwyMTQxMywyMTg4MywyMTg4OCwyMTkyNywyMTg4NCwyMTg5''@;'; put 'put ''OCwyMTkxNywyMTkxMiwyMTg5MCwyMTkxNiwyMTkzMCwyMTkwOCwyMTg5NSwyMTg5OSwyMTg5MSwyMTkzOSwyMTkzNCwyMTkxOSwyMTgyMiwyMTkzOCwyMTkxNCwyMTk0NywyMTkzMiwyMTkzNywyMTg4NiwyMTg5NywyMTkzMSwyMTkxMywyMjI4NSwyMjU3NSwyMjU3MCwyMjU4MCwyMjU2NCwy''@;'; put 'put ''MjU3NiwyMjU3NywyMjU2MSwyMjU1NywyMjU2MCwyMjc3NywyMjc3OCwyMjg4MCwyMzE1OSwyMzE5NCwyMzE2NywyMzE4NiwyMzE5NSwyMzIwNywyMzQxMSwyMzQwOSwyMzUwNiwyMzUwMCwyMzUwNywyMzUwNCwyMzU2MiwyMzU2MywyMzYwMSwyMzg4NCwyMzg4OCwyMzg2MCwyMzg3OSwyNDA2''@;'; put 'put ''MSwyNDEzMywyNDEyNSwyNDEyOCwyNDEzMSwyNDE5MCwyNDI2NiwyNDI1NywyNDI1OCwyNDI2MCwyNDM4MCwyNDQyOSwyNDQ4OSwyNDQ5MCwyNDQ4OCwyNDc4NSwyNDgwMSwyNDc1NCwyNDc1OCwyNDgwMCwyNDg2MCwyNDg2NywyNDgyNiwyNDg1MywyNDgxNiwyNDgyNywyNDgyMCwyNDkzNiwy''@;'; put 'put ''NDgxNywyNDg0NiwyNDgyMiwyNDg0MSwyNDgzMiwyNDg1MCwyNTExOSwyNTE2MSwyNTUwNywyNTQ4NCwyNTU1MSwyNTUzNiwyNTU3NywyNTU0NSwyNTU0MiwyNTU0OSwyNTU1NCwyNTU3MSwyNTU1MiwyNTU2OSwyNTU1OCwyNTU4MSwyNTU4MiwyNTQ2MiwyNTU4OCwyNTU3OCwyNTU2MywyNTY4''@;'; put 'put ''MiwyNTU2MiwyNTU5MywyNTk1MCwyNTk1OCwyNTk1NCwyNTk1NSwyNjAwMSwyNmUzLDI2MDMxLDI2MjIyLDI2MjI0LDI2MjI4LDI2MjMwLDI2MjIzLDI2MjU3LDI2MjM0LDI2MjM4LDI2MjMxLDI2MzY2LDI2MzY3LDI2Mzk5LDI2Mzk3LDI2ODc0LDI2ODM3LDI2ODQ4LDI2ODQwLDI2ODM5LDI2''@;'; put 'put ''ODg1LDI2ODQ3LDI2ODY5LDI2ODYyLDI2ODU1LDI2ODczLDI2ODM0LDI2ODY2LDI2ODUxLDI2ODI3LDI2ODI5LDI2ODkzLDI2ODk4LDI2ODk0LDI2ODI1LDI2ODQyLDI2OTkwLDI2ODc1LDI3NDU0LDI3NDUwLDI3NDUzLDI3NTQ0LDI3NTQyLDI3NTgwLDI3NjMxLDI3Njk0LDI3Njk1LDI3Njky''@;'; put 'put ''LDI4MjA3LDI4MjE2LDI4MjQ0LDI4MTkzLDI4MjEwLDI4MjYzLDI4MjM0LDI4MTkyLDI4MTk3LDI4MTk1LDI4MTg3LDI4MjUxLDI4MjQ4LDI4MTk2LDI4MjQ2LDI4MjcwLDI4MjA1LDI4MTk4LDI4MjcxLDI4MjEyLDI4MjM3LDI4MjE4LDI4MjA0LDI4MjI3LDI4MTg5LDI4MjIyLDI4MzYzLDI4''@;'; put 'put ''Mjk3LDI4MTg1LDI4MjM4LDI4MjU5LDI4MjI4LDI4Mjc0LDI4MjY1LDI4MjU1LDI4OTUzLDI4OTU0LDI4OTY2LDI4OTc2LDI4OTYxLDI4OTgyLDI5MDM4LDI4OTU2LDI5MjYwLDI5MzE2LDI5MzEyLDI5NDk0LDI5NDc3LDI5NDkyLDI5NDgxLDI5NzU0LDI5NzM4LDI5NzQ3LDI5NzMwLDI5NzMz''@;'; put 'put ''LDI5NzQ5LDI5NzUwLDI5NzQ4LDI5NzQzLDI5NzIzLDI5NzM0LDI5NzM2LDI5OTg5LDI5OTkwLDMwMDU5LDMwMDU4LDMwMTc4LDMwMTcxLDMwMTc5LDMwMTY5LDMwMTY4LDMwMTc0LDMwMTc2LDMwMzMxLDMwMzMyLDMwMzU4LDMwMzU1LDMwMzg4LDMwNDI4LDMwNTQzLDMwNzAxLDMwODEzLDMw''@;'; put 'put ''ODI4LDMwODMxLDMxMjQ1LDMxMjQwLDMxMjQzLDMxMjM3LDMxMjMyLDMxMzg0LDMxMzgzLDMxMzgyLDMxNDYxLDMxNDU5LDMxNTYxLDMxNTc0LDMxNTU4LDMxNTY4LDMxNTcwLDMxNTcyLDMxNTY1LDMxNTYzLDMxNTY3LDMxNTY5LDMxOTAzLDMxOTA5LDMyMDk0LDMyMDgwLDMyMTA0LDMyMDg1''@;'; put 'put ''LDMyMDQzLDMyMTEwLDMyMTE0LDMyMDk3LDMyMTAyLDMyMDk4LDMyMTEyLDMyMTE1LDIxODkyLDMyNzI0LDMyNzI1LDMyNzc5LDMyODUwLDMyOTAxLDMzMTA5LDMzMTA4LDMzMDk5LDMzMTA1LDMzMTAyLDMzMDgxLDMzMDk0LDMzMDg2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMjk4LDMzMzA4LDMz''@;'; put 'put ''NzY5LDMzNzk1LDMzNzg0LDMzODA1LDMzNzYwLDMzNzMzLDMzODAzLDMzNzI5LDMzNzc1LDMzNzc3LDMzNzgwLDMzODc5LDMzODAyLDMzNzc2LDMzODA0LDMzNzQwLDMzNzg5LDMzNzc4LDMzNzM4LDMzODQ4LDMzODA2LDMzNzk2LDMzNzU2LDMzNzk5LDMzNzQ4LDMzNzU5LDM0Mzk1LDM0NTI3''@;'; put 'put ''LDM0NTIxLDM0NTQxLDM0NTE2LDM0NTIzLDM0NTMyLDM0NTEyLDM0NTI2LDM0OTAzLDM1MDA5LDM1MDEwLDM0OTkzLDM1MjAzLDM1MjIyLDM1Mzg3LDM1NDI0LDM1NDEzLDM1NDIyLDM1Mzg4LDM1MzkzLDM1NDEyLDM1NDE5LDM1NDA4LDM1Mzk4LDM1MzgwLDM1Mzg2LDM1MzgyLDM1NDE0LDM1''@;'; put 'put ''OTM3LDM1OTcwLDM2MDE1LDM2MDI4LDM2MDE5LDM2MDI5LDM2MDMzLDM2MDI3LDM2MDMyLDM2MDIwLDM2MDIzLDM2MDIyLDM2MDMxLDM2MDI0LDM2MjM0LDM2MjI5LDM2MjI1LDM2MzAyLDM2MzE3LDM2Mjk5LDM2MzE0LDM2MzA1LDM2MzAwLDM2MzE1LDM2Mjk0LDM2NjAzLDM2NjAwLDM2NjA0''@;'; put 'put ''LDM2NzY0LDM2OTEwLDM2OTE3LDM2OTEzLDM2OTIwLDM2OTE0LDM2OTE4LDM3MTIyLDM3MTA5LDM3MTI5LDM3MTE4LDM3MjE5LDM3MjIxLDM3MzI3LDM3Mzk2LDM3Mzk3LDM3NDExLDM3Mzg1LDM3NDA2LDM3Mzg5LDM3MzkyLDM3MzgzLDM3MzkzLDM4MjkyLDM4Mjg3LDM4MjgzLDM4Mjg5LDM4''@;'; put 'put ''MjkxLDM4MjkwLDM4Mjg2LDM4NTM4LDM4NTQyLDM4NTM5LDM4NTI1LDM4NTMzLDM4NTM0LDM4NTQxLDM4NTE0LDM4NTMyLDM4NTkzLDM4NTk3LDM4NTk2LDM4NTk4LDM4NTk5LDM4NjM5LDM4NjQyLDM4ODYwLDM4OTE3LDM4OTE4LDM4OTIwLDM5MTQzLDM5MTQ2LDM5MTUxLDM5MTQ1LDM5MTU0''@;'; put 'put ''LDM5MTQ5LDM5MzQyLDM5MzQxLDQwNjQzLDQwNjUzLDQwNjU3LDIwMDk4LDIwNjUzLDIwNjYxLDIwNjU4LDIwNjU5LDIwNjc3LDIwNjcwLDIwNjUyLDIwNjYzLDIwNjY3LDIwNjU1LDIwNjc5LDIxMTE5LDIxMTExLDIxMTE3LDIxMjE1LDIxMjIyLDIxMjIwLDIxMjE4LDIxMjE5LDIxMjk1LDIx''@;'; put 'put ''OTgzLDIxOTkyLDIxOTcxLDIxOTkwLDIxOTY2LDIxOTgwLDIxOTU5LDIxOTY5LDIxOTg3LDIxOTg4LDIxOTk5LDIxOTc4LDIxOTg1LDIxOTU3LDIxOTU4LDIxOTg5LDIxOTYxLDIyMjkwLDIyMjkxLDIyNjIyLDIyNjA5LDIyNjE2LDIyNjE1LDIyNjE4LDIyNjEyLDIyNjM1LDIyNjA0LDIyNjM3''@;'; put 'put ''LDIyNjAyLDIyNjI2LDIyNjEwLDIyNjAzLDIyODg3LDIzMjMzLDIzMjQxLDIzMjQ0LDIzMjMwLDIzMjI5LDIzMjI4LDIzMjE5LDIzMjM0LDIzMjE4LDIzOTEzLDIzOTE5LDI0MTQwLDI0MTg1LDI0MjY1LDI0MjY0LDI0MzM4LDI0NDA5LDI0NDkyLDI0NDk0LDI0ODU4LDI0ODQ3LDI0OTA0LDI0''@;'; put 'put ''ODYzLDI0ODE5LDI0ODU5LDI0ODI1LDI0ODMzLDI0ODQwLDI0OTEwLDI0OTA4LDI0OTAwLDI0OTA5LDI0ODk0LDI0ODg0LDI0ODcxLDI0ODQ1LDI0ODM4LDI0ODg3LDI1MTIxLDI1MTIyLDI1NjE5LDI1NjYyLDI1NjMwLDI1NjQyLDI1NjQ1LDI1NjYxLDI1NjQ0LDI1NjE1LDI1NjI4LDI1NjIw''@;'; put 'put ''LDI1NjEzLDI1NjU0LDI1NjIyLDI1NjIzLDI1NjA2LDI1OTY0LDI2MDE1LDI2MDMyLDI2MjYzLDI2MjQ5LDI2MjQ3LDI2MjQ4LDI2MjYyLDI2MjQ0LDI2MjY0LDI2MjUzLDI2MzcxLDI3MDI4LDI2OTg5LDI2OTcwLDI2OTk5LDI2OTc2LDI2OTY0LDI2OTk3LDI2OTI4LDI3MDEwLDI2OTU0LDI2''@;'; put 'put ''OTg0LDI2OTg3LDI2OTc0LDI2OTYzLDI3MDAxLDI3MDE0LDI2OTczLDI2OTc5LDI2OTcxLDI3NDYzLDI3NTA2LDI3NTg0LDI3NTgzLDI3NjAzLDI3NjQ1LDI4MzIyLDI4MzM1LDI4MzcxLDI4MzQyLDI4MzU0LDI4MzA0LDI4MzE3LDI4MzU5LDI4MzU3LDI4MzI1LDI4MzEyLDI4MzQ4LDI4MzQ2''@;'; put 'put ''LDI4MzMxLDI4MzY5LDI4MzEwLDI4MzE2LDI4MzU2LDI4MzcyLDI4MzMwLDI4MzI3LDI4MzQwLDI5MDA2LDI5MDE3LDI5MDMzLDI5MDI4LDI5MDAxLDI5MDMxLDI5MDIwLDI5MDM2LDI5MDMwLDI5MDA0LDI5MDI5LDI5MDIyLDI4OTk4LDI5MDMyLDI5MDE0LDI5MjQyLDI5MjY2LDI5NDk1LDI5''@;'; put 'put ''NTA5LDI5NTAzLDI5NTAyLDI5ODA3LDI5Nzg2LDI5NzgxLDI5NzkxLDI5NzkwLDI5NzYxLDI5NzU5LDI5Nzg1LDI5Nzg3LDI5Nzg4LDMwMDcwLDMwMDcyLDMwMjA4LDMwMTkyLDMwMjA5LDMwMTk0LDMwMTkzLDMwMjAyLDMwMjA3LDMwMTk2LDMwMTk1LDMwNDMwLDMwNDMxLDMwNTU1LDMwNTcx''@;'; put 'put ''LDMwNTY2LDMwNTU4LDMwNTYzLDMwNTg1LDMwNTcwLDMwNTcyLDMwNTU2LDMwNTY1LDMwNTY4LDMwNTYyLDMwNzAyLDMwODYyLDMwODk2LDMwODcxLDMwODcyLDMwODYwLDMwODU3LDMwODQ0LDMwODY1LDMwODY3LDMwODQ3LDMxMDk4LDMxMTAzLDMxMTA1LDMzODM2LDMxMTY1LDMxMjYwLDMx''@;'; put 'put ''MjU4LDMxMjY0LDMxMjUyLDMxMjYzLDMxMjYyLDMxMzkxLDMxMzkyLDMxNjA3LDMxNjgwLDMxNTg0LDMxNTk4LDMxNTkxLDMxOTIxLDMxOTIzLDMxOTI1LDMyMTQ3LDMyMTIxLDMyMTQ1LDMyMTI5LDMyMTQzLDMyMDkxLDMyNjIyLDMyNjE3LDMyNjE4LDMyNjI2LDMyNjgxLDMyNjgwLDMyNjc2''@;'; put 'put ''LDMyODU0LDMyODU2LDMyOTAyLDMyOTAwLDMzMTM3LDMzMTM2LDMzMTQ0LDMzMTI1LDMzMTM0LDMzMTM5LDMzMTMxLDMzMTQ1LDMzMTQ2LDMzMTI2LDMzMjg1LDMzMzUxLDMzOTIyLDMzOTExLDMzODUzLDMzODQxLDMzOTA5LDMzODk0LDMzODk5LDMzODY1LDMzOTAwLDMzODgzLDMzODUyLDMz''@;'; put 'put ''ODQ1LDMzODg5LDMzODkxLDMzODk3LDMzOTAxLDMzODYyLDM0Mzk4LDM0Mzk2LDM0Mzk5LDM0NTUzLDM0NTc5LDM0NTY4LDM0NTY3LDM0NTYwLDM0NTU4LDM0NTU1LDM0NTYyLDM0NTYzLDM0NTY2LDM0NTcwLDM0OTA1LDM1MDM5LDM1MDI4LDM1MDMzLDM1MDM2LDM1MDMyLDM1MDM3LDM1MDQx''@;'; put 'put ''LDM1MDE4LDM1MDI5LDM1MDI2LDM1MjI4LDM1Mjk5LDM1NDM1LDM1NDQyLDM1NDQzLDM1NDMwLDM1NDMzLDM1NDQwLDM1NDYzLDM1NDUyLDM1NDI3LDM1NDg4LDM1NDQxLDM1NDYxLDM1NDM3LDM1NDI2LDM1NDM4LDM1NDM2LDM1NDQ5LDM1NDUxLDM1MzkwLDM1NDMyLDM1OTM4LDM1OTc4LDM1''@;'; put 'put ''OTc3LDM2MDQyLDM2MDM5LDM2MDQwLDM2MDM2LDM2MDE4LDM2MDM1LDM2MDM0LDM2MDM3LDM2MzIxLDM2MzE5LDM2MzI4LDM2MzM1LDM2MzM5LDM2MzQ2LDM2MzMwLDM2MzI0LDM2MzI2LDM2NTMwLDM2NjExLDM2NjE3LDM2NjA2LDM2NjE4LDM2NzY3LDM2Nzg2LDM2OTM5LDM2OTM4LDM2OTQ3''@;'; put 'put ''LDM2OTMwLDM2OTQ4LDM2OTI0LDM2OTQ5LDM2OTQ0LDM2OTM1LDM2OTQzLDM2OTQyLDM2OTQxLDM2OTQ1LDM2OTI2LDM2OTI5LDM3MTM4LDM3MTQzLDM3MjI4LDM3MjI2LDM3MjI1LDM3MzIxLDM3NDMxLDM3NDYzLDM3NDMyLDM3NDM3LDM3NDQwLDM3NDM4LDM3NDY3LDM3NDUxLDM3NDc2LDM3''@;'; put 'put ''NDU3LDM3NDI4LDM3NDQ5LDM3NDUzLDM3NDQ1LDM3NDMzLDM3NDM5LDM3NDY2LDM4Mjk2LDM4NTUyLDM4NTQ4LDM4NTQ5LDM4NjA1LDM4NjAzLDM4NjAxLDM4NjAyLDM4NjQ3LDM4NjUxLDM4NjQ5LDM4NjQ2LDM4NzQyLDM4NzcyLDM4Nzc0LDM4OTI4LDM4OTI5LDM4OTMxLDM4OTIyLDM4OTMw''@;'; put 'put ''LDM4OTI0LDM5MTY0LDM5MTU2LDM5MTY1LDM5MTY2LDM5MzQ3LDM5MzQ1LDM5MzQ4LDM5NjQ5LDQwMTY5LDQwNTc4LDQwNzE4LDQwNzIzLDQwNzM2LDIwNzExLDIwNzE4LDIwNzA5LDIwNjk0LDIwNzE3LDIwNjk4LDIwNjkzLDIwNjg3LDIwNjg5LDIwNzIxLDIwNjg2LDIwNzEzLDIwODM0LDIw''@;'; put 'put ''OTc5LDIxMTIzLDIxMTIyLDIxMjk3LDIxNDIxLDIyMDE0LDIyMDE2LDIyMDQzLDIyMDM5LDIyMDEzLDIyMDM2LDIyMDIyLDIyMDI1LDIyMDI5LDIyMDMwLDIyMDA3LDIyMDM4LDIyMDQ3LDIyMDI0LDIyMDMyLDIyMDA2LDIyMjk2LDIyMjk0LDIyNjQ1LDIyNjU0LDIyNjU5LDIyNjc1LDIyNjY2''@;'; put 'put ''LDIyNjQ5LDIyNjYxLDIyNjUzLDIyNzgxLDIyODIxLDIyODE4LDIyODIwLDIyODkwLDIyODg5LDIzMjY1LDIzMjcwLDIzMjczLDIzMjU1LDIzMjU0LDIzMjU2LDIzMjY3LDIzNDEzLDIzNTE4LDIzNTI3LDIzNTIxLDIzNTI1LDIzNTI2LDIzNTI4LDIzNTIyLDIzNTI0LDIzNTE5LDIzNTY1LDIz''@;'; put 'put ''NjUwLDIzOTQwLDIzOTQzLDI0MTU1LDI0MTYzLDI0MTQ5LDI0MTUxLDI0MTQ4LDI0Mjc1LDI0Mjc4LDI0MzMwLDI0MzkwLDI0NDMyLDI0NTA1LDI0OTAzLDI0ODk1LDI0OTA3LDI0OTUxLDI0OTMwLDI0OTMxLDI0OTI3LDI0OTIyLDI0OTIwLDI0OTQ5LDI1MTMwLDI1NzM1LDI1Njg4LDI1Njg0''@;'; put 'put ''LDI1NzY0LDI1NzIwLDI1Njk1LDI1NzIyLDI1NjgxLDI1NzAzLDI1NjUyLDI1NzA5LDI1NzIzLDI1OTcwLDI2MDE3LDI2MDcxLDI2MDcwLDI2Mjc0LDI2MjgwLDI2MjY5LDI3MDM2LDI3MDQ4LDI3MDI5LDI3MDczLDI3MDU0LDI3MDkxLDI3MDgzLDI3MDM1LDI3MDYzLDI3MDY3LDI3MDUxLDI3''@;'; put 'put ''MDYwLDI3MDg4LDI3MDg1LDI3MDUzLDI3MDg0LDI3MDQ2LDI3MDc1LDI3MDQzLDI3NDY1LDI3NDY4LDI3Njk5LDI4NDY3LDI4NDM2LDI4NDE0LDI4NDM1LDI4NDA0LDI4NDU3LDI4NDc4LDI4NDQ4LDI4NDYwLDI4NDMxLDI4NDE4LDI4NDUwLDI4NDE1LDI4Mzk5LDI4NDIyLDI4NDY1LDI4NDcy''@;'; put 'put ''LDI4NDY2LDI4NDUxLDI4NDM3LDI4NDU5LDI4NDYzLDI4NTUyLDI4NDU4LDI4Mzk2LDI4NDE3LDI4NDAyLDI4MzY0LDI4NDA3LDI5MDc2LDI5MDgxLDI5MDUzLDI5MDY2LDI5MDYwLDI5MDc0LDI5MjQ2LDI5MzMwLDI5MzM0LDI5NTA4LDI5NTIwLDI5Nzk2LDI5Nzk1LDI5ODAyLDI5ODA4LDI5''@;'; put 'put ''ODA1LDI5OTU2LDMwMDk3LDMwMjQ3LDMwMjIxLDMwMjE5LDMwMjE3LDMwMjI3LDMwNDMzLDMwNDM1LDMwNTk2LDMwNTg5LDMwNTkxLDMwNTYxLDMwOTEzLDMwODc5LDMwODg3LDMwODk5LDMwODg5LDMwODgzLDMxMTE4LDMxMTE5LDMxMTE3LDMxMjc4LDMxMjgxLDMxNDAyLDMxNDAxLDMxNDY5''@;'; put 'put ''LDMxNDcxLDMxNjQ5LDMxNjM3LDMxNjI3LDMxNjA1LDMxNjM5LDMxNjQ1LDMxNjM2LDMxNjMxLDMxNjcyLDMxNjIzLDMxNjIwLDMxOTI5LDMxOTMzLDMxOTM0LDMyMTg3LDMyMTc2LDMyMTU2LDMyMTg5LDMyMTkwLDMyMTYwLDMyMjAyLDMyMTgwLDMyMTc4LDMyMTc3LDMyMTg2LDMyMTYyLDMy''@;'; put 'put ''MTkxLDMyMTgxLDMyMTg0LDMyMTczLDMyMjEwLDMyMTk5LDMyMTcyLDMyNjI0LDMyNzM2LDMyNzM3LDMyNzM1LDMyODYyLDMyODU4LDMyOTAzLDMzMTA0LDMzMTUyLDMzMTY3LDMzMTYwLDMzMTYyLDMzMTUxLDMzMTU0LDMzMjU1LDMzMjc0LDMzMjg3LDMzMzAwLDMzMzEwLDMzMzU1LDMzOTkz''@;'; put 'put ''LDMzOTgzLDMzOTkwLDMzOTg4LDMzOTQ1LDMzOTUwLDMzOTcwLDMzOTQ4LDMzOTk1LDMzOTc2LDMzOTg0LDM0MDAzLDMzOTM2LDMzOTgwLDM0MDAxLDMzOTk0LDM0NjIzLDM0NTg4LDM0NjE5LDM0NTk0LDM0NTk3LDM0NjEyLDM0NTg0LDM0NjQ1LDM0NjE1LDM0NjAxLDM1MDU5LDM1MDc0LDM1''@;'; put 'put ''MDYwLDM1MDY1LDM1MDY0LDM1MDY5LDM1MDQ4LDM1MDk4LDM1MDU1LDM1NDk0LDM1NDY4LDM1NDg2LDM1NDkxLDM1NDY5LDM1NDg5LDM1NDc1LDM1NDkyLDM1NDk4LDM1NDkzLDM1NDk2LDM1NDgwLDM1NDczLDM1NDgyLDM1NDk1LDM1OTQ2LDM1OTgxLDM1OTgwLDM2MDUxLDM2MDQ5LDM2MDUw''@;'; put 'put ''LDM2MjAzLDM2MjQ5LDM2MjQ1LDM2MzQ4LDM2NjI4LDM2NjI2LDM2NjI5LDM2NjI3LDM2NzcxLDM2OTYwLDM2OTUyLDM2OTU2LDM2OTYzLDM2OTUzLDM2OTU4LDM2OTYyLDM2OTU3LDM2OTU1LDM3MTQ1LDM3MTQ0LDM3MTUwLDM3MjM3LDM3MjQwLDM3MjM5LDM3MjM2LDM3NDk2LDM3NTA0LDM3''@;'; put 'put ''NTA5LDM3NTI4LDM3NTI2LDM3NDk5LDM3NTIzLDM3NTMyLDM3NTQ0LDM3NTAwLDM3NTIxLDM4MzA1LDM4MzEyLDM4MzEzLDM4MzA3LDM4MzA5LDM4MzA4LDM4NTUzLDM4NTU2LDM4NTU1LDM4NjA0LDM4NjEwLDM4NjU2LDM4NzgwLDM4Nzg5LDM4OTAyLDM4OTM1LDM4OTM2LDM5MDg3LDM5MDg5''@;'; put 'put ''LDM5MTcxLDM5MTczLDM5MTgwLDM5MTc3LDM5MzYxLDM5NTk5LDM5NjAwLDM5NjU0LDM5NzQ1LDM5NzQ2LDQwMTgwLDQwMTgyLDQwMTc5LDQwNjM2LDQwNzYzLDQwNzc4LDIwNzQwLDIwNzM2LDIwNzMxLDIwNzI1LDIwNzI5LDIwNzM4LDIwNzQ0LDIwNzQ1LDIwNzQxLDIwOTU2LDIxMTI3LDIx''@;'; put 'put ''MTI4LDIxMTI5LDIxMTMzLDIxMTMwLDIxMjMyLDIxNDI2LDIyMDYyLDIyMDc1LDIyMDczLDIyMDY2LDIyMDc5LDIyMDY4LDIyMDU3LDIyMDk5LDIyMDk0LDIyMTAzLDIyMTMyLDIyMDcwLDIyMDYzLDIyMDY0LDIyNjU2LDIyNjg3LDIyNjg2LDIyNzA3LDIyNjg0LDIyNzAyLDIyNjk3LDIyNjk0''@;'; put 'put ''LDIyODkzLDIzMzA1LDIzMjkxLDIzMzA3LDIzMjg1LDIzMzA4LDIzMzA0LDIzNTM0LDIzNTMyLDIzNTI5LDIzNTMxLDIzNjUyLDIzNjUzLDIzOTY1LDIzOTU2LDI0MTYyLDI0MTU5LDI0MTYxLDI0MjkwLDI0MjgyLDI0Mjg3LDI0Mjg1LDI0MjkxLDI0Mjg4LDI0MzkyLDI0NDMzLDI0NTAzLDI0''@;'; put 'put ''NTAxLDI0OTUwLDI0OTM1LDI0OTQyLDI0OTI1LDI0OTE3LDI0OTYyLDI0OTU2LDI0OTQ0LDI0OTM5LDI0OTU4LDI0OTk5LDI0OTc2LDI1MDAzLDI0OTc0LDI1MDA0LDI0OTg2LDI0OTk2LDI0OTgwLDI1MDA2LDI1MTM0LDI1NzA1LDI1NzExLDI1NzIxLDI1NzU4LDI1Nzc4LDI1NzM2LDI1NzQ0''@;'; put 'put ''LDI1Nzc2LDI1NzY1LDI1NzQ3LDI1NzQ5LDI1NzY5LDI1NzQ2LDI1Nzc0LDI1NzczLDI1NzcxLDI1NzU0LDI1NzcyLDI1NzUzLDI1NzYyLDI1Nzc5LDI1OTczLDI1OTc1LDI1OTc2LDI2Mjg2LDI2MjgzLDI2MjkyLDI2Mjg5LDI3MTcxLDI3MTY3LDI3MTEyLDI3MTM3LDI3MTY2LDI3MTYxLDI3''@;'; put 'put ''MTMzLDI3MTY5LDI3MTU1LDI3MTQ2LDI3MTIzLDI3MTM4LDI3MTQxLDI3MTE3LDI3MTUzLDI3NDcyLDI3NDcwLDI3NTU2LDI3NTg5LDI3NTkwLDI4NDc5LDI4NTQwLDI4NTQ4LDI4NDk3LDI4NTE4LDI4NTAwLDI4NTUwLDI4NTI1LDI4NTA3LDI4NTM2LDI4NTI2LDI4NTU4LDI4NTM4LDI4NTI4''@;'; put 'put ''LDI4NTE2LDI4NTY3LDI4NTA0LDI4MzczLDI4NTI3LDI4NTEyLDI4NTExLDI5MDg3LDI5MTAwLDI5MTA1LDI5MDk2LDI5MjcwLDI5MzM5LDI5NTE4LDI5NTI3LDI5ODAxLDI5ODM1LDI5ODI3LDI5ODIyLDI5ODI0LDMwMDc5LDMwMjQwLDMwMjQ5LDMwMjM5LDMwMjQ0LDMwMjQ2LDMwMjQxLDMw''@;'; put 'put ''MjQyLDMwMzYyLDMwMzk0LDMwNDM2LDMwNjA2LDMwNTk5LDMwNjA0LDMwNjA5LDMwNjAzLDMwOTIzLDMwOTE3LDMwOTA2LDMwOTIyLDMwOTEwLDMwOTMzLDMwOTA4LDMwOTI4LDMxMjk1LDMxMjkyLDMxMjk2LDMxMjkzLDMxMjg3LDMxMjkxLDMxNDA3LDMxNDA2LDMxNjYxLDMxNjY1LDMxNjg0''@;'; put 'put ''LDMxNjY4LDMxNjg2LDMxNjg3LDMxNjgxLDMxNjQ4LDMxNjkyLDMxOTQ2LDMyMjI0LDMyMjQ0LDMyMjM5LDMyMjUxLDMyMjE2LDMyMjM2LDMyMjIxLDMyMjMyLDMyMjI3LDMyMjE4LDMyMjIyLDMyMjMzLDMyMTU4LDMyMjE3LDMyMjQyLDMyMjQ5LDMyNjI5LDMyNjMxLDMyNjg3LDMyNzQ1LDMy''@;'; put 'put ''ODA2LDMzMTc5LDMzMTgwLDMzMTgxLDMzMTg0LDMzMTc4LDMzMTc2LDM0MDcxLDM0MTA5LDM0MDc0LDM0MDMwLDM0MDkyLDM0MDkzLDM0MDY3LDM0MDY1LDM0MDgzLDM0MDgxLDM0MDY4LDM0MDI4LDM0MDg1LDM0MDQ3LDM0MDU0LDM0NjkwLDM0Njc2LDM0Njc4LDM0NjU2LDM0NjYyLDM0Njgw''@;'; put 'put ''LDM0NjY0LDM0NjQ5LDM0NjQ3LDM0NjM2LDM0NjQzLDM0OTA3LDM0OTA5LDM1MDg4LDM1MDc5LDM1MDkwLDM1MDkxLDM1MDkzLDM1MDgyLDM1NTE2LDM1NTM4LDM1NTI3LDM1NTI0LDM1NDc3LDM1NTMxLDM1NTc2LDM1NTA2LDM1NTI5LDM1NTIyLDM1NTE5LDM1NTA0LDM1NTQyLDM1NTMzLDM1''@;'; put 'put ''NTEwLDM1NTEzLDM1NTQ3LDM1OTE2LDM1OTE4LDM1OTQ4LDM2MDY0LDM2MDYyLDM2MDcwLDM2MDY4LDM2MDc2LDM2MDc3LDM2MDY2LDM2MDY3LDM2MDYwLDM2MDc0LDM2MDY1LDM2MjA1LDM2MjU1LDM2MjU5LDM2Mzk1LDM2MzY4LDM2MzgxLDM2Mzg2LDM2MzY3LDM2MzkzLDM2MzgzLDM2Mzg1''@;'; put 'put ''LDM2MzgyLDM2NTM4LDM2NjM3LDM2NjM1LDM2NjM5LDM2NjQ5LDM2NjQ2LDM2NjUwLDM2NjM2LDM2NjM4LDM2NjQ1LDM2OTY5LDM2OTc0LDM2OTY4LDM2OTczLDM2OTgzLDM3MTY4LDM3MTY1LDM3MTU5LDM3MTY5LDM3MjU1LDM3MjU3LDM3MjU5LDM3MjUxLDM3NTczLDM3NTYzLDM3NTU5LDM3''@;'; put 'put ''NjEwLDM3NTQ4LDM3NjA0LDM3NTY5LDM3NTU1LDM3NTY0LDM3NTg2LDM3NTc1LDM3NjE2LDM3NTU0LDM4MzE3LDM4MzIxLDM4NjYwLDM4NjYyLDM4NjYzLDM4NjY1LDM4NzUyLDM4Nzk3LDM4Nzk1LDM4Nzk5LDM4OTQ1LDM4OTU1LDM4OTQwLDM5MDkxLDM5MTc4LDM5MTg3LDM5MTg2LDM5MTky''@;'; put 'put ''LDM5Mzg5LDM5Mzc2LDM5MzkxLDM5Mzg3LDM5Mzc3LDM5MzgxLDM5Mzc4LDM5Mzg1LDM5NjA3LDM5NjYyLDM5NjYzLDM5NzE5LDM5NzQ5LDM5NzQ4LDM5Nzk5LDM5NzkxLDQwMTk4LDQwMjAxLDQwMTk1LDQwNjE3LDQwNjM4LDQwNjU0LDIyNjk2LDQwNzg2LDIwNzU0LDIwNzYwLDIwNzU2LDIw''@;'; put 'put ''NzUyLDIwNzU3LDIwODY0LDIwOTA2LDIwOTU3LDIxMTM3LDIxMTM5LDIxMjM1LDIyMTA1LDIyMTIzLDIyMTM3LDIyMTIxLDIyMTE2LDIyMTM2LDIyMTIyLDIyMTIwLDIyMTE3LDIyMTI5LDIyMTI3LDIyMTI0LDIyMTE0LDIyMTM0LDIyNzIxLDIyNzE4LDIyNzI3LDIyNzI1LDIyODk0LDIzMzI1''@;'; put 'put ''LDIzMzQ4LDIzNDE2LDIzNTM2LDIzNTY2LDI0Mzk0LDI1MDEwLDI0OTc3LDI1MDAxLDI0OTcwLDI1MDM3LDI1MDE0LDI1MDIyLDI1MDM0LDI1MDMyLDI1MTM2LDI1Nzk3LDI1NzkzLDI1ODAzLDI1Nzg3LDI1Nzg4LDI1ODE4LDI1Nzk2LDI1Nzk5LDI1Nzk0LDI1ODA1LDI1NzkxLDI1ODEwLDI1''@;'; put 'put ''ODEyLDI1NzkwLDI1OTcyLDI2MzEwLDI2MzEzLDI2Mjk3LDI2MzA4LDI2MzExLDI2Mjk2LDI3MTk3LDI3MTkyLDI3MTk0LDI3MjI1LDI3MjQzLDI3MjI0LDI3MTkzLDI3MjA0LDI3MjM0LDI3MjMzLDI3MjExLDI3MjA3LDI3MTg5LDI3MjMxLDI3MjA4LDI3NDgxLDI3NTExLDI3NjUzLDI4NjEw''@;'; put 'put ''LDI4NTkzLDI4NTc3LDI4NjExLDI4NTgwLDI4NjA5LDI4NTgzLDI4NTk1LDI4NjA4LDI4NjAxLDI4NTk4LDI4NTgyLDI4NTc2LDI4NTk2LDI5MTE4LDI5MTI5LDI5MTM2LDI5MTM4LDI5MTI4LDI5MTQxLDI5MTEzLDI5MTM0LDI5MTQ1LDI5MTQ4LDI5MTIzLDI5MTI0LDI5NTQ0LDI5ODUyLDI5''@;'; put 'put ''ODU5LDI5ODQ4LDI5ODU1LDI5ODU0LDI5OTIyLDI5OTY0LDI5OTY1LDMwMjYwLDMwMjY0LDMwMjY2LDMwNDM5LDMwNDM3LDMwNjI0LDMwNjIyLDMwNjIzLDMwNjI5LDMwOTUyLDMwOTM4LDMwOTU2LDMwOTUxLDMxMTQyLDMxMzA5LDMxMzEwLDMxMzAyLDMxMzA4LDMxMzA3LDMxNDE4LDMxNzA1''@;'; put 'put ''LDMxNzYxLDMxNjg5LDMxNzE2LDMxNzA3LDMxNzEzLDMxNzIxLDMxNzE4LDMxOTU3LDMxOTU4LDMyMjY2LDMyMjczLDMyMjY0LDMyMjgzLDMyMjkxLDMyMjg2LDMyMjg1LDMyMjY1LDMyMjcyLDMyNjMzLDMyNjkwLDMyNzUyLDMyNzUzLDMyNzUwLDMyODA4LDMzMjAzLDMzMTkzLDMzMTkyLDMz''@;'; put 'put ''Mjc1LDMzMjg4LDMzMzY4LDMzMzY5LDM0MTIyLDM0MTM3LDM0MTIwLDM0MTUyLDM0MTUzLDM0MTE1LDM0MTIxLDM0MTU3LDM0MTU0LDM0MTQyLDM0NjkxLDM0NzE5LDM0NzE4LDM0NzIyLDM0NzAxLDM0OTEzLDM1MTE0LDM1MTIyLDM1MTA5LDM1MTE1LDM1MTA1LDM1MjQyLDM1MjM4LDM1NTU4''@;'; put 'put ''LDM1NTc4LDM1NTYzLDM1NTY5LDM1NTg0LDM1NTQ4LDM1NTU5LDM1NTY2LDM1NTgyLDM1NTg1LDM1NTg2LDM1NTc1LDM1NTY1LDM1NTcxLDM1NTc0LDM1NTgwLDM1OTQ3LDM1OTQ5LDM1OTg3LDM2MDg0LDM2NDIwLDM2NDAxLDM2NDA0LDM2NDE4LDM2NDA5LDM2NDA1LDM2NjY3LDM2NjU1LDM2''@;'; put 'put ''NjY0LDM2NjU5LDM2Nzc2LDM2Nzc0LDM2OTgxLDM2OTgwLDM2OTg0LDM2OTc4LDM2OTg4LDM2OTg2LDM3MTcyLDM3MjY2LDM3NjY0LDM3Njg2LDM3NjI0LDM3NjgzLDM3Njc5LDM3NjY2LDM3NjI4LDM3Njc1LDM3NjM2LDM3NjU4LDM3NjQ4LDM3NjcwLDM3NjY1LDM3NjUzLDM3Njc4LDM3NjU3''@;'; put 'put ''LDM4MzMxLDM4NTY3LDM4NTY4LDM4NTcwLDM4NjEzLDM4NjcwLDM4NjczLDM4Njc4LDM4NjY5LDM4Njc1LDM4NjcxLDM4NzQ3LDM4NzQ4LDM4NzU4LDM4ODA4LDM4OTYwLDM4OTY4LDM4OTcxLDM4OTY3LDM4OTU3LDM4OTY5LDM4OTQ4LDM5MTg0LDM5MjA4LDM5MTk4LDM5MTk1LDM5MjAxLDM5''@;'; put 'put ''MTk0LDM5NDA1LDM5Mzk0LDM5NDA5LDM5NjA4LDM5NjEyLDM5Njc1LDM5NjYxLDM5NzIwLDM5ODI1LDQwMjEzLDQwMjI3LDQwMjMwLDQwMjMyLDQwMjEwLDQwMjE5LDQwNjY0LDQwNjYwLDQwODQ1LDQwODYwLDIwNzc4LDIwNzY3LDIwNzY5LDIwNzg2LDIxMjM3LDIyMTU4LDIyMTQ0LDIyMTYw''@;'; put 'put ''LDIyMTQ5LDIyMTUxLDIyMTU5LDIyNzQxLDIyNzM5LDIyNzM3LDIyNzM0LDIzMzQ0LDIzMzM4LDIzMzMyLDIzNDE4LDIzNjA3LDIzNjU2LDIzOTk2LDIzOTk0LDIzOTk3LDIzOTkyLDI0MTcxLDI0Mzk2LDI0NTA5LDI1MDMzLDI1MDI2LDI1MDMxLDI1MDYyLDI1MDM1LDI1MTM4LDI1MTQwLDI1''@;'; put 'put ''ODA2LDI1ODAyLDI1ODE2LDI1ODI0LDI1ODQwLDI1ODMwLDI1ODM2LDI1ODQxLDI1ODI2LDI1ODM3LDI1OTg2LDI1OTg3LDI2MzI5LDI2MzI2LDI3MjY0LDI3Mjg0LDI3MjY4LDI3Mjk4LDI3MjkyLDI3MzU1LDI3Mjk5LDI3MjYyLDI3Mjg3LDI3MjgwLDI3Mjk2LDI3NDg0LDI3NTY2LDI3NjEw''@;'; put 'put ''LDI3NjU2LDI4NjMyLDI4NjU3LDI4NjM5LDI4NjQwLDI4NjM1LDI4NjQ0LDI4NjUxLDI4NjU1LDI4NTQ0LDI4NjUyLDI4NjQxLDI4NjQ5LDI4NjI5LDI4NjU0LDI4NjU2LDI5MTU5LDI5MTUxLDI5MTY2LDI5MTU4LDI5MTU3LDI5MTY1LDI5MTY0LDI5MTcyLDI5MTUyLDI5MjM3LDI5MjU0LDI5''@;'; put 'put ''NTUyLDI5NTU0LDI5ODY1LDI5ODcyLDI5ODYyLDI5ODY0LDMwMjc4LDMwMjc0LDMwMjg0LDMwNDQyLDMwNjQzLDMwNjM0LDMwNjQwLDMwNjM2LDMwNjMxLDMwNjM3LDMwNzAzLDMwOTY3LDMwOTcwLDMwOTY0LDMwOTU5LDMwOTc3LDMxMTQzLDMxMTQ2LDMxMzE5LDMxNDIzLDMxNzUxLDMxNzU3''@;'; put 'put ''LDMxNzQyLDMxNzM1LDMxNzU2LDMxNzEyLDMxOTY4LDMxOTY0LDMxOTY2LDMxOTcwLDMxOTY3LDMxOTYxLDMxOTY1LDMyMzAyLDMyMzE4LDMyMzI2LDMyMzExLDMyMzA2LDMyMzIzLDMyMjk5LDMyMzE3LDMyMzA1LDMyMzI1LDMyMzIxLDMyMzA4LDMyMzEzLDMyMzI4LDMyMzA5LDMyMzE5LDMy''@;'; put 'put ''MzAzLDMyNTgwLDMyNzU1LDMyNzY0LDMyODgxLDMyODgyLDMyODgwLDMyODc5LDMyODgzLDMzMjIyLDMzMjE5LDMzMjEwLDMzMjE4LDMzMjE2LDMzMjE1LDMzMjEzLDMzMjI1LDMzMjE0LDMzMjU2LDMzMjg5LDMzMzkzLDM0MjE4LDM0MTgwLDM0MTc0LDM0MjA0LDM0MTkzLDM0MTk2LDM0MjIz''@;'; put 'put ''LDM0MjAzLDM0MTgzLDM0MjE2LDM0MTg2LDM0NDA3LDM0NzUyLDM0NzY5LDM0NzM5LDM0NzcwLDM0NzU4LDM0NzMxLDM0NzQ3LDM0NzQ2LDM0NzYwLDM0NzYzLDM1MTMxLDM1MTI2LDM1MTQwLDM1MTI4LDM1MTMzLDM1MjQ0LDM1NTk4LDM1NjA3LDM1NjA5LDM1NjExLDM1NTk0LDM1NjE2LDM1''@;'; put 'put ''NjEzLDM1NTg4LDM1NjAwLDM1OTA1LDM1OTAzLDM1OTU1LDM2MDkwLDM2MDkzLDM2MDkyLDM2MDg4LDM2MDkxLDM2MjY0LDM2NDI1LDM2NDI3LDM2NDI0LDM2NDI2LDM2Njc2LDM2NjcwLDM2Njc0LDM2Njc3LDM2NjcxLDM2OTkxLDM2OTg5LDM2OTk2LDM2OTkzLDM2OTk0LDM2OTkyLDM3MTc3''@;'; put 'put ''LDM3MjgzLDM3Mjc4LDM3Mjc2LDM3NzA5LDM3NzYyLDM3NjcyLDM3NzQ5LDM3NzA2LDM3NzMzLDM3NzA3LDM3NjU2LDM3NzU4LDM3NzQwLDM3NzIzLDM3NzQ0LDM3NzIyLDM3NzE2LDM4MzQ2LDM4MzQ3LDM4MzQ4LDM4MzQ0LDM4MzQyLDM4NTc3LDM4NTg0LDM4NjE0LDM4Njg0LDM4Njg2LDM4''@;'; put 'put ''ODE2LDM4ODY3LDM4OTgyLDM5MDk0LDM5MjIxLDM5NDI1LDM5NDIzLDM5ODU0LDM5ODUxLDM5ODUwLDM5ODUzLDQwMjUxLDQwMjU1LDQwNTg3LDQwNjU1LDQwNjcwLDQwNjY4LDQwNjY5LDQwNjY3LDQwNzY2LDQwNzc5LDIxNDc0LDIyMTY1LDIyMTkwLDIyNzQ1LDIyNzQ0LDIzMzUyLDI0NDEz''@;'; put 'put ''LDI1MDU5LDI1MTM5LDI1ODQ0LDI1ODQyLDI1ODU0LDI1ODYyLDI1ODUwLDI1ODUxLDI1ODQ3LDI2MDM5LDI2MzMyLDI2NDA2LDI3MzE1LDI3MzA4LDI3MzMxLDI3MzIzLDI3MzIwLDI3MzMwLDI3MzEwLDI3MzExLDI3NDg3LDI3NTEyLDI3NTY3LDI4NjgxLDI4NjgzLDI4NjcwLDI4Njc4LDI4''@;'; put 'put ''NjY2LDI4Njg5LDI4Njg3LDI5MTc5LDI5MTgwLDI5MTgyLDI5MTc2LDI5NTU5LDI5NTU3LDI5ODYzLDI5ODg3LDI5OTczLDMwMjk0LDMwMjk2LDMwMjkwLDMwNjUzLDMwNjU1LDMwNjUxLDMwNjUyLDMwOTkwLDMxMTUwLDMxMzI5LDMxMzMwLDMxMzI4LDMxNDI4LDMxNDI5LDMxNzg3LDMxNzgz''@;'; put 'put ''LDMxNzg2LDMxNzc0LDMxNzc5LDMxNzc3LDMxOTc1LDMyMzQwLDMyMzQxLDMyMzUwLDMyMzQ2LDMyMzUzLDMyMzM4LDMyMzQ1LDMyNTg0LDMyNzYxLDMyNzYzLDMyODg3LDMyODg2LDMzMjI5LDMzMjMxLDMzMjkwLDM0MjU1LDM0MjE3LDM0MjUzLDM0MjU2LDM0MjQ5LDM0MjI0LDM0MjM0LDM0''@;'; put 'put ''MjMzLDM0MjE0LDM0Nzk5LDM0Nzk2LDM0ODAyLDM0Nzg0LDM1MjA2LDM1MjUwLDM1MzE2LDM1NjI0LDM1NjQxLDM1NjI4LDM1NjI3LDM1OTIwLDM2MTAxLDM2NDQxLDM2NDUxLDM2NDU0LDM2NDUyLDM2NDQ3LDM2NDM3LDM2NTQ0LDM2NjgxLDM2Njg1LDM2OTk5LDM2OTk1LDM3ZTMsMzcyOTEs''@;'; put 'put ''MzcyOTIsMzczMjgsMzc3ODAsMzc3NzAsMzc3ODIsMzc3OTQsMzc4MTEsMzc4MDYsMzc4MDQsMzc4MDgsMzc3ODQsMzc3ODYsMzc3ODMsMzgzNTYsMzgzNTgsMzgzNTIsMzgzNTcsMzg2MjYsMzg2MjAsMzg2MTcsMzg2MTksMzg2MjIsMzg2OTIsMzg4MTksMzg4MjIsMzg4MjksMzg5MDUsMzg5''@;'; put 'put ''ODksMzg5OTEsMzg5ODgsMzg5OTAsMzg5OTUsMzkwOTgsMzkyMzAsMzkyMzEsMzkyMjksMzkyMTQsMzkzMzMsMzk0MzgsMzk2MTcsMzk2ODMsMzk2ODYsMzk3NTksMzk3NTgsMzk3NTcsMzk4ODIsMzk4ODEsMzk5MzMsMzk4ODAsMzk4NzIsNDAyNzMsNDAyODUsNDAyODgsNDA2NzIsNDA3MjUs''@;'; put 'put ''NDA3NDgsMjA3ODcsMjIxODEsMjI3NTAsMjI3NTEsMjI3NTQsMjM1NDEsNDA4NDgsMjQzMDAsMjUwNzQsMjUwNzksMjUwNzgsMjUwNzcsMjU4NTYsMjU4NzEsMjYzMzYsMjYzMzMsMjczNjUsMjczNTcsMjczNTQsMjczNDcsMjg2OTksMjg3MDMsMjg3MTIsMjg2OTgsMjg3MDEsMjg2OTMsMjg2''@;'; put 'put ''OTYsMjkxOTAsMjkxOTcsMjkyNzIsMjkzNDYsMjk1NjAsMjk1NjIsMjk4ODUsMjk4OTgsMjk5MjMsMzAwODcsMzAwODYsMzAzMDMsMzAzMDUsMzA2NjMsMzEwMDEsMzExNTMsMzEzMzksMzEzMzcsMzE4MDYsMzE4MDcsMzE4MDAsMzE4MDUsMzE3OTksMzE4MDgsMzIzNjMsMzIzNjUsMzIzNzcs''@;'; put 'put ''MzIzNjEsMzIzNjIsMzI2NDUsMzIzNzEsMzI2OTQsMzI2OTcsMzI2OTYsMzMyNDAsMzQyODEsMzQyNjksMzQyODIsMzQyNjEsMzQyNzYsMzQyNzcsMzQyOTUsMzQ4MTEsMzQ4MjEsMzQ4MjksMzQ4MDksMzQ4MTQsMzUxNjgsMzUxNjcsMzUxNTgsMzUxNjYsMzU2NDksMzU2NzYsMzU2NzIsMzU2''@;'; put 'put ''NTcsMzU2NzQsMzU2NjIsMzU2NjMsMzU2NTQsMzU2NzMsMzYxMDQsMzYxMDYsMzY0NzYsMzY0NjYsMzY0ODcsMzY0NzAsMzY0NjAsMzY0NzQsMzY0NjgsMzY2OTIsMzY2ODYsMzY3ODEsMzcwMDIsMzcwMDMsMzcyOTcsMzcyOTQsMzc4NTcsMzc4NDEsMzc4NTUsMzc4MjcsMzc4MzIsMzc4NTIs''@;'; put 'put ''Mzc4NTMsMzc4NDYsMzc4NTgsMzc4MzcsMzc4NDgsMzc4NjAsMzc4NDcsMzc4NjQsMzgzNjQsMzg1ODAsMzg2MjcsMzg2OTgsMzg2OTUsMzg3NTMsMzg4NzYsMzg5MDcsMzkwMDYsMzllMywzOTAwMywzOTEwMCwzOTIzNywzOTI0MSwzOTQ0NiwzOTQ0OSwzOTY5MywzOTkxMiwzOTkxMSwzOTg5''@;'; put 'put ''NCwzOTg5OSw0MDMyOSw0MDI4OSw0MDMwNiw0MDI5OCw0MDMwMCw0MDU5NCw0MDU5OSw0MDU5NSw0MDYyOCwyMTI0MCwyMjE4NCwyMjE5OSwyMjE5OCwyMjE5NiwyMjIwNCwyMjc1NiwyMzM2MCwyMzM2MywyMzQyMSwyMzU0MiwyNDAwOSwyNTA4MCwyNTA4MiwyNTg4MCwyNTg3NiwyNTg4MSwy''@;'; put 'put ''NjM0MiwyNjQwNywyNzM3MiwyODczNCwyODcyMCwyODcyMiwyOTIwMCwyOTU2MywyOTkwMywzMDMwNiwzMDMwOSwzMTAxNCwzMTAxOCwzMTAyMCwzMTAxOSwzMTQzMSwzMTQ3OCwzMTgyMCwzMTgxMSwzMTgyMSwzMTk4MywzMTk4NCwzNjc4MiwzMjM4MSwzMjM4MCwzMjM4NiwzMjU4OCwzMjc2''@;'; put 'put ''OCwzMzI0MiwzMzM4MiwzNDI5OSwzNDI5NywzNDMyMSwzNDI5OCwzNDMxMCwzNDMxNSwzNDMxMSwzNDMxNCwzNDgzNiwzNDgzNywzNTE3MiwzNTI1OCwzNTMyMCwzNTY5NiwzNTY5MiwzNTY4NiwzNTY5NSwzNTY3OSwzNTY5MSwzNjExMSwzNjEwOSwzNjQ4OSwzNjQ4MSwzNjQ4NSwzNjQ4Miwz''@;'; put 'put ''NzMwMCwzNzMyMywzNzkxMiwzNzg5MSwzNzg4NSwzODM2OSwzODcwNCwzOTEwOCwzOTI1MCwzOTI0OSwzOTMzNiwzOTQ2NywzOTQ3MiwzOTQ3OSwzOTQ3NywzOTk1NSwzOTk0OSw0MDU2OSw0MDYyOSw0MDY4MCw0MDc1MSw0MDc5OSw0MDgwMyw0MDgwMSwyMDc5MSwyMDc5MiwyMjIwOSwyMjIw''@;'; put 'put ''OCwyMjIxMCwyMjgwNCwyMzY2MCwyNDAxMywyNTA4NCwyNTA4NiwyNTg4NSwyNTg4NCwyNjAwNSwyNjM0NSwyNzM4NywyNzM5NiwyNzM4NiwyNzU3MCwyODc0OCwyOTIxMSwyOTM1MSwyOTkxMCwyOTkwOCwzMDMxMywzMDY3NSwzMTgyNCwzMjM5OSwzMjM5NiwzMjcwMCwzNDMyNywzNDM0OSwz''@;'; put 'put ''NDMzMCwzNDg1MSwzNDg1MCwzNDg0OSwzNDg0NywzNTE3OCwzNTE4MCwzNTI2MSwzNTcwMCwzNTcwMywzNTcwOSwzNjExNSwzNjQ5MCwzNjQ5MywzNjQ5MSwzNjcwMywzNjc4MywzNzMwNiwzNzkzNCwzNzkzOSwzNzk0MSwzNzk0NiwzNzk0NCwzNzkzOCwzNzkzMSwzODM3MCwzODcxMiwzODcx''@;'; put 'put ''MywzODcwNiwzODkxMSwzOTAxNSwzOTAxMywzOTI1NSwzOTQ5MywzOTQ5MSwzOTQ4OCwzOTQ4NiwzOTYzMSwzOTc2NCwzOTc2MSwzOTk4MSwzOTk3Myw0MDM2Nyw0MDM3Miw0MDM4Niw0MDM3Niw0MDYwNSw0MDY4Nyw0MDcyOSw0MDc5Niw0MDgwNiw0MDgwNywyMDc5NiwyMDc5NSwyMjIxNiwy''@;'; put 'put ''MjIxOCwyMjIxNywyMzQyMywyNDAyMCwyNDAxOCwyNDM5OCwyNTA4NywyNTg5MiwyNzQwMiwyNzQ4OSwyODc1MywyODc2MCwyOTU2OCwyOTkyNCwzMDA5MCwzMDMxOCwzMDMxNiwzMTE1NSwzMTg0MCwzMTgzOSwzMjg5NCwzMjg5MywzMzI0NywzNTE4NiwzNTE4MywzNTMyNCwzNTcxMiwzNjEx''@;'; put 'put ''OCwzNjExOSwzNjQ5NywzNjQ5OSwzNjcwNSwzNzE5MiwzNzk1NiwzNzk2OSwzNzk3MCwzODcxNywzODcxOCwzODg1MSwzODg0OSwzOTAxOSwzOTI1MywzOTUwOSwzOTUwMSwzOTYzNCwzOTcwNiw0MDAwOSwzOTk4NSwzOTk5OCwzOTk5NSw0MDQwMyw0MDQwNyw0MDc1Niw0MDgxMiw0MDgxMCw0''@;'; put 'put ''MDg1MiwyMjIyMCwyNDAyMiwyNTA4OCwyNTg5MSwyNTg5OSwyNTg5OCwyNjM0OCwyNzQwOCwyOTkxNCwzMTQzNCwzMTg0NCwzMTg0MywzMTg0NSwzMjQwMywzMjQwNiwzMjQwNCwzMzI1MCwzNDM2MCwzNDM2NywzNDg2NSwzNTcyMiwzNzAwOCwzNzAwNywzNzk4NywzNzk4NCwzNzk4OCwzODc2''@;'; put 'put ''MCwzOTAyMywzOTI2MCwzOTUxNCwzOTUxNSwzOTUxMSwzOTYzNSwzOTYzNiwzOTYzMyw0MDAyMCw0MDAyMyw0MDAyMiw0MDQyMSw0MDYwNyw0MDY5MiwyMjIyNSwyMjc2MSwyNTkwMCwyODc2NiwzMDMyMSwzMDMyMiwzMDY3OSwzMjU5MiwzMjY0OCwzNDg3MCwzNDg3MywzNDkxNCwzNTczMSwz''@;'; put 'put ''NTczMCwzNTczNCwzMzM5OSwzNjEyMywzNzMxMiwzNzk5NCwzODcyMiwzODcyOCwzODcyNCwzODg1NCwzOTAyNCwzOTUxOSwzOTcxNCwzOTc2OCw0MDAzMSw0MDQ0MSw0MDQ0Miw0MDU3Miw0MDU3Myw0MDcxMSw0MDgyMyw0MDgxOCwyNDMwNywyNzQxNCwyODc3MSwzMTg1MiwzMTg1NCwzNDg3''@;'; put 'put ''NSwzNTI2NCwzNjUxMywzNzMxMywzODAwMiwzOGUzLDM5MDI1LDM5MjYyLDM5NjM4LDM5NzE1LDQwNjUyLDI4NzcyLDMwNjgyLDM1NzM4LDM4MDA3LDM4ODU3LDM5NTIyLDM5NTI1LDMyNDEyLDM1NzQwLDM2NTIyLDM3MzE3LDM4MDEzLDM4MDE0LDM4MDEyLDQwMDU1LDQwMDU2LDQwNjk1LDM1''@;'; put 'put ''OTI0LDM4MDE1LDQwNDc0LDI5MjI0LDM5NTMwLDM5NzI5LDQwNDc1LDQwNDc4LDMxODU4LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw4NTYwLDg1NjEsODU2''@;'; put 'put ''Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDIwMDIyLDIwMDMxLDIwMTAxLDIwMTI4LDIwODY2LDIwODg2LDIwOTA3LDIxMjQxLDIxMzA0LDIxMzUzLDIxNDMwLDIyNzk0LDIzNDI0LDI0MDI3LDEyMDgzLDI0MTkxLDI0MzA4LDI0NDAwLDI0NDE3LDI1OTA4LDI2MDgwLDMw''@;'; put 'put ''MDk4LDMwMzI2LDM2Nzg5LDM4NTgyLDE2OCw3MTAsMTI1NDEsMTI1NDIsMTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsNjUzMzksNjUzNDEsMTAwNDUsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIz''@;'; put 'put ''NjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODks''@;'; put 'put ''MTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0''@;'; put 'put ''MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcs''@;'; put 'put ''MTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0''@;'; put 'put ''ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIs''@;'; put 'put ''MTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAy''@;'; put 'put ''NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEw''@;'; put 'put ''NSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsODY3OSw4NjMyLDg2MzMsMTI3NTEsMTMxMjc2LDIwMDU4''@;'; put 'put ''LDEzMTIxMCwyMDk5NCwxNzU1Myw0MDg4MCwyMDg3Miw0MDg4MSwxNjEyODcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsMTI0NDMsMTI0NDQsMTE5MDQsMTE5MDgsMTE5MTAsMTE5MTEsMTE5MTIsMTE5''@;'; put 'put ''MTQsMTE5MTYsMTE5MTcsMTE5MjUsMTE5MzIsMTE5MzMsMTE5NDEsMTE5NDMsMTE5NDYsMTE5NDgsMTE5NTAsMTE5NTgsMTE5NjQsMTE5NjYsMTE5NzQsMTE5NzgsMTE5ODAsMTE5ODEsMTE5ODMsMTE5OTAsMTE5OTEsMTE5OTgsMTIwMDMsbnVsbCxudWxsLG51bGwsNjQzLDU5Miw2MDMsNTk2''@;'; put 'put ''LDYyOSwzMzksMjQ4LDMzMSw2NTAsNjE4LDIwMDM0LDIwMDYwLDIwOTgxLDIxMjc0LDIxMzc4LDE5OTc1LDE5OTgwLDIwMDM5LDIwMTA5LDIyMjMxLDY0MDEyLDIzNjYyLDI0NDM1LDE5OTgzLDIwODcxLDE5OTgyLDIwMDE0LDIwMTE1LDIwMTYyLDIwMTY5LDIwMTY4LDIwODg4LDIxMjQ0LDIx''@;'; put 'put ''MzU2LDIxNDMzLDIyMzA0LDIyNzg3LDIyODI4LDIzNTY4LDI0MDYzLDI2MDgxLDI3NTcxLDI3NTk2LDI3NjY4LDI5MjQ3LDIwMDE3LDIwMDI4LDIwMjAwLDIwMTg4LDIwMjAxLDIwMTkzLDIwMTg5LDIwMTg2LDIxMDA0LDIxMjc2LDIxMzI0LDIyMzA2LDIyMzA3LDIyODA3LDIyODMxLDIzNDI1''@;'; put 'put ''LDIzNDI4LDIzNTcwLDIzNjExLDIzNjY4LDIzNjY3LDI0MDY4LDI0MTkyLDI0MTk0LDI0NTIxLDI1MDk3LDI1MTY4LDI3NjY5LDI3NzAyLDI3NzE1LDI3NzExLDI3NzA3LDI5MzU4LDI5MzYwLDI5NTc4LDMxMTYwLDMyOTA2LDM4NDMwLDIwMjM4LDIwMjQ4LDIwMjY4LDIwMjEzLDIwMjQ0LDIw''@;'; put 'put ''MjA5LDIwMjI0LDIwMjE1LDIwMjMyLDIwMjUzLDIwMjI2LDIwMjI5LDIwMjU4LDIwMjQzLDIwMjI4LDIwMjEyLDIwMjQyLDIwOTEzLDIxMDExLDIxMDAxLDIxMDA4LDIxMTU4LDIxMjgyLDIxMjc5LDIxMzI1LDIxMzg2LDIxNTExLDIyMjQxLDIyMjM5LDIyMzE4LDIyMzE0LDIyMzI0LDIyODQ0''@;'; put 'put ''LDIyOTEyLDIyOTA4LDIyOTE3LDIyOTA3LDIyOTEwLDIyOTAzLDIyOTExLDIzMzgyLDIzNTczLDIzNTg5LDIzNjc2LDIzNjc0LDIzNjc1LDIzNjc4LDI0MDMxLDI0MTgxLDI0MTk2LDI0MzIyLDI0MzQ2LDI0NDM2LDI0NTMzLDI0NTMyLDI0NTI3LDI1MTgwLDI1MTgyLDI1MTg4LDI1MTg1LDI1''@;'; put 'put ''MTkwLDI1MTg2LDI1MTc3LDI1MTg0LDI1MTc4LDI1MTg5LDI2MDk1LDI2MDk0LDI2NDMwLDI2NDI1LDI2NDI0LDI2NDI3LDI2NDI2LDI2NDMxLDI2NDI4LDI2NDE5LDI3NjcyLDI3NzE4LDI3NzMwLDI3NzQwLDI3NzI3LDI3NzIyLDI3NzMyLDI3NzIzLDI3NzI0LDI4Nzg1LDI5Mjc4LDI5MzY0''@;'; put 'put ''LDI5MzY1LDI5NTgyLDI5OTk0LDMwMzM1LDMxMzQ5LDMyNTkzLDMzNDAwLDMzNDA0LDMzNDA4LDMzNDA1LDMzNDA3LDM0MzgxLDM1MTk4LDM3MDE3LDM3MDE1LDM3MDE2LDM3MDE5LDM3MDEyLDM4NDM0LDM4NDM2LDM4NDMyLDM4NDM1LDIwMzEwLDIwMjgzLDIwMzIyLDIwMjk3LDIwMzA3LDIw''@;'; put 'put ''MzI0LDIwMjg2LDIwMzI3LDIwMzA2LDIwMzE5LDIwMjg5LDIwMzEyLDIwMjY5LDIwMjc1LDIwMjg3LDIwMzIxLDIwODc5LDIwOTIxLDIxMDIwLDIxMDIyLDIxMDI1LDIxMTY1LDIxMTY2LDIxMjU3LDIxMzQ3LDIxMzYyLDIxMzkwLDIxMzkxLDIxNTUyLDIxNTU5LDIxNTQ2LDIxNTg4LDIxNTcz''@;'; put 'put ''LDIxNTI5LDIxNTMyLDIxNTQxLDIxNTI4LDIxNTY1LDIxNTgzLDIxNTY5LDIxNTQ0LDIxNTQwLDIxNTc1LDIyMjU0LDIyMjQ3LDIyMjQ1LDIyMzM3LDIyMzQxLDIyMzQ4LDIyMzQ1LDIyMzQ3LDIyMzU0LDIyNzkwLDIyODQ4LDIyOTUwLDIyOTM2LDIyOTQ0LDIyOTM1LDIyOTI2LDIyOTQ2LDIy''@;'; put 'put ''OTI4LDIyOTI3LDIyOTUxLDIyOTQ1LDIzNDM4LDIzNDQyLDIzNTkyLDIzNTk0LDIzNjkzLDIzNjk1LDIzNjg4LDIzNjkxLDIzNjg5LDIzNjk4LDIzNjkwLDIzNjg2LDIzNjk5LDIzNzAxLDI0MDMyLDI0MDc0LDI0MDc4LDI0MjAzLDI0MjAxLDI0MjA0LDI0MjAwLDI0MjA1LDI0MzI1LDI0MzQ5''@;'; put 'put ''LDI0NDQwLDI0NDM4LDI0NTMwLDI0NTI5LDI0NTI4LDI0NTU3LDI0NTUyLDI0NTU4LDI0NTYzLDI0NTQ1LDI0NTQ4LDI0NTQ3LDI0NTcwLDI0NTU5LDI0NTY3LDI0NTcxLDI0NTc2LDI0NTY0LDI1MTQ2LDI1MjE5LDI1MjI4LDI1MjMwLDI1MjMxLDI1MjM2LDI1MjIzLDI1MjAxLDI1MjExLDI1''@;'; put 'put ''MjEwLDI1MjAwLDI1MjE3LDI1MjI0LDI1MjA3LDI1MjEzLDI1MjAyLDI1MjA0LDI1OTExLDI2MDk2LDI2MTAwLDI2MDk5LDI2MDk4LDI2MTAxLDI2NDM3LDI2NDM5LDI2NDU3LDI2NDUzLDI2NDQ0LDI2NDQwLDI2NDYxLDI2NDQ1LDI2NDU4LDI2NDQzLDI3NjAwLDI3NjczLDI3Njc0LDI3NzY4''@;'; put 'put ''LDI3NzUxLDI3NzU1LDI3NzgwLDI3Nzg3LDI3NzkxLDI3NzYxLDI3NzU5LDI3NzUzLDI3ODAyLDI3NzU3LDI3NzgzLDI3Nzk3LDI3ODA0LDI3NzUwLDI3NzYzLDI3NzQ5LDI3NzcxLDI3NzkwLDI4Nzg4LDI4Nzk0LDI5MjgzLDI5Mzc1LDI5MzczLDI5Mzc5LDI5MzgyLDI5Mzc3LDI5MzcwLDI5''@;'; put 'put ''MzgxLDI5NTg5LDI5NTkxLDI5NTg3LDI5NTg4LDI5NTg2LDMwMDEwLDMwMDA5LDMwMTAwLDMwMTAxLDMwMzM3LDMxMDM3LDMyODIwLDMyOTE3LDMyOTIxLDMyOTEyLDMyOTE0LDMyOTI0LDMzNDI0LDMzNDIzLDMzNDEzLDMzNDIyLDMzNDI1LDMzNDI3LDMzNDE4LDMzNDExLDMzNDEyLDM1OTYw''@;'; put 'put ''LDM2ODA5LDM2Nzk5LDM3MDIzLDM3MDI1LDM3MDI5LDM3MDIyLDM3MDMxLDM3MDI0LDM4NDQ4LDM4NDQwLDM4NDQ3LDM4NDQ1LDIwMDE5LDIwMzc2LDIwMzQ4LDIwMzU3LDIwMzQ5LDIwMzUyLDIwMzU5LDIwMzQyLDIwMzQwLDIwMzYxLDIwMzU2LDIwMzQzLDIwMzAwLDIwMzc1LDIwMzMwLDIw''@;'; put 'put ''Mzc4LDIwMzQ1LDIwMzUzLDIwMzQ0LDIwMzY4LDIwMzgwLDIwMzcyLDIwMzgyLDIwMzcwLDIwMzU0LDIwMzczLDIwMzMxLDIwMzM0LDIwODk0LDIwOTI0LDIwOTI2LDIxMDQ1LDIxMDQyLDIxMDQzLDIxMDYyLDIxMDQxLDIxMTgwLDIxMjU4LDIxMjU5LDIxMzA4LDIxMzk0LDIxMzk2LDIxNjM5''@;'; put 'put ''LDIxNjMxLDIxNjMzLDIxNjQ5LDIxNjM0LDIxNjQwLDIxNjExLDIxNjI2LDIxNjMwLDIxNjA1LDIxNjEyLDIxNjIwLDIxNjA2LDIxNjQ1LDIxNjE1LDIxNjAxLDIxNjAwLDIxNjU2LDIxNjAzLDIxNjA3LDIxNjA0LDIyMjYzLDIyMjY1LDIyMzgzLDIyMzg2LDIyMzgxLDIyMzc5LDIyMzg1LDIy''@;'; put 'put ''Mzg0LDIyMzkwLDIyNDAwLDIyMzg5LDIyMzk1LDIyMzg3LDIyMzg4LDIyMzcwLDIyMzc2LDIyMzk3LDIyNzk2LDIyODUzLDIyOTY1LDIyOTcwLDIyOTkxLDIyOTkwLDIyOTYyLDIyOTg4LDIyOTc3LDIyOTY2LDIyOTcyLDIyOTc5LDIyOTk4LDIyOTYxLDIyOTczLDIyOTc2LDIyOTg0LDIyOTY0''@;'; put 'put ''LDIyOTgzLDIzMzk0LDIzMzk3LDIzNDQzLDIzNDQ1LDIzNjIwLDIzNjIzLDIzNzI2LDIzNzE2LDIzNzEyLDIzNzMzLDIzNzI3LDIzNzIwLDIzNzI0LDIzNzExLDIzNzE1LDIzNzI1LDIzNzE0LDIzNzIyLDIzNzE5LDIzNzA5LDIzNzE3LDIzNzM0LDIzNzI4LDIzNzE4LDI0MDg3LDI0MDg0LDI0''@;'; put 'put ''MDg5LDI0MzYwLDI0MzU0LDI0MzU1LDI0MzU2LDI0NDA0LDI0NDUwLDI0NDQ2LDI0NDQ1LDI0NTQyLDI0NTQ5LDI0NjIxLDI0NjE0LDI0NjAxLDI0NjI2LDI0NTg3LDI0NjI4LDI0NTg2LDI0NTk5LDI0NjI3LDI0NjAyLDI0NjA2LDI0NjIwLDI0NjEwLDI0NTg5LDI0NTkyLDI0NjIyLDI0NTk1''@;'; put 'put ''LDI0NTkzLDI0NTg4LDI0NTg1LDI0NjA0LDI1MTA4LDI1MTQ5LDI1MjYxLDI1MjY4LDI1Mjk3LDI1Mjc4LDI1MjU4LDI1MjcwLDI1MjkwLDI1MjYyLDI1MjY3LDI1MjYzLDI1Mjc1LDI1MjU3LDI1MjY0LDI1MjcyLDI1OTE3LDI2MDI0LDI2MDQzLDI2MTIxLDI2MTA4LDI2MTE2LDI2MTMwLDI2''@;'; put 'put ''MTIwLDI2MTA3LDI2MTE1LDI2MTIzLDI2MTI1LDI2MTE3LDI2MTA5LDI2MTI5LDI2MTI4LDI2MzU4LDI2Mzc4LDI2NTAxLDI2NDc2LDI2NTEwLDI2NTE0LDI2NDg2LDI2NDkxLDI2NTIwLDI2NTAyLDI2NTAwLDI2NDg0LDI2NTA5LDI2NTA4LDI2NDkwLDI2NTI3LDI2NTEzLDI2NTIxLDI2NDk5''@;'; put 'put ''LDI2NDkzLDI2NDk3LDI2NDg4LDI2NDg5LDI2NTE2LDI3NDI5LDI3NTIwLDI3NTE4LDI3NjE0LDI3Njc3LDI3Nzk1LDI3ODg0LDI3ODgzLDI3ODg2LDI3ODY1LDI3ODMwLDI3ODYwLDI3ODIxLDI3ODc5LDI3ODMxLDI3ODU2LDI3ODQyLDI3ODM0LDI3ODQzLDI3ODQ2LDI3ODg1LDI3ODkwLDI3''@;'; put 'put ''ODU4LDI3ODY5LDI3ODI4LDI3Nzg2LDI3ODA1LDI3Nzc2LDI3ODcwLDI3ODQwLDI3OTUyLDI3ODUzLDI3ODQ3LDI3ODI0LDI3ODk3LDI3ODU1LDI3ODgxLDI3ODU3LDI4ODIwLDI4ODI0LDI4ODA1LDI4ODE5LDI4ODA2LDI4ODA0LDI4ODE3LDI4ODIyLDI4ODAyLDI4ODI2LDI4ODAzLDI5Mjkw''@;'; put 'put ''LDI5Mzk4LDI5Mzg3LDI5NDAwLDI5Mzg1LDI5NDA0LDI5Mzk0LDI5Mzk2LDI5NDAyLDI5Mzg4LDI5MzkzLDI5NjA0LDI5NjAxLDI5NjEzLDI5NjA2LDI5NjAyLDI5NjAwLDI5NjEyLDI5NTk3LDI5OTE3LDI5OTI4LDMwMDE1LDMwMDE2LDMwMDE0LDMwMDkyLDMwMTA0LDMwMzgzLDMwNDUxLDMw''@;'; put 'put ''NDQ5LDMwNDQ4LDMwNDUzLDMwNzEyLDMwNzE2LDMwNzEzLDMwNzE1LDMwNzE0LDMwNzExLDMxMDQyLDMxMDM5LDMxMTczLDMxMzUyLDMxMzU1LDMxNDgzLDMxODYxLDMxOTk3LDMyODIxLDMyOTExLDMyOTQyLDMyOTMxLDMyOTUyLDMyOTQ5LDMyOTQxLDMzMzEyLDMzNDQwLDMzNDcyLDMzNDUx''@;'; put 'put ''LDMzNDM0LDMzNDMyLDMzNDM1LDMzNDYxLDMzNDQ3LDMzNDU0LDMzNDY4LDMzNDM4LDMzNDY2LDMzNDYwLDMzNDQ4LDMzNDQxLDMzNDQ5LDMzNDc0LDMzNDQ0LDMzNDc1LDMzNDYyLDMzNDQyLDM0NDE2LDM0NDE1LDM0NDEzLDM0NDE0LDM1OTI2LDM2ODE4LDM2ODExLDM2ODE5LDM2ODEzLDM2''@;'; put 'put ''ODIyLDM2ODIxLDM2ODIzLDM3MDQyLDM3MDQ0LDM3MDM5LDM3MDQzLDM3MDQwLDM4NDU3LDM4NDYxLDM4NDYwLDM4NDU4LDM4NDY3LDIwNDI5LDIwNDIxLDIwNDM1LDIwNDAyLDIwNDI1LDIwNDI3LDIwNDE3LDIwNDM2LDIwNDQ0LDIwNDQxLDIwNDExLDIwNDAzLDIwNDQzLDIwNDIzLDIwNDM4''@;'; put 'put ''LDIwNDEwLDIwNDE2LDIwNDA5LDIwNDYwLDIxMDYwLDIxMDY1LDIxMTg0LDIxMTg2LDIxMzA5LDIxMzcyLDIxMzk5LDIxMzk4LDIxNDAxLDIxNDAwLDIxNjkwLDIxNjY1LDIxNjc3LDIxNjY5LDIxNzExLDIxNjk5LDMzNTQ5LDIxNjg3LDIxNjc4LDIxNzE4LDIxNjg2LDIxNzAxLDIxNzAyLDIx''@;'; put 'put ''NjY0LDIxNjE2LDIxNjkyLDIxNjY2LDIxNjk0LDIxNjE4LDIxNzI2LDIxNjgwLDIyNDUzLDIyNDMwLDIyNDMxLDIyNDM2LDIyNDEyLDIyNDIzLDIyNDI5LDIyNDI3LDIyNDIwLDIyNDI0LDIyNDE1LDIyNDI1LDIyNDM3LDIyNDI2LDIyNDIxLDIyNzcyLDIyNzk3LDIyODY3LDIzMDA5LDIzMDA2''@;'; put 'put ''LDIzMDIyLDIzMDQwLDIzMDI1LDIzMDA1LDIzMDM0LDIzMDM3LDIzMDM2LDIzMDMwLDIzMDEyLDIzMDI2LDIzMDMxLDIzMDAzLDIzMDE3LDIzMDI3LDIzMDI5LDIzMDA4LDIzMDM4LDIzMDI4LDIzMDIxLDIzNDY0LDIzNjI4LDIzNzYwLDIzNzY4LDIzNzU2LDIzNzY3LDIzNzU1LDIzNzcxLDIz''@;'; put 'put ''Nzc0LDIzNzcwLDIzNzUzLDIzNzUxLDIzNzU0LDIzNzY2LDIzNzYzLDIzNzY0LDIzNzU5LDIzNzUyLDIzNzUwLDIzNzU4LDIzNzc1LDIzODAwLDI0MDU3LDI0MDk3LDI0MDk4LDI0MDk5LDI0MDk2LDI0MTAwLDI0MjQwLDI0MjI4LDI0MjI2LDI0MjE5LDI0MjI3LDI0MjI5LDI0MzI3LDI0MzY2''@;'; put 'put ''LDI0NDA2LDI0NDU0LDI0NjMxLDI0NjMzLDI0NjYwLDI0NjkwLDI0NjcwLDI0NjQ1LDI0NjU5LDI0NjQ3LDI0NjQ5LDI0NjY3LDI0NjUyLDI0NjQwLDI0NjQyLDI0NjcxLDI0NjEyLDI0NjQ0LDI0NjY0LDI0Njc4LDI0Njg2LDI1MTU0LDI1MTU1LDI1Mjk1LDI1MzU3LDI1MzU1LDI1MzMzLDI1''@;'; put 'put ''MzU4LDI1MzQ3LDI1MzIzLDI1MzM3LDI1MzU5LDI1MzU2LDI1MzM2LDI1MzM0LDI1MzQ0LDI1MzYzLDI1MzY0LDI1MzM4LDI1MzY1LDI1MzM5LDI1MzI4LDI1OTIxLDI1OTIzLDI2MDI2LDI2MDQ3LDI2MTY2LDI2MTQ1LDI2MTYyLDI2MTY1LDI2MTQwLDI2MTUwLDI2MTQ2LDI2MTYzLDI2MTU1''@;'; put 'put ''LDI2MTcwLDI2MTQxLDI2MTY0LDI2MTY5LDI2MTU4LDI2MzgzLDI2Mzg0LDI2NTYxLDI2NjEwLDI2NTY4LDI2NTU0LDI2NTg4LDI2NTU1LDI2NjE2LDI2NTg0LDI2NTYwLDI2NTUxLDI2NTY1LDI2NjAzLDI2NTk2LDI2NTkxLDI2NTQ5LDI2NTczLDI2NTQ3LDI2NjE1LDI2NjE0LDI2NjA2LDI2''@;'; put 'put ''NTk1LDI2NTYyLDI2NTUzLDI2NTc0LDI2NTk5LDI2NjA4LDI2NTQ2LDI2NjIwLDI2NTY2LDI2NjA1LDI2NTcyLDI2NTQyLDI2NTk4LDI2NTg3LDI2NjE4LDI2NTY5LDI2NTcwLDI2NTYzLDI2NjAyLDI2NTcxLDI3NDMyLDI3NTIyLDI3NTI0LDI3NTc0LDI3NjA2LDI3NjA4LDI3NjE2LDI3Njgw''@;'; put 'put ''LDI3NjgxLDI3OTQ0LDI3OTU2LDI3OTQ5LDI3OTM1LDI3OTY0LDI3OTY3LDI3OTIyLDI3OTE0LDI3ODY2LDI3OTU1LDI3OTA4LDI3OTI5LDI3OTYyLDI3OTMwLDI3OTIxLDI3OTA0LDI3OTMzLDI3OTcwLDI3OTA1LDI3OTI4LDI3OTU5LDI3OTA3LDI3OTE5LDI3OTY4LDI3OTExLDI3OTM2LDI3''@;'; put 'put ''OTQ4LDI3OTEyLDI3OTM4LDI3OTEzLDI3OTIwLDI4ODU1LDI4ODMxLDI4ODYyLDI4ODQ5LDI4ODQ4LDI4ODMzLDI4ODUyLDI4ODUzLDI4ODQxLDI5MjQ5LDI5MjU3LDI5MjU4LDI5MjkyLDI5Mjk2LDI5Mjk5LDI5Mjk0LDI5Mzg2LDI5NDEyLDI5NDE2LDI5NDE5LDI5NDA3LDI5NDE4LDI5NDE0''@;'; put 'put ''LDI5NDExLDI5NTczLDI5NjQ0LDI5NjM0LDI5NjQwLDI5NjM3LDI5NjI1LDI5NjIyLDI5NjIxLDI5NjIwLDI5Njc1LDI5NjMxLDI5NjM5LDI5NjMwLDI5NjM1LDI5NjM4LDI5NjI0LDI5NjQzLDI5OTMyLDI5OTM0LDI5OTk4LDMwMDIzLDMwMDI0LDMwMTE5LDMwMTIyLDMwMzI5LDMwNDA0LDMw''@;'; put 'put ''NDcyLDMwNDY3LDMwNDY4LDMwNDY5LDMwNDc0LDMwNDU1LDMwNDU5LDMwNDU4LDMwNjk1LDMwNjk2LDMwNzI2LDMwNzM3LDMwNzM4LDMwNzI1LDMwNzM2LDMwNzM1LDMwNzM0LDMwNzI5LDMwNzIzLDMwNzM5LDMxMDUwLDMxMDUyLDMxMDUxLDMxMDQ1LDMxMDQ0LDMxMTg5LDMxMTgxLDMxMTgz''@;'; put 'put ''LDMxMTkwLDMxMTgyLDMxMzYwLDMxMzU4LDMxNDQxLDMxNDg4LDMxNDg5LDMxODY2LDMxODY0LDMxODY1LDMxODcxLDMxODcyLDMxODczLDMyMDAzLDMyMDA4LDMyMDAxLDMyNjAwLDMyNjU3LDMyNjUzLDMyNzAyLDMyNzc1LDMyNzgyLDMyNzgzLDMyNzg4LDMyODIzLDMyOTg0LDMyOTY3LDMy''@;'; put 'put ''OTkyLDMyOTc3LDMyOTY4LDMyOTYyLDMyOTc2LDMyOTY1LDMyOTk1LDMyOTg1LDMyOTg4LDMyOTcwLDMyOTgxLDMyOTY5LDMyOTc1LDMyOTgzLDMyOTk4LDMyOTczLDMzMjc5LDMzMzEzLDMzNDI4LDMzNDk3LDMzNTM0LDMzNTI5LDMzNTQzLDMzNTEyLDMzNTM2LDMzNDkzLDMzNTk0LDMzNTE1''@;'; put 'put ''LDMzNDk0LDMzNTI0LDMzNTE2LDMzNTA1LDMzNTIyLDMzNTI1LDMzNTQ4LDMzNTMxLDMzNTI2LDMzNTIwLDMzNTE0LDMzNTA4LDMzNTA0LDMzNTMwLDMzNTIzLDMzNTE3LDM0NDIzLDM0NDIwLDM0NDI4LDM0NDE5LDM0ODgxLDM0ODk0LDM0OTE5LDM0OTIyLDM0OTIxLDM1MjgzLDM1MzMyLDM1''@;'; put 'put ''MzM1LDM2MjEwLDM2ODM1LDM2ODMzLDM2ODQ2LDM2ODMyLDM3MTA1LDM3MDUzLDM3MDU1LDM3MDc3LDM3MDYxLDM3MDU0LDM3MDYzLDM3MDY3LDM3MDY0LDM3MzMyLDM3MzMxLDM4NDg0LDM4NDc5LDM4NDgxLDM4NDgzLDM4NDc0LDM4NDc4LDIwNTEwLDIwNDg1LDIwNDg3LDIwNDk5LDIwNTE0''@;'; put 'put ''LDIwNTI4LDIwNTA3LDIwNDY5LDIwNDY4LDIwNTMxLDIwNTM1LDIwNTI0LDIwNDcwLDIwNDcxLDIwNTAzLDIwNTA4LDIwNTEyLDIwNTE5LDIwNTMzLDIwNTI3LDIwNTI5LDIwNDk0LDIwODI2LDIwODg0LDIwODgzLDIwOTM4LDIwOTMyLDIwOTMzLDIwOTM2LDIwOTQyLDIxMDg5LDIxMDgyLDIx''@;'; put 'put ''MDc0LDIxMDg2LDIxMDg3LDIxMDc3LDIxMDkwLDIxMTk3LDIxMjYyLDIxNDA2LDIxNzk4LDIxNzMwLDIxNzgzLDIxNzc4LDIxNzM1LDIxNzQ3LDIxNzMyLDIxNzg2LDIxNzU5LDIxNzY0LDIxNzY4LDIxNzM5LDIxNzc3LDIxNzY1LDIxNzQ1LDIxNzcwLDIxNzU1LDIxNzUxLDIxNzUyLDIxNzI4''@;'; put 'put ''LDIxNzc0LDIxNzYzLDIxNzcxLDIyMjczLDIyMjc0LDIyNDc2LDIyNTc4LDIyNDg1LDIyNDgyLDIyNDU4LDIyNDcwLDIyNDYxLDIyNDYwLDIyNDU2LDIyNDU0LDIyNDYzLDIyNDcxLDIyNDgwLDIyNDU3LDIyNDY1LDIyNzk4LDIyODU4LDIzMDY1LDIzMDYyLDIzMDg1LDIzMDg2LDIzMDYxLDIz''@;'; put 'put ''MDU1LDIzMDYzLDIzMDUwLDIzMDcwLDIzMDkxLDIzNDA0LDIzNDYzLDIzNDY5LDIzNDY4LDIzNTU1LDIzNjM4LDIzNjM2LDIzNzg4LDIzODA3LDIzNzkwLDIzNzkzLDIzNzk5LDIzODA4LDIzODAxLDI0MTA1LDI0MTA0LDI0MjMyLDI0MjM4LDI0MjM0LDI0MjM2LDI0MzcxLDI0MzY4LDI0NDIz''@;'; put 'put ''LDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NzM4LDI0NzEyLDI0NzA0LDI0NzIyLDI0NzA1LDI0NzMzLDI0NzA3LDI0NzI1LDI0NzMxLDI0NzI3LDI0NzExLDI0NzMyLDI0NzE4LDI1MTEzLDI1MTU4LDI1MzMwLDI1MzYwLDI1NDMwLDI1Mzg4LDI1NDEyLDI1NDEzLDI1Mzk4LDI1NDExLDI1''@;'; put 'put ''NTcyLDI1NDAxLDI1NDE5LDI1NDE4LDI1NDA0LDI1Mzg1LDI1NDA5LDI1Mzk2LDI1NDMyLDI1NDI4LDI1NDMzLDI1Mzg5LDI1NDE1LDI1Mzk1LDI1NDM0LDI1NDI1LDI1NDAwLDI1NDMxLDI1NDA4LDI1NDE2LDI1OTMwLDI1OTI2LDI2MDU0LDI2MDUxLDI2MDUyLDI2MDUwLDI2MTg2LDI2MjA3''@;'; put 'put ''LDI2MTgzLDI2MTkzLDI2Mzg2LDI2Mzg3LDI2NjU1LDI2NjUwLDI2Njk3LDI2Njc0LDI2Njc1LDI2NjgzLDI2Njk5LDI2NzAzLDI2NjQ2LDI2NjczLDI2NjUyLDI2Njc3LDI2NjY3LDI2NjY5LDI2NjcxLDI2NzAyLDI2NjkyLDI2Njc2LDI2NjUzLDI2NjQyLDI2NjQ0LDI2NjYyLDI2NjY0LDI2''@;'; put 'put ''NjcwLDI2NzAxLDI2NjgyLDI2NjYxLDI2NjU2LDI3NDM2LDI3NDM5LDI3NDM3LDI3NDQxLDI3NDQ0LDI3NTAxLDMyODk4LDI3NTI4LDI3NjIyLDI3NjIwLDI3NjI0LDI3NjE5LDI3NjE4LDI3NjIzLDI3Njg1LDI4MDI2LDI4MDAzLDI4MDA0LDI4MDIyLDI3OTE3LDI4MDAxLDI4MDUwLDI3OTky''@;'; put 'put ''LDI4MDAyLDI4MDEzLDI4MDE1LDI4MDQ5LDI4MDQ1LDI4MTQzLDI4MDMxLDI4MDM4LDI3OTk4LDI4MDA3LDI4ZTMsMjgwNTUsMjgwMTYsMjgwMjgsMjc5OTksMjgwMzQsMjgwNTYsMjc5NTEsMjgwMDgsMjgwNDMsMjgwMzAsMjgwMzIsMjgwMzYsMjc5MjYsMjgwMzUsMjgwMjcsMjgwMjksMjgw''@;'; put 'put ''MjEsMjgwNDgsMjg4OTIsMjg4ODMsMjg4ODEsMjg4OTMsMjg4NzUsMzI1NjksMjg4OTgsMjg4ODcsMjg4ODIsMjg4OTQsMjg4OTYsMjg4ODQsMjg4NzcsMjg4NjksMjg4NzAsMjg4NzEsMjg4OTAsMjg4NzgsMjg4OTcsMjkyNTAsMjkzMDQsMjkzMDMsMjkzMDIsMjk0NDAsMjk0MzQsMjk0Mjgs''@;'; put 'put ''Mjk0MzgsMjk0MzAsMjk0MjcsMjk0MzUsMjk0NDEsMjk2NTEsMjk2NTcsMjk2NjksMjk2NTQsMjk2MjgsMjk2NzEsMjk2NjcsMjk2NzMsMjk2NjAsMjk2NTAsMjk2NTksMjk2NTIsMjk2NjEsMjk2NTgsMjk2NTUsMjk2NTYsMjk2NzIsMjk5MTgsMjk5MTksMjk5NDAsMjk5NDEsMjk5ODUsMzAw''@;'; put 'put ''NDMsMzAwNDcsMzAxMjgsMzAxNDUsMzAxMzksMzAxNDgsMzAxNDQsMzAxNDMsMzAxMzQsMzAxMzgsMzAzNDYsMzA0MDksMzA0OTMsMzA0OTEsMzA0ODAsMzA0ODMsMzA0ODIsMzA0OTksMzA0ODEsMzA0ODUsMzA0ODksMzA0OTAsMzA0OTgsMzA1MDMsMzA3NTUsMzA3NjQsMzA3NTQsMzA3NzMs''@;'; put 'put ''MzA3NjcsMzA3NjAsMzA3NjYsMzA3NjMsMzA3NTMsMzA3NjEsMzA3NzEsMzA3NjIsMzA3NjksMzEwNjAsMzEwNjcsMzEwNTUsMzEwNjgsMzEwNTksMzEwNTgsMzEwNTcsMzEyMTEsMzEyMTIsMzEyMDAsMzEyMTQsMzEyMTMsMzEyMTAsMzExOTYsMzExOTgsMzExOTcsMzEzNjYsMzEzNjksMzEz''@;'; put 'put ''NjUsMzEzNzEsMzEzNzIsMzEzNzAsMzEzNjcsMzE0NDgsMzE1MDQsMzE0OTIsMzE1MDcsMzE0OTMsMzE1MDMsMzE0OTYsMzE0OTgsMzE1MDIsMzE0OTcsMzE1MDYsMzE4NzYsMzE4ODksMzE4ODIsMzE4ODQsMzE4ODAsMzE4ODUsMzE4NzcsMzIwMzAsMzIwMjksMzIwMTcsMzIwMTQsMzIwMjQs''@;'; put 'put ''MzIwMjIsMzIwMTksMzIwMzEsMzIwMTgsMzIwMTUsMzIwMTIsMzI2MDQsMzI2MDksMzI2MDYsMzI2MDgsMzI2MDUsMzI2MDMsMzI2NjIsMzI2NTgsMzI3MDcsMzI3MDYsMzI3MDQsMzI3OTAsMzI4MzAsMzI4MjUsMzMwMTgsMzMwMTAsMzMwMTcsMzMwMTMsMzMwMjUsMzMwMTksMzMwMjQsMzMy''@;'; put 'put ''ODEsMzMzMjcsMzMzMTcsMzM1ODcsMzM1ODEsMzM2MDQsMzM1NjEsMzM2MTcsMzM1NzMsMzM2MjIsMzM1OTksMzM2MDEsMzM1NzQsMzM1NjQsMzM1NzAsMzM2MDIsMzM2MTQsMzM1NjMsMzM1NzgsMzM1NDQsMzM1OTYsMzM2MTMsMzM1NTgsMzM1NzIsMzM1NjgsMzM1OTEsMzM1ODMsMzM1Nzcs''@;'; put 'put ''MzM2MDcsMzM2MDUsMzM2MTIsMzM2MTksMzM1NjYsMzM1ODAsMzM2MTEsMzM1NzUsMzM2MDgsMzQzODcsMzQzODYsMzQ0NjYsMzQ0NzIsMzQ0NTQsMzQ0NDUsMzQ0NDksMzQ0NjIsMzQ0MzksMzQ0NTUsMzQ0MzgsMzQ0NDMsMzQ0NTgsMzQ0MzcsMzQ0NjksMzQ0NTcsMzQ0NjUsMzQ0NzEsMzQ0''@;'; put 'put ''NTMsMzQ0NTYsMzQ0NDYsMzQ0NjEsMzQ0NDgsMzQ0NTIsMzQ4ODMsMzQ4ODQsMzQ5MjUsMzQ5MzMsMzQ5MzQsMzQ5MzAsMzQ5NDQsMzQ5MjksMzQ5NDMsMzQ5MjcsMzQ5NDcsMzQ5NDIsMzQ5MzIsMzQ5NDAsMzUzNDYsMzU5MTEsMzU5MjcsMzU5NjMsMzYwMDQsMzYwMDMsMzYyMTQsMzYyMTYs''@;'; put 'put ''MzYyNzcsMzYyNzksMzYyNzgsMzY1NjEsMzY1NjMsMzY4NjIsMzY4NTMsMzY4NjYsMzY4NjMsMzY4NTksMzY4NjgsMzY4NjAsMzY4NTQsMzcwNzgsMzcwODgsMzcwODEsMzcwODIsMzcwOTEsMzcwODcsMzcwOTMsMzcwODAsMzcwODMsMzcwNzksMzcwODQsMzcwOTIsMzcyMDAsMzcxOTgsMzcx''@;'; put 'put ''OTksMzczMzMsMzczNDYsMzczMzgsMzg0OTIsMzg0OTUsMzg1ODgsMzkxMzksMzk2NDcsMzk3MjcsMjAwOTUsMjA1OTIsMjA1ODYsMjA1NzcsMjA1NzQsMjA1NzYsMjA1NjMsMjA1NTUsMjA1NzMsMjA1OTQsMjA1NTIsMjA1NTcsMjA1NDUsMjA1NzEsMjA1NTQsMjA1NzgsMjA1MDEsMjA1NDks''@;'; put 'put ''MjA1NzUsMjA1ODUsMjA1ODcsMjA1NzksMjA1ODAsMjA1NTAsMjA1NDQsMjA1OTAsMjA1OTUsMjA1NjcsMjA1NjEsMjA5NDQsMjEwOTksMjExMDEsMjExMDAsMjExMDIsMjEyMDYsMjEyMDMsMjEyOTMsMjE0MDQsMjE4NzcsMjE4NzgsMjE4MjAsMjE4MzcsMjE4NDAsMjE4MTIsMjE4MDIsMjE4''@;'; put 'put ''NDEsMjE4NTgsMjE4MTQsMjE4MTMsMjE4MDgsMjE4NDIsMjE4MjksMjE3NzIsMjE4MTAsMjE4NjEsMjE4MzgsMjE4MTcsMjE4MzIsMjE4MDUsMjE4MTksMjE4MjQsMjE4MzUsMjIyODIsMjIyNzksMjI1MjMsMjI1NDgsMjI0OTgsMjI1MTgsMjI0OTIsMjI1MTYsMjI1MjgsMjI1MDksMjI1MjUs''@;'; put 'put ''MjI1MzYsMjI1MjAsMjI1MzksMjI1MTUsMjI0NzksMjI1MzUsMjI1MTAsMjI0OTksMjI1MTQsMjI1MDEsMjI1MDgsMjI0OTcsMjI1NDIsMjI1MjQsMjI1NDQsMjI1MDMsMjI1MjksMjI1NDAsMjI1MTMsMjI1MDUsMjI1MTIsMjI1NDEsMjI1MzIsMjI4NzYsMjMxMzYsMjMxMjgsMjMxMjUsMjMx''@;'; put 'put ''NDMsMjMxMzQsMjMwOTYsMjMwOTMsMjMxNDksMjMxMjAsMjMxMzUsMjMxNDEsMjMxNDgsMjMxMjMsMjMxNDAsMjMxMjcsMjMxMDcsMjMxMzMsMjMxMjIsMjMxMDgsMjMxMzEsMjMxMTIsMjMxODIsMjMxMDIsMjMxMTcsMjMwOTcsMjMxMTYsMjMxNTIsMjMxNDUsMjMxMTEsMjMxMjEsMjMxMjYs''@;'; put 'put ''MjMxMDYsMjMxMzIsMjM0MTAsMjM0MDYsMjM0ODksMjM0ODgsMjM2NDEsMjM4MzgsMjM4MTksMjM4MzcsMjM4MzQsMjM4NDAsMjM4MjAsMjM4NDgsMjM4MjEsMjM4NDYsMjM4NDUsMjM4MjMsMjM4NTYsMjM4MjYsMjM4NDMsMjM4MzksMjM4NTQsMjQxMjYsMjQxMTYsMjQyNDEsMjQyNDQsMjQy''@;'; put 'put ''NDksMjQyNDIsMjQyNDMsMjQzNzQsMjQzNzYsMjQ0NzUsMjQ0NzAsMjQ0NzksMjQ3MTQsMjQ3MjAsMjQ3MTAsMjQ3NjYsMjQ3NTIsMjQ3NjIsMjQ3ODcsMjQ3ODgsMjQ3ODMsMjQ4MDQsMjQ3OTMsMjQ3OTcsMjQ3NzYsMjQ3NTMsMjQ3OTUsMjQ3NTksMjQ3NzgsMjQ3NjcsMjQ3NzEsMjQ3ODEs''@;'; put 'put ''MjQ3NjgsMjUzOTQsMjU0NDUsMjU0ODIsMjU0NzQsMjU0NjksMjU1MzMsMjU1MDIsMjU1MTcsMjU1MDEsMjU0OTUsMjU1MTUsMjU0ODYsMjU0NTUsMjU0NzksMjU0ODgsMjU0NTQsMjU1MTksMjU0NjEsMjU1MDAsMjU0NTMsMjU1MTgsMjU0NjgsMjU1MDgsMjU0MDMsMjU1MDMsMjU0NjQsMjU0''@;'; put 'put ''NzcsMjU0NzMsMjU0ODksMjU0ODUsMjU0NTYsMjU5MzksMjYwNjEsMjYyMTMsMjYyMDksMjYyMDMsMjYyMDEsMjYyMDQsMjYyMTAsMjYzOTIsMjY3NDUsMjY3NTksMjY3NjgsMjY3ODAsMjY3MzMsMjY3MzQsMjY3OTgsMjY3OTUsMjY5NjYsMjY3MzUsMjY3ODcsMjY3OTYsMjY3OTMsMjY3NDEs''@;'; put 'put ''MjY3NDAsMjY4MDIsMjY3NjcsMjY3NDMsMjY3NzAsMjY3NDgsMjY3MzEsMjY3MzgsMjY3OTQsMjY3NTIsMjY3MzcsMjY3NTAsMjY3NzksMjY3NzQsMjY3NjMsMjY3ODQsMjY3NjEsMjY3ODgsMjY3NDQsMjY3NDcsMjY3NjksMjY3NjQsMjY3NjIsMjY3NDksMjc0NDYsMjc0NDMsMjc0NDcsMjc0''@;'; put 'put ''NDgsMjc1MzcsMjc1MzUsMjc1MzMsMjc1MzQsMjc1MzIsMjc2OTAsMjgwOTYsMjgwNzUsMjgwODQsMjgwODMsMjgyNzYsMjgwNzYsMjgxMzcsMjgxMzAsMjgwODcsMjgxNTAsMjgxMTYsMjgxNjAsMjgxMDQsMjgxMjgsMjgxMjcsMjgxMTgsMjgwOTQsMjgxMzMsMjgxMjQsMjgxMjUsMjgxMjMs''@;'; put 'put ''MjgxNDgsMjgxMDYsMjgwOTMsMjgxNDEsMjgxNDQsMjgwOTAsMjgxMTcsMjgwOTgsMjgxMTEsMjgxMDUsMjgxMTIsMjgxNDYsMjgxMTUsMjgxNTcsMjgxMTksMjgxMDksMjgxMzEsMjgwOTEsMjg5MjIsMjg5NDEsMjg5MTksMjg5NTEsMjg5MTYsMjg5NDAsMjg5MTIsMjg5MzIsMjg5MTUsMjg5''@;'; put 'put ''NDQsMjg5MjQsMjg5MjcsMjg5MzQsMjg5NDcsMjg5MjgsMjg5MjAsMjg5MTgsMjg5MzksMjg5MzAsMjg5NDIsMjkzMTAsMjkzMDcsMjkzMDgsMjkzMTEsMjk0NjksMjk0NjMsMjk0NDcsMjk0NTcsMjk0NjQsMjk0NTAsMjk0NDgsMjk0MzksMjk0NTUsMjk0NzAsMjk1NzYsMjk2ODYsMjk2ODgs''@;'; put 'put ''Mjk2ODUsMjk3MDAsMjk2OTcsMjk2OTMsMjk3MDMsMjk2OTYsMjk2OTAsMjk2OTIsMjk2OTUsMjk3MDgsMjk3MDcsMjk2ODQsMjk3MDQsMzAwNTIsMzAwNTEsMzAxNTgsMzAxNjIsMzAxNTksMzAxNTUsMzAxNTYsMzAxNjEsMzAxNjAsMzAzNTEsMzAzNDUsMzA0MTksMzA1MjEsMzA1MTEsMzA1''@;'; put 'put ''MDksMzA1MTMsMzA1MTQsMzA1MTYsMzA1MTUsMzA1MjUsMzA1MDEsMzA1MjMsMzA1MTcsMzA3OTIsMzA4MDIsMzA3OTMsMzA3OTcsMzA3OTQsMzA3OTYsMzA3NTgsMzA3ODksMzA4MDAsMzEwNzYsMzEwNzksMzEwODEsMzEwODIsMzEwNzUsMzEwODMsMzEwNzMsMzExNjMsMzEyMjYsMzEyMjQs''@;'; put 'put ''MzEyMjIsMzEyMjMsMzEzNzUsMzEzODAsMzEzNzYsMzE1NDEsMzE1NTksMzE1NDAsMzE1MjUsMzE1MzYsMzE1MjIsMzE1MjQsMzE1MzksMzE1MTIsMzE1MzAsMzE1MTcsMzE1MzcsMzE1MzEsMzE1MzMsMzE1MzUsMzE1MzgsMzE1NDQsMzE1MTQsMzE1MjMsMzE4OTIsMzE4OTYsMzE4OTQsMzE5''@;'; put 'put ''MDcsMzIwNTMsMzIwNjEsMzIwNTYsMzIwNTQsMzIwNTgsMzIwNjksMzIwNDQsMzIwNDEsMzIwNjUsMzIwNzEsMzIwNjIsMzIwNjMsMzIwNzQsMzIwNTksMzIwNDAsMzI2MTEsMzI2NjEsMzI2NjgsMzI2NjksMzI2NjcsMzI3MTQsMzI3MTUsMzI3MTcsMzI3MjAsMzI3MjEsMzI3MTEsMzI3MTks''@;'; put 'put ''MzI3MTMsMzI3OTksMzI3OTgsMzI3OTUsMzI4MzksMzI4MzUsMzI4NDAsMzMwNDgsMzMwNjEsMzMwNDksMzMwNTEsMzMwNjksMzMwNTUsMzMwNjgsMzMwNTQsMzMwNTcsMzMwNDUsMzMwNjMsMzMwNTMsMzMwNTgsMzMyOTcsMzMzMzYsMzMzMzEsMzMzMzgsMzMzMzIsMzMzMzAsMzMzOTYsMzM2''@;'; put 'put ''ODAsMzM2OTksMzM3MDQsMzM2NzcsMzM2NTgsMzM2NTEsMzM3MDAsMzM2NTIsMzM2NzksMzM2NjUsMzM2ODUsMzM2ODksMzM2NTMsMzM2ODQsMzM3MDUsMzM2NjEsMzM2NjcsMzM2NzYsMzM2OTMsMzM2OTEsMzM3MDYsMzM2NzUsMzM2NjIsMzM3MDEsMzM3MTEsMzM2NzIsMzM2ODcsMzM3MTIs''@;'; put 'put ''MzM2NjMsMzM3MDIsMzM2NzEsMzM3MTAsMzM2NTQsMzM2OTAsMzQzOTMsMzQzOTAsMzQ0OTUsMzQ0ODcsMzQ0OTgsMzQ0OTcsMzQ1MDEsMzQ0OTAsMzQ0ODAsMzQ1MDQsMzQ0ODksMzQ0ODMsMzQ0ODgsMzQ1MDgsMzQ0ODQsMzQ0OTEsMzQ0OTIsMzQ0OTksMzQ0OTMsMzQ0OTQsMzQ4OTgsMzQ5''@;'; put 'put ''NTMsMzQ5NjUsMzQ5ODQsMzQ5NzgsMzQ5ODYsMzQ5NzAsMzQ5NjEsMzQ5NzcsMzQ5NzUsMzQ5NjgsMzQ5ODMsMzQ5NjksMzQ5NzEsMzQ5NjcsMzQ5ODAsMzQ5ODgsMzQ5NTYsMzQ5NjMsMzQ5NTgsMzUyMDIsMzUyODYsMzUyODksMzUyODUsMzUzNzYsMzUzNjcsMzUzNzIsMzUzNTgsMzU4OTcs''@;'; put 'put ''MzU4OTksMzU5MzIsMzU5MzMsMzU5NjUsMzYwMDUsMzYyMjEsMzYyMTksMzYyMTcsMzYyODQsMzYyOTAsMzYyODEsMzYyODcsMzYyODksMzY1NjgsMzY1NzQsMzY1NzMsMzY1NzIsMzY1NjcsMzY1NzYsMzY1NzcsMzY5MDAsMzY4NzUsMzY4ODEsMzY4OTIsMzY4NzYsMzY4OTcsMzcxMDMsMzcw''@;'; put 'put ''OTgsMzcxMDQsMzcxMDgsMzcxMDYsMzcxMDcsMzcwNzYsMzcwOTksMzcxMDAsMzcwOTcsMzcyMDYsMzcyMDgsMzcyMTAsMzcyMDMsMzcyMDUsMzczNTYsMzczNjQsMzczNjEsMzczNjMsMzczNjgsMzczNDgsMzczNjksMzczNTQsMzczNTUsMzczNjcsMzczNTIsMzczNTgsMzgyNjYsMzgyNzgs''@;'; put 'put ''MzgyODAsMzg1MjQsMzg1MDksMzg1MDcsMzg1MTMsMzg1MTEsMzg1OTEsMzg3NjIsMzg5MTYsMzkxNDEsMzkzMTksMjA2MzUsMjA2MjksMjA2MjgsMjA2MzgsMjA2MTksMjA2NDMsMjA2MTEsMjA2MjAsMjA2MjIsMjA2MzcsMjA1ODQsMjA2MzYsMjA2MjYsMjA2MTAsMjA2MTUsMjA4MzEsMjA5''@;'; put 'put ''NDgsMjEyNjYsMjEyNjUsMjE0MTIsMjE0MTUsMjE5MDUsMjE5MjgsMjE5MjUsMjE5MzMsMjE4NzksMjIwODUsMjE5MjIsMjE5MDcsMjE4OTYsMjE5MDMsMjE5NDEsMjE4ODksMjE5MjMsMjE5MDYsMjE5MjQsMjE4ODUsMjE5MDAsMjE5MjYsMjE4ODcsMjE5MDksMjE5MjEsMjE5MDIsMjIyODQs''@;'; put 'put ''MjI1NjksMjI1ODMsMjI1NTMsMjI1NTgsMjI1NjcsMjI1NjMsMjI1NjgsMjI1MTcsMjI2MDAsMjI1NjUsMjI1NTYsMjI1NTUsMjI1NzksMjI1OTEsMjI1ODIsMjI1NzQsMjI1ODUsMjI1ODQsMjI1NzMsMjI1NzIsMjI1ODcsMjI4ODEsMjMyMTUsMjMxODgsMjMxOTksMjMxNjIsMjMyMDIsMjMx''@;'; put 'put ''OTgsMjMxNjAsMjMyMDYsMjMxNjQsMjMyMDUsMjMyMTIsMjMxODksMjMyMTQsMjMwOTUsMjMxNzIsMjMxNzgsMjMxOTEsMjMxNzEsMjMxNzksMjMyMDksMjMxNjMsMjMxNjUsMjMxODAsMjMxOTYsMjMxODMsMjMxODcsMjMxOTcsMjM1MzAsMjM1MDEsMjM0OTksMjM1MDgsMjM1MDUsMjM0OTgs''@;'; put 'put ''MjM1MDIsMjM1NjQsMjM2MDAsMjM4NjMsMjM4NzUsMjM5MTUsMjM4NzMsMjM4ODMsMjM4NzEsMjM4NjEsMjM4ODksMjM4ODYsMjM4OTMsMjM4NTksMjM4NjYsMjM4OTAsMjM4NjksMjM4NTcsMjM4OTcsMjM4NzQsMjM4NjUsMjM4ODEsMjM4NjQsMjM4NjgsMjM4NTgsMjM4NjIsMjM4NzIsMjM4''@;'; put 'put ''NzcsMjQxMzIsMjQxMjksMjQ0MDgsMjQ0ODYsMjQ0ODUsMjQ0OTEsMjQ3NzcsMjQ3NjEsMjQ3ODAsMjQ4MDIsMjQ3ODIsMjQ3NzIsMjQ4NTIsMjQ4MTgsMjQ4NDIsMjQ4NTQsMjQ4MzcsMjQ4MjEsMjQ4NTEsMjQ4MjQsMjQ4MjgsMjQ4MzAsMjQ3NjksMjQ4MzUsMjQ4NTYsMjQ4NjEsMjQ4NDgs''@;'; put 'put ''MjQ4MzEsMjQ4MzYsMjQ4NDMsMjUxNjIsMjU0OTIsMjU1MjEsMjU1MjAsMjU1NTAsMjU1NzMsMjU1NzYsMjU1ODMsMjU1MzksMjU3NTcsMjU1ODcsMjU1NDYsMjU1NjgsMjU1OTAsMjU1NTcsMjU1ODYsMjU1ODksMjU2OTcsMjU1NjcsMjU1MzQsMjU1NjUsMjU1NjQsMjU1NDAsMjU1NjAsMjU1''@;'; put 'put ''NTUsMjU1MzgsMjU1NDMsMjU1NDgsMjU1NDcsMjU1NDQsMjU1ODQsMjU1NTksMjU1NjEsMjU5MDYsMjU5NTksMjU5NjIsMjU5NTYsMjU5NDgsMjU5NjAsMjU5NTcsMjU5OTYsMjYwMTMsMjYwMTQsMjYwMzAsMjYwNjQsMjYwNjYsMjYyMzYsMjYyMjAsMjYyMzUsMjYyNDAsMjYyMjUsMjYyMzMs''@;'; put 'put ''MjYyMTgsMjYyMjYsMjYzNjksMjY4OTIsMjY4MzUsMjY4ODQsMjY4NDQsMjY5MjIsMjY4NjAsMjY4NTgsMjY4NjUsMjY4OTUsMjY4MzgsMjY4NzEsMjY4NTksMjY4NTIsMjY4NzAsMjY4OTksMjY4OTYsMjY4NjcsMjY4NDksMjY4ODcsMjY4MjgsMjY4ODgsMjY5OTIsMjY4MDQsMjY4OTcsMjY4''@;'; put 'put ''NjMsMjY4MjIsMjY5MDAsMjY4NzIsMjY4MzIsMjY4NzcsMjY4NzYsMjY4NTYsMjY4OTEsMjY4OTAsMjY5MDMsMjY4MzAsMjY4MjQsMjY4NDUsMjY4NDYsMjY4NTQsMjY4NjgsMjY4MzMsMjY4ODYsMjY4MzYsMjY4NTcsMjY5MDEsMjY5MTcsMjY4MjMsMjc0NDksMjc0NTEsMjc0NTUsMjc0NTIs''@;'; put 'put ''Mjc1NDAsMjc1NDMsMjc1NDUsMjc1NDEsMjc1ODEsMjc2MzIsMjc2MzQsMjc2MzUsMjc2OTYsMjgxNTYsMjgyMzAsMjgyMzEsMjgxOTEsMjgyMzMsMjgyOTYsMjgyMjAsMjgyMjEsMjgyMjksMjgyNTgsMjgyMDMsMjgyMjMsMjgyMjUsMjgyNTMsMjgyNzUsMjgxODgsMjgyMTEsMjgyMzUsMjgy''@;'; put 'put ''MjQsMjgyNDEsMjgyMTksMjgxNjMsMjgyMDYsMjgyNTQsMjgyNjQsMjgyNTIsMjgyNTcsMjgyMDksMjgyMDAsMjgyNTYsMjgyNzMsMjgyNjcsMjgyMTcsMjgxOTQsMjgyMDgsMjgyNDMsMjgyNjEsMjgxOTksMjgyODAsMjgyNjAsMjgyNzksMjgyNDUsMjgyODEsMjgyNDIsMjgyNjIsMjgyMTMs''@;'; put 'put ''MjgyMTQsMjgyNTAsMjg5NjAsMjg5NTgsMjg5NzUsMjg5MjMsMjg5NzQsMjg5NzcsMjg5NjMsMjg5NjUsMjg5NjIsMjg5NzgsMjg5NTksMjg5NjgsMjg5ODYsMjg5NTUsMjkyNTksMjkyNzQsMjkzMjAsMjkzMjEsMjkzMTgsMjkzMTcsMjkzMjMsMjk0NTgsMjk0NTEsMjk0ODgsMjk0NzQsMjk0''@;'; put 'put ''ODksMjk0OTEsMjk0NzksMjk0OTAsMjk0ODUsMjk0NzgsMjk0NzUsMjk0OTMsMjk0NTIsMjk3NDIsMjk3NDAsMjk3NDQsMjk3MzksMjk3MTgsMjk3MjIsMjk3MjksMjk3NDEsMjk3NDUsMjk3MzIsMjk3MzEsMjk3MjUsMjk3MzcsMjk3MjgsMjk3NDYsMjk5NDcsMjk5OTksMzAwNjMsMzAwNjAs''@;'; put 'put ''MzAxODMsMzAxNzAsMzAxNzcsMzAxODIsMzAxNzMsMzAxNzUsMzAxODAsMzAxNjcsMzAzNTcsMzAzNTQsMzA0MjYsMzA1MzQsMzA1MzUsMzA1MzIsMzA1NDEsMzA1MzMsMzA1MzgsMzA1NDIsMzA1MzksMzA1NDAsMzA2ODYsMzA3MDAsMzA4MTYsMzA4MjAsMzA4MjEsMzA4MTIsMzA4MjksMzA4''@;'; put 'put ''MzMsMzA4MjYsMzA4MzAsMzA4MzIsMzA4MjUsMzA4MjQsMzA4MTQsMzA4MTgsMzEwOTIsMzEwOTEsMzEwOTAsMzEwODgsMzEyMzQsMzEyNDIsMzEyMzUsMzEyNDQsMzEyMzYsMzEzODUsMzE0NjIsMzE0NjAsMzE1NjIsMzE1NDcsMzE1NTYsMzE1NjAsMzE1NjQsMzE1NjYsMzE1NTIsMzE1NzYs''@;'; put 'put ''MzE1NTcsMzE5MDYsMzE5MDIsMzE5MTIsMzE5MDUsMzIwODgsMzIxMTEsMzIwOTksMzIwODMsMzIwODYsMzIxMDMsMzIxMDYsMzIwNzksMzIxMDksMzIwOTIsMzIxMDcsMzIwODIsMzIwODQsMzIxMDUsMzIwODEsMzIwOTUsMzIwNzgsMzI1NzQsMzI1NzUsMzI2MTMsMzI2MTQsMzI2NzQsMzI2''@;'; put 'put ''NzIsMzI2NzMsMzI3MjcsMzI4NDksMzI4NDcsMzI4NDgsMzMwMjIsMzI5ODAsMzMwOTEsMzMwOTgsMzMxMDYsMzMxMDMsMzMwOTUsMzMwODUsMzMxMDEsMzMwODIsMzMyNTQsMzMyNjIsMzMyNzEsMzMyNzIsMzMyNzMsMzMyODQsMzMzNDAsMzMzNDEsMzMzNDMsMzMzOTcsMzM1OTUsMzM3NDMs''@;'; put 'put ''MzM3ODUsMzM4MjcsMzM3MjgsMzM3NjgsMzM4MTAsMzM3NjcsMzM3NjQsMzM3ODgsMzM3ODIsMzM4MDgsMzM3MzQsMzM3MzYsMzM3NzEsMzM3NjMsMzM3MjcsMzM3OTMsMzM3NTcsMzM3NjUsMzM3NTIsMzM3OTEsMzM3NjEsMzM3MzksMzM3NDIsMzM3NTAsMzM3ODEsMzM3MzcsMzM4MDEsMzM4''@;'; put 'put ''MDcsMzM3NTgsMzM4MDksMzM3OTgsMzM3MzAsMzM3NzksMzM3NDksMzM3ODYsMzM3MzUsMzM3NDUsMzM3NzAsMzM4MTEsMzM3MzEsMzM3NzIsMzM3NzQsMzM3MzIsMzM3ODcsMzM3NTEsMzM3NjIsMzM4MTksMzM3NTUsMzM3OTAsMzQ1MjAsMzQ1MzAsMzQ1MzQsMzQ1MTUsMzQ1MzEsMzQ1MjIs''@;'; put 'put ''MzQ1MzgsMzQ1MjUsMzQ1MzksMzQ1MjQsMzQ1NDAsMzQ1MzcsMzQ1MTksMzQ1MzYsMzQ1MTMsMzQ4ODgsMzQ5MDIsMzQ5MDEsMzUwMDIsMzUwMzEsMzUwMDEsMzVlMywzNTAwOCwzNTAwNiwzNDk5OCwzNTAwNCwzNDk5OSwzNTAwNSwzNDk5NCwzNTA3MywzNTAxNywzNTIyMSwzNTIyNCwzNTIy''@;'; put 'put ''MywzNTI5MywzNTI5MCwzNTI5MSwzNTQwNiwzNTQwNSwzNTM4NSwzNTQxNywzNTM5MiwzNTQxNSwzNTQxNiwzNTM5NiwzNTM5NywzNTQxMCwzNTQwMCwzNTQwOSwzNTQwMiwzNTQwNCwzNTQwNywzNTkzNSwzNTk2OSwzNTk2OCwzNjAyNiwzNjAzMCwzNjAxNiwzNjAyNSwzNjAyMSwzNjIyOCwz''@;'; put 'put ''NjIyNCwzNjIzMywzNjMxMiwzNjMwNywzNjMwMSwzNjI5NSwzNjMxMCwzNjMxNiwzNjMwMywzNjMwOSwzNjMxMywzNjI5NiwzNjMxMSwzNjI5MywzNjU5MSwzNjU5OSwzNjYwMiwzNjYwMSwzNjU4MiwzNjU5MCwzNjU4MSwzNjU5NywzNjU4MywzNjU4NCwzNjU5OCwzNjU4NywzNjU5MywzNjU4''@;'; put 'put ''OCwzNjU5NiwzNjU4NSwzNjkwOSwzNjkxNiwzNjkxMSwzNzEyNiwzNzE2NCwzNzEyNCwzNzExOSwzNzExNiwzNzEyOCwzNzExMywzNzExNSwzNzEyMSwzNzEyMCwzNzEyNywzNzEyNSwzNzEyMywzNzIxNywzNzIyMCwzNzIxNSwzNzIxOCwzNzIxNiwzNzM3NywzNzM4NiwzNzQxMywzNzM3OSwz''@;'; put 'put ''NzQwMiwzNzQxNCwzNzM5MSwzNzM4OCwzNzM3NiwzNzM5NCwzNzM3NSwzNzM3MywzNzM4MiwzNzM4MCwzNzQxNSwzNzM3OCwzNzQwNCwzNzQxMiwzNzQwMSwzNzM5OSwzNzM4MSwzNzM5OCwzODI2NywzODI4NSwzODI4NCwzODI4OCwzODUzNSwzODUyNiwzODUzNiwzODUzNywzODUzMSwzODUy''@;'; put 'put ''OCwzODU5NCwzODYwMCwzODU5NSwzODY0MSwzODY0MCwzODc2NCwzODc2OCwzODc2NiwzODkxOSwzOTA4MSwzOTE0Nyw0MDE2Niw0MDY5NywyMDA5OSwyMDEwMCwyMDE1MCwyMDY2OSwyMDY3MSwyMDY3OCwyMDY1NCwyMDY3NiwyMDY4MiwyMDY2MCwyMDY4MCwyMDY3NCwyMDY1NiwyMDY3Mywy''@;'; put 'put ''MDY2NiwyMDY1NywyMDY4MywyMDY4MSwyMDY2MiwyMDY2NCwyMDk1MSwyMTExNCwyMTExMiwyMTExNSwyMTExNiwyMTk1NSwyMTk3OSwyMTk2NCwyMTk2OCwyMTk2MywyMTk2MiwyMTk4MSwyMTk1MiwyMTk3MiwyMTk1NiwyMTk5MywyMTk1MSwyMTk3MCwyMTkwMSwyMTk2NywyMTk3MywyMTk4''@;'; put 'put ''NiwyMTk3NCwyMTk2MCwyMjAwMiwyMTk2NSwyMTk3NywyMTk1NCwyMjI5MiwyMjYxMSwyMjYzMiwyMjYyOCwyMjYwNywyMjYwNSwyMjYwMSwyMjYzOSwyMjYxMywyMjYwNiwyMjYyMSwyMjYxNywyMjYyOSwyMjYxOSwyMjU4OSwyMjYyNywyMjY0MSwyMjc4MCwyMzIzOSwyMzIzNiwyMzI0Mywy''@;'; put 'put ''MzIyNiwyMzIyNCwyMzIxNywyMzIyMSwyMzIxNiwyMzIzMSwyMzI0MCwyMzIyNywyMzIzOCwyMzIyMywyMzIzMiwyMzI0MiwyMzIyMCwyMzIyMiwyMzI0NSwyMzIyNSwyMzE4NCwyMzUxMCwyMzUxMiwyMzUxMywyMzU4MywyMzYwMywyMzkyMSwyMzkwNywyMzg4MiwyMzkwOSwyMzkyMiwyMzkx''@;'; put 'put ''NiwyMzkwMiwyMzkxMiwyMzkxMSwyMzkwNiwyNDA0OCwyNDE0MywyNDE0MiwyNDEzOCwyNDE0MSwyNDEzOSwyNDI2MSwyNDI2OCwyNDI2MiwyNDI2NywyNDI2MywyNDM4NCwyNDQ5NSwyNDQ5MywyNDgyMywyNDkwNSwyNDkwNiwyNDg3NSwyNDkwMSwyNDg4NiwyNDg4MiwyNDg3OCwyNDkwMiwy''@;'; put 'put ''NDg3OSwyNDkxMSwyNDg3MywyNDg5NiwyNTEyMCwzNzIyNCwyNTEyMywyNTEyNSwyNTEyNCwyNTU0MSwyNTU4NSwyNTU3OSwyNTYxNiwyNTYxOCwyNTYwOSwyNTYzMiwyNTYzNiwyNTY1MSwyNTY2NywyNTYzMSwyNTYyMSwyNTYyNCwyNTY1NywyNTY1NSwyNTYzNCwyNTYzNSwyNTYxMiwyNTYz''@;'; put 'put ''OCwyNTY0OCwyNTY0MCwyNTY2NSwyNTY1MywyNTY0NywyNTYxMCwyNTYyNiwyNTY2NCwyNTYzNywyNTYzOSwyNTYxMSwyNTU3NSwyNTYyNywyNTY0NiwyNTYzMywyNTYxNCwyNTk2NywyNjAwMiwyNjA2NywyNjI0NiwyNjI1MiwyNjI2MSwyNjI1NiwyNjI1MSwyNjI1MCwyNjI2NSwyNjI2MCwy''@;'; put 'put ''NjIzMiwyNjQwMCwyNjk4MiwyNjk3NSwyNjkzNiwyNjk1OCwyNjk3OCwyNjk5MywyNjk0MywyNjk0OSwyNjk4NiwyNjkzNywyNjk0NiwyNjk2NywyNjk2OSwyNzAwMiwyNjk1MiwyNjk1MywyNjkzMywyNjk4OCwyNjkzMSwyNjk0MSwyNjk4MSwyNjg2NCwyN2UzLDI2OTMyLDI2OTg1LDI2OTQ0''@;'; put 'put ''LDI2OTkxLDI2OTQ4LDI2OTk4LDI2OTY4LDI2OTQ1LDI2OTk2LDI2OTU2LDI2OTM5LDI2OTU1LDI2OTM1LDI2OTcyLDI2OTU5LDI2OTYxLDI2OTMwLDI2OTYyLDI2OTI3LDI3MDAzLDI2OTQwLDI3NDYyLDI3NDYxLDI3NDU5LDI3NDU4LDI3NDY0LDI3NDU3LDI3NTQ3LDY0MDEzLDI3NjQzLDI3''@;'; put 'put ''NjQ0LDI3NjQxLDI3NjM5LDI3NjQwLDI4MzE1LDI4Mzc0LDI4MzYwLDI4MzAzLDI4MzUyLDI4MzE5LDI4MzA3LDI4MzA4LDI4MzIwLDI4MzM3LDI4MzQ1LDI4MzU4LDI4MzcwLDI4MzQ5LDI4MzUzLDI4MzE4LDI4MzYxLDI4MzQzLDI4MzM2LDI4MzY1LDI4MzI2LDI4MzY3LDI4MzM4LDI4MzUw''@;'; put 'put ''LDI4MzU1LDI4MzgwLDI4Mzc2LDI4MzEzLDI4MzA2LDI4MzAyLDI4MzAxLDI4MzI0LDI4MzIxLDI4MzUxLDI4MzM5LDI4MzY4LDI4MzYyLDI4MzExLDI4MzM0LDI4MzIzLDI4OTk5LDI5MDEyLDI5MDEwLDI5MDI3LDI5MDI0LDI4OTkzLDI5MDIxLDI5MDI2LDI5MDQyLDI5MDQ4LDI5MDM0LDI5''@;'; put 'put ''MDI1LDI4OTk0LDI5MDE2LDI4OTk1LDI5MDAzLDI5MDQwLDI5MDIzLDI5MDA4LDI5MDExLDI4OTk2LDI5MDA1LDI5MDE4LDI5MjYzLDI5MzI1LDI5MzI0LDI5MzI5LDI5MzI4LDI5MzI2LDI5NTAwLDI5NTA2LDI5NDk5LDI5NDk4LDI5NTA0LDI5NTE0LDI5NTEzLDI5NzY0LDI5NzcwLDI5Nzcx''@;'; put 'put ''LDI5Nzc4LDI5Nzc3LDI5NzgzLDI5NzYwLDI5Nzc1LDI5Nzc2LDI5Nzc0LDI5NzYyLDI5NzY2LDI5NzczLDI5NzgwLDI5OTIxLDI5OTUxLDI5OTUwLDI5OTQ5LDI5OTgxLDMwMDczLDMwMDcxLDI3MDExLDMwMTkxLDMwMjIzLDMwMjExLDMwMTk5LDMwMjA2LDMwMjA0LDMwMjAxLDMwMjAwLDMw''@;'; put 'put ''MjI0LDMwMjAzLDMwMTk4LDMwMTg5LDMwMTk3LDMwMjA1LDMwMzYxLDMwMzg5LDMwNDI5LDMwNTQ5LDMwNTU5LDMwNTYwLDMwNTQ2LDMwNTUwLDMwNTU0LDMwNTY5LDMwNTY3LDMwNTQ4LDMwNTUzLDMwNTczLDMwNjg4LDMwODU1LDMwODc0LDMwODY4LDMwODYzLDMwODUyLDMwODY5LDMwODUz''@;'; put 'put ''LDMwODU0LDMwODgxLDMwODUxLDMwODQxLDMwODczLDMwODQ4LDMwODcwLDMwODQzLDMxMTAwLDMxMTA2LDMxMTAxLDMxMDk3LDMxMjQ5LDMxMjU2LDMxMjU3LDMxMjUwLDMxMjU1LDMxMjUzLDMxMjY2LDMxMjUxLDMxMjU5LDMxMjQ4LDMxMzk1LDMxMzk0LDMxMzkwLDMxNDY3LDMxNTkwLDMx''@;'; put 'put ''NTg4LDMxNTk3LDMxNjA0LDMxNTkzLDMxNjAyLDMxNTg5LDMxNjAzLDMxNjAxLDMxNjAwLDMxNTg1LDMxNjA4LDMxNjA2LDMxNTg3LDMxOTIyLDMxOTI0LDMxOTE5LDMyMTM2LDMyMTM0LDMyMTI4LDMyMTQxLDMyMTI3LDMyMTMzLDMyMTIyLDMyMTQyLDMyMTIzLDMyMTMxLDMyMTI0LDMyMTQw''@;'; put 'put ''LDMyMTQ4LDMyMTMyLDMyMTI1LDMyMTQ2LDMyNjIxLDMyNjE5LDMyNjE1LDMyNjE2LDMyNjIwLDMyNjc4LDMyNjc3LDMyNjc5LDMyNzMxLDMyNzMyLDMyODAxLDMzMTI0LDMzMTIwLDMzMTQzLDMzMTE2LDMzMTI5LDMzMTE1LDMzMTIyLDMzMTM4LDI2NDAxLDMzMTE4LDMzMTQyLDMzMTI3LDMz''@;'; put 'put ''MTM1LDMzMDkyLDMzMTIxLDMzMzA5LDMzMzUzLDMzMzQ4LDMzMzQ0LDMzMzQ2LDMzMzQ5LDM0MDMzLDMzODU1LDMzODc4LDMzOTEwLDMzOTEzLDMzOTM1LDMzOTMzLDMzODkzLDMzODczLDMzODU2LDMzOTI2LDMzODk1LDMzODQwLDMzODY5LDMzOTE3LDMzODgyLDMzODgxLDMzOTA4LDMzOTA3''@;'; put 'put ''LDMzODg1LDM0MDU1LDMzODg2LDMzODQ3LDMzODUwLDMzODQ0LDMzOTE0LDMzODU5LDMzOTEyLDMzODQyLDMzODYxLDMzODMzLDMzNzUzLDMzODY3LDMzODM5LDMzODU4LDMzODM3LDMzODg3LDMzOTA0LDMzODQ5LDMzODcwLDMzODY4LDMzODc0LDMzOTAzLDMzOTg5LDMzOTM0LDMzODUxLDMz''@;'; put 'put ''ODYzLDMzODQ2LDMzODQzLDMzODk2LDMzOTE4LDMzODYwLDMzODM1LDMzODg4LDMzODc2LDMzOTAyLDMzODcyLDM0NTcxLDM0NTY0LDM0NTUxLDM0NTcyLDM0NTU0LDM0NTE4LDM0NTQ5LDM0NjM3LDM0NTUyLDM0NTc0LDM0NTY5LDM0NTYxLDM0NTUwLDM0NTczLDM0NTY1LDM1MDMwLDM1MDE5''@;'; put 'put ''LDM1MDIxLDM1MDIyLDM1MDM4LDM1MDM1LDM1MDM0LDM1MDIwLDM1MDI0LDM1MjA1LDM1MjI3LDM1Mjk1LDM1MzAxLDM1MzAwLDM1Mjk3LDM1Mjk2LDM1Mjk4LDM1MjkyLDM1MzAyLDM1NDQ2LDM1NDYyLDM1NDU1LDM1NDI1LDM1MzkxLDM1NDQ3LDM1NDU4LDM1NDYwLDM1NDQ1LDM1NDU5LDM1''@;'; put 'put ''NDU3LDM1NDQ0LDM1NDUwLDM1OTAwLDM1OTE1LDM1OTE0LDM1OTQxLDM1OTQwLDM1OTQyLDM1OTc0LDM1OTcyLDM1OTczLDM2MDQ0LDM2MjAwLDM2MjAxLDM2MjQxLDM2MjM2LDM2MjM4LDM2MjM5LDM2MjM3LDM2MjQzLDM2MjQ0LDM2MjQwLDM2MjQyLDM2MzM2LDM2MzIwLDM2MzMyLDM2MzM3''@;'; put 'put ''LDM2MzM0LDM2MzA0LDM2MzI5LDM2MzIzLDM2MzIyLDM2MzI3LDM2MzM4LDM2MzMxLDM2MzQwLDM2NjE0LDM2NjA3LDM2NjA5LDM2NjA4LDM2NjEzLDM2NjE1LDM2NjE2LDM2NjEwLDM2NjE5LDM2OTQ2LDM2OTI3LDM2OTMyLDM2OTM3LDM2OTI1LDM3MTM2LDM3MTMzLDM3MTM1LDM3MTM3LDM3''@;'; put 'put ''MTQyLDM3MTQwLDM3MTMxLDM3MTM0LDM3MjMwLDM3MjMxLDM3NDQ4LDM3NDU4LDM3NDI0LDM3NDM0LDM3NDc4LDM3NDI3LDM3NDc3LDM3NDcwLDM3NTA3LDM3NDIyLDM3NDUwLDM3NDQ2LDM3NDg1LDM3NDg0LDM3NDU1LDM3NDcyLDM3NDc5LDM3NDg3LDM3NDMwLDM3NDczLDM3NDg4LDM3NDI1''@;'; put 'put ''LDM3NDYwLDM3NDc1LDM3NDU2LDM3NDkwLDM3NDU0LDM3NDU5LDM3NDUyLDM3NDYyLDM3NDI2LDM4MzAzLDM4MzAwLDM4MzAyLDM4Mjk5LDM4NTQ2LDM4NTQ3LDM4NTQ1LDM4NTUxLDM4NjA2LDM4NjUwLDM4NjUzLDM4NjQ4LDM4NjQ1LDM4NzcxLDM4Nzc1LDM4Nzc2LDM4NzcwLDM4OTI3LDM4''@;'; put 'put ''OTI1LDM4OTI2LDM5MDg0LDM5MTU4LDM5MTYxLDM5MzQzLDM5MzQ2LDM5MzQ0LDM5MzQ5LDM5NTk3LDM5NTk1LDM5NzcxLDQwMTcwLDQwMTczLDQwMTY3LDQwNTc2LDQwNzAxLDIwNzEwLDIwNjkyLDIwNjk1LDIwNzEyLDIwNzIzLDIwNjk5LDIwNzE0LDIwNzAxLDIwNzA4LDIwNjkxLDIwNzE2''@;'; put 'put ''LDIwNzIwLDIwNzE5LDIwNzA3LDIwNzA0LDIwOTUyLDIxMTIwLDIxMTIxLDIxMjI1LDIxMjI3LDIxMjk2LDIxNDIwLDIyMDU1LDIyMDM3LDIyMDI4LDIyMDM0LDIyMDEyLDIyMDMxLDIyMDQ0LDIyMDE3LDIyMDM1LDIyMDE4LDIyMDEwLDIyMDQ1LDIyMDIwLDIyMDE1LDIyMDA5LDIyNjY1LDIy''@;'; put 'put ''NjUyLDIyNjcyLDIyNjgwLDIyNjYyLDIyNjU3LDIyNjU1LDIyNjQ0LDIyNjY3LDIyNjUwLDIyNjYzLDIyNjczLDIyNjcwLDIyNjQ2LDIyNjU4LDIyNjY0LDIyNjUxLDIyNjc2LDIyNjcxLDIyNzgyLDIyODkxLDIzMjYwLDIzMjc4LDIzMjY5LDIzMjUzLDIzMjc0LDIzMjU4LDIzMjc3LDIzMjc1''@;'; put 'put ''LDIzMjgzLDIzMjY2LDIzMjY0LDIzMjU5LDIzMjc2LDIzMjYyLDIzMjYxLDIzMjU3LDIzMjcyLDIzMjYzLDIzNDE1LDIzNTIwLDIzNTIzLDIzNjUxLDIzOTM4LDIzOTM2LDIzOTMzLDIzOTQyLDIzOTMwLDIzOTM3LDIzOTI3LDIzOTQ2LDIzOTQ1LDIzOTQ0LDIzOTM0LDIzOTMyLDIzOTQ5LDIz''@;'; put 'put ''OTI5LDIzOTM1LDI0MTUyLDI0MTUzLDI0MTQ3LDI0MjgwLDI0MjczLDI0Mjc5LDI0MjcwLDI0Mjg0LDI0Mjc3LDI0MjgxLDI0Mjc0LDI0Mjc2LDI0Mzg4LDI0Mzg3LDI0NDMxLDI0NTAyLDI0ODc2LDI0ODcyLDI0ODk3LDI0OTI2LDI0OTQ1LDI0OTQ3LDI0OTE0LDI0OTE1LDI0OTQ2LDI0OTQw''@;'; put 'put ''LDI0OTYwLDI0OTQ4LDI0OTE2LDI0OTU0LDI0OTIzLDI0OTMzLDI0ODkxLDI0OTM4LDI0OTI5LDI0OTE4LDI1MTI5LDI1MTI3LDI1MTMxLDI1NjQzLDI1Njc3LDI1NjkxLDI1NjkzLDI1NzE2LDI1NzE4LDI1NzE0LDI1NzE1LDI1NzI1LDI1NzE3LDI1NzAyLDI1NzY2LDI1Njc4LDI1NzMwLDI1''@;'; put 'put ''Njk0LDI1NjkyLDI1Njc1LDI1NjgzLDI1Njk2LDI1NjgwLDI1NzI3LDI1NjYzLDI1NzA4LDI1NzA3LDI1Njg5LDI1NzAxLDI1NzE5LDI1OTcxLDI2MDE2LDI2MjczLDI2MjcyLDI2MjcxLDI2MzczLDI2MzcyLDI2NDAyLDI3MDU3LDI3MDYyLDI3MDgxLDI3MDQwLDI3MDg2LDI3MDMwLDI3MDU2''@;'; put 'put ''LDI3MDUyLDI3MDY4LDI3MDI1LDI3MDMzLDI3MDIyLDI3MDQ3LDI3MDIxLDI3MDQ5LDI3MDcwLDI3MDU1LDI3MDcxLDI3MDc2LDI3MDY5LDI3MDQ0LDI3MDkyLDI3MDY1LDI3MDgyLDI3MDM0LDI3MDg3LDI3MDU5LDI3MDI3LDI3MDUwLDI3MDQxLDI3MDM4LDI3MDk3LDI3MDMxLDI3MDI0LDI3''@;'; put 'put ''MDc0LDI3MDYxLDI3MDQ1LDI3MDc4LDI3NDY2LDI3NDY5LDI3NDY3LDI3NTUwLDI3NTUxLDI3NTUyLDI3NTg3LDI3NTg4LDI3NjQ2LDI4MzY2LDI4NDA1LDI4NDAxLDI4NDE5LDI4NDUzLDI4NDA4LDI4NDcxLDI4NDExLDI4NDYyLDI4NDI1LDI4NDk0LDI4NDQxLDI4NDQyLDI4NDU1LDI4NDQw''@;'; put 'put ''LDI4NDc1LDI4NDM0LDI4Mzk3LDI4NDI2LDI4NDcwLDI4NTMxLDI4NDA5LDI4Mzk4LDI4NDYxLDI4NDgwLDI4NDY0LDI4NDc2LDI4NDY5LDI4Mzk1LDI4NDIzLDI4NDMwLDI4NDgzLDI4NDIxLDI4NDEzLDI4NDA2LDI4NDczLDI4NDQ0LDI4NDEyLDI4NDc0LDI4NDQ3LDI4NDI5LDI4NDQ2LDI4''@;'; put 'put ''NDI0LDI4NDQ5LDI5MDYzLDI5MDcyLDI5MDY1LDI5MDU2LDI5MDYxLDI5MDU4LDI5MDcxLDI5MDUxLDI5MDYyLDI5MDU3LDI5MDc5LDI5MjUyLDI5MjY3LDI5MzM1LDI5MzMzLDI5MzMxLDI5NTA3LDI5NTE3LDI5NTIxLDI5NTE2LDI5Nzk0LDI5ODExLDI5ODA5LDI5ODEzLDI5ODEwLDI5Nzk5''@;'; put 'put ''LDI5ODA2LDI5OTUyLDI5OTU0LDI5OTU1LDMwMDc3LDMwMDk2LDMwMjMwLDMwMjE2LDMwMjIwLDMwMjI5LDMwMjI1LDMwMjE4LDMwMjI4LDMwMzkyLDMwNTkzLDMwNTg4LDMwNTk3LDMwNTk0LDMwNTc0LDMwNTkyLDMwNTc1LDMwNTkwLDMwNTk1LDMwODk4LDMwODkwLDMwOTAwLDMwODkzLDMw''@;'; put 'put ''ODg4LDMwODQ2LDMwODkxLDMwODc4LDMwODg1LDMwODgwLDMwODkyLDMwODgyLDMwODg0LDMxMTI4LDMxMTE0LDMxMTE1LDMxMTI2LDMxMTI1LDMxMTI0LDMxMTIzLDMxMTI3LDMxMTEyLDMxMTIyLDMxMTIwLDMxMjc1LDMxMzA2LDMxMjgwLDMxMjc5LDMxMjcyLDMxMjcwLDMxNDAwLDMxNDAz''@;'; put 'put ''LDMxNDA0LDMxNDcwLDMxNjI0LDMxNjQ0LDMxNjI2LDMxNjMzLDMxNjMyLDMxNjM4LDMxNjI5LDMxNjI4LDMxNjQzLDMxNjMwLDMxNjIxLDMxNjQwLDIxMTI0LDMxNjQxLDMxNjUyLDMxNjE4LDMxOTMxLDMxOTM1LDMxOTMyLDMxOTMwLDMyMTY3LDMyMTgzLDMyMTk0LDMyMTYzLDMyMTcwLDMy''@;'; put 'put ''MTkzLDMyMTkyLDMyMTk3LDMyMTU3LDMyMjA2LDMyMTk2LDMyMTk4LDMyMjAzLDMyMjA0LDMyMTc1LDMyMTg1LDMyMTUwLDMyMTg4LDMyMTU5LDMyMTY2LDMyMTc0LDMyMTY5LDMyMTYxLDMyMjAxLDMyNjI3LDMyNzM4LDMyNzM5LDMyNzQxLDMyNzM0LDMyODA0LDMyODYxLDMyODYwLDMzMTYx''@;'; put 'put ''LDMzMTU4LDMzMTU1LDMzMTU5LDMzMTY1LDMzMTY0LDMzMTYzLDMzMzAxLDMzOTQzLDMzOTU2LDMzOTUzLDMzOTUxLDMzOTc4LDMzOTk4LDMzOTg2LDMzOTY0LDMzOTY2LDMzOTYzLDMzOTc3LDMzOTcyLDMzOTg1LDMzOTk3LDMzOTYyLDMzOTQ2LDMzOTY5LDM0ZTMsMzM5NDksMzM5NTksMzM5''@;'; put 'put ''NzksMzM5NTQsMzM5NDAsMzM5OTEsMzM5OTYsMzM5NDcsMzM5NjEsMzM5NjcsMzM5NjAsMzQwMDYsMzM5NDQsMzM5NzQsMzM5OTksMzM5NTIsMzQwMDcsMzQwMDQsMzQwMDIsMzQwMTEsMzM5NjgsMzM5MzcsMzQ0MDEsMzQ2MTEsMzQ1OTUsMzQ2MDAsMzQ2NjcsMzQ2MjQsMzQ2MDYsMzQ1OTAs''@;'; put 'put ''MzQ1OTMsMzQ1ODUsMzQ1ODcsMzQ2MjcsMzQ2MDQsMzQ2MjUsMzQ2MjIsMzQ2MzAsMzQ1OTIsMzQ2MTAsMzQ2MDIsMzQ2MDUsMzQ2MjAsMzQ1NzgsMzQ2MTgsMzQ2MDksMzQ2MTMsMzQ2MjYsMzQ1OTgsMzQ1OTksMzQ2MTYsMzQ1OTYsMzQ1ODYsMzQ2MDgsMzQ1NzcsMzUwNjMsMzUwNDcsMzUw''@;'; put 'put ''NTcsMzUwNTgsMzUwNjYsMzUwNzAsMzUwNTQsMzUwNjgsMzUwNjIsMzUwNjcsMzUwNTYsMzUwNTIsMzUwNTEsMzUyMjksMzUyMzMsMzUyMzEsMzUyMzAsMzUzMDUsMzUzMDcsMzUzMDQsMzU0OTksMzU0ODEsMzU0NjcsMzU0NzQsMzU0NzEsMzU0NzgsMzU5MDEsMzU5NDQsMzU5NDUsMzYwNTMs''@;'; put 'put ''MzYwNDcsMzYwNTUsMzYyNDYsMzYzNjEsMzYzNTQsMzYzNTEsMzYzNjUsMzYzNDksMzYzNjIsMzYzNTUsMzYzNTksMzYzNTgsMzYzNTcsMzYzNTAsMzYzNTIsMzYzNTYsMzY2MjQsMzY2MjUsMzY2MjIsMzY2MjEsMzcxNTUsMzcxNDgsMzcxNTIsMzcxNTQsMzcxNTEsMzcxNDksMzcxNDYsMzcx''@;'; put 'put ''NTYsMzcxNTMsMzcxNDcsMzcyNDIsMzcyMzQsMzcyNDEsMzcyMzUsMzc1NDEsMzc1NDAsMzc0OTQsMzc1MzEsMzc0OTgsMzc1MzYsMzc1MjQsMzc1NDYsMzc1MTcsMzc1NDIsMzc1MzAsMzc1NDcsMzc0OTcsMzc1MjcsMzc1MDMsMzc1MzksMzc2MTQsMzc1MTgsMzc1MDYsMzc1MjUsMzc1Mzgs''@;'; put 'put ''Mzc1MDEsMzc1MTIsMzc1MzcsMzc1MTQsMzc1MTAsMzc1MTYsMzc1MjksMzc1NDMsMzc1MDIsMzc1MTEsMzc1NDUsMzc1MzMsMzc1MTUsMzc0MjEsMzg1NTgsMzg1NjEsMzg2NTUsMzg3NDQsMzg3ODEsMzg3NzgsMzg3ODIsMzg3ODcsMzg3ODQsMzg3ODYsMzg3NzksMzg3ODgsMzg3ODUsMzg3''@;'; put 'put ''ODMsMzg4NjIsMzg4NjEsMzg5MzQsMzkwODUsMzkwODYsMzkxNzAsMzkxNjgsMzkxNzUsMzkzMjUsMzkzMjQsMzkzNjMsMzkzNTMsMzkzNTUsMzkzNTQsMzkzNjIsMzkzNTcsMzkzNjcsMzk2MDEsMzk2NTEsMzk2NTUsMzk3NDIsMzk3NDMsMzk3NzYsMzk3NzcsMzk3NzUsNDAxNzcsNDAxNzgs''@;'; put 'put ''NDAxODEsNDA2MTUsMjA3MzUsMjA3MzksMjA3ODQsMjA3MjgsMjA3NDIsMjA3NDMsMjA3MjYsMjA3MzQsMjA3NDcsMjA3NDgsMjA3MzMsMjA3NDYsMjExMzEsMjExMzIsMjEyMzMsMjEyMzEsMjIwODgsMjIwODIsMjIwOTIsMjIwNjksMjIwODEsMjIwOTAsMjIwODksMjIwODYsMjIxMDQsMjIx''@;'; put 'put ''MDYsMjIwODAsMjIwNjcsMjIwNzcsMjIwNjAsMjIwNzgsMjIwNzIsMjIwNTgsMjIwNzQsMjIyOTgsMjI2OTksMjI2ODUsMjI3MDUsMjI2ODgsMjI2OTEsMjI3MDMsMjI3MDAsMjI2OTMsMjI2ODksMjI3ODMsMjMyOTUsMjMyODQsMjMyOTMsMjMyODcsMjMyODYsMjMyOTksMjMyODgsMjMyOTgs''@;'; put 'put ''MjMyODksMjMyOTcsMjMzMDMsMjMzMDEsMjMzMTEsMjM2NTUsMjM5NjEsMjM5NTksMjM5NjcsMjM5NTQsMjM5NzAsMjM5NTUsMjM5NTcsMjM5NjgsMjM5NjQsMjM5NjksMjM5NjIsMjM5NjYsMjQxNjksMjQxNTcsMjQxNjAsMjQxNTYsMzIyNDMsMjQyODMsMjQyODYsMjQyODksMjQzOTMsMjQ0''@;'; put 'put ''OTgsMjQ5NzEsMjQ5NjMsMjQ5NTMsMjUwMDksMjUwMDgsMjQ5OTQsMjQ5NjksMjQ5ODcsMjQ5NzksMjUwMDcsMjUwMDUsMjQ5OTEsMjQ5NzgsMjUwMDIsMjQ5OTMsMjQ5NzMsMjQ5MzQsMjUwMTEsMjUxMzMsMjU3MTAsMjU3MTIsMjU3NTAsMjU3NjAsMjU3MzMsMjU3NTEsMjU3NTYsMjU3NDMs''@;'; put 'put ''MjU3MzksMjU3MzgsMjU3NDAsMjU3NjMsMjU3NTksMjU3MDQsMjU3NzcsMjU3NTIsMjU5NzQsMjU5NzgsMjU5NzcsMjU5NzksMjYwMzQsMjYwMzUsMjYyOTMsMjYyODgsMjYyODEsMjYyOTAsMjYyOTUsMjYyODIsMjYyODcsMjcxMzYsMjcxNDIsMjcxNTksMjcxMDksMjcxMjgsMjcxNTcsMjcx''@;'; put 'put ''MjEsMjcxMDgsMjcxNjgsMjcxMzUsMjcxMTYsMjcxMDYsMjcxNjMsMjcxNjUsMjcxMzQsMjcxNzUsMjcxMjIsMjcxMTgsMjcxNTYsMjcxMjcsMjcxMTEsMjcyMDAsMjcxNDQsMjcxMTAsMjcxMzEsMjcxNDksMjcxMzIsMjcxMTUsMjcxNDUsMjcxNDAsMjcxNjAsMjcxNzMsMjcxNTEsMjcxMjYs''@;'; put 'put ''MjcxNzQsMjcxNDMsMjcxMjQsMjcxNTgsMjc0NzMsMjc1NTcsMjc1NTUsMjc1NTQsMjc1NTgsMjc2NDksMjc2NDgsMjc2NDcsMjc2NTAsMjg0ODEsMjg0NTQsMjg1NDIsMjg1NTEsMjg2MTQsMjg1NjIsMjg1NTcsMjg1NTMsMjg1NTYsMjg1MTQsMjg0OTUsMjg1NDksMjg1MDYsMjg1NjYsMjg1''@;'; put 'put ''MzQsMjg1MjQsMjg1NDYsMjg1MDEsMjg1MzAsMjg0OTgsMjg0OTYsMjg1MDMsMjg1NjQsMjg1NjMsMjg1MDksMjg0MTYsMjg1MTMsMjg1MjMsMjg1NDEsMjg1MTksMjg1NjAsMjg0OTksMjg1NTUsMjg1MjEsMjg1NDMsMjg1NjUsMjg1MTUsMjg1MzUsMjg1MjIsMjg1MzksMjkxMDYsMjkxMDMs''@;'; put 'put ''MjkwODMsMjkxMDQsMjkwODgsMjkwODIsMjkwOTcsMjkxMDksMjkwODUsMjkwOTMsMjkwODYsMjkwOTIsMjkwODksMjkwOTgsMjkwODQsMjkwOTUsMjkxMDcsMjkzMzYsMjkzMzgsMjk1MjgsMjk1MjIsMjk1MzQsMjk1MzUsMjk1MzYsMjk1MzMsMjk1MzEsMjk1MzcsMjk1MzAsMjk1MjksMjk1''@;'; put 'put ''MzgsMjk4MzEsMjk4MzMsMjk4MzQsMjk4MzAsMjk4MjUsMjk4MjEsMjk4MjksMjk4MzIsMjk4MjAsMjk4MTcsMjk5NjAsMjk5NTksMzAwNzgsMzAyNDUsMzAyMzgsMzAyMzMsMzAyMzcsMzAyMzYsMzAyNDMsMzAyMzQsMzAyNDgsMzAyMzUsMzAzNjQsMzAzNjUsMzAzNjYsMzAzNjMsMzA2MDUs''@;'; put 'put ''MzA2MDcsMzA2MDEsMzA2MDAsMzA5MjUsMzA5MDcsMzA5MjcsMzA5MjQsMzA5MjksMzA5MjYsMzA5MzIsMzA5MjAsMzA5MTUsMzA5MTYsMzA5MjEsMzExMzAsMzExMzcsMzExMzYsMzExMzIsMzExMzgsMzExMzEsMjc1MTAsMzEyODksMzE0MTAsMzE0MTIsMzE0MTEsMzE2NzEsMzE2OTEsMzE2''@;'; put 'put ''NzgsMzE2NjAsMzE2OTQsMzE2NjMsMzE2NzMsMzE2OTAsMzE2NjksMzE5NDEsMzE5NDQsMzE5NDgsMzE5NDcsMzIyNDcsMzIyMTksMzIyMzQsMzIyMzEsMzIyMTUsMzIyMjUsMzIyNTksMzIyNTAsMzIyMzAsMzIyNDYsMzIyNDEsMzIyNDAsMzIyMzgsMzIyMjMsMzI2MzAsMzI2ODQsMzI2ODgs''@;'; put 'put ''MzI2ODUsMzI3NDksMzI3NDcsMzI3NDYsMzI3NDgsMzI3NDIsMzI3NDQsMzI4NjgsMzI4NzEsMzMxODcsMzMxODMsMzMxODIsMzMxNzMsMzMxODYsMzMxNzcsMzMxNzUsMzMzMDIsMzMzNTksMzMzNjMsMzMzNjIsMzMzNjAsMzMzNTgsMzMzNjEsMzQwODQsMzQxMDcsMzQwNjMsMzQwNDgsMzQw''@;'; put 'put ''ODksMzQwNjIsMzQwNTcsMzQwNjEsMzQwNzksMzQwNTgsMzQwODcsMzQwNzYsMzQwNDMsMzQwOTEsMzQwNDIsMzQwNTYsMzQwNjAsMzQwMzYsMzQwOTAsMzQwMzQsMzQwNjksMzQwMzksMzQwMjcsMzQwMzUsMzQwNDQsMzQwNjYsMzQwMjYsMzQwMjUsMzQwNzAsMzQwNDYsMzQwODgsMzQwNzcs''@;'; put 'put ''MzQwOTQsMzQwNTAsMzQwNDUsMzQwNzgsMzQwMzgsMzQwOTcsMzQwODYsMzQwMjMsMzQwMjQsMzQwMzIsMzQwMzEsMzQwNDEsMzQwNzIsMzQwODAsMzQwOTYsMzQwNTksMzQwNzMsMzQwOTUsMzQ0MDIsMzQ2NDYsMzQ2NTksMzQ2NjAsMzQ2NzksMzQ3ODUsMzQ2NzUsMzQ2NDgsMzQ2NDQsMzQ2''@;'; put 'put ''NTEsMzQ2NDIsMzQ2NTcsMzQ2NTAsMzQ2NDEsMzQ2NTQsMzQ2NjksMzQ2NjYsMzQ2NDAsMzQ2MzgsMzQ2NTUsMzQ2NTMsMzQ2NzEsMzQ2NjgsMzQ2ODIsMzQ2NzAsMzQ2NTIsMzQ2NjEsMzQ2MzksMzQ2ODMsMzQ2NzcsMzQ2NTgsMzQ2NjMsMzQ2NjUsMzQ5MDYsMzUwNzcsMzUwODQsMzUwOTIs''@;'; put 'put ''MzUwODMsMzUwOTUsMzUwOTYsMzUwOTcsMzUwNzgsMzUwOTQsMzUwODksMzUwODYsMzUwODEsMzUyMzQsMzUyMzYsMzUyMzUsMzUzMDksMzUzMTIsMzUzMDgsMzU1MzUsMzU1MjYsMzU1MTIsMzU1MzksMzU1MzcsMzU1NDAsMzU1NDEsMzU1MTUsMzU1NDMsMzU1MTgsMzU1MjAsMzU1MjUsMzU1''@;'; put 'put ''NDQsMzU1MjMsMzU1MTQsMzU1MTcsMzU1NDUsMzU5MDIsMzU5MTcsMzU5ODMsMzYwNjksMzYwNjMsMzYwNTcsMzYwNzIsMzYwNTgsMzYwNjEsMzYwNzEsMzYyNTYsMzYyNTIsMzYyNTcsMzYyNTEsMzYzODQsMzYzODcsMzYzODksMzYzODgsMzYzOTgsMzYzNzMsMzYzNzksMzYzNzQsMzYzNjks''@;'; put 'put ''MzYzNzcsMzYzOTAsMzYzOTEsMzYzNzIsMzYzNzAsMzYzNzYsMzYzNzEsMzYzODAsMzYzNzUsMzYzNzgsMzY2NTIsMzY2NDQsMzY2MzIsMzY2MzQsMzY2NDAsMzY2NDMsMzY2MzAsMzY2MzEsMzY5NzksMzY5NzYsMzY5NzUsMzY5NjcsMzY5NzEsMzcxNjcsMzcxNjMsMzcxNjEsMzcxNjIsMzcx''@;'; put 'put ''NzAsMzcxNTgsMzcxNjYsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNDksMzcyNTAsMzcyNTIsMzcyNDgsMzc1ODQsMzc1NzEsMzc1NzIsMzc1NjgsMzc1OTMsMzc1NTgsMzc1ODMsMzc2MTcsMzc1OTksMzc1OTIsMzc2MDksMzc1OTEsMzc1OTcsMzc1ODAsMzc2MTUsMzc1NzAsMzc2MDgsMzc1Nzgs''@;'; put 'put ''Mzc1NzYsMzc1ODIsMzc2MDYsMzc1ODEsMzc1ODksMzc1NzcsMzc2MDAsMzc1OTgsMzc2MDcsMzc1ODUsMzc1ODcsMzc1NTcsMzc2MDEsMzc1NzQsMzc1NTYsMzgyNjgsMzgzMTYsMzgzMTUsMzgzMTgsMzgzMjAsMzg1NjQsMzg1NjIsMzg2MTEsMzg2NjEsMzg2NjQsMzg2NTgsMzg3NDYsMzg3''@;'; put 'put ''OTQsMzg3OTgsMzg3OTIsMzg4NjQsMzg4NjMsMzg5NDIsMzg5NDEsMzg5NTAsMzg5NTMsMzg5NTIsMzg5NDQsMzg5MzksMzg5NTEsMzkwOTAsMzkxNzYsMzkxNjIsMzkxODUsMzkxODgsMzkxOTAsMzkxOTEsMzkxODksMzkzODgsMzkzNzMsMzkzNzUsMzkzNzksMzkzODAsMzkzNzQsMzkzNjks''@;'; put 'put ''MzkzODIsMzkzODQsMzkzNzEsMzkzODMsMzkzNzIsMzk2MDMsMzk2NjAsMzk2NTksMzk2NjcsMzk2NjYsMzk2NjUsMzk3NTAsMzk3NDcsMzk3ODMsMzk3OTYsMzk3OTMsMzk3ODIsMzk3OTgsMzk3OTcsMzk3OTIsMzk3ODQsMzk3ODAsMzk3ODgsNDAxODgsNDAxODYsNDAxODksNDAxOTEsNDAx''@;'; put 'put ''ODMsNDAxOTksNDAxOTIsNDAxODUsNDAxODcsNDAyMDAsNDAxOTcsNDAxOTYsNDA1NzksNDA2NTksNDA3MTksNDA3MjAsMjA3NjQsMjA3NTUsMjA3NTksMjA3NjIsMjA3NTMsMjA5NTgsMjEzMDAsMjE0NzMsMjIxMjgsMjIxMTIsMjIxMjYsMjIxMzEsMjIxMTgsMjIxMTUsMjIxMjUsMjIxMzAs''@;'; put 'put ''MjIxMTAsMjIxMzUsMjIzMDAsMjIyOTksMjI3MjgsMjI3MTcsMjI3MjksMjI3MTksMjI3MTQsMjI3MjIsMjI3MTYsMjI3MjYsMjMzMTksMjMzMjEsMjMzMjMsMjMzMjksMjMzMTYsMjMzMTUsMjMzMTIsMjMzMTgsMjMzMzYsMjMzMjIsMjMzMjgsMjMzMjYsMjM1MzUsMjM5ODAsMjM5ODUsMjM5''@;'; put 'put ''NzcsMjM5NzUsMjM5ODksMjM5ODQsMjM5ODIsMjM5NzgsMjM5NzYsMjM5ODYsMjM5ODEsMjM5ODMsMjM5ODgsMjQxNjcsMjQxNjgsMjQxNjYsMjQxNzUsMjQyOTcsMjQyOTUsMjQyOTQsMjQyOTYsMjQyOTMsMjQzOTUsMjQ1MDgsMjQ5ODksMjVlMywyNDk4MiwyNTAyOSwyNTAxMiwyNTAzMCwy''@;'; put 'put ''NTAyNSwyNTAzNiwyNTAxOCwyNTAyMywyNTAxNiwyNDk3MiwyNTgxNSwyNTgxNCwyNTgwOCwyNTgwNywyNTgwMSwyNTc4OSwyNTczNywyNTc5NSwyNTgxOSwyNTg0MywyNTgxNywyNTkwNywyNTk4MywyNTk4MCwyNjAxOCwyNjMxMiwyNjMwMiwyNjMwNCwyNjMxNCwyNjMxNSwyNjMxOSwyNjMw''@;'; put 'put ''MSwyNjI5OSwyNjI5OCwyNjMxNiwyNjQwMywyNzE4OCwyNzIzOCwyNzIwOSwyNzIzOSwyNzE4NiwyNzI0MCwyNzE5OCwyNzIyOSwyNzI0NSwyNzI1NCwyNzIyNywyNzIxNywyNzE3NiwyNzIyNiwyNzE5NSwyNzE5OSwyNzIwMSwyNzI0MiwyNzIzNiwyNzIxNiwyNzIxNSwyNzIyMCwyNzI0Nywy''@;'; put 'put ''NzI0MSwyNzIzMiwyNzE5NiwyNzIzMCwyNzIyMiwyNzIyMSwyNzIxMywyNzIxNCwyNzIwNiwyNzQ3NywyNzQ3NiwyNzQ3OCwyNzU1OSwyNzU2MiwyNzU2MywyNzU5MiwyNzU5MSwyNzY1MiwyNzY1MSwyNzY1NCwyODU4OSwyODYxOSwyODU3OSwyODYxNSwyODYwNCwyODYyMiwyODYxNiwyODUx''@;'; put 'put ''MCwyODYxMiwyODYwNSwyODU3NCwyODYxOCwyODU4NCwyODY3NiwyODU4MSwyODU5MCwyODYwMiwyODU4OCwyODU4NiwyODYyMywyODYwNywyODYwMCwyODU3OCwyODYxNywyODU4NywyODYyMSwyODU5MSwyODU5NCwyODU5MiwyOTEyNSwyOTEyMiwyOTExOSwyOTExMiwyOTE0MiwyOTEyMCwy''@;'; put 'put ''OTEyMSwyOTEzMSwyOTE0MCwyOTEzMCwyOTEyNywyOTEzNSwyOTExNywyOTE0NCwyOTExNiwyOTEyNiwyOTE0NiwyOTE0NywyOTM0MSwyOTM0MiwyOTU0NSwyOTU0MiwyOTU0MywyOTU0OCwyOTU0MSwyOTU0NywyOTU0NiwyOTgyMywyOTg1MCwyOTg1NiwyOTg0NCwyOTg0MiwyOTg0NSwyOTg1''@;'; put 'put ''NywyOTk2MywzMDA4MCwzMDI1NSwzMDI1MywzMDI1NywzMDI2OSwzMDI1OSwzMDI2OCwzMDI2MSwzMDI1OCwzMDI1NiwzMDM5NSwzMDQzOCwzMDYxOCwzMDYyMSwzMDYyNSwzMDYyMCwzMDYxOSwzMDYyNiwzMDYyNywzMDYxMywzMDYxNywzMDYxNSwzMDk0MSwzMDk1MywzMDk0OSwzMDk1NCwz''@;'; put 'put ''MDk0MiwzMDk0NywzMDkzOSwzMDk0NSwzMDk0NiwzMDk1NywzMDk0MywzMDk0NCwzMTE0MCwzMTMwMCwzMTMwNCwzMTMwMywzMTQxNCwzMTQxNiwzMTQxMywzMTQwOSwzMTQxNSwzMTcxMCwzMTcxNSwzMTcxOSwzMTcwOSwzMTcwMSwzMTcxNywzMTcwNiwzMTcyMCwzMTczNywzMTcwMCwzMTcy''@;'; put 'put ''MiwzMTcxNCwzMTcwOCwzMTcyMywzMTcwNCwzMTcxMSwzMTk1NCwzMTk1NiwzMTk1OSwzMTk1MiwzMTk1MywzMjI3NCwzMjI4OSwzMjI3OSwzMjI2OCwzMjI4NywzMjI4OCwzMjI3NSwzMjI3MCwzMjI4NCwzMjI3NywzMjI4MiwzMjI5MCwzMjI2NywzMjI3MSwzMjI3OCwzMjI2OSwzMjI3Niwz''@;'; put 'put ''MjI5MywzMjI5MiwzMjU3OSwzMjYzNSwzMjYzNiwzMjYzNCwzMjY4OSwzMjc1MSwzMjgxMCwzMjgwOSwzMjg3NiwzMzIwMSwzMzE5MCwzMzE5OCwzMzIwOSwzMzIwNSwzMzE5NSwzMzIwMCwzMzE5NiwzMzIwNCwzMzIwMiwzMzIwNywzMzE5MSwzMzI2NiwzMzM2NSwzMzM2NiwzMzM2NywzNDEz''@;'; put 'put ''NCwzNDExNywzNDE1NSwzNDEyNSwzNDEzMSwzNDE0NSwzNDEzNiwzNDExMiwzNDExOCwzNDE0OCwzNDExMywzNDE0NiwzNDExNiwzNDEyOSwzNDExOSwzNDE0NywzNDExMCwzNDEzOSwzNDE2MSwzNDEyNiwzNDE1OCwzNDE2NSwzNDEzMywzNDE1MSwzNDE0NCwzNDE4OCwzNDE1MCwzNDE0MSwz''@;'; put 'put ''NDEzMiwzNDE0OSwzNDE1NiwzNDQwMywzNDQwNSwzNDQwNCwzNDcxNSwzNDcwMywzNDcxMSwzNDcwNywzNDcwNiwzNDY5NiwzNDY4OSwzNDcxMCwzNDcxMiwzNDY4MSwzNDY5NSwzNDcyMywzNDY5MywzNDcwNCwzNDcwNSwzNDcxNywzNDY5MiwzNDcwOCwzNDcxNiwzNDcxNCwzNDY5NywzNTEw''@;'; put 'put ''MiwzNTExMCwzNTEyMCwzNTExNywzNTExOCwzNTExMSwzNTEyMSwzNTEwNiwzNTExMywzNTEwNywzNTExOSwzNTExNiwzNTEwMywzNTMxMywzNTU1MiwzNTU1NCwzNTU3MCwzNTU3MiwzNTU3MywzNTU0OSwzNTYwNCwzNTU1NiwzNTU1MSwzNTU2OCwzNTUyOCwzNTU1MCwzNTU1MywzNTU2MCwz''@;'; put 'put ''NTU4MywzNTU2NywzNTU3OSwzNTk4NSwzNTk4NiwzNTk4NCwzNjA4NSwzNjA3OCwzNjA4MSwzNjA4MCwzNjA4MywzNjIwNCwzNjIwNiwzNjI2MSwzNjI2MywzNjQwMywzNjQxNCwzNjQwOCwzNjQxNiwzNjQyMSwzNjQwNiwzNjQxMiwzNjQxMywzNjQxNywzNjQwMCwzNjQxNSwzNjU0MSwzNjY2''@;'; put 'put ''MiwzNjY1NCwzNjY2MSwzNjY1OCwzNjY2NSwzNjY2MywzNjY2MCwzNjk4MiwzNjk4NSwzNjk4NywzNjk5OCwzNzExNCwzNzE3MSwzNzE3MywzNzE3NCwzNzI2NywzNzI2NCwzNzI2NSwzNzI2MSwzNzI2MywzNzY3MSwzNzY2MiwzNzY0MCwzNzY2MywzNzYzOCwzNzY0NywzNzc1NCwzNzY4OCwz''@;'; put 'put ''NzY5MiwzNzY1OSwzNzY2NywzNzY1MCwzNzYzMywzNzcwMiwzNzY3NywzNzY0NiwzNzY0NSwzNzU3OSwzNzY2MSwzNzYyNiwzNzY2OSwzNzY1MSwzNzYyNSwzNzYyMywzNzY4NCwzNzYzNCwzNzY2OCwzNzYzMSwzNzY3MywzNzY4OSwzNzY4NSwzNzY3NCwzNzY1MiwzNzY0NCwzNzY0MywzNzYz''@;'; put 'put ''MCwzNzY0MSwzNzYzMiwzNzYyNywzNzY1NCwzODMzMiwzODM0OSwzODMzNCwzODMyOSwzODMzMCwzODMyNiwzODMzNSwzODMyNSwzODMzMywzODU2OSwzODYxMiwzODY2NywzODY3NCwzODY3MiwzODgwOSwzODgwNywzODgwNCwzODg5NiwzODkwNCwzODk2NSwzODk1OSwzODk2MiwzOTIwNCwz''@;'; put 'put ''OTE5OSwzOTIwNywzOTIwOSwzOTMyNiwzOTQwNiwzOTQwNCwzOTM5NywzOTM5NiwzOTQwOCwzOTM5NSwzOTQwMiwzOTQwMSwzOTM5OSwzOTYwOSwzOTYxNSwzOTYwNCwzOTYxMSwzOTY3MCwzOTY3NCwzOTY3MywzOTY3MSwzOTczMSwzOTgwOCwzOTgxMywzOTgxNSwzOTgwNCwzOTgwNiwzOTgw''@;'; put 'put ''MywzOTgxMCwzOTgyNywzOTgyNiwzOTgyNCwzOTgwMiwzOTgyOSwzOTgwNSwzOTgxNiw0MDIyOSw0MDIxNSw0MDIyNCw0MDIyMiw0MDIxMiw0MDIzMyw0MDIyMSw0MDIxNiw0MDIyNiw0MDIwOCw0MDIxNyw0MDIyMyw0MDU4NCw0MDU4Miw0MDU4Myw0MDYyMiw0MDYyMSw0MDY2MSw0MDY2Miw0''@;'; put 'put ''MDY5OCw0MDcyMiw0MDc2NSwyMDc3NCwyMDc3MywyMDc3MCwyMDc3MiwyMDc2OCwyMDc3NywyMTIzNiwyMjE2MywyMjE1NiwyMjE1NywyMjE1MCwyMjE0OCwyMjE0NywyMjE0MiwyMjE0NiwyMjE0MywyMjE0NSwyMjc0MiwyMjc0MCwyMjczNSwyMjczOCwyMzM0MSwyMzMzMywyMzM0NiwyMzMz''@;'; put 'put ''MSwyMzM0MCwyMzMzNSwyMzMzNCwyMzM0MywyMzM0MiwyMzQxOSwyMzUzNywyMzUzOCwyMzk5MSwyNDE3MiwyNDE3MCwyNDUxMCwyNDUwNywyNTAyNywyNTAxMywyNTAyMCwyNTA2MywyNTA1NiwyNTA2MSwyNTA2MCwyNTA2NCwyNTA1NCwyNTgzOSwyNTgzMywyNTgyNywyNTgzNSwyNTgyOCwy''@;'; put 'put ''NTgzMiwyNTk4NSwyNTk4NCwyNjAzOCwyNjA3NCwyNjMyMiwyNzI3NywyNzI4NiwyNzI2NSwyNzMwMSwyNzI3MywyNzI5NSwyNzI5MSwyNzI5NywyNzI5NCwyNzI3MSwyNzI4MywyNzI3OCwyNzI4NSwyNzI2NywyNzMwNCwyNzMwMCwyNzI4MSwyNzI2MywyNzMwMiwyNzI5MCwyNzI2OSwyNzI3''@;'; put 'put ''NiwyNzI4MiwyNzQ4MywyNzU2NSwyNzY1NywyODYyMCwyODU4NSwyODY2MCwyODYyOCwyODY0MywyODYzNiwyODY1MywyODY0NywyODY0NiwyODYzOCwyODY1OCwyODYzNywyODY0MiwyODY0OCwyOTE1MywyOTE2OSwyOTE2MCwyOTE3MCwyOTE1NiwyOTE2OCwyOTE1NCwyOTU1NSwyOTU1MCwy''@;'; put 'put ''OTU1MSwyOTg0NywyOTg3NCwyOTg2NywyOTg0MCwyOTg2NiwyOTg2OSwyOTg3MywyOTg2MSwyOTg3MSwyOTk2OCwyOTk2OSwyOTk3MCwyOTk2NywzMDA4NCwzMDI3NSwzMDI4MCwzMDI4MSwzMDI3OSwzMDM3MiwzMDQ0MSwzMDY0NSwzMDYzNSwzMDY0MiwzMDY0NywzMDY0NiwzMDY0NCwzMDY0''@;'; put 'put ''MSwzMDYzMiwzMDcwNCwzMDk2MywzMDk3MywzMDk3OCwzMDk3MSwzMDk3MiwzMDk2MiwzMDk4MSwzMDk2OSwzMDk3NCwzMDk4MCwzMTE0NywzMTE0NCwzMTMyNCwzMTMyMywzMTMxOCwzMTMyMCwzMTMxNiwzMTMyMiwzMTQyMiwzMTQyNCwzMTQyNSwzMTc0OSwzMTc1OSwzMTczMCwzMTc0NCwz''@;'; put 'put ''MTc0MywzMTczOSwzMTc1OCwzMTczMiwzMTc1NSwzMTczMSwzMTc0NiwzMTc1MywzMTc0NywzMTc0NSwzMTczNiwzMTc0MSwzMTc1MCwzMTcyOCwzMTcyOSwzMTc2MCwzMTc1NCwzMTk3NiwzMjMwMSwzMjMxNiwzMjMyMiwzMjMwNywzODk4NCwzMjMxMiwzMjI5OCwzMjMyOSwzMjMyMCwzMjMy''@;'; put 'put ''NywzMjI5NywzMjMzMiwzMjMwNCwzMjMxNSwzMjMxMCwzMjMyNCwzMjMxNCwzMjU4MSwzMjYzOSwzMjYzOCwzMjYzNywzMjc1NiwzMjc1NCwzMjgxMiwzMzIxMSwzMzIyMCwzMzIyOCwzMzIyNiwzMzIyMSwzMzIyMywzMzIxMiwzMzI1NywzMzM3MSwzMzM3MCwzMzM3MiwzNDE3OSwzNDE3Niwz''@;'; put 'put ''NDE5MSwzNDIxNSwzNDE5NywzNDIwOCwzNDE4NywzNDIxMSwzNDE3MSwzNDIxMiwzNDIwMiwzNDIwNiwzNDE2NywzNDE3MiwzNDE4NSwzNDIwOSwzNDE3MCwzNDE2OCwzNDEzNSwzNDE5MCwzNDE5OCwzNDE4MiwzNDE4OSwzNDIwMSwzNDIwNSwzNDE3NywzNDIxMCwzNDE3OCwzNDE4NCwzNDE4''@;'; put 'put ''MSwzNDE2OSwzNDE2NiwzNDIwMCwzNDE5MiwzNDIwNywzNDQwOCwzNDc1MCwzNDczMCwzNDczMywzNDc1NywzNDczNiwzNDczMiwzNDc0NSwzNDc0MSwzNDc0OCwzNDczNCwzNDc2MSwzNDc1NSwzNDc1NCwzNDc2NCwzNDc0MywzNDczNSwzNDc1NiwzNDc2MiwzNDc0MCwzNDc0MiwzNDc1MSwz''@;'; put 'put ''NDc0NCwzNDc0OSwzNDc4MiwzNDczOCwzNTEyNSwzNTEyMywzNTEzMiwzNTEzNCwzNTEzNywzNTE1NCwzNTEyNywzNTEzOCwzNTI0NSwzNTI0NywzNTI0NiwzNTMxNCwzNTMxNSwzNTYxNCwzNTYwOCwzNTYwNiwzNTYwMSwzNTU4OSwzNTU5NSwzNTYxOCwzNTU5OSwzNTYwMiwzNTYwNSwzNTU5''@;'; put 'put ''MSwzNTU5NywzNTU5MiwzNTU5MCwzNTYxMiwzNTYwMywzNTYxMCwzNTkxOSwzNTk1MiwzNTk1NCwzNTk1MywzNTk1MSwzNTk4OSwzNTk4OCwzNjA4OSwzNjIwNywzNjQzMCwzNjQyOSwzNjQzNSwzNjQzMiwzNjQyOCwzNjQyMywzNjY3NSwzNjY3MiwzNjk5NywzNjk5MCwzNzE3NiwzNzI3NCwz''@;'; put 'put ''NzI4MiwzNzI3NSwzNzI3MywzNzI3OSwzNzI4MSwzNzI3NywzNzI4MCwzNzc5MywzNzc2MywzNzgwNywzNzczMiwzNzcxOCwzNzcwMywzNzc1NiwzNzcyMCwzNzcyNCwzNzc1MCwzNzcwNSwzNzcxMiwzNzcxMywzNzcyOCwzNzc0MSwzNzc3NSwzNzcwOCwzNzczOCwzNzc1MywzNzcxOSwzNzcx''@;'; put 'put ''NywzNzcxNCwzNzcxMSwzNzc0NSwzNzc1MSwzNzc1NSwzNzcyOSwzNzcyNiwzNzczMSwzNzczNSwzNzc2MCwzNzcxMCwzNzcyMSwzODM0MywzODMzNiwzODM0NSwzODMzOSwzODM0MSwzODMyNywzODU3NCwzODU3NiwzODU3MiwzODY4OCwzODY4NywzODY4MCwzODY4NSwzODY4MSwzODgxMCwz''@;'; put 'put ''ODgxNywzODgxMiwzODgxNCwzODgxMywzODg2OSwzODg2OCwzODg5NywzODk3NywzODk4MCwzODk4NiwzODk4NSwzODk4MSwzODk3OSwzOTIwNSwzOTIxMSwzOTIxMiwzOTIxMCwzOTIxOSwzOTIxOCwzOTIxNSwzOTIxMywzOTIxNywzOTIxNiwzOTMyMCwzOTMzMSwzOTMyOSwzOTQyNiwzOTQx''@;'; put 'put ''OCwzOTQxMiwzOTQxNSwzOTQxNywzOTQxNiwzOTQxNCwzOTQxOSwzOTQyMSwzOTQyMiwzOTQyMCwzOTQyNywzOTYxNCwzOTY3OCwzOTY3NywzOTY4MSwzOTY3NiwzOTc1MiwzOTgzNCwzOTg0OCwzOTgzOCwzOTgzNSwzOTg0NiwzOTg0MSwzOTg0NSwzOTg0NCwzOTgxNCwzOTg0MiwzOTg0MCwz''@;'; put 'put ''OTg1NSw0MDI0Myw0MDI1Nyw0MDI5NSw0MDI0Niw0MDIzOCw0MDIzOSw0MDI0MSw0MDI0OCw0MDI0MCw0MDI2MSw0MDI1OCw0MDI1OSw0MDI1NCw0MDI0Nyw0MDI1Niw0MDI1MywzMjc1Nyw0MDIzNyw0MDU4Niw0MDU4NSw0MDU4OSw0MDYyNCw0MDY0OCw0MDY2Niw0MDY5OSw0MDcwMyw0MDc0''@;'; put 'put ''MCw0MDczOSw0MDczOCw0MDc4OCw0MDg2NCwyMDc4NSwyMDc4MSwyMDc4MiwyMjE2OCwyMjE3MiwyMjE2NywyMjE3MCwyMjE3MywyMjE2OSwyMjg5NiwyMzM1NiwyMzY1NywyMzY1OCwyNGUzLDI0MTczLDI0MTc0LDI1MDQ4LDI1MDU1LDI1MDY5LDI1MDcwLDI1MDczLDI1MDY2LDI1MDcyLDI1''@;'; put 'put ''MDY3LDI1MDQ2LDI1MDY1LDI1ODU1LDI1ODYwLDI1ODUzLDI1ODQ4LDI1ODU3LDI1ODU5LDI1ODUyLDI2MDA0LDI2MDc1LDI2MzMwLDI2MzMxLDI2MzI4LDI3MzMzLDI3MzIxLDI3MzI1LDI3MzYxLDI3MzM0LDI3MzIyLDI3MzE4LDI3MzE5LDI3MzM1LDI3MzE2LDI3MzA5LDI3NDg2LDI3NTkz''@;'; put 'put ''LDI3NjU5LDI4Njc5LDI4Njg0LDI4Njg1LDI4NjczLDI4Njc3LDI4NjkyLDI4Njg2LDI4NjcxLDI4NjcyLDI4NjY3LDI4NzEwLDI4NjY4LDI4NjYzLDI4NjgyLDI5MTg1LDI5MTgzLDI5MTc3LDI5MTg3LDI5MTgxLDI5NTU4LDI5ODgwLDI5ODg4LDI5ODc3LDI5ODg5LDI5ODg2LDI5ODc4LDI5''@;'; put 'put ''ODgzLDI5ODkwLDI5OTcyLDI5OTcxLDMwMzAwLDMwMzA4LDMwMjk3LDMwMjg4LDMwMjkxLDMwMjk1LDMwMjk4LDMwMzc0LDMwMzk3LDMwNDQ0LDMwNjU4LDMwNjUwLDMwOTc1LDMwOTg4LDMwOTk1LDMwOTk2LDMwOTg1LDMwOTkyLDMwOTk0LDMwOTkzLDMxMTQ5LDMxMTQ4LDMxMzI3LDMxNzcy''@;'; put 'put ''LDMxNzg1LDMxNzY5LDMxNzc2LDMxNzc1LDMxNzg5LDMxNzczLDMxNzgyLDMxNzg0LDMxNzc4LDMxNzgxLDMxNzkyLDMyMzQ4LDMyMzM2LDMyMzQyLDMyMzU1LDMyMzQ0LDMyMzU0LDMyMzUxLDMyMzM3LDMyMzUyLDMyMzQzLDMyMzM5LDMyNjkzLDMyNjkxLDMyNzU5LDMyNzYwLDMyODg1LDMz''@;'; put 'put ''MjMzLDMzMjM0LDMzMjMyLDMzMzc1LDMzMzc0LDM0MjI4LDM0MjQ2LDM0MjQwLDM0MjQzLDM0MjQyLDM0MjI3LDM0MjI5LDM0MjM3LDM0MjQ3LDM0MjQ0LDM0MjM5LDM0MjUxLDM0MjU0LDM0MjQ4LDM0MjQ1LDM0MjI1LDM0MjMwLDM0MjU4LDM0MzQwLDM0MjMyLDM0MjMxLDM0MjM4LDM0NDA5''@;'; put 'put ''LDM0NzkxLDM0NzkwLDM0Nzg2LDM0Nzc5LDM0Nzk1LDM0Nzk0LDM0Nzg5LDM0NzgzLDM0ODAzLDM0Nzg4LDM0NzcyLDM0NzgwLDM0NzcxLDM0Nzk3LDM0Nzc2LDM0Nzg3LDM0NzI0LDM0Nzc1LDM0Nzc3LDM0ODE3LDM0ODA0LDM0NzkyLDM0NzgxLDM1MTU1LDM1MTQ3LDM1MTUxLDM1MTQ4LDM1''@;'; put 'put ''MTQyLDM1MTUyLDM1MTUzLDM1MTQ1LDM1NjI2LDM1NjIzLDM1NjE5LDM1NjM1LDM1NjMyLDM1NjM3LDM1NjU1LDM1NjMxLDM1NjQ0LDM1NjQ2LDM1NjMzLDM1NjIxLDM1NjM5LDM1NjIyLDM1NjM4LDM1NjMwLDM1NjIwLDM1NjQzLDM1NjQ1LDM1NjQyLDM1OTA2LDM1OTU3LDM1OTkzLDM1OTky''@;'; put 'put ''LDM1OTkxLDM2MDk0LDM2MTAwLDM2MDk4LDM2MDk2LDM2NDQ0LDM2NDUwLDM2NDQ4LDM2NDM5LDM2NDM4LDM2NDQ2LDM2NDUzLDM2NDU1LDM2NDQzLDM2NDQyLDM2NDQ5LDM2NDQ1LDM2NDU3LDM2NDM2LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgzLDM3MTYwLDM3MTc4LDM3MTc5LDM3MTgyLDM3''@;'; put 'put ''Mjg4LDM3Mjg1LDM3Mjg3LDM3Mjk1LDM3MjkwLDM3ODEzLDM3NzcyLDM3Nzc4LDM3ODE1LDM3Nzg3LDM3Nzg5LDM3NzY5LDM3Nzk5LDM3Nzc0LDM3ODAyLDM3NzkwLDM3Nzk4LDM3NzgxLDM3NzY4LDM3Nzg1LDM3NzkxLDM3NzczLDM3ODA5LDM3Nzc3LDM3ODEwLDM3Nzk2LDM3ODAwLDM3ODEy''@;'; put 'put ''LDM3Nzk1LDM3Nzk3LDM4MzU0LDM4MzU1LDM4MzUzLDM4NTc5LDM4NjE1LDM4NjE4LDI0MDAyLDM4NjIzLDM4NjE2LDM4NjIxLDM4NjkxLDM4NjkwLDM4NjkzLDM4ODI4LDM4ODMwLDM4ODI0LDM4ODI3LDM4ODIwLDM4ODI2LDM4ODE4LDM4ODIxLDM4ODcxLDM4ODczLDM4ODcwLDM4ODcyLDM4''@;'; put 'put ''OTA2LDM4OTkyLDM4OTkzLDM4OTk0LDM5MDk2LDM5MjMzLDM5MjI4LDM5MjI2LDM5NDM5LDM5NDM1LDM5NDMzLDM5NDM3LDM5NDI4LDM5NDQxLDM5NDM0LDM5NDI5LDM5NDMxLDM5NDMwLDM5NjE2LDM5NjQ0LDM5Njg4LDM5Njg0LDM5Njg1LDM5NzIxLDM5NzMzLDM5NzU0LDM5NzU2LDM5NzU1''@;'; put 'put ''LDM5ODc5LDM5ODc4LDM5ODc1LDM5ODcxLDM5ODczLDM5ODYxLDM5ODY0LDM5ODkxLDM5ODYyLDM5ODc2LDM5ODY1LDM5ODY5LDQwMjg0LDQwMjc1LDQwMjcxLDQwMjY2LDQwMjgzLDQwMjY3LDQwMjgxLDQwMjc4LDQwMjY4LDQwMjc5LDQwMjc0LDQwMjc2LDQwMjg3LDQwMjgwLDQwMjgyLDQw''@;'; put 'put ''NTkwLDQwNTg4LDQwNjcxLDQwNzA1LDQwNzA0LDQwNzI2LDQwNzQxLDQwNzQ3LDQwNzQ2LDQwNzQ1LDQwNzQ0LDQwNzgwLDQwNzg5LDIwNzg4LDIwNzg5LDIxMTQyLDIxMjM5LDIxNDI4LDIyMTg3LDIyMTg5LDIyMTgyLDIyMTgzLDIyMTg2LDIyMTg4LDIyNzQ2LDIyNzQ5LDIyNzQ3LDIyODAy''@;'; put 'put ''LDIzMzU3LDIzMzU4LDIzMzU5LDI0MDAzLDI0MTc2LDI0NTExLDI1MDgzLDI1ODYzLDI1ODcyLDI1ODY5LDI1ODY1LDI1ODY4LDI1ODcwLDI1OTg4LDI2MDc4LDI2MDc3LDI2MzM0LDI3MzY3LDI3MzYwLDI3MzQwLDI3MzQ1LDI3MzUzLDI3MzM5LDI3MzU5LDI3MzU2LDI3MzQ0LDI3MzcxLDI3''@;'; put 'put ''MzQzLDI3MzQxLDI3MzU4LDI3NDg4LDI3NTY4LDI3NjYwLDI4Njk3LDI4NzExLDI4NzA0LDI4Njk0LDI4NzE1LDI4NzA1LDI4NzA2LDI4NzA3LDI4NzEzLDI4Njk1LDI4NzA4LDI4NzAwLDI4NzE0LDI5MTk2LDI5MTk0LDI5MTkxLDI5MTg2LDI5MTg5LDI5MzQ5LDI5MzUwLDI5MzQ4LDI5MzQ3''@;'; put 'put ''LDI5MzQ1LDI5ODk5LDI5ODkzLDI5ODc5LDI5ODkxLDI5OTc0LDMwMzA0LDMwNjY1LDMwNjY2LDMwNjYwLDMwNzA1LDMxMDA1LDMxMDAzLDMxMDA5LDMxMDA0LDMwOTk5LDMxMDA2LDMxMTUyLDMxMzM1LDMxMzM2LDMxNzk1LDMxODA0LDMxODAxLDMxNzg4LDMxODAzLDMxOTgwLDMxOTc4LDMy''@;'; put 'put ''Mzc0LDMyMzczLDMyMzc2LDMyMzY4LDMyMzc1LDMyMzY3LDMyMzc4LDMyMzcwLDMyMzcyLDMyMzYwLDMyNTg3LDMyNTg2LDMyNjQzLDMyNjQ2LDMyNjk1LDMyNzY1LDMyNzY2LDMyODg4LDMzMjM5LDMzMjM3LDMzMzgwLDMzMzc3LDMzMzc5LDM0MjgzLDM0Mjg5LDM0Mjg1LDM0MjY1LDM0Mjcz''@;'; put 'put ''LDM0MjgwLDM0MjY2LDM0MjYzLDM0Mjg0LDM0MjkwLDM0Mjk2LDM0MjY0LDM0MjcxLDM0Mjc1LDM0MjY4LDM0MjU3LDM0Mjg4LDM0Mjc4LDM0Mjg3LDM0MjcwLDM0Mjc0LDM0ODE2LDM0ODEwLDM0ODE5LDM0ODA2LDM0ODA3LDM0ODI1LDM0ODI4LDM0ODI3LDM0ODIyLDM0ODEyLDM0ODI0LDM0''@;'; put 'put ''ODE1LDM0ODI2LDM0ODE4LDM1MTcwLDM1MTYyLDM1MTYzLDM1MTU5LDM1MTY5LDM1MTY0LDM1MTYwLDM1MTY1LDM1MTYxLDM1MjA4LDM1MjU1LDM1MjU0LDM1MzE4LDM1NjY0LDM1NjU2LDM1NjU4LDM1NjQ4LDM1NjY3LDM1NjcwLDM1NjY4LDM1NjU5LDM1NjY5LDM1NjY1LDM1NjUwLDM1NjY2''@;'; put 'put ''LDM1NjcxLDM1OTA3LDM1OTU5LDM1OTU4LDM1OTk0LDM2MTAyLDM2MTAzLDM2MTA1LDM2MjY4LDM2MjY2LDM2MjY5LDM2MjY3LDM2NDYxLDM2NDcyLDM2NDY3LDM2NDU4LDM2NDYzLDM2NDc1LDM2NTQ2LDM2NjkwLDM2Njg5LDM2Njg3LDM2Njg4LDM2NjkxLDM2Nzg4LDM3MTg0LDM3MTgzLDM3''@;'; put 'put ''Mjk2LDM3MjkzLDM3ODU0LDM3ODMxLDM3ODM5LDM3ODI2LDM3ODUwLDM3ODQwLDM3ODgxLDM3ODY4LDM3ODM2LDM3ODQ5LDM3ODAxLDM3ODYyLDM3ODM0LDM3ODQ0LDM3ODcwLDM3ODU5LDM3ODQ1LDM3ODI4LDM3ODM4LDM3ODI0LDM3ODQyLDM3ODYzLDM4MjY5LDM4MzYyLDM4MzYzLDM4NjI1''@;'; put 'put ''LDM4Njk3LDM4Njk5LDM4NzAwLDM4Njk2LDM4Njk0LDM4ODM1LDM4ODM5LDM4ODM4LDM4ODc3LDM4ODc4LDM4ODc5LDM5MDA0LDM5MDAxLDM5MDA1LDM4OTk5LDM5MTAzLDM5MTAxLDM5MDk5LDM5MTAyLDM5MjQwLDM5MjM5LDM5MjM1LDM5MzM0LDM5MzM1LDM5NDUwLDM5NDQ1LDM5NDYxLDM5''@;'; put 'put ''NDUzLDM5NDYwLDM5NDUxLDM5NDU4LDM5NDU2LDM5NDYzLDM5NDU5LDM5NDU0LDM5NDUyLDM5NDQ0LDM5NjE4LDM5NjkxLDM5NjkwLDM5Njk0LDM5NjkyLDM5NzM1LDM5OTE0LDM5OTE1LDM5OTA0LDM5OTAyLDM5OTA4LDM5OTEwLDM5OTA2LDM5OTIwLDM5ODkyLDM5ODk1LDM5OTE2LDM5OTAw''@;'; put 'put ''LDM5ODk3LDM5OTA5LDM5ODkzLDM5OTA1LDM5ODk4LDQwMzExLDQwMzIxLDQwMzMwLDQwMzI0LDQwMzI4LDQwMzA1LDQwMzIwLDQwMzEyLDQwMzI2LDQwMzMxLDQwMzMyLDQwMzE3LDQwMjk5LDQwMzA4LDQwMzA5LDQwMzA0LDQwMjk3LDQwMzI1LDQwMzA3LDQwMzE1LDQwMzIyLDQwMzAzLDQw''@;'; put 'put ''MzEzLDQwMzE5LDQwMzI3LDQwMjk2LDQwNTk2LDQwNTkzLDQwNjQwLDQwNzAwLDQwNzQ5LDQwNzY4LDQwNzY5LDQwNzgxLDQwNzkwLDQwNzkxLDQwNzkyLDIxMzAzLDIyMTk0LDIyMTk3LDIyMTk1LDIyNzU1LDIzMzY1LDI0MDA2LDI0MDA3LDI0MzAyLDI0MzAzLDI0NTEyLDI0NTEzLDI1MDgx''@;'; put 'put ''LDI1ODc5LDI1ODc4LDI1ODc3LDI1ODc1LDI2MDc5LDI2MzQ0LDI2MzM5LDI2MzQwLDI3Mzc5LDI3Mzc2LDI3MzcwLDI3MzY4LDI3Mzg1LDI3Mzc3LDI3Mzc0LDI3Mzc1LDI4NzMyLDI4NzI1LDI4NzE5LDI4NzI3LDI4NzI0LDI4NzIxLDI4NzM4LDI4NzI4LDI4NzM1LDI4NzMwLDI4NzI5LDI4''@;'; put 'put ''NzM2LDI4NzMxLDI4NzIzLDI4NzM3LDI5MjAzLDI5MjA0LDI5MzUyLDI5NTY1LDI5NTY0LDI5ODgyLDMwMzc5LDMwMzc4LDMwMzk4LDMwNDQ1LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjY5LDMwNzA2LDMxMDEzLDMxMDExLDMxMDE1LDMxMDE2LDMxMDEyLDMxMDE3LDMxMTU0LDMxMzQyLDMxMzQw''@;'; put 'put ''LDMxMzQxLDMxNDc5LDMxODE3LDMxODE2LDMxODE4LDMxODE1LDMxODEzLDMxOTgyLDMyMzc5LDMyMzgyLDMyMzg1LDMyMzg0LDMyNjk4LDMyNzY3LDMyODg5LDMzMjQzLDMzMjQxLDMzMjkxLDMzMzg0LDMzMzg1LDM0MzM4LDM0MzAzLDM0MzA1LDM0MzAyLDM0MzMxLDM0MzA0LDM0Mjk0LDM0''@;'; put 'put ''MzA4LDM0MzEzLDM0MzA5LDM0MzE2LDM0MzAxLDM0ODQxLDM0ODMyLDM0ODMzLDM0ODM5LDM0ODM1LDM0ODM4LDM1MTcxLDM1MTc0LDM1MjU3LDM1MzE5LDM1NjgwLDM1NjkwLDM1Njc3LDM1Njg4LDM1NjgzLDM1Njg1LDM1Njg3LDM1NjkzLDM2MjcwLDM2NDg2LDM2NDg4LDM2NDg0LDM2Njk3''@;'; put 'put ''LDM2Njk0LDM2Njk1LDM2NjkzLDM2Njk2LDM2Njk4LDM3MDA1LDM3MTg3LDM3MTg1LDM3MzAzLDM3MzAxLDM3Mjk4LDM3Mjk5LDM3ODk5LDM3OTA3LDM3ODgzLDM3OTIwLDM3OTAzLDM3OTA4LDM3ODg2LDM3OTA5LDM3OTA0LDM3OTI4LDM3OTEzLDM3OTAxLDM3ODc3LDM3ODg4LDM3ODc5LDM3''@;'; put 'put ''ODk1LDM3OTAyLDM3OTEwLDM3OTA2LDM3ODgyLDM3ODk3LDM3ODgwLDM3ODk4LDM3ODg3LDM3ODg0LDM3OTAwLDM3ODc4LDM3OTA1LDM3ODk0LDM4MzY2LDM4MzY4LDM4MzY3LDM4NzAyLDM4NzAzLDM4ODQxLDM4ODQzLDM4OTA5LDM4OTEwLDM5MDA4LDM5MDEwLDM5MDExLDM5MDA3LDM5MTA1''@;'; put 'put ''LDM5MTA2LDM5MjQ4LDM5MjQ2LDM5MjU3LDM5MjQ0LDM5MjQzLDM5MjUxLDM5NDc0LDM5NDc2LDM5NDczLDM5NDY4LDM5NDY2LDM5NDc4LDM5NDY1LDM5NDcwLDM5NDgwLDM5NDY5LDM5NjIzLDM5NjI2LDM5NjIyLDM5Njk2LDM5Njk4LDM5Njk3LDM5OTQ3LDM5OTQ0LDM5OTI3LDM5OTQxLDM5''@;'; put 'put ''OTU0LDM5OTI4LDRlNCwzOTk0MywzOTk1MCwzOTk0MiwzOTk1OSwzOTk1NiwzOTk0NSw0MDM1MSw0MDM0NSw0MDM1Niw0MDM0OSw0MDMzOCw0MDM0NCw0MDMzNiw0MDM0Nyw0MDM1Miw0MDM0MCw0MDM0OCw0MDM2Miw0MDM0Myw0MDM1Myw0MDM0Niw0MDM1NCw0MDM2MCw0MDM1MCw0MDM1NSw0''@;'; put 'put ''MDM4Myw0MDM2MSw0MDM0Miw0MDM1OCw0MDM1OSw0MDYwMSw0MDYwMyw0MDYwMiw0MDY3Nyw0MDY3Niw0MDY3OSw0MDY3OCw0MDc1Miw0MDc1MCw0MDc5NSw0MDgwMCw0MDc5OCw0MDc5Nyw0MDc5Myw0MDg0OSwyMDc5NCwyMDc5MywyMTE0NCwyMTE0MywyMjIxMSwyMjIwNSwyMjIwNiwyMzM2''@;'; put 'put ''OCwyMzM2NywyNDAxMSwyNDAxNSwyNDMwNSwyNTA4NSwyNTg4MywyNzM5NCwyNzM4OCwyNzM5NSwyNzM4NCwyNzM5MiwyODczOSwyODc0MCwyODc0NiwyODc0NCwyODc0NSwyODc0MSwyODc0MiwyOTIxMywyOTIxMCwyOTIwOSwyOTU2NiwyOTk3NSwzMDMxNCwzMDY3MiwzMTAyMSwzMTAyNSwz''@;'; put 'put ''MTAyMywzMTgyOCwzMTgyNywzMTk4NiwzMjM5NCwzMjM5MSwzMjM5MiwzMjM5NSwzMjM5MCwzMjM5NywzMjU4OSwzMjY5OSwzMjgxNiwzMzI0NSwzNDMyOCwzNDM0NiwzNDM0MiwzNDMzNSwzNDMzOSwzNDMzMiwzNDMyOSwzNDM0MywzNDM1MCwzNDMzNywzNDMzNiwzNDM0NSwzNDMzNCwzNDM0''@;'; put 'put ''MSwzNDg1NywzNDg0NSwzNDg0MywzNDg0OCwzNDg1MiwzNDg0NCwzNDg1OSwzNDg5MCwzNTE4MSwzNTE3NywzNTE4MiwzNTE3OSwzNTMyMiwzNTcwNSwzNTcwNCwzNTY1MywzNTcwNiwzNTcwNywzNjExMiwzNjExNiwzNjI3MSwzNjQ5NCwzNjQ5MiwzNjcwMiwzNjY5OSwzNjcwMSwzNzE5MCwz''@;'; put 'put ''NzE4OCwzNzE4OSwzNzMwNSwzNzk1MSwzNzk0NywzNzk0MiwzNzkyOSwzNzk0OSwzNzk0OCwzNzkzNiwzNzk0NSwzNzkzMCwzNzk0MywzNzkzMiwzNzk1MiwzNzkzNywzODM3MywzODM3MiwzODM3MSwzODcwOSwzODcxNCwzODg0NywzODg4MSwzOTAxMiwzOTExMywzOTExMCwzOTEwNCwzOTI1''@;'; put 'put ''NiwzOTI1NCwzOTQ4MSwzOTQ4NSwzOTQ5NCwzOTQ5MiwzOTQ5MCwzOTQ4OSwzOTQ4MiwzOTQ4NywzOTYyOSwzOTcwMSwzOTcwMywzOTcwNCwzOTcwMiwzOTczOCwzOTc2MiwzOTk3OSwzOTk2NSwzOTk2NCwzOTk4MCwzOTk3MSwzOTk3NiwzOTk3NywzOTk3MiwzOTk2OSw0MDM3NSw0MDM3NCw0''@;'; put 'put ''MDM4MCw0MDM4NSw0MDM5MSw0MDM5NCw0MDM5OSw0MDM4Miw0MDM4OSw0MDM4Nyw0MDM3OSw0MDM3Myw0MDM5OCw0MDM3Nyw0MDM3OCw0MDM2NCw0MDM5Miw0MDM2OSw0MDM2NSw0MDM5Niw0MDM3MSw0MDM5Nyw0MDM3MCw0MDU3MCw0MDYwNCw0MDY4Myw0MDY4Niw0MDY4NSw0MDczMSw0MDcy''@;'; put 'put ''OCw0MDczMCw0MDc1Myw0MDc4Miw0MDgwNSw0MDgwNCw0MDg1MCwyMDE1MywyMjIxNCwyMjIxMywyMjIxOSwyMjg5NywyMzM3MSwyMzM3MiwyNDAyMSwyNDAxNywyNDMwNiwyNTg4OSwyNTg4OCwyNTg5NCwyNTg5MCwyNzQwMywyNzQwMCwyNzQwMSwyNzY2MSwyODc1NywyODc1OCwyODc1OSwy''@;'; put 'put ''ODc1NCwyOTIxNCwyOTIxNSwyOTM1MywyOTU2NywyOTkxMiwyOTkwOSwyOTkxMywyOTkxMSwzMDMxNywzMDM4MSwzMTAyOSwzMTE1NiwzMTM0NCwzMTM0NSwzMTgzMSwzMTgzNiwzMTgzMywzMTgzNSwzMTgzNCwzMTk4OCwzMTk4NSwzMjQwMSwzMjU5MSwzMjY0NywzMzI0NiwzMzM4NywzNDM1''@;'; put 'put ''NiwzNDM1NywzNDM1NSwzNDM0OCwzNDM1NCwzNDM1OCwzNDg2MCwzNDg1NiwzNDg1NCwzNDg1OCwzNDg1MywzNTE4NSwzNTI2MywzNTI2MiwzNTMyMywzNTcxMCwzNTcxNiwzNTcxNCwzNTcxOCwzNTcxNywzNTcxMSwzNjExNywzNjUwMSwzNjUwMCwzNjUwNiwzNjQ5OCwzNjQ5NiwzNjUwMiwz''@;'; put 'put ''NjUwMywzNjcwNCwzNjcwNiwzNzE5MSwzNzk2NCwzNzk2OCwzNzk2MiwzNzk2MywzNzk2NywzNzk1OSwzNzk1NywzNzk2MCwzNzk2MSwzNzk1OCwzODcxOSwzODg4MywzOTAxOCwzOTAxNywzOTExNSwzOTI1MiwzOTI1OSwzOTUwMiwzOTUwNywzOTUwOCwzOTUwMCwzOTUwMywzOTQ5NiwzOTQ5''@;'; put 'put ''OCwzOTQ5NywzOTUwNiwzOTUwNCwzOTYzMiwzOTcwNSwzOTcyMywzOTczOSwzOTc2NiwzOTc2NSw0MDAwNiw0MDAwOCwzOTk5OSw0MDAwNCwzOTk5MywzOTk4Nyw0MDAwMSwzOTk5NiwzOTk5MSwzOTk4OCwzOTk4NiwzOTk5NywzOTk5MCw0MDQxMSw0MDQwMiw0MDQxNCw0MDQxMCw0MDM5NSw0''@;'; put 'put ''MDQwMCw0MDQxMiw0MDQwMSw0MDQxNSw0MDQyNSw0MDQwOSw0MDQwOCw0MDQwNiw0MDQzNyw0MDQwNSw0MDQxMyw0MDYzMCw0MDY4OCw0MDc1Nyw0MDc1NSw0MDc1NCw0MDc3MCw0MDgxMSw0MDg1Myw0MDg2NiwyMDc5NywyMTE0NSwyMjc2MCwyMjc1OSwyMjg5OCwyMzM3MywyNDAyNCwzNDg2''@;'; put 'put ''MywyNDM5OSwyNTA4OSwyNTA5MSwyNTA5MiwyNTg5NywyNTg5MywyNjAwNiwyNjM0NywyNzQwOSwyNzQxMCwyNzQwNywyNzU5NCwyODc2MywyODc2MiwyOTIxOCwyOTU3MCwyOTU2OSwyOTU3MSwzMDMyMCwzMDY3NiwzMTg0NywzMTg0NiwzMjQwNSwzMzM4OCwzNDM2MiwzNDM2OCwzNDM2MSwz''@;'; put 'put ''NDM2NCwzNDM1MywzNDM2MywzNDM2NiwzNDg2NCwzNDg2NiwzNDg2MiwzNDg2NywzNTE5MCwzNTE4OCwzNTE4NywzNTMyNiwzNTcyNCwzNTcyNiwzNTcyMywzNTcyMCwzNTkwOSwzNjEyMSwzNjUwNCwzNjcwOCwzNjcwNywzNzMwOCwzNzk4NiwzNzk3MywzNzk4MSwzNzk3NSwzNzk4MiwzODg1''@;'; put 'put ''MiwzODg1MywzODkxMiwzOTUxMCwzOTUxMywzOTcxMCwzOTcxMSwzOTcxMiw0MDAxOCw0MDAyNCw0MDAxNiw0MDAxMCw0MDAxMyw0MDAxMSw0MDAyMSw0MDAyNSw0MDAxMiw0MDAxNCw0MDQ0Myw0MDQzOSw0MDQzMSw0MDQxOSw0MDQyNyw0MDQ0MCw0MDQyMCw0MDQzOCw0MDQxNyw0MDQzMCw0''@;'; put 'put ''MDQyMiw0MDQzNCw0MDQzMiw0MDQxOCw0MDQyOCw0MDQzNiw0MDQzNSw0MDQyNCw0MDQyOSw0MDY0Miw0MDY1Niw0MDY5MCw0MDY5MSw0MDcxMCw0MDczMiw0MDc2MCw0MDc1OSw0MDc1OCw0MDc3MSw0MDc4Myw0MDgxNyw0MDgxNiw0MDgxNCw0MDgxNSwyMjIyNywyMjIyMSwyMzM3NCwyMzY2''@;'; put 'put ''MSwyNTkwMSwyNjM0OSwyNjM1MCwyNzQxMSwyODc2NywyODc2OSwyODc2NSwyODc2OCwyOTIxOSwyOTkxNSwyOTkyNSwzMDY3NywzMTAzMiwzMTE1OSwzMTE1OCwzMTg1MCwzMjQwNywzMjY0OSwzMzM4OSwzNDM3MSwzNDg3MiwzNDg3MSwzNDg2OSwzNDg5MSwzNTczMiwzNTczMywzNjUxMCwz''@;'; put 'put ''NjUxMSwzNjUxMiwzNjUwOSwzNzMxMCwzNzMwOSwzNzMxNCwzNzk5NSwzNzk5MiwzNzk5MywzODYyOSwzODcyNiwzODcyMywzODcyNywzODg1NSwzODg4NSwzOTUxOCwzOTYzNywzOTc2OSw0MDAzNSw0MDAzOSw0MDAzOCw0MDAzNCw0MDAzMCw0MDAzMiw0MDQ1MCw0MDQ0Niw0MDQ1NSw0MDQ1''@;'; put 'put ''MSw0MDQ1NCw0MDQ1Myw0MDQ0OCw0MDQ0OSw0MDQ1Nyw0MDQ0Nyw0MDQ0NSw0MDQ1Miw0MDYwOCw0MDczNCw0MDc3NCw0MDgyMCw0MDgyMSw0MDgyMiwyMjIyOCwyNTkwMiwyNjA0MCwyNzQxNiwyNzQxNywyNzQxNSwyNzQxOCwyODc3MCwyOTIyMiwyOTM1NCwzMDY4MCwzMDY4MSwzMTAzMywz''@;'; put 'put ''MTg0OSwzMTg1MSwzMTk5MCwzMjQxMCwzMjQwOCwzMjQxMSwzMjQwOSwzMzI0OCwzMzI0OSwzNDM3NCwzNDM3NSwzNDM3NiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NSwzNTMyNywzNTczNiwzNTczNywzNjUxNywzNjUxNiwzNjUxNSwzNzk5OCwzNzk5NywzNzk5OSwzODAwMSwzODAwMywzODcy''@;'; put 'put ''OSwzOTAyNiwzOTI2Myw0MDA0MCw0MDA0Niw0MDA0NSw0MDQ1OSw0MDQ2MSw0MDQ2NCw0MDQ2Myw0MDQ2Niw0MDQ2NSw0MDYwOSw0MDY5Myw0MDcxMyw0MDc3NSw0MDgyNCw0MDgyNyw0MDgyNiw0MDgyNSwyMjMwMiwyODc3NCwzMTg1NSwzNDg3NiwzNjI3NCwzNjUxOCwzNzMxNSwzODAwNCwz''@;'; put 'put ''ODAwOCwzODAwNiwzODAwNSwzOTUyMCw0MDA1Miw0MDA1MSw0MDA0OSw0MDA1Myw0MDQ2OCw0MDQ2Nyw0MDY5NCw0MDcxNCw0MDg2OCwyODc3NiwyODc3MywzMTk5MSwzNDQxMCwzNDg3OCwzNDg3NywzNDg3OSwzNTc0MiwzNTk5NiwzNjUyMSwzNjU1MywzODczMSwzOTAyNywzOTAyOCwzOTEx''@;'; put 'put ''NiwzOTI2NSwzOTMzOSwzOTUyNCwzOTUyNiwzOTUyNywzOTcxNiw0MDQ2OSw0MDQ3MSw0MDc3NiwyNTA5NSwyNzQyMiwyOTIyMywzNDM4MCwzNjUyMCwzODAxOCwzODAxNiwzODAxNywzOTUyOSwzOTUyOCwzOTcyNiw0MDQ3MywyOTIyNSwzNDM3OSwzNTc0MywzODAxOSw0MDA1Nyw0MDYzMSwz''@;'; put 'put ''MDMyNSwzOTUzMSw0MDA1OCw0MDQ3NywyODc3NywyODc3OCw0MDYxMiw0MDgzMCw0MDc3Nyw0MDg1NiwzMDg0OSwzNzU2MSwzNTAyMywyMjcxNSwyNDY1OCwzMTkxMSwyMzI5MCw5NTU2LDk1NzQsOTU1OSw5NTY4LDk1ODAsOTU3MSw5NTYyLDk1NzcsOTU2NSw5NTU0LDk1NzIsOTU1Nyw5NTY2''@;'; put 'put ''LDk1NzgsOTU2OSw5NTYwLDk1NzUsOTU2Myw5NTU1LDk1NzMsOTU1OCw5NTY3LDk1NzksOTU3MCw5NTYxLDk1NzYsOTU2NCw5NTUzLDk1NTIsOTU4MSw5NTgyLDk1ODQsOTU4Myw2NTUxNywxMzI0MjMsMzc1OTUsMTMyNTc1LDE0NzM5NywzNDEyNCwxNzA3NywyOTY3OSwyMDkxNywxMzg5Nywx''@;'; put 'put ''NDk4MjYsMTY2MzcyLDM3NzAwLDEzNzY5MSwzMzUxOCwxNDY2MzIsMzA3ODAsMjY0MzYsMjUzMTEsMTQ5ODExLDE2NjMxNCwxMzE3NDQsMTU4NjQzLDEzNTk0MSwyMDM5NSwxNDA1MjUsMjA0ODgsMTU5MDE3LDE2MjQzNiwxNDQ4OTYsMTUwMTkzLDE0MDU2MywyMDUyMSwxMzE5NjYsMjQ0ODQs''@;'; put 'put ''MTMxOTY4LDEzMTkxMSwyODM3OSwxMzIxMjcsMjA2MDUsMjA3MzcsMTM0MzQsMjA3NTAsMzkwMjAsMTQxNDcsMzM4MTQsMTQ5OTI0LDEzMjIzMSwyMDgzMiwxNDQzMDgsMjA4NDIsMTM0MTQzLDEzOTUxNiwxMzE4MTMsMTQwNTkyLDEzMjQ5NCwxNDM5MjMsMTM3NjAzLDIzNDI2LDM0Njg1LDEz''@;'; put 'put ''MjUzMSwxNDY1ODUsMjA5MTQsMjA5MjAsNDAyNDQsMjA5MzcsMjA5NDMsMjA5NDUsMTU1ODAsMjA5NDcsMTUwMTgyLDIwOTE1LDIwOTYyLDIxMzE0LDIwOTczLDMzNzQxLDI2OTQyLDE0NTE5NywyNDQ0MywyMTAwMywyMTAzMCwyMTA1MiwyMTE3MywyMTA3OSwyMTE0MCwyMTE3NywyMTE4OSwz''@;'; put 'put ''MTc2NSwzNDExNCwyMTIxNiwzNDMxNywxNTg0ODMsMjEyNTMsMTY2NjIyLDIxODMzLDI4Mzc3LDE0NzMyOCwxMzM0NjAsMTQ3NDM2LDIxMjk5LDIxMzE2LDEzNDExNCwyNzg1MSwxMzY5OTgsMjY2NTEsMjk2NTMsMjQ2NTAsMTYwNDIsMTQ1NDAsMTM2OTM2LDI5MTQ5LDE3NTcwLDIxMzU3LDIx''@;'; put 'put ''MzY0LDE2NTU0NywyMTM3NCwyMTM3NSwxMzY1OTgsMTM2NzIzLDMwNjk0LDIxMzk1LDE2NjU1NSwyMTQwOCwyMTQxOSwyMTQyMiwyOTYwNywxNTM0NTgsMTYyMTcsMjk1OTYsMjE0NDEsMjE0NDUsMjc3MjEsMjAwNDEsMjI1MjYsMjE0NjUsMTUwMTksMTM0MDMxLDIxNDcyLDE0NzQzNSwxNDI3''@;'; put 'put ''NTUsMjE0OTQsMTM0MjYzLDIxNTIzLDI4NzkzLDIxODAzLDI2MTk5LDI3OTk1LDIxNjEzLDE1ODU0NywxMzQ1MTYsMjE4NTMsMjE2NDcsMjE2NjgsMTgzNDIsMTM2OTczLDEzNDg3NywxNTc5NiwxMzQ0NzcsMTY2MzMyLDE0MDk1MiwyMTgzMSwxOTY5MywyMTU1MSwyOTcxOSwyMTg5NCwyMTky''@;'; put 'put ''OSwyMjAyMSwxMzc0MzEsMTQ3NTE0LDE3NzQ2LDE0ODUzMywyNjI5MSwxMzUzNDgsMjIwNzEsMjYzMTcsMTQ0MDEwLDI2Mjc2LDI2Mjg1LDIyMDkzLDIyMDk1LDMwOTYxLDIyMjU3LDM4NzkxLDIxNTAyLDIyMjcyLDIyMjU1LDIyMjUzLDE2Njc1OCwxMzg1OSwxMzU3NTksMjIzNDIsMTQ3ODc3''@;'; put 'put ''LDI3NzU4LDI4ODExLDIyMzM4LDE0MDAxLDE1ODg0NiwyMjUwMiwxMzYyMTQsMjI1MzEsMTM2Mjc2LDE0ODMyMywyMjU2NiwxNTA1MTcsMjI2MjAsMjI2OTgsMTM2NjUsMjI3NTIsMjI3NDgsMTM1NzQwLDIyNzc5LDIzNTUxLDIyMzM5LDE3MjM2OCwxNDgwODgsMzc4NDMsMTM3MjksMjI4MTUs''@;'; put 'put ''MjY3OTAsMTQwMTksMjgyNDksMTM2NzY2LDIzMDc2LDIxODQzLDEzNjg1MCwzNDA1MywyMjk4NSwxMzQ0NzgsMTU4ODQ5LDE1OTAxOCwxMzcxODAsMjMwMDEsMTM3MjExLDEzNzEzOCwxNTkxNDIsMjgwMTcsMTM3MjU2LDEzNjkxNywyMzAzMywxNTkzMDEsMjMyMTEsMjMxMzksMTQwNTQsMTQ5''@;'; put 'put ''OTI5LDIzMTU5LDE0MDg4LDIzMTkwLDI5Nzk3LDIzMjUxLDE1OTY0OSwxNDA2MjgsMTU3NDksMTM3NDg5LDE0MTMwLDEzNjg4OCwyNDE5NSwyMTIwMCwyMzQxNCwyNTk5MiwyMzQyMCwxNjIzMTgsMTYzODgsMTg1MjUsMTMxNTg4LDIzNTA5LDI0OTI4LDEzNzc4MCwxNTQwNjAsMTMyNTE3LDIz''@;'; put 'put ''NTM5LDIzNDUzLDE5NzI4LDIzNTU3LDEzODA1MiwyMzU3MSwyOTY0NiwyMzU3MiwxMzg0MDUsMTU4NTA0LDIzNjI1LDE4NjUzLDIzNjg1LDIzNzg1LDIzNzkxLDIzOTQ3LDEzODc0NSwxMzg4MDcsMjM4MjQsMjM4MzIsMjM4NzgsMTM4OTE2LDIzNzM4LDI0MDIzLDMzNTMyLDE0MzgxLDE0OTc2''@;'; put 'put ''MSwxMzkzMzcsMTM5NjM1LDMzNDE1LDE0MzkwLDE1Mjk4LDI0MTEwLDI3Mjc0LDI0MTgxLDI0MTg2LDE0ODY2OCwxMzQzNTUsMjE0MTQsMjAxNTEsMjQyNzIsMjE0MTYsMTM3MDczLDI0MDczLDI0MzA4LDE2NDk5NCwyNDMxMywyNDMxNSwxNDQ5NiwyNDMxNiwyNjY4NiwzNzkxNSwyNDMzMywx''@;'; put 'put ''MzE1MjEsMTk0NzA4LDE1MDcwLDE4NjA2LDEzNTk5NCwyNDM3OCwxNTc4MzIsMTQwMjQwLDI0NDA4LDE0MDQwMSwyNDQxOSwzODg0NSwxNTkzNDIsMjQ0MzQsMzc2OTYsMTY2NDU0LDI0NDg3LDIzOTkwLDE1NzExLDE1MjE0NCwxMzkxMTQsMTU5OTkyLDE0MDkwNCwzNzMzNCwxMzE3NDIsMTY2''@;'; put 'put ''NDQxLDI0NjI1LDI2MjQ1LDEzNzMzNSwxNDY5MSwxNTgxNSwxMzg4MSwyMjQxNiwxNDEyMzYsMzEwODksMTU5MzYsMjQ3MzQsMjQ3NDAsMjQ3NTUsMTQ5ODkwLDE0OTkwMywxNjIzODcsMjk4NjAsMjA3MDUsMjMyMDAsMjQ5MzIsMzM4MjgsMjQ4OTgsMTk0NzI2LDE1OTQ0MiwyNDk2MSwyMDk4''@;'; put 'put ''MCwxMzI2OTQsMjQ5NjcsMjM0NjYsMTQ3MzgzLDE0MTQwNywyNTA0MywxNjY4MTMsMTcwMzMzLDI1MDQwLDE0NjQyLDE0MTY5NiwxNDE1MDUsMjQ2MTEsMjQ5MjQsMjU4ODYsMjU0ODMsMTMxMzUyLDI1Mjg1LDEzNzA3MiwyNTMwMSwxNDI4NjEsMjU0NTIsMTQ5OTgzLDE0ODcxLDI1NjU2LDI1''@;'; put 'put ''NTkyLDEzNjA3OCwxMzcyMTIsMjU3NDQsMjg1NTQsMTQyOTAyLDM4OTMyLDE0NzU5NiwxNTMzNzMsMjU4MjUsMjU4MjksMzgwMTEsMTQ5NTAsMjU2NTgsMTQ5MzUsMjU5MzMsMjg0MzgsMTUwMDU2LDE1MDA1MSwyNTk4OSwyNTk2NSwyNTk1MSwxNDM0ODYsMjYwMzcsMTQ5ODI0LDE5MjU1LDI2''@;'; put 'put ''MDY1LDE2NjAwLDEzNzI1NywyNjA4MCwyNjA4MywyNDU0MywxNDQzODQsMjYxMzYsMTQzODYzLDE0Mzg2NCwyNjE4MCwxNDM3ODAsMTQzNzgxLDI2MTg3LDEzNDc3MywyNjIxNSwxNTIwMzgsMjYyMjcsMjYyMjgsMTM4ODEzLDE0MzkyMSwxNjUzNjQsMTQzODE2LDE1MjMzOSwzMDY2MSwxNDE1''@;'; put 'put ''NTksMzkzMzIsMjYzNzAsMTQ4MzgwLDE1MDA0OSwxNTE0NywyNzEzMCwxNDUzNDYsMjY0NjIsMjY0NzEsMjY0NjYsMTQ3OTE3LDE2ODE3MywyNjU4MywxNzY0MSwyNjY1OCwyODI0MCwzNzQzNiwyNjYyNSwxNDQzNTgsMTU5MTM2LDI2NzE3LDE0NDQ5NSwyNzEwNSwyNzE0NywxNjY2MjMsMjY5''@;'; put 'put ''OTUsMjY4MTksMTQ0ODQ1LDI2ODgxLDI2ODgwLDE1NjY2LDE0ODQ5LDE0NDk1NiwxNTIzMiwyNjU0MCwyNjk3NywxNjY0NzQsMTcxNDgsMjY5MzQsMjcwMzIsMTUyNjUsMTMyMDQxLDMzNjM1LDIwNjI0LDI3MTI5LDE0NDk4NSwxMzk1NjIsMjcyMDUsMTQ1MTU1LDI3MjkzLDE1MzQ3LDI2NTQ1''@;'; put 'put ''LDI3MzM2LDE2ODM0OCwxNTM3MywyNzQyMSwxMzM0MTEsMjQ3OTgsMjc0NDUsMjc1MDgsMTQxMjYxLDI4MzQxLDE0NjEzOSwxMzIwMjEsMTM3NTYwLDE0MTQ0LDIxNTM3LDE0NjI2NiwyNzYxNywxNDcxOTYsMjc2MTIsMjc3MDMsMTQwNDI3LDE0OTc0NSwxNTg1NDUsMjc3MzgsMzMzMTgsMjc3''@;'; put 'put ''NjksMTQ2ODc2LDE3NjA1LDE0Njg3NywxNDc4NzYsMTQ5NzcyLDE0OTc2MCwxNDY2MzMsMTQwNTMsMTU1OTUsMTM0NDUwLDM5ODExLDE0Mzg2NSwxNDA0MzMsMzI2NTUsMjY2NzksMTU5MDEzLDE1OTEzNywxNTkyMTEsMjgwNTQsMjc5OTYsMjgyODQsMjg0MjAsMTQ5ODg3LDE0NzU4OSwxNTkz''@;'; put 'put ''NDYsMzQwOTksMTU5NjA0LDIwOTM1LDI3ODA0LDI4MTg5LDMzODM4LDE2NjY4OSwyODIwNywxNDY5OTEsMjk3NzksMTQ3MzMwLDMxMTgwLDI4MjM5LDIzMTg1LDE0MzQzNSwyODY2NCwxNDA5MywyODU3MywxNDY5OTIsMjg0MTAsMTM2MzQzLDE0NzUxNywxNzc0OSwzNzg3MiwyODQ4NCwyODUw''@;'; put 'put ''OCwxNTY5NCwyODUzMiwxNjgzMDQsMTU2NzUsMjg1NzUsMTQ3NzgwLDI4NjI3LDE0NzYwMSwxNDc3OTcsMTQ3NTEzLDE0NzQ0MCwxNDczODAsMTQ3Nzc1LDIwOTU5LDE0Nzc5OCwxNDc3OTksMTQ3Nzc2LDE1NjEyNSwyODc0NywyODc5OCwyODgzOSwyODgwMSwyODg3NiwyODg4NSwyODg4Niwy''@;'; put 'put ''ODg5NSwxNjY0NCwxNTg0OCwyOTEwOCwyOTA3OCwxNDgwODcsMjg5NzEsMjg5OTcsMjMxNzYsMjkwMDIsMjkwMzgsMjM3MDgsMTQ4MzI1LDI5MDA3LDM3NzMwLDE0ODE2MSwyODk3MiwxNDg1NzAsMTUwMDU1LDE1MDA1MCwyOTExNCwxNjY4ODgsMjg4NjEsMjkxOTgsMzc5NTQsMjkyMDUsMjI4''@;'; put 'put ''MDEsMzc5NTUsMjkyMjAsMzc2OTcsMTUzMDkzLDI5MjMwLDI5MjQ4LDE0OTg3NiwyNjgxMywyOTI2OSwyOTI3MSwxNTk1NywxNDM0MjgsMjY2MzcsMjg0NzcsMjkzMTQsMjk0ODIsMjk0ODMsMTQ5NTM5LDE2NTkzMSwxODY2OSwxNjU4OTIsMjk0ODAsMjk0ODYsMjk2NDcsMjk2MTAsMTM0MjAy''@;'; put 'put ''LDE1ODI1NCwyOTY0MSwyOTc2OSwxNDc5MzgsMTM2OTM1LDE1MDA1MiwyNjE0NywxNDAyMSwxNDk5NDMsMTQ5OTAxLDE1MDAxMSwyOTY4NywyOTcxNywyNjg4MywxNTAwNTQsMjk3NTMsMTMyNTQ3LDE2MDg3LDI5Nzg4LDE0MTQ4NSwyOTc5MiwxNjc2MDIsMjk3NjcsMjk2NjgsMjk4MTQsMzM3''@;'; put 'put ''MjEsMjk4MDQsMTQxMjgsMjk4MTIsMzc4NzMsMjcxODAsMjk4MjYsMTg3NzEsMTUwMTU2LDE0NzgwNywxNTAxMzcsMTY2Nzk5LDIzMzY2LDE2NjkxNSwxMzczNzQsMjk4OTYsMTM3NjA4LDI5OTY2LDI5OTI5LDI5OTgyLDE2NzY0MSwxMzc4MDMsMjM1MTEsMTY3NTk2LDM3NzY1LDMwMDI5LDMw''@;'; put 'put ''MDI2LDMwMDU1LDMwMDYyLDE1MTQyNiwxNjEzMiwxNTA4MDMsMzAwOTQsMjk3ODksMzAxMTAsMzAxMzIsMzAyMTAsMzAyNTIsMzAyODksMzAyODcsMzAzMTksMzAzMjYsMTU2NjYxLDMwMzUyLDMzMjYzLDE0MzI4LDE1Nzk2OSwxNTc5NjYsMzAzNjksMzAzNzMsMzAzOTEsMzA0MTIsMTU5NjQ3''@;'; put 'put ''LDMzODkwLDE1MTcwOSwxNTE5MzMsMTM4NzgwLDMwNDk0LDMwNTAyLDMwNTI4LDI1Nzc1LDE1MjA5NiwzMDU1MiwxNDQwNDQsMzA2MzksMTY2MjQ0LDE2NjI0OCwxMzY4OTcsMzA3MDgsMzA3MjksMTM2MDU0LDE1MDAzNCwyNjgyNiwzMDg5NSwzMDkxOSwzMDkzMSwzODU2NSwzMTAyMiwxNTMw''@;'; put 'put ''NTYsMzA5MzUsMzEwMjgsMzA4OTcsMTYxMjkyLDM2NzkyLDM0OTQ4LDE2NjY5OSwxNTU3NzksMTQwODI4LDMxMTEwLDM1MDcyLDI2ODgyLDMxMTA0LDE1MzY4NywzMTEzMywxNjI2MTcsMzEwMzYsMzExNDUsMjgyMDIsMTYwMDM4LDE2MDQwLDMxMTc0LDE2ODIwNSwzMTE4OF0sImV1Yy1rciI6''@;'; put 'put ''WzQ0MDM0LDQ0MDM1LDQ0MDM3LDQ0MDM4LDQ0MDQzLDQ0MDQ0LDQ0MDQ1LDQ0MDQ2LDQ0MDQ3LDQ0MDU2LDQ0MDYyLDQ0MDYzLDQ0MDY1LDQ0MDY2LDQ0MDY3LDQ0MDY5LDQ0MDcwLDQ0MDcxLDQ0MDcyLDQ0MDczLDQ0MDc0LDQ0MDc1LDQ0MDc4LDQ0MDgyLDQ0MDgzLDQ0MDg0LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MDg1LDQ0MDg2LDQ0MDg3LDQ0MDkwLDQ0MDkxLDQ0MDkzLDQ0MDk0LDQ0MDk1LDQ0MDk3LDQ0MDk4LDQ0MDk5LDQ0MTAwLDQ0MTAxLDQ0MTAyLDQ0MTAzLDQ0MTA0LDQ0MTA1LDQ0MTA2LDQ0MTA4LDQ0MTEwLDQ0MTExLDQ0MTEyLDQ0MTEzLDQ0MTE0''@;'; put 'put ''LDQ0MTE1LDQ0MTE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MTE4LDQ0MTE5LDQ0MTIxLDQ0MTIyLDQ0MTIzLDQ0MTI1LDQ0MTI2LDQ0MTI3LDQ0MTI4LDQ0MTI5LDQ0MTMwLDQ0MTMxLDQ0MTMyLDQ0MTMzLDQ0MTM0LDQ0MTM1LDQ0MTM2LDQ0MTM3LDQ0MTM4LDQ0MTM5LDQ0''@;'; put 'put ''MTQwLDQ0MTQxLDQ0MTQyLDQ0MTQzLDQ0MTQ2LDQ0MTQ3LDQ0MTQ5LDQ0MTUwLDQ0MTUzLDQ0MTU1LDQ0MTU2LDQ0MTU3LDQ0MTU4LDQ0MTU5LDQ0MTYyLDQ0MTY3LDQ0MTY4LDQ0MTczLDQ0MTc0LDQ0MTc1LDQ0MTc3LDQ0MTc4LDQ0MTc5LDQ0MTgxLDQ0MTgyLDQ0MTgzLDQ0MTg0LDQ0MTg1''@;'; put 'put ''LDQ0MTg2LDQ0MTg3LDQ0MTkwLDQ0MTk0LDQ0MTk1LDQ0MTk2LDQ0MTk3LDQ0MTk4LDQ0MTk5LDQ0MjAzLDQ0MjA1LDQ0MjA2LDQ0MjA5LDQ0MjEwLDQ0MjExLDQ0MjEyLDQ0MjEzLDQ0MjE0LDQ0MjE1LDQ0MjE4LDQ0MjIyLDQ0MjIzLDQ0MjI0LDQ0MjI2LDQ0MjI3LDQ0MjI5LDQ0MjMwLDQ0''@;'; put 'put ''MjMxLDQ0MjMzLDQ0MjM0LDQ0MjM1LDQ0MjM3LDQ0MjM4LDQ0MjM5LDQ0MjQwLDQ0MjQxLDQ0MjQyLDQ0MjQzLDQ0MjQ0LDQ0MjQ2LDQ0MjQ4LDQ0MjQ5LDQ0MjUwLDQ0MjUxLDQ0MjUyLDQ0MjUzLDQ0MjU0LDQ0MjU1LDQ0MjU4LDQ0MjU5LDQ0MjYxLDQ0MjYyLDQ0MjY1LDQ0MjY3LDQ0MjY5''@;'; put 'put ''LDQ0MjcwLDQ0Mjc0LDQ0Mjc2LDQ0Mjc5LDQ0MjgwLDQ0MjgxLDQ0MjgyLDQ0MjgzLDQ0Mjg2LDQ0Mjg3LDQ0Mjg5LDQ0MjkwLDQ0MjkxLDQ0MjkzLDQ0Mjk1LDQ0Mjk2LDQ0Mjk3LDQ0Mjk4LDQ0Mjk5LDQ0MzAyLDQ0MzA0LDQ0MzA2LDQ0MzA3LDQ0MzA4LDQ0MzA5LDQ0MzEwLDQ0MzExLDQ0''@;'; put 'put ''MzEzLDQ0MzE0LDQ0MzE1LDQ0MzE3LDQ0MzE4LDQ0MzE5LDQ0MzIxLDQ0MzIyLDQ0MzIzLDQ0MzI0LDQ0MzI1LDQ0MzI2LDQ0MzI3LDQ0MzI4LDQ0MzMwLDQ0MzMxLDQ0MzM0LDQ0MzM1LDQ0MzM2LDQ0MzM3LDQ0MzM4LDQ0MzM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0MzQy''@;'; put 'put ''LDQ0MzQzLDQ0MzQ1LDQ0MzQ2LDQ0MzQ3LDQ0MzQ5LDQ0MzUwLDQ0MzUxLDQ0MzUyLDQ0MzUzLDQ0MzU0LDQ0MzU1LDQ0MzU4LDQ0MzYwLDQ0MzYyLDQ0MzYzLDQ0MzY0LDQ0MzY1LDQ0MzY2LDQ0MzY3LDQ0MzY5LDQ0MzcwLDQ0MzcxLDQ0MzczLDQ0Mzc0LDQ0Mzc1LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDQ0Mzc3LDQ0Mzc4LDQ0Mzc5LDQ0MzgwLDQ0MzgxLDQ0MzgyLDQ0MzgzLDQ0Mzg0LDQ0Mzg2LDQ0Mzg4LDQ0Mzg5LDQ0MzkwLDQ0MzkxLDQ0MzkyLDQ0MzkzLDQ0Mzk0LDQ0Mzk1LDQ0Mzk4LDQ0Mzk5LDQ0NDAxLDQ0NDAyLDQ0NDA3LDQ0NDA4LDQ0NDA5LDQ0NDEw''@;'; put 'put ''LDQ0NDE0LDQ0NDE2LDQ0NDE5LDQ0NDIwLDQ0NDIxLDQ0NDIyLDQ0NDIzLDQ0NDI2LDQ0NDI3LDQ0NDI5LDQ0NDMwLDQ0NDMxLDQ0NDMzLDQ0NDM0LDQ0NDM1LDQ0NDM2LDQ0NDM3LDQ0NDM4LDQ0NDM5LDQ0NDQwLDQ0NDQxLDQ0NDQyLDQ0NDQzLDQ0NDQ2LDQ0NDQ3LDQ0NDQ4LDQ0NDQ5LDQ0''@;'; put 'put ''NDUwLDQ0NDUxLDQ0NDUzLDQ0NDU0LDQ0NDU1LDQ0NDU2LDQ0NDU3LDQ0NDU4LDQ0NDU5LDQ0NDYwLDQ0NDYxLDQ0NDYyLDQ0NDYzLDQ0NDY0LDQ0NDY1LDQ0NDY2LDQ0NDY3LDQ0NDY4LDQ0NDY5LDQ0NDcwLDQ0NDcyLDQ0NDczLDQ0NDc0LDQ0NDc1LDQ0NDc2LDQ0NDc3LDQ0NDc4LDQ0NDc5''@;'; put 'put ''LDQ0NDgyLDQ0NDgzLDQ0NDg1LDQ0NDg2LDQ0NDg3LDQ0NDg5LDQ0NDkwLDQ0NDkxLDQ0NDkyLDQ0NDkzLDQ0NDk0LDQ0NDk1LDQ0NDk4LDQ0NTAwLDQ0NTAxLDQ0NTAyLDQ0NTAzLDQ0NTA0LDQ0NTA1LDQ0NTA2LDQ0NTA3LDQ0NTA5LDQ0NTEwLDQ0NTExLDQ0NTEzLDQ0NTE0LDQ0NTE1LDQ0''@;'; put 'put ''NTE3LDQ0NTE4LDQ0NTE5LDQ0NTIwLDQ0NTIxLDQ0NTIyLDQ0NTIzLDQ0NTI0LDQ0NTI1LDQ0NTI2LDQ0NTI3LDQ0NTI4LDQ0NTI5LDQ0NTMwLDQ0NTMxLDQ0NTMyLDQ0NTMzLDQ0NTM0LDQ0NTM1LDQ0NTM4LDQ0NTM5LDQ0NTQxLDQ0NTQyLDQ0NTQ2LDQ0NTQ3LDQ0NTQ4LDQ0NTQ5LDQ0NTUw''@;'; put 'put ''LDQ0NTUxLDQ0NTU0LDQ0NTU2LDQ0NTU4LDQ0NTU5LDQ0NTYwLDQ0NTYxLDQ0NTYyLDQ0NTYzLDQ0NTY1LDQ0NTY2LDQ0NTY3LDQ0NTY4LDQ0NTY5LDQ0NTcwLDQ0NTcxLDQ0NTcyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NTczLDQ0NTc0LDQ0NTc1LDQ0NTc2LDQ0NTc3LDQ0''@;'; put 'put ''NTc4LDQ0NTc5LDQ0NTgwLDQ0NTgxLDQ0NTgyLDQ0NTgzLDQ0NTg0LDQ0NTg1LDQ0NTg2LDQ0NTg3LDQ0NTg4LDQ0NTg5LDQ0NTkwLDQ0NTkxLDQ0NTk0LDQ0NTk1LDQ0NTk3LDQ0NTk4LDQ0NjAxLDQ0NjAzLDQ0NjA0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0NjA1LDQ0NjA2''@;'; put 'put ''LDQ0NjA3LDQ0NjEwLDQ0NjEyLDQ0NjE1LDQ0NjE2LDQ0NjE3LDQ0NjE5LDQ0NjIzLDQ0NjI1LDQ0NjI2LDQ0NjI3LDQ0NjI5LDQ0NjMxLDQ0NjMyLDQ0NjMzLDQ0NjM0LDQ0NjM1LDQ0NjM4LDQ0NjQyLDQ0NjQzLDQ0NjQ0LDQ0NjQ2LDQ0NjQ3LDQ0NjUwLDQ0NjUxLDQ0NjUzLDQ0NjU0LDQ0''@;'; put 'put ''NjU1LDQ0NjU3LDQ0NjU4LDQ0NjU5LDQ0NjYwLDQ0NjYxLDQ0NjYyLDQ0NjYzLDQ0NjY2LDQ0NjcwLDQ0NjcxLDQ0NjcyLDQ0NjczLDQ0Njc0LDQ0Njc1LDQ0Njc4LDQ0Njc5LDQ0NjgwLDQ0NjgxLDQ0NjgyLDQ0NjgzLDQ0Njg1LDQ0Njg2LDQ0Njg3LDQ0Njg4LDQ0Njg5LDQ0NjkwLDQ0Njkx''@;'; put 'put ''LDQ0NjkyLDQ0NjkzLDQ0Njk0LDQ0Njk1LDQ0Njk2LDQ0Njk3LDQ0Njk4LDQ0Njk5LDQ0NzAwLDQ0NzAxLDQ0NzAyLDQ0NzAzLDQ0NzA0LDQ0NzA1LDQ0NzA2LDQ0NzA3LDQ0NzA4LDQ0NzA5LDQ0NzEwLDQ0NzExLDQ0NzEyLDQ0NzEzLDQ0NzE0LDQ0NzE1LDQ0NzE2LDQ0NzE3LDQ0NzE4LDQ0''@;'; put 'put ''NzE5LDQ0NzIwLDQ0NzIxLDQ0NzIyLDQ0NzIzLDQ0NzI0LDQ0NzI1LDQ0NzI2LDQ0NzI3LDQ0NzI4LDQ0NzI5LDQ0NzMwLDQ0NzMxLDQ0NzM1LDQ0NzM3LDQ0NzM4LDQ0NzM5LDQ0NzQxLDQ0NzQyLDQ0NzQzLDQ0NzQ0LDQ0NzQ1LDQ0NzQ2LDQ0NzQ3LDQ0NzUwLDQ0NzU0LDQ0NzU1LDQ0NzU2''@;'; put 'put ''LDQ0NzU3LDQ0NzU4LDQ0NzU5LDQ0NzYyLDQ0NzYzLDQ0NzY1LDQ0NzY2LDQ0NzY3LDQ0NzY4LDQ0NzY5LDQ0NzcwLDQ0NzcxLDQ0NzcyLDQ0NzczLDQ0Nzc0LDQ0Nzc1LDQ0Nzc3LDQ0Nzc4LDQ0NzgwLDQ0NzgyLDQ0NzgzLDQ0Nzg0LDQ0Nzg1LDQ0Nzg2LDQ0Nzg3LDQ0Nzg5LDQ0NzkwLDQ0''@;'; put 'put ''NzkxLDQ0NzkzLDQ0Nzk0LDQ0Nzk1LDQ0Nzk3LDQ0Nzk4LDQ0Nzk5LDQ0ODAwLDQ0ODAxLDQ0ODAyLDQ0ODAzLDQ0ODA0LDQ0ODA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODA2LDQ0ODA5LDQ0ODEwLDQ0ODExLDQ0ODEyLDQ0ODE0LDQ0ODE1LDQ0ODE3LDQ0ODE4LDQ0ODE5''@;'; put 'put ''LDQ0ODIwLDQ0ODIxLDQ0ODIyLDQ0ODIzLDQ0ODI0LDQ0ODI1LDQ0ODI2LDQ0ODI3LDQ0ODI4LDQ0ODI5LDQ0ODMwLDQ0ODMxLDQ0ODMyLDQ0ODMzLDQ0ODM0LDQ0ODM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ0ODM2LDQ0ODM3LDQ0ODM4LDQ0ODM5LDQ0ODQwLDQ0ODQxLDQ0''@;'; put 'put ''ODQyLDQ0ODQzLDQ0ODQ2LDQ0ODQ3LDQ0ODQ5LDQ0ODUxLDQ0ODUzLDQ0ODU0LDQ0ODU1LDQ0ODU2LDQ0ODU3LDQ0ODU4LDQ0ODU5LDQ0ODYyLDQ0ODY0LDQ0ODY4LDQ0ODY5LDQ0ODcwLDQ0ODcxLDQ0ODc0LDQ0ODc1LDQ0ODc2LDQ0ODc3LDQ0ODc4LDQ0ODc5LDQ0ODgxLDQ0ODgyLDQ0ODgz''@;'; put 'put ''LDQ0ODg0LDQ0ODg1LDQ0ODg2LDQ0ODg3LDQ0ODg4LDQ0ODg5LDQ0ODkwLDQ0ODkxLDQ0ODk0LDQ0ODk1LDQ0ODk2LDQ0ODk3LDQ0ODk4LDQ0ODk5LDQ0OTAyLDQ0OTAzLDQ0OTA0LDQ0OTA1LDQ0OTA2LDQ0OTA3LDQ0OTA4LDQ0OTA5LDQ0OTEwLDQ0OTExLDQ0OTEyLDQ0OTEzLDQ0OTE0LDQ0''@;'; put 'put ''OTE1LDQ0OTE2LDQ0OTE3LDQ0OTE4LDQ0OTE5LDQ0OTIwLDQ0OTIyLDQ0OTIzLDQ0OTI0LDQ0OTI1LDQ0OTI2LDQ0OTI3LDQ0OTI5LDQ0OTMwLDQ0OTMxLDQ0OTMzLDQ0OTM0LDQ0OTM1LDQ0OTM3LDQ0OTM4LDQ0OTM5LDQ0OTQwLDQ0OTQxLDQ0OTQyLDQ0OTQzLDQ0OTQ2LDQ0OTQ3LDQ0OTQ4''@;'; put 'put ''LDQ0OTUwLDQ0OTUxLDQ0OTUyLDQ0OTUzLDQ0OTU0LDQ0OTU1LDQ0OTU3LDQ0OTU4LDQ0OTU5LDQ0OTYwLDQ0OTYxLDQ0OTYyLDQ0OTYzLDQ0OTY0LDQ0OTY1LDQ0OTY2LDQ0OTY3LDQ0OTY4LDQ0OTY5LDQ0OTcwLDQ0OTcxLDQ0OTcyLDQ0OTczLDQ0OTc0LDQ0OTc1LDQ0OTc2LDQ0OTc3LDQ0''@;'; put 'put ''OTc4LDQ0OTc5LDQ0OTgwLDQ0OTgxLDQ0OTgyLDQ0OTgzLDQ0OTg2LDQ0OTg3LDQ0OTg5LDQ0OTkwLDQ0OTkxLDQ0OTkzLDQ0OTk0LDQ0OTk1LDQ0OTk2LDQ0OTk3LDQ0OTk4LDQ1MDAyLDQ1MDA0LDQ1MDA3LDQ1MDA4LDQ1MDA5LDQ1MDEwLDQ1MDExLDQ1MDEzLDQ1MDE0LDQ1MDE1LDQ1MDE2''@;'; put 'put ''LDQ1MDE3LDQ1MDE4LDQ1MDE5LDQ1MDIxLDQ1MDIyLDQ1MDIzLDQ1MDI0LDQ1MDI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDI2LDQ1MDI3LDQ1MDI4LDQ1MDI5LDQ1MDMwLDQ1MDMxLDQ1MDM0LDQ1MDM1LDQ1MDM2LDQ1MDM3LDQ1MDM4LDQ1MDM5LDQ1MDQyLDQ1MDQzLDQ1''@;'; put 'put ''MDQ1LDQ1MDQ2LDQ1MDQ3LDQ1MDQ5LDQ1MDUwLDQ1MDUxLDQ1MDUyLDQ1MDUzLDQ1MDU0LDQ1MDU1LDQ1MDU4LDQ1MDU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MDYxLDQ1MDYyLDQ1MDYzLDQ1MDY0LDQ1MDY1LDQ1MDY2LDQ1MDY3LDQ1MDY5LDQ1MDcwLDQ1MDcxLDQ1MDcz''@;'; put 'put ''LDQ1MDc0LDQ1MDc1LDQ1MDc3LDQ1MDc4LDQ1MDc5LDQ1MDgwLDQ1MDgxLDQ1MDgyLDQ1MDgzLDQ1MDg2LDQ1MDg3LDQ1MDg4LDQ1MDg5LDQ1MDkwLDQ1MDkxLDQ1MDkyLDQ1MDkzLDQ1MDk0LDQ1MDk1LDQ1MDk3LDQ1MDk4LDQ1MDk5LDQ1MTAwLDQ1MTAxLDQ1MTAyLDQ1MTAzLDQ1MTA0LDQ1''@;'; put 'put ''MTA1LDQ1MTA2LDQ1MTA3LDQ1MTA4LDQ1MTA5LDQ1MTEwLDQ1MTExLDQ1MTEyLDQ1MTEzLDQ1MTE0LDQ1MTE1LDQ1MTE2LDQ1MTE3LDQ1MTE4LDQ1MTE5LDQ1MTIwLDQ1MTIxLDQ1MTIyLDQ1MTIzLDQ1MTI2LDQ1MTI3LDQ1MTI5LDQ1MTMxLDQ1MTMzLDQ1MTM1LDQ1MTM2LDQ1MTM3LDQ1MTM4''@;'; put 'put ''LDQ1MTQyLDQ1MTQ0LDQ1MTQ2LDQ1MTQ3LDQ1MTQ4LDQ1MTUwLDQ1MTUxLDQ1MTUyLDQ1MTUzLDQ1MTU0LDQ1MTU1LDQ1MTU2LDQ1MTU3LDQ1MTU4LDQ1MTU5LDQ1MTYwLDQ1MTYxLDQ1MTYyLDQ1MTYzLDQ1MTY0LDQ1MTY1LDQ1MTY2LDQ1MTY3LDQ1MTY4LDQ1MTY5LDQ1MTcwLDQ1MTcxLDQ1''@;'; put 'put ''MTcyLDQ1MTczLDQ1MTc0LDQ1MTc1LDQ1MTc2LDQ1MTc3LDQ1MTc4LDQ1MTc5LDQ1MTgyLDQ1MTgzLDQ1MTg1LDQ1MTg2LDQ1MTg3LDQ1MTg5LDQ1MTkwLDQ1MTkxLDQ1MTkyLDQ1MTkzLDQ1MTk0LDQ1MTk1LDQ1MTk4LDQ1MjAwLDQ1MjAyLDQ1MjAzLDQ1MjA0LDQ1MjA1LDQ1MjA2LDQ1MjA3''@;'; put 'put ''LDQ1MjExLDQ1MjEzLDQ1MjE0LDQ1MjE5LDQ1MjIwLDQ1MjIxLDQ1MjIyLDQ1MjIzLDQ1MjI2LDQ1MjMyLDQ1MjM0LDQ1MjM4LDQ1MjM5LDQ1MjQxLDQ1MjQyLDQ1MjQzLDQ1MjQ1LDQ1MjQ2LDQ1MjQ3LDQ1MjQ4LDQ1MjQ5LDQ1MjUwLDQ1MjUxLDQ1MjU0LDQ1MjU4LDQ1MjU5LDQ1MjYwLDQ1''@;'; put 'put ''MjYxLDQ1MjYyLDQ1MjYzLDQ1MjY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1MjY3LDQ1MjY5LDQ1MjcwLDQ1MjcxLDQ1MjczLDQ1Mjc0LDQ1Mjc1LDQ1Mjc2LDQ1Mjc3LDQ1Mjc4LDQ1Mjc5LDQ1MjgxLDQ1MjgyLDQ1MjgzLDQ1Mjg0LDQ1Mjg2LDQ1Mjg3LDQ1Mjg4LDQ1Mjg5''@;'; put 'put ''LDQ1MjkwLDQ1MjkxLDQ1MjkyLDQ1MjkzLDQ1Mjk0LDQ1Mjk1LDQ1Mjk2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1Mjk3LDQ1Mjk4LDQ1Mjk5LDQ1MzAwLDQ1MzAxLDQ1MzAyLDQ1MzAzLDQ1MzA0LDQ1MzA1LDQ1MzA2LDQ1MzA3LDQ1MzA4LDQ1MzA5LDQ1MzEwLDQ1MzExLDQ1''@;'; put 'put ''MzEyLDQ1MzEzLDQ1MzE0LDQ1MzE1LDQ1MzE2LDQ1MzE3LDQ1MzE4LDQ1MzE5LDQ1MzIyLDQ1MzI1LDQ1MzI2LDQ1MzI3LDQ1MzI5LDQ1MzMyLDQ1MzMzLDQ1MzM0LDQ1MzM1LDQ1MzM4LDQ1MzQyLDQ1MzQzLDQ1MzQ0LDQ1MzQ1LDQ1MzQ2LDQ1MzUwLDQ1MzUxLDQ1MzUzLDQ1MzU0LDQ1MzU1''@;'; put 'put ''LDQ1MzU3LDQ1MzU4LDQ1MzU5LDQ1MzYwLDQ1MzYxLDQ1MzYyLDQ1MzYzLDQ1MzY2LDQ1MzcwLDQ1MzcxLDQ1MzcyLDQ1MzczLDQ1Mzc0LDQ1Mzc1LDQ1Mzc4LDQ1Mzc5LDQ1MzgxLDQ1MzgyLDQ1MzgzLDQ1Mzg1LDQ1Mzg2LDQ1Mzg3LDQ1Mzg4LDQ1Mzg5LDQ1MzkwLDQ1MzkxLDQ1Mzk0LDQ1''@;'; put 'put ''Mzk1LDQ1Mzk4LDQ1Mzk5LDQ1NDAxLDQ1NDAyLDQ1NDAzLDQ1NDA1LDQ1NDA2LDQ1NDA3LDQ1NDA5LDQ1NDEwLDQ1NDExLDQ1NDEyLDQ1NDEzLDQ1NDE0LDQ1NDE1LDQ1NDE2LDQ1NDE3LDQ1NDE4LDQ1NDE5LDQ1NDIwLDQ1NDIxLDQ1NDIyLDQ1NDIzLDQ1NDI0LDQ1NDI1LDQ1NDI2LDQ1NDI3''@;'; put 'put ''LDQ1NDI4LDQ1NDI5LDQ1NDMwLDQ1NDMxLDQ1NDM0LDQ1NDM1LDQ1NDM3LDQ1NDM4LDQ1NDM5LDQ1NDQxLDQ1NDQzLDQ1NDQ0LDQ1NDQ1LDQ1NDQ2LDQ1NDQ3LDQ1NDUwLDQ1NDUyLDQ1NDU0LDQ1NDU1LDQ1NDU2LDQ1NDU3LDQ1NDYxLDQ1NDYyLDQ1NDYzLDQ1NDY1LDQ1NDY2LDQ1NDY3LDQ1''@;'; put 'put ''NDY5LDQ1NDcwLDQ1NDcxLDQ1NDcyLDQ1NDczLDQ1NDc0LDQ1NDc1LDQ1NDc2LDQ1NDc3LDQ1NDc4LDQ1NDc5LDQ1NDgxLDQ1NDgyLDQ1NDgzLDQ1NDg0LDQ1NDg1LDQ1NDg2LDQ1NDg3LDQ1NDg4LDQ1NDg5LDQ1NDkwLDQ1NDkxLDQ1NDkyLDQ1NDkzLDQ1NDk0LDQ1NDk1LDQ1NDk2LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NDk3LDQ1NDk4LDQ1NDk5LDQ1NTAwLDQ1NTAxLDQ1NTAyLDQ1NTAzLDQ1NTA0LDQ1NTA1LDQ1NTA2LDQ1NTA3LDQ1NTA4LDQ1NTA5LDQ1NTEwLDQ1NTExLDQ1NTEyLDQ1NTEzLDQ1NTE0LDQ1NTE1LDQ1NTE3LDQ1NTE4LDQ1NTE5LDQ1NTIxLDQ1''@;'; put 'put ''NTIyLDQ1NTIzLDQ1NTI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1NTI2LDQ1NTI3LDQ1NTI4LDQ1NTI5LDQ1NTMwLDQ1NTMxLDQ1NTM0LDQ1NTM2LDQ1NTM3LDQ1NTM4LDQ1NTM5LDQ1NTQwLDQ1NTQxLDQ1NTQyLDQ1NTQzLDQ1NTQ2LDQ1NTQ3LDQ1NTQ5LDQ1NTUwLDQ1NTUx''@;'; put 'put ''LDQ1NTUzLDQ1NTU0LDQ1NTU1LDQ1NTU2LDQ1NTU3LDQ1NTU4LDQ1NTU5LDQ1NTYwLDQ1NTYyLDQ1NTY0LDQ1NTY2LDQ1NTY3LDQ1NTY4LDQ1NTY5LDQ1NTcwLDQ1NTcxLDQ1NTc0LDQ1NTc1LDQ1NTc3LDQ1NTc4LDQ1NTgxLDQ1NTgyLDQ1NTgzLDQ1NTg0LDQ1NTg1LDQ1NTg2LDQ1NTg3LDQ1''@;'; put 'put ''NTkwLDQ1NTkyLDQ1NTk0LDQ1NTk1LDQ1NTk2LDQ1NTk3LDQ1NTk4LDQ1NTk5LDQ1NjAxLDQ1NjAyLDQ1NjAzLDQ1NjA0LDQ1NjA1LDQ1NjA2LDQ1NjA3LDQ1NjA4LDQ1NjA5LDQ1NjEwLDQ1NjExLDQ1NjEyLDQ1NjEzLDQ1NjE0LDQ1NjE1LDQ1NjE2LDQ1NjE3LDQ1NjE4LDQ1NjE5LDQ1NjIx''@;'; put 'put ''LDQ1NjIyLDQ1NjIzLDQ1NjI0LDQ1NjI1LDQ1NjI2LDQ1NjI3LDQ1NjI5LDQ1NjMwLDQ1NjMxLDQ1NjMyLDQ1NjMzLDQ1NjM0LDQ1NjM1LDQ1NjM2LDQ1NjM3LDQ1NjM4LDQ1NjM5LDQ1NjQwLDQ1NjQxLDQ1NjQyLDQ1NjQzLDQ1NjQ0LDQ1NjQ1LDQ1NjQ2LDQ1NjQ3LDQ1NjQ4LDQ1NjQ5LDQ1''@;'; put 'put ''NjUwLDQ1NjUxLDQ1NjUyLDQ1NjUzLDQ1NjU0LDQ1NjU1LDQ1NjU3LDQ1NjU4LDQ1NjU5LDQ1NjYxLDQ1NjYyLDQ1NjYzLDQ1NjY1LDQ1NjY2LDQ1NjY3LDQ1NjY4LDQ1NjY5LDQ1NjcwLDQ1NjcxLDQ1Njc0LDQ1Njc1LDQ1Njc2LDQ1Njc3LDQ1Njc4LDQ1Njc5LDQ1NjgwLDQ1NjgxLDQ1Njgy''@;'; put 'put ''LDQ1NjgzLDQ1Njg2LDQ1Njg3LDQ1Njg4LDQ1Njg5LDQ1NjkwLDQ1NjkxLDQ1NjkzLDQ1Njk0LDQ1Njk1LDQ1Njk2LDQ1Njk3LDQ1Njk4LDQ1Njk5LDQ1NzAyLDQ1NzAzLDQ1NzA0LDQ1NzA2LDQ1NzA3LDQ1NzA4LDQ1NzA5LDQ1NzEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1''@;'; put 'put ''NzExLDQ1NzE0LDQ1NzE1LDQ1NzE3LDQ1NzE4LDQ1NzE5LDQ1NzIzLDQ1NzI0LDQ1NzI1LDQ1NzI2LDQ1NzI3LDQ1NzMwLDQ1NzMyLDQ1NzM1LDQ1NzM2LDQ1NzM3LDQ1NzM5LDQ1NzQxLDQ1NzQyLDQ1NzQzLDQ1NzQ1LDQ1NzQ2LDQ1NzQ3LDQ1NzQ5LDQ1NzUwLDQ1NzUxLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDQ1NzUyLDQ1NzUzLDQ1NzU0LDQ1NzU1LDQ1NzU2LDQ1NzU3LDQ1NzU4LDQ1NzU5LDQ1NzYwLDQ1NzYxLDQ1NzYyLDQ1NzYzLDQ1NzY0LDQ1NzY1LDQ1NzY2LDQ1NzY3LDQ1NzcwLDQ1NzcxLDQ1NzczLDQ1Nzc0LDQ1Nzc1LDQ1Nzc3LDQ1Nzc5LDQ1NzgwLDQ1''@;'; put 'put ''NzgxLDQ1NzgyLDQ1NzgzLDQ1Nzg2LDQ1Nzg4LDQ1NzkwLDQ1NzkxLDQ1NzkyLDQ1NzkzLDQ1Nzk1LDQ1Nzk5LDQ1ODAxLDQ1ODAyLDQ1ODA4LDQ1ODA5LDQ1ODEwLDQ1ODE0LDQ1ODIwLDQ1ODIxLDQ1ODIyLDQ1ODI2LDQ1ODI3LDQ1ODI5LDQ1ODMwLDQ1ODMxLDQ1ODMzLDQ1ODM0LDQ1ODM1''@;'; put 'put ''LDQ1ODM2LDQ1ODM3LDQ1ODM4LDQ1ODM5LDQ1ODQyLDQ1ODQ2LDQ1ODQ3LDQ1ODQ4LDQ1ODQ5LDQ1ODUwLDQ1ODUxLDQ1ODUzLDQ1ODU0LDQ1ODU1LDQ1ODU2LDQ1ODU3LDQ1ODU4LDQ1ODU5LDQ1ODYwLDQ1ODYxLDQ1ODYyLDQ1ODYzLDQ1ODY0LDQ1ODY1LDQ1ODY2LDQ1ODY3LDQ1ODY4LDQ1''@;'; put 'put ''ODY5LDQ1ODcwLDQ1ODcxLDQ1ODcyLDQ1ODczLDQ1ODc0LDQ1ODc1LDQ1ODc2LDQ1ODc3LDQ1ODc4LDQ1ODc5LDQ1ODgwLDQ1ODgxLDQ1ODgyLDQ1ODgzLDQ1ODg0LDQ1ODg1LDQ1ODg2LDQ1ODg3LDQ1ODg4LDQ1ODg5LDQ1ODkwLDQ1ODkxLDQ1ODkyLDQ1ODkzLDQ1ODk0LDQ1ODk1LDQ1ODk2''@;'; put 'put ''LDQ1ODk3LDQ1ODk4LDQ1ODk5LDQ1OTAwLDQ1OTAxLDQ1OTAyLDQ1OTAzLDQ1OTA0LDQ1OTA1LDQ1OTA2LDQ1OTA3LDQ1OTExLDQ1OTEzLDQ1OTE0LDQ1OTE3LDQ1OTIwLDQ1OTIxLDQ1OTIyLDQ1OTIzLDQ1OTI2LDQ1OTI4LDQ1OTMwLDQ1OTMyLDQ1OTMzLDQ1OTM1LDQ1OTM4LDQ1OTM5LDQ1''@;'; put 'put ''OTQxLDQ1OTQyLDQ1OTQzLDQ1OTQ1LDQ1OTQ2LDQ1OTQ3LDQ1OTQ4LDQ1OTQ5LDQ1OTUwLDQ1OTUxLDQ1OTU0LDQ1OTU4LDQ1OTU5LDQ1OTYwLDQ1OTYxLDQ1OTYyLDQ1OTYzLDQ1OTY1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTY2LDQ1OTY3LDQ1OTY5LDQ1OTcwLDQ1OTcx''@;'; put 'put ''LDQ1OTczLDQ1OTc0LDQ1OTc1LDQ1OTc2LDQ1OTc3LDQ1OTc4LDQ1OTc5LDQ1OTgwLDQ1OTgxLDQ1OTgyLDQ1OTgzLDQ1OTg2LDQ1OTg3LDQ1OTg4LDQ1OTg5LDQ1OTkwLDQ1OTkxLDQ1OTkzLDQ1OTk0LDQ1OTk1LDQ1OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ1OTk4LDQ1''@;'; put 'put ''OTk5LDQ2ZTMsNDYwMDEsNDYwMDIsNDYwMDMsNDYwMDQsNDYwMDUsNDYwMDYsNDYwMDcsNDYwMDgsNDYwMDksNDYwMTAsNDYwMTEsNDYwMTIsNDYwMTMsNDYwMTQsNDYwMTUsNDYwMTYsNDYwMTcsNDYwMTgsNDYwMTksNDYwMjIsNDYwMjMsNDYwMjUsNDYwMjYsNDYwMjksNDYwMzEsNDYwMzMs''@;'; put 'put ''NDYwMzQsNDYwMzUsNDYwMzgsNDYwNDAsNDYwNDIsNDYwNDQsNDYwNDYsNDYwNDcsNDYwNDksNDYwNTAsNDYwNTEsNDYwNTMsNDYwNTQsNDYwNTUsNDYwNTcsNDYwNTgsNDYwNTksNDYwNjAsNDYwNjEsNDYwNjIsNDYwNjMsNDYwNjQsNDYwNjUsNDYwNjYsNDYwNjcsNDYwNjgsNDYwNjksNDYw''@;'; put 'put ''NzAsNDYwNzEsNDYwNzIsNDYwNzMsNDYwNzQsNDYwNzUsNDYwNzcsNDYwNzgsNDYwNzksNDYwODAsNDYwODEsNDYwODIsNDYwODMsNDYwODQsNDYwODUsNDYwODYsNDYwODcsNDYwODgsNDYwODksNDYwOTAsNDYwOTEsNDYwOTIsNDYwOTMsNDYwOTQsNDYwOTUsNDYwOTcsNDYwOTgsNDYwOTks''@;'; put 'put ''NDYxMDAsNDYxMDEsNDYxMDIsNDYxMDMsNDYxMDUsNDYxMDYsNDYxMDcsNDYxMDksNDYxMTAsNDYxMTEsNDYxMTMsNDYxMTQsNDYxMTUsNDYxMTYsNDYxMTcsNDYxMTgsNDYxMTksNDYxMjIsNDYxMjQsNDYxMjUsNDYxMjYsNDYxMjcsNDYxMjgsNDYxMjksNDYxMzAsNDYxMzEsNDYxMzMsNDYx''@;'; put 'put ''MzQsNDYxMzUsNDYxMzYsNDYxMzcsNDYxMzgsNDYxMzksNDYxNDAsNDYxNDEsNDYxNDIsNDYxNDMsNDYxNDQsNDYxNDUsNDYxNDYsNDYxNDcsNDYxNDgsNDYxNDksNDYxNTAsNDYxNTEsNDYxNTIsNDYxNTMsNDYxNTQsNDYxNTUsNDYxNTYsNDYxNTcsNDYxNTgsNDYxNTksNDYxNjIsNDYxNjMs''@;'; put 'put ''NDYxNjUsNDYxNjYsNDYxNjcsNDYxNjksNDYxNzAsNDYxNzEsNDYxNzIsNDYxNzMsNDYxNzQsNDYxNzUsNDYxNzgsNDYxODAsNDYxODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYxODMsNDYxODQsNDYxODUsNDYxODYsNDYxODcsNDYxODksNDYxOTAsNDYxOTEsNDYxOTIsNDYx''@;'; put 'put ''OTMsNDYxOTQsNDYxOTUsNDYxOTYsNDYxOTcsNDYxOTgsNDYxOTksNDYyMDAsNDYyMDEsNDYyMDIsNDYyMDMsNDYyMDQsNDYyMDUsNDYyMDYsNDYyMDcsNDYyMDksNDYyMTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDYyMTEsNDYyMTIsNDYyMTMsNDYyMTQsNDYyMTUsNDYyMTcs''@;'; put 'put ''NDYyMTgsNDYyMTksNDYyMjAsNDYyMjEsNDYyMjIsNDYyMjMsNDYyMjQsNDYyMjUsNDYyMjYsNDYyMjcsNDYyMjgsNDYyMjksNDYyMzAsNDYyMzEsNDYyMzIsNDYyMzMsNDYyMzQsNDYyMzUsNDYyMzYsNDYyMzgsNDYyMzksNDYyNDAsNDYyNDEsNDYyNDIsNDYyNDMsNDYyNDUsNDYyNDYsNDYy''@;'; put 'put ''NDcsNDYyNDksNDYyNTAsNDYyNTEsNDYyNTMsNDYyNTQsNDYyNTUsNDYyNTYsNDYyNTcsNDYyNTgsNDYyNTksNDYyNjAsNDYyNjIsNDYyNjQsNDYyNjYsNDYyNjcsNDYyNjgsNDYyNjksNDYyNzAsNDYyNzEsNDYyNzMsNDYyNzQsNDYyNzUsNDYyNzcsNDYyNzgsNDYyNzksNDYyODEsNDYyODIs''@;'; put 'put ''NDYyODMsNDYyODQsNDYyODUsNDYyODYsNDYyODcsNDYyODksNDYyOTAsNDYyOTEsNDYyOTIsNDYyOTQsNDYyOTUsNDYyOTYsNDYyOTcsNDYyOTgsNDYyOTksNDYzMDIsNDYzMDMsNDYzMDUsNDYzMDYsNDYzMDksNDYzMTEsNDYzMTIsNDYzMTMsNDYzMTQsNDYzMTUsNDYzMTgsNDYzMjAsNDYz''@;'; put 'put ''MjIsNDYzMjMsNDYzMjQsNDYzMjUsNDYzMjYsNDYzMjcsNDYzMjksNDYzMzAsNDYzMzEsNDYzMzIsNDYzMzMsNDYzMzQsNDYzMzUsNDYzMzYsNDYzMzcsNDYzMzgsNDYzMzksNDYzNDAsNDYzNDEsNDYzNDIsNDYzNDMsNDYzNDQsNDYzNDUsNDYzNDYsNDYzNDcsNDYzNDgsNDYzNDksNDYzNTAs''@;'; put 'put ''NDYzNTEsNDYzNTIsNDYzNTMsNDYzNTQsNDYzNTUsNDYzNTgsNDYzNTksNDYzNjEsNDYzNjIsNDYzNjUsNDYzNjYsNDYzNjcsNDYzNjgsNDYzNjksNDYzNzAsNDYzNzEsNDYzNzQsNDYzNzksNDYzODAsNDYzODEsNDYzODIsNDYzODMsNDYzODYsNDYzODcsNDYzODksNDYzOTAsNDYzOTEsNDYz''@;'; put 'put ''OTMsNDYzOTQsNDYzOTUsNDYzOTYsNDYzOTcsNDYzOTgsNDYzOTksNDY0MDIsNDY0MDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0MDcsNDY0MDgsNDY0MDksNDY0MTAsNDY0MTQsNDY0MTUsNDY0MTcsNDY0MTgsNDY0MTksNDY0MjEsNDY0MjIsNDY0MjMsNDY0MjQsNDY0MjUs''@;'; put 'put ''NDY0MjYsNDY0MjcsNDY0MzAsNDY0MzQsNDY0MzUsNDY0MzYsNDY0MzcsNDY0MzgsNDY0MzksNDY0NDAsNDY0NDEsNDY0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY0NDMsNDY0NDQsNDY0NDUsNDY0NDYsNDY0NDcsNDY0NDgsNDY0NDksNDY0NTAsNDY0NTEsNDY0NTIsNDY0''@;'; put 'put ''NTMsNDY0NTQsNDY0NTUsNDY0NTYsNDY0NTcsNDY0NTgsNDY0NTksNDY0NjAsNDY0NjEsNDY0NjIsNDY0NjMsNDY0NjQsNDY0NjUsNDY0NjYsNDY0NjcsNDY0NjgsNDY0NjksNDY0NzAsNDY0NzEsNDY0NzIsNDY0NzMsNDY0NzQsNDY0NzUsNDY0NzYsNDY0NzcsNDY0NzgsNDY0NzksNDY0ODAs''@;'; put 'put ''NDY0ODEsNDY0ODIsNDY0ODMsNDY0ODQsNDY0ODUsNDY0ODYsNDY0ODcsNDY0ODgsNDY0ODksNDY0OTAsNDY0OTEsNDY0OTIsNDY0OTMsNDY0OTQsNDY0OTUsNDY0OTgsNDY0OTksNDY1MDEsNDY1MDIsNDY1MDMsNDY1MDUsNDY1MDgsNDY1MDksNDY1MTAsNDY1MTEsNDY1MTQsNDY1MTgsNDY1''@;'; put 'put ''MTksNDY1MjAsNDY1MjEsNDY1MjIsNDY1MjYsNDY1MjcsNDY1MjksNDY1MzAsNDY1MzEsNDY1MzMsNDY1MzQsNDY1MzUsNDY1MzYsNDY1MzcsNDY1MzgsNDY1MzksNDY1NDIsNDY1NDYsNDY1NDcsNDY1NDgsNDY1NDksNDY1NTAsNDY1NTEsNDY1NTMsNDY1NTQsNDY1NTUsNDY1NTYsNDY1NTcs''@;'; put 'put ''NDY1NTgsNDY1NTksNDY1NjAsNDY1NjEsNDY1NjIsNDY1NjMsNDY1NjQsNDY1NjUsNDY1NjYsNDY1NjcsNDY1NjgsNDY1NjksNDY1NzAsNDY1NzEsNDY1NzMsNDY1NzQsNDY1NzUsNDY1NzYsNDY1NzcsNDY1NzgsNDY1NzksNDY1ODAsNDY1ODEsNDY1ODIsNDY1ODMsNDY1ODQsNDY1ODUsNDY1''@;'; put 'put ''ODYsNDY1ODcsNDY1ODgsNDY1ODksNDY1OTAsNDY1OTEsNDY1OTIsNDY1OTMsNDY1OTQsNDY1OTUsNDY1OTYsNDY1OTcsNDY1OTgsNDY1OTksNDY2MDAsNDY2MDEsNDY2MDIsNDY2MDMsNDY2MDQsNDY2MDUsNDY2MDYsNDY2MDcsNDY2MTAsNDY2MTEsNDY2MTMsNDY2MTQsNDY2MTUsNDY2MTcs''@;'; put 'put ''NDY2MTgsNDY2MTksNDY2MjAsNDY2MjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2MjIsNDY2MjMsNDY2MjQsNDY2MjUsNDY2MjYsNDY2MjcsNDY2MjgsNDY2MzAsNDY2MzEsNDY2MzIsNDY2MzMsNDY2MzQsNDY2MzUsNDY2MzcsNDY2MzgsNDY2MzksNDY2NDAsNDY2NDEsNDY2''@;'; put 'put ''NDIsNDY2NDMsNDY2NDUsNDY2NDYsNDY2NDcsNDY2NDgsNDY2NDksNDY2NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY2NTEsNDY2NTIsNDY2NTMsNDY2NTQsNDY2NTUsNDY2NTYsNDY2NTcsNDY2NTgsNDY2NTksNDY2NjAsNDY2NjEsNDY2NjIsNDY2NjMsNDY2NjUsNDY2NjYs''@;'; put 'put ''NDY2NjcsNDY2NjgsNDY2NjksNDY2NzAsNDY2NzEsNDY2NzIsNDY2NzMsNDY2NzQsNDY2NzUsNDY2NzYsNDY2NzcsNDY2NzgsNDY2NzksNDY2ODAsNDY2ODEsNDY2ODIsNDY2ODMsNDY2ODQsNDY2ODUsNDY2ODYsNDY2ODcsNDY2ODgsNDY2ODksNDY2OTAsNDY2OTEsNDY2OTMsNDY2OTQsNDY2''@;'; put 'put ''OTUsNDY2OTcsNDY2OTgsNDY2OTksNDY3MDAsNDY3MDEsNDY3MDIsNDY3MDMsNDY3MDQsNDY3MDUsNDY3MDYsNDY3MDcsNDY3MDgsNDY3MDksNDY3MTAsNDY3MTEsNDY3MTIsNDY3MTMsNDY3MTQsNDY3MTUsNDY3MTYsNDY3MTcsNDY3MTgsNDY3MTksNDY3MjAsNDY3MjEsNDY3MjIsNDY3MjMs''@;'; put 'put ''NDY3MjQsNDY3MjUsNDY3MjYsNDY3MjcsNDY3MjgsNDY3MjksNDY3MzAsNDY3MzEsNDY3MzIsNDY3MzMsNDY3MzQsNDY3MzUsNDY3MzYsNDY3MzcsNDY3MzgsNDY3MzksNDY3NDAsNDY3NDEsNDY3NDIsNDY3NDMsNDY3NDQsNDY3NDUsNDY3NDYsNDY3NDcsNDY3NTAsNDY3NTEsNDY3NTMsNDY3''@;'; put 'put ''NTQsNDY3NTUsNDY3NTcsNDY3NTgsNDY3NTksNDY3NjAsNDY3NjEsNDY3NjIsNDY3NjUsNDY3NjYsNDY3NjcsNDY3NjgsNDY3NzAsNDY3NzEsNDY3NzIsNDY3NzMsNDY3NzQsNDY3NzUsNDY3NzYsNDY3NzcsNDY3NzgsNDY3NzksNDY3ODAsNDY3ODEsNDY3ODIsNDY3ODMsNDY3ODQsNDY3ODUs''@;'; put 'put ''NDY3ODYsNDY3ODcsNDY3ODgsNDY3ODksNDY3OTAsNDY3OTEsNDY3OTIsNDY3OTMsNDY3OTQsNDY3OTUsNDY3OTYsNDY3OTcsNDY3OTgsNDY3OTksNDY4MDAsNDY4MDEsNDY4MDIsNDY4MDMsNDY4MDUsNDY4MDYsNDY4MDcsNDY4MDgsNDY4MDksNDY4MTAsNDY4MTEsNDY4MTIsNDY4MTMsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4MTQsNDY4MTUsNDY4MTYsNDY4MTcsNDY4MTgsNDY4MTksNDY4MjAsNDY4MjEsNDY4MjIsNDY4MjMsNDY4MjQsNDY4MjUsNDY4MjYsNDY4MjcsNDY4MjgsNDY4MjksNDY4MzAsNDY4MzEsNDY4MzMsNDY4MzQsNDY4MzUsNDY4MzcsNDY4Mzgs''@;'; put 'put ''NDY4MzksNDY4NDEsNDY4NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDY4NDMsNDY4NDQsNDY4NDUsNDY4NDYsNDY4NDcsNDY4NTAsNDY4NTEsNDY4NTIsNDY4NTQsNDY4NTUsNDY4NTYsNDY4NTcsNDY4NTgsNDY4NTksNDY4NjAsNDY4NjEsNDY4NjIsNDY4NjMsNDY4NjQsNDY4''@;'; put 'put ''NjUsNDY4NjYsNDY4NjcsNDY4NjgsNDY4NjksNDY4NzAsNDY4NzEsNDY4NzIsNDY4NzMsNDY4NzQsNDY4NzUsNDY4NzYsNDY4NzcsNDY4NzgsNDY4NzksNDY4ODAsNDY4ODEsNDY4ODIsNDY4ODMsNDY4ODQsNDY4ODUsNDY4ODYsNDY4ODcsNDY4OTAsNDY4OTEsNDY4OTMsNDY4OTQsNDY4OTcs''@;'; put 'put ''NDY4OTgsNDY4OTksNDY5MDAsNDY5MDEsNDY5MDIsNDY5MDMsNDY5MDYsNDY5MDgsNDY5MDksNDY5MTAsNDY5MTEsNDY5MTIsNDY5MTMsNDY5MTQsNDY5MTUsNDY5MTcsNDY5MTgsNDY5MTksNDY5MjEsNDY5MjIsNDY5MjMsNDY5MjUsNDY5MjYsNDY5MjcsNDY5MjgsNDY5MjksNDY5MzAsNDY5''@;'; put 'put ''MzEsNDY5MzQsNDY5MzUsNDY5MzYsNDY5MzcsNDY5MzgsNDY5MzksNDY5NDAsNDY5NDEsNDY5NDIsNDY5NDMsNDY5NDUsNDY5NDYsNDY5NDcsNDY5NDksNDY5NTAsNDY5NTEsNDY5NTMsNDY5NTQsNDY5NTUsNDY5NTYsNDY5NTcsNDY5NTgsNDY5NTksNDY5NjIsNDY5NjQsNDY5NjYsNDY5Njcs''@;'; put 'put ''NDY5NjgsNDY5NjksNDY5NzAsNDY5NzEsNDY5NzQsNDY5NzUsNDY5NzcsNDY5NzgsNDY5NzksNDY5ODEsNDY5ODIsNDY5ODMsNDY5ODQsNDY5ODUsNDY5ODYsNDY5ODcsNDY5OTAsNDY5OTUsNDY5OTYsNDY5OTcsNDcwMDIsNDcwMDMsNDcwMDUsNDcwMDYsNDcwMDcsNDcwMDksNDcwMTAsNDcw''@;'; put 'put ''MTEsNDcwMTIsNDcwMTMsNDcwMTQsNDcwMTUsNDcwMTgsNDcwMjIsNDcwMjMsNDcwMjQsNDcwMjUsNDcwMjYsNDcwMjcsNDcwMzAsNDcwMzEsNDcwMzMsNDcwMzQsNDcwMzUsNDcwMzYsNDcwMzcsNDcwMzgsNDcwMzksNDcwNDAsNDcwNDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NDcwNDIsNDcwNDMsNDcwNDQsNDcwNDUsNDcwNDYsNDcwNDgsNDcwNTAsNDcwNTEsNDcwNTIsNDcwNTMsNDcwNTQsNDcwNTUsNDcwNTYsNDcwNTcsNDcwNTgsNDcwNTksNDcwNjAsNDcwNjEsNDcwNjIsNDcwNjMsNDcwNjQsNDcwNjUsNDcwNjYsNDcwNjcsNDcwNjgsNDcwNjksbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNDcwNzAsNDcwNzEsNDcwNzIsNDcwNzMsNDcwNzQsNDcwNzUsNDcwNzYsNDcwNzcsNDcwNzgsNDcwNzksNDcwODAsNDcwODEsNDcwODIsNDcwODMsNDcwODYsNDcwODcsNDcwODksNDcwOTAsNDcwOTEsNDcwOTMsNDcwOTQsNDcwOTUsNDcwOTYsNDcwOTcs''@;'; put 'put ''NDcwOTgsNDcwOTksNDcxMDIsNDcxMDYsNDcxMDcsNDcxMDgsNDcxMDksNDcxMTAsNDcxMTQsNDcxMTUsNDcxMTcsNDcxMTgsNDcxMTksNDcxMjEsNDcxMjIsNDcxMjMsNDcxMjQsNDcxMjUsNDcxMjYsNDcxMjcsNDcxMzAsNDcxMzIsNDcxMzQsNDcxMzUsNDcxMzYsNDcxMzcsNDcxMzgsNDcx''@;'; put 'put ''MzksNDcxNDIsNDcxNDMsNDcxNDUsNDcxNDYsNDcxNDcsNDcxNDksNDcxNTAsNDcxNTEsNDcxNTIsNDcxNTMsNDcxNTQsNDcxNTUsNDcxNTgsNDcxNjIsNDcxNjMsNDcxNjQsNDcxNjUsNDcxNjYsNDcxNjcsNDcxNjksNDcxNzAsNDcxNzEsNDcxNzMsNDcxNzQsNDcxNzUsNDcxNzYsNDcxNzcs''@;'; put 'put ''NDcxNzgsNDcxNzksNDcxODAsNDcxODEsNDcxODIsNDcxODMsNDcxODQsNDcxODYsNDcxODgsNDcxODksNDcxOTAsNDcxOTEsNDcxOTIsNDcxOTMsNDcxOTQsNDcxOTUsNDcxOTgsNDcxOTksNDcyMDEsNDcyMDIsNDcyMDMsNDcyMDUsNDcyMDYsNDcyMDcsNDcyMDgsNDcyMDksNDcyMTAsNDcy''@;'; put 'put ''MTEsNDcyMTQsNDcyMTYsNDcyMTgsNDcyMTksNDcyMjAsNDcyMjEsNDcyMjIsNDcyMjMsNDcyMjUsNDcyMjYsNDcyMjcsNDcyMjksNDcyMzAsNDcyMzEsNDcyMzIsNDcyMzMsNDcyMzQsNDcyMzUsNDcyMzYsNDcyMzcsNDcyMzgsNDcyMzksNDcyNDAsNDcyNDEsNDcyNDIsNDcyNDMsNDcyNDQs''@;'; put 'put ''NDcyNDYsNDcyNDcsNDcyNDgsNDcyNDksNDcyNTAsNDcyNTEsNDcyNTIsNDcyNTMsNDcyNTQsNDcyNTUsNDcyNTYsNDcyNTcsNDcyNTgsNDcyNTksNDcyNjAsNDcyNjEsNDcyNjIsNDcyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyNjQsNDcyNjUsNDcyNjYsNDcyNjcsNDcy''@;'; put 'put ''NjgsNDcyNjksNDcyNzAsNDcyNzEsNDcyNzMsNDcyNzQsNDcyNzUsNDcyNzYsNDcyNzcsNDcyNzgsNDcyNzksNDcyODEsNDcyODIsNDcyODMsNDcyODUsNDcyODYsNDcyODcsNDcyODksNDcyOTAsNDcyOTEsNDcyOTIsNDcyOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDcyOTQs''@;'; put 'put ''NDcyOTUsNDcyOTgsNDczMDAsNDczMDIsNDczMDMsNDczMDQsNDczMDUsNDczMDYsNDczMDcsNDczMDksNDczMTAsNDczMTEsNDczMTMsNDczMTQsNDczMTUsNDczMTcsNDczMTgsNDczMTksNDczMjAsNDczMjEsNDczMjIsNDczMjMsNDczMjQsNDczMjYsNDczMjgsNDczMzAsNDczMzEsNDcz''@;'; put 'put ''MzIsNDczMzMsNDczMzQsNDczMzUsNDczMzgsNDczMzksNDczNDEsNDczNDIsNDczNDMsNDczNDUsNDczNDYsNDczNDcsNDczNDgsNDczNDksNDczNTAsNDczNTEsNDczNTQsNDczNTYsNDczNTgsNDczNTksNDczNjAsNDczNjEsNDczNjIsNDczNjMsNDczNjUsNDczNjYsNDczNjcsNDczNjgs''@;'; put 'put ''NDczNjksNDczNzAsNDczNzEsNDczNzIsNDczNzMsNDczNzQsNDczNzUsNDczNzYsNDczNzcsNDczNzgsNDczNzksNDczODAsNDczODEsNDczODIsNDczODMsNDczODUsNDczODYsNDczODcsNDczODgsNDczODksNDczOTAsNDczOTEsNDczOTMsNDczOTQsNDczOTUsNDczOTYsNDczOTcsNDcz''@;'; put 'put ''OTgsNDczOTksNDc0MDAsNDc0MDEsNDc0MDIsNDc0MDMsNDc0MDQsNDc0MDUsNDc0MDYsNDc0MDcsNDc0MDgsNDc0MDksNDc0MTAsNDc0MTEsNDc0MTIsNDc0MTMsNDc0MTQsNDc0MTUsNDc0MTYsNDc0MTcsNDc0MTgsNDc0MTksNDc0MjIsNDc0MjMsNDc0MjUsNDc0MjYsNDc0MjcsNDc0Mjks''@;'; put 'put ''NDc0MzAsNDc0MzEsNDc0MzIsNDc0MzMsNDc0MzQsNDc0MzUsNDc0MzcsNDc0MzgsNDc0NDAsNDc0NDIsNDc0NDMsNDc0NDQsNDc0NDUsNDc0NDYsNDc0NDcsNDc0NTAsNDc0NTEsNDc0NTMsNDc0NTQsNDc0NTUsNDc0NTcsNDc0NTgsNDc0NTksNDc0NjAsNDc0NjEsNDc0NjIsNDc0NjMsNDc0''@;'; put 'put ''NjYsNDc0NjgsNDc0NzAsNDc0NzEsNDc0NzIsNDc0NzMsNDc0NzQsNDc0NzUsNDc0NzgsNDc0NzksNDc0ODEsNDc0ODIsNDc0ODMsNDc0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc0ODYsNDc0ODcsNDc0ODgsNDc0ODksNDc0OTAsNDc0OTEsNDc0OTQsNDc0OTYsNDc0OTks''@;'; put 'put ''NDc1MDAsNDc1MDMsNDc1MDQsNDc1MDUsNDc1MDYsNDc1MDcsNDc1MDgsNDc1MDksNDc1MTAsNDc1MTEsNDc1MTIsNDc1MTMsNDc1MTQsNDc1MTUsNDc1MTYsNDc1MTcsNDc1MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc1MTksNDc1MjAsNDc1MjEsNDc1MjIsNDc1MjMsNDc1''@;'; put 'put ''MjQsNDc1MjUsNDc1MjYsNDc1MjcsNDc1MjgsNDc1MjksNDc1MzAsNDc1MzEsNDc1MzQsNDc1MzUsNDc1MzcsNDc1MzgsNDc1MzksNDc1NDEsNDc1NDIsNDc1NDMsNDc1NDQsNDc1NDUsNDc1NDYsNDc1NDcsNDc1NTAsNDc1NTIsNDc1NTQsNDc1NTUsNDc1NTYsNDc1NTcsNDc1NTgsNDc1NTks''@;'; put 'put ''NDc1NjIsNDc1NjMsNDc1NjUsNDc1NzEsNDc1NzIsNDc1NzMsNDc1NzQsNDc1NzUsNDc1NzgsNDc1ODAsNDc1ODMsNDc1ODQsNDc1ODYsNDc1OTAsNDc1OTEsNDc1OTMsNDc1OTQsNDc1OTUsNDc1OTcsNDc1OTgsNDc1OTksNDc2MDAsNDc2MDEsNDc2MDIsNDc2MDMsNDc2MDYsNDc2MTEsNDc2''@;'; put 'put ''MTIsNDc2MTMsNDc2MTQsNDc2MTUsNDc2MTgsNDc2MTksNDc2MjAsNDc2MjEsNDc2MjIsNDc2MjMsNDc2MjUsNDc2MjYsNDc2MjcsNDc2MjgsNDc2MjksNDc2MzAsNDc2MzEsNDc2MzIsNDc2MzMsNDc2MzQsNDc2MzUsNDc2MzYsNDc2MzgsNDc2MzksNDc2NDAsNDc2NDEsNDc2NDIsNDc2NDMs''@;'; put 'put ''NDc2NDQsNDc2NDUsNDc2NDYsNDc2NDcsNDc2NDgsNDc2NDksNDc2NTAsNDc2NTEsNDc2NTIsNDc2NTMsNDc2NTQsNDc2NTUsNDc2NTYsNDc2NTcsNDc2NTgsNDc2NTksNDc2NjAsNDc2NjEsNDc2NjIsNDc2NjMsNDc2NjQsNDc2NjUsNDc2NjYsNDc2NjcsNDc2NjgsNDc2NjksNDc2NzAsNDc2''@;'; put 'put ''NzEsNDc2NzQsNDc2NzUsNDc2NzcsNDc2NzgsNDc2NzksNDc2ODEsNDc2ODMsNDc2ODQsNDc2ODUsNDc2ODYsNDc2ODcsNDc2OTAsNDc2OTIsNDc2OTUsNDc2OTYsNDc2OTcsNDc2OTgsNDc3MDIsNDc3MDMsNDc3MDUsNDc3MDYsNDc3MDcsNDc3MDksNDc3MTAsNDc3MTEsNDc3MTIsNDc3MTMs''@;'; put 'put ''NDc3MTQsNDc3MTUsNDc3MTgsNDc3MjIsNDc3MjMsNDc3MjQsNDc3MjUsNDc3MjYsNDc3MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3MzAsNDc3MzEsNDc3MzMsNDc3MzQsNDc3MzUsNDc3MzcsNDc3MzgsNDc3MzksNDc3NDAsNDc3NDEsNDc3NDIsNDc3NDMsNDc3NDQsNDc3''@;'; put 'put ''NDUsNDc3NDYsNDc3NTAsNDc3NTIsNDc3NTMsNDc3NTQsNDc3NTUsNDc3NTcsNDc3NTgsNDc3NTksNDc3NjAsNDc3NjEsNDc3NjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc3NjMsNDc3NjQsNDc3NjUsNDc3NjYsNDc3NjcsNDc3NjgsNDc3NjksNDc3NzAsNDc3NzEsNDc3NzIs''@;'; put 'put ''NDc3NzMsNDc3NzQsNDc3NzUsNDc3NzYsNDc3NzcsNDc3NzgsNDc3NzksNDc3ODAsNDc3ODEsNDc3ODIsNDc3ODMsNDc3ODYsNDc3ODksNDc3OTAsNDc3OTEsNDc3OTMsNDc3OTUsNDc3OTYsNDc3OTcsNDc3OTgsNDc3OTksNDc4MDIsNDc4MDQsNDc4MDYsNDc4MDcsNDc4MDgsNDc4MDksNDc4''@;'; put 'put ''MTAsNDc4MTEsNDc4MTMsNDc4MTQsNDc4MTUsNDc4MTcsNDc4MTgsNDc4MTksNDc4MjAsNDc4MjEsNDc4MjIsNDc4MjMsNDc4MjQsNDc4MjUsNDc4MjYsNDc4MjcsNDc4MjgsNDc4MjksNDc4MzAsNDc4MzEsNDc4MzQsNDc4MzUsNDc4MzYsNDc4MzcsNDc4MzgsNDc4MzksNDc4NDAsNDc4NDEs''@;'; put 'put ''NDc4NDIsNDc4NDMsNDc4NDQsNDc4NDUsNDc4NDYsNDc4NDcsNDc4NDgsNDc4NDksNDc4NTAsNDc4NTEsNDc4NTIsNDc4NTMsNDc4NTQsNDc4NTUsNDc4NTYsNDc4NTcsNDc4NTgsNDc4NTksNDc4NjAsNDc4NjEsNDc4NjIsNDc4NjMsNDc4NjQsNDc4NjUsNDc4NjYsNDc4NjcsNDc4NjksNDc4''@;'; put 'put ''NzAsNDc4NzEsNDc4NzMsNDc4NzQsNDc4NzUsNDc4NzcsNDc4NzgsNDc4NzksNDc4ODAsNDc4ODEsNDc4ODIsNDc4ODMsNDc4ODQsNDc4ODYsNDc4ODgsNDc4OTAsNDc4OTEsNDc4OTIsNDc4OTMsNDc4OTQsNDc4OTUsNDc4OTcsNDc4OTgsNDc4OTksNDc5MDEsNDc5MDIsNDc5MDMsNDc5MDUs''@;'; put 'put ''NDc5MDYsNDc5MDcsNDc5MDgsNDc5MDksNDc5MTAsNDc5MTEsNDc5MTIsNDc5MTQsNDc5MTYsNDc5MTcsNDc5MTgsNDc5MTksNDc5MjAsNDc5MjEsNDc5MjIsNDc5MjMsNDc5MjcsNDc5MjksNDc5MzAsNDc5MzUsNDc5MzYsNDc5MzcsNDc5MzgsNDc5MzksNDc5NDIsNDc5NDQsNDc5NDYsNDc5''@;'; put 'put ''NDcsNDc5NDgsNDc5NTAsNDc5NTMsNDc5NTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5NTUsNDc5NTcsNDc5NTgsNDc5NTksNDc5NjEsNDc5NjIsNDc5NjMsNDc5NjQsNDc5NjUsNDc5NjYsNDc5NjcsNDc5NjgsNDc5NzAsNDc5NzIsNDc5NzMsNDc5NzQsNDc5NzUsNDc5NzYs''@;'; put 'put ''NDc5NzcsNDc5NzgsNDc5NzksNDc5ODEsNDc5ODIsNDc5ODMsNDc5ODQsNDc5ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDc5ODYsNDc5ODcsNDc5ODgsNDc5ODksNDc5OTAsNDc5OTEsNDc5OTIsNDc5OTMsNDc5OTQsNDc5OTUsNDc5OTYsNDc5OTcsNDc5OTgsNDc5OTksNDhl''@;'; put 'put ''Myw0ODAwMSw0ODAwMiw0ODAwMyw0ODAwNCw0ODAwNSw0ODAwNiw0ODAwNyw0ODAwOSw0ODAxMCw0ODAxMSw0ODAxMyw0ODAxNCw0ODAxNSw0ODAxNyw0ODAxOCw0ODAxOSw0ODAyMCw0ODAyMSw0ODAyMiw0ODAyMyw0ODAyNCw0ODAyNSw0ODAyNiw0ODAyNyw0ODAyOCw0ODAyOSw0ODAzMCw0''@;'; put 'put ''ODAzMSw0ODAzMiw0ODAzMyw0ODAzNCw0ODAzNSw0ODAzNyw0ODAzOCw0ODAzOSw0ODA0MSw0ODA0Miw0ODA0Myw0ODA0NSw0ODA0Niw0ODA0Nyw0ODA0OCw0ODA0OSw0ODA1MCw0ODA1MSw0ODA1Myw0ODA1NCw0ODA1Niw0ODA1Nyw0ODA1OCw0ODA1OSw0ODA2MCw0ODA2MSw0ODA2Miw0ODA2''@;'; put 'put ''Myw0ODA2NSw0ODA2Niw0ODA2Nyw0ODA2OSw0ODA3MCw0ODA3MSw0ODA3Myw0ODA3NCw0ODA3NSw0ODA3Niw0ODA3Nyw0ODA3OCw0ODA3OSw0ODA4MSw0ODA4Miw0ODA4NCw0ODA4NSw0ODA4Niw0ODA4Nyw0ODA4OCw0ODA4OSw0ODA5MCw0ODA5MSw0ODA5Miw0ODA5Myw0ODA5NCw0ODA5NSw0''@;'; put 'put ''ODA5Niw0ODA5Nyw0ODA5OCw0ODA5OSw0ODEwMCw0ODEwMSw0ODEwMiw0ODEwMyw0ODEwNCw0ODEwNSw0ODEwNiw0ODEwNyw0ODEwOCw0ODEwOSw0ODExMCw0ODExMSw0ODExMiw0ODExMyw0ODExNCw0ODExNSw0ODExNiw0ODExNyw0ODExOCw0ODExOSw0ODEyMiw0ODEyMyw0ODEyNSw0ODEy''@;'; put 'put ''Niw0ODEyOSw0ODEzMSw0ODEzMiw0ODEzMyw0ODEzNCw0ODEzNSw0ODEzOCw0ODE0Miw0ODE0NCw0ODE0Niw0ODE0Nyw0ODE1Myw0ODE1NCw0ODE2MCw0ODE2MSw0ODE2Miw0ODE2Myw0ODE2Niw0ODE2OCw0ODE3MCw0ODE3MSw0ODE3Miw0ODE3NCw0ODE3NSw0ODE3OCw0ODE3OSw0ODE4MSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODE4Miw0ODE4Myw0ODE4NSw0ODE4Niw0ODE4Nyw0ODE4OCw0ODE4OSw0ODE5MCw0ODE5MSw0ODE5NCw0ODE5OCw0ODE5OSw0ODIwMCw0ODIwMiw0ODIwMyw0ODIwNiw0ODIwNyw0ODIwOSw0ODIxMCw0ODIxMSw0ODIxMiw0ODIxMyw0ODIx''@;'; put 'put ''NCw0ODIxNSw0ODIxNiw0ODIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODIxOCw0ODIxOSw0ODIyMCw0ODIyMiw0ODIyMyw0ODIyNCw0ODIyNSw0ODIyNiw0ODIyNyw0ODIyOCw0ODIyOSw0ODIzMCw0ODIzMSw0ODIzMiw0ODIzMyw0ODIzNCw0ODIzNSw0ODIzNiw0ODIzNyw0''@;'; put 'put ''ODIzOCw0ODIzOSw0ODI0MCw0ODI0MSw0ODI0Miw0ODI0Myw0ODI0NCw0ODI0NSw0ODI0Niw0ODI0Nyw0ODI0OCw0ODI0OSw0ODI1MCw0ODI1MSw0ODI1Miw0ODI1Myw0ODI1NCw0ODI1NSw0ODI1Niw0ODI1Nyw0ODI1OCw0ODI1OSw0ODI2Miw0ODI2Myw0ODI2NSw0ODI2Niw0ODI2OSw0ODI3''@;'; put 'put ''MSw0ODI3Miw0ODI3Myw0ODI3NCw0ODI3NSw0ODI3OCw0ODI4MCw0ODI4Myw0ODI4NCw0ODI4NSw0ODI4Niw0ODI4Nyw0ODI5MCw0ODI5MSw0ODI5Myw0ODI5NCw0ODI5Nyw0ODI5OCw0ODI5OSw0ODMwMCw0ODMwMSw0ODMwMiw0ODMwMyw0ODMwNiw0ODMxMCw0ODMxMSw0ODMxMiw0ODMxMyw0''@;'; put 'put ''ODMxNCw0ODMxNSw0ODMxOCw0ODMxOSw0ODMyMSw0ODMyMiw0ODMyMyw0ODMyNSw0ODMyNiw0ODMyNyw0ODMyOCw0ODMyOSw0ODMzMCw0ODMzMSw0ODMzMiw0ODMzNCw0ODMzOCw0ODMzOSw0ODM0MCw0ODM0Miw0ODM0Myw0ODM0NSw0ODM0Niw0ODM0Nyw0ODM0OSw0ODM1MCw0ODM1MSw0ODM1''@;'; put 'put ''Miw0ODM1Myw0ODM1NCw0ODM1NSw0ODM1Niw0ODM1Nyw0ODM1OCw0ODM1OSw0ODM2MCw0ODM2MSw0ODM2Miw0ODM2Myw0ODM2NCw0ODM2NSw0ODM2Niw0ODM2Nyw0ODM2OCw0ODM2OSw0ODM3MCw0ODM3MSw0ODM3NSw0ODM3Nyw0ODM3OCw0ODM3OSw0ODM4MSw0ODM4Miw0ODM4Myw0ODM4NCw0''@;'; put 'put ''ODM4NSw0ODM4Niw0ODM4Nyw0ODM5MCw0ODM5Miw0ODM5NCw0ODM5NSw0ODM5Niw0ODM5Nyw0ODM5OCw0ODM5OSw0ODQwMSw0ODQwMiw0ODQwMyw0ODQwNSw0ODQwNiw0ODQwNyw0ODQwOCw0ODQwOSw0ODQxMCw0ODQxMSw0ODQxMiw0ODQxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw0ODQxNCw0ODQxNSw0ODQxNiw0ODQxNyw0ODQxOCw0ODQxOSw0ODQyMSw0ODQyMiw0ODQyMyw0ODQyNCw0ODQyNSw0ODQyNiw0ODQyNyw0ODQyOSw0ODQzMCw0ODQzMSw0ODQzMiw0ODQzMyw0ODQzNCw0ODQzNSw0ODQzNiw0ODQzNyw0ODQzOCw0ODQzOSw0ODQ0MCw0ODQ0MSxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODQ0Miw0ODQ0Myw0ODQ0NCw0ODQ0NSw0ODQ0Niw0ODQ0Nyw0ODQ0OSw0ODQ1MCw0ODQ1MSw0ODQ1Miw0ODQ1Myw0ODQ1NCw0ODQ1NSw0ODQ1OCw0ODQ1OSw0ODQ2MSw0ODQ2Miw0ODQ2Myw0ODQ2NSw0ODQ2Niw0ODQ2Nyw0ODQ2OCw0ODQ2OSw0ODQ3''@;'; put 'put ''MCw0ODQ3MSw0ODQ3NCw0ODQ3NSw0ODQ3Niw0ODQ3Nyw0ODQ3OCw0ODQ3OSw0ODQ4MCw0ODQ4MSw0ODQ4Miw0ODQ4Myw0ODQ4NSw0ODQ4Niw0ODQ4Nyw0ODQ4OSw0ODQ5MCw0ODQ5MSw0ODQ5Miw0ODQ5Myw0ODQ5NCw0ODQ5NSw0ODQ5Niw0ODQ5Nyw0ODQ5OCw0ODQ5OSw0ODUwMCw0ODUwMSw0''@;'; put 'put ''ODUwMiw0ODUwMyw0ODUwNCw0ODUwNSw0ODUwNiw0ODUwNyw0ODUwOCw0ODUwOSw0ODUxMCw0ODUxMSw0ODUxNCw0ODUxNSw0ODUxNyw0ODUxOCw0ODUyMyw0ODUyNCw0ODUyNSw0ODUyNiw0ODUyNyw0ODUzMCw0ODUzMiw0ODUzNCw0ODUzNSw0ODUzNiw0ODUzOSw0ODU0MSw0ODU0Miw0ODU0''@;'; put 'put ''Myw0ODU0NCw0ODU0NSw0ODU0Niw0ODU0Nyw0ODU0OSw0ODU1MCw0ODU1MSw0ODU1Miw0ODU1Myw0ODU1NCw0ODU1NSw0ODU1Niw0ODU1Nyw0ODU1OCw0ODU1OSw0ODU2MSw0ODU2Miw0ODU2Myw0ODU2NCw0ODU2NSw0ODU2Niw0ODU2Nyw0ODU2OSw0ODU3MCw0ODU3MSw0ODU3Miw0ODU3Myw0''@;'; put 'put ''ODU3NCw0ODU3NSw0ODU3Niw0ODU3Nyw0ODU3OCw0ODU3OSw0ODU4MCw0ODU4MSw0ODU4Miw0ODU4Myw0ODU4NCw0ODU4NSw0ODU4Niw0ODU4Nyw0ODU4OCw0ODU4OSw0ODU5MCw0ODU5MSw0ODU5Miw0ODU5Myw0ODU5NCw0ODU5NSw0ODU5OCw0ODU5OSw0ODYwMSw0ODYwMiw0ODYwMyw0ODYw''@;'; put 'put ''NSw0ODYwNiw0ODYwNyw0ODYwOCw0ODYwOSw0ODYxMCw0ODYxMSw0ODYxMiw0ODYxMyw0ODYxNCw0ODYxNSw0ODYxNiw0ODYxOCw0ODYxOSw0ODYyMCw0ODYyMSw0ODYyMiw0ODYyMyw0ODYyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODYyNiw0ODYyNyw0ODYyOSw0ODYzMCw0''@;'; put 'put ''ODYzMSw0ODYzMyw0ODYzNCw0ODYzNSw0ODYzNiw0ODYzNyw0ODYzOCw0ODYzOSw0ODY0MSw0ODY0Miw0ODY0NCw0ODY0Niw0ODY0Nyw0ODY0OCw0ODY0OSw0ODY1MCw0ODY1MSw0ODY1NCw0ODY1NSw0ODY1Nyw0ODY1OCw0ODY1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODY2''@;'; put 'put ''MSw0ODY2Miw0ODY2Myw0ODY2NCw0ODY2NSw0ODY2Niw0ODY2Nyw0ODY3MCw0ODY3Miw0ODY3Myw0ODY3NCw0ODY3NSw0ODY3Niw0ODY3Nyw0ODY3OCw0ODY3OSw0ODY4MCw0ODY4MSw0ODY4Miw0ODY4Myw0ODY4NCw0ODY4NSw0ODY4Niw0ODY4Nyw0ODY4OCw0ODY4OSw0ODY5MCw0ODY5MSw0''@;'; put 'put ''ODY5Miw0ODY5Myw0ODY5NCw0ODY5NSw0ODY5Niw0ODY5Nyw0ODY5OCw0ODY5OSw0ODcwMCw0ODcwMSw0ODcwMiw0ODcwMyw0ODcwNCw0ODcwNSw0ODcwNiw0ODcwNyw0ODcxMCw0ODcxMSw0ODcxMyw0ODcxNCw0ODcxNSw0ODcxNyw0ODcxOSw0ODcyMCw0ODcyMSw0ODcyMiw0ODcyMyw0ODcy''@;'; put 'put ''Niw0ODcyOCw0ODczMiw0ODczMyw0ODczNCw0ODczNSw0ODczOCw0ODczOSw0ODc0MSw0ODc0Miw0ODc0Myw0ODc0NSw0ODc0Nyw0ODc0OCw0ODc0OSw0ODc1MCw0ODc1MSw0ODc1NCw0ODc1OCw0ODc1OSw0ODc2MCw0ODc2MSw0ODc2Miw0ODc2Niw0ODc2Nyw0ODc2OSw0ODc3MCw0ODc3MSw0''@;'; put 'put ''ODc3Myw0ODc3NCw0ODc3NSw0ODc3Niw0ODc3Nyw0ODc3OCw0ODc3OSw0ODc4Miw0ODc4Niw0ODc4Nyw0ODc4OCw0ODc4OSw0ODc5MCw0ODc5MSw0ODc5NCw0ODc5NSw0ODc5Niw0ODc5Nyw0ODc5OCw0ODc5OSw0ODgwMCw0ODgwMSw0ODgwMiw0ODgwMyw0ODgwNCw0ODgwNSw0ODgwNiw0ODgw''@;'; put 'put ''Nyw0ODgwOSw0ODgxMCw0ODgxMSw0ODgxMiw0ODgxMyw0ODgxNCw0ODgxNSw0ODgxNiw0ODgxNyw0ODgxOCw0ODgxOSw0ODgyMCw0ODgyMSw0ODgyMiw0ODgyMyw0ODgyNCw0ODgyNSw0ODgyNiw0ODgyNyw0ODgyOCw0ODgyOSw0ODgzMCw0ODgzMSw0ODgzMiw0ODgzMyw0ODgzNCw0ODgzNSw0''@;'; put 'put ''ODgzNiw0ODgzNyw0ODgzOCw0ODgzOSw0ODg0MCw0ODg0MSw0ODg0Miw0ODg0Myw0ODg0NCw0ODg0NSw0ODg0Niw0ODg0Nyw0ODg1MCw0ODg1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg1Myw0ODg1NCw0ODg1Nyw0ODg1OCw0ODg1OSw0ODg2MCw0ODg2MSw0ODg2Miw0ODg2''@;'; put 'put ''Myw0ODg2NSw0ODg2Niw0ODg3MCw0ODg3MSw0ODg3Miw0ODg3Myw0ODg3NCw0ODg3NSw0ODg3Nyw0ODg3OCw0ODg3OSw0ODg4MCw0ODg4MSw0ODg4Miw0ODg4Myw0ODg4NCw0ODg4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0ODg4Niw0ODg4Nyw0ODg4OCw0ODg4OSw0ODg5MCw0''@;'; put 'put ''ODg5MSw0ODg5Miw0ODg5Myw0ODg5NCw0ODg5NSw0ODg5Niw0ODg5OCw0ODg5OSw0ODkwMCw0ODkwMSw0ODkwMiw0ODkwMyw0ODkwNiw0ODkwNyw0ODkwOCw0ODkwOSw0ODkxMCw0ODkxMSw0ODkxMiw0ODkxMyw0ODkxNCw0ODkxNSw0ODkxNiw0ODkxNyw0ODkxOCw0ODkxOSw0ODkyMiw0ODky''@;'; put 'put ''Niw0ODkyNyw0ODkyOCw0ODkyOSw0ODkzMCw0ODkzMSw0ODkzMiw0ODkzMyw0ODkzNCw0ODkzNSw0ODkzNiw0ODkzNyw0ODkzOCw0ODkzOSw0ODk0MCw0ODk0MSw0ODk0Miw0ODk0Myw0ODk0NCw0ODk0NSw0ODk0Niw0ODk0Nyw0ODk0OCw0ODk0OSw0ODk1MCw0ODk1MSw0ODk1Miw0ODk1Myw0''@;'; put 'put ''ODk1NCw0ODk1NSw0ODk1Niw0ODk1Nyw0ODk1OCw0ODk1OSw0ODk2Miw0ODk2Myw0ODk2NSw0ODk2Niw0ODk2Nyw0ODk2OSw0ODk3MCw0ODk3MSw0ODk3Miw0ODk3Myw0ODk3NCw0ODk3NSw0ODk3OCw0ODk3OSw0ODk4MCw0ODk4Miw0ODk4Myw0ODk4NCw0ODk4NSw0ODk4Niw0ODk4Nyw0ODk4''@;'; put 'put ''OCw0ODk4OSw0ODk5MCw0ODk5MSw0ODk5Miw0ODk5Myw0ODk5NCw0ODk5NSw0ODk5Niw0ODk5Nyw0ODk5OCw0ODk5OSw0OWUzLDQ5MDAxLDQ5MDAyLDQ5MDAzLDQ5MDA0LDQ5MDA1LDQ5MDA2LDQ5MDA3LDQ5MDA4LDQ5MDA5LDQ5MDEwLDQ5MDExLDQ5MDEyLDQ5MDEzLDQ5MDE0LDQ5MDE1LDQ5''@;'; put 'put ''MDE2LDQ5MDE3LDQ5MDE4LDQ5MDE5LDQ5MDIwLDQ5MDIxLDQ5MDIyLDQ5MDIzLDQ5MDI0LDQ5MDI1LDQ5MDI2LDQ5MDI3LDQ5MDI4LDQ5MDI5LDQ5MDMwLDQ5MDMxLDQ5MDMyLDQ5MDMzLDQ5MDM0LDQ5MDM1LDQ5MDM2LDQ5MDM3LDQ5MDM4LDQ5MDM5LDQ5MDQwLDQ5MDQxLDQ5MDQyLDQ5MDQz''@;'; put 'put ''LDQ5MDQ1LDQ5MDQ2LDQ5MDQ3LDQ5MDQ4LDQ5MDQ5LDQ5MDUwLDQ5MDUxLDQ5MDUyLDQ5MDUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDU0LDQ5MDU1LDQ5MDU2LDQ5MDU3LDQ5MDU4LDQ5MDU5LDQ5MDYwLDQ5MDYxLDQ5MDYyLDQ5MDYzLDQ5MDY0LDQ5MDY1LDQ5MDY2LDQ5''@;'; put 'put ''MDY3LDQ5MDY4LDQ5MDY5LDQ5MDcwLDQ5MDcxLDQ5MDczLDQ5MDc0LDQ5MDc1LDQ5MDc2LDQ5MDc3LDQ5MDc4LDQ5MDc5LDQ5MDgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MDgxLDQ5MDgyLDQ5MDgzLDQ5MDg0LDQ5MDg1LDQ5MDg2LDQ5MDg3LDQ5MDg4LDQ5MDg5LDQ5MDkw''@;'; put 'put ''LDQ5MDkxLDQ5MDkyLDQ5MDk0LDQ5MDk1LDQ5MDk2LDQ5MDk3LDQ5MDk4LDQ5MDk5LDQ5MTAyLDQ5MTAzLDQ5MTA1LDQ5MTA2LDQ5MTA3LDQ5MTA5LDQ5MTEwLDQ5MTExLDQ5MTEyLDQ5MTEzLDQ5MTE0LDQ5MTE1LDQ5MTE3LDQ5MTE4LDQ5MTIwLDQ5MTIyLDQ5MTIzLDQ5MTI0LDQ5MTI1LDQ5''@;'; put 'put ''MTI2LDQ5MTI3LDQ5MTI4LDQ5MTI5LDQ5MTMwLDQ5MTMxLDQ5MTMyLDQ5MTMzLDQ5MTM0LDQ5MTM1LDQ5MTM2LDQ5MTM3LDQ5MTM4LDQ5MTM5LDQ5MTQwLDQ5MTQxLDQ5MTQyLDQ5MTQzLDQ5MTQ0LDQ5MTQ1LDQ5MTQ2LDQ5MTQ3LDQ5MTQ4LDQ5MTQ5LDQ5MTUwLDQ5MTUxLDQ5MTUyLDQ5MTUz''@;'; put 'put ''LDQ5MTU0LDQ5MTU1LDQ5MTU2LDQ5MTU3LDQ5MTU4LDQ5MTU5LDQ5MTYwLDQ5MTYxLDQ5MTYyLDQ5MTYzLDQ5MTY0LDQ5MTY1LDQ5MTY2LDQ5MTY3LDQ5MTY4LDQ5MTY5LDQ5MTcwLDQ5MTcxLDQ5MTcyLDQ5MTczLDQ5MTc0LDQ5MTc1LDQ5MTc2LDQ5MTc3LDQ5MTc4LDQ5MTc5LDQ5MTgwLDQ5''@;'; put 'put ''MTgxLDQ5MTgyLDQ5MTgzLDQ5MTg0LDQ5MTg1LDQ5MTg2LDQ5MTg3LDQ5MTg4LDQ5MTg5LDQ5MTkwLDQ5MTkxLDQ5MTkyLDQ5MTkzLDQ5MTk0LDQ5MTk1LDQ5MTk2LDQ5MTk3LDQ5MTk4LDQ5MTk5LDQ5MjAwLDQ5MjAxLDQ5MjAyLDQ5MjAzLDQ5MjA0LDQ5MjA1LDQ5MjA2LDQ5MjA3LDQ5MjA4''@;'; put 'put ''LDQ5MjA5LDQ5MjEwLDQ5MjExLDQ5MjEzLDQ5MjE0LDQ5MjE1LDQ5MjE2LDQ5MjE3LDQ5MjE4LDQ5MjE5LDQ5MjIwLDQ5MjIxLDQ5MjIyLDQ5MjIzLDQ5MjI0LDQ5MjI1LDQ5MjI2LDQ5MjI3LDQ5MjI4LDQ5MjI5LDQ5MjMwLDQ5MjMxLDQ5MjMyLDQ5MjM0LDQ5MjM1LDQ5MjM2LDQ5MjM3LDQ5''@;'; put 'put ''MjM4LDQ5MjM5LDQ5MjQxLDQ5MjQyLDQ5MjQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5MjQ1LDQ5MjQ2LDQ5MjQ3LDQ5MjQ5LDQ5MjUwLDQ5MjUxLDQ5MjUyLDQ5MjUzLDQ5MjU0LDQ5MjU1LDQ5MjU4LDQ5MjU5LDQ5MjYwLDQ5MjYxLDQ5MjYyLDQ5MjYzLDQ5MjY0LDQ5MjY1''@;'; put 'put ''LDQ5MjY2LDQ5MjY3LDQ5MjY4LDQ5MjY5LDQ5MjcwLDQ5MjcxLDQ5MjcyLDQ5MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5Mjc0LDQ5Mjc1LDQ5Mjc2LDQ5Mjc3LDQ5Mjc4LDQ5Mjc5LDQ5MjgwLDQ5MjgxLDQ5MjgyLDQ5MjgzLDQ5Mjg0LDQ5Mjg1LDQ5Mjg2LDQ5Mjg3LDQ5''@;'; put 'put ''Mjg4LDQ5Mjg5LDQ5MjkwLDQ5MjkxLDQ5MjkyLDQ5MjkzLDQ5Mjk0LDQ5Mjk1LDQ5Mjk4LDQ5Mjk5LDQ5MzAxLDQ5MzAyLDQ5MzAzLDQ5MzA1LDQ5MzA2LDQ5MzA3LDQ5MzA4LDQ5MzA5LDQ5MzEwLDQ5MzExLDQ5MzE0LDQ5MzE2LDQ5MzE4LDQ5MzE5LDQ5MzIwLDQ5MzIxLDQ5MzIyLDQ5MzIz''@;'; put 'put ''LDQ5MzI2LDQ5MzI5LDQ5MzMwLDQ5MzM1LDQ5MzM2LDQ5MzM3LDQ5MzM4LDQ5MzM5LDQ5MzQyLDQ5MzQ2LDQ5MzQ3LDQ5MzQ4LDQ5MzUwLDQ5MzUxLDQ5MzU0LDQ5MzU1LDQ5MzU3LDQ5MzU4LDQ5MzU5LDQ5MzYxLDQ5MzYyLDQ5MzYzLDQ5MzY0LDQ5MzY1LDQ5MzY2LDQ5MzY3LDQ5MzcwLDQ5''@;'; put 'put ''Mzc0LDQ5Mzc1LDQ5Mzc2LDQ5Mzc3LDQ5Mzc4LDQ5Mzc5LDQ5MzgyLDQ5MzgzLDQ5Mzg1LDQ5Mzg2LDQ5Mzg3LDQ5Mzg5LDQ5MzkwLDQ5MzkxLDQ5MzkyLDQ5MzkzLDQ5Mzk0LDQ5Mzk1LDQ5Mzk4LDQ5NDAwLDQ5NDAyLDQ5NDAzLDQ5NDA0LDQ5NDA1LDQ5NDA2LDQ5NDA3LDQ5NDA5LDQ5NDEw''@;'; put 'put ''LDQ5NDExLDQ5NDEzLDQ5NDE0LDQ5NDE1LDQ5NDE3LDQ5NDE4LDQ5NDE5LDQ5NDIwLDQ5NDIxLDQ5NDIyLDQ5NDIzLDQ5NDI1LDQ5NDI2LDQ5NDI3LDQ5NDI4LDQ5NDMwLDQ5NDMxLDQ5NDMyLDQ5NDMzLDQ5NDM0LDQ5NDM1LDQ5NDQxLDQ5NDQyLDQ5NDQ1LDQ5NDQ4LDQ5NDQ5LDQ5NDUwLDQ5''@;'; put 'put ''NDUxLDQ5NDU0LDQ5NDU4LDQ5NDU5LDQ5NDYwLDQ5NDYxLDQ5NDYzLDQ5NDY2LDQ5NDY3LDQ5NDY5LDQ5NDcwLDQ5NDcxLDQ5NDczLDQ5NDc0LDQ5NDc1LDQ5NDc2LDQ5NDc3LDQ5NDc4LDQ5NDc5LDQ5NDgyLDQ5NDg2LDQ5NDg3LDQ5NDg4LDQ5NDg5LDQ5NDkwLDQ5NDkxLDQ5NDk0LDQ5NDk1''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NDk3LDQ5NDk4LDQ5NDk5LDQ5NTAxLDQ5NTAyLDQ5NTAzLDQ5NTA0LDQ5NTA1LDQ5NTA2LDQ5NTA3LDQ5NTEwLDQ5NTE0LDQ5NTE1LDQ5NTE2LDQ5NTE3LDQ5NTE4LDQ5NTE5LDQ5NTIxLDQ5NTIyLDQ5NTIzLDQ5NTI1LDQ5NTI2LDQ5''@;'; put 'put ''NTI3LDQ5NTI5LDQ5NTMwLDQ5NTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NTMyLDQ5NTMzLDQ5NTM0LDQ5NTM1LDQ5NTM2LDQ5NTM3LDQ5NTM4LDQ5NTM5LDQ5NTQwLDQ5NTQyLDQ5NTQzLDQ5NTQ0LDQ5NTQ1LDQ5NTQ2LDQ5NTQ3LDQ5NTUxLDQ5NTUzLDQ5NTU0LDQ5NTU1''@;'; put 'put ''LDQ5NTU3LDQ5NTU5LDQ5NTYwLDQ5NTYxLDQ5NTYyLDQ5NTYzLDQ5NTY2LDQ5NTY4LDQ5NTcwLDQ5NTcxLDQ5NTcyLDQ5NTc0LDQ5NTc1LDQ5NTc4LDQ5NTc5LDQ5NTgxLDQ5NTgyLDQ5NTgzLDQ5NTg1LDQ5NTg2LDQ5NTg3LDQ5NTg4LDQ5NTg5LDQ5NTkwLDQ5NTkxLDQ5NTkyLDQ5NTkzLDQ5''@;'; put 'put ''NTk0LDQ5NTk1LDQ5NTk2LDQ5NTk4LDQ5NTk5LDQ5NjAwLDQ5NjAxLDQ5NjAyLDQ5NjAzLDQ5NjA1LDQ5NjA2LDQ5NjA3LDQ5NjA5LDQ5NjEwLDQ5NjExLDQ5NjEzLDQ5NjE0LDQ5NjE1LDQ5NjE2LDQ5NjE3LDQ5NjE4LDQ5NjE5LDQ5NjIxLDQ5NjIyLDQ5NjI1LDQ5NjI2LDQ5NjI3LDQ5NjI4''@;'; put 'put ''LDQ5NjI5LDQ5NjMwLDQ5NjMxLDQ5NjMzLDQ5NjM0LDQ5NjM1LDQ5NjM3LDQ5NjM4LDQ5NjM5LDQ5NjQxLDQ5NjQyLDQ5NjQzLDQ5NjQ0LDQ5NjQ1LDQ5NjQ2LDQ5NjQ3LDQ5NjUwLDQ5NjUyLDQ5NjUzLDQ5NjU0LDQ5NjU1LDQ5NjU2LDQ5NjU3LDQ5NjU4LDQ5NjU5LDQ5NjYyLDQ5NjYzLDQ5''@;'; put 'put ''NjY1LDQ5NjY2LDQ5NjY3LDQ5NjY5LDQ5NjcwLDQ5NjcxLDQ5NjcyLDQ5NjczLDQ5Njc0LDQ5Njc1LDQ5Njc4LDQ5NjgwLDQ5NjgyLDQ5NjgzLDQ5Njg0LDQ5Njg1LDQ5Njg2LDQ5Njg3LDQ5NjkwLDQ5NjkxLDQ5NjkzLDQ5Njk0LDQ5Njk3LDQ5Njk4LDQ5Njk5LDQ5NzAwLDQ5NzAxLDQ5NzAy''@;'; put 'put ''LDQ5NzAzLDQ5NzA2LDQ5NzA4LDQ5NzEwLDQ5NzEyLDQ5NzE1LDQ5NzE3LDQ5NzE4LDQ5NzE5LDQ5NzIwLDQ5NzIxLDQ5NzIyLDQ5NzIzLDQ5NzI0LDQ5NzI1LDQ5NzI2LDQ5NzI3LDQ5NzI4LDQ5NzI5LDQ5NzMwLDQ5NzMxLDQ5NzMyLDQ5NzMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ5NzM0LDQ5NzM1LDQ5NzM3LDQ5NzM4LDQ5NzM5LDQ5NzQwLDQ5NzQxLDQ5NzQyLDQ5NzQzLDQ5NzQ2LDQ5NzQ3LDQ5NzQ5LDQ5NzUwLDQ5NzUxLDQ5NzUzLDQ5NzU0LDQ5NzU1LDQ5NzU2LDQ5NzU3LDQ5NzU4LDQ5NzU5LDQ5NzYxLDQ5NzYyLDQ5NzYzLDQ5NzY0LDQ5NzY2LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5NzY3LDQ5NzY4LDQ5NzY5LDQ5NzcwLDQ5NzcxLDQ5Nzc0LDQ5Nzc1LDQ5Nzc3LDQ5Nzc4LDQ5Nzc5LDQ5NzgxLDQ5NzgyLDQ5NzgzLDQ5Nzg0LDQ5Nzg1LDQ5Nzg2LDQ5Nzg3LDQ5NzkwLDQ5NzkyLDQ5Nzk0LDQ5Nzk1LDQ5Nzk2LDQ5Nzk3LDQ5''@;'; put 'put ''Nzk4LDQ5Nzk5LDQ5ODAyLDQ5ODAzLDQ5ODA0LDQ5ODA1LDQ5ODA2LDQ5ODA3LDQ5ODA5LDQ5ODEwLDQ5ODExLDQ5ODEyLDQ5ODEzLDQ5ODE0LDQ5ODE1LDQ5ODE3LDQ5ODE4LDQ5ODIwLDQ5ODIyLDQ5ODIzLDQ5ODI0LDQ5ODI1LDQ5ODI2LDQ5ODI3LDQ5ODMwLDQ5ODMxLDQ5ODMzLDQ5ODM0''@;'; put 'put ''LDQ5ODM1LDQ5ODM4LDQ5ODM5LDQ5ODQwLDQ5ODQxLDQ5ODQyLDQ5ODQzLDQ5ODQ2LDQ5ODQ4LDQ5ODUwLDQ5ODUxLDQ5ODUyLDQ5ODUzLDQ5ODU0LDQ5ODU1LDQ5ODU2LDQ5ODU3LDQ5ODU4LDQ5ODU5LDQ5ODYwLDQ5ODYxLDQ5ODYyLDQ5ODYzLDQ5ODY0LDQ5ODY1LDQ5ODY2LDQ5ODY3LDQ5''@;'; put 'put ''ODY4LDQ5ODY5LDQ5ODcwLDQ5ODcxLDQ5ODcyLDQ5ODczLDQ5ODc0LDQ5ODc1LDQ5ODc2LDQ5ODc3LDQ5ODc4LDQ5ODc5LDQ5ODgwLDQ5ODgxLDQ5ODgyLDQ5ODgzLDQ5ODg2LDQ5ODg3LDQ5ODg5LDQ5ODkwLDQ5ODkzLDQ5ODk0LDQ5ODk1LDQ5ODk2LDQ5ODk3LDQ5ODk4LDQ5OTAyLDQ5OTA0''@;'; put 'put ''LDQ5OTA2LDQ5OTA3LDQ5OTA4LDQ5OTA5LDQ5OTExLDQ5OTE0LDQ5OTE3LDQ5OTE4LDQ5OTE5LDQ5OTIxLDQ5OTIyLDQ5OTIzLDQ5OTI0LDQ5OTI1LDQ5OTI2LDQ5OTI3LDQ5OTMwLDQ5OTMxLDQ5OTM0LDQ5OTM1LDQ5OTM2LDQ5OTM3LDQ5OTM4LDQ5OTQyLDQ5OTQzLDQ5OTQ1LDQ5OTQ2LDQ5''@;'; put 'put ''OTQ3LDQ5OTQ5LDQ5OTUwLDQ5OTUxLDQ5OTUyLDQ5OTUzLDQ5OTU0LDQ5OTU1LDQ5OTU4LDQ5OTU5LDQ5OTYyLDQ5OTYzLDQ5OTY0LDQ5OTY1LDQ5OTY2LDQ5OTY3LDQ5OTY4LDQ5OTY5LDQ5OTcwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5OTcxLDQ5OTcyLDQ5OTczLDQ5OTc0''@;'; put 'put ''LDQ5OTc1LDQ5OTc2LDQ5OTc3LDQ5OTc4LDQ5OTc5LDQ5OTgwLDQ5OTgxLDQ5OTgyLDQ5OTgzLDQ5OTg0LDQ5OTg1LDQ5OTg2LDQ5OTg3LDQ5OTg4LDQ5OTkwLDQ5OTkxLDQ5OTkyLDQ5OTkzLDQ5OTk0LDQ5OTk1LDQ5OTk2LDQ5OTk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ5''@;'; put 'put ''OTk4LDQ5OTk5LDVlNCw1MDAwMSw1MDAwMiw1MDAwMyw1MDAwNCw1MDAwNSw1MDAwNiw1MDAwNyw1MDAwOCw1MDAwOSw1MDAxMCw1MDAxMSw1MDAxMiw1MDAxMyw1MDAxNCw1MDAxNSw1MDAxNiw1MDAxNyw1MDAxOCw1MDAxOSw1MDAyMCw1MDAyMSw1MDAyMiw1MDAyMyw1MDAyNiw1MDAyNyw1''@;'; put 'put ''MDAyOSw1MDAzMCw1MDAzMSw1MDAzMyw1MDAzNSw1MDAzNiw1MDAzNyw1MDAzOCw1MDAzOSw1MDA0Miw1MDA0Myw1MDA0Niw1MDA0Nyw1MDA0OCw1MDA0OSw1MDA1MCw1MDA1MSw1MDA1Myw1MDA1NCw1MDA1NSw1MDA1Nyw1MDA1OCw1MDA1OSw1MDA2MSw1MDA2Miw1MDA2Myw1MDA2NCw1MDA2''@;'; put 'put ''NSw1MDA2Niw1MDA2Nyw1MDA2OCw1MDA2OSw1MDA3MCw1MDA3MSw1MDA3Miw1MDA3Myw1MDA3NCw1MDA3NSw1MDA3Niw1MDA3Nyw1MDA3OCw1MDA3OSw1MDA4MCw1MDA4MSw1MDA4Miw1MDA4Myw1MDA4NCw1MDA4NSw1MDA4Niw1MDA4Nyw1MDA4OCw1MDA4OSw1MDA5MCw1MDA5MSw1MDA5Miw1''@;'; put 'put ''MDA5Myw1MDA5NCw1MDA5NSw1MDA5Niw1MDA5Nyw1MDA5OCw1MDA5OSw1MDEwMCw1MDEwMSw1MDEwMiw1MDEwMyw1MDEwNCw1MDEwNSw1MDEwNiw1MDEwNyw1MDEwOCw1MDEwOSw1MDExMCw1MDExMSw1MDExMyw1MDExNCw1MDExNSw1MDExNiw1MDExNyw1MDExOCw1MDExOSw1MDEyMCw1MDEy''@;'; put 'put ''MSw1MDEyMiw1MDEyMyw1MDEyNCw1MDEyNSw1MDEyNiw1MDEyNyw1MDEyOCw1MDEyOSw1MDEzMCw1MDEzMSw1MDEzMiw1MDEzMyw1MDEzNCw1MDEzNSw1MDEzOCw1MDEzOSw1MDE0MSw1MDE0Miw1MDE0NSw1MDE0Nyw1MDE0OCw1MDE0OSw1MDE1MCw1MDE1MSw1MDE1NCw1MDE1NSw1MDE1Niw1''@;'; put 'put ''MDE1OCw1MDE1OSw1MDE2MCw1MDE2MSw1MDE2Miw1MDE2Myw1MDE2Niw1MDE2Nyw1MDE2OSw1MDE3MCw1MDE3MSw1MDE3Miw1MDE3Myw1MDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDE3NSw1MDE3Niw1MDE3Nyw1MDE3OCw1MDE3OSw1MDE4MCw1MDE4MSw1MDE4Miw1MDE4''@;'; put 'put ''Myw1MDE4NSw1MDE4Niw1MDE4Nyw1MDE4OCw1MDE4OSw1MDE5MCw1MDE5MSw1MDE5Myw1MDE5NCw1MDE5NSw1MDE5Niw1MDE5Nyw1MDE5OCw1MDE5OSw1MDIwMCw1MDIwMSw1MDIwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDIwMyw1MDIwNCw1MDIwNSw1MDIwNiw1MDIwNyw1''@;'; put 'put ''MDIwOCw1MDIwOSw1MDIxMCw1MDIxMSw1MDIxMyw1MDIxNCw1MDIxNSw1MDIxNiw1MDIxNyw1MDIxOCw1MDIxOSw1MDIyMSw1MDIyMiw1MDIyMyw1MDIyNSw1MDIyNiw1MDIyNyw1MDIyOSw1MDIzMCw1MDIzMSw1MDIzMiw1MDIzMyw1MDIzNCw1MDIzNSw1MDIzOCw1MDIzOSw1MDI0MCw1MDI0''@;'; put 'put ''MSw1MDI0Miw1MDI0Myw1MDI0NCw1MDI0NSw1MDI0Niw1MDI0Nyw1MDI0OSw1MDI1MCw1MDI1MSw1MDI1Miw1MDI1Myw1MDI1NCw1MDI1NSw1MDI1Niw1MDI1Nyw1MDI1OCw1MDI1OSw1MDI2MCw1MDI2MSw1MDI2Miw1MDI2Myw1MDI2NCw1MDI2NSw1MDI2Niw1MDI2Nyw1MDI2OCw1MDI2OSw1''@;'; put 'put ''MDI3MCw1MDI3MSw1MDI3Miw1MDI3Myw1MDI3NCw1MDI3NSw1MDI3OCw1MDI3OSw1MDI4MSw1MDI4Miw1MDI4Myw1MDI4NSw1MDI4Niw1MDI4Nyw1MDI4OCw1MDI4OSw1MDI5MCw1MDI5MSw1MDI5NCw1MDI5NSw1MDI5Niw1MDI5OCw1MDI5OSw1MDMwMCw1MDMwMSw1MDMwMiw1MDMwMyw1MDMw''@;'; put 'put ''NSw1MDMwNiw1MDMwNyw1MDMwOCw1MDMwOSw1MDMxMCw1MDMxMSw1MDMxMiw1MDMxMyw1MDMxNCw1MDMxNSw1MDMxNiw1MDMxNyw1MDMxOCw1MDMxOSw1MDMyMCw1MDMyMSw1MDMyMiw1MDMyMyw1MDMyNSw1MDMyNiw1MDMyNyw1MDMyOCw1MDMyOSw1MDMzMCw1MDMzMSw1MDMzMyw1MDMzNCw1''@;'; put 'put ''MDMzNSw1MDMzNiw1MDMzNyw1MDMzOCw1MDMzOSw1MDM0MCw1MDM0MSw1MDM0Miw1MDM0Myw1MDM0NCw1MDM0NSw1MDM0Niw1MDM0Nyw1MDM0OCw1MDM0OSw1MDM1MCw1MDM1MSw1MDM1Miw1MDM1Myw1MDM1NCw1MDM1NSw1MDM1Niw1MDM1Nyw1MDM1OCw1MDM1OSw1MDM2MSw1MDM2Miw1MDM2''@;'; put 'put ''Myw1MDM2NSw1MDM2Niw1MDM2Nyw1MDM2OCw1MDM2OSw1MDM3MCw1MDM3MSw1MDM3Miw1MDM3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDM3NCw1MDM3NSw1MDM3Niw1MDM3Nyw1MDM3OCw1MDM3OSw1MDM4MCw1MDM4MSw1MDM4Miw1MDM4Myw1MDM4NCw1MDM4NSw1MDM4Niw1''@;'; put 'put ''MDM4Nyw1MDM4OCw1MDM4OSw1MDM5MCw1MDM5MSw1MDM5Miw1MDM5Myw1MDM5NCw1MDM5NSw1MDM5Niw1MDM5Nyw1MDM5OCw1MDM5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDQwMCw1MDQwMSw1MDQwMiw1MDQwMyw1MDQwNCw1MDQwNSw1MDQwNiw1MDQwNyw1MDQwOCw1MDQx''@;'; put 'put ''MCw1MDQxMSw1MDQxMiw1MDQxMyw1MDQxNCw1MDQxNSw1MDQxOCw1MDQxOSw1MDQyMSw1MDQyMiw1MDQyMyw1MDQyNSw1MDQyNyw1MDQyOCw1MDQyOSw1MDQzMCw1MDQzNCw1MDQzNSw1MDQzNiw1MDQzNyw1MDQzOCw1MDQzOSw1MDQ0MCw1MDQ0MSw1MDQ0Miw1MDQ0Myw1MDQ0NSw1MDQ0Niw1''@;'; put 'put ''MDQ0Nyw1MDQ0OSw1MDQ1MCw1MDQ1MSw1MDQ1Myw1MDQ1NCw1MDQ1NSw1MDQ1Niw1MDQ1Nyw1MDQ1OCw1MDQ1OSw1MDQ2MSw1MDQ2Miw1MDQ2Myw1MDQ2NCw1MDQ2NSw1MDQ2Niw1MDQ2Nyw1MDQ2OCw1MDQ2OSw1MDQ3MCw1MDQ3MSw1MDQ3NCw1MDQ3NSw1MDQ3Nyw1MDQ3OCw1MDQ3OSw1MDQ4''@;'; put 'put ''MSw1MDQ4Miw1MDQ4Myw1MDQ4NCw1MDQ4NSw1MDQ4Niw1MDQ4Nyw1MDQ5MCw1MDQ5Miw1MDQ5NCw1MDQ5NSw1MDQ5Niw1MDQ5Nyw1MDQ5OCw1MDQ5OSw1MDUwMiw1MDUwMyw1MDUwNyw1MDUxMSw1MDUxMiw1MDUxMyw1MDUxNCw1MDUxOCw1MDUyMiw1MDUyMyw1MDUyNCw1MDUyNyw1MDUzMCw1''@;'; put 'put ''MDUzMSw1MDUzMyw1MDUzNCw1MDUzNSw1MDUzNyw1MDUzOCw1MDUzOSw1MDU0MCw1MDU0MSw1MDU0Miw1MDU0Myw1MDU0Niw1MDU1MCw1MDU1MSw1MDU1Miw1MDU1Myw1MDU1NCw1MDU1NSw1MDU1OCw1MDU1OSw1MDU2MSw1MDU2Miw1MDU2Myw1MDU2NSw1MDU2Niw1MDU2OCw1MDU2OSw1MDU3''@;'; put 'put ''MCw1MDU3MSw1MDU3NCw1MDU3Niw1MDU3OCw1MDU3OSw1MDU4MCw1MDU4Miw1MDU4NSw1MDU4Niw1MDU4Nyw1MDU4OSw1MDU5MCw1MDU5MSw1MDU5Myw1MDU5NCw1MDU5NSw1MDU5Niw1MDU5Nyw1MDU5OCw1MDU5OSw1MDYwMCw1MDYwMiw1MDYwMyw1MDYwNCw1MDYwNSw1MDYwNiw1MDYwNyw1''@;'; put 'put ''MDYwOCw1MDYwOSw1MDYxMCw1MDYxMSw1MDYxNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDYxNSw1MDYxOCw1MDYyMyw1MDYyNCw1MDYyNSw1MDYyNiw1MDYyNyw1MDYzNSw1MDYzNyw1MDYzOSw1MDY0Miw1MDY0Myw1MDY0NSw1MDY0Niw1MDY0Nyw1MDY0OSw1MDY1MCw1MDY1''@;'; put 'put ''MSw1MDY1Miw1MDY1Myw1MDY1NCw1MDY1NSw1MDY1OCw1MDY2MCw1MDY2Miw1MDY2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDY2NCw1MDY2NSw1MDY2Niw1MDY2Nyw1MDY3MSw1MDY3Myw1MDY3NCw1MDY3NSw1MDY3Nyw1MDY4MCw1MDY4MSw1MDY4Miw1MDY4Myw1MDY5MCw1''@;'; put 'put ''MDY5MSw1MDY5Miw1MDY5Nyw1MDY5OCw1MDY5OSw1MDcwMSw1MDcwMiw1MDcwMyw1MDcwNSw1MDcwNiw1MDcwNyw1MDcwOCw1MDcwOSw1MDcxMCw1MDcxMSw1MDcxNCw1MDcxNyw1MDcxOCw1MDcxOSw1MDcyMCw1MDcyMSw1MDcyMiw1MDcyMyw1MDcyNiw1MDcyNyw1MDcyOSw1MDczMCw1MDcz''@;'; put 'put ''MSw1MDczNSw1MDczNyw1MDczOCw1MDc0Miw1MDc0NCw1MDc0Niw1MDc0OCw1MDc0OSw1MDc1MCw1MDc1MSw1MDc1NCw1MDc1NSw1MDc1Nyw1MDc1OCw1MDc1OSw1MDc2MSw1MDc2Miw1MDc2Myw1MDc2NCw1MDc2NSw1MDc2Niw1MDc2Nyw1MDc3MCw1MDc3NCw1MDc3NSw1MDc3Niw1MDc3Nyw1''@;'; put 'put ''MDc3OCw1MDc3OSw1MDc4Miw1MDc4Myw1MDc4NSw1MDc4Niw1MDc4Nyw1MDc4OCw1MDc4OSw1MDc5MCw1MDc5MSw1MDc5Miw1MDc5Myw1MDc5NCw1MDc5NSw1MDc5Nyw1MDc5OCw1MDgwMCw1MDgwMiw1MDgwMyw1MDgwNCw1MDgwNSw1MDgwNiw1MDgwNyw1MDgxMCw1MDgxMSw1MDgxMyw1MDgx''@;'; put 'put ''NCw1MDgxNSw1MDgxNyw1MDgxOCw1MDgxOSw1MDgyMCw1MDgyMSw1MDgyMiw1MDgyMyw1MDgyNiw1MDgyOCw1MDgzMCw1MDgzMSw1MDgzMiw1MDgzMyw1MDgzNCw1MDgzNSw1MDgzOCw1MDgzOSw1MDg0MSw1MDg0Miw1MDg0Myw1MDg0NSw1MDg0Niw1MDg0Nyw1MDg0OCw1MDg0OSw1MDg1MCw1''@;'; put 'put ''MDg1MSw1MDg1NCw1MDg1Niw1MDg1OCw1MDg1OSw1MDg2MCw1MDg2MSw1MDg2Miw1MDg2Myw1MDg2Niw1MDg2Nyw1MDg2OSw1MDg3MCw1MDg3MSw1MDg3NSw1MDg3Niw1MDg3Nyw1MDg3OCw1MDg3OSw1MDg4Miw1MDg4NCw1MDg4Niw1MDg4Nyw1MDg4OCw1MDg4OSw1MDg5MCw1MDg5MSw1MDg5''@;'; put 'put ''NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDg5NSw1MDg5Nyw1MDg5OCw1MDg5OSw1MDkwMSw1MDkwMiw1MDkwMyw1MDkwNCw1MDkwNSw1MDkwNiw1MDkwNyw1MDkxMCw1MDkxMSw1MDkxNCw1MDkxNSw1MDkxNiw1MDkxNyw1MDkxOCw1MDkxOSw1MDkyMiw1MDkyMyw1MDkyNSw1''@;'; put 'put ''MDkyNiw1MDkyNyw1MDkyOSw1MDkzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MDkzMSw1MDkzMiw1MDkzMyw1MDkzNCw1MDkzNSw1MDkzOCw1MDkzOSw1MDk0MCw1MDk0Miw1MDk0Myw1MDk0NCw1MDk0NSw1MDk0Niw1MDk0Nyw1MDk1MCw1MDk1MSw1MDk1Myw1MDk1NCw1MDk1''@;'; put 'put ''NSw1MDk1Nyw1MDk1OCw1MDk1OSw1MDk2MCw1MDk2MSw1MDk2Miw1MDk2Myw1MDk2Niw1MDk2OCw1MDk3MCw1MDk3MSw1MDk3Miw1MDk3Myw1MDk3NCw1MDk3NSw1MDk3OCw1MDk3OSw1MDk4MSw1MDk4Miw1MDk4Myw1MDk4NSw1MDk4Niw1MDk4Nyw1MDk4OCw1MDk4OSw1MDk5MCw1MDk5MSw1''@;'; put 'put ''MDk5NCw1MDk5Niw1MDk5OCw1MWUzLDUxMDAxLDUxMDAyLDUxMDAzLDUxMDA2LDUxMDA3LDUxMDA5LDUxMDEwLDUxMDExLDUxMDEzLDUxMDE0LDUxMDE1LDUxMDE2LDUxMDE3LDUxMDE5LDUxMDIyLDUxMDI0LDUxMDMzLDUxMDM0LDUxMDM1LDUxMDM3LDUxMDM4LDUxMDM5LDUxMDQxLDUxMDQy''@;'; put 'put ''LDUxMDQzLDUxMDQ0LDUxMDQ1LDUxMDQ2LDUxMDQ3LDUxMDQ5LDUxMDUwLDUxMDUyLDUxMDUzLDUxMDU0LDUxMDU1LDUxMDU2LDUxMDU3LDUxMDU4LDUxMDU5LDUxMDYyLDUxMDYzLDUxMDY1LDUxMDY2LDUxMDY3LDUxMDcxLDUxMDcyLDUxMDczLDUxMDc0LDUxMDc4LDUxMDgzLDUxMDg0LDUx''@;'; put 'put ''MDg1LDUxMDg3LDUxMDkwLDUxMDkxLDUxMDkzLDUxMDk3LDUxMDk5LDUxMTAwLDUxMTAxLDUxMTAyLDUxMTAzLDUxMTA2LDUxMTExLDUxMTEyLDUxMTEzLDUxMTE0LDUxMTE1LDUxMTE4LDUxMTE5LDUxMTIxLDUxMTIyLDUxMTIzLDUxMTI1LDUxMTI2LDUxMTI3LDUxMTI4LDUxMTI5LDUxMTMw''@;'; put 'put ''LDUxMTMxLDUxMTM0LDUxMTM4LDUxMTM5LDUxMTQwLDUxMTQxLDUxMTQyLDUxMTQzLDUxMTQ2LDUxMTQ3LDUxMTQ5LDUxMTUxLDUxMTUzLDUxMTU0LDUxMTU1LDUxMTU2LDUxMTU3LDUxMTU4LDUxMTU5LDUxMTYxLDUxMTYyLDUxMTYzLDUxMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUxMTY2LDUxMTY3LDUxMTY4LDUxMTY5LDUxMTcwLDUxMTcxLDUxMTczLDUxMTc0LDUxMTc1LDUxMTc3LDUxMTc4LDUxMTc5LDUxMTgxLDUxMTgyLDUxMTgzLDUxMTg0LDUxMTg1LDUxMTg2LDUxMTg3LDUxMTg4LDUxMTg5LDUxMTkwLDUxMTkxLDUxMTkyLDUxMTkzLDUxMTk0LG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMTk1LDUxMTk2LDUxMTk3LDUxMTk4LDUxMTk5LDUxMjAyLDUxMjAzLDUxMjA1LDUxMjA2LDUxMjA3LDUxMjA5LDUxMjExLDUxMjEyLDUxMjEzLDUxMjE0LDUxMjE1LDUxMjE4LDUxMjIwLDUxMjIzLDUxMjI0LDUxMjI1LDUxMjI2LDUxMjI3LDUx''@;'; put 'put ''MjMwLDUxMjMxLDUxMjMzLDUxMjM0LDUxMjM1LDUxMjM3LDUxMjM4LDUxMjM5LDUxMjQwLDUxMjQxLDUxMjQyLDUxMjQzLDUxMjQ2LDUxMjQ4LDUxMjUwLDUxMjUxLDUxMjUyLDUxMjUzLDUxMjU0LDUxMjU1LDUxMjU3LDUxMjU4LDUxMjU5LDUxMjYxLDUxMjYyLDUxMjYzLDUxMjY1LDUxMjY2''@;'; put 'put ''LDUxMjY3LDUxMjY4LDUxMjY5LDUxMjcwLDUxMjcxLDUxMjc0LDUxMjc1LDUxMjc4LDUxMjc5LDUxMjgwLDUxMjgxLDUxMjgyLDUxMjgzLDUxMjg1LDUxMjg2LDUxMjg3LDUxMjg4LDUxMjg5LDUxMjkwLDUxMjkxLDUxMjkyLDUxMjkzLDUxMjk0LDUxMjk1LDUxMjk2LDUxMjk3LDUxMjk4LDUx''@;'; put 'put ''Mjk5LDUxMzAwLDUxMzAxLDUxMzAyLDUxMzAzLDUxMzA0LDUxMzA1LDUxMzA2LDUxMzA3LDUxMzA4LDUxMzA5LDUxMzEwLDUxMzExLDUxMzE0LDUxMzE1LDUxMzE3LDUxMzE4LDUxMzE5LDUxMzIxLDUxMzIzLDUxMzI0LDUxMzI1LDUxMzI2LDUxMzI3LDUxMzMwLDUxMzMyLDUxMzM2LDUxMzM3''@;'; put 'put ''LDUxMzM4LDUxMzQyLDUxMzQzLDUxMzQ0LDUxMzQ1LDUxMzQ2LDUxMzQ3LDUxMzQ5LDUxMzUwLDUxMzUxLDUxMzUyLDUxMzUzLDUxMzU0LDUxMzU1LDUxMzU2LDUxMzU4LDUxMzYwLDUxMzYyLDUxMzYzLDUxMzY0LDUxMzY1LDUxMzY2LDUxMzY3LDUxMzY5LDUxMzcwLDUxMzcxLDUxMzcyLDUx''@;'; put 'put ''MzczLDUxMzc0LDUxMzc1LDUxMzc2LDUxMzc3LDUxMzc4LDUxMzc5LDUxMzgwLDUxMzgxLDUxMzgyLDUxMzgzLDUxMzg0LDUxMzg1LDUxMzg2LDUxMzg3LDUxMzkwLDUxMzkxLDUxMzkyLDUxMzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxMzk0LDUxMzk1LDUxMzk3LDUxMzk4''@;'; put 'put ''LDUxMzk5LDUxNDAxLDUxNDAyLDUxNDAzLDUxNDA1LDUxNDA2LDUxNDA3LDUxNDA4LDUxNDA5LDUxNDEwLDUxNDExLDUxNDE0LDUxNDE2LDUxNDE4LDUxNDE5LDUxNDIwLDUxNDIxLDUxNDIyLDUxNDIzLDUxNDI2LDUxNDI3LDUxNDI5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUx''@;'; put 'put ''NDMwLDUxNDMxLDUxNDMyLDUxNDMzLDUxNDM0LDUxNDM1LDUxNDM2LDUxNDM3LDUxNDM4LDUxNDM5LDUxNDQwLDUxNDQxLDUxNDQyLDUxNDQzLDUxNDQ0LDUxNDQ2LDUxNDQ3LDUxNDQ4LDUxNDQ5LDUxNDUwLDUxNDUxLDUxNDU0LDUxNDU1LDUxNDU3LDUxNDU4LDUxNDU5LDUxNDYzLDUxNDY0''@;'; put 'put ''LDUxNDY1LDUxNDY2LDUxNDY3LDUxNDcwLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw4MjI5LDgyMzAsMTY4LDEyMjkxLDE3Myw4MjEzLDg3NDEsNjUzNDAsODc2NCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAy''@;'; put 'put ''LDEyMzAzLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg4MDAsODgwNCw4ODA1LDg3MzQsODc1NiwxNzYsODI0Miw4MjQzLDg0NTEsODQ5MSw2NTUwNCw2NTUwNSw2NTUwOSw5Nzk0LDk3OTIsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4NiwxNjcsODI1MSw5NzM0LDk3MzMsOTY3''@;'; put 'put ''NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDg1OTQsODU5Miw4NTkzLDg1OTUsODU5NiwxMjMwNyw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LDg3''@;'; put 'put ''NDMsODc0NCw2NTUwNiw1MTQ3Miw1MTQ3NCw1MTQ3NSw1MTQ3Niw1MTQ3Nyw1MTQ3OCw1MTQ3OSw1MTQ4MSw1MTQ4Miw1MTQ4Myw1MTQ4NCw1MTQ4NSw1MTQ4Niw1MTQ4Nyw1MTQ4OCw1MTQ4OSw1MTQ5MCw1MTQ5MSw1MTQ5Miw1MTQ5Myw1MTQ5NCw1MTQ5NSw1MTQ5Niw1MTQ5Nyw1MTQ5OCw1''@;'; put 'put ''MTQ5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUwMSw1MTUwMiw1MTUwMyw1MTUwNCw1MTUwNSw1MTUwNiw1MTUwNyw1MTUwOSw1MTUxMCw1MTUxMSw1MTUxMiw1MTUxMyw1MTUxNCw1MTUxNSw1MTUxNiw1MTUxNyw1MTUxOCw1MTUxOSw1MTUyMCw1MTUyMSw1MTUyMiw1MTUy''@;'; put 'put ''Myw1MTUyNCw1MTUyNSw1MTUyNiw1MTUyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTUyOCw1MTUyOSw1MTUzMCw1MTUzMSw1MTUzMiw1MTUzMyw1MTUzNCw1MTUzNSw1MTUzOCw1MTUzOSw1MTU0MSw1MTU0Miw1MTU0Myw1MTU0NSw1MTU0Niw1MTU0Nyw1MTU0OCw1MTU0OSw1''@;'; put 'put ''MTU1MCw1MTU1MSw1MTU1NCw1MTU1Niw1MTU1Nyw1MTU1OCw1MTU1OSw1MTU2MCw1MTU2MSw1MTU2Miw1MTU2Myw1MTU2NSw1MTU2Niw1MTU2Nyw4NjU4LDg2NjAsODcwNCw4NzA3LDE4MCw2NTM3NCw3MTEsNzI4LDczMyw3MzAsNzI5LDE4NCw3MzEsMTYxLDE5MSw3MjAsODc1MCw4NzIxLDg3''@;'; put 'put ''MTksMTY0LDg0NTcsODI0MCw5NjY1LDk2NjQsOTY1NSw5NjU0LDk4MjgsOTgyNCw5ODI1LDk4MjksOTgzMSw5ODI3LDg4NTcsOTY3Miw5NjM1LDk2ODAsOTY4MSw5NjE4LDk2MzYsOTYzNyw5NjQwLDk2MzksOTYzOCw5NjQxLDk4MzIsOTc0Myw5NzQyLDk3NTYsOTc1OCwxODIsODIyNCw4MjI1''@;'; put 'put ''LDg1OTcsODU5OSw4NjAxLDg1OTgsODYwMCw5ODM3LDk4MzMsOTgzNCw5ODM2LDEyOTI3LDEyODI4LDg0NzAsMTMyNTUsODQ4MiwxMzI1MCwxMzI3Miw4NDgxLDgzNjQsMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTU2OSw1MTU3MCw1MTU3MSw1MTU3Myw1MTU3NCw1MTU3NSw1MTU3Niw1MTU3Nyw1MTU3OCw1MTU3OSw1MTU4MSw1MTU4Miw1MTU4Myw1MTU4NCw1MTU4NSw1MTU4Niw1MTU4Nyw1MTU4OCw1MTU4OSw1''@;'; put 'put ''MTU5MCw1MTU5MSw1MTU5NCw1MTU5NSw1MTU5Nyw1MTU5OCw1MTU5OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYwMSw1MTYwMiw1MTYwMyw1MTYwNCw1MTYwNSw1MTYwNiw1MTYwNyw1MTYxMCw1MTYxMiw1MTYxNCw1MTYxNSw1MTYxNiw1MTYxNyw1MTYxOCw1MTYxOSw1MTYy''@;'; put 'put ''MCw1MTYyMSw1MTYyMiw1MTYyMyw1MTYyNCw1MTYyNSw1MTYyNiw1MTYyNyw1MTYyOCw1MTYyOSw1MTYzMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTYzMSw1MTYzMiw1MTYzMyw1MTYzNCw1MTYzNSw1MTYzNiw1MTYzNyw1MTYzOCw1MTYzOSw1MTY0MCw1MTY0MSw1MTY0Miw1''@;'; put 'put ''MTY0Myw1MTY0NCw1MTY0NSw1MTY0Niw1MTY0Nyw1MTY1MCw1MTY1MSw1MTY1Myw1MTY1NCw1MTY1Nyw1MTY1OSw1MTY2MCw1MTY2MSw1MTY2Miw1MTY2Myw1MTY2Niw1MTY2OCw1MTY3MSw1MTY3Miw1MTY3NSw2NTI4MSw2NTI4Miw2NTI4Myw2NTI4NCw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4''@;'; put 'put ''OCw2NTI4OSw2NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2''@;'; put 'put ''NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTUxMCw2NTM0MSw2NTM0Miw2NTM0''@;'; put 'put ''Myw2NTM0NCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2''@;'; put 'put ''NTM3MSw2NTM3Miw2NTM3Myw2NTUwNyw1MTY3OCw1MTY3OSw1MTY4MSw1MTY4Myw1MTY4NSw1MTY4Niw1MTY4OCw1MTY4OSw1MTY5MCw1MTY5MSw1MTY5NCw1MTY5OCw1MTY5OSw1MTcwMCw1MTcwMSw1MTcwMiw1MTcwMyw1MTcwNiw1MTcwNyw1MTcwOSw1MTcxMCw1MTcxMSw1MTcxMyw1MTcx''@;'; put 'put ''NCw1MTcxNSw1MTcxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTcxNyw1MTcxOCw1MTcxOSw1MTcyMiw1MTcyNiw1MTcyNyw1MTcyOCw1MTcyOSw1MTczMCw1MTczMSw1MTczMyw1MTczNCw1MTczNSw1MTczNyw1MTczOCw1MTczOSw1MTc0MCw1MTc0MSw1MTc0Miw1MTc0Myw1''@;'; put 'put ''MTc0NCw1MTc0NSw1MTc0Niw1MTc0Nyw1MTc0OCw1MTc0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTc1MCw1MTc1MSw1MTc1Miw1MTc1NCw1MTc1NSw1MTc1Niw1MTc1Nyw1MTc1OCw1MTc1OSw1MTc2MCw1MTc2MSw1MTc2Miw1MTc2Myw1MTc2NCw1MTc2NSw1MTc2Niw1MTc2''@;'; put 'put ''Nyw1MTc2OCw1MTc2OSw1MTc3MCw1MTc3MSw1MTc3Miw1MTc3Myw1MTc3NCw1MTc3NSw1MTc3Niw1MTc3Nyw1MTc3OCw1MTc3OSw1MTc4MCw1MTc4MSw1MTc4MiwxMjU5MywxMjU5NCwxMjU5NSwxMjU5NiwxMjU5NywxMjU5OCwxMjU5OSwxMjYwMCwxMjYwMSwxMjYwMiwxMjYwMywxMjYwNCwx''@;'; put 'put ''MjYwNSwxMjYwNiwxMjYwNywxMjYwOCwxMjYwOSwxMjYxMCwxMjYxMSwxMjYxMiwxMjYxMywxMjYxNCwxMjYxNSwxMjYxNiwxMjYxNywxMjYxOCwxMjYxOSwxMjYyMCwxMjYyMSwxMjYyMiwxMjYyMywxMjYyNCwxMjYyNSwxMjYyNiwxMjYyNywxMjYyOCwxMjYyOSwxMjYzMCwxMjYzMSwxMjYz''@;'; put 'put ''MiwxMjYzMywxMjYzNCwxMjYzNSwxMjYzNiwxMjYzNywxMjYzOCwxMjYzOSwxMjY0MCwxMjY0MSwxMjY0MiwxMjY0MywxMjY0NCwxMjY0NSwxMjY0NiwxMjY0NywxMjY0OCwxMjY0OSwxMjY1MCwxMjY1MSwxMjY1MiwxMjY1MywxMjY1NCwxMjY1NSwxMjY1NiwxMjY1NywxMjY1OCwxMjY1OSwx''@;'; put 'put ''MjY2MCwxMjY2MSwxMjY2MiwxMjY2MywxMjY2NCwxMjY2NSwxMjY2NiwxMjY2NywxMjY2OCwxMjY2OSwxMjY3MCwxMjY3MSwxMjY3MiwxMjY3MywxMjY3NCwxMjY3NSwxMjY3NiwxMjY3NywxMjY3OCwxMjY3OSwxMjY4MCwxMjY4MSwxMjY4MiwxMjY4MywxMjY4NCwxMjY4NSwxMjY4Niw1MTc4''@;'; put 'put ''Myw1MTc4NCw1MTc4NSw1MTc4Niw1MTc4Nyw1MTc5MCw1MTc5MSw1MTc5Myw1MTc5NCw1MTc5NSw1MTc5Nyw1MTc5OCw1MTc5OSw1MTgwMCw1MTgwMSw1MTgwMiw1MTgwMyw1MTgwNiw1MTgxMCw1MTgxMSw1MTgxMiw1MTgxMyw1MTgxNCw1MTgxNSw1MTgxNyw1MTgxOCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1MTgxOSw1MTgyMCw1MTgyMSw1MTgyMiw1MTgyMyw1MTgyNCw1MTgyNSw1MTgyNiw1MTgyNyw1MTgyOCw1MTgyOSw1MTgzMCw1MTgzMSw1MTgzMiw1MTgzMyw1MTgzNCw1MTgzNSw1MTgzNiw1MTgzOCw1MTgzOSw1MTg0MCw1MTg0MSw1MTg0Miw1MTg0Myw1MTg0''@;'; put 'put ''NSw1MTg0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg0Nyw1MTg0OCw1MTg0OSw1MTg1MCw1MTg1MSw1MTg1Miw1MTg1Myw1MTg1NCw1MTg1NSw1MTg1Niw1MTg1Nyw1MTg1OCw1MTg1OSw1MTg2MCw1MTg2MSw1MTg2Miw1MTg2Myw1MTg2NSw1MTg2Niw1MTg2Nyw1MTg2OCw1''@;'; put 'put ''MTg2OSw1MTg3MCw1MTg3MSw1MTg3Miw1MTg3Myw1MTg3NCw1MTg3NSw1MTg3Niw1MTg3Nyw1MTg3OCw1MTg3OSw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgs''@;'; put 'put ''ODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODgwLDUx''@;'; put 'put ''ODgxLDUxODgyLDUxODgzLDUxODg0LDUxODg1LDUxODg2LDUxODg3LDUxODg4LDUxODg5LDUxODkwLDUxODkxLDUxODkyLDUxODkzLDUxODk0LDUxODk1LDUxODk2LDUxODk3LDUxODk4LDUxODk5LDUxOTAyLDUxOTAzLDUxOTA1LDUxOTA2LDUxOTA3LDUxOTA5LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDUxOTEwLDUxOTExLDUxOTEyLDUxOTEzLDUxOTE0LDUxOTE1LDUxOTE4LDUxOTIwLDUxOTIyLDUxOTI0LDUxOTI1LDUxOTI2LDUxOTI3LDUxOTMwLDUxOTMxLDUxOTMyLDUxOTMzLDUxOTM0LDUxOTM1LDUxOTM3LDUxOTM4LDUxOTM5LDUxOTQwLDUxOTQxLDUxOTQyLDUx''@;'; put 'put ''OTQzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTQ0LDUxOTQ1LDUxOTQ2LDUxOTQ3LDUxOTQ5LDUxOTUwLDUxOTUxLDUxOTUyLDUxOTUzLDUxOTU0LDUxOTU1LDUxOTU3LDUxOTU4LDUxOTU5LDUxOTYwLDUxOTYxLDUxOTYyLDUxOTYzLDUxOTY0LDUxOTY1LDUxOTY2LDUxOTY3''@;'; put 'put ''LDUxOTY4LDUxOTY5LDUxOTcwLDUxOTcxLDUxOTcyLDUxOTczLDUxOTc0LDUxOTc1LDUxOTc3LDUxOTc4LDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMx''@;'; put 'put ''LDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCw5NDkwLDk0ODksOTQ5OCw5NDk3LDk0OTQsOTQ5Myw5NDg2LDk0ODUsOTUwMiw5NTAzLDk1MDUsOTUwNiw5NTEwLDk1MTEsOTUxMyw5NTE0LDk1MTcsOTUxOCw5NTIxLDk1MjIsOTUyNSw5NTI2''@;'; put 'put ''LDk1MjksOTUzMCw5NTMzLDk1MzQsOTUzNiw5NTM3LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NzksNTE5ODAsNTE5ODEsNTE5ODIsNTE5ODMsNTE5ODUsNTE5ODYsNTE5ODcsNTE5ODksNTE5OTAsNTE5OTEsNTE5OTMsNTE5OTQsNTE5OTUsNTE5OTYsNTE5OTcsNTE5OTgsNTE5OTksNTIwMDIsNTIwMDMsNTIwMDQsNTIw''@;'; put 'put ''MDUsNTIwMDYsNTIwMDcsNTIwMDgsNTIwMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMTAsNTIwMTEsNTIwMTIsNTIwMTMsNTIwMTQsNTIwMTUsNTIwMTYsNTIwMTcsNTIwMTgsNTIwMTksNTIwMjAsNTIwMjEsNTIwMjIsNTIwMjMsNTIwMjQsNTIwMjUsNTIwMjYsNTIwMjcs''@;'; put 'put ''NTIwMjgsNTIwMjksNTIwMzAsNTIwMzEsNTIwMzIsNTIwMzQsNTIwMzUsNTIwMzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwMzcsNTIwMzgsNTIwMzksNTIwNDIsNTIwNDMsNTIwNDUsNTIwNDYsNTIwNDcsNTIwNDksNTIwNTAsNTIwNTEsNTIwNTIsNTIwNTMsNTIwNTQsNTIw''@;'; put 'put ''NTUsNTIwNTgsNTIwNTksNTIwNjAsNTIwNjIsNTIwNjMsNTIwNjQsNTIwNjUsNTIwNjYsNTIwNjcsNTIwNjksNTIwNzAsNTIwNzEsNTIwNzIsNTIwNzMsNTIwNzQsNTIwNzUsNTIwNzYsMTMyMDUsMTMyMDYsMTMyMDcsODQ2NywxMzIwOCwxMzI1MiwxMzIxOSwxMzIyMCwxMzIyMSwxMzIyMiwx''@;'; put 'put ''MzIwOSwxMzIxMCwxMzIxMSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNSwxMzIxNiwxMzIxNywxMzIxOCwxMzI1OCwxMzE5NywxMzE5OCwxMzE5OSwxMzI2MywxMzE5MiwxMzE5MywxMzI1NiwxMzIyMywxMzIyNCwxMzIzMiwxMzIzMywxMzIzNCwxMzIzNSwxMzIzNiwxMzIzNywxMzIzOCwxMzIz''@;'; put 'put ''OSwxMzI0MCwxMzI0MSwxMzE4NCwxMzE4NSwxMzE4NiwxMzE4NywxMzE4OCwxMzI0MiwxMzI0MywxMzI0NCwxMzI0NSwxMzI0NiwxMzI0NywxMzIwMCwxMzIwMSwxMzIwMiwxMzIwMywxMzIwNCw4NDg2LDEzMjQ4LDEzMjQ5LDEzMTk0LDEzMTk1LDEzMTk2LDEzMjcwLDEzMjUzLDEzMjI5LDEz''@;'; put 'put ''MjMwLDEzMjMxLDEzMjc1LDEzMjI1LDEzMjI2LDEzMjI3LDEzMjI4LDEzMjc3LDEzMjY0LDEzMjY3LDEzMjUxLDEzMjU3LDEzMjc2LDEzMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDc3LDUy''@;'; put 'put ''MDc4LDUyMDc5LDUyMDgwLDUyMDgxLDUyMDgyLDUyMDgzLDUyMDg0LDUyMDg1LDUyMDg2LDUyMDg3LDUyMDkwLDUyMDkxLDUyMDkyLDUyMDkzLDUyMDk0LDUyMDk1LDUyMDk2LDUyMDk3LDUyMDk4LDUyMDk5LDUyMTAwLDUyMTAxLDUyMTAyLDUyMTAzLDUyMTA0LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDUyMTA1LDUyMTA2LDUyMTA3LDUyMTA4LDUyMTA5LDUyMTEwLDUyMTExLDUyMTEyLDUyMTEzLDUyMTE0LDUyMTE1LDUyMTE2LDUyMTE3LDUyMTE4LDUyMTE5LDUyMTIwLDUyMTIxLDUyMTIyLDUyMTIzLDUyMTI1LDUyMTI2LDUyMTI3LDUyMTI4LDUyMTI5LDUyMTMwLDUy''@;'; put 'put ''MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTMyLDUyMTMzLDUyMTM0LDUyMTM1LDUyMTM2LDUyMTM3LDUyMTM4LDUyMTM5LDUyMTQwLDUyMTQxLDUyMTQyLDUyMTQzLDUyMTQ0LDUyMTQ1LDUyMTQ2LDUyMTQ3LDUyMTQ4LDUyMTQ5LDUyMTUwLDUyMTUxLDUyMTUzLDUyMTU0''@;'; put 'put ''LDUyMTU1LDUyMTU2LDUyMTU3LDUyMTU4LDUyMTU5LDUyMTYwLDUyMTYxLDUyMTYyLDUyMTYzLDUyMTY0LDE5OCwyMDgsMTcwLDI5NCxudWxsLDMwNixudWxsLDMxOSwzMjEsMjE2LDMzOCwxODYsMjIyLDM1OCwzMzAsbnVsbCwxMjg5NiwxMjg5NywxMjg5OCwxMjg5OSwxMjkwMCwxMjkwMSwx''@;'; put 'put ''MjkwMiwxMjkwMywxMjkwNCwxMjkwNSwxMjkwNiwxMjkwNywxMjkwOCwxMjkwOSwxMjkxMCwxMjkxMSwxMjkxMiwxMjkxMywxMjkxNCwxMjkxNSwxMjkxNiwxMjkxNywxMjkxOCwxMjkxOSwxMjkyMCwxMjkyMSwxMjkyMiwxMjkyMyw5NDI0LDk0MjUsOTQyNiw5NDI3LDk0MjgsOTQyOSw5NDMw''@;'; put 'put ''LDk0MzEsOTQzMiw5NDMzLDk0MzQsOTQzNSw5NDM2LDk0MzcsOTQzOCw5NDM5LDk0NDAsOTQ0MSw5NDQyLDk0NDMsOTQ0NCw5NDQ1LDk0NDYsOTQ0Nyw5NDQ4LDk0NDksOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1''@;'; put 'put ''LDkzMjYsMTg5LDg1MzEsODUzMiwxODgsMTkwLDg1MzksODU0MCw4NTQxLDg1NDIsNTIxNjUsNTIxNjYsNTIxNjcsNTIxNjgsNTIxNjksNTIxNzAsNTIxNzEsNTIxNzIsNTIxNzMsNTIxNzQsNTIxNzUsNTIxNzYsNTIxNzcsNTIxNzgsNTIxNzksNTIxODEsNTIxODIsNTIxODMsNTIxODQsNTIx''@;'; put 'put ''ODUsNTIxODYsNTIxODcsNTIxODgsNTIxODksNTIxOTAsNTIxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxOTIsNTIxOTMsNTIxOTQsNTIxOTUsNTIxOTcsNTIxOTgsNTIyMDAsNTIyMDIsNTIyMDMsNTIyMDQsNTIyMDUsNTIyMDYsNTIyMDcsNTIyMDgsNTIyMDksNTIyMTAs''@;'; put 'put ''NTIyMTEsNTIyMTIsNTIyMTMsNTIyMTQsNTIyMTUsNTIyMTYsNTIyMTcsNTIyMTgsNTIyMTksNTIyMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIyMjEsNTIyMjIsNTIyMjMsNTIyMjQsNTIyMjUsNTIyMjYsNTIyMjcsNTIyMjgsNTIyMjksNTIyMzAsNTIyMzEsNTIyMzIsNTIy''@;'; put 'put ''MzMsNTIyMzQsNTIyMzUsNTIyMzgsNTIyMzksNTIyNDEsNTIyNDIsNTIyNDMsNTIyNDUsNTIyNDYsNTIyNDcsNTIyNDgsNTIyNDksNTIyNTAsNTIyNTEsNTIyNTQsNTIyNTUsNTIyNTYsNTIyNTksNTIyNjAsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMCwzMjIsMjQ4LDMzOSwyMjMs''@;'; put 'put ''MjU0LDM1OSwzMzEsMzI5LDEyODAwLDEyODAxLDEyODAyLDEyODAzLDEyODA0LDEyODA1LDEyODA2LDEyODA3LDEyODA4LDEyODA5LDEyODEwLDEyODExLDEyODEyLDEyODEzLDEyODE0LDEyODE1LDEyODE2LDEyODE3LDEyODE4LDEyODE5LDEyODIwLDEyODIxLDEyODIyLDEyODIzLDEyODI0''@;'; put 'put ''LDEyODI1LDEyODI2LDEyODI3LDkzNzIsOTM3Myw5Mzc0LDkzNzUsOTM3Niw5Mzc3LDkzNzgsOTM3OSw5MzgwLDkzODEsOTM4Miw5MzgzLDkzODQsOTM4NSw5Mzg2LDkzODcsOTM4OCw5Mzg5LDkzOTAsOTM5MSw5MzkyLDkzOTMsOTM5NCw5Mzk1LDkzOTYsOTM5Nyw5MzMyLDkzMzMsOTMzNCw5''@;'; put 'put ''MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0NiwxODUsMTc4LDE3OSw4MzA4LDgzMTksODMyMSw4MzIyLDgzMjMsODMyNCw1MjI2MSw1MjI2Miw1MjI2Niw1MjI2Nyw1MjI2OSw1MjI3MSw1MjI3Myw1MjI3NCw1MjI3NSw1MjI3Niw1MjI3''@;'; put 'put ''Nyw1MjI3OCw1MjI3OSw1MjI4Miw1MjI4Nyw1MjI4OCw1MjI4OSw1MjI5MCw1MjI5MSw1MjI5NCw1MjI5NSw1MjI5Nyw1MjI5OCw1MjI5OSw1MjMwMSw1MjMwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMwMyw1MjMwNCw1MjMwNSw1MjMwNiw1MjMwNyw1MjMxMCw1MjMxNCw1''@;'; put 'put ''MjMxNSw1MjMxNiw1MjMxNyw1MjMxOCw1MjMxOSw1MjMyMSw1MjMyMiw1MjMyMyw1MjMyNSw1MjMyNyw1MjMyOSw1MjMzMCw1MjMzMSw1MjMzMiw1MjMzMyw1MjMzNCw1MjMzNSw1MjMzNyw1MjMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjMzOSw1MjM0MCw1MjM0Miw1MjM0''@;'; put 'put ''Myw1MjM0NCw1MjM0NSw1MjM0Niw1MjM0Nyw1MjM0OCw1MjM0OSw1MjM1MCw1MjM1MSw1MjM1Miw1MjM1Myw1MjM1NCw1MjM1NSw1MjM1Niw1MjM1Nyw1MjM1OCw1MjM1OSw1MjM2MCw1MjM2MSw1MjM2Miw1MjM2Myw1MjM2NCw1MjM2NSw1MjM2Niw1MjM2Nyw1MjM2OCw1MjM2OSw1MjM3MCw1''@;'; put 'put ''MjM3MSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3''@;'; put 'put ''OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwx''@;'; put 'put ''MjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQz''@;'; put 'put ''NCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzNzIsNTIzNzMsNTIzNzQsNTIzNzUsNTIzNzgsNTIzNzksNTIzODEsNTIzODIsNTIzODMsNTIzODUsNTIzODYsNTIzODcsNTIzODgsNTIzODksNTIzOTAsNTIzOTEsNTIzOTQs''@;'; put 'put ''NTIzOTgsNTIzOTksNTI0MDAsNTI0MDEsNTI0MDIsNTI0MDMsNTI0MDYsNTI0MDcsNTI0MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0MTAsNTI0MTEsNTI0MTMsNTI0MTQsNTI0MTUsNTI0MTYsNTI0MTcsNTI0MTgsNTI0MTksNTI0MjIsNTI0MjQsNTI0MjYsNTI0MjcsNTI0''@;'; put 'put ''MjgsNTI0MjksNTI0MzAsNTI0MzEsNTI0MzMsNTI0MzQsNTI0MzUsNTI0MzcsNTI0MzgsNTI0MzksNTI0NDAsNTI0NDEsNTI0NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NDMsNTI0NDQsNTI0NDUsNTI0NDYsNTI0NDcsNTI0NDgsNTI0NDksNTI0NTAsNTI0NTEsNTI0NTMs''@;'; put 'put ''NTI0NTQsNTI0NTUsNTI0NTYsNTI0NTcsNTI0NTgsNTI0NTksNTI0NjEsNTI0NjIsNTI0NjMsNTI0NjUsNTI0NjYsNTI0NjcsNTI0NjgsNTI0NjksNTI0NzAsNTI0NzEsNTI0NzIsNTI0NzMsNTI0NzQsNTI0NzUsNTI0NzYsNTI0NzcsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0''@;'; put 'put ''NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEs''@;'; put 'put ''MTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1''@;'; put 'put ''MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDc4LDUyNDc5LDUyNDgwLDUyNDgyLDUyNDgzLDUyNDg0LDUyNDg1LDUyNDg2LDUyNDg3LDUyNDkwLDUyNDkxLDUyNDkzLDUyNDk0LDUyNDk1LDUyNDk3LDUyNDk4LDUyNDk5LDUyNTAwLDUyNTAxLDUyNTAyLDUyNTAzLDUyNTA2LDUyNTA4''@;'; put 'put ''LDUyNTEwLDUyNTExLDUyNTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTEzLDUyNTE0LDUyNTE1LDUyNTE3LDUyNTE4LDUyNTE5LDUyNTIxLDUyNTIyLDUyNTIzLDUyNTI1LDUyNTI2LDUyNTI3LDUyNTI4LDUyNTI5LDUyNTMwLDUyNTMxLDUyNTMyLDUyNTMzLDUyNTM0LDUy''@;'; put 'put ''NTM1LDUyNTM2LDUyNTM4LDUyNTM5LDUyNTQwLDUyNTQxLDUyNTQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTQzLDUyNTQ0LDUyNTQ1LDUyNTQ2LDUyNTQ3LDUyNTQ4LDUyNTQ5LDUyNTUwLDUyNTUxLDUyNTUyLDUyNTUzLDUyNTU0LDUyNTU1LDUyNTU2LDUyNTU3LDUyNTU4''@;'; put 'put ''LDUyNTU5LDUyNTYwLDUyNTYxLDUyNTYyLDUyNTYzLDUyNTY0LDUyNTY1LDUyNTY2LDUyNTY3LDUyNTY4LDUyNTY5LDUyNTcwLDUyNTcxLDUyNTczLDUyNTc0LDUyNTc1LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1''@;'; put 'put ''MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEw''@;'; put 'put ''MiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NzcsNTI1NzgsNTI1NzksNTI1ODEsNTI1ODIsNTI1ODMsNTI1ODQsNTI1ODUsNTI1ODYsNTI1ODcsNTI1OTAsNTI1OTIsNTI1OTQsNTI1OTUsNTI1OTYsNTI1''@;'; put 'put ''OTcsNTI1OTgsNTI1OTksNTI2MDEsNTI2MDIsNTI2MDMsNTI2MDQsNTI2MDUsNTI2MDYsNTI2MDcsNTI2MDgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2MDksNTI2MTAsNTI2MTEsNTI2MTIsNTI2MTMsNTI2MTQsNTI2MTUsNTI2MTcsNTI2MTgsNTI2MTksNTI2MjAsNTI2MjEs''@;'; put 'put ''NTI2MjIsNTI2MjMsNTI2MjQsNTI2MjUsNTI2MjYsNTI2MjcsNTI2MzAsNTI2MzEsNTI2MzMsNTI2MzQsNTI2MzUsNTI2MzcsNTI2MzgsNTI2MzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NDAsNTI2NDEsNTI2NDIsNTI2NDMsNTI2NDYsNTI2NDgsNTI2NTAsNTI2NTEsNTI2''@;'; put 'put ''NTIsNTI2NTMsNTI2NTQsNTI2NTUsNTI2NTcsNTI2NTgsNTI2NTksNTI2NjAsNTI2NjEsNTI2NjIsNTI2NjMsNTI2NjQsNTI2NjUsNTI2NjYsNTI2NjcsNTI2NjgsNTI2NjksNTI2NzAsNTI2NzEsNTI2NzIsNTI2NzMsNTI2NzQsNTI2NzUsNTI2NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY3OCw1MjY3OSw1MjY4MCw1MjY4MSw1MjY4Miw1MjY4Myw1MjY4NSw1MjY4Niw1''@;'; put 'put ''MjY4Nyw1MjY4OSw1MjY5MCw1MjY5MSw1MjY5Miw1MjY5Myw1MjY5NCw1MjY5NSw1MjY5Niw1MjY5Nyw1MjY5OCw1MjY5OSw1MjcwMCw1MjcwMSw1MjcwMiw1MjcwMyw1MjcwNCw1MjcwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjcwNiw1MjcwNyw1MjcwOCw1MjcwOSw1Mjcx''@;'; put 'put ''MCw1MjcxMSw1MjcxMyw1MjcxNCw1MjcxNSw1MjcxNyw1MjcxOCw1MjcxOSw1MjcyMSw1MjcyMiw1MjcyMyw1MjcyNCw1MjcyNSw1MjcyNiw1MjcyNyw1MjczMCw1MjczMiw1MjczNCw1MjczNSw1MjczNiw1MjczNyw1MjczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjczOSw1''@;'; put 'put ''Mjc0MSw1Mjc0Miw1Mjc0Myw1Mjc0NSw1Mjc0Niw1Mjc0Nyw1Mjc0OSw1Mjc1MCw1Mjc1MSw1Mjc1Miw1Mjc1Myw1Mjc1NCw1Mjc1NSw1Mjc1Nyw1Mjc1OCw1Mjc1OSw1Mjc2MCw1Mjc2Miw1Mjc2Myw1Mjc2NCw1Mjc2NSw1Mjc2Niw1Mjc2Nyw1Mjc3MCw1Mjc3MSw1Mjc3Myw1Mjc3NCw1Mjc3''@;'; put 'put ''NSw1Mjc3Nyw1Mjc3OCw1Mjc3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzgw''@;'; put 'put ''LDUyNzgxLDUyNzgyLDUyNzgzLDUyNzg2LDUyNzg4LDUyNzkwLDUyNzkxLDUyNzkyLDUyNzkzLDUyNzk0LDUyNzk1LDUyNzk2LDUyNzk3LDUyNzk4LDUyNzk5LDUyODAwLDUyODAxLDUyODAyLDUyODAzLDUyODA0LDUyODA1LDUyODA2LDUyODA3LDUyODA4LDUyODA5LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDUyODEwLDUyODExLDUyODEyLDUyODEzLDUyODE0LDUyODE1LDUyODE2LDUyODE3LDUyODE4LDUyODE5LDUyODIwLDUyODIxLDUyODIyLDUyODIzLDUyODI2LDUyODI3LDUyODI5LDUyODMwLDUyODM0LDUyODM1LDUyODM2LDUyODM3LDUyODM4LDUyODM5LDUyODQy''@;'; put 'put ''LDUyODQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODQ2LDUyODQ3LDUyODQ4LDUyODQ5LDUyODUwLDUyODUxLDUyODU0LDUyODU1LDUyODU3LDUyODU4LDUyODU5LDUyODYxLDUyODYyLDUyODYzLDUyODY0LDUyODY1LDUyODY2LDUyODY3LDUyODcwLDUyODcyLDUyODc0LDUy''@;'; put 'put ''ODc1LDUyODc2LDUyODc3LDUyODc4LDUyODc5LDUyODgyLDUyODgzLDUyODg1LDUyODg2LDUyODg3LDUyODg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4OTAsNTI4OTEsNTI4OTIsNTI4OTMsNTI4OTQsNTI4OTUsNTI4OTgsNTI5MDIsNTI5MDMsNTI5MDQsNTI5MDUsNTI5MDYsNTI5MDcsNTI5MTAsNTI5MTEsNTI5MTIsNTI5MTMsNTI5MTQsNTI5MTUsNTI5MTYsNTI5MTcs''@;'; put 'put ''NTI5MTgsNTI5MTksNTI5MjAsNTI5MjEsNTI5MjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5MjMsNTI5MjQsNTI5MjUsNTI5MjYsNTI5MjcsNTI5MjgsNTI5MzAsNTI5MzEsNTI5MzIsNTI5MzMsNTI5MzQsNTI5MzUsNTI5MzYsNTI5MzcsNTI5MzgsNTI5MzksNTI5NDAsNTI5''@;'; put 'put ''NDEsNTI5NDIsNTI5NDMsNTI5NDQsNTI5NDUsNTI5NDYsNTI5NDcsNTI5NDgsNTI5NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI5NTAsNTI5NTEsNTI5NTIsNTI5NTMsNTI5NTQsNTI5NTUsNTI5NTYsNTI5NTcsNTI5NTgsNTI5NTksNTI5NjAsNTI5NjEsNTI5NjIsNTI5NjMs''@;'; put 'put ''NTI5NjYsNTI5NjcsNTI5NjksNTI5NzAsNTI5NzMsNTI5NzQsNTI5NzUsNTI5NzYsNTI5NzcsNTI5NzgsNTI5NzksNTI5ODIsNTI5ODYsNTI5ODcsNTI5ODgsNTI5ODksNTI5OTAsNTI5OTEsNDQwMzIsNDQwMzMsNDQwMzYsNDQwMzksNDQwNDAsNDQwNDEsNDQwNDIsNDQwNDgsNDQwNDksNDQw''@;'; put 'put ''NTAsNDQwNTEsNDQwNTIsNDQwNTMsNDQwNTQsNDQwNTUsNDQwNTcsNDQwNTgsNDQwNTksNDQwNjAsNDQwNjEsNDQwNjQsNDQwNjgsNDQwNzYsNDQwNzcsNDQwNzksNDQwODAsNDQwODEsNDQwODgsNDQwODksNDQwOTIsNDQwOTYsNDQxMDcsNDQxMDksNDQxMTYsNDQxMjAsNDQxMjQsNDQxNDQs''@;'; put 'put ''NDQxNDUsNDQxNDgsNDQxNTEsNDQxNTIsNDQxNTQsNDQxNjAsNDQxNjEsNDQxNjMsNDQxNjQsNDQxNjUsNDQxNjYsNDQxNjksNDQxNzAsNDQxNzEsNDQxNzIsNDQxNzYsNDQxODAsNDQxODgsNDQxODksNDQxOTEsNDQxOTIsNDQxOTMsNDQyMDAsNDQyMDEsNDQyMDIsNDQyMDQsNDQyMDcsNDQy''@;'; put 'put ''MDgsNDQyMTYsNDQyMTcsNDQyMTksNDQyMjAsNDQyMjEsNDQyMjUsNDQyMjgsNDQyMzIsNDQyMzYsNDQyNDUsNDQyNDcsNDQyNTYsNDQyNTcsNDQyNjAsNDQyNjMsNDQyNjQsNDQyNjYsNDQyNjgsNDQyNzEsNDQyNzIsNDQyNzMsNDQyNzUsNDQyNzcsNDQyNzgsNDQyODQsNDQyODUsNDQyODgs''@;'; put 'put ''NDQyOTIsNDQyOTQsNTI5OTQsNTI5OTUsNTI5OTcsNTI5OTgsNTI5OTksNTMwMDEsNTMwMDIsNTMwMDMsNTMwMDQsNTMwMDUsNTMwMDYsNTMwMDcsNTMwMTAsNTMwMTIsNTMwMTQsNTMwMTUsNTMwMTYsNTMwMTcsNTMwMTgsNTMwMTksNTMwMjEsNTMwMjIsNTMwMjMsNTMwMjUsNTMwMjYsNTMw''@;'; put 'put ''MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwMjksNTMwMzAsNTMwMzEsNTMwMzIsNTMwMzMsNTMwMzQsNTMwMzUsNTMwMzgsNTMwNDIsNTMwNDMsNTMwNDQsNTMwNDUsNTMwNDYsNTMwNDcsNTMwNDksNTMwNTAsNTMwNTEsNTMwNTIsNTMwNTMsNTMwNTQsNTMwNTUsNTMwNTYs''@;'; put 'put ''NTMwNTcsNTMwNTgsNTMwNTksNTMwNjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMwNjEsNTMwNjIsNTMwNjMsNTMwNjQsNTMwNjUsNTMwNjYsNTMwNjcsNTMwNjgsNTMwNjksNTMwNzAsNTMwNzEsNTMwNzIsNTMwNzMsNTMwNzQsNTMwNzUsNTMwNzgsNTMwNzksNTMwODEsNTMw''@;'; put 'put ''ODIsNTMwODMsNTMwODUsNTMwODYsNTMwODcsNTMwODgsNTMwODksNTMwOTAsNTMwOTEsNTMwOTQsNTMwOTYsNTMwOTgsNTMwOTksNTMxMDAsNDQzMDAsNDQzMDEsNDQzMDMsNDQzMDUsNDQzMTIsNDQzMTYsNDQzMjAsNDQzMjksNDQzMzIsNDQzMzMsNDQzNDAsNDQzNDEsNDQzNDQsNDQzNDgs''@;'; put 'put ''NDQzNTYsNDQzNTcsNDQzNTksNDQzNjEsNDQzNjgsNDQzNzIsNDQzNzYsNDQzODUsNDQzODcsNDQzOTYsNDQzOTcsNDQ0MDAsNDQ0MDMsNDQ0MDQsNDQ0MDUsNDQ0MDYsNDQ0MTEsNDQ0MTIsNDQ0MTMsNDQ0MTUsNDQ0MTcsNDQ0MTgsNDQ0MjQsNDQ0MjUsNDQ0MjgsNDQ0MzIsNDQ0NDQsNDQ0''@;'; put 'put ''NDUsNDQ0NTIsNDQ0NzEsNDQ0ODAsNDQ0ODEsNDQ0ODQsNDQ0ODgsNDQ0OTYsNDQ0OTcsNDQ0OTksNDQ1MDgsNDQ1MTIsNDQ1MTYsNDQ1MzYsNDQ1MzcsNDQ1NDAsNDQ1NDMsNDQ1NDQsNDQ1NDUsNDQ1NTIsNDQ1NTMsNDQ1NTUsNDQ1NTcsNDQ1NjQsNDQ1OTIsNDQ1OTMsNDQ1OTYsNDQ1OTks''@;'; put 'put ''NDQ2MDAsNDQ2MDIsNDQ2MDgsNDQ2MDksNDQ2MTEsNDQ2MTMsNDQ2MTQsNDQ2MTgsNDQ2MjAsNDQ2MjEsNDQ2MjIsNDQ2MjQsNDQ2MjgsNDQ2MzAsNDQ2MzYsNDQ2MzcsNDQ2MzksNDQ2NDAsNDQ2NDEsNDQ2NDUsNDQ2NDgsNDQ2NDksNDQ2NTIsNDQ2NTYsNDQ2NjQsNTMxMDEsNTMxMDIsNTMx''@;'; put 'put ''MDMsNTMxMDYsNTMxMDcsNTMxMDksNTMxMTAsNTMxMTEsNTMxMTMsNTMxMTQsNTMxMTUsNTMxMTYsNTMxMTcsNTMxMTgsNTMxMTksNTMxMjEsNTMxMjIsNTMxMjMsNTMxMjQsNTMxMjYsNTMxMjcsNTMxMjgsNTMxMjksNTMxMzAsNTMxMzEsNTMxMzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTMxMzQsNTMxMzUsNTMxMzYsNTMxMzcsNTMxMzgsNTMxMzksNTMxNDAsNTMxNDEsNTMxNDIsNTMxNDMsNTMxNDQsNTMxNDUsNTMxNDYsNTMxNDcsNTMxNDgsNTMxNDksNTMxNTAsNTMxNTEsNTMxNTIsNTMxNTQsNTMxNTUsNTMxNTYsNTMxNTcsNTMxNTgsNTMxNTksNTMxNjEsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMxNjIsNTMxNjMsNTMxNjQsNTMxNjUsNTMxNjYsNTMxNjcsNTMxNjksNTMxNzAsNTMxNzEsNTMxNzIsNTMxNzMsNTMxNzQsNTMxNzUsNTMxNzYsNTMxNzcsNTMxNzgsNTMxNzksNTMxODAsNTMxODEsNTMxODIsNTMxODMsNTMxODQsNTMxODUs''@;'; put 'put ''NTMxODYsNTMxODcsNTMxODksNTMxOTAsNTMxOTEsNTMxOTIsNTMxOTMsNTMxOTQsNTMxOTUsNDQ2NjUsNDQ2NjcsNDQ2NjgsNDQ2NjksNDQ2NzYsNDQ2NzcsNDQ2ODQsNDQ3MzIsNDQ3MzMsNDQ3MzQsNDQ3MzYsNDQ3NDAsNDQ3NDgsNDQ3NDksNDQ3NTEsNDQ3NTIsNDQ3NTMsNDQ3NjAsNDQ3''@;'; put 'put ''NjEsNDQ3NjQsNDQ3NzYsNDQ3NzksNDQ3ODEsNDQ3ODgsNDQ3OTIsNDQ3OTYsNDQ4MDcsNDQ4MDgsNDQ4MTMsNDQ4MTYsNDQ4NDQsNDQ4NDUsNDQ4NDgsNDQ4NTAsNDQ4NTIsNDQ4NjAsNDQ4NjEsNDQ4NjMsNDQ4NjUsNDQ4NjYsNDQ4NjcsNDQ4NzIsNDQ4NzMsNDQ4ODAsNDQ4OTIsNDQ4OTMs''@;'; put 'put ''NDQ5MDAsNDQ5MDEsNDQ5MjEsNDQ5MjgsNDQ5MzIsNDQ5MzYsNDQ5NDQsNDQ5NDUsNDQ5NDksNDQ5NTYsNDQ5ODQsNDQ5ODUsNDQ5ODgsNDQ5OTIsNDQ5OTksNDVlMyw0NTAwMSw0NTAwMyw0NTAwNSw0NTAwNiw0NTAxMiw0NTAyMCw0NTAzMiw0NTAzMyw0NTA0MCw0NTA0MSw0NTA0NCw0NTA0''@;'; put 'put ''OCw0NTA1Niw0NTA1Nyw0NTA2MCw0NTA2OCw0NTA3Miw0NTA3Niw0NTA4NCw0NTA4NSw0NTA5Niw0NTEyNCw0NTEyNSw0NTEyOCw0NTEzMCw0NTEzMiw0NTEzNCw0NTEzOSw0NTE0MCw0NTE0MSw0NTE0Myw0NTE0NSw1MzE5Niw1MzE5Nyw1MzE5OCw1MzE5OSw1MzIwMCw1MzIwMSw1MzIwMiw1''@;'; put 'put ''MzIwMyw1MzIwNCw1MzIwNSw1MzIwNiw1MzIwNyw1MzIwOCw1MzIwOSw1MzIxMCw1MzIxMSw1MzIxMiw1MzIxMyw1MzIxNCw1MzIxNSw1MzIxOCw1MzIxOSw1MzIyMSw1MzIyMiw1MzIyMyw1MzIyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzIyNiw1MzIyNyw1MzIyOCw1MzIy''@;'; put 'put ''OSw1MzIzMCw1MzIzMSw1MzIzNCw1MzIzNiw1MzIzOCw1MzIzOSw1MzI0MCw1MzI0MSw1MzI0Miw1MzI0Myw1MzI0NSw1MzI0Niw1MzI0Nyw1MzI0OSw1MzI1MCw1MzI1MSw1MzI1Myw1MzI1NCw1MzI1NSw1MzI1Niw1MzI1Nyw1MzI1OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MzI1OSw1MzI2MCw1MzI2MSw1MzI2Miw1MzI2Myw1MzI2NCw1MzI2Niw1MzI2Nyw1MzI2OCw1MzI2OSw1MzI3MCw1MzI3MSw1MzI3Myw1MzI3NCw1MzI3NSw1MzI3Niw1MzI3Nyw1MzI3OCw1MzI3OSw1MzI4MCw1MzI4MSw1MzI4Miw1MzI4Myw1MzI4NCw1MzI4NSw1MzI4Niw1MzI4Nyw1MzI4''@;'; put 'put ''OCw1MzI4OSw1MzI5MCw1MzI5MSw1MzI5Miw0NTE0OSw0NTE4MCw0NTE4MSw0NTE4NCw0NTE4OCw0NTE5Niw0NTE5Nyw0NTE5OSw0NTIwMSw0NTIwOCw0NTIwOSw0NTIxMCw0NTIxMiw0NTIxNSw0NTIxNiw0NTIxNyw0NTIxOCw0NTIyNCw0NTIyNSw0NTIyNyw0NTIyOCw0NTIyOSw0NTIzMCw0''@;'; put 'put ''NTIzMSw0NTIzMyw0NTIzNSw0NTIzNiw0NTIzNyw0NTI0MCw0NTI0NCw0NTI1Miw0NTI1Myw0NTI1NSw0NTI1Niw0NTI1Nyw0NTI2NCw0NTI2NSw0NTI2OCw0NTI3Miw0NTI4MCw0NTI4NSw0NTMyMCw0NTMyMSw0NTMyMyw0NTMyNCw0NTMyOCw0NTMzMCw0NTMzMSw0NTMzNiw0NTMzNyw0NTMz''@;'; put 'put ''OSw0NTM0MCw0NTM0MSw0NTM0Nyw0NTM0OCw0NTM0OSw0NTM1Miw0NTM1Niw0NTM2NCw0NTM2NSw0NTM2Nyw0NTM2OCw0NTM2OSw0NTM3Niw0NTM3Nyw0NTM4MCw0NTM4NCw0NTM5Miw0NTM5Myw0NTM5Niw0NTM5Nyw0NTQwMCw0NTQwNCw0NTQwOCw0NTQzMiw0NTQzMyw0NTQzNiw0NTQ0MCw0''@;'; put 'put ''NTQ0Miw0NTQ0OCw0NTQ0OSw0NTQ1MSw0NTQ1Myw0NTQ1OCw0NTQ1OSw0NTQ2MCw0NTQ2NCw0NTQ2OCw0NTQ4MCw0NTUxNiw0NTUyMCw0NTUyNCw0NTUzMiw0NTUzMyw1MzI5NCw1MzI5NSw1MzI5Niw1MzI5Nyw1MzI5OCw1MzI5OSw1MzMwMiw1MzMwMyw1MzMwNSw1MzMwNiw1MzMwNyw1MzMw''@;'; put 'put ''OSw1MzMxMCw1MzMxMSw1MzMxMiw1MzMxMyw1MzMxNCw1MzMxNSw1MzMxOCw1MzMyMCw1MzMyMiw1MzMyMyw1MzMyNCw1MzMyNSw1MzMyNiw1MzMyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzMyOSw1MzMzMCw1MzMzMSw1MzMzMyw1MzMzNCw1MzMzNSw1MzMzNyw1MzMzOCw1''@;'; put 'put ''MzMzOSw1MzM0MCw1MzM0MSw1MzM0Miw1MzM0Myw1MzM0NSw1MzM0Niw1MzM0Nyw1MzM0OCw1MzM0OSw1MzM1MCw1MzM1MSw1MzM1Miw1MzM1Myw1MzM1NCw1MzM1NSw1MzM1OCw1MzM1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzM2MSw1MzM2Miw1MzM2Myw1MzM2NSw1MzM2''@;'; put 'put ''Niw1MzM2Nyw1MzM2OCw1MzM2OSw1MzM3MCw1MzM3MSw1MzM3NCw1MzM3NSw1MzM3Niw1MzM3OCw1MzM3OSw1MzM4MCw1MzM4MSw1MzM4Miw1MzM4Myw1MzM4NCw1MzM4NSw1MzM4Niw1MzM4Nyw1MzM4OCw1MzM4OSw1MzM5MCw1MzM5MSw1MzM5Miw1MzM5Myw1MzM5NCw1MzM5NSw1MzM5Niw0''@;'; put 'put ''NTUzNSw0NTU0NCw0NTU0NSw0NTU0OCw0NTU1Miw0NTU2MSw0NTU2Myw0NTU2NSw0NTU3Miw0NTU3Myw0NTU3Niw0NTU3OSw0NTU4MCw0NTU4OCw0NTU4OSw0NTU5MSw0NTU5Myw0NTYwMCw0NTYyMCw0NTYyOCw0NTY1Niw0NTY2MCw0NTY2NCw0NTY3Miw0NTY3Myw0NTY4NCw0NTY4NSw0NTY5''@;'; put 'put ''Miw0NTcwMCw0NTcwMSw0NTcwNSw0NTcxMiw0NTcxMyw0NTcxNiw0NTcyMCw0NTcyMSw0NTcyMiw0NTcyOCw0NTcyOSw0NTczMSw0NTczMyw0NTczNCw0NTczOCw0NTc0MCw0NTc0NCw0NTc0OCw0NTc2OCw0NTc2OSw0NTc3Miw0NTc3Niw0NTc3OCw0NTc4NCw0NTc4NSw0NTc4Nyw0NTc4OSw0''@;'; put 'put ''NTc5NCw0NTc5Niw0NTc5Nyw0NTc5OCw0NTgwMCw0NTgwMyw0NTgwNCw0NTgwNSw0NTgwNiw0NTgwNyw0NTgxMSw0NTgxMiw0NTgxMyw0NTgxNSw0NTgxNiw0NTgxNyw0NTgxOCw0NTgxOSw0NTgyMyw0NTgyNCw0NTgyNSw0NTgyOCw0NTgzMiw0NTg0MCw0NTg0MSw0NTg0Myw0NTg0NCw0NTg0''@;'; put 'put ''NSw0NTg1Miw0NTkwOCw0NTkwOSw0NTkxMCw0NTkxMiw0NTkxNSw0NTkxNiw0NTkxOCw0NTkxOSw0NTkyNCw0NTkyNSw1MzM5Nyw1MzM5OCw1MzM5OSw1MzQwMCw1MzQwMSw1MzQwMiw1MzQwMyw1MzQwNCw1MzQwNSw1MzQwNiw1MzQwNyw1MzQwOCw1MzQwOSw1MzQxMCw1MzQxMSw1MzQxNCw1''@;'; put 'put ''MzQxNSw1MzQxNyw1MzQxOCw1MzQxOSw1MzQyMSw1MzQyMiw1MzQyMyw1MzQyNCw1MzQyNSw1MzQyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQyNyw1MzQzMCw1MzQzMiw1MzQzNCw1MzQzNSw1MzQzNiw1MzQzNyw1MzQzOCw1MzQzOSw1MzQ0Miw1MzQ0Myw1MzQ0NSw1MzQ0''@;'; put 'put ''Niw1MzQ0Nyw1MzQ1MCw1MzQ1MSw1MzQ1Miw1MzQ1Myw1MzQ1NCw1MzQ1NSw1MzQ1OCw1MzQ2Miw1MzQ2Myw1MzQ2NCw1MzQ2NSw1MzQ2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzQ2Nyw1MzQ3MCw1MzQ3MSw1MzQ3Myw1MzQ3NCw1MzQ3NSw1MzQ3Nyw1MzQ3OCw1MzQ3OSw1''@;'; put 'put ''MzQ4MCw1MzQ4MSw1MzQ4Miw1MzQ4Myw1MzQ4Niw1MzQ5MCw1MzQ5MSw1MzQ5Miw1MzQ5Myw1MzQ5NCw1MzQ5NSw1MzQ5Nyw1MzQ5OCw1MzQ5OSw1MzUwMCw1MzUwMSw1MzUwMiw1MzUwMyw1MzUwNCw1MzUwNSw1MzUwNiw1MzUwNyw1MzUwOCw0NTkyNyw0NTkyOSw0NTkzMSw0NTkzNCw0NTkz''@;'; put 'put ''Niw0NTkzNyw0NTk0MCw0NTk0NCw0NTk1Miw0NTk1Myw0NTk1NSw0NTk1Niw0NTk1Nyw0NTk2NCw0NTk2OCw0NTk3Miw0NTk4NCw0NTk4NSw0NTk5Miw0NTk5Niw0NjAyMCw0NjAyMSw0NjAyNCw0NjAyNyw0NjAyOCw0NjAzMCw0NjAzMiw0NjAzNiw0NjAzNyw0NjAzOSw0NjA0MSw0NjA0Myw0''@;'; put 'put ''NjA0NSw0NjA0OCw0NjA1Miw0NjA1Niw0NjA3Niw0NjA5Niw0NjEwNCw0NjEwOCw0NjExMiw0NjEyMCw0NjEyMSw0NjEyMyw0NjEzMiw0NjE2MCw0NjE2MSw0NjE2NCw0NjE2OCw0NjE3Niw0NjE3Nyw0NjE3OSw0NjE4MSw0NjE4OCw0NjIwOCw0NjIxNiw0NjIzNyw0NjI0NCw0NjI0OCw0NjI1''@;'; put 'put ''Miw0NjI2MSw0NjI2Myw0NjI2NSw0NjI3Miw0NjI3Niw0NjI4MCw0NjI4OCw0NjI5Myw0NjMwMCw0NjMwMSw0NjMwNCw0NjMwNyw0NjMwOCw0NjMxMCw0NjMxNiw0NjMxNyw0NjMxOSw0NjMyMSw0NjMyOCw0NjM1Niw0NjM1Nyw0NjM2MCw0NjM2Myw0NjM2NCw0NjM3Miw0NjM3Myw0NjM3NSw0''@;'; put 'put ''NjM3Niw0NjM3Nyw0NjM3OCw0NjM4NCw0NjM4NSw0NjM4OCw0NjM5Miw1MzUwOSw1MzUxMCw1MzUxMSw1MzUxMiw1MzUxMyw1MzUxNCw1MzUxNSw1MzUxNiw1MzUxOCw1MzUxOSw1MzUyMCw1MzUyMSw1MzUyMiw1MzUyMyw1MzUyNCw1MzUyNSw1MzUyNiw1MzUyNyw1MzUyOCw1MzUyOSw1MzUz''@;'; put 'put ''MCw1MzUzMSw1MzUzMiw1MzUzMyw1MzUzNCw1MzUzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzUzNiw1MzUzNyw1MzUzOCw1MzUzOSw1MzU0MCw1MzU0MSw1MzU0Miw1MzU0Myw1MzU0NCw1MzU0NSw1MzU0Niw1MzU0Nyw1MzU0OCw1MzU0OSw1MzU1MCw1MzU1MSw1MzU1NCw1''@;'; put 'put ''MzU1NSw1MzU1Nyw1MzU1OCw1MzU1OSw1MzU2MSw1MzU2Myw1MzU2NCw1MzU2NSw1MzU2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzU2Nyw1MzU3MCw1MzU3NCw1MzU3NSw1MzU3Niw1MzU3Nyw1MzU3OCw1MzU3OSw1MzU4Miw1MzU4Myw1MzU4NSw1MzU4Niw1MzU4Nyw1MzU4''@;'; put 'put ''OSw1MzU5MCw1MzU5MSw1MzU5Miw1MzU5Myw1MzU5NCw1MzU5NSw1MzU5OCw1MzYwMCw1MzYwMiw1MzYwMyw1MzYwNCw1MzYwNSw1MzYwNiw1MzYwNyw1MzYwOSw1MzYxMCw1MzYxMSw1MzYxMyw0NjQwMCw0NjQwMSw0NjQwMyw0NjQwNCw0NjQwNSw0NjQxMSw0NjQxMiw0NjQxMyw0NjQxNiw0''@;'; put 'put ''NjQyMCw0NjQyOCw0NjQyOSw0NjQzMSw0NjQzMiw0NjQzMyw0NjQ5Niw0NjQ5Nyw0NjUwMCw0NjUwNCw0NjUwNiw0NjUwNyw0NjUxMiw0NjUxMyw0NjUxNSw0NjUxNiw0NjUxNyw0NjUyMyw0NjUyNCw0NjUyNSw0NjUyOCw0NjUzMiw0NjU0MCw0NjU0MSw0NjU0Myw0NjU0NCw0NjU0NSw0NjU1''@;'; put 'put ''Miw0NjU3Miw0NjYwOCw0NjYwOSw0NjYxMiw0NjYxNiw0NjYyOSw0NjYzNiw0NjY0NCw0NjY2NCw0NjY5Miw0NjY5Niw0Njc0OCw0Njc0OSw0Njc1Miw0Njc1Niw0Njc2Myw0Njc2NCw0Njc2OSw0NjgwNCw0NjgzMiw0NjgzNiw0Njg0MCw0Njg0OCw0Njg0OSw0Njg1Myw0Njg4OCw0Njg4OSw0''@;'; put 'put ''Njg5Miw0Njg5NSw0Njg5Niw0NjkwNCw0NjkwNSw0NjkwNyw0NjkxNiw0NjkyMCw0NjkyNCw0NjkzMiw0NjkzMyw0Njk0NCw0Njk0OCw0Njk1Miw0Njk2MCw0Njk2MSw0Njk2Myw0Njk2NSw0Njk3Miw0Njk3Myw0Njk3Niw0Njk4MCw0Njk4OCw0Njk4OSw0Njk5MSw0Njk5Miw0Njk5Myw0Njk5''@;'; put 'put ''NCw0Njk5OCw0Njk5OSw1MzYxNCw1MzYxNSw1MzYxNiw1MzYxNyw1MzYxOCw1MzYxOSw1MzYyMCw1MzYyMSw1MzYyMiw1MzYyMyw1MzYyNCw1MzYyNSw1MzYyNiw1MzYyNyw1MzYyOSw1MzYzMCw1MzYzMSw1MzYzMiw1MzYzMyw1MzYzNCw1MzYzNSw1MzYzNyw1MzYzOCw1MzYzOSw1MzY0MSw1''@;'; put 'put ''MzY0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY0Myw1MzY0NCw1MzY0NSw1MzY0Niw1MzY0Nyw1MzY0OCw1MzY0OSw1MzY1MCw1MzY1MSw1MzY1Miw1MzY1Myw1MzY1NCw1MzY1NSw1MzY1Niw1MzY1Nyw1MzY1OCw1MzY1OSw1MzY2MCw1MzY2MSw1MzY2Miw1MzY2Myw1MzY2''@;'; put 'put ''Niw1MzY2Nyw1MzY2OSw1MzY3MCw1MzY3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzY3Myw1MzY3NCw1MzY3NSw1MzY3Niw1MzY3Nyw1MzY3OCw1MzY3OSw1MzY4Miw1MzY4NCw1MzY4Niw1MzY4Nyw1MzY4OCw1MzY4OSw1MzY5MSw1MzY5Myw1MzY5NCw1MzY5NSw1MzY5Nyw1''@;'; put 'put ''MzY5OCw1MzY5OSw1MzcwMCw1MzcwMSw1MzcwMiw1MzcwMyw1MzcwNCw1MzcwNSw1MzcwNiw1MzcwNyw1MzcwOCw1MzcwOSw1MzcxMCw1MzcxMSw0N2UzLDQ3MDAxLDQ3MDA0LDQ3MDA4LDQ3MDE2LDQ3MDE3LDQ3MDE5LDQ3MDIwLDQ3MDIxLDQ3MDI4LDQ3MDI5LDQ3MDMyLDQ3MDQ3LDQ3MDQ5''@;'; put 'put ''LDQ3MDg0LDQ3MDg1LDQ3MDg4LDQ3MDkyLDQ3MTAwLDQ3MTAxLDQ3MTAzLDQ3MTA0LDQ3MTA1LDQ3MTExLDQ3MTEyLDQ3MTEzLDQ3MTE2LDQ3MTIwLDQ3MTI4LDQ3MTI5LDQ3MTMxLDQ3MTMzLDQ3MTQwLDQ3MTQxLDQ3MTQ0LDQ3MTQ4LDQ3MTU2LDQ3MTU3LDQ3MTU5LDQ3MTYwLDQ3MTYxLDQ3''@;'; put 'put ''MTY4LDQ3MTcyLDQ3MTg1LDQ3MTg3LDQ3MTk2LDQ3MTk3LDQ3MjAwLDQ3MjA0LDQ3MjEyLDQ3MjEzLDQ3MjE1LDQ3MjE3LDQ3MjI0LDQ3MjI4LDQ3MjQ1LDQ3MjcyLDQ3MjgwLDQ3Mjg0LDQ3Mjg4LDQ3Mjk2LDQ3Mjk3LDQ3Mjk5LDQ3MzAxLDQ3MzA4LDQ3MzEyLDQ3MzE2LDQ3MzI1LDQ3MzI3''@;'; put 'put ''LDQ3MzI5LDQ3MzM2LDQ3MzM3LDQ3MzQwLDQ3MzQ0LDQ3MzUyLDQ3MzUzLDQ3MzU1LDQ3MzU3LDQ3MzY0LDQ3Mzg0LDQ3MzkyLDQ3NDIwLDQ3NDIxLDQ3NDI0LDQ3NDI4LDQ3NDM2LDQ3NDM5LDQ3NDQxLDQ3NDQ4LDQ3NDQ5LDQ3NDUyLDQ3NDU2LDQ3NDY0LDQ3NDY1LDUzNzEyLDUzNzEzLDUz''@;'; put 'put ''NzE0LDUzNzE1LDUzNzE2LDUzNzE3LDUzNzE4LDUzNzE5LDUzNzIxLDUzNzIyLDUzNzIzLDUzNzI0LDUzNzI1LDUzNzI2LDUzNzI3LDUzNzI4LDUzNzI5LDUzNzMwLDUzNzMxLDUzNzMyLDUzNzMzLDUzNzM0LDUzNzM1LDUzNzM2LDUzNzM3LDUzNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzNzM5LDUzNzQwLDUzNzQxLDUzNzQyLDUzNzQzLDUzNzQ0LDUzNzQ1LDUzNzQ2LDUzNzQ3LDUzNzQ5LDUzNzUwLDUzNzUxLDUzNzUzLDUzNzU0LDUzNzU1LDUzNzU2LDUzNzU3LDUzNzU4LDUzNzU5LDUzNzYwLDUzNzYxLDUzNzYyLDUzNzYzLDUzNzY0LDUzNzY1LDUzNzY2LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNzY4LDUzNzcwLDUzNzcxLDUzNzcyLDUzNzczLDUzNzc0LDUzNzc1LDUzNzc3LDUzNzc4LDUzNzc5LDUzNzgwLDUzNzgxLDUzNzgyLDUzNzgzLDUzNzg0LDUzNzg1LDUzNzg2LDUzNzg3LDUzNzg4LDUzNzg5LDUzNzkwLDUzNzkxLDUzNzky''@;'; put 'put ''LDUzNzkzLDUzNzk0LDUzNzk1LDUzNzk2LDUzNzk3LDUzNzk4LDUzNzk5LDUzODAwLDUzODAxLDQ3NDY3LDQ3NDY5LDQ3NDc2LDQ3NDc3LDQ3NDgwLDQ3NDg0LDQ3NDkyLDQ3NDkzLDQ3NDk1LDQ3NDk3LDQ3NDk4LDQ3NTAxLDQ3NTAyLDQ3NTMyLDQ3NTMzLDQ3NTM2LDQ3NTQwLDQ3NTQ4LDQ3''@;'; put 'put ''NTQ5LDQ3NTUxLDQ3NTUzLDQ3NTYwLDQ3NTYxLDQ3NTY0LDQ3NTY2LDQ3NTY3LDQ3NTY4LDQ3NTY5LDQ3NTcwLDQ3NTc2LDQ3NTc3LDQ3NTc5LDQ3NTgxLDQ3NTgyLDQ3NTg1LDQ3NTg3LDQ3NTg4LDQ3NTg5LDQ3NTkyLDQ3NTk2LDQ3NjA0LDQ3NjA1LDQ3NjA3LDQ3NjA4LDQ3NjA5LDQ3NjEw''@;'; put 'put ''LDQ3NjE2LDQ3NjE3LDQ3NjI0LDQ3NjM3LDQ3NjcyLDQ3NjczLDQ3Njc2LDQ3NjgwLDQ3NjgyLDQ3Njg4LDQ3Njg5LDQ3NjkxLDQ3NjkzLDQ3Njk0LDQ3Njk5LDQ3NzAwLDQ3NzAxLDQ3NzA0LDQ3NzA4LDQ3NzE2LDQ3NzE3LDQ3NzE5LDQ3NzIwLDQ3NzIxLDQ3NzI4LDQ3NzI5LDQ3NzMyLDQ3''@;'; put 'put ''NzM2LDQ3NzQ3LDQ3NzQ4LDQ3NzQ5LDQ3NzUxLDQ3NzU2LDQ3Nzg0LDQ3Nzg1LDQ3Nzg3LDQ3Nzg4LDQ3NzkyLDQ3Nzk0LDQ3ODAwLDQ3ODAxLDQ3ODAzLDQ3ODA1LDQ3ODEyLDQ3ODE2LDQ3ODMyLDQ3ODMzLDQ3ODY4LDUzODAyLDUzODAzLDUzODA2LDUzODA3LDUzODA5LDUzODEwLDUzODEx''@;'; put 'put ''LDUzODEzLDUzODE0LDUzODE1LDUzODE2LDUzODE3LDUzODE4LDUzODE5LDUzODIyLDUzODI0LDUzODI2LDUzODI3LDUzODI4LDUzODI5LDUzODMwLDUzODMxLDUzODMzLDUzODM0LDUzODM1LDUzODM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODM3LDUzODM4LDUzODM5LDUz''@;'; put 'put ''ODQwLDUzODQxLDUzODQyLDUzODQzLDUzODQ0LDUzODQ1LDUzODQ2LDUzODQ3LDUzODQ4LDUzODQ5LDUzODUwLDUzODUxLDUzODUzLDUzODU0LDUzODU1LDUzODU2LDUzODU3LDUzODU4LDUzODU5LDUzODYxLDUzODYyLDUzODYzLDUzODY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDUzODY1LDUzODY2LDUzODY3LDUzODY4LDUzODY5LDUzODcwLDUzODcxLDUzODcyLDUzODczLDUzODc0LDUzODc1LDUzODc2LDUzODc3LDUzODc4LDUzODc5LDUzODgwLDUzODgxLDUzODgyLDUzODgzLDUzODg0LDUzODg1LDUzODg2LDUzODg3LDUzODkwLDUzODkxLDUzODkzLDUzODk0LDUz''@;'; put 'put ''ODk1LDUzODk3LDUzODk4LDUzODk5LDUzOTAwLDQ3ODcyLDQ3ODc2LDQ3ODg1LDQ3ODg3LDQ3ODg5LDQ3ODk2LDQ3OTAwLDQ3OTA0LDQ3OTEzLDQ3OTE1LDQ3OTI0LDQ3OTI1LDQ3OTI2LDQ3OTI4LDQ3OTMxLDQ3OTMyLDQ3OTMzLDQ3OTM0LDQ3OTQwLDQ3OTQxLDQ3OTQzLDQ3OTQ1LDQ3OTQ5''@;'; put 'put ''LDQ3OTUxLDQ3OTUyLDQ3OTU2LDQ3OTYwLDQ3OTY5LDQ3OTcxLDQ3OTgwLDQ4MDA4LDQ4MDEyLDQ4MDE2LDQ4MDM2LDQ4MDQwLDQ4MDQ0LDQ4MDUyLDQ4MDU1LDQ4MDY0LDQ4MDY4LDQ4MDcyLDQ4MDgwLDQ4MDgzLDQ4MTIwLDQ4MTIxLDQ4MTI0LDQ4MTI3LDQ4MTI4LDQ4MTMwLDQ4MTM2LDQ4''@;'; put 'put ''MTM3LDQ4MTM5LDQ4MTQwLDQ4MTQxLDQ4MTQzLDQ4MTQ1LDQ4MTQ4LDQ4MTQ5LDQ4MTUwLDQ4MTUxLDQ4MTUyLDQ4MTU1LDQ4MTU2LDQ4MTU3LDQ4MTU4LDQ4MTU5LDQ4MTY0LDQ4MTY1LDQ4MTY3LDQ4MTY5LDQ4MTczLDQ4MTc2LDQ4MTc3LDQ4MTgwLDQ4MTg0LDQ4MTkyLDQ4MTkzLDQ4MTk1''@;'; put 'put ''LDQ4MTk2LDQ4MTk3LDQ4MjAxLDQ4MjA0LDQ4MjA1LDQ4MjA4LDQ4MjIxLDQ4MjYwLDQ4MjYxLDQ4MjY0LDQ4MjY3LDQ4MjY4LDQ4MjcwLDQ4Mjc2LDQ4Mjc3LDQ4Mjc5LDUzOTAxLDUzOTAyLDUzOTAzLDUzOTA2LDUzOTA3LDUzOTA4LDUzOTEwLDUzOTExLDUzOTEyLDUzOTEzLDUzOTE0LDUz''@;'; put 'put ''OTE1LDUzOTE3LDUzOTE4LDUzOTE5LDUzOTIxLDUzOTIyLDUzOTIzLDUzOTI1LDUzOTI2LDUzOTI3LDUzOTI4LDUzOTI5LDUzOTMwLDUzOTMxLDUzOTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTM0LDUzOTM1LDUzOTM2LDUzOTM4LDUzOTM5LDUzOTQwLDUzOTQxLDUzOTQy''@;'; put 'put ''LDUzOTQzLDUzOTQ2LDUzOTQ3LDUzOTQ5LDUzOTUwLDUzOTUzLDUzOTU1LDUzOTU2LDUzOTU3LDUzOTU4LDUzOTU5LDUzOTYyLDUzOTY0LDUzOTY1LDUzOTY2LDUzOTY3LDUzOTY4LDUzOTY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzOTcwLDUzOTcxLDUzOTczLDUzOTc0LDUz''@;'; put 'put ''OTc1LDUzOTc3LDUzOTc4LDUzOTc5LDUzOTgxLDUzOTgyLDUzOTgzLDUzOTg0LDUzOTg1LDUzOTg2LDUzOTg3LDUzOTkwLDUzOTkxLDUzOTkyLDUzOTkzLDUzOTk0LDUzOTk1LDUzOTk2LDUzOTk3LDUzOTk4LDUzOTk5LDU0MDAyLDU0MDAzLDU0MDA1LDU0MDA2LDU0MDA3LDU0MDA5LDU0MDEw''@;'; put 'put ''LDQ4MjgxLDQ4MjgyLDQ4Mjg4LDQ4Mjg5LDQ4MjkyLDQ4Mjk1LDQ4Mjk2LDQ4MzA0LDQ4MzA1LDQ4MzA3LDQ4MzA4LDQ4MzA5LDQ4MzE2LDQ4MzE3LDQ4MzIwLDQ4MzI0LDQ4MzMzLDQ4MzM1LDQ4MzM2LDQ4MzM3LDQ4MzQxLDQ4MzQ0LDQ4MzQ4LDQ4MzcyLDQ4MzczLDQ4Mzc0LDQ4Mzc2LDQ4''@;'; put 'put ''MzgwLDQ4Mzg4LDQ4Mzg5LDQ4MzkxLDQ4MzkzLDQ4NDAwLDQ4NDA0LDQ4NDIwLDQ4NDI4LDQ4NDQ4LDQ4NDU2LDQ4NDU3LDQ4NDYwLDQ4NDY0LDQ4NDcyLDQ4NDczLDQ4NDg0LDQ4NDg4LDQ4NTEyLDQ4NTEzLDQ4NTE2LDQ4NTE5LDQ4NTIwLDQ4NTIxLDQ4NTIyLDQ4NTI4LDQ4NTI5LDQ4NTMx''@;'; put 'put ''LDQ4NTMzLDQ4NTM3LDQ4NTM4LDQ4NTQwLDQ4NTQ4LDQ4NTYwLDQ4NTY4LDQ4NTk2LDQ4NTk3LDQ4NjAwLDQ4NjA0LDQ4NjE3LDQ4NjI0LDQ4NjI4LDQ4NjMyLDQ4NjQwLDQ4NjQzLDQ4NjQ1LDQ4NjUyLDQ4NjUzLDQ4NjU2LDQ4NjYwLDQ4NjY4LDQ4NjY5LDQ4NjcxLDQ4NzA4LDQ4NzA5LDQ4''@;'; put 'put ''NzEyLDQ4NzE2LDQ4NzE4LDQ4NzI0LDQ4NzI1LDQ4NzI3LDQ4NzI5LDQ4NzMwLDQ4NzMxLDQ4NzM2LDQ4NzM3LDQ4NzQwLDU0MDExLDU0MDEyLDU0MDEzLDU0MDE0LDU0MDE1LDU0MDE4LDU0MDIwLDU0MDIyLDU0MDIzLDU0MDI0LDU0MDI1LDU0MDI2LDU0MDI3LDU0MDMxLDU0MDMzLDU0MDM0''@;'; put 'put ''LDU0MDM1LDU0MDM3LDU0MDM5LDU0MDQwLDU0MDQxLDU0MDQyLDU0MDQzLDU0MDQ2LDU0MDUwLDU0MDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDUyLDU0MDU0LDU0MDU1LDU0MDU4LDU0MDU5LDU0MDYxLDU0MDYyLDU0MDYzLDU0MDY1LDU0MDY2LDU0MDY3LDU0MDY4LDU0''@;'; put 'put ''MDY5LDU0MDcwLDU0MDcxLDU0MDc0LDU0MDc4LDU0MDc5LDU0MDgwLDU0MDgxLDU0MDgyLDU0MDgzLDU0MDg2LDU0MDg3LDU0MDg4LDU0MDg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MDkwLDU0MDkxLDU0MDkyLDU0MDkzLDU0MDk0LDU0MDk1LDU0MDk2LDU0MDk3LDU0MDk4''@;'; put 'put ''LDU0MDk5LDU0MTAwLDU0MTAxLDU0MTAyLDU0MTAzLDU0MTA0LDU0MTA1LDU0MTA2LDU0MTA3LDU0MTA4LDU0MTA5LDU0MTEwLDU0MTExLDU0MTEyLDU0MTEzLDU0MTE0LDU0MTE1LDU0MTE2LDU0MTE3LDU0MTE4LDU0MTE5LDU0MTIwLDU0MTIxLDQ4NzQ0LDQ4NzQ2LDQ4NzUyLDQ4NzUzLDQ4''@;'; put 'put ''NzU1LDQ4NzU2LDQ4NzU3LDQ4NzYzLDQ4NzY0LDQ4NzY1LDQ4NzY4LDQ4NzcyLDQ4NzgwLDQ4NzgxLDQ4NzgzLDQ4Nzg0LDQ4Nzg1LDQ4NzkyLDQ4NzkzLDQ4ODA4LDQ4ODQ4LDQ4ODQ5LDQ4ODUyLDQ4ODU1LDQ4ODU2LDQ4ODY0LDQ4ODY3LDQ4ODY4LDQ4ODY5LDQ4ODc2LDQ4ODk3LDQ4OTA0''@;'; put 'put ''LDQ4OTA1LDQ4OTIwLDQ4OTIxLDQ4OTIzLDQ4OTI0LDQ4OTI1LDQ4OTYwLDQ4OTYxLDQ4OTY0LDQ4OTY4LDQ4OTc2LDQ4OTc3LDQ4OTgxLDQ5MDQ0LDQ5MDcyLDQ5MDkzLDQ5MTAwLDQ5MTAxLDQ5MTA0LDQ5MTA4LDQ5MTE2LDQ5MTE5LDQ5MTIxLDQ5MjEyLDQ5MjMzLDQ5MjQwLDQ5MjQ0LDQ5''@;'; put 'put ''MjQ4LDQ5MjU2LDQ5MjU3LDQ5Mjk2LDQ5Mjk3LDQ5MzAwLDQ5MzA0LDQ5MzEyLDQ5MzEzLDQ5MzE1LDQ5MzE3LDQ5MzI0LDQ5MzI1LDQ5MzI3LDQ5MzI4LDQ5MzMxLDQ5MzMyLDQ5MzMzLDQ5MzM0LDQ5MzQwLDQ5MzQxLDQ5MzQzLDQ5MzQ0LDQ5MzQ1LDQ5MzQ5LDQ5MzUyLDQ5MzUzLDQ5MzU2''@;'; put 'put ''LDQ5MzYwLDQ5MzY4LDQ5MzY5LDQ5MzcxLDQ5MzcyLDQ5MzczLDQ5MzgwLDU0MTIyLDU0MTIzLDU0MTI0LDU0MTI1LDU0MTI2LDU0MTI3LDU0MTI4LDU0MTI5LDU0MTMwLDU0MTMxLDU0MTMyLDU0MTMzLDU0MTM0LDU0MTM1LDU0MTM2LDU0MTM3LDU0MTM4LDU0MTM5LDU0MTQyLDU0MTQzLDU0''@;'; put 'put ''MTQ1LDU0MTQ2LDU0MTQ3LDU0MTQ5LDU0MTUwLDU0MTUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTUyLDU0MTUzLDU0MTU0LDU0MTU1LDU0MTU4LDU0MTYyLDU0MTYzLDU0MTY0LDU0MTY1LDU0MTY2LDU0MTY3LDU0MTcwLDU0MTcxLDU0MTczLDU0MTc0LDU0MTc1LDU0MTc3''@;'; put 'put ''LDU0MTc4LDU0MTc5LDU0MTgwLDU0MTgxLDU0MTgyLDU0MTgzLDU0MTg2LDU0MTg4LDU0MTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MTkxLDU0MTkyLDU0MTkzLDU0MTk0LDU0MTk1LDU0MTk3LDU0MTk4LDU0MTk5LDU0MjAxLDU0MjAyLDU0MjAzLDU0MjA1LDU0MjA2LDU0''@;'; put 'put ''MjA3LDU0MjA4LDU0MjA5LDU0MjEwLDU0MjExLDU0MjE0LDU0MjE1LDU0MjE4LDU0MjE5LDU0MjIwLDU0MjIxLDU0MjIyLDU0MjIzLDU0MjI1LDU0MjI2LDU0MjI3LDU0MjI4LDU0MjI5LDU0MjMwLDQ5MzgxLDQ5Mzg0LDQ5Mzg4LDQ5Mzk2LDQ5Mzk3LDQ5Mzk5LDQ5NDAxLDQ5NDA4LDQ5NDEy''@;'; put 'put ''LDQ5NDE2LDQ5NDI0LDQ5NDI5LDQ5NDM2LDQ5NDM3LDQ5NDM4LDQ5NDM5LDQ5NDQwLDQ5NDQzLDQ5NDQ0LDQ5NDQ2LDQ5NDQ3LDQ5NDUyLDQ5NDUzLDQ5NDU1LDQ5NDU2LDQ5NDU3LDQ5NDYyLDQ5NDY0LDQ5NDY1LDQ5NDY4LDQ5NDcyLDQ5NDgwLDQ5NDgxLDQ5NDgzLDQ5NDg0LDQ5NDg1LDQ5''@;'; put 'put ''NDkyLDQ5NDkzLDQ5NDk2LDQ5NTAwLDQ5NTA4LDQ5NTA5LDQ5NTExLDQ5NTEyLDQ5NTEzLDQ5NTIwLDQ5NTI0LDQ5NTI4LDQ5NTQxLDQ5NTQ4LDQ5NTQ5LDQ5NTUwLDQ5NTUyLDQ5NTU2LDQ5NTU4LDQ5NTY0LDQ5NTY1LDQ5NTY3LDQ5NTY5LDQ5NTczLDQ5NTc2LDQ5NTc3LDQ5NTgwLDQ5NTg0''@;'; put 'put ''LDQ5NTk3LDQ5NjA0LDQ5NjA4LDQ5NjEyLDQ5NjIwLDQ5NjIzLDQ5NjI0LDQ5NjMyLDQ5NjM2LDQ5NjQwLDQ5NjQ4LDQ5NjQ5LDQ5NjUxLDQ5NjYwLDQ5NjYxLDQ5NjY0LDQ5NjY4LDQ5Njc2LDQ5Njc3LDQ5Njc5LDQ5NjgxLDQ5Njg4LDQ5Njg5LDQ5NjkyLDQ5Njk1LDQ5Njk2LDQ5NzA0LDQ5''@;'; put 'put ''NzA1LDQ5NzA3LDQ5NzA5LDU0MjMxLDU0MjMzLDU0MjM0LDU0MjM1LDU0MjM2LDU0MjM3LDU0MjM4LDU0MjM5LDU0MjQwLDU0MjQyLDU0MjQ0LDU0MjQ1LDU0MjQ2LDU0MjQ3LDU0MjQ4LDU0MjQ5LDU0MjUwLDU0MjUxLDU0MjU0LDU0MjU1LDU0MjU3LDU0MjU4LDU0MjU5LDU0MjYxLDU0MjYy''@;'; put 'put ''LDU0MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjY0LDU0MjY1LDU0MjY2LDU0MjY3LDU0MjcwLDU0MjcyLDU0Mjc0LDU0Mjc1LDU0Mjc2LDU0Mjc3LDU0Mjc4LDU0Mjc5LDU0MjgxLDU0MjgyLDU0MjgzLDU0Mjg0LDU0Mjg1LDU0Mjg2LDU0Mjg3LDU0Mjg4LDU0Mjg5LDU0''@;'; put 'put ''MjkwLDU0MjkxLDU0MjkyLDU0MjkzLDU0Mjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mjk1LDU0Mjk2LDU0Mjk3LDU0Mjk4LDU0Mjk5LDU0MzAwLDU0MzAyLDU0MzAzLDU0MzA0LDU0MzA1LDU0MzA2LDU0MzA3LDU0MzA4LDU0MzA5LDU0MzEwLDU0MzExLDU0MzEyLDU0MzEz''@;'; put 'put ''LDU0MzE0LDU0MzE1LDU0MzE2LDU0MzE3LDU0MzE4LDU0MzE5LDU0MzIwLDU0MzIxLDU0MzIyLDU0MzIzLDU0MzI0LDU0MzI1LDU0MzI2LDU0MzI3LDQ5NzExLDQ5NzEzLDQ5NzE0LDQ5NzE2LDQ5NzM2LDQ5NzQ0LDQ5NzQ1LDQ5NzQ4LDQ5NzUyLDQ5NzYwLDQ5NzY1LDQ5NzcyLDQ5NzczLDQ5''@;'; put 'put ''Nzc2LDQ5NzgwLDQ5Nzg4LDQ5Nzg5LDQ5NzkxLDQ5NzkzLDQ5ODAwLDQ5ODAxLDQ5ODA4LDQ5ODE2LDQ5ODE5LDQ5ODIxLDQ5ODI4LDQ5ODI5LDQ5ODMyLDQ5ODM2LDQ5ODM3LDQ5ODQ0LDQ5ODQ1LDQ5ODQ3LDQ5ODQ5LDQ5ODg0LDQ5ODg1LDQ5ODg4LDQ5ODkxLDQ5ODkyLDQ5ODk5LDQ5OTAw''@;'; put 'put ''LDQ5OTAxLDQ5OTAzLDQ5OTA1LDQ5OTEwLDQ5OTEyLDQ5OTEzLDQ5OTE1LDQ5OTE2LDQ5OTIwLDQ5OTI4LDQ5OTI5LDQ5OTMyLDQ5OTMzLDQ5OTM5LDQ5OTQwLDQ5OTQxLDQ5OTQ0LDQ5OTQ4LDQ5OTU2LDQ5OTU3LDQ5OTYwLDQ5OTYxLDQ5OTg5LDUwMDI0LDUwMDI1LDUwMDI4LDUwMDMyLDUw''@;'; put 'put ''MDM0LDUwMDQwLDUwMDQxLDUwMDQ0LDUwMDQ1LDUwMDUyLDUwMDU2LDUwMDYwLDUwMTEyLDUwMTM2LDUwMTM3LDUwMTQwLDUwMTQzLDUwMTQ0LDUwMTQ2LDUwMTUyLDUwMTUzLDUwMTU3LDUwMTY0LDUwMTY1LDUwMTY4LDUwMTg0LDUwMTkyLDUwMjEyLDUwMjIwLDUwMjI0LDU0MzI4LDU0MzI5''@;'; put 'put ''LDU0MzMwLDU0MzMxLDU0MzMyLDU0MzMzLDU0MzM0LDU0MzM1LDU0MzM3LDU0MzM4LDU0MzM5LDU0MzQxLDU0MzQyLDU0MzQzLDU0MzQ0LDU0MzQ1LDU0MzQ2LDU0MzQ3LDU0MzQ4LDU0MzQ5LDU0MzUwLDU0MzUxLDU0MzUyLDU0MzUzLDU0MzU0LDU0MzU1LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDU0MzU2LDU0MzU3LDU0MzU4LDU0MzU5LDU0MzYwLDU0MzYxLDU0MzYyLDU0MzYzLDU0MzY1LDU0MzY2LDU0MzY3LDU0MzY5LDU0MzcwLDU0MzcxLDU0MzczLDU0Mzc0LDU0Mzc1LDU0Mzc2LDU0Mzc3LDU0Mzc4LDU0Mzc5LDU0MzgwLDU0MzgyLDU0Mzg0LDU0Mzg1LDU0Mzg2''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Mzg3LDU0Mzg4LDU0Mzg5LDU0MzkwLDU0MzkxLDU0Mzk0LDU0Mzk1LDU0Mzk3LDU0Mzk4LDU0NDAxLDU0NDAzLDU0NDA0LDU0NDA1LDU0NDA2LDU0NDA3LDU0NDEwLDU0NDEyLDU0NDE0LDU0NDE1LDU0NDE2LDU0NDE3LDU0NDE4LDU0''@;'; put 'put ''NDE5LDU0NDIxLDU0NDIyLDU0NDIzLDU0NDI0LDU0NDI1LDU0NDI2LDU0NDI3LDU0NDI4LDU0NDI5LDUwMjI4LDUwMjM2LDUwMjM3LDUwMjQ4LDUwMjc2LDUwMjc3LDUwMjgwLDUwMjg0LDUwMjkyLDUwMjkzLDUwMjk3LDUwMzA0LDUwMzI0LDUwMzMyLDUwMzYwLDUwMzY0LDUwNDA5LDUwNDE2''@;'; put 'put ''LDUwNDE3LDUwNDIwLDUwNDI0LDUwNDI2LDUwNDMxLDUwNDMyLDUwNDMzLDUwNDQ0LDUwNDQ4LDUwNDUyLDUwNDYwLDUwNDcyLDUwNDczLDUwNDc2LDUwNDgwLDUwNDg4LDUwNDg5LDUwNDkxLDUwNDkzLDUwNTAwLDUwNTAxLDUwNTA0LDUwNTA1LDUwNTA2LDUwNTA4LDUwNTA5LDUwNTEwLDUw''@;'; put 'put ''NTE1LDUwNTE2LDUwNTE3LDUwNTE5LDUwNTIwLDUwNTIxLDUwNTI1LDUwNTI2LDUwNTI4LDUwNTI5LDUwNTMyLDUwNTM2LDUwNTQ0LDUwNTQ1LDUwNTQ3LDUwNTQ4LDUwNTQ5LDUwNTU2LDUwNTU3LDUwNTYwLDUwNTY0LDUwNTY3LDUwNTcyLDUwNTczLDUwNTc1LDUwNTc3LDUwNTgxLDUwNTgz''@;'; put 'put ''LDUwNTg0LDUwNTg4LDUwNTkyLDUwNjAxLDUwNjEyLDUwNjEzLDUwNjE2LDUwNjE3LDUwNjE5LDUwNjIwLDUwNjIxLDUwNjIyLDUwNjI4LDUwNjI5LDUwNjMwLDUwNjMxLDUwNjMyLDUwNjMzLDUwNjM0LDUwNjM2LDUwNjM4LDU0NDMwLDU0NDMxLDU0NDMyLDU0NDMzLDU0NDM0LDU0NDM1LDU0''@;'; put 'put ''NDM2LDU0NDM3LDU0NDM4LDU0NDM5LDU0NDQwLDU0NDQyLDU0NDQzLDU0NDQ0LDU0NDQ1LDU0NDQ2LDU0NDQ3LDU0NDQ4LDU0NDQ5LDU0NDUwLDU0NDUxLDU0NDUyLDU0NDUzLDU0NDU0LDU0NDU1LDU0NDU2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NDU3LDU0NDU4LDU0NDU5''@;'; put 'put ''LDU0NDYwLDU0NDYxLDU0NDYyLDU0NDYzLDU0NDY0LDU0NDY1LDU0NDY2LDU0NDY3LDU0NDY4LDU0NDY5LDU0NDcwLDU0NDcxLDU0NDcyLDU0NDczLDU0NDc0LDU0NDc1LDU0NDc3LDU0NDc4LDU0NDc5LDU0NDgxLDU0NDgyLDU0NDgzLDU0NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDU0NDg2LDU0NDg3LDU0NDg4LDU0NDg5LDU0NDkwLDU0NDkxLDU0NDkzLDU0NDk0LDU0NDk2LDU0NDk3LDU0NDk4LDU0NDk5LDU0NTAwLDU0NTAxLDU0NTAyLDU0NTAzLDU0NTA1LDU0NTA2LDU0NTA3LDU0NTA5LDU0NTEwLDU0NTExLDU0NTEzLDU0NTE0LDU0NTE1LDU0NTE2LDU0NTE3''@;'; put 'put ''LDU0NTE4LDU0NTE5LDU0NTIxLDU0NTIyLDU0NTI0LDUwNjQwLDUwNjQxLDUwNjQ0LDUwNjQ4LDUwNjU2LDUwNjU3LDUwNjU5LDUwNjYxLDUwNjY4LDUwNjY5LDUwNjcwLDUwNjcyLDUwNjc2LDUwNjc4LDUwNjc5LDUwNjg0LDUwNjg1LDUwNjg2LDUwNjg3LDUwNjg4LDUwNjg5LDUwNjkzLDUw''@;'; put 'put ''Njk0LDUwNjk1LDUwNjk2LDUwNzAwLDUwNzA0LDUwNzEyLDUwNzEzLDUwNzE1LDUwNzE2LDUwNzI0LDUwNzI1LDUwNzI4LDUwNzMyLDUwNzMzLDUwNzM0LDUwNzM2LDUwNzM5LDUwNzQwLDUwNzQxLDUwNzQzLDUwNzQ1LDUwNzQ3LDUwNzUyLDUwNzUzLDUwNzU2LDUwNzYwLDUwNzY4LDUwNzY5''@;'; put 'put ''LDUwNzcxLDUwNzcyLDUwNzczLDUwNzgwLDUwNzgxLDUwNzg0LDUwNzk2LDUwNzk5LDUwODAxLDUwODA4LDUwODA5LDUwODEyLDUwODE2LDUwODI0LDUwODI1LDUwODI3LDUwODI5LDUwODM2LDUwODM3LDUwODQwLDUwODQ0LDUwODUyLDUwODUzLDUwODU1LDUwODU3LDUwODY0LDUwODY1LDUw''@;'; put 'put ''ODY4LDUwODcyLDUwODczLDUwODc0LDUwODgwLDUwODgxLDUwODgzLDUwODg1LDUwODkyLDUwODkzLDUwODk2LDUwOTAwLDUwOTA4LDUwOTA5LDUwOTEyLDUwOTEzLDUwOTIwLDU0NTI2LDU0NTI3LDU0NTI4LDU0NTI5LDU0NTMwLDU0NTMxLDU0NTMzLDU0NTM0LDU0NTM1LDU0NTM3LDU0NTM4''@;'; put 'put ''LDU0NTM5LDU0NTQxLDU0NTQyLDU0NTQzLDU0NTQ0LDU0NTQ1LDU0NTQ2LDU0NTQ3LDU0NTUwLDU0NTUyLDU0NTUzLDU0NTU0LDU0NTU1LDU0NTU2LDU0NTU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTU4LDU0NTU5LDU0NTYwLDU0NTYxLDU0NTYyLDU0NTYzLDU0NTY0LDU0''@;'; put 'put ''NTY1LDU0NTY2LDU0NTY3LDU0NTY4LDU0NTY5LDU0NTcwLDU0NTcxLDU0NTcyLDU0NTczLDU0NTc0LDU0NTc1LDU0NTc2LDU0NTc3LDU0NTc4LDU0NTc5LDU0NTgwLDU0NTgxLDU0NTgyLDU0NTgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NTg0LDU0NTg1LDU0NTg2LDU0NTg3''@;'; put 'put ''LDU0NTkwLDU0NTkxLDU0NTkzLDU0NTk0LDU0NTk1LDU0NTk3LDU0NTk4LDU0NTk5LDU0NjAwLDU0NjAxLDU0NjAyLDU0NjAzLDU0NjA2LDU0NjA4LDU0NjEwLDU0NjExLDU0NjEyLDU0NjEzLDU0NjE0LDU0NjE1LDU0NjE4LDU0NjE5LDU0NjIxLDU0NjIyLDU0NjIzLDU0NjI1LDU0NjI2LDU0''@;'; put 'put ''NjI3LDUwOTIxLDUwOTI0LDUwOTI4LDUwOTM2LDUwOTM3LDUwOTQxLDUwOTQ4LDUwOTQ5LDUwOTUyLDUwOTU2LDUwOTY0LDUwOTY1LDUwOTY3LDUwOTY5LDUwOTc2LDUwOTc3LDUwOTgwLDUwOTg0LDUwOTkyLDUwOTkzLDUwOTk1LDUwOTk3LDUwOTk5LDUxMDA0LDUxMDA1LDUxMDA4LDUxMDEy''@;'; put 'put ''LDUxMDE4LDUxMDIwLDUxMDIxLDUxMDIzLDUxMDI1LDUxMDI2LDUxMDI3LDUxMDI4LDUxMDI5LDUxMDMwLDUxMDMxLDUxMDMyLDUxMDM2LDUxMDQwLDUxMDQ4LDUxMDUxLDUxMDYwLDUxMDYxLDUxMDY0LDUxMDY4LDUxMDY5LDUxMDcwLDUxMDc1LDUxMDc2LDUxMDc3LDUxMDc5LDUxMDgwLDUx''@;'; put 'put ''MDgxLDUxMDgyLDUxMDg2LDUxMDg4LDUxMDg5LDUxMDkyLDUxMDk0LDUxMDk1LDUxMDk2LDUxMDk4LDUxMTA0LDUxMTA1LDUxMTA3LDUxMTA4LDUxMTA5LDUxMTEwLDUxMTE2LDUxMTE3LDUxMTIwLDUxMTI0LDUxMTMyLDUxMTMzLDUxMTM1LDUxMTM2LDUxMTM3LDUxMTQ0LDUxMTQ1LDUxMTQ4''@;'; put 'put ''LDUxMTUwLDUxMTUyLDUxMTYwLDUxMTY1LDUxMTcyLDUxMTc2LDUxMTgwLDUxMjAwLDUxMjAxLDUxMjA0LDUxMjA4LDUxMjEwLDU0NjI4LDU0NjMwLDU0NjMxLDU0NjM0LDU0NjM2LDU0NjM4LDU0NjM5LDU0NjQwLDU0NjQxLDU0NjQyLDU0NjQzLDU0NjQ2LDU0NjQ3LDU0NjQ5LDU0NjUwLDU0''@;'; put 'put ''NjUxLDU0NjUzLDU0NjU0LDU0NjU1LDU0NjU2LDU0NjU3LDU0NjU4LDU0NjU5LDU0NjYyLDU0NjY2LDU0NjY3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NjY4LDU0NjY5LDU0NjcwLDU0NjcxLDU0NjczLDU0Njc0LDU0Njc1LDU0Njc2LDU0Njc3LDU0Njc4LDU0Njc5LDU0Njgw''@;'; put 'put ''LDU0NjgxLDU0NjgyLDU0NjgzLDU0Njg0LDU0Njg1LDU0Njg2LDU0Njg3LDU0Njg4LDU0Njg5LDU0NjkwLDU0NjkxLDU0NjkyLDU0Njk0LDU0Njk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0Njk2LDU0Njk3LDU0Njk4LDU0Njk5LDU0NzAwLDU0NzAxLDU0NzAyLDU0NzAzLDU0''@;'; put 'put ''NzA0LDU0NzA1LDU0NzA2LDU0NzA3LDU0NzA4LDU0NzA5LDU0NzEwLDU0NzExLDU0NzEyLDU0NzEzLDU0NzE0LDU0NzE1LDU0NzE2LDU0NzE3LDU0NzE4LDU0NzE5LDU0NzIwLDU0NzIxLDU0NzIyLDU0NzIzLDU0NzI0LDU0NzI1LDU0NzI2LDU0NzI3LDUxMjE2LDUxMjE3LDUxMjE5LDUxMjIx''@;'; put 'put ''LDUxMjIyLDUxMjI4LDUxMjI5LDUxMjMyLDUxMjM2LDUxMjQ0LDUxMjQ1LDUxMjQ3LDUxMjQ5LDUxMjU2LDUxMjYwLDUxMjY0LDUxMjcyLDUxMjczLDUxMjc2LDUxMjc3LDUxMjg0LDUxMzEyLDUxMzEzLDUxMzE2LDUxMzIwLDUxMzIyLDUxMzI4LDUxMzI5LDUxMzMxLDUxMzMzLDUxMzM0LDUx''@;'; put 'put ''MzM1LDUxMzM5LDUxMzQwLDUxMzQxLDUxMzQ4LDUxMzU3LDUxMzU5LDUxMzYxLDUxMzY4LDUxMzg4LDUxMzg5LDUxMzk2LDUxNDAwLDUxNDA0LDUxNDEyLDUxNDEzLDUxNDE1LDUxNDE3LDUxNDI0LDUxNDI1LDUxNDI4LDUxNDQ1LDUxNDUyLDUxNDUzLDUxNDU2LDUxNDYwLDUxNDYxLDUxNDYy''@;'; put 'put ''LDUxNDY4LDUxNDY5LDUxNDcxLDUxNDczLDUxNDgwLDUxNTAwLDUxNTA4LDUxNTM2LDUxNTM3LDUxNTQwLDUxNTQ0LDUxNTUyLDUxNTUzLDUxNTU1LDUxNTY0LDUxNTY4LDUxNTcyLDUxNTgwLDUxNTkyLDUxNTkzLDUxNTk2LDUxNjAwLDUxNjA4LDUxNjA5LDUxNjExLDUxNjEzLDUxNjQ4LDUx''@;'; put 'put ''NjQ5LDUxNjUyLDUxNjU1LDUxNjU2LDUxNjU4LDUxNjY0LDUxNjY1LDUxNjY3LDU0NzMwLDU0NzMxLDU0NzMzLDU0NzM0LDU0NzM1LDU0NzM3LDU0NzM5LDU0NzQwLDU0NzQxLDU0NzQyLDU0NzQzLDU0NzQ2LDU0NzQ4LDU0NzUwLDU0NzUxLDU0NzUyLDU0NzUzLDU0NzU0LDU0NzU1LDU0NzU4''@;'; put 'put ''LDU0NzU5LDU0NzYxLDU0NzYyLDU0NzYzLDU0NzY1LDU0NzY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0NzY3LDU0NzY4LDU0NzY5LDU0NzcwLDU0NzcxLDU0Nzc0LDU0Nzc2LDU0Nzc4LDU0Nzc5LDU0NzgwLDU0NzgxLDU0NzgyLDU0NzgzLDU0Nzg2LDU0Nzg3LDU0Nzg5LDU0''@;'; put 'put ''NzkwLDU0NzkxLDU0NzkzLDU0Nzk0LDU0Nzk1LDU0Nzk2LDU0Nzk3LDU0Nzk4LDU0Nzk5LDU0ODAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODA2LDU0ODA3LDU0ODA4LDU0ODA5LDU0ODEwLDU0ODExLDU0ODEzLDU0ODE0LDU0ODE1LDU0ODE3LDU0ODE4LDU0ODE5LDU0ODIx''@;'; put 'put ''LDU0ODIyLDU0ODIzLDU0ODI0LDU0ODI1LDU0ODI2LDU0ODI3LDU0ODI4LDU0ODMwLDU0ODMxLDU0ODMyLDU0ODMzLDU0ODM0LDU0ODM1LDU0ODM2LDU0ODM3LDU0ODM4LDU0ODM5LDU0ODQyLDU0ODQzLDUxNjY5LDUxNjcwLDUxNjczLDUxNjc0LDUxNjc2LDUxNjc3LDUxNjgwLDUxNjgyLDUx''@;'; put 'put ''Njg0LDUxNjg3LDUxNjkyLDUxNjkzLDUxNjk1LDUxNjk2LDUxNjk3LDUxNzA0LDUxNzA1LDUxNzA4LDUxNzEyLDUxNzIwLDUxNzIxLDUxNzIzLDUxNzI0LDUxNzI1LDUxNzMyLDUxNzM2LDUxNzUzLDUxNzg4LDUxNzg5LDUxNzkyLDUxNzk2LDUxODA0LDUxODA1LDUxODA3LDUxODA4LDUxODA5''@;'; put 'put ''LDUxODE2LDUxODM3LDUxODQ0LDUxODY0LDUxOTAwLDUxOTAxLDUxOTA0LDUxOTA4LDUxOTE2LDUxOTE3LDUxOTE5LDUxOTIxLDUxOTIzLDUxOTI4LDUxOTI5LDUxOTM2LDUxOTQ4LDUxOTU2LDUxOTc2LDUxOTg0LDUxOTg4LDUxOTkyLDUyZTMsNTIwMDEsNTIwMzMsNTIwNDAsNTIwNDEsNTIw''@;'; put 'put ''NDQsNTIwNDgsNTIwNTYsNTIwNTcsNTIwNjEsNTIwNjgsNTIwODgsNTIwODksNTIxMjQsNTIxNTIsNTIxODAsNTIxOTYsNTIxOTksNTIyMDEsNTIyMzYsNTIyMzcsNTIyNDAsNTIyNDQsNTIyNTIsNTIyNTMsNTIyNTcsNTIyNTgsNTIyNjMsNTIyNjQsNTIyNjUsNTIyNjgsNTIyNzAsNTIyNzIs''@;'; put 'put ''NTIyODAsNTIyODEsNTIyODMsNTQ4NDUsNTQ4NDYsNTQ4NDcsNTQ4NDksNTQ4NTAsNTQ4NTEsNTQ4NTIsNTQ4NTQsNTQ4NTUsNTQ4NTgsNTQ4NjAsNTQ4NjIsNTQ4NjMsNTQ4NjQsNTQ4NjYsNTQ4NjcsNTQ4NzAsNTQ4NzEsNTQ4NzMsNTQ4NzQsNTQ4NzUsNTQ4NzcsNTQ4NzgsNTQ4NzksNTQ4''@;'; put 'put ''ODAsNTQ4ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4ODIsNTQ4ODMsNTQ4ODQsNTQ4ODUsNTQ4ODYsNTQ4ODgsNTQ4OTAsNTQ4OTEsNTQ4OTIsNTQ4OTMsNTQ4OTQsNTQ4OTUsNTQ4OTgsNTQ4OTksNTQ5MDEsNTQ5MDIsNTQ5MDMsNTQ5MDQsNTQ5MDUsNTQ5MDYsNTQ5MDcs''@;'; put 'put ''NTQ5MDgsNTQ5MDksNTQ5MTAsNTQ5MTEsNTQ5MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ5MTMsNTQ5MTQsNTQ5MTYsNTQ5MTgsNTQ5MTksNTQ5MjAsNTQ5MjEsNTQ5MjIsNTQ5MjMsNTQ5MjYsNTQ5MjcsNTQ5MjksNTQ5MzAsNTQ5MzEsNTQ5MzMsNTQ5MzQsNTQ5MzUsNTQ5''@;'; put 'put ''MzYsNTQ5MzcsNTQ5MzgsNTQ5MzksNTQ5NDAsNTQ5NDIsNTQ5NDQsNTQ5NDYsNTQ5NDcsNTQ5NDgsNTQ5NDksNTQ5NTAsNTQ5NTEsNTQ5NTMsNTQ5NTQsNTIyODQsNTIyODUsNTIyODYsNTIyOTIsNTIyOTMsNTIyOTYsNTIzMDAsNTIzMDgsNTIzMDksNTIzMTEsNTIzMTIsNTIzMTMsNTIzMjAs''@;'; put 'put ''NTIzMjQsNTIzMjYsNTIzMjgsNTIzMzYsNTIzNDEsNTIzNzYsNTIzNzcsNTIzODAsNTIzODQsNTIzOTIsNTIzOTMsNTIzOTUsNTIzOTYsNTIzOTcsNTI0MDQsNTI0MDUsNTI0MDgsNTI0MTIsNTI0MjAsNTI0MjEsNTI0MjMsNTI0MjUsNTI0MzIsNTI0MzYsNTI0NTIsNTI0NjAsNTI0NjQsNTI0''@;'; put 'put ''ODEsNTI0ODgsNTI0ODksNTI0OTIsNTI0OTYsNTI1MDQsNTI1MDUsNTI1MDcsNTI1MDksNTI1MTYsNTI1MjAsNTI1MjQsNTI1MzcsNTI1NzIsNTI1NzYsNTI1ODAsNTI1ODgsNTI1ODksNTI1OTEsNTI1OTMsNTI2MDAsNTI2MTYsNTI2MjgsNTI2MjksNTI2MzIsNTI2MzYsNTI2NDQsNTI2NDUs''@;'; put 'put ''NTI2NDcsNTI2NDksNTI2NTYsNTI2NzYsNTI2ODQsNTI2ODgsNTI3MTIsNTI3MTYsNTI3MjAsNTI3MjgsNTI3MjksNTI3MzEsNTI3MzMsNTI3NDAsNTI3NDQsNTI3NDgsNTI3NTYsNTI3NjEsNTI3NjgsNTI3NjksNTI3NzIsNTI3NzYsNTI3ODQsNTI3ODUsNTI3ODcsNTI3ODksNTQ5NTUsNTQ5''@;'; put 'put ''NTcsNTQ5NTgsNTQ5NTksNTQ5NjEsNTQ5NjIsNTQ5NjMsNTQ5NjQsNTQ5NjUsNTQ5NjYsNTQ5NjcsNTQ5NjgsNTQ5NzAsNTQ5NzIsNTQ5NzMsNTQ5NzQsNTQ5NzUsNTQ5NzYsNTQ5NzcsNTQ5NzgsNTQ5NzksNTQ5ODIsNTQ5ODMsNTQ5ODUsNTQ5ODYsNTQ5ODcsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNTQ5ODksNTQ5OTAsNTQ5OTEsNTQ5OTIsNTQ5OTQsNTQ5OTUsNTQ5OTcsNTQ5OTgsNTVlMyw1NTAwMiw1NTAwMyw1NTAwNCw1NTAwNSw1NTAwNiw1NTAwNyw1NTAwOSw1NTAxMCw1NTAxMSw1NTAxMyw1NTAxNCw1NTAxNSw1NTAxNyw1NTAxOCw1NTAxOSw1NTAyMCw1NTAy''@;'; put 'put ''MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTAyMiw1NTAyMyw1NTAyNSw1NTAyNiw1NTAyNyw1NTAyOCw1NTAzMCw1NTAzMSw1NTAzMiw1NTAzMyw1NTAzNCw1NTAzNSw1NTAzOCw1NTAzOSw1NTA0MSw1NTA0Miw1NTA0Myw1NTA0NSw1NTA0Niw1NTA0Nyw1NTA0OCw1NTA0OSw1''@;'; put 'put ''NTA1MCw1NTA1MSw1NTA1Miw1NTA1Myw1NTA1NCw1NTA1NSw1NTA1Niw1NTA1OCw1NTA1OSw1NTA2MCw1MjgyNCw1MjgyNSw1MjgyOCw1MjgzMSw1MjgzMiw1MjgzMyw1Mjg0MCw1Mjg0MSw1Mjg0Myw1Mjg0NSw1Mjg1Miw1Mjg1Myw1Mjg1Niw1Mjg2MCw1Mjg2OCw1Mjg2OSw1Mjg3MSw1Mjg3''@;'; put 'put ''Myw1Mjg4MCw1Mjg4MSw1Mjg4NCw1Mjg4OCw1Mjg5Niw1Mjg5Nyw1Mjg5OSw1MjkwMCw1MjkwMSw1MjkwOCw1MjkwOSw1MjkyOSw1Mjk2NCw1Mjk2NSw1Mjk2OCw1Mjk3MSw1Mjk3Miw1Mjk4MCw1Mjk4MSw1Mjk4Myw1Mjk4NCw1Mjk4NSw1Mjk5Miw1Mjk5Myw1Mjk5Niw1M2UzLDUzMDA4LDUz''@;'; put 'put ''MDA5LDUzMDExLDUzMDEzLDUzMDIwLDUzMDI0LDUzMDI4LDUzMDM2LDUzMDM3LDUzMDM5LDUzMDQwLDUzMDQxLDUzMDQ4LDUzMDc2LDUzMDc3LDUzMDgwLDUzMDg0LDUzMDkyLDUzMDkzLDUzMDk1LDUzMDk3LDUzMTA0LDUzMTA1LDUzMTA4LDUzMTEyLDUzMTIwLDUzMTI1LDUzMTMyLDUzMTUz''@;'; put 'put ''LDUzMTYwLDUzMTY4LDUzMTg4LDUzMjE2LDUzMjE3LDUzMjIwLDUzMjI0LDUzMjMyLDUzMjMzLDUzMjM1LDUzMjM3LDUzMjQ0LDUzMjQ4LDUzMjUyLDUzMjY1LDUzMjcyLDUzMjkzLDUzMzAwLDUzMzAxLDUzMzA0LDUzMzA4LDU1MDYxLDU1MDYyLDU1MDYzLDU1MDY2LDU1MDY3LDU1MDY5LDU1''@;'; put 'put ''MDcwLDU1MDcxLDU1MDczLDU1MDc0LDU1MDc1LDU1MDc2LDU1MDc3LDU1MDc4LDU1MDc5LDU1MDgyLDU1MDg0LDU1MDg2LDU1MDg3LDU1MDg4LDU1MDg5LDU1MDkwLDU1MDkxLDU1MDk0LDU1MDk1LDU1MDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MDk4LDU1MDk5LDU1MTAx''@;'; put 'put ''LDU1MTAyLDU1MTAzLDU1MTA0LDU1MTA1LDU1MTA2LDU1MTA3LDU1MTA5LDU1MTEwLDU1MTEyLDU1MTE0LDU1MTE1LDU1MTE2LDU1MTE3LDU1MTE4LDU1MTE5LDU1MTIyLDU1MTIzLDU1MTI1LDU1MTMwLDU1MTMxLDU1MTMyLDU1MTMzLDU1MTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDU1MTM1LDU1MTM4LDU1MTQwLDU1MTQyLDU1MTQzLDU1MTQ0LDU1MTQ2LDU1MTQ3LDU1MTQ5LDU1MTUwLDU1MTUxLDU1MTUzLDU1MTU0LDU1MTU1LDU1MTU3LDU1MTU4LDU1MTU5LDU1MTYwLDU1MTYxLDU1MTYyLDU1MTYzLDU1MTY2LDU1MTY3LDU1MTY4LDU1MTcwLDU1MTcxLDU1MTcy''@;'; put 'put ''LDU1MTczLDU1MTc0LDU1MTc1LDU1MTc4LDU1MTc5LDUzMzE2LDUzMzE3LDUzMzE5LDUzMzIxLDUzMzI4LDUzMzMyLDUzMzM2LDUzMzQ0LDUzMzU2LDUzMzU3LDUzMzYwLDUzMzY0LDUzMzcyLDUzMzczLDUzMzc3LDUzNDEyLDUzNDEzLDUzNDE2LDUzNDIwLDUzNDI4LDUzNDI5LDUzNDMxLDUz''@;'; put 'put ''NDMzLDUzNDQwLDUzNDQxLDUzNDQ0LDUzNDQ4LDUzNDQ5LDUzNDU2LDUzNDU3LDUzNDU5LDUzNDYwLDUzNDYxLDUzNDY4LDUzNDY5LDUzNDcyLDUzNDc2LDUzNDg0LDUzNDg1LDUzNDg3LDUzNDg4LDUzNDg5LDUzNDk2LDUzNTE3LDUzNTUyLDUzNTUzLDUzNTU2LDUzNTYwLDUzNTYyLDUzNTY4''@;'; put 'put ''LDUzNTY5LDUzNTcxLDUzNTcyLDUzNTczLDUzNTgwLDUzNTgxLDUzNTg0LDUzNTg4LDUzNTk2LDUzNTk3LDUzNTk5LDUzNjAxLDUzNjA4LDUzNjEyLDUzNjI4LDUzNjM2LDUzNjQwLDUzNjY0LDUzNjY1LDUzNjY4LDUzNjcyLDUzNjgwLDUzNjgxLDUzNjgzLDUzNjg1LDUzNjkwLDUzNjkyLDUz''@;'; put 'put ''Njk2LDUzNzIwLDUzNzQ4LDUzNzUyLDUzNzY3LDUzNzY5LDUzNzc2LDUzODA0LDUzODA1LDUzODA4LDUzODEyLDUzODIwLDUzODIxLDUzODIzLDUzODI1LDUzODMyLDUzODUyLDU1MTgxLDU1MTgyLDU1MTgzLDU1MTg1LDU1MTg2LDU1MTg3LDU1MTg4LDU1MTg5LDU1MTkwLDU1MTkxLDU1MTk0''@;'; put 'put ''LDU1MTk2LDU1MTk4LDU1MTk5LDU1MjAwLDU1MjAxLDU1MjAyLDU1MjAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzODYwLDUzODg4LDUzODg5LDUzODkyLDUzODk2LDUzOTA0LDUzOTA1LDUzOTA5LDUzOTE2LDUzOTIwLDUz''@;'; put 'put ''OTI0LDUzOTMyLDUzOTM3LDUzOTQ0LDUzOTQ1LDUzOTQ4LDUzOTUxLDUzOTUyLDUzOTU0LDUzOTYwLDUzOTYxLDUzOTYzLDUzOTcyLDUzOTc2LDUzOTgwLDUzOTg4LDUzOTg5LDU0ZTMsNTQwMDEsNTQwMDQsNTQwMDgsNTQwMTYsNTQwMTcsNTQwMTksNTQwMjEsNTQwMjgsNTQwMjksNTQwMzAs''@;'; put 'put ''NTQwMzIsNTQwMzYsNTQwMzgsNTQwNDQsNTQwNDUsNTQwNDcsNTQwNDgsNTQwNDksNTQwNTMsNTQwNTYsNTQwNTcsNTQwNjAsNTQwNjQsNTQwNzIsNTQwNzMsNTQwNzUsNTQwNzYsNTQwNzcsNTQwODQsNTQwODUsNTQxNDAsNTQxNDEsNTQxNDQsNTQxNDgsNTQxNTYsNTQxNTcsNTQxNTksNTQx''@;'; put 'put ''NjAsNTQxNjEsNTQxNjgsNTQxNjksNTQxNzIsNTQxNzYsNTQxODQsNTQxODUsNTQxODcsNTQxODksNTQxOTYsNTQyMDAsNTQyMDQsNTQyMTIsNTQyMTMsNTQyMTYsNTQyMTcsNTQyMjQsNTQyMzIsNTQyNDEsNTQyNDMsNTQyNTIsNTQyNTMsNTQyNTYsNTQyNjAsNTQyNjgsNTQyNjksNTQyNzEs''@;'; put 'put ''NTQyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyODAsNTQz''@;'; put 'put ''MDEsNTQzMzYsNTQzNDAsNTQzNjQsNTQzNjgsNTQzNzIsNTQzODEsNTQzODMsNTQzOTIsNTQzOTMsNTQzOTYsNTQzOTksNTQ0MDAsNTQ0MDIsNTQ0MDgsNTQ0MDksNTQ0MTEsNTQ0MTMsNTQ0MjAsNTQ0NDEsNTQ0NzYsNTQ0ODAsNTQ0ODQsNTQ0OTIsNTQ0OTUsNTQ1MDQsNTQ1MDgsNTQ1MTIs''@;'; put 'put ''NTQ1MjAsNTQ1MjMsNTQ1MjUsNTQ1MzIsNTQ1MzYsNTQ1NDAsNTQ1NDgsNTQ1NDksNTQ1NTEsNTQ1ODgsNTQ1ODksNTQ1OTIsNTQ1OTYsNTQ2MDQsNTQ2MDUsNTQ2MDcsNTQ2MDksNTQ2MTYsNTQ2MTcsNTQ2MjAsNTQ2MjQsNTQ2MjksNTQ2MzIsNTQ2MzMsNTQ2MzUsNTQ2MzcsNTQ2NDQsNTQ2''@;'; put 'put ''NDUsNTQ2NDgsNTQ2NTIsNTQ2NjAsNTQ2NjEsNTQ2NjMsNTQ2NjQsNTQ2NjUsNTQ2NzIsNTQ2OTMsNTQ3MjgsNTQ3MjksNTQ3MzIsNTQ3MzYsNTQ3MzgsNTQ3NDQsNTQ3NDUsNTQ3NDcsNTQ3NDksNTQ3NTYsNTQ3NTcsNTQ3NjAsNTQ3NjQsNTQ3NzIsNTQ3NzMsNTQ3NzUsNTQ3NzcsNTQ3ODQs''@;'; put 'put ''NTQ3ODUsNTQ3ODgsNTQ3OTIsNTQ4MDAsNTQ4MDEsNTQ4MDMsNTQ4MDQsNTQ4MDUsNTQ4MTIsNTQ4MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MjAsNTQ4MjksNTQ4NDAsNTQ4NDEsNTQ4NDQsNTQ4NDgsNTQ4NTMsNTQ4NTYsNTQ4NTcsNTQ4NTksNTQ4NjEsNTQ4NjUsNTQ4NjgsNTQ4NjksNTQ4NzIsNTQ4NzYsNTQ4ODcsNTQ4ODksNTQ4OTYsNTQ4OTcs''@;'; put 'put ''NTQ5MDAsNTQ5MTUsNTQ5MTcsNTQ5MjQsNTQ5MjUsNTQ5MjgsNTQ5MzIsNTQ5NDEsNTQ5NDMsNTQ5NDUsNTQ5NTIsNTQ5NTYsNTQ5NjAsNTQ5NjksNTQ5NzEsNTQ5ODAsNTQ5ODEsNTQ5ODQsNTQ5ODgsNTQ5OTMsNTQ5OTYsNTQ5OTksNTUwMDEsNTUwMDgsNTUwMTIsNTUwMTYsNTUwMjQsNTUw''@;'; put 'put ''MjksNTUwMzYsNTUwMzcsNTUwNDAsNTUwNDQsNTUwNTcsNTUwNjQsNTUwNjUsNTUwNjgsNTUwNzIsNTUwODAsNTUwODEsNTUwODMsNTUwODUsNTUwOTIsNTUwOTMsNTUwOTYsNTUxMDAsNTUxMDgsNTUxMTEsNTUxMTMsNTUxMjAsNTUxMjEsNTUxMjQsNTUxMjYsNTUxMjcsNTUxMjgsNTUxMjks''@;'; put 'put ''NTUxMzYsNTUxMzcsNTUxMzksNTUxNDEsNTUxNDUsNTUxNDgsNTUxNTIsNTUxNTYsNTUxNjQsNTUxNjUsNTUxNjksNTUxNzYsNTUxNzcsNTUxODAsNTUxODQsNTUxOTIsNTUxOTMsNTUxOTUsNTUxOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDI4NSwyMDMzOSwyMDU1MSwyMDcyOSwyMTE1MiwyMTQ4NywyMTYyMSwyMTczMywyMjAyNSwyMzIzMywyMzQ3OCwyNjI0NywyNjU1MCwyNjU1MSwyNjYwNywyNzQ2OCwyOTYzNCwzMDE0''@;'; put 'put ''NiwzMTI5MiwzMzQ5OSwzMzU0MCwzNDkwMywzNDk1MiwzNTM4MiwzNjA0MCwzNjMwMywzNjYwMywzNjgzOCwzOTM4MSwyMTA1MSwyMTM2NCwyMTUwOCwyNDY4MiwyNDkzMiwyNzU4MCwyOTY0NywzMzA1MCwzNTI1OCwzNTI4MiwzODMwNywyMDM1NSwyMTAwMiwyMjcxOCwyMjkwNCwyMzAxNCwy''@;'; put 'put ''NDE3OCwyNDE4NSwyNTAzMSwyNTUzNiwyNjQzOCwyNjYwNCwyNjc1MSwyODU2NywzMDI4NiwzMDQ3NSwzMDk2NSwzMTI0MCwzMTQ4NywzMTc3NywzMjkyNSwzMzM5MCwzMzM5MywzNTU2MywzODI5MSwyMDA3NSwyMTkxNywyNjM1OSwyODIxMiwzMDg4MywzMTQ2OSwzMzg4MywzNTA4OCwzNDYz''@;'; put 'put ''OCwzODgyNCwyMTIwOCwyMjM1MCwyMjU3MCwyMzg4NCwyNDg2MywyNTAyMiwyNTEyMSwyNTk1NCwyNjU3NywyNzIwNCwyODE4NywyOTk3NiwzMDEzMSwzMDQzNSwzMDY0MCwzMjA1OCwzNzAzOSwzNzk2OSwzNzk3MCw0MDg1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTI4MywyMzcyNCwzMDAwMiwzMjk4NywzNzQ0MCwzODI5NiwyMTA4MywyMjUzNiwyMzAw''@;'; put 'put ''NCwyMzcxMywyMzgzMSwyNDI0NywyNDM3OCwyNDM5NCwyNDk1MSwyNzc0MywzMDA3NCwzMDA4NiwzMTk2OCwzMjExNSwzMjE3NywzMjY1MiwzMzEwOCwzMzMxMywzNDE5MywzNTEzNywzNTYxMSwzNzYyOCwzODQ3Nyw0MDAwNywyMDE3MSwyMDIxNSwyMDQ5MSwyMDk3NywyMjYwNywyNDg4Nywy''@;'; put 'put ''NDg5NCwyNDkzNiwyNTkxMywyNzExNCwyODQzMywzMDExNywzMDM0MiwzMDQyMiwzMTYyMywzMzQ0NSwzMzk5NSw2Mzc0NCwzNzc5OSwzODI4MywyMTg4OCwyMzQ1OCwyMjM1Myw2Mzc0NSwzMTkyMywzMjY5NywzNzMwMSwyMDUyMCwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTQ1NCwyNTgx''@;'; put 'put ''OCwyNTgzMSwyODE5MiwyODg0NCwzMTA2NywzNjMxNywzNjM4Miw2Mzc0NiwzNjk4OSwzNzQ0NSwzNzYyNCwyMDA5NCwyMDIxNCwyMDU4MSwyNDA2MiwyNDMxNCwyNDgzOCwyNjk2NywzMzEzNywzNDM4OCwzNjQyMywzNzc0OSwzOTQ2NywyMDA2MiwyMDYyNSwyNjQ4MCwyNjY4OCwyMDc0NSwy''@;'; put 'put ''MTEzMywyMTEzOCwyNzI5OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwzMDY1MiwzNzM5Miw0MDY2MCwyMTE2MywyNDYyMywzNjg1MCwyMDU1MiwyNTAwMSwyNTU4MSwyNTgwMiwyNjY4NCwyNzI2OCwyODYwOCwzMzE2MCwzNTIzMywzODU0OCwyMjUzMywyOTMwOSwyOTM1NiwyOTk1NiwzMjEyMSwzMjM2NSwzMjkzNywzNTIxMSwzNTcwMCwzNjk2Myw0MDI3Mywy''@;'; put 'put ''NTIyNSwyNzc3MCwyODUwMCwzMjA4MCwzMjU3MCwzNTM2MywyMDg2MCwyNDkwNiwzMTY0NSwzNTYwOSwzNzQ2MywzNzc3MiwyMDE0MCwyMDQzNSwyMDUxMCwyMDY3MCwyMDc0MiwyMTE4NSwyMTE5NywyMTM3NSwyMjM4NCwyMjY1OSwyNDIxOCwyNDQ2NSwyNDk1MCwyNTAwNCwyNTgwNiwyNTk2''@;'; put 'put ''NCwyNjIyMywyNjI5OSwyNjM1NiwyNjc3NSwyODAzOSwyODgwNSwyODkxMywyOTg1NSwyOTg2MSwyOTg5OCwzMDE2OSwzMDgyOCwzMDk1NiwzMTQ1NSwzMTQ3OCwzMjA2OSwzMjE0NywzMjc4OSwzMjgzMSwzMzA1MSwzMzY4NiwzNTY4NiwzNjYyOSwzNjg4NSwzNzg1NywzODkxNSwzODk2OCwz''@;'; put 'put ''OTUxNCwzOTkxMiwyMDQxOCwyMTg0MywyMjU4NiwyMjg2NSwyMzM5NSwyMzYyMiwyNDc2MCwyNTEwNiwyNjY5MCwyNjgwMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg1NiwyODMzMCwzMDAyOCwzMDMyOCwzMDkyNiwzMTI5MywzMTk5NSwzMjM2MywzMjM4MCwzNTMzNiwzNTQ4OSwzNTkwMywzODU0Miw0MDM4OCwyMTQ3NiwyMTQ4MSwyMTU3OCwyMTYxNywy''@;'; put 'put ''MjI2NiwyMjk5MywyMzM5NiwyMzYxMSwyNDIzNSwyNTMzNSwyNTkxMSwyNTkyNSwyNTk3MCwyNjI3MiwyNjU0MywyNzA3MywyNzgzNywzMDIwNCwzMDM1MiwzMDU5MCwzMTI5NSwzMjY2MCwzMjc3MSwzMjkyOSwzMzE2NywzMzUxMCwzMzUzMywzMzc3NiwzNDI0MSwzNDg2NSwzNDk5NiwzNTQ5''@;'; put 'put ''Myw2Mzc0NywzNjc2NCwzNzY3OCwzODU5OSwzOTAxNSwzOTY0MCw0MDcyMywyMTc0MSwyNjAxMSwyNjM1NCwyNjc2NywzMTI5NiwzNTg5NSw0MDI4OCwyMjI1NiwyMjM3MiwyMzgyNSwyNjExOCwyNjgwMSwyNjgyOSwyODQxNCwyOTczNiwzNDk3NCwzOTkwOCwyNzc1Miw2Mzc0OCwzOTU5Miwy''@;'; put 'put ''MDM3OSwyMDg0NCwyMDg0OSwyMTE1MSwyMzM4MCwyNDAzNywyNDY1NiwyNDY4NSwyNTMyOSwyNTUxMSwyNTkxNSwyOTY1NywzMTM1NCwzNDQ2NywzNjAwMiwzODc5OSwyMDAxOCwyMzUyMSwyNTA5NiwyNjUyNCwyOTkxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTE4NSwzMzc0NywzNTQ2MywzNTUwNiwzNjMyOCwzNjk0MiwzNzcwNywzODk4MiwyNDI3NSwy''@;'; put 'put ''NzExMiwzNDMwMywzNzEwMSw2Mzc0OSwyMDg5NiwyMzQ0OCwyMzUzMiwyNDkzMSwyNjg3NCwyNzQ1NCwyODc0OCwyOTc0MywyOTkxMiwzMTY0OSwzMjU5MiwzMzczMywzNTI2NCwzNjAxMSwzODM2NCwzOTIwOCwyMTAzOCwyNDY2OSwyNTMyNCwzNjg2NiwyMDM2MiwyMDgwOSwyMTI4MSwyMjc0''@;'; put 'put ''NSwyNDI5MSwyNjMzNiwyNzk2MCwyODgyNiwyOTM3OCwyOTY1NCwzMTU2OCwzMzAwOSwzNzk3OSwyMTM1MCwyNTQ5OSwzMjYxOSwyMDA1NCwyMDYwOCwyMjYwMiwyMjc1MCwyNDYxOCwyNDg3MSwyNTI5NiwyNzA4OCwzOTc0NSwyMzQzOSwzMjAyNCwzMjk0NSwzNjcwMywyMDEzMiwyMDY4OSwy''@;'; put 'put ''MTY3NiwyMTkzMiwyMzMwOCwyMzk2OCwyNDAzOSwyNTg5OCwyNTkzNCwyNjY1NywyNzIxMSwyOTQwOSwzMDM1MCwzMDcwMywzMjA5NCwzMjc2MSwzMzE4NCwzNDEyNiwzNDUyNywzNjYxMSwzNjY4NiwzNzA2NiwzOTE3MSwzOTUwOSwzOTg1MSwxOTk5MiwyMDAzNywyMDA2MSwyMDE2NywyMDQ2''@;'; put 'put ''NSwyMDg1NSwyMTI0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwy''@;'; put 'put ''MTMxMiwyMTQ3NSwyMTQ3NywyMTY0NiwyMjAzNiwyMjM4OSwyMjQzNCwyMzQ5NSwyMzk0MywyNDI3MiwyNTA4NCwyNTMwNCwyNTkzNywyNjU1MiwyNjYwMSwyNzA4MywyNzQ3MiwyNzU5MCwyNzYyOCwyNzcxNCwyODMxNywyODc5MiwyOTM5OSwyOTU5MCwyOTY5OSwzMDY1NSwzMDY5NywzMTM1''@;'; put 'put ''MCwzMjEyNywzMjc3NywzMzI3NiwzMzI4NSwzMzI5MCwzMzUwMywzNDkxNCwzNTYzNSwzNjA5MiwzNjU0NCwzNjg4MSwzNzA0MSwzNzQ3NiwzNzU1OCwzOTM3OCwzOTQ5Myw0MDE2OSw0MDQwNyw0MDg2MCwyMjI4MywyMzYxNiwzMzczOCwzODgxNiwzODgyNyw0MDYyOCwyMTUzMSwzMTM4NCwz''@;'; put 'put ''MjY3NiwzNTAzMywzNjU1NywzNzA4OSwyMjUyOCwyMzYyNCwyNTQ5NiwzMTM5MSwyMzQ3MCwyNDMzOSwzMTM1MywzMTQwNiwzMzQyMiwzNjUyNCwyMDUxOCwyMTA0OCwyMTI0MCwyMTM2NywyMjI4MCwyNTMzMSwyNTQ1OCwyNzQwMiwyODA5OSwzMDUxOSwyMTQxMywyOTUyNywzNDE1MiwzNjQ3''@;'; put 'put ''MCwzODM1NywyNjQyNiwyNzMzMSwyODUyOCwzNTQzNywzNjU1NiwzOTI0Myw2Mzc1MCwyNjIzMSwyNzUxMiwzNjAyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzOTc0MCw2Mzc1MSwyMTQ4MywyMjMxNywyMjg2MiwyNTU0MiwyNzEzMSwyOTY3NCwzMDc4OSwzMTQxOCwzMTQyOSwzMTk5OCwzMzkwOSwzNTIxNSwzNjIxMSwzNjkxNywzODMxMiwyMTI0MywyMjM0''@;'; put 'put ''MywzMDAyMywzMTU4NCwzMzc0MCwzNzQwNiw2Mzc1MiwyNzIyNCwyMDgxMSwyMTA2NywyMTEyNywyNTExOSwyNjg0MCwyNjk5NywzODU1MywyMDY3NywyMTE1NiwyMTIyMCwyNTAyNywyNjAyMCwyNjY4MSwyNzEzNSwyOTgyMiwzMTU2MywzMzQ2NSwzMzc3MSwzNTI1MCwzNTY0MSwzNjgxNywz''@;'; put 'put ''OTI0MSw2Mzc1MywyMDE3MCwyMjkzNSwyNTgxMCwyNjEyOSwyNzI3OCwyOTc0OCwzMTEwNSwzMTE2NSwzMzQ0OSwzNDk0MiwzNDk0MywzNTE2Nyw2Mzc1NCwzNzY3MCwyMDIzNSwyMTQ1MCwyNDYxMywyNTIwMSwyNzc2MiwzMjAyNiwzMjEwMiwyMDEyMCwyMDgzNCwzMDY4NCwzMjk0MywyMDIy''@;'; put 'put ''NSwyMDIzOCwyMDg1NCwyMDg2NCwyMTk4MCwyMjEyMCwyMjMzMSwyMjUyMiwyMjUyNCwyMjgwNCwyMjg1NSwyMjkzMSwyMzQ5MiwyMzY5NiwyMzgyMiwyNDA0OSwyNDE5MCwyNDUyNCwyNTIxNiwyNjA3MSwyNjA4MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjM5OCwyNjM5OSwyNjQ2MiwyNjgyNywyNjgyMCwyNzIzMSwyNzQ1MCwyNzY4MywyNzc3MywyNzc3''@;'; put 'put ''OCwyODEwMywyOTU5MiwyOTczNCwyOTczOCwyOTgyNiwyOTg1OSwzMDA3MiwzMDA3OSwzMDg0OSwzMDk1OSwzMTA0MSwzMTA0NywzMTA0OCwzMTA5OCwzMTYzNywzMmUzLDMyMTg2LDMyNjQ4LDMyNzc0LDMyODEzLDMyOTA4LDM1MzUyLDM1NjYzLDM1OTEyLDM2MjE1LDM3NjY1LDM3NjY4LDM5''@;'; put 'put ''MTM4LDM5MjQ5LDM5NDM4LDM5NDM5LDM5NTI1LDQwNTk0LDMyMjAyLDIwMzQyLDIxNTEzLDI1MzI2LDI2NzA4LDM3MzI5LDIxOTMxLDIwNzk0LDYzNzU1LDYzNzU2LDIzMDY4LDI1MDYyLDYzNzU3LDI1Mjk1LDI1MzQzLDYzNzU4LDYzNzU5LDYzNzYwLDYzNzYxLDYzNzYyLDYzNzYzLDM3MDI3''@;'; put 'put ''LDYzNzY0LDYzNzY1LDYzNzY2LDYzNzY3LDYzNzY4LDM1NTgyLDYzNzY5LDYzNzcwLDYzNzcxLDYzNzcyLDI2MjYyLDYzNzczLDI5MDE0LDYzNzc0LDYzNzc1LDM4NjI3LDYzNzc2LDI1NDIzLDI1NDY2LDIxMzM1LDYzNzc3LDI2NTExLDI2OTc2LDI4Mjc1LDYzNzc4LDMwMDA3LDYzNzc5LDYz''@;'; put 'put ''NzgwLDYzNzgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMDEz''@;'; put 'put ''LDYzNzgyLDYzNzgzLDM0OTMwLDIyMjE4LDIzMDY0LDYzNzg0LDYzNzg1LDYzNzg2LDYzNzg3LDYzNzg4LDIwMDM1LDYzNzg5LDIwODM5LDIyODU2LDI2NjA4LDMyNzg0LDYzNzkwLDIyODk5LDI0MTgwLDI1NzU0LDMxMTc4LDI0NTY1LDI0Njg0LDI1Mjg4LDI1NDY3LDIzNTI3LDIzNTExLDIx''@;'; put 'put ''MTYyLDYzNzkxLDIyOTAwLDI0MzYxLDI0NTk0LDYzNzkyLDYzNzkzLDYzNzk0LDI5Nzg1LDYzNzk1LDYzNzk2LDYzNzk3LDYzNzk4LDYzNzk5LDYzODAwLDM5Mzc3LDYzODAxLDYzODAyLDYzODAzLDYzODA0LDYzODA1LDYzODA2LDYzODA3LDYzODA4LDYzODA5LDYzODEwLDYzODExLDI4NjEx''@;'; put 'put ''LDYzODEyLDYzODEzLDMzMjE1LDM2Nzg2LDI0ODE3LDYzODE0LDYzODE1LDMzMTI2LDYzODE2LDYzODE3LDIzNjE1LDYzODE4LDYzODE5LDYzODIwLDYzODIxLDYzODIyLDYzODIzLDYzODI0LDYzODI1LDIzMjczLDM1MzY1LDI2NDkxLDMyMDE2LDYzODI2LDYzODI3LDYzODI4LDYzODI5LDYz''@;'; put 'put ''ODMwLDYzODMxLDMzMDIxLDYzODMyLDYzODMzLDIzNjEyLDI3ODc3LDIxMzExLDI4MzQ2LDIyODEwLDMzNTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMDI1LDIwMTUwLDIwMjk0LDIxOTM0LDIyMjk2LDIyNzI3LDI0NDA2LDI2MDM5LDI2MDg2LDI3MjY0LDI3NTczLDI4MjM3LDMwNzAxLDMxNDcxLDMxNzc0LDMyMjIyLDM0NTA3LDM0OTYyLDM3MTcwLDM3''@;'; put 'put ''NzIzLDI1Nzg3LDI4NjA2LDI5NTYyLDMwMTM2LDM2OTQ4LDIxODQ2LDIyMzQ5LDI1MDE4LDI1ODEyLDI2MzExLDI4MTI5LDI4MjUxLDI4NTI1LDI4NjAxLDMwMTkyLDMyODM1LDMzMjEzLDM0MTEzLDM1MjAzLDM1NTI3LDM1Njc0LDM3NjYzLDI3Nzk1LDMwMDM1LDMxNTcyLDM2MzY3LDM2OTU3''@;'; put 'put ''LDIxNzc2LDIyNTMwLDIyNjE2LDI0MTYyLDI1MDk1LDI1NzU4LDI2ODQ4LDMwMDcwLDMxOTU4LDM0NzM5LDQwNjgwLDIwMTk1LDIyNDA4LDIyMzgyLDIyODIzLDIzNTY1LDIzNzI5LDI0MTE4LDI0NDUzLDI1MTQwLDI1ODI1LDI5NjE5LDMzMjc0LDM0OTU1LDM2MDI0LDM4NTM4LDQwNjY3LDIz''@;'; put 'put ''NDI5LDI0NTAzLDI0NzU1LDIwNDk4LDIwOTkyLDIxMDQwLDIyMjk0LDIyNTgxLDIyNjE1LDIzNTY2LDIzNjQ4LDIzNzk4LDIzOTQ3LDI0MjMwLDI0NDY2LDI0NzY0LDI1MzYxLDI1NDgxLDI1NjIzLDI2NjkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODczLDI3MzMwLDI4MTIwLDI4MTkzLDI4MzcyLDI4NjQ0LDI5MTgyLDMwNDI4LDMwNTg1LDMxMTUzLDMx''@;'; put 'put ''MjkxLDMzNzk2LDM1MjQxLDM2MDc3LDM2MzM5LDM2NDI0LDM2ODY3LDM2ODg0LDM2OTQ3LDM3MTE3LDM3NzA5LDM4NTE4LDM4ODc2LDI3NjAyLDI4Njc4LDI5MjcyLDI5MzQ2LDI5NTQ0LDMwNTYzLDMxMTY3LDMxNzE2LDMyNDExLDM1NzEyLDIyNjk3LDI0Nzc1LDI1OTU4LDI2MTA5LDI2MzAy''@;'; put 'put ''LDI3Nzg4LDI4OTU4LDI5MTI5LDM1OTMwLDM4OTMxLDIwMDc3LDMxMzYxLDIwMTg5LDIwOTA4LDIwOTQxLDIxMjA1LDIxNTE2LDI0OTk5LDI2NDgxLDI2NzA0LDI2ODQ3LDI3OTM0LDI4NTQwLDMwMTQwLDMwNjQzLDMxNDYxLDMzMDEyLDMzODkxLDM3NTA5LDIwODI4LDI2MDA3LDI2NDYwLDI2''@;'; put 'put ''NTE1LDMwMTY4LDMxNDMxLDMzNjUxLDYzODM0LDM1OTEwLDM2ODg3LDM4OTU3LDIzNjYzLDMzMjE2LDMzNDM0LDM2OTI5LDM2OTc1LDM3Mzg5LDI0NDcxLDIzOTY1LDI3MjI1LDI5MTI4LDMwMzMxLDMxNTYxLDM0Mjc2LDM1NTg4LDM3MTU5LDM5NDcyLDIxODk1LDI1MDc4LDYzODM1LDMwMzEz''@;'; put 'put ''LDMyNjQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MzY3LDM0''@;'; put 'put ''NzQ2LDM1MDY0LDM3MDA3LDYzODM2LDI3OTMxLDI4ODg5LDI5NjYyLDMyMDk3LDMzODUzLDYzODM3LDM3MjI2LDM5NDA5LDYzODM4LDIwMDk4LDIxMzY1LDI3Mzk2LDI3NDEwLDI4NzM0LDI5MjExLDM0MzQ5LDQwNDc4LDIxMDY4LDM2NzcxLDIzODg4LDI1ODI5LDI1OTAwLDI3NDE0LDI4NjUx''@;'; put 'put ''LDMxODExLDMyNDEyLDM0MjUzLDM1MTcyLDM1MjYxLDI1Mjg5LDMzMjQwLDM0ODQ3LDI0MjY2LDI2MzkxLDI4MDEwLDI5NDM2LDI5NzAxLDI5ODA3LDM0NjkwLDM3MDg2LDIwMzU4LDIzODIxLDI0NDgwLDMzODAyLDIwOTE5LDI1NTA0LDMwMDUzLDIwMTQyLDIwNDg2LDIwODQxLDIwOTM3LDI2''@;'; put 'put ''NzUzLDI3MTUzLDMxOTE4LDMxOTIxLDMxOTc1LDMzMzkxLDM1NTM4LDM2NjM1LDM3MzI3LDIwNDA2LDIwNzkxLDIxMjM3LDIxNTcwLDI0MzAwLDI0OTQyLDI1MTUwLDI2MDUzLDI3MzU0LDI4NjcwLDMxMDE4LDM0MjY4LDM0ODUxLDM4MzE3LDM5NTIyLDM5NTMwLDQwNTk5LDQwNjU0LDIxMTQ3''@;'; put 'put ''LDI2MzEwLDI3NTExLDI4NzAxLDMxMDE5LDM2NzA2LDM4NzIyLDI0OTc2LDI1MDg4LDI1ODkxLDI4NDUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDAxLDI5ODMzLDMyMjQ0LDMyODc5LDM0MDMwLDM2NjQ2LDM2ODk5LDM3NzA2LDIwOTI1LDIxMDE1LDIxMTU1LDI3OTE2LDI4ODcyLDM1MDEwLDI0MjY1LDI1OTg2LDI3NTY2LDI4NjEwLDMxODA2LDI5NTU3''@;'; put 'put ''LDIwMTk2LDIwMjc4LDIyMjY1LDYzODM5LDIzNzM4LDIzOTk0LDI0NjA0LDI5NjE4LDMxNTMzLDMyNjY2LDMyNzE4LDMyODM4LDM2ODk0LDM3NDI4LDM4NjQ2LDM4NzI4LDM4OTM2LDQwODAxLDIwMzYzLDI4NTgzLDMxMTUwLDM3MzAwLDM4NTgzLDIxMjE0LDYzODQwLDI1NzM2LDI1Nzk2LDI3''@;'; put 'put ''MzQ3LDI4NTEwLDI4Njk2LDI5MjAwLDMwNDM5LDMyNzY5LDM0MzEwLDM0Mzk2LDM2MzM1LDM2NjEzLDM4NzA2LDM5NzkxLDQwNDQyLDQwNTY1LDMwODYwLDMxMTAzLDMyMTYwLDMzNzM3LDM3NjM2LDQwNTc1LDQwNTk1LDM1NTQyLDIyNzUxLDI0MzI0LDI2NDA3LDI4NzExLDI5OTAzLDMxODQw''@;'; put 'put ''LDMyODk0LDIwNzY5LDI4NzEyLDI5MjgyLDMwOTIyLDM2MDM0LDM2MDU4LDM2MDg0LDM4NjQ3LDIwMTAyLDIwNjk4LDIzNTM0LDI0Mjc4LDI2MDA5LDI5MTM0LDMwMjc0LDMwNjM3LDMyODQyLDM0MDQ0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2OTg4LDM5NzE5LDQwODQ1LDIyNzQ0LDIzMTA1LDIzNjUwLDI3MTU1LDI4MTIyLDI4NDMxLDMwMjY3LDMyMDQ3''@;'; put 'put ''LDMyMzExLDM0MDc4LDM1MTI4LDM3ODYwLDM4NDc1LDIxMTI5LDI2MDY2LDI2NjExLDI3MDYwLDI3OTY5LDI4MzE2LDI4Njg3LDI5NzA1LDI5NzkyLDMwMDQxLDMwMjQ0LDMwODI3LDM1NjI4LDM5MDA2LDIwODQ1LDI1MTM0LDM4NTIwLDIwMzc0LDIwNTIzLDIzODMzLDI4MTM4LDMyMTg0LDM2''@;'; put 'put ''NjUwLDI0NDU5LDI0OTAwLDI2NjQ3LDYzODQxLDM4NTM0LDIxMjAyLDMyOTA3LDIwOTU2LDIwOTQwLDI2OTc0LDMxMjYwLDMyMTkwLDMzNzc3LDM4NTE3LDIwNDQyLDIxMDMzLDIxNDAwLDIxNTE5LDIxNzc0LDIzNjUzLDI0NzQzLDI2NDQ2LDI2NzkyLDI4MDEyLDI5MzEzLDI5NDMyLDI5NzAy''@;'; put 'put ''LDI5ODI3LDYzODQyLDMwMTc4LDMxODUyLDMyNjMzLDMyNjk2LDMzNjczLDM1MDIzLDM1MDQxLDM3MzI0LDM3MzI4LDM4NjI2LDM5ODgxLDIxNTMzLDI4NTQyLDI5MTM2LDI5ODQ4LDM0Mjk4LDM2NTIyLDM4NTYzLDQwMDIzLDQwNjA3LDI2NTE5LDI4MTA3LDI5NzQ3LDMzMjU2LDM4Njc4LDMw''@;'; put 'put ''NzY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxNDM1LDMxNTIw''@;'; put 'put ''LDMxODkwLDI1NzA1LDI5ODAyLDMwMTk0LDMwOTA4LDMwOTUyLDM5MzQwLDM5NzY0LDQwNjM1LDIzNTE4LDI0MTQ5LDI4NDQ4LDMzMTgwLDMzNzA3LDM3ZTMsMTk5NzUsMjEzMjUsMjMwODEsMjQwMTgsMjQzOTgsMjQ5MzAsMjU0MDUsMjYyMTcsMjYzNjQsMjg0MTUsMjg0NTksMjg3NzEsMzA2''@;'; put 'put ''MjIsMzM4MzYsMzQwNjcsMzQ4NzUsMzY2MjcsMzkyMzcsMzk5OTUsMjE3ODgsMjUyNzMsMjY0MTEsMjc4MTksMzM1NDUsMzUxNzgsMzg3NzgsMjAxMjksMjI5MTYsMjQ1MzYsMjQ1MzcsMjYzOTUsMzIxNzgsMzI1OTYsMzM0MjYsMzM1NzksMzM3MjUsMzY2MzgsMzcwMTcsMjI0NzUsMjI5Njks''@;'; put 'put ''MjMxODYsMjM1MDQsMjYxNTEsMjY1MjIsMjY3NTcsMjc1OTksMjkwMjgsMzI2MjksMzYwMjMsMzYwNjcsMzY5OTMsMzk3NDksMzMwMzIsMzU5NzgsMzg0NzYsMzk0ODgsNDA2MTMsMjMzOTEsMjc2NjcsMjk0NjcsMzA0NTAsMzA0MzEsMzM4MDQsMjA5MDYsMzUyMTksMjA4MTMsMjA4ODUsMjEx''@;'; put 'put ''OTMsMjY4MjUsMjc3OTYsMzA0NjgsMzA0OTYsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MjksMjgzNTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQwNjUsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMjYyNjksMjY5MTksMjgzMTksMzAzOTksMzA2MDksMzM1NTksMzM5ODYsMzQ3MTksMzcyMjUsMzc1MjgsNDAxODAsMzQ5NDYsMjAzOTgsMjA4ODIsMjEyMTUsMjI5''@;'; put 'put ''ODIsMjQxMjUsMjQ5MTcsMjU3MjAsMjU3MjEsMjYyODYsMjY1NzYsMjcxNjksMjc1OTcsMjc2MTEsMjkyNzksMjkyODEsMjk3NjEsMzA1MjAsMzA2ODMsMzI3OTEsMzM0NjgsMzM1NDEsMzU1ODQsMzU2MjQsMzU5ODAsMjY0MDgsMjc3OTIsMjkyODcsMzA0NDYsMzA1NjYsMzEzMDIsNDAzNjEs''@;'; put 'put ''Mjc1MTksMjc3OTQsMjI4MTgsMjY0MDYsMzM5NDUsMjEzNTksMjI2NzUsMjI5MzcsMjQyODcsMjU1NTEsMjYxNjQsMjY0ODMsMjgyMTgsMjk0ODMsMzE0NDcsMzM0OTUsMzc2NzIsMjEyMDksMjQwNDMsMjUwMDYsMjUwMzUsMjUwOTgsMjUyODcsMjU3NzEsMjYwODAsMjY5NjksMjc0OTQsMjc1''@;'; put 'put ''OTUsMjg5NjEsMjk2ODcsMzAwNDUsMzIzMjYsMzMzMTAsMzM1MzgsMzQxNTQsMzU0OTEsMzYwMzEsMzg2OTUsNDAyODksMjI2OTYsNDA2NjQsMjA0OTcsMjEwMDYsMjE1NjMsMjE4MzksMjU5OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjc3NjYsMzIwMTAsMzIwMTEsMzI4NjIsMzQ0NDIsMzgyNzIsMzg2MzksMjEyNDcsMjc3OTcsMjkyODksMjE2MTksMjMx''@;'; put 'put ''OTQsMjM2MTQsMjM4ODMsMjQzOTYsMjQ0OTQsMjY0MTAsMjY4MDYsMjY5NzksMjgyMjAsMjgyMjgsMzA0NzMsMzE4NTksMzI2NTQsMzQxODMsMzU1OTgsMzY4NTUsMzg3NTMsNDA2OTIsMjM3MzUsMjQ3NTgsMjQ4NDUsMjUwMDMsMjU5MzUsMjYxMDcsMjYxMDgsMjc2NjUsMjc4ODcsMjk1OTks''@;'; put 'put ''Mjk2NDEsMzIyMjUsMzgyOTIsMjM0OTQsMzQ1ODgsMzU2MDAsMjEwODUsMjEzMzgsMjUyOTMsMjU2MTUsMjU3NzgsMjY0MjAsMjcxOTIsMjc4NTAsMjk2MzIsMjk4NTQsMzE2MzYsMzE4OTMsMzIyODMsMzMxNjIsMzMzMzQsMzQxODAsMzY4NDMsMzg2NDksMzkzNjEsMjAyNzYsMjEzMjIsMjE0''@;'; put 'put ''NTMsMjE0NjcsMjUyOTIsMjU2NDQsMjU4NTYsMjYwMDEsMjcwNzUsMjc4ODYsMjg1MDQsMjk2NzcsMzAwMzYsMzAyNDIsMzA0MzYsMzA0NjAsMzA5MjgsMzA5NzEsMzEwMjAsMzIwNzAsMzMzMjQsMzQ3ODQsMzY4MjAsMzg5MzAsMzkxNTEsMjExODcsMjUzMDAsMjU3NjUsMjgxOTYsMjg0OTcs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzAzMzIsMzYyOTksMzcy''@;'; put 'put ''OTcsMzc0NzQsMzk2NjIsMzk3NDcsMjA1MTUsMjA2MjEsMjIzNDYsMjI5NTIsMjM1OTIsMjQxMzUsMjQ0MzksMjUxNTEsMjU5MTgsMjYwNDEsMjYwNDksMjYxMjEsMjY1MDcsMjcwMzYsMjgzNTQsMzA5MTcsMzIwMzMsMzI5MzgsMzMxNTIsMzMzMjMsMzM0NTksMzM5NTMsMzQ0NDQsMzUzNzAs''@;'; put 'put ''MzU2MDcsMzcwMzAsMzg0NTAsNDA4NDgsMjA0OTMsMjA0NjcsNjM4NDMsMjI1MjEsMjQ0NzIsMjUzMDgsMjU0OTAsMjY0NzksMjgyMjcsMjg5NTMsMzA0MDMsMzI5NzIsMzI5ODYsMzUwNjAsMzUwNjEsMzUwOTcsMzYwNjQsMzY2NDksMzcxOTcsMzg1MDYsMjAyNzEsMjAzMzYsMjQwOTEsMjY1''@;'; put 'put ''NzUsMjY2NTgsMzAzMzMsMzAzMzQsMzk3NDgsMjQxNjEsMjcxNDYsMjkwMzMsMjkxNDAsMzAwNTgsNjM4NDQsMzIzMjEsMzQxMTUsMzQyODEsMzkxMzIsMjAyNDAsMzE1NjcsMzI2MjQsMzgzMDksMjA5NjEsMjQwNzAsMjY4MDUsMjc3MTAsMjc3MjYsMjc4NjcsMjkzNTksMzE2ODQsMzM1Mzks''@;'; put 'put ''Mjc4NjEsMjk3NTQsMjA3MzEsMjExMjgsMjI3MjEsMjU4MTYsMjcyODcsMjk4NjMsMzAyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA4ODcsMzQzMjcsMzgzNzAsMzg3MTMsNjM4NDUsMjEzNDIsMjQzMjEsMzU3MjIsMzY3NzYsMzY3ODMsMzcwMDIsMjEwMjksMzA2MjksNDAwMDksNDA3MTIsMTk5OTMsMjA0ODIsMjA4NTMsMjM2NDMsMjQxODMsMjYxNDIs''@;'; put 'put ''MjYxNzAsMjY1NjQsMjY4MjEsMjg4NTEsMjk5NTMsMzAxNDksMzExNzcsMzE0NTMsMzY2NDcsMzkyMDAsMzk0MzIsMjA0NDUsMjI1NjEsMjI1NzcsMjM1NDIsMjYyMjIsMjc0OTMsMjc5MjEsMjgyODIsMjg1NDEsMjk2NjgsMjk5OTUsMzM3NjksMzUwMzYsMzUwOTEsMzU2NzYsMzY2MjgsMjAy''@;'; put 'put ''MzksMjA2OTMsMjEyNjQsMjEzNDAsMjM0NDMsMjQ0ODksMjYzODEsMzExMTksMzMxNDUsMzM1ODMsMzQwNjgsMzUwNzksMzUyMDYsMzY2NjUsMzY2NjcsMzkzMzMsMzk5NTQsMjY0MTIsMjAwODYsMjA0NzIsMjI4NTcsMjM1NTMsMjM3OTEsMjM3OTIsMjU0NDcsMjY4MzQsMjg5MjUsMjkwOTAs''@;'; put 'put ''Mjk3MzksMzIyOTksMzQwMjgsMzQ1NjIsMzY4OTgsMzc1ODYsNDAxNzksMTk5ODEsMjAxODQsMjA0NjMsMjA2MTMsMjEwNzgsMjExMDMsMjE1NDIsMjE2NDgsMjI0OTYsMjI4MjcsMjMxNDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMzODYsMjM0MTMsMjM1MDAsMjQyMjAsNjM4NDYsMjUyMDYsMjU5NzUsMjYwMjMsMjgwMTQsMjgzMjUsMjkyMzgsMzE1MjYs''@;'; put 'put ''MzE4MDcsMzI1NjYsMzMxMDQsMzMxMDUsMzMxNzgsMzMzNDQsMzM0MzMsMzM3MDUsMzUzMzEsMzZlMywzNjA3MCwzNjA5MSwzNjIxMiwzNjI4MiwzNzA5NiwzNzM0MCwzODQyOCwzODQ2OCwzOTM4NSw0MDE2NywyMTI3MSwyMDk5OCwyMTU0NSwyMjEzMiwyMjcwNywyMjg2OCwyMjg5NCwyNDU3''@;'; put 'put ''NSwyNDk5NiwyNTE5OCwyNjEyOCwyNzc3NCwyODk1NCwzMDQwNiwzMTg4MSwzMTk2NiwzMjAyNywzMzQ1MiwzNjAzMywzODY0MCw2Mzg0NywyMDMxNSwyNDM0MywyNDQ0NywyNTI4MiwyMzg0OSwyNjM3OSwyNjg0MiwzMDg0NCwzMjMyMyw0MDMwMCwxOTk4OSwyMDYzMywyMTI2OSwyMTI5MCwy''@;'; put 'put ''MTMyOSwyMjkxNSwyMzEzOCwyNDE5OSwyNDc1NCwyNDk3MCwyNTE2MSwyNTIwOSwyNmUzLDI2NTAzLDI3MDQ3LDI3NjA0LDI3NjA2LDI3NjA3LDI3NjA4LDI3ODMyLDYzODQ4LDI5NzQ5LDMwMjAyLDMwNzM4LDMwODY1LDMxMTg5LDMxMTkyLDMxODc1LDMyMjAzLDMyNzM3LDMyOTMzLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMzMDg2LDMzMjE4LDMzNzc4LDM0''@;'; put 'put ''NTg2LDM1MDQ4LDM1NTEzLDM1NjkyLDM2MDI3LDM3MTQ1LDM4NzUwLDM5MTMxLDQwNzYzLDIyMTg4LDIzMzM4LDI0NDI4LDI1OTk2LDI3MzE1LDI3NTY3LDI3OTk2LDI4NjU3LDI4NjkzLDI5Mjc3LDI5NjEzLDM2MDA3LDM2MDUxLDM4OTcxLDI0OTc3LDI3NzAzLDMyODU2LDM5NDI1LDIwMDQ1''@;'; put 'put ''LDIwMTA3LDIwMTIzLDIwMTgxLDIwMjgyLDIwMjg0LDIwMzUxLDIwNDQ3LDIwNzM1LDIxNDkwLDIxNDk2LDIxNzY2LDIxOTg3LDIyMjM1LDIyNzYzLDIyODgyLDIzMDU3LDIzNTMxLDIzNTQ2LDIzNTU2LDI0MDUxLDI0MTA3LDI0NDczLDI0NjA1LDI1NDQ4LDI2MDEyLDI2MDMxLDI2NjE0LDI2''@;'; put 'put ''NjE5LDI2Nzk3LDI3NTE1LDI3ODAxLDI3ODYzLDI4MTk1LDI4NjgxLDI5NTA5LDMwNzIyLDMxMDM4LDMxMDQwLDMxMDcyLDMxMTY5LDMxNzIxLDMyMDIzLDMyMTE0LDMyOTAyLDMzMjkzLDMzNjc4LDM0MDAxLDM0NTAzLDM1MDM5LDM1NDA4LDM1NDIyLDM1NjEzLDM2MDYwLDM2MTk4LDM2Nzgx''@;'; put 'put ''LDM3MDM0LDM5MTY0LDM5MzkxLDQwNjA1LDIxMDY2LDYzODQ5LDI2Mzg4LDYzODUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwNjMyLDIxMDM0LDIzNjY1LDI1OTU1LDI3NzMzLDI5NjQyLDI5OTg3LDMwMTA5LDMxNjM5LDMzOTQ4LDM3MjQwLDM4NzA0LDIwMDg3LDI1NzQ2LDI3NTc4LDI5MDIyLDM0MjE3LDE5OTc3LDYzODUxLDI2NDQxLDI2ODYyLDI4MTgz''@;'; put 'put ''LDMzNDM5LDM0MDcyLDM0OTIzLDI1NTkxLDI4NTQ1LDM3Mzk0LDM5MDg3LDE5OTc4LDIwNjYzLDIwNjg3LDIwNzY3LDIxODMwLDIxOTMwLDIyMDM5LDIzMzYwLDIzNTc3LDIzNzc2LDI0MTIwLDI0MjAyLDI0MjI0LDI0MjU4LDI0ODE5LDI2NzA1LDI3MjMzLDI4MjQ4LDI5MjQ1LDI5MjQ4LDI5''@;'; put 'put ''Mzc2LDMwNDU2LDMxMDc3LDMxNjY1LDMyNzI0LDM1MDU5LDM1MzE2LDM1NDQzLDM1OTM3LDM2MDYyLDM4Njg0LDIyNjIyLDI5ODg1LDM2MDkzLDIxOTU5LDYzODUyLDMxMzI5LDMyMDM0LDMzMzk0LDI5Mjk4LDI5OTgzLDI5OTg5LDYzODUzLDMxNTEzLDIyNjYxLDIyNzc5LDIzOTk2LDI0MjA3''@;'; put 'put ''LDI0MjQ2LDI0NDY0LDI0NjYxLDI1MjM0LDI1NDcxLDI1OTMzLDI2MjU3LDI2MzI5LDI2MzYwLDI2NjQ2LDI2ODY2LDI5MzEyLDI5NzkwLDMxNTk4LDMyMTEwLDMyMjE0LDMyNjI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyOTk3LDMzMjk4LDM0MjIzLDM1MTk5LDM1NDc1LDM2ODkzLDM3NjA0LDQwNjUzLDQwNzM2LDIyODA1LDIyODkzLDI0MTA5LDI0Nzk2''@;'; put 'put ''LDI2MTMyLDI2MjI3LDI2NTEyLDI3NzI4LDI4MTAxLDI4NTExLDMwNzA3LDMwODg5LDMzOTkwLDM3MzIzLDM3Njc1LDIwMTg1LDIwNjgyLDIwODA4LDIxODkyLDIzMzA3LDIzNDU5LDI1MTU5LDI1OTgyLDI2MDU5LDI4MjEwLDI5MDUzLDI5Njk3LDI5NzY0LDI5ODMxLDI5ODg3LDMwMzE2LDMx''@;'; put 'put ''MTQ2LDMyMjE4LDMyMzQxLDMyNjgwLDMzMTQ2LDMzMjAzLDMzMzM3LDM0MzMwLDM0Nzk2LDM1NDQ1LDM2MzIzLDM2OTg0LDM3NTIxLDM3OTI1LDM5MjQ1LDM5ODU0LDIxMzUyLDIzNjMzLDI2OTY0LDI3ODQ0LDI3OTQ1LDI4MjAzLDMzMjkyLDM0MjAzLDM1MTMxLDM1MzczLDM1NDk4LDM4NjM0''@;'; put 'put ''LDQwODA3LDIxMDg5LDI2Mjk3LDI3NTcwLDMyNDA2LDM0ODE0LDM2MTA5LDM4Mjc1LDM4NDkzLDI1ODg1LDI4MDQxLDI5MTY2LDYzODU0LDIyNDc4LDIyOTk1LDIzNDY4LDI0NjE1LDI0ODI2LDI1MTA0LDI2MTQzLDI2MjA3LDI5NDgxLDI5Njg5LDMwNDI3LDMwNDY1LDMxNTk2LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyODU0LDMyODgyLDMzMTI1LDM1NDg4''@;'; put 'put ''LDM3MjY2LDE5OTkwLDIxMjE4LDI3NTA2LDI3OTI3LDMxMjM3LDMxNTQ1LDMyMDQ4LDYzODU1LDM2MDE2LDIxNDg0LDIyMDYzLDIyNjA5LDIzNDc3LDIzNTY3LDIzNTY5LDI0MDM0LDI1MTUyLDI1NDc1LDI1NjIwLDI2MTU3LDI2ODAzLDI3ODM2LDI4MDQwLDI4MzM1LDI4NzAzLDI4ODM2LDI5''@;'; put 'put ''MTM4LDI5OTkwLDMwMDk1LDMwMDk0LDMwMjMzLDMxNTA1LDMxNzEyLDMxNzg3LDMyMDMyLDMyMDU3LDM0MDkyLDM0MTU3LDM0MzExLDM1MzgwLDM2ODc3LDM2OTYxLDM3MDQ1LDM3NTU5LDM4OTAyLDM5NDc5LDIwNDM5LDIzNjYwLDI2NDYzLDI4MDQ5LDMxOTAzLDMyMzk2LDM1NjA2LDM2MTE4''@;'; put 'put ''LDM2ODk1LDIzNDAzLDI0MDYxLDI1NjEzLDMzOTg0LDM2OTU2LDM5MTM3LDI5NTc1LDIzNDM1LDI0NzMwLDI2NDk0LDI4MTI2LDM1MzU5LDM1NDk0LDM2ODY1LDM4OTI0LDIxMDQ3LDYzODU2LDI4NzUzLDMwODYyLDM3NzgyLDM0OTI4LDM3MzM1LDIwNDYyLDIxNDYzLDIyMDEzLDIyMjM0LDIy''@;'; put 'put ''NDAyLDIyNzgxLDIzMjM0LDIzNDMyLDIzNzIzLDIzNzQ0LDI0MTAxLDI0ODMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI1MTAxLDI1MTYzLDI1NDgwLDI1NjI4LDI1OTEwLDI1OTc2LDI3MTkzLDI3NTMwLDI3NzAwLDI3OTI5LDI4NDY1LDI5MTU5LDI5NDE3LDI5NTYwLDI5NzAzLDI5ODc0LDMwMjQ2LDMwNTYxLDMxMTY4LDMxMzE5LDMxNDY2LDMxOTI5LDMy''@;'; put 'put ''MTQzLDMyMTcyLDMyMzUzLDMyNjcwLDMzMDY1LDMzNTg1LDMzOTM2LDM0MDEwLDM0MjgyLDM0OTY2LDM1NTA0LDM1NzI4LDM2NjY0LDM2OTMwLDM2OTk1LDM3MjI4LDM3NTI2LDM3NTYxLDM4NTM5LDM4NTY3LDM4NTY4LDM4NjE0LDM4NjU2LDM4OTIwLDM5MzE4LDM5NjM1LDM5NzA2LDIxNDYw''@;'; put 'put ''LDIyNjU0LDIyODA5LDIzNDA4LDIzNDg3LDI4MTEzLDI4NTA2LDI5MDg3LDI5NzI5LDI5ODgxLDMyOTAxLDMzNzg5LDI0MDMzLDI0NDU1LDI0NDkwLDI0NjQyLDI2MDkyLDI2NjQyLDI2OTkxLDI3MjE5LDI3NTI5LDI3OTU3LDI4MTQ3LDI5NjY3LDMwNDYyLDMwNjM2LDMxNTY1LDMyMDIwLDMz''@;'; put 'put ''MDU5LDMzMzA4LDMzNjAwLDM0MDM2LDM0MTQ3LDM1NDI2LDM1NTI0LDM3MjU1LDM3NjYyLDM4OTE4LDM5MzQ4LDI1MTAwLDM0ODk5LDM2ODQ4LDM3NDc3LDIzODE1LDIzODQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzOTEzLDI5NzkxLDMzMTgxLDM0NjY0LDI4NjI5LDI1MzQyLDMyNzIyLDM1MTI2LDM1MTg2LDE5OTk4LDIwMDU2LDIwNzExLDIxMjEzLDIx''@;'; put 'put ''MzE5LDI1MjE1LDI2MTE5LDMyMzYxLDM0ODIxLDM4NDk0LDIwMzY1LDIxMjczLDIyMDcwLDIyOTg3LDIzMjA0LDIzNjA4LDIzNjMwLDIzNjI5LDI0MDY2LDI0MzM3LDI0NjQzLDI2MDQ1LDI2MTU5LDI2MTc4LDI2NTU4LDI2NjEyLDI5NDY4LDMwNjkwLDMxMDM0LDMyNzA5LDMzOTQwLDMzOTk3''@;'; put 'put ''LDM1MjIyLDM1NDMwLDM1NDMzLDM1NTUzLDM1OTI1LDM1OTYyLDIyNTE2LDIzNTA4LDI0MzM1LDI0Njg3LDI1MzI1LDI2ODkzLDI3NTQyLDI4MjUyLDI5MDYwLDMxNjk4LDM0NjQ1LDM1NjcyLDM2NjA2LDM5MTM1LDM5MTY2LDIwMjgwLDIwMzUzLDIwNDQ5LDIxNjI3LDIzMDcyLDIzNDgwLDI0''@;'; put 'put ''ODkyLDI2MDMyLDI2MjE2LDI5MTgwLDMwMDAzLDMxMDcwLDMyMDUxLDMzMTAyLDMzMjUxLDMzNjg4LDM0MjE4LDM0MjU0LDM0NTYzLDM1MzM4LDM2NTIzLDM2NzYzLDYzODU3LDM2ODA1LDIyODMzLDIzNDYwLDIzNTI2LDI0NzEzLDIzNTI5LDIzNTYzLDI0NTE1LDI3Nzc3LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODU4LDI4MTQ1LDI4NjgzLDI5OTc4LDMz''@;'; put 'put ''NDU1LDM1NTc0LDIwMTYwLDIxMzEzLDYzODU5LDM4NjE3LDI3NjYzLDIwMTI2LDIwNDIwLDIwODE4LDIxODU0LDIzMDc3LDIzNzg0LDI1MTA1LDI5MjczLDMzNDY5LDMzNzA2LDM0NTU4LDM0OTA1LDM1MzU3LDM4NDYzLDM4NTk3LDM5MTg3LDQwMjAxLDQwMjg1LDIyNTM4LDIzNzMxLDIzOTk3''@;'; put 'put ''LDI0MTMyLDI0ODAxLDI0ODUzLDI1NTY5LDI3MTM4LDI4MTk3LDM3MTIyLDM3NzE2LDM4OTkwLDM5OTUyLDQwODIzLDIzNDMzLDIzNzM2LDI1MzUzLDI2MTkxLDI2Njk2LDMwNTI0LDM4NTkzLDM4Nzk3LDM4OTk2LDM5ODM5LDI2MDE3LDM1NTg1LDM2NTU1LDM4MzMyLDIxODEzLDIzNzIxLDI0''@;'; put 'put ''MDIyLDI0MjQ1LDI2MjYzLDMwMjg0LDMzNzgwLDM4MzQzLDIyNzM5LDI1Mjc2LDI5MzkwLDQwMjMyLDIwMjA4LDIyODMwLDI0NTkxLDI2MTcxLDI3NTIzLDMxMjA3LDQwMjMwLDIxMzk1LDIxNjk2LDIyNDY3LDIzODMwLDI0ODU5LDI2MzI2LDI4MDc5LDMwODYxLDMzNDA2LDM4NTUyLDM4NzI0''@;'; put 'put ''LDIxMzgwLDI1MjEyLDI1NDk0LDI4MDgyLDMyMjY2LDMzMDk5LDM4OTg5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3Mzg3LDMyNTg4LDQwMzY3LDQwNDc0LDIwMDYzLDIwNTM5LDIwOTE4LDIyODEyLDI0ODI1LDI1NTkwLDI2OTI4LDI5MjQyLDMyODIyLDYzODYwLDM3MzI2LDI0MzY5LDYzODYxLDYzODYyLDMyMDA0LDMzNTA5LDMzOTAzLDMzOTc5LDM0Mjc3''@;'; put 'put ''LDM2NDkzLDYzODYzLDIwMzM1LDYzODY0LDYzODY1LDIyNzU2LDIzMzYzLDI0NjY1LDI1NTYyLDI1ODgwLDI1OTY1LDI2MjY0LDYzODY2LDI2OTU0LDI3MTcxLDI3OTE1LDI4NjczLDI5MDM2LDMwMTYyLDMwMjIxLDMxMTU1LDMxMzQ0LDYzODY3LDMyNjUwLDYzODY4LDM1MTQwLDYzODY5LDM1''@;'; put 'put ''NzMxLDM3MzEyLDM4NTI1LDYzODcwLDM5MTc4LDIyMjc2LDI0NDgxLDI2MDQ0LDI4NDE3LDMwMjA4LDMxMTQyLDM1NDg2LDM5MzQxLDM5NzcwLDQwODEyLDIwNzQwLDI1MDE0LDI1MjMzLDI3Mjc3LDMzMjIyLDIwNTQ3LDIyNTc2LDI0NDIyLDI4OTM3LDM1MzI4LDM1NTc4LDIzNDIwLDM0MzI2''@;'; put 'put ''LDIwNDc0LDIwNzk2LDIyMTk2LDIyODUyLDI1NTEzLDI4MTUzLDIzOTc4LDI2OTg5LDIwODcwLDIwMTA0LDIwMzEzLDYzODcxLDYzODcyLDYzODczLDIyOTE0LDYzODc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzODc1LDI3NDg3LDI3NzQxLDYzODc2LDI5ODc3LDMwOTk4LDYzODc3LDMzMjg3LDMzMzQ5LDMzNTkzLDM2NjcxLDM2NzAxLDYzODc4LDM5MTky''@;'; put 'put ''LDYzODc5LDYzODgwLDYzODgxLDIwMTM0LDYzODgyLDIyNDk1LDI0NDQxLDI2MTMxLDYzODgzLDYzODg0LDMwMTIzLDMyMzc3LDM1Njk1LDYzODg1LDM2ODcwLDM5NTE1LDIyMTgxLDIyNTY3LDIzMDMyLDIzMDcxLDIzNDc2LDYzODg2LDI0MzEwLDYzODg3LDYzODg4LDI1NDI0LDI1NDAzLDYz''@;'; put 'put ''ODg5LDI2OTQxLDI3NzgzLDI3ODM5LDI4MDQ2LDI4MDUxLDI4MTQ5LDI4NDM2LDYzODkwLDI4ODk1LDI4OTgyLDI5MDE3LDYzODkxLDI5MTIzLDI5MTQxLDYzODkyLDMwNzk5LDMwODMxLDYzODkzLDMxNjA1LDMyMjI3LDYzODk0LDMyMzAzLDYzODk1LDM0ODkzLDM2NTc1LDYzODk2LDYzODk3''@;'; put 'put ''LDYzODk4LDM3NDY3LDYzODk5LDQwMTgyLDYzOTAwLDYzOTAxLDYzOTAyLDI0NzA5LDI4MDM3LDYzOTAzLDI5MTA1LDYzOTA0LDYzOTA1LDM4MzIxLDIxNDIxLDYzOTA2LDYzOTA3LDYzOTA4LDI2NTc5LDYzOTA5LDI4ODE0LDI4OTc2LDI5NzQ0LDMzMzk4LDMzNDkwLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTEwLDM4MzMxLDM5NjUzLDQwNTczLDI2MzA4''@;'; put 'put ''LDYzOTExLDI5MTIxLDMzODY1LDYzOTEyLDYzOTEzLDIyNjAzLDYzOTE0LDYzOTE1LDIzOTkyLDI0NDMzLDYzOTE2LDI2MTQ0LDI2MjU0LDI3MDAxLDI3MDU0LDI3NzA0LDI3ODkxLDI4MjE0LDI4NDgxLDI4NjM0LDI4Njk5LDI4NzE5LDI5MDA4LDI5MTUxLDI5NTUyLDYzOTE3LDI5Nzg3LDYz''@;'; put 'put ''OTE4LDI5OTA4LDMwNDA4LDMxMzEwLDMyNDAzLDYzOTE5LDYzOTIwLDMzNTIxLDM1NDI0LDM2ODE0LDYzOTIxLDM3NzA0LDYzOTIyLDM4NjgxLDYzOTIzLDYzOTI0LDIwMDM0LDIwNTIyLDYzOTI1LDIxZTMsMjE0NzMsMjYzNTUsMjc3NTcsMjg2MTgsMjk0NTAsMzA1OTEsMzEzMzAsMzM0NTQs''@;'; put 'put ''MzQyNjksMzQzMDYsNjM5MjYsMzUwMjgsMzU0MjcsMzU3MDksMzU5NDcsNjM5MjcsMzc1NTUsNjM5MjgsMzg2NzUsMzg5MjgsMjAxMTYsMjAyMzcsMjA0MjUsMjA2NTgsMjEzMjAsMjE1NjYsMjE1NTUsMjE5NzgsMjI2MjYsMjI3MTQsMjI4ODcsMjMwNjcsMjM1MjQsMjQ3MzUsNjM5MjksMjUw''@;'; put 'put ''MzQsMjU5NDIsMjYxMTEsMjYyMTIsMjY3OTEsMjc3MzgsMjg1OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg4NzksMjkxMDAsMjk1MjIsMzE2MTMsMzQ1NjgsMzU0OTIsMzk5ODYsNDA3MTEsMjM2MjcsMjc3NzksMjk1MDgsMjk1NzcsMzc0MzQsMjgzMzEsMjk3OTcsMzAyMzksMzEzMzcsMzIyNzcsMzQzMTQsMjA4MDAsMjI3MjUsMjU3OTMsMjk5MzQsMjk5''@;'; put 'put ''NzMsMzAzMjAsMzI3MDUsMzcwMTMsMzg2MDUsMzkyNTIsMjgxOTgsMjk5MjYsMzE0MDEsMzE0MDIsMzMyNTMsMzQ1MjEsMzQ2ODAsMzUzNTUsMjMxMTMsMjM0MzYsMjM0NTEsMjY3ODUsMjY4ODAsMjgwMDMsMjk2MDksMjk3MTUsMjk3NDAsMzA4NzEsMzIyMzMsMzI3NDcsMzMwNDgsMzMxMDks''@;'; put 'put ''MzM2OTQsMzU5MTYsMzg0NDYsMzg5MjksMjYzNTIsMjQ0NDgsMjYxMDYsMjY1MDUsMjc3NTQsMjk1NzksMjA1MjUsMjMwNDMsMjc0OTgsMzA3MDIsMjI4MDYsMjM5MTYsMjQwMTMsMjk0NzcsMzAwMzEsNjM5MzAsNjM5MzEsMjA3MDksMjA5ODUsMjI1NzUsMjI4MjksMjI5MzQsMjMwMDIsMjM1''@;'; put 'put ''MjUsNjM5MzIsNjM5MzMsMjM5NzAsMjUzMDMsMjU2MjIsMjU3NDcsMjU4NTQsNjM5MzQsMjYzMzIsNjM5MzUsMjcyMDgsNjM5MzYsMjkxODMsMjk3OTYsNjM5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzEzNjgsMzE0MDcsMzIzMjcsMzIzNTAsMzI3NjgsMzMxMzYsNjM5MzgsMzQ3OTksMzUyMDEsMzU2MTYsMzY5NTMsNjM5MzksMzY5OTIsMzkyNTAsMjQ5''@;'; put 'put ''NTgsMjc0NDIsMjgwMjAsMzIyODcsMzUxMDksMzY3ODUsMjA0MzMsMjA2NTMsMjA4ODcsMjExOTEsMjI0NzEsMjI2NjUsMjM0ODEsMjQyNDgsMjQ4OTgsMjcwMjksMjgwNDQsMjgyNjMsMjgzNDIsMjkwNzYsMjk3OTQsMjk5OTIsMjk5OTYsMzI4ODMsMzM1OTIsMzM5OTMsMzYzNjIsMzc3ODAs''@;'; put 'put ''Mzc4NTQsNjM5NDAsMjAxMTAsMjAzMDUsMjA1OTgsMjA3NzgsMjE0NDgsMjE0NTEsMjE0OTEsMjM0MzEsMjM1MDcsMjM1ODgsMjQ4NTgsMjQ5NjIsMjYxMDAsMjkyNzUsMjk1OTEsMjk3NjAsMzA0MDIsMzEwNTYsMzExMjEsMzExNjEsMzIwMDYsMzI3MDEsMzM0MTksMzQyNjEsMzQzOTgsMzY4''@;'; put 'put ''MDIsMzY5MzUsMzcxMDksMzczNTQsMzg1MzMsMzg2MzIsMzg2MzMsMjEyMDYsMjQ0MjMsMjYwOTMsMjYxNjEsMjY2NzEsMjkwMjAsMzEyODYsMzcwNTcsMzg5MjIsMjAxMTMsNjM5NDEsMjcyMTgsMjc1NTAsMjg1NjAsMjkwNjUsMzI3OTIsMzM0NjQsMzQxMzEsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5MzksMzg1NDksMzg2NDIsMzg5MDcsMzQwNzQsMzk3''@;'; put 'put ''MjksMjAxMTIsMjkwNjYsMzg1OTYsMjA4MDMsMjE0MDcsMjE3MjksMjIyOTEsMjIyOTAsMjI0MzUsMjMxOTUsMjMyMzYsMjM0OTEsMjQ2MTYsMjQ4OTUsMjU1ODgsMjc3ODEsMjc5NjEsMjgyNzQsMjgzMDQsMjkyMzIsMjk1MDMsMjk3ODMsMzM0ODksMzQ5NDUsMzY2NzcsMzY5NjAsNjM5NDIs''@;'; put 'put ''Mzg0OTgsMzllMyw0MDIxOSwyNjM3NiwzNjIzNCwzNzQ3MCwyMDMwMSwyMDU1MywyMDcwMiwyMTM2MSwyMjI4NSwyMjk5NiwyMzA0MSwyMzU2MSwyNDk0NCwyNjI1NiwyODIwNSwyOTIzNCwyOTc3MSwzMjIzOSwzMjk2MywzMzgwNiwzMzg5NCwzNDExMSwzNDY1NSwzNDkwNywzNTA5NiwzNTU4''@;'; put 'put ''NiwzNjk0OSwzODg1OSwzOTc1OSwyMDA4MywyMDM2OSwyMDc1NCwyMDg0Miw2Mzk0MywyMTgwNywyMTkyOSwyMzQxOCwyMzQ2MSwyNDE4OCwyNDE4OSwyNDI1NCwyNDczNiwyNDc5OSwyNDg0MCwyNDg0MSwyNTU0MCwyNTkxMiwyNjM3Nyw2Mzk0NCwyNjU4MCwyNjU4Niw2Mzk0NSwyNjk3Nywy''@;'; put 'put ''Njk3OCwyNzgzMywyNzk0Myw2Mzk0NiwyODIxNiw2Mzk0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCwyODY0MSwyOTQ5NCwyOTQ5NSw2Mzk0OCwyOTc4OCwzMDAwMSw2Mzk0OSwzMDI5MCw2Mzk1MCw2Mzk1MSwzMjE3MywzMzI3OCwzMzg0OCwzNTAyOSwzNTQ4MCwzNTU0NywzNTU2NSwzNjQwMCwzNjQxOCwzNjkzOCwzNjkyNiwzNjk4NiwzNzE5MywzNzMyMSwz''@;'; put 'put ''Nzc0Miw2Mzk1Miw2Mzk1MywyMjUzNyw2Mzk1NCwyNzYwMywzMjkwNSwzMjk0Niw2Mzk1NSw2Mzk1NiwyMDgwMSwyMjg5MSwyMzYwOSw2Mzk1Nyw2Mzk1OCwyODUxNiwyOTYwNywzMjk5NiwzNjEwMyw2Mzk1OSwzNzM5OSwzODI4Nyw2Mzk2MCw2Mzk2MSw2Mzk2Miw2Mzk2MywzMjg5NSwyNTEw''@;'; put 'put ''MiwyODcwMCwzMjEwNCwzNDcwMSw2Mzk2NCwyMjQzMiwyNDY4MSwyNDkwMywyNzU3NSwzNTUxOCwzNzUwNCwzODU3NywyMDA1NywyMTUzNSwyODEzOSwzNDA5MywzODUxMiwzODg5OSwzOTE1MCwyNTU1OCwyNzg3NSwzNzAwOSwyMDk1NywyNTAzMywzMzIxMCw0MDQ0MSwyMDM4MSwyMDUwNiwy''@;'; put 'put ''MDczNiwyMzQ1MiwyNDg0NywyNTA4NywyNTgzNiwyNjg4NSwyNzU4OSwzMDA5NywzMDY5MSwzMjY4MSwzMzM4MCwzNDE5MSwzNDgxMSwzNDkxNSwzNTUxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNTY5NiwzNzI5MSwyMDEwOCwyMDE5NywyMDIzNCw2Mzk2NSw2Mzk2NiwyMjgzOSwyMzAxNiw2Mzk2NywyNDA1MCwyNDM0NywyNDQxMSwyNDYwOSw2Mzk2OCw2''@;'; put 'put ''Mzk2OSw2Mzk3MCw2Mzk3MSwyOTI0NiwyOTY2OSw2Mzk3MiwzMDA2NCwzMDE1Nyw2Mzk3MywzMTIyNyw2Mzk3NCwzMjc4MCwzMjgxOSwzMjkwMCwzMzUwNSwzMzYxNyw2Mzk3NSw2Mzk3NiwzNjAyOSwzNjAxOSwzNjk5OSw2Mzk3Nyw2Mzk3OCwzOTE1NiwzOTE4MCw2Mzk3OSw2Mzk4MCwyODcy''@;'; put 'put ''NywzMDQxMCwzMjcxNCwzMjcxNiwzMjc2NCwzNTYxMCwyMDE1NCwyMDE2MSwyMDk5NSwyMTM2MCw2Mzk4MSwyMTY5MywyMjI0MCwyMzAzNSwyMzQ5MywyNDM0MSwyNDUyNSwyODI3MCw2Mzk4Miw2Mzk4MywzMjEwNiwzMzU4OSw2Mzk4NCwzNDQ1MSwzNTQ2OSw2Mzk4NSwzODc2NSwzODc3NSw2''@;'; put 'put ''Mzk4Niw2Mzk4NywxOTk2OCwyMDMxNCwyMDM1MCwyMjc3NywyNjA4NSwyODMyMiwzNjkyMCwzNzgwOCwzOTM1MywyMDIxOSwyMjc2NCwyMjkyMiwyMzAwMSwyNDY0MSw2Mzk4OCw2Mzk4OSwzMTI1Miw2Mzk5MCwzMzYxNSwzNjAzNSwyMDgzNywyMTMxNixudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzk5MSw2Mzk5Miw2Mzk5MywyMDE3MywyMTA5NywyMzM4MSwz''@;'; put 'put ''MzQ3MSwyMDE4MCwyMTA1MCwyMTY3MiwyMjk4NSwyMzAzOSwyMzM3NiwyMzM4MywyMzM4OCwyNDY3NSwyNDkwNCwyODM2MywyODgyNSwyOTAzOCwyOTU3NCwyOTk0MywzMDEzMywzMDkxMywzMjA0MywzMjc3MywzMzI1OCwzMzU3NiwzNDA3MSwzNDI0OSwzNTU2NiwzNjAzOSwzODYwNCwyMDMx''@;'; put 'put ''NiwyMTI0MiwyMjIwNCwyNjAyNywyNjE1MiwyODc5NiwyODg1NiwyOTIzNywzMjE4OSwzMzQyMSwzNzE5NiwzODU5Miw0MDMwNiwyMzQwOSwyNjg1NSwyNzU0NCwyODUzOCwzMDQzMCwyMzY5NywyNjI4MywyODUwNywzMTY2OCwzMTc4NiwzNDg3MCwzODYyMCwxOTk3NiwyMDE4MywyMTI4MCwy''@;'; put 'put ''MjU4MCwyMjcxNSwyMjc2NywyMjg5MiwyMzU1OSwyNDExNSwyNDE5NiwyNDM3MywyNTQ4NCwyNjI5MCwyNjQ1NCwyNzE2NywyNzI5OSwyNzQwNCwyODQ3OSwyOTI1NCw2Mzk5NCwyOTUyMCwyOTgzNSwzMTQ1NiwzMTkxMSwzMzE0NCwzMzI0NywzMzI1NSwzMzY3NCwzMzkwMCwzNDA4MywzNDE5''@;'; put 'put ''NiwzNDI1NSwzNTAzNywzNjExNSwzNzI5MiwzODI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCwzODU1NiwyMDg3NywyMTcwNSwyMjMxMiwyMzQ3MiwyNTE2NSwyNjQ0OCwyNjY4NSwyNjc3MSwyODIyMSwyODM3MSwyODc5NywzMjI4OSwzNTAwOSwzNjAwMSwzNjYxNyw0MDc3OSw0MDc4MiwyOTIyOSwzMTYzMSwzNTUzMywzNzY1OCwyMDI5NSwyMDMwMiwyMDc4''@;'; put 'put ''NiwyMTYzMiwyMjk5MiwyNDIxMywyNTI2OSwyNjQ4NSwyNjk5MCwyNzE1OSwyNzgyMiwyODE4NiwyOTQwMSwyOTQ4MiwzMDE0MSwzMTY3MiwzMjA1MywzMzUxMSwzMzc4NSwzMzg3OSwzNDI5NSwzNTQxOSwzNjAxNSwzNjQ4NywzNjg4OSwzNzA0OCwzODYwNiw0MDc5OSwyMTIxOSwyMTUxNCwy''@;'; put 'put ''MzI2NSwyMzQ5MCwyNTY4OCwyNTk3MywyODQwNCwyOTM4MCw2Mzk5NSwzMDM0MCwzMTMwOSwzMTUxNSwzMTgyMSwzMjMxOCwzMjczNSwzMzY1OSwzNTYyNywzNjA0MiwzNjE5NiwzNjMyMSwzNjQ0NywzNjg0MiwzNjg1NywzNjk2OSwzNzg0MSwyMDI5MSwyMDM0NiwyMDY1OSwyMDg0MCwyMDg1''@;'; put 'put ''NiwyMTA2OSwyMTA5OCwyMjYyNSwyMjY1MiwyMjg4MCwyMzU2MCwyMzYzNywyNDI4MywyNDczMSwyNTEzNiwyNjY0MywyNzU4MywyNzY1NiwyODU5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwNiwyOTcyOCwzZTQsMzAwMDgsMzAwMzMsMzAzMjIsMzE1NjQsMzE2MjcsMzE2NjEsMzE2ODYsMzIzOTksMzU0MzgsMzY2NzAsMzY2ODEsMzc0MzksMzc1MjMs''@;'; put 'put ''Mzc2NjYsMzc5MzEsMzg2NTEsMzkwMDIsMzkwMTksMzkxOTgsMjA5OTksMjUxMzAsMjUyNDAsMjc5OTMsMzAzMDgsMzE0MzQsMzE2ODAsMzIxMTgsMjEzNDQsMjM3NDIsMjQyMTUsMjg0NzIsMjg4NTcsMzE4OTYsMzg2NzMsMzk4MjIsNDA2NzAsMjU1MDksMjU3MjIsMzQ2NzgsMTk5NjksMjAx''@;'; put 'put ''MTcsMjAxNDEsMjA1NzIsMjA1OTcsMjE1NzYsMjI5NzksMjM0NTAsMjQxMjgsMjQyMzcsMjQzMTEsMjQ0NDksMjQ3NzMsMjU0MDIsMjU5MTksMjU5NzIsMjYwNjAsMjYyMzAsMjYyMzIsMjY2MjIsMjY5ODQsMjcyNzMsMjc0OTEsMjc3MTIsMjgwOTYsMjgxMzYsMjgxOTEsMjgyNTQsMjg3MDIs''@;'; put 'put ''Mjg4MzMsMjk1ODIsMjk2OTMsMzAwMTAsMzA1NTUsMzA4NTUsMzExMTgsMzEyNDMsMzEzNTcsMzE5MzQsMzIxNDIsMzMzNTEsMzUzMzAsMzU1NjIsMzU5OTgsMzcxNjUsMzcxOTQsMzczMzYsMzc0NzgsMzc1ODAsMzc2NjQsMzg2NjIsMzg3NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg3NDgsMzg5MTQsNDA3MTgsMjEwNDYsMjExMzcsMjE4ODQsMjI1NjQs''@;'; put 'put ''MjQwOTMsMjQzNTEsMjQ3MTYsMjU1NTIsMjY3OTksMjg2MzksMzEwODUsMzE1MzIsMzMyMjksMzQyMzQsMzUwNjksMzU1NzYsMzY0MjAsMzcyNjEsMzg1MDAsMzg1NTUsMzg3MTcsMzg5ODgsNDA3NzgsMjA0MzAsMjA4MDYsMjA5MzksMjExNjEsMjIwNjYsMjQzNDAsMjQ0MjcsMjU1MTQsMjU4''@;'; put 'put ''MDUsMjYwODksMjYxNzcsMjYzNjIsMjYzNjEsMjYzOTcsMjY3ODEsMjY4MzksMjcxMzMsMjg0MzcsMjg1MjYsMjkwMzEsMjkxNTcsMjkyMjYsMjk4NjYsMzA1MjIsMzEwNjIsMzEwNjYsMzExOTksMzEyNjQsMzEzODEsMzE4OTUsMzE5NjcsMzIwNjgsMzIzNjgsMzI5MDMsMzQyOTksMzQ0Njgs''@;'; put 'put ''MzU0MTIsMzU1MTksMzYyNDksMzY0ODEsMzY4OTYsMzY5NzMsMzczNDcsMzg0NTksMzg2MTMsNDAxNjUsMjYwNjMsMzE3NTEsMzYyNzUsMzc4MjcsMjMzODQsMjM1NjIsMjEzMzAsMjUzMDUsMjk0NjksMjA1MTksMjM0NDcsMjQ0NzgsMjQ3NTIsMjQ5MzksMjY4MzcsMjgxMjEsMjk3NDIsMzEy''@;'; put 'put ''NzgsMzIwNjYsMzIxNTYsMzIzMDUsMzMxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsMzYzOTQsMzY0MDUsMzc3NTgsMzc5MTIsMjAzMDQsMjIzNTIsMjQwMzgsMjQyMzEsMjUzODcsMzI2MTgsMjAwMjcsMjAzMDMsMjAzNjcsMjA1NzAsMjMwMDUsMzI5NjQsMjE2MTAsMjE2MDgsMjIwMTQsMjI4NjMsMjM0NDksMjQwMzAsMjQyODIsMjYyMDUsMjY0MTcsMjY2''@;'; put 'put ''MDksMjY2NjYsMjc4ODAsMjc5NTQsMjgyMzQsMjg1NTcsMjg4NTUsMjk2NjQsMzAwODcsMzE4MjAsMzIwMDIsMzIwNDQsMzIxNjIsMzMzMTEsMzQ1MjMsMzUzODcsMzU0NjEsMzYyMDgsMzY0OTAsMzY2NTksMzY5MTMsMzcxOTgsMzcyMDIsMzc5NTYsMzkzNzYsMzE0ODEsMzE5MDksMjA0MjYs''@;'; put 'put ''MjA3MzcsMjA5MzQsMjI0NzIsMjM1MzUsMjM4MDMsMjYyMDEsMjcxOTcsMjc5OTQsMjgzMTAsMjg2NTIsMjg5NDAsMzAwNjMsMzE0NTksMzQ4NTAsMzY4OTcsMzY5ODEsMzg2MDMsMzk0MjMsMzM1MzcsMjAwMTMsMjAyMTAsMzQ4ODYsMzczMjUsMjEzNzMsMjczNTUsMjY5ODcsMjc3MTMsMzM5''@;'; put 'put ''MTQsMjI2ODYsMjQ5NzQsMjYzNjYsMjUzMjcsMjg4OTMsMjk5NjksMzAxNTEsMzIzMzgsMzM5NzYsMzU2NTcsMzYxMDQsMjAwNDMsMjE0ODIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2NzUsMjIzMjAsMjIzMzYsMjQ1MzUsMjUzNDUsMjUzNTEsMjU3MTEsMjU5MDMsMjYwODgsMjYyMzQsMjY1MjUsMjY1NDcsMjc0OTAsMjc3NDQsMjc4MDIsMjg0NjAsMzA2''@;'; put 'put ''OTMsMzA3NTcsMzEwNDksMzEwNjMsMzIwMjUsMzI5MzAsMzMwMjYsMzMyNjcsMzM0MzcsMzM0NjMsMzQ1ODQsMzU0NjgsNjM5OTYsMzYxMDAsMzYyODYsMzY5NzgsMzA0NTIsMzEyNTcsMzEyODcsMzIzNDAsMzI4ODcsMjE3NjcsMjE5NzIsMjI2NDUsMjUzOTEsMjU2MzQsMjYxODUsMjYxODcs''@;'; put 'put ''MjY3MzMsMjcwMzUsMjc1MjQsMjc5NDEsMjgzMzcsMjk2NDUsMjk4MDAsMjk4NTcsMzAwNDMsMzAxMzcsMzA0MzMsMzA0OTQsMzA2MDMsMzEyMDYsMzIyNjUsMzIyODUsMzMyNzUsMzQwOTUsMzQ5NjcsMzUzODYsMzYwNDksMzY1ODcsMzY3ODQsMzY5MTQsMzc4MDUsMzg0OTksMzg1MTUsMzg2''@;'; put 'put ''NjMsMjAzNTYsMjE0ODksMjMwMTgsMjMyNDEsMjQwODksMjY3MDIsMjk4OTQsMzAxNDIsMzEyMDksMzEzNzgsMzMxODcsMzQ1NDEsMzYwNzQsMzYzMDAsMzY4NDUsMjYwMTUsMjYzODksNjM5OTcsMjI1MTksMjg1MDMsMzIyMjEsMzY2NTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc4NzgsMzg1OTgsMjQ1MDEsMjUwNzQsMjg1NDgsMTk5ODgsMjAzNzYsMjA1''@;'; put 'put ''MTEsMjE0NDksMjE5ODMsMjM5MTksMjQwNDYsMjc0MjUsMjc0OTIsMzA5MjMsMzE2NDIsNjM5OTgsMzY0MjUsMzY1NTQsMzY5NzQsMjU0MTcsMjU2NjIsMzA1MjgsMzEzNjQsMzc2NzksMzgwMTUsNDA4MTAsMjU3NzYsMjg1OTEsMjkxNTgsMjk4NjQsMjk5MTQsMzE0MjgsMzE3NjIsMzIzODYs''@;'; put 'put ''MzE5MjIsMzI0MDgsMzU3MzgsMzYxMDYsMzgwMTMsMzkxODQsMzkyNDQsMjEwNDksMjM1MTksMjU4MzAsMjY0MTMsMzIwNDYsMjA3MTcsMjE0NDMsMjI2NDksMjQ5MjAsMjQ5MjEsMjUwODIsMjYwMjgsMzE0NDksMzU3MzAsMzU3MzQsMjA0ODksMjA1MTMsMjExMDksMjE4MDksMjMxMDAsMjQy''@;'; put 'put ''ODgsMjQ0MzIsMjQ4ODQsMjU5NTAsMjYxMjQsMjYxNjYsMjYyNzQsMjcwODUsMjgzNTYsMjg0NjYsMjk0NjIsMzAyNDEsMzEzNzksMzMwODEsMzMzNjksMzM3NTAsMzM5ODAsMjA2NjEsMjI1MTIsMjM0ODgsMjM1MjgsMjQ0MjUsMjU1MDUsMzA3NTgsMzIxODEsMzM3NTYsMzQwODEsMzczMTks''@;'; put 'put ''MzczNjUsMjA4NzQsMjY2MTMsMzE1NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsMzYwMTIsMjA5MzIsMjI5NzEsMjQ3NjUsMzQzODksMjA1MDgsNjM5OTksMjEwNzYsMjM2MTAsMjQ5NTcsMjUxMTQsMjUyOTksMjU4NDIsMjYwMjEsMjgzNjQsMzAyNDAsMzMwMzQsMzY0NDgsMzg0OTUsMzg1ODcsMjAxOTEsMjEzMTUsMjE5MTIsMjI4MjUsMjQwMjksMjU3OTcs''@;'; put 'put ''Mjc4NDksMjgxNTQsMjk1ODgsMzEzNTksMzMzMDcsMzQyMTQsMzYwNjgsMzYzNjgsMzY5ODMsMzczNTEsMzgzNjksMzg0MzMsMzg4NTQsMjA5ODQsMjE3NDYsMjE4OTQsMjQ1MDUsMjU3NjQsMjg1NTIsMzIxODAsMzY2MzksMzY2ODUsMzc5NDEsMjA2ODEsMjM1NzQsMjc4MzgsMjgxNTUsMjk5''@;'; put 'put ''NzksMzA2NTEsMzE4MDUsMzE4NDQsMzU0NDksMzU1MjIsMjI1NTgsMjI5NzQsMjQwODYsMjU0NjMsMjkyNjYsMzAwOTAsMzA1NzEsMzU1NDgsMzYwMjgsMzY2MjYsMjQzMDcsMjYyMjgsMjgxNTIsMzI4OTMsMzM3MjksMzU1MzEsMzg3MzcsMzk4OTQsNjRlMywyMTA1OSwyNjM2NywyODA1Mywy''@;'; put 'put ''ODM5OSwzMjIyNCwzNTU1OCwzNjkxMCwzNjk1OCwzOTYzNiwyMTAyMSwyMTExOSwyMTczNiwyNDk4MCwyNTIyMCwyNTMwNywyNjc4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg5OCwyNjk3MCwyNzE4OSwyODgxOCwyODk2NiwzMDgxMywzMDk3NywzMDk5MCwzMTE4NiwzMTI0NSwzMjkxOCwzMzQwMCwzMzQ5MywzMzYwOSwzNDEyMSwzNTk3MCwzNjIyOSwz''@;'; put 'put ''NzIxOCwzNzI1OSwzNzI5NCwyMDQxOSwyMjIyNSwyOTE2NSwzMDY3OSwzNDU2MCwzNTMyMCwyMzU0NCwyNDUzNCwyNjQ0OSwzNzAzMiwyMTQ3NCwyMjYxOCwyMzU0MSwyNDc0MCwyNDk2MSwyNTY5NiwzMjMxNywzMjg4MCwzNDA4NSwzNzUwNywyNTc3NCwyMDY1MiwyMzgyOCwyNjM2OCwyMjY4''@;'; put 'put ''NCwyNTI3NywyNTUxMiwyNjg5NCwyN2UzLDI3MTY2LDI4MjY3LDMwMzk0LDMxMTc5LDMzNDY3LDMzODMzLDM1NTM1LDM2MjY0LDM2ODYxLDM3MTM4LDM3MTk1LDM3Mjc2LDM3NjQ4LDM3NjU2LDM3Nzg2LDM4NjE5LDM5NDc4LDM5OTQ5LDE5OTg1LDMwMDQ0LDMxMDY5LDMxNDgyLDMxNTY5LDMx''@;'; put 'put ''Njg5LDMyMzAyLDMzOTg4LDM2NDQxLDM2NDY4LDM2NjAwLDM2ODgwLDI2MTQ5LDI2OTQzLDI5NzYzLDIwOTg2LDI2NDE0LDQwNjY4LDIwODA1LDI0NTQ0LDI3Nzk4LDM0ODAyLDM0OTA5LDM0OTM1LDI0NzU2LDMzMjA1LDMzNzk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MTAxLDIxNDYyLDIxNTYxLDIyMDY4LDIzMDk0LDIzNjAxLDI4ODEwLDMyNzM2LDMy''@;'; put 'put ''ODU4LDMzMDMwLDMzMjYxLDM2MjU5LDM3MjU3LDM5NTE5LDQwNDM0LDIwNTk2LDIwMTY0LDIxNDA4LDI0ODI3LDI4MjA0LDIzNjUyLDIwMzYwLDIwNTE2LDIxOTg4LDIzNzY5LDI0MTU5LDI0Njc3LDI2NzcyLDI3ODM1LDI4MTAwLDI5MTE4LDMwMTY0LDMwMTk2LDMwMzA1LDMxMjU4LDMxMzA1''@;'; put 'put ''LDMyMTk5LDMyMjUxLDMyNjIyLDMzMjY4LDM0NDczLDM2NjM2LDM4NjAxLDM5MzQ3LDQwNzg2LDIxMDYzLDIxMTg5LDM5MTQ5LDM1MjQyLDE5OTcxLDI2NTc4LDI4NDIyLDIwNDA1LDIzNTIyLDI2NTE3LDI3Nzg0LDI4MDI0LDI5NzIzLDMwNzU5LDM3MzQxLDM3NzU2LDM0NzU2LDMxMjA0LDMx''@;'; put 'put ''MjgxLDI0NTU1LDIwMTgyLDIxNjY4LDIxODIyLDIyNzAyLDIyOTQ5LDI0ODE2LDI1MTcxLDI1MzAyLDI2NDIyLDI2OTY1LDMzMzMzLDM4NDY0LDM5MzQ1LDM5Mzg5LDIwNTI0LDIxMzMxLDIxODI4LDIyMzk2LDY0MDAxLDI1MTc2LDY0MDAyLDI1ODI2LDI2MjE5LDI2NTg5LDI4NjA5LDI4NjU1''@;'; put 'put ''LDI5NzMwLDI5NzUyLDM1MzUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDM3OTQ0LDIxNTg1LDIyMDIyLDIyMzc0LDI0MzkyLDI0OTg2LDI3NDcwLDI4NzYwLDI4ODQ1LDMyMTg3LDM1NDc3LDIyODkwLDMzMDY3LDI1NTA2LDMwNDcyLDMyODI5LDM2MDEwLDIyNjEyLDI1NjQ1LDI3MDY3LDIzNDQ1LDI0MDgxLDI4MjcxLDY0MDAzLDM0MTUzLDIwODEyLDIxNDg4''@;'; put 'put ''LDIyODI2LDI0NjA4LDI0OTA3LDI3NTI2LDI3NzYwLDI3ODg4LDMxNTE4LDMyOTc0LDMzNDkyLDM2Mjk0LDM3MDQwLDM5MDg5LDY0MDA0LDI1Nzk5LDI4NTgwLDI1NzQ1LDI1ODYwLDIwODE0LDIxNTIwLDIyMzAzLDM1MzQyLDI0OTI3LDI2NzQyLDY0MDA1LDMwMTcxLDMxNTcwLDMyMTEzLDM2''@;'; put 'put ''ODkwLDIyNTM0LDI3MDg0LDMzMTUxLDM1MTE0LDM2ODY0LDM4OTY5LDIwNjAwLDIyODcxLDIyOTU2LDI1MjM3LDM2ODc5LDM5NzIyLDI0OTI1LDI5MzA1LDM4MzU4LDIyMzY5LDIzMTEwLDI0MDUyLDI1MjI2LDI1NzczLDI1ODUwLDI2NDg3LDI3ODc0LDI3OTY2LDI5MjI4LDI5NzUwLDMwNzcy''@;'; put 'put ''LDMyNjMxLDMzNDUzLDM2MzE1LDM4OTM1LDIxMDI4LDIyMzM4LDI2NDk1LDI5MjU2LDI5OTIzLDM2MDA5LDM2Nzc0LDM3MzkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NDQyLDIwODQzLDIxNDg1LDI1NDIwLDIwMzI5LDIxNzY0LDI0NzI2LDI1OTQzLDI3ODAzLDI4MDMxLDI5MjYwLDI5NDM3LDMxMjU1LDM1MjA3LDM1OTk3LDI0NDI5LDI4NTU4LDI4OTIx''@;'; put 'put ''LDMzMTkyLDI0ODQ2LDIwNDE1LDIwNTU5LDI1MTUzLDI5MjU1LDMxNjg3LDMyMjMyLDMyNzQ1LDM2OTQxLDM4ODI5LDM5NDQ5LDM2MDIyLDIyMzc4LDI0MTc5LDI2NTQ0LDMzODA1LDM1NDEzLDIxNTM2LDIzMzE4LDI0MTYzLDI0MjkwLDI0MzMwLDI1OTg3LDMyOTU0LDM0MTA5LDM4MjgxLDM4''@;'; put 'put ''NDkxLDIwMjk2LDIxMjUzLDIxMjYxLDIxMjYzLDIxNjM4LDIxNzU0LDIyMjc1LDI0MDY3LDI0NTk4LDI1MjQzLDI1MjY1LDI1NDI5LDY0MDA2LDI3ODczLDI4MDA2LDMwMTI5LDMwNzcwLDMyOTkwLDMzMDcxLDMzNTAyLDMzODg5LDMzOTcwLDM0OTU3LDM1MDkwLDM2ODc1LDM3NjEwLDM5MTY1''@;'; put 'put ''LDM5ODI1LDI0MTMzLDI2MjkyLDI2MzMzLDI4Njg5LDI5MTkwLDY0MDA3LDIwNDY5LDIxMTE3LDI0NDI2LDI0OTE1LDI2NDUxLDI3MTYxLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1OTYxLDM5MTExLDM5MTA4LDM5NDkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjk3LDMxMjYzLDI2OTYzLDM1NTc1LDM1OTE0LDM5MDgwLDM5MzQyLDI0NDQ0LDI1MjU5''@;'; put 'put ''LDMwMTMwLDMwMzgyLDM0OTg3LDM2OTkxLDM4NDY2LDIxMzA1LDI0MzgwLDI0NTE3LDI3ODUyLDI5NjQ0LDMwMDUwLDMwMDkxLDMxNTU4LDMzNTM0LDM5MzI1LDIwMDQ3LDM2OTI0LDE5OTc5LDIwMzA5LDIxNDE0LDIyNzk5LDI0MjY0LDI2MTYwLDI3ODI3LDI5NzgxLDMzNjU1LDM0NjYyLDM2''@;'; put 'put ''MDMyLDM2OTQ0LDM4Njg2LDM5OTU3LDIyNzM3LDIzNDE2LDM0Mzg0LDM1NjA0LDQwMzcyLDIzNTA2LDI0NjgwLDI0NzE3LDI2MDk3LDI3NzM1LDI4NDUwLDI4NTc5LDI4Njk4LDMyNTk3LDMyNzUyLDM4Mjg5LDM4MjkwLDM4NDgwLDM4ODY3LDIxMTA2LDM2Njc2LDIwOTg5LDIxNTQ3LDIxNjg4''@;'; put 'put ''LDIxODU5LDIxODk4LDI3MzIzLDI4MDg1LDMyMjE2LDMzMzgyLDM3NTMyLDM4NTE5LDQwNTY5LDIxNTEyLDIxNzA0LDMwNDE4LDM0NTMyLDM4MzA4LDM4MzU2LDM4NDkyLDIwMTMwLDIwMjMzLDIzMDIyLDIzMjcwLDI0MDU1LDI0NjU4LDI1MjM5LDI2NDc3LDI2Njg5LDI3NzgyLDI4MjA3LDMy''@;'; put 'put ''NTY4LDMyOTIzLDMzMzIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDY0MDA4LDY0MDA5LDM4OTE3LDIwMTMzLDIwNTY1LDIxNjgzLDIyNDE5LDIyODc0LDIzNDAxLDIzNDc1LDI1MDMyLDI2OTk5LDI4MDIzLDI4NzA3LDM0ODA5LDM1Mjk5LDM1NDQyLDM1NTU5LDM2OTk0LDM5NDA1LDM5NjA4LDIxMTgyLDI2NjgwLDIwNTAyLDI0MTg0LDI2NDQ3LDMzNjA3LDM0''@;'; put 'put ''ODkyLDIwMTM5LDIxNTIxLDIyMTkwLDI5NjcwLDM3MTQxLDM4OTExLDM5MTc3LDM5MjU1LDM5MzIxLDIyMDk5LDIyNjg3LDM0Mzk1LDM1Mzc3LDI1MDEwLDI3MzgyLDI5NTYzLDM2NTYyLDI3NDYzLDM4NTcwLDM5NTExLDIyODY5LDI5MTg0LDM2MjAzLDM4NzYxLDIwNDM2LDIzNzk2LDI0MzU4''@;'; put 'put ''LDI1MDgwLDI2MjAzLDI3ODgzLDI4ODQzLDI5NTcyLDI5NjI1LDI5Njk0LDMwNTA1LDMwNTQxLDMyMDY3LDMyMDk4LDMyMjkxLDMzMzM1LDM0ODk4LDY0MDEwLDM2MDY2LDM3NDQ5LDM5MDIzLDIzMzc3LDMxMzQ4LDM0ODgwLDM4OTEzLDIzMjQ0LDIwNDQ4LDIxMzMyLDIyODQ2LDIzODA1LDI1''@;'; put 'put ''NDA2LDI4MDI1LDI5NDMzLDMzMDI5LDMzMDMxLDMzNjk4LDM3NTgzLDM4OTYwLDIwMTM2LDIwODA0LDIxMDA5LDIyNDExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0NDE4LDI3ODQyLDI4MzY2LDI4Njc3LDI4NzUyLDI4ODQ3LDI5MDc0LDI5NjczLDI5ODAxLDMzNjEwLDM0NzIyLDM0OTEzLDM2ODcyLDM3MDI2LDM3Nzk1LDM5MzM2LDIwODQ2LDI0NDA3LDI0''@;'; put 'put ''ODAwLDI0OTM1LDI2MjkxLDM0MTM3LDM2NDI2LDM3Mjk1LDM4Nzk1LDIwMDQ2LDIwMTE0LDIxNjI4LDIyNzQxLDIyNzc4LDIyOTA5LDIzNzMzLDI0MzU5LDI1MTQyLDI1MTYwLDI2MTIyLDI2MjE1LDI3NjI3LDI4MDA5LDI4MTExLDI4MjQ2LDI4NDA4LDI4NTY0LDI4NjQwLDI4NjQ5LDI4NzY1''@;'; put 'put ''LDI5MzkyLDI5NzMzLDI5Nzg2LDI5OTIwLDMwMzU1LDMxMDY4LDMxOTQ2LDMyMjg2LDMyOTkzLDMzNDQ2LDMzODk5LDMzOTgzLDM0MzgyLDM0Mzk5LDM0Njc2LDM1NzAzLDM1OTQ2LDM3ODA0LDM4OTEyLDM5MDEzLDI0Nzg1LDI1MTEwLDM3MjM5LDIzMTMwLDI2MTI3LDI4MTUxLDI4MjIyLDI5''@;'; put 'put ''NzU5LDM5NzQ2LDI0NTczLDI0Nzk0LDMxNTAzLDIxNzAwLDI0MzQ0LDI3NzQyLDI3ODU5LDI3OTQ2LDI4ODg4LDMyMDA1LDM0NDI1LDM1MzQwLDQwMjUxLDIxMjcwLDIxNjQ0LDIzMzAxLDI3MTk0LDI4Nzc5LDMwMDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTE3LDMxMTY2LDMzNDU3LDMzNzc1LDM1NDQxLDM1NjQ5LDM2MDA4LDM4NzcyLDY0MDExLDI1''@;'; put 'put ''ODQ0LDI1ODk5LDMwOTA2LDMwOTA3LDMxMzM5LDIwMDI0LDIxOTE0LDIyODY0LDIzNDYyLDI0MTg3LDI0NzM5LDI1NTYzLDI3NDg5LDI2MjEzLDI2NzA3LDI4MTg1LDI5MDI5LDI5ODcyLDMyMDA4LDM2OTk2LDM5NTI5LDM5OTczLDI3OTYzLDI4MzY5LDI5NTAyLDM1OTA1LDM4MzQ2LDIwOTc2''@;'; put 'put ''LDI0MTQwLDI0NDg4LDI0NjUzLDI0ODIyLDI0ODgwLDI0OTA4LDI2MTc5LDI2MTgwLDI3MDQ1LDI3ODQxLDI4MjU1LDI4MzYxLDI4NTE0LDI5MDA0LDI5ODUyLDMwMzQzLDMxNjgxLDMxNzgzLDMzNjE4LDM0NjQ3LDM2OTQ1LDM4NTQxLDQwNjQzLDIxMjk1LDIyMjM4LDI0MzE1LDI0NDU4LDI0''@;'; put 'put ''Njc0LDI0NzI0LDI1MDc5LDI2MjE0LDI2MzcxLDI3MjkyLDI4MTQyLDI4NTkwLDI4Nzg0LDI5NTQ2LDMyMzYyLDMzMjE0LDMzNTg4LDM0NTE2LDM1NDk2LDM2MDM2LDIxMTIzLDI5NTU0LDIzNDQ2LDI3MjQzLDM3ODkyLDIxNzQyLDIyMTUwLDIzMzg5LDI1OTI4LDI1OTg5LDI2MzEzLDI2Nzgz''@;'; put 'put ''LDI4MDQ1LDI4MTAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5''@;'; put 'put ''MjQzLDMyOTQ4LDM3MjM3LDM5NTAxLDIwMzk5LDIwNTA1LDIxNDAyLDIxNTE4LDIxNTY0LDIxODk3LDIxOTU3LDI0MTI3LDI0NDYwLDI2NDI5LDI5MDMwLDI5NjYxLDM2ODY5LDIxMjExLDIxMjM1LDIyNjI4LDIyNzM0LDI4OTMyLDI5MDcxLDI5MTc5LDM0MjI0LDM1MzQ3LDI2MjQ4LDM0MjE2''@;'; put 'put ''LDIxOTI3LDI2MjQ0LDI5MDAyLDMzODQxLDIxMzIxLDIxOTEzLDI3NTg1LDI0NDA5LDI0NTA5LDI1NTgyLDI2MjQ5LDI4OTk5LDM1NTY5LDM2NjM3LDQwNjM4LDIwMjQxLDI1NjU4LDI4ODc1LDMwMDU0LDM0NDA3LDI0Njc2LDM1NjYyLDQwNDQwLDIwODA3LDIwOTgyLDIxMjU2LDI3OTU4LDMz''@;'; put 'put ''MDE2LDQwNjU3LDI2MTMzLDI3NDI3LDI4ODI0LDMwMTY1LDIxNTA3LDIzNjczLDMyMDA3LDM1MzUwLDI3NDI0LDI3NDUzLDI3NDYyLDIxNTYwLDI0Njg4LDI3OTY1LDMyNzI1LDMzMjg4LDIwNjk0LDIwOTU4LDIxOTE2LDIyMTIzLDIyMjIxLDIzMDIwLDIzMzA1LDI0MDc2LDI0OTg1LDI0OTg0''@;'; put 'put ''LDI1MTM3LDI2MjA2LDI2MzQyLDI5MDgxLDI5MTEzLDI5MTE0LDI5MzUxLDMxMTQzLDMxMjMyLDMyNjkwLDM1NDQwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGdiMTgwMzA6WzE5OTcwLDE5OTcyLDE5OTczLDE5OTc0LDE5OTgzLDE5OTg2LDE5OTkxLDE5OTk5LDJlNCwyMDAwMSwyMDAwMywyMDAwNiwyMDAwOSwyMDAxNCwyMDAxNSwyMDAxNywyMDAxOSwyMDAyMSwyMDAyMywyMDAyOCwyMDAzMiwyMDAz''@;'; put 'put ''MywyMDAzNCwyMDAzNiwyMDAzOCwyMDA0MiwyMDA0OSwyMDA1MywyMDA1NSwyMDA1OCwyMDA1OSwyMDA2NiwyMDA2NywyMDA2OCwyMDA2OSwyMDA3MSwyMDA3MiwyMDA3NCwyMDA3NSwyMDA3NiwyMDA3NywyMDA3OCwyMDA3OSwyMDA4MiwyMDA4NCwyMDA4NSwyMDA4NiwyMDA4NywyMDA4OCwy''@;'; put 'put ''MDA4OSwyMDA5MCwyMDA5MSwyMDA5MiwyMDA5MywyMDA5NSwyMDA5NiwyMDA5NywyMDA5OCwyMDA5OSwyMDEwMCwyMDEwMSwyMDEwMywyMDEwNiwyMDExMiwyMDExOCwyMDExOSwyMDEyMSwyMDEyNCwyMDEyNSwyMDEyNiwyMDEzMSwyMDEzOCwyMDE0MywyMDE0NCwyMDE0NSwyMDE0OCwyMDE1''@;'; put 'put ''MCwyMDE1MSwyMDE1MiwyMDE1MywyMDE1NiwyMDE1NywyMDE1OCwyMDE2OCwyMDE3MiwyMDE3NSwyMDE3NiwyMDE3OCwyMDE4NiwyMDE4NywyMDE4OCwyMDE5MiwyMDE5NCwyMDE5OCwyMDE5OSwyMDIwMSwyMDIwNSwyMDIwNiwyMDIwNywyMDIwOSwyMDIxMiwyMDIxNiwyMDIxNywyMDIxOCwy''@;'; put 'put ''MDIyMCwyMDIyMiwyMDIyNCwyMDIyNiwyMDIyNywyMDIyOCwyMDIyOSwyMDIzMCwyMDIzMSwyMDIzMiwyMDIzNSwyMDIzNiwyMDI0MiwyMDI0MywyMDI0NCwyMDI0NSwyMDI0NiwyMDI1MiwyMDI1MywyMDI1NywyMDI1OSwyMDI2NCwyMDI2NSwyMDI2OCwyMDI2OSwyMDI3MCwyMDI3MywyMDI3''@;'; put 'put ''NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4NywyMDI4OCwyMDI4OSwyMDI5MCwyMDI5MiwyMDI5MywyMDI5NSwyMDI5NiwyMDI5NywyMDI5OCwyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMyMSwyMDMyMiwyMDMyNiwyMDMyOCwyMDMzMCwyMDMzMSwyMDMzMywy''@;'; put 'put ''MDMzNCwyMDMzNywyMDMzOCwyMDM0MSwyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MiwyMDM1MywyMDM1NCwyMDM1NywyMDM1OCwyMDM1OSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MywyMDM3NCwyMDM3NiwyMDM3NywyMDM3OCwyMDM4MCwyMDM4''@;'; put 'put ''MiwyMDM4MywyMDM4NSwyMDM4NiwyMDM4OCwyMDM5NSwyMDM5NywyMDQwMCwyMDQwMSwyMDQwMiwyMDQwMywyMDQwNCwyMDQwNiwyMDQwNywyMDQwOCwyMDQwOSwyMDQxMCwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQxOCwyMDQyMiwyMDQyMywyMDQyNCwyMDQyNSwy''@;'; put 'put ''MDQyNywyMDQyOCwyMDQyOSwyMDQzNCwyMDQzNSwyMDQzNiwyMDQzNywyMDQzOCwyMDQ0MSwyMDQ0MywyMDQ0OCwyMDQ1MCwyMDQ1MiwyMDQ1MywyMDQ1NSwyMDQ1OSwyMDQ2MCwyMDQ2NCwyMDQ2NiwyMDQ2OCwyMDQ2OSwyMDQ3MCwyMDQ3MSwyMDQ3MywyMDQ3NSwyMDQ3NiwyMDQ3NywyMDQ3''@;'; put 'put ''OSwyMDQ4MCwyMDQ4MSwyMDQ4MiwyMDQ4MywyMDQ4NCwyMDQ4NSwyMDQ4NiwyMDQ4NywyMDQ4OCwyMDQ4OSwyMDQ5MCwyMDQ5MSwyMDQ5NCwyMDQ5NiwyMDQ5NywyMDQ5OSwyMDUwMSwyMDUwMiwyMDUwMywyMDUwNywyMDUwOSwyMDUxMCwyMDUxMiwyMDUxNCwyMDUxNSwyMDUxNiwyMDUxOSwy''@;'; put 'put ''MDUyMywyMDUyNywyMDUyOCwyMDUyOSwyMDUzMCwyMDUzMSwyMDUzMiwyMDUzMywyMDUzNCwyMDUzNSwyMDUzNiwyMDUzNywyMDUzOSwyMDU0MSwyMDU0MywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OCwyMDU0OSwyMDU1MCwyMDU1MywyMDU1NCwyMDU1NSwyMDU1NywyMDU2MCwyMDU2MSwyMDU2''@;'; put 'put ''MiwyMDU2MywyMDU2NCwyMDU2NiwyMDU2NywyMDU2OCwyMDU2OSwyMDU3MSwyMDU3MywyMDU3NCwyMDU3NSwyMDU3NiwyMDU3NywyMDU3OCwyMDU3OSwyMDU4MCwyMDU4MiwyMDU4MywyMDU4NCwyMDU4NSwyMDU4NiwyMDU4NywyMDU4OSwyMDU5MCwyMDU5MSwyMDU5MiwyMDU5MywyMDU5NCwy''@;'; put 'put ''MDU5NSwyMDU5NiwyMDU5NywyMDYwMCwyMDYwMSwyMDYwMiwyMDYwNCwyMDYwNSwyMDYwOSwyMDYxMCwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxNSwyMDYxNywyMDYxOCwyMDYxOSwyMDYyMCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNSwyMDYyNiwyMDYyNywyMDYyOCwyMDYyOSwyMDYzMCwyMDYz''@;'; put 'put ''MSwyMDYzMiwyMDYzMywyMDYzNCwyMDYzNSwyMDYzNiwyMDYzNywyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY0NCwyMDY0NiwyMDY1MCwyMDY1MSwyMDY1MywyMDY1NCwyMDY1NSwyMDY1NiwyMDY1NywyMDY1OSwyMDY2MCwyMDY2MSwyMDY2MiwyMDY2MywyMDY2NCwyMDY2NSwy''@;'; put 'put ''MDY2OCwyMDY2OSwyMDY3MCwyMDY3MSwyMDY3MiwyMDY3MywyMDY3NCwyMDY3NSwyMDY3NiwyMDY3NywyMDY3OCwyMDY3OSwyMDY4MCwyMDY4MSwyMDY4MiwyMDY4MywyMDY4NCwyMDY4NSwyMDY4NiwyMDY4OCwyMDY4OSwyMDY5MCwyMDY5MSwyMDY5MiwyMDY5MywyMDY5NSwyMDY5NiwyMDY5''@;'; put 'put ''NywyMDY5OSwyMDcwMCwyMDcwMSwyMDcwMiwyMDcwMywyMDcwNCwyMDcwNSwyMDcwNiwyMDcwNywyMDcwOCwyMDcwOSwyMDcxMiwyMDcxMywyMDcxNCwyMDcxNSwyMDcxOSwyMDcyMCwyMDcyMSwyMDcyMiwyMDcyNCwyMDcyNiwyMDcyNywyMDcyOCwyMDcyOSwyMDczMCwyMDczMiwyMDczMywy''@;'; put 'put ''MDczNCwyMDczNSwyMDczNiwyMDczNywyMDczOCwyMDczOSwyMDc0MCwyMDc0MSwyMDc0NCwyMDc0NSwyMDc0NiwyMDc0OCwyMDc0OSwyMDc1MCwyMDc1MSwyMDc1MiwyMDc1MywyMDc1NSwyMDc1NiwyMDc1NywyMDc1OCwyMDc1OSwyMDc2MCwyMDc2MSwyMDc2MiwyMDc2MywyMDc2NCwyMDc2''@;'; put 'put ''NSwyMDc2NiwyMDc2NywyMDc2OCwyMDc3MCwyMDc3MSwyMDc3MiwyMDc3MywyMDc3NCwyMDc3NSwyMDc3NiwyMDc3NywyMDc3OCwyMDc3OSwyMDc4MCwyMDc4MSwyMDc4MiwyMDc4MywyMDc4NCwyMDc4NSwyMDc4NiwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MCwyMDc5MSwyMDc5MiwyMDc5Mywy''@;'; put 'put ''MDc5NCwyMDc5NSwyMDc5NiwyMDc5NywyMDc5OCwyMDgwMiwyMDgwNywyMDgxMCwyMDgxMiwyMDgxNCwyMDgxNSwyMDgxNiwyMDgxOCwyMDgxOSwyMDgyMywyMDgyNCwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyMDgzMSwyMDgzMiwyMDgzMywyMDgzNSwyMDgzNiwyMDgzOCwyMDgzOSwyMDg0''@;'; put 'put ''MSwyMDg0MiwyMDg0NywyMDg1MCwyMDg1OCwyMDg2MiwyMDg2MywyMDg2NywyMDg2OCwyMDg3MCwyMDg3MSwyMDg3NCwyMDg3NSwyMDg3OCwyMDg3OSwyMDg4MCwyMDg4MSwyMDg4MywyMDg4NCwyMDg4OCwyMDg5MCwyMDg5MywyMDg5NCwyMDg5NSwyMDg5NywyMDg5OSwyMDkwMiwyMDkwMywy''@;'; put 'put ''MDkwNCwyMDkwNSwyMDkwNiwyMDkwOSwyMDkxMCwyMDkxNiwyMDkyMCwyMDkyMSwyMDkyMiwyMDkyNiwyMDkyNywyMDkyOSwyMDkzMCwyMDkzMSwyMDkzMywyMDkzNiwyMDkzOCwyMDk0MSwyMDk0MiwyMDk0NCwyMDk0NiwyMDk0NywyMDk0OCwyMDk0OSwyMDk1MCwyMDk1MSwyMDk1MiwyMDk1''@;'; put 'put ''MywyMDk1NCwyMDk1NiwyMDk1OCwyMDk1OSwyMDk2MiwyMDk2MywyMDk2NSwyMDk2NiwyMDk2NywyMDk2OCwyMDk2OSwyMDk3MCwyMDk3MiwyMDk3NCwyMDk3NywyMDk3OCwyMDk4MCwyMDk4MywyMDk5MCwyMDk5NiwyMDk5NywyMTAwMSwyMTAwMywyMTAwNCwyMTAwNywyMTAwOCwyMTAxMSwy''@;'; put 'put ''MTAxMiwyMTAxMywyMTAyMCwyMTAyMiwyMTAyMywyMTAyNSwyMTAyNiwyMTAyNywyMTAyOSwyMTAzMCwyMTAzMSwyMTAzNCwyMTAzNiwyMTAzOSwyMTA0MSwyMTA0MiwyMTA0NCwyMTA0NSwyMTA1MiwyMTA1NCwyMTA2MCwyMTA2MSwyMTA2MiwyMTA2MywyMTA2NCwyMTA2NSwyMTA2NywyMTA3''@;'; put 'put ''MCwyMTA3MSwyMTA3NCwyMTA3NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MSwyMTA4MiwyMTA4MywyMTA4NSwyMTA4NywyMTA4OCwyMTA5MCwyMTA5MSwyMTA5MiwyMTA5NCwyMTA5NiwyMTA5OSwyMTEwMCwyMTEwMSwyMTEwMiwyMTEwNCwyMTEwNSwyMTEwNywyMTEwOCwyMTEwOSwyMTExMCwy''@;'; put 'put ''MTExMSwyMTExMiwyMTExMywyMTExNCwyMTExNSwyMTExNiwyMTExOCwyMTEyMCwyMTEyMywyMTEyNCwyMTEyNSwyMTEyNiwyMTEyNywyMTEyOSwyMTEzMCwyMTEzMSwyMTEzMiwyMTEzMywyMTEzNCwyMTEzNSwyMTEzNywyMTEzOCwyMTE0MCwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0''@;'; put 'put ''NSwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NiwyMTE2NywyMTE2OCwyMTE3MiwyMTE3MywyMTE3NCwyMTE3NSwyMTE3NiwyMTE3NywyMTE3OCwyMTE3OSwyMTE4MCwyMTE4MSwyMTE4NCwyMTE4NSwyMTE4NiwyMTE4OCwyMTE4OSwyMTE5MCwyMTE5MiwyMTE5NCwy''@;'; put 'put ''MTE5NiwyMTE5NywyMTE5OCwyMTE5OSwyMTIwMSwyMTIwMywyMTIwNCwyMTIwNSwyMTIwNywyMTIwOSwyMTIxMCwyMTIxMSwyMTIxMiwyMTIxMywyMTIxNCwyMTIxNiwyMTIxNywyMTIxOCwyMTIxOSwyMTIyMSwyMTIyMiwyMTIyMywyMTIyNCwyMTIyNSwyMTIyNiwyMTIyNywyMTIyOCwyMTIy''@;'; put 'put ''OSwyMTIzMCwyMTIzMSwyMTIzMywyMTIzNCwyMTIzNSwyMTIzNiwyMTIzNywyMTIzOCwyMTIzOSwyMTI0MCwyMTI0MywyMTI0NCwyMTI0NSwyMTI0OSwyMTI1MCwyMTI1MSwyMTI1MiwyMTI1NSwyMTI1NywyMTI1OCwyMTI1OSwyMTI2MCwyMTI2MiwyMTI2NSwyMTI2NiwyMTI2NywyMTI2OCwy''@;'; put 'put ''MTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwyMTI4MiwyMTI4NCwyMTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NSwyMTI5NiwyMTI5NywyMTI5OCwyMTI5OSwyMTMwMCwyMTMwMSwyMTMwMiwyMTMwMywyMTMwNCwyMTMwOCwyMTMwOSwyMTMxMiwyMTMx''@;'; put 'put ''NCwyMTMxNiwyMTMxOCwyMTMyMywyMTMyNCwyMTMyNSwyMTMyOCwyMTMzMiwyMTMzNiwyMTMzNywyMTMzOSwyMTM0MSwyMTM0OSwyMTM1MiwyMTM1NCwyMTM1NiwyMTM1NywyMTM2MiwyMTM2NiwyMTM2OSwyMTM3MSwyMTM3MiwyMTM3MywyMTM3NCwyMTM3NiwyMTM3NywyMTM3OSwyMTM4Mywy''@;'; put 'put ''MTM4NCwyMTM4NiwyMTM5MCwyMTM5MSwyMTM5MiwyMTM5MywyMTM5NCwyMTM5NSwyMTM5NiwyMTM5OCwyMTM5OSwyMTQwMSwyMTQwMywyMTQwNCwyMTQwNiwyMTQwOCwyMTQwOSwyMTQxMiwyMTQxNSwyMTQxOCwyMTQxOSwyMTQyMCwyMTQyMSwyMTQyMywyMTQyNCwyMTQyNSwyMTQyNiwyMTQy''@;'; put 'put ''NywyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzMywyMTQzNCwyMTQzNiwyMTQzNywyMTQzOCwyMTQ0MCwyMTQ0MywyMTQ0NCwyMTQ0NSwyMTQ0NiwyMTQ0NywyMTQ1NCwyMTQ1NSwyMTQ1NiwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OCwyMTQ2OSwyMTQ3MCwyMTQ3MywyMTQ3NCwy''@;'; put 'put ''MTQ3OSwyMTQ5MiwyMTQ5OCwyMTUwMiwyMTUwMywyMTUwNCwyMTUwNiwyMTUwOSwyMTUxMSwyMTUxNSwyMTUyNCwyMTUyOCwyMTUyOSwyMTUzMCwyMTUzMiwyMTUzOCwyMTU0MCwyMTU0MSwyMTU0NiwyMTU1MiwyMTU1NSwyMTU1OCwyMTU1OSwyMTU2MiwyMTU2NSwyMTU2NywyMTU2OSwyMTU3''@;'; put 'put ''MCwyMTU3MiwyMTU3MywyMTU3NSwyMTU3NywyMTU4MCwyMTU4MSwyMTU4MiwyMTU4MywyMTU4NSwyMTU5NCwyMTU5NywyMTU5OCwyMTU5OSwyMTYwMCwyMTYwMSwyMTYwMywyMTYwNSwyMTYwNywyMTYwOSwyMTYxMCwyMTYxMSwyMTYxMiwyMTYxMywyMTYxNCwyMTYxNSwyMTYxNiwyMTYyMCwy''@;'; put 'put ''MTYyNSwyMTYyNiwyMTYzMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTYzOSwyMTY0MCwyMTY0MSwyMTY0MiwyMTY0NSwyMTY0OSwyMTY1MSwyMTY1NSwyMTY1NiwyMTY2MCwyMTY2MiwyMTY2MywyMTY2NCwyMTY2NSwyMTY2NiwyMTY2OSwyMTY3OCwyMTY4MCwyMTY4MiwyMTY4NSwyMTY4''@;'; put 'put ''NiwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MiwyMTY5NCwyMTY5OSwyMTcwMSwyMTcwNiwyMTcwNywyMTcxOCwyMTcyMCwyMTcyMywyMTcyOCwyMTcyOSwyMTczMCwyMTczMSwyMTczMiwyMTczOSwyMTc0MCwyMTc0MywyMTc0NCwyMTc0NSwyMTc0OCwyMTc0OSwyMTc1MCwyMTc1MSwyMTc1Miwy''@;'; put 'put ''MTc1MywyMTc1NSwyMTc1OCwyMTc2MCwyMTc2MiwyMTc2MywyMTc2NCwyMTc2NSwyMTc2OCwyMTc3MCwyMTc3MSwyMTc3MiwyMTc3MywyMTc3NCwyMTc3OCwyMTc3OSwyMTc4MSwyMTc4MiwyMTc4MywyMTc4NCwyMTc4NSwyMTc4NiwyMTc4OCwyMTc4OSwyMTc5MCwyMTc5MSwyMTc5MywyMTc5''@;'; put 'put ''NywyMTc5OCwyMTgwMCwyMTgwMSwyMTgwMywyMTgwNSwyMTgxMCwyMTgxMiwyMTgxMywyMTgxNCwyMTgxNiwyMTgxNywyMTgxOCwyMTgxOSwyMTgyMSwyMTgyNCwyMTgyNiwyMTgyOSwyMTgzMSwyMTgzMiwyMTgzNSwyMTgzNiwyMTgzNywyMTgzOCwyMTgzOSwyMTg0MSwyMTg0MiwyMTg0Mywy''@;'; put 'put ''MTg0NCwyMTg0NywyMTg0OCwyMTg0OSwyMTg1MCwyMTg1MSwyMTg1MywyMTg1NCwyMTg1NSwyMTg1NiwyMTg1OCwyMTg1OSwyMTg2NCwyMTg2NSwyMTg2NywyMTg3MSwyMTg3MiwyMTg3MywyMTg3NCwyMTg3NSwyMTg3NiwyMTg4MSwyMTg4MiwyMTg4NSwyMTg4NywyMTg5MywyMTg5NCwyMTkw''@;'; put 'put ''MCwyMTkwMSwyMTkwMiwyMTkwNCwyMTkwNiwyMTkwNywyMTkwOSwyMTkxMCwyMTkxMSwyMTkxNCwyMTkxNSwyMTkxOCwyMTkyMCwyMTkyMSwyMTkyMiwyMTkyMywyMTkyNCwyMTkyNSwyMTkyNiwyMTkyOCwyMTkyOSwyMTkzMCwyMTkzMSwyMTkzMiwyMTkzMywyMTkzNCwyMTkzNSwyMTkzNiwy''@;'; put 'put ''MTkzOCwyMTk0MCwyMTk0MiwyMTk0NCwyMTk0NiwyMTk0OCwyMTk1MSwyMTk1MiwyMTk1MywyMTk1NCwyMTk1NSwyMTk1OCwyMTk1OSwyMTk2MCwyMTk2MiwyMTk2MywyMTk2NiwyMTk2NywyMTk2OCwyMTk3MywyMTk3NSwyMTk3NiwyMTk3NywyMTk3OCwyMTk3OSwyMTk4MiwyMTk4NCwyMTk4''@;'; put 'put ''NiwyMTk5MSwyMTk5MywyMTk5NywyMTk5OCwyMmUzLDIyMDAxLDIyMDA0LDIyMDA2LDIyMDA4LDIyMDA5LDIyMDEwLDIyMDExLDIyMDEyLDIyMDE1LDIyMDE4LDIyMDE5LDIyMDIwLDIyMDIxLDIyMDIyLDIyMDIzLDIyMDI2LDIyMDI3LDIyMDI5LDIyMDMyLDIyMDMzLDIyMDM0LDIyMDM1LDIy''@;'; put 'put ''MDM2LDIyMDM3LDIyMDM4LDIyMDM5LDIyMDQxLDIyMDQyLDIyMDQ0LDIyMDQ1LDIyMDQ4LDIyMDQ5LDIyMDUwLDIyMDUzLDIyMDU0LDIyMDU2LDIyMDU3LDIyMDU4LDIyMDU5LDIyMDYyLDIyMDYzLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDcyLDIyMDc0LDIyMDc2LDIyMDc3LDIyMDc4''@;'; put 'put ''LDIyMDgwLDIyMDgxLDIyMDgyLDIyMDgzLDIyMDg0LDIyMDg1LDIyMDg2LDIyMDg3LDIyMDg4LDIyMDg5LDIyMDkwLDIyMDkxLDIyMDk1LDIyMDk2LDIyMDk3LDIyMDk4LDIyMDk5LDIyMTAxLDIyMTAyLDIyMTA2LDIyMTA3LDIyMTA5LDIyMTEwLDIyMTExLDIyMTEyLDIyMTEzLDIyMTE1LDIy''@;'; put 'put ''MTE3LDIyMTE4LDIyMTE5LDIyMTI1LDIyMTI2LDIyMTI3LDIyMTI4LDIyMTMwLDIyMTMxLDIyMTMyLDIyMTMzLDIyMTM1LDIyMTM2LDIyMTM3LDIyMTM4LDIyMTQxLDIyMTQyLDIyMTQzLDIyMTQ0LDIyMTQ1LDIyMTQ2LDIyMTQ3LDIyMTQ4LDIyMTUxLDIyMTUyLDIyMTUzLDIyMTU0LDIyMTU1''@;'; put 'put ''LDIyMTU2LDIyMTU3LDIyMTYwLDIyMTYxLDIyMTYyLDIyMTY0LDIyMTY1LDIyMTY2LDIyMTY3LDIyMTY4LDIyMTY5LDIyMTcwLDIyMTcxLDIyMTcyLDIyMTczLDIyMTc0LDIyMTc1LDIyMTc2LDIyMTc3LDIyMTc4LDIyMTgwLDIyMTgxLDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg2LDIy''@;'; put 'put ''MTg3LDIyMTg4LDIyMTg5LDIyMTkwLDIyMTkyLDIyMTkzLDIyMTk0LDIyMTk1LDIyMTk2LDIyMTk3LDIyMTk4LDIyMjAwLDIyMjAxLDIyMjAyLDIyMjAzLDIyMjA1LDIyMjA2LDIyMjA3LDIyMjA4LDIyMjA5LDIyMjEwLDIyMjExLDIyMjEyLDIyMjEzLDIyMjE0LDIyMjE1LDIyMjE2LDIyMjE3''@;'; put 'put ''LDIyMjE5LDIyMjIwLDIyMjIxLDIyMjIyLDIyMjIzLDIyMjI0LDIyMjI1LDIyMjI2LDIyMjI3LDIyMjI5LDIyMjMwLDIyMjMyLDIyMjMzLDIyMjM2LDIyMjQzLDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjQ5LDIyMjUwLDIyMjUyLDIyMjU0LDIyMjU1LDIyMjU4LDIyMjU5LDIyMjYyLDIy''@;'; put 'put ''MjYzLDIyMjY0LDIyMjY3LDIyMjY4LDIyMjcyLDIyMjczLDIyMjc0LDIyMjc3LDIyMjc5LDIyMjgzLDIyMjg0LDIyMjg1LDIyMjg2LDIyMjg3LDIyMjg4LDIyMjg5LDIyMjkwLDIyMjkxLDIyMjkyLDIyMjkzLDIyMjk0LDIyMjk1LDIyMjk2LDIyMjk3LDIyMjk4LDIyMjk5LDIyMzAxLDIyMzAy''@;'; put 'put ''LDIyMzA0LDIyMzA1LDIyMzA2LDIyMzA4LDIyMzA5LDIyMzEwLDIyMzExLDIyMzE1LDIyMzIxLDIyMzIyLDIyMzI0LDIyMzI1LDIyMzI2LDIyMzI3LDIyMzI4LDIyMzMyLDIyMzMzLDIyMzM1LDIyMzM3LDIyMzM5LDIyMzQwLDIyMzQxLDIyMzQyLDIyMzQ0LDIyMzQ1LDIyMzQ3LDIyMzU0LDIy''@;'; put 'put ''MzU1LDIyMzU2LDIyMzU3LDIyMzU4LDIyMzYwLDIyMzYxLDIyMzcwLDIyMzcxLDIyMzczLDIyMzc1LDIyMzgwLDIyMzgyLDIyMzg0LDIyMzg1LDIyMzg2LDIyMzg4LDIyMzg5LDIyMzkyLDIyMzkzLDIyMzk0LDIyMzk3LDIyMzk4LDIyMzk5LDIyNDAwLDIyNDAxLDIyNDA3LDIyNDA4LDIyNDA5''@;'; put 'put ''LDIyNDEwLDIyNDEzLDIyNDE0LDIyNDE1LDIyNDE2LDIyNDE3LDIyNDIwLDIyNDIxLDIyNDIyLDIyNDIzLDIyNDI0LDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDM3LDIyNDQwLDIyNDQyLDIyNDQ0LDIyNDQ3LDIyNDQ4LDIyNDQ5LDIyNDUxLDIyNDUzLDIyNDU0LDIy''@;'; put 'put ''NDU1LDIyNDU3LDIyNDU4LDIyNDU5LDIyNDYwLDIyNDYxLDIyNDYyLDIyNDYzLDIyNDY0LDIyNDY1LDIyNDY4LDIyNDY5LDIyNDcwLDIyNDcxLDIyNDcyLDIyNDczLDIyNDc0LDIyNDc2LDIyNDc3LDIyNDgwLDIyNDgxLDIyNDgzLDIyNDg2LDIyNDg3LDIyNDkxLDIyNDkyLDIyNDk0LDIyNDk3''@;'; put 'put ''LDIyNDk4LDIyNDk5LDIyNTAxLDIyNTAyLDIyNTAzLDIyNTA0LDIyNTA1LDIyNTA2LDIyNTA3LDIyNTA4LDIyNTEwLDIyNTEyLDIyNTEzLDIyNTE0LDIyNTE1LDIyNTE3LDIyNTE4LDIyNTE5LDIyNTIzLDIyNTI0LDIyNTI2LDIyNTI3LDIyNTI5LDIyNTMxLDIyNTMyLDIyNTMzLDIyNTM2LDIy''@;'; put 'put ''NTM3LDIyNTM4LDIyNTQwLDIyNTQyLDIyNTQzLDIyNTQ0LDIyNTQ2LDIyNTQ3LDIyNTQ4LDIyNTUwLDIyNTUxLDIyNTUyLDIyNTU0LDIyNTU1LDIyNTU2LDIyNTU3LDIyNTU5LDIyNTYyLDIyNTYzLDIyNTY1LDIyNTY2LDIyNTY3LDIyNTY4LDIyNTY5LDIyNTcxLDIyNTcyLDIyNTczLDIyNTc0''@;'; put 'put ''LDIyNTc1LDIyNTc3LDIyNTc4LDIyNTc5LDIyNTgwLDIyNTgyLDIyNTgzLDIyNTg0LDIyNTg1LDIyNTg2LDIyNTg3LDIyNTg4LDIyNTg5LDIyNTkwLDIyNTkxLDIyNTkyLDIyNTkzLDIyNTk0LDIyNTk1LDIyNTk3LDIyNTk4LDIyNTk5LDIyNjAwLDIyNjAxLDIyNjAyLDIyNjAzLDIyNjA2LDIy''@;'; put 'put ''NjA3LDIyNjA4LDIyNjEwLDIyNjExLDIyNjEzLDIyNjE0LDIyNjE1LDIyNjE3LDIyNjE4LDIyNjE5LDIyNjIwLDIyNjIxLDIyNjIzLDIyNjI0LDIyNjI1LDIyNjI2LDIyNjI3LDIyNjI4LDIyNjMwLDIyNjMxLDIyNjMyLDIyNjMzLDIyNjM0LDIyNjM3LDIyNjM4LDIyNjM5LDIyNjQwLDIyNjQx''@;'; put 'put ''LDIyNjQyLDIyNjQzLDIyNjQ0LDIyNjQ1LDIyNjQ2LDIyNjQ3LDIyNjQ4LDIyNjQ5LDIyNjUwLDIyNjUxLDIyNjUyLDIyNjUzLDIyNjU1LDIyNjU4LDIyNjYwLDIyNjYyLDIyNjYzLDIyNjY0LDIyNjY2LDIyNjY3LDIyNjY4LDIyNjY5LDIyNjcwLDIyNjcxLDIyNjcyLDIyNjczLDIyNjc2LDIy''@;'; put 'put ''Njc3LDIyNjc4LDIyNjc5LDIyNjgwLDIyNjgzLDIyNjg0LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjkxLDIyNjkyLDIyNjkzLDIyNjk0LDIyNjk1LDIyNjk4LDIyNjk5LDIyNzAwLDIyNzAxLDIyNzAyLDIyNzAzLDIyNzA0LDIyNzA1LDIyNzA2LDIyNzA3LDIyNzA4LDIyNzA5LDIyNzEw''@;'; put 'put ''LDIyNzExLDIyNzEyLDIyNzEzLDIyNzE0LDIyNzE1LDIyNzE3LDIyNzE4LDIyNzE5LDIyNzIwLDIyNzIyLDIyNzIzLDIyNzI0LDIyNzI2LDIyNzI3LDIyNzI4LDIyNzI5LDIyNzMwLDIyNzMxLDIyNzMyLDIyNzMzLDIyNzM0LDIyNzM1LDIyNzM2LDIyNzM4LDIyNzM5LDIyNzQwLDIyNzQyLDIy''@;'; put 'put ''NzQzLDIyNzQ0LDIyNzQ1LDIyNzQ2LDIyNzQ3LDIyNzQ4LDIyNzQ5LDIyNzUwLDIyNzUxLDIyNzUyLDIyNzUzLDIyNzU0LDIyNzU1LDIyNzU3LDIyNzU4LDIyNzU5LDIyNzYwLDIyNzYxLDIyNzYyLDIyNzY1LDIyNzY3LDIyNzY5LDIyNzcwLDIyNzcyLDIyNzczLDIyNzc1LDIyNzc2LDIyNzc4''@;'; put 'put ''LDIyNzc5LDIyNzgwLDIyNzgxLDIyNzgyLDIyNzgzLDIyNzg0LDIyNzg1LDIyNzg3LDIyNzg5LDIyNzkwLDIyNzkyLDIyNzkzLDIyNzk0LDIyNzk1LDIyNzk2LDIyNzk4LDIyODAwLDIyODAxLDIyODAyLDIyODAzLDIyODA3LDIyODA4LDIyODExLDIyODEzLDIyODE0LDIyODE2LDIyODE3LDIy''@;'; put 'put ''ODE4LDIyODE5LDIyODIyLDIyODI0LDIyODI4LDIyODMyLDIyODM0LDIyODM1LDIyODM3LDIyODM4LDIyODQzLDIyODQ1LDIyODQ2LDIyODQ3LDIyODQ4LDIyODUxLDIyODUzLDIyODU0LDIyODU4LDIyODYwLDIyODYxLDIyODY0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc2LDIyODc3''@;'; put 'put ''LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODg0LDIyODg2LDIyODg3LDIyODg4LDIyODg5LDIyODkwLDIyODkxLDIyODkyLDIyODkzLDIyODk0LDIyODk1LDIyODk2LDIyODk3LDIyODk4LDIyOTAxLDIyOTAzLDIyOTA2LDIyOTA3LDIyOTA4LDIyOTEwLDIyOTExLDIyOTEyLDIyOTE3LDIy''@;'; put 'put ''OTIxLDIyOTIzLDIyOTI0LDIyOTI2LDIyOTI3LDIyOTI4LDIyOTI5LDIyOTMyLDIyOTMzLDIyOTM2LDIyOTM4LDIyOTM5LDIyOTQwLDIyOTQxLDIyOTQzLDIyOTQ0LDIyOTQ1LDIyOTQ2LDIyOTUwLDIyOTUxLDIyOTU2LDIyOTU3LDIyOTYwLDIyOTYxLDIyOTYzLDIyOTY0LDIyOTY1LDIyOTY2''@;'; put 'put ''LDIyOTY3LDIyOTY4LDIyOTcwLDIyOTcyLDIyOTczLDIyOTc1LDIyOTc2LDIyOTc3LDIyOTc4LDIyOTc5LDIyOTgwLDIyOTgxLDIyOTgzLDIyOTg0LDIyOTg1LDIyOTg4LDIyOTg5LDIyOTkwLDIyOTkxLDIyOTk3LDIyOTk4LDIzMDAxLDIzMDAzLDIzMDA2LDIzMDA3LDIzMDA4LDIzMDA5LDIz''@;'; put 'put ''MDEwLDIzMDEyLDIzMDE0LDIzMDE1LDIzMDE3LDIzMDE4LDIzMDE5LDIzMDIxLDIzMDIyLDIzMDIzLDIzMDI0LDIzMDI1LDIzMDI2LDIzMDI3LDIzMDI4LDIzMDI5LDIzMDMwLDIzMDMxLDIzMDMyLDIzMDM0LDIzMDM2LDIzMDM3LDIzMDM4LDIzMDQwLDIzMDQyLDIzMDUwLDIzMDUxLDIzMDUz''@;'; put 'put ''LDIzMDU0LDIzMDU1LDIzMDU2LDIzMDU4LDIzMDYwLDIzMDYxLDIzMDYyLDIzMDYzLDIzMDY1LDIzMDY2LDIzMDY3LDIzMDY5LDIzMDcwLDIzMDczLDIzMDc0LDIzMDc2LDIzMDc4LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDgzLDIzMDg0LDIzMDg1LDIzMDg2LDIzMDg3LDIzMDg4LDIzMDkxLDIz''@;'; put 'put ''MDkzLDIzMDk1LDIzMDk2LDIzMDk3LDIzMDk4LDIzMDk5LDIzMTAxLDIzMTAyLDIzMTAzLDIzMTA1LDIzMTA2LDIzMTA3LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE1LDIzMTE2LDIzMTE3LDIzMTE4LDIzMTE5LDIzMTIwLDIzMTIxLDIzMTIyLDIzMTIzLDIzMTI0LDIzMTI2LDIzMTI3''@;'; put 'put ''LDIzMTI4LDIzMTI5LDIzMTMxLDIzMTMyLDIzMTMzLDIzMTM0LDIzMTM1LDIzMTM2LDIzMTM3LDIzMTM5LDIzMTQwLDIzMTQxLDIzMTQyLDIzMTQ0LDIzMTQ1LDIzMTQ3LDIzMTQ4LDIzMTQ5LDIzMTUwLDIzMTUxLDIzMTUyLDIzMTUzLDIzMTU0LDIzMTU1LDIzMTYwLDIzMTYxLDIzMTYzLDIz''@;'; put 'put ''MTY0LDIzMTY1LDIzMTY2LDIzMTY4LDIzMTY5LDIzMTcwLDIzMTcxLDIzMTcyLDIzMTczLDIzMTc0LDIzMTc1LDIzMTc2LDIzMTc3LDIzMTc4LDIzMTc5LDIzMTgwLDIzMTgxLDIzMTgyLDIzMTgzLDIzMTg0LDIzMTg1LDIzMTg3LDIzMTg4LDIzMTg5LDIzMTkwLDIzMTkxLDIzMTkyLDIzMTkz''@;'; put 'put ''LDIzMTk2LDIzMTk3LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAxLDIzMjAyLDIzMjAzLDIzMjA0LDIzMjA1LDIzMjA2LDIzMjA3LDIzMjA4LDIzMjA5LDIzMjExLDIzMjEyLDIzMjEzLDIzMjE0LDIzMjE1LDIzMjE2LDIzMjE3LDIzMjIwLDIzMjIyLDIzMjIzLDIzMjI1LDIzMjI2LDIzMjI3LDIz''@;'; put 'put ''MjI4LDIzMjI5LDIzMjMxLDIzMjMyLDIzMjM1LDIzMjM2LDIzMjM3LDIzMjM4LDIzMjM5LDIzMjQwLDIzMjQyLDIzMjQzLDIzMjQ1LDIzMjQ2LDIzMjQ3LDIzMjQ4LDIzMjQ5LDIzMjUxLDIzMjUzLDIzMjU1LDIzMjU3LDIzMjU4LDIzMjU5LDIzMjYxLDIzMjYyLDIzMjYzLDIzMjY2LDIzMjY4''@;'; put 'put ''LDIzMjY5LDIzMjcxLDIzMjcyLDIzMjc0LDIzMjc2LDIzMjc3LDIzMjc4LDIzMjc5LDIzMjgwLDIzMjgyLDIzMjgzLDIzMjg0LDIzMjg1LDIzMjg2LDIzMjg3LDIzMjg4LDIzMjg5LDIzMjkwLDIzMjkxLDIzMjkyLDIzMjkzLDIzMjk0LDIzMjk1LDIzMjk2LDIzMjk3LDIzMjk4LDIzMjk5LDIz''@;'; put 'put ''MzAwLDIzMzAxLDIzMzAyLDIzMzAzLDIzMzA0LDIzMzA2LDIzMzA3LDIzMzA4LDIzMzA5LDIzMzEwLDIzMzExLDIzMzEyLDIzMzEzLDIzMzE0LDIzMzE1LDIzMzE2LDIzMzE3LDIzMzIwLDIzMzIxLDIzMzIyLDIzMzIzLDIzMzI0LDIzMzI1LDIzMzI2LDIzMzI3LDIzMzI4LDIzMzI5LDIzMzMw''@;'; put 'put ''LDIzMzMxLDIzMzMyLDIzMzMzLDIzMzM0LDIzMzM1LDIzMzM2LDIzMzM3LDIzMzM4LDIzMzM5LDIzMzQwLDIzMzQxLDIzMzQyLDIzMzQzLDIzMzQ0LDIzMzQ1LDIzMzQ3LDIzMzQ5LDIzMzUwLDIzMzUyLDIzMzUzLDIzMzU0LDIzMzU1LDIzMzU2LDIzMzU3LDIzMzU4LDIzMzU5LDIzMzYxLDIz''@;'; put 'put ''MzYyLDIzMzYzLDIzMzY0LDIzMzY1LDIzMzY2LDIzMzY3LDIzMzY4LDIzMzY5LDIzMzcwLDIzMzcxLDIzMzcyLDIzMzczLDIzMzc0LDIzMzc1LDIzMzc4LDIzMzgyLDIzMzkwLDIzMzkyLDIzMzkzLDIzMzk5LDIzNDAwLDIzNDAzLDIzNDA1LDIzNDA2LDIzNDA3LDIzNDEwLDIzNDEyLDIzNDE0''@;'; put 'put ''LDIzNDE1LDIzNDE2LDIzNDE3LDIzNDE5LDIzNDIwLDIzNDIyLDIzNDIzLDIzNDI2LDIzNDMwLDIzNDM0LDIzNDM3LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQyLDIzNDQ0LDIzNDQ2LDIzNDU1LDIzNDYzLDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcwLDIzNDcxLDIzNDczLDIzNDc0LDIz''@;'; put 'put ''NDc5LDIzNDgyLDIzNDgzLDIzNDg0LDIzNDg4LDIzNDg5LDIzNDkxLDIzNDk2LDIzNDk3LDIzNDk4LDIzNDk5LDIzNTAxLDIzNTAyLDIzNTAzLDIzNTA1LDIzNTA4LDIzNTA5LDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTE1LDIzNTE2LDIzNTIwLDIzNTIyLDIzNTIzLDIzNTI2''@;'; put 'put ''LDIzNTI3LDIzNTI5LDIzNTMwLDIzNTMxLDIzNTMyLDIzNTMzLDIzNTM1LDIzNTM3LDIzNTM4LDIzNTM5LDIzNTQwLDIzNTQxLDIzNTQyLDIzNTQzLDIzNTQ5LDIzNTUwLDIzNTUyLDIzNTU0LDIzNTU1LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTYzLDIzNTY0LDIzNTY1LDIzNTY2LDIzNTY4LDIz''@;'; put 'put ''NTcwLDIzNTcxLDIzNTc1LDIzNTc3LDIzNTc5LDIzNTgyLDIzNTgzLDIzNTg0LDIzNTg1LDIzNTg3LDIzNTkwLDIzNTkyLDIzNTkzLDIzNTk0LDIzNTk1LDIzNTk3LDIzNTk4LDIzNTk5LDIzNjAwLDIzNjAyLDIzNjAzLDIzNjA1LDIzNjA2LDIzNjA3LDIzNjE5LDIzNjIwLDIzNjIyLDIzNjIz''@;'; put 'put ''LDIzNjI4LDIzNjI5LDIzNjM0LDIzNjM1LDIzNjM2LDIzNjM4LDIzNjM5LDIzNjQwLDIzNjQyLDIzNjQzLDIzNjQ0LDIzNjQ1LDIzNjQ3LDIzNjUwLDIzNjUyLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjU4LDIzNjU5LDIzNjYwLDIzNjYxLDIzNjY0LDIzNjY2LDIzNjY3LDIzNjY4LDIzNjY5LDIz''@;'; put 'put ''NjcwLDIzNjcxLDIzNjcyLDIzNjc1LDIzNjc2LDIzNjc3LDIzNjc4LDIzNjgwLDIzNjgzLDIzNjg0LDIzNjg1LDIzNjg2LDIzNjg3LDIzNjg5LDIzNjkwLDIzNjkxLDIzNjk0LDIzNjk1LDIzNjk4LDIzNjk5LDIzNzAxLDIzNzA5LDIzNzEwLDIzNzExLDIzNzEyLDIzNzEzLDIzNzE2LDIzNzE3''@;'; put 'put ''LDIzNzE4LDIzNzE5LDIzNzIwLDIzNzIyLDIzNzI2LDIzNzI3LDIzNzI4LDIzNzMwLDIzNzMyLDIzNzM0LDIzNzM3LDIzNzM4LDIzNzM5LDIzNzQwLDIzNzQyLDIzNzQ0LDIzNzQ2LDIzNzQ3LDIzNzQ5LDIzNzUwLDIzNzUxLDIzNzUyLDIzNzUzLDIzNzU0LDIzNzU2LDIzNzU3LDIzNzU4LDIz''@;'; put 'put ''NzU5LDIzNzYwLDIzNzYxLDIzNzYzLDIzNzY0LDIzNzY1LDIzNzY2LDIzNzY3LDIzNzY4LDIzNzcwLDIzNzcxLDIzNzcyLDIzNzczLDIzNzc0LDIzNzc1LDIzNzc2LDIzNzc4LDIzNzc5LDIzNzgzLDIzNzg1LDIzNzg3LDIzNzg4LDIzNzkwLDIzNzkxLDIzNzkzLDIzNzk0LDIzNzk1LDIzNzk2''@;'; put 'put ''LDIzNzk3LDIzNzk4LDIzNzk5LDIzODAwLDIzODAxLDIzODAyLDIzODA0LDIzODA1LDIzODA2LDIzODA3LDIzODA4LDIzODA5LDIzODEyLDIzODEzLDIzODE2LDIzODE3LDIzODE4LDIzODE5LDIzODIwLDIzODIxLDIzODIzLDIzODI0LDIzODI1LDIzODI2LDIzODI3LDIzODI5LDIzODMxLDIz''@;'; put 'put ''ODMyLDIzODMzLDIzODM0LDIzODM2LDIzODM3LDIzODM5LDIzODQwLDIzODQxLDIzODQyLDIzODQzLDIzODQ1LDIzODQ4LDIzODUwLDIzODUxLDIzODUyLDIzODU1LDIzODU2LDIzODU3LDIzODU4LDIzODU5LDIzODYxLDIzODYyLDIzODYzLDIzODY0LDIzODY1LDIzODY2LDIzODY3LDIzODY4''@;'; put 'put ''LDIzODcxLDIzODcyLDIzODczLDIzODc0LDIzODc1LDIzODc2LDIzODc3LDIzODc4LDIzODgwLDIzODgxLDIzODg1LDIzODg2LDIzODg3LDIzODg4LDIzODg5LDIzODkwLDIzODkxLDIzODkyLDIzODkzLDIzODk0LDIzODk1LDIzODk3LDIzODk4LDIzOTAwLDIzOTAyLDIzOTAzLDIzOTA0LDIz''@;'; put 'put ''OTA1LDIzOTA2LDIzOTA3LDIzOTA4LDIzOTA5LDIzOTEwLDIzOTExLDIzOTEyLDIzOTE0LDIzOTE3LDIzOTE4LDIzOTIwLDIzOTIxLDIzOTIyLDIzOTIzLDIzOTI1LDIzOTI2LDIzOTI3LDIzOTI4LDIzOTI5LDIzOTMwLDIzOTMxLDIzOTMyLDIzOTMzLDIzOTM0LDIzOTM1LDIzOTM2LDIzOTM3''@;'; put 'put ''LDIzOTM5LDIzOTQwLDIzOTQxLDIzOTQyLDIzOTQzLDIzOTQ0LDIzOTQ1LDIzOTQ2LDIzOTQ3LDIzOTQ4LDIzOTQ5LDIzOTUwLDIzOTUxLDIzOTUyLDIzOTUzLDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTU4LDIzOTU5LDIzOTYwLDIzOTYyLDIzOTYzLDIzOTY0LDIzOTY2LDIzOTY3LDIz''@;'; put 'put ''OTY4LDIzOTY5LDIzOTcwLDIzOTcxLDIzOTcyLDIzOTczLDIzOTc0LDIzOTc1LDIzOTc2LDIzOTc3LDIzOTc4LDIzOTc5LDIzOTgwLDIzOTgxLDIzOTgyLDIzOTgzLDIzOTg0LDIzOTg1LDIzOTg2LDIzOTg3LDIzOTg4LDIzOTg5LDIzOTkwLDIzOTkyLDIzOTkzLDIzOTk0LDIzOTk1LDIzOTk2''@;'; put 'put ''LDIzOTk3LDIzOTk4LDIzOTk5LDI0ZTMsMjQwMDEsMjQwMDIsMjQwMDMsMjQwMDQsMjQwMDYsMjQwMDcsMjQwMDgsMjQwMDksMjQwMTAsMjQwMTEsMjQwMTIsMjQwMTQsMjQwMTUsMjQwMTYsMjQwMTcsMjQwMTgsMjQwMTksMjQwMjAsMjQwMjEsMjQwMjIsMjQwMjMsMjQwMjQsMjQwMjUsMjQw''@;'; put 'put ''MjYsMjQwMjgsMjQwMzEsMjQwMzIsMjQwMzUsMjQwMzYsMjQwNDIsMjQwNDQsMjQwNDUsMjQwNDgsMjQwNTMsMjQwNTQsMjQwNTYsMjQwNTcsMjQwNTgsMjQwNTksMjQwNjAsMjQwNjMsMjQwNjQsMjQwNjgsMjQwNzEsMjQwNzMsMjQwNzQsMjQwNzUsMjQwNzcsMjQwNzgsMjQwODIsMjQwODMs''@;'; put 'put ''MjQwODcsMjQwOTQsMjQwOTUsMjQwOTYsMjQwOTcsMjQwOTgsMjQwOTksMjQxMDAsMjQxMDEsMjQxMDQsMjQxMDUsMjQxMDYsMjQxMDcsMjQxMDgsMjQxMTEsMjQxMTIsMjQxMTQsMjQxMTUsMjQxMTYsMjQxMTcsMjQxMTgsMjQxMjEsMjQxMjIsMjQxMjYsMjQxMjcsMjQxMjgsMjQxMjksMjQx''@;'; put 'put ''MzEsMjQxMzQsMjQxMzUsMjQxMzYsMjQxMzcsMjQxMzgsMjQxMzksMjQxNDEsMjQxNDIsMjQxNDMsMjQxNDQsMjQxNDUsMjQxNDYsMjQxNDcsMjQxNTAsMjQxNTEsMjQxNTIsMjQxNTMsMjQxNTQsMjQxNTYsMjQxNTcsMjQxNTksMjQxNjAsMjQxNjMsMjQxNjQsMjQxNjUsMjQxNjYsMjQxNjcs''@;'; put 'put ''MjQxNjgsMjQxNjksMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzUsMjQxNzYsMjQxNzcsMjQxODEsMjQxODMsMjQxODUsMjQxOTAsMjQxOTMsMjQxOTQsMjQxOTUsMjQxOTcsMjQyMDAsMjQyMDEsMjQyMDQsMjQyMDUsMjQyMDYsMjQyMTAsMjQyMTYsMjQyMTksMjQyMjEsMjQy''@;'; put 'put ''MjUsMjQyMjYsMjQyMjcsMjQyMjgsMjQyMzIsMjQyMzMsMjQyMzQsMjQyMzUsMjQyMzYsMjQyMzgsMjQyMzksMjQyNDAsMjQyNDEsMjQyNDIsMjQyNDQsMjQyNTAsMjQyNTEsMjQyNTIsMjQyNTMsMjQyNTUsMjQyNTYsMjQyNTcsMjQyNTgsMjQyNTksMjQyNjAsMjQyNjEsMjQyNjIsMjQyNjMs''@;'; put 'put ''MjQyNjQsMjQyNjcsMjQyNjgsMjQyNjksMjQyNzAsMjQyNzEsMjQyNzIsMjQyNzYsMjQyNzcsMjQyNzksMjQyODAsMjQyODEsMjQyODIsMjQyODQsMjQyODUsMjQyODYsMjQyODcsMjQyODgsMjQyODksMjQyOTAsMjQyOTEsMjQyOTIsMjQyOTMsMjQyOTQsMjQyOTUsMjQyOTcsMjQyOTksMjQz''@;'; put 'put ''MDAsMjQzMDEsMjQzMDIsMjQzMDMsMjQzMDQsMjQzMDUsMjQzMDYsMjQzMDcsMjQzMDksMjQzMTIsMjQzMTMsMjQzMTUsMjQzMTYsMjQzMTcsMjQzMjUsMjQzMjYsMjQzMjcsMjQzMjksMjQzMzIsMjQzMzMsMjQzMzQsMjQzMzYsMjQzMzgsMjQzNDAsMjQzNDIsMjQzNDUsMjQzNDYsMjQzNDgs''@;'; put 'put ''MjQzNDksMjQzNTAsMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYsMjQzNjgsMjQzNzAsMjQzNzEsMjQzNzIsMjQzNzMsMjQzNzQsMjQzNzUsMjQzNzYsMjQzNzksMjQzODEsMjQzODIsMjQzODMsMjQzODUsMjQzODYsMjQzODcsMjQzODgsMjQzODksMjQz''@;'; put 'put ''OTAsMjQzOTEsMjQzOTIsMjQzOTMsMjQzOTQsMjQzOTUsMjQzOTYsMjQzOTcsMjQzOTgsMjQzOTksMjQ0MDEsMjQ0MDQsMjQ0MDksMjQ0MTAsMjQ0MTEsMjQ0MTIsMjQ0MTQsMjQ0MTUsMjQ0MTYsMjQ0MTksMjQ0MjEsMjQ0MjMsMjQ0MjQsMjQ0MjcsMjQ0MzAsMjQ0MzEsMjQ0MzQsMjQ0MzYs''@;'; put 'put ''MjQ0MzcsMjQ0MzgsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0NDcsMjQ0NTEsMjQ0NTQsMjQ0NjEsMjQ0NjIsMjQ0NjMsMjQ0NjUsMjQ0NjcsMjQ0NjgsMjQ0NzAsMjQ0NzQsMjQ0NzUsMjQ0NzcsMjQ0NzgsMjQ0NzksMjQ0ODAsMjQ0ODIsMjQ0ODMsMjQ0ODQsMjQ0ODUsMjQ0ODYsMjQ0''@;'; put 'put ''ODcsMjQ0ODksMjQ0OTEsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ0OTgsMjQ0OTksMjQ1MDAsMjQ1MDIsMjQ1MDQsMjQ1MDUsMjQ1MDYsMjQ1MDcsMjQ1MTAsMjQ1MTEsMjQ1MTIsMjQ1MTMsMjQ1MTQsMjQ1MTksMjQ1MjAsMjQ1MjIsMjQ1MjMsMjQ1MjYsMjQ1MzEsMjQ1MzIsMjQ1MzMs''@;'; put 'put ''MjQ1MzgsMjQ1MzksMjQ1NDAsMjQ1NDIsMjQ1NDMsMjQ1NDYsMjQ1NDcsMjQ1NDksMjQ1NTAsMjQ1NTIsMjQ1NTMsMjQ1NTYsMjQ1NTksMjQ1NjAsMjQ1NjIsMjQ1NjMsMjQ1NjQsMjQ1NjYsMjQ1NjcsMjQ1NjksMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODQsMjQ1ODUsMjQ1ODcsMjQ1ODgsMjQ1''@;'; put 'put ''OTIsMjQ1OTMsMjQ1OTUsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDYsMjQ2MDcsMjQ2MTAsMjQ2MTEsMjQ2MTIsMjQ2MjAsMjQ2MjEsMjQ2MjIsMjQ2MjQsMjQ2MjUsMjQ2MjYsMjQ2MjcsMjQ2MjgsMjQ2MzAsMjQ2MzEsMjQ2MzIsMjQ2MzMsMjQ2MzQsMjQ2MzcsMjQ2MzgsMjQ2NDAsMjQ2NDQs''@;'; put 'put ''MjQ2NDUsMjQ2NDYsMjQ2NDcsMjQ2NDgsMjQ2NDksMjQ2NTAsMjQ2NTIsMjQ2NTQsMjQ2NTUsMjQ2NTcsMjQ2NTksMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjQsMjQ2NjcsMjQ2NjgsMjQ2NzAsMjQ2NzEsMjQ2NzIsMjQ2NzMsMjQ2NzcsMjQ2NzgsMjQ2ODYsMjQ2ODksMjQ2OTAsMjQ2OTIsMjQ2''@;'; put 'put ''OTMsMjQ2OTUsMjQ3MDIsMjQ3MDQsMjQ3MDUsMjQ3MDYsMjQ3MDksMjQ3MTAsMjQ3MTEsMjQ3MTIsMjQ3MTQsMjQ3MTUsMjQ3MTgsMjQ3MTksMjQ3MjAsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjcsMjQ3MjgsMjQ3MjksMjQ3MzIsMjQ3MzQsMjQ3MzcsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDMs''@;'; put 'put ''MjQ3NDUsMjQ3NDYsMjQ3NTAsMjQ3NTIsMjQ3NTUsMjQ3NTcsMjQ3NTgsMjQ3NTksMjQ3NjEsMjQ3NjIsMjQ3NjUsMjQ3NjYsMjQ3NjcsMjQ3NjgsMjQ3NjksMjQ3NzAsMjQ3NzEsMjQ3NzIsMjQ3NzUsMjQ3NzYsMjQ3NzcsMjQ3ODAsMjQ3ODEsMjQ3ODIsMjQ3ODMsMjQ3ODQsMjQ3ODYsMjQ3''@;'; put 'put ''ODcsMjQ3ODgsMjQ3OTAsMjQ3OTEsMjQ3OTMsMjQ3OTUsMjQ3OTgsMjQ4MDEsMjQ4MDIsMjQ4MDMsMjQ4MDQsMjQ4MDUsMjQ4MTAsMjQ4MTcsMjQ4MTgsMjQ4MjEsMjQ4MjMsMjQ4MjQsMjQ4MjcsMjQ4MjgsMjQ4MjksMjQ4MzAsMjQ4MzEsMjQ4MzQsMjQ4MzUsMjQ4MzYsMjQ4MzcsMjQ4Mzks''@;'; put 'put ''MjQ4NDIsMjQ4NDMsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTYsMjQ4NTcsMjQ4NTksMjQ4NjAsMjQ4NjEsMjQ4NjIsMjQ4NjUsMjQ4NjYsMjQ4NjksMjQ4NzIsMjQ4NzMsMjQ4NzQsMjQ4NzYsMjQ4NzcsMjQ4NzgsMjQ4NzksMjQ4ODAsMjQ4''@;'; put 'put ''ODEsMjQ4ODIsMjQ4ODMsMjQ4ODQsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODgsMjQ4ODksMjQ4OTAsMjQ4OTEsMjQ4OTIsMjQ4OTMsMjQ4OTQsMjQ4OTYsMjQ4OTcsMjQ4OTgsMjQ4OTksMjQ5MDAsMjQ5MDEsMjQ5MDIsMjQ5MDMsMjQ5MDUsMjQ5MDcsMjQ5MDksMjQ5MTEsMjQ5MTIsMjQ5MTQs''@;'; put 'put ''MjQ5MTUsMjQ5MTYsMjQ5MTgsMjQ5MTksMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MjMsMjQ5MjQsMjQ5MjYsMjQ5MjcsMjQ5MjgsMjQ5MjksMjQ5MzEsMjQ5MzIsMjQ5MzMsMjQ5MzQsMjQ5MzcsMjQ5MzgsMjQ5MzksMjQ5NDAsMjQ5NDEsMjQ5NDIsMjQ5NDMsMjQ5NDUsMjQ5NDYsMjQ5NDcsMjQ5''@;'; put 'put ''NDgsMjQ5NTAsMjQ5NTIsMjQ5NTMsMjQ5NTQsMjQ5NTUsMjQ5NTYsMjQ5NTcsMjQ5NTgsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjIsMjQ5NjMsMjQ5NjQsMjQ5NjUsMjQ5NjYsMjQ5NjcsMjQ5NjgsMjQ5NjksMjQ5NzAsMjQ5NzIsMjQ5NzMsMjQ5NzUsMjQ5NzYsMjQ5NzcsMjQ5NzgsMjQ5Nzks''@;'; put 'put ''MjQ5ODEsMjQ5ODIsMjQ5ODMsMjQ5ODQsMjQ5ODUsMjQ5ODYsMjQ5ODcsMjQ5ODgsMjQ5OTAsMjQ5OTEsMjQ5OTIsMjQ5OTMsMjQ5OTQsMjQ5OTUsMjQ5OTYsMjQ5OTcsMjQ5OTgsMjUwMDIsMjUwMDMsMjUwMDUsMjUwMDYsMjUwMDcsMjUwMDgsMjUwMDksMjUwMTAsMjUwMTEsMjUwMTIsMjUw''@;'; put 'put ''MTMsMjUwMTQsMjUwMTYsMjUwMTcsMjUwMTgsMjUwMTksMjUwMjAsMjUwMjEsMjUwMjMsMjUwMjQsMjUwMjUsMjUwMjcsMjUwMjgsMjUwMjksMjUwMzAsMjUwMzEsMjUwMzMsMjUwMzYsMjUwMzcsMjUwMzgsMjUwMzksMjUwNDAsMjUwNDMsMjUwNDUsMjUwNDYsMjUwNDcsMjUwNDgsMjUwNDks''@;'; put 'put ''MjUwNTAsMjUwNTEsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTYsMjUwNTcsMjUwNTgsMjUwNTksMjUwNjAsMjUwNjEsMjUwNjMsMjUwNjQsMjUwNjUsMjUwNjYsMjUwNjcsMjUwNjgsMjUwNjksMjUwNzAsMjUwNzEsMjUwNzIsMjUwNzMsMjUwNzQsMjUwNzUsMjUwNzYsMjUwNzgsMjUw''@;'; put 'put ''NzksMjUwODAsMjUwODEsMjUwODIsMjUwODMsMjUwODQsMjUwODUsMjUwODYsMjUwODgsMjUwODksMjUwOTAsMjUwOTEsMjUwOTIsMjUwOTMsMjUwOTUsMjUwOTcsMjUxMDcsMjUxMDgsMjUxMTMsMjUxMTYsMjUxMTcsMjUxMTgsMjUxMjAsMjUxMjMsMjUxMjYsMjUxMjcsMjUxMjgsMjUxMjks''@;'; put 'put ''MjUxMzEsMjUxMzMsMjUxMzUsMjUxMzYsMjUxMzcsMjUxMzgsMjUxNDEsMjUxNDIsMjUxNDQsMjUxNDUsMjUxNDYsMjUxNDcsMjUxNDgsMjUxNTQsMjUxNTYsMjUxNTcsMjUxNTgsMjUxNjIsMjUxNjcsMjUxNjgsMjUxNzMsMjUxNzQsMjUxNzUsMjUxNzcsMjUxNzgsMjUxODAsMjUxODEsMjUx''@;'; put 'put ''ODIsMjUxODMsMjUxODQsMjUxODUsMjUxODYsMjUxODgsMjUxODksMjUxOTIsMjUyMDEsMjUyMDIsMjUyMDQsMjUyMDUsMjUyMDcsMjUyMDgsMjUyMTAsMjUyMTEsMjUyMTMsMjUyMTcsMjUyMTgsMjUyMTksMjUyMjEsMjUyMjIsMjUyMjMsMjUyMjQsMjUyMjcsMjUyMjgsMjUyMjksMjUyMzAs''@;'; put 'put ''MjUyMzEsMjUyMzIsMjUyMzYsMjUyNDEsMjUyNDQsMjUyNDUsMjUyNDYsMjUyNTEsMjUyNTQsMjUyNTUsMjUyNTcsMjUyNTgsMjUyNjEsMjUyNjIsMjUyNjMsMjUyNjQsMjUyNjYsMjUyNjcsMjUyNjgsMjUyNzAsMjUyNzEsMjUyNzIsMjUyNzQsMjUyNzgsMjUyODAsMjUyODEsMjUyODMsMjUy''@;'; put 'put ''OTEsMjUyOTUsMjUyOTcsMjUzMDEsMjUzMDksMjUzMTAsMjUzMTIsMjUzMTMsMjUzMTYsMjUzMjIsMjUzMjMsMjUzMjgsMjUzMzAsMjUzMzMsMjUzMzYsMjUzMzcsMjUzMzgsMjUzMzksMjUzNDQsMjUzNDcsMjUzNDgsMjUzNDksMjUzNTAsMjUzNTQsMjUzNTUsMjUzNTYsMjUzNTcsMjUzNTks''@;'; put 'put ''MjUzNjAsMjUzNjIsMjUzNjMsMjUzNjQsMjUzNjUsMjUzNjcsMjUzNjgsMjUzNjksMjUzNzIsMjUzODIsMjUzODMsMjUzODUsMjUzODgsMjUzODksMjUzOTAsMjUzOTIsMjUzOTMsMjUzOTUsMjUzOTYsMjUzOTcsMjUzOTgsMjUzOTksMjU0MDAsMjU0MDMsMjU0MDQsMjU0MDYsMjU0MDcsMjU0''@;'; put 'put ''MDgsMjU0MDksMjU0MTIsMjU0MTUsMjU0MTYsMjU0MTgsMjU0MjUsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzAsMjU0MzEsMjU0MzIsMjU0MzMsMjU0MzQsMjU0MzUsMjU0MzYsMjU0MzcsMjU0NDAsMjU0NDQsMjU0NDUsMjU0NDYsMjU0NDgsMjU0NTAsMjU0NTEsMjU0NTIsMjU0NTUsMjU0NTYs''@;'; put 'put ''MjU0NTgsMjU0NTksMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjUsMjU0NjgsMjU0NjksMjU0NzAsMjU0NzEsMjU0NzMsMjU0NzUsMjU0NzYsMjU0NzcsMjU0NzgsMjU0ODMsMjU0ODUsMjU0ODksMjU0OTEsMjU0OTIsMjU0OTMsMjU0OTUsMjU0OTcsMjU0OTgsMjU0OTksMjU1MDAsMjU1MDEsMjU1''@;'; put 'put ''MDIsMjU1MDMsMjU1MDUsMjU1MDgsMjU1MTAsMjU1MTUsMjU1MTksMjU1MjEsMjU1MjIsMjU1MjUsMjU1MjYsMjU1MjksMjU1MzEsMjU1MzMsMjU1MzUsMjU1MzYsMjU1MzcsMjU1MzgsMjU1MzksMjU1NDEsMjU1NDMsMjU1NDQsMjU1NDYsMjU1NDcsMjU1NDgsMjU1NTMsMjU1NTUsMjU1NTYs''@;'; put 'put ''MjU1NTcsMjU1NTksMjU1NjAsMjU1NjEsMjU1NjIsMjU1NjMsMjU1NjQsMjU1NjUsMjU1NjcsMjU1NzAsMjU1NzIsMjU1NzMsMjU1NzQsMjU1NzUsMjU1NzYsMjU1NzksMjU1ODAsMjU1ODIsMjU1ODMsMjU1ODQsMjU1ODUsMjU1ODcsMjU1ODksMjU1OTEsMjU1OTMsMjU1OTQsMjU1OTUsMjU1''@;'; put 'put ''OTYsMjU1OTgsMjU2MDMsMjU2MDQsMjU2MDYsMjU2MDcsMjU2MDgsMjU2MDksMjU2MTAsMjU2MTMsMjU2MTQsMjU2MTcsMjU2MTgsMjU2MjEsMjU2MjIsMjU2MjMsMjU2MjQsMjU2MjUsMjU2MjYsMjU2MjksMjU2MzEsMjU2MzQsMjU2MzUsMjU2MzYsMjU2MzcsMjU2MzksMjU2NDAsMjU2NDEs''@;'; put 'put ''MjU2NDMsMjU2NDYsMjU2NDcsMjU2NDgsMjU2NDksMjU2NTAsMjU2NTEsMjU2NTMsMjU2NTQsMjU2NTUsMjU2NTYsMjU2NTcsMjU2NTksMjU2NjAsMjU2NjIsMjU2NjQsMjU2NjYsMjU2NjcsMjU2NzMsMjU2NzUsMjU2NzYsMjU2NzcsMjU2NzgsMjU2NzksMjU2ODAsMjU2ODEsMjU2ODMsMjU2''@;'; put 'put ''ODUsMjU2ODYsMjU2ODcsMjU2ODksMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTgsMjU2OTksMjU3MDAsMjU3MDEsMjU3MDIsMjU3MDQsMjU3MDYsMjU3MDcsMjU3MDgsMjU3MTAsMjU3MTEsMjU3MTIsMjU3MTMsMjU3MTQsMjU3MTUsMjU3MTYsMjU3MTcs''@;'; put 'put ''MjU3MTgsMjU3MTksMjU3MjMsMjU3MjQsMjU3MjUsMjU3MjYsMjU3MjcsMjU3MjgsMjU3MjksMjU3MzEsMjU3MzQsMjU3MzYsMjU3MzcsMjU3MzgsMjU3MzksMjU3NDAsMjU3NDEsMjU3NDIsMjU3NDMsMjU3NDQsMjU3NDcsMjU3NDgsMjU3NTEsMjU3NTIsMjU3NTQsMjU3NTUsMjU3NTYsMjU3''@;'; put 'put ''NTcsMjU3NTksMjU3NjAsMjU3NjEsMjU3NjIsMjU3NjMsMjU3NjUsMjU3NjYsMjU3NjcsMjU3NjgsMjU3NzAsMjU3NzEsMjU3NzUsMjU3NzcsMjU3NzgsMjU3NzksMjU3ODAsMjU3ODIsMjU3ODUsMjU3ODcsMjU3ODksMjU3OTAsMjU3OTEsMjU3OTMsMjU3OTUsMjU3OTYsMjU3OTgsMjU3OTks''@;'; put 'put ''MjU4MDAsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDcsMjU4MDksMjU4MTEsMjU4MTIsMjU4MTMsMjU4MTQsMjU4MTcsMjU4MTgsMjU4MTksMjU4MjAsMjU4MjEsMjU4MjMsMjU4MjQsMjU4MjUsMjU4MjcsMjU4MjksMjU4MzEsMjU4MzIsMjU4MzMsMjU4MzQsMjU4MzUsMjU4MzYsMjU4''@;'; put 'put ''MzcsMjU4MzgsMjU4MzksMjU4NDAsMjU4NDEsMjU4NDIsMjU4NDMsMjU4NDQsMjU4NDUsMjU4NDYsMjU4NDcsMjU4NDgsMjU4NDksMjU4NTAsMjU4NTEsMjU4NTIsMjU4NTMsMjU4NTQsMjU4NTUsMjU4NTcsMjU4NTgsMjU4NTksMjU4NjAsMjU4NjEsMjU4NjIsMjU4NjMsMjU4NjQsMjU4NjYs''@;'; put 'put ''MjU4NjcsMjU4NjgsMjU4NjksMjU4NzAsMjU4NzEsMjU4NzIsMjU4NzMsMjU4NzUsMjU4NzYsMjU4NzcsMjU4NzgsMjU4NzksMjU4ODEsMjU4ODIsMjU4ODMsMjU4ODQsMjU4ODUsMjU4ODYsMjU4ODcsMjU4ODgsMjU4ODksMjU4OTAsMjU4OTEsMjU4OTIsMjU4OTQsMjU4OTUsMjU4OTYsMjU4''@;'; put 'put ''OTcsMjU4OTgsMjU5MDAsMjU5MDEsMjU5MDQsMjU5MDUsMjU5MDYsMjU5MDcsMjU5MTEsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjAsMjU5MjEsMjU5MjIsMjU5MjMsMjU5MjQsMjU5MjYsMjU5MjcsMjU5MzAsMjU5MzEsMjU5MzMsMjU5MzQsMjU5MzYsMjU5MzgsMjU5MzksMjU5NDAsMjU5NDMs''@;'; put 'put ''MjU5NDQsMjU5NDYsMjU5NDgsMjU5NTEsMjU5NTIsMjU5NTMsMjU5NTYsMjU5NTcsMjU5NTksMjU5NjAsMjU5NjEsMjU5NjIsMjU5NjUsMjU5NjYsMjU5NjcsMjU5NjksMjU5NzEsMjU5NzMsMjU5NzQsMjU5NzYsMjU5NzcsMjU5NzgsMjU5NzksMjU5ODAsMjU5ODEsMjU5ODIsMjU5ODMsMjU5''@;'; put 'put ''ODQsMjU5ODUsMjU5ODYsMjU5ODcsMjU5ODgsMjU5ODksMjU5OTAsMjU5OTIsMjU5OTMsMjU5OTQsMjU5OTcsMjU5OTgsMjU5OTksMjYwMDIsMjYwMDQsMjYwMDUsMjYwMDYsMjYwMDgsMjYwMTAsMjYwMTMsMjYwMTQsMjYwMTYsMjYwMTgsMjYwMTksMjYwMjIsMjYwMjQsMjYwMjYsMjYwMjgs''@;'; put 'put ''MjYwMzAsMjYwMzMsMjYwMzQsMjYwMzUsMjYwMzYsMjYwMzcsMjYwMzgsMjYwMzksMjYwNDAsMjYwNDIsMjYwNDMsMjYwNDYsMjYwNDcsMjYwNDgsMjYwNTAsMjYwNTUsMjYwNTYsMjYwNTcsMjYwNTgsMjYwNjEsMjYwNjQsMjYwNjUsMjYwNjcsMjYwNjgsMjYwNjksMjYwNzIsMjYwNzMsMjYw''@;'; put 'put ''NzQsMjYwNzUsMjYwNzYsMjYwNzcsMjYwNzgsMjYwNzksMjYwODEsMjYwODMsMjYwODQsMjYwOTAsMjYwOTEsMjYwOTgsMjYwOTksMjYxMDAsMjYxMDEsMjYxMDQsMjYxMDUsMjYxMDcsMjYxMDgsMjYxMDksMjYxMTAsMjYxMTEsMjYxMTMsMjYxMTYsMjYxMTcsMjYxMTksMjYxMjAsMjYxMjEs''@;'; put 'put ''MjYxMjMsMjYxMjUsMjYxMjgsMjYxMjksMjYxMzAsMjYxMzQsMjYxMzUsMjYxMzYsMjYxMzgsMjYxMzksMjYxNDAsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjIsMjYxNjMsMjYxNjcsMjYxNjgsMjYx''@;'; put 'put ''NjksMjYxNzAsMjYxNzEsMjYxNzMsMjYxNzUsMjYxNzYsMjYxNzgsMjYxODAsMjYxODEsMjYxODIsMjYxODMsMjYxODQsMjYxODUsMjYxODYsMjYxODksMjYxOTAsMjYxOTIsMjYxOTMsMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDUsMjYyMDYsMjYyMDgsMjYyMTAsMjYyMTEsMjYyMTMs''@;'; put 'put ''MjYyMTUsMjYyMTcsMjYyMTgsMjYyMTksMjYyMjAsMjYyMjEsMjYyMjUsMjYyMjYsMjYyMjcsMjYyMjksMjYyMzIsMjYyMzMsMjYyMzUsMjYyMzYsMjYyMzcsMjYyMzksMjYyNDAsMjYyNDEsMjYyNDMsMjYyNDUsMjYyNDYsMjYyNDgsMjYyNDksMjYyNTAsMjYyNTEsMjYyNTMsMjYyNTQsMjYy''@;'; put 'put ''NTUsMjYyNTYsMjYyNTgsMjYyNTksMjYyNjAsMjYyNjEsMjYyNjQsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzAsMjYyNzEsMjYyNzIsMjYyNzMsMjYyNzQsMjYyNzUsMjYyNzYsMjYyNzcsMjYyNzgsMjYyODEsMjYyODIsMjYyODMsMjYyODQsMjYyODUsMjYyODcsMjYyODgsMjYyODks''@;'; put 'put ''MjYyOTAsMjYyOTEsMjYyOTMsMjYyOTQsMjYyOTUsMjYyOTYsMjYyOTgsMjYyOTksMjYzMDAsMjYzMDEsMjYzMDMsMjYzMDQsMjYzMDUsMjYzMDYsMjYzMDcsMjYzMDgsMjYzMDksMjYzMTAsMjYzMTEsMjYzMTIsMjYzMTMsMjYzMTQsMjYzMTUsMjYzMTYsMjYzMTcsMjYzMTgsMjYzMTksMjYz''@;'; put 'put ''MjAsMjYzMjEsMjYzMjIsMjYzMjMsMjYzMjQsMjYzMjUsMjYzMjYsMjYzMjcsMjYzMjgsMjYzMzAsMjYzMzQsMjYzMzUsMjYzMzYsMjYzMzcsMjYzMzgsMjYzMzksMjYzNDAsMjYzNDEsMjYzNDMsMjYzNDQsMjYzNDYsMjYzNDcsMjYzNDgsMjYzNDksMjYzNTAsMjYzNTEsMjYzNTMsMjYzNTcs''@;'; put 'put ''MjYzNTgsMjYzNjAsMjYzNjIsMjYzNjMsMjYzNjUsMjYzNjksMjYzNzAsMjYzNzEsMjYzNzIsMjYzNzMsMjYzNzQsMjYzNzUsMjYzODAsMjYzODIsMjYzODMsMjYzODUsMjYzODYsMjYzODcsMjYzOTAsMjYzOTIsMjYzOTMsMjYzOTQsMjYzOTYsMjYzOTgsMjY0MDAsMjY0MDEsMjY0MDIsMjY0''@;'; put 'put ''MDMsMjY0MDQsMjY0MDUsMjY0MDcsMjY0MDksMjY0MTQsMjY0MTYsMjY0MTgsMjY0MTksMjY0MjIsMjY0MjMsMjY0MjQsMjY0MjUsMjY0MjcsMjY0MjgsMjY0MzAsMjY0MzEsMjY0MzMsMjY0MzYsMjY0MzcsMjY0MzksMjY0NDIsMjY0NDMsMjY0NDUsMjY0NTAsMjY0NTIsMjY0NTMsMjY0NTUs''@;'; put 'put ''MjY0NTYsMjY0NTcsMjY0NTgsMjY0NTksMjY0NjEsMjY0NjYsMjY0NjcsMjY0NjgsMjY0NzAsMjY0NzEsMjY0NzUsMjY0NzYsMjY0NzgsMjY0ODEsMjY0ODQsMjY0ODYsMjY0ODgsMjY0ODksMjY0OTAsMjY0OTEsMjY0OTMsMjY0OTYsMjY0OTgsMjY0OTksMjY1MDEsMjY1MDIsMjY1MDQsMjY1''@;'; put 'put ''MDYsMjY1MDgsMjY1MDksMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTQsMjY1MTUsMjY1MTYsMjY1MTgsMjY1MjEsMjY1MjMsMjY1MjcsMjY1MjgsMjY1MjksMjY1MzIsMjY1MzQsMjY1MzcsMjY1NDAsMjY1NDIsMjY1NDUsMjY1NDYsMjY1NDgsMjY1NTMsMjY1NTQsMjY1NTUsMjY1NTYsMjY1NTcs''@;'; put 'put ''MjY1NTgsMjY1NTksMjY1NjAsMjY1NjIsMjY1NjUsMjY1NjYsMjY1NjcsMjY1NjgsMjY1NjksMjY1NzAsMjY1NzEsMjY1NzIsMjY1NzMsMjY1NzQsMjY1ODEsMjY1ODIsMjY1ODMsMjY1ODcsMjY1OTEsMjY1OTMsMjY1OTUsMjY1OTYsMjY1OTgsMjY1OTksMjY2MDAsMjY2MDIsMjY2MDMsMjY2''@;'; put 'put ''MDUsMjY2MDYsMjY2MTAsMjY2MTMsMjY2MTQsMjY2MTUsMjY2MTYsMjY2MTcsMjY2MTgsMjY2MTksMjY2MjAsMjY2MjIsMjY2MjUsMjY2MjYsMjY2MjcsMjY2MjgsMjY2MzAsMjY2MzcsMjY2NDAsMjY2NDIsMjY2NDQsMjY2NDUsMjY2NDgsMjY2NDksMjY2NTAsMjY2NTEsMjY2NTIsMjY2NTQs''@;'; put 'put ''MjY2NTUsMjY2NTYsMjY2NTgsMjY2NTksMjY2NjAsMjY2NjEsMjY2NjIsMjY2NjMsMjY2NjQsMjY2NjcsMjY2NjgsMjY2NjksMjY2NzAsMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzYsMjY2NzcsMjY2NzgsMjY2ODIsMjY2ODMsMjY2ODcsMjY2OTUsMjY2OTksMjY3MDEsMjY3MDMsMjY3MDYsMjY3''@;'; put 'put ''MTAsMjY3MTEsMjY3MTIsMjY3MTMsMjY3MTQsMjY3MTUsMjY3MTYsMjY3MTcsMjY3MTgsMjY3MTksMjY3MzAsMjY3MzIsMjY3MzMsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3MzksMjY3NDEsMjY3NDQsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NDksMjY3NTAsMjY3NTEs''@;'; put 'put ''MjY3NTIsMjY3NTQsMjY3NTYsMjY3NTksMjY3NjAsMjY3NjEsMjY3NjIsMjY3NjMsMjY3NjQsMjY3NjUsMjY3NjYsMjY3NjgsMjY3NjksMjY3NzAsMjY3NzIsMjY3NzMsMjY3NzQsMjY3NzYsMjY3NzcsMjY3NzgsMjY3NzksMjY3ODAsMjY3ODEsMjY3ODIsMjY3ODMsMjY3ODQsMjY3ODUsMjY3''@;'; put 'put ''ODcsMjY3ODgsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTUsMjY3OTYsMjY3OTgsMjY4MDEsMjY4MDIsMjY4MDQsMjY4MDYsMjY4MDcsMjY4MDgsMjY4MDksMjY4MTAsMjY4MTEsMjY4MTIsMjY4MTMsMjY4MTQsMjY4MTUsMjY4MTcsMjY4MTksMjY4MjAsMjY4MjEsMjY4MjIsMjY4MjMsMjY4MjQs''@;'; put 'put ''MjY4MjYsMjY4MjgsMjY4MzAsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzYsMjY4MzgsMjY4MzksMjY4NDEsMjY4NDMsMjY4NDQsMjY4NDUsMjY4NDYsMjY4NDcsMjY4NDksMjY4NTAsMjY4NTIsMjY4NTMsMjY4NTQsMjY4NTUsMjY4NTYsMjY4NTcsMjY4NTgsMjY4NTksMjY4NjAsMjY4''@;'; put 'put ''NjEsMjY4NjMsMjY4NjYsMjY4NjcsMjY4NjgsMjY4NzAsMjY4NzEsMjY4NzIsMjY4NzUsMjY4NzcsMjY4NzgsMjY4NzksMjY4ODAsMjY4ODIsMjY4ODMsMjY4ODQsMjY4ODYsMjY4ODcsMjY4ODgsMjY4ODksMjY4OTAsMjY4OTIsMjY4OTUsMjY4OTcsMjY4OTksMjY5MDAsMjY5MDEsMjY5MDIs''@;'; put 'put ''MjY5MDMsMjY5MDQsMjY5MDUsMjY5MDYsMjY5MDcsMjY5MDgsMjY5MDksMjY5MTAsMjY5MTMsMjY5MTQsMjY5MTUsMjY5MTcsMjY5MTgsMjY5MTksMjY5MjAsMjY5MjEsMjY5MjIsMjY5MjMsMjY5MjQsMjY5MjYsMjY5MjcsMjY5MjksMjY5MzAsMjY5MzEsMjY5MzMsMjY5MzQsMjY5MzUsMjY5''@;'; put 'put ''MzYsMjY5MzgsMjY5MzksMjY5NDAsMjY5NDIsMjY5NDQsMjY5NDUsMjY5NDcsMjY5NDgsMjY5NDksMjY5NTAsMjY5NTEsMjY5NTIsMjY5NTMsMjY5NTQsMjY5NTUsMjY5NTYsMjY5NTcsMjY5NTgsMjY5NTksMjY5NjAsMjY5NjEsMjY5NjIsMjY5NjMsMjY5NjUsMjY5NjYsMjY5NjgsMjY5Njks''@;'; put 'put ''MjY5NzEsMjY5NzIsMjY5NzUsMjY5NzcsMjY5NzgsMjY5ODAsMjY5ODEsMjY5ODMsMjY5ODQsMjY5ODUsMjY5ODYsMjY5ODgsMjY5ODksMjY5OTEsMjY5OTIsMjY5OTQsMjY5OTUsMjY5OTYsMjY5OTcsMjY5OTgsMjcwMDIsMjcwMDMsMjcwMDUsMjcwMDYsMjcwMDcsMjcwMDksMjcwMTEsMjcw''@;'; put 'put ''MTMsMjcwMTgsMjcwMTksMjcwMjAsMjcwMjIsMjcwMjMsMjcwMjQsMjcwMjUsMjcwMjYsMjcwMjcsMjcwMzAsMjcwMzEsMjcwMzMsMjcwMzQsMjcwMzcsMjcwMzgsMjcwMzksMjcwNDAsMjcwNDEsMjcwNDIsMjcwNDMsMjcwNDQsMjcwNDUsMjcwNDYsMjcwNDksMjcwNTAsMjcwNTIsMjcwNTQs''@;'; put 'put ''MjcwNTUsMjcwNTYsMjcwNTgsMjcwNTksMjcwNjEsMjcwNjIsMjcwNjQsMjcwNjUsMjcwNjYsMjcwNjgsMjcwNjksMjcwNzAsMjcwNzEsMjcwNzIsMjcwNzQsMjcwNzUsMjcwNzYsMjcwNzcsMjcwNzgsMjcwNzksMjcwODAsMjcwODEsMjcwODMsMjcwODUsMjcwODcsMjcwODksMjcwOTAsMjcw''@;'; put 'put ''OTEsMjcwOTMsMjcwOTQsMjcwOTUsMjcwOTYsMjcwOTcsMjcwOTgsMjcxMDAsMjcxMDEsMjcxMDIsMjcxMDUsMjcxMDYsMjcxMDcsMjcxMDgsMjcxMDksMjcxMTAsMjcxMTEsMjcxMTIsMjcxMTMsMjcxMTQsMjcxMTUsMjcxMTYsMjcxMTgsMjcxMTksMjcxMjAsMjcxMjEsMjcxMjMsMjcxMjQs''@;'; put 'put ''MjcxMjUsMjcxMjYsMjcxMjcsMjcxMjgsMjcxMjksMjcxMzAsMjcxMzEsMjcxMzIsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzgsMjcxMzksMjcxNDAsMjcxNDEsMjcxNDIsMjcxNDMsMjcxNDQsMjcxNDUsMjcxNDcsMjcxNDgsMjcxNDksMjcxNTAsMjcxNTEsMjcxNTIsMjcxNTMsMjcxNTQsMjcx''@;'; put 'put ''NTUsMjcxNTYsMjcxNTcsMjcxNTgsMjcxNjEsMjcxNjIsMjcxNjMsMjcxNjQsMjcxNjUsMjcxNjYsMjcxNjgsMjcxNzAsMjcxNzEsMjcxNzIsMjcxNzMsMjcxNzQsMjcxNzUsMjcxNzcsMjcxNzksMjcxODAsMjcxODEsMjcxODIsMjcxODQsMjcxODYsMjcxODcsMjcxODgsMjcxOTAsMjcxOTEs''@;'; put 'put ''MjcxOTIsMjcxOTMsMjcxOTQsMjcxOTUsMjcxOTYsMjcxOTksMjcyMDAsMjcyMDEsMjcyMDIsMjcyMDMsMjcyMDUsMjcyMDYsMjcyMDgsMjcyMDksMjcyMTAsMjcyMTEsMjcyMTIsMjcyMTMsMjcyMTQsMjcyMTUsMjcyMTcsMjcyMTgsMjcyMTksMjcyMjAsMjcyMjEsMjcyMjIsMjcyMjMsMjcy''@;'; put 'put ''MjYsMjcyMjgsMjcyMjksMjcyMzAsMjcyMzEsMjcyMzIsMjcyMzQsMjcyMzUsMjcyMzYsMjcyMzgsMjcyMzksMjcyNDAsMjcyNDEsMjcyNDIsMjcyNDMsMjcyNDQsMjcyNDUsMjcyNDYsMjcyNDcsMjcyNDgsMjcyNTAsMjcyNTEsMjcyNTIsMjcyNTMsMjcyNTQsMjcyNTUsMjcyNTYsMjcyNTgs''@;'; put 'put ''MjcyNTksMjcyNjEsMjcyNjIsMjcyNjMsMjcyNjUsMjcyNjYsMjcyNjcsMjcyNjksMjcyNzAsMjcyNzEsMjcyNzIsMjcyNzMsMjcyNzQsMjcyNzUsMjcyNzYsMjcyNzcsMjcyNzksMjcyODIsMjcyODMsMjcyODQsMjcyODUsMjcyODYsMjcyODgsMjcyODksMjcyOTAsMjcyOTEsMjcyOTIsMjcy''@;'; put 'put ''OTMsMjcyOTQsMjcyOTUsMjcyOTcsMjcyOTgsMjcyOTksMjczMDAsMjczMDEsMjczMDIsMjczMDMsMjczMDQsMjczMDYsMjczMDksMjczMTAsMjczMTEsMjczMTIsMjczMTMsMjczMTQsMjczMTUsMjczMTYsMjczMTcsMjczMTgsMjczMTksMjczMjAsMjczMjEsMjczMjIsMjczMjMsMjczMjQs''@;'; put 'put ''MjczMjUsMjczMjYsMjczMjcsMjczMjgsMjczMjksMjczMzAsMjczMzEsMjczMzIsMjczMzMsMjczMzQsMjczMzUsMjczMzYsMjczMzcsMjczMzgsMjczMzksMjczNDAsMjczNDEsMjczNDIsMjczNDMsMjczNDQsMjczNDUsMjczNDYsMjczNDcsMjczNDgsMjczNDksMjczNTAsMjczNTEsMjcz''@;'; put 'put ''NTIsMjczNTMsMjczNTQsMjczNTUsMjczNTYsMjczNTcsMjczNTgsMjczNTksMjczNjAsMjczNjEsMjczNjIsMjczNjMsMjczNjQsMjczNjUsMjczNjYsMjczNjcsMjczNjgsMjczNjksMjczNzAsMjczNzEsMjczNzIsMjczNzMsMjczNzQsMjczNzUsMjczNzYsMjczNzcsMjczNzgsMjczNzks''@;'; put 'put ''MjczODAsMjczODEsMjczODIsMjczODMsMjczODQsMjczODUsMjczODYsMjczODcsMjczODgsMjczODksMjczOTAsMjczOTEsMjczOTIsMjczOTMsMjczOTQsMjczOTUsMjczOTYsMjczOTcsMjczOTgsMjczOTksMjc0MDAsMjc0MDEsMjc0MDIsMjc0MDMsMjc0MDQsMjc0MDUsMjc0MDYsMjc0''@;'; put 'put ''MDcsMjc0MDgsMjc0MDksMjc0MTAsMjc0MTEsMjc0MTIsMjc0MTMsMjc0MTQsMjc0MTUsMjc0MTYsMjc0MTcsMjc0MTgsMjc0MTksMjc0MjAsMjc0MjEsMjc0MjIsMjc0MjMsMjc0MjksMjc0MzAsMjc0MzIsMjc0MzMsMjc0MzQsMjc0MzUsMjc0MzYsMjc0MzcsMjc0MzgsMjc0MzksMjc0NDAs''@;'; put 'put ''Mjc0NDEsMjc0NDMsMjc0NDQsMjc0NDUsMjc0NDYsMjc0NDgsMjc0NTEsMjc0NTIsMjc0NTMsMjc0NTUsMjc0NTYsMjc0NTcsMjc0NTgsMjc0NjAsMjc0NjEsMjc0NjQsMjc0NjYsMjc0NjcsMjc0NjksMjc0NzAsMjc0NzEsMjc0NzIsMjc0NzMsMjc0NzQsMjc0NzUsMjc0NzYsMjc0NzcsMjc0''@;'; put 'put ''NzgsMjc0NzksMjc0ODAsMjc0ODIsMjc0ODMsMjc0ODQsMjc0ODUsMjc0ODYsMjc0ODcsMjc0ODgsMjc0ODksMjc0OTYsMjc0OTcsMjc0OTksMjc1MDAsMjc1MDEsMjc1MDIsMjc1MDMsMjc1MDQsMjc1MDUsMjc1MDYsMjc1MDcsMjc1MDgsMjc1MDksMjc1MTAsMjc1MTEsMjc1MTIsMjc1MTQs''@;'; put 'put ''Mjc1MTcsMjc1MTgsMjc1MTksMjc1MjAsMjc1MjUsMjc1MjgsMjc1MzIsMjc1MzQsMjc1MzUsMjc1MzYsMjc1MzcsMjc1NDAsMjc1NDEsMjc1NDMsMjc1NDQsMjc1NDUsMjc1NDgsMjc1NDksMjc1NTAsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NTYsMjc1NTcsMjc1NTgsMjc1NTksMjc1''@;'; put 'put ''NjAsMjc1NjEsMjc1NjMsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjcsMjc1NjgsMjc1NjksMjc1NzAsMjc1NzQsMjc1NzYsMjc1NzcsMjc1NzgsMjc1NzksMjc1ODAsMjc1ODEsMjc1ODIsMjc1ODQsMjc1ODcsMjc1ODgsMjc1OTAsMjc1OTEsMjc1OTIsMjc1OTMsMjc1OTQsMjc1OTYsMjc1OTgs''@;'; put 'put ''Mjc2MDAsMjc2MDEsMjc2MDgsMjc2MTAsMjc2MTIsMjc2MTMsMjc2MTQsMjc2MTUsMjc2MTYsMjc2MTgsMjc2MTksMjc2MjAsMjc2MjEsMjc2MjIsMjc2MjMsMjc2MjQsMjc2MjUsMjc2MjgsMjc2MjksMjc2MzAsMjc2MzIsMjc2MzMsMjc2MzQsMjc2MzYsMjc2MzgsMjc2MzksMjc2NDAsMjc2''@;'; put 'put ''NDIsMjc2NDMsMjc2NDQsMjc2NDYsMjc2NDcsMjc2NDgsMjc2NDksMjc2NTAsMjc2NTEsMjc2NTIsMjc2NTYsMjc2NTcsMjc2NTgsMjc2NTksMjc2NjAsMjc2NjIsMjc2NjYsMjc2NzEsMjc2NzYsMjc2NzcsMjc2NzgsMjc2ODAsMjc2ODMsMjc2ODUsMjc2OTEsMjc2OTIsMjc2OTMsMjc2OTcs''@;'; put 'put ''Mjc2OTksMjc3MDIsMjc3MDMsMjc3MDUsMjc3MDYsMjc3MDcsMjc3MDgsMjc3MTAsMjc3MTEsMjc3MTUsMjc3MTYsMjc3MTcsMjc3MjAsMjc3MjMsMjc3MjQsMjc3MjUsMjc3MjYsMjc3MjcsMjc3MjksMjc3MzAsMjc3MzEsMjc3MzQsMjc3MzYsMjc3MzcsMjc3MzgsMjc3NDYsMjc3NDcsMjc3''@;'; put 'put ''NDksMjc3NTAsMjc3NTEsMjc3NTUsMjc3NTYsMjc3NTcsMjc3NTgsMjc3NTksMjc3NjEsMjc3NjMsMjc3NjUsMjc3NjcsMjc3NjgsMjc3NzAsMjc3NzEsMjc3NzIsMjc3NzUsMjc3NzYsMjc3ODAsMjc3ODMsMjc3ODYsMjc3ODcsMjc3ODksMjc3OTAsMjc3OTMsMjc3OTQsMjc3OTcsMjc3OTgs''@;'; put 'put ''Mjc3OTksMjc4MDAsMjc4MDIsMjc4MDQsMjc4MDUsMjc4MDYsMjc4MDgsMjc4MTAsMjc4MTYsMjc4MjAsMjc4MjMsMjc4MjQsMjc4MjgsMjc4MjksMjc4MzAsMjc4MzEsMjc4MzQsMjc4NDAsMjc4NDEsMjc4NDIsMjc4NDMsMjc4NDYsMjc4NDcsMjc4NDgsMjc4NTEsMjc4NTMsMjc4NTQsMjc4''@;'; put 'put ''NTUsMjc4NTcsMjc4NTgsMjc4NjQsMjc4NjUsMjc4NjYsMjc4NjgsMjc4NjksMjc4NzEsMjc4NzYsMjc4NzgsMjc4NzksMjc4ODEsMjc4ODQsMjc4ODUsMjc4OTAsMjc4OTIsMjc4OTcsMjc5MDMsMjc5MDQsMjc5MDYsMjc5MDcsMjc5MDksMjc5MTAsMjc5MTIsMjc5MTMsMjc5MTQsMjc5MTcs''@;'; put 'put ''Mjc5MTksMjc5MjAsMjc5MjEsMjc5MjMsMjc5MjQsMjc5MjUsMjc5MjYsMjc5MjgsMjc5MzIsMjc5MzMsMjc5MzUsMjc5MzYsMjc5MzcsMjc5MzgsMjc5MzksMjc5NDAsMjc5NDIsMjc5NDQsMjc5NDUsMjc5NDgsMjc5NDksMjc5NTEsMjc5NTIsMjc5NTYsMjc5NTgsMjc5NTksMjc5NjAsMjc5''@;'; put 'put ''NjIsMjc5NjcsMjc5NjgsMjc5NzAsMjc5NzIsMjc5NzcsMjc5ODAsMjc5ODQsMjc5ODksMjc5OTAsMjc5OTEsMjc5OTIsMjc5OTUsMjc5OTcsMjc5OTksMjgwMDEsMjgwMDIsMjgwMDQsMjgwMDUsMjgwMDcsMjgwMDgsMjgwMTEsMjgwMTIsMjgwMTMsMjgwMTYsMjgwMTcsMjgwMTgsMjgwMTks''@;'; put 'put ''MjgwMjEsMjgwMjIsMjgwMjUsMjgwMjYsMjgwMjcsMjgwMjksMjgwMzAsMjgwMzEsMjgwMzIsMjgwMzMsMjgwMzUsMjgwMzYsMjgwMzgsMjgwMzksMjgwNDIsMjgwNDMsMjgwNDUsMjgwNDcsMjgwNDgsMjgwNTAsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNTcsMjgwNTgsMjgwNjAsMjgwNjYsMjgw''@;'; put 'put ''NjksMjgwNzYsMjgwNzcsMjgwODAsMjgwODEsMjgwODMsMjgwODQsMjgwODYsMjgwODcsMjgwODksMjgwOTAsMjgwOTEsMjgwOTIsMjgwOTMsMjgwOTQsMjgwOTcsMjgwOTgsMjgwOTksMjgxMDQsMjgxMDUsMjgxMDYsMjgxMDksMjgxMTAsMjgxMTEsMjgxMTIsMjgxMTQsMjgxMTUsMjgxMTYs''@;'; put 'put ''MjgxMTcsMjgxMTksMjgxMjIsMjgxMjMsMjgxMjQsMjgxMjcsMjgxMzAsMjgxMzEsMjgxMzMsMjgxMzUsMjgxMzYsMjgxMzcsMjgxMzgsMjgxNDEsMjgxNDMsMjgxNDQsMjgxNDYsMjgxNDgsMjgxNDksMjgxNTAsMjgxNTIsMjgxNTQsMjgxNTcsMjgxNTgsMjgxNTksMjgxNjAsMjgxNjEsMjgx''@;'; put 'put ''NjIsMjgxNjMsMjgxNjQsMjgxNjYsMjgxNjcsMjgxNjgsMjgxNjksMjgxNzEsMjgxNzUsMjgxNzgsMjgxNzksMjgxODEsMjgxODQsMjgxODUsMjgxODcsMjgxODgsMjgxOTAsMjgxOTEsMjgxOTQsMjgxOTgsMjgxOTksMjgyMDAsMjgyMDIsMjgyMDQsMjgyMDYsMjgyMDgsMjgyMDksMjgyMTEs''@;'; put 'put ''MjgyMTMsMjgyMTQsMjgyMTUsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjEsMjgyMjIsMjgyMjMsMjgyMjQsMjgyMjUsMjgyMjYsMjgyMjksMjgyMzAsMjgyMzEsMjgyMzIsMjgyMzMsMjgyMzQsMjgyMzUsMjgyMzYsMjgyMzksMjgyNDAsMjgyNDEsMjgyNDIsMjgyNDUsMjgyNDcsMjgyNDksMjgy''@;'; put 'put ''NTAsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTYsMjgyNTcsMjgyNTgsMjgyNTksMjgyNjAsMjgyNjEsMjgyNjIsMjgyNjMsMjgyNjQsMjgyNjUsMjgyNjYsMjgyNjgsMjgyNjksMjgyNzEsMjgyNzIsMjgyNzMsMjgyNzQsMjgyNzUsMjgyNzYsMjgyNzcsMjgyNzgsMjgyNzksMjgyODAsMjgyODEs''@;'; put 'put ''MjgyODIsMjgyODMsMjgyODQsMjgyODUsMjgyODgsMjgyODksMjgyOTAsMjgyOTIsMjgyOTUsMjgyOTYsMjgyOTgsMjgyOTksMjgzMDAsMjgzMDEsMjgzMDIsMjgzMDUsMjgzMDYsMjgzMDcsMjgzMDgsMjgzMDksMjgzMTAsMjgzMTEsMjgzMTMsMjgzMTQsMjgzMTUsMjgzMTcsMjgzMTgsMjgz''@;'; put 'put ''MjAsMjgzMjEsMjgzMjMsMjgzMjQsMjgzMjYsMjgzMjgsMjgzMjksMjgzMzEsMjgzMzIsMjgzMzMsMjgzMzQsMjgzMzYsMjgzMzksMjgzNDEsMjgzNDQsMjgzNDUsMjgzNDgsMjgzNTAsMjgzNTEsMjgzNTIsMjgzNTUsMjgzNTYsMjgzNTcsMjgzNTgsMjgzNjAsMjgzNjEsMjgzNjIsMjgzNjQs''@;'; put 'put ''MjgzNjUsMjgzNjYsMjgzNjgsMjgzNzAsMjgzNzQsMjgzNzYsMjgzNzcsMjgzNzksMjgzODAsMjgzODEsMjgzODcsMjgzOTEsMjgzOTQsMjgzOTUsMjgzOTYsMjgzOTcsMjgzOTgsMjgzOTksMjg0MDAsMjg0MDEsMjg0MDIsMjg0MDMsMjg0MDUsMjg0MDYsMjg0MDcsMjg0MDgsMjg0MTAsMjg0''@;'; put 'put ''MTEsMjg0MTIsMjg0MTMsMjg0MTQsMjg0MTUsMjg0MTYsMjg0MTcsMjg0MTksMjg0MjAsMjg0MjEsMjg0MjMsMjg0MjQsMjg0MjYsMjg0MjcsMjg0MjgsMjg0MjksMjg0MzAsMjg0MzIsMjg0MzMsMjg0MzQsMjg0MzgsMjg0MzksMjg0NDAsMjg0NDEsMjg0NDIsMjg0NDMsMjg0NDQsMjg0NDUs''@;'; put 'put ''Mjg0NDYsMjg0NDcsMjg0NDksMjg0NTAsMjg0NTEsMjg0NTMsMjg0NTQsMjg0NTUsMjg0NTYsMjg0NjAsMjg0NjIsMjg0NjQsMjg0NjYsMjg0NjgsMjg0NjksMjg0NzEsMjg0NzIsMjg0NzMsMjg0NzQsMjg0NzUsMjg0NzYsMjg0NzcsMjg0NzksMjg0ODAsMjg0ODEsMjg0ODIsMjg0ODMsMjg0''@;'; put 'put ''ODQsMjg0ODUsMjg0ODgsMjg0ODksMjg0OTAsMjg0OTIsMjg0OTQsMjg0OTUsMjg0OTYsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDAsMjg1MDEsMjg1MDIsMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDcsMjg1MDksMjg1MTEsMjg1MTIsMjg1MTMsMjg1MTUsMjg1MTYsMjg1MTcsMjg1MTksMjg1MjAs''@;'; put 'put ''Mjg1MjEsMjg1MjIsMjg1MjMsMjg1MjQsMjg1MjcsMjg1MjgsMjg1MjksMjg1MzEsMjg1MzMsMjg1MzQsMjg1MzUsMjg1MzcsMjg1MzksMjg1NDEsMjg1NDIsMjg1NDMsMjg1NDQsMjg1NDUsMjg1NDYsMjg1NDcsMjg1NDksMjg1NTAsMjg1NTEsMjg1NTQsMjg1NTUsMjg1NTksMjg1NjAsMjg1''@;'; put 'put ''NjEsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjUsMjg1NjYsMjg1NjcsMjg1NjgsMjg1NjksMjg1NzAsMjg1NzEsMjg1NzMsMjg1NzQsMjg1NzUsMjg1NzYsMjg1NzgsMjg1NzksMjg1ODAsMjg1ODEsMjg1ODIsMjg1ODQsMjg1ODUsMjg1ODYsMjg1ODcsMjg1ODgsMjg1ODksMjg1OTAsMjg1OTEs''@;'; put 'put ''Mjg1OTIsMjg1OTMsMjg1OTQsMjg1OTYsMjg1OTcsMjg1OTksMjg2MDAsMjg2MDIsMjg2MDMsMjg2MDQsMjg2MDUsMjg2MDYsMjg2MDcsMjg2MDksMjg2MTEsMjg2MTIsMjg2MTMsMjg2MTQsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MTksMjg2MjAsMjg2MjEsMjg2MjIsMjg2MjMsMjg2MjQsMjg2''@;'; put 'put ''MjcsMjg2MjgsMjg2MjksMjg2MzAsMjg2MzEsMjg2MzIsMjg2MzMsMjg2MzQsMjg2MzUsMjg2MzYsMjg2MzcsMjg2MzksMjg2NDIsMjg2NDMsMjg2NDQsMjg2NDUsMjg2NDYsMjg2NDcsMjg2NDgsMjg2NDksMjg2NTAsMjg2NTEsMjg2NTIsMjg2NTMsMjg2NTYsMjg2NTcsMjg2NTgsMjg2NTks''@;'; put 'put ''Mjg2NjAsMjg2NjEsMjg2NjIsMjg2NjMsMjg2NjQsMjg2NjUsMjg2NjYsMjg2NjcsMjg2NjgsMjg2NjksMjg2NzAsMjg2NzEsMjg2NzIsMjg2NzMsMjg2NzQsMjg2NzUsMjg2NzYsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODAsMjg2ODEsMjg2ODIsMjg2ODMsMjg2ODQsMjg2ODUsMjg2ODYsMjg2''@;'; put 'put ''ODcsMjg2ODgsMjg2OTAsMjg2OTEsMjg2OTIsMjg2OTMsMjg2OTQsMjg2OTUsMjg2OTYsMjg2OTcsMjg3MDAsMjg3MDEsMjg3MDIsMjg3MDMsMjg3MDQsMjg3MDUsMjg3MDYsMjg3MDgsMjg3MDksMjg3MTAsMjg3MTEsMjg3MTIsMjg3MTMsMjg3MTQsMjg3MTUsMjg3MTYsMjg3MTcsMjg3MTgs''@;'; put 'put ''Mjg3MTksMjg3MjAsMjg3MjEsMjg3MjIsMjg3MjMsMjg3MjQsMjg3MjYsMjg3MjcsMjg3MjgsMjg3MzAsMjg3MzEsMjg3MzIsMjg3MzMsMjg3MzQsMjg3MzUsMjg3MzYsMjg3MzcsMjg3MzgsMjg3MzksMjg3NDAsMjg3NDEsMjg3NDIsMjg3NDMsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3''@;'; put 'put ''NDksMjg3NTAsMjg3NTIsMjg3NTMsMjg3NTQsMjg3NTUsMjg3NTYsMjg3NTcsMjg3NTgsMjg3NTksMjg3NjAsMjg3NjEsMjg3NjIsMjg3NjMsMjg3NjQsMjg3NjUsMjg3NjcsMjg3NjgsMjg3NjksMjg3NzAsMjg3NzEsMjg3NzIsMjg3NzMsMjg3NzQsMjg3NzUsMjg3NzYsMjg3NzcsMjg3Nzgs''@;'; put 'put ''Mjg3ODIsMjg3ODUsMjg3ODYsMjg3ODcsMjg3ODgsMjg3OTEsMjg3OTMsMjg3OTQsMjg3OTUsMjg3OTcsMjg4MDEsMjg4MDIsMjg4MDMsMjg4MDQsMjg4MDYsMjg4MDcsMjg4MDgsMjg4MTEsMjg4MTIsMjg4MTMsMjg4MTUsMjg4MTYsMjg4MTcsMjg4MTksMjg4MjMsMjg4MjQsMjg4MjYsMjg4''@;'; put 'put ''MjcsMjg4MzAsMjg4MzEsMjg4MzIsMjg4MzMsMjg4MzQsMjg4MzUsMjg4MzYsMjg4MzcsMjg4MzgsMjg4MzksMjg4NDAsMjg4NDEsMjg4NDIsMjg4NDgsMjg4NTAsMjg4NTIsMjg4NTMsMjg4NTQsMjg4NTgsMjg4NjIsMjg4NjMsMjg4NjgsMjg4NjksMjg4NzAsMjg4NzEsMjg4NzMsMjg4NzUs''@;'; put 'put ''Mjg4NzYsMjg4NzcsMjg4NzgsMjg4NzksMjg4ODAsMjg4ODEsMjg4ODIsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODcsMjg4OTAsMjg4OTIsMjg4OTMsMjg4OTQsMjg4OTYsMjg4OTcsMjg4OTgsMjg4OTksMjg5MDEsMjg5MDYsMjg5MTAsMjg5MTIsMjg5MTMsMjg5MTQsMjg5MTUsMjg5''@;'; put 'put ''MTYsMjg5MTcsMjg5MTgsMjg5MjAsMjg5MjIsMjg5MjMsMjg5MjQsMjg5MjYsMjg5MjcsMjg5MjgsMjg5MjksMjg5MzAsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzYsMjg5MzksMjg5NDAsMjg5NDEsMjg5NDIsMjg5NDMsMjg5NDUsMjg5NDYsMjg5NDgsMjg5NTEsMjg5NTUs''@;'; put 'put ''Mjg5NTYsMjg5NTcsMjg5NTgsMjg5NTksMjg5NjAsMjg5NjEsMjg5NjIsMjg5NjMsMjg5NjQsMjg5NjUsMjg5NjcsMjg5NjgsMjg5NjksMjg5NzAsMjg5NzEsMjg5NzIsMjg5NzMsMjg5NzQsMjg5NzgsMjg5NzksMjg5ODAsMjg5ODEsMjg5ODMsMjg5ODQsMjg5ODUsMjg5ODYsMjg5ODcsMjg5''@;'; put 'put ''ODgsMjg5ODksMjg5OTAsMjg5OTEsMjg5OTIsMjg5OTMsMjg5OTQsMjg5OTUsMjg5OTYsMjg5OTgsMjg5OTksMjllMywyOTAwMSwyOTAwMywyOTAwNSwyOTAwNywyOTAwOCwyOTAwOSwyOTAxMCwyOTAxMSwyOTAxMiwyOTAxMywyOTAxNCwyOTAxNSwyOTAxNiwyOTAxNywyOTAxOCwyOTAxOSwy''@;'; put 'put ''OTAyMSwyOTAyMywyOTAyNCwyOTAyNSwyOTAyNiwyOTAyNywyOTAyOSwyOTAzMywyOTAzNCwyOTAzNSwyOTAzNiwyOTAzNywyOTAzOSwyOTA0MCwyOTA0MSwyOTA0NCwyOTA0NSwyOTA0NiwyOTA0NywyOTA0OSwyOTA1MSwyOTA1MiwyOTA1NCwyOTA1NSwyOTA1NiwyOTA1NywyOTA1OCwyOTA1''@;'; put 'put ''OSwyOTA2MSwyOTA2MiwyOTA2MywyOTA2NCwyOTA2NSwyOTA2NywyOTA2OCwyOTA2OSwyOTA3MCwyOTA3MiwyOTA3MywyOTA3NCwyOTA3NSwyOTA3NywyOTA3OCwyOTA3OSwyOTA4MiwyOTA4MywyOTA4NCwyOTA4NSwyOTA4NiwyOTA4OSwyOTA5MCwyOTA5MSwyOTA5MiwyOTA5MywyOTA5NCwy''@;'; put 'put ''OTA5NSwyOTA5NywyOTA5OCwyOTA5OSwyOTEwMSwyOTEwMiwyOTEwMywyOTEwNCwyOTEwNSwyOTEwNiwyOTEwOCwyOTExMCwyOTExMSwyOTExMiwyOTExNCwyOTExNSwyOTExNiwyOTExNywyOTExOCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyMiwyOTEyNCwyOTEyNSwyOTEyNiwyOTEyNywyOTEy''@;'; put 'put ''OCwyOTEyOSwyOTEzMCwyOTEzMSwyOTEzMiwyOTEzMywyOTEzNSwyOTEzNiwyOTEzNywyOTEzOCwyOTEzOSwyOTE0MiwyOTE0MywyOTE0NCwyOTE0NSwyOTE0NiwyOTE0NywyOTE0OCwyOTE0OSwyOTE1MCwyOTE1MSwyOTE1MywyOTE1NCwyOTE1NSwyOTE1NiwyOTE1OCwyOTE2MCwyOTE2MSwy''@;'; put 'put ''OTE2MiwyOTE2MywyOTE2NCwyOTE2NSwyOTE2NywyOTE2OCwyOTE2OSwyOTE3MCwyOTE3MSwyOTE3MiwyOTE3MywyOTE3NCwyOTE3NSwyOTE3NiwyOTE3OCwyOTE3OSwyOTE4MCwyOTE4MSwyOTE4MiwyOTE4MywyOTE4NCwyOTE4NSwyOTE4NiwyOTE4NywyOTE4OCwyOTE4OSwyOTE5MSwyOTE5''@;'; put 'put ''MiwyOTE5MywyOTE5NCwyOTE5NSwyOTE5NiwyOTE5NywyOTE5OCwyOTE5OSwyOTIwMCwyOTIwMSwyOTIwMiwyOTIwMywyOTIwNCwyOTIwNSwyOTIwNiwyOTIwNywyOTIwOCwyOTIwOSwyOTIxMCwyOTIxMSwyOTIxMiwyOTIxNCwyOTIxNSwyOTIxNiwyOTIxNywyOTIxOCwyOTIxOSwyOTIyMCwy''@;'; put 'put ''OTIyMSwyOTIyMiwyOTIyMywyOTIyNSwyOTIyNywyOTIyOSwyOTIzMCwyOTIzMSwyOTIzNCwyOTIzNSwyOTIzNiwyOTI0MiwyOTI0NCwyOTI0NiwyOTI0OCwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MiwyOTI1MywyOTI1NCwyOTI1NywyOTI1OCwyOTI1OSwyOTI2MiwyOTI2MywyOTI2NCwyOTI2''@;'; put 'put ''NSwyOTI2NywyOTI2OCwyOTI2OSwyOTI3MSwyOTI3MiwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4NCwyOTI4NSwyOTI4OCwyOTI5MCwyOTI5MSwyOTI5MiwyOTI5MywyOTI5NiwyOTI5NywyOTI5OSwyOTMwMCwyOTMwMiwyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMwOSwy''@;'; put 'put ''OTMxNCwyOTMxNSwyOTMxNywyOTMxOCwyOTMxOSwyOTMyMCwyOTMyMSwyOTMyNCwyOTMyNiwyOTMyOCwyOTMyOSwyOTMzMSwyOTMzMiwyOTMzMywyOTMzNCwyOTMzNSwyOTMzNiwyOTMzNywyOTMzOCwyOTMzOSwyOTM0MCwyOTM0MSwyOTM0MiwyOTM0NCwyOTM0NSwyOTM0NiwyOTM0NywyOTM0''@;'; put 'put ''OCwyOTM0OSwyOTM1MCwyOTM1MSwyOTM1MiwyOTM1MywyOTM1NCwyOTM1NSwyOTM1OCwyOTM2MSwyOTM2MiwyOTM2MywyOTM2NSwyOTM3MCwyOTM3MSwyOTM3MiwyOTM3MywyOTM3NCwyOTM3NSwyOTM3NiwyOTM4MSwyOTM4MiwyOTM4MywyOTM4NSwyOTM4NiwyOTM4NywyOTM4OCwyOTM5MSwy''@;'; put 'put ''OTM5MywyOTM5NSwyOTM5NiwyOTM5NywyOTM5OCwyOTQwMCwyOTQwMiwyOTQwMyw1ODU2Niw1ODU2Nyw1ODU2OCw1ODU2OSw1ODU3MCw1ODU3MSw1ODU3Miw1ODU3Myw1ODU3NCw1ODU3NSw1ODU3Niw1ODU3Nyw1ODU3OCw1ODU3OSw1ODU4MCw1ODU4MSw1ODU4Miw1ODU4Myw1ODU4NCw1ODU4''@;'; put 'put ''NSw1ODU4Niw1ODU4Nyw1ODU4OCw1ODU4OSw1ODU5MCw1ODU5MSw1ODU5Miw1ODU5Myw1ODU5NCw1ODU5NSw1ODU5Niw1ODU5Nyw1ODU5OCw1ODU5OSw1ODYwMCw1ODYwMSw1ODYwMiw1ODYwMyw1ODYwNCw1ODYwNSw1ODYwNiw1ODYwNyw1ODYwOCw1ODYwOSw1ODYxMCw1ODYxMSw1ODYxMiw1''@;'; put 'put ''ODYxMyw1ODYxNCw1ODYxNSw1ODYxNiw1ODYxNyw1ODYxOCw1ODYxOSw1ODYyMCw1ODYyMSw1ODYyMiw1ODYyMyw1ODYyNCw1ODYyNSw1ODYyNiw1ODYyNyw1ODYyOCw1ODYyOSw1ODYzMCw1ODYzMSw1ODYzMiw1ODYzMyw1ODYzNCw1ODYzNSw1ODYzNiw1ODYzNyw1ODYzOCw1ODYzOSw1ODY0''@;'; put 'put ''MCw1ODY0MSw1ODY0Miw1ODY0Myw1ODY0NCw1ODY0NSw1ODY0Niw1ODY0Nyw1ODY0OCw1ODY0OSw1ODY1MCw1ODY1MSw1ODY1Miw1ODY1Myw1ODY1NCw1ODY1NSw1ODY1Niw1ODY1Nyw1ODY1OCw1ODY1OSw1ODY2MCw1ODY2MSwxMjI4OCwxMjI4OSwxMjI5MCwxODMsNzEzLDcxMSwxNjgsMTIy''@;'; put 'put ''OTEsMTIyOTMsODIxMiw2NTM3NCw4MjE0LDgyMzAsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMxMCwxMjMxMSwxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4NzU4LDg3NDMsODc0NCw4NzIx''@;'; put 'put ''LDg3MTksODc0Niw4NzQ1LDg3MTIsODc1OSw4NzMwLDg4NjksODc0MSw4NzM2LDg5NzgsODg1Nyw4NzQ3LDg3NTAsODgwMSw4NzgwLDg3NzYsODc2NSw4NzMzLDg4MDAsODgxNCw4ODE1LDg4MDQsODgwNSw4NzM0LDg3NTcsODc1Niw5Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1Mjg0''@;'; put 'put ''LDE2NCw2NTUwNCw2NTUwNSw4MjQwLDE2Nyw4NDcwLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw4MjUxLDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsNTg2NjIsNTg2NjMsNTg2NjQsNTg2NjUsNTg2NjYsNTg2NjcsNTg2NjgsNTg2Njks''@;'; put 'put ''NTg2NzAsNTg2NzEsNTg2NzIsNTg2NzMsNTg2NzQsNTg2NzUsNTg2NzYsNTg2NzcsNTg2NzgsNTg2NzksNTg2ODAsNTg2ODEsNTg2ODIsNTg2ODMsNTg2ODQsNTg2ODUsNTg2ODYsNTg2ODcsNTg2ODgsNTg2ODksNTg2OTAsNTg2OTEsNTg2OTIsNTg2OTMsNTg2OTQsNTg2OTUsNTg2OTYsNTg2''@;'; put 'put ''OTcsNTg2OTgsNTg2OTksNTg3MDAsNTg3MDEsNTg3MDIsNTg3MDMsNTg3MDQsNTg3MDUsNTg3MDYsNTg3MDcsNTg3MDgsNTg3MDksNTg3MTAsNTg3MTEsNTg3MTIsNTg3MTMsNTg3MTQsNTg3MTUsNTg3MTYsNTg3MTcsNTg3MTgsNTg3MTksNTg3MjAsNTg3MjEsNTg3MjIsNTg3MjMsNTg3MjQs''@;'; put 'put ''NTg3MjUsNTg3MjYsNTg3MjcsNTg3MjgsNTg3MjksNTg3MzAsNTg3MzEsNTg3MzIsNTg3MzMsNTg3MzQsNTg3MzUsNTg3MzYsNTg3MzcsNTg3MzgsNTg3MzksNTg3NDAsNTg3NDEsNTg3NDIsNTg3NDMsNTg3NDQsNTg3NDUsNTg3NDYsNTg3NDcsNTg3NDgsNTg3NDksNTg3NTAsNTg3NTEsNTg3''@;'; put 'put ''NTIsNTg3NTMsNTg3NTQsNTg3NTUsNTg3NTYsNTg3NTcsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw1OTIzOCw1OTIzOSw1OTI0MCw1OTI0MSw1OTI0Miw1OTI0Myw5MzUyLDkzNTMsOTM1NCw5MzU1LDkzNTYsOTM1Nyw5MzU4LDkzNTksOTM2MCw5''@;'; put 'put ''MzYxLDkzNjIsOTM2Myw5MzY0LDkzNjUsOTM2Niw5MzY3LDkzNjgsOTM2OSw5MzcwLDkzNzEsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsOTM0Nyw5MzQ4LDkzNDksOTM1MCw5MzUxLDkzMTIsOTMxMyw5''@;'; put 'put ''MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsODM2NCw1OTI0NSwxMjgzMiwxMjgzMywxMjgzNCwxMjgzNSwxMjgzNiwxMjgzNywxMjgzOCwxMjgzOSwxMjg0MCwxMjg0MSw1OTI0Niw1OTI0Nyw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1''@;'; put 'put ''Miw4NTUzLDg1NTQsODU1NSw1OTI0OCw1OTI0OSw1ODc1OCw1ODc1OSw1ODc2MCw1ODc2MSw1ODc2Miw1ODc2Myw1ODc2NCw1ODc2NSw1ODc2Niw1ODc2Nyw1ODc2OCw1ODc2OSw1ODc3MCw1ODc3MSw1ODc3Miw1ODc3Myw1ODc3NCw1ODc3NSw1ODc3Niw1ODc3Nyw1ODc3OCw1ODc3OSw1ODc4''@;'; put 'put ''MCw1ODc4MSw1ODc4Miw1ODc4Myw1ODc4NCw1ODc4NSw1ODc4Niw1ODc4Nyw1ODc4OCw1ODc4OSw1ODc5MCw1ODc5MSw1ODc5Miw1ODc5Myw1ODc5NCw1ODc5NSw1ODc5Niw1ODc5Nyw1ODc5OCw1ODc5OSw1ODgwMCw1ODgwMSw1ODgwMiw1ODgwMyw1ODgwNCw1ODgwNSw1ODgwNiw1ODgwNyw1''@;'; put 'put ''ODgwOCw1ODgwOSw1ODgxMCw1ODgxMSw1ODgxMiw1ODgxMyw1ODgxNCw1ODgxNSw1ODgxNiw1ODgxNyw1ODgxOCw1ODgxOSw1ODgyMCw1ODgyMSw1ODgyMiw1ODgyMyw1ODgyNCw1ODgyNSw1ODgyNiw1ODgyNyw1ODgyOCw1ODgyOSw1ODgzMCw1ODgzMSw1ODgzMiw1ODgzMyw1ODgzNCw1ODgz''@;'; put 'put ''NSw1ODgzNiw1ODgzNyw1ODgzOCw1ODgzOSw1ODg0MCw1ODg0MSw1ODg0Miw1ODg0Myw1ODg0NCw1ODg0NSw1ODg0Niw1ODg0Nyw1ODg0OCw1ODg0OSw1ODg1MCw1ODg1MSw1ODg1MiwxMjI4OCw2NTI4MSw2NTI4Miw2NTI4Myw2NTUwOSw2NTI4NSw2NTI4Niw2NTI4Nyw2NTI4OCw2NTI4OSw2''@;'; put 'put ''NTI5MCw2NTI5MSw2NTI5Miw2NTI5Myw2NTI5NCw2NTI5NSw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSw2NTMwNiw2NTMwNyw2NTMwOCw2NTMwOSw2NTMxMCw2NTMxMSw2NTMxMiw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMx''@;'; put 'put ''Nyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTMzOSw2NTM0MCw2NTM0MSw2NTM0Miw2NTM0Myw2NTM0NCw2''@;'; put 'put ''NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw2NTM3MSw2NTM3''@;'; put 'put ''Miw2NTM3Myw2NTUwNyw1ODg1NCw1ODg1NSw1ODg1Niw1ODg1Nyw1ODg1OCw1ODg1OSw1ODg2MCw1ODg2MSw1ODg2Miw1ODg2Myw1ODg2NCw1ODg2NSw1ODg2Niw1ODg2Nyw1ODg2OCw1ODg2OSw1ODg3MCw1ODg3MSw1ODg3Miw1ODg3Myw1ODg3NCw1ODg3NSw1ODg3Niw1ODg3Nyw1ODg3OCw1''@;'; put 'put ''ODg3OSw1ODg4MCw1ODg4MSw1ODg4Miw1ODg4Myw1ODg4NCw1ODg4NSw1ODg4Niw1ODg4Nyw1ODg4OCw1ODg4OSw1ODg5MCw1ODg5MSw1ODg5Miw1ODg5Myw1ODg5NCw1ODg5NSw1ODg5Niw1ODg5Nyw1ODg5OCw1ODg5OSw1ODkwMCw1ODkwMSw1ODkwMiw1ODkwMyw1ODkwNCw1ODkwNSw1ODkw''@;'; put 'put ''Niw1ODkwNyw1ODkwOCw1ODkwOSw1ODkxMCw1ODkxMSw1ODkxMiw1ODkxMyw1ODkxNCw1ODkxNSw1ODkxNiw1ODkxNyw1ODkxOCw1ODkxOSw1ODkyMCw1ODkyMSw1ODkyMiw1ODkyMyw1ODkyNCw1ODkyNSw1ODkyNiw1ODkyNyw1ODkyOCw1ODkyOSw1ODkzMCw1ODkzMSw1ODkzMiw1ODkzMyw1''@;'; put 'put ''ODkzNCw1ODkzNSw1ODkzNiw1ODkzNyw1ODkzOCw1ODkzOSw1ODk0MCw1ODk0MSw1ODk0Miw1ODk0Myw1ODk0NCw1ODk0NSw1ODk0Niw1ODk0Nyw1ODk0OCw1ODk0OSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2''@;'; put 'put ''NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwx''@;'; put 'put ''MjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQx''@;'; put 'put ''OSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSw1OTI1MCw1OTI1MSw1OTI1Miw1OTI1Myw1OTI1NCw1OTI1NSw1OTI1Niw1OTI1Nyw1OTI1OCw1OTI1OSw1OTI2MCw1''@;'; put 'put ''ODk1MCw1ODk1MSw1ODk1Miw1ODk1Myw1ODk1NCw1ODk1NSw1ODk1Niw1ODk1Nyw1ODk1OCw1ODk1OSw1ODk2MCw1ODk2MSw1ODk2Miw1ODk2Myw1ODk2NCw1ODk2NSw1ODk2Niw1ODk2Nyw1ODk2OCw1ODk2OSw1ODk3MCw1ODk3MSw1ODk3Miw1ODk3Myw1ODk3NCw1ODk3NSw1ODk3Niw1ODk3''@;'; put 'put ''Nyw1ODk3OCw1ODk3OSw1ODk4MCw1ODk4MSw1ODk4Miw1ODk4Myw1ODk4NCw1ODk4NSw1ODk4Niw1ODk4Nyw1ODk4OCw1ODk4OSw1ODk5MCw1ODk5MSw1ODk5Miw1ODk5Myw1ODk5NCw1ODk5NSw1ODk5Niw1ODk5Nyw1ODk5OCw1ODk5OSw1OWUzLDU5MDAxLDU5MDAyLDU5MDAzLDU5MDA0LDU5''@;'; put 'put ''MDA1LDU5MDA2LDU5MDA3LDU5MDA4LDU5MDA5LDU5MDEwLDU5MDExLDU5MDEyLDU5MDEzLDU5MDE0LDU5MDE1LDU5MDE2LDU5MDE3LDU5MDE4LDU5MDE5LDU5MDIwLDU5MDIxLDU5MDIyLDU5MDIzLDU5MDI0LDU5MDI1LDU5MDI2LDU5MDI3LDU5MDI4LDU5MDI5LDU5MDMwLDU5MDMxLDU5MDMy''@;'; put 'put ''LDU5MDMzLDU5MDM0LDU5MDM1LDU5MDM2LDU5MDM3LDU5MDM4LDU5MDM5LDU5MDQwLDU5MDQxLDU5MDQyLDU5MDQzLDU5MDQ0LDU5MDQ1LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEy''@;'; put 'put ''NDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkw''@;'; put 'put ''LDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEy''@;'; put 'put ''NTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LDU5MjYxLDU5MjYyLDU5MjYzLDU5MjY0LDU5MjY1LDU5MjY2LDU5MjY3LDU5MjY4LDU5MDQ2LDU5MDQ3LDU5MDQ4''@;'; put 'put ''LDU5MDQ5LDU5MDUwLDU5MDUxLDU5MDUyLDU5MDUzLDU5MDU0LDU5MDU1LDU5MDU2LDU5MDU3LDU5MDU4LDU5MDU5LDU5MDYwLDU5MDYxLDU5MDYyLDU5MDYzLDU5MDY0LDU5MDY1LDU5MDY2LDU5MDY3LDU5MDY4LDU5MDY5LDU5MDcwLDU5MDcxLDU5MDcyLDU5MDczLDU5MDc0LDU5MDc1LDU5''@;'; put 'put ''MDc2LDU5MDc3LDU5MDc4LDU5MDc5LDU5MDgwLDU5MDgxLDU5MDgyLDU5MDgzLDU5MDg0LDU5MDg1LDU5MDg2LDU5MDg3LDU5MDg4LDU5MDg5LDU5MDkwLDU5MDkxLDU5MDkyLDU5MDkzLDU5MDk0LDU5MDk1LDU5MDk2LDU5MDk3LDU5MDk4LDU5MDk5LDU5MTAwLDU5MTAxLDU5MTAyLDU5MTAz''@;'; put 'put ''LDU5MTA0LDU5MTA1LDU5MTA2LDU5MTA3LDU5MTA4LDU5MTA5LDU5MTEwLDU5MTExLDU5MTEyLDU5MTEzLDU5MTE0LDU5MTE1LDU5MTE2LDU5MTE3LDU5MTE4LDU5MTE5LDU5MTIwLDU5MTIxLDU5MTIyLDU5MTIzLDU5MTI0LDU5MTI1LDU5MTI2LDU5MTI3LDU5MTI4LDU5MTI5LDU5MTMwLDU5''@;'; put 'put ''MTMxLDU5MTMyLDU5MTMzLDU5MTM0LDU5MTM1LDU5MTM2LDU5MTM3LDU5MTM4LDU5MTM5LDU5MTQwLDU5MTQxLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDU5MjY5''@;'; put 'put ''LDU5MjcwLDU5MjcxLDU5MjcyLDU5MjczLDU5Mjc0LDU5Mjc1LDU5Mjc2LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDU5Mjc3LDU5Mjc4LDU5Mjc5LDU5MjgwLDU5''@;'; put 'put ''MjgxLDU5MjgyLDU5MjgzLDY1MDc3LDY1MDc4LDY1MDgxLDY1MDgyLDY1MDg3LDY1MDg4LDY1MDg1LDY1MDg2LDY1MDg5LDY1MDkwLDY1MDkxLDY1MDkyLDU5Mjg0LDU5Mjg1LDY1MDgzLDY1MDg0LDY1MDc5LDY1MDgwLDY1MDczLDU5Mjg2LDY1MDc1LDY1MDc2LDU5Mjg3LDU5Mjg4LDU5Mjg5''@;'; put 'put ''LDU5MjkwLDU5MjkxLDU5MjkyLDU5MjkzLDU5Mjk0LDU5Mjk1LDU5MTQyLDU5MTQzLDU5MTQ0LDU5MTQ1LDU5MTQ2LDU5MTQ3LDU5MTQ4LDU5MTQ5LDU5MTUwLDU5MTUxLDU5MTUyLDU5MTUzLDU5MTU0LDU5MTU1LDU5MTU2LDU5MTU3LDU5MTU4LDU5MTU5LDU5MTYwLDU5MTYxLDU5MTYyLDU5''@;'; put 'put ''MTYzLDU5MTY0LDU5MTY1LDU5MTY2LDU5MTY3LDU5MTY4LDU5MTY5LDU5MTcwLDU5MTcxLDU5MTcyLDU5MTczLDU5MTc0LDU5MTc1LDU5MTc2LDU5MTc3LDU5MTc4LDU5MTc5LDU5MTgwLDU5MTgxLDU5MTgyLDU5MTgzLDU5MTg0LDU5MTg1LDU5MTg2LDU5MTg3LDU5MTg4LDU5MTg5LDU5MTkw''@;'; put 'put ''LDU5MTkxLDU5MTkyLDU5MTkzLDU5MTk0LDU5MTk1LDU5MTk2LDU5MTk3LDU5MTk4LDU5MTk5LDU5MjAwLDU5MjAxLDU5MjAyLDU5MjAzLDU5MjA0LDU5MjA1LDU5MjA2LDU5MjA3LDU5MjA4LDU5MjA5LDU5MjEwLDU5MjExLDU5MjEyLDU5MjEzLDU5MjE0LDU5MjE1LDU5MjE2LDU5MjE3LDU5''@;'; put 'put ''MjE4LDU5MjE5LDU5MjIwLDU5MjIxLDU5MjIyLDU5MjIzLDU5MjI0LDU5MjI1LDU5MjI2LDU5MjI3LDU5MjI4LDU5MjI5LDU5MjMwLDU5MjMxLDU5MjMyLDU5MjMzLDU5MjM0LDU5MjM1LDU5MjM2LDU5MjM3LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEw''@;'; put 'put ''NDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDU5Mjk2LDU5Mjk3LDU5Mjk4LDU5Mjk5LDU5MzAwLDU5MzAxLDU5MzAyLDU5MzAz''@;'; put 'put ''LDU5MzA0LDU5MzA1LDU5MzA2LDU5MzA3LDU5MzA4LDU5MzA5LDU5MzEwLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEw''@;'; put 'put ''OTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDU5MzExLDU5MzEyLDU5MzEzLDU5MzE0LDU5MzE1LDU5MzE2LDU5MzE3LDU5MzE4LDU5MzE5LDU5MzIwLDU5MzIxLDU5MzIyLDU5MzIzLDcxNCw3MTUsNzI5LDgyMTEsODIxMyw4MjI5LDgyNDUsODQ1Myw4NDU3LDg1''@;'; put 'put ''OTgsODU5OSw4NjAwLDg2MDEsODcyNSw4NzM1LDg3MzksODc4Niw4ODA2LDg4MDcsODg5NSw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1''@;'; put 'put ''NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTU4MSw5NTgyLDk1ODMsOTU4NCw5NTg1LDk1ODYsOTU4Nyw5NjAxLDk2MDIsOTYwMyw5NjA0LDk2MDUsOTYwNiw5NjA3LDk2MDgsOTYwOSw5NjEwLDk2MTEsOTYxMiw5NjEzLDk2MTQsOTYxNSw5NjE5LDk2MjAsOTYyMSw5NjYwLDk2''@;'; put 'put ''NjEsOTY5OCw5Njk5LDk3MDAsOTcwMSw5NzM3LDg4NTMsMTIzMDYsMTIzMTcsMTIzMTgsNTkzMjQsNTkzMjUsNTkzMjYsNTkzMjcsNTkzMjgsNTkzMjksNTkzMzAsNTkzMzEsNTkzMzIsNTkzMzMsNTkzMzQsMjU3LDIyNSw0NjIsMjI0LDI3NSwyMzMsMjgzLDIzMiwyOTksMjM3LDQ2NCwyMzYs''@;'; put 'put ''MzMzLDI0Myw0NjYsMjQyLDM2MywyNTAsNDY4LDI0OSw0NzAsNDcyLDQ3NCw0NzYsMjUyLDIzNCw1OTMsNzc0MywzMjQsMzI4LDUwNSw2MDksNTkzMzcsNTkzMzgsNTkzMzksNTkzNDAsMTI1NDksMTI1NTAsMTI1NTEsMTI1NTIsMTI1NTMsMTI1NTQsMTI1NTUsMTI1NTYsMTI1NTcsMTI1NTgs''@;'; put 'put ''MTI1NTksMTI1NjAsMTI1NjEsMTI1NjIsMTI1NjMsMTI1NjQsMTI1NjUsMTI1NjYsMTI1NjcsMTI1NjgsMTI1NjksMTI1NzAsMTI1NzEsMTI1NzIsMTI1NzMsMTI1NzQsMTI1NzUsMTI1NzYsMTI1NzcsMTI1NzgsMTI1NzksMTI1ODAsMTI1ODEsMTI1ODIsMTI1ODMsMTI1ODQsMTI1ODUsNTkz''@;'; put 'put ''NDEsNTkzNDIsNTkzNDMsNTkzNDQsNTkzNDUsNTkzNDYsNTkzNDcsNTkzNDgsNTkzNDksNTkzNTAsNTkzNTEsNTkzNTIsNTkzNTMsNTkzNTQsNTkzNTUsNTkzNTYsNTkzNTcsNTkzNTgsNTkzNTksNTkzNjAsNTkzNjEsMTIzMjEsMTIzMjIsMTIzMjMsMTIzMjQsMTIzMjUsMTIzMjYsMTIzMjcs''@;'; put 'put ''MTIzMjgsMTIzMjksMTI5NjMsMTMxOTgsMTMxOTksMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTcsMTMyNTIsMTMyNjIsMTMyNjUsMTMyNjYsMTMyNjksNjUwNzIsNjU1MDYsNjU1MDgsNTkzNjIsODQ4MSwxMjg0OSw1OTM2Myw4MjA4LDU5MzY0LDU5MzY1LDU5MzY2LDEyNTQwLDEyNDQzLDEyNDQ0''@;'; put 'put ''LDEyNTQxLDEyNTQyLDEyMjk0LDEyNDQ1LDEyNDQ2LDY1MDk3LDY1MDk4LDY1MDk5LDY1MTAwLDY1MTAxLDY1MTAyLDY1MTAzLDY1MTA0LDY1MTA1LDY1MTA2LDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDY1MTE5LDY1MTIwLDY1''@;'; put 'put ''MTIxLDY1MTIyLDY1MTIzLDY1MTI0LDY1MTI1LDY1MTI2LDY1MTI4LDY1MTI5LDY1MTMwLDY1MTMxLDEyMzUwLDEyMjcyLDEyMjczLDEyMjc0LDEyMjc1LDEyMjc2LDEyMjc3LDEyMjc4LDEyMjc5LDEyMjgwLDEyMjgxLDEyMjgyLDEyMjgzLDEyMjk1LDU5MzgwLDU5MzgxLDU5MzgyLDU5Mzgz''@;'; put 'put ''LDU5Mzg0LDU5Mzg1LDU5Mzg2LDU5Mzg3LDU5Mzg4LDU5Mzg5LDU5MzkwLDU5MzkxLDU5MzkyLDk0NzIsOTQ3Myw5NDc0LDk0NzUsOTQ3Niw5NDc3LDk0NzgsOTQ3OSw5NDgwLDk0ODEsOTQ4Miw5NDgzLDk0ODQsOTQ4NSw5NDg2LDk0ODcsOTQ4OCw5NDg5LDk0OTAsOTQ5MSw5NDkyLDk0OTMs''@;'; put 'put ''OTQ5NCw5NDk1LDk0OTYsOTQ5Nyw5NDk4LDk0OTksOTUwMCw5NTAxLDk1MDIsOTUwMyw5NTA0LDk1MDUsOTUwNiw5NTA3LDk1MDgsOTUwOSw5NTEwLDk1MTEsOTUxMiw5NTEzLDk1MTQsOTUxNSw5NTE2LDk1MTcsOTUxOCw5NTE5LDk1MjAsOTUyMSw5NTIyLDk1MjMsOTUyNCw5NTI1LDk1MjYs''@;'; put 'put ''OTUyNyw5NTI4LDk1MjksOTUzMCw5NTMxLDk1MzIsOTUzMyw5NTM0LDk1MzUsOTUzNiw5NTM3LDk1MzgsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LDk1NDcsNTkzOTMsNTkzOTQsNTkzOTUsNTkzOTYsNTkzOTcsNTkzOTgsNTkzOTksNTk0MDAsNTk0MDEsNTk0MDIs''@;'; put 'put ''NTk0MDMsNTk0MDQsNTk0MDUsNTk0MDYsNTk0MDcsMjk0MDQsMjk0MDUsMjk0MDcsMjk0MTAsMjk0MTEsMjk0MTIsMjk0MTMsMjk0MTQsMjk0MTUsMjk0MTgsMjk0MTksMjk0MjksMjk0MzAsMjk0MzMsMjk0MzcsMjk0MzgsMjk0MzksMjk0NDAsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDYsMjk0''@;'; put 'put ''NDcsMjk0NDgsMjk0NDksMjk0NTEsMjk0NTIsMjk0NTMsMjk0NTUsMjk0NTYsMjk0NTcsMjk0NTgsMjk0NjAsMjk0NjQsMjk0NjUsMjk0NjYsMjk0NzEsMjk0NzIsMjk0NzUsMjk0NzYsMjk0NzgsMjk0NzksMjk0ODAsMjk0ODUsMjk0ODcsMjk0ODgsMjk0OTAsMjk0OTEsMjk0OTMsMjk0OTQs''@;'; put 'put ''Mjk0OTgsMjk0OTksMjk1MDAsMjk1MDEsMjk1MDQsMjk1MDUsMjk1MDYsMjk1MDcsMjk1MDgsMjk1MDksMjk1MTAsMjk1MTEsMjk1MTIsMjk1MTMsMjk1MTQsMjk1MTUsMjk1MTYsMjk1MTgsMjk1MTksMjk1MjEsMjk1MjMsMjk1MjQsMjk1MjUsMjk1MjYsMjk1MjgsMjk1MjksMjk1MzAsMjk1''@;'; put 'put ''MzEsMjk1MzIsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzcsMjk1MzgsMjk1MzksMjk1NDAsMjk1NDEsMjk1NDIsMjk1NDMsMjk1NDQsMjk1NDUsMjk1NDYsMjk1NDcsMjk1NTAsMjk1NTIsMjk1NTMsNTczNDQsNTczNDUsNTczNDYsNTczNDcsNTczNDgsNTczNDksNTczNTAsNTczNTEsNTczNTIs''@;'; put 'put ''NTczNTMsNTczNTQsNTczNTUsNTczNTYsNTczNTcsNTczNTgsNTczNTksNTczNjAsNTczNjEsNTczNjIsNTczNjMsNTczNjQsNTczNjUsNTczNjYsNTczNjcsNTczNjgsNTczNjksNTczNzAsNTczNzEsNTczNzIsNTczNzMsNTczNzQsNTczNzUsNTczNzYsNTczNzcsNTczNzgsNTczNzksNTcz''@;'; put 'put ''ODAsNTczODEsNTczODIsNTczODMsNTczODQsNTczODUsNTczODYsNTczODcsNTczODgsNTczODksNTczOTAsNTczOTEsNTczOTIsNTczOTMsNTczOTQsNTczOTUsNTczOTYsNTczOTcsNTczOTgsNTczOTksNTc0MDAsNTc0MDEsNTc0MDIsNTc0MDMsNTc0MDQsNTc0MDUsNTc0MDYsNTc0MDcs''@;'; put 'put ''NTc0MDgsNTc0MDksNTc0MTAsNTc0MTEsNTc0MTIsNTc0MTMsNTc0MTQsNTc0MTUsNTc0MTYsNTc0MTcsNTc0MTgsNTc0MTksNTc0MjAsNTc0MjEsNTc0MjIsNTc0MjMsNTc0MjQsNTc0MjUsNTc0MjYsNTc0MjcsNTc0MjgsNTc0MjksNTc0MzAsNTc0MzEsNTc0MzIsNTc0MzMsNTc0MzQsNTc0''@;'; put 'put ''MzUsNTc0MzYsNTc0MzcsMjk1NTQsMjk1NTUsMjk1NTYsMjk1NTcsMjk1NTgsMjk1NTksMjk1NjAsMjk1NjEsMjk1NjIsMjk1NjMsMjk1NjQsMjk1NjUsMjk1NjcsMjk1NjgsMjk1NjksMjk1NzAsMjk1NzEsMjk1NzMsMjk1NzQsMjk1NzYsMjk1NzgsMjk1ODAsMjk1ODEsMjk1ODMsMjk1ODQs''@;'; put 'put ''Mjk1ODYsMjk1ODcsMjk1ODgsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTMsMjk1OTQsMjk1OTYsMjk1OTcsMjk1OTgsMjk2MDAsMjk2MDEsMjk2MDMsMjk2MDQsMjk2MDUsMjk2MDYsMjk2MDcsMjk2MDgsMjk2MTAsMjk2MTIsMjk2MTMsMjk2MTcsMjk2MjAsMjk2MjEsMjk2MjIsMjk2MjQsMjk2''@;'; put 'put ''MjUsMjk2MjgsMjk2MjksMjk2MzAsMjk2MzEsMjk2MzMsMjk2MzUsMjk2MzYsMjk2MzcsMjk2MzgsMjk2MzksMjk2NDMsMjk2NDQsMjk2NDYsMjk2NTAsMjk2NTEsMjk2NTIsMjk2NTMsMjk2NTQsMjk2NTUsMjk2NTYsMjk2NTgsMjk2NTksMjk2NjAsMjk2NjEsMjk2NjMsMjk2NjUsMjk2NjYs''@;'; put 'put ''Mjk2NjcsMjk2NjgsMjk2NzAsMjk2NzIsMjk2NzQsMjk2NzUsMjk2NzYsMjk2NzgsMjk2NzksMjk2ODAsMjk2ODEsMjk2ODMsMjk2ODQsMjk2ODUsMjk2ODYsMjk2ODcsNTc0MzgsNTc0MzksNTc0NDAsNTc0NDEsNTc0NDIsNTc0NDMsNTc0NDQsNTc0NDUsNTc0NDYsNTc0NDcsNTc0NDgsNTc0''@;'; put 'put ''NDksNTc0NTAsNTc0NTEsNTc0NTIsNTc0NTMsNTc0NTQsNTc0NTUsNTc0NTYsNTc0NTcsNTc0NTgsNTc0NTksNTc0NjAsNTc0NjEsNTc0NjIsNTc0NjMsNTc0NjQsNTc0NjUsNTc0NjYsNTc0NjcsNTc0NjgsNTc0NjksNTc0NzAsNTc0NzEsNTc0NzIsNTc0NzMsNTc0NzQsNTc0NzUsNTc0NzYs''@;'; put 'put ''NTc0NzcsNTc0NzgsNTc0NzksNTc0ODAsNTc0ODEsNTc0ODIsNTc0ODMsNTc0ODQsNTc0ODUsNTc0ODYsNTc0ODcsNTc0ODgsNTc0ODksNTc0OTAsNTc0OTEsNTc0OTIsNTc0OTMsNTc0OTQsNTc0OTUsNTc0OTYsNTc0OTcsNTc0OTgsNTc0OTksNTc1MDAsNTc1MDEsNTc1MDIsNTc1MDMsNTc1''@;'; put 'put ''MDQsNTc1MDUsNTc1MDYsNTc1MDcsNTc1MDgsNTc1MDksNTc1MTAsNTc1MTEsNTc1MTIsNTc1MTMsNTc1MTQsNTc1MTUsNTc1MTYsNTc1MTcsNTc1MTgsNTc1MTksNTc1MjAsNTc1MjEsNTc1MjIsNTc1MjMsNTc1MjQsNTc1MjUsNTc1MjYsNTc1MjcsNTc1MjgsNTc1MjksNTc1MzAsNTc1MzEs''@;'; put 'put ''Mjk2ODgsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTIsMjk2OTMsMjk2OTQsMjk2OTUsMjk2OTYsMjk2OTcsMjk2OTgsMjk3MDAsMjk3MDMsMjk3MDQsMjk3MDcsMjk3MDgsMjk3MDksMjk3MTAsMjk3MTMsMjk3MTQsMjk3MTUsMjk3MTYsMjk3MTcsMjk3MTgsMjk3MTksMjk3MjAsMjk3MjEsMjk3''@;'; put 'put ''MjQsMjk3MjUsMjk3MjYsMjk3MjcsMjk3MjgsMjk3MjksMjk3MzEsMjk3MzIsMjk3MzUsMjk3MzcsMjk3MzksMjk3NDEsMjk3NDMsMjk3NDUsMjk3NDYsMjk3NTEsMjk3NTIsMjk3NTMsMjk3NTQsMjk3NTUsMjk3NTcsMjk3NTgsMjk3NTksMjk3NjAsMjk3NjIsMjk3NjMsMjk3NjQsMjk3NjUs''@;'; put 'put ''Mjk3NjYsMjk3NjcsMjk3NjgsMjk3NjksMjk3NzAsMjk3NzEsMjk3NzIsMjk3NzMsMjk3NzQsMjk3NzUsMjk3NzYsMjk3NzcsMjk3NzgsMjk3NzksMjk3ODAsMjk3ODIsMjk3ODQsMjk3ODksMjk3OTIsMjk3OTMsMjk3OTQsMjk3OTUsMjk3OTYsMjk3OTcsMjk3OTgsMjk3OTksMjk4MDAsMjk4''@;'; put 'put ''MDEsMjk4MDIsMjk4MDMsMjk4MDQsMjk4MDYsMjk4MDcsMjk4MDksMjk4MTAsMjk4MTEsMjk4MTIsMjk4MTMsMjk4MTYsMjk4MTcsMjk4MTgsNTc1MzIsNTc1MzMsNTc1MzQsNTc1MzUsNTc1MzYsNTc1MzcsNTc1MzgsNTc1MzksNTc1NDAsNTc1NDEsNTc1NDIsNTc1NDMsNTc1NDQsNTc1NDUs''@;'; put 'put ''NTc1NDYsNTc1NDcsNTc1NDgsNTc1NDksNTc1NTAsNTc1NTEsNTc1NTIsNTc1NTMsNTc1NTQsNTc1NTUsNTc1NTYsNTc1NTcsNTc1NTgsNTc1NTksNTc1NjAsNTc1NjEsNTc1NjIsNTc1NjMsNTc1NjQsNTc1NjUsNTc1NjYsNTc1NjcsNTc1NjgsNTc1NjksNTc1NzAsNTc1NzEsNTc1NzIsNTc1''@;'; put 'put ''NzMsNTc1NzQsNTc1NzUsNTc1NzYsNTc1NzcsNTc1NzgsNTc1NzksNTc1ODAsNTc1ODEsNTc1ODIsNTc1ODMsNTc1ODQsNTc1ODUsNTc1ODYsNTc1ODcsNTc1ODgsNTc1ODksNTc1OTAsNTc1OTEsNTc1OTIsNTc1OTMsNTc1OTQsNTc1OTUsNTc1OTYsNTc1OTcsNTc1OTgsNTc1OTksNTc2MDAs''@;'; put 'put ''NTc2MDEsNTc2MDIsNTc2MDMsNTc2MDQsNTc2MDUsNTc2MDYsNTc2MDcsNTc2MDgsNTc2MDksNTc2MTAsNTc2MTEsNTc2MTIsNTc2MTMsNTc2MTQsNTc2MTUsNTc2MTYsNTc2MTcsNTc2MTgsNTc2MTksNTc2MjAsNTc2MjEsNTc2MjIsNTc2MjMsNTc2MjQsNTc2MjUsMjk4MTksMjk4MjAsMjk4''@;'; put 'put ''MjEsMjk4MjMsMjk4MjYsMjk4MjgsMjk4MjksMjk4MzAsMjk4MzIsMjk4MzMsMjk4MzQsMjk4MzYsMjk4MzcsMjk4MzksMjk4NDEsMjk4NDIsMjk4NDMsMjk4NDQsMjk4NDUsMjk4NDYsMjk4NDcsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTEsMjk4NTMsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTgs''@;'; put 'put ''Mjk4NTksMjk4NjAsMjk4NjEsMjk4NjIsMjk4NjYsMjk4NjcsMjk4NjgsMjk4NjksMjk4NzAsMjk4NzEsMjk4NzIsMjk4NzMsMjk4NzQsMjk4NzUsMjk4NzYsMjk4NzcsMjk4NzgsMjk4NzksMjk4ODAsMjk4ODEsMjk4ODMsMjk4ODQsMjk4ODUsMjk4ODYsMjk4ODcsMjk4ODgsMjk4ODksMjk4''@;'; put 'put ''OTAsMjk4OTEsMjk4OTIsMjk4OTMsMjk4OTQsMjk4OTUsMjk4OTYsMjk4OTcsMjk4OTgsMjk4OTksMjk5MDAsMjk5MDEsMjk5MDIsMjk5MDMsMjk5MDQsMjk5MDUsMjk5MDcsMjk5MDgsMjk5MDksMjk5MTAsMjk5MTEsMjk5MTIsMjk5MTMsMjk5MTQsMjk5MTUsMjk5MTcsMjk5MTksMjk5MjEs''@;'; put 'put ''Mjk5MjUsMjk5MjcsMjk5MjgsMjk5MjksMjk5MzAsMjk5MzEsMjk5MzIsMjk5MzMsMjk5MzYsMjk5MzcsMjk5MzgsNTc2MjYsNTc2MjcsNTc2MjgsNTc2MjksNTc2MzAsNTc2MzEsNTc2MzIsNTc2MzMsNTc2MzQsNTc2MzUsNTc2MzYsNTc2MzcsNTc2MzgsNTc2MzksNTc2NDAsNTc2NDEsNTc2''@;'; put 'put ''NDIsNTc2NDMsNTc2NDQsNTc2NDUsNTc2NDYsNTc2NDcsNTc2NDgsNTc2NDksNTc2NTAsNTc2NTEsNTc2NTIsNTc2NTMsNTc2NTQsNTc2NTUsNTc2NTYsNTc2NTcsNTc2NTgsNTc2NTksNTc2NjAsNTc2NjEsNTc2NjIsNTc2NjMsNTc2NjQsNTc2NjUsNTc2NjYsNTc2NjcsNTc2NjgsNTc2Njks''@;'; put 'put ''NTc2NzAsNTc2NzEsNTc2NzIsNTc2NzMsNTc2NzQsNTc2NzUsNTc2NzYsNTc2NzcsNTc2NzgsNTc2NzksNTc2ODAsNTc2ODEsNTc2ODIsNTc2ODMsNTc2ODQsNTc2ODUsNTc2ODYsNTc2ODcsNTc2ODgsNTc2ODksNTc2OTAsNTc2OTEsNTc2OTIsNTc2OTMsNTc2OTQsNTc2OTUsNTc2OTYsNTc2''@;'; put 'put ''OTcsNTc2OTgsNTc2OTksNTc3MDAsNTc3MDEsNTc3MDIsNTc3MDMsNTc3MDQsNTc3MDUsNTc3MDYsNTc3MDcsNTc3MDgsNTc3MDksNTc3MTAsNTc3MTEsNTc3MTIsNTc3MTMsNTc3MTQsNTc3MTUsNTc3MTYsNTc3MTcsNTc3MTgsNTc3MTksMjk5MzksMjk5NDEsMjk5NDQsMjk5NDUsMjk5NDYs''@;'; put 'put ''Mjk5NDcsMjk5NDgsMjk5NDksMjk5NTAsMjk5NTIsMjk5NTMsMjk5NTQsMjk5NTUsMjk5NTcsMjk5NTgsMjk5NTksMjk5NjAsMjk5NjEsMjk5NjIsMjk5NjMsMjk5NjQsMjk5NjYsMjk5NjgsMjk5NzAsMjk5NzIsMjk5NzMsMjk5NzQsMjk5NzUsMjk5NzksMjk5ODEsMjk5ODIsMjk5ODQsMjk5''@;'; put 'put ''ODUsMjk5ODYsMjk5ODcsMjk5ODgsMjk5OTAsMjk5OTEsMjk5OTQsMjk5OTgsMzAwMDQsMzAwMDYsMzAwMDksMzAwMTIsMzAwMTMsMzAwMTUsMzAwMTcsMzAwMTgsMzAwMTksMzAwMjAsMzAwMjIsMzAwMjMsMzAwMjUsMzAwMjYsMzAwMjksMzAwMzIsMzAwMzMsMzAwMzQsMzAwMzUsMzAwMzcs''@;'; put 'put ''MzAwMzgsMzAwMzksMzAwNDAsMzAwNDUsMzAwNDYsMzAwNDcsMzAwNDgsMzAwNDksMzAwNTAsMzAwNTEsMzAwNTIsMzAwNTUsMzAwNTYsMzAwNTcsMzAwNTksMzAwNjAsMzAwNjEsMzAwNjIsMzAwNjMsMzAwNjQsMzAwNjUsMzAwNjcsMzAwNjksMzAwNzAsMzAwNzEsMzAwNzQsMzAwNzUsMzAw''@;'; put 'put ''NzYsMzAwNzcsMzAwNzgsMzAwODAsMzAwODEsMzAwODIsMzAwODQsMzAwODUsMzAwODcsNTc3MjAsNTc3MjEsNTc3MjIsNTc3MjMsNTc3MjQsNTc3MjUsNTc3MjYsNTc3MjcsNTc3MjgsNTc3MjksNTc3MzAsNTc3MzEsNTc3MzIsNTc3MzMsNTc3MzQsNTc3MzUsNTc3MzYsNTc3MzcsNTc3Mzgs''@;'; put 'put ''NTc3MzksNTc3NDAsNTc3NDEsNTc3NDIsNTc3NDMsNTc3NDQsNTc3NDUsNTc3NDYsNTc3NDcsNTc3NDgsNTc3NDksNTc3NTAsNTc3NTEsNTc3NTIsNTc3NTMsNTc3NTQsNTc3NTUsNTc3NTYsNTc3NTcsNTc3NTgsNTc3NTksNTc3NjAsNTc3NjEsNTc3NjIsNTc3NjMsNTc3NjQsNTc3NjUsNTc3''@;'; put 'put ''NjYsNTc3NjcsNTc3NjgsNTc3NjksNTc3NzAsNTc3NzEsNTc3NzIsNTc3NzMsNTc3NzQsNTc3NzUsNTc3NzYsNTc3NzcsNTc3NzgsNTc3NzksNTc3ODAsNTc3ODEsNTc3ODIsNTc3ODMsNTc3ODQsNTc3ODUsNTc3ODYsNTc3ODcsNTc3ODgsNTc3ODksNTc3OTAsNTc3OTEsNTc3OTIsNTc3OTMs''@;'; put 'put ''NTc3OTQsNTc3OTUsNTc3OTYsNTc3OTcsNTc3OTgsNTc3OTksNTc4MDAsNTc4MDEsNTc4MDIsNTc4MDMsNTc4MDQsNTc4MDUsNTc4MDYsNTc4MDcsNTc4MDgsNTc4MDksNTc4MTAsNTc4MTEsNTc4MTIsNTc4MTMsMzAwODgsMzAwODksMzAwOTAsMzAwOTIsMzAwOTMsMzAwOTQsMzAwOTYsMzAw''@;'; put 'put ''OTksMzAxMDEsMzAxMDQsMzAxMDcsMzAxMDgsMzAxMTAsMzAxMTQsMzAxMTgsMzAxMTksMzAxMjAsMzAxMjEsMzAxMjIsMzAxMjUsMzAxMzQsMzAxMzUsMzAxMzgsMzAxMzksMzAxNDMsMzAxNDQsMzAxNDUsMzAxNTAsMzAxNTUsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjAsMzAxNjEsMzAxNjMs''@;'; put 'put ''MzAxNjcsMzAxNjksMzAxNzAsMzAxNzIsMzAxNzMsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODEsMzAxODUsMzAxODgsMzAxODksMzAxOTAsMzAxOTEsMzAxOTQsMzAxOTUsMzAxOTcsMzAxOTgsMzAxOTksMzAyMDAsMzAyMDIsMzAyMDMsMzAyMDUsMzAyMDYsMzAyMTAsMzAyMTIsMzAyMTQsMzAy''@;'; put 'put ''MTUsMzAyMTYsMzAyMTcsMzAyMTksMzAyMjEsMzAyMjIsMzAyMjMsMzAyMjUsMzAyMjYsMzAyMjcsMzAyMjgsMzAyMzAsMzAyMzQsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDEsMzAyNDMsMzAyNDcsMzAyNDgsMzAyNTIsMzAyNTQsMzAyNTUsMzAyNTcsMzAyNTgsMzAyNjIsMzAyNjMsMzAyNjUs''@;'; put 'put ''MzAyNjYsMzAyNjcsMzAyNjksMzAyNzMsMzAyNzQsMzAyNzYsNTc4MTQsNTc4MTUsNTc4MTYsNTc4MTcsNTc4MTgsNTc4MTksNTc4MjAsNTc4MjEsNTc4MjIsNTc4MjMsNTc4MjQsNTc4MjUsNTc4MjYsNTc4MjcsNTc4MjgsNTc4MjksNTc4MzAsNTc4MzEsNTc4MzIsNTc4MzMsNTc4MzQsNTc4''@;'; put 'put ''MzUsNTc4MzYsNTc4MzcsNTc4MzgsNTc4MzksNTc4NDAsNTc4NDEsNTc4NDIsNTc4NDMsNTc4NDQsNTc4NDUsNTc4NDYsNTc4NDcsNTc4NDgsNTc4NDksNTc4NTAsNTc4NTEsNTc4NTIsNTc4NTMsNTc4NTQsNTc4NTUsNTc4NTYsNTc4NTcsNTc4NTgsNTc4NTksNTc4NjAsNTc4NjEsNTc4NjIs''@;'; put 'put ''NTc4NjMsNTc4NjQsNTc4NjUsNTc4NjYsNTc4NjcsNTc4NjgsNTc4NjksNTc4NzAsNTc4NzEsNTc4NzIsNTc4NzMsNTc4NzQsNTc4NzUsNTc4NzYsNTc4NzcsNTc4NzgsNTc4NzksNTc4ODAsNTc4ODEsNTc4ODIsNTc4ODMsNTc4ODQsNTc4ODUsNTc4ODYsNTc4ODcsNTc4ODgsNTc4ODksNTc4''@;'; put 'put ''OTAsNTc4OTEsNTc4OTIsNTc4OTMsNTc4OTQsNTc4OTUsNTc4OTYsNTc4OTcsNTc4OTgsNTc4OTksNTc5MDAsNTc5MDEsNTc5MDIsNTc5MDMsNTc5MDQsNTc5MDUsNTc5MDYsNTc5MDcsMzAyNzcsMzAyNzgsMzAyNzksMzAyODAsMzAyODEsMzAyODIsMzAyODMsMzAyODYsMzAyODcsMzAyODgs''@;'; put 'put ''MzAyODksMzAyOTAsMzAyOTEsMzAyOTMsMzAyOTUsMzAyOTYsMzAyOTcsMzAyOTgsMzAyOTksMzAzMDEsMzAzMDMsMzAzMDQsMzAzMDUsMzAzMDYsMzAzMDgsMzAzMDksMzAzMTAsMzAzMTEsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTYsMzAzMTcsMzAzMTgsMzAzMjAsMzAzMjEsMzAzMjIsMzAz''@;'; put 'put ''MjMsMzAzMjQsMzAzMjUsMzAzMjYsMzAzMjcsMzAzMjksMzAzMzAsMzAzMzIsMzAzMzUsMzAzMzYsMzAzMzcsMzAzMzksMzAzNDEsMzAzNDUsMzAzNDYsMzAzNDgsMzAzNDksMzAzNTEsMzAzNTIsMzAzNTQsMzAzNTYsMzAzNTcsMzAzNTksMzAzNjAsMzAzNjIsMzAzNjMsMzAzNjQsMzAzNjUs''@;'; put 'put ''MzAzNjYsMzAzNjcsMzAzNjgsMzAzNjksMzAzNzAsMzAzNzEsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzcsMzAzNzgsMzAzNzksMzAzODAsMzAzODEsMzAzODMsMzAzODQsMzAzODcsMzAzODksMzAzOTAsMzAzOTEsMzAzOTIsMzAzOTMsMzAzOTQsMzAzOTUsMzAzOTYsMzAzOTcsMzAz''@;'; put 'put ''OTgsMzA0MDAsMzA0MDEsMzA0MDMsMjE4MzQsMzg0NjMsMjI0NjcsMjUzODQsMjE3MTAsMjE3NjksMjE2OTYsMzAzNTMsMzAyODQsMzQxMDgsMzA3MDIsMzM0MDYsMzA4NjEsMjkyMzMsMzg1NTIsMzg3OTcsMjc2ODgsMjM0MzMsMjA0NzQsMjUzNTMsMjYyNjMsMjM3MzYsMzMwMTgsMjY2OTYs''@;'; put 'put ''MzI5NDIsMjYxMTQsMzA0MTQsMjA5ODUsMjU5NDIsMjkxMDAsMzI3NTMsMzQ5NDgsMjA2NTgsMjI4ODUsMjUwMzQsMjg1OTUsMzM0NTMsMjU0MjAsMjUxNzAsMjE0ODUsMjE1NDMsMzE0OTQsMjA4NDMsMzAxMTYsMjQwNTIsMjUzMDAsMzYyOTksMzg3NzQsMjUyMjYsMzI3OTMsMjIzNjUsMzg3''@;'; put 'put ''MTIsMzI2MTAsMjkyNDAsMzAzMzMsMjY1NzUsMzAzMzQsMjU2NzAsMjAzMzYsMzYxMzMsMjUzMDgsMzEyNTUsMjYwMDEsMjk2NzcsMjU2NDQsMjUyMDMsMzMzMjQsMzkwNDEsMjY0OTUsMjkyNTYsMjUxOTgsMjUyOTIsMjAyNzYsMjk5MjMsMjEzMjIsMjExNTAsMzI0NTgsMzcwMzAsMjQxMTAs''@;'; put 'put ''MjY3NTgsMjcwMzYsMzMxNTIsMzI0NjUsMjY4MzQsMzA5MTcsMzQ0NDQsMzgyMjUsMjA2MjEsMzU4NzYsMzM1MDIsMzI5OTAsMjEyNTMsMzUwOTAsMjEwOTMsMzA0MDQsMzA0MDcsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTksMzA0MjEsMzA0MjUsMzA0MjYsMzA0MjgsMzA0MjksMzA0MzAsMzA0''@;'; put 'put ''MzIsMzA0MzMsMzA0MzQsMzA0MzUsMzA0MzYsMzA0MzgsMzA0MzksMzA0NDAsMzA0NDEsMzA0NDIsMzA0NDMsMzA0NDQsMzA0NDUsMzA0NDgsMzA0NTEsMzA0NTMsMzA0NTQsMzA0NTUsMzA0NTgsMzA0NTksMzA0NjEsMzA0NjMsMzA0NjQsMzA0NjYsMzA0NjcsMzA0NjksMzA0NzAsMzA0NzQs''@;'; put 'put ''MzA0NzYsMzA0NzgsMzA0NzksMzA0ODAsMzA0ODEsMzA0ODIsMzA0ODMsMzA0ODQsMzA0ODUsMzA0ODYsMzA0ODcsMzA0ODgsMzA0OTEsMzA0OTIsMzA0OTMsMzA0OTQsMzA0OTcsMzA0OTksMzA1MDAsMzA1MDEsMzA1MDMsMzA1MDYsMzA1MDcsMzA1MDgsMzA1MTAsMzA1MTIsMzA1MTMsMzA1''@;'; put 'put ''MTQsMzA1MTUsMzA1MTYsMzA1MjEsMzA1MjMsMzA1MjUsMzA1MjYsMzA1MjcsMzA1MzAsMzA1MzIsMzA1MzMsMzA1MzQsMzA1MzYsMzA1MzcsMzA1MzgsMzA1MzksMzA1NDAsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NDcsMzA1NDgsMzA1NDksMzA1NTAsMzA1NTEsMzA1NTIsMzA1NTMs''@;'; put 'put ''MzA1NTYsMzQxODAsMzg2NDksMjA0NDUsMjI1NjEsMzkyODEsMjM0NTMsMjUyNjUsMjUyNTMsMjYyOTIsMzU5NjEsNDAwNzcsMjkxOTAsMjY0NzksMzA4NjUsMjQ3NTQsMjEzMjksMjEyNzEsMzY3NDQsMzI5NzIsMzYxMjUsMzgwNDksMjA0OTMsMjkzODQsMjI3OTEsMjQ4MTEsMjg5NTMsMzQ5''@;'; put 'put ''ODcsMjI4NjgsMzM1MTksMjY0MTIsMzE1MjgsMjM4NDksMzI1MDMsMjk5OTcsMjc4OTMsMzY0NTQsMzY4NTYsMzY5MjQsNDA3NjMsMjc2MDQsMzcxNDUsMzE1MDgsMjQ0NDQsMzA4ODcsMzQwMDYsMzQxMDksMjc2MDUsMjc2MDksMjc2MDYsMjQwNjUsMjQxOTksMzAyMDEsMzgzODEsMjU5NDks''@;'; put 'put ''MjQzMzAsMjQ1MTcsMzY3NjcsMjI3MjEsMzMyMTgsMzY5OTEsMzg0OTEsMzg4MjksMzY3OTMsMzI1MzQsMzYxNDAsMjUxNTMsMjA0MTUsMjE0NjQsMjEzNDIsMzY3NzYsMzY3NzcsMzY3NzksMzY5NDEsMjY2MzEsMjQ0MjYsMzMxNzYsMzQ5MjAsNDAxNTAsMjQ5NzEsMjEwMzUsMzAyNTAsMjQ0''@;'; put 'put ''MjgsMjU5OTYsMjg2MjYsMjgzOTIsMjM0ODYsMjU2NzIsMjA4NTMsMjA5MTIsMjY1NjQsMTk5OTMsMzExNzcsMzkyOTIsMjg4NTEsMzA1NTcsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjQsMzA1NjcsMzA1NjksMzA1NzAsMzA1NzMsMzA1NzQsMzA1NzUsMzA1NzYsMzA1NzcsMzA1NzgsMzA1Nzks''@;'; put 'put ''MzA1ODAsMzA1ODEsMzA1ODIsMzA1ODMsMzA1ODQsMzA1ODYsMzA1ODcsMzA1ODgsMzA1OTMsMzA1OTQsMzA1OTUsMzA1OTgsMzA1OTksMzA2MDAsMzA2MDEsMzA2MDIsMzA2MDMsMzA2MDcsMzA2MDgsMzA2MTEsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTUsMzA2MTYsMzA2MTcsMzA2MTgsMzA2''@;'; put 'put ''MTksMzA2MjAsMzA2MjEsMzA2MjIsMzA2MjUsMzA2MjcsMzA2MjgsMzA2MzAsMzA2MzIsMzA2MzUsMzA2MzcsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDIsMzA2NDQsMzA2NDYsMzA2NDcsMzA2NDgsMzA2NDksMzA2NTAsMzA2NTIsMzA2NTQsMzA2NTYsMzA2NTcsMzA2NTgsMzA2NTksMzA2NjAs''@;'; put 'put ''MzA2NjEsMzA2NjIsMzA2NjMsMzA2NjQsMzA2NjUsMzA2NjYsMzA2NjcsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NzIsMzA2NzMsMzA2NzQsMzA2NzUsMzA2NzYsMzA2NzcsMzA2NzgsMzA2ODAsMzA2ODEsMzA2ODIsMzA2ODUsMzA2ODYsMzA2ODcsMzA2ODgsMzA2ODksMzA2OTIsMzAxNDksMjQx''@;'; put 'put ''ODIsMjk2MjcsMzM3NjAsMjU3NzMsMjUzMjAsMzgwNjksMjc4NzQsMjEzMzgsMjExODcsMjU2MTUsMzgwODIsMzE2MzYsMjAyNzEsMjQwOTEsMzMzMzQsMzMwNDYsMzMxNjIsMjgxOTYsMjc4NTAsMzk1MzksMjU0MjksMjEzNDAsMjE3NTQsMzQ5MTcsMjI0OTYsMTk5ODEsMjQwNjcsMjc0OTMs''@;'; put 'put ''MzE4MDcsMzcwOTYsMjQ1OTgsMjU4MzAsMjk0NjgsMzUwMDksMjY0NDgsMjUxNjUsMzYxMzAsMzA1NzIsMzYzOTMsMzczMTksMjQ0MjUsMzM3NTYsMzQwODEsMzkxODQsMjE0NDIsMzQ0NTMsMjc1MzEsMjQ4MTMsMjQ4MDgsMjg3OTksMzM0ODUsMzMzMjksMjAxNzksMjc4MTUsMzQyNTUsMjU4''@;'; put 'put ''MDUsMzE5NjEsMjcxMzMsMjYzNjEsMzM2MDksMjEzOTcsMzE1NzQsMjAzOTEsMjA4NzYsMjc5NzksMjM2MTgsMzY0NjEsMjU1NTQsMjE0NDksMzM1ODAsMzM1OTAsMjY1OTcsMzA5MDAsMjU2NjEsMjM1MTksMjM3MDAsMjQwNDYsMzU4MTUsMjUyODYsMjY2MTIsMzU5NjIsMjU2MDAsMjU1MzAs''@;'; put 'put ''MzQ2MzMsMzkzMDcsMzU4NjMsMzI1NDQsMzgxMzAsMjAxMzUsMzg0MTYsMzkwNzYsMjYxMjQsMjk0NjIsMzA2OTQsMzA2OTYsMzA2OTgsMzA3MDMsMzA3MDQsMzA3MDUsMzA3MDYsMzA3MDgsMzA3MDksMzA3MTEsMzA3MTMsMzA3MTQsMzA3MTUsMzA3MTYsMzA3MjMsMzA3MjQsMzA3MjUsMzA3''@;'; put 'put ''MjYsMzA3MjcsMzA3MjgsMzA3MzAsMzA3MzEsMzA3MzQsMzA3MzUsMzA3MzYsMzA3MzksMzA3NDEsMzA3NDUsMzA3NDcsMzA3NTAsMzA3NTIsMzA3NTMsMzA3NTQsMzA3NTYsMzA3NjAsMzA3NjIsMzA3NjMsMzA3NjYsMzA3NjcsMzA3NjksMzA3NzAsMzA3NzEsMzA3NzMsMzA3NzQsMzA3ODEs''@;'; put 'put ''MzA3ODMsMzA3ODUsMzA3ODYsMzA3ODcsMzA3ODgsMzA3OTAsMzA3OTIsMzA3OTMsMzA3OTQsMzA3OTUsMzA3OTcsMzA3OTksMzA4MDEsMzA4MDMsMzA4MDQsMzA4MDgsMzA4MDksMzA4MTAsMzA4MTEsMzA4MTIsMzA4MTQsMzA4MTUsMzA4MTYsMzA4MTcsMzA4MTgsMzA4MTksMzA4MjAsMzA4''@;'; put 'put ''MjEsMzA4MjIsMzA4MjMsMzA4MjQsMzA4MjUsMzA4MzEsMzA4MzIsMzA4MzMsMzA4MzQsMzA4MzUsMzA4MzYsMzA4MzcsMzA4MzgsMzA4NDAsMzA4NDEsMzA4NDIsMzA4NDMsMzA4NDUsMzA4NDYsMzA4NDcsMzA4NDgsMzA4NDksMzA4NTAsMzA4NTEsMjIzMzAsMjM1ODEsMjQxMjAsMzgyNzEs''@;'; put 'put ''MjA2MDcsMzI5MjgsMjEzNzgsMjU5NTAsMzAwMjEsMjE4MDksMjA1MTMsMzYyMjksMjUyMjAsMzgwNDYsMjYzOTcsMjIwNjYsMjg1MjYsMjQwMzQsMjE1NTcsMjg4MTgsMzY3MTAsMjUxOTksMjU3NjQsMjU1MDcsMjQ0NDMsMjg1NTIsMzcxMDgsMzMyNTEsMzY3ODQsMjM1NzYsMjYyMTYsMjQ1''@;'; put 'put ''NjEsMjc3ODUsMzg0NzIsMzYyMjUsMzQ5MjQsMjU3NDUsMzEyMTYsMjI0NzgsMjcyMjUsMjUxMDQsMjE1NzYsMjAwNTYsMzEyNDMsMjQ4MDksMjg1NDgsMzU4MDIsMjUyMTUsMzY4OTQsMzk1NjMsMzEyMDQsMjE1MDcsMzAxOTYsMjUzNDUsMjEyNzMsMjc3NDQsMzY4MzEsMjQzNDcsMzk1MzYs''@;'; put 'put ''MzI4MjcsNDA4MzEsMjAzNjAsMjM2MTAsMzYxOTYsMzI3MDksMjYwMjEsMjg4NjEsMjA4MDUsMjA5MTQsMzQ0MTEsMjM4MTUsMjM0NTYsMjUyNzcsMzcyMjgsMzAwNjgsMzYzNjQsMzEyNjQsMjQ4MzMsMzE2MDksMjAxNjcsMzI1MDQsMzA1OTcsMTk5ODUsMzMyNjEsMjEwMjEsMjA5ODYsMjcy''@;'; put 'put ''NDksMjE0MTYsMzY0ODcsMzgxNDgsMzg2MDcsMjgzNTMsMzg1MDAsMjY5NzAsMzA4NTIsMzA4NTMsMzA4NTQsMzA4NTYsMzA4NTgsMzA4NTksMzA4NjMsMzA4NjQsMzA4NjYsMzA4NjgsMzA4NjksMzA4NzAsMzA4NzMsMzA4NzcsMzA4NzgsMzA4ODAsMzA4ODIsMzA4ODQsMzA4ODYsMzA4ODgs''@;'; put 'put ''MzA4ODksMzA4OTAsMzA4OTEsMzA4OTIsMzA4OTMsMzA4OTQsMzA4OTUsMzA5MDEsMzA5MDIsMzA5MDMsMzA5MDQsMzA5MDYsMzA5MDcsMzA5MDgsMzA5MDksMzA5MTEsMzA5MTIsMzA5MTQsMzA5MTUsMzA5MTYsMzA5MTgsMzA5MTksMzA5MjAsMzA5MjQsMzA5MjUsMzA5MjYsMzA5MjcsMzA5''@;'; put 'put ''MjksMzA5MzAsMzA5MzEsMzA5MzQsMzA5MzUsMzA5MzYsMzA5MzgsMzA5MzksMzA5NDAsMzA5NDEsMzA5NDIsMzA5NDMsMzA5NDQsMzA5NDUsMzA5NDYsMzA5NDcsMzA5NDgsMzA5NDksMzA5NTAsMzA5NTEsMzA5NTMsMzA5NTQsMzA5NTUsMzA5NTcsMzA5NTgsMzA5NTksMzA5NjAsMzA5NjEs''@;'; put 'put ''MzA5NjMsMzA5NjUsMzA5NjYsMzA5NjgsMzA5NjksMzA5NzEsMzA5NzIsMzA5NzMsMzA5NzQsMzA5NzUsMzA5NzYsMzA5NzgsMzA5NzksMzA5ODAsMzA5ODIsMzA5ODMsMzA5ODQsMzA5ODUsMzA5ODYsMzA5ODcsMzA5ODgsMzA3ODQsMjA2NDgsMzA2NzksMjU2MTYsMzUzMDIsMjI3ODgsMjU1''@;'; put 'put ''NzEsMjQwMjksMzEzNTksMjY5NDEsMjAyNTYsMzMzMzcsMjE5MTIsMjAwMTgsMzAxMjYsMzEzODMsMjQxNjIsMjQyMDIsMzgzODMsMjEwMTksMjE1NjEsMjg4MTAsMjU0NjIsMzgxODAsMjI0MDIsMjYxNDksMjY5NDMsMzcyNTUsMjE3NjcsMjgxNDcsMzI0MzEsMzQ4NTAsMjUxMzksMzI0OTYs''@;'; put 'put ''MzAxMzMsMzM1NzYsMzA5MTMsMzg2MDQsMzY3NjYsMjQ5MDQsMjk5NDMsMzU3ODksMjc0OTIsMjEwNTAsMzYxNzYsMjc0MjUsMzI4NzQsMzM5MDUsMjIyNTcsMjEyNTQsMjAxNzQsMTk5OTUsMjA5NDUsMzE4OTUsMzcyNTksMzE3NTEsMjA0MTksMzY0NzksMzE3MTMsMzEzODgsMjU3MDMsMjM4''@;'; put 'put ''MjgsMjA2NTIsMzMwMzAsMzAyMDksMzE5MjksMjgxNDAsMzI3MzYsMjY0NDksMjMzODQsMjM1NDQsMzA5MjMsMjU3NzQsMjU2MTksMjU1MTQsMjUzODcsMzgxNjksMjU2NDUsMzY3OTgsMzE1NzIsMzAyNDksMjUxNzEsMjI4MjMsMjE1NzQsMjc1MTMsMjA2NDMsMjUxNDAsMjQxMDIsMjc1MjYs''@;'; put 'put ''MjAxOTUsMzYxNTEsMzQ5NTUsMjQ0NTMsMzY5MTAsMzA5ODksMzA5OTAsMzA5OTEsMzA5OTIsMzA5OTMsMzA5OTQsMzA5OTYsMzA5OTcsMzA5OTgsMzA5OTksMzFlMywzMTAwMSwzMTAwMiwzMTAwMywzMTAwNCwzMTAwNSwzMTAwNywzMTAwOCwzMTAwOSwzMTAxMCwzMTAxMSwzMTAxMywzMTAx''@;'; put 'put ''NCwzMTAxNSwzMTAxNiwzMTAxNywzMTAxOCwzMTAxOSwzMTAyMCwzMTAyMSwzMTAyMiwzMTAyMywzMTAyNCwzMTAyNSwzMTAyNiwzMTAyNywzMTAyOSwzMTAzMCwzMTAzMSwzMTAzMiwzMTAzMywzMTAzNywzMTAzOSwzMTA0MiwzMTA0MywzMTA0NCwzMTA0NSwzMTA0NywzMTA1MCwzMTA1MSwz''@;'; put 'put ''MTA1MiwzMTA1MywzMTA1NCwzMTA1NSwzMTA1NiwzMTA1NywzMTA1OCwzMTA2MCwzMTA2MSwzMTA2NCwzMTA2NSwzMTA3MywzMTA3NSwzMTA3NiwzMTA3OCwzMTA4MSwzMTA4MiwzMTA4MywzMTA4NCwzMTA4NiwzMTA4OCwzMTA4OSwzMTA5MCwzMTA5MSwzMTA5MiwzMTA5MywzMTA5NCwzMTA5''@;'; put 'put ''NywzMTA5OSwzMTEwMCwzMTEwMSwzMTEwMiwzMTEwMywzMTEwNiwzMTEwNywzMTExMCwzMTExMSwzMTExMiwzMTExMywzMTExNSwzMTExNiwzMTExNywzMTExOCwzMTEyMCwzMTEyMSwzMTEyMiwyNDYwOCwzMjgyOSwyNTI4NSwyMDAyNSwyMTMzMywzNzExMiwyNTUyOCwzMjk2NiwyNjA4Niwy''@;'; put 'put ''NzY5NCwyMDI5NCwyNDgxNCwyODEyOSwzNTgwNiwyNDM3NywzNDUwNywyNDQwMywyNTM3NywyMDgyNiwzMzYzMywyNjcyMywyMDk5MiwyNTQ0MywzNjQyNCwyMDQ5OCwyMzcwNywzMTA5NSwyMzU0OCwyMTA0MCwzMTI5MSwyNDc2NCwzNjk0NywzMDQyMywyNDUwMywyNDQ3MSwzMDM0MCwzNjQ2''@;'; put 'put ''MCwyODc4MywzMDMzMSwzMTU2MSwzMDYzNCwyMDk3OSwzNzAxMSwyMjU2NCwyMDMwMiwyODQwNCwzNjg0MiwyNTkzMiwzMTUxNSwyOTM4MCwyODA2OCwzMjczNSwyMzI2NSwyNTI2OSwyNDIxMywyMjMyMCwzMzkyMiwzMTUzMiwyNDA5MywyNDM1MSwzNjg4MiwzMjUzMiwzOTA3MiwyNTQ3NCwy''@;'; put 'put ''ODM1OSwzMDg3MiwyODg1NywyMDg1NiwzODc0NywyMjQ0MywzMDAwNSwyMDI5MSwzMDAwOCwyNDIxNSwyNDgwNiwyMjg4MCwyODA5NiwyNzU4MywzMDg1NywyMTUwMCwzODYxMywyMDkzOSwyMDk5MywyNTQ4MSwyMTUxNCwzODAzNSwzNTg0MywzNjMwMCwyOTI0MSwzMDg3OSwzNDY3OCwzNjg0''@;'; put 'put ''NSwzNTg1MywyMTQ3MiwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyNywzMTEyOCwzMTEyOSwzMTEzMSwzMTEzMiwzMTEzMywzMTEzNCwzMTEzNSwzMTEzNiwzMTEzNywzMTEzOCwzMTEzOSwzMTE0MCwzMTE0MSwzMTE0MiwzMTE0NCwzMTE0NSwzMTE0NiwzMTE0NywzMTE0OCwzMTE0OSwz''@;'; put 'put ''MTE1MCwzMTE1MSwzMTE1MiwzMTE1MywzMTE1NCwzMTE1NiwzMTE1NywzMTE1OCwzMTE1OSwzMTE2MCwzMTE2NCwzMTE2NywzMTE3MCwzMTE3MiwzMTE3MywzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MCwzMTE4MiwzMTE4MywzMTE4NCwzMTE4NywzMTE4OCwzMTE5MCwzMTE5MSwzMTE5MywzMTE5''@;'; put 'put ''NCwzMTE5NSwzMTE5NiwzMTE5NywzMTE5OCwzMTIwMCwzMTIwMSwzMTIwMiwzMTIwNSwzMTIwOCwzMTIxMCwzMTIxMiwzMTIxNCwzMTIxNywzMTIxOCwzMTIxOSwzMTIyMCwzMTIyMSwzMTIyMiwzMTIyMywzMTIyNSwzMTIyNiwzMTIyOCwzMTIzMCwzMTIzMSwzMTIzMywzMTIzNiwzMTIzNywz''@;'; put 'put ''MTIzOSwzMTI0MCwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0NywzMTI0OCwzMTI0OSwzMTI1MCwzMTI1MSwzMTI1MywzMTI1NCwzMTI1NiwzMTI1NywzMTI1OSwzMTI2MCwxOTk2OSwzMDQ0NywyMTQ4NiwzODAyNSwzOTAzMCw0MDcxOCwzODE4OSwyMzQ1MCwzNTc0NiwyMDAwMiwxOTk5NiwyMDkw''@;'; put 'put ''OCwzMzg5MSwyNTAyNiwyMTE2MCwyNjYzNSwyMDM3NSwyNDY4MywyMDkyMywyNzkzNCwyMDgyOCwyNTIzOCwyNjAwNywzODQ5NywzNTkxMCwzNjg4NywzMDE2OCwzNzExNywzMDU2MywyNzYwMiwyOTMyMiwyOTQyMCwzNTgzNSwyMjU4MSwzMDU4NSwzNjE3MiwyNjQ2MCwzODIwOCwzMjkyMiwy''@;'; put 'put ''NDIzMCwyODE5MywyMjkzMCwzMTQ3MSwzMDcwMSwzODIwMywyNzU3MywyNjAyOSwzMjUyNiwyMjUzNCwyMDgxNywzODQzMSwyMzU0NSwyMjY5NywyMTU0NCwzNjQ2NiwyNTk1OCwzOTAzOSwyMjI0NCwzODA0NSwzMDQ2MiwzNjkyOSwyNTQ3OSwyMTcwMiwyMjgxMCwyMjg0MiwyMjQyNywzNjUz''@;'; put 'put ''MCwyNjQyMSwzNjM0NiwzMzMzMywyMTA1NywyNDgxNiwyMjU0OSwzNDU1OCwyMzc4NCw0MDUxNywyMDQyMCwzOTA2OSwzNTc2OSwyMzA3NywyNDY5NCwyMTM4MCwyNTIxMiwzNjk0MywzNzEyMiwzOTI5NSwyNDY4MSwzMjc4MCwyMDc5OSwzMjgxOSwyMzU3MiwzOTI4NSwyNzk1MywyMDEwOCwz''@;'; put 'put ''MTI2MSwzMTI2MywzMTI2NSwzMTI2NiwzMTI2OCwzMTI2OSwzMTI3MCwzMTI3MSwzMTI3MiwzMTI3MywzMTI3NCwzMTI3NSwzMTI3NiwzMTI3NywzMTI3OCwzMTI3OSwzMTI4MCwzMTI4MSwzMTI4MiwzMTI4NCwzMTI4NSwzMTI4NiwzMTI4OCwzMTI5MCwzMTI5NCwzMTI5NiwzMTI5NywzMTI5''@;'; put 'put ''OCwzMTI5OSwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwNSwzMTMwNiwzMTMwNywzMTMwOCwzMTMwOSwzMTMxMCwzMTMxMSwzMTMxMiwzMTMxNCwzMTMxNSwzMTMxNiwzMTMxNywzMTMxOCwzMTMyMCwzMTMyMSwzMTMyMiwzMTMyMywzMTMyNCwzMTMyNSwzMTMyNiwzMTMyNywzMTMyOCwz''@;'; put 'put ''MTMyOSwzMTMzMCwzMTMzMSwzMTMzMiwzMTMzMywzMTMzNCwzMTMzNSwzMTMzNiwzMTMzNywzMTMzOCwzMTMzOSwzMTM0MCwzMTM0MSwzMTM0MiwzMTM0MywzMTM0NSwzMTM0NiwzMTM0NywzMTM0OSwzMTM1NSwzMTM1NiwzMTM1NywzMTM1OCwzMTM2MiwzMTM2NSwzMTM2NywzMTM2OSwzMTM3''@;'; put 'put ''MCwzMTM3MSwzMTM3MiwzMTM3NCwzMTM3NSwzMTM3NiwzMTM3OSwzMTM4MCwzMTM4NSwzMTM4NiwzMTM4NywzMTM5MCwzMTM5MywzMTM5NCwzNjE0NCwyMTQ1NywzMjYwMiwzMTU2NywyMDI0MCwyMDA0NywzODQwMCwyNzg2MSwyOTY0OCwzNDI4MSwyNDA3MCwzMDA1OCwzMjc2MywyNzE0Niwz''@;'; put 'put ''MDcxOCwzODAzNCwzMjMyMSwyMDk2MSwyODkwMiwyMTQ1MywzNjgyMCwzMzUzOSwzNjEzNywyOTM1OSwzOTI3NywyNzg2NywyMjM0NiwzMzQ1OSwyNjA0MSwzMjkzOCwyNTE1MSwzODQ1MCwyMjk1MiwyMDIyMywzNTc3NSwzMjQ0MiwyNTkxOCwzMzc3OCwzODc1MCwyMTg1NywzOTEzNCwzMjkz''@;'; put 'put ''MywyMTI5MCwzNTgzNywyMTUzNiwzMjk1NCwyNDIyMywyNzgzMiwzNjE1MywzMzQ1MiwzNzIxMCwyMTU0NSwyNzY3NSwyMDk5OCwzMjQzOSwyMjM2NywyODk1NCwyNzc3NCwzMTg4MSwyMjg1OSwyMDIyMSwyNDU3NSwyNDg2OCwzMTkxNCwyMDAxNiwyMzU1MywyNjUzOSwzNDU2MiwyMzc5Miwz''@;'; put 'put ''ODE1NSwzOTExOCwzMDEyNywyODkyNSwzNjg5OCwyMDkxMSwzMjU0MSwzNTc3MywyMjg1NywyMDk2NCwyMDMxNSwyMTU0MiwyMjgyNywyNTk3NSwzMjkzMiwyMzQxMywyNTIwNiwyNTI4MiwzNjc1MiwyNDEzMywyNzY3OSwzMTUyNiwyMDIzOSwyMDQ0MCwyNjM4MSwzMTM5NSwzMTM5NiwzMTM5''@;'; put 'put ''OSwzMTQwMSwzMTQwMiwzMTQwMywzMTQwNiwzMTQwNywzMTQwOCwzMTQwOSwzMTQxMCwzMTQxMiwzMTQxMywzMTQxNCwzMTQxNSwzMTQxNiwzMTQxNywzMTQxOCwzMTQxOSwzMTQyMCwzMTQyMSwzMTQyMiwzMTQyNCwzMTQyNSwzMTQyNiwzMTQyNywzMTQyOCwzMTQyOSwzMTQzMCwzMTQzMSwz''@;'; put 'put ''MTQzMiwzMTQzMywzMTQzNCwzMTQzNiwzMTQzNywzMTQzOCwzMTQzOSwzMTQ0MCwzMTQ0MSwzMTQ0MiwzMTQ0MywzMTQ0NCwzMTQ0NSwzMTQ0NywzMTQ0OCwzMTQ1MCwzMTQ1MSwzMTQ1MiwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MCwzMTQ2MywzMTQ2NCwzMTQ2NSwzMTQ2NiwzMTQ2NywzMTQ2''@;'; put 'put ''OCwzMTQ3MCwzMTQ3MiwzMTQ3MywzMTQ3NCwzMTQ3NSwzMTQ3NiwzMTQ3NywzMTQ3OCwzMTQ3OSwzMTQ4MCwzMTQ4MywzMTQ4NCwzMTQ4NiwzMTQ4OCwzMTQ4OSwzMTQ5MCwzMTQ5MywzMTQ5NSwzMTQ5NywzMTUwMCwzMTUwMSwzMTUwMiwzMTUwNCwzMTUwNiwzMTUwNywzMTUxMCwzMTUxMSwz''@;'; put 'put ''MTUxMiwzMTUxNCwzMTUxNiwzMTUxNywzMTUxOSwzMTUyMSwzMTUyMiwzMTUyMywzMTUyNywzMTUyOSwzMTUzMywyODAxNCwyODA3NCwzMTExOSwzNDk5MywyNDM0MywyOTk5NSwyNTI0MiwzNjc0MSwyMDQ2MywzNzM0MCwyNjAyMywzMzA3MSwzMzEwNSwyNDIyMCwzMzEwNCwzNjIxMiwyMTEw''@;'; put 'put ''MywzNTIwNiwzNjE3MSwyMjc5NywyMDYxMywyMDE4NCwzODQyOCwyOTIzOCwzMzE0NSwzNjEyNywyMzUwMCwzNTc0NywzODQ2OCwyMjkxOSwzMjUzOCwyMTY0OCwyMjEzNCwyMjAzMCwzNTgxMywyNTkxMywyNzAxMCwzODA0MSwzMDQyMiwyODI5NywyNDE3OCwyOTk3NiwyNjQzOCwyNjU3Nywz''@;'; put 'put ''MTQ4NywzMjkyNSwzNjIxNCwyNDg2MywzMTE3NCwyNTk1NCwzNjE5NSwyMDg3MiwyMTAxOCwzODA1MCwzMjU2OCwzMjkyMywzMjQzNCwyMzcwMywyODIwNywyNjQ2NCwzMTcwNSwzMDM0NywzOTY0MCwzMzE2NywzMjY2MCwzMTk1NywyNTYzMCwzODIyNCwzMTI5NSwyMTU3OCwyMTczMywyNzQ2''@;'; put 'put ''OCwyNTYwMSwyNTA5Niw0MDUwOSwzMzAxMSwzMDEwNSwyMTEwNiwzODc2MSwzMzg4MywyNjY4NCwzNDUzMiwzODQwMSwzODU0OCwzODEyNCwyMDAxMCwyMTUwOCwzMjQ3MywyNjY4MSwzNjMxOSwzMjc4OSwyNjM1NiwyNDIxOCwzMjY5NywzMTUzNSwzMTUzNiwzMTUzOCwzMTU0MCwzMTU0MSwz''@;'; put 'put ''MTU0MiwzMTU0MywzMTU0NSwzMTU0NywzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1NCwzMTU1NSwzMTU1NiwzMTU1OCwzMTU2MCwzMTU2MiwzMTU2NSwzMTU2NiwzMTU3MSwzMTU3MywzMTU3NSwzMTU3NywzMTU4MCwzMTU4MiwzMTU4MywzMTU4NSwzMTU4NywzMTU4OCwzMTU4OSwzMTU5''@;'; put 'put ''MCwzMTU5MSwzMTU5MiwzMTU5MywzMTU5NCwzMTU5NSwzMTU5NiwzMTU5NywzMTU5OSwzMTYwMCwzMTYwMywzMTYwNCwzMTYwNiwzMTYwOCwzMTYxMCwzMTYxMiwzMTYxMywzMTYxNSwzMTYxNywzMTYxOCwzMTYxOSwzMTYyMCwzMTYyMiwzMTYyMywzMTYyNCwzMTYyNSwzMTYyNiwzMTYyNywz''@;'; put 'put ''MTYyOCwzMTYzMCwzMTYzMSwzMTYzMywzMTYzNCwzMTYzNSwzMTYzOCwzMTY0MCwzMTY0MSwzMTY0MiwzMTY0MywzMTY0NiwzMTY0NywzMTY0OCwzMTY1MSwzMTY1MiwzMTY1MywzMTY2MiwzMTY2MywzMTY2NCwzMTY2NiwzMTY2NywzMTY2OSwzMTY3MCwzMTY3MSwzMTY3MywzMTY3NCwzMTY3''@;'; put 'put ''NSwzMTY3NiwzMTY3NywzMTY3OCwzMTY3OSwzMTY4MCwzMTY4MiwzMTY4MywzMTY4NCwyMjQ2NiwzMjgzMSwyNjc3NSwyNDAzNywyNTkxNSwyMTE1MSwyNDY4NSw0MDg1OCwyMDM3OSwzNjUyNCwyMDg0NCwyMzQ2NywyNDMzOSwyNDA0MSwyNzc0MiwyNTMyOSwzNjEyOSwyMDg0OSwzODA1Nywy''@;'; put 'put ''MTI0NiwyNzgwNywzMzUwMywyOTM5OSwyMjQzNCwyNjUwMCwzNjE0MSwyMjgxNSwzNjc2NCwzMzczNSwyMTY1MywzMTYyOSwyMDI3MiwyNzgzNywyMzM5NiwyMjk5Myw0MDcyMywyMTQ3NiwzNDUwNiwzOTU5MiwzNTg5NSwzMjkyOSwyNTkyNSwzOTAzOCwyMjI2NiwzODU5OSwyMTAzOCwyOTkx''@;'; put 'put ''NiwyMTA3MiwyMzUyMSwyNTM0NiwzNTA3NCwyMDA1NCwyNTI5NiwyNDYxOCwyNjg3NCwyMDg1MSwyMzQ0OCwyMDg5NiwzNTI2NiwzMTY0OSwzOTMwMiwzMjU5MiwyNDgxNSwyODc0OCwzNjE0MywyMDgwOSwyNDE5MSwzNjg5MSwyOTgwOCwzNTI2OCwyMjMxNywzMDc4OSwyNDQwMiw0MDg2Mywz''@;'; put 'put ''ODM5NCwzNjcxMiwzOTc0MCwzNTgwOSwzMDMyOCwyNjY5MCwyNjU4OCwzNjMzMCwzNjE0OSwyMTA1MywzNjc0NiwyODM3OCwyNjgyOSwzODE0OSwzNzEwMSwyMjI2OSwyNjUyNCwzNTA2NSwzNjgwNywyMTcwNCwzMTY4NSwzMTY4OCwzMTY4OSwzMTY5MCwzMTY5MSwzMTY5MywzMTY5NCwzMTY5''@;'; put 'put ''NSwzMTY5NiwzMTY5OCwzMTcwMCwzMTcwMSwzMTcwMiwzMTcwMywzMTcwNCwzMTcwNywzMTcwOCwzMTcxMCwzMTcxMSwzMTcxMiwzMTcxNCwzMTcxNSwzMTcxNiwzMTcxOSwzMTcyMCwzMTcyMSwzMTcyMywzMTcyNCwzMTcyNSwzMTcyNywzMTcyOCwzMTczMCwzMTczMSwzMTczMiwzMTczMywz''@;'; put 'put ''MTczNCwzMTczNiwzMTczNywzMTczOCwzMTczOSwzMTc0MSwzMTc0MywzMTc0NCwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc0OSwzMTc1MCwzMTc1MiwzMTc1MywzMTc1NCwzMTc1NywzMTc1OCwzMTc2MCwzMTc2MSwzMTc2MiwzMTc2MywzMTc2NCwzMTc2NSwzMTc2NywzMTc2OCwzMTc2''@;'; put 'put ''OSwzMTc3MCwzMTc3MSwzMTc3MiwzMTc3MywzMTc3NCwzMTc3NiwzMTc3NywzMTc3OCwzMTc3OSwzMTc4MCwzMTc4MSwzMTc4NCwzMTc4NSwzMTc4NywzMTc4OCwzMTc4OSwzMTc5MCwzMTc5MSwzMTc5MiwzMTc5MywzMTc5NCwzMTc5NSwzMTc5NiwzMTc5NywzMTc5OCwzMTc5OSwzMTgwMSwz''@;'; put 'put ''MTgwMiwzMTgwMywzMTgwNCwzMTgwNSwzMTgwNiwzMTgxMCwzOTYwOCwyMzQwMSwyODAyMywyNzY4NiwyMDEzMywyMzQ3NSwzOTU1OSwzNzIxOSwyNWUzLDM3MDM5LDM4ODg5LDIxNTQ3LDI4MDg1LDIzNTA2LDIwOTg5LDIxODk4LDMyNTk3LDMyNzUyLDI1Nzg4LDI1NDIxLDI2MDk3LDI1MDIy''@;'; put 'put ''LDI0NzE3LDI4OTM4LDI3NzM1LDI3NzIxLDIyODMxLDI2NDc3LDMzMzIyLDIyNzQxLDIyMTU4LDM1OTQ2LDI3NjI3LDM3MDg1LDIyOTA5LDMyNzkxLDIxNDk1LDI4MDA5LDIxNjIxLDIxOTE3LDMzNjU1LDMzNzQzLDI2NjgwLDMxMTY2LDIxNjQ0LDIwMzA5LDIxNTEyLDMwNDE4LDM1OTc3LDM4''@;'; put 'put ''NDAyLDI3ODI3LDI4MDg4LDM2MjAzLDM1MDg4LDQwNTQ4LDM2MTU0LDIyMDc5LDQwNjU3LDMwMTY1LDI0NDU2LDI5NDA4LDI0NjgwLDIxNzU2LDIwMTM2LDI3MTc4LDM0OTEzLDI0NjU4LDM2NzIwLDIxNzAwLDI4ODg4LDM0NDI1LDQwNTExLDI3OTQ2LDIzNDM5LDI0MzQ0LDMyNDE4LDIxODk3''@;'; put 'put ''LDIwMzk5LDI5NDkyLDIxNTY0LDIxNDAyLDIwNTA1LDIxNTE4LDIxNjI4LDIwMDQ2LDI0NTczLDI5Nzg2LDIyNzc0LDMzODk5LDMyOTkzLDM0Njc2LDI5MzkyLDMxOTQ2LDI4MjQ2LDMxODExLDMxODEyLDMxODEzLDMxODE0LDMxODE1LDMxODE2LDMxODE3LDMxODE4LDMxODE5LDMxODIwLDMx''@;'; put 'put ''ODIyLDMxODIzLDMxODI0LDMxODI1LDMxODI2LDMxODI3LDMxODI4LDMxODI5LDMxODMwLDMxODMxLDMxODMyLDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODM5LDMxODQwLDMxODQxLDMxODQyLDMxODQzLDMxODQ0LDMxODQ1LDMxODQ2LDMxODQ3LDMxODQ4LDMxODQ5''@;'; put 'put ''LDMxODUwLDMxODUxLDMxODUyLDMxODUzLDMxODU0LDMxODU1LDMxODU2LDMxODU3LDMxODU4LDMxODYxLDMxODYyLDMxODYzLDMxODY0LDMxODY1LDMxODY2LDMxODcwLDMxODcxLDMxODcyLDMxODczLDMxODc0LDMxODc1LDMxODc2LDMxODc3LDMxODc4LDMxODc5LDMxODgwLDMxODgyLDMx''@;'; put 'put ''ODgzLDMxODg0LDMxODg1LDMxODg2LDMxODg3LDMxODg4LDMxODkxLDMxODkyLDMxODk0LDMxODk3LDMxODk4LDMxODk5LDMxOTA0LDMxOTA1LDMxOTA3LDMxOTEwLDMxOTExLDMxOTEyLDMxOTEzLDMxOTE1LDMxOTE2LDMxOTE3LDMxOTE5LDMxOTIwLDMxOTI0LDMxOTI1LDMxOTI2LDMxOTI3''@;'; put 'put ''LDMxOTI4LDMxOTMwLDMxOTMxLDI0MzU5LDM0MzgyLDIxODA0LDI1MjUyLDIwMTE0LDI3ODE4LDI1MTQzLDMzNDU3LDIxNzE5LDIxMzI2LDI5NTAyLDI4MzY5LDMwMDExLDIxMDEwLDIxMjcwLDM1ODA1LDI3MDg4LDI0NDU4LDI0NTc2LDI4MTQyLDIyMzUxLDI3NDI2LDI5NjE1LDI2NzA3LDM2''@;'; put 'put ''ODI0LDMyNTMxLDI1NDQyLDI0NzM5LDIxNzk2LDMwMTg2LDM1OTM4LDI4OTQ5LDI4MDY3LDIzNDYyLDI0MTg3LDMzNjE4LDI0OTA4LDQwNjQ0LDMwOTcwLDM0NjQ3LDMxNzgzLDMwMzQzLDIwOTc2LDI0ODIyLDI5MDA0LDI2MTc5LDI0MTQwLDI0NjUzLDM1ODU0LDI4Nzg0LDI1MzgxLDM2NzQ1''@;'; put 'put ''LDI0NTA5LDI0Njc0LDM0NTE2LDIyMjM4LDI3NTg1LDI0NzI0LDI0OTM1LDIxMzIxLDI0ODAwLDI2MjE0LDM2MTU5LDMxMjI5LDIwMjUwLDI4OTA1LDI3NzE5LDM1NzYzLDM1ODI2LDMyNDcyLDMzNjM2LDI2MTI3LDIzMTMwLDM5NzQ2LDI3OTg1LDI4MTUxLDM1OTA1LDI3OTYzLDIwMjQ5LDI4''@;'; put 'put ''Nzc5LDMzNzE5LDI1MTEwLDI0Nzg1LDM4NjY5LDM2MTM1LDMxMDk2LDIwOTg3LDIyMzM0LDIyNTIyLDI2NDI2LDMwMDcyLDMxMjkzLDMxMjE1LDMxNjM3LDMxOTM1LDMxOTM2LDMxOTM4LDMxOTM5LDMxOTQwLDMxOTQyLDMxOTQ1LDMxOTQ3LDMxOTUwLDMxOTUxLDMxOTUyLDMxOTUzLDMxOTU0''@;'; put 'put ''LDMxOTU1LDMxOTU2LDMxOTYwLDMxOTYyLDMxOTYzLDMxOTY1LDMxOTY2LDMxOTY5LDMxOTcwLDMxOTcxLDMxOTcyLDMxOTczLDMxOTc0LDMxOTc1LDMxOTc3LDMxOTc4LDMxOTc5LDMxOTgwLDMxOTgxLDMxOTgyLDMxOTg0LDMxOTg1LDMxOTg2LDMxOTg3LDMxOTg4LDMxOTg5LDMxOTkwLDMx''@;'; put 'put ''OTkxLDMxOTkzLDMxOTk0LDMxOTk2LDMxOTk3LDMxOTk4LDMxOTk5LDMyZTMsMzIwMDEsMzIwMDIsMzIwMDMsMzIwMDQsMzIwMDUsMzIwMDYsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTEsMzIwMTIsMzIwMTMsMzIwMTQsMzIwMTUsMzIwMTYsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjAsMzIwMjEs''@;'; put 'put ''MzIwMjIsMzIwMjMsMzIwMjQsMzIwMjUsMzIwMjYsMzIwMjcsMzIwMjgsMzIwMjksMzIwMzAsMzIwMzEsMzIwMzMsMzIwMzUsMzIwMzYsMzIwMzcsMzIwMzgsMzIwNDAsMzIwNDEsMzIwNDIsMzIwNDQsMzIwNDUsMzIwNDYsMzIwNDgsMzIwNDksMzIwNTAsMzIwNTEsMzIwNTIsMzIwNTMsMzIw''@;'; put 'put ''NTQsMzI5MDgsMzkyNjksMzY4NTcsMjg2MDgsMzU3NDksNDA0ODEsMjMwMjAsMzI0ODksMzI1MjEsMjE1MTMsMjY0OTcsMjY4NDAsMzY3NTMsMzE4MjEsMzg1OTgsMjE0NTAsMjQ2MTMsMzAxNDIsMjc3NjIsMjEzNjMsMjMyNDEsMzI0MjMsMjUzODAsMjA5NjAsMzMwMzQsMjQwNDksMzQwMTUs''@;'; put 'put ''MjUyMTYsMjA4NjQsMjMzOTUsMjAyMzgsMzEwODUsMjEwNTgsMjQ3NjAsMjc5ODIsMjM0OTIsMjM0OTAsMzU3NDUsMzU3NjAsMjYwODIsMjQ1MjQsMzg0NjksMjI5MzEsMzI0ODcsMzI0MjYsMjIwMjUsMjY1NTEsMjI4NDEsMjAzMzksMjM0NzgsMjExNTIsMzM2MjYsMzkwNTAsMzYxNTgsMzAw''@;'; put 'put ''MDIsMzgwNzgsMjA1NTEsMzEyOTIsMjAyMTUsMjY1NTAsMzk1NTAsMjMyMzMsMjc1MTYsMzA0MTcsMjIzNjIsMjM1NzQsMzE1NDYsMzgzODgsMjkwMDYsMjA4NjAsMzI5MzcsMzMzOTIsMjI5MDQsMzI1MTYsMzM1NzUsMjY4MTYsMjY2MDQsMzA4OTcsMzA4MzksMjUzMTUsMjU0NDEsMzE2MTYs''@;'; put 'put ''MjA0NjEsMjEwOTgsMjA5NDMsMzM2MTYsMjcwOTksMzc0OTIsMzYzNDEsMzYxNDUsMzUyNjUsMzgxOTAsMzE2NjEsMjAyMTQsMzIwNTUsMzIwNTYsMzIwNTcsMzIwNTgsMzIwNTksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjMsMzIwNjQsMzIwNjUsMzIwNjYsMzIwNjcsMzIwNjgsMzIwNjksMzIw''@;'; put 'put ''NzAsMzIwNzEsMzIwNzIsMzIwNzMsMzIwNzQsMzIwNzUsMzIwNzYsMzIwNzcsMzIwNzgsMzIwNzksMzIwODAsMzIwODEsMzIwODIsMzIwODMsMzIwODQsMzIwODUsMzIwODYsMzIwODcsMzIwODgsMzIwODksMzIwOTAsMzIwOTEsMzIwOTIsMzIwOTMsMzIwOTQsMzIwOTUsMzIwOTYsMzIwOTcs''@;'; put 'put ''MzIwOTgsMzIwOTksMzIxMDAsMzIxMDEsMzIxMDIsMzIxMDMsMzIxMDQsMzIxMDUsMzIxMDYsMzIxMDcsMzIxMDgsMzIxMDksMzIxMTEsMzIxMTIsMzIxMTMsMzIxMTQsMzIxMTUsMzIxMTYsMzIxMTcsMzIxMTgsMzIxMjAsMzIxMjEsMzIxMjIsMzIxMjMsMzIxMjQsMzIxMjUsMzIxMjYsMzIx''@;'; put 'put ''MjcsMzIxMjgsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzIsMzIxMzMsMzIxMzQsMzIxMzUsMzIxMzYsMzIxMzcsMzIxMzgsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDIsMzIxNDMsMzIxNDQsMzIxNDUsMzIxNDYsMzIxNDcsMzIxNDgsMzIxNDksMzIxNTAsMzIxNTEsMzIxNTIsMjA1ODEsMzMzMjgs''@;'; put 'put ''MjEwNzMsMzkyNzksMjgxNzYsMjgyOTMsMjgwNzEsMjQzMTQsMjA3MjUsMjMwMDQsMjM1NTgsMjc5NzQsMjc3NDMsMzAwODYsMzM5MzEsMjY3MjgsMjI4NzAsMzU3NjIsMjEyODAsMzcyMzMsMzg0NzcsMzQxMjEsMjY4OTgsMzA5NzcsMjg5NjYsMzMwMTQsMjAxMzIsMzcwNjYsMjc5NzUsMzk1''@;'; put 'put ''NTYsMjMwNDcsMjIyMDQsMjU2MDUsMzgxMjgsMzA2OTksMjAzODksMzMwNTAsMjk0MDksMzUyODIsMzkyOTAsMzI1NjQsMzI0NzgsMjExMTksMjU5NDUsMzcyMzcsMzY3MzUsMzY3MzksMjE0ODMsMzEzODIsMjU1ODEsMjU1MDksMzAzNDIsMzEyMjQsMzQ5MDMsMzg0NTQsMjUxMzAsMjExNjMs''@;'; put 'put ''MzM0MTAsMjY3MDgsMjY0ODAsMjU0NjMsMzA1NzEsMzE0NjksMjc5MDUsMzI0NjcsMzUyOTksMjI5OTIsMjUxMDYsMzQyNDksMzM0NDUsMzAwMjgsMjA1MTEsMjAxNzEsMzAxMTcsMzU4MTksMjM2MjYsMjQwNjIsMzE1NjMsMjYwMjAsMzczMjksMjAxNzAsMjc5NDEsMzUxNjcsMzIwMzksMzgx''@;'; put 'put ''ODIsMjAxNjUsMzU4ODAsMzY4MjcsMzg3NzEsMjYxODcsMzExMDUsMzY4MTcsMjg5MDgsMjgwMjQsMzIxNTMsMzIxNTQsMzIxNTUsMzIxNTYsMzIxNTcsMzIxNTgsMzIxNTksMzIxNjAsMzIxNjEsMzIxNjIsMzIxNjMsMzIxNjQsMzIxNjUsMzIxNjcsMzIxNjgsMzIxNjksMzIxNzAsMzIxNzEs''@;'; put 'put ''MzIxNzIsMzIxNzMsMzIxNzUsMzIxNzYsMzIxNzcsMzIxNzgsMzIxNzksMzIxODAsMzIxODEsMzIxODIsMzIxODMsMzIxODQsMzIxODUsMzIxODYsMzIxODcsMzIxODgsMzIxODksMzIxOTAsMzIxOTEsMzIxOTIsMzIxOTMsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIxOTksMzIy''@;'; put 'put ''MDAsMzIyMDEsMzIyMDIsMzIyMDMsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMDcsMzIyMDgsMzIyMDksMzIyMTAsMzIyMTEsMzIyMTIsMzIyMTMsMzIyMTQsMzIyMTUsMzIyMTYsMzIyMTcsMzIyMTgsMzIyMTksMzIyMjAsMzIyMjEsMzIyMjIsMzIyMjMsMzIyMjQsMzIyMjUsMzIyMjYsMzIyMjcs''@;'; put 'put ''MzIyMjgsMzIyMjksMzIyMzAsMzIyMzEsMzIyMzIsMzIyMzMsMzIyMzQsMzIyMzUsMzIyMzYsMzIyMzcsMzIyMzgsMzIyMzksMzIyNDAsMzIyNDEsMzIyNDIsMzIyNDMsMzIyNDQsMzIyNDUsMzIyNDYsMzIyNDcsMzIyNDgsMzIyNDksMzIyNTAsMjM2MTMsMjExNzAsMzM2MDYsMjA4MzQsMzM1''@;'; put 'put ''NTAsMzA1NTUsMjYyMzAsNDAxMjAsMjAxNDAsMjQ3NzgsMzE5MzQsMzE5MjMsMzI0NjMsMjAxMTcsMzU2ODYsMjYyMjMsMzkwNDgsMzg3NDUsMjI2NTksMjU5NjQsMzgyMzYsMjQ0NTIsMzAxNTMsMzg3NDIsMzE0NTUsMzE0NTQsMjA5MjgsMjg4NDcsMzEzODQsMjU1NzgsMzEzNTAsMzI0MTYs''@;'; put 'put ''Mjk1OTAsMzg4OTMsMjAwMzcsMjg3OTIsMjAwNjEsMzcyMDIsMjE0MTcsMjU5MzcsMjYwODcsMzMyNzYsMzMyODUsMjE2NDYsMjM2MDEsMzAxMDYsMzg4MTYsMjUzMDQsMjk0MDEsMzAxNDEsMjM2MjEsMzk1NDUsMzM3MzgsMjM2MTYsMjE2MzIsMzA2OTcsMjAwMzAsMjc4MjIsMzI4NTgsMjUy''@;'; put 'put ''OTgsMjU0NTQsMjQwNDAsMjA4NTUsMzYzMTcsMzYzODIsMzgxOTEsMjA0NjUsMjE0NzcsMjQ4MDcsMjg4NDQsMjEwOTUsMjU0MjQsNDA1MTUsMjMwNzEsMjA1MTgsMzA1MTksMjEzNjcsMzI0ODIsMjU3MzMsMjU4OTksMjUyMjUsMjU0OTYsMjA1MDAsMjkyMzcsMzUyNzMsMjA5MTUsMzU3NzYs''@;'; put 'put ''MzI0NzcsMjIzNDMsMzM3NDAsMzgwNTUsMjA4OTEsMjE1MzEsMjM4MDMsMzIyNTEsMzIyNTIsMzIyNTMsMzIyNTQsMzIyNTUsMzIyNTYsMzIyNTcsMzIyNTgsMzIyNTksMzIyNjAsMzIyNjEsMzIyNjIsMzIyNjMsMzIyNjQsMzIyNjUsMzIyNjYsMzIyNjcsMzIyNjgsMzIyNjksMzIyNzAsMzIy''@;'; put 'put ''NzEsMzIyNzIsMzIyNzMsMzIyNzQsMzIyNzUsMzIyNzYsMzIyNzcsMzIyNzgsMzIyNzksMzIyODAsMzIyODEsMzIyODIsMzIyODMsMzIyODQsMzIyODUsMzIyODYsMzIyODcsMzIyODgsMzIyODksMzIyOTAsMzIyOTEsMzIyOTIsMzIyOTMsMzIyOTQsMzIyOTUsMzIyOTYsMzIyOTcsMzIyOTgs''@;'; put 'put ''MzIyOTksMzIzMDAsMzIzMDEsMzIzMDIsMzIzMDMsMzIzMDQsMzIzMDUsMzIzMDYsMzIzMDcsMzIzMDgsMzIzMDksMzIzMTAsMzIzMTEsMzIzMTIsMzIzMTMsMzIzMTQsMzIzMTYsMzIzMTcsMzIzMTgsMzIzMTksMzIzMjAsMzIzMjIsMzIzMjMsMzIzMjQsMzIzMjUsMzIzMjYsMzIzMjgsMzIz''@;'; put 'put ''MjksMzIzMzAsMzIzMzEsMzIzMzIsMzIzMzMsMzIzMzQsMzIzMzUsMzIzMzYsMzIzMzcsMzIzMzgsMzIzMzksMzIzNDAsMzIzNDEsMzIzNDIsMzIzNDMsMzIzNDQsMzIzNDUsMzIzNDYsMzIzNDcsMzIzNDgsMzIzNDksMjA0MjYsMzE0NTksMjc5OTQsMzcwODksMzk1NjcsMjE4ODgsMjE2NTQs''@;'; put 'put ''MjEzNDUsMjE2NzksMjQzMjAsMjU1NzcsMjY5OTksMjA5NzUsMjQ5MzYsMjEwMDIsMjI1NzAsMjEyMDgsMjIzNTAsMzA3MzMsMzA0NzUsMjQyNDcsMjQ5NTEsMzE5NjgsMjUxNzksMjUyMzksMjAxMzAsMjg4MjEsMzI3NzEsMjUzMzUsMjg5MDAsMzg3NTIsMjIzOTEsMzM0OTksMjY2MDcsMjY4''@;'; put 'put ''NjksMzA5MzMsMzkwNjMsMzExODUsMjI3NzEsMjE2ODMsMjE0ODcsMjgyMTIsMjA4MTEsMjEwNTEsMjM0NTgsMzU4MzgsMzI5NDMsMjE4MjcsMjI0MzgsMjQ2OTEsMjIzNTMsMjE1NDksMzEzNTQsMjQ2NTYsMjMzODAsMjU1MTEsMjUyNDgsMjE0NzUsMjUxODcsMjM0OTUsMjY1NDMsMjE3NDEs''@;'; put 'put ''MzEzOTEsMzM1MTAsMzcyMzksMjQyMTEsMzUwNDQsMjI4NDAsMjI0NDYsMjUzNTgsMzYzMjgsMzMwMDcsMjIzNTksMzE2MDcsMjAzOTMsMjQ1NTUsMjM0ODUsMjc0NTQsMjEyODEsMzE1NjgsMjkzNzgsMjY2OTQsMzA3MTksMzA1MTgsMjYxMDMsMjA5MTcsMjAxMTEsMzA0MjAsMjM3NDMsMzEz''@;'; put 'put ''OTcsMzM5MDksMjI4NjIsMzk3NDUsMjA2MDgsMzIzNTAsMzIzNTEsMzIzNTIsMzIzNTMsMzIzNTQsMzIzNTUsMzIzNTYsMzIzNTcsMzIzNTgsMzIzNTksMzIzNjAsMzIzNjEsMzIzNjIsMzIzNjMsMzIzNjQsMzIzNjUsMzIzNjYsMzIzNjcsMzIzNjgsMzIzNjksMzIzNzAsMzIzNzEsMzIzNzIs''@;'; put 'put ''MzIzNzMsMzIzNzQsMzIzNzUsMzIzNzYsMzIzNzcsMzIzNzgsMzIzNzksMzIzODAsMzIzODEsMzIzODIsMzIzODMsMzIzODQsMzIzODUsMzIzODcsMzIzODgsMzIzODksMzIzOTAsMzIzOTEsMzIzOTIsMzIzOTMsMzIzOTQsMzIzOTUsMzIzOTYsMzIzOTcsMzIzOTgsMzIzOTksMzI0MDAsMzI0''@;'; put 'put ''MDEsMzI0MDIsMzI0MDMsMzI0MDQsMzI0MDUsMzI0MDYsMzI0MDcsMzI0MDgsMzI0MDksMzI0MTAsMzI0MTIsMzI0MTMsMzI0MTQsMzI0MzAsMzI0MzYsMzI0NDMsMzI0NDQsMzI0NzAsMzI0ODQsMzI0OTIsMzI1MDUsMzI1MjIsMzI1MjgsMzI1NDIsMzI1NjcsMzI1NjksMzI1NzEsMzI1NzIs''@;'; put 'put ''MzI1NzMsMzI1NzQsMzI1NzUsMzI1NzYsMzI1NzcsMzI1NzksMzI1ODIsMzI1ODMsMzI1ODQsMzI1ODUsMzI1ODYsMzI1ODcsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTEsMzI1OTQsMzI1OTUsMzkzMDQsMjQ4NzEsMjgyOTEsMjIzNzIsMjYxMTgsMjU0MTQsMjIyNTYsMjUzMjQsMjUxOTMsMjQy''@;'; put 'put ''NzUsMzg0MjAsMjI0MDMsMjUyODksMjE4OTUsMzQ1OTMsMzMwOTgsMzY3NzEsMjE4NjIsMzM3MTMsMjY0NjksMzYxODIsMzQwMTMsMjMxNDYsMjY2MzksMjUzMTgsMzE3MjYsMzg0MTcsMjA4NDgsMjg1NzIsMzU4ODgsMjU1OTcsMzUyNzIsMjUwNDIsMzI1MTgsMjg4NjYsMjgzODksMjk3MDEs''@;'; put 'put ''MjcwMjgsMjk0MzYsMjQyNjYsMzcwNzAsMjYzOTEsMjgwMTAsMjU0MzgsMjExNzEsMjkyODIsMzI3NjksMjAzMzIsMjMwMTMsMzcyMjYsMjg4ODksMjgwNjEsMjEyMDIsMjAwNDgsMzg2NDcsMzgyNTMsMzQxNzQsMzA5MjIsMzIwNDcsMjA3NjksMjI0MTgsMjU3OTQsMzI5MDcsMzE4NjcsMjc4''@;'; put 'put ''ODIsMjY4NjUsMjY5NzQsMjA5MTksMjE0MDAsMjY3OTIsMjkzMTMsNDA2NTQsMzE3MjksMjk0MzIsMzExNjMsMjg0MzUsMjk3MDIsMjY0NDYsMzczMjQsNDAxMDAsMzEwMzYsMzM2NzMsMzM2MjAsMjE1MTksMjY2NDcsMjAwMjksMjEzODUsMjExNjksMzA3ODIsMjEzODIsMjEwMzMsMjA2MTYs''@;'; put 'put ''MjAzNjMsMjA0MzIsMzI1OTgsMzI2MDEsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDYsMzI2MDgsMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MTUsMzI2MTksMzI2MjAsMzI2MjEsMzI2MjMsMzI2MjQsMzI2MjcsMzI2MjksMzI2MzAsMzI2MzEsMzI2MzIsMzI2MzQsMzI2MzUsMzI2MzYsMzI2''@;'; put 'put ''MzcsMzI2MzksMzI2NDAsMzI2NDIsMzI2NDMsMzI2NDQsMzI2NDUsMzI2NDYsMzI2NDcsMzI2NDgsMzI2NDksMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NTgsMzI2NTksMzI2NjEsMzI2NjIsMzI2NjMsMzI2NjQsMzI2NjUsMzI2NjcsMzI2NjgsMzI2NzIsMzI2NzQsMzI2NzUs''@;'; put 'put ''MzI2NzcsMzI2NzgsMzI2ODAsMzI2ODEsMzI2ODIsMzI2ODMsMzI2ODQsMzI2ODUsMzI2ODYsMzI2ODksMzI2OTEsMzI2OTIsMzI2OTMsMzI2OTQsMzI2OTUsMzI2OTgsMzI2OTksMzI3MDIsMzI3MDQsMzI3MDYsMzI3MDcsMzI3MDgsMzI3MTAsMzI3MTEsMzI3MTIsMzI3MTMsMzI3MTUsMzI3''@;'; put 'put ''MTcsMzI3MTksMzI3MjAsMzI3MjEsMzI3MjIsMzI3MjMsMzI3MjYsMzI3MjcsMzI3MjksMzI3MzAsMzI3MzEsMzI3MzIsMzI3MzMsMzI3MzQsMzI3MzgsMzI3MzksMzAxNzgsMzE0MzUsMzE4OTAsMjc4MTMsMzg1ODIsMjExNDcsMjk4MjcsMjE3MzcsMjA0NTcsMzI4NTIsMzM3MTQsMzY4MzAs''@;'; put 'put ''MzgyNTYsMjQyNjUsMjQ2MDQsMjgwNjMsMjQwODgsMjU5NDcsMzMwODAsMzgxNDIsMjQ2NTEsMjg4NjAsMzI0NTEsMzE5MTgsMjA5MzcsMjY3NTMsMzE5MjEsMzMzOTEsMjAwMDQsMzY3NDIsMzczMjcsMjYyMzgsMjAxNDIsMzU4NDUsMjU3NjksMzI4NDIsMjA2OTgsMzAxMDMsMjkxMzQsMjM1''@;'; put 'put ''MjUsMzY3OTcsMjg1MTgsMjAxMDIsMjU3MzAsMzgyNDMsMjQyNzgsMjYwMDksMjEwMTUsMzUwMTAsMjg4NzIsMjExNTUsMjk0NTQsMjk3NDcsMjY1MTksMzA5NjcsMzg2NzgsMjAwMjAsMzcwNTEsNDAxNTgsMjgxMDcsMjA5NTUsMzYxNjEsMjE1MzMsMjUyOTQsMjk2MTgsMzM3NzcsMzg2NDYs''@;'; put 'put ''NDA4MzYsMzgwODMsMjAyNzgsMzI2NjYsMjA5NDAsMjg3ODksMzg1MTcsMjM3MjUsMzkwNDYsMjE0NzgsMjAxOTYsMjgzMTYsMjk3MDUsMjcwNjAsMzA4MjcsMzkzMTEsMzAwNDEsMjEwMTYsMzAyNDQsMjc5NjksMjY2MTEsMjA4NDUsNDA4NTcsMzI4NDMsMjE2NTcsMzE1NDgsMzE0MjMsMzI3''@;'; put 'put ''NDAsMzI3NDMsMzI3NDQsMzI3NDYsMzI3NDcsMzI3NDgsMzI3NDksMzI3NTEsMzI3NTQsMzI3NTYsMzI3NTcsMzI3NTgsMzI3NTksMzI3NjAsMzI3NjEsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzAsMzI3NzUsMzI3NzYsMzI3NzcsMzI3NzgsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcs''@;'; put 'put ''MzI3OTQsMzI3OTUsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDEsMzI4MDMsMzI4MDQsMzI4MTEsMzI4MTIsMzI4MTMsMzI4MTQsMzI4MTUsMzI4MTYsMzI4MTgsMzI4MjAsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzMsMzI4MzYsMzI4MzcsMzI4MzksMzI4NDAsMzI4NDEsMzI4''@;'; put 'put ''NDYsMzI4NDcsMzI4NDgsMzI4NDksMzI4NTEsMzI4NTMsMzI4NTQsMzI4NTUsMzI4NTcsMzI4NTksMzI4NjAsMzI4NjEsMzI4NjIsMzI4NjMsMzI4NjQsMzI4NjUsMzI4NjYsMzI4NjcsMzI4NjgsMzI4NjksMzI4NzAsMzI4NzEsMzI4NzIsMzI4NzUsMzI4NzYsMzI4NzcsMzI4NzgsMzI4Nzks''@;'; put 'put ''MzI4ODAsMzI4ODIsMzI4ODMsMzI4ODQsMzI4ODUsMzI4ODYsMzI4ODcsMzI4ODgsMzI4ODksMzI4OTAsMzI4OTEsMzI4OTIsMzI4OTMsMzg1MzQsMjI0MDQsMjUzMTQsMzg0NzEsMjcwMDQsMjMwNDQsMjU2MDIsMzE2OTksMjg0MzEsMzg0NzUsMzM0NDYsMjEzNDYsMzkwNDUsMjQyMDgsMjg4''@;'; put 'put ''MDksMjU1MjMsMjEzNDgsMzQzODMsNDAwNjUsNDA1OTUsMzA4NjAsMzg3MDYsMzYzMzUsMzYxNjIsNDA1NzUsMjg1MTAsMzExMDgsMjQ0MDUsMzg0NzAsMjUxMzQsMzk1NDAsMjE1MjUsMzgxMDksMjAzODcsMjYwNTMsMjM2NTMsMjM2NDksMzI1MzMsMzQzODUsMjc2OTUsMjQ0NTksMjk1NzUs''@;'; put 'put ''MjgzODgsMzI1MTEsMjM3ODIsMjUzNzEsMjM0MDIsMjgzOTAsMjEzNjUsMjAwODEsMjU1MDQsMzAwNTMsMjUyNDksMzY3MTgsMjAyNjIsMjAxNzcsMjc4MTQsMzI0MzgsMzU3NzAsMzM4MjEsMzQ3NDYsMzI1OTksMzY5MjMsMzgxNzksMzE2NTcsMzk1ODUsMzUwNjQsMzM4NTMsMjc5MzEsMzk1''@;'; put 'put ''NTgsMzI0NzYsMjI5MjAsNDA2MzUsMjk1OTUsMzA3MjEsMzQ0MzQsMzk1MzIsMzk1NTQsMjIwNDMsMjE1MjcsMjI0NzUsMjAwODAsNDA2MTQsMjEzMzQsMzY4MDgsMzMwMzMsMzA2MTAsMzkzMTQsMzQ1NDIsMjgzODUsMzQwNjcsMjYzNjQsMjQ5MzAsMjg0NTksMzI4OTQsMzI4OTcsMzI4OTgs''@;'; put 'put ''MzI5MDEsMzI5MDQsMzI5MDYsMzI5MDksMzI5MTAsMzI5MTEsMzI5MTIsMzI5MTMsMzI5MTQsMzI5MTYsMzI5MTcsMzI5MTksMzI5MjEsMzI5MjYsMzI5MzEsMzI5MzQsMzI5MzUsMzI5MzYsMzI5NDAsMzI5NDQsMzI5NDcsMzI5NDksMzI5NTAsMzI5NTIsMzI5NTMsMzI5NTUsMzI5NjUsMzI5''@;'; put 'put ''NjcsMzI5NjgsMzI5NjksMzI5NzAsMzI5NzEsMzI5NzUsMzI5NzYsMzI5NzcsMzI5NzgsMzI5NzksMzI5ODAsMzI5ODEsMzI5ODQsMzI5OTEsMzI5OTIsMzI5OTQsMzI5OTUsMzI5OTgsMzMwMDYsMzMwMTMsMzMwMTUsMzMwMTcsMzMwMTksMzMwMjIsMzMwMjMsMzMwMjQsMzMwMjUsMzMwMjcs''@;'; put 'put ''MzMwMjgsMzMwMjksMzMwMzEsMzMwMzIsMzMwMzUsMzMwMzYsMzMwNDUsMzMwNDcsMzMwNDksMzMwNTEsMzMwNTIsMzMwNTMsMzMwNTUsMzMwNTYsMzMwNTcsMzMwNTgsMzMwNTksMzMwNjAsMzMwNjEsMzMwNjIsMzMwNjMsMzMwNjQsMzMwNjUsMzMwNjYsMzMwNjcsMzMwNjksMzMwNzAsMzMw''@;'; put 'put ''NzIsMzMwNzUsMzMwNzYsMzMwNzcsMzMwNzksMzMwODEsMzMwODIsMzMwODMsMzMwODQsMzMwODUsMzMwODcsMzU4ODEsMzM0MjYsMzM1NzksMzA0NTAsMjc2NjcsMjQ1MzcsMzM3MjUsMjk0ODMsMzM1NDEsMzgxNzAsMjc2MTEsMzA2ODMsMzgwODYsMjEzNTksMzM1MzgsMjA4ODIsMjQxMjUs''@;'; put 'put ''MzU5ODAsMzYxNTIsMjAwNDAsMjk2MTEsMjY1MjIsMjY3NTcsMzcyMzgsMzg2NjUsMjkwMjgsMjc4MDksMzA0NzMsMjMxODYsMzgyMDksMjc1OTksMzI2NTQsMjYxNTEsMjM1MDQsMjI5NjksMjMxOTQsMzgzNzYsMzgzOTEsMjAyMDQsMzM4MDQsMzM5NDUsMjczMDgsMzA0MzEsMzgxOTIsMjk0''@;'; put 'put ''NjcsMjY3OTAsMjMzOTEsMzA1MTEsMzcyNzQsMzg3NTMsMzE5NjQsMzY4NTUsMzU4NjgsMjQzNTcsMzE4NTksMzExOTIsMzUyNjksMjc4NTIsMzQ1ODgsMjM0OTQsMjQxMzAsMjY4MjUsMzA0OTYsMzI1MDEsMjA4ODUsMjA4MTMsMjExOTMsMjMwODEsMzI1MTcsMzg3NTQsMzM0OTUsMjU1NTEs''@;'; put 'put ''MzA1OTYsMzQyNTYsMzExODYsMjgyMTgsMjQyMTcsMjI5MzcsMzQwNjUsMjg3ODEsMjc2NjUsMjUyNzksMzAzOTksMjU5MzUsMjQ3NTEsMzgzOTcsMjYxMjYsMzQ3MTksNDA0ODMsMzgxMjUsMjE1MTcsMjE2MjksMzU4ODQsMjU3MjAsMzMwODgsMzMwODksMzMwOTAsMzMwOTEsMzMwOTIsMzMw''@;'; put 'put ''OTMsMzMwOTUsMzMwOTcsMzMxMDEsMzMxMDIsMzMxMDMsMzMxMDYsMzMxMTAsMzMxMTEsMzMxMTIsMzMxMTUsMzMxMTYsMzMxMTcsMzMxMTgsMzMxMTksMzMxMjEsMzMxMjIsMzMxMjMsMzMxMjQsMzMxMjYsMzMxMjgsMzMxMzAsMzMxMzEsMzMxMzIsMzMxMzUsMzMxMzgsMzMxMzksMzMxNDEs''@;'; put 'put ''MzMxNDIsMzMxNDMsMzMxNDQsMzMxNTMsMzMxNTUsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNTksMzMxNjEsMzMxNjMsMzMxNjQsMzMxNjUsMzMxNjYsMzMxNjgsMzMxNzAsMzMxNzEsMzMxNzIsMzMxNzMsMzMxNzQsMzMxNzUsMzMxNzcsMzMxNzgsMzMxODIsMzMxODMsMzMxODQsMzMxODUsMzMx''@;'; put 'put ''ODYsMzMxODgsMzMxODksMzMxOTEsMzMxOTMsMzMxOTUsMzMxOTYsMzMxOTcsMzMxOTgsMzMxOTksMzMyMDAsMzMyMDEsMzMyMDIsMzMyMDQsMzMyMDUsMzMyMDYsMzMyMDcsMzMyMDgsMzMyMDksMzMyMTIsMzMyMTMsMzMyMTQsMzMyMTUsMzMyMjAsMzMyMjEsMzMyMjMsMzMyMjQsMzMyMjUs''@;'; put 'put ''MzMyMjcsMzMyMjksMzMyMzAsMzMyMzEsMzMyMzIsMzMyMzMsMzMyMzQsMzMyMzUsMjU3MjEsMzQzMjEsMjcxNjksMzMxODAsMzA5NTIsMjU3MDUsMzk3NjQsMjUyNzMsMjY0MTEsMzM3MDcsMjI2OTYsNDA2NjQsMjc4MTksMjg0NDgsMjM1MTgsMzg0NzYsMzU4NTEsMjkyNzksMjY1NzYsMjUy''@;'; put 'put ''ODcsMjkyODEsMjAxMzcsMjI5ODIsMjc1OTcsMjI2NzUsMjYyODYsMjQxNDksMjEyMTUsMjQ5MTcsMjY0MDgsMzA0NDYsMzA1NjYsMjkyODcsMzEzMDIsMjUzNDMsMjE3MzgsMjE1ODQsMzgwNDgsMzcwMjcsMjMwNjgsMzI0MzUsMjc2NzAsMjAwMzUsMjI5MDIsMzI3ODQsMjI4NTYsMjEzMzUs''@;'; put 'put ''MzAwMDcsMzg1OTAsMjIyMTgsMjUzNzYsMzMwNDEsMjQ3MDAsMzgzOTMsMjgxMTgsMjE2MDIsMzkyOTcsMjA4NjksMjMyNzMsMzMwMjEsMjI5NTgsMzg2NzUsMjA1MjIsMjc4NzcsMjM2MTIsMjUzMTEsMjAzMjAsMjEzMTEsMzMxNDcsMzY4NzAsMjgzNDYsMzQwOTEsMjUyODgsMjQxODAsMzA5''@;'; put 'put ''MTAsMjU3ODEsMjU0NjcsMjQ1NjUsMjMwNjQsMzcyNDcsNDA0NzksMjM2MTUsMjU0MjMsMzI4MzQsMjM0MjEsMjE4NzAsMzgyMTgsMzgyMjEsMjgwMzcsMjQ3NDQsMjY1OTIsMjk0MDYsMjA5NTcsMjM0MjUsMzMyMzYsMzMyMzcsMzMyMzgsMzMyMzksMzMyNDAsMzMyNDEsMzMyNDIsMzMyNDMs''@;'; put 'put ''MzMyNDQsMzMyNDUsMzMyNDYsMzMyNDcsMzMyNDgsMzMyNDksMzMyNTAsMzMyNTIsMzMyNTMsMzMyNTQsMzMyNTYsMzMyNTcsMzMyNTksMzMyNjIsMzMyNjMsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzEsMzMyNzIsMzMyNzMsMzMyNzQsMzMyNzcsMzMyNzksMzMyODMsMzMy''@;'; put 'put ''ODcsMzMyODgsMzMyODksMzMyOTAsMzMyOTEsMzMyOTQsMzMyOTUsMzMyOTcsMzMyOTksMzMzMDEsMzMzMDIsMzMzMDMsMzMzMDQsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTIsMzMzMTYsMzMzMTcsMzMzMTgsMzMzMTksMzMzMjEsMzMzMjYsMzMzMzAsMzMzMzgsMzMzNDAsMzMzNDEsMzMzNDMs''@;'; put 'put ''MzMzNDQsMzMzNDUsMzMzNDYsMzMzNDcsMzMzNDksMzMzNTAsMzMzNTIsMzMzNTQsMzMzNTYsMzMzNTcsMzMzNTgsMzMzNjAsMzMzNjEsMzMzNjIsMzMzNjMsMzMzNjQsMzMzNjUsMzMzNjYsMzMzNjcsMzMzNjksMzMzNzEsMzMzNzIsMzMzNzMsMzMzNzQsMzMzNzYsMzMzNzcsMzMzNzgsMzMz''@;'; put 'put ''NzksMzMzODAsMzMzODEsMzMzODIsMzMzODMsMzMzODUsMjUzMTksMjc4NzAsMjkyNzUsMjUxOTcsMzgwNjIsMzI0NDUsMzMwNDMsMjc5ODcsMjA4OTIsMjQzMjQsMjI5MDAsMjExNjIsMjQ1OTQsMjI4OTksMjYyNjIsMzQzODQsMzAxMTEsMjUzODYsMjUwNjIsMzE5ODMsMzU4MzQsMjE3MzQs''@;'; put 'put ''Mjc0MzEsNDA0ODUsMjc1NzIsMzQyNjEsMjE1ODksMjA1OTgsMjc4MTIsMjE4NjYsMzYyNzYsMjkyMjgsMjQwODUsMjQ1OTcsMjk3NTAsMjUyOTMsMjU0OTAsMjkyNjAsMjQ0NzIsMjgyMjcsMjc5NjYsMjU4NTYsMjg1MDQsMzA0MjQsMzA5MjgsMzA0NjAsMzAwMzYsMjEwMjgsMjE0NjcsMjAw''@;'; put 'put ''NTEsMjQyMjIsMjYwNDksMzI4MTAsMzI5ODIsMjUyNDMsMjE2MzgsMjEwMzIsMjg4NDYsMzQ5NTcsMzYzMDUsMjc4NzMsMjE2MjQsMzI5ODYsMjI1MjEsMzUwNjAsMzYxODAsMzg1MDYsMzcxOTcsMjAzMjksMjc4MDMsMjE5NDMsMzA0MDYsMzA3NjgsMjUyNTYsMjg5MjEsMjg1NTgsMjQ0Mjks''@;'; put 'put ''MzQwMjgsMjY4NDIsMzA4NDQsMzE3MzUsMzMxOTIsMjYzNzksNDA1MjcsMjU0NDcsMzA4OTYsMjIzODMsMzA3MzgsMzg3MTMsMjUyMDksMjUyNTksMjExMjgsMjk3NDksMjc2MDcsMzMzODYsMzMzODcsMzMzODgsMzMzODksMzMzOTMsMzMzOTcsMzMzOTgsMzMzOTksMzM0MDAsMzM0MDMsMzM0''@;'; put 'put ''MDQsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTMsMzM0MTQsMzM0MTUsMzM0MTcsMzM0MjAsMzM0MjQsMzM0MjcsMzM0MjgsMzM0MjksMzM0MzAsMzM0MzQsMzM0MzUsMzM0MzgsMzM0NDAsMzM0NDIsMzM0NDMsMzM0NDcsMzM0NTgsMzM0NjEsMzM0NjIsMzM0NjYsMzM0NjcsMzM0NjgsMzM0NzEs''@;'; put 'put ''MzM0NzIsMzM0NzQsMzM0NzUsMzM0NzcsMzM0NzgsMzM0ODEsMzM0ODgsMzM0OTQsMzM0OTcsMzM0OTgsMzM1MDEsMzM1MDYsMzM1MTEsMzM1MTIsMzM1MTMsMzM1MTQsMzM1MTYsMzM1MTcsMzM1MTgsMzM1MjAsMzM1MjIsMzM1MjMsMzM1MjUsMzM1MjYsMzM1MjgsMzM1MzAsMzM1MzIsMzM1''@;'; put 'put ''MzMsMzM1MzQsMzM1MzUsMzM1MzYsMzM1NDYsMzM1NDcsMzM1NDksMzM1NTIsMzM1NTQsMzM1NTUsMzM1NTgsMzM1NjAsMzM1NjEsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjgsMzM1NjksMzM1NzAsMzM1NzEsMzM1NzIsMzM1NzMsMzM1NzQsMzM1NzcsMzM1NzgsMzM1ODIsMzM1ODQsMzM1ODYs''@;'; put 'put ''MzM1OTEsMzM1OTUsMzM1OTcsMjE4NjAsMzMwODYsMzAxMzAsMzAzODIsMjEzMDUsMzAxNzQsMjA3MzEsMjM2MTcsMzU2OTIsMzE2ODcsMjA1NTksMjkyNTUsMzk1NzUsMzkxMjgsMjg0MTgsMjk5MjIsMzEwODAsMjU3MzUsMzA2MjksMjUzNDAsMzkwNTcsMzYxMzksMjE2OTcsMzI4NTYsMjAw''@;'; put 'put ''NTAsMjIzNzgsMzM1MjksMzM4MDUsMjQxNzksMjA5NzMsMjk5NDIsMzU3ODAsMjM2MzEsMjIzNjksMjc5MDAsMzkwNDcsMjMxMTAsMzA3NzIsMzk3NDgsMzY4NDMsMzE4OTMsMjEwNzgsMjUxNjksMzgxMzgsMjAxNjYsMzM2NzAsMzM4ODksMzM3NjksMzM5NzAsMjI0ODQsMjY0MjAsMjIyNzUs''@;'; put 'put ''MjYyMjIsMjgwMDYsMzU4ODksMjYzMzMsMjg2ODksMjYzOTksMjc0NTAsMjY2NDYsMjUxMTQsMjI5NzEsMTk5NzEsMjA5MzIsMjg0MjIsMjY1NzgsMjc3OTEsMjA4NTQsMjY4MjcsMjI4NTUsMjc0OTUsMzAwNTQsMjM4MjIsMzMwNDAsNDA3ODQsMjYwNzEsMzEwNDgsMzEwNDEsMzk1NjksMzYy''@;'; put 'put ''MTUsMjM2ODIsMjAwNjIsMjAyMjUsMjE1NTEsMjI4NjUsMzA3MzIsMjIxMjAsMjc2NjgsMzY4MDQsMjQzMjMsMjc3NzMsMjc4NzUsMzU3NTUsMjU0ODgsMzM1OTgsMzM1OTksMzM2MDEsMzM2MDIsMzM2MDQsMzM2MDUsMzM2MDgsMzM2MTAsMzM2MTEsMzM2MTIsMzM2MTMsMzM2MTQsMzM2MTks''@;'; put 'put ''MzM2MjEsMzM2MjIsMzM2MjMsMzM2MjQsMzM2MjUsMzM2MjksMzM2MzQsMzM2NDgsMzM2NDksMzM2NTAsMzM2NTEsMzM2NTIsMzM2NTMsMzM2NTQsMzM2NTcsMzM2NTgsMzM2NjIsMzM2NjMsMzM2NjQsMzM2NjUsMzM2NjYsMzM2NjcsMzM2NjgsMzM2NzEsMzM2NzIsMzM2NzQsMzM2NzUsMzM2''@;'; put 'put ''NzYsMzM2NzcsMzM2NzksMzM2ODAsMzM2ODEsMzM2ODQsMzM2ODUsMzM2ODYsMzM2ODcsMzM2ODksMzM2OTAsMzM2OTMsMzM2OTUsMzM2OTcsMzM2OTgsMzM2OTksMzM3MDAsMzM3MDEsMzM3MDIsMzM3MDMsMzM3MDgsMzM3MDksMzM3MTAsMzM3MTEsMzM3MTcsMzM3MjMsMzM3MjYsMzM3Mjcs''@;'; put 'put ''MzM3MzAsMzM3MzEsMzM3MzIsMzM3MzQsMzM3MzYsMzM3MzcsMzM3MzksMzM3NDEsMzM3NDIsMzM3NDQsMzM3NDUsMzM3NDYsMzM3NDcsMzM3NDksMzM3NTEsMzM3NTMsMzM3NTQsMzM3NTUsMzM3NTgsMzM3NjIsMzM3NjMsMzM3NjQsMzM3NjYsMzM3NjcsMzM3NjgsMzM3NzEsMzM3NzIsMzM3''@;'; put 'put ''NzMsMjQ2ODgsMjc5NjUsMjkzMDEsMjUxOTAsMzgwMzAsMzgwODUsMjEzMTUsMzY4MDEsMzE2MTQsMjAxOTEsMzU4NzgsMjAwOTQsNDA2NjAsMzgwNjUsMzgwNjcsMjEwNjksMjg1MDgsMzY5NjMsMjc5NzMsMzU4OTIsMjI1NDUsMjM4ODQsMjc0MjQsMjc0NjUsMjY1MzgsMjE1OTUsMzMxMDgs''@;'; put 'put ''MzI2NTIsMjI2ODEsMzQxMDMsMjQzNzgsMjUyNTAsMjcyMDcsMzgyMDEsMjU5NzAsMjQ3MDgsMjY3MjUsMzA2MzEsMjAwNTIsMjAzOTIsMjQwMzksMzg4MDgsMjU3NzIsMzI3MjgsMjM3ODksMjA0MzEsMzEzNzMsMjA5OTksMzM1NDAsMTk5ODgsMjQ2MjMsMzEzNjMsMzgwNTQsMjA0MDUsMjAx''@;'; put 'put ''NDYsMzEyMDYsMjk3NDgsMjEyMjAsMzM0NjUsMjU4MTAsMzExNjUsMjM1MTcsMjc3NzcsMzg3MzgsMzY3MzEsMjc2ODIsMjA1NDIsMjEzNzUsMjgxNjUsMjU4MDYsMjYyMjgsMjc2OTYsMjQ3NzMsMzkwMzEsMzU4MzEsMjQxOTgsMjk3NTYsMzEzNTEsMzExNzksMTk5OTIsMzcwNDEsMjk2OTks''@;'; put 'put ''Mjc3MTQsMjIyMzQsMzcxOTUsMjc4NDUsMzYyMzUsMjEzMDYsMzQ1MDIsMjYzNTQsMzY1MjcsMjM2MjQsMzk1MzcsMjgxOTIsMzM3NzQsMzM3NzUsMzM3NzksMzM3ODAsMzM3ODEsMzM3ODIsMzM3ODMsMzM3ODYsMzM3ODcsMzM3ODgsMzM3OTAsMzM3OTEsMzM3OTIsMzM3OTQsMzM3OTcsMzM3''@;'; put 'put ''OTksMzM4MDAsMzM4MDEsMzM4MDIsMzM4MDgsMzM4MTAsMzM4MTEsMzM4MTIsMzM4MTMsMzM4MTQsMzM4MTUsMzM4MTcsMzM4MTgsMzM4MTksMzM4MjIsMzM4MjMsMzM4MjQsMzM4MjUsMzM4MjYsMzM4MjcsMzM4MzMsMzM4MzQsMzM4MzUsMzM4MzYsMzM4MzcsMzM4MzgsMzM4MzksMzM4NDAs''@;'; put 'put ''MzM4NDIsMzM4NDMsMzM4NDQsMzM4NDUsMzM4NDYsMzM4NDcsMzM4NDksMzM4NTAsMzM4NTEsMzM4NTQsMzM4NTUsMzM4NTYsMzM4NTcsMzM4NTgsMzM4NTksMzM4NjAsMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjUsMzM4NjYsMzM4NjcsMzM4NjgsMzM4NjksMzM4NzAsMzM4NzEsMzM4NzIsMzM4''@;'; put 'put ''NzQsMzM4NzUsMzM4NzYsMzM4NzcsMzM4NzgsMzM4ODAsMzM4ODUsMzM4ODYsMzM4ODcsMzM4ODgsMzM4OTAsMzM4OTIsMzM4OTMsMzM4OTQsMzM4OTUsMzM4OTYsMzM4OTgsMzM5MDIsMzM5MDMsMzM5MDQsMzM5MDYsMzM5MDgsMzM5MTEsMzM5MTMsMzM5MTUsMzM5MTYsMjE0NjIsMjMwOTQs''@;'; put 'put ''NDA4NDMsMzYyNTksMjE0MzUsMjIyODAsMzkwNzksMjY0MzUsMzcyNzUsMjc4NDksMjA4NDAsMzAxNTQsMjUzMzEsMjkzNTYsMjEwNDgsMjExNDksMzI1NzAsMjg4MjAsMzAyNjQsMjEzNjQsNDA1MjIsMjcwNjMsMzA4MzAsMzg1OTIsMzUwMzMsMzI2NzYsMjg5ODIsMjkxMjMsMjA4NzMsMjY1''@;'; put 'put ''NzksMjk5MjQsMjI3NTYsMjU4ODAsMjIxOTksMzU3NTMsMzkyODYsMjUyMDAsMzI0NjksMjQ4MjUsMjg5MDksMjI3NjQsMjAxNjEsMjAxNTQsMjQ1MjUsMzg4ODcsMjAyMTksMzU3NDgsMjA5OTUsMjI5MjIsMzI0MjcsMjUxNzIsMjAxNzMsMjYwODUsMjUxMDIsMzM1OTIsMzM5OTMsMzM2MzUs''@;'; put 'put ''MzQ3MDEsMjkwNzYsMjgzNDIsMjM0ODEsMzI0NjYsMjA4ODcsMjU1NDUsMjY1ODAsMzI5MDUsMzM1OTMsMzQ4MzcsMjA3NTQsMjM0MTgsMjI5MTQsMzY3ODUsMjAwODMsMjc3NDEsMjA4MzcsMzUxMDksMzY3MTksMzg0NDYsMzQxMjIsMjk3OTAsMzgxNjAsMzgzODQsMjgwNzAsMzM1MDksMjQz''@;'; put 'put ''NjksMjU3NDYsMjc5MjIsMzM4MzIsMzMxMzQsNDAxMzEsMjI2MjIsMzYxODcsMTk5NzcsMjE0NDEsMzM5MTcsMzM5MTgsMzM5MTksMzM5MjAsMzM5MjEsMzM5MjMsMzM5MjQsMzM5MjUsMzM5MjYsMzM5MzAsMzM5MzMsMzM5MzUsMzM5MzYsMzM5MzcsMzM5MzgsMzM5MzksMzM5NDAsMzM5NDEs''@;'; put 'put ''MzM5NDIsMzM5NDQsMzM5NDYsMzM5NDcsMzM5NDksMzM5NTAsMzM5NTEsMzM5NTIsMzM5NTQsMzM5NTUsMzM5NTYsMzM5NTcsMzM5NTgsMzM5NTksMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjMsMzM5NjQsMzM5NjUsMzM5NjYsMzM5NjgsMzM5NjksMzM5NzEsMzM5NzMsMzM5NzQsMzM5NzUsMzM5''@;'; put 'put ''NzksMzM5ODAsMzM5ODIsMzM5ODQsMzM5ODYsMzM5ODcsMzM5ODksMzM5OTAsMzM5OTEsMzM5OTIsMzM5OTUsMzM5OTYsMzM5OTgsMzM5OTksMzQwMDIsMzQwMDQsMzQwMDUsMzQwMDcsMzQwMDgsMzQwMDksMzQwMTAsMzQwMTEsMzQwMTIsMzQwMTQsMzQwMTcsMzQwMTgsMzQwMjAsMzQwMjMs''@;'; put 'put ''MzQwMjQsMzQwMjUsMzQwMjYsMzQwMjcsMzQwMjksMzQwMzAsMzQwMzEsMzQwMzMsMzQwMzQsMzQwMzUsMzQwMzYsMzQwMzcsMzQwMzgsMzQwMzksMzQwNDAsMzQwNDEsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNDYsMzQwNDgsMzQwNDksMzQwNTAsMjAyNTQsMjU5NTUsMjY3MDUsMjE5NzEsMjAw''@;'; put 'put ''MDcsMjU2MjAsMzk1NzgsMjUxOTUsMjMyMzQsMjk3OTEsMzMzOTQsMjgwNzMsMjY4NjIsMjA3MTEsMzM2NzgsMzA3MjIsMjY0MzIsMjEwNDksMjc4MDEsMzI0MzMsMjA2NjcsMjE4NjEsMjkwMjIsMzE1NzksMjYxOTQsMjk2NDIsMzM1MTUsMjY0NDEsMjM2NjUsMjEwMjQsMjkwNTMsMzQ5MjMs''@;'; put 'put ''MzgzNzgsMzg0ODUsMjU3OTcsMzYxOTMsMzMyMDMsMjE4OTIsMjc3MzMsMjUxNTksMzI1NTgsMjI2NzQsMjAyNjAsMjE4MzAsMzYxNzUsMjYxODgsMTk5NzgsMjM1NzgsMzUwNTksMjY3ODYsMjU0MjIsMzEyNDUsMjg5MDMsMzM0MjEsMjEyNDIsMzg5MDIsMjM1NjksMjE3MzYsMzcwNDUsMzI0''@;'; put 'put ''NjEsMjI4ODIsMzYxNzAsMzQ1MDMsMzMyOTIsMzMyOTMsMzYxOTgsMjU2NjgsMjM1NTYsMjQ5MTMsMjgwNDEsMzEwMzgsMzU3NzQsMzA3NzUsMzAwMDMsMjE2MjcsMjAyODAsMzY1MjMsMjgxNDUsMjMwNzIsMzI0NTMsMzEwNzAsMjc3ODQsMjM0NTcsMjMxNTgsMjk5NzgsMzI5NTgsMjQ5MTAs''@;'; put 'put ''MjgxODMsMjI3NjgsMjk5ODMsMjk5ODksMjkyOTgsMjEzMTksMzI0OTksMzQwNTEsMzQwNTIsMzQwNTMsMzQwNTQsMzQwNTUsMzQwNTYsMzQwNTcsMzQwNTgsMzQwNTksMzQwNjEsMzQwNjIsMzQwNjMsMzQwNjQsMzQwNjYsMzQwNjgsMzQwNjksMzQwNzAsMzQwNzIsMzQwNzMsMzQwNzUsMzQw''@;'; put 'put ''NzYsMzQwNzcsMzQwNzgsMzQwODAsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODYsMzQwODcsMzQwODgsMzQwODksMzQwOTAsMzQwOTMsMzQwOTQsMzQwOTUsMzQwOTYsMzQwOTcsMzQwOTgsMzQwOTksMzQxMDAsMzQxMDEsMzQxMDIsMzQxMTAsMzQxMTEsMzQxMTIsMzQxMTMsMzQxMTQs''@;'; put 'put ''MzQxMTYsMzQxMTcsMzQxMTgsMzQxMTksMzQxMjMsMzQxMjQsMzQxMjUsMzQxMjYsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzIsMzQxMzMsMzQxMzUsMzQxMzYsMzQxMzgsMzQxMzksMzQxNDAsMzQxNDEsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDcsMzQxNDksMzQx''@;'; put 'put ''NTAsMzQxNTEsMzQxNTMsMzQxNTQsMzQxNTUsMzQxNTYsMzQxNTcsMzQxNTgsMzQxNTksMzQxNjAsMzQxNjEsMzQxNjMsMzQxNjUsMzQxNjYsMzQxNjcsMzQxNjgsMzQxNzIsMzQxNzMsMzQxNzUsMzQxNzYsMzQxNzcsMzA0NjUsMzA0MjcsMjEwOTcsMzI5ODgsMjIzMDcsMjQwNzIsMjI4MzMs''@;'; put 'put ''Mjk0MjIsMjYwNDUsMjgyODcsMzU3OTksMjM2MDgsMzQ0MTcsMjEzMTMsMzA3MDcsMjUzNDIsMjYxMDIsMjAxNjAsMzkxMzUsMzQ0MzIsMjM0NTQsMzU3ODIsMjE0OTAsMzA2OTAsMjAzNTEsMjM2MzAsMzk1NDIsMjI5ODcsMjQzMzUsMzEwMzQsMjI3NjMsMTk5OTAsMjY2MjMsMjAxMDcsMjUz''@;'; put 'put ''MjUsMzU0NzUsMzY4OTMsMjExODMsMjYxNTksMjE5ODAsMjIxMjQsMzY4NjYsMjAxODEsMjAzNjUsMzczMjIsMzkyODAsMjc2NjMsMjQwNjYsMjQ2NDMsMjM0NjAsMzUyNzAsMzU3OTcsMjU5MTAsMjUxNjMsMzkzMTgsMjM0MzIsMjM1NTEsMjU0ODAsMjE4MDYsMjE0NjMsMzAyNDYsMjA4NjEs''@;'; put 'put ''MzQwOTIsMjY1MzAsMjY4MDMsMjc1MzAsMjUyMzQsMzY3NTUsMjE0NjAsMzMyOTgsMjgxMTMsMzAwOTUsMjAwNzAsMzYxNzQsMjM0MDgsMjkwODcsMzQyMjMsMjYyNTcsMjYzMjksMzI2MjYsMzQ1NjAsNDA2NTMsNDA3MzYsMjM2NDYsMjY0MTUsMzY4NDgsMjY2NDEsMjY0NjMsMjUxMDEsMzE0''@;'; put 'put ''NDYsMjI2NjEsMjQyNDYsMjU5NjgsMjg0NjUsMzQxNzgsMzQxNzksMzQxODIsMzQxODQsMzQxODUsMzQxODYsMzQxODcsMzQxODgsMzQxODksMzQxOTAsMzQxOTIsMzQxOTMsMzQxOTQsMzQxOTUsMzQxOTYsMzQxOTcsMzQxOTgsMzQxOTksMzQyMDAsMzQyMDEsMzQyMDIsMzQyMDUsMzQyMDYs''@;'; put 'put ''MzQyMDcsMzQyMDgsMzQyMDksMzQyMTAsMzQyMTEsMzQyMTMsMzQyMTQsMzQyMTUsMzQyMTcsMzQyMTksMzQyMjAsMzQyMjEsMzQyMjUsMzQyMjYsMzQyMjcsMzQyMjgsMzQyMjksMzQyMzAsMzQyMzIsMzQyMzQsMzQyMzUsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDAsMzQyNDIsMzQy''@;'; put 'put ''NDMsMzQyNDQsMzQyNDUsMzQyNDYsMzQyNDcsMzQyNDgsMzQyNTAsMzQyNTEsMzQyNTIsMzQyNTMsMzQyNTQsMzQyNTcsMzQyNTgsMzQyNjAsMzQyNjIsMzQyNjMsMzQyNjQsMzQyNjUsMzQyNjYsMzQyNjcsMzQyNjksMzQyNzAsMzQyNzEsMzQyNzIsMzQyNzMsMzQyNzQsMzQyNzUsMzQyNzcs''@;'; put 'put ''MzQyNzgsMzQyNzksMzQyODAsMzQyODIsMzQyODMsMzQyODQsMzQyODUsMzQyODYsMzQyODcsMzQyODgsMzQyODksMzQyOTAsMzQyOTEsMzQyOTIsMzQyOTMsMzQyOTQsMzQyOTUsMzQyOTYsMjQ2NjEsMjEwNDcsMzI3ODEsMjU2ODQsMzQ5MjgsMjk5OTMsMjQwNjksMjY2NDMsMjUzMzIsMzg2''@;'; put 'put ''ODQsMjE0NTIsMjkyNDUsMzU4NDEsMjc3MDAsMzA1NjEsMzEyNDYsMjE1NTAsMzA2MzYsMzkwMzQsMzMzMDgsMzU4MjgsMzA4MDUsMjYzODgsMjg4NjUsMjYwMzEsMjU3NDksMjIwNzAsMjQ2MDUsMzExNjksMjE0OTYsMTk5OTcsMjc1MTUsMzI5MDIsMjM1NDYsMjE5ODcsMjIyMzUsMjAyODIs''@;'; put 'put ''MjAyODQsMzkyODIsMjQwNTEsMjY0OTQsMzI4MjQsMjQ1NzgsMzkwNDIsMzY4NjUsMjM0MzUsMzU3NzIsMzU4MjksMjU2MjgsMzMzNjgsMjU4MjIsMjIwMTMsMzM0ODcsMzcyMjEsMjA0MzksMzIwMzIsMzY4OTUsMzE5MDMsMjA3MjMsMjI2MDksMjgzMzUsMjM0ODcsMzU3ODUsMzI4OTksMzcy''@;'; put 'put ''NDAsMzM5NDgsMzE2MzksMzQ0MjksMzg1MzksMzg1NDMsMzI0ODUsMzk2MzUsMzA4NjIsMjM2ODEsMzEzMTksMzY5MzAsMzg1NjcsMzEwNzEsMjMzODUsMjU0MzksMzE0OTksMzQwMDEsMjY3OTcsMjE3NjYsMzI1NTMsMjk3MTIsMzIwMzQsMzgxNDUsMjUxNTIsMjI2MDQsMjAxODIsMjM0Mjcs''@;'; put 'put ''MjI5MDUsMjI2MTIsMzQyOTcsMzQyOTgsMzQzMDAsMzQzMDEsMzQzMDIsMzQzMDQsMzQzMDUsMzQzMDYsMzQzMDcsMzQzMDgsMzQzMTAsMzQzMTEsMzQzMTIsMzQzMTMsMzQzMTQsMzQzMTUsMzQzMTYsMzQzMTcsMzQzMTgsMzQzMTksMzQzMjAsMzQzMjIsMzQzMjMsMzQzMjQsMzQzMjUsMzQz''@;'; put 'put ''MjcsMzQzMjgsMzQzMjksMzQzMzAsMzQzMzEsMzQzMzIsMzQzMzMsMzQzMzQsMzQzMzUsMzQzMzYsMzQzMzcsMzQzMzgsMzQzMzksMzQzNDAsMzQzNDEsMzQzNDIsMzQzNDQsMzQzNDYsMzQzNDcsMzQzNDgsMzQzNDksMzQzNTAsMzQzNTEsMzQzNTIsMzQzNTMsMzQzNTQsMzQzNTUsMzQzNTYs''@;'; put 'put ''MzQzNTcsMzQzNTgsMzQzNTksMzQzNjEsMzQzNjIsMzQzNjMsMzQzNjUsMzQzNjYsMzQzNjcsMzQzNjgsMzQzNjksMzQzNzAsMzQzNzEsMzQzNzIsMzQzNzMsMzQzNzQsMzQzNzUsMzQzNzYsMzQzNzcsMzQzNzgsMzQzNzksMzQzODAsMzQzODYsMzQzODcsMzQzODksMzQzOTAsMzQzOTEsMzQz''@;'; put 'put ''OTIsMzQzOTMsMzQzOTUsMzQzOTYsMzQzOTcsMzQzOTksMzQ0MDAsMzQ0MDEsMzQ0MDMsMzQ0MDQsMzQ0MDUsMzQ0MDYsMzQ0MDcsMzQ0MDgsMzQ0MDksMzQ0MTAsMjk1NDksMjUzNzQsMzY0MjcsMzYzNjcsMzI5NzQsMzM0OTIsMjUyNjAsMjE0ODgsMjc4ODgsMzcyMTQsMjI4MjYsMjQ1Nzcs''@;'; put 'put ''Mjc3NjAsMjIzNDksMjU2NzQsMzYxMzgsMzAyNTEsMjgzOTMsMjIzNjMsMjcyNjQsMzAxOTIsMjg1MjUsMzU4ODUsMzU4NDgsMjIzNzQsMjc2MzEsMzQ5NjIsMzA4OTksMjU1MDYsMjE0OTcsMjg4NDUsMjc3NDgsMjI2MTYsMjU2NDIsMjI1MzAsMjY4NDgsMzMxNzksMjE3NzYsMzE5NTgsMjA1''@;'; put 'put ''MDQsMzY1MzgsMjgxMDgsMzYyNTUsMjg5MDcsMjU0ODcsMjgwNTksMjgzNzIsMzI0ODYsMzM3OTYsMjY2OTEsMzY4NjcsMjgxMjAsMzg1MTgsMzU3NTIsMjI4NzEsMjkzMDUsMzQyNzYsMzMxNTAsMzAxNDAsMzU0NjYsMjY3OTksMjEwNzYsMzYzODYsMzgxNjEsMjU1NTIsMzkwNjQsMzY0MjAs''@;'; put 'put ''MjE4ODQsMjAzMDcsMjYzNjcsMjIxNTksMjQ3ODksMjgwNTMsMjEwNTksMjM2MjUsMjI4MjUsMjgxNTUsMjI2MzUsM2U0LDI5OTgwLDI0Njg0LDMzMzAwLDMzMDk0LDI1MzYxLDI2NDY1LDM2ODM0LDMwNTIyLDM2MzM5LDM2MTQ4LDM4MDgxLDI0MDg2LDIxMzgxLDIxNTQ4LDI4ODY3LDM0NDEz''@;'; put 'put ''LDM0NDE1LDM0NDE2LDM0NDE4LDM0NDE5LDM0NDIwLDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI0LDM0NDM1LDM0NDM2LDM0NDM3LDM0NDM4LDM0NDM5LDM0NDQwLDM0NDQxLDM0NDQ2LDM0NDQ3LDM0NDQ4LDM0NDQ5LDM0NDUwLDM0NDUyLDM0NDU0LDM0NDU1LDM0NDU2LDM0NDU3LDM0NDU4LDM0''@;'; put 'put ''NDU5LDM0NDYyLDM0NDYzLDM0NDY0LDM0NDY1LDM0NDY2LDM0NDY5LDM0NDcwLDM0NDc1LDM0NDc3LDM0NDc4LDM0NDgyLDM0NDgzLDM0NDg3LDM0NDg4LDM0NDg5LDM0NDkxLDM0NDkyLDM0NDkzLDM0NDk0LDM0NDk1LDM0NDk3LDM0NDk4LDM0NDk5LDM0NTAxLDM0NTA0LDM0NTA4LDM0NTA5''@;'; put 'put ''LDM0NTE0LDM0NTE1LDM0NTE3LDM0NTE4LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI1LDM0NTI4LDM0NTI5LDM0NTMwLDM0NTMxLDM0NTMzLDM0NTM0LDM0NTM1LDM0NTM2LDM0NTM4LDM0NTM5LDM0NTQwLDM0NTQzLDM0NTQ5LDM0NTUwLDM0NTUxLDM0NTU0LDM0NTU1LDM0NTU2LDM0NTU3LDM0''@;'; put 'put ''NTU5LDM0NTYxLDM0NTY0LDM0NTY1LDM0NTY2LDM0NTcxLDM0NTcyLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc3LDM0NTgwLDM0NTgyLDI3NzEyLDI0MzExLDIwNTcyLDIwMTQxLDI0MjM3LDI1NDAyLDMzMzUxLDM2ODkwLDI2NzA0LDM3MjMwLDMwNjQzLDIxNTE2LDM4MTA4LDI0NDIwLDMxNDYx''@;'; put 'put ''LDI2NzQyLDI1NDEzLDMxNTcwLDMyNDc5LDMwMTcxLDIwNTk5LDI1MjM3LDIyODM2LDM2ODc5LDIwOTg0LDMxMTcxLDMxMzYxLDIyMjcwLDI0NDY2LDM2ODg0LDI4MDM0LDIzNjQ4LDIyMzAzLDIxNTIwLDIwODIwLDI4MjM3LDIyMjQyLDI1NTEyLDM5MDU5LDMzMTUxLDM0NTgxLDM1MTE0LDM2''@;'; put 'put ''ODY0LDIxNTM0LDIzNjYzLDMzMjE2LDI1MzAyLDI1MTc2LDMzMDczLDQwNTAxLDM4NDY0LDM5NTM0LDM5NTQ4LDI2OTI1LDIyOTQ5LDI1Mjk5LDIxODIyLDI1MzY2LDIxNzAzLDM0NTIxLDI3OTY0LDIzMDQzLDI5OTI2LDM0OTcyLDI3NDk4LDIyODA2LDM1OTE2LDI0MzY3LDI4Mjg2LDI5NjA5''@;'; put 'put ''LDM5MDM3LDIwMDI0LDI4OTE5LDIzNDM2LDMwODcxLDI1NDA1LDI2MjAyLDMwMzU4LDI0Nzc5LDIzNDUxLDIzMTEzLDE5OTc1LDMzMTA5LDI3NzU0LDI5NTc5LDIwMTI5LDI2NTA1LDMyNTkzLDI0NDQ4LDI2MTA2LDI2Mzk1LDI0NTM2LDIyOTE2LDIzMDQxLDM0NTg1LDM0NTg3LDM0NTg5LDM0''@;'; put 'put ''NTkxLDM0NTkyLDM0NTk2LDM0NTk4LDM0NTk5LDM0NjAwLDM0NjAyLDM0NjAzLDM0NjA0LDM0NjA1LDM0NjA3LDM0NjA4LDM0NjEwLDM0NjExLDM0NjEzLDM0NjE0LDM0NjE2LDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjI0LDM0NjI1LDM0NjI2LDM0NjI3LDM0NjI4LDM0NjI5LDM0NjMw''@;'; put 'put ''LDM0NjM0LDM0NjM1LDM0NjM3LDM0NjM5LDM0NjQwLDM0NjQxLDM0NjQyLDM0NjQ0LDM0NjQ1LDM0NjQ2LDM0NjQ4LDM0NjUwLDM0NjUxLDM0NjUyLDM0NjUzLDM0NjU0LDM0NjU1LDM0NjU3LDM0NjU4LDM0NjYyLDM0NjYzLDM0NjY0LDM0NjY1LDM0NjY2LDM0NjY3LDM0NjY4LDM0NjY5LDM0''@;'; put 'put ''NjcxLDM0NjczLDM0Njc0LDM0Njc1LDM0Njc3LDM0Njc5LDM0NjgwLDM0NjgxLDM0NjgyLDM0Njg3LDM0Njg4LDM0Njg5LDM0NjkyLDM0Njk0LDM0Njk1LDM0Njk3LDM0Njk4LDM0NzAwLDM0NzAyLDM0NzAzLDM0NzA0LDM0NzA1LDM0NzA2LDM0NzA4LDM0NzA5LDM0NzEwLDM0NzEyLDM0NzEz''@;'; put 'put ''LDM0NzE0LDM0NzE1LDM0NzE2LDM0NzE3LDM0NzE4LDM0NzIwLDM0NzIxLDM0NzIyLDM0NzIzLDM0NzI0LDI0MDEzLDI0NDk0LDIxMzYxLDM4ODg2LDM2ODI5LDI2NjkzLDIyMjYwLDIxODA3LDI0Nzk5LDIwMDI2LDI4NDkzLDMyNTAwLDMzNDc5LDMzODA2LDIyOTk2LDIwMjU1LDIwMjY2LDIz''@;'; put 'put ''NjE0LDMyNDI4LDI2NDEwLDM0MDc0LDIxNjE5LDMwMDMxLDMyOTYzLDIxODkwLDM5NzU5LDIwMzAxLDI4MjA1LDM1ODU5LDIzNTYxLDI0OTQ0LDIxMzU1LDMwMjM5LDI4MjAxLDM0NDQyLDI1OTkxLDM4Mzk1LDMyNDQxLDIxNTYzLDMxMjgzLDMyMDEwLDM4MzgyLDIxOTg1LDMyNzA1LDI5OTM0''@;'; put 'put ''LDI1MzczLDM0NTgzLDI4MDY1LDMxMzg5LDI1MTA1LDI2MDE3LDIxMzUxLDI1NTY5LDI3Nzc5LDI0MDQzLDIxNTk2LDM4MDU2LDIwMDQ0LDI3NzQ1LDM1ODIwLDIzNjI3LDI2MDgwLDMzNDM2LDI2NzkxLDIxNTY2LDIxNTU2LDI3NTk1LDI3NDk0LDIwMTE2LDI1NDEwLDIxMzIwLDMzMzEwLDIw''@;'; put 'put ''MjM3LDIwMzk4LDIyMzY2LDI1MDk4LDM4NjU0LDI2MjEyLDI5Mjg5LDIxMjQ3LDIxMTUzLDI0NzM1LDM1ODIzLDI2MTMyLDI5MDgxLDI2NTEyLDM1MTk5LDMwODAyLDMwNzE3LDI2MjI0LDIyMDc1LDIxNTYwLDM4MTc3LDI5MzA2LDM0NzI1LDM0NzI2LDM0NzI3LDM0NzI5LDM0NzMwLDM0NzM0''@;'; put 'put ''LDM0NzM2LDM0NzM3LDM0NzM4LDM0NzQwLDM0NzQyLDM0NzQzLDM0NzQ0LDM0NzQ1LDM0NzQ3LDM0NzQ4LDM0NzUwLDM0NzUxLDM0NzUzLDM0NzU0LDM0NzU1LDM0NzU2LDM0NzU3LDM0NzU5LDM0NzYwLDM0NzYxLDM0NzY0LDM0NzY1LDM0NzY2LDM0NzY3LDM0NzY4LDM0NzcyLDM0NzczLDM0''@;'; put 'put ''Nzc0LDM0Nzc1LDM0Nzc2LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgxLDM0NzgyLDM0NzgzLDM0Nzg1LDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0NzkwLDM0NzkxLDM0NzkyLDM0NzkzLDM0Nzk1LDM0Nzk2LDM0Nzk3LDM0Nzk5LDM0ODAwLDM0ODAxLDM0ODAyLDM0ODAzLDM0ODA0LDM0ODA1LDM0ODA2''@;'; put 'put ''LDM0ODA3LDM0ODA4LDM0ODEwLDM0ODExLDM0ODEyLDM0ODEzLDM0ODE1LDM0ODE2LDM0ODE3LDM0ODE4LDM0ODIwLDM0ODIxLDM0ODIyLDM0ODIzLDM0ODI0LDM0ODI1LDM0ODI3LDM0ODI4LDM0ODI5LDM0ODMwLDM0ODMxLDM0ODMyLDM0ODMzLDM0ODM0LDM0ODM2LDM0ODM5LDM0ODQwLDM0''@;'; put 'put ''ODQxLDM0ODQyLDM0ODQ0LDM0ODQ1LDM0ODQ2LDM0ODQ3LDM0ODQ4LDM0ODUxLDMxMjMyLDI0Njg3LDI0MDc2LDI0NzEzLDMzMTgxLDIyODA1LDI0Nzk2LDI5MDYwLDI4OTExLDI4MzMwLDI3NzI4LDI5MzEyLDI3MjY4LDM0OTg5LDI0MTA5LDIwMDY0LDIzMjE5LDIxOTE2LDM4MTE1LDI3OTI3''@;'; put 'put ''LDMxOTk1LDM4NTUzLDI1MTAzLDMyNDU0LDMwNjA2LDM0NDMwLDIxMjgzLDM4Njg2LDM2NzU4LDI2MjQ3LDIzNzc3LDIwMzg0LDI5NDIxLDE5OTc5LDIxNDE0LDIyNzk5LDIxNTIzLDI1NDcyLDM4MTg0LDIwODA4LDIwMTg1LDQwMDkyLDMyNDIwLDIxNjg4LDM2MTMyLDM0OTAwLDMzMzM1LDM4''@;'; put 'put ''Mzg2LDI4MDQ2LDI0MzU4LDIzMjQ0LDI2MTc0LDM4NTA1LDI5NjE2LDI5NDg2LDIxNDM5LDMzMTQ2LDM5MzAxLDMyNjczLDIzNDY2LDM4NTE5LDM4NDgwLDMyNDQ3LDMwNDU2LDIxNDEwLDM4MjYyLDM5MzIxLDMxNjY1LDM1MTQwLDI4MjQ4LDIwMDY1LDMyNzI0LDMxMDc3LDM1ODE0LDI0ODE5''@;'; put 'put ''LDIxNzA5LDIwMTM5LDM5MDMzLDI0MDU1LDI3MjMzLDIwNjg3LDIxNTIxLDM1OTM3LDMzODMxLDMwODEzLDM4NjYwLDIxMDY2LDIxNzQyLDIyMTc5LDM4MTQ0LDI4MDQwLDIzNDc3LDI4MTAyLDI2MTk1LDM0ODUyLDM0ODUzLDM0ODU0LDM0ODU1LDM0ODU2LDM0ODU3LDM0ODU4LDM0ODU5LDM0''@;'; put 'put ''ODYwLDM0ODYxLDM0ODYyLDM0ODYzLDM0ODY0LDM0ODY1LDM0ODY3LDM0ODY4LDM0ODY5LDM0ODcwLDM0ODcxLDM0ODcyLDM0ODc0LDM0ODc1LDM0ODc3LDM0ODc4LDM0ODc5LDM0ODgxLDM0ODgyLDM0ODgzLDM0ODg2LDM0ODg3LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk1''@;'; put 'put ''LDM0ODk2LDM0ODk3LDM0ODk4LDM0ODk5LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA3LDM0OTA4LDM0OTA5LDM0OTEwLDM0OTExLDM0OTEyLDM0OTE4LDM0OTE5LDM0OTIyLDM0OTI1LDM0OTI3LDM0OTI5LDM0OTMxLDM0OTMyLDM0OTMzLDM0OTM0LDM0OTM2LDM0OTM3LDM0OTM4LDM0''@;'; put 'put ''OTM5LDM0OTQwLDM0OTQ0LDM0OTQ3LDM0OTUwLDM0OTUxLDM0OTUzLDM0OTU0LDM0OTU2LDM0OTU4LDM0OTU5LDM0OTYwLDM0OTYxLDM0OTYzLDM0OTY0LDM0OTY1LDM0OTY3LDM0OTY4LDM0OTY5LDM0OTcwLDM0OTcxLDM0OTczLDM0OTc0LDM0OTc1LDM0OTc2LDM0OTc3LDM0OTc5LDM0OTgx''@;'; put 'put ''LDM0OTgyLDM0OTgzLDM0OTg0LDM0OTg1LDM0OTg2LDIzNTY3LDIzMzg5LDI2NjU3LDMyOTE4LDIxODgwLDMxNTA1LDI1OTI4LDI2OTY0LDIwMTIzLDI3NDYzLDM0NjM4LDM4Nzk1LDIxMzI3LDI1Mzc1LDI1NjU4LDM3MDM0LDI2MDEyLDMyOTYxLDM1ODU2LDIwODg5LDI2ODAwLDIxMzY4LDM0''@;'; put 'put ''ODA5LDI1MDMyLDI3ODQ0LDI3ODk5LDM1ODc0LDIzNjMzLDM0MjE4LDMzNDU1LDM4MTU2LDI3NDI3LDM2NzYzLDI2MDMyLDI0NTcxLDI0NTE1LDIwNDQ5LDM0ODg1LDI2MTQzLDMzMTI1LDI5NDgxLDI0ODI2LDIwODUyLDIxMDA5LDIyNDExLDI0NDE4LDM3MDI2LDM0ODkyLDM3MjY2LDI0MTg0''@;'; put 'put ''LDI2NDQ3LDI0NjE1LDIyOTk1LDIwODA0LDIwOTgyLDMzMDE2LDIxMjU2LDI3NzY5LDM4NTk2LDI5MDY2LDIwMjQxLDIwNDYyLDMyNjcwLDI2NDI5LDIxOTU3LDM4MTUyLDMxMTY4LDM0OTY2LDMyNDgzLDIyNjg3LDI1MTAwLDM4NjU2LDM0Mzk0LDIyMDQwLDM5MDM1LDI0NDY0LDM1NzY4LDMz''@;'; put 'put ''OTg4LDM3MjA3LDIxNDY1LDI2MDkzLDI0MjA3LDMwMDQ0LDI0Njc2LDMyMTEwLDIzMTY3LDMyNDkwLDMyNDkzLDM2NzEzLDIxOTI3LDIzNDU5LDI0NzQ4LDI2MDU5LDI5NTcyLDM0OTg4LDM0OTkwLDM0OTkxLDM0OTkyLDM0OTk0LDM0OTk1LDM0OTk2LDM0OTk3LDM0OTk4LDM1ZTMsMzUwMDEs''@;'; put 'put ''MzUwMDIsMzUwMDMsMzUwMDUsMzUwMDYsMzUwMDcsMzUwMDgsMzUwMTEsMzUwMTIsMzUwMTUsMzUwMTYsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjMsMzUwMjQsMzUwMjUsMzUwMjcsMzUwMzAsMzUwMzEsMzUwMzQsMzUwMzUsMzUwMzYsMzUwMzcsMzUwMzgsMzUwNDAsMzUwNDEsMzUw''@;'; put 'put ''NDYsMzUwNDcsMzUwNDksMzUwNTAsMzUwNTEsMzUwNTIsMzUwNTMsMzUwNTQsMzUwNTUsMzUwNTgsMzUwNjEsMzUwNjIsMzUwNjMsMzUwNjYsMzUwNjcsMzUwNjksMzUwNzEsMzUwNzIsMzUwNzMsMzUwNzUsMzUwNzYsMzUwNzcsMzUwNzgsMzUwNzksMzUwODAsMzUwODEsMzUwODMsMzUwODQs''@;'; put 'put ''MzUwODUsMzUwODYsMzUwODcsMzUwODksMzUwOTIsMzUwOTMsMzUwOTQsMzUwOTUsMzUwOTYsMzUxMDAsMzUxMDEsMzUxMDIsMzUxMDMsMzUxMDQsMzUxMDYsMzUxMDcsMzUxMDgsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMTMsMzUxMTYsMzUxMTcsMzUxMTgsMzUxMTksMzUxMjEsMzUxMjIsMzUx''@;'; put 'put ''MjMsMzUxMjUsMzUxMjcsMzY4NzMsMzAzMDcsMzA1MDUsMzI0NzQsMzg3NzIsMzQyMDMsMjMzOTgsMzEzNDgsMzg2MzQsMzQ4ODAsMjExOTUsMjkwNzEsMjQ0OTAsMjYwOTIsMzU4MTAsMjM1NDcsMzk1MzUsMjQwMzMsMjc1MjksMjc3MzksMzU3NTcsMzU3NTksMzY4NzQsMzY4MDUsMjEzODcs''@;'; put 'put ''MjUyNzYsNDA0ODYsNDA0OTMsMjE1NjgsMjAwMTEsMzM0NjksMjkyNzMsMzQ0NjAsMjM4MzAsMzQ5MDUsMjgwNzksMzg1OTcsMjE3MTMsMjAxMjIsMzU3NjYsMjg5MzcsMjE2OTMsMzg0MDksMjg4OTUsMjgxNTMsMzA0MTYsMjAwMDUsMzA3NDAsMzQ1NzgsMjM3MjEsMjQzMTAsMzUzMjgsMzkw''@;'; put 'put ''NjgsMzg0MTQsMjg4MTQsMjc4MzksMjI4NTIsMjU1MTMsMzA1MjQsMzQ4OTMsMjg0MzYsMzMzOTUsMjI1NzYsMjkxNDEsMjEzODgsMzA3NDYsMzg1OTMsMjE3NjEsMjQ0MjIsMjg5NzYsMjM0NzYsMzU4NjYsMzk1NjQsMjc1MjMsMjI4MzAsNDA0OTUsMzEyMDcsMjY0NzIsMjUxOTYsMjAzMzUs''@;'; put 'put ''MzAxMTMsMzI2NTAsMjc5MTUsMzg0NTEsMjc2ODcsMjAyMDgsMzAxNjIsMjA4NTksMjY2NzksMjg0NzgsMzY5OTIsMzMxMzYsMjI5MzQsMjk4MTQsMzUxMjgsMzUxMjksMzUxMzAsMzUxMzEsMzUxMzIsMzUxMzMsMzUxMzQsMzUxMzUsMzUxMzYsMzUxMzgsMzUxMzksMzUxNDEsMzUxNDIsMzUx''@;'; put 'put ''NDMsMzUxNDQsMzUxNDUsMzUxNDYsMzUxNDcsMzUxNDgsMzUxNDksMzUxNTAsMzUxNTEsMzUxNTIsMzUxNTMsMzUxNTQsMzUxNTUsMzUxNTYsMzUxNTcsMzUxNTgsMzUxNTksMzUxNjAsMzUxNjEsMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjUsMzUxNjgsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzIs''@;'; put 'put ''MzUxNzMsMzUxNzUsMzUxNzYsMzUxNzcsMzUxNzgsMzUxNzksMzUxODAsMzUxODEsMzUxODIsMzUxODMsMzUxODQsMzUxODUsMzUxODYsMzUxODcsMzUxODgsMzUxODksMzUxOTAsMzUxOTEsMzUxOTIsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTcsMzUxOTgsMzUyMDAsMzUyMDIsMzUyMDQsMzUy''@;'; put 'put ''MDUsMzUyMDcsMzUyMDgsMzUyMDksMzUyMTAsMzUyMTEsMzUyMTIsMzUyMTMsMzUyMTQsMzUyMTUsMzUyMTYsMzUyMTcsMzUyMTgsMzUyMTksMzUyMjAsMzUyMjEsMzUyMjIsMzUyMjMsMzUyMjQsMzUyMjUsMzUyMjYsMzUyMjcsMzUyMjgsMzUyMjksMzUyMzAsMzUyMzEsMzUyMzIsMzUyMzMs''@;'; put 'put ''MjU2NzEsMjM1OTEsMzY5NjUsMzEzNzcsMzU4NzUsMjMwMDIsMjE2NzYsMzMyODAsMzM2NDcsMzUyMDEsMzI3NjgsMjY5MjgsMjIwOTQsMzI4MjIsMjkyMzksMzczMjYsMjA5MTgsMjAwNjMsMzkwMjksMjU0OTQsMTk5OTQsMjE0OTQsMjYzNTUsMzMwOTksMjI4MTIsMjgwODIsMTk5NjgsMjI3''@;'; put 'put ''NzcsMjEzMDcsMjU1NTgsMzgxMjksMjAzODEsMjAyMzQsMzQ5MTUsMzkwNTYsMjI4MzksMzY5NTEsMzEyMjcsMjAyMDIsMzMwMDgsMzAwOTcsMjc3NzgsMjM0NTIsMjMwMTYsMjQ0MTMsMjY4ODUsMzQ0MzMsMjA1MDYsMjQwNTAsMjAwNTcsMzA2OTEsMjAxOTcsMzM0MDIsMjUyMzMsMjYxMzEs''@;'; put 'put ''MzcwMDksMjM2NzMsMjAxNTksMjQ0NDEsMzMyMjIsMzY5MjAsMzI5MDAsMzAxMjMsMjAxMzQsMzUwMjgsMjQ4NDcsMjc1ODksMjQ1MTgsMjAwNDEsMzA0MTAsMjgzMjIsMzU4MTEsMzU3NTgsMzU4NTAsMzU3OTMsMjQzMjIsMzI3NjQsMzI3MTYsMzI0NjIsMzM1ODksMzM2NDMsMjIyNDAsMjc1''@;'; put 'put ''NzUsMzg4OTksMzg0NTIsMjMwMzUsMjE1MzUsMzgxMzQsMjgxMzksMjM0OTMsMzkyNzgsMjM2MDksMjQzNDEsMzg1NDQsMzUyMzQsMzUyMzUsMzUyMzYsMzUyMzcsMzUyMzgsMzUyMzksMzUyNDAsMzUyNDEsMzUyNDIsMzUyNDMsMzUyNDQsMzUyNDUsMzUyNDYsMzUyNDcsMzUyNDgsMzUyNDks''@;'; put 'put ''MzUyNTAsMzUyNTEsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNTYsMzUyNTcsMzUyNTgsMzUyNTksMzUyNjAsMzUyNjEsMzUyNjIsMzUyNjMsMzUyNjQsMzUyNjcsMzUyNzcsMzUyODMsMzUyODQsMzUyODUsMzUyODcsMzUyODgsMzUyODksMzUyOTEsMzUyOTMsMzUyOTUsMzUyOTYsMzUy''@;'; put 'put ''OTcsMzUyOTgsMzUzMDAsMzUzMDMsMzUzMDQsMzUzMDUsMzUzMDYsMzUzMDgsMzUzMDksMzUzMTAsMzUzMTIsMzUzMTMsMzUzMTQsMzUzMTYsMzUzMTcsMzUzMTgsMzUzMTksMzUzMjAsMzUzMjEsMzUzMjIsMzUzMjMsMzUzMjQsMzUzMjUsMzUzMjYsMzUzMjcsMzUzMjksMzUzMzAsMzUzMzEs''@;'; put 'put ''MzUzMzIsMzUzMzMsMzUzMzQsMzUzMzYsMzUzMzcsMzUzMzgsMzUzMzksMzUzNDAsMzUzNDEsMzUzNDIsMzUzNDMsMzUzNDQsMzUzNDUsMzUzNDYsMzUzNDcsMzUzNDgsMzUzNDksMzUzNTAsMzUzNTEsMzUzNTIsMzUzNTMsMzUzNTQsMzUzNTUsMzUzNTYsMzUzNTcsMjEzNjAsMzM1MjEsMjcx''@;'; put 'put ''ODUsMjMxNTYsNDA1NjAsMjQyMTIsMzI1NTIsMzM3MjEsMzM4MjgsMzM4MjksMzM2MzksMzQ2MzEsMzY4MTQsMzYxOTQsMzA0MDgsMjQ0MzMsMzkwNjIsMzA4MjgsMjYxNDQsMjE3MjcsMjUzMTcsMjAzMjMsMzMyMTksMzAxNTIsMjQyNDgsMzg2MDUsMzYzNjIsMzQ1NTMsMjE2NDcsMjc4OTEs''@;'; put 'put ''MjgwNDQsMjc3MDQsMjQ3MDMsMjExOTEsMjk5OTIsMjQxODksMjAyNDgsMjQ3MzYsMjQ1NTEsMjM1ODgsMzAwMDEsMzcwMzgsMzgwODAsMjkzNjksMjc4MzMsMjgyMTYsMzcxOTMsMjYzNzcsMjE0NTEsMjE0OTEsMjAzMDUsMzczMjEsMzU4MjUsMjE0NDgsMjQxODgsMzY4MDIsMjgxMzIsMjAx''@;'; put 'put ''MTAsMzA0MDIsMjcwMTQsMzQzOTgsMjQ4NTgsMzMyODYsMjAzMTMsMjA0NDYsMzY5MjYsNDAwNjAsMjQ4NDEsMjgxODksMjgxODAsMzg1MzMsMjAxMDQsMjMwODksMzg2MzIsMTk5ODIsMjM2NzksMzExNjEsMjM0MzEsMzU4MjEsMzI3MDEsMjk1NzcsMjI0OTUsMzM0MTksMzcwNTcsMjE1MDUs''@;'; put 'put ''MzY5MzUsMjE5NDcsMjM3ODYsMjQ0ODEsMjQ4NDAsMjc0NDIsMjk0MjUsMzI5NDYsMzU0NjUsMzUzNTgsMzUzNTksMzUzNjAsMzUzNjEsMzUzNjIsMzUzNjMsMzUzNjQsMzUzNjUsMzUzNjYsMzUzNjcsMzUzNjgsMzUzNjksMzUzNzAsMzUzNzEsMzUzNzIsMzUzNzMsMzUzNzQsMzUzNzUsMzUz''@;'; put 'put ''NzYsMzUzNzcsMzUzNzgsMzUzNzksMzUzODAsMzUzODEsMzUzODIsMzUzODMsMzUzODQsMzUzODUsMzUzODYsMzUzODcsMzUzODgsMzUzODksMzUzOTEsMzUzOTIsMzUzOTMsMzUzOTQsMzUzOTUsMzUzOTYsMzUzOTcsMzUzOTgsMzUzOTksMzU0MDEsMzU0MDIsMzU0MDMsMzU0MDQsMzU0MDUs''@;'; put 'put ''MzU0MDYsMzU0MDcsMzU0MDgsMzU0MDksMzU0MTAsMzU0MTEsMzU0MTIsMzU0MTMsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MTcsMzU0MTgsMzU0MTksMzU0MjAsMzU0MjEsMzU0MjIsMzU0MjMsMzU0MjQsMzU0MjUsMzU0MjYsMzU0MjcsMzU0MjgsMzU0MjksMzU0MzAsMzU0MzEsMzU0MzIsMzU0''@;'; put 'put ''MzMsMzU0MzQsMzU0MzUsMzU0MzYsMzU0MzcsMzU0MzgsMzU0MzksMzU0NDAsMzU0NDEsMzU0NDIsMzU0NDMsMzU0NDQsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDgsMzU0NTAsMzU0NTEsMzU0NTIsMzU0NTMsMzU0NTQsMzU0NTUsMzU0NTYsMjgwMjAsMjM1MDcsMzUwMjksMzkwNDQsMzU5NDcs''@;'; put 'put ''Mzk1MzMsNDA0OTksMjgxNzAsMjA5MDAsMjA4MDMsMjI0MzUsMzQ5NDUsMjE0MDcsMjU1ODgsMzY3NTcsMjIyNTMsMjE1OTIsMjIyNzgsMjk1MDMsMjgzMDQsMzI1MzYsMzY4MjgsMzM0ODksMjQ4OTUsMjQ2MTYsMzg0OTgsMjYzNTIsMzI0MjIsMzYyMzQsMzYyOTEsMzgwNTMsMjM3MzEsMzE5''@;'; put 'put ''MDgsMjYzNzYsMjQ3NDIsMzg0MDUsMzI3OTIsMjAxMTMsMzcwOTUsMjEyNDgsMzg1MDQsMjA4MDEsMzY4MTYsMzQxNjQsMzcyMTMsMjYxOTcsMzg5MDEsMjMzODEsMjEyNzcsMzA3NzYsMjY0MzQsMjY2ODUsMjE3MDUsMjg3OTgsMjM0NzIsMzY3MzMsMjA4NzcsMjIzMTIsMjE2ODEsMjU4NzQs''@;'; put 'put ''MjYyNDIsMzYxOTAsMzYxNjMsMzMwMzksMzM5MDAsMzY5NzMsMzE5NjcsMjA5OTEsMzQyOTksMjY1MzEsMjYwODksMjg1NzcsMzQ0NjgsMzY0ODEsMjIxMjIsMzY4OTYsMzAzMzgsMjg3OTAsMjkxNTcsMzYxMzEsMjUzMjEsMjEwMTcsMjc5MDEsMzYxNTYsMjQ1OTAsMjI2ODYsMjQ5NzQsMjYz''@;'; put 'put ''NjYsMzYxOTIsMjUxNjYsMjE5MzksMjgxOTUsMjY0MTMsMzY3MTEsMzU0NTcsMzU0NTgsMzU0NTksMzU0NjAsMzU0NjEsMzU0NjIsMzU0NjMsMzU0NjQsMzU0NjcsMzU0NjgsMzU0NjksMzU0NzAsMzU0NzEsMzU0NzIsMzU0NzMsMzU0NzQsMzU0NzYsMzU0NzcsMzU0NzgsMzU0NzksMzU0ODAs''@;'; put 'put ''MzU0ODEsMzU0ODIsMzU0ODMsMzU0ODQsMzU0ODUsMzU0ODYsMzU0ODcsMzU0ODgsMzU0ODksMzU0OTAsMzU0OTEsMzU0OTIsMzU0OTMsMzU0OTQsMzU0OTUsMzU0OTYsMzU0OTcsMzU0OTgsMzU0OTksMzU1MDAsMzU1MDEsMzU1MDIsMzU1MDMsMzU1MDQsMzU1MDUsMzU1MDYsMzU1MDcsMzU1''@;'; put 'put ''MDgsMzU1MDksMzU1MTAsMzU1MTEsMzU1MTIsMzU1MTMsMzU1MTQsMzU1MTUsMzU1MTYsMzU1MTcsMzU1MTgsMzU1MTksMzU1MjAsMzU1MjEsMzU1MjIsMzU1MjMsMzU1MjQsMzU1MjUsMzU1MjYsMzU1MjcsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzEsMzU1MzIsMzU1MzMsMzU1MzQsMzU1MzUs''@;'; put 'put ''MzU1MzYsMzU1MzcsMzU1MzgsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDIsMzU1NDMsMzU1NDQsMzU1NDUsMzU1NDYsMzU1NDcsMzU1NDgsMzU1NDksMzU1NTAsMzU1NTEsMzU1NTIsMzU1NTMsMzU1NTQsMzU1NTUsMzgxMTMsMzgzOTIsMzA1MDQsMjY2MjksMjcwNDgsMjE2NDMsMjAwNDUsMjg4''@;'; put 'put ''NTYsMzU3ODQsMjU2ODgsMjU5OTUsMjM0MjksMzEzNjQsMjA1MzgsMjM1MjgsMzA2NTEsMjc2MTcsMzU0NDksMzE4OTYsMjc4MzgsMzA0MTUsMjYwMjUsMzY3NTksMjM4NTMsMjM2MzcsMzQzNjAsMjY2MzIsMjEzNDQsMjUxMTIsMzE0NDksMjgyNTEsMzI1MDksMjcxNjcsMzE0NTYsMjQ0MzIs''@;'; put 'put ''Mjg0NjcsMjQzNTIsMjU0ODQsMjgwNzIsMjY0NTQsMTk5NzYsMjQwODAsMzYxMzQsMjAxODMsMzI5NjAsMzAyNjAsMzg1NTYsMjUzMDcsMjYxNTcsMjUyMTQsMjc4MzYsMzYyMTMsMjkwMzEsMzI2MTcsMjA4MDYsMzI5MDMsMjE0ODQsMzY5NzQsMjUyNDAsMjE3NDYsMzQ1NDQsMzY3NjEsMzI3''@;'; put 'put ''NzMsMzgxNjcsMzQwNzEsMzY4MjUsMjc5OTMsMjk2NDUsMjYwMTUsMzA0OTUsMjk5NTYsMzA3NTksMzMyNzUsMzYxMjYsMzgwMjQsMjAzOTAsMjY1MTcsMzAxMzcsMzU3ODYsMzg2NjMsMjUzOTEsMzgyMTUsMzg0NTMsMzM5NzYsMjUzNzksMzA1MjksMjQ0NDksMjk0MjQsMjAxMDUsMjQ1OTYs''@;'; put 'put ''MjU5NzIsMjUzMjcsMjc0OTEsMjU5MTksMzU1NTYsMzU1NTcsMzU1NTgsMzU1NTksMzU1NjAsMzU1NjEsMzU1NjIsMzU1NjMsMzU1NjQsMzU1NjUsMzU1NjYsMzU1NjcsMzU1NjgsMzU1NjksMzU1NzAsMzU1NzEsMzU1NzIsMzU1NzMsMzU1NzQsMzU1NzUsMzU1NzYsMzU1NzcsMzU1NzgsMzU1''@;'; put 'put ''NzksMzU1ODAsMzU1ODEsMzU1ODIsMzU1ODMsMzU1ODQsMzU1ODUsMzU1ODYsMzU1ODcsMzU1ODgsMzU1ODksMzU1OTAsMzU1OTIsMzU1OTMsMzU1OTQsMzU1OTUsMzU1OTYsMzU1OTcsMzU1OTgsMzU1OTksMzU2MDAsMzU2MDEsMzU2MDIsMzU2MDMsMzU2MDQsMzU2MDUsMzU2MDYsMzU2MDcs''@;'; put 'put ''MzU2MDgsMzU2MDksMzU2MTAsMzU2MTEsMzU2MTIsMzU2MTMsMzU2MTQsMzU2MTUsMzU2MTYsMzU2MTcsMzU2MTgsMzU2MTksMzU2MjAsMzU2MjEsMzU2MjMsMzU2MjQsMzU2MjUsMzU2MjYsMzU2MjcsMzU2MjgsMzU2MjksMzU2MzAsMzU2MzEsMzU2MzIsMzU2MzMsMzU2MzQsMzU2MzUsMzU2''@;'; put 'put ''MzYsMzU2MzcsMzU2MzgsMzU2MzksMzU2NDAsMzU2NDEsMzU2NDIsMzU2NDMsMzU2NDQsMzU2NDUsMzU2NDYsMzU2NDcsMzU2NDgsMzU2NDksMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMjQxMDMsMzAxNTEsMzcwNzMsMzU3NzcsMzM0MzcsMjY1MjUsMjU5MDMsMjE1NTMsMzQ1ODQsMzA2OTMs''@;'; put 'put ''MzI5MzAsMzMwMjYsMjc3MTMsMjAwNDMsMzI0NTUsMzI4NDQsMzA0NTIsMjY4OTMsMjc1NDIsMjUxOTEsMjA1NDAsMjAzNTYsMjIzMzYsMjUzNTEsMjc0OTAsMzYyODYsMjE0ODIsMjYwODgsMzI0NDAsMjQ1MzUsMjUzNzAsMjU1MjcsMzMyNjcsMzMyNjgsMzI2MjIsMjQwOTIsMjM3NjksMjEw''@;'; put 'put ''NDYsMjYyMzQsMzEyMDksMzEyNTgsMzYxMzYsMjg4MjUsMzAxNjQsMjgzODIsMjc4MzUsMzEzNzgsMjAwMTMsMzA0MDUsMjQ1NDQsMzgwNDcsMzQ5MzUsMzI0NTYsMzExODEsMzI5NTksMzczMjUsMjAyMTAsMjAyNDcsMzMzMTEsMjE2MDgsMjQwMzAsMjc5NTQsMzU3ODgsMzE5MDksMzY3MjQs''@;'; put 'put ''MzI5MjAsMjQwOTAsMjE2NTAsMzAzODUsMjM0NDksMjYxNzIsMzk1ODgsMjk2NjQsMjY2NjYsMzQ1MjMsMjY0MTcsMjk0ODIsMzU4MzIsMzU4MDMsMzY4ODAsMzE0ODEsMjg4OTEsMjkwMzgsMjUyODQsMzA2MzMsMjIwNjUsMjAwMjcsMzM4NzksMjY2MDksMjExNjEsMzQ0OTYsMzYxNDIsMzgx''@;'; put 'put ''MzYsMzE1NjksMzU2NTQsMzU2NTUsMzU2NTYsMzU2NTcsMzU2NTgsMzU2NTksMzU2NjAsMzU2NjEsMzU2NjIsMzU2NjMsMzU2NjQsMzU2NjUsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NjksMzU2NzAsMzU2NzEsMzU2NzIsMzU2NzMsMzU2NzQsMzU2NzUsMzU2NzYsMzU2NzcsMzU2NzgsMzU2Nzks''@;'; put 'put ''MzU2ODAsMzU2ODEsMzU2ODIsMzU2ODMsMzU2ODQsMzU2ODUsMzU2ODcsMzU2ODgsMzU2ODksMzU2OTAsMzU2OTEsMzU2OTMsMzU2OTQsMzU2OTUsMzU2OTYsMzU2OTcsMzU2OTgsMzU2OTksMzU3MDAsMzU3MDEsMzU3MDIsMzU3MDMsMzU3MDQsMzU3MDUsMzU3MDYsMzU3MDcsMzU3MDgsMzU3''@;'; put 'put ''MDksMzU3MTAsMzU3MTEsMzU3MTIsMzU3MTMsMzU3MTQsMzU3MTUsMzU3MTYsMzU3MTcsMzU3MTgsMzU3MTksMzU3MjAsMzU3MjEsMzU3MjIsMzU3MjMsMzU3MjQsMzU3MjUsMzU3MjYsMzU3MjcsMzU3MjgsMzU3MjksMzU3MzAsMzU3MzEsMzU3MzIsMzU3MzMsMzU3MzQsMzU3MzUsMzU3MzYs''@;'; put 'put ''MzU3MzcsMzU3MzgsMzU3MzksMzU3NDAsMzU3NDEsMzU3NDIsMzU3NDMsMzU3NTYsMzU3NjEsMzU3NzEsMzU3ODMsMzU3OTIsMzU4MTgsMzU4NDksMzU4NzAsMjAzMDMsMjc4ODAsMzEwNjksMzk1NDcsMjUyMzUsMjkyMjYsMjUzNDEsMTk5ODcsMzA3NDIsMzY3MTYsMjU3NzYsMzYxODYsMzE2''@;'; put 'put ''ODYsMjY3MjksMjQxOTYsMzUwMTMsMjI5MTgsMjU3NTgsMjI3NjYsMjkzNjYsMjY4OTQsMzgxODEsMzY4NjEsMzYxODQsMjIzNjgsMzI1MTIsMzU4NDYsMjA5MzQsMjU0MTcsMjUzMDUsMjEzMzEsMjY3MDAsMjk3MzAsMzM1MzcsMzcxOTYsMjE4MjgsMzA1MjgsMjg3OTYsMjc5NzgsMjA4NTcs''@;'; put 'put ''MjE2NzIsMzYxNjQsMjMwMzksMjgzNjMsMjgxMDAsMjMzODgsMzIwNDMsMjAxODAsMzE4NjksMjgzNzEsMjMzNzYsMzMyNTgsMjgxNzMsMjMzODMsMzk2ODMsMjY4MzcsMzYzOTQsMjM0NDcsMzI1MDgsMjQ2MzUsMzI0MzcsMzcwNDksMzYyMDgsMjI4NjMsMjU1NDksMzExOTksMzYyNzUsMjEz''@;'; put 'put ''MzAsMjYwNjMsMzEwNjIsMzU3ODEsMzg0NTksMzI0NTIsMzgwNzUsMzIzODYsMjIwNjgsMzcyNTcsMjYzNjgsMzI2MTgsMjM1NjIsMzY5ODEsMjYxNTIsMjQwMzgsMjAzMDQsMjY1OTAsMjA1NzAsMjAzMTYsMjIzNTIsMjQyMzEsNTk0MDgsNTk0MDksNTk0MTAsNTk0MTEsNTk0MTIsMzU4OTYs''@;'; put 'put ''MzU4OTcsMzU4OTgsMzU4OTksMzU5MDAsMzU5MDEsMzU5MDIsMzU5MDMsMzU5MDQsMzU5MDYsMzU5MDcsMzU5MDgsMzU5MDksMzU5MTIsMzU5MTQsMzU5MTUsMzU5MTcsMzU5MTgsMzU5MTksMzU5MjAsMzU5MjEsMzU5MjIsMzU5MjMsMzU5MjQsMzU5MjYsMzU5MjcsMzU5MjgsMzU5MjksMzU5''@;'; put 'put ''MzEsMzU5MzIsMzU5MzMsMzU5MzQsMzU5MzUsMzU5MzYsMzU5MzksMzU5NDAsMzU5NDEsMzU5NDIsMzU5NDMsMzU5NDQsMzU5NDUsMzU5NDgsMzU5NDksMzU5NTAsMzU5NTEsMzU5NTIsMzU5NTMsMzU5NTQsMzU5NTYsMzU5NTcsMzU5NTgsMzU5NTksMzU5NjMsMzU5NjQsMzU5NjUsMzU5NjYs''@;'; put 'put ''MzU5NjcsMzU5NjgsMzU5NjksMzU5NzEsMzU5NzIsMzU5NzQsMzU5NzUsMzU5NzYsMzU5NzksMzU5ODEsMzU5ODIsMzU5ODMsMzU5ODQsMzU5ODUsMzU5ODYsMzU5ODcsMzU5ODksMzU5OTAsMzU5OTEsMzU5OTMsMzU5OTQsMzU5OTUsMzU5OTYsMzU5OTcsMzU5OTgsMzU5OTksMzZlMywzNjAw''@;'; put 'put ''MSwzNjAwMiwzNjAwMywzNjAwNCwzNjAwNSwzNjAwNiwzNjAwNywzNjAwOCwzNjAwOSwzNjAxMCwzNjAxMSwzNjAxMiwzNjAxMywyMDEwOSwxOTk4MCwyMDgwMCwxOTk4NCwyNDMxOSwyMTMxNywxOTk4OSwyMDEyMCwxOTk5OCwzOTczMCwyMzQwNCwyMjEyMSwyMDAwOCwzMTE2MiwyMDAzMSwy''@;'; put 'put ''MTI2OSwyMDAzOSwyMjgyOSwyOTI0MywyMTM1OCwyNzY2NCwyMjIzOSwzMjk5NiwzOTMxOSwyNzYwMywzMDU5MCw0MDcyNywyMDAyMiwyMDEyNyw0MDcyMCwyMDA2MCwyMDA3MywyMDExNSwzMzQxNiwyMzM4NywyMTg2OCwyMjAzMSwyMDE2NCwyMTM4OSwyMTQwNSwyMTQxMSwyMTQxMywyMTQy''@;'; put 'put ''MiwzODc1NywzNjE4OSwyMTI3NCwyMTQ5MywyMTI4NiwyMTI5NCwyMTMxMCwzNjE4OCwyMTM1MCwyMTM0NywyMDk5NCwyMWUzLDIxMDA2LDIxMDM3LDIxMDQzLDIxMDU1LDIxMDU2LDIxMDY4LDIxMDg2LDIxMDg5LDIxMDg0LDMzOTY3LDIxMTE3LDIxMTIyLDIxMTIxLDIxMTM2LDIxMTM5LDIw''@;'; put 'put ''ODY2LDMyNTk2LDIwMTU1LDIwMTYzLDIwMTY5LDIwMTYyLDIwMjAwLDIwMTkzLDIwMjAzLDIwMTkwLDIwMjUxLDIwMjExLDIwMjU4LDIwMzI0LDIwMjEzLDIwMjYxLDIwMjYzLDIwMjMzLDIwMjY3LDIwMzE4LDIwMzI3LDI1OTEyLDIwMzE0LDIwMzE3LDM2MDE0LDM2MDE1LDM2MDE2LDM2MDE3''@;'; put 'put ''LDM2MDE4LDM2MDE5LDM2MDIwLDM2MDIxLDM2MDIyLDM2MDIzLDM2MDI0LDM2MDI1LDM2MDI2LDM2MDI3LDM2MDI4LDM2MDI5LDM2MDMwLDM2MDMxLDM2MDMyLDM2MDMzLDM2MDM0LDM2MDM1LDM2MDM2LDM2MDM3LDM2MDM4LDM2MDM5LDM2MDQwLDM2MDQxLDM2MDQyLDM2MDQzLDM2MDQ0LDM2''@;'; put 'put ''MDQ1LDM2MDQ2LDM2MDQ3LDM2MDQ4LDM2MDQ5LDM2MDUwLDM2MDUxLDM2MDUyLDM2MDUzLDM2MDU0LDM2MDU1LDM2MDU2LDM2MDU3LDM2MDU4LDM2MDU5LDM2MDYwLDM2MDYxLDM2MDYyLDM2MDYzLDM2MDY0LDM2MDY1LDM2MDY2LDM2MDY3LDM2MDY4LDM2MDY5LDM2MDcwLDM2MDcxLDM2MDcy''@;'; put 'put ''LDM2MDczLDM2MDc0LDM2MDc1LDM2MDc2LDM2MDc3LDM2MDc4LDM2MDc5LDM2MDgwLDM2MDgxLDM2MDgyLDM2MDgzLDM2MDg0LDM2MDg1LDM2MDg2LDM2MDg3LDM2MDg4LDM2MDg5LDM2MDkwLDM2MDkxLDM2MDkyLDM2MDkzLDM2MDk0LDM2MDk1LDM2MDk2LDM2MDk3LDM2MDk4LDM2MDk5LDM2''@;'; put 'put ''MTAwLDM2MTAxLDM2MTAyLDM2MTAzLDM2MTA0LDM2MTA1LDM2MTA2LDM2MTA3LDM2MTA4LDM2MTA5LDIwMzE5LDIwMzExLDIwMjc0LDIwMjg1LDIwMzQyLDIwMzQwLDIwMzY5LDIwMzYxLDIwMzU1LDIwMzY3LDIwMzUwLDIwMzQ3LDIwMzk0LDIwMzQ4LDIwMzk2LDIwMzcyLDIwNDU0LDIwNDU2''@;'; put 'put ''LDIwNDU4LDIwNDIxLDIwNDQyLDIwNDUxLDIwNDQ0LDIwNDMzLDIwNDQ3LDIwNDcyLDIwNTIxLDIwNTU2LDIwNDY3LDIwNTI0LDIwNDk1LDIwNTI2LDIwNTI1LDIwNDc4LDIwNTA4LDIwNDkyLDIwNTE3LDIwNTIwLDIwNjA2LDIwNTQ3LDIwNTY1LDIwNTUyLDIwNTU4LDIwNTg4LDIwNjAzLDIw''@;'; put 'put ''NjQ1LDIwNjQ3LDIwNjQ5LDIwNjY2LDIwNjk0LDIwNzQyLDIwNzE3LDIwNzE2LDIwNzEwLDIwNzE4LDIwNzQzLDIwNzQ3LDIwMTg5LDI3NzA5LDIwMzEyLDIwMzI1LDIwNDMwLDQwODY0LDI3NzE4LDMxODYwLDIwODQ2LDI0MDYxLDQwNjQ5LDM5MzIwLDIwODY1LDIyODA0LDIxMjQxLDIxMjYx''@;'; put 'put ''LDM1MzM1LDIxMjY0LDIwOTcxLDIyODA5LDIwODIxLDIwMTI4LDIwODIyLDIwMTQ3LDM0OTI2LDM0OTgwLDIwMTQ5LDMzMDQ0LDM1MDI2LDMxMTA0LDIzMzQ4LDM0ODE5LDMyNjk2LDIwOTA3LDIwOTEzLDIwOTI1LDIwOTI0LDM2MTEwLDM2MTExLDM2MTEyLDM2MTEzLDM2MTE0LDM2MTE1LDM2''@;'; put 'put ''MTE2LDM2MTE3LDM2MTE4LDM2MTE5LDM2MTIwLDM2MTIxLDM2MTIyLDM2MTIzLDM2MTI0LDM2MTI4LDM2MTc3LDM2MTc4LDM2MTgzLDM2MTkxLDM2MTk3LDM2MjAwLDM2MjAxLDM2MjAyLDM2MjA0LDM2MjA2LDM2MjA3LDM2MjA5LDM2MjEwLDM2MjE2LDM2MjE3LDM2MjE4LDM2MjE5LDM2MjIw''@;'; put 'put ''LDM2MjIxLDM2MjIyLDM2MjIzLDM2MjI0LDM2MjI2LDM2MjI3LDM2MjMwLDM2MjMxLDM2MjMyLDM2MjMzLDM2MjM2LDM2MjM3LDM2MjM4LDM2MjM5LDM2MjQwLDM2MjQyLDM2MjQzLDM2MjQ1LDM2MjQ2LDM2MjQ3LDM2MjQ4LDM2MjQ5LDM2MjUwLDM2MjUxLDM2MjUyLDM2MjUzLDM2MjU0LDM2''@;'; put 'put ''MjU2LDM2MjU3LDM2MjU4LDM2MjYwLDM2MjYxLDM2MjYyLDM2MjYzLDM2MjY0LDM2MjY1LDM2MjY2LDM2MjY3LDM2MjY4LDM2MjY5LDM2MjcwLDM2MjcxLDM2MjcyLDM2Mjc0LDM2Mjc4LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg1LDM2Mjg4LDM2Mjg5LDM2MjkwLDM2MjkzLDM2Mjk1LDM2Mjk2''@;'; put 'put ''LDM2Mjk3LDM2Mjk4LDM2MzAxLDM2MzA0LDM2MzA2LDM2MzA3LDM2MzA4LDIwOTM1LDIwODg2LDIwODk4LDIwOTAxLDM1NzQ0LDM1NzUwLDM1NzUxLDM1NzU0LDM1NzY0LDM1NzY1LDM1NzY3LDM1Nzc4LDM1Nzc5LDM1Nzg3LDM1NzkxLDM1NzkwLDM1Nzk0LDM1Nzk1LDM1Nzk2LDM1Nzk4LDM1''@;'; put 'put ''ODAwLDM1ODAxLDM1ODA0LDM1ODA3LDM1ODA4LDM1ODEyLDM1ODE2LDM1ODE3LDM1ODIyLDM1ODI0LDM1ODI3LDM1ODMwLDM1ODMzLDM1ODM2LDM1ODM5LDM1ODQwLDM1ODQyLDM1ODQ0LDM1ODQ3LDM1ODUyLDM1ODU1LDM1ODU3LDM1ODU4LDM1ODYwLDM1ODYxLDM1ODYyLDM1ODY1LDM1ODY3''@;'; put 'put ''LDM1ODY0LDM1ODY5LDM1ODcxLDM1ODcyLDM1ODczLDM1ODc3LDM1ODc5LDM1ODgyLDM1ODgzLDM1ODg2LDM1ODg3LDM1ODkwLDM1ODkxLDM1ODkzLDM1ODk0LDIxMzUzLDIxMzcwLDM4NDI5LDM4NDM0LDM4NDMzLDM4NDQ5LDM4NDQyLDM4NDYxLDM4NDYwLDM4NDY2LDM4NDczLDM4NDg0LDM4''@;'; put 'put ''NDk1LDM4NTAzLDM4NTA4LDM4NTE0LDM4NTE2LDM4NTM2LDM4NTQxLDM4NTUxLDM4NTc2LDM3MDE1LDM3MDE5LDM3MDIxLDM3MDE3LDM3MDM2LDM3MDI1LDM3MDQ0LDM3MDQzLDM3MDQ2LDM3MDUwLDM2MzA5LDM2MzEyLDM2MzEzLDM2MzE2LDM2MzIwLDM2MzIxLDM2MzIyLDM2MzI1LDM2MzI2''@;'; put 'put ''LDM2MzI3LDM2MzI5LDM2MzMzLDM2MzM0LDM2MzM2LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQyLDM2MzQ4LDM2MzUwLDM2MzUxLDM2MzUyLDM2MzUzLDM2MzU0LDM2MzU1LDM2MzU2LDM2MzU4LDM2MzU5LDM2MzYwLDM2MzYzLDM2MzY1LDM2MzY2LDM2MzY4LDM2MzY5LDM2MzcwLDM2MzcxLDM2''@;'; put 'put ''MzczLDM2Mzc0LDM2Mzc1LDM2Mzc2LDM2Mzc3LDM2Mzc4LDM2Mzc5LDM2MzgwLDM2Mzg0LDM2Mzg1LDM2Mzg4LDM2Mzg5LDM2MzkwLDM2MzkxLDM2MzkyLDM2Mzk1LDM2Mzk3LDM2NDAwLDM2NDAyLDM2NDAzLDM2NDA0LDM2NDA2LDM2NDA3LDM2NDA4LDM2NDExLDM2NDEyLDM2NDE0LDM2NDE1''@;'; put 'put ''LDM2NDE5LDM2NDIxLDM2NDIyLDM2NDI4LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDMyLDM2NDM1LDM2NDM2LDM2NDM3LDM2NDM4LDM2NDM5LDM2NDQwLDM2NDQyLDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ3LDM2NDQ4LDM2NDQ5LDM2NDUwLDM2NDUxLDM2NDUyLDM2NDUzLDM2NDU1LDM2''@;'; put 'put ''NDU2LDM2NDU4LDM2NDU5LDM2NDYyLDM2NDY1LDM3MDQ4LDM3MDQwLDM3MDcxLDM3MDYxLDM3MDU0LDM3MDcyLDM3MDYwLDM3MDYzLDM3MDc1LDM3MDk0LDM3MDkwLDM3MDg0LDM3MDc5LDM3MDgzLDM3MDk5LDM3MTAzLDM3MTE4LDM3MTI0LDM3MTU0LDM3MTUwLDM3MTU1LDM3MTY5LDM3MTY3''@;'; put 'put ''LDM3MTc3LDM3MTg3LDM3MTkwLDIxMDA1LDIyODUwLDIxMTU0LDIxMTY0LDIxMTY1LDIxMTgyLDIxNzU5LDIxMjAwLDIxMjA2LDIxMjMyLDIxNDcxLDI5MTY2LDMwNjY5LDI0MzA4LDIwOTgxLDIwOTg4LDM5NzI3LDIxNDMwLDI0MzIxLDMwMDQyLDI0MDQ3LDIyMzQ4LDIyNDQxLDIyNDMzLDIy''@;'; put 'put ''NjU0LDIyNzE2LDIyNzI1LDIyNzM3LDIyMzEzLDIyMzE2LDIyMzE0LDIyMzIzLDIyMzI5LDIyMzE4LDIyMzE5LDIyMzY0LDIyMzMxLDIyMzM4LDIyMzc3LDIyNDA1LDIyMzc5LDIyNDA2LDIyMzk2LDIyMzk1LDIyMzc2LDIyMzgxLDIyMzkwLDIyMzg3LDIyNDQ1LDIyNDM2LDIyNDEyLDIyNDUw''@;'; put 'put ''LDIyNDc5LDIyNDM5LDIyNDUyLDIyNDE5LDIyNDMyLDIyNDg1LDIyNDg4LDIyNDkwLDIyNDg5LDIyNDgyLDIyNDU2LDIyNTE2LDIyNTExLDIyNTIwLDIyNTAwLDIyNDkzLDM2NDY3LDM2NDY5LDM2NDcxLDM2NDcyLDM2NDczLDM2NDc0LDM2NDc1LDM2NDc3LDM2NDc4LDM2NDgwLDM2NDgyLDM2''@;'; put 'put ''NDgzLDM2NDg0LDM2NDg2LDM2NDg4LDM2NDg5LDM2NDkwLDM2NDkxLDM2NDkyLDM2NDkzLDM2NDk0LDM2NDk3LDM2NDk4LDM2NDk5LDM2NTAxLDM2NTAyLDM2NTAzLDM2NTA0LDM2NTA1LDM2NTA2LDM2NTA3LDM2NTA5LDM2NTExLDM2NTEyLDM2NTEzLDM2NTE0LDM2NTE1LDM2NTE2LDM2NTE3''@;'; put 'put ''LDM2NTE4LDM2NTE5LDM2NTIwLDM2NTIxLDM2NTIyLDM2NTI1LDM2NTI2LDM2NTI4LDM2NTI5LDM2NTMxLDM2NTMyLDM2NTMzLDM2NTM0LDM2NTM1LDM2NTM2LDM2NTM3LDM2NTM5LDM2NTQwLDM2NTQxLDM2NTQyLDM2NTQzLDM2NTQ0LDM2NTQ1LDM2NTQ2LDM2NTQ3LDM2NTQ4LDM2NTQ5LDM2''@;'; put 'put ''NTUwLDM2NTUxLDM2NTUyLDM2NTUzLDM2NTU0LDM2NTU1LDM2NTU2LDM2NTU3LDM2NTU5LDM2NTYwLDM2NTYxLDM2NTYyLDM2NTYzLDM2NTY0LDM2NTY1LDM2NTY2LDM2NTY3LDM2NTY4LDM2NTY5LDM2NTcwLDM2NTcxLDM2NTcyLDM2NTczLDM2NTc0LDM2NTc1LDM2NTc2LDM2NTc3LDM2NTc4''@;'; put 'put ''LDM2NTc5LDM2NTgwLDIyNTM5LDIyNTQxLDIyNTI1LDIyNTA5LDIyNTI4LDIyNTU4LDIyNTUzLDIyNTk2LDIyNTYwLDIyNjI5LDIyNjM2LDIyNjU3LDIyNjY1LDIyNjgyLDIyNjU2LDM5MzM2LDQwNzI5LDI1MDg3LDMzNDAxLDMzNDA1LDMzNDA3LDMzNDIzLDMzNDE4LDMzNDQ4LDMzNDEyLDMz''@;'; put 'put ''NDIyLDMzNDI1LDMzNDMxLDMzNDMzLDMzNDUxLDMzNDY0LDMzNDcwLDMzNDU2LDMzNDgwLDMzNDgyLDMzNTA3LDMzNDMyLDMzNDYzLDMzNDU0LDMzNDgzLDMzNDg0LDMzNDczLDMzNDQ5LDMzNDYwLDMzNDQxLDMzNDUwLDMzNDM5LDMzNDc2LDMzNDg2LDMzNDQ0LDMzNTA1LDMzNTQ1LDMzNTI3''@;'; put 'put ''LDMzNTA4LDMzNTUxLDMzNTQzLDMzNTAwLDMzNTI0LDMzNDkwLDMzNDk2LDMzNTQ4LDMzNTMxLDMzNDkxLDMzNTUzLDMzNTYyLDMzNTQyLDMzNTU2LDMzNTU3LDMzNTA0LDMzNDkzLDMzNTY0LDMzNjE3LDMzNjI3LDMzNjI4LDMzNTQ0LDMzNjgyLDMzNTk2LDMzNTg4LDMzNTg1LDMzNjkxLDMz''@;'; put 'put ''NjMwLDMzNTgzLDMzNjE1LDMzNjA3LDMzNjAzLDMzNjMxLDMzNjAwLDMzNTU5LDMzNjMyLDMzNTgxLDMzNTk0LDMzNTg3LDMzNjM4LDMzNjM3LDM2NTgxLDM2NTgyLDM2NTgzLDM2NTg0LDM2NTg1LDM2NTg2LDM2NTg3LDM2NTg4LDM2NTg5LDM2NTkwLDM2NTkxLDM2NTkyLDM2NTkzLDM2NTk0''@;'; put 'put ''LDM2NTk1LDM2NTk2LDM2NTk3LDM2NTk4LDM2NTk5LDM2NjAwLDM2NjAxLDM2NjAyLDM2NjAzLDM2NjA0LDM2NjA1LDM2NjA2LDM2NjA3LDM2NjA4LDM2NjA5LDM2NjEwLDM2NjExLDM2NjEyLDM2NjEzLDM2NjE0LDM2NjE1LDM2NjE2LDM2NjE3LDM2NjE4LDM2NjE5LDM2NjIwLDM2NjIxLDM2''@;'; put 'put ''NjIyLDM2NjIzLDM2NjI0LDM2NjI1LDM2NjI2LDM2NjI3LDM2NjI4LDM2NjI5LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjMzLDM2NjM0LDM2NjM1LDM2NjM2LDM2NjM3LDM2NjM4LDM2NjM5LDM2NjQwLDM2NjQxLDM2NjQyLDM2NjQzLDM2NjQ0LDM2NjQ1LDM2NjQ2LDM2NjQ3LDM2NjQ4LDM2NjQ5''@;'; put 'put ''LDM2NjUwLDM2NjUxLDM2NjUyLDM2NjUzLDM2NjU0LDM2NjU1LDM2NjU2LDM2NjU3LDM2NjU4LDM2NjU5LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY0LDM2NjY1LDM2NjY2LDM2NjY3LDM2NjY4LDM2NjY5LDM2NjcwLDM2NjcxLDM2NjcyLDM2NjczLDM2Njc0LDM2Njc1LDM2Njc2LDMz''@;'; put 'put ''NjQwLDMzNTYzLDMzNjQxLDMzNjQ0LDMzNjQyLDMzNjQ1LDMzNjQ2LDMzNzEyLDMzNjU2LDMzNzE1LDMzNzE2LDMzNjk2LDMzNzA2LDMzNjgzLDMzNjkyLDMzNjY5LDMzNjYwLDMzNzE4LDMzNzA1LDMzNjYxLDMzNzIwLDMzNjU5LDMzNjg4LDMzNjk0LDMzNzA0LDMzNzIyLDMzNzI0LDMzNzI5''@;'; put 'put ''LDMzNzkzLDMzNzY1LDMzNzUyLDIyNTM1LDMzODE2LDMzODAzLDMzNzU3LDMzNzg5LDMzNzUwLDMzODIwLDMzODQ4LDMzODA5LDMzNzk4LDMzNzQ4LDMzNzU5LDMzODA3LDMzNzk1LDMzNzg0LDMzNzg1LDMzNzcwLDMzNzMzLDMzNzI4LDMzODMwLDMzNzc2LDMzNzYxLDMzODg0LDMzODczLDMz''@;'; put 'put ''ODgyLDMzODgxLDMzOTA3LDMzOTI3LDMzOTI4LDMzOTE0LDMzOTI5LDMzOTEyLDMzODUyLDMzODYyLDMzODk3LDMzOTEwLDMzOTMyLDMzOTM0LDMzODQxLDMzOTAxLDMzOTg1LDMzOTk3LDM0ZTMsMzQwMjIsMzM5ODEsMzQwMDMsMzM5OTQsMzM5ODMsMzM5NzgsMzQwMTYsMzM5NTMsMzM5Nzcs''@;'; put 'put ''MzM5NzIsMzM5NDMsMzQwMjEsMzQwMTksMzQwNjAsMjk5NjUsMzQxMDQsMzQwMzIsMzQxMDUsMzQwNzksMzQxMDYsMzY2NzcsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODEsMzY2ODIsMzY2ODMsMzY2ODQsMzY2ODUsMzY2ODYsMzY2ODcsMzY2ODgsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2''@;'; put 'put ''OTMsMzY2OTQsMzY2OTUsMzY2OTYsMzY2OTcsMzY2OTgsMzY2OTksMzY3MDAsMzY3MDEsMzY3MDIsMzY3MDMsMzY3MDQsMzY3MDUsMzY3MDYsMzY3MDcsMzY3MDgsMzY3MDksMzY3MTQsMzY3MzYsMzY3NDgsMzY3NTQsMzY3NjUsMzY3NjgsMzY3NjksMzY3NzAsMzY3NzIsMzY3NzMsMzY3NzQs''@;'; put 'put ''MzY3NzUsMzY3NzgsMzY3ODAsMzY3ODEsMzY3ODIsMzY3ODMsMzY3ODYsMzY3ODcsMzY3ODgsMzY3ODksMzY3OTEsMzY3OTIsMzY3OTQsMzY3OTUsMzY3OTYsMzY3OTksMzY4MDAsMzY4MDMsMzY4MDYsMzY4MDksMzY4MTAsMzY4MTEsMzY4MTIsMzY4MTMsMzY4MTUsMzY4MTgsMzY4MjIsMzY4''@;'; put 'put ''MjMsMzY4MjYsMzY4MzIsMzY4MzMsMzY4MzUsMzY4MzksMzY4NDQsMzY4NDcsMzY4NDksMzY4NTAsMzY4NTIsMzY4NTMsMzY4NTQsMzY4NTgsMzY4NTksMzY4NjAsMzY4NjIsMzY4NjMsMzY4NzEsMzY4NzIsMzY4NzYsMzY4NzgsMzY4ODMsMzY4ODUsMzY4ODgsMzQxMzQsMzQxMDcsMzQwNDcs''@;'; put 'put ''MzQwNDQsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNDgsMzQxNDIsMzQxNzAsMzA2MjYsMzQxMTUsMzQxNjIsMzQxNzEsMzQyMTIsMzQyMTYsMzQxODMsMzQxOTEsMzQxNjksMzQyMjIsMzQyMDQsMzQxODEsMzQyMzMsMzQyMzEsMzQyMjQsMzQyNTksMzQyNDEsMzQyNjgsMzQzMDMsMzQzNDMsMzQz''@;'; put 'put ''MDksMzQzNDUsMzQzMjYsMzQzNjQsMjQzMTgsMjQzMjgsMjI4NDQsMjI4NDksMzI4MjMsMjI4NjksMjI4NzQsMjI4NzIsMjEyNjMsMjM1ODYsMjM1ODksMjM1OTYsMjM2MDQsMjUxNjQsMjUxOTQsMjUyNDcsMjUyNzUsMjUyOTAsMjUzMDYsMjUzMDMsMjUzMjYsMjUzNzgsMjUzMzQsMjU0MDEs''@;'; put 'put ''MjU0MTksMjU0MTEsMjU1MTcsMjU1OTAsMjU0NTcsMjU0NjYsMjU0ODYsMjU1MjQsMjU0NTMsMjU1MTYsMjU0ODIsMjU0NDksMjU1MTgsMjU1MzIsMjU1ODYsMjU1OTIsMjU1NjgsMjU1OTksMjU1NDAsMjU1NjYsMjU1NTAsMjU2ODIsMjU1NDIsMjU1MzQsMjU2NjksMjU2NjUsMjU2MTEsMjU2''@;'; put 'put ''MjcsMjU2MzIsMjU2MTIsMjU2MzgsMjU2MzMsMjU2OTQsMjU3MzIsMjU3MDksMjU3NTAsMzY4ODksMzY4OTIsMzY4OTksMzY5MDAsMzY5MDEsMzY5MDMsMzY5MDQsMzY5MDUsMzY5MDYsMzY5MDcsMzY5MDgsMzY5MTIsMzY5MTMsMzY5MTQsMzY5MTUsMzY5MTYsMzY5MTksMzY5MjEsMzY5MjIs''@;'; put 'put ''MzY5MjUsMzY5MjcsMzY5MjgsMzY5MzEsMzY5MzMsMzY5MzQsMzY5MzYsMzY5MzcsMzY5MzgsMzY5MzksMzY5NDAsMzY5NDIsMzY5NDgsMzY5NDksMzY5NTAsMzY5NTMsMzY5NTQsMzY5NTYsMzY5NTcsMzY5NTgsMzY5NTksMzY5NjAsMzY5NjEsMzY5NjQsMzY5NjYsMzY5NjcsMzY5NjksMzY5''@;'; put 'put ''NzAsMzY5NzEsMzY5NzIsMzY5NzUsMzY5NzYsMzY5NzcsMzY5NzgsMzY5NzksMzY5ODIsMzY5ODMsMzY5ODQsMzY5ODUsMzY5ODYsMzY5ODcsMzY5ODgsMzY5OTAsMzY5OTMsMzY5OTYsMzY5OTcsMzY5OTgsMzY5OTksMzcwMDEsMzcwMDIsMzcwMDQsMzcwMDUsMzcwMDYsMzcwMDcsMzcwMDgs''@;'; put 'put ''MzcwMTAsMzcwMTIsMzcwMTQsMzcwMTYsMzcwMTgsMzcwMjAsMzcwMjIsMzcwMjMsMzcwMjQsMzcwMjgsMzcwMjksMzcwMzEsMzcwMzIsMzcwMzMsMzcwMzUsMzcwMzcsMzcwNDIsMzcwNDcsMzcwNTIsMzcwNTMsMzcwNTUsMzcwNTYsMjU3MjIsMjU3ODMsMjU3ODQsMjU3NTMsMjU3ODYsMjU3''@;'; put 'put ''OTIsMjU4MDgsMjU4MTUsMjU4MjgsMjU4MjYsMjU4NjUsMjU4OTMsMjU5MDIsMjQzMzEsMjQ1MzAsMjk5NzcsMjQzMzcsMjEzNDMsMjE0ODksMjE1MDEsMjE0ODEsMjE0ODAsMjE0OTksMjE1MjIsMjE1MjYsMjE1MTAsMjE1NzksMjE1ODYsMjE1ODcsMjE1ODgsMjE1OTAsMjE1NzEsMjE1Mzcs''@;'; put 'put ''MjE1OTEsMjE1OTMsMjE1MzksMjE1NTQsMjE2MzQsMjE2NTIsMjE2MjMsMjE2MTcsMjE2MDQsMjE2NTgsMjE2NTksMjE2MzYsMjE2MjIsMjE2MDYsMjE2NjEsMjE3MTIsMjE2NzcsMjE2OTgsMjE2ODQsMjE3MTQsMjE2NzEsMjE2NzAsMjE3MTUsMjE3MTYsMjE2MTgsMjE2NjcsMjE3MTcsMjE2''@;'; put 'put ''OTEsMjE2OTUsMjE3MDgsMjE3MjEsMjE3MjIsMjE3MjQsMjE2NzMsMjE2NzQsMjE2NjgsMjE3MjUsMjE3MTEsMjE3MjYsMjE3ODcsMjE3MzUsMjE3OTIsMjE3NTcsMjE3ODAsMjE3NDcsMjE3OTQsMjE3OTUsMjE3NzUsMjE3NzcsMjE3OTksMjE4MDIsMjE4NjMsMjE5MDMsMjE5NDEsMjE4MzMs''@;'; put 'put ''MjE4NjksMjE4MjUsMjE4NDUsMjE4MjMsMjE4NDAsMjE4MjAsMzcwNTgsMzcwNTksMzcwNjIsMzcwNjQsMzcwNjUsMzcwNjcsMzcwNjgsMzcwNjksMzcwNzQsMzcwNzYsMzcwNzcsMzcwNzgsMzcwODAsMzcwODEsMzcwODIsMzcwODYsMzcwODcsMzcwODgsMzcwOTEsMzcwOTIsMzcwOTMsMzcw''@;'; put 'put ''OTcsMzcwOTgsMzcxMDAsMzcxMDIsMzcxMDQsMzcxMDUsMzcxMDYsMzcxMDcsMzcxMDksMzcxMTAsMzcxMTEsMzcxMTMsMzcxMTQsMzcxMTUsMzcxMTYsMzcxMTksMzcxMjAsMzcxMjEsMzcxMjMsMzcxMjUsMzcxMjYsMzcxMjcsMzcxMjgsMzcxMjksMzcxMzAsMzcxMzEsMzcxMzIsMzcxMzMs''@;'; put 'put ''MzcxMzQsMzcxMzUsMzcxMzYsMzcxMzcsMzcxMzgsMzcxMzksMzcxNDAsMzcxNDEsMzcxNDIsMzcxNDMsMzcxNDQsMzcxNDYsMzcxNDcsMzcxNDgsMzcxNDksMzcxNTEsMzcxNTIsMzcxNTMsMzcxNTYsMzcxNTcsMzcxNTgsMzcxNTksMzcxNjAsMzcxNjEsMzcxNjIsMzcxNjMsMzcxNjQsMzcx''@;'; put 'put ''NjUsMzcxNjYsMzcxNjgsMzcxNzAsMzcxNzEsMzcxNzIsMzcxNzMsMzcxNzQsMzcxNzUsMzcxNzYsMzcxNzgsMzcxNzksMzcxODAsMzcxODEsMzcxODIsMzcxODMsMzcxODQsMzcxODUsMzcxODYsMzcxODgsMjE4MTUsMjE4NDYsMjE4NzcsMjE4NzgsMjE4NzksMjE4MTEsMjE4MDgsMjE4NTIs''@;'; put 'put ''MjE4OTksMjE5NzAsMjE4OTEsMjE5MzcsMjE5NDUsMjE4OTYsMjE4ODksMjE5MTksMjE4ODYsMjE5NzQsMjE5MDUsMjE4ODMsMjE5ODMsMjE5NDksMjE5NTAsMjE5MDgsMjE5MTMsMjE5OTQsMjIwMDcsMjE5NjEsMjIwNDcsMjE5NjksMjE5OTUsMjE5OTYsMjE5NzIsMjE5OTAsMjE5ODEsMjE5''@;'; put 'put ''NTYsMjE5OTksMjE5ODksMjIwMDIsMjIwMDMsMjE5NjQsMjE5NjUsMjE5OTIsMjIwMDUsMjE5ODgsMzY3NTYsMjIwNDYsMjIwMjQsMjIwMjgsMjIwMTcsMjIwNTIsMjIwNTEsMjIwMTQsMjIwMTYsMjIwNTUsMjIwNjEsMjIxMDQsMjIwNzMsMjIxMDMsMjIwNjAsMjIwOTMsMjIxMTQsMjIxMDUs''@;'; put 'put ''MjIxMDgsMjIwOTIsMjIxMDAsMjIxNTAsMjIxMTYsMjIxMjksMjIxMjMsMjIxMzksMjIxNDAsMjIxNDksMjIxNjMsMjIxOTEsMjIyMjgsMjIyMzEsMjIyMzcsMjIyNDEsMjIyNjEsMjIyNTEsMjIyNjUsMjIyNzEsMjIyNzYsMjIyODIsMjIyODEsMjIzMDAsMjQwNzksMjQwODksMjQwODQsMjQw''@;'; put 'put ''ODEsMjQxMTMsMjQxMjMsMjQxMjQsMzcxODksMzcxOTEsMzcxOTIsMzcyMDEsMzcyMDMsMzcyMDQsMzcyMDUsMzcyMDYsMzcyMDgsMzcyMDksMzcyMTEsMzcyMTIsMzcyMTUsMzcyMTYsMzcyMjIsMzcyMjMsMzcyMjQsMzcyMjcsMzcyMjksMzcyMzUsMzcyNDIsMzcyNDMsMzcyNDQsMzcyNDgs''@;'; put 'put ''MzcyNDksMzcyNTAsMzcyNTEsMzcyNTIsMzcyNTQsMzcyNTYsMzcyNTgsMzcyNjIsMzcyNjMsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzAsMzcyNzEsMzcyNzIsMzcyNzMsMzcyNzYsMzcyNzcsMzcyNzgsMzcyNzksMzcyODAsMzcyODEsMzcyODQsMzcyODUsMzcyODYsMzcyODcsMzcyODgsMzcy''@;'; put 'put ''ODksMzcyOTEsMzcyOTIsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDMsMzczMDQsMzczMDUsMzczMDcsMzczMDgsMzczMDksMzczMTAsMzczMTEsMzczMTIsMzczMTMsMzczMTQsMzczMTUsMzczMTYsMzczMTcsMzczMTgsMzczMjAsMzczMjMsMzczMjgsMzczMzAsMzczMzEs''@;'; put 'put ''MzczMzIsMzczMzMsMzczMzQsMzczMzUsMzczMzYsMzczMzcsMzczMzgsMzczMzksMzczNDEsMzczNDIsMzczNDMsMzczNDQsMzczNDUsMzczNDYsMzczNDcsMzczNDgsMzczNDksMjQxMTksMjQxMzIsMjQxNDgsMjQxNTUsMjQxNTgsMjQxNjEsMjM2OTIsMjM2NzQsMjM2OTMsMjM2OTYsMjM3''@;'; put 'put ''MDIsMjM2ODgsMjM3MDQsMjM3MDUsMjM2OTcsMjM3MDYsMjM3MDgsMjM3MzMsMjM3MTQsMjM3NDEsMjM3MjQsMjM3MjMsMjM3MjksMjM3MTUsMjM3NDUsMjM3MzUsMjM3NDgsMjM3NjIsMjM3ODAsMjM3NTUsMjM3ODEsMjM4MTAsMjM4MTEsMjM4NDcsMjM4NDYsMjM4NTQsMjM4NDQsMjM4Mzgs''@;'; put 'put ''MjM4MTQsMjM4MzUsMjM4OTYsMjM4NzAsMjM4NjAsMjM4NjksMjM5MTYsMjM4OTksMjM5MTksMjM5MDEsMjM5MTUsMjM4ODMsMjM4ODIsMjM5MTMsMjM5MjQsMjM5MzgsMjM5NjEsMjM5NjUsMzU5NTUsMjM5OTEsMjQwMDUsMjQ0MzUsMjQ0MzksMjQ0NTAsMjQ0NTUsMjQ0NTcsMjQ0NjAsMjQ0''@;'; put 'put ''NjksMjQ0NzMsMjQ0NzYsMjQ0ODgsMjQ0OTMsMjQ1MDEsMjQ1MDgsMzQ5MTQsMjQ0MTcsMjkzNTcsMjkzNjAsMjkzNjQsMjkzNjcsMjkzNjgsMjkzNzksMjkzNzcsMjkzOTAsMjkzODksMjkzOTQsMjk0MTYsMjk0MjMsMjk0MTcsMjk0MjYsMjk0MjgsMjk0MzEsMjk0NDEsMjk0MjcsMjk0NDMs''@;'; put 'put ''Mjk0MzQsMzczNTAsMzczNTEsMzczNTIsMzczNTMsMzczNTQsMzczNTUsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAsMzczNjEsMzczNjIsMzczNjMsMzczNjQsMzczNjUsMzczNjYsMzczNjcsMzczNjgsMzczNjksMzczNzAsMzczNzEsMzczNzIsMzczNzMsMzczNzQsMzczNzUsMzcz''@;'; put 'put ''NzYsMzczNzcsMzczNzgsMzczNzksMzczODAsMzczODEsMzczODIsMzczODMsMzczODQsMzczODUsMzczODYsMzczODcsMzczODgsMzczODksMzczOTAsMzczOTEsMzczOTIsMzczOTMsMzczOTQsMzczOTUsMzczOTYsMzczOTcsMzczOTgsMzczOTksMzc0MDAsMzc0MDEsMzc0MDIsMzc0MDMs''@;'; put 'put ''Mzc0MDQsMzc0MDUsMzc0MDYsMzc0MDcsMzc0MDgsMzc0MDksMzc0MTAsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTUsMzc0MTYsMzc0MTcsMzc0MTgsMzc0MTksMzc0MjAsMzc0MjEsMzc0MjIsMzc0MjMsMzc0MjQsMzc0MjUsMzc0MjYsMzc0MjcsMzc0MjgsMzc0MjksMzc0MzAsMzc0''@;'; put 'put ''MzEsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzUsMzc0MzYsMzc0MzcsMzc0MzgsMzc0MzksMzc0NDAsMzc0NDEsMzc0NDIsMzc0NDMsMzc0NDQsMzc0NDUsMjk0MzUsMjk0NjMsMjk0NTksMjk0NzMsMjk0NTAsMjk0NzAsMjk0NjksMjk0NjEsMjk0NzQsMjk0OTcsMjk0NzcsMjk0ODQsMjk0OTYs''@;'; put 'put ''Mjk0ODksMjk1MjAsMjk1MTcsMjk1MjcsMjk1MzYsMjk1NDgsMjk1NTEsMjk1NjYsMzMzMDcsMjI4MjEsMzkxNDMsMjI4MjAsMjI3ODYsMzkyNjcsMzkyNzEsMzkyNzIsMzkyNzMsMzkyNzQsMzkyNzUsMzkyNzYsMzkyODQsMzkyODcsMzkyOTMsMzkyOTYsMzkzMDAsMzkzMDMsMzkzMDYsMzkz''@;'; put 'put ''MDksMzkzMTIsMzkzMTMsMzkzMTUsMzkzMTYsMzkzMTcsMjQxOTIsMjQyMDksMjQyMDMsMjQyMTQsMjQyMjksMjQyMjQsMjQyNDksMjQyNDUsMjQyNTQsMjQyNDMsMzYxNzksMjQyNzQsMjQyNzMsMjQyODMsMjQyOTYsMjQyOTgsMzMyMTAsMjQ1MTYsMjQ1MjEsMjQ1MzQsMjQ1MjcsMjQ1Nzks''@;'; put 'put ''MjQ1NTgsMjQ1ODAsMjQ1NDUsMjQ1NDgsMjQ1NzQsMjQ1ODEsMjQ1ODIsMjQ1NTQsMjQ1NTcsMjQ1NjgsMjQ2MDEsMjQ2MjksMjQ2MTQsMjQ2MDMsMjQ1OTEsMjQ1ODksMjQ2MTcsMjQ2MTksMjQ1ODYsMjQ2MzksMjQ2MDksMjQ2OTYsMjQ2OTcsMjQ2OTksMjQ2OTgsMjQ2NDIsMzc0NDYsMzc0''@;'; put 'put ''NDcsMzc0NDgsMzc0NDksMzc0NTAsMzc0NTEsMzc0NTIsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTYsMzc0NTcsMzc0NTgsMzc0NTksMzc0NjAsMzc0NjEsMzc0NjIsMzc0NjMsMzc0NjQsMzc0NjUsMzc0NjYsMzc0NjcsMzc0NjgsMzc0NjksMzc0NzAsMzc0NzEsMzc0NzIsMzc0NzMsMzc0NzQs''@;'; put 'put ''Mzc0NzUsMzc0NzYsMzc0NzcsMzc0NzgsMzc0NzksMzc0ODAsMzc0ODEsMzc0ODIsMzc0ODMsMzc0ODQsMzc0ODUsMzc0ODYsMzc0ODcsMzc0ODgsMzc0ODksMzc0OTAsMzc0OTEsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTgsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDIsMzc1''@;'; put 'put ''MDMsMzc1MDQsMzc1MDUsMzc1MDYsMzc1MDcsMzc1MDgsMzc1MDksMzc1MTAsMzc1MTEsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTUsMzc1MTYsMzc1MTcsMzc1MTksMzc1MjAsMzc1MjEsMzc1MjIsMzc1MjMsMzc1MjQsMzc1MjUsMzc1MjYsMzc1MjcsMzc1MjgsMzc1MjksMzc1MzAsMzc1MzEs''@;'; put 'put ''Mzc1MzIsMzc1MzMsMzc1MzQsMzc1MzUsMzc1MzYsMzc1MzcsMzc1MzgsMzc1MzksMzc1NDAsMzc1NDEsMzc1NDIsMzc1NDMsMjQ2ODIsMjQ3MDEsMjQ3MjYsMjQ3MzAsMjQ3NDksMjQ3MzMsMjQ3MDcsMjQ3MjIsMjQ3MTYsMjQ3MzEsMjQ4MTIsMjQ3NjMsMjQ3NTMsMjQ3OTcsMjQ3OTIsMjQ3''@;'; put 'put ''NzQsMjQ3OTQsMjQ3NTYsMjQ4NjQsMjQ4NzAsMjQ4NTMsMjQ4NjcsMjQ4MjAsMjQ4MzIsMjQ4NDYsMjQ4NzUsMjQ5MDYsMjQ5NDksMjUwMDQsMjQ5ODAsMjQ5OTksMjUwMTUsMjUwNDQsMjUwNzcsMjQ1NDEsMzg1NzksMzgzNzcsMzgzNzksMzgzODUsMzgzODcsMzgzODksMzgzOTAsMzgzOTYs''@;'; put 'put ''MzgzOTgsMzg0MDMsMzg0MDQsMzg0MDYsMzg0MDgsMzg0MTAsMzg0MTEsMzg0MTIsMzg0MTMsMzg0MTUsMzg0MTgsMzg0MjEsMzg0MjIsMzg0MjMsMzg0MjUsMzg0MjYsMjAwMTIsMjkyNDcsMjUxMDksMjc3MDEsMjc3MzIsMjc3NDAsMjc3MjIsMjc4MTEsMjc3ODEsMjc3OTIsMjc3OTYsMjc3''@;'; put 'put ''ODgsMjc3NTIsMjc3NTMsMjc3NjQsMjc3NjYsMjc3ODIsMjc4MTcsMjc4NTYsMjc4NjAsMjc4MjEsMjc4OTUsMjc4OTYsMjc4ODksMjc4NjMsMjc4MjYsMjc4NzIsMjc4NjIsMjc4OTgsMjc4ODMsMjc4ODYsMjc4MjUsMjc4NTksMjc4ODcsMjc5MDIsMzc1NDQsMzc1NDUsMzc1NDYsMzc1NDcs''@;'; put 'put ''Mzc1NDgsMzc1NDksMzc1NTEsMzc1NTIsMzc1NTMsMzc1NTQsMzc1NTUsMzc1NTYsMzc1NTcsMzc1NTgsMzc1NTksMzc1NjAsMzc1NjEsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjYsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzIsMzc1NzMsMzc1NzQsMzc1NzUsMzc1''@;'; put 'put ''NzcsMzc1NzgsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODMsMzc1ODQsMzc1ODUsMzc1ODYsMzc1ODcsMzc1ODgsMzc1ODksMzc1OTAsMzc1OTEsMzc1OTIsMzc1OTMsMzc1OTQsMzc1OTUsMzc1OTYsMzc1OTcsMzc1OTgsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDIsMzc2MDMsMzc2MDQs''@;'; put 'put ''Mzc2MDUsMzc2MDYsMzc2MDcsMzc2MDgsMzc2MDksMzc2MTAsMzc2MTEsMzc2MTIsMzc2MTMsMzc2MTQsMzc2MTUsMzc2MTYsMzc2MTcsMzc2MTgsMzc2MTksMzc2MjAsMzc2MjEsMzc2MjIsMzc2MjMsMzc2MjQsMzc2MjUsMzc2MjYsMzc2MjcsMzc2MjgsMzc2MjksMzc2MzAsMzc2MzEsMzc2''@;'; put 'put ''MzIsMzc2MzMsMzc2MzQsMzc2MzUsMzc2MzYsMzc2MzcsMzc2MzgsMzc2MzksMzc2NDAsMzc2NDEsMjc5NjEsMjc5NDMsMjc5MTYsMjc5NzEsMjc5NzYsMjc5MTEsMjc5MDgsMjc5MjksMjc5MTgsMjc5NDcsMjc5ODEsMjc5NTAsMjc5NTcsMjc5MzAsMjc5ODMsMjc5ODYsMjc5ODgsMjc5NTUs''@;'; put 'put ''MjgwNDksMjgwMTUsMjgwNjIsMjgwNjQsMjc5OTgsMjgwNTEsMjgwNTIsMjc5OTYsMjhlMywyODAyOCwyODAwMywyODE4NiwyODEwMywyODEwMSwyODEyNiwyODE3NCwyODA5NSwyODEyOCwyODE3NywyODEzNCwyODEyNSwyODEyMSwyODE4MiwyODA3NSwyODE3MiwyODA3OCwyODIwMywyODI3''@;'; put 'put ''MCwyODIzOCwyODI2NywyODMzOCwyODI1NSwyODI5NCwyODI0MywyODI0NCwyODIxMCwyODE5NywyODIyOCwyODM4MywyODMzNywyODMxMiwyODM4NCwyODQ2MSwyODM4NiwyODMyNSwyODMyNywyODM0OSwyODM0NywyODM0MywyODM3NSwyODM0MCwyODM2NywyODMwMywyODM1NCwyODMxOSwy''@;'; put 'put ''ODUxNCwyODQ4NiwyODQ4NywyODQ1MiwyODQzNywyODQwOSwyODQ2MywyODQ3MCwyODQ5MSwyODUzMiwyODQ1OCwyODQyNSwyODQ1NywyODU1MywyODU1NywyODU1NiwyODUzNiwyODUzMCwyODU0MCwyODUzOCwyODYyNSwzNzY0MiwzNzY0MywzNzY0NCwzNzY0NSwzNzY0NiwzNzY0NywzNzY0''@;'; put 'put ''OCwzNzY0OSwzNzY1MCwzNzY1MSwzNzY1MiwzNzY1MywzNzY1NCwzNzY1NSwzNzY1NiwzNzY1NywzNzY1OCwzNzY1OSwzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NCwzNzY2NSwzNzY2NiwzNzY2NywzNzY2OCwzNzY2OSwzNzY3MCwzNzY3MSwzNzY3MiwzNzY3MywzNzY3NCwzNzY3NSwz''@;'; put 'put ''NzY3NiwzNzY3NywzNzY3OCwzNzY3OSwzNzY4MCwzNzY4MSwzNzY4MiwzNzY4MywzNzY4NCwzNzY4NSwzNzY4NiwzNzY4NywzNzY4OCwzNzY4OSwzNzY5MCwzNzY5MSwzNzY5MiwzNzY5MywzNzY5NSwzNzY5NiwzNzY5NywzNzY5OCwzNzY5OSwzNzcwMCwzNzcwMSwzNzcwMiwzNzcwMywzNzcw''@;'; put 'put ''NCwzNzcwNSwzNzcwNiwzNzcwNywzNzcwOCwzNzcwOSwzNzcxMCwzNzcxMSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNSwzNzcxNiwzNzcxNywzNzcxOCwzNzcxOSwzNzcyMCwzNzcyMSwzNzcyMiwzNzcyMywzNzcyNCwzNzcyNSwzNzcyNiwzNzcyNywzNzcyOCwzNzcyOSwzNzczMCwzNzczMSwz''@;'; put 'put ''NzczMiwzNzczMywzNzczNCwzNzczNSwzNzczNiwzNzczNywzNzczOSwyODYxNywyODU4MywyODYwMSwyODU5OCwyODYxMCwyODY0MSwyODY1NCwyODYzOCwyODY0MCwyODY1NSwyODY5OCwyODcwNywyODY5OSwyODcyOSwyODcyNSwyODc1MSwyODc2NiwyMzQyNCwyMzQyOCwyMzQ0NSwyMzQ0''@;'; put 'put ''MywyMzQ2MSwyMzQ4MCwyOTk5OSwzOTU4MiwyNTY1MiwyMzUyNCwyMzUzNCwzNTEyMCwyMzUzNiwzNjQyMywzNTU5MSwzNjc5MCwzNjgxOSwzNjgyMSwzNjgzNywzNjg0NiwzNjgzNiwzNjg0MSwzNjgzOCwzNjg1MSwzNjg0MCwzNjg2OSwzNjg2OCwzNjg3NSwzNjkwMiwzNjg4MSwzNjg3Nywz''@;'; put 'put ''Njg4NiwzNjg5NywzNjkxNywzNjkxOCwzNjkwOSwzNjkxMSwzNjkzMiwzNjk0NSwzNjk0NiwzNjk0NCwzNjk2OCwzNjk1MiwzNjk2MiwzNjk1NSwyNjI5NywzNjk4MCwzNjk4OSwzNjk5NCwzN2UzLDM2OTk1LDM3MDAzLDI0NDAwLDI0NDA3LDI0NDA2LDI0NDA4LDIzNjExLDIxNjc1LDIzNjMy''@;'; put 'put ''LDIzNjQxLDIzNDA5LDIzNjUxLDIzNjU0LDMyNzAwLDI0MzYyLDI0MzYxLDI0MzY1LDMzMzk2LDI0MzgwLDM5NzM5LDIzNjYyLDIyOTEzLDIyOTE1LDIyOTI1LDIyOTUzLDIyOTU0LDIyOTQ3LDM3NzQwLDM3NzQxLDM3NzQyLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ2LDM3NzQ3LDM3NzQ4LDM3''@;'; put 'put ''NzQ5LDM3NzUwLDM3NzUxLDM3NzUyLDM3NzUzLDM3NzU0LDM3NzU1LDM3NzU2LDM3NzU3LDM3NzU4LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzYzLDM3NzY0LDM3NzY1LDM3NzY2LDM3NzY3LDM3NzY4LDM3NzY5LDM3NzcwLDM3NzcxLDM3NzcyLDM3NzczLDM3Nzc0LDM3Nzc2LDM3Nzc3''@;'; put 'put ''LDM3Nzc4LDM3Nzc5LDM3NzgwLDM3NzgxLDM3NzgyLDM3NzgzLDM3Nzg0LDM3Nzg1LDM3Nzg2LDM3Nzg3LDM3Nzg4LDM3Nzg5LDM3NzkwLDM3NzkxLDM3NzkyLDM3NzkzLDM3Nzk0LDM3Nzk1LDM3Nzk2LDM3Nzk3LDM3Nzk4LDM3Nzk5LDM3ODAwLDM3ODAxLDM3ODAyLDM3ODAzLDM3ODA0LDM3''@;'; put 'put ''ODA1LDM3ODA2LDM3ODA3LDM3ODA4LDM3ODA5LDM3ODEwLDM3ODExLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE1LDM3ODE2LDM3ODE3LDM3ODE4LDM3ODE5LDM3ODIwLDM3ODIxLDM3ODIyLDM3ODIzLDM3ODI0LDM3ODI1LDM3ODI2LDM3ODI3LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMy''@;'; put 'put ''LDM3ODMzLDM3ODM1LDM3ODM2LDM3ODM3LDIyOTM1LDIyOTg2LDIyOTU1LDIyOTQyLDIyOTQ4LDIyOTk0LDIyOTYyLDIyOTU5LDIyOTk5LDIyOTc0LDIzMDQ1LDIzMDQ2LDIzMDA1LDIzMDQ4LDIzMDExLDIzZTMsMjMwMzMsMjMwNTIsMjMwNDksMjMwOTAsMjMwOTIsMjMwNTcsMjMwNzUsMjMw''@;'; put 'put ''NTksMjMxMDQsMjMxNDMsMjMxMTQsMjMxMjUsMjMxMDAsMjMxMzgsMjMxNTcsMzMwMDQsMjMyMTAsMjMxOTUsMjMxNTksMjMxNjIsMjMyMzAsMjMyNzUsMjMyMTgsMjMyNTAsMjMyNTIsMjMyMjQsMjMyNjQsMjMyNjcsMjMyODEsMjMyNTQsMjMyNzAsMjMyNTYsMjMyNjAsMjMzMDUsMjMzMTks''@;'; put 'put ''MjMzMTgsMjMzNDYsMjMzNTEsMjMzNjAsMjM1NzMsMjM1ODAsMjMzODYsMjMzOTcsMjM0MTEsMjMzNzcsMjMzNzksMjMzOTQsMzk1NDEsMzk1NDMsMzk1NDQsMzk1NDYsMzk1NTEsMzk1NDksMzk1NTIsMzk1NTMsMzk1NTcsMzk1NjAsMzk1NjIsMzk1NjgsMzk1NzAsMzk1NzEsMzk1NzQsMzk1''@;'; put 'put ''NzYsMzk1NzksMzk1ODAsMzk1ODEsMzk1ODMsMzk1ODQsMzk1ODYsMzk1ODcsMzk1ODksMzk1OTEsMzI0MTUsMzI0MTcsMzI0MTksMzI0MjEsMzI0MjQsMzI0MjUsMzc4MzgsMzc4MzksMzc4NDAsMzc4NDEsMzc4NDIsMzc4NDMsMzc4NDQsMzc4NDUsMzc4NDcsMzc4NDgsMzc4NDksMzc4NTAs''@;'; put 'put ''Mzc4NTEsMzc4NTIsMzc4NTMsMzc4NTQsMzc4NTUsMzc4NTYsMzc4NTcsMzc4NTgsMzc4NTksMzc4NjAsMzc4NjEsMzc4NjIsMzc4NjMsMzc4NjQsMzc4NjUsMzc4NjYsMzc4NjcsMzc4NjgsMzc4NjksMzc4NzAsMzc4NzEsMzc4NzIsMzc4NzMsMzc4NzQsMzc4NzUsMzc4NzYsMzc4NzcsMzc4''@;'; put 'put ''NzgsMzc4NzksMzc4ODAsMzc4ODEsMzc4ODIsMzc4ODMsMzc4ODQsMzc4ODUsMzc4ODYsMzc4ODcsMzc4ODgsMzc4ODksMzc4OTAsMzc4OTEsMzc4OTIsMzc4OTMsMzc4OTQsMzc4OTUsMzc4OTYsMzc4OTcsMzc4OTgsMzc4OTksMzc5MDAsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDQsMzc5MDUs''@;'; put 'put ''Mzc5MDYsMzc5MDcsMzc5MDgsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTIsMzc5MTMsMzc5MTQsMzc5MTUsMzc5MTYsMzc5MTcsMzc5MTgsMzc5MTksMzc5MjAsMzc5MjEsMzc5MjIsMzc5MjMsMzc5MjQsMzc5MjUsMzc5MjYsMzc5MjcsMzc5MjgsMzc5MjksMzc5MzAsMzc5MzEsMzc5MzIsMzc5''@;'; put 'put ''MzMsMzc5MzQsMzI0MjksMzI0MzIsMzI0NDYsMzI0NDgsMzI0NDksMzI0NTAsMzI0NTcsMzI0NTksMzI0NjAsMzI0NjQsMzI0NjgsMzI0NzEsMzI0NzUsMzI0ODAsMzI0ODEsMzI0ODgsMzI0OTEsMzI0OTQsMzI0OTUsMzI0OTcsMzI0OTgsMzI1MjUsMzI1MDIsMzI1MDYsMzI1MDcsMzI1MTAs''@;'; put 'put ''MzI1MTMsMzI1MTQsMzI1MTUsMzI1MTksMzI1MjAsMzI1MjMsMzI1MjQsMzI1MjcsMzI1MjksMzI1MzAsMzI1MzUsMzI1MzcsMzI1NDAsMzI1MzksMzI1NDMsMzI1NDUsMzI1NDYsMzI1NDcsMzI1NDgsMzI1NDksMzI1NTAsMzI1NTEsMzI1NTQsMzI1NTUsMzI1NTYsMzI1NTcsMzI1NTksMzI1''@;'; put 'put ''NjAsMzI1NjEsMzI1NjIsMzI1NjMsMzI1NjUsMjQxODYsMzAwNzksMjQwMjcsMzAwMTQsMzcwMTMsMjk1ODIsMjk1ODUsMjk2MTQsMjk2MDIsMjk1OTksMjk2NDcsMjk2MzQsMjk2NDksMjk2MjMsMjk2MTksMjk2MzIsMjk2NDEsMjk2NDAsMjk2NjksMjk2NTcsMzkwMzYsMjk3MDYsMjk2NzMs''@;'; put 'put ''Mjk2NzEsMjk2NjIsMjk2MjYsMjk2ODIsMjk3MTEsMjk3MzgsMjk3ODcsMjk3MzQsMjk3MzMsMjk3MzYsMjk3NDQsMjk3NDIsMjk3NDAsMzc5MzUsMzc5MzYsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDEsMzc5NDIsMzc5NDMsMzc5NDQsMzc5NDUsMzc5NDYsMzc5NDcsMzc5NDgsMzc5''@;'; put 'put ''NDksMzc5NTEsMzc5NTIsMzc5NTMsMzc5NTQsMzc5NTUsMzc5NTYsMzc5NTcsMzc5NTgsMzc5NTksMzc5NjAsMzc5NjEsMzc5NjIsMzc5NjMsMzc5NjQsMzc5NjUsMzc5NjYsMzc5NjcsMzc5NjgsMzc5NjksMzc5NzAsMzc5NzEsMzc5NzIsMzc5NzMsMzc5NzQsMzc5NzUsMzc5NzYsMzc5Nzcs''@;'; put 'put ''Mzc5NzgsMzc5NzksMzc5ODAsMzc5ODEsMzc5ODIsMzc5ODMsMzc5ODQsMzc5ODUsMzc5ODYsMzc5ODcsMzc5ODgsMzc5ODksMzc5OTAsMzc5OTEsMzc5OTIsMzc5OTMsMzc5OTQsMzc5OTYsMzc5OTcsMzc5OTgsMzc5OTksMzhlMywzODAwMSwzODAwMiwzODAwMywzODAwNCwzODAwNSwzODAw''@;'; put 'put ''NiwzODAwNywzODAwOCwzODAwOSwzODAxMCwzODAxMSwzODAxMiwzODAxMywzODAxNCwzODAxNSwzODAxNiwzODAxNywzODAxOCwzODAxOSwzODAyMCwzODAzMywzODAzOCwzODA0MCwzODA4NywzODA5NSwzODA5OSwzODEwMCwzODEwNiwzODExOCwzODEzOSwzODE3MiwzODE3NiwyOTcyMywy''@;'; put 'put ''OTcyMiwyOTc2MSwyOTc4OCwyOTc4MywyOTc4MSwyOTc4NSwyOTgxNSwyOTgwNSwyOTgyMiwyOTg1MiwyOTgzOCwyOTgyNCwyOTgyNSwyOTgzMSwyOTgzNSwyOTg1NCwyOTg2NCwyOTg2NSwyOTg0MCwyOTg2MywyOTkwNiwyOTg4MiwzODg5MCwzODg5MSwzODg5MiwyNjQ0NCwyNjQ1MSwyNjQ2''@;'; put 'put ''MiwyNjQ0MCwyNjQ3MywyNjUzMywyNjUwMywyNjQ3NCwyNjQ4MywyNjUyMCwyNjUzNSwyNjQ4NSwyNjUzNiwyNjUyNiwyNjU0MSwyNjUwNywyNjQ4NywyNjQ5MiwyNjYwOCwyNjYzMywyNjU4NCwyNjYzNCwyNjYwMSwyNjU0NCwyNjYzNiwyNjU4NSwyNjU0OSwyNjU4NiwyNjU0NywyNjU4OSwy''@;'; put 'put ''NjYyNCwyNjU2MywyNjU1MiwyNjU5NCwyNjYzOCwyNjU2MSwyNjYyMSwyNjY3NCwyNjY3NSwyNjcyMCwyNjcyMSwyNjcwMiwyNjcyMiwyNjY5MiwyNjcyNCwyNjc1NSwyNjY1MywyNjcwOSwyNjcyNiwyNjY4OSwyNjcyNywyNjY4OCwyNjY4NiwyNjY5OCwyNjY5NywyNjY2NSwyNjgwNSwyNjc2''@;'; put 'put ''NywyNjc0MCwyNjc0MywyNjc3MSwyNjczMSwyNjgxOCwyNjk5MCwyNjg3NiwyNjkxMSwyNjkxMiwyNjg3MywzODE4MywzODE5NSwzODIwNSwzODIxMSwzODIxNiwzODIxOSwzODIyOSwzODIzNCwzODI0MCwzODI1NCwzODI2MCwzODI2MSwzODI2MywzODI2NCwzODI2NSwzODI2NiwzODI2Nywz''@;'; put 'put ''ODI2OCwzODI2OSwzODI3MCwzODI3MiwzODI3MywzODI3NCwzODI3NSwzODI3NiwzODI3NywzODI3OCwzODI3OSwzODI4MCwzODI4MSwzODI4MiwzODI4MywzODI4NCwzODI4NSwzODI4NiwzODI4NywzODI4OCwzODI4OSwzODI5MCwzODI5MSwzODI5MiwzODI5MywzODI5NCwzODI5NSwzODI5''@;'; put 'put ''NiwzODI5NywzODI5OCwzODI5OSwzODMwMCwzODMwMSwzODMwMiwzODMwMywzODMwNCwzODMwNSwzODMwNiwzODMwNywzODMwOCwzODMwOSwzODMxMCwzODMxMSwzODMxMiwzODMxMywzODMxNCwzODMxNSwzODMxNiwzODMxNywzODMxOCwzODMxOSwzODMyMCwzODMyMSwzODMyMiwzODMyMywz''@;'; put 'put ''ODMyNCwzODMyNSwzODMyNiwzODMyNywzODMyOCwzODMyOSwzODMzMCwzODMzMSwzODMzMiwzODMzMywzODMzNCwzODMzNSwzODMzNiwzODMzNywzODMzOCwzODMzOSwzODM0MCwzODM0MSwzODM0MiwzODM0MywzODM0NCwzODM0NSwzODM0NiwzODM0NywyNjkxNiwyNjg2NCwyNjg5MSwyNjg4''@;'; put 'put ''MSwyNjk2NywyNjg1MSwyNjg5NiwyNjk5MywyNjkzNywyNjk3NiwyNjk0NiwyNjk3MywyNzAxMiwyNjk4NywyNzAwOCwyNzAzMiwyN2UzLDI2OTMyLDI3MDg0LDI3MDE1LDI3MDE2LDI3MDg2LDI3MDE3LDI2OTgyLDI2OTc5LDI3MDAxLDI3MDM1LDI3MDQ3LDI3MDY3LDI3MDUxLDI3MDUzLDI3''@;'; put 'put ''MDkyLDI3MDU3LDI3MDczLDI3MDgyLDI3MTAzLDI3MDI5LDI3MTA0LDI3MDIxLDI3MTM1LDI3MTgzLDI3MTE3LDI3MTU5LDI3MTYwLDI3MjM3LDI3MTIyLDI3MjA0LDI3MTk4LDI3Mjk2LDI3MjE2LDI3MjI3LDI3MTg5LDI3Mjc4LDI3MjU3LDI3MTk3LDI3MTc2LDI3MjI0LDI3MjYwLDI3Mjgx''@;'; put 'put ''LDI3MjgwLDI3MzA1LDI3Mjg3LDI3MzA3LDI5NDk1LDI5NTIyLDI3NTIxLDI3NTIyLDI3NTI3LDI3NTI0LDI3NTM4LDI3NTM5LDI3NTMzLDI3NTQ2LDI3NTQ3LDI3NTUzLDI3NTYyLDM2NzE1LDM2NzE3LDM2NzIxLDM2NzIyLDM2NzIzLDM2NzI1LDM2NzI2LDM2NzI4LDM2NzI3LDM2NzI5LDM2''@;'; put 'put ''NzMwLDM2NzMyLDM2NzM0LDM2NzM3LDM2NzM4LDM2NzQwLDM2NzQzLDM2NzQ3LDM4MzQ4LDM4MzQ5LDM4MzUwLDM4MzUxLDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzU2LDM4MzU3LDM4MzU4LDM4MzU5LDM4MzYwLDM4MzYxLDM4MzYyLDM4MzYzLDM4MzY0LDM4MzY1LDM4MzY2LDM4MzY3''@;'; put 'put ''LDM4MzY4LDM4MzY5LDM4MzcwLDM4MzcxLDM4MzcyLDM4MzczLDM4Mzc0LDM4Mzc1LDM4MzgwLDM4Mzk5LDM4NDA3LDM4NDE5LDM4NDI0LDM4NDI3LDM4NDMwLDM4NDMyLDM4NDM1LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDM5LDM4NDQwLDM4NDQxLDM4NDQzLDM4NDQ0LDM4NDQ1LDM4NDQ3LDM4''@;'; put 'put ''NDQ4LDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYyLDM4NDY1LDM4NDY3LDM4NDc0LDM4NDc4LDM4NDc5LDM4NDgxLDM4NDgyLDM4NDgzLDM4NDg2LDM4NDg3LDM4NDg4LDM4NDg5LDM4NDkwLDM4NDkyLDM4NDkzLDM4NDk0LDM4NDk2LDM4NDk5LDM4NTAxLDM4NTAyLDM4NTA3LDM4NTA5''@;'; put 'put ''LDM4NTEwLDM4NTExLDM4NTEyLDM4NTEzLDM4NTE1LDM4NTIwLDM4NTIxLDM4NTIyLDM4NTIzLDM4NTI0LDM4NTI1LDM4NTI2LDM4NTI3LDM4NTI4LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM1LDM4NTM3LDM4NTM4LDM2NzQ5LDM2NzUwLDM2NzUxLDM2NzYwLDM2NzYyLDM2NTU4LDI1''@;'; put 'put ''MDk5LDI1MTExLDI1MTE1LDI1MTE5LDI1MTIyLDI1MTIxLDI1MTI1LDI1MTI0LDI1MTMyLDMzMjU1LDI5OTM1LDI5OTQwLDI5OTUxLDI5OTY3LDI5OTY5LDI5OTcxLDI1OTA4LDI2MDk0LDI2MDk1LDI2MDk2LDI2MTIyLDI2MTM3LDI2NDgyLDI2MTE1LDI2MTMzLDI2MTEyLDI4ODA1LDI2MzU5''@;'; put 'put ''LDI2MTQxLDI2MTY0LDI2MTYxLDI2MTY2LDI2MTY1LDMyNzc0LDI2MjA3LDI2MTk2LDI2MTc3LDI2MTkxLDI2MTk4LDI2MjA5LDI2MTk5LDI2MjMxLDI2MjQ0LDI2MjUyLDI2Mjc5LDI2MjY5LDI2MzAyLDI2MzMxLDI2MzMyLDI2MzQyLDI2MzQ1LDM2MTQ2LDM2MTQ3LDM2MTUwLDM2MTU1LDM2''@;'; put 'put ''MTU3LDM2MTYwLDM2MTY1LDM2MTY2LDM2MTY4LDM2MTY5LDM2MTY3LDM2MTczLDM2MTgxLDM2MTg1LDM1MjcxLDM1Mjc0LDM1Mjc1LDM1Mjc2LDM1Mjc4LDM1Mjc5LDM1MjgwLDM1MjgxLDI5Mjk0LDI5MzQzLDI5Mjc3LDI5Mjg2LDI5Mjk1LDI5MzEwLDI5MzExLDI5MzE2LDI5MzIzLDI5MzI1''@;'; put 'put ''LDI5MzI3LDI5MzMwLDI1MzUyLDI1Mzk0LDI1NTIwLDM4NTQwLDM4NTQyLDM4NTQ1LDM4NTQ2LDM4NTQ3LDM4NTQ5LDM4NTUwLDM4NTU0LDM4NTU1LDM4NTU3LDM4NTU4LDM4NTU5LDM4NTYwLDM4NTYxLDM4NTYyLDM4NTYzLDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY4LDM4NTY5LDM4NTcwLDM4''@;'; put 'put ''NTcxLDM4NTcyLDM4NTczLDM4NTc0LDM4NTc1LDM4NTc3LDM4NTc4LDM4NTgwLDM4NTgxLDM4NTgzLDM4NTg0LDM4NTg2LDM4NTg3LDM4NTkxLDM4NTk0LDM4NTk1LDM4NjAwLDM4NjAyLDM4NjAzLDM4NjA4LDM4NjA5LDM4NjExLDM4NjEyLDM4NjE0LDM4NjE1LDM4NjE2LDM4NjE3LDM4NjE4''@;'; put 'put ''LDM4NjE5LDM4NjIwLDM4NjIxLDM4NjIyLDM4NjIzLDM4NjI1LDM4NjI2LDM4NjI3LDM4NjI4LDM4NjI5LDM4NjMwLDM4NjMxLDM4NjM1LDM4NjM2LDM4NjM3LDM4NjM4LDM4NjQwLDM4NjQxLDM4NjQyLDM4NjQ0LDM4NjQ1LDM4NjQ4LDM4NjUwLDM4NjUxLDM4NjUyLDM4NjUzLDM4NjU1LDM4''@;'; put 'put ''NjU4LDM4NjU5LDM4NjYxLDM4NjY2LDM4NjY3LDM4NjY4LDM4NjcyLDM4NjczLDM4Njc0LDM4Njc2LDM4Njc3LDM4Njc5LDM4NjgwLDM4NjgxLDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg3LDM4Njg4LDI1NjYzLDI1ODE2LDMyNzcyLDI3NjI2LDI3NjM1LDI3NjQ1LDI3NjM3LDI3NjQxLDI3NjUz''@;'; put 'put ''LDI3NjU1LDI3NjU0LDI3NjYxLDI3NjY5LDI3NjcyLDI3NjczLDI3Njc0LDI3NjgxLDI3Njg5LDI3Njg0LDI3NjkwLDI3Njk4LDI1OTA5LDI1OTQxLDI1OTYzLDI5MjYxLDI5MjY2LDI5MjcwLDI5MjMyLDM0NDAyLDIxMDE0LDMyOTI3LDMyOTI0LDMyOTE1LDMyOTU2LDI2Mzc4LDMyOTU3LDMy''@;'; put 'put ''OTQ1LDMyOTM5LDMyOTQxLDMyOTQ4LDMyOTUxLDMyOTk5LDMzZTMsMzMwMDEsMzMwMDIsMzI5ODcsMzI5NjIsMzI5NjQsMzI5ODUsMzI5NzMsMzI5ODMsMjYzODQsMzI5ODksMzMwMDMsMzMwMDksMzMwMTIsMzMwMDUsMzMwMzcsMzMwMzgsMzMwMTAsMzMwMjAsMjYzODksMzMwNDIsMzU5MzAs''@;'; put 'put ''MzMwNzgsMzMwNTQsMzMwNjgsMzMwNDgsMzMwNzQsMzMwOTYsMzMxMDAsMzMxMDcsMzMxNDAsMzMxMTMsMzMxMTQsMzMxMzcsMzMxMjAsMzMxMjksMzMxNDgsMzMxNDksMzMxMzMsMzMxMjcsMjI2MDUsMjMyMjEsMzMxNjAsMzMxNTQsMzMxNjksMjgzNzMsMzMxODcsMzMxOTQsMzMyMjgsMjY0''@;'; put 'put ''MDYsMzMyMjYsMzMyMTEsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTIsMzg2OTMsMzg2OTQsMzg2OTUsMzg2OTYsMzg2OTcsMzg2OTksMzg3MDAsMzg3MDIsMzg3MDMsMzg3MDUsMzg3MDcsMzg3MDgsMzg3MDksMzg3MTAsMzg3MTEsMzg3MTQsMzg3MTUsMzg3MTYsMzg3MTcsMzg3MTksMzg3MjAs''@;'; put 'put ''Mzg3MjEsMzg3MjIsMzg3MjMsMzg3MjQsMzg3MjUsMzg3MjYsMzg3MjcsMzg3MjgsMzg3MjksMzg3MzAsMzg3MzEsMzg3MzIsMzg3MzMsMzg3MzQsMzg3MzUsMzg3MzYsMzg3MzcsMzg3NDAsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDgsMzg3NDksMzg3NTEsMzg3NTUsMzg3NTYsMzg3''@;'; put 'put ''NTgsMzg3NTksMzg3NjAsMzg3NjIsMzg3NjMsMzg3NjQsMzg3NjUsMzg3NjYsMzg3NjcsMzg3NjgsMzg3NjksMzg3NzAsMzg3NzMsMzg3NzUsMzg3NzYsMzg3NzcsMzg3NzgsMzg3NzksMzg3ODEsMzg3ODIsMzg3ODMsMzg3ODQsMzg3ODUsMzg3ODYsMzg3ODcsMzg3ODgsMzg3OTAsMzg3OTEs''@;'; put 'put ''Mzg3OTIsMzg3OTMsMzg3OTQsMzg3OTYsMzg3OTgsMzg3OTksMzg4MDAsMzg4MDMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTEsMzg4MTIsMzg4MTMsMzMyMTcsMzMxOTAsMjc0MjgsMjc0NDcsMjc0NDksMjc0NTksMjc0NjIsMjc0ODEsMzkxMjEsMzkxMjIsMzkxMjMsMzkx''@;'; put 'put ''MjUsMzkxMjksMzkxMzAsMjc1NzEsMjQzODQsMjc1ODYsMzUzMTUsMjZlMyw0MDc4NSwyNjAwMywyNjA0NCwyNjA1NCwyNjA1MiwyNjA1MSwyNjA2MCwyNjA2MiwyNjA2NiwyNjA3MCwyODgwMCwyODgyOCwyODgyMiwyODgyOSwyODg1OSwyODg2NCwyODg1NSwyODg0MywyODg0OSwyODkwNCwy''@;'; put 'put ''ODg3NCwyODk0NCwyODk0NywyODk1MCwyODk3NSwyODk3NywyOTA0MywyOTAyMCwyOTAzMiwyODk5NywyOTA0MiwyOTAwMiwyOTA0OCwyOTA1MCwyOTA4MCwyOTEwNywyOTEwOSwyOTA5NiwyOTA4OCwyOTE1MiwyOTE0MCwyOTE1OSwyOTE3NywyOTIxMywyOTIyNCwyODc4MCwyODk1MiwyOTAz''@;'; put 'put ''MCwyOTExMywyNTE1MCwyNTE0OSwyNTE1NSwyNTE2MCwyNTE2MSwzMTAzNSwzMTA0MCwzMTA0NiwzMTA0OSwzMTA2NywzMTA2OCwzMTA1OSwzMTA2NiwzMTA3NCwzMTA2MywzMTA3MiwzMTA4NywzMTA3OSwzMTA5OCwzMTEwOSwzMTExNCwzMTEzMCwzMTE0MywzMTE1NSwyNDUyOSwyNDUyOCwz''@;'; put 'put ''ODgxNCwzODgxNSwzODgxNywzODgxOCwzODgyMCwzODgyMSwzODgyMiwzODgyMywzODgyNCwzODgyNSwzODgyNiwzODgyOCwzODgzMCwzODgzMiwzODgzMywzODgzNSwzODgzNywzODgzOCwzODgzOSwzODg0MCwzODg0MSwzODg0MiwzODg0MywzODg0NCwzODg0NSwzODg0NiwzODg0NywzODg0''@;'; put 'put ''OCwzODg0OSwzODg1MCwzODg1MSwzODg1MiwzODg1MywzODg1NCwzODg1NSwzODg1NiwzODg1NywzODg1OCwzODg1OSwzODg2MCwzODg2MSwzODg2MiwzODg2MywzODg2NCwzODg2NSwzODg2NiwzODg2NywzODg2OCwzODg2OSwzODg3MCwzODg3MSwzODg3MiwzODg3MywzODg3NCwzODg3NSwz''@;'; put 'put ''ODg3NiwzODg3NywzODg3OCwzODg3OSwzODg4MCwzODg4MSwzODg4MiwzODg4MywzODg4NCwzODg4NSwzODg4OCwzODg5NCwzODg5NSwzODg5NiwzODg5NywzODg5OCwzODkwMCwzODkwMywzODkwNCwzODkwNSwzODkwNiwzODkwNywzODkwOCwzODkwOSwzODkxMCwzODkxMSwzODkxMiwzODkx''@;'; put 'put ''MywzODkxNCwzODkxNSwzODkxNiwzODkxNywzODkxOCwzODkxOSwzODkyMCwzODkyMSwzODkyMiwzODkyMywzODkyNCwzODkyNSwzODkyNiwyNDYzNiwyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDY2NSwyNDY3NSwyNDc0NywyNDgzOCwyNDg0NSwyNDkyNSwyNTAwMSwyNDk4OSwyNTAzNSwy''@;'; put 'put ''NTA0MSwyNTA5NCwzMjg5NiwzMjg5NSwyNzc5NSwyNzg5NCwyODE1NiwzMDcxMCwzMDcxMiwzMDcyMCwzMDcyOSwzMDc0MywzMDc0NCwzMDczNywyNjAyNywzMDc2NSwzMDc0OCwzMDc0OSwzMDc3NywzMDc3OCwzMDc3OSwzMDc1MSwzMDc4MCwzMDc1NywzMDc2NCwzMDc1NSwzMDc2MSwzMDc5''@;'; put 'put ''OCwzMDgyOSwzMDgwNiwzMDgwNywzMDc1OCwzMDgwMCwzMDc5MSwzMDc5NiwzMDgyNiwzMDg3NSwzMDg2NywzMDg3NCwzMDg1NSwzMDg3NiwzMDg4MSwzMDg4MywzMDg5OCwzMDkwNSwzMDg4NSwzMDkzMiwzMDkzNywzMDkyMSwzMDk1NiwzMDk2MiwzMDk4MSwzMDk2NCwzMDk5NSwzMTAxMiwz''@;'; put 'put ''MTAwNiwzMTAyOCw0MDg1OSw0MDY5Nyw0MDY5OSw0MDcwMCwzMDQ0OSwzMDQ2OCwzMDQ3NywzMDQ1NywzMDQ3MSwzMDQ3MiwzMDQ5MCwzMDQ5OCwzMDQ4OSwzMDUwOSwzMDUwMiwzMDUxNywzMDUyMCwzMDU0NCwzMDU0NSwzMDUzNSwzMDUzMSwzMDU1NCwzMDU2OCwzODkyNywzODkyOCwzODky''@;'; put 'put ''OSwzODkzMCwzODkzMSwzODkzMiwzODkzMywzODkzNCwzODkzNSwzODkzNiwzODkzNywzODkzOCwzODkzOSwzODk0MCwzODk0MSwzODk0MiwzODk0MywzODk0NCwzODk0NSwzODk0NiwzODk0NywzODk0OCwzODk0OSwzODk1MCwzODk1MSwzODk1MiwzODk1MywzODk1NCwzODk1NSwzODk1Niwz''@;'; put 'put ''ODk1NywzODk1OCwzODk1OSwzODk2MCwzODk2MSwzODk2MiwzODk2MywzODk2NCwzODk2NSwzODk2NiwzODk2NywzODk2OCwzODk2OSwzODk3MCwzODk3MSwzODk3MiwzODk3MywzODk3NCwzODk3NSwzODk3NiwzODk3NywzODk3OCwzODk3OSwzODk4MCwzODk4MSwzODk4MiwzODk4MywzODk4''@;'; put 'put ''NCwzODk4NSwzODk4NiwzODk4NywzODk4OCwzODk4OSwzODk5MCwzODk5MSwzODk5MiwzODk5MywzODk5NCwzODk5NSwzODk5NiwzODk5NywzODk5OCwzODk5OSwzOWUzLDM5MDAxLDM5MDAyLDM5MDAzLDM5MDA0LDM5MDA1LDM5MDA2LDM5MDA3LDM5MDA4LDM5MDA5LDM5MDEwLDM5MDExLDM5''@;'; put 'put ''MDEyLDM5MDEzLDM5MDE0LDM5MDE1LDM5MDE2LDM5MDE3LDM5MDE4LDM5MDE5LDM5MDIwLDM5MDIxLDM5MDIyLDMwNTYyLDMwNTY1LDMwNTkxLDMwNjA1LDMwNTg5LDMwNTkyLDMwNjA0LDMwNjA5LDMwNjIzLDMwNjI0LDMwNjQwLDMwNjQ1LDMwNjUzLDMwMDEwLDMwMDE2LDMwMDMwLDMwMDI3''@;'; put 'put ''LDMwMDI0LDMwMDQzLDMwMDY2LDMwMDczLDMwMDgzLDMyNjAwLDMyNjA5LDMyNjA3LDM1NDAwLDMyNjE2LDMyNjI4LDMyNjI1LDMyNjMzLDMyNjQxLDMyNjM4LDMwNDEzLDMwNDM3LDM0ODY2LDM4MDIxLDM4MDIyLDM4MDIzLDM4MDI3LDM4MDI2LDM4MDI4LDM4MDI5LDM4MDMxLDM4MDMyLDM4''@;'; put 'put ''MDM2LDM4MDM5LDM4MDM3LDM4MDQyLDM4MDQzLDM4MDQ0LDM4MDUxLDM4MDUyLDM4MDU5LDM4MDU4LDM4MDYxLDM4MDYwLDM4MDYzLDM4MDY0LDM4MDY2LDM4MDY4LDM4MDcwLDM4MDcxLDM4MDcyLDM4MDczLDM4MDc0LDM4MDc2LDM4MDc3LDM4MDc5LDM4MDg0LDM4MDg4LDM4MDg5LDM4MDkw''@;'; put 'put ''LDM4MDkxLDM4MDkyLDM4MDkzLDM4MDk0LDM4MDk2LDM4MDk3LDM4MDk4LDM4MTAxLDM4MTAyLDM4MTAzLDM4MTA1LDM4MTA0LDM4MTA3LDM4MTEwLDM4MTExLDM4MTEyLDM4MTE0LDM4MTE2LDM4MTE3LDM4MTE5LDM4MTIwLDM4MTIyLDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI2LDM5MDI3LDM5''@;'; put 'put ''MDI4LDM5MDUxLDM5MDU0LDM5MDU4LDM5MDYxLDM5MDY1LDM5MDc1LDM5MDgwLDM5MDgxLDM5MDgyLDM5MDgzLDM5MDg0LDM5MDg1LDM5MDg2LDM5MDg3LDM5MDg4LDM5MDg5LDM5MDkwLDM5MDkxLDM5MDkyLDM5MDkzLDM5MDk0LDM5MDk1LDM5MDk2LDM5MDk3LDM5MDk4LDM5MDk5LDM5MTAw''@;'; put 'put ''LDM5MTAxLDM5MTAyLDM5MTAzLDM5MTA0LDM5MTA1LDM5MTA2LDM5MTA3LDM5MTA4LDM5MTA5LDM5MTEwLDM5MTExLDM5MTEyLDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MTE3LDM5MTE5LDM5MTIwLDM5MTI0LDM5MTI2LDM5MTI3LDM5MTMxLDM5MTMyLDM5MTMzLDM5MTM2LDM5MTM3LDM5''@;'; put 'put ''MTM4LDM5MTM5LDM5MTQwLDM5MTQxLDM5MTQyLDM5MTQ1LDM5MTQ2LDM5MTQ3LDM5MTQ4LDM5MTQ5LDM5MTUwLDM5MTUxLDM5MTUyLDM5MTUzLDM5MTU0LDM5MTU1LDM5MTU2LDM5MTU3LDM5MTU4LDM5MTU5LDM5MTYwLDM5MTYxLDM5MTYyLDM5MTYzLDM5MTY0LDM5MTY1LDM5MTY2LDM5MTY3''@;'; put 'put ''LDM5MTY4LDM5MTY5LDM5MTcwLDM5MTcxLDM5MTcyLDM5MTczLDM5MTc0LDM5MTc1LDM4MTIxLDM4MTIzLDM4MTI2LDM4MTI3LDM4MTMxLDM4MTMyLDM4MTMzLDM4MTM1LDM4MTM3LDM4MTQwLDM4MTQxLDM4MTQzLDM4MTQ3LDM4MTQ2LDM4MTUwLDM4MTUxLDM4MTUzLDM4MTU0LDM4MTU3LDM4''@;'; put 'put ''MTU4LDM4MTU5LDM4MTYyLDM4MTYzLDM4MTY0LDM4MTY1LDM4MTY2LDM4MTY4LDM4MTcxLDM4MTczLDM4MTc0LDM4MTc1LDM4MTc4LDM4MTg2LDM4MTg3LDM4MTg1LDM4MTg4LDM4MTkzLDM4MTk0LDM4MTk2LDM4MTk4LDM4MTk5LDM4MjAwLDM4MjA0LDM4MjA2LDM4MjA3LDM4MjEwLDM4MTk3''@;'; put 'put ''LDM4MjEyLDM4MjEzLDM4MjE0LDM4MjE3LDM4MjIwLDM4MjIyLDM4MjIzLDM4MjI2LDM4MjI3LDM4MjI4LDM4MjMwLDM4MjMxLDM4MjMyLDM4MjMzLDM4MjM1LDM4MjM4LDM4MjM5LDM4MjM3LDM4MjQxLDM4MjQyLDM4MjQ0LDM4MjQ1LDM4MjQ2LDM4MjQ3LDM4MjQ4LDM4MjQ5LDM4MjUwLDM4''@;'; put 'put ''MjUxLDM4MjUyLDM4MjU1LDM4MjU3LDM4MjU4LDM4MjU5LDM4MjAyLDMwNjk1LDMwNzAwLDM4NjAxLDMxMTg5LDMxMjEzLDMxMjAzLDMxMjExLDMxMjM4LDIzODc5LDMxMjM1LDMxMjM0LDMxMjYyLDMxMjUyLDM5MTc2LDM5MTc3LDM5MTc4LDM5MTc5LDM5MTgwLDM5MTgyLDM5MTgzLDM5MTg1''@;'; put 'put ''LDM5MTg2LDM5MTg3LDM5MTg4LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTkyLDM5MTkzLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk3LDM5MTk4LDM5MTk5LDM5MjAwLDM5MjAxLDM5MjAyLDM5MjAzLDM5MjA0LDM5MjA1LDM5MjA2LDM5MjA3LDM5MjA4LDM5MjA5LDM5MjEwLDM5MjExLDM5MjEyLDM5''@;'; put 'put ''MjEzLDM5MjE1LDM5MjE2LDM5MjE3LDM5MjE4LDM5MjE5LDM5MjIwLDM5MjIxLDM5MjIyLDM5MjIzLDM5MjI0LDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjI5LDM5MjMwLDM5MjMxLDM5MjMyLDM5MjMzLDM5MjM0LDM5MjM1LDM5MjM2LDM5MjM3LDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQx''@;'; put 'put ''LDM5MjQyLDM5MjQzLDM5MjQ0LDM5MjQ1LDM5MjQ2LDM5MjQ3LDM5MjQ4LDM5MjQ5LDM5MjUwLDM5MjUxLDM5MjU0LDM5MjU1LDM5MjU2LDM5MjU3LDM5MjU4LDM5MjU5LDM5MjYwLDM5MjYxLDM5MjYyLDM5MjYzLDM5MjY0LDM5MjY1LDM5MjY2LDM5MjY4LDM5MjcwLDM5MjgzLDM5Mjg4LDM5''@;'; put 'put ''Mjg5LDM5MjkxLDM5Mjk0LDM5Mjk4LDM5Mjk5LDM5MzA1LDMxMjg5LDMxMjg3LDMxMzEzLDQwNjU1LDM5MzMzLDMxMzQ0LDMwMzQ0LDMwMzUwLDMwMzU1LDMwMzYxLDMwMzcyLDI5OTE4LDI5OTIwLDI5OTk2LDQwNDgwLDQwNDgyLDQwNDg4LDQwNDg5LDQwNDkwLDQwNDkxLDQwNDkyLDQwNDk4''@;'; put 'put ''LDQwNDk3LDQwNTAyLDQwNTA0LDQwNTAzLDQwNTA1LDQwNTA2LDQwNTEwLDQwNTEzLDQwNTE0LDQwNTE2LDQwNTE4LDQwNTE5LDQwNTIwLDQwNTIxLDQwNTIzLDQwNTI0LDQwNTI2LDQwNTI5LDQwNTMzLDQwNTM1LDQwNTM4LDQwNTM5LDQwNTQwLDQwNTQyLDQwNTQ3LDQwNTUwLDQwNTUxLDQw''@;'; put 'put ''NTUyLDQwNTUzLDQwNTU0LDQwNTU1LDQwNTU2LDQwNTYxLDQwNTU3LDQwNTYzLDMwMDk4LDMwMTAwLDMwMTAyLDMwMTEyLDMwMTA5LDMwMTI0LDMwMTE1LDMwMTMxLDMwMTMyLDMwMTM2LDMwMTQ4LDMwMTI5LDMwMTI4LDMwMTQ3LDMwMTQ2LDMwMTY2LDMwMTU3LDMwMTc5LDMwMTg0LDMwMTgy''@;'; put 'put ''LDMwMTgwLDMwMTg3LDMwMTgzLDMwMjExLDMwMTkzLDMwMjA0LDMwMjA3LDMwMjI0LDMwMjA4LDMwMjEzLDMwMjIwLDMwMjMxLDMwMjE4LDMwMjQ1LDMwMjMyLDMwMjI5LDMwMjMzLDM5MzA4LDM5MzEwLDM5MzIyLDM5MzIzLDM5MzI0LDM5MzI1LDM5MzI2LDM5MzI3LDM5MzI4LDM5MzI5LDM5''@;'; put 'put ''MzMwLDM5MzMxLDM5MzMyLDM5MzM0LDM5MzM1LDM5MzM3LDM5MzM4LDM5MzM5LDM5MzQwLDM5MzQxLDM5MzQyLDM5MzQzLDM5MzQ0LDM5MzQ1LDM5MzQ2LDM5MzQ3LDM5MzQ4LDM5MzQ5LDM5MzUwLDM5MzUxLDM5MzUyLDM5MzUzLDM5MzU0LDM5MzU1LDM5MzU2LDM5MzU3LDM5MzU4LDM5MzU5''@;'; put 'put ''LDM5MzYwLDM5MzYxLDM5MzYyLDM5MzYzLDM5MzY0LDM5MzY1LDM5MzY2LDM5MzY3LDM5MzY4LDM5MzY5LDM5MzcwLDM5MzcxLDM5MzcyLDM5MzczLDM5Mzc0LDM5Mzc1LDM5Mzc2LDM5Mzc3LDM5Mzc4LDM5Mzc5LDM5MzgwLDM5MzgxLDM5MzgyLDM5MzgzLDM5Mzg0LDM5Mzg1LDM5Mzg2LDM5''@;'; put 'put ''Mzg3LDM5Mzg4LDM5Mzg5LDM5MzkwLDM5MzkxLDM5MzkyLDM5MzkzLDM5Mzk0LDM5Mzk1LDM5Mzk2LDM5Mzk3LDM5Mzk4LDM5Mzk5LDM5NDAwLDM5NDAxLDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA1LDM5NDA2LDM5NDA3LDM5NDA4LDM5NDA5LDM5NDEwLDM5NDExLDM5NDEyLDM5NDEzLDM5NDE0''@;'; put 'put ''LDM5NDE1LDM5NDE2LDM5NDE3LDMwMjM1LDMwMjY4LDMwMjQyLDMwMjQwLDMwMjcyLDMwMjUzLDMwMjU2LDMwMjcxLDMwMjYxLDMwMjc1LDMwMjcwLDMwMjU5LDMwMjg1LDMwMzAyLDMwMjkyLDMwMzAwLDMwMjk0LDMwMzE1LDMwMzE5LDMyNzE0LDMxNDYyLDMxMzUyLDMxMzUzLDMxMzYwLDMx''@;'; put 'put ''MzY2LDMxMzY4LDMxMzgxLDMxMzk4LDMxMzkyLDMxNDA0LDMxNDAwLDMxNDA1LDMxNDExLDM0OTE2LDM0OTIxLDM0OTMwLDM0OTQxLDM0OTQzLDM0OTQ2LDM0OTc4LDM1MDE0LDM0OTk5LDM1MDA0LDM1MDE3LDM1MDQyLDM1MDIyLDM1MDQzLDM1MDQ1LDM1MDU3LDM1MDk4LDM1MDY4LDM1MDQ4''@;'; put 'put ''LDM1MDcwLDM1MDU2LDM1MTA1LDM1MDk3LDM1MDkxLDM1MDk5LDM1MDgyLDM1MTI0LDM1MTE1LDM1MTI2LDM1MTM3LDM1MTc0LDM1MTk1LDMwMDkxLDMyOTk3LDMwMzg2LDMwMzg4LDMwNjg0LDMyNzg2LDMyNzg4LDMyNzkwLDMyNzk2LDMyODAwLDMyODAyLDMyODA1LDMyODA2LDMyODA3LDMy''@;'; put 'put ''ODA5LDMyODA4LDMyODE3LDMyNzc5LDMyODIxLDMyODM1LDMyODM4LDMyODQ1LDMyODUwLDMyODczLDMyODgxLDM1MjAzLDM5MDMyLDM5MDQwLDM5MDQzLDM5NDE4LDM5NDE5LDM5NDIwLDM5NDIxLDM5NDIyLDM5NDIzLDM5NDI0LDM5NDI1LDM5NDI2LDM5NDI3LDM5NDI4LDM5NDI5LDM5NDMw''@;'; put 'put ''LDM5NDMxLDM5NDMyLDM5NDMzLDM5NDM0LDM5NDM1LDM5NDM2LDM5NDM3LDM5NDM4LDM5NDM5LDM5NDQwLDM5NDQxLDM5NDQyLDM5NDQzLDM5NDQ0LDM5NDQ1LDM5NDQ2LDM5NDQ3LDM5NDQ4LDM5NDQ5LDM5NDUwLDM5NDUxLDM5NDUyLDM5NDUzLDM5NDU0LDM5NDU1LDM5NDU2LDM5NDU3LDM5''@;'; put 'put ''NDU4LDM5NDU5LDM5NDYwLDM5NDYxLDM5NDYyLDM5NDYzLDM5NDY0LDM5NDY1LDM5NDY2LDM5NDY3LDM5NDY4LDM5NDY5LDM5NDcwLDM5NDcxLDM5NDcyLDM5NDczLDM5NDc0LDM5NDc1LDM5NDc2LDM5NDc3LDM5NDc4LDM5NDc5LDM5NDgwLDM5NDgxLDM5NDgyLDM5NDgzLDM5NDg0LDM5NDg1''@;'; put 'put ''LDM5NDg2LDM5NDg3LDM5NDg4LDM5NDg5LDM5NDkwLDM5NDkxLDM5NDkyLDM5NDkzLDM5NDk0LDM5NDk1LDM5NDk2LDM5NDk3LDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAxLDM5NTAyLDM5NTAzLDM5NTA0LDM5NTA1LDM5NTA2LDM5NTA3LDM5NTA4LDM5NTA5LDM5NTEwLDM5NTExLDM5NTEyLDM5''@;'; put 'put ''NTEzLDM5MDQ5LDM5MDUyLDM5MDUzLDM5MDU1LDM5MDYwLDM5MDY2LDM5MDY3LDM5MDcwLDM5MDcxLDM5MDczLDM5MDc0LDM5MDc3LDM5MDc4LDM0MzgxLDM0Mzg4LDM0NDEyLDM0NDE0LDM0NDMxLDM0NDI2LDM0NDI4LDM0NDI3LDM0NDcyLDM0NDQ1LDM0NDQzLDM0NDc2LDM0NDYxLDM0NDcx''@;'; put 'put ''LDM0NDY3LDM0NDc0LDM0NDUxLDM0NDczLDM0NDg2LDM0NTAwLDM0NDg1LDM0NTEwLDM0NDgwLDM0NDkwLDM0NDgxLDM0NDc5LDM0NTA1LDM0NTExLDM0NDg0LDM0NTM3LDM0NTQ1LDM0NTQ2LDM0NTQxLDM0NTQ3LDM0NTEyLDM0NTc5LDM0NTI2LDM0NTQ4LDM0NTI3LDM0NTIwLDM0NTEzLDM0''@;'; put 'put ''NTYzLDM0NTY3LDM0NTUyLDM0NTY4LDM0NTcwLDM0NTczLDM0NTY5LDM0NTk1LDM0NjE5LDM0NTkwLDM0NTk3LDM0NjA2LDM0NTg2LDM0NjIyLDM0NjMyLDM0NjEyLDM0NjA5LDM0NjAxLDM0NjE1LDM0NjIzLDM0NjkwLDM0NTk0LDM0Njg1LDM0Njg2LDM0NjgzLDM0NjU2LDM0NjcyLDM0NjM2''@;'; put 'put ''LDM0NjcwLDM0Njk5LDM0NjQzLDM0NjU5LDM0Njg0LDM0NjYwLDM0NjQ5LDM0NjYxLDM0NzA3LDM0NzM1LDM0NzI4LDM0NzcwLDM5NTE0LDM5NTE1LDM5NTE2LDM5NTE3LDM5NTE4LDM5NTE5LDM5NTIwLDM5NTIxLDM5NTIyLDM5NTIzLDM5NTI0LDM5NTI1LDM5NTI2LDM5NTI3LDM5NTI4LDM5''@;'; put 'put ''NTI5LDM5NTMwLDM5NTMxLDM5NTM4LDM5NTU1LDM5NTYxLDM5NTY1LDM5NTY2LDM5NTcyLDM5NTczLDM5NTc3LDM5NTkwLDM5NTkzLDM5NTk0LDM5NTk1LDM5NTk2LDM5NTk3LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjAzLDM5NjA0LDM5NjA1LDM5NjA5LDM5NjExLDM5NjEzLDM5NjE0LDM5NjE1''@;'; put 'put ''LDM5NjE5LDM5NjIwLDM5NjIyLDM5NjIzLDM5NjI0LDM5NjI1LDM5NjI2LDM5NjI5LDM5NjMwLDM5NjMxLDM5NjMyLDM5NjM0LDM5NjM2LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQxLDM5NjQyLDM5NjQzLDM5NjQ0LDM5NjQ1LDM5NjQ2LDM5NjQ4LDM5NjUwLDM5NjUxLDM5NjUyLDM5NjUzLDM5''@;'; put 'put ''NjU1LDM5NjU2LDM5NjU3LDM5NjU4LDM5NjYwLDM5NjYyLDM5NjY0LDM5NjY1LDM5NjY2LDM5NjY3LDM5NjY4LDM5NjY5LDM5NjcwLDM5NjcxLDM5NjcyLDM5Njc0LDM5Njc2LDM5Njc3LDM5Njc4LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5Njg0LDM5Njg1LDM5Njg2LDM0NzU4LDM0Njk2''@;'; put 'put ''LDM0NjkzLDM0NzMzLDM0NzExLDM0NjkxLDM0NzMxLDM0Nzg5LDM0NzMyLDM0NzQxLDM0NzM5LDM0NzYzLDM0NzcxLDM0NzQ5LDM0NzY5LDM0NzUyLDM0NzYyLDM0Nzc5LDM0Nzk0LDM0Nzg0LDM0Nzk4LDM0ODM4LDM0ODM1LDM0ODE0LDM0ODI2LDM0ODQzLDM0ODQ5LDM0ODczLDM0ODc2LDMy''@;'; put 'put ''NTY2LDMyNTc4LDMyNTgwLDMyNTgxLDMzMjk2LDMxNDgyLDMxNDg1LDMxNDk2LDMxNDkxLDMxNDkyLDMxNTA5LDMxNDk4LDMxNTMxLDMxNTAzLDMxNTU5LDMxNTQ0LDMxNTMwLDMxNTEzLDMxNTM0LDMxNTM3LDMxNTIwLDMxNTI1LDMxNTI0LDMxNTM5LDMxNTUwLDMxNTE4LDMxNTc2LDMxNTc4''@;'; put 'put ''LDMxNTU3LDMxNjA1LDMxNTY0LDMxNTgxLDMxNTg0LDMxNTk4LDMxNjExLDMxNTg2LDMxNjAyLDMxNjAxLDMxNjMyLDMxNjU0LDMxNjU1LDMxNjcyLDMxNjYwLDMxNjQ1LDMxNjU2LDMxNjIxLDMxNjU4LDMxNjQ0LDMxNjUwLDMxNjU5LDMxNjY4LDMxNjk3LDMxNjgxLDMxNjkyLDMxNzA5LDMx''@;'; put 'put ''NzA2LDMxNzE3LDMxNzE4LDMxNzIyLDMxNzU2LDMxNzQyLDMxNzQwLDMxNzU5LDMxNzY2LDMxNzU1LDM5Njg3LDM5Njg5LDM5NjkwLDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk3LDM5Njk4LDM5NzAwLDM5NzAxLDM5NzAyLDM5NzAzLDM5NzA0LDM5NzA1LDM5NzA2LDM5NzA3''@;'; put 'put ''LDM5NzA4LDM5NzA5LDM5NzEwLDM5NzEyLDM5NzEzLDM5NzE0LDM5NzE2LDM5NzE3LDM5NzE4LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzIzLDM5NzI0LDM5NzI1LDM5NzI2LDM5NzI4LDM5NzI5LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM0LDM5NzM1LDM5NzM2LDM5NzM3LDM5NzM4LDM5''@;'; put 'put ''NzQxLDM5NzQyLDM5NzQzLDM5NzQ0LDM5NzUwLDM5NzU0LDM5NzU1LDM5NzU2LDM5NzU4LDM5NzYwLDM5NzYyLDM5NzYzLDM5NzY1LDM5NzY2LDM5NzY3LDM5NzY4LDM5NzY5LDM5NzcwLDM5NzcxLDM5NzcyLDM5NzczLDM5Nzc0LDM5Nzc1LDM5Nzc2LDM5Nzc3LDM5Nzc4LDM5Nzc5LDM5Nzgw''@;'; put 'put ''LDM5NzgxLDM5NzgyLDM5NzgzLDM5Nzg0LDM5Nzg1LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5Nzg5LDM5NzkwLDM5NzkxLDM5NzkyLDM5NzkzLDM5Nzk0LDM5Nzk1LDM5Nzk2LDM5Nzk3LDM5Nzk4LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODAyLDM5ODAzLDMxNzc1LDMxNzg2LDMxNzgyLDMxODAwLDMx''@;'; put 'put ''ODA5LDMxODA4LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg0LDMzMjYwLDM0ODg0LDMzMzEzLDMzMzE0LDMzMzE1LDMzMzI1LDMzMzI3LDMzMzIwLDMzMzIzLDMzMzM2LDMzMzM5LDMzMzMxLDMzMzMyLDMzMzQyLDMzMzQ4LDMzMzUzLDMzMzU1LDMzMzU5LDMzMzcwLDMzMzc1LDMzMzg0LDM0OTQy''@;'; put 'put ''LDM0OTQ5LDM0OTUyLDM1MDMyLDM1MDM5LDM1MTY2LDMyNjY5LDMyNjcxLDMyNjc5LDMyNjg3LDMyNjg4LDMyNjkwLDMxODY4LDI1OTI5LDMxODg5LDMxOTAxLDMxOTAwLDMxOTAyLDMxOTA2LDMxOTIyLDMxOTMyLDMxOTMzLDMxOTM3LDMxOTQzLDMxOTQ4LDMxOTQ5LDMxOTQ0LDMxOTQxLDMx''@;'; put 'put ''OTU5LDMxOTc2LDMzMzkwLDI2MjgwLDMyNzAzLDMyNzE4LDMyNzI1LDMyNzQxLDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzUwLDMyNzU1LDMxOTkyLDMyMTE5LDMyMTY2LDMyMTc0LDMyMzI3LDMyNDExLDQwNjMyLDQwNjI4LDM2MjExLDM2MjI4LDM2MjQ0LDM2MjQxLDM2MjczLDM2MTk5LDM2MjA1''@;'; put 'put ''LDM1OTExLDM1OTEzLDM3MTk0LDM3MjAwLDM3MTk4LDM3MTk5LDM3MjIwLDM5ODA0LDM5ODA1LDM5ODA2LDM5ODA3LDM5ODA4LDM5ODA5LDM5ODEwLDM5ODExLDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE2LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIwLDM5ODIxLDM5ODIyLDM5ODIzLDM5''@;'; put 'put ''ODI0LDM5ODI1LDM5ODI2LDM5ODI3LDM5ODI4LDM5ODI5LDM5ODMwLDM5ODMxLDM5ODMyLDM5ODMzLDM5ODM0LDM5ODM1LDM5ODM2LDM5ODM3LDM5ODM4LDM5ODM5LDM5ODQwLDM5ODQxLDM5ODQyLDM5ODQzLDM5ODQ0LDM5ODQ1LDM5ODQ2LDM5ODQ3LDM5ODQ4LDM5ODQ5LDM5ODUwLDM5ODUx''@;'; put 'put ''LDM5ODUyLDM5ODUzLDM5ODU0LDM5ODU1LDM5ODU2LDM5ODU3LDM5ODU4LDM5ODU5LDM5ODYwLDM5ODYxLDM5ODYyLDM5ODYzLDM5ODY0LDM5ODY1LDM5ODY2LDM5ODY3LDM5ODY4LDM5ODY5LDM5ODcwLDM5ODcxLDM5ODcyLDM5ODczLDM5ODc0LDM5ODc1LDM5ODc2LDM5ODc3LDM5ODc4LDM5''@;'; put 'put ''ODc5LDM5ODgwLDM5ODgxLDM5ODgyLDM5ODgzLDM5ODg0LDM5ODg1LDM5ODg2LDM5ODg3LDM5ODg4LDM5ODg5LDM5ODkwLDM5ODkxLDM5ODkyLDM5ODkzLDM5ODk0LDM5ODk1LDM5ODk2LDM5ODk3LDM5ODk4LDM5ODk5LDM3MjE4LDM3MjE3LDM3MjMyLDM3MjI1LDM3MjMxLDM3MjQ1LDM3MjQ2''@;'; put 'put ''LDM3MjM0LDM3MjM2LDM3MjQxLDM3MjYwLDM3MjUzLDM3MjY0LDM3MjYxLDM3MjY1LDM3MjgyLDM3MjgzLDM3MjkwLDM3MjkzLDM3Mjk0LDM3Mjk1LDM3MzAxLDM3MzAwLDM3MzA2LDM1OTI1LDQwNTc0LDM2MjgwLDM2MzMxLDM2MzU3LDM2NDQxLDM2NDU3LDM2Mjc3LDM2Mjg3LDM2Mjg0LDM2''@;'; put 'put ''MjgyLDM2MjkyLDM2MzEwLDM2MzExLDM2MzE0LDM2MzE4LDM2MzAyLDM2MzAzLDM2MzE1LDM2Mjk0LDM2MzMyLDM2MzQzLDM2MzQ0LDM2MzIzLDM2MzQ1LDM2MzQ3LDM2MzI0LDM2MzYxLDM2MzQ5LDM2MzcyLDM2MzgxLDM2MzgzLDM2Mzk2LDM2Mzk4LDM2Mzg3LDM2Mzk5LDM2NDEwLDM2NDE2''@;'; put 'put ''LDM2NDA5LDM2NDA1LDM2NDEzLDM2NDAxLDM2NDI1LDM2NDE3LDM2NDE4LDM2NDMzLDM2NDM0LDM2NDI2LDM2NDY0LDM2NDcwLDM2NDc2LDM2NDYzLDM2NDY4LDM2NDg1LDM2NDk1LDM2NTAwLDM2NDk2LDM2NTA4LDM2NTEwLDM1OTYwLDM1OTcwLDM1OTc4LDM1OTczLDM1OTkyLDM1OTg4LDI2''@;'; put 'put ''MDExLDM1Mjg2LDM1Mjk0LDM1MjkwLDM1MjkyLDM5OTAwLDM5OTAxLDM5OTAyLDM5OTAzLDM5OTA0LDM5OTA1LDM5OTA2LDM5OTA3LDM5OTA4LDM5OTA5LDM5OTEwLDM5OTExLDM5OTEyLDM5OTEzLDM5OTE0LDM5OTE1LDM5OTE2LDM5OTE3LDM5OTE4LDM5OTE5LDM5OTIwLDM5OTIxLDM5OTIy''@;'; put 'put ''LDM5OTIzLDM5OTI0LDM5OTI1LDM5OTI2LDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5OTMxLDM5OTMyLDM5OTMzLDM5OTM0LDM5OTM1LDM5OTM2LDM5OTM3LDM5OTM4LDM5OTM5LDM5OTQwLDM5OTQxLDM5OTQyLDM5OTQzLDM5OTQ0LDM5OTQ1LDM5OTQ2LDM5OTQ3LDM5OTQ4LDM5OTQ5LDM5''@;'; put 'put ''OTUwLDM5OTUxLDM5OTUyLDM5OTUzLDM5OTU0LDM5OTU1LDM5OTU2LDM5OTU3LDM5OTU4LDM5OTU5LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTYzLDM5OTY0LDM5OTY1LDM5OTY2LDM5OTY3LDM5OTY4LDM5OTY5LDM5OTcwLDM5OTcxLDM5OTcyLDM5OTczLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3''@;'; put 'put ''LDM5OTc4LDM5OTc5LDM5OTgwLDM5OTgxLDM5OTgyLDM5OTgzLDM5OTg0LDM5OTg1LDM5OTg2LDM5OTg3LDM5OTg4LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTkyLDM5OTkzLDM5OTk0LDM5OTk1LDM1MzAxLDM1MzA3LDM1MzExLDM1MzkwLDM1NjIyLDM4NzM5LDM4NjMzLDM4NjQzLDM4NjM5LDM4''@;'; put 'put ''NjYyLDM4NjU3LDM4NjY0LDM4NjcxLDM4NjcwLDM4Njk4LDM4NzAxLDM4NzA0LDM4NzE4LDQwODMyLDQwODM1LDQwODM3LDQwODM4LDQwODM5LDQwODQwLDQwODQxLDQwODQyLDQwODQ0LDQwNzAyLDQwNzE1LDQwNzE3LDM4NTg1LDM4NTg4LDM4NTg5LDM4NjA2LDM4NjEwLDMwNjU1LDM4NjI0''@;'; put 'put ''LDM3NTE4LDM3NTUwLDM3NTc2LDM3Njk0LDM3NzM4LDM3ODM0LDM3Nzc1LDM3OTUwLDM3OTk1LDQwMDYzLDQwMDY2LDQwMDY5LDQwMDcwLDQwMDcxLDQwMDcyLDMxMjY3LDQwMDc1LDQwMDc4LDQwMDgwLDQwMDgxLDQwMDgyLDQwMDg0LDQwMDg1LDQwMDkwLDQwMDkxLDQwMDk0LDQwMDk1LDQw''@;'; put 'put ''MDk2LDQwMDk3LDQwMDk4LDQwMDk5LDQwMTAxLDQwMTAyLDQwMTAzLDQwMTA0LDQwMTA1LDQwMTA3LDQwMTA5LDQwMTEwLDQwMTEyLDQwMTEzLDQwMTE0LDQwMTE1LDQwMTE2LDQwMTE3LDQwMTE4LDQwMTE5LDQwMTIyLDQwMTIzLDQwMTI0LDQwMTI1LDQwMTMyLDQwMTMzLDQwMTM0LDQwMTM1''@;'; put 'put ''LDQwMTM4LDQwMTM5LDM5OTk2LDM5OTk3LDM5OTk4LDM5OTk5LDRlNCw0MDAwMSw0MDAwMiw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwNiw0MDAwNyw0MDAwOCw0MDAwOSw0MDAxMCw0MDAxMSw0MDAxMiw0MDAxMyw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxNyw0MDAxOCw0MDAxOSw0MDAyMCw0MDAy''@;'; put 'put ''MSw0MDAyMiw0MDAyMyw0MDAyNCw0MDAyNSw0MDAyNiw0MDAyNyw0MDAyOCw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzMiw0MDAzMyw0MDAzNCw0MDAzNSw0MDAzNiw0MDAzNyw0MDAzOCw0MDAzOSw0MDA0MCw0MDA0MSw0MDA0Miw0MDA0Myw0MDA0NCw0MDA0NSw0MDA0Niw0MDA0Nyw0MDA0OCw0''@;'; put 'put ''MDA0OSw0MDA1MCw0MDA1MSw0MDA1Miw0MDA1Myw0MDA1NCw0MDA1NSw0MDA1Niw0MDA1Nyw0MDA1OCw0MDA1OSw0MDA2MSw0MDA2Miw0MDA2NCw0MDA2Nyw0MDA2OCw0MDA3Myw0MDA3NCw0MDA3Niw0MDA3OSw0MDA4Myw0MDA4Niw0MDA4Nyw0MDA4OCw0MDA4OSw0MDA5Myw0MDEwNiw0MDEw''@;'; put 'put ''OCw0MDExMSw0MDEyMSw0MDEyNiw0MDEyNyw0MDEyOCw0MDEyOSw0MDEzMCw0MDEzNiw0MDEzNyw0MDE0NSw0MDE0Niw0MDE1NCw0MDE1NSw0MDE2MCw0MDE2MSw0MDE0MCw0MDE0MSw0MDE0Miw0MDE0Myw0MDE0NCw0MDE0Nyw0MDE0OCw0MDE0OSw0MDE1MSw0MDE1Miw0MDE1Myw0MDE1Niw0''@;'; put 'put ''MDE1Nyw0MDE1OSw0MDE2MiwzODc4MCwzODc4OSwzODgwMSwzODgwMiwzODgwNCwzODgzMSwzODgyNywzODgxOSwzODgzNCwzODgzNiwzOTYwMSwzOTYwMCwzOTYwNyw0MDUzNiwzOTYwNiwzOTYxMCwzOTYxMiwzOTYxNywzOTYxNiwzOTYyMSwzOTYxOCwzOTYyNywzOTYyOCwzOTYzMywzOTc0''@;'; put 'put ''OSwzOTc0NywzOTc1MSwzOTc1MywzOTc1MiwzOTc1NywzOTc2MSwzOTE0NCwzOTE4MSwzOTIxNCwzOTI1MywzOTI1MiwzOTY0NywzOTY0OSwzOTY1NCwzOTY2MywzOTY1OSwzOTY3NSwzOTY2MSwzOTY3MywzOTY4OCwzOTY5NSwzOTY5OSwzOTcxMSwzOTcxNSw0MDYzNyw0MDYzOCwzMjMxNSw0''@;'; put 'put ''MDU3OCw0MDU4Myw0MDU4NCw0MDU4Nyw0MDU5NCwzNzg0Niw0MDYwNSw0MDYwNyw0MDY2Nyw0MDY2OCw0MDY2OSw0MDY3Miw0MDY3MSw0MDY3NCw0MDY4MSw0MDY3OSw0MDY3Nyw0MDY4Miw0MDY4Nyw0MDczOCw0MDc0OCw0MDc1MSw0MDc2MSw0MDc1OSw0MDc2NSw0MDc2Niw0MDc3Miw0MDE2''@;'; put 'put ''Myw0MDE2NCw0MDE2NSw0MDE2Niw0MDE2Nyw0MDE2OCw0MDE2OSw0MDE3MCw0MDE3MSw0MDE3Miw0MDE3Myw0MDE3NCw0MDE3NSw0MDE3Niw0MDE3Nyw0MDE3OCw0MDE3OSw0MDE4MCw0MDE4MSw0MDE4Miw0MDE4Myw0MDE4NCw0MDE4NSw0MDE4Niw0MDE4Nyw0MDE4OCw0MDE4OSw0MDE5MCw0''@;'; put 'put ''MDE5MSw0MDE5Miw0MDE5Myw0MDE5NCw0MDE5NSw0MDE5Niw0MDE5Nyw0MDE5OCw0MDE5OSw0MDIwMCw0MDIwMSw0MDIwMiw0MDIwMyw0MDIwNCw0MDIwNSw0MDIwNiw0MDIwNyw0MDIwOCw0MDIwOSw0MDIxMCw0MDIxMSw0MDIxMiw0MDIxMyw0MDIxNCw0MDIxNSw0MDIxNiw0MDIxNyw0MDIx''@;'; put 'put ''OCw0MDIxOSw0MDIyMCw0MDIyMSw0MDIyMiw0MDIyMyw0MDIyNCw0MDIyNSw0MDIyNiw0MDIyNyw0MDIyOCw0MDIyOSw0MDIzMCw0MDIzMSw0MDIzMiw0MDIzMyw0MDIzNCw0MDIzNSw0MDIzNiw0MDIzNyw0MDIzOCw0MDIzOSw0MDI0MCw0MDI0MSw0MDI0Miw0MDI0Myw0MDI0NCw0MDI0NSw0''@;'; put 'put ''MDI0Niw0MDI0Nyw0MDI0OCw0MDI0OSw0MDI1MCw0MDI1MSw0MDI1Miw0MDI1Myw0MDI1NCw0MDI1NSw0MDI1Niw0MDI1Nyw0MDI1OCw1NzkwOCw1NzkwOSw1NzkxMCw1NzkxMSw1NzkxMiw1NzkxMyw1NzkxNCw1NzkxNSw1NzkxNiw1NzkxNyw1NzkxOCw1NzkxOSw1NzkyMCw1NzkyMSw1Nzky''@;'; put 'put ''Miw1NzkyMyw1NzkyNCw1NzkyNSw1NzkyNiw1NzkyNyw1NzkyOCw1NzkyOSw1NzkzMCw1NzkzMSw1NzkzMiw1NzkzMyw1NzkzNCw1NzkzNSw1NzkzNiw1NzkzNyw1NzkzOCw1NzkzOSw1Nzk0MCw1Nzk0MSw1Nzk0Miw1Nzk0Myw1Nzk0NCw1Nzk0NSw1Nzk0Niw1Nzk0Nyw1Nzk0OCw1Nzk0OSw1''@;'; put 'put ''Nzk1MCw1Nzk1MSw1Nzk1Miw1Nzk1Myw1Nzk1NCw1Nzk1NSw1Nzk1Niw1Nzk1Nyw1Nzk1OCw1Nzk1OSw1Nzk2MCw1Nzk2MSw1Nzk2Miw1Nzk2Myw1Nzk2NCw1Nzk2NSw1Nzk2Niw1Nzk2Nyw1Nzk2OCw1Nzk2OSw1Nzk3MCw1Nzk3MSw1Nzk3Miw1Nzk3Myw1Nzk3NCw1Nzk3NSw1Nzk3Niw1Nzk3''@;'; put 'put ''Nyw1Nzk3OCw1Nzk3OSw1Nzk4MCw1Nzk4MSw1Nzk4Miw1Nzk4Myw1Nzk4NCw1Nzk4NSw1Nzk4Niw1Nzk4Nyw1Nzk4OCw1Nzk4OSw1Nzk5MCw1Nzk5MSw1Nzk5Miw1Nzk5Myw1Nzk5NCw1Nzk5NSw1Nzk5Niw1Nzk5Nyw1Nzk5OCw1Nzk5OSw1OGUzLDU4MDAxLDQwMjU5LDQwMjYwLDQwMjYxLDQw''@;'; put 'put ''MjYyLDQwMjYzLDQwMjY0LDQwMjY1LDQwMjY2LDQwMjY3LDQwMjY4LDQwMjY5LDQwMjcwLDQwMjcxLDQwMjcyLDQwMjczLDQwMjc0LDQwMjc1LDQwMjc2LDQwMjc3LDQwMjc4LDQwMjc5LDQwMjgwLDQwMjgxLDQwMjgyLDQwMjgzLDQwMjg0LDQwMjg1LDQwMjg2LDQwMjg3LDQwMjg4LDQwMjg5''@;'; put 'put ''LDQwMjkwLDQwMjkxLDQwMjkyLDQwMjkzLDQwMjk0LDQwMjk1LDQwMjk2LDQwMjk3LDQwMjk4LDQwMjk5LDQwMzAwLDQwMzAxLDQwMzAyLDQwMzAzLDQwMzA0LDQwMzA1LDQwMzA2LDQwMzA3LDQwMzA4LDQwMzA5LDQwMzEwLDQwMzExLDQwMzEyLDQwMzEzLDQwMzE0LDQwMzE1LDQwMzE2LDQw''@;'; put 'put ''MzE3LDQwMzE4LDQwMzE5LDQwMzIwLDQwMzIxLDQwMzIyLDQwMzIzLDQwMzI0LDQwMzI1LDQwMzI2LDQwMzI3LDQwMzI4LDQwMzI5LDQwMzMwLDQwMzMxLDQwMzMyLDQwMzMzLDQwMzM0LDQwMzM1LDQwMzM2LDQwMzM3LDQwMzM4LDQwMzM5LDQwMzQwLDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0''@;'; put 'put ''LDQwMzQ1LDQwMzQ2LDQwMzQ3LDQwMzQ4LDQwMzQ5LDQwMzUwLDQwMzUxLDQwMzUyLDQwMzUzLDQwMzU0LDU4MDAyLDU4MDAzLDU4MDA0LDU4MDA1LDU4MDA2LDU4MDA3LDU4MDA4LDU4MDA5LDU4MDEwLDU4MDExLDU4MDEyLDU4MDEzLDU4MDE0LDU4MDE1LDU4MDE2LDU4MDE3LDU4MDE4LDU4''@;'; put 'put ''MDE5LDU4MDIwLDU4MDIxLDU4MDIyLDU4MDIzLDU4MDI0LDU4MDI1LDU4MDI2LDU4MDI3LDU4MDI4LDU4MDI5LDU4MDMwLDU4MDMxLDU4MDMyLDU4MDMzLDU4MDM0LDU4MDM1LDU4MDM2LDU4MDM3LDU4MDM4LDU4MDM5LDU4MDQwLDU4MDQxLDU4MDQyLDU4MDQzLDU4MDQ0LDU4MDQ1LDU4MDQ2''@;'; put 'put ''LDU4MDQ3LDU4MDQ4LDU4MDQ5LDU4MDUwLDU4MDUxLDU4MDUyLDU4MDUzLDU4MDU0LDU4MDU1LDU4MDU2LDU4MDU3LDU4MDU4LDU4MDU5LDU4MDYwLDU4MDYxLDU4MDYyLDU4MDYzLDU4MDY0LDU4MDY1LDU4MDY2LDU4MDY3LDU4MDY4LDU4MDY5LDU4MDcwLDU4MDcxLDU4MDcyLDU4MDczLDU4''@;'; put 'put ''MDc0LDU4MDc1LDU4MDc2LDU4MDc3LDU4MDc4LDU4MDc5LDU4MDgwLDU4MDgxLDU4MDgyLDU4MDgzLDU4MDg0LDU4MDg1LDU4MDg2LDU4MDg3LDU4MDg4LDU4MDg5LDU4MDkwLDU4MDkxLDU4MDkyLDU4MDkzLDU4MDk0LDU4MDk1LDQwMzU1LDQwMzU2LDQwMzU3LDQwMzU4LDQwMzU5LDQwMzYw''@;'; put 'put ''LDQwMzYxLDQwMzYyLDQwMzYzLDQwMzY0LDQwMzY1LDQwMzY2LDQwMzY3LDQwMzY4LDQwMzY5LDQwMzcwLDQwMzcxLDQwMzcyLDQwMzczLDQwMzc0LDQwMzc1LDQwMzc2LDQwMzc3LDQwMzc4LDQwMzc5LDQwMzgwLDQwMzgxLDQwMzgyLDQwMzgzLDQwMzg0LDQwMzg1LDQwMzg2LDQwMzg3LDQw''@;'; put 'put ''Mzg4LDQwMzg5LDQwMzkwLDQwMzkxLDQwMzkyLDQwMzkzLDQwMzk0LDQwMzk1LDQwMzk2LDQwMzk3LDQwMzk4LDQwMzk5LDQwNDAwLDQwNDAxLDQwNDAyLDQwNDAzLDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDA4LDQwNDA5LDQwNDEwLDQwNDExLDQwNDEyLDQwNDEzLDQwNDE0LDQwNDE1''@;'; put 'put ''LDQwNDE2LDQwNDE3LDQwNDE4LDQwNDE5LDQwNDIwLDQwNDIxLDQwNDIyLDQwNDIzLDQwNDI0LDQwNDI1LDQwNDI2LDQwNDI3LDQwNDI4LDQwNDI5LDQwNDMwLDQwNDMxLDQwNDMyLDQwNDMzLDQwNDM0LDQwNDM1LDQwNDM2LDQwNDM3LDQwNDM4LDQwNDM5LDQwNDQwLDQwNDQxLDQwNDQyLDQw''@;'; put 'put ''NDQzLDQwNDQ0LDQwNDQ1LDQwNDQ2LDQwNDQ3LDQwNDQ4LDQwNDQ5LDQwNDUwLDU4MDk2LDU4MDk3LDU4MDk4LDU4MDk5LDU4MTAwLDU4MTAxLDU4MTAyLDU4MTAzLDU4MTA0LDU4MTA1LDU4MTA2LDU4MTA3LDU4MTA4LDU4MTA5LDU4MTEwLDU4MTExLDU4MTEyLDU4MTEzLDU4MTE0LDU4MTE1''@;'; put 'put ''LDU4MTE2LDU4MTE3LDU4MTE4LDU4MTE5LDU4MTIwLDU4MTIxLDU4MTIyLDU4MTIzLDU4MTI0LDU4MTI1LDU4MTI2LDU4MTI3LDU4MTI4LDU4MTI5LDU4MTMwLDU4MTMxLDU4MTMyLDU4MTMzLDU4MTM0LDU4MTM1LDU4MTM2LDU4MTM3LDU4MTM4LDU4MTM5LDU4MTQwLDU4MTQxLDU4MTQyLDU4''@;'; put 'put ''MTQzLDU4MTQ0LDU4MTQ1LDU4MTQ2LDU4MTQ3LDU4MTQ4LDU4MTQ5LDU4MTUwLDU4MTUxLDU4MTUyLDU4MTUzLDU4MTU0LDU4MTU1LDU4MTU2LDU4MTU3LDU4MTU4LDU4MTU5LDU4MTYwLDU4MTYxLDU4MTYyLDU4MTYzLDU4MTY0LDU4MTY1LDU4MTY2LDU4MTY3LDU4MTY4LDU4MTY5LDU4MTcw''@;'; put 'put ''LDU4MTcxLDU4MTcyLDU4MTczLDU4MTc0LDU4MTc1LDU4MTc2LDU4MTc3LDU4MTc4LDU4MTc5LDU4MTgwLDU4MTgxLDU4MTgyLDU4MTgzLDU4MTg0LDU4MTg1LDU4MTg2LDU4MTg3LDU4MTg4LDU4MTg5LDQwNDUxLDQwNDUyLDQwNDUzLDQwNDU0LDQwNDU1LDQwNDU2LDQwNDU3LDQwNDU4LDQw''@;'; put 'put ''NDU5LDQwNDYwLDQwNDYxLDQwNDYyLDQwNDYzLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY3LDQwNDY4LDQwNDY5LDQwNDcwLDQwNDcxLDQwNDcyLDQwNDczLDQwNDc0LDQwNDc1LDQwNDc2LDQwNDc3LDQwNDc4LDQwNDg0LDQwNDg3LDQwNDk0LDQwNDk2LDQwNTAwLDQwNTA3LDQwNTA4LDQwNTEy''@;'; put 'put ''LDQwNTI1LDQwNTI4LDQwNTMwLDQwNTMxLDQwNTMyLDQwNTM0LDQwNTM3LDQwNTQxLDQwNTQzLDQwNTQ0LDQwNTQ1LDQwNTQ2LDQwNTQ5LDQwNTU4LDQwNTU5LDQwNTYyLDQwNTY0LDQwNTY1LDQwNTY2LDQwNTY3LDQwNTY4LDQwNTY5LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTczLDQwNTc2LDQw''@;'; put 'put ''NTc3LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgyLDQwNTg1LDQwNTg2LDQwNTg4LDQwNTg5LDQwNTkwLDQwNTkxLDQwNTkyLDQwNTkzLDQwNTk2LDQwNTk3LDQwNTk4LDQwNTk5LDQwNjAwLDQwNjAxLDQwNjAyLDQwNjAzLDQwNjA0LDQwNjA2LDQwNjA4LDQwNjA5LDQwNjEwLDQwNjExLDQwNjEy''@;'; put 'put ''LDQwNjEzLDQwNjE1LDQwNjE2LDQwNjE3LDQwNjE4LDU4MTkwLDU4MTkxLDU4MTkyLDU4MTkzLDU4MTk0LDU4MTk1LDU4MTk2LDU4MTk3LDU4MTk4LDU4MTk5LDU4MjAwLDU4MjAxLDU4MjAyLDU4MjAzLDU4MjA0LDU4MjA1LDU4MjA2LDU4MjA3LDU4MjA4LDU4MjA5LDU4MjEwLDU4MjExLDU4''@;'; put 'put ''MjEyLDU4MjEzLDU4MjE0LDU4MjE1LDU4MjE2LDU4MjE3LDU4MjE4LDU4MjE5LDU4MjIwLDU4MjIxLDU4MjIyLDU4MjIzLDU4MjI0LDU4MjI1LDU4MjI2LDU4MjI3LDU4MjI4LDU4MjI5LDU4MjMwLDU4MjMxLDU4MjMyLDU4MjMzLDU4MjM0LDU4MjM1LDU4MjM2LDU4MjM3LDU4MjM4LDU4MjM5''@;'; put 'put ''LDU4MjQwLDU4MjQxLDU4MjQyLDU4MjQzLDU4MjQ0LDU4MjQ1LDU4MjQ2LDU4MjQ3LDU4MjQ4LDU4MjQ5LDU4MjUwLDU4MjUxLDU4MjUyLDU4MjUzLDU4MjU0LDU4MjU1LDU4MjU2LDU4MjU3LDU4MjU4LDU4MjU5LDU4MjYwLDU4MjYxLDU4MjYyLDU4MjYzLDU4MjY0LDU4MjY1LDU4MjY2LDU4''@;'; put 'put ''MjY3LDU4MjY4LDU4MjY5LDU4MjcwLDU4MjcxLDU4MjcyLDU4MjczLDU4Mjc0LDU4Mjc1LDU4Mjc2LDU4Mjc3LDU4Mjc4LDU4Mjc5LDU4MjgwLDU4MjgxLDU4MjgyLDU4MjgzLDQwNjE5LDQwNjIwLDQwNjIxLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI1LDQwNjI2LDQwNjI3LDQwNjI5LDQwNjMw''@;'; put 'put ''LDQwNjMxLDQwNjMzLDQwNjM0LDQwNjM2LDQwNjM5LDQwNjQwLDQwNjQxLDQwNjQyLDQwNjQzLDQwNjQ1LDQwNjQ2LDQwNjQ3LDQwNjQ4LDQwNjUwLDQwNjUxLDQwNjUyLDQwNjU2LDQwNjU4LDQwNjU5LDQwNjYxLDQwNjYyLDQwNjYzLDQwNjY1LDQwNjY2LDQwNjcwLDQwNjczLDQwNjc1LDQw''@;'; put 'put ''Njc2LDQwNjc4LDQwNjgwLDQwNjgzLDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkxLDQwNjkyLDQwNjkzLDQwNjk0LDQwNjk1LDQwNjk2LDQwNjk4LDQwNzAxLDQwNzAzLDQwNzA0LDQwNzA1LDQwNzA2LDQwNzA3LDQwNzA4LDQwNzA5LDQwNzEwLDQwNzExLDQwNzEy''@;'; put 'put ''LDQwNzEzLDQwNzE0LDQwNzE2LDQwNzE5LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI1LDQwNzI2LDQwNzI4LDQwNzMwLDQwNzMxLDQwNzMyLDQwNzMzLDQwNzM0LDQwNzM1LDQwNzM3LDQwNzM5LDQwNzQwLDQwNzQxLDQwNzQyLDQwNzQzLDQwNzQ0LDQwNzQ1LDQwNzQ2LDQwNzQ3LDQwNzQ5LDQw''@;'; put 'put ''NzUwLDQwNzUyLDQwNzUzLDU4Mjg0LDU4Mjg1LDU4Mjg2LDU4Mjg3LDU4Mjg4LDU4Mjg5LDU4MjkwLDU4MjkxLDU4MjkyLDU4MjkzLDU4Mjk0LDU4Mjk1LDU4Mjk2LDU4Mjk3LDU4Mjk4LDU4Mjk5LDU4MzAwLDU4MzAxLDU4MzAyLDU4MzAzLDU4MzA0LDU4MzA1LDU4MzA2LDU4MzA3LDU4MzA4''@;'; put 'put ''LDU4MzA5LDU4MzEwLDU4MzExLDU4MzEyLDU4MzEzLDU4MzE0LDU4MzE1LDU4MzE2LDU4MzE3LDU4MzE4LDU4MzE5LDU4MzIwLDU4MzIxLDU4MzIyLDU4MzIzLDU4MzI0LDU4MzI1LDU4MzI2LDU4MzI3LDU4MzI4LDU4MzI5LDU4MzMwLDU4MzMxLDU4MzMyLDU4MzMzLDU4MzM0LDU4MzM1LDU4''@;'; put 'put ''MzM2LDU4MzM3LDU4MzM4LDU4MzM5LDU4MzQwLDU4MzQxLDU4MzQyLDU4MzQzLDU4MzQ0LDU4MzQ1LDU4MzQ2LDU4MzQ3LDU4MzQ4LDU4MzQ5LDU4MzUwLDU4MzUxLDU4MzUyLDU4MzUzLDU4MzU0LDU4MzU1LDU4MzU2LDU4MzU3LDU4MzU4LDU4MzU5LDU4MzYwLDU4MzYxLDU4MzYyLDU4MzYz''@;'; put 'put ''LDU4MzY0LDU4MzY1LDU4MzY2LDU4MzY3LDU4MzY4LDU4MzY5LDU4MzcwLDU4MzcxLDU4MzcyLDU4MzczLDU4Mzc0LDU4Mzc1LDU4Mzc2LDU4Mzc3LDQwNzU0LDQwNzU1LDQwNzU2LDQwNzU3LDQwNzU4LDQwNzYwLDQwNzYyLDQwNzY0LDQwNzY3LDQwNzY4LDQwNzY5LDQwNzcwLDQwNzcxLDQw''@;'; put 'put ''NzczLDQwNzc0LDQwNzc1LDQwNzc2LDQwNzc3LDQwNzc4LDQwNzc5LDQwNzgwLDQwNzgxLDQwNzgyLDQwNzgzLDQwNzg2LDQwNzg3LDQwNzg4LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzkzLDQwNzk0LDQwNzk1LDQwNzk2LDQwNzk3LDQwNzk4LDQwNzk5LDQwODAwLDQwODAxLDQwODAy''@;'; put 'put ''LDQwODAzLDQwODA0LDQwODA1LDQwODA2LDQwODA3LDQwODA4LDQwODA5LDQwODEwLDQwODExLDQwODEyLDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE4LDQwODE5LDQwODIwLDQwODIxLDQwODIyLDQwODIzLDQwODI0LDQwODI1LDQwODI2LDQwODI3LDQwODI4LDQwODI5LDQw''@;'; put 'put ''ODMwLDQwODMzLDQwODM0LDQwODQ1LDQwODQ2LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUxLDQwODUyLDQwODUzLDQwODU0LDQwODU1LDQwODU2LDQwODYwLDQwODYxLDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY4LDQwODY5LDYzNzg4LDYzODY1LDYzODkzLDYzOTc1LDYzOTg1''@;'; put 'put ''LDU4Mzc4LDU4Mzc5LDU4MzgwLDU4MzgxLDU4MzgyLDU4MzgzLDU4Mzg0LDU4Mzg1LDU4Mzg2LDU4Mzg3LDU4Mzg4LDU4Mzg5LDU4MzkwLDU4MzkxLDU4MzkyLDU4MzkzLDU4Mzk0LDU4Mzk1LDU4Mzk2LDU4Mzk3LDU4Mzk4LDU4Mzk5LDU4NDAwLDU4NDAxLDU4NDAyLDU4NDAzLDU4NDA0LDU4''@;'; put 'put ''NDA1LDU4NDA2LDU4NDA3LDU4NDA4LDU4NDA5LDU4NDEwLDU4NDExLDU4NDEyLDU4NDEzLDU4NDE0LDU4NDE1LDU4NDE2LDU4NDE3LDU4NDE4LDU4NDE5LDU4NDIwLDU4NDIxLDU4NDIyLDU4NDIzLDU4NDI0LDU4NDI1LDU4NDI2LDU4NDI3LDU4NDI4LDU4NDI5LDU4NDMwLDU4NDMxLDU4NDMy''@;'; put 'put ''LDU4NDMzLDU4NDM0LDU4NDM1LDU4NDM2LDU4NDM3LDU4NDM4LDU4NDM5LDU4NDQwLDU4NDQxLDU4NDQyLDU4NDQzLDU4NDQ0LDU4NDQ1LDU4NDQ2LDU4NDQ3LDU4NDQ4LDU4NDQ5LDU4NDUwLDU4NDUxLDU4NDUyLDU4NDUzLDU4NDU0LDU4NDU1LDU4NDU2LDU4NDU3LDU4NDU4LDU4NDU5LDU4''@;'; put 'put ''NDYwLDU4NDYxLDU4NDYyLDU4NDYzLDU4NDY0LDU4NDY1LDU4NDY2LDU4NDY3LDU4NDY4LDU4NDY5LDU4NDcwLDU4NDcxLDY0MDEyLDY0MDEzLDY0MDE0LDY0MDE1LDY0MDE3LDY0MDE5LDY0MDIwLDY0MDI0LDY0MDMxLDY0MDMyLDY0MDMzLDY0MDM1LDY0MDM2LDY0MDM5LDY0MDQwLDY0MDQx''@;'; put 'put ''LDExOTA1LDU5NDE0LDU5NDE1LDU5NDE2LDExOTA4LDEzNDI3LDEzMzgzLDExOTEyLDExOTE1LDU5NDIyLDEzNzI2LDEzODUwLDEzODM4LDExOTE2LDExOTI3LDE0NzAyLDE0NjE2LDU5NDMwLDE0Nzk5LDE0ODE1LDE0OTYzLDE0ODAwLDU5NDM1LDU5NDM2LDE1MTgyLDE1NDcwLDE1NTg0LDEx''@;'; put 'put ''OTQzLDU5NDQxLDU5NDQyLDExOTQ2LDE2NDcwLDE2NzM1LDExOTUwLDE3MjA3LDExOTU1LDExOTU4LDExOTU5LDU5NDUxLDE3MzI5LDE3MzI0LDExOTYzLDE3MzczLDE3NjIyLDE4MDE3LDE3OTk2LDU5NDU5LDE4MjExLDE4MjE3LDE4MzAwLDE4MzE3LDExOTc4LDE4NzU5LDE4ODEwLDE4ODEz''@;'; put 'put ''LDE4ODE4LDE4ODE5LDE4ODIxLDE4ODIyLDE4ODQ3LDE4ODQzLDE4ODcxLDE4ODcwLDU5NDc2LDU5NDc3LDE5NjE5LDE5NjE1LDE5NjE2LDE5NjE3LDE5NTc1LDE5NjE4LDE5NzMxLDE5NzMyLDE5NzMzLDE5NzM0LDE5NzM1LDE5NzM2LDE5NzM3LDE5ODg2LDU5NDkyLDU4NDcyLDU4NDczLDU4''@;'; put 'put ''NDc0LDU4NDc1LDU4NDc2LDU4NDc3LDU4NDc4LDU4NDc5LDU4NDgwLDU4NDgxLDU4NDgyLDU4NDgzLDU4NDg0LDU4NDg1LDU4NDg2LDU4NDg3LDU4NDg4LDU4NDg5LDU4NDkwLDU4NDkxLDU4NDkyLDU4NDkzLDU4NDk0LDU4NDk1LDU4NDk2LDU4NDk3LDU4NDk4LDU4NDk5LDU4NTAwLDU4NTAx''@;'; put 'put ''LDU4NTAyLDU4NTAzLDU4NTA0LDU4NTA1LDU4NTA2LDU4NTA3LDU4NTA4LDU4NTA5LDU4NTEwLDU4NTExLDU4NTEyLDU4NTEzLDU4NTE0LDU4NTE1LDU4NTE2LDU4NTE3LDU4NTE4LDU4NTE5LDU4NTIwLDU4NTIxLDU4NTIyLDU4NTIzLDU4NTI0LDU4NTI1LDU4NTI2LDU4NTI3LDU4NTI4LDU4''@;'; put 'put ''NTI5LDU4NTMwLDU4NTMxLDU4NTMyLDU4NTMzLDU4NTM0LDU4NTM1LDU4NTM2LDU4NTM3LDU4NTM4LDU4NTM5LDU4NTQwLDU4NTQxLDU4NTQyLDU4NTQzLDU4NTQ0LDU4NTQ1LDU4NTQ2LDU4NTQ3LDU4NTQ4LDU4NTQ5LDU4NTUwLDU4NTUxLDU4NTUyLDU4NTUzLDU4NTU0LDU4NTU1LDU4NTU2''@;'; put 'put ''LDU4NTU3LDU4NTU4LDU4NTU5LDU4NTYwLDU4NTYxLDU4NTYyLDU4NTYzLDU4NTY0LDU4NTY1XSwiZ2IxODAzMC1yYW5nZXMiOltbMCwxMjhdLFszNiwxNjVdLFszOCwxNjldLFs0NSwxNzhdLFs1MCwxODRdLFs4MSwyMTZdLFs4OSwyMjZdLFs5NSwyMzVdLFs5NiwyMzhdLFsxMDAsMjQ0XSxb''@;'; put 'put ''MTAzLDI0OF0sWzEwNCwyNTFdLFsxMDUsMjUzXSxbMTA5LDI1OF0sWzEyNiwyNzZdLFsxMzMsMjg0XSxbMTQ4LDMwMF0sWzE3MiwzMjVdLFsxNzUsMzI5XSxbMTc5LDMzNF0sWzIwOCwzNjRdLFszMDYsNDYzXSxbMzA3LDQ2NV0sWzMwOCw0NjddLFszMDksNDY5XSxbMzEwLDQ3MV0sWzMxMSw0''@;'; put 'put ''NzNdLFszMTIsNDc1XSxbMzEzLDQ3N10sWzM0MSw1MDZdLFs0MjgsNTk0XSxbNDQzLDYxMF0sWzU0NCw3MTJdLFs1NDUsNzE2XSxbNTU4LDczMF0sWzc0MSw5MzBdLFs3NDIsOTM4XSxbNzQ5LDk2Ml0sWzc1MCw5NzBdLFs4MDUsMTAyNl0sWzgxOSwxMTA0XSxbODIwLDExMDZdLFs3OTIyLDgy''@;'; put 'put ''MDldLFs3OTI0LDgyMTVdLFs3OTI1LDgyMThdLFs3OTI3LDgyMjJdLFs3OTM0LDgyMzFdLFs3OTQzLDgyNDFdLFs3OTQ0LDgyNDRdLFs3OTQ1LDgyNDZdLFs3OTUwLDgyNTJdLFs4MDYyLDgzNjVdLFs4MTQ4LDg0NTJdLFs4MTQ5LDg0NTRdLFs4MTUyLDg0NThdLFs4MTY0LDg0NzFdLFs4MTc0''@;'; put 'put ''LDg0ODJdLFs4MjM2LDg1NTZdLFs4MjQwLDg1NzBdLFs4MjYyLDg1OTZdLFs4MjY0LDg2MDJdLFs4Mzc0LDg3MTNdLFs4MzgwLDg3MjBdLFs4MzgxLDg3MjJdLFs4Mzg0LDg3MjZdLFs4Mzg4LDg3MzFdLFs4MzkwLDg3MzddLFs4MzkyLDg3NDBdLFs4MzkzLDg3NDJdLFs4Mzk0LDg3NDhdLFs4''@;'; put 'put ''Mzk2LDg3NTFdLFs4NDAxLDg3NjBdLFs4NDA2LDg3NjZdLFs4NDE2LDg3NzddLFs4NDE5LDg3ODFdLFs4NDI0LDg3ODddLFs4NDM3LDg4MDJdLFs4NDM5LDg4MDhdLFs4NDQ1LDg4MTZdLFs4NDgyLDg4NTRdLFs4NDg1LDg4NThdLFs4NDk2LDg4NzBdLFs4NTIxLDg4OTZdLFs4NjAzLDg5Nzld''@;'; put 'put ''LFs4OTM2LDkzMjJdLFs4OTQ2LDkzNzJdLFs5MDQ2LDk1NDhdLFs5MDUwLDk1ODhdLFs5MDYzLDk2MTZdLFs5MDY2LDk2MjJdLFs5MDc2LDk2MzRdLFs5MDkyLDk2NTJdLFs5MTAwLDk2NjJdLFs5MTA4LDk2NzJdLFs5MTExLDk2NzZdLFs5MTEzLDk2ODBdLFs5MTMxLDk3MDJdLFs5MTYyLDk3''@;'; put 'put ''MzVdLFs5MTY0LDk3MzhdLFs5MjE4LDk3OTNdLFs5MjE5LDk3OTVdLFsxMTMyOSwxMTkwNl0sWzExMzMxLDExOTA5XSxbMTEzMzQsMTE5MTNdLFsxMTMzNiwxMTkxN10sWzExMzQ2LDExOTI4XSxbMTEzNjEsMTE5NDRdLFsxMTM2MywxMTk0N10sWzExMzY2LDExOTUxXSxbMTEzNzAsMTE5NTZd''@;'; put 'put ''LFsxMTM3MiwxMTk2MF0sWzExMzc1LDExOTY0XSxbMTEzODksMTE5NzldLFsxMTY4MiwxMjI4NF0sWzExNjg2LDEyMjkyXSxbMTE2ODcsMTIzMTJdLFsxMTY5MiwxMjMxOV0sWzExNjk0LDEyMzMwXSxbMTE3MTQsMTIzNTFdLFsxMTcxNiwxMjQzNl0sWzExNzIzLDEyNDQ3XSxbMTE3MjUsMTI1''@;'; put 'put ''MzVdLFsxMTczMCwxMjU0M10sWzExNzM2LDEyNTg2XSxbMTE5ODIsMTI4NDJdLFsxMTk4OSwxMjg1MF0sWzEyMTAyLDEyOTY0XSxbMTIzMzYsMTMyMDBdLFsxMjM0OCwxMzIxNV0sWzEyMzUwLDEzMjE4XSxbMTIzODQsMTMyNTNdLFsxMjM5MywxMzI2M10sWzEyMzk1LDEzMjY3XSxbMTIzOTcs''@;'; put 'put ''MTMyNzBdLFsxMjUxMCwxMzM4NF0sWzEyNTUzLDEzNDI4XSxbMTI4NTEsMTM3MjddLFsxMjk2MiwxMzgzOV0sWzEyOTczLDEzODUxXSxbMTM3MzgsMTQ2MTddLFsxMzgyMywxNDcwM10sWzEzOTE5LDE0ODAxXSxbMTM5MzMsMTQ4MTZdLFsxNDA4MCwxNDk2NF0sWzE0Mjk4LDE1MTgzXSxbMTQ1''@;'; put 'put ''ODUsMTU0NzFdLFsxNDY5OCwxNTU4NV0sWzE1NTgzLDE2NDcxXSxbMTU4NDcsMTY3MzZdLFsxNjMxOCwxNzIwOF0sWzE2NDM0LDE3MzI1XSxbMTY0MzgsMTczMzBdLFsxNjQ4MSwxNzM3NF0sWzE2NzI5LDE3NjIzXSxbMTcxMDIsMTc5OTddLFsxNzEyMiwxODAxOF0sWzE3MzE1LDE4MjEyXSxb''@;'; put 'put ''MTczMjAsMTgyMThdLFsxNzQwMiwxODMwMV0sWzE3NDE4LDE4MzE4XSxbMTc4NTksMTg3NjBdLFsxNzkwOSwxODgxMV0sWzE3OTExLDE4ODE0XSxbMTc5MTUsMTg4MjBdLFsxNzkxNiwxODgyM10sWzE3OTM2LDE4ODQ0XSxbMTc5MzksMTg4NDhdLFsxNzk2MSwxODg3Ml0sWzE4NjY0LDE5NTc2''@;'; put 'put ''XSxbMTg3MDMsMTk2MjBdLFsxODgxNCwxOTczOF0sWzE4OTYyLDE5ODg3XSxbMTkwNDMsNDA4NzBdLFszMzQ2OSw1OTI0NF0sWzMzNDcwLDU5MzM2XSxbMzM0NzEsNTkzNjddLFszMzQ4NCw1OTQxM10sWzMzNDg1LDU5NDE3XSxbMzM0OTAsNTk0MjNdLFszMzQ5Nyw1OTQzMV0sWzMzNTAxLDU5''@;'; put 'put ''NDM3XSxbMzM1MDUsNTk0NDNdLFszMzUxMyw1OTQ1Ml0sWzMzNTIwLDU5NDYwXSxbMzM1MzYsNTk0NzhdLFszMzU1MCw1OTQ5M10sWzM3ODQ1LDYzNzg5XSxbMzc5MjEsNjM4NjZdLFszNzk0OCw2Mzg5NF0sWzM4MDI5LDYzOTc2XSxbMzgwMzgsNjM5ODZdLFszODA2NCw2NDAxNl0sWzM4MDY1''@;'; put 'put ''LDY0MDE4XSxbMzgwNjYsNjQwMjFdLFszODA2OSw2NDAyNV0sWzM4MDc1LDY0MDM0XSxbMzgwNzYsNjQwMzddLFszODA3OCw2NDA0Ml0sWzM5MTA4LDY1MDc0XSxbMzkxMDksNjUwOTNdLFszOTExMyw2NTEwN10sWzM5MTE0LDY1MTEyXSxbMzkxMTUsNjUxMjddLFszOTExNiw2NTEzMl0sWzM5''@;'; put 'put ''MjY1LDY1Mzc1XSxbMzkzOTQsNjU1MTBdLFsxODllMyw2NTUzNl1dLGppczAyMDg6WzEyMjg4LDEyMjg5LDEyMjkwLDY1MjkyLDY1Mjk0LDEyNTM5LDY1MzA2LDY1MzA3LDY1MzExLDY1MjgxLDEyNDQzLDEyNDQ0LDE4MCw2NTM0NCwxNjgsNjUzNDIsNjU1MDcsNjUzNDMsMTI1NDEsMTI1NDIs''@;'; put 'put ''MTI0NDUsMTI0NDYsMTIyOTEsMjAxODksMTIyOTMsMTIyOTQsMTIyOTUsMTI1NDAsODIxMyw4MjA4LDY1Mjk1LDY1MzQwLDY1Mzc0LDg3NDEsNjUzNzIsODIzMCw4MjI5LDgyMTYsODIxNyw4MjIwLDgyMjEsNjUyODgsNjUyODksMTIzMDgsMTIzMDksNjUzMzksNjUzNDEsNjUzNzEsNjUzNzMs''@;'; put 'put ''MTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsNjUyOTEsNjUyOTMsMTc3LDIxNSwyNDcsNjUzMDksODgwMCw2NTMwOCw2NTMxMCw4ODA2LDg4MDcsODczNCw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjU1MDksNjUy''@;'; put 'put ''ODQsNjU1MDQsNjU1MDUsNjUyODUsNjUyODMsNjUyODYsNjUyOTAsNjUzMTIsMTY3LDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODI1MSwxMjMwNiw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3NDMsODc0NCw2NTUwNiw4NjU4LDg2NjAsODcwNCw4NzA3LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg0OTEsODI0''@;'; put 'put ''MCw5ODM5LDk4MzcsOTgzNCw4MjI0LDgyMjUsMTgyLG51bGwsbnVsbCxudWxsLG51bGwsOTcxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMw''@;'; put 'put ''MSw2NTMwMiw2NTMwMyw2NTMwNCw2NTMwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1''@;'; put 'put ''MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4''@;'; put 'put ''LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLG51bGwsbnVsbCxudWxsLG51bGwsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQs''@;'; put 'put ''MTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIz''@;'; put 'put ''OTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTks''@;'; put 'put ''MTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEyNDQ5LDEyNDUwLDEy''@;'; put 'put ''NDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4''@;'; put 'put ''LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEy''@;'; put 'put ''NTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMz''@;'; put 'put ''LDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwx''@;'; put 'put ''MDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5Mywx''@;'; put 'put ''MDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5''@;'; put 'put ''NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkzMTIsOTMxMyw5''@;'; put 'put ''MzE0LDkzMTUsOTMxNiw5MzE3LDkzMTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDkzMjcsOTMyOCw5MzI5LDkzMzAsOTMzMSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLG51bGwsMTMxMjksMTMwNzYsMTMwOTAsMTMx''@;'; put 'put ''MzMsMTMwODAsMTMwOTUsMTMwNTksMTMxMTAsMTMxMzcsMTMxNDMsMTMwNjksMTMwOTQsMTMwOTEsMTMwOTksMTMxMzAsMTMxMTUsMTMyMTIsMTMyMTMsMTMyMTQsMTMxOTgsMTMxOTksMTMyNTIsMTMyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEzMTc5LDEy''@;'; put 'put ''MzE3LDEyMzE5LDg0NzAsMTMyNjEsODQ4MSwxMjk2NCwxMjk2NSwxMjk2NiwxMjk2NywxMjk2OCwxMjg0OSwxMjg1MCwxMjg1NywxMzE4MiwxMzE4MSwxMzE4MCw4Nzg2LDg4MDEsODc0Nyw4NzUwLDg3MjEsODczMCw4ODY5LDg3MzYsODczNSw4ODk1LDg3NTcsODc0NSw4NzQ2LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAxMjQsMjE3ODIsMjMwNDMsMzg0NjMsMjE2OTYsMjQ4NTksMjUzODQsMjMwMzAs''@;'; put 'put ''MzY4OTgsMzM5MDksMzM1NjQsMzEzMTIsMjQ3NDYsMjU1NjksMjgxOTcsMjYwOTMsMzM4OTQsMzM0NDYsMzk5MjUsMjY3NzEsMjIzMTEsMjYwMTcsMjUyMDEsMjM0NTEsMjI5OTIsMzQ0MjcsMzkxNTYsMzIwOTgsMzIxOTAsMzk4MjIsMjUxMTAsMzE5MDMsMzQ5OTksMjM0MzMsMjQyNDUsMjUz''@;'; put 'put ''NTMsMjYyNjMsMjY2OTYsMzgzNDMsMzg3OTcsMjY0NDcsMjAxOTcsMjAyMzQsMjAzMDEsMjAzODEsMjA1NTMsMjIyNTgsMjI4MzksMjI5OTYsMjMwNDEsMjM1NjEsMjQ3OTksMjQ4NDcsMjQ5NDQsMjYxMzEsMjY4ODUsMjg4NTgsMzAwMzEsMzAwNjQsMzEyMjcsMzIxNzMsMzIyMzksMzI5NjMs''@;'; put 'put ''MzM4MDYsMzQ5MTUsMzU1ODYsMzY5NDksMzY5ODYsMjEzMDcsMjAxMTcsMjAxMzMsMjI0OTUsMzI5NDYsMzcwNTcsMzA5NTksMTk5NjgsMjI3NjksMjgzMjIsMzY5MjAsMzEyODIsMzM1NzYsMzM0MTksMzk5ODMsMjA4MDEsMjEzNjAsMjE2OTMsMjE3MjksMjIyNDAsMjMwMzUsMjQzNDEsMzkx''@;'; put 'put ''NTQsMjgxMzksMzI5OTYsMzQwOTMsMzg0OTgsMzg1MTIsMzg1NjAsMzg5MDcsMjE1MTUsMjE0OTEsMjM0MzEsMjg4NzksMzI3MDEsMzY4MDIsMzg2MzIsMjEzNTksNDAyODQsMzE0MTgsMTk5ODUsMzA4NjcsMzMyNzYsMjgxOTgsMjIwNDAsMjE3NjQsMjc0MjEsMzQwNzQsMzk5OTUsMjMwMTMs''@;'; put 'put ''MjE0MTcsMjgwMDYsMjk5MTYsMzgyODcsMjIwODIsMjAxMTMsMzY5MzksMzg2NDIsMzM2MTUsMzkxODAsMjE0NzMsMjE5NDIsMjMzNDQsMjQ0MzMsMjYxNDQsMjYzNTUsMjY2MjgsMjc3MDQsMjc4OTEsMjc5NDUsMjk3ODcsMzA0MDgsMzEzMTAsMzg5NjQsMzM1MjEsMzQ5MDcsMzU0MjQsMzc2''@;'; put 'put ''MTMsMjgwODIsMzAxMjMsMzA0MTAsMzkzNjUsMjQ3NDIsMzU1ODUsMzYyMzQsMzgzMjIsMjcwMjIsMjE0MjEsMjA4NzAsMjIyOTAsMjI1NzYsMjI4NTIsMjM0NzYsMjQzMTAsMjQ2MTYsMjU1MTMsMjU1ODgsMjc4MzksMjg0MzYsMjg4MTQsMjg5NDgsMjkwMTcsMjkxNDEsMjk1MDMsMzIyNTcs''@;'; put 'put ''MzMzOTgsMzM0ODksMzQxOTksMzY5NjAsMzc0NjcsNDAyMTksMjI2MzMsMjYwNDQsMjc3MzgsMjk5ODksMjA5ODUsMjI4MzAsMjI4ODUsMjQ0NDgsMjQ1NDAsMjUyNzYsMjYxMDYsMjcxNzgsMjc0MzEsMjc1NzIsMjk1NzksMzI3MDUsMzUxNTgsNDAyMzYsNDAyMDYsNDA2NDQsMjM3MTMsMjc3''@;'; put 'put ''OTgsMzM2NTksMjA3NDAsMjM2MjcsMjUwMTQsMzMyMjIsMjY3NDIsMjkyODEsMjAwNTcsMjA0NzQsMjEzNjgsMjQ2ODEsMjgyMDEsMzEzMTEsMzg4OTksMTk5NzksMjEyNzAsMjAyMDYsMjAzMDksMjAyODUsMjAzODUsMjAzMzksMjExNTIsMjE0ODcsMjIwMjUsMjI3OTksMjMyMzMsMjM0Nzgs''@;'; put 'put ''MjM1MjEsMzExODUsMjYyNDcsMjY1MjQsMjY1NTAsMjc0NjgsMjc4MjcsMjg3NzksMjk2MzQsMzExMTcsMzExNjYsMzEyOTIsMzE2MjMsMzM0NTcsMzM0OTksMzM1NDAsMzM2NTUsMzM3NzUsMzM3NDcsMzQ2NjIsMzU1MDYsMjIwNTcsMzYwMDgsMzY4MzgsMzY5NDIsMzg2ODYsMzQ0NDIsMjA0''@;'; put 'put ''MjAsMjM3ODQsMjUxMDUsMjkyNzMsMzAwMTEsMzMyNTMsMzM0NjksMzQ1NTgsMzYwMzIsMzg1OTcsMzkxODcsMzkzODEsMjAxNzEsMjAyNTAsMzUyOTksMjIyMzgsMjI2MDIsMjI3MzAsMjQzMTUsMjQ1NTUsMjQ2MTgsMjQ3MjQsMjQ2NzQsMjUwNDAsMjUxMDYsMjUyOTYsMjU5MTMsMzk3NDUs''@;'; put 'put ''MjYyMTQsMjY4MDAsMjgwMjMsMjg3ODQsMzAwMjgsMzAzNDIsMzIxMTcsMzM0NDUsMzQ4MDksMzgyODMsMzg1NDIsMzU5OTcsMjA5NzcsMjExODIsMjI4MDYsMjE2ODMsMjM0NzUsMjM4MzAsMjQ5MzYsMjcwMTAsMjgwNzksMzA4NjEsMzM5OTUsMzQ5MDMsMzU0NDIsMzc3OTksMzk2MDgsMjgw''@;'; put 'put ''MTIsMzkzMzYsMzQ1MjEsMjI0MzUsMjY2MjMsMzQ1MTAsMzczOTAsMjExMjMsMjIxNTEsMjE1MDgsMjQyNzUsMjUzMTMsMjU3ODUsMjY2ODQsMjY2ODAsMjc1NzksMjk1NTQsMzA5MDYsMzEzMzksMzUyMjYsMzUyODIsMzYyMDMsMzY2MTEsMzcxMDEsMzgzMDcsMzg1NDgsMzg3NjEsMjMzOTgs''@;'; put 'put ''MjM3MzEsMjcwMDUsMzg5ODksMzg5OTAsMjU0OTksMzE1MjAsMjcxNzksMjcyNjMsMjY4MDYsMzk5NDksMjg1MTEsMjExMDYsMjE5MTcsMjQ2ODgsMjUzMjQsMjc5NjMsMjgxNjcsMjgzNjksMzM4ODMsMzUwODgsMzY2NzYsMTk5ODgsMzk5OTMsMjE0OTQsMjY5MDcsMjcxOTQsMzg3ODgsMjY2''@;'; put 'put ''NjYsMjA4MjgsMzE0MjcsMzM5NzAsMzczNDAsMzc3NzIsMjIxMDcsNDAyMzIsMjY2NTgsMzM1NDEsMzM4NDEsMzE5MDksMjFlMywzMzQ3NywyOTkyNiwyMDA5NCwyMDM1NSwyMDg5NiwyMzUwNiwyMTAwMiwyMTIwOCwyMTIyMywyNDA1OSwyMTkxNCwyMjU3MCwyMzAxNCwyMzQzNiwyMzQ0OCwy''@;'; put 'put ''MzUxNSwyNDE3OCwyNDE4NSwyNDczOSwyNDg2MywyNDkzMSwyNTAyMiwyNTU2MywyNTk1NCwyNjU3NywyNjcwNywyNjg3NCwyNzQ1NCwyNzQ3NSwyNzczNSwyODQ1MCwyODU2NywyODQ4NSwyOTg3MiwyOTk3NiwzMDQzNSwzMDQ3NSwzMTQ4NywzMTY0OSwzMTc3NywzMjIzMywzMjU2NiwzMjc1''@;'; put 'put ''MiwzMjkyNSwzMzM4MiwzMzY5NCwzNTI1MSwzNTUzMiwzNjAxMSwzNjk5NiwzNzk2OSwzODI5MSwzODI4OSwzODMwNiwzODUwMSwzODg2NywzOTIwOCwzMzMwNCwyMDAyNCwyMTU0NywyMzczNiwyNDAxMiwyOTYwOSwzMDI4NCwzMDUyNCwyMzcyMSwzMjc0NywzNjEwNywzODU5MywzODkyOSwz''@;'; put 'put ''ODk5NiwzOWUzLDIwMjI1LDIwMjM4LDIxMzYxLDIxOTE2LDIyMTIwLDIyNTIyLDIyODU1LDIzMzA1LDIzNDkyLDIzNjk2LDI0MDc2LDI0MTkwLDI0NTI0LDI1NTgyLDI2NDI2LDI2MDcxLDI2MDgyLDI2Mzk5LDI2ODI3LDI2ODIwLDI3MjMxLDI0MTEyLDI3NTg5LDI3NjcxLDI3NzczLDMwMDc5''@;'; put 'put ''LDMxMDQ4LDIzMzk1LDMxMjMyLDMyZTMsMjQ1MDksMzUyMTUsMzUzNTIsMzYwMjAsMzYyMTUsMzY1NTYsMzY2MzcsMzkxMzgsMzk0MzgsMzk3NDAsMjAwOTYsMjA2MDUsMjA3MzYsMjI5MzEsMjM0NTIsMjUxMzUsMjUyMTYsMjU4MzYsMjc0NTAsMjkzNDQsMzAwOTcsMzEwNDcsMzI2ODEsMzQ4''@;'; put 'put ''MTEsMzU1MTYsMzU2OTYsMjU1MTYsMzM3MzgsMzg4MTYsMjE1MTMsMjE1MDcsMjE5MzEsMjY3MDgsMjcyMjQsMzU0NDAsMzA3NTksMjY0ODUsNDA2NTMsMjEzNjQsMjM0NTgsMzMwNTAsMzQzODQsMzY4NzAsMTk5OTIsMjAwMzcsMjAxNjcsMjAyNDEsMjE0NTAsMjE1NjAsMjM0NzAsMjQzMzks''@;'; put 'put ''MjQ2MTMsMjU5MzcsMjY0MjksMjc3MTQsMjc3NjIsMjc4NzUsMjg3OTIsMjk2OTksMzEzNTAsMzE0MDYsMzE0OTYsMzIwMjYsMzE5OTgsMzIxMDIsMjYwODcsMjkyNzUsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjUzMTIsMjUzNjksMjgxOTIsMzQzOTQsMzUzNzcsMzYzMTcsMzc2MjQsMjg0''@;'; put 'put ''MTcsMzExNDIsMzk3NzAsMjAxMzYsMjAxMzksMjAxNDAsMjAzNzksMjAzODQsMjA2ODksMjA4MDcsMzE0NzgsMjA4NDksMjA5ODIsMjEzMzIsMjEyODEsMjEzNzUsMjE0ODMsMjE5MzIsMjI2NTksMjM3NzcsMjQzNzUsMjQzOTQsMjQ2MjMsMjQ2NTYsMjQ2ODUsMjUzNzUsMjU5NDUsMjcyMTEs''@;'; put 'put ''Mjc4NDEsMjkzNzgsMjk0MjEsMzA3MDMsMzMwMTYsMzMwMjksMzMyODgsMzQxMjYsMzcxMTEsMzc4NTcsMzg5MTEsMzkyNTUsMzk1MTQsMjAyMDgsMjA5NTcsMjM1OTcsMjYyNDEsMjY5ODksMjM2MTYsMjYzNTQsMjY5OTcsMjk1NzcsMjY3MDQsMzE4NzMsMjA2NzcsMjEyMjAsMjIzNDMsMjQw''@;'; put 'put ''NjIsMzc2NzAsMjYwMjAsMjc0MjcsMjc0NTMsMjk3NDgsMzExMDUsMzExNjUsMzE1NjMsMzIyMDIsMzM0NjUsMzM3NDAsMzQ5NDMsMzUxNjcsMzU2NDEsMzY4MTcsMzczMjksMjE1MzUsMzc1MDQsMjAwNjEsMjA1MzQsMjE0NzcsMjEzMDYsMjkzOTksMjk1OTAsMzA2OTcsMzM1MTAsMzY1Mjcs''@;'; put 'put ''MzkzNjYsMzkzNjgsMzkzNzgsMjA4NTUsMjQ4NTgsMzQzOTgsMjE5MzYsMzEzNTQsMjA1OTgsMjM1MDcsMzY5MzUsMzg1MzMsMjAwMTgsMjczNTUsMzczNTEsMjM2MzMsMjM2MjQsMjU0OTYsMzEzOTEsMjc3OTUsMzg3NzIsMzY3MDUsMzE0MDIsMjkwNjYsMzg1MzYsMzE4NzQsMjY2NDcsMzIz''@;'; put 'put ''NjgsMjY3MDUsMzc3NDAsMjEyMzQsMjE1MzEsMzQyMTksMzUzNDcsMzI2NzYsMzY1NTcsMzcwODksMjEzNTAsMzQ5NTIsMzEwNDEsMjA0MTgsMjA2NzAsMjEwMDksMjA4MDQsMjE4NDMsMjIzMTcsMjk2NzQsMjI0MTEsMjI4NjUsMjQ0MTgsMjQ0NTIsMjQ2OTMsMjQ5NTAsMjQ5MzUsMjUwMDEs''@;'; put 'put ''MjU1MjIsMjU2NTgsMjU5NjQsMjYyMjMsMjY2OTAsMjgxNzksMzAwNTQsMzEyOTMsMzE5OTUsMzIwNzYsMzIxNTMsMzIzMzEsMzI2MTksMzM1NTAsMzM2MTAsMzQ1MDksMzUzMzYsMzU0MjcsMzU2ODYsMzY2MDUsMzg5MzgsNDAzMzUsMzM0NjQsMzY4MTQsMzk5MTIsMjExMjcsMjUxMTksMjU3''@;'; put 'put ''MzEsMjg2MDgsMzg1NTMsMjY2ODksMjA2MjUsMjc0MjQsMjc3NzAsMjg1MDAsMzEzNDgsMzIwODAsMzQ4ODAsMzUzNjMsMjYzNzYsMjAyMTQsMjA1MzcsMjA1MTgsMjA1ODEsMjA4NjAsMjEwNDgsMjEwOTEsMjE5MjcsMjIyODcsMjI1MzMsMjMyNDQsMjQzMTQsMjUwMTAsMjUwODAsMjUzMzEs''@;'; put 'put ''MjU0NTgsMjY5MDgsMjcxNzcsMjkzMDksMjkzNTYsMjk0ODYsMzA3NDAsMzA4MzEsMzIxMjEsMzA0NzYsMzI5MzcsMzUyMTEsMzU2MDksMzYwNjYsMzY1NjIsMzY5NjMsMzc3NDksMzg1MjIsMzg5OTcsMzk0NDMsNDA1NjgsMjA4MDMsMjE0MDcsMjE0MjcsMjQxODcsMjQzNTgsMjgxODcsMjgz''@;'; put 'put ''MDQsMjk1NzIsMjk2OTQsMzIwNjcsMzMzMzUsMzUzMjgsMzU1NzgsMzg0ODAsMjAwNDYsMjA0OTEsMjE0NzYsMjE2MjgsMjIyNjYsMjI5OTMsMjMzOTYsMjQwNDksMjQyMzUsMjQzNTksMjUxNDQsMjU5MjUsMjY1NDMsMjgyNDYsMjkzOTIsMzE5NDYsMzQ5OTYsMzI5MjksMzI5OTMsMzM3NzYs''@;'; put 'put ''MzQzODIsMzU0NjMsMzYzMjgsMzc0MzEsMzg1OTksMzkwMTUsNDA3MjMsMjAxMTYsMjAxMTQsMjAyMzcsMjEzMjAsMjE1NzcsMjE1NjYsMjMwODcsMjQ0NjAsMjQ0ODEsMjQ3MzUsMjY3OTEsMjcyNzgsMjk3ODYsMzA4NDksMzU0ODYsMzU0OTIsMzU3MDMsMzcyNjQsMjAwNjIsMzk4ODEsMjAx''@;'; put 'put ''MzIsMjAzNDgsMjAzOTksMjA1MDUsMjA1MDIsMjA4MDksMjA4NDQsMjExNTEsMjExNzcsMjEyNDYsMjE0MDIsMjE0NzUsMjE1MjEsMjE1MTgsMjE4OTcsMjIzNTMsMjI0MzQsMjI5MDksMjMzODAsMjMzODksMjM0MzksMjQwMzcsMjQwMzksMjQwNTUsMjQxODQsMjQxOTUsMjQyMTgsMjQyNDcs''@;'; put 'put ''MjQzNDQsMjQ2NTgsMjQ5MDgsMjUyMzksMjUzMDQsMjU1MTEsMjU5MTUsMjYxMTQsMjYxNzksMjYzNTYsMjY0NzcsMjY2NTcsMjY3NzUsMjcwODMsMjc3NDMsMjc5NDYsMjgwMDksMjgyMDcsMjgzMTcsMzAwMDIsMzAzNDMsMzA4MjgsMzEyOTUsMzE5NjgsMzIwMDUsMzIwMjQsMzIwOTQsMzIx''@;'; put 'put ''NzcsMzI3ODksMzI3NzEsMzI5NDMsMzI5NDUsMzMxMDgsMzMxNjcsMzMzMjIsMzM2MTgsMzQ4OTIsMzQ5MTMsMzU2MTEsMzYwMDIsMzYwOTIsMzcwNjYsMzcyMzcsMzc0ODksMzA3ODMsMzc2MjgsMzgzMDgsMzg0NzcsMzg5MTcsMzkzMjEsMzk2NDAsNDAyNTEsMjEwODMsMjExNjMsMjE0OTUs''@;'; put 'put ''MjE1MTIsMjI3NDEsMjUzMzUsMjg2NDAsMzU5NDYsMzY3MDMsNDA2MzMsMjA4MTEsMjEwNTEsMjE1NzgsMjIyNjksMzEyOTYsMzcyMzksNDAyODgsNDA2NTgsMjk1MDgsMjg0MjUsMzMxMzYsMjk5NjksMjQ1NzMsMjQ3OTQsMzk1OTIsMjk0MDMsMzY3OTYsMjc0OTIsMzg5MTUsMjAxNzAsMjIy''@;'; put 'put ''NTYsMjIzNzIsMjI3MTgsMjMxMzAsMjQ2ODAsMjUwMzEsMjYxMjcsMjYxMTgsMjY2ODEsMjY4MDEsMjgxNTEsMzAxNjUsMzIwNTgsMzMzOTAsMzk3NDYsMjAxMjMsMjAzMDQsMjE0NDksMjE3NjYsMjM5MTksMjQwMzgsMjQwNDYsMjY2MTksMjc4MDEsMjk4MTEsMzA3MjIsMzU0MDgsMzc3ODIs''@;'; put 'put ''MzUwMzksMjIzNTIsMjQyMzEsMjUzODcsMjA2NjEsMjA2NTIsMjA4NzcsMjYzNjgsMjE3MDUsMjI2MjIsMjI5NzEsMjM0NzIsMjQ0MjUsMjUxNjUsMjU1MDUsMjY2ODUsMjc1MDcsMjgxNjgsMjg3OTcsMzczMTksMjkzMTIsMzA3NDEsMzA3NTgsMzEwODUsMjU5OTgsMzIwNDgsMzM3NTYsMzUw''@;'; put 'put ''MDksMzY2MTcsMzg1NTUsMjEwOTIsMjIzMTIsMjY0NDgsMzI2MTgsMzYwMDEsMjA5MTYsMjIzMzgsMzg0NDIsMjI1ODYsMjcwMTgsMzI5NDgsMjE2ODIsMjM4MjIsMjI1MjQsMzA4NjksNDA0NDIsMjAzMTYsMjEwNjYsMjE2NDMsMjU2NjIsMjYxNTIsMjYzODgsMjY2MTMsMzEzNjQsMzE1NzQs''@;'; put 'put ''MzIwMzQsMzc2NzksMjY3MTYsMzk4NTMsMzE1NDUsMjEyNzMsMjA4NzQsMjEwNDcsMjM1MTksMjUzMzQsMjU3NzQsMjU4MzAsMjY0MTMsMjc1NzgsMzQyMTcsMzg2MDksMzAzNTIsMzk4OTQsMjU0MjAsMzc2MzgsMzk4NTEsMzAzOTksMjYxOTQsMTk5NzcsMjA2MzIsMjE0NDIsMjM2NjUsMjQ4''@;'; put 'put ''MDgsMjU3NDYsMjU5NTUsMjY3MTksMjkxNTgsMjk2NDIsMjk5ODcsMzE2MzksMzIzODYsMzQ0NTMsMzU3MTUsMzYwNTksMzcyNDAsMzkxODQsMjYwMjgsMjYyODMsMjc1MzEsMjAxODEsMjAxODAsMjAyODIsMjAzNTEsMjEwNTAsMjE0OTYsMjE0OTAsMjE5ODcsMjIyMzUsMjI3NjMsMjI5ODcs''@;'; put 'put ''MjI5ODUsMjMwMzksMjMzNzYsMjM2MjksMjQwNjYsMjQxMDcsMjQ1MzUsMjQ2MDUsMjUzNTEsMjU5MDMsMjMzODgsMjYwMzEsMjYwNDUsMjYwODgsMjY1MjUsMjc0OTAsMjc1MTUsMjc2NjMsMjk1MDksMzEwNDksMzExNjksMzE5OTIsMzIwMjUsMzIwNDMsMzI5MzAsMzMwMjYsMzMyNjcsMzUy''@;'; put 'put ''MjIsMzU0MjIsMzU0MzMsMzU0MzAsMzU0NjgsMzU1NjYsMzYwMzksMzYwNjAsMzg2MDQsMzkxNjQsMjc1MDMsMjAxMDcsMjAyODQsMjAzNjUsMjA4MTYsMjMzODMsMjM1NDYsMjQ5MDQsMjUzNDUsMjYxNzgsMjc0MjUsMjgzNjMsMjc4MzUsMjkyNDYsMjk4ODUsMzAxNjQsMzA5MTMsMzEwMzQs''@;'; put 'put ''MzI3ODAsMzI4MTksMzMyNTgsMzM5NDAsMzY3NjYsMjc3MjgsNDA1NzUsMjQzMzUsMzU2NzIsNDAyMzUsMzE0ODIsMzY2MDAsMjM0MzcsMzg2MzUsMTk5NzEsMjE0ODksMjI1MTksMjI4MzMsMjMyNDEsMjM0NjAsMjQ3MTMsMjgyODcsMjg0MjIsMzAxNDIsMzYwNzQsMjM0NTUsMzQwNDgsMzE3''@;'; put 'put ''MTIsMjA1OTQsMjY2MTIsMzM0MzcsMjM2NDksMzQxMjIsMzIyODYsMzMyOTQsMjA4ODksMjM1NTYsMjU0NDgsMzYxOTgsMjYwMTIsMjkwMzgsMzEwMzgsMzIwMjMsMzI3NzMsMzU2MTMsMzY1NTQsMzY5NzQsMzQ1MDMsMzcwMzQsMjA1MTEsMjEyNDIsMjM2MTAsMjY0NTEsMjg3OTYsMjkyMzcs''@;'; put 'put ''MzcxOTYsMzczMjAsMzc2NzUsMzM1MDksMjM0OTAsMjQzNjksMjQ4MjUsMjAwMjcsMjE0NjIsMjM0MzIsMjUxNjMsMjY0MTcsMjc1MzAsMjk0MTcsMjk2NjQsMzEyNzgsMzMxMzEsMzYyNTksMzcyMDIsMzkzMTgsMjA3NTQsMjE0NjMsMjE2MTAsMjM1NTEsMjU0ODAsMjcxOTMsMzIxNzIsMzg2''@;'; put 'put ''NTYsMjIyMzQsMjE0NTQsMjE2MDgsMjM0NDcsMjM2MDEsMjQwMzAsMjA0NjIsMjQ4MzMsMjUzNDIsMjc5NTQsMzExNjgsMzExNzksMzIwNjYsMzIzMzMsMzI3MjIsMzMyNjEsMzMzMTEsMzM5MzYsMzQ4ODYsMzUxODYsMzU3MjgsMzY0NjgsMzY2NTUsMzY5MTMsMzcxOTUsMzcyMjgsMzg1OTgs''@;'; put 'put ''MzcyNzYsMjAxNjAsMjAzMDMsMjA4MDUsMjEzMTMsMjQ0NjcsMjUxMDIsMjY1ODAsMjc3MTMsMjgxNzEsMjk1MzksMzIyOTQsMzczMjUsMzc1MDcsMjE0NjAsMjI4MDksMjM0ODcsMjgxMTMsMzEwNjksMzIzMDIsMzE4OTksMjI2NTQsMjkwODcsMjA5ODYsMzQ4OTksMzY4NDgsMjA0MjYsMjM4''@;'; put 'put ''MDMsMjYxNDksMzA2MzYsMzE0NTksMzMzMDgsMzk0MjMsMjA5MzQsMjQ0OTAsMjYwOTIsMjY5OTEsMjc1MjksMjgxNDcsMjgzMTAsMjg1MTYsMzA0NjIsMzIwMjAsMjQwMzMsMzY5ODEsMzcyNTUsMzg5MTgsMjA5NjYsMjEwMjEsMjUxNTIsMjYyNTcsMjYzMjksMjgxODYsMjQyNDYsMzIyMTAs''@;'; put 'put ''MzI2MjYsMjYzNjAsMzQyMjMsMzQyOTUsMzU1NzYsMjExNjEsMjE0NjUsMjI4OTksMjQyMDcsMjQ0NjQsMjQ2NjEsMzc2MDQsMzg1MDAsMjA2NjMsMjA3NjcsMjEyMTMsMjEyODAsMjEzMTksMjE0ODQsMjE3MzYsMjE4MzAsMjE4MDksMjIwMzksMjI4ODgsMjI5NzQsMjMxMDAsMjM0NzcsMjM1''@;'; put 'put ''NTgsMjM1NjcsMjM1NjksMjM1NzgsMjQxOTYsMjQyMDIsMjQyODgsMjQ0MzIsMjUyMTUsMjUyMjAsMjUzMDcsMjU0ODQsMjU0NjMsMjYxMTksMjYxMjQsMjYxNTcsMjYyMzAsMjY0OTQsMjY3ODYsMjcxNjcsMjcxODksMjc4MzYsMjgwNDAsMjgxNjksMjgyNDgsMjg5ODgsMjg5NjYsMjkwMzEs''@;'; put 'put ''MzAxNTEsMzA0NjUsMzA4MTMsMzA5NzcsMzEwNzcsMzEyMTYsMzE0NTYsMzE1MDUsMzE5MTEsMzIwNTcsMzI5MTgsMzM3NTAsMzM5MzEsMzQxMjEsMzQ5MDksMzUwNTksMzUzNTksMzUzODgsMzU0MTIsMzU0NDMsMzU5MzcsMzYwNjIsMzcyODQsMzc0NzgsMzc3NTgsMzc5MTIsMzg1NTYsMzg4''@;'; put 'put ''MDgsMTk5NzgsMTk5NzYsMTk5OTgsMjAwNTUsMjA4ODcsMjExMDQsMjI0NzgsMjI1ODAsMjI3MzIsMjMzMzAsMjQxMjAsMjQ3NzMsMjU4NTQsMjY0NjUsMjY0NTQsMjc5NzIsMjkzNjYsMzAwNjcsMzEzMzEsMzM5NzYsMzU2OTgsMzczMDQsMzc2NjQsMjIwNjUsMjI1MTYsMzkxNjYsMjUzMjUs''@;'; put 'put ''MjY4OTMsMjc1NDIsMjkxNjUsMzIzNDAsMzI4ODcsMzMzOTQsMzUzMDIsMzkxMzUsMzQ2NDUsMzY3ODUsMjM2MTEsMjAyODAsMjA0NDksMjA0MDUsMjE3NjcsMjMwNzIsMjM1MTcsMjM1MjksMjQ1MTUsMjQ5MTAsMjUzOTEsMjYwMzIsMjYxODcsMjY4NjIsMjcwMzUsMjgwMjQsMjgxNDUsMzAw''@;'; put 'put ''MDMsMzAxMzcsMzA0OTUsMzEwNzAsMzEyMDYsMzIwNTEsMzMyNTEsMzM0NTUsMzQyMTgsMzUyNDIsMzUzODYsMzY1MjMsMzY3NjMsMzY5MTQsMzczNDEsMzg2NjMsMjAxNTQsMjAxNjEsMjA5OTUsMjI2NDUsMjI3NjQsMjM1NjMsMjk5NzgsMjM2MTMsMzMxMDIsMzUzMzgsMzY4MDUsMzg0OTks''@;'; put 'put ''Mzg3NjUsMzE1MjUsMzU1MzUsMzg5MjAsMzcyMTgsMjIyNTksMjE0MTYsMzY4ODcsMjE1NjEsMjI0MDIsMjQxMDEsMjU1MTIsMjc3MDAsMjg4MTAsMzA1NjEsMzE4ODMsMzI3MzYsMzQ5MjgsMzY5MzAsMzcyMDQsMzc2NDgsMzc2NTYsMzg1NDMsMjk3OTAsMzk2MjAsMjM4MTUsMjM5MTMsMjU5''@;'; put 'put ''NjgsMjY1MzAsMzYyNjQsMzg2MTksMjU0NTQsMjY0NDEsMjY5MDUsMzM3MzMsMzg5MzUsMzg1OTIsMzUwNzAsMjg1NDgsMjU3MjIsMjM1NDQsMTk5OTAsMjg3MTYsMzAwNDUsMjYxNTksMjA5MzIsMjEwNDYsMjEyMTgsMjI5OTUsMjQ0NDksMjQ2MTUsMjUxMDQsMjU5MTksMjU5NzIsMjYxNDMs''@;'; put 'put ''MjYyMjgsMjY4NjYsMjY2NDYsMjc0OTEsMjgxNjUsMjkyOTgsMjk5ODMsMzA0MjcsMzE5MzQsMzI4NTQsMjI3NjgsMzUwNjksMzUxOTksMzU0ODgsMzU0NzUsMzU1MzEsMzY4OTMsMzcyNjYsMzg3MzgsMzg3NDUsMjU5OTMsMzEyNDYsMzMwMzAsMzg1ODcsMjQxMDksMjQ3OTYsMjUxMTQsMjYw''@;'; put 'put ''MjEsMjYxMzIsMjY1MTIsMzA3MDcsMzEzMDksMzE4MjEsMzIzMTgsMzMwMzQsMzYwMTIsMzYxOTYsMzYzMjEsMzY0NDcsMzA4ODksMjA5OTksMjUzMDUsMjU1MDksMjU2NjYsMjUyNDAsMzUzNzMsMzEzNjMsMzE2ODAsMzU1MDAsMzg2MzQsMzIxMTgsMzMyOTIsMzQ2MzMsMjAxODUsMjA4MDgs''@;'; put 'put ''MjEzMTUsMjEzNDQsMjM0NTksMjM1NTQsMjM1NzQsMjQwMjksMjUxMjYsMjUxNTksMjU3NzYsMjY2NDMsMjY2NzYsMjc4NDksMjc5NzMsMjc5MjcsMjY1NzksMjg1MDgsMjkwMDYsMjkwNTMsMjYwNTksMzEzNTksMzE2NjEsMzIyMTgsMzIzMzAsMzI2ODAsMzMxNDYsMzMzMDcsMzMzMzcsMzQy''@;'; put 'put ''MTQsMzU0MzgsMzYwNDYsMzYzNDEsMzY5ODQsMzY5ODMsMzc1NDksMzc1MjEsMzgyNzUsMzk4NTQsMjEwNjksMjE4OTIsMjg0NzIsMjg5ODIsMjA4NDAsMzExMDksMzIzNDEsMzMyMDMsMzE5NTAsMjIwOTIsMjI2MDksMjM3MjAsMjU1MTQsMjYzNjYsMjYzNjUsMjY5NzAsMjk0MDEsMzAwOTUs''@;'; put 'put ''MzAwOTQsMzA5OTAsMzEwNjIsMzExOTksMzE4OTUsMzIwMzIsMzIwNjgsMzQzMTEsMzUzODAsMzg0NTksMzY5NjEsNDA3MzYsMjA3MTEsMjExMDksMjE0NTIsMjE0NzQsMjA0ODksMjE5MzAsMjI3NjYsMjI4NjMsMjkyNDUsMjM0MzUsMjM2NTIsMjEyNzcsMjQ4MDMsMjQ4MTksMjU0MzYsMjU0''@;'; put 'put ''NzUsMjU0MDcsMjU1MzEsMjU4MDUsMjYwODksMjYzNjEsMjQwMzUsMjcwODUsMjcxMzMsMjg0MzcsMjkxNTcsMjAxMDUsMzAxODUsMzA0NTYsMzEzNzksMzE5NjcsMzIyMDcsMzIxNTYsMzI4NjUsMzM2MDksMzM2MjQsMzM5MDAsMzM5ODAsMzQyOTksMzUwMTMsMzYyMDgsMzY4NjUsMzY5NzMs''@;'; put 'put ''Mzc3ODMsMzg2ODQsMzk0NDIsMjA2ODcsMjI2NzksMjQ5NzQsMzMyMzUsMzQxMDEsMzYxMDQsMzY4OTYsMjA0MTksMjA1OTYsMjEwNjMsMjEzNjMsMjQ2ODcsMjU0MTcsMjY0NjMsMjgyMDQsMzYyNzUsMzY4OTUsMjA0MzksMjM2NDYsMzYwNDIsMjYwNjMsMzIxNTQsMjEzMzAsMzQ5NjYsMjA4''@;'; put 'put ''NTQsMjU1MzksMjMzODQsMjM0MDMsMjM1NjIsMjU2MTMsMjY0NDksMzY5NTYsMjAxODIsMjI4MTAsMjI4MjYsMjc3NjAsMzU0MDksMjE4MjIsMjI1NDksMjI5NDksMjQ4MTYsMjUxNzEsMjY1NjEsMzMzMzMsMjY5NjUsMzg0NjQsMzkzNjQsMzk0NjQsMjAzMDcsMjI1MzQsMjM1NTAsMzI3ODQs''@;'; put 'put ''MjM3MjksMjQxMTEsMjQ0NTMsMjQ2MDgsMjQ5MDcsMjUxNDAsMjYzNjcsMjc4ODgsMjgzODIsMzI5NzQsMzMxNTEsMzM0OTIsMzQ5NTUsMzYwMjQsMzY4NjQsMzY5MTAsMzg1MzgsNDA2NjcsMzk4OTksMjAxOTUsMjE0ODgsMjI4MjMsMzE1MzIsMzcyNjEsMzg5ODgsNDA0NDEsMjgzODEsMjg3''@;'; put 'put ''MTEsMjEzMzEsMjE4MjgsMjM0MjksMjUxNzYsMjUyNDYsMjUyOTksMjc4MTAsMjg2NTUsMjk3MzAsMzUzNTEsMzc5NDQsMjg2MDksMzU1ODIsMzM1OTIsMjA5NjcsMzQ1NTIsMjE0ODIsMjE0ODEsMjAyOTQsMzY5NDgsMzY3ODQsMjI4OTAsMzMwNzMsMjQwNjEsMzE0NjYsMzY3OTksMjY4NDIs''@;'; put 'put ''MzU4OTUsMjk0MzIsNDAwMDgsMjcxOTcsMzU1MDQsMjAwMjUsMjEzMzYsMjIwMjIsMjIzNzQsMjUyODUsMjU1MDYsMjYwODYsMjc0NzAsMjgxMjksMjgyNTEsMjg4NDUsMzA3MDEsMzE0NzEsMzE2NTgsMzIxODcsMzI4MjksMzI5NjYsMzQ1MDcsMzU0NzcsMzc3MjMsMjIyNDMsMjI3MjcsMjQz''@;'; put 'put ''ODIsMjYwMjksMjYyNjIsMjcyNjQsMjc1NzMsMzAwMDcsMzU1MjcsMjA1MTYsMzA2OTMsMjIzMjAsMjQzNDcsMjQ2NzcsMjYyMzQsMjc3NDQsMzAxOTYsMzEyNTgsMzI2MjIsMzMyNjgsMzQ1ODQsMzY5MzMsMzkzNDcsMzE2ODksMzAwNDQsMzE0ODEsMzE1NjksMzM5ODgsMzY4ODAsMzEyMDks''@;'; put 'put ''MzEzNzgsMzM1OTAsMjMyNjUsMzA1MjgsMjAwMTMsMjAyMTAsMjM0NDksMjQ1NDQsMjUyNzcsMjYxNzIsMjY2MDksMjc4ODAsMzQ0MTEsMzQ5MzUsMzUzODcsMzcxOTgsMzc2MTksMzkzNzYsMjcxNTksMjg3MTAsMjk0ODIsMzM1MTEsMzM4NzksMzYwMTUsMTk5NjksMjA4MDYsMjA5MzksMjE4''@;'; put 'put ''OTksMjM1NDEsMjQwODYsMjQxMTUsMjQxOTMsMjQzNDAsMjQzNzMsMjQ0MjcsMjQ1MDAsMjUwNzQsMjUzNjEsMjYyNzQsMjYzOTcsMjg1MjYsMjkyNjYsMzAwMTAsMzA1MjIsMzI4ODQsMzMwODEsMzMxNDQsMzQ2NzgsMzU1MTksMzU1NDgsMzYyMjksMzYzMzksMzc1MzAsMzgyNjMsMzg5MTQs''@;'; put 'put ''NDAxNjUsMjExODksMjU0MzEsMzA0NTIsMjYzODksMjc3ODQsMjk2NDUsMzYwMzUsMzc4MDYsMzg1MTUsMjc5NDEsMjI2ODQsMjY4OTQsMjcwODQsMzY4NjEsMzc3ODYsMzAxNzEsMzY4OTAsMjI2MTgsMjY2MjYsMjU1MjQsMjcxMzEsMjAyOTEsMjg0NjAsMjY1ODQsMzY3OTUsMzQwODYsMzIx''@;'; put 'put ''ODAsMzc3MTYsMjY5NDMsMjg1MjgsMjIzNzgsMjI3NzUsMjMzNDAsMzIwNDQsMjkyMjYsMjE1MTQsMzczNDcsNDAzNzIsMjAxNDEsMjAzMDIsMjA1NzIsMjA1OTcsMjEwNTksMzU5OTgsMjE1NzYsMjI1NjQsMjM0NTAsMjQwOTMsMjQyMTMsMjQyMzcsMjQzMTEsMjQzNTEsMjQ3MTYsMjUyNjks''@;'; put 'put ''MjU0MDIsMjU1NTIsMjY3OTksMjc3MTIsMzA4NTUsMzExMTgsMzEyNDMsMzIyMjQsMzMzNTEsMzUzMzAsMzU1NTgsMzY0MjAsMzY4ODMsMzcwNDgsMzcxNjUsMzczMzYsNDA3MTgsMjc4NzcsMjU2ODgsMjU4MjYsMjU5NzMsMjg0MDQsMzAzNDAsMzE1MTUsMzY5NjksMzc4NDEsMjgzNDYsMjE3''@;'; put 'put ''NDYsMjQ1MDUsMjU3NjQsMzY2ODUsMzY4NDUsMzc0NDQsMjA4NTYsMjI2MzUsMjI4MjUsMjM2MzcsMjQyMTUsMjgxNTUsMzIzOTksMjk5ODAsMzYwMjgsMzY1NzgsMzkwMDMsMjg4NTcsMjAyNTMsMjc1ODMsMjg1OTMsM2U0LDM4NjUxLDIwODE0LDIxNTIwLDIyNTgxLDIyNjE1LDIyOTU2LDIz''@;'; put 'put ''NjQ4LDI0NDY2LDI2MDA3LDI2NDYwLDI4MTkzLDMwMzMxLDMzNzU5LDM2MDc3LDM2ODg0LDM3MTE3LDM3NzA5LDMwNzU3LDMwNzc4LDIxMTYyLDI0MjMwLDIyMzAzLDIyOTAwLDI0NTk0LDIwNDk4LDIwODI2LDIwOTA4LDIwOTQxLDIwOTkyLDIxNzc2LDIyNjEyLDIyNjE2LDIyODcxLDIzNDQ1''@;'; put 'put ''LDIzNzk4LDIzOTQ3LDI0NzY0LDI1MjM3LDI1NjQ1LDI2NDgxLDI2NjkxLDI2ODEyLDI2ODQ3LDMwNDIzLDI4MTIwLDI4MjcxLDI4MDU5LDI4NzgzLDI5MTI4LDI0NDAzLDMwMTY4LDMxMDk1LDMxNTYxLDMxNTcyLDMxNTcwLDMxOTU4LDMyMTEzLDIxMDQwLDMzODkxLDM0MTUzLDM0Mjc2LDM1''@;'; put 'put ''MzQyLDM1NTg4LDM1OTEwLDM2MzY3LDM2ODY3LDM2ODc5LDM3OTEzLDM4NTE4LDM4OTU3LDM5NDcyLDM4MzYwLDIwNjg1LDIxMjA1LDIxNTE2LDIyNTMwLDIzNTY2LDI0OTk5LDI1NzU4LDI3OTM0LDMwNjQzLDMxNDYxLDMzMDEyLDMzNzk2LDM2OTQ3LDM3NTA5LDIzNzc2LDQwMTk5LDIxMzEx''@;'; put 'put ''LDI0NDcxLDI0NDk5LDI4MDYwLDI5MzA1LDMwNTYzLDMxMTY3LDMxNzE2LDI3NjAyLDI5NDIwLDM1NTAxLDI2NjI3LDI3MjMzLDIwOTg0LDMxMzYxLDI2OTMyLDIzNjI2LDQwMTgyLDMzNTE1LDIzNDkzLDM3MTkzLDI4NzAyLDIyMTM2LDIzNjYzLDI0Nzc1LDI1OTU4LDI3Nzg4LDM1OTMwLDM2''@;'; put 'put ''OTI5LDM4OTMxLDIxNTg1LDI2MzExLDM3Mzg5LDIyODU2LDM3MDI3LDIwODY5LDIwMDQ1LDIwOTcwLDM0MjAxLDM1NTk4LDI4NzYwLDI1NDY2LDM3NzA3LDI2OTc4LDM5MzQ4LDMyMjYwLDMwMDcxLDIxMzM1LDI2OTc2LDM2NTc1LDM4NjI3LDI3NzQxLDIwMTA4LDIzNjEyLDI0MzM2LDM2ODQx''@;'; put 'put ''LDIxMjUwLDM2MDQ5LDMyOTA1LDM0NDI1LDI0MzE5LDI2MDg1LDIwMDgzLDIwODM3LDIyOTE0LDIzNjE1LDM4ODk0LDIwMjE5LDIyOTIyLDI0NTI1LDM1NDY5LDI4NjQxLDMxMTUyLDMxMDc0LDIzNTI3LDMzOTA1LDI5NDgzLDI5MTA1LDI0MTgwLDI0NTY1LDI1NDY3LDI1NzU0LDI5MTIzLDMx''@;'; put 'put ''ODk2LDIwMDM1LDI0MzE2LDIwMDQzLDIyNDkyLDIyMTc4LDI0NzQ1LDI4NjExLDMyMDEzLDMzMDIxLDMzMDc1LDMzMjE1LDM2Nzg2LDM1MjIzLDM0NDY4LDI0MDUyLDI1MjI2LDI1NzczLDM1MjA3LDI2NDg3LDI3ODc0LDI3OTY2LDI5NzUwLDMwNzcyLDIzMTEwLDMyNjI5LDMzNDUzLDM5MzQw''@;'; put 'put ''LDIwNDY3LDI0MjU5LDI1MzA5LDI1NDkwLDI1OTQzLDI2NDc5LDMwNDAzLDI5MjYwLDMyOTcyLDMyOTU0LDM2NjQ5LDM3MTk3LDIwNDkzLDIyNTIxLDIzMTg2LDI2NzU3LDI2OTk1LDI5MDI4LDI5NDM3LDM2MDIzLDIyNzcwLDM2MDY0LDM4NTA2LDM2ODg5LDM0Njg3LDMxMjA0LDMwNjk1LDMz''@;'; put 'put ''ODMzLDIwMjcxLDIxMDkzLDIxMzM4LDI1MjkzLDI2NTc1LDI3ODUwLDMwMzMzLDMxNjM2LDMxODkzLDMzMzM0LDM0MTgwLDM2ODQzLDI2MzMzLDI4NDQ4LDI5MTkwLDMyMjgzLDMzNzA3LDM5MzYxLDQwNjE0LDIwOTg5LDMxNjY1LDMwODM0LDMxNjcyLDMyOTAzLDMxNTYwLDI3MzY4LDI0MTYx''@;'; put 'put ''LDMyOTA4LDMwMDMzLDMwMDQ4LDIwODQzLDM3NDc0LDI4MzAwLDMwMzMwLDM3MjcxLDM5NjU4LDIwMjQwLDMyNjI0LDI1MjQ0LDMxNTY3LDM4MzA5LDQwMTY5LDIyMTM4LDIyNjE3LDM0NTMyLDM4NTg4LDIwMjc2LDIxMDI4LDIxMzIyLDIxNDUzLDIxNDY3LDI0MDcwLDI1NjQ0LDI2MDAxLDI2''@;'; put 'put ''NDk1LDI3NzEwLDI3NzI2LDI5MjU2LDI5MzU5LDI5Njc3LDMwMDM2LDMyMzIxLDMzMzI0LDM0MjgxLDM2MDA5LDMxNjg0LDM3MzE4LDI5MDMzLDM4OTMwLDM5MTUxLDI1NDA1LDI2MjE3LDMwMDU4LDMwNDM2LDMwOTI4LDM0MTE1LDM0NTQyLDIxMjkwLDIxMzI5LDIxNTQyLDIyOTE1LDI0MTk5''@;'; put 'put ''LDI0NDQ0LDI0NzU0LDI1MTYxLDI1MjA5LDI1MjU5LDI2ZTMsMjc2MDQsMjc4NTIsMzAxMzAsMzAzODIsMzA4NjUsMzExOTIsMzIyMDMsMzI2MzEsMzI5MzMsMzQ5ODcsMzU1MTMsMzYwMjcsMzY5OTEsMzg3NTAsMzkxMzEsMjcxNDcsMzE4MDAsMjA2MzMsMjM2MTQsMjQ0OTQsMjY1MDMsMjc2''@;'; put 'put ''MDgsMjk3NDksMzA0NzMsMzI2NTQsNDA3NjMsMjY1NzAsMzEyNTUsMjEzMDUsMzAwOTEsMzk2NjEsMjQ0MjIsMzMxODEsMzM3NzcsMzI5MjAsMjQzODAsMjQ1MTcsMzAwNTAsMzE1NTgsMzY5MjQsMjY3MjcsMjMwMTksMjMxOTUsMzIwMTYsMzAzMzQsMzU2MjgsMjA0NjksMjQ0MjYsMjcxNjEs''@;'; put 'put ''Mjc3MDMsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU0MTMsMzU5NjEsMjQyODcsMjU1NTEsMzAxNDksMzExODYsMzM0OTUsMzc2NzIsMzc2MTgsMzM5NDgsMzQ1NDEsMzk5ODEsMjE2OTcsMjQ0MjgsMjU5OTYsMjc5OTYsMjg2OTMsMzYwMDcsMzYwNTEsMzg5NzEsMjU5MzUsMjk5NDIsMTk5''@;'; put 'put ''ODEsMjAxODQsMjI0OTYsMjI4MjcsMjMxNDIsMjM1MDAsMjA5MDQsMjQwNjcsMjQyMjAsMjQ1OTgsMjUyMDYsMjU5NzUsMjYwMjMsMjYyMjIsMjgwMTQsMjkyMzgsMzE1MjYsMzMxMDQsMzMxNzgsMzM0MzMsMzU2NzYsMzZlMywzNjA3MCwzNjIxMiwzODQyOCwzODQ2OCwyMDM5OCwyNTc3MSwy''@;'; put 'put ''NzQ5NCwzMzMxMCwzMzg4OSwzNDE1NCwzNzA5NiwyMzU1MywyNjk2MywzOTA4MCwzMzkxNCwzNDEzNSwyMDIzOSwyMTEwMywyNDQ4OSwyNDEzMywyNjM4MSwzMTExOSwzMzE0NSwzNTA3OSwzNTIwNiwyODE0OSwyNDM0MywyNTE3MywyNzgzMiwyMDE3NSwyOTI4OSwzOTgyNiwyMDk5OCwyMTU2''@;'; put 'put ''MywyMjEzMiwyMjcwNywyNDk5NiwyNTE5OCwyODk1NCwyMjg5NCwzMTg4MSwzMTk2NiwzMjAyNywzODY0MCwyNTk5MSwzMjg2MiwxOTk5MywyMDM0MSwyMDg1MywyMjU5MiwyNDE2MywyNDE3OSwyNDMzMCwyNjU2NCwyMDAwNiwzNDEwOSwzODI4MSwzODQ5MSwzMTg1OSwzODkxMywyMDczMSwy''@;'; put 'put ''MjcyMSwzMDI5NCwzMDg4NywyMTAyOSwzMDYyOSwzNDA2NSwzMTYyMiwyMDU1OSwyMjc5MywyOTI1NSwzMTY4NywzMjIzMiwzNjc5NCwzNjgyMCwzNjk0MSwyMDQxNSwyMTE5MywyMzA4MSwyNDMyMSwzODgyOSwyMDQ0NSwzMzMwMywzNzYxMCwyMjI3NSwyNTQyOSwyNzQ5NywyOTk5NSwzNTAz''@;'; put 'put ''NiwzNjYyOCwzMTI5OCwyMTIxNSwyMjY3NSwyNDkxNywyNTA5OCwyNjI4NiwyNzU5NywzMTgwNywzMzc2OSwyMDUxNSwyMDQ3MiwyMTI1MywyMTU3NCwyMjU3NywyMjg1NywyMzQ1MywyMzc5MiwyMzc5MSwyMzg0OSwyNDIxNCwyNTI2NSwyNTQ0NywyNTkxOCwyNjA0MSwyNjM3OSwyNzg2MSwy''@;'; put 'put ''Nzg3MywyODkyMSwzMDc3MCwzMjI5OSwzMjk5MCwzMzQ1OSwzMzgwNCwzNDAyOCwzNDU2MiwzNTA5MCwzNTM3MCwzNTkxNCwzNzAzMCwzNzU4NiwzOTE2NSw0MDE3OSw0MDMwMCwyMDA0NywyMDEyOSwyMDYyMSwyMTA3OCwyMjM0NiwyMjk1MiwyNDEyNSwyNDUzNiwyNDUzNywyNTE1MSwyNjI5''@;'; put 'put ''MiwyNjM5NSwyNjU3NiwyNjgzNCwyMDg4MiwzMjAzMywzMjkzOCwzMzE5MiwzNTU4NCwzNTk4MCwzNjAzMSwzNzUwMiwzODQ1MCwyMTUzNiwzODk1NiwyMTI3MSwyMDY5MywyMTM0MCwyMjY5NiwyNTc3OCwyNjQyMCwyOTI4NywzMDU2NiwzMTMwMiwzNzM1MCwyMTE4NywyNzgwOSwyNzUyNiwy''@;'; put 'put ''MjUyOCwyNDE0MCwyMjg2OCwyNjQxMiwzMjc2MywyMDk2MSwzMDQwNiwyNTcwNSwzMDk1MiwzOTc2NCw0MDYzNSwyMjQ3NSwyMjk2OSwyNjE1MSwyNjUyMiwyNzU5OCwyMTczNywyNzA5NywyNDE0OSwzMzE4MCwyNjUxNywzOTg1MCwyNjYyMiw0MDAxOCwyNjcxNywyMDEzNCwyMDQ1MSwyMTQ0''@;'; put 'put ''OCwyNTI3MywyNjQxMSwyNzgxOSwzNjgwNCwyMDM5NywzMjM2NSw0MDYzOSwxOTk3NSwyNDkzMCwyODI4OCwyODQ1OSwzNDA2NywyMTYxOSwyNjQxMCwzOTc0OSwyNDA1MSwzMTYzNywyMzcyNCwyMzQ5NCwzNDU4OCwyODIzNCwzNDAwMSwzMTI1MiwzMzAzMiwyMjkzNywzMTg4NSwyNzY2NSwz''@;'; put 'put ''MDQ5NiwyMTIwOSwyMjgxOCwyODk2MSwyOTI3OSwzMDY4MywzODY5NSw0MDI4OSwyNjg5MSwyMzE2NywyMzA2NCwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwzMDQzMSwzNjg1NSwzNzUyOCw0MDE4MCwyMzAxOCwyOTI3NywyODM1NywyMDgxMywyNjgyNSwzMjE5MSwzMjIzNiwzODc1NCw0MDYz''@;'; put 'put ''NCwyNTcyMCwyNzE2OSwzMzUzOCwyMjkxNiwyMzM5MSwyNzYxMSwyOTQ2NywzMDQ1MCwzMjE3OCwzMjc5MSwzMzk0NSwyMDc4NiwyNjQwOCw0MDY2NSwzMDQ0NiwyNjQ2NiwyMTI0NywzOTE3MywyMzU4OCwyNTE0NywzMTg3MCwzNjAxNiwyMTgzOSwyNDc1OCwzMjAxMSwzODI3MiwyMTI0OSwy''@;'; put 'put ''MDA2MywyMDkxOCwyMjgxMiwyOTI0MiwzMjgyMiwzNzMyNiwyNDM1NywzMDY5MCwyMTM4MCwyNDQ0MSwzMjAwNCwzNDIyMCwzNTM3OSwzNjQ5MywzODc0MiwyNjYxMSwzNDIyMiwzNzk3MSwyNDg0MSwyNDg0MCwyNzgzMywzMDI5MCwzNTU2NSwzNjY2NCwyMTgwNywyMDMwNSwyMDc3OCwyMTE5''@;'; put 'put ''MSwyMTQ1MSwyMzQ2MSwyNDE4OSwyNDczNiwyNDk2MiwyNTU1OCwyNjM3NywyNjU4NiwyODI2MywyODA0NCwyOTQ5NCwyOTQ5NSwzMDAwMSwzMTA1NiwzNTAyOSwzNTQ4MCwzNjkzOCwzNzAwOSwzNzEwOSwzODU5NiwzNDcwMSwyMjgwNSwyMDEwNCwyMDMxMywxOTk4MiwzNTQ2NSwzNjY3MSwz''@;'; put 'put ''ODkyOCwyMDY1MywyNDE4OCwyMjkzNCwyMzQ4MSwyNDI0OCwyNTU2MiwyNTU5NCwyNTc5MywyNjMzMiwyNjk1NCwyNzA5NiwyNzkxNSwyODM0MiwyOTA3NiwyOTk5MiwzMTQwNywzMjY1MCwzMjc2OCwzMzg2NSwzMzk5MywzNTIwMSwzNTYxNywzNjM2MiwzNjk2NSwzODUyNSwzOTE3OCwyNDk1''@;'; put 'put ''OCwyNTIzMywyNzQ0MiwyNzc3OSwyODAyMCwzMjcxNiwzMjc2NCwyODA5NiwzMjY0NSwzNDc0NiwzNTA2NCwyNjQ2OSwzMzcxMywzODk3MiwzODY0NywyNzkzMSwzMjA5NywzMzg1MywzNzIyNiwyMDA4MSwyMTM2NSwyMzg4OCwyNzM5NiwyODY1MSwzNDI1MywzNDM0OSwzNTIzOSwyMTAzMywy''@;'; put 'put ''MTUxOSwyMzY1MywyNjQ0NiwyNjc5MiwyOTcwMiwyOTgyNywzMDE3OCwzNTAyMywzNTA0MSwzNzMyNCwzODYyNiwzODUyMCwyNDQ1OSwyOTU3NSwzMTQzNSwzMzg3MCwyNTUwNCwzMDA1MywyMTEyOSwyNzk2OSwyODMxNiwyOTcwNSwzMDA0MSwzMDgyNywzMTg5MCwzODUzNCwzMTQ1Miw0MDg0''@;'; put 'put ''NSwyMDQwNiwyNDk0MiwyNjA1MywzNDM5NiwyMDEwMiwyMDE0MiwyMDY5OCwyMDAwMSwyMDk0MCwyMzUzNCwyNjAwOSwyNjc1MywyODA5MiwyOTQ3MSwzMDI3NCwzMDYzNywzMTI2MCwzMTk3NSwzMzM5MSwzNTUzOCwzNjk4OCwzNzMyNywzODUxNywzODkzNiwyMTE0NywzMjIwOSwyMDUyMywy''@;'; put 'put ''MTQwMCwyNjUxOSwyODEwNywyOTEzNiwyOTc0NywzMzI1NiwzNjY1MCwzODU2Myw0MDAyMyw0MDYwNywyOTc5MiwyMjU5MywyODA1NywzMjA0NywzOTAwNiwyMDE5NiwyMDI3OCwyMDM2MywyMDkxOSwyMTE2OSwyMzk5NCwyNDYwNCwyOTYxOCwzMTAzNiwzMzQ5MSwzNzQyOCwzODU4MywzODY0''@;'; put 'put ''NiwzODY2Niw0MDU5OSw0MDgwMiwyNjI3OCwyNzUwOCwyMTAxNSwyMTE1NSwyODg3MiwzNTAxMCwyNDI2NSwyNDY1MSwyNDk3NiwyODQ1MSwyOTAwMSwzMTgwNiwzMjI0NCwzMjg3OSwzNDAzMCwzNjg5OSwzNzY3NiwyMTU3MCwzOTc5MSwyNzM0NywyODgwOSwzNjAzNCwzNjMzNSwzODcwNiwy''@;'; put 'put ''MTE3MiwyMzEwNSwyNDI2NiwyNDMyNCwyNjM5MSwyNzAwNCwyNzAyOCwyODAxMCwyODQzMSwyOTI4MiwyOTQzNiwzMTcyNSwzMjc2OSwzMjg5NCwzNDYzNSwzNzA3MCwyMDg0NSw0MDU5NSwzMTEwOCwzMjkwNywzNzY4MiwzNTU0MiwyMDUyNSwyMTY0NCwzNTQ0MSwyNzQ5OCwzNjAzNiwzMzAz''@;'; put 'put ''MSwyNDc4NSwyNjUyOCw0MDQzNCwyMDEyMSwyMDEyMCwzOTk1MiwzNTQzNSwzNDI0MSwzNDE1MiwyNjg4MCwyODI4NiwzMDg3MSwzMzEwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI0MzMyLDE5OTg0LDE5OTg5LDIwMDEwLDIwMDE3LDIwMDIy''@;'; put 'put ''LDIwMDI4LDIwMDMxLDIwMDM0LDIwMDU0LDIwMDU2LDIwMDk4LDIwMTAxLDM1OTQ3LDIwMTA2LDMzMjk4LDI0MzMzLDIwMTEwLDIwMTI2LDIwMTI3LDIwMTI4LDIwMTMwLDIwMTQ0LDIwMTQ3LDIwMTUwLDIwMTc0LDIwMTczLDIwMTY0LDIwMTY2LDIwMTYyLDIwMTgzLDIwMTkwLDIwMjA1LDIw''@;'; put 'put ''MTkxLDIwMjE1LDIwMjMzLDIwMzE0LDIwMjcyLDIwMzE1LDIwMzE3LDIwMzExLDIwMjk1LDIwMzQyLDIwMzYwLDIwMzY3LDIwMzc2LDIwMzQ3LDIwMzI5LDIwMzM2LDIwMzY5LDIwMzM1LDIwMzU4LDIwMzc0LDIwNzYwLDIwNDM2LDIwNDQ3LDIwNDMwLDIwNDQwLDIwNDQzLDIwNDMzLDIwNDQy''@;'; put 'put ''LDIwNDMyLDIwNDUyLDIwNDUzLDIwNTA2LDIwNTIwLDIwNTAwLDIwNTIyLDIwNTE3LDIwNDg1LDIwMjUyLDIwNDcwLDIwNTEzLDIwNTIxLDIwNTI0LDIwNDc4LDIwNDYzLDIwNDk3LDIwNDg2LDIwNTQ3LDIwNTUxLDI2MzcxLDIwNTY1LDIwNTYwLDIwNTUyLDIwNTcwLDIwNTY2LDIwNTg4LDIw''@;'; put 'put ''NjAwLDIwNjA4LDIwNjM0LDIwNjEzLDIwNjYwLDIwNjU4LDIwNjgxLDIwNjgyLDIwNjU5LDIwNjc0LDIwNjk0LDIwNzAyLDIwNzA5LDIwNzE3LDIwNzA3LDIwNzE4LDIwNzI5LDIwNzI1LDIwNzQ1LDIwNzM3LDIwNzM4LDIwNzU4LDIwNzU3LDIwNzU2LDIwNzYyLDIwNzY5LDIwNzk0LDIwNzkx''@;'; put 'put ''LDIwNzk2LDIwNzk1LDIwNzk5LDIwODAwLDIwODE4LDIwODEyLDIwODIwLDIwODM0LDMxNDgwLDIwODQxLDIwODQyLDIwODQ2LDIwODY0LDIwODY2LDIyMjMyLDIwODc2LDIwODczLDIwODc5LDIwODgxLDIwODgzLDIwODg1LDIwODg2LDIwOTAwLDIwOTAyLDIwODk4LDIwOTA1LDIwOTA2LDIw''@;'; put 'put ''OTA3LDIwOTE1LDIwOTEzLDIwOTE0LDIwOTEyLDIwOTE3LDIwOTI1LDIwOTMzLDIwOTM3LDIwOTU1LDIwOTYwLDM0Mzg5LDIwOTY5LDIwOTczLDIwOTc2LDIwOTgxLDIwOTkwLDIwOTk2LDIxMDAzLDIxMDEyLDIxMDA2LDIxMDMxLDIxMDM0LDIxMDM4LDIxMDQzLDIxMDQ5LDIxMDcxLDIxMDYw''@;'; put 'put ''LDIxMDY3LDIxMDY4LDIxMDg2LDIxMDc2LDIxMDk4LDIxMTA4LDIxMDk3LDIxMTA3LDIxMTE5LDIxMTE3LDIxMTMzLDIxMTQwLDIxMTM4LDIxMTA1LDIxMTI4LDIxMTM3LDM2Nzc2LDM2Nzc1LDIxMTY0LDIxMTY1LDIxMTgwLDIxMTczLDIxMTg1LDIxMTk3LDIxMjA3LDIxMjE0LDIxMjE5LDIx''@;'; put 'put ''MjIyLDM5MTQ5LDIxMjE2LDIxMjM1LDIxMjM3LDIxMjQwLDIxMjQxLDIxMjU0LDIxMjU2LDMwMDA4LDIxMjYxLDIxMjY0LDIxMjYzLDIxMjY5LDIxMjc0LDIxMjgzLDIxMjk1LDIxMjk3LDIxMjk5LDIxMzA0LDIxMzEyLDIxMzE4LDIxMzE3LDE5OTkxLDIxMzIxLDIxMzI1LDIwOTUwLDIxMzQy''@;'; put 'put ''LDIxMzUzLDIxMzU4LDIyODA4LDIxMzcxLDIxMzY3LDIxMzc4LDIxMzk4LDIxNDA4LDIxNDE0LDIxNDEzLDIxNDIyLDIxNDI0LDIxNDMwLDIxNDQzLDMxNzYyLDM4NjE3LDIxNDcxLDI2MzY0LDI5MTY2LDIxNDg2LDIxNDgwLDIxNDg1LDIxNDk4LDIxNTA1LDIxNTY1LDIxNTY4LDIxNTQ4LDIx''@;'; put 'put ''NTQ5LDIxNTY0LDIxNTUwLDIxNTU4LDIxNTQ1LDIxNTMzLDIxNTgyLDIxNjQ3LDIxNjIxLDIxNjQ2LDIxNTk5LDIxNjE3LDIxNjIzLDIxNjE2LDIxNjUwLDIxNjI3LDIxNjMyLDIxNjIyLDIxNjM2LDIxNjQ4LDIxNjM4LDIxNzAzLDIxNjY2LDIxNjg4LDIxNjY5LDIxNjc2LDIxNzAwLDIxNzA0''@;'; put 'put ''LDIxNjcyLDIxNjc1LDIxNjk4LDIxNjY4LDIxNjk0LDIxNjkyLDIxNzIwLDIxNzMzLDIxNzM0LDIxNzc1LDIxNzgwLDIxNzU3LDIxNzQyLDIxNzQxLDIxNzU0LDIxNzMwLDIxODE3LDIxODI0LDIxODU5LDIxODM2LDIxODA2LDIxODUyLDIxODI5LDIxODQ2LDIxODQ3LDIxODE2LDIxODExLDIx''@;'; put 'put ''ODUzLDIxOTEzLDIxODg4LDIxNjc5LDIxODk4LDIxOTE5LDIxODgzLDIxODg2LDIxOTEyLDIxOTE4LDIxOTM0LDIxODg0LDIxODkxLDIxOTI5LDIxODk1LDIxOTI4LDIxOTc4LDIxOTU3LDIxOTgzLDIxOTU2LDIxOTgwLDIxOTg4LDIxOTcyLDIyMDM2LDIyMDA3LDIyMDM4LDIyMDE0LDIyMDEz''@;'; put 'put ''LDIyMDQzLDIyMDA5LDIyMDk0LDIyMDk2LDI5MTUxLDIyMDY4LDIyMDcwLDIyMDY2LDIyMDcyLDIyMTIzLDIyMTE2LDIyMDYzLDIyMTI0LDIyMTIyLDIyMTUwLDIyMTQ0LDIyMTU0LDIyMTc2LDIyMTY0LDIyMTU5LDIyMTgxLDIyMTkwLDIyMTk4LDIyMTk2LDIyMjEwLDIyMjA0LDIyMjA5LDIy''@;'; put 'put ''MjExLDIyMjA4LDIyMjE2LDIyMjIyLDIyMjI1LDIyMjI3LDIyMjMxLDIyMjU0LDIyMjY1LDIyMjcyLDIyMjcxLDIyMjc2LDIyMjgxLDIyMjgwLDIyMjgzLDIyMjg1LDIyMjkxLDIyMjk2LDIyMjk0LDIxOTU5LDIyMzAwLDIyMzEwLDIyMzI3LDIyMzI4LDIyMzUwLDIyMzMxLDIyMzM2LDIyMzUx''@;'; put 'put ''LDIyMzc3LDIyNDY0LDIyNDA4LDIyMzY5LDIyMzk5LDIyNDA5LDIyNDE5LDIyNDMyLDIyNDUxLDIyNDM2LDIyNDQyLDIyNDQ4LDIyNDY3LDIyNDcwLDIyNDg0LDIyNDgyLDIyNDgzLDIyNTM4LDIyNDg2LDIyNDk5LDIyNTM5LDIyNTUzLDIyNTU3LDIyNjQyLDIyNTYxLDIyNjI2LDIyNjAzLDIy''@;'; put 'put ''NjQwLDI3NTg0LDIyNjEwLDIyNTg5LDIyNjQ5LDIyNjYxLDIyNzEzLDIyNjg3LDIyNjk5LDIyNzE0LDIyNzUwLDIyNzE1LDIyNzEyLDIyNzAyLDIyNzI1LDIyNzM5LDIyNzM3LDIyNzQzLDIyNzQ1LDIyNzQ0LDIyNzU3LDIyNzQ4LDIyNzU2LDIyNzUxLDIyNzY3LDIyNzc4LDIyNzc3LDIyNzc5''@;'; put 'put ''LDIyNzgwLDIyNzgxLDIyNzg2LDIyNzk0LDIyODAwLDIyODExLDI2NzkwLDIyODIxLDIyODI4LDIyODI5LDIyODM0LDIyODQwLDIyODQ2LDMxNDQyLDIyODY5LDIyODY0LDIyODYyLDIyODc0LDIyODcyLDIyODgyLDIyODgwLDIyODg3LDIyODkyLDIyODg5LDIyOTA0LDIyOTEzLDIyOTQxLDIw''@;'; put 'put ''MzE4LDIwMzk1LDIyOTQ3LDIyOTYyLDIyOTgyLDIzMDE2LDIzMDA0LDIyOTI1LDIzMDAxLDIzMDAyLDIzMDc3LDIzMDcxLDIzMDU3LDIzMDY4LDIzMDQ5LDIzMDY2LDIzMTA0LDIzMTQ4LDIzMTEzLDIzMDkzLDIzMDk0LDIzMTM4LDIzMTQ2LDIzMTk0LDIzMjI4LDIzMjMwLDIzMjQzLDIzMjM0''@;'; put 'put ''LDIzMjI5LDIzMjY3LDIzMjU1LDIzMjcwLDIzMjczLDIzMjU0LDIzMjkwLDIzMjkxLDIzMzA4LDIzMzA3LDIzMzE4LDIzMzQ2LDIzMjQ4LDIzMzM4LDIzMzUwLDIzMzU4LDIzMzYzLDIzMzY1LDIzMzYwLDIzMzc3LDIzMzgxLDIzMzg2LDIzMzg3LDIzMzk3LDIzNDAxLDIzNDA4LDIzNDExLDIz''@;'; put 'put ''NDEzLDIzNDE2LDI1OTkyLDIzNDE4LDIzNDI0LDIzNDI3LDIzNDYyLDIzNDgwLDIzNDkxLDIzNDk1LDIzNDk3LDIzNTA4LDIzNTA0LDIzNTI0LDIzNTI2LDIzNTIyLDIzNTE4LDIzNTI1LDIzNTMxLDIzNTM2LDIzNTQyLDIzNTM5LDIzNTU3LDIzNTU5LDIzNTYwLDIzNTY1LDIzNTcxLDIzNTg0''@;'; put 'put ''LDIzNTg2LDIzNTkyLDIzNjA4LDIzNjA5LDIzNjE3LDIzNjIyLDIzNjMwLDIzNjM1LDIzNjMyLDIzNjMxLDIzNDA5LDIzNjYwLDIzNjYyLDIwMDY2LDIzNjcwLDIzNjczLDIzNjkyLDIzNjk3LDIzNzAwLDIyOTM5LDIzNzIzLDIzNzM5LDIzNzM0LDIzNzQwLDIzNzM1LDIzNzQ5LDIzNzQyLDIz''@;'; put 'put ''NzUxLDIzNzY5LDIzNzg1LDIzODA1LDIzODAyLDIzNzg5LDIzOTQ4LDIzNzg2LDIzODE5LDIzODI5LDIzODMxLDIzOTAwLDIzODM5LDIzODM1LDIzODI1LDIzODI4LDIzODQyLDIzODM0LDIzODMzLDIzODMyLDIzODg0LDIzODkwLDIzODg2LDIzODgzLDIzOTE2LDIzOTIzLDIzOTI2LDIzOTQz''@;'; put 'put ''LDIzOTQwLDIzOTM4LDIzOTcwLDIzOTY1LDIzOTgwLDIzOTgyLDIzOTk3LDIzOTUyLDIzOTkxLDIzOTk2LDI0MDA5LDI0MDEzLDI0MDE5LDI0MDE4LDI0MDIyLDI0MDI3LDI0MDQzLDI0MDUwLDI0MDUzLDI0MDc1LDI0MDkwLDI0MDg5LDI0MDgxLDI0MDkxLDI0MTE4LDI0MTE5LDI0MTMyLDI0''@;'; put 'put ''MTMxLDI0MTI4LDI0MTQyLDI0MTUxLDI0MTQ4LDI0MTU5LDI0MTYyLDI0MTY0LDI0MTM1LDI0MTgxLDI0MTgyLDI0MTg2LDQwNjM2LDI0MTkxLDI0MjI0LDI0MjU3LDI0MjU4LDI0MjY0LDI0MjcyLDI0MjcxLDI0Mjc4LDI0MjkxLDI0Mjg1LDI0MjgyLDI0MjgzLDI0MjkwLDI0Mjg5LDI0Mjk2''@;'; put 'put ''LDI0Mjk3LDI0MzAwLDI0MzA1LDI0MzA3LDI0MzA0LDI0MzA4LDI0MzEyLDI0MzE4LDI0MzIzLDI0MzI5LDI0NDEzLDI0NDEyLDI0MzMxLDI0MzM3LDI0MzQyLDI0MzYxLDI0MzY1LDI0Mzc2LDI0Mzg1LDI0MzkyLDI0Mzk2LDI0Mzk4LDI0MzY3LDI0NDAxLDI0NDA2LDI0NDA3LDI0NDA5LDI0''@;'; put 'put ''NDE3LDI0NDI5LDI0NDM1LDI0NDM5LDI0NDUxLDI0NDUwLDI0NDQ3LDI0NDU4LDI0NDU2LDI0NDY1LDI0NDU1LDI0NDc4LDI0NDczLDI0NDcyLDI0NDgwLDI0NDg4LDI0NDkzLDI0NTA4LDI0NTM0LDI0NTcxLDI0NTQ4LDI0NTY4LDI0NTYxLDI0NTQxLDI0NzU1LDI0NTc1LDI0NjA5LDI0Njcy''@;'; put 'put ''LDI0NjAxLDI0NTkyLDI0NjE3LDI0NTkwLDI0NjI1LDI0NjAzLDI0NTk3LDI0NjE5LDI0NjE0LDI0NTkxLDI0NjM0LDI0NjY2LDI0NjQxLDI0NjgyLDI0Njk1LDI0NjcxLDI0NjUwLDI0NjQ2LDI0NjUzLDI0Njc1LDI0NjQzLDI0Njc2LDI0NjQyLDI0Njg0LDI0NjgzLDI0NjY1LDI0NzA1LDI0''@;'; put 'put ''NzE3LDI0ODA3LDI0NzA3LDI0NzMwLDI0NzA4LDI0NzMxLDI0NzI2LDI0NzI3LDI0NzIyLDI0NzQzLDI0NzE1LDI0ODAxLDI0NzYwLDI0ODAwLDI0Nzg3LDI0NzU2LDI0NTYwLDI0NzY1LDI0Nzc0LDI0NzU3LDI0NzkyLDI0OTA5LDI0ODUzLDI0ODM4LDI0ODIyLDI0ODIzLDI0ODMyLDI0ODIw''@;'; put 'put ''LDI0ODI2LDI0ODM1LDI0ODY1LDI0ODI3LDI0ODE3LDI0ODQ1LDI0ODQ2LDI0OTAzLDI0ODk0LDI0ODcyLDI0ODcxLDI0OTA2LDI0ODk1LDI0ODkyLDI0ODc2LDI0ODg0LDI0ODkzLDI0ODk4LDI0OTAwLDI0OTQ3LDI0OTUxLDI0OTIwLDI0OTIxLDI0OTIyLDI0OTM5LDI0OTQ4LDI0OTQzLDI0''@;'; put 'put ''OTMzLDI0OTQ1LDI0OTI3LDI0OTI1LDI0OTE1LDI0OTQ5LDI0OTg1LDI0OTgyLDI0OTY3LDI1MDA0LDI0OTgwLDI0OTg2LDI0OTcwLDI0OTc3LDI1MDAzLDI1MDA2LDI1MDM2LDI1MDM0LDI1MDMzLDI1MDc5LDI1MDMyLDI1MDI3LDI1MDMwLDI1MDE4LDI1MDM1LDMyNjMzLDI1MDM3LDI1MDYy''@;'; put 'put ''LDI1MDU5LDI1MDc4LDI1MDgyLDI1MDc2LDI1MDg3LDI1MDg1LDI1MDg0LDI1MDg2LDI1MDg4LDI1MDk2LDI1MDk3LDI1MTAxLDI1MTAwLDI1MTA4LDI1MTE1LDI1MTE4LDI1MTIxLDI1MTMwLDI1MTM0LDI1MTM2LDI1MTM4LDI1MTM5LDI1MTUzLDI1MTY2LDI1MTgyLDI1MTg3LDI1MTc5LDI1''@;'; put 'put ''MTg0LDI1MTkyLDI1MjEyLDI1MjE4LDI1MjI1LDI1MjE0LDI1MjM0LDI1MjM1LDI1MjM4LDI1MzAwLDI1MjE5LDI1MjM2LDI1MzAzLDI1Mjk3LDI1Mjc1LDI1Mjk1LDI1MzQzLDI1Mjg2LDI1ODEyLDI1Mjg4LDI1MzA4LDI1MjkyLDI1MjkwLDI1MjgyLDI1Mjg3LDI1MjQzLDI1Mjg5LDI1MzU2''@;'; put 'put ''LDI1MzI2LDI1MzI5LDI1MzgzLDI1MzQ2LDI1MzUyLDI1MzI3LDI1MzMzLDI1NDI0LDI1NDA2LDI1NDIxLDI1NjI4LDI1NDIzLDI1NDk0LDI1NDg2LDI1NDcyLDI1NTE1LDI1NDYyLDI1NTA3LDI1NDg3LDI1NDgxLDI1NTAzLDI1NTI1LDI1NDUxLDI1NDQ5LDI1NTM0LDI1NTc3LDI1NTM2LDI1''@;'; put 'put ''NTQyLDI1NTcxLDI1NTQ1LDI1NTU0LDI1NTkwLDI1NTQwLDI1NjIyLDI1NjUyLDI1NjA2LDI1NjE5LDI1NjM4LDI1NjU0LDI1ODg1LDI1NjIzLDI1NjQwLDI1NjE1LDI1NzAzLDI1NzExLDI1NzE4LDI1Njc4LDI1ODk4LDI1NzQ5LDI1NzQ3LDI1NzY1LDI1NzY5LDI1NzM2LDI1Nzg4LDI1ODE4''@;'; put 'put ''LDI1ODEwLDI1Nzk3LDI1Nzk5LDI1Nzg3LDI1ODE2LDI1Nzk0LDI1ODQxLDI1ODMxLDMzMjg5LDI1ODI0LDI1ODI1LDI1MjYwLDI1ODI3LDI1ODM5LDI1OTAwLDI1ODQ2LDI1ODQ0LDI1ODQyLDI1ODUwLDI1ODU2LDI1ODUzLDI1ODgwLDI1ODg0LDI1ODYxLDI1ODkyLDI1ODkxLDI1ODk5LDI1''@;'; put 'put ''OTA4LDI1OTA5LDI1OTExLDI1OTEwLDI1OTEyLDMwMDI3LDI1OTI4LDI1OTQyLDI1OTQxLDI1OTMzLDI1OTQ0LDI1OTUwLDI1OTQ5LDI1OTcwLDI1OTc2LDI1OTg2LDI1OTg3LDM1NzIyLDI2MDExLDI2MDE1LDI2MDI3LDI2MDM5LDI2MDUxLDI2MDU0LDI2MDQ5LDI2MDUyLDI2MDYwLDI2MDY2''@;'; put 'put ''LDI2MDc1LDI2MDczLDI2MDgwLDI2MDgxLDI2MDk3LDI2NDgyLDI2MTIyLDI2MTE1LDI2MTA3LDI2NDgzLDI2MTY1LDI2MTY2LDI2MTY0LDI2MTQwLDI2MTkxLDI2MTgwLDI2MTg1LDI2MTc3LDI2MjA2LDI2MjA1LDI2MjEyLDI2MjE1LDI2MjE2LDI2MjA3LDI2MjEwLDI2MjI0LDI2MjQzLDI2''@;'; put 'put ''MjQ4LDI2MjU0LDI2MjQ5LDI2MjQ0LDI2MjY0LDI2MjY5LDI2MzA1LDI2Mjk3LDI2MzEzLDI2MzAyLDI2MzAwLDI2MzA4LDI2Mjk2LDI2MzI2LDI2MzMwLDI2MzM2LDI2MTc1LDI2MzQyLDI2MzQ1LDI2MzUyLDI2MzU3LDI2MzU5LDI2MzgzLDI2MzkwLDI2Mzk4LDI2NDA2LDI2NDA3LDM4NzEy''@;'; put 'put ''LDI2NDE0LDI2NDMxLDI2NDIyLDI2NDMzLDI2NDI0LDI2NDIzLDI2NDM4LDI2NDYyLDI2NDY0LDI2NDU3LDI2NDY3LDI2NDY4LDI2NTA1LDI2NDgwLDI2NTM3LDI2NDkyLDI2NDc0LDI2NTA4LDI2NTA3LDI2NTM0LDI2NTI5LDI2NTAxLDI2NTUxLDI2NjA3LDI2NTQ4LDI2NjA0LDI2NTQ3LDI2''@;'; put 'put ''NjAxLDI2NTUyLDI2NTk2LDI2NTkwLDI2NTg5LDI2NTk0LDI2NjA2LDI2NTUzLDI2NTc0LDI2NTY2LDI2NTk5LDI3MjkyLDI2NjU0LDI2Njk0LDI2NjY1LDI2Njg4LDI2NzAxLDI2Njc0LDI2NzAyLDI2ODAzLDI2NjY3LDI2NzEzLDI2NzIzLDI2NzQzLDI2NzUxLDI2NzgzLDI2NzY3LDI2Nzk3''@;'; put 'put ''LDI2NzcyLDI2NzgxLDI2Nzc5LDI2NzU1LDI3MzEwLDI2ODA5LDI2NzQwLDI2ODA1LDI2Nzg0LDI2ODEwLDI2ODk1LDI2NzY1LDI2NzUwLDI2ODgxLDI2ODI2LDI2ODg4LDI2ODQwLDI2OTE0LDI2OTE4LDI2ODQ5LDI2ODkyLDI2ODI5LDI2ODM2LDI2ODU1LDI2ODM3LDI2OTM0LDI2ODk4LDI2''@;'; put 'put ''ODg0LDI2ODM5LDI2ODUxLDI2OTE3LDI2ODczLDI2ODQ4LDI2ODYzLDI2OTIwLDI2OTIyLDI2OTA2LDI2OTE1LDI2OTEzLDI2ODIyLDI3MDAxLDI2OTk5LDI2OTcyLDI3ZTMsMjY5ODcsMjY5NjQsMjcwMDYsMjY5OTAsMjY5MzcsMjY5OTYsMjY5NDEsMjY5NjksMjY5MjgsMjY5NzcsMjY5NzQs''@;'; put 'put ''MjY5NzMsMjcwMDksMjY5ODYsMjcwNTgsMjcwNTQsMjcwODgsMjcwNzEsMjcwNzMsMjcwOTEsMjcwNzAsMjcwODYsMjM1MjgsMjcwODIsMjcxMDEsMjcwNjcsMjcwNzUsMjcwNDcsMjcxODIsMjcwMjUsMjcwNDAsMjcwMzYsMjcwMjksMjcwNjAsMjcxMDIsMjcxMTIsMjcxMzgsMjcxNjMsMjcx''@;'; put 'put ''MzUsMjc0MDIsMjcxMjksMjcxMjIsMjcxMTEsMjcxNDEsMjcwNTcsMjcxNjYsMjcxMTcsMjcxNTYsMjcxMTUsMjcxNDYsMjcxNTQsMjczMjksMjcxNzEsMjcxNTUsMjcyMDQsMjcxNDgsMjcyNTAsMjcxOTAsMjcyNTYsMjcyMDcsMjcyMzQsMjcyMjUsMjcyMzgsMjcyMDgsMjcxOTIsMjcxNzAs''@;'; put 'put ''MjcyODAsMjcyNzcsMjcyOTYsMjcyNjgsMjcyOTgsMjcyOTksMjcyODcsMzQzMjcsMjczMjMsMjczMzEsMjczMzAsMjczMjAsMjczMTUsMjczMDgsMjczNTgsMjczNDUsMjczNTksMjczMDYsMjczNTQsMjczNzAsMjczODcsMjczOTcsMzQzMjYsMjczODYsMjc0MTAsMjc0MTQsMzk3MjksMjc0''@;'; put 'put ''MjMsMjc0NDgsMjc0NDcsMzA0MjgsMjc0NDksMzkxNTAsMjc0NjMsMjc0NTksMjc0NjUsMjc0NzIsMjc0ODEsMjc0NzYsMjc0ODMsMjc0ODcsMjc0ODksMjc1MTIsMjc1MTMsMjc1MTksMjc1MjAsMjc1MjQsMjc1MjMsMjc1MzMsMjc1NDQsMjc1NDEsMjc1NTAsMjc1NTYsMjc1NjIsMjc1NjMs''@;'; put 'put ''Mjc1NjcsMjc1NzAsMjc1NjksMjc1NzEsMjc1NzUsMjc1ODAsMjc1OTAsMjc1OTUsMjc2MDMsMjc2MTUsMjc2MjgsMjc2MjcsMjc2MzUsMjc2MzEsNDA2MzgsMjc2NTYsMjc2NjcsMjc2NjgsMjc2NzUsMjc2ODQsMjc2ODMsMjc3NDIsMjc3MzMsMjc3NDYsMjc3NTQsMjc3NzgsMjc3ODksMjc4''@;'; put 'put ''MDIsMjc3NzcsMjc4MDMsMjc3NzQsMjc3NTIsMjc3NjMsMjc3OTQsMjc3OTIsMjc4NDQsMjc4ODksMjc4NTksMjc4MzcsMjc4NjMsMjc4NDUsMjc4NjksMjc4MjIsMjc4MjUsMjc4MzgsMjc4MzQsMjc4NjcsMjc4ODcsMjc4NjUsMjc4ODIsMjc5MzUsMzQ4OTMsMjc5NTgsMjc5NDcsMjc5NjUs''@;'; put 'put ''Mjc5NjAsMjc5MjksMjc5NTcsMjc5NTUsMjc5MjIsMjc5MTYsMjgwMDMsMjgwNTEsMjgwMDQsMjc5OTQsMjgwMjUsMjc5OTMsMjgwNDYsMjgwNTMsMjg2NDQsMjgwMzcsMjgxNTMsMjgxODEsMjgxNzAsMjgwODUsMjgxMDMsMjgxMzQsMjgwODgsMjgxMDIsMjgxNDAsMjgxMjYsMjgxMDgsMjgx''@;'; put 'put ''MzYsMjgxMTQsMjgxMDEsMjgxNTQsMjgxMjEsMjgxMzIsMjgxMTcsMjgxMzgsMjgxNDIsMjgyMDUsMjgyNzAsMjgyMDYsMjgxODUsMjgyNzQsMjgyNTUsMjgyMjIsMjgxOTUsMjgyNjcsMjgyMDMsMjgyNzgsMjgyMzcsMjgxOTEsMjgyMjcsMjgyMTgsMjgyMzgsMjgxOTYsMjg0MTUsMjgxODks''@;'; put 'put ''MjgyMTYsMjgyOTAsMjgzMzAsMjgzMTIsMjgzNjEsMjgzNDMsMjgzNzEsMjgzNDksMjgzMzUsMjgzNTYsMjgzMzgsMjgzNzIsMjgzNzMsMjgzMDMsMjgzMjUsMjgzNTQsMjgzMTksMjg0ODEsMjg0MzMsMjg3NDgsMjgzOTYsMjg0MDgsMjg0MTQsMjg0NzksMjg0MDIsMjg0NjUsMjgzOTksMjg0''@;'; put 'put ''NjYsMjgzNjQsMjg0NzgsMjg0MzUsMjg0MDcsMjg1NTAsMjg1MzgsMjg1MzYsMjg1NDUsMjg1NDQsMjg1MjcsMjg1MDcsMjg2NTksMjg1MjUsMjg1NDYsMjg1NDAsMjg1MDQsMjg1NTgsMjg1NjEsMjg2MTAsMjg1MTgsMjg1OTUsMjg1NzksMjg1NzcsMjg1ODAsMjg2MDEsMjg2MTQsMjg1ODYs''@;'; put 'put ''Mjg2MzksMjg2MjksMjg2NTIsMjg2MjgsMjg2MzIsMjg2NTcsMjg2NTQsMjg2MzUsMjg2ODEsMjg2ODMsMjg2NjYsMjg2ODksMjg2NzMsMjg2ODcsMjg2NzAsMjg2OTksMjg2OTgsMjg1MzIsMjg3MDEsMjg2OTYsMjg3MDMsMjg3MjAsMjg3MzQsMjg3MjIsMjg3NTMsMjg3NzEsMjg4MjUsMjg4''@;'; put 'put ''MTgsMjg4NDcsMjg5MTMsMjg4NDQsMjg4NTYsMjg4NTEsMjg4NDYsMjg4OTUsMjg4NzUsMjg4OTMsMjg4ODksMjg5MzcsMjg5MjUsMjg5NTYsMjg5NTMsMjkwMjksMjkwMTMsMjkwNjQsMjkwMzAsMjkwMjYsMjkwMDQsMjkwMTQsMjkwMzYsMjkwNzEsMjkxNzksMjkwNjAsMjkwNzcsMjkwOTYs''@;'; put 'put ''MjkxMDAsMjkxNDMsMjkxMTMsMjkxMTgsMjkxMzgsMjkxMjksMjkxNDAsMjkxMzQsMjkxNTIsMjkxNjQsMjkxNTksMjkxNzMsMjkxODAsMjkxNzcsMjkxODMsMjkxOTcsMjkyMDAsMjkyMTEsMjkyMjQsMjkyMjksMjkyMjgsMjkyMzIsMjkyMzQsMjkyNDMsMjkyNDQsMjkyNDcsMjkyNDgsMjky''@;'; put 'put ''NTQsMjkyNTksMjkyNzIsMjkzMDAsMjkzMTAsMjkzMTQsMjkzMTMsMjkzMTksMjkzMzAsMjkzMzQsMjkzNDYsMjkzNTEsMjkzNjksMjkzNjIsMjkzNzksMjkzODIsMjkzODAsMjkzOTAsMjkzOTQsMjk0MTAsMjk0MDgsMjk0MDksMjk0MzMsMjk0MzEsMjA0OTUsMjk0NjMsMjk0NTAsMjk0Njgs''@;'; put 'put ''Mjk0NjIsMjk0NjksMjk0OTIsMjk0ODcsMjk0ODEsMjk0NzcsMjk1MDIsMjk1MTgsMjk1MTksNDA2NjQsMjk1MjcsMjk1NDYsMjk1NDQsMjk1NTIsMjk1NjAsMjk1NTcsMjk1NjMsMjk1NjIsMjk2NDAsMjk2MTksMjk2NDYsMjk2MjcsMjk2MzIsMjk2NjksMjk2NzgsMjk2NjIsMjk4NTgsMjk3''@;'; put 'put ''MDEsMjk4MDcsMjk3MzMsMjk2ODgsMjk3NDYsMjk3NTQsMjk3ODEsMjk3NTksMjk3OTEsMjk3ODUsMjk3NjEsMjk3ODgsMjk4MDEsMjk4MDgsMjk3OTUsMjk4MDIsMjk4MTQsMjk4MjIsMjk4MzUsMjk4NTQsMjk4NjMsMjk4OTgsMjk5MDMsMjk5MDgsMjk2ODEsMjk5MjAsMjk5MjMsMjk5Mjcs''@;'; put 'put ''Mjk5MjksMjk5MzQsMjk5MzgsMjk5MzYsMjk5MzcsMjk5NDQsMjk5NDMsMjk5NTYsMjk5NTUsMjk5NTcsMjk5NjQsMjk5NjYsMjk5NjUsMjk5NzMsMjk5NzEsMjk5ODIsMjk5OTAsMjk5OTYsMzAwMTIsMzAwMjAsMzAwMjksMzAwMjYsMzAwMjUsMzAwNDMsMzAwMjIsMzAwNDIsMzAwNTcsMzAw''@;'; put 'put ''NTIsMzAwNTUsMzAwNTksMzAwNjEsMzAwNzIsMzAwNzAsMzAwODYsMzAwODcsMzAwNjgsMzAwOTAsMzAwODksMzAwODIsMzAxMDAsMzAxMDYsMzAxMDksMzAxMTcsMzAxMTUsMzAxNDYsMzAxMzEsMzAxNDcsMzAxMzMsMzAxNDEsMzAxMzYsMzAxNDAsMzAxMjksMzAxNTcsMzAxNTQsMzAxNjIs''@;'; put 'put ''MzAxNjksMzAxNzksMzAxNzQsMzAyMDYsMzAyMDcsMzAyMDQsMzAyMDksMzAxOTIsMzAyMDIsMzAxOTQsMzAxOTUsMzAyMTksMzAyMjEsMzAyMTcsMzAyMzksMzAyNDcsMzAyNDAsMzAyNDEsMzAyNDIsMzAyNDQsMzAyNjAsMzAyNTYsMzAyNjcsMzAyNzksMzAyODAsMzAyNzgsMzAzMDAsMzAy''@;'; put 'put ''OTYsMzAzMDUsMzAzMDYsMzAzMTIsMzAzMTMsMzAzMTQsMzAzMTEsMzAzMTYsMzAzMjAsMzAzMjIsMzAzMjYsMzAzMjgsMzAzMzIsMzAzMzYsMzAzMzksMzAzNDQsMzAzNDcsMzAzNTAsMzAzNTgsMzAzNTUsMzAzNjEsMzAzNjIsMzAzODQsMzAzODgsMzAzOTIsMzAzOTMsMzAzOTQsMzA0MDIs''@;'; put 'put ''MzA0MTMsMzA0MjIsMzA0MTgsMzA0MzAsMzA0MzMsMzA0MzcsMzA0MzksMzA0NDIsMzQzNTEsMzA0NTksMzA0NzIsMzA0NzEsMzA0NjgsMzA1MDUsMzA1MDAsMzA0OTQsMzA1MDEsMzA1MDIsMzA0OTEsMzA1MTksMzA1MjAsMzA1MzUsMzA1NTQsMzA1NjgsMzA1NzEsMzA1NTUsMzA1NjUsMzA1''@;'; put 'put ''OTEsMzA1OTAsMzA1ODUsMzA2MDYsMzA2MDMsMzA2MDksMzA2MjQsMzA2MjIsMzA2NDAsMzA2NDYsMzA2NDksMzA2NTUsMzA2NTIsMzA2NTMsMzA2NTEsMzA2NjMsMzA2NjksMzA2NzksMzA2ODIsMzA2ODQsMzA2OTEsMzA3MDIsMzA3MTYsMzA3MzIsMzA3MzgsMzEwMTQsMzA3NTIsMzEwMTgs''@;'; put 'put ''MzA3ODksMzA4NjIsMzA4MzYsMzA4NTQsMzA4NDQsMzA4NzQsMzA4NjAsMzA4ODMsMzA5MDEsMzA4OTAsMzA4OTUsMzA5MjksMzA5MTgsMzA5MjMsMzA5MzIsMzA5MTAsMzA5MDgsMzA5MTcsMzA5MjIsMzA5NTYsMzA5NTEsMzA5MzgsMzA5NzMsMzA5NjQsMzA5ODMsMzA5OTQsMzA5OTMsMzEw''@;'; put 'put ''MDEsMzEwMjAsMzEwMTksMzEwNDAsMzEwNzIsMzEwNjMsMzEwNzEsMzEwNjYsMzEwNjEsMzEwNTksMzEwOTgsMzExMDMsMzExMTQsMzExMzMsMzExNDMsNDA3NzksMzExNDYsMzExNTAsMzExNTUsMzExNjEsMzExNjIsMzExNzcsMzExODksMzEyMDcsMzEyMTIsMzEyMDEsMzEyMDMsMzEyNDAs''@;'; put 'put ''MzEyNDUsMzEyNTYsMzEyNTcsMzEyNjQsMzEyNjMsMzExMDQsMzEyODEsMzEyOTEsMzEyOTQsMzEyODcsMzEyOTksMzEzMTksMzEzMDUsMzEzMjksMzEzMzAsMzEzMzcsNDA4NjEsMzEzNDQsMzEzNTMsMzEzNTcsMzEzNjgsMzEzODMsMzEzODEsMzEzODQsMzEzODIsMzE0MDEsMzE0MzIsMzE0''@;'; put 'put ''MDgsMzE0MTQsMzE0MjksMzE0MjgsMzE0MjMsMzY5OTUsMzE0MzEsMzE0MzQsMzE0MzcsMzE0MzksMzE0NDUsMzE0NDMsMzE0NDksMzE0NTAsMzE0NTMsMzE0NTcsMzE0NTgsMzE0NjIsMzE0NjksMzE0NzIsMzE0OTAsMzE1MDMsMzE0OTgsMzE0OTQsMzE1MzksMzE1MTIsMzE1MTMsMzE1MTgs''@;'; put 'put ''MzE1NDEsMzE1MjgsMzE1NDIsMzE1NjgsMzE2MTAsMzE0OTIsMzE1NjUsMzE0OTksMzE1NjQsMzE1NTcsMzE2MDUsMzE1ODksMzE2MDQsMzE1OTEsMzE2MDAsMzE2MDEsMzE1OTYsMzE1OTgsMzE2NDUsMzE2NDAsMzE2NDcsMzE2MjksMzE2NDQsMzE2NDIsMzE2MjcsMzE2MzQsMzE2MzEsMzE1''@;'; put 'put ''ODEsMzE2NDEsMzE2OTEsMzE2ODEsMzE2OTIsMzE2OTUsMzE2NjgsMzE2ODYsMzE3MDksMzE3MjEsMzE3NjEsMzE3NjQsMzE3MTgsMzE3MTcsMzE4NDAsMzE3NDQsMzE3NTEsMzE3NjMsMzE3MzEsMzE3MzUsMzE3NjcsMzE3NTcsMzE3MzQsMzE3NzksMzE3ODMsMzE3ODYsMzE3NzUsMzE3OTks''@;'; put 'put ''MzE3ODcsMzE4MDUsMzE4MjAsMzE4MTEsMzE4MjgsMzE4MjMsMzE4MDgsMzE4MjQsMzE4MzIsMzE4MzksMzE4NDQsMzE4MzAsMzE4NDUsMzE4NTIsMzE4NjEsMzE4NzUsMzE4ODgsMzE5MDgsMzE5MTcsMzE5MDYsMzE5MTUsMzE5MDUsMzE5MTIsMzE5MjMsMzE5MjIsMzE5MjEsMzE5MTgsMzE5''@;'; put 'put ''MjksMzE5MzMsMzE5MzYsMzE5NDEsMzE5MzgsMzE5NjAsMzE5NTQsMzE5NjQsMzE5NzAsMzk3MzksMzE5ODMsMzE5ODYsMzE5ODgsMzE5OTAsMzE5OTQsMzIwMDYsMzIwMDIsMzIwMjgsMzIwMjEsMzIwMTAsMzIwNjksMzIwNzUsMzIwNDYsMzIwNTAsMzIwNjMsMzIwNTMsMzIwNzAsMzIxMTUs''@;'; put 'put ''MzIwODYsMzIwNzgsMzIxMTQsMzIxMDQsMzIxMTAsMzIwNzksMzIwOTksMzIxNDcsMzIxMzcsMzIwOTEsMzIxNDMsMzIxMjUsMzIxNTUsMzIxODYsMzIxNzQsMzIxNjMsMzIxODEsMzIxOTksMzIxODksMzIxNzEsMzIzMTcsMzIxNjIsMzIxNzUsMzIyMjAsMzIxODQsMzIxNTksMzIxNzYsMzIy''@;'; put 'put ''MTYsMzIyMjEsMzIyMjgsMzIyMjIsMzIyNTEsMzIyNDIsMzIyMjUsMzIyNjEsMzIyNjYsMzIyOTEsMzIyODksMzIyNzQsMzIzMDUsMzIyODcsMzIyNjUsMzIyNjcsMzIyOTAsMzIzMjYsMzIzNTgsMzIzMTUsMzIzMDksMzIzMTMsMzIzMjMsMzIzMTEsMzIzMDYsMzIzMTQsMzIzNTksMzIzNDks''@;'; put 'put ''MzIzNDIsMzIzNTAsMzIzNDUsMzIzNDYsMzIzNzcsMzIzNjIsMzIzNjEsMzIzODAsMzIzNzksMzIzODcsMzIyMTMsMzIzODEsMzY3ODIsMzIzODMsMzIzOTIsMzIzOTMsMzIzOTYsMzI0MDIsMzI0MDAsMzI0MDMsMzI0MDQsMzI0MDYsMzIzOTgsMzI0MTEsMzI0MTIsMzI1NjgsMzI1NzAsMzI1''@;'; put 'put ''ODEsMzI1ODgsMzI1ODksMzI1OTAsMzI1OTIsMzI1OTMsMzI1OTcsMzI1OTYsMzI2MDAsMzI2MDcsMzI2MDgsMzI2MTYsMzI2MTcsMzI2MTUsMzI2MzIsMzI2NDIsMzI2NDYsMzI2NDMsMzI2NDgsMzI2NDcsMzI2NTIsMzI2NjAsMzI2NzAsMzI2NjksMzI2NjYsMzI2NzUsMzI2ODcsMzI2OTAs''@;'; put 'put ''MzI2OTcsMzI2ODYsMzI2OTQsMzI2OTYsMzU2OTcsMzI3MDksMzI3MTAsMzI3MTQsMzI3MjUsMzI3MjQsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTUsMzI3NjEsMzkxMzIsMzI3NzQsMzI3NzIsMzI3NzksMzI3ODYsMzI3OTIsMzI3OTMsMzI3OTYsMzI4MDEsMzI4MDgsMzI4MzEsMzI4MjcsMzI4''@;'; put 'put ''NDIsMzI4MzgsMzI4NTAsMzI4NTYsMzI4NTgsMzI4NjMsMzI4NjYsMzI4NzIsMzI4ODMsMzI4ODIsMzI4ODAsMzI4ODYsMzI4ODksMzI4OTMsMzI4OTUsMzI5MDAsMzI5MDIsMzI5MDEsMzI5MjMsMzI5MTUsMzI5MjIsMzI5NDEsMjA4ODAsMzI5NDAsMzI5ODcsMzI5OTcsMzI5ODUsMzI5ODks''@;'; put 'put ''MzI5NjQsMzI5ODYsMzI5ODIsMzMwMzMsMzMwMDcsMzMwMDksMzMwNTEsMzMwNjUsMzMwNTksMzMwNzEsMzMwOTksMzg1MzksMzMwOTQsMzMwODYsMzMxMDcsMzMxMDUsMzMwMjAsMzMxMzcsMzMxMzQsMzMxMjUsMzMxMjYsMzMxNDAsMzMxNTUsMzMxNjAsMzMxNjIsMzMxNTIsMzMxNTQsMzMx''@;'; put 'put ''ODQsMzMxNzMsMzMxODgsMzMxODcsMzMxMTksMzMxNzEsMzMxOTMsMzMyMDAsMzMyMDUsMzMyMTQsMzMyMDgsMzMyMTMsMzMyMTYsMzMyMTgsMzMyMTAsMzMyMjUsMzMyMjksMzMyMzMsMzMyNDEsMzMyNDAsMzMyMjQsMzMyNDIsMzMyNDcsMzMyNDgsMzMyNTUsMzMyNzQsMzMyNzUsMzMyNzgs''@;'; put 'put ''MzMyODEsMzMyODIsMzMyODUsMzMyODcsMzMyOTAsMzMyOTMsMzMyOTYsMzMzMDIsMzMzMjEsMzMzMjMsMzMzMzYsMzMzMzEsMzMzNDQsMzMzNjksMzMzNjgsMzMzNzMsMzMzNzAsMzMzNzUsMzMzODAsMzMzNzgsMzMzODQsMzMzODYsMzMzODcsMzMzMjYsMzMzOTMsMzMzOTksMzM0MDAsMzM0''@;'; put 'put ''MDYsMzM0MjEsMzM0MjYsMzM0NTEsMzM0MzksMzM0NjcsMzM0NTIsMzM1MDUsMzM1MDcsMzM1MDMsMzM0OTAsMzM1MjQsMzM1MjMsMzM1MzAsMzM2ODMsMzM1MzksMzM1MzEsMzM1MjksMzM1MDIsMzM1NDIsMzM1MDAsMzM1NDUsMzM0OTcsMzM1ODksMzM1ODgsMzM1NTgsMzM1ODYsMzM1ODUs''@;'; put 'put ''MzM2MDAsMzM1OTMsMzM2MTYsMzM2MDUsMzM1ODMsMzM1NzksMzM1NTksMzM1NjAsMzM2NjksMzM2OTAsMzM3MDYsMzM2OTUsMzM2OTgsMzM2ODYsMzM1NzEsMzM2NzgsMzM2NzEsMzM2NzQsMzM2NjAsMzM3MTcsMzM2NTEsMzM2NTMsMzM2OTYsMzM2NzMsMzM3MDQsMzM3ODAsMzM4MTEsMzM3''@;'; put 'put ''NzEsMzM3NDIsMzM3ODksMzM3OTUsMzM3NTIsMzM4MDMsMzM3MjksMzM3ODMsMzM3OTksMzM3NjAsMzM3NzgsMzM4MDUsMzM4MjYsMzM4MjQsMzM3MjUsMzM4NDgsMzQwNTQsMzM3ODcsMzM5MDEsMzM4MzQsMzM4NTIsMzQxMzgsMzM5MjQsMzM5MTEsMzM4OTksMzM5NjUsMzM5MDIsMzM5MjIs''@;'; put 'put ''MzM4OTcsMzM4NjIsMzM4MzYsMzM5MDMsMzM5MTMsMzM4NDUsMzM5OTQsMzM4OTAsMzM5NzcsMzM5ODMsMzM5NTEsMzQwMDksMzM5OTcsMzM5NzksMzQwMTAsMzRlMywzMzk4NSwzMzk5MCwzNDAwNiwzMzk1MywzNDA4MSwzNDA0NywzNDAzNiwzNDA3MSwzNDA3MiwzNDA5MiwzNDA3OSwzNDA2''@;'; put 'put ''OSwzNDA2OCwzNDA0NCwzNDExMiwzNDE0NywzNDEzNiwzNDEyMCwzNDExMywzNDMwNiwzNDEyMywzNDEzMywzNDE3NiwzNDIxMiwzNDE4NCwzNDE5MywzNDE4NiwzNDIxNiwzNDE1NywzNDE5NiwzNDIwMywzNDI4MiwzNDE4MywzNDIwNCwzNDE2NywzNDE3NCwzNDE5MiwzNDI0OSwzNDIzNCwz''@;'; put 'put ''NDI1NSwzNDIzMywzNDI1NiwzNDI2MSwzNDI2OSwzNDI3NywzNDI2OCwzNDI5NywzNDMxNCwzNDMyMywzNDMxNSwzNDMwMiwzNDI5OCwzNDMxMCwzNDMzOCwzNDMzMCwzNDM1MiwzNDM2NywzNDM4MSwyMDA1MywzNDM4OCwzNDM5OSwzNDQwNywzNDQxNywzNDQ1MSwzNDQ2NywzNDQ3MywzNDQ3''@;'; put 'put ''NCwzNDQ0MywzNDQ0NCwzNDQ4NiwzNDQ3OSwzNDUwMCwzNDUwMiwzNDQ4MCwzNDUwNSwzNDg1MSwzNDQ3NSwzNDUxNiwzNDUyNiwzNDUzNywzNDU0MCwzNDUyNywzNDUyMywzNDU0MywzNDU3OCwzNDU2NiwzNDU2OCwzNDU2MCwzNDU2MywzNDU1NSwzNDU3NywzNDU2OSwzNDU3MywzNDU1Mywz''@;'; put 'put ''NDU3MCwzNDYxMiwzNDYyMywzNDYxNSwzNDYxOSwzNDU5NywzNDYwMSwzNDU4NiwzNDY1NiwzNDY1NSwzNDY4MCwzNDYzNiwzNDYzOCwzNDY3NiwzNDY0NywzNDY2NCwzNDY3MCwzNDY0OSwzNDY0MywzNDY1OSwzNDY2NiwzNDgyMSwzNDcyMiwzNDcxOSwzNDY5MCwzNDczNSwzNDc2MywzNDc0''@;'; put 'put ''OSwzNDc1MiwzNDc2OCwzODYxNCwzNDczMSwzNDc1NiwzNDczOSwzNDc1OSwzNDc1OCwzNDc0NywzNDc5OSwzNDgwMiwzNDc4NCwzNDgzMSwzNDgyOSwzNDgxNCwzNDgwNiwzNDgwNywzNDgzMCwzNDc3MCwzNDgzMywzNDgzOCwzNDgzNywzNDg1MCwzNDg0OSwzNDg2NSwzNDg3MCwzNDg3Mywz''@;'; put 'put ''NDg1NSwzNDg3NSwzNDg4NCwzNDg4MiwzNDg5OCwzNDkwNSwzNDkxMCwzNDkxNCwzNDkyMywzNDk0NSwzNDk0MiwzNDk3NCwzNDkzMywzNDk0MSwzNDk5NywzNDkzMCwzNDk0NiwzNDk2NywzNDk2MiwzNDk5MCwzNDk2OSwzNDk3OCwzNDk1NywzNDk4MCwzNDk5MiwzNTAwNywzNDk5MywzNTAx''@;'; put 'put ''MSwzNTAxMiwzNTAyOCwzNTAzMiwzNTAzMywzNTAzNywzNTA2NSwzNTA3NCwzNTA2OCwzNTA2MCwzNTA0OCwzNTA1OCwzNTA3NiwzNTA4NCwzNTA4MiwzNTA5MSwzNTEzOSwzNTEwMiwzNTEwOSwzNTExNCwzNTExNSwzNTEzNywzNTE0MCwzNTEzMSwzNTEyNiwzNTEyOCwzNTE0OCwzNTEwMSwz''@;'; put 'put ''NTE2OCwzNTE2NiwzNTE3NCwzNTE3MiwzNTE4MSwzNTE3OCwzNTE4MywzNTE4OCwzNTE5MSwzNTE5OCwzNTIwMywzNTIwOCwzNTIxMCwzNTIxOSwzNTIyNCwzNTIzMywzNTI0MSwzNTIzOCwzNTI0NCwzNTI0NywzNTI1MCwzNTI1OCwzNTI2MSwzNTI2MywzNTI2NCwzNTI5MCwzNTI5MiwzNTI5''@;'; put 'put ''MywzNTMwMywzNTMxNiwzNTMyMCwzNTMzMSwzNTM1MCwzNTM0NCwzNTM0MCwzNTM1NSwzNTM1NywzNTM2NSwzNTM4MiwzNTM5MywzNTQxOSwzNTQxMCwzNTM5OCwzNTQwMCwzNTQ1MiwzNTQzNywzNTQzNiwzNTQyNiwzNTQ2MSwzNTQ1OCwzNTQ2MCwzNTQ5NiwzNTQ4OSwzNTQ3MywzNTQ5Mywz''@;'; put 'put ''NTQ5NCwzNTQ4MiwzNTQ5MSwzNTUyNCwzNTUzMywzNTUyMiwzNTU0NiwzNTU2MywzNTU3MSwzNTU1OSwzNTU1NiwzNTU2OSwzNTYwNCwzNTU1MiwzNTU1NCwzNTU3NSwzNTU1MCwzNTU0NywzNTU5NiwzNTU5MSwzNTYxMCwzNTU1MywzNTYwNiwzNTYwMCwzNTYwNywzNTYxNiwzNTYzNSwzODgy''@;'; put 'put ''NywzNTYyMiwzNTYyNywzNTY0NiwzNTYyNCwzNTY0OSwzNTY2MCwzNTY2MywzNTY2MiwzNTY1NywzNTY3MCwzNTY3NSwzNTY3NCwzNTY5MSwzNTY3OSwzNTY5MiwzNTY5NSwzNTcwMCwzNTcwOSwzNTcxMiwzNTcyNCwzNTcyNiwzNTczMCwzNTczMSwzNTczNCwzNTczNywzNTczOCwzNTg5OCwz''@;'; put 'put ''NTkwNSwzNTkwMywzNTkxMiwzNTkxNiwzNTkxOCwzNTkyMCwzNTkyNSwzNTkzOCwzNTk0OCwzNTk2MCwzNTk2MiwzNTk3MCwzNTk3NywzNTk3MywzNTk3OCwzNTk4MSwzNTk4MiwzNTk4OCwzNTk2NCwzNTk5MiwyNTExNywzNjAxMywzNjAxMCwzNjAyOSwzNjAxOCwzNjAxOSwzNjAxNCwzNjAy''@;'; put 'put ''MiwzNjA0MCwzNjAzMywzNjA2OCwzNjA2NywzNjA1OCwzNjA5MywzNjA5MCwzNjA5MSwzNjEwMCwzNjEwMSwzNjEwNiwzNjEwMywzNjExMSwzNjEwOSwzNjExMiw0MDc4MiwzNjExNSwzNjA0NSwzNjExNiwzNjExOCwzNjE5OSwzNjIwNSwzNjIwOSwzNjIxMSwzNjIyNSwzNjI0OSwzNjI5MCwz''@;'; put 'put ''NjI4NiwzNjI4MiwzNjMwMywzNjMxNCwzNjMxMCwzNjMwMCwzNjMxNSwzNjI5OSwzNjMzMCwzNjMzMSwzNjMxOSwzNjMyMywzNjM0OCwzNjM2MCwzNjM2MSwzNjM1MSwzNjM4MSwzNjM4MiwzNjM2OCwzNjM4MywzNjQxOCwzNjQwNSwzNjQwMCwzNjQwNCwzNjQyNiwzNjQyMywzNjQyNSwzNjQy''@;'; put 'put ''OCwzNjQzMiwzNjQyNCwzNjQ0MSwzNjQ1MiwzNjQ0OCwzNjM5NCwzNjQ1MSwzNjQzNywzNjQ3MCwzNjQ2NiwzNjQ3NiwzNjQ4MSwzNjQ4NywzNjQ4NSwzNjQ4NCwzNjQ5MSwzNjQ5MCwzNjQ5OSwzNjQ5NywzNjUwMCwzNjUwNSwzNjUyMiwzNjUxMywzNjUyNCwzNjUyOCwzNjU1MCwzNjUyOSwz''@;'; put 'put ''NjU0MiwzNjU0OSwzNjU1MiwzNjU1NSwzNjU3MSwzNjU3OSwzNjYwNCwzNjYwMywzNjU4NywzNjYwNiwzNjYxOCwzNjYxMywzNjYyOSwzNjYyNiwzNjYzMywzNjYyNywzNjYzNiwzNjYzOSwzNjYzNSwzNjYyMCwzNjY0NiwzNjY1OSwzNjY2NywzNjY2NSwzNjY3NywzNjY3NCwzNjY3MCwzNjY4''@;'; put 'put ''NCwzNjY4MSwzNjY3OCwzNjY4NiwzNjY5NSwzNjcwMCwzNjcwNiwzNjcwNywzNjcwOCwzNjc2NCwzNjc2NywzNjc3MSwzNjc4MSwzNjc4MywzNjc5MSwzNjgyNiwzNjgzNywzNjgzNCwzNjg0MiwzNjg0NywzNjk5OSwzNjg1MiwzNjg2OSwzNjg1NywzNjg1OCwzNjg4MSwzNjg4NSwzNjg5Nywz''@;'; put 'put ''Njg3NywzNjg5NCwzNjg4NiwzNjg3NSwzNjkwMywzNjkxOCwzNjkxNywzNjkyMSwzNjg1NiwzNjk0MywzNjk0NCwzNjk0NSwzNjk0NiwzNjg3OCwzNjkzNywzNjkyNiwzNjk1MCwzNjk1MiwzNjk1OCwzNjk2OCwzNjk3NSwzNjk4MiwzODU2OCwzNjk3OCwzNjk5NCwzNjk4OSwzNjk5MywzNjk5''@;'; put 'put ''MiwzNzAwMiwzNzAwMSwzNzAwNywzNzAzMiwzNzAzOSwzNzA0MSwzNzA0NSwzNzA5MCwzNzA5MiwyNTE2MCwzNzA4MywzNzEyMiwzNzEzOCwzNzE0NSwzNzE3MCwzNzE2OCwzNzE5NCwzNzIwNiwzNzIwOCwzNzIxOSwzNzIyMSwzNzIyNSwzNzIzNSwzNzIzNCwzNzI1OSwzNzI1NywzNzI1MCwz''@;'; put 'put ''NzI4MiwzNzI5MSwzNzI5NSwzNzI5MCwzNzMwMSwzNzMwMCwzNzMwNiwzNzMxMiwzNzMxMywzNzMyMSwzNzMyMywzNzMyOCwzNzMzNCwzNzM0MywzNzM0NSwzNzMzOSwzNzM3MiwzNzM2NSwzNzM2NiwzNzQwNiwzNzM3NSwzNzM5NiwzNzQyMCwzNzM5NywzNzM5MywzNzQ3MCwzNzQ2MywzNzQ0''@;'; put 'put ''NSwzNzQ0OSwzNzQ3NiwzNzQ0OCwzNzUyNSwzNzQzOSwzNzQ1MSwzNzQ1NiwzNzUzMiwzNzUyNiwzNzUyMywzNzUzMSwzNzQ2NiwzNzU4MywzNzU2MSwzNzU1OSwzNzYwOSwzNzY0NywzNzYyNiwzNzcwMCwzNzY3OCwzNzY1NywzNzY2NiwzNzY1OCwzNzY2NywzNzY5MCwzNzY4NSwzNzY5MSwz''@;'; put 'put ''NzcyNCwzNzcyOCwzNzc1NiwzNzc0MiwzNzcxOCwzNzgwOCwzNzgwNCwzNzgwNSwzNzc4MCwzNzgxNywzNzg0NiwzNzg0NywzNzg2NCwzNzg2MSwzNzg0OCwzNzgyNywzNzg1MywzNzg0MCwzNzgzMiwzNzg2MCwzNzkxNCwzNzkwOCwzNzkwNywzNzg5MSwzNzg5NSwzNzkwNCwzNzk0MiwzNzkz''@;'; put 'put ''MSwzNzk0MSwzNzkyMSwzNzk0NiwzNzk1MywzNzk3MCwzNzk1NiwzNzk3OSwzNzk4NCwzNzk4NiwzNzk4MiwzNzk5NCwzNzQxNywzOGUzLDM4MDA1LDM4MDA3LDM4MDEzLDM3OTc4LDM4MDEyLDM4MDE0LDM4MDE3LDM4MDE1LDM4Mjc0LDM4Mjc5LDM4MjgyLDM4MjkyLDM4Mjk0LDM4Mjk2LDM4''@;'; put 'put ''Mjk3LDM4MzA0LDM4MzEyLDM4MzExLDM4MzE3LDM4MzMyLDM4MzMxLDM4MzI5LDM4MzM0LDM4MzQ2LDI4NjYyLDM4MzM5LDM4MzQ5LDM4MzQ4LDM4MzU3LDM4MzU2LDM4MzU4LDM4MzY0LDM4MzY5LDM4MzczLDM4MzcwLDM4NDMzLDM4NDQwLDM4NDQ2LDM4NDQ3LDM4NDY2LDM4NDc2LDM4NDc5''@;'; put 'put ''LDM4NDc1LDM4NTE5LDM4NDkyLDM4NDk0LDM4NDkzLDM4NDk1LDM4NTAyLDM4NTE0LDM4NTA4LDM4NTQxLDM4NTUyLDM4NTQ5LDM4NTUxLDM4NTcwLDM4NTY3LDM4NTc3LDM4NTc4LDM4NTc2LDM4NTgwLDM4NTgyLDM4NTg0LDM4NTg1LDM4NjA2LDM4NjAzLDM4NjAxLDM4NjA1LDM1MTQ5LDM4''@;'; put 'put ''NjIwLDM4NjY5LDM4NjEzLDM4NjQ5LDM4NjYwLDM4NjYyLDM4NjY0LDM4Njc1LDM4NjcwLDM4NjczLDM4NjcxLDM4Njc4LDM4NjgxLDM4NjkyLDM4Njk4LDM4NzA0LDM4NzEzLDM4NzE3LDM4NzE4LDM4NzI0LDM4NzI2LDM4NzI4LDM4NzIyLDM4NzI5LDM4NzQ4LDM4NzUyLDM4NzU2LDM4NzU4''@;'; put 'put ''LDM4NzYwLDIxMjAyLDM4NzYzLDM4NzY5LDM4Nzc3LDM4Nzg5LDM4NzgwLDM4Nzg1LDM4Nzc4LDM4NzkwLDM4Nzk1LDM4Nzk5LDM4ODAwLDM4ODEyLDM4ODI0LDM4ODIyLDM4ODE5LDM4ODM1LDM4ODM2LDM4ODUxLDM4ODU0LDM4ODU2LDM4ODU5LDM4ODc2LDM4ODkzLDQwNzgzLDM4ODk4LDMx''@;'; put 'put ''NDU1LDM4OTAyLDM4OTAxLDM4OTI3LDM4OTI0LDM4OTY4LDM4OTQ4LDM4OTQ1LDM4OTY3LDM4OTczLDM4OTgyLDM4OTkxLDM4OTg3LDM5MDE5LDM5MDIzLDM5MDI0LDM5MDI1LDM5MDI4LDM5MDI3LDM5MDgyLDM5MDg3LDM5MDg5LDM5MDk0LDM5MTA4LDM5MTA3LDM5MTEwLDM5MTQ1LDM5MTQ3''@;'; put 'put ''LDM5MTcxLDM5MTc3LDM5MTg2LDM5MTg4LDM5MTkyLDM5MjAxLDM5MTk3LDM5MTk4LDM5MjA0LDM5MjAwLDM5MjEyLDM5MjE0LDM5MjI5LDM5MjMwLDM5MjM0LDM5MjQxLDM5MjM3LDM5MjQ4LDM5MjQzLDM5MjQ5LDM5MjUwLDM5MjQ0LDM5MjUzLDM5MzE5LDM5MzIwLDM5MzMzLDM5MzQxLDM5''@;'; put 'put ''MzQyLDM5MzU2LDM5MzkxLDM5Mzg3LDM5Mzg5LDM5Mzg0LDM5Mzc3LDM5NDA1LDM5NDA2LDM5NDA5LDM5NDEwLDM5NDE5LDM5NDE2LDM5NDI1LDM5NDM5LDM5NDI5LDM5Mzk0LDM5NDQ5LDM5NDY3LDM5NDc5LDM5NDkzLDM5NDkwLDM5NDg4LDM5NDkxLDM5NDg2LDM5NTA5LDM5NTAxLDM5NTE1''@;'; put 'put ''LDM5NTExLDM5NTE5LDM5NTIyLDM5NTI1LDM5NTI0LDM5NTI5LDM5NTMxLDM5NTMwLDM5NTk3LDM5NjAwLDM5NjEyLDM5NjE2LDM5NjMxLDM5NjMzLDM5NjM1LDM5NjM2LDM5NjQ2LDM5NjQ3LDM5NjUwLDM5NjUxLDM5NjU0LDM5NjYzLDM5NjU5LDM5NjYyLDM5NjY4LDM5NjY1LDM5NjcxLDM5''@;'; put 'put ''Njc1LDM5Njg2LDM5NzA0LDM5NzA2LDM5NzExLDM5NzE0LDM5NzE1LDM5NzE3LDM5NzE5LDM5NzIwLDM5NzIxLDM5NzIyLDM5NzI2LDM5NzI3LDM5NzMwLDM5NzQ4LDM5NzQ3LDM5NzU5LDM5NzU3LDM5NzU4LDM5NzYxLDM5NzY4LDM5Nzk2LDM5ODI3LDM5ODExLDM5ODI1LDM5ODMwLDM5ODMx''@;'; put 'put ''LDM5ODM5LDM5ODQwLDM5ODQ4LDM5ODYwLDM5ODcyLDM5ODgyLDM5ODY1LDM5ODc4LDM5ODg3LDM5ODg5LDM5ODkwLDM5OTA3LDM5OTA2LDM5OTA4LDM5ODkyLDM5OTA1LDM5OTk0LDM5OTIyLDM5OTIxLDM5OTIwLDM5OTU3LDM5OTU2LDM5OTQ1LDM5OTU1LDM5OTQ4LDM5OTQyLDM5OTQ0LDM5''@;'; put 'put ''OTU0LDM5OTQ2LDM5OTQwLDM5OTgyLDM5OTYzLDM5OTczLDM5OTcyLDM5OTY5LDM5OTg0LDQwMDA3LDM5OTg2LDQwMDA2LDM5OTk4LDQwMDI2LDQwMDMyLDQwMDM5LDQwMDU0LDQwMDU2LDQwMTY3LDQwMTcyLDQwMTc2LDQwMjAxLDQwMjAwLDQwMTcxLDQwMTk1LDQwMTk4LDQwMjM0LDQwMjMw''@;'; put 'put ''LDQwMzY3LDQwMjI3LDQwMjIzLDQwMjYwLDQwMjEzLDQwMjEwLDQwMjU3LDQwMjU1LDQwMjU0LDQwMjYyLDQwMjY0LDQwMjg1LDQwMjg2LDQwMjkyLDQwMjczLDQwMjcyLDQwMjgxLDQwMzA2LDQwMzI5LDQwMzI3LDQwMzYzLDQwMzAzLDQwMzE0LDQwMzQ2LDQwMzU2LDQwMzYxLDQwMzcwLDQw''@;'; put 'put ''Mzg4LDQwMzg1LDQwMzc5LDQwMzc2LDQwMzc4LDQwMzkwLDQwMzk5LDQwMzg2LDQwNDA5LDQwNDAzLDQwNDQwLDQwNDIyLDQwNDI5LDQwNDMxLDQwNDQ1LDQwNDc0LDQwNDc1LDQwNDc4LDQwNTY1LDQwNTY5LDQwNTczLDQwNTc3LDQwNTg0LDQwNTg3LDQwNTg4LDQwNTk0LDQwNTk3LDQwNTkz''@;'; put 'put ''LDQwNjA1LDQwNjEzLDQwNjE3LDQwNjMyLDQwNjE4LDQwNjIxLDM4NzUzLDQwNjUyLDQwNjU0LDQwNjU1LDQwNjU2LDQwNjYwLDQwNjY4LDQwNjcwLDQwNjY5LDQwNjcyLDQwNjc3LDQwNjgwLDQwNjg3LDQwNjkyLDQwNjk0LDQwNjk1LDQwNjk3LDQwNjk5LDQwNzAwLDQwNzAxLDQwNzExLDQw''@;'; put 'put ''NzEyLDMwMzkxLDQwNzI1LDQwNzM3LDQwNzQ4LDQwNzY2LDQwNzc4LDQwNzg2LDQwNzg4LDQwODAzLDQwNzk5LDQwODAwLDQwODAxLDQwODA2LDQwODA3LDQwODEyLDQwODEwLDQwODIzLDQwODE4LDQwODIyLDQwODUzLDQwODYwLDQwODY0LDIyNTc1LDI3MDc5LDM2OTUzLDI5Nzk2LDIwOTU2''@;'; put 'put ''LDI5MDgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; 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 ''bCxudWxsLG51bGwsbnVsbCwzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0''@;'; put 'put ''NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2MiwyMTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwy''@;'; put 'put ''MTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcx''@;'; put 'put ''OCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwyNDg4NywyNDg4MCwyNDk4NCwyNTEwNywy''@;'; put 'put ''NTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcw''@;'; put 'put ''NiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwyODAzOSwyODAxNSwyODA1NCwyODA3Niwy''@;'; put 'put ''ODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEyMSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3''@;'; put 'put ''Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2NDAyMywzMDUzNCwyMTE2NywzMDc1Mywz''@;'; put 'put ''MDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2''@;'; put 'put ''MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwzNjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2''@;'; put 'put ''NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0''@;'; put 'put ''MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwzNzg4MCwzNzkzNywzNzk1NywzNzk2MCwz''@;'; put 'put ''ODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5NCwzOTgyMywzOTg1NywzOTg2NywzOTkz''@;'; put 'put ''Niw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw2NTUwNiw2NTUwOCw2NTI4Nyw2NTI4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw2NTUw''@;'; put 'put ''Niw2NTUwOCw2NTI4Nyw2NTI4MiwxMjg0OSw4NDcwLDg0ODEsODc1NywzMjM5NCwzNTEwMCwzNzcwNCwzNzUxMiwzNDAxMiwyMDQyNSwyODg1OSwyNjE2MSwyNjgyNCwzNzYyNSwyNjM2MywyNDM4OSwyMDAwOCwyMDE5MywyMDIyMCwyMDIyNCwyMDIyNywyMDI4MSwyMDMxMCwyMDM3MCwyMDM2''@;'; put 'put ''MiwyMDM3OCwyMDM3MiwyMDQyOSwyMDU0NCwyMDUxNCwyMDQ3OSwyMDUxMCwyMDU1MCwyMDU5MiwyMDU0NiwyMDYyOCwyMDcyNCwyMDY5NiwyMDgxMCwyMDgzNiwyMDg5MywyMDkyNiwyMDk3MiwyMTAxMywyMTE0OCwyMTE1OCwyMTE4NCwyMTIxMSwyMTI0OCwyMTI1NSwyMTI4NCwyMTM2Miwy''@;'; put 'put ''MTM5NSwyMTQyNiwyMTQ2OSw2NDAxNCwyMTY2MCwyMTY0MiwyMTY3MywyMTc1OSwyMTg5NCwyMjM2MSwyMjM3MywyMjQ0NCwyMjQ3MiwyMjQ3MSw2NDAxNSw2NDAxNiwyMjY4NiwyMjcwNiwyMjc5NSwyMjg2NywyMjg3NSwyMjg3NywyMjg4MywyMjk0OCwyMjk3MCwyMzM4MiwyMzQ4OCwyOTk5''@;'; put 'put ''OSwyMzUxMiwyMzUzMiwyMzU4MiwyMzcxOCwyMzczOCwyMzc5NywyMzg0NywyMzg5MSw2NDAxNywyMzg3NCwyMzkxNywyMzk5MiwyMzk5MywyNDAxNiwyNDM1MywyNDM3MiwyNDQyMywyNDUwMywyNDU0MiwyNDY2OSwyNDcwOSwyNDcxNCwyNDc5OCwyNDc4OSwyNDg2NCwyNDgxOCwyNDg0OSwy''@;'; put 'put ''NDg4NywyNDg4MCwyNDk4NCwyNTEwNywyNTI1NCwyNTU4OSwyNTY5NiwyNTc1NywyNTgwNiwyNTkzNCwyNjExMiwyNjEzMywyNjE3MSwyNjEyMSwyNjE1OCwyNjE0MiwyNjE0OCwyNjIxMywyNjE5OSwyNjIwMSw2NDAxOCwyNjIyNywyNjI2NSwyNjI3MiwyNjI5MCwyNjMwMywyNjM2MiwyNjM4''@;'; put 'put ''Miw2Mzc4NSwyNjQ3MCwyNjU1NSwyNjcwNiwyNjU2MCwyNjYyNSwyNjY5MiwyNjgzMSw2NDAxOSwyNjk4NCw2NDAyMCwyNzAzMiwyNzEwNiwyNzE4NCwyNzI0MywyNzIwNiwyNzI1MSwyNzI2MiwyNzM2MiwyNzM2NCwyNzYwNiwyNzcxMSwyNzc0MCwyNzc4MiwyNzc1OSwyNzg2NiwyNzkwOCwy''@;'; put 'put ''ODAzOSwyODAxNSwyODA1NCwyODA3NiwyODExMSwyODE1MiwyODE0NiwyODE1NiwyODIxNywyODI1MiwyODE5OSwyODIyMCwyODM1MSwyODU1MiwyODU5NywyODY2MSwyODY3NywyODY3OSwyODcxMiwyODgwNSwyODg0MywyODk0MywyODkzMiwyOTAyMCwyODk5OCwyODk5OSw2NDAyMSwyOTEy''@;'; put 'put ''MSwyOTE4MiwyOTM2MSwyOTM3NCwyOTQ3Niw2NDAyMiwyOTU1OSwyOTYyOSwyOTY0MSwyOTY1NCwyOTY2NywyOTY1MCwyOTcwMywyOTY4NSwyOTczNCwyOTczOCwyOTczNywyOTc0MiwyOTc5NCwyOTgzMywyOTg1NSwyOTk1MywzMDA2MywzMDMzOCwzMDM2NCwzMDM2NiwzMDM2MywzMDM3NCw2''@;'; put 'put ''NDAyMywzMDUzNCwyMTE2NywzMDc1MywzMDc5OCwzMDgyMCwzMDg0MiwzMTAyNCw2NDAyNCw2NDAyNSw2NDAyNiwzMTEyNCw2NDAyNywzMTEzMSwzMTQ0MSwzMTQ2Myw2NDAyOCwzMTQ2NywzMTY0Niw2NDAyOSwzMjA3MiwzMjA5MiwzMjE4MywzMjE2MCwzMjIxNCwzMjMzOCwzMjU4MywzMjY3''@;'; put 'put ''Myw2NDAzMCwzMzUzNywzMzYzNCwzMzY2MywzMzczNSwzMzc4MiwzMzg2NCwzMzk3MiwzNDEzMSwzNDEzNywzNDE1NSw2NDAzMSwzNDIyNCw2NDAzMiw2NDAzMywzNDgyMywzNTA2MSwzNTM0NiwzNTM4MywzNTQ0OSwzNTQ5NSwzNTUxOCwzNTU1MSw2NDAzNCwzNTU3NCwzNTY2NywzNTcxMSwz''@;'; put 'put ''NjA4MCwzNjA4NCwzNjExNCwzNjIxNCw2NDAzNSwzNjU1OSw2NDAzNiw2NDAzNywzNjk2NywzNzA4Niw2NDAzOCwzNzE0MSwzNzE1OSwzNzMzOCwzNzMzNSwzNzM0MiwzNzM1NywzNzM1OCwzNzM0OCwzNzM0OSwzNzM4MiwzNzM5MiwzNzM4NiwzNzQzNCwzNzQ0MCwzNzQzNiwzNzQ1NCwzNzQ2''@;'; put 'put ''NSwzNzQ1NywzNzQzMywzNzQ3OSwzNzU0MywzNzQ5NSwzNzQ5NiwzNzYwNywzNzU5MSwzNzU5MywzNzU4NCw2NDAzOSwzNzU4OSwzNzYwMCwzNzU4NywzNzY2OSwzNzY2NSwzNzYyNyw2NDA0MCwzNzY2MiwzNzYzMSwzNzY2MSwzNzYzNCwzNzc0NCwzNzcxOSwzNzc5NiwzNzgzMCwzNzg1NCwz''@;'; put 'put ''Nzg4MCwzNzkzNywzNzk1NywzNzk2MCwzODI5MCw2Mzk2NCw2NDA0MSwzODU1NywzODU3NSwzODcwNywzODcxNSwzODcyMywzODczMywzODczNSwzODczNywzODc0MSwzODk5OSwzOTAxMyw2NDA0Miw2NDA0MywzOTIwNyw2NDA0NCwzOTMyNiwzOTUwMiwzOTY0MSwzOTY0NCwzOTc5NywzOTc5''@;'; put 'put ''NCwzOTgyMywzOTg1NywzOTg2NywzOTkzNiw0MDMwNCw0MDI5OSw2NDA0NSw0MDQ3Myw0MDY1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGppczAyMTI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDcyOCw3MTEsMTg0LDcyOSw3MzMsMTc1LDczMSw3MzAsNjUzNzQsOTAwLDkwMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYxLDE2NiwxOTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE4NiwxNzAsMTY5LDE3NCw4NDgyLDE2NCw4NDcwLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MDIsOTA0LDkwNSw5MDYsOTM4LG51bGwsOTA4LG51''@;'; put 'put ''bGwsOTEwLDkzOSxudWxsLDkxMSxudWxsLG51bGwsbnVsbCxudWxsLDk0MCw5NDEsOTQyLDk0Myw5NzAsOTEyLDk3Miw5NjIsOTczLDk3MSw5NDQsOTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzOCwxMDM5LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExOCwxMTE5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk4LDI3MixudWxsLDI5NCxudWxsLDMwNixudWxsLDMyMSwzMTksbnVsbCwzMzAsMjE2LDMzOCxudWxsLDM1OCwyMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIyLDMyMCwzMjksMzMxLDI0OCwzMzksMjIzLDM1OSwyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTMs''@;'; put 'put ''MTkyLDE5NiwxOTQsMjU4LDQ2MSwyNTYsMjYwLDE5NywxOTUsMjYyLDI2NCwyNjgsMTk5LDI2NiwyNzAsMjAxLDIwMCwyMDMsMjAyLDI4MiwyNzgsMjc0LDI4MCxudWxsLDI4NCwyODYsMjkwLDI4OCwyOTIsMjA1LDIwNCwyMDcsMjA2LDQ2MywzMDQsMjk4LDMwMiwyOTYsMzA4LDMxMCwzMTMs''@;'; put 'put ''MzE3LDMxNSwzMjMsMzI3LDMyNSwyMDksMjExLDIxMCwyMTQsMjEyLDQ2NSwzMzYsMzMyLDIxMywzNDAsMzQ0LDM0MiwzNDYsMzQ4LDM1MiwzNTAsMzU2LDM1NCwyMTgsMjE3LDIyMCwyMTksMzY0LDQ2NywzNjgsMzYyLDM3MCwzNjYsMzYwLDQ3MSw0NzUsNDczLDQ2OSwzNzIsMjIxLDM3Niwz''@;'; put 'put ''NzQsMzc3LDM4MSwzNzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMjUsMjI0LDIyOCwyMjYsMjU5LDQ2MiwyNTcsMjYxLDIyOSwyMjcsMjYzLDI2NSwyNjksMjMxLDI2NywyNzEsMjMzLDIzMiwyMzUsMjM0LDI4MywyNzksMjc1LDI4MSw1MDEsMjg1LDI4NyxudWxsLDI4''@;'; put 'put ''OSwyOTMsMjM3LDIzNiwyMzksMjM4LDQ2NCxudWxsLDI5OSwzMDMsMjk3LDMwOSwzMTEsMzE0LDMxOCwzMTYsMzI0LDMyOCwzMjYsMjQxLDI0MywyNDIsMjQ2LDI0NCw0NjYsMzM3LDMzMywyNDUsMzQxLDM0NSwzNDMsMzQ3LDM0OSwzNTMsMzUxLDM1NywzNTUsMjUwLDI0OSwyNTIsMjUxLDM2''@;'; put 'put ''NSw0NjgsMzY5LDM2MywzNzEsMzY3LDM2MSw0NzIsNDc2LDQ3NCw0NzAsMzczLDI1MywyNTUsMzc1LDM3OCwzODIsMzgwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; 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 ''bnVsbCwxOTk3MCwxOTk3MiwxOTk3MywxOTk4MCwxOTk4NiwxOTk5OSwyMDAwMywyMDAwNCwyMDAwOCwyMDAxMSwyMDAxNCwyMDAxNSwyMDAxNiwyMDAyMSwyMDAzMiwyMDAzMywyMDAzNiwyMDAzOSwyMDA0OSwyMDA1OCwyMDA2MCwyMDA2NywyMDA3MiwyMDA3MywyMDA4NCwyMDA4NSwyMDA4''@;'; put 'put ''OSwyMDA5NSwyMDEwOSwyMDExOCwyMDExOSwyMDEyNSwyMDE0MywyMDE1MywyMDE2MywyMDE3NiwyMDE4NiwyMDE4NywyMDE5MiwyMDE5MywyMDE5NCwyMDIwMCwyMDIwNywyMDIwOSwyMDIxMSwyMDIxMywyMDIyMSwyMDIyMiwyMDIyMywyMDIyNCwyMDIyNiwyMDIyNywyMDIzMiwyMDIzNSwy''@;'; put 'put ''MDIzNiwyMDI0MiwyMDI0NSwyMDI0NiwyMDI0NywyMDI0OSwyMDI3MCwyMDI3MywyMDMyMCwyMDI3NSwyMDI3NywyMDI3OSwyMDI4MSwyMDI4MywyMDI4NiwyMDI4OCwyMDI5MCwyMDI5NiwyMDI5NywyMDI5OSwyMDMwMCwyMDMwNiwyMDMwOCwyMDMxMCwyMDMxMiwyMDMxOSwyMDMyMywyMDMz''@;'; put 'put ''MCwyMDMzMiwyMDMzNCwyMDMzNywyMDM0MywyMDM0NCwyMDM0NSwyMDM0NiwyMDM0OSwyMDM1MCwyMDM1MywyMDM1NCwyMDM1NiwyMDM1NywyMDM2MSwyMDM2MiwyMDM2NCwyMDM2NiwyMDM2OCwyMDM3MCwyMDM3MSwyMDM3MiwyMDM3NSwyMDM3NywyMDM3OCwyMDM4MiwyMDM4MywyMDQwMiwy''@;'; put 'put ''MDQwNywyMDQwOSwyMDQxMSwyMDQxMiwyMDQxMywyMDQxNCwyMDQxNiwyMDQxNywyMDQyMSwyMDQyMiwyMDQyNCwyMDQyNSwyMDQyNywyMDQyOCwyMDQyOSwyMDQzMSwyMDQzNCwyMDQ0NCwyMDQ0OCwyMDQ1MCwyMDQ2NCwyMDQ2NiwyMDQ3NiwyMDQ3NywyMDQ3OSwyMDQ4MCwyMDQ4MSwyMDQ4''@;'; put 'put ''NCwyMDQ4NywyMDQ5MCwyMDQ5MiwyMDQ5NCwyMDQ5NiwyMDQ5OSwyMDUwMywyMDUwNCwyMDUwNywyMDUwOCwyMDUwOSwyMDUxMCwyMDUxNCwyMDUxOSwyMDUyNiwyMDUyOCwyMDUzMCwyMDUzMSwyMDUzMywyMDU0NCwyMDU0NSwyMDU0NiwyMDU0OSwyMDU1MCwyMDU1NCwyMDU1NiwyMDU1OCwy''@;'; put 'put ''MDU2MSwyMDU2MiwyMDU2MywyMDU2NywyMDU2OSwyMDU3NSwyMDU3NiwyMDU3OCwyMDU3OSwyMDU4MiwyMDU4MywyMDU4NiwyMDU4OSwyMDU5MiwyMDU5MywyMDUzOSwyMDYwOSwyMDYxMSwyMDYxMiwyMDYxNCwyMDYxOCwyMDYyMiwyMDYyMywyMDYyNCwyMDYyNiwyMDYyNywyMDYyOCwyMDYz''@;'; put 'put ''MCwyMDYzNSwyMDYzNiwyMDYzOCwyMDYzOSwyMDY0MCwyMDY0MSwyMDY0MiwyMDY1MCwyMDY1NSwyMDY1NiwyMDY2NSwyMDY2NiwyMDY2OSwyMDY3MiwyMDY3NSwyMDY3NiwyMDY3OSwyMDY4NCwyMDY4NiwyMDY4OCwyMDY5MSwyMDY5MiwyMDY5NiwyMDcwMCwyMDcwMSwyMDcwMywyMDcwNiwy''@;'; put 'put ''MDcwOCwyMDcxMCwyMDcxMiwyMDcxMywyMDcxOSwyMDcyMSwyMDcyNiwyMDczMCwyMDczNCwyMDczOSwyMDc0MiwyMDc0MywyMDc0NCwyMDc0NywyMDc0OCwyMDc0OSwyMDc1MCwyMDcyMiwyMDc1MiwyMDc1OSwyMDc2MSwyMDc2MywyMDc2NCwyMDc2NSwyMDc2NiwyMDc3MSwyMDc3NSwyMDc3''@;'; put 'put ''NiwyMDc4MCwyMDc4MSwyMDc4MywyMDc4NSwyMDc4NywyMDc4OCwyMDc4OSwyMDc5MiwyMDc5MywyMDgwMiwyMDgxMCwyMDgxNSwyMDgxOSwyMDgyMSwyMDgyMywyMDgyNCwyMDgzMSwyMDgzNiwyMDgzOCwyMDg2MiwyMDg2NywyMDg2OCwyMDg3NSwyMDg3OCwyMDg4OCwyMDg5MywyMDg5Nywy''@;'; put 'put ''MDg5OSwyMDkwOSwyMDkyMCwyMDkyMiwyMDkyNCwyMDkyNiwyMDkyNywyMDkzMCwyMDkzNiwyMDk0MywyMDk0NSwyMDk0NiwyMDk0NywyMDk0OSwyMDk1MiwyMDk1OCwyMDk2MiwyMDk2NSwyMDk3NCwyMDk3OCwyMDk3OSwyMDk4MCwyMDk4MywyMDk5MywyMDk5NCwyMDk5NywyMTAxMCwyMTAx''@;'; put 'put ''MSwyMTAxMywyMTAxNCwyMTAxNiwyMTAyNiwyMTAzMiwyMTA0MSwyMTA0MiwyMTA0NSwyMTA1MiwyMTA2MSwyMTA2NSwyMTA3NywyMTA3OSwyMTA4MCwyMTA4MiwyMTA4NCwyMTA4NywyMTA4OCwyMTA4OSwyMTA5NCwyMTEwMiwyMTExMSwyMTExMiwyMTExMywyMTEyMCwyMTEyMiwyMTEyNSwy''@;'; put 'put ''MTEzMCwyMTEzMiwyMTEzOSwyMTE0MSwyMTE0MiwyMTE0MywyMTE0NCwyMTE0NiwyMTE0OCwyMTE1NiwyMTE1NywyMTE1OCwyMTE1OSwyMTE2NywyMTE2OCwyMTE3NCwyMTE3NSwyMTE3NiwyMTE3OCwyMTE3OSwyMTE4MSwyMTE4NCwyMTE4OCwyMTE5MCwyMTE5MiwyMTE5NiwyMTE5OSwyMTIw''@;'; put 'put ''MSwyMTIwNCwyMTIwNiwyMTIxMSwyMTIxMiwyMTIxNywyMTIyMSwyMTIyNCwyMTIyNSwyMTIyNiwyMTIyOCwyMTIzMiwyMTIzMywyMTIzNiwyMTIzOCwyMTIzOSwyMTI0OCwyMTI1MSwyMTI1OCwyMTI1OSwyMTI2MCwyMTI2NSwyMTI2NywyMTI3MiwyMTI3NSwyMTI3NiwyMTI3OCwyMTI3OSwy''@;'; put 'put ''MTI4NSwyMTI4NywyMTI4OCwyMTI4OSwyMTI5MSwyMTI5MiwyMTI5MywyMTI5NiwyMTI5OCwyMTMwMSwyMTMwOCwyMTMwOSwyMTMxMCwyMTMxNCwyMTMyNCwyMTMyMywyMTMzNywyMTMzOSwyMTM0NSwyMTM0NywyMTM0OSwyMTM1NiwyMTM1NywyMTM2MiwyMTM2OSwyMTM3NCwyMTM3OSwyMTM4''@;'; put 'put ''MywyMTM4NCwyMTM5MCwyMTM5NSwyMTM5NiwyMTQwMSwyMTQwNSwyMTQwOSwyMTQxMiwyMTQxOCwyMTQxOSwyMTQyMywyMTQyNiwyMTQyOCwyMTQyOSwyMTQzMSwyMTQzMiwyMTQzNCwyMTQzNywyMTQ0MCwyMTQ0NSwyMTQ1NSwyMTQ1OCwyMTQ1OSwyMTQ2MSwyMTQ2NiwyMTQ2OSwyMTQ3MCwy''@;'; put 'put ''MTQ3MiwyMTQ3OCwyMTQ3OSwyMTQ5MywyMTUwNiwyMTUyMywyMTUzMCwyMTUzNywyMTU0MywyMTU0NCwyMTU0NiwyMTU1MSwyMTU1MywyMTU1NiwyMTU1NywyMTU3MSwyMTU3MiwyMTU3NSwyMTU4MSwyMTU4MywyMTU5OCwyMTYwMiwyMTYwNCwyMTYwNiwyMTYwNywyMTYwOSwyMTYxMSwyMTYx''@;'; put 'put ''MywyMTYxNCwyMTYyMCwyMTYzMSwyMTYzMywyMTYzNSwyMTYzNywyMTY0MCwyMTY0MSwyMTY0NSwyMTY0OSwyMTY1MywyMTY1NCwyMTY2MCwyMTY2MywyMTY2NSwyMTY3MCwyMTY3MSwyMTY3MywyMTY3NCwyMTY3NywyMTY3OCwyMTY4MSwyMTY4NywyMTY4OSwyMTY5MCwyMTY5MSwyMTY5NSwy''@;'; put 'put ''MTcwMiwyMTcwNiwyMTcwOSwyMTcxMCwyMTcyOCwyMTczOCwyMTc0MCwyMTc0MywyMTc1MCwyMTc1NiwyMTc1OCwyMTc1OSwyMTc2MCwyMTc2MSwyMTc2NSwyMTc2OCwyMTc2OSwyMTc3MiwyMTc3MywyMTc3NCwyMTc4MSwyMTgwMiwyMTgwMywyMTgxMCwyMTgxMywyMTgxNCwyMTgxOSwyMTgy''@;'; put 'put ''MCwyMTgyMSwyMTgyNSwyMTgzMSwyMTgzMywyMTgzNCwyMTgzNywyMTg0MCwyMTg0MSwyMTg0OCwyMTg1MCwyMTg1MSwyMTg1NCwyMTg1NiwyMTg1NywyMTg2MCwyMTg2MiwyMTg4NywyMTg4OSwyMTg5MCwyMTg5NCwyMTg5NiwyMTkwMiwyMTkwMywyMTkwNSwyMTkwNiwyMTkwNywyMTkwOCwy''@;'; put 'put ''MTkxMSwyMTkyMywyMTkyNCwyMTkzMywyMTkzOCwyMTk1MSwyMTk1MywyMTk1NSwyMTk1OCwyMTk2MSwyMTk2MywyMTk2NCwyMTk2NiwyMTk2OSwyMTk3MCwyMTk3MSwyMTk3NSwyMTk3NiwyMTk3OSwyMTk4MiwyMTk4NiwyMTk5MywyMjAwNiwyMjAxNSwyMjAyMSwyMjAyNCwyMjAyNiwyMjAy''@;'; put 'put ''OSwyMjAzMCwyMjAzMSwyMjAzMiwyMjAzMywyMjAzNCwyMjA0MSwyMjA2MCwyMjA2NCwyMjA2NywyMjA2OSwyMjA3MSwyMjA3MywyMjA3NSwyMjA3NiwyMjA3NywyMjA3OSwyMjA4MCwyMjA4MSwyMjA4MywyMjA4NCwyMjA4NiwyMjA4OSwyMjA5MSwyMjA5MywyMjA5NSwyMjEwMCwyMjExMCwy''@;'; put 'put ''MjExMiwyMjExMywyMjExNCwyMjExNSwyMjExOCwyMjEyMSwyMjEyNSwyMjEyNywyMjEyOSwyMjEzMCwyMjEzMywyMjE0OCwyMjE0OSwyMjE1MiwyMjE1NSwyMjE1NiwyMjE2NSwyMjE2OSwyMjE3MCwyMjE3MywyMjE3NCwyMjE3NSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NywyMjE4''@;'; put 'put ''OCwyMjE4OSwyMjE5MywyMjE5NSwyMjE5OSwyMjIwNiwyMjIxMywyMjIxNywyMjIxOCwyMjIxOSwyMjIyMywyMjIyNCwyMjIyMCwyMjIyMSwyMjIzMywyMjIzNiwyMjIzNywyMjIzOSwyMjI0MSwyMjI0NCwyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI1NywyMjI1MSwyMjI1MywyMjI2Miwy''@;'; put 'put ''MjI2MywyMjI3MywyMjI3NCwyMjI3OSwyMjI4MiwyMjI4NCwyMjI4OSwyMjI5MywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwNCwyMjMwNiwyMjMwNywyMjMwOCwyMjMwOSwyMjMxMywyMjMxNCwyMjMxNiwyMjMxOCwyMjMxOSwyMjMyMywyMjMyNCwyMjMzMywyMjMzNCwyMjMzNSwyMjM0MSwyMjM0''@;'; put 'put ''MiwyMjM0OCwyMjM0OSwyMjM1NCwyMjM3MCwyMjM3MywyMjM3NSwyMjM3NiwyMjM3OSwyMjM4MSwyMjM4MiwyMjM4MywyMjM4NCwyMjM4NSwyMjM4NywyMjM4OCwyMjM4OSwyMjM5MSwyMjM5MywyMjM5NCwyMjM5NSwyMjM5NiwyMjM5OCwyMjQwMSwyMjQwMywyMjQxMiwyMjQyMCwyMjQyMywy''@;'; put 'put ''MjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzMywyMjQyMSwyMjQzOSwyMjQ0MCwyMjQ0MSwyMjQ0NCwyMjQ1NiwyMjQ2MSwyMjQ3MSwyMjQ3MiwyMjQ3NiwyMjQ3OSwyMjQ4NSwyMjQ5MywyMjQ5NCwyMjUwMCwyMjUwMiwyMjUwMywyMjUwNSwyMjUwOSwyMjUxMiwyMjUx''@;'; put 'put ''NywyMjUxOCwyMjUyMCwyMjUyNSwyMjUyNiwyMjUyNywyMjUzMSwyMjUzMiwyMjUzNiwyMjUzNywyMjQ5NywyMjU0MCwyMjU0MSwyMjU1NSwyMjU1OCwyMjU1OSwyMjU2MCwyMjU2NiwyMjU2NywyMjU3MywyMjU3OCwyMjU4NSwyMjU5MSwyMjYwMSwyMjYwNCwyMjYwNSwyMjYwNywyMjYwOCwy''@;'; put 'put ''MjYxMywyMjYyMywyMjYyNSwyMjYyOCwyMjYzMSwyMjYzMiwyMjY0OCwyMjY1MiwyMjY1NSwyMjY1NiwyMjY1NywyMjY2MywyMjY2NCwyMjY2NSwyMjY2NiwyMjY2OCwyMjY2OSwyMjY3MSwyMjY3MiwyMjY3NiwyMjY3OCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5NCwyMjY5NywyMjcw''@;'; put 'put ''NSwyMjcwNiwyMjcyNCwyMjcxNiwyMjcyMiwyMjcyOCwyMjczMywyMjczNCwyMjczNiwyMjczOCwyMjc0MCwyMjc0MiwyMjc0NiwyMjc0OSwyMjc1MywyMjc1NCwyMjc2MSwyMjc3MSwyMjc4OSwyMjc5MCwyMjc5NSwyMjc5NiwyMjgwMiwyMjgwMywyMjgwNCwzNDM2OSwyMjgxMywyMjgxNywy''@;'; put 'put ''MjgxOSwyMjgyMCwyMjgyNCwyMjgzMSwyMjgzMiwyMjgzNSwyMjgzNywyMjgzOCwyMjg0NywyMjg1MSwyMjg1NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg5MSwyMjg5MywyMjg5NSwyMjg5OCwyMjkwMSwyMjkwMiwyMjkwNSwyMjkw''@;'; put 'put ''NywyMjkwOCwyMjkyMywyMjkyNCwyMjkyNiwyMjkzMCwyMjkzMywyMjkzNSwyMjk0MywyMjk0OCwyMjk1MSwyMjk1NywyMjk1OCwyMjk1OSwyMjk2MCwyMjk2MywyMjk2NywyMjk3MCwyMjk3MiwyMjk3NywyMjk3OSwyMjk4MCwyMjk4NCwyMjk4NiwyMjk4OSwyMjk5NCwyMzAwNSwyMzAwNiwy''@;'; put 'put ''MzAwNywyMzAxMSwyMzAxMiwyMzAxNSwyMzAyMiwyMzAyMywyMzAyNSwyMzAyNiwyMzAyOCwyMzAzMSwyMzA0MCwyMzA0NCwyMzA1MiwyMzA1MywyMzA1NCwyMzA1OCwyMzA1OSwyMzA3MCwyMzA3NSwyMzA3NiwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4NSwyMzA4OCwyMzEwOCwyMzEwOSwyMzEx''@;'; put 'put ''MSwyMzExMiwyMzExNiwyMzEyMCwyMzEyNSwyMzEzNCwyMzEzOSwyMzE0MSwyMzE0MywyMzE0OSwyMzE1OSwyMzE2MiwyMzE2MywyMzE2NiwyMzE3OSwyMzE4NCwyMzE4NywyMzE5MCwyMzE5MywyMzE5NiwyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMiwyMzIwNywyMzIxMiwyMzIxNywyMzIxOCwy''@;'; put 'put ''MzIxOSwyMzIyMSwyMzIyNCwyMzIyNiwyMzIyNywyMzIzMSwyMzIzNiwyMzIzOCwyMzI0MCwyMzI0NywyMzI1OCwyMzI2MCwyMzI2NCwyMzI2OSwyMzI3NCwyMzI3OCwyMzI4NSwyMzI4NiwyMzI5MywyMzI5NiwyMzI5NywyMzMwNCwyMzMxOSwyMzM0OCwyMzMyMSwyMzMyMywyMzMyNSwyMzMy''@;'; put 'put ''OSwyMzMzMywyMzM0MSwyMzM1MiwyMzM2MSwyMzM3MSwyMzM3MiwyMzM3OCwyMzM4MiwyMzM5MCwyMzQwMCwyMzQwNiwyMzQwNywyMzQyMCwyMzQyMSwyMzQyMiwyMzQyMywyMzQyNSwyMzQyOCwyMzQzMCwyMzQzNCwyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MywyMzQ0NCwyMzQ0NiwyMzQ2NCwy''@;'; put 'put ''MzQ2NSwyMzQ2OCwyMzQ2OSwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzUwMSwyMzUwMywyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUxNCwyMzUyMCwyMzUzNSwyMzUzNywyMzU0MCwyMzU0OSwyMzU2NCwyMzU3NSwyMzU4MiwyMzU4MywyMzU4''@;'; put 'put ''NywyMzU5MCwyMzU5MywyMzU5NSwyMzU5NiwyMzU5OCwyMzYwMCwyMzYwMiwyMzYwNSwyMzYwNiwyMzY0MSwyMzY0MiwyMzY0NCwyMzY1MCwyMzY1MSwyMzY1NSwyMzY1NiwyMzY1NywyMzY2MSwyMzY2NCwyMzY2OCwyMzY2OSwyMzY3NCwyMzY3NSwyMzY3NiwyMzY3NywyMzY4NywyMzY4OCwy''@;'; put 'put ''MzY5MCwyMzY5NSwyMzY5OCwyMzcwOSwyMzcxMSwyMzcxMiwyMzcxNCwyMzcxNSwyMzcxOCwyMzcyMiwyMzczMCwyMzczMiwyMzczMywyMzczOCwyMzc1MywyMzc1NSwyMzc2MiwyMzc3MywyMzc2NywyMzc5MCwyMzc5MywyMzc5NCwyMzc5NiwyMzgwOSwyMzgxNCwyMzgyMSwyMzgyNiwyMzg1''@;'; put 'put ''MSwyMzg0MywyMzg0NCwyMzg0NiwyMzg0NywyMzg1NywyMzg2MCwyMzg2NSwyMzg2OSwyMzg3MSwyMzg3NCwyMzg3NSwyMzg3OCwyMzg4MCwyMzg5MywyMzg4OSwyMzg5NywyMzg4MiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwOCwyMzkxNCwyMzkxNywyMzkyMCwyMzkyOSwyMzkzMCwy''@;'; put 'put ''MzkzNCwyMzkzNSwyMzkzNywyMzkzOSwyMzk0NCwyMzk0NiwyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk2MSwyMzk2MywyMzk2NywyMzk2OCwyMzk3NSwyMzk3OSwyMzk4NCwyMzk4OCwyMzk5MiwyMzk5MywyNDAwMywyNDAwNywyNDAxMSwyNDAxNiwyNDAxNCwyNDAyNCwyNDAyNSwyNDAz''@;'; put 'put ''MiwyNDAzNiwyNDA0MSwyNDA1NiwyNDA1NywyNDA2NCwyNDA3MSwyNDA3NywyNDA4MiwyNDA4NCwyNDA4NSwyNDA4OCwyNDA5NSwyNDA5NiwyNDExMCwyNDEwNCwyNDExNCwyNDExNywyNDEyNiwyNDEzOSwyNDE0NCwyNDEzNywyNDE0NSwyNDE1MCwyNDE1MiwyNDE1NSwyNDE1NiwyNDE1OCwy''@;'; put 'put ''NDE2OCwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NiwyNDE5MiwyNDIwMywyNDIwNiwyNDIyNiwyNDIyOCwyNDIyOSwyNDIzMiwyNDIzNCwyNDIzNiwyNDI0MSwyNDI0MywyNDI1MywyNDI1NCwyNDI1NSwyNDI2MiwyNDI2OCwyNDI2NywyNDI3MCwyNDI3MywyNDI3NCwyNDI3''@;'; put 'put ''NiwyNDI3NywyNDI4NCwyNDI4NiwyNDI5MywyNDI5OSwyNDMyMiwyNDMyNiwyNDMyNywyNDMyOCwyNDMzNCwyNDM0NSwyNDM0OCwyNDM0OSwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MiwyNDM3NCwyNDM3OSwyNDM4MSwyNDM4Mywy''@;'; put 'put ''NDM4NCwyNDM4OCwyNDM4OSwyNDM5MSwyNDM5NywyNDQwMCwyNDQwNCwyNDQwOCwyNDQxMSwyNDQxNiwyNDQxOSwyNDQyMCwyNDQyMywyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ1NywyNDQ2MSwyNDQ2MywyNDQ3MCwyNDQ3NiwyNDQ3NywyNDQ4''@;'; put 'put ''MiwyNDQ4NywyNDQ5MSwyNDQ4NCwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDUwNCwyNDUxNiwyNDUxOSwyNDUyMCwyNDUyMSwyNDUyMywyNDUyOCwyNDUyOSwyNDUzMCwyNDUzMSwyNDUzMiwyNDU0MiwyNDU0NSwyNDU0NiwyNDU1MiwyNDU1MywyNDU1NCwyNDU1NiwyNDU1NywyNDU1OCwy''@;'; put 'put ''NDU1OSwyNDU2MiwyNDU2MywyNDU2NiwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NiwyNDU4OSwyNDU5NSwyNDU5NiwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNywyNDYxMiwyNDYyMSwyNDYyNywyNDYyOSwyNDY0MCwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MiwyNDY1NywyNDY2MCwyNDY2MiwyNDY2''@;'; put 'put ''MywyNDY2OSwyNDY3MywyNDY3OSwyNDY4OSwyNDcwMiwyNDcwMywyNDcwNiwyNDcxMCwyNDcxMiwyNDcxNCwyNDcxOCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyOCwyNDczMywyNDczNCwyNDczOCwyNDc0MCwyNDc0MSwyNDc0NCwyNDc1MiwyNDc1MywyNDc1OSwyNDc2MywyNDc2NiwyNDc3MCwy''@;'; put 'put ''NDc3MiwyNDc3NiwyNDc3NywyNDc3OCwyNDc3OSwyNDc4MiwyNDc4MywyNDc4OCwyNDc4OSwyNDc5MywyNDc5NSwyNDc5NywyNDc5OCwyNDgwMiwyNDgwNSwyNDgxOCwyNDgyMSwyNDgyNCwyNDgyOCwyNDgyOSwyNDgzNCwyNDgzOSwyNDg0MiwyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1''@;'; put 'put ''MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NywyNDg2MCwyNDg2MiwyNDg2NiwyNDg3NCwyNDg3NSwyNDg4MCwyNDg4MSwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OSwyNDg5NywyNDkwMSwyNDkwMiwyNDkwNSwyNDkyNiwyNDkyOCwyNDk0MCwyNDk0NiwyNDk1MiwyNDk1NSwyNDk1NiwyNDk1OSwy''@;'; put 'put ''NDk2MCwyNDk2MSwyNDk2MywyNDk2NCwyNDk3MSwyNDk3MywyNDk3OCwyNDk3OSwyNDk4MywyNDk4NCwyNDk4OCwyNDk4OSwyNDk5MSwyNDk5MiwyNDk5NywyNWUzLDI1MDAyLDI1MDA1LDI1MDE2LDI1MDE3LDI1MDIwLDI1MDI0LDI1MDI1LDI1MDI2LDI1MDM4LDI1MDM5LDI1MDQ1LDI1MDUy''@;'; put 'put ''LDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU3LDI1MDU4LDI1MDYzLDI1MDY1LDI1MDYxLDI1MDY4LDI1MDY5LDI1MDcxLDI1MDg5LDI1MDkxLDI1MDkyLDI1MDk1LDI1MTA3LDI1MTA5LDI1MTE2LDI1MTIwLDI1MTIyLDI1MTIzLDI1MTI3LDI1MTI5LDI1MTMxLDI1MTQ1LDI1MTQ5LDI1MTU0LDI1''@;'; put 'put ''MTU1LDI1MTU2LDI1MTU4LDI1MTY0LDI1MTY4LDI1MTY5LDI1MTcwLDI1MTcyLDI1MTc0LDI1MTc4LDI1MTgwLDI1MTg4LDI1MTk3LDI1MTk5LDI1MjAzLDI1MjEwLDI1MjEzLDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjU0LDI1MjU2LDI1MjY3LDI1MjcwLDI1MjcxLDI1Mjc0LDI1Mjc4''@;'; put 'put ''LDI1Mjc5LDI1Mjg0LDI1Mjk0LDI1MzAxLDI1MzAyLDI1MzA2LDI1MzIyLDI1MzMwLDI1MzMyLDI1MzQwLDI1MzQxLDI1MzQ3LDI1MzQ4LDI1MzU0LDI1MzU1LDI1MzU3LDI1MzYwLDI1MzYzLDI1MzY2LDI1MzY4LDI1Mzg1LDI1Mzg2LDI1Mzg5LDI1Mzk3LDI1Mzk4LDI1NDAxLDI1NDA0LDI1''@;'; put 'put ''NDA5LDI1NDEwLDI1NDExLDI1NDEyLDI1NDE0LDI1NDE4LDI1NDE5LDI1NDIyLDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMyLDI1NDM1LDI1NDQ1LDI1NDQ2LDI1NDUyLDI1NDUzLDI1NDU3LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY4LDI1NDY5LDI1NDcxLDI1NDc0LDI1NDc2LDI1NDc5LDI1NDgy''@;'; put 'put ''LDI1NDg4LDI1NDkyLDI1NDkzLDI1NDk3LDI1NDk4LDI1NTAyLDI1NTA4LDI1NTEwLDI1NTE3LDI1NTE4LDI1NTE5LDI1NTMzLDI1NTM3LDI1NTQxLDI1NTQ0LDI1NTUwLDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTY0LDI1NTY4LDI1NTczLDI1NTc4LDI1NTgwLDI1NTg2LDI1NTg3LDI1''@;'; put 'put ''NTg5LDI1NTkyLDI1NTkzLDI1NjA5LDI1NjEwLDI1NjE2LDI1NjE4LDI1NjIwLDI1NjI0LDI1NjMwLDI1NjMyLDI1NjM0LDI1NjM2LDI1NjM3LDI1NjQxLDI1NjQyLDI1NjQ3LDI1NjQ4LDI1NjUzLDI1NjYxLDI1NjYzLDI1Njc1LDI1Njc5LDI1NjgxLDI1NjgyLDI1NjgzLDI1Njg0LDI1Njkw''@;'; put 'put ''LDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk5LDI1NzA5LDI1NzE1LDI1NzE2LDI1NzIzLDI1NzI1LDI1NzMzLDI1NzM1LDI1NzQzLDI1NzQ0LDI1NzQ1LDI1NzUyLDI1NzUzLDI1NzU1LDI1NzU3LDI1NzU5LDI1NzYxLDI1NzYzLDI1NzY2LDI1NzY4LDI1NzcyLDI1''@;'; put 'put ''Nzc5LDI1Nzg5LDI1NzkwLDI1NzkxLDI1Nzk2LDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA2LDI1ODA4LDI1ODA5LDI1ODEzLDI1ODE1LDI1ODI4LDI1ODI5LDI1ODMzLDI1ODM0LDI1ODM3LDI1ODQwLDI1ODQ1LDI1ODQ3LDI1ODUxLDI1ODU1LDI1ODU3LDI1ODYwLDI1ODY0LDI1ODY1''@;'; put 'put ''LDI1ODY2LDI1ODcxLDI1ODc1LDI1ODc2LDI1ODc4LDI1ODgxLDI1ODgzLDI1ODg2LDI1ODg3LDI1ODkwLDI1ODk0LDI1ODk3LDI1OTAyLDI1OTA1LDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIzLDI1OTI3LDI1OTI5LDI1OTM2LDI1OTM4LDI1OTQwLDI1OTUxLDI1OTUyLDI1OTU5LDI1OTYzLDI1''@;'; put 'put ''OTc4LDI1OTgxLDI1OTg1LDI1OTg5LDI1OTk0LDI2MDAyLDI2MDA1LDI2MDA4LDI2MDEzLDI2MDE2LDI2MDE5LDI2MDIyLDI2MDMwLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDQ3LDI2MDUwLDI2MDU2LDI2MDU3LDI2MDYyLDI2MDY0LDI2MDY4LDI2MDcwLDI2MDcyLDI2MDc5LDI2MDk2LDI2MDk4''@;'; put 'put ''LDI2MTAwLDI2MTAxLDI2MTA1LDI2MTEwLDI2MTExLDI2MTEyLDI2MTE2LDI2MTIwLDI2MTIxLDI2MTI1LDI2MTI5LDI2MTMwLDI2MTMzLDI2MTM0LDI2MTQxLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2MTU4LDI2MTYwLDI2''@;'; put 'put ''MTYxLDI2MTYzLDI2MTY5LDI2MTY3LDI2MTc2LDI2MTgxLDI2MTgyLDI2MTg2LDI2MTg4LDI2MTkzLDI2MTkwLDI2MTk5LDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0LDI2MjA4LDI2MjA5LDI2MzYzLDI2MjE4LDI2MjE5LDI2MjIwLDI2MjM4LDI2MjI3LDI2MjI5LDI2MjM5LDI2MjMxLDI2MjMy''@;'; put 'put ''LDI2MjMzLDI2MjM1LDI2MjQwLDI2MjM2LDI2MjUxLDI2MjUyLDI2MjUzLDI2MjU2LDI2MjU4LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcxLDI2MjcyLDI2Mjc2LDI2Mjg1LDI2Mjg5LDI2MjkwLDI2MjkzLDI2Mjk5LDI2MzAzLDI2MzA0LDI2MzA2LDI2MzA3LDI2MzEyLDI2MzE2LDI2''@;'; put 'put ''MzE4LDI2MzE5LDI2MzI0LDI2MzMxLDI2MzM1LDI2MzQ0LDI2MzQ3LDI2MzQ4LDI2MzUwLDI2MzYyLDI2MzczLDI2Mzc1LDI2MzgyLDI2Mzg3LDI2MzkzLDI2Mzk2LDI2NDAwLDI2NDAyLDI2NDE5LDI2NDMwLDI2NDM3LDI2NDM5LDI2NDQwLDI2NDQ0LDI2NDUyLDI2NDUzLDI2NDYxLDI2NDcw''@;'; put 'put ''LDI2NDc2LDI2NDc4LDI2NDg0LDI2NDg2LDI2NDkxLDI2NDk3LDI2NTAwLDI2NTEwLDI2NTExLDI2NTEzLDI2NTE1LDI2NTE4LDI2NTIwLDI2NTIxLDI2NTIzLDI2NTQ0LDI2NTQ1LDI2NTQ2LDI2NTQ5LDI2NTU1LDI2NTU2LDI2NTU3LDI2NjE3LDI2NTYwLDI2NTYyLDI2NTYzLDI2NTY1LDI2''@;'; put 'put ''NTY4LDI2NTY5LDI2NTc4LDI2NTgzLDI2NTg1LDI2NTg4LDI2NTkzLDI2NTk4LDI2NjA4LDI2NjEwLDI2NjE0LDI2NjE1LDI2NzA2LDI2NjQ0LDI2NjQ5LDI2NjUzLDI2NjU1LDI2NjY0LDI2NjYzLDI2NjY4LDI2NjY5LDI2NjcxLDI2NjcyLDI2NjczLDI2Njc1LDI2NjgzLDI2Njg3LDI2Njky''@;'; put 'put ''LDI2NjkzLDI2Njk4LDI2NzAwLDI2NzA5LDI2NzExLDI2NzEyLDI2NzE1LDI2NzMxLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzQxLDI2NzQ1LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzU0LDI2NzU2LDI2NzU4LDI2NzYwLDI2Nzc0LDI2Nzc2LDI2Nzc4LDI2NzgwLDI2Nzg1LDI2''@;'; put 'put ''Nzg3LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk4LDI2ODAyLDI2ODExLDI2ODIxLDI2ODI0LDI2ODI4LDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM4LDI2ODQxLDI2ODQ0LDI2ODQ1LDI2ODUzLDI2ODU2LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODY0LDI2ODY1LDI2ODY5LDI2ODcw''@;'; put 'put ''LDI2ODc1LDI2ODc2LDI2ODc3LDI2ODg2LDI2ODg5LDI2ODkwLDI2ODk2LDI2ODk3LDI2ODk5LDI2OTAyLDI2OTAzLDI2OTI5LDI2OTMxLDI2OTMzLDI2OTM2LDI2OTM5LDI2OTQ2LDI2OTQ5LDI2OTUzLDI2OTU4LDI2OTY3LDI2OTcxLDI2OTc5LDI2OTgwLDI2OTgxLDI2OTgyLDI2OTg0LDI2''@;'; put 'put ''OTg1LDI2OTg4LDI2OTkyLDI2OTkzLDI2OTk0LDI3MDAyLDI3MDAzLDI3MDA3LDI3MDA4LDI3MDIxLDI3MDI2LDI3MDMwLDI3MDMyLDI3MDQxLDI3MDQ1LDI3MDQ2LDI3MDQ4LDI3MDUxLDI3MDUzLDI3MDU1LDI3MDYzLDI3MDY0LDI3MDY2LDI3MDY4LDI3MDc3LDI3MDgwLDI3MDg5LDI3MDk0''@;'; put 'put ''LDI3MDk1LDI3MTA2LDI3MTA5LDI3MTE4LDI3MTE5LDI3MTIxLDI3MTIzLDI3MTI1LDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM5LDI3MTUxLDI3MTUzLDI3MTU3LDI3MTYyLDI3MTY1LDI3MTY4LDI3MTcyLDI3MTc2LDI3MTg0LDI3MTg2LDI3MTg4LDI3MTkxLDI3MTk1LDI3MTk4LDI3MTk5LDI3''@;'; put 'put ''MjA1LDI3MjA2LDI3MjA5LDI3MjEwLDI3MjE0LDI3MjE2LDI3MjE3LDI3MjE4LDI3MjIxLDI3MjIyLDI3MjI3LDI3MjM2LDI3MjM5LDI3MjQyLDI3MjQ5LDI3MjUxLDI3MjYyLDI3MjY1LDI3MjY3LDI3MjcwLDI3MjcxLDI3MjczLDI3Mjc1LDI3MjgxLDI3MjkxLDI3MjkzLDI3Mjk0LDI3Mjk1''@;'; put 'put ''LDI3MzAxLDI3MzA3LDI3MzExLDI3MzEyLDI3MzEzLDI3MzE2LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzM0LDI3MzM3LDI3MzM2LDI3MzQwLDI3MzQ0LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzU2LDI3MzU3LDI3MzY0LDI3MzY3LDI3MzcyLDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzg4LDI3Mzg5LDI3''@;'; put 'put ''Mzk0LDI3Mzk1LDI3Mzk4LDI3Mzk5LDI3NDAxLDI3NDA3LDI3NDA4LDI3NDA5LDI3NDE1LDI3NDE5LDI3NDIyLDI3NDI4LDI3NDMyLDI3NDM1LDI3NDM2LDI3NDM5LDI3NDQ1LDI3NDQ2LDI3NDUxLDI3NDU1LDI3NDYyLDI3NDY2LDI3NDY5LDI3NDc0LDI3NDc4LDI3NDgwLDI3NDg1LDI3NDg4''@;'; put 'put ''LDI3NDk1LDI3NDk5LDI3NTAyLDI3NTA0LDI3NTA5LDI3NTE3LDI3NTE4LDI3NTIyLDI3NTI1LDI3NTQzLDI3NTQ3LDI3NTUxLDI3NTUyLDI3NTU0LDI3NTU1LDI3NTYwLDI3NTYxLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY4LDI3NTc2LDI3NTc3LDI3NTgxLDI3NTgyLDI3NTg3LDI3NTg4LDI3''@;'; put 'put ''NTkzLDI3NTk2LDI3NjA2LDI3NjEwLDI3NjE3LDI3NjE5LDI3NjIyLDI3NjIzLDI3NjMwLDI3NjMzLDI3NjM5LDI3NjQxLDI3NjQ3LDI3NjUwLDI3NjUyLDI3NjUzLDI3NjU3LDI3NjYxLDI3NjYyLDI3NjY0LDI3NjY2LDI3NjczLDI3Njc5LDI3Njg2LDI3Njg3LDI3Njg4LDI3NjkyLDI3Njk0''@;'; put 'put ''LDI3Njk5LDI3NzAxLDI3NzAyLDI3NzA2LDI3NzA3LDI3NzExLDI3NzIyLDI3NzIzLDI3NzI1LDI3NzI3LDI3NzMwLDI3NzMyLDI3NzM3LDI3NzM5LDI3NzQwLDI3NzU1LDI3NzU3LDI3NzU5LDI3NzY0LDI3NzY2LDI3NzY4LDI3NzY5LDI3NzcxLDI3NzgxLDI3NzgyLDI3NzgzLDI3Nzg1LDI3''@;'; put 'put ''Nzk2LDI3Nzk3LDI3Nzk5LDI3ODAwLDI3ODA0LDI3ODA3LDI3ODI0LDI3ODI2LDI3ODI4LDI3ODQyLDI3ODQ2LDI3ODUzLDI3ODU1LDI3ODU2LDI3ODU3LDI3ODU4LDI3ODYwLDI3ODYyLDI3ODY2LDI3ODY4LDI3ODcyLDI3ODc5LDI3ODgxLDI3ODgzLDI3ODg0LDI3ODg2LDI3ODkwLDI3ODky''@;'; put 'put ''LDI3OTA4LDI3OTExLDI3OTE0LDI3OTE4LDI3OTE5LDI3OTIxLDI3OTIzLDI3OTMwLDI3OTQyLDI3OTQzLDI3OTQ0LDI3NzUxLDI3OTUwLDI3OTUxLDI3OTUzLDI3OTYxLDI3OTY0LDI3OTY3LDI3OTkxLDI3OTk4LDI3OTk5LDI4MDAxLDI4MDA1LDI4MDA3LDI4MDE1LDI4MDE2LDI4MDI4LDI4''@;'; put 'put ''MDM0LDI4MDM5LDI4MDQ5LDI4MDUwLDI4MDUyLDI4MDU0LDI4MDU1LDI4MDU2LDI4MDc0LDI4MDc2LDI4MDg0LDI4MDg3LDI4MDg5LDI4MDkzLDI4MDk1LDI4MTAwLDI4MTA0LDI4MTA2LDI4MTEwLDI4MTExLDI4MTE4LDI4MTIzLDI4MTI1LDI4MTI3LDI4MTI4LDI4MTMwLDI4MTMzLDI4MTM3''@;'; put 'put ''LDI4MTQzLDI4MTQ0LDI4MTQ4LDI4MTUwLDI4MTU2LDI4MTYwLDI4MTY0LDI4MTkwLDI4MTk0LDI4MTk5LDI4MjEwLDI4MjE0LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjI4LDI4MjI5LDI4MjMyLDI4MjMzLDI4MjM1LDI4MjM5LDI4MjQxLDI4MjQyLDI4MjQzLDI4MjQ0LDI4MjQ3LDI4MjUyLDI4''@;'; put 'put ''MjUzLDI4MjU0LDI4MjU4LDI4MjU5LDI4MjY0LDI4Mjc1LDI4MjgzLDI4Mjg1LDI4MzAxLDI4MzA3LDI4MzEzLDI4MzIwLDI4MzI3LDI4MzMzLDI4MzM0LDI4MzM3LDI4MzM5LDI4MzQ3LDI4MzUxLDI4MzUyLDI4MzUzLDI4MzU1LDI4MzU5LDI4MzYwLDI4MzYyLDI4MzY1LDI4MzY2LDI4MzY3''@;'; put 'put ''LDI4Mzk1LDI4Mzk3LDI4Mzk4LDI4NDA5LDI4NDExLDI4NDEzLDI4NDIwLDI4NDI0LDI4NDI2LDI4NDI4LDI4NDI5LDI4NDM4LDI4NDQwLDI4NDQyLDI4NDQzLDI4NDU0LDI4NDU3LDI4NDU4LDI4NDYzLDI4NDY0LDI4NDY3LDI4NDcwLDI4NDc1LDI4NDc2LDI4NDYxLDI4NDk1LDI4NDk3LDI4''@;'; put 'put ''NDk4LDI4NDk5LDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA5LDI4NTEwLDI4NTEzLDI4NTE0LDI4NTIwLDI4NTI0LDI4NTQxLDI4NTQyLDI4NTQ3LDI4NTUxLDI4NTUyLDI4NTU1LDI4NTU2LDI4NTU3LDI4NTYwLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY2LDI4NTcwLDI4NTc1LDI4NTc2LDI4NTgx''@;'; put 'put ''LDI4NTgyLDI4NTgzLDI4NTg0LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTk3LDI4NTk4LDI4NjA0LDI4NjEzLDI4NjE1LDI4NjE2LDI4NjE4LDI4NjM0LDI4NjM4LDI4NjQ4LDI4NjQ5LDI4NjU2LDI4NjYxLDI4NjY1LDI4NjY4LDI4NjY5LDI4NjcyLDI4Njc3LDI4Njc4LDI4Njc5LDI4Njg1LDI4''@;'; put 'put ''Njk1LDI4NzA0LDI4NzA3LDI4NzE5LDI4NzI0LDI4NzI3LDI4NzI5LDI4NzMyLDI4NzM5LDI4NzQwLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzU2LDI4NzU3LDI4NzY1LDI4NzY2LDI4NzUwLDI4NzcyLDI4NzczLDI4NzgwLDI4NzgyLDI4Nzg5LDI4NzkwLDI4Nzk4LDI4ODAxLDI4ODA1''@;'; put 'put ''LDI4ODA2LDI4ODIwLDI4ODIxLDI4ODIyLDI4ODIzLDI4ODI0LDI4ODI3LDI4ODM2LDI4ODQzLDI4ODQ4LDI4ODQ5LDI4ODUyLDI4ODU1LDI4ODc0LDI4ODgxLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg4LDI4ODkyLDI4OTAwLDI4OTIyLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4''@;'; put 'put ''OTM1LDI4OTM5LDI4OTQwLDI4OTQzLDI4OTU4LDI4OTYwLDI4OTcxLDI4OTczLDI4OTc1LDI4OTc2LDI4OTc3LDI4OTg0LDI4OTkzLDI4OTk3LDI4OTk4LDI4OTk5LDI5MDAyLDI5MDAzLDI5MDA4LDI5MDEwLDI5MDE1LDI5MDE4LDI5MDIwLDI5MDIyLDI5MDI0LDI5MDMyLDI5MDQ5LDI5MDU2''@;'; put 'put ''LDI5MDYxLDI5MDYzLDI5MDY4LDI5MDc0LDI5MDgyLDI5MDgzLDI5MDg4LDI5MDkwLDI5MTAzLDI5MTA0LDI5MTA2LDI5MTA3LDI5MTE0LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTI0LDI5MTMxLDI5MTMyLDI5MTM5LDI5MTQyLDI5MTQ1LDI5MTQ2LDI5MTQ4LDI5MTc2LDI5MTgyLDI5MTg0LDI5''@;'; put 'put ''MTkxLDI5MTkyLDI5MTkzLDI5MjAzLDI5MjA3LDI5MjEwLDI5MjEzLDI5MjE1LDI5MjIwLDI5MjI3LDI5MjMxLDI5MjM2LDI5MjQwLDI5MjQxLDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUzLDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY3LDI5MjY5LDI5MjcwLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5Mjgw''@;'; put 'put ''LDI5MjgzLDI5Mjg4LDI5MjkxLDI5Mjk0LDI5Mjk1LDI5Mjk3LDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzExLDI5MzE2LDI5MzIxLDI5MzI1LDI5MzI2LDI5MzMxLDI5MzM5LDI5MzUyLDI5MzU3LDI5MzU4LDI5MzYxLDI5MzY0LDI5Mzc0LDI5Mzc3LDI5MzgzLDI5Mzg1LDI5Mzg4LDI5''@;'; put 'put ''Mzk3LDI5Mzk4LDI5NDAwLDI5NDA3LDI5NDEzLDI5NDI3LDI5NDI4LDI5NDM0LDI5NDM1LDI5NDM4LDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ3LDI5NDUxLDI5NDUzLDI5NDU4LDI5NDU5LDI5NDY0LDI5NDY1LDI5NDcwLDI5NDc0LDI5NDc2LDI5NDc5LDI5NDgwLDI5NDg0LDI5NDg5LDI5NDkw''@;'; put 'put ''LDI5NDkzLDI5NDk4LDI5NDk5LDI5NTAxLDI5NTA3LDI5NTE3LDI5NTIwLDI5NTIyLDI5NTI2LDI5NTI4LDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM2LDI5NTQyLDI5NTQzLDI5NTQ1LDI5NTQ3LDI5NTQ4LDI5NTUwLDI5NTUxLDI5NTUzLDI5NTU5LDI5NTYxLDI5NTY0LDI5NTY4LDI5NTY5LDI5''@;'; put 'put ''NTcxLDI5NTczLDI5NTc0LDI5NTgyLDI5NTg0LDI5NTg3LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTk2LDI5NTk4LDI5NTk5LDI5NjAwLDI5NjAyLDI5NjA1LDI5NjA2LDI5NjEwLDI5NjExLDI5NjEzLDI5NjIxLDI5NjIzLDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMxLDI5NjM3LDI5NjM4LDI5NjQx''@;'; put 'put ''LDI5NjQzLDI5NjQ0LDI5NjQ3LDI5NjUwLDI5NjUxLDI5NjU0LDI5NjU3LDI5NjYxLDI5NjY1LDI5NjY3LDI5NjcwLDI5NjcxLDI5NjczLDI5Njg0LDI5Njg1LDI5Njg3LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkzLDI5Njk1LDI5Njk2LDI5Njk3LDI5NzAwLDI5NzAzLDI5NzA2LDI5NzEzLDI5''@;'; put 'put ''NzIyLDI5NzIzLDI5NzMyLDI5NzM0LDI5NzM2LDI5NzM3LDI5NzM4LDI5NzM5LDI5NzQwLDI5NzQxLDI5NzQyLDI5NzQzLDI5NzQ0LDI5NzQ1LDI5NzUzLDI5NzYwLDI5NzYzLDI5NzY0LDI5NzY2LDI5NzY3LDI5NzcxLDI5NzczLDI5Nzc3LDI5Nzc4LDI5NzgzLDI5Nzg5LDI5Nzk0LDI5Nzk4''@;'; put 'put ''LDI5Nzk5LDI5ODAwLDI5ODAzLDI5ODA1LDI5ODA2LDI5ODA5LDI5ODEwLDI5ODI0LDI5ODI1LDI5ODI5LDI5ODMwLDI5ODMxLDI5ODMzLDI5ODM5LDI5ODQwLDI5ODQxLDI5ODQyLDI5ODQ4LDI5ODQ5LDI5ODUwLDI5ODUyLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU5LDI5ODYyLDI5ODY0LDI5''@;'; put 'put ''ODY1LDI5ODY2LDI5ODY3LDI5ODcwLDI5ODcxLDI5ODczLDI5ODc0LDI5ODc3LDI5ODgxLDI5ODgzLDI5ODg3LDI5ODk2LDI5ODk3LDI5OTAwLDI5OTA0LDI5OTA3LDI5OTEyLDI5OTE0LDI5OTE1LDI5OTE4LDI5OTE5LDI5OTI0LDI5OTI4LDI5OTMwLDI5OTMxLDI5OTM1LDI5OTQwLDI5OTQ2''@;'; put 'put ''LDI5OTQ3LDI5OTQ4LDI5OTUxLDI5OTU4LDI5OTcwLDI5OTc0LDI5OTc1LDI5OTg0LDI5OTg1LDI5OTg4LDI5OTkxLDI5OTkzLDI5OTk0LDI5OTk5LDMwMDA2LDMwMDA5LDMwMDEzLDMwMDE0LDMwMDE1LDMwMDE2LDMwMDE5LDMwMDIzLDMwMDI0LDMwMDMwLDMwMDMyLDMwMDM0LDMwMDM5LDMw''@;'; put 'put ''MDQ2LDMwMDQ3LDMwMDQ5LDMwMDYzLDMwMDY1LDMwMDczLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgxLDMwMDg1LDMwMDk2LDMwMDk4LDMwMDk5LDMwMTAxLDMwMTA1LDMwMTA4LDMwMTE0LDMwMTE2LDMwMTMyLDMwMTM4LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTQ4LDMwMTUw''@;'; put 'put ''LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTY3LDMwMTcyLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgwLDMwMTgzLDMwMTg4LDMwMTkwLDMwMTkxLDMwMTkzLDMwMjAxLDMwMjA4LDMwMjEwLDMwMjExLDMwMjEyLDMwMjE1LDMwMjE2LDMwMjE4LDMwMjIwLDMwMjIzLDMwMjI2LDMwMjI3LDMwMjI5LDMw''@;'; put 'put ''MjMwLDMwMjMzLDMwMjM1LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQzLDMwMjQ1LDMwMjQ2LDMwMjQ5LDMwMjUzLDMwMjU4LDMwMjU5LDMwMjYxLDMwMjY0LDMwMjY1LDMwMjY2LDMwMjY4LDMwMjgyLDMwMjcyLDMwMjczLDMwMjc1LDMwMjc2LDMwMjc3LDMwMjgxLDMwMjgzLDMwMjkzLDMwMjk3''@;'; put 'put ''LDMwMzAzLDMwMzA4LDMwMzA5LDMwMzE3LDMwMzE4LDMwMzE5LDMwMzIxLDMwMzI0LDMwMzM3LDMwMzQxLDMwMzQ4LDMwMzQ5LDMwMzU3LDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY3LDMwMzY4LDMwMzcwLDMwMzcxLDMwMzcyLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc4LDMwMzgxLDMw''@;'; put 'put ''Mzk3LDMwNDAxLDMwNDA1LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE0LDMwNDIwLDMwNDI1LDMwNDMyLDMwNDM4LDMwNDQwLDMwNDQ0LDMwNDQ4LDMwNDQ5LDMwNDU0LDMwNDU3LDMwNDYwLDMwNDY0LDMwNDcwLDMwNDc0LDMwNDc4LDMwNDgyLDMwNDg0LDMwNDg1LDMwNDg3LDMwNDg5LDMwNDkw''@;'; put 'put ''LDMwNDkyLDMwNDk4LDMwNTA0LDMwNTA5LDMwNTEwLDMwNTExLDMwNTE2LDMwNTE3LDMwNTE4LDMwNTIxLDMwNTI1LDMwNTI2LDMwNTMwLDMwNTMzLDMwNTM0LDMwNTM4LDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTUwLDMwNTUxLDMwNTU2LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTYyLDMw''@;'; put 'put ''NTY0LDMwNTY3LDMwNTcwLDMwNTcyLDMwNTc2LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTg2LDMwNTg5LDMwNTkyLDMwNTk2LDMwNjA0LDMwNjA1LDMwNjEyLDMwNjEzLDMwNjE0LDMwNjE4LDMwNjIzLDMwNjI2LDMwNjMxLDMwNjM0LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQ1LDMwNjU0LDMwNjU5''@;'; put 'put ''LDMwNjY1LDMwNjczLDMwNjc0LDMwNjc3LDMwNjgxLDMwNjg2LDMwNjg3LDMwNjg4LDMwNjkyLDMwNjk0LDMwNjk4LDMwNzAwLDMwNzA0LDMwNzA1LDMwNzA4LDMwNzEyLDMwNzE1LDMwNzI1LDMwNzI2LDMwNzI5LDMwNzMzLDMwNzM0LDMwNzM3LDMwNzQ5LDMwNzUzLDMwNzU0LDMwNzU1LDMw''@;'; put 'put ''NzY1LDMwNzY2LDMwNzY4LDMwNzczLDMwNzc1LDMwNzg3LDMwNzg4LDMwNzkxLDMwNzkyLDMwNzk2LDMwNzk4LDMwODAyLDMwODEyLDMwODE0LDMwODE2LDMwODE3LDMwODE5LDMwODIwLDMwODI0LDMwODI2LDMwODMwLDMwODQyLDMwODQ2LDMwODU4LDMwODYzLDMwODY4LDMwODcyLDMwODgx''@;'; put 'put ''LDMwODc3LDMwODc4LDMwODc5LDMwODg0LDMwODg4LDMwODkyLDMwODkzLDMwODk2LDMwODk3LDMwODk4LDMwODk5LDMwOTA3LDMwOTA5LDMwOTExLDMwOTE5LDMwOTIwLDMwOTIxLDMwOTI0LDMwOTI2LDMwOTMwLDMwOTMxLDMwOTMzLDMwOTM0LDMwOTQ4LDMwOTM5LDMwOTQzLDMwOTQ0LDMw''@;'; put 'put ''OTQ1LDMwOTUwLDMwOTU0LDMwOTYyLDMwOTYzLDMwOTc2LDMwOTY2LDMwOTY3LDMwOTcwLDMwOTcxLDMwOTc1LDMwOTgyLDMwOTg4LDMwOTkyLDMxMDAyLDMxMDA0LDMxMDA2LDMxMDA3LDMxMDA4LDMxMDEzLDMxMDE1LDMxMDE3LDMxMDIxLDMxMDI1LDMxMDI4LDMxMDI5LDMxMDM1LDMxMDM3''@;'; put 'put ''LDMxMDM5LDMxMDQ0LDMxMDQ1LDMxMDQ2LDMxMDUwLDMxMDUxLDMxMDU1LDMxMDU3LDMxMDYwLDMxMDY0LDMxMDY3LDMxMDY4LDMxMDc5LDMxMDgxLDMxMDgzLDMxMDkwLDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAyLDMxMTE1LDMxMTE2LDMxMTIxLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMx''@;'; put 'put ''MTI4LDMxMTMxLDMxMTMyLDMxMTM3LDMxMTQ0LDMxMTQ1LDMxMTQ3LDMxMTUxLDMxMTUzLDMxMTU2LDMxMTYwLDMxMTYzLDMxMTcwLDMxMTcyLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgzLDMxMTg4LDMxMTkwLDMxMTk0LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAyLDMxMjA1LDMxMjEwLDMxMjEx''@;'; put 'put ''LDMxMjEzLDMxMjE3LDMxMjI0LDMxMjI4LDMxMjM0LDMxMjM1LDMxMjM5LDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ5LDMxMjUzLDMxMjU5LDMxMjYyLDMxMjY1LDMxMjcxLDMxMjc1LDMxMjc3LDMxMjc5LDMxMjgwLDMxMjg0LDMxMjg1LDMxMjg4LDMxMjg5LDMxMjkwLDMxMzAwLDMxMzAxLDMx''@;'; put 'put ''MzAzLDMxMzA0LDMxMzA4LDMxMzE3LDMxMzE4LDMxMzIxLDMxMzI0LDMxMzI1LDMxMzI3LDMxMzI4LDMxMzMzLDMxMzM1LDMxMzM4LDMxMzQxLDMxMzQ5LDMxMzUyLDMxMzU4LDMxMzYwLDMxMzYyLDMxMzY1LDMxMzY2LDMxMzcwLDMxMzcxLDMxMzc2LDMxMzc3LDMxMzgwLDMxMzkwLDMxMzky''@;'; put 'put ''LDMxMzk1LDMxNDA0LDMxNDExLDMxNDEzLDMxNDE3LDMxNDE5LDMxNDIwLDMxNDMwLDMxNDMzLDMxNDM2LDMxNDM4LDMxNDQxLDMxNDUxLDMxNDY0LDMxNDY1LDMxNDY3LDMxNDY4LDMxNDczLDMxNDc2LDMxNDgzLDMxNDg1LDMxNDg2LDMxNDk1LDMxNTA4LDMxNTE5LDMxNTIzLDMxNTI3LDMx''@;'; put 'put ''NTI5LDMxNTMwLDMxNTMxLDMxNTMzLDMxNTM0LDMxNTM1LDMxNTM2LDMxNTM3LDMxNTQwLDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU5LDMxNTY2LDMxNTczLDMxNTg0LDMxNTg4LDMxNTkwLDMxNTkzLDMxNTk0LDMxNTk3LDMxNTk5LDMxNjAyLDMxNjAzLDMxNjA3LDMxNjIwLDMxNjI1''@;'; put 'put ''LDMxNjMwLDMxNjMyLDMxNjMzLDMxNjM4LDMxNjQzLDMxNjQ2LDMxNjQ4LDMxNjUzLDMxNjYwLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY5LDMxNjcwLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjgyLDMxNjg1LDMxNjg4LDMxNjkwLDMxNzAwLDMxNzAyLDMxNzAzLDMxNzA1LDMxNzA2LDMx''@;'; put 'put ''NzA3LDMxNzIwLDMxNzIyLDMxNzMwLDMxNzMyLDMxNzMzLDMxNzM2LDMxNzM3LDMxNzM4LDMxNzQwLDMxNzQyLDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzUwLDMxNzUzLDMxNzU1LDMxNzU2LDMxNzU4LDMxNzU5LDMxNzY5LDMxNzcxLDMxNzc2LDMxNzgxLDMxNzgyLDMxNzg0LDMxNzg4''@;'; put 'put ''LDMxNzkzLDMxNzk1LDMxNzk2LDMxNzk4LDMxODAxLDMxODAyLDMxODE0LDMxODE4LDMxODI5LDMxODI1LDMxODI2LDMxODI3LDMxODMzLDMxODM0LDMxODM1LDMxODM2LDMxODM3LDMxODM4LDMxODQxLDMxODQzLDMxODQ3LDMxODQ5LDMxODUzLDMxODU0LDMxODU2LDMxODU4LDMxODY1LDMx''@;'; put 'put ''ODY4LDMxODY5LDMxODc4LDMxODc5LDMxODg3LDMxODkyLDMxOTAyLDMxOTA0LDMxOTEwLDMxOTIwLDMxOTI2LDMxOTI3LDMxOTMwLDMxOTMxLDMxOTMyLDMxOTM1LDMxOTQwLDMxOTQzLDMxOTQ0LDMxOTQ1LDMxOTQ5LDMxOTUxLDMxOTU1LDMxOTU2LDMxOTU3LDMxOTU5LDMxOTYxLDMxOTYy''@;'; put 'put ''LDMxOTY1LDMxOTc0LDMxOTc3LDMxOTc5LDMxOTg5LDMyMDAzLDMyMDA3LDMyMDA4LDMyMDA5LDMyMDE1LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIyLDMyMDI5LDMyMDMwLDMyMDM1LDMyMDM4LDMyMDQyLDMyMDQ1LDMyMDQ5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDY0LDMyMDY1LDMyMDcxLDMy''@;'; put 'put ''MDcyLDMyMDc3LDMyMDgxLDMyMDgzLDMyMDg3LDMyMDg5LDMyMDkwLDMyMDkyLDMyMDkzLDMyMTAxLDMyMTAzLDMyMTA2LDMyMTEyLDMyMTIwLDMyMTIyLDMyMTIzLDMyMTI3LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMzLDMyMTM0LDMyMTM2LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQ1LDMyMTUw''@;'; put 'put ''LDMyMTUxLDMyMTU3LDMyMTU4LDMyMTY2LDMyMTY3LDMyMTcwLDMyMTc5LDMyMTgyLDMyMTgzLDMyMTg1LDMyMTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMjA0LDMyMjA1LDMyMjA2LDMyMjE1LDMyMjE3LDMyMjU2LDMyMjI2LDMyMjI5LDMyMjMwLDMyMjM0LDMyMjM1LDMyMjM3LDMy''@;'; put 'put ''MjQxLDMyMjQ1LDMyMjQ2LDMyMjQ5LDMyMjUwLDMyMjY0LDMyMjcyLDMyMjczLDMyMjc3LDMyMjc5LDMyMjg0LDMyMjg1LDMyMjg4LDMyMjk1LDMyMjk2LDMyMzAwLDMyMzAxLDMyMzAzLDMyMzA3LDMyMzEwLDMyMzE5LDMyMzI0LDMyMzI1LDMyMzI3LDMyMzM0LDMyMzM2LDMyMzM4LDMyMzQ0''@;'; put 'put ''LDMyMzUxLDMyMzUzLDMyMzU0LDMyMzU3LDMyMzYzLDMyMzY2LDMyMzY3LDMyMzcxLDMyMzc2LDMyMzgyLDMyMzg1LDMyMzkwLDMyMzkxLDMyMzk0LDMyMzk3LDMyNDAxLDMyNDA1LDMyNDA4LDMyNDEwLDMyNDEzLDMyNDE0LDMyNTcyLDMyNTcxLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc5LDMy''@;'; put 'put ''NTgwLDMyNTgzLDMyNTkxLDMyNTk0LDMyNTk1LDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA5LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjIxLDMyNjI1LDMyNjM3LDMyNjM4LDMyNjM5LDMyNjQwLDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjYyLDMyNjYzLDMyNjY4LDMyNjcz''@;'; put 'put ''LDMyNjc0LDMyNjc4LDMyNjgyLDMyNjg1LDMyNjkyLDMyNzAwLDMyNzAzLDMyNzA0LDMyNzA3LDMyNzEyLDMyNzE4LDMyNzE5LDMyNzMxLDMyNzM1LDMyNzM5LDMyNzQxLDMyNzQ0LDMyNzQ4LDMyNzUwLDMyNzUxLDMyNzU0LDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzc1LDMyNzc2LDMy''@;'; put 'put ''Nzc4LDMyNzgxLDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzg4LDMyNzkwLDMyNzk3LDMyNzk4LDMyNzk5LDMyODAwLDMyODA0LDMyODA2LDMyODEyLDMyODE0LDMyODE2LDMyODIwLDMyODIxLDMyODIzLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMyODM2LDMyODY0LDMyODY4''@;'; put 'put ''LDMyODcwLDMyODc3LDMyODgxLDMyODg1LDMyODk3LDMyOTA0LDMyOTEwLDMyOTI0LDMyOTI2LDMyOTM0LDMyOTM1LDMyOTM5LDMyOTUyLDMyOTUzLDMyOTY4LDMyOTczLDMyOTc1LDMyOTc4LDMyOTgwLDMyOTgxLDMyOTgzLDMyOTg0LDMyOTkyLDMzMDA1LDMzMDA2LDMzMDA4LDMzMDEwLDMz''@;'; put 'put ''MDExLDMzMDE0LDMzMDE3LDMzMDE4LDMzMDIyLDMzMDI3LDMzMDM1LDMzMDQ2LDMzMDQ3LDMzMDQ4LDMzMDUyLDMzMDU0LDMzMDU2LDMzMDYwLDMzMDYzLDMzMDY4LDMzMDcyLDMzMDc3LDMzMDgyLDMzMDg0LDMzMDkzLDMzMDk1LDMzMDk4LDMzMTAwLDMzMTA2LDMzMTExLDMzMTIwLDMzMTIx''@;'; put 'put ''LDMzMTI3LDMzMTI4LDMzMTI5LDMzMTMzLDMzMTM1LDMzMTQzLDMzMTUzLDMzMTY4LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTYzLDMzMTY2LDMzMTc0LDMzMTc2LDMzMTc5LDMzMTgyLDMzMTg2LDMzMTk4LDMzMjAyLDMzMjA0LDMzMjExLDMzMjI3LDMzMjE5LDMzMjIxLDMzMjI2LDMzMjMwLDMz''@;'; put 'put ''MjMxLDMzMjM3LDMzMjM5LDMzMjQzLDMzMjQ1LDMzMjQ2LDMzMjQ5LDMzMjUyLDMzMjU5LDMzMjYwLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcyLDMzMjczLDMzMjc3LDMzMjc5LDMzMjgwLDMzMjgzLDMzMjk1LDMzMjk5LDMzMzAwLDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEz''@;'; put 'put ''LDMzMzE0LDMzMzIwLDMzMzMwLDMzMzMyLDMzMzM4LDMzMzQ3LDMzMzQ4LDMzMzQ5LDMzMzUwLDMzMzU1LDMzMzU4LDMzMzU5LDMzMzYxLDMzMzY2LDMzMzcyLDMzMzc2LDMzMzc5LDMzMzgzLDMzMzg5LDMzMzk2LDMzNDAzLDMzNDA1LDMzNDA3LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEyLDMz''@;'; put 'put ''NDE1LDMzNDE3LDMzNDE4LDMzNDIyLDMzNDI1LDMzNDI4LDMzNDMwLDMzNDMyLDMzNDM0LDMzNDM1LDMzNDQwLDMzNDQxLDMzNDQzLDMzNDQ0LDMzNDQ3LDMzNDQ4LDMzNDQ5LDMzNDUwLDMzNDU0LDMzNDU2LDMzNDU4LDMzNDYwLDMzNDYzLDMzNDY2LDMzNDY4LDMzNDcwLDMzNDcxLDMzNDc4''@;'; put 'put ''LDMzNDg4LDMzNDkzLDMzNDk4LDMzNTA0LDMzNTA2LDMzNTA4LDMzNTEyLDMzNTE0LDMzNTE3LDMzNTE5LDMzNTI2LDMzNTI3LDMzNTMzLDMzNTM0LDMzNTM2LDMzNTM3LDMzNTQzLDMzNTQ0LDMzNTQ2LDMzNTQ3LDMzNjIwLDMzNTYzLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY5LDMzNTcwLDMz''@;'; put 'put ''NTgwLDMzNTgxLDMzNTgyLDMzNTg0LDMzNTg3LDMzNTkxLDMzNTk0LDMzNTk2LDMzNTk3LDMzNjAyLDMzNjAzLDMzNjA0LDMzNjA3LDMzNjEzLDMzNjE0LDMzNjE3LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjQ4LDMzNjU2LDMzNjYxLDMzNjYzLDMzNjY0LDMzNjY2LDMzNjY4LDMzNjcwLDMzNjc3''@;'; put 'put ''LDMzNjgyLDMzNjg0LDMzNjg1LDMzNjg4LDMzNjg5LDMzNjkxLDMzNjkyLDMzNjkzLDMzNzAyLDMzNzAzLDMzNzA1LDMzNzA4LDMzNzI2LDMzNzI3LDMzNzI4LDMzNzM1LDMzNzM3LDMzNzQzLDMzNzQ0LDMzNzQ1LDMzNzQ4LDMzNzU3LDMzNjE5LDMzNzY4LDMzNzcwLDMzNzgyLDMzNzg0LDMz''@;'; put 'put ''Nzg1LDMzNzg4LDMzNzkzLDMzNzk4LDMzODAyLDMzODA3LDMzODA5LDMzODEzLDMzODE3LDMzNzA5LDMzODM5LDMzODQ5LDMzODYxLDMzODYzLDMzODY0LDMzODY2LDMzODY5LDMzODcxLDMzODczLDMzODc0LDMzODc4LDMzODgwLDMzODgxLDMzODgyLDMzODg0LDMzODg4LDMzODkyLDMzODkz''@;'; put 'put ''LDMzODk1LDMzODk4LDMzOTA0LDMzOTA3LDMzOTA4LDMzOTEwLDMzOTEyLDMzOTE2LDMzOTE3LDMzOTIxLDMzOTI1LDMzOTM4LDMzOTM5LDMzOTQxLDMzOTUwLDMzOTU4LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTY3LDMzOTY5LDMzOTcyLDMzOTc4LDMzOTgxLDMzOTgyLDMzOTg0LDMzOTg2LDMz''@;'; put 'put ''OTkxLDMzOTkyLDMzOTk2LDMzOTk5LDM0MDAzLDM0MDEyLDM0MDIzLDM0MDI2LDM0MDMxLDM0MDMyLDM0MDMzLDM0MDM0LDM0MDM5LDM0MDk4LDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDUwLDM0MDUxLDM0MDU1LDM0MDYwLDM0MDYyLDM0MDY0LDM0MDc2LDM0MDc4LDM0MDgyLDM0MDgzLDM0MDg0''@;'; put 'put ''LDM0MDg1LDM0MDg3LDM0MDkwLDM0MDkxLDM0MDk1LDM0MDk5LDM0MTAwLDM0MTAyLDM0MTExLDM0MTE4LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTM0LDM0MTM3LDM0MTQwLDM0MTQxLDM0MTQyLDM0MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ4LDM0MTU1LDM0MTU5LDM0''@;'; put 'put ''MTY5LDM0MTcwLDM0MTcxLDM0MTczLDM0MTc1LDM0MTc3LDM0MTgxLDM0MTgyLDM0MTg1LDM0MTg3LDM0MTg4LDM0MTkxLDM0MTk1LDM0MjAwLDM0MjA1LDM0MjA3LDM0MjA4LDM0MjEwLDM0MjEzLDM0MjE1LDM0MjI4LDM0MjMwLDM0MjMxLDM0MjMyLDM0MjM2LDM0MjM3LDM0MjM4LDM0MjM5''@;'; put 'put ''LDM0MjQyLDM0MjQ3LDM0MjUwLDM0MjUxLDM0MjU0LDM0MjIxLDM0MjY0LDM0MjY2LDM0MjcxLDM0MjcyLDM0Mjc4LDM0MjgwLDM0Mjg1LDM0MjkxLDM0Mjk0LDM0MzAwLDM0MzAzLDM0MzA0LDM0MzA4LDM0MzA5LDM0MzE3LDM0MzE4LDM0MzIwLDM0MzIxLDM0MzIyLDM0MzI4LDM0MzI5LDM0''@;'; put 'put ''MzMxLDM0MzM0LDM0MzM3LDM0MzQzLDM0MzQ1LDM0MzU4LDM0MzYwLDM0MzYyLDM0MzY0LDM0MzY1LDM0MzY4LDM0MzcwLDM0Mzc0LDM0Mzg2LDM0Mzg3LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk3LDM0NDAwLDM0NDAxLDM0NDAyLDM0NDAzLDM0NDA0LDM0NDA5LDM0NDEyLDM0NDE1''@;'; put 'put ''LDM0NDIxLDM0NDIyLDM0NDIzLDM0NDI2LDM0NDQ1LDM0NDQ5LDM0NDU0LDM0NDU2LDM0NDU4LDM0NDYwLDM0NDY1LDM0NDcwLDM0NDcxLDM0NDcyLDM0NDc3LDM0NDgxLDM0NDgzLDM0NDg0LDM0NDg1LDM0NDg3LDM0NDg4LDM0NDg5LDM0NDk1LDM0NDk2LDM0NDk3LDM0NDk5LDM0NTAxLDM0''@;'; put 'put ''NTEzLDM0NTE0LDM0NTE3LDM0NTE5LDM0NTIyLDM0NTI0LDM0NTI4LDM0NTMxLDM0NTMzLDM0NTM1LDM0NDQwLDM0NTU0LDM0NTU2LDM0NTU3LDM0NTY0LDM0NTY1LDM0NTY3LDM0NTcxLDM0NTc0LDM0NTc1LDM0NTc2LDM0NTc5LDM0NTgwLDM0NTg1LDM0NTkwLDM0NTkxLDM0NTkzLDM0NTk1''@;'; put 'put ''LDM0NjAwLDM0NjA2LDM0NjA3LDM0NjA5LDM0NjEwLDM0NjE3LDM0NjE4LDM0NjIwLDM0NjIxLDM0NjIyLDM0NjI0LDM0NjI3LDM0NjI5LDM0NjM3LDM0NjQ4LDM0NjUzLDM0NjU3LDM0NjYwLDM0NjYxLDM0NjcxLDM0NjczLDM0Njc0LDM0NjgzLDM0NjkxLDM0NjkyLDM0NjkzLDM0Njk0LDM0''@;'; put 'put ''Njk1LDM0Njk2LDM0Njk3LDM0Njk5LDM0NzAwLDM0NzA0LDM0NzA3LDM0NzA5LDM0NzExLDM0NzEyLDM0NzEzLDM0NzE4LDM0NzIwLDM0NzIzLDM0NzI3LDM0NzMyLDM0NzMzLDM0NzM0LDM0NzM3LDM0NzQxLDM0NzUwLDM0NzUxLDM0NzUzLDM0NzYwLDM0NzYxLDM0NzYyLDM0NzY2LDM0Nzcz''@;'; put 'put ''LDM0Nzc0LDM0Nzc3LDM0Nzc4LDM0NzgwLDM0NzgzLDM0Nzg2LDM0Nzg3LDM0Nzg4LDM0Nzk0LDM0Nzk1LDM0Nzk3LDM0ODAxLDM0ODAzLDM0ODA4LDM0ODEwLDM0ODE1LDM0ODE3LDM0ODE5LDM0ODIyLDM0ODI1LDM0ODI2LDM0ODI3LDM0ODMyLDM0ODQxLDM0ODM0LDM0ODM1LDM0ODM2LDM0''@;'; put 'put ''ODQwLDM0ODQyLDM0ODQzLDM0ODQ0LDM0ODQ2LDM0ODQ3LDM0ODU2LDM0ODYxLDM0ODYyLDM0ODY0LDM0ODY2LDM0ODY5LDM0ODc0LDM0ODc2LDM0ODgxLDM0ODgzLDM0ODg1LDM0ODg4LDM0ODg5LDM0ODkwLDM0ODkxLDM0ODk0LDM0ODk3LDM0OTAxLDM0OTAyLDM0OTA0LDM0OTA2LDM0OTA4''@;'; put 'put ''LDM0OTExLDM0OTEyLDM0OTE2LDM0OTIxLDM0OTI5LDM0OTM3LDM0OTM5LDM0OTQ0LDM0OTY4LDM0OTcwLDM0OTcxLDM0OTcyLDM0OTc1LDM0OTc2LDM0OTg0LDM0OTg2LDM1MDAyLDM1MDA1LDM1MDA2LDM1MDA4LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIyLDM1MDI1LDM1MDI2LDM1''@;'; put 'put ''MDI3LDM1MDM1LDM1MDM4LDM1MDQ3LDM1MDU1LDM1MDU2LDM1MDU3LDM1MDYxLDM1MDYzLDM1MDczLDM1MDc4LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDkzLDM1MDk0LDM1MDk2LDM1MDk3LDM1MDk4LDM1MTAwLDM1MTA0LDM1MTEwLDM1MTExLDM1MTEyLDM1MTIwLDM1MTIxLDM1MTIyLDM1MTI1''@;'; put 'put ''LDM1MTI5LDM1MTMwLDM1MTM0LDM1MTM2LDM1MTM4LDM1MTQxLDM1MTQyLDM1MTQ1LDM1MTUxLDM1MTU0LDM1MTU5LDM1MTYyLDM1MTYzLDM1MTY0LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTc5LDM1MTgyLDM1MTg0LDM1MTg3LDM1MTg5LDM1MTk0LDM1MTk1LDM1MTk2LDM1MTk3LDM1MjA5LDM1''@;'; put 'put ''MjEzLDM1MjE2LDM1MjIwLDM1MjIxLDM1MjI3LDM1MjI4LDM1MjMxLDM1MjMyLDM1MjM3LDM1MjQ4LDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjYwLDM1Mjg0LDM1Mjg1LDM1Mjg2LDM1Mjg3LDM1Mjg4LDM1MzAxLDM1MzA1LDM1MzA3LDM1MzA5LDM1MzEzLDM1MzE1LDM1MzE4LDM1MzIx''@;'; put 'put ''LDM1MzI1LDM1MzI3LDM1MzMyLDM1MzMzLDM1MzM1LDM1MzQzLDM1MzQ1LDM1MzQ2LDM1MzQ4LDM1MzQ5LDM1MzU4LDM1MzYwLDM1MzYyLDM1MzY0LDM1MzY2LDM1MzcxLDM1MzcyLDM1Mzc1LDM1MzgxLDM1MzgzLDM1Mzg5LDM1MzkwLDM1MzkyLDM1Mzk1LDM1Mzk3LDM1Mzk5LDM1NDAxLDM1''@;'; put 'put ''NDA1LDM1NDA2LDM1NDExLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDIwLDM1NDIxLDM1NDI1LDM1NDI5LDM1NDMxLDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ5LDM1NDUwLDM1NDUxLDM1NDU0LDM1NDU1LDM1NDU2LDM1NDU5LDM1NDYyLDM1NDY3LDM1NDcxLDM1NDcyLDM1NDc0LDM1NDc4LDM1NDc5''@;'; put 'put ''LDM1NDgxLDM1NDg3LDM1NDk1LDM1NDk3LDM1NTAyLDM1NTAzLDM1NTA3LDM1NTEwLDM1NTExLDM1NTE1LDM1NTE4LDM1NTIzLDM1NTI2LDM1NTI4LDM1NTI5LDM1NTMwLDM1NTM3LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQzLDM1NTQ5LDM1NTUxLDM1NTY0LDM1NTY4LDM1NTcyLDM1NTczLDM1''@;'; put 'put ''NTc0LDM1NTgwLDM1NTgzLDM1NTg5LDM1NTkwLDM1NTk1LDM1NjAxLDM1NjEyLDM1NjE0LDM1NjE1LDM1NTk0LDM1NjI5LDM1NjMyLDM1NjM5LDM1NjQ0LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDM1NjU0LDM1NjU2LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjczLDM1NjYxLDM1Njc4LDM1Njgz''@;'; put 'put ''LDM1NjkzLDM1NzAyLDM1NzA0LDM1NzA1LDM1NzA4LDM1NzEwLDM1NzEzLDM1NzE2LDM1NzE3LDM1NzIzLDM1NzI1LDM1NzI3LDM1NzMyLDM1NzMzLDM1NzQwLDM1NzQyLDM1NzQzLDM1ODk2LDM1ODk3LDM1OTAxLDM1OTAyLDM1OTA5LDM1OTExLDM1OTEzLDM1OTE1LDM1OTE5LDM1OTIxLDM1''@;'; put 'put ''OTIzLDM1OTI0LDM1OTI3LDM1OTI4LDM1OTMxLDM1OTMzLDM1OTI5LDM1OTM5LDM1OTQwLDM1OTQyLDM1OTQ0LDM1OTQ1LDM1OTQ5LDM1OTU1LDM1OTU3LDM1OTU4LDM1OTYzLDM1OTY2LDM1OTc0LDM1OTc1LDM1OTc5LDM1OTg0LDM1OTg2LDM1OTg3LDM1OTkzLDM1OTk1LDM1OTk2LDM2MDA0''@;'; put 'put ''LDM2MDI1LDM2MDI2LDM2MDM3LDM2MDM4LDM2MDQxLDM2MDQzLDM2MDQ3LDM2MDU0LDM2MDUzLDM2MDU3LDM2MDYxLDM2MDY1LDM2MDcyLDM2MDc2LDM2MDc5LDM2MDgwLDM2MDgyLDM2MDg1LDM2MDg3LDM2MDg4LDM2MDk0LDM2MDk1LDM2MDk3LDM2MDk5LDM2MTA1LDM2MTE0LDM2MTE5LDM2''@;'; put 'put ''MTIzLDM2MTk3LDM2MjAxLDM2MjA0LDM2MjA2LDM2MjIzLDM2MjI2LDM2MjI4LDM2MjMyLDM2MjM3LDM2MjQwLDM2MjQxLDM2MjQ1LDM2MjU0LDM2MjU1LDM2MjU2LDM2MjYyLDM2MjY3LDM2MjY4LDM2MjcxLDM2Mjc0LDM2Mjc3LDM2Mjc5LDM2MjgxLDM2MjgzLDM2Mjg4LDM2MjkzLDM2Mjk0''@;'; put 'put ''LDM2Mjk1LDM2Mjk2LDM2Mjk4LDM2MzAyLDM2MzA1LDM2MzA4LDM2MzA5LDM2MzExLDM2MzEzLDM2MzI0LDM2MzI1LDM2MzI3LDM2MzMyLDM2MzM2LDM2Mjg0LDM2MzM3LDM2MzM4LDM2MzQwLDM2MzQ5LDM2MzUzLDM2MzU2LDM2MzU3LDM2MzU4LDM2MzYzLDM2MzY5LDM2MzcyLDM2Mzc0LDM2''@;'; put 'put ''Mzg0LDM2Mzg1LDM2Mzg2LDM2Mzg3LDM2MzkwLDM2MzkxLDM2NDAxLDM2NDAzLDM2NDA2LDM2NDA3LDM2NDA4LDM2NDA5LDM2NDEzLDM2NDE2LDM2NDE3LDM2NDI3LDM2NDI5LDM2NDMwLDM2NDMxLDM2NDM2LDM2NDQzLDM2NDQ0LDM2NDQ1LDM2NDQ2LDM2NDQ5LDM2NDUwLDM2NDU3LDM2NDYw''@;'; put 'put ''LDM2NDYxLDM2NDYzLDM2NDY0LDM2NDY1LDM2NDczLDM2NDc0LDM2NDc1LDM2NDgyLDM2NDgzLDM2NDg5LDM2NDk2LDM2NDk4LDM2NTAxLDM2NTA2LDM2NTA3LDM2NTA5LDM2NTEwLDM2NTE0LDM2NTE5LDM2NTIxLDM2NTI1LDM2NTI2LDM2NTMxLDM2NTMzLDM2NTM4LDM2NTM5LDM2NTQ0LDM2''@;'; put 'put ''NTQ1LDM2NTQ3LDM2NTQ4LDM2NTUxLDM2NTU5LDM2NTYxLDM2NTY0LDM2NTcyLDM2NTg0LDM2NTkwLDM2NTkyLDM2NTkzLDM2NTk5LDM2NjAxLDM2NjAyLDM2NTg5LDM2NjA4LDM2NjEwLDM2NjE1LDM2NjE2LDM2NjIzLDM2NjI0LDM2NjMwLDM2NjMxLDM2NjMyLDM2NjM4LDM2NjQwLDM2NjQx''@;'; put 'put ''LDM2NjQzLDM2NjQ1LDM2NjQ3LDM2NjQ4LDM2NjUyLDM2NjUzLDM2NjU0LDM2NjYwLDM2NjYxLDM2NjYyLDM2NjYzLDM2NjY2LDM2NjcyLDM2NjczLDM2Njc1LDM2Njc5LDM2Njg3LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk2LDM2NzAxLDM2NzAyLDM2NzA5LDM2NzY1LDM2''@;'; put 'put ''NzY4LDM2NzY5LDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzg5LDM2NzkwLDM2NzkyLDM2Nzk4LDM2ODAwLDM2ODAxLDM2ODA2LDM2ODEwLDM2ODExLDM2ODEzLDM2ODE2LDM2ODE4LDM2ODE5LDM2ODIxLDM2ODMyLDM2ODM1LDM2ODM2LDM2ODQwLDM2ODQ2LDM2ODQ5LDM2ODUzLDM2ODU0LDM2ODU5''@;'; put 'put ''LDM2ODYyLDM2ODY2LDM2ODY4LDM2ODcyLDM2ODc2LDM2ODg4LDM2ODkxLDM2OTA0LDM2OTA1LDM2OTExLDM2OTA2LDM2OTA4LDM2OTA5LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTI3LDM2OTMxLDM2OTMyLDM2OTQwLDM2OTU1LDM2OTU3LDM2OTYyLDM2OTY2LDM2OTY3LDM2OTcyLDM2OTc2LDM2''@;'; put 'put ''OTgwLDM2OTg1LDM2OTk3LDM3ZTMsMzcwMDMsMzcwMDQsMzcwMDYsMzcwMDgsMzcwMTMsMzcwMTUsMzcwMTYsMzcwMTcsMzcwMTksMzcwMjQsMzcwMjUsMzcwMjYsMzcwMjksMzcwNDAsMzcwNDIsMzcwNDMsMzcwNDQsMzcwNDYsMzcwNTMsMzcwNjgsMzcwNTQsMzcwNTksMzcwNjAsMzcwNjEs''@;'; put 'put ''MzcwNjMsMzcwNjQsMzcwNzcsMzcwNzksMzcwODAsMzcwODEsMzcwODQsMzcwODUsMzcwODcsMzcwOTMsMzcwNzQsMzcxMTAsMzcwOTksMzcxMDMsMzcxMDQsMzcxMDgsMzcxMTgsMzcxMTksMzcxMjAsMzcxMjQsMzcxMjUsMzcxMjYsMzcxMjgsMzcxMzMsMzcxMzYsMzcxNDAsMzcxNDIsMzcx''@;'; put 'put ''NDMsMzcxNDQsMzcxNDYsMzcxNDgsMzcxNTAsMzcxNTIsMzcxNTcsMzcxNTQsMzcxNTUsMzcxNTksMzcxNjEsMzcxNjYsMzcxNjcsMzcxNjksMzcxNzIsMzcxNzQsMzcxNzUsMzcxNzcsMzcxNzgsMzcxODAsMzcxODEsMzcxODcsMzcxOTEsMzcxOTIsMzcxOTksMzcyMDMsMzcyMDcsMzcyMDks''@;'; put 'put ''MzcyMTAsMzcyMTEsMzcyMTcsMzcyMjAsMzcyMjMsMzcyMjksMzcyMzYsMzcyNDEsMzcyNDIsMzcyNDMsMzcyNDksMzcyNTEsMzcyNTMsMzcyNTQsMzcyNTgsMzcyNjIsMzcyNjUsMzcyNjcsMzcyNjgsMzcyNjksMzcyNzIsMzcyNzgsMzcyODEsMzcyODYsMzcyODgsMzcyOTIsMzcyOTMsMzcy''@;'; put 'put ''OTQsMzcyOTYsMzcyOTcsMzcyOTgsMzcyOTksMzczMDIsMzczMDcsMzczMDgsMzczMDksMzczMTEsMzczMTQsMzczMTUsMzczMTcsMzczMzEsMzczMzIsMzczMzUsMzczMzcsMzczMzgsMzczNDIsMzczNDgsMzczNDksMzczNTMsMzczNTQsMzczNTYsMzczNTcsMzczNTgsMzczNTksMzczNjAs''@;'; put 'put ''MzczNjEsMzczNjcsMzczNjksMzczNzEsMzczNzMsMzczNzYsMzczNzcsMzczODAsMzczODEsMzczODIsMzczODMsMzczODUsMzczODYsMzczODgsMzczOTIsMzczOTQsMzczOTUsMzczOTgsMzc0MDAsMzc0MDQsMzc0MDUsMzc0MTEsMzc0MTIsMzc0MTMsMzc0MTQsMzc0MTYsMzc0MjIsMzc0''@;'; put 'put ''MjMsMzc0MjQsMzc0MjcsMzc0MjksMzc0MzAsMzc0MzIsMzc0MzMsMzc0MzQsMzc0MzYsMzc0MzgsMzc0NDAsMzc0NDIsMzc0NDMsMzc0NDYsMzc0NDcsMzc0NTAsMzc0NTMsMzc0NTQsMzc0NTUsMzc0NTcsMzc0NjQsMzc0NjUsMzc0NjgsMzc0NjksMzc0NzIsMzc0NzMsMzc0NzcsMzc0Nzks''@;'; put 'put ''Mzc0ODAsMzc0ODEsMzc0ODYsMzc0ODcsMzc0ODgsMzc0OTMsMzc0OTQsMzc0OTUsMzc0OTYsMzc0OTcsMzc0OTksMzc1MDAsMzc1MDEsMzc1MDMsMzc1MTIsMzc1MTMsMzc1MTQsMzc1MTcsMzc1MTgsMzc1MjIsMzc1MjcsMzc1MjksMzc1MzUsMzc1MzYsMzc1NDAsMzc1NDEsMzc1NDMsMzc1''@;'; put 'put ''NDQsMzc1NDcsMzc1NTEsMzc1NTQsMzc1NTgsMzc1NjAsMzc1NjIsMzc1NjMsMzc1NjQsMzc1NjUsMzc1NjcsMzc1NjgsMzc1NjksMzc1NzAsMzc1NzEsMzc1NzMsMzc1NzQsMzc1NzUsMzc1NzYsMzc1NzksMzc1ODAsMzc1ODEsMzc1ODIsMzc1ODQsMzc1ODcsMzc1ODksMzc1OTEsMzc1OTIs''@;'; put 'put ''Mzc1OTMsMzc1OTYsMzc1OTcsMzc1OTksMzc2MDAsMzc2MDEsMzc2MDMsMzc2MDUsMzc2MDcsMzc2MDgsMzc2MTIsMzc2MTQsMzc2MTYsMzc2MjUsMzc2MjcsMzc2MzEsMzc2MzIsMzc2MzQsMzc2NDAsMzc2NDUsMzc2NDksMzc2NTIsMzc2NTMsMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2''@;'; put 'put ''NjUsMzc2NjgsMzc2NjksMzc2NzEsMzc2NzMsMzc2NzQsMzc2ODMsMzc2ODQsMzc2ODYsMzc2ODcsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTcsMzc3MTksMzc3MjAsMzc3MjIsMzc3MjYsMzc3MzIsMzc3MzMsMzc3MzUsMzc3MzcsMzc3MzgsMzc3NDEsMzc3NDMs''@;'; put 'put ''Mzc3NDQsMzc3NDUsMzc3NDcsMzc3NDgsMzc3NTAsMzc3NTQsMzc3NTcsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjgsMzc3NzAsMzc3NzEsMzc3NzMsMzc3NzUsMzc3NzgsMzc3ODEsMzc3ODQsMzc3ODcsMzc3OTAsMzc3OTMsMzc3OTUsMzc3OTYsMzc3OTgsMzc4MDAsMzc4MDMsMzc4''@;'; put 'put ''MTIsMzc4MTMsMzc4MTQsMzc4MTgsMzc4MDEsMzc4MjUsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzMsMzc4MzQsMzc4MzUsMzc4MzYsMzc4MzcsMzc4NDMsMzc4NDksMzc4NTIsMzc4NTQsMzc4NTUsMzc4NTgsMzc4NjIsMzc4NjMsMzc4ODEsMzc4NzksMzc4ODAsMzc4ODIsMzc4ODMs''@;'; put 'put ''Mzc4ODUsMzc4ODksMzc4OTAsMzc4OTIsMzc4OTYsMzc4OTcsMzc5MDEsMzc5MDIsMzc5MDMsMzc5MDksMzc5MTAsMzc5MTEsMzc5MTksMzc5MzQsMzc5MzUsMzc5MzcsMzc5MzgsMzc5MzksMzc5NDAsMzc5NDcsMzc5NTEsMzc5NDksMzc5NTUsMzc5NTcsMzc5NjAsMzc5NjIsMzc5NjQsMzc5''@;'; put 'put ''NzMsMzc5NzcsMzc5ODAsMzc5ODMsMzc5ODUsMzc5ODcsMzc5OTIsMzc5OTUsMzc5OTcsMzc5OTgsMzc5OTksMzgwMDEsMzgwMDIsMzgwMjAsMzgwMTksMzgyNjQsMzgyNjUsMzgyNzAsMzgyNzYsMzgyODAsMzgyODQsMzgyODUsMzgyODYsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDUsMzgzMTAs''@;'; put 'put ''MzgzMTMsMzgzMTUsMzgzMTYsMzgzMjQsMzgzMjYsMzgzMzAsMzgzMzMsMzgzMzUsMzgzNDIsMzgzNDQsMzgzNDUsMzgzNDcsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNjEsMzgzNjIsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNzIsMzgzNzQsMzg0MjksMzg0MzAsMzg0MzQsMzg0''@;'; put 'put ''MzYsMzg0MzcsMzg0MzgsMzg0NDQsMzg0NDksMzg0NTEsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjAsMzg0NjEsMzg0NjUsMzg0ODIsMzg0ODQsMzg0ODYsMzg0ODcsMzg0ODgsMzg0OTcsMzg1MTAsMzg1MTYsMzg1MjMsMzg1MjQsMzg1MjYsMzg1MjcsMzg1MjksMzg1MzAsMzg1MzEs''@;'; put 'put ''Mzg1MzIsMzg1MzcsMzg1NDUsMzg1NTAsMzg1NTQsMzg1NTcsMzg1NTksMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjksMzg1NzQsMzg1NzUsMzg1NzksMzg1ODYsMzg2MDIsMzg2MTAsMjM5ODYsMzg2MTYsMzg2MTgsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MzMsMzg2MzksMzg2NDEsMzg2NTAsMzg2''@;'; put 'put ''NTgsMzg2NTksMzg2NjEsMzg2NjUsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODksMzg2OTAsMzg2OTEsMzg2OTYsMzg3MDUsMzg3MDcsMzg3MjEsMzg3MjMsMzg3MzAsMzg3MzQsMzg3MzUsMzg3NDEsMzg3NDMsMzg3NDQsMzg3NDYsMzg3NDcsMzg3NTUsMzg3NTksMzg3NjIsMzg3NjYsMzg3NzEs''@;'; put 'put ''Mzg3NzQsMzg3NzUsMzg3NzYsMzg3NzksMzg3ODEsMzg3ODMsMzg3ODQsMzg3OTMsMzg4MDUsMzg4MDYsMzg4MDcsMzg4MDksMzg4MTAsMzg4MTQsMzg4MTUsMzg4MTgsMzg4MjgsMzg4MzAsMzg4MzMsMzg4MzQsMzg4MzcsMzg4MzgsMzg4NDAsMzg4NDEsMzg4NDIsMzg4NDQsMzg4NDYsMzg4''@;'; put 'put ''NDcsMzg4NDksMzg4NTIsMzg4NTMsMzg4NTUsMzg4NTcsMzg4NTgsMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjQsMzg4NjUsMzg4NjgsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzcsMzg4NzgsMzg4ODAsMzg4NzUsMzg4ODEsMzg4ODQsMzg4OTUsMzg4OTcsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDYs''@;'; put 'put ''Mzg5MTksMzg5MjIsMzg5MzcsMzg5MjUsMzg5MjYsMzg5MzIsMzg5MzQsMzg5NDAsMzg5NDIsMzg5NDQsMzg5NDcsMzg5NTAsMzg5NTUsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjIsMzg5NjMsMzg5NjUsMzg5NDksMzg5NzQsMzg5ODAsMzg5ODMsMzg5ODYsMzg5OTMsMzg5OTQsMzg5OTUsMzg5''@;'; put 'put ''OTgsMzg5OTksMzkwMDEsMzkwMDIsMzkwMTAsMzkwMTEsMzkwMTMsMzkwMTQsMzkwMTgsMzkwMjAsMzkwODMsMzkwODUsMzkwODYsMzkwODgsMzkwOTIsMzkwOTUsMzkwOTYsMzkwOTgsMzkwOTksMzkxMDMsMzkxMDYsMzkxMDksMzkxMTIsMzkxMTYsMzkxMzcsMzkxMzksMzkxNDEsMzkxNDIs''@;'; put 'put ''MzkxNDMsMzkxNDYsMzkxNTUsMzkxNTgsMzkxNzAsMzkxNzUsMzkxNzYsMzkxODUsMzkxODksMzkxOTAsMzkxOTEsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTksMzkyMDIsMzkyMDYsMzkyMDcsMzkyMTEsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjUsMzkyMjYsMzkyMjcsMzky''@;'; put 'put ''MjgsMzkyMzIsMzkyMzMsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDUsMzkyNDYsMzkyNTIsMzkyNTYsMzkyNTcsMzkyNTksMzkyNjAsMzkyNjIsMzkyNjMsMzkyNjQsMzkzMjMsMzkzMjUsMzkzMjcsMzkzMzQsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDksMzkzNTMsMzkzNTQsMzkzNTcsMzkzNTks''@;'; put 'put ''MzkzNjMsMzkzNjksMzkzNzksMzkzODAsMzkzODUsMzkzODYsMzkzODgsMzkzOTAsMzkzOTksMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDgsMzk0MTIsMzk0MTMsMzk0MTcsMzk0MjEsMzk0MjIsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MzUsMzk0MzYsMzk0NDAsMzk0NDEsMzk0NDYsMzk0NTQsMzk0''@;'; put 'put ''NTYsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjMsMzk0NjksMzk0NzAsMzk0NzUsMzk0NzcsMzk0NzgsMzk0ODAsMzk0OTUsMzk0ODksMzk0OTIsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDIsMzk1MDUsMzk1MDgsMzk1MTAsMzk1MTcsMzk1OTQsMzk1OTYsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDQs''@;'; put 'put ''Mzk2MDUsMzk2MDYsMzk2MDksMzk2MTEsMzk2MTQsMzk2MTUsMzk2MTcsMzk2MTksMzk2MjIsMzk2MjQsMzk2MzAsMzk2MzIsMzk2MzQsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDMsMzk2NDQsMzk2NDgsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTcsMzk2NjAsMzk2NjYsMzk2NjcsMzk2NjksMzk2''@;'; put 'put ''NzMsMzk2NzQsMzk2NzcsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODMsMzk2ODQsMzk2ODUsMzk2ODgsMzk2ODksMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTgsMzk3MDIsMzk3MDUsMzk3MDcsMzk3MDgsMzk3MTIsMzk3MTgsMzk3MjMsMzk3MjUsMzk3MzEsMzk3MzIs''@;'; put 'put ''Mzk3MzMsMzk3MzUsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NTIsMzk3NTUsMzk3NTYsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NzEsMzk3NzQsMzk3NzcsMzk3NzksMzk3ODEsMzk3ODIsMzk3ODQsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTUsMzk3OTcsMzk3OTksMzk4MDAsMzk4''@;'; put 'put ''MDEsMzk4MDcsMzk4MDgsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjEsMzk4MjMsMzk4MjQsMzk4MjgsMzk4MzQsMzk4MzcsMzk4MzgsMzk4NDYsMzk4NDcsMzk4NDksMzk4NTIsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NjMsMzk4NjQsMzk4NjcsMzk4Njgs''@;'; put 'put ''Mzk4NzAsMzk4NzEsMzk4NzMsMzk4NzksMzk4ODAsMzk4ODYsMzk4ODgsMzk4OTUsMzk4OTYsMzk5MDEsMzk5MDMsMzk5MDksMzk5MTEsMzk5MTQsMzk5MTUsMzk5MTksMzk5MjMsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzMsMzk5MzUsMzk5MzYsMzk5MzgsMzk5NDcsMzk5NTEsMzk5''@;'; put 'put ''NTMsMzk5NTgsMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjQsMzk5NjYsMzk5NzAsMzk5NzEsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5ODUsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTcsNDAwMDEsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDksNDAwMTAsNDAwMTQsNDAwMTUsNDAwMTYs''@;'; put 'put ''NDAwMTksNDAwMjAsNDAwMjIsNDAwMjQsNDAwMjcsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzUsNDAwNDEsNDAwNDIsNDAwMjgsNDAwNDMsNDAwNDAsNDAwNDYsNDAwNDgsNDAwNTAsNDAwNTMsNDAwNTUsNDAwNTksNDAxNjYsNDAxNzgsNDAxODMsNDAxODUsNDAyMDMsNDAxOTQsNDAyMDksNDAy''@;'; put 'put ''MTUsNDAyMTYsNDAyMjAsNDAyMjEsNDAyMjIsNDAyMzksNDAyNDAsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNTAsNDAyNTIsNDAyNjEsNDAyNTMsNDAyNTgsNDAyNTksNDAyNjMsNDAyNjYsNDAyNzUsNDAyNzYsNDAyODcsNDAyOTEsNDAyOTAsNDAyOTMsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDQs''@;'; put 'put ''NDAzMTAsNDAzMTEsNDAzMTUsNDAzMTYsNDAzMTgsNDAzMjMsNDAzMjQsNDAzMjYsNDAzMzAsNDAzMzMsNDAzMzQsNDAzMzgsNDAzMzksNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNTMsNDAzNjIsNDAzNjQsNDAzNjYsNDAzNjksNDAzNzMsNDAzNzcsNDAzODAsNDAzODMsNDAzODcsNDAz''@;'; put 'put ''OTEsNDAzOTMsNDAzOTQsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MTAsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MjEsNDA0MjMsNDA0MjUsNDA0MjcsNDA0MzAsNDA0MzIsNDA0MzUsNDA0MzYsNDA0NDYsNDA0NTgsNDA0NTAsNDA0NTUsNDA0NjIsNDA0NjQsNDA0NjUsNDA0NjYsNDA0Njks''@;'; put 'put ''NDA0NzAsNDA0NzMsNDA0NzYsNDA0NzcsNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzYsNDA1NzgsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODMsNDA1OTAsNDA1OTEsNDA1OTgsNDA2MDAsNDA2MDMsNDA2MDYsNDA2MTIsNDA2MTYsNDA2MjAsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjcsNDA2MjgsNDA2''@;'; put 'put ''MjksNDA2NDYsNDA2NDgsNDA2NTEsNDA2NjEsNDA2NzEsNDA2NzYsNDA2NzksNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTMsNDA2OTYsNDA3MDMsNDA3MDYsNDA3MDcsNDA3MTMsNDA3MTksNDA3MjAsNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjYsNDA3MjcsNDA3Mjks''@;'; put 'put ''NDA3MzAsNDA3MzEsNDA3MzUsNDA3MzgsNDA3NDIsNDA3NDYsNDA3NDcsNDA3NTEsNDA3NTMsNDA3NTQsNDA3NTYsNDA3NTksNDA3NjEsNDA3NjIsNDA3NjQsNDA3NjUsNDA3NjcsNDA3NjksNDA3NzEsNDA3NzIsNDA3NzMsNDA3NzQsNDA3NzUsNDA3ODcsNDA3ODksNDA3OTAsNDA3OTEsNDA3''@;'; put 'put ''OTIsNDA3OTQsNDA3OTcsNDA3OTgsNDA4MDgsNDA4MDksNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTksNDA4MjEsNDA4MjYsNDA4MjksNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTIsNDA4NTQsNDA4NTUsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjksbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxpYm04NjY6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEw''@;'; put 'put ''NjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDk2MTcsOTYxOCw5NjE5LDk0NzQsOTUwOCw5NTY5LDk1NzAsOTU1OCw5NTU3LDk1''@;'; put 'put ''NzEsOTU1Myw5NTU5LDk1NjUsOTU2NCw5NTYzLDk0ODgsOTQ5Miw5NTI0LDk1MTYsOTUwMCw5NDcyLDk1MzIsOTU2Niw5NTY3LDk1NjIsOTU1Niw5NTc3LDk1NzQsOTU2OCw5NTUyLDk1ODAsOTU3NSw5NTc2LDk1NzIsOTU3Myw5NTYxLDk1NjAsOTU1NCw5NTU1LDk1NzksOTU3OCw5NDk2LDk0''@;'; put 'put ''ODQsOTYwOCw5NjA0LDk2MTIsOTYxNiw5NjAwLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTAyNSwxMTA1LDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzOCwxMTE4LDE3Niw4NzI5LDE4Myw4NzMw''@;'; put 'put ''LDg0NzAsMTY0LDk2MzIsMTYwXSwiaXNvLTg4NTktMiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYw''@;'; put 'put ''LDI2MCw3MjgsMzIxLDE2NCwzMTcsMzQ2LDE2NywxNjgsMzUyLDM1MCwzNTYsMzc3LDE3MywzODEsMzc5LDE3NiwyNjEsNzMxLDMyMiwxODAsMzE4LDM0Nyw3MTEsMTg0LDM1MywzNTEsMzU3LDM3OCw3MzMsMzgyLDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEs''@;'; put 'put ''MjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIwLDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwy''@;'; put 'put ''NDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJpc28tODg1OS0zIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUy''@;'; put 'put ''LDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjk0LDcyOCwxNjMsMTY0LG51bGwsMjkyLDE2NywxNjgsMzA0LDM1MCwyODYsMzA4LDE3MyxudWxsLDM3OSwxNzYsMjk1LDE3OCwxNzksMTgwLDE4MSwyOTMsMTgzLDE4NCwzMDUsMzUxLDI4NywzMDksMTg5LG51bGwsMzgwLDE5Miwx''@;'; put 'put ''OTMsMTk0LG51bGwsMTk2LDI2NiwyNjQsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsbnVsbCwyMDksMjEwLDIxMSwyMTIsMjg4LDIxNCwyMTUsMjg0LDIxNywyMTgsMjE5LDIyMCwzNjQsMzQ4LDIyMywyMjQsMjI1LDIyNixudWxsLDIyOCwyNjcsMjY1LDIzMSwyMzIsMjMz''@;'; put 'put ''LDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LG51bGwsMjQxLDI0MiwyNDMsMjQ0LDI4OSwyNDYsMjQ3LDI4NSwyNDksMjUwLDI1MSwyNTIsMzY1LDM0OSw3MjldLCJpc28tODg1OS00IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIs''@;'; put 'put ''MTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDMxMiwzNDIsMTY0LDI5NiwzMTUsMTY3LDE2OCwzNTIsMjc0LDI5MCwzNTgsMTczLDM4MSwxNzUsMTc2LDI2MSw3MzEsMzQzLDE4MCwyOTcsMzE2LDcxMSwx''@;'; put 'put ''ODQsMzUzLDI3NSwyOTEsMzU5LDMzMCwzODIsMzMxLDI1NiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDI5OCwyNzIsMzI1LDMzMiwzMTAsMjEyLDIxMywyMTQsMjE1LDIxNiwzNzAsMjE4LDIxOSwyMjAsMzYwLDM2MiwyMjMsMjU3LDIy''@;'; put 'put ''NSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4MSwyMzUsMjc5LDIzNywyMzgsMjk5LDI3MywzMjYsMzMzLDMxMSwyNDQsMjQ1LDI0NiwyNDcsMjQ4LDM3MSwyNTAsMjUxLDI1MiwzNjEsMzYzLDcyOV0sImlzby04ODU5LTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQs''@;'; put 'put ''MTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwx''@;'; put 'put ''NzMsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEw''@;'; put 'put ''NzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDEx''@;'; put 'put ''MDMsODQ3MCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxNjcsMTExOCwxMTE5XSwiaXNvLTg4NTktNiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQs''@;'; put 'put ''MTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsbnVsbCxudWxsLDE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NDgsMTczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU2MyxudWxsLG51bGwsbnVsbCwxNTY3LG51bGwsMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5''@;'; put 'put ''MCwxNTkxLDE1OTIsMTU5MywxNTk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjAwLDE2MDEsMTYwMiwxNjAzLDE2MDQsMTYwNSwxNjA2LDE2MDcsMTYwOCwxNjA5LDE2MTAsMTYxMSwxNjEyLDE2MTMsMTYxNCwxNjE1LDE2MTYsMTYxNywxNjE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJpc28tODg1OS03IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQs''@;'; put 'put ''MTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIxNiw4MjE3LDE2Myw4MzY0LDgzNjcsMTY2LDE2NywxNjgsMTY5LDg5MCwxNzEsMTcyLDE3MyxudWxsLDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCw5MDEsOTAyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0''@;'; put 'put ''LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1''@;'; put 'put ''LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwiaXNvLTg4NTktOCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQs''@;'; put 'put ''MTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUs''@;'; put 'put ''MjQ3LDE4NywxODgsMTg5LDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsODIxNSwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGws''@;'; put 'put ''ODIwNiw4MjA3LG51bGxdLCJpc28tODg1OS0xMCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2''@;'; put 'put ''MCwyNzQsMjkwLDI5OCwyOTYsMzEwLDE2NywzMTUsMjcyLDM1MiwzNTgsMzgxLDE3MywzNjIsMzMwLDE3NiwyNjEsMjc1LDI5MSwyOTksMjk3LDMxMSwxODMsMzE2LDI3MywzNTMsMzU5LDM4Miw4MjEzLDM2MywzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4''@;'; put 'put ''MCwyMDMsMjc4LDIwNSwyMDYsMjA3LDIwOCwzMjUsMzMyLDIxMSwyMTIsMjEzLDIxNCwzNjAsMjE2LDM3MCwyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyMzksMjQwLDMyNiwzMzMsMjQz''@;'; put 'put ''LDI0NCwyNDUsMjQ2LDM2MSwyNDgsMzcxLDI1MCwyNTEsMjUyLDI1MywyNTQsMzEyXSwiaXNvLTg4NTktMTMiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIs''@;'; put 'put ''MTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjIxLDE2MiwxNjMsMTY0LDgyMjIsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSw4MjIwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMw''@;'; put 'put ''MiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgsMzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4''@;'; put 'put ''LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0NywzNzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsODIxN10sImlzby04ODU5LTE0IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQz''@;'; put 'put ''LDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsNzY4Miw3NjgzLDE2MywyNjYsMjY3LDc2OTAsMTY3LDc4MDgsMTY5LDc4MTAsNzY5MSw3OTIyLDE3MywxNzQsMzc2LDc3MTAsNzcxMSwyODgsMjg5LDc3NDQsNzc0NSwx''@;'; put 'put ''ODIsNzc2Niw3ODA5LDc3NjcsNzgxMSw3Nzc2LDc5MjMsNzgxMiw3ODEzLDc3NzcsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDM3MiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCw3Nzg2LDIxNiwyMTcsMjE4LDIxOSwyMjAs''@;'; put 'put ''MjIxLDM3NCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDM3MywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0Niw3Nzg3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDM3NSwyNTVdLCJpc28tODg1OS0xNSI6WzEyOCwxMjks''@;'; put 'put ''MTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjQsMTY1LDM1MiwxNjcsMzUzLDE2OSwxNzAs''@;'; put 'put ''MTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMzgxLDE4MSwxODIsMTgzLDM4MiwxODUsMTg2LDE4NywzMzgsMzM5LDM3NiwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwy''@;'; put 'put ''MTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1''@;'; put 'put ''MywyNTQsMjU1XSwiaXNvLTg4NTktMTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjYx''@;'; put 'put ''LDMyMSw4MzY0LDgyMjIsMzUyLDE2NywzNTMsMTY5LDUzNiwxNzEsMzc3LDE3MywzNzgsMzc5LDE3NiwxNzcsMjY4LDMyMiwzODEsODIyMSwxODIsMTgzLDM4MiwyNjksNTM3LDE4NywzMzgsMzM5LDM3NiwzODAsMTkyLDE5MywxOTQsMjU4LDE5NiwyNjIsMTk4LDE5OSwyMDAsMjAxLDIwMiwy''@;'; put 'put ''MDMsMjA0LDIwNSwyMDYsMjA3LDI3MiwzMjMsMjEwLDIxMSwyMTIsMzM2LDIxNCwzNDYsMzY4LDIxNywyMTgsMjE5LDIyMCwyODAsNTM4LDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDI2MywyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjczLDMyNCwyNDIsMjQzLDI0''@;'; put 'put ''NCwzMzcsMjQ2LDM0NywzNjksMjQ5LDI1MCwyNTEsMjUyLDI4MSw1MzksMjU1XSwia29pOC1yIjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcy''@;'; put 'put ''OSw4NzMwLDg3NzYsODgwNCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsOTU3MCw5NTcxLDk1NzIsOTU3''@;'; put 'put ''Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAw''@;'; put 'put ''LDEwOTksMTA3OSwxMDk2LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3''@;'; put 'put ''LDEwNDcsMTA2NCwxMDY5LDEwNjUsMTA2MywxMDY2XSwia29pOC11IjpbOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw4OTkyLDk2MzIsODcyOSw4NzMwLDg3NzYsODgw''@;'; put 'put ''NCw4ODA1LDE2MCw4OTkzLDE3NiwxNzgsMTgzLDI0Nyw5NTUyLDk1NTMsOTU1NCwxMTA1LDExMDgsOTU1NiwxMTEwLDExMTEsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDExNjksMTExOCw5NTY2LDk1NjcsOTU2OCw5NTY5LDEwMjUsMTAyOCw5NTcxLDEwMzAsMTAzMSw5NTc0LDk1NzUsOTU3''@;'; put 'put ''Niw5NTc3LDk1NzgsMTE2OCwxMDM4LDE2OSwxMTAyLDEwNzIsMTA3MywxMDk0LDEwNzYsMTA3NywxMDkyLDEwNzUsMTA5MywxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTEwMywxMDg4LDEwODksMTA5MCwxMDkxLDEwNzgsMTA3NCwxMTAwLDEwOTksMTA3OSwxMDk2''@;'; put 'put ''LDExMDEsMTA5NywxMDk1LDEwOTgsMTA3MCwxMDQwLDEwNDEsMTA2MiwxMDQ0LDEwNDUsMTA2MCwxMDQzLDEwNjEsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNzEsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDQ2LDEwNDIsMTA2OCwxMDY3LDEwNDcsMTA2NCwxMDY5''@;'; put 'put ''LDEwNjUsMTA2MywxMDY2XSxtYWNpbnRvc2g6WzE5NiwxOTcsMTk5LDIwMSwyMDksMjE0LDIyMCwyMjUsMjI0LDIyNiwyMjgsMjI3LDIyOSwyMzEsMjMzLDIzMiwyMzQsMjM1LDIzNywyMzYsMjM4LDIzOSwyNDEsMjQzLDI0MiwyNDQsMjQ2LDI0NSwyNTAsMjQ5LDI1MSwyNTIsODIyNCwxNzYs''@;'; put 'put ''MTYyLDE2MywxNjcsODIyNiwxODIsMjIzLDE3NCwxNjksODQ4MiwxODAsMTY4LDg4MDAsMTk4LDIxNiw4NzM0LDE3Nyw4ODA0LDg4MDUsMTY1LDE4MSw4NzA2LDg3MjEsODcxOSw5NjAsODc0NywxNzAsMTg2LDkzNywyMzAsMjQ4LDE5MSwxNjEsMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEs''@;'; put 'put ''MTg3LDgyMzAsMTYwLDE5MiwxOTUsMjEzLDMzOCwzMzksODIxMSw4MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDk2NzQsMjU1LDM3Niw4MjYwLDgzNjQsODI0OSw4MjUwLDY0MjU3LDY0MjU4LDgyMjUsMTgzLDgyMTgsODIyMiw4MjQwLDE5NCwyMDIsMTkzLDIwMywyMDAsMjA1LDIwNiwy''@;'; put 'put ''MDcsMjA0LDIxMSwyMTIsNjM3NDMsMjEwLDIxOCwyMTksMjE3LDMwNSw3MTAsNzMyLDE3NSw3MjgsNzI5LDczMCwxODQsNzMzLDczMSw3MTFdLCJ3aW5kb3dzLTg3NCI6WzgzNjQsMTI5LDEzMCwxMzEsMTMyLDgyMzAsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0''@;'; put 'put ''NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDM1ODUsMzU4NiwzNTg3LDM1ODgsMzU4OSwzNTkwLDM1OTEsMzU5MiwzNTkzLDM1OTQsMzU5NSwzNTk2LDM1OTcsMzU5OCwzNTk5LDM2MDAsMzYwMSwzNjAyLDM2''@;'; put 'put ''MDMsMzYwNCwzNjA1LDM2MDYsMzYwNywzNjA4LDM2MDksMzYxMCwzNjExLDM2MTIsMzYxMywzNjE0LDM2MTUsMzYxNiwzNjE3LDM2MTgsMzYxOSwzNjIwLDM2MjEsMzYyMiwzNjIzLDM2MjQsMzYyNSwzNjI2LDM2MjcsMzYyOCwzNjI5LDM2MzAsMzYzMSwzNjMyLDM2MzMsMzYzNCwzNjM1LDM2''@;'; put 'put ''MzYsMzYzNywzNjM4LDM2MzksMzY0MCwzNjQxLDM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCwzNjQ3LDM2NDgsMzY0OSwzNjUwLDM2NTEsMzY1MiwzNjUzLDM2NTQsMzY1NSwzNjU2LDM2NTcsMzY1OCwzNjU5LDM2NjAsMzY2MSwzNjYyLDM2NjMsMzY2NCwzNjY1LDM2NjYsMzY2NywzNjY4LDM2''@;'; put 'put ''NjksMzY3MCwzNjcxLDM2NzIsMzY3MywzNjc0LDM2NzUsbnVsbCxudWxsLG51bGwsbnVsbF0sIndpbmRvd3MtMTI1MCI6WzgzNjQsMTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMzUyLDgyNDksMzQ2LDM1NiwzODEsMzc3LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIx''@;'; put 'put ''LDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDM1Myw4MjUwLDM0NywzNTcsMzgyLDM3OCwxNjAsNzExLDcyOCwzMjEsMTY0LDI2MCwxNjYsMTY3LDE2OCwxNjksMzUwLDE3MSwxNzIsMTczLDE3NCwzNzksMTc2LDE3Nyw3MzEsMzIyLDE4MCwxODEsMTgyLDE4MywxODQsMjYxLDM1MSwxODcsMzE3''@;'; put 'put ''LDczMywzMTgsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQs''@;'; put 'put ''MjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sIndpbmRvd3MtMTI1MSI6WzEwMjYsMTAyNyw4MjE4LDExMDcsODIyMiw4MjMwLDgyMjQsODIyNSw4MzY0''@;'; put 'put ''LDgyNDAsMTAzMyw4MjQ5LDEwMzQsMTAzNiwxMDM1LDEwMzksMTEwNiw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDExMTMsODI1MCwxMTE0LDExMTYsMTExNSwxMTE5LDE2MCwxMDM4LDExMTgsMTAzMiwxNjQsMTE2OCwxNjYsMTY3LDEwMjUsMTY5LDEwMjgs''@;'; put 'put ''MTcxLDE3MiwxNzMsMTc0LDEwMzEsMTc2LDE3NywxMDMwLDExMTAsMTE2OSwxODEsMTgyLDE4MywxMTA1LDg0NzAsMTEwOCwxODcsMTExMiwxMDI5LDExMDksMTExMSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMs''@;'; put 'put ''MTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYs''@;'; put 'put ''MTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzXSwid2luZG93cy0xMjUyIjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQx''@;'; put 'put ''LDM4MSwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywzODIsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgw''@;'; put 'put ''LDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEs''@;'; put 'put ''MjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1XSwid2luZG93cy0xMjUzIjpbODM2NCwxMjksODIx''@;'; put 'put ''OCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCw5MDEsOTAyLDE2MywxNjQsMTY1LDE2NiwxNjcs''@;'; put 'put ''MTY4LDE2OSxudWxsLDE3MSwxNzIsMTczLDE3NCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsMTgxLDE4MiwxODMsOTA0LDkwNSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4''@;'; put 'put ''LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5''@;'; put 'put ''LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sIndpbmRvd3MtMTI1NCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1''@;'; put 'put ''Myw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5''@;'; put 'put ''NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyODYsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMzA0LDM1MCwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2''@;'; put 'put ''LDIzNywyMzgsMjM5LDI4NywyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwzMDUsMzUxLDI1NV0sIndpbmRvd3MtMTI1NSI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQz''@;'; put 'put ''LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2MiwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4''@;'; put 'put ''MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLDE5MSwxNDU2LDE0NTcsMTQ1OCwxNDU5LDE0NjAsMTQ2MSwxNDYyLDE0NjMsMTQ2NCwxNDY1LDE0NjYsMTQ2NywxNDY4LDE0NjksMTQ3MCwxNDcxLDE0NzIsMTQ3MywxNDc0LDE0NzUsMTUyMCwxNTIxLDE1MjIsMTUyMywxNTI0LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUwOSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1''@;'; put 'put ''MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwid2luZG93cy0xMjU2IjpbODM2NCwxNjYyLDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTY1Nyw4MjQ5LDMzOCwxNjcwLDE2ODgsMTY3MiwxNzExLDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTcw''@;'; put 'put ''NSw4NDgyLDE2ODEsODI1MCwzMzksODIwNCw4MjA1LDE3MjIsMTYwLDE1NDgsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzI2LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE1NjMsMTg3LDE4OCwxODksMTkwLDE1''@;'; put 'put ''NjcsMTcyOSwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDIxNSwxNTkxLDE1OTIsMTU5MywxNTk0LDE2MDAsMTYwMSwxNjAyLDE2MDMsMjI0''@;'; put 'put ''LDE2MDQsMjI2LDE2MDUsMTYwNiwxNjA3LDE2MDgsMjMxLDIzMiwyMzMsMjM0LDIzNSwxNjA5LDE2MTAsMjM4LDIzOSwxNjExLDE2MTIsMTYxMywxNjE0LDI0NCwxNjE1LDE2MTYsMjQ3LDE2MTcsMjQ5LDE2MTgsMjUxLDI1Miw4MjA2LDgyMDcsMTc0Nl0sIndpbmRvd3MtMTI1NyI6WzgzNjQs''@;'; put 'put ''MTI5LDgyMTgsMTMxLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE2OCw3MTEsMTg0LDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNzUsNzMxLDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCxudWxs''@;'; put 'put ''LDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDI0OCwxODUsMzQzLDE4NywxODgsMTg5LDE5MCwyMzAsMjYwLDMwMiwyNTYsMjYyLDE5NiwxOTcsMjgwLDI3NCwyNjgsMjAxLDM3NywyNzgsMjkwLDMxMCwyOTgs''@;'; put 'put ''MzE1LDM1MiwzMjMsMzI1LDIxMSwzMzIsMjEzLDIxNCwyMTUsMzcwLDMyMSwzNDYsMzYyLDIyMCwzNzksMzgxLDIyMywyNjEsMzAzLDI1NywyNjMsMjI4LDIyOSwyODEsMjc1LDI2OSwyMzMsMzc4LDI3OSwyOTEsMzExLDI5OSwzMTYsMzUzLDMyNCwzMjYsMjQzLDMzMywyNDUsMjQ2LDI0Nywz''@;'; put 'put ''NzEsMzIyLDM0NywzNjMsMjUyLDM4MCwzODIsNzI5XSwid2luZG93cy0xMjU4IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0''@;'; put 'put ''ODIsMTU0LDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5Mywx''@;'; put 'put ''OTQsMjU4LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsNzY4LDIwNSwyMDYsMjA3LDI3MiwyMDksNzc3LDIxMSwyMTIsNDE2LDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCw0MzEsNzcxLDIyMywyMjQsMjI1LDIyNiwyNTksMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIz''@;'; put 'put ''NSw3NjksMjM3LDIzOCwyMzksMjczLDI0MSw4MDMsMjQzLDI0NCw0MTcsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDQzMiw4MzYzLDI1NV0sIngtbWFjLWN5cmlsbGljIjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1''@;'; put 'put ''MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDgyMjQsMTc2LDExNjgsMTYzLDE2Nyw4MjI2LDE4MiwxMDMwLDE3NCwxNjksODQ4MiwxMDI2LDExMDYsODgwMCwxMDI3''@;'; put 'put ''LDExMDcsODczNCwxNzcsODgwNCw4ODA1LDExMTAsMTgxLDExNjksMTAzMiwxMDI4LDExMDgsMTAzMSwxMTExLDEwMzMsMTExMywxMDM0LDExMTQsMTExMiwxMDI5LDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxMDM1LDExMTUsMTAzNiwxMTE2LDExMDksODIxMSw4''@;'; put 'put ''MjEyLDgyMjAsODIyMSw4MjE2LDgyMTcsMjQ3LDgyMjIsMTAzOCwxMTE4LDEwMzksMTExOSw4NDcwLDEwMjUsMTEwNSwxMTAzLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEw''@;'; put 'put ''OTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsODM2NF19fSh0aGlzfHx7fSl9LDY0MzE4OmZ1bmN0aW9uKGNlLEosYil7IWZ1bmN0aW9uKEQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKGtlLF90LG50KXtyZXR1cm4gX3Q8PWtl''@;'; put 'put ''JiZrZTw9bnR9Y2UuZXhwb3J0cyYmIURbImVuY29kaW5nLWluZGV4ZXMiXSYmKERbImVuY29kaW5nLWluZGV4ZXMiXT1iKDY3OTUxKVsiZW5jb2RpbmctaW5kZXhlcyJdKTt2YXIgTj1NYXRoLmZsb29yO2Z1bmN0aW9uIHcoa2Upe2lmKHZvaWQgMD09PWtlKXJldHVybnt9O2lmKGtlPT09T2Jq''@;'; put 'put ''ZWN0KGtlKSlyZXR1cm4ga2U7dGhyb3cgVHlwZUVycm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCB0byBkaWN0aW9uYXJ5Iil9ZnVuY3Rpb24gUihrZSl7cmV0dXJuIDA8PWtlJiZrZTw9MTI3fXZhciBqPVIsUD0tMTtmdW5jdGlvbiBMKGtlKXt0aGlzLnRva2Vucz1bXS5zbGljZS5j''@;'; put 'put ''YWxsKGtlKSx0aGlzLnRva2Vucy5yZXZlcnNlKCl9TC5wcm90b3R5cGU9e2VuZE9mU3RyZWFtOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudG9rZW5zLmxlbmd0aH0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnMucG9wKCk6UH0scHJlcGVuZDpm''@;'; put 'put ''dW5jdGlvbihrZSl7aWYoQXJyYXkuaXNBcnJheShrZSkpZm9yKHZhciBfdD1rZTtfdC5sZW5ndGg7KXRoaXMudG9rZW5zLnB1c2goX3QucG9wKCkpO2Vsc2UgdGhpcy50b2tlbnMucHVzaChrZSl9LHB1c2g6ZnVuY3Rpb24oa2Upe2lmKEFycmF5LmlzQXJyYXkoa2UpKWZvcih2YXIgX3Q9a2U7''@;'; put 'put ''X3QubGVuZ3RoOyl0aGlzLnRva2Vucy51bnNoaWZ0KF90LnNoaWZ0KCkpO2Vsc2UgdGhpcy50b2tlbnMudW5zaGlmdChrZSl9fTt2YXIgWT0tMTtmdW5jdGlvbiBCKGtlLF90KXtpZihrZSl0aHJvdyBUeXBlRXJyb3IoIkRlY29kZXIgZXJyb3IiKTtyZXR1cm4gX3R8fDY1NTMzfWZ1bmN0aW9u''@;'; put 'put ''IFcoa2Upe3Rocm93IFR5cGVFcnJvcigiVGhlIGNvZGUgcG9pbnQgIitrZSsiIGNvdWxkIG5vdCBiZSBlbmNvZGVkLiIpfWZ1bmN0aW9uIFEoa2Upe3JldHVybiBrZT1TdHJpbmcoa2UpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0''@;'; put 'put ''ZSxrZSk/dGVba2VdOm51bGx9dmFyIFg9W3tlbmNvZGluZ3M6W3tsYWJlbHM6WyJ1bmljb2RlLTEtMS11dGYtOCIsInV0Zi04IiwidXRmOCJdLG5hbWU6IlVURi04In1dLGhlYWRpbmc6IlRoZSBFbmNvZGluZyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyI4NjYiLCJjcDg2NiIsImNzaWJtODY2''@;'; put 'put ''IiwiaWJtODY2Il0sbmFtZToiSUJNODY2In0se2xhYmVsczpbImNzaXNvbGF0aW4yIiwiaXNvLTg4NTktMiIsImlzby1pci0xMDEiLCJpc284ODU5LTIiLCJpc284ODU5MiIsImlzb184ODU5LTIiLCJpc29fODg1OS0yOjE5ODciLCJsMiIsImxhdGluMiJdLG5hbWU6IklTTy04ODU5LTIifSx7''@;'; put 'put ''bGFiZWxzOlsiY3Npc29sYXRpbjMiLCJpc28tODg1OS0zIiwiaXNvLWlyLTEwOSIsImlzbzg4NTktMyIsImlzbzg4NTkzIiwiaXNvXzg4NTktMyIsImlzb184ODU5LTM6MTk4OCIsImwzIiwibGF0aW4zIl0sbmFtZToiSVNPLTg4NTktMyJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluNCIsImlzby04''@;'; put 'put ''ODU5LTQiLCJpc28taXItMTEwIiwiaXNvODg1OS00IiwiaXNvODg1OTQiLCJpc29fODg1OS00IiwiaXNvXzg4NTktNDoxOTg4IiwibDQiLCJsYXRpbjQiXSxuYW1lOiJJU08tODg1OS00In0se2xhYmVsczpbImNzaXNvbGF0aW5jeXJpbGxpYyIsImN5cmlsbGljIiwiaXNvLTg4NTktNSIsImlz''@;'; put 'put ''by1pci0xNDQiLCJpc284ODU5LTUiLCJpc284ODU5NSIsImlzb184ODU5LTUiLCJpc29fODg1OS01OjE5ODgiXSxuYW1lOiJJU08tODg1OS01In0se2xhYmVsczpbImFyYWJpYyIsImFzbW8tNzA4IiwiY3Npc284ODU5NmUiLCJjc2lzbzg4NTk2aSIsImNzaXNvbGF0aW5hcmFiaWMiLCJlY21h''@;'; put 'put ''LTExNCIsImlzby04ODU5LTYiLCJpc28tODg1OS02LWUiLCJpc28tODg1OS02LWkiLCJpc28taXItMTI3IiwiaXNvODg1OS02IiwiaXNvODg1OTYiLCJpc29fODg1OS02IiwiaXNvXzg4NTktNjoxOTg3Il0sbmFtZToiSVNPLTg4NTktNiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluZ3JlZWsiLCJl''@;'; put 'put ''Y21hLTExOCIsImVsb3RfOTI4IiwiZ3JlZWsiLCJncmVlazgiLCJpc28tODg1OS03IiwiaXNvLWlyLTEyNiIsImlzbzg4NTktNyIsImlzbzg4NTk3IiwiaXNvXzg4NTktNyIsImlzb184ODU5LTc6MTk4NyIsInN1bl9ldV9ncmVlayJdLG5hbWU6IklTTy04ODU5LTcifSx7bGFiZWxzOlsiY3Np''@;'; put 'put ''c284ODU5OGUiLCJjc2lzb2xhdGluaGVicmV3IiwiaGVicmV3IiwiaXNvLTg4NTktOCIsImlzby04ODU5LTgtZSIsImlzby1pci0xMzgiLCJpc284ODU5LTgiLCJpc284ODU5OCIsImlzb184ODU5LTgiLCJpc29fODg1OS04OjE5ODgiLCJ2aXN1YWwiXSxuYW1lOiJJU08tODg1OS04In0se2xh''@;'; put 'put ''YmVsczpbImNzaXNvODg1OThpIiwiaXNvLTg4NTktOC1pIiwibG9naWNhbCJdLG5hbWU6IklTTy04ODU5LTgtSSJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluNiIsImlzby04ODU5LTEwIiwiaXNvLWlyLTE1NyIsImlzbzg4NTktMTAiLCJpc284ODU5MTAiLCJsNiIsImxhdGluNiJdLG5hbWU6IklT''@;'; put 'put ''Ty04ODU5LTEwIn0se2xhYmVsczpbImlzby04ODU5LTEzIiwiaXNvODg1OS0xMyIsImlzbzg4NTkxMyJdLG5hbWU6IklTTy04ODU5LTEzIn0se2xhYmVsczpbImlzby04ODU5LTE0IiwiaXNvODg1OS0xNCIsImlzbzg4NTkxNCJdLG5hbWU6IklTTy04ODU5LTE0In0se2xhYmVsczpbImNzaXNv''@;'; put 'put ''bGF0aW45IiwiaXNvLTg4NTktMTUiLCJpc284ODU5LTE1IiwiaXNvODg1OTE1IiwiaXNvXzg4NTktMTUiLCJsOSJdLG5hbWU6IklTTy04ODU5LTE1In0se2xhYmVsczpbImlzby04ODU5LTE2Il0sbmFtZToiSVNPLTg4NTktMTYifSx7bGFiZWxzOlsiY3Nrb2k4ciIsImtvaSIsImtvaTgiLCJr''@;'; put 'put ''b2k4LXIiLCJrb2k4X3IiXSxuYW1lOiJLT0k4LVIifSx7bGFiZWxzOlsia29pOC1ydSIsImtvaTgtdSJdLG5hbWU6IktPSTgtVSJ9LHtsYWJlbHM6WyJjc21hY2ludG9zaCIsIm1hYyIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuIl0sbmFtZToibWFjaW50b3NoIn0se2xhYmVsczpbImRvcy04''@;'; put 'put ''NzQiLCJpc28tODg1OS0xMSIsImlzbzg4NTktMTEiLCJpc284ODU5MTEiLCJ0aXMtNjIwIiwid2luZG93cy04NzQiXSxuYW1lOiJ3aW5kb3dzLTg3NCJ9LHtsYWJlbHM6WyJjcDEyNTAiLCJ3aW5kb3dzLTEyNTAiLCJ4LWNwMTI1MCJdLG5hbWU6IndpbmRvd3MtMTI1MCJ9LHtsYWJlbHM6WyJj''@;'; put 'put ''cDEyNTEiLCJ3aW5kb3dzLTEyNTEiLCJ4LWNwMTI1MSJdLG5hbWU6IndpbmRvd3MtMTI1MSJ9LHtsYWJlbHM6WyJhbnNpX3gzLjQtMTk2OCIsImFzY2lpIiwiY3AxMjUyIiwiY3A4MTkiLCJjc2lzb2xhdGluMSIsImlibTgxOSIsImlzby04ODU5LTEiLCJpc28taXItMTAwIiwiaXNvODg1OS0x''@;'; put 'put ''IiwiaXNvODg1OTEiLCJpc29fODg1OS0xIiwiaXNvXzg4NTktMToxOTg3IiwibDEiLCJsYXRpbjEiLCJ1cy1hc2NpaSIsIndpbmRvd3MtMTI1MiIsIngtY3AxMjUyIl0sbmFtZToid2luZG93cy0xMjUyIn0se2xhYmVsczpbImNwMTI1MyIsIndpbmRvd3MtMTI1MyIsIngtY3AxMjUzIl0sbmFt''@;'; put 'put ''ZToid2luZG93cy0xMjUzIn0se2xhYmVsczpbImNwMTI1NCIsImNzaXNvbGF0aW41IiwiaXNvLTg4NTktOSIsImlzby1pci0xNDgiLCJpc284ODU5LTkiLCJpc284ODU5OSIsImlzb184ODU5LTkiLCJpc29fODg1OS05OjE5ODkiLCJsNSIsImxhdGluNSIsIndpbmRvd3MtMTI1NCIsIngtY3Ax''@;'; put 'put ''MjU0Il0sbmFtZToid2luZG93cy0xMjU0In0se2xhYmVsczpbImNwMTI1NSIsIndpbmRvd3MtMTI1NSIsIngtY3AxMjU1Il0sbmFtZToid2luZG93cy0xMjU1In0se2xhYmVsczpbImNwMTI1NiIsIndpbmRvd3MtMTI1NiIsIngtY3AxMjU2Il0sbmFtZToid2luZG93cy0xMjU2In0se2xhYmVs''@;'; put 'put ''czpbImNwMTI1NyIsIndpbmRvd3MtMTI1NyIsIngtY3AxMjU3Il0sbmFtZToid2luZG93cy0xMjU3In0se2xhYmVsczpbImNwMTI1OCIsIndpbmRvd3MtMTI1OCIsIngtY3AxMjU4Il0sbmFtZToid2luZG93cy0xMjU4In0se2xhYmVsczpbIngtbWFjLWN5cmlsbGljIiwieC1tYWMtdWtyYWlu''@;'; put 'put ''aWFuIl0sbmFtZToieC1tYWMtY3lyaWxsaWMifV0saGVhZGluZzoiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjaGluZXNlIiwiY3NnYjIzMTIiLCJjc2lzbzU4Z2IyMzEyODAiLCJnYjIzMTIiLCJnYl8yMzEyIiwiZ2JfMjMxMi04MCIsImdi''@;'; put 'put ''ayIsImlzby1pci01OCIsIngtZ2JrIl0sbmFtZToiR0JLIn0se2xhYmVsczpbImdiMTgwMzAiXSxuYW1lOiJnYjE4MDMwIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJiaWc1IiwiYmln''@;'; put 'put ''NS1oa3NjcyIsImNuLWJpZzUiLCJjc2JpZzUiLCJ4LXgtYmlnNSJdLG5hbWU6IkJpZzUifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y3BrZGZtdGphcGFuZXNlIiwiZXVjLWpw''@;'; put 'put ''IiwieC1ldWMtanAiXSxuYW1lOiJFVUMtSlAifSx7bGFiZWxzOlsiY3Npc28yMDIyanAiLCJpc28tMjAyMi1qcCJdLG5hbWU6IklTTy0yMDIyLUpQIn0se2xhYmVsczpbImNzc2hpZnRqaXMiLCJtczkzMiIsIm1zX2thbmppIiwic2hpZnQtamlzIiwic2hpZnRfamlzIiwic2ppcyIsIndpbmRv''@;'; put 'put ''d3MtMzFqIiwieC1zamlzIl0sbmFtZToiU2hpZnRfSklTIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEphcGFuZXNlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y2tyIiwiY3Nrc2M1NjAxMTk4NyIsImV1Yy1rciIsImlzby1pci0xNDkiLCJrb3JlYW4iLCJr''@;'; put 'put ''c19jXzU2MDEtMTk4NyIsImtzX2NfNTYwMS0xOTg5Iiwia3NjNTYwMSIsImtzY181NjAxIiwid2luZG93cy05NDkiXSxuYW1lOiJFVUMtS1IifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2lzbzIwMjJrciIs''@;'; put 'put ''Imh6LWdiLTIzMTIiLCJpc28tMjAyMi1jbiIsImlzby0yMDIyLWNuLWV4dCIsImlzby0yMDIyLWtyIl0sbmFtZToicmVwbGFjZW1lbnQifSx7bGFiZWxzOlsidXRmLTE2YmUiXSxuYW1lOiJVVEYtMTZCRSJ9LHtsYWJlbHM6WyJ1dGYtMTYiLCJ1dGYtMTZsZSJdLG5hbWU6IlVURi0xNkxFIn0s''@;'; put 'put ''e2xhYmVsczpbIngtdXNlci1kZWZpbmVkIl0sbmFtZToieC11c2VyLWRlZmluZWQifV0saGVhZGluZzoiTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzIn1dLHRlPXt9O1guZm9yRWFjaChmdW5jdGlvbihrZSl7a2UuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oX3Qpe190LmxhYmVs''@;'; put 'put ''cy5mb3JFYWNoKGZ1bmN0aW9uKG50KXt0ZVtudF09X3R9KX0pfSk7dmFyIGcscmU9e30sb2U9e307ZnVuY3Rpb24gZ2Uoa2UsX3Qpe3JldHVybiBfdCYmX3Rba2VdfHxudWxsfWZ1bmN0aW9uIF9lKGtlLF90KXt2YXIgbnQ9X3QuaW5kZXhPZihrZSk7cmV0dXJuLTE9PT1udD9udWxsOm50fWZ1''@;'; put 'put ''bmN0aW9uIFRlKGtlKXtpZighKCJlbmNvZGluZy1pbmRleGVzImluIEQpKXRocm93IEVycm9yKCJJbmRleGVzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTtyZXR1cm4gRFsiZW5jb2RpbmctaW5kZXhlcyJdW2tlXX12YXIg''@;'; put 'put ''eCxDPSJ1dGYtOCI7ZnVuY3Rpb24gVChrZSxfdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgVCkpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgJ25ldyc/Iik7a2U9dm9pZCAwIT09a2U/U3RyaW5nKGtlKTpDLF90PXcoX3QpLHRoaXMuX2VuY29k''@;'; put 'put ''aW5nPW51bGwsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2lnbm9yZUJPTT0hMSx0aGlzLl9CT01zZWVuPSExLHRoaXMuX2Vycm9yX21vZGU9InJlcGxhY2VtZW50Iix0aGlzLl9kb19ub3RfZmx1c2g9ITE7dmFyIG50PVEoa2UpO2lmKG51bGw9PT1udHx8InJlcGxhY2VtZW50Ij09PW50Lm5h''@;'; put 'put ''bWUpdGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitrZSk7aWYoIW9lW250Lm5hbWVdKXRocm93IEVycm9yKCJEZWNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dmFyIEplPXRoaXM7cmV0''@;'; put 'put ''dXJuIEplLl9lbmNvZGluZz1udCxfdC5mYXRhbCYmKEplLl9lcnJvcl9tb2RlPSJmYXRhbCIpLF90Lmlnbm9yZUJPTSYmKEplLl9pZ25vcmVCT009ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9SmUuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSx0aGlzLmZh''@;'; put 'put ''dGFsPSJmYXRhbCI9PT1KZS5fZXJyb3JfbW9kZSx0aGlzLmlnbm9yZUJPTT1KZS5faWdub3JlQk9NKSxKZX1mdW5jdGlvbiBWKGtlLF90KXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8i''@;'; put 'put ''KTtpZihfdD13KF90KSx0aGlzLl9lbmNvZGluZz1udWxsLHRoaXMuX2VuY29kZXI9bnVsbCx0aGlzLl9kb19ub3RfZmx1c2g9ITEsdGhpcy5fZmF0YWw9X3QuZmF0YWw/ImZhdGFsIjoicmVwbGFjZW1lbnQiLF90Lk5PTlNUQU5EQVJEX2FsbG93TGVnYWN5RW5jb2Rpbmcpe3ZhciBKZT1RKGtl''@;'; put 'put ''PXZvaWQgMCE9PWtlP1N0cmluZyhrZSk6Qyk7aWYobnVsbD09PUplfHwicmVwbGFjZW1lbnQiPT09SmUubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2tlKTtpZighcmVbSmUubmFtZV0pdGhyb3cgRXJyb3IoIkVuY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3Ug''@;'; put 'put ''Zm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt0aGlzLl9lbmNvZGluZz1KZX1lbHNlIHRoaXMuX2VuY29kaW5nPVEoInV0Zi04Iiksdm9pZCAwIT09a2UmJiJjb25zb2xlImluIEQmJmNvbnNvbGUud2FybigiVGV4dEVuY29kZXIgY29uc3RydWN0b3IgY2Fs''@;'; put 'put ''bGVkIHdpdGggZW5jb2RpbmcgbGFiZWwsIHdoaWNoIGlzIGlnbm9yZWQuIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9dGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpKSx0aGlzfWZ1bmN0aW9uIFUoa2Upe3ZhciBfdD1rZS5mYXRhbCxudD0w''@;'; put 'put ''LEplPTAsbG49MCx5dD0xMjgsU3Q9MTkxO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihEdCxpdCl7aWYoaXQ9PT1QJiYwIT09bG4pcmV0dXJuIGxuPTAsQihfdCk7aWYoaXQ9PT1QKXJldHVybiBZO2lmKDA9PT1sbil7aWYoXyhpdCwwLDEyNykpcmV0dXJuIGl0O2lmKF8oaXQsMTk0LDIyMykpbG49''@;'; put 'put ''MSxudD0zMSZpdDtlbHNlIGlmKF8oaXQsMjI0LDIzOSkpMjI0PT09aXQmJih5dD0xNjApLDIzNz09PWl0JiYoU3Q9MTU5KSxsbj0yLG50PTE1Jml0O2Vsc2V7aWYoIV8oaXQsMjQwLDI0NCkpcmV0dXJuIEIoX3QpOzI0MD09PWl0JiYoeXQ9MTQ0KSwyNDQ9PT1pdCYmKFN0PTE0MyksbG49Myxu''@;'; put 'put ''dD03Jml0fXJldHVybiBudWxsfWlmKCFfKGl0LHl0LFN0KSlyZXR1cm4gbnQ9bG49SmU9MCx5dD0xMjgsU3Q9MTkxLER0LnByZXBlbmQoaXQpLEIoX3QpO2lmKHl0PTEyOCxTdD0xOTEsbnQ9bnQ8PDZ8NjMmaXQsKEplKz0xKSE9PWxuKXJldHVybiBudWxsO3ZhciAkZT1udDtyZXR1cm4gbnQ9''@;'; put 'put ''bG49SmU9MCwkZX19ZnVuY3Rpb24gRShrZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LEplKXtpZihKZT09PVApcmV0dXJuIFk7aWYoaihKZSkpcmV0dXJuIEplO3ZhciBsbix5dDtfKEplLDEyOCwyMDQ3KT8obG49MSx5dD0xOTIpOl8oSmUsMjA0OCw2NTUzNSk/KGxuPTIseXQ9MjI0KTpf''@;'; put 'put ''KEplLDY1NTM2LDExMTQxMTEpJiYobG49Myx5dD0yNDApO2Zvcih2YXIgU3Q9WyhKZT4+NipsbikreXRdO2xuPjA7KVN0LnB1c2goMTI4fDYzJkplPj42Kihsbi0xKSksbG4tPTE7cmV0dXJuIFN0fX1mdW5jdGlvbiBtKGtlLF90KXt2YXIgbnQ9X3QuZmF0YWw7dGhpcy5oYW5kbGVyPWZ1bmN0''@;'; put 'put ''aW9uKEplLGxuKXtpZihsbj09PVApcmV0dXJuIFk7aWYoUihsbikpcmV0dXJuIGxuO3ZhciB5dD1rZVtsbi0xMjhdO3JldHVybiBudWxsPT09eXQ/QihudCk6eXR9fWZ1bmN0aW9uIEEoa2UsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihKZSxsbil7aWYobG49PT1QKXJldHVybiBZO2lmKGoo''@;'; put 'put ''bG4pKXJldHVybiBsbjt2YXIgeXQ9X2UobG4sa2UpO3JldHVybiBudWxsPT09eXQmJlcobG4pLHl0KzEyOH19ZnVuY3Rpb24gYWUoa2Upe3ZhciBfdD1rZS5mYXRhbCxudD0wLEplPTAsbG49MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsU3Qpe2lmKFN0PT09UCYmMD09PW50JiYwPT09SmUm''@;'; put 'put ''JjA9PT1sbilyZXR1cm4gWTt2YXIgRHQ7aWYoU3Q9PT1QJiYoMCE9PW50fHwwIT09SmV8fDAhPT1sbikmJihudD0wLEplPTAsbG49MCxCKF90KSksMCE9PWxuKXtEdD1udWxsLF8oU3QsNDgsNTcpJiYoRHQ9ZnVuY3Rpb24gU2Uoa2Upe2lmKGtlPjM5NDE5JiZrZTwxODllM3x8a2U+MTIzNzU3''@;'; put 'put ''NSlyZXR1cm4gbnVsbDtpZig3NDU3PT09a2UpcmV0dXJuIDU5MzM1O3ZhciBsbixfdD0wLG50PTAsSmU9VGUoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKGxuPTA7bG48SmUubGVuZ3RoOysrbG4pe3ZhciB5dD1KZVtsbl07aWYoISh5dFswXTw9a2UpKWJyZWFrO190PXl0WzBdLG50PXl0WzFdfXJl''@;'; put 'put ''dHVybiBudCtrZS1fdH0oMTAqKDEyNiooMTAqKG50LTEyOSkrSmUtNDgpK2xuLTEyOSkrU3QtNDgpKTt2YXIgaXQ9W0plLGxuLFN0XTtyZXR1cm4gbnQ9MCxKZT0wLGxuPTAsbnVsbD09PUR0Pyh5dC5wcmVwZW5kKGl0KSxCKF90KSk6RHR9aWYoMCE9PUplKXJldHVybiBfKFN0LDEyOSwyNTQp''@;'; put 'put ''Pyhsbj1TdCxudWxsKTooeXQucHJlcGVuZChbSmUsU3RdKSxudD0wLEplPTAsQihfdCkpO2lmKDAhPT1udCl7aWYoXyhTdCw0OCw1NykpcmV0dXJuIEplPVN0LG51bGw7dmFyICRlPW50LHR0PW51bGw7bnQ9MDt2YXIgTmU9U3Q8MTI3PzY0OjY1O3JldHVybihfKFN0LDY0LDEyNil8fF8oU3Qs''@;'; put 'put ''MTI4LDI1NCkpJiYodHQ9MTkwKigkZS0xMjkpKyhTdC1OZSkpLG51bGw9PT0oRHQ9bnVsbD09PXR0P251bGw6Z2UodHQsVGUoImdiMTgwMzAiKSkpJiZSKFN0KSYmeXQucHJlcGVuZChTdCksbnVsbD09PUR0P0IoX3QpOkR0fXJldHVybiBSKFN0KT9TdDoxMjg9PT1TdD84MzY0Ol8oU3QsMTI5''@;'; put 'put ''LDI1NCk/KG50PVN0LG51bGwpOkIoX3QpfX1mdW5jdGlvbiBuZShrZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKEplLGxuKXtpZihsbj09PVApcmV0dXJuIFk7aWYoaihsbikpcmV0dXJuIGxuO2lmKDU4ODUzPT09bG4pcmV0dXJuIFcobG4pO2lmKF90JiY4MzY0PT09bG4pcmV0dXJuIDEy''@;'; put 'put ''ODt2YXIgeXQ9X2UobG4sVGUoImdiMTgwMzAiKSk7aWYobnVsbCE9PXl0KXt2YXIgRHQ9eXQlMTkwO3JldHVybltOKHl0LzE5MCkrMTI5LER0KyhEdDw2Mz82NDo2NSldfWlmKF90KXJldHVybiBXKGxuKTt5dD1mdW5jdGlvbiB6ZShrZSl7aWYoNTkzMzU9PT1rZSlyZXR1cm4gNzQ1Nzt2YXIg''@;'; put 'put ''bG4sX3Q9MCxudD0wLEplPVRlKCJnYjE4MDMwLXJhbmdlcyIpO2Zvcihsbj0wO2xuPEplLmxlbmd0aDsrK2xuKXt2YXIgeXQ9SmVbbG5dO2lmKCEoeXRbMV08PWtlKSlicmVhaztfdD15dFsxXSxudD15dFswXX1yZXR1cm4gbnQra2UtX3R9KGxuKTt2YXIgJGU9Tih5dC8xMC8xMjYvMTApLHR0''@;'; put 'put ''PU4oKHl0LT0xMCokZSoxMjYqMTApLzEwLzEyNiksTmU9TigoeXQtPTEwKnR0KjEyNikvMTApO3JldHVyblskZSsxMjksdHQrNDgsTmUrMTI5LHl0LTEwKk5lKzQ4XX19ZnVuY3Rpb24gbGUoa2Upe3ZhciBfdD1rZS5mYXRhbCxudD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihKZSxsbil7aWYo''@;'; put 'put ''bG49PT1QJiYwIT09bnQpcmV0dXJuIG50PTAsQihfdCk7aWYobG49PT1QJiYwPT09bnQpcmV0dXJuIFk7aWYoMCE9PW50KXt2YXIgeXQ9bnQsU3Q9bnVsbDtudD0wO3ZhciBEdD1sbjwxMjc/NjQ6OTg7c3dpdGNoKChfKGxuLDY0LDEyNil8fF8obG4sMTYxLDI1NCkpJiYoU3Q9MTU3Kih5dC0x''@;'; put 'put ''MjkpKyhsbi1EdCkpLFN0KXtjYXNlIDExMzM6cmV0dXJuWzIwMiw3NzJdO2Nhc2UgMTEzNTpyZXR1cm5bMjAyLDc4MF07Y2FzZSAxMTY0OnJldHVyblsyMzQsNzcyXTtjYXNlIDExNjY6cmV0dXJuWzIzNCw3ODBdfXZhciBpdD1udWxsPT09U3Q/bnVsbDpnZShTdCxUZSgiYmlnNSIpKTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PWl0JiZSKGxuKSYmSmUucHJlcGVuZChsbiksbnVsbD09PWl0P0IoX3QpOml0fXJldHVybiBSKGxuKT9sbjpfKGxuLDEyOSwyNTQpPyhudD1sbixudWxsKTpCKF90KX19ZnVuY3Rpb24gd2Uoa2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxKZSl7aWYoSmU9PT1QKXJldHVy''@;'; put 'put ''biBZO2lmKGooSmUpKXJldHVybiBKZTt2YXIgbG49ZnVuY3Rpb24geShrZSl7dmFyIF90PXg9eHx8VGUoImJpZzUiKS5tYXAoZnVuY3Rpb24obnQsSmUpe3JldHVybiBKZTw1MDI0P251bGw6bnR9KTtyZXR1cm4gOTU1Mj09PWtlfHw5NTY2PT09a2V8fDk1Njk9PT1rZXx8OTU3OD09PWtlfHwy''@;'; put 'put ''MTMxMz09PWtlfHwyMTMxNz09PWtlP190Lmxhc3RJbmRleE9mKGtlKTpfZShrZSxfdCl9KEplKTtpZihudWxsPT09bG4pcmV0dXJuIFcoSmUpO3ZhciB5dD1OKGxuLzE1NykrMTI5O2lmKHl0PDE2MSlyZXR1cm4gVyhKZSk7dmFyIFN0PWxuJTE1NztyZXR1cm5beXQsU3QrKFN0PDYzPzY0Ojk4''@;'; put 'put ''KV19fWZ1bmN0aW9uIFVlKGtlKXt2YXIgX3Q9a2UuZmF0YWwsbnQ9ITEsSmU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obG4seXQpe2lmKHl0PT09UCYmMCE9PUplKXJldHVybiBKZT0wLEIoX3QpO2lmKHl0PT09UCYmMD09PUplKXJldHVybiBZO2lmKDE0Mj09PUplJiZfKHl0LDE2MSwyMjMp''@;'; put 'put ''KXJldHVybiBKZT0wLDY1MjE2K3l0O2lmKDE0Mz09PUplJiZfKHl0LDE2MSwyNTQpKXJldHVybiBudD0hMCxKZT15dCxudWxsO2lmKDAhPT1KZSl7dmFyIFN0PUplO0plPTA7dmFyIER0PW51bGw7cmV0dXJuIF8oU3QsMTYxLDI1NCkmJl8oeXQsMTYxLDI1NCkmJihEdD1nZSg5NCooU3QtMTYx''@;'; put 'put ''KSsoeXQtMTYxKSxUZShudD8iamlzMDIxMiI6ImppczAyMDgiKSkpLG50PSExLF8oeXQsMTYxLDI1NCl8fGxuLnByZXBlbmQoeXQpLG51bGw9PT1EdD9CKF90KTpEdH1yZXR1cm4gUih5dCk/eXQ6MTQyPT09eXR8fDE0Mz09PXl0fHxfKHl0LDE2MSwyNTQpPyhKZT15dCxudWxsKTpCKF90KX19''@;'; put 'put ''ZnVuY3Rpb24gUWUoa2Upe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihudCxKZSl7aWYoSmU9PT1QKXJldHVybiBZO2lmKGooSmUpKXJldHVybiBKZTtpZigxNjU9PT1KZSlyZXR1cm4gOTI7aWYoODI1ND09PUplKXJldHVybiAxMjY7aWYoXyhKZSw2NTM3Nyw2NTQzOSkpcmV0dXJuWzE0MixKZS02''@;'; put 'put ''NTM3NysxNjFdOzg3MjI9PT1KZSYmKEplPTY1MjkzKTt2YXIgbG49X2UoSmUsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1sbj9XKEplKTpbTihsbi85NCkrMTYxLGxuJTk0KzE2MV19fWZ1bmN0aW9uIG90KGtlKXt2YXIgX3Q9a2UuZmF0YWwsSmU9MCx5dD0wLFN0PSExO3RoaXMuaGFu''@;'; put 'put ''ZGxlcj1mdW5jdGlvbihEdCxpdCl7c3dpdGNoKEplKXtkZWZhdWx0OmNhc2UgMDpyZXR1cm4gMjc9PT1pdD8oSmU9NSxudWxsKTpfKGl0LDAsMTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjchPT1pdD8oU3Q9ITEsaXQpOml0PT09UD9ZOihTdD0hMSxCKF90KSk7Y2FzZSAxOnJldHVybiAyNz09''@;'; put 'put ''PWl0PyhKZT01LG51bGwpOjkyPT09aXQ/KFN0PSExLDE2NSk6MTI2PT09aXQ/KFN0PSExLDgyNTQpOl8oaXQsMCwxMjcpJiYxNCE9PWl0JiYxNSE9PWl0JiYyNyE9PWl0JiY5MiE9PWl0JiYxMjYhPT1pdD8oU3Q9ITEsaXQpOml0PT09UD9ZOihTdD0hMSxCKF90KSk7Y2FzZSAyOnJldHVybiAy''@;'; put 'put ''Nz09PWl0PyhKZT01LG51bGwpOl8oaXQsMzMsOTUpPyhTdD0hMSw2NTM0NCtpdCk6aXQ9PT1QP1k6KFN0PSExLEIoX3QpKTtjYXNlIDM6cmV0dXJuIDI3PT09aXQ/KEplPTUsbnVsbCk6XyhpdCwzMywxMjYpPyhTdD0hMSx5dD1pdCxKZT00LG51bGwpOml0PT09UD9ZOihTdD0hMSxCKF90KSk7''@;'; put 'put ''Y2FzZSA0OmlmKDI3PT09aXQpcmV0dXJuIEplPTUsQihfdCk7aWYoXyhpdCwzMywxMjYpKXtKZT0zO3ZhciB0dD1nZSg5NCooeXQtMzMpK2l0LTMzLFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09dHQ/QihfdCk6dHR9cmV0dXJuIGl0PT09UD8oSmU9MyxEdC5wcmVwZW5kKGl0KSxCKF90''@;'; put 'put ''KSk6KEplPTMsQihfdCkpO2Nhc2UgNTpyZXR1cm4gMzY9PT1pdHx8NDA9PT1pdD8oeXQ9aXQsSmU9NixudWxsKTooRHQucHJlcGVuZChpdCksU3Q9ITEsSmU9MCxCKF90KSk7Y2FzZSA2OnZhciBOZT15dDt5dD0wO3ZhciB1dD1udWxsO2lmKDQwPT09TmUmJjY2PT09aXQmJih1dD0wKSw0MD09''@;'; put 'put ''PU5lJiY3ND09PWl0JiYodXQ9MSksNDA9PT1OZSYmNzM9PT1pdCYmKHV0PTIpLDM2PT09TmUmJig2ND09PWl0fHw2Nj09PWl0KSYmKHV0PTMpLG51bGwhPT11dCl7SmU9SmU9dXQ7dmFyIHF0PVN0O3JldHVybiBTdD0hMCxxdD9CKF90KTpudWxsfXJldHVybiBEdC5wcmVwZW5kKFtOZSxpdF0p''@;'; put 'put ''LFN0PSExLEplPTAsQihfdCl9fX1mdW5jdGlvbiBNZShrZSl7dmFyIEplPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKGxuLHl0KXtpZih5dD09PVAmJjAhPT1KZSlyZXR1cm4gbG4ucHJlcGVuZCh5dCksSmU9MCxbMjcsNDAsNjZdO2lmKHl0PT09UCYmMD09PUplKXJldHVybiBZO2lmKCEoMCE9''@;'; put 'put ''PUplJiYxIT09SmV8fDE0IT09eXQmJjE1IT09eXQmJjI3IT09eXQpKXJldHVybiBXKDY1NTMzKTtpZigwPT09SmUmJmooeXQpKXJldHVybiB5dDtpZigxPT09SmUmJihqKHl0KSYmOTIhPT15dCYmMTI2IT09eXR8fDE2NT09eXR8fDgyNTQ9PXl0KSl7aWYoaih5dCkpcmV0dXJuIHl0O2lmKDE2''@;'; put 'put ''NT09PXl0KXJldHVybiA5MjtpZig4MjU0PT09eXQpcmV0dXJuIDEyNn1pZihqKHl0KSYmMCE9PUplKXJldHVybiBsbi5wcmVwZW5kKHl0KSxKZT0wLFsyNyw0MCw2Nl07aWYoKDE2NT09PXl0fHw4MjU0PT09eXQpJiYxIT09SmUpcmV0dXJuIGxuLnByZXBlbmQoeXQpLEplPTEsWzI3LDQwLDc0''@;'; put 'put ''XTs4NzIyPT09eXQmJih5dD02NTI5Myk7dmFyIFN0PV9lKHl0LFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09U3Q/Vyh5dCk6MiE9PUplPyhsbi5wcmVwZW5kKHl0KSxKZT0yLFsyNywzNiw2Nl0pOltOKFN0Lzk0KSszMyxTdCU5NCszM119fWZ1bmN0aW9uIHZlKGtlKXt2YXIgX3Q9a2Uu''@;'; put 'put ''ZmF0YWwsbnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oSmUsbG4pe2lmKGxuPT09UCYmMCE9PW50KXJldHVybiBudD0wLEIoX3QpO2lmKGxuPT09UCYmMD09PW50KXJldHVybiBZO2lmKDAhPT1udCl7dmFyIHl0PW50LFN0PW51bGw7bnQ9MDt2YXIgRHQ9bG48MTI3PzY0OjY1LGl0PXl0PDE2''@;'; put 'put ''MD8xMjk6MTkzO2lmKChfKGxuLDY0LDEyNil8fF8obG4sMTI4LDI1MikpJiYoU3Q9MTg4Kih5dC1pdCkrbG4tRHQpLF8oU3QsODgzNiwxMDcxNSkpcmV0dXJuIDQ4NTA4K1N0O3ZhciAkZT1udWxsPT09U3Q/bnVsbDpnZShTdCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PSRlJiZSKGxu''@;'; put 'put ''KSYmSmUucHJlcGVuZChsbiksbnVsbD09PSRlP0IoX3QpOiRlfXJldHVybiBSKGxuKXx8MTI4PT09bG4/bG46XyhsbiwxNjEsMjIzKT82NTIxNitsbjpfKGxuLDEyOSwxNTkpfHxfKGxuLDIyNCwyNTIpPyhudD1sbixudWxsKTpCKF90KX19ZnVuY3Rpb24gWGUoa2Upe3RoaXMuaGFuZGxlcj1m''@;'; put 'put ''dW5jdGlvbihudCxKZSl7aWYoSmU9PT1QKXJldHVybiBZO2lmKGooSmUpfHwxMjg9PT1KZSlyZXR1cm4gSmU7aWYoMTY1PT09SmUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1KZSlyZXR1cm4gMTI2O2lmKF8oSmUsNjUzNzcsNjU0MzkpKXJldHVybiBKZS02NTM3NysxNjE7ODcyMj09PUplJiYoSmU9''@;'; put 'put ''NjUyOTMpO3ZhciBsbj1mdW5jdGlvbiB6KGtlKXtyZXR1cm4oZz1nfHxUZSgiamlzMDIwOCIpLm1hcChmdW5jdGlvbihudCxKZSl7cmV0dXJuIF8oSmUsODI3Miw4ODM1KT9udWxsOm50fSkpLmluZGV4T2Yoa2UpfShKZSk7aWYobnVsbD09PWxuKXJldHVybiBXKEplKTt2YXIgeXQ9Tihsbi8x''@;'; put 'put ''ODgpLER0PWxuJTE4ODtyZXR1cm5beXQrKHl0PDMxPzEyOToxOTMpLER0KyhEdDw2Mz82NDo2NSldfX1mdW5jdGlvbiBCZShrZSl7dmFyIF90PWtlLmZhdGFsLG50PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKEplLGxuKXtpZihsbj09PVAmJjAhPT1udClyZXR1cm4gbnQ9MCxCKF90KTtpZihs''@;'; put 'put ''bj09PVAmJjA9PT1udClyZXR1cm4gWTtpZigwIT09bnQpe3ZhciB5dD1udCxTdD1udWxsO250PTAsXyhsbiw2NSwyNTQpJiYoU3Q9MTkwKih5dC0xMjkpKyhsbi02NSkpO3ZhciBEdD1udWxsPT09U3Q/bnVsbDpnZShTdCxUZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09U3QmJlIobG4pJiZK''@;'; put 'put ''ZS5wcmVwZW5kKGxuKSxudWxsPT09RHQ/QihfdCk6RHR9cmV0dXJuIFIobG4pP2xuOl8obG4sMTI5LDI1NCk/KG50PWxuLG51bGwpOkIoX3QpfX1mdW5jdGlvbiBBZShrZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LEplKXtpZihKZT09PVApcmV0dXJuIFk7aWYoaihKZSkpcmV0dXJuIEpl''@;'; put 'put ''O3ZhciBsbj1fZShKZSxUZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09bG4/VyhKZSk6W04obG4vMTkwKSsxMjksbG4lMTkwKzY1XX19ZnVuY3Rpb24gRmUoa2UsX3Qpe3ZhciBudD1rZT4+OCxKZT0yNTUma2U7cmV0dXJuIF90P1tudCxKZV06W0plLG50XX1mdW5jdGlvbiBSZShrZSxfdCl7''@;'; put 'put ''dmFyIG50PV90LmZhdGFsLEplPW51bGwsbG49bnVsbDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsU3Qpe2lmKFN0PT09UCYmKG51bGwhPT1KZXx8bnVsbCE9PWxuKSlyZXR1cm4gQihudCk7aWYoU3Q9PT1QJiZudWxsPT09SmUmJm51bGw9PT1sbilyZXR1cm4gWTtpZihudWxsPT09SmUpcmV0''@;'; put 'put ''dXJuIEplPVN0LG51bGw7dmFyIER0O2lmKER0PWtlPyhKZTw8OCkrU3Q6KFN0PDw4KStKZSxKZT1udWxsLG51bGwhPT1sbil7dmFyIGl0PWxuO3JldHVybiBsbj1udWxsLF8oRHQsNTYzMjAsNTczNDMpPzY1NTM2KzEwMjQqKGl0LTU1Mjk2KSsoRHQtNTYzMjApOih5dC5wcmVwZW5kKEZlKER0''@;'; put 'put ''LGtlKSksQihudCkpfXJldHVybiBfKER0LDU1Mjk2LDU2MzE5KT8obG49RHQsbnVsbCk6XyhEdCw1NjMyMCw1NzM0Myk/QihudCk6RHR9fWZ1bmN0aW9uIEllKGtlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oSmUsbG4pe2lmKGxuPT09UClyZXR1cm4gWTtpZihfKGxuLDAsNjU1MzUpKXJl''@;'; put 'put ''dHVybiBGZShsbixrZSk7dmFyIHl0PUZlKDU1Mjk2Kyhsbi02NTUzNj4+MTApLGtlKSxTdD1GZSg1NjMyMCsobG4tNjU1MzYmMTAyMyksa2UpO3JldHVybiB5dC5jb25jYXQoU3QpfX1mdW5jdGlvbiBIZShrZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LEplKXtyZXR1cm4gSmU9PT1QP1k6''@;'; put 'put ''UihKZSk/SmU6NjMzNjArSmUtMTI4fX1mdW5jdGlvbiBEZShrZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKG50LEplKXtyZXR1cm4gSmU9PT1QP1k6aihKZSk/SmU6XyhKZSw2MzM2MCw2MzQ4Nyk/SmUtNjMzNjArMTI4OlcoSmUpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkmJihPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImZhdGFsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuImZhdGFs''@;'; put 'put ''Ij09PXRoaXMuX2Vycm9yX21vZGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJpZ25vcmVCT00iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWdub3JlQk9NfX0pKSxULnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oX3QsbnQpe3ZhciBKZTtKZT0ib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIF90JiZfdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KF90KToib2JqZWN0Ij09dHlwZW9mIF90JiYiYnVmZmVyImluIF90JiZfdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdC5idWZmZXIsX3QuYnl0ZU9mZnNl''@;'; put 'put ''dCxfdC5ieXRlTGVuZ3RoKTpuZXcgVWludDhBcnJheSgwKSxudD13KG50KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9kZWNvZGVyPW9lW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX0pLHRoaXMuX0JPTXNlZW49ITEpLHRoaXMuX2Rv''@;'; put 'put ''X25vdF9mbHVzaD0hIW50LnN0cmVhbTtmb3IodmFyIFN0LGxuPW5ldyBMKEplKSx5dD1bXTs7KXt2YXIgRHQ9bG4ucmVhZCgpO2lmKER0PT09UHx8KFN0PXRoaXMuX2RlY29kZXIuaGFuZGxlcihsbixEdCkpPT09WSlicmVhaztudWxsIT09U3QmJihBcnJheS5pc0FycmF5KFN0KT95dC5wdXNo''@;'; put 'put ''LmFwcGx5KHl0LFN0KTp5dC5wdXNoKFN0KSl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7ZG97aWYoKFN0PXRoaXMuX2RlY29kZXIuaGFuZGxlcihsbixsbi5yZWFkKCkpKT09PVkpYnJlYWs7bnVsbCE9PVN0JiYoQXJyYXkuaXNBcnJheShTdCk/eXQucHVzaC5hcHBseSh5dCxTdCk6eXQucHVz''@;'; put 'put ''aChTdCkpfXdoaWxlKCFsbi5lbmRPZlN0cmVhbSgpKTt0aGlzLl9kZWNvZGVyPW51bGx9cmV0dXJuIGZ1bmN0aW9uIGl0KCRlKXtyZXR1cm4gZnVuY3Rpb24gcChrZSxfdCl7cmV0dXJuLTEhPT1rZS5pbmRleE9mKF90KX0oWyJVVEYtOCIsIlVURi0xNkxFIiwiVVRGLTE2QkUiXSx0aGlzLl9l''@;'; put 'put ''bmNvZGluZy5uYW1lKSYmIXRoaXMuX2lnbm9yZUJPTSYmIXRoaXMuX0JPTXNlZW4mJigkZS5sZW5ndGg+MCYmNjUyNzk9PT0kZVswXT8odGhpcy5fQk9Nc2Vlbj0hMCwkZS5zaGlmdCgpKTokZS5sZW5ndGg+MCYmKHRoaXMuX0JPTXNlZW49ITApKSxmdW5jdGlvbiBIKGtlKXtmb3IodmFyIF90''@;'; put 'put ''PSIiLG50PTA7bnQ8a2UubGVuZ3RoOysrbnQpe3ZhciBKZT1rZVtudF07SmU8PTY1NTM1P190Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEplKTooSmUtPTY1NTM2LF90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhKZT4+MTApLDU2MzIwKygxMDIzJkplKSkpfXJldHVybiBfdH0oJGUpfS5j''@;'; put 'put ''YWxsKHRoaXMseXQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLFYucHJvdG90eXBlLmVuY29kZT1mdW5j''@;'; put 'put ''dGlvbihfdCxudCl7X3Q9dm9pZCAwPT09X3Q/IiI6U3RyaW5nKF90KSxudD13KG50KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9lbmNvZGVyPXJlW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZmF0YWx9KSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhbnQu''@;'; put 'put ''c3RyZWFtO2Zvcih2YXIgeXQsSmU9bmV3IEwoZnVuY3Rpb24gRihrZSl7Zm9yKHZhciBfdD1TdHJpbmcoa2UpLG50PV90Lmxlbmd0aCxKZT0wLGxuPVtdO0plPG50Oyl7dmFyIHl0PV90LmNoYXJDb2RlQXQoSmUpO2lmKHl0PDU1Mjk2fHx5dD41NzM0Mylsbi5wdXNoKHl0KTtlbHNlIGlmKDU2''@;'; put 'put ''MzIwPD15dCYmeXQ8PTU3MzQzKWxuLnB1c2goNjU1MzMpO2Vsc2UgaWYoNTUyOTY8PXl0JiZ5dDw9NTYzMTkpaWYoSmU9PT1udC0xKWxuLnB1c2goNjU1MzMpO2Vsc2V7dmFyIFN0PV90LmNoYXJDb2RlQXQoSmUrMSk7NTYzMjA8PVN0JiZTdDw9NTczNDM/KGxuLnB1c2goNjU1MzYrKCgxMDIz''@;'; put 'put ''Jnl0KTw8MTApKygxMDIzJlN0KSksSmUrPTEpOmxuLnB1c2goNjU1MzMpfUplKz0xfXJldHVybiBsbn0oX3QpKSxsbj1bXTs7KXt2YXIgU3Q9SmUucmVhZCgpO2lmKFN0PT09UHx8KHl0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihKZSxTdCkpPT09WSlicmVhaztBcnJheS5pc0FycmF5KHl0KT9s''@;'; put 'put ''bi5wdXNoLmFwcGx5KGxuLHl0KTpsbi5wdXNoKHl0KX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtmb3IoOyh5dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoSmUsSmUucmVhZCgpKSkhPT1ZOylBcnJheS5pc0FycmF5KHl0KT9sbi5wdXNoLmFwcGx5KGxuLHl0KTpsbi5wdXNoKHl0KTt0aGlzLl9l''@;'; put 'put ''bmNvZGVyPW51bGx9cmV0dXJuIG5ldyBVaW50OEFycmF5KGxuKX0scmVbIlVURi04Il09ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgRShrZSl9LG9lWyJVVEYtOCJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IFUoa2UpfSwiZW5jb2RpbmctaW5kZXhlcyJpbiBEJiZYLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oa2UpeyJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIj09PWtlLmhlYWRpbmcmJmtlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXt2YXIgbnQ9X3QubmFtZSxKZT1UZShudC50b0xvd2VyQ2FzZSgpKTtvZVtudF09ZnVuY3Rpb24obG4pe3JldHVybiBuZXcgbShKZSxsbil9''@;'; put 'put ''LHJlW250XT1mdW5jdGlvbihsbil7cmV0dXJuIG5ldyBBKEplLGxuKX19KX0pLG9lLkdCSz1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyBhZShrZSl9LHJlLkdCSz1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyBuZShrZSwhMCl9LHJlLmdiMTgwMzA9ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgbmUo''@;'; put 'put ''a2UpfSxvZS5nYjE4MDMwPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IGFlKGtlKX0scmUuQmlnNT1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyB3ZShrZSl9LG9lLkJpZzU9ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgbGUoa2UpfSxyZVsiRVVDLUpQIl09ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcg''@;'; put 'put ''UWUoa2UpfSxvZVsiRVVDLUpQIl09ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgVWUoa2UpfSxyZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyBNZShrZSl9LG9lWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IG90KGtlKX0scmUuU2hpZnRfSklT''@;'; put 'put ''PWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IFhlKGtlKX0sb2UuU2hpZnRfSklTPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IHZlKGtlKX0scmVbIkVVQy1LUiJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IEFlKGtlKX0sb2VbIkVVQy1LUiJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IEJlKGtl''@;'; put 'put ''KX0scmVbIlVURi0xNkJFIl09ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgSWUoITAsa2UpfSxvZVsiVVRGLTE2QkUiXT1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyBSZSghMCxrZSl9LHJlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IEllKCExLGtlKX0sb2VbIlVURi0xNkxF''@;'; put 'put ''Il09ZnVuY3Rpb24oa2Upe3JldHVybiBuZXcgUmUoITEsa2UpfSxyZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihrZSl7cmV0dXJuIG5ldyBEZShrZSl9LG9lWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKGtlKXtyZXR1cm4gbmV3IEhlKGtlKX0sRC5UZXh0RW5jb2Rlcnx8KEQuVGV4''@;'; put 'put ''dEVuY29kZXI9ViksRC5UZXh0RGVjb2Rlcnx8KEQuVGV4dERlY29kZXI9VCksY2UuZXhwb3J0cyYmKGNlLmV4cG9ydHM9e1RleHRFbmNvZGVyOkQuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6RC5UZXh0RGVjb2RlcixFbmNvZGluZ0luZGV4ZXM6RFsiZW5jb2RpbmctaW5kZXhlcyJdfSl9KHRo''@;'; put 'put ''aXN8fHt9KX0sNDEwOTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyNzA1NCkuQnVmZmVyLF89Yig1NjQ3MSkscD1iKDU3MyksTj1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKGope3RyeXtyZXR1cm4gcChqKSwhMH1jYXRjaHtyZXR1cm4hMX19LHc9dHlwZW9mIFVpbnQ4''@;'; put 'put ''QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLEg9RiYmKEQucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8RC5UWVBFRF9BUlJBWV9TVVBQT1JUKTtjZS5leHBvcnRzPWZ1bmN0aW9uKGosUCl7aWYoaiBpbnN0YW5jZW9mIEQp''@;'; put 'put ''cmV0dXJuIGo7aWYoInN0cmluZyI9PXR5cGVvZiBqKXJldHVybiBELmZyb20oaixQKTtpZihGJiZOKGopKXtpZigwPT09ai5ieXRlTGVuZ3RoKXJldHVybiBELmFsbG9jKDApO2lmKEgpe3ZhciBMPUQuZnJvbShqLmJ1ZmZlcixqLmJ5dGVPZmZzZXQsai5ieXRlTGVuZ3RoKTtpZihMLmJ5dGVM''@;'; put 'put ''ZW5ndGg9PT1qLmJ5dGVMZW5ndGgpcmV0dXJuIEx9dmFyIFk9aiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ajpuZXcgVWludDhBcnJheShqLmJ1ZmZlcixqLmJ5dGVPZmZzZXQsai5ieXRlTGVuZ3RoKSxCPUQuZnJvbShZKTtpZihCLmxlbmd0aD09PWouYnl0ZUxlbmd0aClyZXR1cm4gQn1pZih3''@;'; put 'put ''JiZqIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gRC5mcm9tKGopO3ZhciBXPV8oaik7aWYoVylmb3IodmFyIFo9MDtaPGoubGVuZ3RoO1orPTEpe3ZhciBxPWpbWl07aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxPDB8fHE+MjU1fHx+fnEhPT1xKXRocm93IG5ldyBSYW5nZUVycm9yKCJB''@;'; put 'put ''cnJheSBpdGVtcyBtdXN0IGJlIG51bWJlcnMgaW4gdGhlIHJhbmdlIDAtMjU1LiIpfWlmKFd8fEQuaXNCdWZmZXIoaikmJmouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBqLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGopKXJldHVybiBELmZy''@;'; put 'put ''b20oaik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheSwgYSBCdWZmZXIsIGEgVWludDhBcnJheSwgb3IgYSBEYXRhVmlldy4nKX19LDU2NDcxOmNlPT57dmFyIEo9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5p''@;'; put 'put ''c0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1KLmNhbGwoYil9fSw1NzM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0Njc1OCkscD1iKDEyNzczKSgiVHlwZWRBcnJheS5wcm90b3R5cGUuYnVmZmVyIiwhMCksTj1iKDQ3MjkpO2NlLmV4cG9ydHM9''@;'; put 'put ''cHx8ZnVuY3Rpb24oRil7aWYoIU4oRikpdGhyb3cgbmV3IEQoIk5vdCBhIFR5cGVkIEFycmF5Iik7cmV0dXJuIEYuYnVmZmVyfX0sMzM5ODpjZT0+e2Z1bmN0aW9uIGIoRCl7dHJ5e2lmKCFnbG9iYWwubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciBfPWdsb2JhbC5s''@;'; put 'put ''b2NhbFN0b3JhZ2VbRF07cmV0dXJuIG51bGwhPV8mJiJ0cnVlIj09PVN0cmluZyhfKS50b0xvd2VyQ2FzZSgpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gSihELF8pe2lmKGIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gRDt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24gTigpe2lmKCFwKXtpZihiKCJ0''@;'; put 'put ''aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKF8pO2IoInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKF8pOmNvbnNvbGUud2FybihfKSxwPSEwfXJldHVybiBELmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwxMjk1NDooY2UsSixiKT0+eyFmdW5jdGlvbihEKXsidXNl''@;'; put 'put ''IHN0cmljdCI7RC5leHBvcnRzLmlzX3VyaT1wLEQuZXhwb3J0cy5pc19odHRwX3VyaT1OLEQuZXhwb3J0cy5pc19odHRwc191cmk9dyxELmV4cG9ydHMuaXNfd2ViX3VyaT1GLEQuZXhwb3J0cy5pc1VyaT1wLEQuZXhwb3J0cy5pc0h0dHBVcmk9TixELmV4cG9ydHMuaXNIdHRwc1VyaT13LEQu''@;'; put 'put ''ZXhwb3J0cy5pc1dlYlVyaT1GO3ZhciBfPWZ1bmN0aW9uKEgpe3JldHVybiBILm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBwKEgpe2lmKEgmJiEvW15hLXowLTlcOlwvXD9cI1xb''@;'; put 'put ''XF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoSCkmJiEvJVteMC05YS1mXS9pLnRlc3QoSCkmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChIKSl7dmFyIFIsUCxMLFksQixqPSIiLFc9IiI7aWYoUD0oUj1fKEgpKVsyXSxMPVJbM10sWT1SWzRd''@;'; put 'put ''LEI9Uls1XSwoaj1SWzFdKSYmai5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihQJiZQLmxlbmd0aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KGoudG9M''@;'; put 'put ''b3dlckNhc2UoKSkpcmV0dXJuIFcrPWorIjoiLFAmJlAubGVuZ3RoJiYoVys9Ii8vIitQKSxXKz1MLFkmJlkubGVuZ3RoJiYoVys9Ij8iK1kpLEImJkIubGVuZ3RoJiYoVys9IiMiK0IpLFd9fX1mdW5jdGlvbiBOKEgsUil7aWYocChIKSl7dmFyIGosWSxXLFosUD0iIixMPSIiLEI9IiIscT0i''@;'; put 'put ''IjtpZihMPShqPV8oSCkpWzJdLFk9alszXSxXPWpbNF0sWj1qWzVdLFA9alsxXSl7aWYoUil7aWYoImh0dHBzIiE9UC50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9UC50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoQj1MLm1h''@;'; put 'put ''dGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLHErPVArIjoiLHErPSIvLyIrTCxCJiYocSs9QikscSs9WSxXJiZXLmxlbmd0aCYmKHErPSI/IitXKSxaJiZaLmxlbmd0aCYmKHErPSIjIitaKSxxfX19ZnVuY3Rpb24gdyhIKXtyZXR1cm4gTihILCEwKX1mdW5jdGlv''@;'; put 'put ''biBGKEgpe3JldHVybiBOKEgpfHx3KEgpfX0oY2U9Yi5ubWQoY2UpKX0sODY2MTooY2UsSixiKT0+e2NlLmV4cG9ydHM9Yig4NjYxKX0sNDQwNjg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4OTk5OSksXz1iKDk3NTk0KSxwPWIoNDgxMjgpLE49YigxMjc3Myksdz1iKDgzNzk4''@;'; put 'put ''KSxGPWIoOTE2MjcpLEg9TigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLFI9Yig4ODc3OSkoKSxqPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9nbG9iYWw6Z2xvYmFsVGhpcyxQPV8oKSxMPU4oIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxZPU4oIkFycmF5LnByb3RvdHlwZS5pbmRleE9m''@;'; put 'put ''IiwhMCl8fGZ1bmN0aW9uKFEsWCl7Zm9yKHZhciB0ZT0wO3RlPFEubGVuZ3RoO3RlKz0xKWlmKFFbdGVdPT09WClyZXR1cm4gdGU7cmV0dXJuLTF9LEI9e19fcHJvdG9fXzpudWxsfTtEKFAsUiYmdyYmRj9mdW5jdGlvbihxKXt2YXIgUT1uZXcgaltxXTtpZihTeW1ib2wudG9TdHJpbmdUYWcg''@;'; put 'put ''aW4gUSYmRil7dmFyIFg9RihRKSx0ZT13KFgsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighdGUmJlgpe3ZhciByZT1GKFgpO3RlPXcocmUsU3ltYm9sLnRvU3RyaW5nVGFnKX1CWyIkIitxXT1wKHRlLmdldCl9fTpmdW5jdGlvbihxKXt2YXIgUT1uZXcgaltxXSxYPVEuc2xpY2V8fFEuc2V0O1gm''@;'; put 'put ''JihCWyIkIitxXT1wKFgpKX0pLGNlLmV4cG9ydHM9ZnVuY3Rpb24oUSl7aWYoIVF8fCJvYmplY3QiIT10eXBlb2YgUSlyZXR1cm4hMTtpZighUil7dmFyIFg9TChIKFEpLDgsLTEpO3JldHVybiBZKFAsWCk+LTE/WDoiT2JqZWN0Ij09PVgmJmZ1bmN0aW9uKFEpe3ZhciBYPSExO3JldHVybiBE''@;'; put 'put ''KEIsZnVuY3Rpb24odGUscmUpe2lmKCFYKXRyeXt0ZShRKSxYPUwocmUsMSl9Y2F0Y2h7fX0pLFh9KFEpfXJldHVybiB3P2Z1bmN0aW9uKFEpe3ZhciBYPSExO3JldHVybiBEKEIsZnVuY3Rpb24odGUscmUpe2lmKCFYKXRyeXsiJCIrdGUoUSk9PT1yZSYmKFg9TChyZSwxKSl9Y2F0Y2h7fX0p''@;'; put 'put ''LFh9KFEpOm51bGx9fSwzNTM1ODooY2UsSixiKT0+e3ZhciBEPXsiLi9hZiI6MTE1NDQsIi4vYWYuanMiOjExNTQ0LCIuL2FyIjozMzEwOCwiLi9hci1keiI6NTIxNTUsIi4vYXItZHouanMiOjUyMTU1LCIuL2FyLWt3Ijo1MzU4MywiLi9hci1rdy5qcyI6NTM1ODMsIi4vYXItbHkiOjQxNjM4''@;'; put 'put ''LCIuL2FyLWx5LmpzIjo0MTYzOCwiLi9hci1tYSI6ODc4MjMsIi4vYXItbWEuanMiOjg3ODIzLCIuL2FyLXBzIjo3NzEyLCIuL2FyLXBzLmpzIjo3NzEyLCIuL2FyLXNhIjo3ODI2MSwiLi9hci1zYS5qcyI6NzgyNjEsIi4vYXItdG4iOjU2NzAzLCIuL2FyLXRuLmpzIjo1NjcwMywiLi9hci5q''@;'; put 'put ''cyI6MzMxMDgsIi4vYXoiOjQ2NTA4LCIuL2F6LmpzIjo0NjUwOCwiLi9iZSI6MTY3NjYsIi4vYmUuanMiOjE2NzY2LCIuL2JnIjoyODU2NCwiLi9iZy5qcyI6Mjg1NjQsIi4vYm0iOjk3NDYyLCIuL2JtLmpzIjo5NzQ2MiwiLi9ibiI6MTcxMDcsIi4vYm4tYmQiOjQzNDM4LCIuL2JuLWJkLmpz''@;'; put 'put ''Ijo0MzQzOCwiLi9ibi5qcyI6MTcxMDcsIi4vYm8iOjkwMDQsIi4vYm8uanMiOjkwMDQsIi4vYnIiOjUwOTI3LCIuL2JyLmpzIjo1MDkyNywiLi9icyI6ODc3NjgsIi4vYnMuanMiOjg3NzY4LCIuL2NhIjo1NjI5MSwiLi9jYS5qcyI6NTYyOTEsIi4vY3MiOjg1MzAxLCIuL2NzLmpzIjo4NTMw''@;'; put 'put ''MSwiLi9jdiI6NjY2NjYsIi4vY3YuanMiOjY2NjY2LCIuL2N5Ijo1NTE2MywiLi9jeS5qcyI6NTUxNjMsIi4vZGEiOjg3MzYwLCIuL2RhLmpzIjo4NzM2MCwiLi9kZSI6NDU5MzIsIi4vZGUtYXQiOjQzMjQ4LCIuL2RlLWF0LmpzIjo0MzI0OCwiLi9kZS1jaCI6ODMyMjIsIi4vZGUtY2guanMi''@;'; put 'put ''OjgzMjIyLCIuL2RlLmpzIjo0NTkzMiwiLi9kdiI6NjQwNSwiLi9kdi5qcyI6NjQwNSwiLi9lbCI6NjA3MTgsIi4vZWwuanMiOjYwNzE4LCIuL2VuLWF1IjozNjMxOSwiLi9lbi1hdS5qcyI6MzYzMTksIi4vZW4tY2EiOjgwNTk3LCIuL2VuLWNhLmpzIjo4MDU5NywiLi9lbi1nYiI6NTE4MDAs''@;'; put 'put ''Ii4vZW4tZ2IuanMiOjUxODAwLCIuL2VuLWllIjo4MDcsIi4vZW4taWUuanMiOjgwNywiLi9lbi1pbCI6OTU5NjAsIi4vZW4taWwuanMiOjk1OTYwLCIuL2VuLWluIjo4NDQxOCwiLi9lbi1pbi5qcyI6ODQ0MTgsIi4vZW4tbnoiOjQ2ODY1LCIuL2VuLW56LmpzIjo0Njg2NSwiLi9lbi1zZyI6''@;'; put 'put ''MzI2NDcsIi4vZW4tc2cuanMiOjMyNjQ3LCIuL2VvIjo2MTkzMSwiLi9lby5qcyI6NjE5MzEsIi4vZXMiOjQ2Njc5LCIuL2VzLWRvIjo0MTgwNSwiLi9lcy1kby5qcyI6NDE4MDUsIi4vZXMtbXgiOjgzNDQ1LCIuL2VzLW14LmpzIjo4MzQ0NSwiLi9lcy11cyI6ODE1MTYsIi4vZXMtdXMuanMi''@;'; put 'put ''OjgxNTE2LCIuL2VzLmpzIjo0NjY3OSwiLi9ldCI6ODgxNTAsIi4vZXQuanMiOjg4MTUwLCIuL2V1Ijo4MDc1NywiLi9ldS5qcyI6ODA3NTcsIi4vZmEiOjY1NzQyLCIuL2ZhLmpzIjo2NTc0MiwiLi9maSI6MzM5NTgsIi4vZmkuanMiOjMzOTU4LCIuL2ZpbCI6NDY3MjAsIi4vZmlsLmpzIjo0''@;'; put 'put ''NjcyMCwiLi9mbyI6OTgzNTIsIi4vZm8uanMiOjk4MzUyLCIuL2ZyIjo0MDU5LCIuL2ZyLWNhIjo0MjA5NiwiLi9mci1jYS5qcyI6NDIwOTYsIi4vZnItY2giOjk1NzU5LCIuL2ZyLWNoLmpzIjo5NTc1OSwiLi9mci5qcyI6NDA1OSwiLi9meSI6MTU5NTgsIi4vZnkuanMiOjE1OTU4LCIuL2dh''@;'; put 'put ''Ijo5NDE0MywiLi9nYS5qcyI6OTQxNDMsIi4vZ2QiOjY3MDI4LCIuL2dkLmpzIjo2NzAyOCwiLi9nbCI6ODA0MjgsIi4vZ2wuanMiOjgwNDI4LCIuL2dvbS1kZXZhIjo3Njg2MSwiLi9nb20tZGV2YS5qcyI6NzY4NjEsIi4vZ29tLWxhdG4iOjU3NzE4LCIuL2dvbS1sYXRuLmpzIjo1NzcxOCwi''@;'; put 'put ''Li9ndSI6MjY4MjcsIi4vZ3UuanMiOjI2ODI3LCIuL2hlIjoyMTkzNiwiLi9oZS5qcyI6MjE5MzYsIi4vaGkiOjMxMzMyLCIuL2hpLmpzIjozMTMzMiwiLi9ociI6OTE5NTcsIi4vaHIuanMiOjkxOTU3LCIuL2h1Ijo0ODkyOCwiLi9odS5qcyI6NDg5MjgsIi4vaHktYW0iOjU2MjE1LCIuL2h5''@;'; put 'put ''LWFtLmpzIjo1NjIxNSwiLi9pZCI6NTg2LCIuL2lkLmpzIjo1ODYsIi4vaXMiOjkwMjExLCIuL2lzLmpzIjo5MDIxMSwiLi9pdCI6NzAxNzAsIi4vaXQtY2giOjIyMzQwLCIuL2l0LWNoLmpzIjoyMjM0MCwiLi9pdC5qcyI6NzAxNzAsIi4vamEiOjM5NzcwLCIuL2phLmpzIjozOTc3MCwiLi9q''@;'; put 'put ''diI6NzM4NzUsIi4vanYuanMiOjczODc1LCIuL2thIjo3OTQ5OSwiLi9rYS5qcyI6Nzk0OTksIi4va2siOjkzNTczLCIuL2trLmpzIjo5MzU3MywiLi9rbSI6Njg4MDcsIi4va20uanMiOjY4ODA3LCIuL2tuIjo2NTA4MiwiLi9rbi5qcyI6NjUwODIsIi4va28iOjIwMTM3LCIuL2tvLmpzIjoy''@;'; put 'put ''MDEzNywiLi9rdSI6NzAxMTEsIi4va3Uta21yIjo2Mzc0NCwiLi9rdS1rbXIuanMiOjYzNzQ0LCIuL2t1LmpzIjo3MDExMSwiLi9reSI6OTkxODcsIi4va3kuanMiOjk5MTg3LCIuL2xiIjozNTk2OSwiLi9sYi5qcyI6MzU5NjksIi4vbG8iOjMzNTI2LCIuL2xvLmpzIjozMzUyNiwiLi9sdCI6''@;'; put 'put ''OTA0MTEsIi4vbHQuanMiOjkwNDExLCIuL2x2IjozMjYyMSwiLi9sdi5qcyI6MzI2MjEsIi4vbWUiOjg1ODY5LCIuL21lLmpzIjo4NTg2OSwiLi9taSI6MzU4ODEsIi4vbWkuanMiOjM1ODgxLCIuL21rIjo5MjM5MSwiLi9tay5qcyI6OTIzOTEsIi4vbWwiOjIxMTI2LCIuL21sLmpzIjoyMTEy''@;'; put 'put ''NiwiLi9tbiI6NDQ4OTIsIi4vbW4uanMiOjQ0ODkyLCIuL21yIjo1OTA4MCwiLi9tci5qcyI6NTkwODAsIi4vbXMiOjcwMzk5LCIuL21zLW15IjoyNTk1MCwiLi9tcy1teS5qcyI6MjU5NTAsIi4vbXMuanMiOjcwMzk5LCIuL210Ijo3OTkwMiwiLi9tdC5qcyI6Nzk5MDIsIi4vbXkiOjcyOTg1''@;'; put 'put ''LCIuL215LmpzIjo3Mjk4NSwiLi9uYiI6Njc4NTksIi4vbmIuanMiOjY3ODU5LCIuL25lIjoxMzY0MiwiLi9uZS5qcyI6MTM2NDIsIi4vbmwiOjY1NDQxLCIuL25sLWJlIjo5OTg3NSwiLi9ubC1iZS5qcyI6OTk4NzUsIi4vbmwuanMiOjY1NDQxLCIuL25uIjo4MTMxMSwiLi9ubi5qcyI6ODEz''@;'; put 'put ''MTEsIi4vb2MtbG5jIjo3MjU2NywiLi9vYy1sbmMuanMiOjcyNTY3LCIuL3BhLWluIjo1Njk2MiwiLi9wYS1pbi5qcyI6NTY5NjIsIi4vcGwiOjYxMDYzLCIuL3BsLmpzIjo2MTA2MywiLi9wdCI6Nzg3MTksIi4vcHQtYnIiOjk3NDc2LCIuL3B0LWJyLmpzIjo5NzQ3NiwiLi9wdC5qcyI6Nzg3''@;'; put 'put ''MTksIi4vcm8iOjUxMDA0LCIuL3JvLmpzIjo1MTAwNCwiLi9ydSI6NTEzMjYsIi4vcnUuanMiOjUxMzI2LCIuL3NkIjo3MjYwOCwiLi9zZC5qcyI6NzI2MDgsIi4vc2UiOjEzOTExLCIuL3NlLmpzIjoxMzkxMSwiLi9zaSI6MjUxNDcsIi4vc2kuanMiOjI1MTQ3LCIuL3NrIjoyMzc0MSwiLi9z''@;'; put 'put ''ay5qcyI6MjM3NDEsIi4vc2wiOjkzZTMsIi4vc2wuanMiOjkzZTMsIi4vc3EiOjYwNDUxLCIuL3NxLmpzIjo2MDQ1MSwiLi9zciI6NTUwNDYsIi4vc3ItY3lybCI6NDA5MDUsIi4vc3ItY3lybC5qcyI6NDA5MDUsIi4vc3IuanMiOjU1MDQ2LCIuL3NzIjo4NTc2NSwiLi9zcy5qcyI6ODU3NjUs''@;'; put 'put ''Ii4vc3YiOjk5MjkwLCIuL3N2LmpzIjo5OTI5MCwiLi9zdyI6NTM0NDksIi4vc3cuanMiOjUzNDQ5LCIuL3RhIjo3MjY4OCwiLi90YS5qcyI6NzI2ODgsIi4vdGUiOjMyMDYwLCIuL3RlLmpzIjozMjA2MCwiLi90ZXQiOjkzMjkwLCIuL3RldC5qcyI6OTMyOTAsIi4vdGciOjgyOTQsIi4vdGcu''@;'; put 'put ''anMiOjgyOTQsIi4vdGgiOjEyMzEsIi4vdGguanMiOjEyMzEsIi4vdGsiOjM3NDYsIi4vdGsuanMiOjM3NDYsIi4vdGwtcGgiOjQ5MDQwLCIuL3RsLXBoLmpzIjo0OTA0MCwiLi90bGgiOjE3MTg3LCIuL3RsaC5qcyI6MTcxODcsIi4vdHIiOjYwMTUzLCIuL3RyLmpzIjo2MDE1MywiLi90emwi''@;'; put 'put ''Ojg4NTIxLCIuL3R6bC5qcyI6ODg1MjEsIi4vdHptIjoxODAxMCwiLi90em0tbGF0biI6MjIyMzQsIi4vdHptLWxhdG4uanMiOjIyMjM0LCIuL3R6bS5qcyI6MTgwMTAsIi4vdWctY24iOjYzMzQ5LCIuL3VnLWNuLmpzIjo2MzM0OSwiLi91ayI6Njg0NzksIi4vdWsuanMiOjY4NDc5LCIuL3Vy''@;'; put 'put ''Ijo0MzAyNCwiLi91ci5qcyI6NDMwMjQsIi4vdXoiOjE5ODAwLCIuL3V6LWxhdG4iOjcyMzc2LCIuL3V6LWxhdG4uanMiOjcyMzc2LCIuL3V6LmpzIjoxOTgwMCwiLi92aSI6ODkzNjYsIi4vdmkuanMiOjg5MzY2LCIuL3gtcHNldWRvIjo2OTcwMiwiLi94LXBzZXVkby5qcyI6Njk3MDIsIi4v''@;'; put 'put ''eW8iOjcyNjU1LCIuL3lvLmpzIjo3MjY1NSwiLi96aC1jbiI6NTc1LCIuL3poLWNuLmpzIjo1NzUsIi4vemgtaGsiOjE4MzUxLCIuL3poLWhrLmpzIjoxODM1MSwiLi96aC1tbyI6NTE2MjYsIi4vemgtbW8uanMiOjUxNjI2LCIuL3poLXR3Ijo4ODg3LCIuL3poLXR3LmpzIjo4ODg3fTtmdW5j''@;'; put 'put ''dGlvbiBfKE4pe3ZhciB3PXAoTik7cmV0dXJuIGIodyl9ZnVuY3Rpb24gcChOKXtpZighYi5vKEQsTikpe3ZhciB3PW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK04rIiciKTt0aHJvdyB3LmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLHd9cmV0dXJuIERbTl19Xy5rZXlzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKEQpfSxfLnJlc29sdmU9cCxjZS5leHBvcnRzPV8sXy5pZD0zNTM1OH0sODMzMzc6KCk9Pnt9LDc4OTgyOigpPT57fSw0Nzc5MDooKT0+e30sNzc5NjU6KCk9Pnt9LDY2MDg5OigpPT57fSw3OTM2ODooKT0+e30sMTU3OTE6KCk9Pnt9LDYxMDkzOigp''@;'; put 'put ''PT57fSw2NDY4ODooKT0+e30sNTEwNjk6KCk9Pnt9LDE1MzQwOigpPT57fSw3OTgzODooKT0+e30sNjM3Nzk6KCk9Pnt9LDc3MTk5OigpPT57fSw5NzU5NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDUwMTkpLF89dHlwZW9mIGdsb2JhbFRoaXM+InUiP2dsb2JhbDpnbG9iYWxU''@;'; put 'put ''aGlzO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIE49W10sdz0wO3c8RC5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiBfW0Rbd11dJiYoTltOLmxlbmd0aF09RFt3XSk7cmV0dXJuIE59fSwyNTE3MjpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gSihiLEQpe3RoaXMudj1iLHRo''@;'; put 'put ''aXMuaz1EfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2UuZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDkzNTEzOihjZSxKLGIpPT57dmFyIEQ9YigyNTE3Mik7Y2UuZXhwb3J0cz1mdW5jdGlvbiBfKHApe3ZhciBOPXt9LHc9ITE7ZnVuY3Rpb24gRihILFIpe3JldHVybiB3PSEwLFI9''@;'; put 'put ''bmV3IFByb21pc2UoZnVuY3Rpb24oail7aihwW0hdKFIpKX0pLHtkb25lOiExLHZhbHVlOm5ldyBEKFIsMSl9fXJldHVybiBOW3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sTi5uZXh0PWZ1bmN0aW9uKEgp''@;'; put 'put ''e3JldHVybiB3Pyh3PSExLEgpOkYoIm5leHQiLEgpfSwiZnVuY3Rpb24iPT10eXBlb2YgcC50aHJvdyYmKE4udGhyb3c9ZnVuY3Rpb24oSCl7aWYodyl0aHJvdyB3PSExLEg7cmV0dXJuIEYoInRocm93IixIKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBwLnJldHVybiYmKE4ucmV0dXJuPWZ1bmN0''@;'; put 'put ''aW9uKEgpe3JldHVybiB3Pyh3PSExLEgpOkYoInJldHVybiIsSCl9KSxOfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2UuZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDgyODgxOmNlPT57ZnVuY3Rpb24gYihEKXtmdW5jdGlvbiBfKHApe2lmKE9iamVjdChwKSE9PXApcmV0dXJuIFBy''@;'; put 'put ''b21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IocCsiIGlzIG5vdCBhbiBvYmplY3QuIikpO3ZhciBOPXAuZG9uZTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHAudmFsdWUpLnRoZW4oZnVuY3Rpb24odyl7cmV0dXJue3ZhbHVlOncsZG9uZTpOfX0pfXJldHVybihiPWZ1bmN0aW9uKE4pe3RoaXMu''@;'; put 'put ''cz1OLHRoaXMubj1OLm5leHR9KS5wcm90b3R5cGU9e3M6bnVsbCxuOm51bGwsbmV4dDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMubi5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9LHJldHVybjpmdW5jdGlvbihOKXt2YXIgdz10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT13P1Byb21p''@;'; put 'put ''c2UucmVzb2x2ZSh7dmFsdWU6Tixkb25lOiEwfSk6Xyh3LmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX0sdGhyb3c6ZnVuY3Rpb24oTil7dmFyIHc9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09dz9Qcm9taXNlLnJlamVjdChOKTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfX0s''@;'; put 'put ''bmV3IGIoRCl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBKKEQpe3ZhciBfLHAsTix3PTI7Zm9yKHR5cGVvZiBTeW1ib2w8InUiJiYocD1TeW1ib2wuYXN5bmNJdGVyYXRvcixOPVN5bWJvbC5pdGVyYXRvcik7dy0tOyl7aWYocCYmbnVsbCE9KF89RFtwXSkpcmV0dXJuIF8uY2FsbChEKTtpZihOJiZu''@;'; put 'put ''dWxsIT0oXz1EW05dKSlyZXR1cm4gbmV3IGIoXy5jYWxsKEQpKTtwPSJAQGFzeW5jSXRlcmF0b3IiLE49IkBAaXRlcmF0b3IifXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBpcyBub3QgYXN5bmMgaXRlcmFibGUiKX0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVm''@;'; put 'put ''YXVsdD1jZS5leHBvcnRzfSwyOTI5MzpjZT0+e2Z1bmN0aW9uIEooRCxfLHAsTix3LEYsSCl7dHJ5e3ZhciBSPURbRl0oSCksaj1SLnZhbHVlfWNhdGNoKFApe3JldHVybiB2b2lkIHAoUCl9Ui5kb25lP18oaik6UHJvbWlzZS5yZXNvbHZlKGopLnRoZW4oTix3KX1jZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uIGIoRCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTix3KXt2YXIgRj1ELmFwcGx5KF8scCk7ZnVuY3Rpb24gSChqKXtKKEYsTix3LEgsUiwibmV4dCIsail9ZnVuY3Rpb24gUihqKXtKKEYsTix3LEgsUiwi''@;'; put 'put ''dGhyb3ciLGopfUgodm9pZCAwKX0pfX0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSw1MzM0NDooY2UsSixiKT0+e3ZhciBEPWIoMjUxNzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24gXyhwKXtyZXR1cm4gbmV3IEQocCwwKX0sY2UuZXhwb3J0''@;'; put 'put ''cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSw0Mjk1ODooY2UsSixiKT0+e3ZhciBEPWIoMjUxNzIpO2Z1bmN0aW9uIHAoTil7dmFyIHcsRjtmdW5jdGlvbiBIKGosUCl7dHJ5e3ZhciBMPU5bal0oUCksWT1MLnZhbHVlLEI9WSBpbnN0YW5jZW9mIEQ7UHJv''@;'; put 'put ''bWlzZS5yZXNvbHZlKEI/WS52OlkpLnRoZW4oZnVuY3Rpb24oVyl7aWYoQil7dmFyIFo9InJldHVybiI9PT1qPyJyZXR1cm4iOiJuZXh0IjtpZighWS5rfHxXLmRvbmUpcmV0dXJuIEgoWixXKTtXPU5bWl0oVykudmFsdWV9UihMLmRvbmU/InJldHVybiI6Im5vcm1hbCIsVyl9LGZ1bmN0aW9u''@;'; put 'put ''KFcpe0goInRocm93IixXKX0pfWNhdGNoKFcpe1IoInRocm93IixXKX19ZnVuY3Rpb24gUihqLFApe3N3aXRjaChqKXtjYXNlInJldHVybiI6dy5yZXNvbHZlKHt2YWx1ZTpQLGRvbmU6ITB9KTticmVhaztjYXNlInRocm93Ijp3LnJlamVjdChQKTticmVhaztkZWZhdWx0OncucmVzb2x2ZSh7''@;'; put 'put ''dmFsdWU6UCxkb25lOiExfSl9KHc9dy5uZXh0KT9IKHcua2V5LHcuYXJnKTpGPW51bGx9dGhpcy5faW52b2tlPWZ1bmN0aW9uKGosUCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEwsWSl7dmFyIEI9e2tleTpqLGFyZzpQLHJlc29sdmU6TCxyZWplY3Q6WSxuZXh0Om51bGx9O0Y/Rj1G''@;'; put 'put ''Lm5leHQ9Qjoodz1GPUIsSChqLFApKX0pfSwiZnVuY3Rpb24iIT10eXBlb2YgTi5yZXR1cm4mJih0aGlzLnJldHVybj12b2lkIDApfXAucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpc30scC5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5faW52b2tlKCJuZXh0IixOKX0scC5wcm90b3R5cGUudGhyb3c9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuX2ludm9rZSgidGhyb3ciLE4pfSxwLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixOKX0sY2UuZXhwb3J0cz1mdW5jdGlvbiBfKE4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChOLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2UuZXhwb3J0cy5kZWZhdWx0PWNl''@;'; put 'put ''LmV4cG9ydHN9LDMxNDgzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMTkxNTApLF89Yig3NTIxMikscD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihOKXtpZihEKE4pKXJldHVybiBOO3Rocm93IG5ldyBwKF8oTikrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sMjc2Nzoo''@;'; put 'put ''Y2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQzNDA2KSxfPVN0cmluZyxwPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKE4pe2lmKEQoTikpcmV0dXJuIE47dGhyb3cgbmV3IHAoIkNhbid0IHNldCAiK18oTikrIiBhcyBhIHByb3RvdHlwZSIpfX0sMzc3MzE6KGNlLEosYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NzU0MSkuaGFzO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEQoXyksX319LDcwODI0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTgwMTIpLF89Yig5Nzk1MSkscD1iKDQ0NjQ4KS5mLE49RCgidW5zY29wYWJsZXMiKSx3PUFy''@;'; put 'put ''cmF5LnByb3RvdHlwZTt2b2lkIDA9PT13W05dJiZwKHcsTix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOl8obnVsbCl9KSxjZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3dbTl1bRl09ITB9fSw2MzMzNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2OCksXz1UeXBlRXJyb3I7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihwLE4pe2lmKEQoTixwKSlyZXR1cm4gcDt0aHJvdyBuZXcgXygiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LDExMDg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMjYzMyksXz1TdHJpbmcscD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihOKXtp''@;'; put 'put ''ZihEKE4pKXJldHVybiBOO3Rocm93IG5ldyBwKF8oTikrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSwzODgxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzE3MSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsTil7Zm9yKHZhciB3PTAsRj1hcmd1bWVudHMubGVuZ3RoPjI/TjpEKHAp''@;'; put 'put ''LEg9bmV3IF8oRik7Rj53OylIW3ddPXBbdysrXTtyZXR1cm4gSH19LDc0ODI0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTMxNjIpLF89Yig3NDg1KSxwPWIoNzE3MSksTj1mdW5jdGlvbih3KXtyZXR1cm4gZnVuY3Rpb24oRixILFIpe3ZhciBqPUQoRiksUD1wKGopO2lmKDA9''@;'; put 'put ''PT1QKXJldHVybiF3JiYtMTt2YXIgWSxMPV8oUixQKTtpZih3JiZIIT1IKXtmb3IoO1A+TDspaWYoKFk9altMKytdKSE9WSlyZXR1cm4hMH1lbHNlIGZvcig7UD5MO0wrKylpZigod3x8TCBpbiBqKSYmaltMXT09PUgpcmV0dXJuIHd8fEx8fDA7cmV0dXJuIXcmJi0xfX07Y2UuZXhwb3J0cz17''@;'; put 'put ''aW5jbHVkZXM6TighMCksaW5kZXhPZjpOKCExKX19LDM5MjA2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDYzODcpLF89Yig2NzI3NykscD1UeXBlRXJyb3IsTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHc9RCYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhp''@;'; put 'put ''cylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKEYpe3JldHVybiBGIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKTtjZS5leHBvcnRzPXc/ZnVuY3Rpb24oRixIKXtpZihfKEYpJiYhTihGLCJsZW5ndGgi''@;'; put 'put ''KS53cml0YWJsZSl0aHJvdyBuZXcgcCgiQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCIpO3JldHVybiBGLmxlbmd0aD1IfTpmdW5jdGlvbihGLEgpe3JldHVybiBGLmxlbmd0aD1IfX0sNzc2Mzk6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1ODYwNyk7Y2UuZXhwb3J0cz1E''@;'; put 'put ''KFtdLnNsaWNlKX0sNDI5MjY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxMTA4KSxfPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxOLHcsRil7dHJ5e3JldHVybiBGP04oRCh3KVswXSx3WzFdKTpOKHcpfWNhdGNoKEgpe18ocCwidGhyb3ciLEgpfX19LDg2Njc1Oihj''@;'; put 'put ''ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89RCh7fS50b1N0cmluZykscD1EKCIiLnNsaWNlKTtjZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3JldHVybiBwKF8oTiksOCwtMSl9fSw3MTgyNDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM4NTk1KSxfPWIoMTkx''@;'; put 'put ''NTApLHA9Yig4NjY3NSksdz1iKDU4MDEyKSgidG9TdHJpbmdUYWciKSxGPU9iamVjdCxIPSJBcmd1bWVudHMiPT09cChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2NlLmV4cG9ydHM9RD9wOmZ1bmN0aW9uKGope3ZhciBQLEwsWTtyZXR1cm4gdm9pZCAwPT09aj8iVW5kZWZpbmVk''@;'; put 'put ''IjpudWxsPT09aj8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihMPWZ1bmN0aW9uKGosUCl7dHJ5e3JldHVybiBqW1BdfWNhdGNoe319KFA9RihqKSx3KSk/TDpIP3AoUCk6Ik9iamVjdCI9PT0oWT1wKFApKSYmXyhQLmNhbGxlZSk/IkFyZ3VtZW50cyI6WX19LDQ4NjM5OihjZSxKLGIpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBEPWIoMzhlMyksXz1iKDg4MDc4KSxwPWIoNTQxMjIpLE49Yig0NDY0OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LEYsSCl7Zm9yKHZhciBSPV8oRiksaj1OLmYsUD1wLmYsTD0wO0w8Ui5sZW5ndGg7TCsrKXt2YXIgWT1SW0xdOyFEKHcsWSkmJighSHx8IUQoSCxZKSkm''@;'; put 'put ''JmoodyxZLFAoRixZKSl9fX0sODI4MzQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hRChmdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt9cmV0dXJuIF8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBf''@;'; put 'put ''KSE9PV8ucHJvdG90eXBlfSl9LDU4OTc4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSixiKXtyZXR1cm57dmFsdWU6Sixkb25lOmJ9fX0sMzY2Nzg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NjM4NyksXz1iKDQ0NjQ4KSxwPWIoNzc3NzMpO2NlLmV4''@;'; put 'put ''cG9ydHM9RD9mdW5jdGlvbihOLHcsRil7cmV0dXJuIF8uZihOLHcscCgxLEYpKX06ZnVuY3Rpb24oTix3LEYpe3JldHVybiBOW3ddPUYsTn19LDc3NzczOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSixiKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmSiksY29uZmlndXJh''@;'; put 'put ''YmxlOiEoMiZKKSx3cml0YWJsZTohKDQmSiksdmFsdWU6Yn19fSw1ODc5NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2Mzg3KSxfPWIoNDQ2NDgpLHA9Yig3Nzc3Myk7Y2UuZXhwb3J0cz1mdW5jdGlvbihOLHcsRil7RD9fLmYoTix3LHAoMCxGKSk6Tlt3XT1GfX0sNDQwMzk6''@;'; put 'put ''KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxNjk4MCksXz1iKDQ0NjQ4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsTix3KXtyZXR1cm4gdy5nZXQmJkQody5nZXQsTix7Z2V0dGVyOiEwfSksdy5zZXQmJkQody5zZXQsTix7c2V0dGVyOiEwfSksXy5mKHAsTix3KX19LDMxMDgzOihj''@;'; put 'put ''ZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMTkxNTApLF89Yig0NDY0OCkscD1iKDE2OTgwKSxOPWIoNDgxMDQpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGLEgsUil7Unx8KFI9e30pO3ZhciBqPVIuZW51bWVyYWJsZSxQPXZvaWQgMCE9PVIubmFtZT9SLm5hbWU6RjtpZihEKEgpJiZw''@;'; put 'put ''KEgsUCxSKSxSLmdsb2JhbClqP3dbRl09SDpOKEYsSCk7ZWxzZXt0cnl7Ui51bnNhZmU/d1tGXSYmKGo9ITApOmRlbGV0ZSB3W0ZdfWNhdGNoe31qP3dbRl09SDpfLmYodyxGLHt2YWx1ZTpILGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFSLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZToh''@;'; put 'put ''Ui5ub25Xcml0YWJsZX0pfXJldHVybiB3fX0sMTQ3NTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMTA4Myk7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsTil7Zm9yKHZhciB3IGluIHApRChfLHcscFt3XSxOKTtyZXR1cm4gX319LDQ4MTA0OihjZSxKLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBEPWIoMzM5NjMpLF89T2JqZWN0LmRlZmluZVByb3BlcnR5O2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxOKXt0cnl7XyhELHAse3ZhbHVlOk4sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2h7RFtwXT1OfXJldHVybiBOfX0sNDMxOTU6KGNlLEosYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEQ9Yig3NTIxMiksXz1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihwLE4pe2lmKCFkZWxldGUgcFtOXSl0aHJvdyBuZXcgXygiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK0QoTikrIiBvZiAiK0QocCkpfX0sNDYzODc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEQ9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hRChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSl9LDU1OTg4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzM5NjMpLF89YigzMjYzMyks''@;'; put 'put ''cD1ELmRvY3VtZW50LE49XyhwKSYmXyhwLmNyZWF0ZUVsZW1lbnQpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIE4/cC5jcmVhdGVFbGVtZW50KHcpOnt9fX0sMzMxNjpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSj1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihEKXtpZihEPjkw''@;'; put 'put ''MDcxOTkyNTQ3NDA5OTEpdGhyb3cgSigiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIER9fSw1ODU0MDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51''@;'; put 'put ''bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDQ0MTM3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjM1OCk7Y2UuZXhwb3J0cz0vKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdChEKX0sMjE1MTA6KGNlLEosYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NzA5Mik7Y2UuZXhwb3J0cz0iTk9ERSI9PT1EfSwyMzU4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoMzM5NjMpLm5hdmlnYXRvcixwPV8mJl8udXNlckFnZW50O2NlLmV4cG9ydHM9cD9TdHJpbmcocCk6IiJ9LDQ0MDY2OihjZSxKLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBILFIsRD1iKDMzOTYzKSxfPWIoMjM1OCkscD1ELnByb2Nlc3MsTj1ELkRlbm8sdz1wJiZwLnZlcnNpb25zfHxOJiZOLnZlcnNpb24sRj13JiZ3LnY4O0YmJihSPShIPUYuc3BsaXQoIi4iKSlbMF0+MCYmSFswXTw0PzE6KyhIWzBdK0hbMV0pKSwhUiYmXyYm''@;'; put 'put ''KCEoSD1fLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8SFsxXT49NzQpJiYoSD1fLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoUj0rSFsxXSksY2UuZXhwb3J0cz1SfSw0NzA5MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDMzOTYzKSxfPWIoMjM1OCkscD1iKDg2Njc1KSxOPWZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiBfLnNsaWNlKDAsdy5sZW5ndGgpPT09d307Y2UuZXhwb3J0cz1OKCJCdW4vIik/IkJVTiI6TigiQ2xvdWRmbGFyZS1Xb3JrZXJzIik/IkNMT1VERkxBUkUiOk4oIkRlbm8vIik/IkRFTk8iOk4oIk5vZGUuanMvIik/Ik5PREUiOkQuQnVuJiYic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEJ1bi52ZXJzaW9uPyJCVU4iOkQuRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb24/IkRFTk8iOiJwcm9jZXNzIj09PXAoRC5wcm9jZXNzKT8iTk9ERSI6RC53aW5kb3cmJkQuZG9jdW1lbnQ/IkJST1dTRVIiOiJSRVNUIn0sOTg4NTQ6KGNlLEosYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEQ9Yig1ODYwNyksXz1FcnJvcixwPUQoIiIucmVwbGFjZSksTj1TdHJpbmcobmV3IF8oInp4Y2FzZCIpLnN0YWNrKSx3PS9cblxzKmF0IFteOl0qOlteXG5dKi8sRj13LnRlc3QoTik7Y2UuZXhwb3J0cz1mdW5jdGlvbihILFIpe2lmKEYmJiJzdHJpbmciPT10eXBlb2YgSCYmIV8u''@;'; put 'put ''cHJlcGFyZVN0YWNrVHJhY2UpZm9yKDtSLS07KUg9cChILHcsIiIpO3JldHVybiBIfX0sMjIzMDQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNjY3OCksXz1iKDk4ODU0KSxwPWIoNzQ5NjQpLE49RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7Y2UuZXhwb3J0cz1mdW5jdGlvbih3''@;'; put 'put ''LEYsSCxSKXtwJiYoTj9OKHcsRik6RCh3LCJzdGFjayIsXyhILFIpKSl9fSw3NDk2NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU1NTkyKSxfPWIoNzc3NzMpO2NlLmV4cG9ydHM9IUQoZnVuY3Rpb24oKXt2YXIgcD1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBw''@;'; put 'put ''KXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJzdGFjayIsXygxLDcpKSw3IT09cC5zdGFjayl9KX0sMjgzNjc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMzk2MyksXz1iKDU0MTIyKS5mLHA9YigzNjY3OCksTj1iKDMxMDgzKSx3PWIoNDgxMDQpLEY9Yig0ODYzOSksSD1i''@;'; put 'put ''KDE2MzYzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIsail7dmFyIFcsWixxLFEsWCxQPVIudGFyZ2V0LEw9Ui5nbG9iYWwsWT1SLnN0YXQ7aWYoVz1MP0Q6WT9EW1BdfHx3KFAse30pOkRbUF0mJkRbUF0ucHJvdG90eXBlKWZvcihaIGluIGope2lmKFE9altaXSxxPVIuZG9udENhbGxHZXRTZXQ/''@;'; put 'put ''KFg9XyhXLFopKSYmWC52YWx1ZTpXW1pdLCFIKEw/WjpQKyhZPyIuIjoiIyIpK1osUi5mb3JjZWQpJiZ2b2lkIDAhPT1xKXtpZih0eXBlb2YgUT09dHlwZW9mIHEpY29udGludWU7RihRLHEpfShSLnNoYW18fHEmJnEuc2hhbSkmJnAoUSwic2hhbSIsITApLE4oVyxaLFEsUil9fX0sNTU1OTI6''@;'; put 'put ''Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuISFKKCl9Y2F0Y2h7cmV0dXJuITB9fX0sNDAyMjA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUscD1fLmFwcGx5LE49Xy5jYWxsO2NlLmV4''@;'; put 'put ''cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoRD9OLmJpbmQocCk6ZnVuY3Rpb24oKXtyZXR1cm4gTi5hcHBseShwLGFyZ3VtZW50cyl9KX0sNzg4MTE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNjI5KSxfPWIoMzE0ODMpLHA9Yig3NTE1''@;'; put 'put ''NyksTj1EKEQuYmluZCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LEYpe3JldHVybiBfKHcpLHZvaWQgMD09PUY/dzpwP04odyxGKTpmdW5jdGlvbigpe3JldHVybiB3LmFwcGx5KEYsYXJndW1lbnRzKX19fSw3NTE1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU1NTkyKTtjZS5l''@;'; put 'put ''eHBvcnRzPSFEKGZ1bmN0aW9uKCl7dmFyIF89ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgX3x8Xy5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KX0sNDY5MjY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NTE1NyksXz1GdW5jdGlvbi5w''@;'; put 'put ''cm90b3R5cGUuY2FsbDtjZS5leHBvcnRzPUQ/Xy5iaW5kKF8pOmZ1bmN0aW9uKCl7cmV0dXJuIF8uYXBwbHkoXyxhcmd1bWVudHMpfX0sODk5ODE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NjM4NyksXz1iKDM4ZTMpLHA9RnVuY3Rpb24ucHJvdG90eXBlLE49RCYmT2JqZWN0''@;'; put 'put ''LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix3PV8ocCwibmFtZSIpLEY9dyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSxIPXcmJighRHx8RCYmTihwLCJuYW1lIikuY29uZmlndXJhYmxlKTtjZS5leHBvcnRzPXtFWElTVFM6dyxQUk9QRVI6RixDT05GSUdVUkFCTEU6SH19LDY5''@;'; put 'put ''MjI3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89YigzMTQ4Myk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwLE4sdyl7dHJ5e3JldHVybiBEKF8oT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLE4pW3ddKSl9Y2F0Y2h7fX19LDM2Mjk6KGNlLEosYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEQ9Yig4NjY3NSksXz1iKDU4NjA3KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe2lmKCJGdW5jdGlvbiI9PT1EKHApKXJldHVybiBfKHApfX0sNTg2MDc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUscD1f''@;'; put 'put ''LmNhbGwsTj1EJiZfLmJpbmQuYmluZChwLHApO2NlLmV4cG9ydHM9RD9OOmZ1bmN0aW9uKHcpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHcsYXJndW1lbnRzKX19fSw2NjUwMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDMzOTYzKTtjZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKF8scCl7dmFyIE49RFtfXSx3PU4mJk4ucHJvdG90eXBlO3JldHVybiB3JiZ3W3BdfX0sMTIyMDI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMzk2MyksXz1iKDE5MTUwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKE4sdyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gXyhOKT9OOnZvaWQgMH0oRFtOXSk6RFtOXSYmRFtOXVt3XX19LDc1NDI0OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSil7cmV0dXJue2l0ZXJhdG9yOkosbmV4dDpKLm5leHQsZG9uZTohMX19fSw2MzYyNzooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgRD1iKDQ2OTI2KSxfPWIoMTEwOCkscD1iKDc1NDI0KSxOPWIoMzY5MzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGKXsoIUZ8fCJzdHJpbmciIT10eXBlb2YgdykmJl8odyk7dmFyIEg9Tih3KTtyZXR1cm4gcChfKHZvaWQgMCE9PUg/RChILHcpOncpKX19LDM2OTMyOihjZSxK''@;'; put 'put ''LGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzE4MjQpLF89Yig4NjExNSkscD1iKDk0NDY4KSxOPWIoMTkyNTgpLEY9Yig1ODAxMikoIml0ZXJhdG9yIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihIKXtpZighcChIKSlyZXR1cm4gXyhILEYpfHxfKEgsIkBAaXRlcmF0b3IiKXx8TltEKEgpXX19''@;'; put 'put ''LDQzNTg0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDY5MjYpLF89YigzMTQ4MykscD1iKDExMDgpLE49Yig3NTIxMiksdz1iKDM2OTMyKSxGPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEgsUil7dmFyIGo9YXJndW1lbnRzLmxlbmd0aDwyP3coSCk6UjtpZihfKGop''@;'; put 'put ''KXJldHVybiBwKEQoaixIKSk7dGhyb3cgbmV3IEYoTihIKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sODQ1MjQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1ODYwNyksXz1iKDY3Mjc3KSxwPWIoMTkxNTApLE49Yig4NjY3NSksdz1iKDY4MzMyKSxGPUQoW10ucHVzaCk7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihIKXtpZihwKEgpKXJldHVybiBIO2lmKF8oSCkpe2Zvcih2YXIgUj1ILmxlbmd0aCxqPVtdLFA9MDtQPFI7UCsrKXt2YXIgTD1IW1BdOyJzdHJpbmciPT10eXBlb2YgTD9GKGosTCk6KCJudW1iZXIiPT10eXBlb2YgTHx8Ik51bWJlciI9PT1OKEwpfHwiU3RyaW5nIj09''@;'; put 'put ''PU4oTCkpJiZGKGosdyhMKSl9dmFyIFk9ai5sZW5ndGgsQj0hMDtyZXR1cm4gZnVuY3Rpb24oVyxaKXtpZihCKXJldHVybiBCPSExLFo7aWYoXyh0aGlzKSlyZXR1cm4gWjtmb3IodmFyIHE9MDtxPFk7cSsrKWlmKGpbcV09PT1XKXJldHVybiBafX19fSw4NjExNTooY2UsSixiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgRD1iKDMxNDgzKSxfPWIoOTQ0NjgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxOKXt2YXIgdz1wW05dO3JldHVybiBfKHcpP3ZvaWQgMDpEKHcpfX0sNDM2MzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMTQ4MyksXz1iKDExMDgpLHA9Yig0NjkyNiksTj1i''@;'; put 'put ''KDY0NTUwKSx3PWIoNzU0MjQpLEY9IkludmFsaWQgc2l6ZSIsSD1SYW5nZUVycm9yLFI9VHlwZUVycm9yLGo9TWF0aC5tYXgsUD1mdW5jdGlvbihMLFkpe3RoaXMuc2V0PUwsdGhpcy5zaXplPWooWSwwKSx0aGlzLmhhcz1EKEwuaGFzKSx0aGlzLmtleXM9RChMLmtleXMpfTtQLnByb3RvdHlw''@;'; put 'put ''ZT17Z2V0SXRlcmF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyhfKHAodGhpcy5rZXlzLHRoaXMuc2V0KSkpfSxpbmNsdWRlczpmdW5jdGlvbihMKXtyZXR1cm4gcCh0aGlzLmhhcyx0aGlzLnNldCxMKX19LGNlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7XyhMKTt2YXIgWT0rTC5zaXplO2lmKFkhPVkp''@;'; put 'put ''dGhyb3cgbmV3IFIoRik7dmFyIEI9TihZKTtpZihCPDApdGhyb3cgbmV3IEgoRik7cmV0dXJuIG5ldyBQKEwsQil9fSw5NjMzOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU4NjA3KSxfPWIoMzE5NTApLHA9TWF0aC5mbG9vcixOPUQoIiIuY2hhckF0KSx3PUQoIiIucmVwbGFj''@;'; put 'put ''ZSksRj1EKCIiLnNsaWNlKSxIPS9cJChbJCYnYF18XGR7MSwyfXw8W14+XSo+KS9nLFI9L1wkKFskJidgXXxcZHsxLDJ9KS9nO2NlLmV4cG9ydHM9ZnVuY3Rpb24oaixQLEwsWSxCLFcpe3ZhciBaPUwrai5sZW5ndGgscT1ZLmxlbmd0aCxRPVI7cmV0dXJuIHZvaWQgMCE9PUImJihCPV8oQiks''@;'; put 'put ''UT1IKSx3KFcsUSxmdW5jdGlvbihYLHRlKXt2YXIgcmU7c3dpdGNoKE4odGUsMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIGo7Y2FzZSJgIjpyZXR1cm4gRihQLDAsTCk7Y2FzZSInIjpyZXR1cm4gRihQLFopO2Nhc2UiPCI6cmU9QltGKHRlLDEsLTEpXTticmVhaztkZWZh''@;'; put 'put ''dWx0OnZhciBvZT0rdGU7aWYoMD09PW9lKXJldHVybiBYO2lmKG9lPnEpe3ZhciBnZT1wKG9lLzEwKTtyZXR1cm4gMD09PWdlP1g6Z2U8PXE/dm9pZCAwPT09WVtnZS0xXT9OKHRlLDEpOllbZ2UtMV0rTih0ZSwxKTpYfXJlPVlbb2UtMV19cmV0dXJuIHZvaWQgMD09PXJlPyIiOnJlfSl9fSwz''@;'; put 'put ''Mzk2MzpmdW5jdGlvbihjZSl7InVzZSBzdHJpY3QiO3ZhciBKPWZ1bmN0aW9uKGIpe3JldHVybiBiJiZiLk1hdGg9PT1NYXRoJiZifTtjZS5leHBvcnRzPUooIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8Sigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93''@;'; put 'put ''KXx8Sigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxKKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxKKCJvYmplY3QiPT10eXBlb2YgdGhpcyYmdGhpcyl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDM4ZTM6KGNl''@;'; put 'put ''LEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1ODYwNyksXz1iKDMxOTUwKSxwPUQoe30uaGFzT3duUHJvcGVydHkpO2NlLmV4cG9ydHM9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24odyxGKXtyZXR1cm4gcChfKHcpLEYpfX0sMzQ2NzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17''@;'; put 'put ''fX0sODczNzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxMjIwMik7Y2UuZXhwb3J0cz1EKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw1NzI0NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2Mzg3KSxfPWIoNTU1OTIpLHA9Yig1NTk4OCk7Y2UuZXhw''@;'; put 'put ''b3J0cz0hRCYmIV8oZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNTU4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89Yig1NTU5MikscD1iKDg2Njc1''@;'; put 'put ''KSxOPU9iamVjdCx3PUQoIiIuc3BsaXQpO2NlLmV4cG9ydHM9XyhmdW5jdGlvbigpe3JldHVybiFOKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihGKXtyZXR1cm4iU3RyaW5nIj09PXAoRik/dyhGLCIiKTpOKEYpfTpOfSwxNzI5NjooY2UsSixiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgRD1iKDE5MTUwKSxfPWIoMzI2MzMpLHA9YigyMTYxMik7Y2UuZXhwb3J0cz1mdW5jdGlvbihOLHcsRil7dmFyIEgsUjtyZXR1cm4gcCYmRChIPXcuY29uc3RydWN0b3IpJiZIIT09RiYmXyhSPUgucHJvdG90eXBlKSYmUiE9PUYucHJvdG90eXBlJiZwKE4sUiksTn19LDI2OTMx''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89YigxOTE1MCkscD1iKDQ4MzU2KSxOPUQoRnVuY3Rpb24udG9TdHJpbmcpO18ocC5pbnNwZWN0U291cmNlKXx8KHAuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih3KXtyZXR1cm4gTih3KX0pLGNlLmV4cG9ydHM9cC5pbnNw''@;'; put 'put ''ZWN0U291cmNlfSw2NDg1NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDMyNjMzKSxfPWIoMzY2NzgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxOKXtEKE4pJiYiY2F1c2UiaW4gTiYmXyhwLCJjYXVzZSIsTi5jYXVzZSl9fSw0NzM2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBZLEIsVyxEPWIoNDg2OTEpLF89YigzMzk2MykscD1iKDMyNjMzKSxOPWIoMzY2NzgpLHc9YigzOGUzKSxGPWIoNDgzNTYpLEg9Yig3OTY2MiksUj1iKDM0NjcwKSxqPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsUD1fLlR5cGVFcnJvcjtpZihEfHxGLnN0YXRlKXt2YXIgUT1GLnN0''@;'; put 'put ''YXRlfHwoRi5zdGF0ZT1uZXcoMCxfLldlYWtNYXApKTtRLmdldD1RLmdldCxRLmhhcz1RLmhhcyxRLnNldD1RLnNldCxZPWZ1bmN0aW9uKHRlLHJlKXtpZihRLmhhcyh0ZSkpdGhyb3cgbmV3IFAoaik7cmV0dXJuIHJlLmZhY2FkZT10ZSxRLnNldCh0ZSxyZSkscmV9LEI9ZnVuY3Rpb24odGUp''@;'; put 'put ''e3JldHVybiBRLmdldCh0ZSl8fHt9fSxXPWZ1bmN0aW9uKHRlKXtyZXR1cm4gUS5oYXModGUpfX1lbHNle3ZhciBYPUgoInN0YXRlIik7UltYXT0hMCxZPWZ1bmN0aW9uKHRlLHJlKXtpZih3KHRlLFgpKXRocm93IG5ldyBQKGopO3JldHVybiByZS5mYWNhZGU9dGUsTih0ZSxYLHJlKSxyZX0s''@;'; put 'put ''Qj1mdW5jdGlvbih0ZSl7cmV0dXJuIHcodGUsWCk/dGVbWF06e319LFc9ZnVuY3Rpb24odGUpe3JldHVybiB3KHRlLFgpfX1jZS5leHBvcnRzPXtzZXQ6WSxnZXQ6QixoYXM6VyxlbmZvcmNlOmZ1bmN0aW9uKHRlKXtyZXR1cm4gVyh0ZSk/Qih0ZSk6WSh0ZSx7fSl9LGdldHRlckZvcjpmdW5j''@;'; put 'put ''dGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgb2U7aWYoIXAocmUpfHwob2U9QihyZSkpLnR5cGUhPT10ZSl0aHJvdyBuZXcgUCgiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3RlKyIgcmVxdWlyZWQiKTtyZXR1cm4gb2V9fX19LDY2NzkyOihjZSxKLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBEPWIoNTgwMTIpLF89YigxOTI1OCkscD1EKCJpdGVyYXRvciIpLE49QXJyYXkucHJvdG90eXBlO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIHZvaWQgMCE9PXcmJihfLkFycmF5PT09d3x8TltwXT09PXcpfX0sNjcyNzc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9''@;'; put 'put ''Yig4NjY3NSk7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihwKXtyZXR1cm4iQXJyYXkiPT09RChwKX19LDE5MTUwOmNlPT57InVzZSBzdHJpY3QiO3ZhciBKPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbDtjZS5leHBvcnRzPXR5cGVvZiBKPiJ1IiYm''@;'; put 'put ''dm9pZCAwIT09Sj9mdW5jdGlvbihiKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYnx8Yj09PUp9OmZ1bmN0aW9uKGIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBifX0sMTYzNjM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1NTU5MiksXz1iKDE5MTUwKSxwPS8jfFwucHJv''@;'; put 'put ''dG90eXBlXC4vLE49ZnVuY3Rpb24oaixQKXt2YXIgTD1GW3coaildO3JldHVybiBMPT09Unx8TCE9PUgmJihfKFApP0QoUCk6ISFQKX0sdz1OLm5vcm1hbGl6ZT1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nKGopLnJlcGxhY2UocCwiLiIpLnRvTG93ZXJDYXNlKCl9LEY9Ti5kYXRhPXt9LEg9''@;'; put 'put ''Ti5OQVRJVkU9Ik4iLFI9Ti5QT0xZRklMTD0iUCI7Y2UuZXhwb3J0cz1OfSw5NDQ2ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKEope3JldHVybiBudWxsPT1KfX0sMzI2MzM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxOTE1MCk7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihfKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIF8/bnVsbCE9PV86RChfKX19LDQzNDA2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzI2MzMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEQoXyl8fG51bGw9PT1ffX0sODg3ODg6Y2U9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7Y2UuZXhwb3J0cz0hMX0sODg4Njc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMjYzMyksXz1iKDg2Njc1KSxOPWIoNTgwMTIpKCJtYXRjaCIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIEY7cmV0dXJuIEQodykmJih2b2lkIDAhPT0oRj13W05dKT8hIUY6IlJlZ0V4''@;'; put 'put ''cCI9PT1fKHcpKX19LDkyOTk4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMTIyMDIpLF89YigxOTE1MCkscD1iKDQ2OCksTj1iKDY2OTk1KSx3PU9iamVjdDtjZS5leHBvcnRzPU4/ZnVuY3Rpb24oRil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBGfTpmdW5jdGlvbihGKXt2YXIg''@;'; put 'put ''SD1EKCJTeW1ib2wiKTtyZXR1cm4gXyhIKSYmcChILnByb3RvdHlwZSx3KEYpKX19LDExMzg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NjkyNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsTil7Zm9yKHZhciBILFIsdz1OP186Xy5pdGVyYXRvcixGPV8ubmV4dDshKEg9RChG''@;'; put 'put ''LHcpKS5kb25lOylpZih2b2lkIDAhPT0oUj1wKEgudmFsdWUpKSlyZXR1cm4gUn19LDMwNzg3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNzg4MTEpLF89Yig0NjkyNikscD1iKDExMDgpLE49Yig3NTIxMiksdz1iKDY2NzkyKSxGPWIoNzE3MSksSD1iKDQ2OCksUj1iKDQzNTg0''@;'; put 'put ''KSxqPWIoMzY5MzIpLFA9Yig2NjU0MiksTD1UeXBlRXJyb3IsWT1mdW5jdGlvbihXLFope3RoaXMuc3RvcHBlZD1XLHRoaXMucmVzdWx0PVp9LEI9WS5wcm90b3R5cGU7Y2UuZXhwb3J0cz1mdW5jdGlvbihXLFoscSl7dmFyIF9lLFRlLFNlLHplLHosZyx5LFg9ISghcXx8IXEuQVNfRU5UUklF''@;'; put 'put ''UyksdGU9ISghcXx8IXEuSVNfUkVDT1JEKSxyZT0hKCFxfHwhcS5JU19JVEVSQVRPUiksb2U9ISghcXx8IXEuSU5URVJSVVBURUQpLGdlPUQoWixxJiZxLnRoYXQpLHg9ZnVuY3Rpb24oVCl7cmV0dXJuIF9lJiZQKF9lLCJub3JtYWwiLFQpLG5ldyBZKCEwLFQpfSxDPWZ1bmN0aW9uKFQpe3Jl''@;'; put 'put ''dHVybiBYPyhwKFQpLG9lP2dlKFRbMF0sVFsxXSx4KTpnZShUWzBdLFRbMV0pKTpvZT9nZShULHgpOmdlKFQpfTtpZih0ZSlfZT1XLml0ZXJhdG9yO2Vsc2UgaWYocmUpX2U9VztlbHNle2lmKCEoVGU9aihXKSkpdGhyb3cgbmV3IEwoTihXKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHcoVGUp''@;'; put 'put ''KXtmb3IoU2U9MCx6ZT1GKFcpO3plPlNlO1NlKyspaWYoKHo9QyhXW1NlXSkpJiZIKEIseikpcmV0dXJuIHo7cmV0dXJuIG5ldyBZKCExKX1fZT1SKFcsVGUpfWZvcihnPXRlP1cubmV4dDpfZS5uZXh0OyEoeT1fKGcsX2UpKS5kb25lOyl7dHJ5e3o9Qyh5LnZhbHVlKX1jYXRjaChUKXtQKF9l''@;'; put 'put ''LCJ0aHJvdyIsVCl9aWYoIm9iamVjdCI9PXR5cGVvZiB6JiZ6JiZIKEIseikpcmV0dXJuIHp9cmV0dXJuIG5ldyBZKCExKX19LDY2NTQyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDY5MjYpLF89YigxMTA4KSxwPWIoODYxMTUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTix3LEYp''@;'; put 'put ''e3ZhciBILFI7XyhOKTt0cnl7aWYoIShIPXAoTiwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dyl0aHJvdyBGO3JldHVybiBGfUg9RChILE4pfWNhdGNoKGope1I9ITAsSD1qfWlmKCJ0aHJvdyI9PT13KXRocm93IEY7aWYoUil0aHJvdyBIO3JldHVybiBfKEgpLEZ9fSw2OTkxNzooY2UsSixi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2OTI2KSxfPWIoOTc5NTEpLHA9YigzNjY3OCksTj1iKDE0NzUwKSx3PWIoNTgwMTIpLEY9Yig0NzM2KSxIPWIoODYxMTUpLFI9Yig3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsaj1iKDU4OTc4KSxQPWIoNjY1NDIpLEw9dygidG9TdHJpbmdUYWci''@;'; put 'put ''KSxZPSJJdGVyYXRvckhlbHBlciIsQj0iV3JhcEZvclZhbGlkSXRlcmF0b3IiLFc9Ri5zZXQsWj1mdW5jdGlvbihYKXt2YXIgdGU9Ri5nZXR0ZXJGb3IoWD9COlkpO3JldHVybiBOKF8oUikse25leHQ6ZnVuY3Rpb24oKXt2YXIgb2U9dGUodGhpcyk7aWYoWClyZXR1cm4gb2UubmV4dEhhbmRs''@;'; put 'put ''ZXIoKTtpZihvZS5kb25lKXJldHVybiBqKHZvaWQgMCwhMCk7dHJ5e3ZhciBnZT1vZS5uZXh0SGFuZGxlcigpO3JldHVybiBvZS5yZXR1cm5IYW5kbGVyUmVzdWx0P2dlOmooZ2Usb2UuZG9uZSl9Y2F0Y2goX2Upe3Rocm93IG9lLmRvbmU9ITAsX2V9fSxyZXR1cm46ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''cmU9dGUodGhpcyksb2U9cmUuaXRlcmF0b3I7aWYocmUuZG9uZT0hMCxYKXt2YXIgZ2U9SChvZSwicmV0dXJuIik7cmV0dXJuIGdlP0QoZ2Usb2UpOmoodm9pZCAwLCEwKX1pZihyZS5pbm5lcil0cnl7UChyZS5pbm5lci5pdGVyYXRvciwibm9ybWFsIil9Y2F0Y2goX2Upe3JldHVybiBQKG9l''@;'; put 'put ''LCJ0aHJvdyIsX2UpfXJldHVybiBvZSYmUChvZSwibm9ybWFsIiksaih2b2lkIDAsITApfX0pfSxxPVooITApLFE9WighMSk7cChRLEwsIkl0ZXJhdG9yIEhlbHBlciIpLGNlLmV4cG9ydHM9ZnVuY3Rpb24oWCx0ZSxyZSl7dmFyIG9lPWZ1bmN0aW9uKF9lLFRlKXtUZT8oVGUuaXRlcmF0b3I9''@;'; put 'put ''X2UuaXRlcmF0b3IsVGUubmV4dD1fZS5uZXh0KTpUZT1fZSxUZS50eXBlPXRlP0I6WSxUZS5yZXR1cm5IYW5kbGVyUmVzdWx0PSEhcmUsVGUubmV4dEhhbmRsZXI9WCxUZS5jb3VudGVyPTAsVGUuZG9uZT0hMSxXKHRoaXMsVGUpfTtyZXR1cm4gb2UucHJvdG90eXBlPXRlP3E6USxvZX19LDQx''@;'; put 'put ''MjUyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzM5NjMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwKXt2YXIgTj1ELkl0ZXJhdG9yLHc9TiYmTi5wcm90b3R5cGUsRj13JiZ3W19dLEg9ITE7aWYoRil0cnl7Ri5jYWxsKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9''@;'; put 'put ''fSxyZXR1cm46ZnVuY3Rpb24oKXtIPSEwfX0sLTEpfWNhdGNoKFIpe1IgaW5zdGFuY2VvZiBwfHwoSD0hMSl9aWYoIUgpcmV0dXJuIEZ9fSw3ODk2ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTCxZLEIsRD1iKDU1NTkyKSxfPWIoMTkxNTApLHA9YigzMjYzMyksTj1iKDk3OTUxKSx3''@;'; put 'put ''PWIoMjY0MDApLEY9YigzMTA4MyksSD1iKDU4MDEyKSxSPWIoODg3ODgpLGo9SCgiaXRlcmF0b3IiKSxQPSExO1tdLmtleXMmJigibmV4dCJpbihCPVtdLmtleXMoKSk/KFk9dyh3KEIpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoTD1ZKTpQPSEwKSwhcChMKXx8RChmdW5jdGlvbigpe3ZhciBa''@;'; put 'put ''PXt9O3JldHVybiBMW2pdLmNhbGwoWikhPT1afSk/TD17fTpSJiYoTD1OKEwpKSxfKExbal0pfHxGKEwsaixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksY2UuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6TCxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOlB9fSwxOTI1ODpjZT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtjZS5leHBvcnRzPXt9fSw3MTcxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTQyMzcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIEQoXy5sZW5ndGgpfX0sMTY5ODA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig1ODYwNyksXz1iKDU1NTkyKSxw''@;'; put 'put ''PWIoMTkxNTApLE49YigzOGUzKSx3PWIoNDYzODcpLEY9Yig4OTk4MSkuQ09ORklHVVJBQkxFLEg9YigyNjkzMSksUj1iKDQ3MzYpLGo9Ui5lbmZvcmNlLFA9Ui5nZXQsTD1TdHJpbmcsWT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1EKCIiLnNsaWNlKSxXPUQoIiIucmVwbGFjZSksWj1EKFtd''@;'; put 'put ''LmpvaW4pLHE9dyYmIV8oZnVuY3Rpb24oKXtyZXR1cm4gOCE9PVkoZnVuY3Rpb24oKXt9LCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSksUT1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIiksWD1jZS5leHBvcnRzPWZ1bmN0aW9uKHRlLHJlLG9lKXsiU3ltYm9sKCI9PT1CKEwocmUp''@;'; put 'put ''LDAsNykmJihyZT0iWyIrVyhMKHJlKSwvXlN5bWJvbFwoKFteKV0qKVwpLiokLywiJDEiKSsiXSIpLG9lJiZvZS5nZXR0ZXImJihyZT0iZ2V0ICIrcmUpLG9lJiZvZS5zZXR0ZXImJihyZT0ic2V0ICIrcmUpLCghTih0ZSwibmFtZSIpfHxGJiZ0ZS5uYW1lIT09cmUpJiYodz9ZKHRlLCJuYW1l''@;'; put 'put ''Iix7dmFsdWU6cmUsY29uZmlndXJhYmxlOiEwfSk6dGUubmFtZT1yZSkscSYmb2UmJk4ob2UsImFyaXR5IikmJnRlLmxlbmd0aCE9PW9lLmFyaXR5JiZZKHRlLCJsZW5ndGgiLHt2YWx1ZTpvZS5hcml0eX0pO3RyeXtvZSYmTihvZSwiY29uc3RydWN0b3IiKSYmb2UuY29uc3RydWN0b3I/dyYm''@;'; put 'put ''WSh0ZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTp0ZS5wcm90b3R5cGUmJih0ZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaHt9dmFyIGdlPWoodGUpO3JldHVybiBOKGdlLCJzb3VyY2UiKXx8KGdlLnNvdXJjZT1aKFEsInN0cmluZyI9PXR5cGVvZiByZT9yZToiIikpLHRlfTtGdW5jdGlv''@;'; put 'put ''bi5wcm90b3R5cGUudG9TdHJpbmc9WChmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpJiZQKHRoaXMpLnNvdXJjZXx8SCh0aGlzKX0sInRvU3RyaW5nIil9LDE4NTU2OmNlPT57InVzZSBzdHJpY3QiO3ZhciBKPU1hdGguY2VpbCxiPU1hdGguZmxvb3I7Y2UuZXhwb3J0cz1NYXRoLnRydW5jfHxm''@;'; put 'put ''dW5jdGlvbihfKXt2YXIgcD0rXztyZXR1cm4ocD4wP2I6SikocCl9fSwzOTExNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY4MzMyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8scCl7cmV0dXJuIHZvaWQgMD09PV8/YXJndW1lbnRzLmxlbmd0aDwyPyIiOnA6RChfKX19LDk3OTUx''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBRLEQ9YigxMTA4KSxfPWIoNzExNjgpLHA9Yig1ODU0MCksTj1iKDM0NjcwKSx3PWIoODczNzIpLEY9Yig1NTk4OCksSD1iKDc5NjYyKSxQPSJwcm90b3R5cGUiLEw9InNjcmlwdCIsWT1IKCJJRV9QUk9UTyIpLEI9ZnVuY3Rpb24oKXt9LFc9''@;'; put 'put ''ZnVuY3Rpb24odGUpe3JldHVybiI8IitMKyI+Iit0ZSsiPC8iK0wrIj4ifSxaPWZ1bmN0aW9uKHRlKXt0ZS53cml0ZShXKCIiKSksdGUuY2xvc2UoKTt2YXIgcmU9dGUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdGU9bnVsbCxyZX0sWD1mdW5jdGlvbigpe3RyeXtRPW5ldyBBY3RpdmVY''@;'; put 'put ''T2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoe31YPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuZG9tYWluJiZRP1ooUSk6ZnVuY3Rpb24oKXt2YXIgb2UsdGU9RigiaWZyYW1lIikscmU9ImphdmEiK0wrIjoiO3JldHVybiB0ZS5zdHlsZS5kaXNwbGF5PSJub25lIix3LmFwcGVuZENoaWxk''@;'; put 'put ''KHRlKSx0ZS5zcmM9U3RyaW5nKHJlKSwob2U9dGUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLG9lLndyaXRlKFcoImRvY3VtZW50LkY9T2JqZWN0IikpLG9lLmNsb3NlKCksb2UuRn0oKTpaKFEpO2Zvcih2YXIgdGU9cC5sZW5ndGg7dGUtLTspZGVsZXRlIFhbUF1bcFt0ZV1dO3Jl''@;'; put 'put ''dHVybiBYKCl9O05bWV09ITAsY2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihyZSxvZSl7dmFyIGdlO3JldHVybiBudWxsIT09cmU/KEJbUF09RChyZSksZ2U9bmV3IEIsQltQXT1udWxsLGdlW1ldPXJlKTpnZT1YKCksdm9pZCAwPT09b2U/Z2U6Xy5mKGdlLG9lKX19LDcxMTY4''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDYzODcpLF89YigyNjkyOSkscD1iKDQ0NjQ4KSxOPWIoMTEwOCksdz1iKDkzMTYyKSxGPWIoMTAxNDMpO0ouZj1EJiYhXz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihSLGope04oUik7Zm9yKHZhciBXLFA9dyhqKSxM''@;'; put 'put ''PUYoaiksWT1MLmxlbmd0aCxCPTA7WT5COylwLmYoUixXPUxbQisrXSxQW1ddKTtyZXR1cm4gUn19LDQ0NjQ4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNDYzODcpLF89Yig1NzI0NCkscD1iKDI2OTI5KSxOPWIoMTEwOCksdz1iKDU5NDEwKSxGPVR5cGVFcnJvcixIPU9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eSxSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isaj0iZW51bWVyYWJsZSIsUD0iY29uZmlndXJhYmxlIixMPSJ3cml0YWJsZSI7Si5mPUQ/cD9mdW5jdGlvbihCLFcsWil7aWYoTihCKSxXPXcoVyksTihaKSwiZnVuY3Rpb24iPT10eXBlb2YgQiYmInBy''@;'; put 'put ''b3RvdHlwZSI9PT1XJiYidmFsdWUiaW4gWiYmTCBpbiBaJiYhWltMXSl7dmFyIHE9UihCLFcpO3EmJnFbTF0mJihCW1ddPVoudmFsdWUsWj17Y29uZmlndXJhYmxlOlAgaW4gWj9aW1BdOnFbUF0sZW51bWVyYWJsZTpqIGluIFo/WltqXTpxW2pdLHdyaXRhYmxlOiExfSl9cmV0dXJuIEgoQixX''@;'; put 'put ''LFopfTpIOmZ1bmN0aW9uKEIsVyxaKXtpZihOKEIpLFc9dyhXKSxOKFopLF8pdHJ5e3JldHVybiBIKEIsVyxaKX1jYXRjaHt9aWYoImdldCJpbiBafHwic2V0ImluIFopdGhyb3cgbmV3IEYoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIFomJihCW1ddPVoudmFs''@;'; put 'put ''dWUpLEJ9fSw1NDEyMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2Mzg3KSxfPWIoNDY5MjYpLHA9YigzOTYyKSxOPWIoNzc3NzMpLHc9Yig5MzE2MiksRj1iKDU5NDEwKSxIPWIoMzhlMyksUj1iKDU3MjQ0KSxqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Si5m''@;'; put 'put ''PUQ/ajpmdW5jdGlvbihMLFkpe2lmKEw9dyhMKSxZPUYoWSksUil0cnl7cmV0dXJuIGooTCxZKX1jYXRjaHt9aWYoSChMLFkpKXJldHVybiBOKCFfKHAuZixMLFkpLExbWV0pfX0sMzYxNDM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyMzMxMykscD1iKDU4NTQwKS5jb25jYXQo''@;'; put 'put ''Imxlbmd0aCIsInByb3RvdHlwZSIpO0ouZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odyl7cmV0dXJuIEQodyxwKX19LDI4MDcwOihjZSxKKT0+eyJ1c2Ugc3RyaWN0IjtKLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sMjY0MDA6KGNlLEosYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEQ9YigzOGUzKSxfPWIoMTkxNTApLHA9YigzMTk1MCksTj1iKDc5NjYyKSx3PWIoODI4MzQpLEY9TigiSUVfUFJPVE8iKSxIPU9iamVjdCxSPUgucHJvdG90eXBlO2NlLmV4cG9ydHM9dz9ILmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGope3ZhciBQPXAoaik7aWYoRChQ''@;'; put 'put ''LEYpKXJldHVybiBQW0ZdO3ZhciBMPVAuY29uc3RydWN0b3I7cmV0dXJuIF8oTCkmJlAgaW5zdGFuY2VvZiBMP0wucHJvdG90eXBlOlAgaW5zdGFuY2VvZiBIP1I6bnVsbH19LDQ2ODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU4NjA3KTtjZS5leHBvcnRzPUQoe30uaXNQcm90''@;'; put 'put ''b3R5cGVPZil9LDIzMzEzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89YigzOGUzKSxwPWIoOTMxNjIpLE49Yig3NDgyNCkuaW5kZXhPZix3PWIoMzQ2NzApLEY9RChbXS5wdXNoKTtjZS5leHBvcnRzPWZ1bmN0aW9uKEgsUil7dmFyIFksaj1wKEgpLFA9MCxMPVtd''@;'; put 'put ''O2ZvcihZIGluIGopIV8odyxZKSYmXyhqLFkpJiZGKEwsWSk7Zm9yKDtSLmxlbmd0aD5QOylfKGosWT1SW1ArK10pJiYofk4oTCxZKXx8RihMLFkpKTtyZXR1cm4gTH19LDEwMTQzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjMzMTMpLF89Yig1ODU0MCk7Y2UuZXhwb3J0cz1P''@;'; put 'put ''YmplY3Qua2V5c3x8ZnVuY3Rpb24oTil7cmV0dXJuIEQoTixfKX19LDM5NjI6KGNlLEopPT57InVzZSBzdHJpY3QiO3ZhciBiPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixfPUQmJiFiLmNhbGwoezE6Mn0sMSk7Si5mPV8/ZnVuY3Rp''@;'; put 'put ''b24oTil7dmFyIHc9RCh0aGlzLE4pO3JldHVybiEhdyYmdy5lbnVtZXJhYmxlfTpifSwyMTYxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY5MjI3KSxfPWIoMzI2MzMpLHA9Yig4ODI3NSksTj1iKDI3NjcpO2NlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9f''@;'; put 'put ''cHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIEgsdz0hMSxGPXt9O3RyeXsoSD1EKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIsInNldCIpKShGLFtdKSx3PUYgaW5zdGFuY2VvZiBBcnJheX1jYXRjaHt9cmV0dXJuIGZ1bmN0aW9uKGosUCl7cmV0dXJuIHAoaiksTihQKSxfKGopJiYo''@;'; put 'put ''dz9IKGosUCk6ai5fX3Byb3RvX189UCksan19KCk6dm9pZCAwKX0sOTM4NjU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NjkyNiksXz1iKDE5MTUwKSxwPWIoMzI2MzMpLE49VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxGKXt2YXIgSCxSO2lmKCJzdHJpbmciPT09''@;'; put 'put ''RiYmXyhIPXcudG9TdHJpbmcpJiYhcChSPUQoSCx3KSl8fF8oSD13LnZhbHVlT2YpJiYhcChSPUQoSCx3KSl8fCJzdHJpbmciIT09RiYmXyhIPXcudG9TdHJpbmcpJiYhcChSPUQoSCx3KSkpcmV0dXJuIFI7dGhyb3cgbmV3IE4oIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2''@;'; put 'put ''YWx1ZSIpfX0sODgwNzg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxMjIwMiksXz1iKDU4NjA3KSxwPWIoMzYxNDMpLE49YigyODA3MCksdz1iKDExMDgpLEY9XyhbXS5jb25jYXQpO2NlLmV4cG9ydHM9RCgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oUil7dmFyIGo9''@;'; put 'put ''cC5mKHcoUikpLFA9Ti5mO3JldHVybiBQP0YoaixQKFIpKTpqfX0sNjAzMjE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0NDY0OCkuZjtjZS5leHBvcnRzPWZ1bmN0aW9uKF8scCxOKXtOIGluIF98fEQoXyxOLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHBbTl19LHNldDpmdW5jdGlvbih3KXtwW05dPXd9fSl9fSwyMjc1NDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDExMDgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgXz1EKHRoaXMpLHA9IiI7cmV0dXJuIF8uaGFzSW5kaWNlcyYmKHArPSJkIiksXy5nbG9iYWwmJihwKz0i''@;'; put 'put ''ZyIpLF8uaWdub3JlQ2FzZSYmKHArPSJpIiksXy5tdWx0aWxpbmUmJihwKz0ibSIpLF8uZG90QWxsJiYocCs9InMiKSxfLnVuaWNvZGUmJihwKz0idSIpLF8udW5pY29kZVNldHMmJihwKz0idiIpLF8uc3RpY2t5JiYocCs9InkiKSxwfX0sMzcwNzU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEQ9Yig0NjkyNiksXz1iKDM4ZTMpLHA9Yig0NjgpLE49YigyMjc1NCksdz1SZWdFeHAucHJvdG90eXBlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIEg9Ri5mbGFncztyZXR1cm4gdm9pZCAwIT09SHx8ImZsYWdzImluIHd8fF8oRiwiZmxhZ3MiKXx8IXAodyxGKT9IOkQoTixGKX19''@;'; put 'put ''LDg4Mjc1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoOTQ0NjgpLF89VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7aWYoRChwKSl0aHJvdyBuZXcgXygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitwKTtyZXR1cm4gcH19LDQzMjQ5OihjZSxKLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBQLEQ9YigzMzk2MyksXz1iKDQwMjIwKSxwPWIoMTkxNTApLE49Yig0NzA5Miksdz1iKDIzNTgpLEY9Yig3NzYzOSksSD1iKDI3OTY3KSxSPUQuRnVuY3Rpb24saj0vTVNJRSAuXC4vLnRlc3Qodyl8fCJCVU4iPT09TiYmKChQPUQuQnVuLnZlcnNpb24uc3BsaXQoIi4iKSkubGVu''@;'; put 'put ''Z3RoPDN8fCIwIj09PVBbMF0mJihQWzFdPDN8fCIzIj09PVBbMV0mJiIwIj09PVBbMl0pKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFAsTCl7dmFyIFk9TD8yOjE7cmV0dXJuIGo/ZnVuY3Rpb24oQixXKXt2YXIgWj1IKGFyZ3VtZW50cy5sZW5ndGgsMSk+WSxxPXAoQik/QjpSKEIpLFE9Wj9GKGFy''@;'; put 'put ''Z3VtZW50cyxZKTpbXSxYPVo/ZnVuY3Rpb24oKXtfKHEsdGhpcyxRKX06cTtyZXR1cm4gTD9QKFgsVyk6UChYKX06UH19LDE0NDU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig5NzU0MSksXz1iKDIxOTEwKSxwPUQuU2V0LE49RC5hZGQ7Y2UuZXhwb3J0cz1mdW5jdGlvbih3KXt2''@;'; put 'put ''YXIgRj1uZXcgcDtyZXR1cm4gXyh3LGZ1bmN0aW9uKEgpe04oRixIKX0pLEZ9fSw4MDIxMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3NzMxKSxfPWIoOTc1NDEpLHA9YigxNDQ1KSxOPWIoMzAzMzkpLHc9Yig0MzYzMiksRj1iKDIxOTEwKSxIPWIoMTEzOCksUj1fLmhhcyxq''@;'; put 'put ''PV8ucmVtb3ZlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIFk9RCh0aGlzKSxCPXcoTCksVz1wKFkpO3JldHVybiBOKFkpPD1CLnNpemU/RihZLGZ1bmN0aW9uKFope0IuaW5jbHVkZXMoWikmJmooVyxaKX0pOkgoQi5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKFope1IoWSxaKSYmaihXLFop''@;'; put 'put ''fSksV319LDk3NTQxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89U2V0LnByb3RvdHlwZTtjZS5leHBvcnRzPXtTZXQsYWRkOkQoXy5hZGQpLGhhczpEKF8uaGFzKSxyZW1vdmU6RChfLmRlbGV0ZSkscHJvdG86X319LDYxODc5OihjZSxKLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBEPWIoMzc3MzEpLF89Yig5NzU0MSkscD1iKDMwMzM5KSxOPWIoNDM2MzIpLHc9YigyMTkxMCksRj1iKDExMzgpLEg9Xy5TZXQsUj1fLmFkZCxqPV8uaGFzO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIFk9RCh0aGlzKSxCPU4oTCksVz1uZXcgSDtyZXR1cm4gcChZKT5CLnNp''@;'; put 'put ''emU/RihCLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oWil7aihZLFopJiZSKFcsWil9KTp3KFksZnVuY3Rpb24oWil7Qi5pbmNsdWRlcyhaKSYmUihXLFopfSksV319LDczNjI0OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMzc3MzEpLF89Yig5NzU0MSkuaGFzLHA9YigzMDMzOSks''@;'; put 'put ''Tj1iKDQzNjMyKSx3PWIoMjE5MTApLEY9YigxMTM4KSxIPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oail7dmFyIFA9RCh0aGlzKSxMPU4oaik7aWYocChQKTw9TC5zaXplKXJldHVybiExIT09dyhQLGZ1bmN0aW9uKEIpe2lmKEwuaW5jbHVkZXMoQikpcmV0dXJuITF9LCEwKTt2YXIg''@;'; put 'put ''WT1MLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT1GKFksZnVuY3Rpb24oQil7aWYoXyhQLEIpKXJldHVybiBIKFksIm5vcm1hbCIsITEpfSl9fSw3NDgzOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3NzMxKSxfPWIoMzAzMzkpLHA9YigyMTkxMCksTj1iKDQzNjMyKTtjZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBIPUQodGhpcyksUj1OKEYpO3JldHVybiEoXyhIKT5SLnNpemUpJiYhMSE9PXAoSCxmdW5jdGlvbihqKXtpZighUi5pbmNsdWRlcyhqKSlyZXR1cm4hMX0sITApfX0sOTYwNjI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNzczMSksXz1i''@;'; put 'put ''KDk3NTQxKS5oYXMscD1iKDMwMzM5KSxOPWIoNDM2MzIpLHc9YigxMTM4KSxGPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUil7dmFyIGo9RCh0aGlzKSxQPU4oUik7aWYocChqKTxQLnNpemUpcmV0dXJuITE7dmFyIEw9UC5nZXRJdGVyYXRvcigpO3JldHVybiExIT09dyhMLGZ1bmN0''@;'; put 'put ''aW9uKFkpe2lmKCFfKGosWSkpcmV0dXJuIEYoTCwibm9ybWFsIiwhMSl9KX19LDIxOTEwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89YigxMTM4KSxwPWIoOTc1NDEpLE49cC5TZXQsdz1wLnByb3RvLEY9RCh3LmZvckVhY2gpLEg9RCh3LmtleXMpLFI9SChuZXcg''@;'; put 'put ''TikubmV4dDtjZS5leHBvcnRzPWZ1bmN0aW9uKGosUCxMKXtyZXR1cm4gTD9fKHtpdGVyYXRvcjpIKGopLG5leHQ6Un0sUCk6RihqLFApfX0sNTM1MDU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxMjIwMiksXz1mdW5jdGlvbihOKXtyZXR1cm57c2l6ZTpOLGhhczpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiExfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX19fSxwPWZ1bmN0aW9uKE4pe3JldHVybntzaXplOk4saGFzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGtleXM6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImUiKX19''@;'; put 'put ''fTtjZS5leHBvcnRzPWZ1bmN0aW9uKE4sdyl7dmFyIEY9RCgiU2V0Iik7dHJ5eyhuZXcgRilbTl0oXygwKSk7dHJ5e3JldHVybihuZXcgRilbTl0oXygtMSkpLCExfWNhdGNoe2lmKCF3KXJldHVybiEwO3RyeXtyZXR1cm4obmV3IEYpW05dKHAoLTEvMCkpLCExfWNhdGNoe3ZhciBIPW5ldyBG''@;'; put 'put ''O3JldHVybiBILmFkZCgxKSxILmFkZCgyKSx3KEhbTl0ocCgxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSwzMDMzOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY5MjI3KSxfPWIoOTc1NDEpO2NlLmV4cG9ydHM9RChfLnByb3RvLCJzaXplIiwiZ2V0Iil8fGZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBwLnNpemV9fSw4NTAzOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDM3NzMxKSxfPWIoOTc1NDEpLHA9YigxNDQ1KSxOPWIoNDM2MzIpLHc9YigxMTM4KSxGPV8uYWRkLEg9Xy5oYXMsUj1fLnJlbW92ZTtjZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBMPUQodGhp''@;'; put 'put ''cyksWT1OKFApLmdldEl0ZXJhdG9yKCksQj1wKEwpO3JldHVybiB3KFksZnVuY3Rpb24oVyl7SChMLFcpP1IoQixXKTpGKEIsVyl9KSxCfX0sMjA1MDc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNzczMSksXz1iKDk3NTQxKS5hZGQscD1iKDE0NDUpLE49Yig0MzYzMiksdz1i''@;'; put 'put ''KDExMzgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSCl7dmFyIFI9RCh0aGlzKSxqPU4oSCkuZ2V0SXRlcmF0b3IoKSxQPXAoUik7cmV0dXJuIHcoaixmdW5jdGlvbihMKXtfKFAsTCl9KSxQfX0sNzk2NjI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NzQ4NCksXz1iKDYzOTUxKSxw''@;'; put 'put ''PUQoImtleXMiKTtjZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3JldHVybiBwW05dfHwocFtOXT1fKE4pKX19LDQ4MzU2OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODg3ODgpLF89YigzMzk2MykscD1iKDQ4MTA0KSxOPSJfX2NvcmUtanNfc2hhcmVkX18iLHc9Y2UuZXhwb3J0cz1f''@;'; put 'put ''W05dfHxwKE4se30pOyh3LnZlcnNpb25zfHwody52ZXJzaW9ucz1bXSkpLnB1c2goe3ZlcnNpb246IjMuNDIuMCIsbW9kZTpEPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dp''@;'; put 'put ''dGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQyLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sODc0ODQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig0ODM1Nik7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAp''@;'; put 'put ''e3JldHVybiBEW19dfHwoRFtfXT1wfHx7fSl9fSwzNjUwNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ0MDY2KSxfPWIoNTU1OTIpLE49YigzMzk2MykuU3RyaW5nO2NlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhXyhmdW5jdGlvbigpe3ZhciB3''@;'; put 'put ''PVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFOKHcpfHwhKE9iamVjdCh3KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZEJiZEPDQxfSl9LDc1OTY6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIF9lLFRlLFNlLHplLEQ9YigzMzk2MyksXz1iKDQwMjIwKSxw''@;'; put 'put ''PWIoNzg4MTEpLE49YigxOTE1MCksdz1iKDM4ZTMpLEY9Yig1NTU5MiksSD1iKDg3MzcyKSxSPWIoNzc2MzkpLGo9Yig1NTk4OCksUD1iKDI3OTY3KSxMPWIoNDQxMzcpLFk9YigyMTUxMCksQj1ELnNldEltbWVkaWF0ZSxXPUQuY2xlYXJJbW1lZGlhdGUsWj1ELnByb2Nlc3MscT1ELkRpc3Bh''@;'; put 'put ''dGNoLFE9RC5GdW5jdGlvbixYPUQuTWVzc2FnZUNoYW5uZWwsdGU9RC5TdHJpbmcscmU9MCxvZT17fSxnZT0ib25yZWFkeXN0YXRlY2hhbmdlIjtGKGZ1bmN0aW9uKCl7X2U9RC5sb2NhdGlvbn0pO3ZhciB6PWZ1bmN0aW9uKEMpe2lmKHcob2UsQykpe3ZhciBUPW9lW0NdO2RlbGV0ZSBvZVtD''@;'; put 'put ''XSxUKCl9fSxnPWZ1bmN0aW9uKEMpe3JldHVybiBmdW5jdGlvbigpe3ooQyl9fSx5PWZ1bmN0aW9uKEMpe3ooQy5kYXRhKX0seD1mdW5jdGlvbihDKXtELnBvc3RNZXNzYWdlKHRlKEMpLF9lLnByb3RvY29sKyIvLyIrX2UuaG9zdCl9OyghQnx8IVcpJiYoQj1mdW5jdGlvbihUKXtQKGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsMSk7dmFyIFY9TihUKT9UOlEoVCksVT1SKGFyZ3VtZW50cywxKTtyZXR1cm4gb2VbKytyZV09ZnVuY3Rpb24oKXtfKFYsdm9pZCAwLFUpfSxUZShyZSkscmV9LFc9ZnVuY3Rpb24oVCl7ZGVsZXRlIG9lW1RdfSxZP1RlPWZ1bmN0aW9uKEMpe1oubmV4dFRpY2soZyhDKSl9''@;'; put 'put ''OnEmJnEubm93P1RlPWZ1bmN0aW9uKEMpe3Eubm93KGcoQykpfTpYJiYhTD8oemU9KFNlPW5ldyBYKS5wb3J0MixTZS5wb3J0MS5vbm1lc3NhZ2U9eSxUZT1wKHplLnBvc3RNZXNzYWdlLHplKSk6RC5hZGRFdmVudExpc3RlbmVyJiZOKEQucG9zdE1lc3NhZ2UpJiYhRC5pbXBvcnRTY3JpcHRz''@;'; put 'put ''JiZfZSYmImZpbGU6IiE9PV9lLnByb3RvY29sJiYhRih4KT8oVGU9eCxELmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHksITEpKTpUZT1nZSBpbiBqKCJzY3JpcHQiKT9mdW5jdGlvbihDKXtILmFwcGVuZENoaWxkKGooInNjcmlwdCIpKVtnZV09ZnVuY3Rpb24oKXtILnJlbW92ZUNoaWxk''@;'; put 'put ''KHRoaXMpLHooQyl9fTpmdW5jdGlvbihDKXtzZXRUaW1lb3V0KGcoQyksMCl9KSxjZS5leHBvcnRzPXtzZXQ6QixjbGVhcjpXfX0sNzQ4NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDY0NTUwKSxfPU1hdGgubWF4LHA9TWF0aC5taW47Y2UuZXhwb3J0cz1mdW5jdGlvbihOLHcp''@;'; put 'put ''e3ZhciBGPUQoTik7cmV0dXJuIEY8MD9fKEYrdywwKTpwKEYsdyl9fSw5MzE2MjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDU1OCksXz1iKDg4Mjc1KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBEKF8ocCkpfX0sNjQ1NTA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEQ9YigxODU1Nik7Y2UuZXhwb3J0cz1mdW5jdGlvbihfKXt2YXIgcD0rXztyZXR1cm4gcCE9cHx8MD09PXA/MDpEKHApfX0sOTQyMzc6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig2NDU1MCksXz1NYXRoLm1pbjtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3ZhciBOPUQocCk7''@;'; put 'put ''cmV0dXJuIE4+MD9fKE4sOTAwNzE5OTI1NDc0MDk5MSk6MH19LDMxOTUwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoODgyNzUpLF89T2JqZWN0O2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuIF8oRChwKSl9fSw4NTY1NjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''RD1iKDQ2OTI2KSxfPWIoMzI2MzMpLHA9Yig5Mjk5OCksTj1iKDg2MTE1KSx3PWIoOTM4NjUpLEY9Yig1ODAxMiksSD1UeXBlRXJyb3IsUj1GKCJ0b1ByaW1pdGl2ZSIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oaixQKXtpZighXyhqKXx8cChqKSlyZXR1cm4gajt2YXIgWSxMPU4oaixSKTtpZihM''@;'; put 'put ''KXtpZih2b2lkIDA9PT1QJiYoUD0iZGVmYXVsdCIpLFk9RChMLGosUCksIV8oWSl8fHAoWSkpcmV0dXJuIFk7dGhyb3cgbmV3IEgoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1QJiYoUD0ibnVtYmVyIiksdyhqLFApfX0sNTk0MTA6''@;'; put 'put ''KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9Yig4NTY1NiksXz1iKDkyOTk4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3ZhciBOPUQocCwic3RyaW5nIik7cmV0dXJuIF8oTik/TjpOKyIifX0sMzg1OTU6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIHA9e307cFtiKDU4MDEyKSgi''@;'; put 'put ''dG9TdHJpbmdUYWciKV09InoiLGNlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKHApfSw2ODMzMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDcxODI0KSxfPVN0cmluZztjZS5leHBvcnRzPWZ1bmN0aW9uKHApe2lmKCJTeW1ib2wiPT09RChwKSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBfKHApfX0sNzUyMTI6Y2U9PnsidXNlIHN0cmljdCI7dmFyIEo9U3RyaW5nO2NlLmV4cG9ydHM9ZnVuY3Rpb24oYil7dHJ5e3JldHVybiBKKGIpfWNhdGNoe3JldHVybiJPYmplY3QifX19''@;'; put 'put ''LDYzOTUxOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoNTg2MDcpLF89MCxwPU1hdGgucmFuZG9tKCksTj1EKDEuLnRvU3RyaW5nKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09dz8iIjp3KSsiKV8iK04oKytfK3AsMzYpfX0sNjY5OTU6''@;'; put 'put ''KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzNjUwNik7Y2UuZXhwb3J0cz1EJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwyNjkyOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDQ2Mzg3KSxfPWIoNTU1OTIpO2NlLmV4cG9y''@;'; put 'put ''dHM9RCYmXyhmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSl9LDI3OTY3OmNlPT57InVzZSBzdHJpY3QiO3ZhciBKPVR5cGVFcnJvcjtjZS5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKGIsRCl7aWYoYjxEKXRocm93IG5ldyBKKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiBifX0sNDg2OTE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigzMzk2MyksXz1iKDE5MTUwKSxwPUQuV2Vha01hcDtjZS5leHBvcnRzPV8ocCkmJi9uYXRpdmUgY29k''@;'; put 'put ''ZS8udGVzdChTdHJpbmcocCkpfSw1ODAxMjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDMzOTYzKSxfPWIoODc0ODQpLHA9YigzOGUzKSxOPWIoNjM5NTEpLHc9YigzNjUwNiksRj1iKDY2OTk1KSxIPUQuU3ltYm9sLFI9Xygid2tzIiksaj1GP0guZm9yfHxIOkgmJkgud2l0aG91''@;'; put 'put ''dFNldHRlcnx8TjtjZS5leHBvcnRzPWZ1bmN0aW9uKFApe3JldHVybiBwKFIsUCl8fChSW1BdPXcmJnAoSCxQKT9IW1BdOmooIlN5bWJvbC4iK1ApKSxSW1BdfX0sMzI5MzA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigxMjIwMiksXz1iKDM4ZTMpLHA9YigzNjY3OCksTj1iKDQ2''@;'; put 'put ''OCksdz1iKDIxNjEyKSxGPWIoNDg2MzkpLEg9Yig2MDMyMSksUj1iKDE3Mjk2KSxqPWIoMzkxMTYpLFA9Yig2NDg1NSksTD1iKDIyMzA0KSxZPWIoNDYzODcpLEI9Yig4ODc4OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihXLFoscSxRKXt2YXIgWD0ic3RhY2tUcmFjZUxpbWl0Iix0ZT1RPzI6MSxy''@;'; put 'put ''ZT1XLnNwbGl0KCIuIiksb2U9cmVbcmUubGVuZ3RoLTFdLGdlPUQuYXBwbHkobnVsbCxyZSk7aWYoZ2Upe3ZhciBfZT1nZS5wcm90b3R5cGU7aWYoIUImJl8oX2UsImNhdXNlIikmJmRlbGV0ZSBfZS5jYXVzZSwhcSlyZXR1cm4gZ2U7dmFyIFRlPUQoIkVycm9yIiksU2U9WihmdW5jdGlvbih6''@;'; put 'put ''ZSx6KXt2YXIgZz1qKFE/ejp6ZSx2b2lkIDApLHk9UT9uZXcgZ2UoemUpOm5ldyBnZTtyZXR1cm4gdm9pZCAwIT09ZyYmcCh5LCJtZXNzYWdlIixnKSxMKHksU2UseS5zdGFjaywyKSx0aGlzJiZOKF9lLHRoaXMpJiZSKHksdGhpcyxTZSksYXJndW1lbnRzLmxlbmd0aD50ZSYmUCh5LGFyZ3Vt''@;'; put 'put ''ZW50c1t0ZV0pLHl9KTtpZihTZS5wcm90b3R5cGU9X2UsIkVycm9yIiE9PW9lP3c/dyhTZSxUZSk6RihTZSxUZSx7bmFtZTohMH0pOlkmJlggaW4gZ2UmJihIKFNlLGdlLFgpLEgoU2UsZ2UsInByZXBhcmVTdGFja1RyYWNlIikpLEYoU2UsZ2UpLCFCKXRyeXtfZS5uYW1lIT09b2UmJnAoX2Us''@;'; put 'put ''Im5hbWUiLG9lKSxfZS5jb25zdHJ1Y3Rvcj1TZX1jYXRjaHt9cmV0dXJuIFNlfX19LDM5MDkyOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89YigzMTk1MCkscD1iKDcxNzEpLE49Yig2NDU1MCksdz1iKDcwODI0KTtEKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0s''@;'; put 'put ''e2F0OmZ1bmN0aW9uKEgpe3ZhciBSPV8odGhpcyksaj1wKFIpLFA9TihIKSxMPVA+PTA/UDpqK1A7cmV0dXJuIEw8MHx8TD49aj92b2lkIDA6UltMXX19KSx3KCJhdCIpfSw3NzUyNTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoMzE5NTApLHA9Yig3MTcxKSxO''@;'; put 'put ''PWIoMzkyMDYpLHc9YigzMzE2KTtEKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpiKDU1NTkyKShmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbihMKXt2YXIgWT1fKHRoaXMpLEI9cChZKSxXPWFyZ3VtZW50cy5sZW5ndGg7dyhCK1cpO2Zvcih2YXIg''@;'; put 'put ''Wj0wO1o8VztaKyspWVtCXT1hcmd1bWVudHNbWl0sQisrO3JldHVybiBOKFksQiksQn19KX0sMjMwMTI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDU4NjA3KSxwPWIoMzE0ODMpLE49Yig5MzE2Miksdz1iKDM4ODEpLEY9Yig2NjUwMyksSD1iKDcwODI0KSxS''@;'; put 'put ''PUFycmF5LGo9XyhGKCJBcnJheSIsInNvcnQiKSk7RCh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHt0b1NvcnRlZDpmdW5jdGlvbihMKXt2b2lkIDAhPT1MJiZwKEwpO3ZhciBZPU4odGhpcyksQj13KFIsWSk7cmV0dXJuIGooQixMKX19KSxIKCJ0b1NvcnRlZCIpfSw2ODE0NjooY2UsSixi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0IjtiKDcwODI0KSgiZmxhdE1hcCIpfSw5MzkwOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtiKDcwODI0KSgiZmxhdCIpfSwyOTc2MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoMzE5NTApLHA9Yig3MTcxKSxOPWIoMzkyMDYpLHc9''@;'; put 'put ''Yig0MzE5NSksRj1iKDMzMTYpO0Qoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOjEhPT1bXS51bnNoaWZ0KDApfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnVuc2hpZnQoKX1jYXRjaChQKXty''@;'; put 'put ''ZXR1cm4gUCBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHt1bnNoaWZ0OmZ1bmN0aW9uKEwpe3ZhciBZPV8odGhpcyksQj1wKFkpLFc9YXJndW1lbnRzLmxlbmd0aDtpZihXKXtGKEIrVyk7Zm9yKHZhciBaPUI7Wi0tOyl7dmFyIHE9WitXO1ogaW4gWT9ZW3FdPVlbWl06dyhZLHEpfWZvcih2''@;'; put 'put ''YXIgUT0wO1E8VztRKyspWVtRXT1hcmd1bWVudHNbUV19cmV0dXJuIE4oWSxCK1cpfX0pfSw0OTUzNzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoMzM5NjMpLHA9Yig0MDIyMCksTj1iKDMyOTMwKSx3PSJXZWJBc3NlbWJseSIsRj1fW3ddLEg9NyE9PW5ldyBF''@;'; put 'put ''cnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxSPWZ1bmN0aW9uKFAsTCl7dmFyIFk9e307WVtQXT1OKFAsTCxIKSxEKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6SH0sWSl9LGo9ZnVuY3Rpb24oUCxMKXtpZihGJiZGW1BdKXt2YXIgWT17fTtZW1BdPU4odysiLiIr''@;'; put 'put ''UCxMLEgpLEQoe3RhcmdldDp3LHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6SH0sWSl9fTtSKCJFcnJvciIsZnVuY3Rpb24oUCl7cmV0dXJuIGZ1bmN0aW9uKFkpe3JldHVybiBwKFAsdGhpcyxhcmd1bWVudHMpfX0pLFIoIkV2YWxFcnJvciIsZnVuY3Rpb24oUCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFkpe3JldHVybiBwKFAsdGhpcyxhcmd1bWVudHMpfX0pLFIoIlJhbmdlRXJyb3IiLGZ1bmN0aW9uKFApe3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gcChQLHRoaXMsYXJndW1lbnRzKX19KSxSKCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oUCl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKFkpe3JldHVybiBwKFAsdGhpcyxhcmd1bWVudHMpfX0pLFIoIlN5bnRheEVycm9yIixmdW5jdGlvbihQKXtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJuIHAoUCx0aGlzLGFyZ3VtZW50cyl9fSksUigiVHlwZUVycm9yIixmdW5jdGlvbihQKXtyZXR1cm4gZnVuY3Rpb24oWSl7cmV0dXJu''@;'; put 'put ''IHAoUCx0aGlzLGFyZ3VtZW50cyl9fSksUigiVVJJRXJyb3IiLGZ1bmN0aW9uKFApe3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gcChQLHRoaXMsYXJndW1lbnRzKX19KSxqKCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKFApe3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gcChQLHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX19KSxqKCJMaW5rRXJyb3IiLGZ1bmN0aW9uKFApe3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gcChQLHRoaXMsYXJndW1lbnRzKX19KSxqKCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKFApe3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gcChQLHRoaXMsYXJndW1lbnRzKX19KX0s''@;'; put 'put ''OTYxODA6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDMzOTYzKSxwPWIoNjMzMzYpLE49YigxMTA4KSx3PWIoMTkxNTApLEY9YigyNjQwMCksSD1iKDQ0MDM5KSxSPWIoNTg3OTUpLGo9Yig1NTU5MiksUD1iKDM4ZTMpLEw9Yig1ODAxMiksWT1iKDc4OTY4KS5J''@;'; put 'put ''dGVyYXRvclByb3RvdHlwZSxCPWIoNDYzODcpLFc9Yig4ODc4OCksWj0iY29uc3RydWN0b3IiLHE9Ikl0ZXJhdG9yIixRPUwoInRvU3RyaW5nVGFnIiksWD1UeXBlRXJyb3IsdGU9X1txXSxyZT1XfHwhdyh0ZSl8fHRlLnByb3RvdHlwZSE9PVl8fCFqKGZ1bmN0aW9uKCl7dGUoe30pfSksb2U9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZihwKHRoaXMsWSksRih0aGlzKT09PVkpdGhyb3cgbmV3IFgoIkFic3RyYWN0IGNsYXNzIEl0ZXJhdG9yIG5vdCBkaXJlY3RseSBjb25zdHJ1Y3RhYmxlIil9LGdlPWZ1bmN0aW9uKF9lLFRlKXtCP0goWSxfZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBUZX0sc2V0OmZ1bmN0aW9uKFNlKXtpZihOKHRoaXMpLHRoaXM9PT1ZKXRocm93IG5ldyBYKCJZb3UgY2FuJ3QgcmVkZWZpbmUgdGhpcyBwcm9wZXJ0eSIpO1AodGhpcyxfZSk/dGhpc1tfZV09U2U6Uih0aGlzLF9lLFNlKX19KTpZW19lXT1UZX07UChZLFEpfHxnZShRLHEpLChyZXx8''@;'; put 'put ''IVAoWSxaKXx8WVtaXT09PU9iamVjdCkmJmdlKFosb2UpLG9lLnByb3RvdHlwZT1ZLEQoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6cmV9LHtJdGVyYXRvcjpvZX0pfSwzOTU5NTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9Yigz''@;'; put 'put ''MDc4NyksTj1iKDMxNDgzKSx3PWIoMTEwOCksRj1iKDc1NDI0KSxIPWIoNjY1NDIpLGo9Yig0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO0Qoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOmp9LHtldmVyeTpmdW5jdGlvbihMKXt3KHRoaXMpO3RyeXtOKEwpfWNh''@;'; put 'put ''dGNoKFcpe0godGhpcywidGhyb3ciLFcpfWlmKGopcmV0dXJuIF8oaix0aGlzLEwpO3ZhciBZPUYodGhpcyksQj0wO3JldHVybiFwKFksZnVuY3Rpb24oVyxaKXtpZighTChXLEIrKykpcmV0dXJuIFooKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDkyNTgw''@;'; put 'put ''OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89Yig0NjkyNikscD1iKDMxNDgzKSxOPWIoMTEwOCksdz1iKDc1NDI0KSxGPWIoNjk5MTcpLEg9Yig0MjkyNiksUj1iKDg4Nzg4KSxqPWIoNjY1NDIpLFA9Yig0MTI1MiksTD0hUiYmUCgiZmlsdGVyIixUeXBlRXJyb3Ip''@;'; put 'put ''LFk9RihmdW5jdGlvbigpe2Zvcih2YXIgcSxYLEI9dGhpcy5pdGVyYXRvcixXPXRoaXMucHJlZGljYXRlLFo9dGhpcy5uZXh0Ozspe2lmKHE9TihfKFosQikpLHRoaXMuZG9uZT0hIXEuZG9uZSlyZXR1cm47aWYoSChCLFcsW1g9cS52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApKXJldHVybiBY''@;'; put 'put ''fX0pO0Qoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOlJ8fEx9LHtmaWx0ZXI6ZnVuY3Rpb24oVyl7Tih0aGlzKTt0cnl7cChXKX1jYXRjaChaKXtqKHRoaXMsInRocm93IixaKX1yZXR1cm4gTD9fKEwsdGhpcyxXKTpuZXcgWSh3KHRoaXMpLHtwcmVkaWNhdGU6''@;'; put 'put ''V30pfX0pfSwyNjM1NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksTj1iKDMxNDgzKSx3PWIoMTEwOCksRj1iKDc1NDI0KSxIPWIoNjY1NDIpLGo9Yig0MTI1MikoImZpbmQiLFR5cGVFcnJvcik7RCh7dGFyZ2V0OiJJdGVyYXRv''@;'; put 'put ''ciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6an0se2ZpbmQ6ZnVuY3Rpb24oTCl7dyh0aGlzKTt0cnl7TihMKX1jYXRjaChXKXtIKHRoaXMsInRocm93IixXKX1pZihqKXJldHVybiBfKGosdGhpcyxMKTt2YXIgWT1GKHRoaXMpLEI9MDtyZXR1cm4gcChZLGZ1bmN0aW9uKFcsWil7aWYoTChX''@;'; put 'put ''LEIrKykpcmV0dXJuIFooVyl9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5yZXN1bHR9fSl9LDM2NTc4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89Yig0NjkyNikscD1iKDMxNDgzKSxOPWIoMTEwOCksdz1iKDc1NDI0KSxGPWIoNjM2MjcpLEg9Yig2''@;'; put 'put ''OTkxNyksUj1iKDY2NTQyKSxqPWIoODg3ODgpLFA9Yig0MTI1MiksTD0haiYmUCgiZmxhdE1hcCIsVHlwZUVycm9yKSxZPUgoZnVuY3Rpb24oKXtmb3IodmFyIFoscSxCPXRoaXMuaXRlcmF0b3IsVz10aGlzLm1hcHBlcjs7KXtpZihxPXRoaXMuaW5uZXIpdHJ5e2lmKCEoWj1OKF8ocS5uZXh0''@;'; put 'put ''LHEuaXRlcmF0b3IpKSkuZG9uZSlyZXR1cm4gWi52YWx1ZTt0aGlzLmlubmVyPW51bGx9Y2F0Y2goUSl7UihCLCJ0aHJvdyIsUSl9aWYoWj1OKF8odGhpcy5uZXh0LEIpKSx0aGlzLmRvbmU9ISFaLmRvbmUpcmV0dXJuO3RyeXt0aGlzLmlubmVyPUYoVyhaLnZhbHVlLHRoaXMuY291bnRlcisr''@;'; put 'put ''KSwhMSl9Y2F0Y2goUSl7UihCLCJ0aHJvdyIsUSl9fX0pO0Qoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOmp8fEx9LHtmbGF0TWFwOmZ1bmN0aW9uKFcpe04odGhpcyk7dHJ5e3AoVyl9Y2F0Y2goWil7Uih0aGlzLCJ0aHJvdyIsWil9cmV0dXJuIEw/XyhMLHRo''@;'; put 'put ''aXMsVyk6bmV3IFkodyh0aGlzKSx7bWFwcGVyOlcsaW5uZXI6bnVsbH0pfX0pfSwzMTM1MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksTj1iKDMxNDgzKSx3PWIoMTEwOCksRj1iKDc1NDI0KSxIPWIoNjY1NDIpLGo9Yig0MTI1''@;'; put 'put ''MikoImZvckVhY2giLFR5cGVFcnJvcik7RCh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6an0se2ZvckVhY2g6ZnVuY3Rpb24oTCl7dyh0aGlzKTt0cnl7TihMKX1jYXRjaChXKXtIKHRoaXMsInRocm93IixXKX1pZihqKXJldHVybiBfKGosdGhpcyxMKTt2YXIg''@;'; put 'put ''WT1GKHRoaXMpLEI9MDtwKFksZnVuY3Rpb24oVyl7TChXLEIrKyl9LHtJU19SRUNPUkQ6ITB9KX19KX0sNzEzNTQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDQ2OTI2KSxwPWIoMzE0ODMpLE49YigxMTA4KSx3PWIoNzU0MjQpLEY9Yig2OTkxNyksSD1iKDQy''@;'; put 'put ''OTI2KSxSPWIoNjY1NDIpLGo9Yig0MTI1MiksUD1iKDg4Nzg4KSxMPSFQJiZqKCJtYXAiLFR5cGVFcnJvciksWT1GKGZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5pdGVyYXRvcixXPU4oXyh0aGlzLm5leHQsQikpO2lmKCEodGhpcy5kb25lPSEhVy5kb25lKSlyZXR1cm4gSChCLHRoaXMubWFwcGVy''@;'; put 'put ''LFtXLnZhbHVlLHRoaXMuY291bnRlcisrXSwhMCl9KTtEKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpQfHxMfSx7bWFwOmZ1bmN0aW9uKFcpe04odGhpcyk7dHJ5e3AoVyl9Y2F0Y2goWil7Uih0aGlzLCJ0aHJvdyIsWil9cmV0dXJuIEw/XyhMLHRoaXMsVyk6''@;'; put 'put ''bmV3IFkodyh0aGlzKSx7bWFwcGVyOld9KX19KX0sNTMzNDg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDMwNzg3KSxwPWIoMzE0ODMpLE49YigxMTA4KSx3PWIoNzU0MjQpLEY9Yig2NjU0MiksSD1iKDQxMjUyKSxSPWIoNDAyMjApLGo9Yig1NTU5MiksUD1U''@;'; put 'put ''eXBlRXJyb3IsTD1qKGZ1bmN0aW9uKCl7W10ua2V5cygpLnJlZHVjZShmdW5jdGlvbigpe30sdm9pZCAwKX0pLFk9IUwmJkgoInJlZHVjZSIsUCk7RCh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6THx8WX0se3JlZHVjZTpmdW5jdGlvbihXKXtOKHRoaXMpO3Ry''@;'; put 'put ''eXtwKFcpfWNhdGNoKHRlKXtGKHRoaXMsInRocm93Iix0ZSl9dmFyIFo9YXJndW1lbnRzLmxlbmd0aDwyLHE9Wj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKFkpcmV0dXJuIFIoWSx0aGlzLFo/W1ddOltXLHFdKTt2YXIgUT13KHRoaXMpLFg9MDtpZihfKFEsZnVuY3Rpb24odGUpe1o/KFo9ITEs''@;'; put 'put ''cT10ZSk6cT1XKHEsdGUsWCksWCsrfSx7SVNfUkVDT1JEOiEwfSksWil0aHJvdyBuZXcgUCgiUmVkdWNlIG9mIGVtcHR5IGl0ZXJhdG9yIHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpO3JldHVybiBxfX0pfSw5Mzc4OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89Yig0''@;'; put 'put ''NjkyNikscD1iKDMwNzg3KSxOPWIoMzE0ODMpLHc9YigxMTA4KSxGPWIoNzU0MjQpLEg9Yig2NjU0Miksaj1iKDQxMjUyKSgic29tZSIsVHlwZUVycm9yKTtEKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpqfSx7c29tZTpmdW5jdGlvbihMKXt3KHRoaXMpO3Ry''@;'; put 'put ''eXtOKEwpfWNhdGNoKFcpe0godGhpcywidGhyb3ciLFcpfWlmKGopcmV0dXJuIF8oaix0aGlzLEwpO3ZhciBZPUYodGhpcyksQj0wO3JldHVybiBwKFksZnVuY3Rpb24oVyxaKXtpZihMKFcsQisrKSlyZXR1cm4gWigpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkuc3RvcHBlZH19''@;'; put 'put ''KX0sOTU0OTM6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDEyMjAyKSxwPWIoNDAyMjApLE49Yig0NjkyNiksdz1iKDU4NjA3KSxGPWIoNTU1OTIpLEg9YigxOTE1MCksUj1iKDkyOTk4KSxqPWIoNzc2MzkpLFA9Yig4NDUyNCksTD1iKDM2NTA2KSxZPVN0cmlu''@;'; put 'put ''ZyxCPV8oIkpTT04iLCJzdHJpbmdpZnkiKSxXPXcoLy4vLmV4ZWMpLFo9dygiIi5jaGFyQXQpLHE9dygiIi5jaGFyQ29kZUF0KSxRPXcoIiIucmVwbGFjZSksWD13KDEuLnRvU3RyaW5nKSx0ZT0vW1x1RDgwMC1cdURGRkZdL2cscmU9L15bXHVEODAwLVx1REJGRl0kLyxvZT0vXltcdURDMDAt''@;'; put 'put ''XHVERkZGXSQvLGdlPSFMfHxGKGZ1bmN0aW9uKCl7dmFyIHplPV8oIlN5bWJvbCIpKCJzdHJpbmdpZnkgZGV0ZWN0aW9uIik7cmV0dXJuIltudWxsXSIhPT1CKFt6ZV0pfHwie30iIT09Qih7YTp6ZX0pfHwie30iIT09QihPYmplY3QoemUpKX0pLF9lPUYoZnVuY3Rpb24oKXtyZXR1cm4nIlxc''@;'; put 'put ''dWRmMDZcXHVkODM0IichPT1CKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1CKCJcdWRlYWQiKX0pLFRlPWZ1bmN0aW9uKHplLHope3ZhciBnPWooYXJndW1lbnRzKSx5PVAoeik7aWYoSCh5KXx8dm9pZCAwIT09emUmJiFSKHplKSlyZXR1cm4gZ1sxXT1mdW5jdGlvbih4LEMpe2lm''@;'; put 'put ''KEgoeSkmJihDPU4oeSx0aGlzLFkoeCksQykpLCFSKEMpKXJldHVybiBDfSxwKEIsbnVsbCxnKX0sU2U9ZnVuY3Rpb24oemUseixnKXt2YXIgeT1aKGcsei0xKSx4PVooZyx6KzEpO3JldHVybiBXKHJlLHplKSYmIVcob2UseCl8fFcob2UsemUpJiYhVyhyZSx5KT8iXFx1IitYKHEoemUsMCks''@;'; put 'put ''MTYpOnplfTtCJiZEKHt0YXJnZXQ6IkpTT04iLHN0YXQ6ITAsYXJpdHk6Myxmb3JjZWQ6Z2V8fF9lfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKHosZyx5KXt2YXIgeD1qKGFyZ3VtZW50cyksQz1wKGdlP1RlOkIsbnVsbCx4KTtyZXR1cm4gX2UmJiJzdHJpbmciPT10eXBlb2YgQz9RKEMsdGUsU2Up''@;'; put 'put ''OkN9fSl9LDU3NzI6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDMwNzg3KSxwPWIoNTg3OTUpO0Qoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwfSx7ZnJvbUVudHJpZXM6ZnVuY3Rpb24odyl7dmFyIEY9e307cmV0dXJuIF8odyxmdW5jdGlvbihILFIpe3AoRixI''@;'; put 'put ''LFIpfSx7QVNfRU5UUklFUzohMH0pLEZ9fSl9LDY5ODc1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89Yig4MDIxMyk7RCh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFiKDUzNTA1KSgiZGlmZmVyZW5jZSIsZnVuY3Rpb24odyl7cmV0dXJu''@;'; put 'put ''IDA9PT13LnNpemV9KX0se2RpZmZlcmVuY2U6X30pfSwxNjA5MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNTU1OTIpLHA9Yig2MTg3OSk7RCh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFiKDUzNTA1KSgiaW50ZXJzZWN0aW9uIixm''@;'; put 'put ''dW5jdGlvbihGKXtyZXR1cm4gMj09PUYuc2l6ZSYmRi5oYXMoMSkmJkYuaGFzKDIpfSl8fF8oZnVuY3Rpb24oKXtyZXR1cm4iMywyIiE9PVN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsMiwzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsMl0pKSkpfSl9LHtpbnRlcnNlY3Rpb246cH0p''@;'; put 'put ''fSw5NTYwODooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNzM2MjQpO0Qoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoImlzRGlzam9pbnRGcm9tIixmdW5jdGlvbih3KXtyZXR1cm4hd30pfSx7aXNEaXNqb2ludEZyb206''@;'; put 'put ''X30pfSwxNjQ5MzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNzQ4MzkpO0Qoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoImlzU3Vic2V0T2YiLGZ1bmN0aW9uKHcpe3JldHVybiB3fSl9LHtpc1N1YnNldE9mOl99KX0s''@;'; put 'put ''NjE5MzQ6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDk2MDYyKTtEKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWIoNTM1MDUpKCJpc1N1cGVyc2V0T2YiLGZ1bmN0aW9uKHcpe3JldHVybiF3fSl9LHtpc1N1cGVyc2V0T2Y6X30pfSwx''@;'; put 'put ''MDEwMTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoODUwMzkpO0Qoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6X30pfSwyNjg4OTooY2Us''@;'; put 'put ''SixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoMjA1MDcpO0Qoe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoInVuaW9uIil9LHt1bmlvbjpffSl9LDE0MzYwOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO3ZhciBEPWIoMjgzNjcpLF89''@;'; put 'put ''Yig1ODYwNykscD1iKDg4Mjc1KSxOPWIoNjQ1NTApLHc9Yig2ODMzMiksRj1iKDU1NTkyKSxIPV8oIiIuY2hhckF0KTtEKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOkYoZnVuY3Rpb24oKXtyZXR1cm4iXHVkODQyIiE9PSJcdXsyMGJiN30iLmF0KC0yKX0pfSx7YXQ6ZnVuY3Rp''@;'; put 'put ''b24oUCl7dmFyIEw9dyhwKHRoaXMpKSxZPUwubGVuZ3RoLEI9TihQKSxXPUI+PTA/QjpZK0I7cmV0dXJuIFc8MHx8Vz49WT92b2lkIDA6SChMLFcpfX0pfSwxNjIyOTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9Yig1ODYwNyksTj1iKDg4Mjc1''@;'; put 'put ''KSx3PWIoMTkxNTApLEY9YigzMjYzMyksSD1iKDg4ODY3KSxSPWIoNjgzMzIpLGo9Yig4NjExNSksUD1iKDM3MDc1KSxMPWIoOTYzMzkpLFk9Yig1ODAxMiksQj1iKDg4Nzg4KSxXPVkoInJlcGxhY2UiKSxaPVR5cGVFcnJvcixxPXAoIiIuaW5kZXhPZiksUT1wKCIiLnJlcGxhY2UpLFg9cCgi''@;'; put 'put ''Ii5zbGljZSksdGU9TWF0aC5tYXg7RCh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbihvZSxnZSl7dmFyIFRlLFNlLHplLHosZyx5LHgsQyxULFYsX2U9Tih0aGlzKSxVPTAsRT0iIjtpZihGKG9lKSl7aWYoKFRlPUgob2UpKSYmKFNlPVIoTihQKG9lKSkp''@;'; put 'put ''LCF+cShTZSwiZyIpKSl0aHJvdyBuZXcgWigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZih6ZT1qKG9lLFcpKXJldHVybiBfKHplLG9lLF9lLGdlKTtpZihCJiZUZSlyZXR1cm4gUShSKF9lKSxvZSxnZSl9Zm9yKHo9UihfZSksZz1SKG9lKSwo''@;'; put 'put ''eT13KGdlKSl8fChnZT1SKGdlKSksQz10ZSgxLHg9Zy5sZW5ndGgpLFQ9cSh6LGcpOy0xIT09VDspVj15P1IoZ2UoZyxULHopKTpMKGcseixULFtdLHZvaWQgMCxnZSksRSs9WCh6LFUsVCkrVixVPVQreCxUPVQrQz56Lmxlbmd0aD8tMTpxKHosZyxUK0MpO3JldHVybiBVPHoubGVuZ3RoJiYo''@;'; put 'put ''RSs9WCh6LFUpKSxFfX0pfSw0MzI4NzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtiKDk2MTgwKX0sMTM5MDg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7YigzOTU5NSl9LDY1NzQ1OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2IoOTI1ODApfSw4MTI2MDooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtiKDI2MzU3KX0sNzQ5OTooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtiKDM2NTc4KX0sMjk3MDg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7YigzMTM1Myl9LDY1MTE3OihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2IoNzEzNTQpfSw0NDIxMzooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0IjtiKDUz''@;'; put 'put ''MzQ4KX0sMjAyOTE6KGNlLEosYik9PnsidXNlIHN0cmljdCI7Yig5Mzc4KX0sNjg3Njg6KGNlLEosYik9PnsidXNlIHN0cmljdCI7dmFyIEQ9YigyODM2NyksXz1iKDMzOTYzKSxwPWIoNzU5NikuY2xlYXI7RCh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6Xy5jbGVh''@;'; put 'put ''ckltbWVkaWF0ZSE9PXB9LHtjbGVhckltbWVkaWF0ZTpwfSl9LDEwMzYzOihjZSxKLGIpPT57InVzZSBzdHJpY3QiO2IoNjg3NjgpLGIoODIzMDYpfSw4MjMwNjooY2UsSixiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1iKDI4MzY3KSxfPWIoMzM5NjMpLHA9Yig3NTk2KS5zZXQsTj1iKDQzMjQ5''@;'; put 'put ''KSx3PV8uc2V0SW1tZWRpYXRlP04ocCwhMSk6cDtEKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDpfLnNldEltbWVkaWF0ZSE9PXd9LHtzZXRJbW1lZGlhdGU6d30pfSwzMjE5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4''@;'; put 'put ''LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhl''@;'; put 'put ''ciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtl''@;'; put 'put ''eSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwi''@;'; put 'put ''bW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJi''@;'; put 'put ''bG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJh''@;'; put 'put ''ZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTIt''@;'; put 'put ''Y2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEi''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNp''@;'; put 'put ''cGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJB''@;'; put 'put ''RVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXki''@;'; put 'put ''OjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYi''@;'; put 'put ''OjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6''@;'; put 'put ''IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw2Mjk1MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVu''@;'; put 'put ''Y3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUw''@;'; put 'put ''MzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hh''@;'; put 'put ''MjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4''@;'; put 'put ''NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0''@;'; put 'put ''ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoi''@;'; put 'put ''MzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIs''@;'; put 'put ''Imhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJp''@;'; put 'put ''ZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIy''@;'; put 'put ''NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEz''@;'; put 'put ''ODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6''@;'; put 'put ''eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0''@;'; put 'put ''MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAw''@;'; put 'put ''YzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDY0NTg5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgn''@;'; put 'put ''eyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMjMyNDE6Y2U9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRl''@;'; put 'put ''Zjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYy''@;'; put 'put ''OGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4''@;'; put 'put ''OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIy''@;'; put 'put ''NTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3''@;'; put 'put ''Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJw''@;'; put 'put ''cmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdl''@;'; put 'put ''YzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVk''@;'; put 'put ''NTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVh''@;'; put 'put ''OGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNh''@;'; put 'put ''NDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2''@;'; put 'put ''OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNi''@;'; put 'put ''ZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEy''@;'; put 'put ''NTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''In0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUx''@;'; put 'put ''MzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNk''@;'; put 'put ''Y2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZh''@;'; put 'put ''ZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEy''@;'; put 'put ''ZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4''@;'; put 'put ''NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1''@;'; put 'put ''YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQw''@;'; put 'put ''MjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2''@;'; put 'put ''NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgw''@;'; put 'put ''ZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdk''@;'; put 'put ''YjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1''@;'; put 'put ''YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEw''@;'; put 'put ''OTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdi''@;'; put 'put ''ZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMy''@;'; put 'put ''ZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVm''@;'; put 'put ''MjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsi''@;'; put 'put ''Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0''@;'; put 'put ''ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1''@;'; put 'put ''NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZh''@;'; put 'put ''MDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRk''@;'; put 'put ''ODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4''@;'; put 'put ''MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4''@;'; put 'put ''ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVk''@;'; put 'put ''NDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3''@;'; put 'put ''YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZl''@;'; put 'put ''M2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2''@;'; put 'put ''ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJh''@;'; put 'put ''MTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZm''@;'; put 'put ''YzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDE2MzY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17ckU6IjYuNi4xIn19LDQzMjY3OmNlPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siODc0MCIsIlx1NDNmMFx1NGMzMlx1NDYwM1x1NDVhNlx1NDU3OFx1ezI3MjY3fVx1NGQ3N1x1NDViM1x1ezI3Y2IxfVx1NGNlMlx1ezI3Y2M1fVx1M2I5NVx1NDczNlx1NDc0NFx1NGM0N1x1NGM0MFx1ezI0MmJmfVx1ezIzNjE3fVx1ezI3MzUy''@;'; put 'put ''fVx1ezI2ZThifVx1ezI3MGQyfVx1NGM1N1x1ezJhMzUxfVx1NDc0Zlx1NDVkYVx1NGM4NVx1ezI3YzZjfVx1NGQwN1x1NGFhNFx1NDZhMVx1ezI2YjIzfVx1NzIyNVx1ezI1YTU0fVx1ezIxYTYzfVx1ezIzZTA2fVx1ezIzZjYxfVx1NjY0ZFx1NTZmYiJdLFsiODc2NyIsIlx1N2Q5NVx1NTkx''@;'; put 'put ''ZFx1ezI4YmI5fVx1M2RmNFx1OTczNFx1ezI3YmVmfVx1NWJkYlx1ezIxZDVlfVx1NWFhNFx1MzYyNVx1ezI5ZWIwfVx1NWFkMVx1NWJiN1x1NWNmY1x1Njc2ZVx1ODU5M1x1ezI5OTQ1fVx1NzQ2MVx1NzQ5ZFx1Mzg3NVx1ezIxZDUzfVx1ezIzNjllfVx1ezI2MDIxfVx1M2VlYyJdLFsiODdh''@;'; put 'put ''MSIsIlx1ezI1OGRlfVx1M2FmNVx1N2FmY1x1OWY5N1x1ezI0MTYxfVx1ezI4OTBkfVx1ezIzMWVhfVx1ezIwYThhfVx1ezIzMjVlfVx1NDMwYVx1ODQ4NFx1OWY5Nlx1OTQyZlx1NDkzMFx1ODYxM1x1NTg5Nlx1OTc0YVx1OTIxOFx1NzlkMFx1N2EzMlx1NjY2MFx1NmEyOVx1ODg5ZFx1NzQ0''@;'; put 'put ''Y1x1N2JjNVx1Njc4Mlx1N2EyY1x1NTI0Zlx1OTA0Nlx1MzRlNlx1NzNjNFx1ezI1ZGI5fVx1NzRjNlx1OWZjN1x1NTdiM1x1NDkyZlx1NTQ0Y1x1NDEzMVx1ezIzNjhlfVx1NTgxOFx1N2E3Mlx1ezI3YjY1fVx1OGI4Zlx1NDZhZVx1ezI2ZTg4fVx1NDE4MVx1ezI1ZDk5fVx1N2JhZVx1ezIy''@;'; put 'put ''NGJjfVx1OWZjOFx1ezIyNGMxfVx1ezIyNGM5fVx1ezIyNGNjfVx1OWZjOVx1ODUwNFx1ezIzNWJifVx1NDBiNFx1OWZjYVx1NDRlMVx1ezJhZGZmfVx1NjJjMVx1NzA2ZVx1OWZjYiJdLFsiODg0MCIsIlx1MzFjMCIsNCwiXHV7MjAxMGN9XHUzMWM1XHV7MjAwZDF9XHV7MjAwY2R9XHUzMWM2''@;'; put 'put ''XHUzMWM3XHV7MjAwY2J9XHV7MjFmZTh9XHUzMWM4XHV7MjAwY2F9XHUzMWM5XHUzMWNhXHUzMWNiXHUzMWNjXHV7MjAxMGV9XHUzMWNkXHUzMWNlXHUwMTAwXHhjMVx1MDFjZFx4YzBcdTAxMTJceGM5XHUwMTFhXHhjOFx1MDE0Y1x4ZDNcdTAxZDFceGQyXHUwZmZmXHhjYVx1MDMwNFx1MWVi''@;'; put 'put ''ZVx1MGZmZlx4Y2FcdTAzMGNcdTFlYzBceGNhXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAyNTFcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYSJdLFsiODhhMSIsIlx1''@;'; put 'put ''MDFkY1x4ZmNcdTBmZmZceGVhXHUwMzA0XHUxZWJmXHUwZmZmXHhlYVx1MDMwY1x1MWVjMVx4ZWFcdTAyNjFcdTIzZGFcdTIzZGIiXSxbIjg5NDAiLCJcdXsyYTNhOX1cdXsyMTE0NX0iXSxbIjg5NDMiLCJcdTY1MGEiXSxbIjg5NDYiLCJcdTRlM2RcdTZlZGRcdTlkNGVcdTkxZGYiXSxbIjg5''@;'; put 'put ''NGMiLCJcdXsyNzczNX1cdTY0OTFcdTRmMWFcdTRmMjhcdTRmYThcdTUxNTZcdTUxNzRcdTUxOWNcdTUxZTRcdTUyYTFcdTUyYThcdTUzM2JcdTUzNGVcdTUzZDFcdTUzZDhcdTU2ZTJcdTU4ZjBcdTU5MDRcdTU5MDdcdTU5MzJcdTU5MzRcdTViNjZcdTViOWVcdTViOWZcdTVjOWFcdTVlODZc''@;'; put 'put ''dTYwM2JcdTY1ODlcdTY3ZmVcdTY4MDRcdTY4NjVcdTZkNGVcdTcwYmNcdTc1MzVcdTdlYTRcdTdlYWNcdTdlYmFcdTdlYzdcdTdlY2ZcdTdlZGZcdTdmMDZcdTdmMzdcdTgyN2FcdTgyY2ZcdTgzNmZcdTg5YzZcdThiYmVcdThiZTJcdThmNjZcdThmNjdcdThmNmUiXSxbIjg5YTEiLCJcdTc0''@;'; put 'put ''MTFcdTdjZmNcdTdkY2RcdTY5NDZcdTdhYzlcdTUyMjciXSxbIjg5YWIiLCJcdTkxOGNcdTc4YjhcdTkxNWVcdTgwYmMiXSxbIjg5YjAiLCJcdThkMGJcdTgwZjZcdXsyMDllN30iXSxbIjg5YjUiLCJcdTgwOWZcdTllYzdcdTRjY2RcdTlkYzlcdTllMGNcdTRjM2VcdXsyOWRmNn1cdXsyNzAw''@;'; put 'put ''ZX1cdTllMGFcdXsyYTEzM31cdTM1YzEiXSxbIjg5YzEiLCJcdTZlOWFcdTgyM2VcdTc1MTkiXSxbIjg5YzUiLCJcdTQ5MTFcdTlhNmNcdTlhOGZcdTlmOTlcdTc5ODdcdXsyODQ2Y31cdXsyMWRjYX1cdXsyMDVkMH1cdXsyMmFlNn1cdTRlMjRcdTRlODFcdTRlODBcdTRlODdcdTRlYmZcdTRl''@;'; put 'put ''ZWJcdTRmMzdcdTM0NGNcdTRmYmRcdTNlNDhcdTUwMDNcdTUwODhcdTM0N2RcdTM0OTNcdTM0YTVcdTUxODZcdTU5MDVcdTUxZGJcdTUxZmNcdTUyMDVcdTRlODlcdTUyNzlcdTUyOTBcdTUzMjdcdTM1YzdcdTUzYTlcdTM1NTFcdTUzYjBcdTM1NTNcdTUzYzJcdTU0MjNcdTM1NmRcdTM1NzJc''@;'; put 'put ''dTM2ODFcdTU0OTNcdTU0YTNcdTU0YjRcdTU0YjlcdTU0ZDBcdTU0ZWZcdTU1MThcdTU1MjNcdTU1MjhcdTM1OThcdTU1M2ZcdTM1YTVcdTM1YmZcdTU1ZDdcdTM1YzUiXSxbIjhhNDAiLCJcdXsyN2Q4NH1cdTU1MjUiXSxbIjhhNDMiLCJcdXsyMGM0Mn1cdXsyMGQxNX1cdXsyNTEyYn1cdTU1''@;'; put 'put ''OTBcdXsyMmNjNn1cdTM5ZWNcdXsyMDM0MX1cdThlNDZcdXsyNGRiOH1cdXsyOTRlNX1cdTQwNTNcdXsyODBiZX1cdTc3N2FcdXsyMmMzOH1cdTNhMzRcdTQ3ZDVcdXsyODE1ZH1cdXsyNjlmMn1cdXsyNGRlYX1cdTY0ZGRcdXsyMGQ3Y31cdXsyMGZiNH1cdXsyMGNkNX1cdXsyMTBmNH1cdTY0''@;'; put 'put ''OGRcdThlN2VcdXsyMGU5Nn1cdXsyMGMwYn1cdXsyMGY2NH1cdXsyMmNhOX1cdXsyODI1Nn1cdXsyNDRkM30iXSxbIjhhNjQiLCJcdXsyMGQ0Nn1cdXsyOWE0ZH1cdXsyODBlOX1cdTQ3ZjRcdXsyNGVhN31cdXsyMmNjMn1cdTlhYjJcdTNhNjdcdXsyOTVmNH1cdTNmZWRcdTM1MDZcdXsyNTJj''@;'; put 'put ''N31cdXsyOTdkNH1cdXsyNzhjOH1cdXsyMmQ0NH1cdTlkNmVcdTk4MTUiXSxbIjhhNzYiLCJcdTQzZDlcdXsyNjBhNX1cdTY0YjRcdTU0ZTNcdXsyMmQ0Y31cdXsyMmJjYX1cdXsyMTA3N31cdTM5ZmJcdXsyMTA2Zn0iXSxbIjhhYTEiLCJcdXsyNjZkYX1cdXsyNjcxNn1cdXsyNzlhMH1cdTY0''@;'; put 'put ''ZWFcdXsyNTA1Mn1cdXsyMGM0M31cdThlNjhcdXsyMjFhMX1cdXsyOGI0Y31cdXsyMDczMX0iXSxbIjhhYWMiLCJcdTQ4MGJcdXsyMDFhOX1cdTNmZmFcdTU4NzNcdXsyMmQ4ZH0iXSxbIjhhYjIiLCJcdXsyNDVjOH1cdXsyMDRmY31cdXsyNjA5N31cdXsyMGY0Y31cdXsyMGQ5Nn1cdTU1Nzlc''@;'; put 'put ''dTQwYmJcdTQzYmEiXSxbIjhhYmIiLCJcdTRhYjRcdXsyMmE2Nn1cdXsyMTA5ZH1cdTgxYWFcdTk4ZjVcdXsyMGQ5Y31cdTYzNzlcdTM5ZmVcdXsyMjc3NX1cdThkYzBcdTU2YTFcdTY0N2NcdTNlNDMiXSxbIjhhYzkiLCJcdXsyYTYwMX1cdXsyMGUwOX1cdXsyMmFjZn1cdXsyMmNjOX0iXSxb''@;'; put 'put ''IjhhY2UiLCJcdXsyMTBjOH1cdXsyMzljMn1cdTM5OTJcdTNhMDZcdXsyODI5Yn1cdTM1NzhcdXsyNWU0OX1cdXsyMjBjN31cdTU2NTJcdXsyMGYzMX1cdXsyMmNiMn1cdXsyOTcyMH1cdTM0YmNcdTZjM2RcdXsyNGUzYn0iXSxbIjhhZGYiLCJcdXsyNzU3NH1cdXsyMmU4Yn1cdXsyMjIwOH1c''@;'; put 'put ''dXsyYTY1Yn1cdXsyOGNjZH1cdXsyMGU3YX1cdXsyMGMzNH1cdXsyNjgxY31cdTdmOTNcdXsyMTBjZn1cdXsyMjgwM31cdXsyMjkzOX1cdTM1ZmJcdXsyNTFlM31cdXsyMGU4Y31cdXsyMGY4ZH1cdXsyMGVhYX1cdTNmOTNcdXsyMGYzMH1cdXsyMGQ0N31cdXsyMTE0Zn1cdXsyMGU0Y30iXSxb''@;'; put 'put ''IjhhZjYiLCJcdXsyMGVhYn1cdXsyMGJhOX1cdXsyMGQ0OH1cdXsyMTBjMH1cdXsyMTEzZH1cdTNmZjlcdXsyMjY5Nn1cdTY0MzJcdXsyMGZhZH0iXSxbIjhiNDAiLCJcdXsyMzNmNH1cdXsyNzYzOX1cdXsyMmJjZX1cdXsyMGQ3ZX1cdXsyMGQ3Zn1cdXsyMmM1MX1cdXsyMmM1NX1cdTNhMThc''@;'; put 'put ''dXsyMGU5OH1cdXsyMTBjN31cdXsyMGYyZX1cdXsyYTYzMn1cdXsyNmI1MH1cdXsyOGNkMn1cdXsyOGQ5OX1cdXsyOGNjYX1cdTk1YWFcdTU0Y2NcdTgyYzRcdTU1YjkiXSxbIjhiNTUiLCJcdXsyOWVjM31cdTljMjZcdTlhYjZcdXsyNzc1ZX1cdXsyMmRlZX1cdTcxNDBcdTgxNmRcdTgwZWNc''@;'; put 'put ''dTVjMWNcdXsyNjU3Mn1cdTgxMzRcdTM3OTdcdTUzNWZcdXsyODBiZH1cdTkxYjZcdXsyMGVmYX1cdXsyMGUwZn1cdXsyMGU3N31cdXsyMGVmYn1cdTM1ZGRcdXsyNGRlYn1cdTM2MDlcdXsyMGNkNn1cdTU2YWZcdXsyMjdiNX1cdXsyMTBjOX1cdXsyMGUxMH1cdXsyMGU3OH1cdXsyMTA3OH1c''@;'; put 'put ''dXsyMTE0OH1cdXsyODIwN31cdXsyMTQ1NX1cdXsyMGU3OX1cdXsyNGU1MH1cdXsyMmRhNH1cdTVhNTRcdXsyMTAxZH1cdXsyMTAxZX1cdXsyMTBmNX1cdXsyMTBmNn1cdTU3OWNcdXsyMGUxMX0iXSxbIjhiYTEiLCJcdXsyNzY5NH1cdXsyODJjZH1cdXsyMGZiNX1cdXsyMGU3Yn1cdXsyNTE3''@;'; put 'put ''ZX1cdTM3MDNcdXsyMGZiNn1cdXsyMTE4MH1cdXsyNTJkOH1cdXsyYTJiZH1cdXsyNDlkYX1cdXsyMTgzYX1cdXsyNDE3N31cdXsyODI3Y31cdTU4OTlcdTUyNjhcdTM2MWFcdXsyNTczZH1cdTdiYjJcdTViNjhcdTQ4MDBcdTRiMmNcdTlmMjdcdTQ5ZTdcdTljMWZcdTliOGRcdXsyNWI3NH1c''@;'; put 'put ''dXsyMzEzZH1cdTU1ZmJcdTM1ZjJcdTU2ODlcdTRlMjhcdTU5MDJcdXsyMWJjMX1cdXsyZjg3OH1cdTk3NTFcdXsyMDA4Nn1cdTRlNWJcdTRlYmJcdTM1M2VcdTVjMjNcdTVmNTFcdTVmYzRcdTM4ZmFcdTYyNGNcdTY1MzVcdTZiN2FcdTZjMzVcdTZjM2FcdTcwNmNcdTcyMmJcdTRlMmNcdTcy''@;'; put 'put ''YWRcdXsyNDhlOX1cdTdmNTJcdTc5M2JcdTdjZjlcdTdmNTNcdXsyNjI2YX1cdTM0YzEiXSxbIjhiZGUiLCJcdXsyNjM0Yn1cdTgwMDJcdTgwODBcdXsyNjYxMn1cdXsyNjk1MX1cdTUzNWRcdTg4NjRcdTg5YzFcdXsyNzhiMn1cdThiYTBcdThkMWRcdTk0ODVcdTk1NzhcdTk1N2ZcdTk1ZThc''@;'; put 'put ''dXsyOGUwZn1cdTk3ZTZcdTk4NzVcdTk4Y2VcdTk4ZGVcdTk5NjNcdXsyOTgxMH1cdTljN2NcdTllMWZcdTllYzRcdTZiNmZcdWY5MDdcdTRlMzdcdXsyMDA4N31cdTk2MWRcdTYyMzdcdTk0YTIiXSxbIjhjNDAiLCJcdTUwM2JcdTZkZmVcdXsyOWM3M31cdTlmYTZcdTNkYzlcdTg4OGZcdXsy''@;'; put 'put ''NDE0ZX1cdTcwNzdcdTVjZjVcdTRiMjBcdXsyNTFjZH1cdTM1NTlcdXsyNWQzMH1cdTYxMjJcdXsyOGEzMn1cdThmYTdcdTkxZjZcdTcxOTFcdTY3MTlcdTczYmFcdXsyMzI4MX1cdXsyYTEwN31cdTNjOGJcdXsyMTk4MH1cdTRiMTBcdTc4ZTRcdTc0MDJcdTUxYWVcdXsyODcwZn1cdTQwMDlc''@;'; put 'put ''dTZhNjNcdXsyYTJiYX1cdTQyMjNcdTg2MGZcdXsyMGE2Zn1cdTdhMmFcdXsyOTk0N31cdXsyOGFlYX1cdTk3NTVcdTcwNGRcdTUzMjRcdXsyMjA3ZX1cdTkzZjRcdTc2ZDlcdXsyODllM31cdTlmYTdcdTc3ZGRcdTRlYTNcdTRmZjBcdTUwYmNcdTRlMmZcdTRmMTdcdTlmYThcdTU0MzRcdTdk''@;'; put 'put ''OGJcdTU4OTJcdTU4ZDBcdXsyMWRiNn1cdTVlOTJcdTVlOTlcdTVmYzJcdXsyMjcxMn1cdTY1OGIiXSxbIjhjYTEiLCJcdXsyMzNmOX1cdTY5MTlcdTZhNDNcdXsyM2M2M31cdTZjZmYiXSxbIjhjYTciLCJcdTcyMDBcdXsyNDUwNX1cdTczOGNcdTNlZGJcdXsyNGExM31cdTViMTVcdTc0Yjlc''@;'; put 'put ''dThiODNcdXsyNWNhNH1cdXsyNTY5NX1cdTdhOTNcdTdiZWNcdTdjYzNcdTdlNmNcdTgyZjhcdTg1OTdcdTlmYTlcdTg4OTBcdTlmYWFcdThlYjlcdTlmYWJcdThmY2ZcdTg1NWZcdTk5ZTBcdTkyMjFcdTlmYWNcdXsyOGRiOX1cdXsyMTQzZn1cdTQwNzFcdTQyYTJcdTVhMWEiXSxbIjhjYzki''@;'; put 'put ''LCJcdTk4NjhcdTY3NmJcdTQyNzZcdTU3M2QiXSxbIjhjY2UiLCJcdTg1ZDZcdXsyNDk3Yn1cdTgyYmZcdXsyNzEwZH1cdTRjODFcdXsyNmQ3NH1cdTVkN2JcdXsyNmIxNX1cdXsyNmZiZX1cdTlmYWRcdTlmYWVcdTViOTZcdTlmYWZcdTY2ZTdcdTdlNWJcdTZlNTdcdTc5Y2FcdTNkODhcdTQ0''@;'; put 'put ''YzNcdXsyMzI1Nn1cdXsyMjc5Nn1cdTQzOWFcdTQ1MzYiXSxbIjhjZTYiLCJcdTVjZDVcdXsyM2IxYX1cdThhZjlcdTVjNzhcdTNkMTJcdXsyMzU1MX1cdTVkNzhcdTlmYjJcdTcxNTdcdTQ1NThcdXsyNDBlY31cdXsyMWUyM31cdTRjNzdcdTM5NzhcdTM0NGFcdXsyMDFhNH1cdXsyNmM0MX1c''@;'; put 'put ''dThhY2NcdTRmYjRcdXsyMDIzOX1cdTU5YmZcdTgxNmNcdTk4NTZcdXsyOThmYX1cdTVmM2IiXSxbIjhkNDAiLCJcdXsyMGI5Zn0iXSxbIjhkNDIiLCJcdXsyMjFjMX1cdXsyODk2ZH1cdTQxMDJcdTQ2YmJcdXsyOTA3OX1cdTNmMDdcdTlmYjNcdXsyYTFiNX1cdTQwZjhcdTM3ZDZcdTQ2Zjdc''@;'; put 'put ''dXsyNmM0Nn1cdTQxN2NcdXsyODZiMn1cdXsyNzNmZn1cdTQ1NmRcdTM4ZDRcdXsyNTQ5YX1cdTQ1NjFcdTQ1MWJcdTRkODlcdTRjN2JcdTRkNzZcdTQ1ZWFcdTNmYzhcdXsyNGIwZn1cdTM2NjFcdTQ0ZGVcdTQ0YmRcdTQxZWRcdTVkM2VcdTVkNDhcdTVkNTZcdTNkZmNcdTM4MGZcdTVkYTRc''@;'; put 'put ''dTVkYjlcdTM4MjBcdTM4MzhcdTVlNDJcdTVlYmRcdTVmMjVcdTVmODNcdTM5MDhcdTM5MTRcdTM5M2ZcdTM5NGRcdTYwZDdcdTYxM2RcdTVjZTVcdTM5ODlcdTYxYjdcdTYxYjlcdTYxY2ZcdTM5YjhcdTYyMmNcdTYyOTBcdTYyZTVcdTYzMThcdTM5ZjhcdTU2YjEiXSxbIjhkYTEiLCJcdTNh''@;'; put 'put ''MDNcdTYzZTJcdTYzZmJcdTY0MDdcdTY0NWFcdTNhNGJcdTY0YzBcdTVkMTVcdTU2MjFcdTlmOWZcdTNhOTdcdTY1ODZcdTNhYmRcdTY1ZmZcdTY2NTNcdTNhZjJcdTY2OTJcdTNiMjJcdTY3MTZcdTNiNDJcdTY3YTRcdTY4MDBcdTNiNThcdTY4NGFcdTY4ODRcdTNiNzJcdTNiNzFcdTNiN2Jc''@;'; put 'put ''dTY5MDlcdTY5NDNcdTcyNWNcdTY5NjRcdTY5OWZcdTY5ODVcdTNiYmNcdTY5ZDZcdTNiZGRcdTZhNjVcdTZhNzRcdTZhNzFcdTZhODJcdTNiZWNcdTZhOTlcdTNiZjJcdTZhYWJcdTZhYjVcdTZhZDRcdTZhZjZcdTZiODFcdTZiYzFcdTZiZWFcdTZjNzVcdTZjYWFcdTNjY2JcdTZkMDJcdTZk''@;'; put 'put ''MDZcdTZkMjZcdTZkODFcdTNjZWZcdTZkYTRcdTZkYjFcdTZlMTVcdTZlMThcdTZlMjlcdTZlODZcdXsyODljMH1cdTZlYmJcdTZlZTJcdTZlZGFcdTlmN2ZcdTZlZThcdTZlZTlcdTZmMjRcdTZmMzRcdTNkNDZcdXsyM2Y0MX1cdTZmODFcdTZmYmVcdTNkNmFcdTNkNzVcdTcxYjdcdTVjOTlc''@;'; put 'put ''dTNkOGFcdTcwMmNcdTNkOTFcdTcwNTBcdTcwNTRcdTcwNmZcdTcwN2ZcdTcwODlcdXsyMDMyNX1cdTQzYzFcdTM1ZjFcdXsyMGVkOH0iXSxbIjhlNDAiLCJcdXsyM2VkN31cdTU3YmVcdXsyNmVkM31cdTcxM2VcdXsyNTdlMH1cdTM2NGVcdTY5YTJcdXsyOGJlOX1cdTViNzRcdTdhNDlcdXsy''@;'; put 'put ''NThlMX1cdXsyOTRkOX1cdTdhNjVcdTdhN2RcdXsyNTlhY31cdTdhYmJcdTdhYjBcdTdhYzJcdTdhYzNcdTcxZDFcdXsyNjQ4ZH1cdTQxY2FcdTdhZGFcdTdhZGRcdTdhZWFcdTQxZWZcdTU0YjJcdXsyNWMwMX1cdTdiMGJcdTdiNTVcdTdiMjlcdXsyNTMwZX1cdXsyNWNmZX1cdTdiYTJcdTdi''@;'; put 'put ''NmZcdTgzOWNcdXsyNWJiNH1cdXsyNmM3Zn1cdTdiZDBcdTg0MjFcdTdiOTJcdTdiYjhcdXsyNWQyMH1cdTNkYWRcdXsyNWM2NX1cdTg0OTJcdTdiZmFcdTdjMDZcdTdjMzVcdXsyNWNjMX1cdTdjNDRcdTdjODNcdXsyNDg4Mn1cdTdjYTZcdTY2N2RcdXsyNDU3OH1cdTdjYzlcdTdjYzdcdTdj''@;'; put 'put ''ZTZcdTdjNzRcdTdjZjNcdTdjZjVcdTdjY2UiXSxbIjhlYTEiLCJcdTdlNjdcdTQ1MWRcdXsyNmU0NH1cdTdkNWRcdXsyNmVkNn1cdTc0OGRcdTdkODlcdTdkYWJcdTcxMzVcdTdkYjNcdTdkZDJcdXsyNDA1N31cdXsyNjAyOX1cdTdkZTRcdTNkMTNcdTdkZjVcdXsyMTdmOX1cdTdkZTVcdXsy''@;'; put 'put ''ODM2ZH1cdTdlMWRcdXsyNjEyMX1cdXsyNjE1YX1cdTdlNmVcdTdlOTJcdTQzMmJcdTk0NmNcdTdlMjdcdTdmNDBcdTdmNDFcdTdmNDdcdTc5MzZcdXsyNjJkMH1cdTk5ZTFcdTdmOTdcdXsyNjM1MX1cdTdmYTNcdXsyMTY2MX1cdXsyMDA2OH1cdTQ1NWNcdXsyMzc2Nn1cdTQ1MDNcdXsyODMz''@;'; put 'put ''YX1cdTdmZmFcdXsyNjQ4OX1cdTgwMDVcdTgwMDhcdTgwMWRcdTgwMjhcdTgwMmZcdXsyYTA4N31cdXsyNmNjM31cdTgwM2JcdTgwM2NcdTgwNjFcdXsyMjcxNH1cdTQ5ODlcdXsyNjYyNn1cdXsyM2RlM31cdXsyNjZlOH1cdTY3MjVcdTgwYTdcdXsyOGE0OH1cdTgxMDdcdTgxMWFcdTU4YjBc''@;'; put 'put ''dXsyMjZmNn1cdTZjN2ZcdXsyNjQ5OH1cdXsyNGZiOH1cdTY0ZTdcdXsyMTQ4YX1cdTgyMThcdXsyMTg1ZX1cdTZhNTNcdXsyNGE2NX1cdXsyNGE5NX1cdTQ0N2FcdTgyMjlcdXsyMGIwZH1cdXsyNmE1Mn1cdXsyM2Q3ZX1cdTRmZjlcdXsyMTRmZH1cdTg0ZTJcdTgzNjJcdXsyNmIwYX1cdXsy''@;'; put 'put ''NDlhN31cdXsyMzUzMH1cdXsyMTc3M31cdXsyM2RmOH1cdTgyYWFcdTY5MWJcdXsyZjk5NH1cdTQxZGIiXSxbIjhmNDAiLCJcdTg1NGJcdTgyZDBcdTgzMWFcdXsyMGUxNn1cdXsyMTdiNH1cdTM2YzFcdXsyMzE3ZH1cdXsyMzU1YX1cdTgyN2JcdTgyZTJcdTgzMThcdXsyM2U4Yn1cdXsyNmRh''@;'; put 'put ''M31cdXsyNmIwNX1cdXsyNmI5N31cdXsyMzVjZX1cdTNkYmZcdTgzMWRcdTU1ZWNcdTgzODVcdTQ1MGJcdXsyNmRhNX1cdTgzYWNcdTgzYzFcdTgzZDNcdTM0N2VcdXsyNmVkNH1cdTZhNTdcdTg1NWFcdTM0OTZcdXsyNmU0Mn1cdXsyMmVlZn1cdTg0NThcdXsyNWJlNH1cdTg0NzFcdTNkZDNc''@;'; put 'put ''dTQ0ZTRcdTZhYTdcdTg0NGFcdXsyM2NiNX1cdTc5NThcdTg0YThcdXsyNmI5Nn1cdXsyNmU3N31cdXsyNmU0M31cdTg0ZGVcdTg0MGZcdTgzOTFcdTQ0YTBcdTg0OTNcdTg0ZTRcdXsyNWM5MX1cdTQyNDBcdXsyNWNjMH1cdTQ1NDNcdTg1MzRcdTVhZjJcdXsyNmU5OX1cdTQ1MjdcdTg1NzNc''@;'; put 'put ''dTQ1MTZcdTY3YmZcdTg2MTYiXSxbIjhmYTEiLCJcdXsyODYyNX1cdXsyODYzYn1cdTg1YzFcdXsyNzA4OH1cdTg2MDJcdXsyMTU4Mn1cdXsyNzBjZH1cdXsyZjliMn1cdTQ1NmFcdTg2MjhcdTM2NDhcdXsyMThhMn1cdTUzZjdcdXsyNzM5YX1cdTg2N2VcdTg3NzFcdXsyYTBmOH1cdTg3ZWVc''@;'; put 'put ''dXsyMmMyN31cdTg3YjFcdTg3ZGFcdTg4MGZcdTU2NjFcdTg2NmNcdTY4NTZcdTQ2MGZcdTg4NDVcdTg4NDZcdXsyNzVlMH1cdXsyM2RiOX1cdXsyNzVlNH1cdTg4NWVcdTg4OWNcdTQ2NWJcdTg4YjRcdTg4YjVcdTYzYzFcdTg4YzVcdTc3NzdcdXsyNzcwZn1cdTg5ODdcdTg5OGFcdTg5YTZc''@;'; put 'put ''dTg5YTlcdTg5YTdcdTg5YmNcdXsyOGEyNX1cdTg5ZTdcdXsyNzkyNH1cdXsyN2FiZH1cdThhOWNcdTc3OTNcdTkxZmVcdThhOTBcdXsyN2E1OX1cdTdhZTlcdXsyN2IzYX1cdXsyM2Y4Zn1cdTQ3MTNcdXsyN2IzOH1cdTcxN2NcdThiMGNcdThiMWZcdXsyNTQzMH1cdXsyNTU2NX1cdThiM2Zc''@;'; put 'put ''dThiNGNcdThiNGRcdThhYTlcdXsyNGE3YX1cdThiOTBcdThiOWJcdThhYWZcdXsyMTZkZn1cdTQ2MTVcdTg4NGZcdThjOWJcdXsyN2Q1NH1cdXsyN2Q4Zn1cdXsyZjlkNH1cdTM3MjVcdXsyN2Q1M31cdThjZDZcdXsyN2Q5OH1cdXsyN2RiZH1cdThkMTJcdThkMDNcdXsyMTkxMH1cdThjZGJc''@;'; put 'put ''dTcwNWNcdThkMTFcdXsyNGNjOX1cdTNlZDBcdThkNzciXSxbIjkwNDAiLCJcdThkYTlcdXsyODAwMn1cdXsyMTAxNH1cdXsyNDk4YX1cdTNiN2NcdXsyODFiY31cdXsyNzEwY31cdTdhZTdcdThlYWRcdThlYjZcdThlYzNcdTkyZDRcdThmMTlcdThmMmRcdXsyODM2NX1cdXsyODQxMn1cdThm''@;'; put 'put ''YTVcdTkzMDNcdXsyYTI5Zn1cdXsyMGE1MH1cdThmYjNcdTQ5MmFcdXsyODlkZX1cdXsyODUzZH1cdXsyM2RiYn1cdTVlZjhcdXsyMzI2Mn1cdThmZjlcdXsyYTAxNH1cdXsyODZiY31cdXsyODUwMX1cdXsyMjMyNX1cdTM5ODBcdXsyNmVkN31cdTkwMzdcdXsyODUzY31cdXsyN2FiZX1cdTkw''@;'; put 'put ''NjFcdXsyODU2Y31cdXsyODYwYn1cdTkwYThcdXsyODcxM31cdTkwYzRcdXsyODZlNn1cdTkwYWVcdTkwZmRcdTkxNjdcdTNhZjBcdTkxYTlcdTkxYzRcdTdjYWNcdXsyODkzM31cdXsyMWU4OX1cdTkyMGVcdTZjOWZcdTkyNDFcdTkyNjJcdXsyNTViOX1cdTkyYjlcdXsyOGFjNn1cdXsyM2M5''@;'; put 'put ''Yn1cdXsyOGIwY31cdXsyNTVkYn0iXSxbIjkwYTEiLCJcdXsyMGQzMX1cdTkzMmNcdTkzNmJcdXsyOGFlMX1cdXsyOGJlYn1cdTcwOGZcdTVhYzNcdXsyOGFlMn1cdXsyOGFlNX1cdTQ5NjVcdTkyNDRcdXsyOGJlY31cdXsyOGMzOX1cdXsyOGJmZn1cdTkzNzNcdTk0NWJcdThlYmNcdTk1ODVc''@;'; put 'put ''dTk1YTZcdTk0MjZcdTk1YTBcdTZmZjZcdTQyYjlcdXsyMjY3YX1cdXsyODZkOH1cdXsyMTI3Y31cdXsyM2UyZX1cdTQ5ZGZcdTZjMWNcdTk2N2JcdTk2OTZcdTQxNmNcdTk2YTNcdXsyNmVkNX1cdTYxZGFcdTk2YjZcdTc4ZjVcdXsyOGFlMH1cdTk2YmRcdTUzY2NcdTQ5YTFcdXsyNmNiOH1c''@;'; put 'put ''dXsyMDI3NH1cdXsyNjQxMH1cdXsyOTBhZn1cdXsyOTBlNX1cdXsyNGFkMX1cdXsyMTkxNX1cdXsyMzMwYX1cdTk3MzFcdTg2NDJcdTk3MzZcdTRhMGZcdTQ1M2RcdTQ1ODVcdXsyNGFlOX1cdTcwNzVcdTViNDFcdTk3MWJcdTk3NWNcdXsyOTFkNX1cdTk3NTdcdTViNGFcdXsyOTFlYn1cdTk3''@;'; put 'put ''NWZcdTk0MjVcdTUwZDBcdXsyMzBiN31cdXsyMzBiY31cdTk3ODlcdTk3OWZcdTk3YjFcdTk3YmVcdTk3YzBcdTk3ZDJcdTk3ZTBcdXsyNTQ2Y31cdTk3ZWVcdTc0MWNcdXsyOTQzM31cdTk3ZmZcdTk3ZjVcdXsyOTQxZH1cdXsyNzk3YX1cdTRhZDFcdTk4MzRcdTk4MzNcdTk4NGJcdTk4NjZc''@;'; put 'put ''dTNiMGVcdXsyNzE3NX1cdTNkNTFcdXsyMDYzMH1cdXsyNDE1Y30iXSxbIjkxNDAiLCJcdXsyNTcwNn1cdTk4Y2FcdTk4YjdcdTk4YzhcdTk4YzdcdTRhZmZcdXsyNmQyN31cdXsyMTZkM31cdTU1YjBcdTk4ZTFcdTk4ZTZcdTk4ZWNcdTkzNzhcdTk5MzlcdXsyNGEyOX1cdTRiNzJcdXsyOTg1''@;'; put 'put ''N31cdXsyOTkwNX1cdTk5ZjVcdTlhMGNcdTlhM2JcdTlhMTBcdTlhNThcdXsyNTcyNX1cdTM2YzRcdXsyOTBiMX1cdXsyOWJkNX1cdTlhZTBcdTlhZTJcdXsyOWIwNX1cdTlhZjRcdTRjMGVcdTliMTRcdTliMmRcdXsyODYwMH1cdTUwMzRcdTliMzRcdXsyNjlhOH1cdTM4YzNcdXsyMzA3ZH1c''@;'; put 'put ''dTliNTBcdTliNDBcdXsyOWQzZX1cdTVhNDVcdXsyMTg2M31cdTliOGVcdXsyNDI0Yn1cdTljMDJcdTliZmZcdTljMGNcdXsyOWU2OH1cdTlkZDRcdXsyOWZiN31cdXsyYTE5Mn1cdXsyYTFhYn1cdXsyYTBlMX1cdXsyYTEyM31cdXsyYTFkZn1cdTlkN2VcdTlkODNcdXsyYTEzNH1cdTllMGVc''@;'; put 'put ''dTY4ODgiXSxbIjkxYTEiLCJcdTlkYzRcdXsyMjE1Yn1cdXsyYTE5M31cdXsyYTIyMH1cdXsyMTkzYn1cdXsyYTIzM31cdTlkMzlcdXsyYTBiOX1cdXsyYTJiNH1cdTllOTBcdTllOTVcdTllOWVcdTllYTJcdTRkMzRcdTllYWFcdTllYWZcdXsyNDM2NH1cdTllYzFcdTNiNjBcdTM5ZTVcdTNk''@;'; put 'put ''MWRcdTRmMzJcdTM3YmVcdXsyOGMyYn1cdTlmMDJcdTlmMDhcdTRiOTZcdTk0MjRcdXsyNmRhMn1cdTlmMTdcdTlmMTZcdTlmMzlcdTU2OWZcdTU2OGFcdTlmNDVcdTk5YjhcdXsyOTA4Yn1cdTk3ZjJcdTg0N2ZcdTlmNjJcdTlmNjlcdTdhZGNcdTlmOGVcdTcyMTZcdTRiYmVcdXsyNDk3NX1c''@;'; put 'put ''dXsyNDliYn1cdTcxNzdcdXsyNDlmOH1cdXsyNDM0OH1cdXsyNGE1MX1cdTczOWVcdXsyOGJkYX1cdXsyMThmYX1cdTc5OWZcdXsyODk3ZX1cdXsyOGUzNn1cdTkzNjlcdTkzZjNcdXsyOGE0NH1cdTkyZWNcdTkzODFcdTkzY2JcdXsyODk2Y31cdXsyNDRiOX1cdTcyMTdcdTNlZWJcdTc3NzJc''@;'; put 'put ''dTdhNDNcdTcwZDBcdXsyNDQ3M31cdXsyNDNmOH1cdTcxN2VcdXsyMTdlZn1cdTcwYTNcdXsyMThiZX1cdXsyMzU5OX1cdTNlYzdcdXsyMTg4NX1cdXsyNTQyZn1cdXsyMTdmOH1cdTM3MjJcdXsyMTZmYn1cdXsyMTgzOX1cdTM2ZTFcdXsyMTc3NH1cdXsyMThkMX1cdXsyNWY0Yn1cdTM3MjNc''@;'; put 'put ''dXsyMTZjMH1cdTU3NWJcdXsyNGEyNX1cdXsyMTNmZX1cdXsyMTJhOH0iXSxbIjkyNDAiLCJcdXsyMTNjNn1cdXsyMTRiNn1cdTg1MDNcdXsyMzZhNn1cdTg1MDNcdTg0NTVcdXsyNDk5NH1cdXsyNzE2NX1cdXsyM2UzMX1cdXsyNTU1Y31cdXsyM2VmYn1cdXsyNzA1Mn1cdTQ0ZjRcdXsyMzZl''@;'; put 'put ''ZX1cdXsyOTk5ZH1cdXsyNmYyNn1cdTY3ZjlcdTM3MzNcdTNjMTVcdTNkZTdcdTU4NmNcdXsyMTkyMn1cdTY4MTBcdTQwNTdcdXsyMzczZn1cdXsyNDBlMX1cdXsyNDA4Yn1cdXsyNDEwZn1cdXsyNmMyMX1cdTU0Y2JcdTU2OWVcdXsyNjZiMX1cdTU2OTJcdXsyMGZkZn1cdXsyMGJhOH1cdXsy''@;'; put 'put ''MGUwZH1cdTkzYzZcdXsyOGIxM31cdTkzOWNcdTRlZjhcdTUxMmJcdTM4MTlcdXsyNDQzNn1cdTRlYmNcdXsyMDQ2NX1cdXsyMDM3Zn1cdTRmNGJcdTRmOGFcdXsyNTY1MX1cdTVhNjhcdXsyMDFhYn1cdXsyMDNjYn1cdTM5OTlcdXsyMDMwYX1cdXsyMDQxNH1cdTM0MzVcdTRmMjlcdXsyMDJj''@;'; put 'put ''MH1cdXsyOGViM31cdXsyMDI3NX1cdThhZGFcdXsyMDIwY31cdTRlOTgiXSxbIjkyYTEiLCJcdTUwY2RcdTUxMGRcdTRmYTJcdTRmMDNcdXsyNGEwZX1cdXsyM2U4YX1cdTRmNDJcdTUwMmVcdTUwNmNcdTUwODFcdTRmY2NcdTRmZTVcdTUwNThcdTUwZmNcdTUxNTlcdTUxNWJcdTUxNWRcdTUx''@;'; put 'put ''NWVcdTZlNzZcdXsyMzU5NX1cdXsyM2UzOX1cdXsyM2ViZn1cdTZkNzJcdXsyMTg4NH1cdXsyM2U4OX1cdTUxYThcdTUxYzNcdXsyMDVlMH1cdTQ0ZGRcdXsyMDRhM31cdXsyMDQ5Mn1cdXsyMDQ5MX1cdThkN2FcdXsyOGE5Y31cdXsyMDcwZX1cdTUyNTlcdTUyYTRcdXsyMDg3M31cdTUyZTFc''@;'; put 'put ''dTkzNmVcdTQ2N2FcdTcxOGNcdXsyNDM4Y31cdXsyMGMyMH1cdXsyNDlhY31cdXsyMTBlNH1cdTY5ZDFcdXsyMGUxZH1cdTc0NzlcdTNlZGVcdTc0OTlcdTc0MTRcdTc0NTZcdTczOThcdTRiOGVcdXsyNGFiY31cdXsyNDA4ZH1cdTUzZDBcdTM1ODRcdTcyMGZcdXsyNDBjOX1cdTU1YjRcdXsy''@;'; put 'put ''MDM0NX1cdTU0Y2RcdXsyMGJjNn1cdTU3MWRcdTkyNWRcdTk2ZjRcdTkzNjZcdTU3ZGRcdTU3OGRcdTU3N2ZcdTM2M2VcdTU4Y2JcdTVhOTlcdXsyOGE0Nn1cdXsyMTZmYX1cdXsyMTc2Zn1cdXsyMTcxMH1cdTVhMmNcdTU5YjhcdTkyOGZcdTVhN2VcdTVhY2ZcdTVhMTJcdXsyNTk0Nn1cdXsy''@;'; put 'put ''MTlmM31cdXsyMTg2MX1cdXsyNDI5NX1cdTM2ZjVcdTZkMDVcdTc0NDNcdTVhMjFcdXsyNWU4M30iXSxbIjkzNDAiLCJcdTVhODFcdXsyOGJkN31cdXsyMDQxM31cdTkzZTBcdTc0OGNcdXsyMTMwM31cdTcxMDVcdTQ5NzJcdTk0MDhcdXsyODlmYn1cdTkzYmRcdTM3YTBcdTVjMWVcdTVjOWVc''@;'; put 'put ''dTVlNWVcdTVlNDhcdXsyMTk5Nn1cdXsyMTk3Y31cdXsyM2FlZX1cdTVlY2RcdTViNGZcdXsyMTkwM31cdXsyMTkwNH1cdTM3MDFcdXsyMThhMH1cdTM2ZGRcdXsyMTZmZX1cdTM2ZDNcdTgxMmFcdXsyOGE0N31cdXsyMWRiYX1cdXsyMzQ3Mn1cdXsyODlhOH1cdTVmMGNcdTVmMGVcdXsyMTky''@;'; put 'put ''N31cdXsyMTdhYn1cdTVhNmJcdXsyMTczYn1cdTViNDRcdTg2MTRcdXsyNzVmZH1cdTg4NjBcdTYwN2VcdXsyMjg2MH1cdXsyMjYyYn1cdTVmZGJcdTNlYjhcdXsyMjVhZn1cdXsyMjViZX1cdXsyOTA4OH1cdXsyNmY3M31cdTYxYzBcdXsyMDAzZX1cdXsyMDA0Nn1cdXsyMjYxYn1cdTYxOTlc''@;'; put 'put ''dTYxOThcdTYwNzVcdXsyMmM5Yn1cdXsyMmQwN31cdXsyNDZkNH1cdXsyOTE0ZH0iXSxbIjkzYTEiLCJcdTY0NzFcdXsyNDY2NX1cdXsyMmI2YX1cdTNhMjlcdXsyMmIyMn1cdXsyMzQ1MH1cdXsyOThlYX1cdXsyMmU3OH1cdTYzMzdcdXsyYTQ1Yn1cdTY0YjZcdTYzMzFcdTYzZDFcdXsyNDll''@;'; put 'put ''M31cdXsyMmQ2N31cdTYyYTRcdXsyMmNhMX1cdTY0M2JcdTY1NmJcdTY5NzJcdTNiZjRcdXsyMzA4ZX1cdXsyMzJhZH1cdXsyNDk4OX1cdXsyMzJhYn1cdTU1MGRcdXsyMzJlMH1cdXsyMThkOX1cdXsyOTQzZn1cdTY2Y2VcdXsyMzI4OX1cdXsyMzFiM31cdTNhZTBcdTQxOTBcdXsyNTU4NH1c''@;'; put 'put ''dXsyOGIyMn1cdXsyNTU4Zn1cdXsyMTZmY31cdXsyNTU1Yn1cdXsyNTQyNX1cdTc4ZWVcdXsyMzEwM31cdXsyMTgyYX1cdXsyMzIzNH1cdTM0NjRcdXsyMzIwZn1cdXsyMzE4Mn1cdXsyNDJjOX1cdTY2OGVcdXsyNmQyNH1cdTY2NmJcdTRiOTNcdTY2MzBcdXsyNzg3MH1cdXsyMWRlYn1cdTY2''@;'; put 'put ''NjNcdXsyMzJkMn1cdXsyMzJlMX1cdTY2MWVcdXsyNTg3Mn1cdTM4ZDFcdXsyMzgzYX1cdXsyMzdiY31cdTNiOTlcdXsyMzdhMn1cdXsyMzNmZX1cdTc0ZDBcdTNiOTZcdTY3OGZcdXsyNDYyYX1cdTY4YjZcdTY4MWVcdTNiYzRcdTZhYmVcdTM4NjNcdXsyMzdkNX1cdXsyNDQ4N31cdTZhMzNc''@;'; put 'put ''dTZhNTJcdTZhYzlcdTZiMDVcdXsyMTkxMn1cdTY1MTFcdTY4OThcdTZhNGNcdTNiZDdcdTZhN2FcdTZiNTdcdXsyM2ZjMH1cdXsyM2M5YX1cdTkzYTBcdTkyZjJcdXsyOGJlYX1cdXsyOGFjYn0iXSxbIjk0NDAiLCJcdTkyODlcdXsyODAxZX1cdXsyODlkY31cdTk0NjdcdTZkYTVcdTZmMGJc''@;'; put 'put ''dXsyNDllY31cdTZkNjdcdXsyM2Y3Zn1cdTNkOGZcdTZlMDRcdXsyNDAzY31cdTVhM2RcdTZlMGFcdTU4NDdcdTZkMjRcdTc4NDJcdTcxM2JcdXsyNDMxYX1cdXsyNDI3Nn1cdTcwZjFcdTcyNTBcdTcyODdcdTcyOTRcdXsyNDc4Zn1cdXsyNDcyNX1cdTUxNzlcdXsyNGFhNH1cdXsyMDVlYn1c''@;'; put 'put ''dTc0N2FcdXsyM2VmOH1cdXsyMzY1Zn1cdXsyNGE0YX1cdXsyNDkxN31cdXsyNWZlMX1cdTNmMDZcdTNlYjFcdXsyNGFkZn1cdXsyOGMyM31cdXsyM2YzNX1cdTYwYTdcdTNlZjNcdTc0Y2NcdTc0M2NcdTkzODdcdTc0MzdcdTQ0OWZcdXsyNmRlYX1cdTQ1NTFcdTc1ODNcdTNmNjNcdXsyNGNk''@;'; put 'put ''OX1cdXsyNGQwNn1cdTNmNThcdTc1NTVcdTc2NzNcdXsyYTVjNn1cdTNiMTlcdTc0NjhcdXsyOGFjY31cdXsyNDlhYn1cdXsyNDk4ZX1cdTNhZmIiXSxbIjk0YTEiLCJcdTNkY2RcdXsyNGE0ZX1cdTNlZmZcdXsyNDljNX1cdXsyNDhmM31cdTkxZmFcdTU3MzJcdTkzNDJcdXsyOGFlM31cdXsy''@;'; put 'put ''MTg2NH1cdTUwZGZcdXsyNTIyMX1cdXsyNTFlN31cdTc3NzhcdXsyMzIzMn1cdTc3MGVcdTc3MGZcdTc3N2JcdXsyNDY5N31cdXsyMzc4MX1cdTNhNWVcdXsyNDhmMH1cdTc0MzhcdTc0OWJcdTNlYmZcdXsyNGFiYX1cdXsyNGFjN31cdTQwYzhcdXsyNGE5Nn1cdXsyNjFhZX1cdTkzMDdcdXsy''@;'; put 'put ''NTU4MX1cdTc4MWVcdTc4OGRcdTc4ODhcdTc4ZDJcdTczZDBcdTc5NTlcdXsyNzc0MX1cdXsyNTZlM31cdTQxMGVcdTc5OWJcdTg0OTZcdTc5YTVcdTZhMmRcdXsyM2VmYX1cdTdhM2FcdTc5ZjRcdTQxNmVcdXsyMTZlNn1cdTQxMzJcdTkyMzVcdTc5ZjFcdXsyMGQ0Y31cdXsyNDk4Y31cdXsy''@;'; put 'put ''MDI5OX1cdXsyM2RiYX1cdXsyMTc2ZX1cdTM1OTdcdTU1NmJcdTM1NzBcdTM2YWFcdXsyMDFkNH1cdXsyMGMwZH1cdTdhZTJcdTVhNTlcdXsyMjZmNX1cdXsyNWFhZn1cdXsyNWE5Y31cdTVhMGRcdXsyMDI1Yn1cdTc4ZjBcdTVhMmFcdXsyNWJjNn1cdTdhZmVcdTQxZjlcdTdjNWRcdTdjNmRc''@;'; put 'put ''dTQyMTFcdXsyNWJiM31cdXsyNWViY31cdXsyNWVhNn1cdTdjY2RcdXsyNDlmOX1cdXsyMTdiMH1cdTdjOGVcdTdjN2NcdTdjYWVcdTZhYjJcdTdkZGNcdTdlMDdcdTdkZDNcdTdmNGVcdXsyNjI2MX0iXSxbIjk1NDAiLCJcdXsyNjE1Y31cdXsyN2I0OH1cdTdkOTdcdXsyNWU4Mn1cdTQyNmFc''@;'; put 'put ''dXsyNmI3NX1cdXsyMDkxNn1cdTY3ZDZcdXsyMDA0ZX1cdXsyMzVjZn1cdTU3YzRcdXsyNjQxMn1cdXsyNjNmOH1cdXsyNDk2Mn1cdTdmZGRcdTdiMjdcdXsyMDgyY31cdXsyNWFlOX1cdXsyNWQ0M31cdTdiMGNcdXsyNWUwZX1cdTk5ZTZcdTg2NDVcdTlhNjNcdTZhMWNcdXsyMzQzZn1cdTM5''@;'; put 'put ''ZTJcdXsyNDlmN31cdXsyNjVhZH1cdTlhMWZcdXsyNjVhMH1cdTg0ODBcdXsyNzEyN31cdXsyNmNkMX1cdTQ0ZWFcdTgxMzdcdTQ0MDJcdTgwYzZcdTgxMDlcdTgxNDJcdXsyNjdiNH1cdTk4YzNcdXsyNmE0Mn1cdTgyNjJcdTgyNjVcdXsyNmE1MX1cdTg0NTNcdXsyNmRhN31cdTg2MTBcdXsy''@;'; put 'put ''NzIxYn1cdTVhODZcdTQxN2ZcdXsyMTg0MH1cdTViMmJcdXsyMThhMX1cdTVhZTRcdXsyMThkOH1cdTg2YTBcdXsyZjliY31cdXsyM2Q4Zn1cdTg4MmRcdXsyNzQyMn1cdTVhMDIiXSxbIjk1YTEiLCJcdTg4NmVcdTRmNDVcdTg4ODdcdTg4YmZcdTg4ZTZcdTg5NjVcdTg5NGRcdXsyNTY4M31c''@;'; put 'put ''dTg5NTRcdXsyNzc4NX1cdXsyNzc4NH1cdXsyOGJmNX1cdXsyOGJkOX1cdXsyOGI5Y31cdXsyODlmOX1cdTNlYWRcdTg0YTNcdTQ2ZjVcdTQ2Y2ZcdTM3ZjJcdThhM2RcdThhMWNcdXsyOTQ0OH1cdTVmNGRcdTkyMmJcdXsyNDI4NH1cdTY1ZDRcdTcxMjlcdTcwYzRcdXsyMTg0NX1cdTlkNmRc''@;'; put 'put ''dThjOWZcdThjZTlcdXsyN2RkY31cdTU5OWFcdTc3YzNcdTU5ZjBcdTQzNmVcdTM2ZDRcdThlMmFcdThlYTdcdXsyNGMwOX1cdThmMzBcdThmNGFcdTQyZjRcdTZjNThcdTZmYmJcdXsyMjMyMX1cdTQ4OWJcdTZmNzlcdTZlOGJcdXsyMTdkYX1cdTliZTlcdTM2YjVcdXsyNDkyZn1cdTkwYmJc''@;'; put 'put ''dTkwOTdcdTU1NzFcdTQ5MDZcdTkxYmJcdTk0MDRcdXsyOGE0Yn1cdTQwNjJcdXsyOGFmY31cdTk0MjdcdXsyOGMxZH1cdXsyOGMzYn1cdTg0ZTVcdThhMmJcdTk1OTlcdTk1YTdcdTk1OTdcdTk1OTZcdXsyOGQzNH1cdTc0NDVcdTNlYzJcdXsyNDhmZn1cdXsyNGE0Mn1cdXsyNDNlYX1cdTNl''@;'; put 'put ''ZTdcdXsyMzIyNX1cdTk2OGZcdXsyOGVlN31cdXsyOGU2Nn1cdXsyOGU2NX1cdTNlY2NcdXsyNDllZH1cdXsyNGE3OH1cdXsyM2ZlZX1cdTc0MTJcdTc0NmJcdTNlZmNcdTk3NDFcdXsyOTBiMH0iXSxbIjk2NDAiLCJcdTY4NDdcdTRhMWRcdXsyOTA5M31cdXsyNTdkZn1cdTk3NWRcdTkzNjhc''@;'; put 'put ''dXsyODk4OX1cdXsyOGMyNn1cdXsyOGIyZn1cdXsyNjNiZX1cdTkyYmFcdTViMTFcdThiNjlcdTQ5M2NcdTczZjlcdXsyNDIxYn1cdTk3OWJcdTk3NzFcdTk5MzhcdXsyMGYyNn1cdTVkYzFcdXsyOGJjNX1cdXsyNGFiMn1cdTk4MWZcdXsyOTRkYX1cdTkyZjZcdXsyOTVkN31cdTkxZTVcdTQ0''@;'; put 'put ''YzBcdXsyOGI1MH1cdXsyNGE2N31cdXsyOGI2NH1cdTk4ZGNcdXsyOGE0NX1cdTNmMDBcdTkyMmFcdTQ5MjVcdTg0MTRcdTk5M2JcdTk5NGRcdXsyN2IwNn1cdTNkZmRcdTk5OWJcdTRiNmZcdTk5YWFcdTlhNWNcdXsyOGI2NX1cdXsyNThjOH1cdTZhOGZcdTlhMjFcdTVhZmVcdTlhMmZcdXsy''@;'; put 'put ''OThmMX1cdTRiOTBcdXsyOTk0OH1cdTk5YmNcdTRiYmRcdTRiOTdcdTkzN2RcdTU4NzJcdXsyMTMwMn1cdTU4MjJcdXsyNDliOH0iXSxbIjk2YTEiLCJcdXsyMTRlOH1cdTc4NDRcdXsyMjcxZn1cdXsyM2RiOH1cdTY4YzVcdTNkN2RcdTk0NThcdTM5MjdcdTYxNTBcdXsyMjc4MX1cdXsyMjk2''@;'; put 'put ''Yn1cdTYxMDdcdTljNGZcdTljNTNcdTljN2JcdTljMzVcdTljMTBcdTliN2ZcdTliY2ZcdXsyOWUyZH1cdTliOWZcdXsyYTFmNX1cdXsyYTBmZX1cdTlkMjFcdTRjYWVcdXsyNDEwNH1cdTllMThcdTRjYjBcdTlkMGNcdXsyYTFiNH1cdXsyYTBlZH1cdXsyYTBmM31cdXsyOTkyZn1cdTlkYTVc''@;'; put 'put ''dTg0YmRcdXsyNmUxMn1cdXsyNmZkZn1cdXsyNmI4Mn1cdTg1ZmNcdTQ1MzNcdXsyNmRhNH1cdXsyNmU4NH1cdXsyNmRmMH1cdTg0MjBcdTg1ZWVcdXsyNmUwMH1cdXsyMzdkN31cdXsyNjA2NH1cdTc5ZTJcdXsyMzU5Y31cdXsyMzY0MH1cdTQ5MmRcdXsyNDlkZX1cdTNkNjJcdTkzZGJcdTky''@;'; put 'put ''YmVcdTkzNDhcdXsyMDJiZn1cdTc4YjlcdTkyNzdcdTk0NGRcdTRmZTRcdTM0NDBcdTkwNjRcdXsyNTU1ZH1cdTc4M2RcdTc4NTRcdTc4YjZcdTc4NGJcdXsyMTc1N31cdXsyMzFjOX1cdXsyNDk0MX1cdTM2OWFcdTRmNzJcdTZmZGFcdTZmZDlcdTcwMWVcdTcwMWVcdTU0MTRcdXsyNDFiNX1c''@;'; put 'put ''dTU3YmJcdTU4ZjNcdTU3OGFcdTlkMTZcdTU3ZDdcdTcxMzRcdTM0YWZcdXsyNDFhY31cdTcxZWJcdXsyNmM0MH1cdXsyNGY5N31cdTViMjhcdXsyMTdiNX1cdXsyOGE0OX0iXSxbIjk3NDAiLCJcdTYxMGNcdTVhY2VcdTVhMGJcdTQyYmNcdXsyNDQ4OH1cdTM3MmNcdTRiN2JcdXsyODlmY31c''@;'; put 'put ''dTkzYmJcdTkzYjhcdXsyMThkNn1cdXsyMGYxZH1cdTg0NzJcdXsyNmNjMH1cdXsyMTQxM31cdXsyNDJmYX1cdXsyMmMyNn1cdXsyNDNjMX1cdTU5OTRcdXsyM2RiN31cdXsyNjc0MX1cdTdkYThcdXsyNjE1Yn1cdXsyNjBhNH1cdXsyNDliOX1cdXsyNDk4Yn1cdXsyODlmYX1cdTkyZTVcdTcz''@;'; put 'put ''ZTJcdTNlZTlcdTc0YjRcdXsyOGI2M31cdXsyMTg5Zn1cdTNlZTFcdXsyNGFiM31cdTZhZDhcdTczZjNcdTczZmJcdTNlZDZcdXsyNGEzZX1cdXsyNGE5NH1cdXsyMTdkOX1cdXsyNGE2Nn1cdXsyMDNhN31cdXsyMTQyNH1cdXsyNDllNX1cdTc0NDhcdXsyNDkxNn1cdTcwYTVcdXsyNDk3Nn1c''@;'; put 'put ''dTkyODRcdTczZTZcdTkzNWZcdXsyMDRmZX1cdTkzMzFcdXsyOGFjZX1cdXsyOGExNn1cdTkzODZcdXsyOGJlN31cdXsyNTVkNX1cdTQ5MzVcdXsyOGE4Mn1cdTcxNmIiXSxbIjk3YTEiLCJcdXsyNDk0M31cdXsyMGNmZn1cdTU2YTRcdXsyMDYxYX1cdXsyMGJlYn1cdXsyMGNiOH1cdTU1MDJc''@;'; put 'put ''dTc5YzRcdXsyMTdmYX1cdTdkZmVcdXsyMTZjMn1cdXsyNGE1MH1cdXsyMTg1Mn1cdTQ1MmVcdTk0MDFcdTM3MGFcdXsyOGFjMH1cdXsyNDlhZH1cdTU5YjBcdXsyMThiZn1cdXsyMTg4M31cdXsyNzQ4NH1cdTVhYTFcdTM2ZTJcdXsyM2Q1Yn1cdTM2YjBcdTkyNWZcdTVhNzlcdXsyOGE4MX1c''@;'; put 'put ''dXsyMTg2Mn1cdTkzNzRcdTNjY2RcdXsyMGFiNH1cdTRhOTZcdTM5OGFcdTUwZjRcdTNkNjlcdTNkNGNcdXsyMTM5Y31cdTcxNzVcdTQyZmJcdXsyODIxOH1cdTZlMGZcdXsyOTBlNH1cdTQ0ZWJcdTZkNTdcdXsyN2U0Zn1cdTcwNjdcdTZjYWZcdTNjZDZcdXsyM2ZlZH1cdXsyM2UyZH1cdTZl''@;'; put 'put ''MDJcdTZmMGNcdTNkNmZcdXsyMDNmNX1cdTc1NTFcdTM2YmNcdTM0YzhcdTQ2ODBcdTNlZGFcdTQ4NzFcdTU5YzRcdTkyNmVcdTQ5M2VcdThmNDFcdXsyOGMxY31cdXsyNmJjMH1cdTU4MTJcdTU3YzhcdTM2ZDZcdXsyMTQ1Mn1cdTcwZmVcdXsyNDM2Mn1cdXsyNGE3MX1cdXsyMmZlM31cdXsy''@;'; put 'put ''MTJiMH1cdXsyMjNiZH1cdTY4YjlcdTY5NjdcdXsyMTM5OH1cdXsyMzRlNX1cdXsyN2JmNH1cdXsyMzZkZn1cdXsyOGE4M31cdXsyMzdkNn1cdXsyMzNmYX1cdXsyNGM5Zn1cdTZhMWFcdXsyMzZhZH1cdXsyNmNiN31cdTg0M2VcdTQ0ZGZcdTQ0Y2UiXSxbIjk4NDAiLCJcdXsyNmQyNn1cdXsy''@;'; put 'put ''NmQ1MX1cdXsyNmM4Mn1cdXsyNmZkZX1cdTZmMTdcdXsyNzEwOX1cdTgzM2RcdXsyMTczYX1cdTgzZWRcdXsyNmM4MH1cdXsyNzA1M31cdXsyMTdkYn1cdTU5ODlcdTVhODJcdXsyMTdiM31cdTVhNjFcdTVhNzFcdXsyMTkwNX1cdXsyNDFmY31cdTM3MmRcdTU5ZWZcdXsyMTczY31cdTM2Yzdc''@;'; put 'put ''dTcxOGVcdTkzOTBcdTY2OWFcdXsyNDJhNX1cdTVhNmVcdTVhMmJcdXsyNDI5M31cdTZhMmJcdXsyM2VmOX1cdXsyNzczNn1cdXsyNDQ1Yn1cdXsyNDJjYX1cdTcxMWRcdXsyNDI1OX1cdXsyODllMX1cdTRmYjBcdXsyNmQyOH1cdTVjYzJcdXsyNDRjZX1cdXsyN2U0ZH1cdXsyNDNiZH1cdTZh''@;'; put 'put ''MGNcdXsyNDI1Nn1cdXsyMTMwNH1cdTcwYTZcdTcxMzNcdXsyNDNlOX1cdTNkYTVcdTZjZGZcdXsyZjgyNX1cdXsyNGE0Zn1cdTdlNjVcdTU5ZWJcdTVkMmZcdTNkZjNcdTVmNWNcdXsyNGE1ZH1cdXsyMTdkZn1cdTdkYTRcdTg0MjYiXSxbIjk4YTEiLCJcdTU0ODVcdXsyM2FmYX1cdXsyMzMw''@;'; put 'put ''MH1cdXsyMDIxNH1cdTU3N2VcdXsyMDhkNX1cdXsyMDYxOX1cdTNmZTVcdXsyMWY5ZX1cdXsyYTJiNn1cdTcwMDNcdXsyOTE1Yn1cdTVkNzBcdTczOGZcdTdjZDNcdXsyOGE1OX1cdXsyOTQyMH1cdTRmYzhcdTdmZTdcdTcyY2RcdTczMTBcdXsyN2FmNH1cdTczMzhcdTczMzlcdXsyNTZmNn1c''@;'; put 'put ''dTczNDFcdTczNDhcdTNlYTlcdXsyN2IxOH1cdTkwNmNcdTcxZjVcdXsyNDhmMn1cdTczZTFcdTgxZjZcdTNlY2FcdTc3MGNcdTNlZDFcdTZjYTJcdTU2ZmRcdTc0MTlcdTc0MWVcdTc0MWZcdTNlZTJcdTNlZjBcdTNlZjRcdTNlZmFcdTc0ZDNcdTNmMGVcdTNmNTNcdTc1NDJcdTc1NmRcdTc1''@;'; put 'put ''NzJcdTc1OGRcdTNmN2NcdTc1YzhcdTc1ZGNcdTNmYzBcdTc2NGRcdTNmZDdcdTc2NzRcdTNmZGNcdTc2N2FcdXsyNGY1Y31cdTcxODhcdTU2MjNcdTg5ODBcdTU4NjlcdTQwMWRcdTc3NDNcdTQwMzlcdTY3NjFcdTQwNDVcdTM1ZGJcdTc3OThcdTQwNmFcdTQwNmZcdTVjNWVcdTc3YmVcdTc3''@;'; put 'put ''Y2JcdTU4ZjJcdTc4MThcdTcwYjlcdTc4MWNcdTQwYThcdTc4MzlcdTc4NDdcdTc4NTFcdTc4NjZcdTg0NDhcdXsyNTUzNX1cdTc5MzNcdTY4MDNcdTc5MzJcdTQxMDMiXSxbIjk5NDAiLCJcdTQxMDlcdTc5OTFcdTc5OTlcdThmYmJcdTdhMDZcdThmYmNcdTQxNjdcdTdhOTFcdTQxYjJcdTdh''@;'; put 'put ''YmNcdTgyNzlcdTQxYzRcdTdhY2ZcdTdhZGJcdTQxY2ZcdTRlMjFcdTdiNjJcdTdiNmNcdTdiN2JcdTdjMTJcdTdjMWJcdTQyNjBcdTQyN2FcdTdjN2JcdTdjOWNcdTQyOGNcdTdjYjhcdTQyOTRcdTdjZWRcdThmOTNcdTcwYzBcdXsyMGNjZn1cdTdkY2ZcdTdkZDRcdTdkZDBcdTdkZmRcdTdm''@;'; put 'put ''YWVcdTdmYjRcdTcyOWZcdTQzOTdcdTgwMjBcdTgwMjVcdTdiMzlcdTgwMmVcdTgwMzFcdTgwNTRcdTNkY2NcdTU3YjRcdTcwYTBcdTgwYjdcdTgwZTlcdTQzZWRcdTgxMGNcdTczMmFcdTgxMGVcdTgxMTJcdTc1NjBcdTgxMTRcdTQ0MDFcdTNiMzlcdTgxNTZcdTgxNTlcdTgxNWEiXSxbIjk5''@;'; put 'put ''YTEiLCJcdTQ0MTNcdTU4M2FcdTgxN2NcdTgxODRcdTQ0MjVcdTgxOTNcdTQ0MmRcdTgxYTVcdTU3ZWZcdTgxYzFcdTgxZTRcdTgyNTRcdTQ0OGZcdTgyYTZcdTgyNzZcdTgyY2FcdTgyZDhcdTgyZmZcdTQ0YjBcdTgzNTdcdTk2NjlcdTY5OGFcdTg0MDVcdTcwZjVcdTg0NjRcdTYwZTNcdTg0''@;'; put 'put ''ODhcdTQ1MDRcdTg0YmVcdTg0ZTFcdTg0ZjhcdTg1MTBcdTg1MzhcdTg1NTJcdTQ1M2JcdTg1NmZcdTg1NzBcdTg1ZTBcdTQ1NzdcdTg2NzJcdTg2OTJcdTg2YjJcdTg2ZWZcdTk2NDVcdTg3OGJcdTQ2MDZcdTQ2MTdcdTg4YWVcdTg4ZmZcdTg5MjRcdTg5NDdcdTg5OTFcdXsyNzk2N31cdThh''@;'; put 'put ''MjlcdThhMzhcdThhOTRcdThhYjRcdThjNTFcdThjZDRcdThjZjJcdThkMWNcdTQ3OThcdTU4NWZcdThkYzNcdTQ3ZWRcdTRlZWVcdThlM2FcdTU1ZDhcdTU3NTRcdThlNzFcdTU1ZjVcdThlYjBcdTQ4MzdcdThlY2VcdThlZTJcdThlZTRcdThlZWRcdThlZjJcdThmYjdcdThmYzFcdThmY2Fc''@;'; put 'put ''dThmY2NcdTkwMzNcdTk5YzRcdTQ4YWRcdTk4ZTBcdTkyMTNcdTQ5MWVcdTkyMjhcdTkyNThcdTkyNmJcdTkyYjFcdTkyYWVcdTkyYmYiXSxbIjlhNDAiLCJcdTkyZTNcdTkyZWJcdTkyZjNcdTkyZjRcdTkyZmRcdTkzNDNcdTkzODRcdTkzYWRcdTQ5NDVcdTQ5NTFcdTllYmZcdTk0MTdcdTUz''@;'; put 'put ''MDFcdTk0MWRcdTk0MmRcdTk0M2VcdTQ5NmFcdTk0NTRcdTk0NzlcdTk1MmRcdTk1YTJcdTQ5YTdcdTk1ZjRcdTk2MzNcdTQ5ZTVcdTY3YTBcdTRhMjRcdTk3NDBcdTRhMzVcdTk3YjJcdTk3YzJcdTU2NTRcdTRhZTRcdTYwZThcdTk4YjlcdTRiMTlcdTk4ZjFcdTU4NDRcdTk5MGVcdTk5MTlc''@;'; put 'put ''dTUxYjRcdTk5MWNcdTk5MzdcdTk5NDJcdTk5NWRcdTk5NjJcdTRiNzBcdTk5YzVcdTRiOWRcdTlhM2NcdTliMGZcdTdhODNcdTliNjlcdTliODFcdTliZGRcdTliZjFcdTliZjRcdTRjNmRcdTljMjBcdTM3NmZcdXsyMWJjMn1cdTlkNDlcdTljM2EiXSxbIjlhYTEiLCJcdTllZmVcdTU2NTBc''@;'; put 'put ''dTlkOTNcdTlkYmRcdTlkYzBcdTlkZmNcdTk0ZjZcdThmYjZcdTllN2JcdTllYWNcdTllYjFcdTllYmRcdTllYzZcdTk0ZGNcdTllZTJcdTllZjFcdTllZjhcdTdhYzhcdTlmNDRcdXsyMDA5NH1cdXsyMDJiN31cdXsyMDNhMH1cdTY5MWFcdTk0YzNcdTU5YWNcdXsyMDRkN31cdTU4NDBcdTk0''@;'; put 'put ''YzFcdTM3YjlcdXsyMDVkNX1cdXsyMDYxNX1cdXsyMDY3Nn1cdXsyMTZiYX1cdTU3NTdcdTcxNzNcdXsyMGFjMn1cdXsyMGFjZH1cdXsyMGJiZn1cdTU0NmFcdXsyZjgzYn1cdXsyMGJjYn1cdTU0OWVcdXsyMGJmYn1cdXsyMGMzYn1cdXsyMGM1M31cdXsyMGM2NX1cdXsyMGM3Y31cdTYwZTdc''@;'; put 'put ''dXsyMGM4ZH1cdTU2N2FcdXsyMGNiNX1cdXsyMGNkZH1cdXsyMGNlZH1cdXsyMGQ2Zn1cdXsyMGRiMn1cdXsyMGRjOH1cdTY5NTVcdTljMmZcdTg3YTVcdXsyMGUwNH1cdXsyMGUwZX1cdXsyMGVkN31cdXsyMGY5MH1cdXsyMGYyZH1cdXsyMGU3M31cdTVjMjBcdXsyMGZiY31cdTVlMGJcdXsy''@;'; put 'put ''MTA1Y31cdXsyMTA0Zn1cdXsyMTA3Nn1cdTY3MWVcdXsyMTA3Yn1cdXsyMTA4OH1cdXsyMTA5Nn1cdTM2NDdcdXsyMTBiZn1cdXsyMTBkM31cdXsyMTEyZn1cdXsyMTEzYn1cdTUzNjRcdTg0YWRcdXsyMTJlM31cdXsyMTM3NX1cdXsyMTMzNn1cdThiODFcdXsyMTU3N31cdXsyMTYxOX1cdXsy''@;'; put 'put ''MTdjM31cdXsyMTdjN31cdTRlNzhcdTcwYmJcdXsyMTgyZH1cdXsyMTk2YX0iXSxbIjliNDAiLCJcdXsyMWEyZH1cdXsyMWE0NX1cdXsyMWMyYX1cdXsyMWM3MH1cdXsyMWNhY31cdXsyMWVjOH1cdTYyYzNcdXsyMWVkNX1cdXsyMWYxNX1cdTcxOThcdTY4NTVcdXsyMjA0NX1cdTY5ZTlcdTM2''@;'; put 'put ''YzhcdXsyMjI3Y31cdXsyMjNkN31cdXsyMjNmYX1cdXsyMjcyYX1cdXsyMjg3MX1cdXsyMjk0Zn1cdTgyZmRcdXsyMjk2N31cdXsyMjk5M31cdXsyMmFkNX1cdTg5YTVcdXsyMmFlOH1cdThmYTBcdXsyMmIwZX1cdTk3YjhcdXsyMmIzZn1cdTk4NDdcdTlhYmRcdXsyMmM0Y30iXSxbIjliNjIi''@;'; put 'put ''LCJcdXsyMmM4OH1cdXsyMmNiN31cdXsyNWJlOH1cdXsyMmQwOH1cdXsyMmQxMn1cdXsyMmRiN31cdXsyMmQ5NX1cdXsyMmU0Mn1cdXsyMmY3NH1cdXsyMmZjY31cdXsyMzAzM31cdXsyMzA2Nn1cdXsyMzMxZn1cdXsyMzNkZX1cdTVmYjFcdTY2NDhcdTY2YmZcdXsyN2E3OX1cdXsyMzU2N31c''@;'; put 'put ''dXsyMzVmM31cdTcyMDFcdXsyNDliYX1cdTc3ZDdcdXsyMzYxYX1cdXsyMzcxNn1cdTdlODdcdXsyMDM0Nn1cdTU4YjVcdTY3MGUiXSxbIjliYTEiLCJcdTY5MThcdXsyM2FhN31cdXsyNzY1N31cdXsyNWZlMn1cdXsyM2UxMX1cdXsyM2ViOX1cdXsyNzVmZX1cdXsyMjA5YX1cdTQ4ZDBcdTRh''@;'; put 'put ''YjhcdXsyNDExOX1cdXsyOGE5YX1cdXsyNDJlZX1cdXsyNDMwZH1cdXsyNDAzYn1cdXsyNDMzNH1cdXsyNDM5Nn1cdXsyNGE0NX1cdXsyMDVjYX1cdTUxZDJcdXsyMDYxMX1cdTU5OWZcdXsyMWVhOH1cdTNiYmVcdXsyM2NmZn1cdXsyNDQwNH1cdXsyNDRkNn1cdTU3ODhcdXsyNDY3NH1cdTM5''@;'; put 'put ''OWJcdXsyNDcyZn1cdXsyODVlOH1cdXsyOTljOX1cdTM3NjJcdXsyMjFjM31cdThiNWVcdXsyOGI0ZX1cdTk5ZDZcdXsyNDgxMn1cdXsyNDhmYn1cdXsyNGExNX1cdTcyMDlcdXsyNGFjMH1cdXsyMGM3OH1cdTU5NjVcdXsyNGVhNX1cdXsyNGY4Nn1cdXsyMDc3OX1cdThlZGFcdXsyNTAyY31c''@;'; put 'put ''dTUyOGZcdTU3M2ZcdTcxNzFcdXsyNTI5OX1cdXsyNTQxOX1cdXsyM2Y0YX1cdXsyNGFhN31cdTU1YmNcdXsyNTQ0Nn1cdXsyNTQ2ZX1cdXsyNmI1Mn1cdTkxZDRcdTM0NzNcdXsyNTUzZn1cdXsyNzYzMn1cdXsyNTU1ZX1cdTQ3MThcdXsyNTU2Mn1cdXsyNTU2Nn1cdXsyNTdjN31cdXsyNDkz''@;'; put 'put ''Zn1cdXsyNTg1ZH1cdTUwNjZcdTM0ZmJcdXsyMzNjY31cdTYwZGVcdXsyNTkwM31cdTQ3N2NcdXsyODk0OH1cdXsyNWFhZX1cdXsyNWI4OX1cdXsyNWMwNn1cdXsyMWQ5MH1cdTU3YTFcdTcxNTFcdTZmYjZcdXsyNjEwMn1cdXsyN2MxMn1cdTkwNTZcdXsyNjFiMn1cdXsyNGY5YX1cdThiNjJc''@;'; put 'put ''dXsyNjQwMn1cdXsyNjQ0YX0iXSxbIjljNDAiLCJcdTVkNWJcdXsyNmJmN31cdThmMzZcdXsyNjQ4NH1cdXsyMTkxY31cdThhZWFcdXsyNDlmNn1cdXsyNjQ4OH1cdXsyM2ZlZn1cdXsyNjUxMn1cdTRiYzBcdXsyNjViZn1cdXsyNjZiNX1cdXsyMjcxYn1cdTk0NjVcdXsyNTdlMX1cdTYxOTVc''@;'; put 'put ''dTVhMjdcdXsyZjhjZH1cdTRmYmJcdTU2YjlcdXsyNDUyMX1cdXsyNjZmY31cdTRlNmFcdXsyNDkzNH1cdTk2NTZcdTZkOGZcdXsyNmNiZH1cdTM2MThcdTg5NzdcdXsyNjc5OX1cdXsyNjg2ZX1cdXsyNjQxMX1cdXsyNjg1ZX1cdTcxZGZcdXsyNjhjN31cdTdiNDJcdXsyOTBjMH1cdXsyMGEx''@;'; put 'put ''MX1cdXsyNjkyNn1cdTkxMDRcdXsyNjkzOX1cdTdhNDVcdTlkZjBcdXsyNjlmYX1cdTlhMjZcdXsyNmEyZH1cdTM2NWZcdXsyNjQ2OX1cdXsyMDAyMX1cdTc5ODNcdXsyNmEzNH1cdXsyNmI1Yn1cdTVkMmNcdXsyMzUxOX1cdTgzY2ZcdXsyNmI5ZH1cdTQ2ZDBcdXsyNmNhNH1cdTc1M2JcdTg4''@;'; put 'put ''NjVcdXsyNmRhZX1cdTU4YjYiXSxbIjljYTEiLCJcdTM3MWNcdXsyMjU4ZH1cdXsyNzA0Yn1cdXsyNzFjZH1cdTNjNTRcdXsyNzI4MH1cdXsyNzI4NX1cdTkyODFcdXsyMjE3YX1cdXsyNzI4Yn1cdTkzMzBcdXsyNzJlNn1cdXsyNDlkMH1cdTZjMzlcdTk0OWZcdXsyNzQ1MH1cdXsyMGVmOH1c''@;'; put 'put ''dTg4MjdcdTg4ZjVcdXsyMjkyNn1cdXsyODQ3M31cdXsyMTdiMX1cdTZlYjhcdXsyNGEyYX1cdXsyMTgyMH1cdTM5YTRcdTM2YjlcdTVjMTBcdTc5ZTNcdTQ1M2ZcdTY2YjZcdXsyOWNhZH1cdXsyOThhNH1cdTg5NDNcdXsyNzdjY31cdXsyNzg1OH1cdTU2ZDZcdTQwZGZcdXsyMTYwYX1cdTM5''@;'; put 'put ''YTFcdXsyMzcyZn1cdXsyODBlOH1cdXsyMTNjNX1cdTcxYWRcdTgzNjZcdXsyNzlkZH1cdXsyOTFhOH1cdTVhNjdcdTRjYjdcdXsyNzBhZn1cdXsyODlhYn1cdXsyNzlmZH1cdXsyN2EwYX1cdXsyN2IwYn1cdXsyN2Q2Nn1cdXsyNDE3YX1cdTdiNDNcdTc5N2VcdXsyODAwOX1cdTZmYjVcdXsy''@;'; put 'put ''YTJkZn1cdTZhMDNcdXsyODMxOH1cdTUzYTJcdXsyNmUwN31cdTkzYmZcdTY4MzZcdTk3NWRcdXsyODE2Zn1cdXsyODAyM31cdXsyNjliNX1cdXsyMTNlZH1cdXsyMzIyZn1cdXsyODA0OH1cdTVkODVcdXsyOGMzMH1cdXsyODA4M31cdTU3MTVcdTk4MjNcdXsyODk0OX1cdTVkYWJcdXsyNDk4''@;'; put 'put ''OH1cdTY1YmVcdTY5ZDVcdTUzZDJcdXsyNGFhNX1cdXsyM2Y4MX1cdTNjMTFcdTY3MzZcdXsyODA5MH1cdXsyODBmNH1cdXsyODEyZX1cdXsyMWZhMX1cdXsyODE0Zn0iXSxbIjlkNDAiLCJcdXsyODE4OX1cdXsyODFhZn1cdXsyODIxYX1cdXsyODMwNn1cdXsyODMyZn1cdXsyODM4YX1cdTM1''@;'; put 'put ''Y2FcdXsyODQ2OH1cdXsyODZhYX1cdTQ4ZmFcdTYzZTZcdXsyODk1Nn1cdTc4MDhcdTkyNTVcdXsyODliOH1cdTQzZjJcdXsyODllN31cdTQzZGZcdXsyODllOH1cdXsyOGI0Nn1cdXsyOGJkNH1cdTU5ZjhcdXsyOGMwOX1cdThmMGJcdXsyOGZjNX1cdXsyOTBlY31cdTdiNTFcdXsyOTExMH1c''@;'; put 'put ''dXsyOTEzY31cdTNkZjdcdXsyOTE1ZX1cdXsyNGFjYX1cdThmZDBcdTcyOGZcdTU2OGJcdXsyOTRlN31cdXsyOTVlOX1cdXsyOTViMH1cdXsyOTViOH1cdXsyOTczMn1cdXsyOThkMX1cdXsyOTk0OX1cdXsyOTk2YX1cdXsyOTljM31cdXsyOWEyOH1cdXsyOWIwZX1cdXsyOWQ1YX1cdXsyOWQ5''@;'; put 'put ''Yn1cdTdlOWZcdXsyOWVmOH1cdXsyOWYyM31cdTRjYTRcdTk1NDdcdXsyYTI5M31cdTcxYTJcdXsyYTJmZn1cdTRkOTFcdTkwMTJcdXsyYTVjYn1cdTRkOWNcdXsyMGM5Y31cdThmYmVcdTU1YzEiXSxbIjlkYTEiLCJcdThmYmFcdXsyMjRiMH1cdThmYjlcdXsyNGE5M31cdTQ1MDlcdTdlN2Zc''@;'; put 'put ''dTZmNTZcdTZhYjFcdTRlZWFcdTM0ZTRcdXsyOGIyY31cdXsyNzg5ZH1cdTM3M2FcdThlODBcdXsyMTdmNX1cdXsyODAyNH1cdXsyOGI2Y31cdXsyOGI5OX1cdXsyN2EzZX1cdXsyNjZhZn1cdTNkZWJcdXsyNzY1NX1cdXsyM2NiN31cdXsyNTYzNX1cdXsyNTk1Nn1cdTRlOWFcdXsyNWU4MX1c''@;'; put 'put ''dXsyNjI1OH1cdTU2YmZcdXsyMGU2ZH1cdThlMGVcdTViNmRcdXsyM2U4OH1cdXsyNGM5ZX1cdTYzZGVcdTYyZDBcdXsyMTdmNn1cdXsyMTg3Yn1cdTY1MzBcdTU2MmRcdXsyNWM0YX1cdTU0MWFcdXsyNTMxMX1cdTNkYzZcdXsyOWQ5OH1cdTRjN2RcdTU2MjJcdTU2MWVcdTdmNDlcdXsyNWVk''@;'; put 'put ''OH1cdTU5NzVcdXsyM2Q0MH1cdTg3NzBcdTRlMWNcdXsyMGZlYX1cdXsyMGQ0OX1cdXsyMzZiYX1cdTgxMTdcdTlkNWVcdThkMThcdTc2M2JcdTljNDVcdTc2NGVcdTc3YjlcdTkzNDVcdTU0MzJcdTgxNDhcdTgyZjdcdTU2MjVcdTgxMzJcdTg0MThcdTgwYmRcdTU1ZWFcdTc5NjJcdTU2NDNc''@;'; put 'put ''dTU0MTZcdXsyMGU5ZH1cdTM1Y2VcdTU2MDVcdTU1ZjFcdTY2ZjFcdXsyODJlMn1cdTM2MmRcdTc1MzRcdTU1ZjBcdTU1YmFcdTU0OTdcdTU1NzJcdXsyMGM0MX1cdXsyMGM5Nn1cdTVlZDBcdXsyNTE0OH1cdXsyMGU3Nn1cdXsyMmM2Mn0iXSxbIjllNDAiLCJcdXsyMGVhMn1cdTllYWJcdTdk''@;'; put 'put ''NWFcdTU1ZGVcdXsyMTA3NX1cdTYyOWRcdTk3NmRcdTU0OTRcdThjY2RcdTcxZjZcdTkxNzZcdTYzZmNcdTYzYjlcdTYzZmVcdTU1NjlcdXsyMmI0M31cdTljNzJcdXsyMmViM31cdTUxOWFcdTM0ZGZcdXsyMGRhN31cdTUxYTdcdTU0NGRcdTU1MWVcdTU1MTNcdTc2NjZcdThlMmRcdXsyNjg4''@;'; put 'put ''YX1cdTc1YjFcdTgwYjZcdTg4MDRcdTg3ODZcdTg4YzdcdTgxYjZcdTg0MWNcdXsyMTBjMX1cdTQ0ZWNcdTczMDRcdXsyNDcwNn1cdTViOTBcdTgzMGJcdXsyNjg5M31cdTU2N2JcdXsyMjZmNH1cdXsyN2QyZn1cdXsyNDFhM31cdXsyN2Q3M31cdXsyNmVkMH1cdXsyNzJiNn1cdTkxNzBcdXsy''@;'; put 'put ''MTFkOX1cdTkyMDhcdXsyM2NmY31cdXsyYTZhOX1cdXsyMGVhY31cdXsyMGVmOX1cdTcyNjZcdXsyMWNhMn1cdTQ3NGVcdXsyNGZjMn1cdXsyN2ZmOX1cdXsyMGZlYn1cdTQwZmEiXSxbIjllYTEiLCJcdTljNWRcdTY1MWZcdXsyMmRhMH1cdTQ4ZjNcdXsyNDdlMH1cdXsyOWQ3Y31cdXsyMGZl''@;'; put 'put ''Y31cdXsyMGUwYX1cdTYwNjJcdXsyNzVhM31cdXsyMGZlZH0iXSxbIjllYWQiLCJcdXsyNjA0OH1cdXsyMTE4N31cdTcxYTNcdTdlOGVcdTlkNTBcdTRlMWFcdTRlMDRcdTM1NzdcdTViMGRcdTZjYjJcdTUzNjdcdTM2YWNcdTM5ZGNcdTUzN2RcdTM2YTVcdXsyNDYxOH1cdTU4OWFcdXsyNGI2''@;'; put 'put ''ZX1cdTgyMmRcdTU0NGJcdTU3YWFcdXsyNWE5NX1cdXsyMDk3OX0iXSxbIjllYzUiLCJcdTNhNTJcdXsyMjQ2NX1cdTczNzRcdXsyOWVhY31cdTRkMDlcdTliZWRcdXsyM2NmZX1cdXsyOWYzMH1cdTRjNWJcdXsyNGZhOX1cdXsyOTU5ZX1cdXsyOWZkZX1cdTg0NWNcdXsyM2RiNn1cdXsyNzJi''@;'; put 'put ''Mn1cdXsyNjdiM31cdXsyMzcyMH1cdTYzMmVcdTdkMjVcdXsyM2VmN31cdXsyM2UyY31cdTNhMmFcdTkwMDhcdTUyY2NcdTNlNzRcdTM2N2FcdTQ1ZTlcdXsyMDQ4ZX1cdTc2NDBcdTVhZjBcdXsyMGViNn1cdTc4N2FcdXsyN2YyZX1cdTU4YTdcdTQwYmZcdTU2N2NcdTliOGJcdTVkNzRcdTc2''@;'; put 'put ''NTRcdXsyYTQzNH1cdTllODVcdTRjZTFcdTc1ZjlcdTM3ZmJcdTYxMTlcdXsyMzBkYX1cdXsyNDNmMn0iXSxbIjllZjUiLCJcdTU2NWRcdXsyMTJhOX1cdTU3YTdcdXsyNDk2M31cdXsyOWUwNn1cdTUyMzRcdXsyNzBhZX1cdTM1YWRcdTZjNGFcdTlkN2MiXSxbIjlmNDAiLCJcdTdjNTZcdTli''@;'; put 'put ''MzlcdTU3ZGVcdXsyMTc2Y31cdTVjNTNcdTY0ZDNcdXsyOTRkMH1cdXsyNjMzNX1cdXsyNzE2NH1cdTg2YWRcdXsyMGQyOH1cdXsyNmQyMn1cdXsyNGFlMn1cdXsyMGQ3MX0iXSxbIjlmNGYiLCJcdTUxZmVcdXsyMWYwZn1cdTVkOGVcdTk3MDNcdXsyMWRkMX1cdTllODFcdTkwNGNcdTdiMWZc''@;'; put 'put ''dTliMDJcdTVjZDFcdTdiYTNcdTYyNjhcdTYzMzVcdTlhZmZcdTdiY2ZcdTliMmFcdTdjN2VcdTliMmVcdTdjNDJcdTdjODZcdTljMTVcdTdiZmNcdTliMDlcdTlmMTdcdTljMWJcdXsyNDkzZX1cdTlmNWFcdTU1NzNcdTViYzNcdTRmZmRcdTllOThcdTRmZjJcdTUyNjBcdTNlMDZcdTUyZDFc''@;'; put 'put ''dTU3NjdcdTUwNTZcdTU5YjdcdTVlMTJcdTk3YzhcdTlkYWJcdThmNWNcdTU0NjlcdTk3YjRcdTk5NDBcdTk3YmFcdTUzMmNcdTYxMzAiXSxbIjlmYTEiLCJcdTY5MmNcdTUzZGFcdTljMGFcdTlkMDJcdTRjM2JcdTk2NDFcdTY5ODBcdTUwYTZcdTc1NDZcdXsyMTc2ZH1cdTk5ZGFcdTUyNzMi''@;'; put 'put ''XSxbIjlmYWUiLCJcdTkxNTlcdTk2ODFcdTkxNWMiXSxbIjlmYjIiLCJcdTkxNTFcdXsyOGU5N31cdTYzN2ZcdXsyNmQyM31cdTZhY2FcdTU2MTFcdTkxOGVcdTc1N2FcdTYyODVcdXsyMDNmY31cdTczNGZcdTdjNzBcdXsyNWMyMX1cdXsyM2NmZH0iXSxbIjlmYzEiLCJcdXsyNDkxOX1cdTc2''@;'; put 'put ''ZDZcdTliOWRcdTRlMmFcdXsyMGNkNH1cdTgzYmVcdTg4NDIiXSxbIjlmYzkiLCJcdTVjNGFcdTY5YzBcdTUwZWRcdTU3N2FcdTUyMWZcdTVkZjVcdTRlY2VcdTZjMzFcdXsyMDFmMn1cdTRmMzlcdTU0OWNcdTU0ZGFcdTUyOWFcdThkODJcdTM1ZmVcdTVmMGNcdTM1ZjMiXSxbIjlmZGIiLCJc''@;'; put 'put ''dTZiNTJcdTkxN2NcdTlmYTVcdTliOTdcdTk4MmVcdTk4YjRcdTlhYmFcdTllYThcdTllODRcdTcxN2FcdTdiMTQiXSxbIjlmZTciLCJcdTZiZmFcdTg4MThcdTdmNzgiXSxbIjlmZWIiLCJcdTU2MjBcdXsyYTY0YX1cdThlNzdcdTlmNTMiXSxbIjlmZjAiLCJcdThkZDRcdThlNGZcdTllMWNc''@;'; put 'put ''dThlMDFcdTYyODJcdXsyODM3ZH1cdThlMjhcdThlNzVcdTdhZDNcdXsyNGE3N31cdTdhM2VcdTc4ZDhcdTZjZWFcdThhNjdcdTc2MDciXSxbImEwNDAiLCJcdXsyOGE1YX1cdTlmMjZcdTZjY2VcdTg3ZDZcdTc1YzNcdXsyYTJiMn1cdTc4NTNcdXsyZjg0MH1cdThkMGNcdTcyZTJcdTczNzFc''@;'; put 'put ''dThiMmRcdTczMDJcdTc0ZjFcdThjZWJcdXsyNGFiYn1cdTg2MmZcdTVmYmFcdTg4YTBcdTQ0YjciXSxbImEwNTUiLCJcdXsyMTgzYn1cdXsyNmUwNX0iXSxbImEwNTgiLCJcdThhN2VcdXsyMjUxYn0iXSxbImEwNWIiLCJcdTYwZmRcdTc2NjdcdTlhZDdcdTlkNDRcdTkzNmVcdTliOGZcdTg3''@;'; put 'put ''ZjUiXSxbImEwNjMiLCJcdTg4MGZcdThjZjdcdTczMmNcdTk3MjFcdTliYjBcdTM1ZDZcdTcyYjJcdTRjMDdcdTdjNTFcdTk5NGFcdXsyNjE1OX1cdTYxNTlcdTRjMDRcdTllOTZcdTYxN2QiXSxbImEwNzMiLCJcdTU3NWZcdTYxNmZcdTYyYTZcdTYyMzlcdTYyY2VcdTNhNWNcdTYxZTJcdTUz''@;'; put 'put ''YWFcdXsyMzNmNX1cdTYzNjRcdTY4MDJcdTM1ZDIiXSxbImEwYTEiLCJcdTVkNTdcdXsyOGJjMn1cdThmZGFcdXsyOGUzOX0iXSxbImEwYTYiLCJcdTUwZDlcdXsyMWQ0Nn1cdTc5MDZcdTUzMzJcdTk2MzhcdXsyMGYzYn1cdTQwNjUiXSxbImEwYWUiLCJcdTc3ZmUiXSxbImEwYjAiLCJcdTdj''@;'; put 'put ''YzJcdXsyNWYxYX1cdTdjZGFcdTdhMmRcdTgwNjZcdTgwNjNcdTdkNGRcdTc1MDVcdTc0ZjJcdTg5OTRcdTgyMWFcdTY3MGNcdTgwNjJcdXsyNzQ4Nn1cdTgwNWJcdTc0ZjBcdTgxMDNcdTc3MjRcdTg5ODlcdXsyNjdjY31cdTc1NTNcdXsyNmVkMX1cdTg3YTlcdTg3Y2VcdTgxYzhcdTg3OGNc''@;'; put 'put ''dThhNDlcdThjYWRcdThiNDNcdTc3MmJcdTc0ZjhcdTg0ZGFcdTM2MzVcdTY5YjJcdThkYTYiXSxbImEwZDQiLCJcdTg5YTlcdTc0NjhcdTZkYjlcdTg3YzFcdXsyNDAxMX1cdTc0ZTdcdTNkZGJcdTcxNzZcdTYwYTRcdTYxOWNcdTNjZDFcdTcxNjJcdTYwNzciXSxbImEwZTIiLCJcdTdmNzFc''@;'; put 'put ''dXsyOGIyZH1cdTcyNTBcdTYwZTlcdTRiN2VcdTUyMjBcdTNjMThcdXsyM2NjN31cdXsyNWVkN31cdXsyNzY1Nn1cdXsyNTUzMX1cdXsyMTk0NH1cdXsyMTJmZX1cdXsyOTkwM31cdXsyNmRkY31cdXsyNzBhZH1cdTVjYzFcdXsyNjFhZH1cdXsyOGEwZn1cdXsyMzY3N31cdXsyMDBlZX1cdXsy''@;'; put 'put ''Njg0Nn1cdXsyNGYwZX1cdTQ1NjJcdTViMWZcdXsyNjM0Y31cdTlmNTBcdTllYTZcdXsyNjI2Yn0iXSxbImEzYzAiLCJcdTI0MDAiLDMxLCJcdTI0MjEiXSxbImM2YTEiLCJcdTI0NjAiLDksIlx1MjQ3NCIsOSwiXHUyMTcwIiw5LCJcdTRlMzZcdTRlM2ZcdTRlODVcdTRlYTBcdTUxODJcdTUx''@;'; put 'put ''OTZcdTUxYWJcdTUyZjlcdTUzMzhcdTUzNjlcdTUzYjZcdTU5MGFcdTViODBcdTVkZGJcdTJmMzNcdTVlN2ZcdTVlZjRcdTVmNTBcdTVmNjFcdTY1MzRcdTY1ZTBcdTc1OTJcdTc2NzZcdThmYjVcdTk2YjZceGE4XHUwMmM2XHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUz''@;'; put 'put ''MDA1XHUzMDA2XHUzMDA3XHUzMGZjXHVmZjNiXHVmZjNkXHUyNzNkXHUzMDQxIiwyM10sWyJjNzQwIiwiXHUzMDU5Iiw1OCwiXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0Il0sWyJjN2ExIiwiXHUzMGE1Iiw4MSwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDRdLFsiYzg0MCIsIlx1MDQxYiIs''@;'; put 'put ''MjYsIlx1MDQ1MVx1MDQzNiIsMjUsIlx1MjFlN1x1MjFiOFx1MjFiOVx1MzFjZlx1ezIwMGNjfVx1NGU1YVx1ezIwMDhhfVx1NTIwMlx1NDQ5MSJdLFsiYzhhMSIsIlx1OWZiMFx1NTE4OFx1OWZiMVx1ezI3NjA3fSJdLFsiYzhjZCIsIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1''@;'; put 'put ''MjExNlx1MjEyMVx1MzA5Ylx1MzA5Y1x1MmU4MFx1MmU4NFx1MmU4Nlx1MmU4N1x1MmU4OFx1MmU4YVx1MmU4Y1x1MmU4ZFx1MmU5NVx1MmU5Y1x1MmU5ZFx1MmVhNVx1MmVhN1x1MmVhYVx1MmVhY1x1MmVhZVx1MmViNlx1MmViY1x1MmViZVx1MmVjNlx1MmVjYVx1MmVjY1x1MmVjZFx1MmVj''@;'; put 'put ''Zlx1MmVkNlx1MmVkN1x1MmVkZVx1MmVlMyJdLFsiYzhmNSIsIlx1MDI4M1x1MDI1MFx1MDI1Ylx1MDI1NFx1MDI3NVx1MDE1M1x4ZjhcdTAxNGJcdTAyOGFcdTAyNmEiXSxbImY5ZmUiLCJcdWZmZWQiXSxbImZhNDAiLCJcdXsyMDU0N31cdTkyZGJcdXsyMDVkZn1cdXsyM2ZjNX1cdTg1NGNc''@;'; put 'put ''dTQyYjVcdTczZWZcdTUxYjVcdTM2NDlcdXsyNDk0Mn1cdXsyODllNH1cdTkzNDRcdXsyMTlkYn1cdTgyZWVcdXsyM2NjOH1cdTc4M2NcdTY3NDRcdTYyZGZcdXsyNDkzM31cdXsyODlhYX1cdXsyMDJhMH1cdXsyNmJiM31cdXsyMTMwNX1cdTRmYWJcdXsyMjRlZH1cdTUwMDhcdXsyNmQyOX1c''@;'; put 'put ''dXsyN2E4NH1cdXsyMzYwMH1cdXsyNGFiMX1cdXsyMjUxM31cdTUwMjlcdXsyMDM3ZX1cdTVmYTRcdXsyMDM4MH1cdXsyMDM0N31cdTZlZGJcdXsyMDQxZn1cdTUwN2RcdTUxMDFcdTM0N2FcdTUxMGVcdTk4NmNcdTM3NDNcdTg0MTZcdXsyNDlhNH1cdXsyMDQ4N31cdTUxNjBcdXsyMzNiNH1c''@;'; put 'put ''dTUxNmFcdXsyMGJmZn1cdXsyMjBmY31cdXsyMDJlNX1cdXsyMjUzMH1cdXsyMDU4ZX1cdXsyMzIzM31cdXsyMTk4M31cdTViODJcdTg3N2RcdXsyMDViM31cdXsyM2M5OX1cdTUxYjJcdTUxYjgiXSxbImZhYTEiLCJcdTlkMzRcdTUxYzlcdTUxY2ZcdTUxZDFcdTNjZGNcdTUxZDNcdXsyNGFh''@;'; put 'put ''Nn1cdTUxYjNcdTUxZTJcdTUzNDJcdTUxZWRcdTgzY2RcdTY5M2VcdXsyMzcyZH1cdTVmN2JcdTUyMGJcdTUyMjZcdTUyM2NcdTUyYjVcdTUyNTdcdTUyOTRcdTUyYjlcdTUyYzVcdTdjMTVcdTg1NDJcdTUyZTBcdTg2MGRcdXsyNmIxM31cdTUzMDVcdXsyOGFkZX1cdTU1NDlcdTZlZDlcdXsy''@;'; put 'put ''M2Y4MH1cdXsyMDk1NH1cdXsyM2ZlY31cdTUzMzNcdTUzNDRcdXsyMGJlMn1cdTZjY2JcdXsyMTcyNn1cdTY4MWJcdTczZDVcdTYwNGFcdTNlYWFcdTM4Y2NcdXsyMTZlOH1cdTcxZGRcdTQ0YTJcdTUzNmRcdTUzNzRcdXsyODZhYn1cdTUzN2VcdTUzN2ZcdXsyMTU5Nn1cdXsyMTYxM31cdTc3''@;'; put 'put ''ZTZcdTUzOTNcdXsyOGE5Yn1cdTUzYTBcdTUzYWJcdTUzYWVcdTczYTdcdXsyNTc3Mn1cdTNmNTlcdTczOWNcdTUzYzFcdTUzYzVcdTZjNDlcdTRlNDlcdTU3ZmVcdTUzZDlcdTNhYWJcdXsyMGI4Zn1cdTUzZTBcdXsyM2ZlYn1cdXsyMmRhM31cdTUzZjZcdXsyMGM3N31cdTU0MTNcdTcwNzlc''@;'; put 'put ''dTU1MmJcdTY2NTdcdTZkNWJcdTU0NmRcdXsyNmI1M31cdXsyMGQ3NH1cdTU1NWRcdTU0OGZcdTU0YTRcdTQ3YTZcdXsyMTcwZH1cdXsyMGVkZH1cdTNkYjRcdXsyMGQ0ZH0iXSxbImZiNDAiLCJcdXsyODliY31cdXsyMjY5OH1cdTU1NDdcdTRjZWRcdTU0MmZcdTc0MTdcdTU1ODZcdTU1YTlc''@;'; put 'put ''dTU2MDVcdXsyMThkN31cdXsyNDAzYX1cdTQ1NTJcdXsyNDQzNX1cdTY2YjNcdXsyMTBiNH1cdTU2MzdcdTY2Y2RcdXsyMzI4YX1cdTY2YTRcdTY2YWRcdTU2NGRcdTU2NGZcdTc4ZjFcdTU2ZjFcdTk3ODdcdTUzZmVcdTU3MDBcdTU2ZWZcdTU2ZWRcdXsyOGI2Nn1cdTM2MjNcdXsyMTI0Zn1c''@;'; put 'put ''dTU3NDZcdXsyNDFhNX1cdTZjNmVcdTcwOGJcdTU3NDJcdTM2YjFcdXsyNmM3ZX1cdTU3ZTZcdXsyMTQxNn1cdTU4MDNcdXsyMTQ1NH1cdXsyNDM2M31cdTU4MjZcdXsyNGJmNX1cdTU4NWNcdTU4YWFcdTM1NjFcdTU4ZTBcdTU4ZGNcdXsyMTIzY31cdTU4ZmJcdTViZmZcdTU3NDNcdXsyYTE1''@;'; put 'put ''MH1cdXsyNDI3OH1cdTkzZDNcdTM1YTFcdTU5MWZcdTY4YTZcdTM2YzNcdTZlNTkiXSxbImZiYTEiLCJcdXsyMTYzZX1cdTVhMjRcdTU1NTNcdXsyMTY5Mn1cdTg1MDVcdTU5YzlcdXsyMGQ0ZX1cdXsyNmM4MX1cdXsyNmQyYX1cdXsyMTdkY31cdTU5ZDlcdXsyMTdmYn1cdXsyMTdiMn1cdXsy''@;'; put 'put ''NmRhNn1cdTZkNzFcdXsyMTgyOH1cdXsyMTZkNX1cdTU5ZjlcdXsyNmU0NX1cdTVhYWJcdTVhNjNcdTM2ZTZcdXsyNDlhOX1cdTVhNzdcdTM3MDhcdTVhOTZcdTc0NjVcdTVhZDNcdXsyNmZhMX1cdXsyMjU1NH1cdTNkODVcdXsyMTkxMX1cdTM3MzJcdXsyMTZiOH1cdTVlODNcdTUyZDBcdTVi''@;'; put 'put ''NzZcdTY1ODhcdTViN2NcdXsyN2EwZX1cdTQwMDRcdTQ4NWRcdXsyMDIwNH1cdTViZDVcdTYxNjBcdXsyMWEzNH1cdXsyNTljY31cdXsyMDVhNX1cdTViZjNcdTViOWRcdTRkMTBcdTVjMDVcdXsyMWI0NH1cdTVjMTNcdTczY2VcdTVjMTRcdXsyMWNhNX1cdXsyNmIyOH1cdTVjNDlcdTQ4ZGRc''@;'; put 'put ''dTVjODVcdTVjZTlcdTVjZWZcdTVkOGJcdXsyMWRmOX1cdXsyMWUzN31cdTVkMTBcdTVkMThcdTVkNDZcdXsyMWVhNH1cdTVjYmFcdTVkZDdcdTgyZmNcdTM4MmRcdXsyNDkwMX1cdXsyMjA0OX1cdXsyMjE3M31cdTgyODdcdTM4MzZcdTNiYzJcdTVlMmVcdTZhOGFcdTVlNzVcdTVlN2FcdXsy''@;'; put 'put ''NDRiY31cdXsyMGNkM31cdTUzYTZcdTRlYjdcdTVlZDBcdTUzYThcdXsyMTc3MX1cdTVlMDlcdTVlZjRcdXsyODQ4Mn0iXSxbImZjNDAiLCJcdTVlZjlcdTVlZmJcdTM4YTBcdTVlZmNcdTY4M2VcdTk0MWJcdTVmMGRcdXsyMDFjMX1cdXsyZjg5NH1cdTNhZGVcdTQ4YWVcdXsyMTMzYX1cdTVm''@;'; put 'put ''M2FcdXsyNjg4OH1cdXsyMjNkMH1cdTVmNThcdXsyMjQ3MX1cdTVmNjNcdTk3YmRcdXsyNmU2ZX1cdTVmNzJcdTkzNDBcdXsyOGEzNn1cdTVmYTdcdTVkYjZcdTNkNWZcdXsyNTI1MH1cdXsyMWY2YX1cdXsyNzBmOH1cdXsyMjY2OH1cdTkxZDZcdXsyMDI5ZX1cdXsyOGEyOX1cdTYwMzFcdTY2''@;'; put 'put ''ODVcdXsyMTg3N31cdTM5NjNcdTNkYzdcdTM2MzlcdTU3OTBcdXsyMjdiNH1cdTc5NzFcdTNlNDBcdTYwOWVcdTYwYTRcdTYwYjNcdXsyNDk4Mn1cdXsyNDk4Zn1cdXsyN2E1M31cdTc0YTRcdTUwZTFcdTVhYTBcdTYxNjRcdTg0MjRcdTYxNDJcdXsyZjhhNn1cdXsyNmVkMn1cdTYxODFcdTUx''@;'; put 'put ''ZjRcdXsyMDY1Nn1cdTYxODdcdTViYWFcdXsyM2ZiN30iXSxbImZjYTEiLCJcdXsyMjg1Zn1cdTYxZDNcdXsyOGI5ZH1cdXsyOTk1ZH1cdTYxZDBcdTM5MzJcdXsyMjk4MH1cdXsyMjhjMX1cdTYwMjNcdTYxNWNcdTY1MWVcdTYzOGJcdXsyMDExOH1cdTYyYzVcdXsyMTc3MH1cdTYyZDVcdXsy''@;'; put 'put ''MmUwZH1cdTYzNmNcdXsyNDlkZn1cdTNhMTdcdTY0MzhcdTYzZjhcdXsyMTM4ZX1cdXsyMTdmY31cdTY0OTBcdTZmOGFcdXsyMmUzNn1cdTk4MTRcdXsyNDA4Y31cdXsyNTcxZH1cdTY0ZTFcdTY0ZTVcdTk0N2JcdTNhNjZcdTY0M2FcdTNhNTdcdTY1NGRcdTZmMTZcdXsyNGEyOH1cdXsyNGEy''@;'; put 'put ''M31cdTY1ODVcdTY1NmRcdTY1NWZcdXsyMzA3ZX1cdTY1YjVcdXsyNDk0MH1cdTRiMzdcdTY1ZDFcdTQwZDhcdXsyMTgyOX1cdTY1ZTBcdTY1ZTNcdTVmZGZcdXsyMzQwMH1cdTY2MThcdXsyMzFmN31cdXsyMzFmOH1cdTY2NDRcdXsyMzFhNH1cdXsyMzFhNX1cdTY2NGJcdXsyMGU3NX1cdTY2''@;'; put 'put ''NjdcdXsyNTFlNn1cdTY2NzNcdTY2NzRcdXsyMWUzZH1cdXsyMzIzMX1cdXsyODVmNH1cdXsyMzFjOH1cdXsyNTMxM31cdTc3YzVcdXsyMjhmN31cdTk5YTRcdTY3MDJcdXsyNDM5Y31cdXsyNGEyMX1cdTNiMmJcdTY5ZmFcdXsyMzdjMn1cdTY3NWVcdTY3NjdcdTY3NjJcdXsyNDFjZH1cdXsy''@;'; put 'put ''OTBlZH1cdTY3ZDdcdTQ0ZTlcdTY4MjJcdTZlNTBcdTkyM2NcdTY4MDFcdXsyMzNlNn1cdXsyNmRhMH1cdTY4NWQiXSxbImZkNDAiLCJcdXsyMzQ2Zn1cdTY5ZTFcdTZhMGJcdXsyOGFkZn1cdTY5NzNcdTY4YzNcdXsyMzVjZH1cdTY5MDFcdTY5MDBcdTNkMzJcdTNhMDFcdXsyMzYzY31cdTNi''@;'; put 'put ''ODBcdTY3YWNcdTY5NjFcdXsyOGE0YX1cdTQyZmNcdTY5MzZcdTY5OThcdTNiYTFcdXsyMDNjOX1cdTgzNjNcdTUwOTBcdTY5ZjlcdXsyMzY1OX1cdXsyMjEyYX1cdTZhNDVcdXsyMzcwM31cdTZhOWRcdTNiZjNcdTY3YjFcdTZhYzhcdXsyOTE5Y31cdTNjMGRcdTZiMWRcdXsyMDkyM31cdTYw''@;'; put 'put ''ZGVcdTZiMzVcdTZiNzRcdXsyMjdjZH1cdTZlYjVcdXsyM2FkYn1cdXsyMDNiNX1cdXsyMTk1OH1cdTM3NDBcdTU0MjFcdXsyM2I1YX1cdTZiZTFcdXsyM2VmY31cdTZiZGNcdTZjMzdcdXsyMjQ4Yn1cdXsyNDhmMX1cdXsyNmI1MX1cdTZjNWFcdTgyMjZcdTZjNzlcdXsyM2RiY31cdTQ0YzVc''@;'; put 'put ''dXsyM2RiZH1cdXsyNDFhNH1cdXsyNDkwY31cdXsyNDkwMH0iXSxbImZkYTEiLCJcdXsyM2NjOX1cdTM2ZTVcdTNjZWJcdXsyMGQzMn1cdTliODNcdXsyMzFmOX1cdXsyMjQ5MX1cdTdmOGZcdTY4MzdcdXsyNmQyNX1cdXsyNmRhMX1cdXsyNmRlYn1cdTZkOTZcdTZkNWNcdTZlN2NcdTZmMDRc''@;'; put 'put ''dXsyNDk3Zn1cdXsyNDA4NX1cdXsyNmU3Mn1cdTg1MzNcdXsyNmY3NH1cdTUxYzdcdTZjOWNcdTZlMWRcdTg0MmVcdXsyOGIyMX1cdTZlMmZcdXsyM2UyZn1cdTc0NTNcdXsyM2Y4Mn1cdTc5Y2NcdTZlNGZcdTVhOTFcdXsyMzA0Yn1cdTZmZjhcdTM3MGRcdTZmOWRcdXsyM2UzMH1cdTZlZmFc''@;'; put 'put ''dXsyMTQ5N31cdXsyNDAzZH1cdTQ1NTVcdTkzZjBcdTZmNDRcdTZmNWNcdTNkNGVcdTZmNzRcdXsyOTE3MH1cdTNkM2JcdTZmOWZcdXsyNDE0NH1cdTZmZDNcdXsyNDA5MX1cdXsyNDE1NX1cdXsyNDAzOX1cdXsyM2ZmMH1cdXsyM2ZiNH1cdXsyNDEzZn1cdTUxZGZcdXsyNDE1Nn1cdXsyNDE1''@;'; put 'put ''N31cdXsyNDE0MH1cdXsyNjFkZH1cdTcwNGJcdTcwN2VcdTcwYTdcdTcwODFcdTcwY2NcdTcwZDVcdTcwZDZcdTcwZGZcdTQxMDRcdTNkZThcdTcxYjRcdTcxOTZcdXsyNDI3N31cdTcxMmJcdTcxNDVcdTVhODhcdTcxNGFcdTcxNmVcdTVjOWNcdXsyNDM2NX1cdTcxNGZcdTkzNjJcdXsyNDJj''@;'; put 'put ''MX1cdTcxMmNcdXsyNDQ1YX1cdXsyNGEyN31cdXsyNGEyMn1cdTcxYmFcdXsyOGJlOH1cdTcwYmRcdTcyMGUiXSxbImZlNDAiLCJcdTk0NDJcdTcyMTVcdTU5MTFcdTk0NDNcdTcyMjRcdTkzNDFcdXsyNTYwNX1cdTcyMmVcdTcyNDBcdXsyNDk3NH1cdTY4YmRcdTcyNTVcdTcyNTdcdTNlNTVc''@;'; put 'put ''dXsyMzA0NH1cdTY4MGRcdTZmM2RcdTcyODJcdTczMmFcdTczMmJcdXsyNDgyM31cdXsyODgyYn1cdTQ4ZWRcdXsyODgwNH1cdTczMjhcdTczMmVcdTczY2ZcdTczYWFcdXsyMGMzYX1cdXsyNmEyZX1cdTczYzlcdTc0NDlcdXsyNDFlMn1cdXsyMTZlN31cdXsyNGEyNH1cdTY2MjNcdTM2YzVc''@;'; put 'put ''dXsyNDliN31cdXsyNDk4ZH1cdXsyNDlmYn1cdTczZjdcdTc0MTVcdTY5MDNcdXsyNGEyNn1cdTc0MzlcdXsyMDVjM31cdTNlZDdcdTc0NWNcdXsyMjhhZH1cdTc0NjBcdXsyOGViMn1cdTc0NDdcdTczZTRcdTc0NzZcdTgzYjlcdTc0NmNcdTM3MzBcdTc0NzRcdTkzZjFcdTZhMmNcdTc0ODJc''@;'; put 'put ''dTQ5NTNcdXsyNGE4Y30iXSxbImZlYTEiLCJcdXsyNDE1Zn1cdXsyNGE3OX1cdXsyOGI4Zn1cdTViNDZcdXsyOGMwM31cdXsyMTg5ZX1cdTc0YzhcdXsyMTk4OH1cdTc1MGVcdTc0ZTlcdTc1MWVcdXsyOGVkOX1cdXsyMWE0Yn1cdTViZDdcdXsyOGVhY31cdTkzODVcdTc1NGRcdTc1NGFcdTc1''@;'; put 'put ''NjdcdTc1NmVcdXsyNGY4Mn1cdTNmMDRcdXsyNGQxM31cdTc1OGVcdTc0NWRcdTc1OWVcdTc1YjRcdTc2MDJcdTc2MmNcdTc2NTFcdTc2NGZcdTc2NmZcdTc2NzZcdXsyNjNmNX1cdTc2OTBcdTgxZWZcdTM3ZjhcdXsyNjkxMX1cdXsyNjkwZX1cdTc2YTFcdTc2YTVcdTc2YjdcdTc2Y2NcdXsy''@;'; put 'put ''NmY5Zn1cdTg0NjJcdXsyNTA5ZH1cdXsyNTE3ZH1cdXsyMWUxY31cdTc3MWVcdTc3MjZcdTc3NDBcdTY0YWZcdXsyNTIyMH1cdTc3NThcdXsyMzJhY31cdTc3YWZcdXsyODk2NH1cdXsyODk2OH1cdXsyMTZjMX1cdTc3ZjRcdTc4MDlcdXsyMTM3Nn1cdXsyNGExMn1cdTY4Y2FcdTc4YWZcdTc4''@;'; put 'put ''YzdcdTc4ZDNcdTk2YTVcdTc5MmVcdXsyNTVlMH1cdTc4ZDdcdTc5MzRcdTc4YjFcdXsyNzYwY31cdThmYjhcdTg4ODRcdXsyOGIyYn1cdXsyNjA4M31cdXsyMjYxY31cdTc5ODZcdTg5MDBcdTY5MDJcdTc5ODBcdXsyNTg1N31cdTc5OWRcdXsyN2IzOX1cdTc5M2NcdTc5YTlcdTZlMmFcdXsy''@;'; put 'put ''NzEyNn1cdTNlYThcdTc5YzZcdXsyOTEwZH1cdTc5ZDQiXV0nKX0sNzQ0ODg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3LCJcdTIwYWMiXSxbIjgxNDAiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRl''@;'; put 'put ''MTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRc''@;'; put 'put ''dTRlNjVcdTRlNjdcdTRlNjhcdTRlNmEiLDUsIlx1NGU3Mlx1NGU3NCIsOSwiXHU0ZTdmIiw2LCJcdTRlODdcdTRlOGEiXSxbIjgxODAiLCJcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZc''@;'; put 'put ''dTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRl''@;'; put 'put ''ZmNcdTRlZmVcdTRmMDBcdTRmMDIiLDYsIlx1NGYwYlx1NGYwY1x1NGYxMiIsNCwiXHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlIiw0LCJcdTRmNDRcdTRmNDVcdTRm''@;'; put 'put ''NDciLDUsIlx1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1''@;'; put 'put ''NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMiJdLFsiODI0MCIsIlx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMCIsNCwiXHU0ZmI2Iiw4LCJcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZc''@;'; put 'put ''dTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDIiLDQsIlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZm''@;'; put 'put ''ZiIsMTFdLFsiODI4MCIsIlx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZiIsMTAsIlx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0''@;'; put 'put ''Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MCIsNCwiXHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkIiw3LCJcdTUwNjYiLDUsIlx1NTA2ZCIsOCwiXHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgz''@;'; put 'put ''XHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlIiwyMCwiXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkIiw0LCJcdTUwYjMiLDYsIlx1NTBiYyJdLFsiODM0MCIsIlx1NTBiZCIsMTcsIlx1NTBkMCIsNSwiXHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRi''@;'; put 'put ''IiwxMCwiXHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2Iiw0LCJcdTUwZmMiLDksIlx1NTEwOCJdLFsiODM4MCIsIlx1NTEwOVx1NTEwYVx1NTEwYyIsNSwiXHU1MTEzIiwxMywiXHU1MTIyIiwyOCwiXHU1MTQyXHU1MTQ3XHU1MTRh''@;'; put 'put ''XHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkIiw0LCJcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUx''@;'; put 'put ''OGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTYiLDQsIlx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1''@;'; put 'put ''NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMiIsNV0sWyI4NDQwIiwiXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1Iiw1LCJcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUy''@;'; put 'put ''MDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDQi''@;'; put 'put ''LDUsIlx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OCJdLFsiODQ4MCIsIlx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3''@;'; put 'put ''MVx1NTI3MyIsOSwiXHU1MjdlXHU1MjgwXHU1MjgzIiw0LCJcdTUyODkiLDYsIlx1NTI5MVx1NTI5Mlx1NTI5NCIsNiwiXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0Iiw5LCJcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZc''@;'; put 'put ''dTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDkiLDUsIlx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNSIsMTAsIlx1NTJmMSIsNywiXHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0''@;'; put 'put ''XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlIl0sWyI4NTQwIiwiXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmIiw5''@;'; put 'put ''LCJcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2Vc''@;'; put 'put ''dTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGYiXSxbIjg1ODAiLCJcdTUzOTAiLDQsIlx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZiIsNiwi''@;'; put 'put ''XHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzIiw0LCJcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0''@;'; put 'put ''MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNc''@;'; put 'put ''dTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWQiLDQsIlx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OSIsNywiXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3''@;'; put 'put ''XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExIl0sWyI4NjQwIiwiXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1''@;'; put 'put ''NGUwIiw0LCJcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjQiLDUsIlx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYSIsNCwiXHU1NTEyXHU1NTEzXHU1NTE1Iiw1LCJcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1''@;'; put 'put ''MjVcdTU1MjYiXSxbIjg2ODAiLCJcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGIiLDQsIlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1''@;'; put 'put ''NTU1NyIsNCwiXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmIiw1LCJcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdc''@;'; put 'put ''dTU1OWFcdTU1OWJcdTU1OWVcdTU1YTAiLDYsIlx1NTVhOCIsOCwiXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJmIiw0LCJcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDciLDQsIlx1NTVkZVx1NTVlMFx1''@;'; put 'put ''NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOCIsNCwiXHU1NWZmXHU1NjAyXHU1NjAzXHU1NjA0XHU1NjA1Il0sWyI4NzQwIiwiXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1NjBkXHU1NjEwIiw3LCJcdTU2MTlcdTU2MWFcdTU2MWNc''@;'; put 'put ''dTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDAiLDExLCJcdTU2NGYiLDQsIlx1NTY1NVx1NTY1Nlx1NTY1''@;'; put 'put ''YVx1NTY1Ylx1NTY1ZCIsNF0sWyI4NzgwIiwiXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkIiw3LCJcdTU2ODciLDYsIlx1NTY5MFx1NTY5MVx1NTY5Mlx1''@;'; put 'put ''NTY5NCIsMTQsIlx1NTZhNCIsMTAsIlx1NTZiMCIsNiwiXHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkIiwxMiwiXHU1NmNiIiw4LCJcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTUiLDUsIlx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1''@;'; put 'put ''NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYiIsNl0sWyI4ODQwIiwiXHU1NzEyIiw5LCJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzQiLDQs''@;'; put 'put ''Ilx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1MiIsNCwiXHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1''@;'; put 'put ''Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwIl0sWyI4ODgwIiwiXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkIiw0LCJcdTU3OTQiLDYsIlx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1''@;'; put 'put ''NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOSIsOCwiXHU1N2M0Iiw2LCJcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTUiLDcsIlx1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1''@;'; put 'put ''NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgx''@;'; put 'put ''ZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNSIsNCwiXHU1ODJiIiw0LCJcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzYiLDddLFsiODk0MCIsIlx1NTgzZSIsNSwiXHU1ODQ1Iiw2LCJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTkiLDQs''@;'; put 'put ''Ilx1NTg1ZiIsNSwiXHU1ODY2Iiw0LCJcdTU4NmQiLDE2LCJcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGMiXSxbIjg5ODAiLCJcdTU4OGQiLDQsIlx1NTg5NCIsNCwiXHU1ODliXHU1ODljXHU1ODlkXHU1OGEwIiw3LCJcdTU4YWEiLDE3LCJc''@;'; put 'put ''dTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzYiLDEwLCJcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDYiLDEzLCJcdTU4ZTUiLDUsIlx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYSIsNywiXHU1OTAzXHU1OTA1''@;'; put 'put ''XHU1OTA2XHU1OTA4Iiw0LCJcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2IiXSxbIjhhNDAi''@;'; put 'put ''LCJcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWIiLDQsIlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2NiIsMTIsIlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1''@;'; put 'put ''NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNiJdLFsiOGE4MCIsIlx1NTlhN1x1NTlhY1x1NTlhZFx1NTli''@;'; put 'put ''MFx1NTliMVx1NTliMyIsNSwiXHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmIiw2LCJcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGUiLDQsIlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTll''@;'; put 'put ''ZCIsMTEsIlx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1''@;'; put 'put ''NWEyN1x1NWEyOFx1NWEyYSIsNiwiXHU1YTMzXHU1YTM1XHU1YTM3Iiw0LCJcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDEiLDQsIlx1NWE0N1x1NWE0OFx1NWE0YiIsOSwiXHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViIiw1XSxbIjhiNDAiLCJcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVc''@;'; put 'put ''dTVhNjZcdTVhNjhcdTVhNjlcdTVhNmIiLDgsIlx1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MCIsMTcsIlx1NWE5MyIsNiwiXHU1YTljIiwxMywiXHU1YWFiXHU1YWFjIl0sWyI4YjgwIiwiXHU1YWFkIiw0LCJcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjkiLDQsIlx1''@;'; put 'put ''NWFiZlx1NWFjMFx1NWFjMyIsNSwiXHU1YWNhXHU1YWNiXHU1YWNkIiw0LCJcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWMiLDQsIlx1NWFmMiIsMjIsIlx1NWIwYSIs''@;'; put 'put ''MTEsIlx1NWIxOCIsMjUsIlx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOCIsNywiXHU1YjQxIiw2XSxbIjhjNDAiLCJcdTViNDgiLDcsIlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3''@;'; put 'put ''N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1''@;'; put 'put ''NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZiJdLFsiOGM4MCIsIlx1NWJkMVx1NWJkNCIsOCwiXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5Iiw0LCJcdTViZWZcdTViZjEiLDYsIlx1''@;'; put 'put ''NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMy''@;'; put 'put ''Ylx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1''@;'; put 'put ''NWM2NFx1NWM2NyIsNiwiXHU1YzcwXHU1YzcyIiw2LCJcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODMiLDQsIlx1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZCIsNCwiXHU1Y2E0Iiw0XSxbIjhkNDAiLCJcdTVjYWFcdTVjYWVc''@;'; put 'put ''dTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzUiLDUsIlx1NWNjYyIsNSwiXHU1Y2QzIiw1LCJcdTVjZGEiLDYsIlx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1''@;'; put 'put ''NWNlZlx1NWNmMSIsOSwiXHU1Y2ZjIiw0XSxbIjhkODAiLCJcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDgiLDUsIlx1NWQwZiIsNCwiXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFmIiw0LCJcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmYi''@;'; put 'put ''LDQsIlx1NWQzNSIsNywiXHU1ZDNmIiw3LCJcdTVkNDhcdTVkNDlcdTVkNGQiLDEwLCJcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWUiLDEwLCJcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzUiLDEyLCJcdTVkODMiLDIxLCJcdTVkOWFcdTVkOWJcdTVkOWNc''@;'; put 'put ''dTVkOWVcdTVkOWZcdTVkYTAiXSxbIjhlNDAiLCJcdTVkYTEiLDIxLCJcdTVkYjgiLDEyLCJcdTVkYzYiLDYsIlx1NWRjZSIsMTIsIlx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZCJdLFsiOGU4MCIsIlx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOCIsNCwi''@;'; put 'put ''XHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlIiw3LCJcdTVlMjgiLDQsIlx1NWUyZlx1NWUzMFx1NWUzMiIsNCwiXHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2''@;'; put 'put ''Iiw1LCJcdTVlNGQiLDYsIlx1NWU1NiIsNCwiXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzIiwxNCwiXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlk''@;'; put 'put ''XHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4Iiw0LCJcdTVlYWUiLDQsIlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZiIsNl0sWyI4ZjQwIiwiXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiIiw1LCJcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVl''@;'; put 'put ''ZGMiLDExLCJcdTVlZTlcdTVlZWIiLDgsIlx1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1''@;'; put 'put ''NWYyMlx1NWYyM1x1NWYyNCJdLFsiOGY4MCIsIlx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMiIsNiwiXHU1ZjNiXHU1ZjNkXHU1ZjNlXHU1ZjNmXHU1ZjQxIiwxNCwiXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYz''@;'; put 'put ''XHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1''@;'; put 'put ''ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyIiw1LCJcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWYiLDUsIlx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZSIsNCwiXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1''@;'; put 'put ''ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3Il0sWyI5MDQwIiwiXHU2MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDEx''@;'; put 'put ''XHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwIiw0LCJcdTYwMzYiLDQsIlx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NCIsNiwiXHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2''@;'; put 'put ''XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwIl0sWyI5MDgwIiwiXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2''@;'; put 'put ''MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJk''@;'; put 'put ''Iiw3LCJcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2MiLDQsIlx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMSIsNCwiXHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2MGY4XHU2MGZiIiw0LCJcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVc''@;'; put 'put ''dTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyYyIsMTgsIlx1NjE0MCIsNl0sWyI5MTQwIiwiXHU2MTQ3XHU2MTQ5XHU2''@;'; put 'put ''MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2Iiw2LCJcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYxNjRcdTYxNjVcdTYxNjZcdTYxNjkiLDYsIlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OCIsMTgsIlx1NjE4Y1x1NjE4ZFx1''@;'; put 'put ''NjE4ZiIsNCwiXHU2MTk1Il0sWyI5MTgwIiwiXHU2MTk2Iiw2LCJcdTYxOWUiLDgsIlx1NjFhYVx1NjFhYlx1NjFhZCIsOSwiXHU2MWI4Iiw1LCJcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzMiLDQsIlx1NjFjOVx1NjFjYyIsNCwiXHU2MWQzXHU2MWQ1IiwxNiwiXHU2MWU3IiwxMywiXHU2MWY2''@;'; put 'put ''Iiw4LCJcdTYyMDAiLDUsIlx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOCIsNCwiXHU2MjQy''@;'; put 'put ''XHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhIl0sWyI5MjQwIiwiXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2MjVjIiw2LCJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYy''@;'; put 'put ''ODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGIiLDUsIlx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1''@;'; put 'put ''NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMSJdLFsiOTI4MCIsIlx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMw''@;'; put 'put ''M1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzMyIsNSwiXHU2''@;'; put 'put ''MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2Iiw3LCJcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNc''@;'; put 'put ''dTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTkiLDYsIlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNi''@;'; put 'put ''MVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMCJdLFsiOTM0MCIsIlx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkNyIsNiwiXHU2M2RmXHU2M2UyXHU2''@;'; put 'put ''M2U0Iiw0LCJcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDYiLDQsIlx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNSIsNSwiXHU2NDFkXHU2NDFmXHU2''@;'; put 'put ''NDIyXHU2NDIzXHU2NDI0Il0sWyI5MzgwIiwiXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlIiw1LCJcdTY0MzUiLDQsIlx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0YiIsNiwiXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5Iiw0''@;'; put 'put ''LCJcdTY0NWYiLDcsIlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZSIsOSwiXHU2NDdiIiw2LCJcdTY0ODNcdTY0ODZcdTY0ODgiLDgsIlx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5ZiIsNCwiXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4''@;'; put 'put ''XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2NGM0XHU2NGM2Iiw2LCJcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGEiXSxbIjk0NDAi''@;'; put 'put ''LCJcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTciLDI0LCJcdTY1MDEiLDcsIlx1NjUwYSIsNywiXHU2NTEzIiw0LCJcdTY1MTkiLDhdLFsiOTQ4MCIsIlx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNiIsNCwiXHU2NTJjXHU2NTJkXHU2NTMwXHU2''@;'; put 'put ''NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwIiw0LCJcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVc''@;'; put 'put ''dTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzgiLDE0LCJcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1''@;'; put 'put ''YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjEiLDcsIlx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOCIsNywiXHU2''@;'; put 'put ''NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViIl0sWyI5NTQwIiwiXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZiIiw0LCJcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdc''@;'; put 'put ''dTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzciLDQsIlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NCIsNiwiXHU2NjRkXHU2NjRl''@;'; put 'put ''XHU2NjUwXHU2NjUxXHU2NjU4Il0sWyI5NTgwIiwiXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2NjY1XHU2NjY3XHU2NjY5Iiw0LCJcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2''@;'; put 'put ''ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OTgiLDQsIlx1NjY5ZSIsOCwiXHU2NmE5Iiw0LCJcdTY2YWYiLDQsIlx1NjZiNVx1NjZiNlx1NjZiN1x1NjZi''@;'; put 'put ''OFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZiIsMjUsIlx1NjZkYVx1NjZkZSIsNywiXHU2NmU3XHU2NmU4XHU2NmVhIiw1LCJcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDMiXSxbIjk2NDAiLCJcdTY3MDRcdTY3MDVcdTY3''@;'; put 'put ''MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjAiLDUsIlx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1''@;'; put 'put ''NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1NyIsNCwiXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2Il0sWyI5NjgwIiwi''@;'; put 'put ''XHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2''@;'; put 'put ''N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5Iiw3LCJcdTY3YzJcdTY3YzUiLDksIlx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1''@;'; put 'put ''NjdmNSIsNywiXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4Iiw0LCJcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjIiLDYsIlx1NjgyYiIsNiwiXHU2ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2''@;'; put 'put ''ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2Iiw1XSxbIjk3NDAiLCJcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmMiLDcsIlx1Njg3NVx1Njg3OCIsOCwiXHU2ODgyXHU2ODg0XHU2ODg3Iiw3LCJcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZc''@;'; put 'put ''dTY4OTgiLDksIlx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOCJdLFsiOTc4MCIsIlx1NjhiOSIsNiwiXHU2OGMxXHU2OGMzIiw1LCJcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBc''@;'; put 'put ''dTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGIiLDQsIlx1NjhlMVx1NjhlMlx1NjhlNCIsOSwiXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2''@;'; put 'put ''Iiw0LCJcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTMiLDExLCJcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjUiLDcsIlx1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0MyIsMTYs''@;'; put 'put ''Ilx1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1ZiJdLFsiOTg0MCIsIlx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3MiIsNCwiXHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2''@;'; put 'put ''OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlIiw1LCJcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWQiLDksIlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1''@;'; put 'put ''NjliY1x1NjliZCJdLFsiOTg4MCIsIlx1NjliZVx1NjliZlx1NjljMFx1NjljMiIsNywiXHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQyXHU2OWQzXHU2OWQ1Iiw1LCJcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTEiLDExLCJcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjMiLDksIlx1''@;'; put 'put ''NjlmZVx1NmEwMCIsOSwiXHU2YTBiIiwxMSwiXHU2YTE5Iiw1LCJcdTZhMjBcdTZhMjIiLDUsIlx1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNiIsNiwiXHU2YTNmIiw0LCJcdTZhNDVcdTZhNDZcdTZhNDgiLDcsIlx1NmE1MSIsNiwi''@;'; put 'put ''XHU2YTVhIl0sWyI5OTQwIiwiXHU2YTVjIiw0LCJcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjYiLDEwLCJcdTZhNzIiLDYsIlx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NSIsOCwiXHU2YThmXHU2YTkyIiw0LCJcdTZhOTgiLDcsIlx1NmFhMSIs''@;'; put 'put ''NV0sWyI5OTgwIiwiXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkIiwxMTQsIlx1NmIyNVx1NmIyNlx1NmIyOCIsNl0sWyI5YTQwIiwiXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQy''@;'; put 'put ''XHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkIiwxMSwiXHU2YjVhIiw3LCJcdTZiNjhcdTZiNjlcdTZiNmIiLDEzLCJcdTZiN2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODgiXSxbIjlhODAiLCJcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZi''@;'; put 'put ''OTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWMiLDQsIlx1NmJhMiIsNywiXHU2YmFiIiw3LCJcdTZiYjZcdTZiYjgiLDYsIlx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNiIsNCwiXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjIiw0LCJcdTZiZTIiLDcsIlx1''@;'; put 'put ''NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZSIsNiwiXHU2YzA4Iiw0LCJcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNc''@;'; put 'put ''dTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGIiLDQsIlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OCJdLFsiOWI0MCIsIlx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2''@;'; put 'put ''M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2YiIsNCwiXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2''@;'; put 'put ''YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2Qy''@;'; put 'put ''XHU2Y2Q4Il0sWyI5YjgwIiwiXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2''@;'; put 'put ''ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmIiw1LCJcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRc''@;'; put 'put ''dTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZk''@;'; put 'put ''N2JcdTZkN2QiLDQsIlx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5NiIsNCwiXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5Iiw1LCJcdTZk''@;'; put 'put ''YzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2EiXSxbIjljNDAiLCJcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFc''@;'; put 'put ''dTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmQiLDcsIlx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUy''@;'; put 'put ''Nlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNSJdLFsiOWM4MCIsIlx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYiIsNywiXHU2ZTQ1Iiw3LCJcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZl''@;'; put 'put ''NWRcdTZlNWVcdTZlNjAiLDEwLCJcdTZlNmNcdTZlNmRcdTZlNmYiLDE0LCJcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGEiLDQsIlx1NmU5MSIsNiwiXHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2''@;'; put 'put ''ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNhXHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2''@;'; put 'put ''XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhIiw1XSxbIjlkNDAiLCJcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmEiLDcsIlx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYSIsNCwiXHU2''@;'; put 'put ''ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2Iiw5LCJcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzciLDYsIlx1NmYzZlx1NmY0MFx1NmY0MVx1NmY0MiJdLFsiOWQ4MCIsIlx1NmY0M1x1NmY0NFx1''@;'; put 'put ''NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZSIsOSwiXHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3Iiw1LCJcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2Jc''@;'; put 'put ''dTZmN2QiLDYsIlx1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4ZiIsMTIsIlx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMiIsNCwiXHU2ZmE4IiwxMCwiXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhIiw1LCJcdTZmYzFcdTZmYzMiLDUsIlx1NmZjYSIsNiwiXHU2''@;'; put 'put ''ZmQzIiwxMCwiXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1Il0sWyI5ZTQwIiwiXHU2ZmU2Iiw3LCJcdTZmZjAiLDMyLCJcdTcwMTIiLDcsIlx1NzAxYyIsNiwiXHU3MDI0Iiw2XSxbIjllODAiLCJcdTcwMmIiLDksIlx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYSIsMTcsIlx1NzA0ZFx1''@;'; put 'put ''NzA0ZVx1NzA1MCIsMTMsIlx1NzA1ZiIsMTEsIlx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5''@;'; put 'put ''MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZSIsMTIsIlx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYiIsMTIsIlx1NzBkYSJdLFsiOWY0MCIsIlx1NzBkY1x1NzBkZFx1''@;'; put 'put ''NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMCIsNiwiXHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlIiwxMCwiXHU3MTBiIiw0LCJcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWIiLDEwLCJcdTcxMjciLDcsIlx1NzEzMlx1NzEzM1x1''@;'; put 'put ''NzEzNCJdLFsiOWY4MCIsIlx1NzEzNVx1NzEzNyIsMTMsIlx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0ZiIsMTIsIlx1NzE1ZFx1NzE1ZiIsNCwiXHU3MTY1XHU3MTY5Iiw0LCJcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlc''@;'; put 'put ''dTcxN2JcdTcxN2NcdTcxN2UiLDUsIlx1NzE4NSIsNCwiXHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhIiw0LCJcdTcxYTEiLDYsIlx1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZCIsNSwiXHU3MWI0XHU3MWI2XHU3''@;'; put 'put ''MWI3XHU3MWI4XHU3MWJhIiw4LCJcdTcxYzQiLDksIlx1NzFjZiIsNF0sWyJhMDQwIiwiXHU3MWQ2Iiw5LCJcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZTgiLDUsIlx1NzFlZiIsOSwiXHU3MWZhIiwxMSwiXHU3MjA3IiwxOV0sWyJhMDgwIiwiXHU3MjFiXHU3MjFjXHU3MjFl''@;'; put 'put ''Iiw5LCJcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDAiLDYsIlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1''@;'; put 'put ''Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NSIsNCwiXHU3MjhjXHU3MjhlXHU3MjkwXHU3''@;'; put 'put ''MjkxXHU3MjkzIiwxMSwiXHU3MmEwIiwxMSwiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhIiw2LCJcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGIi''@;'; put 'put ''XSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsNywiXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdc''@;'; put 'put ''eGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1''@;'; put 'put ''XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUy''@;'; put 'put ''MTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmExIiwiXHUyMTcwIiw5XSxbImEyYjEiLCJcdTI0ODgiLDE5LCJcdTI0NzQiLDE5LCJcdTI0NjAiLDldLFsiYTJlNSIsIlx1MzIyMCIsOV0sWyJhMmYxIiwiXHUyMTYwIiwxMV0sWyJhM2ExIiwiXHVmZjAxXHVmZjAyXHVmZjAzXHVm''@;'; put 'put ''ZmU1XHVmZjA1Iiw4OCwiXHVmZmUzIl0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTZlMCIsIlx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1''@;'; put 'put ''ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NCJdLFsiYTZlZSIsIlx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMSJdLFsiYTZmNCIsIlx1ZmUzM1x1ZmUzNCJdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUw''@;'; put 'put ''NDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4NDAiLCJcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIyMWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTAiLDM1''@;'; put 'put ''LCJcdTI1ODEiLDZdLFsiYTg4MCIsIlx1MjU4OCIsNywiXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlIl0sWyJhOGExIiwiXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFi''@;'; put 'put ''XHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxIl0sWyJhOGJkIiwiXHUwMTQ0XHUwMTQ4Il0sWyJhOGMwIiwiXHUwMjYxIl0sWyJhOGM1IiwiXHUzMTA1Iiwz''@;'; put 'put ''Nl0sWyJhOTQwIiwiXHUzMDIxIiw4LCJcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTQiXSxbImE5NTkiLCJcdTIxMjFcdTMyMzEiXSxbImE5NWMiLCJcdTIwMTAiXSxbImE5NjAi''@;'; put 'put ''LCJcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDkiLDksIlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OSIsOF0sWyJhOTgwIiwiXHVmZTYyIiw0LCJcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmIiXSxbImE5OTYiLCJcdTMwMDciXSxbImE5''@;'; put 'put ''YTQiLCJcdTI1MDAiLDc1XSxbImFhNDAiLCJcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTIiLDUsIlx1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNCIsNSwiXHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3''@;'; put 'put ''MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwIiw4XSxbImFhODAiLCJcdTczNDlcdTcz''@;'; put 'put ''NGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNTgiLDcsIlx1NzM2MSIsMTAsIlx1NzM2ZVx1NzM3MFx1NzM3MSJdLFsiYWI0MCIsIlx1NzM3MiIsMTEsIlx1NzM3ZiIsNCwiXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3''@;'; put 'put ''MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzIiw1LCJcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTczYjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlcdTczYmNc''@;'; put 'put ''dTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzMiLDRdLFsiYWI4MCIsIlx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMiIsNiwiXHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3''@;'; put 'put ''M2VmXHU3M2YwXHU3M2YxXHU3M2YzIiw0XSxbImFjNDAiLCJcdTczZjgiLDEwLCJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTEiLDgsIlx1NzQxYyIsNSwiXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMy''@;'; put 'put ''XHU3NDM3Iiw0LCJcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDIiLDExXSxbImFjODAiLCJcdTc0NGUiLDYsIlx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MCIsMTIsIlx1NzQ2ZVx1NzQ2Zlx1NzQ3MSIsNCwiXHU3NDc4XHU3NDc5XHU3NDdhIl0sWyJhZDQwIiwiXHU3NDdiXHU3NDdjXHU3''@;'; put 'put ''NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxIiwxMCwiXHU3NDlkXHU3NDlmIiw3LCJcdTc0YWEiLDE1LCJcdTc0YmIiLDEyXSxbImFkODAiLCJcdTc0YzgiLDksIlx1NzRkMyIsOCwiXHU3NGRkXHU3NGRm''@;'; put 'put ''XHU3NGUxXHU3NGU1XHU3NGU3Iiw2LCJcdTc0ZjBcdTc0ZjFcdTc0ZjIiXSxbImFlNDAiLCJcdTc0ZjNcdTc0ZjVcdTc0ZjgiLDYsIlx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNSIsNywiXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFk''@;'; put 'put ''XHU3NTFlXHU3NTIwIiw0LCJcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1''@;'; put 'put ''NTZcdTc1NTdcdTc1NTgiXSxbImFlODAiLCJcdTc1NWQiLDcsIlx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2YiIsNiwiXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhIiw0LCJcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODciXSxbImFmNDAiLCJcdTc1ODhcdTc1ODlcdTc1''@;'; put 'put ''OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTYiLDQsIlx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1''@;'; put 'put ''NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYw''@;'; put 'put ''NFx1NzYwNlx1NzYwNyJdLFsiYWY4MCIsIlx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1''@;'; put 'put ''NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NCJdLFsiYjA0MCIsIlx1NzY0NSIsNiwiXHU3NjRlIiw1LCJcdTc2NTVcdTc2NTciLDQsIlx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NCIsNiwiXHU3NjZjXHU3NjZkXHU3''@;'; put 'put ''NjZlXHU3NjcwIiw3LCJcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNcdTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWIiXSxbImIwODAiLCJcdTc2OWMiLDcsIlx1''@;'; put 'put ''NzZhNSIsOCwiXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1Iiw5LCJcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlc''@;'; put 'put ''dTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYy''@;'; put 'put ''ZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRc''@;'; put 'put ''dTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjUiXSxbImIxNDAiLCJcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2''@;'; put 'put ''Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2ZTAiLDQsIlx1NzZlNiIsNywiXHU3NmYwXHU3NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3''@;'; put 'put ''NzBlIiwxMCwiXHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiIl0sWyJiMTgwIiwiXHU3NzJjXHU3NzJlXHU3NzMwIiw0LCJcdTc3MzlcdTc3M2JcdTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZc''@;'; put 'put ''dTc3NDgiLDcsIlx1Nzc1MiIsNywiXHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4''@;'; put 'put ''XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1''@;'; put 'put ''ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2''@;'; put 'put ''XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzIl0sWyJiMjQwIiwiXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkIiwx''@;'; put 'put ''MSwiXHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2Iiw1LCJcdTc3OGZcdTc3OTBcdTc3OTMiLDExLCJcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjYiLDRdLFsiYjI4MCIs''@;'; put 'put ''Ilx1NzdiY1x1NzdiZVx1NzdjMCIsMTIsIlx1NzdjZSIsOCwiXHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkIiw0LCJcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgy''@;'; put 'put ''MzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNc''@;'; put 'put ''dTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgz''@;'; put 'put ''MmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTYiXSxbImIzNDAiLCJcdTc3ZTZcdTc3ZThc''@;'; put 'put ''dTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDMiLDUsIlx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1Nzgy''@;'; put 'put ''NFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1''@;'; put 'put ''Nzg1OVx1Nzg1YSJdLFsiYjM4MCIsIlx1Nzg1Ylx1Nzg1Y1x1Nzg1ZSIsMTEsIlx1Nzg2ZiIsNywiXHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkIiw2LCJcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVc''@;'; put 'put ''dTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZh''@;'; put 'put ''NTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRc''@;'; put 'put ''dTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWEiXSxb''@;'; put 'put ''ImI0NDAiLCJcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJcdTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YTgiLDcsIlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1''@;'; put 'put ''NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYSIsOV0sWyJiNDgwIiwiXHU3OGU0XHU3OGU1XHU3OGU2XHU3''@;'; put 'put ''OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkIiw0LCJcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmIiLDUsIlx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNiIsNiwiXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0''@;'; put 'put ''ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNj''@;'; put 'put ''XHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3''@;'; put 'put ''Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1''@;'; put 'put ''XHU5MDJlIl0sWyJiNTQwIiwiXHU3OTBkIiw1LCJcdTc5MTQiLDksIlx1NzkxZiIsNCwiXHU3OTI1IiwxNCwiXHU3OTM1Iiw0LCJcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGEiLDgsIlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2MyJd''@;'; put 'put ''LFsiYjU4MCIsIlx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MCIsNiwiXHU3OTc5XHU3OTdiIiw0LCJcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBc''@;'; put 'put ''dTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUy''@;'; put 'put ''MzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBc''@;'; put 'put ''dTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYz''@;'; put 'put ''ODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTAiXSxbImI2NDAiLCJcdTc5OTMiLDYsIlx1Nzk5YiIsMTEsIlx1NzlhOCIsMTAsIlx1NzliNCIsNCwiXHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3''@;'; put 'put ''OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5Iiw1LCJcdTc5ZTBcdTc5ZTFcdTc5ZTJcdTc5ZTVcdTc5ZThcdTc5ZWEiXSxbImI2ODAiLCJcdTc5ZWNcdTc5ZWVcdTc5ZjEiLDYsIlx1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1''@;'; put 'put ''N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZiIsNCwiXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFj''@;'; put 'put ''XHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1''@;'; put 'put ''ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIy''@;'; put 'put ''XHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjIl0s''@;'; put 'put ''WyJiNzQwIiwiXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0IiwxNCwiXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwIiw1LCJcdTdhNDciLDksIlx1N2E1MiIsNCwiXHU3YTU4IiwxNl0sWyJiNzgwIiwiXHU3YTY5Iiw2LCJcdTdhNzFcdTdhNzJcdTdhNzNc''@;'; put 'put ''dTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFcdTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRm''@;'; put 'put ''MTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJc''@;'; put 'put ''dTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5''@;'; put 'put ''NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJc''@;'; put 'put ''dThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGQiXSxbImI4NDAiLCJcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWUiLDQsIlx1N2FiNCIsMTAsIlx1N2FjMCIsMTAsIlx1N2FjYyIsOSwiXHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRj''@;'; put 'put ''XHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3Iiw1LCJcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjMiXSxbImI4ODAiLCJcdTdhZjQiLDQsIlx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2Ix''@;'; put 'put ''MFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1''@;'; put 'put ''ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4''@;'; put 'put ''OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1''@;'; put 'put ''OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOSJdLFsi''@;'; put 'put ''Yjk0MCIsIlx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZiIsNSwiXHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzIiwx''@;'; put 'put ''MCwiXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2Iiw2LCJcdTdiOGVcdTdiOGYiXSxbImI5ODAiLCJcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFc''@;'; put 'put ''dTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdiYjZcdTdiYjdcdTdiYjkiLDcsIlx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5''@;'; put 'put ''YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1''@;'; put 'put ''OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBl''@;'; put 'put ''Zlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1''@;'; put 'put ''Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOCJdLFsiYmE0MCIsIlx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNCIsNCwiXHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4''@;'; put 'put ''XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyIiw0LCJcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmYiLDcsIlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMCIsNSwiXHU3YzE3XHU3YzE4XHU3YzE5Il0sWyJiYTgwIiwiXHU3YzFh''@;'; put 'put ''Iiw0LCJcdTdjMjAiLDUsIlx1N2MyOFx1N2MyOVx1N2MyYiIsMTIsIlx1N2MzOSIsNSwiXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYw''@;'; put 'put ''XHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0''@;'; put 'put ''ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJh''@;'; put 'put ''XHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2Il0sWyJiYjQwIiwiXHU3YzQzIiw5LCJcdTdjNGUiLDM2LCJcdTdj''@;'; put 'put ''NzUiLDUsIlx1N2M3ZSIsOV0sWyJiYjgwIiwiXHU3Yzg4XHU3YzhhIiw2LCJcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjQiLDQsIlx1''@;'; put 'put ''N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2Yx''@;'; put 'put ''M1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1''@;'; put 'put ''NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNi''@;'; put 'put ''N1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NSJdLFsiYmM0MCIsIlx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZSIsNiwiXHU3Y2Q4XHU3Y2RhXHU3''@;'; put 'put ''Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxIiw2LCJcdTdjZTkiLDUsIlx1N2NmMCIsNywiXHU3Y2Y5XHU3Y2ZhXHU3Y2ZjIiwxMywiXHU3ZDBiIiw1XSxbImJjODAiLCJcdTdkMTEiLDE0LCJcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRc''@;'; put 'put ''dTdkMmVcdTdkMzAiLDYsIlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEw''@;'; put 'put ''YVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1''@;'; put 'put ''OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJl''@;'; put 'put ''M1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNiJdLFsiYmQ0MCIsIlx1N2QzNyIsNTQsIlx1N2Q2ZiIsN10sWyJiZDgwIiwiXHU3ZDc4IiwzMiwiXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZm''@;'; put 'put ''XHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1''@;'; put 'put ''NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0''@;'; put 'put ''XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4''@;'; put 'put ''YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4Il0sWyJiZTQwIiwiXHU3ZDk5IiwxMiwiXHU3ZGE3Iiw2LCJcdTdkYWYiLDQyXSxbImJlODAiLCJcdTdkZGEiLDMyLCJcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRl''@;'; put 'put ''YWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhc''@;'; put 'put ''dTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThk''@;'; put 'put ''ZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdc''@;'; put 'put ''dTUxOWJcdTU0MWJcdTVjZmIiXSxbImJmNDAiLCJcdTdkZmIiLDYyXSxbImJmODAiLCJcdTdlM2FcdTdlM2MiLDQsIlx1N2U0MiIsNCwiXHU3ZTQ4IiwyMSwiXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1''@;'; put 'put ''MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIz''@;'; put 'put ''XHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1''@;'; put 'put ''OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwIl0sWyJj''@;'; put 'put ''MDQwIiwiXHU3ZTVlIiwzNSwiXHU3ZTgzIiwyMywiXHU3ZTljXHU3ZTlkXHU3ZTllIl0sWyJjMDgwIiwiXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiIiw2LCJcdTdmNDNcdTdmNDYiLDks''@;'; put 'put ''Ilx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1''@;'; put 'put ''N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJk''@;'; put 'put ''Mlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1''@;'; put 'put ''NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMCJdLFsiYzE0MCIsIlx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2MyIsNCwiXHU3ZjZiXHU3ZjZjXHU3ZjZk''@;'; put 'put ''XHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyIiw3LCJcdTdmOGJcdTdmOGRcdTdmOGYiLDQsIlx1N2Y5NSIsNCwiXHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2''@;'; put 'put ''XHU3ZmE4Iiw2LCJcdTdmYjEiXSxbImMxODAiLCJcdTdmYjMiLDQsIlx1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZiIsNCwiXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5Iiw1LCJcdTdmZTJcdTdmZTNc''@;'; put 'put ''dTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgy''@;'; put 'put ''NmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4Zjdc''@;'; put 'put ''dTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5''@;'; put 'put ''OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmYiXSxbImMyNDAiLCJcdTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjQiLDYsIlx1N2ZmZFx1N2ZmZVx1N2ZmZlx1''@;'; put 'put ''ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYiIsNSwiXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0''@;'; put 'put ''XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3Il0sWyJjMjgwIiwiXHU4MDU5XHU4MDViIiwxMywiXHU4MDZiIiw1LCJcdTgwNzIiLDExLCJcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0''@;'; put 'put ''MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNc''@;'; put 'put ''dTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdm''@;'; put 'put ''NTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVc''@;'; put 'put ''dTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmIiXSxbImMzNDAiLCJcdTgwN2VcdTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgwOGQiLDUsIlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBi''@;'; put 'put ''NVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjNyIsNCwiXHU4MGNmIiw2LCJcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZcdTgxMDBcdTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgx''@;'; put 'put ''MDdcdTgxMDhcdTgxMGIiXSxbImMzODAiLCJcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWYiLDEyLCJcdTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzkiLDQsIlx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1''@;'; put 'put ''NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4''@;'; put 'put ''ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1''@;'; put 'put ''NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYw''@;'; put 'put ''ZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OCJdLFsiYzQ0MCIsIlx1ODE0MCIsNSwiXHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViIiw0LCJcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgx''@;'; put 'put ''NjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODMiLDQsIlx1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5MiIsNSwiXHU4MTk5XHU4MTlhXHU4MTllIiw0LCJcdTgxYTRcdTgxYTUiXSxb''@;'; put 'put ''ImM0ODAiLCJcdTgxYTdcdTgxYTlcdTgxYWIiLDcsIlx1ODFiNCIsNSwiXHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkIiw2LCJcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3''@;'; put 'put ''MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFc''@;'; put 'put ''dTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZj''@;'; put 'put ''ZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBc''@;'; put 'put ''dTcyZGVcdTUxZGRcdTViODEiXSxbImM1NDAiLCJcdTgxZDQiLDE0LCJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgxZWUiLDQsIlx1ODFmNSIsNSwiXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3Iiw0LCJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTUiLDUsIlx1''@;'; put 'put ''ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZiJdLFsiYzU4MCIsIlx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MCIsNywi''@;'; put 'put ''XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwIiw3LCJcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdj''@;'; put 'put ''ZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRc''@;'; put 'put ''dTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcw''@;'; put 'put ''ZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDciXSxbImM2NDAiLCJcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVc''@;'; put 'put ''dTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgyOWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgy''@;'; put 'put ''YjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFcdTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVc''@;'; put 'put ''dTgyZjZcdTgyZjgiXSxbImM2ODAiLCJcdTgyZmFcdTgyZmMiLDQsIlx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZCIsOSwiXHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNl''@;'; put 'put ''XHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1''@;'; put 'put ''MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDEx''@;'; put 'put ''XHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1''@;'; put 'put ''OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwIl0sWyJjNzQwIiwiXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhIiw0LCJcdTgzNTNcdTgzNTUiLDQsIlx1ODM1ZFx1ODM2Mlx1ODM3MCIsNiwiXHU4''@;'; put 'put ''Mzc5XHU4MzdhXHU4MzdlIiw2LCJcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTEiLDYsIlx1ODNhY1x1ODNhZFx1ODNhZSJdLFsiYzc4MCIsIlx1''@;'; put 'put ''ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNl''@;'; put 'put ''Nlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1''@;'; put 'put ''NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUx''@;'; put 'put ''NFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1''@;'; put 'put ''N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMCJdLFsiYzg0MCIsIlx1ODNlZVx1ODNlZlx1ODNmMyIsNCwiXHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2Zm''@;'; put 'put ''XHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyIiw1LCJcdTg0MTlcdTg0MWFcdTg0MWJcdTg0MWUiLDUsIlx1ODQyOSIsNywiXHU4NDMyIiw1LCJcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2UiLDcsIlx1ODQ0N1x1ODQ0OFx1ODQ0OSJdLFsiYzg4''@;'; put 'put ''MCIsIlx1ODQ0YSIsNiwiXHU4NDUyIiw0LCJcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjQiLDQsIlx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1''@;'; put 'put ''NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUx''@;'; put 'put ''OFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1''@;'; put 'put ''NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQy''@;'; put 'put ''OFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMSJdLFsiYzk0MCIsIlx1ODQ3ZCIsNCwiXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmIiw3LCJcdTg0OThcdTg0OWFcdTg0OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTIiLDEyLCJcdTg0''@;'; put 'put ''YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRcdTg0ZDVcdTg0ZDciXSxbImM5ODAiLCJcdTg0ZDgiLDQsIlx1''@;'; put 'put ''ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlNyIsNCwiXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxIiwxMCwiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5''@;'; put 'put ''XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2''@;'; put 'put ''MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0''@;'; put 'put ''XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzIl0s''@;'; put 'put ''WyJjYTQwIiwiXHU4NTAzIiw4LCJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjIiLDgsIlx1ODUyZCIsOSwiXHU4NTNlIiw0LCJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1''@;'; put 'put ''NDdcdTg1NGIiLDEwXSxbImNhODAiLCJcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWYiLDQsIlx1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OSIsOCwiXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAx''@;'; put 'put ''XHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1''@;'; put 'put ''ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4''@;'; put 'put ''XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1''@;'; put 'put ''YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxIl0sWyJjYjQwIiwiXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4Iiw2LCJcdTg1OTAiLDEwLCJcdTg1OWQiLDYsIlx1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1''@;'; put 'put ''ODVhZFx1ODViMSIsNSwiXHU4NWI4XHU4NWJhIiw2LCJcdTg1YzIiLDYsIlx1ODVjYSIsNCwiXHU4NWQxXHU4NWQyIl0sWyJjYjgwIiwiXHU4NWQ0XHU4NWQ2Iiw1LCJcdTg1ZGQiLDYsIlx1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYSIsMTQsIlx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1''@;'; put 'put ''NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1''@;'; put 'put ''NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBm''@;'; put 'put ''M1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1''@;'; put 'put ''N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NCJdLFsiY2M0MCIsIlx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMCIsNCwiXHU4NjA2IiwxMCwiXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3IiwxNSwiXHU4NjI4XHU4NjJhIiwxMywi''@;'; put 'put ''XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwIl0sWyJjYzgwIiwiXHU4NjQxIiwxMSwiXHU4NjUyXHU4NjUzXHU4NjU1Iiw0LCJcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjMiLDcsIlx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBj''@;'; put 'put ''ZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1''@;'; put 'put ''NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4''@;'; put 'put ''YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1''@;'; put 'put ''OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjMyJdLFsiY2Q0MCIsIlx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3MiIsNiwiXHU4NjgzIiw2LCJcdTg2OGUiLDQsIlx1ODY5NFx1ODY5NiIsNSwiXHU4NjllIiw0LCJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2''@;'; put 'put ''YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmIiLDQsIlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkYyJdLFsiY2Q4MCIsIlx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1''@;'; put 'put ''ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcx''@;'; put 'put ''Nlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1''@;'; put 'put ''NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlh''@;'; put 'put ''NVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1''@;'; put 'put ''ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMSJdLFsiY2U0MCIsIlx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcy''@;'; put 'put ''Zlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MCIsNiwiXHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhIiw1LCJcdTg3NjFcdTg3NjJcdTg3''@;'; put 'put ''NjYiLDcsIlx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NSJdLFsiY2U4MCIsIlx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZSIsNCwiXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4Iiw2''@;'; put 'put ''LCJcdTg3YTAiLDQsIlx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1''@;'; put 'put ''OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNl''@;'; put 'put ''MVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1''@;'; put 'put ''NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YSJdLFsiY2Y0MCIsIlx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdi''@;'; put 'put ''N1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMSIsNCwiXHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjIiw0LCJcdTg3ZDQiLDYsIlx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdl''@;'; put 'put ''Ylx1ODdlY1x1ODdlZFx1ODdlZiIsOV0sWyJjZjgwIiwiXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0Iiw1LCJcdTg4MGIiLDcsIlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxYyIsNCwiXHU4ODIzXHU3YTAwXHU2MDZmXHU1''@;'; put 'put ''ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3''@;'; put 'put ''XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5''@;'; put 'put ''OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVk''@;'; put 'put ''XHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzIl0sWyJkMDQwIiwiXHU4ODI0IiwxMywiXHU4ODMzIiw1LCJcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDYiLDUsIlx1ODg0ZSIsNSwiXHU4ODU1''@;'; put 'put ''XHU4ODU2XHU4ODU4XHU4ODVhIiw2LCJcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2EiXSxbImQwODAiLCJcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4''@;'; put 'put ''OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTciLDQsIlx1ODg5ZCIsNCwiXHU4OGEzXHU4OGE1Iiw1LCJcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYz''@;'; put 'put ''MWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlc''@;'; put 'put ''dTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdl''@;'; put 'put ''ZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODQiXSxbImQxNDAiLCJc''@;'; put 'put ''dTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjIiLDQsIlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhk''@;'; put 'put ''N1x1ODhkYSIsNCwiXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5Iiw2LCJcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDMiLDVdLFsiZDE4MCIsIlx1ODkwOVx1ODkwYiIsNCwiXHU4OTExXHU4OTE0Iiw0LCJcdTg5''@;'; put 'put ''MWMiLDQsIlx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1''@;'; put 'put ''NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRk''@;'; put 'put ''MVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1''@;'; put 'put ''NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5''@;'; put 'put ''Nlx1NzQ3NiJdLFsiZDI0MCIsIlx1ODkzOCIsOCwiXHU4OTQyXHU4OTQzXHU4OTQ1IiwyNCwiXHU4OTYwIiw1LCJcdTg5NjciLDE5LCJcdTg5N2MiXSxbImQyODAiLCJcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVcdTg5ODciLDI2LCJcdTY0NDdcdTVjMjdcdTkwNjVcdTdh''@;'; put 'put ''OTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFc''@;'; put 'put ''dTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVm''@;'; put 'put ''NzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJc''@;'; put 'put ''dTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTAiXSxbImQzNDAiLCJcdTg5YTIiLDMwLCJcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5''@;'; put 'put ''ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjQiLDZdLFsiZDM4MCIsIlx1ODlmYiIsNCwiXHU4YTAxIiw1LCJcdThhMDgiLDIxLCJcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRc''@;'; put 'put ''dTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRm''@;'; put 'put ''MThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlc''@;'; put 'put ''dTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcy''@;'; put 'put ''ZjFcdTgwYjJcdThhODkiXSxbImQ0NDAiLCJcdThhMWUiLDMxLCJcdThhM2YiLDgsIlx1OGE0OSIsMjFdLFsiZDQ4MCIsIlx1OGE1ZiIsMjUsIlx1OGE3YSIsNiwiXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgx''@;'; put 'put ''XHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1''@;'; put 'put ''MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2Rm''@;'; put 'put ''XHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3Il0s''@;'; put 'put ''WyJkNTQwIiwiXHU4YTgxIiw3LCJcdThhOGIiLDcsIlx1OGE5NCIsNDZdLFsiZDU4MCIsIlx1OGFjMyIsMzIsIlx1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJl''@;'; put 'put ''MVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1''@;'; put 'put ''ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1Nzgy''@;'; put 'put ''N1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZiJdLFsiZDY0MCIsIlx1OGFlNCIsMzQsIlx1OGIwOCIs''@;'; put 'put ''MjddLFsiZDY4MCIsIlx1OGIyNFx1OGIyNVx1OGIyNyIsMzAsIlx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1''@;'; put 'put ''NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZj''@;'; put 'put ''NVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1''@;'; put 'put ''NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MSJdLFsiZDc0MCIsIlx1OGI0NiIsMzEsIlx1OGI2NyIsNCwiXHU4YjZkIiwyNV0sWyJkNzgwIiwiXHU4''@;'; put 'put ''Yjg3IiwyNCwiXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDll''@;'; put 'put ''XHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1''@;'; put 'put ''YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0''@;'; put 'put ''XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3Il0sWyJkODQwIiwiXHU4YzM4Iiw4LCJcdThjNDJcdThjNDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThj''@;'; put 'put ''NGQiLDcsIlx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1YiIsNSwiXHU4YzYzIiw2LCJcdThjNmMiLDYsIlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3YiIsNiwiXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3Il0sWyJkODgwIiwiXHU4Yzg4XHU4YzhiXHU4YzhkIiw2LCJcdThjOTVc''@;'; put 'put ''dThjOTZcdThjOTdcdThjOTkiLDIwLCJcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5''@;'; put 'put ''OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNc''@;'; put 'put ''dTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRl''@;'; put 'put ''ZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWQiXSxbImQ5NDAiLCJcdThjYWUiLDYyXSxbImQ5ODAiLCJcdThjZWQiLDMyLCJcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRm''@;'; put 'put ''NzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVc''@;'; put 'put ''dTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRm''@;'; put 'put ''NThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBc''@;'; put 'put ''dTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmMiXSxbImRhNDAiLCJcdThkMGUiLDE0LCJcdThkMjBcdThkNTFcdThkNTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzgiLDgsIlx1OGQ4''@;'; put 'put ''Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4YyIsNCwiXHU4ZDkyXHU4ZDkzXHU4ZDk1Iiw5LCJcdThkYTBcdThkYTEiXSxbImRhODAiLCJcdThkYTJcdThkYTQiLDEyLCJcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThk''@;'; put 'put ''YzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNc''@;'; put 'put ''dThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThj''@;'; put 'put ''MTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJc''@;'; put 'put ''dTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmEiXSxbImRiNDAiLCJcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThk''@;'; put 'put ''ZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmUiLDYsIlx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNSIs''@;'; put 'put ''NywiXHU4ZTIwXHU4ZTIxXHU4ZTI0Iiw0LCJcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhcdThlM2JcdThlM2NcdThlM2UiXSxbImRiODAiLCJcdThlM2ZcdThlNDNcdThlNDVcdThlNDZcdThlNGMiLDQsIlx1OGU1MyIsNSwiXHU4ZTVhIiwx''@;'; put 'put ''MSwiXHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIz''@;'; put 'put ''XHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1''@;'; put 'put ''N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0''@;'; put 'put ''XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkIl0sWyJkYzQwIiwiXHU4ZTczXHU4ZTc1XHU4ZTc3Iiw0LCJcdThlN2RcdThlN2VcdThlODBcdThl''@;'; put 'put ''ODJcdThlODNcdThlODRcdThlODZcdThlODgiLDYsIlx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NSIsNiwiXHU4ZTlkXHU4ZTlmIiwxMSwiXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzIiw2LCJcdThlYmIiLDddLFsiZGM4MCIsIlx1OGVjMyIsMTAsIlx1OGVjZiIsMjEsIlx1NTgwYlx1''@;'; put 'put ''NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5''@;'; put 'put ''OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1''@;'; put 'put ''ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0''@;'; put 'put ''N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NSJdLFsiZGQ0MCIsIlx1OGVlNSIsNjJdLFsiZGQ4MCIsIlx1OGYyNCIsMzIsIlx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNi''@;'; put 'put ''M1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1''@;'; put 'put ''ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0''@;'; put 'put ''Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1''@;'; put 'put ''ODUxZlx1ODUzYSJdLFsiZGU0MCIsIlx1OGY0NSIsMzIsIlx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZi''@;'; put 'put ''N1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNiJdLFsiZGU4MCIsIlx1OGZjOSIsNCwiXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4''@;'; put 'put ''ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0''@;'; put 'put ''XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1''@;'; put 'put ''MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5''@;'; put 'put ''XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2Il0sWyJkZjQwIiwiXHU5MDE5XHU5''@;'; put 'put ''MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3Iiw1LCJcdTkwMzAiLDQsIlx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OCIsNCwiXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjIiw1LCJcdTkwNjRcdTkw''@;'; put 'put ''NjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmYiLDQsIlx1OTA3NiIsNiwiXHU5MDdlXHU5MDgxIl0sWyJkZjgwIiwiXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjIiw0LCJcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkw''@;'; put 'put ''OWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVc''@;'; put 'put ''dTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0''@;'; put 'put ''NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlc''@;'; put 'put ''dTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2MiXSxb''@;'; put 'put ''ImUwNDAiLCJcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZcdTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBc''@;'; put 'put ''dTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkxMDNcdTkxMDUiLDE5LCJcdTkxMWFcdTkxMWJcdTkxMWMiXSxbImUwODAiLCJcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjQiLDEwLCJcdTkx''@;'; put 'put ''MzBcdTkxMzIiLDYsIlx1OTEzYSIsOCwiXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1''@;'; put 'put ''NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAx''@;'; put 'put ''XHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1''@;'; put 'put ''NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjIl0sWyJlMTQwIiwiXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4''@;'; put 'put ''XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwIiw0LCJcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTMiLDYsIlx1OTE5YyIsNSwiXHU5MWE0Iiw1LCJcdTkxYWJc''@;'; put 'put ''dTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmIiXSxbImUxODAiLCJcdTkxYmMiLDEwLCJcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDIiLDksIlx1OTFkZCIsOCwiXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1Yzhj''@;'; put 'put ''XHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1''@;'; put 'put ''ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1Zjgy''@;'; put 'put ''XHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3''@;'; put 'put ''MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhIl0sWyJlMjQwIiwiXHU5MWU2Iiw2Ml0sWyJlMjgwIiwiXHU5MjI1IiwzMiwiXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3''@;'; put 'put ''MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3Iiw1LCJcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBc''@;'; put 'put ''dTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYw''@;'; put 'put ''MDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDIiXSxbImUzNDAiLCJcdTkyNDYiLDQ1LCJcdTkyNzUiLDE2XSxbImUzODAiLCJcdTky''@;'; put 'put ''ODYiLDcsIlx1OTI4ZiIsMjQsIlx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1''@;'; put 'put ''NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYw''@;'; put 'put ''ZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1''@;'; put 'put ''NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZSJdLFsiZTQ0MCIsIlx1OTJhOCIsNSwiXHU5MmFmIiwyNCwiXHU5MmM5IiwzMV0sWyJlNDgwIiwiXHU5MmU5IiwzMiwiXHU2ZDM5XHU2''@;'; put 'put ''ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYz''@;'; put 'put ''XHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2''@;'; put 'put ''ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJh''@;'; put 'put ''XHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxIl0sWyJlNTQwIiwiXHU5MzBhIiw1MSwiXHU5MzNmIiwxMF0sWyJlNTgwIiwiXHU5MzRhIiwzMSwiXHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVl''@;'; put 'put ''XHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4''@;'; put 'put ''ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDVi''@;'; put 'put ''XHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1''@;'; put 'put ''OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzIl0sWyJlNjQwIiwiXHU5MzZjIiwzNCwiXHU5MzkwIiwyN10sWyJlNjgwIiwiXHU5M2FjIiwyOSwiXHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1''@;'; put 'put ''YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWVi''@;'; put 'put ''XHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5''@;'; put 'put ''YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4''@;'; put 'put ''XHU3ZWE5Il0sWyJlNzQwIiwiXHU5M2NlIiw3LCJcdTkzZDciLDU0XSxbImU3ODAiLCJcdTk0MGUiLDMyLCJcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJc''@;'; put 'put ''dTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjEiLDYsIlx1N2YyYVx1N2Yy''@;'; put 'put ''Ylx1N2YyY1x1N2YyZFx1N2YyZiIsNCwiXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3''@;'; put 'put ''M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjIl0sWyJlODQwIiwiXHU5NDJmIiwxNCwiXHU5NDNmIiw0MywiXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmIl0sWyJlODgwIiwiXHU5NDcwIiwyMCwi''@;'; put 'put ''XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3''@;'; put 'put ''NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3''@;'; put 'put ''XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2''@;'; put 'put ''ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5Il0sWyJlOTQwIiwiXHU5NTI3XHU5NTMz''@;'; put 'put ''XHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3Iiw3LCJcdTk1ODAiLDQyXSxbImU5ODAiLCJcdTk1YWIiLDMyLCJcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBc''@;'; put 'put ''dTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5''@;'; put 'put ''ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJc''@;'; put 'put ''dTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThm''@;'; put 'put ''ODdcdThmOGIiXSxbImVhNDAiLCJcdTk1Y2MiLDI3LCJcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBcdTk2MjMiLDYsIlx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1''@;'; put 'put ''OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1NyJdLFsiZWE4MCIsIlx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZCIsNCwiXHU5NjczXHU5Njc4IiwxMiwiXHU5Njg3XHU5Njg5''@;'; put 'put ''XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2''@;'; put 'put ''NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRi''@;'; put 'put ''XHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3''@;'; put 'put ''MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwIl0sWyJlYjQwIiwiXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkIiw5LCJcdTk2YTgiLDcsIlx1''@;'; put 'put ''OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZjYlx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNiIsOSwiXHU5NmUxIiw2LCJcdTk2ZWIiXSxbImViODAiLCJcdTk2ZWNcdTk2ZWRcdTk2ZWVc''@;'; put 'put ''dTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTciLDQsIlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQz''@;'; put 'put ''Zlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1''@;'; put 'put ''ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBm''@;'; put 'put ''NFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1''@;'; put 'put ''NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYiJdLFsiZWM0MCIsIlx1OTcyMSIsOCwiXHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzIiw0LCJcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2YiLDE4LCJc''@;'; put 'put ''dTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NmEiLDddLFsiZWM4MCIsIlx1OTc3Mlx1OTc3NVx1OTc3NyIsNCwiXHU5NzdkIiw3LCJcdTk3ODYiLDQsIlx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5''@;'; put 'put ''MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OSIsNCwiXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2''@;'; put 'put ''NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1''@;'; put 'put ''XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3''@;'; put 'put ''OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwIl0sWyJlZDQwIiwiXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0Iiw2LCJcdTk3YWNcdTk3YWVc''@;'; put 'put ''dTk3YjBcdTk3YjFcdTk3YjNcdTk3YjUiLDQ2XSxbImVkODAiLCJcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWUiLDQsIlx1OTdmNFx1OTdmNyIsMjMsIlx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1''@;'; put 'put ''NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1Nzgy''@;'; put 'put ''OVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1''@;'; put 'put ''NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OCJdLFsiZWU0MCIs''@;'; put 'put ''Ilx1OTgwZiIsNjJdLFsiZWU4MCIsIlx1OTg0ZSIsMzIsIlx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4''@;'; put 'put ''M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1''@;'; put 'put ''OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNiIsNCwiXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4Iiw2LCJcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJc''@;'; put 'put ''dTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWEiXSxbImVmNDAiLCJcdTk4NmYiLDUsIlx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOCIsMzcsIlx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThk''@;'; put 'put ''Y1x1OThkZFx1OThlMCIsNF0sWyJlZjgwIiwiXHU5OGU1XHU5OGU2XHU5OGU5IiwzMCwiXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBk''@;'; put 'put ''XHU5NTBlXHU5NTBmXHU5NTEyIiw0LCJcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1''@;'; put 'put ''NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjQiLDgsIlx1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1''@;'; put 'put ''NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNCJdLFsiZjA0MCIsIlx1OTkwOCIsNCwiXHU5OTBlXHU5OTBmXHU5OTExIiwyOCwiXHU5OTJmIiwyNl0sWyJmMDgwIiwiXHU5OTRhIiw5LCJcdTk5NTYiLDEyLCJcdTk5NjRcdTk5NjZcdTk5''@;'; put 'put ''NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjgiLDQsIlx1OWUzMlx1OWUzMVx1''@;'; put 'put ''OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2NiIsNiwiXHU5ZTcxXHU5ZTZk''@;'; put 'put ''XHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3''@;'; put 'put ''NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5Il0sWyJmMTQwIiwiXHU5OThjXHU5OThlXHU5OTlhIiwxMCwiXHU5OWE2XHU5OWE3XHU5OWE5Iiw0N10sWyJmMTgwIiwiXHU5OWQ5IiwzMiwiXHU3NjFiXHU3NjNjXHU3NjIyXHU3''@;'; put 'put ''NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4''@;'; put 'put ''XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4''@;'; put 'put ''OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2''@;'; put 'put ''XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzIl0sWyJmMjQwIiwiXHU5OWZhIiw2Ml0sWyJmMjgwIiwiXHU5YTM5IiwzMiwiXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1''@;'; put 'put ''XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4''@;'; put 'put ''NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFh''@;'; put 'put ''XHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyIl0s''@;'; put 'put ''WyJmMzQwIiwiXHU5YTVhIiwxNywiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5Iiw2LCJcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzYiLDQsIlx1''@;'; put 'put ''OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkYyJdLFsiZjM4MCIsIlx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFl''@;'; put 'put ''ZVx1OWFmMCIsOCwiXHU5YWZhXHU5YWZjIiw2LCJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3''@;'; put 'put ''ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlc''@;'; put 'put ''dTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdi''@;'; put 'put ''ODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGIiXSxbImY0NDAiLCJcdTliMDdcdTliMDkiLDUsIlx1OWIxMFx1OWIxMVx1OWIxMlx1''@;'; put 'put ''OWIxNCIsMTAsIlx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNCIsMTAsIlx1OWIzMFx1OWIzMVx1OWIzMyIsNywiXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1Iiw1XSxbImY0ODAiLCJcdTliNWIiLDMy''@;'; put 'put ''LCJcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJc''@;'; put 'put ''dTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdj''@;'; put 'put ''YzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRc''@;'; put 'put ''dThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjQiXSxbImY1NDAiLCJcdTliN2MiLDYyXSxbImY1ODAiLCJcdTliYmIiLDMyLCJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJc''@;'; put 'put ''dTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThk''@;'; put 'put ''YzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlc''@;'; put 'put ''dThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5''@;'; put 'put ''ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGMiXSxbImY2NDAiLCJcdTliZGMiLDYyXSxbImY2ODAiLCJcdTljMWIiLDMyLCJcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3''@;'; put 'put ''MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODUiLDUsIlx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1''@;'; put 'put ''OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZSIsNSwiXHU5Y2E1Iiw0LCJcdTljYWJcdTljYWRcdTljYWVcdTljYjAiLDcsIlx1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1''@;'; put 'put ''OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYiJdLFsiZjc0MCIsIlx1OWMzYyIsNjJdLFsiZjc4MCIsIlx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1''@;'; put 'put ''OWNhY1x1OWNhZlx1OWNiOVx1OWNiZSIsNCwiXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjIiw0LCJcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFc''@;'; put 'put ''dTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTli''@;'; put 'put ''NTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZc''@;'; put 'put ''dTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDQiXSxbImY4NDAiLCJcdTljZTMiLDYyXSxbImY4ODAiLCJcdTlkMjIi''@;'; put 'put ''LDMyXSxbImY5NDAiLCJcdTlkNDMiLDYyXSxbImY5ODAiLCJcdTlkODIiLDMyXSxbImZhNDAiLCJcdTlkYTMiLDYyXSxbImZhODAiLCJcdTlkZTIiLDMyXSxbImZiNDAiLCJcdTllMDMiLDI3LCJcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRc''@;'; put 'put ''dTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzQiLDksIlx1OWU4MCJdLFsiZmI4MCIsIlx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4''@;'; put 'put ''YyIsNSwiXHU5ZTk0Iiw4LCJcdTllOWVcdTllYTAiLDUsIlx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYSJdLFsiZmM0MCIsIlx1OWVhYiIsOCwiXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5ZWJmIiw0LCJcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2Jc''@;'; put 'put ''dTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjAiLDgsIlx1OWVmYVx1OWVmZFx1OWVmZiIsNl0sWyJmYzgwIiwiXHU5ZjA2Iiw0''@;'; put 'put ''LCJcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWEiLDUsIlx1OWYyMVx1OWYyMyIsOCwiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxIl0sWyJmZDQwIiwiXHU5ZjMyIiw0LCJcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2YiLDQsIlx1OWY0NSIsMTAs''@;'; put 'put ''Ilx1OWY1MiIsMzhdLFsiZmQ4MCIsIlx1OWY3OSIsNSwiXHU5ZjgxXHU5ZjgyXHU5ZjhkIiwxMSwiXHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExIiw0LCJcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjEiXSxbImZlNDAiLCJcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNc''@;'; put 'put ''dWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjkiXV0nKX0sMjExNjY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbIjgxNDEiLCJcdWFjMDJcdWFjMDNcdWFjMDVcdWFj''@;'; put 'put ''MDZcdWFjMGIiLDQsIlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNSIsNiwiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0Il0sWyI4MTYxIiwiXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxIiw5LCJcdWFjNGNcdWFj''@;'; put 'put ''NGUiLDUsIlx1YWM1NSJdLFsiODE4MSIsIlx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZCIsMTgsIlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3YiIsNCwiXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVh''@;'; put 'put ''Yzk1Iiw2LCJcdWFjOWVcdWFjYTIiLDUsIlx1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMSIsNiwiXHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkIiw3LCJcdWFjZDZcdWFjZDgiLDcsIlx1YWNlMlx1YWNl''@;'; put 'put ''M1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmNyIsNCwiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3Iiw0LCJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTMiXSxbIjgyNDEiLCJcdWFkMTRcdWFkMTVcdWFkMTZcdWFk''@;'; put 'put ''MTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjEiLDcsIlx1YWQyYVx1YWQyYlx1YWQyZSIsNV0sWyI4MjYxIiwiXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkIiw2LCJcdWFkNDZcdWFkNDhcdWFkNGEiLDUsIlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1''@;'; put 'put ''YWQ1NVx1YWQ1Nlx1YWQ1NyJdLFsiODI4MSIsIlx1YWQ1OSIsNywiXHVhZDYyXHVhZDY0Iiw3LCJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODMiLDQsIlx1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MSIs''@;'; put 'put ''MTAsIlx1YWQ5ZSIsNSwiXHVhZGE1IiwxNywiXHVhZGI4Iiw3LCJcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzkiLDYsIlx1YWRkMlx1YWRkNCIsNywiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1IiwxOF0sWyI4MzQxIiwiXHVhZGZhXHVhZGZi''@;'; put 'put ''XHVhZGZkXHVhZGZlXHVhZTAyIiw1LCJcdWFlMGFcdWFlMGNcdWFlMGUiLDUsIlx1YWUxNSIsN10sWyI4MzYxIiwiXHVhZTFkIiwxOCwiXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjIl0sWyI4MzgxIiwiXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVh''@;'; put 'put ''ZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3Iiw0LCJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzEiLDYsIlx1YWU3YVx1YWU3ZSIsNSwiXHVhZTg2Iiw1''@;'; put 'put ''LCJcdWFlOGQiLDQ2LCJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzUiLDYsIlx1YWVjZVx1YWVkMiIsNSwiXHVhZWRhXHVhZWRiXHVhZWRkIiw4XSxbIjg0NDEiLCJcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWUiLDUsIlx1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1''@;'; put 'put ''YWVmYVx1YWVmYlx1YWVmZCIsOF0sWyI4NDYxIiwiXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExIiwxOF0sWyI4NDgxIiwiXHVhZjI0Iiw3LCJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzUiLDYsIlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1''@;'; put 'put ''YWY0Nlx1YWY0N1x1YWY0YSIsNSwiXHVhZjUxIiwxMCwiXHVhZjVlIiw1LCJcdWFmNjYiLDE4LCJcdWFmN2EiLDUsIlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OSIsNiwiXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2Iiw1LCJcdWFmOWQiLDI2LCJcdWFmYmFcdWFm''@;'; put 'put ''YmJcdWFmYmRcdWFmYmUiXSxbIjg1NDEiLCJcdWFmYmZcdWFmYzEiLDUsIlx1YWZjYVx1YWZjY1x1YWZjZiIsNCwiXHVhZmQ1Iiw2LCJcdWFmZGQiLDRdLFsiODU2MSIsIlx1YWZlMiIsNSwiXHVhZmVhIiw1LCJcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjkiLDYsIlx1YjAw''@;'; put 'put ''Mlx1YjAwMyJdLFsiODU4MSIsIlx1YjAwNSIsNiwiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1Iiw2LCJcdWIwMWUiLDksIlx1YjAyOSIsMjYsIlx1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1''@;'; put 'put ''OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZSIsMjksIlx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NSIsNiwiXHViMDhlXHViMDkwXHViMDkyIiw1LCJcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTQiXSxbIjg2NDEiLCJcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIw''@;'; put 'put ''YjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmQiLDYsIlx1YjBjNlx1YjBjYSIsNSwiXHViMGQyIl0sWyI4NjYxIiwiXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5Iiw2LCJcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTYiLDEwXSxbIjg2ODEiLCJc''@;'; put 'put ''dWIwZjEiLDIyLCJcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWUiLDQsIlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEyZCIsNiwiXHViMTM2XHViMTNhIiw1LCJcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZc''@;'; put 'put ''dWIxNDdcdWIxNDkiLDYsIlx1YjE1Mlx1YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MSIsMjIsIlx1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4MyIsNCwiXHViMThhXHViMThjXHViMThlXHViMThmXHViMTkw''@;'; put 'put ''XHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkIl0sWyI4NzQxIiwiXHViMTllIiw5LCJcdWIxYTkiLDE1XSxbIjg3NjEiLCJcdWIxYjkiLDE4LCJcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDUiXSxbIjg3ODEiLCJcdWIxZDYi''@;'; put 'put ''LDUsIlx1YjFkZVx1YjFlMCIsNywiXHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxIiw3LCJcdWIxZmFcdWIxZmNcdWIxZmUiLDUsIlx1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZCIsNiwiXHViMjE2XHViMjE4XHViMjFhIiw1LCJcdWIyMjEiLDE4LCJcdWIyMzUiLDYs''@;'; put 'put ''Ilx1YjIzZCIsMjYsIlx1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MSIsNiwiXHViMjZhIiw0XSxbIjg4NDEiLCJcdWIyNmYiLDQsIlx1YjI3NiIsNSwiXHViMjdkIiw2LCJcdWIyODZcdWIyODdcdWIyODhcdWIyOGEiLDRdLFsiODg2MSIsIlx1YjI4Zlx1YjI5Mlx1''@;'; put 'put ''YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5YiIsNCwiXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3Il0sWyI4ODgxIiwiXHViMmI4IiwxNSwiXHViMmNhXHViMmNiXHViMmNk''@;'; put 'put ''XHViMmNlXHViMmNmXHViMmQxXHViMmQzIiw0LCJcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIz''@;'; put 'put ''MDkiLDYsIlx1YjMxMlx1YjMxNiIsNSwiXHViMzFkIiw1NCwiXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzIl0sWyI4OTQxIiwiXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHVi''@;'; put 'put ''Mzc5Iiw2LCJcdWIzODJcdWIzODYiLDUsIlx1YjM4ZCJdLFsiODk2MSIsIlx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NSIsMTAsIlx1YjNhMiIsNSwiXHViM2E5XHViM2FhXHViM2FiXHViM2FkIl0sWyI4OTgxIiwiXHViM2FlIiwyMSwiXHViM2M2XHViM2M3XHViM2M5XHVi''@;'; put 'put ''M2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5IiwxOCwiXHViM2ZkIiwxOCwiXHViNDExIiw2LCJcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRc''@;'; put 'put ''dWI0MWVcdWI0MWZcdWI0MjEiLDYsIlx1YjQyYVx1YjQyYyIsNywiXHViNDM1IiwxNV0sWyI4YTQxIiwiXHViNDQ1IiwxMCwiXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5Iiw2LCJcdWI0NjJcdWI0NjRcdWI0NjYiXSxbIjhhNjEiLCJcdWI0NjciLDQsIlx1YjQ2ZCIsMTgs''@;'; put 'put ''Ilx1YjQ4MVx1YjQ4MiJdLFsiOGE4MSIsIlx1YjQ4MyIsNCwiXHViNDg5IiwxOSwiXHViNDllIiw1LCJcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0YWJcdWI0YWQiLDcsIlx1YjRiNlx1YjRiOFx1YjRiYSIsNSwiXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3''@;'; put 'put ''XHViNGM5Iiw2LCJcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDYiLDUsIlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlNyIsNCwiXHViNGVlXHViNGYwXHViNGYyIiw1LCJcdWI0ZjkiLDI2LCJcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWQiXSxbIjhiNDEiLCJc''@;'; put 'put ''dWI1MWUiLDUsIlx1YjUyNlx1YjUyYiIsNCwiXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5Iiw2LCJcdWI1NDJcdWI1NDYiXSxbIjhiNjEiLCJcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTUiLDYsIlx1YjU1ZVx1''@;'; put 'put ''YjU2MiIsOF0sWyI4YjgxIiwiXHViNTZiIiw1MiwiXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2Iiw0LCJcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzUiLDYsIlx1YjVjZVx1YjVkMiIsNSwi''@;'; put 'put ''XHViNWQ5IiwxOCwiXHViNWVkIiwxOF0sWyI4YzQxIiwiXHViNjAwIiwxNSwiXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5Iiw0XSxbIjhjNjEiLCJcdWI2MWUiLDYsIlx1YjYyNiIsNSwiXHViNjJkIiw2LCJcdWI2MzUiLDVdLFsiOGM4MSIsIlx1YjYzYiIsMTIsIlx1YjY0''@;'; put 'put ''OSIsMjYsIlx1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OSIsNTAsIlx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNSIsNSwiXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyIiwxNl0sWyI4ZDQxIiwiXHViNmMzIiwxNiwiXHViNmQ1Iiw4XSxbIjhkNjEiLCJcdWI2ZGUiLDE3''@;'; put 'put ''LCJcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmEiXSxbIjhkODEiLCJcdWI2ZmIiLDQsIlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNiIsMzMsIlx1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMSIsNiwiXHViNzNhXHViNzNjIiw3LCJcdWI3NDVcdWI3''@;'; put 'put ''NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGQiLDYsIlx1Yjc1NiIsOSwiXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5Iiw2LCJcdWI3NzJcdWI3NzRcdWI3NzYiLDUsIlx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NSIsNiwiXHViNzhl''@;'; put 'put ''XHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllIl0sWyI4ZTQxIiwiXHViNzlmXHViN2ExIiw2LCJcdWI3YWFcdWI3YWUiLDUsIlx1YjdiNlx1YjdiN1x1YjdiOSIsOF0sWyI4ZTYxIiwiXHViN2MyIiw0LCJcdWI3YzhcdWI3Y2EiLDE5XSxbIjhlODEiLCJcdWI3ZGUi''@;'; put 'put ''LDEzLCJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjUiLDYsIlx1YjdmZVx1YjgwMiIsNCwiXHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExIiw2LCJcdWI4MWFcdWI4MWNcdWI4MWUiLDUsIlx1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZCIs''@;'; put 'put ''NiwiXHViODM2XHViODNhIiw1LCJcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDUiLDExLCJcdWI4NTJcdWI4NTQiLDcsIlx1Yjg1ZVx1Yjg1Zlx1Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NSIsNiwiXHViODZlXHViODcwXHViODcyIiw1LCJcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2QiLDddLFsiOGY0''@;'; put 'put ''MSIsIlx1Yjg4NSIsNywiXHViODhlIiwxN10sWyI4ZjYxIiwiXHViOGEwIiw3LCJcdWI4YTkiLDYsIlx1YjhiMVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOSIsNF0sWyI4ZjgxIiwiXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2Iiw1LCJcdWI4Y2RcdWI4Y2VcdWI4''@;'; put 'put ''Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDUiLDcsIlx1YjhkZVx1YjhlMFx1YjhlMiIsNSwiXHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxIiw2LCJcdWI4ZmFcdWI4ZmNcdWI4ZmUiLDUsIlx1YjkwNSIsMTgsIlx1YjkxOSIsNiwiXHViOTIxIiwyNiwiXHViOTNlXHViOTNm''@;'; put 'put ''XHViOTQxXHViOTQyXHViOTQzXHViOTQ1Iiw2LCJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTIiLDVdLFsiOTA0MSIsIlx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MSIsNiwiXHViOTZhXHViOTZjXHViOTZlIiw1LCJcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5''@;'; put 'put ''N2QiXSxbIjkwNjEiLCJcdWI5N2UiLDUsIlx1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4ZiIsMTVdLFsiOTA4MSIsIlx1Yjk5ZiIsMTIsIlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNSIsNiwiXHViOWJlXHViOWMwXHViOWMyIiw1LCJcdWI5Y2FcdWI5Y2JcdWI5Y2Rc''@;'; put 'put ''dWI5ZDMiLDQsIlx1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZCIsNiwiXHViOWY2XHViOWZiIiw0LCJcdWJhMDIiLDUsIlx1YmEwOSIsMTEsIlx1YmExNiIsMzMsIlx1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1''@;'; put 'put ''YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0NiJdLFsiOTE0MSIsIlx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZCIsNiwiXHViYTY2XHViYTZhIiw1XSxbIjkxNjEiLCJcdWJhNzJcdWJhNzNcdWJh''@;'; put 'put ''NzVcdWJhNzZcdWJhNzdcdWJhNzkiLDksIlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZCIsNV0sWyI5MTgxIiwiXHViYTkzIiwyMCwiXHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzIiw0LCJcdWJhYmFcdWJhYmNcdWJhYmUiLDUsIlx1YmFjNVx1YmFjNlx1''@;'; put 'put ''YmFjN1x1YmFjOSIsMTQsIlx1YmFkYSIsMzMsIlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNSIsNywiXHViYjBlXHViYjEwXHViYjEyIiw1LCJcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjEiLDZdLFsiOTI0MSIsIlx1YmIyOFx1YmIy''@;'; put 'put ''YVx1YmIyYyIsNywiXHViYjM3XHViYjM5XHViYjNhXHViYjNmIiw0LCJcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTIiXSxbIjkyNjEiLCJcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTkiLDcsIlx1YmI2Mlx1YmI2NCIsNywiXHViYjZkIiw0XSxb''@;'; put 'put ''IjkyODEiLCJcdWJiNzIiLDIxLCJcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTEiLDE4LCJcdWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWQiLDYsIlx1YmJiNVx1YmJiNlx1YmJiOCIsNywiXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHVi''@;'; put 'put ''YmM2XHViYmM3XHViYmM5Iiw2LCJcdWJiZDFcdWJiZDJcdWJiZDQiLDM1LCJcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDEiXSxbIjkzNDEiLCJcdWJjMDMiLDQsIlx1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1''@;'; put 'put ''YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNSJdLFsiOTM2MSIsIlx1YmMzNlx1YmMzN1x1YmMzOSIsNiwiXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxIiw4XSxbIjkzODEiLCJcdWJj''@;'; put 'put ''NWFcdWJjNWJcdWJjNWNcdWJjNWUiLDM3LCJcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGYiLDQsIlx1YmM5Nlx1YmM5OFx1YmM5YiIsNCwiXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5Iiw2LCJcdWJjYjJcdWJjYjYiLDUsIlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNj''@;'; put 'put ''Mlx1YmNjM1x1YmNjNSIsNywiXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkIiwyMiwiXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkIl0sWyI5NDQxIiwiXHViY2ZlIiw1LCJcdWJkMDZcdWJkMDhcdWJkMGEiLDUsIlx1YmQx''@;'; put 'put ''MVx1YmQxMlx1YmQxM1x1YmQxNSIsOF0sWyI5NDYxIiwiXHViZDFlIiw1LCJcdWJkMjUiLDYsIlx1YmQyZCIsMTJdLFsiOTQ4MSIsIlx1YmQzYSIsNSwiXHViZDQxIiw2LCJcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTEiLDYsIlx1YmQ1YSIsOSwiXHViZDY1XHViZDY2XHVi''@;'; put 'put ''ZDY3XHViZDY5IiwyMiwiXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiIiw0LCJcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWQiLDYsIlx1YmRhNSIsMTAsIlx1YmRiMSIsNiwiXHViZGI5IiwyNF0sWyI5NTQxIiwiXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3''@;'; put 'put ''XHViZGQ5XHViZGRhXHViZGRiXHViZGRkIiwxMSwiXHViZGVhIiw1LCJcdWJkZjEiXSxbIjk1NjEiLCJcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjkiLDYsIlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNiIsNSwiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzIl0sWyI5''@;'; put 'put ''NTgxIiwiXHViZTE1Iiw2LCJcdWJlMWVcdWJlMjAiLDM1LCJcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGYiLDQsIlx1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2YiIsNCwi''@;'; put 'put ''XHViZTcyXHViZTc2Iiw0LCJcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODUiLDYsIlx1YmU4ZVx1YmU5MiIsNSwiXHViZTlhIiwxMywiXHViZWE5IiwxNF0sWyI5NjQxIiwiXHViZWI4IiwyMywiXHViZWQyXHViZWQzIl0sWyI5NjYxIiwiXHViZWQ1XHViZWQ2XHViZWQ5Iiw2''@;'; put 'put ''LCJcdWJlZTFcdWJlZTJcdWJlZTYiLDUsIlx1YmVlZCIsOF0sWyI5NjgxIiwiXHViZWY2IiwxMCwiXHViZjAyIiw1LCJcdWJmMGEiLDEzLCJcdWJmMWFcdWJmMWUiLDMzLCJcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDkiLDYsIlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1NiIs''@;'; put 'put ''NDRdLFsiOTc0MSIsIlx1YmY4MyIsMTYsIlx1YmY5NSIsOF0sWyI5NzYxIiwiXHViZjllIiwxNywiXHViZmIxIiw3XSxbIjk3ODEiLCJcdWJmYjkiLDExLCJcdWJmYzYiLDUsIlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNSIsNiwiXHViZmRkXHViZmRlXHViZmUwXHViZmUy''@;'; put 'put ''Iiw4OSwiXHVjMDNkXHVjMDNlXHVjMDNmIl0sWyI5ODQxIiwiXHVjMDQwIiwxNiwiXHVjMDUyIiw1LCJcdWMwNTlcdWMwNWFcdWMwNWIiXSxbIjk4NjEiLCJcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjEiLDYsIlx1YzA2YSIsMTVdLFsiOTg4MSIsIlx1YzA3YSIsMjEsIlx1YzA5Mlx1YzA5M1x1''@;'; put 'put ''YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OSIsNiwiXHVjMGEyXHVjMGE0XHVjMGE2Iiw1LCJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjciLDQsIlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBjZFx1YzBjZVx1YzBjZlx1YzBkMSIsNiwiXHVjMGRhXHVj''@;'; put 'put ''MGRlIiw1LCJcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWQiLDYsIlx1YzBmNlx1YzBmOFx1YzBmYSIsNSwiXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5Iiw2LCJcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTYiLDUsIlx1YzEyMVx1YzEy''@;'; put 'put ''Mlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZSJdLFsiOTk0MSIsIlx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MSIsNiwiXHVjMTRhXHVjMTRlIiw1LCJcdWMxNTZcdWMxNTciXSxbIjk5NjEiLCJcdWMx''@;'; put 'put ''NTlcdWMxNWFcdWMxNWJcdWMxNWQiLDYsIlx1YzE2Nlx1YzE2YSIsNSwiXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiIl0sWyI5OTgxIiwiXHVjMTdjIiw4LCJcdWMxODYiLDUsIlx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5''@;'; put 'put ''NyIsNCwiXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxIiwxMSwiXHVjMWJlIiw1LCJcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2QiLDYsIlx1YzFkNVx1YzFkNlx1YzFk''@;'; put 'put ''OSIsNiwiXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5Iiw2LCJcdWMxZjJcdWMxZjQiLDcsIlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNSIsNiwiXHVjMjBlXHVjMjEwXHVjMjEyIiw1LCJcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFc''@;'; put 'put ''dWMyMjJcdWMyMjMiXSxbIjlhNDEiLCJcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzUiLDE2XSxbIjlhNjEiLCJcdWMyNDZcdWMyNDdcdWMyNDkiLDYsIlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OSIsNiwiXHVj''@;'; put 'put ''MjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2Il0sWyI5YTgxIiwiXHVjMjY3Iiw0LCJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzUiLDYsIlx1YzI3ZVx1YzI4MFx1YzI4MiIsNSwiXHVjMjhhIiw1LCJcdWMyOTEiLDYsIlx1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZSIsNSwi''@;'; put 'put ''XHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlIiw1LCJcdWMyYjZcdWMyYjhcdWMyYmEiLDMzLCJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTUiLDUsIlx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJm''@;'; put 'put ''Zlx1YzMwMSIsNiwiXHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmIl0sWyI5YjQxIiwiXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkIiw2LCJcdWMzMjZcdWMzMjdcdWMzMmEiLDhdLFsiOWI2MSIsIlx1YzMzMyIsMTcsIlx1YzM0NiIsN10sWyI5''@;'; put 'put ''YjgxIiwiXHVjMzRlIiwyNSwiXHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczIiw0LCJcdWMzN2FcdWMzN2JcdWMzN2UiLDUsIlx1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZCIsNTAsIlx1YzNjMSIsMjIsIlx1YzNkYSJdLFsiOWM0MSIs''@;'; put 'put ''Ilx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlMyIsNCwiXHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlIiw1LCJcdWMzZjZcdWMzZjdcdWMzZjkiLDVdLFsiOWM2MSIsIlx1YzNmZiIsOCwiXHVjNDA5Iiw2LCJcdWM0MTEiLDldLFsiOWM4MSIsIlx1YzQxYiIsOCwiXHVjNDI1Iiw2LCJcdWM0''@;'; put 'put ''MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzUiLDYsIlx1YzQzZSIsOSwiXHVjNDQ5IiwyNiwiXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkIiw2LCJcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2EiLDUsIlx1YzQ4MSIsMTgsIlx1YzQ5NSIsNiwiXHVjNDlk''@;'; put 'put ''IiwxMl0sWyI5ZDQxIiwiXHVjNGFhIiwxMywiXHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkIiw4XSxbIjlkNjEiLCJcdWM0YzYiLDI1XSxbIjlkODEiLCJcdWM0ZTAiLDgsIlx1YzRlYSIsNSwiXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVj''@;'; put 'put ''NGZlXHVjNTAyIiw5LCJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTUiLDYsIlx1YzUxZCIsMTAsIlx1YzUyYVx1YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMSIsNiwiXHVjNTNhXHVjNTNjXHVjNTNlIiw1LCJcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1''@;'; put 'put ''NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjkiLDYsIlx1YzU3Mlx1YzU3NiIsNSwiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVj''@;'; put 'put ''NThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0Il0sWyI5ZTQxIiwiXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExIiw3LCJcdWM1YWEiLDksIlx1YzViNiJdLFsiOWU2MSIsIlx1YzViN1x1YzViYVx1YzViZiIsNCwiXHVjNWNiXHVjNWNkXHVj''@;'; put 'put ''NWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5Iiw2LCJcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTciXSxbIjllODEiLCJcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJc''@;'; put 'put ''dWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTEiLDYsIlx1YzYxYVx1YzYxZCIsNiwiXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNm''@;'; put 'put ''XHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5Iiw2LCJcdWM2NTJcdWM2NTYiLDUsIlx1YzY1ZVx1YzY1Zlx1YzY2MSIsMTAsIlx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3MiIsNSwiXHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxIiw2LCJcdWM2OGFcdWM2OGNc''@;'; put 'put ''dWM2OGUiLDUsIlx1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZCIsNiwiXHVjNmE2Il0sWyI5ZjQxIiwiXHVjNmE4XHVjNmFhIiw1LCJcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmIiLDQsIlx1YzZjMlx1YzZjNFx1YzZjNiIsNSwiXHVjNmNlIl0sWyI5ZjYx''@;'; put 'put ''IiwiXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1Iiw2LCJcdWM2ZGVcdWM2ZGZcdWM2ZTIiLDUsIlx1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMiJdLFsiOWY4MSIsIlx1YzZmMyIsNCwiXHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlIiw1LCJcdWM3MDZcdWM3''@;'; put 'put ''MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGQiLDYsIlx1YzcxNlx1YzcxOFx1YzcxYSIsNSwiXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5Iiw2LCJcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3''@;'; put 'put ''NDNcdWM3NDUiLDQsIlx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MSIsNiwiXHVjNzY5XHVjNzZhXHVjNzZjIiw3LCJcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3''@;'; put 'put ''OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWIiLDQsIlx1YzdhMlx1YzdhNyIsNCwiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3Il0sWyJhMDQxIiwiXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVj''@;'; put 'put ''N2MyIiw1LCJcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDEiLDYsIlx1YzdkOVx1YzdkYVx1YzdkYlx1YzdkYyJdLFsiYTA2MSIsIlx1YzdkZSIsNSwiXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkIiwxM10sWyJhMDgxIiwiXHVjN2ZiIiw0LCJcdWM4MDJc''@;'; put 'put ''dWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGIiLDQsIlx1YzgxMlx1YzgxNFx1YzgxNyIsNCwiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1Iiw2LCJcdWM4MmVcdWM4MzBcdWM4MzIiLDUsIlx1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1''@;'; put 'put ''Yzg0MSIsNiwiXHVjODRhXHVjODRiXHVjODRlIiw1LCJcdWM4NTUiLDI2LCJcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2IiLDQsIlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZSIsNSwiXHVjODk1Iiw3LCJcdWM4OWVcdWM4YTBcdWM4YTJcdWM4''@;'; put 'put ''YTNcdWM4YTQiXSxbImExNDEiLCJcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTkiLDE4LCJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzEiXSxbImExNjEiLCJcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2QiLDYsIlx1YzhkNlx1YzhkOFx1YzhkYSIs''@;'; put 'put ''NSwiXHVjOGUyXHVjOGUzXHVjOGU1Il0sWyJhMTgxIiwiXHVjOGU2IiwxNCwiXHVjOGY2Iiw1LCJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDciLDQsIlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIwMjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1''@;'; put 'put ''ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsOSwiXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1''@;'; put 'put ''MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFc''@;'; put 'put ''dTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTIiXSxbImEyNDEiLCJcdWM5MTBcdWM5MTIiLDUsIlx1YzkxOSIsMThdLFsiYTI2MSIsIlx1YzkyZCIs''@;'; put 'put ''NiwiXHVjOTM1IiwxOF0sWyJhMjgxIiwiXHVjOTQ4Iiw3LCJcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTkiLDYsIlx1Yzk2Mlx1Yzk2NCIsNywiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1''@;'; put 'put ''MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJc''@;'; put 'put ''dTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIy''@;'; put 'put ''XHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZSJdLFsiYTM0MSIsIlx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NSIsNiwiXHVjOTdkIiwxMCwiXHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmIl0sWyJhMzYxIiwiXHVjOTkxIiw2LCJcdWM5OWFcdWM5OWNcdWM5OWUiLDE2XSxbImEzODEi''@;'; put 'put ''LCJcdWM5YWYiLDE2LCJcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2IiLDQsIlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1YzlkYlx1ZmYwMSIsNTgsIlx1ZmZlNlx1ZmYzZCIsMzIsIlx1ZmZlMyJdLFsiYTQ0MSIsIlx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1''@;'; put 'put ''YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMiIsNSwiXHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0Il0sWyJhNDYxIiwiXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlIiw1LCJcdWNhMTVcdWNhMTZcdWNhMTdc''@;'; put 'put ''dWNhMTkiLDEyXSxbImE0ODEiLCJcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmEiLDI4LCJcdTMxMzEiLDkzXSxbImE1NDEiLCJcdWNhNDciLDQsIlx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NSIsNiwiXHVjYTVlXHVjYTYyIiw1LCJcdWNhNjlcdWNhNmEiXSxbImE1NjEiLCJc''@;'; put 'put ''dWNhNmIiLDE3LCJcdWNhN2UiLDUsIlx1Y2E4NVx1Y2E4NiJdLFsiYTU4MSIsIlx1Y2E4NyIsMTYsIlx1Y2E5OSIsMTQsIlx1MjE3MCIsOV0sWyJhNWIwIiwiXHUyMTYwIiw5XSxbImE1YzEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTVlMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0s''@;'; put 'put ''WyJhNjQxIiwiXHVjYWE4IiwxOSwiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1Il0sWyJhNjYxIiwiXHVjYWM2Iiw1LCJcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGEiLDUsIlx1Y2FlMSIsNl0sWyJhNjgxIiwiXHVjYWU4XHVjYWU5''@;'; put 'put ''XHVjYWVhXHVjYWViXHVjYWVkIiw2LCJcdWNhZjUiLDE4LCJcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1''@;'; put 'put ''MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1Mjlc''@;'; put 'put ''dTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDMiLDddLFsiYTc0MSIsIlx1Y2IwYiIsNCwiXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5Iiw2LCJcdWNiMjIiLDdd''@;'; put 'put ''LFsiYTc2MSIsIlx1Y2IyYSIsMjIsIlx1Y2I0Mlx1Y2I0M1x1Y2I0NCJdLFsiYTc4MSIsIlx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MSIsNiwiXHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlIiw1LCJcdWNiNjUiLDcsIlx1MzM5NVx1MzM5Nlx1''@;'; put 'put ''MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OSIsOSwiXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwIiw5LCJcdTMzODAiLDQsIlx1MzNiYSIsNSwiXHUzMzkwIiw0LCJcdTIx''@;'; put 'put ''MjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzYiXSxbImE4NDEiLCJcdWNiNmQiLDEwLCJcdWNiN2Ei''@;'; put 'put ''LDE0XSxbImE4NjEiLCJcdWNiODkiLDE4LCJcdWNiOWQiLDZdLFsiYTg4MSIsIlx1Y2JhNCIsMTksIlx1Y2JiOSIsMTEsIlx4YzZceGQwXHhhYVx1MDEyNiJdLFsiYThhNiIsIlx1MDEzMiJdLFsiYThhOCIsIlx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YSJdLFsi''@;'; put 'put ''YThiMSIsIlx1MzI2MCIsMjcsIlx1MjRkMCIsMjUsIlx1MjQ2MCIsMTQsIlx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZSJdLFsiYTk0MSIsIlx1Y2JjNSIsMTQsIlx1Y2JkNSIsMTBdLFsiYTk2MSIsIlx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2Jl''@;'; put 'put ''NVx1Y2JlNlx1Y2JlOFx1Y2JlYSIsMThdLFsiYTk4MSIsIlx1Y2JmZCIsMTQsIlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2MxNSIsNiwiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAx''@;'; put 'put ''NDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDAiLDI3LCJcdTI0OWMiLDI1LCJcdTI0NzQiLDE0LCJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODQiXSxbImFhNDEiLCJcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRc''@;'; put 'put ''dWNjMmZcdWNjMzEiLDYsIlx1Y2MzYVx1Y2MzZiIsNCwiXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlIl0sWyJhYTYxIiwiXHVjYzRmIiw0LCJcdWNjNTZcdWNjNWEiLDUsIlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OSIsNiwiXHVjYzcxXHVj''@;'; put 'put ''YzcyIl0sWyJhYTgxIiwiXHVjYzczXHVjYzc0XHVjYzc2IiwyOSwiXHUzMDQxIiw4Ml0sWyJhYjQxIiwiXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExIiw2LCJcdWNjYWFcdWNjYWUiLDUsIlx1Y2NiNlx1Y2NiN1x1Y2NiOSJdLFsi''@;'; put 'put ''YWI2MSIsIlx1Y2NiYVx1Y2NiYlx1Y2NiZCIsNiwiXHVjY2M2XHVjY2M4XHVjY2NhIiw1LCJcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDUiLDVdLFsiYWI4MSIsIlx1Y2NkYiIsOCwiXHVjY2U1Iiw2LCJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjEiLDEyLCJcdTMwYTEiLDg1XSxbImFjNDEiLCJc''@;'; put 'put ''dWNjZmVcdWNjZmZcdWNkMDBcdWNkMDIiLDUsIlx1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMSIsNiwiXHVjZDFhXHVjZDFjXHVjZDFlXHVjZDFmXHVjZDIwIl0sWyJhYzYxIiwiXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJi''@;'; put 'put ''XHVjZDJkIiwxMSwiXHVjZDNhIiw0XSxbImFjODEiLCJcdWNkM2YiLDI4LCJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYWNkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhZDQxIiwiXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1Iiw2''@;'; put 'put ''LCJcdWNkNmVcdWNkNzBcdWNkNzIiLDUsIlx1Y2Q3OSIsN10sWyJhZDYxIiwiXHVjZDgxIiw2LCJcdWNkODkiLDEwLCJcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWYiXSxbImFkODEiLCJcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThc''@;'; put 'put ''dWNkYWEiLDUsIlx1Y2RiMSIsMTgsIlx1Y2RjNSJdLFsiYWU0MSIsIlx1Y2RjNiIsNSwiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxIiwxNl0sWyJhZTYxIiwiXHVjZGUyIiw1LCJcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjEiLDYsIlx1Y2RmYVx1Y2RmY1x1Y2Rm''@;'; put 'put ''ZSIsNF0sWyJhZTgxIiwiXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkIiw2LCJcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWEiLDUsIlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2UyYiJdLFsiYWY0MSIsIlx1''@;'; put 'put ''Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNiIsMTldLFsiYWY2MSIsIlx1Y2U0YSIsMTMsIlx1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2MiIsNSwiXHVjZTZhXHVjZTZjIl0sWyJhZjgxIiwiXHVjZTZlIiw1LCJcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNl''@;'; put 'put ''N2JcdWNlN2QiLDYsIlx1Y2U4Nlx1Y2U4OFx1Y2U4YSIsNSwiXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5Il0sWyJiMDQxIiwiXHVjZTlhIiw1LCJcdWNlYTJcdWNlYTYiLDUsIlx1Y2VhZSIsMTJdLFsiYjA2MSIsIlx1Y2ViYiIsNSwiXHVjZWMyIiwxOV0sWyJiMDgxIiwi''@;'; put 'put ''XHVjZWQ2IiwxMywiXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkIiw2LCJcdWNlZjZcdWNlZmEiLDUsIlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMCIsNywiXHVhYzE5Iiw0LCJcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBc''@;'; put 'put ''dWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFj''@;'; put 'put ''OTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThc''@;'; put 'put ''dWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDYiXSxbImIxNDEiLCJcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDkiLDYsIlx1Y2YxMlx1Y2YxNFx1Y2YxNiIsNSwiXHVjZjFkXHVjZjFl''@;'; put 'put ''XHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzIl0sWyJiMTYxIiwiXHVjZjI1Iiw2LCJcdWNmMmVcdWNmMzIiLDUsIlx1Y2YzOSIsMTFdLFsiYjE4MSIsIlx1Y2Y0NSIsMTQsIlx1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZCIsNiwiXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVj''@;'; put 'put ''ZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDcz''@;'; put 'put ''XHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVh''@;'; put 'put ''ZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0''@;'; put 'put ''XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4Il0sWyJiMjQxIiwiXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5Iiw2LCJcdWNmODFcdWNmODJcdWNmODNcdWNm''@;'; put 'put ''ODRcdWNmODYiLDUsIlx1Y2Y4ZCJdLFsiYjI2MSIsIlx1Y2Y4ZSIsMTgsIlx1Y2ZhMiIsNSwiXHVjZmE5Il0sWyJiMjgxIiwiXHVjZmFhIiw1LCJcdWNmYjEiLDE4LCJcdWNmYzUiLDYsIlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWVi''@;'; put 'put ''ZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1''@;'; put 'put ''YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZj''@;'; put 'put ''ZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1''@;'; put 'put ''YjA1N1x1YjA1OSJdLFsiYjM0MSIsIlx1Y2ZjYyIsMTksIlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOSJdLFsiYjM2MSIsIlx1Y2ZlYSIsNSwiXHVjZmYyXHVjZmY0XHVjZmY2Iiw1LCJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDUiLDVdLFsi''@;'; put 'put ''YjM4MSIsIlx1ZDAwYiIsNSwiXHVkMDEyIiw1LCJcdWQwMTkiLDE5LCJcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWIiLDQs''@;'; put 'put ''Ilx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1''@;'; put 'put ''YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4''@;'; put 'put ''Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZCJdLFsiYjQ0MSIsIlx1ZDAyZSIsNSwiXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkIiw2LCJcdWQwNDZcdWQw''@;'; put 'put ''NDhcdWQwNGEiLDVdLFsiYjQ2MSIsIlx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OSIsNiwiXHVkMDYxIiwxMCwiXHVkMDZlXHVkMDZmIl0sWyJiNDgxIiwiXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1Iiw2LCJcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODIiLDE4LCJc''@;'; put 'put ''dWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIy''@;'; put 'put ''N2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRc''@;'; put 'put ''dWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWIiLDQsIlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmNyIsNCwiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzVi''@;'; put 'put ''XHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1Il0sWyJiNTQxIiwiXHVkMDk1IiwxNCwiXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVkMGFiXHVkMGFkIiw1XSxbImI1NjEiLCJcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmEiLDUsIlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1''@;'; put 'put ''ZDBjYSIsNSwiXHVkMGQyXHVkMGQ2Iiw0XSxbImI1ODEiLCJcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTUiLDYsIlx1ZDBlZVx1ZDBmMiIsNSwiXHVkMGY5IiwxMSwiXHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgw''@;'; put 'put ''XHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHViM2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHVi''@;'; put 'put ''M2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYwXHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMw''@;'; put 'put ''XHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHViNGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHVi''@;'; put 'put ''NTMxXHViNTM0XHViNTM4Il0sWyJiNjQxIiwiXHVkMTA1Iiw3LCJcdWQxMGUiLDE3XSxbImI2NjEiLCJcdWQxMjAiLDE1LCJcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2UiXSxbImI2ODEiLCJcdWQxM2ZcdWQxNDJcdWQxNDYiLDUs''@;'; put 'put ''Ilx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NSIsNiwiXHVkMTVlXHVkMTYwXHVkMTYyIiw1LCJcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1''@;'; put 'put ''NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFc''@;'; put 'put ''dWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3''@;'; put 'put ''MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTciXSxbImI3''@;'; put 'put ''NDEiLCJcdWQxNmUiLDEzLCJcdWQxN2QiLDYsIlx1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YSJdLFsiYjc2MSIsIlx1ZDE4YiIsMjAsIlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhNyJdLFsiYjc4MSIsIlx1ZDFhOSIsNiwiXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4''@;'; put 'put ''XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxIiwxNCwiXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHVi''@;'; put 'put ''N2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYw''@;'; put 'put ''XHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHVi''@;'; put 'put ''OGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5Il0sWyJiODQxIiwiXHVkMWQwIiw3LCJcdWQxZDkiLDE3XSxbImI4NjEiLCJcdWQxZWIiLDgs''@;'; put 'put ''Ilx1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOSIsMTNdLFsiYjg4MSIsIlx1ZDIwOFx1ZDIwYSIsNSwiXHVkMjExIiwyNCwiXHViOTZiXHViOTZkXHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIw''@;'; put 'put ''XHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlIiw0LCJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJh''@;'; put 'put ''MDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhc''@;'; put 'put ''dWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmMiXSxbImI5NDEiLCJcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQy''@;'; put 'put ''MzJcdWQyMzNcdWQyMzUiLDYsIlx1ZDIzZVx1ZDI0MFx1ZDI0MiIsNSwiXHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjIl0sWyJiOTYxIiwiXHVkMjRkIiwxNCwiXHVkMjVkIiw2LCJcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjgiXSxbImI5ODEiLCJcdWQyNjkiLDIyLCJcdWQyODJcdWQyODNcdWQy''@;'; put 'put ''ODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdc''@;'; put 'put ''dWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJj''@;'; put 'put ''MDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTQiLDQsIlx1YmMxYiIsNCwiXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQxXHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHVi''@;'; put 'put ''YzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3Il0sWyJiYTQxIiwiXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2Iiw1LCJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNc''@;'; put 'put ''dWQyYTUiLDYsIlx1ZDJhZCJdLFsiYmE2MSIsIlx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMiIsNSwiXHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzIiw0LCJcdWQyY2FcdWQyY2MiLDVdLFsiYmE4MSIsIlx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJk''@;'; put 'put ''YVx1ZDJkYlx1ZDJkZCIsNiwiXHVkMmU2Iiw5LCJcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJj''@;'; put 'put ''YzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlc''@;'; put 'put ''dWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJl''@;'; put 'put ''MDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjQiXSxbImJiNDEiLCJcdWQyZmIiLDQsIlx1''@;'; put 'put ''ZDMwMlx1ZDMwNFx1ZDMwNiIsNSwiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3Iiw0LCJcdWQzMWVcdWQzMjJcdWQzMjMiXSxbImJiNjEiLCJcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzEiLDYsIlx1ZDMzYVx1ZDMzZSIs''@;'; put 'put ''NSwiXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5Il0sWyJiYjgxIiwiXHVkMzRhIiwzMSwiXHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTczXHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5''@;'; put 'put ''XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHViZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHVi''@;'; put 'put ''ZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYwXHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIw''@;'; put 'put ''XHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVjMGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0Il0sWyJiYzQxIiwiXHVkMzZhIiwxNywiXHVkMzdlXHVkMzdmXHVkMzgxXHVk''@;'; put 'put ''MzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3Il0sWyJiYzYxIiwiXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyIiw1LCJcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTEiLDYsIlx1ZDNhYVx1ZDNhY1x1ZDNhZSJdLFsiYmM4MSIsIlx1ZDNhZiIsNCwiXHVk''@;'; put 'put ''M2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkIiw2LCJcdWQzYzZcdWQzYzdcdWQzY2EiLDUsIlx1ZDNkMSIsNSwiXHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVjMTA4XHVjMTEwXHVjMTE1XHVjMTFjIiw0LCJcdWMx''@;'; put 'put ''MjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlc''@;'; put 'put ''dWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMx''@;'; put 'put ''ZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmQiXSxbImJkNDEiLCJcdWQzZDdcdWQzZDkiLDcsIlx1ZDNlMlx1''@;'; put 'put ''ZDNlNCIsNywiXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3Il0sWyJiZDYxIiwiXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyIiw1LCJcdWQ0MDkiLDEzXSxbImJkODEiLCJcdWQ0MTciLDUsIlx1ZDQxZSIsMjUsIlx1YzIy''@;'; put 'put ''Zlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1''@;'; put 'put ''YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMx''@;'; put 'put ''NFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1''@;'; put 'put ''YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMCJdLFsiYmU0MSIsIlx1ZDQzOCIsNywiXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1IiwxNF0sWyJiZTYxIiwiXHVkNDU0Iiw3LCJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0''@;'; put 'put ''NjJcdWQ0NjNcdWQ0NjUiLDcsIlx1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3MiJdLFsiYmU4MSIsIlx1ZDQ3MyIsNCwiXHVkNDdhXHVkNDdiXHVkNDdkXHVkNDdlXHVkNDgxXHVkNDgzIiw0LCJcdWQ0OGFcdWQ0OGNcdWQ0OGUiLDUsIlx1ZDQ5NSIsOCwiXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4''@;'; put 'put ''XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVjNGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVj''@;'; put 'put ''NTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRlXHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcx''@;'; put 'put ''XHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVjNTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0Iiw2''@;'; put 'put ''LCJcdWM1Y2NcdWM1Y2UiXSxbImJmNDEiLCJcdWQ0OWUiLDEwLCJcdWQ0YWEiLDE0XSxbImJmNjEiLCJcdWQ0YjkiLDE4LCJcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDUiXSxbImJmODEiLCJcdWQ0ZDYiLDUsIlx1ZDRkZFx1ZDRkZVx1ZDRlMCIsNywiXHVkNGU5''@;'; put 'put ''XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxIiw2LCJcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmMiLDUsIlx1YzYw''@;'; put 'put ''NVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1''@;'; put 'put ''YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZi''@;'; put 'put ''MVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOCJdLFsiYzA0MSIsIlx1ZDRmZSIsNSwiXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVk''@;'; put 'put ''NTBkIiw2LCJcdWQ1MTZcdWQ1MTgiLDVdLFsiYzA2MSIsIlx1ZDUxZSIsMjVdLFsiYzA4MSIsIlx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NSIsNiwiXHVkNTRlXHVkNTUwXHVkNTUyIiw1LCJcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1''@;'; put 'put ''NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhcdWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3Mzdc''@;'; put 'put ''dWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTEiLDcsIlx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4''@;'; put 'put ''ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1''@;'; put 'put ''YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYSJdLFsiYzE0MSIsIlx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZSIsNSwiXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkIiw2LCJcdWQ1ODZcdWQ1OGFc''@;'; put 'put ''dWQ1OGIiXSxbImMxNjEiLCJcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTEiLDE5LCJcdWQ1YTZcdWQ1YTciXSxbImMxODEiLCJcdWQ1YTgiLDMxLCJcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4''@;'; put 'put ''MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThc''@;'; put 'put ''dWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5''@;'; put 'put ''NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDMiXSxbImMy''@;'; put 'put ''NDEiLCJcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDMiLDQsIlx1ZDVkYVx1ZDVkY1x1ZDVkZSIsNSwiXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlIl0sWyJjMjYxIiwiXHVkNWVmIiw0LCJcdWQ1ZjZcdWQ1ZjhcdWQ1ZmEiLDUsIlx1''@;'; put 'put ''ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOSIsNiwiXHVkNjEyIl0sWyJjMjgxIiwiXHVkNjE2Iiw1LCJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjUiLDcsIlx1ZDYyZSIsOSwiXHVkNjNhXHVkNjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVj''@;'; put 'put ''OWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVjYTI5XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVj''@;'; put 'put ''XHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0XHVjYjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVj''@;'; put 'put ''YjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVjYzFjXHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4''@;'; put 'put ''XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiIl0sWyJjMzQxIiwiXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVk''@;'; put 'put ''NjU5XHVkNjVhXHVkNjViXHVkNjVkIiw0XSxbImMzNjEiLCJcdWQ2NjIiLDQsIlx1ZDY2OFx1ZDY2YSIsNSwiXHVkNjcyXHVkNjczXHVkNjc1IiwxMV0sWyJjMzgxIiwiXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2Iiw1LCJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTUiLDcs''@;'; put 'put ''Ilx1ZDY5ZVx1ZDZhMFx1ZDZhMiIsNSwiXHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVj''@;'; put 'put ''Y2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFk''@;'; put 'put ''XHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVj''@;'; put 'put ''ZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1Il0sWyJjNDQxIiwiXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxIiw3LCJcdWQ2YmFcdWQ2YmMi''@;'; put 'put ''LDcsIlx1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYiJdLFsiYzQ2MSIsIlx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYSIsNSwiXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5Iiw0XSxbImM0ODEi''@;'; put 'put ''LCJcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjYiLDUsIlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNSIsMTEsIlx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1''@;'; put 'put ''Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2Vm''@;'; put 'put ''NVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1''@;'; put 'put ''Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAz''@;'; put 'put ''NVx1ZDAzOFx1ZDAzYyJdLFsiYzU0MSIsIlx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMSIsNiwiXHVkNzJhXHVkNzJjXHVkNzJlIiw1LCJcdWQ3MzZcdWQ3MzdcdWQ3MzkiXSxbImM1NjEiLCJcdWQ3M2FcdWQ3M2JcdWQ3M2QiLDYsIlx1ZDc0''@;'; put 'put ''NVx1ZDc0Nlx1ZDc0OFx1ZDc0YSIsNSwiXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhIiw0XSxbImM1ODEiLCJcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzUiLDYsIlx1ZDc3ZVx1''@;'; put 'put ''ZDc3Zlx1ZDc4MFx1ZDc4MiIsNSwiXHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3''@;'; put 'put ''XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVkMTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVk''@;'; put 'put ''MTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIwXHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJj''@;'; put 'put ''XHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjIl0sWyJjNjQxIiwiXHVkNzhkXHVkNzhlXHVkNzhmXHVkNzkxIiw2LCJcdWQ3OWFcdWQ3OWNcdWQ3OWUiLDVd''@;'; put 'put ''LFsiYzZhMSIsIlx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJl''@;'; put 'put ''NFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1''@;'; put 'put ''ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNj''@;'; put 'put ''OFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMSJdLFsiYzdhMSIsIlx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1''@;'; put 'put ''ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUz''@;'; put 'put ''ZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1''@;'; put 'put ''ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMCJdLFsi''@;'; put 'put ''YzhhMSIsIlx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1''@;'; put 'put ''ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcx''@;'; put 'put ''OFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1''@;'; put 'put ''ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZCJdLFsiY2FhMSIsIlx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1Njdi''@;'; put 'put ''Nlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1''@;'; put 'put ''NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUz''@;'; put 'put ''NFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NSJdLFsiY2Jh''@;'; put 'put ''MSIsIlx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIx''@;'; put 'put ''Ylx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1''@;'; put 'put ''N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3''@;'; put 'put ''MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMiJdLFsiY2NhMSIsIlx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1''@;'; put 'put ''ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZk''@;'; put 'put ''M1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1''@;'; put 'put ''N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMCJdLFsiY2RhMSIs''@;'; put 'put ''Ilx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1''@;'; put 'put ''NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5''@;'; put 'put ''Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1''@;'; put 'put ''NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkYyJdLFsiY2VhMSIsIlx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFh''@;'; put 'put ''MFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1''@;'; put 'put ''NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRl''@;'; put 'put ''N1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZSJdLFsiY2ZhMSIsIlx1''@;'; put 'put ''NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3''@;'; put 'put ''Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1''@;'; put 'put ''N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3''@;'; put 'put ''Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNCJdLFsiZDBhMSIsIlx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1''@;'; put 'put ''OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJi''@;'; put 'put ''OVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1''@;'; put 'put ''NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlMyJdLFsiZDFhMSIsIlx1Njcx''@;'; put 'put ''ZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1''@;'; put 'put ''ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1Zjkw''@;'; put 'put ''ZFx1NjJjZlx1NjJmZlx1ZjkwZSIsNSwiXHU5MGEzXHVmOTE0Iiw0LCJcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1''@;'; put 'put ''MzdcdWY5MjNcdWY5MjRcdWY5MjUiXSxbImQyYTEiLCJcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjgiLDQsIlx1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1''@;'; put 'put ''NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzMyIsNSwiXHU5OWQxXHVmOTM5IiwxMCwiXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5''@;'; put 'put ''XHU1YzNmXHVmOTRhIiw3LCJcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTIiLDUsIlx1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNiJdLFsiZDNhMSIsIlx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjVi''@;'; put 'put ''N1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1''@;'; put 'put ''ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMw''@;'; put 'put ''ZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1''@;'; put 'put ''NjMxMVx1NjM4OVx1NjQxN1x1Njg0MyJdLFsiZDRhMSIsIlx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3''@;'; put 'put ''Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1''@;'; put 'put ''NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0''@;'; put 'put ''MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NSJdLFsiZDVhMSIsIlx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1''@;'; put 'put ''N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFk''@;'; put 'put ''OFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1''@;'; put 'put ''OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5''@;'; put 'put ''MFx1NjIwMFx1NjUyM1x1NmYyMyJdLFsiZDZhMSIsIlx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1''@;'; put 'put ''NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAx''@;'; put 'put ''OFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1''@;'; put 'put ''NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmYyJdLFsiZDdhMSIsIlx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYw''@;'; put 'put ''Zlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1''@;'; put 'put ''NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4''@;'; put 'put ''MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1''@;'; put 'put ''ODFlOFx1OTcxNlx1NzgyYyJdLFsiZDhhMSIsIlx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2''@;'; put 'put ''Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1''@;'; put 'put ''ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZm''@;'; put 'put ''Mlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNSJdLFsiZDlhMSIsIlx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1''@;'; put 'put ''Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJi''@;'; put 'put ''Y1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1''@;'; put 'put ''OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQz''@;'; put 'put ''Ylx1NTU0Zlx1NjU4NyJdLFsiZGFhMSIsIlx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1''@;'; put 'put ''N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1Njcz''@;'; put 'put ''NFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1''@;'; put 'put ''NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MSJdLFsiZGJhMSIsIlx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlh''@;'; put 'put ''OFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1''@;'; put 'put ''NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2''@;'; put 'put ''OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1''@;'; put 'put ''NzRhN1x1NzY1NiJdLFsiZGNhMSIsIlx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1Njhj''@;'; put 'put ''NVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1''@;'; put 'put ''NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRl''@;'; put 'put ''Y1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2NiJdLFsiZGRhMSIsIlx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1''@;'; put 'put ''NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1''@;'; put 'put ''NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1''@;'; put 'put ''NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2Zl''@;'; put 'put ''MVx1ODBhNSJdLFsiZGVhMSIsIlx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1''@;'; put 'put ''OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUy''@;'; put 'put ''Ylx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1''@;'; put 'put ''ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YSJdLFsiZGZhMSIsIlx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3''@;'; put 'put ''OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1''@;'; put 'put ''NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2''@;'; put 'put ''MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1''@;'; put 'put ''N2Y3MiJdLFsiZTBhMSIsIlx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVk''@;'; put 'put ''OVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1''@;'; put 'put ''OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFl''@;'; put 'put ''ZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2YyJdLFsiZTFhMSIsIlx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1''@;'; put 'put ''N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2My''@;'; put 'put ''Ylx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1''@;'; put 'put ''NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEw''@;'; put 'put ''MSJdLFsiZTJhMSIsIlx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1''@;'; put 'put ''N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3''@;'; put 'put ''MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1''@;'; put 'put ''ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyNyJdLFsiZTNhMSIsIlx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBl''@;'; put 'put ''N1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1''@;'; put 'put ''ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEy''@;'; put 'put ''MFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MSJd''@;'; put 'put ''LFsiZTRhMSIsIlx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZj''@;'; put 'put ''NVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1''@;'; put 'put ''NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjEx''@;'; put 'put ''Ylx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZCJdLFsiZTVhMSIsIlx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1''@;'; put 'put ''ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAw''@;'; put 'put ''MVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1''@;'; put 'put ''NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4MiJdLFsi''@;'; put 'put ''ZTZhMSIsIlx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1''@;'; put 'put ''OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5''@;'; put 'put ''M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1''@;'; put 'put ''ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMiJdLFsiZTdhMSIsIlx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1Zjlh''@;'; put 'put ''Ylx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1''@;'; put 'put ''OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1Zjli''@;'; put 'put ''N1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiMyJdLFsiZThh''@;'; put 'put ''MSIsIlx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5''@;'; put 'put ''NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1''@;'; put 'put ''OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRh''@;'; put 'put ''Mlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMSJdLFsiZTlhMSIsIlx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1''@;'; put 'put ''OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUw''@;'; put 'put ''YVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1''@;'; put 'put ''ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1MyJdLFsiZWFhMSIs''@;'; put 'put ''Ilx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1''@;'; put 'put ''NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQw''@;'; put 'put ''ZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1''@;'; put 'put ''NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYiJdLFsiZWJhMSIsIlx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhk''@;'; put 'put ''NVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1''@;'; put 'put ''ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdm''@;'; put 'put ''M1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiYyJdLFsiZWNhMSIsIlx1''@;'; put 'put ''OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAz''@;'; put 'put ''M1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1''@;'; put 'put ''NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThl''@;'; put 'put ''Y1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NCJdLFsiZWRhMSIsIlx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1''@;'; put 'put ''NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2Ri''@;'; put 'put ''ZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1''@;'; put 'put ''NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3NyJdLFsiZWVhMSIsIlx1OTY5''@;'; put 'put ''Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1''@;'; put 'put ''NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3''@;'; put 'put ''NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1''@;'; put 'put ''NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMSJdLFsiZWZhMSIsIlx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIz''@;'; put 'put ''Zlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1''@;'; put 'put ''NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1''@;'; put 'put ''ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1NiJdLFsiZjBhMSIsIlx1OTc1Y1x1''@;'; put 'put ''OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFj''@;'; put 'put ''Ylx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1''@;'; put 'put ''N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5''@;'; put 'put ''ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2YiJdLFsiZjFhMSIsIlx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1''@;'; put 'put ''ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3''@;'; put 'put ''MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1''@;'; put 'put ''OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYSJdLFsiZjJhMSIsIlx1NTRhYlx1NTcz''@;'; put 'put ''MFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1''@;'; put 'put ''OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4''@;'; put 'put ''Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1''@;'; put 'put ''OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZiJdLFsiZjNhMSIsIlx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5''@;'; put 'put ''YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1''@;'; put 'put ''NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVj''@;'; put 'put ''NFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1NiJdLFsiZjRhMSIsIlx1OGNhY1x1NTFjNFx1''@;'; put 'put ''NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3''@;'; put 'put ''Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1''@;'; put 'put ''OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAy''@;'; put 'put ''ZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMiJdLFsiZjVhMSIsIlx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1''@;'; put 'put ''OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1Njcw''@;'; put 'put ''MFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1''@;'; put 'put ''N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwMyJdLFsiZjZhMSIsIlx1OGQwNVx1NTNkNlx1NTQz''@;'; put 'put ''OVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1''@;'; put 'put ''NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQx''@;'; put 'put ''Ylx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1''@;'; put 'put ''ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExNyJdLFsiZjdhMSIsIlx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNh''@;'; put 'put ''YVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1''@;'; put 'put ''NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0''@;'; put 'put ''Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMSJdLFsiZjhhMSIsIlx1OTYyYVx1NTE2Ylx1NTNlZFx1''@;'; put 'put ''NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNi''@;'; put 'put ''Nlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1''@;'; put 'put ''ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmEx''@;'; put 'put ''OVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0MyJdLFsiZjlhMSIsIlx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1''@;'; put 'put ''NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRi''@;'; put 'put ''NFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1''@;'; put 'put ''OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYSJdLFsiZmFhMSIsIlx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVh''@;'; put 'put ''NVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1''@;'; put 'put ''NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBh''@;'; put 'put ''Ylx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1''@;'; put 'put ''ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4YiJdLFsiZmJhMSIsIlx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAwNVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1''@;'; put 'put ''N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1''@;'; put 'put ''NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUz''@;'; put 'put ''ZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NSJdLFsiZmNhMSIsIlx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1''@;'; put 'put ''OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQz''@;'; put 'put ''Ylx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1''@;'; put 'put ''OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4''@;'; put 'put ''Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNiJdLFsiZmRhMSIsIlx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1''@;'; put 'put ''NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBj''@;'; put 'put ''Ylx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1''@;'; put 'put ''NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MCJdXScpfSw3MjMyNDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRz''@;'; put 'put ''PUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiYTE0MCIsIlx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZl''@;'; put 'put ''NTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2Rc''@;'; put 'put ''dWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWEiXSxbImExYTEiLCJcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIw''@;'; put 'put ''MzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0''@;'; put 'put ''YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2MiIsNCwiXHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUy''@;'; put 'put ''MjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmIl0sWyJhMjQwIiwiXHVmZjNjXHUyMjE1''@;'; put 'put ''XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2''@;'; put 'put ''MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MSIsNywiXHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkIl0s''@;'; put 'put ''WyJhMmExIiwiXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwIiw5LCJcdTIxNjAiLDksIlx1MzAyMSIsOCwiXHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxIiwyNSwiXHVmZjQxIiwy''@;'; put 'put ''MV0sWyJhMzQwIiwiXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxIiwxNiwiXHUwM2EzIiw2LCJcdTAzYjEiLDE2LCJcdTAzYzMiLDYsIlx1MzEwNSIsMTBdLFsiYTNhMSIsIlx1MzExMCIsMjUsIlx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYiJdLFsiYTNlMSIsIlx1MjBhYyJd''@;'; put 'put ''LFsiYTQ0MCIsIlx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUz''@;'; put 'put ''OFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1''@;'; put 'put ''NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZCJdLFsiYTRhMSIsIlx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVj''@;'; put 'put ''MFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1''@;'; put 'put ''NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVh''@;'; put 'put ''NFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOSJdLFsiYTU0MCIsIlx1NGUxNlx1NGUxNVx1''@;'; put 'put ''NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMw''@;'; put 'put ''NVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1''@;'; put 'put ''NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNiJdLFsiYTVhMSIsIlx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1''@;'; put 'put ''M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1''@;'; put 'put ''NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYx''@;'; put 'put ''OVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OCJdLFsiYTY0MCIsIlx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1''@;'; put 'put ''NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTcz''@;'; put 'put ''MFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1''@;'; put 'put ''NWU3Nlx1NWU3NCJdLFsiYTZhMSIsIlx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIy''@;'; put 'put ''MVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1''@;'; put 'put ''ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1''@;'; put 'put ''N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2MyJdLFsiYTc0MCIsIlx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1''@;'; put 'put ''NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0''@;'; put 'put ''OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZCJdLFsiYTdhMSIsIlx1''@;'; put 'put ''NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMy''@;'; put 'put ''Y1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1''@;'; put 'put ''NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZm''@;'; put 'put ''NFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MCJdLFsiYTg0MCIsIlx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1''@;'; put 'put ''NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUy''@;'; put 'put ''Y1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5MiJdLFsiYThhMSIsIlx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1''@;'; put 'put ''OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYz''@;'; put 'put ''MVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1''@;'; put 'put ''NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3''@;'; put 'put ''N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NSJdLFsiYTk0MCIsIlx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1''@;'; put 'put ''NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlk''@;'; put 'put ''M1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NSJdLFsiYTlhMSIsIlx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1''@;'; put 'put ''NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAy''@;'; put 'put ''Zlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1''@;'; put 'put ''NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYw''@;'; put 'put ''MFx1NjYwZlx1NjYxNVx1NjYwYSJdLFsiYWE0MCIsIlx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1''@;'; put 'put ''Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNh''@;'; put 'put ''ZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMCJdLFsiYWFhMSIsIlx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1''@;'; put 'put ''NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2Nm''@;'; put 'put ''ZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1''@;'; put 'put ''ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NCJdLFsi''@;'; put 'put ''YWI0MCIsIlx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1''@;'; put 'put ''NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRj''@;'; put 'put ''ZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMSJdLFsiYWJhMSIsIlx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1''@;'; put 'put ''NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0''@;'; put 'put ''Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1''@;'; put 'put ''NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmNyJdLFsiYWM0MCIsIlx1NjJlZlx1NjJlY1x1NjJm''@;'; put 'put ''ZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1''@;'; put 'put ''NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0''@;'; put 'put ''MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxNyJdLFsiYWNhMSIsIlx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1''@;'; put 'put ''NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVh''@;'; put 'put ''M1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1''@;'; put 'put ''NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNCJdLFsiYWQ0MCIsIlx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBk''@;'; put 'put ''YVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1''@;'; put 'put ''ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZl''@;'; put 'put ''YVx1OGZlNSJdLFsiYWRhMSIsIlx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1''@;'; put 'put ''OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAx''@;'; put 'put ''OVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1''@;'; put 'put ''NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYSJdLFsiYWU0MCIsIlx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdj''@;'; put 'put ''M1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1''@;'; put 'put ''NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OSJdLFsiYWVhMSIsIlx1NjA2''@;'; put 'put ''M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1''@;'; put 'put ''NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0''@;'; put 'put ''Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1''@;'; put 'put ''NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5MyJdLFsiYWY0MCIsIlx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBl''@;'; put 'put ''NFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1''@;'; put 'put ''NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzNyJdLFsiYWZhMSIsIlx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1Nzgz''@;'; put 'put ''Mlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1''@;'; put 'put ''N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEw''@;'; put 'put ''Nlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1''@;'; put 'put ''ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0MyJdLFsiYjA0MCIsIlx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEw''@;'; put 'put ''Y1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1''@;'; put 'put ''OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MSJdLFsiYjBhMSIsIlx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFh''@;'; put 'put ''OFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1''@;'; put 'put ''NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2''@;'; put 'put ''NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1''@;'; put 'put ''NWE2Nlx1NWE2YVx1NWE0MCJdLFsiYjE0MCIsIlx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQx''@;'; put 'put ''Nlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1''@;'; put 'put ''NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZCJdLFsiYjFhMSIsIlx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIx''@;'; put 'put ''YVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1''@;'; put 'put ''NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZm''@;'; put 'put ''OVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYSJdLFsiYjI0''@;'; put 'put ''MCIsIlx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUx''@;'; put 'put ''YVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1''@;'; put 'put ''NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNiJdLFsiYjJhMSIsIlx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZk''@;'; put 'put ''Ylx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1''@;'; put 'put ''N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEz''@;'; put 'put ''MFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3YyJdLFsiYjM0MCIsIlx1ODM4Nlx1ODNhN1x1ODY1NVx1''@;'; put 'put ''NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGEx''@;'; put 'put ''Zlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1''@;'; put 'put ''OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNCJdLFsiYjNhMSIsIlx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2''@;'; put 'put ''Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1''@;'; put 'put ''NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVh''@;'; put 'put ''Y1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MCJdLFsiYjQ0MCIsIlx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1''@;'; put 'put ''NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBk''@;'; put 'put ''MVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1''@;'; put 'put ''NjNjZCJdLFsiYjRhMSIsIlx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3''@;'; put 'put ''Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1''@;'; put 'put ''NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1''@;'; put 'put ''OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYiJdLFsiYjU0MCIsIlx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1''@;'; put 'put ''NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2''@;'; put 'put ''YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OCJdLFsiYjVhMSIsIlx1N2E5N1x1''@;'; put 'put ''N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4''@;'; put 'put ''NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1''@;'; put 'put ''ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhj''@;'; put 'put ''MVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MSJdLFsiYjY0MCIsIlx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1''@;'; put 'put ''OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAz''@;'; put 'put ''Nlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MSJdLFsiYjZhMSIsIlx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1''@;'; put 'put ''OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVj''@;'; put 'put ''ZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1''@;'; put 'put ''NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2''@;'; put 'put ''N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiYyJdLFsiYjc0MCIsIlx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1''@;'; put 'put ''NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQx''@;'; put 'put ''Nlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2ZCJdLFsiYjdhMSIsIlx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1''@;'; put 'put ''Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVh''@;'; put 'put ''Ylx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1''@;'; put 'put ''NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2''@;'; put 'put ''Nlx1Nzc1ZVx1Nzc2MyJdLFsiYjg0MCIsIlx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1''@;'; put 'put ''N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2Zh''@;'; put 'put ''OFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2YiJdLFsiYjhhMSIsIlx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1''@;'; put 'put ''ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhk''@;'; put 'put ''Y1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1''@;'; put 'put ''OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYSJdLFsiYjk0MCIs''@;'; put 'put ''Ilx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1''@;'; put 'put ''OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3''@;'; put 'put ''Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNCJdLFsiYjlhMSIsIlx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1''@;'; put 'put ''NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVm''@;'; put 'put ''Nlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1''@;'; put 'put ''NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0NyJdLFsiYmE0MCIsIlx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2''@;'; put 'put ''Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1''@;'; put 'put ''Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYy''@;'; put 'put ''MFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMiJdLFsiYmFhMSIsIlx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1''@;'; put 'put ''NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1Nzhh''@;'; put 'put ''N1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1''@;'; put 'put ''N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhYyJdLFsiYmI0MCIsIlx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1''@;'; put 'put ''MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1''@;'; put 'put ''ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFh''@;'; put 'put ''NCJdLFsiYmJhMSIsIlx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1''@;'; put 'put ''OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVh''@;'; put 'put ''M1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1''@;'; put 'put ''OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkYyJdLFsiYmM0MCIsIlx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYz''@;'; put 'put ''Zlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1''@;'; put 'put ''NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4MiJdLFsiYmNhMSIsIlx1NjE3Y1x1NjE3''@;'; put 'put ''MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1''@;'; put 'put ''NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmEx''@;'; put 'put ''MVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1''@;'; put 'put ''NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4MyJdLFsiYmQ0MCIsIlx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4''@;'; put 'put ''Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1''@;'; put 'put ''N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZiJdLFsiYmRhMSIsIlx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFh''@;'; put 'put ''MFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1''@;'; put 'put ''ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0''@;'; put 'put ''ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1''@;'; put 'put ''OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZSJdLFsiYmU0MCIsIlx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJl''@;'; put 'put ''NFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1''@;'; put 'put ''OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOSJdLFsiYmVhMSIsIlx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTEx''@;'; put 'put ''MFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1''@;'; put 'put ''NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRk''@;'; put 'put ''NFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1''@;'; put 'put ''NmZiMVx1NmZhMSJdLFsiYmY0MCIsIlx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2''@;'; put 'put ''OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1''@;'; put 'put ''N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYSJdLFsiYmZhMSIsIlx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAy''@;'; put 'put ''OFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1''@;'; put 'put ''ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUz''@;'; put 'put ''OVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYSJdLFsiYzA0MCIsIlx1''@;'; put 'put ''OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgy''@;'; put 'put ''NFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1''@;'; put 'put ''NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4NyJdLFsiYzBhMSIsIlx1NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZi''@;'; put 'put ''ZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1''@;'; put 'put ''NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFl''@;'; put 'put ''Nlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhYyJdLFsiYzE0MCIsIlx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1''@;'; put 'put ''NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2Uy''@;'; put 'put ''Ylx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1''@;'; put 'put ''ODFlOFx1ODIwOVx1ODI3MVx1ODVhYSJdLFsiYzFhMSIsIlx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkz''@;'; put 'put ''Ylx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1''@;'; put 'put ''OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1''@;'; put 'put ''YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMSJdLFsiYzI0MCIsIlx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1''@;'; put 'put ''OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFh''@;'; put 'put ''Y1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OCJd''@;'; put 'put ''LFsiYzJhMSIsIlx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1''@;'; put 'put ''OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1''@;'; put 'put ''OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5''@;'; put 'put ''YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNiJdLFsiYzM0MCIsIlx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1OTkyZVx1''@;'; put 'put ''OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVlY1x1NjFm''@;'; put 'put ''Mlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OCJdLFsiYzNhMSIsIlx1NzM3YVx1NzRiZFx1''@;'; put 'put ''NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFk''@;'; put 'put ''OFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1''@;'; put 'put ''OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNl''@;'; put 'put ''OFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZSJdLFsiYzQ0MCIsIlx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1''@;'; put 'put ''OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAz''@;'; put 'put ''Mlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3YyJdLFsiYzRhMSIsIlx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1''@;'; put 'put ''ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQw''@;'; put 'put ''M1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1''@;'; put 'put ''NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgy''@;'; put 'put ''MVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NCJdLFsiYzU0MCIsIlx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1''@;'; put 'put ''OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZj''@;'; put 'put ''OVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2YyJdLFsiYzVhMSIsIlx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1''@;'; put 'put ''OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2''@;'; put 'put ''YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1''@;'; put 'put ''OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5''@;'; put 'put ''M1x1OGI5MiJdLFsiYzY0MCIsIlx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1''@;'; put 'put ''N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3''@;'; put 'put ''N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3MiJdLFsiYzk0MCIsIlx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1''@;'; put 'put ''NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVk''@;'; put 'put ''ZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNSJdLFsiYzlhMSIsIlx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1''@;'; put 'put ''NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJh''@;'; put 'put ''Nlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1''@;'; put 'put ''NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMx''@;'; put 'put ''OFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0YiJdLFsiY2E0MCIsIlx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1''@;'; put 'put ''OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIx''@;'; put 'put ''ZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOCJdLFsiY2FhMSIsIlx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1''@;'; put 'put ''NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4''@;'; put 'put ''OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1''@;'; put 'put ''NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVm''@;'; put 'put ''Mlx1NjVmNVx1Njc0NVx1Njc0NyJdLFsiY2I0MCIsIlx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1''@;'; put 'put ''NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4''@;'; put 'put ''MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5MyJdLFsiY2JhMSIsIlx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1''@;'; put 'put ''OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5''@;'; put 'put ''Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1''@;'; put 'put ''NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2MiJdLFsi''@;'; put 'put ''Y2M0MCIsIlx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1''@;'; put 'put ''NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4''@;'; put 'put ''Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYiJdLFsiY2NhMSIsIlx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1''@;'; put 'put ''NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYw''@;'; put 'put ''ZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1''@;'; put 'put ''Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMiJdLFsiY2Q0MCIsIlx1NmNkMlx1NmNkZFx1NmNi''@;'; put 'put ''NFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1''@;'; put 'put ''NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZm''@;'; put 'put ''NVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYSJdLFsiY2RhMSIsIlx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1''@;'; put 'put ''ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZk''@;'; put 'put ''Nlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1''@;'; put 'put ''NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZiJdLFsiY2U0MCIsIlx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRj''@;'; put 'put ''NVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1''@;'; put 'put ''NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNj''@;'; put 'put ''Ylx1NWNkYiJdLFsiY2VhMSIsIlx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1''@;'; put 'put ''NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJj''@;'; put 'put ''Zlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1''@;'; put 'put ''NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYSJdLFsiY2Y0MCIsIlx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1Njdi''@;'; put 'put ''NVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1''@;'; put 'put ''NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0MiJdLFsiY2ZhMSIsIlx1NmQw''@;'; put 'put ''MVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1''@;'; put 'put ''NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRl''@;'; put 'put ''ZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1''@;'; put 'put ''Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MCJdLFsiZDA0MCIsIlx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5''@;'; put 'put ''MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1''@;'; put 'put ''ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYSJdLFsiZDBhMSIsIlx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJl''@;'; put 'put ''ZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1''@;'; put 'put ''OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAz''@;'; put 'put ''MVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1''@;'; put 'put ''NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMSJdLFsiZDE0MCIsIlx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdi''@;'; put 'put ''OFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1''@;'; put 'put ''NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2NyJdLFsiZDFhMSIsIlx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5''@;'; put 'put ''NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1''@;'; put 'put ''NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0''@;'; put 'put ''Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1''@;'; put 'put ''NmI4OFx1NmJlNlx1NmJlNCJdLFsiZDI0MCIsIlx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2''@;'; put 'put ''N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1''@;'; put 'put ''NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OCJdLFsiZDJhMSIsIlx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNl''@;'; put 'put ''NVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1''@;'; put 'put ''NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1Nzgy''@;'; put 'put ''YVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMCJdLFsiZDM0''@;'; put 'put ''MCIsIlx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2Qw''@;'; put 'put ''Y1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1''@;'; put 'put ''ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMiJdLFsiZDNhMSIsIlx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1''@;'; put 'put ''M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1''@;'; put 'put ''ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVk''@;'; put 'put ''MVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MCJdLFsiZDQ0MCIsIlx1OTE0ZVx1OTE0Zlx1OTFkNVx1''@;'; put 'put ''OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2''@;'; put 'put ''OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1''@;'; put 'put ''NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NSJdLFsiZDRhMSIsIlx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdm''@;'; put 'put ''ZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1''@;'; put 'put ''NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1''@;'; put 'put ''Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZiJdLFsiZDU0MCIsIlx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1''@;'; put 'put ''NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBi''@;'; put 'put ''Zlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1''@;'; put 'put ''NjM5ZiJdLFsiZDVhMSIsIlx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2''@;'; put 'put ''Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1''@;'; put 'put ''Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRi''@;'; put 'put ''ZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOSJdLFsiZDY0MCIsIlx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1''@;'; put 'put ''NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMw''@;'; put 'put ''OFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZiJdLFsiZDZhMSIsIlx1NzVjYlx1''@;'; put 'put ''NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2''@;'; put 'put ''N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1''@;'; put 'put ''N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5''@;'; put 'put ''ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZiJdLFsiZDc0MCIsIlx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1''@;'; put 'put ''ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4''@;'; put 'put ''Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiNyJdLFsiZDdhMSIsIlx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1''@;'; put 'put ''ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhh''@;'; put 'put ''Y1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1''@;'; put 'put ''OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFm''@;'; put 'put ''NFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYSJdLFsiZDg0MCIsIlx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1''@;'; put 'put ''NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4''@;'; put 'put ''OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzNyJdLFsiZDhhMSIsIlx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1''@;'; put 'put ''NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5''@;'; put 'put ''N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1''@;'; put 'put ''NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBj''@;'; put 'put ''ZVx1NjBjNFx1NjExNCJdLFsiZDk0MCIsIlx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1''@;'; put 'put ''NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUz''@;'; put 'put ''Mlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMiJdLFsiZDlhMSIsIlx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1''@;'; put 'put ''NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1Njhl''@;'; put 'put ''OFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1''@;'; put 'put ''NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZSJdLFsiZGE0MCIs''@;'; put 'put ''Ilx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1''@;'; put 'put ''NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMy''@;'; put 'put ''Nlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNiJdLFsiZGFhMSIsIlx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1''@;'; put 'put ''NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3''@;'; put 'put ''MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1''@;'; put 'put ''N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NSJdLFsiZGI0MCIsIlx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2Zh''@;'; put 'put ''MVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1''@;'; put 'put ''ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNk''@;'; put 'put ''ZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmMyJdLFsiZGJhMSIsIlx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1''@;'; put 'put ''ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5''@;'; put 'put ''OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1''@;'; put 'put ''OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYSJdLFsiZGM0MCIsIlx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVm''@;'; put 'put ''Nlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1''@;'; put 'put ''OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4''@;'; put 'put ''OCJdLFsiZGNhMSIsIlx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1''@;'; put 'put ''NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTVi''@;'; put 'put ''Zlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1''@;'; put 'put ''NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNiJdLFsiZGQ0MCIsIlx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMx''@;'; put 'put ''Zlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1''@;'; put 'put ''NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNCJdLFsiZGRhMSIsIlx1NjQzM1x1NjQ0''@;'; put 'put ''M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1''@;'; put 'put ''NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1Njkz''@;'; put 'put ''NVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1''@;'; put 'put ''NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmYyJdLFsiZGU0MCIsIlx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVk''@;'; put 'put ''Mlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1''@;'; put 'put ''NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1MyJdLFsiZGVhMSIsIlx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4''@;'; put 'put ''Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1''@;'; put 'put ''NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1''@;'; put 'put ''YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1''@;'; put 'put ''N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExMyJdLFsiZGY0MCIsIlx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2''@;'; put 'put ''M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1''@;'; put 'put ''N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2ZiJdLFsiZGZhMSIsIlx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQz''@;'; put 'put ''Zlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1''@;'; put 'put ''ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1''@;'; put 'put ''MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1''@;'; put 'put ''ODllNVx1ODllNCJdLFsiZTA0MCIsIlx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2''@;'; put 'put ''Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1''@;'; put 'put ''OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZiJdLFsiZTBhMSIsIlx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0''@;'; put 'put ''OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1''@;'; put 'put ''OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTli''@;'; put 'put ''Mlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMCJdLFsiZTE0MCIsIlx1''@;'; put 'put ''NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4''@;'; put 'put ''MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1''@;'; put 'put ''NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMCJdLFsiZTFhMSIsIlx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1''@;'; put 'put ''OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1''@;'; put 'put ''NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0''@;'; put 'put ''Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOSJdLFsiZTI0MCIsIlx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1''@;'; put 'put ''NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1Njlj''@;'; put 'put ''Mlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1''@;'; put 'put ''NmYzYlx1NmYxMlx1NmVlZFx1NmYwYSJdLFsiZTJhMSIsIlx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYw''@;'; put 'put ''ZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1''@;'; put 'put ''NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1Nzhi''@;'; put 'put ''NFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5MyJdLFsiZTM0MCIsIlx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1''@;'; put 'put ''N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2Ri''@;'; put 'put ''N1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZSJd''@;'; put 'put ''LFsiZTNhMSIsIlx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRh''@;'; put 'put ''YVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1''@;'; put 'put ''ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcy''@;'; put 'put ''NFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYiJdLFsiZTQ0MCIsIlx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1''@;'; put 'put ''OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYw''@;'; put 'put ''ZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZCJdLFsiZTRhMSIsIlx1OTJhNlx1OTI5YVx1''@;'; put 'put ''OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1''@;'; put 'put ''OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1''@;'; put 'put ''OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJl''@;'; put 'put ''Zlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OCJdLFsiZTU0MCIsIlx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1''@;'; put 'put ''NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRh''@;'; put 'put ''MVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OSJdLFsiZTVhMSIsIlx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1''@;'; put 'put ''NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjVi''@;'; put 'put ''M1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1''@;'; put 'put ''NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0''@;'; put 'put ''MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5MiJdLFsiZTY0MCIsIlx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1''@;'; put 'put ''NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFh''@;'; put 'put ''YVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OSJdLFsiZTZhMSIsIlx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1''@;'; put 'put ''NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1Nzhk''@;'; put 'put ''NFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1''@;'; put 'put ''N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFh''@;'; put 'put ''M1x1ODE5ZiJdLFsiZTc0MCIsIlx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1''@;'; put 'put ''ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRl''@;'; put 'put ''N1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2MiJdLFsiZTdhMSIsIlx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1''@;'; put 'put ''ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkx''@;'; put 'put ''Nlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1''@;'; put 'put ''OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyNyJdLFsiZTg0MCIsIlx1OGUx''@;'; put 'put ''NFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1''@;'; put 'put ''OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJj''@;'; put 'put ''ZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkMyJdLFsiZThhMSIsIlx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1''@;'; put 'put ''OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlk''@;'; put 'put ''OFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1''@;'; put 'put ''OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZSJdLFsiZTk0MCIsIlx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3''@;'; put 'put ''Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1''@;'; put 'put ''NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFj''@;'; put 'put ''Nlx1NjFjMVx1NjFjY1x1NjFiYSJdLFsiZTlhMSIsIlx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1''@;'; put 'put ''NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0''@;'; put 'put ''Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1''@;'; put 'put ''NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOCJdLFsiZWE0MCIsIlx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFj''@;'; put 'put ''Mlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1''@;'; put 'put ''NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OSJdLFsi''@;'; put 'put ''ZWFhMSIsIlx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1''@;'; put 'put ''N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2Ux''@;'; put 'put ''YVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1''@;'; put 'put ''ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OCJdLFsiZWI0MCIsIlx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0''@;'; put 'put ''ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1''@;'; put 'put ''ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMCJdLFsiZWJhMSIsIlx1OGFlMlx1OGFmMlx1OGFm''@;'; put 'put ''NFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1''@;'; put 'put ''OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5''@;'; put 'put ''MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1''@;'; put 'put ''OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwYyJdLFsiZWM0MCIsIlx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZk''@;'; put 'put ''NFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1''@;'; put 'put ''OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NSJdLFsiZWNhMSIsIlx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQx''@;'; put 'put ''NFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1''@;'; put 'put ''NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZi''@;'; put 'put ''Ylx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1''@;'; put 'put ''NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZSJdLFsiZWQ0MCIsIlx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZl''@;'; put 'put ''ZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1''@;'; put 'put ''NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNiJdLFsiZWRhMSIsIlx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1Nzkw''@;'; put 'put ''NVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1''@;'; put 'put ''N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3''@;'; put 'put ''Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1''@;'; put 'put ''ODU5ZSJdLFsiZWU0MCIsIlx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdi''@;'; put 'put ''ZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1''@;'; put 'put ''ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZSJdLFsiZWVhMSIsIlx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIx''@;'; put 'put ''M1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1''@;'; put 'put ''OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3''@;'; put 'put ''Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5YyJdLFsiZWY0MCIsIlx1OTc5ZVx1''@;'; put 'put ''OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlm''@;'; put 'put ''OVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1''@;'; put 'put ''OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMCJdLFsiZWZhMSIsIlx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYy''@;'; put 'put ''M1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1''@;'; put 'put ''NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMw''@;'; put 'put ''Ylx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3NiJdLFsiZjA0MCIsIlx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1''@;'; put 'put ''NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1''@;'; put 'put ''Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1''@;'; put 'put ''ODA3NVx1ODFkMVx1ODFkMiJdLFsiZjBhMSIsIlx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODVi''@;'; put 'put ''OFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1''@;'; put 'put ''ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0''@;'; put 'put ''Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2NyJdLFsiZjE0MCIsIlx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1''@;'; put 'put ''OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNi''@;'; put 'put ''MVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYSJdLFsiZjFh''@;'; put 'put ''MSIsIlx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIw''@;'; put 'put ''OFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1''@;'; put 'put ''OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZh''@;'; put 'put ''Nlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MCJdLFsiZjI0MCIsIlx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1''@;'; put 'put ''NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAy''@;'; put 'put ''YVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYiJdLFsiZjJhMSIsIlx1NzkyMVx1NzkxY1x1NzkxN1x1''@;'; put 'put ''NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2Zm''@;'; put 'put ''ZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1''@;'; put 'put ''ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1''@;'; put 'put ''MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NSJdLFsiZjM0MCIsIlx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1''@;'; put 'put ''OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNj''@;'; put 'put ''YVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNiJdLFsiZjNhMSIsIlx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1''@;'; put 'put ''OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIw''@;'; put 'put ''YVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1''@;'; put 'put ''OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1''@;'; put 'put ''Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMiJdLFsiZjQ0MCIsIlx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1''@;'; put 'put ''NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZh''@;'; put 'put ''Ylx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOSJdLFsiZjRhMSIsIlx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1''@;'; put 'put ''N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgx''@;'; put 'put ''N1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1''@;'; put 'put ''OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNm''@;'; put 'put ''ZiJdLFsiZjU0MCIsIlx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1''@;'; put 'put ''OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMx''@;'; put 'put ''N1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5YiJdLFsiZjVhMSIsIlx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1''@;'; put 'put ''OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVm''@;'; put 'put ''MVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1''@;'; put 'put ''N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNSJdLFsiZjY0MCIsIlx1ODgyOVx1ODgx''@;'; put 'put ''ZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1''@;'; put 'put ''OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEz''@;'; put 'put ''OVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYSJdLFsiZjZhMSIsIlx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1''@;'; put 'put ''OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYx''@;'; put 'put ''OFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1''@;'; put 'put ''NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YSJdLFsiZjc0MCIsIlx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFk''@;'; put 'put ''ZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1''@;'; put 'put ''OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0''@;'; put 'put ''Zlx1OWE0OFx1OWE0YSJdLFsiZjdhMSIsIlx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1''@;'; put 'put ''OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThl''@;'; put 'put ''N1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1''@;'; put 'put ''ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZSJdLFsiZjg0MCIsIlx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFi''@;'; put 'put ''Y1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1''@;'; put 'put ''OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0ZiJdLFsiZjhhMSIs''@;'; put 'put ''Ilx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1''@;'; put 'put ''ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2''@;'; put 'put ''N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1''@;'; put 'put ''NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YSJdLFsiZjk0MCIsIlx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5''@;'; put 'put ''OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1''@;'; put 'put ''OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYSJdLFsiZjlhMSIsIlx1OWZhNFx1NzA2OFx1NzA2NVx1N2Nm''@;'; put 'put ''N1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1''@;'; put 'put ''OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2Nh''@;'; put 'put ''N1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1''@;'; put 'put ''MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5MyJdXScpfSw1NjQwNjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiOGVhMSIsIlx1ZmY2MSIsNjJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1''@;'; put 'put ''MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVm''@;'; put 'put ''ZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZmMGRceGIxXHhkN1x4ZjdcdWZmMWRcdTIyNjBcdWZmMWNc''@;'; put 'put ''dWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjNyJdLFsiYTJh''@;'; put 'put ''MSIsIlx1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiYTJiYSIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiYTJjYSIsIlx1MjIy''@;'; put 'put ''N1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiYTJkYyIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyYyJdLFsiYTJmMiIsIlx1MjEyYlx1MjAzMFx1''@;'; put 'put ''MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbImEyZmUiLCJcdTI1ZWYiXSxbImEzYjAiLCJcdWZmMTAiLDldLFsiYTNjMSIsIlx1ZmYyMSIsMjVdLFsiYTNlMSIsIlx1ZmY0MSIsMjVdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIs''@;'; put 'put ''Ilx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhOGExIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw''@;'; put 'put ''XHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUy''@;'; put 'put ''NTQyIl0sWyJhZGExIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbImFkYzAiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMz''@;'; put 'put ''OGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbImFkZGYiLCJcdTMzN2JcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1''@;'; put 'put ''MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiYjBhMSIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcy''@;'; put 'put ''N1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1''@;'; put 'put ''NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUw''@;'; put 'put ''MFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiYjFhMSIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1''@;'; put 'put ''NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIxZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNl''@;'; put 'put ''MVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1''@;'; put 'put ''NTE4Nlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFm''@;'; put 'put ''OVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkYyJdLFsiYjJhMSIsIlx1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1''@;'; put 'put ''NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJhMFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNj''@;'; put 'put ''Mlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1''@;'; put 'put ''OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiYjNhMSIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3''@;'; put 'put ''NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1''@;'; put 'put ''NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEy''@;'; put 'put ''Ylx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1''@;'; put 'put ''OWQyOFx1NjgyMlx1ODMwNVx1ODQzMSJdLFsiYjRhMSIsIlx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjEx''@;'; put 'put ''Zlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1''@;'; put 'put ''OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3''@;'; put 'put ''MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiYjVhMSIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1''@;'; put 'put ''N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3''@;'; put 'put ''MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1''@;'; put 'put ''NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1''@;'; put 'put ''YVx1NGVhOFx1NGVhYlx1NGVhYyJdLFsiYjZhMSIsIlx1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1''@;'; put 'put ''NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRm''@;'; put 'put ''ZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1''@;'; put 'put ''OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiYjdhMSIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4''@;'; put 'put ''Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1''@;'; put 'put ''NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1NTI4''@;'; put 'put ''N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1''@;'; put 'put ''NjFmOFx1NjJmM1x1NjM3MiJdLFsiYjhhMSIsIlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1NzcwY1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNi''@;'; put 'put ''M1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1''@;'; put 'put ''ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYwZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3''@;'; put 'put ''N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1NTM5YVx1NTNlM1x1NTQxMSJdLFsiYjlhMSIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1''@;'; put 'put ''NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2''@;'; put 'put ''Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1OTgwNVx1''@;'; put 'put ''OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFh''@;'; put 'put ''OFx1NzJkYlx1OGZiYyJdLFsiYmFhMSIsIlx1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1''@;'; put 'put ''NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFj''@;'; put 'put ''N1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1''@;'; put 'put ''NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMxOVx1NTE4YVx1NTIzNyJdLFsiYmJhMSIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJk''@;'; put 'put ''Nlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1''@;'; put 'put ''NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1NmI3Ylx1NmMw''@;'; put 'put ''Zlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1''@;'; put 'put ''NjMwMVx1NjY0MiJdLFsiYmNhMSIsIlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNm''@;'; put 'put ''MVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1''@;'; put 'put ''ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2Ey''@;'; put 'put ''ZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OCJdLFsiYmRhMSIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1''@;'; put 'put ''N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZjNlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4''@;'; put 'put ''M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1NmU5Nlx1NmY2NFx1''@;'; put 'put ''NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2RkMlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBi''@;'; put 'put ''N1x1NTExZiJdLFsiYmVhMSIsIlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1''@;'; put 'put ''NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEzY1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNk''@;'; put 'put ''Nlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1''@;'; put 'put ''NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdmNFx1OThmZSJdLFsiYmZhMSIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZi''@;'; put 'put ''MVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1''@;'; put 'put ''OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1OTAxN1x1NTQzOVx1NTc4''@;'; put 'put ''Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1''@;'; put 'put ''ODhmZSJdLFsiYzBhMSIsIlx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZk''@;'; put 'put ''Ylx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1''@;'; put 'put ''OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0''@;'; put 'put ''N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYSJdLFsiYzFhMSIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1''@;'; put 'put ''OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2Qy''@;'; put 'put ''MFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1NjRjZFx1NjVlOVx1NjZmOVx1''@;'; put 'put ''NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4''@;'; put 'put ''ZSJdLFsiYzJhMSIsIlx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1''@;'; put 'put ''NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAy''@;'; put 'put ''MFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1''@;'; put 'put ''NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYSJdLFsiYzNhMSIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJm''@;'; put 'put ''OFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1''@;'; put 'put ''NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2ExYVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMz''@;'; put 'put ''Nlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNSJd''@;'; put 'put ''LFsiYzRhMSIsIlx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgw''@;'; put 'put ''Mlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1''@;'; put 'put ''N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJi''@;'; put 'put ''NVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJdLFsiYzVhMSIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1''@;'; put 'put ''OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgz''@;'; put 'put ''NVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhY1x1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1''@;'; put 'put ''NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMCJdLFsi''@;'; put 'put ''YzZhMSIsIlx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1''@;'; put 'put ''OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2''@;'; put 'put ''Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1''@;'; put 'put ''NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsiYzdhMSIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMy''@;'; put 'put ''Ylx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1''@;'; put 'put ''NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThm''@;'; put 'put ''Mlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNiJdLFsiYzhh''@;'; put 'put ''MSIsIlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZi''@;'; put 'put ''Y1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1''@;'; put 'put ''NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3''@;'; put 'put ''Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiYzlhMSIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1''@;'; put 'put ''N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMy''@;'; put 'put ''ZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1''@;'; put 'put ''ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZCJdLFsiY2FhMSIs''@;'; put 'put ''Ilx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1''@;'; put 'put ''NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThjMVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0''@;'; put 'put ''ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1''@;'; put 'put ''NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiY2JhMSIsIlx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBh''@;'; put 'put ''Nlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1''@;'; put 'put ''NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTli''@;'; put 'put ''OVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MCJdLFsiY2NhMSIsIlx1''@;'; put 'put ''NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWEx''@;'; put 'put ''OFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1''@;'; put 'put ''ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2Qw''@;'; put 'put ''NFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiY2RhMSIsIlx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1''@;'; put 'put ''NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRj''@;'; put 'put ''MVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1''@;'; put 'put ''ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4MyJdLFsiY2VhMSIsIlx1NzVl''@;'; put 'put ''Mlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1''@;'; put 'put ''NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYy''@;'; put 'put ''YVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1''@;'; put 'put ''NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiY2ZhMSIsIlx1ODRlZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1Njcx''@;'; put 'put ''N1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1''@;'; put 'put ''NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiZDBhMSIsIlx1NWYwY1x1NGUxMFx1NGUxNVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYw''@;'; put 'put ''ZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1''@;'; put 'put ''NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZkOFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZm''@;'; put 'put ''Nlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiZDFhMSIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1''@;'; put 'put ''NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2Fm''@;'; put 'put ''OFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1''@;'; put 'put ''NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3''@;'; put 'put ''Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOCJdLFsiZDJhMSIsIlx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1''@;'; put 'put ''NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5''@;'; put 'put ''Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1''@;'; put 'put ''NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiZDNhMSIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRi''@;'; put 'put ''ZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1''@;'; put 'put ''NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFk''@;'; put 'put ''Zlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1''@;'; put 'put ''NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOSJdLFsiZDRhMSIsIlx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4''@;'; put 'put ''OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1''@;'; put 'put ''NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkw''@;'; put 'put ''Mlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiZDVhMSIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1''@;'; put 'put ''NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEwOVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFi''@;'; put 'put ''ZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1''@;'; put 'put ''NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJlNlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMy''@;'; put 'put ''Mlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1MyJdLFsiZDZhMSIsIlx1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1''@;'; put 'put ''NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQxZlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3''@;'; put 'put ''Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1''@;'; put 'put ''NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWViY1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiZDdhMSIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVk''@;'; put 'put ''Ylx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1''@;'; put 'put ''NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBi''@;'; put 'put ''M1x1NWZmZlx1NjAyMVx1NjA2MFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1''@;'; put 'put ''NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YSJdLFsiZDhhMSIsIlx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjEx''@;'; put 'put ''NVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1''@;'; put 'put ''NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFj''@;'; put 'put ''Nlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiZDlhMSIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1''@;'; put 'put ''NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJk''@;'; put 'put ''Y1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1''@;'; put 'put ''NjM5Zlx1NjNiNVx1NjM2Ylx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUy''@;'; put 'put ''YVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiYyJdLFsiZGFhMSIsIlx1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1''@;'; put 'put ''NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5''@;'; put 'put ''Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1''@;'; put 'put ''NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiZGJhMSIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYz''@;'; put 'put ''Zlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1''@;'; put 'put ''Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1NjdlNFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0''@;'; put 'put ''ZFx1NjgzMlx1Njg0ZVx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1''@;'; put 'put ''NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZCJdLFsiZGNhMSIsIlx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3''@;'; put 'put ''N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1''@;'; put 'put ''NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1NjlmZlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEy''@;'; put 'put ''M1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiZGRhMSIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1''@;'; put 'put ''NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1''@;'; put 'put ''Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1''@;'; put 'put ''NmJmM1x1NmJlZlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNk''@;'; put 'put ''N1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZSJdLFsiZGVhMSIsIlx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1''@;'; put 'put ''NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2''@;'; put 'put ''ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1''@;'; put 'put ''NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZGZhMSIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4''@;'; put 'put ''MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1''@;'; put 'put ''NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBj''@;'; put 'put ''Ylx1NzBkZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1''@;'; put 'put ''NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmYyJdLFsiZTBhMSIsIlx1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4''@;'; put 'put ''MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1''@;'; put 'put ''NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1''@;'; put 'put ''NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTFhMSIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1''@;'; put 'put ''NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUyY1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3''@;'; put 'put ''OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1''@;'; put 'put ''NzVmZlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2''@;'; put 'put ''OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MCJdLFsiZTJhMSIsIlx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1''@;'; put 'put ''NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3''@;'; put 'put ''OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1''@;'; put 'put ''Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1NzhiZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTNhMSIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1Nzkx''@;'; put 'put ''OVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1''@;'; put 'put ''N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2Fi''@;'; put 'put ''MFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1''@;'; put 'put ''N2IzNVx1N2IyOFx1N2IzNlx1N2I1MCJdLFsiZTRhMSIsIlx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5''@;'; put 'put ''Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1''@;'; put 'put ''N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2Ni''@;'; put 'put ''MVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTVhMSIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1''@;'; put 'put ''N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2Rk''@;'; put 'put ''Y1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1''@;'; put 'put ''N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5''@;'; put 'put ''Ylx1N2U5Y1x1N2YzOFx1N2YzYSJdLFsiZTZhMSIsIlx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1''@;'; put 'put ''N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAx''@;'; put 'put ''OVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1''@;'; put 'put ''NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTdhMSIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2''@;'; put 'put ''NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1''@;'; put 'put ''ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIwZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ODI2''@;'; put 'put ''Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1''@;'; put 'put ''ODJkY1x1ODMwOVx1ODJkOSJdLFsiZThhMSIsIlx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4''@;'; put 'put ''YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1''@;'; put 'put ''ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRj''@;'; put 'put ''Nlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTlhMSIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1''@;'; put 'put ''ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYx''@;'; put 'put ''YVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ODZkZlx1''@;'; put 'put ''ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODczNFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2''@;'; put 'put ''OFx1ODc2ZVx1ODc1OSJdLFsiZWFhMSIsIlx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1''@;'; put 'put ''ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3''@;'; put 'put ''ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1''@;'; put 'put ''ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1ZSJdLFsiZWJhMSIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4''@;'; put 'put ''OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1''@;'; put 'put ''OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1OGFlNFx1OGFm''@;'; put 'put ''MVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1''@;'; put 'put ''OGI1YVx1OGI2YiJdLFsiZWNhMSIsIlx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3''@;'; put 'put ''OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1''@;'; put 'put ''OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRl''@;'; put 'put ''Ylx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YSJdLFsiZWRhMSIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1''@;'; put 'put ''OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVm''@;'; put 'put ''Ylx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1OGY2Mlx1OGY2M1x1''@;'; put 'put ''OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZmNFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAz''@;'; put 'put ''OVx1OGZmOCJdLFsiZWVhMSIsIlx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1''@;'; put 'put ''OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFi''@;'; put 'put ''NFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1''@;'; put 'put ''OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0NFx1OTMyZSJdLFsiZWZhMSIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2''@;'; put 'put ''ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1''@;'; put 'put ''OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1OTVhMFx1OTVhOFx1OTVh''@;'; put 'put ''N1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1''@;'; put 'put ''OTY1ZSJdLFsiZjBhMSIsIlx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcw''@;'; put 'put ''ZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1''@;'; put 'put ''NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdm''@;'; put 'put ''Nlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MCJdLFsiZjFhMSIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1''@;'; put 'put ''OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlh''@;'; put 'put ''ZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1OWEzZVx1OWE1NVx1OWE0ZFx1''@;'; put 'put ''OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFm''@;'; put 'put ''NyJdLFsiZjJhMSIsIlx1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1''@;'; put 'put ''OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMw''@;'; put 'put ''Y1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1''@;'; put 'put ''OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OCJdLFsiZjNhMSIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3''@;'; put 'put ''YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1''@;'; put 'put ''OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVjZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVm''@;'; put 'put ''OVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMCJd''@;'; put 'put ''LFsiZjRhMSIsIlx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZjlhMSIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYz''@;'; put 'put ''OVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1''@;'; put 'put ''NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTli''@;'; put 'put ''YVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiNyJdLFsiZmFhMSIsIlx1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1''@;'; put 'put ''NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5''@;'; put 'put ''OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1''@;'; put 'put ''NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEw''@;'; put 'put ''NFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZmJhMSIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1''@;'; put 'put ''NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0''@;'; put 'put ''OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1''@;'; put 'put ''OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYSJdLFsiZmNhMSIsIlx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFl''@;'; put 'put ''NFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1''@;'; put 'put ''OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEy''@;'; put 'put ''YVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZmNmMSIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyI4ZmEy''@;'; put 'put ''YWYiLCJcdTAyZDhcdTAyYzdceGI4XHUwMmQ5XHUwMmRkXHhhZlx1MDJkYlx1MDJkYVx1ZmY1ZVx1MDM4NFx1MDM4NSJdLFsiOGZhMmMyIiwiXHhhMVx4YTZceGJmIl0sWyI4ZmEyZWIiLCJceGJhXHhhYVx4YTlceGFlXHUyMTIyXHhhNFx1MjExNiJdLFsiOGZhNmUxIiwiXHUwMzg2XHUwMzg4''@;'; put 'put ''XHUwMzg5XHUwMzhhXHUwM2FhIl0sWyI4ZmE2ZTciLCJcdTAzOGMiXSxbIjhmYTZlOSIsIlx1MDM4ZVx1MDNhYiJdLFsiOGZhNmVjIiwiXHUwMzhmIl0sWyI4ZmE2ZjEiLCJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzYzJcdTAzY2RcdTAzY2JcdTAzYjBc''@;'; put 'put ''dTAzY2UiXSxbIjhmYTdjMiIsIlx1MDQwMiIsMTAsIlx1MDQwZVx1MDQwZiJdLFsiOGZhN2YyIiwiXHUwNDUyIiwxMCwiXHUwNDVlXHUwNDVmIl0sWyI4ZmE5YTEiLCJceGM2XHUwMTEwIl0sWyI4ZmE5YTQiLCJcdTAxMjYiXSxbIjhmYTlhNiIsIlx1MDEzMiJdLFsiOGZhOWE4IiwiXHUwMTQx''@;'; put 'put ''XHUwMTNmIl0sWyI4ZmE5YWIiLCJcdTAxNGFceGQ4XHUwMTUyIl0sWyI4ZmE5YWYiLCJcdTAxNjZceGRlIl0sWyI4ZmE5YzEiLCJceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0Mlx1MDE0MFx1MDE0OVx1MDE0Ylx4ZjhcdTAxNTNceGRmXHUwMTY3XHhmZSJdLFsi''@;'; put 'put ''OGZhYWExIiwiXHhjMVx4YzBceGM0XHhjMlx1MDEwMlx1MDFjZFx1MDEwMFx1MDEwNFx4YzVceGMzXHUwMTA2XHUwMTA4XHUwMTBjXHhjN1x1MDEwYVx1MDEwZVx4YzlceGM4XHhjYlx4Y2FcdTAxMWFcdTAxMTZcdTAxMTJcdTAxMTgiXSxbIjhmYWFiYSIsIlx1MDExY1x1MDExZVx1MDEyMlx1''@;'; put 'put ''MDEyMFx1MDEyNFx4Y2RceGNjXHhjZlx4Y2VcdTAxY2ZcdTAxMzBcdTAxMmFcdTAxMmVcdTAxMjhcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM2RcdTAxM2JcdTAxNDNcdTAxNDdcdTAxNDVceGQxXHhkM1x4ZDJceGQ2XHhkNFx1MDFkMVx1MDE1MFx1MDE0Y1x4ZDVcdTAxNTRcdTAxNThcdTAxNTZc''@;'; put 'put ''dTAxNWFcdTAxNWNcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNjJceGRhXHhkOVx4ZGNceGRiXHUwMTZjXHUwMWQzXHUwMTcwXHUwMTZhXHUwMTcyXHUwMTZlXHUwMTY4XHUwMWQ3XHUwMWRiXHUwMWQ5XHUwMWQ1XHUwMTc0XHhkZFx1MDE3OFx1MDE3Nlx1MDE3OVx1MDE3ZFx1MDE3YiJdLFsiOGZh''@;'; put 'put ''YmExIiwiXHhlMVx4ZTBceGU0XHhlMlx1MDEwM1x1MDFjZVx1MDEwMVx1MDEwNVx4ZTVceGUzXHUwMTA3XHUwMTA5XHUwMTBkXHhlN1x1MDEwYlx1MDEwZlx4ZTlceGU4XHhlYlx4ZWFcdTAxMWJcdTAxMTdcdTAxMTNcdTAxMTlcdTAxZjVcdTAxMWRcdTAxMWYiXSxbIjhmYWJiZCIsIlx1MDEy''@;'; put 'put ''MVx1MDEyNVx4ZWRceGVjXHhlZlx4ZWVcdTAxZDAiXSxbIjhmYWJjNSIsIlx1MDEyYlx1MDEyZlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzYVx1MDEzZVx1MDEzY1x1MDE0NFx1MDE0OFx1MDE0Nlx4ZjFceGYzXHhmMlx4ZjZceGY0XHUwMWQyXHUwMTUxXHUwMTRkXHhmNVx1MDE1NVx1MDE1OVx1''@;'; put 'put ''MDE1N1x1MDE1Ylx1MDE1ZFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE2M1x4ZmFceGY5XHhmY1x4ZmJcdTAxNmRcdTAxZDRcdTAxNzFcdTAxNmJcdTAxNzNcdTAxNmZcdTAxNjlcdTAxZDhcdTAxZGNcdTAxZGFcdTAxZDZcdTAxNzVceGZkXHhmZlx1MDE3N1x1MDE3YVx1MDE3ZVx1MDE3YyJdLFsi''@;'; put 'put ''OGZiMGExIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTBjXHU0ZTEyXHU0ZTFmXHU0ZTIzXHU0ZTI0XHU0ZTI4XHU0ZTJiXHU0ZTJlXHU0ZTJmXHU0ZTMwXHU0ZTM1XHU0ZTQwXHU0ZTQxXHU0ZTQ0XHU0ZTQ3XHU0ZTUxXHU0ZTVhXHU0ZTVjXHU0ZTYzXHU0ZTY4XHU0ZTY5XHU0ZTc0XHU0ZTc1''@;'; put 'put ''XHU0ZTc5XHU0ZTdmXHU0ZThkXHU0ZTk2XHU0ZTk3XHU0ZTlkXHU0ZWFmXHU0ZWI5XHU0ZWMzXHU0ZWQwXHU0ZWRhXHU0ZWRiXHU0ZWUwXHU0ZWUxXHU0ZWUyXHU0ZWU4XHU0ZWVmXHU0ZWYxXHU0ZWYzXHU0ZWY1XHU0ZWZkXHU0ZWZlXHU0ZWZmXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA4XHU0''@;'; put 'put ''ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjE1XHU0ZjE2XHU0ZjE3XHU0ZjE5XHU0ZjJlXHU0ZjMxXHU0ZjYwXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlXHU0ZjQwXHU0ZjQyXHU0ZjQ4XHU0ZjQ5XHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjU4XHU0ZjVmXHU0ZjYz''@;'; put 'put ''XHU0ZjZhXHU0ZjZjXHU0ZjZlXHU0ZjcxXHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjdlXHU0ZjgxXHU0ZjgyXHU0Zjg0Il0sWyI4ZmIxYTEiLCJcdTRmODVcdTRmODlcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTRcdTRmOTdcdTRmOTlcdTRmOWFc''@;'; put 'put ''dTRmOWVcdTRmOWZcdTRmYjJcdTRmYjdcdTRmYjlcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzVcdTRmYzZcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmY2ZcdTRmZDJcdTRmZGNcdTRmZTBcdTRmZTJcdTRmZjBcdTRmZjJcdTRmZmNcdTRmZmRcdTRm''@;'; put 'put ''ZmZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMGFcdTUwMGNcdTUwMGVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMWJcdTUwMWNcdTUwMWRcdTUwMWVcdTUwMjJcdTUwMjdcdTUwMmVcdTUwMzBcdTUwMzJcdTUwMzNcdTUwMzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZc''@;'; put 'put ''dTUwNGFcdTUwNGNcdTUwNGVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNWZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUwNjdcdTUwNmFcdTUwNmRcdTUwNzBcdTUwNzFcdTUwM2JcdTUwODFcdTUwODNcdTUwODRcdTUwODZcdTUwOGFcdTUwOGVcdTUwOGZcdTUwOTAiXSxb''@;'; put 'put ''IjhmYjJhMSIsIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Ylx1NTA5Y1x1NTA5ZSIsNCwiXHU1MGFhXHU1MGFmXHU1MGIwXHU1MGI5XHU1MGJhXHU1MGJkXHU1MGMwXHU1MGMzXHU1MGM0XHU1MGM3XHU1MGNjXHU1MGNlXHU1MGQwXHU1MGQzXHU1MGQ0XHU1MGQ4XHU1MGRjXHU1MGRk''@;'; put 'put ''XHU1MGRmXHU1MGUyXHU1MGU0XHU1MGU2XHU1MGU4XHU1MGU5XHU1MGVmXHU1MGYxXHU1MGY2XHU1MGZhXHU1MGZlXHU1MTAzXHU1MTA2XHU1MTA3XHU1MTA4XHU1MTBiXHU1MTBjXHU1MTBkXHU1MTBlXHU1MGYyXHU1MTEwXHU1MTE3XHU1MTE5XHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1''@;'; put 'put ''MTIzXHU1MTI3XHU1MTI4XHU1MTJjXHU1MTJkXHU1MTJmXHU1MTMxXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM4XHU1MTM5XHU1MTQyXHU1MTRhXHU1MTRmXHU1MTUzXHU1MTU1XHU1MTU3XHU1MTU4XHU1MTVmXHU1MTY0XHU1MTY2XHU1MTdlXHU1MTgzXHU1MTg0XHU1MThiXHU1MThlXHU1MTk4''@;'; put 'put ''XHU1MTlkXHU1MWExXHU1MWEzXHU1MWFkXHU1MWI4XHU1MWJhXHU1MWJjXHU1MWJlXHU1MWJmXHU1MWMyIl0sWyI4ZmIzYTEiLCJcdTUxYzhcdTUxY2ZcdTUxZDFcdTUxZDJcdTUxZDNcdTUxZDVcdTUxZDhcdTUxZGVcdTUxZTJcdTUxZTVcdTUxZWVcdTUxZjJcdTUxZjNcdTUxZjRcdTUxZjdc''@;'; put 'put ''dTUyMDFcdTUyMDJcdTUyMDVcdTUyMTJcdTUyMTNcdTUyMTVcdTUyMTZcdTUyMThcdTUyMjJcdTUyMjhcdTUyMzFcdTUyMzJcdTUyMzVcdTUyM2NcdTUyNDVcdTUyNDlcdTUyNTVcdTUyNTdcdTUyNThcdTUyNWFcdTUyNWNcdTUyNWZcdTUyNjBcdTUyNjFcdTUyNjZcdTUyNmVcdTUyNzdcdTUy''@;'; put 'put ''NzhcdTUyNzlcdTUyODBcdTUyODJcdTUyODVcdTUyOGFcdTUyOGNcdTUyOTNcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWZcdTUyYjBcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYmFcdTUyYmJcdTUyYmRcdTUyYzBcdTUyYzRc''@;'; put 'put ''dTUyYzZcdTUyYzhcdTUyY2NcdTUyY2ZcdTUyZDFcdTUyZDRcdTUyZDZcdTUyZGJcdTUyZGNcdTUyZTFcdTUyZTVcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWNcdTUyZjBcdTUyZjFcdTUyZjRcdTUyZjZcdTUyZjdcdTUzMDBcdTUzMDNcdTUzMGFcdTUzMGIiXSxbIjhmYjRhMSIsIlx1NTMwY1x1''@;'; put 'put ''NTMxMVx1NTMxM1x1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMzMFx1NTMzMlx1NTMzNVx1NTMzY1x1NTMzZFx1NTMzZVx1NTM0Mlx1NTM0Y1x1NTM0Ylx1NTM1OVx1NTM1Ylx1NTM2MVx1NTM2M1x1NTM2''@;'; put 'put ''NVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3OVx1NTM3ZVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4ZVx1NTM5M1x1NTM5NFx1NTM5OVx1NTM5ZFx1NTNhMVx1NTNhNFx1NTNhYVx1NTNhYlx1NTNhZlx1NTNiMlx1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiYVx1NTNiZFx1NTNjMFx1NTNjNVx1''@;'; put 'put ''NTNjZlx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkZFx1NTNkZVx1NTNlMFx1NTNlNlx1NTNlN1x1NTNmNVx1NTQwMlx1NTQxM1x1NTQxYVx1NTQyMVx1NTQyN1x1NTQyOFx1NTQyYVx1NTQyZlx1NTQzMVx1NTQzNFx1NTQzNVx1NTQ0M1x1NTQ0NFx1NTQ0N1x1NTQ0ZFx1NTQ0Zlx1NTQ1''@;'; put 'put ''ZVx1NTQ2Mlx1NTQ2NFx1NTQ2Nlx1NTQ2N1x1NTQ2OVx1NTQ2Ylx1NTQ2ZFx1NTQ2ZVx1NTQ3NFx1NTQ3ZiJdLFsiOGZiNWExIiwiXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg4XHU1NDg5XHU1NDhkXHU1NDkxXHU1NDk1XHU1NDk2XHU1NDljXHU1NDlmXHU1NGExXHU1NGE2XHU1NGE3XHU1NGE5''@;'; put 'put ''XHU1NGFhXHU1NGFkXHU1NGFlXHU1NGIxXHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJiXHU1NGJmXHU1NGM2XHU1NGNhXHU1NGNkXHU1NGNlXHU1NGUwXHU1NGVhXHU1NGVjXHU1NGVmXHU1NGY2XHU1NGZjXHU1NGZlXHU1NGZmXHU1NTAwXHU1NTAxXHU1NTA1XHU1NTA4XHU1NTA5XHU1NTBjXHU1''@;'; put 'put ''NTBkXHU1NTBlXHU1NTE1XHU1NTJhXHU1NTJiXHU1NTMyXHU1NTM1XHU1NTM2XHU1NTNiXHU1NTNjXHU1NTNkXHU1NTQxXHU1NTQ3XHU1NTQ5XHU1NTRhXHU1NTRkXHU1NTUwXHU1NTUxXHU1NTU4XHU1NTVhXHU1NTViXHU1NTVlXHU1NTYwXHU1NTYxXHU1NTY0XHU1NTY2XHU1NTdmXHU1NTgx''@;'; put 'put ''XHU1NTgyXHU1NTg2XHU1NTg4XHU1NThlXHU1NThmXHU1NTkxXHU1NTkyXHU1NTkzXHU1NTk0XHU1NTk3XHU1NWEzXHU1NWE0XHU1NWFkXHU1NWIyXHU1NWJmXHU1NWMxXHU1NWMzXHU1NWM2XHU1NWM5XHU1NWNiXHU1NWNjXHU1NWNlXHU1NWQxXHU1NWQyIl0sWyI4ZmI2YTEiLCJcdTU1ZDNc''@;'; put 'put ''dTU1ZDdcdTU1ZDhcdTU1ZGJcdTU1ZGVcdTU1ZTJcdTU1ZTlcdTU1ZjZcdTU1ZmZcdTU2MDVcdTU2MDhcdTU2MGFcdTU2MGQiLDUsIlx1NTYxOVx1NTYyY1x1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOVx1NTYzYlx1NTYzY1x1NTYzZFx1NTYzZlx1NTY0MFx1NTY0MVx1NTY0M1x1NTY0''@;'; put 'put ''NFx1NTY0Nlx1NTY0OVx1NTY0Ylx1NTY0ZFx1NTY0Zlx1NTY1NFx1NTY1ZVx1NTY2MFx1NTY2MVx1NTY2Mlx1NTY2M1x1NTY2Nlx1NTY2OVx1NTY2ZFx1NTY2Zlx1NTY3MVx1NTY3Mlx1NTY3NVx1NTY4NFx1NTY4NVx1NTY4OFx1NTY4Ylx1NTY4Y1x1NTY5NVx1NTY5OVx1NTY5YVx1NTY5ZFx1''@;'; put 'put ''NTY5ZVx1NTY5Zlx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZiMVx1NTZiM1x1NTZiN1x1NTZiZVx1NTZjNVx1NTZjOVx1NTZjYVx1NTZjYlx1NTZjZlx1NTZkMFx1NTZjY1x1NTZjZFx1NTZkOVx1NTZkY1x1NTZkZFx1NTZkZlx1NTZlMVx1NTZlNCIsNCwi''@;'; put 'put ''XHU1NmYxXHU1NmViXHU1NmVkIl0sWyI4ZmI3YTEiLCJcdTU2ZjZcdTU2ZjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MGFcdTU3MGNcdTU3MTFcdTU3MTVcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MjBcdTU3MjJcdTU3MjNcdTU3MjRcdTU3MjVcdTU3MjlcdTU3MmFcdTU3MmNcdTU3MmVcdTU3MmZc''@;'; put 'put ''dTU3MzNcdTU3MzRcdTU3M2RcdTU3M2VcdTU3M2ZcdTU3NDVcdTU3NDZcdTU3NGNcdTU3NGRcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3NjhcdTU3NmJcdTU3NmQiLDQsIlx1NTc3M1x1NTc3NFx1NTc3NVx1NTc3N1x1NTc3OVx1NTc3YVx1NTc3Ylx1NTc3Y1x1NTc3ZVx1NTc4MVx1NTc4''@;'; put 'put ''M1x1NTc4Y1x1NTc5NFx1NTc5N1x1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhMVx1NTc5NVx1NTdhN1x1NTdhOFx1NTdhOVx1NTdhY1x1NTdiOFx1NTdiZFx1NTdjN1x1NTdjOFx1NTdjY1x1NTdjZlx1NTdkNVx1NTdkZFx1NTdkZVx1NTdlNFx1NTdlNlx1NTdlN1x1''@;'; put 'put ''NTdlOVx1NTdlZFx1NTdmMFx1NTdmNVx1NTdmNlx1NTdmOFx1NTdmZFx1NTdmZVx1NTdmZlx1NTgwM1x1NTgwNFx1NTgwOFx1NTgwOVx1NTdlMSJdLFsiOGZiOGExIiwiXHU1ODBjXHU1ODBkXHU1ODFiXHU1ODFlXHU1ODFmXHU1ODIwXHU1ODI2XHU1ODI3XHU1ODJkXHU1ODMyXHU1ODM5XHU1''@;'; put 'put ''ODNmXHU1ODQ5XHU1ODRjXHU1ODRkXHU1ODRmXHU1ODUwXHU1ODU1XHU1ODVmXHU1ODYxXHU1ODY0XHU1ODY3XHU1ODY4XHU1ODc4XHU1ODdjXHU1ODdmXHU1ODgwXHU1ODgxXHU1ODg3XHU1ODg4XHU1ODg5XHU1ODhhXHU1ODhjXHU1ODhkXHU1ODhmXHU1ODkwXHU1ODk0XHU1ODk2XHU1ODlk''@;'; put 'put ''XHU1OGEwXHU1OGExXHU1OGEyXHU1OGE2XHU1OGE5XHU1OGIxXHU1OGIyXHU1OGM0XHU1OGJjXHU1OGMyXHU1OGM4XHU1OGNkXHU1OGNlXHU1OGQwXHU1OGQyXHU1OGQ0XHU1OGQ2XHU1OGRhXHU1OGRkXHU1OGUxXHU1OGUyXHU1OGU5XHU1OGYzXHU1OTA1XHU1OTA2XHU1OTBiXHU1OTBjXHU1''@;'; put 'put ''OTEyXHU1OTEzXHU1OTE0XHU4NjQxXHU1OTFkXHU1OTIxXHU1OTIzXHU1OTI0XHU1OTI4XHU1OTJmXHU1OTMwXHU1OTMzXHU1OTM1XHU1OTM2XHU1OTNmXHU1OTQzXHU1OTQ2XHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTZiXHU1OTZk''@;'; put 'put ''Il0sWyI4ZmI5YTEiLCJcdTU5NmZcdTU5NzJcdTU5NzVcdTU5NzZcdTU5NzlcdTU5N2JcdTU5N2NcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OTJcdTU5OTVcdTU5OTdcdTU5OWZcdTU5YTRcdTU5YTdcdTU5YWRcdTU5YWVcdTU5YWZcdTU5YjBcdTU5YjNcdTU5YjdcdTU5YmFcdTU5YmNcdTU5YzFc''@;'; put 'put ''dTU5YzNcdTU5YzRcdTU5YzhcdTU5Y2FcdTU5Y2RcdTU5ZDJcdTU5ZGRcdTU5ZGVcdTU5ZGZcdTU5ZTNcdTU5ZTRcdTU5ZTdcdTU5ZWVcdTU5ZWZcdTU5ZjFcdTU5ZjJcdTU5ZjRcdTU5ZjdcdTVhMDBcdTVhMDRcdTVhMGNcdTVhMGRcdTVhMGVcdTVhMTJcdTVhMTNcdTVhMWVcdTVhMjNcdTVh''@;'; put 'put ''MjRcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmRcdTVhMzBcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGNcdTVhNTBcdTVhNTVcdTVhNWVcdTVhNjNcdTVhNjVcdTVhNjdcdTVhNmRcdTVhNzdcdTVhN2FcdTVhN2JcdTVhN2VcdTVhOGJcdTVhOTBcdTVhOTNcdTVhOTZcdTVhOTlcdTVhOWNc''@;'; put 'put ''dTVhOWVcdTVhOWZcdTVhYTBcdTVhYTJcdTVhYTdcdTVhYWNcdTVhYjFcdTVhYjJcdTVhYjNcdTVhYjVcdTVhYjhcdTVhYmFcdTVhYmJcdTVhYmYiXSxbIjhmYmFhMSIsIlx1NWFjNFx1NWFjNlx1NWFjOFx1NWFjZlx1NWFkYVx1NWFkY1x1NWFlMFx1NWFlNVx1NWFlYVx1NWFlZVx1NWFmNVx1''@;'; put 'put ''NWFmNlx1NWFmZFx1NWIwMFx1NWIwMVx1NWIwOFx1NWIxN1x1NWIzNFx1NWIxOVx1NWIxYlx1NWIxZFx1NWIyMVx1NWIyNVx1NWIyZFx1NWIzOFx1NWI0MVx1NWI0Ylx1NWI0Y1x1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2OFx1NWI2ZVx1NWI2Zlx1NWI3Y1x1NWI3ZFx1NWI3ZVx1NWI3Zlx1NWI4''@;'; put 'put ''MVx1NWI4NFx1NWI4Nlx1NWI4YVx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5M1x1NWI5NFx1NWI5Nlx1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjZFx1NWJjZlx1NWJkNiIsNCwiXHU1YmUwXHU1YmVmXHU1''@;'; put 'put ''YmYxXHU1YmY0XHU1YmZkXHU1YzBjXHU1YzE3XHU1YzFlXHU1YzFmXHU1YzIzXHU1YzI2XHU1YzI5XHU1YzJiXHU1YzJjXHU1YzJlXHU1YzMwXHU1YzMyXHU1YzM1XHU1YzM2XHU1YzU5XHU1YzVhXHU1YzVjXHU1YzYyXHU1YzYzXHU1YzY3XHU1YzY4XHU1YzY5Il0sWyI4ZmJiYTEiLCJcdTVj''@;'; put 'put ''NmRcdTVjNzBcdTVjNzRcdTVjNzVcdTVjN2FcdTVjN2JcdTVjN2NcdTVjN2RcdTVjODdcdTVjODhcdTVjOGFcdTVjOGZcdTVjOTJcdTVjOWRcdTVjOWZcdTVjYTBcdTVjYTJcdTVjYTNcdTVjYTZcdTVjYWFcdTVjYjJcdTVjYjRcdTVjYjVcdTVjYmFcdTVjYzlcdTVjY2JcdTVjZDJcdTVjZGRc''@;'; put 'put ''dTVjZDdcdTVjZWVcdTVjZjFcdTVjZjJcdTVjZjRcdTVkMDFcdTVkMDZcdTVkMGRcdTVkMTJcdTVkMmJcdTVkMjNcdTVkMjRcdTVkMjZcdTVkMjdcdTVkMzFcdTVkMzRcdTVkMzlcdTVkM2RcdTVkM2ZcdTVkNDJcdTVkNDNcdTVkNDZcdTVkNDhcdTVkNTVcdTVkNTFcdTVkNTlcdTVkNGFcdTVk''@;'; put 'put ''NWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjRcdTVkNmFcdTVkNmRcdTVkNzBcdTVkNzlcdTVkN2FcdTVkN2VcdTVkN2ZcdTVkODFcdTVkODNcdTVkODhcdTVkOGFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTlcdTVkOWJcdTVkOWZcdTVkYTBcdTVkYTdcdTVkYWJcdTVkYjBcdTVkYjRc''@;'; put 'put ''dTVkYjhcdTVkYjlcdTVkYzNcdTVkYzdcdTVkY2JcdTVkZDBcdTVkY2VcdTVkZDhcdTVkZDlcdTVkZTBcdTVkZTQiXSxbIjhmYmNhMSIsIlx1NWRlOVx1NWRmOFx1NWRmOVx1NWUwMFx1NWUwN1x1NWUwZFx1NWUxMlx1NWUxNFx1NWUxNVx1NWUxOFx1NWUxZlx1NWUyMFx1NWUyZVx1NWUyOFx1''@;'; put 'put ''NWUzMlx1NWUzNVx1NWUzZVx1NWU0Ylx1NWU1MFx1NWU0OVx1NWU1MVx1NWU1Nlx1NWU1OFx1NWU1Ylx1NWU1Y1x1NWU1ZVx1NWU2OFx1NWU2YSIsNCwiXHU1ZTcwXHU1ZTgwXHU1ZThiXHU1ZThlXHU1ZWEyXHU1ZWE0XHU1ZWE1XHU1ZWE4XHU1ZWFhXHU1ZWFjXHU1ZWIxXHU1ZWIzXHU1ZWJk''@;'; put 'put ''XHU1ZWJlXHU1ZWJmXHU1ZWM2XHU1ZWNjXHU1ZWNiXHU1ZWNlXHU1ZWQxXHU1ZWQyXHU1ZWQ0XHU1ZWQ1XHU1ZWRjXHU1ZWRlXHU1ZWU1XHU1ZWViXHU1ZjAyXHU1ZjA2XHU1ZjA3XHU1ZjA4XHU1ZjBlXHU1ZjE5XHU1ZjFjXHU1ZjFkXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjI4XHU1''@;'; put 'put ''ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjM0XHU1ZjM2XHU1ZjNiXHU1ZjNkXHU1ZjNmXHU1ZjQwXHU1ZjQ0XHU1ZjQ1XHU1ZjQ3XHU1ZjRkXHU1ZjUwXHU1ZjU0XHU1ZjU4XHU1ZjViXHU1ZjYwXHU1ZjYzXHU1ZjY0XHU1ZjY3Il0sWyI4ZmJkYTEiLCJcdTVmNmZcdTVmNzJcdTVmNzRcdTVm''@;'; put 'put ''NzVcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmODlcdTVmOGRcdTVmOGZcdTVmOTZcdTVmOWNcdTVmOWRcdTVmYTJcdTVmYTdcdTVmYWJcdTVmYTRcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjhcdTVmYzRcdTVmYzdcdTVmYzhcdTVmYzlcdTVmY2JcdTVmZDAiLDQsIlx1NWZkZVx1''@;'; put 'put ''NWZlMVx1NWZlMlx1NWZlOFx1NWZlOVx1NWZlYVx1NWZlY1x1NWZlZFx1NWZlZVx1NWZlZlx1NWZmMlx1NWZmM1x1NWZmNlx1NWZmYVx1NWZmY1x1NjAwN1x1NjAwYVx1NjAwZFx1NjAxM1x1NjAxNFx1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZlx1NjAyNFx1NjAyZFx1NjAzM1x1NjAzNVx1NjA0''@;'; put 'put ''MFx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0Y1x1NjA1MVx1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1ZFx1NjA2MVx1NjA2N1x1NjA3MVx1NjA3ZVx1NjA3Zlx1NjA4Mlx1NjA4Nlx1NjA4OFx1NjA4YVx1NjA4ZVx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5OFx1NjA5ZFx1NjA5ZVx1NjBhMlx1NjBhNFx1''@;'; put 'put ''NjBhNVx1NjBhOFx1NjBiMFx1NjBiMVx1NjBiNyJdLFsiOGZiZWExIiwiXHU2MGJiXHU2MGJlXHU2MGMyXHU2MGM0XHU2MGM4XHU2MGM5XHU2MGNhXHU2MGNiXHU2MGNlXHU2MGNmXHU2MGQ0XHU2MGQ1XHU2MGQ5XHU2MGRiXHU2MGRkXHU2MGRlXHU2MGUyXHU2MGU1XHU2MGYyXHU2MGY1XHU2''@;'; put 'put ''MGY4XHU2MGZjXHU2MGZkXHU2MTAyXHU2MTA3XHU2MTBhXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMTlcdTYxMWNcdTYxMWVcdTYxMjJcdTYxMmFcdTYxMmJcdTYxMzBcdTYxMzFcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzlcdTYxNDFcdTYxNDVcdTYxNDZcdTYxNDlcdTYxNWVc''@;'; put 'put ''dTYxNjBcdTYxNmNcdTYxNzJcdTYxNzhcdTYxN2JcdTYxN2NcdTYxN2ZcdTYxODBcdTYxODFcdTYxODNcdTYxODRcdTYxOGJcdTYxOGRcdTYxOTJcdTYxOTNcdTYxOTdcdTYxOThcdTYxOWNcdTYxOWRcdTYxOWZcdTYxYTBcdTYxYTVcdTYxYThcdTYxYWFcdTYxYWRcdTYxYjhcdTYxYjlcdTYx''@;'; put 'put ''YmNcdTYxYzBcdTYxYzFcdTYxYzJcdTYxY2VcdTYxY2ZcdTYxZDVcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTFcdTYxZTJcdTYxZTdcdTYxZTlcdTYxZTUiXSxbIjhmYmZhMSIsIlx1NjFlY1x1NjFlZFx1NjFlZlx1NjIwMVx1NjIwM1x1NjIwNFx1NjIwN1x1NjIxM1x1NjIxNVx1NjIx''@;'; put 'put ''Y1x1NjIyMFx1NjIyMlx1NjIyM1x1NjIyN1x1NjIyOVx1NjIyYlx1NjIzOVx1NjIzZFx1NjI0Mlx1NjI0M1x1NjI0NFx1NjI0Nlx1NjI0Y1x1NjI1MFx1NjI1MVx1NjI1Mlx1NjI1NFx1NjI1Nlx1NjI1YVx1NjI1Y1x1NjI2NFx1NjI2ZFx1NjI2Zlx1NjI3M1x1NjI3YVx1NjI3ZFx1NjI4ZFx1''@;'; put 'put ''NjI4ZVx1NjI4Zlx1NjI5MFx1NjJhNlx1NjJhOFx1NjJiM1x1NjJiNlx1NjJiN1x1NjJiYVx1NjJiZVx1NjJiZlx1NjJjNFx1NjJjZVx1NjJkNVx1NjJkNlx1NjJkYVx1NjJlYVx1NjJmMlx1NjJmNFx1NjJmY1x1NjJmZFx1NjMwM1x1NjMwNFx1NjMwYVx1NjMwYlx1NjMwZFx1NjMxMFx1NjMx''@;'; put 'put ''M1x1NjMxNlx1NjMxOFx1NjMyOVx1NjMyYVx1NjMyZFx1NjMzNVx1NjMzNlx1NjMzOVx1NjMzY1x1NjM0MVx1NjM0Mlx1NjM0M1x1NjM0NFx1NjM0Nlx1NjM0YVx1NjM0Ylx1NjM0ZVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1OFx1NjM1Ylx1NjM2NVx1NjM2Nlx1NjM2Y1x1NjM2ZFx1NjM3MVx1''@;'; put 'put ''NjM3NFx1NjM3NSJdLFsiOGZjMGExIiwiXHU2Mzc4XHU2MzdjXHU2MzdkXHU2MzdmXHU2MzgyXHU2Mzg0XHU2Mzg3XHU2MzhhXHU2MzkwXHU2Mzk0XHU2Mzk1XHU2Mzk5XHU2MzlhXHU2MzllXHU2M2E0XHU2M2E2XHU2M2FkXHU2M2FlXHU2M2FmXHU2M2JkXHU2M2MxXHU2M2M1XHU2M2M4XHU2''@;'; put 'put ''M2NlXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2RjXHU2M2UwXHU2M2U1XHU2M2VhXHU2M2VjXHU2M2YyXHU2M2YzXHU2M2Y1XHU2M2Y4XHU2M2Y5XHU2NDA5XHU2NDBhXHU2NDEwXHU2NDEyXHU2NDE0XHU2NDE4XHU2NDFlXHU2NDIwXHU2NDIyXHU2NDI0XHU2NDI1XHU2NDI5XHU2NDJh''@;'; put 'put ''XHU2NDJmXHU2NDMwXHU2NDM1XHU2NDNkXHU2NDNmXHU2NDRiXHU2NDRmXHU2NDUxXHU2NDUyXHU2NDUzXHU2NDU0XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYzXHU2NDZkXHU2NDczXHU2NDc0XHU2NDdiXHU2NDdkXHU2NDg1XHU2NDg3XHU2NDhmXHU2''@;'; put 'put ''NDkwXHU2NDkxXHU2NDk4XHU2NDk5XHU2NDliXHU2NDlkXHU2NDlmXHU2NGExXHU2NGEzXHU2NGE2XHU2NGE4XHU2NGFjXHU2NGIzXHU2NGJkXHU2NGJlXHU2NGJmIl0sWyI4ZmMxYTEiLCJcdTY0YzRcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2VcdTY0ZDBcdTY0ZDFcdTY0ZDVcdTY0''@;'; put 'put ''ZDdcdTY0ZTRcdTY0ZTVcdTY0ZTlcdTY0ZWFcdTY0ZWRcdTY0ZjBcdTY0ZjVcdTY0ZjdcdTY0ZmJcdTY0ZmZcdTY1MDFcdTY1MDRcdTY1MDhcdTY1MDlcdTY1MGFcdTY1MGZcdTY1MTNcdTY1MTRcdTY1MTZcdTY1MTlcdTY1MWJcdTY1MWVcdTY1MWZcdTY1MjJcdTY1MjZcdTY1MjlcdTY1MmVc''@;'; put 'put ''dTY1MzFcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDNcdTY1NDdcdTY1NDlcdTY1NTBcdTY1NTJcdTY1NTRcdTY1NWZcdTY1NjBcdTY1NjdcdTY1NmJcdTY1N2FcdTY1N2RcdTY1ODFcdTY1ODVcdTY1OGFcdTY1OTJcdTY1OTVcdTY1OThcdTY1OWRcdTY1YTBcdTY1YTNcdTY1YTZcdTY1YWVcdTY1''@;'; put 'put ''YjJcdTY1YjNcdTY1YjRcdTY1YmZcdTY1YzJcdTY1YzhcdTY1YzlcdTY1Y2VcdTY1ZDBcdTY1ZDRcdTY1ZDZcdTY1ZDhcdTY1ZGZcdTY1ZjBcdTY1ZjJcdTY1ZjRcdTY1ZjVcdTY1ZjlcdTY1ZmVcdTY1ZmZcdTY2MDBcdTY2MDRcdTY2MDhcdTY2MDlcdTY2MGRcdTY2MTFcdTY2MTJcdTY2MTVc''@;'; put 'put ''dTY2MTZcdTY2MWQiXSxbIjhmYzJhMSIsIlx1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMVx1NjYzM1x1NjYzOVx1NjYzN1x1NjY0MFx1NjY0NVx1NjY0Nlx1NjY0YVx1NjY0Y1x1NjY1MVx1NjY0ZVx1''@;'; put 'put ''NjY1N1x1NjY1OFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY2MFx1NjY2MVx1NjZmYlx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY3ZVx1NjY3M1x1NjY3NVx1NjY3Zlx1NjY3N1x1NjY3OFx1NjY3OVx1NjY3Ylx1NjY4MFx1NjY3Y1x1NjY4Ylx1NjY4Y1x1NjY4ZFx1NjY5MFx1NjY5Mlx1NjY5OVx1NjY5''@;'; put 'put ''YVx1NjY5Ylx1NjY5Y1x1NjY5Zlx1NjZhMFx1NjZhNFx1NjZhZFx1NjZiMVx1NjZiMlx1NjZiNVx1NjZiYlx1NjZiZlx1NjZjMFx1NjZjMlx1NjZjM1x1NjZjOFx1NjZjY1x1NjZjZVx1NjZjZlx1NjZkNFx1NjZkYlx1NjZkZlx1NjZlOFx1NjZlYlx1NjZlY1x1NjZlZVx1NjZmYVx1NjcwNVx1''@;'; put 'put ''NjcwN1x1NjcwZVx1NjcxM1x1NjcxOVx1NjcxY1x1NjcyMFx1NjcyMlx1NjczM1x1NjczZVx1Njc0NVx1Njc0N1x1Njc0OFx1Njc0Y1x1Njc1NFx1Njc1NVx1Njc1ZCJdLFsiOGZjM2ExIiwiXHU2NzY2XHU2NzZjXHU2NzZlXHU2Nzc0XHU2Nzc2XHU2NzdiXHU2NzgxXHU2Nzg0XHU2NzhlXHU2''@;'; put 'put ''NzhmXHU2NzkxXHU2NzkzXHU2Nzk2XHU2Nzk4XHU2Nzk5XHU2NzliXHU2N2IwXHU2N2IxXHU2N2IyXHU2N2I1XHU2N2JiXHU2N2JjXHU2N2JkXHU2N2Y5XHU2N2MwXHU2N2MyXHU2N2MzXHU2N2M1XHU2N2M4XHU2N2M5XHU2N2QyXHU2N2Q3XHU2N2Q5XHU2N2RjXHU2N2UxXHU2N2U2XHU2N2Yw''@;'; put 'put ''XHU2N2YyXHU2N2Y2XHU2N2Y3XHU2ODUyXHU2ODE0XHU2ODE5XHU2ODFkXHU2ODFmXHU2ODI4XHU2ODI3XHU2ODJjXHU2ODJkXHU2ODJmXHU2ODMwXHU2ODMxXHU2ODMzXHU2ODNiXHU2ODNmXHU2ODQ0XHU2ODQ1XHU2ODRhXHU2ODRjXHU2ODU1XHU2ODU3XHU2ODU4XHU2ODViXHU2ODZiXHU2''@;'; put 'put ''ODZlIiw0LCJcdTY4NzVcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OWFcdTY4OWNcdTY4YTFcdTY4YTNcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWVcdTY4YjJcdTY4YmJcdTY4YzVcdTY4YzhcdTY4Y2NcdTY4Y2YiXSxbIjhm''@;'; put 'put ''YzRhMSIsIlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNlx1NjhkOVx1NjhkY1x1NjhkZFx1NjhlNVx1NjhlOFx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhmMFx1NjhmMVx1NjhmNVx1NjhmNlx1NjhmYlx1NjhmY1x1NjhmZFx1NjkwNlx1NjkwOVx1NjkwYVx1NjkxMFx1NjkxMVx1NjkxM1x1''@;'; put 'put ''NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzYlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0ZVx1Njk1N1x1Njk1Ylx1Njk2M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Y1x1Njk3MFx1Njk3MVx1Njk3Mlx1Njk3YVx1Njk3Ylx1Njk3Zlx1Njk4MFx1Njk4''@;'; put 'put ''ZFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlhMVx1NjlhNVx1NjlhNlx1NjlhOFx1NjlhYlx1NjlhZFx1NjlhZlx1NjliN1x1NjliOFx1NjliYVx1NjliY1x1NjljNVx1NjljOFx1NjlkMVx1NjlkNlx1NjlkN1x1NjllMlx1NjllNVx1NjllZVx1NjllZlx1NjlmMVx1NjlmM1x1NjlmNVx1NjlmZVx1''@;'; put 'put ''NmEwMFx1NmEwMVx1NmEwM1x1NmEwZlx1NmExMVx1NmExNVx1NmExYVx1NmExZFx1NmEyMFx1NmEyNFx1NmEyOFx1NmEzMFx1NmEzMiJdLFsiOGZjNWExIiwiXHU2YTM0XHU2YTM3XHU2YTNiXHU2YTNlXHU2YTNmXHU2YTQ1XHU2YTQ2XHU2YTQ5XHU2YTRhXHU2YTRlXHU2YTUwXHU2YTUxXHU2''@;'; put 'put ''YTUyXHU2YTU1XHU2YTU2XHU2YTViXHU2YTY0XHU2YTY3XHU2YTZhXHU2YTcxXHU2YTczXHU2YTdlXHU2YTgxXHU2YTgzXHU2YTg2XHU2YTg3XHU2YTg5XHU2YThiXHU2YTkxXHU2YTliXHU2YTlkXHU2YTllXHU2YTlmXHU2YWE1XHU2YWFiXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWI0XHU2YWJk''@;'; put 'put ''XHU2YWJlXHU2YWJmXHU2YWM2XHU2YWM5XHU2YWM4XHU2YWNjXHU2YWQwXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWRjXHU2YWRkXHU2YWU0XHU2YWU3XHU2YWVjXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWZjXHU2YWZkXHU2YjAyXHU2YjAzXHU2YjA2XHU2YjA3XHU2YjA5XHU2YjBmXHU2YjEwXHU2''@;'; put 'put ''YjExXHU2YjE3XHU2YjFiXHU2YjFlXHU2YjI0XHU2YjI4XHU2YjJiXHU2YjJjXHU2YjJmXHU2YjM1XHU2YjM2XHU2YjNiXHU2YjNmXHU2YjQ2XHU2YjRhXHU2YjRkXHU2YjUyXHU2YjU2XHU2YjU4XHU2YjVkXHU2YjYwXHU2YjY3XHU2YjZiXHU2YjZlXHU2YjcwXHU2Yjc1XHU2YjdkIl0sWyI4''@;'; put 'put ''ZmM2YTEiLCJcdTZiN2VcdTZiODJcdTZiODVcdTZiOTdcdTZiOWJcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYThcdTZiYTlcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYjBcdTZiYjhcdTZiYjlcdTZiYmRcdTZiYmVcdTZiYzNcdTZiYzRcdTZiYzlcdTZiY2NcdTZiZDZcdTZiZGFcdTZiZTFc''@;'; put 'put ''dTZiZTNcdTZiZTZcdTZiZTdcdTZiZWVcdTZiZjFcdTZiZjdcdTZiZjlcdTZiZmZcdTZjMDJcdTZjMDRcdTZjMDVcdTZjMDlcdTZjMGRcdTZjMGVcdTZjMTBcdTZjMTJcdTZjMTlcdTZjMWZcdTZjMjZcdTZjMjdcdTZjMjhcdTZjMmNcdTZjMmVcdTZjMzNcdTZjMzVcdTZjMzZcdTZjM2FcdTZj''@;'; put 'put ''M2JcdTZjM2ZcdTZjNGFcdTZjNGJcdTZjNGRcdTZjNGZcdTZjNTJcdTZjNTRcdTZjNTlcdTZjNWJcdTZjNWNcdTZjNmJcdTZjNmRcdTZjNmZcdTZjNzRcdTZjNzZcdTZjNzhcdTZjNzlcdTZjN2JcdTZjODVcdTZjODZcdTZjODdcdTZjODlcdTZjOTRcdTZjOTVcdTZjOTdcdTZjOThcdTZjOWNc''@;'; put 'put ''dTZjOWZcdTZjYjBcdTZjYjJcdTZjYjRcdTZjYzJcdTZjYzZcdTZjY2RcdTZjY2ZcdTZjZDBcdTZjZDFcdTZjZDJcdTZjZDRcdTZjZDYiXSxbIjhmYzdhMSIsIlx1NmNkYVx1NmNkY1x1NmNlMFx1NmNlN1x1NmNlOVx1NmNlYlx1NmNlY1x1NmNlZVx1NmNmMlx1NmNmNFx1NmQwNFx1NmQwN1x1''@;'; put 'put ''NmQwYVx1NmQwZVx1NmQwZlx1NmQxMVx1NmQxM1x1NmQxYVx1NmQyNlx1NmQyN1x1NmQyOFx1NmM2N1x1NmQyZVx1NmQyZlx1NmQzMVx1NmQzOVx1NmQzY1x1NmQzZlx1NmQ1N1x1NmQ1ZVx1NmQ1Zlx1NmQ2MVx1NmQ2NVx1NmQ2N1x1NmQ2Zlx1NmQ3MFx1NmQ3Y1x1NmQ4Mlx1NmQ4N1x1NmQ5''@;'; put 'put ''MVx1NmQ5Mlx1NmQ5NFx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmRhYVx1NmRhY1x1NmRiNFx1NmRiN1x1NmRiOVx1NmRiZFx1NmRiZlx1NmRjNFx1NmRjOFx1NmRjYVx1NmRjZVx1NmRjZlx1NmRkNlx1NmRkYlx1NmRkZFx1NmRkZlx1NmRlMFx1NmRlMlx1NmRlNVx1NmRlOVx1NmRlZlx1NmRmMFx1''@;'; put 'put ''NmRmNFx1NmRmNlx1NmRmY1x1NmUwMFx1NmUwNFx1NmUxZVx1NmUyMlx1NmUyN1x1NmUzMlx1NmUzNlx1NmUzOVx1NmUzYlx1NmUzY1x1NmU0NFx1NmU0NVx1NmU0OFx1NmU0OVx1NmU0Ylx1NmU0Zlx1NmU1MVx1NmU1Mlx1NmU1M1x1NmU1NFx1NmU1N1x1NmU1Y1x1NmU1ZFx1NmU1ZSJdLFsi''@;'; put 'put ''OGZjOGExIiwiXHU2ZTYyXHU2ZTYzXHU2ZTY4XHU2ZTczXHU2ZTdiXHU2ZTdkXHU2ZThkXHU2ZTkzXHU2ZTk5XHU2ZWEwXHU2ZWE3XHU2ZWFkXHU2ZWFlXHU2ZWIxXHU2ZWIzXHU2ZWJiXHU2ZWJmXHU2ZWMwXHU2ZWMxXHU2ZWMzXHU2ZWM3XHU2ZWM4XHU2ZWNhXHU2ZWNkXHU2ZWNlXHU2ZWNm''@;'; put 'put ''XHU2ZWViXHU2ZWVkXHU2ZWVlXHU2ZWY5XHU2ZWZiXHU2ZWZkXHU2ZjA0XHU2ZjA4XHU2ZjBhXHU2ZjBjXHU2ZjBkXHU2ZjE2XHU2ZjE4XHU2ZjFhXHU2ZjFiXHU2ZjI2XHU2ZjI5XHU2ZjJhXHU2ZjJmXHU2ZjMwXHU2ZjMzXHU2ZjM2XHU2ZjNiXHU2ZjNjXHU2ZjJkXHU2ZjRmXHU2ZjUxXHU2''@;'; put 'put ''ZjUyXHU2ZjUzXHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjVkXHU2ZjVlXHU2ZjYxXHU2ZjYyXHU2ZjY4XHU2ZjZjXHU2ZjdkXHU2ZjdlXHU2ZjgzXHU2Zjg3XHU2Zjg4XHU2ZjhiXHU2ZjhjXHU2ZjhkXHU2ZjkwXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk2XHU2ZjlhXHU2ZjlmXHU2ZmEwXHU2ZmE1''@;'; put 'put ''XHU2ZmE2XHU2ZmE3XHU2ZmE4XHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmI1XHU2ZmI2XHU2ZmJjXHU2ZmM1XHU2ZmM3XHU2ZmM4XHU2ZmNhIl0sWyI4ZmM5YTEiLCJcdTZmZGFcdTZmZGVcdTZmZThcdTZmZTlcdTZmZjBcdTZmZjVcdTZmZjlcdTZmZmNcdTZmZmRcdTcwMDBcdTcwMDVcdTcwMDZc''@;'; put 'put ''dTcwMDdcdTcwMGRcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMmZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM2NcdTcwNDNcdTcwNDRcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNTRcdTcwNTVcdTcwNWRcdTcwNWVcdTcwNGVcdTcwNjRcdTcwNjVcdTcwNmNcdTcwNmVcdTcwNzVcdTcwNzZcdTcw''@;'; put 'put ''N2VcdTcwODFcdTcwODVcdTcwODZcdTcwOTQiLDQsIlx1NzA5Ylx1NzBhNFx1NzBhYlx1NzBiMFx1NzBiMVx1NzBiNFx1NzBiN1x1NzBjYVx1NzBkMVx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkOFx1NzBkY1x1NzBlNFx1NzBmYVx1NzEwMyIsNCwiXHU3MTBiXHU3MTBjXHU3MTBmXHU3''@;'; put 'put ''MTFlXHU3MTIwXHU3MTJiXHU3MTJkXHU3MTJmXHU3MTMwXHU3MTMxXHU3MTM4XHU3MTQxXHU3MTQ1XHU3MTQ2XHU3MTQ3XHU3MTRhXHU3MTRiXHU3MTUwXHU3MTUyXHU3MTU3XHU3MTVhXHU3MTVjXHU3MTVlXHU3MTYwIl0sWyI4ZmNhYTEiLCJcdTcxNjhcdTcxNzlcdTcxODBcdTcxODVcdTcx''@;'; put 'put ''ODdcdTcxOGNcdTcxOTJcdTcxOWFcdTcxOWJcdTcxYTBcdTcxYTJcdTcxYWZcdTcxYjBcdTcxYjJcdTcxYjNcdTcxYmFcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzRcdTcxY2JcdTcxY2NcdTcxZDNcdTcxZDZcdTcxZDlcdTcxZGFcdTcxZGNcdTcxZjhcdTcxZmVcdTcyMDBcdTcyMDdcdTcyMDhc''@;'; put 'put ''dTcyMDlcdTcyMTNcdTcyMTdcdTcyMWFcdTcyMWRcdTcyMWZcdTcyMjRcdTcyMmJcdTcyMmZcdTcyMzRcdTcyMzhcdTcyMzlcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDVcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTNcdTcyNTVcdTcyNTZcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcy''@;'; put 'put ''NjhcdTcyNmJcdTcyNmVcdTcyNmZcdTcyNzFcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2ZcdTcyODRcdTcyODlcdTcyOGRcdTcyOGVcdTcyOTNcdTcyOWJcdTcyYThcdTcyYWRcdTcyYWVcdTcyYjFcdTcyYjRcdTcyYmVcdTcyYzFcdTcyYzdcdTcyYzlcdTcyY2NcdTcyZDVcdTcyZDZc''@;'; put 'put ''dTcyZDhcdTcyZGZcdTcyZTVcdTcyZjNcdTcyZjRcdTcyZmFcdTcyZmIiXSxbIjhmY2JhMSIsIlx1NzJmZVx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwN1x1NzMwYlx1NzMwZFx1NzMxMlx1NzMxM1x1NzMxOFx1NzMxOVx1NzMxZVx1NzMyMlx1NzMyNFx1NzMyN1x1NzMyOFx1NzMyY1x1NzMzMVx1''@;'; put 'put ''NzMzMlx1NzMzNVx1NzMzYVx1NzMzYlx1NzMzZFx1NzM0M1x1NzM0ZFx1NzM1MFx1NzM1Mlx1NzM1Nlx1NzM1OFx1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM2Nlx1NzM2N1x1NzM2OVx1NzM2Ylx1NzM2Y1x1NzM2ZVx1NzM2Zlx1NzM3MVx1NzM3N1x1NzM3OVx1NzM3Y1x1NzM4MFx1NzM4''@;'; put 'put ''MVx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4ZVx1NzM5MFx1NzM5M1x1NzM5NVx1NzM5N1x1NzM5OFx1NzM5Y1x1NzM5ZVx1NzM5Zlx1NzNhMFx1NzNhMlx1NzNhNVx1NzNhNlx1NzNhYVx1NzNhYlx1NzNhZFx1NzNiNVx1NzNiN1x1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZlx1NzNjNVx1NzNjNlx1''@;'; put 'put ''NzNjOVx1NzNjYlx1NzNjY1x1NzNjZlx1NzNkMlx1NzNkM1x1NzNkNlx1NzNkOVx1NzNkZFx1NzNlMVx1NzNlM1x1NzNlNlx1NzNlN1x1NzNlOVx1NzNmNFx1NzNmNVx1NzNmN1x1NzNmOVx1NzNmYVx1NzNmYlx1NzNmZCJdLFsiOGZjY2ExIiwiXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDA0XHU3''@;'; put 'put ''NDA3XHU3NDBhXHU3NDExXHU3NDFhXHU3NDFiXHU3NDI0XHU3NDI2XHU3NDI4Iiw5LCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZcdTc0NDdcdTc0NGJcdTc0NGRcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NWRcdTc0NjJcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NmJcdTc0NmRcdTc0NmVc''@;'; put 'put ''dTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OGZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0OTlcdTc0OWFcdTc0OWNcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTNcdTc0YTZcdTc0YThcdTc0YTlcdTc0YWFcdTc0YWJcdTc0YWVcdTc0YWZcdTc0''@;'; put 'put ''YjFcdTc0YjJcdTc0YjVcdTc0YjlcdTc0YmJcdTc0YmZcdTc0YzhcdTc0YzlcdTc0Y2NcdTc0ZDBcdTc0ZDNcdTc0ZDhcdTc0ZGFcdTc0ZGJcdTc0ZGVcdTc0ZGZcdTc0ZTRcdTc0ZThcdTc0ZWFcdTc0ZWJcdTc0ZWZcdTc0ZjRcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmZcdTc1MDYiXSxbIjhm''@;'; put 'put ''Y2RhMSIsIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyYVx1NzUyZlx1NzUzNlx1NzUzOVx1NzUzZFx1NzUzZVx1NzUzZlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0ZVx1NzU1MFx1NzU1Mlx1NzU1N1x1NzU1ZVx1NzU1Zlx1NzU2MVx1''@;'; put 'put ''NzU2Zlx1NzU3MVx1NzU3OSIsNSwiXHU3NTgxXHU3NTg1XHU3NTkwXHU3NTkyXHU3NTkzXHU3NTk1XHU3NTk5XHU3NTljXHU3NWEyXHU3NWE0XHU3NWI0XHU3NWJhXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM0XHU3NWM2XHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQ3XHU3NWRjXHU3NWRmXHU3NWUw''@;'; put 'put ''XHU3NWUxXHU3NWU0XHU3NWU3XHU3NWVjXHU3NWVlXHU3NWVmXHU3NWYxXHU3NWY5XHU3NjAwXHU3NjAyXHU3NjAzXHU3NjA0XHU3NjA3XHU3NjA4XHU3NjBhXHU3NjBjXHU3NjBmXHU3NjEyXHU3NjEzXHU3NjE1XHU3NjE2XHU3NjE5XHU3NjFiXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIzXHU3''@;'; put 'put ''NjI1XHU3NjI2XHU3NjI5XHU3NjJkXHU3NjMyXHU3NjMzXHU3NjM1XHU3NjM4XHU3NjM5Il0sWyI4ZmNlYTEiLCJcdTc2M2FcdTc2M2NcdTc2NGFcdTc2NDBcdTc2NDFcdTc2NDNcdTc2NDRcdTc2NDVcdTc2NDlcdTc2NGJcdTc2NTVcdTc2NTlcdTc2NWZcdTc2NjRcdTc2NjVcdTc2NmRcdTc2''@;'; put 'put ''NmVcdTc2NmZcdTc2NzFcdTc2NzRcdTc2ODFcdTc2ODVcdTc2OGNcdTc2OGRcdTc2OTVcdTc2OWJcdTc2OWNcdTc2OWRcdTc2OWZcdTc2YTBcdTc2YTIiLDYsIlx1NzZhYVx1NzZhZFx1NzZiZFx1NzZjMVx1NzZjNVx1NzZjOVx1NzZjYlx1NzZjY1x1NzZjZVx1NzZkNFx1NzZkOVx1NzZlMFx1''@;'; put 'put ''NzZlNlx1NzZlOFx1NzZlY1x1NzZmMFx1NzZmMVx1NzZmNlx1NzZmOVx1NzZmY1x1NzcwMFx1NzcwNlx1NzcwYVx1NzcwZVx1NzcxMlx1NzcxNFx1NzcxNVx1NzcxN1x1NzcxOVx1NzcxYVx1NzcxY1x1NzcyMlx1NzcyOFx1NzcyZFx1NzcyZVx1NzcyZlx1NzczNFx1NzczNVx1NzczNlx1Nzcz''@;'; put 'put ''OVx1NzczZFx1NzczZVx1Nzc0Mlx1Nzc0NVx1Nzc0Nlx1Nzc0YVx1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1Nlx1Nzc1N1x1Nzc1Y1x1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2MiJdLFsiOGZjZmExIiwiXHU3NzY0XHU3NzY3XHU3NzZhXHU3NzZjXHU3NzcwXHU3NzcyXHU3NzczXHU3Nzc0''@;'; put 'put ''XHU3NzdhXHU3NzdkXHU3NzgwXHU3Nzg0XHU3NzhjXHU3NzhkXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3NzlhXHU3NzlmXHU3N2EyXHU3N2E3XHU3N2FhXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2I1XHU3N2JlXHU3N2MzXHU3N2M5XHU3N2QxXHU3N2QyXHU3N2Q1XHU3N2Q5XHU3N2RlXHU3N2RmXHU3''@;'; put 'put ''N2UwXHU3N2U0XHU3N2U2XHU3N2VhXHU3N2VjXHU3N2YwXHU3N2YxXHU3N2Y0XHU3N2Y4XHU3N2ZiXHU3ODA1XHU3ODA2XHU3ODA5XHU3ODBkXHU3ODBlXHU3ODExXHU3ODFkXHU3ODIxXHU3ODIyXHU3ODIzXHU3ODJkXHU3ODJlXHU3ODMwXHU3ODM1XHU3ODM3XHU3ODQzXHU3ODQ0XHU3ODQ3''@;'; put 'put ''XHU3ODQ4XHU3ODRjXHU3ODRlXHU3ODUyXHU3ODVjXHU3ODVlXHU3ODYwXHU3ODYxXHU3ODYzXHU3ODY0XHU3ODY4XHU3ODZhXHU3ODZlXHU3ODdhXHU3ODdlXHU3ODhhXHU3ODhmXHU3ODk0XHU3ODk4XHU3OGExXHU3ODlkXHU3ODllXHU3ODlmXHU3OGE0XHU3OGE4XHU3OGFjXHU3OGFkXHU3''@;'; put 'put ''OGIwXHU3OGIxXHU3OGIyXHU3OGIzIl0sWyI4ZmQwYTEiLCJcdTc4YmJcdTc4YmRcdTc4YmZcdTc4YzdcdTc4YzhcdTc4YzlcdTc4Y2NcdTc4Y2VcdTc4ZDJcdTc4ZDNcdTc4ZDVcdTc4ZDZcdTc4ZTRcdTc4ZGJcdTc4ZGZcdTc4ZTBcdTc4ZTFcdTc4ZTZcdTc4ZWFcdTc4ZjJcdTc4ZjNcdTc5''@;'; put 'put ''MDBcdTc4ZjZcdTc4ZjdcdTc4ZmFcdTc4ZmJcdTc4ZmZcdTc5MDZcdTc5MGNcdTc5MTBcdTc5MWFcdTc5MWNcdTc5MWVcdTc5MWZcdTc5MjBcdTc5MjVcdTc5MjdcdTc5MjlcdTc5MmRcdTc5MzFcdTc5MzRcdTc5MzVcdTc5M2JcdTc5M2RcdTc5M2ZcdTc5NDRcdTc5NDVcdTc5NDZcdTc5NGFc''@;'; put 'put ''dTc5NGJcdTc5NGZcdTc5NTFcdTc5NTRcdTc5NThcdTc5NWJcdTc5NWNcdTc5NjdcdTc5NjlcdTc5NmJcdTc5NzJcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2VcdTc5OGJcdTc5OGNcdTc5OTFcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OThcdTc5OWJcdTc5OWNcdTc5YTFcdTc5YThcdTc5''@;'; put 'put ''YTlcdTc5YWJcdTc5YWZcdTc5YjFcdTc5YjRcdTc5YjhcdTc5YmJcdTc5YzJcdTc5YzRcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2ZcdTc5ZDRcdTc5ZDZcdTc5ZGFcdTc5ZGRcdTc5ZGUiXSxbIjhmZDFhMSIsIlx1NzllMFx1NzllMlx1NzllNVx1NzllYVx1NzllYlx1NzllZFx1NzlmMVx1Nzlm''@;'; put 'put ''OFx1NzlmY1x1N2EwMlx1N2EwM1x1N2EwN1x1N2EwOVx1N2EwYVx1N2EwY1x1N2ExMVx1N2ExNVx1N2ExYlx1N2ExZVx1N2EyMVx1N2EyN1x1N2EyYlx1N2EyZFx1N2EyZlx1N2EzMFx1N2EzNFx1N2EzNVx1N2EzOFx1N2EzOVx1N2EzYVx1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0Y1x1''@;'; put 'put ''N2E1NVx1N2E1Nlx1N2E1OVx1N2E1Y1x1N2E1ZFx1N2E1Zlx1N2E2MFx1N2E2NVx1N2E2N1x1N2E2YVx1N2E2ZFx1N2E3NVx1N2E3OFx1N2E3ZVx1N2E4MFx1N2E4Mlx1N2E4NVx1N2E4Nlx1N2E4YVx1N2E4Ylx1N2E5MFx1N2E5MVx1N2E5NFx1N2E5ZVx1N2FhMFx1N2FhM1x1N2FhY1x1N2Fi''@;'; put 'put ''M1x1N2FiNVx1N2FiOVx1N2FiYlx1N2FiY1x1N2FjNlx1N2FjOVx1N2FjY1x1N2FjZVx1N2FkMVx1N2FkYlx1N2FlOFx1N2FlOVx1N2FlYlx1N2FlY1x1N2FmMVx1N2FmNFx1N2FmYlx1N2FmZFx1N2FmZVx1N2IwN1x1N2IxNFx1N2IxZlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyYVx1N2IyYlx1''@;'; put 'put ''N2IyZFx1N2IyZVx1N2IyZlx1N2IzMCJdLFsiOGZkMmExIiwiXHU3YjMxXHU3YjM0XHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQ3XHU3YjRlXHU3YjU1XHU3YjYwXHU3YjY0XHU3YjY2XHU3YjY5XHU3YjZhXHU3YjZkXHU3YjZmXHU3YjcyXHU3YjczXHU3Yjc3XHU3Yjg0XHU3Yjg5XHU3''@;'; put 'put ''YjhlXHU3YjkwXHU3YjkxXHU3Yjk2XHU3YjliXHU3YjllXHU3YmEwXHU3YmE1XHU3YmFjXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmI1XHU3YmI2XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmMyXHU3YmM1XHU3YmM4XHU3YmNhXHU3YmQ0XHU3YmQ2XHU3YmQ3XHU3YmQ5XHU3YmRhXHU3YmRi''@;'; put 'put ''XHU3YmU4XHU3YmVhXHU3YmYyXHU3YmY0XHU3YmY1XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZjXHU3YmZlXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA2XHU3YzA5XHU3YzBiXHU3YzBjXHU3YzBlXHU3YzBmXHU3YzE5XHU3YzFiXHU3YzIwXHU3YzI1XHU3YzI2XHU3YzI4XHU3YzJjXHU3''@;'; put 'put ''YzMxXHU3YzMzXHU3YzM0XHU3YzM2XHU3YzM5XHU3YzNhXHU3YzQ2XHU3YzRhXHU3YzU1XHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU5Iiw1XSxbIjhmZDNhMSIsIlx1N2M2MVx1N2M2M1x1N2M2N1x1N2M2OVx1N2M2ZFx1N2M2ZVx1N2M3MFx1N2M3Mlx1N2M3OVx1N2M3Y1x1N2M3ZFx1N2M4Nlx1''@;'; put 'put ''N2M4N1x1N2M4Zlx1N2M5NFx1N2M5ZVx1N2NhMFx1N2NhNlx1N2NiMFx1N2NiNlx1N2NiN1x1N2NiYVx1N2NiYlx1N2NiY1x1N2NiZlx1N2NjNFx1N2NjN1x1N2NjOFx1N2NjOVx1N2NjZFx1N2NjZlx1N2NkM1x1N2NkNFx1N2NkNVx1N2NkN1x1N2NkOVx1N2NkYVx1N2NkZFx1N2NlNlx1N2Nl''@;'; put 'put ''OVx1N2NlYlx1N2NmNVx1N2QwM1x1N2QwN1x1N2QwOFx1N2QwOVx1N2QwZlx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNlx1N2QxZFx1N2QxZVx1N2QyM1x1N2QyNlx1N2QyYVx1N2QyZFx1N2QzMVx1N2QzY1x1N2QzZFx1N2QzZVx1N2Q0MFx1N2Q0MVx1N2Q0N1x1N2Q0OFx1N2Q0ZFx1N2Q1MVx1''@;'; put 'put ''N2Q1M1x1N2Q1N1x1N2Q1OVx1N2Q1YVx1N2Q1Y1x1N2Q1ZFx1N2Q2NVx1N2Q2N1x1N2Q2YVx1N2Q3MFx1N2Q3OFx1N2Q3YVx1N2Q3Ylx1N2Q3Zlx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NVx1N2Q4Nlx1N2Q4OFx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q5MVx1N2Q5Nlx1N2Q5N1x1N2Q5ZCJdLFsi''@;'; put 'put ''OGZkNGExIiwiXHU3ZDllXHU3ZGE2XHU3ZGE3XHU3ZGFhXHU3ZGIzXHU3ZGI2XHU3ZGI3XHU3ZGI5XHU3ZGMyIiw0LCJcdTdkY2NcdTdkY2RcdTdkY2VcdTdkZDdcdTdkZDlcdTdlMDBcdTdkZTJcdTdkZTVcdTdkZTZcdTdkZWFcdTdkZWJcdTdkZWRcdTdkZjFcdTdkZjVcdTdkZjZcdTdkZjlc''@;'; put 'put ''dTdkZmFcdTdlMDhcdTdlMTBcdTdlMTFcdTdlMTVcdTdlMTdcdTdlMWNcdTdlMWRcdTdlMjBcdTdlMjdcdTdlMjhcdTdlMmNcdTdlMmRcdTdlMmZcdTdlMzNcdTdlMzZcdTdlM2ZcdTdlNDRcdTdlNDVcdTdlNDdcdTdlNGVcdTdlNTBcdTdlNTJcdTdlNThcdTdlNWZcdTdlNjFcdTdlNjJcdTdl''@;'; put 'put ''NjVcdTdlNmJcdTdlNmVcdTdlNmZcdTdlNzNcdTdlNzhcdTdlN2VcdTdlODFcdTdlODZcdTdlODdcdTdlOGFcdTdlOGRcdTdlOTFcdTdlOTVcdTdlOThcdTdlOWFcdTdlOWRcdTdlOWVcdTdmM2NcdTdmM2JcdTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDNcdTdmNDRcdTdmNDdcdTdmNGZcdTdmNTJc''@;'; put 'put ''dTdmNTNcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNjFcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNmQiXSxbIjhmZDVhMSIsIlx1N2Y3MVx1N2Y3ZFx1N2Y3ZVx1N2Y3Zlx1N2Y4MFx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Nlx1N2Y5N1x1N2Y5Y1x1N2ZhMVx1N2ZhMlx1''@;'; put 'put ''N2ZhNlx1N2ZhYVx1N2ZhZFx1N2ZiNFx1N2ZiY1x1N2ZiZlx1N2ZjMFx1N2ZjM1x1N2ZjOFx1N2ZjZVx1N2ZjZlx1N2ZkYlx1N2ZkZlx1N2ZlM1x1N2ZlNVx1N2ZlOFx1N2ZlY1x1N2ZlZVx1N2ZlZlx1N2ZmMlx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwN1x1ODAwOFx1ODAwYVx1ODAw''@;'; put 'put ''ZFx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyY1x1ODAyZVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1''@;'; put 'put ''ODA2ZFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4ZVx1ODA5Y1x1ODA5ZVx1ODBhNlx1ODBhN1x1ODBhYlx1ODBiOFx1ODBiOVx1ODBjOFx1ODBjZFx1ODBjZlx1ODBkMlx1ODBkNFx1ODBkNVx1ODBkN1x1ODBkOFx1ODBlMFx1ODBlZFx1ODBlZSJdLFsiOGZkNmExIiwiXHU4MGYwXHU4''@;'; put 'put ''MGYyXHU4MGYzXHU4MGY2XHU4MGY5XHU4MGZhXHU4MGZlXHU4MTAzXHU4MTBiXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFjXHU4MTFlXHU4MTIwXHU4MTI0XHU4MTI3XHU4MTJjXHU4MTMwXHU4MTM1XHU4MTNhXHU4MTNjXHU4MTQ1XHU4MTQ3XHU4MTRhXHU4MTRjXHU4MTUyXHU4MTU3XHU4MTYw''@;'; put 'put ''XHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZkXHU4MTZmXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThiXHU4MThlXHU4MTk2XHU4MTk4XHU4MTliXHU4MTllXHU4MWEyXHU4MWFlXHU4MWIyXHU4MWI0XHU4MWJiXHU4MWNiXHU4MWMzXHU4MWM1XHU4MWNhXHU4''@;'; put 'put ''MWNlXHU4MWNmXHU4MWQ1XHU4MWQ3XHU4MWRiXHU4MWRkXHU4MWRlXHU4MWUxXHU4MWU0XHU4MWViXHU4MWVjXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY4XHU4MWY5XHU4MWZkXHU4MWZmXHU4MjAwXHU4MjAzXHU4MjBmXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFhXHU4MjFk''@;'; put 'put ''XHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNhXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2Il0sWyI4ZmQ3YTEiLCJcdTgyNGJcdTgyNGVcdTgyNGZcdTgyNTFcdTgyNTZcdTgyNWNcdTgyNjBcdTgyNjNcdTgyNjdcdTgyNmRcdTgyNzRcdTgyN2JcdTgyN2RcdTgyN2ZcdTgyODBc''@;'; put 'put ''dTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOGFcdTgyOGVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOWFcdTgyOWJcdTgyYTBcdTgyYTFcdTgyYTNcdTgyYTRcdTgyYTdcdTgyYThcdTgyYTlcdTgyYWFcdTgyYWVcdTgyYjBcdTgyYjJcdTgyYjRcdTgyYjdcdTgyYmFcdTgy''@;'; put 'put ''YmNcdTgyYmVcdTgyYmZcdTgyYzZcdTgyZDBcdTgyZDVcdTgyZGFcdTgyZTBcdTgyZTJcdTgyZTRcdTgyZThcdTgyZWFcdTgyZWRcdTgyZWZcdTgyZjZcdTgyZjdcdTgyZmRcdTgyZmVcdTgzMDBcdTgzMDFcdTgzMDdcdTgzMDhcdTgzMGFcdTgzMGJcdTgzNTRcdTgzMWJcdTgzMWRcdTgzMWVc''@;'; put 'put ''dTgzMWZcdTgzMjFcdTgzMjJcdTgzMmNcdTgzMmRcdTgzMmVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM2FcdTgzM2NcdTgzM2RcdTgzNDJcdTgzNDNcdTgzNDRcdTgzNDdcdTgzNGRcdTgzNGVcdTgzNTFcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNzBcdTgzNzgiXSxbIjhmZDhhMSIsIlx1ODM3ZFx1''@;'; put 'put ''ODM3Zlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4ZFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Ylx1ODM5Y1x1ODM5ZFx1ODNhNlx1ODNhN1x1ODNhOVx1ODNhY1x1ODNiZVx1ODNiZlx1ODNjMFx1ODNjN1x1ODNjOVx1ODNjZlx1ODNkMFx1ODNkMVx1ODNkNFx1ODNk''@;'; put 'put ''ZFx1ODM1M1x1ODNlOFx1ODNlYVx1ODNmNlx1ODNmOFx1ODNmOVx1ODNmY1x1ODQwMVx1ODQwNlx1ODQwYVx1ODQwZlx1ODQxMVx1ODQxNVx1ODQxOVx1ODNhZFx1ODQyZlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0YVx1ODQ0ZFx1ODQ0Zlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1''@;'; put 'put ''ODQ1OVx1ODQ1YVx1ODQ1Y1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2YVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3Y1x1ODQ3ZFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5ZVx1ODRhNlx1ODRhOFx1ODRhOVx1ODRhYVx1ODRhZlx1ODRiMVx1ODRi''@;'; put 'put ''NFx1ODRiYVx1ODRiZFx1ODRiZVx1ODRjMFx1ODRjMlx1ODRjN1x1ODRjOFx1ODRjY1x1ODRjZlx1ODRkMyJdLFsiOGZkOWExIiwiXHU4NGRjXHU4NGU3XHU4NGVhXHU4NGVmXHU4NGYwXHU4NGYxXHU4NGYyXHU4NGY3XHU4NTMyXHU4NGZhXHU4NGZiXHU4NGZkXHU4NTAyXHU4NTAzXHU4NTA3''@;'; put 'put ''XHU4NTBjXHU4NTBlXHU4NTEwXHU4NTFjXHU4NTFlXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJhXHU4NTJiXHU4NTJmXHU4NTMzXHU4NTM0XHU4NTM2XHU4NTNmXHU4NTQ2XHU4NTRmIiw0LCJcdTg1NTZcdTg1NTlcdTg1NWMiLDYsIlx1ODU2NFx1ODU2Ylx1ODU2Zlx1ODU3''@;'; put 'put ''OVx1ODU3YVx1ODU3Ylx1ODU3ZFx1ODU3Zlx1ODU4MVx1ODU4NVx1ODU4Nlx1ODU4OVx1ODU4Ylx1ODU4Y1x1ODU4Zlx1ODU5M1x1ODU5OFx1ODU5ZFx1ODU5Zlx1ODVhMFx1ODVhMlx1ODVhNVx1ODVhN1x1ODViNFx1ODViNlx1ODViN1x1ODViOFx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1''@;'; put 'put ''ODVjMlx1ODVjN1x1ODVjYVx1ODVjYlx1ODVjZVx1ODVhZFx1ODVkOFx1ODVkYVx1ODVkZlx1ODVlMFx1ODVlNlx1ODVlOFx1ODVlZFx1ODVmM1x1ODVmNlx1ODVmYyJdLFsiOGZkYWExIiwiXHU4NWZmXHU4NjAwXHU4NjA0XHU4NjA1XHU4NjBkXHU4NjBlXHU4NjEwXHU4NjExXHU4NjEyXHU4''@;'; put 'put ''NjE4XHU4NjE5XHU4NjFiXHU4NjFlXHU4NjIxXHU4NjI3XHU4NjI5XHU4NjM2XHU4NjM4XHU4NjNhXHU4NjNjXHU4NjNkXHU4NjQwXHU4NjQyXHU4NjQ2XHU4NjUyXHU4NjUzXHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjVkXHU4NjYwIiw0LCJcdTg2NjlcdTg2NmNcdTg2NmZcdTg2NzVc''@;'; put 'put ''dTg2NzZcdTg2NzdcdTg2N2FcdTg2OGRcdTg2OTFcdTg2OTZcdTg2OThcdTg2OWFcdTg2OWNcdTg2YTFcdTg2YTZcdTg2YTdcdTg2YThcdTg2YWRcdTg2YjFcdTg2YjNcdTg2YjRcdTg2YjVcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmZcdTg2YzBcdTg2YzFcdTg2YzNcdTg2YzVcdTg2ZDFcdTg2''@;'; put 'put ''ZDJcdTg2ZDVcdTg2ZDdcdTg2ZGFcdTg2ZGNcdTg2ZTBcdTg2ZTNcdTg2ZTVcdTg2ZTdcdTg2ODhcdTg2ZmFcdTg2ZmNcdTg2ZmRcdTg3MDRcdTg3MDVcdTg3MDdcdTg3MGJcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTNcdTg3MTRcdTg3MTlcdTg3MWVcdTg3MWZcdTg3MjFcdTg3MjMiXSxbIjhm''@;'; put 'put ''ZGJhMSIsIlx1ODcyOFx1ODcyZVx1ODcyZlx1ODczMVx1ODczMlx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODczZVx1ODc0MFx1ODc0M1x1ODc0NVx1ODc0ZFx1ODc1OFx1ODc1ZFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3Ylx1ODc4MyIsNiwiXHU4NzhiXHU4''@;'; put 'put ''NzhjXHU4NzkwXHU4NzkzXHU4Nzk1XHU4Nzk3XHU4Nzk4XHU4Nzk5XHU4NzllXHU4N2EwXHU4N2EzXHU4N2E3XHU4N2FjXHU4N2FkXHU4N2FlXHU4N2IxXHU4N2I1XHU4N2JlXHU4N2JmXHU4N2MxXHU4N2M4XHU4N2M5XHU4N2NhXHU4N2NlXHU4N2Q1XHU4N2Q2XHU4N2Q5XHU4N2RhXHU4N2Rj''@;'; put 'put ''XHU4N2RmXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2VhXHU4N2ViXHU4N2VkXHU4N2YxXHU4N2YzXHU4N2Y4XHU4N2ZhXHU4N2ZmXHU4ODAxXHU4ODAzXHU4ODA2XHU4ODA5XHU4ODBhXHU4ODBiXHU4ODEwXHU4ODE5XHU4ODEyXHU4ODEzXHU4ODE0XHU4ODE4XHU4ODFhXHU4ODFiXHU4ODFjXHU4''@;'; put 'put ''ODFlXHU4ODFmXHU4ODI4XHU4ODJkXHU4ODJlXHU4ODMwXHU4ODMyXHU4ODM1Il0sWyI4ZmRjYTEiLCJcdTg4M2FcdTg4M2NcdTg4NDFcdTg4NDNcdTg4NDVcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NTFcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWNcdTg4NWZcdTg4''@;'; put 'put ''NjBcdTg4NjRcdTg4NjlcdTg4NzFcdTg4NzlcdTg4N2JcdTg4ODBcdTg4OThcdTg4OWFcdTg4OWJcdTg4OWNcdTg4OWZcdTg4YTBcdTg4YThcdTg4YWFcdTg4YmFcdTg4YmRcdTg4YmVcdTg4YzBcdTg4Y2EiLDQsIlx1ODhkMVx1ODhkMlx1ODhkM1x1ODhkYlx1ODhkZVx1ODhlN1x1ODhlZlx1''@;'; put 'put ''ODhmMFx1ODhmMVx1ODhmNVx1ODhmN1x1ODkwMVx1ODkwNlx1ODkwZFx1ODkwZVx1ODkwZlx1ODkxNVx1ODkxNlx1ODkxOFx1ODkxOVx1ODkxYVx1ODkxY1x1ODkyMFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkzMFx1ODkzMVx1ODkzMlx1ODkzNVx1ODkzOVx1ODkzYVx1ODkzZVx1ODk0MFx1ODk0''@;'; put 'put ''Mlx1ODk0NVx1ODk0Nlx1ODk0OVx1ODk0Zlx1ODk1Mlx1ODk1N1x1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2Ylx1ODk2ZVx1ODk3MFx1ODk3M1x1ODk3NVx1ODk3YSJdLFsiOGZkZGExIiwiXHU4OTdiXHU4OTdjXHU4OTdkXHU4OTg5XHU4OThkXHU4OTkwXHU4OTk0''@;'; put 'put ''XHU4OTk1XHU4OTliXHU4OTljXHU4OTlmXHU4OWEwXHU4OWE1XHU4OWIwXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWJjXHU4OWQ0Iiw0LCJcdTg5ZTVcdTg5ZTlcdTg5ZWJcdTg5ZWRcdTg5ZjFcdTg5ZjNcdTg5ZjZcdTg5ZjlcdTg5ZmRcdTg5ZmZcdThhMDRcdThhMDVcdThhMDdcdThh''@;'; put 'put ''MGZcdThhMTFcdThhMTJcdThhMTRcdThhMTVcdThhMWVcdThhMjBcdThhMjJcdThhMjRcdThhMjZcdThhMmJcdThhMmNcdThhMmZcdThhMzVcdThhMzdcdThhM2RcdThhM2VcdThhNDBcdThhNDNcdThhNDVcdThhNDdcdThhNDlcdThhNGRcdThhNGVcdThhNTNcdThhNTZcdThhNTdcdThhNThc''@;'; put 'put ''dThhNWNcdThhNWRcdThhNjFcdThhNjVcdThhNjdcdThhNzVcdThhNzZcdThhNzdcdThhNzlcdThhN2FcdThhN2JcdThhN2VcdThhN2ZcdThhODBcdThhODNcdThhODZcdThhOGJcdThhOGZcdThhOTBcdThhOTJcdThhOTZcdThhOTdcdThhOTlcdThhOWZcdThhYTdcdThhYTlcdThhYWVcdThh''@;'; put 'put ''YWZcdThhYjMiXSxbIjhmZGVhMSIsIlx1OGFiNlx1OGFiN1x1OGFiYlx1OGFiZVx1OGFjM1x1OGFjNlx1OGFjOFx1OGFjOVx1OGFjYVx1OGFkMVx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkN1x1OGFkZFx1OGFkZlx1OGFlY1x1OGFmMFx1OGFmNFx1OGFmNVx1OGFmNlx1OGFmY1x1OGFmZlx1OGIw''@;'; put 'put ''NVx1OGIwNlx1OGIwYlx1OGIxMVx1OGIxY1x1OGIxZVx1OGIxZlx1OGIwYVx1OGIyZFx1OGIzMFx1OGIzN1x1OGIzY1x1OGI0MiIsNCwiXHU4YjQ4XHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU5XHU4YjRkXHU4YjVlXHU4YjYzXHU4YjZkXHU4Yjc2XHU4Yjc4XHU4Yjc5XHU4YjdjXHU4YjdlXHU4''@;'; put 'put ''YjgxXHU4Yjg0XHU4Yjg1XHU4YjhiXHU4YjhkXHU4YjhmXHU4Yjk0XHU4Yjk1XHU4YjljXHU4YjllXHU4YjlmXHU4YzM4XHU4YzM5XHU4YzNkXHU4YzNlXHU4YzQ1XHU4YzQ3XHU4YzQ5XHU4YzRiXHU4YzRmXHU4YzUxXHU4YzUzXHU4YzU0XHU4YzU3XHU4YzU4XHU4YzViXHU4YzVkXHU4YzU5''@;'; put 'put ''XHU4YzYzXHU4YzY0XHU4YzY2XHU4YzY4XHU4YzY5XHU4YzZkXHU4YzczXHU4Yzc1XHU4Yzc2XHU4YzdiXHU4YzdlXHU4Yzg2Il0sWyI4ZmRmYTEiLCJcdThjODdcdThjOGJcdThjOTBcdThjOTJcdThjOTNcdThjOTlcdThjOWJcdThjOWNcdThjYTRcdThjYjlcdThjYmFcdThjYzVcdThjYzZc''@;'; put 'put ''dThjYzlcdThjY2JcdThjY2ZcdThjZDZcdThjZDVcdThjZDlcdThjZGRcdThjZTFcdThjZThcdThjZWNcdThjZWZcdThjZjBcdThjZjJcdThjZjVcdThjZjdcdThjZjhcdThjZmVcdThjZmZcdThkMDFcdThkMDNcdThkMDlcdThkMTJcdThkMTdcdThkMWJcdThkNjVcdThkNjlcdThkNmNcdThk''@;'; put 'put ''NmVcdThkN2ZcdThkODJcdThkODRcdThkODhcdThkOGRcdThkOTBcdThkOTFcdThkOTVcdThkOWVcdThkOWZcdThkYTBcdThkYTZcdThkYWJcdThkYWNcdThkYWZcdThkYjJcdThkYjVcdThkYjdcdThkYjlcdThkYmJcdThkYzBcdThkYzVcdThkYzZcdThkYzdcdThkYzhcdThkY2FcdThkY2Vc''@;'; put 'put ''dThkZDFcdThkZDRcdThkZDVcdThkZDdcdThkZDlcdThkZTRcdThkZTVcdThkZTdcdThkZWNcdThkZjBcdThkYmNcdThkZjFcdThkZjJcdThkZjRcdThkZmRcdThlMDFcdThlMDRcdThlMDVcdThlMDZcdThlMGJcdThlMTFcdThlMTRcdThlMTZcdThlMjBcdThlMjFcdThlMjIiXSxbIjhmZTBh''@;'; put 'put ''MSIsIlx1OGUyM1x1OGUyNlx1OGUyN1x1OGUzMVx1OGUzM1x1OGUzNlx1OGUzN1x1OGUzOFx1OGUzOVx1OGUzZFx1OGU0MFx1OGU0MVx1OGU0Ylx1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1NFx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU2MVx1OGU2Mlx1OGU2OVx1OGU2Y1x1OGU2ZFx1OGU2''@;'; put 'put ''Zlx1OGU3MFx1OGU3MVx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU4Mlx1OGU4M1x1OGU4OVx1OGU5MFx1OGU5Mlx1OGU5NVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5ZVx1OGVhMlx1OGVhN1x1OGVhOVx1OGVhZFx1OGVhZVx1OGViM1x1OGViNVx1OGViYVx1OGViYlx1OGVjMFx1OGVjMVx1OGVjM1x1''@;'; put 'put ''OGVjNFx1OGVjN1x1OGVjZlx1OGVkMVx1OGVkNFx1OGVkY1x1OGVlOFx1OGVlZVx1OGVmMFx1OGVmMVx1OGVmN1x1OGVmOVx1OGVmYVx1OGVlZFx1OGYwMFx1OGYwMlx1OGYwN1x1OGYwOFx1OGYwZlx1OGYxMFx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxZVx1OGYyMFx1OGYyMVx1OGYyM1x1OGYy''@;'; put 'put ''NVx1OGYyN1x1OGYyOFx1OGYyY1x1OGYyZFx1OGYyZVx1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzYVx1OGY0MFx1OGY0MSJdLFsiOGZlMWExIiwiXHU4ZjQzXHU4ZjQ3XHU4ZjRmXHU4ZjUxIiw0LCJcdThmNThcdThmNWRcdThmNWVcdThmNjVcdThmOWRcdThmYTBcdThmYTFcdThmYTRc''@;'; put 'put ''dThmYTVcdThmYTZcdThmYjVcdThmYjZcdThmYjhcdThmYmVcdThmYzBcdThmYzFcdThmYzZcdThmY2FcdThmY2JcdThmY2RcdThmZDBcdThmZDJcdThmZDNcdThmZDVcdThmZTBcdThmZTNcdThmZTRcdThmZThcdThmZWVcdThmZjFcdThmZjVcdThmZjZcdThmZmJcdThmZmVcdTkwMDJcdTkw''@;'; put 'put ''MDRcdTkwMDhcdTkwMGNcdTkwMThcdTkwMWJcdTkwMjhcdTkwMjlcdTkwMmZcdTkwMmFcdTkwMmNcdTkwMmRcdTkwMzNcdTkwMzRcdTkwMzdcdTkwM2ZcdTkwNDNcdTkwNDRcdTkwNGNcdTkwNWJcdTkwNWRcdTkwNjJcdTkwNjZcdTkwNjdcdTkwNmNcdTkwNzBcdTkwNzRcdTkwNzlcdTkwODVc''@;'; put 'put ''dTkwODhcdTkwOGJcdTkwOGNcdTkwOGVcdTkwOTBcdTkwOTVcdTkwOTdcdTkwOThcdTkwOTlcdTkwOWJcdTkwYTBcdTkwYTFcdTkwYTJcdTkwYTVcdTkwYjBcdTkwYjJcdTkwYjNcdTkwYjRcdTkwYjZcdTkwYmRcdTkwY2NcdTkwYmVcdTkwYzMiXSxbIjhmZTJhMSIsIlx1OTBjNFx1OTBjNVx1''@;'; put 'put ''OTBjN1x1OTBjOFx1OTBkNVx1OTBkN1x1OTBkOFx1OTBkOVx1OTBkY1x1OTBkZFx1OTBkZlx1OTBlNVx1OTBkMlx1OTBmNlx1OTBlYlx1OTBlZlx1OTBmMFx1OTBmNFx1OTBmZVx1OTBmZlx1OTEwMFx1OTEwNFx1OTEwNVx1OTEwNlx1OTEwOFx1OTEwZFx1OTExMFx1OTExNFx1OTExNlx1OTEx''@;'; put 'put ''N1x1OTExOFx1OTExYVx1OTExY1x1OTExZVx1OTEyMFx1OTEyNVx1OTEyMlx1OTEyM1x1OTEyN1x1OTEyOVx1OTEyZVx1OTEyZlx1OTEzMVx1OTEzNFx1OTEzNlx1OTEzN1x1OTEzOVx1OTEzYVx1OTEzY1x1OTEzZFx1OTE0M1x1OTE0N1x1OTE0OFx1OTE0Zlx1OTE1M1x1OTE1N1x1OTE1OVx1''@;'; put 'put ''OTE1YVx1OTE1Ylx1OTE2MVx1OTE2NFx1OTE2N1x1OTE2ZFx1OTE3NFx1OTE3OVx1OTE3YVx1OTE3Ylx1OTE4MVx1OTE4M1x1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4ZVx1OTE5MVx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5OFx1OTE5ZVx1OTFhMVx1OTFhNlx1OTFhOFx1OTFhY1x1OTFhZFx1OTFh''@;'; put 'put ''ZVx1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiYlx1OTFiY1x1OTFiZFx1OTFiZiJdLFsiOGZlM2ExIiwiXHU5MWMyXHU5MWMzXHU5MWM1XHU5MWQzXHU5MWQ0XHU5MWQ3XHU5MWQ5XHU5MWRhXHU5MWRlXHU5MWU0XHU5MWU1XHU5MWU5XHU5MWVhXHU5MWVjIiw1LCJcdTkxZjdc''@;'; put 'put ''dTkxZjlcdTkxZmJcdTkxZmRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMGFcdTkyMGNcdTkyMTBcdTkyMTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMWNcdTkyMWRcdTkyMjNcdTkyMjRcdTkyMjVcdTkyMjZcdTkyMjhcdTkyMmVcdTkyMmZcdTkyMzBcdTky''@;'; put 'put ''MzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2NcdTkyM2VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNGFcdTkyNGRcdTkyNGVcdTkyNGZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNWNcdTkyNWRcdTkyNjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlc''@;'; put 'put ''dTkyNmVcdTkyNmZcdTkyNzBcdTkyNzUiLDQsIlx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3Zlx1OTI4OFx1OTI4OVx1OTI4YVx1OTI4ZFx1OTI4ZVx1OTI5Mlx1OTI5NyJdLFsiOGZlNGExIiwiXHU5Mjk5XHU5MjlmXHU5MmEwXHU5MmE0XHU5MmE1XHU5MmE3XHU5MmE4XHU5MmFiXHU5MmFmXHU5''@;'; put 'put ''MmIyXHU5MmI2XHU5MmI4XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJmIiw0LCJcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzhcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyZDBcdTkyZDNcdTkyZDVcdTkyZDdcdTkyZDhcdTkyZDlcdTkyZGNcdTkyZGRcdTkyZGZcdTkyZTBcdTkyZTFc''@;'; put 'put ''dTkyZTNcdTkyZTVcdTkyZTdcdTkyZThcdTkyZWNcdTkyZWVcdTkyZjBcdTkyZjlcdTkyZmJcdTkyZmZcdTkzMDBcdTkzMDJcdTkzMDhcdTkzMGRcdTkzMTFcdTkzMTRcdTkzMTVcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjFcdTkzMjRcdTkzMjVcdTkzMjdcdTkzMjlcdTkzMmFcdTkz''@;'; put 'put ''MzNcdTkzMzRcdTkzMzZcdTkzMzdcdTkzNDdcdTkzNDhcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTVcdTkzNTdcdTkzNThcdTkzNWFcdTkzNWVcdTkzNjRcdTkzNjVcdTkzNjdcdTkzNjlcdTkzNmFcdTkzNmRcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzNcdTkzNzRcdTkzNzYiXSxbIjhm''@;'; put 'put ''ZTVhMSIsIlx1OTM3YVx1OTM3ZFx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4OFx1OTM4YVx1OTM4Ylx1OTM4ZFx1OTM4Zlx1OTM5Mlx1OTM5NVx1OTM5OFx1OTM5Ylx1OTM5ZVx1OTNhMVx1OTNhM1x1OTNhNFx1OTNhNlx1OTNhOFx1OTNhYlx1OTNiNFx1OTNiNVx1OTNiNlx1OTNiYVx1''@;'; put 'put ''OTNhOVx1OTNjMVx1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOSIsNCwiXHU5M2QzXHU5M2Q5XHU5M2RjXHU5M2RlXHU5M2RmXHU5M2UyXHU5M2U2XHU5M2U3XHU5M2Y5XHU5M2Y3XHU5M2Y4XHU5M2ZhXHU5M2ZiXHU5M2ZkXHU5NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBk''@;'; put 'put ''XHU5NDBlXHU5NDBmXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFmXHU5NDJlXHU5NDJmXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNiXHU5NDNmXHU5NDNkXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRhXHU5NDRjXHU5NDU1XHU5NDU5XHU5NDVjXHU5NDVmXHU5NDYxXHU5NDYzXHU5NDY4XHU5''@;'; put 'put ''NDZiXHU5NDZkXHU5NDZlXHU5NDZmXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5Il0sWyI4ZmU2YTEiLCJcdTk1N2VcdTk1ODRcdTk1ODhcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTFcdTk1YTZcdTk1YTlcdTk1YWJcdTk1YWNcdTk1YjRcdTk1''@;'; put 'put ''YjZcdTk1YmFcdTk1YmRcdTk1YmZcdTk1YzZcdTk1YzhcdTk1YzlcdTk1Y2JcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDlcdTk1ZGFcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTRcdTk1ZTZcdTk2MWRcdTk2MWVcdTk2MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MmNcdTk2MzFc''@;'; put 'put ''dTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2NcdTk2M2RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2NjFcdTk2NmVcdTk2NzRcdTk2N2JcdTk2N2NcdTk2N2VcdTk2N2ZcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2''@;'; put 'put ''OWFcdTk2OWRcdTk2OWZcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YTlcdTk2YWVcdTk2YWZcdTk2YjNcdTk2YmFcdTk2Y2FcdTk2ZDJcdTVkYjJcdTk2ZDhcdTk2ZGFcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTlcdTk2ZWZcdTk2ZjFcdTk2ZmFcdTk3MDIiXSxbIjhmZTdhMSIsIlx1OTcwM1x1OTcw''@;'; put 'put ''NVx1OTcwOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0YVx1OTc0ZVx1OTc0Zlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Ylx1OTc2M1x1OTc2N1x1OTc2YVx1OTc2ZVx1OTc3M1x1OTc3Nlx1OTc3N1x1''@;'; put 'put ''OTc3OFx1OTc3Ylx1OTc3ZFx1OTc3Zlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5ZVx1OTc5Zlx1OTdhMlx1OTdhY1x1OTdhZVx1OTdiMVx1OTdiMlx1OTdiNVx1OTdiNlx1OTdiOFx1OTdiOVx1OTdiYVx1OTdiY1x1OTdiZVx1OTdiZlx1OTdjMVx1OTdj''@;'; put 'put ''NFx1OTdjNVx1OTdjN1x1OTdjOVx1OTdjYVx1OTdjY1x1OTdjZFx1OTdjZVx1OTdkMFx1OTdkMVx1OTdkNFx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkZFx1OTdkZVx1OTdlMFx1OTdkYlx1OTdlMVx1OTdlNFx1OTdlZlx1OTdmMVx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmYVx1OTgwN1x1OTgwYVx1''@;'; put 'put ''OTgxOVx1OTgwZFx1OTgwZVx1OTgxNFx1OTgxNlx1OTgxY1x1OTgxZVx1OTgyMFx1OTgyM1x1OTgyNiJdLFsiOGZlOGExIiwiXHU5ODJiXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNlXHU5ODQ0XHU5ODQ3XHU5ODRhXHU5ODUxXHU5ODUyXHU5ODUzXHU5''@;'; put 'put ''ODU2XHU5ODU3XHU5ODU5XHU5ODVhXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZhXHU5ODZjXHU5OGFiXHU5OGFkXHU5OGFlXHU5OGIwXHU5OGI0XHU5OGI3XHU5OGI4XHU5OGJhXHU5OGJiXHU5OGJmXHU5OGMyXHU5OGM1XHU5OGM4XHU5OGNjXHU5OGUxXHU5OGUzXHU5OGU1XHU5OGU2''@;'; put 'put ''XHU5OGU3XHU5OGVhXHU5OGYzXHU5OGY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFmXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJiXHU5OTMxIiw0LCJcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5NDBcdTk5NDFcdTk5''@;'; put 'put ''NDZcdTk5NDdcdTk5NDhcdTk5NGRcdTk5NGVcdTk5NTRcdTk5NThcdTk5NTlcdTk5NWJcdTk5NWNcdTk5NWVcdTk5NWZcdTk5NjBcdTk5OWJcdTk5OWRcdTk5OWZcdTk5YTZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjUiXSxbIjhmZTlhMSIsIlx1OTliOVx1OTliYVx1OTliZFx1OTliZlx1OTlj''@;'; put 'put ''M1x1OTljOVx1OTlkM1x1OTlkNFx1OTlkOVx1OTlkYVx1OTlkY1x1OTlkZVx1OTllN1x1OTllYVx1OTllYlx1OTllY1x1OTlmMFx1OTlmNFx1OTlmNVx1OTlmOVx1OTlmZFx1OTlmZVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwYlx1OWEwY1x1OWExMFx1OWExMVx1OWExNlx1OWExZVx1OWEyMFx1''@;'; put 'put ''OWEyMlx1OWEyM1x1OWEyNFx1OWEyN1x1OWEyZFx1OWEyZVx1OWEzM1x1OWEzNVx1OWEzNlx1OWEzOFx1OWE0N1x1OWE0MVx1OWE0NFx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZVx1OWE1MVx1OWE1NFx1OWE1Nlx1OWE1ZFx1OWFhYVx1OWFhY1x1OWFhZVx1OWFhZlx1OWFiMlx1OWFiNFx1OWFi''@;'; put 'put ''NVx1OWFiNlx1OWFiOVx1OWFiYlx1OWFiZVx1OWFiZlx1OWFjMVx1OWFjM1x1OWFjNlx1OWFjOFx1OWFjZVx1OWFkMFx1OWFkMlx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkYlx1OWFkY1x1OWFlMFx1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOVx1OWFlY1x1OWFmMlx1OWFmM1x1OWFmNVx1OWFmOVx1''@;'; put 'put ''OWFmYVx1OWFmZFx1OWFmZiIsNF0sWyI4ZmVhYTEiLCJcdTliMDRcdTliMDVcdTliMDhcdTliMDlcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTJcdTliMTZcdTliMTlcdTliMWJcdTliMWNcdTliMjBcdTliMjZcdTliMmJcdTliMmRcdTliMzNcdTliMzRcdTliMzVcdTliMzdc''@;'; put 'put ''dTliMzlcdTliM2FcdTliM2RcdTliNDhcdTliNGJcdTliNGNcdTliNTVcdTliNTZcdTliNTdcdTliNWJcdTliNWVcdTliNjFcdTliNjNcdTliNjVcdTliNjZcdTliNjhcdTliNmEiLDQsIlx1OWI3M1x1OWI3NVx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3Zlx1OWI4MFx1OWI4NFx1OWI4NVx1OWI4''@;'; put 'put ''Nlx1OWI4N1x1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4ZFx1OWI4Zlx1OWI5MFx1OWI5NFx1OWI5YVx1OWI5ZFx1OWI5ZVx1OWJhNlx1OWJhN1x1OWJhOVx1OWJhY1x1OWJiMFx1OWJiMVx1OWJiMlx1OWJiN1x1OWJiOFx1OWJiYlx1OWJiY1x1OWJiZVx1OWJiZlx1OWJjMVx1OWJjN1x1OWJjOFx1''@;'; put 'put ''OWJjZVx1OWJkMFx1OWJkN1x1OWJkOFx1OWJkZFx1OWJkZlx1OWJlNVx1OWJlN1x1OWJlYVx1OWJlYlx1OWJlZlx1OWJmM1x1OWJmN1x1OWJmOCJdLFsiOGZlYmExIiwiXHU5YmY5XHU5YmZhXHU5YmZkXHU5YmZmXHU5YzAwXHU5YzAyXHU5YzBiXHU5YzBmXHU5YzExXHU5YzE2XHU5YzE4XHU5''@;'; put 'put ''YzE5XHU5YzFhXHU5YzFjXHU5YzFlXHU5YzIyXHU5YzIzXHU5YzI2Iiw0LCJcdTljMzFcdTljMzVcdTljMzZcdTljMzdcdTljM2RcdTljNDFcdTljNDNcdTljNDRcdTljNDVcdTljNDlcdTljNGFcdTljNGVcdTljNGZcdTljNTBcdTljNTNcdTljNTRcdTljNTZcdTljNThcdTljNWJcdTljNWRc''@;'; put 'put ''dTljNWVcdTljNWZcdTljNjNcdTljNjlcdTljNmFcdTljNWNcdTljNmJcdTljNjhcdTljNmVcdTljNzBcdTljNzJcdTljNzVcdTljNzdcdTljN2JcdTljZTZcdTljZjJcdTljZjdcdTljZjlcdTlkMGJcdTlkMDJcdTlkMTFcdTlkMTdcdTlkMThcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMmZcdTlk''@;'; put 'put ''MzBcdTlkMzJcdTlkMzNcdTlkMzRcdTlkM2FcdTlkM2NcdTlkNDVcdTlkM2RcdTlkNDJcdTlkNDNcdTlkNDdcdTlkNGFcdTlkNTNcdTlkNTRcdTlkNWZcdTlkNjNcdTlkNjJcdTlkNjVcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNzBcdTlkNzZcdTlkNzdcdTlkN2IiXSxbIjhmZWNhMSIsIlx1OWQ3''@;'; put 'put ''Y1x1OWQ3ZVx1OWQ4M1x1OWQ4NFx1OWQ4Nlx1OWQ4YVx1OWQ4ZFx1OWQ4ZVx1OWQ5Mlx1OWQ5M1x1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWRhMVx1OWRhYVx1OWRhY1x1OWRhZVx1OWRiMVx1OWRiNVx1OWRiOVx1OWRiY1x1OWRiZlx1OWRjM1x1OWRjN1x1OWRjOVx1OWRjYVx1OWRkNFx1''@;'; put 'put ''OWRkNVx1OWRkNlx1OWRkN1x1OWRkYVx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlNVx1OWRlN1x1OWRlOVx1OWRlYlx1OWRlZVx1OWRmMFx1OWRmM1x1OWRmNFx1OWRmZVx1OWUwYVx1OWUwMlx1OWUwN1x1OWUwZVx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxNVx1OWUxNlx1OWUxOVx1OWUxY1x1OWUx''@;'; put 'put ''ZFx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU4MFx1OWU4Mlx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4N1x1OWU4ZVx1OWU4Zlx1OWU5Nlx1OWU5OFx1OWU5Ylx1OWU5ZVx1OWVhNFx1OWVhOFx1OWVhY1x1OWVhZVx1OWVhZlx1OWViMFx1OWViM1x1OWViNFx1OWViNVx1OWVjNlx1OWVjOFx1OWVjYlx1''@;'; put 'put ''OWVkNVx1OWVkZlx1OWVlNFx1OWVlN1x1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmNSJdLFsiOGZlZGExIiwiXHU5ZWY4XHU5ZWZmXHU5ZjAyXHU5ZjAzXHU5ZjA5XHU5ZjBmXHU5ZjEwXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE2XHU5ZjE3XHU5ZjE5XHU5ZjFhXHU5''@;'; put 'put ''ZjFiXHU5ZjFmXHU5ZjIyXHU5ZjI2XHU5ZjJhXHU5ZjJiXHU5ZjJmXHU5ZjMxXHU5ZjMyXHU5ZjM0XHU5ZjM3XHU5ZjM5XHU5ZjNhXHU5ZjNjXHU5ZjNkXHU5ZjNmXHU5ZjQxXHU5ZjQzIiw0LCJcdTlmNTNcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNWFcdTlmNWRcdTlmNWVcdTlmNjhc''@;'; put 'put ''dTlmNjlcdTlmNmQiLDQsIlx1OWY3M1x1OWY3NVx1OWY3YVx1OWY3ZFx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5NFx1OWY5Nlx1OWY5N1x1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNSJdXScpfSw5OTEyOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2Uo''@;'; put 'put ''J3sidUNoYXJzIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5''@;'; put 'put ''NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3''@;'; put 'put ''NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEz''@;'; put 'put ''LDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEz''@;'; put 'put ''MjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAx''@;'; put 'put ''LDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYz''@;'; put 'put ''Nzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSwiZ2JDaGFycyI6WzAsMzYsMzgsNDUsNTAsODEsODksOTUsOTYsMTAw''@;'; put 'put ''LDEwMywxMDQsMTA1LDEwOSwxMjYsMTMzLDE0OCwxNzIsMTc1LDE3OSwyMDgsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzNDEsNDI4LDQ0Myw1NDQsNTQ1LDU1OCw3NDEsNzQyLDc0OSw3NTAsODA1LDgxOSw4MjAsNzkyMiw3OTI0LDc5MjUsNzkyNyw3OTM0LDc5NDMsNzk0NCw3''@;'; put 'put ''OTQ1LDc5NTAsODA2Miw4MTQ4LDgxNDksODE1Miw4MTY0LDgxNzQsODIzNiw4MjQwLDgyNjIsODI2NCw4Mzc0LDgzODAsODM4MSw4Mzg0LDgzODgsODM5MCw4MzkyLDgzOTMsODM5NCw4Mzk2LDg0MDEsODQwNiw4NDE2LDg0MTksODQyNCw4NDM3LDg0MzksODQ0NSw4NDgyLDg0ODUsODQ5Niw4''@;'; put 'put ''NTIxLDg2MDMsODkzNiw4OTQ2LDkwNDYsOTA1MCw5MDYzLDkwNjYsOTA3Niw5MDkyLDkxMDAsOTEwOCw5MTExLDkxMTMsOTEzMSw5MTYyLDkxNjQsOTIxOCw5MjE5LDExMzI5LDExMzMxLDExMzM0LDExMzM2LDExMzQ2LDExMzYxLDExMzYzLDExMzY2LDExMzcwLDExMzcyLDExMzc1LDExMzg5''@;'; put 'put ''LDExNjgyLDExNjg2LDExNjg3LDExNjkyLDExNjk0LDExNzE0LDExNzE2LDExNzIzLDExNzI1LDExNzMwLDExNzM2LDExOTgyLDExOTg5LDEyMTAyLDEyMzM2LDEyMzQ4LDEyMzUwLDEyMzg0LDEyMzkzLDEyMzk1LDEyMzk3LDEyNTEwLDEyNTUzLDEyODUxLDEyOTYyLDEyOTczLDEzNzM4LDEz''@;'; put 'put ''ODIzLDEzOTE5LDEzOTMzLDE0MDgwLDE0Mjk4LDE0NTg1LDE0Njk4LDE1NTgzLDE1ODQ3LDE2MzE4LDE2NDM0LDE2NDM4LDE2NDgxLDE2NzI5LDE3MTAyLDE3MTIyLDE3MzE1LDE3MzIwLDE3NDAyLDE3NDE4LDE3ODU5LDE3OTA5LDE3OTExLDE3OTE1LDE3OTE2LDE3OTM2LDE3OTM5LDE3OTYx''@;'; put 'put ''LDE4NjY0LDE4NzAzLDE4ODE0LDE4OTYyLDE5MDQzLDMzNDY5LDMzNDcwLDMzNDcxLDMzNDg0LDMzNDg1LDMzNDkwLDMzNDk3LDMzNTAxLDMzNTA1LDMzNTEzLDMzNTIwLDMzNTM2LDMzNTUwLDM3ODQ1LDM3OTIxLDM3OTQ4LDM4MDI5LDM4MDM4LDM4MDY0LDM4MDY1LDM4MDY2LDM4MDY5LDM4''@;'; put 'put ''MDc1LDM4MDc2LDM4MDc4LDM5MTA4LDM5MTA5LDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MjY1LDM5Mzk0LDE4OTAwMF19Jyl9LDU1OTE0OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siYTE0MCIsIlx1ZTRjNiIsNjJdLFsiYTE4MCIsIlx1ZTUwNSIsMzJd''@;'; put 'put ''LFsiYTI0MCIsIlx1ZTUyNiIsNjJdLFsiYTI4MCIsIlx1ZTU2NSIsMzJdLFsiYTJhYiIsIlx1ZTc2NiIsNV0sWyJhMmUzIiwiXHUyMGFjXHVlNzZkIl0sWyJhMmVmIiwiXHVlNzZlXHVlNzZmIl0sWyJhMmZkIiwiXHVlNzcwXHVlNzcxIl0sWyJhMzQwIiwiXHVlNTg2Iiw2Ml0sWyJhMzgwIiwi''@;'; put 'put ''XHVlNWM1IiwzMSwiXHUzMDAwIl0sWyJhNDQwIiwiXHVlNWU2Iiw2Ml0sWyJhNDgwIiwiXHVlNjI1IiwzMl0sWyJhNGY0IiwiXHVlNzcyIiwxMF0sWyJhNTQwIiwiXHVlNjQ2Iiw2Ml0sWyJhNTgwIiwiXHVlNjg1IiwzMl0sWyJhNWY3IiwiXHVlNzdkIiw3XSxbImE2NDAiLCJcdWU2YTYiLDYy''@;'; put 'put ''XSxbImE2ODAiLCJcdWU2ZTUiLDMyXSxbImE2YjkiLCJcdWU3ODUiLDddLFsiYTZkOSIsIlx1ZTc4ZCIsNl0sWyJhNmVjIiwiXHVlNzk0XHVlNzk1Il0sWyJhNmYzIiwiXHVlNzk2Il0sWyJhNmY2IiwiXHVlNzk3Iiw4XSxbImE3NDAiLCJcdWU3MDYiLDYyXSxbImE3ODAiLCJcdWU3NDUiLDMy''@;'; put 'put ''XSxbImE3YzIiLCJcdWU3YTAiLDE0XSxbImE3ZjIiLCJcdWU3YWYiLDEyXSxbImE4OTYiLCJcdWU3YmMiLDEwXSxbImE4YmMiLCJcdWU3YzciXSxbImE4YmYiLCJcdTAxZjkiXSxbImE4YzEiLCJcdWU3YzlcdWU3Y2FcdWU3Y2JcdWU3Y2MiXSxbImE4ZWEiLCJcdWU3Y2QiLDIwXSxbImE5NTgi''@;'; put 'put ''LCJcdWU3ZTIiXSxbImE5NWIiLCJcdWU3ZTMiXSxbImE5NWQiLCJcdWU3ZTRcdWU3ZTVcdWU3ZTYiXSxbImE5ODkiLCJcdTMwM2VcdTJmZjAiLDExXSxbImE5OTciLCJcdWU3ZjQiLDEyXSxbImE5ZjAiLCJcdWU4MDEiLDE0XSxbImFhYTEiLCJcdWUwMDAiLDkzXSxbImFiYTEiLCJcdWUwNWUi''@;'; put 'put ''LDkzXSxbImFjYTEiLCJcdWUwYmMiLDkzXSxbImFkYTEiLCJcdWUxMWEiLDkzXSxbImFlYTEiLCJcdWUxNzgiLDkzXSxbImFmYTEiLCJcdWUxZDYiLDkzXSxbImQ3ZmEiLCJcdWU4MTAiLDRdLFsiZjhhMSIsIlx1ZTIzNCIsOTNdLFsiZjlhMSIsIlx1ZTI5MiIsOTNdLFsiZmFhMSIsIlx1ZTJm''@;'; put 'put ''MCIsOTNdLFsiZmJhMSIsIlx1ZTM0ZSIsOTNdLFsiZmNhMSIsIlx1ZTNhYyIsOTNdLFsiZmRhMSIsIlx1ZTQwYSIsOTNdLFsiZmU1MCIsIlx1MmU4MVx1ZTgxNlx1ZTgxN1x1ZTgxOFx1MmU4NFx1MzQ3M1x1MzQ0N1x1MmU4OFx1MmU4Ylx1ZTgxZVx1MzU5ZVx1MzYxYVx1MzYwZVx1MmU4Y1x1''@;'; put 'put ''MmU5N1x1Mzk2ZVx1MzkxOFx1ZTgyNlx1MzljZlx1MzlkZlx1M2E3M1x1MzlkMFx1ZTgyYlx1ZTgyY1x1M2I0ZVx1M2M2ZVx1M2NlMFx1MmVhN1x1ZTgzMVx1ZTgzMlx1MmVhYVx1NDA1Nlx1NDE1Zlx1MmVhZVx1NDMzN1x1MmViM1x1MmViNlx1MmViN1x1ZTgzYlx1NDNiMVx1NDNhY1x1MmVi''@;'; put 'put ''Ylx1NDNkZFx1NDRkNlx1NDY2MVx1NDY0Y1x1ZTg0MyJdLFsiZmU4MCIsIlx1NDcyM1x1NDcyOVx1NDc3Y1x1NDc4ZFx1MmVjYVx1NDk0N1x1NDk3YVx1NDk3ZFx1NDk4Mlx1NDk4M1x1NDk4NVx1NDk4Nlx1NDk5Zlx1NDk5Ylx1NDliN1x1NDliNlx1ZTg1NFx1ZTg1NVx1NGNhM1x1NGM5Zlx1''@;'; put 'put ''NGNhMFx1NGNhMVx1NGM3N1x1NGNhMlx1NGQxMyIsNiwiXHU0ZGFlXHVlODY0XHVlNDY4Iiw5M11dJyl9LDQwNjc5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyOF0sWyJhMSIsIlx1ZmY2MSIsNjJdLFsiODE0MCIsIlx1MzAwMFx1''@;'; put 'put ''MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUy''@;'; put 'put ''MDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZmMGRceGIxXHhkNyJdLFsiODE4MCIsIlx4Zjdc''@;'; put 'put ''dWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1''@;'; put 'put ''MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxMyJdLFsiODFiOCIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiODFjOCIs''@;'; put 'put ''Ilx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiODFkYSIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyYyJdLFsiODFmMCIsIlx1MjEyYlx1''@;'; put 'put ''MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbIjgxZmMiLCJcdTI1ZWYiXSxbIjgyNGYiLCJcdWZmMTAiLDldLFsiODI2MCIsIlx1ZmYyMSIsMjVdLFsiODI4MSIsIlx1ZmY0MSIsMjVdLFsiODI5ZiIsIlx1MzA0MSIsODJdLFsiODM0MCIsIlx1MzBhMSIsNjJdLFsi''@;'; put 'put ''ODM4MCIsIlx1MzBlMCIsMjJdLFsiODM5ZiIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyI4M2JmIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbIjg0NDAiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiODQ3MCIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2Iiw3XSxbIjg0ODAi''@;'; put 'put ''LCJcdTA0M2UiLDE3XSxbIjg0OWYiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1''@;'; put 'put ''MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbIjg3NDAiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiODc1ZiIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMy''@;'; put 'put ''Nlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiODc3ZSIsIlx1MzM3YiJdLFsiODc4MCIsIlx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUz''@;'; put 'put ''MzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyI4ODlmIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFj''@;'; put 'put ''XHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5''@;'; put 'put ''NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAy''@;'; put 'put ''XHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4''@;'; put 'put ''NTJkIl0sWyI4OTQwIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5''@;'; put 'put ''XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2''@;'; put 'put ''ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2Il0sWyI4OTgwIiwiXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNm''@;'; put 'put ''XHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1''@;'; put 'put ''Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMx''@;'; put 'put ''XHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4''@;'; put 'put ''NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5''@;'; put 'put ''Il0sWyI4YTQwIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4''@;'; put 'put ''YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEz''@;'; put 'put ''XHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiIl0sWyI4YTgwIiwiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5''@;'; put 'put ''YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZi''@;'; put 'put ''XHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3''@;'; put 'put ''YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNj''@;'; put 'put ''XHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0s''@;'; put 'put ''WyI4YjQwIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJm''@;'; put 'put ''XHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0''@;'; put 'put ''ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxIl0sWyI4YjgwIiwiXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1''@;'; put 'put ''XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1''@;'; put 'put ''ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZk''@;'; put 'put ''XHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5''@;'; put 'put ''MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyI4''@;'; put 'put ''YzQwIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1''@;'; put 'put ''MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNk''@;'; put 'put ''XHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4Il0sWyI4YzgwIiwiXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1''@;'; put 'put ''MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2Uy''@;'; put 'put ''XHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1''@;'; put 'put ''YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJm''@;'; put 'put ''XHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyI4ZDQw''@;'; put 'put ''IiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIx''@;'; put 'put ''XHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4''@;'; put 'put ''Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkIl0sWyI4ZDgwIiwiXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRh''@;'; put 'put ''XHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2''@;'; put 'put ''ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVl''@;'; put 'put ''XHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5''@;'; put 'put ''NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyI4ZTQwIiwi''@;'; put 'put ''XHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3''@;'; put 'put ''ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFk''@;'; put 'put ''XHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyIl0sWyI4ZTgwIiwiXHU2YjdiXHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4''@;'; put 'put ''Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUw''@;'; put 'put ''XHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3''@;'; put 'put ''ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMx''@;'; put 'put ''XHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyI4ZjQwIiwiXHU1''@;'; put 'put ''Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1''@;'; put 'put ''XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4''@;'; put 'put ''MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzIl0sWyI4ZjgwIiwiXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4''@;'; put 'put ''XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1''@;'; put 'put ''YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAx''@;'; put 'put ''XHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0''@;'; put 'put ''ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyI5MDQwIiwiXHU2MmVk''@;'; put 'put ''XHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3''@;'; put 'put ''NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYz''@;'; put 'put ''XHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4Il0sWyI5MDgwIiwiXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1''@;'; put 'put ''ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNm''@;'; put 'put ''XHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2''@;'; put 'put ''MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5''@;'; put 'put ''XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhIl0sWyI5MTQwIiwiXHU3ZTRhXHU3''@;'; put 'put ''ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZl''@;'; put 'put ''XHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1''@;'; put 'put ''MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiIl0sWyI5MTgwIiwiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZj''@;'; put 'put ''XHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1''@;'; put 'put ''YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQw''@;'; put 'put ''XHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1''@;'; put 'put ''OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0sWyI5MjQwIiwiXHU1M2U5XHU0ZjQ2''@;'; put 'put ''XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3''@;'; put 'put ''ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1''@;'; put 'put ''XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0Il0sWyI5MjgwIiwiXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5''@;'; put 'put ''OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0''@;'; put 'put ''XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5''@;'; put 'put ''MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4Yzll''@;'; put 'put ''XHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyI5MzQwIiwiXHU5MGI4XHU5MTJkXHU5''@;'; put 'put ''MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUy''@;'; put 'put ''XHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1''@;'; put 'put ''NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjIl0sWyI5MzgwIiwiXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDli''@;'; put 'put ''XHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1''@;'; put 'put ''NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4''@;'; put 'put ''XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2''@;'; put 'put ''MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyI5NDQwIiwiXHU1OTgyXHU1YzNmXHU5N2Vl''@;'; put 'put ''XHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4''@;'; put 'put ''MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5''@;'; put 'put ''XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1Il0sWyI5NDgwIiwiXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3''@;'; put 'put ''Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVh''@;'; put 'put ''XHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4''@;'; put 'put ''NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIy''@;'; put 'put ''XHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyI5NTQwIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1''@;'; put 'put ''MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5''@;'; put 'put ''XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1''@;'; put 'put ''ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3Il0sWyI5NTgwIiwiXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4''@;'; put 'put ''XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3''@;'; put 'put ''MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1''@;'; put 'put ''XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2''@;'; put 'put ''MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyI5NjQwIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMy''@;'; put 'put ''XHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2''@;'; put 'put ''OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0''@;'; put 'put ''XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2Il0sWyI5NjgwIiwiXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2''@;'; put 'put ''MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIw''@;'; put 'put ''XHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2''@;'; put 'put ''NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVm''@;'; put 'put ''XHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyI5NzQwIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1''@;'; put 'put ''MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5''@;'; put 'put ''XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5''@;'; put 'put ''OTBhXHU2MTdlXHU2MjkxXHU2YjMyIl0sWyI5NzgwIiwiXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNk''@;'; put 'put ''XHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3''@;'; put 'put ''YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4''@;'; put 'put ''XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4''@;'; put 'put ''MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyI5ODQwIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZm''@;'; put 'put ''XHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1''@;'; put 'put ''MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyI5ODlmIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNj''@;'; put 'put ''XHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0''@;'; put 'put ''ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQw''@;'; put 'put ''XHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1''@;'; put 'put ''MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyI5OTQwIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNh''@;'; put 'put ''XHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1''@;'; put 'put ''MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkIl0sWyI5OTgwIiwiXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMz''@;'; put 'put ''XHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1''@;'; put 'put ''MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5''@;'; put 'put ''XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1''@;'; put 'put ''NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1''@;'; put 'put ''XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyI5YTQwIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1''@;'; put 'put ''NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0''@;'; put 'put ''XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4Il0sWyI5YTgwIiwiXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1''@;'; put 'put ''NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFj''@;'; put 'put ''XHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1''@;'; put 'put ''ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1''@;'; put 'put ''XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1''@;'; put 'put ''OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyI5YjQwIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5''@;'; put 'put ''XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1''@;'; put 'put ''YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwIl0sWyI5YjgwIiwiXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRl''@;'; put 'put ''XHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1''@;'; put 'put ''YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIy''@;'; put 'put ''XHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1''@;'; put 'put ''ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMy''@;'; put 'put ''XHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyI5YzQwIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1''@;'; put 'put ''ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEw''@;'; put 'put ''XHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwIl0sWyI5YzgwIiwiXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2''@;'; put 'put ''MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4''@;'; put 'put ''XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2''@;'; put 'put ''MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThh''@;'; put 'put ''XHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2''@;'; put 'put ''MjBjXHU2MjE0XHU2MjFiIl0sWyI5ZDQwIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2Mjgz''@;'; put 'put ''XHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2''@;'; put 'put ''NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiIl0sWyI5ZDgwIiwiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2''@;'; put 'put ''XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4''@;'; put 'put ''MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1''@;'; put 'put ''XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2''@;'; put 'put ''NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5''@;'; put 'put ''XHU2NmJlXHU2NmJjIl0sWyI5ZTQwIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2''@;'; put 'put ''NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2Vl''@;'; put 'put ''XHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlIl0sWyI5ZTgwIiwiXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2''@;'; put 'put ''YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5''@;'; put 'put ''XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2''@;'; put 'put ''OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3''@;'; put 'put ''XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2''@;'; put 'put ''YWEyXHU2YWEzIl0sWyI5ZjQwIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3''@;'; put 'put ''XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2''@;'; put 'put ''YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmIl0sWyI5ZjgwIiwiXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2Yzlh''@;'; put 'put ''XHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2''@;'; put 'put ''ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4''@;'; put 'put ''XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2''@;'; put 'put ''ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMy''@;'; put 'put ''XHU2ZWNjIl0sWyJlMDQwIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2''@;'; put 'put ''ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYz''@;'; put 'put ''XHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkIl0sWyJlMDgwIiwiXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3''@;'; put 'put ''MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNi''@;'; put 'put ''XHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1''@;'; put 'put ''MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1''@;'; put 'put ''XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3''@;'; put 'put ''M2YxIl0sWyJlMTQwIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRh''@;'; put 'put ''XHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3''@;'; put 'put ''NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmIl0sWyJlMTgwIiwiXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0''@;'; put 'put ''XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3''@;'; put 'put ''Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3''@;'; put 'put ''XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3''@;'; put 'put ''N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVj''@;'; put 'put ''Il0sWyJlMjQwIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3''@;'; put 'put ''OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcw''@;'; put 'put ''XHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwIl0sWyJlMjgwIiwiXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3''@;'; put 'put ''YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3Yjcx''@;'; put 'put ''XHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3''@;'; put 'put ''YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3Yzgz''@;'; put 'put ''XHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0s''@;'; put 'put ''WyJlMzQwIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJh''@;'; put 'put ''XHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3''@;'; put 'put ''ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3Il0sWyJlMzgwIiwiXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdk''@;'; put 'put ''XHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3''@;'; put 'put ''ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2''@;'; put 'put ''XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4''@;'; put 'put ''MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJl''@;'; put 'put ''NDQwIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4''@;'; put 'put ''MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJi''@;'; put 'put ''XHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0Il0sWyJlNDgwIiwiXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4''@;'; put 'put ''MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4''@;'; put 'put ''XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4''@;'; put 'put ''NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYy''@;'; put 'put ''XHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlNTQw''@;'; put 'put ''IiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1''@;'; put 'put ''XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4''@;'; put 'put ''NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjIl0sWyJlNTgwIiwiXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3''@;'; put 'put ''XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4''@;'; put 'put ''N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQy''@;'; put 'put ''XHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4''@;'; put 'put ''OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlNjQwIiwi''@;'; put 'put ''XHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4''@;'; put 'put ''OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlh''@;'; put 'put ''XHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3Il0sWyJlNjgwIiwiXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5''@;'; put 'put ''N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNh''@;'; put 'put ''XHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4''@;'; put 'put ''Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMy''@;'; put 'put ''XHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlNzQwIiwiXHU4''@;'; put 'put ''ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIw''@;'; put 'put ''XHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4''@;'; put 'put ''ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjIl0sWyJlNzgwIiwiXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5''@;'; put 'put ''XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5''@;'; put 'put ''MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTcz''@;'; put 'put ''XHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5''@;'; put 'put ''MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlODQwIiwiXHU5MzE5''@;'; put 'put ''XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5''@;'; put 'put ''NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdm''@;'; put 'put ''XHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5Il0sWyJlODgwIiwiXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5''@;'; put 'put ''NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0''@;'; put 'put ''XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5''@;'; put 'put ''NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0''@;'; put 'put ''XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwIl0sWyJlOTQwIiwiXHU5ODcxXHU5''@;'; put 'put ''ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1''@;'; put 'put ''XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5''@;'; put 'put ''YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzIl0sWyJlOTgwIiwiXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQz''@;'; put 'put ''XHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5''@;'; put 'put ''YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0''@;'; put 'put ''XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5''@;'; put 'put ''YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0sWyJlYTQwIiwiXHU5ZDVkXHU5ZDVl''@;'; put 'put ''XHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5''@;'; put 'put ''ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRj''@;'; put 'put ''XHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmIl0sWyJlYTgwIiwiXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5''@;'; put 'put ''ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJlZDQwIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMx''@;'; put 'put ''XHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1''@;'; put 'put ''MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBm''@;'; put 'put ''Il0sWyJlZDgwIiwiXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1''@;'; put 'put ''ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNi''@;'; put 'put ''XHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2''@;'; put 'put ''OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJm''@;'; put 'put ''XHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJlZTQwIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3''@;'; put 'put ''M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFh''@;'; put 'put ''XHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5Il0s''@;'; put 'put ''WyJlZTgwIiwiXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3''@;'; put 'put ''XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5''@;'; put 'put ''MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFm''@;'; put 'put ''XHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5''@;'; put 'put ''ZWQxIl0sWyJlZWVmIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbImYwNDAiLCJcdWUwMDAiLDYyXSxbImYwODAiLCJcdWUwM2YiLDEyNF0sWyJmMTQwIiwiXHVlMGJjIiw2Ml0sWyJmMTgwIiwiXHVlMGZiIiwxMjRdLFsiZjI0MCIsIlx1ZTE3OCIsNjJdLFsiZjI4''@;'; put 'put ''MCIsIlx1ZTFiNyIsMTI0XSxbImYzNDAiLCJcdWUyMzQiLDYyXSxbImYzODAiLCJcdWUyNzMiLDEyNF0sWyJmNDQwIiwiXHVlMmYwIiw2Ml0sWyJmNDgwIiwiXHVlMzJmIiwxMjRdLFsiZjU0MCIsIlx1ZTNhYyIsNjJdLFsiZjU4MCIsIlx1ZTNlYiIsMTI0XSxbImY2NDAiLCJcdWU0NjgiLDYy''@;'; put 'put ''XSxbImY2ODAiLCJcdWU0YTciLDEyNF0sWyJmNzQwIiwiXHVlNTI0Iiw2Ml0sWyJmNzgwIiwiXHVlNTYzIiwxMjRdLFsiZjg0MCIsIlx1ZTVlMCIsNjJdLFsiZjg4MCIsIlx1ZTYxZiIsMTI0XSxbImY5NDAiLCJcdWU2OWMiXSxbImZhNDAiLCJcdTIxNzAiLDksIlx1MjE2MCIsOSwiXHVmZmUy''@;'; put 'put ''XHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0''@;'; put 'put ''ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhIl0sWyJmYTgwIiwiXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3''@;'; put 'put ''XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1''@;'; put 'put ''YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIw''@;'; put 'put ''XHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2''@;'; put 'put ''NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZm''@;'; put 'put ''XHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmIl0sWyJmYjQwIiwiXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3''@;'; put 'put ''MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3Njgy''@;'; put 'put ''XHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5Il0sWyJmYjgwIiwiXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3''@;'; put 'put ''ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3''@;'; put 'put ''XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5''@;'; put 'put ''MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFk''@;'; put 'put ''XHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVm''@;'; put 'put ''YTJjXHU5OTllXHU5YTRlXHU5YWQ5Il0sWyJmYzQwIiwiXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl1dJyl9LDE1NTc5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2''@;'; put 'put ''Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEw''@;'; put 'put ''MS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40''@;'; put 'put ''LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxjZT0+e2NlKGNlLnM9MzYwOTUp''@;'; put 'put ''fV0pOw=='';'; 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.06e7f05dd7d911ae-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHsyNDA1MDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMTg4ODMpLHQoNTQ5NDApLHQoMzkyNzEpLHQoNTI0NDQpLHQoMjYyMDMpLHQoMTU2MjYp''@;'; put 'put ''LHQoODgwMjUpLHQoNTY0NDIpLHQoMzI4OTkpLHQoNjYzNzQpLHQoNDI0NiksdCgyMjkxMyksdCgxMDc0MyksdCg2NTg0NiksdCg5MzUzKSx0KDk2OTM1KSx0KDkyNTY4KTt2YXIgZHQ9dCg4MzgzOCk7d2luZG93Lmdsb2JhbD13aW5kb3csd2luZG93Lmdsb2JhbC5CdWZmZXI9d2luZG93Lmds''@;'; put 'put ''b2JhbC5CdWZmZXJ8fGR0LkJ1ZmZlcix3aW5kb3cucHJvY2Vzcz17dmVyc2lvbjoiIn19LDEzOTgxOihjLGwpPT57InVzZSBzdHJpY3QiO2wuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWYoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQteH0sbC50b0J5dGVBcnJheT1mdW5j''@;'; put 'put ''dGlvbiBwKGcpe3ZhciBELFQsRj1mKGcpLHg9RlswXSx3PUZbMV0sQz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCx3KSksST0wLE09dz4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChUKV08PDE4fG5bZy5jaGFyQ29kZUF0''@;'; put 'put ''KFQrMSldPDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxDW0krK109RD4+MTYmMjU1LENbSSsrXT1EPj44JjI1NSxDW0krK109MjU1JkQ7cmV0dXJuIDI9PT13JiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltnLmNoYXJDb2RlQXQoVCsxKV0+PjQs''@;'; put 'put ''Q1tJKytdPTI1NSZEKSwxPT09dyYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixDW0krK109RD4+OCYyNTUsQ1tJKytdPTI1NSZEKSxDfSxsLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShnKXtmb3IodmFy''@;'; put 'put ''IEQsRj1nLmxlbmd0aCx4PUYlMyx3PVtdLEM9MTYzODMsST0wLE09Ri14O0k8TTtJKz1DKXcucHVzaChtKGcsSSxJK0M+TT9NOkkrQykpO3JldHVybiAxPT09eD93LnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZ3LnB1c2godFsoRD0oZ1tGLTJdPDw4KStn''@;'; put 'put ''W0YtMV0pPj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9Iiksdy5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6''@;'; put 'put ''MDEyMzQ1Njc4OSsvIixhPTA7YTw2NDsrK2EpdFthXT1zW2FdLG5bcy5jaGFyQ29kZUF0KGEpXT1hO2Z1bmN0aW9uIGYoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFy''@;'; put 'put ''IEY9Zy5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24gbShnLEQsRil7Zm9yKHZhciB3PVtdLEM9RDtDPEY7Qys9Myl3''@;'; put 'put ''LnB1c2goZCgoZ1tDXTw8MTYmMTY3MTE2ODApKyhnW0MrMV08PDgmNjUyODApKygyNTUmZ1tDKzJdKSkpO3JldHVybiB3LmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSw4MzgzODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7bC5CdWZmZXI9aSxsLlNsb3dCdWZmZXI9ZnVuY3Rpb24gQyhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGwu''@;'; put 'put ''SU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGE9MjE0NzQ4MzY0NztmdW5jdGlvbiBmKGgpe2lmKGg+YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgscixvKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4g''@;'; put 'put ''UmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbShoKX1yZXR1cm4gdihoLHIsbyl9ZnVuY3Rpb24gdihoLHIsbyl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0Vu''@;'; put 'put ''Y29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIG89MHxJKGgscikseT1mKG8pLFA9eS53cml0ZShoLHIpO3JldHVybiBQIT09byYmKHk9eS5zbGljZSgwLFApKSx5fShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gRChoKXtpZihfdChoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihfdChoLEFycmF5QnVmZmVyKXx8aCYmX3QoaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2Yg''@;'; put 'put ''U2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoX3QoaCxTaGFyZWRBcnJheUJ1ZmZlcil8fGgmJl90KGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLG8pO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBt''@;'; put 'put ''dXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgeT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPXkmJnkhPT1oKXJldHVybiBpLmZyb20oeSxyLG8pO3ZhciBQPWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHx3''@;'; put 'put ''KGgubGVuZ3RoKSxvPWYocik7cmV0dXJuIDA9PT1vLmxlbmd0aHx8aC5jb3B5KG8sMCwwLHIpLG99cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fG1uKGgubGVuZ3RoKT9mKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXko''@;'; put 'put ''aC5kYXRhKT9nKGguZGF0YSk6dm9pZCAwfShoKTtpZihQKXJldHVybiBQO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV0oInN0cmluZyIpLHIsbyk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVu''@;'; put 'put ''Y3Rpb24gcChoKXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAi''@;'; put 'put ''c2l6ZSInKX1mdW5jdGlvbiBtKGgpe3JldHVybiBwKGgpLGYoaDwwPzA6MHx3KGgpKX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHx3KGgubGVuZ3RoKSxvPWYocikseT0wO3k8cjt5Kz0xKW9beV09MjU1JmhbeV07cmV0dXJuIG99ZnVuY3Rpb24gRihoLHIsbyl7aWYo''@;'; put 'put ''cjwwfHxoLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKG98fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMn''@;'; put 'put ''KTt2YXIgeTtyZXR1cm4geT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1vP25ldyBVaW50OEFycmF5KGgpOnZvaWQgMD09PW8/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsbyksT2JqZWN0LnNldFByb3RvdHlwZU9mKHksaS5wcm90b3R5cGUpLHl9ZnVuY3Rpb24gdyhoKXtp''@;'; put 'put ''ZihoPj1hKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBJKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5s''@;'; put 'put ''ZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxfdChoLEFycmF5QnVmZmVyKSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1''@;'; put 'put ''ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7dmFyIG89aC5sZW5ndGgseT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF5JiYwPT09bylyZXR1cm4gMDtmb3IodmFyIFA9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2Fz''@;'; put 'put ''ZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbztjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBybihoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm87Y2FzZSJoZXgiOnJldHVybiBvPj4+MTtjYXNl''@;'; put 'put ''ImJhc2U2NCI6cmV0dXJuIGRuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKFApcmV0dXJuIHk/LTE6cm4oaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksUD0hMH19ZnVuY3Rpb24gTShoLHIsbyl7dmFyIHk9ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8''@;'; put 'put ''fCgodm9pZCAwPT09b3x8bz50aGlzLmxlbmd0aCkmJihvPXRoaXMubGVuZ3RoKSxvPD0wKXx8KG8+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLG8pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6''@;'; put 'put ''cmV0dXJuIHEodGhpcyxyLG8pO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixvKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBmdCh0aGlzLHIsbyk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsbyk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUi''@;'; put 'put ''OmNhc2UidXRmLTE2bGUiOnJldHVybiBidCh0aGlzLHIsbyk7ZGVmYXVsdDppZih5KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSx5PSEwfX1mdW5jdGlvbiBUKGgscixvKXt2YXIgeT1oW3JdO2hbcl09aFtvXSxoW29d''@;'; put 'put ''PXl9ZnVuY3Rpb24gYihoLHIsbyx5LFApe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG8/KHk9byxvPTApOm8+MjE0NzQ4MzY0Nz9vPTIxNDc0ODM2NDc6bzwtMjE0NzQ4MzY0OCYmKG89LTIxNDc0ODM2NDgpLG1uKG89K28pJiYobz1QPzA6aC5sZW5ndGgt''@;'; put 'put ''MSksbzwwJiYobz1oLmxlbmd0aCtvKSxvPj1oLmxlbmd0aCl7aWYoUClyZXR1cm4tMTtvPWgubGVuZ3RoLTF9ZWxzZSBpZihvPDApe2lmKCFQKXJldHVybi0xO289MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLHkpKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5n''@;'; put 'put ''dGg/LTE6TChoLHIsbyx5LFApO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP1A/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixvKTpVaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5sYXN0SW5kZXhPZi5jYWxsKGgscixvKTpMKGgsW3JdLG8seSxQKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBMKGgscixvLHksUCl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsanQ9ci5sZW5ndGg7aWYodm9pZCAw''@;'; put 'put ''IT09eSYmKCJ1Y3MyIj09PSh5PVN0cmluZyh5KS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PXl8fCJ1dGYxNmxlIj09PXl8fCJ1dGYtMTZsZSI9PT15KSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixqdC89MixvLz0yfWZ1bmN0aW9uIF8oUXQsYW4pe3Jl''@;'; put 'put ''dHVybiAxPT09Sz9RdFthbl06UXQucmVhZFVJbnQxNkJFKGFuKkspfWlmKFApe3ZhciBRPS0xO2ZvcihIPW87SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PWp0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0t''@;'; put 'put ''MX1lbHNlIGZvcihvK2p0PiQmJihvPSQtanQpLEg9bztIPj0wO0gtLSl7Zm9yKHZhciBpdD0hMCx6dD0wO3p0PGp0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsbyx5KXtvPU51bWJlcihvKXx8''@;'; put 'put ''MDt2YXIgUD1oLmxlbmd0aC1vO3k/KHk9TnVtYmVyKHkpKT5QJiYoeT1QKTp5PVA7dmFyIEs9ci5sZW5ndGg7eT5LLzImJih5PUsvMik7Zm9yKHZhciAkPTA7JDx5OysrJCl7dmFyIGp0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYobW4oanQpKXJldHVybiAkO2hbbyskXT1qdH1y''@;'; put 'put ''ZXR1cm4gJH1mdW5jdGlvbiBaKGgscixvLHkpe3JldHVybiBzbihybihyLGgubGVuZ3RoLW8pLGgsbyx5KX1mdW5jdGlvbiBudChoLHIsbyx5KXtyZXR1cm4gc24oZnVuY3Rpb24geG4oaCl7Zm9yKHZhciByPVtdLG89MDtvPGgubGVuZ3RoOysrbylyLnB1c2goMjU1JmguY2hhckNvZGVBdChv''@;'; put 'put ''KSk7cmV0dXJuIHJ9KHIpLGgsbyx5KX1mdW5jdGlvbiB0dChoLHIsbyx5KXtyZXR1cm4gc24oZG4ociksaCxvLHkpfWZ1bmN0aW9uIHl0KGgscixvLHkpe3JldHVybiBzbihmdW5jdGlvbiBxdChoLHIpe2Zvcih2YXIgbyx5LEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCl5''@;'; put 'put ''PShvPWguY2hhckNvZGVBdCgkKSk+PjgsSy5wdXNoKG8lMjU2KSxLLnB1c2goeSk7cmV0dXJuIEt9KHIsaC5sZW5ndGgtbyksaCxvLHkpfWZ1bmN0aW9uIG10KGgscixvKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZvPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsbykpfWZ1bmN0aW9u''@;'; put 'put ''IHEoaCxyLG8pe289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciB5PVtdLFA9cjtQPG87KXt2YXIgXyxILFEsaXQsSz1oW1BdLCQ9bnVsbCxqdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKFAranQ8PW8pc3dpdGNoKGp0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MjoxMjg9PSgxOTImKF89aFtQKzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFtQKzJdLDEyOD09KDE5MiYoXz1oW1ArMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxp''@;'; put 'put ''dD41NzM0MykmJigkPWl0KTticmVhaztjYXNlIDQ6SD1oW1ArMl0sUT1oW1ArM10sMTI4PT0oMTkyJihfPWhbUCsxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0''@;'; put 'put ''KX1udWxsPT09JD8oJD02NTUzMyxqdD0xKTokPjY1NTM1JiYoeS5wdXNoKCgkLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCkseS5wdXNoKCQpLFArPWp0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlLmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIG89IiIseT0wO3k8cjspbys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZSh5LHkrPVgpKTtyZXR1cm4gb30oeSl9bC5rTWF4TGVuZ3RoPWEsIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgp''@;'; put 'put ''e3RyeXt2YXIgaD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4h''@;'; put 'put ''MX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4g''@;'; put 'put ''VXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZm''@;'; put 'put ''ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixvKXty''@;'; put 'put ''ZXR1cm4gdihoLHIsbyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsbyl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLG8pe3JldHVybiBw''@;'; put 'put ''KGgpLGg8PTA/ZihoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2Ygbz9mKGgpLmZpbGwocixvKTpmKGgpLmZpbGwocik6ZihoKX0oaCxyLG8pfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiBtKGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4gbSho''@;'; put 'put ''KX0saS5pc0J1ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1yLl9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixvKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxfdChvLFVp''@;'; put 'put ''bnQ4QXJyYXkpJiYobz1pLmZyb20obyxvLm9mZnNldCxvLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFy''@;'; put 'put ''cmF5Jyk7aWYocj09PW8pcmV0dXJuIDA7Zm9yKHZhciB5PXIubGVuZ3RoLFA9by5sZW5ndGgsSz0wLCQ9TWF0aC5taW4oeSxQKTtLPCQ7KytLKWlmKHJbS10hPT1vW0tdKXt5PXJbS10sUD1vW0tdO2JyZWFrfXJldHVybiB5PFA/LTE6UDx5PzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIp''@;'; put 'put ''e3N3aXRjaChTdHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2''@;'; put 'put ''bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbihyLG8pe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IGkuYWxsb2MoMCk7dmFyIHk7aWYodm9pZCAwPT09bylmb3Iobz0wLHk9MDt5PHIubGVuZ3RoOysreSlvKz1yW3ldLmxlbmd0aDt2YXIgUD1pLmFsbG9jVW5zYWZlKG8pLEs9MDtmb3IoeT0wO3k8ci5sZW5ndGg7Kyt5KXt2YXIgJD1yW3ldO2lmKF90KCQsVWludDhBcnJheSkpSyskLmxlbmd0''@;'; put 'put ''aD5QLmxlbmd0aD9pLmZyb20oJCkuY29weShQLEspOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFAsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHko''@;'; put 'put ''UCxLKX1LKz0kLmxlbmd0aH1yZXR1cm4gUH0saS5ieXRlTGVuZ3RoPUksaS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBi''@;'; put 'put ''ZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9MilUKHRoaXMsbyxvKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXpl''@;'; put 'put ''IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBvPTA7bzxyO28rPTQpVCh0aGlzLG8sbyszKSxUKHRoaXMsbysxLG8rMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIG89MDtvPHI7bys9OClUKHRoaXMsbyxvKzcpLFQodGhpcyxvKzEsbys2KSxUKHRoaXMsbysyLG8rNSksVCh0aGlzLG8rMyxvKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50''@;'; put 'put ''b0xvY2FsZVN0cmluZz1pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9u''@;'; put 'put ''KHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLG89bC5JTlNQRUNUX01B''@;'; put 'put ''WF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsbykucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5vJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmluc3BlY3QpLGkucHJv''@;'; put 'put ''dG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixvLHksUCxLKXtpZihfdChyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2Yg''@;'; put 'put ''dHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByKTtpZih2b2lkIDA9PT1vJiYobz0wKSx2b2lkIDA9PT15JiYoeT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PVAmJihQPTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxvPDB8fHk+ci5sZW5ndGh8''@;'; put 'put ''fFA8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoUD49SyYmbz49eSlyZXR1cm4gMDtpZihQPj1LKXJldHVybi0xO2lmKG8+PXkpcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShLPj4+PTApLShQPj4+''@;'; put 'put ''PTApLGp0PSh5Pj4+PTApLShvPj4+PTApLF89TWF0aC5taW4oJCxqdCksSD10aGlzLnNsaWNlKFAsSyksUT1yLnNsaWNlKG8seSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxqdD1RW2l0XTticmVha31yZXR1cm4gJDxqdD8tMTpqdDwkPzE6MH0saS5wcm90b3R5''@;'; put 'put ''cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixvLHkpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHIsbyx5KX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLG8seSl7cmV0dXJuIGIodGhpcyxyLG8seSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHIsbyx5KXtyZXR1''@;'; put 'put ''cm4gYih0aGlzLHIsbyx5LCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocixvLHksUCl7aWYodm9pZCAwPT09bylQPSJ1dGY4Iix5PXRoaXMubGVuZ3RoLG89MDtlbHNlIGlmKHZvaWQgMD09PXkmJiJzdHJpbmciPT10eXBlb2YgbylQPW8seT10aGlzLmxlbmd0aCxvPTA7ZWxzZXtp''@;'; put 'put ''ZighaXNGaW5pdGUobykpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO28+Pj49MCxpc0Zpbml0ZSh5KT8oeT4+Pj0wLHZvaWQgMD09PVAmJihQPSJ1dGY4IikpOihQPXkseT12''@;'; put 'put ''b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLW87aWYoKHZvaWQgMD09PXl8fHk+SykmJih5PUspLHIubGVuZ3RoPjAmJih5PDB8fG88MCl8fG8+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7UHx8KFA9InV0''@;'; put 'put ''ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2goUCl7Y2FzZSJoZXgiOnJldHVybiBVKHRoaXMscixvLHkpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLG8seSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQodGhpcyxyLG8seSk7''@;'; put 'put ''Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsbyx5KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixvLHkpO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1Ap''@;'; put 'put ''O1A9KCIiK1ApLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlvbiBWKGgscixvKXt2''@;'; put 'put ''YXIgeT0iIjtvPU1hdGgubWluKGgubGVuZ3RoLG8pO2Zvcih2YXIgUD1yO1A8bzsrK1ApeSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFtQXSk7cmV0dXJuIHl9ZnVuY3Rpb24gZnQoaCxyLG8pe3ZhciB5PSIiO289TWF0aC5taW4oaC5sZW5ndGgsbyk7Zm9yKHZhciBQPXI7UDxvOysrUCl5''@;'; put 'put ''Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbUF0pO3JldHVybiB5fWZ1bmN0aW9uIGR0KGgscixvKXt2YXIgeT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghb3x8bzwwfHxvPnkpJiYobz15KTtmb3IodmFyIFA9IiIsSz1yO0s8bzsrK0spUCs9VG5baFtLXV07cmV0dXJuIFB9ZnVuY3Rpb24g''@;'; put 'put ''YnQoaCxyLG8pe2Zvcih2YXIgeT1oLnNsaWNlKHIsbyksUD0iIixLPTA7Szx5Lmxlbmd0aC0xO0srPTIpUCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W0tdKzI1Nip5W0srMV0pO3JldHVybiBQfWZ1bmN0aW9uIE90KGgscixvKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi''@;'; put 'put ''b2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPm8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsbyx5LFAsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+UHx8cjxLKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIp''@;'; put 'put ''fWZ1bmN0aW9uIFl0KGgscixvLHksUCxLKXtpZihvK3k+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gb24oaCxyLG8seSxQKXtyZXR1cm4g''@;'; put 'put ''cj0rcixvPj4+PTAsUHx8WXQoaCwwLG8sNCksZS53cml0ZShoLHIsbyx5LDIzLDQpLG8rNH1mdW5jdGlvbiBHdChoLHIsbyx5LFApe3JldHVybiByPStyLG8+Pj49MCxQfHxZdChoLDAsbyw4KSxlLndyaXRlKGgscixvLHksNTIsOCksbys4fWkucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHIs''@;'; put 'put ''byl7dmFyIHk9dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz15KTwwJiYocj0wKTpyPnkmJihyPXkpLChvPXZvaWQgMD09PW8/eTp+fm8pPDA/KG8rPXkpPDAmJihvPTApOm8+eSYmKG89eSksbzxyJiYobz1yKTt2YXIgUD10aGlzLnN1YmFycmF5KHIsbyk7cmV0dXJuIE9iamVjdC5zZXRQcm90''@;'; put 'put ''b3R5cGVPZihQLGkucHJvdG90eXBlKSxQfSxpLnByb3RvdHlwZS5yZWFkVWludExFPWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixvLHkpe3I+Pj49MCxvPj4+PTAseXx8T3QocixvLHRoaXMubGVuZ3RoKTtmb3IodmFyIFA9dGhpc1tyXSxLPTEsJD0wOysrJDxvJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKyRdKks7cmV0dXJuIFB9LGkucHJvdG90eXBlLnJlYWRVaW50QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLG8seSl7cj4+Pj0wLG8+Pj49MCx5fHxPdChyLG8sdGhpcy5sZW5ndGgpO2Zvcih2YXIgUD10aGlzW3IrLS1vXSxLPTE7bz4wJiYoSyo9MjU2''@;'; put 'put ''KTspUCs9dGhpc1tyKy0tb10qSztyZXR1cm4gUH0saS5wcm90b3R5cGUucmVhZFVpbnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWludDE2TEU9aS5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+''@;'; put 'put ''Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0aGlzW3JdfHRoaXNb''@;'; put 'put ''cisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJvdG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tyXSsodGhp''@;'; put 'put ''c1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPXRoaXNbcl0sSz0xLCQ9MDsrKyQ8byYmKEsqPTI1Nik7KVArPXRoaXNbcisk''@;'; put 'put ''XSpLO3JldHVybiBQPj0oSyo9MTI4KSYmKFAtPU1hdGgucG93KDIsOCpvKSksUH0saS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsbyx5KXtyPj4+PTAsbz4+Pj0wLHl8fE90KHIsbyx0aGlzLmxlbmd0aCk7Zm9yKHZhciBQPW8sSz0xLCQ9dGhpc1tyKy0tUF07UD4wJiYoSyo9MjU2''@;'; put 'put ''KTspJCs9dGhpc1tyKy0tUF0qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRoLnBvdygyLDgqbykpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigyNTUtdGhpc1tyXSsx''@;'; put 'put ''KTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8pe3I+Pj49MCxvfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciB5PXRoaXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZ5PzQyOTQ5MDE3NjB8eTp5fSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw0LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNbciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisxXTw8MTZ8dGhpc1ty''@;'; put 'put ''KzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixvKXtyZXR1cm4gcj4+''@;'; put 'put ''Pj0wLG98fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI+Pj49MCxvfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGkucHJvdG90eXBlLnJl''@;'; put 'put ''YWREb3VibGVCRT1mdW5jdGlvbihyLG8pe3JldHVybiByPj4+PTAsb3x8T3Qociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLG8seSxQKXtyPStyLG8+Pj49MCx5''@;'; put 'put ''Pj4+PTAsUHx8TnQodGhpcyxyLG8seSxNYXRoLnBvdygyLDgqeSktMSwwKTt2YXIgJD0xLGp0PTA7Zm9yKHRoaXNbb109MjU1JnI7KytqdDx5JiYoJCo9MjU2KTspdGhpc1tvK2p0XT1yLyQmMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJvdG90eXBlLndyaXRl''@;'; put 'put ''VUludEJFPWZ1bmN0aW9uKHIsbyx5LFApe3I9K3Isbz4+Pj0wLHk+Pj49MCxQfHxOdCh0aGlzLHIsbyx5LE1hdGgucG93KDIsOCp5KS0xLDApO3ZhciAkPXktMSxqdD0xO2Zvcih0aGlzW28rJF09MjU1JnI7LS0kPj0wJiYoanQqPTI1Nik7KXRoaXNbbyskXT1yL2p0JjI1NTtyZXR1cm4gbyt5''@;'; put 'put ''fSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbywxLDI1NSwwKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1pLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiw2NTUzNSwwKSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCxvKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5j''@;'; put 'put ''dGlvbihyLG8seSl7cmV0dXJuIHI9K3Isbz4+Pj0wLHl8fE50KHRoaXMscixvLDIsNjU1MzUsMCksdGhpc1tvXT1yPj4+OCx0aGlzW28rMV09MjU1JnIsbysyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24ocixvLHkpe3JldHVy''@;'; put 'put ''biByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDQyOTQ5NjcyOTUsMCksdGhpc1tvKzNdPXI+Pj4yNCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbysxXT1yPj4+OCx0aGlzW29dPTI1NSZyLG8rNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCw0Mjk0OTY3Mjk1LDApLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRoaXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rp''@;'; put 'put ''b24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD0wLGp0PTEsXz0wO2Zvcih0aGlzW29dPTI1NSZyOysrJDx5JiYoanQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW28rJC0xXSYmKF89MSks''@;'; put 'put ''dGhpc1tvKyRdPShyL2p0fDApLV8mMjU1O3JldHVybiBvK3l9LGkucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24ocixvLHksUCl7aWYocj0rcixvPj4+PTAsIVApe3ZhciBLPU1hdGgucG93KDIsOCp5LTEpO050KHRoaXMscixvLHksSy0xLC1LKX12YXIgJD15LTEsanQ9MSxfPTA7Zm9y''@;'; put 'put ''KHRoaXNbbyskXT0yNTUmcjstLSQ+PTAmJihqdCo9MjU2KTspcjwwJiYwPT09XyYmMCE9PXRoaXNbbyskKzFdJiYoXz0xKSx0aGlzW28rJF09KHIvanR8MCktXyYyNTU7cmV0dXJuIG8reX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAs''@;'; put 'put ''eXx8TnQodGhpcyxyLG8sMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlzW29dPTI1NSZyLG8rMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109MjU1''@;'; put 'put ''JnIsdGhpc1tvKzFdPXI+Pj44LG8rMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sMiwzMjc2NywtMzI3NjgpLHRoaXNbb109cj4+PjgsdGhpc1tvKzFdPTI1NSZyLG8rMn0saS5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVJbnQzMkxFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gcj0rcixvPj4+PTAseXx8TnQodGhpcyxyLG8sNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW29dPTI1NSZyLHRoaXNbbysxXT1yPj4+OCx0aGlzW28rMl09cj4+PjE2LHRoaXNbbyszXT1yPj4+MjQsbys0fSxpLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiByPStyLG8+Pj49MCx5fHxOdCh0aGlzLHIsbyw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbb109cj4+PjI0LHRoaXNbbysxXT1yPj4+MTYsdGhpc1tvKzJdPXI+Pj44LHRo''@;'; put 'put ''aXNbbyszXT0yNTUmcixvKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIG9uKHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixvLHkpe3JldHVybiBvbih0aGlzLHIsbywhMSx5KX0saS5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLG8seSl7cmV0dXJuIEd0KHRoaXMscixvLCEwLHkpfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsbyx5KXtyZXR1cm4gR3QodGhpcyxyLG8sITEseSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixvLHksUCl7aWYoIWku''@;'; put 'put ''aXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoeXx8KHk9MCksIVAmJjAhPT1QJiYoUD10aGlzLmxlbmd0aCksbz49ci5sZW5ndGgmJihvPXIubGVuZ3RoKSxvfHwobz0wKSxQPjAmJlA8eSYmKFA9eSksUD09PXl8fDA9PT1y''@;'; put 'put ''Lmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKG88MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKHk8MHx8eT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKFA8MCl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtQPnRoaXMubGVuZ3RoJiYoUD10aGlzLmxlbmd0aCksci5sZW5ndGgtbzxQLXkmJihQPXIubGVuZ3RoLW8reSk7dmFyIEs9UC15O3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKG8seSxQKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkoeSxQKSxvKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsbyx5LFApe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBvPyhQPW8sbz0wLHk9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgeSYmKFA9eSx5PXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1QJiYic3RyaW5nIiE9dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgUCYmIWkuaXNFbmNvZGluZyhQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1ApO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1QJiZLPDEyOHx8ImxhdGluMSI9PT1QKSYmKHI9Syl9fWVs''@;'; put 'put ''c2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYobzwwfHx0aGlzLmxlbmd0aDxvfHx0aGlzLmxlbmd0aDx5KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih5PD1vKXJldHVybiB0aGlzO3Zh''@;'; put 'put ''ciAkO2lmKG8+Pj49MCx5PXZvaWQgMD09PXk/dGhpcy5sZW5ndGg6eT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPW87JDx5OysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIganQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLFApLF89anQubGVuZ3RoO2lmKDA9PT1fKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8eS1vOysrJCl0aGlzWyQrb109anRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHVuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gcm4oaCxyKXtyPXJ8''@;'; put 'put ''fDEvMDtmb3IodmFyIG8seT1oLmxlbmd0aCxQPW51bGwsSz1bXSwkPTA7JDx5OysrJCl7aWYoKG89aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmbzw1NzM0NCl7aWYoIVApe2lmKG8+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigkKzE9PT15KXsoci09''@;'; put 'put ''Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9UD1vO2NvbnRpbnVlfWlmKG88NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSxQPW87Y29udGludWV9bz02NTUzNisoUC01NTI5Njw8MTB8by01NjMyMCl9ZWxzZSBQJiYoci09Myk+LTEmJksucHVzaCgyMzks''@;'; put 'put ''MTkxLDE4OSk7aWYoUD1udWxsLG88MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1c2gobyl9ZWxzZSBpZihvPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChvPj42fDE5Miw2MyZvfDEyOCl9ZWxzZSBpZihvPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1c2gobz4+MTJ8MjI0''@;'; put 'put ''LG8+PjYmNjN8MTI4LDYzJm98MTI4KX1lbHNle2lmKCEobzwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChvPj4xOHwyNDAsbz4+MTImNjN8MTI4LG8+PjYmNjN8MTI4LDYzJm98MTI4KX19cmV0dXJuIEt9ZnVu''@;'; put 'put ''Y3Rpb24gZG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24geW4oaCl7aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZSh1biwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofShoKSl9ZnVuY3Rpb24g''@;'; put 'put ''c24oaCxyLG8seSl7Zm9yKHZhciBQPTA7UDx5JiYhKFArbz49ci5sZW5ndGh8fFA+PWgubGVuZ3RoKTsrK1ApcltQK29dPWhbUF07cmV0dXJuIFB9ZnVuY3Rpb24gX3QoaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3ImJm51bGwhPWguY29u''@;'; put 'put ''c3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0aW9uIG1uKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxvPTA7bzwxNjsrK28pZm9yKHZhciB5PTE2Km8sUD0w''@;'; put 'put ''O1A8MTY7KytQKXJbeStQXT1oW29dK2hbUF07cmV0dXJuIHJ9KCl9LDIyMDIwOihjLGwpPT57bC5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsYSl7dmFyIHUsZixpPTgqYS1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyxtPWU/YS0xOjAsRT1lPy0xOjEsZz10W24rbV07Zm9yKG0rPUUsdT1nJigx''@;'; put 'put ''PDwtZCktMSxnPj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24rbV0sbSs9RSxkLT04KTtmb3IoZj11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7Zj0yNTYqZit0W24rbV0sbSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBmP05hTjoxLzAqKGc/LTE6MSk7''@;'; put 'put ''Zis9TWF0aC5wb3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmYqTWF0aC5wb3coMix1LXMpfSxsLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsYSx1KXt2YXIgZixpLHYscD04KnUtYS0xLGQ9KDE8PHApLTEsbT1kPj4xLEU9MjM9PT1hP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6''@;'; put 'put ''MCxnPXM/MDp1LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGY9ZCk6KGY9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1mKSk8MSYmKGYt''@;'; put 'put ''LSx2Kj0yKSwobis9ZittPj0xP0UvdjpFKk1hdGgucG93KDIsMS1tKSkqdj49MiYmKGYrKyx2Lz0yKSxmK20+PWQ/KGk9MCxmPWQpOmYrbT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsYSksZis9bSk6KGk9bipNYXRoLnBvdygyLG0tMSkqTWF0aC5wb3coMixhKSxmPTApKTthPj04O3RbZStn''@;'; put 'put ''XT0yNTUmaSxnKz1ELGkvPTI1NixhLT04KTtmb3IoZj1mPDxhfGkscCs9YTtwPjA7dFtlK2ddPTI1NSZmLGcrPUQsZi89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDk2OTM1OigpPT57InVzZSBzdHJpY3QiO2NvbnN0IGM9Z2xvYmFsVGhpcztmdW5jdGlvbiBsKFMpe3JldHVybihjLl9f''@;'; put 'put ''Wm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIikrU31jb25zdCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iscz1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdT1PYmplY3QuY3JlYXRlLGY9QXJyYXkucHJvdG90eXBlLnNs''@;'; put 'put ''aWNlLGk9ImFkZEV2ZW50TGlzdGVuZXIiLHY9InJlbW92ZUV2ZW50TGlzdGVuZXIiLHA9bChpKSxkPWwodiksbT0idHJ1ZSIsRT0iZmFsc2UiLGc9bCgiIik7ZnVuY3Rpb24gRChTLFIpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChTLFIpfWZ1bmN0aW9uIEYoUyxSLEIsTyxOKXtyZXR1cm4g''@;'; put 'put ''Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKFMsUixCLE8sTil9Y29uc3QgeD1sLHc9dHlwZW9mIHdpbmRvdzwidSIsQz13P3dpbmRvdzp2b2lkIDAsST13JiZDfHxnbG9iYWxUaGlzLE09InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gVChTLFIpe2ZvcihsZXQgQj1TLmxlbmd0aC0x''@;'; put 'put ''O0I+PTA7Qi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBTW0JdJiYoU1tCXT1EKFNbQl0sUisiXyIrQikpO3JldHVybiBTfWZ1bmN0aW9uIEwoUyl7cmV0dXJuIVN8fCExIT09Uy53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgUy5nZXQmJnR5cGVvZiBTLnNldD4idSIpfWNvbnN0IFU9dHlw''@;'; put 'put ''ZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFo9ISgibnciaW4gSSkmJnR5cGVvZiBJLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT1JLnByb2Nlc3MudG9TdHJpbmcoKSxudD0hWiYmIVUmJiEoIXd8fCFDLkhUTUxF''@;'; put 'put ''bGVtZW50KSx0dD10eXBlb2YgSS5wcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09SS5wcm9jZXNzLnRvU3RyaW5nKCkmJiFVJiYhKCF3fHwhQy5IVE1MRWxlbWVudCkseXQ9e30sbXQ9eCgiZW5hYmxlX2JlZm9yZXVubG9hZCIpLHE9ZnVuY3Rpb24oUyl7aWYoIShTPVN8fEkuZXZl''@;'; put 'put ''bnQpKXJldHVybjtsZXQgUj15dFtTLnR5cGVdO1J8fChSPXl0W1MudHlwZV09eCgiT05fUFJPUEVSVFkiK1MudHlwZSkpO2NvbnN0IEI9dGhpc3x8Uy50YXJnZXR8fEksTz1CW1JdO2xldCBOO3JldHVybiBudCYmQj09PUMmJiJlcnJvciI9PT1TLnR5cGU/KE49TyYmTy5jYWxsKHRoaXMsUy5t''@;'; put 'put ''ZXNzYWdlLFMuZmlsZW5hbWUsUy5saW5lbm8sUy5jb2xubyxTLmVycm9yKSwhMD09PU4mJlMucHJldmVudERlZmF1bHQoKSk6KE49TyYmTy5hcHBseSh0aGlzLGFyZ3VtZW50cyksImJlZm9yZXVubG9hZCI9PT1TLnR5cGUmJklbbXRdJiYic3RyaW5nIj09dHlwZW9mIE4/Uy5yZXR1cm5WYWx1''@;'; put 'put ''ZT1OOm51bGwhPU4mJiFOJiZTLnByZXZlbnREZWZhdWx0KCkpLE59O2Z1bmN0aW9uIFgoUyxSLEIpe2xldCBPPWUoUyxSKTtpZighTyYmQiYmZShCLFIpJiYoTz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSwhT3x8IU8uY29uZmlndXJhYmxlKXJldHVybjtjb25zdCBOPXgoIm9u''@;'; put 'put ''IitSKyJwYXRjaGVkIik7aWYoUy5oYXNPd25Qcm9wZXJ0eShOKSYmU1tOXSlyZXR1cm47ZGVsZXRlIE8ud3JpdGFibGUsZGVsZXRlIE8udmFsdWU7Y29uc3QgSj1PLmdldCxvdD1PLnNldCxzdD1SLnNsaWNlKDIpO2xldCBsdD15dFtzdF07bHR8fChsdD15dFtzdF09eCgiT05fUFJPUEVSVFki''@;'; put 'put ''K3N0KSksTy5zZXQ9ZnVuY3Rpb24oU3Qpe2xldCBydD10aGlzOyFydCYmUz09PUkmJihydD1JKSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtsdF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoc3QscSksb3QmJm90LmNhbGwocnQsbnVsbCkscnRbbHRdPVN0LCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTdCYmcnQuYWRkRXZlbnRMaXN0ZW5lcihzdCxxLCExKSl9LE8uZ2V0PWZ1bmN0aW9uKCl7bGV0IFN0PXRoaXM7aWYoIVN0JiZTPT09SSYmKFN0PUkpLCFTdClyZXR1cm4gbnVsbDtjb25zdCBydD1TdFtsdF07aWYocnQpcmV0dXJuIHJ0O2lmKEope2xldCB4dD1KLmNhbGwodGhpcyk7aWYo''@;'; put 'put ''eHQpcmV0dXJuIE8uc2V0LmNhbGwodGhpcyx4dCksImZ1bmN0aW9uIj09dHlwZW9mIFN0W01dJiZTdC5yZW1vdmVBdHRyaWJ1dGUoUikseHR9cmV0dXJuIG51bGx9LHMoUyxSLE8pLFNbTl09ITB9ZnVuY3Rpb24gZXQoUyxSLEIpe2lmKFIpZm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspWChT''@;'; put 'put ''LCJvbiIrUltPXSxCKTtlbHNle2NvbnN0IE89W107Zm9yKGNvbnN0IE4gaW4gUykib24iPT1OLnNsaWNlKDAsMikmJk8ucHVzaChOKTtmb3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKylYKFMsT1tOXSxCKX19Y29uc3QgVj14KCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gZnQoUyl7Y29u''@;'; put 'put ''c3QgUj1JW1NdO2lmKCFSKXJldHVybjtJW3goUyldPVIsSVtTXT1mdW5jdGlvbigpe2NvbnN0IE49VChhcmd1bWVudHMsUyk7c3dpdGNoKE4ubGVuZ3RoKXtjYXNlIDA6dGhpc1tWXT1uZXcgUjticmVhaztjYXNlIDE6dGhpc1tWXT1uZXcgUihOWzBdKTticmVhaztjYXNlIDI6dGhpc1tWXT1u''@;'; put 'put ''ZXcgUihOWzBdLE5bMV0pO2JyZWFrO2Nhc2UgMzp0aGlzW1ZdPW5ldyBSKE5bMF0sTlsxXSxOWzJdKTticmVhaztjYXNlIDQ6dGhpc1tWXT1uZXcgUihOWzBdLE5bMV0sTlsyXSxOWzNdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxPdChJ''@;'; put 'put ''W1NdLFIpO2NvbnN0IEI9bmV3IFIoZnVuY3Rpb24oKXt9KTtsZXQgTztmb3IoTyBpbiBCKSJYTUxIdHRwUmVxdWVzdCI9PT1TJiYicmVzcG9uc2VCbG9iIj09PU98fGZ1bmN0aW9uKE4peyJmdW5jdGlvbiI9PXR5cGVvZiBCW05dP0lbU10ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXNbVl1bTl0uYXBwbHkodGhpc1tWXSxhcmd1bWVudHMpfTpzKElbU10ucHJvdG90eXBlLE4se3NldDpmdW5jdGlvbihKKXsiZnVuY3Rpb24iPT10eXBlb2YgSj8odGhpc1tWXVtOXT1EKEosUysiLiIrTiksT3QodGhpc1tWXVtOXSxKKSk6dGhpc1tWXVtOXT1KfSxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpc1tWXVtOXX19KX0oTyk7Zm9yKE8gaW4gUikicHJvdG90eXBlIiE9PU8mJlIuaGFzT3duUHJvcGVydHkoTykmJihJW1NdW09dPVJbT10pfWZ1bmN0aW9uIGR0KFMsUixCKXtsZXQgTz1TO2Zvcig7TyYmIU8uaGFzT3duUHJvcGVydHkoUik7KU89YShPKTshTyYmU1tSXSYm''@;'; put 'put ''KE89Uyk7Y29uc3QgTj14KFIpO2xldCBKPW51bGw7aWYoTyYmKCEoSj1PW05dKXx8IU8uaGFzT3duUHJvcGVydHkoTikpJiYoSj1PW05dPU9bUl0sTChPJiZlKE8sUikpKSl7Y29uc3Qgc3Q9QihKLE4sUik7T1tSXT1mdW5jdGlvbigpe3JldHVybiBzdCh0aGlzLGFyZ3VtZW50cyl9LE90KE9b''@;'; put 'put ''Ul0sSil9cmV0dXJuIEp9ZnVuY3Rpb24gYnQoUyxSLEIpe2xldCBPPW51bGw7ZnVuY3Rpb24gTihKKXtjb25zdCBvdD1KLmRhdGE7cmV0dXJuIG90LmFyZ3Nbb3QuY2JJZHhdPWZ1bmN0aW9uKCl7Si5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxPLmFwcGx5KG90LnRhcmdldCxvdC5h''@;'; put 'put ''cmdzKSxKfU89ZHQoUyxSLEo9PmZ1bmN0aW9uKG90LHN0KXtjb25zdCBsdD1CKG90LHN0KTtyZXR1cm4gbHQuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBzdFtsdC5jYklkeF0/RihsdC5uYW1lLHN0W2x0LmNiSWR4XSxsdCxOKTpKLmFwcGx5KG90LHN0KX0pfWZ1bmN0aW9uIE90KFMs''@;'; put 'put ''Uil7U1t4KCJPcmlnaW5hbERlbGVnYXRlIildPVJ9bGV0IE50PSExLFl0PSExO2Z1bmN0aW9uIEd0KCl7aWYoTnQpcmV0dXJuIFl0O050PSEwO3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDsoLTEhPT1TLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Uy5pbmRleE9mKCJUcmlkZW50''@;'; put 'put ''LyIpfHwtMSE9PVMuaW5kZXhPZigiRWRnZS8iKSkmJihZdD0hMCl9Y2F0Y2h7fXJldHVybiBZdH1mdW5jdGlvbiB1bihTKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU31mdW5jdGlvbiB5bihTKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFN9bGV0IHJuPSExO2lmKHR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiKXRyeXtjb25zdCBTPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JuPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixTLFMpfWNhdGNoe3JuPSExfWNv''@;'; put 'put ''bnN0IHhuPXt1c2VHOiEwfSxxdD17fSxkbj17fSxzbj1uZXcgUmVnRXhwKCJeIitnKyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksX3Q9eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gbW4oUyxSKXtjb25zdCBCPShSP1IoUyk6UykrRSxPPShSP1IoUyk6UykrbSxOPWcrQixKPWcrTztx''@;'; put 'put ''dFtTXT17fSxxdFtTXVtFXT1OLHF0W1NdW21dPUp9ZnVuY3Rpb24gVG4oUyxSLEIsTyl7Y29uc3QgTj1PJiZPLmFkZHx8aSxKPU8mJk8ucm18fHYsb3Q9TyYmTy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsc3Q9TyYmTy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsbHQ9eChOKSxT''@;'; put 'put ''dD0iLiIrTisiOiIscnQ9InByZXBlbmRMaXN0ZW5lciIseHQ9Ii4iK3J0KyI6IixEdD1mdW5jdGlvbih2dCxZLGt0KXtpZih2dC5pc1JlbW92ZWQpcmV0dXJuO2NvbnN0IEx0PXZ0LmNhbGxiYWNrO2xldCBYdDsib2JqZWN0Ij09dHlwZW9mIEx0JiZMdC5oYW5kbGVFdmVudCYmKHZ0LmNhbGxi''@;'; put 'put ''YWNrPXV0PT5MdC5oYW5kbGVFdmVudCh1dCksdnQub3JpZ2luYWxEZWxlZ2F0ZT1MdCk7dHJ5e3Z0Lmludm9rZSh2dCxZLFtrdF0pfWNhdGNoKHV0KXtYdD11dH1jb25zdCBLdD12dC5vcHRpb25zO3JldHVybiBLdCYmIm9iamVjdCI9PXR5cGVvZiBLdCYmS3Qub25jZSYmWVtKXS5jYWxsKFks''@;'; put 'put ''a3QudHlwZSx2dC5vcmlnaW5hbERlbGVnYXRlP3Z0Lm9yaWdpbmFsRGVsZWdhdGU6dnQuY2FsbGJhY2ssS3QpLFh0fTtmdW5jdGlvbiBCdCh2dCxZLGt0KXtpZighKFk9WXx8Uy5ldmVudCkpcmV0dXJuO2NvbnN0IEx0PXZ0fHxZLnRhcmdldHx8UyxYdD1MdFtxdFtZLnR5cGVdW2t0P206RV1d''@;'; put 'put ''O2lmKFh0KXtjb25zdCBLdD1bXTtpZigxPT09WHQubGVuZ3RoKXtjb25zdCB1dD1EdChYdFswXSxMdCxZKTt1dCYmS3QucHVzaCh1dCl9ZWxzZXtjb25zdCB1dD1YdC5zbGljZSgpO2ZvcihsZXQgV3Q9MDtXdDx1dC5sZW5ndGgmJighWXx8ITAhPT1ZW190XSk7V3QrKyl7Y29uc3QgSXQ9RHQo''@;'; put 'put ''dXRbV3RdLEx0LFkpO0l0JiZLdC5wdXNoKEl0KX19aWYoMT09PUt0Lmxlbmd0aCl0aHJvdyBLdFswXTtmb3IobGV0IHV0PTA7dXQ8S3QubGVuZ3RoO3V0Kyspe2NvbnN0IFd0PUt0W3V0XTtSLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpPT57dGhyb3cgV3R9KX19fWNvbnN0IEh0PWZ1bmN0''@;'; put 'put ''aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMSl9LHRuPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMCl9O2Z1bmN0aW9uIG5uKHZ0LFkpe2lmKCF2dClyZXR1cm4hMTtsZXQga3Q9ITA7WSYmdm9pZCAwIT09WS51c2VHJiYoa3Q9WS51c2VHKTtjb25zdCBMdD1ZJiZZLnZoO2xl''@;'; put 'put ''dCBYdD0hMDtZJiZ2b2lkIDAhPT1ZLmNoa0R1cCYmKFh0PVkuY2hrRHVwKTtsZXQgS3Q9ITE7WSYmdm9pZCAwIT09WS5ydCYmKEt0PVkucnQpO2xldCB1dD12dDtmb3IoO3V0JiYhdXQuaGFzT3duUHJvcGVydHkoTik7KXV0PWEodXQpO2lmKCF1dCYmdnRbTl0mJih1dD12dCksIXV0fHx1dFts''@;'; put 'put ''dF0pcmV0dXJuITE7Y29uc3QgV3Q9WSYmWS5ldmVudE5hbWVUb1N0cmluZyxJdD17fSxUdD11dFtsdF09dXRbTl0sZ3Q9dXRbeChKKV09dXRbSl0sUHQ9dXRbeChvdCldPXV0W290XSxlbj11dFt4KHN0KV09dXRbc3RdO2xldCBKdDtZJiZZLnByZXBlbmQmJihKdD11dFt4KFkucHJlcGVuZCld''@;'; put 'put ''PXV0W1kucHJlcGVuZF0pO2NvbnN0IFp0PWt0P2Z1bmN0aW9uKGspe2lmKCFJdC5pc0V4aXN0aW5nKXJldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsSXQuY2FwdHVyZT90bjpIdCxJdC5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIFR0LmNhbGwoSXQudGFyZ2V0LEl0''@;'; put 'put ''LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3Q9a3Q/ZnVuY3Rpb24oayl7aWYoIWsuaXNSZW1vdmVkKXtjb25zdCBHPXF0W2suZXZlbnROYW1lXTtsZXQgcHQ7RyYmKHB0PUdbay5jYXB0dXJlP206RV0pO2NvbnN0IE10PXB0JiZrLnRhcmdldFtwdF07aWYoTXQpZm9yKGxldCBj''@;'; put 'put ''dD0wO2N0PE10Lmxlbmd0aDtjdCsrKWlmKE10W2N0XT09PWspe010LnNwbGljZShjdCwxKSxrLmlzUmVtb3ZlZD0hMCxrLnJlbW92ZUFib3J0TGlzdGVuZXImJihrLnJlbW92ZUFib3J0TGlzdGVuZXIoKSxrLnJlbW92ZUFib3J0TGlzdGVuZXI9bnVsbCksMD09PU10Lmxlbmd0aCYmKGsuYWxs''@;'; put 'put ''UmVtb3ZlZD0hMCxrLnRhcmdldFtwdF09bnVsbCk7YnJlYWt9fWlmKGsuYWxsUmVtb3ZlZClyZXR1cm4gZ3QuY2FsbChrLnRhcmdldCxrLmV2ZW50TmFtZSxrLmNhcHR1cmU/dG46SHQsay5vcHRpb25zKX06ZnVuY3Rpb24oayl7cmV0dXJuIGd0LmNhbGwoay50YXJnZXQsay5ldmVudE5hbWUs''@;'; put 'put ''ay5pbnZva2Usay5vcHRpb25zKX0sdm49WSYmWS5kaWZmP1kuZGlmZjpmdW5jdGlvbihrLEcpe2NvbnN0IHB0PXR5cGVvZiBHO3JldHVybiJmdW5jdGlvbiI9PT1wdCYmay5jYWxsYmFjaz09PUd8fCJvYmplY3QiPT09cHQmJmsub3JpZ2luYWxEZWxlZ2F0ZT09PUd9LHBuPVpvbmVbeCgiVU5Q''@;'; put 'put ''QVRDSEVEX0VWRU5UUyIpXSxjbj1TW3goIlBBU1NJVkVfRVZFTlRTIildLFc9ZnVuY3Rpb24oayxHLHB0LE10LGN0PSExLHd0PSExKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBSdD10aGlzfHxTO2xldCBGdD1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEZ0PVkudHJh''@;'; put 'put ''bnNmZXJFdmVudE5hbWUoRnQpKTtsZXQgJHQ9YXJndW1lbnRzWzFdO2lmKCEkdClyZXR1cm4gay5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoWiYmInVuY2F1Z2h0RXhjZXB0aW9uIj09PUZ0KXJldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgVXQ9ITE7aWYoImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mICR0KXtpZighJHQuaGFuZGxlRXZlbnQpcmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpO1V0PSEwfWlmKEx0JiYhTHQoaywkdCxSdCxhcmd1bWVudHMpKXJldHVybjtjb25zdCBFbj1ybiYmISFjbiYmLTEhPT1jbi5pbmRleE9mKEZ0KSxsbj1mdW5jdGlvbiB6KGspe2lmKCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgayYmbnVsbCE9PWspe2NvbnN0IEc9ey4uLmt9O3JldHVybiBrLnNpZ25hbCYmKEcuc2lnbmFsPWsuc2lnbmFsKSxHfXJldHVybiBrfShmdW5jdGlvbiBBdChrLEcpe3JldHVybiFybiYmIm9iamVjdCI9PXR5cGVvZiBrJiZrPyEhay5jYXB0dXJlOnJuJiZHPyJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIGs/e2NhcHR1cmU6ayxwYXNzaXZlOiEwfTprPyJvYmplY3QiPT10eXBlb2YgayYmITEhPT1rLnBhc3NpdmU/ey4uLmsscGFzc2l2ZTohMH06azp7cGFzc2l2ZTohMH06a30oYXJndW1lbnRzWzJdLEVuKSksU249bG4/LnNpZ25hbDtpZihTbj8uYWJvcnRlZClyZXR1cm47''@;'; put 'put ''aWYocG4pZm9yKGxldCBobj0wO2huPHBuLmxlbmd0aDtobisrKWlmKEZ0PT09cG5baG5dKXJldHVybiBFbj9rLmNhbGwoUnQsRnQsJHQsbG4pOmsuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnN0IEFuPSEhbG4mJigiYm9vbGVhbiI9PXR5cGVvZiBsbnx8bG4uY2FwdHVyZSksRm49ISghbG58''@;'; put 'put ''fCJvYmplY3QiIT10eXBlb2YgbG4pJiZsbi5vbmNlLEJuPVpvbmUuY3VycmVudDtsZXQgd249cXRbRnRdO3dufHwobW4oRnQsV3QpLHduPXF0W0Z0XSk7Y29uc3QgRG49d25bQW4/bTpFXTtsZXQgSW4sT249UnRbRG5dLGJuPSExO2lmKE9uKXtpZihibj0hMCxYdClmb3IobGV0IGhuPTA7aG48''@;'; put 'put ''T24ubGVuZ3RoO2huKyspaWYodm4oT25baG5dLCR0KSlyZXR1cm59ZWxzZSBPbj1SdFtEbl09W107Y29uc3Qgam49UnQuY29uc3RydWN0b3IubmFtZSxDbj1kbltqbl07Q24mJihJbj1DbltGdF0pLElufHwoSW49am4rRysoV3Q/V3QoRnQpOkZ0KSksSXQub3B0aW9ucz1sbixGbiYmKEl0Lm9w''@;'; put 'put ''dGlvbnMub25jZT0hMSksSXQudGFyZ2V0PVJ0LEl0LmNhcHR1cmU9QW4sSXQuZXZlbnROYW1lPUZ0LEl0LmlzRXhpc3Rpbmc9Ym47Y29uc3QgUG49a3Q/eG46dm9pZCAwO1BuJiYoUG4udGFza0RhdGE9SXQpLFNuJiYoSXQub3B0aW9ucy5zaWduYWw9dm9pZCAwKTtjb25zdCBmbj1Cbi5zY2hl''@;'; put 'put ''ZHVsZUV2ZW50VGFzayhJbiwkdCxQbixwdCxNdCk7aWYoU24pe0l0Lm9wdGlvbnMuc2lnbmFsPVNuO2NvbnN0IGhuPSgpPT5mbi56b25lLmNhbmNlbFRhc2soZm4pO2suY2FsbChTbiwiYWJvcnQiLGhuLHtvbmNlOiEwfSksZm4ucmVtb3ZlQWJvcnRMaXN0ZW5lcj0oKT0+U24ucmVtb3ZlRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiYWJvcnQiLGhuKX1yZXR1cm4gSXQudGFyZ2V0PW51bGwsUG4mJihQbi50YXNrRGF0YT1udWxsKSxGbiYmKEl0Lm9wdGlvbnMub25jZT0hMCksIXJuJiYiYm9vbGVhbiI9PXR5cGVvZiBmbi5vcHRpb25zfHwoZm4ub3B0aW9ucz1sbiksZm4udGFyZ2V0PVJ0LGZuLmNhcHR1''@;'; put 'put ''cmU9QW4sZm4uZXZlbnROYW1lPUZ0LFV0JiYoZm4ub3JpZ2luYWxEZWxlZ2F0ZT0kdCksd3Q/T24udW5zaGlmdChmbik6T24ucHVzaChmbiksY3Q/UnQ6dm9pZCAwfX07cmV0dXJuIHV0W05dPVcoVHQsU3QsWnQsQ3QsS3QpLEp0JiYodXRbcnRdPVcoSnQseHQsZnVuY3Rpb24oayl7cmV0dXJu''@;'; put 'put ''IEp0LmNhbGwoSXQudGFyZ2V0LEl0LmV2ZW50TmFtZSxrLmludm9rZSxJdC5vcHRpb25zKX0sQ3QsS3QsITApKSx1dFtKXT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShH''@;'; put 'put ''KSk7Y29uc3QgcHQ9YXJndW1lbnRzWzJdLE10PSEhcHQmJigiYm9vbGVhbiI9PXR5cGVvZiBwdHx8cHQuY2FwdHVyZSksY3Q9YXJndW1lbnRzWzFdO2lmKCFjdClyZXR1cm4gZ3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKEx0JiYhTHQoZ3QsY3Qsayxhcmd1bWVudHMpKXJldHVybjtjb25z''@;'; put 'put ''dCB3dD1xdFtHXTtsZXQgUnQ7d3QmJihSdD13dFtNdD9tOkVdKTtjb25zdCBGdD1SdCYma1tSdF07aWYoRnQpZm9yKGxldCAkdD0wOyR0PEZ0Lmxlbmd0aDskdCsrKXtjb25zdCBVdD1GdFskdF07aWYodm4oVXQsY3QpKXJldHVybiBGdC5zcGxpY2UoJHQsMSksVXQuaXNSZW1vdmVkPSEwLDAh''@;'; put 'put ''PT1GdC5sZW5ndGh8fChVdC5hbGxSZW1vdmVkPSEwLGtbUnRdPW51bGwsTXR8fCJzdHJpbmciIT10eXBlb2YgRyl8fChrW2crIk9OX1BST1BFUlRZIitHXT1udWxsKSxVdC56b25lLmNhbmNlbFRhc2soVXQpLEt0P2s6dm9pZCAwfXJldHVybiBndC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHV0''@;'; put 'put ''W290XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07WSYmWS50cmFuc2ZlckV2ZW50TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9W10sTXQ9aChrLFd0P1d0KEcpOkcpO2ZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7Y3QrKyl7''@;'; put 'put ''Y29uc3Qgd3Q9TXRbY3RdO3B0LnB1c2god3Qub3JpZ2luYWxEZWxlZ2F0ZT93dC5vcmlnaW5hbERlbGVnYXRlOnd0LmNhbGxiYWNrKX1yZXR1cm4gcHR9LHV0W3N0XT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpc3x8UztsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7WSYmWS50cmFuc2ZlckV2ZW50''@;'; put 'put ''TmFtZSYmKEc9WS50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgcHQ9cXRbR107aWYocHQpe2NvbnN0IHd0PWtbcHRbRV1dLFJ0PWtbcHRbbV1dO2lmKHd0KXtjb25zdCBGdD13dC5zbGljZSgpO2ZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNb''@;'; put 'put ''Sl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX1pZihSdCl7Y29uc3QgRnQ9UnQuc2xpY2UoKTtmb3IobGV0ICR0PTA7JHQ8RnQubGVuZ3RoOyR0Kyspe2NvbnN0IFV0PUZ0WyR0XTt0aGlzW0pdLmNh''@;'; put 'put ''bGwodGhpcyxHLFV0Lm9yaWdpbmFsRGVsZWdhdGU/VXQub3JpZ2luYWxEZWxlZ2F0ZTpVdC5jYWxsYmFjayxVdC5vcHRpb25zKX19fX1lbHNle2NvbnN0IHB0PU9iamVjdC5rZXlzKGspO2ZvcihsZXQgTXQ9MDtNdDxwdC5sZW5ndGg7TXQrKyl7Y29uc3Qgd3Q9c24uZXhlYyhwdFtNdF0pO2xl''@;'; put 'put ''dCBSdD13dCYmd3RbMV07UnQmJiJyZW1vdmVMaXN0ZW5lciIhPT1SdCYmdGhpc1tzdF0uY2FsbCh0aGlzLFJ0KX10aGlzW3N0XS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoS3QpcmV0dXJuIHRoaXN9LE90KHV0W05dLFR0KSxPdCh1dFtKXSxndCksZW4mJk90KHV0W3N0XSxlbiks''@;'; put 'put ''UHQmJk90KHV0W290XSxQdCksITB9bGV0IFZ0PVtdO2ZvcihsZXQgdnQ9MDt2dDxCLmxlbmd0aDt2dCsrKVZ0W3Z0XT1ubihCW3Z0XSxPKTtyZXR1cm4gVnR9ZnVuY3Rpb24gaChTLFIpe2lmKCFSKXtjb25zdCBKPVtdO2ZvcihsZXQgb3QgaW4gUyl7Y29uc3Qgc3Q9c24uZXhlYyhvdCk7bGV0''@;'; put 'put ''IGx0PXN0JiZzdFsxXTtpZihsdCYmKCFSfHxsdD09PVIpKXtjb25zdCBTdD1TW290XTtpZihTdClmb3IobGV0IHJ0PTA7cnQ8U3QubGVuZ3RoO3J0KyspSi5wdXNoKFN0W3J0XSl9fXJldHVybiBKfWxldCBCPXF0W1JdO0J8fChtbihSKSxCPXF0W1JdKTtjb25zdCBPPVNbQltFXV0sTj1TW0Jb''@;'; put 'put ''bV1dO3JldHVybiBPP04/Ty5jb25jYXQoTik6Ty5zbGljZSgpOk4/Ti5zbGljZSgpOltdfWZ1bmN0aW9uIHIoUyxSKXtjb25zdCBCPVMuRXZlbnQ7QiYmQi5wcm90b3R5cGUmJlIucGF0Y2hNZXRob2QoQi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsTz0+ZnVuY3Rpb24o''@;'; put 'put ''TixKKXtOW190XT0hMCxPJiZPLmFwcGx5KE4sSil9KX1jb25zdCB5PXgoInpvbmVUYXNrIik7ZnVuY3Rpb24gUChTLFIsQixPKXtsZXQgTj1udWxsLEo9bnVsbDtCKz1PO2NvbnN0IG90PXt9O2Z1bmN0aW9uIHN0KFN0KXtjb25zdCBydD1TdC5kYXRhO3J0LmFyZ3NbMF09ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gU3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y29uc3QgeHQ9Ti5hcHBseShTLHJ0LmFyZ3MpO3JldHVybiB5bih4dCk/cnQuaGFuZGxlSWQ9eHQ6KHJ0LmhhbmRsZT14dCxydC5pc1JlZnJlc2hhYmxlPXVuKHh0LnJlZnJlc2gpKSxTdH1mdW5jdGlvbiBsdChTdCl7Y29u''@;'; put 'put ''c3R7aGFuZGxlOnJ0LGhhbmRsZUlkOnh0fT1TdC5kYXRhO3JldHVybiBKLmNhbGwoUyxydD8/eHQpfU49ZHQoUyxSKz1PLFN0PT5mdW5jdGlvbihydCx4dCl7aWYodW4oeHRbMF0pKXtjb25zdCBEdD17aXNSZWZyZXNoYWJsZTohMSxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1PLGRlbGF5OiJU''@;'; put 'put ''aW1lb3V0Ij09PU98fCJJbnRlcnZhbCI9PT1PP3h0WzFdfHwwOnZvaWQgMCxhcmdzOnh0fSxCdD14dFswXTt4dFswXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gQnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Y29uc3R7aGFuZGxlOmt0LGhhbmRsZUlkOkx0LGlzUGVyaW9kaWM6WHQs''@;'; put 'put ''aXNSZWZyZXNoYWJsZTpLdH09RHQ7IVh0JiYhS3QmJihMdD9kZWxldGUgb3RbTHRdOmt0JiYoa3RbeV09bnVsbCkpfX07Y29uc3QgSHQ9RihSLHh0WzBdLER0LHN0LGx0KTtpZighSHQpcmV0dXJuIEh0O2NvbnN0e2hhbmRsZUlkOnRuLGhhbmRsZTpubixpc1JlZnJlc2hhYmxlOlZ0LGlzUGVy''@;'; put 'put ''aW9kaWM6dnR9PUh0LmRhdGE7aWYodG4pb3RbdG5dPUh0O2Vsc2UgaWYobm4mJihublt5XT1IdCxWdCYmIXZ0KSl7Y29uc3QgWT1ubi5yZWZyZXNoO25uLnJlZnJlc2g9ZnVuY3Rpb24oKXtjb25zdHt6b25lOmt0LHN0YXRlOkx0fT1IdDtyZXR1cm4ibm90U2NoZWR1bGVkIj09PUx0PyhIdC5f''@;'; put 'put ''c3RhdGU9InNjaGVkdWxlZCIsa3QuX3VwZGF0ZVRhc2tDb3VudChIdCwxKSk6InJ1bm5pbmciPT09THQmJihIdC5fc3RhdGU9InNjaGVkdWxpbmciKSxZLmNhbGwodGhpcyl9fXJldHVybiBubj8/dG4/P0h0fXJldHVybiBTdC5hcHBseShTLHh0KX0pLEo9ZHQoUyxCLFN0PT5mdW5jdGlvbihy''@;'; put 'put ''dCx4dCl7Y29uc3QgRHQ9eHRbMF07bGV0IEJ0O3luKER0KT8oQnQ9b3RbRHRdLGRlbGV0ZSBvdFtEdF0pOihCdD1EdD8uW3ldLEJ0P0R0W3ldPW51bGw6QnQ9RHQpLEJ0Py50eXBlP0J0LmNhbmNlbEZuJiZCdC56b25lLmNhbmNlbFRhc2soQnQpOlN0LmFwcGx5KFMseHQpfSl9ZnVuY3Rpb24g''@;'; put 'put ''XyhTLFIsQil7aWYoIUJ8fDA9PT1CLmxlbmd0aClyZXR1cm4gUjtjb25zdCBPPUIuZmlsdGVyKEo9PkoudGFyZ2V0PT09Uyk7aWYoIU98fDA9PT1PLmxlbmd0aClyZXR1cm4gUjtjb25zdCBOPU9bMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUi5maWx0ZXIoSj0+LTE9PT1OLmluZGV4T2Yo''@;'; put 'put ''SikpfWZ1bmN0aW9uIEgoUyxSLEIsTyl7UyYmZXQoUyxfKFMsUixCKSxPKX1mdW5jdGlvbiBRKFMpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTKS5maWx0ZXIoUj0+Ui5zdGFydHNXaXRoKCJvbiIpJiZSLmxlbmd0aD4yKS5tYXAoUj0+Ui5zdWJzdHJpbmcoMikpfWZ1bmN0''@;'; put 'put ''aW9uIE1uKFMsUixCLE8sTil7Y29uc3QgSj1ab25lLl9fc3ltYm9sX18oTyk7aWYoUltKXSlyZXR1cm47Y29uc3Qgb3Q9UltKXT1SW09dO1JbT109ZnVuY3Rpb24oc3QsbHQsU3Qpe3JldHVybiBsdCYmbHQucHJvdG90eXBlJiZOLmZvckVhY2goZnVuY3Rpb24ocnQpe2NvbnN0IHh0PWAke0J9''@;'; put 'put ''LiR7T306OmArcnQsRHQ9bHQucHJvdG90eXBlO3RyeXtpZihEdC5oYXNPd25Qcm9wZXJ0eShydCkpe2NvbnN0IEJ0PVMuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKER0LHJ0KTtCdCYmQnQudmFsdWU/KEJ0LnZhbHVlPVMud3JhcFdpdGhDdXJyZW50Wm9uZShCdC52YWx1ZSx4dCks''@;'; put 'put ''Uy5fcmVkZWZpbmVQcm9wZXJ0eShsdC5wcm90b3R5cGUscnQsQnQpKTpEdFtydF0mJihEdFtydF09Uy53cmFwV2l0aEN1cnJlbnRab25lKER0W3J0XSx4dCkpfWVsc2UgRHRbcnRdJiYoRHRbcnRdPVMud3JhcFdpdGhDdXJyZW50Wm9uZShEdFtydF0seHQpKX1jYXRjaHt9fSksb3QuY2FsbChS''@;'; put 'put ''LHN0LGx0LFN0KX0sUy5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQoUltPXSxvdCl9Y29uc3QgUm49ZnVuY3Rpb24gbigpe2NvbnN0IFM9Z2xvYmFsVGhpcyxSPSEwPT09U1tsKCJmb3JjZUR1cGxpY2F0ZVpvbmVDaGVjayIpXTtpZihTLlpvbmUmJihSfHwiZnVuY3Rpb24iIT10eXBlb2YgUy5ab25l''@;'; put 'put ''Ll9fc3ltYm9sX18pKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gUy5ab25lPz89ZnVuY3Rpb24gdCgpe2NvbnN0IFM9Yy5wZXJmb3JtYW5jZTtmdW5jdGlvbiBSKEF0KXtTJiZTLm1hcmsmJlMubWFyayhBdCl9ZnVuY3Rpb24gQihBdCxhdCl7UyYmUy5t''@;'; put 'put ''ZWFzdXJlJiZTLm1lYXN1cmUoQXQsYXQpfVIoIlpvbmUiKTtsZXQgTz0oKCk9PntjbGFzcyBBdHtzdGF0aWN7dGhpcy5fX3N5bWJvbF9fPWx9c3RhdGljIGFzc2VydFpvbmVQYXRjaGVkKCl7aWYoYy5Qcm9taXNlIT09SXQuWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUu''@;'; put 'put ''anMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBv''@;'; put 'put ''bHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfXN0YXRpYyBnZXQgcm9vdCgpe2xldCBBPUF0LmN1cnJlbnQ7Zm9yKDtBLnBhcmVu''@;'; put 'put ''dDspQT1BLnBhcmVudDtyZXR1cm4gQX1zdGF0aWMgZ2V0IGN1cnJlbnQoKXtyZXR1cm4gZ3Quem9uZX1zdGF0aWMgZ2V0IGN1cnJlbnRUYXNrKCl7cmV0dXJuIFB0fXN0YXRpYyBfX2xvYWRfcGF0Y2goQSxqLGh0PSExKXtpZihJdC5oYXNPd25Qcm9wZXJ0eShBKSl7Y29uc3QgRXQ9ITA9PT1j''@;'; put 'put ''W2woImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKCFodCYmRXQpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK0EpfWVsc2UgaWYoIWNbIl9fWm9uZV9kaXNhYmxlXyIrQV0pe2NvbnN0IEV0PSJab25lOiIrQTtSKEV0KSxJdFtBXT1qKGMsQXQsVHQpLEIoRXQsRXQp''@;'; put 'put ''fX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWNvbnN0cnVjdG9yKEEsail7dGhpcy5fcGFyZW50PUEsdGhpcy5fbmFtZT1qP2oubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9aiYmai5wcm9wZXJ0''@;'; put 'put ''aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IEoodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVnYXRlLGopfWdldChBKXtjb25zdCBqPXRoaXMuZ2V0Wm9uZVdpdGgoQSk7aWYoailyZXR1cm4gai5fcHJvcGVydGllc1tBXX1nZXRab25lV2l0aChBKXtsZXQg''@;'; put 'put ''aj10aGlzO2Zvcig7ajspe2lmKGouX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQSkpcmV0dXJuIGo7aj1qLl9wYXJlbnR9cmV0dXJuIG51bGx9Zm9yayhBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9y''@;'; put 'put ''ayh0aGlzLEEpfXdyYXAoQSxqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrQSk7Y29uc3QgaHQ9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLEEsaiksRXQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gRXQucnVuR3VhcmRlZChodCx0aGlzLGFyZ3VtZW50cyxqKX19cnVuKEEsaixodCxFdCl7Z3Q9e3BhcmVudDpndCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEEsaixodCxFdCl9ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1bkd1YXJk''@;'; put 'put ''ZWQoQSxqPW51bGwsaHQsRXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsQSxqLGh0LEV0KX1jYXRjaChadCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsWnQpKXRocm93IFp0fX1m''@;'; put 'put ''aW5hbGx5e2d0PWd0LnBhcmVudH19cnVuVGFzayhBLGosaHQpe2lmKEEuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoQS56b25lfHxubikubmFtZSsiOyBFeGVjdXRpb246ICIr''@;'; put 'put ''dGhpcy5uYW1lKyIpIik7Y29uc3QgRXQ9QSx7dHlwZTpadCxkYXRhOntpc1BlcmlvZGljOkN0PSExLGlzUmVmcmVzaGFibGU6Z249ITF9PXt9fT1BO2lmKEEuc3RhdGU9PT1WdCYmKFp0PT09V3R8fFp0PT09dXQpKXJldHVybjtjb25zdCB2bj1BLnN0YXRlIT1rdDt2biYmRXQuX3RyYW5zaXRp''@;'; put 'put ''b25UbyhrdCxZKTtjb25zdCBwbj1QdDtQdD1FdCxndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e1p0PT11dCYmQS5kYXRhJiYhQ3QmJiFnbiYmKEEuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsRXQsaixodCl9Y2F0Y2go''@;'; put 'put ''Y24pe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGNuKSl0aHJvdyBjbn19ZmluYWxseXtjb25zdCBjbj1BLnN0YXRlO2lmKGNuIT09VnQmJmNuIT09WHQpaWYoWnQ9PVd0fHxDdHx8Z24mJmNuPT09dnQpdm4mJkV0Ll90cmFuc2l0aW9uVG8oWSxrdCx2dCk7ZWxzZXtj''@;'; put 'put ''b25zdCB6PUV0Ll96b25lRGVsZWdhdGVzO3RoaXMuX3VwZGF0ZVRhc2tDb3VudChFdCwtMSksdm4mJkV0Ll90cmFuc2l0aW9uVG8oVnQsa3QsVnQpLGduJiYoRXQuX3pvbmVEZWxlZ2F0ZXM9eil9Z3Q9Z3QucGFyZW50LFB0PXBufX1zY2hlZHVsZVRhc2soQSl7aWYoQS56b25lJiZBLnpvbmUh''@;'; put 'put ''PT10aGlzKXtsZXQgaHQ9dGhpcztmb3IoO2h0Oyl7aWYoaHQ9PT1BLnpvbmUpdGhyb3cgRXJyb3IoYGNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICR7dGhpcy5uYW1lfSB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAke0Euem9uZS5uYW1lfWApO2h0PWh0LnBh''@;'; put 'put ''cmVudH19QS5fdHJhbnNpdGlvblRvKHZ0LFZ0KTtjb25zdCBqPVtdO0EuX3pvbmVEZWxlZ2F0ZXM9aixBLl96b25lPXRoaXM7dHJ5e0E9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLEEpfWNhdGNoKGh0KXt0aHJvdyBBLl90cmFuc2l0aW9uVG8oWHQsdnQsVnQpLHRoaXMu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gQS5fem9uZURlbGVnYXRlcz09PWomJnRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLDEpLEEuc3RhdGU9PXZ0JiZBLl90cmFuc2l0aW9uVG8oWSx2dCksQX1zY2hlZHVsZU1pY3JvVGFzayhBLGosaHQsRXQpe3JldHVy''@;'; put 'put ''biB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoS3QsQSxqLGh0LEV0LHZvaWQgMCkpfXNjaGVkdWxlTWFjcm9UYXNrKEEsaixodCxFdCxadCl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBvdCh1dCxBLGosaHQsRXQsWnQpKX1zY2hlZHVsZUV2ZW50VGFzayhBLGosaHQsRXQsWnQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgb3QoV3QsQSxqLGh0LEV0LFp0KSl9Y2FuY2VsVGFzayhBKXtpZihBLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEEu''@;'; put 'put ''em9uZXx8bm4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKEEuc3RhdGU9PT1ZfHxBLnN0YXRlPT09a3Qpe0EuX3RyYW5zaXRpb25UbyhMdCxZLGt0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxBKX1jYXRjaChqKXt0aHJvdyBBLl90cmFu''@;'; put 'put ''c2l0aW9uVG8oWHQsTHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGopLGp9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChBLC0xKSxBLl90cmFuc2l0aW9uVG8oVnQsTHQpLEEucnVuQ291bnQ9LTEsQX19X3VwZGF0ZVRhc2tDb3VudChBLGope2NvbnN0IGh0PUEu''@;'; put 'put ''X3pvbmVEZWxlZ2F0ZXM7LTE9PWomJihBLl96b25lRGVsZWdhdGVzPW51bGwpO2ZvcihsZXQgRXQ9MDtFdDxodC5sZW5ndGg7RXQrKylodFtFdF0uX3VwZGF0ZVRhc2tDb3VudChBLnR5cGUsail9fXJldHVybiBBdH0pKCk7Y29uc3QgTj17bmFtZToiIixvbkhhc1Rhc2s6KEF0LGF0LEEsaik9''@;'; put 'put ''PkF0Lmhhc1Rhc2soQSxqKSxvblNjaGVkdWxlVGFzazooQXQsYXQsQSxqKT0+QXQuc2NoZWR1bGVUYXNrKEEsaiksb25JbnZva2VUYXNrOihBdCxhdCxBLGosaHQsRXQpPT5BdC5pbnZva2VUYXNrKEEsaixodCxFdCksb25DYW5jZWxUYXNrOihBdCxhdCxBLGopPT5BdC5jYW5jZWxUYXNrKEEs''@;'; put 'put ''ail9O2NsYXNzIEp7Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1jb25zdHJ1Y3RvcihhdCxBLGope3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLl96b25lPWF0LHRoaXMuX3BhcmVudERlbGVnYXRlPUEsdGhpcy5fZm9ya1pT''@;'; put 'put ''PWomJihqJiZqLm9uRm9yaz9qOkEuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9aiYmKGoub25Gb3JrP0E6QS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1qJiYoai5vbkZvcms/dGhpcy5fem9uZTpBLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPWomJihqLm9uSW50ZXJj''@;'; put 'put ''ZXB0P2o6QS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9aiYmKGoub25JbnRlcmNlcHQ/QTpBLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1qJiYoai5vbkludGVyY2VwdD90aGlzLl96b25lOkEuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZv''@;'; put 'put ''a2VaUz1qJiYoai5vbkludm9rZT9qOkEuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PWomJihqLm9uSW52b2tlP0E6QS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9aiYmKGoub25JbnZva2U/dGhpcy5fem9uZTpBLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJy''@;'; put 'put ''b3JaUz1qJiYoai5vbkhhbmRsZUVycm9yP2o6QS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PWomJihqLm9uSGFuZGxlRXJyb3I/QTpBLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9aiYmKGoub25IYW5kbGVFcnJvcj90aGlzLl96b25l''@;'; put 'put ''OkEuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPWomJihqLm9uU2NoZWR1bGVUYXNrP2o6QS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9aiYmKGoub25TY2hlZHVsZVRhc2s/QTpBLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hl''@;'; put 'put ''ZHVsZVRhc2tDdXJyWm9uZT1qJiYoai5vblNjaGVkdWxlVGFzaz90aGlzLl96b25lOkEuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9aiYmKGoub25JbnZva2VUYXNrP2o6QS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1qJiYoai5vbkludm9r''@;'; put 'put ''ZVRhc2s/QTpBLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPWomJihqLm9uSW52b2tlVGFzaz90aGlzLl96b25lOkEuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPWomJihqLm9uQ2FuY2VsVGFzaz9qOkEuX2NhbmNlbFRhc2taUyksdGhp''@;'; put 'put ''cy5fY2FuY2VsVGFza0RsZ3Q9aiYmKGoub25DYW5jZWxUYXNrP0E6QS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1qJiYoai5vbkNhbmNlbFRhc2s/dGhpcy5fem9uZTpBLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hh''@;'; put 'put ''c1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PWomJmoub25IYXNUYXNrOyhodHx8QSYmQS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9qOk4sdGhpcy5faGFzVGFza0RsZ3Q9QSx0aGlz''@;'; put 'put ''Ll9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXRoaXMuX3pvbmUsai5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPU4sdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1BLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLGou''@;'; put 'put ''b25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPU4sdGhpcy5faW52b2tlVGFza0RsZ3Q9QSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSksai5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9Tix0aGlzLl9jYW5jZWxUYXNrRGxndD1BLHRoaXMuX2Nh''@;'; put 'put ''bmNlbFRhc2tDdXJyWm9uZT10aGlzLl96b25lKSl9Zm9yayhhdCxBKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGF0LEEpOm5ldyBPKGF0LEEpfWludGVyY2VwdChhdCxBLGope3JldHVybiB0aGlzLl9pbnRlcmNlcHRa''@;'; put 'put ''Uz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGF0LEEsaik6QX1pbnZva2UoYXQsQSxqLGh0LEV0KXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tl''@;'; put 'put ''RGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxhdCxBLGosaHQsRXQpOkEuYXBwbHkoaixodCl9aGFuZGxlRXJyb3IoYXQsQSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFu''@;'; put 'put ''ZGxlRXJyb3JDdXJyWm9uZSxhdCxBKX1zY2hlZHVsZVRhc2soYXQsQSl7bGV0IGo9QTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJmouX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSxqPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2No''@;'; put 'put ''ZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsYXQsQSksanx8KGo9QSk7ZWxzZSBpZihBLnNjaGVkdWxlRm4pQS5zY2hlZHVsZUZuKEEpO2Vsc2V7aWYoQS50eXBlIT1LdCl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBz''@;'; put 'put ''Y2hlZHVsZUZuLiIpO0h0KEEpfXJldHVybiBqfWludm9rZVRhc2soYXQsQSxqLGh0KXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGF0LEEsaixodCk6''@;'; put 'put ''QS5jYWxsYmFjay5hcHBseShqLGh0KX1jYW5jZWxUYXNrKGF0LEEpe2xldCBqO2lmKHRoaXMuX2NhbmNlbFRhc2taUylqPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGF0LEEpO2Vsc2V7aWYoIUEu''@;'; put 'put ''Y2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtqPUEuY2FuY2VsRm4oQSl9cmV0dXJuIGp9aGFzVGFzayhhdCxBKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tD''@;'; put 'put ''dXJyWm9uZSxhdCxBKX1jYXRjaChqKXt0aGlzLmhhbmRsZUVycm9yKGF0LGopfX1fdXBkYXRlVGFza0NvdW50KGF0LEEpe2NvbnN0IGo9dGhpcy5fdGFza0NvdW50cyxodD1qW2F0XSxFdD1qW2F0XT1odCtBO2lmKEV0PDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRo''@;'; put 'put ''ZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9aHQmJjAhPUV0fHx0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSx7bWljcm9UYXNrOmoubWljcm9UYXNrPjAsbWFjcm9UYXNrOmoubWFjcm9UYXNrPjAsZXZlbnRUYXNrOmouZXZlbnRUYXNrPjAsY2hhbmdlOmF0fSl9fWNsYXNzIG90e2NvbnN0cnVjdG9y''@;'; put 'put ''KGF0LEEsaixodCxFdCxadCl7aWYodGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPWF0LHRoaXMuc291cmNlPUEsdGhpcy5kYXRhPWh0LHRoaXMuc2NoZWR1bGVGbj1FdCx0''@;'; put 'put ''aGlzLmNhbmNlbEZuPVp0LCFqKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPWo7Y29uc3QgQ3Q9dGhpczt0aGlzLmludm9rZT1hdD09PVd0JiZodCYmaHQudXNlRz9vdC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIG90Lmludm9r''@;'; put 'put ''ZVRhc2suY2FsbChjLEN0LHRoaXMsYXJndW1lbnRzKX19c3RhdGljIGludm9rZVRhc2soYXQsQSxqKXthdHx8KGF0PXRoaXMpLGVuKys7dHJ5e3JldHVybiBhdC5ydW5Db3VudCsrLGF0LnpvbmUucnVuVGFzayhhdCxBLGopfWZpbmFsbHl7MT09ZW4mJnRuKCksZW4tLX19Z2V0IHpvbmUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fem9uZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9Y2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCl7dGhpcy5fdHJhbnNpdGlvblRvKFZ0LHZ0KX1fdHJhbnNpdGlvblRvKGF0LEEsail7aWYodGhpcy5fc3RhdGUhPT1BJiZ0aGlzLl9zdGF0ZSE9PWopdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGAke3RoaXMudHlwZX0gJyR7dGhpcy5zb3VyY2V9JzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICcke2F0fScsIGV4cGVjdGluZyBzdGF0ZSAnJHtBfScke2o/IiBvciAnIitqKyInIjoiIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0nLmApO3RoaXMuX3N0YXRlPWF0LGF0PT1WdCYmKHRo''@;'; put 'put ''aXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9dG9KU09OKCl7cmV0dXJu''@;'; put 'put ''e3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19fWNvbnN0IHN0PWwoInNldFRpbWVvdXQiKSxsdD1sKCJQcm9taXNlIiksU3Q9bCgidGhlbiIpO2xldCBEdCxydD1bXSx4''@;'; put 'put ''dD0hMTtmdW5jdGlvbiBCdChBdCl7aWYoRHR8fGNbbHRdJiYoRHQ9Y1tsdF0ucmVzb2x2ZSgwKSksRHQpe2xldCBhdD1EdFtTdF07YXR8fChhdD1EdC50aGVuKSxhdC5jYWxsKER0LEF0KX1lbHNlIGNbc3RdKEF0LDApfWZ1bmN0aW9uIEh0KEF0KXswPT09ZW4mJjA9PT1ydC5sZW5ndGgmJkJ0''@;'; put 'put ''KHRuKSxBdCYmcnQucHVzaChBdCl9ZnVuY3Rpb24gdG4oKXtpZigheHQpe2Zvcih4dD0hMDtydC5sZW5ndGg7KXtjb25zdCBBdD1ydDtydD1bXTtmb3IobGV0IGF0PTA7YXQ8QXQubGVuZ3RoO2F0Kyspe2NvbnN0IEE9QXRbYXRdO3RyeXtBLnpvbmUucnVuVGFzayhBLG51bGwsbnVsbCl9Y2F0''@;'; put 'put ''Y2goail7VHQub25VbmhhbmRsZWRFcnJvcihqKX19fVR0Lm1pY3JvdGFza0RyYWluRG9uZSgpLHh0PSExfX1jb25zdCBubj17bmFtZToiTk8gWk9ORSJ9LFZ0PSJub3RTY2hlZHVsZWQiLHZ0PSJzY2hlZHVsaW5nIixZPSJzY2hlZHVsZWQiLGt0PSJydW5uaW5nIixMdD0iY2FuY2VsaW5nIixY''@;'; put 'put ''dD0idW5rbm93biIsS3Q9Im1pY3JvVGFzayIsdXQ9Im1hY3JvVGFzayIsV3Q9ImV2ZW50VGFzayIsSXQ9e30sVHQ9e3N5bWJvbDpsLGN1cnJlbnRab25lRnJhbWU6KCk9Pmd0LG9uVW5oYW5kbGVkRXJyb3I6SnQsbWljcm90YXNrRHJhaW5Eb25lOkp0LHNjaGVkdWxlTWljcm9UYXNrOkh0LHNo''@;'; put 'put ''b3dVbmNhdWdodEVycm9yOigpPT4hT1tsKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildLHBhdGNoRXZlbnRUYXJnZXQ6KCk9PltdLHBhdGNoT25Qcm9wZXJ0aWVzOkp0LHBhdGNoTWV0aG9kOigpPT5KdCxiaW5kQXJndW1lbnRzOigpPT5bXSxwYXRjaFRoZW46KCk9Pkp0LHBh''@;'; put 'put ''dGNoTWFjcm9UYXNrOigpPT5KdCxwYXRjaEV2ZW50UHJvdG90eXBlOigpPT5KdCxpc0lFT3JFZGdlOigpPT4hMSxnZXRHbG9iYWxPYmplY3RzOigpPT57fSxPYmplY3REZWZpbmVQcm9wZXJ0eTooKT0+SnQsT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOigpPT57fSxPYmplY3RDcmVh''@;'; put 'put ''dGU6KCk9Pnt9LEFycmF5U2xpY2U6KCk9PltdLHBhdGNoQ2xhc3M6KCk9Pkp0LHdyYXBXaXRoQ3VycmVudFpvbmU6KCk9Pkp0LGZpbHRlclByb3BlcnRpZXM6KCk9PltdLGF0dGFjaE9yaWdpblRvUGF0Y2hlZDooKT0+SnQsX3JlZGVmaW5lUHJvcGVydHk6KCk9Pkp0LHBhdGNoQ2FsbGJhY2tz''@;'; put 'put ''OigpPT5KdCxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpCdH07bGV0IGd0PXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBPKG51bGwsbnVsbCl9LFB0PW51bGwsZW49MDtmdW5jdGlvbiBKdCgpe31yZXR1cm4gQigiWm9uZSIsIlpvbmUiKSxPfSgpLFMuWm9uZX0oKTsoZnVuY3Rpb24gTm4oUyl7KGZ1''@;'; put 'put ''bmN0aW9uIFF0KFMpe1MuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoUixCLE8pPT57Y29uc3QgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo9T2JqZWN0LmRlZmluZVByb3BlcnR5LHN0PU8uc3ltYm9sLGx0PVtdLFN0PSExIT09UltzdCgiRElTQUJMRV9XUkFQ''@;'; put 'put ''UElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxydD1zdCgiUHJvbWlzZSIpLHh0PXN0KCJ0aGVuIiksRHQ9Il9fY3JlYXRpb25UcmFjZV9fIjtPLm9uVW5oYW5kbGVkRXJyb3I9ej0+e2lmKE8uc2hvd1VuY2F1Z2h0RXJyb3IoKSl7Y29uc3QgVz16JiZ6LnJlamVjdGlvbjtXP2Nv''@;'; put 'put ''bnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLFcgaW5zdGFuY2VvZiBFcnJvcj9XLm1lc3NhZ2U6VywiOyBab25lOiIsei56b25lLm5hbWUsIjsgVGFzazoiLHoudGFzayYmei50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLFcsVyBpbnN0YW5jZW9mIEVycm9yP1cuc3Rh''@;'; put 'put ''Y2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHopfX0sTy5taWNyb3Rhc2tEcmFpbkRvbmU9KCk9Pntmb3IoO2x0Lmxlbmd0aDspe2NvbnN0IHo9bHQuc2hpZnQoKTt0cnl7ei56b25lLnJ1bkd1YXJkZWQoKCk9Pnt0aHJvdyB6LnRocm93T3JpZ2luYWw/ei5yZWplY3Rpb246en0pfWNhdGNoKFcp''@;'; put 'put ''e0h0KFcpfX19O2NvbnN0IEJ0PXN0KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEh0KHope08ub25VbmhhbmRsZWRFcnJvcih6KTt0cnl7Y29uc3QgVz1CW0J0XTsiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMseil9Y2F0Y2h7fX1mdW5jdGlv''@;'; put 'put ''biB0bih6KXtyZXR1cm4geiYmei50aGVufWZ1bmN0aW9uIG5uKHope3JldHVybiB6fWZ1bmN0aW9uIFZ0KHope3JldHVybiBDdC5yZWplY3Qoeil9Y29uc3QgdnQ9c3QoInN0YXRlIiksWT1zdCgidmFsdWUiKSxrdD1zdCgiZmluYWxseSIpLEx0PXN0KCJwYXJlbnRQcm9taXNlVmFsdWUiKSxY''@;'; put 'put ''dD1zdCgicGFyZW50UHJvbWlzZVN0YXRlIiksS3Q9IlByb21pc2UudGhlbiIsdXQ9bnVsbCxXdD0hMCxJdD0hMSxUdD0wO2Z1bmN0aW9uIGd0KHosVyl7cmV0dXJuIGs9Pnt0cnl7QXQoeixXLGspfWNhdGNoKEcpe0F0KHosITEsRyl9fX1jb25zdCBQdD1mdW5jdGlvbigpe2xldCB6PSExO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24oKXt6fHwoej0hMCxrLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZW49IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEp0PXN0KCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gQXQoeixXLGspe2NvbnN0IEc9UHQoKTtp''@;'; put 'put ''Zih6PT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKGVuKTtpZih6W3Z0XT09PXV0KXtsZXQgcHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2Yga3x8ImZ1bmN0aW9uIj09dHlwZW9mIGspJiYocHQ9ayYmay50aGVuKX1jYXRjaChNdCl7cmV0dXJuIEcoKCk9PntBdCh6LCExLE10KX0pKCksen1p''@;'; put 'put ''ZihXIT09SXQmJmsgaW5zdGFuY2VvZiBDdCYmay5oYXNPd25Qcm9wZXJ0eSh2dCkmJmsuaGFzT3duUHJvcGVydHkoWSkmJmtbdnRdIT09dXQpQShrKSxBdCh6LGtbdnRdLGtbWV0pO2Vsc2UgaWYoVyE9PUl0JiYiZnVuY3Rpb24iPT10eXBlb2YgcHQpdHJ5e3B0LmNhbGwoayxHKGd0KHosVykp''@;'; put 'put ''LEcoZ3QoeiwhMSkpKX1jYXRjaChNdCl7RygoKT0+e0F0KHosITEsTXQpfSkoKX1lbHNle3pbdnRdPVc7Y29uc3QgTXQ9eltZXTtpZih6W1ldPWsseltrdF09PT1rdCYmVz09PVd0JiYoelt2dF09eltYdF0seltZXT16W0x0XSksVz09PUl0JiZrIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IGN0''@;'; put 'put ''PUIuY3VycmVudFRhc2smJkIuY3VycmVudFRhc2suZGF0YSYmQi5jdXJyZW50VGFzay5kYXRhW0R0XTtjdCYmSihrLEp0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpjdH0pfWZvcihsZXQgY3Q9MDtjdDxNdC5sZW5ndGg7KWooeixNdFtjdCsrXSxN''@;'; put 'put ''dFtjdCsrXSxNdFtjdCsrXSxNdFtjdCsrXSk7aWYoMD09TXQubGVuZ3RoJiZXPT1JdCl7elt2dF09VHQ7bGV0IGN0PWs7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uIG90KHope3JldHVybiB6JiZ6LnRvU3RyaW5nPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz8oei5jb25zdHJ1Y3RvciYmei5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeSh6KTp6P3oudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeil9KGspKyhrJiZrLnN0YWNrPyJcbiIray5zdGFjazoiIikpfWNhdGNo''@;'; put 'put ''KHd0KXtjdD13dH1TdCYmKGN0LnRocm93T3JpZ2luYWw9ITApLGN0LnJlamVjdGlvbj1rLGN0LnByb21pc2U9eixjdC56b25lPUIuY3VycmVudCxjdC50YXNrPUIuY3VycmVudFRhc2ssbHQucHVzaChjdCksTy5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIHp9Y29uc3QgYXQ9c3QoInJl''@;'; put 'put ''amVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24gQSh6KXtpZih6W3Z0XT09PVR0KXt0cnl7Y29uc3QgVz1CW2F0XTtXJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMse3JlamVjdGlvbjp6W1ldLHByb21pc2U6en0pfWNhdGNoe316W3Z0XT1JdDtmb3IobGV0IFc9MDtX''@;'; put 'put ''PGx0Lmxlbmd0aDtXKyspej09PWx0W1ddLnByb21pc2UmJmx0LnNwbGljZShXLDEpfX1mdW5jdGlvbiBqKHosVyxrLEcscHQpe0Eoeik7Y29uc3QgTXQ9elt2dF0sY3Q9TXQ/ImZ1bmN0aW9uIj09dHlwZW9mIEc/RzpubjoiZnVuY3Rpb24iPT10eXBlb2YgcHQ/cHQ6VnQ7Vy5zY2hlZHVsZU1p''@;'; put 'put ''Y3JvVGFzayhLdCwoKT0+e3RyeXtjb25zdCB3dD16W1ldLFJ0PSEhayYma3Q9PT1rW2t0XTtSdCYmKGtbTHRdPXd0LGtbWHRdPU10KTtjb25zdCBGdD1XLnJ1bihjdCx2b2lkIDAsUnQmJmN0IT09VnQmJmN0IT09bm4/W106W3d0XSk7QXQoaywhMCxGdCl9Y2F0Y2god3Qpe0F0KGssITEsd3Qp''@;'; put 'put ''fX0sayl9Y29uc3QgRXQ9ZnVuY3Rpb24oKXt9LFp0PVIuQWdncmVnYXRlRXJyb3I7Y2xhc3MgQ3R7c3RhdGljIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9c3RhdGljIHJlc29sdmUoVyl7cmV0dXJuIFcgaW5zdGFuY2Vv''@;'; put 'put ''ZiBDdD9XOkF0KG5ldyB0aGlzKG51bGwpLFd0LFcpfXN0YXRpYyByZWplY3QoVyl7cmV0dXJuIEF0KG5ldyB0aGlzKG51bGwpLEl0LFcpfXN0YXRpYyB3aXRoUmVzb2x2ZXJzKCl7Y29uc3QgVz17fTtyZXR1cm4gVy5wcm9taXNlPW5ldyBDdCgoayxHKT0+e1cucmVzb2x2ZT1rLFcucmVqZWN0''@;'; put 'put ''PUd9KSxXfXN0YXRpYyBhbnkoVyl7aWYoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7Y29uc3Qgaz1bXTtsZXQgRz0wO3RyeXtmb3IobGV0IGN0IG9m''@;'; put 'put ''IFcpRysrLGsucHVzaChDdC5yZXNvbHZlKGN0KSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0''@;'; put 'put ''ZWQiKSk7bGV0IHB0PSExO2NvbnN0IE10PVtdO3JldHVybiBuZXcgQ3QoKGN0LHd0KT0+e2ZvcihsZXQgUnQ9MDtSdDxrLmxlbmd0aDtSdCsrKWtbUnRdLnRoZW4oRnQ9PntwdHx8KHB0PSEwLGN0KEZ0KSl9LEZ0PT57TXQucHVzaChGdCksRy0tLDA9PT1HJiYocHQ9ITAsd3QobmV3IFp0KE10''@;'; put 'put ''LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBrLEcscHQ9bmV3IHRoaXMoKHd0LFJ0KT0+e2s9d3QsRz1SdH0pO2Z1bmN0aW9uIE10KHd0KXtrKHd0KX1mdW5jdGlvbiBjdCh3dCl7Ryh3dCl9Zm9yKGxldCB3dCBvZiBXKXRuKHd0KXx8KHd0''@;'; put 'put ''PXRoaXMucmVzb2x2ZSh3dCkpLHd0LnRoZW4oTXQsY3QpO3JldHVybiBwdH1zdGF0aWMgYWxsKFcpe3JldHVybiBDdC5hbGxXaXRoQ2FsbGJhY2soVyl9c3RhdGljIGFsbFNldHRsZWQoVyl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgQ3Q/dGhpczpDdCkuYWxsV2l0''@;'; put 'put ''aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJyb3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsayl7bGV0IEcscHQsTXQ9bmV3IHRoaXMoKEZ0LCR0''@;'; put 'put ''KT0+e0c9RnQscHQ9JHR9KSxjdD0yLHd0PTA7Y29uc3QgUnQ9W107Zm9yKGxldCBGdCBvZiBXKXt0bihGdCl8fChGdD10aGlzLnJlc29sdmUoRnQpKTtjb25zdCAkdD13dDt0cnl7RnQudGhlbihVdD0+e1J0WyR0XT1rP2sudGhlbkNhbGxiYWNrKFV0KTpVdCxjdC0tLDA9PT1jdCYmRyhSdCl9''@;'; put 'put ''LFV0PT57az8oUnRbJHRdPWsuZXJyb3JDYWxsYmFjayhVdCksY3QtLSwwPT09Y3QmJkcoUnQpKTpwdChVdCl9KX1jYXRjaChVdCl7cHQoVXQpfWN0Kyssd3QrK31yZXR1cm4gY3QtPTIsMD09PWN0JiZHKFJ0KSxNdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBrPXRoaXM7aWYoIShrIGluc3RhbmNl''@;'; put 'put ''b2YgQ3QpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7a1t2dF09dXQsa1tZXT1bXTt0cnl7Y29uc3QgRz1QdCgpO1cmJlcoRyhndChrLFd0KSksRyhndChrLEl0KSkpfWNhdGNoKEcpe0F0KGssITEsRyl9fWdldFtTeW1ib2wudG9TdHJpbmdUYWdd''@;'; put 'put ''KCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4gQ3R9dGhlbihXLGspe2xldCBHPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFHfHwiZnVuY3Rpb24iIT10eXBlb2YgRykmJihHPXRoaXMuY29uc3RydWN0b3J8fEN0KTtjb25zdCBwdD1u''@;'; put 'put ''ZXcgRyhFdCksTXQ9Qi5jdXJyZW50O3JldHVybiB0aGlzW3Z0XT09dXQ/dGhpc1tZXS5wdXNoKE10LHB0LFcsayk6aih0aGlzLE10LHB0LFcsaykscHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IGs9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5z''@;'; put 'put ''cGVjaWVzXTsoIWt8fCJmdW5jdGlvbiIhPXR5cGVvZiBrKSYmKGs9Q3QpO2NvbnN0IEc9bmV3IGsoRXQpO0dba3RdPWt0O2NvbnN0IHB0PUIuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChwdCxHLFcsVyk6aih0aGlzLHB0LEcsVyxXKSxHfX1DdC5yZXNvbHZlPUN0''@;'; put 'put ''LnJlc29sdmUsQ3QucmVqZWN0PUN0LnJlamVjdCxDdC5yYWNlPUN0LnJhY2UsQ3QuYWxsPUN0LmFsbDtjb25zdCBnbj1SW3J0XT1SLlByb21pc2U7Ui5Qcm9taXNlPUN0O2NvbnN0IHZuPXN0KCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHBuKHope2NvbnN0IFc9ei5wcm90b3R5cGUsaz1OKFcs''@;'; put 'put ''InRoZW4iKTtpZihrJiYoITE9PT1rLndyaXRhYmxlfHwhay5jb25maWd1cmFibGUpKXJldHVybjtjb25zdCBHPVcudGhlbjtXW3h0XT1HLHoucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24ocHQsTXQpe3JldHVybiBuZXcgQ3QoKHd0LFJ0KT0+e0cuY2FsbCh0aGlzLHd0LFJ0KX0pLnRoZW4ocHQs''@;'; put 'put ''TXQpfSx6W3ZuXT0hMH1yZXR1cm4gTy5wYXRjaFRoZW49cG4sZ24mJihwbihnbiksZHQoUiwiZmV0Y2giLHo9PmZ1bmN0aW9uIGNuKHope3JldHVybiBmdW5jdGlvbihXLGspe2xldCBHPXouYXBwbHkoVyxrKTtpZihHIGluc3RhbmNlb2YgQ3QpcmV0dXJuIEc7bGV0IHB0PUcuY29uc3RydWN0''@;'; put 'put ''b3I7cmV0dXJuIHB0W3ZuXXx8cG4ocHQpLEd9fSh6KSkpLFByb21pc2VbQi5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09bHQsQ3R9KX0pKFMpLGZ1bmN0aW9uIGFuKFMpe1MuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsUj0+e2NvbnN0IEI9RnVuY3Rpb24ucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLE89eCgiT3JpZ2luYWxEZWxlZ2F0ZSIpLE49eCgiUHJvbWlzZSIpLEo9eCgiRXJyb3IiKSxvdD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXtjb25zdCBydD10aGlzW09dO2lmKHJ0KXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBydD9CLmNhbGwocnQp''@;'; put 'put ''Ok9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChydCk7aWYodGhpcz09PVByb21pc2Upe2NvbnN0IHh0PVJbTl07aWYoeHQpcmV0dXJuIEIuY2FsbCh4dCl9aWYodGhpcz09PUVycm9yKXtjb25zdCB4dD1SW0pdO2lmKHh0KXJldHVybiBCLmNhbGwoeHQpfX1yZXR1cm4gQi5jYWxsKHRo''@;'; put 'put ''aXMpfTtvdFtPXT1CLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1vdDtjb25zdCBzdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZSYmdGhpcyBpbnN0YW5jZW9m''@;'; put 'put ''IFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOnN0LmNhbGwodGhpcyl9fSl9KFMpLGZ1bmN0aW9uIGtuKFMpe1MuX19sb2FkX3BhdGNoKCJ1dGlsIiwoUixCLE8pPT57Y29uc3QgTj1RKFIpO08ucGF0Y2hPblByb3BlcnRpZXM9ZXQsTy5wYXRjaE1ldGhvZD1kdCxPLmJpbmRBcmd1bWVudHM9''@;'; put 'put ''VCxPLnBhdGNoTWFjcm9UYXNrPWJ0O2NvbnN0IEo9Qi5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksb3Q9Qi5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7UltvdF0mJihSW0pdPVJbb3RdKSxSW0pdJiYoQltKXT1CW290XT1SW0pdKSxPLnBhdGNoRXZlbnRQcm90b3R5''@;'; put 'put ''cGU9cixPLnBhdGNoRXZlbnRUYXJnZXQ9VG4sTy5pc0lFT3JFZGdlPUd0LE8uT2JqZWN0RGVmaW5lUHJvcGVydHk9cyxPLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj1lLE8uT2JqZWN0Q3JlYXRlPXUsTy5BcnJheVNsaWNlPWYsTy5wYXRjaENsYXNzPWZ0LE8ud3JhcFdpdGhDdXJy''@;'; put 'put ''ZW50Wm9uZT1ELE8uZmlsdGVyUHJvcGVydGllcz1fLE8uYXR0YWNoT3JpZ2luVG9QYXRjaGVkPU90LE8uX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LE8ucGF0Y2hDYWxsYmFja3M9TW4sTy5nZXRHbG9iYWxPYmplY3RzPSgpPT4oe2dsb2JhbFNvdXJjZXM6ZG4sem9u''@;'; put 'put ''ZVN5bWJvbEV2ZW50TmFtZXM6cXQsZXZlbnROYW1lczpOLGlzQnJvd3NlcjpudCxpc01peDp0dCxpc05vZGU6WixUUlVFX1NUUjptLEZBTFNFX1NUUjpFLFpPTkVfU1lNQk9MX1BSRUZJWDpnLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6aSxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnZ9KX0p''@;'; put 'put ''fShTKX0pKFJuKSxmdW5jdGlvbiB6dChTKXtTLl9fbG9hZF9wYXRjaCgibGVnYWN5IixSPT57Y29uc3QgQj1SW1MuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07QiYmQigpfSksUy5fX2xvYWRfcGF0Y2goInRpbWVycyIsUj0+e2NvbnN0IEI9InNldCIsTz0iY2xlYXIiO1AoUixCLE8sIlRp''@;'; put 'put ''bWVvdXQiKSxQKFIsQixPLCJJbnRlcnZhbCIpLFAoUixCLE8sIkltbWVkaWF0ZSIpfSksUy5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsUj0+e1AoUiwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksUChSLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwi''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUiKSxQKFIsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksUy5fX2xvYWRfcGF0Y2goImJsb2NraW5nIiwoUixCKT0+e2NvbnN0IE89WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXTtmb3IobGV0IE49MDtOPE8ubGVuZ3Ro''@;'; put 'put ''O04rKylkdChSLE9bTl0sKG90LHN0LGx0KT0+ZnVuY3Rpb24oU3QscnQpe3JldHVybiBCLmN1cnJlbnQucnVuKG90LFIscnQsbHQpfSl9KSxTLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLChSLEIsTyk9PnsoZnVuY3Rpb24ganQoUyxSKXtSLnBhdGNoRXZlbnRQcm90b3R5cGUoUyxSKX0p''@;'; put 'put ''KFIsTyksZnVuY3Rpb24gJChTLFIpe2lmKFpvbmVbUi5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pcmV0dXJuO2NvbnN0e2V2ZW50TmFtZXM6Qix6b25lU3ltYm9sRXZlbnROYW1lczpPLFRSVUVfU1RSOk4sRkFMU0VfU1RSOkosWk9ORV9TWU1CT0xfUFJFRklYOm90fT1SLmdldEdsb2Jh''@;'; put 'put ''bE9iamVjdHMoKTtmb3IobGV0IGx0PTA7bHQ8Qi5sZW5ndGg7bHQrKyl7Y29uc3QgU3Q9QltsdF0sRHQ9b3QrKFN0K0opLEJ0PW90KyhTdCtOKTtPW1N0XT17fSxPW1N0XVtKXT1EdCxPW1N0XVtOXT1CdH1jb25zdCBzdD1TLkV2ZW50VGFyZ2V0O3N0JiZzdC5wcm90b3R5cGUmJlIucGF0Y2hF''@;'; put 'put ''dmVudFRhcmdldChTLFIsW3N0JiZzdC5wcm90b3R5cGVdKX0oUixPKTtjb25zdCBOPVIuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtOJiZOLnByb3RvdHlwZSYmTy5wYXRjaEV2ZW50VGFyZ2V0KFIsTyxbTi5wcm90b3R5cGVdKX0pLFMuX19sb2FkX3BhdGNoKCJNdXRhdGlvbk9ic2VydmVy''@;'; put 'put ''IiwoUixCLE8pPT57ZnQoIk11dGF0aW9uT2JzZXJ2ZXIiKSxmdCgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksUy5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIiwoUixCLE8pPT57ZnQoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxTLl9fbG9hZF9wYXRjaCgiRmlsZVJl''@;'; put 'put ''YWRlciIsKFIsQixPKT0+e2Z0KCJGaWxlUmVhZGVyIil9KSxTLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLChSLEIsTyk9PnshZnVuY3Rpb24gaXQoUyxSKXtpZihaJiYhdHR8fFpvbmVbUy5zeW1ib2woInBhdGNoRXZlbnRzIildKXJldHVybjtjb25zdCBCPVIuX19ab25lX2lnbm9yZV9v''@;'; put 'put ''bl9wcm9wZXJ0aWVzO2xldCBPPVtdO2lmKG50KXtjb25zdCBOPXdpbmRvdztPPU8uY29uY2F0KFsiRG9jdW1lbnQiLCJTVkdFbGVtZW50IiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiSFRNTEJvZHlFbGVtZW50IiwiSFRNTE1lZGlhRWxlbWVudCIsIkhUTUxGcmFtZVNldEVsZW1lbnQiLCJI''@;'; put 'put ''VE1MRnJhbWVFbGVtZW50IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJIVE1MTWFycXVlZUVsZW1lbnQiLCJXb3JrZXIiXSk7Y29uc3QgSj1mdW5jdGlvbiBvbigpe3RyeXtjb25zdCBTPUMubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PVMuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1TLmluZGV4''@;'; put 'put ''T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0Ok4saWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTtIKE4sUShOKSxCJiZCLmNvbmNhdChKKSxhKE4pKX1PPU8uY29uY2F0KFsiWE1MSHR0cFJlcXVlc3QiLCJYTUxIdHRwUmVxdWVzdEV2ZW50''@;'; put 'put ''VGFyZ2V0IiwiSURCSW5kZXgiLCJJREJSZXF1ZXN0IiwiSURCT3BlbkRCUmVxdWVzdCIsIklEQkRhdGFiYXNlIiwiSURCVHJhbnNhY3Rpb24iLCJJREJDdXJzb3IiLCJXZWJTb2NrZXQiXSk7Zm9yKGxldCBOPTA7TjxPLmxlbmd0aDtOKyspe2NvbnN0IEo9UltPW05dXTtKJiZKLnByb3RvdHlw''@;'; put 'put ''ZSYmSChKLnByb3RvdHlwZSxRKEoucHJvdG90eXBlKSxCKX19KE8sUil9KSxTLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLChSLEIsTyk9PnshZnVuY3Rpb24gSyhTLFIpe2NvbnN0e2lzQnJvd3NlcjpCLGlzTWl4Ok99PVIuZ2V0R2xvYmFsT2JqZWN0cygpOyhCfHxPKSYmUy5jdXN0''@;'; put 'put ''b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFMmJlIucGF0Y2hDYWxsYmFja3MoUixTLmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmli''@;'; put 'put ''dXRlQ2hhbmdlZENhbGxiYWNrIiwiZm9ybUFzc29jaWF0ZWRDYWxsYmFjayIsImZvcm1EaXNhYmxlZENhbGxiYWNrIiwiZm9ybVJlc2V0Q2FsbGJhY2siLCJmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2siXSl9KFIsTyl9KSxTLl9fbG9hZF9wYXRjaCgiWEhSIiwoUixCKT0+eyFmdW5jdGlvbiBT''@;'; put 'put ''dChydCl7Y29uc3QgeHQ9cnQuWE1MSHR0cFJlcXVlc3Q7aWYoIXh0KXJldHVybjtjb25zdCBEdD14dC5wcm90b3R5cGU7bGV0IEh0PUR0W3BdLHRuPUR0W2RdO2lmKCFIdCl7Y29uc3QgVHQ9cnQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihUdCl7Y29uc3QgZ3Q9VHQucHJvdG90eXBl''@;'; put 'put ''O0h0PWd0W3BdLHRuPWd0W2RdfX1jb25zdCBubj0icmVhZHlzdGF0ZWNoYW5nZSIsVnQ9InNjaGVkdWxlZCI7ZnVuY3Rpb24gdnQoVHQpe2NvbnN0IGd0PVR0LmRhdGEsUHQ9Z3QudGFyZ2V0O1B0W290XT0hMSxQdFtsdF09ITE7Y29uc3QgZW49UHRbSl07SHR8fChIdD1QdFtwXSx0bj1QdFtk''@;'; put 'put ''XSksZW4mJnRuLmNhbGwoUHQsbm4sZW4pO2NvbnN0IEp0PVB0W0pdPSgpPT57aWYoUHQucmVhZHlTdGF0ZT09PVB0LkRPTkUpaWYoIWd0LmFib3J0ZWQmJlB0W290XSYmVHQuc3RhdGU9PT1WdCl7Y29uc3QgYXQ9UHRbQi5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV07aWYoMCE9PVB0LnN0YXR1''@;'; put 'put ''cyYmYXQmJmF0Lmxlbmd0aD4wKXtjb25zdCBBPVR0Lmludm9rZTtUdC5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBqPVB0W0IuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2ZvcihsZXQgaHQ9MDtodDxqLmxlbmd0aDtodCsrKWpbaHRdPT09VHQmJmouc3BsaWNlKGh0LDEpOyFndC5hYm9ydGVk''@;'; put 'put ''JiZUdC5zdGF0ZT09PVZ0JiZBLmNhbGwoVHQpfSxhdC5wdXNoKFR0KX1lbHNlIFR0Lmludm9rZSgpfWVsc2UhZ3QuYWJvcnRlZCYmITE9PT1QdFtvdF0mJihQdFtsdF09ITApfTtyZXR1cm4gSHQuY2FsbChQdCxubixKdCksUHRbT118fChQdFtPXT1UdCksV3QuYXBwbHkoUHQsZ3QuYXJncyks''@;'; put 'put ''UHRbb3RdPSEwLFR0fWZ1bmN0aW9uIFkoKXt9ZnVuY3Rpb24ga3QoVHQpe2NvbnN0IGd0PVR0LmRhdGE7cmV0dXJuIGd0LmFib3J0ZWQ9ITAsSXQuYXBwbHkoZ3QudGFyZ2V0LGd0LmFyZ3MpfWNvbnN0IEx0PWR0KER0LCJvcGVuIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe3JldHVybiBUdFtOXT0w''@;'; put 'put ''PT1ndFsyXSxUdFtzdF09Z3RbMV0sTHQuYXBwbHkoVHQsZ3QpfSksS3Q9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx1dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksV3Q9ZHQoRHQsInNlbmQiLCgpPT5mdW5jdGlvbihUdCxndCl7aWYoITA9PT1CLmN1cnJlbnRbdXRdfHxUdFtOXSlyZXR1cm4g''@;'; put 'put ''V3QuYXBwbHkoVHQsZ3QpO3tjb25zdCBQdD17dGFyZ2V0OlR0LHVybDpUdFtzdF0saXNQZXJpb2RpYzohMSxhcmdzOmd0LGFib3J0ZWQ6ITF9LGVuPUYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLFksUHQsdnQsa3QpO1R0JiYhMD09PVR0W2x0XSYmIVB0LmFib3J0ZWQmJmVuLnN0YXRlPT09VnQm''@;'; put 'put ''JmVuLmludm9rZSgpfX0pLEl0PWR0KER0LCJhYm9ydCIsKCk9PmZ1bmN0aW9uKFR0LGd0KXtjb25zdCBQdD1mdW5jdGlvbiBCdChUdCl7cmV0dXJuIFR0W09dfShUdCk7aWYoUHQmJiJzdHJpbmciPT10eXBlb2YgUHQudHlwZSl7aWYobnVsbD09UHQuY2FuY2VsRm58fFB0LmRhdGEmJlB0LmRh''@;'; put 'put ''dGEuYWJvcnRlZClyZXR1cm47UHQuem9uZS5jYW5jZWxUYXNrKFB0KX1lbHNlIGlmKCEwPT09Qi5jdXJyZW50W0t0XSlyZXR1cm4gSXQuYXBwbHkoVHQsZ3QpfSl9KFIpO2NvbnN0IE89eCgieGhyVGFzayIpLE49eCgieGhyU3luYyIpLEo9eCgieGhyTGlzdGVuZXIiKSxvdD14KCJ4aHJTY2hl''@;'; put 'put ''ZHVsZWQiKSxzdD14KCJ4aHJVUkwiKSxsdD14KCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksUy5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixSPT57Ui5uYXZpZ2F0b3ImJlIubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbiBiKFMsUil7Y29uc3QgQj1TLmNvbnN0cnVjdG9y''@;'; put 'put ''Lm5hbWU7Zm9yKGxldCBPPTA7TzxSLmxlbmd0aDtPKyspe2NvbnN0IE49UltPXSxKPVNbTl07aWYoSil7aWYoIUwoZShTLE4pKSljb250aW51ZTtTW05dPShzdD0+e2NvbnN0IGx0PWZ1bmN0aW9uKCl7cmV0dXJuIHN0LmFwcGx5KHRoaXMsVChhcmd1bWVudHMsQisiLiIrTikpfTtyZXR1cm4g''@;'; put 'put ''T3QobHQsc3QpLGx0fSkoSil9fX0oUi5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksUy5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsKFIsQik9PntmdW5jdGlvbiBPKE4pe3JldHVybiBmdW5jdGlvbihK''@;'; put 'put ''KXtoKFIsTikuZm9yRWFjaChzdD0+e2NvbnN0IGx0PVIuUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKGx0KXtjb25zdCBTdD1uZXcgbHQoTix7cHJvbWlzZTpKLnByb21pc2UscmVhc29uOkoucmVqZWN0aW9ufSk7c3QuaW52b2tlKFN0KX19KX19Ui5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihC''@;'; put 'put ''W3goInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPU8oInVuaGFuZGxlZHJlamVjdGlvbiIpLEJbeCgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09TygicmVqZWN0aW9uaGFuZGxlZCIpKX0pLFMuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsKFIsQixPKT0+eyFm''@;'; put 'put ''dW5jdGlvbiBvKFMsUil7Ui5wYXRjaE1ldGhvZChTLCJxdWV1ZU1pY3JvdGFzayIsQj0+ZnVuY3Rpb24oTyxOKXtab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIixOWzBdKX0pfShSLE8pfSl9KFJuKX0sOTI1Njg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijtj''@;'; put 'put ''b25zdCBuPXQoODI1NzQpO0ludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdFRvUGFydHM9ZnVuY3Rpb24oSSl7bGV0IE09dGhpcy5yZXNvbHZlZE9wdGlvbnMoKSxUPWZ1bmN0aW9uIEMoSSl7dmFyIFosbnQsdHQseXQsbXQsTT1JLmF2YWlsYWJsZUZvcm1hdHMsVD1JLnRpbWVG''@;'; put 'put ''b3JtYXRzLGI9SS5kYXRlRm9ybWF0cyxMPUkubWVkaXVtLFU9W10scT1bXSxYPVtdO2Z1bmN0aW9uIGV0KFYsZnQpe3ZhciBkdD1uZXcgQXJyYXkoKFYubWF0Y2goL00vZyl8fFtdKS5sZW5ndGgrMSksYnQ9bmV3IEFycmF5KChWLm1hdGNoKC9FL2cpfHxbXSkubGVuZ3RoKzEpO3JldHVybiBk''@;'; put 'put ''dC5sZW5ndGg+MiYmKGZ0PWZ0LnJlcGxhY2UoLyhNfEwpKy8sZHQuam9pbigiJDEiKSkpLGJ0Lmxlbmd0aD4yJiYoZnQ9ZnQucmVwbGFjZSgvKFtFZWNdKSsvLGJ0LmpvaW4oIiQxIikpKSxmdH1mb3IoWiBpbiBNKU0uaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLE1bWl0pKSkm''@;'; put 'put ''JihVLnB1c2godHQpLEYodHQpP1gucHVzaChudCk6eCh0dCkmJnEucHVzaChudCkpKTtmb3IoeXQ9MDt5dDxxLmxlbmd0aDt5dCs9MSlmb3IobXQ9MDttdDxYLmxlbmd0aDttdCs9MSkodHQ9dyhudD1MLnJlcGxhY2UoInswfSIscVt5dF0pLnJlcGxhY2UoInsxfSIsWFttdF0pLnJlcGxhY2Uo''@;'; put 'put ''L15bLFxzXSt8Wyxcc10rJC9naSwiIikpKSYmVS5wdXNoKHR0KTtmb3IoWiBpbiBUKVQuaGFzT3duUHJvcGVydHkoWikmJigodHQ9dyhudD1ldChaLFRbWl0pKSkmJlUucHVzaCh0dCkpO2ZvcihaIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShaKSYmKCh0dD13KG50PWV0KFosYltaXSkpKSYmVS5w''@;'; put 'put ''dXNoKHR0KSk7cmV0dXJuIFV9KG4uZGF0ZS5mb3JtYXRzKSxiPXt9O2Zvcih2YXIgTCBpbiBmKXMuY2FsbChmLEwpJiYoYlsiW1siK0wrIl1dIl09TVtMXSk7bGV0IFo9ZnVuY3Rpb24gaShJLE0sVCl7Zm9yKHZhciBxLG10PS0xLzAsWD0wLGV0PU0ubGVuZ3RoO1g8ZXQ7KXt2YXIgVj1NW1hd''@;'; put 'put ''LGZ0PTA7Zm9yKHZhciBkdCBpbiBmKWlmKHMuY2FsbChmLGR0KSl7dmFyIGJ0PUlbIltbIitkdCsiXV0iXSxPdD1zLmNhbGwoVixkdCk/VltkdF06dm9pZCAwO2lmKHZvaWQgMD09PWJ0JiZ2b2lkIDAhPT1PdClmdC09MjA7ZWxzZSBpZih2b2lkIDAhPT1idCYmdm9pZCAwPT09T3QpZnQtPTEy''@;'; put 'put ''MDtlbHNle3ZhciBOdD1bIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sWXQ9YS5jYWxsKE50LGJ0KSxvbj1hLmNhbGwoTnQsT3QpLEd0PU1hdGgubWF4KE1hdGgubWluKG9uLVl0LDIpLC0yKTtUJiYoKCJudW1lcmljIj09PWJ0fHwiMi1kaWdpdCI9PT1idCkm''@;'; put 'put ''JiJudW1lcmljIiE9PU90JiYiMi1kaWdpdCIhPT1PdHx8Im51bWVyaWMiIT09YnQmJiIyLWRpZ2l0IiE9PWJ0JiYoIjItZGlnaXQiPT09T3R8fCJudW1lcmljIj09PU90KSkmJihmdC09OCksMj09PUd0P2Z0LT02OjE9PT1HdD9mdC09MzotMT09PUd0P2Z0LT02Oi0yPT09R3QmJihmdC09OCl9''@;'; put 'put ''fWZ0Pm10JiYobXQ9ZnQscT1WKSxYKyt9cmV0dXJuIHF9KGIsVCk7cmV0dXJuIGZ1bmN0aW9uIGUoSSxNKXtpZighaXNGaW5pdGUoTSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdmFsaWQgZGF0ZSBwYXNzZWQgdG8gZm9ybWF0VG9QYXJ0cyIpO2Zvcih2YXIgcSxUPSJlbi1VUyIs''@;'; put 'put ''Yj1JLnBhdHRlcm4sWj0obmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7dXNlR3JvdXBpbmc6ITF9KSxuZXcgSW50bC5OdW1iZXJGb3JtYXQoW1RdLHttaW5pbXVtSW50ZWdlckRpZ2l0czoyLHVzZUdyb3VwaW5nOiExfSksZnVuY3Rpb24gdihJLE0sVCl7dmFyIGI9bmV3IERhdGUoSSksTD0i''@;'; put 'put ''Z2V0IisoVHx8IiIpO3JldHVybnsiW1t3ZWVrZGF5XV0iOmJbTCsiRGF5Il0oKSwiW1tlcmFdXSI6KyhiW0wrIkZ1bGxZZWFyIl0oKT49MCksIltbeWVhcl1dIjpiW0wrIkZ1bGxZZWFyIl0oKSwiW1ttb250aF1dIjpiW0wrIk1vbnRoIl0oKSwiW1tkYXldXSI6YltMKyJEYXRlIl0oKSwiW1to''@;'; put 'put ''b3VyXV0iOmJbTCsiSG91cnMiXSgpLCJbW21pbnV0ZV1dIjpiW0wrIk1pbnV0ZXMiXSgpLCJbW3NlY29uZF1dIjpiW0wrIlNlY29uZHMiXSgpLCJbW2luRFNUXV0iOiExfX0oTSkpLG50PSJncmVnb3J5Iix0dD1uLmRhdGUuY2FsZW5kYXJzLHl0PVtdLG10PS97KFtefV0rKX0vZyxYPTA7bnVs''@;'; put 'put ''bCE9PShxPW10LmV4ZWMoYikpOyl7WDxxLmluZGV4JiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOmIuc3Vic3RyKFgscS5pbmRleC1YKX0pO3ZhciBldD1xWzFdLFY9bnVsbDtpZihzLmNhbGwoSSxldCkpe3ZhciBmdCxkdD1JW2V0XSxidD1aWyJbWyIrZXQrIl1dIl07aWYoInll''@;'; put 'put ''YXIiPT09ZXQmJmJ0PD0wP2J0PTEtYnQ6Im1vbnRoIj09PWV0P2J0Kys6ImhvdXIiPT09ZXQmJiEwPT09SVsiW1tob3VyMTJdXSJdJiYoZnQ9KGJ0JT0xMikhPT1aWyJbWyIrZXQrIl1dIl0sMD09PWJ0JiYhMD09PUlbIltbaG91ck5vMF1dIl0mJihidD0xMikpLCJudW1lcmljIj09PWR0KVY9''@;'; put 'put ''YnQ7ZWxzZSBpZigiMi1kaWdpdCI9PT1kdCkoVj1idCkubGVuZ3RoPjImJihWPVYuc2xpY2UoLTIpKTtlbHNlIGlmKGR0IGluIHUpc3dpdGNoKGV0KXtjYXNlIm1vbnRoIjpWPXAodHQsbnQsIm1vbnRocyIsZHQsWlsiW1siK2V0KyJdXSJdKTticmVhaztjYXNlIndlZWtkYXkiOnRyeXtWPXAo''@;'; put 'put ''dHQsbnQsImRheXMiLGR0LFpbIltbIitldCsiXV0iXSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3ZWVrZGF5IGRhdGEgZm9yIGxvY2FsZSAiK1QpfWJyZWFrO2Nhc2UidGltZVpvbmVOYW1lIjpWPSIiO2JyZWFrO2RlZmF1bHQ6Vj1aWyJbWyIrZXQrIl1dIl19fWVs''@;'; put 'put ''c2UiYW1wbSI9PT1ldCYmKFY9cCh0dCxudCwiZGF5UGVyaW9kcyIsZnQ/InBtIjoiYW0iKSk7bnVsbCE9PVYmJih5dC5wdXNoKHt0eXBlOnFbMV0sdmFsdWU6Vn0pLFg9cS5pbmRleCtxWzBdLmxlbmd0aCl9cmV0dXJuIFg8Yi5sZW5ndGgmJnl0LnB1c2goe3R5cGU6InNlcGFyYXRvciIsdmFs''@;'; put 'put ''dWU6Yi5zdWJzdHIoWCl9KSx5dH0oWixJKX07dmFyIHM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLHU9T2JqZWN0LmNyZWF0ZShudWxsLHtuYXJyb3c6e30sc2hvcnQ6e30sbG9uZzp7fX0pLGY9e3dlZWtkYXk6WyJuYXJyb3ciLCJz''@;'; put 'put ''aG9ydCIsImxvbmciXSxlcmE6WyJuYXJyb3ciLCJzaG9ydCIsImxvbmciXSx5ZWFyOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxtb250aDpbIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZGF5OlsiMi1kaWdpdCIsIm51bWVyaWMiXSxob3VyOlsiMi1kaWdpdCIs''@;'; put 'put ''Im51bWVyaWMiXSxtaW51dGU6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHNlY29uZDpbIjItZGlnaXQiLCJudW1lcmljIl0sdGltZVpvbmVOYW1lOlsic2hvcnQiLCJsb25nIl19O2Z1bmN0aW9uIHAoSSxNLFQsYixMKXt2YXIgVT1JW01dJiZJW01dW1RdP0lbTV1bVF06SS5ncmVnb3J5W1RdLFo9''@;'; put 'put ''e25hcnJvdzpbInNob3J0IiwibG9uZyJdLHNob3J0OlsibG9uZyIsIm5hcnJvdyJdLGxvbmc6WyJzaG9ydCIsIm5hcnJvdyJdfSxudD1zLmNhbGwoVSxiKT9VW2JdOnMuY2FsbChVLFpbYl1bMF0pP1VbWltiXVswXV06VVtaW2JdWzFdXTtyZXR1cm4gbnVsbCE9TD9udFtMXTpudH12YXIgZD0v''@;'; put 'put ''KD86W0VlY117MSw2fXxHezEsNX18KD86W3lZdV0rfFV7MSw1fSl8W01MXXsxLDV9fGR7MSwyfXxhfFtoa0hLXXsxLDJ9fG17MSwyfXxzezEsMn18ensxLDR9KSg/PShbXiddKidbXiddKicpKlteJ10qJCkvZyxtPS9bUXhYVk92WkFTamdGRHdXSVFxSF0vLEU9e21vbnRoOlsibnVtZXJpYyIs''@;'; put 'put ''IjItZGlnaXQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSx3ZWVrZGF5Olsic2hvcnQiLCJzaG9ydCIsInNob3J0IiwibG9uZyIsIm5hcnJvdyJdLGVyYTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXX0sZz1bIndlZWtkYXkiLCJlcmEiLCJ5ZWFyIiwibW9udGgi''@;'; put 'put ''LCJkYXkiXSxEPVsiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpbWVab25lTmFtZSJdO2Z1bmN0aW9uIEYoSSl7Zm9yKHZhciBNPTA7TTxELmxlbmd0aDtNKz0xKWlmKEkuaGFzT3duUHJvcGVydHkoRFtNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geChJKXtmb3IodmFyIE09MDtN''@;'; put 'put ''PGcubGVuZ3RoO00rPTEpaWYoSS5oYXNPd25Qcm9wZXJ0eShnW01dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB3KEkpe2lmKCFtLnRlc3QoSSkpe3ZhciBNPXt9O3JldHVybiBNLnBhdHRlcm49SS5yZXBsYWNlKGQsZnVuY3Rpb24oVCl7c3dpdGNoKFQuY2hhckF0KDApKXtjYXNlIkUi''@;'; put 'put ''OmNhc2UiZSI6Y2FzZSJjIjpyZXR1cm4gTS53ZWVrZGF5PUUud2Vla2RheVtULmxlbmd0aC0xXSwie3dlZWtkYXl9IjtjYXNlIkciOnJldHVybiBNLmVyYT1FLmVyYVtULmxlbmd0aC0xXSwie2VyYX0iO2Nhc2UieSI6Y2FzZSJZIjpjYXNlInUiOmNhc2UiVSI6cmV0dXJuIE0ueWVhcj0yPT09''@;'; put 'put ''VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3llYXJ9IjtjYXNlIk0iOmNhc2UiTCI6cmV0dXJuIE0ubW9udGg9RS5tb250aFtULmxlbmd0aC0xXSwie21vbnRofSI7Y2FzZSJkIjpyZXR1cm4gTS5kYXk9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntkYXl9IjtjYXNl''@;'; put 'put ''ImEiOnJldHVybiJ7YW1wbX0iO2Nhc2UiaCI6Y2FzZSJIIjpjYXNlImsiOmNhc2UiSyI6cmV0dXJuIE0uaG91cj0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie2hvdXJ9IjtjYXNlIm0iOnJldHVybiBNLm1pbnV0ZT0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwi''@;'; put 'put ''e21pbnV0ZX0iO2Nhc2UicyI6cmV0dXJuIE0uc2Vjb25kPTI9PT1ULmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7c2Vjb25kfSI7Y2FzZSJ6IjpyZXR1cm4gTS50aW1lWm9uZU5hbWU9VC5sZW5ndGg8ND8ic2hvcnQiOiJsb25nIiwie3RpbWVab25lTmFtZX0ifX0pLE0ucGF0dGVybj1N''@;'; put 'put ''LnBhdHRlcm4ucmVwbGFjZSgvJyhbXiddKiknL2csZnVuY3Rpb24oVCxiKXtyZXR1cm4gYnx8IicifSksTS5wYXR0ZXJuLmluZGV4T2YoInthbXBtfSIpPi0xJiYoTS5ob3VyMTI9ITAsTS5wYXR0ZXJuMTI9TS5wYXR0ZXJuLE0ucGF0dGVybj1NLnBhdHRlcm4ucmVwbGFjZSgie2FtcG19Iiwi''@;'; put 'put ''IikucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpKSxNfX19LDY2Mzc0OihjLGwsdCk9Pnt0KDgyOTc1KSx0KDQ3ODk5KSx0KDkzODYzKSx0KDgyMTg5KSx0KDk2NTExKSx0KDk1ODUzKSx0KDk3MDc1KSx0KDM1MDQpLHQoNTQ5MTMpLHQoMzk4MTMpLHQo''@;'; put 'put ''ODY1MTEpLHQoNTg4ODgpLHQoODE0NDkpLHQoNDc4NzQpLHQoMzQ2MDkpLHQoMzM3MDYpLHQoMTk2MjApLHQoNTc3NjIpLHQoMTUxNDQpLHQoNzUzNjkpLHQoNzYyMDkpLHQoOTUxNjUpLHQoNTYwOTQpfSwzMjg5OTooYyxsLHQpPT57dCgxMzI5MiksdCg1MjM0NiksdCg5NDI5KSx0KDc4NDkp''@;'; put 'put ''LHQoNDg5NTEpLGMuZXhwb3J0cz1EYXRlfSwzOTI3MTooYyxsLHQpPT57dCg2NTA0OSksdCg3MDQ4OSksdCg5NTUwMiksdCg1NjA5NCl9LDIyOTEzOihjLGwsdCk9Pnt0KDE3NDgyKSx0KDgyOTc1KSx0KDM1ODkwKSx0KDkzMzg2KSx0KDU2MDk0KX0sODgwMjU6KGMsbCx0KT0+e3QoNzY2NDgp''@;'; put 'put ''LHQoNTU3NzEpLHQoODIzOTIpLHQoNzIzMzUpLHQoNzQ4OTYpLHQoOTQ1MjEpLHQoMjkxNDcpLHQoNDEzMTgpLHQoODQzNTIpLHQoMTUzMjcpLHQoNTc1MDkpLHQoMTU5MDkpLHQoNzk1ODQpLHQoNDAzNDUpLHQoOTkxMzQpLHQoNjc5MDEpLHQoNDY1OTIpLHQoNTYwOTQpfSwxNTYyNjooYyxs''@;'; put 'put ''LHQpPT57dCg2NDUwOSksdCgzNzcyNyksdCg2NzAxKSx0KDM0NDE5KSx0KDkxOTMzKSx0KDU1NTM4KSx0KDM5NDk3KSx0KDQxMDQpLHQoNjAyMTApLHQoNTY1NzYpLHQoODQ0MzcpLHQoODgwNTApLHQoNTYwOTQpfSw1NDk0MDooYyxsLHQpPT57dCg5OTY1MCksdCg5MzUpLHQoNjYwNjQpLHQo''@;'; put 'put ''ODk0NDgpLHQoMjI2NDIpLHQoNTNlMyksdCg4ODY0NyksdCg4MTg5NSksdCg0ODIzNiksdCg3MzgyMiksdCgxNTU3MiksdCg2OTMxOCksdCg2NTAzMiksdCg3OTA3MyksdCgxMTQzMCksdCgzODQ1MSksdCgxODEzMiksdCgxNzQ4MiksdCg1NjA5NCl9LDI2MjAzOihjLGwsdCk9Pnt0KDk2MTA4''@;'; put 'put ''KSx0KDU2MDk0KX0sNTI0NDQ6KGMsbCx0KT0+e3QoOTA1NzEpLHQoNTYwOTQpfSw2NTg0NjooYyxsLHQpPT57dCg3MTAzKSx0KDgyNTg2KSx0KDkyNTUyKSx0KDQzNzYpLHQoNzUxNTMpLHQoMTE4NzkpLHQoNTI2NTApLHQoMzExMDQpLHQoMjE4ODMpLHQoMzU0MzMpLHQoNTVlMyksdCgxNTkz''@;'; put 'put ''MiksdCg1NDQzKSx0KDI2MzE2KSx0KDU2MDk0KX0sNDI0NjooYyxsLHQpPT57dCg4MzAxKSx0KDk0MTE2KSx0KDc4NjA0KSx0KDM5NjM4KSx0KDQwNDApLHQoNjgzMDUpLHQoNzQ3MDEpLHQoMjAzNDEpLHQoNTYwOTQpfSwxMDc0MzooYyxsLHQpPT57dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5''@;'; put 'put ''MCksdCg3MTYzMiksdCg1NjA5NCl9LDU2NDQyOihjLGwsdCk9Pnt0KDEyMjIwKSx0KDIzNDgzKSx0KDIwOTU3KSx0KDgyOTc1KSx0KDMyNDA1KSx0KDE3MjI0KSx0KDI4ODcyKSx0KDQ0ODk0KSx0KDEwMTc3KSx0KDY0OTc5KSx0KDg5MDExKSx0KDU0NTkxKSx0KDQ3MzM0KSx0KDcwODMpLHQo''@;'; put 'put ''NjkyMTMpLHQoMzg0MzcpLHQoNjIyMjApLHQoNzY1NDkpLHQoNDI4MTgpLHQoMjg1NDMpLHQoMzU1OSksdCg4NDE1MyksdCg0MDQwKSx0KDY4MzA1KSx0KDc0NzAxKSx0KDIwMzQxKSx0KDU2MDk0KX0sMTg4ODM6KGMsbCx0KT0+e3QoOTk2NTApLHQoMTc0ODIpLHQoNTYwOTQpfSw5MzUzOihj''@;'; put 'put ''LGwsdCk9Pnt0KDc3NDkxKSx0KDc0OTA3KSx0KDc5MTAwKSx0KDE5MjY5KSx0KDkxMzE5KSx0KDc5NzMyKSx0KDExNzYpLHQoMzEwNyksdCg2MTY5MSksdCg1NjA5NCl9LDYzMzg3OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgVHlwZUVy''@;'; put 'put ''cm9yKGwrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gbH19LDE1MTIyOihjLGwsdCk9Pnt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJOdW1iZXIiIT1uKGUpKXRocm93IFR5cGVFcnJvcihzKTtyZXR1cm4rZX19LDg4''@;'; put 'put ''MTg0OihjLGwsdCk9Pnt2YXIgbj10KDY3NTc0KSgidW5zY29wYWJsZXMiKSxlPUFycmF5LnByb3RvdHlwZTtudWxsPT1lW25dJiZ0KDMzMzQxKShlLG4se30pLGMuZXhwb3J0cz1mdW5jdGlvbihzKXtlW25dW3NdPSEwfX0sMjg4Mjg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkx''@;'; put 'put ''MjEyKSghMCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxhKXtyZXR1cm4gcysoYT9uKGUscykubGVuZ3RoOjEpfX0sMTY0NDA6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQsbixlKXtpZighKGwgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09ZSYmZSBpbiBsKXRocm93IFR5cGVFcnJvcihuKyI6''@;'; put 'put ''IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBsfX0sNDIyODooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFuKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LDg0NDM4OihjLGwsdCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCgxODI3MCksZT10KDcwMTU3KSxzPXQoODE0ODUpO2MuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih1LGYpe3ZhciBpPW4odGhpcyksdj1zKGkubGVuZ3RoKSxwPWUodSx2KSxkPWUoZix2KSxtPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNb''@;'; put 'put ''Ml06dm9pZCAwLEU9TWF0aC5taW4oKHZvaWQgMD09PW0/djplKG0sdikpLWQsdi1wKSxnPTE7Zm9yKGQ8cCYmcDxkK0UmJihnPS0xLGQrPUUtMSxwKz1FLTEpO0UtLSA+MDspZCBpbiBpP2lbcF09aVtkXTpkZWxldGUgaVtwXSxwKz1nLGQrPWc7cmV0dXJuIGl9fSwzNTU2NDooYyxsLHQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBuPXQoMTgyNzApLGU9dCg3MDE1Nykscz10KDgxNDg1KTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7Zm9yKHZhciBmPW4odGhpcyksaT1zKGYubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1lKHY+MT9hcmd1bWVudHNbMV06dm9pZCAwLGkpLGQ9dj4yP2FyZ3Vt''@;'; put 'put ''ZW50c1syXTp2b2lkIDAsbT12b2lkIDA9PT1kP2k6ZShkLGkpO20+cDspZltwKytdPXU7cmV0dXJuIGZ9fSw4MDk1NjooYyxsLHQpPT57dmFyIG49dCg0ODc5MCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7dmFyIGE9W107cmV0dXJuIG4oZSwhMSxhLnB1c2gsYSxzKSxhfX0sNjE0NjQ6KGMs''@;'; put 'put ''bCx0KT0+e3ZhciBuPXQoNTcyMjEpLGU9dCg4MTQ4NSkscz10KDcwMTU3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKHUsZixpKXt2YXIgbSx2PW4odSkscD1lKHYubGVuZ3RoKSxkPXMoaSxwKTtpZihhJiZmIT1mKXtmb3IoO3A+ZDspaWYoKG09dltkKytdKSE9bSly''@;'; put 'put ''ZXR1cm4hMH1lbHNlIGZvcig7cD5kO2QrKylpZigoYXx8ZCBpbiB2KSYmdltkXT09PWYpcmV0dXJuIGF8fGR8fDA7cmV0dXJuIWEmJi0xfX19LDY2MTc5OihjLGwsdCk9Pnt2YXIgbj10KDM1MDUyKSxlPXQoNjEyNDkpLHM9dCgxODI3MCksYT10KDgxNDg1KSx1PXQoOTMxOTEpO2MuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihmLGkpe3ZhciB2PTE9PWYscD0yPT1mLGQ9Mz09ZixtPTQ9PWYsRT02PT1mLGc9NT09Znx8RSxEPWl8fHU7cmV0dXJuIGZ1bmN0aW9uKEYseCx3KXtmb3IodmFyIFUsWixDPXMoRiksST1lKEMpLE09bih4LHcsMyksVD1hKEkubGVuZ3RoKSxiPTAsTD12P0QoRixUKTpwP0Qo''@;'; put 'put ''RiwwKTp2b2lkIDA7VD5iO2IrKylpZigoZ3x8YiBpbiBJKSYmKFo9TShVPUlbYl0sYixDKSxmKSlpZih2KUxbYl09WjtlbHNlIGlmKFopc3dpdGNoKGYpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIFU7Y2FzZSA2OnJldHVybiBiO2Nhc2UgMjpMLnB1c2goVSl9ZWxzZSBpZihtKXJl''@;'; put 'put ''dHVybiExO3JldHVybiBFPy0xOmR8fG0/bTpMfX19LDY1NDM6KGMsbCx0KT0+e3ZhciBuPXQoNjMzODcpLGU9dCgxODI3MCkscz10KDYxMjQ5KSxhPXQoODE0ODUpO2MuZXhwb3J0cz1mdW5jdGlvbih1LGYsaSx2LHApe24oZik7dmFyIGQ9ZSh1KSxtPXMoZCksRT1hKGQubGVuZ3RoKSxnPXA/''@;'; put 'put ''RS0xOjAsRD1wPy0xOjE7aWYoaTwyKWZvcig7Oyl7aWYoZyBpbiBtKXt2PW1bZ10sZys9RDticmVha31pZihnKz1ELHA/ZzwwOkU8PWcpdGhyb3cgVHlwZUVycm9yKCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9Zm9yKDtwP2c+PTA6RT5nO2crPUQpZyBp''@;'; put 'put ''biBtJiYodj1mKHYsbVtnXSxnLGQpKTtyZXR1cm4gdn19LDYzNjA2OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPXQoNzc5ODEpLHM9dCg2NzU3NCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIHU7cmV0dXJuIGUoYSkmJigiZnVuY3Rpb24iPT10eXBlb2YodT1hLmNv''@;'; put 'put ''bnN0cnVjdG9yKSYmKHU9PT1BcnJheXx8ZSh1LnByb3RvdHlwZSkpJiYodT12b2lkIDApLG4odSkmJm51bGw9PT0odT11W3NdKSYmKHU9dm9pZCAwKSksdm9pZCAwPT09dT9BcnJheTp1fX0sOTMxOTE6KGMsbCx0KT0+e3ZhciBuPXQoNjM2MDYpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3Jl''@;'; put 'put ''dHVybiBuZXcobihlKSkocyl9fSwxNTUzODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjMzODcpLGU9dCg0MzMwNSkscz10KDI0ODc3KSxhPVtdLnNsaWNlLHU9e307Yy5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHYpe3ZhciBwPW4odGhpcyksZD1hLmNhbGwoYXJn''@;'; put 'put ''dW1lbnRzLDEpLG09ZnVuY3Rpb24oKXt2YXIgRT1kLmNvbmNhdChhLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtP2Z1bmN0aW9uKGksdixwKXtpZighKHYgaW4gdSkpe2Zvcih2YXIgZD1bXSxtPTA7bTx2O20rKylkW21dPSJhWyIrbSsiXSI7dVt2XT1GdW5jdGlv''@;'; put 'put ''bigiRixhIiwicmV0dXJuIG5ldyBGKCIrZC5qb2luKCIsIikrIikiKX1yZXR1cm4gdVt2XShpLHApfShwLEUubGVuZ3RoLEUpOnMocCxFLHYpfTtyZXR1cm4gZShwLnByb3RvdHlwZSkmJihtLnByb3RvdHlwZT1wLnByb3RvdHlwZSksbX19LDM0ODQ4OihjLGwsdCk9Pnt2YXIgbj10KDU1MDg5''@;'; put 'put ''KSxlPXQoNjc1NzQpKCJ0b1N0cmluZ1RhZyIpLHM9IkFyZ3VtZW50cyI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7dmFyIGYsaSx2O3JldHVybiB2b2lkIDA9PT11PyJVbmRlZmluZWQiOm51bGw9PT11PyJOdWxsIjoic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mKGk9ZnVuY3Rpb24odSxmKXt0cnl7cmV0dXJuIHVbZl19Y2F0Y2h7fX0oZj1PYmplY3QodSksZSkpP2k6cz9uKGYpOiJPYmplY3QiPT0odj1uKGYpKSYmImZ1bmN0aW9uIj09dHlwZW9mIGYuY2FsbGVlPyJBcmd1bWVudHMiOnZ9fSw1NTA4OTpjPT57dmFyIGw9e30udG9TdHJpbmc7''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCkuc2xpY2UoOCwtMSl9fSwzNjE5NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDc5NjcpLmYsZT10KDg0NzE5KSxzPXQoOTYwNjUpLGE9dCgzNTA1MiksdT10KDE2NDQwKSxmPXQoNDg3OTApLGk9dCg5ODE3NSks''@;'; put 'put ''dj10KDc0OTcwKSxwPXQoNTU3NjIpLGQ9dCgxNzYzKSxtPXQoMTI5ODgpLmZhc3RLZXksRT10KDEyODg4KSxnPWQ/Il9zIjoic2l6ZSIsRD1mdW5jdGlvbihGLHgpe3ZhciBDLHc9bSh4KTtpZigiRiIhPT13KXJldHVybiBGLl9pW3ddO2ZvcihDPUYuX2Y7QztDPUMubilpZihDLms9PXgpcmV0''@;'; put 'put ''dXJuIEN9O2MuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oRix4LHcsQyl7dmFyIEk9RihmdW5jdGlvbihNLFQpe3UoTSxJLHgsIl9pIiksTS5fdD14LE0uX2k9ZShudWxsKSxNLl9mPXZvaWQgMCxNLl9sPXZvaWQgMCxNW2ddPTAsbnVsbCE9VCYmZihULHcsTVtDXSxNKX0pO3Jl''@;'; put 'put ''dHVybiBzKEkucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgVD1FKHRoaXMseCksYj1ULl9pLEw9VC5fZjtMO0w9TC5uKUwucj0hMCxMLnAmJihMLnA9TC5wLm49dm9pZCAwKSxkZWxldGUgYltMLmldO1QuX2Y9VC5fbD12b2lkIDAsVFtnXT0wfSxkZWxldGU6ZnVuY3Rpb24o''@;'; put 'put ''TSl7dmFyIFQ9RSh0aGlzLHgpLGI9RChULE0pO2lmKGIpe3ZhciBMPWIubixVPWIucDtkZWxldGUgVC5faVtiLmldLGIucj0hMCxVJiYoVS5uPUwpLEwmJihMLnA9VSksVC5fZj09YiYmKFQuX2Y9TCksVC5fbD09YiYmKFQuX2w9VSksVFtnXS0tfXJldHVybiEhYn0sZm9yRWFjaDpmdW5jdGlv''@;'; put 'put ''bihUKXtFKHRoaXMseCk7Zm9yKHZhciBMLGI9YShULGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO0w9TD9MLm46dGhpcy5fZjspZm9yKGIoTC52LEwuayx0aGlzKTtMJiZMLnI7KUw9TC5wfSxoYXM6ZnVuY3Rpb24oVCl7cmV0dXJuISFEKEUodGhpcyx4KSxUKX19''@;'; put 'put ''KSxkJiZuKEkucHJvdG90eXBlLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyx4KVtnXX19KSxJfSxkZWY6ZnVuY3Rpb24oRix4LHcpe3ZhciBJLE0sQz1EKEYseCk7cmV0dXJuIEM/Qy52PXc6KEYuX2w9Qz17aTpNPW0oeCwhMCksazp4LHY6dyxwOkk9Ri5fbCxuOnZvaWQg''@;'; put 'put ''MCxyOiExfSxGLl9mfHwoRi5fZj1DKSxJJiYoSS5uPUMpLEZbZ10rKywiRiIhPT1NJiYoRi5faVtNXT1DKSksRn0sZ2V0RW50cnk6RCxzZXRTdHJvbmc6ZnVuY3Rpb24oRix4LHcpe2koRix4LGZ1bmN0aW9uKEMsSSl7dGhpcy5fdD1FKEMseCksdGhpcy5faz1JLHRoaXMuX2w9dm9pZCAwfSxm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgQz10aGlzLEk9Qy5fayxNPUMuX2w7TSYmTS5yOylNPU0ucDtyZXR1cm4gQy5fdCYmKEMuX2w9TT1NP00ubjpDLl90Ll9mKT92KDAsImtleXMiPT1JP00uazoidmFsdWVzIj09ST9NLnY6W00uayxNLnZdKTooQy5fdD12b2lkIDAsdigxKSl9LHc/ImVudHJpZXMi''@;'; put 'put ''OiJ2YWx1ZXMiLCF3LCEwKSxwKHgpfX19LDk5ODgyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5NjA2NSksZT10KDEyOTg4KS5nZXRXZWFrLHM9dCg0MjI4KSxhPXQoNDMzMDUpLHU9dCgxNjQ0MCksZj10KDQ4NzkwKSxpPXQoNjYxNzkpLHY9dCg1NzkxNykscD10KDEyODg4KSxk''@;'; put 'put ''PWkoNSksbT1pKDYpLEU9MCxnPWZ1bmN0aW9uKHgpe3JldHVybiB4Ll9sfHwoeC5fbD1uZXcgRCl9LEQ9ZnVuY3Rpb24oKXt0aGlzLmE9W119LEY9ZnVuY3Rpb24oeCx3KXtyZXR1cm4gZCh4LmEsZnVuY3Rpb24oQyl7cmV0dXJuIENbMF09PT13fSl9O0QucHJvdG90eXBlPXtnZXQ6ZnVuY3Rp''@;'; put 'put ''b24oeCl7dmFyIHc9Rih0aGlzLHgpO2lmKHcpcmV0dXJuIHdbMV19LGhhczpmdW5jdGlvbih4KXtyZXR1cm4hIUYodGhpcyx4KX0sc2V0OmZ1bmN0aW9uKHgsdyl7dmFyIEM9Rih0aGlzLHgpO0M/Q1sxXT13OnRoaXMuYS5wdXNoKFt4LHddKX0sZGVsZXRlOmZ1bmN0aW9uKHgpe3ZhciB3PW0o''@;'; put 'put ''dGhpcy5hLGZ1bmN0aW9uKEMpe3JldHVybiBDWzBdPT09eH0pO3JldHVybn53JiZ0aGlzLmEuc3BsaWNlKHcsMSksISF+d319LGMuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oeCx3LEMsSSl7dmFyIE09eChmdW5jdGlvbihULGIpe3UoVCxNLHcsIl9pIiksVC5fdD13LFQuX2k9''@;'; put 'put ''RSsrLFQuX2w9dm9pZCAwLG51bGwhPWImJmYoYixDLFRbSV0sVCl9KTtyZXR1cm4gbihNLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKFQpe2lmKCFhKFQpKXJldHVybiExO3ZhciBiPWUoVCk7cmV0dXJuITA9PT1iP2cocCh0aGlzLHcpKS5kZWxldGUoVCk6YiYmdihiLHRoaXMuX2kpJiZk''@;'; put 'put ''ZWxldGUgYlt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGIpe2lmKCFhKGIpKXJldHVybiExO3ZhciBMPWUoYik7cmV0dXJuITA9PT1MP2cocCh0aGlzLHcpKS5oYXMoYik6TCYmdihMLHRoaXMuX2kpfX0pLE19LGRlZjpmdW5jdGlvbih4LHcsQyl7dmFyIEk9ZShzKHcpLCEwKTtyZXR1cm4hMD09''@;'; put 'put ''PUk/Zyh4KS5zZXQodyxDKTpJW3guX2ldPUMseH0sdWZzdG9yZTpnfX0sNTg5MzM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoOTIxMjcpLHM9dCgyODg1OSksYT10KDk2MDY1KSx1PXQoMTI5ODgpLGY9dCg0ODc5MCksaT10KDE2NDQwKSx2PXQoNDMzMDUpLHA9''@;'; put 'put ''dCg3OTQ0OCksZD10KDk4OTMxKSxtPXQoMzg0NCksRT10KDk4ODgwKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZyxELEYseCx3LEMpe3ZhciBJPW5bZ10sTT1JLFQ9dz8ic2V0IjoiYWRkIixiPU0mJk0ucHJvdG90eXBlLEw9e30sVT1mdW5jdGlvbihxKXt2YXIgWD1iW3FdO3MoYixxLCJkZWxldGUi''@;'; put 'put ''PT1xP2Z1bmN0aW9uKGV0KXtyZXR1cm4hKEMmJiF2KGV0KSkmJlguY2FsbCh0aGlzLDA9PT1ldD8wOmV0KX06ImhhcyI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIShDJiYhdihWKSkmJlguY2FsbCh0aGlzLDA9PT1WPzA6Vil9OiJnZXQiPT1xP2Z1bmN0aW9uKFYpe3JldHVybiBDJiYhdihWKT92''@;'; put 'put ''b2lkIDA6WC5jYWxsKHRoaXMsMD09PVY/MDpWKX06ImFkZCI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIFguY2FsbCh0aGlzLDA9PT1WPzA6ViksdGhpc306ZnVuY3Rpb24oVixmdCl7cmV0dXJuIFguY2FsbCh0aGlzLDA9PT1WPzA6VixmdCksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''TSYmKEN8fGIuZm9yRWFjaCYmIXAoZnVuY3Rpb24oKXsobmV3IE0pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBaPW5ldyBNLG50PVpbVF0oQz97fTotMCwxKSE9Wix0dD1wKGZ1bmN0aW9uKCl7Wi5oYXMoMSl9KSx5dD1kKGZ1bmN0aW9uKHEpe25ldyBNKHEpfSksbXQ9IUMmJnAoZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIHE9bmV3IE0sWD01O1gtLTspcVtUXShYLFgpO3JldHVybiFxLmhhcygtMCl9KTt5dHx8KChNPUQoZnVuY3Rpb24ocSxYKXtpKHEsTSxnKTt2YXIgZXQ9RShuZXcgSSxxLE0pO3JldHVybiBudWxsIT1YJiZmKFgsdyxldFtUXSxldCksZXR9KSkucHJvdG90eXBlPWIsYi5j''@;'; put 'put ''b25zdHJ1Y3Rvcj1NKSwodHR8fG10KSYmKFUoImRlbGV0ZSIpLFUoImhhcyIpLHcmJlUoImdldCIpKSwobXR8fG50KSYmVShUKSxDJiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIE09eC5nZXRDb25zdHJ1Y3RvcihELGcsdyxUKSxhKE0ucHJvdG90eXBlLEYpLHUuTkVFRD0hMDtyZXR1''@;'; put 'put ''cm4gbShNLGcpLExbZ109TSxlKGUuRytlLlcrZS5GKihNIT1JKSxMKSxDfHx4LnNldFN0cm9uZyhNLGcsdyksTX19LDU2MDk0OmM9Pnt2YXIgbD1jLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWwpfSw2NzIyNzooYyxsLHQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsYSx1KXthIGluIHM/bi5mKHMsYSxlKDAsdSkpOnNbYV09dX19LDM1MDUyOihjLGwsdCk9Pnt2YXIgbj10KDYzMzg3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLGEpe2lmKG4oZSksdm9pZCAwPT09''@;'; put 'put ''cylyZXR1cm4gZTtzd2l0Y2goYSl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZS5jYWxsKHMsdSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odSxmKXtyZXR1cm4gZS5jYWxsKHMsdSxmKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih1LGYsaSl7cmV0dXJuIGUuY2FsbChzLHUs''@;'; put 'put ''ZixpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkocyxhcmd1bWVudHMpfX19LDU1Mzg1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg3OTQ0OCksZT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLHM9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsYT1mdW5jdGlvbih1''@;'; put 'put ''KXtyZXR1cm4gdT45P3U6IjAiK3V9O2MuZXhwb3J0cz1uKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPXMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pfHwhbihmdW5jdGlvbigpe3MuY2FsbChuZXcgRGF0ZShOYU4pKX0pP2Z1bmN0aW9uKCl7''@;'; put 'put ''aWYoIWlzRmluaXRlKGUuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIGY9dGhpcyxpPWYuZ2V0VVRDRnVsbFllYXIoKSx2PWYuZ2V0VVRDTWlsbGlzZWNvbmRzKCkscD1pPDA/Ii0iOmk+OTk5OT8iKyI6IiI7cmV0dXJuIHArKCIwMDAwMCIr''@;'; put 'put ''TWF0aC5hYnMoaSkpLnNsaWNlKHA/LTY6LTQpKyItIithKGYuZ2V0VVRDTW9udGgoKSsxKSsiLSIrYShmLmdldFVUQ0RhdGUoKSkrIlQiK2EoZi5nZXRVVENIb3VycygpKSsiOiIrYShmLmdldFVUQ01pbnV0ZXMoKSkrIjoiK2EoZi5nZXRVVENTZWNvbmRzKCkpKyIuIisodj45OT92OiIwIith''@;'; put 'put ''KHYpKSsiWiJ9OnN9LDIwMTA3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODMwNDgpLHM9Im51bWJlciI7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe2lmKCJzdHJpbmciIT09YSYmYSE9PXMmJiJkZWZhdWx0IiE9PWEpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3Qg''@;'; put 'put ''aGludCIpO3JldHVybiBlKG4odGhpcyksYSE9cyl9fSwzMzQ0OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCl7aWYobnVsbD09bCl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICAiK2wpO3JldHVybiBsfX0sMTc2MzooYyxsLHQpPT57Yy5leHBvcnRzPSF0KDc5NDQ4KShm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDQ2MDM0OihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPXQoNjc1MjYpLmRvY3VtZW50LHM9bihlKSYmbihlLmNyZWF0ZUVsZW1lbnQpO2MuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gcz9lLmNyZWF0ZUVsZW1lbnQoYSk6e319fSw4NjE0MDpjPT57Yy5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2Yi''@;'; put 'put ''LnNwbGl0KCIsIil9LDE1OTY5OihjLGwsdCk9Pnt2YXIgbj10KDUxMzExKSxlPXQoMTA2MCkscz10KDg0NDkpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgdT1uKGEpLGY9ZS5mO2lmKGYpZm9yKHZhciBkLGk9ZihhKSx2PXMuZixwPTA7aS5sZW5ndGg+cDspdi5jYWxsKGEsZD1pW3ArK10p''@;'; put 'put ''JiZ1LnB1c2goZCk7cmV0dXJuIHV9fSw5MjEyNzooYyxsLHQpPT57dmFyIG49dCg2NzUyNiksZT10KDU2MDk0KSxzPXQoMzMzNDEpLGE9dCgyODg1OSksdT10KDM1MDUyKSxmPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24odixwLGQpe3ZhciBJLE0sVCxiLG09diZpLkYsRT12JmkuRyxEPXYmaS5Q''@;'; put 'put ''LEY9diZpLkIseD1FP246diZpLlM/bltwXXx8KG5bcF09e30pOihuW3BdfHx7fSlbZl0sdz1FP2U6ZVtwXXx8KGVbcF09e30pLEM9d1tmXXx8KHdbZl09e30pO2ZvcihJIGluIEUmJihkPXApLGQpVD0oKE09IW0mJngmJnZvaWQgMCE9PXhbSV0pP3g6ZClbSV0sYj1GJiZNP3UoVCxuKTpEJiYi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgVD91KEZ1bmN0aW9uLmNhbGwsVCk6VCx4JiZhKHgsSSxULHYmaS5VKSx3W0ldIT1UJiZzKHcsSSxiKSxEJiZDW0ldIT1UJiYoQ1tJXT1UKX07bi5jb3JlPWUsaS5GPTEsaS5HPTIsaS5TPTQsaS5QPTgsaS5CPTE2LGkuVz0zMixpLlU9NjQsaS5SPTEyOCxjLmV4''@;'; put 'put ''cG9ydHM9aX0sMjUyMDM6KGMsbCx0KT0+e3ZhciBuPXQoNjc1NzQpKCJtYXRjaCIpO2MuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgcz0vLi87dHJ5eyIvLi8iW2VdKHMpfWNhdGNoe3RyeXtyZXR1cm4gc1tuXT0hMSwhIi8uLyJbZV0ocyl9Y2F0Y2h7fX1yZXR1cm4hMH19LDc5NDQ4OmM9Pntj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24obCl7dHJ5e3JldHVybiEhbCgpfWNhdGNoe3JldHVybiEwfX19LDY5MjI4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg5NDExNik7dmFyIG49dCgyODg1OSksZT10KDMzMzQxKSxzPXQoNzk0NDgpLGE9dCgzMzQ0KSx1PXQoNjc1NzQpLGY9dCg2OTYwMCksaT11''@;'; put 'put ''KCJzcGVjaWVzIiksdj0hcyhmdW5jdGlvbigpe3ZhciBkPS8uLztyZXR1cm4gZC5leGVjPWZ1bmN0aW9uKCl7dmFyIG09W107cmV0dXJuIG0uZ3JvdXBzPXthOiI3In0sbX0sIjciIT09IiIucmVwbGFjZShkLCIkPGE+Iil9KSxwPWZ1bmN0aW9uKCl7dmFyIGQ9Lyg/OikvLG09ZC5leGVjO2Qu''@;'; put 'put ''ZXhlYz1mdW5jdGlvbigpe3JldHVybiBtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIEU9ImFiIi5zcGxpdChkKTtyZXR1cm4gMj09PUUubGVuZ3RoJiYiYSI9PT1FWzBdJiYiYiI9PT1FWzFdfSgpO2MuZXhwb3J0cz1mdW5jdGlvbihkLG0sRSl7dmFyIGc9dShkKSxEPSFzKGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIE09e307cmV0dXJuIE1bZ109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZF0oTSl9KSxGPUQ/IXMoZnVuY3Rpb24oKXt2YXIgTT0hMSxUPS9hLztyZXR1cm4gVC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIE09ITAsbnVsbH0sInNwbGl0Ij09PWQmJihULmNvbnN0cnVjdG9yPXt9''@;'; put 'put ''LFQuY29uc3RydWN0b3JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gVH0pLFRbZ10oIiIpLCFNfSk6dm9pZCAwO2lmKCFEfHwhRnx8InJlcGxhY2UiPT09ZCYmIXZ8fCJzcGxpdCI9PT1kJiYhcCl7dmFyIHg9Ly4vW2ddLHc9RShhLGcsIiJbZF0sZnVuY3Rpb24oVCxiLEwsVSxaKXtyZXR1cm4gYi5l''@;'; put 'put ''eGVjPT09Zj9EJiYhWj97ZG9uZTohMCx2YWx1ZTp4LmNhbGwoYixMLFUpfTp7ZG9uZTohMCx2YWx1ZTpULmNhbGwoTCxiLFUpfTp7ZG9uZTohMX19KSxJPXdbMV07bihTdHJpbmcucHJvdG90eXBlLGQsd1swXSksZShSZWdFeHAucHJvdG90eXBlLGcsMj09bT9mdW5jdGlvbihNLFQpe3JldHVy''@;'; put 'put ''biBJLmNhbGwoTSx0aGlzLFQpfTpmdW5jdGlvbihNKXtyZXR1cm4gSS5jYWxsKE0sdGhpcyl9KX19fSwxMTU4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KTtjLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHM9IiI7cmV0dXJuIGUuZ2xvYmFsJiYocys9Imci''@;'; put 'put ''KSxlLmlnbm9yZUNhc2UmJihzKz0iaSIpLGUubXVsdGlsaW5lJiYocys9Im0iKSxlLnVuaWNvZGUmJihzKz0idSIpLGUuc3RpY2t5JiYocys9InkiKSxzfX0sNDg3OTA6KGMsbCx0KT0+e3ZhciBuPXQoMzUwNTIpLGU9dCg5NzM2OCkscz10KDE1MDgpLGE9dCg0MjI4KSx1PXQoODE0ODUpLGY9''@;'; put 'put ''dCgyMDc2MiksaT17fSx2PXt9LHA9Yy5leHBvcnRzPWZ1bmN0aW9uKGQsbSxFLGcsRCl7dmFyIEMsSSxNLFQsRj1EP2Z1bmN0aW9uKCl7cmV0dXJuIGR9OmYoZCkseD1uKEUsZyxtPzI6MSksdz0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBGKXRocm93IFR5cGVFcnJvcihkKyIgaXMgbm90IGl0''@;'; put 'put ''ZXJhYmxlISIpO2lmKHMoRikpe2ZvcihDPXUoZC5sZW5ndGgpO0M+dzt3KyspaWYoKFQ9bT94KGEoST1kW3ddKVswXSxJWzFdKTp4KGRbd10pKT09PWl8fFQ9PT12KXJldHVybiBUfWVsc2UgZm9yKE09Ri5jYWxsKGQpOyEoST1NLm5leHQoKSkuZG9uZTspaWYoKFQ9ZShNLHgsSS52YWx1ZSxt''@;'; put 'put ''KSk9PT1pfHxUPT09dilyZXR1cm4gVH07cC5CUkVBSz1pLHAuUkVUVVJOPXZ9LDQ5NDYxOihjLGwsdCk9PntjLmV4cG9ydHM9dCg0NDU1NikoIm5hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmciLEZ1bmN0aW9uLnRvU3RyaW5nKX0sNjc1MjY6Yz0+e3ZhciBsPWMuZXhwb3J0cz10eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OnR5cGVvZiBzZWxmPCJ1IiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1sKX0sNTc5MTc6Yz0+e3ZhciBsPXt9Lmhhc093blByb3BlcnR5O2Mu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBsLmNhbGwodCxuKX19LDMzMzQxOihjLGwsdCk9Pnt2YXIgbj10KDQ3OTY3KSxlPXQoMTE5OTYpO2MuZXhwb3J0cz10KDE3NjMpP2Z1bmN0aW9uKHMsYSx1KXtyZXR1cm4gbi5mKHMsYSxlKDEsdSkpfTpmdW5jdGlvbihzLGEsdSl7cmV0dXJu''@;'; put 'put ''IHNbYV09dSxzfX0sNjEzMDg6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLmRvY3VtZW50O2MuZXhwb3J0cz1uJiZuLmRvY3VtZW50RWxlbWVudH0sMjI5NTY6KGMsbCx0KT0+e2MuZXhwb3J0cz0hdCgxNzYzKSYmIXQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh0KDQ2MDM0KSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDk4ODgwOihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPXQoMjUxNzApLnNldDtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxhLHUpe3ZhciBpLGY9YS5jb25zdHJ1Y3RvcjtyZXR1cm4gZiE9''@;'; put 'put ''PXUmJiJmdW5jdGlvbiI9PXR5cGVvZiBmJiYoaT1mLnByb3RvdHlwZSkhPT11LnByb3RvdHlwZSYmbihpKSYmZSYmZShzLGkpLHN9fSwyNDg3NzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwsdCxuKXt2YXIgZT12b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlP2wo''@;'; put 'put ''KTpsLmNhbGwobik7Y2FzZSAxOnJldHVybiBlP2wodFswXSk6bC5jYWxsKG4sdFswXSk7Y2FzZSAyOnJldHVybiBlP2wodFswXSx0WzFdKTpsLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gZT9sKHRbMF0sdFsxXSx0WzJdKTpsLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0''@;'; put 'put ''OnJldHVybiBlP2wodFswXSx0WzFdLHRbMl0sdFszXSk6bC5jYWxsKG4sdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGwuYXBwbHkobix0KX19LDYxMjQ5OihjLGwsdCk9Pnt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2Jq''@;'; put 'put ''ZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1uKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LDE1MDg6KGMsbCx0KT0+e3ZhciBuPXQoNjA5MDYpLGU9dCg2NzU3NCkoIml0ZXJhdG9yIikscz1BcnJheS5wcm90b3R5cGU7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiB2b2lk''@;'; put 'put ''IDAhPT1hJiYobi5BcnJheT09PWF8fHNbZV09PT1hKX19LDc3OTgxOihjLGwsdCk9Pnt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocyl7cmV0dXJuIkFycmF5Ij09bihzKX19LDMzODQyOihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPU1hdGguZmxv''@;'; put 'put ''b3I7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiFuKGEpJiZpc0Zpbml0ZShhKSYmZShhKT09PWF9fSw0MzMwNTpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbD9udWxsIT09bDoiZnVuY3Rpb24iPT10eXBlb2YgbH19LDk1NDExOihjLGwsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDQzMzA1KSxlPXQoNTUwODkpLHM9dCg2NzU3NCkoIm1hdGNoIik7Yy5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciB1O3JldHVybiBuKGEpJiYodm9pZCAwIT09KHU9YVtzXSk/ISF1OiJSZWdFeHAiPT1lKGEpKX19LDk3MzY4OihjLGwsdCk9Pnt2YXIgbj10KDQyMjgpO2MuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihlLHMsYSx1KXt0cnl7cmV0dXJuIHU/cyhuKGEpWzBdLGFbMV0pOnMoYSl9Y2F0Y2goaSl7dmFyIGY9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09ZiYmbihmLmNhbGwoZSkpLGl9fX0sNjAzMjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoODQ3MTkpLGU9dCgx''@;'; put 'put ''MTk5Nikscz10KDM4NDQpLGE9e307dCgzMzM0MSkoYSx0KDY3NTc0KSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksYy5leHBvcnRzPWZ1bmN0aW9uKHUsZixpKXt1LnByb3RvdHlwZT1uKGEse25leHQ6ZSgxLGkpfSkscyh1LGYrIiBJdGVyYXRvciIpfX0sOTgxNzU6KGMs''@;'; put 'put ''bCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDIyNzUwKSxlPXQoOTIxMjcpLHM9dCgyODg1OSksYT10KDMzMzQxKSx1PXQoNjA5MDYpLGY9dCg2MDMyKSxpPXQoMzg0NCksdj10KDQwNjI3KSxwPXQoNjc1NzQpKCJpdGVyYXRvciIpLGQ9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSks''@;'; put 'put ''RT0ia2V5cyIsZz0idmFsdWVzIixEPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2MuZXhwb3J0cz1mdW5jdGlvbihGLHgsdyxDLEksTSxUKXtmKHcseCxDKTt2YXIgWCxldCxWLGI9ZnVuY3Rpb24oZnQpe2lmKCFkJiZmdCBpbiBudClyZXR1cm4gbnRbZnRdO3N3aXRjaChmdCl7Y2FzZSBFOmNh''@;'; put 'put ''c2UgZzpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHcodGhpcyxmdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgdyh0aGlzLGZ0KX19LEw9eCsiIEl0ZXJhdG9yIixVPUk9PWcsWj0hMSxudD1GLnByb3RvdHlwZSx0dD1udFtwXXx8bnRbIkBAaXRlcmF0b3IiXXx8SSYmbnRb''@;'; put 'put ''SV0seXQ9dHR8fGIoSSksbXQ9ST9VP2IoImVudHJpZXMiKTp5dDp2b2lkIDAscT0iQXJyYXkiPT14JiZudC5lbnRyaWVzfHx0dDtpZihxJiYoVj12KHEuY2FsbChuZXcgRikpKSE9PU9iamVjdC5wcm90b3R5cGUmJlYubmV4dCYmKGkoVixMLCEwKSwhbiYmImZ1bmN0aW9uIiE9dHlwZW9mIFZb''@;'; put 'put ''cF0mJmEoVixwLEQpKSxVJiZ0dCYmdHQubmFtZSE9PWcmJihaPSEwLHl0PWZ1bmN0aW9uKCl7cmV0dXJuIHR0LmNhbGwodGhpcyl9KSwoIW58fFQpJiYoZHx8Wnx8IW50W3BdKSYmYShudCxwLHl0KSx1W3hdPXl0LHVbTF09RCxJKWlmKFg9e3ZhbHVlczpVP3l0OmIoZyksa2V5czpNP3l0OmIo''@;'; put 'put ''RSksZW50cmllczptdH0sVClmb3IoZXQgaW4gWClldCBpbiBudHx8cyhudCxldCxYW2V0XSk7ZWxzZSBlKGUuUCtlLkYqKGR8fFopLHgsWCk7cmV0dXJuIFh9fSw5ODkzMTooYyxsLHQpPT57dmFyIG49dCg2NzU3NCkoIml0ZXJhdG9yIiksZT0hMTt0cnl7dmFyIHM9WzddW25dKCk7cy5yZXR1''@;'; put 'put ''cm49ZnVuY3Rpb24oKXtlPSEwfSxBcnJheS5mcm9tKHMsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2h7fWMuZXhwb3J0cz1mdW5jdGlvbihhLHUpe2lmKCF1JiYhZSlyZXR1cm4hMTt2YXIgZj0hMTt0cnl7dmFyIGk9WzddLHY9aVtuXSgpO3YubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25l''@;'; put 'put ''OmY9ITB9fSxpW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGEoaSl9Y2F0Y2h7fXJldHVybiBmfX0sNzQ5NzA6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFsfX19LDYwOTA2OmM9PntjLmV4cG9ydHM9e319LDIyNzUwOmM9PntjLmV4cG9ydHM9ITF9''@;'; put 'put ''LDc1NTUxOmM9Pnt2YXIgbD1NYXRoLmV4cG0xO2MuZXhwb3J0cz0hbHx8bCgxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxsKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fC0yZS0xNyE9bCgtMmUtMTcpP2Z1bmN0aW9uKG4pe3JldHVybiAwPT0obj0rbik/bjpuPi0xZS02JiZuPDFlLTY/bituKm4v''@;'; put 'put ''MjpNYXRoLmV4cChuKS0xfTpsfSw3MjEyMjooYyxsLHQpPT57dmFyIG49dCgzNzMzKSxlPU1hdGgucG93LHM9ZSgyLC01MiksYT1lKDIsLTIzKSx1PWUoMiwxMjcpKigyLWEpLGY9ZSgyLC0xMjYpO2MuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24ocCl7dmFyIEUsZyxkPU1hdGguYWJz''@;'; put 'put ''KHApLG09bihwKTtyZXR1cm4gZDxmP20qKGQvZi9hKzEvcy0xL3MpKmYqYTooZz0oRT0oMSthL3MpKmQpLShFLWQpKT51fHxnIT1nP20qKDEvMCk6bSpnfX0sNzE0NzM6Yz0+e2MuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQq''@;'; put 'put ''dC8yOk1hdGgubG9nKDErdCl9fSwzNzMzOmM9PntjLmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSwxMjk4ODooYyxsLHQpPT57dmFyIG49dCg0NDE1KSgibWV0YSIpLGU9dCg0MzMwNSkscz10KDU3OTE3KSxhPXQoNDc5''@;'; put 'put ''NjcpLmYsdT0wLGY9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0saT0hdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gZihPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLHY9ZnVuY3Rpb24oZyl7YShnLG4se3ZhbHVlOntpOiJPIisgKyt1LHc6e319fSl9''@;'; put 'put ''LEU9Yy5leHBvcnRzPXtLRVk6bixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZyxEKXtpZighZShnKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGc/ZzooInN0cmluZyI9PXR5cGVvZiBnPyJTIjoiUCIpK2c7aWYoIXMoZyxuKSl7aWYoIWYoZykpcmV0dXJuIkYiO2lmKCFEKXJldHVybiJFIjt2''@;'; put 'put ''KGcpfXJldHVybiBnW25dLml9LGdldFdlYWs6ZnVuY3Rpb24oZyxEKXtpZighcyhnLG4pKXtpZighZihnKSlyZXR1cm4hMDtpZighRClyZXR1cm4hMTt2KGcpfXJldHVybiBnW25dLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGcpe3JldHVybiBpJiZFLk5FRUQmJmYoZykmJiFzKGcsbikmJnYoZyks''@;'; put 'put ''Z319fSw5NzM4MDooYyxsLHQpPT57dmFyIG49dCg5MzM4NiksZT10KDkyMTI3KSxzPXQoNDQ1NTYpKCJtZXRhZGF0YSIpLGE9cy5zdG9yZXx8KHMuc3RvcmU9bmV3KHQoNzkzOTcpKSksdT1mdW5jdGlvbihFLGcsRCl7dmFyIEY9YS5nZXQoRSk7aWYoIUYpe2lmKCFEKXJldHVybjthLnNldChF''@;'; put 'put ''LEY9bmV3IG4pfXZhciB4PUYuZ2V0KGcpO2lmKCF4KXtpZighRClyZXR1cm47Ri5zZXQoZyx4PW5ldyBuKX1yZXR1cm4geH07Yy5leHBvcnRzPXtzdG9yZTphLG1hcDp1LGhhczpmdW5jdGlvbihFLGcsRCl7dmFyIEY9dShnLEQsITEpO3JldHVybiB2b2lkIDAhPT1GJiZGLmhhcyhFKX0sZ2V0''@;'; put 'put ''OmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMD09PUY/dm9pZCAwOkYuZ2V0KEUpfSxzZXQ6ZnVuY3Rpb24oRSxnLEQsRil7dShELEYsITApLnNldChFLGcpfSxrZXlzOmZ1bmN0aW9uKEUsZyl7dmFyIEQ9dShFLGcsITEpLEY9W107cmV0dXJuIEQmJkQuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbih4LHcpe0YucHVzaCh3KX0pLEZ9LGtleTpmdW5jdGlvbihFKXtyZXR1cm4gdm9pZCAwPT09RXx8InN5bWJvbCI9PXR5cGVvZiBFP0U6U3RyaW5nKEUpfSxleHA6ZnVuY3Rpb24oRSl7ZShlLlMsIlJlZmxlY3QiLEUpfX19LDI4MjA2OihjLGwsdCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIG49dCgxNzYzKSxlPXQoNTEzMTEpLHM9dCgxMDYwKSxhPXQoODQ0OSksdT10KDE4MjcwKSxmPXQoNjEyNDkpLGk9T2JqZWN0LmFzc2lnbjtjLmV4cG9ydHM9IWl8fHQoNzk0NDgpKGZ1bmN0aW9uKCl7dmFyIHY9e30scD17fSxkPVN5bWJvbCgpLG09ImFiY2RlZmdoaWprbG1ub3Bx''@;'; put 'put ''cnN0IjtyZXR1cm4gdltkXT03LG0uc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oRSl7cFtFXT1FfSksNyE9aSh7fSx2KVtkXXx8T2JqZWN0LmtleXMoaSh7fSxwKSkuam9pbigiIikhPW19KT9mdW5jdGlvbihwLGQpe2Zvcih2YXIgbT11KHApLEU9YXJndW1lbnRzLmxlbmd0aCxnPTEsRD1z''@;'; put 'put ''LmYsRj1hLmY7RT5nOylmb3IodmFyIE0seD1mKGFyZ3VtZW50c1tnKytdKSx3PUQ/ZSh4KS5jb25jYXQoRCh4KSk6ZSh4KSxDPXcubGVuZ3RoLEk9MDtDPkk7KU09d1tJKytdLCghbnx8Ri5jYWxsKHgsTSkpJiYobVtNXT14W01dKTtyZXR1cm4gbX06aX0sODQ3MTk6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDIyOCksZT10KDIxNjI2KSxzPXQoODYxNDApLGE9dCg0MDc2NikoIklFX1BST1RPIiksdT1mdW5jdGlvbigpe30sZj0icHJvdG90eXBlIixpPWZ1bmN0aW9uKCl7dmFyIEUsdj10KDQ2MDM0KSgiaWZyYW1lIikscD1zLmxlbmd0aDtmb3Iodi5zdHlsZS5kaXNwbGF5PSJub25lIix0KDYx''@;'; put 'put ''MzA4KS5hcHBlbmRDaGlsZCh2KSx2LnNyYz0iamF2YXNjcmlwdDoiLChFPXYuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLEUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksRS5jbG9zZSgpLGk9RS5GO3AtLTspZGVsZXRlIGlbZl1bc1twXV07cmV0''@;'; put 'put ''dXJuIGkoKX07Yy5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHAsZCl7dmFyIG07cmV0dXJuIG51bGwhPT1wPyh1W2ZdPW4ocCksbT1uZXcgdSx1W2ZdPW51bGwsbVthXT1wKTptPWkoKSx2b2lkIDA9PT1kP206ZShtLGQpfX0sNDc5Njc6KGMsbCx0KT0+e3ZhciBuPXQoNDIyOCks''@;'; put 'put ''ZT10KDIyOTU2KSxzPXQoODMwNDgpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2wuZj10KDE3NjMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihmLGksdil7aWYobihmKSxpPXMoaSwhMCksbih2KSxlKXRyeXtyZXR1cm4gYShmLGksdil9Y2F0Y2h7fWlmKCJnZXQiaW4gdnx8InNl''@;'; put 'put ''dCJpbiB2KXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHYmJihmW2ldPXYudmFsdWUpLGZ9fSwyMTYyNjooYyxsLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDQyMjgpLHM9dCg1MTMxMSk7Yy5leHBvcnRzPXQoMTc2Myk/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odSxmKXtlKHUpO2Zvcih2YXIgZCxpPXMoZiksdj1pLmxlbmd0aCxwPTA7dj5wOyluLmYodSxkPWlbcCsrXSxmW2RdKTtyZXR1cm4gdX19LDY4NjQxOihjLGwsdCk9Pnt2YXIgbj10KDg0NDkpLGU9dCgxMTk5Nikscz10KDU3MjIxKSxhPXQoODMw''@;'; put 'put ''NDgpLHU9dCg1NzkxNyksZj10KDIyOTU2KSxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7bC5mPXQoMTc2Myk/aTpmdW5jdGlvbihwLGQpe2lmKHA9cyhwKSxkPWEoZCwhMCksZil0cnl7cmV0dXJuIGkocCxkKX1jYXRjaHt9aWYodShwLGQpKXJldHVybiBlKCFuLmYuY2FsbChw''@;'; put 'put ''LGQpLHBbZF0pfX0sNDc2NTooYyxsLHQpPT57dmFyIG49dCg1NzIyMSksZT10KDU5NDE1KS5mLHM9e30udG9TdHJpbmcsYT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cp''@;'; put 'put ''OltdO2MuZXhwb3J0cy5mPWZ1bmN0aW9uKGkpe3JldHVybiBhJiYiW29iamVjdCBXaW5kb3ddIj09cy5jYWxsKGkpP2Z1bmN0aW9uKGYpe3RyeXtyZXR1cm4gZShmKX1jYXRjaHtyZXR1cm4gYS5zbGljZSgpfX0oaSk6ZShuKGkpKX19LDU5NDE1OihjLGwsdCk9Pnt2YXIgbj10KDM0NTYxKSxl''@;'; put 'put ''PXQoODYxNDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7bC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihhKXtyZXR1cm4gbihhLGUpfX0sMTA2MDooYyxsKT0+e2wuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSw0MDYyNzooYyxsLHQpPT57dmFy''@;'; put 'put ''IG49dCg1NzkxNyksZT10KDE4MjcwKSxzPXQoNDA3NjYpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtjLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbih1KXtyZXR1cm4gdT1lKHUpLG4odSxzKT91W3NdOiJmdW5jdGlvbiI9PXR5cGVvZiB1LmNvbnN0cnVj''@;'; put 'put ''dG9yJiZ1IGluc3RhbmNlb2YgdS5jb25zdHJ1Y3Rvcj91LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp1IGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LDM0NTYxOihjLGwsdCk9Pnt2YXIgbj10KDU3OTE3KSxlPXQoNTcyMjEpLHM9dCg2MTQ2NCkoITEpLGE9dCg0MDc2NikoIklFX1BST1RPIik7''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKHUsZil7dmFyIGQsaT1lKHUpLHY9MCxwPVtdO2ZvcihkIGluIGkpZCE9YSYmbihpLGQpJiZwLnB1c2goZCk7Zm9yKDtmLmxlbmd0aD52OyluKGksZD1mW3YrK10pJiYofnMocCxkKXx8cC5wdXNoKGQpKTtyZXR1cm4gcH19LDUxMzExOihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDM0NTYxKSxlPXQoODYxNDApO2MuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oYSl7cmV0dXJuIG4oYSxlKX19LDg0NDk6KGMsbCk9PntsLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LDgwOTIzOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTYwOTQpLHM9dCg3OTQ0''@;'; put 'put ''OCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGEsdSl7dmFyIGY9KGUuT2JqZWN0fHx7fSlbYV18fE9iamVjdFthXSxpPXt9O2lbYV09dShmKSxuKG4uUytuLkYqcyhmdW5jdGlvbigpe2YoMSl9KSwiT2JqZWN0IixpKX19LDk2MjIyOihjLGwsdCk9Pnt2YXIgbj10KDU5NDE1KSxlPXQoMTA2MCkscz10''@;'; put 'put ''KDQyMjgpLGE9dCg2NzUyNikuUmVmbGVjdDtjLmV4cG9ydHM9YSYmYS5vd25LZXlzfHxmdW5jdGlvbihmKXt2YXIgaT1uLmYocyhmKSksdj1lLmY7cmV0dXJuIHY/aS5jb25jYXQodihmKSk6aX19LDMzNTg5OihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KS5wYXJzZUZsb2F0LGU9dCg0MDYyOSku''@;'; put 'put ''dHJpbTtjLmV4cG9ydHM9MS9uKHQoNzg0NTEpKyItMCIpIT0tMS8wP2Z1bmN0aW9uKGEpe3ZhciB1PWUoU3RyaW5nKGEpLDMpLGY9bih1KTtyZXR1cm4gMD09PWYmJiItIj09dS5jaGFyQXQoMCk/LTA6Zn06bn0sODI3Mzg6KGMsbCx0KT0+e3ZhciBuPXQoNjc1MjYpLnBhcnNlSW50LGU9dCg0''@;'; put 'put ''MDYyOSkudHJpbSxzPXQoNzg0NTEpLGE9L15bLStdPzBbeFhdLztjLmV4cG9ydHM9OCE9PW4ocysiMDgiKXx8MjIhPT1uKHMrIjB4MTYiKT9mdW5jdGlvbihmLGkpe3ZhciB2PWUoU3RyaW5nKGYpLDMpO3JldHVybiBuKHYsaT4+PjB8fChhLnRlc3Qodik/MTY6MTApKX06bn0sMTE5OTY6Yz0+''@;'; put 'put ''e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZsKSxjb25maWd1cmFibGU6ISgyJmwpLHdyaXRhYmxlOiEoNCZsKSx2YWx1ZTp0fX19LDk2MDY1OihjLGwsdCk9Pnt2YXIgbj10KDI4ODU5KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLGEpe2Zvcih2YXIgdSBp''@;'; put 'put ''biBzKW4oZSx1LHNbdV0sYSk7cmV0dXJuIGV9fSwyODg1OTooYyxsLHQpPT57dmFyIG49dCg2NzUyNiksZT10KDMzMzQxKSxzPXQoNTc5MTcpLGE9dCg0NDE1KSgic3JjIiksdT10KDQ5NDYxKSxmPSJ0b1N0cmluZyIsaT0oIiIrdSkuc3BsaXQoZik7dCg1NjA5NCkuaW5zcGVjdFNvdXJjZT1m''@;'; put 'put ''dW5jdGlvbih2KXtyZXR1cm4gdS5jYWxsKHYpfSwoYy5leHBvcnRzPWZ1bmN0aW9uKHYscCxkLG0pe3ZhciBFPSJmdW5jdGlvbiI9PXR5cGVvZiBkO0UmJihzKGQsIm5hbWUiKXx8ZShkLCJuYW1lIixwKSksdltwXSE9PWQmJihFJiYocyhkLGEpfHxlKGQsYSx2W3BdPyIiK3ZbcF06aS5qb2lu''@;'; put 'put ''KFN0cmluZyhwKSkpKSx2PT09bj92W3BdPWQ6bT92W3BdP3ZbcF09ZDplKHYscCxkKTooZGVsZXRlIHZbcF0sZSh2LHAsZCkpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxmLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fHUuY2FsbCh0aGlzKX0pfSw1''@;'; put 'put ''MjUzNTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgpLGU9UmVnRXhwLnByb3RvdHlwZS5leGVjO2MuZXhwb3J0cz1mdW5jdGlvbihzLGEpe3ZhciB1PXMuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIGY9dS5jYWxsKHMsYSk7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBmfWlmKCJSZWdFeHAiIT09bihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24g''@;'; put 'put ''aW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGUuY2FsbChzLGEpfX0sNjk2MDA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcCxkLG49dCgxMTU4KSxlPVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxzPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxhPWUsdT0ibGFzdEluZGV4IixmPShk''@;'; put 'put ''PS9iKi9nLGUuY2FsbChwPS9hLywiYSIpLGUuY2FsbChkLCJhIiksMCE9PXBbdV18fDAhPT1kW3VdKSxpPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsoZnx8aSkmJihhPWZ1bmN0aW9uKGQpe3ZhciBFLGcsRCxGLG09dGhpcztyZXR1cm4gaSYmKGc9bmV3IFJlZ0V4cCgiXiIrbS5zb3Vy''@;'; put 'put ''Y2UrIiQoPyFcXHMpIixuLmNhbGwobSkpKSxmJiYoRT1tW3VdKSxEPWUuY2FsbChtLGQpLGYmJkQmJihtW3VdPW0uZ2xvYmFsP0QuaW5kZXgrRFswXS5sZW5ndGg6RSksaSYmRCYmRC5sZW5ndGg+MSYmcy5jYWxsKERbMF0sZyxmdW5jdGlvbigpe2ZvcihGPTE7Rjxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LTI7RisrKXZvaWQgMD09PWFyZ3VtZW50c1tGXSYmKERbRl09dm9pZCAwKX0pLER9KSxjLmV4cG9ydHM9YX0sNzM1OTpjPT57Yy5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PW4/MCE9PXR8fDEvdD09MS9uOnQhPXQmJm4hPW59fSwyNTE3MDooYyxsLHQpPT57''@;'; put 'put ''dmFyIG49dCg0MzMwNSksZT10KDQyMjgpLHM9ZnVuY3Rpb24oYSx1KXtpZihlKGEpLCFuKHUpJiZudWxsIT09dSl0aHJvdyBUeXBlRXJyb3IodSsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtjLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlu''@;'; put 'put ''e30/ZnVuY3Rpb24oYSx1LGYpe3RyeXsoZj10KDM1MDUyKShGdW5jdGlvbi5jYWxsLHQoNjg2NDEpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShhLFtdKSx1PSEoYSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaHt1PSEwfXJldHVybiBmdW5jdGlvbih2LHApe3JldHVy''@;'; put 'put ''biBzKHYscCksdT92Ll9fcHJvdG9fXz1wOmYodixwKSx2fX0oe30sITEpOnZvaWQgMCksY2hlY2s6c319LDU1NzYyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDQ3OTY3KSxzPXQoMTc2MyksYT10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih1KXt2YXIgZj1uW3VdO3MmJmYmJiFmW2FdJiZlLmYoZixhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwzODQ0OihjLGwsdCk9Pnt2YXIgbj10KDQ3OTY3KS5mLGU9dCg1NzkxNykscz10KDY3NTc0KSgidG9TdHJpbmdUYWciKTtjLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24oYSx1LGYpe2EmJiFlKGE9Zj9hOmEucHJvdG90eXBlLHMpJiZuKGEscyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnV9KX19LDQwNzY2OihjLGwsdCk9Pnt2YXIgbj10KDQ0NTU2KSgia2V5cyIpLGU9dCg0NDE1KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG5bc118fChu''@;'; put 'put ''W3NdPWUocykpfX0sNDQ1NTY6KGMsbCx0KT0+e3ZhciBuPXQoNTYwOTQpLGU9dCg2NzUyNikscz0iX19jb3JlLWpzX3NoYXJlZF9fIixhPWVbc118fChlW3NdPXt9KTsoYy5leHBvcnRzPWZ1bmN0aW9uKHUsZil7cmV0dXJuIGFbdV18fChhW3VdPXZvaWQgMCE9PWY/Zjp7fSl9KSgidmVyc2lv''@;'; put 'put ''bnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnQoMjI3NTApPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sMTkxOTA6KGMsbCx0KT0+e3ZhciBuPXQoNDIyOCksZT10KDYzMzg3KSxzPXQoNjc1''@;'; put 'put ''NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9uKGEsdSl7dmFyIGksZj1uKGEpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1mfHxudWxsPT0oaT1uKGYpW3NdKT91OmUoaSl9fSw4Njg4NDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNzk0NDgpO2MuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihlLHMpe3JldHVybiEhZSYmbihmdW5jdGlvbigpe3M/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChudWxsKX0pfX0sOTEyMTI6KGMsbCx0KT0+e3ZhciBuPXQoMjcwODcpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGEs''@;'; put 'put ''dSl7dmFyIHAsZCxmPVN0cmluZyhlKGEpKSxpPW4odSksdj1mLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj12P3M/IiI6dm9pZCAwOihwPWYuY2hhckNvZGVBdChpKSk8NTUyOTZ8fHA+NTYzMTl8fGkrMT09PXZ8fChkPWYuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8ZD41NzM0Mz9zP2YuY2hhckF0''@;'; put 'put ''KGkpOnA6cz9mLnNsaWNlKGksaSsyKTpkLTU2MzIwKyhwLTU1Mjk2PDwxMCkrNjU1MzZ9fX0sNzg5NDI6KGMsbCx0KT0+e3ZhciBuPXQoOTU0MTEpLGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyxhLHUpe2lmKG4oYSkpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmcjIit1KyIgZG9lc24n''@;'; put 'put ''dCBhY2NlcHQgcmVnZXghIik7cmV0dXJuIFN0cmluZyhlKHMpKX19LDUyNDY4OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzk0NDgpLHM9dCgzMzQ0KSxhPS8iL2csdT1mdW5jdGlvbihmLGksdixwKXt2YXIgZD1TdHJpbmcocyhmKSksbT0iPCIraTtyZXR1cm4iIiE9PXYmJihtKz0i''@;'; put 'put ''ICIrdisnPSInK1N0cmluZyhwKS5yZXBsYWNlKGEsIiZxdW90OyIpKyciJyksbSsiPiIrZCsiPC8iK2krIj4ifTtjLmV4cG9ydHM9ZnVuY3Rpb24oZixpKXt2YXIgdj17fTt2W2ZdPWkodSksbihuLlArbi5GKmUoZnVuY3Rpb24oKXt2YXIgcD0iIltmXSgnIicpO3JldHVybiBwIT09cC50b0xv''@;'; put 'put ''d2VyQ2FzZSgpfHxwLnNwbGl0KCciJykubGVuZ3RoPjN9KSwiU3RyaW5nIix2KX19LDI3OTI2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgyNzA4NyksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgdT1TdHJpbmcoZSh0aGlzKSksZj0iIixpPW4oYSk7aWYoaTww''@;'; put 'put ''fHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHUrPXUpKTEmaSYmKGYrPXUpO3JldHVybiBmfX0sNDA2Mjk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzQ0KSxzPXQoNzk0NDgpLGE9dCg3ODQ1MSks''@;'; put 'put ''dT0iWyIrYSsiXSIsaT1SZWdFeHAoIl4iK3UrdSsiKiIpLHY9UmVnRXhwKHUrdSsiKiQiKSxwPWZ1bmN0aW9uKG0sRSxnKXt2YXIgRD17fSxGPXMoZnVuY3Rpb24oKXtyZXR1cm4hIWFbbV0oKXx8Ilx1MjAwYlx4ODUiIT0iXHUyMDBiXHg4NSJbbV0oKX0pLHg9RFttXT1GP0UoZCk6YVttXTtn''@;'; put 'put ''JiYoRFtnXT14KSxuKG4uUCtuLkYqRiwiU3RyaW5nIixEKX0sZD1wLnRyaW09ZnVuY3Rpb24obSxFKXtyZXR1cm4gbT1TdHJpbmcoZShtKSksMSZFJiYobT1tLnJlcGxhY2UoaSwiIikpLDImRSYmKG09bS5yZXBsYWNlKHYsIiIpKSxtfTtjLmV4cG9ydHM9cH0sNzg0NTE6Yz0+e2MuZXhwb3J0''@;'; put 'put ''cz0iXHRcblx2XGZcciBceGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDJmXHUyMDVmXHUzMDAwXHUyMDI4XHUyMDI5XHVmZWZmIn0sNzAxNTc6KGMsbCx0KT0+e3ZhciBuPXQoMjcwODcp''@;'; put 'put ''LGU9TWF0aC5tYXgscz1NYXRoLm1pbjtjLmV4cG9ydHM9ZnVuY3Rpb24oYSx1KXtyZXR1cm4oYT1uKGEpKTwwP2UoYSt1LDApOnMoYSx1KX19LDI3MDg3OmM9Pnt2YXIgbD1NYXRoLmNlaWwsdD1NYXRoLmZsb29yO2MuZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gaXNOYU4obj0rbik/MDoo''@;'; put 'put ''bj4wP3Q6bCkobil9fSw1NzIyMTooYyxsLHQpPT57dmFyIG49dCg2MTI0OSksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gbihlKHMpKX19LDgxNDg1OihjLGwsdCk9Pnt2YXIgbj10KDI3MDg3KSxlPU1hdGgubWluO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4g''@;'; put 'put ''cz4wP2UobihzKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sMTgyNzA6KGMsbCx0KT0+e3ZhciBuPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobihlKSl9fSw4MzA0ODooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYo''@;'; put 'put ''IW4oZSkpcmV0dXJuIGU7dmFyIGEsdTtpZihzJiYiZnVuY3Rpb24iPT10eXBlb2YoYT1lLnRvU3RyaW5nKSYmIW4odT1hLmNhbGwoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2YoYT1lLnZhbHVlT2YpJiYhbih1PWEuY2FsbChlKSl8fCFzJiYiZnVuY3Rpb24iPT10eXBlb2YoYT1lLnRvU3RyaW5n''@;'; put 'put ''KSYmIW4odT1hLmNhbGwoZSkpKXJldHVybiB1O3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw0NDE1OmM9Pnt2YXIgbD0wLHQ9TWF0aC5yYW5kb20oKTtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIlN5bWJvbCgiLmNvbmNh''@;'; put 'put ''dCh2b2lkIDA9PT1uPyIiOm4sIilfIiwoKytsK3QpLnRvU3RyaW5nKDM2KSl9fSwxMjg4ODooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSl8fGUuX3QhPT1zKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3Mr''@;'; put 'put ''IiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LDIzMDExOihjLGwsdCk9Pnt2YXIgbj10KDY3NTI2KSxlPXQoNTYwOTQpLHM9dCgyMjc1MCksYT10KDQ3OTYwKSx1PXQoNDc5NjcpLmY7Yy5leHBvcnRzPWZ1bmN0aW9uKGYpe3ZhciBpPWUuU3ltYm9sfHwoZS5TeW1ib2w9cz97fTpuLlN5bWJvbHx8''@;'; put 'put ''e30pOyJfIiE9Zi5jaGFyQXQoMCkmJiEoZiBpbiBpKSYmdShpLGYse3ZhbHVlOmEuZihmKX0pfX0sNDc5NjA6KGMsbCx0KT0+e2wuZj10KDY3NTc0KX0sNjc1NzQ6KGMsbCx0KT0+e3ZhciBuPXQoNDQ1NTYpKCJ3a3MiKSxlPXQoNDQxNSkscz10KDY3NTI2KS5TeW1ib2wsYT0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgczsoYy5leHBvcnRzPWZ1bmN0aW9uKGYpe3JldHVybiBuW2ZdfHwobltmXT1hJiZzW2ZdfHwoYT9zOmUpKCJTeW1ib2wuIitmKSl9KS5zdG9yZT1ufSwyMDc2MjooYyxsLHQpPT57dmFyIG49dCgzNDg0OCksZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPXQoNjA5MDYpO2MuZXhw''@;'; put 'put ''b3J0cz10KDU2MDk0KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihhKXtpZihudWxsIT1hKXJldHVybiBhW2VdfHxhWyJAQGl0ZXJhdG9yIl18fHNbbihhKV19fSwxOTYyMDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkFycmF5Iix7Y29weVdpdGhpbjp0KDg0NDM4KX0pLHQo''@;'; put 'put ''ODgxODQpKCJjb3B5V2l0aGluIil9LDU4ODg4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSg0KTtuKG4uUCtuLkYqIXQoODY4ODQpKFtdLmV2ZXJ5LCEwKSwiQXJyYXkiLHtldmVyeTpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRz''@;'; put 'put ''WzFdKX19KX0sNTc3NjI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJBcnJheSIse2ZpbGw6dCgzNTU2NCl9KSx0KDg4MTg0KSgiZmlsbCIpfSwzOTgxMzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMik7bihuLlArbi5GKiF0KDg2ODg0''@;'; put 'put ''KShbXS5maWx0ZXIsITApLCJBcnJheSIse2ZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRzWzFdKX19KX0sNzUzNjk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDYpLHM9ImZpbmRJbmRleCIsYT0hMDtzIGluW10mJkFy''@;'; put 'put ''cmF5KDEpW3NdKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbihmKXtyZXR1cm4gZSh0aGlzLGYsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSwxNTE0NDooYyxsLHQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNSkscz0iZmluZCIsYT0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24oZil7cmV0dXJuIGUodGhpcyxmLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1''@;'; put 'put ''bWVudHNbMV06dm9pZCAwKX19KSx0KDg4MTg0KShzKX0sMzUwNDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMCkscz10KDg2ODg0KShbXS5mb3JFYWNoLCEwKTtuKG4uUCtuLkYqIXMsIkFycmF5Iix7Zm9yRWFjaDpmdW5jdGlvbih1KXtyZXR1cm4g''@;'; put 'put ''ZSh0aGlzLHUsYXJndW1lbnRzWzFdKX19KX0sOTM4NjM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM1MDUyKSxlPXQoOTIxMjcpLHM9dCgxODI3MCksYT10KDk3MzY4KSx1PXQoMTUwOCksZj10KDgxNDg1KSxpPXQoNjcyMjcpLHY9dCgyMDc2Mik7ZShlLlMrZS5GKiF0KDk4OTMx''@;'; put 'put ''KShmdW5jdGlvbihwKXtBcnJheS5mcm9tKHApfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihkKXt2YXIgQyxJLE0sVCxtPXMoZCksRT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LGc9YXJndW1lbnRzLmxlbmd0aCxEPWc+MT9hcmd1bWVudHNbMV06dm9pZCAwLEY9dm9pZCAw''@;'; put 'put ''IT09RCx4PTAsdz12KG0pO2lmKEYmJihEPW4oRCxnPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09d3x8RT09QXJyYXkmJnUodykpZm9yKEk9bmV3IEUoQz1mKG0ubGVuZ3RoKSk7Qz54O3grKylpKEkseCxGP0QobVt4XSx4KTptW3hdKTtlbHNlIGZvcihUPXcuY2FsbChtKSxJPW5l''@;'; put 'put ''dyBFOyEoTT1ULm5leHQoKSkuZG9uZTt4KyspaShJLHgsRj9hKFQsRCxbTS52YWx1ZSx4XSwhMCk6TS52YWx1ZSk7cmV0dXJuIEkubGVuZ3RoPXgsSX19KX0sMzQ2MDk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjE0NjQpKCExKSxzPVtdLmluZGV4T2YsYT0h''@;'; put 'put ''IXMmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGF8fCF0KDg2ODg0KShzKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihmKXtyZXR1cm4gYT9zLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDplKHRoaXMsZixhcmd1bWVudHNbMV0pfX0pfSw0Nzg5OTooYyxsLHQpPT57dmFy''@;'; put 'put ''IG49dCg5MjEyNyk7bihuLlMsIkFycmF5Iix7aXNBcnJheTp0KDc3OTgxKX0pfSw5NTE2NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoODgxODQpLGU9dCg3NDk3MCkscz10KDYwOTA2KSxhPXQoNTcyMjEpO2MuZXhwb3J0cz10KDk4MTc1KShBcnJheSwiQXJyYXkiLGZ1bmN0aW9u''@;'; put 'put ''KHUsZil7dGhpcy5fdD1hKHUpLHRoaXMuX2k9MCx0aGlzLl9rPWZ9LGZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fdCxmPXRoaXMuX2ssaT10aGlzLl9pKys7cmV0dXJuIXV8fGk+PXUubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxlKDEpKTplKDAsImtleXMiPT1mP2k6InZhbHVlcyI9PWY/dVtpXTpb''@;'; put 'put ''aSx1W2ldXSl9LCJ2YWx1ZXMiKSxzLkFyZ3VtZW50cz1zLkFycmF5LG4oImtleXMiKSxuKCJ2YWx1ZXMiKSxuKCJlbnRyaWVzIil9LDk2NTExOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPVtdLmpvaW47bihuLlArbi5GKih0KDYxMjQ5KSE9T2Jq''@;'; put 'put ''ZWN0fHwhdCg4Njg4NCkocykpLCJBcnJheSIse2pvaW46ZnVuY3Rpb24odSl7cmV0dXJuIHMuY2FsbChlKHRoaXMpLHZvaWQgMD09PXU/IiwiOnUpfX0pfSwzMzcwNjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg1NzIyMSkscz10KDI3MDg3KSxhPXQoODE0ODUp''@;'; put 'put ''LHU9W10ubGFzdEluZGV4T2YsZj0hIXUmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihmfHwhdCg4Njg4NCkodSkpLCJBcnJheSIse2xhc3RJbmRleE9mOmZ1bmN0aW9uKHYpe2lmKGYpcmV0dXJuIHUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBwPWUodGhpcyks''@;'; put 'put ''ZD1hKHAubGVuZ3RoKSxtPWQtMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYobT1NYXRoLm1pbihtLHMoYXJndW1lbnRzWzFdKSkpLG08MCYmKG09ZCttKTttPj0wO20tLSlpZihtIGluIHAmJnBbbV09PT12KXJldHVybiBtfHwwO3JldHVybi0xfX0pfSw1NDkxMzooYyxsLHQpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMSk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRzWzFdKX19KX0sODIxODk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDky''@;'; put 'put ''MTI3KSxlPXQoNjcyMjcpO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKHMpaW5zdGFuY2VvZiBzKX0pLCJBcnJheSIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsdT1hcmd1bWVudHMubGVuZ3RoLGY9bmV3KCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKHUpO3U+YTspZShmLGEsYXJndW1lbnRzW2ErK10pO3JldHVybiBmLmxlbmd0aD11LGZ9fSl9LDQ3ODc0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRiohdCg4Njg4NCkoW10ucmVk''@;'; put 'put ''dWNlUmlnaHQsITApLCJBcnJheSIse3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKGEpe3JldHVybiBlKHRoaXMsYSxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMCl9fSl9LDgxNDQ5OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRioh''@;'; put 'put ''dCg4Njg4NCkoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGUodGhpcyxhLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sOTU4NTM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjEzMDgpLHM9dCg1''@;'; put 'put ''NTA4OSksYT10KDcwMTU3KSx1PXQoODE0ODUpLGY9W10uc2xpY2U7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZSYmZi5jYWxsKGUpfSksIkFycmF5Iix7c2xpY2U6ZnVuY3Rpb24odixwKXt2YXIgZD11KHRoaXMubGVuZ3RoKSxtPXModGhpcyk7aWYocD12b2lkIDA9PT1wP2Q6cCwi''@;'; put 'put ''QXJyYXkiPT1tKXJldHVybiBmLmNhbGwodGhpcyx2LHApO2Zvcih2YXIgRT1hKHYsZCksZz1hKHAsZCksRD11KGctRSksRj1uZXcgQXJyYXkoRCkseD0wO3g8RDt4KyspRlt4XT0iU3RyaW5nIj09bT90aGlzLmNoYXJBdChFK3gpOnRoaXNbRSt4XTtyZXR1cm4gRn19KX0sODY1MTE6KGMsbCx0''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDMpO24obi5QK24uRiohdCg4Njg4NCkoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5jdGlvbihhKXtyZXR1cm4gZSh0aGlzLGEsYXJndW1lbnRzWzFdKX19KX0sOTcwNzU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjMzODcpLHM9dCgxODI3MCksYT10KDc5NDQ4KSx1PVtdLnNvcnQsZj1bMSwyLDNdO24obi5QK24uRiooYShmdW5jdGlvbigpe2Yuc29ydCh2b2lkIDApfSl8fCFhKGZ1bmN0aW9uKCl7Zi5zb3J0KG51bGwpfSl8fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7''@;'; put 'put ''c29ydDpmdW5jdGlvbih2KXtyZXR1cm4gdm9pZCAwPT09dj91LmNhbGwocyh0aGlzKSk6dS5jYWxsKHModGhpcyksZSh2KSl9fSl9LDc2MjA5OihjLGwsdCk9Pnt0KDU1NzYyKSgiQXJyYXkiKX0sMTMyOTI6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJEYXRlIix7bm93OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LDk0Mjk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg1NTM4NSk7bihuLlArbi5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PWUpLCJEYXRlIix7dG9JU09TdHJpbmc6ZX0pfSw1MjM0NjooYyxsLHQpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgxODI3MCkscz10KDgzMDQ4KTtuKG4uUCtuLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gMX19KX0pLCJEYXRlIix7dG9KU09OOmZ1bmN0aW9uKHUpe3ZhciBmPWUodGhpcyksaT1zKGYpO3JldHVybiJudW1iZXIiIT10eXBlb2YgaXx8aXNGaW5pdGUoaSk/Zi50b0lTT1N0cmluZygpOm51bGx9fSl9LDQ4OTUxOihjLGwsdCk9Pnt2YXIgbj10KDY3NTc0KSgidG9Q''@;'; put 'put ''cmltaXRpdmUiKSxlPURhdGUucHJvdG90eXBlO24gaW4gZXx8dCgzMzM0MSkoZSxuLHQoMjAxMDcpKX0sNzg0OTooYyxsLHQpPT57dmFyIG49RGF0ZS5wcm90b3R5cGUsZT0iSW52YWxpZCBEYXRlIixzPSJ0b1N0cmluZyIsYT1uW3NdLHU9bi5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPWUm''@;'; put 'put ''JnQoMjg4NTkpKG4scyxmdW5jdGlvbigpe3ZhciBpPXUuY2FsbCh0aGlzKTtyZXR1cm4gaT09aT9hLmNhbGwodGhpcyk6ZX0pfSw2NTA0OTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkZ1bmN0aW9uIix7YmluZDp0KDE1NTM4KX0pfSw5NTUwMjooYyxsLHQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoNDMzMDUpLGU9dCg0MDYyNykscz10KDY3NTc0KSgiaGFzSW5zdGFuY2UiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZTtzIGluIGF8fHQoNDc5NjcpLmYoYSxzLHt2YWx1ZTpmdW5jdGlvbih1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IW4odSkpcmV0dXJuITE7aWYo''@;'; put 'put ''IW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB1IGluc3RhbmNlb2YgdGhpcztmb3IoO3U9ZSh1KTspaWYodGhpcy5wcm90b3R5cGU9PT11KXJldHVybiEwO3JldHVybiExfX0pfSw3MDQ4OTooYyxsLHQpPT57dmFyIG49dCg0Nzk2NykuZixlPUZ1bmN0aW9uLnByb3RvdHlwZSxzPS9eXHMqZnVu''@;'; put 'put ''Y3Rpb24gKFteIChdKikvLGE9Im5hbWUiO2EgaW4gZXx8dCgxNzYzKSYmbihlLGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMpLm1hdGNoKHMpWzFdfWNhdGNoe3JldHVybiIifX19KX0sOTMzODY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''bj10KDM2MTk3KSxlPXQoMTI4ODgpLHM9Ik1hcCI7Yy5leHBvcnRzPXQoNTg5MzMpKHMsZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKHUpe3ZhciBmPW4uZ2V0''@;'; put 'put ''RW50cnkoZSh0aGlzLHMpLHUpO3JldHVybiBmJiZmLnZ9LHNldDpmdW5jdGlvbih1LGYpe3JldHVybiBuLmRlZihlKHRoaXMscyksMD09PXU/MDp1LGYpfX0sbiwhMCl9LDc2NjQ4OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzE0NzMpLHM9TWF0aC5zcXJ0LGE9TWF0aC5hY29zaDtu''@;'; put 'put ''KG4uUytuLkYqIShhJiY3MTA9PU1hdGguZmxvb3IoYShOdW1iZXIuTUFYX1ZBTFVFKSkmJmEoMS8wKT09MS8wKSwiTWF0aCIse2Fjb3NoOmZ1bmN0aW9uKGYpe3JldHVybihmPStmKTwxP05hTjpmPjk0OTA2MjY1LjYyNDI1MTU2P01hdGgubG9nKGYpK01hdGguTE4yOmUoZi0xK3MoZi0xKSpz''@;'; put 'put ''KGYrMSkpfX0pfSw1NTc3MTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmFzaW5oO24obi5TK24uRiohKGUmJjEvZSgwKT4wKSwiTWF0aCIse2FzaW5oOmZ1bmN0aW9uIHMoYSl7cmV0dXJuIGlzRmluaXRlKGE9K2EpJiYwIT1hP2E8MD8tcygtYSk6TWF0aC5sb2coYStNYXRoLnNx''@;'; put 'put ''cnQoYSphKzEpKTphfX0pfSw4MjM5MjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmF0YW5oO24obi5TK24uRiohKGUmJjEvZSgtMCk8MCksIk1hdGgiLHthdGFuaDpmdW5jdGlvbihhKXtyZXR1cm4gMD09KGE9K2EpP2E6TWF0aC5sb2coKDErYSkvKDEtYSkpLzJ9fSl9LDcyMzM1''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoMzczMyk7bihuLlMsIk1hdGgiLHtjYnJ0OmZ1bmN0aW9uKGEpe3JldHVybiBlKGE9K2EpKk1hdGgucG93KE1hdGguYWJzKGEpLDEvMyl9fSl9LDc0ODk2OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2NsejMyOmZ1''@;'; put 'put ''bmN0aW9uKHMpe3JldHVybihzPj4+PTApPzMxLU1hdGguZmxvb3IoTWF0aC5sb2cocysuNSkqTWF0aC5MT0cyRSk6MzJ9fSl9LDk0NTIxOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguZXhwO24obi5TLCJNYXRoIix7Y29zaDpmdW5jdGlvbihhKXtyZXR1cm4oZShhPSthKStlKC1h''@;'; put 'put ''KSkvMn19KX0sMjkxNDc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg3NTU1MSk7bihuLlMrbi5GKihlIT1NYXRoLmV4cG0xKSwiTWF0aCIse2V4cG0xOmV9KX0sNDEzMTg6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7ZnJvdW5kOnQoNzIxMjIpfSl9LDg0MzUy''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24oYSx1KXtmb3IodmFyIGQsbSxmPTAsaT0wLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7aTx2OylwPChkPWUoYXJndW1lbnRzW2krK10pKT8oZj1mKihtPXAvZCkqbSsxLHA9ZCk6''@;'; put 'put ''Zis9ZD4wPyhtPWQvcCkqbTpkO3JldHVybiBwPT09MS8wPzEvMDpwKk1hdGguc3FydChmKX19KX0sMTUzMjc6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5pbXVsO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVu''@;'; put 'put ''Z3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKGEsdSl7dmFyIGY9NjU1MzUsaT0rYSx2PSt1LHA9ZiZpLGQ9ZiZ2O3JldHVybiAwfHAqZCsoKGYmaT4+PjE2KSpkK3AqKGYmdj4+PjE2KTw8MTY+Pj4wKX19KX0sNTc1MDk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7''@;'; put 'put ''bG9nMTA6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpKk1hdGguTE9HMTBFfX0pfSwxNTkwOTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtsb2cxcDp0KDcxNDczKX0pfSw3OTU4NDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtsb2cy''@;'; put 'put ''OmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKS9NYXRoLkxOMn19KX0sNDAzNDU6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJNYXRoIix7c2lnbjp0KDM3MzMpfSl9LDk5MTM0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpLHM9TWF0aC5leHA7bihuLlMr''@;'; put 'put ''bi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT0hTWF0aC5zaW5oKC0yZS0xNyl9KSwiTWF0aCIse3Npbmg6ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguYWJzKHU9K3UpPDE/KGUodSktZSgtdSkpLzI6KHModS0xKS1zKC11LTEpKSooTWF0aC5FLzIpfX0pfSw2NzkwMTooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc1NTUxKSxzPU1hdGguZXhwO24obi5TLCJNYXRoIix7dGFuaDpmdW5jdGlvbih1KXt2YXIgZj1lKHU9K3UpLGk9ZSgtdSk7cmV0dXJuIGY9PTEvMD8xOmk9PTEvMD8tMTooZi1pKS8ocyh1KStzKC11KSl9fSl9LDQ2NTkyOihjLGwsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KTtuKG4uUywiTWF0aCIse3RydW5jOmZ1bmN0aW9uKHMpe3JldHVybihzPjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwpKHMpfX0pfSw2NDUwOTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDU1MDg5KSxhPXQoOTg4ODApLHU9dCg4''@;'; put 'put ''MzA0OCksZj10KDc5NDQ4KSxpPXQoNTk0MTUpLmYsdj10KDY4NjQxKS5mLHA9dCg0Nzk2NykuZixkPXQoNDA2MjkpLnRyaW0sbT0iTnVtYmVyIixFPW5bbV0sZz1FLEQ9RS5wcm90b3R5cGUsRj1zKHQoODQ3MTkpKEQpKT09bSx4PSJ0cmltImluIFN0cmluZy5wcm90b3R5cGUsdz1mdW5jdGlv''@;'; put 'put ''bihUKXt2YXIgYj11KFQsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgYiYmYi5sZW5ndGg+Mil7dmFyIFUsWixudCxMPShiPXg/Yi50cmltKCk6ZChiLDMpKS5jaGFyQ29kZUF0KDApO2lmKDQzPT09THx8NDU9PT1MKXtpZig4OD09PShVPWIuY2hhckNvZGVBdCgyKSl8fDEyMD09PVUpcmV0dXJu''@;'; put 'put ''IE5hTn1lbHNlIGlmKDQ4PT09TCl7c3dpdGNoKGIuY2hhckNvZGVBdCgxKSl7Y2FzZSA2NjpjYXNlIDk4Olo9MixudD00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOlo9OCxudD01NTticmVhaztkZWZhdWx0OnJldHVybitifWZvcih2YXIgcSx0dD1iLnNsaWNlKDIpLHl0PTAsbXQ9dHQubGVu''@;'; put 'put ''Z3RoO3l0PG10O3l0KyspaWYoKHE9dHQuY2hhckNvZGVBdCh5dCkpPDQ4fHxxPm50KXJldHVybiBOYU47cmV0dXJuIHBhcnNlSW50KHR0LFopfX1yZXR1cm4rYn07aWYoIUUoIiAwbzEiKXx8IUUoIjBiMSIpfHxFKCIrMHgxIikpe0U9ZnVuY3Rpb24oYil7dmFyIEw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwxPzA6YixVPXRoaXM7cmV0dXJuIFUgaW5zdGFuY2VvZiBFJiYoRj9mKGZ1bmN0aW9uKCl7RC52YWx1ZU9mLmNhbGwoVSl9KTpzKFUpIT1tKT9hKG5ldyBnKHcoTCkpLFUsRSk6dyhMKX07Zm9yKHZhciBNLEM9dCgxNzYzKT9pKGcpOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElW''@;'; put 'put ''RV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSxJPTA7Qy5sZW5ndGg+''@;'; put 'put ''STtJKyspZShnLE09Q1tJXSkmJiFlKEUsTSkmJnAoRSxNLHYoZyxNKSk7RS5wcm90b3R5cGU9RCxELmNvbnN0cnVjdG9yPUUsdCgyODg1OSkobixtLEUpfX0sMzQ0MTk6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJOdW1iZXIiLHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSw5''@;'; put 'put ''MTkzMzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDY3NTI2KS5pc0Zpbml0ZTtuKG4uUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhJiZlKGEpfX0pfSw1NTUzODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJl''@;'; put 'put ''ciIse2lzSW50ZWdlcjp0KDMzODQyKX0pfSwzOTQ5NzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSw0MTA0OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoMzM4NDIpLHM9TWF0aC5hYnM7bihuLlMs''@;'; put 'put ''Ik51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSkmJnModSk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDYwMjEwOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LDU2NTc2''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSw4NDQzNzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUZsb2F0IT1lKSwiTnVtYmVyIix7''@;'; put 'put ''cGFyc2VGbG9hdDplfSl9LDg4MDUwOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODI3MzgpO24obi5TK24uRiooTnVtYmVyLnBhcnNlSW50IT1lKSwiTnVtYmVyIix7cGFyc2VJbnQ6ZX0pfSwzNzcyNzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCgyNzA4''@;'; put 'put ''Nykscz10KDE1MTIyKSxhPXQoMjc5MjYpLHU9MS4udG9GaXhlZCxmPU1hdGguZmxvb3IsaT1bMCwwLDAsMCwwLDBdLHY9Ik51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiLHA9IjAiLGQ9ZnVuY3Rpb24oRix4KXtmb3IodmFyIHc9LTEsQz14Oysrdzw2OylpW3ddPShDKz1G''@;'; put 'put ''Kmlbd10pJTFlNyxDPWYoQy8xZTcpfSxtPWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD02LHc9MDstLXg+PTA7KWlbeF09Zigodys9aVt4XSkvRiksdz13JUYqMWU3fSxFPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPTYseD0iIjstLUY+PTA7KWlmKCIiIT09eHx8MD09PUZ8fDAhPT1pW0ZdKXt2YXIgdz1T''@;'; put 'put ''dHJpbmcoaVtGXSk7eD0iIj09PXg/dzp4K2EuY2FsbChwLDctdy5sZW5ndGgpK3d9cmV0dXJuIHh9LGc9ZnVuY3Rpb24oRix4LHcpe3JldHVybiAwPT09eD93OnglMj09MT9nKEYseC0xLHcqRik6ZyhGKkYseC8yLHcpfTtuKG4uUCtuLkYqKCEhdSYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQo''@;'; put 'put ''Myl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCF0KDc5NDQ4KShmdW5jdGlvbigpe3UuY2FsbCh7fSl9KSksIk51bWJlciIse3RvRml4ZWQ6ZnVu''@;'; put 'put ''Y3Rpb24oeCl7dmFyIFQsYixMLFUsdz1zKHRoaXMsdiksQz1lKHgpLEk9IiIsTT1wO2lmKEM8MHx8Qz4yMCl0aHJvdyBSYW5nZUVycm9yKHYpO2lmKHchPXcpcmV0dXJuIk5hTiI7aWYodzw9LTFlMjF8fHc+PTFlMjEpcmV0dXJuIFN0cmluZyh3KTtpZih3PDAmJihJPSItIix3PS13KSx3PjFl''@;'; put 'put ''LTIxKWlmKFQ9ZnVuY3Rpb24oRil7Zm9yKHZhciB4PTAsdz1GO3c+PTQwOTY7KXgrPTEyLHcvPTQwOTY7Zm9yKDt3Pj0yOyl4Kz0xLHcvPTI7cmV0dXJuIHh9KHcqZygyLDY5LDEpKS02OSxiPVQ8MD93KmcoMiwtVCwxKTp3L2coMixULDEpLGIqPTQ1MDM1OTk2MjczNzA0OTYsKFQ9NTItVCk+''@;'; put 'put ''MCl7Zm9yKGQoMCxiKSxMPUM7TD49NzspZCgxZTcsMCksTC09Nztmb3IoZChnKDEwLEwsMSksMCksTD1ULTE7TD49MjM7KW0oMTw8MjMpLEwtPTIzO20oMTw8TCksZCgxLDEpLG0oMiksTT1FKCl9ZWxzZSBkKDAsYiksZCgxPDwtVCwwKSxNPUUoKSthLmNhbGwocCxDKTtyZXR1cm4gTT1DPjA/''@;'; put 'put ''SSsoKFU9TS5sZW5ndGgpPD1DPyIwLiIrYS5jYWxsKHAsQy1VKStNOk0uc2xpY2UoMCxVLUMpKyIuIitNLnNsaWNlKFUtQykpOkkrTX19KX0sNjcwMTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDE1MTIyKSxhPTEuLnRvUHJlY2lzaW9uO24o''@;'; put 'put ''bi5QK24uRiooZShmdW5jdGlvbigpe3JldHVybiIxIiE9PWEuY2FsbCgxLHZvaWQgMCl9KXx8IWUoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbihmKXt2YXIgaT1zKHRoaXMsIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9j''@;'; put 'put ''YXRpb24hIik7cmV0dXJuIHZvaWQgMD09PWY/YS5jYWxsKGkpOmEuY2FsbChpLGYpfX0pfSwxMTQzMDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMrbi5GLCJPYmplY3QiLHthc3NpZ246dCgyODIwNil9KX0sOTM1OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiT2JqZWN0''@;'; put 'put ''Iix7Y3JlYXRlOnQoODQ3MTkpfSl9LDg5NDQ4OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYqIXQoMTc2MyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6dCgyMTYyNil9KX0sNjYwNjQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TK24uRiohdCgxNzYzKSwiT2Jq''@;'; put 'put ''ZWN0Iix7ZGVmaW5lUHJvcGVydHk6dCg0Nzk2NykuZn0pfSw0ODIzNjooYyxsLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgiZnJlZXplIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSwy''@;'; put 'put ''MjY0MjooYyxsLHQpPT57dmFyIG49dCg1NzIyMSksZT10KDY4NjQxKS5mO3QoODA5MjMpKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsdSl7cmV0dXJuIGUobihhKSx1KX19KX0sODE4OTU6KGMsbCx0KT0+e3QoODA5MjMpKCJnZXRPd25Q''@;'; put 'put ''cm9wZXJ0eU5hbWVzIixmdW5jdGlvbigpe3JldHVybiB0KDQ3NjUpLmZ9KX0sNTNlMzooYyxsLHQpPT57dmFyIG49dCgxODI3MCksZT10KDQwNjI3KTt0KDgwOTIzKSgiZ2V0UHJvdG90eXBlT2YiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlKG4oYSkpfX0pfSw3OTA3''@;'; put 'put ''MzooYyxsLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRXh0ZW5zaWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiEhbihhKSYmKCFlfHxlKGEpKX19KX0sNjkzMTg6KGMsbCx0KT0+e3ZhciBuPXQoNDMzMDUpO3QoODA5MjMpKCJpc0Zyb3plbiIsZnVu''@;'; put 'put ''Y3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiFuKGEpfHwhIWUmJmUoYSl9fSl9LDY1MDMyOihjLGwsdCk9Pnt2YXIgbj10KDQzMzA1KTt0KDgwOTIzKSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4hbihhKXx8ISFlJiZlKGEpfX0pfSwz''@;'; put 'put ''ODQ1MTooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse2lzOnQoNzM1OSl9KX0sODg2NDc6KGMsbCx0KT0+e3ZhciBuPXQoMTgyNzApLGU9dCg1MTMxMSk7dCg4MDkyMykoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlKG4oYSkpfX0p''@;'; put 'put ''fSwxNTU3MjooYyxsLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDczODIyOihjLGwsdCk9Pnt2YXIgbj10''@;'; put 'put ''KDQzMzA1KSxlPXQoMTI5ODgpLm9uRnJlZXplO3QoODA5MjMpKCJzZWFsIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSwxODEzMjooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9m''@;'; put 'put ''OnQoMjUxNzApLnNldH0pfSwxNzQ4MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgpLGU9e307ZVt0KDY3NTc0KSgidG9TdHJpbmdUYWciKV09InoiLGUrIiIhPSJbb2JqZWN0IHpdIiYmdCgyODg1OSkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIltvYmplY3QgIituKHRoaXMpKyJdIn0sITApfSw5NjEwODooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNTg5KTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWUpLHtwYXJzZUZsb2F0OmV9KX0sOTA1NzE6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg4MjczOCk7bihu''@;'; put 'put ''Lkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9KX0sNzEwMzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDYzMzg3KSxzPXQoNDIyOCksYT0odCg2NzUyNikuUmVmbGVjdHx8e30pLmFwcGx5LHU9RnVuY3Rpb24uYXBwbHk7bihuLlMrbi5GKiF0KDc5NDQ4KShmdW5jdGlvbigp''@;'; put 'put ''e2EoZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6ZnVuY3Rpb24oaSx2LHApe3ZhciBkPWUoaSksbT1zKHApO3JldHVybiBhP2EoZCx2LG0pOnUuY2FsbChkLHYsbSl9fSl9LDgyNTg2OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODQ3MTkpLHM9dCg2MzM4NyksYT10KDQy''@;'; put 'put ''MjgpLHU9dCg0MzMwNSksZj10KDc5NDQ4KSxpPXQoMTU1MzgpLHY9KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1mKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4hKHYoZnVuY3Rpb24oKXt9LFtdLG0paW5zdGFuY2VvZiBtKX0pLGQ9IWYoZnVuY3Rpb24oKXt2KGZ1''@;'; put 'put ''bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKHB8fGQpLCJSZWZsZWN0Iix7Y29uc3RydWN0OmZ1bmN0aW9uKEUsZyl7cyhFKSxhKGcpO3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg8Mz9FOnMoYXJndW1lbnRzWzJdKTtpZihkJiYhcClyZXR1cm4gdihFLGcsRCk7aWYoRT09RCl7c3dpdGNoKGcubGVu''@;'; put 'put ''Z3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBFO2Nhc2UgMTpyZXR1cm4gbmV3IEUoZ1swXSk7Y2FzZSAyOnJldHVybiBuZXcgRShnWzBdLGdbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0sZ1szXSl9dmFyIEY9''@;'; put 'put ''W251bGxdO3JldHVybiBGLnB1c2guYXBwbHkoRixnKSxuZXcoaS5hcHBseShFLEYpKX12YXIgeD1ELnByb3RvdHlwZSx3PWUodSh4KT94Ok9iamVjdC5wcm90b3R5cGUpLEM9RnVuY3Rpb24uYXBwbHkuY2FsbChFLHcsZyk7cmV0dXJuIHUoQyk/Qzp3fX0pfSw5MjU1MjooYyxsLHQpPT57dmFy''@;'; put 'put ''IG49dCg0Nzk2NyksZT10KDkyMTI3KSxzPXQoNDIyOCksYT10KDgzMDQ4KTtlKGUuUytlLkYqdCg3OTQ0OCkoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KG4uZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSksIlJlZmxlY3QiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlv''@;'; put 'put ''bihmLGksdil7cyhmKSxpPWEoaSwhMCkscyh2KTt0cnl7cmV0dXJuIG4uZihmLGksdiksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSw0Mzc2OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNjg2NDEpLmYscz10KDQyMjgpO24obi5TLCJSZWZsZWN0Iix7ZGVsZXRlUHJvcGVydHk6ZnVuY3Rp''@;'; put 'put ''b24odSxmKXt2YXIgaT1lKHModSksZik7cmV0dXJuIShpJiYhaS5jb25maWd1cmFibGUpJiZkZWxldGUgdVtmXX19KX0sNzUxNTM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1mdW5jdGlvbihhKXt0aGlzLl90PWUoYSksdGhpcy5faT0wO3ZhciBm''@;'; put 'put ''LHU9dGhpcy5faz1bXTtmb3IoZiBpbiBhKXUucHVzaChmKX07dCg2MDMyKShzLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGYsYT10aGlzLHU9YS5faztkb3tpZihhLl9pPj11Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGY9dVthLl9pKytdKWluIGEuX3Qp''@;'; put 'put ''KTtyZXR1cm57dmFsdWU6Zixkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sNTI2NTA6KGMsbCx0KT0+e3ZhciBuPXQoNjg2NDEpLGU9dCg5MjEyNykscz10KDQyMjgpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHUsZil7cmV0dXJuIG4uZihzKHUpLGYpfX0pfSwzMTEwNDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQwNjI3KSxzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXtyZXR1cm4gZShzKHUpKX19''@;'; put 'put ''KX0sMTE4Nzk6KGMsbCx0KT0+e3ZhciBuPXQoNjg2NDEpLGU9dCg0MDYyNykscz10KDU3OTE3KSxhPXQoOTIxMjcpLHU9dCg0MzMwNSksZj10KDQyMjgpO2EoYS5TLCJSZWZsZWN0Iix7Z2V0OmZ1bmN0aW9uIGkodixwKXt2YXIgbSxFLGQ9YXJndW1lbnRzLmxlbmd0aDwzP3Y6YXJndW1lbnRz''@;'; put 'put ''WzJdO3JldHVybiBmKHYpPT09ZD92W3BdOihtPW4uZih2LHApKT9zKG0sInZhbHVlIik/bS52YWx1ZTp2b2lkIDAhPT1tLmdldD9tLmdldC5jYWxsKGQpOnZvaWQgMDp1KEU9ZSh2KSk/aShFLHAsZCk6dm9pZCAwfX0pfSwyMTg4MzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIlJl''@;'; put 'put ''ZmxlY3QiLHtoYXM6ZnVuY3Rpb24ocyxhKXtyZXR1cm4gYSBpbiBzfX0pfSwzNTQzMzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQyMjgpLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZTtuKG4uUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih1KXtyZXR1cm4gZSh1KSwhc3x8''@;'; put 'put ''cyh1KX19KX0sNTVlMzooYyxsLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIlJlZmxlY3QiLHtvd25LZXlzOnQoOTYyMjIpfSl9LDE1OTMyOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsIlJlZmxlY3QiLHtwcmV2''@;'; put 'put ''ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih1KXtlKHUpO3RyeXtyZXR1cm4gcyYmcyh1KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDI2MzE2OihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoMjUxNzApO2UmJm4obi5TLCJSZWZsZWN0Iix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oYSx1KXtl''@;'; put 'put ''LmNoZWNrKGEsdSk7dHJ5e3JldHVybiBlLnNldChhLHUpLCEwfWNhdGNoe3JldHVybiExfX19KX0sNTQ0MzooYyxsLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDY4NjQxKSxzPXQoNDA2MjcpLGE9dCg1NzkxNyksdT10KDkyMTI3KSxmPXQoMTE5OTYpLGk9dCg0MjI4KSx2PXQoNDMzMDUpO3Uo''@;'; put 'put ''dS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHAoZCxtLEUpe3ZhciBGLHgsZz1hcmd1bWVudHMubGVuZ3RoPDQ/ZDphcmd1bWVudHNbM10sRD1lLmYoaShkKSxtKTtpZighRCl7aWYodih4PXMoZCkpKXJldHVybiBwKHgsbSxFLGcpO0Q9ZigwKX1pZihhKEQsInZhbHVlIikpe2lmKCExPT09''@;'; put 'put ''RC53cml0YWJsZXx8IXYoZykpcmV0dXJuITE7aWYoRj1lLmYoZyxtKSl7aWYoRi5nZXR8fEYuc2V0fHwhMT09PUYud3JpdGFibGUpcmV0dXJuITE7Ri52YWx1ZT1FLG4uZihnLG0sRil9ZWxzZSBuLmYoZyxtLGYoMCxFKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PUQuc2V0JiYoRC5zZXQu''@;'; put 'put ''Y2FsbChnLEUpLCEwKX19KX0sODMwMTooYyxsLHQpPT57dmFyIG49dCg2NzUyNiksZT10KDk4ODgwKSxzPXQoNDc5NjcpLmYsYT10KDU5NDE1KS5mLHU9dCg5NTQxMSksZj10KDExNTgpLGk9bi5SZWdFeHAsdj1pLHA9aS5wcm90b3R5cGUsZD0vYS9nLG09L2EvZyxFPW5ldyBpKGQpIT09ZDtp''@;'; put 'put ''Zih0KDE3NjMpJiYoIUV8fHQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIG1bdCg2NzU3NCkoIm1hdGNoIildPSExLGkoZCkhPWR8fGkobSk9PW18fCIvYS9pIiE9aShkLCJpIil9KSkpe2k9ZnVuY3Rpb24odyxDKXt2YXIgST10aGlzIGluc3RhbmNlb2YgaSxNPXUodyksVD12b2lkIDA9PT1D''@;'; put 'put ''O3JldHVybiFJJiZNJiZ3LmNvbnN0cnVjdG9yPT09aSYmVD93OmUoRT9uZXcgdihNJiYhVD93LnNvdXJjZTp3LEMpOnYoKE09dyBpbnN0YW5jZW9mIGkpP3cuc291cmNlOncsTSYmVD9mLmNhbGwodyk6QyksST90aGlzOnAsaSl9O2Zvcih2YXIgZz1mdW5jdGlvbih4KXt4IGluIGl8fHMoaSx4''@;'; put 'put ''LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZbeF19LHNldDpmdW5jdGlvbih3KXt2W3hdPXd9fSl9LEQ9YSh2KSxGPTA7RC5sZW5ndGg+RjspZyhEW0YrK10pO3AuY29uc3RydWN0b3I9aSxpLnByb3RvdHlwZT1wLHQoMjg4NTkpKG4sIlJlZ0V4cCIsaSl9dCg1NTc2''@;'; put 'put ''MikoIlJlZ0V4cCIpfSw5NDExNjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjk2MDApO3QoOTIxMjcpKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSwzOTYzODooYyxsLHQpPT57dCgxNzYzKSYmImciIT0vLi9nLmZsYWdz''@;'; put 'put ''JiZ0KDQ3OTY3KS5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDp0KDExNTgpfSl9LDQwNDA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg4MTQ4NSkscz10KDI4ODI4KSxhPXQoNTI1MzUpO3QoNjkyMjgpKCJtYXRjaCIsMSxm''@;'; put 'put ''dW5jdGlvbih1LGYsaSx2KXtyZXR1cm5bZnVuY3Rpb24oZCl7dmFyIG09dSh0aGlzKSxFPWQ/LltmXTtyZXR1cm4gdm9pZCAwIT09RT9FLmNhbGwoZCxtKTpuZXcgUmVnRXhwKGQpW2ZdKFN0cmluZyhtKSl9LGZ1bmN0aW9uKHApe3ZhciBkPXYoaSxwLHRoaXMpO2lmKGQuZG9uZSlyZXR1cm4g''@;'; put 'put ''ZC52YWx1ZTt2YXIgbT1uKHApLEU9U3RyaW5nKHRoaXMpO2lmKCFtLmdsb2JhbClyZXR1cm4gYShtLEUpO3ZhciBnPW0udW5pY29kZTttLmxhc3RJbmRleD0wO2Zvcih2YXIgeCxEPVtdLEY9MDtudWxsIT09KHg9YShtLEUpKTspe3ZhciB3PVN0cmluZyh4WzBdKTtEW0ZdPXcsIiI9PT13JiYo''@;'; put 'put ''bS5sYXN0SW5kZXg9cyhFLGUobS5sYXN0SW5kZXgpLGcpKSxGKyt9cmV0dXJuIDA9PT1GP251bGw6RH1dfSl9LDY4MzA1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoMTgyNzApLHM9dCg4MTQ4NSksYT10KDI3MDg3KSx1PXQoMjg4MjgpLGY9dCg1MjUzNSksaT1N''@;'; put 'put ''YXRoLm1heCx2PU1hdGgubWluLHA9TWF0aC5mbG9vcixkPS9cJChbJCZgJ118XGRcZD98PFtePl0qPikvZyxtPS9cJChbJCZgJ118XGRcZD8pL2csRT1mdW5jdGlvbihnKXtyZXR1cm4gdm9pZCAwPT09Zz9nOlN0cmluZyhnKX07dCg2OTIyOCkoInJlcGxhY2UiLDIsZnVuY3Rpb24oZyxELEYs''@;'; put 'put ''eCl7cmV0dXJuW2Z1bmN0aW9uKEksTSl7dmFyIFQ9Zyh0aGlzKSxiPUk/LltEXTtyZXR1cm4gdm9pZCAwIT09Yj9iLmNhbGwoSSxULE0pOkYuY2FsbChTdHJpbmcoVCksSSxNKX0sZnVuY3Rpb24oQyxJKXt2YXIgTT14KEYsQyx0aGlzLEkpO2lmKE0uZG9uZSlyZXR1cm4gTS52YWx1ZTt2YXIg''@;'; put 'put ''VD1uKEMpLGI9U3RyaW5nKHRoaXMpLEw9ImZ1bmN0aW9uIj09dHlwZW9mIEk7THx8KEk9U3RyaW5nKEkpKTt2YXIgVT1ULmdsb2JhbDtpZihVKXt2YXIgWj1ULnVuaWNvZGU7VC5sYXN0SW5kZXg9MH1mb3IodmFyIG50PVtdOzspe3ZhciB0dD1mKFQsYik7aWYobnVsbD09PXR0fHwobnQucHVz''@;'; put 'put ''aCh0dCksIVUpKWJyZWFrOyIiPT09U3RyaW5nKHR0WzBdKSYmKFQubGFzdEluZGV4PXUoYixzKFQubGFzdEluZGV4KSxaKSl9Zm9yKHZhciBtdD0iIixxPTAsWD0wO1g8bnQubGVuZ3RoO1grKyl7dHQ9bnRbWF07Zm9yKHZhciBldD1TdHJpbmcodHRbMF0pLFY9aSh2KGEodHQuaW5kZXgpLGIu''@;'; put 'put ''bGVuZ3RoKSwwKSxmdD1bXSxkdD0xO2R0PHR0Lmxlbmd0aDtkdCsrKWZ0LnB1c2goRSh0dFtkdF0pKTt2YXIgYnQ9dHQuZ3JvdXBzO2lmKEwpe3ZhciBPdD1bZXRdLmNvbmNhdChmdCxWLGIpO3ZvaWQgMCE9PWJ0JiZPdC5wdXNoKGJ0KTt2YXIgTnQ9U3RyaW5nKEkuYXBwbHkodm9pZCAwLE90''@;'; put 'put ''KSl9ZWxzZSBOdD13KGV0LGIsVixmdCxidCxJKTtWPj1xJiYobXQrPWIuc2xpY2UocSxWKStOdCxxPVYrZXQubGVuZ3RoKX1yZXR1cm4gbXQrYi5zbGljZShxKX1dO2Z1bmN0aW9uIHcoQyxJLE0sVCxiLEwpe3ZhciBVPU0rQy5sZW5ndGgsWj1ULmxlbmd0aCxudD1tO3JldHVybiB2b2lkIDAh''@;'; put 'put ''PT1iJiYoYj1lKGIpLG50PWQpLEYuY2FsbChMLG50LGZ1bmN0aW9uKHR0LHl0KXt2YXIgbXQ7c3dpdGNoKHl0LmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gQztjYXNlImAiOnJldHVybiBJLnNsaWNlKDAsTSk7Y2FzZSInIjpyZXR1cm4gSS5zbGljZShVKTtj''@;'; put 'put ''YXNlIjwiOm10PWJbeXQuc2xpY2UoMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIHE9K3l0O2lmKDA9PT1xKXJldHVybiB0dDtpZihxPlope3ZhciBYPXAocS8xMCk7cmV0dXJuIDA9PT1YP3R0Olg8PVo/dm9pZCAwPT09VFtYLTFdP3l0LmNoYXJBdCgxKTpUW1gtMV0reXQuY2hhckF0KDEpOnR0''@;'; put 'put ''fW10PVRbcS0xXX1yZXR1cm4gdm9pZCAwPT09bXQ/IiI6bXR9KX19KX0sNzQ3MDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg3MzU5KSxzPXQoNTI1MzUpO3QoNjkyMjgpKCJzZWFyY2giLDEsZnVuY3Rpb24oYSx1LGYsaSl7cmV0dXJuW2Z1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBkPWEodGhpcyksbT1wPy5bdV07cmV0dXJuIHZvaWQgMCE9PW0/bS5jYWxsKHAsZCk6bmV3IFJlZ0V4cChwKVt1XShTdHJpbmcoZCkpfSxmdW5jdGlvbih2KXt2YXIgcD1pKGYsdix0aGlzKTtpZihwLmRvbmUpcmV0dXJuIHAudmFsdWU7dmFyIGQ9bih2KSxtPVN0cmluZyh0aGlzKSxFPWQu''@;'; put 'put ''bGFzdEluZGV4O2UoRSwwKXx8KGQubGFzdEluZGV4PTApO3ZhciBnPXMoZCxtKTtyZXR1cm4gZShkLmxhc3RJbmRleCxFKXx8KGQubGFzdEluZGV4PUUpLG51bGw9PT1nPy0xOmcuaW5kZXh9XX0pfSwyMDM0MTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTU0MTEpLGU9dCg0MjI4''@;'; put 'put ''KSxzPXQoMTkxOTApLGE9dCgyODgyOCksdT10KDgxNDg1KSxmPXQoNTI1MzUpLGk9dCg2OTYwMCksdj10KDc5NDQ4KSxwPU1hdGgubWluLGQ9W10ucHVzaCxtPSJzcGxpdCIsRT0ibGVuZ3RoIixnPSJsYXN0SW5kZXgiLEQ9NDI5NDk2NzI5NSxGPSF2KGZ1bmN0aW9uKCl7UmVnRXhwKEQsInki''@;'; put 'put ''KX0pO3QoNjkyMjgpKCJzcGxpdCIsMixmdW5jdGlvbih4LHcsQyxJKXt2YXIgTTtyZXR1cm4gTT0iYyI9PSJhYmJjIlttXSgvKGIpKi8pWzFdfHw0IT0idGVzdCJbbV0oLyg/OikvLC0xKVtFXXx8MiE9ImFiIlttXSgvKD86YWIpKi8pW0VdfHw0IT0iLiJbbV0oLyguPykoLj8pLylbRV18fCIu''@;'; put 'put ''IlttXSgvKCkoKS8pW0VdPjF8fCIiW21dKC8uPy8pW0VdP2Z1bmN0aW9uKFQsYil7dmFyIEw9U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PVQmJjA9PT1iKXJldHVybltdO2lmKCFuKFQpKXJldHVybiBDLmNhbGwoTCxULGIpO2Zvcih2YXIgbXQscSxYLFU9W10sbnQ9MCx0dD12b2lkIDA9PT1i''@;'; put 'put ''P0Q6Yj4+PjAseXQ9bmV3IFJlZ0V4cChULnNvdXJjZSwoVC5pZ25vcmVDYXNlPyJpIjoiIikrKFQubXVsdGlsaW5lPyJtIjoiIikrKFQudW5pY29kZT8idSI6IiIpKyhULnN0aWNreT8ieSI6IiIpKyJnIik7KG10PWkuY2FsbCh5dCxMKSkmJiEoKHE9eXRbZ10pPm50JiYoVS5wdXNoKEwuc2xp''@;'; put 'put ''Y2UobnQsbXQuaW5kZXgpKSxtdFtFXT4xJiZtdC5pbmRleDxMW0VdJiZkLmFwcGx5KFUsbXQuc2xpY2UoMSkpLFg9bXRbMF1bRV0sbnQ9cSxVW0VdPj10dCkpOyl5dFtnXT09PW10LmluZGV4JiZ5dFtnXSsrO3JldHVybiBudD09PUxbRV0/KFh8fCF5dC50ZXN0KCIiKSkmJlUucHVzaCgiIik6''@;'; put 'put ''VS5wdXNoKEwuc2xpY2UobnQpKSxVW0VdPnR0P1Uuc2xpY2UoMCx0dCk6VX06IjAiW21dKHZvaWQgMCwwKVtFXT9mdW5jdGlvbihULGIpe3JldHVybiB2b2lkIDA9PT1UJiYwPT09Yj9bXTpDLmNhbGwodGhpcyxULGIpfTpDLFtmdW5jdGlvbihiLEwpe3ZhciBVPXgodGhpcyksWj1iPy5bd107''@;'; put 'put ''cmV0dXJuIHZvaWQgMCE9PVo/Wi5jYWxsKGIsVSxMKTpNLmNhbGwoU3RyaW5nKFUpLGIsTCl9LGZ1bmN0aW9uKFQsYil7dmFyIEw9SShNLFQsdGhpcyxiLE0hPT1DKTtpZihMLmRvbmUpcmV0dXJuIEwudmFsdWU7dmFyIFU9ZShUKSxaPVN0cmluZyh0aGlzKSxudD1zKFUsUmVnRXhwKSx0dD1V''@;'; put 'put ''LnVuaWNvZGUsbXQ9bmV3IG50KEY/VToiXig/OiIrVS5zb3VyY2UrIikiLChVLmlnbm9yZUNhc2U/ImkiOiIiKSsoVS5tdWx0aWxpbmU/Im0iOiIiKSsoVS51bmljb2RlPyJ1IjoiIikrKEY/InkiOiJnIikpLHE9dm9pZCAwPT09Yj9EOmI+Pj4wO2lmKDA9PT1xKXJldHVybltdO2lmKDA9PT1a''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gbnVsbD09PWYobXQsWik/W1pdOltdO2Zvcih2YXIgWD0wLGV0PTAsVj1bXTtldDxaLmxlbmd0aDspe210Lmxhc3RJbmRleD1GP2V0OjA7dmFyIGR0LGZ0PWYobXQsRj9aOlouc2xpY2UoZXQpKTtpZihudWxsPT09ZnR8fChkdD1wKHUobXQubGFzdEluZGV4KyhGPzA6''@;'; put 'put ''ZXQpKSxaLmxlbmd0aCkpPT09WClldD1hKFosZXQsdHQpO2Vsc2V7aWYoVi5wdXNoKFouc2xpY2UoWCxldCkpLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtmb3IodmFyIGJ0PTE7YnQ8PWZ0Lmxlbmd0aC0xO2J0KyspaWYoVi5wdXNoKGZ0W2J0XSksVi5sZW5ndGg9PT1xKXJldHVybiBWO2V0PVg9''@;'; put 'put ''ZHR9fXJldHVybiBWLnB1c2goWi5zbGljZShYKSksVn1dfSl9LDc4NjA0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgzOTYzOCk7dmFyIG49dCg0MjI4KSxlPXQoMTE1OCkscz10KDE3NjMpLGE9InRvU3RyaW5nIix1PS8uL1thXSxmPWZ1bmN0aW9uKGkpe3QoMjg4NTkpKFJlZ0V4cC5wcm90''@;'; put 'put ''b3R5cGUsYSxpLCEwKX07dCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2YoZnVuY3Rpb24oKXt2YXIgdj1uKHRoaXMpO3JldHVybiIvIi5jb25jYXQodi5zb3VyY2UsIi8iLCJmbGFncyJpbiB2P3YuZmxhZ3M6IXMmJnYg''@;'; put 'put ''aW5zdGFuY2VvZiBSZWdFeHA/ZS5jYWxsKHYpOnZvaWQgMCl9KTp1Lm5hbWUhPWEmJmYoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSl9LDcxNjMyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzNjE5NyksZT10KDEyODg4KTtjLmV4cG9ydHM9dCg1ODkzMykoIlNldCIs''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUpe3JldHVybiBuLmRlZihlKHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDY0OTc5OihjLGwsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImFuY2hvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIixzKX19KX0sODkwMTE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmlnIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbih0aGlzLCJiaWciLCIiLCIiKX19KX0sNTQ1OTE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiYmxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDQ3MzM0OihjLGwsdCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dCg1MjQ2OCkoImJvbGQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImIiLCIiLCIiKX19KX0sMzI0MDU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoOTEyMTIpKCExKTtuKG4uUCwiU3RyaW5nIix7Y29kZVBv''@;'; put 'put ''aW50QXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGUodGhpcyxhKX19KX0sMTcyMjQ6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoODE0ODUpLHM9dCg3ODk0MiksYT0iZW5kc1dpdGgiLHU9IiJbYV07bihuLlArbi5GKnQoMjUyMDMpKGEpLCJTdHJpbmciLHtlbmRzV2l0''@;'; put 'put ''aDpmdW5jdGlvbihpKXt2YXIgdj1zKHRoaXMsaSxhKSxwPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQ9ZSh2Lmxlbmd0aCksbT12b2lkIDA9PT1wP2Q6TWF0aC5taW4oZShwKSxkKSxFPVN0cmluZyhpKTtyZXR1cm4gdT91LmNhbGwodixFLG0pOnYuc2xpY2UobS1F''@;'; put 'put ''Lmxlbmd0aCxtKT09PUV9fSl9LDcwODM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiZml4ZWQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInR0IiwiIiwiIil9fSl9LDY5MjEzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZv''@;'; put 'put ''bnRjb2xvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImZvbnQiLCJjb2xvciIscyl9fSl9LDM4NDM3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRzaXplIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4o''@;'; put 'put ''dGhpcywiZm9udCIsInNpemUiLHMpfX0pfSwxMjIyMDooYyxsLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcwMTU3KSxzPVN0cmluZy5mcm9tQ2hhckNvZGUsYT1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhYSYmMSE9YS5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50''@;'; put 'put ''OmZ1bmN0aW9uKGYpe2Zvcih2YXIgZCxpPVtdLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7dj5wOyl7aWYoZD0rYXJndW1lbnRzW3ArK10sZShkLDExMTQxMTEpIT09ZCl0aHJvdyBSYW5nZUVycm9yKGQrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7aS5wdXNoKGQ8NjU1MzY/cyhkKTpz''@;'; put 'put ''KDU1Mjk2KygoZC09NjU1MzYpPj4xMCksZCUxMDI0KzU2MzIwKSl9cmV0dXJuIGkuam9pbigiIil9fSl9LDI4ODcyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDc4OTQyKSxzPSJpbmNsdWRlcyI7bihuLlArbi5GKnQoMjUyMDMpKHMpLCJTdHJpbmciLHtpbmNs''@;'; put 'put ''dWRlczpmdW5jdGlvbih1KXtyZXR1cm4hIX5lKHRoaXMsdSxzKS5pbmRleE9mKHUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw2MjIyMDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJpdGFsaWNzIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbih0aGlzLCJpIiwiIiwiIil9fSl9LDgyOTc1OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MTIxMikoITApO3QoOTgxNzUpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIGEs''@;'; put 'put ''ZT10aGlzLl90LHM9dGhpcy5faTtyZXR1cm4gcz49ZS5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooYT1uKGUscyksdGhpcy5faSs9YS5sZW5ndGgse3ZhbHVlOmEsZG9uZTohMX0pfSl9LDc2NTQ5OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImxpbmsiLGZ1bmN0aW9u''@;'; put 'put ''KG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIscyl9fSl9LDIzNDgzOihjLGwsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9dCg4MTQ4NSk7bihuLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFyIGY9ZSh1LnJhdyksaT1zKGYu''@;'; put 'put ''bGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1bXSxkPTA7aT5kOylwLnB1c2goU3RyaW5nKGZbZCsrXSkpLGQ8diYmcC5wdXNoKFN0cmluZyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gcC5qb2luKCIiKX19KX0sNDQ4OTQ6KGMsbCx0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJTdHJpbmci''@;'; put 'put ''LHtyZXBlYXQ6dCgyNzkyNil9KX0sNDI4MTg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic21hbGwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInNtYWxsIiwiIiwiIil9fSl9LDEwMTc3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCg5MjEyNyksZT10KDgxNDg1KSxzPXQoNzg5NDIpLGE9InN0YXJ0c1dpdGgiLHU9IiJbYV07bihuLlArbi5GKnQoMjUyMDMpKGEpLCJTdHJpbmciLHtzdGFydHNXaXRoOmZ1bmN0aW9uKGkpe3ZhciB2PXModGhpcyxpLGEpLHA9ZShNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1l''@;'; put 'put ''bnRzWzFdOnZvaWQgMCx2Lmxlbmd0aCkpLGQ9U3RyaW5nKGkpO3JldHVybiB1P3UuY2FsbCh2LGQscCk6di5zbGljZShwLHArZC5sZW5ndGgpPT09ZH19KX0sMjg1NDM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgic3RyaWtlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gbih0aGlzLCJzdHJpa2UiLCIiLCIiKX19KX0sMzU1OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJzdWIiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1YiIsIiIsIiIpfX0pfSw4NDE1MzooYyxsLHQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3QoNTI0NjgpKCJzdXAiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInN1cCIsIiIsIiIpfX0pfSwyMDk1NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNDA2MjkpKCJ0cmltIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0''@;'; put 'put ''aGlzLDMpfX0pfSw5OTY1MDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg1NzkxNykscz10KDE3NjMpLGE9dCg5MjEyNyksdT10KDI4ODU5KSxmPXQoMTI5ODgpLktFWSxpPXQoNzk0NDgpLHY9dCg0NDU1NikscD10KDM4NDQpLGQ9dCg0NDE1KSxtPXQoNjc1NzQp''@;'; put 'put ''LEU9dCg0Nzk2MCksZz10KDIzMDExKSxEPXQoMTU5NjkpLEY9dCg3Nzk4MSkseD10KDQyMjgpLHc9dCg0MzMwNSksQz10KDE4MjcwKSxJPXQoNTcyMjEpLE09dCg4MzA0OCksVD10KDExOTk2KSxiPXQoODQ3MTkpLEw9dCg0NzY1KSxVPXQoNjg2NDEpLFo9dCgxMDYwKSxudD10KDQ3OTY3KSx0''@;'; put 'put ''dD10KDUxMzExKSx5dD1VLmYsbXQ9bnQuZixxPUwuZixYPW4uU3ltYm9sLGV0PW4uSlNPTixWPWV0JiZldC5zdHJpbmdpZnksZnQ9InByb3RvdHlwZSIsZHQ9bSgiX2hpZGRlbiIpLGJ0PW0oInRvUHJpbWl0aXZlIiksT3Q9e30ucHJvcGVydHlJc0VudW1lcmFibGUsTnQ9digic3ltYm9sLXJl''@;'; put 'put ''Z2lzdHJ5IiksWXQ9digic3ltYm9scyIpLG9uPXYoIm9wLXN5bWJvbHMiKSxHdD1PYmplY3RbZnRdLHVuPSJmdW5jdGlvbiI9PXR5cGVvZiBYJiYhIVouZix5bj1uLlFPYmplY3Qscm49IXlufHwheW5bZnRdfHwheW5bZnRdLmZpbmRDaGlsZCx4bj1zJiZpKGZ1bmN0aW9uKCl7cmV0dXJuIDch''@;'; put 'put ''PWIobXQoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbXQodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oXyxILFEpe3ZhciBpdD15dChHdCxIKTtpdCYmZGVsZXRlIEd0W0hdLG10KF8sSCxRKSxpdCYmXyE9PUd0JiZtdChHdCxILGl0KX06bXQscXQ9ZnVuY3Rp''@;'; put 'put ''b24oXyl7dmFyIEg9WXRbX109YihYW2Z0XSk7cmV0dXJuIEguX2s9XyxIfSxkbj11biYmInN5bWJvbCI9PXR5cGVvZiBYLml0ZXJhdG9yP2Z1bmN0aW9uKF8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgX306ZnVuY3Rpb24oXyl7cmV0dXJuIF8gaW5zdGFuY2VvZiBYfSxzbj1mdW5jdGlvbihI''@;'; put 'put ''LFEsaXQpe3JldHVybiBIPT09R3QmJnNuKG9uLFEsaXQpLHgoSCksUT1NKFEsITApLHgoaXQpLGUoWXQsUSk/KGl0LmVudW1lcmFibGU/KGUoSCxkdCkmJkhbZHRdW1FdJiYoSFtkdF1bUV09ITEpLGl0PWIoaXQse2VudW1lcmFibGU6VCgwLCExKX0pKTooZShILGR0KXx8bXQoSCxkdCxUKDEs''@;'; put 'put ''e30pKSxIW2R0XVtRXT0hMCkseG4oSCxRLGl0KSk6bXQoSCxRLGl0KX0sX3Q9ZnVuY3Rpb24oSCxRKXt4KEgpO2Zvcih2YXIgYW4saXQ9RChRPUkoUSkpLHp0PTAsUXQ9aXQubGVuZ3RoO1F0Pnp0OylzbihILGFuPWl0W3p0KytdLFFbYW5dKTtyZXR1cm4gSH0sVG49ZnVuY3Rpb24oSCl7dmFy''@;'; put 'put ''IFE9T3QuY2FsbCh0aGlzLEg9TShILCEwKSk7cmV0dXJuISh0aGlzPT09R3QmJmUoWXQsSCkmJiFlKG9uLEgpKSYmKCEoUXx8IWUodGhpcyxIKXx8IWUoWXQsSCl8fGUodGhpcyxkdCkmJnRoaXNbZHRdW0hdKXx8USl9LGg9ZnVuY3Rpb24oSCxRKXtpZihIPUkoSCksUT1NKFEsITApLEghPT1H''@;'; put 'put ''dHx8IWUoWXQsUSl8fGUob24sUSkpe3ZhciBpdD15dChILFEpO3JldHVybiBpdCYmZShZdCxRKSYmIShlKEgsZHQpJiZIW2R0XVtRXSkmJihpdC5lbnVtZXJhYmxlPSEwKSxpdH19LHI9ZnVuY3Rpb24oSCl7Zm9yKHZhciBRdCxRPXEoSShIKSksaXQ9W10senQ9MDtRLmxlbmd0aD56dDspIWUo''@;'; put 'put ''WXQsUXQ9UVt6dCsrXSkmJlF0IT1kdCYmUXQhPWYmJml0LnB1c2goUXQpO3JldHVybiBpdH0sbz1mdW5jdGlvbihIKXtmb3IodmFyIGFuLFE9SD09PUd0LGl0PXEoUT9vbjpJKEgpKSx6dD1bXSxRdD0wO2l0Lmxlbmd0aD5RdDspZShZdCxhbj1pdFtRdCsrXSkmJighUXx8ZShHdCxhbikpJiZ6''@;'; put 'put ''dC5wdXNoKFl0W2FuXSk7cmV0dXJuIHp0fTt1bnx8KHUoKFg9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgWCl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgSD1kKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxR''@;'; put 'put ''PWZ1bmN0aW9uKGl0KXt0aGlzPT09R3QmJlEuY2FsbChvbixpdCksZSh0aGlzLGR0KSYmZSh0aGlzW2R0XSxIKSYmKHRoaXNbZHRdW0hdPSExKSx4bih0aGlzLEgsVCgxLGl0KSl9O3JldHVybiBzJiZybiYmeG4oR3QsSCx7Y29uZmlndXJhYmxlOiEwLHNldDpRfSkscXQoSCl9KVtmdF0sInRv''@;'; put 'put ''U3RyaW5nIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksVS5mPWgsbnQuZj1zbix0KDU5NDE1KS5mPUwuZj1yLHQoODQ0OSkuZj1UbixaLmY9byxzJiYhdCgyMjc1MCkmJnUoR3QsInByb3BlcnR5SXNFbnVtZXJhYmxlIixUbiwhMCksRS5mPWZ1bmN0aW9uKF8pe3JldHVybiBxdChtKF8p''@;'; put 'put ''KX0pLGEoYS5HK2EuVythLkYqIXVuLHtTeW1ib2w6WH0pO2Zvcih2YXIgeT0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIs''@;'; put 'put ''IiksUD0wO3kubGVuZ3RoPlA7KW0oeVtQKytdKTtmb3IodmFyIEs9dHQobS5zdG9yZSksJD0wO0subGVuZ3RoPiQ7KWcoS1skKytdKTthKGEuUythLkYqIXVuLCJTeW1ib2wiLHtmb3I6ZnVuY3Rpb24oXyl7cmV0dXJuIGUoTnQsXys9IiIpP050W19dOk50W19dPVgoXyl9LGtleUZvcjpmdW5j''@;'; put 'put ''dGlvbihIKXtpZighZG4oSCkpdGhyb3cgVHlwZUVycm9yKEgrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciBRIGluIE50KWlmKE50W1FdPT09SClyZXR1cm4gUX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7cm49ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3JuPSExfX0pLGEoYS5TK2EuRioh''@;'; put 'put ''dW4sIk9iamVjdCIse2NyZWF0ZTpmdW5jdGlvbihILFEpe3JldHVybiB2b2lkIDA9PT1RP2IoSCk6X3QoYihIKSxRKX0sZGVmaW5lUHJvcGVydHk6c24sZGVmaW5lUHJvcGVydGllczpfdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6aCxnZXRPd25Qcm9wZXJ0eU5hbWVzOnIsZ2V0T3duUHJv''@;'; put 'put ''cGVydHlTeW1ib2xzOm99KTt2YXIganQ9aShmdW5jdGlvbigpe1ouZigxKX0pO2EoYS5TK2EuRipqdCwiT2JqZWN0Iix7Z2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKEgpe3JldHVybiBaLmYoQyhIKSl9fSksZXQmJmEoYS5TK2EuRiooIXVufHxpKGZ1bmN0aW9uKCl7dmFyIF89WCgp''@;'; put 'put ''O3JldHVybiJbbnVsbF0iIT1WKFtfXSl8fCJ7fSIhPVYoe2E6X30pfHwie30iIT1WKE9iamVjdChfKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oSCl7Zm9yKHZhciB6dCxRdCxRPVtIXSxpdD0xO2FyZ3VtZW50cy5sZW5ndGg+aXQ7KVEucHVzaChhcmd1bWVudHNbaXQrK10pO2lm''@;'; put 'put ''KFF0PXp0PVFbMV0sKHcoenQpfHx2b2lkIDAhPT1IKSYmIWRuKEgpKXJldHVybiBGKHp0KXx8KHp0PWZ1bmN0aW9uKGFuLE1uKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUXQmJihNbj1RdC5jYWxsKHRoaXMsYW4sTW4pKSwhZG4oTW4pKXJldHVybiBNbn0pLFFbMV09enQsVi5hcHBseShldCxR''@;'; put 'put ''KX19KSxYW2Z0XVtidF18fHQoMzMzNDEpKFhbZnRdLGJ0LFhbZnRdLnZhbHVlT2YpLHAoWCwiU3ltYm9sIikscChNYXRoLCJNYXRoIiwhMCkscChuLkpTT04sIkpTT04iLCEwKX0sNzkzOTc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRixuPXQoNjc1MjYpLGU9dCg2NjE3OSkoMCkscz10''@;'; put 'put ''KDI4ODU5KSxhPXQoMTI5ODgpLHU9dCgyODIwNiksZj10KDk5ODgyKSxpPXQoNDMzMDUpLHY9dCgxMjg4OCkscD10KDEyODg4KSxkPSFuLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIG4sbT0iV2Vha01hcCIsRT1hLmdldFdlYWssZz1PYmplY3QuaXNFeHRlbnNpYmxlLEQ9Zi51''@;'; put 'put ''ZnN0b3JlLHg9ZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx3PXtnZXQ6ZnVuY3Rpb24oTSl7aWYoaShNKSl7dmFyIFQ9RShNKTtyZXR1cm4hMD09PVQ/RCh2KHRoaXMsbSkpLmdldChN''@;'; put 'put ''KTpUP1RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKE0sVCl7cmV0dXJuIGYuZGVmKHYodGhpcyxtKSxNLFQpfX0sQz1jLmV4cG9ydHM9dCg1ODkzMykobSx4LHcsZiwhMCwhMCk7cCYmZCYmKHUoKEY9Zi5nZXRDb25zdHJ1Y3Rvcih4LG0pKS5wcm90b3R5cGUsdyksYS5ORUVEPSEw''@;'; put 'put ''LGUoWyJkZWxldGUiLCJoYXMiLCJnZXQiLCJzZXQiXSxmdW5jdGlvbihJKXt2YXIgTT1DLnByb3RvdHlwZSxUPU1bSV07cyhNLEksZnVuY3Rpb24oYixMKXtpZihpKGIpJiYhZyhiKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IEYpO3ZhciBVPXRoaXMuX2ZbSV0oYixMKTtyZXR1cm4ic2V0Ij09''@;'; put 'put ''ST90aGlzOlV9cmV0dXJuIFQuY2FsbCh0aGlzLGIsTCl9KX0pKX0sNzc0OTE6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4ua2V5LGE9bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGYsaSx2LHApe2EoZixpLGUodikscyhwKSl9fSl9LDc0OTA3Oihj''@;'; put 'put ''LGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz1uLmtleSxhPW4ubWFwLHU9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXt2YXIgcD1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSxkPWEoZSh2KSxwLCExKTtpZih2b2lk''@;'; put 'put ''IDA9PT1kfHwhZC5kZWxldGUoaSkpcmV0dXJuITE7aWYoZC5zaXplKXJldHVybiEwO3ZhciBtPXUuZ2V0KHYpO3JldHVybiBtLmRlbGV0ZShwKSwhIW0uc2l6ZXx8dS5kZWxldGUodil9fSl9LDE5MjY5OihjLGwsdCk9Pnt2YXIgbj10KDcxNjMyKSxlPXQoODA5NTYpLHM9dCg5NzM4MCksYT10''@;'; put 'put ''KDQyMjgpLHU9dCg0MDYyNyksZj1zLmtleXMsaT1zLmtleSx2PWZ1bmN0aW9uKHAsZCl7dmFyIG09ZihwLGQpLEU9dShwKTtpZihudWxsPT09RSlyZXR1cm4gbTt2YXIgZz12KEUsZCk7cmV0dXJuIGcubGVuZ3RoP20ubGVuZ3RoP2UobmV3IG4obS5jb25jYXQoZykpKTpnOm19O3MuZXhwKHtn''@;'; put 'put ''ZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZCl7cmV0dXJuIHYoYShkKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmkoYXJndW1lbnRzWzFdKSl9fSl9LDc5MTAwOihjLGwsdCk9Pnt2YXIgbj10KDk3MzgwKSxlPXQoNDIyOCkscz10KDQwNjI3KSxhPW4uaGFzLHU9bi5nZXQsZj1uLmtleSxp''@;'; put 'put ''PWZ1bmN0aW9uKHYscCxkKXtpZihhKHYscCxkKSlyZXR1cm4gdSh2LHAsZCk7dmFyIEU9cyhwKTtyZXR1cm4gbnVsbCE9PUU/aSh2LEUsZCk6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gaShwLGUoZCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpm''@;'; put 'put ''KGFyZ3VtZW50c1syXSkpfX0pfSw3OTczMjooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXlzLGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihmKXtyZXR1cm4gcyhlKGYpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6YShhcmd1bWVu''@;'; put 'put ''dHNbMV0pKX19KX0sOTEzMTk6KGMsbCx0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uZ2V0LGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGYsaSl7cmV0dXJuIHMoZixlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19''@;'; put 'put ''KX0sMTE3NjooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg0MDYyNyksYT1uLmhhcyx1PW4ua2V5LGY9ZnVuY3Rpb24oaSx2LHApe2lmKGEoaSx2LHApKXJldHVybiEwO3ZhciBtPXModik7cmV0dXJuIG51bGwhPT1tJiZmKGksbSxwKX07bi5leHAoe2hhc01ldGFkYXRh''@;'; put 'put ''OmZ1bmN0aW9uKHYscCl7cmV0dXJuIGYodixlKHApLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sMzEwNzooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5oYXMsYT1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24o''@;'; put 'put ''ZixpKXtyZXR1cm4gcyhmLGUoaSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSw2MTY5MTooYyxsLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg2MzM4NyksYT1uLmtleSx1PW4uc2V0O24uZXhwKHttZXRhZGF0YTpmdW5jdGlvbihpLHYp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihkLG0pe3UoaSx2LCh2b2lkIDAhPT1tP2U6cykoZCksYShtKSl9fX0pfSwzNTg5MDooYyxsLHQpPT57Zm9yKHZhciBuPXQoOTUxNjUpLGU9dCg1MTMxMSkscz10KDI4ODU5KSxhPXQoNjc1MjYpLHU9dCgzMzM0MSksZj10KDYwOTA2KSxpPXQoNjc1NzQpLHY9aSgi''@;'; put 'put ''aXRlcmF0b3IiKSxwPWkoInRvU3RyaW5nVGFnIiksZD1mLkFycmF5LG09e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERh''@;'; put 'put ''dGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxp''@;'; put 'put ''c3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVm''@;'; put 'put ''ZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxFPWUobSksZz0wO2c8RS5sZW5ndGg7ZysrKXt2YXIgQyxEPUVbZ10sRj1tW0RdLHg9YVtEXSx3PXgmJngucHJvdG90eXBlO2lmKHcmJih3W3ZdfHx1''@;'; put 'put ''KHcsdixkKSx3W3BdfHx1KHcscCxEKSxmW0RdPWQsRikpZm9yKEMgaW4gbil3W0NdfHxzKHcsQyxuW0NdLCEwKX19LDgyNTc0OmM9PnsidXNlIHN0cmljdCI7Yy5leHBvcnRzPUpTT04ucGFyc2UoJ3sibG9jYWxlIjoiZW4iLCJkYXRlIjp7ImNhIjpbImdyZWdvcnkiLCJidWRkaGlzdCIsImNo''@;'; put 'put ''aW5lc2UiLCJjb3B0aWMiLCJkYW5naSIsImV0aGlvYWEiLCJldGhpb3BpYyIsImdlbmVyaWMiLCJoZWJyZXciLCJpbmRpYW4iLCJpc2xhbWljIiwiaXNsYW1pY2MiLCJqYXBhbmVzZSIsInBlcnNpYW4iLCJyb2MiXSwiaG91ck5vMCI6dHJ1ZSwiaG91cjEyIjp0cnVlLCJmb3JtYXRzIjp7InNo''@;'; put 'put ''b3J0IjoiezF9LCB7MH0iLCJtZWRpdW0iOiJ7MX0sIHswfSIsImZ1bGwiOiJ7MX0gXCdhdFwnIHswfSIsImxvbmciOiJ7MX0gXCdhdFwnIHswfSIsImF2YWlsYWJsZUZvcm1hdHMiOnsiZCI6ImQiLCJFIjoiY2NjIiwiRWQiOiJkIEUiLCJFaG0iOiJFIGg6bW0gYSIsIkVIbSI6IkUgSEg6bW0i''@;'; put 'put ''LCJFaG1zIjoiRSBoOm1tOnNzIGEiLCJFSG1zIjoiRSBISDptbTpzcyIsIkd5IjoieSBHIiwiR3lNTU0iOiJNTU0geSBHIiwiR3lNTU1kIjoiTU1NIGQsIHkgRyIsIkd5TU1NRWQiOiJFLCBNTU0gZCwgeSBHIiwiaCI6ImggYSIsIkgiOiJISCIsImhtIjoiaDptbSBhIiwiSG0iOiJISDptbSIs''@;'; put 'put ''ImhtcyI6Img6bW06c3MgYSIsIkhtcyI6IkhIOm1tOnNzIiwiaG1zdiI6Img6bW06c3MgYSB2IiwiSG1zdiI6IkhIOm1tOnNzIHYiLCJobXYiOiJoOm1tIGEgdiIsIkhtdiI6IkhIOm1tIHYiLCJNIjoiTCIsIk1kIjoiTS9kIiwiTUVkIjoiRSwgTS9kIiwiTU1NIjoiTExMIiwiTU1NZCI6Ik1N''@;'; put 'put ''TSBkIiwiTU1NRWQiOiJFLCBNTU0gZCIsIk1NTU1kIjoiTU1NTSBkIiwibXMiOiJtbTpzcyIsInkiOiJ5IiwieU0iOiJNL3kiLCJ5TWQiOiJNL2QveSIsInlNRWQiOiJFLCBNL2QveSIsInlNTU0iOiJNTU0geSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TU1NRWQiOiJFLCBNTU0gZCwgeSIsInlN''@;'; put 'put ''TU1NIjoiTU1NTSB5IiwieVFRUSI6IlFRUSB5IiwieVFRUVEiOiJRUVFRIHkifSwiZGF0ZUZvcm1hdHMiOnsieU1NTU1FRUVFZCI6IkVFRUUsIE1NTU0gZCwgeSIsInlNTU1NZCI6Ik1NTU0gZCwgeSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TWQiOiJNL2QveXkifSwidGltZUZvcm1hdHMiOnsi''@;'; put 'put ''aG1tc3N6enp6IjoiaDptbTpzcyBhIHp6enoiLCJobXN6IjoiaDptbTpzcyBhIHoiLCJobXMiOiJoOm1tOnNzIGEiLCJobSI6Img6bW0gYSJ9fSwiY2FsZW5kYXJzIjp7ImJ1ZGRoaXN0Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwi''@;'; put 'put ''TyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3Vz''@;'; put 'put ''dCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIs''@;'; put 'put ''Ik1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCRSJdLCJzaG9ydCI6WyJCRSJdLCJsb25nIjpbIkJFIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJjaGluZXNlIjp7''@;'; put 'put ''Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpb''@;'; put 'put ''Ik1vbnRoMSIsIk1vbnRoMiIsIk1vbnRoMyIsIk1vbnRoNCIsIk1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9y''@;'; put 'put ''dCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwi''@;'; put 'put ''Y29wdGljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwi''@;'; put 'put ''QmFzaGFucyIsIlBhb25hIiwiRXBlcCIsIk1lc3JhIiwiTmFzaWUiXSwibG9uZyI6WyJUb3V0IiwiQmFiYSIsIkhhdG9yIiwiS2lhaGsiLCJUb2JhIiwiQW1zaGlyIiwiQmFyYW1oYXQiLCJCYXJhbW91ZGEiLCJCYXNoYW5zIiwiUGFvbmEiLCJFcGVwIiwiTWVzcmEiLCJOYXNpZSJdfSwiZGF5''@;'; put 'put ''cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJT''@;'; put 'put ''YXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZGFuZ2kiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIs''@;'; put 'put ''IjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTW8xIiwiTW8yIiwiTW8zIiwiTW80IiwiTW81IiwiTW82IiwiTW83IiwiTW84IiwiTW85IiwiTW8xMCIsIk1vMTEiLCJNbzEyIl0sImxvbmciOlsiTW9udGgxIiwiTW9udGgyIiwiTW9udGgzIiwi''@;'; put 'put ''TW9udGg0IiwiTW9udGg1IiwiTW9udGg2IiwiTW9udGg3IiwiTW9udGg4IiwiTW9udGg5IiwiTW9udGgxMCIsIk1vbnRoMTEiLCJNb250aDEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIs''@;'; put 'put ''IlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb3BpYyI6eyJtb250aHMiOnsibmFycm93''@;'; put 'put ''IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIs''@;'; put 'put ''Ik5laGFzc2UiLCJQYWd1bWVuIl0sImxvbmciOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXX0sImRheXMiOnsibmFycm93Ijpb''@;'; put 'put ''IlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVy''@;'; put 'put ''YXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImV0aGlvYWEiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIs''@;'; put 'put ''IjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdLCJs''@;'; put 'put ''b25nIjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYi''@;'; put 'put ''LCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIl0s''@;'; put 'put ''InNob3J0IjpbIkVSQTAiXSwibG9uZyI6WyJFUkEwIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJnZW5lcmljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk0w''@;'; put 'put ''MSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0wNSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdLCJsb25nIjpbIk0wMSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0wNSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdfSwiZGF5cyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJd''@;'; put 'put ''fSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ3JlZ29yeSI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEi''@;'; put 'put ''LCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5''@;'; put 'put ''IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJT''@;'; put 'put ''YXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQiIsIkEiLCJCQ0UiLCJDRSJdLCJzaG9ydCI6WyJCQyIsIkFEIiwiQkNFIiwiQ0UiXSwibG9uZyI6WyJC''@;'; put 'put ''ZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiLCJCZWZvcmUgQ29tbW9uIEVyYSIsIkNvbW1vbiBFcmEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImhlYnJldyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIs''@;'; put 'put ''IjEwIiwiMTEiLCIxMiIsIjEzIiwiNyJdLCJzaG9ydCI6WyJUaXNocmkiLCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXSwibG9uZyI6WyJUaXNocmki''@;'; put 'put ''LCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsi''@;'; put 'put ''U3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFNIl0sInNob3J0IjpbIkFNIl0sImxv''@;'; put 'put ''bmciOlsiQU0iXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImluZGlhbiI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFp''@;'; put 'put ''c3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEiLCJCaGFkcmEiLCJBc3ZpbmEiLCJLYXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdLCJsb25nIjpbIkNoYWl0cmEiLCJWYWlzYWtoYSIsIkp5YWlzdGhhIiwiQXNhZGhhIiwiU3JhdmFuYSIsIkJoYWRyYSIsIkFz''@;'; put 'put ''dmluYSIsIkthcnRpa2EiLCJBZ3JhaGF5YW5hIiwiUGF1c2EiLCJNYWdoYSIsIlBoYWxndW5hIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpb''@;'; put 'put ''IlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJTYWthIl0sInNob3J0IjpbIlNha2EiXSwibG9uZyI6WyJTYWthIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBN''@;'; put 'put ''In19LCJpc2xhbWljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJh''@;'; put 'put ''bS4iLCJTaGF3LiIsIkRodVx1MDJiYmwtUS4iLCJEaHVcdTAyYmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3''@;'; put 'put ''YWwiLCJEaHVcdTAyYmJsLVFpXHUwMmJiZGFoIiwiRGh1XHUwMmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5''@;'; put 'put ''IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImlzbGFtaWNj''@;'; put 'put ''Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJhbS4iLCJTaGF3LiIs''@;'; put 'put ''IkRodVx1MDJiYmwtUS4iLCJEaHVcdTAyYmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHVcdTAy''@;'; put 'put ''YmJsLVFpXHUwMmJiZGFoIiwiRGh1XHUwMmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5Iiwi''@;'; put 'put ''VHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImphcGFuZXNlIjp7Im1vbnRocyI6''@;'; put 'put ''eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJy''@;'; put 'put ''dWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIs''@;'; put 'put ''IlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJUYWlrYSAoNjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1''@;'; put 'put ''MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAx''@;'; put 'put ''MzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1Nyki''@;'; put 'put ''LCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwi''@;'; put 'put ''RGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fp''@;'; put 'put ''a1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkg''@;'; put 'put ''KDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUy''@;'; put 'put ''MDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEz''@;'; put 'put ''OTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3Ug''@;'; put 'put ''KDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJKaWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5q''@;'; put 'put ''dSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZc''@;'; put 'put ''dTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5''@;'; put 'put ''YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIs''@;'; put 'put ''IkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAxMzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMp''@;'; put 'put ''IiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEzMSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAx''@;'; put 'put ''MzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5''@;'; put 'put ''XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIsIkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIs''@;'; put 'put ''Ilx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAx''@;'; put 'put ''MzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMxMTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5''@;'; put 'put ''MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4g''@;'; put 'put ''KDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEy''@;'; put 'put ''MjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwiQnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIs''@;'; put 'put ''IkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkp''@;'; put 'put ''IiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAx''@;'; put 'put ''NGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAx''@;'; put 'put ''MzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEzMTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMx''@;'; put 'put ''MVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMy''@;'; put 'put ''NikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIsIktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0''@;'; put 'put ''NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlcdTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4''@;'; put 'put ''MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNl''@;'; put 'put ''aSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUy''@;'; put 'put ''MDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMx''@;'; put 'put ''NDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFc''@;'; put 'put ''dTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1''@;'; put 'put ''NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgxNjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTll''@;'; put 'put ''aSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1hbmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5i''@;'; put 'put ''dW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSki''@;'; put 'put ''LCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTll''@;'; put 'put ''biAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAx''@;'; put 'put ''NGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAo''@;'; put 'put ''MTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNIiwiVCIsIlMiLCJIIl0sInNob3J0IjpbIlRhaWth''@;'; put 'put ''ICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcw''@;'; put 'put ''OFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAx''@;'; put 'put ''NGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgy''@;'; put 'put ''KSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEp''@;'; put 'put ''IiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQg''@;'; put 'put ''KDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0''@;'; put 'put ''N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAx''@;'; put 'put ''Mzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAo''@;'; put 'put ''OTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIs''@;'; put 'put ''IkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1''@;'; put 'put ''MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8g''@;'; put 'put ''KDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwi''@;'; put 'put ''RWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUy''@;'; put 'put ''MDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMx''@;'; put 'put ''MTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5''@;'; put 'put ''eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjAp''@;'; put 'put ''IiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEz''@;'; put 'put ''MTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAx''@;'; put 'put ''MzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAo''@;'; put 'put ''MTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAx''@;'; put 'put ''MzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCki''@;'; put 'put ''LCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcp''@;'; put 'put ''IiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1''@;'; put 'put ''MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhc''@;'; put 'put ''dTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIw''@;'; put 'put ''MTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNo''@;'; put 'put ''XHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDAp''@;'; put 'put ''IiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3''@;'; put 'put ''OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRv''@;'; put 'put ''a3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAx''@;'; put 'put ''MzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2''@;'; put 'put ''NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgx''@;'; put 'put ''NDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkg''@;'; put 'put ''KDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEg''@;'; put 'put ''KDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwi''@;'; put 'put ''TWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCki''@;'; put 'put ''LCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQg''@;'; put 'put ''KDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fu''@;'; put 'put ''c2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkth''@;'; put 'put ''ZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1l''@;'; put 'put ''aWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1MDE0ZHdhIiwiSGVpc2VpIl0sImxvbmciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAx''@;'; put 'put ''NGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwiWVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3Mjlc''@;'; put 'put ''dTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlcdTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3''@;'; put 'put ''NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAxNGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgz''@;'; put 'put ''NCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQgKDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUw''@;'; put 'put ''MTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIwMTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5''@;'; put 'put ''MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSkiLCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUy''@;'; put 'put ''MDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJUZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWll''@;'; put 'put ''biAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIwMTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIs''@;'; put 'put ''IkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRcdTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0''@;'; put 'put ''MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2''@;'; put 'put ''NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4Nyki''@;'; put 'put ''LCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRkdG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUy''@;'; put 'put ''MDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lcdTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBc''@;'; put 'put ''dTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIsIkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAo''@;'; put 'put ''MTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFuICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2''@;'; put 'put ''KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNobyAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2''@;'; put 'put ''NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIsIkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFc''@;'; put 'put ''dTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vua3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1''@;'; put 'put ''MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUyMDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1''@;'; put 'put ''MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkthcm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMiki''@;'; put 'put ''LCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAoMTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEz''@;'; put 'put ''MTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNoXHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3''@;'; put 'put ''XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAxNGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEy''@;'; put 'put ''NzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIsIlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIw''@;'; put 'put ''MTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMxMzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1''@;'; put 'put ''MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2FyeWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAx''@;'; put 'put ''MzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hcdTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcy''@;'; put 'put ''XHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMxMzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAo''@;'; put 'put ''MTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRcdTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMx''@;'; put 'put ''NDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIpIiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNo''@;'; put 'put ''XHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJcdTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAo''@;'; put 'put ''MTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUwNCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1''@;'; put 'put ''ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEzMTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3Ug''@;'; put 'put ''KDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRcdTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUw''@;'; put 'put ''MTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYxXHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUw''@;'; put 'put ''MTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAxNGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTcz''@;'; put 'put ''Nlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhcdTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5c''@;'; put 'put ''dTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBc''@;'; put 'put ''dTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIwMTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwi''@;'; put 'put ''R2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTWVpamkiLCJUYWlzaFx1MDE0ZCIsIlNoXHUwMTRkd2EiLCJIZWlzZWkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sInBlcnNpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6''@;'; put 'put ''WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNm''@;'; put 'put ''YW5kIl0sImxvbmciOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNmYW5kIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYi''@;'; put 'put ''LCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBUCJdLCJz''@;'; put 'put ''aG9ydCI6WyJBUCJdLCJsb25nIjpbIkFQIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJyb2MiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFy''@;'; put 'put ''IiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwi''@;'; put 'put ''RGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJz''@;'; put 'put ''ZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwic2hvcnQiOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdLCJsb25nIjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIs''@;'; put 'put ''InBtIjoiUE0ifX19fSwibnVtYmVyIjp7Im51IjpbImxhdG4iXSwicGF0dGVybnMiOnsiZGVjaW1hbCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e251bWJlcn0ifSwiY3VycmVuY3kiOnsicG9zaXRpdmVQYXR0ZXJuIjoie2N1''@;'; put 'put ''cnJlbmN5fXtudW1iZXJ9IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17Y3VycmVuY3l9e251bWJlcn0ifSwicGVyY2VudCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfXtwZXJjZW50U2lnbn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9e3BlcmNl''@;'; put 'put ''bnRTaWdufSJ9fSwic3ltYm9scyI6eyJsYXRuIjp7ImRlY2ltYWwiOiIuIiwiZ3JvdXAiOiIsIiwibmFuIjoiTmFOIiwicGx1c1NpZ24iOiIrIiwibWludXNTaWduIjoiLSIsInBlcmNlbnRTaWduIjoiJSIsImluZmluaXR5IjoiXHUyMjFlIn19LCJjdXJyZW5jaWVzIjp7IkFVRCI6IkEkIiwi''@;'; put 'put ''QlJMIjoiUiQiLCJDQUQiOiJDQSQiLCJDTlkiOiJDTlx4YTUiLCJFVVIiOiJcdTIwYWMiLCJHQlAiOiJceGEzIiwiSEtEIjoiSEskIiwiSUxTIjoiXHUyMGFhIiwiSU5SIjoiXHUyMGI5IiwiSlBZIjoiXHhhNSIsIktSVyI6Ilx1MjBhOSIsIk1YTiI6Ik1YJCIsIk5aRCI6Ik5aJCIsIlRXRCI6''@;'; put 'put ''Ik5UJCIsIlVTRCI6IiQiLCJWTkQiOiJcdTIwYWIiLCJYQUYiOiJGQ0ZBIiwiWENEIjoiRUMkIiwiWE9GIjoiQ0ZBIiwiWFBGIjoiQ0ZQRiJ9fX0nKX19LGM9Pnt2YXIgbD1uPT5jKGMucz1uKTtsKDI0MDUwKSxsKDk2OTM1KX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.402fc3cfbc7e1bd4-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 ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30scD17fTtmdW5jdGlvbiByKGUpe3ZhciBhPXBbZV07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciB0PXBbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBv''@;'; put 'put ''cnRzLHIpLHQubG9hZGVkPSEwLHQuZXhwb3J0c31yLm09cyxlPVtdLHIuTz0oYSx0LG8sbCk9PntpZighdCl7dmFyIGM9MS8wO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2Zvcih2YXJbdCxvLGxdPWVbbl0sZD0hMCxmPTA7Zjx0Lmxlbmd0aDtmKyspKCExJmx8fGM+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhyLk8pLmV2ZXJ5KF89PnIuT1tfXSh0W2ZdKSk/dC5zcGxpY2UoZi0tLDEpOihkPSExLGw8YyYmKGM9bCkpO2lmKGQpe2Uuc3BsaWNlKG4tLSwxKTt2YXIgdT1vKCk7dm9pZCAwIT09dSYmKGE9dSl9fXJldHVybiBhfWw9bHx8MDtmb3IodmFyIG49ZS5sZW5ndGg7bj4wJiZlW24tMV1bMl0+''@;'; put 'put ''bDtuLS0pZVtuXT1lW24tMV07ZVtuXT1bdCxvLGxdfSxyLm49ZT0+e3ZhciBhPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiByLmQoYSx7YX0pLGF9LHIuZD0oZSxhKT0+e2Zvcih2YXIgdCBpbiBhKXIubyhhLHQpJiYhci5vKGUsdCkmJk9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OmFbdF19KX0sci51PWU9PmUrIi4yNjg5NmQ5M2UwNTZkY2I5LmpzIixyLm89KGUsYSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGEpLHIucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmlu''@;'; put 'put ''Z1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10p''@;'; put 'put ''LGUpLCgoKT0+e3ZhciBlO3IudHQ9KCk9Pih2b2lkIDA9PT1lJiYoZT17Y3JlYXRlU2NyaXB0VVJMOmE9PmF9LHR5cGVvZiB0cnVzdGVkVHlwZXM8InUiJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5JiYoZT10cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2J1bmRsZXIiLGUp''@;'; put 'put ''KSksZSl9KSgpLHIudHU9ZT0+ci50dCgpLmNyZWF0ZVNjcmlwdFVSTChlKSxyLnA9IiIsKCgpPT57ci5iPWRvY3VtZW50LmJhc2VVUkl8fHNlbGYubG9jYXRpb24uaHJlZjt2YXIgZT17MTIxOjB9O3IuTy5qPW89PjA9PT1lW29dO3ZhciBhPShvLGwpPT57dmFyIGYsdSxbbixjLGRdPWwsaT0w''@;'; put 'put ''O2lmKG4uc29tZShiPT4wIT09ZVtiXSkpe2ZvcihmIGluIGMpci5vKGMsZikmJihyLm1bZl09Y1tmXSk7aWYoZCl2YXIgdj1kKHIpfWZvcihvJiZvKGwpO2k8bi5sZW5ndGg7aSsrKXIubyhlLHU9bltpXSkmJmVbdV0mJmVbdV1bMF0oKSxlW3VdPTA7cmV0dXJuIHIuTyh2KX0sdD1zZWxmLndl''@;'; put 'put ''YnBhY2tDaHVua2RhdGFjb250cm9sbGVyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXJ8fFtdO3QuZm9yRWFjaChhLmJpbmQobnVsbCwwKSksdC5wdXNoPWEuYmluZChudWxsLHQucHVzaC5iaW5kKHQpKX0pKCl9KSgpOw=='';'; 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.f418d7e71dbfd309-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 ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIsbil7aWYoIm9iamVjdCIhPXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gcjt2YXIgcz1yW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwPT09cylyZXR1''@;'; put 'put ''cm4gU3RyaW5nKHIpO2lmKCJvYmplY3QiIT10eXBlb2Yocz1zLmNhbGwociwic3RyaW5nIikpKXJldHVybiBzO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9KGU9dS5rZXkpKT9lOlN0cmluZyhlKSx1KX12YXIgZX1m''@;'; put 'put ''dW5jdGlvbiB2KCl7cmV0dXJuKHY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihhKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXt2YXIgdCx1PWFyZ3VtZW50c1tpXTtmb3IodCBpbiB1KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbCh1LHQpJiYoYVt0XT11W3RdKX1yZXR1cm4gYX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBKKGEsaSl7KG51bGw9PWl8fGk+YS5sZW5ndGgpJiYoaT1hLmxlbmd0aCk7Zm9yKHZhciB0PTAsdT1uZXcgQXJyYXkoaSk7dDxpO3QrKyl1W3RdPWFbdF07cmV0dXJuIHV9''@;'; put 'put ''ZnVuY3Rpb24gVShhLGkpe3ZhciB0LHU9dHlwZW9mIFN5bWJvbDwidSImJmFbU3ltYm9sLml0ZXJhdG9yXXx8YVsiQEBpdGVyYXRvciJdO2lmKHUpcmV0dXJuKHU9dS5jYWxsKGEpKS5uZXh0LmJpbmQodSk7aWYoQXJyYXkuaXNBcnJheShhKXx8KHU9ZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihl''@;'; put 'put ''KXJldHVybiJzdHJpbmciPT10eXBlb2YgZT9KKGUscik6Ik1hcCI9PT0obj0iT2JqZWN0Ij09PShuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKSkmJmUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5uYW1lOm4pfHwiU2V0Ij09PW4/QXJyYXkuZnJvbShl''@;'; put 'put ''KToiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pP0ooZSxyKTp2b2lkIDB9KGEpKXx8aSYmYSYmIm51bWJlciI9PXR5cGVvZiBhLmxlbmd0aClyZXR1cm4gdSYmKGE9dSksdD0wLGZ1bmN0aW9uKCl7cmV0dXJuIHQ+PWEu''@;'; put 'put ''bGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTphW3QrK119fTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZl''@;'; put 'put ''IGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG9lPTA7ZnVuY3Rpb24gSyhhKXtyZXR1cm4iX19wcml2YXRlXyIrb2UrKysiXyIrYX1mdW5jdGlvbiBHKGEsaSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsaSkpcmV0dXJuIGE7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpfWZ1bmN0aW9uIFEoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIs''@;'; put 'put ''aGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51''@;'; put 'put ''bGwseGh0bWw6ITF9fWZ1bmN0aW9uIFcoYSl7Qy5kZWZhdWx0cz1hfWZ1bmN0aW9uIFkoYSl7cmV0dXJuIGNlW2FdfUMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfTt2YXIgZWU9L1smPD4iJ10vLGxlPW5ldyBSZWdFeHAoZWUuc291cmNlLCJnIiksdGU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLERlPW5ldyBSZWdFeHAodGUuc291cmNlLCJnIiksY2U9eyImIjoiJmFtcDsiLCI8IjoiJmx0''@;'; put 'put ''OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9O2Z1bmN0aW9uIHkoYSxpKXtpZihpKXtpZihlZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UobGUsWSl9ZWxzZSBpZih0ZS50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UoRGUsWSk7cmV0dXJuIGF9dmFyIHBlPS8mKCMoPzpc''@;'; put 'put ''ZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIHVlKGEpe3JldHVybiBhLnJlcGxhY2UocGUsZnVuY3Rpb24oaSx0KXtyZXR1cm4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfXZhciBoZT0vKF58W15cW10pXF4vZztmdW5jdGlvbiBFKGEsaSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/YTphLnNvdXJjZSxpPWl8fCIi''@;'; put 'put ''O3ZhciB0PXtyZXBsYWNlOmZ1bmN0aW9uKHUsZSl7cmV0dXJuIGU9KGU9ZS5zb3VyY2V8fGUpLnJlcGxhY2UoaGUsIiQxIiksYT1hLnJlcGxhY2UodSxlKSx0fSxnZXRSZWdleDpmdW5jdGlvbigpe3JldHVybiBuZXcgUmVnRXhwKGEsaSl9fTtyZXR1cm4gdH12YXIgZ2U9L1teXHc6XS9nLGZl''@;'; put 'put ''PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gbmUoYSxpLHQpe2lmKGEpe3RyeXt1PWRlY29kZVVSSUNvbXBvbmVudCh1ZSh0KSkucmVwbGFjZShnZSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09dS5pbmRleE9mKCJqYXZhc2NyaXB0''@;'; put 'put ''OiIpfHwwPT09dS5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PXUuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH12YXIgdTtpJiYhZmUudGVzdCh0KSYmKGE9dCxNWyIgIisodT1pKV18fChNWyIgIit1XT1GZS50ZXN0KHUpP3UrIi8iOkgodSwiLyIsITApKSxpPS0xPT09KHU9TVsiICIr''@;'; put 'put ''dV0pLmluZGV4T2YoIjoiKSx0PSIvLyI9PT1hLnN1YnN0cmluZygwLDIpP2k/YTp1LnJlcGxhY2UoZGUsIiQxIikrYToiLyI9PT1hLmNoYXJBdCgwKT9pP2E6dS5yZXBsYWNlKEFlLCIkMSIpK2E6dSthKTt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1''@;'; put 'put ''cm4gbnVsbH1yZXR1cm4gdH12YXIgTT17fSxGZT0vXlteOl0rOlwvKlteL10qJC8sZGU9L14oW146XSs6KVtcc1xTXSokLyxBZT0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sST17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHJlKGEsaSl7dmFyIHQ9YS5yZXBsYWNlKC9cfC9nLGZ1''@;'; put 'put ''bmN0aW9uKGUscixuKXtmb3IodmFyIHM9ITEscD1yOzA8PS0tcCYmIlxcIj09PW5bcF07KXM9IXM7cmV0dXJuIHM/InwiOiIgfCJ9KS5zcGxpdCgvIFx8LyksdT0wO2lmKHRbMF0udHJpbSgpfHx0LnNoaWZ0KCksMDx0Lmxlbmd0aCYmIXRbdC5sZW5ndGgtMV0udHJpbSgpJiZ0LnBvcCgpLHQu''@;'; put 'put ''bGVuZ3RoPmkpdC5zcGxpY2UoaSk7ZWxzZSBmb3IoO3QubGVuZ3RoPGk7KXQucHVzaCgiIik7Zm9yKDt1PHQubGVuZ3RoO3UrKyl0W3VdPXRbdV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiB0fWZ1bmN0aW9uIEgoYSxpLHQpe3ZhciB1PWEubGVuZ3RoO2lmKDA9PT11KXJl''@;'; put 'put ''dHVybiIiO2Zvcih2YXIgZT0wO2U8dTspe3ZhciByPWEuY2hhckF0KHUtZS0xKTtpZigociE9PWl8fHQpJiYocj09PWl8fCF0KSlicmVhaztlKyt9cmV0dXJuIGEuc2xpY2UoMCx1LWUpfWZ1bmN0aW9uIGllKGEscix0LHUpe3ZhciBlPXIuaHJlZixuPShyPXIudGl0bGU/eShyLnRpdGxlKTpu''@;'; put 'put ''dWxsLGFbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpKTtyZXR1cm4iISIhPT1hWzBdLmNoYXJBdCgwKT8odS5zdGF0ZS5pbkxpbms9ITAsYT17dHlwZToibGluayIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDpuLHRva2Vuczp1LmlubGluZVRva2VucyhuKX0sdS5zdGF0ZS5pbkxp''@;'; put 'put ''bms9ITEsYSk6e3R5cGU6ImltYWdlIixyYXc6dCxocmVmOmUsdGl0bGU6cix0ZXh0Onkobil9fXZhciBqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zcGFjZT1mdW5jdGlvbih0KXtpZigodD10''@;'; put 'put ''aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyh0KSkmJjA8dFswXS5sZW5ndGgpcmV0dXJue3R5cGU6InNwYWNlIixyYXc6dFswXX19LGkuY29kZT1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpKXJldHVybiB1PWVbMF0ucmVwbGFjZSgvXiB7''@;'; put 'put ''MSw0fS9nbSwiIikse3R5cGU6ImNvZGUiLHJhdzplWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/dTpIKHUsIlxuIil9fSxpLmZlbmNlcz1mdW5jdGlvbihzKXt2YXIgdSxlLHIsbjtpZihzPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4''@;'; put 'put ''ZWMocykpcmV0dXJuIGU9dT1zWzBdLHI9c1szXXx8IiIsZT1udWxsPT09KGU9dS5tYXRjaCgvXihccyspKD86YGBgKS8pKT9yOihuPWVbMV0sci5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24ocCl7dmFyIGc9cC5tYXRjaCgvXlxzKy8pO3JldHVybiBudWxsIT09ZyYmZ1swXS5sZW5ndGg+PW4u''@;'; put 'put ''bGVuZ3RoP3Auc2xpY2Uobi5sZW5ndGgpOnB9KS5qb2luKCJcbiIpKSx7dHlwZToiY29kZSIscmF3OnUsbGFuZzpzWzJdJiZzWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRleHQ6ZX19LGkuaGVhZGluZz1mdW5jdGlvbihyKXt2YXIgdSxlO2lm''@;'; put 'put ''KHI9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMocikpcmV0dXJuIHU9clsyXS50cmltKCksLyMkLy50ZXN0KHUpJiYoZT1IKHUsIiMiKSwhdGhpcy5vcHRpb25zLnBlZGFudGljJiZlJiYhLyAkLy50ZXN0KGUpfHwodT1lLnRyaW0oKSkpLHt0eXBlOiJoZWFkaW5nIixyYXc6clswXSxk''@;'; put 'put ''ZXB0aDpyWzFdLmxlbmd0aCx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS5ocj1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyh0KSlyZXR1cm57dHlwZToiaHIiLHJhdzp0WzBdfX0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKG4pe3ZhciB1LGUs''@;'; put 'put ''cjtpZihuPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKG4pKXJldHVybiB1PW5bMF0ucmVwbGFjZSgvXiAqPlsgXHRdPy9nbSwiIiksZT10aGlzLmxleGVyLnN0YXRlLnRvcCx0aGlzLmxleGVyLnN0YXRlLnRvcD0hMCxyPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnModSksdGhpcy5s''@;'; put 'put ''ZXhlci5zdGF0ZS50b3A9ZSx7dHlwZToiYmxvY2txdW90ZSIscmF3Om5bMF0sdG9rZW5zOnIsdGV4dDp1fX0saS5saXN0PWZ1bmN0aW9uKHQpe3ZhciB1PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKHQpO2lmKHUpe3ZhciBlLHIsbixzLHAsZyxELG8sRixkLHgsaD0xPChrPXVbMV0udHJp''@;'; put 'put ''bSgpKS5sZW5ndGgsbD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6aCxzdGFydDpoPytrLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfSxrPWg/IlxcZHsxLDl9XFwiK2suc2xpY2UoLTEpOiJcXCIrazt0aGlzLm9wdGlvbnMucGVkYW50aWMmJihrPWg/azoiWyorLV0iKTtm''@;'; put 'put ''b3IodmFyIGI9bmV3IFJlZ0V4cCgiXiggezAsM30iK2srIikoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkpIik7dCYmKHg9ITEsdT1iLmV4ZWModCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KHQpOyl7aWYodD10LnN1YnN0cmluZygoZT11WzBdKS5sZW5ndGgpLEQ9dVsyXS5zcGxp''@;'; put 'put ''dCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLGZ1bmN0aW9uKEwpe3JldHVybiIgIi5yZXBlYXQoMypMLmxlbmd0aCl9KSxvPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHM9MixkPUQudHJpbUxlZnQoKSk6KHM9dVsyXS5zZWFyY2goL1teIF0vKSxkPUQuc2xp''@;'; put 'put ''Y2Uocz00PHM/MTpzKSxzKz11WzFdLmxlbmd0aCkscD0hMSwhRCYmL14gKiQvLnRlc3QobykmJihlKz1vKyJcbiIsdD10LnN1YnN0cmluZyhvLmxlbmd0aCsxKSx4PSEwKSwheClmb3IodmFyIHc9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSg/OlsqKy1dfFxcZHsxLDl9''@;'; put 'put ''Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpIiksQT1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSIpLEI9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsi''@;'; put 'put ''fSg/OmBgYHx+fn4pIiksXz1uZXcgUmVnRXhwKCJeIHswLCIrTWF0aC5taW4oMyxzLTEpKyJ9IyIpO3QmJihvPUY9dC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKG89by5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCFCLnRlc3Qobykp''@;'; put 'put ''JiYhXy50ZXN0KG8pJiYhdy50ZXN0KG8pJiYhQS50ZXN0KHQpOyl7aWYoby5zZWFyY2goL1teIF0vKT49c3x8IW8udHJpbSgpKWQrPSJcbiIrby5zbGljZShzKTtlbHNle2lmKHB8fDQ8PUQuc2VhcmNoKC9bXiBdLyl8fEIudGVzdChEKXx8Xy50ZXN0KEQpfHxBLnRlc3QoRCkpYnJlYWs7ZCs9''@;'; put 'put ''IlxuIitvfXB8fG8udHJpbSgpfHwocD0hMCksZSs9RisiXG4iLHQ9dC5zdWJzdHJpbmcoRi5sZW5ndGgrMSksRD1vLnNsaWNlKHMpfWwubG9vc2V8fChnP2wubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChlKSYmKGc9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYocj0vXlxbWyB4WF1cXSAvLmV4''@;'; put 'put ''ZWMoZCkpJiYobj0iWyBdICIhPT1yWzBdLGQ9ZC5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSksbC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzplLHRhc2s6ISFyLGNoZWNrZWQ6bixsb29zZTohMSx0ZXh0OmR9KSxsLnJhdys9ZX1sLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFd''@;'; put 'put ''LnJhdz1lLnRyaW1SaWdodCgpLGwuaXRlbXNbbC5pdGVtcy5sZW5ndGgtMV0udGV4dD1kLnRyaW1SaWdodCgpLGwucmF3PWwucmF3LnRyaW1SaWdodCgpO2Zvcih2YXIgeixhZT1sLml0ZW1zLmxlbmd0aCwkPTA7JDxhZTskKyspdGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsbC5pdGVtc1skXS50''@;'; put 'put ''b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhsLml0ZW1zWyRdLnRleHQsW10pLGwubG9vc2V8fCh6PTA8KHo9bC5pdGVtc1skXS50b2tlbnMuZmlsdGVyKGZ1bmN0aW9uKEwpe3JldHVybiJzcGFjZSI9PT1MLnR5cGV9KSkubGVuZ3RoJiZ6LnNvbWUoZnVuY3Rpb24oTCl7cmV0dXJuL1xu''@;'; put 'put ''Lipcbi8udGVzdChMLnJhdyl9KSxsLmxvb3NlPXopO2lmKGwubG9vc2UpZm9yKCQ9MDskPGFlOyQrKylsLml0ZW1zWyRdLmxvb3NlPSEwO3JldHVybiBsfX0saS5odG1sPWZ1bmN0aW9uKGUpe3ZhciB1O2lmKGU9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMoZSkpcmV0dXJuIHU9e3R5cGU6''@;'; put 'put ''Imh0bWwiLGJsb2NrOiEwLHJhdzplWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09ZVsxXXx8InNjcmlwdCI9PT1lWzFdfHwic3R5bGUiPT09ZVsxXSksdGV4dDplWzBdfSx0aGlzLm9wdGlvbnMuc2FuaXRpemUmJihlPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhp''@;'; put 'put ''cy5vcHRpb25zLnNhbml0aXplcihlWzBdKTp5KGVbMF0pLHUudHlwZT0icGFyYWdyYXBoIix1LnRleHQ9ZSx1LnRva2Vucz10aGlzLmxleGVyLmlubGluZShlKSksdX0saS5kZWY9ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhuKSlyZXR1cm4g''@;'; put 'put ''dT1uWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxlPW5bMl0/blsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixyPW5bM10mJm5bM10uc3Vic3RyaW5nKDEsblszXS5sZW5ndGgtMSkucmVw''@;'; put 'put ''bGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx7dHlwZToiZGVmIix0YWc6dSxyYXc6blswXSxocmVmOmUsdGl0bGU6cn19LGkudGFibGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWModCkpe3ZhciB1PXt0eXBlOiJ0YWJsZSIsaGVhZGVy''@;'; put 'put ''OnJlKHRbMV0pLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pLGFsaWduOnRbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOnRbM10mJnRbM10udHJpbSgpP3RbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3BsaXQoIlxuIik6W119O2lm''@;'; put 'put ''KHUuaGVhZGVyLmxlbmd0aD09PXUuYWxpZ24ubGVuZ3RoKXt1LnJhdz10WzBdO2Zvcih2YXIgZSxyLG4scz11LmFsaWduLmxlbmd0aCxwPTA7cDxzO3ArKyl1LmFsaWduW3BdPS9eICotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdCh1LmFsaWduW3Bd''@;'; put 'put ''KT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KHUuYWxpZ25bcF0pPyJsZWZ0IjpudWxsO2ZvcihzPXUucm93cy5sZW5ndGgscD0wO3A8cztwKyspdS5yb3dzW3BdPXJlKHUucm93c1twXSx1LmhlYWRlci5sZW5ndGgpLm1hcChmdW5jdGlvbihnKXtyZXR1cm57dGV4dDpnfX0pO2ZvcihzPXUu''@;'; put 'put ''aGVhZGVyLmxlbmd0aCxlPTA7ZTxzO2UrKyl1LmhlYWRlcltlXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUodS5oZWFkZXJbZV0udGV4dCk7Zm9yKHM9dS5yb3dzLmxlbmd0aCxlPTA7ZTxzO2UrKylmb3Iobj11LnJvd3NbZV0scj0wO3I8bi5sZW5ndGg7cisrKW5bcl0udG9rZW5zPXRoaXMu''@;'; put 'put ''bGV4ZXIuaW5saW5lKG5bcl0udGV4dCk7cmV0dXJuIHV9fX0saS5saGVhZGluZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyh0KSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OnRbMF0sZGVwdGg6Ij0iPT09dFsyXS5jaGFyQXQoMCk/MToyLHRleHQ6''@;'; put 'put ''dFsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFsxXSl9fSxpLnBhcmFncmFwaD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMoZSkpcmV0dXJuIHU9IlxuIj09PWVbMV0uY2hhckF0KGVbMV0ubGVuZ3RoLTEpP2VbMV0uc2xpY2UoMCwt''@;'; put 'put ''MSk6ZVsxXSx7dHlwZToicGFyYWdyYXBoIixyYXc6ZVswXSx0ZXh0OnUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHUpfX0saS50ZXh0PWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWModCkpcmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSx0''@;'; put 'put ''b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUodFswXSl9fSxpLmVzY2FwZT1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKHQpKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzp0WzBdLHRleHQ6eSh0WzFdKX19LGkudGFnPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5y''@;'; put 'put ''dWxlcy5pbmxpbmUudGFnLmV4ZWModCkpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePFwvYT4vaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0''@;'; put 'put ''ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2Jk''@;'; put 'put ''fHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6dFswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVy''@;'; put 'put ''LnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXX19LGkubGluaz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmxp''@;'; put 'put ''bmsuZXhlYyh0KSl7dmFyIHU9dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KHUpKXtpZighLz4kLy50ZXN0KHUpKXJldHVybjt2YXIgcj1IKHUuc2xpY2UoMCwtMSksIlxcIik7aWYoKHUubGVuZ3RoLXIubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNlLTE8''@;'; put 'put ''KHI9ZnVuY3Rpb24ocyxwKXtpZigtMSE9PXMuaW5kZXhPZihwWzFdKSlmb3IodmFyIGc9cy5sZW5ndGgsRD0wLG89MDtvPGc7bysrKWlmKCJcXCI9PT1zW29dKW8rKztlbHNlIGlmKHNbb109PT1wWzBdKUQrKztlbHNlIGlmKHNbb109PT1wWzFdJiYtLUQ8MClyZXR1cm4gbztyZXR1cm4tMX0o''@;'; put 'put ''dFsyXSwiKCkiKSkmJihuPSgwPT09dFswXS5pbmRleE9mKCIhIik/NTo0KSt0WzFdLmxlbmd0aCtyLHRbMl09dFsyXS5zdWJzdHJpbmcoMCxyKSx0WzBdPXRbMF0uc3Vic3RyaW5nKDAsbikudHJpbSgpLHRbM109IiIpO3I9dFsyXTt2YXIgZSxuPSIiO3JldHVybiB0aGlzLm9wdGlvbnMucGVk''@;'; put 'put ''YW50aWM/KGU9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKHIpKSYmKHI9ZVsxXSxuPWVbM10pOm49dFszXT90WzNdLnNsaWNlKDEsLTEpOiIiLHI9ci50cmltKCksaWUodCx7aHJlZjoocj0vXjwvLnRlc3Qocik/dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0''@;'; put 'put ''KHUpP3Iuc2xpY2UoMSk6ci5zbGljZSgxLC0xKTpyKSYmci5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOm4mJm4ucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sdFswXSx0aGlzLmxleGVyKX19LGkucmVmbGluaz1mdW5jdGlv''@;'; put 'put ''bih0LHUpe3ZhciBlO2lmKGU9KGU9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpcmV0dXJuKHQ9dVsodD0oZVsyXXx8ZVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSkudG9Mb3dlckNhc2UoKV0pP2llKGUsdCxlWzBd''@;'; put 'put ''LHRoaXMubGV4ZXIpOnt0eXBlOiJ0ZXh0IixyYXc6dT1lWzBdLmNoYXJBdCgwKSx0ZXh0OnV9fSxpLmVtU3Ryb25nPWZ1bmN0aW9uKHQsdSxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYociYmKCFyWzNdfHwh''@;'; put 'put ''ZS5tYXRjaCgvKD86WzAtOUEtWmEtelx4QUFceEIyXHhCM1x4QjVceEI5XHhCQVx4QkMtXHhCRVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3''@;'; put 'put ''Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NjAtXHUwNjY5XHUw''@;'; put 'put ''NjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDMC1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQw''@;'; put 'put ''LVx1MDg1OFx1MDg2MC1cdTA4NkFcdTA4NzAtXHUwODg3XHUwODg5LVx1MDg4RVx1MDhBMC1cdTA4QzlcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5''@;'; put 'put ''QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RTYtXHUwOUYxXHUwOUY0LVx1MDlGOVx1MDlGQ1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEz''@;'; put 'put ''NVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTZGXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUx''@;'; put 'put ''XHUwQUU2LVx1MEFFRlx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjY2LVx1MEI2Rlx1MEI3MS1cdTBCNzdcdTBCODNcdTBCODUt''@;'; put 'put ''XHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEJFNi1cdTBCRjJcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEt''@;'; put 'put ''XHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM1RFx1MEM2MFx1MEM2MVx1MEM2Ni1cdTBDNkZcdTBDNzgtXHUwQzdFXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDRERcdTBDREVcdTBDRTBc''@;'; put 'put ''dTBDRTFcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDA0LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1OC1cdTBENjFcdTBENjYtXHUwRDc4XHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIz''@;'; put 'put ''LVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBERTYtXHUwREVGXHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBFQTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIz''@;'; put 'put ''XHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjIwLVx1MEYzM1x1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0YtXHUxMDQ5XHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEw''@;'; put 'put ''NjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTA5MC1cdTEwOTlcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUx''@;'; put 'put ''Mjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzY5LVx1MTM3Q1x1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1''@;'; put 'put ''XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcxMVx1MTcxRi1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUx''@;'; put 'put ''N0RDXHUxN0UwLVx1MTdFOVx1MTdGMC1cdTE3RjlcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3OFx1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5''@;'; put 'put ''XHUxOUQwLVx1MTlEQVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQTgwLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Q1x1MUI1MC1cdTFCNTlcdTFCODMtXHUxQkEwXHUxQkFFLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNDAtXHUxQzQ5XHUx''@;'; put 'put ''QzRELVx1MUM3RFx1MUM4MC1cdTFDODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUxQ0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAt''@;'; put 'put ''XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3''@;'; put 'put ''MFx1MjA3MVx1MjA3NC1cdTIwNzlcdTIwN0YtXHUyMDg5XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0''@;'; put 'put ''RVx1MjE1MC1cdTIxODlcdTI0NjAtXHUyNDlCXHUyNEVBLVx1MjRGRlx1Mjc3Ni1cdTI3OTNcdTJDMDAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkNGRFx1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJE''@;'; put 'put ''QTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZc''@;'; put 'put ''dTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJGXHUzMTMxLVx1MzE4RVx1MzE5Mi1cdTMxOTVcdTMxQTAtXHUzMUJGXHUzMUYwLVx1MzFGRlx1MzIyMC1cdTMyMjlcdTMyNDgtXHUzMjRGXHUzMjUxLVx1MzI1Rlx1MzI4MC1cdTMyODlcdTMyQjEtXHUz''@;'; put 'put ''MkJGXHUzNDAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3Q0FcdUE3RDBcdUE3RDFcdUE3RDNc''@;'; put 'put ''dUE3RDUtXHVBN0Q5XHVBN0YyLVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTgzMC1cdUE4MzVcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThEMC1cdUE4RDlcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTAwLVx1QTkyNVx1QTkz''@;'; put 'put ''MC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1''@;'; put 'put ''QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY5''@;'; put 'put ''XHVBQjcwLVx1QUJFMlx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVG''@;'; put 'put ''QjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1c''@;'; put 'put ''dUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDA3LVx1''@;'; put 'put ''REQzM1x1REQ0MC1cdURENzhcdUREOEFcdUREOEJcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMS1cdURFRkJcdURGMDAtXHVERjIzXHVERjJELVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4''@;'; put 'put ''MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERDcwLVx1REQ3QVx1REQ3Qy1cdUREOEFcdUREOEMtXHVERDkyXHVERDk0XHVERDk1XHVERDk3LVx1RERBMVx1RERBMy1cdUREQjFcdUREQjMt''@;'; put 'put ''XHVEREI5XHVEREJCXHVEREJDXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XHVERjgwLVx1REY4NVx1REY4Ny1cdURGQjBcdURGQjItXHVERkJBXXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVE''@;'; put 'put ''QzU1XHVEQzU4LVx1REM3Nlx1REM3OS1cdURDOUVcdURDQTctXHVEQ0FGXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1RENGQi1cdUREMUJcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCQy1cdUREQ0ZcdURERDItXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTkt''@;'; put 'put ''XHVERTM1XHVERTQwLVx1REU0OFx1REU2MC1cdURFN0VcdURFODAtXHVERTlGXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURFRUItXHVERUVGXHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNTgtXHVERjcyXHVERjc4LVx1REY5MVx1REZBOS1cdURGQUZdfFx1RDgwM1tcdURDMDAt''@;'; put 'put ''XHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdURDRkEtXHVERDIzXHVERDMwLVx1REQzOVx1REU2MC1cdURFN0VcdURFODAtXHVERUE5XHVERUIwXHVERUIxXHVERjAwLVx1REYyN1x1REYzMC1cdURGNDVcdURGNTEtXHVERjU0XHVERjcwLVx1REY4MVx1REZCMC1cdURGQ0JcdURG''@;'; put 'put ''RTAtXHVERkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM1Mi1cdURDNkZcdURDNzFcdURDNzJcdURDNzVcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDMtXHVERDI2XHVERDM2LVx1REQzRlx1REQ0NFx1REQ0N1x1REQ1MC1cdURENzJcdURENzZcdUREODMt''@;'; put 'put ''XHVEREIyXHVEREMxLVx1RERDNFx1REREMC1cdUREREFcdURERENcdURERTEtXHVEREY0XHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFM0ZcdURFNDBcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REVG''@;'; put 'put ''MC1cdURFRjlcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzUwLVx1REM1OVx1REM1Ri1c''@;'; put 'put ''dURDNjFcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUFBXHVERUI4XHVERUMwLVx1REVDOVx1REYwMC1cdURGMUFcdURGMzAtXHVERjNC''@;'; put 'put ''XHVERjQwLVx1REY0Nl18XHVEODA2W1x1REMwMC1cdURDMkJcdURDQTAtXHVEQ0YyXHVEQ0ZGLVx1REQwNlx1REQwOVx1REQwQy1cdUREMTNcdUREMTVcdUREMTZcdUREMTgtXHVERDJGXHVERDNGXHVERDQxXHVERDUwLVx1REQ1OVx1RERBMC1cdUREQTdcdUREQUEtXHVEREQwXHVEREUxXHVE''@;'; put 'put ''REUzXHVERTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODlcdURFOURcdURFQjAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNTAtXHVEQzZDXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEIt''@;'; put 'put ''XHVERDMwXHVERDQ2XHVERDUwLVx1REQ1OVx1REQ2MC1cdURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVEREEwLVx1RERBOVx1REVFMC1cdURFRjJcdURGMDJcdURGMDQtXHVERjEwXHVERjEyLVx1REYzM1x1REY1MC1cdURGNTlcdURGQjBcdURGQzAtXHVERkQ0XXxcdUQ4''@;'; put 'put ''MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxcdUQ4MEJbXHVERjkwLVx1REZGMF18W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4MjJcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XHVEODgwLVx1RDg4''@;'; put 'put ''M1x1RDg4NS1cdUQ4ODddW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJGXHVEQzQxLVx1REM0Nl18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFNzAtXHVERUJFXHVERUMwLVx1REVDOVx1REVE''@;'; put 'put ''MC1cdURFRURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNUItXHVERjYxXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTk2XHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgy''@;'; put 'put ''MVtcdURDMDAtXHVERkY3XXxcdUQ4MjNbXHVEQzAwLVx1RENENVx1REQwMC1cdUREMDhdfFx1RDgyQltcdURGRjAtXHVERkYzXHVERkY1LVx1REZGQlx1REZGRFx1REZGRV18XHVEODJDW1x1REMwMC1cdUREMjJcdUREMzJcdURENTAtXHVERDUyXHVERDU1XHVERDY0LVx1REQ2N1x1REQ3MC1c''@;'; put 'put ''dURFRkJdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzRbXHVERUMwLVx1REVEM1x1REVFMC1cdURFRjNcdURGNjAtXHVERjc4XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURD''@;'; put 'put ''QTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1''@;'; put 'put ''REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZD''@;'; put 'put ''RS1cdURGRkZdfFx1RDgzN1tcdURGMDAtXHVERjFFXHVERjI1LVx1REYyQV18XHVEODM4W1x1REMzMC1cdURDNkRcdUREMDAtXHVERDJDXHVERDM3LVx1REQzRFx1REQ0MC1cdURENDlcdURENEVcdURFOTAtXHVERUFEXHVERUMwLVx1REVFQlx1REVGMC1cdURFRjldfFx1RDgzOVtcdURDRDAt''@;'; put 'put ''XHVEQ0VCXHVEQ0YwLVx1RENGOVx1REZFMC1cdURGRTZcdURGRTgtXHVERkVCXHVERkVEXHVERkVFXHVERkYwLVx1REZGRV18XHVEODNBW1x1REMwMC1cdURDQzRcdURDQzctXHVEQ0NGXHVERDAwLVx1REQ0M1x1REQ0Qlx1REQ1MC1cdURENTldfFx1RDgzQltcdURDNzEtXHVEQ0FCXHVEQ0FE''@;'; put 'put ''LVx1RENBRlx1RENCMS1cdURDQjRcdUREMDEtXHVERDJEXHVERDJGLVx1REQzRFx1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQt''@;'; put 'put ''XHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1''@;'; put 'put ''REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4M0NbXHVERDAwLVx1REQwQ118XHVEODNFW1x1REZGMC1cdURGRjldfFx1RDg2OVtcdURDMDAtXHVERURGXHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzlcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMx''@;'; put 'put ''RFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdUQ4ODRbXHVEQzAwLVx1REY0QVx1REY1MC1cdURGRkZdfFx1RDg4OFtcdURDMDAtXHVERkFGXSkvKSkmJighclsxXSYm''@;'; put 'put ''IXJbMl18fCFlfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGUpKSl7dmFyIG49clswXS5sZW5ndGgtMSxzPW4scD0wLGc9IioiPT09clswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGlt''@;'; put 'put ''VW5kO2ZvcihnLmxhc3RJbmRleD0wLHU9dS5zbGljZSgtMSp0Lmxlbmd0aCtuKTtudWxsIT0ocj1nLmV4ZWModSkpOyl7dmFyIEQsbz1yWzFdfHxyWzJdfHxyWzNdfHxyWzRdfHxyWzVdfHxyWzZdO2lmKG8paWYobz1vLmxlbmd0aCxyWzNdfHxyWzRdKXMrPW87ZWxzZSBpZigocls1XXx8cls2''@;'; put 'put ''XSkmJm4lMyYmISgobitvKSUzKSlwKz1vO2Vsc2UgaWYoISgwPChzLT1vKSkpcmV0dXJuIG89TWF0aC5taW4obyxvK3MrcCksRD10LnNsaWNlKDAsbityLmluZGV4K28rMSksTWF0aC5taW4obixvKSUyPyhvPUQuc2xpY2UoMSwtMSkse3R5cGU6ImVtIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRo''@;'; put 'put ''aXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSk6KG89RC5zbGljZSgyLC0yKSx7dHlwZToic3Ryb25nIixyYXc6RCx0ZXh0Om8sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG8pfSl9fX0saS5jb2Rlc3Bhbj1mdW5jdGlvbihuKXt2YXIgdSxlLHI7aWYobj10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS5jb2RlLmV4ZWMobikpcmV0dXJuIHI9blsyXS5yZXBsYWNlKC9cbi9nLCIgIiksdT0vW14gXS8udGVzdChyKSxlPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpLHI9eShyPXUmJmU/ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTpyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpuWzBdLHRl''@;'; put 'put ''eHQ6cn19LGkuYnI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpKXJldHVybnt0eXBlOiJiciIscmF3OnRbMF19fSxpLmRlbD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpKXJldHVybnt0eXBlOiJkZWwiLHJhdzp0WzBd''@;'; put 'put ''LHRleHQ6dFsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnModFsyXSl9fSxpLmF1dG9saW5rPWZ1bmN0aW9uKHIsdSl7dmFyIGU7aWYocj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHIpKXJldHVybiB1PSJAIj09PXJbMl0/Im1haWx0bzoiKyhlPXkodGhpcy5vcHRp''@;'; put 'put ''b25zLm1hbmdsZT91KHJbMV0pOnJbMV0pKTplPXkoclsxXSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6ZSxocmVmOnUsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmUsdGV4dDplfV19fSxpLnVybD1mdW5jdGlvbih0LHUpe3ZhciBlLHIsbixzO2lmKGU9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dXJsLmV4ZWModCkpe2lmKCJAIj09PWVbMl0pbj0ibWFpbHRvOiIrKHI9eSh0aGlzLm9wdGlvbnMubWFuZ2xlP3UoZVswXSk6ZVswXSkpO2Vsc2V7Zm9yKDtzPWVbMF0sZVswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZVswXSlbMF0scyE9PWVbMF07KTtyPXkoZVswXSks''@;'; put 'put ''bj0id3d3LiI9PT1lWzFdPyJodHRwOi8vIitlWzBdOmVbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzplWzBdLHRleHQ6cixocmVmOm4sdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX0saS5pbmxpbmVUZXh0PWZ1bmN0aW9uKHQsdSl7aWYodD10aGlzLnJ1bGVzLmlubGlu''@;'; put 'put ''ZS50ZXh0LmV4ZWModCkpcmV0dXJuIHU9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6eSh0WzBdKTp0WzBdOnkodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRz''@;'; put 'put ''P3UodFswXSk6dFswXSkse3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dX19LGF9KCksZj17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkp''@;'; put 'put ''fH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9''@;'; put 'put ''KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRl''@;'; put 'put ''eHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4q''@;'; put 'put ''fCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xc''@;'; put 'put ''bnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/''@;'; put 'put ''OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SSxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhl''@;'; put 'put ''YWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8''@;'; put 'put ''XChbXigpXSpcKSkvfSxjPShmLmRlZj1FKGYuZGVmKS5yZXBsYWNlKCJsYWJlbCIsZi5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixmLl90aXRsZSkuZ2V0UmVnZXgoKSxmLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxmLmxpc3RJdGVtU3RhcnQ9RSgvXiggKikoYnVsbCkgKi8pLnJl''@;'; put 'put ''cGxhY2UoImJ1bGwiLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYubGlzdD1FKGYubGlzdCkucmVwbGFjZSgvYnVsbC9nLGYuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2Uo''@;'; put 'put ''ImRlZiIsIlxcbisoPz0iK2YuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksZi5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8''@;'; put 'put ''ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJh''@;'; put 'put ''bXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixmLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxmLmh0bWw9RShmLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixmLl9jb21tZW50''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWciLGYuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxmLmxoZWFkaW5nPUUoZi5saGVhZGluZykucmVwbGFjZSgv''@;'; put 'put ''YnVsbC9nLGYuYnVsbGV0KS5nZXRSZWdleCgpLGYucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJi''@;'; put 'put ''bG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxu''@;'; put 'put ''fC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZi5fdGFnKS5nZXRSZWdleCgpLGYuYmxvY2txdW90ZT1FKGYuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixmLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxmLm5vcm1hbD12KHt9LGYp''@;'; put 'put ''LGYuZ2ZtPXYoe30sZi5ub3JtYWwse3RhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0''@;'; put 'put ''bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0pLGYuZ2ZtLnRhYmxlPUUoZi5nZm0udGFibGUpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxc''@;'; put 'put ''bl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8''@;'; put 'put ''cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmdmbS5wYXJhZ3JhcGg9RShmLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIs''@;'; put 'put ''IiIpLnJlcGxhY2UoInRhYmxlIixmLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFb''@;'; put 'put ''LildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLnBlZGFudGljPXYoe30sZi5ub3JtYWwse2h0bWw6RSgiXiAqKD86Y29tbWVu''@;'; put 'put ''dCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCkucmVwbGFj''@;'; put 'put ''ZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0Bd''@;'; put 'put ''KkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SSxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSsp''@;'; put 'put ''ICooPzpcbit8JCkvLHBhcmFncmFwaDpFKGYubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixmLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLGYubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+Iiku''@;'; put 'put ''cmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfSkse2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5d''@;'; put 'put ''KnxlbWFpbCk+Lyx1cmw6SSx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNd''@;'; put 'put ''Kj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgp''@;'; put 'put ''IixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/''@;'; put 'put ''PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15w''@;'; put 'put ''dW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10p''@;'; put 'put ''fFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6SSx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1c''@;'; put 'put ''bil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99KTtmdW5jdGlvbiBrZShhKXtyZXR1cm4gYS5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUy''@;'; put 'put ''MDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9n''@;'; put 'put ''LCJcdTIwMjYiKX1mdW5jdGlvbiBzZShhKXtmb3IodmFyIGksdD0iIix1PWEubGVuZ3RoLGU9MDtlPHU7ZSsrKWk9YS5jaGFyQ29kZUF0KGUpLHQrPSImIyIrKGk9LjU8TWF0aC5yYW5kb20oKT8ieCIraS50b1N0cmluZygxNik6aSkrIjsiO3JldHVybiB0fWMuX3B1bmN0dWF0aW9uPSJcXHB7''@;'; put 'put ''UH0kKzw9PmBefH4iLGMucHVuY3R1YXRpb249RShjLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxjLmFueVB1''@;'; put 'put ''bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxjLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLGMuX2NvbW1lbnQ9RShmLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcubERlbGltPUUoYy5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBs''@;'; put 'put ''YWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuZW1TdHJvbmcuckRlbGltQXN0PUUoYy5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbVVuZD1FKGMuZW1TdHJv''@;'; put 'put ''bmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5hbnlQdW5jdHVhdGlvbj1FKGMuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9lc2NhcGVzPUUoYy5f''@;'; put 'put ''ZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sYy5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1a''@;'; put 'put ''MC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxjLmF1dG9saW5rPUUoYy5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixjLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixjLl9lbWFpbCku''@;'; put 'put ''Z2V0UmVnZXgoKSxjLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sYy50YWc9RShjLnRhZykucmVwbGFjZSgiY29tbWVudCIsYy5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRl''@;'; put 'put ''IixjLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksYy5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sYy5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxjLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoi''@;'; put 'put ''fCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLGMubGluaz1FKGMubGluaykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixjLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsYy5fdGl0bGUpLmdldFJlZ2V4KCksYy5yZWZsaW5rPUUoYy5yZWZs''@;'; put 'put ''aW5rKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5ub2xpbms9RShjLm5vbGluaykucmVwbGFjZSgicmVmIixmLl9sYWJlbCkuZ2V0UmVnZXgoKSxjLnJlZmxpbmtTZWFyY2g9RShjLnJlZmxpbmtTZWFyY2gsImciKS5yZXBs''@;'; put 'put ''YWNlKCJyZWZsaW5rIixjLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsYy5ub2xpbmspLmdldFJlZ2V4KCksYy5ub3JtYWw9dih7fSxjKSxjLnBlZGFudGljPXYoe30sYy5ub3JtYWwse3N0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8h''@;'; put 'put ''Xyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxl''@;'; put 'put ''bmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpFKC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOkUoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwi''@;'; put 'put ''LGMuX2xhYmVsKS5nZXRSZWdleCgpfSksYy5nZm09dih7fSxjLm5vcm1hbCx7ZXNjYXBlOkUoYy5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10q''@;'; put 'put ''W2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7''@;'; put 'put ''Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aq''@;'; put 'put ''fl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99KSxjLmdmbS51cmw9RShjLmdmbS51cmwsImkiKS5yZXBsYWNl''@;'; put 'put ''KCJlbWFpbCIsYy5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLGMuYnJlYWtzPXYoe30sYy5nZm0se2JyOkUoYy5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6RShjLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2Uo''@;'; put 'put ''L1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX0pO3ZhciBTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1lfHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhp''@;'; put 'put ''cy5vcHRpb25zLnRva2VuaXplcnx8bmV3IGosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucywodGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcykuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiEx''@;'; put 'put ''LGluUmF3QmxvY2s6ITEsdG9wOiEwfSxlPXtibG9jazpmLm5vcm1hbCxpbmxpbmU6Yy5ub3JtYWx9LHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oZS5ibG9jaz1mLnBlZGFudGljLGUuaW5saW5lPWMucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihlLmJsb2NrPWYuZ2ZtLGUuaW5saW5lPXRo''@;'; put 'put ''aXMub3B0aW9ucy5icmVha3M/Yy5icmVha3M6Yy5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWV9YS5sZXg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikubGV4KGUpfSxhLmxleElubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcgYShyKS5pbmxpbmVUb2tlbnMoZSl9O3ZhciB0''@;'; put 'put ''LHU9YS5wcm90b3R5cGU7cmV0dXJuIHUubGV4PWZ1bmN0aW9uKGUpe3ZhciByO2ZvcihlPWUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7cj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKHIuc3JjLHIu''@;'; put 'put ''dG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9LHUuYmxvY2tUb2tlbnM9ZnVuY3Rpb24oZSxyKXt2YXIgbixzLHAsZyxEPXRoaXM7Zm9yKHZvaWQgMD09PXImJihyPVtdKSxlPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9lLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIi''@;'; put 'put ''KTplLnJlcGxhY2UoL14oICopKFx0KykvZ20sZnVuY3Rpb24oRixkLHgpe3JldHVybiBkKyIgICAgIi5yZXBlYXQoeC5sZW5ndGgpfSk7ZTspe3ZhciBvPWZ1bmN0aW9uKCl7aWYoRC5vcHRpb25zLmV4dGVuc2lvbnMmJkQub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZELm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucy5ibG9jay5zb21lKGZ1bmN0aW9uKGwpe3JldHVybiEhKG49bC5jYWxsKHtsZXhlcjpEfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLnNwYWNlKGUpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksMT09PW4ucmF3Lmxlbmd0aCYmMDxyLmxlbmd0aD9yW3IubGVuZ3RoLTFdLnJhdys9IlxuIjpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUQudG9rZW5pemVyLmNvZGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9clty''@;'; put 'put ''Lmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/ci5wdXNoKG4pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50ZXh0LEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPXMudGV4dCksImNvbnRpbnVlIjtpZigo''@;'; put 'put ''bj1ELnRva2VuaXplci5mZW5jZXMoZSkpfHwobj1ELnRva2VuaXplci5oZWFkaW5nKGUpKXx8KG49RC50b2tlbml6ZXIuaHIoZSkpfHwobj1ELnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXx8KG49RC50b2tlbml6ZXIubGlzdChlKSl8fChuPUQudG9rZW5pemVyLmh0bWwoZSkpKXJldHVybiBl''@;'; put 'put ''PWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5kZWYoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwhKHM9cltyLmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09cy50eXBlJiYidGV4dCIhPT1zLnR5cGU/''@;'; put 'put ''RC50b2tlbnMubGlua3Nbbi50YWddfHwoRC50b2tlbnMubGlua3Nbbi50YWddPXtocmVmOm4uaHJlZix0aXRsZTpuLnRpdGxlfSk6KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnJhdyxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJj''@;'; put 'put ''b250aW51ZSI7aWYoKG49RC50b2tlbml6ZXIudGFibGUoZSkpfHwobj1ELnRva2VuaXplci5saGVhZGluZyhlKSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgRixkLHg7aWYocD1lLEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrJiYoRj0xLzAsZD1lLnNsaWNlKDEpLEQub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihsKXsibnVtYmVyIj09dHlwZW9mKHg9bC5jYWxsKHtsZXhlcjp0aGlzfSxkKSkmJjA8PXgmJihGPU1hdGgubWluKEYs''@;'; put 'put ''eCkpfSksRjwxLzApJiYwPD1GJiYocD1lLnN1YnN0cmluZygwLEYrMSkpLEQuc3RhdGUudG9wJiYobj1ELnRva2VuaXplci5wYXJhZ3JhcGgocCkpKXJldHVybiBzPXJbci5sZW5ndGgtMV0sZyYmInBhcmFncmFwaCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIitu''@;'; put 'put ''LnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSxnPXAubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci50''@;'; put 'put ''ZXh0KGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlLnBvcCgpLEQuaW5saW5lUXVldWVbRC5pbmxpbmVRdWV1ZS5s''@;'; put 'put ''ZW5ndGgtMV0uc3JjPXMudGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoZSl7dmFyIGg9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRC5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihoKSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvciho''@;'; put 'put ''KX19KCk7aWYoImNvbnRpbnVlIiE9PW8mJiJicmVhayI9PT1vKWJyZWFrfXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxyfSx1LmlubGluZT1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzplLHRva2VuczpyPXZvaWQgMD09PXI/W106cn0pLHJ9LHUuaW5s''@;'; put 'put ''aW5lVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRCxvLEY9dGhpcyxkPSh2b2lkIDA9PT1yJiYocj1bXSksZSk7aWYodGhpcy50b2tlbnMubGlua3Mpe3ZhciB4PU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZigwPHgubGVuZ3RoKWZvcig7bnVsbCE9KGc9dGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhkKSk7KXguaW5jbHVkZXMoZ1swXS5zbGljZShnWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0iK2Quc2xpY2UodGhp''@;'; put 'put ''cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiWyIrImEiLnJlcGVhdChnWzBdLmxlbmd0aC0yKSsi''@;'; put 'put ''XSIrZC5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oZz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhkKSk7KWQ9ZC5zbGljZSgwLGcuaW5kZXgpKyIrKyIrZC5zbGljZSh0aGlz''@;'; put 'put ''LnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2U7KXt2YXIgaD1mdW5jdGlvbigpe2lmKER8fChvPSIiKSxEPSExLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJkYub3B0aW9ucy5leHRlbnNpb25z''@;'; put 'put ''LmlubGluZS5zb21lKGZ1bmN0aW9uKEEpe3JldHVybiEhKG49QS5jYWxsKHtsZXhlcjpGfSxlLHIpKSYmKGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmVzY2FwZShlKSlyZXR1cm4gZT1lLnN1YnN0''@;'; put 'put ''cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIudGFnKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PW4udHlwZSYmInRleHQiPT09cy50eXBlPyhzLnJhdys9bi5yYXcs''@;'; put 'put ''cy50ZXh0Kz1uLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIubGluayhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49Ri50b2tlbml6ZXIucmVmbGluayhlLEYudG9rZW5zLmxpbmtzKSlyZXR1''@;'; put 'put ''cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZigobj1GLnRva2VuaXplci5lbVN0cm9uZyhlLGQs''@;'; put 'put ''bykpfHwobj1GLnRva2VuaXplci5jb2Rlc3BhbihlKSl8fChuPUYudG9rZW5pemVyLmJyKGUpKXx8KG49Ri50b2tlbml6ZXIuZGVsKGUpKXx8KG49Ri50b2tlbml6ZXIuYXV0b2xpbmsoZSxzZSkpfHwhRi5zdGF0ZS5pbkxpbmsmJihuPUYudG9rZW5pemVyLnVybChlLHNlKSkpcmV0dXJuIGU9''@;'; put 'put ''ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjt2YXIgbCxrLGI7aWYocD1lLEYub3B0aW9ucy5leHRlbnNpb25zJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSYmKGw9MS8wLGs9ZS5zbGljZSgxKSxGLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFy''@;'; put 'put ''dElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKEEpeyJudW1iZXIiPT10eXBlb2YoYj1BLmNhbGwoe2xleGVyOnRoaXN9LGspKSYmMDw9YiYmKGw9TWF0aC5taW4obCxiKSl9KSxsPDEvMCkmJjA8PWwmJihwPWUuc3Vic3RyaW5nKDAsbCsxKSksbj1GLnRva2VuaXplci5pbmxpbmVUZXh0KHAsa2Up''@;'; put 'put ''KXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIl8iIT09bi5yYXcuc2xpY2UoLTEpJiYobz1uLnJhdy5zbGljZSgtMSkpLEQ9ITAsKHM9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMudGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRp''@;'; put 'put ''bnVlIjtpZihlKXt2YXIgdz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZihGLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHcpLCJicmVhayI7dGhyb3cgbmV3IEVycm9yKHcpfX0oKTtpZigiY29udGludWUiIT09aCYmImJyZWFrIj09PWgp''@;'; put 'put ''YnJlYWt9cmV0dXJuIHJ9LHU9YSwodD1be2tleToicnVsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybntibG9jazpmLGlubGluZTpjfX19XSkmJlAodSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhfSgpLFo9ZnVuY3Rpb24oKXtmdW5jdGlv''@;'; put 'put ''biBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLmNvZGU9ZnVuY3Rpb24odCxuLGUpe3ZhciByO3JldHVybiBuPShufHwiIikubWF0Y2goL1xTKi8pWzBdLHRoaXMub3B0aW9ucy5oaWdobGlnaHQmJm51bGwhPShyPXRoaXMub3B0aW9u''@;'; put 'put ''cy5oaWdobGlnaHQodCxuKSkmJnIhPT10JiYoZT0hMCx0PXIpLHQ9dC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLG4/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgreShuKSsnIj4nKyhlP3Q6eSh0LCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+''@;'; put 'put ''IisoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4ifSxpLmJsb2NrcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIjxibG9ja3F1b3RlPlxuIit0KyI8L2Jsb2NrcXVvdGU+XG4ifSxpLmh0bWw9ZnVuY3Rpb24odCx1KXtyZXR1cm4gdH0saS5oZWFkaW5nPWZ1bmN0aW9uKHQsdSxlLHIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzPyI8aCIrdSsnIGlkPSInKyh0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4K3Iuc2x1ZyhlKSkrJyI+Jyt0KyI8L2giK3UrIj5cbiI6IjxoIit1KyI+Iit0KyI8L2giK3UrIj5cbiJ9LGkuaHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25z''@;'; put 'put ''LnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn0saS5saXN0PWZ1bmN0aW9uKHQsdSxlKXt2YXIgcj11PyJvbCI6InVsIjtyZXR1cm4iPCIrcisodSYmMSE9PWU/JyBzdGFydD0iJytlKyciJzoiIikrIj5cbiIrdCsiPC8iK3IrIj5cbiJ9LGkubGlzdGl0ZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxs''@;'; put 'put ''aT4iK3QrIjwvbGk+XG4ifSxpLmNoZWNrYm94PWZ1bmN0aW9uKHQpe3JldHVybiI8aW5wdXQgIisodD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5vcHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9LGkucGFyYWdyYXBoPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiI8cD4iK3QrIjwvcD5cbiJ9LGkudGFibGU9ZnVuY3Rpb24odCx1KXtyZXR1cm4iPHRhYmxlPlxuPHRoZWFkPlxuIit0KyI8L3RoZWFkPlxuIisodT11JiYiPHRib2R5PiIrdSsiPC90Ym9keT4iKSsiPC90YWJsZT5cbiJ9LGkudGFibGVyb3c9ZnVuY3Rpb24odCl7cmV0dXJuIjx0''@;'; put 'put ''cj5cbiIrdCsiPC90cj5cbiJ9LGkudGFibGVjZWxsPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dS5oZWFkZXI/InRoIjoidGQiO3JldHVybih1LmFsaWduPyI8IitlKycgYWxpZ249IicrdS5hbGlnbisnIj4nOiI8IitlKyI+IikrdCsiPC8iK2UrIj5cbiJ9LGkuc3Ryb25nPWZ1bmN0aW9uKHQpe3Jl''@;'; put 'put ''dHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+In0saS5lbT1mdW5jdGlvbih0KXtyZXR1cm4iPGVtPiIrdCsiPC9lbT4ifSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiI8Y29kZT4iK3QrIjwvY29kZT4ifSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8i''@;'; put 'put ''PGJyLz4iOiI8YnI+In0saS5kZWw9ZnVuY3Rpb24odCl7cmV0dXJuIjxkZWw+Iit0KyI8L2RlbD4ifSxpLmxpbms9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8YSBocmVmPSIn''@;'; put 'put ''K3QrJyInLHUmJih0Kz0nIHRpdGxlPSInK3UrJyInKSx0KyI+IitlKyI8L2E+Iil9LGkuaW1hZ2U9ZnVuY3Rpb24odCx1LGUpe3JldHVybiBudWxsPT09KHQ9bmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLHQpKT9lOih0PSc8aW1nIHNyYz0iJyt0KyciIGFs''@;'; put 'put ''dD0iJytlKyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsodGhpcy5vcHRpb25zLnhodG1sPyIvPiI6Ij4iKSl9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5zdHJvbmc9''@;'; put 'put ''ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuY29kZXNwYW49ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4g''@;'; put 'put ''dH0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4iIitlfSxpLmJyPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9LGF9KCksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt0aGlzLnNlZW49e319dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC9ccy9nLCItIil9LGkuZ2V0TmV4dFNhZmVTbHVnPWZ1bmN0aW9uKHQsdSl7dmFyIGU9dCxyPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpKWZvcihyPXRoaXMuc2Vlblt0XTtlPXQrIi0iKyArK3IsdGhpcy5zZWVuLmhhc093blByb3BlcnR5KGUpOyk7cmV0dXJuIHV8''@;'; put 'put ''fCh0aGlzLnNlZW5bdF09cix0aGlzLnNlZW5bZV09MCksZX0saS5zbHVnPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHZvaWQgMD09PXUmJih1PXt9KSx0PXRoaXMuc2VyaWFsaXplKHQpLHRoaXMuZ2V0TmV4dFNhZmVTbHVnKHQsdS5kcnlydW4pfSxhfSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBh''@;'; put 'put ''KHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBaLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVu''@;'; put 'put ''ZGVyZXI9bmV3IE4sdGhpcy5zbHVnZ2VyPW5ldyBYfWEucGFyc2U9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2UodCl9LGEucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXtyZXR1cm4gbmV3IGEodSkucGFyc2VJbmxpbmUodCl9O3ZhciBpPWEucHJvdG90eXBlO3JldHVybiBp''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKHQsdSl7dm9pZCAwPT09dSYmKHU9ITApO2Zvcih2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGgsbCxrLGIsdyxBPSIiLEI9dC5sZW5ndGgsXz0wO188QjtfKyspaWYobz10W19dLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tvLnR5cGVdJiYoITEhPT0odz10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbykpfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0''@;'; put 'put ''YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhvLnR5cGUpKSlBKz13fHwiIjtlbHNlIHN3aXRjaChvLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOkErPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNl''@;'; put 'put ''ImhlYWRpbmciOkErPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSxvLmRlcHRoLHVlKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6QSs9dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5jb2RlKG8udGV4dCxvLmxhbmcsby5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoZz1GPSIiLG49by5oZWFkZXIubGVuZ3RoLGU9MDtlPG47ZSsrKWcrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoby5oZWFkZXJbZV0udG9rZW5zKSx7aGVh''@;'; put 'put ''ZGVyOiEwLGFsaWduOm8uYWxpZ25bZV19KTtmb3IoRis9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKSxEPSIiLG49by5yb3dzLmxlbmd0aCxlPTA7ZTxuO2UrKyl7Zm9yKGc9IiIscz0ocD1vLnJvd3NbZV0pLmxlbmd0aCxyPTA7cjxzO3IrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0''@;'; put 'put ''aGlzLnBhcnNlSW5saW5lKHBbcl0udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOm8uYWxpZ25bcl19KTtEKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGcpfUErPXRoaXMucmVuZGVyZXIudGFibGUoRixEKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOkQ9dGhpcy5wYXJzZShvLnRva2Vucyks''@;'; put 'put ''QSs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKEQpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEY9by5vcmRlcmVkLHo9by5zdGFydCxkPW8ubG9vc2Usbj1vLml0ZW1zLmxlbmd0aCxEPSIiLGU9MDtlPG47ZSsrKWw9KGg9by5pdGVtc1tlXSkuY2hlY2tlZCxrPWgudGFzayx4PSIiLGgudGFz''@;'; put 'put ''ayYmKGI9dGhpcy5yZW5kZXJlci5jaGVja2JveChsKSxkPzA8aC50b2tlbnMubGVuZ3RoJiYicGFyYWdyYXBoIj09PWgudG9rZW5zWzBdLnR5cGU/KGgudG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udGV4dCxoLnRva2Vuc1swXS50b2tlbnMmJjA8aC50b2tlbnNbMF0udG9rZW5z''@;'; put 'put ''Lmxlbmd0aCYmInRleHQiPT09aC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1iKyIgIitoLnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmgudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6Yn0pOngrPWIpLHgrPXRoaXMucGFy''@;'; put 'put ''c2UoaC50b2tlbnMsZCksRCs9dGhpcy5yZW5kZXJlci5saXN0aXRlbSh4LGssbCk7QSs9dGhpcy5yZW5kZXJlci5saXN0KEQsRix6KTtjb250aW51ZTtjYXNlImh0bWwiOkErPXRoaXMucmVuZGVyZXIuaHRtbChvLnRleHQsby5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOkErPXRo''@;'; put 'put ''aXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihEPW8udG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dDtfKzE8QiYmInRleHQiPT09dFtfKzFdLnR5cGU7KUQrPSJcbiIrKChvPXRbKytf''@;'; put 'put ''XSkudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoby50b2tlbnMpOm8udGV4dCk7QSs9dT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChEKTpEO2NvbnRpbnVlO2RlZmF1bHQ6dmFyIHo9J1Rva2VuIHdpdGggIicrby50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5z''@;'; put 'put ''aWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcih6KTt0aHJvdyBuZXcgRXJyb3Ioeil9cmV0dXJuIEF9LGkucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCx1KXt1PXV8fHRoaXMucmVuZGVyZXI7Zm9yKHZhciBlLHIsbj0iIixzPXQubGVuZ3RoLHA9MDtwPHM7cCsrKWlmKGU9dFtwXSx0aGlz''@;'; put 'put ''Lm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZS50eXBlXSYmKCExIT09KHI9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0uY2FsbCh7cGFyc2VyOnRo''@;'; put 'put ''aXN9LGUpKXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhlLnR5cGUpKSluKz1yfHwiIjtlbHNlIHN3aXRjaChlLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOm4rPXUudGV4''@;'; put 'put ''dChlLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6bis9dS5odG1sKGUudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpuKz11LmxpbmsoZS5ocmVmLGUudGl0bGUsdGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJpbWFnZSI6bis9dS5pbWFnZShlLmhyZWYsZS50aXRsZSxlLnRl''@;'; put 'put ''eHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpuKz11LnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImVtIjpuKz11LmVtKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOm4rPXUuY29kZXNwYW4oZS50ZXh0KTticmVh''@;'; put 'put ''aztjYXNlImJyIjpuKz11LmJyKCk7YnJlYWs7Y2FzZSJkZWwiOm4rPXUuZGVsKHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2RlZmF1bHQ6dmFyIGc9J1Rva2VuIHdpdGggIicrZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQp''@;'; put 'put ''cmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihnKTt0aHJvdyBuZXcgRXJyb3IoZyl9cmV0dXJuIG59LGF9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkucHJlcHJvY2Vzcz1mdW5jdGlvbih0''@;'; put 'put ''KXtyZXR1cm4gdH0saS5wb3N0cHJvY2Vzcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYX0oKSxxPShPLnBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSxLKCJwYXJzZU1hcmtkb3duIikpLFY9Sygib25FcnJvciIpO2Z1bmN0aW9uIENlKGEsaSl7''@;'; put 'put ''dmFyIHQ9dGhpcztyZXR1cm4gZnVuY3Rpb24odSxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCk7dmFyIG4scz12KHt9LGUpLHA9KGU9dih7fSx0LmRlZmF1bHRzLHMpLEcodCxWKVtWXShlLnNpbGVudCxlLmFzeW5jLHIpKTtpZihudWxsPT11KXJldHVybiBwKG5ldyBF''@;'; put 'put ''cnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIHUpcmV0dXJuIHAobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwodSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKHM9ciwobj1lKSYmIW4uc2lsZW50JiYocyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBp''@;'; put 'put ''biB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChuLnNhbml0aXplfHxuLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLCFuLmhpZ2hsaWdodCYmImxh''@;'; put 'put ''bmd1YWdlLSI9PT1uLmxhbmdQcmVmaXh8fGNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRo''@;'; put 'put ''ZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksbi5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBz''@;'; put 'put ''aW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZh''@;'; put 'put ''bHNlfWAuIiksbi5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0''@;'; put 'put ''dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxuLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5k''@;'; put 'put ''IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksbi54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2Ug''@;'; put 'put ''dmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLG4uaGVhZGVySWRzfHxuLmhlYWRlclByZWZpeCkmJmNvbnNvbGUu''@;'; put 'put ''d2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdh''@;'; put 'put ''cm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpLGUuaG9va3MmJihlLmhvb2tzLm9wdGlvbnM9ZSkscil7dmFyIGcsRD1lLmhpZ2hsaWdo''@;'; put 'put ''dDt0cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKSxnPWEodSxlKX1jYXRjaChoKXtyZXR1cm4gcChoKX12YXIgbyxGPWZ1bmN0aW9uKGgpe3ZhciBsO2lmKCFoKXRyeXtlLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhnLGUud2Fsa1Rva2VucyksbD1pKGcsZSksZS5ob29r''@;'; put 'put ''cyYmKGw9ZS5ob29rcy5wb3N0cHJvY2VzcyhsKSl9Y2F0Y2goayl7aD1rfXJldHVybiBlLmhpZ2hsaWdodD1ELGg/cChoKTpyKG51bGwsbCl9O3JldHVybiFEfHxELmxlbmd0aDwzP0YoKTooZGVsZXRlIGUuaGlnaGxpZ2h0LGcubGVuZ3RoPyhvPTAsdC53YWxrVG9rZW5zKGcsZnVuY3Rpb24o''@;'; put 'put ''aCl7ImNvZGUiPT09aC50eXBlJiYobysrLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtEKGgudGV4dCxoLmxhbmcsZnVuY3Rpb24obCxrKXtpZihsKXJldHVybiBGKGwpO251bGwhPWsmJmshPT1oLnRleHQmJihoLnRleHQ9ayxoLmVzY2FwZWQ9ITApLDA9PS0tbyYmRigpfSl9LDApKX0pLHZvaWQo''@;'; put 'put ''MD09PW8mJkYoKSkpOkYoKSl9aWYoZS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUuaG9va3M/ZS5ob29rcy5wcmVwcm9jZXNzKHUpOnUpLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGEoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUud2Fsa1Rva2Vucz9Qcm9taXNlLmFs''@;'; put 'put ''bCh0LndhbGtUb2tlbnMoaCxlLndhbGtUb2tlbnMpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTpofSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gaShoLGUpfSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gZS5ob29rcz9lLmhvb2tzLnBvc3Rwcm9jZXNzKGgpOmh9KS5jYXRjaChwKTt0''@;'; put 'put ''cnl7ZS5ob29rcyYmKHU9ZS5ob29rcy5wcmVwcm9jZXNzKHUpKTt2YXIgZD1hKHUsZSkseD0oZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZCxlLndhbGtUb2tlbnMpLGkoZCxlKSk7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2Vzcyh4KTp4fWNhdGNoKGgpe3JldHVybiBwKGgp''@;'; put 'put ''fX19ZnVuY3Rpb24gRWUoYSxpLHQpe3JldHVybiBmdW5jdGlvbih1KXt2YXIgZTtpZih1Lm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsYSlyZXR1cm4gZT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+''@;'; put 'put ''Iit5KHUubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiIsaT9Qcm9taXNlLnJlc29sdmUoZSk6dD92b2lkIHQobnVsbCxlKTplO2lmKGkpcmV0dXJuIFByb21pc2UucmVqZWN0KHUpO2lmKCF0KXRocm93IHU7dCh1KX19ST1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkodGhpcyxWLHt2YWx1ZTpFZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHEse3ZhbHVlOkNlfSksdGhpcy5kZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGln''@;'; put 'put ''aGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGws''@;'; put 'put ''eGh0bWw6ITF9LHRoaXMub3B0aW9ucz10aGlzLnNldE9wdGlvbnMsdGhpcy5wYXJzZT1HKHRoaXMscSlbcV0oUy5sZXgsVC5wYXJzZSksdGhpcy5wYXJzZUlubGluZT1HKHRoaXMscSlbcV0oUy5sZXhJbmxpbmUsVC5wYXJzZUlubGluZSksdGhpcy5QYXJzZXI9VCx0aGlzLnBhcnNlcj1ULnBh''@;'; put 'put ''cnNlLHRoaXMuUmVuZGVyZXI9Wix0aGlzLlRleHRSZW5kZXJlcj1OLHRoaXMuTGV4ZXI9Uyx0aGlzLmxleGVyPVMubGV4LHRoaXMuVG9rZW5pemVyPWosdGhpcy5TbHVnZ2VyPVgsdGhpcy5Ib29rcz1PLHRoaXMudXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT1hLnByb3RvdHlwZTty''@;'; put 'put ''ZXR1cm4gaS53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsdSl7Zm9yKHZhciBlLHI9dGhpcyxuPVtdLHM9VSh0KTshKGU9cygpKS5kb25lOykhZnVuY3Rpb24oKXt2YXIgcD1lLnZhbHVlO3N3aXRjaChuPW4uY29uY2F0KHUuY2FsbChyLHApKSxwLnR5cGUpe2Nhc2UidGFibGUiOmZvcih2YXIgZz1V''@;'; put 'put ''KHAuaGVhZGVyKTshKEQ9ZygpKS5kb25lOyl7dmFyIEQ9RC52YWx1ZTtuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhELnRva2Vucyx1KSl9Zm9yKHZhciBvLEY9VShwLnJvd3MpOyEobz1GKCkpLmRvbmU7KWZvcih2YXIgZD1VKG8udmFsdWUpOyEoeD1kKCkpLmRvbmU7KXt2YXIgeD14LnZhbHVl''@;'; put 'put ''O249bi5jb25jYXQoci53YWxrVG9rZW5zKHgudG9rZW5zLHUpKX1icmVhaztjYXNlImxpc3QiOm49bi5jb25jYXQoci53YWxrVG9rZW5zKHAuaXRlbXMsdSkpO2JyZWFrO2RlZmF1bHQ6ci5kZWZhdWx0cy5leHRlbnNpb25zJiZyLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnIu''@;'; put 'put ''ZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdP3IuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1twLnR5cGVdLmZvckVhY2goZnVuY3Rpb24oaCl7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMocFtoXSx1KSl9KTpwLnRva2VucyYmKG49bi5jb25jYXQoci53YWxr''@;'; put 'put ''VG9rZW5zKHAudG9rZW5zLHUpKSl9fSgpO3JldHVybiBufSxpLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLHU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxlPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248''@;'; put 'put ''ZTtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgcCxnPXYoe30scyk7aWYoZy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxnLmFzeW5jfHwhMSxzLmV4dGVuc2lvbnMmJihzLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlvbihsKXtpZighbC5u''@;'; put 'put ''YW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgaztpZihsLnJlbmRlcmVyJiYodS5yZW5kZXJlcnNbbC5uYW1lXT0oaz11LnJlbmRlcmVyc1tsLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIp''@;'; put 'put ''LEE9MDtBPGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPWwucmVuZGVyZXIuYXBwbHkodGhpcyx3KTtyZXR1cm4hMT09PUI/ay5hcHBseSh0aGlzLHcpOkJ9OmwucmVuZGVyZXIpLGwudG9rZW5pemVyKXtpZighbC5sZXZlbHx8ImJsb2NrIiE9PWwubGV2ZWwmJiJpbmxpbmUiIT09bC5s''@;'; put 'put ''ZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTt1W2wubGV2ZWxdP3VbbC5sZXZlbF0udW5zaGlmdChsLnRva2VuaXplcik6dVtsLmxldmVsXT1bbC50b2tlbml6ZXJdLGwuc3RhcnQmJigiYmxvY2siPT09bC5sZXZlbD91''@;'; put 'put ''LnN0YXJ0QmxvY2s/dS5zdGFydEJsb2NrLnB1c2gobC5zdGFydCk6dS5zdGFydEJsb2NrPVtsLnN0YXJ0XToiaW5saW5lIj09PWwubGV2ZWwmJih1LnN0YXJ0SW5saW5lP3Uuc3RhcnRJbmxpbmUucHVzaChsLnN0YXJ0KTp1LnN0YXJ0SW5saW5lPVtsLnN0YXJ0XSkpfWwuY2hpbGRUb2tlbnMm''@;'; put 'put ''Jih1LmNoaWxkVG9rZW5zW2wubmFtZV09bC5jaGlsZFRva2Vucyl9KSxnLmV4dGVuc2lvbnM9dSkscy5yZW5kZXJlcil7dmFyIEQsbz10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgWih0LmRlZmF1bHRzKTtmb3IoRCBpbiBzLnJlbmRlcmVyKSFmdW5jdGlvbihsKXt2YXIgaz1vW2xdO29bbF09''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLnJlbmRlcmVyW2xdLmFwcGx5KG8sdyk7cmV0dXJuITE9PT1CP2suYXBwbHkobyx3KTpCfX0oRCk7Zy5yZW5kZXJlcj1vfWlmKHMu''@;'; put 'put ''dG9rZW5pemVyKXt2YXIgRixkPXQuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgaih0LmRlZmF1bHRzKTtmb3IoRiBpbiBzLnRva2VuaXplcikhZnVuY3Rpb24obCl7dmFyIGs9ZFtsXTtkW2xdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0w''@;'; put 'put ''O0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy50b2tlbml6ZXJbbF0uYXBwbHkoZCx3KTtyZXR1cm4hMT09PUI/ay5hcHBseShkLHcpOkJ9fShGKTtnLnRva2VuaXplcj1kfWlmKHMuaG9va3Mpe3ZhciB4LGg9dC5kZWZhdWx0cy5ob29rc3x8bmV3IE87Zm9yKHggaW4gcy5ob29r''@;'; put 'put ''cykhZnVuY3Rpb24obCl7dmFyIGs9aFtsXTtoW2xdPU8ucGFzc1Rocm91Z2hIb29rcy5oYXMobCk/ZnVuY3Rpb24oYil7cmV0dXJuIHQuZGVmYXVsdHMuYXN5bmM/UHJvbWlzZS5yZXNvbHZlKHMuaG9va3NbbF0uY2FsbChoLGIpKS50aGVuKGZ1bmN0aW9uKHcpe3JldHVybiBrLmNhbGwoaCx3''@;'; put 'put ''KX0pOihiPXMuaG9va3NbbF0uY2FsbChoLGIpLGsuY2FsbChoLGIpKX06ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxBPTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1zLmhvb2tzW2xdLmFwcGx5KGgsdyk7cmV0dXJuITE9PT1C''@;'; put 'put ''P2suYXBwbHkoaCx3KTpCfX0oeCk7Zy5ob29rcz1ofXMud2Fsa1Rva2VucyYmKHA9dC5kZWZhdWx0cy53YWxrVG9rZW5zLGcud2Fsa1Rva2Vucz1mdW5jdGlvbihsKXt2YXIgaz1bXTtyZXR1cm4gay5wdXNoKHMud2Fsa1Rva2Vucy5jYWxsKHRoaXMsbCkpLHA/ay5jb25jYXQocC5jYWxsKHRo''@;'; put 'put ''aXMsbCkpOmt9KSx0LmRlZmF1bHRzPXYoe30sdC5kZWZhdWx0cyxnKX0pLHRoaXN9LGkuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWZhdWx0cz12KHt9LHRoaXMuZGVmYXVsdHMsdCksdGhpc30sYX0oKTt2YXIgUj1uZXcgSShDLmRlZmF1bHRzKTtmdW5jdGlvbiBtKGEs''@;'; put 'put ''aSx0KXtyZXR1cm4gUi5wYXJzZShhLGksdCl9bS5vcHRpb25zPW0uc2V0T3B0aW9ucz1mdW5jdGlvbihhKXtyZXR1cm4gUi5zZXRPcHRpb25zKGEpLFcobS5kZWZhdWx0cz1SLmRlZmF1bHRzKSxtfSxtLmdldERlZmF1bHRzPVEsbS5kZWZhdWx0cz1DLmRlZmF1bHRzLG0udXNlPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIFIudXNlLmFwcGx5KFIsYXJndW1lbnRzKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS53YWxrVG9rZW5zPWZ1bmN0aW9uKGEsaSl7cmV0dXJuIFIud2Fsa1Rva2VucyhhLGkpfSxtLnBhcnNlSW5saW5lPVIucGFyc2VJbmxpbmUsbS5QYXJzZXI9VCxtLnBhcnNlcj1U''@;'; put 'put ''LnBhcnNlLG0uUmVuZGVyZXI9WixtLlRleHRSZW5kZXJlcj1OLG0uTGV4ZXI9UyxtLmxleGVyPVMubGV4LG0uVG9rZW5pemVyPWosbS5TbHVnZ2VyPVgsbS5Ib29rcz1PO3ZhciBtZT0obS5wYXJzZT1tKS5vcHRpb25zLHhlPW0uc2V0T3B0aW9ucyxiZT1tLnVzZSx3ZT1tLndhbGtUb2tlbnMs''@;'; put 'put ''QmU9bS5wYXJzZUlubGluZSx5ZT1tLHZlPVQucGFyc2UsX2U9Uy5sZXg7Qy5Ib29rcz1PLEMuTGV4ZXI9UyxDLk1hcmtlZD1JLEMuUGFyc2VyPVQsQy5SZW5kZXJlcj1aLEMuU2x1Z2dlcj1YLEMuVGV4dFJlbmRlcmVyPU4sQy5Ub2tlbml6ZXI9aixDLmdldERlZmF1bHRzPVEsQy5sZXhlcj1f''@;'; put 'put ''ZSxDLm1hcmtlZD1tLEMub3B0aW9ucz1tZSxDLnBhcnNlPXllLEMucGFyc2VJbmxpbmU9QmUsQy5wYXJzZXI9dmUsQy5zZXRPcHRpb25zPXhlLEMudXNlPWJlLEMud2Fsa1Rva2Vucz13ZX0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.e45854681934e986-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 ''QGNoYXJzZXQgIlVURi04IjsvKiEKICogQ29weXJpZ2h0IChjKSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLgogKgogKiBIQU5EU09OVEFCTEUgaXMgYSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBIQU5EU09OQ09ERSBzcC4geiBvLiBvLiwgYSBQb2xpc2ggY29ycG9yYXRpb24gYmFzZWQgaW4K''@;'; put 'put ''ICogR2R5bmlhLCBQb2xhbmQsIGF0IEFsZWphIFp3eWNpZXN0d2EgOTYtOTgsIHJlZ2lzdGVyZWQgYnkgdGhlIERpc3RyaWN0IENvdXJ0IGluIEdkYW5zayB1bmRlciBudW1iZXIKICogNTM4NjUxLCBFVSB0YXggSUQgbnVtYmVyOiBQTDU4NjIyOTQwMDIsIHNoYXJlIGNhcGl0YWw6IFBMTiA2''@;'; put 'put ''Miw4MDAuMDAuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC0KICogbGljZW5zZWQgLSBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3Ig''@;'; put 'put ''Y29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IKICogcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LgogKgogKiBJZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkg''@;'; put 'put ''Zm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nCiAqIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwKICog''@;'; put 'put ''eW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImhhbmRzb250YWJsZS1ub24tY29tbWVyY2lhbC1saWNlbnNlLnBkZiIgZmlsZS4KICoKICogWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0''@;'; put 'put ''IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlCiAqIGxpY2Vuc2UgYWdyZWVtZW50LgogKgogKiBJbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUK''@;'; put 'put ''ICogY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuCiAqCiAqIFVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgSEFORFNPTkNPREUgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiCiAqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMg''@;'; put 'put ''T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTwogKiBMRUdBTCBUSEVPUlksIFNIQUxMIEhBTkRTT05DT0RFIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULAogKiBJTkRJUkVDVCwgU1BFQ0lBTCwg''@;'; put 'put ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE1LjMuMAogKiBSZWxlYXNlIGRhdGU6IDI5LzA0LzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDI0LzA0LzIwMjUgMTA6NTk6MTEpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; put 'put ''dH0uaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZSAudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSAudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZHtib3JkZXI6MDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGgsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVy''@;'; put 'put ''LWxlZnQ6bm9uZX0uaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIC50YWJsZS1ib3JkZXJlZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI0NDQ0NDQ30uaGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50ZCwu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC50YWJsZT50Ym9keT50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50Zm9vdD50cj50aCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50ZCwuaGFuZHNvbnRhYmxlIC50YWJsZT50aGVhZD50cj50aHts''@;'; put 'put ''aW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MH0uY29sLWxnLTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTAuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTEuaGFuZHNvbnRhYmxlLC5jb2wtbGctMTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMi5oYW5kc29udGFibGUsLmNvbC1sZy0zLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLWxnLTQuaGFuZHNvbnRhYmxlLC5jb2wtbGctNS5oYW5kc29udGFibGUsLmNvbC1sZy02LmhhbmRzb250YWJsZSwuY29sLWxnLTcuaGFuZHNvbnRhYmxlLC5jb2wtbGctOC5oYW5kc29udGFibGUsLmNvbC1sZy05LmhhbmRzb250YWJsZSwuY29sLW1kLTEuaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtbWQtMTAuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTEuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMi5oYW5kc29udGFibGUsLmNvbC1tZC0zLmhhbmRzb250YWJsZSwuY29sLW1kLTQuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNS5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC1tZC02LmhhbmRzb250YWJsZSwuY29sLW1kLTcuaGFuZHNvbnRhYmxlLC5jb2wtbWQtOC5oYW5kc29udGFibGUsLmNvbC1tZC05LmhhbmRzb250YWJsZSAuY29sLXNtLTEuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTAuaGFuZHNvbnRhYmxlLC5jb2wtc20tMTEuaGFuZHNvbnRhYmxlLC5jb2wt''@;'; put 'put ''c20tMTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMi5oYW5kc29udGFibGUsLmNvbC1zbS0zLmhhbmRzb250YWJsZSwuY29sLXNtLTQuaGFuZHNvbnRhYmxlLC5jb2wtc20tNS5oYW5kc29udGFibGUsLmNvbC1zbS02LmhhbmRzb250YWJsZSwuY29sLXNtLTcuaGFuZHNvbnRhYmxlLC5jb2wtc20t''@;'; put 'put ''OC5oYW5kc29udGFibGUsLmNvbC1zbS05LmhhbmRzb250YWJsZSAuY29sLXhzLTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTAuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTEuaGFuZHNvbnRhYmxlLC5jb2wteHMtMTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMi5oYW5kc29udGFibGUsLmNvbC14cy0z''@;'; put 'put ''LmhhbmRzb250YWJsZSwuY29sLXhzLTQuaGFuZHNvbnRhYmxlLC5jb2wteHMtNS5oYW5kc29udGFibGUsLmNvbC14cy02LmhhbmRzb250YWJsZSwuY29sLXhzLTcuaGFuZHNvbnRhYmxlLC5jb2wteHMtOC5oYW5kc29udGFibGUsLmNvbC14cy05LmhhbmRzb250YWJsZXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96''@;'; put 'put ''LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDti''@;'; put 'put ''b3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUgY29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0''@;'; put 'put ''OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNlOnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhh''@;'; put 'put ''bmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNj''@;'; put 'put ''Y2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQt''@;'; put 'put ''d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVycyB0''@;'; put 'put ''aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklu''@;'; put 'put ''bGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHgg''@;'; put 'put ''c29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQg''@;'; put 'put ''dHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3Jk''@;'; put 'put ''ZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRfbWFz''@;'; put 'put ''dGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgs''@;'; put 'put ''Lmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RDaGls''@;'; put 'put ''ZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGluZzow''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFibGUgLnd0''@;'; put 'put ''Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4''@;'; put 'put ''OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGlu''@;'; put 'put ''ZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUu''@;'; put 'put ''aHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJpbGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2''@;'; put 'put ''ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29udGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1wb3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0''@;'; put 'put ''aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0u''@;'; put 'put ''aG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2Nv''@;'; put 'put ''bG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjojMTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5oYW5kc29udGFibGUgLmh0Rm9jdXNDYXRjaGVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7b3Bh''@;'; put 'put ''Y2l0eTowO2JvcmRlcjowO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDowO2hlaWdodDowfS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Y3Vyc29yOmNvbC1yZXNpemU7ei1pbmRleDoyMTA7d2lkdGg6NXB4O2hlaWdodDoyNXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2N1cnNvcjpyb3ctcmVzaXplO3otaW5kZXg6MjEwO2hlaWdodDo1cHg7d2lkdGg6NTBweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1h''@;'; put 'put ''bnVhbENvbHVtblJlc2l6ZXIuYWN0aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRifS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlk''@;'; put 'put ''ZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDp1bnNldDt0b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO3dpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItbGVmdDpub25lO21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6dW5zZXR9''@;'; put 'put ''W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle2xlZnQ6dW5zZXQ7Ym9yZGVyLWxlZnQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1yaWdodDpub25lO21hcmdpbi1yaWdodDo1cHg7bWFyZ2luLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSAubWFudWFsUm93''@;'; put 'put ''UmVzaXplckd1aWRle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGI7ZGlzcGxheTpub25lO2hlaWdodDowO2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjNzc3O21hcmdpbi10b3A6NXB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVt''@;'; put 'put ''blJlc2l6ZXJHdWlkZS5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplckd1aWRlLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MjA5fS5oYW5kc29udGFibGUgdGQuYXJlYSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMiwuaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRkLmFyZWEtMywuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNCwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5o''@;'; put 'put ''YW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJs''@;'; put 'put ''ZSB0ZC5hcmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7YmFja2dyb3VuZDojMDA1ZWZmfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtMTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmN1cnJlbnQsLmhhbmRzb250YWJsZSB0aGVh''@;'; put 'put ''ZCB0aC5jdXJyZW50e2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMnB4ICM0Yjg5ZmZ9LmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RjZGN9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6IzhlYjBlNztjb2xvcjojMDAwfS5oYW5kc29udGFibGVJbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lLXdpZHRoOjA7bWFyZ2luOjA7cGFk''@;'; put 'put ''ZGluZzoxcHggNXB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtsaW5lLWhlaWdodDoyMXB4O2ZvbnQtc2l6ZTppbmhlcml0O2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7cmVzaXplOm5vbmU7ZGlzcGxheTpibG9jaztjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6MDtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiNmZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lmh0U2VsZWN0RWRpdG9ye3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5odFNlbGVjdEVkaXRvciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm1lbnVsaXN0LWJ1dHRvbiFpbXBvcnRhbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MnB4IHNvbGlkICM0Yjg5ZmY7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0uaHRTZWxl''@;'; put 'put ''Y3RFZGl0b3Igc2VsZWN0OmZvY3Vze291dGxpbmU6bm9uZX0uaHRTZWxlY3RFZGl0b3IgLmh0QXV0b2NvbXBsZXRlQXJyb3d7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0RGltbWVke2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiXDI1YjYiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O2ZvbnQtc2l6ZTo5cHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDphZnRlcntjb250ZW50OiIifVtkaXI9cnRsXS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0U3VibWVudSA6YmVmb3Jle2NvbnRlbnQ6IlwyNWMwIjtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NXB4O2ZvbnQtc2l6ZTo5cHh9LmhhbmRzb250YWJsZSAuaHRMZWZ0e3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENlbnRlcnt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmhhbmRzb250YWJsZSAuaHRKdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeX0uaGFuZHNvbnRhYmxlIC5odFRvcHt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmhhbmRzb250YWJsZSAuaHRNaWRkbGV7dmVydGlj''@;'; put 'put ''YWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0Qm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uaGFuZHNvbnRhYmxlIC5odFBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LmhhbmRzb250YWJsZS5saXN0Ym94e21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVy''@;'; put 'put ''IHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7YmFja2dyb3VuZDojZmZmfS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmxhc3Qt''@;'; put 'put ''Y2hpbGQgdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUubGlzdGJveCB0ZHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5oYW5kc29udGFibGUubGlzdGJveCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7d2hpdGUt''@;'; put 'put ''c3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmhhbmRzb250YWJsZS5saXN0Ym94IHRkLmh0RGltbWVke2N1cnNvcjpkZWZhdWx0O2NvbG9yOmluaGVyaXQ7Zm9udC1zdHlsZTppbmhlcml0fS5oYW5kc29udGFibGUubGlzdGJveCAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRk''@;'; put 'put ''ZW59LmhhbmRzb250YWJsZS5saXN0Ym94IHRyIHRkLmN1cnJlbnQsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2VlZX0uaHRfZWRpdG9yX2hpZGRlbnt6LWluZGV4Oi0xfS5odF9lZGl0b3JfdmlzaWJsZXt6LWluZGV4OjIwMH0uaGFuZHNvbnRhYmxlIHRk''@;'; put 'put ''Lmh0U2VhcmNoUmVzdWx0e2JhY2tncm91bmQ6I2ZjZWRkOTtjb2xvcjojNTgzNzA3fS5oYW5kc29udGFibGUubW9iaWxlLC5oYW5kc29udGFibGUubW9iaWxlIC53dEhvbGRlcnstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6''@;'; put 'put ''bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uaGFuZHNvbnRhYmxlLm1vYmlsZSAuaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDstd2Vi''@;'; put 'put ''a2l0LWFwcGVhcmFuY2U6bm9uZX0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZS1IaXRBcmVhe2xlZnQ6LTEwMDAwcHg7cmlnaHQ6dW5zZXQ7dG9wOi0xMDAwMHB4O3otaW5kZXg6OTk5OX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEsW2Rpcj1y''@;'; put 'put ''dGxdLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhe3JpZ2h0Oi0xMDAwMHB4O2xlZnQ6dW5zZXR9LmhhbmRzb250YWJsZS5oaWRlLXR3ZWVue2FuaW1hdGlvbjpvcGFjaXR5LWhp''@;'; put 'put ''ZGUgLjNzO2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfS5oYW5kc29udGFibGUuc2hvdy10d2VlbnthbmltYXRpb246b3BhY2l0eS1zaG93IC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5p''@;'; put 'put ''bWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNiYmI7Y3Vyc29yOmRlZmF1bHQ7d2lkdGg6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6IzU1NX0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZCAuaHRBdXRvY29tcGxldGVBcnJvdzpob3Zlcntjb2xvcjojMWExYTFhfS5oYW5k''@;'; put 'put ''c29udGFibGUgdGQgLmh0QXV0b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6I2QzZDNkM30uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dC5ub1ZhbHVle29wYWNpdHk6LjV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWx7Zm9udC1zaXplOmluaGVyaXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVsLmZ1bGxXaWR0aHt3''@;'; put 'put ''aWR0aDoxMDAlfS5oYW5kc29udGFibGUgLmNvbGxhcHNpYmxlSW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7bGVmdDp1bnNldDtyaWdodDo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjQTZBNkE2O2xpbmUtaGVpZ2h0OjhweDtjb2xv''@;'; put 'put ''cjojMjIyO2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTBweDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaGFkb3c6MCAwIDAgM3B4ICNlZWU7YmFja2dyb3VuZDojZWVlO3RleHQtYWxpZ246Y2VudGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmNv''@;'; put 'put ''bGxhcHNpYmxlSW5kaWNhdG9ye3JpZ2h0OnVuc2V0O2xlZnQ6NXB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0UmlnaHQgc3Bhbi5jb2xIZWFkZXJ7bWFyZ2luLXJpZ2h0OjIwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSB0aGVhZCB0aDpoYXMoLmNvbGxhcHNpYmxlSW5kaWNhdG9yKSBkaXYuaHRMZWZ0IHNwYW4uY29sSGVhZGVye21hcmdpbi1sZWZ0OjIwcHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZ3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNw''@;'; put 'put ''YW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXXttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDotMTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNj''@;'; put 'put ''ZW5kaW5nXSwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6LTEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddOm9ubHkt''@;'; put 'put ''Y2hpbGQsLmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1hc2NlbmRp''@;'; put 'put ''bmddOm9ubHktY2hpbGQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmddOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZSAuY29sdW1uU29ydGluZy5zb3J0QWN0aW9uOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXt0b3A6NTAlO21hcmdpbi10b3A6LTZweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtyaWdodDotOXB4O2xlZnQ6dW5zZXQ7Y29udGVudDoiIjtoZWlnaHQ6MTBweDt3aWR0aDo1cHg7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb24teDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4u''@;'; put 'put ''Y29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YmVmb3Jle3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDowO2xlZnQ6LTlweDtyaWdodDp1bnNldDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6bGVmdH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuYXNjZW5kaW5n''@;'; put 'put ''OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4''@;'; put 'put ''NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRk5KUkVGVWVBSHR6amtTZ0NBVUJOSFBnc295OTcrdWxHWFJxSkU1TCt4a3hvWXQyVWRzTGI1YnFGSU56K2FMdXVMbjVySXUyUmtPM2ZacFdFTmltTmdpdzZpQllSVFBNTEpqR0Z4UVoxaHh4Yi94QkkxcUM4azM5Q2RLQUFB''@;'; put 'put ''QUFFbEZUa1N1UW1DQyl9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmRlc2NlbmRpbmc6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBb0NBTUFBQURKN3lycEFB''@;'; put 'put ''QUFLbEJNVkVVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLRTg2SUFBQUFEWFJTVGxNQUJCRW1SR3BybEpXNzJlNzd0VGtUS3dBQUFGSkpSRUZVZUFIdHpqa1NnQ0FRUk5GbVFZVVo3bjlkS1V2cnUwVG12UEFuM2JyMFFmZ2RaNXh4Nngr''@;'; put 'put ''clFuMjNHcVRZbnExRkRjbnV6WklPMldtZWRWcUlSVnhnR0tFeWpOZ1lSaktHa1oxaEZJWjNJNzBMeU0wVnRVOEFBQUFBU1VWT1JLNUNZSUk9KX0uaHRHaG9zdFRhYmxlIC5odENvcmUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiKiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDoyMHB4fS5oYW5kc29udGFibGUuaHRHaG9zdFRhYmxlIHRhYmxlIHRoZWFkIHRoe2JvcmRlci1ib3R0b20td2lkdGg6MH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0aCwuaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0Ym9keSB0ciB0ZHtib3JkZXItdG9wLXdpZHRoOjB9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOjZweCBzb2xpZCBibGFja31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxs''@;'; put 'put ''OmFmdGVye2xlZnQ6MDtyaWdodDp1bnNldDtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudHN7ZGlzcGxheTpub25lO3otaW5kZXg6MTA1OTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50''@;'; put 'put ''c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDpub25lO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6I2ZmZjt3aWR0aDoyMTVweDtoZWlnaHQ6OTBweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweDtvdXRsaW5lOjAhaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYXtib3Jk''@;'; put 'put ''ZXItcmlnaHQ6M3B4IHNvbGlkICNjY2M7Ym9yZGVyLWxlZnQ6bm9uZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHgsaW5zZXQgMCAwIDAgMXB4ICM1MjkyZjc7Ym9y''@;'; put 'put ''ZGVyLWxlZnQ6M3B4IHNvbGlkICM1MjkyZjc7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdLmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JvcmRlci1yaWdodDozcHggc29saWQgIzUyOTJmNztib3JkZXItbGVmdDpub25lfS8qIQogKiBIYW5kc29udGFi''@;'; put 'put ''bGUgQ29udGV4dE1lbnUKICovLmh0Q29udGV4dE1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcCwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tLC5odENvbnRl''@;'; put 'put ''eHRNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0Q29udGV4dE1lbnUgLmh0X21h''@;'; put 'put ''c3RlciB0YWJsZS5odENvcmV7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odENvbnRleHRN''@;'; put 'put ''ZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odENvbnRleHRNZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5o''@;'; put 'put ''dENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lmh0Q29udGV4dE1l''@;'; put 'put ''bnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tn''@;'; put 'put ''cm91bmQ6I2YzZjNmM30uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVk''@;'; put 'put ''e2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5''@;'; put 'put ''Om5vbmV9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6NnB4fVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21h''@;'; put 'put ''cmdpbi1sZWZ0OjZweH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bh''@;'; put 'put ''bi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn10ZXh0YXJlYS5IYW5kc29udGFibGVDb3B5UGFzdGV7cG9zaXRpb246Zml4ZWQhaW1wb3J0YW50O3RvcDowIWltcG9ydGFudDtyaWdodDoxMDAlIWlt''@;'; put 'put ''cG9ydGFudDtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eTowO291dGxpbmU6MCBub25lIWltcG9ydGFudH0vKiEKICogSGFuZHNvbnRhYmxlIERyb3Bkb3duTWVudQogKi8uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4''@;'; put 'put ''IHNvbGlkICNiYmI7Y29sb3I6I2JiYjtmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjlweDtwYWRkaW5nOjJweDttYXJnaW46M3B4IDFweCAwIDVweDtmbG9hdDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBle2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZVtkaXI9cnRs''@;'; put 'put ''XSAuY2hhbmdlVHlwZXttYXJnaW46M3B4IDVweCAwIDFweH0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmJlZm9yZXtjb250ZW50OiJcMjViYyAgIn0uaGFuZHNvbnRhYmxlIC5jaGFuZ2VUeXBlOmhvdmVye2JvcmRlcjoxcHggc29saWQgIzc3Nztjb2xvcjojNzc3O2N1cnNvcjpwb2ludGVy''@;'; put 'put ''fS5odERyb3Bkb3duTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA2MH0uaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHREcm9wZG93bk1lbnUgLmh0X2Ns''@;'; put 'put ''b25lX2lubGluZV9zdGFydCwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odERyb3Bkb3duTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZS5odENvcmV7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItbGVmdC13aWR0aDoycHh9Lmh0RHJvcGRvd25NZW51LmhhbmRzb250YWJsZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lmh0RHJvcGRvd25NZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3Qt''@;'; put 'put ''Y2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDowfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpIHRhYmxlIHRib2R5IHRyLmh0SGlkZGVue2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93''@;'; put 'put ''bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6MTBw''@;'; put 'put ''eH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVk''@;'; put 'put ''e3JpZ2h0OjRweDtsZWZ0OjB9Lmh0RHJvcGRvd25NZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0vKiEKICogSGFuZHNvbnRhYmxlIEZpbHRlcnMKICovLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7ei1pbmRleDoxMDcwfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lcntkaXNwbGF5Om5vbmV9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXI6MXB4IHNvbGlkICNiYmI7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNr''@;'; put 'put ''Z3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJz''@;'; put 'put ''dC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0''@;'; put 'put ''LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJlbnR7''@;'; put 'put ''YmFja2dyb3VuZDojZTllOWU5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQu''@;'; put 'put ''aHREaXNhYmxlZHtjb2xvcjojOTk5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0''@;'; put 'put ''ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHh9Lmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odE1lbnVGaWx0ZXJpbmd7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2M7aGVpZ2h0OjEzNXB4O292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odF9tYXN0''@;'; put 'put ''ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVMYWJlbHtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcnt0ZXh0LWFsaWdu''@;'; put 'put ''OmNlbnRlcjtwYWRkaW5nLXRvcDoxMHB4O3BhZGRpbmctYm90dG9tOjNweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uLmJvcmRlcntib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgI2NjYyFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlv''@;'; put 'put ''biAuaHRVSUlucHV0e3BhZGRpbmc6MCAwIDVweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoe3Bh''@;'; put 'put ''ZGRpbmc6MH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07''@;'; put 'put ''cGFkZGluZzo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc0FjdGl2ZSAuY2hhbmdlVHlwZXtib3JkZXI6MXB4IHNvbGlkICM1MDky''@;'; put 'put ''NzI7Y29sb3I6IzE4ODA0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNkMmUwZDl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJQ2xlYXJBbGwgYSwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxsIGF7Zm9udC1zaXplOi43NWVtfS5o''@;'; put 'put ''YW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3Rpb25Db250cm9sc3t0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7bWFyZ2luOjAgNXB4IDAgMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OjFlbX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dHttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0e3Bh''@;'; put 'put ''ZGRpbmc6M3B4IDAgN3B4O3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDF9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzAwMDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE5cHg7bWluLXdpZHRoOjY0cHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNiOWI5Yjl9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRV''@;'; put 'put ''SUJ1dHRvbk9LIGlucHV0e2JhY2tncm91bmQtY29sb3I6IzBmOWQ1ODtib3JkZXItY29sb3I6IzE4ODA0ZTtjb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiM5MmRkOGQ7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiM3Y2I4Nzg7Y29sb3I6IzAwMH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmhvdmVye2JvcmRlci1jb2xvcjojMWE2ZjQ2fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3R7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbTo3cHg7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb257YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7cGFkZGlu''@;'; put 'put ''ZzozcHggMjBweCAzcHggMTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdENhcHRpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JvcmRlcjoxcHggc29saWQgI2I5Yjli''@;'; put 'put ''OX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YWZ0ZXJ7Y29udGVudDoiXDI1YjIiO2ZvbnQtc2l6ZTo3cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0RHJvcGRvd246YmVmb3Jle2NvbnRlbnQ6IlwyNWJjIjtm''@;'; put 'put ''b250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjhweH0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3Jle2JvcmRlcjpub25lfS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odENvcmUgdGQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCBpbnB1dHtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7cGFkZGluZzozcHh9LmhhbmRzb250YWJsZSAuaHRVSVJh''@;'; put 'put ''ZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjVweDtoZWlnaHQ6MTAwJX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6NXB4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbzpsYXN0LWNo''@;'; put 'put ''aWxke21hcmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDouNWV4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpbz5pbnB1dFt0eXBlPXJhZGlvXXttYXJnaW4tcmlnaHQ6MDttYXJn''@;'; put 'put ''aW4tbGVmdDouNWV4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpbyBsYWJlbHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudU9wZXJhdG9yc3twYWRkaW5nLWJvdHRvbTo1cHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW57cG9zaXRp''@;'; put 'put ''b246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXIsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7Y29sb3I6I2JiYjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2ZvbnQtc2l6ZTo1cHQ7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZVkoLTUwJSl9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoLmJlZm9y''@;'; put 'put ''ZUhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodCwuaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRoLmFmdGVySGlkZGVuQ29sdW1uIGRpdi5odFJpZ2h0e21hcmdpbi1yaWdodDoxMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGguYmVmb3JlSGlkZGVuQ29sdW1uIGRpdi5odExlZnR7bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTBweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlcntyaWdodDoxcHg7Y29udGVudDoiXDI1YzAifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OmluaXRpYWw7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYi''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtyaWdodDoxcHg7bGVmdDppbml0aWFsO2NvbnRlbnQ6IlwyNWMwIn0vKiEKICog''@;'; put 'put ''SGFuZHNvbnRhYmxlIEhpZGRlblJvd3MKICovLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVmb3JlLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29sb3I6I2JiYjtmb250LXNpemU6NnB0O2xpbmUtaGVpZ2h0OjZwdDtwb3NpdGlvbjphYnNvbHV0ZTts''@;'; put 'put ''ZWZ0OjJweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZXtjb250ZW50OiJcMjViMiI7Ym90dG9tOjJweH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbnRlbnQ6IlwyNWJjIjt0b3A6MnB4fS5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5iZWZvcmVIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDpiZWZvcmUsLmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1y''@;'; put 'put ''b3dzIHRib2R5IHRoLmFmdGVySGlkZGVuUm93Lmh0X19oaWdobGlnaHQ6YWZ0ZXJ7Y29sb3I6I2VlZX0uaGFuZHNvbnRhYmxlIHRkLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvdywuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93LmZpcnN0VmlzaWJsZVJvd3tib3JkZXItdG9w''@;'; put 'put ''OjFweCBzb2xpZCAjQ0NDfS5odFJvd0hlYWRlcnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0aDpudGgtY2hpbGQoMiksLmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0''@;'; put 'put ''X2Nsb25lX2lubGluZV9zdGFydCB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1sZWZ0OjAgbm9uZX0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLmFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5o''@;'; put 'put ''YW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRz''@;'; put 'put ''b250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgLm1hbnVhbENvbHVtblJlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUt''@;'; put 'put ''LWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7d2lkdGg6MnB4O3RvcDowO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJn''@;'; put 'put ''aW4taW5saW5lLWVuZDowO3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tncm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5k''@;'; put 'put ''c29udGFibGUub24tbW92aW5nLS1jb2x1bW5zLnNob3ctdWkgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLWNvbHVtbnMgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLmFmdGVyLXNlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFifS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzICosLmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92''@;'; put 'put ''ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgLm1hbnVhbFJvd1Jlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5le2JhY2tncm91''@;'; put 'put ''bmQ6Izc1NzU3NTtoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tdG9wOi0xcHg7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDojMzQzNDM0NDA7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1''@;'; put 'put ''O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3Muc2hvdy11aSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5o''@;'; put 'put ''YW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFz''@;'; put 'put ''cyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2Vs''@;'; put 'put ''bC0wXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMV06YmVmb3Jle29wYWNpdHk6LjJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dz''@;'; put 'put ''cGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlT''@;'; put 'put ''ZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxp''@;'; put 'put ''Z2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3Bh''@;'; put 'put ''Y2l0eTouNTh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPXNvcnQtXXttYXJnaW4tbGVmdDox''@;'; put 'put ''NXB4O21hcmdpbi1yaWdodDotMTVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNwYW5bY2xhc3MqPXNvcnQtXTpvbmx5LWNoaWxke21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi1sZWZ0Oi0yMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2Ns''@;'; put 'put ''YXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tbGVmdDoyMHB4O21hcmdpbi1yaWdodDotMjBweH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7dG9wOjUwJTttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7bGVm''@;'; put 'put ''dDp1bnNldDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6dW5zZXQ7Zm9udC1zaXplOjhweDtoZWlnaHQ6OHB4O2xpbmUtaGVpZ2h0OjEuMX1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7bGVmdDotMTVweDtyaWdodDp1bnNl''@;'; put 'put ''dDtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzXj1zb3J0LV06YWZ0ZXIsLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nW2NsYXNzKj0iIHNvcnQtIl06YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDoiKyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMTphZnRlcntjb250ZW50OiIxIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0yOmFmdGVye2NvbnRlbnQ6IjIifS5oYW5kc29udGFibGUg''@;'; put 'put ''c3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTM6YWZ0ZXJ7Y29udGVudDoiMyJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNDphZnRlcntjb250ZW50OiI0In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcu''@;'; put 'put ''c29ydC01OmFmdGVye2NvbnRlbnQ6IjUifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTY6YWZ0ZXJ7Y29udGVudDoiNiJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNzphZnRlcntjb250ZW50OiI3In0uaHRH''@;'; put 'put ''aG9zdFRhYmxlIHRoIGRpdiBidXR0b24uY2hhbmdlVHlwZStzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOm5vdCguaW5kaWNhdG9yRGlzYWJsZWQpe3BhZGRpbmctcmlnaHQ6NXB4fS5oYW5kc29udGFibGUgdGhlYWQgdGguaGlkZGVuSGVhZGVyOm5vdCg6Zmlyc3Qtb2YtdHlwZSl7ZGlz''@;'; put 'put ''cGxheTpub25lfXRoZWFkIHRoLmhpZGRlbkhlYWRlclRleHQgLmNvbEhlYWRlcntvcGFjaXR5OjB9LmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxze3RleHQtYWxpZ246bGVmdDtwYWRkaW5nLWxlZnQ6N3B4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVs''@;'; put 'put ''c3t0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6N3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMXB4O3JpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2''@;'; put 'put ''Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTFweDtsZWZ0OnVuc2V0fS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscywuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVz''@;'; put 'put ''dGluZ0xldmVsc3tyaWdodDoxMHB4O2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxzLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaGFuZHNvbnRhYmxlIHRo''@;'; put 'put ''IGRpdi5odF9uZXN0aW5nTGV2ZWxze2xlZnQ6MTBweDtyaWdodDp1bnNldH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2s7d2lkdGg6MTBweDtoZWlnaHQ6MXB4O2Zsb2F0OmxlZnR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbF9lbXB0eXtmbG9hdDpyaWdodH0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsOmFmdGVye2NvbnRlbnQ6IlwyNTEwIjtmb250''@;'; put 'put ''LXNpemU6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozcHh9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMnB4O2xlZnQ6dW5zZXQ7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0Oi0ycHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbi5odF9uZXN0aW5nRXhwYW5kOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUg''@;'; put 'put ''dGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0NvbGxhcHNlOmFmdGVye2NvbnRlbnQ6Ii0ifS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbiwuaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRz''@;'; put 'put ''b250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntyaWdodDowO2xlZnQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLFtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFy''@;'; put 'put ''dH4uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9ue2xlZnQ6MDtyaWdodDp1bnNldH0vKiEKICogUGlrYWRheQogKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2RidXNoZWxsLmNvbS8KICovLnBpa2Etc2lu''@;'; put 'put ''Z2xle3otaW5kZXg6OTk5OTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOiMzMzM7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tLWNvbG9yOiNiYmI7Zm9udC1mYW1pbHk6SGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFs''@;'; put 'put ''LHNhbnMtc2VyaWZ9LnBpa2Etc2luZ2xlOmJlZm9yZSwucGlrYS1zaW5nbGU6YWZ0ZXJ7Y29udGVudDoiICI7ZGlzcGxheTp0YWJsZX0ucGlrYS1zaW5nbGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGlrYS1zaW5nbGUuaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0ucGlrYS1zaW5nbGUuaXMtYm91bmR7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Ym94LXNoYWRvdzowIDVweCAxNXB4IC01cHggIzAwMDAwMDgwfS5waWthLWxlbmRhcntmbG9hdDpsZWZ0O3dpZHRoOjI0MHB4O21hcmdpbjo4cHh9LnBpa2EtdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtbGFiZWx7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDo5OTk5O292ZXJmbG93OmhpZGRlbjttYXJnaW46MDtwYWRkaW5nOjVweCAzcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5waWth''@;'; put 'put ''LXRpdGxlIHNlbGVjdHtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTg7bWFyZ2luOjA7bGVmdDowO3RvcDo1cHg7b3BhY2l0eTowfS5waWthLXByZXYsLnBpa2EtbmV4dHtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO291''@;'; put 'put ''dGxpbmU6bm9uZTtib3JkZXI6MDtwYWRkaW5nOjA7d2lkdGg6MjBweDtoZWlnaHQ6MzBweDt0ZXh0LWluZGVudDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50''@;'; put 'put ''ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo3NSUgNzUlO29wYWNpdHk6LjV9LnBpa2EtcHJldjpob3ZlciwucGlrYS1uZXh0OmhvdmVye29wYWNpdHk6MX0ucGlrYS1wcmV2LC5pcy1ydGwgLnBpa2EtbmV4dHtmbG9hdDpsZWZ0O2JhY2tncm91bmQtaW1h''@;'; put 'put ''Z2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBZUNBWUFBQUFzRWo1ckFBQUFVa2xFUVZSNDJ1M1ZNUW9BSUJBRFFmOFBnaitPRDloRzJDdE9OSkIyeW1Ra0tlMEhid0FQMHh1Y0RpUVdBUklUSURFQkVuTWdNUThTOCtBcUJJbDZrS2dI''@;'; put 'put ''aVhxUXFBZUplcEJvL3ozOEovVTB1QUhsYUJrQmw5STRHd0FBQUFCSlJVNUVya0pnZ2c9PSl9LnBpa2EtbmV4dCwuaXMtcnRsIC5waWthLXByZXZ7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFC''@;'; put 'put ''UUFBQUFlQ0FZQUFBQXNFajVyQUFBQVUwbEVRVlI0MnUzVk93b0FNQWdFMGR3ZkFuTmpVMjZiWWtCQ0ZHd2ZpTDlWVldvTytCSjRHZjNndHNFS0tvRkJOVENvQ0FZVndhQWlHTlFHTVVITWtqR2JnamsybUlPTnVYbzBuQzhYbkNmMUpYZ0FyVklaQVFoNVRLWUFBQUFBU1VWT1JLNUNZSUk9KX0u''@;'; put 'put ''cGlrYS1wcmV2LmlzLWRpc2FibGVkLC5waWthLW5leHQuaXMtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMn0ucGlrYS1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnBpa2EtdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNp''@;'; put 'put ''bmc6MDtib3JkZXI6MH0ucGlrYS10YWJsZSB0aCwucGlrYS10YWJsZSB0ZHt3aWR0aDoxNC4yODU3MTQyODU3MTQyODYlO3BhZGRpbmc6MH0ucGlrYS10YWJsZSB0aHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI1cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246''@;'; put 'put ''Y2VudGVyfS5waWthLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7Ym9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTtwYWRkaW5nOjVweDtjb2xvcjojNjY2O2Zv''@;'; put 'put ''bnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZjVmNWY1O2hlaWdodDppbml0aWFsfS5waWthLXdlZWt7Zm9udC1zaXplOjExcHg7Y29sb3I6Izk5OX0uaXMtdG9kYXkgLnBpa2EtYnV0dG9ue2NvbG9yOiMzYWY7Zm9udC13ZWlnaHQ6''@;'; put 'put ''NzAwfS5pcy1zZWxlY3RlZCAucGlrYS1idXR0b24sLmhhcy1ldmVudCAucGlrYS1idXR0b257Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMxNzhmZTU7Ym9yZGVyLXJhZGl1czozcHh9Lmhhcy1ldmVudCAucGlr''@;'; put 'put ''YS1idXR0b257YmFja2dyb3VuZDojMDA1ZGE5O2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICMwMDc2Yzl9LmlzLWRpc2FibGVkIC5waWthLWJ1dHRvbiwuaXMtaW5yYW5nZSAucGlrYS1idXR0b257YmFja2dyb3VuZDojZDVlOWY3fS5pcy1zdGFydHJhbmdlIC5waWthLWJ1dHRvbntjb2xv''@;'; put 'put ''cjojZmZmO2JhY2tncm91bmQ6IzZjYjMxZDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWVuZHJhbmdlIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6IzNhZjtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LmlzLWRpc2FibGVkIC5waWth''@;'; put 'put ''LWJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lO2N1cnNvcjpkZWZhdWx0O2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoIC5waWthLWJ1dHRvbntjb2xvcjojOTk5O29wYWNpdHk6LjN9LmlzLXNlbGVjdGlvbi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpu''@;'; put 'put ''b25lO2N1cnNvcjpkZWZhdWx0fS5waWthLWJ1dHRvbjpob3ZlciwucGlrYS1yb3cucGljay13aG9sZS13ZWVrOmhvdmVyIC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQ6I2ZmODAwMDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyLXJhZGl1czozcHh9LnBpa2EtdGFibGUgYWJicnti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7Y3Vyc29yOmhlbHB9Y2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjA7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3J9Y2xyLWljb24gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tl''@;'; put 'put ''e3N0cm9rZTpjdXJyZW50Q29sb3J9Y2xyLWljb24uaXMtZ3JlZW4sY2xyLWljb24uaXMtc3VjY2Vzc3tmaWxsOiMyZTg1MDB9Y2xyLWljb24uaXMtZ3JlZW4gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLXN1Y2Nlc3MgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9r''@;'; put 'put ''ZTojMmU4NTAwfWNsci1pY29uLmlzLXJlZCxjbHItaWNvbi5pcy1kYW5nZXIsY2xyLWljb24uaXMtZXJyb3J7ZmlsbDojZTAyMjAwfWNsci1pY29uLmlzLXJlZCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtZGFuZ2VyIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHIt''@;'; put 'put ''aWNvbi5pcy1lcnJvciAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24uaXMtd2FybmluZ3tmaWxsOiNjMjdiMDB9Y2xyLWljb24uaXMtd2FybmluZyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNjMjdiMDB9Y2xyLWljb24uaXMtYmx1ZSxj''@;'; put 'put ''bHItaWNvbi5pcy1pbmZve2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1ibHVlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbmZvIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5pcy13aGl0ZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''e2ZpbGw6I2ZmZn1jbHItaWNvbi5pcy13aGl0ZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtaW52ZXJzZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNmZmZ9Y2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5pcy1oaWdobGln''@;'; put 'put ''aHQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uW3NoYXBlJD0iIHVwIl0gc3ZnLGNsci1pY29uW2Rpcj11cF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoMCl9Y2xyLWljb25bc2hhcGUkPSIgZG93biJdIHN2ZyxjbHItaWNvbltkaXI9ZG93bl0gc3Zne3Ry''@;'; put 'put ''YW5zZm9ybTpyb3RhdGUoMTgwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiByaWdodCJdIHN2ZyxjbHItaWNvbltkaXI9cmlnaHRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX1jbHItaWNvbltzaGFwZSQ9IiBsZWZ0Il0gc3ZnLGNsci1pY29uW2Rpcj1sZWZ0XSBzdmd7dHJhbnNmb3JtOnJv''@;'; put 'put ''dGF0ZSgyNzBkZWcpfWNsci1pY29uW2ZsaXA9aG9yaXpvbnRhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWCgxODBkZWcpfWNsci1pY29uW2ZsaXA9dmVydGljYWxdIHN2Z3t0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX1jbHItaWNvbiAuY2xyLWktYmFkZ2V7''@;'; put 'put ''ZmlsbDojZTAyMjAwfWNsci1pY29uIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiNlMDIyMDB9Y2xyLWljb24+KntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2s7cG9pbnRlci1ldmVudHM6bm9uZX1jbHItaWNvbj5zdmd7dHJhbnNpdGlv''@;'; put 'put ''bjppbmhlcml0fWNsci1pY29uPnN2ZyB0aXRsZXtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLXNvbGlkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYmFkZ2VkLGNsci1pY29uIC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5Om5vbmV9Y2xyLWljb24gLmNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQ6bm90KC5jbHItaS1vdXRsaW5lKSxjbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYmFkZ2VkOm5vdCguY2xyLWktb3V0bGluZSl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWR7ZGlzcGxheTpibG9j''@;'; put 'put ''a31jbHItaWNvbltjbGFzcyo9aGFzLWFsZXJ0XSAuY2FuLWFsZXJ0IC5jbHItaS1vdXRsaW5lOm5vdCguY2xyLWktb3V0bGluZS0tYWxlcnRlZCl7ZGlzcGxheTpub25lfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmUtLWJhZGdlZHtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1iYWRnZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZHtkaXNwbGF5OmJsb2NrfWNsci1pY29u''@;'; put 'put ''LmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYWxlcnRlZDpub3QoLmNsci1pLXNv''@;'; put 'put ''bGlkKSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2VkOm5vdCguY2xyLWktc29saWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQtLWJhZGdlZHtk''@;'; put 'put ''aXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQs''@;'; put 'put ''Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1zb2xpZC0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlk''@;'; put 'put ''IC5jbHItaS1vdXRsaW5lLS1hbGVydGVkLGNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQuaGFzLXNvbGlkIC5jbHItaS1zb2xpZDpub3QoLmNsci1pLXNvbGlkLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5j''@;'; put 'put ''bHItaS1iYWRnZXtmaWxsOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1zdWNjZXNzIC5jbHItaS1iYWRnZSAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2V7ZmlsbDojZTAyMjAwfWNsci1pY29u''@;'; put 'put ''Lmhhcy1iYWRnZS0tZXJyb3IgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdle2ZpbGw6IzAwNzdiOH1jbHItaWNvbi5oYXMtYmFkZ2UtLWluZm8gLmNsci1pLWJhZGdlIC50cmFu''@;'; put 'put ''c3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzAwNzdiOH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5oYXMtYWxlcnQgLmNsci1pLWFsZXJ0IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbiAuaXMt''@;'; put 'put ''b2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0b3A6LTFweCFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5n''@;'; put 'put ''OjAhaW1wb3J0YW50O21hcmdpbjowIDAgLTFweCFpbXBvcnRhbnR9OnJvb3R7LS1jZHMtZ2xvYmFsLWJhc2U6MjA7LS1jZHMtZ2xvYmFsLXNjYWxlLXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZToxOy0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5OjE7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWxheW91dC1ncmlkLWNvbHM6MTI7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14czo1NzZweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtOjc2OHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbWQ6OTkycHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZzoxMjAw''@;'; put 'put ''cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bDoxNDQwcHg7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzOmNhbGMoOCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbTpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0''@;'; put 'put ''LXNwYWNlLW1kOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bDpjYWxjKDMyICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4bDpjYWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eGw6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTA6Y2FsYygwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTpjYWxjKDEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0yOmNhbGMoMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2Fs''@;'; put 'put ''ZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTM6Y2FsYyg0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNDpjYWxjKDYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS01OmNhbGMoOCAqIHZhcigtLWNkcy1p''@;'; put 'put ''bnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTY6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTc6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTg6Y2FsYygx''@;'; put 'put ''OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTk6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEwOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMTpjYWxjKDM2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTI6Y2FsYyg0OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEzOmNhbGMoNjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2Nh''@;'; put 'put ''bGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xNDpjYWxjKDcyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTU6Y2FsYyg5NiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrOmhzbCgwLCAwJSwg''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZTpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDpoc2woOTMsIDgwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwOmhzbCg5MywgODAlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0y''@;'; put 'put ''MDA6aHNsKDkzLCA4MCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMDpoc2woOTMsIDgwJSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwOmhzbCg5MywgODAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDA6aHNsKDkzLCA4MCUsIDQ0JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMDpoc2woOTMsIDgwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwOmhzbCg5MywgODAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDA6aHNsKDkzLCA4MCUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkw''@;'; put 'put ''MDpoc2woOTMsIDgwJSwgMTclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMDpoc2woOTMsIDgwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yNTpoc2woMTk4LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwOmhzbCgxOTgsIDEwMCUsIDk1JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzU6aHNsKDE5OCwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDA6aHNsKDE5OCwgMTAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDA6aHNsKDE5OCwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0z''@;'; put 'put ''MDA6aHNsKDE5OCwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDA6aHNsKDE5OCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDA6aHNsKDE5OCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDA6aHNsKDE5OCwgMTAwJSwgNDMl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDA6aHNsKDE5OCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDA6aHNsKDE5OCwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDA6aHNsKDE5OCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDpoc2woMjgyLCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwOmhzbCgyODIsIDgwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMDpoc2woMjgy''@;'; put 'put ''LCA3MyUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDA6aHNsKDI4MiwgNjYlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwOmhzbCgyODIsIDYwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMDpoc2woMjgyLCA2MCUsIDU3JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC02MDA6aHNsKDI4MiwgNjAlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwOmhzbCgyODMsIDgwJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMDpoc2woMjgyLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9s''@;'; put 'put ''ZXQtOTAwOmhzbCgyODIsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDpoc2woOSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDpoc2woOSwgMTAwJSwgOTQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMDpoc2woOSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTMwMDpoc2woOSwgMTAwJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMDpoc2woOSwgMTAwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMDpo''@;'; put 'put ''c2woOSwgMTAwJSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMDpoc2woOSwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMDpoc2woOSwgMTAwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTkwMDpoc2woOSwgMTAwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDA6aHNsKDksIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwOmhzbCg0MSwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwOmhzbCg0MSwgMTAw''@;'; put 'put ''JSwgOTIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwOmhzbCg0MSwgMTAwJSwgODYlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwOmhzbCg0MSwgMTAwJSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwOmhzbCg0MSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3Itb2NocmUtNTAwOmhzbCg0MCwgMTAwJSwgNTklKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwOmhzbCgzOSwgMTAwJSwgNTAlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwOmhzbCgzOCwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwOmhzbCgz''@;'; put 'put ''NywgMTAwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwOmhzbCgzNiwgMTAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMDpoc2woMzUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwOmhzbCgyMzgsIDEwMCUsIDk2JSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTEwMDpoc2woMjM4LCA1OCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMDpoc2woMjM4LCA1MyUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMDpoc2woMjM4LCA1MiUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWxhdmVuZGVyLTQwMDpoc2woMjM4LCA1OCUsIDY0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTUwMDpoc2woMjM4LCA1OSUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMDpoc2woMjM4LCA2MCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVy''@;'; put 'put ''LTcwMDpoc2woMjM4LCA2OSUsIDQ1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTgwMDpoc2woMjM4LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci05MDA6aHNsKDIzOCwgMTAwJSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwMDpoc2wo''@;'; put 'put ''MjM4LCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MDpoc2woMjExLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDA6aHNsKDIxMSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMjAwOmhzbCgyMTEsIDEwMCUsIDgxJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTMwMDpoc2woMjExLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS00MDA6aHNsKDIxMSwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTAwOmhzbCgyMTEsIDEwMCUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6''@;'; put 'put ''dXJlLTYwMDpoc2woMjExLCAxMDAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS03MDA6aHNsKDIxMSwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwOmhzbCgyMTEsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTkwMDpoc2woMjExLCAx''@;'; put 'put ''MDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTA6aHNsKDE4NCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDA6aHNsKDE4NCwgMTAwJSwgODYlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXF1YS0yMDA6aHNsKDE4NCwgMTAwJSwgNzUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDA6aHNsKDE4NCwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDA6aHNsKDE4NCwgMTAwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDA6aHNs''@;'; put 'put ''KDE4NCwgMTAwJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDA6aHNsKDE4NCwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDA6aHNsKDE4NCwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDA6aHNsKDE4NCwgMTAwJSwgMTglKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYXF1YS05MDA6aHNsKDE4NCwgMTAwJSwgMTMlKTstLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwOmhzbCgxODQsIDEwMCUsIDEwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTA6aHNsKDE2MCwgODMlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTEw''@;'; put 'put ''MDpoc2woMTYwLCA4MiUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMjAwOmhzbCgxNjAsIDc4JSwgNzglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0zMDA6aHNsKDE2MCwgNjklLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMDpoc2woMTYwLCA2OSUsIDUzJSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwOmhzbCgxNjAsIDY0JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS02MDA6aHNsKDE2MCwgNjklLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMDpoc2woMTYwLCA2NCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''OmhzbCgxNjAsIDEwMCUsIDIxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtOTAwOmhzbCgxNjAsIDcwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0xMDAwOmhzbCgxNjAsIDY5JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwOmhzbCg1MCwgMTAwJSwgOTUlKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDpoc2woNTAsIDEwMCUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDA6aHNsKDUwLCAxMDAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwOmhzbCg1MCwgMTAwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''eWVsbG93LTQwMDpoc2woNDYsIDEwMCUsIDUyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDA6aHNsKDQ0LCAxMDAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwOmhzbCg0MiwgMTAwJSwgNDIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTcwMDpoc2woNDAs''@;'; put 'put ''IDEwMCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy04MDA6aHNsKDQwLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctOTAwOmhzbCg0MCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDA6aHNsKDQwLCAxMDAlLCAxMyUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1saW1lLTUwOmhzbCg2NiwgMTAwJSwgOTQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDA6aHNsKDY2LCA5NSUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwOmhzbCg2NiwgODUlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTMwMDpoc2wo''@;'; put 'put ''NjYsIDgwJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS00MDA6aHNsKDY2LCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTAwOmhzbCg2NiwgOTAlLCA0MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTYwMDpoc2woNjYsIDkwJSwgMzYlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS03MDA6aHNsKDY2LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMDpoc2woNjYsIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtOTAwOmhzbCg2NiwgMTAwJSwgMTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwOmhzbCg2Niwg''@;'; put 'put ''MTAwJSwgNyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTA6aHNsKDI1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwOmhzbCgyNSwgMTAwJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTIwMDpoc2woMjUsIDk0JSwgNzglKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTMwMDpoc2woMjUsIDEwMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDA6aHNsKDI1LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNTAwOmhzbCgyNSwgMTAwJSwgNDglKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuZ2VyaW5lLTYwMDpoc2woMjUsIDEwMCUsIDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS03MDA6aHNsKDI1LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtODAwOmhzbCgyNSwgMTAwJSwgMjUlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dGFuZ2VyaW5lLTkwMDpoc2woMjUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0xMDAwOmhzbCgyNSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS01MDpoc2woMzQ1LCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEw''@;'; put 'put ''MDpoc2woMzQ1LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTIwMDpoc2woMzQ1LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTMwMDpoc2woMzQ1LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTQwMDpoc2woMzQ1LCAx''@;'; put 'put ''MDAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwMDpoc2woMzQ1LCA4MSUsIDUwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNjAwOmhzbCgzNDUsIDgzJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS03MDA6aHNsKDM0NSwgOTElLCAzMSUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1tYWdlbnRhLTgwMDpoc2woMzQ1LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTkwMDpoc2woMzQ1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTEwMDA6aHNsKDM0NSwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcGluay01MDpoc2woMzI0LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDpoc2woMzI0LCA5NSUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMjAwOmhzbCgzMjQsIDg0JSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0zMDA6aHNsKDMyNCwgNzgl''@;'; put 'put ''LCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMDpoc2woMzI0LCA3OCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwOmhzbCgzMjQsIDY0JSwgNTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay02MDA6aHNsKDMyNCwgODAlLCAzOSUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1waW5rLTcwMDpoc2woMzI0LCAxMDAlLCAzMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTgwMDpoc2woMzI0LCAxMDAlLCAyNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTkwMDpoc2woMzI0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTEwMDA6aHNsKDMyNCwg''@;'; put 'put ''MTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTUwOmhzbCgyODIsIDMlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwOmhzbCgyODIsIDMlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMjAwOmhzbCgyODIsIDMlLCA4NCUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMzAwOmhzbCgyODIsIDMlLCA3NCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNDAwOmhzbCgyODIsIDMlLCA2MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTAwOmhzbCgyODIsIDMlLCA1NCUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci13YXJtLWdyYXktNjAwOmhzbCgyODIsIDMlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNzAwOmhzbCgyODIsIDMlLCAzNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktODAwOmhzbCgyODIsIDMlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdy''@;'; put 'put ''YXktOTAwOmhzbCgyODIsIDMlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwMDpoc2woMjgyLCAzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNTA6aHNsKDIzOCwgMjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDA6aHNsKDIzOCwgMjAl''@;'; put 'put ''LCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0yMDA6aHNsKDIzOCwgMjAlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0zMDA6aHNsKDIzOCwgMjAlLCA3MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS00MDA6aHNsKDIzOCwgMjAlLCA2MyUpOy0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1zbGF0ZS01MDA6aHNsKDIzOCwgMjMlLCA1NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS02MDA6aHNsKDIzOCwgMjQlLCA0OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS03MDA6aHNsKDIzOCwgMjglLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS04MDA6aHNsKDIz''@;'; put 'put ''OCwgMjglLCAyOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS05MDA6aHNsKDIzOCwgMjglLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS0xMDAwOmhzbCgyMzgsIDI4JSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTUwOmhzbCgyMTEsIDEwMCUsIDk3JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWljZS0xMDA6aHNsKDIxMSwgNTglLCA5MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMjAwOmhzbCgyMTEsIDUzJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTMwMDpoc2woMjExLCA0OSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS00MDA6aHNsKDIxMSwg''@;'; put 'put ''NDclLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTAwOmhzbCgyMTEsIDQ3JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTYwMDpoc2woMjExLCA1NiUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS03MDA6aHNsKDIxMSwgNjklLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtODAwOmhzbCgyMTEsIDY5JSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTkwMDpoc2woMjExLCAxMDAlLCAyMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMTAwMDpoc2woMjExLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTA6aHNsKDIxMSwg''@;'; put 'put ''MjAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMTAwOmhzbCgyMTEsIDIwJSwgOTAlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTIwMDpoc2woMjExLCAyMCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0zMDA6aHNsKDIxMSwgMjAlLCA3MiUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNDAwOmhzbCgyMTEsIDIwJSwgNjElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwMDpoc2woMjExLCAyMCUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS02MDA6aHNsKDIxMSwgMjAlLCA0NCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb29sLWdyYXktNzAwOmhzbCgyMTEsIDIzJSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTgwMDpoc2woMjExLCAzMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS05MDA6aHNsKDIxMSwgNDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb29sLWdyYXktMTAwMDpoc2woMjExLCA2MyUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi01MDpoc2woNDEsIDIzJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTEwMDpoc2woNDEsIDIyJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTIwMDpoc2woNDEsIDI3JSwg''@;'; put 'put ''ODIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTMwMDpoc2woNDEsIDIzJSwgNjglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTQwMDpoc2woNDEsIDIzJSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwMDpoc2woNDEsIDIwJSwgNDclKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTYw''@;'; put 'put ''MDpoc2woNDEsIDIwJSwgNDAlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTcwMDpoc2woNDEsIDIwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTgwMDpoc2woNDEsIDIzJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTkwMDpoc2woNDEsIDIzJSwgMjElKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdGFuLTEwMDA6aHNsKDQxLCAyMiUsIDE2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNTpoc2woMTk4LCAzMyUsIDk5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDpoc2woMTk4LCAzNiUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0xMDA6aHNsKDE5OCwgMjAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwOmhzbCgxOTgsIDE0JSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMDpoc2woMTk4LCAxMCUsIDcxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi00MDA6aHNsKDE5OCwgOSUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDA6aHNsKDE5OCwgMTAlLCA0NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwOmhzbCgxOTgsIDE0JSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTcwMDpoc2woMTk4LCAxOSUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDA6aHNsKDE5OCwgMjMlLCAyMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwOmhzbCgxOTgsIDI4JSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTEwMDA6aHNsKDE5OCwgMzAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMDpoc2woMjAwLCAzMSUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMDpoc2woMCwgMCUsIDEwMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwOmhzbCgw''@;'; put 'put ''LCAwJSwgOTglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDA6aHNsKDAsIDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTIwMDpoc2woMCwgMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMzAwOmhzbCgwLCAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3Jh''@;'; put 'put ''eS00MDA6aHNsKDAsIDAlLCA4MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTUwMDpoc2woMCwgMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNjAwOmhzbCgwLCAwJSwgNTUlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDA6aHNsKDAsIDAlLCA0MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ncmF5LTgwMDpoc2woMCwgMCUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktOTAwOmhzbCgwLCAwJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0xMDAwOmhzbCgwLCAwJSwgMCUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''ODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0OjMwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRy''@;'; put 'put ''YWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0wOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02''@;'; put 'put ''OmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIo''@;'; put 'put ''LS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS05OmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQi''@;'; put 'put ''LCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHk6dWktbW9ub3NwYWNlLCBDb25zb2xh''@;'; put 'put ''cywgTWVubG8sIE1vbmFjbywgbW9ub3NwYWNlOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQ6LjUxN2VtOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1s''@;'; put 'put ''aW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplOmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6''@;'; put 'put ''MS40Mjg1NzE0ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAq''@;'; put 'put ''IHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs''@;'; put 'put ''YXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0OjUw''@;'; put 'put ''MDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzotLjAwODMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAxZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''c3Vic2VjdGlvbi1mb250LXNpemU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0u''@;'; put 'put ''MDEyNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1l''@;'; put 'put ''c3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Up''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQ6MS4yMzA3N2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0z''@;'; put 'put ''KSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQ6NDAwOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNt''@;'; put 'put ''YWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZzouMDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGFuZ2VyLWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1pbnN0YW50OjBzOy0tY2RzLWdsb2JhbC1hbmlt''@;'; put 'put ''YXRpb24tZHVyYXRpb24tcXVpY2tlc3Q6LjFzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2tlcjouMTVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tcXVpY2s6LjJzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2Vjb25kYXJ5Oi4zczstLWNk''@;'; put 'put ''cy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXByaW1hcnk6LjRzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvdzouNXM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1zbG93ZXI6LjdzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VzdDou''@;'; put 'put ''OHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctcHJpbWFyeTpjdWJpYy1iZXppZXIoMCwuOTksMCwuOTkpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXNlY29uZGFyeTpjdWJpYy1iZXppZXIoMCwgMS41LCAuNSwgMSk7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmct''@;'; put 'put ''bG9vcDpjdWJpYy1iZXppZXIoLjE3LCAuNCwgLjgsIC43OSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwOmNhbGMoNCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMDpjYWxjKDEyICogKDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwOjUwJTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMDpjYWxjKDEgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXdpZHRoLTIwMDpjYWxjKDIgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMDpjYWxjKDMgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXdpZHRoLTQwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwOjAgY2FsYygoMSAvIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjUpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwgMjApKSAqIDFyZW0pIGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjMpOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAgY2FsYygoMSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSAqIDFyZW0p''@;'; put 'put ''IGNhbGMoKDMgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSAwIGhzbGEoMTk4LCAzMCUsIDE1JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTA6aHNsYSgwLCAwJSwgMCUsIDApOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMDpoc2xhKDAsIDAlLCAw''@;'; put 'put ''JSwgLjIpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTIwMDpoc2xhKDAsIDAlLCAwJSwgLjQpOy0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMDpoc2xhKDAsIDAlLCAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAy''@;'; put 'put ''cHg7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtd2Via2l0OjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQ6MXB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi10''@;'; put 'put ''b3VjaC10YXJnZXQ6Y2FsYygzNiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWJsdWUtNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXN1Y2Nlc3MtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''d2FybmluZy1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1k''@;'; put 'put ''YW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItc2Vjb25k''@;'; put 'put ''YXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFs''@;'; put 'put ''LWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1KTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJh''@;'; put 'put ''Y2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1kYXJrOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZl''@;'; put 'put ''cnNlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1j''@;'; put 'put ''b250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDpoc2xhKDAsIDAlLCAxMDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2Fybmlu''@;'; put 'put ''Zy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1hbHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Ymx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''ZGFyay1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyZWVuLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15''@;'; put 'put ''ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2No''@;'; put 'put ''cmUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTUwKTstLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtdGludDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTMtYXF1YTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTYtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzLXZpb2xldDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE1LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNj''@;'; put 'put ''ZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3IteWVsbG93LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtYmx1ZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12''@;'; put 'put ''aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9j''@;'; put 'put ''aHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwt''@;'; put 'put ''b2NocmUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1h''@;'; put 'put ''cXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNl''@;'; put 'put ''cXVlbnRpYWwtYXF1YS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1yZWQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1z''@;'; put 'put ''ZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctdmlvbGV0LWFxdWEtdi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy12aW9sZXQtYXF1YS12LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xl''@;'; put 'put ''dC1hcXVhLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1h''@;'; put 'put ''LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1''@;'; put 'put ''ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWphZGUtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2lu''@;'; put 'put ''Zy1ibHVlLWdyZWVuLWItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4t''@;'; put 'put ''bmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVl''@;'; put 'put ''bi04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdy''@;'; put 'put ''ZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpj''@;'; put 'put ''YWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNk''@;'; put 'put ''cy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUt''@;'; put 'put ''MykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNp''@;'; put 'put ''emUtOTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJD''@;'; put 'put ''bGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQ6MS40Mjg1NzE0ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nOi0uMDA3MTQyODZlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemU6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXNpemU6Y2FsYygzMiAqIHZhcigt''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1mb250''@;'; put 'put ''LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktaGVhZGxpbmUtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXNpemU6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodDoxLjMzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemU6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAx''@;'; put 'put ''ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodDoxLjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0OmNhbGMoNDAwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplOmNhbGMoMTMgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZzotLjAwNzY5MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodDoxLjQ1NDU0NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZzou''@;'; put 'put ''MDE4MTgyZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemU6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''bWFsbGNhcHRpb24tbGluZS1oZWlnaHQ6MS4yZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5m''@;'; put 'put ''by1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0xOmNhbGMoKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIHZhcigtLWNkcy1nbG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMjpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNjYWxlLXNwYWNlKSk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMzpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHkpKX1odG1se2ZvbnQtc2l6ZTpjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpLzE2KSoxMDAl''@;'; put 'put ''KTtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1bY2RzLWJhc2UtZm9udD0iMTYiXXstLWNkcy1nbG9iYWwtYmFzZToxNn1bY2RzLXRoZW1lXXtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYXBwLWJhY2tncm91bmQpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtY29udHJvbF0gOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF0g''@;'; put 'put ''OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtY29udHJvbF1bX2Rpc2FibGVkXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCl9aHRtbFtjZHMt''@;'; put 'put ''Zm9jdXMtdHJhcF17b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDt3aWR0aDoxMDB2dztoZWlnaHQ6MTAwdmh9W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHkpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0''@;'; put 'put ''XVtjZHMtbGF5b3V0fj1ncmlkXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdOmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPWhlYWRpbmddLFtjZHMtdGV4dCo9aGVhZGxpbmVdLFtjZHMtdGV4dCo9c2VjdGlvbl0sW2Nkcy10ZXh0Kj1z''@;'; put 'put ''dWJzZWN0aW9uXSxbY2RzLXRleHQqPXRpdGxlXXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9Y2Fw''@;'; put 'put ''dGlvbl0sW2Nkcy10ZXh0Kj1tZXNzYWdlXSxbY2RzLXRleHQqPXNlY29uZGFyeV0sW2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25de2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApfVtjZHMtdGV4dCo9aW5saW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWRpc3BsYXldOmJlZm9yZXtjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1o''@;'; put 'put ''ZWFkaW5nXSxbY2RzLXRleHQqPWhlYWRsaW5lXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPWhlYWRpbmddOmJlZm9yZSxbY2RzLXRleHQqPWhlYWRsaW5lXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KSAt''@;'; put 'put ''IDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oZWFkaW5nXTphZnRlcixbY2RzLXRleHQqPWhlYWRsaW5lXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdo''@;'; put 'put ''dCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXRpdGxlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0p''@;'; put 'put ''fVtjZHMtdGV4dCo9dGl0bGVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''dWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7''@;'; put 'put ''aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt''@;'; put 'put ''aGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Ym9keV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWln''@;'; put 'put ''aHQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1saW5lLWhlaWdodCl9W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1ib2R5W2Nkcy10ZXh0Kj1ib2R5XTphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9bWVzc2FnZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfVtjZHMtdGV4dCo9c2Vjb25kYXJ5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVp''@;'; put 'put ''Z2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1jYXB0aW9uXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAu''@;'; put 'put ''MDQ0ZW0pfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWln''@;'; put 'put ''aHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IpIWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIWltcG9ydGFudDtsaW5lLWhlaWdodDppbmhlcml0IWltcG9ydGFudDtmb250LXNpemU6''@;'; put 'put ''aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCl9W2Nkcy10''@;'; put 'put ''ZXh0fj1saW5rXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3ZlcikhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKSxbY2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVyLFtjZHMtdGV4dH49bGlua11bY2RzLXRleHR+PXZpc2l0ZWRdOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpIWltcG9ydGFudH1AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtbY2RzLXRleHQ9bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLW91dGxpbmUtd2Via2l0KX19W2Nkcy10ZXh0fj1jb2RlXXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKTtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcikgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBpbnNldH1bY2RzLXRleHR+PWV4dHJhYm9sZF17Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49Ym9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PXNlbWlib2xkXXtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PW1lZGl1bV17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''dGV4dH49cmVndWxhcl17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PWNhcGl0YWxpemVde3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemUhaW1wb3J0YW50fVtjZHMtdGV4dH49dXBwZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49bG93ZXJjYXNlXXt0ZXh0LXRyYW5zZm9ybTpsb3dl''@;'; put 'put ''cmNhc2UhaW1wb3J0YW50fVtjZHMtdGV4dH49dHJ1bmNhdGVde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcyFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXTphZnRlcixbY2RzLXRleHR+PXRy''@;'; put 'put ''dW5jYXRlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PW1vbm9zcGFjZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseSl9W2Nkcy10ZXh0fj1saGVde3BhZGRpbmc6LjA1cHggMH1b''@;'; put 'put ''Y2RzLXRleHR+PWxoZV06YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLWxheW91dH49ZGlzYWJsZS1saGVdOmJlZm9yZSxbY2RzLXRleHR+PWRpc2FibGUtbGhlXTphZnRlcixbY2RzLXRleHR+PWRpc2FibGUtbGhlXTpiZWZvcmV7Y29udGVudDpub25lfVtjZHMtdGV4dCo9aDBdLFtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4''@;'; put 'put ''dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNl''@;'; put 'put ''cmlmKTtmb250LXNpemU6MnJlbTtmb250LXdlaWdodDoyMDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oMF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDFdLFtjZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjZyZW07bGlu''@;'; put 'put ''ZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTU2ZW19W2Nkcy10ZXh0Kj1oMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgxXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxb''@;'; put 'put ''Y2RzLXRleHQqPWg2XXtmb250LXNpemU6MS40cmVtO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgo''@;'; put 'put ''KDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIp''@;'; put 'put ''KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNdLFtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTphZnRl''@;'; put 'put ''cntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi45cmVtO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LS4wMTExMTFlbX1bY2RzLXRleHQqPWg0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMzMz''@;'; put 'put ''MzMzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMzMzMzMzZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQt''@;'; put 'put ''c2l6ZTouOHJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW19W2Nkcy10ZXh0Kj1oNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjdyZW07''@;'; put 'put ''Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOi0uMDMxMjVlbX1bY2RzLXRleHQqPWg2XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVp''@;'; put 'put ''Z2h0KSArIC4yNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDZdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC4yNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDBdLFtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZToxLjJyZW07Zm9udC13ZWlnaHQ6''@;'; put 'put ''NDAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDApO2xpbmUtaGVpZ2h0OjEuMTY2NjdlbTtsZXR0ZXItc3BhY2luZzotLjAwODMzM2VtfVtjZHMtdGV4dCo9cDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAwXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6''@;'; put 'put ''MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxj''@;'; put 'put ''KCgxLjE2NjY3ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDFde2ZvbnQtc2l6ZTouN3JlbTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDI5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTQyODZlbX1bY2Rz''@;'; put 'put ''LXRleHQqPXAxXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS43MTQyOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAyXSxbY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250''@;'; put 'put ''LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjg0NjE1ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbX1bY2RzLXRleHQqPXAyXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAzXSxbY2RzLXRleHQqPXA0XSxbY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDNdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDoyZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNl''@;'; put 'put ''bX1bY2RzLXRleHQqPXA0XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIC41ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''NF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA1XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1wNV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdp''@;'; put 'put ''bi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDVdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgx''@;'; put 'put ''ZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1wNl0sW2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41NXJlbTtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS4wOTA5MDllbTtsZXR0ZXItc3BhY2luZzouMDE4MTgyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsg''@;'; put 'put ''LjAzN2VtKX1bY2RzLXRleHQqPXA2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA3XSxbY2RzLXRleHQqPXA4XXtmb250LXdlaWdodDo0MDB9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''N106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2Rz''@;'; put 'put ''LXRleHQqPXA3XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRl''@;'; put 'put ''ci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjA5MDkwOWVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXA4XXtmb250LXNpemU6LjVyZW07bGluZS1oZWlnaHQ6MS4yZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wOF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjJlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdl''@;'; put 'put ''bSl9W2Nkcy10ZXh0Kj1wOF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0LDpyb290ey0tXDNiNCAxOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHMpOy0tXDNiNCAyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4cyk7LS1cM2I0IDM6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHMpOy0tXDNiNCA0OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtKTstLVwzYjQgNTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCk7LS1c''@;'; put 'put ''M2I0IDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcpOy0tXDNiNCA3OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsKTstLVwzYjQgODp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eGwpOy0tXDNiNCA5OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNl''@;'; put 'put ''LXh4eGwpfVtjZHMtbGF5b3V0Kj0iYWxpZ246ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6ZmlsbCJdPip7ZmxleC1ncm93OjEh''@;'; put 'put ''aW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhzOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhzOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHNtOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0id3JhcEBzbTpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7Zmxl''@;'; put 'put ''eC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbWQ6bm9uZSJde2ZsZXgtd3JhcDpub3dy''@;'; put 'put ''YXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXtbY2RzLWxheW91dCo9ImFsaWduQGxnOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEBsZzpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpz''@;'; put 'put ''dHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6ZmlsbCJd''@;'; put 'put ''Pip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQHhsOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkB4bDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1z''@;'; put 'put ''dGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7''@;'; put 'put ''YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRv''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0''@;'; put 'put ''Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBzbTpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2gi''@;'; put 'put ''XXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBz''@;'; put 'put ''bTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50''@;'; put 'put ''ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBzbTp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpy''@;'; put 'put ''aWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNl''@;'; put 'put ''Il17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1n''@;'; put 'put ''cm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpz''@;'; put 'put ''dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDph''@;'; put 'put ''dXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVu''@;'; put 'put ''ZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRh''@;'; put 'put ''bnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17YWxp''@;'; put 'put ''Z24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''Omhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0''@;'; put 'put ''Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3Jv''@;'; put 'put ''dzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o''@;'; put 'put ''b3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhsOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2gi''@;'; put 'put ''XXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhs''@;'; put 'put ''OnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFy''@;'; put 'put ''Z2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJd''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNh''@;'; put 'put ''bC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGln''@;'; put 'put ''bi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJd''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXth''@;'; put 'put ''bGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHhz''@;'; put 'put ''OnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhz''@;'; put 'put ''OmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4''@;'; put 'put ''LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1p''@;'; put 'put ''dGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnN0cmV0Y2gi''@;'; put 'put ''XT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206''@;'; put 'put ''YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQG1kOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6''@;'; put 'put ''dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBtZDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBt''@;'; put 'put ''ZDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRh''@;'; put 'put ''bC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17''@;'; put 'put ''bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1''@;'; put 'put ''dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckBsZzpyZXZlcnNlIl17Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRp''@;'; put 'put ''Y2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRj''@;'; put 'put ''aCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNl''@;'; put 'put ''bnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSxbY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNo''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c3RyZXRjaCJdPip7ZmxleC1ncm93''@;'; put 'put ''OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeGw6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AeGw6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fVtjZHMtbGF5b3V0fj1ncmlkXXtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7YWxpZ24tY29u''@;'; put 'put ''dGVudDpzdGFydDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KHZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29scyksMWZyKTt3aWR0aDoxMDAlfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj1yb3dzXXtncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDEyLGF1dG8pfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ncmlkXT5bY2RzLWxheW91dCo9cm93XXthbGlnbi1zZWxmOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJjb2xzOmF1dG8iXXtncmlkLWF1dG8tZmxvdzpjb2x1bW47Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmluaXRpYWx9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xzQCJdPip7Z3JpZC1jb2x1bW46c3BhbiB2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpfVtjZHMtbGF5b3V0Kj0iY29sQCJde2dyaWQtY29sdW1uOnNwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzOjMiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFu''@;'; put 'put ''IDR9W2Nkcy1sYXlvdXQqPSJjb2xzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzOjgiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFu''@;'; put 'put ''IDl9W2Nkcy1sYXlvdXQqPSJjb2xzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3c6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2w6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3c6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4g''@;'; put 'put ''OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo5Il17Z3JpZC1yb3c6c3BhbiA5L3Nw''@;'; put 'put ''YW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMSJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''dzoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2w6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3c6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''OnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6''@;'; put 'put ''ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0''@;'; put 'put ''LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5k''@;'; put 'put ''LTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0''@;'; put 'put ''LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTgi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTkiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTkiXXtn''@;'; put 'put ''cmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0x''@;'; put 'put ''MCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVu''@;'; put 'put ''ZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpz''@;'; put 'put ''dGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFy''@;'; put 'put ''dH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtq''@;'; put 'put ''dXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7''@;'; put 'put ''anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFu''@;'; put 'put ''IDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xzQHhzOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHhzOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHhz''@;'; put 'put ''OjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjkiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjExIl0+Kntn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHhzOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHhzOjEyIl0+''@;'; put 'put ''KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbHNAc206MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAc206MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAc206MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAc206MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAc206MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAc206MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAc206NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAc206NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAc206''@;'; put 'put ''NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAc206NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAc206NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAc206NiJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAc206NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAc206NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAc206OCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAc206OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAc206OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAc206OSJdPip7Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAc206MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAc206MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAc206MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4g''@;'; put 'put ''MTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAc206MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAc206MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAc206MTIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BtZDoxIl0+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 ''aWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0BsZzoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoyIl0+KntncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0BsZzozIl0+KntncmlkLXJvdzpzcGFuIDMv''@;'; put 'put ''c3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0BsZzo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0BsZzo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0BsZzo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0BsZzox''@;'; put 'put ''MCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0Bs''@;'; put 'put ''ZzoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0BsZzoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0BsZzoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDox''@;'; put 'put ''NDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4bDoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAy''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93c0B4bDoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4bDozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sc0B4bDo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93c0B4bDo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo3''@;'; put 'put ''Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo4Il0+Kntn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4bDo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMSJdPip7Z3JpZC1y''@;'; put 'put ''b3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4bDoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4bDoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czozIl17Z3JpZC1yb3c6c3BhbiAz''@;'; put 'put ''L3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo1Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3Bh''@;'; put 'put ''biA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEwIl17Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHhzOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dCo9ImNvbEBzbTox''@;'; put 'put ''Il17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbToyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjUiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjYiXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QHNtOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTAiXXtncmlkLXJvdzpzcGFuIDEw''@;'; put 'put ''L3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOjEiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NiJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ni9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OCJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAbWQ6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQGxnOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3Bh''@;'; put 'put ''biAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjIiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxn''@;'; put 'put ''OjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QGxnOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OCJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6OSJd''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAbGc6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIv''@;'; put 'put ''c3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhsOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4bDoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjIiXXtncmlkLXJvdzpzcGFuIDIvc3Bh''@;'; put 'put ''biAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjQiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6OSJde2dyaWQtcm93OnNw''@;'; put 'put ''YW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''eGw6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4czpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMyJde2dyaWQtY29sdW1uLWVuZDoz''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3Rh''@;'; put 'put ''cnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4czplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeHM6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4czplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTkiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFy''@;'; put 'put ''dC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHhzOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEzIl17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3''@;'; put 'put ''NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEiXXtncmlkLXJvdy1z''@;'; put 'put ''dGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTMi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dA''@;'; put 'put ''c206ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHNtOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAc206ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC03Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC04Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVu''@;'; put 'put ''ZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0BzbTpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAc206ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTEiXXtncmlkLXJv''@;'; put 'put ''dy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQt''@;'; put 'put ''MTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2xAc206c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBtZDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QG1kOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNCJde2dyaWQtcm93LWVu''@;'; put 'put ''ZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNSJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQt''@;'; put 'put ''NiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6''@;'; put 'put ''c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0BtZDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMCJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1k''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBtZDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEzIl17Z3JpZC1jb2x1''@;'; put 'put ''bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0yIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''ZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0zIl17Z3JpZC1j''@;'; put 'put ''b2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0z''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0Bs''@;'; put 'put ''ZzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQGxnOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEBsZzpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOCJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOCJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3Rh''@;'; put 'put ''cnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQGxnOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEBsZzpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6''@;'; put 'put ''MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEyIl17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0''@;'; put 'put ''YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAbGc6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEi''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0''@;'; put 'put ''YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAeGw6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QHhsOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC01Il17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC02Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC03''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd0B4bDpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEwIl17Z3JpZC1yb3ct''@;'; put 'put ''c3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6''@;'; put 'put ''MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpi''@;'; put 'put ''b3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRl''@;'; put 'put ''bXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwt''@;'; put 'put ''Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0''@;'; put 'put ''b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6''@;'; put 'put ''c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBtZDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9t''@;'; put 'put ''Il17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0''@;'; put 'put ''cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRl''@;'; put 'put ''ciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIi''@;'; put 'put ''XXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19W2Nkcy1sYXlvdXR+PSJkaXNwbGF5Om5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6Y29udGVudHMiXXtkaXNwbGF5OmNvbnRlbnRzIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAc206bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNt''@;'; put 'put ''OmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''Ojk5MnB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpibG9jayJde2Rpc3BsYXk6YmxvY2sh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''ZGlzcGxheUBsZzpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEg''@;'; put 'put ''KG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAeGw6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmJsb2NrIl17ZGlz''@;'; put 'put ''cGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1y''@;'; put 'put ''ZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0''@;'; put 'put ''b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Z2FwOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXA6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXA6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im06bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4cyJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4cyJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InA6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im06eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14Onh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6''@;'; put 'put ''bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4eGwi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTptZCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eGwiXXttYXJnaW4tbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14Onh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4cyJd''@;'; put 'put ''e3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6c20iXXtwYWRkaW5n''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtbDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtYjptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OmxnIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6bGciXXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWI6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWI6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXI6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6''@;'; put 'put ''eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4cyJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1sOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1iOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Om1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0''@;'; put 'put ''IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bWQiXXttYXJnaW4t''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6''@;'; put 'put ''bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4bCJde21hcmdpbi1ib3R0''@;'; put 'put ''b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6''@;'; put 'put ''eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHhzOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJnYXBAeHM6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEB4czpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImdhcEB4czp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAeHM6bm9uZSJde3BhZGRp''@;'; put 'put ''bmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6c20iXXttYXJnaW46dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOmxnIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eGwiXXttYXJnaW46dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHh4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAx''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC14QHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnNtIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUB4czptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4bCJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS15QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXlAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAeHM6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1iQHhzOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4cyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1sQHhzOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6''@;'; put 'put ''bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtbEB4czptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOmxnIl17cGFkZGluZy1y''@;'; put 'put ''aWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC10QHhzOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6''@;'; put 'put ''eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1yQHhzOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10QHhzOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eHhz''@;'; put 'put ''Il17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnhzIl17bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''ckB4czpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6bWQiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHhzOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4bCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1yQHhzOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4bCJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWJAeHM6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJnYXBAc206bm9u''@;'; put 'put ''ZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBzbTp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNt''@;'; put 'put ''OnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBzbTpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAc206eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBzbTpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bm9uZSJde21hcmdpbjowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4cyJde21hcmdpbjp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bWQiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTpsZyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHhsIl17cGFkZGluZzp2''@;'; put 'put ''YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHh4bCJde21h''@;'; put 'put ''cmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRp''@;'; put 'put ''bmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eHhzIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnNtIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''eUBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eHMiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS15QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpzbSJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teEBzbTptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTpsZyJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBzbTp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtdEBzbTpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQHNtOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC10QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHMi''@;'; put 'put ''XXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206c20iXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQHNtOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOmxn''@;'; put 'put ''Il17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtckBzbTp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHNtOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHhsIl17cGFkZGluZy10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1sQHNtOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tYkBzbTpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAc206eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHhzIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWJAc206eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnhzIl17''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQHNtOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206''@;'; put 'put ''bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLWJAc206bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eGwiXXttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''bEBzbTp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHh4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tbEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4cyJde2dhcDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBtZDptZCJde2dh''@;'; put 'put ''cDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBtZDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQG1kOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhzIl17bWFyZ2luOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpzbSJde3BhZGRpbmc6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOm1kIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4bCJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eGwiXXttYXJn''@;'; put 'put ''aW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHh4cyJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC15QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOm1kIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4bCJde3BhZGRp''@;'; put 'put ''bmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXhAbWQ6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1k''@;'; put 'put ''OnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1k''@;'; put 'put ''OmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBt''@;'; put 'put ''ZDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtckBtZDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4cyJde3BhZGRp''@;'; put 'put ''bmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXJAbWQ6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHMiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAbWQ6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnNt''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iQG1kOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6bGciXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtbEBtZDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4''@;'; put 'put ''bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eHhsIl17cGFk''@;'; put 'put ''ZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdEBtZDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHMi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4cyJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOm1kIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10QG1kOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eGwiXXttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXRAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBt''@;'; put 'put ''ZDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkp''@;'; put 'put ''IWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImdhcEBsZzpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iZ2FwQGxnOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEBsZzptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOmxnIl17Z2FwOnZhcigt''@;'; put 'put ''LVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQGxnOm5v''@;'; put 'put ''bmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4cyJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4cyJde3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnNtIl17bWFyZ2lu''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzpsZyJde3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnhsIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteUBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFk''@;'; put 'put ''ZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpzbSJde3Bh''@;'; put 'put ''ZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhA''@;'; put 'put ''bGc6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteUBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnNtIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnhsIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS14QGxnOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4eHhsIl17bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpub25lIl17cGFkZGluZy1yaWdodDowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QGxnOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHMi''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtbEBsZzp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnNtIl17cGFkZGluZy1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC10QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpsZyJd''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtdEBsZzp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzp4bCJde3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC1yQGxnOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''YkBsZzp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tckBsZzpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tdEBsZzp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4eHMiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQGxnOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4cyJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAbGc6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOm1k''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckBsZzpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bGciXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bGc6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eGwiXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQGxnOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcEB4bDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAeGw6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4bDptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eGwiXXtnYXA6dmFyKC0tXDNiNCA3''@;'; put 'put ''KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhsOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpub25lIl17''@;'; put 'put ''bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhzIl17cGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhzIl17bWFy''@;'; put 'put ''Z2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDptZCJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOmxnIl17''@;'; put 'put ''bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eGwi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4eHMiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LXhAeGw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bWQiXXtwYWRkaW5nLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC15QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4bCJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpub25lIl17bWFyZ2luLXRvcDow''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4cyJd''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnNt''@;'; put 'put ''Il17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOmxn''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6''@;'; put 'put ''eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpub25lIl17cGFkZGluZy1ib3R0b206''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHMiXXtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtckB4bDp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDpzbSJd''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bWQiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAeGw6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnhs''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eHMi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkB4bDp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnhzIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWxAeGw6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bWQiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tbEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1sQHhsOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4''@;'; put 'put ''bDp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmZpbGwiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6Y2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4cyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtbGF5b3V0LXdpZHRoLXhzKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpzbSJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXNtKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjptZCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtbGF5b3V0LXdpZHRoLW1kKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpsZyJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnKX1bY2RzLWxheW91dH49ImNvbnRhaW5lcjp4bCJde3dpZHRoOjEwMCU7bWF4LXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsKX0qLDphZnRlciw6YmVmb3JlLDpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveH1bY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29s''@;'; put 'put ''b3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0z''@;'; put 'put ''MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b246dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktd2FybmluZy1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLW9uLWNvbG9yYmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxh''@;'; put 'put ''dmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWlu''@;'; put 'put ''dmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1vcGFjaXR5LTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2Vs''@;'; put 'put ''ZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxl''@;'; put 'put ''Y3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXI6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXI6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtc2Vjb25kYXJ5LWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52''@;'; put 'put ''ZXJzZS1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy10aW50OnRy''@;'; put 'put ''YW5zcGFyZW50Oy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tc2hhZGU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Z3JheS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJs''@;'; put 'put ''dWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YXp1cmUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MCk7LS1jZHMtYWxpYXMtdXRp''@;'; put 'put ''bGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3c6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93''@;'; put 'put ''LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1yZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXRpbnQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC00''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotYm9yZGVyOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTUtYmx1ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC03LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTAtbGltZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxpbWUtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTExLWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmct''@;'; put 'put ''bGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRpYXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRpY2FsOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZp''@;'; put 'put ''b2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''b2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1''@;'; put 'put ''YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3Jl''@;'; put 'put ''ZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1n''@;'; put 'put ''cmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsaW5lLWhlaWdodDox''@;'; put 'put ''LjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFtoaWRkZW5de2Rpc3BsYXk6bm9uZX1h''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQt''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFy''@;'; put 'put ''Z2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVt''@;'; put 'put ''fXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVu''@;'; put 'put ''dC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1idXR0b24saW5wdXR7b3ZlcmZsb3c6''@;'; put 'put ''dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1idXR0b25dOjotbW96''@;'; put 'put ''LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAu''@;'; put 'put ''NjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNoZWNrYm94XSxbdHlwZT1yYWRpb117''@;'; put 'put ''Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZp''@;'; put 'put ''ZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdl''@;'; put 'put ''YmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwOmhzbCgxOTgsIDAlLCA5NSUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgxOTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCA3''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpoc2wo''@;'; put 'put ''MTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRy''@;'; put 'put ''YWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1j''@;'; put 'put ''bHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1hY3Rpb24tMTAwOmhzbCgxOTgsIDgx''@;'; put 'put ''JSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAwOmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xvci1hY3Rpb24tNTAwOmhzbCgxOTgs''@;'; put 'put ''IDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9uLTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNsci1jb2xvci1hY3Rpb24tOTAwOmhz''@;'; put 'put ''bCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0''@;'; put 'put ''aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4MiwgNTklLCA4NyUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUpOy0tY2xyLWNvbG9yLXNlY29uZGFy''@;'; put 'put ''eS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgyLCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24t''@;'; put 'put ''ODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwgMjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUw''@;'; put 'put ''OmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMzAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDE5OCwg''@;'; put 'put ''MCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIlKTstLWNsci1jb2xvci1kYW5nZXIt''@;'; put 'put ''MjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDpo''@;'; put 'put ''c2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFuZ2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOmhz''@;'; put 'put ''bCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2Vy''@;'; put 'put ''LTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDAwOmhzbCgxOTgsIDAlLCAxMDAl''@;'; put 'put ''KTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2woNDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMzAwOmhzbCg0OCwgOTgl''@;'; put 'put ''LCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xvci13YXJuaW5nLTcwMDpoc2woNDMs''@;'; put 'put ''IDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''NTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1v''@;'; put 'put ''bi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcwMDpoc2woMTk4LCAwJSwgMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTA6aHNsKDkzLCA1''@;'; put 'put ''MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0yMDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6aHNsKDkz''@;'; put 'put ''LCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwOmhz''@;'; put 'put ''bCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3Vj''@;'; put 'put ''Y2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtODAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtcm93LW1hcmdpbjpjYWxj''@;'; put 'put ''KHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQpOy0tY2xyLWds''@;'; put 'put ''b2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xy''@;'; put 'put ''LWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1nbG9iYWwtZm9udC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKX06cm9vdHstLWNs''@;'; put 'put ''ci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1j''@;'; put 'put ''bHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13ZWlnaHQtbGlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9s''@;'; put 'put ''ZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xyLWgxLWxldHRlci1zcGFjaW5nOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6''@;'; put 'put ''ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQpOy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMy1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1j''@;'; put 'put ''bHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgzLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1oNC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHIt''@;'; put 'put ''aDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg1LWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNi1saW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHItcDAtbGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTst''@;'; put 'put ''LWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDItZm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMtZm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMy1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItcDQt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDUtbGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7LS1jbHItcDYtbGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xy''@;'; put 'put ''LXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1hbGln''@;'; put 'put ''bi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHItYWxpZ24tYm90dG9te3ZlcnRpY2Fs''@;'; put 'put ''LWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1jbGVhcmZpeDphZnRlcntjb250ZW50''@;'; put 'put ''OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZXtkaXNwbGF5OmlubGluZSFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXAtcmV2ZXJz''@;'; put 'put ''ZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc2hy''@;'; put 'put ''aW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1lbmR7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1w''@;'; put 'put ''b3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNl''@;'; put 'put ''bnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3Ry''@;'; put 'put ''ZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWVuZHthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpz''@;'; put 'put ''dHJldGNoIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dy''@;'; put 'put ''YXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNt''@;'; put 'put ''LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMt''@;'; put 'put ''c20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVu''@;'; put 'put ''dDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''c2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYt''@;'; put 'put ''c20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4t''@;'; put 'put ''d2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMXtm''@;'; put 'put ''bGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1k''@;'; put 'put ''LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3Rh''@;'; put 'put ''cnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtYmFzZWxpbmV7YWxpZ24taXRlbXM6''@;'; put 'put ''YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtZW5k''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1hbGlnbi1jb250ZW50LW1kLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYXV0b3thbGlnbi1zZWxmOmF1dG8h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctcm93''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbi1y''@;'; put 'put ''ZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcC1yZXZlcnNle2Zs''@;'; put 'put ''ZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxl''@;'; put 'put ''eC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1j''@;'; put 'put ''b250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFj''@;'; put 'put ''ZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1z''@;'; put 'put ''LWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxp''@;'; put 'put ''Z24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGct''@;'; put 'put ''c3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1i''@;'; put 'put ''YXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1u''@;'; put 'put ''LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRh''@;'; put 'put ''bnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVt''@;'; put 'put ''czpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1j''@;'; put 'put ''ZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHItZmxleC14cy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRl''@;'; put 'put ''bXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0u''@;'; put 'put ''Y2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNl''@;'; put 'put ''LWJldHdlZW59QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgtc20tbGFzdHtvcmRlcjoxfS5jbHItZmxleC1zbS11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS10''@;'; put 'put ''b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGln''@;'; put 'put ''bi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6Zmxl''@;'; put 'put ''eC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNs''@;'; put 'put ''ci1mbGV4LWl0ZW1zLXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRlcmVke29yZGVyOjB9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1tZC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LW1kLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo3Njhw''@;'; put 'put ''eCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0''@;'; put 'put ''ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1s''@;'; put 'put ''Zy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWl0ZW1zLWxnLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5j''@;'; put 'put ''bHItZmxleC1pdGVtcy1sZy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1sZy1ib3R0''@;'; put 'put ''b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMt''@;'; put 'put ''bGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''MTIwMHB4KXsuY2xyLWZsZXgteGwtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhsLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteGwtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0''@;'; put 'put ''fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1m''@;'; put 'put ''bGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1z''@;'; put 'put ''LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14bC1iZXR3ZWVu''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX0uY2xyLWZsb2F0LXhzLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNs''@;'; put 'put ''ci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxvYXQtbGctbGVmdHtm''@;'; put 'put ''bG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBv''@;'; put 'put ''cnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItaGlkZGVuLXNtLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2''@;'; put 'put ''Ny45OHB4KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LmNsci1oaWRkZW4tbWQtZG93''@;'; put 'put ''bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1oaWRkZW4teGwtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNsci1oaWRkZW4teGwtZG93biwuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXBy''@;'; put 'put ''aW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJp''@;'; put 'put ''bnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmNsci1oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9y''@;'; put 'put ''dGFudH19LmNsci1jb250YWluZXJ7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LmNs''@;'; put 'put ''ci1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1yaWdodDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKX0uY2xyLW5vLWd1dHRlcnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5v''@;'; put 'put ''LWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEyLC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29s''@;'; put 'put ''LXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29sLWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNs''@;'; put 'put ''ci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNsci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywuY2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQs''@;'; put 'put ''LmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1tZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29sLW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHIt''@;'; put 'put ''Y29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHItY29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwuY2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20t''@;'; put 'put ''NSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHItY29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wtOSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xy''@;'; put 'put ''LWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBhZGRp''@;'; put 'put ''bmcpfS5jbHItY29se2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9''@;'; put 'put ''LmNsci1jb2wtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNv''@;'; put 'put ''bC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLTh7Zmxl''@;'; put 'put ''eDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLTExe2ZsZXg6MCAw''@;'; put 'put ''IDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItMHtvcmRlcjowfS5jbHItb3JkZXIt''@;'; put 'put ''MXtvcmRlcjoxfS5jbHItb3JkZXItMntvcmRlcjoyfS5jbHItb3JkZXItM3tvcmRlcjozfS5jbHItb3JkZXItNHtvcmRlcjo0fS5jbHItb3JkZXItNXtvcmRlcjo1fS5jbHItb3JkZXItNntvcmRlcjo2fS5jbHItb3JkZXItN3tvcmRlcjo3fS5jbHItb3JkZXItOHtvcmRlcjo4fS5jbHItb3Jk''@;'; put 'put ''ZXItOXtvcmRlcjo5fS5jbHItb3JkZXItMTB7b3JkZXI6MTB9LmNsci1vcmRlci0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC03e21hcmdpbi1sZWZ0''@;'; put 'put ''OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2''@;'; put 'put ''NjY2NyV9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDgu''@;'; put 'put ''MzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMz''@;'; put 'put ''LjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAg''@;'; put 'put ''NTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDow''@;'; put 'put ''IDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20t''@;'; put 'put ''Zmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHItb3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5j''@;'; put 'put ''bHItb3JkZXItc20tNXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5jbHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRl''@;'; put 'put ''cjoxMX0uY2xyLW9yZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVm''@;'; put 'put ''dDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1s''@;'; put 'put ''ZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1k''@;'; put 'put ''LTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1k''@;'; put 'put ''LTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wt''@;'; put 'put ''bWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNv''@;'; put 'put ''bC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9''@;'; put 'put ''LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0we29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0ye29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1t''@;'; put 'put ''ZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1tZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1tZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9y''@;'; put 'put ''ZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5j''@;'; put 'put ''bHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1t''@;'; put 'put ''ZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''bWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWNvbC1sZ3tmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbGctYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5v''@;'; put 'put ''bmV9LmNsci1jb2wtbGctMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoy''@;'; put 'put ''NSV9LmNsci1jb2wtbGctNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRo''@;'; put 'put ''OjUwJX0uY2xyLWNvbC1sZy03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy05e2ZsZXg6MCAwIDc1JTttYXgtd2lk''@;'; put 'put ''dGg6NzUlfS5jbHItY29sLWxnLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctMTJ7ZmxleDowIDAgMTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWxnLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGctbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLWxnLTB7b3JkZXI6MH0uY2xyLW9yZGVyLWxnLTF7b3JkZXI6MX0uY2xyLW9yZGVyLWxnLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLWxnLTN7b3JkZXI6''@;'; put 'put ''M30uY2xyLW9yZGVyLWxnLTR7b3JkZXI6NH0uY2xyLW9yZGVyLWxnLTV7b3JkZXI6NX0uY2xyLW9yZGVyLWxnLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLWxnLTd7b3JkZXI6N30uY2xyLW9yZGVyLWxnLTh7b3JkZXI6OH0uY2xyLW9yZGVyLWxnLTl7b3JkZXI6OX0uY2xyLW9yZGVyLWxnLTEwe29y''@;'; put 'put ''ZGVyOjEwfS5jbHItb3JkZXItbGctMTF7b3JkZXI6MTF9LmNsci1vcmRlci1sZy0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1sZy0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbGctMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTJ7bWFyZ2luLWxlZnQ6MTYu''@;'; put 'put ''NjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbGctNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1sZy0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMz''@;'; put 'put ''JX0uY2xyLW9mZnNldC1sZy0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1''@;'; put 'put ''dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAg''@;'; put 'put ''MjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAg''@;'; put 'put ''MCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6''@;'; put 'put ''MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7''@;'; put 'put ''ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwtbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9y''@;'; put 'put ''ZGVyLXhsLTN7b3JkZXI6M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xy''@;'; put 'put ''LW9yZGVyLXhsLTEwe29yZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQteGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVm''@;'; put 'put ''dDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVhay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9sOm5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OjB9dWwubGlzdDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0''@;'; put 'put ''Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNil9bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6''@;'; put 'put ''bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LXJlZCk7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNv''@;'; put 'put ''bG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNwYWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZh''@;'; put 'put ''cigtLWNsci1oNC1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOnZhcigtLWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''aDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1o''@;'; put 'put ''Njpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''MC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJv''@;'; put 'put ''ZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRl''@;'; put 'put ''eHRdKSxib2R5IHAucDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250''@;'; put 'put ''LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1wNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXA2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9y''@;'; put 'put ''dGFudH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFy''@;'; put 'put ''KC0tY2xyLWZvbnQpO2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZp''@;'; put 'put ''c2l0ZWQpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92''@;'; put 'put ''ZXJmbG93LXN0eWxlOnNjcm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qs''@;'; put 'put ''c3VtbWFyeSx0ZXh0YXJlYXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1p''@;'; put 'put ''bnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJn''@;'; put 'put ''aW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0''@;'; put 'put ''b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292''@;'; put 'put ''ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDti''@;'; put 'put ''YWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5p''@;'; put 'put ''Y29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUy''@;'; put 'put ''MG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJG''@;'; put 'put ''Y3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xh''@;'; put 'put ''c3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4''@;'; put 'put ''JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUy''@;'; put 'put ''RnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUy''@;'; put 'put ''RjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZl''@;'; put 'put ''bm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlh''@;'; put 'put ''bmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4z''@;'; put 'put ''JTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0''@;'; put 'put ''JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFh''@;'; put 'put ''MSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDJTJGc3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUy''@;'; put 'put ''MiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxl''@;'; put 'put ''JTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5v''@;'; put 'put ''bmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIy''@;'; put 'put ''UmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNE''@;'; put 'put ''JTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5Nzgx''@;'; put 'put ''NTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIy''@;'; put 'put ''LjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDky''@;'; put 'put ''MyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42''@;'; put 'put ''MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMl''@;'; put 'put ''MkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0''@;'; put 'put ''MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIw''@;'; put 'put ''MjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUw''@;'; put 'put ''NTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJD''@;'; put 'put ''MjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIl''@;'; put 'put ''MjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4w''@;'; put 'put ''MzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJD''@;'; put 'put ''MTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgx''@;'; put 'put ''ODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6''@;'; put 'put ''MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luOjAgMCAuMDVyZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250''@;'; put 'put ''YWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRk''@;'; put 'put ''aW5nKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3Rh''@;'; put 'put ''bmRhcmQtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNr''@;'; put 'put ''ZWQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQp''@;'; put 'put ''Oy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNz''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91''@;'; put 'put ''dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFu''@;'; put 'put ''Z2VyLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNo''@;'; put 'put ''ZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1o''@;'; put 'put ''b3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXIt''@;'; put 'put ''b3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5p''@;'; put 'put ''bmctaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''ZGFyayk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmct''@;'; put 'put ''b3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGlu''@;'; put 'put ''ZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3Rp''@;'; put 'put ''dmUpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91''@;'; put 'put ''dGxpbmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGlu''@;'; put 'put ''ZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tbGluay1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGlu''@;'; put 'put ''ay1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJh''@;'; put 'put ''bnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2Fybmlu''@;'; put 'put ''Zy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1i''@;'; put 'put ''dG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFj''@;'; put 'put ''dGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFu''@;'; put 'put ''c3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFs''@;'; put 'put ''LWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTst''@;'; put 'put ''LWNsci1idG4taW52ZXJzZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhv''@;'; put 'put ''dmVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tl''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNl''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xNCk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxp''@;'; put 'put ''Z246bWlkZGxlO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKX0uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXIt''@;'; put 'put ''Y29sb3IpfS5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFj''@;'; put 'put ''dGl2ZS1jb2xvcil9LmJ0bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1s''@;'; put 'put ''b2FkaW5nLWJ0bi1jb250ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24s''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''c2Vjb25kYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmhvdmVyIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIGEuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1pY29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xv''@;'; put 'put ''cil9YS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29uLGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwuYnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmlt''@;'; put 'put ''YXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFy''@;'; put 'put ''eTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRu''@;'; put 'put ''LWluZm86aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNs''@;'; put 'put ''ci1pY29uLC5idG4taW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29y''@;'; put 'put ''Om5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1pbmZvLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWlu''@;'; put 'put ''Zm8gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2Rz''@;'; put 'put ''LWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRu''@;'; put 'put ''LXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1z''@;'; put 'put ''dWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJu''@;'; put 'put ''aW5nLmJ0biwuYnRuLXdhcm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3Zl''@;'; put 'put ''ciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAuYnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0''@;'; put 'put ''aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRl''@;'; put 'put ''ci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJhbCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRy''@;'; put 'put ''YWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFs''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4s''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3Zl''@;'; put 'put ''ciBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92''@;'; put 'put ''ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29u''@;'; put 'put ''LC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4t''@;'; put 'put ''c2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRp''@;'; put 'put ''c2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRp''@;'; put 'put ''c2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSAuYnRuLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bnti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1v''@;'; put 'put ''dXRsaW5lLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZSAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4g''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNk''@;'; put 'put ''cy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZv''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5i''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpo''@;'; put 'put ''b3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJp''@;'; put 'put ''bWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGlu''@;'; put 'put ''ZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRs''@;'; put 'put ''aW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3MgLmJ0biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3Mg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1z''@;'; put 'put ''dWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5n''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIs''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUs''@;'; put 'put ''LmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5i''@;'; put 'put ''dG46YWN0aXZlIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2Vy''@;'; put 'put ''LW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxp''@;'; put 'put ''bmUtZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGlu''@;'; put 'put ''ZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVk''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRh''@;'; put 'put ''bmdlcjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5i''@;'; put 'put ''dG4sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1''@;'; put 'put ''dHJhbC1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRy''@;'; put 'put ''YWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''bmV1dHJhbDpkaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNh''@;'; put 'put ''YmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAu''@;'; put 'put ''YnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5r''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnkuYnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0u''@;'; put 'put ''YnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tbGluay1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5i''@;'; put 'put ''dG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4t''@;'; put 'put ''bGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MuYnRuLC5idG4tbGluay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmst''@;'; put 'put ''c3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5r''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1z''@;'; put 'put ''dWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nl''@;'; put 'put ''c3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNz''@;'; put 'put ''IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi1saW5rLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4t''@;'; put 'put ''bGluay13YXJuaW5nIC5idG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9y''@;'; put 'put ''ZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0bi1saW5rLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13''@;'; put 'put ''YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92''@;'; put 'put ''ZXIsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5r''@;'; put 'put ''LXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5p''@;'; put 'put ''bmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3Zlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVy''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGlu''@;'; put 'put ''ay1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0''@;'; put 'put ''bi1saW5rLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1''@;'; put 'put ''cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNk''@;'; put 'put ''cy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJs''@;'; put 'put ''ZWQtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1o''@;'; put 'put ''b3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5i''@;'; put 'put ''dG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJzZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVy''@;'; put 'put ''c2UgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24s''@;'; put 'put ''LmJ0bi1pbnZlcnNlIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5i''@;'; put 'put ''dG4taW52ZXJzZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNl''@;'; put 'put ''IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1pbnZlcnNlOmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1p''@;'; put 'put ''Ym9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVw''@;'; put 'put ''cGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCgu''@;'; put 'put ''YnRuLWxpbmspIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1i''@;'; put 'put ''dG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1s''@;'; put 'put ''aW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNl''@;'; put 'put ''LXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNoZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2ti''@;'; put 'put ''b3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LmJ0bjpkaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4u''@;'; put 'put ''ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFk''@;'; put 'put ''aW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWx7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29u''@;'; put 'put ''LC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2Jv''@;'; put 'put ''eC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVs''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWws''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVy''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZl''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3Rp''@;'; put 'put ''dmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2''@;'; put 'put ''ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''IC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVk''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1p''@;'; put 'put ''Y29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpk''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNr''@;'; put 'put ''Ym94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hl''@;'; put 'put ''Y2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1j''@;'; put 'put ''b2xvcil9LmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNl''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1j''@;'; put 'put ''aGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZv''@;'; put 'put ''LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''cHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFy''@;'; put 'put ''eSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlv''@;'; put 'put ''LmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRl''@;'; put 'put ''bSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1w''@;'; put 'put ''cmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0''@;'; put 'put ''W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8u''@;'; put 'put ''YnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRs''@;'; put 'put ''aW5lLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlv''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5idG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXIsLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106aG92ZXI6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQt''@;'; put 'put ''cmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3Jv''@;'; put 'put ''dXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGls''@;'; put 'put ''ZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0''@;'; put 'put ''bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRu''@;'; put 'put ''Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGls''@;'; put 'put ''ZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGls''@;'; put 'put ''ZHtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1n''@;'; put 'put ''cm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAu''@;'; put 'put ''YnRue21pbi13aWR0aDowfS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAu''@;'; put 'put ''ZHJvcGRvd24tbWVudSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNr''@;'; put 'put ''Ym94IGlucHV0W3R5cGU9cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRpb117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNs''@;'; put 'put ''ci1idXR0b24tZ3JvdXAtbWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFu''@;'; put 'put ''c2l0aW9uOmNvbG9yIGxpbmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3Ip''@;'; put 'put ''fS5jbG9zZTpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNv''@;'; put 'put ''bG9yLWFjdGl2ZSl9LmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5l''@;'; put 'put ''LWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHIt''@;'; put 'put ''YWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1pbmZvKTstLWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTst''@;'; put 'put ''LWNsci1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRp''@;'; put 'put ''bnQpOy0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250''@;'; put 'put ''LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1k''@;'; put 'put ''YW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1j''@;'; put 'put ''b2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRy''@;'; put 'put ''YWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5m''@;'; put 'put ''by1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13''@;'; put 'put ''YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5n''@;'; put 'put ''ZXIpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdl''@;'; put 'put ''ci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFu''@;'; put 'put ''Z2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0''@;'; put 'put ''cmFsKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1z''@;'; put 'put ''aGFkZSk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWlu''@;'; put 'put ''Zm8tcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDAp''@;'; put 'put ''Oy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxp''@;'; put 'put ''Z2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtZmxleDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTgpfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0''@;'; put 'put ''e2ZsZXg6MSAxO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3c7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAu''@;'; put 'put ''YWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0u''@;'; put 'put ''YWxlcnQgLmNsb3NlOmZvY3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1p''@;'; put 'put ''dGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''LmJ0biwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24u''@;'; put 'put ''YnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVy''@;'; put 'put ''dC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3Zlciwu''@;'; put 'put ''YWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNk''@;'; put 'put ''cy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0''@;'; put 'put ''aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9u''@;'; put 'put ''dC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdl''@;'; put 'put ''KSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBh''@;'; put 'put ''Om5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2Jv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5h''@;'; put 'put ''bGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5j''@;'; put 'put ''bG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xv''@;'; put 'put ''cik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHIt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTIpIDB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWlj''@;'; put 'put ''b24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlv''@;'; put 'put ''bnM+LmFsZXJ0LWFjdGlvbjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5l''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bp''@;'; put 'put ''bm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+''@;'; put 'put ''LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5hbGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxl''@;'; put 'put ''cnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0IC5jbG9zZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5hbGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdo''@;'; put 'put ''dC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29s''@;'; put 'put ''b3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxp''@;'; put 'put ''Z2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2Vp''@;'; put 'put ''Z2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1''@;'; put 'put ''cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm97YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''aXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rp''@;'; put 'put ''b24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1p''@;'; put 'put ''dGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''ZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlv''@;'; put 'put ''bi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxs''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNs''@;'; put 'put ''ci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVy''@;'; put 'put ''dC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''bmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0''@;'; put 'put ''cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1u''@;'; put 'put ''ZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''d2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNs''@;'; put 'put ''b3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''YTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxl''@;'; put 'put ''cnQtYWN0aW9uc3twYWRkaW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFs''@;'; put 'put ''ZXJ0LWljb24td3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNt''@;'; put 'put ''IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0zKSAwfS5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2Vp''@;'; put 'put ''Z2h0IC5hbGVydC1pdGVtc3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6''@;'; put 'put ''d3JhcH0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIg''@;'; put 'put ''Y2xyLWFsZXJ0e2ZsZXg6MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmct''@;'; put 'put ''Y29sb3IpfS5hbGVydHMuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0''@;'; put 'put ''cy5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEx''@;'; put 'put ''KTtmbGV4OjEgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1i''@;'; put 'put ''dXR0b24gY2RzLWljb24sLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXI7ZmxleDoxIDEgYXV0b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItY2FyZC10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2Fi''@;'; put 'put ''bGUtYm94LXNoYWRvdzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0''@;'; put 'put ''bGUtY29sb3I6dmFyKC0tY2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3Jk''@;'; put 'put ''ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4y''@;'; put 'put ''cyBlYXNlLHRyYW5zZm9ybSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5jYXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2Fy''@;'; put 'put ''ZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDph''@;'; put 'put ''dXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAu''@;'; put 'put ''YWxlcnR7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1j''@;'; put 'put ''YXJkLWJvcmRlci1jb2xvcil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxv''@;'; put 'put ''Y2t7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpfWgzLmNhcmQtaGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2Fy''@;'; put 'put ''ZC1oZWFkZXItdGl0bGUtY29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50''@;'; put 'put ''LXRpdGxlLWNvbG9yKX1oMS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUsaDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2Fy''@;'; put 'put ''ZC1oZWFkZXIsaDYuY2FyZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGls''@;'; put 'put ''ZD5pbWd7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRp''@;'; put 'put ''dXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6''@;'; put 'put ''bGFzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAuYnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4t''@;'; put 'put ''bGluaywuY2FyZC1mb290ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNv''@;'; put 'put ''bGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdp''@;'; put 'put ''ZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lk''@;'; put 'put ''dGg6YXV0b30uY2FyZC1oZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9uZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zmxl''@;'; put 'put ''eDowIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEt''@;'; put 'put ''YmxvY2sgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUsLmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJs''@;'; put 'put ''b2NrLndyYXB7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3Qt''@;'; put 'put ''dW5zdHlsZWR7cGFkZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJr''@;'; put 'put ''aXQtcGVyc3BlY3RpdmU6MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVtbnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KX0uY2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5y''@;'; put 'put ''YWRpby5idG4gbGFiZWwsLmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0''@;'; put 'put ''aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0''@;'; put 'put ''aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVue3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3Jk''@;'; put 'put ''ZXItcmFkaXVzOjA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlvbjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7''@;'; put 'put ''cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAu''@;'; put 'put ''dGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTIpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDtt''@;'; put 'put ''YXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5h''@;'; put 'put ''di1saW5rOmhvdmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3RhcnR9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRyb3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xv''@;'; put 'put ''cik7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1m''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTstLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRv''@;'; put 'put ''d24taXRlbS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''c2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''aW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bk''@;'; put 'put ''b3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZs''@;'; put 'put ''b3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49''@;'; put 'put ''Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24g''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0u''@;'; put 'put ''ZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3Bh''@;'; put 'put ''Y2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Mik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9w''@;'; put 'put ''ZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24t''@;'; put 'put ''aXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl''@;'; put 'put ''bS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1z''@;'; put 'put ''dWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''KX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0u''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''b3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJu''@;'; put 'put ''aW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVk''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmlt''@;'; put 'put ''YXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8u''@;'; put 'put ''ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2Fi''@;'; put 'put ''bGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpk''@;'; put 'put ''aXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJp''@;'; put 'put ''bWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1p''@;'; put 'put ''dGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3Rp''@;'; put 'put ''dmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2Vy''@;'; put 'put ''LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1s''@;'; 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 ''aW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUy''@;'; put 'put ''MGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIwMi4wMDA4MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2''@;'; put 'put ''JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYzJTIwNDIuNDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAw''@;'; put 'put ''OCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1Mi41NTI3JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIw''@;'; put 'put ''MS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUyMDEuNDAxMTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1''@;'; put 'put ''NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5MjglMjA1NS4yNjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4Njgl''@;'; put 'put ''MjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIwMTUuNDU5NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUz''@;'; put 'put ''RCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3QzgwLjEzODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgw''@;'; put 'put ''LjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgxODclMjA4Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYu''@;'; put 'put ''NTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUyMDgwLjIwNDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1''@;'; put 'put ''NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5NCUyMDE1LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43''@;'; put 'put ''NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIwMy45OTQxNSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUx''@;'; put 'put ''JTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4wMDgzJTIwOTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4''@;'; put 'put ''LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMlMjAxMy4yMDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMu''@;'; put 'put ''NjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIwMi4xMzUyMyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIz''@;'; put 'put ''JTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUyMDExLjIxNThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1Mzcl''@;'; put 'put ''MjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMyNzclMjA2OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41''@;'; put 'put ''NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIuNTk0MjElMjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUy''@;'; put 'put ''MDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIwNzIuOTE1NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3''@;'; put 'put ''NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMuNzc1JTIwMTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUy''@;'; put 'put ''MDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1JTIwMTEuMjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4''@;'; put 'put ''QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJDNjQuNjkzNyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3''@;'; put 'put ''MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4y''@;'; put 'put ''MDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUyMDEzLjQ3NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2''@;'; put 'put ''NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIwMTUuMzA5JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUy''@;'; put 'put ''MDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0NSUyMDE2JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMl''@;'; put 'put ''MjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUyMDQuNzkzMjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYl''@;'; put 'put ''MjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAzMS4yMDY0JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIw''@;'; put 'put ''My44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzkuMzU0OSUyMDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzku''@;'; put 'put ''MzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4LjA4ODIlMjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41''@;'; put 'put ''MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1Ljk1NTMlMjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjEx''@;'; put 'put ''MDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAu''@;'; put 'put ''ODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42MDklMjAzLjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIw''@;'; put 'put ''NC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1JTIwMTAyLjc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEw''@;'; put 'put ''MS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjclMjAzLjAwMDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44ODVDMTAzLjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEw''@;'; put 'put ''My40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4JTIwMi4zMzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIz''@;'; put 'put ''NyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIwMTAzLjIxOCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUx''@;'; put 'put ''JTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0NDYlMjAxMDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIw''@;'; put 'put ''M1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAxMDIuODc4JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIl''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxv''@;'; put 'put ''Z2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVt''@;'; put 'put ''bjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHItbG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''bHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1sb2dpbi10cmFk''@;'; put 'put ''ZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAu''@;'; put 'put ''bG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNrYm94LC5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91''@;'; put 'put ''cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2luLXdyYXBwZXIg''@;'; put 'put ''LmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9n''@;'; put 'put ''aW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1l''@;'; put 'put ''cnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24l''@;'; put 'put ''M0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUy''@;'; put 'put ''Mmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0Ul''@;'; put 'put ''M0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMl''@;'; put 'put ''MkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUy''@;'; put 'put ''MiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb3ZlcjttYXNrLXNpemU6Y292ZXI7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFwcGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAw''@;'; put 'put ''IHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250''@;'; put 'put ''ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJv''@;'; put 'put ''ZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290''@;'; put 'put ''IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFj''@;'; put 'put ''a2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMo''@;'; put 'put ''ODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1t''@;'; put 'put ''ZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRl''@;'; put 'put ''eDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVh''@;'; put 'put ''ZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIp''@;'; put 'put ''fX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5z''@;'; put 'put ''aWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdo''@;'; put 'put ''dDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntpbnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4''@;'; put 'put ''OjEwNTA7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1v''@;'; put 'put ''ZGFsLXNtLXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZhcigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXti''@;'; put 'put ''b3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxl''@;'; put 'put ''IC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''dGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1w''@;'; put 'put ''YW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxl''@;'; put 'put ''LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFs''@;'; put 'put ''LWhlYWRlciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9z''@;'; put 'put ''ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwt''@;'; put 'put ''aGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJs''@;'; put 'put ''ZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vz''@;'; put 'put ''c2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5l''@;'; put 'put ''bC10aXRsZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2Nv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHkt''@;'; put 'put ''d3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsu''@;'; put 'put ''bW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwt''@;'; put 'put ''c2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2Ny''@;'; put 'put ''ZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAu''@;'; put 'put ''bW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMoNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhlYWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwKTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0t''@;'; put 'put ''Y2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAp''@;'; put 'put ''Oy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRl''@;'; put 'put ''ci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNl''@;'; put 'put ''YXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNs''@;'; put 'put ''ci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGlnaHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dyYXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVhZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxo''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFuZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGlu''@;'; put 'put ''ZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtmb250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''O3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10''@;'; put 'put ''ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHIt''@;'; put 'put ''aWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1j''@;'; put 'put ''b2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''diAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpk''@;'; put 'put ''aXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2Fi''@;'; put 'put ''bGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xy''@;'; put 'put ''LWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwu''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dh''@;'; put 'put ''cDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29u''@;'; put 'put ''LXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24t''@;'; put 'put ''dGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1p''@;'; put 'put ''Y29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xy''@;'; put 'put ''LWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYt''@;'; put 'put ''dGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6''@;'; put 'put ''bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1z''@;'; put 'put ''cGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''bmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0''@;'; put 'put ''aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46''@;'; put 'put ''bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xv''@;'; put 'put ''cil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rp''@;'; put 'put ''b25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3Qt''@;'; put 'put ''YWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1h''@;'; put 'put ''bmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5v''@;'; put 'put ''dChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpu''@;'; put 'put ''b3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWlj''@;'; put 'put ''b24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5zZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1''@;'; put 'put ''dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhl''@;'; put 'put ''YWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxl''@;'; put 'put ''ZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNo''@;'; put 'put ''IGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJp''@;'; put 'put ''Z2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0Nk''@;'; put 'put ''ZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0MlMkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBk''@;'; put 'put ''JTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJDNC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJBMTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUz''@;'; put 'put ''RSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0zMy43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmExJTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0t''@;'; put 'put ''Y2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRd''@;'; put 'put ''e2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3Bh''@;'; put 'put ''ZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIg''@;'; put 'put ''LnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2Vh''@;'; put 'put ''cmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVy''@;'; put 'put ''IC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3Ry''@;'; put 'put ''YW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1i''@;'; put 'put ''b3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDtib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0''@;'; put 'put ''W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0''@;'; put 'put ''eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFy''@;'; put 'put ''Y2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpub25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94''@;'; put 'put ''IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpu''@;'; put 'put ''b3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1h''@;'; put 'put ''Y3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlu''@;'; put 'put ''azpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRu''@;'; put 'put ''LC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwu''@;'; put 'put ''YWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1h''@;'; put 'put ''Om5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpo''@;'; put 'put ''b3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4s''@;'; put 'put ''Lm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29s''@;'; put 'put ''b3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywu''@;'; put 'put ''bmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYt''@;'; put 'put ''aXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNo''@;'; put 'put ''YWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwg''@;'; put 'put ''ODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2''@;'; put 'put ''e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAubmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1yaWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNh''@;'; put 'put ''cmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRl''@;'; put 'put ''bS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxl''@;'; put 'put ''Y3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24t''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1hcmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3''@;'; put 'put ''aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJp''@;'; put 'put ''Z2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1h''@;'; put 'put ''Y3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3Ry''@;'; put 'put ''YW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNv''@;'; put 'put ''bnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10''@;'; put 'put ''ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6''@;'; put 'put ''ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9''@;'; put 'put ''YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIg''@;'; put 'put ''Y2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdn''@;'; put 'put ''ZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''ci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmds''@;'; put 'put ''ZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBj''@;'; put 'put ''ZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFs''@;'; put 'put ''bCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRy''@;'; put 'put ''aWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0''@;'; put 'put ''ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7''@;'; put 'put ''YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNhbC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5h''@;'; put 'put ''di1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVm''@;'; put 'put ''dDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29udGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAu''@;'; put 'put ''bmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFz''@;'; put 'put ''LWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0''@;'; put 'put ''aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3Zl''@;'; put 'put ''cmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4''@;'; put 'put ''LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpwb2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdp''@;'; put 'put ''ZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dl''@;'; put 'put ''cntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6''@;'; put 'put ''ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6''@;'; put 'put ''bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJm''@;'; put 'put ''bG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtj''@;'; put 'put ''bGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3VwLXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29s''@;'; put 'put ''bGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25z''@;'; put 'put ''IC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwu''@;'; put 'put ''bWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgs''@;'; put 'put ''MXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYt''@;'; put 'put ''dHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1y''@;'; put 'put ''YWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhv''@;'; put 'put ''dmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFu''@;'; put 'put ''LC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwt''@;'; put 'put ''YWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9w''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDow''@;'; put 'put ''IDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlk''@;'; put 'put ''ZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3Zl''@;'; put 'put ''cmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2''@;'; put 'put ''ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhl''@;'; put 'put ''YWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dl''@;'; put 'put ''cjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVy''@;'; put 'put ''IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lk''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0''@;'; put 'put ''ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZv''@;'; put 'put ''cmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFj''@;'; put 'put ''dGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3Vi''@;'; put 'put ''LW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6''@;'; put 'put ''aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5v''@;'; put 'put ''bmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3Jl''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtj''@;'; put 'put ''b250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNv''@;'; put 'put ''bG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0''@;'; put 'put ''aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEq''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29s''@;'; put 'put ''b3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYu''@;'; put 'put ''Y2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsg''@;'; put 'put ''Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ct''@;'; put 'put ''bWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAu''@;'; put 'put ''bmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6''@;'; put 'put ''YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2Jv''@;'; put 'put ''dHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3Jk''@;'; put 'put ''ZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5r''@;'; put 'put ''LmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10''@;'; put 'put ''ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhlcml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+''@;'; put 'put ''Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''O3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5t''@;'; put 'put ''YWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1''@;'; put 'put ''cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFu''@;'; put 'put ''c2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0''@;'; put 'put ''cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhl''@;'; put 'put ''ZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''NnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9w''@;'; put 'put ''ZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zv''@;'; put 'put ''cm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5h''@;'; put 'put ''di1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0u''@;'; put 'put ''bWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2''@;'; put 'put ''LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lk''@;'; put 'put ''dGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7''@;'; put 'put ''cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHIt''@;'; put 'put ''YmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRp''@;'; put 'put ''Y2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5''@;'; put 'put ''LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJhZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1v''@;'; put 'put ''cmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5i''@;'; put 'put ''YWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6''@;'; put 'put ''cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxl''@;'; put 'put ''ZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1''@;'; put 'put ''ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxh''@;'; put 'put ''YmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwt''@;'; put 'put ''c3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFi''@;'; put 'put ''ZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpoYXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAuYmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0z''@;'; put 'put ''KX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5jbGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVy''@;'; put 'put ''bGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1k''@;'; put 'put ''ZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFi''@;'; put 'put ''ZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFiZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVy''@;'; put 'put ''LXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0''@;'; put 'put ''aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVsLTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13''@;'; put 'put ''aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxhYmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgp''@;'; put 'put ''IHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1ibHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGln''@;'; put 'put ''aHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5i''@;'; put 'put ''YWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dy''@;'; put 'put ''b3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9Lmxh''@;'; put 'put ''YmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2FybmluZz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5s''@;'; put 'put ''YWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJv''@;'; put 'put ''cmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxh''@;'; put 'put ''YmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRpc2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdl''@;'; put 'put ''LGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVz''@;'; put 'put ''cy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFk''@;'; put 'put ''ZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdp''@;'; put 'put ''bjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1v''@;'; put 'put ''ei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjow''@;'; put 'put ''O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9''@;'; put 'put ''LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVsZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czowfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnBy''@;'; put 'put ''b2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1w''@;'; put 'put ''cm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpub3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQpe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tv''@;'; put 'put ''cGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dy''@;'; put 'put ''ZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6''@;'; put 'put ''Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9n''@;'; put 'put ''cmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnBy''@;'; put 'put ''b2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFu''@;'; put 'put ''c2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1''@;'; put 'put ''ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBs''@;'; put 'put ''aW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12''@;'; put 'put ''YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0y''@;'; put 'put ''KX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9v''@;'; put 'put ''cD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlv''@;'; put 'put ''bjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dp''@;'; put 'put ''ZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sb29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5w''@;'; put 'put ''cm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZh''@;'; put 'put ''dWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jl''@;'; put 'put ''c3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVm''@;'; put 'put ''b3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRh''@;'; put 'put ''LXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRl''@;'; put 'put ''cltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRp''@;'; put 'put ''Yz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNz''@;'; put 'put ''LXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZvcmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1t''@;'; put 'put ''ZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4''@;'; put 'put ''Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZv''@;'; put 'put ''cmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9yZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3''@;'; put 'put ''NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJdOmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''OTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywu''@;'; put 'put ''Y2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQt''@;'; put 'put ''YmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNz''@;'; put 'put ''LC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyLC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3BhbnttYXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRvO2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3Mt''@;'; put 'put ''bGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9n''@;'; put 'put ''cmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7''@;'; put 'put ''bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jl''@;'; put 'put ''c3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+''@;'; put 'put ''bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVy''@;'; put 'put ''LXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1zcGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNsci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwt''@;'; put 'put ''aW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1''@;'; put 'put ''bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdl''@;'; put 'put ''aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVye2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNw''@;'; put 'put ''aW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUg''@;'; put 'put ''YXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJva2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRp''@;'; put 'put ''dXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmls''@;'; put 'put ''bC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdp''@;'; put 'put ''ZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVyLXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1z''@;'; put 'put ''cGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1i''@;'; put 'put ''b3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdC''@;'; put 'put ''b3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53''@;'; put 'put ''My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZz''@;'; put 'put ''dmclM0UpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6''@;'; put 'put ''YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRy''@;'; put 'put ''ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1Aa2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xy''@;'; put 'put ''LXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0t''@;'; put 'put ''Y2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwt''@;'; put 'put ''Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRp''@;'; put 'put ''bnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''b2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBh''@;'; put 'put ''Y3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIoLS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7''@;'; put 'put ''Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxlIHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUg''@;'; put 'put ''dGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRkLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0''@;'; put 'put ''ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGlu''@;'; put 'put ''ZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Ym90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxl''@;'; put 'put ''IHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1y''@;'; put 'put ''YWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMp''@;'; put 'put ''fS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hp''@;'; put 'put ''bGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qt''@;'; put 'put ''cm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''OjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50''@;'; put 'put ''YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNo''@;'; put 'put ''aWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNo''@;'; put 'put ''aWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0''@;'; put 'put ''aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGls''@;'; put 'put ''ZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNl''@;'; put 'put ''bGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJs''@;'; put 'put ''ZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQg''@;'; put 'put ''dGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIg''@;'; put 'put ''dGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlw''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRp''@;'; put 'put ''b246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIiO3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBs''@;'; put 'put ''aXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0''@;'; put 'put ''KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3Atcmln''@;'; put 'put ''aHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJn''@;'; put 'put ''aW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50''@;'; put 'put ''b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXIt''@;'; put 'put ''bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9t''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNv''@;'; put 'put ''bnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVu''@;'; put 'put ''dC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29s''@;'; put 'put ''dGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJh''@;'; put 'put ''ZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlw''@;'; put 'put ''LWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJv''@;'; put 'put ''dHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9v''@;'; put 'put ''bHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgNTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czow''@;'; put 'put ''O21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9t''@;'; put 'put ''LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRv''@;'; put 'put ''b2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bztt''@;'; put 'put ''YXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6''@;'; put 'put ''MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJh''@;'; put 'put ''bnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRv''@;'; put 'put ''b2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVt''@;'; put 'put ''L3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6''@;'; put 'put ''Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpm''@;'; put 'put ''b2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNlbGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0t''@;'; put 'put ''ZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFs''@;'; put 'put ''aWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDAp''@;'; put 'put ''Oy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQt''@;'; put 'put ''d2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1z''@;'; put 'put ''LWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNs''@;'; put 'put ''ci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''bGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2VkLWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''Y29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlz''@;'; put 'put ''YWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXIt''@;'; put 'put ''YmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5k''@;'; put 'put ''OnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29u''@;'; put 'put ''dHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQg''@;'; put 'put ''LmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5n''@;'; put 'put ''ZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1j''@;'; put 'put ''b2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZv''@;'; put 'put ''bnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4''@;'; put 'put ''dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vzc3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xv''@;'; put 'put ''cil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNwbGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNv''@;'; put 'put ''bntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''YmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9yaXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNvbnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3Qp''@;'; put 'put ''IC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1j''@;'; put 'put ''b250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lk''@;'; put 'put ''dGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUt''@;'; put 'put ''aWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHIt''@;'; put 'put ''Zm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1''@;'; put 'put ''bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVs''@;'; put 'put ''bC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFy''@;'; put 'put ''ZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHIt''@;'; put 'put ''Zm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRh''@;'; put 'put ''aW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2ZsZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1m''@;'; put 'put ''dWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpub3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5j''@;'; put 'put ''bHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJv''@;'; put 'put ''bC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25l''@;'; put 'put ''O2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0''@;'; put 'put ''bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zm''@;'; put 'put ''c2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpk''@;'; put 'put ''aXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtaW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZs''@;'; put 'put ''ZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNh''@;'; put 'put ''YmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdy''@;'; put 'put ''YXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257''@;'; put 'put ''bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29s''@;'; put 'put ''dXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUp''@;'; put 'put ''fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNh''@;'; put 'put ''bGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDoxLjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0''@;'; put 'put ''dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNl''@;'; put 'put ''dDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1A''@;'; put 'put ''bWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''O21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtn''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5jbHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHIt''@;'; put 'put ''aW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUs''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXpl''@;'; put 'put ''OjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3Jl''@;'; put 'put ''YWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQt''@;'; put 'put ''c2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2Jv''@;'; put 'put ''cmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0u''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3Jk''@;'; put 'put ''ZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNr''@;'; put 'put ''Z3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3JvdW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91''@;'; put 'put ''cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257Zmls''@;'; put 'put ''bDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNs''@;'; put 'put ''YXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6''@;'; put 'put ''bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAw''@;'; put 'put ''JSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xv''@;'; put 'put ''cikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNz''@;'; put 'put ''IC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpoYXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAu''@;'; put 'put ''Y2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9u''@;'; put 'put ''ZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxh''@;'; put 'put ''YmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9y''@;'; put 'put ''ZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4wNXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9yZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkp''@;'; put 'put ''KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2Fi''@;'; put 'put ''bGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRp''@;'; put 'put ''bmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlv''@;'; put 'put ''LXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFy''@;'; put 'put ''KC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVy''@;'; put 'put ''O3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVj''@;'; put 'put ''dDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6''@;'; put 'put ''ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0''@;'; put 'put ''aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpm''@;'; put 'put ''b2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFtt''@;'; put 'put ''dWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpo''@;'; put 'put ''b3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXIt''@;'; put 'put ''Y29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13''@;'; put 'put ''cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNl''@;'; put 'put ''bGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFu''@;'; put 'put ''ZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIl''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VD''@;'; put 'put ''YXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMx''@;'; put 'put ''JTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhv''@;'; put 'put ''dmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVj''@;'; put 'put ''dFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVs''@;'; put 'put ''dGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVy''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9u''@;'; put 'put ''LWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2Vs''@;'; put 'put ''ZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJl''@;'; put 'put ''cGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0''@;'; put 'put ''Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1p''@;'; put 'put ''bnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxl''@;'; put 'put ''XSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxl''@;'; put 'put ''XXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9s''@;'; put 'put ''LWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdp''@;'; put 'put ''bi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFy''@;'; put 'put ''ZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xv''@;'; put 'put ''cjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpk''@;'; put 'put ''aXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9y''@;'; put 'put ''ZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBw''@;'; put 'put ''ZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdp''@;'; put 'put ''ZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10''@;'; put 'put ''b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1v''@;'; put 'put ''ZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2Fi''@;'; put 'put ''bGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1j''@;'; put 'put ''bHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xy''@;'; put 'put ''LXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtw''@;'; put 'put ''b3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNsci10b2dnbGUt''@;'; put 'put ''d3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9y''@;'; put 'put ''ZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yKTtsZWZ0OjA7''@;'; put 'put ''cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1p''@;'; put 'put ''bjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0''@;'; put 'put ''cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9uKTt0cmFuc2l0''@;'; put 'put ''aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6MH0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNs''@;'; put 'put ''ci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRo''@;'; put 'put ''dW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNz''@;'; put 'put ''LWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xy''@;'; put 'put ''LXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDst''@;'; put 'put ''d2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRl''@;'; put 'put ''ci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBw''@;'; put 'put ''ZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1''@;'; put 'put ''dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVz''@;'; put 'put ''cy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9y''@;'; put 'put ''ZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAl''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAu''@;'; put 'put ''Y2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6''@;'; put 'put ''cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9''@;'; put 'put ''cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjot''@;'; put 'put ''bXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2st''@;'; put 'put ''Y29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdl''@;'; put 'put ''YmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0uY2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1''@;'; put 'put ''JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRh''@;'; put 'put ''bGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFk''@;'; put 'put ''ZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1''@;'; put 'put ''dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdy''@;'; put 'put ''YXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1v''@;'; put 'put ''dXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQt''@;'; put 'put ''c2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vw''@;'; put 'put ''LWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13''@;'; put 'put ''cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlv''@;'; put 'put ''bi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxl''@;'; put 'put ''Y3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRv''@;'; put 'put ''ZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1m''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsg''@;'; put 'put ''KDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0''@;'; put 'put ''ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lkdGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Ut''@;'; put 'put ''b3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAr''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3toZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigtLWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDti''@;'; put 'put ''b3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4t''@;'; put 'put ''aG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMoMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5j''@;'; put 'put ''YWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46''@;'; put 'put ''YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0''@;'; put 'put ''OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXktYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJn''@;'; put 'put ''KX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNh''@;'; put 'put ''bGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwt''@;'; put 'put ''Zm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXIt''@;'; put 'put ''YWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRl''@;'; put 'put ''ci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlz''@;'; put 'put ''cGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0uc3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0u''@;'; put 'put ''c3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1vbnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1y''@;'; put 'put ''YW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4t''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnllYXI6YWN0aXZl''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlzLWVuZC1yYW5n''@;'; put 'put ''ZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yKX0u''@;'; put 'put ''bW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0''@;'; put 'put ''YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2''@;'; put 'put ''YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJvYm94LWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVtIC8gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21ib2JveC1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNv''@;'; put 'put ''bWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQt''@;'; put 'put ''aG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItY29t''@;'; put 'put ''Ym9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bGVmdDow''@;'; put 'put ''O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAuY2xyLWZvY3Vz''@;'; put 'put ''LWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dDpub3QoOmRp''@;'; put 'put ''c2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1j''@;'; put 'put ''b2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tncm91bmQ6MCAw''@;'; put 'put ''O2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5n''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5jbHItY29tYm9i''@;'; put 'put ''b3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFi''@;'; put 'put ''ZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQpOmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGlu''@;'; put 'put ''Zy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZHtjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJvYm94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10''@;'; put 'put ''cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXIt''@;'; put 'put ''c3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDApO21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''O292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMt''@;'; put 'put ''ZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0t''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQt''@;'; put 'put ''dHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9w''@;'; put 'put ''dGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpmb2N1c3t6LWlu''@;'; put 'put ''ZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''ZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNs''@;'; put 'put ''ci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2JveC1vcHRpb25z''@;'; put 'put ''IC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZp''@;'; put 'put ''bHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3LWJvcmRlci13''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDAp''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRh''@;'; put 'put ''YmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBh''@;'; put 'put ''bmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFj''@;'; put 'put ''dGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXN0YWNr''@;'; put 'put ''LXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3Rh''@;'; put 'put ''Y2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12aWV3LXN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXct''@;'; put 'put ''c3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcik7''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''ZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2stdmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRvcDowO2JvcmRl''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBkdHttYXJnaW4t''@;'; put 'put ''aW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0''@;'; put 'put ''LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB2YXIoLS1j''@;'; put 'put ''bHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IpO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc3RhY2stdmll''@;'; put 'put ''dyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRvbTowfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRvO3dpZHRoOjEw''@;'; put 'put ''MCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3Rh''@;'; put 'put ''Y2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAu''@;'; put 'put ''c3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNv''@;'; put 'put ''bG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNr''@;'; put 'put ''Z3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNF''@;'; put 'put ''Q2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJD''@;'; put 'put ''MSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNr''@;'; put 'put ''LXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1i''@;'; put 'put ''bG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXIpfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKX0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgp''@;'; put 'put ''O2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0''@;'; put 'put ''YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFjay12aWV3IC5z''@;'; put 'put ''dGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4''@;'; put 'put ''cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2Nr''@;'; put 'put ''LWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNh''@;'; put 'put ''cmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1zdGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7''@;'; put 'put ''Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25l''@;'; put 'put ''fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVy''@;'; put 'put ''KTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5rLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0''@;'; put 'put ''aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xv''@;'; put 'put ''cik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yKTstLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxlY3RlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0''@;'; put 'put ''ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''b3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmct''@;'; put 'put ''ZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9k''@;'; put 'put ''ZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVl''@;'; put 'put ''LW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13''@;'; put 'put ''ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6''@;'; put 'put ''MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2tib3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29u''@;'; put 'put ''e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUt''@;'; put 'put ''Y29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVu''@;'; put 'put ''b2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9k''@;'; put 'put ''ZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5r''@;'; put 'put ''OmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2Rl''@;'; put 'put ''LWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2ti''@;'; put 'put ''b3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29u''@;'; put 'put ''dGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2''@;'; put 'put ''ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVja2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpj''@;'; put 'put ''aGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRpbmc6MDtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLXNwaW5uZXIt''@;'; put 'put ''Y29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHItdHJlZW5vZGUt''@;'; put 'put ''c3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLWNoaWxk''@;'; put 'put ''cmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGluazpob3Zlciwu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3Vu''@;'; put 'put ''ZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWFj''@;'; put 'put ''dGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtcm93LXNl''@;'; put 'put ''bGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4t''@;'; put 'put ''c3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zl''@;'; put 'put ''cik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1n''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwt''@;'; put 'put ''YWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVu''@;'; put 'put ''dC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1i''@;'; put 'put ''YWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQt''@;'; put 'put ''c2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlv''@;'; put 'put ''bi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNpemUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1j''@;'; put 'put ''b2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1h''@;'; put 'put ''cnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFzZWxpbmVQeCg5''@;'; put 'put ''KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFn''@;'; put 'put ''cmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmlnaHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hp''@;'; put 'put ''bGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlk''@;'; put 'put ''IC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlk''@;'; put 'put ''LXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQt''@;'; put 'put ''cm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNv''@;'; put 'put ''bXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFw''@;'; put 'put ''O3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJmbG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscz4uZGF0YWdy''@;'; put 'put ''aWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcp''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVy''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXItdG9wLXN0eWxl''@;'; put 'put ''OnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJvdzpob3Zlciwu''@;'; put 'put ''ZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkIC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVyLC5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlLC5k''@;'; put 'put ''YXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRhdGFncmlkLXJv''@;'; put 'put ''dzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93LmRhdGFncmlk''@;'; put 'put ''LXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRv''@;'; put 'put ''O2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRh''@;'; put 'put ''aWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3Qg''@;'; put 'put ''aW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kYXRh''@;'; put 'put ''Z3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAu''@;'; put 'put ''c2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LmRh''@;'; put 'put ''dGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLXJv''@;'; put 'put ''dy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxkOmFm''@;'; put 'put ''dGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vk''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFw''@;'; put 'put ''fS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cg''@;'; put 'put ''bm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcntoZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93Omhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVjdGlvbjpyb3d9''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4O2ZsZXg6MSAx''@;'; put 'put ''IGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtv''@;'; put 'put ''dXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXR7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdy''@;'; put 'put ''aWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNr''@;'; put 'put ''Z3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6''@;'; put 'put ''ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5kYXRhZ3JpZC10''@;'; put 'put ''YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3ot''@;'; put 'put ''YXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTt0''@;'; put 'put ''ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRp''@;'; put 'put ''dGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlOmhvdmVy''@;'; put 'put ''e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpO21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2ZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21h''@;'; put 'put ''cmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO3JpZ2h0OmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAwJSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2hlaWdo''@;'; put 'put ''dDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7''@;'; put 'put ''Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0u''@;'; put 'put ''ZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1k''@;'; put 'put ''YXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRh''@;'; put 'put ''Z3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVt''@;'; put 'put ''bi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2JvcmRlcjowfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTtt''@;'; put 'put ''YXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3VuZDowIDB9LmRh''@;'; put 'put ''dGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpj''@;'; put 'put ''ZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46''@;'; put 'put ''MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQt''@;'; put 'put ''Y2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRv''@;'; put 'put ''Z2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRvZ2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDoxIDEgYXV0bztk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpub25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci5kYXRhZ3Jp''@;'; put 'put ''ZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5k''@;'; put 'put ''LWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1s''@;'; put 'put ''bnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUz''@;'; put 'put ''RCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVz''@;'; put 'put ''ZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQl''@;'; put 'put ''M0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIu''@;'; put 'put ''OCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUx''@;'; put 'put ''LjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQl''@;'; put 'put ''M0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDgl''@;'; put 'put ''MjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUy''@;'; put 'put ''MEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEy''@;'; put 'put ''LjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkx''@;'; put 'put ''Nzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2Ul''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjEx''@;'; put 'put ''JTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1''@;'; put 'put ''JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQl''@;'; put 'put ''MjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBD''@;'; put 'put ''NS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIy''@;'; put 'put ''MjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0''@;'; put 'put ''JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41''@;'; put 'put ''NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJD''@;'; put 'put ''Ny4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAy''@;'; put 'put ''JTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYw''@;'; put 'put ''ODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0Ui''@;'; put 'put ''KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMg''@;'; put 'put ''LmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNl''@;'; put 'put ''bGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1y''@;'; put 'put ''ZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24t''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1wYWdpbmF0aW9u''@;'; put 'put ''LWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2VsZWN0e2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3Zl''@;'; put 'put ''cnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtZm9vdGVyIC5j''@;'; put 'put ''b2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21hcmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmhv''@;'; put 'put ''dmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFjdGl2ZSwuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3RpdmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1h''@;'; put 'put ''Y3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJs''@;'; put 'put ''ZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1zcGlubmVye3Bv''@;'; put 'put ''c2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2Vs''@;'; put 'put ''bC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkpKX0uZGF0YWdy''@;'; put 'put ''aWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJhbnNsYXRlWShj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGluZy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9LmRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNr''@;'; put 'put ''LWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJp''@;'; put 'put ''YW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0''@;'; put 'put ''IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9''@;'; put 'put ''LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9u''@;'; put 'put ''e291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVy''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAw''@;'; put 'put ''fS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0''@;'; put 'put ''aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRpb24tbGlzdD4q''@;'; put 'put ''e3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbGlzdCAucGFn''@;'; put 'put ''aW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5h''@;'; put 'put ''dGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFzdCwucGFnaW5h''@;'; put 'put ''dGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdpbmF0aW9uLWxp''@;'; put 'put ''c3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAgMCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9jayFpbXBvcnRh''@;'; put 'put ''bnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5kYXRhZ3JpZC1p''@;'; put 'put ''bm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3Jh''@;'; put 'put ''cHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZpcnR1YWwtc2Ny''@;'; put 'put ''b2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3Bl''@;'; put 'put ''bj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItcmln''@;'; put 'put ''aHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2JvcmRlci1yaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlkLWRldGFpbC1v''@;'; put 'put ''cGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdp''@;'; put 'put ''bi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntjb250ZW50OiIi''@;'; put 'put ''O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMoMTEqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZsZXgt''@;'; put 'put ''Z3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEwMCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nKX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWln''@;'; put 'put ''aHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRp''@;'; put 'put ''dGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7bWluLWhlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13''@;'; put 'put ''ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZGV0YWlsLWNh''@;'; put 'put ''cmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJl''@;'; put 'put ''dC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRh''@;'; put 'put ''YmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21pbi13aWR0aDp1''@;'; put 'put ''bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlu''@;'; put 'put ''bmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''b3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJv''@;'; put 'put ''cmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUwfS5jb2x1bW4t''@;'; put 'put ''c3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5jb2x1bW4tc3dp''@;'; put 'put ''dGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3aXRjaCAuc3dp''@;'; put 'put ''dGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXIt''@;'; put 'put ''Zm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24g''@;'; put 'put ''Y2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292''@;'; put 'put ''ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cp''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQt''@;'; put 'put ''ZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybXtkaXNwbGF5''@;'; put 'put ''OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0YWdyaWQtZmls''@;'; put 'put ''dGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gt''@;'; put 'put ''c2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9u''@;'; put 'put ''LWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKTtib3JkZXIt''@;'; put 'put ''cmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRvcDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpjYWxjKHZhcigt''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJm''@;'; put 'put ''bG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlcntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92ZXIuYWN0aXZl''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7cG9p''@;'; put 'put ''bnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9''@;'; put 'put ''LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmF1dG99LmRh''@;'; put 'put ''dGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5k''@;'; put 'put ''YXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVy''@;'; put 'put ''LXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1o''@;'; put 'put ''b3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1ob3N0LmRhdGFn''@;'; put 'put ''cmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlk''@;'; put 'put ''LWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4t''@;'; put 'put ''b3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9w''@;'; put 'put ''YWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNrZWxldG9uLWxv''@;'; put 'put ''YWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXdpemFy''@;'; put 'put ''ZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7''@;'; put 'put ''LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3Jv''@;'; put 'put ''dW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzstLWNsci13aXph''@;'; put 'put ''cmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXph''@;'; put 'put ''cmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7aGVpZ2h0OjUw''@;'; put 'put ''JTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7ZmxleDoyIDIgYXV0''@;'; put 'put ''bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7''@;'; put 'put ''d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9kYWwtZm9vdGVy''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpibG9j''@;'; put 'put ''a30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci1hY3Rpb25z''@;'; put 'put ''LXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNsci13aXphcmQt''@;'; put 'put ''aGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2JvcmRlcjow''@;'; put 'put ''O3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZhcigtLWNsci13''@;'; put 'put ''aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhl''@;'; put 'put ''YWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQpfS5jbHIt''@;'; put 'put ''d2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0''@;'; put 'put ''bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''d2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRl''@;'; put 'put ''LXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6''@;'; put 'put ''ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29s''@;'; put 'put ''b3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmst''@;'; put 'put ''aG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJk''@;'; put 'put ''LXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxl''@;'; put 'put ''dGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0''@;'; put 'put ''aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVpZ2h0OmF1dG87''@;'; put 'put ''bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1''@;'; put 'put ''bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHIt''@;'; put 'put ''d2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlu''@;'; put 'put ''ay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRl''@;'; put 'put ''ZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXg6MSAx''@;'; put 'put ''IDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2lu''@;'; put 'put ''OjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJk''@;'; put 'put ''IC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNsci13aXphcmQg''@;'; put 'put ''LmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5LXdy''@;'; put 'put ''YXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg1MDQq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJk''@;'; put 'put ''LndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtY29udGVudCwu''@;'; put 'put ''Y2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFy''@;'; put 'put ''ZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZo''@;'; put 'put ''O21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMo''@;'; put 'put ''MzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtwYWRkaW5nLXRv''@;'; put 'put ''cDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFsOmZvY3Vze291''@;'; put 'put ''dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO2hl''@;'; put 'put ''aWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0aDo5OSV9LmNs''@;'; put 'put ''ci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6YXJkLS1pbmxp''@;'; put 'put ''bmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRp''@;'; put 'put ''YWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdy''@;'; put 'put ''YXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1o''@;'; put 'put ''ZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6''@;'; put 'put ''YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxl''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJlYXtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFnZVthcmlhLWhp''@;'; put 'put ''ZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMtdGhlbWVdey0t''@;'; put 'put ''Y2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFy''@;'; put 'put ''KC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVy''@;'; put 'put ''OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVkby1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7LS1jbHItc2ln''@;'; put 'put ''bnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJnaW46MDtwYWRk''@;'; put 'put ''aW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25w''@;'; put 'put ''b3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3Nl''@;'; put 'put ''KS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIiO2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxl''@;'; put 'put ''ZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2JvdHRvbTpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9w''@;'; put 'put ''LXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1z''@;'; put 'put ''aWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAu''@;'; put 'put ''cG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jl''@;'; put 'put ''e2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlk''@;'; put 'put ''ZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2Jv''@;'; put 'put ''cmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQg''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlz''@;'; put 'put ''aWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25w''@;'; put 'put ''b3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20t''@;'; put 'put ''cmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNp''@;'; put 'put ''Z25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXIt''@;'; put 'put ''cG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRv''@;'; put 'put ''cCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZv''@;'; put 'put ''cmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNp''@;'; put 'put ''YmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0''@;'; put 'put ''b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVy''@;'; put 'put ''LXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNp''@;'; put 'put ''Z25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10''@;'; put 'put ''b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3Jk''@;'; put 'put ''ZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0''@;'; put 'put ''b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXIgLnNpZ25w''@;'; put 'put ''b3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRvfS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50''@;'; put 'put ''LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1MCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7d2lkdGg6MTAw''@;'; put 'put ''JTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''ci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVy''@;'; put 'put ''OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxk''@;'; put 'put ''IC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtm''@;'; put 'put ''bGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZsZXgtZmxvdzpyb3d9fS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRp''@;'; put 'put ''b24tc3RhdHVzLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tdGl0bGUsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVs''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wfS5jbHItYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13aWR0aDpjYWxjKDI2NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2lkdGg6MTAwJX0uY2xy''@;'; put 'put ''LWFjY29yZGlvbi1kZXNjcmlwdGlvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6Y2FsYyg2NTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQw''@;'; put 'put ''KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNj''@;'; put 'put ''b3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHItYWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dl''@;'; put 'put ''cntwYWRkaW5nOjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3Vy''@;'; put 'put ''cmVudC1pbmRpY2F0b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''cntiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVu''@;'; put 'put ''LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVh''@;'; put 'put ''ZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6dmlzaWJsZTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tY29tcGxldGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5''@;'; put 'put ''OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2Nv''@;'; put 'put ''cmRpb24tcGFuZWwtY29tcGxldGUgLm5nLXRyaWdnZXIuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAg''@;'; put 'put ''dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24tZXJyb3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1udW1iZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24tbnVtYmVye3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRp''@;'; put 'put ''bmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFk''@;'; put 'put ''ZXIpe2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNv''@;'; put 'put ''bnRlbnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cykgLmNsci1hY2NvcmRpb24tcGFuZWwrLmNsci1hY2NvcmRpb24tcGFuZWw+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci10b3At''@;'; put 'put ''cmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBw''@;'; put 'put ''ZXItaGVhZGVyKSwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFjY29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRl''@;'; put 'put ''cikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRpb24tY29udGVudHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp1bnNldDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZSl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOmF1dG99LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNkcy1pY29uLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXN0YXR1cyBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MCFpbXBvcnRh''@;'; put 'put ''bnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1hY2Nv''@;'; put 'put ''cmRpb24tdGV4dC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNl''@;'; put 'put ''bGVjdGVkKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTst''@;'; put 'put ''LWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0''@;'; put 'put ''LWN1cnJlbnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OmNhbGMoNTYqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXN7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEyKTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3Rl''@;'; put 'put ''cC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZzowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1j''@;'; put 'put ''b21wbGV0ZS1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdp''@;'; put 'put ''ZHRoOmNhbGMoMjY0KjFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLWFjY29yZGlvbi10aXRsZXttaW4td2lkdGg6aW5pdGlhbDttYXgtd2lkdGg6aW5pdGlhbDt3aWR0aDppbml0''@;'; put 'put ''aWFsO21hcmdpbi1sZWZ0OjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgp''@;'; put 'put ''ey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRv''@;'; put 'put ''bj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3Rl''@;'; put 'put ''cHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBl''@;'; put 'put ''ci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3Jt''@;'; put 'put ''cyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxheTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''MSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLWlu''@;'; put 'put ''Y29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3Rl''@;'; put 'put ''cC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAg''@;'; put 'put ''Y2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1l''@;'; put 'put ''cnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5n''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xp''@;'; put 'put ''bmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOmlu''@;'; put 'put ''aXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9c3Vj''@;'; put 'put ''Y2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNpcmNs''@;'; put 'put ''ZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2YXIo''@;'; put 'put ''LS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVs''@;'; put 'put ''aW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpLGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9LmNs''@;'; put 'put ''ci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2FsYygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9''@;'; put 'put ''LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOm5v''@;'; put 'put ''dCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTpsYXN0''@;'; put 'put ''LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtwYWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOi1tb3otZml0LWNvbnRlbnQ7bWluLXdpZHRoOmZpdC1jb250''@;'; put 'put ''ZW50fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGUWdBQk1BQUFBQW04QUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFB''@;'; put 'put ''QUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNhQUFBT2RqeStlamxIVTFWQ0FBQUpNQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxRQUFBQVRRQUFBR0JvUHF6clkyMWhjQUFBQ2FBQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTURBQUFBREFB''@;'; put 'put ''QUFBOEVZNEJqR1p3WjIwQUFBdzhBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbmdBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZ0FBQU5uTUFBR2dVeEZJZ04yaGxZV1FBQUVqMEFBQUFOZ0FBQURZTFlZZ1VhR2hsWVFBQVNTd0FBQUFoQUFBQUpBZDJCREpvYlhSNEFBQkpVQUFBQW9nQUFBVHV1''@;'; put 'put ''UEkvRkd4dlkyRUFBRXZZQUFBQ2NnQUFBbnFKYW5Cd2JXRjRjQUFBVGt3QUFBQWdBQUFBSUFLRUFlbHVZVzFsQUFCT2JBQUFBWUlBQUFOV0xkQ0U5WEJ2YzNRQUFFL3dBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFVNVFBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJVR0FBQUFBWUFBQUFHOW5oWW1B''@;'; put 'put ''QUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNCYkZiVkZmN091ZmUrdi8w''@;'; put 'put ''TFdFb0xDQjBEVWhreFRXV0VTVVZHaVdNRnNWUERtRUVIWmx1Y1k2MVE3QmpaaURGS0hacWw2WXpERHBFMHFBeU1Oc0JRc1NLeXBxdk9PVWRrWTZZaFlGd0h5RFltMDduRkNQTDJ2Zk4rNkY5b3QvR0ZqOE81OTkxN3p6bmY3Ym1GQU1oaU1oWkM1dFhXTFVZQlBEMklZemorSTFDNGhtODNyVVRw''@;'; put 'put ''aW04Mk5hQjhSY09LQnM0Ry9jbG9PaU5oeCsreUdJMEptR0llaHdyVXVZNTBORnBscTByVWlvZ2Z5ZkRWL0dLYytRSktMMEJRRzdlU0EyYWpCWjhpbG5GUUhvUHpaS3djUVJHRzhXUi9qN3ZqN1hGdmZCUkQvSWsvR0hMa3Q0TjYrN2gzL3YrUHh6OGRjb1gzaGh3WitqeC9qUGNPTWJJOTdvdjNK''@;'; put 'put ''YmpJMzh1L3Ywa3cyQjV4SzdPa21NaE1UMkcyUGtjb3FnaUhxd2lQNlVUQUY0Z0lNNGtNcmlFS01Jc29aRzVuczFKckNNSDkrQkZuUGtnRVpyeUYvaGNJd1l1RTRDVkNjWkR3K0FQaGNaUUkrRE1SNFRnUjRUMGl3bWtpZ3crSURNNFFoYXplcDF3dEpySlNMTVVvbEJJcElaZEtLWGtjSzV2bDJ0''@;'; put 'put ''T29rZ3ArY3lVaGR1NzB4R29uZG5aaWJ5Y09tRWNVb0pZb3hBSWlpMFZFRVJyeGZhNlFSQkpaSkpGRkV2QVRQTXI1YlVRaGZvWk5uUDhFZnM3NTI0a2k3Q1F5MkVVVTRCZEVCcnVKQWp4SFpQQThVWUE5UkNFNmlVTHNKN0xvSXJMb0pyTG9JYko0bFJEOG1oRExUb1IzaUNMOGlVanpvcFlYdGJ4''@;'; put 'put ''NHkwdXd2QVRMaTdlOGVNdUxsekV5aHZtNlhDNG5KemtLWExXS0dackNHbGV4dHROWjA1bk16Q3htcEJHcmNEZWE4RDJzWmkzdnh6bzA0d0ZtNFVGR3Y1TVJQY2RLdnNnS0htVGxqckppeDFtcDB6ekpHYnRaeGR5M05MbGZlcS9kdzlla2lYRVBwN3IyVVhldDhiOEdVYXVOREhZSExveWNTakRJ''@;'; put 'put ''bDZlSHZCdW56aXVlOS9wbzNCdzNYenlTM3JwNGM3eDUwSkcvMkRlS2N0T0VtQ1lVWHlNY2JpVThiaU1DbGhJUkZmRW81eVJxRUZPRG1ob1VIVVNFSFVSa2xSYXJ0RmlseFNvdFZsZkZNY0xoQk9Gd2tuQTRTd1NjSXlJWktTTloxMUV5aWx3bVplU2tvbUlWRlJrdjQ3bStvaEtYRVVVWVNRd3pw''@;'; put 'put ''WXNwWFUzcExxZjArVVMrMHIzRkUrWEZrekdsdTV6Uyt6WHVMU3B2VVdVc3F2TktUeldlcW5zdk1iU3VrMmk5YVZaekVTYktkUlpueHZUclRMK2FpemxSc2VZaVQ3U3NlZkhuSzlwWkZqSXlUYTdoN3NsUHIxcEd1SWoxdXBWeExXVWtiWXhrSXg1ak5FL2dTVHlGcll4b095UFp3ZHZZeWROMjha''@;'; put 'put ''UTlQTjB4MXVBa1QzYU9KeGpGM2Nad2wvRmNjWUxwV1RIQ09rcUpxYU9FdTlUUUVyTnIySW1PUkJQSWZjeC90NnlYRm5sRU5rcTdiSlZuWkpmc2tYM1NMYS9MQVRra2grVmRPU0duNUVQNVdNNnAxNndXNjJndDE4azZWYXQwaHM3U3VWcXJkYnBJbCtqdGVvZlc2eXBkby9mb09uMUlXM1dEYnRJ''@;'; put 'put ''dHVrMDdkTGQyNm43dDBUZjBMWDFiajJpZm50VDM5U1A5eE1GRmJwZ3JjV1BkQkZmaHJuVFQzTlZ1dHJ2T0xYQTN1c1h1TnZjTmQ2ZTd5elc1SDdoNzNRUHV4KzVoMStZMnV5ZmQwMjZIZTk3dGRWM3VOZmVtKzczcmRlKzRZKzZ2N2gvdTMrNnNWMS9nUi9oU1A4NVA5Rk44cFovdXEvMGNQODh2''@;'; put 'put ''OURmN1cveFMveTIvM0svMHEvMWFmNTlmNzF2OEkzNmpiL2RiL1ROK2w5L2o5L2x1LzdvLzRBLzV3LzVkZjhLZjhoLzZqLzI1NEVNMkZJZlJvVHhNRGxORFZaZ1Jab1c1b1RiVWhVVmhTYmc5M0JIcXc2cXdKdHdUMW9XSFFtdllFRGFGTFdGYjZBaTdRMmZZSDNyQ0crR3Q4SFk0RXZyQ3lmQisr''@;'; put 'put ''Q2g4RWlHS29tRzhIVTI2azl4c1BOKzR4bmhEd21nMGJqUFAybjUvam04d3JqUysxbmhsd2xwbTl2WEdjNHdybEQ5VDVRcmpxNHlyRTBhOWNidStURzR3ZjZYeGJQUDNHcDh4ejBUang0MG5HVWZHQzF3OStTbmpwc0ZaZjVVWFk0MzVMMkY4MlhpTGNXTS95N0kwZHJQdk1uN1ZlTU9sbkdiQTdF''@;'; put 'put ''djVldU1LN2ZwZnJNOE95RlhYWUl5NXhvOGIxL2N6czlkbDJmdnZuT2F6YTFDZWxNZE5lV2NlWU9mVnRObjhWNWcvMzU1dk9Xd3hlMWxlNXRNb0J0ZzJtcW9pMzU5bXRUcTFiVTZxbWJRNmFkU3BQbk4yenAvTWFUTzczYTA1cjk2Y3hnNmEzWlBZdVpxbUdWdWJVM0s0eUorZUljM2JBYlBYV28w''@;'; put 'put ''T0pmTmRxc0FiYks5ZW0yTTNJdFh0QUgrbDJXZHlOZHA1UWRYNS92UUdYWnVubWJRaStmWldzNytlK20yKzNRc3RNNy9wSWFlMFNYbjJIT1BJUEVQWmZ6UDdib3V1MXV3M3pjNWZ1U2IrSmJrcTNuOVJwZkozck03ZDdxNy9nd2ZPVkh6VzNxWGd1MnNxczVLOFRqMjdkaVc3WVBMQ2p2QjV2c1F5''@;'; put 'put ''bUlGcTlyQ2tjNDlnMy80aWUzclN1VWZhRzdYRU92Y28vbDYxa0gyb2ppakRUZXh6bzlucGJ1SHZQa3VJY3V2bG4ySFhXOGF1MWNpMzIwUjd2YzFrUjIvbmVsdlkrYjVpdmUrcjdINHZzME8rZ2dQNERsOTBwL0ZEZTFWdXhEOGw0REYyNHZIb3NKN2F5Zk9LWEdhL20wV1FlTDJwOEQ3Y1NWN1Bi''@;'; put 'put ''bGVFc2R5cmdoRk53OVU4OVhVODVZMVl6TkVYVEx1L016NXNiSGVHR3Uzbmc4YkxqYmNaOXhtZk5TN0NsN2pQY254WE1sSWdoWktWSWhrdUl5NDkwWDhBdGxLWFdBQUFBQUVBQUFBS0FCd0FIZ0FCUkVaTVZBQUlBQVFBQUFBQS8vOEFBQUFBQUFCNDJtTmdackpnbk1EQXlzREMxTVVVd2NEQTRB''@;'; put 'put ''MmhHZU1ZUkJqTmdIeWdGQnl3TXlDQlVPOXdQd1lIQmdYVlA4elMvNDBaR0ppUE1xb3FNREJNQnNreHNUS3RCMUlLREV3QXhsY0tOZ0FBQUhqYXRaTlpVSTVSSE1aLy83ZDlFU29VOWZiMmFkTkdvaFJGOXFYSXZwU3MyYkt2MlJyckVFTkZVc2llSktNWkUxTlR0aHZ1dURWampMN1BsVnZ1REIz''@;'; put 'put ''SFYwd3p6TGh5WnQ1ejNuUE9uT2VjZVo3ZkgzQ2g2d3RCZEk5VTZwazQ1NjVTck1jbGpNT05nWlJ3aXpydTBrZ1R6YlRRSmg0U0lJTWtUQVpMbkNSSnFxUkxwa3lWSE1tVFFpbVNFaVBWZUdXOGQ0a3lqNXV0NWhQemkrVnVCVnJCVnFobHM2S3NZVmE2ZGQvbUgvbE5LWDJIeFkwZTJvOXA0NW40''@;'; put 'put ''U244eHhTYXhraWdwa2lZWmtpWFpraXNGc2tFMmErMlh4bHV0ZmNoc01kdk56NVpoQlZoQlZvaFRlNmlWOWt0YmZWUXYxSFAxVkxXclZ2VklOYXVIcWtrMXFnWlZyK3JVTlZXcmFsUzFxbEtWcWtLVnFUT3FWSjNvZk5PWjFabjAvWk9qM0ZIZ3lIZkUyQWZhL2V3K2RpKzdtOTNvK05yeHVlUHdo''@;'; put 'put ''NUIzeVYxZS9hZm1ibmc3aytDUFd3U2orOC80aDBiWFNSZGNkWGJ1ZU9DSkY5NzQ0RXN2L09oTkgvcmlUd0NCOUtNL0F3Z2lXR2M4U0tjZWlrbVlUaVFjRzRPSklKSW9vb2xoQ0xIRUVVOENpUXhsR0VrTUo1a1JqQ1NGVkVhUlJqcWpHVU1HbVl6VnpHUXhuZ2xNWkJLVG1jSlVwakdkR1dTVHcw''@;'; put 'put ''eG1rY3RzNWpDWGVjeG5BUXRaeEdKTldoNzVMS1dBWlN4bmhYNy9EbmF5bTJJT2NaelRsRk5HQmVjNVJ5VlZWSE9SR2k1eGhjdlVjcFhyM05RVS9XVDBOZzJhcFh1YXBwOXRGYXUxSGRGczRHeTNOK3Raby90ZG5QanRWdUZmSEx4QVBadFoyV05sTFpza1JvOWIyTTR4N0Rna1hQTVpLVkc2QWlL''@;'; put 'put ''NG8zY2VvR21XQkYwUDhkMW5pcHhoeExLTnZXeGxIM3M0d0VGZFMvczV3bEc5ZFpoU1RuR1MxN3FhZXJGT3ZNUmJmTmdvZnBwL3p4K1F6YXJvZU5wallNQUNISUhRa3NHU2FUMERBOU51SmxZR2h2OGh6TkwvalpsMi8vL0NkSUJKOFArWC8zNGdQZ0RJUFEwaWVOcXRWbWwzMDBZVWxieGxJeHRa''@;'; put 'put ''YUZGTHgweWNwdEhJcEJTQ0FRTkJpdTFDdWpoYkswRnBwVGhKOXdXNjBYMWY4Szk1Y3RwejZEZCtXdThiMlNhQmhKNzIxQi8wN3N5N00yK2JlV015bENCajNhOEVRaXpkTllhV2x5aTNlczJuVXhiTkJPRzJhSzc3bENwRWYvVWF2VWFqSVRlc2ZKNk1nQXhQTHJZTTAvQkMxeUZUa1FpM0hVb3Bz''@;'; put 'put ''U25vWHAweTA5ZGFNMmEvVjJsVUtGZng4NVF1QkN2WC9iek1XMDFmVUwyT3FZWEFFbFJpVkFvQ0VTZnNhSk5tTU5VZUNacGovUnd6NzlWOUFXK2FrYUQrdWg5aVJyQ3VuOUU4by9uUUNvTWdzTWkwZzBDU1VmZTNnc0NodEJMWUoxT0k0Rm5XcS91VWxTN2xwSXM0QWpKRGh6Skt3aSt4R1djM1hN''@;'; put 'put ''RWE5dGhLUE9BdlNKVUdwV2Z6VUhxaUtab3dFTTlsQ3doeTJRL3JWclFTK0RMSUI0SVdWbjNvTEE2dGJkK2hyS0llejI0WnFTUlRPUXlsSzVGeDZVYVUydGdtc3dFRGxKMTFxRWNKZG5YQWE5ek5HQnVDZDZDRk1HQkt1S2hkN1ZXdG5nSERxN2l6K1c3dSs5VGVXdlFudTVnMlhQQVFkeWdxVFJs''@;'; put 'put ''eFhYUytESXR6U3NLQ2t4MHZVUjBaTFNZbUJnNVlUbE5ZWlZqM1E5dTk2SkRTQWJVRyt0TW90aVh6d1d6ZW9VRVZwMUlWMm93V0hScFNJQXBCaDd5cnZCeEF1Z0VOOG1nRm8wR01IQnJHTmlNNkpRSVphTUF1RFhtaGFJYUNocEEwaDBiVTBwb2ZaellYZ3lrYTNKSzNIUnBWUzh2KzBtb3lhZVV4''@;'; put 'put ''UDZibkQ2dllHUGJXL1hoNEdBV01YQnEyK2N6aUpMdnhJZjRNNGtQbUpDcVJMdFQ5bUpPSGFOMG02c3RtWi9NU3l6cllTdlM4QkZlQlp3SkVVb1AvTmN6dUxkVUJCWXdOWTB3aVd4NFpGMXVtYWVwYWpTa2pObEtWTlorR3BTc3FOSUREMXcvRG9TdENtUDl6ZE5RMGhnelhiWWJ4NFp4TmQyenJP''@;'; put 'put ''TkkwanRqR2JJY21WR3l5bkVTZVdSNVJjWnJsWXlyT3NIeGN4Vm1XUjFXY1kybXB1SWZsRXlydVpmbWtpdnRZUHFOa0orK1VDNUZoS1lwazN1QUw0dERzTHVWa1Yza3pVZHE3bE5OZDVhMUVlVXdaTkdqL2gvaWVRbnpINEpkQWZDenppSS9sY2NUSFVpSStsbE9JajJVQjhiR2NSbndzbjBaOExH''@;'; put 'put ''Y1FIMHVsUkZrZlUwZkI3R2dvUEhiQjA2WEUxVk44Vm91S0hKc2MzTUlUdUFBMWNVQVZaVlNTM0JFZnliQTQrcmx1YWMxSk9qRWJaODJKaW85R3hnRSt1enN6RDZ0UEtuRmErL3NjZUdibFlTTzRuZnNhNTNsajhnK0RmNHNYWlNrK2FVNXdjS2VRQUhpOHY4TzRGVkhKb2RPcWVLVHMwUHcvVVhH''@;'; put 'put ''Q0c2Q2ZRVTJNeVlJb2locmZmT1R5U3JOWmt6VzBDaDlQQkRvcjJzRzhhVTZNSTZVbHRLaEpHZ0V0ZzY1WjBEVHE4K3l0WmxFS1VXNWl2N043S2FLWTdFVVp6SUFwS09TbXNiRHM3NlJFV2xnN3FlbjAwY0RsUnRxTG5pdzFXMVp4aGIwSDcyUEl6U3g1TjFKZXVDa3A3VVdiVUtlOHlBSU91WkU5''@;'; put 'put ''dUNhQ1cyanZzb3BpU2xpb0lqNEliUVg3N1dORUppMHpneTZCSW1SeHNySVA3WW9kT2FLQ2RnTGZldElxNzl0QzdjOTE4aUF3bTUxdTUwR1drYUx6WFJYMWFuMVYxdGdvVjYvY1RSOEgwODZ3c2VZWFJSbFBMbnZmbmhUc1Y2Y0V1UUpHVjNhLzdrbng5anZXN1VwSlB0c1hkbm5pZFVvVjhsK0FC''@;'; put 'put ''MFB1bFBjaUdrV1JzMWlsRWMrdlczZ3lSVGtveGtWekhCZjAwaDd0aWxYZm8xM1lkKzJqVmx4V1ZMSWZaZEJWZE5adXdqYytYd2pxUUNvS1dxUWlWbmc2WkQ2Ym5acndzWlM0TEVYY3MyVFhSZlFkUENFZDRyODR4TFgvNjl4eUZOeWl5aEpkYU5jSnlRZHRIeXZvclNXN2s0Y3FSbWZ0dkd4bm9o''@;'; put 'put ''MUpOK2dhZ3A1SUxqaitYdUF1anhYcEZPN3o4d2ZNWDhGMjV2Z1luUWErcXVnTXhCTG5yWUlFaXlyZTBrNm1YbEI4aEdrSjhFWFZRck1DZUFuQVpQQ3lhcGw2cGc2Z1o1YVpVd0ZZWVE2RFZlWXdXR01PZzNXMWc2NTNHZWdWSUZPalY5V09tY3o1UU1sY3dEeVQwVFhtYVhTZGVScTl4anlOYnJC''@;'; put 'put ''TkQrQjF0c25nRGJiSklHU2JEQ0xtVkFFMm1NT2d3UndHbTh4aHNLWDljb0cydFYrTTN0UitNWHBMKzhYb2JlMFhvM2UwWDR6ZTFYNHhlay83eGVoOTVQaGN0NEFmNkJGZEJQd3dnWmNBUCtLazY5RUNSamZ4akxZNXR4TEluSTgxeDJ4elBzSGk4OTFkUDlVanZlS3pCUEtLenhQSTlOdllwMDM0''@;'; put 'put ''SW9GTStES0JUUGdLM0hKM3Y2LzFTTk8vU1NEVHYwMGcwNy9EeWpiaCt3UXk0WWNFTXVGSGNDOTA5L3RKanpUOTV3UXkvWmNFTXYxWHJHd1Rma3NnRTM1UElCUHVxSjIrVEtyelo5VzFxWGVMMGxQMTI1MTMyUGtiWlRPNkxBQUFBQUVBQWYvL0FBOTQyclY5Q1hoYlY1bm9PZWRLdXBJbDJiNWFM''@;'; put 'put ''Y3Vick5YV2FtdXp2TWpYUzd3dmNiekZTUnhuYzV5MEtWM1NsaTRocExRTkZBcVVBV1pZaHI0dTBLRk1TNUsyZEtIdEZDaFEycUhMREcrQWVjTUg1UTB6TEcvWUJqb3diWDA5L3puM1hsbTI3S2J3ZlMrMUpQdnFyUC81OStVVWxhSEZ0U1QrRk9kR0hLcEFkdVJDWHRTRTBpaUh1dEFRY29tTzNu''@;'; put 'put ''eG5lemFUYkE3NjZxdXJIRUtsUVVOUVdTS3M5UWdlM3A2MGUrM0p0RGVkVFBQc2s0ZGYxYWYwR2YyazM4Q1R0UHE3MG9aMXlDYlQrRlBTczdqclAzdDY3K3Z0dmUrKzNrYVBwN2UzOTBpdjU5YjdqalI2am5qdXUrOCt6NUVqdHc0TTNIZDBvT0ZGN21kOUhyOEhmbTQ2MWpndzREc0l2dzE0T25z''@;'; put 'put ''Ymo5elE1b3p2dlBMS0I2KzhjbWQ4eFJQM3dBOUNCRTJ2L1I2ZEkrZlkzdnhpSThJWUxTS0V5a2NSSWR5U0JuT2NreHZUYURRVm1uSy9VS25sbldGcmt2TTZBdWxVSnRucXNOdDAzdjNENW9URzdiWlpxNnV0NUp4a2VkRnRzN2pkRnBzYm9iVTFOSWdmeFdQa2s1V05xQXloU2c3ZUgwRjAzaUM4''@;'; put 'put ''WFFmenVsRTl1bUgwdkhmbmJqRlVvU05JeXhGTUVGNDJZb09oZkxTODBzenh2SDdSVkViMGVtRlVnd21wSUdOdU1VQWZzQytSbmo5YTJrOXB1Q0RXSVZSZlYxc0QwN2lyWFZWT1dMQlZLUHpqYThPWVQvSmUzcHRscjJ5U3ZaSThlL0gwUy95YnpJM21HMk50c2J2Z2RhMzUyc3c3emRjcGY5MWdm''@;'; put 'put ''dml1ekYzNGE5OU5Qd2IvMHQ5TlB3Ny8wdDhGU01iV0hpVVI4Z2ZrUVNFVVI1MWlMdWIzMWRWV3U1dzJzNm5NWU9hSURpT09qQ0RDa1pzUlJ2Z1dDbWEwQkhCeG9yR21wcVo0VTl4aEZ5eGEzaEgybFdQQWtYUU1CN01PcHhERDZWUWVad0ZaSEU0ZW5nbDEySTRjem5RNWZHVFNxVUJRSUpIVWtS''@;'; put 'put ''MWl6OGxvYU9meG93ZGE5K2JFS3haRHZwbm81ZStROW9zN09rYXdlV1owNnVhNU5OZmR5MmNqclRzcmNXWDFycUhrYkZyWDJXV2NiZlZHZU9sTjkrNUpYSk8yL1o0ZmJwV3lJNm1XRG9mMEpxeE5pK0pyLzBYK2xYd0pNTVVLcHhaSEhlaUYwZk5WY0hKaEk5YVdZYXpUNGhXa1EzcURUbjhNYVRS''@;'; put 'put ''b2lXQ0tTV1k0RW03SnhCT09xK0RHM0tQbmc5QWwvcFpkRURSbC9mZ2xFK1o1Snc5bm50eWlCeUhRbG5aRFcvZGFXQkFEaVVSRGc4MkdVS0lqMFo1Sk5jUWJZcUdBcmQ1V1YxMWx0UWlWc0pueVFEbHZEMXRrNENaYkFhYTJjdXpGU2V5MVVLQjZHM1YybXlPSk5uMmZ4K3ZmL2ZWQU1EUVlpUTdD''@;'; put 'put ''ZXhSL3FGTnE3cndtMXg2SnRMV0g4ZFJBS0RnWWxiK0t0ZEdIdVFoZWpFN0VXM1pHbzVPSmxva28zclU2aFQ4NGtNNE1EbVRUQTlMeDZFUkxZaUlXbll5M1RFWVRBNW4wSVAwSzlzZWhwclhma3hQa01ZQjlHUGhQWHV5SVIvMTFOVzZYMDRETE9GTFBrSXBpUGw0Q01uYU1hb3V3S2hKcGFJaWtJ''@;'; put 'put ''Nm1HY0VOenVGRUhtS1VONnJ5TmRFL1o0bzNCTjg1TTFxbmpuWWp1ekNudjBwSU5CT0hQT3B3a2lhVjlKenVQNU83eDFFWEdFNUhoOE54YzVzcElVeWFSdkZyNmRGZHQvVVJmcmprMGZqcC90bm1vbVQrdzNMS1F1MmtnT3VpTGpJVERJODM1VVovNFR2RkExZkhoYThqeDlsaE5WNmdoRzI3dVdq''@;'; put 'put ''MDNkOHRZMS82UTZBVmlBSDZCUGtFK2lVd29PbnJlQVloaXBDeUpuUzhHSktoRTlNOTUrQk12VXRJWlgzakU3aU93SFd1QkkxVmc3Mng1bFNBNHkva2cvbzlEM3NvcXArQTlsSUhXK2JVNUhDTlB3ZGk2aDAxYW5BZ3pOcFoxQXZuWW5Qem5MN25rc0hkdTRaeDMxNDl2dU9ISHUvMjd2MzdWRHk0''@;'; put 'put ''RVlDS2c1emxjcC9iVFFUOG5JN2FzRExEWXVZVTU3MkhvZk11RkgxejFkZWpIdXROK0hmZ200SDFmUXJOSUZMdjhHSlBKSGQyeFJwZE5xMGQ0RjlZaWJvVERXSU9SRnFNVkhkWnF5UkpGYU8wWTdHNFd6UXdQWmRKTndkb2FOMCt4RTFiYWpYbmdCbkJxUWZnam0rbkd3WUQ4VzdMVjZhakh3U0lJ''@;'; put 'put ''WkxMQUp0aHp1dzA2VldDSDA4RitaNzNoUHlkajNWODJHM1RlaW9aeXJjYk1hOHFjMFhBa1ppL1Q4R2F0eHRMczB4bk13S3owdXNwS0xtVFRhczA4VnlhRWRSR25JK3dvNDNpelR1TUlPWXc2dmRtQWJ6THJhMXFhYTh4VlBHZlNhNHk4V1JBc0ZpTnYxT2hOWEZsalRYTkxqZDVzMWp0YTQ2Wnly''@;'; put 'put ''c0hJbVhSYUUxOG1FR2dpbUhpVFZtZml5aHNzK25pclEyK21CNHY2MEhGU1RsTElpQUtBRXhvT2EyWUJsNEV6WUE0dEE3blRvOWZnY2NiREszVjhkUmg3cWZSTVV5bWFKT1hmekQvM1hQNmJPUDVOK2dzZGIzTHROSG9NN1VUbHlDa0M2YUpCRmFXQU1Id1dpajJBODQzcklvMmZESnF0SU5HY05m''@;'; put 'put ''V2g0OUVFRlczK3VscXhsWTdWaG42TE8zQU1xTEZLdEROa25GMUhScUdTb2FMSDdtbkRuTFNLWTExc1A4TWdZejhIOHh1cHRrQ2ZBSmZEMklucFFSdFJtWStEQXk2V3FFY1VhV29xU0ZLODlwdTFSL0hIeVU5aFhrRXNwNE9DNU1CWHl4TlNWb1VuQjZTN0I4aFAzM3daTWZuYUFiemlHSGtTMkZz''@;'; put 'put ''OWlvaE5nRmhzeHpKWHdDRFkyUUlxZ1o0cTZ5dnJxaHlNRCtwZ0lack5mSTZrVXpIc2JhUkVBZ3dBNDNjUERyNTdhdXIwNE9EcHFmekJUT1pnUG44b2t6bVVOKzI5WjJYbDdyMTc3MTVadVdkdjU5alp1ZG4zam82ZW5aczdPOFpnVUEzdmI0QzgxeUczV0FWSHlRRzhSbVN1alFFL3h3UXJBeDBm''@;'; put 'put ''ekNZRjc1TzMxRDZZRXNtQjJaYVRxMU9JOVcrQlRlbGhQeTdVTEFhTlpiQWR3QVpDUmhnNEdidWpDc3NpWWpKR2NQcUNHcjRxblBWVC9rVlh6d2NMSEs0Q3cvbTB3S24wTnUxb3VtSm5MSHI5Y09laDNOak10L0JKcWFudFgvS1hwcHA2QTVmN3hmN1VZcTd2MU5DRDhobUdBSjVhbUQrTXVzVk9k''@;'; put 'put ''elhNNVFPQ2hoWEFNa0NTUXdzQ2NvbmpORXVBb0xBWWtKZExsS2Fkakp6RHFObm45L2o5UE8rQ2s2YWNJOW5LV0dzWXA1MnRHWG1OT2o2WVVibXdBdnhYVGtXaXZxUDV4Rmo0ME55T2diRjl6Y09SekVKVGVQSDkrU1B0QTIyZFU1Mlg5SnA2MnB1VFdYOVBVNzYzRS9kMyt2TytkQ3AwS2pHWDd0''@;'; put 'put ''b2xsTS8yWmZlbUdENkU0QzBGOEM5RFpoUVZtMDBZVUhCRXA0VjlZQVQ2NmxFQUlST2xGWm94bzlGb05nSU5DNVpLdWw2L0o0aVRBdFZZdldrQjQ5dWt6eHZ3elBpbGw0clN6eDlzd3k5SXVZNEhmNFp2a003SzU5UUdjSExDUEExVTczRUFleE1xT2FKQkdFNEszcEdHQVlrc3lwSjdJNUFhVUgy''@;'; put 'put ''allBMlVBRWsrUDBwVmZLYUFsajkrVjZTNWVhVTlQaEdKVENRbVIxc04rSVBTUTN6ZlhPZHlaLzVFcjZrOUdZOGx3MlBSeUZBb1c0V1h1bDV2U1IvSTk2eTBNMWgwd2hyOWNKWnUwT043eFc0Z0lvNEVxb2hXUTBaMHdHSTBXazZ6Z2dwaWxJY0ZxdHlpcGdhaG1xYWFrSzhST2xkNy9RRTlLTVJJ''@;'; put 'put ''V1JMbElCVExuSHlBa2tzdGhqOHM2Z2Jva1NieGU0NTJkWjNvUFgxbThOVFlPMlo5bzNPNS9abnF5M3I5RTVIWVJMei9zTGx5M3hCK01IT3dPMytzNjhrN1YvN213SzdXNGFuYjUyenBidWxNZkx3NVB0dzAzclY3V1laekIyekV3T2lwWHF3QkdZSVpOVkUraEpudUR0b3ZhRGNjTEE5NzBoNDdN''@;'; put 'put ''SWlucEhmamw2VHZESk9ydWxwVzMwUDFpUlRBb1liQklRemo5WXM5TmgwQmJqdkNGd0ZCNFJwNkFBS0dzMkpjSXhLaGNJaDBSTnBUclRYaG1tWVpHaEVEWldPVWUyUTJxUlFLZkFxd2tGbUpVL2s3V0U0WVovbko1VDJ6dlozRDNjYzZPbzkxajdYM3p2WmMwZGMwRW8rTVJFQjdpSStFV25ZbFV0''@;'; put 'put ''T1J5SzUwWWxlTHFXVSsyN1hmN3BqTHBxWmpzWmxVYnRibTJOK1puVy9CdDN0eWZsOUhZMk9ITDVCcklOSUZYejRRNnZaaTdPME9CZkkrdE5YNTExWEMwUnYwWUQ4UTJMb1dDRmxMVm9BVU9OZ3Z4emxHaTZTRmV2Nk5EWFRIQWErZm5iOURQbjVRMFNuQ2RtSDZod0lCQzRYRk92UDgzS2FUNzJM''@;'; put 'put ''NHNJT2RmQXZEQXZMa3hwT1hzVUU2UTA5ZXhnRjVEMHltNE5kQmZzQ3lSczlIUVZOeVVxYk9WaXJJMXB0V3R0N2NWRkRCZDhDa1ZvcWZMNGdXa3draGs5UGtzRlF5UWFSVE5BMVZFSkV0aEpKTitjUjMxbGlwZExMV1NIT3FuQUo3ajhsYS9EcllleFd3RGg0SnlJUy9nQXdYTUg0Y2YrRjhNa3h4''@;'; put 'put ''TjRzV3NVU21BWGQxRCtzSTZGUFd0Tjl1eHZZc2ZrNjZBWi9GWFpsWDgwOC9uV2Y3N0VOZkplWDRYd0JiZWRRbzFsTWNwMlllMkU0Y21WVllQdUdvTGxCSk9UN2xFdlMvUHZ6M1VwcTkvaVYvWng3bUhFT0x4S3JPeWNHYzJTaE9hKzNhTVh3VzVueE95bjBhWm53MTh5cWQwNzMyZS93dHdJOHE1''@;'; put 'put ''RU5aTWVVd0dTbUx4SlROY3pEeDZTS1pReG0rRm1zMFRzMll5K1h5dWJ6K0tsOVFSeGVpeXMxMXJzNU11V0k1LzB6NzNxU3ZweWs3N3cvdk85dSttRXJ1YmU4eHErQzlXaHZzOERaMitwTHg1cE10TThuSXpwenhQVVdtTlYxblpPMTJiZ2U1RjNXakNWakwrVHJBQWFIUlEvUmNnNFZvOUowZFlH''@;'; put 'put ''ZHlJKzcxWndiMTJZTGNPR1EwRUEzSUFSM2x5cm95MEMzNXcwaGhkc0JFOUhwdUNUWW82S25OVmcvdG8yQmNhN0JoSHIzZFRrM1VOZ1NZNlEyY2Z1V2luYldBcVMxVUpuQkl1N0o5TDU3WHpTT2RqbDlpM1NjWHdNYXJFa1dFeEFseGZHZ0FnSkVQQkpvQ3ZrREF4THRMdEpuR1FMQ0lPbHNkenF5''@;'; put 'put ''VFp5WmM2MGJtbEd4bGRvR1hxdEhNenFPUEhVbmNmLzdZVlYrNTRzaURSNU5Uc1dpbnZtNjJKVDdjM0hPOHZYWFFZbTR2aTRUcTY5b0RpNS9adS96RmxmMTM3Y3NmemxyYTM5RWYzR01nN2VuNHprUlA2dXFqRHg2NS9DdFhIdnpzMHNSbEdiQkRFNUdKWlAvSnZwaTNWOXY2VCs2R1FIaWhkL1pq''@;'; put 'put ''OHl2bmx2ZCtackhHNC9ZM3ZMWThhaXRMNXpNTHFiWUJkdVlOOFBaMTRQczhTUEt3R0RKZ0FNd0lZQ0NncEFha09CV3JZRlJRalVxdjE1ZnB5MlFWdVFxa09NOU0ycUFSazZ4MDdlQUFqdE9mdy9mZmY4ODk1TnpxMUt2NGpIUUdnTDRmeGo4RzQxZUNwdFdJdXNSMjRQd3dndzZvRHVTamRobk9W''@;'; put 'put ''bkVROFZqV3hPbGM3bXFMNEttdmJuUTNWamtFbDhVVmFkQXpSWGlqQVBCZ3F1cUF6bU8zS3I4SSszRnJkaTZSakxmM3BSWTdwSy9oVU1mb2VOZFBmdE0zTjlmM0czSXVNdEdTSG5kV0w3Wmw1aEw0MXI1MHF1L1gwcVBqSFIxajBtOHBINkh5NndOQXA3VW9Kb2FyWGNZeWlpUWpLcnQyYkhCaHdZ''@;'; put 'put ''TmFWQlB3QjZnTFM3TisvbnpwbWVQc3ZRY08zTHM0Y0tZbEVyb2tOMzdMeE1RdDQ3bExRcEdXTXdNbU9MbWxldzltV3lOTmlhbjNUazYrYnlyUkhHMXBnM09oY0h1RTZWZDJaclVVd01RTWNnVk1KcVBOWXJTYjdJRUc2dHV4cWxnWnhsa0YvU2hFZm43SmZZdUw5MTN5ODUvUDN6WStmdHY4L2VU''@;'; put 'put ''YzdyOCtmUGd6dXp1RzM3TnIxMDNEcTg4eCtUOEo4OFZnUGlPS2l4R1ZLMUpkU3JNSW9xdThXQnRtVm9aUjluaUJhbVdsL0ZHUVgzZmc2NlQzNFRzbEQvNFJ1ZXExdkNSMWtYTmRoZkhUTUw0Qk5Za0JkWHpLNmRpb3Fvb0JYeGlRZ1k3TWVCNGIyY3ZHUFNYZDBvUC9uUTM2VlhWTWVsNTN3bmw1''@;'; put 'put ''VUZwc0JhMExjZldFYUxSTWlkZHFFRU11WmdNN3FDYktXQ3hvRzZBUkJyeXltZWNSTmhMdnBzTkxlL0VIc0xYbGp1RkZkb0REZDhBQlh0OGxIMkQ2Uk5OMzhHSHB2K001K1FqYkVsSDFDUDJlODZpdzU2c1lUSU9pVDFGWGwwRkhwdnVsZnFrS3RCbVdtTzRXWGtsNEoxZUowcUlvNG5zcE9lRnV1''@;'; put 'put ''bTNwSmR3cWo0cyt6SHlzVnVyQVdMZDVaSE1SREo1SlVhUzlxSjBFc3VjWmFDdFFMR0xtQmNOb3BpeVRKUTZReWNuQUxxQkttMThEM1lzMFpWZ0dKYk1IVHpaRW5YdGJ3djBCRWF3elUzY3lIczFGZHJiaWY1UmlmWmQwd2h6N1lLZ3IyRDRieEZxRFhrdVlkTVBNODhiSm5sT3J4U0xMMDZTQWt3''@;'; put 'put ''YWdDUkJkKzBSODZhejBLazVOUzcrN0d0WXJuUVNkK3pucC9YamsxRXNNZnYwd0xvRnh0VlFuWll1bW96RTZrRUduUlZwQm9JdjJBNTRrQlVLa1hyRUxVRzcxUTZ3L3BhRmZySytMMzJKZE5rRmRsd0dNRXE5Z2dCUFlMMklkMW9taTlMcjBPbDJXRGYvSDZoUUpzczkvVnNmOVM0YkxkYUtiSjZS''@;'; put 'put ''a1ZFdGhWQXpMOHNwalBnNGpEdEZqZVlJTXduaURxMDlRL2t0eCtIZi9QK3hxbWVuc3YvdkFnYnYzajk4OE1YSHp1SXk0Q3NzNWVPL1MwbWNQZGs2OWIzTHl2Vk15M2pKNVFISDJJT3pOQkh3SExHTllCWkFxaDZtYlpOMlJEMXNzTjlzc1pudTVYUWcwNktnVDMxUGdQWGF2eXBhRlNWdzljR1ZQ''@;'; put 'put ''ejVVRC8wZkVGZk1uVHN5L1RNNjFIYzZESEpOd3g4emc0S3owZkRFTWJHQlY1c1FNOWF0cmlRN01QT2FCNURDSGg5Zk5wMkxmdHQxdUQ5bURzVUNRTW1HUTVFNStnelNHRlpGc01PdmNKSXJKN3lKTlkwMDc0MWQyTGFvd1dwdTRwdW02Qmw4QlNManEya1J2WWtjZ1hBQ1c5UDM4Y3VKWThGQ3FH''@;'; put 'put ''RnhGOENxSDlZRDhKTlFCcDVxbXk2Q0tLT3hOSVhlZnp5TUlWc3A3WUxWV2J4QnNZSUZCVHB0VVlFWU9YamIvNk1qRHo0a01kRkxzWlFZMmZNdlY1Ukw4WStEN05JV2M3RWQ4alVUSVV5aEk1WlhEVHUxaVFyVktGVlRVeVZza3I0SW80SXY0S0tnb2pTc3FTaUNvUW11ZCt6bWNDazc5OHYzcDBK''@;'; put 'put ''RmIweE5OZTQ5ZWZWbkhTczh0SjBMaDQ5bllVTk9lbzFkZW1Uc3hZc3lsV285NE83MlpyaXIzOUhoMlQvSlFhM1BjMitWcmFYTzVkKy9NTGlSbFBoZ0ZHQTB6SFVQMjFSVE1TdG01b3FqYTJBdDJwUmVveGYwclV2TXJFY3pLTG9XTzV3QS96a0ovTy9LSWRZcERIK1BpcmRtUnplYXpxYUtZOHEy''@;'; put 'put ''TkxBelhuaGtVc3d6enhNRXpVNmFSVzJid0o2V1Z2dU1kSGNmNzZHOHp0NHpJYTFYMUlSMmRTOHZzWU9DYUNzT1V1UTZvL0RMWG9Yd00rQWI1dXZRUEEvQ0RUZGhFdVM2ODdpSUhZQ3cvbUVrYVJrc3dWaG5sKzhBb2FGaUppWEcyZWVBVWxrb3RsYUpKTjZZL25OZUl2ZjZoYnp3eitKV3ZELzI4''@;'; put 'put ''NXh2ZjdJSGhuaUw5N0RWRmRxOStYbDRueUZCeU0rTnR3QnNOT2hnYWpwNnluL0pSTE9PYXhXSVJLRnhobFRDa2dZMk9UMkhkNUk5K05JbDU2YjhuZi9UcUpKNlg3c2MrNlFkNEh1K0dkNTg4dGdYR1BnTmo2MUd0V0szamdBZ0xERTd4QkZnRTZnbFF4b1FqQzBtLzJQblRuMDlJLzY4UFYrRy9r''@;'; put 'put ''ajRQb3gyWGZrYkhhb2V4UkZYdVUzaXV1OWtLdm9XQ204MGlzQlZuWlJjRENQOTIvSUMwRjc4aFRlTUxxNjhuU1hkWGN2V3JzdXlmV3ZzZ2JpTS9mSnRXWEJJUUMxNVRQejEzN3Fma2g2MnJWdXA3WFh0ajdWRjgxelkrVUE1MFcrMEFYcEpkb0JpMXdIeFZoZmxrLzl3eW9tb1o5ZGZTK2RENmZF''@;'; put 'put ''NWcrbWw0dGNCMFArMGh2Mng5OHh3ZFBvTS9neCtVY2V1QzdraS82QUR1enJ5V01EUDE0RjZ0ZUZndTZGQy9OUW5zZ2ZkK0wzTlgrMDAzNTBBSy9lclZWK21hcGJWM2tsMXI1Mkc2QmpiR05qNWpPZ1FQQUNSa1p2V0JuVG41WEx1SmlONGtMME5mSit0cmdwNUQ4TTNWRmhESDhxeFpwN2U3OThZ''@;'; put 'put ''cytVckZoMlgrMWdyNnd5K0lnS29CNDNhSzQxV1kwemhCSUFpZ3hkZlZham1kVmtQTldLMk9hR1Z2SmRYaVhZeFdSdlZZcDFPVkxqZVltTzZBMisrcGg1RmNQci9YYWdBNElZY2RBRlhzNm1LMkViVndMYUIrcWVFd2ZQcEUzbjBpdSt1U3pHTDd4TkxBem9GcDEvNEYxeVhsczVNOXV5YzZpSERO''@;'; put 'put ''UWVrYnV5S3RlMGRhSnlMMTlyNTlzV1NyNU02M1RWZjN0Q2E3NUpnMHlZTjhzWUFGMGkxMlZwUVJyWWJ4eWNyUmdsdkd4WFNvRGM0NXF4VWhhNlBWNDNaQlQyRGJtNXh6UVlwVFFyRlBUaFc5SHp1Uno1L283VDVjbjgvWEgrNE96U1FTTThuMGRDdzJuU2JDNEkxalk2Y0dPOVBMNUVucDM5S2RV''@;'; put 'put ''azNib2M3T2cyM1U3WDB3QzJlVUFIai9CdUM5dFEzaTJ0NEdjYnlsRGZMYkd3WUhieGhLTHZyRDdxRmdkbDg2dlM4YkduYUgvZnRUcHFGM2pZeWNHZ3I1bW1zYmNnYzdPZzdsUEhYTi9pWjY5aG1BbTJjZGJnTEg0RWFoeFFESFZHdmxySG5tejFNVTdHSzRXUUplZ2NJTkt3ZTl2a3FCYkpiTEhn''@;'; put 'put ''cXVYaFY0TnpHSUpSbjB5Sk9yTzViVG5ZT254c1p1Qk9CaDkrcFZXUXF4VE52QnpzNUQxRjRDdUJFZndNMko2cWlWQ1R5R0kwd1FFMDVEbGd2TGM0M3FpdlNIcWlxRXF1cXFhdDNWOEpjRERBTzZVcDhNc1dJdHdsTkhra1RIZTJDeCtNZ0JkN0RoK3ZiKzZ3WjNYTE5qN0IwZDBxZzJNNXVhdUxR''@;'; put 'put ''TVg2czdNQm4xMVRaN28wT254a1p2SEJ5K2RTRTkzNEwvZG5ubjFCRkdmeUFQOEJSNUJhVFZIckdzQXV1MGxSanB5SWpzREtsQk9wMTJDVFNHS21ad28wWFFmbVRIRzh0UXFBWmxWd2QwdGxMNjVZSlk1dld5MkJYUHUyVmU1Nlg4aHptR21QTllaMy9zMWx2ek16UDlxVlNrd1JHbzloRnRUa3Jo''@;'; put 'put ''YitjRzIwYzhNVWV6UjZiMStOb01xUUVZMGxqOGtMaWpycExvdElvZkUyZ1pHSjZPckZENmhvbEJzYUZ1R1ZmQm1XbEZZdzBnTytWd09JeFFIL0Q3ZlpUR3NhQ1FDN01xTWh1OG1ZQUY2UklzcU9tK2NxanpTbDlOdzJMTHdyRzZGYkgzMHE2dVMzdDdqdGJkT3B0SXpLYVQwL0g0ZEpKb3BkYmVs''@;'; put 'put ''ZlpBZld1dForL2svblM3ZU1YQWppdkVYUHFRdENjeGx3WDd2bVV1RGRCbmNCK0h0ejhBSHR0cHBNSWkrN1laRG9PeXhyeHRyaUp6REZRSndlYTFVZnVUMGpxQVVuSFhDQXE1NDhzV1d2SVQrZWhJT0orM0w3WVJvWFZQVG5vRTkvZE1CM3FEMG1OQTE2K0ZNd3llM2ZEK2NmSVZrTkVWMUFJc3VG''@;'; put 'put ''T3I2TUVKbzZvMVhWRnVOakYzcVhhVHU1UUhFYkxiNWJKWTRBVzhoRnppc2dqVjFZTEZ0Yno2Qm95Lzl0VGFCUG9JRzk5TmNiNEMrSEk1MXNCcGFZdG00amlHSnhyZ2NocU5XelBHWExSdVU3WFRZUlhZckh5SmsxWTVLcVk4NmJ3enlncmVFYTBvTS9zRnR6ZmZuMXBmeXBzL01mQnBMZDlVVHpL''@;'; put 'put ''ckw3UU5NM2dEU3dEcWV4Skc5NG9OQmczUUc2ZXlXN29hVlQ4UnJFemFZeXJvR0M4RjJGYi9ZT0xMeS9rOGJwckNWZExQZm5YMGZRRE9XaHlWNVJjOW52ZkR1S3JkVzFsaTk0NEJsSUJWeUcyNUlPQ3lGNlhFbG9acTJlN1ZhZ1ZHWExvbE1BWjFPdGVvaHNiOTVIUDNva2F2WVBWYXZUWURVRkhS''@;'; put 'put ''MGVzMi9KSzB5M2dMNytTKzZWaCtxRTJjeWcvU3Q3eDFLdDArWjYvYzMxbUVFaFA1OVUraUhXdUtkNlpBSkJWd1V0aUVrOEtmZ1pQMnQ0R1QybG1Ha2dxZkhJUjVOOW1icm92YW00NjN0amRmT3pVOGZHcHc4TWJoNFJzSE00dlo3R0ltUzkrenBwRjNEUTJkb2hJRzVFeXUvWEF1ZDZpOS9WQ3Uv''@;'; put 'put ''VkM3dko1cDREbDVXRStKYkJhS1pmTzZXS1lBc3VLTHltWVZNSCtXYkpaK1RTNHNsOGhtS2c5blFCNEtXOGhEb1VnZXJvdkNVWmt2YmljUGhZdHh3cmVRaDlyVlNTeXNDOFJsS2JSQkhtSTBEZmkxQUdzMTBTdzhPVHFyNHRlNkpnSENRN0RKT3JjbGs3UVhNT3B2VGd5MDcwMENHYjdTazR0UHA2''@;'; put 'put ''VWZFZTBsMUk0RDNlUnBHRE93cGIzcDJteHZCcERmRnk2Mk56UEY1cVpEa1V6VTJpVHMyTDU5VmRTemJ5RTkyRGV3ZnpJKzFSby8wRnkvYzZTbHIydG5kakRjTXBzeU5mbGl2UzMrWU5UdTdzczA5L3JyM1ltV3FLK3hxVnJ3NWNMaC9vRE1JL3l3eGlueVVaRG5jVEhpeERxMmI4TGRURmtpV2FU''@;'; put 'put ''T1U0Q0JUcWRxQUV4dVdodXA0UFRMZXFpZzVIMEFSNkp1L0V3V1Q5bGFxMVA5TXpQNTk3ekhWMjJwTjlvcmhaRjJQSlA3MElkeTBnT2VabE1aNDAwdzczOFJyVXpQSE0wdUdkRUNkNkd6VWYwSVVlSkNhcEtHSGRtOU5pL3pjUmJwUlpUZHlsYTVnUCtMa25HYlN0UnczRzhBQlFOUjR6SHBLVWJV''@;'; put 'put ''ZUZqZUwralZ4RWEwYWg2RWFxbXB1b0ZnWVJhRlZUWXQzVHNlZjJ6SHExa1FuaVA0VVNwRE1MQTl4Rm1oZjZtTktyeTFqZXJ0dmUwdk1oOTVmKytEK1E5K0tBOGpUdUNINkd2MURYeS9ORit3cGZFZllXeVdkMVBHYTdDR3NqbHE2Y0RZSENseWdJS3RTdkhFQXhhUE5aaDBacE84RlorNzk5N2hi''@;'; put 'put ''MzFsK05PZkhuN211ZTkvSCt0WFgzeHhWZm9qSGJkdWJZeTRZRnlCd3Rxb0o3QmtqTUVBVm9ZdW9LR2JVenliRnB1WG9hR01oZDJZWTdzb3gveGhmMld0dDdhcHZQNWYrNS81VXQrdnFzYXlqd2paQ3Flcmo1aWxMdnpzNnBPZFdTenZCZGduZmdubTNNYU9GZDdhanMzZ1B1bFpmSWYwRkI2UWpy''@;'; put 'put ''WGdUM2EwU0NzZGJOencyaDY4bHp3QkhBVmc1R0p5b0JMam9VYVdWUVFONWhXQ3hXaFNjRkF4cDRuaExnenNQMDExS1pxOTZTd25kcWNjRk9GcEdKekhwbGwvSXRzVzk4K09hRHZ5THV6ekI3ellsZS9RM2hucVQzOHdGVzJKcFc3UDlBZjFjWDFOb3ZtT2VOWmt6aVErSEU3VTZPTXd5MlZyajZL''@;'; put 'put ''N3Q3R0pxWVM5TEpWU2tvS28vMmtQM3MvV0hoTDllbWJMQ21CUk5tSTh1SjVXdDBSQk5VbXpaUWx2Q3p0QmJBVGxnSDZXeHVxemRhUVdBOWJiRzNYd0NTY1NZeXNPQkh4c3hTT3ovbmhiTmdFN2VTY3NOdnpoZU5ac3lzYnZhS2FMMVFmN003ZW5ZaTNSMUFmVC9TSDkyaHJxd2MzNE5QNkN3R1B6''@;'; put 'put ''bWlUOUVoa3VJUHk0OUVzV0phYXladGZhSFBvaUVWUjlqSzJPQ2p6WHFKcERZaVVsK2hqVGllUmtMdEFPa2g5VjRxbStZWE9DQ0dyOGRIVUgvcFVxWHg4RisyMGMxUUJsQVpkc3FLOXhWemx0VnJPMlRGYUMxQlJkV1hsbVBFaW9sdEdGaHN1OTZSaFJjM0xwV2RLa1hIckdQckNYZ0R2amwyWmpZ''@;'; put 'put ''djVJTG5ja0w4YW1HOE5WK1VadmQxVll1bW0rcjIrK0ljUjE5eHJIcnVydHZXclVLSFp4UVU5emRUMG56V3NhcXB1dlBpbmd1NFdUY3U1VUZoWWFZWEd1UGxHRW82VkpHb2ludVo0OEh0WmlBa3lUSjh6bHk1UjhtcTNCODBWdTkxcFVLOWo4UHREZnFLcmt0M3ZTV1pZdHQ5SDhyTVUweDRkRUpH''@;'; put 'put ''TkhMZ2N5ZE1kSlY3eHlJUWVjK3NVWHU3cnE2MTdNM2Q1L29sTk1SV050MGFuazdia1hOL2llSE5RVGJNUElnTUgyUUR6TE5qaXF3d1RVRkEzaGxzdFlXcmFjWCtTd1d5MXFDbmFsa1NaaHMzUjR1NXJFQnk5RzhQaTJoMTU1NVpVK2VEMzBSK3F0d3YyNVBibnJyb00zZkNsMVdiSHo2eWQ3OEJ4''@;'; put 'put ''NWdPVkJ0REl2U1pBbUNnSXlNOGZsa3BhandNS1RXMlE2VUFkS3NTTGRXdlQ3dnFvcW9kSlZKWnhUUHNrZSt1bXFwTC9MbjRDL1laVEdYOFovVjltSXcxcFV5ZUV3ZWxMeDI4emlhOGpadCtQem9ma0szVGdqdlVET3RyeGRuNCtUOXo3UmR6WkxYcTQ0SS9PNjROcExnTVBuNExSQmYwZFVmQ0p5''@;'; put 'put ''bW9yTzkxQXh4dHgyekcwYllGSUJLenBNQjFWcHFQL1cyTCtTYXp2YzlkdjBqV2tjYnRtZHkrMXVXYTBuWDF6ZEplZGkvZ1I5Q25jQTBPcEVkeEdYSUpSOVRCWWxNR2FLb0xkWVhjMU1rSis0clBURDZsTDhXV3NpZW8xbVFhSnIyZDRxblRiQVphc0J4SmVlOG1ld3JFMWdXVGVBT2czeVdITUZ6''@;'; put 'put ''YllBcnIyeXpsZ1AwR0YydWtVUGF3S1lkWHE3TmdzaXpTVjFJWmZWNS9OUndVMUJ4NkxSekxaVnRCdnF1d0xobFVtK0ZHd0xWY1VxTGJVK1I1M2RhaXV2OUNTcU5QcW92OFlYcXpBSEtSSllqY0pFRHJPYWhoU2MrN1BzM0NNOFBmY0llbHJKeHhqQi84ejRsUSsxaTluR0txZEpRK1R3QWtGMHJR''@;'; put 'put ''d2haUVlHMHVjQVVrU2V6K3QyMmEwRnZFVEZMRXhKanFKdUlaMnFmUUt6d1NHRnIzbTJ5Q0ZaNTNQU21TMnlTTmdlbU4rY3U3NnlFZFpLODNUNjBFZlJGNUQrQXNIbjVUU2RMZG9jeDg1dDJweFUyMkFlZlhHYk5pdUZObVoweHpadDVncHpIVVdmazl1UXpXMitVUmpIaUw2OXNZMmNIOEU5eEdq''@;'; put 'put ''QmdnYkZmb0h5SWliMTlRZ0RGOUxET2VnMXl3WmdrTHBGMENzVmY3WlcxcHlZR1dXcHRFRHZDb1ZCR1lGallqVmlucVpKRktBaGdDVmhVeVBuMG12N1IvRHRSQ2Q1ZnFhRTBHbENSWmYwRHZ3UjZYS2t4TDFGbHFlUVFhK0w3a3c2R05Ed09qZGdhalVObWJrcUFJL0xNZUcwQ3ZwSGFDeUt3MWZB''@;'; put 'put ''RzlLOFEvVXlPVVlSOEhURnBBTHBkd0RXN1NZMHljWkdNM05vSDRRMXA5OXVKMXB2RTl2UWlUdDFzVjVpZUhNSG1nMUZqbXpSRDQzUnRCeGp3TjhNMUdjRkE2b0dwR1VGVnZuRFpncVVaZWhXcmxDeWVHMVB1VVpmdTVrOHErWS9QcjlWamtZOHkzbnhScXB0MHgvNXpKNlNwQTJLVHl5SGd1RjNT''@;'; put 'put ''S0dCOXpOOHdrVjR1Ym5OY2ZUd05tMU9xbTJBQm03Y3BzMWNZWnlqNkNxNXpUcCtyMUV0N2NOc3JvaThuclU3dGhvSFZ4YTFPWTVzbTl1cy9RTEdlWTJ0SnlLdlorMXZTOXI4TzdUNUkxdVBQTTdSdFhzMnJnZG9xUm5lWG1DeDBscWF6YnRSMDFqVVl4b29OUlNwR2hVVjhGRmJVY05LcmV6UXpR''@;'; put 'put ''d3lwMnpkMEdmR1UxSlFqWHlncXlRUDVpdCtUazU0R1JsUlUxNitnLyt4a1BhQ3UvTzRkZlYyT2ZubEQzbFdpZ1J3WURGOXhsTmFGSjd5aVJKWXNUZzFnMVdyY3I2UGxmQ2R6VzJPNDl3MmJVNnFiZUI4WDltbXpVcWhqUms5dEUyYnVjSmNSOUZ6bS9nWFJydlFYK0t2RVIwSUE5M0RlcG9iQ1Vw''@;'; put 'put ''bEVFZ2ttSFZtblRoemUrUjIrZWVEWVR5aC9uYjc3V0drNXZQK2p1WEkrMUNjMWdkRndyVTFMb2ZKb0djK0dwYTJvN2c5SEhMNFJGY1VQdkg3L1hGL0xHZ05XbGtHdHByVkdnQWJMMXVVTDVma2tjT0pGVEpGY2tnYVUrL0hNNmtEZCs5dnZ6U1dIcDZMWjRBMjIwOUUwOE96cS84Vzh1TlQvdmtZ''@;'; put 'put ''MENnK2NmTkV5Q2ZkQW4rUm1uZnZXUHJzd1lDMzYxRExtUjFBbmZRMzZUc3JJZnh3VFQwUXFmVDlxZmROWm84MlNlTTE5UXgyTEtiTXpxbE5PY3NuU3M1N2M1dmo2UDl1MCthazJnYk84Z3ZidEprcmpITVUzYjJaVm1XOWw4M1ZxY3oxOU1aeE51VWF4QmozaEhQUUx1dXdFdVVvRksyQjVLbHcy''@;'; put 'put ''Q3FjbFU0aDRLbms1UWhvc2loRHcxL0kwT2o1NTVJTWpWTXNSYVB0cG1kbUJnZG5wQmRrbVRQRGNuR2VCUnB1RVdOR1VNS1pHZ0lDaDF0UkV5NlpXeHN2NnVSMFFhdlA0L2RFdkN3a1VaSzdIY2JwOVlJRmxYRlQvK3BNZWw4dXR5L1ZHbW5yU2UzSjdoa0k3d2pOOWUzbzZCaWZiRytmRklrNU9a''@;'; put 'put ''MUlUQ2RUTTFYdS9kbjBmRXVIcnp2WU1kb3hrbTRiSGMrdFNnQkhPVjc1TXNDeEgyUXZRWDJYeS9TOThUa0g4UDFFMGZQbjFmYVlQMURjL3VuQ2MzTnY4Zk1IQ3VNZm5TOTZ6cmtMN1kxVU93TWFndWZjWGFERFJVSEw2MEhIeE9VYWdKM0hEVXFDSGV0SkR1dktES0I0OGpvdERhT1c2VWpaQ3RJ''@;'; put 'put ''akhhL1hMWnNOUk0wR2RvMldHMDBjRlliVXR3TzBsVTdIWWdpbGU5SmlaM3NzRlV1MkpHQ0NpTlhuOWZsOS9nb0F1UnJFa3ROVFM2S3JzZ043VTJnTDBWeHpOZVpLWHBYalhIM1hldXV1R2RwN2FYSG9kZkNBdzN0NVQwbnNTN3BsSWtwRHNwUDljaFJzb0tOallHRnNQU2JibGMza2kyTmkwa3g0''@;'; put 'put ''TkJxbzdtbE5kY280bGxnVFdld3pneTZJN2tUYzA2RFJhdXhZcDAyQldxOHJxUFdxWHVQbjRTdUNkVmVnNGhUN1FsQ0tucU1icWJwSmdEWFc2a0JwZnN2V29yZTBJYlVFMEpGQ2V3MnRBZ1hKQk12TXlBcUpucThPYS81RVJZUVcwV1dTK0hDSkl0SnphZGRXa2RyR3VVUjVpUUdSMDQ5ZXM2TWtl''@;'; put 'put ''TnNZMGpSaWlwTnlUSlRpL0pCTUN6Zkl1THJ4T2FXRmU0dWVQNisyeC95bHhlMGZLSXh6OUJCN3ZrWlp3MjFzbkpmazhUOGd0eDhGZ0JtTG5oK3ZrTnYvRzN6OGhvMy9ranorZmZMekg4UEg3OWo0Y3Z1am4xbXZxMmdsZncvYVFoVHRFYTJWekt0YUMrb0FhQU0ycTZVTUQ4bDU1dzdWQlMxc3lB''@;'; put 'put ''NXppemFhcHNGaHNsTDhHQ3k1dXJxNmFGMGs0QXY0YWQ2c0twa0tpVkFCS2lEcFNkSnM3czFlZWZ4UGkrS1Z3OE5YOVhTZDZEL1dGejU4eW5td1B0c1ZEQjl5amxUTXhtT3piWm5aZUdJdVF5eGZPTER6OUVEdnRhUERKM3RtWnVhenFYQzFyN3JHRzBsNVZsOUk3bXR2MjVOSzdzbTE3MDBCdk9S''@;'; put 'put ''WUVPVTFVekt2R1ZtSCt5Q0Q0eTUyVG4zb3ZWcytQNDdPRnoxL1hua084TDJ1ZUp5bkM4L05lNHFmUDZBK1IwY3ZsM2xXSHpwTnlra2Q4NU81MFNHNXdMcUdWaXRRMXd2UzhGaXIwUjdXcVVGR0Z5MmtiVVJJcDVhRXFPMjBXczA4a0kxMmlYV1lYQkFkekNCeVYxYURjRktkYkhwcW9SWUhQY0V1''@;'; put 'put ''S2k1cXdBN0ZNdjBwTGIvNGpsck84RFhWSkozTlgxaXZZdUFLOFMwbldHN05yQVlKTFB0UXNOcmxOT3EwR2ozR1drNEpoS3duTUd6V1hEd2VUN09ueVc4SldqWm9Mc1dLQzlOYm5GaU93bWtVclFXNFprTncrTWJCNmY2RzRXNXZhUGpVNEs3QmhtRlJPdG1DVGFsOGRqR0w4V0xXNVpSZVMrYnh4''@;'; put 'put ''L2VuaHQ0MTB1SWZEaHhJRFowYWFRMk1TbS9tY1h1Zy9WRHV1KzJIYzRHQkd1azVQNXlSSEZlZ1o3MWJwakdGSmpjK3B6andzYUxuejZ2dE1iK3Z1UDBEaFhHT1RzdlBaVjg2SFdlZk1zN0hpK0p5Rjh1WitiUGljc0tmSDVmalZyWkltaW5heHdQS1BtQi9NNmpJeGs4VS9BREhGTDIrV0krV1pm''@;'; put 'put ''clpna3cvTmxMY2QyL0JQMkJROUxiU3ZoY0tjdDh3TGZPdWhyVnB6Z3E2bWhOVlUvaTVzSTdUWTRLZElGRzRFWkF4aUJvL1I1a096UzZYR0ZXMUtDdE5TNm1xcnFyMkNZTGc4RkRab2xXOE45bWdYSFFoUytqV3JKRndWbTlMdk1NdTlCY3FNR29hUGJVTjFoL2NmLzhkdGJtRXM4bjBLVmFOMGVp''@;'; put 'put ''dWJiRGpIYXdtZytaMFRaTWMwRWd6aUxCRmNRL1ZTTnlZS2lROGlVVU5uSjdYWTYyK21TWkJVNldFMXhPK1VJbnFvdXVzQUN0TnIxZGpuRW93RGRZZERvY3o0WFRBWndVMUpPUXBBeU85c1BMME5tcUlYVkEzRXloSytDSTV1aTIzb3lUcDYvQUplWDgvVjVPLzZDN2RVV1BmeHV3dm1oREd0dnlS''@;'; put 'put ''UWhhWWFpOTlnT25ZQVVYSC9rT0pyaTduWDFGNkdGRG80Wk5GZlUrcWZiRWVQYk5OMytlVnZnVHJENjdibG8rd3ZrR2w3ODBsZUVSenJiNUdub1EyZzZ4TkJXanhGbVNBTm85ekZ0b0kyaWoyTTJEb3U1R2FuM1VJYUxRYXZoa1EreXdhWXREVGFrc3RUWnpXb21VNG1zcENCWlhDNTZqam5QRTlK''@;'; put 'put ''eGx6dTkzTjdxWWdqWUFHdklycjNGdVNwNlVXd3FQTjRlbERQUnZpMCtmUDUzdldVSEdRZW5UMVMwVkpXMzhiNisxZGZXUkRtTHJneDBnVS9CakhZTmxid0JYMGo3TUYvZVBZTE5yS0I0TEwwUGUyNmF2cUxoeTBVZXBkZ0Fab3ZVc045ZXBWZ293UU1LM1hWVE5KS1lMemk0am5GWWNlWlhjVm8w''@;'; put 'put ''eVlBUUZZV1gxeERhb1JiRjZhMFMxUVhGZnJZTHdxUmp0bDVNOFdGY1pNeXVoYlE5RzdSbnEyVUNYRGtEVU11QnlxWWNVdE5JNTBtT1d6MFJ0ZnpvaFd2dy80YnprR3hSUTBHaDRFcndhMFlBK3R1VU02RUxRNnpUS04wYWdIclZ6OXdCSVFHSmxhcVlqMnEwMFpBUERoclhyUWJMSktkbVZNek9X''@;'; put 'put ''MUJ2eGVMdzN4YURadVNGZVNIQ2RydEx5YUkzZDlZWk1HVzltbVRMa1dzQ3RzWXVCdkZLT2hzbGJadWNOR2l0UG13SUp3ZU12dzkxankzQlkrTWYwV1BySE4rcXRla1pXc1Rvang4V2FGano5YjBsZk9mYU44ZkVUbTR5dEtYK25YdE1aSTdndjRVMEdNVEVkaTdUbnFsSXFoUERvc0hvaldFejFm''@;'; put 'put ''NWFTR09LMkRSME5HNmh6bTlKb1ZnNm9vbFFQMTZYUUNkV3N5TkpMamprdHkzREVlcCs2dWVEN2VsVTFYeENwaTRTYXZwNmJhYnFWdXJ5cVRxaVRScTFSa3ZjajVKK2JWWWJlcnhsc1hNQWhPcCtXWGJ5dkZicStudXJvdDZnaUg2T1VuYzI4MzN3NzArZjhOK0ZYR2FGcjJCUjViKzNpSnYvQmxh''@;'; put 'put ''S05sTkMzci9NZnVVSElHMXFiUkQ0RXVyVFRPVGlXbVZZNnpxMlhvRkdTcXZQR0JmR1RwMXFxVUFkMUNKYjRmVXV5cnRvc3l3VkV4VVIweGtic1ZVY2hrOU5vYk1OY1RMTmJub1RlcTJHMUV3M213WExaZk9ESlZXYXdvRUFrTEVqZlVnUlhpcURCdm1VSm5WUmZrcE9VLzZwSVdxTlZXVlZVNVNa''@;'; put 'put ''Zm1kVnZ5OWZMaTFGaWdVTFhxZ0hYV3QraDUvTWZWTjVTRkFnN1NTczIvV3ZldEFnL2pOL21HV000ZDJHTGFRbTZjVUpJYk41clAwendTR0c4ZjRQUVZJRWNhQVhjWlR1TnZ5WFliUE9jWXJrOG96MjlqejFrZEZwT2JjVVZ1bHBYUUQ0QUVsM08zUXB0SnBZMEZQU3EzZVZSdEk5ZHpQYW1PQStO''@;'; put 'put ''ZnhXUWNMcEp4ZEp3d2F6T3B0TGx1WXhzNWo1WjBBWTZZYVFhYnlWaG1BTTJlMHhPMXNtMVRrWmdabWUyRklqRStUWkVrYStjRjBpWDE3dGtqZnVRalhWMjRMaWJHOEpUMHlxZzRLa21va0t1TFdRNWpnMWhyTE9OMVZLanFsZXE1U3FVWXhNNHVlOEU4YUxYS3dCaFA1Y2ZIODFQNFFMUDBBbmFH''@;'; put 'put ''eEJBK0lqM1pYT3hqdmw3MU1RT01mbFVDUjlrV2ZGbXhCYW4rY1pmY0Y4N21MOW1adFNobjgzdTV2ZlJybWtlb3RvZm45eFhOZGJMZ3o5YkRhV3c5MS9NRnUxTi9EQlg1bFJNRnYvSXg5T1VTZlVXMnM4NFdiTWRqaDlCVy9tOWNqdjZ4Sk82MjBYNGx1UHkwckRPbmdMRStDK2RxQVl1L1hjd1dx''@;'; put 'put ''bEQxcEZDR2FxRGxkbXFlRFRNMmFxMDFEaHRMckpNRnNXczl2S2F5UXhwaFcxZGIvTElvWHYySC9mY2NPSERQZmhLWFBEdmxnSThpakhkL2V2L1MzZnU3Vmw4ZzJZbGJKeWZlUGFUWWxkd2JMSjgwaWRyUmxEamh4SG9kZGQweHJRRTR2VmF2V1RZWmlFNG5WMVc2Um8xOEdVZDFlc1ZsbDByNXdJ''@;'; put 'put ''cEl0YWR5Mll3djZXdU5OTk9VVTZzdjRQT2JZZEViSFhicmZMeEl5RFpzNHVoSWxyWmNoK3lwRzdxaDBmdXVrVUdXaHpuOExxL251cUdDekpXT0ZXVms0ak1iY3RYSGUzc201QnpOOFc1eFRCYSt4V21hYXY2NklvTVBzck5OSy9qN1RBbGV5SG1IOUd4blpkL1BtS0tyQWY0ZVpQaWJWdkQwQ2Jr''@;'; put 'put ''OTRPOEN3OTlaNWJteGFLNlQ2bHlBdisvZGNxNzlESDluWmZ5MXlYT3h1amkyem95eXpydEtjRi9PWmFUcm5KUFhxY1JXWTJzaXE2a1QwUnVpTTluYVVLL1I2ZDAwNmw1ZENhS2RwbGhyRlA5amRHTmNGZlRGSlJEc0R0a2cwdUt0QTZ1eFRZSFZpL2VpM3N2NDVrRHB4YnJKUWQ4dFFxdGJkSlJq''@;'; put 'put ''cXlaZnhFZFRHNndXQTVnQlB0azl1VTEwRlYrOGVwQkUwa2QyVkd3VmFCMjhQckY5VGVITjg2bVNlR3RPMnhaL2l5cERscGNxc3J6VVBKeFpUV3RMZloxR3kyK01oV3RHM0tEeERtOFpFT2Q1M1JLaXllQm8zWmR4MFlENFJUdHRHUkMvU0s5dEErS2wvWlNBdUM4Y2Vuc0JjWHl4QkZ6ODlLR1JM''@;'; put 'put ''UVBqaWFYQXRsbTVvN3UwalNXbkZhemZQazIzbUQ1UHF2UUp0SDFzRy9wOFhxVlByTThxdGFSQW43U1cxSU1lRnUxVmNMVElhUWFKWUtLWFo0MTRzRVk5NUNhRWFJcnBGU3hFUlU1UlI1V2FvTUYwT1VMd0FaRGticXdlVmpQdG9FSGM2YmZSUXd4dWFrd0xBZ2src3FrUGl4VFE0bjVHV1BTTTJJ''@;'; put 'put ''MVRXNTRRdGJ0cCtTdWV0VzV4Q2pWbHRDWTJ0Z25XZlVVMXNuNmdBWnIzSEVmUGlhNG1yT2VhN2NTZ2o5b0lNWlJFVGlKSXE5SGVYSVpwYlkvaENoQmVBRjVhMmNOeG1rV2RYTjlURWtDSnJ2ZlJHOGpwaTNVQ2NHN1pYZ21tRkhYaktKQXMwQzJPNGl3YjJ3bkFvcTZJYlNJcXVEUkQyOGt3SHdk''@;'; put 'put ''S2NEZVNYYy9hYm1qd1Yyd1JRQmxNRm1keXg2cDBmamtuaTlVc014ek5Lamo2emhJY3Bibm1QMkM2NnJ5c3E1S21FbjFXanYwbUNySGZZK2hqcGJvejg4MmVMZmhtancyZ29yanhOd3F4WlNQNlZrbmNtUFZsY1VmWjMydThBVzBWdXdZOTdQTmI5UVdMditCYnh1VkxTS20zbm1iMTFuN1VJYlk1''@;'; put 'put ''Z0NXVnc4bUM2TVBjaUhKN2hYcEhLblA3cmh0RjBNUHZxL0w2ZmZKZEZyTFhmSk0zWkZOOU5qazdlR2JLcktzcWVBeXFEbHl0VkdxVGM2d3VHMXNhRkJlQnY5cnh5UlBGZGRzczczNmE3QUM3aDYzVkFMYWlIbXM1UDZhM0VpbkovdFJmV1VpL0wzWlgrbWhOVGNoREk5UWIvWlFiYy9IWGJVcXlR''@;'; put 'put ''M1pMRnFmbTU5Y05USGZVT0xBNVNiOWd4akY4b2ZYZ0RLZmE1VndCUEZXQ0MzSStQdVY3ZTVnK3hLUHZGZVVIbkZUekErRDVyU1Y5WlIvNDg2b1BIUE9McUtqdlhDRzM0Q2c2VllJTHJFNmI0VXVYb2pNOVZESytuQU5QOFdWUjFwa1VYSlA3enFsOXdUNzk3alo5SDFENlVqL2NuVVY5VHhiNjZ0''@;'; put 'put ''RU4yL1I5WHAwWDYzc1puckw2dDF2aDdDdW9yNEJtNWRLNkJlWXJFTmF2TjNFenhLeEE1VloydllsdVUzV2J2cWlxN2FITnBXeHkvaXdlSWMrL3pacHRKNjNaL2x6WHNmVFV6alI1L3JiRnhhM0hLTlJwRUhRejBNN1ZTcFdHTWtZMnlYdTcwenVuMHNlNnlQT0xpN2NwWTR6ancrUUN2VzJSamRG''@;'; put 'put ''STh3WTAxTkZWbWtKclJpWS9WMGhJVnZiTHpJdjd4K3BDam14dGJkWVJxaDFySXVOMWRTRzcwMmtQMWRiTGMreEJkekIvU0lETjhaYjV1WnV6bmVjVjc4YTZOME91Z1lSMW16azN5NmR1WTZQU1lqNmFVYnlpeFJ6RzNIeWg4SXg3VzFuVnhmY2szOWpaR1E3RHE5cm5xM2I1L1M0eUx2OGQ3bXp5''@;'; put 'put ''dStTSGNwN3dORnBGTmlTZ2RyYUN1TXJQYUtVa0F5R3RjZ0Q1UHMrNEdVZS9tWlFyUjN3T2paSlpyZHp0VytUY3ZhSEQ2MjRwT0hRZlpKNGJtK0xKbGUrZEpWMzRESGthZHQ3TDVzM2FBSVo2NXMreVlqd0VRcERWZUJDTVZ0ak5CZk5xY1RmaEpwbVM1d0JScUZVUUExSE5UYjE0bE9yWWRCSDBh''@;'; put 'put ''Z3R6dlV0d21FT21aajRSdExQZmcyYjZPK216V0N2S2gvaHNwL29wbjBjM2ZwemxnL09vbXEycVFndllPRVN0MUt1dGxrSWV1WlAzK3BYRWNKenRQWnNoTDFmYzlHR1dJSTdYNXFSZnJ6MjhkajhxUno0MmdxdDhpMm9WWDJFc2Z1Tmx1RitRZlpBMlY0MzNEZG0zeVB5TUJmNTR2Y29mVVIvT2JN''@;'; put 'put ''TWZYMWI1SStwRFR4WHgxdlcreC9HWEw5cjNPQmFMK3M0VitoN0ZReVg4VWU3N1FLSHZVZXEzWlBjVEx0QTRRbkVNNHMwMVdRZDRjMDNSQVJKcnU2a3ZYL1pMc3piZmZGT1NZenR2U2tvYjJiKzlVaGpIREx4dWEvLzIwd1gvdG5rY2JaazcxcmVGanJFeHprdFEzd25sZmxYMG44U0FveGUvZi9n''@;'; put 'put ''ZnBEaU9kcWg5dVBhMzBZY2piMHBxbjJIOGJYU0IzQWs0MC9vd29NdlFwc3U0WFpzdTQ1YXJoaFlla2JISXFqcTlaU0Y5Z1Y2blhHMm4xeW1UVytsOXloYTNmSjh5aFNQK0ZucU1mQXFnVUlHb0xHQTFRR1NrVUFNRTY4QW4yVHBxVWZzanRlVkVYWXFaRmRheisrTFpZcXdieWo0NHh2NFdIdlZW''@;'; put 'put ''K1N6c1JwR05LM0p1dThCLzNXYXRydEoxNCt2SXB5cUQ4cnJaK3I4SzY3Y1UxazlSU3QwSXZYUHJjZHlOUC8ybjFWSDhyNzYrZUx5M04vNjQvQkh2ay9GbkdQQXFoSFlDYmdpQUcxNTQveXJEY1FIZkRBMTRlaysvWm5mUlBmM2RhQlJtK3cvNXJ2NldDcXd0bDYvUjEyT2RDWmNaZFdYRlYrOWJ6''@;'; put 'put ''UmJPYU9TV0JFTWxyeW0rc1Q5OWtZN3M5bjI1TjA5N2M4cTkvYmt0KzIxeGMzOUpYekEwTW1Oam9xamU0RDgyUHphM2E2YzRLbzRNOUNlNkUvbTJ6SmEzK2R2K2pOdjhHemI5N1N0cTI1RDVrMi82eDhPRHdjSWYwaFBxdmY5MzUvN1Uvd0hBbHY4emdQWC9LUUM5VnlpTjF2RGYwZHNtSHRaaW5B''@;'; put 'put ''aDNZeWZBTG5CdjVoT2Z5THorZGROalQ1aVZPNTNTb0dRcjdUaldMcGgxOHRGUGZDTDkyYy8yUHZHWTZldmZZTExpWjhxZGluRTBLWTdWdUlsR0IrTFBpT25OdUJvcUNqWGNzZ0dUTW95Tk5BKzhrUGx2d2thajZ1bGd0bUVzRW01dUVpeCtzUGtFcTk5TWZWU0ZlenFDWUJCUzB3SSs4cVNRYktl''@;'; put 'put ''am1VUUFaQ2Q4MFBqWGkvS1ZpMk8zTFR2MlRYSzZYWWRjUjI0WlZoTCtaejdreGNQU1oza05YcExPMTM5MFQ0SmR3OWg3Y2lqbmRIcnFjMzJYZHJKcy93TVR1VnB2dFMwM2UwS1c3emhPeXZGbHdBZDFENE5DbDJCY1Q3NHA5ako2Unl4VGRFRFY0WUFyZXdRUDRWWlg2WXZ4b1NUQXBVNnBKZGQv''@;'; put 'put ''eVdVMWEwbGlpMHRTU292QzY5NnFLUHlONVcxcndvSE81VGxCQnVDRUVsdDRnTkcvL1B5Qzhudzk5aWsvZjc3d25MKzYrUGtENm5OMDlOTGk1K3ZqOTRGYXRmNzhiS0g5c2YxSWdjRTB1UXhnUUdNRitpODFlYTBZWUZCaWlxbVFXTGZEQXB0aGNwbHNseFVEUnJITC9yTUlQb3FOTmxjRUlzVTgr''@;'; put 'put ''NHNOV1FucmE2WjJ0YndYc0wzL29tZ3ZUeGRnWXA2VDVTaE4rL2tJdTV0Q3hZV2s0SjFXcnFPZzM2L053UGZhMHUrMXE1UG9md0FQZm54NUFBQUJBQUFBQVFBQXRDY0F3bDhQUFBVQUh3UG9BQUFBQU5QQm5ZWUFBQUFBMUw2bTlmOVcvdThFV0FQRkFBQUFDQUFDQUFBQUFBQUFlTnBqWUdSZ1lE''@;'; put 'put ''NzY3ellEQTB2SC83RC9rMWtpR0lBaXlJRFJHZ0NsaGdhdkFBQUFlTnFObEUxb0UxRVVoYys3azVVTHdUOFVCU2xxRWx1YnBLMmhEYVkwbEJSYmJVclNqbllSYWtXaEN4ZGFZclc2RnRHNkV4RVhYZmtEVXZjdUJiSHVSTWdtdU5LSytFTVVXbHhrSVMwNG52dWFxWFhTZ29IRE56TzViOTY3NTUx''@;'; put 'put ''NXBvWXo0TThNVVFjb0E5ZmNSNzg4UkZUT0krN3NRRUllb0JrZjBXL0cwRVBGelF6U01veXNBZkptQ2lrczRvUzU2LzJVSjBpYkl2YktTYlJMRHc3TEJGVkFTczZoVzA1elRBRkp2YmIxSE11NkxuMFBtVE0xN0hOS2FKVXZhSkpIR0pjNTF0YklDZFlWcVNydlh5R1BCVjd2NGh3M01TYUgwT2NN''@;'; put 'put ''c0laMVRwVC8zMERlOGhacnVIYVpSa3plWTFUZkdXcEdXSjRoSXZld1hhN2ptTG1BWWE1NWhXdzNuOUVwQmUrM1NTTWpYZWlRSzNCbE45cklUbkhSeHA3RE1ra2ZzaGhDQlJtODlWN0lOZ3ppSFhMT0ZITDZYSzdaZWxmSG1LdjBjQkV4TThseFdmNmZZRzlKSEpROTdHMEErMFZZY3dkSHpGWmNK''@;'; put 'put ''T1BtSlhycCs0aWRzMGhQdUVZeml6Nnp4SnJueU5oMWpTT0tEL1E4eWZzbEpPblhxbGNieVBsT3FuL3EzVHBod1N1cmYrUVA2cHV6QlMyK2QwSEpUb3hZcW4vcnBmN1JaK25BS2V2VkJuTEtwUGJpL2l0VXZEZjBiNUQ4U24yU1M4eUY3MTFRbWd0bDF2cjdWK3FmK3F6VWZuWE9JTFYzbmQrbjVv''@;'; put 'put ''ajdZdnU5elQxVlAzUk5tMUd6cHZ0ZEo3MnFjTDNxWFJPNVFoN1hQbXdHbVFQTm9XWmhqV2NSTmhIdXZjNnIvUVZvZldWdmExeEdNdFRDZVpsYnpVNERtV1hOVXdPbjZ4bnpxZnVqSG0xQy9RWnNEblVQMWIvNnQ2QjVERkl6em14bXJCNHo4MlV5UjNWVHI1bkRYM3dHYjlSL1o1QU5udGJuWkc3''@;'; put 'put ''aFZGZlBHeXhUVHdIcFJjcTVqQlRQQkhzdW1IbHlucHlsdnlWZTgxd0t6U0JoV2hHaFlqTG5WVzArSEk0dDRlaC9pWm1CK3dlYlAvVU1lTnBOd2wxSUdnRUFBR0R6djFOUE8vVzY4KzY2WCs5dWV1ZWRkeEVSRVRKRVFpUWtZa2owRU5GRFJFUVBRMEpreEFqcElYeUlpQmdqSW1TRWhJd1lJU042''@;'; put 'put ''a0JnUnd3ZUpIaVFpSWlRaWVoZ1NNbVRzWlEvait3d0d3L0kvZTRaeUQ5S3pib3diVDR3UEpvTUpOMVZOZDJhcm1USy9OVStiRDh3MWk5RXlaOW14UEZxVDFpWHJveTFwMjdFZDJzNXM5N2FPUGRXYjZNMzIvZ1FnSUFua2dCTFFkbENPSWNlQ1k5dnh6WEhudERvbm5Cdk9sb3R6cmJwMlhYVlhH''@;'; put 'put ''MlRBTkpnRkQ4QnpzQWwyM1FQdVVmYzdkOVVEZXFZOFpVKzNMOVZYN1d0REhMUUNmWWFPdlVidm1MZmd2ZkZwdmhsZnhmZms1LzBKLzN2L3ZyOEpXK0VKZUI0K2drL2hsLzVZZjdHL2pqZ1JCQmxDMHNnSHBJVGFVUis2aU9iUklycVBIcVBuNkhXQUNqd0gvbUFlak1FR3NRU1d3UmF4UEhhSjNX''@;'; put 'put ''QXZ1QUdIY0E0ZndxZndHbjZGdC9BT0FSQTRNVTFVaU8vRUQ2SkIzQkpQeE92QUpqbEl4c2dVbVNIbnlSVXlUMjZRMjVTZDhsRVVKVkhEVkp4S1V4VWFwaGs2UW8vUUNYcVNMdE1uOUFWOVJiZm9YMHlNT1dYcVRKTjVaam9zd09Jc3h4YllYYmJFbnJBMUR1SStjVWRjbGJ2a3Jybjc0RXJ3WTdB''@;'; put 'put ''WVBPY1JQc1RIK0JTZjRSZjVQRi9rOS9rRzN4VkFJU0R3Z2liRWhiUXdKeXdMYThLbTBCUm54R1V4SnhiRUxiRWtmaFZyWXYzTllXZ3R0QlhhQzRmQ2pmQkQrRld5U3o2Smx6UXBMcVdsTDFKWEJ1V0FMTW5EY2xLZWtSZmtuRnlRZCtXU2ZDMTNJb0ZJS3BLTlZDTnRaVXlaVlRhVlBhV3NuQ29Y''@;'; put 'put ''U2xOcEtSMFZVSEZWVkVmVXhIOW0xWnhhVWMraVFKU0pqa2N6MFl3Mm9jMXBXZTFCYSt0R2ZWUWYxNmYwV1gxSlg5WFg5WVorcXovcHZ3ZUJ2MHRBdlNvQUFBQUJBQUFCUEFCWUFBb0FQd0FFQUFJQUtBQTVBSXNBQUFDREFSWUFBd0FCZU5xRmtzMU93a0FVaGM4VUpJREdLREV1R2hkOUFmbFRJ''@;'; put 'put ''ZXBTdzBaUUl3bzdFaEFFSWxBdHhZVFg4Q24wVGZ4NUFkMjRkdTNhaFlmaHRxREJrRWs3Mzh5NTk5eTUwd0tJNFFNQnFHQUV3Q0dmTVN0WVhJM1p3RExxd2dGazRBZ0hrY1NEOEFKTXZBbUhtUHNsSEVaYXhZUWpNSlhudVlodFZSRmVRa25kQzY5Z1RYMEtyeUtxdm9XZnNHNkVoSitSTkRhRVh4''@;'; put 'put ''QTI4c0t2aUJyblkzNFB3RFFxT0lDTkd3eDU0amFhYU1IbHlSNzVwSG55RkR1eFVLTnFNYTZsWS9ya0l1Y3VzL3JNN1NHT0Fock1jN1NUalk1RTVYM0hNK3BOREtoVUdaVmlSbEtQZlZ6Z0NHVWNrMlo1YkU1NXpLdGgvYWxTNHNwaFRGdWYwWnFxT3E5U2lYVEoyV2JNcVBNVDVqYzRqL0xxMUty''@;'; put 'put ''a1UrcERYZC9sM3Y5M00vSnp1ZHBEZ3VQdWw3T3RmYnUrYTV5YXpiV1gwNWVzSmxXWHV3TitDUzhtd2RtcjJkVmRUbW9tWm5ZNGEyL1NjNWxxRFZjNjMvVnZxeUIzbDlPcXhaSFJXcFluUzJHWDd5M3MrUDlLRnRlTWEyaC9SKzQ5NXpzV2Njc08ybFFjeG5SK0FHaWlndmNBQUhqYWJaTlhiQnhW''@;'; put 'put ''RklhLzM3RjMzVFpPNzcxWHgxNzN4Q2t1YThleFl5Y3VjZXpFU2NhN1kyZnhlaGZHdTNGc3VnUUNIa0R3d2pQbENSQzlDaVI0UUtKWDBYc0gwWG1rQisvY0NWNGs3c044L3htZDg1OHo5OTRoQzNlZEcyQWUvN05VbTM2UXhReXl5Y0dIbjF6eXlLZUFRZ0xNcEloWnpHWU9jNmZxNTdPQWhTeGlN''@;'; put 'put ''VXRZeWpLV3M0S1ZyR0kxYTFqTE90YXpnWTFzWWpOYjJNbzJ0bFBNRGtvb0pVZ1o1VlJRU1JYVjFMQ1RYZFN5bXozc1pSOTExTk5BSXlHYWFHWS9MUnlnbFRZTzBrNEhoemhNSjExMDA4TVJlamxLSC8wYzR6Z0RuT0FrcDdDNG5hdTRtcHU1Z1R0NG4rdTVscWY1bUR1NWpidDVubWU1aDBIQzNF''@;'; put 'put ''aUVGN0Y1amhkNGxaZDRtVmY0bGlIZTREVmU1MTZHK1lXYmVKczNlWXZUZk0rUFhNY0ZSQmxobEJoeGJpSEJSVnlJd3hncGtweGhuTzg0eXlRVFhNeWxYTUpqM01ybFhNWVZYTWtQL01Uanl0SU1aU3RIUHZuNWk3ODVKNVNyUE9WTEtsQ2hBcHFwSXMzU2JNM2hWMzdUWE0zVGZDM1FRaTNpZDk3''@;'; put 'put ''UllpM1JVaTNUY3EzZ2M3N1FTcTNTYXEzUldxM1RlbTNRUm0zaVB1N1habTNSVm0zVGRoVnJoMHI0Z3ovNWtxOVVxcURLVks0S1ZhcEsxYXJSVHUxU3JYWnJqL1pxSDArb1R2VnFVQ05mODQxQ3ZNdG5mTUNIZk1TbnZNY25hbEt6OXF0RkI5U3FOaDFVdXpwMFNJZlZxUzUxcTBkSDFNc0RQTWdq''@;'; put 'put ''UE1wRFBNdzEzS1dqUE1PVFBLVStmbGEvanVtNEJuUkNKM1ZLbGdZVlZrUzJodngxbzFiWVNjVDlscUd2YnRDeHo5Zyt5NFcvTGpHY2lOc2pmc3ZRMXhpMjBra1JnOGFwQ2l2cEQza1d0bUYrS0pKSVd1R3dIVS9tMi85S2Y4aXpzajJya1BHd1hSUTJoeE9qbzVaSkxSek9DUHd0bm52VVk0dm5F''@;'; put 'put ''elVzYk0yc0hNa0lmRzFXT0pXMGZUR0ROdE12WnRCdVhzWmRGTFpuZXNRelBkcE5ldHlGdjhPYklXRVk2RGlkaWc5YlRtbzBacVdTZ1VSbTVPczBIUnpUb1RPemc1UFpvZE4wY0F5NlROV1lDMzhxSGkwcHJReDZMUE4xbTZTa21hYkhteVpsbU5QalJPUERPYW4wTTlEem44bFNtWkcveDl2QmxH''@;'; put 'put ''RkJiempxaEZPalF6SDdiTUY0aHU3TDBCUFQydGR2WnB4MGtkOC9mZHFUMDZlZG5qaFlWdVd5TEZqcDZ4MTJyS2xyTlc3UWF4ekdYZVQxUnFLMlk0OUZ4L0xHejZ0MFhXbW92dHBqamNjR2o0MitQbU0wNFNMOU5saFNFdlJZNXJIY1k0WEhTc05nVTNZbzVTVGNvS0twSWNjcXRtTEpmTXVkeFVq''@;'; put 'put ''MzdxZGxrVFg5MmVrNFlKMGYwQ1M2M2RPeXdQdDlqRGI3bXRaNVZ2bzBUSEl5R291NHliblcyTlFlUld3bkwySjc2aCszWmJjaEFBQUFlTnBqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4blluVFpKTWpKb2dSaWJlVGdZT1NBc01UWXdpOE5wRjdNREF5TURKNURONmJTTEFjcG1abkRa''@;'; put 'put ''cU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT2JqWU9UUjJzSDR2M1VEUys5R0pnYVh6YXdwYkF3dUxnRCtIQ1ZnQUFBQUFBRlltUFozQUFBPSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGVWtBQk1BQUFBQXBRZ0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNYQUFBT2RqNThmRXhIVTFWQ0FBQUpMQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxNQUFBQVRRQUFBR0JvUUt6elkyMWhjQUFBQ1p3QUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUNBQUFBREFBQUFBOEVhd0JwR1p3WjIwQUFB''@;'; put 'put ''dzRBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFblFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZkFBQU40d0FBSEc0LzdIR0RHaGxZV1FBQUVvSUFBQUFOZ0FBQURZTFpZZ1NhR2hsWVFBQVNrQUFBQUFoQUFBQUpBZDZCQ0JvYlhSNEFBQktaQUFBQW9ZQUFBVGFxMU0rVld4dlkyRUFBRXpzQUFB''@;'; put 'put ''Q2N3QUFBbnBON2pMbWJXRjRjQUFBVDJBQUFBQWdBQUFBSUFLRUFwRnVZVzFsQUFCUGdBQUFBWEVBQUFNUUkreDRZWEJ2YzNRQUFGRDBBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWSmdBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWSEFBQUFBWUFBQUFHOW5kWW1BQUFBQUVBQUFBQTFGRzFhZ0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNOYkpiVkZYN091ZmUrMzlldmdLV1VINkVnSVZnYjB4Ukdt''@;'; put 'put ''QWl5YVJoVVJ5cVNqaWthWnZiam5JUHgxMkV6RnVmNGNXZ1dVaGVIREFscEVQa3gyZ0NpWWtYR3VvWXh4ellDeWd4aFlGd0h5QlltMCtsQ1JIbjN2T2Y5c0MvUWJ1TUpENGR6NzN2dlBlYzh0K2NXQXFDQUVaZ0ttVnhYUHdONWVIb1F4M0Q4UjZCd2M3N2RPQThWYzcvUk9BZVZjK2ZNbmNQWm9E''@;'; put 'put ''OFpUV2NrN1BoZEFRTXdERlhtY1JpSmV0ZWFqa1lMYkZXSm1oSHhJK205aUY4TU5sOUF4V2NRMU1YTjVJQ0pXSWxQRWN0Z0tJL0JlVEpJanFFVXZYaXlmOFFkOFpiNFNId2NQZnlKMys5eDVQZmRlanU1ZC9iL0orT2Y5N2pDdXoyTzlIeWVQOFc3ZWhqWkVuZkd1eE5jNWovQ3Y3OUwwTjBlY1RP''@;'; put 'put ''enBCak9URmN4VzljUmlsckNZUlRoTVlZSStEd1JZUnlSdzNnaWp3bEVDWE03a1pWcUlnUkw4UlBPZkpRSXpQaEsrbDhtQks4UWdsY0p4U0hDNDAzQzR6Z1I4RmNpd2traXdydEVoTE5FRHU4VE9ad25TbGk5VDdsYVRCU2tUTXBRSXVWU1RxNlFDdkpnVnJiQXRVZFRKU1A1emZXRTJMblRFNnVk''@;'; put 'put ''Mk5tSnZaMDRZREtSUngxUmd0dUlBaHFJVXN6SGcxd2hpU1N5U0NLTEpPQnhQTW41cTRrUy9BSnJPZjlwYk9MOExVUXB0aEU1YkNmeWVJSElZUWVSeDR0RURpOFJlZXdrU3RCR2xHQVBVVUE3VVVBSFVjQmVvb0RmRUlMZkVtTFppZkEyVVlxL0VHbGUxUEtpbGhkdmVRbVdsMkI1OFpZWGIzbnhN''@;'; put 'put ''bEFHTWw5WHk5WGtKRWVCcTlZeVExV3NjUzFyTzRZMUhjZk1UR0JHNW1NQkZxSVIzOGNpMW5JcGxtRTVIbUVXSG1YMDJ4alJpNnprSzZ6Z0lWYnVPQ3Qya3BVNnk1T2N0NXRWeG4wcmt2dWxEOXM5M0NlTmpMczMxYldidW11T1ArcEdyVGJTM1IzNGJPUk1nbTYrUE52ajNUaHpVZkc4MThmajVm''@;'; put 'put ''SHl5MGZTV3hldmk5ZDFPL0kzKzBaUmFab1EwNFRpcTRURDNZVEhQVVRBTENLaUlwN2tuRVFOWW1wUVU0T2lsWWl3bFlpczBtS1ZGcXUwV0tYRjZxbzRRVGljSWh4T0V3NmZFQUVYaUVqNlNsL1d0Wi8wSS9lWC91U2tvbUlWRlJraVE3aStvZ1pYRWFYb1MvUXlwWXNwWFUzcHJxajBXNG1zMHIz''@;'; put 'put ''RkUyWGl5Wm5TWFZIcFhScjNGcFczcUhJVzFVV2xweHBQMWIyTDZGblhTYlRlTkt2RkNCUGxPb3N6Wi9wMXBsOHR4cHlvV0l1UkoxcldUUHhaUlR2TFFrNUd5M2p1bnZ6MHFtT0VEYXpYM1l4ckZpTlp6VWpXNENsRzh6UTI0QmxzWkVSYkdNbFczc1kybnJhZHA5ekwwNTFnRFU3elpCZDRnbjdj''@;'; put 'put ''YlNCM0djSVZoNW1lRlgyc281U2JPc3E1eTgyMHhPeWIyWW1PUmNQSW5jeC9oNnlRbGZLRXJKRVcyU2pQeVhiWktidWxRMTZYQTNKWWpzbzdja3JPeUFkeVRpNm8xNEtXNlFDdDFCRmFyYlU2Vmlmb0xWcW45ZHFnTS9WZXZVOW42d0p0MG9kMG1UNm16YnBLMStwNjNheXR1a1BiZEkvdTFmMTZV''@;'; put 'put ''Ti9TWTlxcHAvVTkvVkEvZG5DUjYrWEszU0EzekkxMDE3dlI3Z1kzMFUxeXQ3bHBib2E3eDMzZDNlKys1eHJkRDl6RDdoSDNVL2N6dDlxdGN4dmNzMjZyZThudGN1MXVuL3VEZThNZGNXKzdFKzd2N3AvdTMrNFRyejd2Ky9nS1A5Z1A5MVcreG8veE4vb3Yrc2wrcXAvdTcvU3ovRGY5QTM2ZVgr''@;'; put 'put ''Ui82SmY0Rlg2bGY4S3Y4UzErbzMvT2IvYzcvVzdmNFYvM0IveGhmOVMvNDAvNU0vNERmODVmQ0Q0VVFsa1lFQ3JEaUZBZGFzUFlNQ0hjRXVwQ2ZXZ0lNOE85NGI0d095d0lUZUdoc0N3OEZwckRxckEyckErYlEydllFZHJDbnJBMzdBOEh3MXZoV09nTXA4Tjc0Y1B3Y1lRb2lucnhkaXpXYmVR''@;'; put 'put ''bHhuVVpYcFV3bW94YnpMTzB5MS9rYWNZMXhqY1pQNWl3RGpWN3V2RWs0MnVWUDFPbDJuaVU4WlNFc2RCNGs3NUdialQvZU9PSjV1ODBQbStlNjR3M0dGY1o1NDBiM0d6eTg4YUx1MmQ5TXh1aithOWdURE4rMXJpcGkrV3VOSGF6NXhudk0xNTFKYWNaTVB0S25tNThyYmIvTDlhTmwrU3F2VHZH''@;'; put 'put ''bDQyZk1WN1l4Y3hldTJYdnYzT2F6L1p1dVNyRGl6Tm52c1RPMUhTSithdk5uN1hUckQ1dTlsMlp6SS9xR3IxbzIyaXFpcXcvemVxVTFMWTVxV2JTNnFSUnAvb3Mya1YvTXFmRjdFMnU2YUo2aXhwN3crejlpVjJzYVpxeFZOdXA5ckwrOUF4cDNnNmEvU09yMFo5TjUrZHNmcXFjVHB0ak55TFY3''@;'; put 'put ''U1grR3JQUHA3Yk5TVldkOWFjMzZLYU1adEtLWk8wWHpQNVc2cmY1ZGk5MHFQazNtRDlWV2xYR25tU2NOMDlQOWtmcGZiSG83akQ3c05uWmxldmlYeVhWaWZkY1ZxbnNqbE9LdDd2OS8rQkxaeXF1c1hjcCtPNnFabGFTMTZsbjE2NWhGMHhlMkJFK3g1ZFlEbU54STN0WTBybjdzRzkvZ1QwOTZk''@;'; put 'put ''eDk3WTFhYnAyN0gzK3Ztc28rVkUvMHh4M3Njd1BZNmU3azd6NHppVXJyNVVQWjliN0dyaldmYjdmaDlub2J4NDdld3ZYV3MvUGRicjN2Syt4K3I3RkQvaElIOEIyKzZNNWlzYjBxMStCZkV2QVVPL0VRdEZwUGJlTjVSYTZ5MzgwaVNQeGpVK0VTM0U5ZXdXNVhpa0hjYXlRakdvMGJlT3BKUE9V''@;'; put 'put ''MHpPRG9yMDI3ZnpRK2FteDNCdnN5Zk1oNHJ2Rm00MVJWT2JOTDhTWHU4d0MrS3puSlM0a1VwRlI2UzU4clQvUWY2ajZiS1FBQUFRQUFBQW9BSEFBZUFBRkVSa3hVQUFnQUJBQUFBQUQvL3dBQUFBQUFBSGphWTJCbWNtQ2N3TURLd01MVXhSVEJ3TURnRGFFWjR4aEVHTTJBZktBVUhMQXpJSUZR''@;'; put 'put ''NzNBL0JnY0dCZFUvek5ML2pSa1ltSTh5cWlzd01Fd0d5VEd4TXEwSFVnb01UQURKWlFwQUFBQUFlTnExazFsUWpsRWN4bi8vdDMwUktoVDE5dlpwMDBhaUZFWDJwY2krbEt6WnNxL1pHdXNRUTBWU3lKNGtveGtUVTFPMkcrNjROV09NdnMrVlcrNE1IY2RYVERQTXVISm0zblBlYzg2YzU1eDVu''@;'; put 'put ''dDhmY0tIckMwRjBqMVRxbVRqbnJsS3N4eVdNdzQyQmxIQ0xPdTdTU0JQTnROQW1IaElnZ3lSTUJrdWNKRW1xcEV1bVRKVWN5Wk5DS1pJU0k5VjRaYngzaVRLUG02M21FL09MNVc0RldzRldxR1d6b3F4aFZycDEzK1lmK1UwcGZZZkZqUjdhajJuam1maEtmekhGSnJHU0tDbVNKaG1TSmRtU0t3''@;'; put 'put ''V3lRVFpyN1pmR1c2MTl5R3d4MjgzUGxtRUZXRUZXaUZON3FKWDJTMXQ5VkMvVWMvVlV0YXRXOVVnMXE0ZXFTVFdxQmxXdjZ0UTFWYXRxVkxXcVVwV3FRcFdwTTZwVW5laDgwNW5WbWZUOWs2UGNVZURJZDhUWUI5cjk3RDUyTDd1YjNlajQydkc1NC9DSGtIZkpYVjc5cCtadWVEdVQ0STliQktQ''@;'; put 'put ''N3ovaUhSdGRKRjF4MWR1NTQ0SWtYM3ZqZ1N5Lzg2RTBmK3VKUEFJSDBvejhEQ0NKWVp6eElweDZLU1poT0pCd2JnNGtna2lpaWlXRUlzY1FSVHdLSkRHVVlTUXdubVJHTUpJVlVScEZHT3FNWlF3YVpqTlhNWkRHZUNVeGtFcE9ad2xTbU1aMFpaSlBEVEdhUnkyem1NSmQ1ekdjQkMxbkVZazFh''@;'; put 'put ''SHZrc3BZQmxMR2VGZnY4T2RyS2JZZzV4bk5PVVUwWUY1emxISlZWVWM1RWFMbkdGeTlSeWxldmMxQlQ5WlBRMkRacWxlNXFtbjIwVnE3VWQwV3pnYkxjMzYxbWorMTJjK08xVzRWOGN2RUE5bTFuWlkyVXRteVJHajF2WXpqSHNPQ1JjOHhrcFVib0NJcmlqZHg2Z2FaWUVYUS94M1dlS25HSEVz''@;'; put 'put ''bzI5YkdVZmV6akFRVjFMK3puQ1ViMTFtRkpPY1pMWHVwcDZzVTY4eEZ0ODJDaCttbi9QSDVETnF1aDQybU5nd0FMOGdkQ1p3WmxwUFFNRDAyNG1WZ2FHL3lITTB2K05tWGIvLzhKMGpFbncvNWYvZmlBK0FNOVBEVmg0MnExV2FYZlRSaFNWdkdVakcxbG9VVXZIVEp5bTBjaWtGSUlCQTBHSzdV''@;'; put 'put ''SzZPRnNyUVdtbE9FbjNCYnJSZlYvd3IzbHkyblBvTjM1YTd4dlpKb0dFbnZiVUgvVHV6THN6YjV0NVl6S1VJR1BkcndSQ0xOMDFocGFYS0xkNnphZFRGczBFNGJab3J2dVVLa1IvOVJxOVJxTWhONng4bm95QURFOHV0Z3pUOEVMWElWT1JDTGNkU2lteEtlaGVuVExUMTFvelpyOVhhVlFvVi9I''@;'; put 'put ''emxDNEVLOWY5dk14YlRWOVF2WTZwaGNBU1ZHSlVDZ0lSSit4b2syWXcxUjRKbW1QOUhEUHYxWDBCYjVxUm9QNjZIMkpHc0s2ZjBUeWorZEFLZ3lDd3lMU0RRSkpSOTdlQ3dLRzBFdGduVTRqZ1dkYXIrNVNWTHVXa2l6Z0NNa09ITWtyQ0w3RVpaemRjd1JyMjJFbzg0QzlJbFFhbFovTlFlcUlw''@;'; put 'put ''bWpBUXoyVUxDSExaRCt0V3RCTDRNc2dIZ2haV2ZlZ3NEcTF0MzZHc29oN1BiaG1wSkZNNURLVXJrWEhwUnBUYTJDYXpBUU9VblhXb1J3bDJkY0JyM00wWUc0SjNvSVV3WUVxNHFGM3RWYTJlQWNPcnVMUDVidTc3MU41YTlDZTdtRFpjOEJCM0tDcE5HWEZkZEw0TWkzTkt3b0tUSFM5UkhSa3RK''@;'; put 'put ''aVlHRGxoT1UxaGxXUGREMjczb2tOSUJ0UWI2MHlpMkpmUEJiTjZoUVJXblVoWGFqQllkR2xJZ0NrR0h2S3U4SEVDNkFRM3lhQVdqUVl3Y0dzWTJJem9sQWhsb3dDNE5lYUZvaG9LR2tEU0hSdFRTbWg5bk5oZURLUnJja3JjZEdsVkx5LzdTYWpKcDVURS9wdWNQcTlnWTl0YjllSGdZQll4Y0dy''@;'; put 'put ''YjV6T0lrdS9FaC9nemlRK1lrS3BFdTFQMllrNGRvM1NicXkyWm44eExMT3RoSzlMd0VWNEZuQWtSU2cvODF6TzR0MVFFRmpBMWpUQ0piSGhrWFc2WnA2bHFOS1NNMlVwVTFuNGFsS3lvMGdNUFhEOE9oSzBLWS8zTjAxRFNHRE5kdGh2SGhuRTEzYk9zNDBqU08yTVpzaHlaVWJMS2NSSjVaSGxG''@;'; put 'put ''eG11VmpLczZ3ZkZ6RldaWkhWWnhqYWFtNGgrVVRLdTVsK2FTSysxZytvMlFuNzVRTGtXRXBpbVRlNEF2aTBPd3U1V1JYZVROUjJydVUwMTNsclVSNVRCazBhUCtIK0o1Q2ZNZmdsMEI4TFBPSWorVnh4TWRTSWo2V1U0aVBaUUh4c1p4R2ZDeWZSbndzWnhBZlM2VkVXUjlUUjhIc2FDZzhkc0hU''@;'; put 'put ''cGNUVlUzeFdpNG9jbXh6Y3doTzRBRFZ4UUJWbFZKTGNFUi9Kc0RqNnVXNXB6VWs2TVJ0bnpZbUtqMGJHQVQ2N096TVBxMDhxY1ZyNyt4eDRadVZoSTdpZCt4cm5lV1B5RDROL2l4ZGxLVDVwVG5Cd3A1QUFlTHkvdzdnVlVjbWgwNnA0cE96US9EOVJjWUlib0o5QlRZekpnaWlLR3Q5ODVQSktz''@;'; put 'put ''MW1UTmJRS0gwOEVPaXZhd2J4cFRvd2pwU1cwcUVrYUFTMkRybG5RTk9yejdLMW1VUXBSYm1LL3Mzc3BvcGpzUlJuTWdDa281S2F4c096dnBFUmFXRHVwNmZUUndPVkcyb3VlTERWYlZuR0Z2UWZ2WThqTkxIazNVbDY0S1NudFJadFFwN3pJQWc2NWtUMjRKb0piYU8reWltSktXS2dpUGdodEJm''@;'; put 'put ''dnRZMFFtTFRPRExvRWlaSEd5c2cvdGloMDVvb0oyQXQ5NjBpcnYyMEx0ejNYeUlEQ2JuVzduUVphUm92TmRGZlZxZlZYVzJDaFhyOXhOSHdmVHpyQ3g1aGRGR1U4dWU5K2VGT3hYcHdTNUFrWlhkci91U2ZIMk85YnRTa2srMnhkMmVlSjFTaFh5WDRBSFErNlU5eUlhUlpHeldLVVJ6NjliZURK''@;'; put 'put ''Rk9TakdSWE1jRi9UU0h1MktWZCtqWGRoMzdhTldYRlpVc2g5bDBGVjAxbTdDTno1ZkNPcEFLZ3BhcENKV2VEcGtQcHVkbXZDeGxMZ3NSZHl6Wk5kRjlCMDhJUjNpdnpqRXRmL3IzSElVM0tMS0VsMW8xd25KQjIwZksraXRKYnVUaHlwR1orMjhiR2VpSFVrMzZCcUNua2d1T1A1ZTRDNlBGZWtV''@;'; put 'put ''N3ZQekI4eGZ3WGJtK0JpZEJyNnE2QXpFRXVldGdnU0xLdDdTVHFaZVVIeUVhUW53UmRWQ3N3SjRDY0JrOExKcW1YcW1EcUJubHBsVEFWaGhEb05WNWpCWVl3NkRkYldEcm5jWjZCVWdVNk5YMVk2WnpQbEF5VnpBUEpQUk5lWnBkSjE1R3IzR1BJMXVzRTBQNEhXMnllQU50c2tnWkpzTUl1WlVB''@;'; put 'put ''VGFZdzZEQkhBYWJ6R0d3cGYxeWdiYTFYNHplMUg0eGVrdjd4ZWh0N1JlamQ3UmZqTjdWZmpGNlQvdkY2SDNrK0Z5M2dCL29FVjBFL0RDQmx3QS80cVRyMFFKR04vR010am0zRXNpY2p6WEhiSE0rd2VMejNWMC8xU085NHJNRThvclBFOGowMjlpblRmZ2lnVXo0TW9GTStBcmNjbmUvci9WSTA3''@;'; put 'put ''OUpJTk8vVFNEVHY4UEtOdUg3QkRMaGh3UXk0VWR3TDNUMyswbVBOUDNuQkRMOWx3UXkvVmVzYkJOK1N5QVRmazhnRSs2b25iNU1xdk5uMWJXcGQ0dlNVL1hiblhmWStSdGxNN29zQUFBQUFRQUIvLzhBRDNqYXRYMEplR1BWZWVnNTUwcTZramZ0a21WNTBTN2JzaVRiMnJ4YnRyeEt0dXl4eCtQ''@;'; put 'put ''WlBKNWh4dU1aR0FpVEdRakxERXNJSlNTa1NVTkMyZ1JDQ0R4YWFGa213TEJNRmdoZlNpWUxKQzl0bXJSWjJyUXA5QVhTdEVsTCtzRHkrODg1OTBxeUpjOE0rYjRIWThtK091dC8vbjA1UWhWb2FUMkNQeXZZa1lDMHlJeHN5STFhVUF4MW8zNDBnV3hKeS9CQVgwOGlIbW4xZTVycWFpMTZuVVpC''@;'; put 'put ''VUVWN1FPblVPMFZ6eE93MlIyTHVXQ1Ftc25jUmZwV2YwbWYwblg0Q1QyTHk3MUliMWlFUmllSFA1bDdHL2Y4NU5Qenc4UERERHcrN25NN2g0ZUZEdzg3Ykh6N2tjaDV5UHZ6d3c4NURoMjRmRzN2NDhKamp1OEliS2FmWENmOXVQZUlhRy9NY2dOL0duSDNEcmtNM2RGbkRzOGVQUDNiOCtHeDQx''@;'; put 'put ''Umwyd2orRUNKcGYveDM2R25tQzdjMmJkQ0dNMFJKQ3FDYURDQkdXRlZnUXJNS1VRcUhRS21xOGVwMVN0QWFNRWNGdDhjV2k4VWlueFd4U3VaZjJtbUtDdzJHMU5EVlp5Qk01dzNjZFZyUERZYlk2RUZwZlIrUDRNYnhJSHRTNVVBVkNPZ0ZlbjBaMFhqKzgzQUR6MmxFVHVpSHpaT2Zzem1TelZr''@;'; put 'put ''V1FVaUNZSUx4U2lUV2Fta3lOcmxvUVJmVlNWUVZScS9VWkJTWkVTNmJzU1I5OXdENUVhdkZ3YVQrcDRhNWtJMEpOalEzMU1JMjl6bFpyaFFVYjlmbi94SVlBRmlPaVczUW4yRThpd240aUl2c1I2WWY0djZMWGFxOE5EZ2Z2Z1ovajJ1UFI5MnRQU0g5ZG8zM3VudWc5K0t1djlqOEYvL1cvMnY4''@;'; put 'put ''MC9OZi9La0F5dEg2V2hNbmJxQkY1VVJ0cVR3YmJBaTZudmE3V2FqWlVWcWpGR2tTVUFHYVNCakNRMnhCRytFTUFFaXVhYXRMckJRQ3dSd1ZvRWZQNUV4WnJMSVJqMFFHY0FQU3dXRVdmMzl5SXpRZ2UxOEJiUEJhRkJ5UjgvRWoycHIwZDAzc3YyOSs1c3l0NzFhNzJpWm5MMzVjNzNOVWJTV0l5''@;'; put 'put ''bVJxLy9Fb3hPYXpiM1QrdFg3UE5aenUyeDhYKy9wcTUvdEdhMzlUdG5NZjJkdjFQTlVPdHVaR1JVREJtZWdzV29rVGg5ZjhtYjVKbkFDT01jRHBoMUl1K2xYbXlGazRvVUltVkZSaXJsSGdWcVpCYW8xSWZRUW9GV2lhWVlrdzFnRjVZcmhLSklHaUZLWHZtU1Q5MENWK3dDNEttckorNFhJVkYw''@;'; put 'put ''U3JDMlViSzlDQUUydEp1cUh5dlhidVN2dloyaDhOa1FxaTl0NzBuSG5XRUhhRm1uNm5KMUZoWGF6VG9kYkNaR2wrTmFBNFlPRWdqblFCS1V3MTI0d2gyR3lnczNTNlYyV1NKb0UyZkQrRENaMStZYkc2WkRJWFlLLzdvY0s1MStOcDRvclUxM3RXQ1p5ZGI4aDhGMk1ORUsxNEtaVU1kTTZIUVRM''@;'; put 'put ''aDlKb2puMXJiaHUxT2RrWkZVdERPVk94aWNhUS9UejZCRk1KNktkSTdRajJCL0FtcFoveDA1U1o1RkRoUUFQak9RN0EwSHZVME45WFcxRmJoQ0lBNk1CSkttR0k2WGdWd3RHU1VRS1lNTW9GQmJtOVBaRm11TE9nUE8xamFYU3JRRWxINlYyMFgzRkU4VTd3dytzc1lUVnBWb1JiQTFLOStsSWVI''@;'; put 'put ''ekEyckJUa2x3OTlJMS9RZTdwbWNiNjRPem5jRjBZUHYyL3YzdGpVTWRvZmZuUHRjVm4ranY4RFZObmh6dUdaenZGL2ZzRCsvc1RSMTB0MHo0Z3BPQndHUmdjTm81dmpJKzMzRGwwRW15T3hLSWo5YkhXNXJqYXk5bnI1dTFaOEs5WTREendCZlFnK1JCVklPQ21TZGJBRkVxS2V0aDU0c0JDWFNJ''@;'; put 'put ''L3JrSWYrSWxTaUhUdTU2MmVBbHN4eERMc3g3UkpMcDM2dTFHbzEwdnR1RWZrZU90UnJ2ZDJIcWNCS0RId1BvT25DQmZSdFZJOVZTMUVyY0hHTXRLV05uMnJPS2p4NDZ0TkM5czM3N1F2UEN6VzI3OTZVTHJ6aGMrY08yNXhRQ2RFT2gzQi9iTGZVWG95OEhqVDNEQWhWaS9GUmpoNXNWejEzN2do''@;'; put 'put ''WjJ0Q3orOTlaYWZMYkMrdmZnNnZFUytDanNaVGc0dVRvMG4vUFZXVVEyY0tkMlBVVFVjMmlTMEF1UW5OeUVpWUNLY29peVdINlF3QlNNc28zMXpzKzBobDBNcG1nSUd0dVo0UWlYQy8yNlh6dzkvSitLRDJNOS9vMmRwdGNEL1BqODdZTTZRb1MzdFEvK2kvRTVVYWJHVi93Ylk3S0pkL1JZcjI0''@;'; put 'put ''bjc2MW8xRmhUVnRjMVdwVkpWcFZCVTFnY0RnV0I5cFVKUnBWSXByTTIxMVFvQnE3VVZGZmwyQ3RXRjJ1SHJxalhXaUVyYnFERzVHT05XVnF0ME9yMWVwMU5WSzlXaUtGUzdUSnBHclNwaTFWUmZla3NHMXhRNlNtcElGRlVpWDlLTllEckZBdUE5QUJJTGFBVllBMFVUQlo1bWZGMm5FdXNDMkUw''@;'; put 'put ''bGFveEsxZ2lwZVRIekl2ekRMUysrbUg3cEpUcmU5UHFONkNXMEgvRFBtZ1F5UitNeStnRVJlUXdVMDRBOFhBVXhKODQwVjFsQXl0VTdIY0dqb1RBVmQwRjM0MkFYSGFzTC9RcjM0aWhRYm0zU3pCQjNvWUM0ZWgwZHpPZzBPN3V3a0Z2RDBVbTJuMG1RdTgvQS9KVlVnNkJQZ0NOaWJNVVVCeXBS''@;'; put 'put ''aFVjQVZsVXNaWTlLRXJZcUwxM3grbS9XeitLSHlPc3dyejVaUXdjRllZSlA4Z2twVzhNekM3a0hGc2pyNzc2R21NenRCYjV5TFRrSHJMQUp0U1ZiZ0t1eUhYTU9na0hZc3dYb2dQWjBUYnJHV2d2am1TQ01Bb3JOUEpIRW9pRkFKa3BNalRDVDZvT1RreCtjbjRQWFcrZjc5a1dqKy9yNjlzVmkr''@;'; put 'put ''L3FxOW54eGRmV0JQWHNlV0YzOTRwNkp5VnZuNW02ZG1LQ3ZIQVoxbEJSQUIxQWhlN0lXamxJQWVLVTVoOGRZaTZmMFJnWTYwWitJNk4xUFgrZDZaREJMWnJNOUo5YTJJZGEvQXpaVkNmdXhvZGFrdjZvU3RnUFlRRWlhZ1pPeFJxckVMQ0Vtai9SV2oxOGgxZ1lHTVNWbXVucVY2STlMekZDTDRY''@;'; put 'put ''dzYzcGtZYWg3MmR1L3lKWlkrM1hlb043UDRORjdLK1laK09MQWFiZTUzZEVXQ0grcmMyemQ2WStiZU5KKy9HZUNwaC9sYjBHQ3l6MVlMYzdrd2tEU3NBd3RVdUFPVjR4V1lYYkVNQ0FxTEFkbTZyTUpLcFZWSlQ3a0ZOWHM4VG85WEZHMXcwcFM1UkRxcEhBcmdtTlVpQ2FUQ0NrVUo5TisvdFRu''@;'; put 'put ''dVB0US9zWFBmL0dSNmZQZmlVSHlIUDdybkUwT3J2Wm1lL3NXK0s4ZXFobUtSVUhTaXQyOWdBdU9oN3ZoWVp6aDhmWGdoUGpDbnI5ayswcjA3d25HaEdWNEdBUFlWd09XQ3lkWXE0RWs0clZMQ0hqQUMvZlV3Z0krSlhLMWlxckt5c3JxeUd1aktvS05yOVRyOU9LS25HcXc3cHNmNHp0d2pGWGho''@;'; put 'put ''OStwcU52ZjdQeC9DcitRR3gvLzgxL2hnN2o0T295NkFVU1BNMDRqNmt0MG1qQlhhR29FbzROelRDRjZSQW9TOElKQWxMdUUzQXFnUk5iajBScTlIQnBBbDBpa0pZOUZQNlVtTTV4SHlaOWNISXpzdkQ2ZGI5azdNalhkWDRIdHlaOFdSbWNIVi9zSDNqVlgxUkxyM040OEZodWRpOWZoQSt2VlE1''@;'; put 'put ''TUJ3YXJVTFlOQUhhNHZBK1RXZ1ZzcXREWG80TzM4ZFVTcElXZ1ZzUmFFVUZLc29MMlpGV0pqTUlScEJyMnhzYld6eHVxRnp2ZGZyVTRQZWhxVEZVSzVCaVFYRURDZVNCa0M1aUVGV0pFUktNWGNkSFJpNGF1ejJXOUkzVC9mdGF3bDRKa0x4M1RISFNyOG4wN3h2ZkdpcFdyYzRpaCtEaFE0ZTZm''@;'; put 'put ''dkt2U3QvY2FDMXVkL3RuYmxqbTZZemtmdEljTUkvQ3R1Y08wRGxEWnhqRmFPaHBtUzlBZ2lJVVJEbFBaanA4S0FGZy9aRDFVcnNqRG5Od0JTZXlOMkZ2NS83MFc2eWt1NWR1NHZxRzFHQVF5dkF3UTV3NkVFanlTR1RpZ0NIVFl0RlFKQTRoUnFBZ09HTUdLY0lCT3JyRVFyMEJMb2pIZld0OVMw''@;'; put 'put ''ZUZ3eFIxNmFockt1Y3hpSEJ4NUFuUU1vOXJOS2YvaHJDbU1rYjd4OWVTQTFNREYzUlAzREZVS1ozZUdINHhKaG5JdHd5SGhqYTFUN3VCcFVwUHV2enpjWkJxYXBxWCt3ZTJHdXUzZGFkbUc4THppZDZaeTJXdmYzZGkrMzRFNDF4cnl2ZU5CTHh4UnRJN25sSHQ5ZmY1OFRZMmVmM2Rqc1kvbTg2''@;'; put 'put ''ZTRjQmpyMUNBellFZ1cwcmdYQ1ZaQlhRWDRDOUNvSWxVeVFkNUxPSDNjTForN3hlZHZZVzZlZzVIUS9nZmt6L2xQWnZvSkRnN05JU3dVK1ZuUG9ndzRZVU8vWU9pZ0hrM09aVDU3aVErd2c5ZG5iK3NBY21RL0E2eUFzcjVlZVVmN05GNnJueHB1VEdXMVVWUWxYV0tvdEJ4d1FMNWVlR0lzRkN5''@;'; put 'put ''Z2dacS9TTzc1YWxUZTZBL0J2WWRFeDI0bld3NmJRd21ZajBRTWIzSTgwWmpKL0Q5ejhaQ1ZDNlQ2Q2RPRWNXQVM5VlQ2a0k2RkRHbU5kY2pjMEo0QkMzNGRPNHAvY1hZODgvUDg3T0lvWE9rUnI4VDRDSkluSWxteWorVWxNT0ZDU0JMRWdzbkFoVXR1c29CNmUwVC85UDRXL25ZdXpubjlLZlRN''@;'; put 'put ''T2NVMmduTWNwekNqQm5Jb2hqU3JOeUNwK0dPVi9KZGQvLy9QTmp2K2o5QlozVHZ2NDcvQnFjZnkzeW9FUXlhcW1xcEd3UFU3WXR3TVEzRmNrUXlzQ1ZXS0d3S3Fac05wdkg1dmJXZXZ3cXVoQlpEaGI0ZEEwRzI2MVliai9Yc3lmaUhHaU96bmtqZS85b1lIODBzcWRuUmkrRDk1VFMwK1ZvU2pn''@;'; put 'put ''N2c1RVQ3ZHNqYmJPOVZiY1VtYzkwblczcmR3bWpvQ2NQb2l4K0p2TmtCV2pLQnFlRHFJWGhKb09nVVBmMUVrRFFOQmhiVlJzKzBSUjlZdHFpVDdubXUzYnQ0cE0wVjJxSUFtU0NpbkpvVlFVR3JmSWdraGdnTUJhMVdsZ0d3T2pWVTlMVVFUQzhGVml6aUM2MWsrazlUdEwwaDB4Q0RZc0FIS2hh''@;'; put 'put ''STZoWEw5cFpDWVpIQnhWQ0FsS3VidDFMRkZXQVl5cHhtWFdmMlVYL1M5WW1rd2dsczhucGlURTRxd0dmcjlYcjhmbXFSSHVKOHVTaU5sYVJrQUFqcklOWmw1MHlYNVRVcWs1bXJvQUJtdURhZ01RK1JwNDg4djRYcno3MDJPSG9YQ2pVcjI2Yzc1aGNTaDNyNlJ3MVZLZjBIazlqWTdkMzZiNDlL''@;'; put 'put ''NCt2N3Z2QzNvR0RDVVBQVlNQTk85VTRIZ3Rtdy8yUms0Y2ZPL1MrRjQ4ZmVHZzVlMlU4MU93UDc1OGVPWkVLZW9hVkMyZXRUZTZXeGVHRlR5MnVQckd5NTc2bGVxZmQ2MWk3YkVyVVJucWlPenBpUXhRZkFTM0pEMERlaUtBNUJKTE5HZ3h3U1FOMUFMa29RR3VnWWx6QVRIdFRxOVVWNmdxdWp0''@;'; put 'put ''ZUMxaUF5VTl0ZmlVbDM3dGJSQlJ5bS8xYnUvOEs5OTVJbjFyYjlLejZhK3d6QWZCK01meHpHMTRGVzUwTDl5UjZRT0RDRENqZ0N5R1VsVmFja0I1V0l1ZFpQNTdMWEdmVE9wanFYM1ZWcjBkc010amFIbWluZEd3V1BFMHNLbHRrby83SVA5eVoydEhkMDlBMUZsM3B6ejJOLzkrUms5NDkvbWR5''@;'; put 'put ''MkxmbEw4a1JidGlNNjF0QzRweXUrb3gzZk5kRGVQdkNUM0xueHJxN3hITk50cU56OEtKTWhvV1NnemxaWlFYRWtMWXNLeXdZWEdqeGcwc0pIWFdoNWxNaXJDTVVIamhNUDd0Ly80TkxZTFIweDMwcGk4blFtYzNveXNlS0xkZHd5VmdYbnR2emdnVVJudkNVMGZWdG02b1BaVUV1OGcrb3lGRzR2''@;'; put 'put ''TUgzT3pDeWtQSmlZbzBBQ1UxV2x5VkJwcmpMN3dMb0U4TWdvR2NBSkNmY0NXTC92aldPUExDOC9jdXlOTnhadXoyUnVYL2dzZVdMbnZRY1AzcmR6Zk96VXpNeU5ZMnMvWjN1ZmdmbjZZTDVLRkU2MnlSeWI2bTZLSlJDYk5jV2FON05vS3JuSERWUTVvMW5pMzNxbitmUDRtdHhIOGVkelJ2d1dX''@;'; put 'put ''ZmxGK3QvVDVBbEp0NWJIMTZDV3BFOGVuM0poTnFxczJzQUhHcVNoSXpOK3pFWjF5K1BPOEVGenIvQkIrWG5kRCtmbFJMRmtKNWhKU0dnaVJLRmtCb05TZ1JoeWtXVVkyVUkxWDhiK1Fjc3h3cUc1dVVucDFCY0o5ZExEaTdueFhkallmdmZFRWp2QWlVK0ZZOTdydXZrQnRxLzZ2b0V2ei8yMnZa''@;'; put 'put ''c2ZZWGQ3M04vT2o5RGQ4RkJoejdjd21QcVRIa2s5WGdHZG5PNlgrc3UwYURNc01kMHQvRVRnbGR5U3pWMlJ6ZUpQVTNMQzNYVGJ1Yi9CYlh4Y2RCL3o4UnFwWTZWZ1gzSFRGSXlybVd5VzlxSTJHY2pGdjJiMEIxakVUQm1HMFV3NUo4c0NJSk9WZ1YySHRFYXZBcm9YVEJkWUJhV3lKei9RMUcx''@;'; put 'put ''YURQZG5zNG1EZzFYSnpxNUExOTVKL0ZxdVkrUllIOS9uM3Z3K0hja0dqVnBKbU9URnpDTW9jTSt0MFdEZ3NqNml4eEVOMEFTSTFiMVp2SGMxOTNNY1hjbTljd3pXbS9zUVBwWDdhOENmNVB0ZlplT093TGdhR0ZkSmRXRzJhRG9hSlEwSmRFcWsxT3Zwb3IyQUp4RTkwZVI2czJuQXViWFBzZjZV''@;'; put 'put ''aG41ZldKZFlabDBtdmJ3dURSaEJibjBsbk1DK0xGcEg2OW5zK2pwZGxCUC9mRzBiRWRuNy82RDh1QTh4WEc1TTJrVkNTa1kxNUVmRnNDdzNHeE0vbXMzbWR0QmorVDRKdzRqaHRlOVQva3R4K0xmL1AyeDR6blQyUGJCLy93UDdKaytuMDZjbk9lSktMT2ZBZzh2TER4Mll5SDV3S25QYk5NZGJw''@;'; put 'put ''cDlRbkQwSWU2c0N2Z05XT0t3Q1NGWEExQ1ZUQ0NUQUZtdXFUWVpxYzQxWjczT29hQkRCbWVjOVpyZk1sdlV6MkRwMk1wVTZPWFkraXpVTHE2c0w1OGdUWFN1RGd5dGRiK09oN01oSU52ZVRZaGlZYUJ3bTJVa2QrMHFpQXJOU0lOUTFXakRaRkVXZVViUFozR0p1RHZ2OGxBR0RFTGVLL21KaXBv''@;'; put 'put ''NzFlTUtmc0c0U3d1UzN6ZDdwenRudzhmNGxHVUM1VjdlN3IraThxcTRoRHlOY2YzVTQxVFBtRCtSaGxmdVhwdnFsbm1YUFlxZ1lYRVh3cW9FMWdmd0VnYUhBc2ltOEFwcUl4TjRrY3ZkNG5IcTlrZklldW1LM0gyeHVQWU9jVXZZVmtJTkg1ciswNi9HeldRYTZYTTg1QmpaODJ3bEQ3dTIzR2ZR''@;'; put 'put ''K1NRRW4rVFgvaTRUSmx3RnFJSzlxclFRa05zRkY0S0xPNXlKNTFZS2F2VUVQQlpkRnRtcW9GelJFU3RnZjl5Y0NPTzk3WDBmNHFwSEloSGZ4c3N5QldOL1JvY2xySXUxdGgySXRJNzRkQjY4NmtiaHF1dkxLL25EVW1YQkVFMVpEVzZZN3Zqc2FDZmUzaHB5SnBvNUliZDJ1N1YyN28yeXRRWURU''@;'; put 'put ''Sk5NenVHOG9iOUp5WjQ1a0NtQTMyTFJ1b0JqVDY2VCs5U3lZdEdtSmxuY0FqbndLK3B1Uk05a29CUnN3THQ2ZUdabE1IcE1zamluemt2WW84VEhzdW0weUcxL3U2MXVPWnlkdm02K2F1bU1IL21UdXFxSFZucDdWSWZyYmpqdW1PSDNMT3BHS3pxVmtOamh3VG9scGNzNERKZ25uUEpTWEFlOGdQ''@;'; put 'put ''OGg5ZndIK1lSQnBsUFBDenhreUEyTjVFVktZR0QzQldCV1U5d096b0tFdEpzclo1b0ZiR0hSS0tra2pka3ovQ2U1SzdQYnUvT3JaeGJOZjNmbXI2YSs5T0EzRC9RMXBZei9ieU9UYXMzeWRJRWZKM1l5L0FYL1VxR0JvT0g3S2dtb3ltT09id1dEUVU3akNLbUZJRFJzZFpKcTQvKy8rYmhtTHVm''@;'; put 'put ''OWg3enR6ZjRGdHVkZnhJdnoyT3JieHNRMHc5c2RnYkRWcVNOYXBCS0REUEpPVHZCQUdGdHlTeG9RajgrZCtkZUNuUDkrWGUzTU8xK0xQNUo3QzA3bWp1VGZvV0QwdzFyZ3MreWs4QzI2OXZGOGo3OVl6Nk5tS0U5eTlBUXBBRCtnVFJ3bkpIY0FQcnYxMmdQalRBMnMvNXZKLzIvckhjRC81MlNW''@;'; put 'put ''YW1SRkFMUGpaOXVhamo3NUpmdGE5NXV5R0h1dnZySi9GVDJ6aGN4VkF2MVV1NEdYdWNzV29BK1pyeU04bit3T3Bha2I5dzNRK1ZKalBDb3cvQmo4ZE1OMmJQZVRuM2U4K1FZZVA0L3Z3MHh5M3pxZ09qU1F0d09HWmx4Um1waDdqazVKMzU0d0tqUmdqUnJkZmRQK285NEdobTI1T2dpejY5VC84''@;'; put 'put ''QTExemJ2MzlaRzc5R1pqT3djYll3a2ROaHhBQmdJUnNYL3VyVElxZjZ5QkpZcEY4RC9wYVdkOHE2RGtCbjV3MGdFam1zeWFzN3NHWjYzdklWdzJmNER5dUUzU0kzeEE5c2lNLytrSFNaTU9Db2hhRWdoNDArYVpHcGFCU0t0TGN5SFJBWTZXS1VHTUxiR3lxME5zeWFxeFNvV1VKSHlYajBsT21I''@;'; put 'put ''U1V0MWxqVzB5U2I4dUpqWHRwdzFLZ3pVLzlXdmIvZTUzSlF6NWJINnpacTRLaVF4UXhuVldURVdRdmVXZ09vZ1hLNEVOOStSY2ErRXArL1BMR1V5TzVPVHJrbkE0MkhkbGdPMWt6TjlzNVBkaEg5TlFkeTM5alcxckU3MHprVGFEQU9MdG9zL1owNWIzZGt4dHdYQ2llUUZKOG5FeURyREdBTlBY''@;'; put 'put ''ZFdXMEdVSUM4NDlCb0FhWFdadkpQS0pua282VGF0ZWRBNU56ZWlxdDhHWDZZRXQ0dU1kZ2tEVVlpWmpFYUVqQzZqMDI2REpZUHMydVFaOVZPaTBzdnUwR0w5NDc0ckJ3YXVUUFVmYU14a0dnLzBlMmJhMm1ZNk8yZmIybVk3aVg3MHhtejIxR2gzOUFBNWwvdTNhSGZPQjhaYTc5NW9kRzl2NzFL''@;'; put 'put ''VTQyazc0TnpiZ0hQbGJUSGIxcmFZNVlLMjJIK2RtcHc4TlI1ZDlrYnJSbnlSeFFqODg0M1pvOTREc2FyMDZZbUpVK2xtVDZUZWtkZ1hUeXgxT1JzajNsWjZabkU0czBEK3pQUkM4WmxSMkRFd01rT2pHTW9GZEhkdWJzU1FVMlN1MXcyNGZwSFJMbUdnMGpNeitOeDZlbVpZUXZFQ2VQUmtzMjRV''@;'; put 'put ''b0VlVmtnL3VGRHV0VG5aeTVOemE2SUZvOStpcGJQWkdPRGhzWFR1MStjd0lQVFBpZ1RNem8zcHE2UU9QRndoVGhvaWdJQ3Y1WmRveXFpSTl6bUlCYmJmZVlyZlZVZ2x1OERIM3E0ZWZWbUd4WmlkZG4wcDB3bkx4d2FYYWtQTURYYVBYVFk1ZU0zcnkxdHd1OVVwbThsQUYzcXZla1U1NDZqbzhi''@;'; put 'put ''V09ucHpPbnhyNTQ1L1JsK0RONzB1azlIS2RBRnVQdHdQc3NhSGV5UW90VlNoMUdLcExtMlNyMVNLVlNMb1BHVnNzY0htaEpnU1hQSzh0UXFRTmpRd1ZjWnJYMHcxM0pDbytieFNsRjBjN2xqSnZ5ZnVZMDVFaW9NcjkwODgyWmJkdkdFL0ZXcjZaZWIzVVNaU28zZ0wrZUd1OUpPeE9hS204OTA0''@;'; put 'put ''TzNreGFBSDgzUitIYXlxbEZIVkVxTm12bXdKZjRLREExa2pvcXNVczF5V1ZRUWlYQVpNSTBGL3BwdlI1a2hySk8yUnFWdFRaYzA1cVVOeC9pckExUW5ucWtCbTJqeWViMGV5bCt4dnRpWEh0L2dTZ2M4akpYZ1ljdlFpWFQvMVI1bjQ4NzJYWWNBSlVlUDlmY2ZHOTJNa3NwYzUvQnFqNitwdDhH''@;'; put 'put ''eGZXcDdlMnp3NnZIeHF3ZGk3YnR5aDBMYm9wRnRvZEMyU0hSYmlKLzlOQ0NvQW1qWVRLTmpCaDVYWWJRRUNqdnpCdHVLVEhKQVJMM0piYUkrQ01ycTREZ2xmNTFlNG5iNGhsMGRtWW51d0dSYkptTmRpaE45WkU5UDdsazhPRGpyR1hEbm5nVzI5blpyak5IRUlMeCtrZncxNkdoYTZnWEkrL1Jy''@;'; put 'put ''S2ZMb003SkhSVnRUWGNYYytjcE43bndSVklpOURRMW1VME9EeVpmSmtJT05KdnFycVhIZjJqc3cvdm9yNjFscGZEdWxPUzNJNVJwUVFVbGFXVFNUSURCY1ZleFh3VWJ0Q2g1Q3NGZlZXUzFHUFp0VkxBa2lGRHNCVlBrVlhCWFVWbFY1dGJhbXpIaWlzSlIzZjZVUkI1UXFUd09KckgyM2grdG13''@;'; put 'put ''SnBZTExVU3VaTU9qUUxvWFdDbWlZNnZSdFpQOVVhbTdXR3E2REJSQXJCdC9zbStwNVl5R1d6ZmoydHpiL3h5NzUwQXpqYmN5TStSSHM5bllGelo5NkVyOFgxTUFaU0FXL0cyUWdUb3lZMys5S3lqanJrK09CMVpLQkVybDlXaVNsQXE5UmtGalRRWDJEV1FPanlrVFZUUWhLaFV0dUlXcGd2MHYx''@;'; put 'put ''QlhTaDkwd1c3a2N1dU5icVBicEFGdVVZUmVxZzIvUk15Y09PQ1ZQTGs5bkVsRkI3TDhKV09haWZUc05PdjI5aGFoWGFib25TaW5Xc0s5a2M2K0F0NVRudnpoWnpqYWN4QVltZldrcE5TdWx6RmYycitWNDBzSllVaWJMOXR6eTA1MDI5VVhJeW56SlpDVWNoNG9pc3VZY2RqUEpuK0o3YUwrRXN1''@;'; put 'put ''Ri9TVmNNUmkvY1hMeXh2Rk9xaGQwY3UxQVVndlNweVltVHFkVFhVdUorTDRFVncrUXBNOXRCMzFPWDE2Zm8zSmFCV0lRQ0wyZ1dGRWdHWEd4UHFjdlZkTTJOalJkZkxSTEdPaVM5RG41T1A0Z2ZTNzNXM0xtUURsOWp1cFEyMEdIMHBmVm9RbzdzeFVwTTVrTklvMnBQdnBOcXRIbWhxYUxqM1lK''@;'; put 'put ''QTExUWg5SmZUSFpkUUlkU3JzM2c2b0lTZFNEWFdhcjN6c1BMWVlCVEZicitHWjdFd1lHa1o2Sld3Skx1UzNVU0RoaXpUSGdGeFpoL2FDcmZhNHNPc09temVoTzN2UTN4aURsUG1zOWNQdDZ6SndMcytHLzZVN0NKM005cDBBYWpJT2puTDhJNmZhZ2pHVExEUWkxZ2JDTlM4TmJaTnJ1ZmZNanJD''@;'; put 'put ''WEQzRTAvK2lMTTBBVG5UelNyNjVBeUNSa0psMEhlT2gveTdka1FHWFpIZ2N2YndUSGgvcTJkNkl0UlhGKzFLaklTdW1LdHE5aWFHMnJ4MWJsTzFmU2d4T3Q5azcrbG85b0FtYWRBN3VrTmpPNmkrQjJ2Y1R1NEdmUytjYkxOZ0ZaUDVSTGlOaWtheVJBTXBBQWV3SlBkelRaVHBjRVluVmVLOE5E''@;'; put 'put ''c3ZwcGZTelVBdzBYQmVQSUczdDhZVDQ5dTJaVzYrMlduVjEydk16blFQVHFmKytJOVR1YlAxM2lvTmxUbkFud0M1R2I4VmFFS2J6RytCWVVvQ2Y3TjVZSlUvb3NvOGtySUhDMFpCMlo1YmRpcndXN1BiNUdaaGxDTE5uMHB6SHBqVUU0R3kyUzZaNlFKeXZnTWNGcGd1bnN5OXhKZ3Vub1Q5MklG''@;'; put 'put ''NGE0bFN6dW1TdlVDeTdxczNNRytGa2J1dDdOdi82cEh0UDU0QXpXd2VQMGIxRXd6aURna082Ri9xLzlKZjJQL2xucjMxWTBNZnUzWDI4ZkU3UHpvT0l5N2pCK2pQMmp2NHZ0ekJncDlPaExGWkRtR0ZxTUFLS3Qrb0Z3WEdGa2hSZ01WZ01GREVjL3BGdDlFZnNTWWlvaEUvOGJsN2QzN3p4WjJm''@;'; put 'put ''dW52bjExNTU5VldzWG52NTViWGM3K200amV0VHhBWGo2cW11V0trR3ZJWWhBYm1sb1NsZTc2ZHJ0ek84MWlPZHdlU1czS29VVFFheHdIWlJnOFZqWGtPZHU4NmxiZnluK1dmK2N0dWJkVk9KcC9YSmFsTmRrb2k1T2Z6NDJrdkpic3ozRW9lWFYySE9MWHhrK2d2N3lPSzRJL2UzK0JPNVYzRTBk''@;'; put 'put ''NlFYM3piZW16czl6c1lOck8vR2U4bnp3SFVCUmphbUFPZ3dubkN4REVsb3NDZ3hBb3htOUJhcVFpbEN1QitEYkk1UlJaM21xbHRyaU5uS2c2NGlwVTRSYXhhOXdWZ3M2RjJjVnZYM1dyRFg1L05pYTIrZjZ2UE5JN0dQZGJZbGdwMTN4VlBONnBpbXJxM2xFNkZFZFUwaTlQSFdvRTBUZzFtdVhE''@;'; put 'put ''K0xIdG5DMzBhMXR5djcrcVFFUityZjNvMlgyZHFiazE0MTg1UHBNWUsxNC9GQ092RXlCZFVNclFZZ29pbGdCYkh1NTRsS0NjcGRFbzJrQVFQS20xMHFlSWNUQ2ZYMVd2bUtMYjM5cXVuOFRvNXJiTUhXajRjU05kV0owQ2RhMnVvME1YVnpLbjVYWnpEUjF2bXgyRWl6ZW4wZERlQldmRE4rVkMv''@;'; put 'put ''aTZ2VzEzRnRJY3diaDUzSnZzUXdaS3VQbTFuZWdyeEs5ck91ejFWR0Z4SmFSYytLTXBFVFhaL28yVDB3RnJURHllU21YSkxqWEZDTjZPWGRrYlJUL1dyYXh6K0szeVRTcVEwNktLWTBOZFRhcnhXVFVWU3RKRlkvdHdhd0xVdGtIcUg5MUxPZVNseUJ3VHo4dFBxREhDTEllckd5UHhRb2l6WXgv''@;'; put 'put ''T0JmSzloM3M3ajdZbHczT09xTnRBNE9oYU83RDJkN2VyS3RaT1ppcW5qNCtPSGg4dW1xb1grbHZpblJvY2xkV2RrWk9YV25FZHhpdlRQSDhJRVQ2UVMrdlI2bGtFbzZUSnB3aGtlYTFpM2hTaVFrd1g1R3dNQkl6SFdubW1TaXlpQkluMG5wVVQzTUR3UjZnYXJIWDdJd2xXTFp2c1NzSGpwQ21L''@;'; put 'put ''WkwrdGY4N05EQ1FPRGc0ZW0xdGQvV09SSC8yVzk5S3AzMmVjNms3Um83MVNSSEtPMUxuaXYzWUZ0U2RqSnN3MHVDMEdoYUdLU2M3ck1JRTFFYlFaRmNxV0prSno0KzBtSTBHdWFSRVYwbUxTbGg1ajFsT1FJWWZSdUQ0czQrLzl0cHJjL0R6K08rbzV4dFBwbVpUSjA3QUN6NU0zZC9jL2lNTGVB''@;'; put 'put ''ODV3M0s2T3BuSDFVK1RuQUY1V1JCa1dTbFFRT0daTWxsZDFCbGJiSlIxRnYyKzIwN3o1TzNHeDZSM3NtQTNHdXJyRGZSMy9nNzQyb2FpK0lmNFJaMExCMVJJSitBQStvN2tBNTdEMTVBN0w4Vi9USE96Qm5FODl5MXlaK0pTL2NkVzBmM2N6Qi8za084WmJ1Szh6Yi8rS2w2SE05QlNXeEFocGlq''@;'; put 'put ''Y1JNWHZCNm5nWWlFQUZnTHlNU21BSmZXcWwycGJOQlpVTTNxa3ArdmdZRzdnbWdIYzByR3p1M3RYNTFvVCtmTzFYVHhHL0ZQMGwzZ0VnTmFZdEJkeEJVTFp4VXhSOG5XOENIcVhOVFphekkyTjVwODJXaXdORFJhTFpGc09yaWZSLzlBTWJuUXQyNXZPYWdJOE50SXNRalhseDJrdXJ4MWc0SUJn''@;'; put 'put ''VjF4Tk04dUFTNjhXR09sK09zd3NLSm1zQ1dEV1RWdTE0VkxhaG14R2o4ZERwVFFGSGMvaWQrWFZJNVlhQzhJcUh2bmYvcTVXVzFobmJBQU54MlEwMWVpYzBWcUZHUFEyZUlLNnFsYXJXYTgxVnVxelZKakF1VWZoM0gvR3pyMU5wT2ZlaHI0cjVaNmw4VDh5L3VSQlBjbUVxOVphcFNBOFhFa1FY''@;'; put 'put ''U3REU002d1FOcnNSNUtJODdqdE5yTXhqNWVvbUdWSldaN1V2YXFTRldQZ01MaFQ0bVBOWmZMbENud3RkMTJaakRtMkJ4YURFMjdRdVdDdE5DY3hoZjRFUFlyVVp3aCs4bEhHY011ME9ZcnJ0Mmh6UW02RFJmVFVGbTFXODIycTBXZTJhTE1uUDlkaDlGZThEZG5jNWh2NWNTclJEemEyNGZsV3du''@;'; put 'put ''bEdDd1kwbGt6cEtYdWtjRmNqREV4SURjZWdWcXhvZ0RlcWxrQTFsVUpqU3E0b01hdldvRE5BWjYzRW55cUJXV0k1QVNkR2M3SkFJUURyS2lBbjR1Uit2M3Mzdm9zMDVJdy81Ums1TkQwcm5ic1YzNXk3bGVmUUpGbk9VeHk5azZ5UHgvdytoYWlxRXdBcmJGckEzeG9NTDJrN0lQOGt4MzJhZmdJ''@;'; put 'put ''TTYycDRRWXFyWkplcEpZT0FtVXUySm9pNi9iQnFlOTRJQ2RJK0NDdHV1dFJPYnVnVTJ0QkpPSFd4WHNuQTVnNDA3Wk1jS3RPUFczaVZQbThya0o0UkRMdDZrSTlhTERPSHplUlhKajR1SVR4WitzQlFqVUpzM0V5YnRUcyt1YU5jd2xjNG9YRGhqU1RiclRsMDc2NlNERERBSlpZdnhYQzdXY0wv''@;'; put 'put ''MnhrdTRTS2MzTnptS0hwMml6WW41RGFBLzdkczBXWlBmcHpENkhyZXBvRGI2MVJ5M01mbWF1UHJXZjlZdVhHd282ak5VZUJ2bTlxcy96dU1zODdXMDhiWHMvNWtTUnNhTkZhdzlmQnhEcTgvc25FOVFFYzBNUE50bG5mUlFDc1JObW9ZUzJwTWt5NDBSU3FHVmd0dkRkcDZWalpxaG03VklHOHFD''@;'; put 'put ''cjRQWmlWRjlMTGZBNGdxSW9MUXh5L3o1TG5SVVRsOTdsdjRmRDZGRG5lbmNkdmFuL0pFdWwrbS94Tmd3SEtER0MvcGtIakovU1Z3WXZrdURFNmQwdGsrVnNKdk5yYzVpaE5idERraHQ0R3pmWFdMTnF2NU50WG9TMXUwMlpPZjZ6QjZaUlBmd21nT2ZSSi9tNEFwaFZSUHFXbitOMmlRZnFBT2Y4''@;'; put 'put ''S2FzT0tSTzJKM2ZEajJZZm92aW1mWUcvc2podVI2aE4reXVoNDNDbUpSTW9ndFdFRUNyUTMxdGlxVlVxSEJTSmxQZTZZZkNVVWZZV1UrNzdsc3I3SWQ4cG5QdGN6VlE5TWlMQmxWbVlpcWcrY2ZTdjRnQzQrRHFrb0RxbHVQYy9FaEtNT3BBVzRUOUxUNWpINGpxeEVxbEJpSTdrVEJvd1RpSGxt''@;'; put 'put ''c21EdEhFVS9Sd1pZSWVUR3kvNEY5WFpjSEl3czdReEhnTHQyWHQ4R3ZhNy94T1BBVjQ0dkFaUER1MDJtUEkzZlArQ0t4blI1WmZ1aUF4OVd6MG5GNkZMZ0wvUzMzOS90OStQNDQ4SmpjdjJRL09CWFo3OHNkaUNOMi9peTNodUZhbDRTUFQ1Zmc3T1kyUjlHL2J0SG1oTndHOFBHSkxkcnN5WTl6''@;'; put 'put ''R1AzRlpsN0RkWFkyVjU4MDEwc2J4OW1VZHhWaXpGK3B3TW9WRlphaWpmbkNZaENiV290SmE5Vlo5VDZuVHVTWklKR2liRFZ2UGx0dDlwV1NiTFhyZWJyYVRkK1VzOVVvTFd5SHVYWGtaZFJDZlY4VllFQXdGWXJtcTYzS3VlY3N2SU9YVkR4MTJ1aDFlcHdCTndzUDVuM1FvcnlFV0w1T0xGOFFS''@;'; put 'put ''VU1BMjFtdVV1d3lsc3E4bUtJcHpLbUV0OWMxMmQwOW1TVTEwZmxRYUQ1NnBKdG5NNC9UTE9aeFo4SVJTNDNHMTliNXVmSzhqZThCSEVkQWNTQW9kYWpjY3dIZ2UwL1I4L055ZXl3dUY3Zi9TdjU1ZGFyNCtabjgrSWQzRmowWDdQbjJsVGNqeGdmZ3VmQm5vSCsyb1FoS29pUEpsUWFBbmFzZU5C''@;'; put 'put ''d3pybEIzWVZXRkJwUm1VYVdrVlJzVktsS3hpdFJJSmFwVks5VWFJbGR0MkRJMWxWVUNsZVVTK1VXandTQkMwV1Iwc0xjN0dBbDJ0b2RoZ29BQnFNM3I4V29CNUhJd2VVT2VmbEdLQjQreWJJd3hJMXJ4SStkOWtCL3hnUFBRU1kvejVNaStveHZTUDBhWHJaN0wremRGb1hOM1RyYlJwSkQwRUk5''@;'; put 'put ''SEQzYkZoeGF6UlZraGlZNk9SQ0U4blR2U010THNNL2VGMnVNODl5SEpjaC9pV0pHc2J3ODdIUXFsSWdxbWlKZzNSUlJwTTFiSk9sa1FUR2tWbk5iVkxFWjdsV3hpMjJpY1ZyVU1DaEFMQURBdnB6M1B6VUtzazBxa2RjdVgxb3RxWmVHTnZmQ3BpM1ZMdHBYMG9JWVFPbFNtb3lvZkk0dWp1Sm1y''@;'; put 'put ''WjlRWm9IaVBhbGtOcHNvY1BsS2lsaVdQRFpSTC9uQXR0bXRMYktsdXpmUTF3eVg1SUs0V3djMXRMSjdyUUdsb2d0UFdWYWpNYzBwYlh5aDZmbDV1ajhXanhlM1A1TWM1ZkJsN3Z2NEt2TjNEeG5tVmovOWgzajREMExNWFBUOXE0dTMvRDd6OVh6YitxM3o4ditUUC81bStzZkY1KzhNUG9YeTlY''@;'; put 'put ''SUo4QjdTbklOcWROT3FZcTdxaG50MXFZVElhS3ZCRTVzazZHdXFVL2ZuNkRkbTM5cVNKcHIrQk5Gd3RmZ3hXYldOalk3Q3h6ZWZ4ZVdsTmdpemtaUGxtOVZHbGdkMkZrYkNLbTRNbitCOFhreWNtMHllSCtpNVBIUnhwMlhlRGZVL2NQdFhpT0dnZnQ4MjBCV1pqbmJOdHdXMFJVdldGNWJtYkox''@;'; put 'put ''TFhaaWJlbjl3Mk94Y2ZhRzQyTkRYWjJ3WWNhejlxMzVHSUxuU0dGMktKeFE1YTI4YmluNVIzYmVPOGE3RUE5M0VHeHprTzN4dkxQYWZuOTFqUjgvTnlleXhlVzl6K0svbm4xYnVMbjUvSmozLzRmWndIcHRDMXBJYjRtSS9Ramk3ajkzRFE1QS9taGtJS0VTc1Z5b01xT1hodm82RTlGMElxNXJC''@;'; put 'put ''YUxiUlRLaFdMUUVQS1pkWmhabGZTd3F4RHU2NE9oSjNzWUZSVGE3MDRtUUNNeE9KaU5teVVyUFRYYWRuZDkrUXl0aGRrODN3OC9WU2hlazNJeDE2dFlNVzI1UFU0RTJoa2ZsK2R6Vm9KdXBkNmd4NEhId2xGSHhYcmNlVjZsZTFRUm8remJhbkhGY2YxTHE3SDJjcnBjUmNjZ3VseFRxZXp4ZG5z''@;'; put 'put ''TmZnTkcvUzRZaldPYW5FS3E1RXJjUmFLNVg0QjVJakxPM25qK094SXc4S3d5d2VjYUdhc2NTR1Z1Nm5sblk0NHNLSi9YNHo0M3drbjhDZjNSaVpPcDBPdWFjOXlCQmhRMkoxOUo0NTlMdUJCMytsYVNneDM1LzdlQ2ZqRjQwd1VUM2R5L0QzTThXN2pjNHEvZjFyMC9MemNIb3NIaXR1ZnlZOXpX''@;'; put 'put ''TUpmSGdPaDQreVZ4dmxNVWJ5YjU4SU5KdnVrZ0hmNVhNT2kyUE9saEozMWYzallXVmd0bTBlWTM4Y1phUit3djEyb3lGY1R5ZnR6amtoMldyRmR4UFdiTy9QNnpaRk1jZC9MOG40ZWphVERsdlo5THE4RGFiWnp2dXRZbnhkY3pCOXRvL0NyeFNwQnBORlRyQ1JDV3NRcVJBM1p3OHllWUpjZVpX''@;'; put 'put ''U04wb2ltckZhcnpXcno2UFY2czFNdDFnV1UzQXVYOFBOYVBLNnNkQ1lxaWVCeWQzVDAxWS9rNi9Kc3ppWjdvLzdmN3YvQ0p4cTZPNXZyUDh0SzlCdzJlNk1SajdKQ1BTblBkNTRNQW4wSFVBSmZ6b211bnFwbzlaaHFhQ0lKaHpTQ1dnU3lWQWRBKzFESlpGNjJqYkxReG5UUmNTNDhSSjREdE1B''@;'; put 'put ''YVJUVVJWK1U3R0d4ZzRxdlYzR2RwWmFIY2pYbHd3ZElPQUU2dDFBdVZkaks5dDFuZTR3U1VlK2piMnRvU2JYR2Z4d2o2YWJPelFxeVhqekdlaUcybG41cjE4dG42aXRLUnlTQTlaWXUrTkNWNTlRcCs0TCtTVTVQcHNWdGJxOFkyNVNiVGZHV0dCWjh1NUNoTC9vQ1BNdnZMSjlsZi8xRml4L0g4''@;'; put 'put ''WE1vZnhpVCs4R2RGZlUvSWZiRWF2YkJGMy9OU1g0TFZYT2ZoTlkrc3IxL3FlMHNKWGRGYzNCK1JjOUJtbkxYUkNsNmhHbW1nelhOQ05XMEViU1RmRUZEc3pVak8zejBHUEtzT1B2bjdzd1lGMGFqbHNMeVBpaytNQkNWYWdZUFM1Y3VOYlJrYUVlS1h1R2p6eVRxdFc3Wm1rb0oyWVpMRG12ZDlY''@;'; put 'put ''dXI0NzJWb2lrWUd1OTNlYW0veDA0d0ZuMXNLVTdsTFVuemxDM1BRNWl5VlkwTWIwbFFlZlRRemxQdDljYTdLNU5xelJmbSsvNnN6bVZ6NzhnYnVtdmNiUnZKK3d5UG9XTG16QnYzMnpyeCtlMlFCbGZNNTRncjA0eTM2eXJxeEFHMit6dXNxZ1UvUld0SjZOSjRjMFlIS29NZjBqZys1QW9RU243''@;'; put 'put ''aUVSRkh5bmxPUnBNMHdaUW1JMDZpVXc0MG1ONjNHMGxNU2xHdFkzVEtkV1NYV1dsVFVPc05weWtHSnJpNzNnbHpoeXVpbkErakwyOERyVW1tTTlpRExnNmEzeGQyU05McGRJQ05yTUZHcVFHTVdRZG1nNVJKT1dpNlBWS0RJcVJRck5CWmFzSWI0T1dma0d3dFlkcGRYYnNvQWdBK1c2MEV6a1hV''@;'; put 'put ''K242L05GNmgxR1h4ZXQ1dFpUeHMzcE5xY1ZNMGlONktjV24wNnYwVzFXcnNod1RvRU5uQkw5a0hKd05YV1NiczJHWEVoMlJwczNUWXIvaTdMdUM3amUxYVg4VDF2dG92VWtsM0VhbnVaakcyVlpPekxaZnlvTkYrYXl0ZzBsN0VucGI2NXQyaGRNTzhMZUtNbEJza1BDZTBGSzZwQklTQUlNYWtQ''@;'; put 'put ''TmhHMVdHdWxEaU42Vnc2YTRFd2hVRWtETVlKYXNhcVI5ZkFhR2o1UUxsZW9pRkxKdy9uTFBKd3ZjWVp3dVM0VldLWFM4NDZvdEp2cHZjNzBuaWVoak1JUkRsUFhkM2dnM0orSWFVUGFVS0RGN2F5dk14dXBDN3kyU2pZUUtBNXdtOEQ2SHBPMXNhUGU3bk80TmNZNnUvRS9MaWx2ZTRldjBSWnR0''@;'; put 'put ''emI3N1VhRGZkdWxKbkdETFV1TG4vU00zL0M0d0pIMWUwdGlCeitFTmxXTTMzQjc5OGhua0pRSE00L2VCSjVocEZrVGF0QzRqRHkvUnI1V2g2ZFhjVG50MFZ1Y3JJUkxGc3lnbThxTTRVMUtHeVpkbGpNREpsZWJxOGpEa2piRjlDaFl4VHg2a2NYOG5TaVo3RGViaUVKd1luNE5VZUdVSlZORG15''@;'; put 'put ''ZGdsaHppYUFRTDNLS3RMcHVXYlpRWFpLVmx4ZktTOWtrNUFETjBhVTBXYThiTEYxZklDVml6d3pycjJ6VWkvcCsxZDZTRkFwM1F1UDFEaFRnTDhGZk5KajhyeStORzl4QmxQdDlhWDVKdm5jbGthUElZakxjWDZPNFdrTHN1b0M5R2QvaUgzR2NCei9XTUhyUFM4MCt6NTZ5K20ra1pZVW5QMEpi''@;'; put 'put ''UU9JQUVOd2gvQkcxbXBEWVdkSmEzT1N1MzRYWGk1K1J4WVB5N21FNkFpM1FDT3M0SWF6TWp0Zm1UalcxNGZRanBCeHlwcHBuRlZaVVZHakJDQlRXUksrWTNGWjlYbzJwenZ2aGNqRkVrU1poRk0rblA5YzdQWnoveWtYUWFtd09aQUo3Si9YZzhNLzVicWY2a2h1WEVPNUlObFJXaWlrcDh0VlNS''@;'; put 'put ''cjVPS1M4M3Nzam9zZ2tVa0RZcHI1akpUVTVrNWZGbHI3cHRZNzgvNDhYTHVtNjBGbmVraEJzTU9DVDcvV1FKRDdnUDVudVFEb2JyYW83d3ZuTXREN0x3NkpENUplSHQ0cmlCNnVUM0E2b1dpdVU3a1kxdHFkRzZMdWM3bi9TM3FFNmdveGhUSng1aU9TSG9oMlNRTHhobnRjcC9Ka2N0UXVWZ1ly''@;'; put 'put ''a0huUzJMdm0vdzV1T1phYnRPQUdTaDhIODdVZ0Jwb3prUCtaZ3MxeVY5dG9hRWwvSEp1SFROVUc0ejFGaFBMKytVS2dxMFFZNWRaSVEyekY5U3BDRmNSMWw3ZTk4WDkrNys0RDNEQU9EdDVPcE0rbmVaS3d1S2Y3VnYrNHY3MDJqK1RwdWxiTTVuclVranlwd2hBR2NBbE9sQVgycGJNV3JGYVJW''@;'; put 'put ''M2dUSnNCVnE5VUsxYXFORVNsa3YwVmxXS0ZVT1N4Nk94MHVSRHE3T3BNeEtLdURsZDdhek9NNVRCNGZCNXZOU3g2bytPN3dNTUx3dCt4aVpranJnWUliWEtGbGR0Ny9lZzRTNDBmdmM3ck9qa2lLUU81cTR0UzVQSDFHMnV2K25ySGVkTDhXRS92S0ZVTGlyUG04L1ZZa241d2tKMXJUTUxkcjVY''@;'; put 'put ''Z0JNK0hwdWU2d1AyZDgxSmZ3TkdEREhkakVvNit5TnZuM3FMNTAxSjcrcnlwYUs0VDhseUF1eDh1TzljVkRIY1hPTzdXODdsWW5UMWJaMXhhNTMwbGVNL3pvZWs2ZC9CMUhrTlNEbU9TMWVnUDAveUtXTFNwVWFFVTdUVHJwazRIYW9lVzVWZlViNWxmSVlyTU5XN0pld0V1SmIvaW9wM0s1bGRj''@;'; put 'put ''cE5lVytSV2wvYVQ4Q20rd21lWlhHRmgrQmZmSmwwK3c4RjNLYlFRa0hGbVowSlpMdHZqb1pSZThvK0NQZHNZRjkrYXNpOG9ERjc2MWdKOWRjRDNKY3R3SFVTN1oxSUZGVldkVG82QVVONmJIS0MrUUhpUEJ4dmFISEovdER6bysyeDk0ZkxhUzQvTUVtaTh0UFFaZk5Ka2Z2M2hncW15ZVRIaWZi''@;'; put 'put ''K3NVLyt5Q3NpUmJSdWx2dWtEU2Y0RldUOGkwQ25SK2VBdGFQUy9US2xiSDh1Zk43cWh3b2hlU09scmhqcXpWSUJtcTZDV2dVdTRmREVBenk2OW0wVjV5aXZvNXBVUXRqWm93Wlk0UXZCL0V1UjNMUjlWR3V5aVFjTk1sOVVtMmJHcE83eGtnK0ZCSkx3VzlKRnNQNjNZaUtxUm9HcUdSbXJMc0dz''@;'; put 'put ''MnlKMFhkQS9SMkRieGdMSE1ZOWRYMHlvM1FKb2luOGxkd3NIcUtKS3VuQ0tOWGtyWVdyQlphelVTakRwb0kwZVFqazhxMFRBbEtoZksyQ2t6clZ6VlhnekFETU5QNlVVRlFMS2w0RldsSmRERlk2S1BXa0pzdTFpblpXcjY5RkdFczZpWlFXRkViTUl6Q3JNckRDdENpTHBNdFFvdTR0UFREeWtn''@;'; put 'put ''QXQ1WGljSGVoSHNSYjc5V1ZSaExGOFdoeGtVakNvdmJ5R0NLN0U0WGhha0xDMVd0S2NKWFdzUHlhNmEyTFhHOGx2U1c2TGMrcGlPUnpLbzZnejVYcTBjelBmMmZlejM5a3VqajM0eHY1bkkxSzlGcEpQZ2JyeStMNUxLWUFiVzR0bHhNQ2V0bWpaZnNHQ25FS1hMTVhTZmU1ekxQN1hEeW9OOWxs''@;'; put 'put ''QnQ1VURTY0wvQlFMYWVtR0xQbCtlQlpDS0JoSTBNUGpxWFY3UFB5K0xKWkJzY2xwcytuNkYvS3B5ZHZtdGVhOFo4TnkyUWVrZTJESUUreldGMTJENU14d05sanVmVi94cFRCU3pTbXNkUTVzSUM5Nm16c0lhalJnUEtveEZyeTQ2TFpHNmFteThOUlVwdTNtWm5udmRyMVVrRVJyZWJaeWFEdWtO''@;'; put 'put ''dFRIbkMvNktlUER2dkJZRngrR1NvQUtEeTNZYkdiMVVCdGQxQnNMaVFxMk1abmpEdW5pdXFKTWthSGNXald4dWNJb2I0NHlYS2QzNVRCNjZPSDVRM2l4Qkk5NVBSSGwzYnNaTG9yb0owVTVReWZrbkNGNC9wR1N2andXZEY2T0JXRnhQeXJxdXllZmIzUVkzVmFDeCt3T0c0YnIvWklPK0ZUSitM''@;'; put 'put ''eUdoK0w2RXRjQnIwZEZmZmZJZmNITy90c3QrcDZSK2xKZjUrZUsrcDdJOTFXalUxdjBQUy9QaTlYRERHOVpiVGkxM2JYVTUwR3JER2pkRmZONXNDSW1zcDhhRlhaR1ZGcFVVKzc2TjVWYktLcjQvdExtTW0rcEhtQ0duTC9FKzJ5czlENmJCOGNPOTh4a3U4bjVPM2ZzS0Q5R3ZzNk13RWtRY2xL''@;'; put 'put ''cU1wUEdTRVJFOTJCM2RxYm44Qmc1djJQSG5kSVkwL2dnZVE2c2Nxbktvb0xRT29zMG1GUFV6MUZhRjFDTnFyeEN2c3BDMmpTemx4NlphZ3liWW5WMU1WTzRZYXFGVERmQ254WUwvTkhFNWxsQW4yTytIUitiNTRJMUI1c3JPSGFYVkd0SU5TTFR1RnF3c3hxUkxqWnFrRDRIRFcxVmlRVmdIWXY1''@;'; put 'put ''NG1iaGtpcEZpci9qNHNhK3ZrQUFmbXJkN2xyNlE2YjUzNEcrTnY2ZzFzMXJIK1l4SlgwOTZtRXJDTmZBWnJRVVk5SktWdUhCS3JVQXBvdU1Hd3Ywa3hsZS9lYXhLS1JxRWVrN0dZcWM2RGYyTlZuNjg0N3p4NWdYeWlpNXpObTVEWkYrL0VIeUZkajVNSnMzQWJJQWE1aHZ6b1R4aEJvTHJFNE56''@;'; put 'put ''bktWM2V5MEtGLzhRb1FacHExYVFKUXJKZVJBOUlzVENsbGQrYm9FWE4xazAxdXFUYldxa0c3V1hQUTdHVFFZdFRVT2ovZ0IrWjJmeHlCK2pkVzRpS2lPclVxckJJeWNvRmIzU2FNaFh4dGpGZDFlcWRnRkQvR0tsNXMvYmpqTmFHOWI3cTMxcDlZZlJ6WEl3MGF3MVpTcHVQUGt4eEkzZmpuQjQ5''@;'; put 'put ''eWZXbHR2OTczTC9hVE1aNXJua1RmSVBCS2xjSFFMSHZrOW1VZWlGSHF1aUw4VytoNEZtL2xpZlkvaTBhSytlL0o5RCtQWkVoN0orNTdKOXowTWZJN1ozdXZiYWJ5bU9OYno3anJYWWQ1ZGwzU1lkcEN4SG1hM1QwaHR2djV1anNmMTNzMUpiWGc4WVRVL1RqVTZ0RVU4NFN2NWVFTDFOQ3FiVTVw''@;'; put 'put ''Q0g5OUNQbnd2bnl1UVdwSHV2RWR2RWcyT1hQejdJTDZmQytQSXVOeEg2TG1FUGdKNU55ZjNHY2RmUnVmSUE0QXpuVThCdWt4a25yUVVmNUdLYmRNWHFmREt4MTFQY3l3eXlnNThMcWlmcDE5djBWUkx2OTZDM0U2LzM4THM0Tjl2UVgxMCtLdm9KZklnUUVFTFVFbnhPa2FTeXRjeHdqcndiV3dk''@;'; put 'put ''RGFqbjZZWWFJaStsbWwxK3c3N3JoeTNHdUtHVVRXRHNiOWRaVDYzSHdHNWMyN2dpNjVZTGZHdUx0ZGFYcmh2ZlNSN1UrZm02MmZxL0NlczM1TmRQVVVyZUNBWXMvQktleEErOHQ5cXdCOGJIT3pyR3hqcSt4Tjg2eGpuK1RBSmVqYUw5Z0J0Z2MrbmM4UHBOaHVONlRDOUpFK2wzTENrT0ZIM0gw''@;'; put 'put ''aURLd0d4djh2eXVEaTFXMXZDdlFGSmpWUld1cUZSVkZIOXRrckhhSUZSV0NzdDZqVTVVRkgvYlV1d2lIZGszSi9IZUl1MHRTTis1MUYyMlg1bHZYU3JwQzRwZmZHb3FtWlMvZldscWNXckgzR3d5azB5UGpiUVB0ZzkweGN0K0U1UHBEL2dtSnNlbXZ6MUZiUjN4OS93dFRYaWk2SS9jV2ZrN20r''@;'; put 'put ''NS96MS9lVlBhTG5BcGY2RVR2WFl6aUN1Q2RTcVI2Q3JUcjlzQWd0Z0xzZkErazdyNDc5YzQzZEU4L3E1ZnV2SXhpdmR4T1lPMzhDYXNZaEZZUFBERDY3Tk82Yjd6Q1pNVWIwcjNUWVRTVG5LcTNFd1c5dmFJUzAyOHVVSUFBSkFwaFJZTkpCY2FWdEw0bFg5QlVoU3NyWlpjTnMyMURiWUhXRnIz''@;'; put 'put ''QkN6YXIzdWl0QnZ1MmNJK1dId3hhYWh2QjJ3QXBWTlRTakVENmZWRk81ZzdHMytiWFVtYyt2R0pkeWhMbHRrTjFCMitia09xWXBqL2t3b25jR1pXQTUzSXZPajR5MThldXFrNGVIMC9WYWUyTzFQQ1JYbGJFdERpV3FtOHltMUxaeS9qMy9PQVdVb05QQUI5VVBRVktYVHZqZXZ5bS94T3NXSmtx''@;'; put 'put ''T3FEcUNNQ1ZuWG9uRWRiVzZBOHEzTHZHN3d4UlAyTXpWaXRKZTVsN3pON2pIUnp2SE5qeUNnNHB2NFRacTdoZGlwV2N6ZWVkQkdpc21UMHZ4SnI1OC9QNTUrTE54Yy9QeU0vUjRldUtueGZHVDZFUEZUMi9NOS8reUJYeXZTbno1QWFBQVkxOXFKOXBjUnN4d0tERUhKTWhVYkRGZkp0aGNnTzN6''@;'; put 'put ''WW9CSTlsbS8xMEVIOGxPMjFFRUlzbEV1NmMwdDQ2dG1mb0YrRjV3SmJxL2FDOWZ5Y09rK21EK2JoUDBlWFozazR3TEViMTdYcnF1aVg2K3ZoMCtWNVorcmx5YlFmOFAyeitjMHdBQkFBQUFBUUFBMzV2bWhsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Ui91MEVZUVBGQUFBQUNB''@;'; put 'put ''QUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd5WURBOHZFLzRIL1cxZ1NHWUFpeUlEUkVBQ2xJQWFoQUFBQWVOcDFsRDlNVTFFVXhyOXpYZ2VpZzhIQlFTc2FEVlF0ZjZXQkttaHRKS0xTcGkzUG9ERmF3OEJrMEFnSkxrWVM0OFJBUXVLaUF5UWRESEV6Y1hGd2N0REJSQ1lIblFoTGJZaVN5QVRSNTNj''@;'; put 'put ''dUxXSmIybno1dGUvZCsrNDUzLzNlbFhYY0JqK1NwbzVSamZCbEhvTmFRRVRIME82RjBhSHpPSWtTQm1VTTU2bDJlWTQremVHaU5DQXRrNGpqTjY3SVFyQ21yOUVub3ppb2FYVHBWWnpRKzlSMXhNbCt2Y0U1ZWNUc3R4dlB1UnpUYTg4aFU3S0pROTREdE9vdkhOVlh5T3NpeDI2UWs4am9LUFdk''@;'; put 'put ''L3o4amcxWCtEbk9OWjdpbFVReDRJOGg3U2tWNC95a3lqak1jd3pwMUNtMWF3b2c5TTNRR3pmb1dMYnFBL1RxTnMzSVBPZGE4U1haSkNUMmFEZjdJSlNUMEhFN3JZL2phaEU2eVIzMTB5aDNPZmNUblpwSEdNaEpZRGo3b0VReGhCU2x2R2ltN3JnL2RlTi9teUJONnVJWTJtZUM4TE85M3M3Y2tq''@;'; put 'put ''bXVFdmVYUXBNb3hNNGpLQVl5VDdmS092alppMksxNWw1NndSbm5CV3ZhZ1ZkNGc0ZW9hUndRL01DQnhkejFHdjdhOHFxTVFTUFBQdk5zaHJBYWZ6RC95SjFYMDl1SlV4YnRxNldFTU81cC9PMlgrMFdlOWdHdk9xenJ5UHBMV2kvKy96RGY2TjBTV3FCWFcxTC90WGJVc0Y4YXM4L2VmekQvejJX''@;'; put 'put ''ajkycHJWdE41dC9Rb3RSOXdYNjFmbnVLZm1oOVcwR3kxcnR0OWwwcXR2clBjTHZZdVNBWG5aK25BWlpBNHNoNWFGYlRJdjBvMW04OWI2cTZINXl0NHFERFVnRmdwelhlYldzbE5EZStlWXB4cE9sVE5Xb2UyUGViUUw3UjF3T2JROU5QL0s3NExsc1pxMlZ6TEw3SmtLelB4WE1rVWxxUGRJNmo1''@;'; put 'put ''ZVE1Q3JQTE9hTlo2VzE1UjF3Q3R1blRmWW9GNENta1RjbTBDY1o4S2dPMU9XeUNXeWdKczZ5N09DNTFKb0RoM1NpeGFxVFJlRG9zdUh4N25jMXpwZkgvNWY3Unp3cEFBQWVOcE53bDlJR25FQUFHQXovNVNlcDZYcGVkNmR0L004cjd2VHpwKy8wMk1NMlVORWlNVHdvY2VJSVJFOVJBOGhFVEZp''@;'; put 'put ''aEVoRVJBOFJFajZFakJFU01ZYUlSSXlJaU9GRGhNUUlrUkV5aGd6cFFTU2toNzNzWVh5ZlJxTlovcWVnT1JuQUJ0YTBxdlpFKzZCOUhuUU9YZzYyZFRhZG9FdnEwcnFTcnFaSDlFdjZndjZQWWNhd1ltZ2JrOGFjTVc4OE05YU43YUg0Y0hhNGJFSk1LZE8ycVdwcW1hRjUzcHd4ZnpiWHpWMkVS''@;'; put 'put ''cWFRWGVUR3dsblNscXJsQWJXaFVUU043cU1WdEdVMVdBbHIzRHB2L1dBOXRNVnRkeVBZU0dua1pUUTUycmRIN1F2MkwvYW12ZXZJT0pwajNGalZPZU04ZG5aZElkZUJxK3hxWVRZc2dXV3dDNnp1SnR5U2U4NTk0dTdoVVh3VjM4UUxlQVgvNVVFOEs1NE56NTJuNWVrUlF3Uk9TRVNjeUpJcE1r''@;'; put 'put ''MW15QnlaSjB2a0JYbExQbEloNmkyVm90SlVoc3BSZWFyaXpYbnozcEwzd252cmZhUnBlcFhlcEhmb1E3cEluOUhucjk0eERCTmlYak5UVElxWlk1YVlEUE9SNmZtMFB0U0gremdmOE1WOVIreDdkcGxkWjdQc1BsdGdlMzZ0MytHbi9jQWY5Kzl3ZTl3eGQ4cDk0MnBjazN2aW5nUEZRRGx3R2Fn''@;'; put 'put ''SGZ2SXkvNVcvNXUvNEZ2L0V2NHczeGp2amZVRVd0b1FEb1NSVWhDdmhYdmd0OUVWRWZDTXVpR3ZpbHJnbkhvbW5ZbFdzaVQvRXR0aVRKcVVyNlY1NmxEcFNQNGdFc2FBUWpJWWNvYzZFWmdLWk9KSW41Vmw1VVY2WHMvS2hYSlRMOG1VWUM5ZkN6WEE3L0FLR0FBNGtvSUlFbUFXTFlCVjhBamVn''@;'; put 'put ''SGFFaTA1SHR5RFcwUVFEbjRBcmNnTHN3RDB1d0FyL0RCdXpBdm9JbzJIK0FrbFEybFQybG9YU2plRlNJQ2pFNkJtUFRzWExzT2xaWFVSVlhPUldvY1RXaHpxcEY5VXc5VjJ0cTR5OU1NOG1nQUFBQkFBQUJQQUJnQUFvQVFBQUVBQUlBS0FBNUFJc0FBQUNEQWJVQUF3QUJlTnFOa3MxT3dsQVFo''@;'; put 'put ''Yzl0MFlBYTQ4SzRZR0c2TU82RWdnUWlMalZzRkRRU3dTMElBcEZhTGNYRXJVL2kxdmN3eHA4WDBJMlA0RE40ZWp0VUpZMHhOK1YrZDg2Wm1kNHBBSmJ3Q0JNcWtRS3d5eWRraFdXZVFqYXdpQk5oRTJXY0NTZXdoanZoR2FUeElEekwrSWR3RW5sbENLZVFWZ1hoZVJSVVRYZ0JEWFVyL0lRVjlT''@;'; put 'put ''YjhERnQ5Q3I4Z2Fhd0t2MkxPV0EvNTNVVGFzTEVERjVlNGdZY0JldWpEaDRWN1Bubll5S0ZJYWxPMTZPdHJ6NGhjNSs0d2E4VGNDMlJRUlpkNW5xN2tZcWhkUjR6MU1PYXBSU1ZIbDYzWE5vNnhoeVpxcExpOGphbk1PSTgxNVdudzVERSswTzlqL2VqMm53NE5Say9wY3NuQlRROVlvOHM5eU8x''@;'; put 'put ''UWE1RVBxUWZhUHZmT0g3TUk1dWZ6VkVhVzYvcFhaVmZYZGFLcUdXb3V6NU9ja1dUMXFQcU1qam41aVNmTGZkTFQwVGY5N3BtTnZXV1RzVGIvYjRIRGoyWlNsUWxWdEdweEZiVldZdThjdHZpN2lVTDA5VXM0cDYrcnEzb3kzVXBVc1k0cnZ1T0Fpa2ZQOEF2Y3ZYaHpBQUFBZU5wdGsxZHNIRlVV''@;'; put 'put ''aHIvZnNYZmROazd2dlZmSFh2ZkVLUzVyeDdGakp5NXg3TVJKeHJ0alovRjZGOGE3Y1d5NkJBSWVRUERDTStVSkVMMEtKSGhBb2xmUmV3ZlJlYVFINzl3SlhpVHV3M3ovR1ozem56UDMzaUVMZDUwYllCNy9zMVNiZnBERkRMTEp3WWVmWFBMSXA0QkNBc3lraUZuTVpnNXpwK3JuczRDRkxHSXhT''@;'; put 'put ''MWpLTXBhemdwV3NZalZyV01zNjFyT0JqV3hpTTF2WXlqYTJVOHdPU2lnbFNCbmxWRkJKRmRYVXNKTmQxTEtiUGV4bEgzWFUwMEFqSVpwb1pqOHRIS0NWTmc3U1RnZUhPRXduWFhUVHd4RjZPVW9mL1J6ak9BT2M0Q1Nuc0xpZHE3aWFtN21CTzNpZjY3bVdwL21ZTzdtTnUzbWVaN21IUWNMY1NJ''@;'; put 'put ''UVhzWG1PRjNpVmwzaVpWL2lXSWQ3Z05WN25Yb2I1aFp0NG16ZDVpOU44ejQ5Y3h3VkVHV0dVR0hGdUljRkZYSWpER0NtU25HR2M3empMSkJOY3pLVmN3bVBjeXVWY3hoVmN5US84eE9QSzBneGxLMGMrK2ZtTHZ6a25sS3M4NVVzcVVLRUNtcWtpemRKc3plRlhmdE5jemROOExkQkNMZUozM3RG''@;'; put 'put ''aUxkRlNMZE55cmVCenZ0QktyZEpxcmRGYXJkTjZiZEJHYmVJKzd0ZG1iZEZXYmROMkZXdUhTdmlEUC9tU3IxU3FvTXBVcmdwVnFrclZxdEZPN1ZLdGRtdVA5bW9mVDZoTzlXcFFJMS96alVLOHkyZDh3SWQ4eEtlOHh5ZHFVclAycTBVSDFLbzJIVlM3T25SSWg5V3BMbldyUjBmVXl3TTh5Q004''@;'; put 'put ''eWtNOHpEWGNwYU04dzVNOHBUNStWcitPNmJnR2RFSW5kVXFXQmhWV1JMYUcvSFdqVnRoSnhQMldvYTl1MExIUDJEN0xoYjh1TVp5STJ5Tit5OURYR0xiU1NSR0R4cWtLSytrUGVSYTJZWDRva2toYTRiQWRUK2JiLzBwL3lMT3lQYXVROGJCZEZEYUhFNk9qbGtrdEhNNEkvQzJlZTlSamkrY1RO''@;'; put 'put ''U3hzemF3Y3lRaDhiVlk0bGJSOU1ZTTIweTltMEc1ZXhsMFV0bWQ2eERNOTJrMTYzSVcvdzVzaFlSam9PSjJLRDF0T2FqUm1wWktCUkdiazZ6UWRITk9oTTdPRGs5bWgwM1J3RExwTTFaZ0xmeW9lTFNtdERIb3M4M1dicEtTWnBzZWJKbVdZMCtORTQ4TTVxZlF6MFBPZnlWS1prYi9IMjhHVVlV''@;'; put 'put ''RnZPT3FFVTZORE1mdHN3WGlHN3N2UUU5UGExMjltbkhTUjN6OTkycFBUcDUyZU9GaFc1YklzV09uckhYYXNxV3MxYnRCckhNWmQ1UFZHb3JaamowWEg4c2JQcTNSZGFhaSsybU9OeHdhUGpiNCtZelRoSXYwMldGSVM5Rmptc2R4amhjZEt3MkJUZGlqbEpOeWdvcWtoeHlxMllzbDh5NTNGU1Bm''@;'; put 'put ''dXAyV1JOZjNaNlRoZ25SL1FKTHJkMDdMQSszMk1OdnVhMW5sVytqUk1jaklhaTdqSnVkYlkxQjVGYkNjdlludnFIN2RsdHlFQUFBQjQybVB3M3NGd0lpaGlJeU5qWCtRR3hwMGNEQndNeVFVYkdkaWROa2t5TW1pQkdKdDVPQmc1SUN3eE5qQ0x3MmtYc3dNREl3TW5rTTNwdElzQnltWm1jTm1v''@;'; put 'put ''d3RnUkdMSEJvU05pSTNPS3kwWTFFRzhYUndNREk0dERSM0pJQkVoSkpCQnM1dU5nNU5IYXdmaS9kUU5MNzBZbUJwZk5yQ2xzREM0dUFQNGNKV0FBQUFBQUFWaVk5bllBQUE9PSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9u''@;'; put 'put ''dC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGWHdBQk1BQUFBQW9PQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZktUYkxFZEVS''@;'; put 'put ''VVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNmQUFBT2RqK2hmWFJIVTFWQ0FBQUpOQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxVQUFBQVRnQUFBR0JvcWEzK1kyMWhjQUFBQ2FRQUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTUVBQUFBREFBQUFBOEVkOEJ5Mlp3WjIwQUFB''@;'; put 'put ''eEFBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbndBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTaEFBQU9Ea0FBRzA4c05HeU5XaGxZV1FBQUVyQUFBQUFOZ0FBQURZTGE0WUhhR2hsWVFBQVN2Z0FBQUFoQUFBQUpBZUVCQ0JvYlhSNEFBQkxIQUFBQW9zQUFBVGFzbmc1UG14dlkyRUFBRTJvQUFB''@;'; put 'put ''Q2J3QUFBbnB5VlZmYWJXRjRjQUFBVUJnQUFBQWdBQUFBSUFLUkFoNXVZVzFsQUFCUU9BQUFBWVVBQUFOa0wrYUdTbkJ2YzNRQUFGSEFBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWV1FBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWNkFBQUFBWUFBQUFHOUcxWW1BQUFBQUVBQUFBQTFDU1l1Z0FB''@;'; put 'put ''QUFEVHdaMkdBQUFBQU5TK3BPdDQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNMYkZWVkZsMzdmTzVyM3dNc3BYeUVVZ2toVUFoV2hqQ2lD''@;'; put 'put ''S054bWxwSVJ4bXNCQTBZTlk0ZmtNOVVaS2JHeUdjVXpVanF4SkdLWkVMUU10cGdCVVRGcWtoZUNQNklJZmdKRWl3RUsyTDlBU29hSThwMTNYMGZjRXY3WnV4S1YzZjNPZmZjcy9kZTUrM3pJQURTR0lvcGtNcXFtbG9Vd05HRE1JVGxINEdCbmZPWHVua29tWHRqM1J5VXpwMHpkdzVuZy81b05K''@;'; put 'put ''NFJzZVZ6YWZSREdZYXJ4MklZYW14TFBCb3MwRlVsYUVEQWg2VG5RajR4VUgwZUphY2hxQW9ieUI0VHNRSy9JSlNCTU53RzU4a0FhVU1HUGJpekkyRTJiQTczaHZ1UjV5ZjhKdS9JN202OW4yQkFwLzgvQy8rZGQ0V092Q050ZVVmMmh0azhJODNod1hCcmhMT2Y0Ty9PQ0YxMml2RHpzSUZaTWhq''@;'; put 'put ''Q1RBOW50a1lRQmhXRXhRV0V3MWpDNC9kRWdQRkVDaGNUQlpoQUZESzNFMW1wUllSZ0tlN256QWNJejR5dm9QOUZRdkFTSVhpWk1IaVhjSGlmY05oUGVIeENCUGlVQ1BBWkVlQW9rY0kzUkFvbmlFSlc3eGV1RmhKcEtaSWlGRXF4RkpOTHBJUThrSlZOYysweFZNa3dQak9LRU4xM3ZHT2pPN2E2''@;'; put 'put ''WTZjNzlxZ2tDbEJGRktLYVNHTWFrY0Y4M01VVm9rZ0NqU1RRU0R3ZXhrck9ieVFLOFJoV2MvNFQrQy9uUDAxa3NKRklZUk5SZ09lSUZEWVRCWGllU09FRm9nQmJpRUswRW9YWVJxU1JKZExZVHFTeGcwampkVUx3SmlHYW5RQUhpQXcrSnVLOEdNMkwwYnc0ell2WHZIak5pOU84T00yTGsvN1Nu''@;'; put 'put ''L2s2Vjg0bFJ6bnlYTFdDR1JyT0dsZXd0bU5aMC9ITXpBUm1aRDRXNEsrb3c1MVl5Rm91eFRMOEEvY3hDdzh3K28yTTZIbFc4aVZXOEYxV2JqOHI5aWtyZFpRN09hRW5xNGp2TFluT2w3bFh6K0ViVXNlNGUxSmZXNm03aHZEN2J0U3FJOUg1eUR2eUpYR3NteWVQNVQwYlgrYis3Z3UvRGcrRUQ0''@;'; put 'put ''VVBuVDJTTzVGTllkUHAvNzVJakh5dXp4aVVxaVpFTldGd0RXRnhMZUZ3SGVFeGt3aW9pSldjRTZsQlZBMUcxV0RRUWdUWVFBUmFhZEZLaTFaYXROS2lkVFU0UkZnY0ppdzZDSXVmQ1krVFJDQzlwVGZyMmtmNmtQdEtYM0pVVWRHS2lneVNRVnpmWURUT0lUTG9UZlJRcFlzcTNhalNiVTdwVnhC''@;'; put 'put ''SnBUdU5KMGpFazFLbDI1elN6MmpjYVZST28wcHBWS2VVSG1zOFZ2Y3JSSDVkUjlFNjFhekpSUmdwMTJxY0tkV3ZWZjJhWE15UmlrMHU4a2pMSmhGL1V0RldzNUNTTVhJeDN4NTllbFV4d21tczE3V01heVlqYVdRa3EvQTRvM2tDVDZJSjZ4alIwNHhrQTA5akszZWI1UzUzY0hlSFdJTU83dXdr''@;'; put 'put ''ZDlDSGIrdlB0d3ppaW1XcVo0TmUybEdLdzZXMGk5bmZMcVVsYWwvS1R0UVdsSkhibWYvdHNseFd5Q095U3RiSU9sa3ZtMlNMYkpYdDhwYnNrZzlrbnh5VXcvS1ZmQ3MveWtualROb1VtWDZtMUF3MTVhYkNqRE1UekdXbXl0U1lhV2FHdWQ3Y2JHYWJCV2FSdWNjc013K2FCdk9vV1czV21xZE1p''@;'; put 'put ''OWxzV3MwMnM4UHNOTHZOSHRObTJrMkhPV0tPbTU4c2JHQjcyR0k3d0piWllYYVVIV012dEJQdDViYmFYbWxyN1hYMkJudUx2Y1BXMmIvYmUrMTk5cC8yWDdiUi9zYythWnZ0QnZ1Q2ZjVm03UnYySGZ1ZTNXc1AyRVAyQzN2TS9tQi9kc1lWdUY2dXhBMTBROXh3TjlxTmRSZTVQN2hLTjhWTmRk''@;'; put 'put ''UGRUSGVUdTgzTmN3dmQzVzZKVys1V3VFZmNLcmZHclhQcjNTYTN4VzExMjkxYmJwZjd3TzF6QjkxaDk1WDcxdjNvVG5ybjA3N0k5L09sZnFndjl4VituSi9nTC9OVnZzWlA4elA4OWY1bVA5c3Y4SXY4UFg2WmY5QTMrRWY5YXIvV1ArVmIvR2JmNnJmNUhYNm4zKzMzK0RiZjdqdjhFWC9jL3hR''@;'; put 'put ''Z0NJSWVQQjMxWmlONWlYS2xjclZ5WThSWXJOeXNubVhLS3hNOFZibENlWkx5M3lJMmc5V3VWYTVTSG1ING1Tcmx5aFhLa3lOR3ZmS3o1dFZUdGx5aVBFbjk3Y29uMUROS3VVbDVwSEpHK2M5Mk52a1o1ZnJ1bVZVL0UyTzErcnN3cGl0dlZsNThobVZXSEx2YTg1VGZWRjdabGVNTXFOMlZhNVZI''@;'; put 'put ''bU96L1kybzNtYXRzZDR5cHlpM0s5V2VZMmN0cTl2NDN4L25NZHNzakUxeWYySE1uTzFIVEplb3ZWMy9TcnRRY1BxYjJyRVRtNHlnNjJUa1YrYlA4aldwUGptMmRFMnNtcms0Y2RhelBuSjN6UjNPYTFYN1dManFsM3B6R1BsVDcvY2pPMVRUT1dLenRXSHRKZjF6Wk9HL3ZxYjFZYS9TUjZ2eHJu''@;'; put 'put ''VDlWMzlXdWMvUkV4THJ0NUs5USswU3VnaHRQcXpycGowL1FwSVJtNG9vazdlZlV2algyNjN3OUYyYXcrcHZVSHl0dFpNS3VVczZvSjU5OVhPMjdOYnFyMU42amRuTGw2bkFMK1h6bFpLV1NiNXljTzkzWjM4Q2RaeHFjcC9kUzhONVZ6cXhFdDFQSHJqMmFYVEM2WVFmNEhXOWlLWXpEUmV4aFVl''@;'; put 'put ''ZnV4YjQ5aVQwOTZ0eTk5WTVhckoyN0Qvdk9GUGFoR3FJdnJtS2Y2OGRPTjUzZmZXWVFwZHJMQjdQcnpXTFhtcys3MnhDOXZZMW5SMS9EOWRheTgvMUplOS9WN0g2dnNrTytobDI0bFRlNm82alhXK1VxZkNjZWo3TVREMEtMOXRSVzdsZmtIUDF1RmtEQ1dJVkxjQXQ1T2J0ZGh0OTF5aGpiS042''@;'; put 'put ''OUwrU3VMK2N1cjBRdFI5OVc3ZTVWUHFpc1p3YTdFNnlWd0YzSzY1VS8xcXoxVlR1RFAvSTl0K0YyU1VtQkZFcGFNdEpUZW5YZDBhOTlsNTkwQUFBQkFBQUFDZ0FjQUI0QUFVUkdURlFBQ0FBRUFBQUFBUC8vQUFBQUFBQUFlTnBqWUdaeVovekN3TXJBd3RURkZNSEF3T0FOb1JuakdFUVl6WUI4''@;'; put 'put ''QmpZR09HQm5RQUtoM3VGK0RBNE1DcXAvbUtYL0d6TXdNSjlrMUZGZ1lKZ01rbU5pWlZvUHBCUVltQUR3YlFxMUFBQjQycldUV1ZDT1VSekdmLyszZlJFcUZQWDI5bW5UUnFJVVJmYWx5TDZVck5teXI5a2E2eEJEUlZMSW5pU2pHUk5UVTdZYjdyZzFZNHkrejVWYjdnd2R4MWRNTTh5NGNtYmVj''@;'; put 'put ''OTV6enB6bm5IbWUzeDl3b2VzTFFYU1BWT3FaT09ldVVxekhKWXpEallHVWNJczY3dEpJRTgyMDBDWWVFaUNESkV3R1M1d2tTYXFrUzZaTWxSekprMElwa2hJajFYaGx2SGVKTW8rYnJlWVQ4NHZsYmdWYXdWYW9aYk9pckdGV3VuWGY1aC81VFNsOWg4V05IdHFQYWVPWitFcC9NY1Vtc1pJb0ta''@;'; put 'put ''SW1HWklsMlpJckJiSkJObXZ0bDhaYnJYM0liREhiemMrV1lRVllRVmFJVTN1b2xmWkxXMzFVTDlSejlWUzFxMWIxU0RXcmg2cEpOYW9HVmEvcTFEVlZxMnBVdGFwU2xhcENsYWt6cWxTZDZIelRtZFdaOVAyVG85eFI0TWgzeE5nSDJ2M3NQbll2dTV2ZDZQamE4Ym5qOEllUWQ4bGRYdjJuNW01''@;'; put 'put ''NE81UGdqMXNFby92UCtJZEcxMGtYWEhWMjduamdpUmZlK09CTEwvem9UUi82NGs4QWdmU2pQd01JSWxoblBFaW5Ib3BKbUU0a0hCdURpU0NTS0tLSllRaXh4QkZQQW9rTVpSaEpEQ2VaRVl3a2hWUkdrVVk2b3hsREJwbU0xY3hrTVo0SlRHUVNrNW5DVktZeG5SbGtrOE5NWnBITGJPWXdsM25N''@;'; put 'put ''WndFTFdjUmlUVm9lK1N5bGdHVXNaNFYrL3c1MnNwdGlEbkdjMDVSVFJnWG5PVWNsVlZSemtSb3VjWVhMMUhLVjY5elVGUDFrOURZTm1xVjdtcWFmYlJXcnRSM1JiT0JzdHpmcldhUDdYWno0N1ZiaFh4eThRRDJiV2RsalpTMmJKRWFQVzlqT01ldzRKRnp6R1NsUnVnSWl1S04zSHFCcGxnUmRE''@;'; put 'put ''L0hkWjRxY1ljU3lqYjFzWlI5N09NQkJYVXY3T2NKUnZYV1lVazV4a3RlNm1ucXhUcnpFVzN6WUtINmFmODhma00ycTZIamFZMkRBQXBLQk1Jd2hqR2s5QXdQVGJpWldCb2IvSWN6Uy80Mlpkdi8vd25TSlNmRC9sLzkrSUQ0QTJzOE5zbmphclZacGQ5TkdGSlc4WlNNYldXaFJTOGRNbktiUnlL''@;'; put 'put ''UVVnZ0VEUVlydFFybzRXeXRCYWFVNFNmY0Z1dEY5WC9DdmVYTGFjK2czZmxydkc5a21nWVNlOXRRZjlPN011ek52bTNsak1wUWdZOTJ2QkVJczNUV0dscGNvdDNyTnAxTVd6UVRodG1pdSs1UXFSSC8xR3IxR295RTNySHllaklBTVR5NjJETlB3UXRjaFU1RUl0eDFLS2JFcDZGNmRNdFBYV2pO''@;'; put 'put ''bXYxZHBWQ2hYOGZPVUxnUXIxLzI4ekZ0TlgxQzlqcW1Gd0JKVVlsUUtBaEVuN0dpVFpqRFZIZ21hWS8wY00rL1ZmUUZ2bXBHZy9yb2ZZa2F3cnAvUlBLUDUwQXFESUxESXRJTkFrbEgzdDRMQW9iUVMyQ2RUaU9CWjFxdjdsSlV1NWFTTE9BSXlRNGN5U3NJdnNSbG5OMXpCR3ZiWVNqemdMMGlW''@;'; put 'put ''QnFWbjgxQjZvaW1hTUJEUFpRc0ljdGtQNjFhMEV2Z3l5QWVDRmxaOTZDd09yVzNmb2F5aUhzOXVHYWtrVXprTXBTdVJjZWxHbE5yWUpyTUJBNVNkZGFoSENYWjF3R3ZjelJnYmduZWdoVEJnU3Jpb1hlMVZyWjRCdzZ1NHMvbHU3dnZVM2xyMEo3dVlObHp3RUhjb0trMFpjVjEwdmd5TGMwckNn''@;'; put 'put ''cE1kTDFFZEdTMG1KZ1lPV0U1VFdHVlk5MFBidmVpUTBnRzFCdnJUS0xZbDg4RnMzcUZCRmFkU0ZkcU1GaDBhVWlBS1FZZThxN3djUUxvQkRmSm9CYU5CakJ3YXhqWWpPaVVDR1dqQUxnMTVvV2lHZ29hUU5JZEcxTkthSDJjMkY0TXBHdHlTdHgwYVZVdkwvdEpxTW1ubE1UK201dytyMkJqMjF2''@;'; put 'put ''MTRlQmdGakZ3YXR2bk00aVM3OFNIK0RPSkQ1aVFxa1M3VS9aaVRoMmpkSnVyTFptZnpFc3M2MkVyMHZBUlhnV2NDUkZLRC96WE03aTNWQVFXTURXTk1JbHNlR1JkYnBtbnFXbzBwSXpaU2xUV2ZocVVyS2pTQXc5Y1B3NkVyUXBqL2MzVFVOSVlNMTIyRzhlR2NUWGRzNnpqU05JN1l4bXlISmxS''@;'; put 'put ''c3NweEVubGtlVVhHYTVXTXF6ckI4WE1WWmxrZFZuR05wcWJpSDVSTXE3bVg1cElyN1dENmpaQ2Z2bEF1UllTbUtaTjdnQytMUTdDN2xaRmQ1TTFIYXU1VFRYZVd0UkhsTUdUUm8vNGY0bmtKOHgrQ1hRSHdzODRpUDVYSEV4MUlpUHBaVGlJOWxBZkd4bkVaOExKOUdmQ3huRUI5THBVUlpIMU5I''@;'; put 'put ''d2V4b0tEeDJ3ZE9seE5WVGZGYUxpaHliSE56Q0U3Z0FOWEZBRldWVWt0d1JIOG13T1BxNWJtbk5TVG94RzJmTmlZcVBSc1lCUHJzN013K3JUeXB4V3Z2N0hIaG01V0VqdUozN0d1ZDVZL0lQZzMrTEYyVXBQbWxPY0hDbmtBQjR2TC9EdUJWUnlhSFRxbmlrN05EOFAxRnhnaHVnbjBGTmpNbUNL''@;'; put 'put ''SW9hMzN6azhrcXpXWk0xdEFvZlR3UTZLOXJCdkdsT2pDT2xKYlNvU1JvQkxZT3VXZEEwNnZQc3JXWlJDbEZ1WXIremV5bWltT3hGR2N5QUtTamtwckd3N08ra1JGcFlPNm5wOU5IQTVVYmFpNTRzTlZ0V2NZVzlCKzlqeU0wc2VUZFNYcmdwS2UxRm0xQ252TWdDRHJtUlBiZ21nbHRvNzdLS1lr''@;'; put 'put ''cFlxQ0krQ0cwRisrMWpSQ1l0TTRNdWdTSmtjYkt5RCsyS0hUbWlnbllDMzNyU0t1L2JRdTNQZGZJZ01KdWRidWRCbHBHaTgxMFY5V3A5VmRiWUtGZXYzRTBmQjlQT3NMSG1GMFVaVHk1NzM1NFU3RmVuQkxrQ1JsZDJ2KzVKOGZZNzF1MUtTVDdiRjNaNTRuVktGZkpmZ0FkRDdwVDNJaHBGa2JO''@;'; put 'put ''WXBSSFByMXQ0TWtVNUtNWkZjeHdYOU5JZTdZcFYzNk5kMkhmdG8xWmNWbFN5SDJYUVZYVFdic0kzUGw4STZrQXFDbHFrSWxaNE9tUSttNTJhOExHVXVDeEYzTE5rMTBYMEhUd2hIZUsvT01TMS8rdmNjaFRjb3NvU1hXalhDY2tIYlI4cjZLMGx1NU9IS2tabjdieHNaNklkU1Rmb0dvS2VTQzQ0''@;'; put 'put ''L2w3Z0xvOFY2UlR1OC9NSHpGL0JkdWI0R0owR3Zxcm9ETVFTNTYyQ0JJc3EzdEpPcGw1UWZJUnBDZkJGMVVLekFuZ0p3R1R3c21xWmVxWU9vR2VXbVZNQldHRU9nMVhtTUZoakRvTjF0WU91ZHhub0ZTQlRvMWZWanBuTStVREpYTUE4azlFMTVtbDBuWGthdmNZOGpXNndUUS9nZGJiSjRBMjJ5''@;'; put 'put ''U0JrbXd3aTVsUUJOcGpEb01FY0Jwdk1ZYkNsL1hLQnRyVmZqTjdVZmpGNlMvdkY2RzN0RjZOM3RGK00zdFYrTVhwUCs4WG9mZVQ0WExlQUgrZ1JYUVQ4TUlHWEFEL2lwT3ZSQWtZMzhZeTJPYmNTeUp5UE5jZHNjejdCNHZQZFhUL1ZJNzNpc3dUeWlzOFR5UFRiMktkTitDS0JUUGd5Z1V6NEN0''@;'; put 'put ''eHlkNyt2OVVqVHYwa2cwNzlOSU5PL3c4bzI0ZnNFTXVHSEJETGhSM0F2ZFBmN1NZODAvZWNFTXYyWEJETDlWNnhzRTM1TElCTitUeUFUN3FpZHZreXE4MmZWdGFsM2k5SlQ5ZHVkZDlqNUcyVXp1aXdBQUFBQkFBSC8vd0FQZU5xMWZRbDRaRldaNkRublZ0V3RMYW5VbnFTeTFaNmxrdHBTcWV5''@;'; put 'put ''cDdFdGw2WFJuN2U0a3ZTWHBwcUZwNklWRlFCQWJCa1ZSbkhFYnhVRVFCMWthQkZxVVpSeEdCWjQ5TGlNT09vN29tM0ZHSGJmbkcwWjBKRGZ2UCtmY1czV3pOVGpmOTZDVFZPNzl6L2FmZnovL2Y0S01hR0U5aVQ4dWVKQ0FMTWlKU3BBZjFhQVVha0VkYUFpVlpGdzluZTJ0NmFaa2JUaFFXVnJz''@;'; put 'put ''c2hZWk5BUVpZM1ZhcjlVck9wTk92ek9aOHFlU0taSDlGT0dqOHBRK296L3BHM2lTVWo3TE1LeEJPcG5DSDVmK0RuZjgzKzZlQjNwNkhuaWd4K2YxOXZUMEhPbnhubnZnaU05N3hQdkFBdzk0anh3NU56RHd3TXBBMWQ4TFArdjFCcjN3NzVhanZvR0J3RUg0Tk9CdDcvRWR1YjdaSGQxMTFWV1BY''@;'; put 'put ''SFhWcnVpcU4rcUZmd2dSTkxyK092b1dPYy9XRnN6NEVNWm9BU0ZVbUVXRUNFc2FMQWh1WVZTajBWZzBoVUZya1ZaMDE5bVRndDhWU2pVMkpSTXVwMFBubnpsVDBxY05oOHM4b1pDSG5KZDhQNnd1S3cySFM4dXFFVnBmUjMzNFhud0RlYkRJaDR3SUZRbncvU1ZFeHczQXR4dGhYQStxUk1PWkFZ''@;'; put 'put ''dU9JSzFBTUVGNDJZUU5oc0pzWVZHQklJcjZCYk9SNlBYV3JBWVRZaUdqQ0ZWV2xKZEJLMDlwU2JFYnhyZGJjLytKNVhWWVRJcCswWjltWCtrayswcUs3RXVrTC9HYnNTdnRKeUs3SXUrTlRFUXV0eCtQWFdHL0FqNjlGNTZjc1AzTmUyUHZ4UmVleno0Qy8yV2Z6ejRLLzJXZlI0Q1owUG9GMGti''@;'; put 'put ''ZVFCVW9pQ0tvUGxNYnFmTjVQYVhGYnFmTlpOU0xoWWhvQVcxa0JKYUZDVDRJNjNPajBVcXJWUUJzQlhTd3g2bFFPTzF5cHhwd3FyRVRwMkd2WFc0eEZIWldZQ2VDeDRYWWFXdEtOY0lEMG5ibXNxbDNIZWpJN2oxeUpMbXZkZXJLeGRiKzhSTlhTWmRIRTNWTnY4NjBaSzQ0S1daNml2WmxoMncv''@;'; put 'put ''S3AzZWxaeHBGanM2emJ0SE82My82Sm1id3U0YTZ3dUdGcjgwMzFaZDNXRDlKc3hEaXlMcnZ5TnI1Q25ZWFR0Z09vcmEwUC9LUGxhOGF5NVRaOEphSThZNkxWNUZPcVEzNlBSSGtVYURsZ2ltdTE4QWV5QXNtVVVpQ0JaaDFKTjlMQXhOb3Bkc2dnQ1V0Uk9YekZnVTNlS29KNVBjcGdVaEFFdWJv''@;'; put 'put ''ZTFiemM5blFyRllWWlhEZ1ZDc0xkYmExRmdWcldxb0Rqa3FIUldseFhhYnRRZ1dVeGdxRkoxMU5vN1JaQUl3NlNqRWZwekVmb1pLdjAvbmRMaVNhTlA3VHB4Lzk2bVJtdHFSV0F5K1o2UDR2YnVrOE1UcFJESVVqaWREZU85SUxUemtyNnJqOUdFaWpQYzFqRWZqdXhvYUptTHhpWG84dFRhSi83''@;'; put 'put ''SWpHdTNzaURWMFN2dnFKK0pSK2c0ZzZydnA0ODZHYUNlaXRCTmNmNTNjUUw2QXZLZ2VOYUhPVEZzOEdxNnFLUGVVbUloUklGNk1CREpDYVJzdkFldTVzbHBnT0lZWm9LQ0dCcCt2b2FraDVhdjNSU0orbmVpcTA0YkNPcitQTHFvcHJWNGF2SE0zcGQwNjBZM28ydHg4bmJZMGdOT2xrcUF2c2U5''@;'; put 'put ''MDEzSkxkcUs4Tkxxbk1UWlJQekU5MUZkWE9SR05uWlQrTWxsYzJ0TlU3M2NNWE5HeE9wbzIraHJuWW5QdHZRZjhOZjJoaG13a2txMXZIdzNzR2VpYURDejNuU0lqMFhCcDJsc2FEd2NTYTY5MVh6MmNtbXpLSUlRcG42TW55WVBJak95WklpcEYyUGJpVVdlQXdNUnRlWGtoK3FldFhyZmJhN1hF''@;'; put 'put ''OEg4c2U5MCtuOXU3UEl4b0g2M3JNN2lQUElzS2tPNkpBaTJPMVRFeGszWURnOENpeEFldnZISzFjV3JYNUo3RzJSL2Q4cTdYOWpSTlAzWHExRk5UYWRhMkZ0bzJLbTFGYU11UkVFNXovTlR1bVlSMnE5RERxZW1ucmo3MTVFelRudGZlZGN1UDlyQzJLWHdDSHlEUG80T29PWlBhT3pIVVZGM2gx''@;'; put 'put ''dWxoRVNNQ3hocU10Qml0NnJCV1M1YUFlRjFhRUVJQWVtRFA3czcyV0lQUFd5ZFNTb1NacHB2U09oSCs5L3ZDL0RmZzlRWWNEdkhma2dtM0MvNW52M0ZVQUN4QU5QRlg3TmRDREJ0WmdmbHZ0SnN3dEhlNW1aaDkzbXJVRWJ1ajJxclRXUTBhYzNHRHdXMDJ1dzBOeFdhTnNVaWp0MVk3N0VSbnRK''@;'; put 'put ''b0xLSnpSWmdnNUdXQUJBN1NXYXFLT0FnYm9EQmxzUmdwWmdFOVlUS1VKbjduQTdqTUtGdEZnRVFzdEdyMVdxOWRZQ3ZVV3ZWaWtNZnJzQldaZm90Ums0WkJpa2VnekF5aThaYUNpQVZ2TkhOVHNnNWNjbHVHMEd5MFRCMmxHSmhUSytKRkd3SnBwb0cyUUZGaEF5OEQrZUFFQmFzZVk0QzdTaWFW''@;'; put 'put ''MTJFODFZSXBxd2lSeFBMdi9tV2YyUDR1OXp6NDcvL3p6dEwrQjlXdlF0OUYxcUJDNU04REthRkNoTVdDVWdJM1NHSENBVDBWbXUyb0xQS0Z3bVRjY2poMkx4RUU5aFZPMS91RTA3YXNSL1FTMzQwN2d6dUtNRTlHT3B1bWNZVVlJWmxSRU83TjduZDVHckpkK2p6djNzdlgwZ3A1OEVjWTNVWTFQ''@;'; put 'put ''bjREVXc5aU5LVEdZa0RFZ0FCR290ZUpsc2tZMDU3UWhYdi9WK2dWOGdmd1V4clZtQ21tbnQ4TFlwL21BVkhUaGtjdWwreTRuUDMyVGltNVFKazBnTzI0aHo0QzRxMFNSVEEwUUgxc3hseElZbERPYlFGRVJLTmJLb29waUY1T0xvRy9xTkp2bEhrazFObUMvanpKU0JZd2szcGJOM2pZOWZTNmJQ''@;'; put 'put ''VGVkbm9uRlp0THAyWGg4Tm0zZTkrblYxWHYzN2J0M2RmWFQreFo2cngwZHZhYTM5NXJSMFd0N0dRNWczYmdjZExZT2VUTEZzSlVDNEd1RVMzR01MWGpVYW1lb0U4UHBwTlgvaFd0cW45cTlRdEtqdys5WW0wU3NmUlFXVlF6cktVYTFtYkRKQ01zQmFpQmtoS0dUaVQ5cWRDd2dwbk9zN2tCSUl4''@;'; put 'put ''YlhkV0ZGYW92aEpsbmNXVEJzVC9UTnZyYlJwcWFaVU4rQmoyZU9kWXpNM1l1SEpmZWViN1VzUnB1Nkd4UHQ1eHFYT3ZxdkhmcXpSVGEySDNCWkFXUFhvSzVNZTBreGpPUERtTURvTUFXbXVCSEJ5ekN5WmdtSUV5WUN1bk9KOHJ5YnNYc05xZzRFdklHZ0tKYkFMbE9oa2t4UVBRT1dtanZSdEhs''@;'; put 'put ''Nm9vejJmemhYMngwNDFOcXphMm84bSsyZDNOV2VuQXAxTFh5NC8zajdTR3ZIVE9kVncrWk1xcmN1a1dsTXBmRmUzSnlNZFVick82K0xUVGUxNzdZVjd1bHQzWmZrZE9DSGIxbkF1eEdrRzFnZlpqQXk4SWhPQzJ2QUNHek5GVUFkVTZrV3phakpaQ293RlFCUDJZcm9YSVBlTUU1YXFiWHBUMWtG''@;'; put 'put ''Zkt2MGtBbVBYWHY0OFBKdjc1bkVYNWFHNXU5NUEvZEx6OERxNDRDZkdoaWpETFZuV213Zzlnck1CR3ZBbmhsQjhCMXBRSUVMQWxuZzJuc2pjc0FjODFudEFUOUREaGc2U1JrallwaHlrZGlVSThPL09OSTF0OUt6WjAvdlpNK2dFWDlXK3FLdVo2enphRWYzcVJIejVVUDd4dHZhaGhOVmVIWHhZ''@;'; put 'put ''aVI1cUtmdldFdU9CN3BnM3p5b0d2V0Q3UU5ydHdMUkJJdUpWaU9NNkVDYWFMU0NaaFhsTktnSTgxSUVRMWtaeks2NkxPejNRdnZTUURDa0I0c015Yk9od29MeWlGdmtyQUhDT0duTDBScGxrNDhlNjh4Y1BYakg3ZGx6ZTY2Y2J3ejBSeHFuRXJqcVVJdTdOempUM1RKVldEamVqVC9mZUxDbis3''@;'; put 'put ''TDI1ejZ4K3RrREUrTmViLzkxMmJxWTlOSHFibi9IU0VkaWJKYlNIZ2dkNG1aOFU1a3BBMzJDR2RkUWVZT1puUTEyTFZnMTFGckUzcFRYQ1lMZ3I2U1A0QjlMUHpwTkpoZEgxejVKN1lnbzRDSEY4QkFHMzZNdjArM1FFWkNxSTZJS0E3SjAwQU1HTU93UGt3N1YxUlFKMWFucXhtaDlXYmdzNUt1''@;'; put 'put ''aXFJZ1lxTGphenBDUWthT3lvdHowTStpaFFrSnRpWitmN1p2c2J1L3J2YktyKzhxZXdaYnVYZjFuaDFKemsrM3R1MlpUdlh0and3SC9jSHh2cnprMjI5cXh6MVc4cTdsNUtsSS9sVzdkNVhMdmEyK2RpK0tQdHNmcU85b2I0bTJDOUpXdWhLK3BBdU9LSmwraWkrNTFHdGFZeWU5MVJSSHNzUUc0''@;'; put 'put ''VkUrMUJxeFVDenlxSmF0QTZRSXNUeEJjV1pVU1VQYWFMekFZQ0xLOWR2R3Q1aHdMMnBiK0lpL1lScGZPWmFJcmliKzRaWmN6YlBlNzJEYlgweDBuejJ6Y1piN3owa2ZvTnJQOXBtdGdlb0xvUUNlNHFjeW1NcHJOME1vZEtpMTNxTXhtaE14dXM4dFd4SlNIVHJZZ0ZPVkJ0bEVrWmZKUGZJdWlV''@;'; put 'put ''YVJUeWlmd3M1aCtKRHJ3czBEL1drVmtCZW44UG1SNEhPT244ZnNlUzlaeE9wd2hoTXdESGVxZTBCR3drZXlwb0xNQU85UDQ2OUw3OENrY0gvdkJ6RU1QelRLKzYwWlBFQWYrQlZDZWlIeVpTa3F2MURkRDRCQ1FhVmxNRTRIcTd5SXFwU21uMC8rNzhYZWtldmIxaS9uYjVtSE1FUmpUcVl3cHdK''@;'; put 'put ''anBlcHpTT3JVaitCU00rWFVwOWNoREQ4MzhZT3dIZEV6Myt1djRPN0QvVHJDVzA1bEd1MEZQeFJ1bTRsbUFnVzlTNlFrcXFMVllvM0ZyUmwwdWw5ZFZGU3oyQjNWMElqSUg1NlF4TUxaemc3LzZ4TzZqZmMwekE1Mkx0M2NkYW9yUHBRODRGTXplcXV1TzFIVk5kVjRWbjJtTVRMYWFUL3dnNzhy''@;'; put 'put ''UytVWFc3eFQ2eVgyQW13bjBvNHk1eWthTWhzNE9Jb0tRekQ3bUJ3Y3BCWWFPUWRBWWJqSmpveFliWjVFV0pMV294VWVSYU1KNlVYOFk2WFNLMzBQOUsxaUcxVUM5cXhwb25GUWF3MklOUnNHdytwYWQ2TUREYXNtMVFrZ25JTjNxenEzMWVuRVdnVXU5eExxWkFEK3JwS2NIb1o2Sm52SGhRVmhV''@;'; put 'put ''SmhRSzIwT0JVS2hBTE50aVF2aENZUlh2SkZ6dXRGdmtFaUZCTWE2eUxoTE1ZdmNyb2xUbXI5N0hWcS8rOHNubFI1YlRNOUZvaDdGaVZ6UTJXdGR6V1d1OHoyNmVMdEs0RGQ3eThyUi8zeWYyTHorNnNuRFBZc2R5eXQ1eXN0ZmVGMHpFYWdkcm02T25WeDVldnZMTFZ4MjRiM0hpeW5Ra0hLcVA3''@;'; put 'put ''R3JzUGRWWDUrL1NUYmpQdEpncXFtcW11NlkvT0xQNjZQTCtUK3d2cnlvTGVMRXh0aWNSYll4TzFNZmIyZjZWd3JmdmdSd1dRWlBXWmFvTldFUHdDRkFSa0pVR3RDaFZiV0R3VTB0R3I5Y2I5VVp1bWhhREZoV1pheGsyWVJLUlB0NStFb2ZwdjhOM3duL2svTnJrVC9HQTlDWEErNndjMHloQ0pj''@;'; put 'put ''aUhPakt0SUlsaEJCMXdqbFpEdE5TOGtJTXJJdVlXTUIzTFUycXplaXRMZlI1ZnNjdGFZaXVKVk9tWkFicFJJSHN4MDZwMTJHbFhQc3ppZ1piNVJEemUwZDEwb0VONkJOYzM5dlEwdnZScTYvQnc2NnZrZkdRODNqanNxZGpiMGpRZHd4OU0xOVUxZjFWNnFTdVI2UG9YWmcvRlFOYmVEYnhXamhv''@;'; put 'put ''eWRhVWxKcU9HR2hXS1BIVnRDUC9BZzNKVUZncUdhUGhIa3ljQmNldXU0NmI3RHgyNmYybm8xc1JnWUxHeDkweC8vNW5leHNYQVlPTFdJZlBCKzVlVzdqdllrdXdMUjRhdUhSaTRiaWdTN2t1MndMNVF2SDJaMlRkTzVpM2swTVFjWXhsTlpwUERabkthbmFFcUxVV1BRcGgxT0MwVFlCMjJ6djdx''@;'; put 'put ''eENNSER6NXk0bGYvT1hGOWYvODd4dDlQenM5OTR2RGhUODd0ejV3YUhyNDZJeG5ZMnNHQUlYMHduZ2xGTXhGRnNsRjdSck1BdXFWUWJZVXk2OTdFdzB0ZzN0aWRzcHl6ZXAyUDQ4dWxQOGNma2tUOEJ6TDVsY1Z2TDVMemkyaEQvd1pVa3drcC9WTnB4WHBWVkQ2OE1DQUQ3Wm5KTGRhclgrbDNo''@;'; put 'put ''WGI2MHFMMFhkNHAzNi83WWIrOEtKVkpnTXVBaEVwQ05GcG1QR3MxaUJFWDkwK3BKY2pFSkdoL08yeWFuN3RYWHV0Ry90MjBlU2svL2pOY0Z2dUw0YVhQSERyMG1hV1JQNDhOK2s4MDlkRU43SXZzOHorTnI1WitIVy9qVzlpYTZBdlY4eTJzOEh3Z3YrWTdHVTdEbVlCc01pNkRqVXJYUytOREZy''@;'; put 'put ''UVpsNWl1RnI2UzhKM2N1U3pkc2J5TXI2SHNoS1BTdDhsNTZUWHNnMTVvcThkWmZKTEdGVlMrQm5mVHdORVlYVjZtclFEV0NmcmpHNHovZ0lxWWFjOG9taG1zWkVrQVluSXp0QmNoaXoyb2dlWjVVeDVtUWJuc3NldTlnL1pkZGMyRHl5M0wzZVpNb3I4NnVhY2J0RlM4Ny9KMnZzNFo2T3BEYkox''@;'; put 'put ''Vm1YS0RYa3VZaHNJc0FpYndHS1hkWnVNNk1XbkZTUVAyZzJ2b24xbkdmYmRJLzQ3cjMvbGZSMkM2MHNmeGl2UjE2VGJjZVB4bDNpOElZdkNYenlNdHRSSFpwR2x2aUc0K1I1MFdhYTFXT3VrZzBFblNTaHhTdzhvaTBOemFlZFllZUFnSUlEY3ZjWnQ1T2F6S3ZEemdGUGl0SnRpQjJlWGYvbmFa''@;'; put 'put ''ZnNHY3V2RGZBdkovVG45S2JybFA4akNqNDRxTVJ5UmtTNCsyWEk4WXB1Um4vZUgzTGk5TForaVd2RUVNYTVQdzlRYVZ2WlIrZi8vL3c1ZmxBZ2VvOHVCOVM3Mm4rL3RQOTNLcEk0c2JlTHAwLzhHRm9lc0dCcTRkNGpUTGRBR2wxK093TmpQSUhQQkdZUmJBcGdLbW9ZbDhBQnlXV0ZqZ3NCVTRD''@;'; put 'put ''NTNXVUpXT0JyKzlPYm5qOUNzaTJackYzaUVZOS9UUXM4dlludDIzTC9zb09kK3ltc21zdHZ3R2p3MjB0dzlJYjZweDRLQTJmQ1pCQTloRUsxQkhScUJod0x3UG8xRkZBWjFPWjlnWnFnK0ZxZkJGTUFkeGd5S21NZVIwT08xdTJvQVY4dnVRZjdoMUxIcFYrNUtDSHVsWFBZZGFsK3R6K01FVlZ6''@;'; put 'put ''UjA5ZldHYW5KNGt2NlFtTzZiNjU5UUlTcVBwMEtZQytoTVFnTmlpa3U0akxSYVdhVEpMQTVPc3RWcXAvS0d6dFFmQnIvVHlqQ21UY3E0SXNjUFRwdy8vZGYzTERPVVNmMlBNblRoVzA0NS8vQ2IzekNzdllzaWpORjBhUDIvU0J0NUZyd0IwRkV1Si9WSENWYWhpUVpZVlRxcUdvV0RFVDlGVTk0''@;'; put 'put ''TERUZVFiUVNlVzZhbGo1M3FXTDZ4YjNSaVlmeHdjOGNWZmFQWHAxb2p5NDNCZGw5b3NPdlVtZGFySmt3bnNnYzZJZzF4cDYxaHRLMWxmeW9SSGEyT2xNYzhsZFVlaTJkdXBtMS9pczZ6Qm5BMHlld0tIaGZKdVhZOGtDR2J5TmdQdnAwZnVNVDR2MG4xdnl5RGE3Y284KzR1b0l0N29EM1l2WmtL''@;'; put 'put ''T1ppT3NYcHBUdVJ3QkJ5SytxWENpdnN6aXR6Q3Z0dXp5L0g1NXVhNStNcm9iZFBtc1R0bThmdWwweDBIbXNBMHdIZEtWOC9lTWNibGpHSUQ2ZWhZV3VhTGdxU1VoU1NYTkdDcWMwbGpvQkYxRHliZms3NS9FdjdSL1FHR1ByLzJIVkxQK2dLdlFGUENlQWo2TWxKWkR3S0NudUV3MWMwV0R4TENW''@;'; put 'put ''cVNsbXBNS0hmZ24rRTNZWDNueXdZZFBQdnpneVg5WmZ1b0xWRks4VHN6c2E1TDQxMzZJbEw3SnA1ZzhBM2xvMEVIWGhJWmpxWTJHT2EzWmJEWXJ4U3ZNRXJvMHNON3hKN0R3anE5OTdUb3NTR3ZYZiszRjYvQ2M5TmRZbFA2QVorSFRIN0RJK3k2QXZqOEdmZXRSZWFaVVIza3ZKOWhrYjl6R3pt''@;'; put 'put ''N2tQbUhMcXFSZlhmLzMzem9qL2VZb0xzQ2ZscDdIUGRLaTlKKzByeWJvYTdlaTZ5ays4eUd0bkgrZkMyblpyR3pHYWU3bWc4SnZ3dStUM2tHS3BGUDRnMnYvTmtISTRzU2F4UFg5K1BxN2NULzU3dHYwdnBKQVdQQTEvc1puUHZNRytlN0FXaHN3RUY3Ly9mb0YvTGM3eEJzRnNHZjFsK01GSG03''@;'; put 'put ''RUtBcmpoWFBqS2ZFd2FvclIyQ2dkRCtYSGM0T3dUOEZYOUlFSGZ2LzdKdkxWZ1RmUDArNFQrSlA0QzV5Mkh0Y2Q2Y3U0UUtxekNDR01US09scCtVb3grTTYxR2RQMnYxaDBmL3Q0VStPbnprekJ0cm4xOS84SnAyenRINGwyYjMrTkF4WHhmcllJVDVMdXhBQmdZUk1yVDA4Tk16M3RZdGtzSnU4''@;'; put 'put ''QW0zZHJLMFpXbEpwZjlvR1BpQWZOZTMyZHgyNGRvaDgyZkhuM0tlckI1dmhEOFFLZkJGQ04yWWN4VmpRdUVFUldNRnlyeWpYQ2pxdEJudzdCN2huVlFDczFSSHRLdk05cVFGZmt0Vmo2b3JKOU9nQnUyY3JDT1VxQnFlWVpQTVpwOGVEa0Nma0NYb3JZZGlTUU5Cdk53QlNrY3NKV0ZVSHBuS09y''@;'; put 'put ''QTNzTStYY0N0OSs5Y0d5cGZqVThmUlN5OGp1enNIT3FjRFIvYlo1Yy9kb2FxUTdRYXhuRDBrdkRvWWplN09KaWJxeW9wYXh1dUZHS1o2czczYzAxZFRFK1pySFFONU1neDZ5Z1pmeTdBV0xFVFFRbGxkWkRzUlZsTTFGV0Vya2NCcGRJdWdpOEZTOUFPVGRERVJOc2cyQk45bWw5U3FIZlRzREFv''@;'; put 'put ''enF0V0x1YjRDWkIwL1ZZYmNqWlBmWnZaNFNtRGJvbUUyaHZEQmxBS3NTd1ZQYkI1KzdvclB6aXQ2MnBZcERoeW9YMjl3ak5UVWowWWJobXByaEJtSUZGMkg4aHY1VWZDOTVSdnB0TENXMVJLZFRxYWxvZENxVm1vNXltb29BZlVoQUgrV29NUk0zQWg1S1REREpVbUJ5SWVjdGxlenNMYmt1NlMy''@;'; put 'put ''OWZ0Tkk5c2JocGtPaFhuZDNvR0VpR3AySUJucUtlOE9IbTgwak53NE4zVEJTRytvc3JVaE14eFBUaVVwUFJ6akM5NC9hRWMyNS9iTUs2djJqaUdSN3c1d0I5ZjVaOHZ1M0dZZ1JxY2pDaHB4SWxmMmpnSVdYQkdUN0o3K2wwTXg0MmdpemRmOXNJYitWN2grV0NUNlBKQ3ZadEgraytWREZVbHN2''@;'; put 'put ''MzhURnlxdlp6a1haTHBKbjF2cjN4bFA5TjR5UHY2TS9GY09XdGJzMjd4K04yYnhPd3JCL0x0aVVUS2FEMEkxamg2NWd3eEJCUTVaek01WG5MeE9kR3l4Z2Q3bTdyTFFFbWpyQmo2THpEZkJ0VXh0ZlhqcEhuZWlGS2VPRmFYZW43NXJtb2V1SCtzOE9qcDlzazQ0WjUzdTY1czI0eVRDYUdhMHF6''@;'; put 'put ''Z1FpQXplTWo3NWpJUHVlL1QyNzhSWFpycTRzcFRFdmZGc2szNEpoOTJhTVJWaW50V0trb3pFbHVsbGxTS2ZUTG9HbFZjeUNFMmhCZytWb0lpZ3FUNllVSEFNZFNKM1ZyUy9uTThhZ241MnZpYUtINndnL2xkczhGTWJwVWVmODF2WFhIeHdmSDIwdmEzSUc5T1ZGcmtxaW5aSW04T05UblowVERt''@;'; put 'put ''dVAzdVQzVUR4RzE2ZElJK0N4RXRXaGF6T1dpaUtpMCtaanM3S0lCRGtIYWtOSFZxbGh1Q1JxaU16ekRLbDJKaUp6SUZROHdrd3BJTm9FQmlLeXFncWhxcnFxMmxBQVJxd01CWU1CS2lLeFZlWjI3clYxNEkzRWt5S3FzMy9TMkh2TmFOZXBVTGhzTnJwbnFYS3h0ZmQ0UjhmeDN0YWxDcURIL3Y2''@;'; put 'put ''NXVYNmlsUkk5cTYyaHloRlB4V2h2dGo3ZWRYSnc4R1JuTXJKSHVtYnZ3TUQ4L01BQVAvdWpockNWeFNWUFBtVmpKaFBmR2pkaWJBUW1NWXRGbGloV3NNdzlidTdzYjMwTmIvSVBXYlJEZmdPTVVzQ3RQYXZENzZCaEFTcmhZTmZrUUpwVkZuTDQ5dm40d2Q3R1VFLzQwS0hpZWRpVzVMNVc2UXU0''@;'; put 'put ''dVhYWTIreVYvZ2FrMlZxMUxPczc0UHVUNUIvQWpyS2dBVDV0Vnk0b1hVd3B4U3JicVo2TUErdzVUQTJOVmRYamVXbzZXQW9MekN4U3JkMFVxUmJCQ2pqZzk1Y1UrLzNGaWNPSHliNUFjYkUvNEM0T3pLejlrWTYvL3RMNnVEeCtLVHFTTVZwQXR4WmlEY2xSdDFZMUYwRmdwS3M1b0FQTWVEU011''@;'; put 'put ''aEVBQ0lpZFBtMThDVEtGUmRGTHpTVXVweHhIRjdmRTBXVkhnSnJKdXR4RVQ4YUxDa3I4eFJXSHh6cnlFMzd6UDQzNk1hUGZRd0pycjNidVl2cytDQXVnWjRZbXRQUUZBM1BTbEoyM2NnMUk1NFEzN0xtVmF6ejFDOWh0Y0hZWDJLOGIzc3pQWDdCWjdjd2l4TlFZWWlvTVhPbXU3NTc5OUo1RGg5''@;'; put 'put ''YXV4UjdwMzc0L2RRNjJzd2ZyT1IyaXo4RjhCTlRPcDJHaXdRdzVJQ0pQd0tTS2tYalliMG9BYlg3K3lYelFaT2pRSVNvK2tiSk9vUTk0MjAvbFR5bkcyaXFNV0V5Yk1yV0xDaGJ0a2w3VUNWcXROYXVocDdac1dTQjU0SGY2VmdkdmlVNVhrbnM1ejBJMWZ1VHpXKzErdTk5aEFQbWpvbVRkaGc5''@;'; put 'put ''SkorZGUrRTcrWmpwMnNDUGVQTUMrSFQ3c0dJczN6N3B0KzlvVUNtOXRHZXBOU2M4cFA0bDJLRnpmSElzMUl4V2ZXc0cvSHJ0Z05SUE9xSFFOZHVaT2FhazhzcXE1a05IVUZ2N2tUT2hBZHBqOFppYlVpY3FNWlI1czJxMDdmTGg0VHMyRG5RM1M0MFNiRGNjVS9UTUtjOW9VOXloNXk3aUg2OUp4''@;'; put 'put ''ajlkdnpJTHBNSFRqQ0JnS3pISm9pTzZLd2ovWmNCaTVZUWplellEZEVKOU9jQU5Dc2YybXdQYXpNdHZoNkdiYmoycHlIYmd2d1B4NUE0eGl5TTQxUFpNS20yMURGY3pic05NVTlQMlA3RFRwdjhuajg5dlphZFFtbWdLYlNGblhScHNvdjY0U2xXR1NWWFFTczNLc20yeW1EVENYc0Yrc20xWFFu''@;'; put 'put ''MkMvYU5jbXNDNXZ3TXhML1Z2dFQzRGI4VWxZbHduMVhERHBxS2N1cjhyS0ZDYllNdHo4Wk1hQVU2SG92RmxLN1lBTElHV1ltTEUxSlowS0NiKzgzTFBybUhqNE1QN0h0cG5KUHVtZmlQWXdqN204amwrRThZTFUzblZnZ3AzZ0hjT3dJUHh5a1plU3paR1hJQW9FYWdQTTNnMnBRaTlZc1RTNFRx''@;'; put 'put ''WnhGMExGOHN0bkdxS3pjNUdtNW82bFBjZjJ4QS9YUmNZR3FwUHVoa1R6WVB6RWpMazZPTmdWcktpcXNwYjJkQXhNVjVVTng3eGxqbUtIeFZyWkhodWFvL1lTekhHUmZBanNwV2dtNHNZNkd1WUZzKzVXcWt2SUFqMDBBQ1NBWjNhQW0zTE1Cckw3cUJFVTVPNlZWYzR6QW9sTEQ3Q2EwbmpSMlZU''@;'; put 'put ''V1BqbytmdkQ2Nnl0ZFJlWDZFcXRqb2hQSHB0Ny8vaW5wVlkvZnBPYzVTSzhEUHJWTXZ0aGhRSktUTHlCYVpJMnBjZ2ZkeWxOWjhPYzlRQzVmUU1YN1dleGZaUVpUUmNWbVpDVVdLbGFhRlNFRHhQSkhFQ2tnWlBDdzlCSVZNbmhDenNraGRVU3I1T1Fva1F6RkJyVGFtTWR0NTZFWDEvRjc3em4r''@;'; put 'put ''VHd0ZytKekFkMU1GamNFcVJrSTF0TjhhdzdGZU9vWlR2bnpOelZNM24xMStkTjhOTis2REh0K0piNkZmYTMvRU4wczM1Mk5OTnVpYjVZQVpSUTNOSjZHZFl3eDlDMFIxS0dDejJTajFlTU9pM3g1T3V0TkowWTd2ZTkvN1QzejF1WlB2UG5maTJhOCsvenpXcjMzKzgyOUtiOUIrUzlaSFNUMzBh''@;'; put 'put ''NlhaTUNZOWdTbFRJNEhJWFZQaVBFRG43bUhFYVVWRk5vYzZMTmlGQmJhS1Fpd2VyM1dWKzBwODV0TFhMbnZnazZzLzhleHVlZEkxV21SenBZbGVPb28vdW5heEw0UDVXa0I4NHUvQm1EdkVlYXlYanZNa3NFLzZDYjVIZWcwSHBMMGorTkQ4aUhUUFBPdTNlbjB2UGtLK0NGS3JPaE1zWWNZbGFH''@;'; put 'put ''azg1UE1TbXVNR0lMTXlQMk0wWVhWUi9VMURnR2xRUmlsZ3N6Qk5LSFlYRXFlYkh4V0tsTXRFYk41Zmplc2JVeEZjdlRDaGIydDE0bEFvSE1TdWxqYjlQVFVEVGJmRjYzcnE0dWZTQTlYNmJvTzd0dm85RGVtQ3duVERIZFcxeFladUdPZXk5UXZvQ1JZMzJqay9EbXlJeTRhSGxWdzFtbis1RjYr''@;'; put 'put ''eWRRQis5Q3p1UTArcGhud1lEN0l1WnVYVGU0UW5hTzQyRVIxMWJ0QnBZWjZCa3FZWkpta1FEeUtRUDhnb1dBOXNUMjFiaXd1bUhncGhaMnViZmhkZEZCV3UxZnQzTFJ1S2E2dnZhRWdYRnFRYjNsTmQ2elowNjZzSDB1Zll3bTVMOTlmb2FlNTVDNjdHdCtGSHJTSXVXRitYZm9rTWp5UDh0UFJM''@;'; put 'put ''bGczQmM5OW4wTGVZYkxXd1V5czZRYXFRbVZIT2NwM3M5THhvby9ITERFdWVhQWkyVGZKQk9YbWc1VXdKbUZCS3ZzQmFQMzVOOFQ4dllJbU1BUzk0S1dZcXlrdEwzQzZIdmFoQVM4ejhmQXBHblpiVDdrSGNsN0ljT3A0MXptUFhORitjYmlyb1RuQS9BK0FqZzJyQlA1eUtUblVjYm0wNTBqSFZz''@;'; put 'put ''TnZiRzJodEMvVktkL2MwTnZZRWE3V1pQdlBZVlYxZFY0NFY5SFJxcTcyZHRTYnBMMHlSanBzUDJQR0M3V0FiejRGRVpBeHN5VExVbThuQVR0RmtJaVRTWEdRUkQyc3hBYUVxRW5ZY3d2d3ptbFVraXR5NVJ6enBxOHhxRHdaQXMxRGpMdWowcHRJc2UxTWQ3TkNWWTVwNlJzYldmanFVeWJTc1pB''@;'; put 'put ''YXU4d3dXVE1TYmg1NTdibTZ1b2ZhaHdYTjlsN2ZMcDJ5M0RENmtqczI2VUV1bXlZR1JBWStBaXlreXQyUkZod21ZVFdER0xSdFpqUURQZVhNNTdUYWxCcURJUktzQVdIbUZVMGtvaFMvRzhQalJlNzd5bGE4Y2hhOTdXRFFYRHc1bUIwK2NnRy80S0EzcHN2M3FJcFA0YXZJY3k5OUpzQ2hpbUNh''@;'; put 'put ''dEF2Mnl3UDZTVnFDSXdoUGJaUERRQUtQYSswaW9QaTlXVnJwZFZaWHV4OWpQS2hlWnBEKzlUdnFNL3dSNnJVRkovSC93M3hYNWNKMFdGUW00RHIwcXh6WEg4UzNrcnJjVEU2VjVPRjI0UjNxZTNOWDlkbU9pYnRGLzRlQUhoc2dyRGxsdUI5YS9BWDdQbzdEVC9nejQ0YURwRUxtSnF0VjNVUzNH''@;'; put 'put ''d3Ryc1dDUEV0QUpXekI5Nm1FdlBOd29ITG10dFhzN2c4ckd6WXpnUW4yOXQzWnRZcXlJZlhUc0tmWGVpVjlDWFFIV1o2Sm1pU2pBUUtqSW1WTW0wVFNyc0hRb0VTa3ZoNnhYNDRmZkRSem5ldTk2SjFxRkJNVHJEMW1ZQmUwVmpONUI4Vk1KTW94SmczSU9xMXB5a1NVUWd0RmZ6VXZVQU8zMEJD''@;'; put 'put ''NUNCQUdIZHRCTU0xOW5GeUcwUEJBSlVaMVBNc1FRTkZvNVE1VHpTV3BOWHExc2pKVEdyczl6djhBQnRXbXhWN2NYNlNLZzgyRkJVRUhVN0xJVTJvMjBzemVwallyRG52Mk43SHRIUlBZK2c3ekU2REsrUDRIOWxzc21MV2pQcFNxZkRyQ0g4NkkwZ09sRkdqRnhZZ2VZNWdHUjE1NjBxZHRtdE9a''@;'; put 'put ''cEVhbkhGVTNFU2FiZE9NVmxCdHVDa0xNRmltL09pOHVKTXVtcHpaaFNiT3p0TEVtNHE4dEZxSHF1SWV0R2ZvYzhoL2VNRVAvWTVKbVMzZ1RtR0hUdkFuRlZnc0lnZTNBSG04aHhNQWZyb0RqQ3J1YkZXMEwwY2hteUdlVG5YandsOWN5TU16eE1TWGdNWlpBRlRmekRUWjZYeWgybDZjTUpCOHRD''@;'; put 'put ''c05MMW0yUUFDVWJjQWRxWjh4cVBsMWhKejVXeEZObWh0a1lXU0NTUWtWakpIVWpTWkNLd0NjRkd5U2dhSnRMYm5ETDZUTkV2aXQza3F5VjEza2ZPTDBvZnhNZWtqTFBlamsrWHFwRERKbE5iV0NFUWo2aXFBTk11eEJwZlpnRzZ0bUFoYW1kenI2ZEdzZ0UvQ042UTVvUVFQWmZrdE8ydWczUTdB''@;'; put 'put ''bkQyRVJnMm9BZHRBR3lHc3VlbHR0NnFrOVVBYldnazN2R1d6VEdSekM1clhSNDVzMTVESC9Xa2NJWVVhZzdYQWRsNG5WVFU4Qm12QnNtall6SDNibnZjbThjdUxnY0dHNjNvSzlaV2JXZE05Yy9mTTVveWx5VWk0TDlxczhXN2syR2Jqa1UvTWJjeGdRb3ltV0w0UG8vRnFtUS9leVdnS3EyaHpN''@;'; put 'put ''OHd4OVBnT01HY1ZHT0NEYTNlQVdjMzFzNEpPY3BnOGphOWZwRGt6Ykt3SW44LzYrN2IwQTZJQ0oxUXd4NUJuTTh6NnJ3SEd4dVlUNGZOWlA3OEY1dDhCcG9UTmgvZXpzdjdaamZNQmZxcUZiOTluT1FUbE5MdDhvM1d4b0dkbkRBYVZlV0d4d0k5eVN4bXI4WE5Dc3dMUU5jWjhISUU1VEVtckVr''@;'; put 'put ''TUEza3FLb1BEeDEzbnkxOERBcjZaNSt0ZXorSmxjQ2hodVdNVCt0VWQ0SXRpTGkvOEFPR0Q1TFV5bXhHV1pjdThXUExHY0RZYW5oTHkzbjlraWR6YkRITU94SFdET0tqQ3d0MS9kQWVieUhFd0JlbklIbU5YY1dDdm91VTN5aStaTTNZRmZKUTVRQXJvbmRBakg2b0poNEl4d211WnN1dkdIejcw''@;'; put 'put ''N2MrNjI3dHZPZGI3NzNCM24zdDNKUG1mZWZRNnhlalVsUjRWV3VkYWpjN0ovNjhJYVVsZGJYbFppMXRHVWJLUVZSanpzcWFCNml1SHBQRzlReklJcDlMamVsZFZ0T0VFRWcwSjlwT1RpUjRJNjlYRmZwaENZdlQ0UUNkbkRkbFp4b1dSeGg4QTlUS3N5VUpNaWNya3hENDBqWHU2RlhVbnkxZVRC''@;'; put 'put ''KzViU3E1R0dJL01OamNEYVRVY2o5VWZtSkZSWmhrZTdzc0RoT0hPNnY2Sk1laUtUSmNVMzlDM2RmOUJYbVZxSjM5Z0h2TzJ0YkZ5UmZqenR3emRURHBmK01IVGRRTU8wWDdxNW51S2U1V213Zlc2V2FlSFJMZlN5R2VZWSt2RU9NR2NWR0tDRnorNEFzNXJyWndWOWFqT2ZjMXVaamRVdWovWGN4''@;'; put 'put ''bjQyNWU4MFpPcUFPclFhckYzV1lmbjRLMWVFQ1pyTDRuSlkzRVZ1YThoYkpQS3NncVFxMnltWXkzWmFlV1pMdHRPWmx0Vk05MHJMOWQ4YmFHL3ZsOVp5c1N2aUpWOERTVFgvbEJIc2Rob3VxUWZxcUFBZEFFcE1vTWRFK1hSVHZLRERjdGk2VEU1cVhNMEJxbDdQWjR6MmdEZmdyZk96WTYxY2pG''@;'; put 'put ''UlVwcHBTY28xU2lsNmdjZWF4bGlPWnpPSG1nKzAwVzNaM2U4dndjRXQ3Sk5uYjA1anNYU2JtcHVsb2RMcnBXTHBpWDNQVGRHeWU1c25PZEVhaTdaMXhtak1LdU9aNUFxOEFydnRBdnhQVXU0aTJlUzdBSG54QTlmeWlBby9GV1RYOEM3bm5CUVBxNTgvbCtsK1pVRDBYS25Qd3BoczVuOEp6NFVO''@;'; put 'put ''Z0gwWlFFbVZ3TjYvcExTc0RMSHM5WUkwNHNWSGZqSFZHQXlHaWpucDJ1aEc1aUhkSEdCT0Z5YjgyYlBONmZwNlBFd0hDb2xXR3EwaVBkS0pldDF4Z0lFcEdma20yMEdRV3FCYlBKdzNRY1pzdTJjYU1jeTJ5aGRoa1VnbU16T2FHS04rTUZnNi9aUmRnUmxRMU50YlhJOVNZYWV4cWE2bFAxaWRp''@;'; put 'put ''VWNCY25UM2dEd1FEUVV2T3JGRFMzTGRrWVBEemlVMEh2aUJ6T25EdXZQRmxmdnFiT1JuMFh0bTdkRUtWbmpIWHZWQVNXRzNiZkNJc2ZhQTNUTE0yZWxyNDJYQkxJdEV5TjVaUDI0alhSeEtxazJMcERuK2JQK0JvcXFtTnNieUVUcGFYa0VJUFpjcURXS3RwREJHZE5sVktrSzRFQzZpNEVEYTRB''@;'; put 'put ''THhtbld3V0JtaDVBQUZqUVFjY3BXT3N4MHJkZU5MRkFaRENIcXpZZFVFS0MzQTNYUm80NDlzQ3h3cmdqK1RBdFJUM3hoQ3ozaGkzQm5SL291RkdFeVh3RCtiaWxxMkdXM0gzOGE3dHNpY0NkWnNOdHhiRDJPbWVMZGtVbkw5NGZnRGwzeUhPMTh2YlBhZDgvUkhWODRzS1BCWVgxZkRQNWZwWm1X''@;'; put 'put ''SFAxNy9HenV4b1A5L2cvZC9PNFdsUUxLSjZmc3pKNFg4R3o4MnMvMi93L2gva3ozOE16KzJzZnc2L2NpK1BMOUdhcVU3eVRWUUdWdGJlakwySTFRYktscFBEYmpQaW9leGpwZlFZVHduZVd6ZGtsOUpEWHd5YUFKTlY5V053ZDh2THkydkxhd0srVUpEbTJ5c3FXTkcrN2hBMUtVTGNwaUJ5OHFt''@;'; put 'put ''TzI5by9uKzQ1a3gwOTI5dDJyT2RBYjNqZm1mTEpxb2FsL2dNVlBRVnoxY094Z1hsNjlHSDUxTktlVzRaN3o0NE9YZFUxUGpyUjJCc29yZ3luNjNyTDEzNjJsSTJPMWk4T3g4Y2pGRS84VEkvS3kwa3VML2ZtOFQzSzhMZWI0L1gwZHMvcHZqMmdlbjVSZ2NmaUZXcjRGM0xQQy9hcm56K1g2Mzls''@;'; put 'put ''bWN2ZGJuUkVybXUyZ01YY2xnSHRyRlBPekJFTFRTRU5rUDhza0w5MlNRUysxRTR3ajlCVFZBcmFWWWtrNnFscnJqNUdCOGRRWGFPRXJjR2dweVFRS1BrRnJhWDZsdndML2xLb3RDUVlMQ2tOZGMwL3IzeUVPU2xuakc1VWhXcHlOcHNEYkxZd1FMbE5ZSjNwRlpzTm5ncXFwOXZhYkNYYjJXenFB''@;'; put 'put ''N0x0YkRhdjExdmpyUTdhd3JZTk5wdmFaS01XbThadDV3YWJpeHBzWVFFRVp6ZzRjdVBRWkUvWi9oNWZDQmg2b3I5c2Z5OEl1NS9VeEtLN292ODhFZlhDSi96Qi9ZbWhHMGNpVldPaGhTU3djcjEzL0xkeGJQSUFOMzhSMkxrOUtyM2hZZnZHejJqby9zOXh1amlJdG5sTzZlSkRxdWNYRlhnczds''@;'; put 'put ''WERQNWZyWjJVM2Y4N1BIbWcvKytWKzdsYWRxL0tjckEvbnoxVzNUWmZiZXJhNlE3cmN0b2V3MjcrV00rZm9JZXpiUElXMS9zOVBZWVhWcmVseU9kdzhKK01HY0RhSlZER1hsbHhjNWlqNjJCYS9odHMvZCtYc242T0RhTHVZRGphZyszWm9tN09kc0dHU3k4YlM5VDJDRjJ4Zk4vVFNrV2t0d1VC''@;'; put 'put ''OVdJZkppQjVNYnRocXNzTEtmZWk5TTBEUFNsbWRIWTBXRnhlWEZwY0dhT3pHNGFWQkJ5MlBvYVg5WVY0S3hsVitJbTBpZ3RlZmlIZTRDOXB6ZFdIRkZlVWxaUmJwemp2dnFtaE5CTXQ0aVZpRnU5aGp4WjJzVUV6T085MURlb0JuNlUxQ1QzTUdMUE9BNlZXS2llQ0FxZFZIOUlKZUZESFcxOENV''@;'; put 'put ''bVdXMjNXdXQvRnJtNFJyb1dkUVRjVldwWkM4QngxcXY1NUZDdDNxSm5rejlWbGhRM0JhNUFkb0VQNSt4MXRiV3Btb2JRd0U3R0UxaHIxRXN5NkVsdFlQTjVMUXFpQXFwTWxoSkQwVlp5WllrMXBXck9lcCtxeVN6VWdTR3kvbzNKclBTL0ZhR3pZL2xrMXBsdi9odTVndUZaRi9vNTF0OEtwN0xT''@;'; put 'put ''WGwzUU9iZEQ2cmFubFhhWWoxNmJJZTJGK1cyQk92bk9IMnkyalhXTml5M1BiMnR6LzViOGd6QURESVlpOUFCSnJrQllKNFdNQVVDR0RsR0FwVC96bHlPNTdVZ1Qwcmh6V3NYYkJwaTBDdW56U0dxVmpBU3RHZ1pOZ2draTE0djU5RFJVeEYrTVFWUENLTFNwM1pIYUNiRmFSTW0xZDFFRVVNYld4''@;'; put 'put ''UmVzc1VHNER5Y1RpZm44YXFCYVR6UDV2RjRhajAxWVhvaUgvTEx4elgrTFdtZ3lrVWdhSE0yeGJXWkRla1U5OTkvS0NQOVVwMVQwYi8yakNvbjlHT3Q3ZTFyWDkrUVZaR0xvYlhrWW1oSDRmOXQ5aHZzdWJ0eTl0elJjYlJkL0EwYjBYZDJhS3ZZZ2dMQWZKSFh5QUhQOTdFN0ZnWXpmVVdnaUsy''@;'; put 'put ''QU8zNkdUTFA3S2VPSkMwZ1U1WUF5RmZLV0xETWtnREh0V3VYWXplR25WVFpXeW9CS1BhSmY0VE8zekpHcUFzVmh6bFVWVEU1SlR5alZpb3lIbXBtSTRqV0c5S3h5aGVYS2hsQTllbWZHUnIyS0VDWmFzQjJJQVd3Qm1nbGZCdlJSRGVhK1JxdlRMTk5ncmJMajh1MDRMR09HU1ErbXJZSUtLRnMv''@;'; put 'put ''UHJ4ZEM1cW9XaFFPaCt2REVaZlBIbXIwQjFtWVY5eTBJdDJXdEZ2cUd5QTU5ZmJIMmNMY0luVzZnbzBwdU5YZ21VbS9rYjJ1VW5laHNuS2JGYXZ5Y2NFSHcyZDRTdTQyc1ZqOU5ySFl6YjZBWHZZRldLMG1vNUZhV1dkOWVVdGJuazlMYVdTRTY2eFRjbHZwWjdUT2s3Y0YyckdRVXNUdmZ3QjR3''@;'; put 'put ''WThLVVFOcVJmZGtIUFdWUkM4cTVRb0N2UTRFRFhINVVHZWlSeFNDWHJOcXdQbDZYbEhVTG9FYnJkWHkwKzBsZnJydG9aZDZiWVUyWXAzT3l0dWdUUzNBbVk1R2FZUTIyaHB0U1NVdERaYUd1aHEvdDZ6VWFhZVIybUt6WXRyUys2aTROZXYrRTlKMmNXVlZWZGdmTURncnExei8vWlladkpOMXZy''@;'; put 'put ''SzJocEpnVGFYTFZUWDZ0dEo1d1pkNkRZaXhpdkUvajFrZlhmL1VscmoyOXdDbWxQRS85N2VPZm96SHRPTHJlOURyd01NT251ZEFzSVBuZ1NoWGVmQWNJSzR6QTE2WGw1WEx5Q2R3YVZva3FYRHE2NVJVTGVabEhXZFBxdXNjZ1FMeWtHd3IwTnpaZFJqckJYWVc3YVc1NjA0SDBRaGVKakowcW8y''@;'; put 'put ''VlRYTkxqcU5ZMGtKVlJXbXgyMlVwMkRZdjFxNU15SzJlMFNINWpIcVl6cXpDYlQ4YzUxUExuMVd2VmNFc3kyTW1IWDU5N1kveU5JRm1hZm5OVS9rekFKQjN4azF4U0paakNuNndObGZIYTkxU3h6dDQrREJOY29MK1pvQUhQZ1M2MEFlMHpuZ0EveXYzbWVGNUJlT05jZm41cDlselZqdkxkSDlV''@;'; put 'put ''MXYzV0xmd0dISXJyaGZjQXpJUU00MElYT013RkJZYlg0RDZqOUFQOVA4ejBORmJwYWRyUFlRWXpJY09jM3dqRDgvbEpMOUJJQWMzNE5KdU1CbkMxQkQxUnFwRTNGZllXb0FKbnJyQlhURkVpU1R0RkorbVZHbmJ0V3JuMTFzVkZzQUVYYXZDSTlQUGVoZDRmeXZVQ1hwYVhuTTBVbUl5aWptcGdm''@;'; put 'put ''VDR2M1FRZmkrUjZ2bHhhY0w3RXo4TitVdzViNXVlZmRMTDdzekROQzVUSHg5N0pRMk5qaHlieHdScnBKYXdMTDRUeG5QU0RtdHlaeVUzS21Rbmc4UmZiNFJwODlsZGtuNTNhV2Zkeld3bjI3MkcycjNGWnR2SFk2aEE4dHhLckFnODRmU0ZuV3ozTVpIQmNsc0dmMzJHc2k3bjRnUDQ0VXAyVHRP''@;'; put 'put ''VE9TWTZpcDdiWVpkeHZ2aXZuNHg5ZFFOdWQ1K0RDeldjc2N0dXBmUHdCRjE0bTU2R0NzSDRWOXQ2R3l1bTVmZTUyQVQzSlhTOWdvS1hVU3E0WTg5VEs3V1V1QjhzcjVZcTlKSDljbkV1dWNHSnIzZ3pxNDZwOTdma0Q5eDg4ZFA4UzZaSEVZWHAwZWJxUEsvZTVqeTh1M2J1MEtKbnhmdzJjSFJp''@;'; put 'put ''NGt0OUZDSE1XL2gzME8xMVhDNXJLVExxeFhtY2d0QUNaaFFlQWhqUmF2V2JaYkNBNm5SSUtNSWxHUVJVTVNDYjlmb1NTTGNubXBwUS80WS9YMVVCM1huc2dGQWdXd0x3M2hsSHpNbDZsdGpXYmJEcFpoUXRsUEg3YWV6b1lQTk16ek5LYmUwNEhBeWU3RlRVdVhhUEtjOGJYYnFpcjZXeEtkZkhN''@;'; put 'put ''NTQ3R1ZEdlQ1MFNkL0l5dnBKcGQxdXZIMmQ2bVpQcjk0aGE2NERtM2RHK25lV3d1Szl0K1FLZkhHZjJtWkRxOXlPR2xuOUVjWFJtZVBvL21iSWpqakg1VE12M2V2TzFZWnhqOVRuUDZ0Zkd4V08wem0yZVRQTStQYktGOW5xdEw1em5ENTNrRXlYWFRuYXh1dWd2OWQ4WVZqNVdYYVhUNkVxekJ4''@;'; put 'put ''WVZFMEJTQXVhRFpQbGNBek04bDBQa3U3dmRwOGRaVGY5czJ1UUp2M1dyYlhJRzNhclpqcnNBMkRYbXVnRGtZOGRQMEhLL1ZBRjdGSlVMTm9iZFJIazdhcnIxaW02Q3orMzJybHlvWlAzNVN0em4yYkR4MHlSSnllYjlZem5VSFdnZmpDb3U2V0FYUml1WEFrNlcwNEZDOWM2SzhjNUdOT3llS3Vp''@;'; put 'put ''VkVLekJRUGlLMEpjbWpmdFBHdldXanlpMjdEYnZ3RnEzWUVlTjIyN2ExSGQ4MVU2QzJtbTJhSHZ5WlM1MFA0TGZLTE1jdkhoemZMc0VqdmhUZU1kMTgxNHgyYzVhSE5seTVjLzY1aWpmUEtyd0pmTDI0QTI5ZVZIZ1Q2K3M0YjlZQWI5SzdBcXJRRnpNV054YVF5d3pLd0VUdklwUzNGZ0ExN0tT''@;'; put 'put ''R25ueVNHMmlRVDA0ek11Z0pzL08ySE5oRWFCTU5QWWg1TzIweU5adkE1V09iTGEwME5KWUlKaDVNdG9vNjdIU2JxTmZwRlhmWUkrckkwenNPOEQ3NzFuM3dPT205QjV1eTRIcHkxeUN3dlA1T2x0ZmZnTDZXS2E3QmVxSFdTUXg2QnlhR1hGS2ZOa2YvV28zMlZpT0dpV0xEU1ZCY2dHRmFVeWdJ''@;'; put 'put ''bWdVZHJ5emt1WHZJZ3hRczFlZmI2QTNrcHJkcWxLbmRIcDZsQnFJanFtWUN4Uk9WMncyb25oVWJ1QUZUTkxLaDJZR1N0eFlndUNuaDQvZ1cyazIwNTJzU0FtWFZSWnV6Q0p2MW8ybDFtVUtmMnhoZzlNZnVwR0EwbXBacDlJb3ROT29GRzBaZ3R1d3N0MlhKeEJaN2wrY2h0T1R5RUk1dW80ZDRy''@;'; put 'put ''UHl1WEt6ODZBaFM1VEM4bk10ek1LRy8zNUxEd05xeTgyMFdsd2VZbTdmTG93QWI3QlBidG0zUHgvcHg0VzRrMzZleGg5Mm5FYURuTTA0UVJ3V3dyWVZBNHN4Tmx0TlA4bkgxdk5NRUxRS0JZbi9Rd2U4bll0a0VtOElRbTY3ZklQZU0zamF0dCtWaUQ0NGoxOG4zY0pEejdOWU5TNmtjYlBCNTNQ''@;'; put 'put ''ZWNWRi9Ld2VjNkFIT2RBNy9JajI3aVV0cFNySWRORVRFVy9GaUg2WmxORVh2aVo1RnI0RkU4TEFkN3krUktGMXBac2sxOHQwcCtUV082dWVxVGpTRmRZNENXdUlXOW9pckV2YlVTSlptTDRwSTVGa1JTMTZVY3pydXZ3YkxOQlNxS2t3aDd4ZTRLWWZUWXluTmU4TmdXT3VLMUtGUm03bVcwSUtM''@;'; put 'put ''dnFQSmN6aXA1THZEODNWdmE4ck9IaThyWkF4Ym5rYXJ0YWk1SFpnWGRzSVdPMkIwZWpOWTZaRnRyUzU2YlhQOUJhVzJCMjFyeWVTTnZ1NnEwQmQvMzJ6dTBmVTV1UytPQkgxYTFQWnRycTBkbmQyaDdVUmtYNjlzWTNiQzZXdXBQRjlJNEJNMUlwelU3TEE3QkNtRElBV3E5ZXhoUkY2SUNlMEM1''@;'; put 'put ''N2twVkRtdklsOEYrZmt2dEs4MGJQMHd1dnMyN1BOejBMby9Qeks3Mmo0LzFrWXQzN3Q2OWZSKzUraVNDYmdXZU95MVhKOGw5cEpPaXY2dHZiTHgvZFpaYzNMMzdUcm1QRVh3RmVRNzJVYzdHTnhLYWp6OWlBQlU1dEYzK2VBRXlCNFZjTnI0Y2NtSk95Y1BqbFkyT1ZHbHB5dEZZTVZGTFJxb3FV''@;'; put 'put ''ZzZYeTVHcXFHTGpUS0tIV0t3bHhNYTVaRzc2NWt4L0picy9IeW1SYXdsR3NFT29aTFVFemF4WGVtOE96YVpmMVdJQk9IdzJWd1FxdksyS0F2WDk5VGQxZFVVaW5aMFJlb0U2L1NJai9QZElWNEkvY1B0NGp2d2VRTG9iV1ZFcm0wRzBFQlpqb2RReW9tV1ZBT3hXR01EcExKT0VBbjB6d2F1bUFp''@;'; put 'put ''Nk5YRlVnMzhPdUNqTGYwRkhoN3M4RmxoOWhVU0czSEZMbWQ3bVRkbnc3ZVFGRzdtSGpwcDNRczRGVmFUa3dIdEpqWVpBZW1KTlpxazZCZmxlVkt6U0lNTUdNUXhmb1VLMU1ISWlhZk1vVnkvU0dkSzR5L2JqQVYyeDFtK3h1YmJwbzJzaysyOXk2dEdXR2ROcXNCUVVWWHNNNytFLzlEWHcvdXZC''@;'; put 'put ''L3NGb0lFWlh5aWdFdElHZUl1cmFuN2JaY0RZVmI5QWZsb2dpY1BmQ0JRZktLNDVZUE9kN0orSzVYK3RuNmsrdGZBcVlLc0I1SytGM2tHK3UwQXJtK3hJMlhrbC9nZ1UxUFZWVjRuUWN0V1FBekp4OXZVdVFqNnNWMU84akhWeFQ1aUhyUjR3aHQwL1lZZnZvdDJ4N0RYYXEycTdtMks3aC9pM3pr''@;'; put 'put ''YlovTHRWMUJYK2YrN2ZvZ1BjOVFuNFc4K1R0dVA3ejVPOWwraUFCTW1QbkdRekxNMHd5R3FHQjRyUDN5WEQ4RlFBM2J4OXBmeU1YYUM4YlF0am1RdmVpOU8raUdWM0xuMHIwSHVPNXRSUDlHVExqanJlK0JmMVdxd1IxelNodWgvVzIwRWZSdi9sNXAwNDAvZ3k2U3p3TE5sREY2R2RwY0VNZnB4''@;'; put 'put ''YTdFeTNsczlvWDhCZmJrOWcwMzJEUGJCMzhXZlpzOENDdTJBQVppdkxhTnhISzFiVEFtL21zMlpqbTkwYW04RU9oOFF5R1R3SVJhb0RoZ1l6ZEliUnhidStOVXNHNkhhVldwUHZQNTRVZklnMFZoUGo4MnozK0dlZHB5ODZSa29reVlZdkZodkF2V1pObXBMb2pXeGJPNm9FMTE4WSszK256d3I0''@;'; put 'put ''WCtleGcrZWVudlh2akE4ZFFMZFBOT2RCM3NQVGd5Ulg3NC9zK01ocTNBSXdqa1FHVDlkNW96cXIrUDBnWFVPSXQreWZNYzR4YXNMZVIvdmtTUGRXWnNOT21NNmo5NVlpK3dDU2FUc0dRMUZJa2E5VjlLU2IxRlEvWlhUM2hya2JZVzVMK1gwckp0dTIzK1lzcVd0dUNCTkkyT1pqTEtYMDRablIy''@;'; put 'put ''ZDJiMHJrODJNRFBURnVtS2R6VTNiL2hVVngvL2dyNmhVYmZvOW9JS3RhdnFULzhJS0hza3F2NHhFcGZQSzMxdjVLL29oOGFmODRaWDg1NG1HM0I5aHlmOHhGZ3pXZlJLWDRMK2pOK1k4QVFaenJLNEx1d0YzZ2Z0MjMzMzM3amRmdEQ5eHdjRnJXUUd1UW9FVEdGdzQ3UlpyUC9qQjNaLys5T0NG''@;'; put 'put ''Sit3dnZzeDB3Uy9rTzNTamFDSXpXdVloR25ySGdJbFo2UnBRY09CYkx4c3dNV0pzb3JVT3VSb1hNMHRPNVJFUStCNUZEWkc2MmhxckxRak9vTlVlTEtEQnE5eEZRMkh3RkZubVNTclpTZktWbFRSaERKRHM5cktRS2l0dlNkdzZOUGFlRmZmTUlORU03eTladm0xRUxta1p1TmFMSzZXWFlDR3Qw''@;'; put 'put ''dmNyYnNwT3NtdDN1NjhlN0M4dUFDWGVlMWs3SzJnWjYrb3ZLN0hiK2dkbVpabmxKUTU4UGNnNTNST0UxaERZYzdkN1gwL3Y5V2FHREpneUFraGRyOVZMaExVMStwWExYV2lSNzJMUVAxVmlMOUNTMkRaM1BXMjlLNkhsOENYdVN2amozaDJ2U3BCajlpMVV4dU9ZZk9idytWd3N2NFhxTHZaY2Rj''@;'; put 'put ''N0tubC9NUFJldlE5dkJvNVdyMU0vei9mZktmaXAvZmxjTy91Z3g1VDZLUGVSZGdBTXZpZ01PcW4wMkREalk3R01waU1oN1dJSE5LSGtYODdqVWFKRTlybldrUWc5M3Y5UUlrbDJ2ZXpmblByRDVVbiticndQODdVK3AxdkZDRGg4RlIzTTUvT2c4dTNOR29ZT2sxVCttM0I2RGFkNGJ2TmR1ZmE5''@;'; put 'put ''ZG0wRC9ENUQ4RWlJQUFBQUFBUUFBQUFFQUFBOENHK3hmRHp6MUFCOEQ2QUFBQUFEVHdaMkdBQUFBQU5TK3BPdi9RLzdvQkhVRHlRQUFBQWdBQWdBQUFBQUFBSGphWTJCa1lHQSsrZThLQXdQTG92L08veXRZU2htQUlzaUEwUkFBcGZJR3F3QUFBSGphZFpRL2FKTlJGTVhQdlY4R1JSeXNXRkZz''@;'; put 'put ''YXpIV0prU2ExdGhxd2NZMHhWU1RTRnRyZzBJWGNWQVJzYUNwNHVKU3NRNHU0dVJrRUYwczZ1Ulcvd3ppNEs2VE9FbFVXbWdvV0FyMTg5eG5JakdKQ1ljZmVmbmVlL2VlZDc0bnk1Z0VQNUtsV3FrZHlNaHJER2tCUWIySURpK01pRDdFYnF4Z1NDNmhud3JMZmV6WGNTU2tDVWRrQ2pGWmo2UTg4''@;'; put 'put ''eGYwSlhvbGoyYisxNldqMktYVDFDUzZOWTllUFlVK1BjdnhQUHJjODV5ckdZNXhIZktZckdLck44VzlTdGl1ejVIVE9VUjFsYnlHdEo2bml2ejlFV21zSWFPdDJNS2FKblFmQnIzVHlIa2VGZUwvczBnNzN1UHpyRjJ2STZRTEdMRTFBd2ZRcHZQVUUyelVXNnp6Q282ejVoV3lTNzZoUjBmOFh6''@;'; put 'put ''S0J1QjdHWHAxQlZuZXlsaG11TllhSW5FTzczbVR0T1F4akNZZXc1TC9YVHFSUXdyQjNCeWtiWjUwUk40OXpaQlpaS2FGRGJuQmVqbjBtME93Tm9VVWo3RzBjMjNRZGV1UXVPcVVGRjhpd3ZNSkI4OTN0T1kyWTFTZ3ZXRXNiUWp5THVLdnJOb0w0aVFFWmNPTlIrclhIZWRWQWdTYlMvRFB2cW9R''@;'; put 'put ''MS80UDVSeTVTWDczTkNGZThxNVVHa1hFMC82cGwvdEZubmxuV2VkVkEzanhwdll6OUsvcjJqdjZseUNMMVJhL3kvQ3ZlMWNweVlUVC9xbVgrbWM5RzY5ZjJyS1gxYnZ0WGFEbml1VmkvK3FEc3k1amJwekV0YTNiZVpkS3J6NnozRTczckpuM3lxUFhoTXNnY1dBNHRDMzk1QnUweWlIYnoxdnFy''@;'; put 'put ''WThqVkVLa3dzQUhSd0NidXk5eGFkdXJJTEZ1ZTZzaDh1NHhWYU9kakh2Mkg5ZzY0SE5vWm1uL2xkOEh5V0V2THVCU1lQZE5UeFBHZFBFRWxxRGZvMXpESDRDY3JhOWF5enRQeW5ySU1lTVUvOXcxV3FjZUF4aEh6THZNZWFTcmZLWXZrSXZrSUovVXQ3d3JlUzRFQzM4TWtnbFJZNS93ZkxoOGU1''@;'; put 'put ''L0pjRzN5enlQNEdqNWZ3dEFCNDJrWENYVWdhY1FBQWNMdXVNNzh1TXp2UDIzbWZlcDk1bnYvejdrRWlRaUpDSXFJbmllSERpQmd4WXNTSWlJZ3h4aDVHUkVRUEVTSVJzWWM5REFtSkVTRWo5aEFqSWtSaWpKQWhFaElpTVVhSWpOakxZUHgrTnB0dDhaKzg3V09YclNzTFVkQTJWSVRLMEgzM1h2''@;'; put 'put ''ZFpkd09HNERBOERMK0ZEK0ZhejJqUFVrOEpZWkFVVXJSajlobjduSDNWbnJjWGUrSGV1c1B2V0hBVUhBMG43a3c1dDUwbFo4V0Z1SUJyeHJYbU9uRGR1Y1B1ZGZlcHgrdlJQZk9lRGMrSnA0R2lhQko5aWk2aE8rZ3hXa0ZiZmMvN0hyMFQzbXEvM3YvR1ovTmxmWG5mbjRHeGdaY0RGVC9sbi9l''@;'; put 'put ''WEIwY0dsd2ZQTVJpYndoYXhISFllZ0FKYVlDV3dIYmdKTkhFS1g4Q1A4WWRnSWpnYXpBWlhnaCtDRjRSR0pJa05JazhVaURPaVF0d1M3U2VqcEpma3lBUTVUbWJJQlhLTjNDVDN5U2I1R1BLR3VGQWlOQjdLaEpZcG1NSW9pVXBTazFTV3l0RVFqZElFTGRDQUhxSFRUSnBwTVIwV1lYMHN4U3Fz''@;'; put 'put ''eGFiWUtiYkVmbU92MlJyYllqc2N3azF6MTF5TmEzRWRIdUY5L0E2L3p4L3hKZjZLdndrcjRYSzRIcjZQUUJFMHdrUkFKQmxwUkRvQ0l1QkNXSGdsZEVTM2lJdUthSWtwc1NGMkpFUWFscmFrQSttejlGVzZrbXJTYnhtUmNYbENmaWZ2eW9keVFUNlZMK1VmY2xOdUswNEZVK2FVVzZXdHdxcFhK''@;'; put 'put ''VlZOVGFxVGFtWklqL1pHaWFnUUxXcXoyZ3R0WGR2U2N0b243VVM3MEw3SHROaEJyQmo3RWl2SHFyRjdIZEpSbmRHSDlCRTlyYS9xT2Iyay80cVQ4V3g4TDE0SENBQmdERXlEWjJBUnZBWWJJQThLNEF4Y2dwK2crWitCR0l5Uk5tYU5QZVBJcUJvdG81V29KOXFtMjF3MTM1dTdadG1zbW5mbWd3''@;'; put 'put ''VlpxRVZZODlhU3RXNXRXdm0vYW16QVRRQUFBUUFBQVR3QVlnQUtBRDhBQkFBQ0FDZ0FPUUNMQUFBQWtBRkJBQU1BQVhqYWhaTE5Uc0pBRklWUEN4cUloS0F4THJwcVhMaVR2eWdZWEdyY0NHb2tscDBKU0FWaXNkQVdFMS9GTnpEeFFmeDVBamMrZzB1WG5nNjNDQVlsazJhK21YdnV1VE8zQTJB''@;'; put 'put ''Tkg0aEJpeWNCSFBJYnM0Wk5yc2FzSTQxcjRSajJFQWpIVWNTVDhCS01pYzh5YzcrRUV5aHFobkFTaGxZVlhzR09Gbm1tWUdrUHdobXNhNS9DcTBqcGNlRm5iT2daNFJmazlTM2hWeVIwUy9nTmFmMXl6Tzh4R0xxREE3Z1k0QjRlZXVpZ3k1T2JlT1JYUkI0RmxFZ3RSazNxdWtyamsrdWMrOHp5''@;'; put 'put ''bVh1TExHcXdtZWNwSnhlT3FNTGRObmxFN1RtNVEzTFFwSzdBbkx3YSs3akFNUm80SWMxejJaNXhXVnpIL0ZYSjRzcWpxcWRPYWs1Vlhsek40bnhGalV0VjJJRlRPdGhUOVpya004YkRXSlZ6KzU4ZWhYME51S29neDNFMzQrd3EzLzdFTmN1WXkzV1U0MHRXaDlHQXV5UCtrVWlUNHh6VjdLdDcv''@;'; put 'put ''dFRNemIzalgzdlJyUnZrRnQ5eTZCQk1PbGFUL2gycHFNbFJVckV5ejFaZ3ZJSmR2cGpvMVpSeFE1M05DZ1BwdjAxdm45bVJheDFEN3ZRWTh4aHp2Z0hGZllWakFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQ''@;'; put 'put ''RENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pO''@;'; put 'put ''ZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1''@;'; put 'put ''SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQ''@;'; put 'put ''L21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29h''@;'; put 'put ''OXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJq''@;'; put 'put ''b09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25y''@;'; put 'put ''SFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZi''@;'; put 'put ''Q2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RR''@;'; put 'put ''Tkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTlHd0FBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hh''@;'; put 'put ''cnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZhRUFCTUFBQUFBb3VBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1lBQUFPZGtEQ2ZwWkhVMVZDQUFB''@;'; put 'put ''SkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQnBFcThKWTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWhFQjhXWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFB''@;'; put 'put ''T013QUFHOGtIZDdZbDJobFlXUUFBRXRJQUFBQU5nQUFBRFlMYzRnUmFHaGxZUUFBUzRBQUFBQWhBQUFBSkFlUkJDQm9iWFI0QUFCTHBBQUFBb3dBQUFUYXVZNDBKMnh2WTJFQUFFNHdBQUFDZEFBQUFuclUrN24yYldGNGNBQUFVS1FBQUFBZ0FBQUFJQUtVQTFCdVlXMWxBQUJReEFBQUFZNEFB''@;'; put 'put ''QU42TWdpSVduQnZjM1FBQUZKVUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZmZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQldmQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUln''@;'; put 'put ''UkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZStYL3NWYWlubFIrZ1lJWVFoYVRvZ1RKUWdHa1k2MHhSVXhsdzFhTGJwbklNaGpESENOdWNLYzJBV0Fwcy9YU1VMUSsxMGtncXNDbmJXa1lZ''@;'; put 'put ''d1J0eENaQkxEb0RBR0ZhcHhNb1F0QnBWM3ozdmVEL3ZXdHRNKzZkUFRjKzk3MzN2T2VlNTM3Z2NCa01jNDFFTG0xTlF0UUJFOFBZaGpPUDRSS056aWJ5Ni9EeFZMdnI1OE1TcVhMRjZ5bUxOQmZ6S2F6a2pZOGJrOGhtTU1KcGpIWVR6cVhFczZHaTJ6VlNYYWdJZ1B5ZUFWZkdLVStRSXFQb0tn''@;'; put 'put ''SnQ1QURwaUo5ZmdRc1l5Q2NodWNKeU9sRXlVWXhKMmRqVHZpWitQRDhURU04Qk9mRzNEa1VML2VMbFQyK3YrdCtKRUJWM2h6d0pHakE0L0Urd1lZZVRZK0hyY24rSmovTUgvL2txRHYyK1BYNG8zeFJ1WjFMRE05Z2RuNkhLR29KaHcrVDNoTUpRSytRRVNZVHVSd0xWR0VHVVF4Y3p1VGxWcEpD''@;'; put 'put ''RmJqWjV5NWpnak0rSHI2ZHhLQ0Z3bkJId2pGUWNMak5jTGpHQkZ3aW9qd0JoSGhEQkhoTEpIRE9TS0g5NGxpVnU5RHJoWVRlU21UTWhSTHVaU1RLNlNDUElxVnpYUHR5VlRKZUQ0emlSRGJkN3BqdFIwNzI3RzNIUWZNSVlwUVF4VGpSaUtQK1VRSmx1TDdYQ0dKSkxKSUlvc2tZQ01lNC94R29o''@;'; put 'put ''aS93aWJPZndLLzVmeG5pQkpzSjNMWVFSVGg5MFFPclVRUm5pZHllSUVvd2k2aUdHMUVNWFlUZVhRUWVld2g4dGhMNVBFblF2Qm5RaXc3RVk0VEpmZ25rZVpGTFM5cWVmR1dsMkI1Q1pZWGIzbnhsaGN2STJRRTgzV2xYRWxPY2hTNGFqVXpOSUUxcm1adHA3S20wNW1aR2N6SVVpekRkN0VjMzhN''@;'; put 'put ''SzFuSTExdUNuZUpCWldNZm90ek9pNTFuSkYxbkJnNnpjTVZic0RWYnFMSGZ5dnAyc01yNjNJamxmK29DZHczMnluSEVQcHI3YXFidU44WC82VWF1TjhPK1pBVWZlSkM3MDgrVDVUenBQY1dmOHIvZ2Y4U005Snk5NzB1SXo4ZFo0NjBmL2RXZWZ0MmVVSnpqUmhKZ21GRjhoSEc0alBHNG5BaFlT''@;'; put 'put ''RVJYeEdPY2thaEJUZzVvYUZDMUVoRzFFWkpVV3E3UllwY1VxTFZaWFJSZmhjSnB3NkNZY1BpQUNMaEdSREpFaHJPdFFHVW9lSnNQSVNVWEZLaW95V2taemZVVVZyaUJLTUlRWVpFb1hVN3FhMGwxQjZWOGlza3IzRmsrVWlTZG5TbmNGcGZkbzNGdFUzcUxLV1ZTWGxaNXFQRlgzUzhUQXVrNmk5''@;'; put 'put ''YVpaTFVTWUtOZFpuRG5UcnpQOWFpSG1STVZhaUR6UnNtYml6eXJhV1JaeU1sbXU1ZHVUVDY4YVJqaWY5YnFOY1Mxa0pJMk1wQW1QTTVvbjhDU2VRak1qZW9hUmJPTnBiT051TzdqTHZkeGRGMnZReloxZDRnNkc4bTBqK0piUlhIR002VmxSYWgybFBQNEo3WExNdy9XMHhPenIyWWs2b3pIa2s4''@;'; put 'put ''ei9IbGtyNitWaGFaTE4waXhiWllmc2twZGxqK3lYQTNKSWpzZ0pPUzF2eTd2eW5seFNyM2t0MCtGYXFlTjBvbGJyTkoyaE4yaU4xdWw4cmRjNzlXNWRwTXQwcGQ2dmEvUWgzYUNQNmliZG9rOXJpN1pxbSs3V3ZmcUt2cXF2YTZlZTFHNTlSeS9vUlFjWHVVR3UzSTEwWTl4NE44bE5kbGU3bVc2''@;'; put 'put ''MnU5SE5jd3ZjN2U1cjdoNzNIYmZjclhJUHVBZmR6OTB2WEtQN3RYdlMvYzV0Y3krNGwxeUgyK2YrNnY3bURydmpyc3U5NWY3dC91cys4T3FMZkttdjhLUDhXRC9CVi9tcC9oby95OC94dGY1bWY2dGY2TC9oNy9YMytSWCtoNzdCci9Yci9jTyt5Vy8yelg2cjMrRjMrWmY5SHIvZkgvQ0gvQkYv''@;'; put 'put ''d3AvMmIvdDMvWHYrVXZBaEg4ckM4RkFaeG9XSm9UcE1DelBDRGFFbTFJWDVvVDdjR2U0T2k4S3lzRExjSDlhRWg4S0c4R2pZRkxhRXAwTkxhQTF0WVhmWUcxNEpyNGJYUTJjNEdickRPK0ZDdUJnaGlxSkJQQjJyZER1NXdYaTJjYTF4VThKWVo5eHFualhHalJtK3hYaUs4U3hqVzQxMVN1ejZ6''@;'; put 'put ''R3FUbEorcGNwVnh0ZkhjaExIYWVLZTJreHZNZjEwUDQ1VHh4Y3hUemNaVnhxWEd0N2hGNUJialZmMnpuc3ZFV0d2K1BvdzdqTnVOMS9XdzNKWEdidllTNC8zR2pYMDV6Y0FBTzZrM25xUWRuOFQ2eTE2NTZ1aVA4VlhqbmNhcmU1aDUrelQ4ZjFabWJudDRWV2JQdmV4TVRSdk1mNVg1cy9ac3kr''@;'; put 'put ''RnZ6TDRyay9uMExiMXNHMDNybS9VM21UMDN0VzFPcXBtME9tblVxVDRMZHNHZnpHazFlNmRiZVZtOUJZMTFtbjAwc1FzMVRYT1NhanZOVE5iZm1MRVBtZDFnTlRwcU9qL1ZvMEJxdGVQeWlVQmYveFN6TDZhMnpVbFZuZlduSjJoV1JqUFZtY3luOWc2ekYyV3FZSG5UU3ZNM216OVZXbFhHVHJO''@;'; put 'put ''YW1zbDhYL3U4MlQreTZHNHkrKzltWjFldWpiY2xLOGZQZmF4UzJUZk9MWnp1amsvQnZXY3FQbXYzVXZEZU5aRlpTVzZubmwyN2lsMHd1V0ZIbU1LYldBN1RjQTE3V05LNVM5bTNyMk5QVHpyM0VMdWpsbHZuSHNydlZiWHNRM1hFTU56RVBqZWNuZTVXZnZlcEp5cXRsMytHWGU4T2RxMmx2THVO''@;'; put 'put ''dGR2YmRIYjB6Vnh2Q3p2ZlhPdDlYMmIzYTJlSC9DTU80RnU4MFozRkQreFcyWVR6RXZBNE8vRm90RmhQYmVOK1JhNnc3MllSSkY1aEttekFQZVMxN0hZbEdNbDNqV2RFazNFMWR6MmJ1NXlIQlJ3OWFOcnRNajV0YkdjR1J6SjgxUGpIeHM4Wm43Q3NqVE83QkYva2UrN0Z0eVVuUlZJc2VTbVJ3''@;'; put 'put ''VkxhZDBmL0EzSUZvYmNBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtOG1XS1lHQmxZR0hxQXRJTURONFFtakdPUVlUUkRNaG5ZR2VBQXlRbUEwT29kN2dmZ3dPRGd1b2ZadW4veGd3TXpPY1lEUlVZR0NhRDVKaFltZFlES1FVR0pnQzhpUW9yQUFBQWVO''@;'; put 'put ''cTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1''@;'; put 'put ''Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcx''@;'; put 'put ''cTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktT''@;'; put 'put ''WmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFC''@;'; put 'put ''VDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVo''@;'; put 'put ''NDJtTmd3QUxLZ1RDRElZTnBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowajBudy81Zi9maUErQU9ZTERncDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1''@;'; put 'put ''WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJi''@;'; put 'put ''NXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtY''@;'; put 'put ''SHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tH''@;'; put 'put ''SHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JT''@;'; put 'put ''Zy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0''@;'; put 'put ''QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2ow''@;'; put 'put ''YkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNz''@;'; put 'put ''cG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFS''@;'; put 'put ''b3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFw''@;'; put 'put ''Q0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENj''@;'; put 'put ''Qms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92''@;'; put 'put ''RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4r''@;'; put 'put ''U3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmRGekZsV2hWdmU3M2VsT3I5NWJVMmxxOVNkMnQxdEpxdGZaK1dtenRxMjFrMlJheXNDM0oyR0JiWnJPeE1lQ1FCUUloSk01a2c0U1FZekloWUpaQUlDUXpXU1loem9KL2Z1WVBK''@;'; put 'put ''d21UU2VDZkpIK3lURDRoazhtQW52NnRxdmRhcmMwNDg4L1lVcXY3dlZ2MXF1NStiOTJxUmlZMHZaekVIeGQ4U0VENXlJMEtVUUJWb1JScVJ1Mm9EeFhLbnE2T3RwWjBZeklhQ1pZVkZYanNOcU9PSUZOdFRPKzMreVYzMGgxd0oxT0JWRElsc2I4U3ZOV3UwbXYwTDcwRFYxTGFleFdHTlVnblUv''@;'; put 'put ''amp5amR4K3h1ZFhlZTd1czZmNzZydys3dTZ1dlozK2U4NnY3L0N2OTkvL3Z4NS8vNzlkMjNkZW41dWEva1BoRjkzKzBOKytMbGpvV0xyMXVBc3ZOdnFiK3VxMkgreXlWc3pkdXpZNDhlT2pkWE0rMnY4OElNUVFWdVgzMFN2a3d0c2JpRzVBbUdNcGhGQzFrRkVpRENqdzRMZ0ZZWjBPbDIremhx''@;'; put 'put ''eTIvU1NOK1pNQ2dGUE9OWFFtS3ozdUYxaVlQUytrdTJHUktLaUxGRmRUaTRvOWIrcjhaY2xFbVgrR29TV2wxRW5Qb2NmSmhkc0ZjaUVrRTJBMTFjUmZXNEZ2TndPei9XaE10UXZiODBYQ2RJTEJCT0VENWl4MFdnZHROcnlCRWt5VEZ0TXhHQ3dEK293SWZsa0NLR3kwcEppYU9Vcktpend3dk9k''@;'; put 'put ''OXV3L3FTU0dwYVFVa0FKcDlwdE9zdCtreEg0bGVwT1ErRUh2UW5RNmVpWjZkWFMvWjM5OHpqTVA3ODdBbFhuUHQ4N0V6K0RISDk4RkNEMi82L0ZkbjROL3V4NUhnSm15NWVkSUwva3pLa0ZCRkVNSk9SYUwrc3VMQ3IwZWw5MXNNa2hXUlBDQUhpUGNEL1BDQk0vQ0JMMW9xTlJ1RndCZFFSR0lu''@;'; put 'put ''QXBIMGg1dktvRUJiV21ndGNjcmhTUHVVdXhHY05XSzNZN0dWQU5jSUwwbkR1MSs5NzYrZ2NuNStjVTl1Mis0dXFkbjROaHg1Vmc0R295LzJsalRkR1JSa3J0dHU2ZTZuZC8wN1pnWVh6UzNkMWpHOTdUYXZsSzA4eXJzRE9hZk45YVVLa2ZySy93UjI5TklqNnFXLzEyd2ttZUJzazdBY2cxcVJk''@;'; put 'put ''OGRmTEpnYktjY00yTzlDV05SaitlUmlBeEcwYkNBZERvMFF6Q2xmQjdnWDVpeFNFUVE4b1VoMytDVEVXaFNjOWttQ0VCWk8ybkdnaVhKS3czNTVPUUdMUWdCV05vTWJkeHFha29PMTlhV2w3dGNDTlcyMXJZME5wVFhsQ2NxdzY0eVYybFJnZE5odDhGa3JHR3I1STQ1S0RJN2NMSWVzT2l5NGdC''@;'; put 'put ''TzRnQkRZNkJDZExzOFNiVG1mZ2RldWZlcG9XaDB1TFp1T0JvYnFzUHYzNk9FOWl3bUVvRmdkU0tBNTRaaWNMRnVpTjRLSm1vQ0FYcHhLakZhV3plV1NJekJhelcrYW1rY2Z6WWRpemVscTJOcFpTSXhXbGM3VmxQRElBYlQ4VmdUdllVbzMvaVgvMGplUmI2RXlsRWNOYUlPdWJVMkVTNHJLUzRx''@;'; put 'put ''TUJrRlVnNjhMcEFCeXRkNEJzVE9NNmdIWVdPWUFlYXBydmI3cXh1clUvNjRQeGF2RUNWUFRCOFJBeFdjZ1hKbkJyZThqV212S0hrUm5acVhUOU9SRGtlQXJXQ3FwSGhrYXJGenZxVnZ0TGlnYnJLaFlYdk4wTGI2dnFxUzZickU5Y29uRXA3Q3RwcG9tU2t6MlJPTDlkVGxqWS9WVHJWM1R3Y3JP''@;'; put 'put ''OE9Ka1VUMWNFM3pZTGgxcUgwZ3ZrOCtUbHJpZ2NMYTBvSjRvS0o2NlMrcDNXTUZ6Y0c2Rm9Rd2xYSDBMWkJsQzNMS05xcEJHSG54a0R0SVlPQ09GVjBoQmE1eVIzeStDUEE3ZnZWdzBGZFo2UXNlN2tXMGo4YmxxL0FZK1FyS1ErSXplWHBjRzJNcUp1MWxzL0JLbjF0Y1BKZ1pIeDRleit6Nitk''@;'; put 'put ''bXovekxldGUzQ2tTTlBiT3RtYmNQUVZ0YmFTdENXWXlHUzVnZ0tUd3dQVDJRT1FnL3oyNTQ0Y3VUQ3RxNHg2T1BuWTZ4dEF1L0grOGpmb1htVWxodG1obnFhcWdDWE1JY0JBV01kUmlEVzh5TFc2OGtNOEs1SEQvb0hJT2VtSnVXT3VwcUFQeVpSUm9TQnBodlRvZ1QvQXhYaENQL1lDQlRnN3lt''@;'; put 'put ''bHZCNXZLZmF5enhvcVJLa1JicVhwUnkrN1lNVVNKU2FGZEx2Z1U2QUNPa2pnQ0w4Z0JsNTBtVVdTVnhCdzZZMUdtMDV2TFlpV1c2MmwxVjZyWG1jM2lBWnZoV1EzRTlIc3lyTzZURmdVN0M0aDRPQ2dCc2xlclM5d3V3cHFYWkloQjFvUXNRbEVZNy9ENGt1VTVoczlmclBPYURTWUhJYThQSk1v''@;'; put 'put ''bXZLc0JvZFpNcGgwMW5MUlpzZ3ZUZmdzRG9mRlZhc3JkT2M1aERJVEJUWWE4bldtZkNJYWphTE5vck1hRENZTjNsMm9xM1ZaSEJUSEhXaVdGSkkyWkVaaE9ZQjBBdGJ0QUY0SHpZRUZkQURVQVo1R2dPdGhwc1J0b2xRVXd3RnFEVlBVS2laSjRaZXUreEw4NEtJWFhsajQ4cGRwZjVubFJmUUw5''@;'; put 'put ''RUZrUlY0WnhvOTZOWjREd1FrNktNK0JTRlRrNEhvOFlTbXJUcFNIRTlYSmF4TzFOZVhsaWZiYXl1Mk50Szg2OU0rNEEvZUJ0QmJJYmtRNzJrSDVBa2FFWUVRMjJwblQ3L2JYNFR6bGo3anZFT09aZHJDWlA0SG5tNm4xcDFkQUMyTHN4WlE3ek1nVUZJQXJjaTNrSWRVNldyS1dFUy8vWnZrNS9C''@;'; put 'put ''M3lLM2l1WGJiU1RzL0NzMi9nRDZTcURHODVxNXcvUzM3MTlpWEU3R1hkOHB2a0h2SWlxTDh5RkplcmdCdlpqTG5Xd0dDbzJRQnNOakN5WmJiU0FnL1RrMkI2WXJxMWVwQ2tHaExBWEZTd1N1RkpocnVIaCsrZW5IemYwTkQ3SnV0SDQvSFIrdnF4ZUh5czNyTDdNL1B6RCsvZS9mRDgvR2QyTDNa''@;'; put 'put ''Y3YzWHI5ZTN0OUxXRDRZQVNOZzB5THlLZlhBQ2tGQUJmQTF5clk1eVBoK3hPaGpvcGtrN2FBeS9lbFB6Ni9sT2tiSERuMmFWeHhOckhZVkpobUU4Qmlzb1Jzd21tQTl4QXlBQkRKMU9IMUFHWlJzd0cyYjNCc0U0cWlHV3dwc1dsU0tPcS8vSXhrS2Q2U1c3Y1VwdmNWamsrOTJEUGRabit5ZnR4''@;'; put 'put ''V3BIbXZwdmNIcXRwcWFzZGZIZmpOUjFiYnU2K1laRTl1eFJ3R1lWblY2R00zRlpZQU0rcHdKakEwMkVJQTlTR2cwRS9BRS9XelFCendrQVEwczlRSmVCbDhsK0ZLb05CZnpBa1NZVkFaYXBra3ZYTTdraXBwS2R4N2ZBa0ZlMy9lSGQ4S0xRMzNkNDMyRDg4M05IWDExUTNIaHJZKzhtKzY5djdX''@;'; put 'put ''dHEzeXpjTVdUS3BpYXBFVTNXaUJoL0dkZkZvS2w0MWRLSjJSMlBiaE4yNnZiTjFkd1BuZzFKNDJRbDRONEcycTVhakZ2QTM4SUNvaHpsZ0JIN25IS0NPbWRoODNaRFpiTTR6NTRGTU9XeDByQ0YvQkNmdDFQTU1GR0lCbjFZZXQrQ3Q1MlptVHYzazNDeCtRUmsvZEE1SUdGRit6T2tUQXh3MXdI''@;'; put 'put ''T0tLWTRjb0F2ekxFU0F6ckVlQVk1MEFLRUR1eTRJWkpvYjlkVTRBZyt0d3U0TUJoaU93UFZSTVZRaFJhZ3dTWTFaYnJ6L3dNRFUzbzdCb2ZhUmpoMG0vTHp5VlJIZUxiUjMzVEppdVhacWNrdERTcTRONHVzV240b21yK25lZW0wTHgwRXRqRzBBNk9kREVkUW5iN0VCRHV6QVBBVllKNFN3WHFj''@;'; put 'put ''YkVFR3g2UFNDYmg1bGphc0VZOU4wUkhFeGpEQlNIQTc0b1l1aVlDaHNBRDhOcVNPaWVvT3BiSWxMaVFRZkhGbTI4eVR4SXdjN3VtN3N2L2ZlNFh0Mkh0L1ZIdWlPMVE0bGRPVlhOeGc3L0tNdGRZUDVCVGZpTHpYczYrbysxUGFWVHg1OGRHWjRwcXlzZWFFN1ZLVThXdEZjbnU1TXhqOU04WnVF''@;'; put 'put ''aVFTWS9KVEp4V0JvTUpNZXFuY3c4NzNCMXdWdmh6cVEySi95dTBFaFBLQThqUCtnL085N1NmdmkxVXNYcUg4UkJUeDBxbmhJb1I2NTB5VVMwSzREVXM3MFZTMWhnT2xqSUJEVEVwV1ZGQU9WcWNxR21tcUtoNHB5aW9lNGthcXRqVHdNRlRNNTNwV1h2Z2ZiWkNYVXgvalhrMXVITTgyZFd4YTd1''@;'; put 'put ''by8zZERYSlE3MG5CK3RHK2hzYiswWnEyOGRqWFJDd3hNYmJMVFZUclcxVDNvTFJwdWJ0OGVydFRjMmozZ0s0c3JNR1A5UVlyVXczVnNVYUJPVlNVN3kwcG9pUW9wcFM2a1FSVkE5ekhGcWhkU25RRitpdE40TEFHZ0JyT3Bpc0hzUlZUK2FCNlFXWW9TQjRCblBzZ1VacmZ4bWRZeWdZWXJUMmNG''@;'; put 'put ''Sno0UVVyVEQrb2MzYUE1ZWJhRVdqOTkrdW9MRFBxTjFNeVYxS0NreGRYVTVsVFhua0V5TXpJVGVmQTdBV3hnRzN3VXQxTmRUVWJYaUVQc3ZROHlMSllFTEo0TFI2SGpSa1JVWFV0TkNOQ05qQW9GZXBmZkVTekxNcGQyanVJdlppZEpCYUl2ZklSc2t2SURvaTZGUm1md3ZoNWZPdVR5Umpsd3pU''@;'; put 'put ''YVRrU3lHL2hRZkVZazREczVVeUYzSG5hbjhTWGxiL0JCSEpuOTBkeUREODR6dWV0QWo1RkMvQ2ZnUEFsMURENVpCbUdCQTFFdlZwalY0a1k3QnMrL2dISXlqZVFRaEJCa2g2cklpVEE4OVJ5MThGU1RVelZBLzNmZ255b2g5dnVuaFpNTE1KNCtHSTlYRzQ4QTQwbFg0NVRlcmUvREIyRThsNVM2''@;'; put 'put ''Rng5OGNPNUhzeitpNDNFdXY0bGZBZDV3SXo5cWwxczBubkFDK3d0VW1nUWRFZzdBeUxqelJyVmlWa2Q1UEI2L3B6emtEUWFaYm5TcUFpNUZWcmpldlNyS2ZXSm9iMGY5Y0dkLzlRMjluZnZUOCtQSHZCcnU3OVkxVjRZYit3YVNyZlU3Rzd1dmMrejVQeXNCTUVIeDVmY0xXOGdqU0VZajZKTHM5''@;'; put 'put ''cGVYQ1FhaEd4c05EcXd6dHJjUkVWaVlSMWpWRVBmcXNIRVMxRGhFVFZTN2lpYnFFdTVEcXVZQ3ZXQXdDRE9nZE8wR0dwWlYwVWdPaUdFd0NvYjVkMnlzQjhMVVVUVXRJUDM4NXEwa1NaeEVvaWpOc09hakVKQVZkQUlUZDQ1MER2ZHRoVmxrd3VGWUtCZ09XeVRmT3RlaWdnWWRXUVhxOGRLd2hB''@;'; put 'put ''dFNQY1Z2anRkUnp6eDcwQ2daM0xBaWJaMFg1aGEvZG5UK0MvdWJkOVhWdGx1S1J4S0QwNTBIVzJxNm5aWjVhNTdaV3U0cmJxaVkrc1QwM0JmbTlqdzQwM1lnNVdvKzF1M3ZGM0VpRnBIRERkRWJEbnhoN3NqWGp1MTllSHI4V0ZNc0VvN3RHK3MrM2wzbGJ6UDBkVFNPMm9yTEtyZTM3L2pBOXJr''@;'; put 'put ''bkR1ejV4SjZTOHBLZ0gzc25NclpZZmF5M3FycVIyeFludkx3S2Vsa0NDeHVUSzQxWXg0SjdIWEMwRHF3cnRYVVFHVkFQeDhDY1hlNnlGb0IxbFZnSUdqRmpVcXA4c2VFZVhBWS9kOCtlT0hIcUZMbXdOUDVyN0ZmK0JkQU9VUWQ1SC9TZkQ1NFA0MXJRWC9BRUVlUkZyeU42Nm5hb0NSZ0pjOCtZ''@;'; put 'put ''UHF1bzBHNHJMeTMwRi9tOWJsdUJ2U0JXYm1DT0tjTzhwcC85bUZuWkdIWTd0VGRqZUx4MVQ4TnNXMWZUL296eUdaeE10TFltdm5ReDJkbVp2RWd1eEVmcjlqZVU3RzVxM0ZHTFAxSVhDdGM5cnZ4VE9oWkwvd1BWQzlXZ2R6OEdzbFdDR3VRNkNPTlJvUmxzYVJHWVdSQXRWWDk1VmlXSjRFSUpL''@;'; put 'put ''ZzZId2pSSmxHVU5qMlpIYyttT0c4L3YyM2QrNzhDN2sxUGxVM1VkaDJYNWNFZmRsSDluL1hzR0xMT2ZuWmw1WkxhMVlWc28xblZFN2p6U0ZRMVBwRm9aYlNqdXZzVjhIemVMSkxLb1lrRzBpaXFMMmVVd3V5M3VjTG1lb2toanpoZ09xVXdZdy9heE40NCt1Vy9mazBmZlFNdDlSek9abzMxM2tn''@;'; put 'put ''czdQN2x2MzRNN2o3VWU3TzVlYUZXU0ZBY1FtWUx0dVFEcXVFYU9henFOS2hEZE5PZ1NhNjZIeWp4L00wOURVWDNpVnZXYjNlLytCN3hQZVJDL2Qra3RvaWZ0NXhlZldTUVhGcm1QcGZWdlJGVnlXT3NmZUUzSGV0WGNBTGhoUkViYU0rVXoxck05b1BWN21uYjZ4S0x5T3UrVTArMXZnVzUrMUNv''@;'; put 'put ''MzJZQmNkdkROeTdBT21BdzZwbHBScjBPTXpWYTBJbk9Sd0M5d0F2RUNQQUR6MjNOTTRub2lwZ0w0WFRoVWQyNXc5dEY5K3g2ZEhmcHczVlQ1Z1dUbU9sbStMaE1aSzM4TW4xVCtOZG5PU2RtV3pKS3l5SHRhbS9kSEdWNGpjbEQxSlErQUQwdm5UUE5KK1dndFBqR2RNZndtNFpWODlMVHl0NmRQ''@;'; put 'put ''NDBrcVZqaWsvSlJjVUg2TkM2Q1hmbWoxTFpiTHBIbUluRmlFaDNFUWlQUnpZUVJZTzlpT2Z3SllHK1VrNXZyakFlNTd3ZUJtQkdBb0wwTzlEZVU3UXpwb3Z1THF3eWlvdUQxNXVtSzdveStTN0R6VnV0QmxrZXNuZ2pYOUxmZ2xwYTduY0J1bjd5aDBkWjdOczF3dU1ScjBCQngwUElCWnhremcr''@;'; put 'put ''VXludzhIdFlkS09rMFljZ05BeE1Ib2FWMzlNK1IyT2ZQejE2ZE13dVNmeG1QSkQ1WFpjdWY4ZmVML1VxU2lGZnZYVWQyU0RwcjJocTVHR09qM1MyKzEwMENIZ2xhUWRGRkxnMUNMdzNkSTNXWHVRSThHNk1pNXBnM0c1N05xNGZCQTBCT3htb01EWTZkZGVQM1hxOWRmb21LYnhJNEQ4NzlHL1Nr''@;'; put 'put ''cnRrM3lSOFhLcDdKTUlXZGVqSTlzamhpRUZXSC80MEtsVHlqbmFYd2wrSGZwN1hTbWhjazU1V1BudmlIVzUydGw3L3Bwcnp1L3RPSlRKSE9yZ3VrZFZPck9Qek14OGRuYXg2MGluZktTTGN5elRPNVJmajdQOGxwdEdxekFLRUZVQjA5VEZTckljcG1qTmN6bnkzRmEzUFZ3dTBrUzVQNnQ3M0lH''@;'; put 'put ''c2J1N0ZzZjRidTd0djdIL2lOQzdwSEIzdC9EUzUwTExRMWJYUThpdThxNzJob2YwMWxJc0RGL1h0NVhxYTdDWjZnZWgxb1BRRUNKT3pnWTB1SjJ2b2Ryc2o3bkIxT0VKVk1OaHlyeFRKRldNWWpTNGRTWHNiVjJHRktNR0tMVjBETlVmYjltcm9VWDdXTXRXMUo1REZEeTY3TnQ0MkxBY3JzM2g2''@;'; put 'put ''bzJwa2VLeTFlejJlVGdDZXJEQ1dwRnliUitXYXhvclVkQjRBUjBTTkZVV0JNTEdFSWJ2dFFEcGs5Vk1wOThiOEVZaE43WDdWLy9LcWNYVU00OTk4NXE3VERHMjdocjZnREg2YVllMVh2Mko0RzE0c2VKUGpqY3RHMmZLZlNDLzVDcXBFZFhMQ0M1RmhBVmdzUkhJeFJqM0RIS05WaVNLaDZpREZH''@;'; put 'put ''QlZ4SHFwQ2FKTWdxM1FmaTNwVXR2cjl1WmErK1Z2YmUveWQ3V056clpsanZTTzNOL1pVSDBnbU8vdDIzbnhMKzQxajV1YkdxZW1HU0hHZzBPcXNIdTVvbldtc3E5a1RpYVpDbFZVdTM5Umt4MHlLalRXb3h2S1Nta1BKaG44ODZhRzZ5amdBOFY4QUpBYTlTaHBlUFFYaDM2SXF4LzNBSTQ5Q2Uv''@;'; put 'put ''Qi81VkkxRVk5eDd0emN5T1VLdWpTRFRCVVhEM2cwSFliOWQ0K2NUb3duRzhZVHA0YnYzbWtadVdjbnZsczUyYlNydm41WEUzNjNjdFBPZTBZNFhsMHcxbjltOFNvOFM4L2lWZENhcXNMa1dnZGNkcTUxakRRYjc4UGtuNVZmM0tQODR1NmYvSVRxWFBqOU16R3l2Z29SMHBVeWVZSytURlR2ZzdL''@;'; put 'put ''Z2F6L01sTFBKZzdadzJQVFVrbElGQkQ5Q3dJd0RoZS83MENQdi9jeUgzdmZqMDE5NEhCUzU0c0svcGIrZ09SU0Y4SEZDN0VFK3ozUWI2RWFqQ0YwVG1zdWxmSWU1YVhFNEhIYUtWeGhsQkh3MkllbE5KL0ZqYVBuRHp6NzNJYlM4Zk83WjV4N0FPNVhQdmZrbW5zUTczM3dUK2pTb2V0eUFTdVFp''@;'; put 'put ''a2NwZlZybXBrYnFETGZVWTJVaEJzK0VDNVE4Zit1clg3bFArN3huZ3dNZVZpeml0YkZNVUxlNmYxbXcreGVOSzJpc2IrMmZUWGc0N0cybWFwd0RBOENmeHJjcjdRWjIvRzU5WitxY1ovTFBGR2FXQzIvMkI1VnZ4Q1BrK2o4dzhHMFJtdGl1UHpNRE91djBEV1Bmd3c4cmI1UHZibG5ac1k3aGQv''@;'; put 'put ''dmZsNS9DUE5zbFpDdUQ3bXM3aVhUeGxTZjJRVzNIZDZ2SFFsQVViRDlNRDZuaTBiQnQxNW1qbWxZNEg1WTdIQzhZaUJYNVU5Y01QWTUzeWRqMTViTnZiRnppdGEvQ0QrTXVjSjU4UzkvZklIckFNTEFzSkk2TVoyUnZVRE1wVEl1cHhKcDJVM0JjblA3NzcwS0Zkd0R1Ly8rWTM2WnlVNVVOa1l2''@;'; put 'put ''bEZlR2c1NjJPVEhERHRRZ0lDRUxKOTZRdGJ4dmp6TXlTRHcrUVZhT3RsYlMyWXhxOEkzZURBWUl6WVU5UGVRR2J4eGgzazY1NlA4dmdpQWpKTGlKM2xNMjZYdllWWTBCV0FNWEZBRkZCV1NrUTlzSVNvaDRqUUJTZ3JCM2k5U0dpNEp1aG1hRHhRT0dqQW9vaG1WRmIyZ2Z1MEhvUUtKSVBUL0xv''@;'; put 'put ''cDJhMmxRWGlxSnhnT09JMkFXK1J4QTNKelRZUlhEWU1iYVI0a3BhMlg0YnR2dWJsNEtwSGVXZCs4dDZXdnY3MnJZeVI2L1Y3cnFLbGxTMEp1amhQN3pmdVVpeDJCU05WZ1hmMUl2TmhhM3hQWjBhaTBKU0l0cnBwZ01LNnVNNU5ac0djT1ZJcCt4S2RueXNjNndZU1JuZ3o0dEErQWhvRXBmcnVF''@;'; put 'put ''TXNsZ05xdFRxS2J3Nk5UQjFQazRWL25YQWxHUGIxV3lUdzJVL2RyYTQrYUFBSk56VzRzb1ZzRk1RVHpzY2tLTTZDeDFsaFI2WVRaMnUzTk4rakJDNWNmT01ra3JLNDc0K2NQdDdZZDdtdmVVblR4WnRxZTVmUHYyVG5saVFpYjJMYmVPakp6YVVsYzlRVjVVL3FPNlRobTh1cjkvZXJxLy8ycmdy''@;'; put 'put ''MHJBbVI1NDVYSXhXT0htTVpqbnNqSFlIODhNRGQwKzBId2dQT0h1S0kvMlJlSEhuL0ZNUk9iYUxBT24rL3BPRFZSSCtncUtxNGZqMWNQVkpZVzlWUW5PdjNFWTAxYVZqbCtUVFhhSWp3VkdRcFZvRkh1TUlDeTh5Q1ZhL2dyUjFnSXhqcFZZaXBKenJFWTBDbWk5TENBam1ucVhRak5kdHhwbVBk''@;'; put 'put ''RWM0WUNkRWcydjRYNlAxMDV5aUVhMkFxMmFlaGpsbXZhVVRRREJPb0Z3NU1XbExXUHgyaTJuUmtadTNWSWJ4K0xTdzFtaVpXVThCblR6QURGa3VaMVFnbUhtdGVsQTcrcklnZXpvMURHcjNPWDF3cDhTYjNGUklUUjFRelJHeHhqazVNcDE0dnpVYXhNbFB4QVY3eHp5RFB0dmFSNjR0WC9yTGYy''@;'; put 'put ''amkyM0tTZk53dW1FNEQ5dk0zYW05cFo2eFFQWFdVeU5EdDI0ZHVuZW1zUnR2YVVzbTI2anVBa2NiTDVEL0FZODlJNXRzV05SRG5DaFNLbElDRlNOUjFNK0F4MWJBa2gxb1dnZjBzNnZHenNkckNMSXdubzFnNUNJSVFrUlFUZlByYndJNVRLRUFXK3lUSkI5WWVPcmQyT2x5SDh1MmFmN1d2OXg0''@;'; put 'put ''NDgyRGd4TnlTYXNuWVBUbGUwcUkvb0N5RjMvNlFHUG5kbzl6eEdpcUtBSmNSNWUza3c3QWRSbUtvWTl3SG5TVVlyMWd3MFJjU1JMNzJFWGQ2b3VxbmlrSFZRa21TQ1R6TUJsaFJnS0c1dXFCa2NYSnRHd1doR3BZbUFjRlJHdkFRTXVXbHlOVUhpdVBob013bnJKd0tCU2tXaGJiVmNYQTQ4ZDJ2''@;'; put 'put ''SnJsVXF0WXJnTVVRdWVObGRXK3F4SkR1OHAycDdzT3RiVWQ2a3BmWFR3Mk50YlJQamJhUWZSS2ZkZDhTN2hzcXJDa3A3VTdtc2djN2UwOTJsRmJOYXk4YjZ5alkzUzBvMk1NNkFzZU9TbGg4Y1BSWisxMEtWc2xyUmN4MFlNck0zcG1MVWhXTkt2VTI5YU5ic09kbFlzczg2TGVBV3JtQVFKY3lH''@;'; put 'put ''bDNCbHcwUlVGVklSQ1V6NGtHN1c2WUtENDNXWGRUZTIzRHdNbVRCVmNsaVQyNXUwWDVFcTVMZFhjbGxKZEFvc0xWWEhab3B1ZmI1R2ZnditXanJYeklubXpDdklCeWtGMzFqMzB5K0tSd0N6eUkrWnpMVTlRMXliZm1XVmdXWGI4bWl5NkJON0cvcXFxa3VLcXF1T1BrU2JJdFdremZGa2RIbHQ2''@;'; put 'put ''aXoxLyt6dktJK253ZjJrK3RFaEdzb09PeWtxSFBHWXNnTUpiVzdSVUJLejRkNDNvRUFBSmlTMk9yYjRJT1lobCtuNlhJNjNIYTJlaWtkVG4rM0J5RG1CM3BZcU05MytTM2VrcE9idXRhR2ZMYmI1a04wenF4b29pNGwxN3IyYkdTRzRnQjNjMW81a3RHRml4cWxMZHpVMG5IaFZmUjNNNU5ZKzRO''@;'; put 'put ''b0RZRTNkUHM0Nm83VTFQUE9leE81cFZpNmxBeFd3Zis4MVV2My9kQS84bVRQNzhmbHlxdnZUeDhCMWl6SFgraTQ2RVZHbDhsMUw5cTQ4TXdVMTlVVGN5b0F6RG41R3A4N0pPV3pKdWErdUpLOHFZYjZBV3FsODhUK0Z2WUFYSWZRRmM5VjE1RXNCNnJGc2hERlk1K3hpQ0pnbDV2SDlUUmxXVTJK''@;'; put 'put ''ZEJJOEpuZUZlRXVFY1hDN00wcGxpNEtvSW9BOERCd3NSSFUwbG91WHMzTzliVFNKa2wrTUZsM2MxTzhQbk56VTNXZGZQS2thNmkyY2JMQXVhdEY0KzlVc3JPOVJ2bW05cGZvdDRiakRZbnFGSjlETjVOUk84ak9PTFdrV0xDQVh0SXNxWk9GY25xcWpleTVVc2o0YXAxOFhsWUlwVFZDV05zclVp''@;'; put 'put ''bXN6NUhDcHFqeUF0RnZDVEZmamZvZEV6Q3VOZm1Yd25mTXYzZ3VuMytoTHNlWmdRSDJHdTJMeGNEcDZJL0YrcU9xd3pGd3FxL3Y5TUFDK0J2eDRXcnVlSENkc0JWMC9DeU1oL29jaDVtblNFeTVQZ2Z6QUVTQit0VTUzaHJGa3BON0NFdzdySFVrYzJDdTBLbHovN1ZPblVLZW1samwwMUgvYVR2''@;'; put 'put ''NFQzd3VaMVEvbUR0Um1QdkI4RUVRVnZ2QjJla1Y1dmcxZzVweFlrNlNmWTNMdFFybXl0MmYxSlc0UC9xbDBiZFgzSjh4WlhMRis4Rm9LN3ljSUZTOWRUNXJac1VKZkJaMlppbkJEZUllSy9NUjNCb3pyM2l5MUQxNERoUU0wekNPeHFSYms3a2Z6MmEyelowOGlmOVgyOEt1QWVVdG90L1BaYWg4''@;'; put 'put ''K1UzOEEzaGVKZldSUGZCQUwwVG40Q1d6SlVBMTVWTzRVY29udmlibEU5NGc0MU9LdmFXRUt1WnYzNUpJYjlzVlN0U2xNOFB4dXFubWhybDRNamhjNFkrNW92R21nZVRSM1phcTBJNjJrZ0tmTDk4V2JJN1hEbFQ1UzZhOEJZVnVtOXVXbDErUnFSK1lvajRYakhXQmZBaDhyaG81N3NVaVRUbURh''@;'; put 'put ''M2lXMmhReVRSY3hBQnNRM3UzbDdpQnprWndWMUVjSzhYVTF1MW9UQmN4SUY5VWEwM2pCMDFvaVR3d08zbnpqalNXZWZKK3h4T25aM29tOUIrNjc3NER5SDBVVkppT3pDU0RQUHFMbmVzYVo5VVpWUFFNcVJyV2VPWEdsVjd1cUdvQ1ZVSkxyR1ZmQUZXRHJFVGs4UkcwV0c1V2QrS2g2YWRLVURY''@;'; put 'put ''RE1XNkJhUU5uZ2Z1VVNWVGE0VjYwaEF0OU5yOVVRYVZrVnpVKzBPMWowN3VUcEg4Y2RIL25RblQ4OUR1N1BlL0V0MUZpelhJOVFDKzNYNTVIc2w4OGpGWnc4Zkh6dWhrTW5uemh5NVBvajBPT244Q3o5WFhvTFg2TTh0Skx2QW8rVDE2eVpKQjNXMFpRWHpTcEEzd0xKV2FSd09CeDZscnlVQXM0''@;'; put 'put ''SVRTWkpUdnlSMjg3YzlZMFgzbjNUVFhlOThJM0hIOGVHcFljZmZsdjVNK3QzZVlnMFFiODJXcjFqTnRBaFUyWWxhdGVVVWZmU3Nmc0VkZlhCNGN4bDFBd1cyQ3hFNlFQdDNxSkFXY0xsK2VrZGYzUGZiVDl0dnVXTDFyeWR6b29FTVNxMzRUdVhYcm1QOFBwR2VIa2RucmRKdnNtK2FiNUpvdm1t''@;'; put 'put ''QkhZb2IrTEhzZkk3N0ZFR3AzRG5vU25sN3creDNPWHlMbnlZdklEOHFGSU9GYkI4SUZocTNPY3ZwM2xnbXN1Y1ZBVWJvMUc3aDlwd21vSk1nM1pKZ2JoRlFOSWdyaUZ1TDF1K2xLaW9TVGgvTm9xckcxSnhITnU3emRUYzVNYkRrVEIyTnpXYlBoWHRhenBURXgyTzF0N1czRmRwR0RaNEkrRzdK''@;'; put 'put ''b3VzNmVwM2hhczhobUZPczdubDU5RGZzZnpVNXJWODRFZk03ZHlwMWRWaGlOVjI0ZXZaUEFBL0JwWS9zdVVUMU9mSGpFY3htbFFyMGhBZXBTWG5SSExGdkdEWElnMk42VEJNSjRIQlpTTXdBUS9UVlY0d0YxS0VEajBVR2FKRE4yNmJqZUY0UXdQTWFYYmJsTUZURlg1WGRkcGFOSGxYT09LRmVW''@;'; put 'put ''VDJOZDlXQy9PcU9kUFVGNVdXbDFFS1IvQjkrR203aFBNUVVYNkRqRThoL0x6eUcxYXRRVzFoei9KVjZCZE12K2F6MVRNNk9HcVFtVlBPRW10T3VtNjEyZ0ZtemlVdmlBVC9Kdm1NV3JyUWUxL0pkbUxYcWhXV3R1Q1grVE1xbDU4amVqS01DbEU1eFVwSmNXR0J4KzEwNUZ0MDJNTFh5ZUNwTzlU''@;'; put 'put ''RUlrYkRSYXptTWtqcjNMa09wU1h1bEtEaGlCMmkxeUNFMWVBQjRLL3YyOVYrb0tWbGY4ZXUydTNsRXhXMTlZRUo1WlBwZUR4TkxISlAzdkRSVE9iSWNGNVhoeGl0NkF1YmxCZk5rZDUzYlhmaWxITjdrdFZwMHJ6cGk2Z1lkY3N5MEpJV09pR0oxazlMdUY4UGNSM0dFbUZMTWl3eW94VlBrc1NU''@;'; put 'put ''QVloWHBCWGJuYUVnbUJicTNJWGMvbFNhVlppdTB2Z2xtSmJIa2VtbGZ4enQ3bTVkNk41eVc4bU92UDVZZmRlVFQ4N05wZW8rTVhpMjUzQ2J1dEozNitBblVFNXUySU9hNVVZWFJrWThBTkdseE1LU09SRVRjSm5BdUI4d3NUME52QzZQNGxMYnMyQXowMTBMYkR1SVd5dDZoVjhtNVBqckgzamho''@;'; put 'put ''UmZPUFAvODgvZjlrbWFUY2MvZ2xzR0RCK0VGSDZJcFpVYXJEQm5DN3lNWFdXMVJQY3RDUm1oaExmQXRXMUNZMFFzVVVYaDBnK29pbXFETWpUN3FjOTd2Q3dhTENrUEJvbWVDSWZhWERORy80WUtpa1BZWGVEV0M2b2tSZjl0V2dXTTZaQk53REwybTVrVUg4TDNrM0pYa1ZHa2RVQWFQS0UrVGM0''@;'; put 'put ''TlhtbFAxU29FdkxqNndnN3ppdVpQTHNILzVaZEpPbmdCS0IyU0l3Tm1DejIzVW5ONUpMUmRMcTdQbGxEQ3pCRmp6ZCtpQ01sMVhzZlllYW0yZTY4UnRlMjdlZzh2cWQ3VzA3cWxmS2lkM0w5MEVmVGVqNzZIdjROMkF0RkxabDZNUUNGVVZvemtGdjQyNTJJdEdTMHVpMFpMdlJVdExvL1JYelJj''@;'; put 'put ''dnQ0TVpNWVBkdXBITkxkK0ZpYzVwSkR3aElZQkJ0dEo4QkRqMkFzRzZvNGl1WFFoa2ZrV2I3bVVycmVEeU1SQmdyTnMyZytGMnVnQjVuY0Zna05wcGlqbGVSMTRSWGxXUVNmZkcvTFNxTlZGVWJ5c284VHNMN1haSG5xdTh1MEFmRDVlRUU3YThCcThqUDg5bWNnMmwyWDZlT05EY3ltZ2UxMU9h''@;'; put 'put ''eDlIcmZEL1A4Z0QrSmROTGZ0UXBkNVFCNTd0Z1lHN3F6UTRnUFNJQ0xkR2ptQk0xYmNYS2F5RXlSc2hmWHVoMTJsV05SWU5pbEt1eDFCS2lsVFFZM1VLREcxUWwxcnkyTUd0Rm95blhyaTNOUW13T3JNWkh1TU5XUVZmZzdCTEVZYmVqenlQRFV3US8rWG1tYURlQU9RajZlR09ZRXhvTWx0QkRt''@;'; put 'put ''OEFjeThMa29ZOXVBbk04KzZ3NTlHRU9ROWJDdkp6dHh3eDh1UW9HYUFBK2kvQkhWbHZrUUZ2bGJqdFZqUlRsQm9SQkFSbVFqaGgwQjR5Z0Y4VnBjRFBWcFNZOWQ1UllOT2V3T2FCeHZxcWJ6S0Fvc1ZiSWtxTDFUWDQzdGd2a2tGYlFzb3dHUDREZlQ3WXR2ZlV0WHRseTU1M2t3cUx5R042aFBN''@;'; put 'put ''WnJVZHBaRFZFS0cyVi9GUmIxVVVJZ0xBZjFXSUoxdU5nQkhHekhSQkFIU3VubUtjNzkxYlFhUk1CSDRRWHBybC9KTVRKMXJzWnNZT2oyd3RoOUxCZnBnRVlKMmdoaDNXMVgzS3FVYm1sYTFVbzQ5WTdONVBqYUZpQjlBdG0vVVVPK1ZrRFRDaW5VRUlxQ0ZQcmQxUEx3ZEc0K1ZqWEZXbUZjRTRO''@;'; put 'put ''b2hRc3ZUZmwzSms3MldQVmxheVhWTy9uQWpyV2xWSFBSOEVSZGk4Ni9Xb0NiVEFjK3ZuTjFhUlh3RmF0QllueGVxY3JDQ2NaWE9JYy8xOEljUkk5dEFuTkNnd0ZaT0xvSnpQRnNQM1B3bjhHczhQbnk5MmdORDN0V25JOW4rZjNyK2dHbXhsMDVNQWZCdXErQldmNHR3QVRaZU9KOFBNdVByNE1C''@;'; put 'put ''YTRYamJEeThuN25sUjFhUEIyU3FDbDUreVdvYVNsQ2IzTHphMDVnMnNQVUpZNDZya1o4UGYwcnlpOW4rUkRjMHl3TzdZMXJKSmJDQUtXbm5KZVcwR00yZGxNRDQ0eC94Z3JTK3ZqZDI4SXEwTCtESHNsVnBPTENJaTVhK3dXdlQvbmJ4YWNBQnE3ZGhlcVZPMVN1ZldZY25Wa1BDOEZTdjB2YVQ2''@;'; put 'put ''M1RQV3BpRHVHb1RtQk1hRE5EMks1dkFITXZDNUtIbk5vRTVubjNXSEhwNmpRNmp0V0czUTd4U0FwWkFmRVpFdURZV2lvQllSTkxldEZmeTRvL2NlZWZBbldlSHo5NHhjTWVkdDUvTnZqK0wyT0t5VmpQakJSc1VSWGVwOGEwTDYwaGx4RmZrTll0NkhSaGF2VERnWTFlRm5Lc1lycXI1bGdLV1Nh''@;'; put 'put ''RWxBNTVCY2RXU0l6Z1h1Y3RSSHI2R0tPYXVEOHJXaW9xS2FFVlYyQkZ4c0IwaTJWSnpLWkN0cXFjeEl2SjRNYTk4MVZGT2lHQlBrbnd2ZWMzNXZkZnVyankrTTVFRW1UNUkzeW41UlFXNHBpa0RrbzByRDJYcWxCODJaNGozMXA2Wno4NjIxc3pYbmVxaEVsMHpyL3g2dUF4ZkV3Q3hmcVByU09k''@;'; put 'put ''RXAvSlFnTnM2VmlQQzZOdWs4c0NqNitWcERjeEI5T05OWUU1b01GbGJ0eDdtZUxZZnpZN2x5RGYzbDltejJ0Um52YkM2bjV4NksxcEhsSkJqd0JWNkhkWWZFTEc2ZkpiZFBBcG1LOS9qeXZmYXZQYXczeWF4NmpKM01xZnFLcFN0dWpwMVlhWHFTaDVqVlZmSFdoYzZ1eFphYnZwMVIwTkQrK3Rx''@;'; put 'put ''WFdLU2ZCZGtmdXBaTS9qdE5IZmxCNDRvQmFVdlFNQXhyeFZUZS9qeXNJalZsSFd4V2xZNW53WE11VDBsbTV4QmY5QWZEN0RWcm5YN0ttSTRwUlU2cFRSTFFKTmV2YTNYZG5jZmJFMG1XUFh1Y0txK3M3TStWVkhkMWxKVDAzcUtHSnQyMXRYdGJHb1lMK1FWdklkcDVlNWNZN2lxb1RHdU9EbnRl''@;'; put 'put ''YTNCSzREckhqRHVCSFZQYlhSZEFCcmNrM1A5a2dhUHBiRmMrSmV5MS9NR2NxOWZ6UFkvdHpYbnVoRE13cHRQYy9tRTY4Sjk0Q05Xb3dZa2swT0RUNXJvaWtwRk1SRFZCMzZBRzV0SUV4Wk44R0RSS0JBa2lRTmdxYzBBVTdZeEREWkw0RXlZSlFwbXVZS3ViRmZXVmVsYU1NTUdZQ3NReG8waHB1''@;'; put 'put ''Zy9Qc1VZTW9uRU5HbUFtRkNVaUhnZ3owaW85OHNUK0ZhelJhQk93MHBkQTUxeDZuSk5MRGpiWU5DS3plYmN4cGEvL25tMi81L25VV1ExZ3N6UzV2TWczYUprdU9MV3NyeTJJVnBwUnZlRnYyTVhETWx5ZVNxVlNJQ2pKYWN5cmMySmhrU3lyaFo0TEU1RG4xQXdsSi8xdXRac1VQRG1iUGxneXps''@;'; put 'put ''cjF0WlJZenZPNXNKZjVPdnNIWWZENVllNzloNWZxWU5wdXJxMmZYZFJhSC9MMnNWMzVmT0R0RHltcFk2dnd0ZFh4NU5UUTlueW1PS2llRlZsZGM2aXZQSTVPZUYzMVFSRDNBNVdndTlNYXo4YTBHTnlTUkRyZGNrUUVmVU5oVUNmQWd6QmNSNUlHTVRHUkZTalJvZ0tSR0QwbzBnRURTUXlWY1hp''@;'; put 'put ''SzE3SnNoY3NsUTlyOUFwUldJQzc3ZkxBY3NVNk9IYSt3ZjRzdUo2dDVZZVplOHZ5MUxxLzByR2x0U2o0S3dmeTEvdTFCWjNYWlRhcVQ4R210VzZ0Y2ZpR3JuWGxLbGs5RkdONnJvL3J2Mm0wd1hXcS96NlFjLzJTQm8rbDdibndGN1A5ekhIOXQvd3R0clpKKzNtWjkvOXVEdDhOQkd6THVYN1F3''@;'; put 'put ''K0YvQ2RkTFdmOHY4LzRmNWRkZmhldGgxaitIbjN1UTUrSHFXYTNOLzJTMVlydGtwNDB0cDJRUHZuQ1ljQjh2eGZCb0N4MzJWZFhBZElFY2c4WEVaRDczOHBTY1Yxek1hOEhDSWJwSFFuTlJzdTVKZU1YbHlsMFB3bTlzNzdsbGVQaGtUOHRDMTU3TzhPU1JzdDZCWTUzVDVhMGw0K09kOHZoRUo3''@;'; put 'put ''RS9kUFgyc3dQZE53MzFIc3NNRGZiWDlaY25heHFpL2I2bHYrem9rcS9hMXRsOWxZWWZVc0xzeVRpM0p5cGQrTG9qeGRzRXgrZmhqYTVUZWoyVWMvMlNCbytsZmJud0wyV3ZyKzcvWXJiL3VTbHVsenJRTmxKSStsbE8xVWYzVFFEZmEzVUZpS1h2a0E1WWZwSnRJSk5BRnZXakxGejIyWXJBKzlB''@;'; put 'put ''eXJRYWF0OGd0TllDb09YY0hHYzZQeGtxTG8xVWxmNkQ3M1g2b2ZzQmZwbitqeGFXeHBvV1h0TGN3Sm0wTjFrdHpzRmxmMXVzaU9oSUpGeFhxOURxemdhaStMTDBxckZ6ZDBKY3QzTWlYelYwMTNNaVg5ZnY5VmY3SzBEdjVzanF2dW1YU3cxeFpDZFJsUER4MFptQjRTOUcrN29vSXZCdlpXclN2''@;'; put 'put ''UnpsWC9IS3dNdG9mKzA1ZnpQY0RmeFIvY0U5OTMrbUJhT2xJYURvSkVod3JHLzFsL044OElNT1BnaERYeFg3dnB1ZkhzTFVyU3Z1ZHEyUjQ5ZlVWR2ViWEwybndXUm5tMXk5bSsxRmxXRjJQb2Yzc1VmdTVOMmZObWRlNWZUeTNWSEdUdXNQMTY4NmIxQjF1dUVDOThXMjFCSkV1VVA5M2xSMHF3''@;'; put 'put ''dnlhc3NNc1RpNnFPQUZjOWVYbXpUTFpQTlVDZW1CZGpNZDl3bk5abjNDaEo3ZnQ0V3oreW9nZTNLVHRON0orbzNGVTNaTzN2RTJvZ0hpZ0FLU3pYVzRwd3BLdUFJdVlEQmdnREFFU2t6bTJIVXZQOWhXd0ZWUzFKS3V3c05CWDZBdjY3WGE3eTArekwzcWVWRXdISW55N1hwS2pxVDZOd2QrdkNO''@;'; put 'put ''Zlh0YnZMR3JLNzk3Q24yRmRRWUZOK2MrTEVmV1Z0OVVFZjN6M2s4M2dLYkRqTk52U3A5WDdiU0MvSWFneWwwUXRjOEh3bFdLY3ZoaGpDZ3cxQ1RZSVlEVWFNalRFc1lmQkVONzhMNWx5VjNLaTJSWk1wSGJDNGhZTjBEUUhQaUlUUFVrMDBzUktBeEhwZ0ZueXdKa3krdmJrTnBtUkhQQjVQeHh2''@;'; put 'put ''RFFXY2dHQTY0L0hRVklvdWJUUXFDUVl2Wk5YU0ZjNHFEU1MvRG0zbDlnZkRjTFJ5QmY5RUtoVGtXMXhZSzArSmhodE5QYWdYRGFxN2dZeXhPREt0eDRpL1d4WnU4UHBiSzdsWlZkdS9PNWhrK3htSlYxaFliMFBsTjJsNVMyeEpzR09WOHl2WVlzcllSdGUzQ09qNk5ReHhqSmk4Q1RDK0R5UmQy''@;'; put 'put ''a0Q4aEk4QThULzVFZ1FCR3pSdUJCSnpKMXMyK0MvUkpFWXpwTmRua0FNTHJnT2JhS255WW1oV01CRDA2QVB4cnkrNzAxYWhPc0ZZd1JiVlBkRk5vdEpycVJGTkRxMXRZTDl0aUZmQUtuQ2lxQmRHNXdOVDlkdmg4dnJBdkZLTFZDdUdBdXFRVldGOWJvaFl2b053U2szZDFyS294ZWVpaGt4M0t2''@;'; put 'put ''MnVGSnAxTGY1OVRaL3YrcnFhbXBSL242aW1lVDh4azg0a0xhUDg2T25QZjdWeldkMXRRZGRtYVhDUTJvUjlzMGxieit3U0FlWXJucUVEZWg5blpHS0NOaXJFQnMxMU9lbEhIOTFXcUoyTFErbnVKU1NFZ1VSTTlwb3U0TmxxUk9McExWUHNmMEVTTURET3hVaDRqZXVVV25uSHY0ZUxFcFloY1dL''@;'; put 'put ''UXBkeVk0VEFjdHNKcmpFSXFqTTdLRFJnd2hUUFFHY0FCQnR5QzZ5YndJK0tBU1hIa2RqUFFBelZScmxGV1BOMkxsUXN5UFpGWXBwSUd5T2VOOUc3VWd0SFF1SEE3SHd6RlBoVE1jRElSWWpsdFM1K0RWVk1yYTZtWHE5eU8xZ3ZtMXJSWTZxMkk2WFoxdGRTRnpFS0l1NVM5cVFGWHN0VHBoc2ht''@;'; put 'put ''WXZzV1JVOVFNNFJXZVpYWE5HK1NoRFJ2a29kZjYrUWJWUjJCN1o1bU5pcW8yNnF2cjJ2SjZZMnFqQnJpTldsVGJLcS9UZmJlOExmQktQdkVqZmtZSHdBczF5SW9TcUFYOW1VdTd0eHBMK2pLc00wQW9wL05pSXVqb0VTNm96OGZ1aUJ2Y1VhMUN6RXlYY1FTRGJ0NklWelpoUzVKK0JzSm9xdmEx''@;'; put 'put ''ZmIxT2tuTncyL29tSml5S2R0NFFyVzBtVnlOa3BPZTg0UGxzMDh2QTAvaTdwb2Ftdld0YWFwcFR5ZnhFZmlKV0ZmQVhGN21kTlAxZFlOSDhZbm9jQUhlRjlYOUZSVFF1RFFXclFpRmpZU0JVaUlWM3JJNGVxZ3VYZGNhTEE1VjAvYnIzQ2txbElmNzZPVEI0Z3VrUnZnNndzUHp3dXJXQ253Qk1K''@;'; put 'put ''ZE1qUEVaYitBUmYwMjFhM29ZVTBBVXV1ak9Vcm5qUzQxY0k3cytlNDhJTHF6VHA5L2pabmlaTkx1aE9XRTNnRlNidnVsT1cxVkt1K2h2VWhpQjQxcmZaV3I4ZkhaTE5idXIyKzBIUXFSRUowSlZqTVljcFZPOCtQeXVzakxhbExMUlpLVkJlQXpCRnQybVZseFpCaEptZnQyR0pzbE5kbGsxN2M4''@;'; put 'put ''YytyNVlMYktGektQSG1uMnpqazFncEcxZ0t3M3hLYXZQMCtOK1czbEpucEs3bG9HK3RyTUdBampXdHlRZHJOY1Q2N0w1dSs3cDkzYlEwV0wvMEZ2UTNDbko0bnAwM21lQnlpSC9QL1grNEhtUHlPYUplZjRKZnAzdXBtWjlSby9vWnpuVXl6K0o1NFY2QUdWVmhQT2c1RHZPY0JzUDNaTCtvOVFQ''@;'; put 'put ''OWY1LzVCRGpISjZEOTNNbGdSamVHNGZzeVNCL3dVeDZ0dkxXWVRVWlJEeEpJdE4zcGF6WjY1NkU4dDdiUk95V2wwclFZMnkyNVNaOFNBUC8rMUtuRnhiY2lSeUo0aS9LZm1hTWQzOUgyZlRTdyt2QkJPYzlza2tScTZRMElhMVhpWm5oclUvZDBac3V6VjdaNSt0Z25iYkZyYXVxTGJsYjdneVV3''@;'; put 'put ''OStyemNjUDR5YUdoaytONGI1Vnk4VC9EUjhKNFF2bHRGY3F1V2QyaHJWa0JIbC9mQ05la2hQbDA0NnRpL1RHZzN4Y1pYZXRVL1dybDhIQzloTmcxZU1EcFJiVHlyQlBaOVRFRCt0d216N3FVelVNWTlxR2NkYXBNZHAxcUFUMjV6Z2ZrOGZtNWJDNWhZUkp0dEo2R3JXdlh1TlMyKzFieUhOaXE3''@;'; put 'put ''aHNDeFN2UVBiWU9vRktMbk02ZU9HRWcyU01uakhScnZWYXZ4eUxDRW1leHg4V0tlcWxyWWFJRkxwb3prUzEwY1dQN3luYnZIZXJ5L1F1emRCLzhMT2xkZXFzcmMwak9ITTd3UmZ5cFQxdzk4K21yRjVVVS9sN21zQ3pQTnpNN0JtTVdmZzcrQloxWE05b3VqM3N4alVUME9wcGUxd3NEd0VNNnZV''@;'; put 'put ''RjN3R0lrb3FpbEhNeVNTY2hKT2lTVGdRQkN5ZVprVTJNcVVCK29pMVZCZDM1bk1Cd001Y0c0VnlkcFY4eEJqdCtnVzNPT2pPcERDSGs4Tzl0NUpCdzVLdk1DODh6UlNQQzZqT1pJS0xmbDFKdmpXMWJ0ajJxc3EwM3pDdlRHbXRvVWN5bDB1VVhvdUo4NkY2cHZjWUxSTnFYeTc5UHIrSUxYUDFQ''@;'; put 'put ''YTd1QzVQelgrN1FVK1BjSDRONlh5NlNzY1hubWQxa3VyOFBSNlI5WS9QY0g0TjZYeTc4MGJQdXQyeHI4N09QOGErYlBZSG5nMnprWjFuQStzNDMxZU4wM0hlUlVmNTI1dC8zdzcyei9mZ2Q2V1MrckFHYWt2S1JiMFVoSGRmWWgxdU1BS0xra2VLOXJnZWVmNDZub05TUkpud1BQMURLS1ZOTWE2''@;'; put 'put ''Y28zcU5lVWE3OWlvZEYyTmgzRHFuVnF4ZGNPTmlqWFd0K08xR3VaUWRZU1dhZGdOVW5Fc0tHNmF5YjZDUXdKSTc2bnJOOGhwZXg4NGVKbHpBNjVmRkN2V3BMWXRzNWM3UmtDdGYyOW45ZTh5WFNlb3c2Syt2cFRveEpJaWduVGdMaUdnRnhIeVZxOFQ2Tmc2Z2JaU3FkYXViTEpPb0tObmFOMTJl''@;'; put 'put ''V0M2VHJBR1RsMG4wTUJGdnVjdlhnbjRaYXVnbDBFdkxhaDlwNHA4L0lPOW94dmhOM2xOK0hKbCt0c21wVFdMQjJreFVuYlp1djBjZVRxaHlSUEk0dVFtOG5SSmt5ZHNLT2Z5RkFSNW9tYzhsS01YNUh3dlVNUmpBWXFZNlhtVEtrVmlHa1VvNnNncG1nQlU2N09NQnNMOHMzV0VpV2NSZmlWdDVL''@;'; put 'put ''bzE0Q3A1MXJYU1VUTFpZZGpscUp3RzgxUWFUQ0FNZm1rVFd0RWdueDRYZ0dlZDY2bmhLNlhuVmF5cEl1ek1IbC9COWtPMHMvMFFDZlJ0dWFBS0c0U29teGdOTGt5TTJhSklmVmJONkhYNnN5WU1BOFhHbzJCc0FNTjBONllnNktaRnZpZVQxejRpWDNaWnNucWxqY0ZJYm51blJuSjBZM2hXV29u''@;'; put 'put ''MjV6UVRLSjdvZVFZSlZNMDJhWGdCVXpUcm9kdUVvOWR2M1BCU0FjQ3BkUnlja2xmMmNnUjhjZHZhS3N5MGFhdzVkM3ZIUklFbHhQaVBuU1hDZURTdDh1ajZYRWdKK0IwRnpQK2M1UDRudVdhZGo4cHJPRExaR282RkRXd0h6NldmeStiU3Rad0tiL3R5dGtaRXExSE1yZjlnYlZsdEFNdmJBOHdk''@;'; put 'put ''RzlXZ2dOOTAzNFp0aDFmV0FyQzFENm5ub0d4ajU2QUU2TnFOQzdRK0xSck9vL3NxQnRSVHBiUXp4MW5PWFF0MjJKYS9RTEFnRUhUeE02Wm9VTG9tYzdIbTFCVHk2UERkazdac3VzSXhmMG85UFlWY1lHZWxXTDFxZ3NKZjVIMzRXTzVSS253ZnpqWXlDM0ZNQ04zR3cza3JtRlFCWW0xZENBTjdE''@;'; put 'put ''ZmhXWFNEWlZad1N2YmJEYStQMHI1L2Y1eWxmYlVWblRjYlhIUFE3QTY2QXkwK3QyN3BVNzhyV25hUTlteE1uc3l3aXpjL2R5bk1TNTBhbmF6ZjFhSkVkMElxZDhjTDRzWVhYQytHdWRYekU5KzlRbmJtTDhZS0V2cHRUSTNSQ3F4R0M2N2V0YTh2WEtDNXBheFJZbWtBNWJZOW42NHZtMEEzcitJ''@;'; put 'put ''aWR3Y0o0clgzVGVrYStiNGJ5MmpUM2o0NmduTGJIdGJZYjVnMTUyNHRxVzVvMy9HQk8yeFBadGh2bHBuamJTOXB6c2FHQm43MUM5eVhUR0RpZjdzaWdGZjEwbnhNWlFPcW1JYktYZXR3K3h0VDV5THJSa1dWaUlEOW5HL0hURyt3ZHByWDNONU5MVjNpZWlwZWVwM0orNGVEWThOQW91WFQvNk9q''@;'; put 'put ''R2ZXVDNkUkYwRnRqeUJuVlhsOXBIT2lrRk1xTkR3Mk1IRjhpbGtaSDcxVDU2b1k5dlFIU3I3bWd3RWJxbllZQ0dHbjBiMWVEbklVdEl5TzVvVUNmTmdva254L3d0cm9haW9nWlhTL2w0alBUNnkxdGNYaTk4OExQbkRLRVhXVDRseko1ejJmcit0YnNsdEIwU0t5a09kVDlHTHdiOXh2WmpOTEZl''@;'; put 'put ''NlNaV3VpTmhIcVFVWTJFeXU0bFd1S0pkR2JuZlczQjdaMmQxUXBZVDN2SnlyOGZ2OTVEZXpnVDluT2hzOG52NFJiN1BZQnZXZzAyem94WTJnaG9yVENhZmNnejltb28rOWVRZXdPa2swNFlDdlVPbmFrZTJvRWVuN3N4UXo5K3ZXRkdJcDlwTHZNTmMvRUg3UGM3U09UNG04Smt5UnJja2FjUHZK''@;'; put 'put ''eStCWEhleDU2YnBma3dqMjkzbXhyalBnSVZlZGlqUkpEV3B3TVB6MnRFbFJCamx1eFdDSWJiWmpUNGYwY1B2MlZIYTNBTlVhU29Hc0NWUTZIQ2JIQjU5eHBDc2NXc2Y1UHpkcE4xdXM1aDlwVWE2UThoaUxpNDEzYTdTSkVQWGlkaTV0VVY4NTRVZXVMS1BocVUzT0IzWnZTaGVLUkJTTjVmZ0hj''@;'; put 'put ''ZjREcE8vOGR6QjVLOVJlWDM1dWVWdkl5c0tzaDRLK2JuenEvZTVCYk45Q2FzUG9QOEt6MStXaElKVnlqTFBUYkk4SmRjcFhGZmVvZWxLMUkwck50R1ZyMmk2RW5VRHhFWnREK0luMzdIdFFkeVMwL1o0dHUwY2JscW5LM25iaTltMmMraHJQRDVkYnFGblYrYXVuN3o5ZSs1THZQMTcxWmVJTERm''@;'; put 'put ''VE5RbWVaMmN3Rjk3K0hWOG5lL3QzS2d6UDF4L0w5cE9IcnQwa1gvOVNObCtmTjRJMnJDWHRSdS9aeEU2OGtsM0w3bGJqM0RyME0yTEJ2ZTk4N2o4OW03ajNvTlpHYUwrQ05vTGw3VGUxTmkzNEEraFY4Z1R3VFRIam1iNjFtd281enppMTFEaFBybjUzNVFzTHlOMnJ2ckdBemltRDcwZS9JQmRn''@;'; put 'put ''eHZrMDY4ajNDSkxTN0I1QmVDYitQbnRtQ2FxUXkwcXN3T3VyTm9VSlRMa0ZDNElPZHVMWDZtZnJOeDBLTHQ5a1dNR2M5M3g4K0lmQUd4RStQamJPUDhBNEhkbHhNcGV6Vk12dmpxSHplQkkvRGxDYjdMR2k1d3V3UFZacnpoZDRxajBZYkE4RTJNLzVZRnVRdjROTEhFL3R3RGRmUmg4RTJrTlFZ''@;'; put 'put ''d3ZBNng4WUQ5dnh6d0ZBb3QrUG83czc1L3R4TW1nUW52eGJYbFJWbDQvMVZ2NzFOUVlzV3JESkxKcHl2L0xHbWVjUXpHWmh4bTYwU2JyY2I4cEp2VU5EOXEwM3ZMVkVXd3ZxOStVMGI5aHVnMi9NV2RjV29wSEdvU0ZaMXI0NVoyaHk2S3FKTVhsUUh0amFVNXVwN1docTNQQmJkRnovaFcvUktW''@;'; put 'put ''L3pPWmdEVzk3NFYzL0REaDVrZitpSDRWcmxjOXIzN1h3SzNnQnM4TXEvZUVkOVAxYVQreVU4SzEvR2c4SFRyOGNSL0cxNkt0RXplb3hyWXhuc0Jkd0ZIcG05Ly83WnBZdWVwNS8xOHYzQUFCZlQ0QVFHRjBsN3BRaEFQZkpJLzdOUGV5NStqOW1EMzZubkk5ZWdIZktFRDZoV2pIVWlvV1VrR0pu''@;'; put 'put ''cHFmUTZNSGNRYlI4d1ltTEMyRXgzakdTM0NWbFlEU3RQUGNGckRVckVZOUVxdXlNRTRhSGRHY3FEVUhMbDJLY0l4STdjV1U5MmtKVmNDQzB2QTFSNy9Td3h5bllJMWI5bllPVGVlZTlZRnhHNmR4VE92M2RJM1JXVXVhNE1pOHJQOVFRSGxEZEtGN3ZuMkpIS25jZjdlajNtUWs5dnorRjJ0aWVv''@;'; put 'put ''dTZtMzBHUDI5SFlNMGU5c3dVV2tFTjhKdWs1OGh0QjlHTTdzYWUxMzBuUGFtVk1EYm8wQW10ZHY5eE5oYVluKzVwd1J4cys0TUR6cmRlYnBTZTEvL2JDSnQ4WTJQR3lDMTJIQWMwQzM0MXAxcmVBSnJUNERybjlEdmI2eVJzdXZYOHBlbDQ3blhyK29YVWR6QjNPdnY1SzkzbjBxOS9xNTdQV0Zl''@;'; put 'put ''ZTFzdEcza0hwWWpUOEM4SXdFbmhubHZYRllEczAvbVZOUGs0T0VlRm5SWmM1RnhranRkZjFKeHdtT3ZYS3lvY2RkamEzRkQ0MnlPRzRpelA1MHo5cGV5T01pN2p0dERXcnIvTlhaT2owYnZwRDJ3VlR0eEI5TjZPTGl2WDM5ZnZ6U0svaC9pRXp6NkFBRUFBQUFCQUFCVkVyVCtYdzg4OVFBZkEr''@;'; put 'put ''Z0FBQUFBMDhHZGhnQUFBQURVdnFiMS96Yis0d1NLQTg0QUFBQUlBQUlBQUFBQUFBQjQybU5nWkdCZ1B2ZnZQQU1EeStiL1p2OXpXTG9ZZ0NMSWdORVFBS2NOQnJnQUFBQjQybldVeldzVFVSVEZ6NzB6RkVFSTJFUlFRb3pHWUV4TXFrbTEwV290YVdwaUJXdnNScXhZRjFJWExsUzZVRVFGa2E1''@;'; put 'put ''RVJWMjRjMVhwMG9WS2QzYWhDQVg5QzBSUXV0Q0NDaFZLb1M2TTV6NHpFcE9hY0RqejhkNjhlMy92ek1nU1RvTS9PVXBGcVJRcU1vK1NUaUdoRTRoN1JhVDFDYlpJQjBweUJUM1VObm1BTGoyQmd4emZMeGVSbC9Yb2s5bjZWMzNKNDl2bzFGUEk4djRtdlVtZHhRNjlqbDA2aW00OWp3eVBDMjQ4''@;'; put 'put ''NStvd2l2WWMrbUZaUWRpN3hIbUxDT3NNYXZvTU9WMmgzMENWZFZUMUM4OC9vaW9oREdrYzYvUXBqdWtCbEx3enFIaytsZUg5ZTZnNmYrem14TGxXa3M4YjBoK0krRVZzMU5mWXdIbHI5QzY2NVJxT3NPWmxlazRXc0ZOcjlWOHl6cHJLU09rZFZEU0I3ZlNzamlBbEU0anBKR3NmdzRBSTlvdlU1''@;'; put 'put ''N1JBSG9LeTl3Z0R2RjdXcTI1OHhlYklmVEpjd21hWjVMd3hzcXloMDZ0eTdUd2k3RGVpSVhUSlF5UWxpWFAwbEx6Q0huSWZkR3ZlUXQ1cWxEbldzcHYzM3BHeDFUWEZQUUQyU2RsZHo1SlhnbjJGblJiL2xaL2tHc2JQMkRWSlF2VzN4by8ralpyM29rZ0g3RnFsbVFaTDQ5Y3M0MGZPZXBJeVZx''@;'; put 'put ''dkllMEczWHNpdVdlVDJ4cGpSUDFNZjlESUtmOW0xeW5KaGJ2eWFaZnlNczduMWEydTJ1dlZ1NndkdU9lSytXTC9NY3RieHNKcWEvWGpUdVdYTjlydmhaUFdKOWI0bnU3MnNINDRoKzNBWlpBNHNoKzQ4OEhIRVpBUXhZMnY5dGJseFpXK0IreUhrL0E3V3lkeGFkdHFjV2JZOHRUbno3VElXdU8y''@;'; put 'put ''UE1mcVAyenZnY21oN2FQd2E3NExsc2RVdDR6TEQ3RFdFbi9SUmFwQ2E1WmhEdklaNlQvRE1WbTlqMmxpVGRjTmIrUE85NFRPQmFVRDdrUGN1OE5zUlJhLzdMcXhGTDlVdjArUzE3TDRWOEo4akxjUFlTbkYvNjk5ZFBqek81YjZ1OHErZzhoc3BZOWZPZU5wRndsMUk0bkFBQVBDMWx0K3VNcHRP''@;'; put 'put ''OTNIK042ZWJPN2U1TlVGNmtpUGlDQi9paUFpSkhvNklPT1E0SXFLSEl5VGlrQjRPa1pDSU9FSWlJdUtJRUxtSGtPZ2hZa1FQSVJFUlIvUWdJdEpEeUNFUjkzSncvSDRRQkdYKzJZYjJ1NkN1TkV6QTMrRWorQXB1ZGYvb1B1OXVJUlpFUUpKSUR0bEg2ajBqUGNzOTV5YkJOR1k2TWI4eHA4MFo4''@;'; put 'put ''NnE1YkRZc2xLVnQ1YXpMMWpQcmkwMjBUZGoyYk5lMmhwMndqOXJuN0hsN3hRRTVFbzZDbytZVW5XUE9ySFBQV1VNaGxFUEgwVlYwRXpYUVZxK2psK3ZkNlJ2dVcrdjM5cy8zWDdxbVhHVlhlMkJpWUh2Z3dpMjZsOXpWUVc1d1kvQVNZN0VaN0FBenNJNkg4MHg3Y3A1clQ4dXJlMGU4Uzk1VEhN''@;'; put 'put ''VlQrRHBleE12NEZmN3FZMzFydnJ5djd1djRIWDdLTC91VC9nLytMU0pEckJCNW9rU1VpWFBpbG1nU3IrUjdNazFteUJVeVQ1YklNbmxOVFZPZnFTeFZvSGFwQ3ZWTXArazVlb0Zlb2RmcElsMEtKQUozZ1hyZ0dVREFBYnlBQlRJWUJudmdHRlNCQVc3QUkzaGlFc3dKYzhIVW1BZW14WFRZSlhh''@;'; put 'put ''VjNXQjMyR08yR3V3TC9nb2F3WnRnSTlqbUxKeVBBNXpCM1hNTjdpVmtDWTJIYXFGNjZEbHNDcnZDVlBpSmgzbVVmOGNmOGxXK3hqL3dMUUVTWEFJcjZNS3NVQkxLd3Fsd0tkd0tUZUZQeEJiQkl1R0lGc21LaUlpSlFJeUtDWEZNbkJUbnhjVzNxU2dVZFVXcDZJRTBMbjJVRnFWdlVrSGFsWTZr''@;'; put 'put ''TStsS1p1Vk4rVUN1eUJkeVRhN0xIY1drZUJWVzBaV2tzcUJzS0JXbEdjTmlrN0ZDN0xjS3E3S2FWRlBxalBwSi9hcm0xQzMxVUsycWhucXZOdjdURUkzU1JyVkpyYWo5MU82MHB0WWNlaGhxNnpaOVdjL3BSZDNRYi9SSC9VbC9pVnZpN3ZoVWZEYitKWjZONS84Q0RCRE15QUFCQUFBQlBBQm9B''@;'; put 'put ''QW9BUVFBRUFBSUFLQUE1QUlzQUFBQ1RBbXNBQXdBQmVOcU5rc3RPd2tBVWh2OFdOS0RHS0RIR3NPcktHQk81cWVCdFlkU3dVZFJJaEswZ0ZSckJZaWxHWGZvMmJsejZERjZld0kyUDREUDRkeml0TjJMSXBKMXY1dnpuUHpPbkJSRERPMExRd2xFQU8zeDZyR0dPcXg3ckdFZFRPSVFOM0FxSHNZ''@;'; put 'put ''Skg0U0hFOFNFOGpGa3RJaHhCUmtzSVJ4SFhUb1JIc2FUNVBtTW9hUS9DRTVqU3c4S1RpT2t6d2srWTF1ZUZuNUhTTjRWZkVOSGJ3cThZMGE5Ny9CWkNYTC9ETm15MGNRTUhGdXBvd0lXQmV6NFpwSkJHbGxSbDFLQ3VvVFFkY3BGemkxa2Q1bDRnZ1FKTTVqbkt5V1lmZkpWSmxVWGFVcnMxSEhH''@;'; put 'put ''bmppNjVRbldhbVNrMTFuR01YWlN4VCtybnRSQjQrVTZEVmpSKzFTeHg1VkJycVpNYjM4NHdXTjBTK1pRNm0wcXZLd2QwTVRsNzJUWEdLdVJEeHIzWUh1ZmFQMzN6ZXUxeXRZWWt4OVVQWjF2NXRnTFhCR00yMTM1T1I3THFqTHJjN2ZJcitab2taNzltUzkzMXEyYXk3ejM3N2YzdFpaazdWWndw''@;'; put 'put ''SHpmb1hVRTZtVmRSZ3lPcllqbWVNSTFWdmhleEhQeFBPWnhUWjZvNmpueUZmT0JZeENWdllqSGlVTlA4QkxoWmg1Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtC''@;'; put 'put ''Ky9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xS''@;'; put 'put ''eWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15''@;'; put 'put ''bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFT''@;'; put 'put ''clhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlEx''@;'; put 'put ''eGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhS''@;'; put 'put ''elRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5''@;'; put 'put ''RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdC''@;'; put 'put ''Y0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdB''@;'; put 'put ''QUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo2MDA7Zm9udC1zdHlsZTpub3JtYWx9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31jbHItc3Rh''@;'; put 'put ''Y2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZh''@;'; put 'put ''bWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tlbGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xvYmFsLWFu''@;'; put 'put ''aW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3Rp''@;'; put 'put ''dmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1j''@;'; put 'put ''bGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1z''@;'; put 'put ''aGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNr''@;'; put 'put ''Z3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3Rl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''YmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBkZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAxMDAl''@;'; put 'put ''ICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''OTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNo''@;'; put 'put ''YWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0''@;'; put 'put ''eS1kaXNjO3NyYzp1cmwoaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25vcHBhL3RleHQtc2VjdXJpdHkvbWFzdGVyL2Rpc3QvdGV4dC1zZWN1cml0eS1kaXNjLndvZmYpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRvcDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJh''@;'; put 'put ''cntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxh''@;'; put 'put ''eTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHls''@;'; put 'put ''ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFj''@;'; put 'put ''aXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAtZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDti''@;'; put 'put ''YWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBz''@;'; put 'put ''cGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAuaW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVhZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZm''@;'; put 'put ''O21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3Ig''@;'; put 'put ''LmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16''@;'; put 'put ''b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAubnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3Jl''@;'; put 'put ''ZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1lZGl0b3IgLnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDo5cHghaW1wb3J0YW50fWFwcC1lZGl0b3IgLnByb2dyZXNzLGFwcC1lZGl0''@;'; put 'put ''b3IgLnByb2dyZXNzLXN0YXRpY3t3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19YXBwLWVkaXRvciAuaG90RWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmd7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''cG9zaXRpb246cmVsYXRpdmV9YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZyAuZGV0YWlsc3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9YXBwLWVkaXRvciAuZWRpdC1yZWNvcmQtc3Bpbm5lcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmOTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXthcHAtZWRpdG9yIC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFp''@;'; put 'put ''bXBvcnRhbnR9YXBwLWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJl''@;'; put 'put ''YXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBwLWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXpl''@;'; put 'put ''OjIwcHg7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRue3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFi''@;'; put 'put ''bGV7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7YXBwLWVkaXRvciAuaWNvbi1jb2xsYXBzZSAudGV4dHtkaXNwbGF5Om5vbmV9fW15LWFwcCBhcHAtcmVxdWVzdHMtbW9kYWx7ei1pbmRleDoxMDAw''@;'; put 'put ''MH1teS1hcHAgaGVhZGVyLmFwcC1oZWFkZXJ7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZmZmfW15LWFwcCAubG9nbyBpbWcud2l0aG91dC10ZXh0e3dpZHRoOjMwcHh9bXktYXBwIC5sb2dvIGltZy53aXRoLXRleHR7d2lkdGg6MjEwcHh9bXktYXBwIC5oZWFkZXItaGFt''@;'; put 'put ''YnVyZ2VyLXRyaWdnZXJ7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3Np''@;'; put 'put ''dGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5leHBpcmVkLWRldGFpbHN7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fW15LWFwcCAu''@;'; put 'put ''ZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZSAubWFpbHRve2NvbG9yOiM4ZGM1M2V9bXktYXBwIC5tYWluLWNvbnRhaW5lciAudXBkYXRlLWtleXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEw''@;'; put 'put ''cHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9bXktYXBwIC5hbGVydC1pY29uLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1teS1hcHAgLm5hdi10ZXh0e21hcmdpbi1yaWdodDoyMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGV7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xlIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9bXktYXBwIGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLmRyb3Bkb3due3Bvc2l0aW9uOnVuc2V0fW15LWFwcCBoZWFk''@;'; put 'put ''ZXIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiNmYWZhZmF9bXktYXBwIGhlYWRlciAubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6IzFkMmYzZH1teS1hcHAgLm5vdGZ7YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9bXktYXBwIC50b2dnbGUtc3dpdGNo''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfW15''@;'; put 'put ''LWFwcCAubWFpbi1jb250YWluZXJ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9bXktYXBwIC5jb250ZW50LWNvbnRhaW5lcnt6LWluZGV4OjAhaW1wb3J0YW50fW15LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVh''@;'; put 'put ''Njc7Y29sb3I6I2ZmZn1teS1hcHAgLmFwcC1sb2FkaW5nIC5sb2FkaW5nLWxvZ297bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXkt''@;'; put 'put ''YXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6''@;'; put 'put ''MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250''@;'; put 'put ''YWluZXJbX25nY29udGVudC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDog''@;'; put 'put ''NDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2Jv''@;'; put 'put ''cmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNv''@;'; put 'put ''bixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0''@;'; put 'put ''bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAu''@;'; put 'put ''aW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0''@;'; put 'put ''aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRh''@;'; put 'put ''aW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBl''@;'; put 'put ''KG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6''@;'; put 'put ''bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29s''@;'; put 'put ''dW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2JvcmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFy''@;'; put 'put ''a10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tn''@;'; put 'put ''cm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9w''@;'; put 'put ''OjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRp''@;'; put 'put ''bmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0''@;'; put 'put ''YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBh''@;'; put 'put ''cmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAz''@;'; put 'put ''ZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xy''@;'; put 'put ''LXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQg''@;'; put 'put ''LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5j''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdodDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJh''@;'; put 'put ''ciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtj''@;'; put 'put ''dXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJl''@;'; put 'put ''c2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1z''@;'; put 'put ''aWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntwYWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFy''@;'; put 'put ''TmF2e3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7YXBwLXNpZGViYXIgI3NpZGViYXJOYXZ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fWFwcC14bG1hcCAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW59YXBwLXhsbWFwIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAteGxtYXAgLm5vLXRhYmxlLXNlbGVjdGVke3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAudGl0bGUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXJ9YXBwLXhsbWFwIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC14bG1hcCAuc3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC14bG1hcCAudmlld2VyVGl0bGV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXhs''@;'; put 'put ''bWFwIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAteGxtYXAgLmNvbnRlbnQtYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MDZiMDA2ZX1hcHAteGxtYXAgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfWFwcC14bG1hcCAuZHJvcC1hcmVhIHNwYW57Zm9udC1z''@;'; put 'put ''aXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9YXBwLW11bHRpLWRhdGFzZXQgLm5vLXRhYmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9YXBwLW11bHRpLWRhdGFzZXQgLmhlYWRlci1yb3d7cGFkZGluZzoxNXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM31h''@;'; put 'put ''cHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1pbnB1dC13cmFwcGVye21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfWFwcC1tdWx0aS1kYXRhc2V0IC5kYXRhc2V0LWlucHV0LXdyYXBwZXIgdGV4dGFyZWF7bWluLWhlaWdodDoyMDBweDtoZWlnaHQ6MjAwcHh9YXBwLW11bHRpLWRhdGFzZXQg''@;'; put 'put ''LnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDo3MHB4O21heC1oZWlnaHQ6NzBweDtoZWlnaHQ6NzBweH1hcHAtbXVsdGktZGF0YXNldCAubG9nLXdyYXBwZXJ7bWFyZ2luOjAgMTBweDtoZWlnaHQ6YXV0b31hcHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9uc3tib3Jk''@;'; put 'put ''ZXItdG9wOjFweCBzb2xpZCAjZDNkM2QzfWFwcC1tdWx0aS1kYXRhc2V0IC5saWNlbmNlLWxpbWl0LW5vdGljZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayl9YXBwLW11bHRpLWRhdGFzZXQgLnN1Ym1pc3Npb24tcmVzdWx0c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjZDNkM2QzfXRkLm5vdC1tYXRjaGVke2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMDU0fWFwcC1zdWJtaXR0ZWQgLm5vQm9yZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtc3VibWl0dGVkIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxl''@;'; put 'put ''ZnQ+LnRvb2x0aXAtY29udGVudCxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fWFwcC1zdWJtaXR0ZWQgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250''@;'; put 'put ''ZW50OmJlZm9yZSxhcHAtc3VibWl0dGVkIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLXN1Ym1pdHRlZCAu''@;'; put 'put ''bm8tc3VibWl0dGVkLXRhYmxlc3toZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtYXBwcm92ZSAuY29sdW1uLWNlbnRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1hcHByb3ZlIC5k''@;'; put 'put ''YXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7b3V0bGluZTpub25lIWltcG9ydGFudH1hcHAtYXBwcm92ZSAubGlua3N7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfWFwcC1hcHByb3ZlIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudCxhcHAtYXBwcm92ZSAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH1hcHAtYXBwcm92ZSAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jl''@;'; put 'put ''LGFwcC1hcHByb3ZlIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9YXBwLWFwcHJvdmUgLm5vQm9yZGVye2JvcmRl''@;'; put 'put ''ci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH1hcHAtYXBwcm92ZSAuYXBwcm92YWxzLWxpc3Qtd3JhcHBlcntoZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''fWFwcC1hcHByb3ZlIC5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAucmVqZWN0ZWR7''@;'; put 'put ''Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9YXBwLWhpc3RvcnkgLmFjY2VwdGVke2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfWFwcC1oaXN0b3J5IC5oc0NlbGx7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpjZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9YXBwLWhpc3RvcnkgLmJ0Q2VsbHtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fWFwcC1oaXN0b3J5IC52ZXJDZW50ZXJ7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtaGlzdG9yeSAubG9hZC1tb3JlIGlucHV0e3dpZHRoOjkwcHh9YXBwLWhpc3RvcnkgI25vRGF0YUNvbnRhaW5lcntoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX1hcHAtaGlzdG9yeSAudGFi''@;'; put 'put ''bGUtbGlua3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtdmlld2VyIC5jYXJke21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcH1hcHAtdmlld2VyIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlv''@;'; put 'put ''bi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC50aXRsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmZsZXgtZW5kO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtdmlld2VyIC5zd3ttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19YXBwLXZpZXdlciAuaW5mb0JhcnttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFk''@;'; put 'put ''ZGluZzozcHg7Zm9udC1zaXplOjE2cHh9YXBwLXZpZXdlciAuZmlsdGVyU2lkZXttYXJnaW4tdG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fWFwcC12aWV3ZXIgLm9wdGlvbnMtZHJvcGRvd24gY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtdmlld2VyIC5kcm9wZG93bi1tZW51e3dp''@;'; put 'put ''ZHRoOjE4MHB4O21hcmdpbi10b3A6LTE4cHg7cGFkZGluZzowfWFwcC12aWV3ZXIgLmRyb3Bkb3duLW1lbnUgLmJ0bnt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9YXBwLXZpZXdlciAuY2FyZEZsZXh7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLXZpZXdl''@;'; put 'put ''ciAubm9EYXRhe2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxfWFwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC12aWV3ZXIg''@;'; put 'put ''LmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fWFwcC12aWV3ZXIgLmJ0blZpZXd7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''Y29sdW1ufWFwcC12aWV3ZXIgLmRvd25sb2FkLXNlbGVjdCAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fWFwcC12aWV3ZXIgLnJlZnJlc2gtdGFibGV7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3ZXIgLmxpYmluZm97cGFkZGlu''@;'; put 'put ''ZzoxMHB4IDIwcHg7b3ZlcmZsb3c6YXV0b31hcHAtdmlld2VyIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLGFwcC12aWV3ZXIgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwYjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwNmUhaW1wb3J0YW50fWFwcC12aWV3ZXIgLm5vLXRhYmxlLXNlbGVj''@;'; put 'put ''dGVkLWluZm97YmFja2dyb3VuZDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC12aWV3ZXIgLndlYi1xdWVyeXttYXgtaGVpZ2h0OjM1dmh9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktdGV4dHttaW4taGVpZ2h0''@;'; put 'put ''OjEwMHB4O21heC1oZWlnaHQ6MTAwcHg7d2lkdGg6MTAwJSFpbXBvcnRhbnR9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciBjbHIt''@;'; put 'put ''dGV4dGFyZWEtY29udGFpbmVye21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC53ZWItcXVlcnkgLndlYi1xdWVyeS13cmFwcGVyIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXJ7bWFyZ2luLWxlZnQ6''@;'; put 'put ''MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBmb3Jte3BhZGRpbmctbGVmdDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue21hcmdpbi10b3A6NHB4fWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDowfWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5jbHItY29udHJvbC1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXZpZXdlciAuZmlsdGVyQnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfWFwcC12aWV3ZXIgLmVkaXRCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7YXBwLXZpZXdlciAucm93e21hcmdpbi1yaWdodDowcmVtO21hcmdpbi1sZWZ0OjByZW19fWFwcC1ncm91cCAuc2lkZWJh''@;'; put 'put ''ci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLWdyb3VwIC5ncm91cC1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLWdyb3VwIC5ncm91cC1pbmZvIHRke3RleHQt''@;'; put 'put ''YWxpZ246Y2VudGVyfWFwcC1ncm91cCAuZ3JvdXAtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fWFwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLWdyb3VwIC5ncm91cC1kYXRhIGgzLGFwcC1ncm91cCAuZ3JvdXAtZGF0YSBoNXt0ZXh0LWFs''@;'; put 'put ''aWduOmNlbnRlcn1hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgLm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFwcC1ncm91cCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99''@;'; put 'put ''QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1ncm91cCAuZ3JvdXAtZGF0YXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzI5NDA0Yn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWdyb3VwIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAt''@;'; put 'put ''Z3JvdXAgLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2U2ZTZlNn1hcHAtdXNlciAuc2lkZWJhci1oZWlnaHR7aGVpZ2h0OjEwMCV9YXBwLXVzZXIgLnVzZXItaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fWFwcC11c2VyIC51c2VyLWluZm97Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAt''@;'; put 'put ''dXNlciAudXNlci1pbmZvIHRke3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtdXNlciAudXNlci1kYXRhe21pbi1oZWlnaHQ6YXV0b31hcHAtdXNlciAudXNlci1kYXRhIGgzLGFwcC11c2VyIC51c2Vy''@;'; put 'put ''LWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXVzZXIgLnVzZXItdGFibGV7d2lkdGg6MTAwJX1hcHAtdXNlciAudXNlci10YWJsZSB0aGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9YXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9YXBw''@;'; put 'put ''LXVzZXIgLndpZHRoLTUwe3dpZHRoOjUwJX1hcHAtdXNlciAud2lkdGgtMzN7d2lkdGg6MzMlfWFwcC11c2VyIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7YXBwLXVzZXIgLnVz''@;'; 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 ''b24gYnV0dG9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0aW9uIGJ1dHRvbnttaW4td2lkdGg6MTAycHh9YXBwLXN5c3RlbSAuZGFya3tmb250LXdlaWdodDo3MDA7bWFyZ2luLWxlZnQ6NXB4fUBtZWRpYSAobWF4LXdpZHRoOiA5OTNweCl7YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2Om50aC1jaGls''@;'; put 'put ''ZCgyKXttYXJnaW46MH1hcHAtc3lzdGVtIC5zeXMtaW5mbyBkaXZ7bWFyZ2luOjIwcHggMH19YXBwLXF1ZXJ5IC5jb250ZW50e2Rpc3BsYXk6ZmxleH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXF1''@;'; put 'put ''ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLWxvZ2lje2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjE1cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1''@;'; put 'put ''ZXJ5e3BhZGRpbmc6MzBweCAwIDIwcHggMjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5Pi5jbHItcm93''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJvdzpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4''@;'; put 'put ''IHNvbGlkIHJnYmEoMCwwLDAsLjE2KX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJs''@;'; put 'put ''ZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhcmlhYmxlLWNvbCAuZGF0YWxpc3Qtd3JhcHBlciBpbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAub3BlcmF0b3ItY29sIGNsci1zZWxlY3QtY29udGFpbmVye2hlaWdo''@;'; put 'put ''dDo0NXB4O21hcmdpbi10b3A6MDt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY2hlY2tib3gtdmFsc3t3aWR0aDoxMDAlO3BhZGRpbmc6MCA1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAu''@;'; put 'put ''Y2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHMgc2VjdGlvbnttYXgt''@;'; put 'put ''aGVpZ2h0OjEyMHB4O292ZXJmbG93LXk6c2Nyb2xsfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNs''@;'; put 'put ''YXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIC5jbHItY29u''@;'; put 'put ''dHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNv''@;'; put 'put ''bnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnNpbmdsZS1maWVsZC12YWxzIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJh''@;'; put 'put ''bmdlLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5l''@;'; put 'put ''ciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdl''@;'; put 'put ''LXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9te21hcmdpbi1i''@;'; put 'put ''b3R0b206MTBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFs''@;'; put 'put ''dWUtY29sIC5yYW5nZS12YWxzIC5mcm9tIGlucHV0W3R5cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20sYXBwLXF1ZXJ5IC5j''@;'; put 'put ''b250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRve21pbi13aWR0aDoxMDBweH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbT5p''@;'; put 'put ''bnB1dCxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAu''@;'; put 'put ''cmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVdLGFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50byBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHMgLmNs''@;'; put 'put ''ci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25l''@;'; put 'put ''fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRl''@;'; put 'put ''bnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIGlucHV0W3R5''@;'; put 'put ''cGU9dGltZV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5jbGF1c2UtYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3c7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnMgYnV0dG9ue21pbi13aWR0aDphdXRvfWFwcC1xdWVyeSAuaW52YWxpZC1jbGF1c2V7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNkOTRi''@;'; put 'put ''MzF9YXBwLXF1ZXJ5IC5jbGF1c2Utcm93IGNsci1pY29ue21hcmdpbjowfWFwcC1xdWVyeSAuY2xhdXNlLXJvdzphZnRlcntwb3NpdGlvbjpyZWxhdGl2ZTtjb250ZW50OiIiO2hlaWdodDouNDE2NjdyZW07d2lkdGg6LjQxNjY3cmVtO3RvcDouMjkxNjdyZW07cmlnaHQ6LjI1cmVtO2JhY2tn''@;'; put 'put ''cm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZ1wyMDI2JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmcl''@;'; put 'put ''M0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXXtwYWRkaW5nOjhweDttYXJnaW46MDtib3JkZXItcmFkaXVzOjFweDtkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDo2NnB4O3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV0gc3Bhbi5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDt0b3A6MTBw''@;'; put 'put ''eH1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGV7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1xdWVyeSAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLXF1ZXJ5IGNsci1kYXRlLWNvbnRhaW5lcnttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9YXBwLXF1ZXJ5IGlucHV0W3R5cGU9dGltZV17Ym9yZGVyOjA7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYjNiM2IzfWFwcC1xdWVyeSBpbnB1dFt0eXBl''@;'; put 'put ''PXRpbWVdOmZvY3Vze291dGxpbmU6bm9uZX1hcHAtcXVlcnkgLmluLXZhbHVlcy1tb2RhbCAubW9kYWwtZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNkOGQ4ZDg7bWFyZ2luLXRvcDoxMHB4fWFwcC1xdWVyeSAucHJvZ3Jlc3MsYXBwLXF1ZXJ5IC5wcm9ncmVzcy1zdGF0aWN7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXF1ZXJ5IC5jbGF1c2UtbG9naWN7YmFja2dyb3VuZDojZTllOWU5fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXti''@;'; put 'put ''YWNrZ3JvdW5kOiNmYmY4Zjh9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5saW5lLW51bWJlcnN7Ym9yZGVyLWNvbG9yOiM5ODk3OTchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6IzE5MmEzMH1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmNsYXVzZS1xdWVyeXtiYWNrZ3JvdW5kOiMyNjNlNDh9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHN7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGgyLGFwcC1sb2dpbiAuc2lk''@;'; put 'put ''ZUJhclByb3BzIGgzLGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg0LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGg1LGFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGlucHV0e2NvbG9yOiNlMGUwZTB9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYnV0dG9ue2JvcmRlci1jb2xvcjp3aGVhdCFpbXBv''@;'; put 'put ''cnRhbnR9YXBwLWxvZ2luIC5zaWRlQmFyUHJvcHMgYXtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH1h''@;'; put 'put ''cHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlcj4qe3BvaW50ZXItZXZlbnRzOmF1dG99YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXJ7d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6''@;'; put 'put ''I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2lue3ot''@;'; put 'put ''aW5kZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpu''@;'; put 'put ''b3JtYWw7bGluZS1oZWlnaHQ6MzZweH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC50aXRsZSAud2VsY29tZXttYXJnaW4tdG9wOjM2cHh9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9y''@;'; put 'put ''bS5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZvcm0ubG9naW4gLmxvZ2luLWdyb3VwPip7bWFyZ2luOjZweCAwIDE4cHh9''@;'; put 'put ''YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5sb2dpbi1zaWRlYmFye3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlIC5vdmVybGF5e2Rpc3BsYXk6YmxvY2t9YXBwLWxvZ2luIC5s''@;'; put 'put ''b2dpbi1zaWRlYmFyLXdyYXBwZXIgLm92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzIxMjEyMTgwO3otaW5kZXg6MTAwfWFwcC1sb2dpbiAubG9naW4tbG9nb3ttYXgtd2lkdGg6MjAwcHh9''@;'; put 'put ''LmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LWdyb3VwLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC51c2VybmFtZSwubG9naW4t''@;'; put 'put ''c2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0ubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXIsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgYnV0dG9ue21heC13aWR0aDpub25lfWFw''@;'; put 'put ''cC10ZXJtcyA6aG9zdHtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmNWY2ZmZ9YXBwLXRlcm1zIC5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZHtvcGFjaXR5Oi41fWFwcC10ZXJtcyAuY2FyZHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdp''@;'; put 'put ''bi10b3A6MH1hcHAtdGVybXMgLmNhcmQgLmNhcmQtYmxvY2t7ZmxleDoxO292ZXJmbG93OmF1dG99YXBwLXRlcm1zIC5hY2NlcHQtY2hlY2tib3h7cGFkZGluZzoxMHB4IDE1cHh9YXBwLWRlcGxveSAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWRlcGxveSAuYnRue21hcmdpbi10b3A6MTBweH1h''@;'; put 'put ''cHAtZGVwbG95IC5sb2ctd3JhcHBlcnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjOWM5Yzk7cGFkZGluZzoxMHB4O292ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXB9YXBwLWRlcGxveSAjY29udGV4dHMtYnRue3BhZGRpbmc6M3B4IDAg''@;'; put 'put ''MDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXJ7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9YXBwLWRlcGxveSAudmFsaWRhdGlvbi1iYXIgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb257cGFkZGluZzowIDE1cHh9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9uIC5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlcnttYXJnaW46MjBweCAwfWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbiAuYnRuLWF1dG9kZXBsb3l7ZGlzcGxheTpibG9jazttYXJnaW46MTVweCAwfWFwcC1hbGVydHMgY2xyLWFsZXJ0c3tkaXNwbGF5OmJsb2NrfWFwcC1tYW51YWwtZGVwbG95IC5jbGVhci1tZW1vcnktYnV0''@;'; put 'put ''dG9ue3JpZ2h0OjEwcHg7dG9wOjJweH1hcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBl''@;'; put 'put ''YXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9YXBwLWxpbmVhZ2UgI2dyYXBoe2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9y''@;'; put 'put ''ZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH1hcHAtbGluZWFnZSAuc2VsZWN0aW9uLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXgtd2lkdGg6NjcwcHh9YXBwLWxpbmVhZ2UgLmNvbHVtbi1hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5O2NvbG9yOiMwMDB9YXBwLWxpbmVhZ2Ug''@;'; put 'put ''LmNvbnRlbnQtYXJlYXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJke21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDEyMHB4KX1hcHAtbGluZWFnZSAuY29udGVudC1hcmVhIC5jYXJkIC5jYXJkLWJsb2Nre3BhZGRpbmc6LjVyZW0gLjM1cmVt''@;'; put 'put ''IWltcG9ydGFudH1hcHAtbGluZWFnZSBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLWxpbmVhZ2UgLmJ0bi1ncm91cC5kaXJlY3Rpb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX1hcHAtbGluZWFnZSAuZ3JhcGgtcmVuZGVyLXNwaW5u''@;'; put 'put ''ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjEwcHh9YXBwLWxpbmVhZ2UgLmJpZ2xpbmVhZ2Utcm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fWFwcC1saW5lYWdlIC5tb2RhbC1mb290ZXIgcHttYXJnaW46MH1hcHAtbGluZWFnZSAubGluZWFnZS10aXRsZS13cmFwcGVye2xlZnQ6MTJweH1hcHAtbGluZWFnZSAubWF4LWRlcHRoLWlucHV0e3dpZHRoOjEwMCV9QG1lZGlhICht''@;'; put 'put ''YXgtd2lkdGg6IDc2OHB4KXthcHAtbGluZWFnZSAudG9nZ2xlLXN3aXRjaC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToyMHB4fX1kYy10cmVlIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1kYy10cmVlIGNsci10cmVlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29u''@;'; put 'put ''dGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX1hcHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2hlaWdodDo3NXZoO292''@;'; put 'put ''ZXJmbG93OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJhZGl1czo0cHh9YXBwLW1ldGFkYXRhIC5jb2xzLWhlYWR7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO3BhZGRpbmc6MTBweDtkaXNwbGF5OmZsZXh9YXBwLW1ldGFkYXRhIC5vYmplY3QtdGV4dHtkaXNwbGF5''@;'; put 'put ''OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tbGVmdDoxMHB4O2ZsZXg6MX1hcHAtbWV0YWRhdGEgLnJlcG8tZHJvcGRvd257bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5jbHItYWNjb3JkaW9uLXRpdGxle3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5mbG9hdC1yaWdodHttYXJnaW46MDtmbG9hdDpyaWdodH1hcHAtbWV0YWRhdGEgLmZ1bGwtd2lkdGh7d2lkdGg6MTAwJX1hcHAtbWV0YWRhdGEgLm9iamVjdC11cml7bWFyZ2luOjVweCAw''@;'; put 'put ''IDB9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH1hcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czozcHh9YXBwLW1ldGFkYXRhIC5kYXRhZ3JpZC1ob3N0e2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fWFwcC1tZXRhZGF0YSAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLW1ldGFkYXRhIC5jb250ZW50LWFy''@;'; put 'put ''ZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtbWV0YWRhdGEgLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA1NTYwfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBh''@;'; put 'put ''cHAtbWV0YWRhdGEgLm9iamVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOX1hcHAtbGljZW5zaW5ne2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRk''@;'; put 'put ''aW5nOjIwcHh9YXBwLWxpY2Vuc2luZyAuY2FyZHttYXJnaW4tdG9wOjB9YXBwLWxpY2Vuc2luZyAua2V5LWVycm9ye2ZvbnQtc2l6ZToxNnB4fWFwcC1saWNlbnNpbmcgLm1pc3NrZXl7Y29sb3I6I2U3NGMzY31hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtLGFwcC1saWNlbnNpbmcg''@;'; put 'put ''LmFjdGl2YXRpb24ta2V5LWZvcm17cGFkZGluZzowfWFwcC1saWNlbnNpbmcgLmxpY2Vuc2Uta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lcixhcHAtbGljZW5zaW5nIC5hY3RpdmF0aW9uLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtbGljZW5z''@;'; put 'put ''aW5nIC5saWNlbnNlLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWlu''@;'; put 'put ''LWhlaWdodDoxNzBweDtyZXNpemU6bm9uZX1hcHAtbGljZW5zaW5nIC5hcHBseS1rZXlze2hlaWdodDo0MHB4fWFwcC1saWNlbnNpbmcgLmRyb3AtYXJlYXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoy''@;'; put 'put ''cHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1hcHAtbGljZW5zaW5nIGNsci10YWJzIGJ1dHRvbntib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmxpY2VuY2Utbm90aWNle2ZvbnQtc2l6ZToxNHB4''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFse3otaW5kZXg6MTMwMH1hcHAtdmlld2JveGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWFwcC12aWV3Ym94''@;'; put 'put ''ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9YXBwLXZpZXdib3hlcyBkYy10cmVle292ZXJmbG93OmF1dG87Zmxl''@;'; put 'put ''eDoxfWFwcC12aWV3Ym94ZXMgLnRvb2x0aXAtbG9uZ3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9YXBwLXZpZXdib3hlcyAuYWRkLW5ld3t3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9YXBwLXZpZXdib3hlcyAuYWRkLW5ldz5we21hcmdpbi1ib3R0b206MXB4fWFwcC12aWV3Ym94ZXMgLnZp''@;'; put 'put ''ZXdib3gtbGltaXQtbm90aWNle29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY31hcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3Blbnt3aWR0aDo1MCV9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveHtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9YXBwLXZp''@;'; put 'put ''ZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveC5zZWxlY3RlZHtiYWNrZ3JvdW5kOiMzYzg1MDAyZX1hcHAtdmlld2JveGVzIC52aWV3Ym94ZXMtY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX1hcHAtdmll''@;'; put 'put ''d2JveGVzIC52aWV3Ym94e21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9YXBwLXZpZXdib3hlcyAudmlld2JveC5mb2N1c2Vke3otaW5kZXg6MTEwMDtvdXRsaW5lOm5vbmV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuY29udGVudHtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCww''@;'; put 'put ''LDAsLjMwMTk2MDc4NDMpO2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGV7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAw''@;'; put 'put ''O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC50YWJsZS10aXRsZXt3aGl0ZS1zcGFjZTpwcmUt''@;'; put 'put ''d3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnMgY2xyLWljb257Y3Vyc29yOnBvaW50''@;'; put 'put ''ZXI7bWFyZ2luLWxlZnQ6NXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29uOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNsaWNrLWljb257Y3Vyc29yOnBvaW50ZXJ9YXBwLXZpZXdib3hlcyAu''@;'; put 'put ''dmlld2JveCAuY2xpY2staWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxle3Bvc2l0aW9uOmFic29sdXRlfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuY29ybmVye3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7''@;'; put 'put ''Y3Vyc29yOm53c2UtcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUucmlnaHR7d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZS5ib3R0b217aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1''@;'; put 'put ''cnNvcjpucy1yZXNpemV9YXBwLXZpZXdib3hlcyAuY29scy1zZWFyY2h7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fWFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtib3JkZXI6c29saWQg''@;'; put 'put ''MXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3h7cGFkZGluZzoycHggMTBweDtib3JkZXItYm90''@;'; put 'put ''dG9tOnNvbGlkIDFweCAjY2NjO2NvbG9yOiMwMDAwMDBkZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOm1vdmU7Zm9udC1zaXplOjE0cHh9''@;'; put 'put ''YXBwLXZpZXdib3hlcyAuY29sLWJveC5zZWFyY2g6Zm9jdXN7YmFja2dyb3VuZDojMDAwMDAwMWF9YXBwLXZpZXdib3hlcyAuY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwMjR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcHJldmlld3tib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHggIzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9YXBwLXZpZXdib3hlcyAuY2RrLWRyYWctcGxhY2Vo''@;'; put 'put ''b2xkZXJ7b3BhY2l0eTowfWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLWFuaW1hdGluZ3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuY29sLWJveDpsYXN0LWNoaWxke2JvcmRlcjpub25lfWFwcC12aWV3Ym94ZXMgLmNvbHMt''@;'; put 'put ''bGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nIC5jb2wtYm94Om5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX1hcHAtdmlld2JveGVzIC5kaXNhYmxlZHtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWlt''@;'; put 'put ''cG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfWFwcC12aWV3Ym94ZXMgLmZpbHRlci1hY3RpdmV7Y29sb3I6IzAwNzJhM31hcHAtdmlld2JveGVzIGhvdC10YWJsZSAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9YXBwLXZpZXdib3hlcyBo''@;'; put 'put ''b3QtdGFibGUgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2JveGVzIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMw''@;'; put 'put ''NmIwMGIwfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRkLnJlYWRvbmx5''@;'; put 'put ''Q2VsbHtvcGFjaXR5Oi41fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3g6aG92ZXJ7YmFja2dyb3VuZDojMzE0YjU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MTRiNTc7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6Izg1ODU4NX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2wtYm94e2JhY2tncm91bmQ6IzMxNGI1Nztib3JkZXItY29sb3I6Izg1ODU4NTtjb2xvcjppbmhlcml0fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtdmll''@;'; put 'put ''d2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6I2U4ZThlOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29scy1saXN0e2JhY2tncm91bmQ6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZpZXdib3hlcyAuY29s''@;'; put 'put ''LWJveHtiYWNrZ3JvdW5kOiNmZmZ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRjLWxvYy1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRoOjUwMHB4fWFwcC1hdXRvbWF0aWMtZGVwbG95IC5hdXRvLWRlcGxveXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveHt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6ZmxleDtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhweCAjMDAwMDAwODJ9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLnNwaW5uZXItYm94IC5idXR0b25ze2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktc3RhdHVzLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3cgcHtt''@;'; put 'put ''YXJnaW46MCAwIDAgMTBweH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN1Y2Nlc3N7Y29sb3I6IzZlY2Y0NH1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LWVycm9ye2NvbG9yOiNlNzRjM2N9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS11bmRldGVybWluYXRlZHtjb2xv''@;'; put 'put ''cjojY2FjYWNhfWFwcC1hdXRvbWF0aWMtZGVwbG95IGhye2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfWFwcC1pbmZvLW1vZGFsIC5jbHItYWJvcnQtbW9kYWwgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtaW5mby1t''@;'; put 'put ''b2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbHt6LWluZGV4OjIwNTB9YXBwLWluZm8tbW9kYWwgLm1vZGFsLXRpdGxle3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1pbmZvLW1vZGFsIC5zYXNTZXJ2aWNle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9YXBwLWlu''@;'; put 'put ''Zm8tbW9kYWwgLm1vZGFsLWZvb3Rlcntwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc3lzdGV4dHtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfWFwcC1pbmZvLW1vZGFsIC5zeXN0ZXh0IHB7''@;'; put 'put ''bWFyZ2luLXRvcDowO3dvcmQtd3JhcDpicmVhay13b3JkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvd3t3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLm5hbWUtaW5wdXQtcm93IC5jZWxsLWRlc2N7bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBwZXJ7ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5pbnB1dHMtd3JhcHBl''@;'; put 'put ''cj4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1zZWxlY3QtY29udGFpbmVyKXtmbGV4OjF9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IHB7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRy''@;'; put 'put ''eSAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQx''@;'; put 'put ''NjY3cmVtO21hcmdpbi1yaWdodDo2cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBh''@;'; put 'put ''cHAtc29mdC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1l''@;'; put 'put ''ZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29s''@;'; put 'put ''dW1uLWVudHJ5OmZpcnN0LWNoaWxkIHA6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmRhdGUtZmllbGR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1t''@;'; put 'put ''b2RhbCAuZGF0ZS1maWVsZCB0ZXh0YXJlYXt3aWR0aDoyMzBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxkIC5kYXRlLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDo0cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2Rh''@;'; put 'put ''bCAuZGF0ZS1maWVsZCAuZGF0ZS1waWNrZXIgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtYm9keXtwYWRkaW5nLWJvdHRvbToxMHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwg''@;'; put 'put ''Y2xyLXNlbGVjdC1jb250YWluZXJ7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbi1yaWdodDo1cHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVye21heC1oZWlnaHQ6dW5zZXR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWlu''@;'; put 'put ''ZXIgc2VsZWN0e2hlaWdodDphdXRvO3BhZGRpbmc6MTBweCAyMHB4IDEwcHggMTBweDtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fWFw''@;'; put 'put ''cC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVye3dpZHRoOjIyNHB4O2JvcmRlcjox''@;'; put 'put ''cHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHIt''@;'; put 'put ''aW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLGFwcC1lZGl0LXJlY29y''@;'; put 'put ''ZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIuaW52''@;'; put 'put ''YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWVkaXQt''@;'; put 'put ''cmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVh''@;'; put 'put ''LmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX1hcHAt''@;'; put 'put ''ZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6''@;'; put 'put ''NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtwYWRkaW5nOjAgMCAxcmVtfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5wcmV2LW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQgLnByZXYtbmV4dCBwe21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0IGJ1dHRvbnttYXJnaW46MCAxMHB4fWFwcC1lZGl0LXJlY29yZCAuZm9jdXNhYmxlOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfWFwcC1lZGl0LXJlY29yZCAuZW50cnktaW5wdXQtbGVm''@;'; put 'put ''dC1vZmZzZXR7bGVmdDotMzBweH1hcHAtZWRpdC1yZWNvcmQgLnZhbGlkYXRpb24taW5mby1hbGVydHt3aWR0aDozMTBweH1hcHAtYXV0b2NvbXBsZXRlIC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9''@;'; put 'put ''YXBwLWF1dG9jb21wbGV0ZSBpbnB1dHt3aWR0aDoxMDAlO291dGxpbmU6bm9uZX1hcHAtYXV0b2NvbXBsZXRlIGlucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5vdmVy''@;'; put 'put ''bGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdHtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIw''@;'; put 'put ''MDB9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDoj''@;'; put 'put ''MDAwMDAwMGZ9YXBwLWF1dG9jb21wbGV0ZSAuYXV0b2NvbXBsZXRlLXdyYXBwZXIgLmRhdGFsaXN0IG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5sb2FkLW1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiMyMTMzM2I7Ym9yZGVyOjFweCBzb2xpZCAjNTc1NzU3fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hdXRvY29tcGxldGUgaW5wdXR7Y29s''@;'; put 'put ''b3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIC5kYXRhbGlzdCBvcHRpb257Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojZmZmfWFwcC1jb250YWN0LWxpbmsgLnVuc2V0e2Nv''@;'; put 'put ''bG9yOnVuc2V0fWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgY2xyLXRhYnN7bWF4LWhlaWdodDo3MHZofWFwcC1kYXRhc2V0LWluZm8gLm1vZGFsLWJvZHkgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWIt''@;'; put 'put ''Y29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gY2xyLW1vZGFsIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9YXBwLWRhdGFzZXQtaW5mbyAuY2xpY2thYmxlLXJvd3tjdXJzb3I6cG9pbnRlcn1hcHAtZGF0YXNldC1pbmZvIC5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGluZS1vZmZzZXQ6MH1hcHAtdXBsb2FkLXN0YXRlcntkaXNwbGF5OmJsb2NrfWFwcC11cGxvYWQtc3RhdGVyIHB7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLWFwcHJvdmUtZGV0YWlscyAubG9h''@;'; put 'put ''ZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLWFwcHJvdmUtZGV0YWlscyAubW9kYWxMYXJnZXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyAuYWRkZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksNzcsMTE3LC4yKTtib3JkZXItcmFkaXVzOjVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5kZWxldGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0''@;'; put 'put ''YWlscyAudXBkYXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSwxMTcsOSwuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2h7YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1''@;'; put 'put ''cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuY2g6aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9YXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+''@;'; put 'put ''LnRvb2x0aXAtY29udGVudCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7Zm9udC1zaXplOi41NDE2N3JlbTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29s''@;'; put 'put ''b3I6I2YwZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3''@;'; put 'put ''cmVtfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZS1kZXRhaWxz''@;'; put 'put ''IC50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlk''@;'; put 'put ''ICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCB0cmFuc3BhcmVudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZXtib3JkZXI6MHB4IHNvbGlkfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvZ2dsZS1zd2l0''@;'; put 'put ''Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yfWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlQ29udHtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnQgdGR7d29yZC1icmVhazpicmVhay13b3JkfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsSW5m''@;'; put 'put ''b3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1hcHByb3ZlLWRl''@;'; put 'put ''dGFpbHMgLmFwcHJvdmFsSW5mb3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuYXBwcm92YWxCYWNre2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH1hcHAt''@;'; put 'put ''YXBwcm92ZS1kZXRhaWxzIC5jYXJke21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRkLmxlZnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGgubGVmdHt0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQ7d2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGQubGVmdCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0aC5sZWZ0e3RleHQtYWxpZ246bGVmdDtmbGV4OjE7d2lkdGg6MzAwcHghaW1wb3J0YW50fWFwcC1hcHByb3Zl''@;'; put 'put ''LWRldGFpbHMgLnRvb2xse3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH1hcHAtYXBw''@;'; put 'put ''cm92ZS1kZXRhaWxzICNhY2NlcHRCdG4sYXBwLWFwcHJvdmUtZGV0YWlscyAjcmVqZWN0QnRue3dpZHRoOjE3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xle21pbi13aWR0aDo3NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgY2xyLW1vZGFsIC5tb2RhbC1i''@;'; put 'put ''b2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0b31hcHAtYXBwcm92ZS1kZXRhaWxzIC5yb3dzLW5vdGljZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAucm93cy1u''@;'; put 'put ''b3RpY2UgY2xyLWljb257bWFyZ2luOjB9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiM5Mzk3MWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dy''@;'; put 'put ''b3VuZDojNTY5OTVmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3VuZDojOGE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6I2Zh''@;'; put 'put ''ZmRhOH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuYWRkZWRSb3d7YmFja2dyb3VuZDojOTJkMDlhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6I2U2YjNiM31hcHAt''@;'; put 'put ''dml5YS1hcGktZXhwbG9yZXIgLmFwaS1jb2xsZWN0aW9uLWRyb3Bkb3due21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47''@;'; put 'put ''d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLWFyZWE+bmd4LWpzb24tdmlld2Vye2hlaWdodDoxMDAlfWFwcC12aXlhLWFw''@;'; put 'put ''aS1leHBsb3JlciAuanNvbi1hcmVhPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5qc29uLXRvZ2dsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5l''@;'; put 'put ''bmRwb2ludC1icmVhZGNydW1ze21hcmdpbjowIDAgMCAxMHB4fWFwcC12aXlhLWFwaS1leHBsb3JlciAucXVlcnktcGFyYW1zIGlucHV0e3dpZHRoOjcwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvcntsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtk''@;'; put 'put ''aXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDoxMHB4fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgLnNwaW5uZXJ7dmVydGljYWwtYWxpZ246bWlkZGxlfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1p''@;'; put 'put ''bmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnR7bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcHttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcDpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHIt''@;'; put 'put ''c2lnbnBvc3QtY29udGVudCBwOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFue21hcmdpbi1sZWZ0OjEwcHh9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWlu''@;'; put 'put ''ZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4ucnVubmluZ3tjb2xvcjojZTliZjA0fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLnN1Y2Nlc3N7Y29sb3I6IzYwYjUxNX1hcHAtbG9hZGluZy1pbmRp''@;'; put 'put ''Y2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5mYWlse2NvbG9yOiNjOTIxMDB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5leGNlbC1wYXNzd29yZC1yb290IC5tb2RhbHt6LWluZGV4OjEwNjB9YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIC5t''@;'; put 'put ''b2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtZXhjZWwtcGFzc3dvcmQtbW9kYWwgLm1vZGFsLWZvb3RlciAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7Z2FwOjVweH1hcHAtc3RhZ2UgLnJlamVjdGVke2Nv''@;'; put 'put ''bG9yOiNmODMxMjY7Zm9udC13ZWlnaHQ6NzAwfWFwcC1zdGFnZSAuYWNjZXB0ZWR7Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9YXBwLXN0YWdlIC5iYXNlVGFibGVMaW5re2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifWJvZHlbY2RzLXRoZW1lPWRh''@;'; put 'put ''cmtdIGFwcC1zdGFnZSAuYmFzZVRhYmxlTGlua3tjb2xvcjojNGVjMGZmfWFwcC1zb2Z0LXNlbGVjdCAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDox''@;'; put 'put ''MDAlO291dGxpbmU6bm9uZX1hcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tdG9wOi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjJweCFpbXBvcnRh''@;'; put 'put ''bnR9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9YXBwLXNvZnQtc2VsZWN0IGNsci1kYXRlLWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5k''@;'; put 'put ''aWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgbGFiZWwuc2Vjb25kTGFiZWxBY3RpdmUgc3Bhbjpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTou''@;'; put 'put ''Nn1hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6NTB2d31hcHAtc2FzanMtY29uZmlndXJhdG9yIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVyIGlucHV0e3dpZHRo''@;'; put 'put ''OjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAudGhpblByb2dyZXNze2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9YXBwLWhlYWRlci1h''@;'; put 'put ''Y3Rpb25ze2Rpc3BsYXk6Y29udGVudHN9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHR7bWFyZ2luLXRvcDoxMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuY29weVJpZ2h0IHNwYW57d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fWFwcC1oZWFkZXItYWN0aW9ucyAudXNlci1uYXYtdG9nZ2xle3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9w''@;'; put 'put ''ZG93bntwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3JlbX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1oZWFkZXItYWN0aW9ucyAu''@;'; put 'put ''YXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xlOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rp''@;'; put 'put ''b25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGUgLmJhZGdlLmhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnV7Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfWFw''@;'; put 'put ''cC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuc2VwYXJhdG9ye21hcmdpbjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRy''@;'; put 'put ''b3Bkb3duLWl0ZW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWl0ZW0gLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVte3Bh''@;'; put 'put ''ZGRpbmc6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gLnRvZ2dsZS1zd2l0Y2h7bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC1oZWFkZXItYWN0aW9u''@;'; put 'put ''cyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLWxvZ291dHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taXRlbSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hl''@;'; put 'put ''aWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSBpbnB1dHtpbnNldDowO2N1cnNvcjpwb2ludGVyfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBj''@;'; put 'put ''bHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLWhlYWRlci1hY3Rpb25zIC5kZWJ1Zy10b2dnbGUtbGFiZWx7cGFkZGluZy1sZWZ0OjQy''@;'; put 'put ''cHh9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtaGVhZGVyLWFjdGlvbnMgLnNpZGVuYXYtY29udGVudCBhLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjppbmhlcml0O3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiM1NjU2NTZ9fWFwcC1oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsuZC1ibG9j''@;'; put 'put ''ayBzcGFuLmJhZGdle3Bvc2l0aW9uOmFic29sdXRlfWFwcC1oZWFkZXItYWN0aW9ucyAuYXZhdGFyLWltZ3t3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4fS5jbHItaW5wdXQtd3JhcHBlci5zbWFsbC1tdCAuY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bHttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya117c2Nyb2xsYmFyLXdpZHRoOnRoaW47c2Nyb2xsYmFyLWNvbG9yOiMzYjUyNjggIzI3Mzg0OX1ib2R5W2Nkcy10aGVtZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MTFweH1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2t7YmFja2dyb3VuZDojM2I1MjY4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiMyNzM4NDk7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjNweCBzb2xpZCAjM2I1MjY4''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGNsci1pY29uLmlzLWhpZ2hsaWdodHtmaWxsOiM0ZWMwZmZ9Ym9keSxodG1se2ZvbnQtd2VpZ2h0OjQwMCFpbXBvcnRhbnQ7cGFkZGluZzowO21hcmdpbjowfWJvZHkuc2hvdWxkLWxvZ2luIGNsci1tb2RhbCxodG1sLnNob3VsZC1sb2dpbiBjbHItbW9k''@;'; put 'put ''YWx7ZGlzcGxheTpub25lIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBidXR0b246Zm9jdXN7b3V0bGluZTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigyNTUsMjU1LDI1NSl9Ym9keVtjZHMtdGhlbWU9''@;'; put 'put ''bGlnaHRdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGJ1dHRvbjpmb2N1cy12aXNpYmxle291dGxpbmU6MXB4IHNvbGlkIHJnYigwLDAsMCl9LnNlbGVjdC10YWJsZS1pY29uLC5zZWxlY3QtbGlicmFyeS1pY29ue3dpZHRoOjgwcHh9W2Nkcy10ZXh0''@;'; put 'put ''PWxhYmVsXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLXRleHQ9bGFiZWxMaW5rXXtsaW5lLWhlaWdodDoxLjghaW1wb3J0YW50fVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNh''@;'; put 'put ''cHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YWZ0ZXIsW2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5dOmJlZm9yZXtkaXNwbGF5Om5vbmV9Lm1vZGFsIC5tb2RhbC1ib2R5e3BhZGRpbmc6MTVweH0ubW9kYWwgLm1vZGFsLWZv''@;'; put 'put ''b3RlcntwYWRkaW5nOjAgMTVweCAxNXB4fS5sb2ctd3JhcHBlcnttaW4taGVpZ2h0OjUwcHg7cGFkZGluZzoxMHB4O21hcmdpbi10b3A6MTBweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkICNlMmUyZTI7aGVpZ2h0OjQ4dmg7b3ZlcmZs''@;'; put 'put ''b3c6YXV0b30uc2xpZGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMyMHB4O21hcmdpbi1sZWZ0Ojc1cHg7bWFyZ2luLXRvcDo3MHB4O2hlaWdodDo1cHg7b3ZlcmZsb3cteDpoaWRkZW59LmxpbmV7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTouNDtiYWNrZ3JvdW5kOiM3M2Q1NDQ7d2lk''@;'; put 'put ''dGg6MTUwJTtoZWlnaHQ6NXB4fS5zdWJsaW5le3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6IzczZDU0NDtoZWlnaHQ6NXB4fS5pbmN7YW5pbWF0aW9uOmluY3JlYXNlIDJzIGluZmluaXRlfS5kZWN7YW5pbWF0aW9uOmRlY3JlYXNlIDJzIC41cyBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGlu''@;'; put 'put ''Y3JlYXNlezAle2xlZnQ6LTUlO3dpZHRoOjUlfXRve2xlZnQ6MTMwJTt3aWR0aDoxMDAlfX1Aa2V5ZnJhbWVzIGRlY3JlYXNlezAle2xlZnQ6LTgwJTt3aWR0aDo4MCV9dG97bGVmdDoxMTAlO3dpZHRoOjEwJX19LmFwcC1sb2FkaW5ne2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDojMzE0MzUxO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjIwMDA7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MH0uc2VsZWN0LW5vbmV7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5v''@;'; put 'put ''bmV9LmgtYXV0b3toZWlnaHQ6YXV0b30uaC11bnNldC1pe2hlaWdodDp1bnNldCFpbXBvcnRhbnR9Lm1pbi1oLTUwdmh7bWluLWhlaWdodDo1MHZofS5oLTI0dmgsLmgtMjV2aHtoZWlnaHQ6MjV2aH0uaC03MHZoe2hlaWdodDo3MHZofS5oLTgwdmh7aGVpZ2h0Ojgwdmh9LmgtMTAwe2hlaWdo''@;'; put 'put ''dDoxMDAlfS53LTUwdnd7d2lkdGg6NTB2d30udy0xMDB7d2lkdGg6MTAwJX0udy0xMDAtaXt3aWR0aDoxMDAlIWltcG9ydGFudH0udy00MHt3aWR0aDo0MCV9Lm1pbi13LTB7bWluLXdpZHRoOjBweH0ubXgtNXttYXJnaW46MCA1cHh9Lm15LTV7bWFyZ2luOjVweCAwfS5teS0xNXttYXJnaW46''@;'; put 'put ''MTVweCAwfS5teS0xMC1teC1hdXRve21hcmdpbjoxMHB4IGF1dG99Lm0tMHttYXJnaW46MCFpbXBvcnRhbnR9Lm0tMTB7bWFyZ2luOjEwcHh9Lm10LTB7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubXQtMy1uZWdhdGl2ZXttYXJnaW4tdG9wOi0zcHh9Lm10LTV7bWFyZ2luLXRvcDo1cHh9Lm10''@;'; put 'put ''LTUtaXttYXJnaW4tdG9wOjVweCFpbXBvcnRhbnR9Lm10LTJ7bWFyZ2luLXRvcDoycHh9Lm10LTItaXttYXJnaW4tdG9wOjJweCFpbXBvcnRhbnR9Lm10LTEwe21hcmdpbi10b3A6MTBweH0ubXQtMTV7bWFyZ2luLXRvcDoxNXB4fS5tdC0yMHttYXJnaW4tdG9wOjIwcHh9Lm1sLTB7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6MH0ubWwtM3ttYXJnaW4tbGVmdDozcHh9Lm1sLTV7bWFyZ2luLWxlZnQ6NXB4fS5tbC01LWl7bWFyZ2luLWxlZnQ6NXB4IWltcG9ydGFudH0ubWwtMTB7bWFyZ2luLWxlZnQ6MTBweH0ubWwtMTV7bWFyZ2luLWxlZnQ6MTVweH0ubWwtMjB7bWFyZ2luLWxlZnQ6MjBweH0ubWwtMjAt''@;'; put 'put ''aXttYXJnaW4tbGVmdDoyMHB4IWltcG9ydGFudH0ubXItMHttYXJnaW4tcmlnaHQ6MH0ubXItNXttYXJnaW4tcmlnaHQ6NXB4fS5tci01aXttYXJnaW4tcmlnaHQ6NXB4IWltcG9ydGFudH0ubXItMTB7bWFyZ2luLXJpZ2h0OjEwcHh9Lm1yLTEye21hcmdpbi1yaWdodDoxMnB4fS5tci0yMHtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6MjBweH0ubWItMHttYXJnaW4tYm90dG9tOjB9Lm1iLTBpe21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm1iLTV7bWFyZ2luLWJvdHRvbTo1cHh9Lm1iLTEwe21hcmdpbi1ib3R0b206MTBweH0ubWItMTAtaXttYXJnaW4tYm90dG9tOjEwcHghaW1wb3J0YW50fS5tYi0x''@;'; put 'put ''NXttYXJnaW4tYm90dG9tOjE1cHh9Lm1iLTIwe21hcmdpbi1ib3R0b206MjBweH0ubWItMzB7bWFyZ2luLWJvdHRvbTozMHB4fS5wLTB7cGFkZGluZzowfS5wLTEwe3BhZGRpbmc6MTBweH0ucGItMHtwYWRkaW5nLWJvdHRvbTowfS5wYi0xMHtwYWRkaW5nLWJvdHRvbToxMHB4fS5weS01e3Bh''@;'; put 'put ''ZGRpbmc6NXB4IDB9LnB5LTEwe3BhZGRpbmc6MTBweCAwfS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnQtaXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNv''@;'; put 'put ''bG9yLWdyYXl7Y29sb3I6IzVhNWE1YX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmstZ3JheXtjb2xvcjojNDk1OTY3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFya2VyLWdyYXl7Y29sb3I6IzMxNDM1MX0uY29sb3Itd2hpdGV7Y29sb3I6I2ZmZn0uY29sb3Itd2hp''@;'; put 'put ''dGUtaXtjb2xvcjojZmZmIWltcG9ydGFudH0uY29sb3ItZ3JlZW57Y29sb3I6IzRiOWU0Yn0uY29sb3ItZGMtZ3JlZW57Y29sb3I6IzgxYjQ0MH0uY29sb3ItcmVke2NvbG9yOiNlNDU0NTR9LmNvbG9yLW9yYW5nZXtjb2xvcjojZTY3ZTIyfS5jb2xvci1ibHVle2NvbG9yOiMzZjhjYzN9LmNv''@;'; put 'put ''bG9yLXllbGxvd3tjb2xvcjojZjFjNDBmfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLWRlZnVhbHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1kZWZhdWx0LWl7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50e2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnR9LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zaXplLTE1e2ZvbnQtc2l6ZToxNXB4fS5mb250LXNp''@;'; put 'put ''emUtMTh7Zm9udC1zaXplOjE4cHh9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZvbnQtYm9sZC1pe2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnR9LmZvbnQtd2VpZ2h0LTMwMHtmb250LXdlaWdodDozMDB9LmZvbnQtd2VpZ2h0LTcwMHtmb250LXdlaWdodDo3MDB9LndvcmQtYnJlYWt7''@;'; put 'put ''d29yZC1icmVhazpicmVhay13b3JkfS53b3JkLWJyZWFrLWFsbHt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5kLW5vbmV7ZGlzcGxheTpub25lfS5kLWJsb2Nre2Rp''@;'; put 'put ''c3BsYXk6YmxvY2t9LmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kLWZsZXh7ZGlzcGxheTpmbGV4fS5kLWNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXgtdW5zZXR7ZmxleDp1bnNldH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZH0uYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlci1pe2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0u''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1nYXAtNXtnYXA6NXB4fS5jbHItZ2FwLTB7Z2FwOjB9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30uei1pbmRleC1oaWdo''@;'; put 'put ''ZXN0e3otaW5kZXg6MTAwMDAwMDB9LnZlcnRpY2FsLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lmljb24tZGMtZmlsbHtmaWxsOiM4MWI0NDB9LmRhdGFncmlkLWN1c3RvbS1mb290ZXIgLmRhdGFncmlkLW91dGVyLXdyYXBwZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXIsLnRleHQtYXJlYS1mdWxsLXdpZHRoIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJX0udGV4dC1hcmVhLWZ1bGwtd2lkdGggY2xyLXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9LnRleHQtYXJlYS1mdWxs''@;'; put 'put ''LXdpZHRoIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9LnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDotNnB4IWltcG9ydGFudDtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7ei1pbmRleDoxMDAwMCFpbXBvcnRhbnR9LnByb2dyZXNzLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWN7YmFja2dyb3VuZC1jb2xvcjojZjVmNmZlO2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6NnB4O21hcmdpbjowO21heC1oZWlnaHQ6LjU4MzMzM3JlbTttaW4taGVpZ2h0Oi4xNjY2NjdyZW07b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7d2lkdGg6Y2Fs''@;'; put 'put ''YygxMDAlIC0gNjNweCl9LnByb2dyZXNzLmxvb3A6YWZ0ZXJ7YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1sb29wZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtjb250ZW50OiIgIjt0b3A6LjE2NjY2N3JlbTtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9j''@;'; put 'put ''aztiYWNrZ3JvdW5kLWNvbG9yOiM2MGI1MTU7d2lkdGg6NzUlfS5iYWRnZS13YXJuaW5ne2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhIC5jYXJkLWhlYWRlciBoM3ttYXJnaW4tdG9wOjEwcHh9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtw''@;'; put 'put ''YWRkaW5nOjE1cHggMTVweCAwfS5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uc2hvdy1jbG9zZSAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2''@;'; put 'put ''ZTt0b3A6LTE4cHg7cmlnaHQ6LTEwcHh9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojZDk0YjJlO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmNhcmQtaGVhZGVye2ZvbnQtd2VpZ2h0OjMwMH0uc2VsZWN0IHNlbGVjdDpmb2N1c3tib3JkZXItYm90dG9tOjFweCBz''@;'; put 'put ''b2xpZCAjNDk1OTY3O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZyx0cmFuc3BhcmVudCA5NSUsIzQ5NWE2NyAwKSBuby1yZXBlYXR9LmNsci10cmVlbm9kZS1jaGlsZHJlbnttYXJnaW4tbGVmdDouMnJlbSFpbXBvcnRhbnR9LnRhYmxlLWFjdGl2ZTpmb2N1c3tiYWNrZ3JvdW5k''@;'; put 'put ''OiNkOGUzZTl9Y2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcixjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0e3dpZHRoOjEwMCV9dGJvZHl7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6NDAwfWgzLGg0e2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxcmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9aDEsaDJ7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNw''@;'; put 'put ''YWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjJyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1jbHItaWNvbi5pcy1pbmZve2ZpbGw6IzgwYjQ0MX0uZGF0YWdyaWQtaG9zdCwuZGF0YWdyaWQtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Vi''@;'; put 'put ''a2l0LWJveCFpbXBvcnRhbnR9LmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNvbG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uYnRu''@;'; put 'put ''LmJ0bi1zbTpoYXMoY2xyLWljb24pe2xpbmUtaGVpZ2h0OjJ9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZmxleC0xe2ZsZXg6MX0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZs''@;'; put 'put ''ZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uYm9yZGVyLTB7Ym9yZGVyOjB9LmJveC1zaGFkb3ctbm9uZXtib3gtc2hhZG93Om5vbmV9LmJveC1zaGFkb3ctbm9uZS1pe2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Lmh0Q3VzdG9tSGlkZGVue2Rpc3BsYXk6bm9uZX1ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSAuaHREYXJre2JhY2tncm91bmQ6Izg4ODtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmh0RGFya3tiYWNrZ3JvdW5kOiMzYzU2NjI7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5kYXJrVEg6bm90KC5w''@;'; put 'put ''cmltYXJ5S2V5SGVhZGVyU3R5bGUpe2JhY2tncm91bmQ6IzQ4N2Q5Njtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmRhcmtUSC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQ6IzNiNmI4MX0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Nv''@;'; put 'put ''bG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6I2U2MjcwMGFkIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHJl''@;'; put 'put ''ZCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAubnVtZXJpY0xpc3Rib3h7dGV4dC1hbGlnbjpyaWdodH0ubWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpo''@;'; put 'put ''aWRkZW59Lm5vLWJvcmRlcnN7Ym9yZGVyOjB9LmNhcmQubm8tYm9yZGVycywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtZm9vdGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtaGVh''@;'; put 'put ''ZGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1mb290ZXJ7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LmQtc20tbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLXNt''@;'; put 'put ''LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1zbS10YWJs''@;'; put 'put ''ZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHIt''@;'; put 'put ''ZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLXNtLTV7Z2FwOjVweH0uY2xyLWdhcC1zbS0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1tZC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1w''@;'; put 'put ''b3J0YW50fS5kLW1kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbWQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbWQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwh''@;'; put 'put ''aW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1tZC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OnJvd30uY2xyLWdhcC1tZC01e2dhcDo1cHh9LmNsci1nYXAtbWQtMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbGctaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1sZy1pbmxpbmUtYmxvY2t7''@;'; put 'put ''ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWxnLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLWxnLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3Bs''@;'; put 'put ''YXk6ZmxleCFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbGctNXtnYXA6NXB4''@;'; put 'put ''fS5jbHItZ2FwLWxnLTB7Z2FwOjB9fS5kYXRhZ3JpZC1ib2R5e3BhZGRpbmctYm90dG9tOjJyZW0haW1wb3J0YW50fS5hYm9ydE1zZ3t3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTptb25vc3BhY2V9I2dyYXBoIHN2Z3toZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5uby10YWJsZS1z''@;'; put 'put ''ZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDox''@;'; put 'put ''MDAlO2hlaWdodDoxMDAlO3RvcDowfS5jb3B5UmlnaHR7YmFja2dyb3VuZDojNDk1OTY3IWltcG9ydGFudDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMCA0cHg7ei1pbmRleDox''@;'; put 'put ''MDB9Lm5hdi10cmVlPmNsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1jbHItdHJlZS1ub2Rle292ZXJmbG93LXk6dmlzaWJsZX1jbHItdHJlZS1ub2RlOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNhcmV0e3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7cGFkZGluZzowIDhweDt3aWR0aDphdXRvO2hlaWdodDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn1jbHIt''@;'; put 'put ''dHJlZS1ub2RlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBl''@;'; put 'put ''cntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206''@;'; put 'put ''MDttYXJnaW46MCAwIDNweDtjdXJzb3I6cG9pbnRlcn0uY2xyLXRyZWUtbm9kZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXJ7d2lkdGg6MTAwJX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7Lnd0SG9sZGVye3dpZHRoOjEwMCUhaW1wb3J0YW50fX1p''@;'; put 'put ''bnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtjbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtwYWRkaW5nLWJvdHRvbToyMHB4O21pbi1oZWlnaHQ6YXV0b30uY2xy''@;'; put 'put ''LXRyZWUtbm9kZXttaW4taGVpZ2h0OjI0cHh9LmNsci10cmVlbm9kZS1jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue21pbi13aWR0aDoxNnB4O21pbi1oZWlnaHQ6''@;'; put 'put ''MTZweH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntib3R0b206MnB4fS5jb250ZW50LWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0uY29udGVudC1hcmVhPi5jYXJke21hcmdpbi1ib3R0b206MjBweH0ucmVjb3JkLWVkaXQtbW9kYWwgdGV4dGFyZWF7bWluLWhlaWdodDo0MnB4fX0uYm9y''@;'; put 'put ''ZGVyLWJvdHRvbS1kaXZpZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9LmxvYWRpbmdTcGlubmVye2hlaWdodDo3MHZoO2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5k''@;'; put 'put ''aXNhYmxlLXBhc3N3b3JkLW1hbmFnZXJ7LXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2M7LW1vei10ZXh0LXNlY3VyaXR5OmRpc2M7dGV4dC1zZWN1cml0eTpkaXNjO2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzY30ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9aHIubGlnaHR7Ym9y''@;'; put 'put ''ZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZGVkZX0uc3Bpbm5lcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NwaW5uZXIuMTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvY2FyZXQuNjVmMWZjMGFjYmU0YzdmZi1zdmcpIWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XSAudGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dyb3VuZDojMjEzMzNifS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUt''@;'; put 'put ''c2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29u''@;'; put 'put ''e2N1cnNvcjpwb2ludGVyfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBbbmFtZT1zZWFyY2gtaW5wdXRde3BhZGRpbmctcmlnaHQ6MjVweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJnaW4tdG9wOi01cHg7bWFyZ2luLXJpZ2h0OjB9''@;'; put 'put ''LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXIgbGFiZWx7ZGlzcGxheTpub25lfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItY2hlY2tib3gtY29udGFpbmVye21hcmdpbi10b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bp''@;'; put 'put ''bi1idXR0b24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0u''@;'; put 'put ''ZGMtbG9ja2VkLWNvbnRyb2x7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fS5saW5rLWl0e2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Cg=='';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-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=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=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; %let service=spinner-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=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; 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;